aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile9
-rw-r--r--lib/asn1/Makefile2
-rw-r--r--lib/asn1/c_src/Makefile9
-rw-r--r--lib/asn1/c_src/asn1_erl_nif.c2
-rw-r--r--lib/asn1/doc/src/Makefile2
-rw-r--r--lib/asn1/doc/src/asn1_getting_started.xml2
-rw-r--r--lib/asn1/doc/src/asn1_introduction.xml2
-rw-r--r--lib/asn1/doc/src/asn1_overview.xml2
-rw-r--r--lib/asn1/doc/src/asn1_spec.xmlsrc2
-rw-r--r--lib/asn1/doc/src/asn1ct.xml2
-rw-r--r--lib/asn1/doc/src/asn1rt.xml2
-rw-r--r--lib/asn1/doc/src/book.xml2
-rw-r--r--lib/asn1/doc/src/notes.xml17
-rw-r--r--lib/asn1/doc/src/part.xml2
-rw-r--r--lib/asn1/doc/src/ref_man.xml2
-rw-r--r--lib/asn1/doc/users_guide/Makefile2
-rw-r--r--lib/asn1/src/Makefile2
-rw-r--r--lib/asn1/src/asn1.appup.src2
-rw-r--r--lib/asn1/src/asn1_db.erl2
-rw-r--r--lib/asn1/src/asn1_records.hrl2
-rw-r--r--lib/asn1/src/asn1ct.erl2
-rw-r--r--lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl18
-rw-r--r--lib/asn1/src/asn1ct_constructed_per.erl2
-rw-r--r--lib/asn1/src/asn1ct_func.erl2
-rw-r--r--lib/asn1/src/asn1ct_gen.erl2
-rw-r--r--lib/asn1/src/asn1ct_gen_ber_bin_v2.erl2
-rw-r--r--lib/asn1/src/asn1ct_gen_check.erl2
-rw-r--r--lib/asn1/src/asn1ct_gen_per.erl2
-rw-r--r--lib/asn1/src/asn1ct_imm.erl2
-rw-r--r--lib/asn1/src/asn1ct_name.erl2
-rw-r--r--lib/asn1/src/asn1ct_parser2.erl2
-rw-r--r--lib/asn1/src/asn1ct_pretty_format.erl2
-rw-r--r--lib/asn1/src/asn1ct_table.erl2
-rw-r--r--lib/asn1/src/asn1ct_tok.erl2
-rw-r--r--lib/asn1/src/asn1ct_value.erl7
-rw-r--r--lib/asn1/src/asn1rt.erl2
-rw-r--r--lib/asn1/src/asn1rt_nif.erl2
-rw-r--r--lib/asn1/src/asn1rtt_ber.erl2
-rw-r--r--lib/asn1/src/asn1rtt_check.erl2
-rw-r--r--lib/asn1/src/asn1rtt_ext.erl2
-rw-r--r--lib/asn1/src/asn1rtt_per.erl2
-rw-r--r--lib/asn1/src/asn1rtt_per_common.erl2
-rw-r--r--lib/asn1/src/asn1rtt_real_common.erl2
-rw-r--r--lib/asn1/src/asn1rtt_uper.erl2
-rw-r--r--lib/asn1/src/prepare_templates.erl2
-rw-r--r--lib/asn1/test/External.hrl2
-rw-r--r--lib/asn1/test/Makefile2
-rw-r--r--lib/asn1/test/asn1_SUITE.erl40
-rw-r--r--lib/asn1/test/asn1_SUITE_data/Extension-Addition-Group.asn2
-rw-r--r--lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl2
-rw-r--r--lib/asn1/test/asn1_SUITE_data/a_SeqIn.erl2
-rw-r--r--lib/asn1/test/asn1_SUITE_data/b_SeqIn.erl2
-rw-r--r--lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl2
-rw-r--r--lib/asn1/test/asn1_SUITE_data/test_records.erl21
-rw-r--r--lib/asn1/test/asn1_SUITE_data/testobj.erl2
-rw-r--r--lib/asn1/test/asn1_app_test.erl26
-rw-r--r--lib/asn1/test/asn1_appup_test.erl6
-rw-r--r--lib/asn1/test/asn1_test_lib.erl25
-rw-r--r--lib/asn1/test/ber_decode_error.erl2
-rw-r--r--lib/asn1/test/error_SUITE.erl8
-rw-r--r--lib/asn1/test/h323test.erl4
-rw-r--r--lib/asn1/test/syntax_SUITE.erl6
-rw-r--r--lib/asn1/test/testChoExtension.erl4
-rw-r--r--lib/asn1/test/testChoExternal.erl4
-rw-r--r--lib/asn1/test/testChoOptional.erl2
-rw-r--r--lib/asn1/test/testChoPrim.erl4
-rw-r--r--lib/asn1/test/testChoRecursive.erl4
-rw-r--r--lib/asn1/test/testChoTypeRefCho.erl4
-rw-r--r--lib/asn1/test/testChoTypeRefPrim.erl4
-rw-r--r--lib/asn1/test/testChoTypeRefSeq.erl4
-rw-r--r--lib/asn1/test/testChoTypeRefSet.erl4
-rw-r--r--lib/asn1/test/testChoiceIndefinite.erl4
-rw-r--r--lib/asn1/test/testCompactBitString.erl2
-rw-r--r--lib/asn1/test/testConstraints.erl4
-rw-r--r--lib/asn1/test/testContextSwitchingTypes.erl6
-rw-r--r--lib/asn1/test/testDER.erl4
-rw-r--r--lib/asn1/test/testDeepTConstr.erl4
-rw-r--r--lib/asn1/test/testDef.erl4
-rw-r--r--lib/asn1/test/testDoubleEllipses.erl4
-rw-r--r--lib/asn1/test/testEnumExt.erl4
-rw-r--r--lib/asn1/test/testExtensibilityImplied.erl2
-rw-r--r--lib/asn1/test/testFragmented.erl2
-rw-r--r--lib/asn1/test/testINSTANCE_OF.erl4
-rw-r--r--lib/asn1/test/testImporting.erl2
-rw-r--r--lib/asn1/test/testInfObj.erl2
-rw-r--r--lib/asn1/test/testInfObjExtract.erl2
-rw-r--r--lib/asn1/test/testInfObjectClass.erl4
-rw-r--r--lib/asn1/test/testMegaco.erl8
-rw-r--r--lib/asn1/test/testMergeCompile.erl18
-rw-r--r--lib/asn1/test/testMultipleLevels.erl2
-rw-r--r--lib/asn1/test/testNBAPsystem.erl20
-rw-r--r--lib/asn1/test/testOpenTypeImplicitTag.erl4
-rw-r--r--lib/asn1/test/testOpt.erl4
-rw-r--r--lib/asn1/test/testParamBasic.erl4
-rw-r--r--lib/asn1/test/testParameterizedInfObj.erl10
-rw-r--r--lib/asn1/test/testPrim.erl4
-rw-r--r--lib/asn1/test/testPrimExternal.erl4
-rw-r--r--lib/asn1/test/testPrimStrings.erl6
-rw-r--r--lib/asn1/test/testRfcs.erl8
-rw-r--r--lib/asn1/test/testSSLspecs.erl54
-rw-r--r--lib/asn1/test/testSelectionTypes.erl4
-rw-r--r--lib/asn1/test/testSeq2738.erl4
-rw-r--r--lib/asn1/test/testSeqDefault.erl4
-rw-r--r--lib/asn1/test/testSeqExtension.erl4
-rw-r--r--lib/asn1/test/testSeqExternal.erl4
-rw-r--r--lib/asn1/test/testSeqOf.erl4
-rw-r--r--lib/asn1/test/testSeqOfCho.erl4
-rw-r--r--lib/asn1/test/testSeqOfExternal.erl4
-rw-r--r--lib/asn1/test/testSeqOfIndefinite.erl18
-rw-r--r--lib/asn1/test/testSeqOfTag.erl4
-rw-r--r--lib/asn1/test/testSeqOptional.erl4
-rw-r--r--lib/asn1/test/testSeqPrim.erl4
-rw-r--r--lib/asn1/test/testSeqSetDefaultVal.erl4
-rw-r--r--lib/asn1/test/testSeqSetIndefinite.erl4
-rw-r--r--lib/asn1/test/testSeqTag.erl4
-rw-r--r--lib/asn1/test/testSeqTypeRefCho.erl4
-rw-r--r--lib/asn1/test/testSeqTypeRefPrim.erl4
-rw-r--r--lib/asn1/test/testSeqTypeRefSeq.erl4
-rw-r--r--lib/asn1/test/testSeqTypeRefSet.erl4
-rw-r--r--lib/asn1/test/testSetDefault.erl4
-rw-r--r--lib/asn1/test/testSetExtension.erl4
-rw-r--r--lib/asn1/test/testSetExternal.erl4
-rw-r--r--lib/asn1/test/testSetOf.erl4
-rw-r--r--lib/asn1/test/testSetOfCho.erl4
-rw-r--r--lib/asn1/test/testSetOfExternal.erl4
-rw-r--r--lib/asn1/test/testSetOfTag.erl4
-rw-r--r--lib/asn1/test/testSetOptional.erl2
-rw-r--r--lib/asn1/test/testSetPrim.erl4
-rw-r--r--lib/asn1/test/testSetTag.erl4
-rw-r--r--lib/asn1/test/testSetTypeRefCho.erl4
-rw-r--r--lib/asn1/test/testSetTypeRefPrim.erl4
-rw-r--r--lib/asn1/test/testSetTypeRefSeq.erl4
-rw-r--r--lib/asn1/test/testSetTypeRefSet.erl4
-rw-r--r--lib/asn1/test/testTCAP.erl20
-rw-r--r--lib/asn1/test/testTcapsystem.erl2
-rw-r--r--lib/asn1/test/testTimer.erl4
-rw-r--r--lib/asn1/test/testTypeValueNotation.erl2
-rw-r--r--lib/asn1/test/testUniqueObjectSets.erl2
-rw-r--r--lib/asn1/test/testValueTest.erl2
-rw-r--r--lib/asn1/test/test_compile_options.erl87
-rw-r--r--lib/asn1/test/test_modified_x420.erl6
-rw-r--r--lib/asn1/test/test_partial_incomplete_decode.erl62
-rw-r--r--lib/asn1/test/test_selective_decode.erl4
-rw-r--r--lib/asn1/test/test_special_decode_performance.erl26
-rw-r--r--lib/asn1/test/test_undecoded_rest.erl6
-rw-r--r--lib/asn1/test/test_x691.erl4
-rw-r--r--lib/asn1/vsn.mk2
-rw-r--r--lib/common_test/Makefile2
-rw-r--r--lib/common_test/doc/src/Makefile2
-rw-r--r--lib/common_test/doc/src/basics_chapter.xml2
-rw-r--r--lib/common_test/doc/src/book.xml2
-rw-r--r--lib/common_test/doc/src/common_test_app.xml2
-rw-r--r--lib/common_test/doc/src/config_file_chapter.xml2
-rw-r--r--lib/common_test/doc/src/cover_chapter.xml2
-rw-r--r--lib/common_test/doc/src/ct.xml4
-rw-r--r--lib/common_test/doc/src/ct_cover.xml2
-rw-r--r--lib/common_test/doc/src/ct_ftp.xml2
-rw-r--r--lib/common_test/doc/src/ct_hooks.xml2
-rw-r--r--lib/common_test/doc/src/ct_hooks_chapter.xml2
-rw-r--r--lib/common_test/doc/src/ct_master.xml2
-rw-r--r--lib/common_test/doc/src/ct_master_chapter.xml2
-rw-r--r--lib/common_test/doc/src/ct_netconfc.xml9
-rw-r--r--lib/common_test/doc/src/ct_property_test.xml2
-rw-r--r--lib/common_test/doc/src/ct_rpc.xml2
-rw-r--r--lib/common_test/doc/src/ct_run.xml2
-rw-r--r--lib/common_test/doc/src/ct_slave.xml2
-rw-r--r--lib/common_test/doc/src/ct_snmp.xml2
-rw-r--r--lib/common_test/doc/src/ct_ssh.xml2
-rw-r--r--lib/common_test/doc/src/ct_telnet.xml2
-rw-r--r--lib/common_test/doc/src/dependencies_chapter.xml2
-rw-r--r--lib/common_test/doc/src/event_handler_chapter.xml2
-rw-r--r--lib/common_test/doc/src/example_chapter.xml2
-rw-r--r--lib/common_test/doc/src/getting_started_chapter.xml2
-rw-r--r--lib/common_test/doc/src/install_chapter.xml2
-rw-r--r--lib/common_test/doc/src/introduction.xml2
-rw-r--r--lib/common_test/doc/src/notes.xml21
-rw-r--r--lib/common_test/doc/src/notes_history.xml2
-rw-r--r--lib/common_test/doc/src/part.xml2
-rw-r--r--lib/common_test/doc/src/part_notes.xml2
-rw-r--r--lib/common_test/doc/src/part_notes_history.xml2
-rw-r--r--lib/common_test/doc/src/ref_man.xml2
-rw-r--r--lib/common_test/doc/src/run_test_chapter.xml2
-rw-r--r--lib/common_test/doc/src/test_structure_chapter.xml2
-rw-r--r--lib/common_test/doc/src/unix_telnet.xml2
-rw-r--r--lib/common_test/doc/src/why_test_chapter.xml2
-rw-r--r--lib/common_test/doc/src/write_test_chapter.xml2
-rw-r--r--lib/common_test/include/ct.hrl10
-rw-r--r--lib/common_test/include/ct_event.hrl2
-rw-r--r--lib/common_test/priv/Makefile2
-rw-r--r--lib/common_test/priv/Makefile.in2
-rw-r--r--lib/common_test/src/Makefile15
-rw-r--r--lib/common_test/src/common_test.app.src44
-rw-r--r--lib/common_test/src/common_test.appup.src2
-rw-r--r--lib/common_test/src/ct.erl4
-rw-r--r--lib/common_test/src/ct_config.erl52
-rw-r--r--lib/common_test/src/ct_config_plain.erl2
-rw-r--r--lib/common_test/src/ct_config_xml.erl2
-rw-r--r--lib/common_test/src/ct_conn_log_h.erl2
-rw-r--r--lib/common_test/src/ct_cover.erl2
-rw-r--r--lib/common_test/src/ct_event.erl2
-rw-r--r--lib/common_test/src/ct_framework.erl12
-rw-r--r--lib/common_test/src/ct_ftp.erl4
-rw-r--r--lib/common_test/src/ct_gen_conn.erl2
-rw-r--r--lib/common_test/src/ct_groups.erl18
-rw-r--r--lib/common_test/src/ct_hooks.erl5
-rw-r--r--lib/common_test/src/ct_hooks_lock.erl4
-rw-r--r--lib/common_test/src/ct_logs.erl149
-rw-r--r--lib/common_test/src/ct_make.erl7
-rw-r--r--lib/common_test/src/ct_master.erl26
-rw-r--r--lib/common_test/src/ct_master_event.erl2
-rw-r--r--lib/common_test/src/ct_master_logs.erl45
-rw-r--r--lib/common_test/src/ct_master_status.erl2
-rw-r--r--lib/common_test/src/ct_netconfc.erl2
-rw-r--r--lib/common_test/src/ct_netconfc.hrl2
-rw-r--r--lib/common_test/src/ct_property_test.erl10
-rw-r--r--lib/common_test/src/ct_release_test.erl46
-rw-r--r--lib/common_test/src/ct_repeat.erl8
-rw-r--r--lib/common_test/src/ct_rpc.erl8
-rw-r--r--lib/common_test/src/ct_run.erl102
-rw-r--r--lib/common_test/src/ct_slave.erl6
-rw-r--r--lib/common_test/src/ct_snmp.erl80
-rw-r--r--lib/common_test/src/ct_ssh.erl6
-rw-r--r--lib/common_test/src/ct_telnet.erl6
-rw-r--r--lib/common_test/src/ct_telnet_client.erl6
-rw-r--r--lib/common_test/src/ct_testspec.erl2
-rw-r--r--lib/common_test/src/ct_util.erl25
-rw-r--r--lib/common_test/src/ct_util.hrl2
-rw-r--r--lib/common_test/src/ct_webtool.erl41
-rw-r--r--lib/common_test/src/ct_webtool_sup.erl2
-rw-r--r--lib/common_test/src/cth_conn_log.erl4
-rw-r--r--lib/common_test/src/cth_log_redirect.erl11
-rw-r--r--lib/common_test/src/cth_surefire.erl2
-rw-r--r--lib/common_test/src/erl2html2.erl (renamed from lib/test_server/src/erl2html2.erl)51
-rw-r--r--lib/common_test/src/test_server.erl (renamed from lib/test_server/src/test_server.erl)135
-rw-r--r--lib/common_test/src/test_server_ctrl.erl (renamed from lib/test_server/src/test_server_ctrl.erl)83
-rw-r--r--lib/common_test/src/test_server_gl.erl (renamed from lib/test_server/src/test_server_gl.erl)9
-rw-r--r--lib/common_test/src/test_server_internal.hrl (renamed from lib/test_server/src/test_server_internal.hrl)2
-rw-r--r--lib/common_test/src/test_server_io.erl (renamed from lib/test_server/src/test_server_io.erl)19
-rw-r--r--lib/common_test/src/test_server_node.erl (renamed from lib/test_server/src/test_server_node.erl)15
-rw-r--r--lib/common_test/src/test_server_sup.erl (renamed from lib/test_server/src/test_server_sup.erl)7
-rw-r--r--lib/common_test/src/unix_telnet.erl2
-rw-r--r--lib/common_test/src/vts.erl21
-rw-r--r--lib/common_test/test/Makefile15
-rw-r--r--lib/common_test/test/common_test.cover7
-rw-r--r--lib/common_test/test/ct_auto_compile_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_auto_compile_SUITE_data/bad_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_auto_compile_SUITE_data/dummy_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_basic_html_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_basic_html_SUITE_data/babbling_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_config_SUITE.erl55
-rw-r--r--lib/common_test/test/ct_config_SUITE_data/config/test/config_driver.erl2
-rw-r--r--lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl11
-rw-r--r--lib/common_test/test/ct_config_SUITE_data/config/test/config_server.erl2
-rw-r--r--lib/common_test/test/ct_config_SUITE_data/config/test/config_static_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_config_info_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_config_info_SUITE_data/config_info_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_cover_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_cover_SUITE_data/cover_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_cover_nomerge_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_local_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_nostop_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_10_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_11_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_12_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_13_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_14_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_3_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_4_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_5_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_6_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_7_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_8_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_9_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/config_func_error_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/config_restored_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/lib_error_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/misc_error_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/no_compile_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_3_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_4_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_5_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_6_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_7_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_8_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_utils.erl2
-rw-r--r--lib/common_test/test/ct_error_SUITE_data/error/test/verify_config.erl2
-rw-r--r--lib/common_test/test/ct_event_handler_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_event_handler_SUITE_data/eh_A.erl4
-rw-r--r--lib/common_test/test/ct_event_handler_SUITE_data/event_handling_1/test/eh_11_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_gen_conn_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl70
-rw-r--r--lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl2
-rw-r--r--lib/common_test/test/ct_group_info_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_group_info_SUITE_data/group_require_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_group_info_SUITE_data/group_require_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_group_info_SUITE_data/group_require_3_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_3_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_group_leader_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_group_leader_SUITE_data/group_leader_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_search_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_spec_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_spec_SUITE_data/groups_spec_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_11_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_12_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_21_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_22_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/missing_conf_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/repeat_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_21_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_22_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE.erl4
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_id_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_init_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_empty_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_one_skip_one_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_per_suite_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_prio_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_data_dir_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_exit_in_init_scope_suite_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_no_config_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_state_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_state_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_tc_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_crash_in_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_state_cth_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_update_config_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl12
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/empty_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_post_suite_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_pre_suite_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/id_no_init_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_terminate_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/prio_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/recover_post_suite_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/same_id_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_post_suite_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_suite_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/state_update_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/undef_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/update_config_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_config_cth.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_data_dir_cth.erl2
-rw-r--r--lib/common_test/test/ct_log_SUITE.erl328
-rw-r--r--lib/common_test/test/ct_master_SUITE.erl4
-rw-r--r--lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_misc_1_SUITE.erl3
-rw-r--r--lib/common_test/test/ct_misc_1_SUITE_data/beam_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_misc_1_SUITE_data/beam_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE.erl29
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl281
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl52
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/netconfc_test_lib.erl166
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/ns.erl10
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key13
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key.pub11
-rw-r--r--lib/common_test/test/ct_pre_post_test_io_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl2
-rw-r--r--lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_priv_dir_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_priv_dir_SUITE_data/priv_dir_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_release_test_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_release_test_SUITE_data/release_test_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_repeat_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_repeat_1_SUITE_data/repeat_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_repeat_testrun_SUITE.erl62
-rw-r--r--lib/common_test/test/ct_repeat_testrun_SUITE_data/a_test/r1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_repeat_testrun_SUITE_data/b_test/r2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_sequence_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_sequence_1_SUITE_data/subgroups_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_shell_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_10_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_11_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_12_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_3_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_4_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_5_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_6_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_7_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_8_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_9_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_3_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_4_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_5_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_6_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_7_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_smoke_test_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_smoke_test_SUITE_data/happy_1/test/happy_11_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_smoke_test_SUITE_data/happy_2_test/happy_21_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_snmp_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_snmp_SUITE_data/snmp_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_surefire_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_surefire_SUITE_data/surefire_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_system_error_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_system_error_SUITE_data/a_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_telnet_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl15
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_3_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_4_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_5_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_6_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_7_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_8_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_test_support.erl16
-rw-r--r--lib/common_test/test/ct_test_support_eh.erl4
-rw-r--r--lib/common_test/test/ct_testspec_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_11_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_12_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_21_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_22_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_1_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_2_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_3_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t11_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t12_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t21_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t22_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t23_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_userconfig_callback.erl2
-rw-r--r--lib/common_test/test/ct_verbosity_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_verbosity_SUITE_data/io_test_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_verbosity_SUITE_data/simple_evh.erl2
-rw-r--r--lib/common_test/test/erl2html2_SUITE.erl (renamed from lib/test_server/test/erl2html2_SUITE.erl)2
-rw-r--r--lib/common_test/test/erl2html2_SUITE_data/Makefile.src (renamed from lib/test_server/test/erl2html2_SUITE_data/Makefile.src)0
-rw-r--r--lib/common_test/test/erl2html2_SUITE_data/header1.hrl (renamed from lib/test_server/test/erl2html2_SUITE_data/header1.hrl)0
-rw-r--r--lib/common_test/test/erl2html2_SUITE_data/include/header2.hrl (renamed from lib/test_server/test/erl2html2_SUITE_data/include/header2.hrl)0
-rw-r--r--lib/common_test/test/erl2html2_SUITE_data/include/header3.hrl (renamed from lib/test_server/test/erl2html2_SUITE_data/include/header3.hrl)0
-rw-r--r--lib/common_test/test/erl2html2_SUITE_data/m1.erl (renamed from lib/test_server/test/erl2html2_SUITE_data/m1.erl)0
-rw-r--r--lib/common_test/test/telnet_server.erl58
-rw-r--r--lib/common_test/test/test_server_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE.erl)6
-rw-r--r--lib/common_test/test/test_server_SUITE_data/Makefile.src (renamed from lib/test_server/test/test_server_SUITE_data/Makefile.src)0
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_SUITE.erl)5
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_SUITE_data/dummy_file (renamed from lib/test_server/test/test_server_SUITE_data/test_server_SUITE_data/dummy_file)0
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_break_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_break_SUITE.erl)4
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_conf01_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_conf01_SUITE.erl)4
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_conf02_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_conf02_SUITE.erl)4
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_cover_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_cover_SUITE.erl)4
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_cover_SUITE_data/cover_helper.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_cover_SUITE_data/cover_helper.erl)0
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_parallel01_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_parallel01_SUITE.erl)4
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_shuffle01_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_shuffle01_SUITE.erl)23
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_skip_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_skip_SUITE.erl)5
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_unicode_SUITE.erl (renamed from lib/test_server/test/test_server_SUITE_data/test_server_unicode_SUITE.erl)4
-rw-r--r--lib/common_test/test/test_server_test_lib.erl (renamed from lib/test_server/test/test_server_test_lib.erl)2
-rw-r--r--lib/common_test/test/test_server_test_lib.hrl (renamed from lib/test_server/test/test_server_test_lib.hrl)0
-rw-r--r--lib/common_test/test_server/Makefile (renamed from lib/webtool/src/Makefile)82
-rw-r--r--lib/common_test/test_server/conf_vars.in (renamed from lib/test_server/src/conf_vars.in)0
-rw-r--r--lib/common_test/test_server/configure.in (renamed from lib/test_server/src/configure.in)2
-rw-r--r--lib/common_test/test_server/cross.cover (renamed from lib/test_server/src/cross.cover)0
-rw-r--r--lib/common_test/test_server/ts.config (renamed from lib/test_server/src/ts.config)4
-rw-r--r--lib/common_test/test_server/ts.erl (renamed from lib/test_server/src/ts.erl)2
-rw-r--r--lib/common_test/test_server/ts.hrl (renamed from lib/test_server/src/ts.hrl)2
-rw-r--r--lib/common_test/test_server/ts.unix.config (renamed from lib/test_server/src/ts.unix.config)0
-rw-r--r--lib/common_test/test_server/ts.win32.config (renamed from lib/test_server/src/ts.win32.config)0
-rw-r--r--lib/common_test/test_server/ts_autoconf_win32.erl (renamed from lib/test_server/src/ts_autoconf_win32.erl)12
-rw-r--r--lib/common_test/test_server/ts_benchmark.erl (renamed from lib/test_server/src/ts_benchmark.erl)2
-rw-r--r--lib/common_test/test_server/ts_erl_config.erl (renamed from lib/test_server/src/ts_erl_config.erl)2
-rw-r--r--lib/common_test/test_server/ts_install.erl (renamed from lib/test_server/src/ts_install.erl)11
-rw-r--r--lib/common_test/test_server/ts_install_cth.erl (renamed from lib/test_server/src/ts_install_cth.erl)2
-rw-r--r--lib/common_test/test_server/ts_lib.erl (renamed from lib/test_server/src/ts_lib.erl)2
-rw-r--r--lib/common_test/test_server/ts_make.erl (renamed from lib/test_server/src/ts_make.erl)4
-rw-r--r--lib/common_test/test_server/ts_run.erl (renamed from lib/test_server/src/ts_run.erl)15
-rw-r--r--lib/common_test/vsn.mk2
-rw-r--r--lib/compiler/Makefile2
-rw-r--r--lib/compiler/doc/src/Makefile2
-rw-r--r--lib/compiler/doc/src/book.xml2
-rw-r--r--lib/compiler/doc/src/compile.xml18
-rw-r--r--lib/compiler/doc/src/notes.xml113
-rw-r--r--lib/compiler/doc/src/notes_history.xml2
-rw-r--r--lib/compiler/doc/src/part_notes.xml2
-rw-r--r--lib/compiler/doc/src/part_notes_history.xml2
-rw-r--r--lib/compiler/doc/src/ref_man.xml2
-rw-r--r--lib/compiler/src/Makefile4
-rw-r--r--lib/compiler/src/beam_a.erl2
-rw-r--r--lib/compiler/src/beam_asm.erl15
-rw-r--r--lib/compiler/src/beam_block.erl505
-rw-r--r--lib/compiler/src/beam_bool.erl10
-rw-r--r--lib/compiler/src/beam_bs.erl278
-rw-r--r--lib/compiler/src/beam_bsm.erl2
-rw-r--r--lib/compiler/src/beam_clean.erl24
-rw-r--r--lib/compiler/src/beam_dead.erl70
-rw-r--r--lib/compiler/src/beam_dict.erl13
-rw-r--r--lib/compiler/src/beam_disasm.erl7
-rw-r--r--lib/compiler/src/beam_disasm.hrl8
-rw-r--r--lib/compiler/src/beam_except.erl10
-rw-r--r--lib/compiler/src/beam_flatten.erl2
-rw-r--r--lib/compiler/src/beam_jump.erl52
-rw-r--r--lib/compiler/src/beam_listing.erl2
-rw-r--r--lib/compiler/src/beam_peep.erl49
-rw-r--r--lib/compiler/src/beam_receive.erl5
-rw-r--r--lib/compiler/src/beam_reorder.erl148
-rw-r--r--lib/compiler/src/beam_split.erl8
-rw-r--r--lib/compiler/src/beam_trim.erl2
-rw-r--r--lib/compiler/src/beam_type.erl224
-rw-r--r--lib/compiler/src/beam_utils.erl147
-rw-r--r--lib/compiler/src/beam_validator.erl185
-rw-r--r--lib/compiler/src/beam_z.erl14
-rw-r--r--lib/compiler/src/cerl.erl47
-rw-r--r--lib/compiler/src/cerl_clauses.erl2
-rw-r--r--lib/compiler/src/cerl_inline.erl2
-rw-r--r--lib/compiler/src/cerl_trees.erl241
-rw-r--r--lib/compiler/src/compile.erl121
-rw-r--r--lib/compiler/src/compiler.app.src4
-rw-r--r--lib/compiler/src/compiler.appup.src2
-rw-r--r--lib/compiler/src/core_lib.erl40
-rw-r--r--lib/compiler/src/core_lint.erl4
-rw-r--r--lib/compiler/src/core_parse.hrl2
-rw-r--r--lib/compiler/src/core_parse.yrl63
-rw-r--r--lib/compiler/src/core_pp.erl170
-rw-r--r--lib/compiler/src/core_scan.erl2
-rw-r--r--lib/compiler/src/erl_bifs.erl2
-rwxr-xr-xlib/compiler/src/genop.tab2
-rw-r--r--lib/compiler/src/rec_env.erl188
-rw-r--r--lib/compiler/src/sys_core_dsetel.erl38
-rw-r--r--lib/compiler/src/sys_core_fold.erl283
-rw-r--r--lib/compiler/src/sys_core_inline.erl2
-rw-r--r--lib/compiler/src/sys_pre_attributes.erl2
-rw-r--r--lib/compiler/src/sys_pre_expand.erl179
-rw-r--r--lib/compiler/src/v3_codegen.erl133
-rw-r--r--lib/compiler/src/v3_core.erl167
-rw-r--r--lib/compiler/src/v3_kernel.erl33
-rw-r--r--lib/compiler/src/v3_kernel.hrl2
-rw-r--r--lib/compiler/src/v3_kernel_pp.erl2
-rw-r--r--lib/compiler/src/v3_life.erl2
-rw-r--r--lib/compiler/src/v3_life.hrl2
-rw-r--r--lib/compiler/test/Makefile16
-rw-r--r--lib/compiler/test/andor_SUITE.erl359
-rw-r--r--lib/compiler/test/apply_SUITE.erl104
-rw-r--r--lib/compiler/test/beam_block_SUITE.erl199
-rw-r--r--lib/compiler/test/beam_bool_SUITE.erl197
-rw-r--r--lib/compiler/test/beam_disasm_SUITE.erl27
-rw-r--r--lib/compiler/test/beam_except_SUITE.erl28
-rw-r--r--lib/compiler/test/beam_jump_SUITE.erl59
-rw-r--r--lib/compiler/test/beam_reorder_SUITE.erl81
-rw-r--r--lib/compiler/test/beam_type_SUITE.erl130
-rw-r--r--lib/compiler/test/beam_utils_SUITE.erl124
-rw-r--r--lib/compiler/test/beam_validator_SUITE.erl350
-rw-r--r--lib/compiler/test/beam_validator_SUITE_data/xrange.S4
-rw-r--r--lib/compiler/test/bif_SUITE.erl65
-rw-r--r--lib/compiler/test/bs_bincomp_SUITE.erl250
-rw-r--r--lib/compiler/test/bs_bit_binaries_SUITE.erl96
-rw-r--r--lib/compiler/test/bs_construct_SUITE.erl199
-rw-r--r--lib/compiler/test/bs_match_SUITE.erl722
-rw-r--r--lib/compiler/test/bs_utf_SUITE.erl152
-rw-r--r--lib/compiler/test/compilation_SUITE.erl591
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_1.erl32
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_10.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_11.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_12.erl30
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_2.erl36
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_3.erl30
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_4.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_5.erl29
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_6.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_8.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/beam_compiler_9.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/bin_syntax_1.erl32
-rw-r--r--lib/compiler/test/compilation_SUITE_data/bin_syntax_2.erl42
-rw-r--r--lib/compiler/test/compilation_SUITE_data/bin_syntax_3.erl36
-rw-r--r--lib/compiler/test/compilation_SUITE_data/bin_syntax_4.erl33
-rw-r--r--lib/compiler/test/compilation_SUITE_data/bin_syntax_6.erl40
-rw-r--r--lib/compiler/test/compilation_SUITE_data/catch_in_catch.erl52
-rw-r--r--lib/compiler/test/compilation_SUITE_data/compiler_1.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/compiler_3.erl34
-rw-r--r--lib/compiler/test/compilation_SUITE_data/compiler_5.erl50
-rw-r--r--lib/compiler/test/compilation_SUITE_data/complex_guard.erl32
-rw-r--r--lib/compiler/test/compilation_SUITE_data/const_list_256.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/convopts.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/guards.erl107
-rw-r--r--lib/compiler/test/compilation_SUITE_data/live_var.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/long_string.erl671
-rw-r--r--lib/compiler/test/compilation_SUITE_data/nested_tuples_in_case_expr.erl37
-rw-r--r--lib/compiler/test/compilation_SUITE_data/opt_crash.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/other/vsn_1.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/other/vsn_3.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_2141.erl25
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_2173.erl32
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_2330.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_2380.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_4790.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5076.erl28
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5092.erl40
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5151.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5235.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5244.erl48
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5404.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5436.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5481.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5553.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5632.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5714.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5872.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_6121.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_6121a.erl33
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_6121b.erl34
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_7202.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/pattern_expr.erl31
-rw-r--r--lib/compiler/test/compilation_SUITE_data/trycatch_4.erl51
-rw-r--r--lib/compiler/test/compilation_SUITE_data/vsn_1.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/vsn_2.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE_data/vsn_3.erl2
-rw-r--r--lib/compiler/test/compile_SUITE.erl892
-rw-r--r--lib/compiler/test/compile_SUITE_data/attributes.erl2
-rw-r--r--lib/compiler/test/compile_SUITE_data/bad_record_use.erl29
-rw-r--r--lib/compiler/test/compile_SUITE_data/bad_record_use2.erl30
-rw-r--r--lib/compiler/test/compile_SUITE_data/big.erl2
-rw-r--r--lib/compiler/test/compile_SUITE_data/include/simple.hrl2
-rw-r--r--lib/compiler/test/compile_SUITE_data/missing_testheap1.erl36
-rw-r--r--lib/compiler/test/compile_SUITE_data/missing_testheap2.erl30
-rw-r--r--lib/compiler/test/compile_SUITE_data/record_access.erl2
-rw-r--r--lib/compiler/test/compile_SUITE_data/simple.erl2
-rw-r--r--lib/compiler/test/compile_SUITE_data/wrong_module_name.erl2
-rw-r--r--lib/compiler/test/core_SUITE.erl16
-rw-r--r--lib/compiler/test/core_fold_SUITE.erl175
-rw-r--r--lib/compiler/test/error_SUITE.erl123
-rw-r--r--lib/compiler/test/error_SUITE_data/head_mismatch_line.erl2
-rw-r--r--lib/compiler/test/float_SUITE.erl100
-rw-r--r--lib/compiler/test/fun_SUITE.erl51
-rw-r--r--lib/compiler/test/guard_SUITE.erl1393
-rw-r--r--lib/compiler/test/inline_SUITE.erl185
-rw-r--r--lib/compiler/test/inline_SUITE_data/attribute.erl2
-rw-r--r--lib/compiler/test/inline_SUITE_data/bsdecode.erl2
-rw-r--r--lib/compiler/test/inline_SUITE_data/bsdes.erl2
-rw-r--r--lib/compiler/test/inline_SUITE_data/decode1.erl2
-rw-r--r--lib/compiler/test/inline_SUITE_data/fname.erl2
-rw-r--r--lib/compiler/test/inline_SUITE_data/itracer.erl2
-rw-r--r--lib/compiler/test/inline_SUITE_data/maps_inline_test.erl2
-rw-r--r--lib/compiler/test/lc_SUITE.erl27
-rw-r--r--lib/compiler/test/map_SUITE.erl72
-rw-r--r--lib/compiler/test/match_SUITE.erl301
-rw-r--r--lib/compiler/test/misc_SUITE.erl155
-rw-r--r--lib/compiler/test/num_bif_SUITE.erl268
-rw-r--r--lib/compiler/test/receive_SUITE.erl47
-rw-r--r--lib/compiler/test/record_SUITE.erl453
-rw-r--r--lib/compiler/test/record_SUITE_data/record_access_in_guards.erl2
-rw-r--r--lib/compiler/test/regressions_SUITE.erl29
-rw-r--r--lib/compiler/test/test_lib.erl31
-rw-r--r--lib/compiler/test/trycatch_SUITE.erl580
-rw-r--r--lib/compiler/test/warnings_SUITE.erl144
-rw-r--r--lib/compiler/vsn.mk2
-rw-r--r--lib/configure.in.src2
-rw-r--r--lib/cosEvent/Makefile2
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin.xml2
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml2
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml2
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml2
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml2
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml2
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml2
-rw-r--r--lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml2
-rw-r--r--lib/cosEvent/doc/src/Makefile2
-rw-r--r--lib/cosEvent/doc/src/book.xml2
-rw-r--r--lib/cosEvent/doc/src/ch_contents.xml2
-rw-r--r--lib/cosEvent/doc/src/ch_event_service.xml2
-rw-r--r--lib/cosEvent/doc/src/ch_introduction.xml2
-rw-r--r--lib/cosEvent/doc/src/cosEventApp.xml2
-rw-r--r--lib/cosEvent/doc/src/notes.xml19
-rw-r--r--lib/cosEvent/doc/src/part.xml2
-rw-r--r--lib/cosEvent/doc/src/part_notes.xml2
-rw-r--r--lib/cosEvent/doc/src/ref_man.xml2
-rw-r--r--lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl2
-rw-r--r--lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl2
-rw-r--r--lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl2
-rw-r--r--lib/cosEvent/src/Makefile2
-rw-r--r--lib/cosEvent/src/cosEventApp.erl2
-rw-r--r--lib/cosEvent/src/cosEventApp.hrl2
-rw-r--r--lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl2
-rw-r--r--lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl2
-rw-r--r--lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl2
-rw-r--r--lib/cosEvent/test/Makefile6
-rw-r--r--lib/cosEvent/test/event_channel_SUITE.erl21
-rw-r--r--lib/cosEvent/test/event_test_PullC_impl.erl2
-rw-r--r--lib/cosEvent/test/event_test_PullS_impl.erl2
-rw-r--r--lib/cosEvent/test/event_test_PushC_impl.erl2
-rw-r--r--lib/cosEvent/test/event_test_PushS_impl.erl2
-rw-r--r--lib/cosEvent/test/event_test_server.idl2
-rw-r--r--lib/cosEvent/test/generated_SUITE.erl54
-rw-r--r--lib/cosEvent/vsn.mk2
-rw-r--r--lib/cosEventDomain/Makefile2
-rw-r--r--lib/cosEventDomain/doc/src/CosEventDomainAdmin.xml2
-rw-r--r--lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomain.xml2
-rw-r--r--lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomainFactory.xml2
-rw-r--r--lib/cosEventDomain/doc/src/Makefile2
-rw-r--r--lib/cosEventDomain/doc/src/book.xml2
-rw-r--r--lib/cosEventDomain/doc/src/ch_QoS.xml2
-rw-r--r--lib/cosEventDomain/doc/src/ch_contents.xml2
-rw-r--r--lib/cosEventDomain/doc/src/ch_event_domain_service.xml2
-rw-r--r--lib/cosEventDomain/doc/src/ch_introduction.xml2
-rw-r--r--lib/cosEventDomain/doc/src/cosEventDomainApp.xml2
-rw-r--r--lib/cosEventDomain/doc/src/notes.xml19
-rw-r--r--lib/cosEventDomain/doc/src/part.xml2
-rw-r--r--lib/cosEventDomain/doc/src/part_notes.xml2
-rw-r--r--lib/cosEventDomain/doc/src/ref_man.xml2
-rw-r--r--lib/cosEventDomain/src/CosEventDomainAdmin_EventDomainFactory_impl.erl2
-rw-r--r--lib/cosEventDomain/src/CosEventDomainAdmin_EventDomain_impl.erl2
-rw-r--r--lib/cosEventDomain/src/Makefile2
-rw-r--r--lib/cosEventDomain/src/cosEventDomainApp.hrl2
-rw-r--r--lib/cosEventDomain/test/Makefile6
-rw-r--r--lib/cosEventDomain/test/event_domain_SUITE.erl20
-rw-r--r--lib/cosEventDomain/test/generated_SUITE.erl46
-rw-r--r--lib/cosEventDomain/vsn.mk2
-rw-r--r--lib/cosFileTransfer/Makefile2
-rw-r--r--lib/cosFileTransfer/doc/src/CosFileTransfer_Directory.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/CosFileTransfer_File.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/CosFileTransfer_FileIterator.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/CosFileTransfer_FileTransferSession.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/CosFileTransfer_VirtualFileSystem.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/Makefile2
-rw-r--r--lib/cosFileTransfer/doc/src/book.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/ch_contents.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/ch_example.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/ch_install.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/ch_introduction.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/ch_system.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/cosFileTransferApp.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/notes.xml19
-rw-r--r--lib/cosFileTransfer/doc/src/part.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/part_notes.xml2
-rw-r--r--lib/cosFileTransfer/doc/src/ref_man.xml2
-rw-r--r--lib/cosFileTransfer/src/CosFileTransfer_Directory_impl.erl2
-rw-r--r--lib/cosFileTransfer/src/CosFileTransfer_FileIterator_impl.erl2
-rw-r--r--lib/cosFileTransfer/src/CosFileTransfer_FileTransferSession_impl.erl2
-rw-r--r--lib/cosFileTransfer/src/CosFileTransfer_File_impl.erl2
-rw-r--r--lib/cosFileTransfer/src/CosFileTransfer_VirtualFileSystem_impl.erl2
-rw-r--r--lib/cosFileTransfer/src/Makefile2
-rw-r--r--lib/cosFileTransfer/src/cosFileTransferApp.hrl2
-rw-r--r--lib/cosFileTransfer/src/cosFileTransferNATIVE_file.erl2
-rw-r--r--lib/cosFileTransfer/test/Makefile6
-rw-r--r--lib/cosFileTransfer/test/fileTransfer_SUITE.erl294
-rw-r--r--lib/cosFileTransfer/vsn.mk2
-rw-r--r--lib/cosNotification/Makefile2
-rw-r--r--lib/cosNotification/doc/src/CosNotification.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotification_AdminPropertiesAdmin.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotification_QoSAdmin.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_ConsumerAdmin.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannel.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannelFactory.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyConsumer.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullConsumer.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullSupplier.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushConsumer.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushSupplier.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxySupplier.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullConsumer.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullSupplier.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushConsumer.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushSupplier.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullConsumer.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullSupplier.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushConsumer.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushSupplier.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyChannelAdmin_SupplierAdmin.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyComm_NotifyPublish.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyComm_NotifySubscribe.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyFilter_Filter.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyFilter_FilterAdmin.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyFilter_FilterFactory.xml2
-rw-r--r--lib/cosNotification/doc/src/CosNotifyFilter_MappingFilter.xml2
-rw-r--r--lib/cosNotification/doc/src/Makefile2
-rw-r--r--lib/cosNotification/doc/src/book.xml2
-rw-r--r--lib/cosNotification/doc/src/ch_BNF.xml2
-rw-r--r--lib/cosNotification/doc/src/ch_QoS.xml2
-rw-r--r--lib/cosNotification/doc/src/ch_contents.xml2
-rw-r--r--lib/cosNotification/doc/src/ch_example.xml2
-rw-r--r--lib/cosNotification/doc/src/ch_install.xml2
-rw-r--r--lib/cosNotification/doc/src/ch_introduction.xml2
-rw-r--r--lib/cosNotification/doc/src/ch_system.xml2
-rw-r--r--lib/cosNotification/doc/src/cosNotificationApp.xml2
-rw-r--r--lib/cosNotification/doc/src/notes.xml19
-rw-r--r--lib/cosNotification/doc/src/part.xml2
-rw-r--r--lib/cosNotification/doc/src/part_notes.xml2
-rw-r--r--lib/cosNotification/doc/src/ref_man.xml2
-rw-r--r--lib/cosNotification/src/CosNotifyChannelAdmin_ConsumerAdmin_impl.erl2
-rw-r--r--lib/cosNotification/src/CosNotifyChannelAdmin_EventChannelFactory_impl.erl2
-rw-r--r--lib/cosNotification/src/CosNotifyChannelAdmin_EventChannel_impl.erl2
-rw-r--r--lib/cosNotification/src/CosNotifyChannelAdmin_SupplierAdmin_impl.erl2
-rw-r--r--lib/cosNotification/src/CosNotifyFilter_FilterFactory_impl.erl2
-rw-r--r--lib/cosNotification/src/Makefile2
-rw-r--r--lib/cosNotification/src/PullerConsumer_impl.erl2
-rw-r--r--lib/cosNotification/src/PusherConsumer_impl.erl2
-rw-r--r--lib/cosNotification/src/PusherSupplier_impl.erl2
-rw-r--r--lib/cosNotification/src/cosNotification_Filter.erl2
-rw-r--r--lib/cosNotification/src/cosNotification_Grammar.yrl2
-rw-r--r--lib/cosNotification/src/cosNotification_Scanner.erl2
-rw-r--r--lib/cosNotification/test/Makefile6
-rw-r--r--lib/cosNotification/test/eventDB_SUITE.erl89
-rw-r--r--lib/cosNotification/test/generated_SUITE.erl189
-rw-r--r--lib/cosNotification/test/grammar_SUITE.erl29
-rw-r--r--lib/cosNotification/test/notification_SUITE.erl51
-rw-r--r--lib/cosNotification/test/notify_test_impl.erl2
-rw-r--r--lib/cosNotification/test/notify_test_server.cfg2
-rw-r--r--lib/cosNotification/test/notify_test_server.idl2
-rw-r--r--lib/cosNotification/vsn.mk2
-rw-r--r--lib/cosProperty/Makefile2
-rw-r--r--lib/cosProperty/doc/src/CosPropertyService_PropertiesIterator.xml2
-rw-r--r--lib/cosProperty/doc/src/CosPropertyService_PropertyNamesIterator.xml2
-rw-r--r--lib/cosProperty/doc/src/CosPropertyService_PropertySet.xml2
-rw-r--r--lib/cosProperty/doc/src/CosPropertyService_PropertySetDef.xml2
-rw-r--r--lib/cosProperty/doc/src/CosPropertyService_PropertySetDefFactory.xml2
-rw-r--r--lib/cosProperty/doc/src/CosPropertyService_PropertySetFactory.xml2
-rw-r--r--lib/cosProperty/doc/src/Makefile2
-rw-r--r--lib/cosProperty/doc/src/book.xml2
-rw-r--r--lib/cosProperty/doc/src/ch_contents.xml2
-rw-r--r--lib/cosProperty/doc/src/ch_example.xml2
-rw-r--r--lib/cosProperty/doc/src/ch_install.xml2
-rw-r--r--lib/cosProperty/doc/src/ch_introduction.xml2
-rw-r--r--lib/cosProperty/doc/src/cosProperty.xml2
-rw-r--r--lib/cosProperty/doc/src/notes.xml19
-rw-r--r--lib/cosProperty/doc/src/part.xml2
-rw-r--r--lib/cosProperty/doc/src/part_notes.xml2
-rw-r--r--lib/cosProperty/doc/src/ref_man.xml2
-rw-r--r--lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl2
-rw-r--r--lib/cosProperty/src/CosPropertyService_PropertyNamesIterator_impl.erl2
-rw-r--r--lib/cosProperty/src/CosPropertyService_PropertySetDefFactory_impl.erl2
-rw-r--r--lib/cosProperty/src/CosPropertyService_PropertySetFactory_impl.erl2
-rw-r--r--lib/cosProperty/src/Makefile2
-rw-r--r--lib/cosProperty/src/cosProperty.hrl2
-rw-r--r--lib/cosProperty/test/Makefile6
-rw-r--r--lib/cosProperty/test/generated_SUITE.erl72
-rw-r--r--lib/cosProperty/test/property_SUITE.erl33
-rw-r--r--lib/cosProperty/vsn.mk2
-rw-r--r--lib/cosTime/Makefile2
-rw-r--r--lib/cosTime/doc/src/CosTime_TIO.xml2
-rw-r--r--lib/cosTime/doc/src/CosTime_TimeService.xml2
-rw-r--r--lib/cosTime/doc/src/CosTime_UTO.xml2
-rw-r--r--lib/cosTime/doc/src/CosTimerEvent_TimerEventHandler.xml2
-rw-r--r--lib/cosTime/doc/src/CosTimerEvent_TimerEventService.xml2
-rw-r--r--lib/cosTime/doc/src/Makefile2
-rw-r--r--lib/cosTime/doc/src/book.xml2
-rw-r--r--lib/cosTime/doc/src/ch_contents.xml2
-rw-r--r--lib/cosTime/doc/src/ch_example.xml2
-rw-r--r--lib/cosTime/doc/src/ch_install.xml2
-rw-r--r--lib/cosTime/doc/src/ch_introduction.xml2
-rw-r--r--lib/cosTime/doc/src/cosTime.xml2
-rw-r--r--lib/cosTime/doc/src/notes.xml19
-rw-r--r--lib/cosTime/doc/src/part.xml2
-rw-r--r--lib/cosTime/doc/src/part_notes.xml2
-rw-r--r--lib/cosTime/doc/src/ref_man.xml2
-rw-r--r--lib/cosTime/src/CosTime_TIO_impl.erl2
-rw-r--r--lib/cosTime/src/CosTime_UTO_impl.erl2
-rw-r--r--lib/cosTime/src/CosTimerEvent_TimerEventHandler_impl.erl2
-rw-r--r--lib/cosTime/src/CosTimerEvent_TimerEventService_impl.erl2
-rw-r--r--lib/cosTime/src/Makefile2
-rw-r--r--lib/cosTime/src/cosTime.erl2
-rw-r--r--lib/cosTime/src/cosTimeApp.hrl2
-rw-r--r--lib/cosTime/test/Makefile6
-rw-r--r--lib/cosTime/test/generated_SUITE.erl34
-rw-r--r--lib/cosTime/test/time_SUITE.erl164
-rw-r--r--lib/cosTime/vsn.mk2
-rw-r--r--lib/cosTransactions/Makefile2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_Control.xml2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_Coordinator.xml2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_RecoveryCoordinator.xml2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_Resource.xml2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_SubtransactionAwareResource.xml2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_Synchronization.xml2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_Terminator.xml2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_TransactionFactory.xml2
-rw-r--r--lib/cosTransactions/doc/src/CosTransactions_TransactionalObject.xml2
-rw-r--r--lib/cosTransactions/doc/src/Makefile2
-rw-r--r--lib/cosTransactions/doc/src/book.xml2
-rw-r--r--lib/cosTransactions/doc/src/ch_contents.xml2
-rw-r--r--lib/cosTransactions/doc/src/ch_example.xml2
-rw-r--r--lib/cosTransactions/doc/src/ch_install.xml2
-rw-r--r--lib/cosTransactions/doc/src/ch_introduction.xml2
-rw-r--r--lib/cosTransactions/doc/src/ch_skeletons.xml2
-rw-r--r--lib/cosTransactions/doc/src/cosTransactions.xml2
-rw-r--r--lib/cosTransactions/doc/src/notes.xml19
-rw-r--r--lib/cosTransactions/doc/src/part.xml2
-rw-r--r--lib/cosTransactions/doc/src/part_notes.xml2
-rw-r--r--lib/cosTransactions/doc/src/ref_man.xml2
-rw-r--r--lib/cosTransactions/examples/Makefile2
-rw-r--r--lib/cosTransactions/src/CosTransactions_Terminator_impl.erl2
-rw-r--r--lib/cosTransactions/src/ETraP_Common.hrl2
-rw-r--r--lib/cosTransactions/src/Makefile2
-rw-r--r--lib/cosTransactions/src/cosTransactions.erl2
-rw-r--r--lib/cosTransactions/src/etrap_logmgr.erl2
-rw-r--r--lib/cosTransactions/test/Makefile6
-rw-r--r--lib/cosTransactions/test/etrap_test.cfg2
-rw-r--r--lib/cosTransactions/test/etrap_test.idl2
-rw-r--r--lib/cosTransactions/test/etrap_test_lib.erl2
-rw-r--r--lib/cosTransactions/test/etrap_test_lib.hrl2
-rw-r--r--lib/cosTransactions/test/etrap_test_server_impl.erl2
-rw-r--r--lib/cosTransactions/test/generated_SUITE.erl66
-rw-r--r--lib/cosTransactions/test/transactions_SUITE.erl135
-rw-r--r--lib/cosTransactions/vsn.mk2
-rw-r--r--lib/crypto/Makefile6
-rw-r--r--lib/crypto/c_src/Makefile.in9
-rw-r--r--lib/crypto/c_src/crypto.c2936
-rw-r--r--lib/crypto/c_src/crypto_callback.c10
-rw-r--r--lib/crypto/c_src/crypto_callback.h2
-rw-r--r--lib/crypto/doc/src/book.xml2
-rw-r--r--lib/crypto/doc/src/crypto.xml32
-rw-r--r--lib/crypto/doc/src/crypto_app.xml2
-rw-r--r--lib/crypto/doc/src/licenses.xml2
-rw-r--r--lib/crypto/doc/src/notes.xml48
-rw-r--r--lib/crypto/doc/src/ref_man.xml2
-rw-r--r--lib/crypto/doc/src/release_notes.xml2
-rw-r--r--lib/crypto/doc/src/usersguide.xml2
-rw-r--r--lib/crypto/src/Makefile2
-rw-r--r--lib/crypto/src/crypto.app.src2
-rw-r--r--lib/crypto/src/crypto.appup.src2
-rw-r--r--lib/crypto/src/crypto.erl885
-rw-r--r--lib/crypto/test/Makefile2
-rw-r--r--lib/crypto/test/blowfish_SUITE.erl5
-rw-r--r--lib/crypto/test/crypto_SUITE.erl143
-rw-r--r--lib/crypto/test/old_crypto_SUITE.erl12
-rw-r--r--lib/crypto/vsn.mk2
-rw-r--r--lib/debugger/Makefile2
-rw-r--r--lib/debugger/doc/src/Makefile2
-rw-r--r--lib/debugger/doc/src/book.xml2
-rw-r--r--lib/debugger/doc/src/introduction.xml2
-rw-r--r--lib/debugger/doc/src/notes.xml18
-rw-r--r--lib/debugger/doc/src/ref_man.xml2
-rw-r--r--lib/debugger/priv/Makefile2
-rw-r--r--lib/debugger/src/Makefile2
-rw-r--r--lib/debugger/src/dbg_debugged.erl7
-rw-r--r--lib/debugger/src/dbg_icmd.erl8
-rw-r--r--lib/debugger/src/dbg_idb.erl2
-rw-r--r--lib/debugger/src/dbg_iload.erl4
-rw-r--r--lib/debugger/src/dbg_iserver.erl19
-rw-r--r--lib/debugger/src/dbg_istk.erl2
-rw-r--r--lib/debugger/src/dbg_wx_break.erl2
-rw-r--r--lib/debugger/src/dbg_wx_break_win.erl36
-rw-r--r--lib/debugger/src/dbg_wx_code.erl12
-rw-r--r--lib/debugger/src/dbg_wx_filedialog_win.erl18
-rw-r--r--lib/debugger/src/dbg_wx_filedialog_win.hrl2
-rw-r--r--lib/debugger/src/dbg_wx_interpret.erl2
-rw-r--r--lib/debugger/src/dbg_wx_mon.erl6
-rw-r--r--lib/debugger/src/dbg_wx_mon_win.erl26
-rw-r--r--lib/debugger/src/dbg_wx_settings.erl2
-rw-r--r--lib/debugger/src/dbg_wx_src_view.erl4
-rw-r--r--lib/debugger/src/dbg_wx_trace.erl2
-rw-r--r--lib/debugger/src/dbg_wx_trace_win.erl59
-rw-r--r--lib/debugger/src/dbg_wx_view.erl2
-rw-r--r--lib/debugger/src/dbg_wx_win.erl20
-rw-r--r--lib/debugger/src/dbg_wx_winman.erl6
-rw-r--r--lib/debugger/src/debugger.appup.src2
-rw-r--r--lib/debugger/src/debugger.erl2
-rw-r--r--lib/debugger/src/i.erl4
-rw-r--r--lib/debugger/src/int.erl44
-rw-r--r--lib/debugger/test/Makefile4
-rw-r--r--lib/debugger/test/andor_SUITE.erl185
-rw-r--r--lib/debugger/test/bs_bincomp_SUITE.erl71
-rw-r--r--lib/debugger/test/bs_construct_SUITE.erl264
-rw-r--r--lib/debugger/test/bs_match_bin_SUITE.erl75
-rw-r--r--lib/debugger/test/bs_match_int_SUITE.erl125
-rw-r--r--lib/debugger/test/bs_match_misc_SUITE.erl227
-rw-r--r--lib/debugger/test/bs_match_tail_SUITE.erl71
-rw-r--r--lib/debugger/test/bs_utf_SUITE.erl81
-rw-r--r--lib/debugger/test/bug_SUITE.erl56
-rw-r--r--lib/debugger/test/bug_SUITE_data/Makefile.src2
-rw-r--r--lib/debugger/test/bug_SUITE_data/otp2163.erl2
-rw-r--r--lib/debugger/test/bug_SUITE_data/otp4845.erl2
-rw-r--r--lib/debugger/test/cleanup.erl15
-rw-r--r--lib/debugger/test/dbg_ui_SUITE.erl126
-rw-r--r--lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/lists1.erl2
-rw-r--r--lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/ordsets1.erl2
-rw-r--r--lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/test.erl2
-rw-r--r--lib/debugger/test/debugger_SUITE.erl62
-rw-r--r--lib/debugger/test/debugger_test.erl2
-rw-r--r--lib/debugger/test/erl_eval_SUITE.erl1004
-rw-r--r--lib/debugger/test/exception_SUITE.erl295
-rw-r--r--lib/debugger/test/fun_SUITE.erl146
-rw-r--r--lib/debugger/test/guard_SUITE.erl1491
-rw-r--r--lib/debugger/test/int_SUITE.erl257
-rw-r--r--lib/debugger/test/int_SUITE_data/Emakefile1
-rw-r--r--lib/debugger/test/int_SUITE_data/Makefile.src40
-rw-r--r--lib/debugger/test/int_SUITE_data/guards.erl2
-rw-r--r--lib/debugger/test/int_SUITE_data/lists1.erl2
-rw-r--r--lib/debugger/test/int_SUITE_data/my_lists.erl2
-rw-r--r--lib/debugger/test/int_SUITE_data/ordsets1.erl2
-rw-r--r--lib/debugger/test/int_SUITE_data/test.erl2
-rw-r--r--lib/debugger/test/int_SUITE_data/test1.erl2
-rw-r--r--lib/debugger/test/int_break_SUITE.erl49
-rw-r--r--lib/debugger/test/int_break_SUITE_data/Makefile.src2
-rw-r--r--lib/debugger/test/int_break_SUITE_data/ordsets1.erl2
-rw-r--r--lib/debugger/test/int_eval_SUITE.erl249
-rw-r--r--lib/debugger/test/int_eval_SUITE_data/Makefile.src2
-rw-r--r--lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl2
-rw-r--r--lib/debugger/test/lc_SUITE.erl69
-rw-r--r--lib/debugger/test/line_number_SUITE.erl20
-rw-r--r--lib/debugger/test/map_SUITE.erl56
-rw-r--r--lib/debugger/test/record_SUITE.erl215
-rw-r--r--lib/debugger/test/test_lib.erl2
-rw-r--r--lib/debugger/test/trycatch_SUITE.erl571
-rw-r--r--lib/debugger/vsn.mk2
-rw-r--r--lib/dialyzer/Makefile2
-rw-r--r--lib/dialyzer/README2
-rw-r--r--lib/dialyzer/doc/about.txt2
-rw-r--r--lib/dialyzer/doc/manual.txt2
-rw-r--r--lib/dialyzer/doc/src/book.xml2
-rw-r--r--lib/dialyzer/doc/src/dialyzer.xml2
-rw-r--r--lib/dialyzer/doc/src/dialyzer_chapter.xml2
-rw-r--r--lib/dialyzer/doc/src/notes.xml98
-rw-r--r--lib/dialyzer/doc/src/part.xml2
-rw-r--r--lib/dialyzer/doc/src/part_notes.xml2
-rw-r--r--lib/dialyzer/doc/src/ref_man.xml2
-rw-r--r--lib/dialyzer/info2
-rw-r--r--lib/dialyzer/src/Makefile4
-rw-r--r--lib/dialyzer/src/dialyzer.app.src11
-rw-r--r--lib/dialyzer/src/dialyzer.appup.src2
-rw-r--r--lib/dialyzer/src/dialyzer.erl3
-rw-r--r--lib/dialyzer/src/dialyzer.hrl14
-rw-r--r--lib/dialyzer/src/dialyzer_analysis_callgraph.erl45
-rw-r--r--lib/dialyzer/src/dialyzer_behaviours.erl2
-rw-r--r--lib/dialyzer/src/dialyzer_callgraph.erl130
-rw-r--r--lib/dialyzer/src/dialyzer_cl.erl4
-rw-r--r--lib/dialyzer/src/dialyzer_codeserver.erl10
-rw-r--r--lib/dialyzer/src/dialyzer_contracts.erl283
-rw-r--r--lib/dialyzer/src/dialyzer_coordinator.erl40
-rw-r--r--lib/dialyzer/src/dialyzer_dataflow.erl436
-rw-r--r--lib/dialyzer/src/dialyzer_dep.erl64
-rw-r--r--lib/dialyzer/src/dialyzer_explanation.erl2
-rw-r--r--lib/dialyzer/src/dialyzer_gui_wx.erl11
-rw-r--r--lib/dialyzer/src/dialyzer_options.erl1
-rw-r--r--lib/dialyzer/src/dialyzer_plt.erl2
-rw-r--r--lib/dialyzer/src/dialyzer_race_data_server.erl134
-rw-r--r--lib/dialyzer/src/dialyzer_races.erl40
-rw-r--r--lib/dialyzer/src/dialyzer_succ_typings.erl3
-rw-r--r--lib/dialyzer/src/dialyzer_timing.erl2
-rw-r--r--lib/dialyzer/src/dialyzer_typesig.erl606
-rw-r--r--lib/dialyzer/src/dialyzer_utils.erl220
-rw-r--r--lib/dialyzer/src/dialyzer_worker.erl61
-rw-r--r--lib/dialyzer/test/Makefile1
-rw-r--r--lib/dialyzer/test/abstract_SUITE.erl102
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/results/callbacks_and_specs6
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/results/supervisor_incorrect_return2
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/src/proper/compile_flags.hrl2
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_common.hrl55
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_gen.erl611
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_internal.hrl98
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_types.erl1353
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_typeserver.erl2411
-rw-r--r--lib/dialyzer/test/dialyzer_SUITE.erl4
-rw-r--r--lib/dialyzer/test/dialyzer_common.erl11
-rw-r--r--lib/dialyzer/test/map_SUITE_data/dialyzer_options1
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/bad_argument5
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/contract7
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/contract_violation3
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/exact3
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/guard_update5
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/initial_dataflow4
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/is_map_guard5
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/map_galore28
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/map_in_guard4
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/map_in_guard213
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/map_size13
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/maps_merge11
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/opaque_key15
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/order17
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/subtract_value_flip (renamed from lib/gs/contribs/ebin/.gitignore)0
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/typeflow4
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/typeflow213
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/typesig5
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/bad_argument.erl19
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/bug.erl63
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/contract.erl14
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/contract_violation.erl29
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/exact.erl23
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/guard_update.erl18
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/initial_dataflow.erl11
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/is_map_guard.erl17
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/a.erl9
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/b.erl3
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/map_galore.erl2824
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/map_in_guard.erl35
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/map_in_guard2.erl27
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/map_size.erl36
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/maps_merge.erl29
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/opaque_key/opaque_key_adt.erl69
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/opaque_key/opaque_key_use.erl97
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/order.erl56
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/subtract_value_flip.erl9
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/typeflow.erl25
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/typeflow2.erl88
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/typesig.erl9
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/crash10
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/simple6
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/proper/proper_typeserver.erl3
-rw-r--r--lib/dialyzer/test/r9c_SUITE_data/results/mnesia4
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/app_call2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/bif13
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes36
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes22
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy5
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/literals15
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/maps14
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/maps_difftype2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/maps_sum2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/pretty_bitstring2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/record_creation_diffs2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/record_pat2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/relevant_record_warning2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/undefined2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/bif1/bif1.erl16
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/bif1/bif1_adt.erl12
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/big_external_type.erl6
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/big_local_type.erl6
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl5
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/literals.erl6
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/loopy.erl17
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/maps1.erl2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/maps_redef.erl12
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/trec.erl2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/undefined.erl29
-rw-r--r--lib/dialyzer/test/unmatched_returns_SUITE_data/src/send.erl11
-rw-r--r--lib/dialyzer/test/user_SUITE_data/results/wpc_hlines3
-rw-r--r--lib/dialyzer/test/user_SUITE_data/results/wsp_pdu2
-rw-r--r--lib/dialyzer/test/user_SUITE_data/src/wpc_hlines.erl22
-rw-r--r--lib/dialyzer/vsn.mk2
-rw-r--r--lib/diameter/Makefile2
-rwxr-xr-xlib/diameter/bin/diameterc2
-rw-r--r--lib/diameter/doc/src/Makefile2
-rw-r--r--lib/diameter/doc/src/book.xml2
-rw-r--r--lib/diameter/doc/src/depend.sed2
-rw-r--r--lib/diameter/doc/src/diameter.xml22
-rw-r--r--lib/diameter/doc/src/diameter_app.xml2
-rw-r--r--lib/diameter/doc/src/diameter_codec.xml2
-rw-r--r--lib/diameter/doc/src/diameter_dict.xml2
-rw-r--r--lib/diameter/doc/src/diameter_examples.xml2
-rw-r--r--lib/diameter/doc/src/diameter_intro.xml2
-rw-r--r--lib/diameter/doc/src/diameter_make.xml2
-rw-r--r--lib/diameter/doc/src/diameter_sctp.xml2
-rw-r--r--lib/diameter/doc/src/diameter_soc.xml2
-rw-r--r--lib/diameter/doc/src/diameter_soc_rfc6733.xml2
-rw-r--r--lib/diameter/doc/src/diameter_tcp.xml2
-rw-r--r--lib/diameter/doc/src/diameter_transport.xml2
-rw-r--r--lib/diameter/doc/src/diameter_using.xml2
-rw-r--r--lib/diameter/doc/src/files.mk2
-rw-r--r--lib/diameter/doc/src/notes.xml37
-rw-r--r--lib/diameter/doc/src/ref_man.xml2
-rw-r--r--lib/diameter/doc/src/seehere.sed2
-rw-r--r--lib/diameter/doc/src/user_man.xml2
-rw-r--r--lib/diameter/examples/code/client_cb.erl2
-rw-r--r--lib/diameter/examples/code/redirect.erl2
-rw-r--r--lib/diameter/examples/code/redirect_cb.erl2
-rw-r--r--lib/diameter/examples/code/relay_cb.erl2
-rw-r--r--lib/diameter/examples/code/sctp.erl2
-rw-r--r--lib/diameter/examples/dict/GNUmakefile2
-rw-r--r--lib/diameter/examples/dict/depend.sed2
-rw-r--r--lib/diameter/examples/dict/rfc4004_mip.dia2
-rw-r--r--lib/diameter/examples/dict/rfc4005_nas.dia2
-rw-r--r--lib/diameter/examples/dict/rfc4006_cc.dia2
-rw-r--r--lib/diameter/examples/dict/rfc4072_eap.dia2
-rw-r--r--lib/diameter/examples/dict/rfc4590_digest.dia2
-rw-r--r--lib/diameter/examples/dict/rfc4740_sip.dia2
-rw-r--r--lib/diameter/include/diameter.hrl2
-rw-r--r--lib/diameter/src/Makefile2
-rw-r--r--lib/diameter/src/app.sed2
-rw-r--r--lib/diameter/src/base/diameter.erl29
-rw-r--r--lib/diameter/src/base/diameter_app.erl2
-rw-r--r--lib/diameter/src/base/diameter_callback.erl2
-rw-r--r--lib/diameter/src/base/diameter_config.erl125
-rw-r--r--lib/diameter/src/base/diameter_config_sup.erl58
-rw-r--r--lib/diameter/src/base/diameter_dict.erl2
-rw-r--r--lib/diameter/src/base/diameter_internal.hrl2
-rw-r--r--lib/diameter/src/base/diameter_lib.erl33
-rw-r--r--lib/diameter/src/base/diameter_misc_sup.erl2
-rw-r--r--lib/diameter/src/base/diameter_peer_fsm.erl59
-rw-r--r--lib/diameter/src/base/diameter_peer_fsm_sup.erl2
-rw-r--r--lib/diameter/src/base/diameter_reg.erl423
-rw-r--r--lib/diameter/src/base/diameter_service.erl75
-rw-r--r--lib/diameter/src/base/diameter_session.erl7
-rw-r--r--lib/diameter/src/base/diameter_sup.erl3
-rw-r--r--lib/diameter/src/base/diameter_traffic.erl30
-rw-r--r--lib/diameter/src/base/diameter_watchdog.erl68
-rw-r--r--lib/diameter/src/base/diameter_watchdog_sup.erl2
-rw-r--r--lib/diameter/src/compiler/diameter_dict_parser.yrl2
-rw-r--r--lib/diameter/src/compiler/diameter_dict_scanner.erl2
-rw-r--r--lib/diameter/src/compiler/diameter_dict_util.erl2
-rw-r--r--lib/diameter/src/compiler/diameter_exprecs.erl2
-rw-r--r--lib/diameter/src/compiler/diameter_make.erl2
-rw-r--r--lib/diameter/src/compiler/diameter_vsn.hrl2
-rw-r--r--lib/diameter/src/depend.sed2
-rw-r--r--lib/diameter/src/diameter.app.src2
-rw-r--r--lib/diameter/src/diameter.appup.src12
-rw-r--r--lib/diameter/src/dict/acct_rfc6733.dia2
-rw-r--r--lib/diameter/src/dict/base_accounting.dia2
-rw-r--r--lib/diameter/src/dict/base_rfc3588.dia2
-rw-r--r--lib/diameter/src/dict/base_rfc6733.dia2
-rw-r--r--lib/diameter/src/dict/capup_rfc6737.dia2
-rw-r--r--lib/diameter/src/dict/relay.dia2
-rw-r--r--lib/diameter/src/info/diameter_dbg.erl2
-rw-r--r--lib/diameter/src/modules.mk3
-rw-r--r--lib/diameter/src/transport/diameter_etcp.erl2
-rw-r--r--lib/diameter/src/transport/diameter_etcp_sup.erl2
-rw-r--r--lib/diameter/src/transport/diameter_sctp.erl47
-rw-r--r--lib/diameter/src/transport/diameter_sctp_sup.erl2
-rw-r--r--lib/diameter/src/transport/diameter_tcp.erl282
-rw-r--r--lib/diameter/src/transport/diameter_tcp_sup.erl2
-rw-r--r--lib/diameter/src/transport/diameter_transport.erl2
-rw-r--r--lib/diameter/subdirs.mk2
-rw-r--r--lib/diameter/test/Makefile2
-rw-r--r--lib/diameter/test/coverspec.sed2
-rw-r--r--lib/diameter/test/depend.sed2
-rw-r--r--lib/diameter/test/diameter_3xxx_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_codec_SUITE_data/avps.dia2
-rw-r--r--lib/diameter/test/diameter_codec_SUITE_data/diameter_test_unknown.erl2
-rw-r--r--lib/diameter/test/diameter_codec_SUITE_data/recv.dia2
-rw-r--r--lib/diameter/test/diameter_codec_SUITE_data/send.dia2
-rw-r--r--lib/diameter/test/diameter_codec_test.erl13
-rw-r--r--lib/diameter/test/diameter_compiler_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_ct.hrl2
-rw-r--r--lib/diameter/test/diameter_dict_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_distribution_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_enum.erl2
-rw-r--r--lib/diameter/test/diameter_event_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_failover_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_gen_sctp_SUITE.erl6
-rw-r--r--lib/diameter/test/diameter_length_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_reg_SUITE.erl21
-rw-r--r--lib/diameter/test/diameter_relay_SUITE.erl12
-rw-r--r--lib/diameter/test/diameter_sync_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_tls_SUITE.erl10
-rw-r--r--lib/diameter/test/diameter_tls_SUITE_data/Makefile.ca2
-rw-r--r--lib/diameter/test/diameter_traffic_SUITE.erl8
-rw-r--r--lib/diameter/test/diameter_transport_SUITE.erl9
-rw-r--r--lib/diameter/test/diameter_util.erl24
-rw-r--r--lib/diameter/test/release.sed2
-rw-r--r--lib/diameter/vsn.mk4
-rw-r--r--lib/edoc/doc/src/book.xml2
-rw-r--r--lib/edoc/doc/src/notes.xml16
-rw-r--r--lib/edoc/doc/src/part.xml2
-rw-r--r--lib/edoc/doc/src/part_notes.xml2
-rw-r--r--lib/edoc/doc/src/ref_man.xml2
-rw-r--r--lib/edoc/priv/edoc.dtd6
-rw-r--r--lib/edoc/src/edoc.appup.src2
-rw-r--r--lib/edoc/src/edoc.erl15
-rw-r--r--lib/edoc/src/edoc_extract.erl62
-rw-r--r--lib/edoc/src/edoc_layout.erl18
-rw-r--r--lib/edoc/src/edoc_lib.erl2
-rw-r--r--lib/edoc/src/edoc_parser.yrl11
-rw-r--r--lib/edoc/src/edoc_run.erl11
-rw-r--r--lib/edoc/src/edoc_scanner.erl2
-rw-r--r--lib/edoc/src/edoc_specs.erl26
-rw-r--r--lib/edoc/src/edoc_tags.erl11
-rw-r--r--lib/edoc/src/edoc_types.erl4
-rw-r--r--lib/edoc/src/edoc_types.hrl2
-rw-r--r--lib/edoc/test/Makefile2
-rw-r--r--lib/edoc/test/edoc_SUITE.erl2
-rw-r--r--lib/edoc/vsn.mk2
-rw-r--r--lib/eldap/Makefile2
-rw-r--r--lib/eldap/doc/src/book.xml2
-rw-r--r--lib/eldap/doc/src/notes.xml35
-rw-r--r--lib/eldap/doc/src/ref_man.xml2
-rw-r--r--lib/eldap/doc/src/release_notes.xml2
-rw-r--r--lib/eldap/doc/src/usersguide.xml2
-rw-r--r--lib/eldap/src/Makefile4
-rw-r--r--lib/eldap/src/eldap.appup.src2
-rw-r--r--lib/eldap/src/eldap.erl16
-rw-r--r--lib/eldap/test/Makefile2
-rw-r--r--lib/eldap/test/eldap_basic_SUITE.erl161
-rw-r--r--lib/eldap/test/make_certs.erl2
-rw-r--r--lib/eldap/vsn.mk2
-rw-r--r--lib/erl_docgen/Makefile2
-rw-r--r--lib/erl_docgen/doc/src/Makefile2
-rw-r--r--lib/erl_docgen/doc/src/block_tags.xml2
-rw-r--r--lib/erl_docgen/doc/src/book.xml2
-rw-r--r--lib/erl_docgen/doc/src/character_entities.xml2
-rw-r--r--lib/erl_docgen/doc/src/doc-build.xml2
-rw-r--r--lib/erl_docgen/doc/src/docgen_xml_check.xml2
-rw-r--r--lib/erl_docgen/doc/src/erl_docgen_app.xml2
-rw-r--r--lib/erl_docgen/doc/src/fasc_dtds.xml2
-rw-r--r--lib/erl_docgen/doc/src/header_tags.xml2
-rw-r--r--lib/erl_docgen/doc/src/inline_tags.xml2
-rw-r--r--lib/erl_docgen/doc/src/notes.xml49
-rw-r--r--lib/erl_docgen/doc/src/overview.xml2
-rw-r--r--lib/erl_docgen/doc/src/part.xml2
-rw-r--r--lib/erl_docgen/doc/src/ref_man.xml2
-rw-r--r--lib/erl_docgen/doc/src/refman_dtds.xml2
-rw-r--r--lib/erl_docgen/doc/src/user_guide_dtds.xml2
-rw-r--r--lib/erl_docgen/priv/bin/Makefile2
-rwxr-xr-xlib/erl_docgen/priv/bin/codeline_preprocessing.escript2
-rw-r--r--lib/erl_docgen/priv/bin/specs_gen.escript2
-rwxr-xr-xlib/erl_docgen/priv/bin/xml_from_edoc.escript2
-rwxr-xr-xlib/erl_docgen/priv/bin/xref_mod_app.escript4
-rw-r--r--lib/erl_docgen/priv/css/Makefile2
-rw-r--r--lib/erl_docgen/priv/css/otp_doc.css9
-rw-r--r--lib/erl_docgen/priv/dtd/Makefile2
-rw-r--r--lib/erl_docgen/priv/dtd/common.dtd7
-rw-r--r--lib/erl_docgen/priv/dtd/erlref.dtd2
-rw-r--r--lib/erl_docgen/priv/dtd_html_entities/Makefile2
-rw-r--r--lib/erl_docgen/priv/dtd_man_entities/Makefile2
-rw-r--r--lib/erl_docgen/priv/fop.xconf2
-rw-r--r--lib/erl_docgen/priv/images/Makefile2
-rw-r--r--lib/erl_docgen/priv/js/flipmenu/Makefile2
-rw-r--r--lib/erl_docgen/priv/xsl/Makefile2
-rw-r--r--lib/erl_docgen/priv/xsl/db_eix.xsl2
-rw-r--r--lib/erl_docgen/priv/xsl/db_html.xsl192
-rw-r--r--lib/erl_docgen/priv/xsl/db_html_params.xsl2
-rw-r--r--lib/erl_docgen/priv/xsl/db_man.xsl14
-rw-r--r--lib/erl_docgen/priv/xsl/db_pdf.xsl28
-rw-r--r--lib/erl_docgen/priv/xsl/db_pdf_params.xsl2
-rw-r--r--lib/erl_docgen/src/Makefile2
-rw-r--r--lib/erl_docgen/src/docgen_edoc_xml_cb.erl142
-rw-r--r--lib/erl_docgen/src/docgen_otp_specs.erl32
-rw-r--r--lib/erl_docgen/src/docgen_xmerl_xml_cb.erl2
-rw-r--r--lib/erl_docgen/src/erl_docgen.appup.src2
-rw-r--r--lib/erl_docgen/test/Makefile2
-rw-r--r--lib/erl_docgen/test/erl_docgen_SUITE.erl10
-rw-r--r--lib/erl_docgen/vsn.mk2
-rw-r--r--lib/erl_interface/Makefile2
-rw-r--r--lib/erl_interface/configure.in6
-rw-r--r--lib/erl_interface/doc/src/Makefile2
-rw-r--r--lib/erl_interface/doc/src/book.xml2
-rw-r--r--lib/erl_interface/doc/src/ei.xml2
-rw-r--r--lib/erl_interface/doc/src/ei_connect.xml2
-rw-r--r--lib/erl_interface/doc/src/ei_users_guide.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_call.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_connect.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_error.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_eterm.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_format.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_global.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_interface.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_malloc.xml2
-rw-r--r--lib/erl_interface/doc/src/erl_marshal.xml2
-rw-r--r--lib/erl_interface/doc/src/notes.xml44
-rw-r--r--lib/erl_interface/doc/src/notes_history.xml2
-rw-r--r--lib/erl_interface/doc/src/part.xml2
-rw-r--r--lib/erl_interface/doc/src/part_erl_interface.xml2
-rw-r--r--lib/erl_interface/doc/src/part_notes.xml2
-rw-r--r--lib/erl_interface/doc/src/part_notes_history.xml2
-rw-r--r--lib/erl_interface/doc/src/ref_man.xml2
-rw-r--r--lib/erl_interface/doc/src/ref_man_ei.xml2
-rw-r--r--lib/erl_interface/doc/src/ref_man_erl_interface.xml2
-rw-r--r--lib/erl_interface/doc/src/registry.xml2
-rw-r--r--lib/erl_interface/include/ei.h5
-rw-r--r--lib/erl_interface/include/ei_connect.h2
-rw-r--r--lib/erl_interface/include/eicode.h2
-rw-r--r--lib/erl_interface/include/erl_interface.h8
-rw-r--r--lib/erl_interface/src/Makefile2
-rw-r--r--lib/erl_interface/src/Makefile.in65
-rw-r--r--lib/erl_interface/src/connect/ei_connect.c5
-rw-r--r--lib/erl_interface/src/connect/ei_connect_int.h3
-rw-r--r--lib/erl_interface/src/connect/ei_resolve.c2
-rw-r--r--lib/erl_interface/src/connect/ei_resolve.h2
-rw-r--r--lib/erl_interface/src/connect/eirecv.c2
-rw-r--r--lib/erl_interface/src/connect/eirecv.h2
-rw-r--r--lib/erl_interface/src/connect/eisend.h2
-rw-r--r--lib/erl_interface/src/connect/send.c2
-rw-r--r--lib/erl_interface/src/connect/send_exit.c2
-rw-r--r--lib/erl_interface/src/connect/send_reg.c2
-rw-r--r--lib/erl_interface/src/decode/decode_atom.c2
-rw-r--r--lib/erl_interface/src/decode/decode_big.c2
-rw-r--r--lib/erl_interface/src/decode/decode_bignum.c2
-rw-r--r--lib/erl_interface/src/decode/decode_binary.c2
-rw-r--r--lib/erl_interface/src/decode/decode_boolean.c2
-rw-r--r--lib/erl_interface/src/decode/decode_char.c2
-rw-r--r--lib/erl_interface/src/decode/decode_double.c2
-rw-r--r--lib/erl_interface/src/decode/decode_fun.c2
-rw-r--r--lib/erl_interface/src/decode/decode_intlist.c2
-rw-r--r--lib/erl_interface/src/decode/decode_list_header.c2
-rw-r--r--lib/erl_interface/src/decode/decode_long.c2
-rw-r--r--lib/erl_interface/src/decode/decode_longlong.c2
-rw-r--r--lib/erl_interface/src/decode/decode_pid.c12
-rw-r--r--lib/erl_interface/src/decode/decode_port.c12
-rw-r--r--lib/erl_interface/src/decode/decode_ref.c16
-rw-r--r--lib/erl_interface/src/decode/decode_skip.c5
-rw-r--r--lib/erl_interface/src/decode/decode_skip.h2
-rw-r--r--lib/erl_interface/src/decode/decode_string.c2
-rw-r--r--lib/erl_interface/src/decode/decode_trace.c2
-rw-r--r--lib/erl_interface/src/decode/decode_tuple_header.c2
-rw-r--r--lib/erl_interface/src/decode/decode_ulong.c2
-rw-r--r--lib/erl_interface/src/decode/decode_ulonglong.c2
-rw-r--r--lib/erl_interface/src/decode/decode_version.c2
-rw-r--r--lib/erl_interface/src/eidefs.mk.in2
-rw-r--r--lib/erl_interface/src/encode/eicode.h2
-rw-r--r--lib/erl_interface/src/encode/encode_atom.c2
-rw-r--r--lib/erl_interface/src/encode/encode_big.c2
-rw-r--r--lib/erl_interface/src/encode/encode_bignum.c2
-rw-r--r--lib/erl_interface/src/encode/encode_binary.c2
-rw-r--r--lib/erl_interface/src/encode/encode_boolean.c2
-rw-r--r--lib/erl_interface/src/encode/encode_char.c2
-rw-r--r--lib/erl_interface/src/encode/encode_double.c2
-rw-r--r--lib/erl_interface/src/encode/encode_fun.c2
-rw-r--r--lib/erl_interface/src/encode/encode_list_header.c2
-rw-r--r--lib/erl_interface/src/encode/encode_long.c2
-rw-r--r--lib/erl_interface/src/encode/encode_longlong.c2
-rw-r--r--lib/erl_interface/src/encode/encode_pid.c15
-rw-r--r--lib/erl_interface/src/encode/encode_port.c14
-rw-r--r--lib/erl_interface/src/encode/encode_ref.c12
-rw-r--r--lib/erl_interface/src/encode/encode_string.c2
-rw-r--r--lib/erl_interface/src/encode/encode_trace.c2
-rw-r--r--lib/erl_interface/src/encode/encode_tuple_header.c2
-rw-r--r--lib/erl_interface/src/encode/encode_ulong.c2
-rw-r--r--lib/erl_interface/src/encode/encode_ulonglong.c2
-rw-r--r--lib/erl_interface/src/encode/encode_version.c2
-rw-r--r--lib/erl_interface/src/epmd/ei_epmd.h2
-rw-r--r--lib/erl_interface/src/epmd/epmd_port.c2
-rw-r--r--lib/erl_interface/src/epmd/epmd_publish.c2
-rw-r--r--lib/erl_interface/src/epmd/epmd_unpublish.c2
-rw-r--r--lib/erl_interface/src/erl_interface.app.src2
-rw-r--r--lib/erl_interface/src/erl_interface.appup.src2
-rw-r--r--lib/erl_interface/src/legacy/decode_term.c2
-rw-r--r--lib/erl_interface/src/legacy/encode_term.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_config.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_connect.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_connect.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_error.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_error.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_eterm.c16
-rw-r--r--lib/erl_interface/src/legacy/erl_eterm.h8
-rw-r--r--lib/erl_interface/src/legacy/erl_fix_alloc.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_fix_alloc.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_format.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_format.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_global.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_internal.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_malloc.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_malloc.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_marshal.c245
-rw-r--r--lib/erl_interface/src/legacy/erl_marshal.h2
-rw-r--r--lib/erl_interface/src/legacy/erl_resolve.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_timeout.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_timeout.h2
-rw-r--r--lib/erl_interface/src/legacy/global_names.c2
-rw-r--r--lib/erl_interface/src/legacy/global_register.c2
-rw-r--r--lib/erl_interface/src/legacy/global_unregister.c2
-rw-r--r--lib/erl_interface/src/legacy/global_whereis.c2
-rw-r--r--lib/erl_interface/src/legacy/portability.h2
-rw-r--r--lib/erl_interface/src/misc/ei_compat.c2
-rw-r--r--lib/erl_interface/src/misc/ei_decode_term.c50
-rw-r--r--lib/erl_interface/src/misc/ei_decode_term.h2
-rw-r--r--lib/erl_interface/src/misc/ei_format.c2
-rw-r--r--lib/erl_interface/src/misc/ei_format.h2
-rw-r--r--lib/erl_interface/src/misc/ei_internal.h2
-rw-r--r--lib/erl_interface/src/misc/ei_locking.c2
-rw-r--r--lib/erl_interface/src/misc/ei_locking.h2
-rw-r--r--lib/erl_interface/src/misc/ei_malloc.c2
-rw-r--r--lib/erl_interface/src/misc/ei_malloc.h2
-rw-r--r--lib/erl_interface/src/misc/ei_portio.c2
-rw-r--r--lib/erl_interface/src/misc/ei_portio.h11
-rw-r--r--lib/erl_interface/src/misc/ei_printterm.c5
-rw-r--r--lib/erl_interface/src/misc/ei_printterm.h2
-rw-r--r--lib/erl_interface/src/misc/ei_pthreads.c2
-rw-r--r--lib/erl_interface/src/misc/ei_trace.c2
-rw-r--r--lib/erl_interface/src/misc/ei_trace.h2
-rw-r--r--lib/erl_interface/src/misc/ei_x_encode.c2
-rw-r--r--lib/erl_interface/src/misc/ei_x_encode.h2
-rw-r--r--lib/erl_interface/src/misc/eidef.h2
-rw-r--r--lib/erl_interface/src/misc/eiext.h2
-rw-r--r--lib/erl_interface/src/misc/get_type.c11
-rw-r--r--lib/erl_interface/src/misc/putget.h2
-rw-r--r--lib/erl_interface/src/misc/show_msg.c7
-rw-r--r--lib/erl_interface/src/misc/show_msg.h2
-rw-r--r--lib/erl_interface/src/not_used/ei_send.c2
-rw-r--r--lib/erl_interface/src/not_used/ei_send_reg.c2
-rw-r--r--lib/erl_interface/src/not_used/send_link.c2
-rw-r--r--lib/erl_interface/src/not_used/whereis.c2
-rw-r--r--lib/erl_interface/src/prog/ei_fake_prog.c2
-rw-r--r--lib/erl_interface/src/prog/erl_call.c2
-rw-r--r--lib/erl_interface/src/prog/erl_fake_prog.c2
-rw-r--r--lib/erl_interface/src/prog/erl_start.c2
-rw-r--r--lib/erl_interface/src/prog/erl_start.h2
-rw-r--r--lib/erl_interface/src/registry/hash.h2
-rw-r--r--lib/erl_interface/src/registry/hash_dohash.c2
-rw-r--r--lib/erl_interface/src/registry/hash_foreach.c2
-rw-r--r--lib/erl_interface/src/registry/hash_freetab.c2
-rw-r--r--lib/erl_interface/src/registry/hash_insert.c2
-rw-r--r--lib/erl_interface/src/registry/hash_isprime.c2
-rw-r--r--lib/erl_interface/src/registry/hash_lookup.c2
-rw-r--r--lib/erl_interface/src/registry/hash_newtab.c2
-rw-r--r--lib/erl_interface/src/registry/hash_remove.c2
-rw-r--r--lib/erl_interface/src/registry/hash_resize.c2
-rw-r--r--lib/erl_interface/src/registry/hash_rlookup.c2
-rw-r--r--lib/erl_interface/src/registry/reg.h2
-rw-r--r--lib/erl_interface/src/registry/reg_close.c2
-rw-r--r--lib/erl_interface/src/registry/reg_delete.c2
-rw-r--r--lib/erl_interface/src/registry/reg_dirty.c2
-rw-r--r--lib/erl_interface/src/registry/reg_dump.c2
-rw-r--r--lib/erl_interface/src/registry/reg_free.c2
-rw-r--r--lib/erl_interface/src/registry/reg_get.c2
-rw-r--r--lib/erl_interface/src/registry/reg_getf.c2
-rw-r--r--lib/erl_interface/src/registry/reg_geti.c2
-rw-r--r--lib/erl_interface/src/registry/reg_getp.c2
-rw-r--r--lib/erl_interface/src/registry/reg_gets.c2
-rw-r--r--lib/erl_interface/src/registry/reg_make.c2
-rw-r--r--lib/erl_interface/src/registry/reg_open.c2
-rw-r--r--lib/erl_interface/src/registry/reg_purge.c2
-rw-r--r--lib/erl_interface/src/registry/reg_resize.c2
-rw-r--r--lib/erl_interface/src/registry/reg_restore.c2
-rw-r--r--lib/erl_interface/src/registry/reg_set.c2
-rw-r--r--lib/erl_interface/src/registry/reg_setf.c2
-rw-r--r--lib/erl_interface/src/registry/reg_seti.c2
-rw-r--r--lib/erl_interface/src/registry/reg_setp.c2
-rw-r--r--lib/erl_interface/src/registry/reg_sets.c2
-rw-r--r--lib/erl_interface/src/registry/reg_stat.c2
-rw-r--r--lib/erl_interface/src/registry/reg_tabstat.c2
-rw-r--r--lib/erl_interface/test/Makefile2
-rw-r--r--lib/erl_interface/test/Makefile.src2
-rw-r--r--lib/erl_interface/test/all_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/all_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/all_SUITE_data/ei_runner.c21
-rw-r--r--lib/erl_interface/test/all_SUITE_data/ei_runner.h5
-rw-r--r--lib/erl_interface/test/all_SUITE_data/gccifier.c2
-rwxr-xr-xlib/erl_interface/test/all_SUITE_data/gccifier.sh2
-rw-r--r--lib/erl_interface/test/all_SUITE_data/init_tc.erl2
-rw-r--r--lib/erl_interface/test/all_SUITE_data/reclaim.h2
-rw-r--r--lib/erl_interface/test/all_SUITE_data/runner.c10
-rw-r--r--lib/erl_interface/test/all_SUITE_data/runner.h2
-rw-r--r--lib/erl_interface/test/ei_accept_SUITE.erl196
-rw-r--r--lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c2
-rw-r--r--lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c2
-rw-r--r--lib/erl_interface/test/ei_connect_SUITE.erl234
-rw-r--r--lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src5
-rw-r--r--lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c2
-rw-r--r--lib/erl_interface/test/ei_connect_SUITE_data/einode.c5
-rw-r--r--lib/erl_interface/test/ei_decode_SUITE.erl368
-rw-r--r--lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c12
-rw-r--r--lib/erl_interface/test/ei_decode_encode_SUITE.erl266
-rw-r--r--lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c15
-rw-r--r--lib/erl_interface/test/ei_encode_SUITE.erl392
-rw-r--r--lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c2
-rw-r--r--lib/erl_interface/test/ei_format_SUITE.erl194
-rw-r--r--lib/erl_interface/test/ei_format_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/ei_format_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c2
-rw-r--r--lib/erl_interface/test/ei_print_SUITE.erl188
-rw-r--r--lib/erl_interface/test/ei_print_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/ei_print_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c2
-rw-r--r--lib/erl_interface/test/ei_tmo_SUITE.erl795
-rw-r--r--lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c13
-rw-r--r--lib/erl_interface/test/erl_connect_SUITE.erl124
-rw-r--r--lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c2
-rw-r--r--lib/erl_interface/test/erl_eterm_SUITE.erl1143
-rw-r--r--lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c2
-rw-r--r--lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c6
-rw-r--r--lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c2
-rw-r--r--lib/erl_interface/test/erl_ext_SUITE.erl70
-rw-r--r--lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c2
-rw-r--r--lib/erl_interface/test/erl_format_SUITE.erl176
-rw-r--r--lib/erl_interface/test/erl_format_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/erl_format_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/erl_format_SUITE_data/format_test.c2
-rw-r--r--lib/erl_interface/test/erl_global_SUITE.erl112
-rw-r--r--lib/erl_interface/test/erl_global_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/erl_global_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c2
-rw-r--r--lib/erl_interface/test/erl_match_SUITE.erl327
-rw-r--r--lib/erl_interface/test/erl_match_SUITE_data/Makefile.first2
-rw-r--r--lib/erl_interface/test/erl_match_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/erl_match_SUITE_data/match_test.c2
-rw-r--r--lib/erl_interface/test/port_call_SUITE.erl114
-rw-r--r--lib/erl_interface/test/port_call_SUITE_data/Makefile.src2
-rw-r--r--lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c2
-rw-r--r--lib/erl_interface/test/runner.erl26
-rw-r--r--lib/erl_interface/vsn.mk2
-rw-r--r--lib/et/Makefile2
-rw-r--r--lib/et/doc/src/Makefile2
-rw-r--r--lib/et/doc/src/book.xml2
-rw-r--r--lib/et/doc/src/et.xml2
-rw-r--r--lib/et/doc/src/et_collector.xml2
-rw-r--r--lib/et/doc/src/et_desc.xmlsrc84
-rw-r--r--lib/et/doc/src/et_examples.xmlsrc257
-rw-r--r--lib/et/doc/src/et_intro.xml2
-rw-r--r--lib/et/doc/src/et_selector.xml2
-rw-r--r--lib/et/doc/src/et_tutorial.xmlsrc15
-rw-r--r--lib/et/doc/src/et_viewer.xml2
-rw-r--r--lib/et/doc/src/files.mk2
-rw-r--r--lib/et/doc/src/notes.xml18
-rw-r--r--lib/et/doc/src/part.xml2
-rw-r--r--lib/et/doc/src/ref_man.xml2
-rw-r--r--lib/et/examples/Makefile2
-rw-r--r--lib/et/examples/et_demo.erl2
-rw-r--r--lib/et/include/et.hrl2
-rw-r--r--lib/et/src/Makefile2
-rw-r--r--lib/et/src/et.app.src6
-rw-r--r--lib/et/src/et.appup.src2
-rw-r--r--lib/et/src/et.erl2
-rw-r--r--lib/et/src/et_collector.erl31
-rw-r--r--lib/et/src/et_internal.hrl2
-rw-r--r--lib/et/src/et_selector.erl48
-rw-r--r--lib/et/src/et_viewer.erl2
-rw-r--r--lib/et/src/et_wx_contents_viewer.erl111
-rw-r--r--lib/et/src/et_wx_viewer.erl138
-rw-r--r--lib/et/src/modules.mk2
-rw-r--r--lib/et/subdirs.mk2
-rw-r--r--lib/et/test/Makefile2
-rw-r--r--lib/et/test/et_SUITE.erl24
-rw-r--r--lib/et/test/et_test_lib.erl2
-rw-r--r--lib/et/test/et_test_lib.hrl2
-rw-r--r--lib/et/test/et_wx_SUITE.erl25
-rwxr-xr-xlib/et/test/ett2
-rw-r--r--lib/et/test/ett.erl2
-rw-r--r--lib/et/vsn.mk2
-rw-r--r--lib/eunit/doc/overview.edoc9
-rw-r--r--lib/eunit/doc/src/book.xml2
-rw-r--r--lib/eunit/doc/src/notes.xml17
-rw-r--r--lib/eunit/doc/src/part.xml2
-rw-r--r--lib/eunit/doc/src/part_notes.xml2
-rw-r--r--lib/eunit/doc/src/ref_man.xml2
-rw-r--r--lib/eunit/include/eunit.hrl10
-rw-r--r--lib/eunit/src/eunit.appup.src2
-rw-r--r--lib/eunit/src/eunit_lib.erl6
-rw-r--r--lib/eunit/src/eunit_surefire.erl6
-rw-r--r--lib/eunit/test/Makefile6
-rw-r--r--lib/eunit/test/eunit_SUITE.erl2
-rw-r--r--lib/eunit/vsn.mk2
-rw-r--r--lib/gs/Makefile4
-rw-r--r--lib/gs/contribs/Makefile32
-rw-r--r--lib/gs/contribs/bonk/Makefile109
-rw-r--r--lib/gs/contribs/bonk/bitmaps/bonkbomb66
-rw-r--r--lib/gs/contribs/bonk/bitmaps/bonkface66
-rw-r--r--lib/gs/contribs/bonk/bitmaps/bonklogo320
-rw-r--r--lib/gs/contribs/bonk/bitmaps/bonkmiss66
-rw-r--r--lib/gs/contribs/bonk/bitmaps/bonktom66
-rw-r--r--lib/gs/contribs/bonk/bitmaps/bonkx66
-rw-r--r--lib/gs/contribs/bonk/bitmaps/erl-e106
-rw-r--r--lib/gs/contribs/bonk/bitmaps/erl-text106
-rw-r--r--lib/gs/contribs/bonk/bonk.erl584
-rw-r--r--lib/gs/contribs/bonk/bonk.gifbin196 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/bonk.tool6
-rw-r--r--lib/gs/contribs/bonk/bonk.txt30
-rw-r--r--lib/gs/contribs/bonk/bonk_sound.erl82
-rw-r--r--lib/gs/contribs/bonk/bonk_square.erl146
-rw-r--r--lib/gs/contribs/bonk/sounder.erl160
-rw-r--r--lib/gs/contribs/bonk/sounds/bonk.aubin2008 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/damn.aubin3744 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/explosion.aubin7708 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/gameover.aubin5986 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/hehee.aubin3772 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/level.aubin5360 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/missedme.aubin2735 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/music.aubin48072 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/ouch!!!.aubin2342 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/praisejesus.aubin16730 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/trumpet.aubin49332 -> 0 bytes
-rw-r--r--lib/gs/contribs/bonk/sounds/yes.aubin4400 -> 0 bytes
-rw-r--r--lib/gs/contribs/cols/Makefile103
-rw-r--r--lib/gs/contribs/cols/cols.erl625
-rw-r--r--lib/gs/contribs/cols/cols.gifbin185 -> 0 bytes
-rw-r--r--lib/gs/contribs/cols/cols.tool5
-rw-r--r--lib/gs/contribs/cols/help.gifbin172 -> 0 bytes
-rw-r--r--lib/gs/contribs/cols/highscore.erl103
-rw-r--r--lib/gs/contribs/mandel/Makefile101
-rw-r--r--lib/gs/contribs/mandel/mandel.erl351
-rw-r--r--lib/gs/contribs/mandel/mandel.gifbin394 -> 0 bytes
-rw-r--r--lib/gs/contribs/mandel/mandel.html74
-rw-r--r--lib/gs/contribs/mandel/mandel.tool6
-rw-r--r--lib/gs/contribs/othello/Makefile101
-rw-r--r--lib/gs/contribs/othello/othello.erl237
-rw-r--r--lib/gs/contribs/othello/othello.gifbin148 -> 0 bytes
-rw-r--r--lib/gs/contribs/othello/othello.tool6
-rw-r--r--lib/gs/contribs/othello/othello_adt.erl540
-rw-r--r--lib/gs/contribs/othello/othello_board.erl649
-rw-r--r--lib/gs/contribs/othello/priv/marker.bm43
-rw-r--r--lib/gs/contribs/othello/priv/square.bm43
-rw-r--r--lib/gs/doc/src/Makefile2
-rw-r--r--lib/gs/doc/src/book.xml2
-rw-r--r--lib/gs/doc/src/gs.xml2
-rw-r--r--lib/gs/doc/src/gs_chapter1.xml2
-rw-r--r--lib/gs/doc/src/gs_chapter2.xmlsrc2
-rw-r--r--lib/gs/doc/src/gs_chapter3.xml2
-rw-r--r--lib/gs/doc/src/gs_chapter4.xmlsrc2
-rw-r--r--lib/gs/doc/src/gs_chapter5.xmlsrc2
-rw-r--r--lib/gs/doc/src/gs_chapter6.xmlsrc2
-rw-r--r--lib/gs/doc/src/gs_chapter7.xmlsrc2
-rw-r--r--lib/gs/doc/src/gs_chapter8.xmlsrc2
-rw-r--r--lib/gs/doc/src/notes.xml19
-rw-r--r--lib/gs/doc/src/part.xml2
-rw-r--r--lib/gs/doc/src/part_notes.xml2
-rw-r--r--lib/gs/doc/src/ref_man.xml2
-rw-r--r--lib/gs/examples/Makefile2
-rw-r--r--lib/gs/examples/ball.erl2
-rw-r--r--lib/gs/examples/browser.erl2
-rw-r--r--lib/gs/examples/calc.erl2
-rw-r--r--lib/gs/examples/calc2.erl2
-rw-r--r--lib/gs/examples/color_demo.erl2
-rw-r--r--lib/gs/examples/color_demo2.erl2
-rw-r--r--lib/gs/examples/distrib_draw.erl2
-rw-r--r--lib/gs/examples/entry_demo.erl2
-rw-r--r--lib/gs/examples/event_test.erl2
-rw-r--r--lib/gs/examples/file_dialog.erl2
-rw-r--r--lib/gs/examples/focus_demo.erl2
-rw-r--r--lib/gs/examples/frac.erl2
-rw-r--r--lib/gs/examples/line_demo.erl2
-rw-r--r--lib/gs/examples/man.erl2
-rw-r--r--lib/gs/examples/menu_demo.erl2
-rw-r--r--lib/gs/examples/rubber.erl2
-rw-r--r--lib/gs/src/Makefile2
-rw-r--r--lib/gs/src/gs.appup.src2
-rw-r--r--lib/gs/src/gs.erl2
-rw-r--r--lib/gs/src/gs_frontend.erl2
-rw-r--r--lib/gs/src/gs_make.erl2
-rw-r--r--lib/gs/src/gs_packer.erl2
-rw-r--r--lib/gs/src/gs_widgets.erl2
-rw-r--r--lib/gs/src/gse.erl2
-rw-r--r--lib/gs/src/gstk.erl2
-rw-r--r--lib/gs/src/gstk.hrl2
-rw-r--r--lib/gs/src/gstk_arc.erl2
-rw-r--r--lib/gs/src/gstk_button.erl2
-rw-r--r--lib/gs/src/gstk_canvas.erl2
-rw-r--r--lib/gs/src/gstk_checkbutton.erl2
-rw-r--r--lib/gs/src/gstk_db.erl2
-rw-r--r--lib/gs/src/gstk_editor.erl2
-rw-r--r--lib/gs/src/gstk_entry.erl2
-rw-r--r--lib/gs/src/gstk_font.erl2
-rw-r--r--lib/gs/src/gstk_frame.erl2
-rw-r--r--lib/gs/src/gstk_generic.erl2
-rw-r--r--lib/gs/src/gstk_grid.erl2
-rw-r--r--lib/gs/src/gstk_gridline.erl2
-rw-r--r--lib/gs/src/gstk_gs.erl2
-rw-r--r--lib/gs/src/gstk_image.erl2
-rw-r--r--lib/gs/src/gstk_label.erl2
-rw-r--r--lib/gs/src/gstk_line.erl2
-rw-r--r--lib/gs/src/gstk_listbox.erl2
-rw-r--r--lib/gs/src/gstk_menu.erl2
-rw-r--r--lib/gs/src/gstk_menubar.erl2
-rw-r--r--lib/gs/src/gstk_menubutton.erl2
-rw-r--r--lib/gs/src/gstk_menuitem.erl2
-rw-r--r--lib/gs/src/gstk_oval.erl2
-rw-r--r--lib/gs/src/gstk_polygon.erl2
-rw-r--r--lib/gs/src/gstk_port_handler.erl2
-rw-r--r--lib/gs/src/gstk_radiobutton.erl2
-rw-r--r--lib/gs/src/gstk_rectangle.erl2
-rw-r--r--lib/gs/src/gstk_scale.erl2
-rw-r--r--lib/gs/src/gstk_text.erl2
-rw-r--r--lib/gs/src/gstk_widgets.erl2
-rw-r--r--lib/gs/src/gstk_window.erl2
-rw-r--r--lib/gs/src/tcl2erl.erl2
-rw-r--r--lib/gs/src/tool_file_dialog.erl2
-rw-r--r--lib/gs/src/tool_utils.erl2
-rw-r--r--lib/gs/tcl/Makefile2
-rw-r--r--lib/gs/tcl/Makefile.in2
-rw-r--r--lib/gs/test/Makefile2
-rw-r--r--lib/gs/vsn.mk2
-rw-r--r--lib/hipe/Makefile2
-rw-r--r--lib/hipe/amd64/Makefile4
-rw-r--r--lib/hipe/amd64/hipe_amd64_assemble.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_defuse.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_encode.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_frame.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_liveness.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_main.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_pp.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_ra.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_ra_finalise.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_ra_ls.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_ra_naive.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_ra_postconditions.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_ra_x87_ls.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_registers.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_spill_restore.erl2
-rw-r--r--lib/hipe/amd64/hipe_amd64_x87.erl2
-rw-r--r--lib/hipe/amd64/hipe_rtl_to_amd64.erl2
-rw-r--r--lib/hipe/arm/Makefile4
-rw-r--r--lib/hipe/arm/hipe_arm.erl2
-rw-r--r--lib/hipe/arm/hipe_arm.hrl2
-rw-r--r--lib/hipe/arm/hipe_arm_assemble.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_cfg.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_defuse.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_encode.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_finalise.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_frame.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_liveness_gpr.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_main.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_pp.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_ra.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_ra_finalise.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_ra_ls.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_ra_naive.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_ra_postconditions.erl2
-rw-r--r--lib/hipe/arm/hipe_arm_registers.erl2
-rw-r--r--lib/hipe/arm/hipe_rtl_to_arm.erl2
-rw-r--r--lib/hipe/cerl/Makefile4
-rw-r--r--lib/hipe/cerl/cerl_cconv.erl13
-rw-r--r--lib/hipe/cerl/cerl_closurean.erl2
-rw-r--r--lib/hipe/cerl/cerl_hipe_primops.hrl2
-rw-r--r--lib/hipe/cerl/cerl_hipeify.erl12
-rw-r--r--lib/hipe/cerl/cerl_lib.erl2
-rw-r--r--lib/hipe/cerl/cerl_messagean.erl2
-rw-r--r--lib/hipe/cerl/cerl_pmatch.erl30
-rw-r--r--lib/hipe/cerl/cerl_prettypr.erl2
-rw-r--r--lib/hipe/cerl/cerl_typean.erl2
-rw-r--r--lib/hipe/cerl/erl_bif_types.erl197
-rw-r--r--lib/hipe/cerl/erl_types.erl1845
-rw-r--r--lib/hipe/doc/Makefile2
-rw-r--r--lib/hipe/doc/src/Makefile2
-rw-r--r--lib/hipe/doc/src/book.xml2
-rw-r--r--lib/hipe/doc/src/hipe_app.xml2
-rw-r--r--lib/hipe/doc/src/notes.xml42
-rw-r--r--lib/hipe/doc/src/part_notes.xml2
-rw-r--r--lib/hipe/doc/src/ref_man.xml2
-rw-r--r--lib/hipe/flow/Makefile4
-rw-r--r--lib/hipe/flow/cfg.hrl12
-rw-r--r--lib/hipe/flow/cfg.inc2
-rw-r--r--lib/hipe/flow/ebb.inc2
-rw-r--r--lib/hipe/flow/hipe_bb.erl2
-rw-r--r--lib/hipe/flow/hipe_bb.hrl2
-rw-r--r--lib/hipe/flow/hipe_dominators.erl4
-rw-r--r--lib/hipe/flow/hipe_gen_cfg.erl2
-rw-r--r--lib/hipe/flow/liveness.inc2
-rw-r--r--lib/hipe/icode/Makefile6
-rw-r--r--lib/hipe/icode/hipe_beam_to_icode.erl2
-rw-r--r--lib/hipe/icode/hipe_icode.erl52
-rw-r--r--lib/hipe/icode/hipe_icode.hrl7
-rw-r--r--lib/hipe/icode/hipe_icode_bincomp.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_call_elim.erl78
-rw-r--r--lib/hipe/icode/hipe_icode_callgraph.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_cfg.erl5
-rw-r--r--lib/hipe/icode/hipe_icode_coordinator.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_ebb.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_exceptions.erl20
-rw-r--r--lib/hipe/icode/hipe_icode_fp.erl402
-rw-r--r--lib/hipe/icode/hipe_icode_heap_test.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_inline_bifs.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_instruction_counter.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_liveness.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_mulret.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_pp.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_primops.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_primops.hrl2
-rw-r--r--lib/hipe/icode/hipe_icode_range.erl158
-rw-r--r--lib/hipe/icode/hipe_icode_split_arith.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_ssa.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_ssa_const_prop.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_ssa_copy_prop.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_ssa_struct_reuse.erl6
-rw-r--r--lib/hipe/icode/hipe_icode_type.erl36
-rw-r--r--lib/hipe/icode/hipe_icode_type.hrl2
-rw-r--r--lib/hipe/llvm/Makefile21
-rw-r--r--lib/hipe/llvm/elf_format.erl654
-rw-r--r--lib/hipe/llvm/elf_format.hrl40
-rw-r--r--lib/hipe/llvm/hipe_llvm.erl98
-rw-r--r--lib/hipe/llvm/hipe_llvm_main.erl189
-rw-r--r--lib/hipe/llvm/hipe_rtl_to_llvm.erl45
-rw-r--r--lib/hipe/main/Makefile4
-rw-r--r--lib/hipe/main/hipe.app.src1
-rw-r--r--lib/hipe/main/hipe.appup.src2
-rw-r--r--lib/hipe/main/hipe.erl85
-rw-r--r--lib/hipe/main/hipe.hrl.src45
-rw-r--r--lib/hipe/main/hipe_main.erl32
-rw-r--r--lib/hipe/misc/Makefile4
-rw-r--r--lib/hipe/misc/hipe_consttab.erl15
-rw-r--r--lib/hipe/misc/hipe_consttab.hrl4
-rw-r--r--lib/hipe/misc/hipe_data_pp.erl2
-rw-r--r--lib/hipe/misc/hipe_gensym.erl2
-rw-r--r--lib/hipe/misc/hipe_pack_constants.erl2
-rw-r--r--lib/hipe/misc/hipe_sdi.erl2
-rw-r--r--lib/hipe/misc/hipe_sdi.hrl2
-rw-r--r--lib/hipe/opt/Makefile4
-rw-r--r--lib/hipe/opt/hipe_schedule.erl2
-rw-r--r--lib/hipe/opt/hipe_schedule_prio.erl2
-rw-r--r--lib/hipe/opt/hipe_spillmin.erl2
-rw-r--r--lib/hipe/opt/hipe_spillmin_color.erl2
-rw-r--r--lib/hipe/opt/hipe_spillmin_scan.erl2
-rw-r--r--lib/hipe/opt/hipe_target_machine.erl2
-rw-r--r--lib/hipe/opt/hipe_ultra_mod2.erl2
-rw-r--r--lib/hipe/opt/hipe_ultra_prio.erl2
-rw-r--r--lib/hipe/ppc/Makefile4
-rw-r--r--lib/hipe/ppc/hipe_ppc.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc.hrl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_assemble.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_cfg.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_defuse.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_encode.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_finalise.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_frame.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_liveness_all.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_liveness_fpr.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_liveness_gpr.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_main.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_pp.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_ra.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_ra_finalise.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_ra_ls.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_ra_naive.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_ra_postconditions.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_ra_postconditions_fp.erl2
-rw-r--r--lib/hipe/ppc/hipe_ppc_registers.erl2
-rw-r--r--lib/hipe/ppc/hipe_rtl_to_ppc.erl2
-rw-r--r--lib/hipe/regalloc/Makefile4
-rw-r--r--lib/hipe/regalloc/hipe_adj_list.erl2
-rw-r--r--lib/hipe/regalloc/hipe_amd64_specific.erl2
-rw-r--r--lib/hipe/regalloc/hipe_amd64_specific_sse2.erl2
-rw-r--r--lib/hipe/regalloc/hipe_amd64_specific_x87.erl2
-rw-r--r--lib/hipe/regalloc/hipe_arm_specific.erl2
-rw-r--r--lib/hipe/regalloc/hipe_coalescing_regalloc.erl2
-rw-r--r--lib/hipe/regalloc/hipe_graph_coloring_regalloc.erl2
-rw-r--r--lib/hipe/regalloc/hipe_ig.erl2
-rw-r--r--lib/hipe/regalloc/hipe_ig_moves.erl2
-rw-r--r--lib/hipe/regalloc/hipe_ls_regalloc.erl2
-rw-r--r--lib/hipe/regalloc/hipe_moves.erl2
-rw-r--r--lib/hipe/regalloc/hipe_node_sets.erl2
-rw-r--r--lib/hipe/regalloc/hipe_optimistic_regalloc.erl2
-rw-r--r--lib/hipe/regalloc/hipe_ppc_specific.erl2
-rw-r--r--lib/hipe/regalloc/hipe_ppc_specific_fp.erl2
-rw-r--r--lib/hipe/regalloc/hipe_reg_worklists.erl2
-rw-r--r--lib/hipe/regalloc/hipe_regalloc_loop.erl2
-rw-r--r--lib/hipe/regalloc/hipe_sparc_specific.erl2
-rw-r--r--lib/hipe/regalloc/hipe_sparc_specific_fp.erl2
-rw-r--r--lib/hipe/regalloc/hipe_spillcost.erl2
-rw-r--r--lib/hipe/regalloc/hipe_spillcost.hrl2
-rw-r--r--lib/hipe/regalloc/hipe_temp_map.erl2
-rw-r--r--lib/hipe/regalloc/hipe_x86_specific.erl2
-rw-r--r--lib/hipe/regalloc/hipe_x86_specific_x87.erl2
-rw-r--r--lib/hipe/rtl/Makefile4
-rw-r--r--lib/hipe/rtl/hipe_icode2rtl.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl.erl9
-rw-r--r--lib/hipe/rtl/hipe_rtl.hrl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_arch.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_arith.inc57
-rw-r--r--lib/hipe/rtl/hipe_rtl_arith_32.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_arith_64.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_binary.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_binary_construct.erl478
-rw-r--r--lib/hipe/rtl/hipe_rtl_binary_match.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_cfg.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_cleanup_const.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_exceptions.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_lcm.erl83
-rw-r--r--lib/hipe/rtl/hipe_rtl_liveness.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_mk_switch.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_primops.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_ssa.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_ssa_avail_expr.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_ssa_const_prop.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_ssapre.erl476
-rw-r--r--lib/hipe/rtl/hipe_rtl_symbolic.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl_varmap.erl2
-rw-r--r--lib/hipe/sparc/Makefile4
-rw-r--r--lib/hipe/sparc/hipe_rtl_to_sparc.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc.hrl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_assemble.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_cfg.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_defuse.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_encode.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_finalise.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_frame.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_liveness_all.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_liveness_fpr.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_liveness_gpr.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_main.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_pp.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_ra.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_ra_finalise.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_ra_ls.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_ra_naive.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_ra_postconditions.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_ra_postconditions_fp.erl2
-rw-r--r--lib/hipe/sparc/hipe_sparc_registers.erl2
-rw-r--r--lib/hipe/ssa/hipe_ssa.inc2
-rw-r--r--lib/hipe/ssa/hipe_ssa_const_prop.inc2
-rw-r--r--lib/hipe/ssa/hipe_ssa_copy_prop.inc2
-rw-r--r--lib/hipe/ssa/hipe_ssa_liveness.inc2
-rw-r--r--lib/hipe/test/Makefile7
-rw-r--r--lib/hipe/test/basic_SUITE_data/basic_floats.erl70
-rw-r--r--lib/hipe/test/bs_SUITE_data/bs_match_compiler.erl1235
-rw-r--r--lib/hipe/test/bs_SUITE_data/bs_utf.erl2
-rw-r--r--lib/hipe/test/hipe_SUITE.erl3
-rw-r--r--lib/hipe/test/hipe_testsuite_driver.erl26
-rw-r--r--lib/hipe/test/opt_verify_SUITE.erl62
-rw-r--r--lib/hipe/test/opt_verify_SUITE_data/call_elim_test.erl12
-rw-r--r--lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_no_opt_poss.erl32
-rw-r--r--lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_opt_poss.erl32
-rw-r--r--lib/hipe/tools/Makefile4
-rw-r--r--lib/hipe/tools/hipe_jit.erl2
-rw-r--r--lib/hipe/tools/hipe_profile.erl2
-rw-r--r--lib/hipe/tools/hipe_timer.erl2
-rw-r--r--lib/hipe/util/Makefile4
-rw-r--r--lib/hipe/util/hipe_digraph.erl2
-rw-r--r--lib/hipe/util/hipe_dot.erl2
-rw-r--r--lib/hipe/util/hipe_timing.erl2
-rw-r--r--lib/hipe/util/hipe_vectors.erl2
-rw-r--r--lib/hipe/util/hipe_vectors.hrl2
-rw-r--r--lib/hipe/vsn.mk2
-rw-r--r--lib/hipe/x86/Makefile4
-rw-r--r--lib/hipe/x86/hipe_rtl_to_x86.erl2
-rw-r--r--lib/hipe/x86/hipe_x86.erl2
-rw-r--r--lib/hipe/x86/hipe_x86.hrl2
-rw-r--r--lib/hipe/x86/hipe_x86_assemble.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_cfg.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_defuse.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_encode.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_frame.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_liveness.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_main.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_postpass.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_pp.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_ra.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_ra_finalise.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_ra_ls.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_ra_naive.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_ra_postconditions.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_ra_x87_ls.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_registers.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_spill_restore.erl2
-rw-r--r--lib/hipe/x86/hipe_x86_x87.erl2
-rw-r--r--lib/ic/Makefile2
-rw-r--r--lib/ic/c_src/Makefile2
-rw-r--r--lib/ic/c_src/Makefile.in2
-rw-r--r--lib/ic/c_src/Makefile.win322
-rw-r--r--lib/ic/c_src/ic.c2
-rw-r--r--lib/ic/c_src/ic_tmo.c2
-rw-r--r--lib/ic/c_src/oe_ei_code_erlang_binary.c2
-rw-r--r--lib/ic/c_src/oe_ei_decode_longlong.c2
-rw-r--r--lib/ic/c_src/oe_ei_decode_ulonglong.c2
-rw-r--r--lib/ic/c_src/oe_ei_decode_wchar.c2
-rw-r--r--lib/ic/c_src/oe_ei_decode_wstring.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_atom.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_char.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_double.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_list_header.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_long.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_longlong.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_pid.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_port.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_ref.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_string.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_term.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_tuple_header.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_ulong.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_ulonglong.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_version.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_wchar.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_wstring.c2
-rw-r--r--lib/ic/doc/src/CORBA_Environment_alloc.xml2
-rw-r--r--lib/ic/doc/src/Makefile2
-rw-r--r--lib/ic/doc/src/book.xml2
-rw-r--r--lib/ic/doc/src/c-part.xml2
-rw-r--r--lib/ic/doc/src/ch_basic_idl.xml2
-rw-r--r--lib/ic/doc/src/ch_c_client.xml2
-rw-r--r--lib/ic/doc/src/ch_c_corba_env.xml2
-rw-r--r--lib/ic/doc/src/ch_c_mapping.xml2
-rw-r--r--lib/ic/doc/src/ch_c_server.xml2
-rw-r--r--lib/ic/doc/src/ch_erl_genserv.xml2
-rw-r--r--lib/ic/doc/src/ch_erl_plain.xml2
-rw-r--r--lib/ic/doc/src/ch_ic_protocol.xml2
-rw-r--r--lib/ic/doc/src/ch_introduction.xml2
-rw-r--r--lib/ic/doc/src/ch_java.xml2
-rw-r--r--lib/ic/doc/src/erl-part.xml2
-rw-r--r--lib/ic/doc/src/ic.xml2
-rw-r--r--lib/ic/doc/src/ic_c_protocol.xml2
-rw-r--r--lib/ic/doc/src/ic_clib.xml2
-rw-r--r--lib/ic/doc/src/java-part.xml2
-rw-r--r--lib/ic/doc/src/notes.xml19
-rw-r--r--lib/ic/doc/src/part.xml2
-rw-r--r--lib/ic/doc/src/part_notes.xml2
-rw-r--r--lib/ic/doc/src/ref_man.xml2
-rw-r--r--lib/ic/examples/all-against-all/Makefile2
-rw-r--r--lib/ic/examples/all-against-all/Makefile.win322
-rw-r--r--lib/ic/examples/all-against-all/callbacks.c2
-rw-r--r--lib/ic/examples/all-against-all/client.c2
-rw-r--r--lib/ic/examples/all-against-all/client.erl2
-rw-r--r--lib/ic/examples/all-against-all/client.java2
-rw-r--r--lib/ic/examples/all-against-all/rmod_random_impl.erl2
-rw-r--r--lib/ic/examples/all-against-all/server.c2
-rw-r--r--lib/ic/examples/all-against-all/server.erl2
-rw-r--r--lib/ic/examples/all-against-all/server.java2
-rw-r--r--lib/ic/examples/all-against-all/serverImpl.java2
-rw-r--r--lib/ic/examples/c-client/Makefile2
-rw-r--r--lib/ic/examples/c-client/client.c2
-rw-r--r--lib/ic/examples/c-client/rmod_random_impl.erl2
-rw-r--r--lib/ic/examples/c-client/test.erl2
-rw-r--r--lib/ic/examples/c-server/Makefile2
-rw-r--r--lib/ic/examples/c-server/callbacks.c2
-rw-r--r--lib/ic/examples/c-server/client.c2
-rw-r--r--lib/ic/examples/c-server/client.erl2
-rw-r--r--lib/ic/examples/c-server/server.c2
-rw-r--r--lib/ic/examples/erl-genserv/rmod_random_impl.erl2
-rw-r--r--lib/ic/examples/erl-plain/rmod_random_impl.erl2
-rw-r--r--lib/ic/examples/java-client-server/client.java2
-rw-r--r--lib/ic/examples/java-client-server/server.java2
-rw-r--r--lib/ic/examples/java-client-server/serverImpl.java2
-rw-r--r--lib/ic/examples/pre_post_condition/Makefile2
-rw-r--r--lib/ic/examples/pre_post_condition/m_i_impl.erl2
-rw-r--r--lib/ic/examples/pre_post_condition/tracer.erl2
-rw-r--r--lib/ic/include/ic.h2
-rw-r--r--lib/ic/java_src/Makefile2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/Any.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/AnyHelper.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/AnyHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/BooleanHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/ByteHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/CharHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/DoubleHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/Environment.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/FloatHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/Holder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/IntHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/LongHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/Makefile2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/Pid.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/PidHelper.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/PidHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/Port.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/PortHelper.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/PortHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/Ref.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/RefHelper.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/RefHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/ShortHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/StringHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/TCKind.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/Term.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/TermHelper.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/TermHolder.java2
-rw-r--r--lib/ic/java_src/com/ericsson/otp/ic/TypeCode.java2
-rw-r--r--lib/ic/src/Makefile2
-rw-r--r--lib/ic/src/ic.erl2
-rw-r--r--lib/ic/src/ic.hrl2
-rw-r--r--lib/ic/src/ic_array_java.erl2
-rw-r--r--lib/ic/src/ic_attribute_java.erl2
-rw-r--r--lib/ic/src/ic_cbe.erl2
-rw-r--r--lib/ic/src/ic_cclient.erl2
-rw-r--r--lib/ic/src/ic_code.erl2
-rw-r--r--lib/ic/src/ic_codegen.erl2
-rw-r--r--lib/ic/src/ic_constant_java.erl2
-rw-r--r--lib/ic/src/ic_cserver.erl2
-rw-r--r--lib/ic/src/ic_debug.hrl2
-rw-r--r--lib/ic/src/ic_enum_java.erl2
-rw-r--r--lib/ic/src/ic_erl_template.erl2
-rw-r--r--lib/ic/src/ic_erlbe.erl2
-rw-r--r--lib/ic/src/ic_error.erl2
-rw-r--r--lib/ic/src/ic_fetch.erl2
-rw-r--r--lib/ic/src/ic_file.erl2
-rw-r--r--lib/ic/src/ic_forms.erl2
-rw-r--r--lib/ic/src/ic_genobj.erl2
-rw-r--r--lib/ic/src/ic_java_type.erl2
-rw-r--r--lib/ic/src/ic_jbe.erl2
-rw-r--r--lib/ic/src/ic_noc.erl2
-rw-r--r--lib/ic/src/ic_options.erl2
-rw-r--r--lib/ic/src/ic_plainbe.erl2
-rw-r--r--lib/ic/src/ic_pp.erl2
-rw-r--r--lib/ic/src/ic_pragma.erl2
-rw-r--r--lib/ic/src/ic_sequence_java.erl2
-rw-r--r--lib/ic/src/ic_struct_java.erl2
-rw-r--r--lib/ic/src/ic_symtab.erl2
-rw-r--r--lib/ic/src/ic_union_java.erl2
-rw-r--r--lib/ic/src/ic_util.erl2
-rw-r--r--lib/ic/src/icenum.erl2
-rw-r--r--lib/ic/src/iceval.erl2
-rw-r--r--lib/ic/src/icforms.hrl2
-rw-r--r--lib/ic/src/icparse.yrl2
-rw-r--r--lib/ic/src/icpreproc.erl2
-rw-r--r--lib/ic/src/icscan.erl2
-rw-r--r--lib/ic/src/icstruct.erl2
-rw-r--r--lib/ic/src/ictk.erl2
-rw-r--r--lib/ic/src/ictype.erl2
-rw-r--r--lib/ic/src/icunion.erl2
-rw-r--r--lib/ic/src/icyeccpre.hrl2
-rw-r--r--lib/ic/test/Makefile6
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE.erl78
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE_data/Makefile.src2
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE_data/c_client.c3
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE_data/c_erl_test.idl2
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE_data/erl_server.erl2
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE_data/m_i_impl.erl2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_SUITE.erl78
-rw-r--r--lib/ic/test/c_client_erl_server_proto_SUITE_data/Makefile.src2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_SUITE_data/c_client.c2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_SUITE_data/c_erl_test.idl2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_SUITE_data/erl_server.erl2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_SUITE_data/m_i_impl.erl2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_SUITE_data/my.c2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl80
-rw-r--r--lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/Makefile.src2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_client.c2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_erl_test.idl2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/erl_server.erl2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/m_i_impl.erl2
-rw-r--r--lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/my.c2
-rw-r--r--lib/ic/test/erl_client_c_server_SUITE.erl79
-rw-r--r--lib/ic/test/erl_client_c_server_SUITE_data/Makefile.src2
-rw-r--r--lib/ic/test/erl_client_c_server_SUITE_data/c_server.c2
-rw-r--r--lib/ic/test/erl_client_c_server_SUITE_data/callbacks.c2
-rw-r--r--lib/ic/test/erl_client_c_server_SUITE_data/erl_c_test.idl2
-rw-r--r--lib/ic/test/erl_client_c_server_SUITE_data/erl_client.erl2
-rw-r--r--lib/ic/test/erl_client_c_server_proto_SUITE.erl79
-rw-r--r--lib/ic/test/erl_client_c_server_proto_SUITE_data/Makefile.src2
-rw-r--r--lib/ic/test/erl_client_c_server_proto_SUITE_data/c_server.c2
-rw-r--r--lib/ic/test/erl_client_c_server_proto_SUITE_data/callbacks.c2
-rw-r--r--lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_c_test.idl2
-rw-r--r--lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_client.erl2
-rw-r--r--lib/ic/test/erl_client_c_server_proto_SUITE_data/my.c2
-rw-r--r--lib/ic/test/ic_SUITE.erl473
-rw-r--r--lib/ic/test/ic_SUITE_data/attr.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/c_err1.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/c_err2.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/c_err3.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/c_norm.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/enum.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/forward.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/include.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/include2.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/include3.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/inherit.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/inherit_err.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/inherit_warn.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/mult_ids.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/nasty.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/one.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/one_followed.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/one_out.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/one_raises.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/one_void.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/raises_reg.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/struct.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/syntax1.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/syntax2.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/syntax3.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/syntax4.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/syntax5.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/syntax6.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/type.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/typeid.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/u_case_mult.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/u_default.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/u_mult.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/u_norm.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/u_type.idl2
-rw-r--r--lib/ic/test/ic_SUITE_data/undef_id.idl2
-rw-r--r--lib/ic/test/ic_be_SUITE.erl27
-rw-r--r--lib/ic/test/ic_be_SUITE_data/plain.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE.erl216
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/arg.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/cascade.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/comment.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/concat.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/define.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/if.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/if_zero.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/improp_nest_constr.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/inc.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/included1.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/included2.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/includer.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/line.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/misc.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/nopara.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/predef.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/predef_time.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/self_ref.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/separate.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/swallow_sc.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE_data/unintended_grp.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE.erl52
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/reg_m0.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/reg_m1.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/reg_m2.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/reg_m3.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/reg_m4.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/reg_m5.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/reg_m6.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/reg_m7.idl2
-rw-r--r--lib/ic/test/ic_pragma_SUITE_data/uggly.idl2
-rw-r--r--lib/ic/test/ic_register_SUITE.erl190
-rw-r--r--lib/ic/test/ic_register_SUITE_data/reg_m10.idl2
-rw-r--r--lib/ic/test/ic_register_SUITE_data/reg_m11.idl2
-rw-r--r--lib/ic/test/ic_register_SUITE_data/reg_m12.idl2
-rw-r--r--lib/ic/test/ic_register_SUITE_data/reg_m8.idl2
-rw-r--r--lib/ic/test/ic_register_SUITE_data/reg_m9.idl2
-rw-r--r--lib/ic/test/java_client_erl_server_SUITE.erl141
-rw-r--r--lib/ic/test/java_client_erl_server_SUITE_data/JavaClient.java2
-rw-r--r--lib/ic/test/java_client_erl_server_SUITE_data/Makefile.src2
-rw-r--r--lib/ic/test/java_client_erl_server_SUITE_data/java_erl_test.idl2
-rw-r--r--lib/ic/test/java_client_erl_server_SUITE_data/m_i_impl.erl2
-rw-r--r--lib/ic/vsn.mk2
-rw-r--r--lib/inets/Makefile2
-rw-r--r--lib/inets/doc/src/book.xml2
-rw-r--r--lib/inets/doc/src/ftp.xml2
-rw-r--r--lib/inets/doc/src/ftp_client.xml2
-rw-r--r--lib/inets/doc/src/http_client.xml2
-rw-r--r--lib/inets/doc/src/httpd_socket.xml2
-rw-r--r--lib/inets/doc/src/httpd_util.xml2
-rw-r--r--lib/inets/doc/src/inets.xml2
-rw-r--r--lib/inets/doc/src/inets_services.xml2
-rw-r--r--lib/inets/doc/src/introduction.xml2
-rw-r--r--lib/inets/doc/src/mod_alias.xml2
-rw-r--r--lib/inets/doc/src/mod_auth.xml2
-rw-r--r--lib/inets/doc/src/mod_esi.xml157
-rw-r--r--lib/inets/doc/src/mod_security.xml2
-rw-r--r--lib/inets/doc/src/notes.xml72
-rw-r--r--lib/inets/doc/src/notes_history.xml2
-rw-r--r--lib/inets/doc/src/part.xml2
-rw-r--r--lib/inets/doc/src/part_notes.xml2
-rw-r--r--lib/inets/doc/src/part_notes_history.xml2
-rw-r--r--lib/inets/examples/Makefile2
-rw-r--r--lib/inets/examples/httpd_load_test/Makefile2
-rw-r--r--lib/inets/examples/httpd_load_test/hdlt.erl2
-rw-r--r--lib/inets/examples/httpd_load_test/hdlt.sh.skel2
-rw-r--r--lib/inets/examples/httpd_load_test/hdlt_client.erl2
-rw-r--r--lib/inets/examples/httpd_load_test/hdlt_ctrl.erl2
-rw-r--r--lib/inets/examples/httpd_load_test/hdlt_logger.erl2
-rw-r--r--lib/inets/examples/httpd_load_test/hdlt_logger.hrl2
-rw-r--r--lib/inets/examples/httpd_load_test/hdlt_server.erl2
-rw-r--r--lib/inets/examples/httpd_load_test/hdlt_slave.erl2
-rw-r--r--lib/inets/examples/httpd_load_test/modules.mk2
-rw-r--r--lib/inets/examples/server_root/Makefile2
-rw-r--r--lib/inets/examples/server_root/conf/8080.conf2
-rw-r--r--lib/inets/examples/server_root/conf/8888.conf2
-rw-r--r--lib/inets/examples/server_root/conf/httpd.conf4
-rw-r--r--lib/inets/examples/server_root/conf/ssl.conf2
-rw-r--r--lib/inets/include/httpd.hrl2
-rw-r--r--lib/inets/include/mod_auth.hrl2
-rw-r--r--lib/inets/priv/Makefile2
-rw-r--r--lib/inets/src/Makefile2
-rw-r--r--lib/inets/src/ftp/Makefile2
-rw-r--r--lib/inets/src/ftp/ftp.erl28
-rw-r--r--lib/inets/src/ftp/ftp_internal.hrl2
-rw-r--r--lib/inets/src/ftp/ftp_progress.erl2
-rw-r--r--lib/inets/src/ftp/ftp_response.erl3
-rw-r--r--lib/inets/src/ftp/ftp_sup.erl2
-rw-r--r--lib/inets/src/http_client/Makefile2
-rw-r--r--lib/inets/src/http_client/httpc.erl2
-rw-r--r--lib/inets/src/http_client/httpc_cookie.erl2
-rw-r--r--lib/inets/src/http_client/httpc_handler_sup.erl2
-rw-r--r--lib/inets/src/http_client/httpc_internal.hrl2
-rw-r--r--lib/inets/src/http_client/httpc_manager.erl2
-rw-r--r--lib/inets/src/http_client/httpc_profile_sup.erl2
-rw-r--r--lib/inets/src/http_client/httpc_request.erl25
-rw-r--r--lib/inets/src/http_client/httpc_response.erl2
-rw-r--r--lib/inets/src/http_client/httpc_sup.erl2
-rw-r--r--lib/inets/src/http_lib/Makefile2
-rw-r--r--lib/inets/src/http_lib/http_chunk.erl2
-rw-r--r--lib/inets/src/http_lib/http_response.erl2
-rw-r--r--lib/inets/src/http_lib/http_transport.erl2
-rw-r--r--lib/inets/src/http_lib/http_uri.erl2
-rw-r--r--lib/inets/src/http_lib/http_util.erl2
-rw-r--r--lib/inets/src/http_server/httpd.erl2
-rw-r--r--lib/inets/src/http_server/httpd.hrl2
-rw-r--r--lib/inets/src/http_server/httpd_acceptor.erl2
-rw-r--r--lib/inets/src/http_server/httpd_acceptor_sup.erl2
-rw-r--r--lib/inets/src/http_server/httpd_cgi.erl2
-rw-r--r--lib/inets/src/http_server/httpd_conf.erl2
-rw-r--r--lib/inets/src/http_server/httpd_connection_sup.erl2
-rw-r--r--lib/inets/src/http_server/httpd_esi.erl2
-rw-r--r--lib/inets/src/http_server/httpd_example.erl2
-rw-r--r--lib/inets/src/http_server/httpd_file.erl2
-rw-r--r--lib/inets/src/http_server/httpd_instance_sup.erl2
-rw-r--r--lib/inets/src/http_server/httpd_internal.hrl2
-rw-r--r--lib/inets/src/http_server/httpd_log.erl2
-rw-r--r--lib/inets/src/http_server/httpd_manager.erl2
-rw-r--r--lib/inets/src/http_server/httpd_misc_sup.erl2
-rw-r--r--lib/inets/src/http_server/httpd_request_handler.erl2
-rw-r--r--lib/inets/src/http_server/httpd_response.erl3
-rw-r--r--lib/inets/src/http_server/httpd_script_env.erl2
-rw-r--r--lib/inets/src/http_server/httpd_socket.erl2
-rw-r--r--lib/inets/src/http_server/httpd_sup.erl2
-rw-r--r--lib/inets/src/http_server/httpd_util.erl2
-rw-r--r--lib/inets/src/http_server/mod_actions.erl2
-rw-r--r--lib/inets/src/http_server/mod_alias.erl2
-rw-r--r--lib/inets/src/http_server/mod_auth.erl2
-rw-r--r--lib/inets/src/http_server/mod_auth.hrl2
-rw-r--r--lib/inets/src/http_server/mod_auth_dets.erl2
-rw-r--r--lib/inets/src/http_server/mod_auth_mnesia.erl2
-rw-r--r--lib/inets/src/http_server/mod_auth_plain.erl2
-rw-r--r--lib/inets/src/http_server/mod_auth_server.erl2
-rw-r--r--lib/inets/src/http_server/mod_browser.erl2
-rw-r--r--lib/inets/src/http_server/mod_cgi.erl2
-rw-r--r--lib/inets/src/http_server/mod_dir.erl2
-rw-r--r--lib/inets/src/http_server/mod_disk_log.erl2
-rw-r--r--lib/inets/src/http_server/mod_esi.erl2
-rw-r--r--lib/inets/src/http_server/mod_get.erl2
-rw-r--r--lib/inets/src/http_server/mod_head.erl2
-rw-r--r--lib/inets/src/http_server/mod_htaccess.erl6
-rw-r--r--lib/inets/src/http_server/mod_log.erl2
-rw-r--r--lib/inets/src/http_server/mod_range.erl2
-rw-r--r--lib/inets/src/http_server/mod_responsecontrol.erl2
-rw-r--r--lib/inets/src/http_server/mod_security.erl2
-rw-r--r--lib/inets/src/http_server/mod_security_server.erl2
-rw-r--r--lib/inets/src/http_server/mod_trace.erl2
-rw-r--r--lib/inets/src/inets_app/Makefile6
-rw-r--r--lib/inets/src/inets_app/inets.app.src4
-rw-r--r--lib/inets/src/inets_app/inets.appup.src2
-rw-r--r--lib/inets/src/inets_app/inets.erl2
-rw-r--r--lib/inets/src/inets_app/inets.mk2
-rw-r--r--lib/inets/src/inets_app/inets_app.erl2
-rw-r--r--lib/inets/src/inets_app/inets_internal.hrl2
-rw-r--r--lib/inets/src/inets_app/inets_lib.erl2
-rw-r--r--lib/inets/src/inets_app/inets_regexp.erl414
-rw-r--r--lib/inets/src/inets_app/inets_service.erl2
-rw-r--r--lib/inets/src/inets_app/inets_sup.erl2
-rw-r--r--lib/inets/src/inets_app/inets_time_compat.erl72
-rw-r--r--lib/inets/src/tftp/Makefile2
-rw-r--r--lib/inets/src/tftp/tftp.erl2
-rw-r--r--lib/inets/src/tftp/tftp.hrl2
-rw-r--r--lib/inets/src/tftp/tftp_binary.erl2
-rw-r--r--lib/inets/src/tftp/tftp_engine.erl5
-rw-r--r--lib/inets/src/tftp/tftp_file.erl2
-rw-r--r--lib/inets/src/tftp/tftp_lib.erl2
-rw-r--r--lib/inets/src/tftp/tftp_logger.erl4
-rw-r--r--lib/inets/src/tftp/tftp_sup.erl4
-rw-r--r--lib/inets/test/Makefile7
-rw-r--r--lib/inets/test/erl_make_certs.erl2
-rw-r--r--lib/inets/test/ftp_SUITE.erl645
-rw-r--r--lib/inets/test/ftp_format_SUITE.erl114
-rw-r--r--lib/inets/test/ftp_property_test_SUITE.erl2
-rw-r--r--lib/inets/test/ftp_suite_lib.erl1696
-rw-r--r--lib/inets/test/http_format_SUITE.erl8
-rw-r--r--lib/inets/test/httpc_SUITE.erl86
-rw-r--r--lib/inets/test/httpc_cookie_SUITE.erl373
-rw-r--r--lib/inets/test/httpc_proxy_SUITE.erl18
-rw-r--r--lib/inets/test/httpc_proxy_SUITE_data/apache2/apache2.conf2
-rwxr-xr-xlib/inets/test/httpc_proxy_SUITE_data/server_proxy.sh2
-rw-r--r--lib/inets/test/httpd_1_0.erl2
-rw-r--r--lib/inets/test/httpd_1_1.erl10
-rw-r--r--lib/inets/test/httpd_SUITE.erl331
-rw-r--r--lib/inets/test/httpd_basic_SUITE.erl35
-rw-r--r--lib/inets/test/httpd_block.erl4
-rw-r--r--lib/inets/test/httpd_load.erl10
-rw-r--r--lib/inets/test/httpd_mod.erl190
-rw-r--r--lib/inets/test/httpd_mod_SUITE.erl2
-rw-r--r--lib/inets/test/httpd_poll.erl2
-rw-r--r--lib/inets/test/httpd_test_data/server_root/Makefile2
-rw-r--r--lib/inets/test/httpd_test_data/server_root/conf/8080.conf2
-rw-r--r--lib/inets/test/httpd_test_data/server_root/conf/8888.conf2
-rw-r--r--lib/inets/test/httpd_test_data/server_root/conf/httpd.conf4
-rw-r--r--lib/inets/test/httpd_test_data/server_root/conf/ssl.conf2
-rw-r--r--lib/inets/test/httpd_test_lib.erl2
-rw-r--r--lib/inets/test/httpd_time_test.erl4
-rw-r--r--lib/inets/test/inets_SUITE.erl119
-rw-r--r--lib/inets/test/inets_app_test.erl245
-rw-r--r--lib/inets/test/inets_appup_test.erl71
-rw-r--r--lib/inets/test/inets_socketwrap_SUITE.erl6
-rw-r--r--lib/inets/test/inets_socketwrap_SUITE_data/setuid_socket_wrap.c2
-rw-r--r--lib/inets/test/inets_sup_SUITE.erl71
-rw-r--r--lib/inets/test/inets_test_lib.hrl90
-rw-r--r--lib/inets/test/old_httpd_SUITE.erl492
-rw-r--r--lib/inets/test/old_httpd_SUITE_data/server_root/Makefile2
-rw-r--r--lib/inets/test/old_httpd_SUITE_data/server_root/conf/8080.conf2
-rw-r--r--lib/inets/test/old_httpd_SUITE_data/server_root/conf/8888.conf2
-rw-r--r--lib/inets/test/old_httpd_SUITE_data/server_root/conf/httpd.conf4
-rw-r--r--lib/inets/test/old_httpd_SUITE_data/server_root/conf/ssl.conf2
-rw-r--r--lib/inets/test/property_test/ftp_simple_client_server.erl2
-rw-r--r--lib/inets/test/tftp_SUITE.erl2
-rw-r--r--lib/inets/test/tftp_test_lib.erl2
-rw-r--r--lib/inets/test/tftp_test_lib.hrl2
-rw-r--r--lib/inets/test/uri_SUITE.erl2
-rw-r--r--lib/inets/vsn.mk4
-rw-r--r--lib/jinterface/Makefile2
-rw-r--r--lib/jinterface/doc/src/Makefile2
-rw-r--r--lib/jinterface/doc/src/book.xml2
-rw-r--r--lib/jinterface/doc/src/index.html.src2
-rw-r--r--lib/jinterface/doc/src/jinterface.xml2
-rw-r--r--lib/jinterface/doc/src/jinterface_users_guide.xml2
-rw-r--r--lib/jinterface/doc/src/notes.xml34
-rw-r--r--lib/jinterface/doc/src/notes_history.xml2
-rw-r--r--lib/jinterface/doc/src/part.xml2
-rw-r--r--lib/jinterface/doc/src/part_notes.xml2
-rw-r--r--lib/jinterface/doc/src/part_notes_history.xml2
-rw-r--r--lib/jinterface/doc/src/ref_man.xml2
-rw-r--r--lib/jinterface/java_src/Makefile2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java6
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/GenericQueue.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/Links.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpAuthException.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangException.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExit.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExternalFun.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java56
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java49
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRangeException.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java52
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpExternal.java5
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java48
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNodeStatus.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java155
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpPeer.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSelf.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpServer.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSystem.java2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/java_files2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.app.src2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.appup.src2
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/package.html2
-rw-r--r--lib/jinterface/java_src/pom.xml.src42
-rw-r--r--lib/jinterface/test/Makefile2
-rw-r--r--lib/jinterface/test/jinterface.spec2
-rw-r--r--lib/jinterface/test/jinterface_SUITE.erl3
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/BooleanAtom.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/FunEquals.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/GetNames.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/Makefile.src2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/Maps.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/MboxPing.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/NodePing.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/Nodename.java2
-rw-r--r--lib/jinterface/test/jinterface_SUITE_data/RegisterAndWhereis.java2
-rw-r--r--lib/jinterface/test/jitu.erl2
-rw-r--r--lib/jinterface/test/nc_SUITE.erl61
-rw-r--r--lib/jinterface/test/nc_SUITE_data/Makefile.src2
-rw-r--r--lib/jinterface/test/nc_SUITE_data/connection_server.java2
-rw-r--r--lib/jinterface/test/nc_SUITE_data/echo_server.java2
-rw-r--r--lib/jinterface/vsn.mk2
-rw-r--r--lib/kernel/Makefile2
-rw-r--r--lib/kernel/doc/src/Makefile2
-rw-r--r--lib/kernel/doc/src/app.xml170
-rw-r--r--lib/kernel/doc/src/application.xml462
-rw-r--r--lib/kernel/doc/src/auth.xml58
-rw-r--r--lib/kernel/doc/src/book.xml2
-rw-r--r--lib/kernel/doc/src/code.xml743
-rw-r--r--lib/kernel/doc/src/config.xml91
-rw-r--r--lib/kernel/doc/src/disk_log.xml989
-rw-r--r--lib/kernel/doc/src/erl_boot_server.xml69
-rw-r--r--lib/kernel/doc/src/erl_ddll.xml1344
-rw-r--r--lib/kernel/doc/src/erl_prim_loader_stub.xml4
-rw-r--r--lib/kernel/doc/src/erlang_stub.xml4
-rw-r--r--lib/kernel/doc/src/error_handler.xml80
-rw-r--r--lib/kernel/doc/src/error_logger.xml383
-rw-r--r--lib/kernel/doc/src/file.xml1496
-rw-r--r--lib/kernel/doc/src/gen_sctp.xml1472
-rw-r--r--lib/kernel/doc/src/gen_tcp.xml505
-rw-r--r--lib/kernel/doc/src/gen_udp.xml235
-rw-r--r--lib/kernel/doc/src/global.xml296
-rw-r--r--lib/kernel/doc/src/global_group.xml175
-rw-r--r--lib/kernel/doc/src/heart.xml175
-rw-r--r--lib/kernel/doc/src/inet.xml1721
-rw-r--r--lib/kernel/doc/src/inet_res.xml300
-rw-r--r--lib/kernel/doc/src/init_stub.xml16
-rw-r--r--lib/kernel/doc/src/kernel_app.xml342
-rw-r--r--lib/kernel/doc/src/net_adm.xml87
-rw-r--r--lib/kernel/doc/src/net_kernel.xml279
-rw-r--r--lib/kernel/doc/src/notes.xml202
-rw-r--r--lib/kernel/doc/src/notes_history.xml2
-rw-r--r--lib/kernel/doc/src/os.xml259
-rw-r--r--lib/kernel/doc/src/part_notes.xml2
-rw-r--r--lib/kernel/doc/src/part_notes_history.xml2
-rw-r--r--lib/kernel/doc/src/pg2.xml123
-rw-r--r--lib/kernel/doc/src/ref_man.xml8
-rw-r--r--lib/kernel/doc/src/ref_man.xml.src68
-rw-r--r--lib/kernel/doc/src/rpc.xml434
-rw-r--r--lib/kernel/doc/src/seq_trace.xml232
-rw-r--r--lib/kernel/doc/src/user.xml8
-rw-r--r--lib/kernel/doc/src/wrap_log_reader.xml154
-rw-r--r--lib/kernel/doc/src/zlib_stub.xml16
-rw-r--r--lib/kernel/include/dist.hrl3
-rw-r--r--lib/kernel/include/dist_util.hrl2
-rw-r--r--lib/kernel/include/file.hrl31
-rw-r--r--lib/kernel/include/inet.hrl2
-rw-r--r--lib/kernel/include/inet_sctp.hrl2
-rw-r--r--lib/kernel/include/net_address.hrl2
-rw-r--r--lib/kernel/src/Makefile6
-rw-r--r--lib/kernel/src/application.erl2
-rw-r--r--lib/kernel/src/application_controller.erl2
-rw-r--r--lib/kernel/src/application_master.erl2
-rw-r--r--lib/kernel/src/application_master.hrl2
-rw-r--r--lib/kernel/src/application_starter.erl2
-rw-r--r--lib/kernel/src/auth.erl2
-rw-r--r--lib/kernel/src/code.erl442
-rw-r--r--lib/kernel/src/code_server.erl1131
-rw-r--r--lib/kernel/src/disk_log.erl68
-rw-r--r--lib/kernel/src/disk_log.hrl6
-rw-r--r--lib/kernel/src/disk_log_server.erl2
-rw-r--r--lib/kernel/src/disk_log_sup.erl2
-rw-r--r--lib/kernel/src/dist_ac.erl2
-rw-r--r--lib/kernel/src/dist_util.erl39
-rw-r--r--lib/kernel/src/erl_boot_server.erl2
-rw-r--r--lib/kernel/src/erl_ddll.erl2
-rw-r--r--lib/kernel/src/erl_distribution.erl92
-rw-r--r--lib/kernel/src/erl_epmd.erl2
-rw-r--r--lib/kernel/src/erl_epmd.hrl2
-rw-r--r--lib/kernel/src/erl_reply.erl2
-rw-r--r--lib/kernel/src/error_handler.erl2
-rw-r--r--lib/kernel/src/error_logger.erl83
-rw-r--r--lib/kernel/src/erts_debug.erl19
-rw-r--r--lib/kernel/src/file.erl5
-rw-r--r--lib/kernel/src/file_server.erl2
-rw-r--r--lib/kernel/src/gen_sctp.erl35
-rw-r--r--lib/kernel/src/gen_tcp.erl52
-rw-r--r--lib/kernel/src/gen_udp.erl48
-rw-r--r--lib/kernel/src/global.erl40
-rw-r--r--lib/kernel/src/global_group.erl10
-rw-r--r--lib/kernel/src/global_search.erl2
-rw-r--r--lib/kernel/src/group.erl2
-rw-r--r--lib/kernel/src/hipe_unified_loader.erl28
-rw-r--r--lib/kernel/src/inet.erl243
-rw-r--r--lib/kernel/src/inet6_sctp.erl28
-rw-r--r--lib/kernel/src/inet6_tcp.erl90
-rw-r--r--lib/kernel/src/inet6_tcp_dist.erl2
-rw-r--r--lib/kernel/src/inet6_udp.erl44
-rw-r--r--lib/kernel/src/inet_boot.hrl2
-rw-r--r--lib/kernel/src/inet_config.erl5
-rw-r--r--lib/kernel/src/inet_config.hrl2
-rw-r--r--lib/kernel/src/inet_db.erl5
-rw-r--r--lib/kernel/src/inet_dns.erl2
-rw-r--r--lib/kernel/src/inet_dns.hrl2
-rw-r--r--lib/kernel/src/inet_dns_record_adts.pl2
-rw-r--r--lib/kernel/src/inet_gethost_native.erl2
-rw-r--r--lib/kernel/src/inet_hosts.erl2
-rw-r--r--lib/kernel/src/inet_int.hrl7
-rw-r--r--lib/kernel/src/inet_parse.erl2
-rw-r--r--lib/kernel/src/inet_res.erl2
-rw-r--r--lib/kernel/src/inet_res.hrl2
-rw-r--r--lib/kernel/src/inet_sctp.erl21
-rw-r--r--lib/kernel/src/inet_tcp.erl88
-rw-r--r--lib/kernel/src/inet_tcp_dist.erl6
-rw-r--r--lib/kernel/src/inet_udp.erl54
-rw-r--r--lib/kernel/src/kernel.app.src6
-rw-r--r--lib/kernel/src/kernel.appup.src10
-rw-r--r--lib/kernel/src/kernel.erl10
-rw-r--r--lib/kernel/src/kernel_config.erl2
-rw-r--r--lib/kernel/src/local_tcp.erl178
-rw-r--r--lib/kernel/src/local_udp.erl106
-rw-r--r--lib/kernel/src/net.erl2
-rw-r--r--lib/kernel/src/net_adm.erl5
-rw-r--r--lib/kernel/src/net_kernel.erl133
-rw-r--r--lib/kernel/src/os.erl211
-rw-r--r--lib/kernel/src/pg2.erl2
-rw-r--r--lib/kernel/src/ram_file.erl2
-rw-r--r--lib/kernel/src/rpc.erl79
-rw-r--r--lib/kernel/src/seq_trace.erl18
-rw-r--r--lib/kernel/src/standard_error.erl2
-rw-r--r--lib/kernel/src/user.erl2
-rw-r--r--lib/kernel/src/user_sup.erl2
-rw-r--r--lib/kernel/src/wrap_log_reader.erl2
-rw-r--r--lib/kernel/test/Makefile7
-rw-r--r--lib/kernel/test/appinc1.erl2
-rw-r--r--lib/kernel/test/appinc1x.erl2
-rw-r--r--lib/kernel/test/appinc2.erl2
-rw-r--r--lib/kernel/test/appinc2A.erl2
-rw-r--r--lib/kernel/test/appinc2B.erl2
-rw-r--r--lib/kernel/test/appinc2top.erl2
-rw-r--r--lib/kernel/test/application_SUITE.erl546
-rw-r--r--lib/kernel/test/application_SUITE_data/app_start_error.erl2
-rw-r--r--lib/kernel/test/application_SUITE_data/group_leader.erl2
-rw-r--r--lib/kernel/test/application_SUITE_data/group_leader_sup.erl2
-rw-r--r--lib/kernel/test/application_SUITE_data/trans_abnormal_sup.erl2
-rw-r--r--lib/kernel/test/application_SUITE_data/trans_normal_sup.erl2
-rw-r--r--lib/kernel/test/application_SUITE_data/transient.erl2
-rw-r--r--lib/kernel/test/bif_SUITE.erl811
-rw-r--r--lib/kernel/test/ch.erl2
-rw-r--r--lib/kernel/test/ch_sup.erl2
-rw-r--r--lib/kernel/test/cleanup.erl25
-rw-r--r--lib/kernel/test/code_SUITE.erl715
-rw-r--r--lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict.erl2
-rw-r--r--lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_app.erl2
-rw-r--r--lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_sup.erl2
-rw-r--r--lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-b/ebin/lists.erl2
-rw-r--r--lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-c/ebin/code_SUITE_mult_root_module.erl2
-rw-r--r--lib/kernel/test/code_a_test.erl2
-rw-r--r--lib/kernel/test/code_b_test.erl2
-rw-r--r--lib/kernel/test/disk_log_SUITE.erl5958
-rw-r--r--lib/kernel/test/disk_log_SUITE_data/wrap_log_test.erl2
-rw-r--r--lib/kernel/test/erl_boot_server_SUITE.erl320
-rw-r--r--lib/kernel/test/erl_distribution_SUITE.erl1291
-rw-r--r--lib/kernel/test/erl_distribution_wb_SUITE.erl455
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE.erl546
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict.erl2
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_app.erl2
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_sup.erl2
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy.erl2
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_app.erl2
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_sup.erl2
-rw-r--r--lib/kernel/test/error_handler_SUITE.erl6
-rw-r--r--lib/kernel/test/error_logger_SUITE.erl162
-rw-r--r--lib/kernel/test/error_logger_warn_SUITE.erl74
-rw-r--r--lib/kernel/test/file_SUITE.erl3931
-rw-r--r--lib/kernel/test/file_name_SUITE.erl778
-rw-r--r--lib/kernel/test/gen_sctp_SUITE.erl1802
-rw-r--r--lib/kernel/test/gen_tcp_api_SUITE.erl598
-rw-r--r--lib/kernel/test/gen_tcp_api_SUITE_data/gen_tcp_api_SUITE.c2
-rw-r--r--lib/kernel/test/gen_tcp_echo_SUITE.erl489
-rw-r--r--lib/kernel/test/gen_tcp_misc_SUITE.erl697
-rw-r--r--lib/kernel/test/gen_udp_SUITE.erl612
-rw-r--r--lib/kernel/test/global_SUITE.erl3316
-rw-r--r--lib/kernel/test/global_SUITE_data/global_trace.erl2
-rw-r--r--lib/kernel/test/global_group_SUITE.erl1467
-rw-r--r--lib/kernel/test/heart_SUITE.erl179
-rw-r--r--lib/kernel/test/ignore_cores.erl16
-rw-r--r--lib/kernel/test/inet_SUITE.erl723
-rw-r--r--lib/kernel/test/inet_res_SUITE.erl64
-rwxr-xr-xlib/kernel/test/inet_res_SUITE_data/run-named2
-rw-r--r--lib/kernel/test/inet_sockopt_SUITE.erl808
-rw-r--r--lib/kernel/test/init_SUITE.erl587
-rw-r--r--lib/kernel/test/interactive_shell_SUITE.erl462
-rw-r--r--lib/kernel/test/kernel_SUITE.erl28
-rw-r--r--lib/kernel/test/kernel_config_SUITE.erl48
-rw-r--r--lib/kernel/test/loose_node.erl13
-rw-r--r--lib/kernel/test/multi_load_SUITE.erl419
-rw-r--r--lib/kernel/test/myApp.erl2
-rw-r--r--lib/kernel/test/os_SUITE.erl308
-rw-r--r--lib/kernel/test/pdict_SUITE.erl97
-rw-r--r--lib/kernel/test/pg2_SUITE.erl246
-rw-r--r--lib/kernel/test/prim_file_SUITE.erl2005
-rw-r--r--lib/kernel/test/ram_file_SUITE.erl760
-rw-r--r--lib/kernel/test/rpc_SUITE.erl577
-rw-r--r--lib/kernel/test/sendfile_SUITE.erl4
-rw-r--r--lib/kernel/test/seq_trace_SUITE.erl467
-rw-r--r--lib/kernel/test/standard_error_SUITE.erl2
-rw-r--r--lib/kernel/test/topApp.erl2
-rw-r--r--lib/kernel/test/topApp2.erl2
-rw-r--r--lib/kernel/test/topApp3.erl2
-rw-r--r--lib/kernel/test/wrap_log_reader_SUITE.erl417
-rw-r--r--lib/kernel/test/wrap_log_reader_SUITE_data/wrap_log_test.erl2
-rw-r--r--lib/kernel/test/zlib_SUITE.erl526
-rw-r--r--lib/kernel/vsn.mk2
-rw-r--r--lib/megaco/Makefile2
-rw-r--r--lib/megaco/configure.in2
-rw-r--r--lib/megaco/doc/src/Makefile2
-rw-r--r--lib/megaco/doc/src/book.xml2
-rw-r--r--lib/megaco/doc/src/files.mk2
-rw-r--r--lib/megaco/doc/src/megaco.xml2
-rw-r--r--lib/megaco/doc/src/megaco_architecture.xml2
-rw-r--r--lib/megaco/doc/src/megaco_codec_meas.xml2
-rw-r--r--lib/megaco/doc/src/megaco_codec_mstone1.xml2
-rw-r--r--lib/megaco/doc/src/megaco_codec_mstone2.xml2
-rw-r--r--lib/megaco/doc/src/megaco_codec_transform.xml2
-rw-r--r--lib/megaco/doc/src/megaco_debug.xml2
-rw-r--r--lib/megaco/doc/src/megaco_edist_compress.xml2
-rw-r--r--lib/megaco/doc/src/megaco_encode.xml2
-rw-r--r--lib/megaco/doc/src/megaco_encoder.xml2
-rw-r--r--lib/megaco/doc/src/megaco_examples.xml2
-rw-r--r--lib/megaco/doc/src/megaco_flex_scanner.xml2
-rw-r--r--lib/megaco/doc/src/megaco_intro.xml2
-rw-r--r--lib/megaco/doc/src/megaco_mib.xml2
-rw-r--r--lib/megaco/doc/src/megaco_performance.xml2
-rw-r--r--lib/megaco/doc/src/megaco_run.xml2
-rw-r--r--lib/megaco/doc/src/megaco_tcp.xml2
-rw-r--r--lib/megaco/doc/src/megaco_transport.xml2
-rw-r--r--lib/megaco/doc/src/megaco_transport_mechanisms.xml2
-rw-r--r--lib/megaco/doc/src/megaco_udp.xml2
-rw-r--r--lib/megaco/doc/src/megaco_user.xml2
-rw-r--r--lib/megaco/doc/src/notes.xml19
-rw-r--r--lib/megaco/doc/src/notes_history.xml2
-rw-r--r--lib/megaco/doc/src/part.xml2
-rw-r--r--lib/megaco/doc/src/part_notes.xml2
-rw-r--r--lib/megaco/doc/src/part_notes_history.xml2
-rw-r--r--lib/megaco/doc/src/ref_man.xml2
-rw-r--r--lib/megaco/examples/meas/Makefile.in2
-rw-r--r--lib/megaco/examples/meas/meas.sh.skel.src2
-rw-r--r--lib/megaco/examples/meas/megaco_codec_meas.erl2
-rw-r--r--lib/megaco/examples/meas/megaco_codec_mstone1.erl2
-rw-r--r--lib/megaco/examples/meas/megaco_codec_mstone2.erl2
-rw-r--r--lib/megaco/examples/meas/megaco_codec_mstone_lib.erl2
-rw-r--r--lib/megaco/examples/meas/megaco_codec_transform.erl2
-rw-r--r--lib/megaco/examples/meas/modules.mk2
-rw-r--r--lib/megaco/examples/meas/mstone1.sh.skel.src2
-rw-r--r--lib/megaco/examples/simple/Makefile2
-rw-r--r--lib/megaco/examples/simple/megaco_simple_mg.erl2
-rw-r--r--lib/megaco/examples/simple/megaco_simple_mgc.erl2
-rw-r--r--lib/megaco/examples/simple/modules.mk2
-rw-r--r--lib/megaco/include/megaco.hrl2
-rw-r--r--lib/megaco/src/Makefile2
-rw-r--r--lib/megaco/src/app/Makefile2
-rw-r--r--lib/megaco/src/app/depend.mk2
-rw-r--r--lib/megaco/src/app/megaco.appup.src29
-rw-r--r--lib/megaco/src/app/megaco.erl2
-rw-r--r--lib/megaco/src/app/megaco.mk2
-rw-r--r--lib/megaco/src/app/megaco_internal.hrl2
-rw-r--r--lib/megaco/src/app/modules.mk2
-rw-r--r--lib/megaco/src/binary/Makefile2
-rw-r--r--lib/megaco/src/binary/depend.mk2
-rw-r--r--lib/megaco/src/binary/megaco_ber_encoder.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_encoder.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_encoder_lib.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_name_resolver_v1.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_name_resolver_v2.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_name_resolver_v3.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_term_id.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_term_id_gen.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_transformer_v1.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_transformer_v2.erl2
-rw-r--r--lib/megaco/src/binary/megaco_binary_transformer_v3.erl2
-rw-r--r--lib/megaco/src/binary/megaco_per_encoder.erl2
-rw-r--r--lib/megaco/src/binary/modules.mk2
-rw-r--r--lib/megaco/src/binary/old/megaco_ber_bin_drv_encoder.erl2
-rw-r--r--lib/megaco/src/binary/old/megaco_per_bin_drv_encoder.erl2
-rw-r--r--lib/megaco/src/engine/Makefile2
-rw-r--r--lib/megaco/src/engine/depend.mk2
-rw-r--r--lib/megaco/src/engine/megaco_config.erl2
-rw-r--r--lib/megaco/src/engine/megaco_config_misc.erl2
-rw-r--r--lib/megaco/src/engine/megaco_digit_map.erl2
-rw-r--r--lib/megaco/src/engine/megaco_edist_compress.erl2
-rw-r--r--lib/megaco/src/engine/megaco_encoder.erl2
-rw-r--r--lib/megaco/src/engine/megaco_erl_dist_encoder.erl2
-rw-r--r--lib/megaco/src/engine/megaco_erl_dist_encoder_mc.erl2
-rw-r--r--lib/megaco/src/engine/megaco_filter.erl2
-rw-r--r--lib/megaco/src/engine/megaco_message_internal.hrl2
-rw-r--r--lib/megaco/src/engine/megaco_messenger.erl2
-rw-r--r--lib/megaco/src/engine/megaco_messenger_misc.erl2
-rw-r--r--lib/megaco/src/engine/megaco_misc_sup.erl2
-rw-r--r--lib/megaco/src/engine/megaco_monitor.erl2
-rw-r--r--lib/megaco/src/engine/megaco_sdp.erl2
-rw-r--r--lib/megaco/src/engine/megaco_stats.erl2
-rw-r--r--lib/megaco/src/engine/megaco_sup.erl2
-rw-r--r--lib/megaco/src/engine/megaco_timer.erl2
-rw-r--r--lib/megaco/src/engine/megaco_trans_sender.erl2
-rw-r--r--lib/megaco/src/engine/megaco_trans_sup.erl2
-rw-r--r--lib/megaco/src/engine/megaco_transport.erl2
-rw-r--r--lib/megaco/src/engine/megaco_user_default.erl2
-rw-r--r--lib/megaco/src/engine/modules.mk2
-rw-r--r--lib/megaco/src/flex/Makefile2
-rw-r--r--lib/megaco/src/flex/Makefile.in2
-rw-r--r--lib/megaco/src/flex/megaco_flex_scanner.erl2
-rw-r--r--lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src2
-rw-r--r--lib/megaco/src/flex/megaco_flex_scanner_handler.erl2
-rw-r--r--lib/megaco/src/flex/modules.mk2
-rw-r--r--lib/megaco/src/rules.mk2
-rw-r--r--lib/megaco/src/subdirs.mk2
-rw-r--r--lib/megaco/src/tcp/Makefile2
-rw-r--r--lib/megaco/src/tcp/depend.mk2
-rw-r--r--lib/megaco/src/tcp/megaco_tcp.erl2
-rw-r--r--lib/megaco/src/tcp/megaco_tcp.hrl2
-rw-r--r--lib/megaco/src/tcp/megaco_tcp_accept.erl2
-rw-r--r--lib/megaco/src/tcp/megaco_tcp_accept_sup.erl2
-rw-r--r--lib/megaco/src/tcp/megaco_tcp_connection.erl2
-rw-r--r--lib/megaco/src/tcp/megaco_tcp_connection_sup.erl2
-rw-r--r--lib/megaco/src/tcp/megaco_tcp_sup.erl2
-rw-r--r--lib/megaco/src/tcp/modules.mk2
-rw-r--r--lib/megaco/src/text/Makefile2
-rw-r--r--lib/megaco/src/text/depend.mk2
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder.erl2
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl2
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl2
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl2
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_v1.erl2
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_v2.erl2
-rw-r--r--lib/megaco/src/text/megaco_compact_text_encoder_v3.erl2
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder.erl2
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl2
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl2
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl2
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl2
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl2
-rw-r--r--lib/megaco/src/text/megaco_pretty_text_encoder_v3.erl2
-rw-r--r--lib/megaco/src/text/megaco_text_gen_prev3a.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_gen_prev3b.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_gen_prev3c.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_gen_v1.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_gen_v2.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_gen_v3.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_mini_decoder.erl2
-rw-r--r--lib/megaco/src/text/megaco_text_mini_parser.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_mini_parser.yrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3a.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3a.yrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3b.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3b.yrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3c.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_prev3c.yrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_v1.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_v1.yrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_v2.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_v2.yrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_v3.hrl2
-rw-r--r--lib/megaco/src/text/megaco_text_parser_v3.yrl2
-rw-r--r--lib/megaco/src/text/megaco_text_scanner.erl2
-rw-r--r--lib/megaco/src/text/megaco_text_tokens.hrl2
-rw-r--r--lib/megaco/src/text/modules.mk2
-rw-r--r--lib/megaco/src/udp/Makefile2
-rw-r--r--lib/megaco/src/udp/megaco_udp.erl2
-rw-r--r--lib/megaco/src/udp/megaco_udp.hrl2
-rw-r--r--lib/megaco/src/udp/megaco_udp_server.erl2
-rw-r--r--lib/megaco/src/udp/megaco_udp_sup.erl2
-rw-r--r--lib/megaco/src/udp/modules.mk2
-rw-r--r--lib/megaco/subdirs.mk2
-rw-r--r--lib/megaco/test/Makefile7
-rw-r--r--lib/megaco/test/megaco_SUITE.erl2
-rw-r--r--lib/megaco/test/megaco_actions_test.erl2
-rw-r--r--lib/megaco/test/megaco_app_test.erl2
-rw-r--r--lib/megaco/test/megaco_appup_mg.erl2
-rw-r--r--lib/megaco/test/megaco_appup_mgc.erl2
-rw-r--r--lib/megaco/test/megaco_appup_test.erl2
-rw-r--r--lib/megaco/test/megaco_binary_term_id_test.erl2
-rw-r--r--lib/megaco/test/megaco_call_flow_test.erl2
-rw-r--r--lib/megaco/test/megaco_codec_flex_lib.erl2
-rw-r--r--lib/megaco/test/megaco_codec_mini_test.erl2
-rw-r--r--lib/megaco/test/megaco_codec_prev3a_test.erl2
-rw-r--r--lib/megaco/test/megaco_codec_prev3b_test.erl2
-rw-r--r--lib/megaco/test/megaco_codec_prev3c_test.erl2
-rw-r--r--lib/megaco/test/megaco_codec_test.erl2
-rw-r--r--lib/megaco/test/megaco_codec_test_lib.erl2
-rw-r--r--lib/megaco/test/megaco_codec_v1_test.erl2
-rw-r--r--lib/megaco/test/megaco_codec_v2_test.erl2
-rw-r--r--lib/megaco/test/megaco_codec_v3_test.erl2
-rw-r--r--lib/megaco/test/megaco_config_test.erl2
-rw-r--r--lib/megaco/test/megaco_digit_map_test.erl2
-rw-r--r--lib/megaco/test/megaco_examples_test.erl2
-rw-r--r--lib/megaco/test/megaco_flex_test.erl2
-rw-r--r--lib/megaco/test/megaco_load_test.erl2
-rw-r--r--lib/megaco/test/megaco_mess_otp8212_test.erl2
-rw-r--r--lib/megaco/test/megaco_mess_test.erl2
-rw-r--r--lib/megaco/test/megaco_mess_user_test.erl2
-rw-r--r--lib/megaco/test/megaco_mib_test.erl2
-rw-r--r--lib/megaco/test/megaco_mreq_test.erl2
-rw-r--r--lib/megaco/test/megaco_pending_limit_test.erl2
-rw-r--r--lib/megaco/test/megaco_profile.erl2
-rw-r--r--lib/megaco/test/megaco_sdp_test.erl2
-rw-r--r--lib/megaco/test/megaco_segment_test.erl2
-rw-r--r--lib/megaco/test/megaco_tc_controller.erl2
-rw-r--r--lib/megaco/test/megaco_tcp_test.erl2
-rw-r--r--lib/megaco/test/megaco_test_deliver.erl2
-rw-r--r--lib/megaco/test/megaco_test_generator.erl2
-rw-r--r--lib/megaco/test/megaco_test_generator_lib.erl2
-rw-r--r--lib/megaco/test/megaco_test_generic_transport.erl2
-rw-r--r--lib/megaco/test/megaco_test_lib.erl2
-rw-r--r--lib/megaco/test/megaco_test_lib.hrl2
-rw-r--r--lib/megaco/test/megaco_test_megaco_generator.erl2
-rw-r--r--lib/megaco/test/megaco_test_mg.erl2
-rw-r--r--lib/megaco/test/megaco_test_mgc.erl2
-rw-r--r--lib/megaco/test/megaco_test_msg_prev3a_lib.erl2
-rw-r--r--lib/megaco/test/megaco_test_msg_prev3b_lib.erl2
-rw-r--r--lib/megaco/test/megaco_test_msg_prev3c_lib.erl2
-rw-r--r--lib/megaco/test/megaco_test_msg_v1_lib.erl2
-rw-r--r--lib/megaco/test/megaco_test_msg_v2_lib.erl2
-rw-r--r--lib/megaco/test/megaco_test_msg_v3_lib.erl2
-rw-r--r--lib/megaco/test/megaco_test_tcp_generator.erl2
-rw-r--r--lib/megaco/test/megaco_timer_test.erl2
-rw-r--r--lib/megaco/test/megaco_trans_test.erl2
-rw-r--r--lib/megaco/test/megaco_udp_test.erl2
-rw-r--r--lib/megaco/test/modules.mk2
-rw-r--r--lib/megaco/vsn.mk2
-rw-r--r--lib/mnesia/Makefile2
-rw-r--r--lib/mnesia/doc/misc/Makefile2
-rw-r--r--lib/mnesia/doc/src/Makefile2
-rw-r--r--lib/mnesia/doc/src/Mnesia_App_A.xmlsrc2
-rw-r--r--lib/mnesia/doc/src/Mnesia_App_B.xmlsrc2
-rw-r--r--lib/mnesia/doc/src/Mnesia_App_C.xmlsrc2
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap1.xml2
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap2.xmlsrc4
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap3.xmlsrc2
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap4.xmlsrc2
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap5.xmlsrc2
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap7.xmlsrc2
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap8.xml2
-rw-r--r--lib/mnesia/doc/src/Mnesia_overview.xml2
-rw-r--r--lib/mnesia/doc/src/book.xml2
-rw-r--r--lib/mnesia/doc/src/company.erl2
-rw-r--r--lib/mnesia/doc/src/company_o.erl2
-rw-r--r--lib/mnesia/doc/src/mnesia.xml3
-rw-r--r--lib/mnesia/doc/src/mnesia_frag_hash.xml2
-rw-r--r--lib/mnesia/doc/src/mnesia_registry.xml2
-rw-r--r--lib/mnesia/doc/src/notes.xml25
-rw-r--r--lib/mnesia/doc/src/notes_history.xml2
-rw-r--r--lib/mnesia/doc/src/part.xml2
-rw-r--r--lib/mnesia/doc/src/part_notes.xml2
-rw-r--r--lib/mnesia/doc/src/part_notes_history.xml2
-rw-r--r--lib/mnesia/doc/src/ref_man.xml2
-rw-r--r--lib/mnesia/examples/Makefile2
-rw-r--r--lib/mnesia/examples/bench/bench.erl2
-rw-r--r--lib/mnesia/examples/bench/bench.hrl2
-rw-r--r--lib/mnesia/examples/bench/bench_generate.erl2
-rw-r--r--lib/mnesia/examples/bench/bench_populate.erl2
-rw-r--r--lib/mnesia/examples/bench/bench_trans.erl2
-rw-r--r--lib/mnesia/examples/mnesia_meter.erl2
-rw-r--r--lib/mnesia/examples/mnesia_tpcb.erl2
-rw-r--r--lib/mnesia/include/Makefile2
-rw-r--r--lib/mnesia/src/Makefile4
-rw-r--r--lib/mnesia/src/mnesia.app.src2
-rw-r--r--lib/mnesia/src/mnesia.erl146
-rw-r--r--lib/mnesia/src/mnesia.hrl5
-rw-r--r--lib/mnesia/src/mnesia_backend_type.erl115
-rw-r--r--lib/mnesia/src/mnesia_backup.erl2
-rw-r--r--lib/mnesia/src/mnesia_bup.erl270
-rw-r--r--lib/mnesia/src/mnesia_checkpoint.erl25
-rw-r--r--lib/mnesia/src/mnesia_checkpoint_sup.erl2
-rw-r--r--lib/mnesia/src/mnesia_controller.erl16
-rw-r--r--lib/mnesia/src/mnesia_dumper.erl429
-rw-r--r--lib/mnesia/src/mnesia_event.erl2
-rw-r--r--lib/mnesia/src/mnesia_ext_sup.erl59
-rw-r--r--lib/mnesia/src/mnesia_frag.erl69
-rw-r--r--lib/mnesia/src/mnesia_frag_hash.erl2
-rw-r--r--lib/mnesia/src/mnesia_frag_old_hash.erl2
-rw-r--r--lib/mnesia/src/mnesia_index.erl437
-rw-r--r--lib/mnesia/src/mnesia_kernel_sup.erl2
-rw-r--r--lib/mnesia/src/mnesia_late_loader.erl2
-rw-r--r--lib/mnesia/src/mnesia_lib.erl183
-rw-r--r--lib/mnesia/src/mnesia_loader.erl242
-rw-r--r--lib/mnesia/src/mnesia_locker.erl2
-rw-r--r--lib/mnesia/src/mnesia_log.erl25
-rw-r--r--lib/mnesia/src/mnesia_monitor.erl38
-rw-r--r--lib/mnesia/src/mnesia_recover.erl2
-rw-r--r--lib/mnesia/src/mnesia_registry.erl2
-rw-r--r--lib/mnesia/src/mnesia_schema.erl994
-rw-r--r--lib/mnesia/src/mnesia_snmp_hook.erl2
-rw-r--r--lib/mnesia/src/mnesia_snmp_sup.erl2
-rw-r--r--lib/mnesia/src/mnesia_sp.erl2
-rw-r--r--lib/mnesia/src/mnesia_subscr.erl2
-rw-r--r--lib/mnesia/src/mnesia_sup.erl10
-rw-r--r--lib/mnesia/src/mnesia_text.erl2
-rw-r--r--lib/mnesia/src/mnesia_tm.erl228
-rw-r--r--lib/mnesia/test/Makefile5
-rw-r--r--lib/mnesia/test/ext_test.erl237
-rw-r--r--lib/mnesia/test/mnesia_SUITE.erl2
-rw-r--r--lib/mnesia/test/mnesia_atomicity_test.erl20
-rw-r--r--lib/mnesia/test/mnesia_bench_SUITE.erl2
-rw-r--r--lib/mnesia/test/mnesia_config_backup.erl2
-rw-r--r--lib/mnesia/test/mnesia_config_event.erl2
-rw-r--r--lib/mnesia/test/mnesia_config_test.erl30
-rw-r--r--lib/mnesia/test/mnesia_consistency_test.erl64
-rw-r--r--lib/mnesia/test/mnesia_cost.erl2
-rw-r--r--lib/mnesia/test/mnesia_dbn_meters.erl2
-rw-r--r--lib/mnesia/test/mnesia_dirty_access_test.erl126
-rw-r--r--lib/mnesia/test/mnesia_durability_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_evil_backup.erl4
-rw-r--r--lib/mnesia/test/mnesia_evil_coverage_test.erl152
-rw-r--r--lib/mnesia/test/mnesia_examples_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_frag_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_inconsistent_database_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_install_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_isolation_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_majority_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_measure_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_meter.erl2
-rw-r--r--lib/mnesia/test/mnesia_nice_coverage_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_qlc_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_recovery_test.erl17
-rw-r--r--lib/mnesia/test/mnesia_registry_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_schema_recovery_test.erl2
-rw-r--r--lib/mnesia/test/mnesia_test_lib.erl13
-rw-r--r--lib/mnesia/test/mnesia_test_lib.hrl4
-rw-r--r--lib/mnesia/test/mnesia_tpcb.erl2
-rw-r--r--lib/mnesia/test/mnesia_trans_access_test.erl13
-rw-r--r--lib/mnesia/test/mt.erl4
-rw-r--r--lib/mnesia/vsn.mk2
-rw-r--r--lib/observer/Makefile2
-rw-r--r--lib/observer/doc/src/book.xml2
-rw-r--r--lib/observer/doc/src/crashdump.xml2
-rw-r--r--lib/observer/doc/src/etop.xml2
-rw-r--r--lib/observer/doc/src/notes.xml64
-rw-r--r--lib/observer/doc/src/notes_history.xml2
-rw-r--r--lib/observer/doc/src/observer_ug.xml111
-rw-r--r--lib/observer/doc/src/part.xml2
-rw-r--r--lib/observer/doc/src/part_notes.xml2
-rw-r--r--lib/observer/doc/src/part_notes_history.xml2
-rw-r--r--lib/observer/doc/src/ref_man.xml2
-rw-r--r--lib/observer/doc/src/ttb.xml56
-rw-r--r--lib/observer/include/etop.hrl2
-rw-r--r--lib/observer/src/Makefile3
-rw-r--r--lib/observer/src/cdv_atom_cb.erl2
-rw-r--r--lib/observer/src/cdv_bin_cb.erl2
-rw-r--r--lib/observer/src/cdv_detail_wx.erl2
-rw-r--r--lib/observer/src/cdv_dist_cb.erl2
-rw-r--r--lib/observer/src/cdv_ets_cb.erl2
-rw-r--r--lib/observer/src/cdv_fun_cb.erl2
-rw-r--r--lib/observer/src/cdv_gen_cb.erl2
-rw-r--r--lib/observer/src/cdv_html_wx.erl2
-rw-r--r--lib/observer/src/cdv_info_wx.erl2
-rw-r--r--lib/observer/src/cdv_int_tab_cb.erl2
-rw-r--r--lib/observer/src/cdv_mem_cb.erl2
-rw-r--r--lib/observer/src/cdv_mod_cb.erl2
-rw-r--r--lib/observer/src/cdv_multi_wx.erl2
-rw-r--r--lib/observer/src/cdv_port_cb.erl2
-rw-r--r--lib/observer/src/cdv_proc_cb.erl2
-rw-r--r--lib/observer/src/cdv_sched_cb.erl2
-rw-r--r--lib/observer/src/cdv_table_wx.erl2
-rw-r--r--lib/observer/src/cdv_term_cb.erl2
-rw-r--r--lib/observer/src/cdv_timer_cb.erl2
-rw-r--r--lib/observer/src/cdv_virtual_list_wx.erl2
-rw-r--r--lib/observer/src/cdv_wx.erl2
-rw-r--r--lib/observer/src/crashdump_viewer.erl5
-rw-r--r--lib/observer/src/crashdump_viewer.hrl2
-rw-r--r--lib/observer/src/etop.erl2
-rw-r--r--lib/observer/src/etop_defs.hrl2
-rw-r--r--lib/observer/src/etop_tr.erl2
-rw-r--r--lib/observer/src/etop_txt.erl2
-rw-r--r--lib/observer/src/multitrace.erl2
-rw-r--r--lib/observer/src/observer.app.src3
-rw-r--r--lib/observer/src/observer.appup.src2
-rw-r--r--lib/observer/src/observer.erl2
-rw-r--r--lib/observer/src/observer_alloc_wx.erl171
-rw-r--r--lib/observer/src/observer_app_wx.erl57
-rw-r--r--lib/observer/src/observer_defs.hrl13
-rw-r--r--lib/observer/src/observer_html_lib.erl2
-rw-r--r--lib/observer/src/observer_lib.erl120
-rw-r--r--lib/observer/src/observer_perf_wx.erl749
-rw-r--r--lib/observer/src/observer_port_wx.erl479
-rw-r--r--lib/observer/src/observer_pro_wx.erl63
-rw-r--r--lib/observer/src/observer_procinfo.erl16
-rw-r--r--lib/observer/src/observer_sys_wx.erl100
-rw-r--r--lib/observer/src/observer_trace_wx.erl674
-rw-r--r--lib/observer/src/observer_traceoptions_wx.erl106
-rw-r--r--lib/observer/src/observer_tv.hrl2
-rw-r--r--lib/observer/src/observer_tv_wx.erl36
-rw-r--r--lib/observer/src/observer_wx.erl100
-rw-r--r--lib/observer/src/ttb.erl51
-rw-r--r--lib/observer/src/ttb_et.erl2
-rw-r--r--lib/observer/test/Makefile6
-rw-r--r--lib/observer/test/crashdump_helper.erl4
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE.erl13
-rw-r--r--lib/observer/test/etop_SUITE.erl4
-rw-r--r--lib/observer/test/observer_SUITE.erl32
-rw-r--r--lib/observer/test/ttb_SUITE.erl61
-rw-r--r--lib/observer/vsn.mk2
-rw-r--r--lib/odbc/Makefile2
-rw-r--r--lib/odbc/c_src/Makefile2
-rw-r--r--lib/odbc/c_src/Makefile.in2
-rw-r--r--lib/odbc/c_src/odbcserver.c2
-rw-r--r--lib/odbc/c_src/odbcserver.h2
-rw-r--r--lib/odbc/configure.in14
-rw-r--r--lib/odbc/doc/src/Makefile2
-rw-r--r--lib/odbc/doc/src/book.xml2
-rw-r--r--lib/odbc/doc/src/databases.xml2
-rw-r--r--lib/odbc/doc/src/error_handling.xml2
-rw-r--r--lib/odbc/doc/src/getting_started.xml2
-rw-r--r--lib/odbc/doc/src/introduction.xml2
-rw-r--r--lib/odbc/doc/src/notes.xml20
-rw-r--r--lib/odbc/doc/src/notes_history.xml2
-rw-r--r--lib/odbc/doc/src/odbc.xml2
-rw-r--r--lib/odbc/doc/src/part.xml2
-rw-r--r--lib/odbc/doc/src/part_notes.xml2
-rw-r--r--lib/odbc/doc/src/part_notes_history.xml2
-rw-r--r--lib/odbc/doc/src/ref_man.xml2
-rw-r--r--lib/odbc/src/Makefile2
-rw-r--r--lib/odbc/src/odbc.appup.src2
-rw-r--r--lib/odbc/src/odbc.erl4
-rw-r--r--lib/odbc/src/odbc_app.erl2
-rw-r--r--lib/odbc/src/odbc_internal.hrl2
-rw-r--r--lib/odbc/src/odbc_sup.erl2
-rw-r--r--lib/odbc/test/Makefile4
-rw-r--r--lib/odbc/test/README2
-rw-r--r--lib/odbc/test/mysql.erl2
-rw-r--r--lib/odbc/test/odbc_connect_SUITE.erl191
-rw-r--r--lib/odbc/test/odbc_data_type_SUITE.erl424
-rw-r--r--lib/odbc/test/odbc_query_SUITE.erl467
-rw-r--r--lib/odbc/test/odbc_start_SUITE.erl40
-rw-r--r--lib/odbc/test/odbc_test.hrl2
-rw-r--r--lib/odbc/test/odbc_test_lib.erl10
-rw-r--r--lib/odbc/test/oracle.erl2
-rw-r--r--lib/odbc/test/postgres.erl2
-rw-r--r--lib/odbc/test/sqlserver.erl2
-rw-r--r--lib/odbc/vsn.mk2
-rw-r--r--lib/orber/COSS/CosNaming/CosNaming_BindingIterator_impl.erl2
-rw-r--r--lib/orber/COSS/CosNaming/Makefile2
-rw-r--r--lib/orber/COSS/CosNaming/lname.erl2
-rw-r--r--lib/orber/COSS/CosNaming/lname.hrl2
-rw-r--r--lib/orber/COSS/CosNaming/lname_component.erl2
-rw-r--r--lib/orber/COSS/CosNaming/orber_cosnaming.hrl2
-rw-r--r--lib/orber/COSS/CosNaming/orber_cosnaming_utils.erl2
-rw-r--r--lib/orber/Makefile2
-rw-r--r--lib/orber/c_src/Makefile2
-rw-r--r--lib/orber/c_src/Makefile.in2
-rw-r--r--lib/orber/doc/src/CosNaming.xml2
-rw-r--r--lib/orber/doc/src/CosNaming_BindingIterator.xml2
-rw-r--r--lib/orber/doc/src/CosNaming_NamingContext.xml2
-rw-r--r--lib/orber/doc/src/CosNaming_NamingContextExt.xml2
-rw-r--r--lib/orber/doc/src/Makefile2
-rw-r--r--lib/orber/doc/src/Module_Interface.xml2
-rw-r--r--lib/orber/doc/src/Orber/InitialReference.java2
-rw-r--r--lib/orber/doc/src/Orber/Makefile2
-rw-r--r--lib/orber/doc/src/any.xml2
-rw-r--r--lib/orber/doc/src/book.xml2
-rw-r--r--lib/orber/doc/src/ch_contents.xml2
-rw-r--r--lib/orber/doc/src/ch_debugging.xml2
-rw-r--r--lib/orber/doc/src/ch_exceptions.xml2
-rw-r--r--lib/orber/doc/src/ch_idl_to_erlang_mapping.xml2
-rw-r--r--lib/orber/doc/src/ch_ifr.xml2
-rw-r--r--lib/orber/doc/src/ch_install.xml2
-rw-r--r--lib/orber/doc/src/ch_interceptors.xml2
-rw-r--r--lib/orber/doc/src/ch_introduction.xml2
-rw-r--r--lib/orber/doc/src/ch_naming_service.xml2
-rw-r--r--lib/orber/doc/src/ch_orber_kernel.xml2
-rw-r--r--lib/orber/doc/src/ch_orberweb.xml2
-rw-r--r--lib/orber/doc/src/ch_security.xml2
-rw-r--r--lib/orber/doc/src/ch_stubs.xml2
-rw-r--r--lib/orber/doc/src/corba.xml2
-rw-r--r--lib/orber/doc/src/corba_object.xml2
-rw-r--r--lib/orber/doc/src/example_part.xml2
-rw-r--r--lib/orber/doc/src/fixed.xml2
-rw-r--r--lib/orber/doc/src/interceptors.xml2
-rw-r--r--lib/orber/doc/src/intro_part.xml2
-rw-r--r--lib/orber/doc/src/lname.xml2
-rw-r--r--lib/orber/doc/src/lname_component.xml2
-rw-r--r--lib/orber/doc/src/notes.xml19
-rw-r--r--lib/orber/doc/src/orber.xml2
-rw-r--r--lib/orber/doc/src/orber_acl.xml2
-rw-r--r--lib/orber/doc/src/orber_diagnostics.xml2
-rw-r--r--lib/orber/doc/src/orber_ifr.xml2
-rw-r--r--lib/orber/doc/src/orber_tc.xml2
-rw-r--r--lib/orber/doc/src/part.xml2
-rw-r--r--lib/orber/doc/src/part_notes.xml2
-rw-r--r--lib/orber/doc/src/ref_man.xml2
-rw-r--r--lib/orber/doc/src/tools_debugging_part.xml2
-rw-r--r--lib/orber/examples/Makefile2
-rw-r--r--lib/orber/examples/Stack/Makefile2
-rw-r--r--lib/orber/examples/Stack/StackClient.java2
-rw-r--r--lib/orber/examples/Stack/StackModule_StackFactory_impl.erl2
-rw-r--r--lib/orber/examples/Stack/StackModule_Stack_impl.erl2
-rw-r--r--lib/orber/examples/Stack/stack_client.erl2
-rw-r--r--lib/orber/examples/Stack/stack_factory.erl2
-rw-r--r--lib/orber/include/corba.hrl2
-rw-r--r--lib/orber/include/ifr_types.hrl2
-rw-r--r--lib/orber/include/orber_pi.hrl2
-rw-r--r--lib/orber/java_src/Makefile2
-rw-r--r--lib/orber/java_src/Orber/InitialReference.java2
-rw-r--r--lib/orber/java_src/Orber/Makefile2
-rw-r--r--lib/orber/priv/Makefile2
-rw-r--r--lib/orber/src/Makefile2
-rw-r--r--lib/orber/src/OrberApp_IFR_impl.erl2
-rw-r--r--lib/orber/src/any.erl2
-rw-r--r--lib/orber/src/cdr_encode.erl2
-rw-r--r--lib/orber/src/cdrlib.erl2
-rw-r--r--lib/orber/src/corba_boa.erl2
-rw-r--r--lib/orber/src/corba_nvlist.erl2
-rw-r--r--lib/orber/src/corba_object.erl2
-rw-r--r--lib/orber/src/fixed.erl2
-rw-r--r--lib/orber/src/ifr_objects.hrl2
-rw-r--r--lib/orber/src/iop_ior.erl2
-rw-r--r--lib/orber/src/orber.erl2
-rw-r--r--lib/orber/src/orber_acl.erl2
-rw-r--r--lib/orber/src/orber_diagnostics.erl2
-rw-r--r--lib/orber/src/orber_env.erl2
-rw-r--r--lib/orber/src/orber_exceptions.erl2
-rw-r--r--lib/orber/src/orber_ifr.hrl2
-rw-r--r--lib/orber/src/orber_ifr_aliasdef.erl2
-rw-r--r--lib/orber/src/orber_ifr_arraydef.erl2
-rw-r--r--lib/orber/src/orber_ifr_attributedef.erl2
-rw-r--r--lib/orber/src/orber_ifr_constantdef.erl2
-rw-r--r--lib/orber/src/orber_ifr_contained.erl2
-rw-r--r--lib/orber/src/orber_ifr_container.erl2
-rw-r--r--lib/orber/src/orber_ifr_enumdef.erl2
-rw-r--r--lib/orber/src/orber_ifr_exceptiondef.erl2
-rw-r--r--lib/orber/src/orber_ifr_fixeddef.erl2
-rw-r--r--lib/orber/src/orber_ifr_idltype.erl2
-rw-r--r--lib/orber/src/orber_ifr_interfacedef.erl2
-rw-r--r--lib/orber/src/orber_ifr_irobject.erl2
-rw-r--r--lib/orber/src/orber_ifr_moduledef.erl2
-rw-r--r--lib/orber/src/orber_ifr_operationdef.erl2
-rw-r--r--lib/orber/src/orber_ifr_primitivedef.erl2
-rw-r--r--lib/orber/src/orber_ifr_sequencedef.erl2
-rw-r--r--lib/orber/src/orber_ifr_stringdef.erl2
-rw-r--r--lib/orber/src/orber_ifr_structdef.erl2
-rw-r--r--lib/orber/src/orber_ifr_typecode.erl2
-rw-r--r--lib/orber/src/orber_ifr_typedef.erl2
-rw-r--r--lib/orber/src/orber_ifr_uniondef.erl2
-rw-r--r--lib/orber/src/orber_ifr_wstringdef.erl2
-rw-r--r--lib/orber/src/orber_iiop.hrl2
-rw-r--r--lib/orber/src/orber_iiop_inproxy.erl2
-rw-r--r--lib/orber/src/orber_iiop_insup.erl2
-rw-r--r--lib/orber/src/orber_iiop_net.erl2
-rw-r--r--lib/orber/src/orber_iiop_net_accept.erl2
-rw-r--r--lib/orber/src/orber_iiop_outproxy.erl2
-rw-r--r--lib/orber/src/orber_iiop_outsup.erl2
-rw-r--r--lib/orber/src/orber_iiop_pm.erl2
-rw-r--r--lib/orber/src/orber_iiop_socketsup.erl2
-rw-r--r--lib/orber/src/orber_iiop_tracer.erl2
-rw-r--r--lib/orber/src/orber_iiop_tracer_silent.erl2
-rw-r--r--lib/orber/src/orber_iiop_tracer_stealth.erl2
-rw-r--r--lib/orber/src/orber_initial_references.erl2
-rw-r--r--lib/orber/src/orber_interceptors.erl2
-rw-r--r--lib/orber/src/orber_request_number.erl2
-rw-r--r--lib/orber/src/orber_tb.erl2
-rw-r--r--lib/orber/src/orber_tc.erl2
-rw-r--r--lib/orber/src/orber_typedefs.erl2
-rw-r--r--lib/orber/src/orber_web.erl2
-rw-r--r--lib/orber/test/Makefile6
-rw-r--r--lib/orber/test/cdrcoding_10_SUITE.erl241
-rw-r--r--lib/orber/test/cdrcoding_11_SUITE.erl240
-rw-r--r--lib/orber/test/cdrcoding_12_SUITE.erl240
-rw-r--r--lib/orber/test/cdrlib_SUITE.erl186
-rw-r--r--lib/orber/test/corba_SUITE.erl458
-rw-r--r--lib/orber/test/csiv2_SUITE.erl107
-rw-r--r--lib/orber/test/data_types_SUITE.erl20
-rw-r--r--lib/orber/test/generated_SUITE.erl52
-rw-r--r--lib/orber/test/iiop_module_do_test_impl.erl2
-rw-r--r--lib/orber/test/iiop_module_test_impl.erl2
-rw-r--r--lib/orber/test/iiop_test.idl2
-rw-r--r--lib/orber/test/iiop_test_impl.erl2
-rw-r--r--lib/orber/test/interceptors_SUITE.erl22
-rw-r--r--lib/orber/test/iop_ior_10_SUITE.erl74
-rw-r--r--lib/orber/test/iop_ior_11_SUITE.erl74
-rw-r--r--lib/orber/test/iop_ior_12_SUITE.erl84
-rw-r--r--lib/orber/test/ip_v4v6_interop_SUITE.erl13
-rw-r--r--lib/orber/test/lname_SUITE.erl80
-rw-r--r--lib/orber/test/multi_ORB_SUITE.erl298
-rw-r--r--lib/orber/test/naming_context_SUITE.erl115
-rw-r--r--lib/orber/test/orber_SUITE.erl26
-rw-r--r--lib/orber/test/orber_acl_SUITE.erl46
-rw-r--r--lib/orber/test/orber_firewall_ipv4_in_SUITE.erl51
-rw-r--r--lib/orber/test/orber_firewall_ipv4_out_SUITE.erl47
-rw-r--r--lib/orber/test/orber_firewall_ipv6_in_SUITE.erl51
-rw-r--r--lib/orber/test/orber_firewall_ipv6_out_SUITE.erl47
-rw-r--r--lib/orber/test/orber_nat_SUITE.erl46
-rw-r--r--lib/orber/test/orber_test.idl2
-rw-r--r--lib/orber/test/orber_test_lib.erl4
-rw-r--r--lib/orber/test/orber_test_server.cfg2
-rw-r--r--lib/orber/test/orber_test_server.idl2
-rw-r--r--lib/orber/test/orber_test_server_impl.erl2
-rw-r--r--lib/orber/test/orber_test_timeout_server_impl.erl2
-rw-r--r--lib/orber/test/orber_web_SUITE.erl36
-rw-r--r--lib/orber/test/tc_SUITE.erl350
-rw-r--r--lib/orber/vsn.mk2
-rw-r--r--lib/os_mon/Makefile2
-rw-r--r--lib/os_mon/c_src/Makefile.in2
-rw-r--r--lib/os_mon/c_src/cpu_sup.c107
-rw-r--r--lib/os_mon/c_src/ferrule.c3
-rw-r--r--lib/os_mon/c_src/memsup.c2
-rw-r--r--lib/os_mon/c_src/memsup.h2
-rw-r--r--lib/os_mon/c_src/mod_syslog.c3
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_format.c2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_format.h2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_global.h2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_main.c2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_pipe_stdin.c2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_pipe_stdin.h2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_registry.c2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_registry.h2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_util.c2
-rw-r--r--lib/os_mon/c_src/nteventlog/elog_util.h2
-rw-r--r--lib/os_mon/c_src/win32sysinfo.c2
-rw-r--r--lib/os_mon/doc/src/Makefile2
-rw-r--r--lib/os_mon/doc/src/book.xml2
-rw-r--r--lib/os_mon/doc/src/cpu_sup.xml2
-rw-r--r--lib/os_mon/doc/src/disksup.xml2
-rw-r--r--lib/os_mon/doc/src/memsup.xml2
-rw-r--r--lib/os_mon/doc/src/notes.xml36
-rw-r--r--lib/os_mon/doc/src/nteventlog.xml2
-rw-r--r--lib/os_mon/doc/src/os_mon_app.xml2
-rw-r--r--lib/os_mon/doc/src/os_mon_mib.xml2
-rw-r--r--lib/os_mon/doc/src/os_sup.xml2
-rw-r--r--lib/os_mon/doc/src/part_notes.xml2
-rw-r--r--lib/os_mon/doc/src/ref_man.xml2
-rw-r--r--lib/os_mon/include/memsup.hrl2
-rw-r--r--lib/os_mon/mibs/Makefile2
-rw-r--r--lib/os_mon/mibs/OTP-OS-MON-MIB.mib2
-rw-r--r--lib/os_mon/src/Makefile2
-rw-r--r--lib/os_mon/src/cpu_sup.erl17
-rw-r--r--lib/os_mon/src/disksup.erl4
-rw-r--r--lib/os_mon/src/memsup.erl60
-rw-r--r--lib/os_mon/src/nteventlog.erl2
-rw-r--r--lib/os_mon/src/os_mon.app.src2
-rw-r--r--lib/os_mon/src/os_mon.appup.src2
-rw-r--r--lib/os_mon/src/os_mon.erl2
-rw-r--r--lib/os_mon/src/os_mon_mib.erl2
-rw-r--r--lib/os_mon/src/os_mon_sysinfo.erl2
-rw-r--r--lib/os_mon/src/os_sup.erl2
-rw-r--r--lib/os_mon/test/Makefile5
-rw-r--r--lib/os_mon/test/cpu_sup_SUITE.erl309
-rw-r--r--lib/os_mon/test/disksup_SUITE.erl90
-rw-r--r--lib/os_mon/test/memsup_SUITE.erl924
-rw-r--r--lib/os_mon/test/os_mon_SUITE.erl99
-rw-r--r--lib/os_mon/test/os_mon_conf.erl2
-rw-r--r--lib/os_mon/test/os_mon_mib_SUITE.erl668
-rw-r--r--lib/os_mon/test/os_sup_SUITE.erl199
-rw-r--r--lib/os_mon/vsn.mk2
-rw-r--r--lib/ose/Makefile37
-rw-r--r--lib/ose/doc/man3/.gitignore0
-rw-r--r--lib/ose/doc/man6/.gitignore0
-rw-r--r--lib/ose/doc/pdf/.gitignore0
-rw-r--r--lib/ose/doc/src/.gitignore1
-rw-r--r--lib/ose/doc/src/Makefile133
-rw-r--r--lib/ose/doc/src/book.xml49
-rw-r--r--lib/ose/doc/src/notes.xml109
-rw-r--r--lib/ose/doc/src/ose_app.xml38
-rw-r--r--lib/ose/doc/src/ose_erl_driver.xml111
-rw-r--r--lib/ose/doc/src/ose_intro.xml154
-rw-r--r--lib/ose/doc/src/ose_signals_chapter.xml240
-rw-r--r--lib/ose/doc/src/part.xml39
-rw-r--r--lib/ose/doc/src/ref_man.xml40
-rw-r--r--lib/ose/ebin/.gitignore0
-rw-r--r--lib/ose/include/.gitignore0
-rw-r--r--lib/ose/info2
-rw-r--r--lib/ose/src/Makefile107
-rw-r--r--lib/ose/src/ose.app.src28
-rw-r--r--lib/ose/src/ose.appup.src23
-rw-r--r--lib/ose/src/ose.erl453
-rw-r--r--lib/ose/test/Makefile67
-rw-r--r--lib/ose/test/ose.cover2
-rw-r--r--lib/ose/test/ose.spec1
-rw-r--r--lib/ose/test/ose_SUITE.erl766
-rw-r--r--lib/ose/vsn.mk1
-rw-r--r--lib/otp_mibs/Makefile2
-rw-r--r--lib/otp_mibs/doc/src/Makefile2
-rw-r--r--lib/otp_mibs/doc/src/book.xml2
-rw-r--r--lib/otp_mibs/doc/src/introduction.xml2
-rw-r--r--lib/otp_mibs/doc/src/mibs.xml2
-rw-r--r--lib/otp_mibs/doc/src/notes.xml17
-rw-r--r--lib/otp_mibs/doc/src/otp_mib.xml2
-rw-r--r--lib/otp_mibs/doc/src/part.xml2
-rw-r--r--lib/otp_mibs/doc/src/part_notes.xml2
-rw-r--r--lib/otp_mibs/doc/src/ref_man.xml2
-rw-r--r--lib/otp_mibs/mibs/Makefile2
-rw-r--r--lib/otp_mibs/mibs/OTP-EVA-MIB.mib2
-rw-r--r--lib/otp_mibs/mibs/OTP-MIB.mib2
-rw-r--r--lib/otp_mibs/mibs/OTP-REG.mib2
-rw-r--r--lib/otp_mibs/mibs/OTP-TC.mib2
-rw-r--r--lib/otp_mibs/src/Makefile2
-rw-r--r--lib/otp_mibs/src/otp_mib.erl2
-rw-r--r--lib/otp_mibs/src/otp_mibs.app.src2
-rw-r--r--lib/otp_mibs/src/otp_mibs.appup.src2
-rw-r--r--lib/otp_mibs/test/Makefile3
-rw-r--r--lib/otp_mibs/test/otp_mibs_SUITE.erl4
-rw-r--r--lib/otp_mibs/vsn.mk2
-rw-r--r--lib/parsetools/Makefile2
-rw-r--r--lib/parsetools/doc/src/Makefile2
-rw-r--r--lib/parsetools/doc/src/book.xml2
-rw-r--r--lib/parsetools/doc/src/leex.xml2
-rw-r--r--lib/parsetools/doc/src/notes.xml17
-rw-r--r--lib/parsetools/doc/src/notes_history.xml2
-rw-r--r--lib/parsetools/doc/src/part_notes.xml2
-rw-r--r--lib/parsetools/doc/src/ref_man.xml2
-rw-r--r--lib/parsetools/doc/src/yecc.xml2
-rw-r--r--lib/parsetools/src/Makefile2
-rw-r--r--lib/parsetools/src/parsetools.appup.src2
-rw-r--r--lib/parsetools/src/yecc.erl2
-rw-r--r--lib/parsetools/src/yeccscan.erl2
-rw-r--r--lib/parsetools/test/Makefile4
-rw-r--r--lib/parsetools/test/leex_SUITE.erl4
-rw-r--r--lib/parsetools/test/yecc_SUITE.erl4
-rw-r--r--lib/parsetools/vsn.mk2
-rw-r--r--lib/percept/Makefile2
-rw-r--r--lib/percept/doc/src/Makefile2
-rw-r--r--lib/percept/doc/src/book.xml2
-rw-r--r--lib/percept/doc/src/egd_ug.xmlsrc41
-rw-r--r--lib/percept/doc/src/notes.xml31
-rw-r--r--lib/percept/doc/src/part.xml2
-rw-r--r--lib/percept/doc/src/part_notes.xml2
-rw-r--r--lib/percept/doc/src/percept_ug.xmlsrc2
-rw-r--r--lib/percept/doc/src/ref_man.xml2
-rw-r--r--lib/percept/doc/stylesheet.css2
-rw-r--r--lib/percept/priv/Makefile2
-rw-r--r--lib/percept/priv/server_root/css/percept.css2
-rw-r--r--lib/percept/priv/server_root/htdocs/index.html2
-rw-r--r--lib/percept/priv/server_root/scripts/percept_area_select.js2
-rw-r--r--lib/percept/priv/server_root/scripts/percept_error_handler.js2
-rw-r--r--lib/percept/priv/server_root/scripts/percept_select_all.js2
-rw-r--r--lib/percept/src/Makefile2
-rw-r--r--lib/percept/src/egd.erl48
-rw-r--r--lib/percept/src/egd.hrl5
-rw-r--r--lib/percept/src/egd_font.erl13
-rw-r--r--lib/percept/src/egd_png.erl2
-rw-r--r--lib/percept/src/egd_primitives.erl516
-rw-r--r--lib/percept/src/egd_render.erl270
-rw-r--r--lib/percept/src/percept.app.src2
-rw-r--r--lib/percept/src/percept.appup.src2
-rw-r--r--lib/percept/src/percept.erl60
-rw-r--r--lib/percept/src/percept.hrl2
-rw-r--r--lib/percept/src/percept_analyzer.erl2
-rw-r--r--lib/percept/src/percept_db.erl56
-rw-r--r--lib/percept/src/percept_graph.erl22
-rw-r--r--lib/percept/src/percept_html.erl104
-rw-r--r--lib/percept/src/percept_image.erl2
-rw-r--r--lib/percept/test/Makefile5
-rw-r--r--lib/percept/test/egd_SUITE.erl460
-rw-r--r--lib/percept/test/ipc_tree.erl2
-rw-r--r--lib/percept/test/percept_SUITE.erl132
-rw-r--r--lib/percept/test/percept_db_SUITE.erl40
-rw-r--r--lib/percept/vsn.mk2
-rw-r--r--lib/public_key/Makefile2
-rw-r--r--lib/public_key/asn1/Makefile2
-rw-r--r--lib/public_key/doc/src/Makefile13
-rw-r--r--lib/public_key/doc/src/book.xml2
-rw-r--r--lib/public_key/doc/src/notes.xml30
-rw-r--r--lib/public_key/doc/src/part.xml2
-rw-r--r--lib/public_key/doc/src/part_notes.xml2
-rw-r--r--lib/public_key/doc/src/public_key.xml83
-rw-r--r--lib/public_key/doc/src/public_key_app.xml85
-rw-r--r--lib/public_key/doc/src/ref_man.xml3
-rw-r--r--lib/public_key/doc/src/using_public_key.xml4
-rw-r--r--lib/public_key/include/public_key.hrl2
-rwxr-xr-xlib/public_key/priv/generate2
-rw-r--r--lib/public_key/src/Makefile2
-rw-r--r--lib/public_key/src/pubkey_cert.erl6
-rw-r--r--lib/public_key/src/pubkey_cert_records.erl2
-rw-r--r--lib/public_key/src/pubkey_crl.erl2
-rw-r--r--lib/public_key/src/pubkey_pbe.erl2
-rw-r--r--lib/public_key/src/pubkey_pem.erl2
-rw-r--r--lib/public_key/src/pubkey_ssh.erl2
-rw-r--r--lib/public_key/src/public_key.appup.src2
-rw-r--r--lib/public_key/src/public_key.erl128
-rw-r--r--lib/public_key/test/Makefile2
-rw-r--r--lib/public_key/test/erl_make_certs.erl2
-rw-r--r--lib/public_key/test/pbe_SUITE.erl9
-rw-r--r--lib/public_key/test/pkits_SUITE.erl4
-rw-r--r--lib/public_key/test/public_key_SUITE.erl170
-rw-r--r--lib/public_key/test/public_key_SUITE_data/ec_key.pem8
-rw-r--r--lib/public_key/test/public_key_SUITE_data/ec_pubkey.pem4
-rw-r--r--lib/public_key/vsn.mk2
-rw-r--r--lib/reltool/Makefile2
-rwxr-xr-xlib/reltool/bin/reltool.escript2
-rw-r--r--lib/reltool/doc/src/Makefile2
-rw-r--r--lib/reltool/doc/src/book.xml2
-rw-r--r--lib/reltool/doc/src/files.mk2
-rw-r--r--lib/reltool/doc/src/notes.xml31
-rw-r--r--lib/reltool/doc/src/part.xml2
-rw-r--r--lib/reltool/doc/src/ref_man.xml2
-rw-r--r--lib/reltool/doc/src/reltool.xml12
-rw-r--r--lib/reltool/doc/src/reltool_examples.xml2
-rw-r--r--lib/reltool/doc/src/reltool_intro.xml2
-rw-r--r--lib/reltool/doc/src/reltool_usage.xml2
-rw-r--r--lib/reltool/examples/Makefile2
-rw-r--r--lib/reltool/src/Makefile2
-rw-r--r--lib/reltool/src/files.mk2
-rw-r--r--lib/reltool/src/reltool.app.src2
-rw-r--r--lib/reltool/src/reltool.appup.src2
-rw-r--r--lib/reltool/src/reltool.erl2
-rw-r--r--lib/reltool/src/reltool.hrl46
-rw-r--r--lib/reltool/src/reltool_app_win.erl2
-rw-r--r--lib/reltool/src/reltool_fgraph.erl2
-rw-r--r--lib/reltool/src/reltool_fgraph.hrl2
-rw-r--r--lib/reltool/src/reltool_fgraph_win.erl6
-rw-r--r--lib/reltool/src/reltool_mod_win.erl2
-rw-r--r--lib/reltool/src/reltool_server.erl153
-rw-r--r--lib/reltool/src/reltool_sys_win.erl2
-rw-r--r--lib/reltool/src/reltool_target.erl2
-rw-r--r--lib/reltool/src/reltool_utils.erl2
-rw-r--r--lib/reltool/test/Makefile2
-rw-r--r--lib/reltool/test/reltool_app_SUITE.erl2
-rw-r--r--lib/reltool/test/reltool_manual_gui_SUITE.erl2
-rw-r--r--lib/reltool/test/reltool_server_SUITE.erl86
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/ebin/x.app7
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/src/x1.erl5
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/ebin/y.app8
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/src/y1.erl5
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/ebin/z.app7
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/src/z1.erl5
-rw-r--r--lib/reltool/test/reltool_test_lib.erl2
-rw-r--r--lib/reltool/test/reltool_test_lib.hrl2
-rw-r--r--lib/reltool/test/reltool_wx_SUITE.erl2
-rwxr-xr-xlib/reltool/test/rtt2
-rw-r--r--lib/reltool/test/rtt.erl2
-rw-r--r--lib/reltool/vsn.mk2
-rw-r--r--lib/runtime_tools/Makefile2
-rw-r--r--lib/runtime_tools/c_src/Makefile.in78
-rw-r--r--lib/runtime_tools/c_src/dtrace_user.d2
-rw-r--r--lib/runtime_tools/c_src/dyntrace.c617
-rw-r--r--lib/runtime_tools/c_src/dyntrace_lttng.h367
-rw-r--r--lib/runtime_tools/c_src/trace_file_drv.c15
-rw-r--r--lib/runtime_tools/c_src/trace_ip_drv.c5
-rw-r--r--lib/runtime_tools/doc/src/LTTng.xml595
-rw-r--r--lib/runtime_tools/doc/src/Makefile6
-rw-r--r--lib/runtime_tools/doc/src/book.xml2
-rw-r--r--lib/runtime_tools/doc/src/dbg.xml377
-rw-r--r--lib/runtime_tools/doc/src/dyntrace.xml2
-rw-r--r--lib/runtime_tools/doc/src/erts_alloc_config.xml2
-rw-r--r--lib/runtime_tools/doc/src/msacc.xml305
-rw-r--r--lib/runtime_tools/doc/src/notes.xml96
-rw-r--r--lib/runtime_tools/doc/src/notes_history.xml2
-rw-r--r--lib/runtime_tools/doc/src/part.xml3
-rw-r--r--lib/runtime_tools/doc/src/part_notes.xml2
-rw-r--r--lib/runtime_tools/doc/src/part_notes_history.xml2
-rw-r--r--lib/runtime_tools/doc/src/ref_man.xml3
-rw-r--r--lib/runtime_tools/doc/src/runtime_tools_app.xml2
-rw-r--r--lib/runtime_tools/doc/src/specs.xml1
-rw-r--r--lib/runtime_tools/doc/src/system_information.xml2
-rw-r--r--lib/runtime_tools/examples/dist.d2
-rw-r--r--lib/runtime_tools/examples/dist.systemtap2
-rw-r--r--lib/runtime_tools/examples/driver1.d2
-rw-r--r--lib/runtime_tools/examples/driver1.systemtap2
-rw-r--r--lib/runtime_tools/examples/efile_drv.d2
-rw-r--r--lib/runtime_tools/examples/efile_drv.systemtap2
-rw-r--r--lib/runtime_tools/examples/function-calls.d2
-rw-r--r--lib/runtime_tools/examples/function-calls.systemtap2
-rw-r--r--lib/runtime_tools/examples/garbage-collection.d2
-rw-r--r--lib/runtime_tools/examples/garbage-collection.systemtap2
-rw-r--r--lib/runtime_tools/examples/memory1.d2
-rw-r--r--lib/runtime_tools/examples/memory1.systemtap2
-rw-r--r--lib/runtime_tools/examples/messages.d2
-rw-r--r--lib/runtime_tools/examples/messages.systemtap2
-rw-r--r--lib/runtime_tools/examples/port1.d2
-rw-r--r--lib/runtime_tools/examples/port1.systemtap2
-rw-r--r--lib/runtime_tools/examples/process-scheduling.d2
-rw-r--r--lib/runtime_tools/examples/process-scheduling.systemtap2
-rw-r--r--lib/runtime_tools/examples/spawn-exit.d2
-rw-r--r--lib/runtime_tools/examples/spawn-exit.systemtap2
-rw-r--r--lib/runtime_tools/examples/user-probe-n.d2
-rw-r--r--lib/runtime_tools/examples/user-probe-n.systemtap2
-rw-r--r--lib/runtime_tools/examples/user-probe.d2
-rw-r--r--lib/runtime_tools/examples/user-probe.systemtap2
-rw-r--r--lib/runtime_tools/include/observer_backend.hrl2
-rw-r--r--lib/runtime_tools/src/Makefile6
-rw-r--r--lib/runtime_tools/src/appmon_info.erl11
-rw-r--r--lib/runtime_tools/src/dbg.erl143
-rw-r--r--lib/runtime_tools/src/dyntrace.erl75
-rw-r--r--lib/runtime_tools/src/erts_alloc_config.erl10
-rw-r--r--lib/runtime_tools/src/msacc.erl355
-rw-r--r--lib/runtime_tools/src/observer_backend.erl49
-rw-r--r--lib/runtime_tools/src/percept_profile.erl9
-rw-r--r--lib/runtime_tools/src/runtime_tools.app.src9
-rw-r--r--lib/runtime_tools/src/runtime_tools.appup.src2
-rw-r--r--lib/runtime_tools/src/runtime_tools.erl2
-rw-r--r--lib/runtime_tools/src/runtime_tools_sup.erl2
-rw-r--r--lib/runtime_tools/src/system_information.erl61
-rw-r--r--lib/runtime_tools/test/Makefile6
-rw-r--r--lib/runtime_tools/test/dbg_SUITE.erl1473
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/Makefile.src8
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c113
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl2
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl2
-rw-r--r--lib/runtime_tools/test/dyntrace_SUITE.erl39
-rw-r--r--lib/runtime_tools/test/dyntrace_lttng_SUITE.erl383
-rw-r--r--lib/runtime_tools/test/erts_alloc_config_SUITE.erl166
-rw-r--r--lib/runtime_tools/test/msacc_SUITE.erl132
-rw-r--r--lib/runtime_tools/test/runtime_tools_SUITE.erl43
-rw-r--r--lib/runtime_tools/test/system_information_SUITE.erl10
-rw-r--r--lib/runtime_tools/vsn.mk2
-rw-r--r--lib/sasl/Makefile2
-rw-r--r--lib/sasl/doc/src/Makefile1
-rw-r--r--lib/sasl/doc/src/alarm_handler.xml2
-rw-r--r--lib/sasl/doc/src/appup.xml5
-rw-r--r--lib/sasl/doc/src/book.xml2
-rw-r--r--lib/sasl/doc/src/error_logging.xml7
-rw-r--r--lib/sasl/doc/src/notes.xml19
-rw-r--r--lib/sasl/doc/src/notes_history.xml2
-rw-r--r--lib/sasl/doc/src/overload.xml152
-rw-r--r--lib/sasl/doc/src/part.xml2
-rw-r--r--lib/sasl/doc/src/part_notes.xml2
-rw-r--r--lib/sasl/doc/src/part_notes_history.xml2
-rw-r--r--lib/sasl/doc/src/rb.xml2
-rw-r--r--lib/sasl/doc/src/ref_man.xml3
-rw-r--r--lib/sasl/doc/src/rel.xml2
-rw-r--r--lib/sasl/doc/src/release_handler.xml2
-rw-r--r--lib/sasl/doc/src/relup.xml2
-rw-r--r--lib/sasl/doc/src/sasl_app.xml19
-rw-r--r--lib/sasl/doc/src/sasl_intro.xml3
-rw-r--r--lib/sasl/doc/src/script.xml2
-rw-r--r--lib/sasl/doc/src/systools.xml2
-rw-r--r--lib/sasl/examples/src/Makefile2
-rw-r--r--lib/sasl/examples/src/target_system.erl2
-rw-r--r--lib/sasl/src/Makefile4
-rw-r--r--lib/sasl/src/alarm_handler.erl2
-rw-r--r--lib/sasl/src/erlsrv.erl2
-rw-r--r--lib/sasl/src/format_lib_supp.erl2
-rw-r--r--lib/sasl/src/misc_supp.erl4
-rw-r--r--lib/sasl/src/overload.erl233
-rw-r--r--lib/sasl/src/rb.erl2
-rw-r--r--lib/sasl/src/rb_format_supp.erl2
-rw-r--r--lib/sasl/src/release_handler.erl2
-rw-r--r--lib/sasl/src/release_handler_1.erl2
-rw-r--r--lib/sasl/src/sasl.app.src9
-rw-r--r--lib/sasl/src/sasl.appup.src10
-rw-r--r--lib/sasl/src/sasl.erl7
-rw-r--r--lib/sasl/src/sasl_report.erl2
-rw-r--r--lib/sasl/src/sasl_report_file_h.erl2
-rw-r--r--lib/sasl/src/sasl_report_tty_h.erl2
-rw-r--r--lib/sasl/src/si.erl2
-rw-r--r--lib/sasl/src/si_sasl_supp.erl2
-rw-r--r--lib/sasl/src/systools.erl2
-rw-r--r--lib/sasl/src/systools.hrl2
-rw-r--r--lib/sasl/src/systools_lib.erl2
-rw-r--r--lib/sasl/src/systools_make.erl45
-rw-r--r--lib/sasl/src/systools_rc.erl2
-rw-r--r--lib/sasl/src/systools_relup.erl2
-rw-r--r--lib/sasl/test/Makefile6
-rw-r--r--lib/sasl/test/alarm_handler_SUITE.erl2
-rw-r--r--lib/sasl/test/installer.erl2
-rw-r--r--lib/sasl/test/overload_SUITE.erl168
-rw-r--r--lib/sasl/test/rb_SUITE.erl2
-rw-r--r--lib/sasl/test/release_handler_SUITE.erl81
-rw-r--r--lib/sasl/test/rh_test_lib.erl2
-rw-r--r--lib/sasl/test/sasl_SUITE.erl2
-rw-r--r--lib/sasl/test/sasl_report_SUITE.erl4
-rw-r--r--lib/sasl/test/systools_SUITE.erl7
-rw-r--r--lib/sasl/test/systools_rc_SUITE.erl6
-rw-r--r--lib/sasl/test/test_lib.hrl4
-rw-r--r--lib/sasl/vsn.mk2
-rw-r--r--lib/snmp/Makefile2
-rw-r--r--lib/snmp/doc/src/Makefile2
-rw-r--r--lib/snmp/doc/src/book.xml2
-rw-r--r--lib/snmp/doc/src/files.mk2
-rw-r--r--lib/snmp/doc/src/notes.xml19
-rw-r--r--lib/snmp/doc/src/notes_history.xml2
-rw-r--r--lib/snmp/doc/src/part.xml2
-rw-r--r--lib/snmp/doc/src/part_notes.xml2
-rw-r--r--lib/snmp/doc/src/part_notes_history.xml2
-rw-r--r--lib/snmp/doc/src/ref_man.xml2
-rw-r--r--lib/snmp/doc/src/snmp.xml2
-rw-r--r--lib/snmp/doc/src/snmp_agent_config_files.xml2
-rw-r--r--lib/snmp/doc/src/snmp_agent_funct_descr.xml2
-rw-r--r--lib/snmp/doc/src/snmp_agent_netif.xml2
-rw-r--r--lib/snmp/doc/src/snmp_app.xml2
-rw-r--r--lib/snmp/doc/src/snmp_app_a.xml2
-rw-r--r--lib/snmp/doc/src/snmp_app_b.xml2
-rw-r--r--lib/snmp/doc/src/snmp_audit_trail_log.xml2
-rw-r--r--lib/snmp/doc/src/snmp_community_mib.xml2
-rw-r--r--lib/snmp/doc/src/snmp_config.xml2
-rw-r--r--lib/snmp/doc/src/snmp_def_instr_functions.xml2
-rw-r--r--lib/snmp/doc/src/snmp_framework_mib.xml2
-rw-r--r--lib/snmp/doc/src/snmp_generic.xml2
-rw-r--r--lib/snmp/doc/src/snmp_impl_example_agent.xml2
-rw-r--r--lib/snmp/doc/src/snmp_impl_example_manager.xml2
-rw-r--r--lib/snmp/doc/src/snmp_index.xml2
-rw-r--r--lib/snmp/doc/src/snmp_instr_functions.xml2
-rw-r--r--lib/snmp/doc/src/snmp_intro.xml2
-rw-r--r--lib/snmp/doc/src/snmp_manager_config_files.xml2
-rw-r--r--lib/snmp/doc/src/snmp_manager_funct_descr.xml2
-rw-r--r--lib/snmp/doc/src/snmp_manager_netif.xml2
-rw-r--r--lib/snmp/doc/src/snmp_mib_compiler.xml2
-rw-r--r--lib/snmp/doc/src/snmp_notification_mib.xml2
-rw-r--r--lib/snmp/doc/src/snmp_pdus.xml2
-rw-r--r--lib/snmp/doc/src/snmp_standard_mib.xml2
-rw-r--r--lib/snmp/doc/src/snmp_target_mib.xml2
-rw-r--r--lib/snmp/doc/src/snmp_user_based_sm_mib.xml2
-rw-r--r--lib/snmp/doc/src/snmp_view_based_acm_mib.xml2
-rw-r--r--lib/snmp/doc/src/snmpa.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_conf.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_discovery_handler.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_error.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_error_io.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_error_logger.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_error_report.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_local_db.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_mib_data.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_mib_storage.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_mpd.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_network_interface.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_network_interface_filter.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_notification_delivery_info_receiver.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_notification_filter.xml2
-rw-r--r--lib/snmp/doc/src/snmpa_supervisor.xml2
-rw-r--r--lib/snmp/doc/src/snmpc.xml2
-rw-r--r--lib/snmp/doc/src/snmpc_cmd.xml2
-rw-r--r--lib/snmp/doc/src/snmpm.xml2
-rw-r--r--lib/snmp/doc/src/snmpm_conf.xml2
-rw-r--r--lib/snmp/doc/src/snmpm_mpd.xml2
-rw-r--r--lib/snmp/doc/src/snmpm_network_interface.xml2
-rw-r--r--lib/snmp/doc/src/snmpm_network_interface_filter.xml2
-rw-r--r--lib/snmp/doc/src/snmpm_user.xml2
-rw-r--r--lib/snmp/examples/Makefile2
-rw-r--r--lib/snmp/examples/ex1/Makefile2
-rw-r--r--lib/snmp/examples/ex2/Makefile2
-rw-r--r--lib/snmp/examples/ex2/snmp_ex2_manager.erl2
-rw-r--r--lib/snmp/examples/ex2/snmp_ex2_simple_standard_test.erl2
-rw-r--r--lib/snmp/examples/subdirs.mk2
-rw-r--r--lib/snmp/include/SNMPv2-TC.hrl2
-rw-r--r--lib/snmp/include/snmp_tables.hrl2
-rw-r--r--lib/snmp/include/snmp_types.hrl2
-rw-r--r--lib/snmp/mibs/Makefile.in2
-rw-r--r--lib/snmp/priv/conf/Makefile2
-rw-r--r--lib/snmp/priv/conf/agent/Makefile2
-rw-r--r--lib/snmp/priv/conf/agent/files.mk2
-rw-r--r--lib/snmp/priv/conf/manager/Makefile2
-rw-r--r--lib/snmp/priv/conf/manager/files.mk2
-rw-r--r--lib/snmp/priv/conf/subdirs.mk2
-rw-r--r--lib/snmp/src/Makefile2
-rw-r--r--lib/snmp/src/agent/Makefile2
-rw-r--r--lib/snmp/src/agent/depend.mk2
-rw-r--r--lib/snmp/src/agent/modules.mk2
-rw-r--r--lib/snmp/src/agent/snmp_community_mib.erl2
-rw-r--r--lib/snmp/src/agent/snmp_framework_mib.erl2
-rw-r--r--lib/snmp/src/agent/snmp_generic.erl2
-rw-r--r--lib/snmp/src/agent/snmp_generic_mnesia.erl2
-rw-r--r--lib/snmp/src/agent/snmp_index.erl2
-rw-r--r--lib/snmp/src/agent/snmp_notification_mib.erl2
-rw-r--r--lib/snmp/src/agent/snmp_view_based_acm_mib.erl2
-rw-r--r--lib/snmp/src/agent/snmpa.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_acm.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_agent.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_agent_sup.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_app.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_atl.hrl2
-rw-r--r--lib/snmp/src/agent/snmpa_authentication_service.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_conf.erl18
-rw-r--r--lib/snmp/src/agent/snmpa_discovery_handler.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_discovery_handler_default.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_error.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_error_io.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_error_logger.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_error_report.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_general_db.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_internal.hrl2
-rw-r--r--lib/snmp/src/agent/snmpa_local_db.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib_data.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib_data_ttln.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib_data_tttn.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib_lib.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib_storage.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib_storage_dets.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib_storage_ets.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_mib_storage_mnesia.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_misc_sup.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_net_if_filter.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_network_interface.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_network_interface_filter.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_notification_delivery_info_receiver.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_notification_filter.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_set.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_set_lib.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_set_mechanism.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_supervisor.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_svbl.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_symbolic_store.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_target_cache.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_trap.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_vacm.hrl2
-rw-r--r--lib/snmp/src/app/Makefile2
-rw-r--r--lib/snmp/src/app/depend.mk2
-rw-r--r--lib/snmp/src/app/modules.mk2
-rw-r--r--lib/snmp/src/app/snmp.erl2
-rw-r--r--lib/snmp/src/app/snmp_app.erl2
-rw-r--r--lib/snmp/src/app/snmp_app_sup.erl2
-rw-r--r--lib/snmp/src/app/snmp_internal.hrl2
-rw-r--r--lib/snmp/src/compile/Makefile2
-rw-r--r--lib/snmp/src/compile/depend.mk2
-rw-r--r--lib/snmp/src/compile/modules.mk2
-rw-r--r--lib/snmp/src/compile/snmpc.hrl2
-rw-r--r--lib/snmp/src/compile/snmpc.src2
-rw-r--r--lib/snmp/src/compile/snmpc_lib.erl2
-rw-r--r--lib/snmp/src/compile/snmpc_lib.hrl2
-rw-r--r--lib/snmp/src/compile/snmpc_mib_gram.yrl2
-rw-r--r--lib/snmp/src/compile/snmpc_mib_to_hrl.erl2
-rw-r--r--lib/snmp/src/compile/snmpc_misc.erl2
-rw-r--r--lib/snmp/src/compile/snmpc_misc.hrl2
-rw-r--r--lib/snmp/src/compile/snmpc_tok.erl2
-rw-r--r--lib/snmp/src/manager/Makefile2
-rw-r--r--lib/snmp/src/manager/depend.mk2
-rw-r--r--lib/snmp/src/manager/modules.mk2
-rw-r--r--lib/snmp/src/manager/snmpm.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_atl.hrl2
-rw-r--r--lib/snmp/src/manager/snmpm_conf.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_config.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_internal.hrl2
-rw-r--r--lib/snmp/src/manager/snmpm_misc_sup.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_net_if_filter.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_net_if_mt.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_network_interface.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_network_interface_filter.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_server_sup.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_supervisor.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_user.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_user_default.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_user_old.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_usm.erl2
-rw-r--r--lib/snmp/src/manager/snmpm_usm.hrl2
-rw-r--r--lib/snmp/src/misc/Makefile2
-rw-r--r--lib/snmp/src/misc/depend.mk2
-rw-r--r--lib/snmp/src/misc/modules.mk2
-rw-r--r--lib/snmp/src/misc/snmp_conf.erl2
-rw-r--r--lib/snmp/src/misc/snmp_config.erl2
-rw-r--r--lib/snmp/src/misc/snmp_debug.hrl2
-rw-r--r--lib/snmp/src/misc/snmp_log.erl2
-rw-r--r--lib/snmp/src/misc/snmp_mini_mib.erl2
-rw-r--r--lib/snmp/src/misc/snmp_note_store.erl2
-rw-r--r--lib/snmp/src/misc/snmp_pdus.erl2
-rw-r--r--lib/snmp/src/misc/snmp_usm.erl2
-rw-r--r--lib/snmp/src/misc/snmp_verbosity.hrl2
-rw-r--r--lib/snmp/src/subdirs.mk2
-rw-r--r--lib/snmp/subdirs.mk2
-rw-r--r--lib/snmp/test/Makefile3
-rw-r--r--lib/snmp/test/exp/snmp_agent_bl_test.erl2
-rw-r--r--lib/snmp/test/exp/snmp_agent_ms_test.erl4
-rw-r--r--lib/snmp/test/exp/snmp_agent_mt_test.erl4
-rw-r--r--lib/snmp/test/exp/snmp_agent_v1_test.erl4
-rw-r--r--lib/snmp/test/exp/snmp_agent_v2_test.erl4
-rw-r--r--lib/snmp/test/exp/snmp_agent_v3_test.erl4
-rw-r--r--lib/snmp/test/klas3.erl2
-rw-r--r--lib/snmp/test/modules.mk3
-rw-r--r--lib/snmp/test/sa.erl2
-rw-r--r--lib/snmp/test/snmp_SUITE.erl6
-rw-r--r--lib/snmp/test/snmp_agent_conf_test.erl210
-rw-r--r--lib/snmp/test/snmp_agent_mibs_test.erl4
-rw-r--r--lib/snmp/test/snmp_agent_nfilter_test.erl4
-rw-r--r--lib/snmp/test/snmp_agent_test.erl4
-rw-r--r--lib/snmp/test/snmp_agent_test_lib.erl4
-rw-r--r--lib/snmp/test/snmp_app_test.erl4
-rw-r--r--lib/snmp/test/snmp_appup_test.erl2
-rw-r--r--lib/snmp/test/snmp_compiler_test.erl4
-rw-r--r--lib/snmp/test/snmp_conf_test.erl4
-rw-r--r--lib/snmp/test/snmp_log_test.erl4
-rw-r--r--lib/snmp/test/snmp_manager_config_test.erl4
-rw-r--r--lib/snmp/test/snmp_manager_test.erl4
-rw-r--r--lib/snmp/test/snmp_manager_user.erl4
-rw-r--r--lib/snmp/test/snmp_manager_user_old.erl4
-rw-r--r--lib/snmp/test/snmp_manager_user_test.erl4
-rw-r--r--lib/snmp/test/snmp_manager_user_test_lib.erl4
-rw-r--r--lib/snmp/test/snmp_note_store_test.erl2
-rw-r--r--lib/snmp/test/snmp_pdus_test.erl2
-rw-r--r--lib/snmp/test/snmp_test_manager.erl2
-rw-r--r--lib/snmp/test/snmp_test_mgr_counter_server.erl2
-rw-r--r--lib/snmp/test/snmp_test_mgr_misc.erl2
-rw-r--r--lib/snmp/test/snmp_test_server.erl2
-rw-r--r--lib/snmp/test/snmp_test_suite.erl2
-rw-r--r--lib/snmp/test/snmp_to_snmpnet_SUITE.erl2
-rwxr-xr-xlib/snmp/test/snmp_to_snmpnet_SUITE_data/start_stop_wrapper2
-rw-r--r--lib/snmp/test/test1.erl2
-rw-r--r--lib/snmp/test/test2.erl2
-rw-r--r--lib/snmp/test/test_config/Makefile2
-rw-r--r--lib/snmp/test/test_config/modules.mk2
-rw-r--r--lib/snmp/test/test_config/snmp_test_config.erl2
-rw-r--r--lib/snmp/vsn.mk4
-rw-r--r--lib/ssh/Makefile2
-rw-r--r--lib/ssh/doc/src/Makefile2
-rw-r--r--lib/ssh/doc/src/book.xml2
-rw-r--r--lib/ssh/doc/src/introduction.xml2
-rw-r--r--lib/ssh/doc/src/notes.xml104
-rw-r--r--lib/ssh/doc/src/part_notes.xml2
-rw-r--r--lib/ssh/doc/src/ref_man.xml2
-rw-r--r--lib/ssh/doc/src/ssh.xml37
-rw-r--r--lib/ssh/doc/src/ssh_channel.xml2
-rw-r--r--lib/ssh/doc/src/ssh_client_key_api.xml2
-rw-r--r--lib/ssh/doc/src/ssh_sftp.xml231
-rw-r--r--lib/ssh/doc/src/ssh_sftpd.xml2
-rw-r--r--lib/ssh/doc/src/usersguide.xml2
-rw-r--r--lib/ssh/doc/src/using_ssh.xml2
-rw-r--r--lib/ssh/examples/ssh_sample_cli.erl2
-rw-r--r--lib/ssh/src/Makefile3
-rw-r--r--lib/ssh/src/ssh.app.src10
-rw-r--r--lib/ssh/src/ssh.erl321
-rw-r--r--lib/ssh/src/ssh.hrl6
-rw-r--r--lib/ssh/src/ssh_acceptor.erl46
-rw-r--r--lib/ssh/src/ssh_acceptor_sup.erl9
-rw-r--r--lib/ssh/src/ssh_app.erl2
-rw-r--r--lib/ssh/src/ssh_auth.erl24
-rw-r--r--lib/ssh/src/ssh_auth.hrl2
-rw-r--r--lib/ssh/src/ssh_bits.erl143
-rw-r--r--lib/ssh/src/ssh_channel.erl7
-rw-r--r--lib/ssh/src/ssh_channel_sup.erl4
-rw-r--r--lib/ssh/src/ssh_cli.erl17
-rw-r--r--lib/ssh/src/ssh_client_key.erl2
-rw-r--r--lib/ssh/src/ssh_client_key_api.erl26
-rw-r--r--lib/ssh/src/ssh_connect.hrl15
-rw-r--r--lib/ssh/src/ssh_connection.erl152
-rw-r--r--lib/ssh/src/ssh_connection_handler.erl2966
-rw-r--r--lib/ssh/src/ssh_connection_sup.erl4
-rw-r--r--lib/ssh/src/ssh_daemon_channel.erl2
-rw-r--r--lib/ssh/src/ssh_dbg.erl185
-rw-r--r--lib/ssh/src/ssh_file.erl25
-rw-r--r--lib/ssh/src/ssh_info.erl341
-rw-r--r--lib/ssh/src/ssh_io.erl2
-rw-r--r--lib/ssh/src/ssh_message.erl195
-rw-r--r--lib/ssh/src/ssh_no_io.erl46
-rw-r--r--lib/ssh/src/ssh_server_key.erl2
-rw-r--r--lib/ssh/src/ssh_server_key_api.erl17
-rw-r--r--lib/ssh/src/ssh_sftp.erl53
-rw-r--r--lib/ssh/src/ssh_sftpd.erl16
-rw-r--r--lib/ssh/src/ssh_sftpd_file.erl2
-rw-r--r--lib/ssh/src/ssh_sftpd_file_api.erl2
-rw-r--r--lib/ssh/src/ssh_shell.erl17
-rw-r--r--lib/ssh/src/ssh_subsystem_sup.erl4
-rw-r--r--lib/ssh/src/ssh_sup.erl4
-rw-r--r--lib/ssh/src/ssh_system_sup.erl18
-rw-r--r--lib/ssh/src/ssh_transport.erl245
-rw-r--r--lib/ssh/src/ssh_transport.hrl2
-rw-r--r--lib/ssh/src/ssh_userauth.hrl2
-rw-r--r--lib/ssh/src/ssh_xfer.erl28
-rw-r--r--lib/ssh/src/ssh_xfer.hrl2
-rw-r--r--lib/ssh/src/sshc_sup.erl8
-rw-r--r--lib/ssh/src/sshd_sup.erl4
-rw-r--r--lib/ssh/test/Makefile9
-rw-r--r--lib/ssh/test/property_test/ssh_eqc_client_server.erl2
-rw-r--r--lib/ssh/test/property_test/ssh_eqc_encode_decode.erl2
-rw-r--r--lib/ssh/test/property_test/ssh_eqc_subsys.erl2
-rw-r--r--lib/ssh/test/ssh_algorithms_SUITE.erl138
-rw-r--r--lib/ssh/test/ssh_basic_SUITE.erl185
-rw-r--r--lib/ssh/test/ssh_benchmark_SUITE.erl93
-rw-r--r--lib/ssh/test/ssh_connection_SUITE.erl352
-rw-r--r--lib/ssh/test/ssh_echo_server.erl36
-rw-r--r--lib/ssh/test/ssh_options_SUITE.erl141
-rw-r--r--lib/ssh/test/ssh_peername_sockname_server.erl2
-rw-r--r--lib/ssh/test/ssh_property_test_SUITE.erl4
-rw-r--r--lib/ssh/test/ssh_protocol_SUITE.erl23
-rw-r--r--lib/ssh/test/ssh_renegotiate_SUITE.erl27
-rw-r--r--lib/ssh/test/ssh_sftp_SUITE.erl424
-rw-r--r--lib/ssh/test/ssh_sftpd_SUITE.erl113
-rw-r--r--lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl69
-rw-r--r--lib/ssh/test/ssh_sftpd_erlclient_SUITE_data/ssh_sftpd_file_alt.erl2
-rw-r--r--lib/ssh/test/ssh_sup_SUITE.erl134
-rw-r--r--lib/ssh/test/ssh_test_cli.erl9
-rw-r--r--lib/ssh/test/ssh_test_lib.erl141
-rw-r--r--lib/ssh/test/ssh_test_lib.hrl37
-rw-r--r--lib/ssh/test/ssh_to_openssh_SUITE.erl73
-rw-r--r--lib/ssh/test/ssh_to_openssh_SUITE_data/ssh_host_rsa_key16
-rw-r--r--lib/ssh/test/ssh_to_openssh_SUITE_data/ssh_host_rsa_key.pub5
-rw-r--r--lib/ssh/test/ssh_trpt_test_lib.erl9
-rw-r--r--lib/ssh/test/ssh_upgrade_SUITE.erl30
-rw-r--r--lib/ssh/vsn.mk2
-rw-r--r--lib/ssl/Makefile2
-rw-r--r--lib/ssl/doc/src/book.xml2
-rw-r--r--lib/ssl/doc/src/notes.xml152
-rw-r--r--lib/ssl/doc/src/pkix_certs.xml2
-rw-r--r--lib/ssl/doc/src/release_notes.xml2
-rw-r--r--lib/ssl/doc/src/ssl.xml161
-rw-r--r--lib/ssl/doc/src/ssl_app.xml45
-rw-r--r--lib/ssl/doc/src/ssl_crl_cache_api.xml15
-rw-r--r--lib/ssl/doc/src/ssl_distribution.xml14
-rw-r--r--lib/ssl/doc/src/usersguide.xml2
-rw-r--r--lib/ssl/doc/src/using_ssl.xml2
-rw-r--r--lib/ssl/examples/certs/Makefile2
-rw-r--r--lib/ssl/examples/src/Makefile2
-rw-r--r--lib/ssl/examples/src/client_server.erl2
-rw-r--r--lib/ssl/src/Makefile1
-rw-r--r--lib/ssl/src/dtls.erl2
-rw-r--r--lib/ssl/src/dtls_connection.erl665
-rw-r--r--lib/ssl/src/dtls_connection.hrl3
-rw-r--r--lib/ssl/src/dtls_connection_sup.erl2
-rw-r--r--lib/ssl/src/dtls_handshake.erl210
-rw-r--r--lib/ssl/src/dtls_handshake.hrl2
-rw-r--r--lib/ssl/src/dtls_record.erl116
-rw-r--r--lib/ssl/src/dtls_record.hrl2
-rw-r--r--lib/ssl/src/dtls_v1.erl2
-rw-r--r--lib/ssl/src/inet_tls_dist.erl5
-rw-r--r--lib/ssl/src/ssl.app.src3
-rw-r--r--lib/ssl/src/ssl.appup.src7
-rw-r--r--lib/ssl/src/ssl.erl101
-rw-r--r--lib/ssl/src/ssl_alert.erl14
-rw-r--r--lib/ssl/src/ssl_alert.hrl4
-rw-r--r--lib/ssl/src/ssl_api.hrl2
-rw-r--r--lib/ssl/src/ssl_app.erl2
-rw-r--r--lib/ssl/src/ssl_certificate.erl2
-rw-r--r--lib/ssl/src/ssl_cipher.erl50
-rw-r--r--lib/ssl/src/ssl_connection.erl1064
-rw-r--r--lib/ssl/src/ssl_connection.hrl33
-rw-r--r--lib/ssl/src/ssl_crl.erl16
-rw-r--r--lib/ssl/src/ssl_crl_cache.erl5
-rw-r--r--lib/ssl/src/ssl_crl_cache_api.erl7
-rw-r--r--lib/ssl/src/ssl_crl_hash_dir.erl106
-rw-r--r--lib/ssl/src/ssl_dist_sup.erl2
-rw-r--r--lib/ssl/src/ssl_handshake.erl284
-rw-r--r--lib/ssl/src/ssl_handshake.hrl5
-rw-r--r--lib/ssl/src/ssl_internal.hrl20
-rw-r--r--lib/ssl/src/ssl_listen_tracker_sup.erl2
-rw-r--r--lib/ssl/src/ssl_manager.erl8
-rw-r--r--lib/ssl/src/ssl_record.erl65
-rw-r--r--lib/ssl/src/ssl_record.hrl8
-rw-r--r--lib/ssl/src/ssl_session.erl2
-rw-r--r--lib/ssl/src/ssl_session_cache.erl2
-rw-r--r--lib/ssl/src/ssl_session_cache_api.erl2
-rw-r--r--lib/ssl/src/ssl_socket.erl9
-rw-r--r--lib/ssl/src/ssl_srp.hrl2
-rw-r--r--lib/ssl/src/ssl_sup.erl2
-rw-r--r--lib/ssl/src/ssl_tls_dist_proxy.erl40
-rw-r--r--lib/ssl/src/ssl_v2.erl2
-rw-r--r--lib/ssl/src/ssl_v3.erl6
-rw-r--r--lib/ssl/src/tls.erl2
-rw-r--r--lib/ssl/src/tls_connection.erl643
-rw-r--r--lib/ssl/src/tls_connection.hrl2
-rw-r--r--lib/ssl/src/tls_connection_sup.erl2
-rw-r--r--lib/ssl/src/tls_handshake.erl64
-rw-r--r--lib/ssl/src/tls_handshake.hrl2
-rw-r--r--lib/ssl/src/tls_record.hrl2
-rw-r--r--lib/ssl/src/tls_v1.erl10
-rw-r--r--lib/ssl/test/Makefile7
-rw-r--r--lib/ssl/test/erl_make_certs.erl2
-rw-r--r--lib/ssl/test/make_certs.erl15
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE.erl100
-rw-r--r--lib/ssl/test/ssl_alpn_handshake_SUITE.erl28
-rw-r--r--lib/ssl/test/ssl_basic_SUITE.erl1004
-rw-r--r--lib/ssl/test/ssl_bench_SUITE.erl2
-rw-r--r--lib/ssl/test/ssl_certificate_verify_SUITE.erl372
-rw-r--r--lib/ssl/test/ssl_crl_SUITE.erl243
-rw-r--r--lib/ssl/test/ssl_dist_SUITE.erl447
-rw-r--r--lib/ssl/test/ssl_handshake_SUITE.erl9
-rw-r--r--lib/ssl/test/ssl_npn_handshake_SUITE.erl27
-rw-r--r--lib/ssl/test/ssl_npn_hello_SUITE.erl28
-rw-r--r--lib/ssl/test/ssl_packet_SUITE.erl189
-rw-r--r--lib/ssl/test/ssl_payload_SUITE.erl79
-rw-r--r--lib/ssl/test/ssl_pem_cache_SUITE.erl8
-rw-r--r--lib/ssl/test/ssl_session_cache_SUITE.erl18
-rw-r--r--lib/ssl/test/ssl_sni_SUITE.erl22
-rw-r--r--lib/ssl/test/ssl_test_lib.erl134
-rw-r--r--lib/ssl/test/ssl_to_openssl_SUITE.erl212
-rw-r--r--lib/ssl/test/ssl_upgrade_SUITE.erl35
-rw-r--r--lib/ssl/vsn.mk2
-rw-r--r--lib/stdlib/Makefile2
-rw-r--r--lib/stdlib/doc/src/Makefile3
-rw-r--r--lib/stdlib/doc/src/array.xml1005
-rw-r--r--lib/stdlib/doc/src/assert_hrl.xml169
-rw-r--r--lib/stdlib/doc/src/base64.xml51
-rw-r--r--lib/stdlib/doc/src/beam_lib.xml528
-rw-r--r--lib/stdlib/doc/src/binary.xml568
-rw-r--r--lib/stdlib/doc/src/book.xml5
-rw-r--r--lib/stdlib/doc/src/c.xml170
-rw-r--r--lib/stdlib/doc/src/calendar.xml250
-rw-r--r--lib/stdlib/doc/src/dets.xml1069
-rw-r--r--lib/stdlib/doc/src/dict.xml210
-rw-r--r--lib/stdlib/doc/src/digraph.xml540
-rw-r--r--lib/stdlib/doc/src/digraph_utils.xml461
-rw-r--r--lib/stdlib/doc/src/epp.xml232
-rw-r--r--lib/stdlib/doc/src/erl_anno.xml189
-rw-r--r--lib/stdlib/doc/src/erl_eval.xml247
-rw-r--r--lib/stdlib/doc/src/erl_expand_records.xml22
-rw-r--r--lib/stdlib/doc/src/erl_id_trans.xml36
-rw-r--r--lib/stdlib/doc/src/erl_internal.xml95
-rw-r--r--lib/stdlib/doc/src/erl_lint.xml149
-rw-r--r--lib/stdlib/doc/src/erl_parse.xml401
-rw-r--r--lib/stdlib/doc/src/erl_pp.xml131
-rw-r--r--lib/stdlib/doc/src/erl_scan.xml516
-rw-r--r--lib/stdlib/doc/src/erl_tar.xml610
-rw-r--r--lib/stdlib/doc/src/ets.xml2287
-rw-r--r--lib/stdlib/doc/src/file_sorter.xml352
-rw-r--r--lib/stdlib/doc/src/filelib.xml186
-rw-r--r--lib/stdlib/doc/src/filename.xml426
-rw-r--r--lib/stdlib/doc/src/gb_sets.xml325
-rw-r--r--lib/stdlib/doc/src/gb_trees.xml245
-rw-r--r--lib/stdlib/doc/src/gen_event.xml889
-rw-r--r--lib/stdlib/doc/src/gen_fsm.xml1270
-rw-r--r--lib/stdlib/doc/src/gen_server.xml1064
-rw-r--r--lib/stdlib/doc/src/gen_statem.xml1679
-rw-r--r--lib/stdlib/doc/src/introduction.xml72
-rw-r--r--lib/stdlib/doc/src/io.xml1140
-rw-r--r--lib/stdlib/doc/src/io_lib.xml402
-rw-r--r--lib/stdlib/doc/src/io_protocol.xml1174
-rw-r--r--lib/stdlib/doc/src/lib.xml59
-rw-r--r--lib/stdlib/doc/src/lists.xml751
-rw-r--r--lib/stdlib/doc/src/log_mf_h.xml48
-rw-r--r--lib/stdlib/doc/src/maps.xml637
-rw-r--r--lib/stdlib/doc/src/math.xml78
-rw-r--r--lib/stdlib/doc/src/ms_transform.xml960
-rw-r--r--lib/stdlib/doc/src/notes.xml331
-rw-r--r--lib/stdlib/doc/src/notes_history.xml2
-rw-r--r--lib/stdlib/doc/src/orddict.xml220
-rw-r--r--lib/stdlib/doc/src/ordsets.xml163
-rw-r--r--lib/stdlib/doc/src/part.xml9
-rw-r--r--lib/stdlib/doc/src/part_notes.xml2
-rw-r--r--lib/stdlib/doc/src/part_notes_history.xml2
-rw-r--r--lib/stdlib/doc/src/pool.xml112
-rw-r--r--lib/stdlib/doc/src/proc_lib.xml424
-rw-r--r--lib/stdlib/doc/src/proplists.xml282
-rw-r--r--lib/stdlib/doc/src/qlc.xml1430
-rw-r--r--lib/stdlib/doc/src/queue.xml356
-rw-r--r--lib/stdlib/doc/src/rand.xml290
-rw-r--r--lib/stdlib/doc/src/random.xml136
-rw-r--r--lib/stdlib/doc/src/re.xml7345
-rw-r--r--lib/stdlib/doc/src/ref_man.xml6
-rw-r--r--lib/stdlib/doc/src/sets.xml161
-rw-r--r--lib/stdlib/doc/src/shell.xml971
-rw-r--r--lib/stdlib/doc/src/shell_default.xml40
-rw-r--r--lib/stdlib/doc/src/slave.xml204
-rw-r--r--lib/stdlib/doc/src/sofs.xml1350
-rw-r--r--lib/stdlib/doc/src/specs.xml1
-rw-r--r--lib/stdlib/doc/src/stdlib_app.xml49
-rw-r--r--lib/stdlib/doc/src/string.xml418
-rw-r--r--lib/stdlib/doc/src/supervisor.xml784
-rw-r--r--lib/stdlib/doc/src/supervisor_bridge.xml166
-rw-r--r--lib/stdlib/doc/src/sys.xml818
-rw-r--r--lib/stdlib/doc/src/timer.xml382
-rw-r--r--lib/stdlib/doc/src/unicode.xml430
-rw-r--r--lib/stdlib/doc/src/unicode_usage.xml2422
-rw-r--r--lib/stdlib/doc/src/win32reg.xml195
-rw-r--r--lib/stdlib/doc/src/zip.xml685
-rw-r--r--lib/stdlib/examples/erl_id_trans.erl155
-rw-r--r--lib/stdlib/include/assert.hrl31
-rw-r--r--lib/stdlib/include/erl_bits.hrl10
-rw-r--r--lib/stdlib/include/erl_compile.hrl2
-rw-r--r--lib/stdlib/include/ms_transform.hrl2
-rw-r--r--lib/stdlib/include/qlc.hrl2
-rw-r--r--lib/stdlib/include/zip.hrl2
-rw-r--r--lib/stdlib/src/Makefile3
-rw-r--r--lib/stdlib/src/array.erl2
-rw-r--r--lib/stdlib/src/base64.erl2
-rw-r--r--lib/stdlib/src/beam_lib.erl16
-rw-r--r--lib/stdlib/src/binary.erl79
-rw-r--r--lib/stdlib/src/c.erl2
-rw-r--r--lib/stdlib/src/calendar.erl2
-rw-r--r--lib/stdlib/src/dets.erl16
-rw-r--r--lib/stdlib/src/dets.hrl2
-rw-r--r--lib/stdlib/src/dets_server.erl2
-rw-r--r--lib/stdlib/src/dets_sup.erl2
-rw-r--r--lib/stdlib/src/digraph_utils.erl2
-rw-r--r--lib/stdlib/src/edlin.erl2
-rw-r--r--lib/stdlib/src/edlin_expand.erl2
-rw-r--r--lib/stdlib/src/epp.erl602
-rw-r--r--lib/stdlib/src/erl_anno.erl96
-rw-r--r--lib/stdlib/src/erl_bits.erl2
-rw-r--r--lib/stdlib/src/erl_compile.erl3
-rw-r--r--lib/stdlib/src/erl_expand_records.erl41
-rw-r--r--lib/stdlib/src/erl_internal.erl2
-rw-r--r--lib/stdlib/src/erl_lint.erl200
-rw-r--r--lib/stdlib/src/erl_parse.yrl527
-rw-r--r--lib/stdlib/src/erl_posix_msg.erl2
-rw-r--r--lib/stdlib/src/erl_pp.erl60
-rw-r--r--lib/stdlib/src/erl_scan.erl267
-rw-r--r--lib/stdlib/src/erl_tar.erl2
-rw-r--r--lib/stdlib/src/error_logger_file_h.erl2
-rw-r--r--lib/stdlib/src/error_logger_tty_h.erl2
-rw-r--r--lib/stdlib/src/escript.erl9
-rw-r--r--lib/stdlib/src/ets.erl10
-rw-r--r--lib/stdlib/src/eval_bits.erl2
-rw-r--r--lib/stdlib/src/file_sorter.erl22
-rw-r--r--lib/stdlib/src/filelib.erl2
-rw-r--r--lib/stdlib/src/filename.erl181
-rw-r--r--lib/stdlib/src/gen.erl121
-rw-r--r--lib/stdlib/src/gen_event.erl11
-rw-r--r--lib/stdlib/src/gen_fsm.erl85
-rw-r--r--lib/stdlib/src/gen_server.erl112
-rw-r--r--lib/stdlib/src/gen_statem.erl1309
-rw-r--r--lib/stdlib/src/io.erl45
-rw-r--r--lib/stdlib/src/io_lib.erl18
-rw-r--r--lib/stdlib/src/io_lib_format.erl2
-rw-r--r--lib/stdlib/src/io_lib_fread.erl2
-rw-r--r--lib/stdlib/src/io_lib_pretty.erl2
-rw-r--r--lib/stdlib/src/lib.erl4
-rw-r--r--lib/stdlib/src/lists.erl15
-rw-r--r--lib/stdlib/src/log_mf_h.erl2
-rw-r--r--lib/stdlib/src/maps.erl61
-rw-r--r--lib/stdlib/src/math.erl2
-rw-r--r--lib/stdlib/src/ms_transform.erl20
-rw-r--r--lib/stdlib/src/ordsets.erl2
-rw-r--r--lib/stdlib/src/otp_internal.erl180
-rw-r--r--lib/stdlib/src/pool.erl2
-rw-r--r--lib/stdlib/src/proc_lib.erl23
-rw-r--r--lib/stdlib/src/proplists.erl7
-rw-r--r--lib/stdlib/src/qlc.erl21
-rw-r--r--lib/stdlib/src/qlc_pt.erl58
-rw-r--r--lib/stdlib/src/queue.erl8
-rw-r--r--lib/stdlib/src/rand.erl10
-rw-r--r--lib/stdlib/src/random.erl3
-rw-r--r--lib/stdlib/src/re.erl2
-rw-r--r--lib/stdlib/src/sets.erl2
-rw-r--r--lib/stdlib/src/shell.erl12
-rw-r--r--lib/stdlib/src/shell_default.erl2
-rw-r--r--lib/stdlib/src/slave.erl25
-rw-r--r--lib/stdlib/src/sofs.erl5
-rw-r--r--lib/stdlib/src/stdlib.app.src5
-rw-r--r--lib/stdlib/src/stdlib.appup.src10
-rw-r--r--lib/stdlib/src/string.erl2
-rw-r--r--lib/stdlib/src/supervisor.erl111
-rw-r--r--lib/stdlib/src/supervisor_bridge.erl2
-rw-r--r--lib/stdlib/src/sys.erl2
-rw-r--r--lib/stdlib/src/timer.erl2
-rw-r--r--lib/stdlib/src/win32reg.erl2
-rw-r--r--lib/stdlib/test/ExpandTestCaps.erl2
-rw-r--r--lib/stdlib/test/ExpandTestCaps1.erl2
-rw-r--r--lib/stdlib/test/Makefile4
-rw-r--r--lib/stdlib/test/array_SUITE.erl81
-rw-r--r--lib/stdlib/test/base64_SUITE.erl61
-rw-r--r--lib/stdlib/test/beam_lib_SUITE.erl743
-rw-r--r--lib/stdlib/test/binary_module_SUITE.erl1306
-rw-r--r--lib/stdlib/test/binref.erl8
-rw-r--r--lib/stdlib/test/c_SUITE.erl185
-rw-r--r--lib/stdlib/test/c_SUITE_data/m.erl2
-rw-r--r--lib/stdlib/test/calendar_SUITE.erl239
-rw-r--r--lib/stdlib/test/dets_SUITE.erl430
-rw-r--r--lib/stdlib/test/dict_SUITE.erl31
-rw-r--r--lib/stdlib/test/digraph_SUITE.erl406
-rw-r--r--lib/stdlib/test/digraph_utils_SUITE.erl331
-rw-r--r--lib/stdlib/test/dummy1_h.erl4
-rw-r--r--lib/stdlib/test/dummy_h.erl2
-rw-r--r--lib/stdlib/test/dummy_via.erl2
-rw-r--r--lib/stdlib/test/edlin_expand_SUITE.erl38
-rw-r--r--lib/stdlib/test/epp_SUITE.erl692
-rw-r--r--lib/stdlib/test/epp_SUITE_data/mac.erl2
-rw-r--r--lib/stdlib/test/epp_SUITE_data/mac2.erl2
-rw-r--r--lib/stdlib/test/epp_SUITE_data/mac3.erl2
-rw-r--r--lib/stdlib/test/epp_SUITE_data/pmod.erl2
-rw-r--r--lib/stdlib/test/epp_SUITE_data/variable_1.erl2
-rw-r--r--lib/stdlib/test/epp_SUITE_data/variable_1_include.hrl2
-rw-r--r--lib/stdlib/test/epp_SUITE_data/variable_1_include_dir.hrl2
-rw-r--r--lib/stdlib/test/erl_anno_SUITE.erl127
-rw-r--r--lib/stdlib/test/erl_eval_SUITE.erl1012
-rw-r--r--lib/stdlib/test/erl_expand_records_SUITE.erl145
-rw-r--r--lib/stdlib/test/erl_internal_SUITE.erl21
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl632
-rw-r--r--lib/stdlib/test/erl_lint_SUITE_data/format.erl2
-rw-r--r--lib/stdlib/test/erl_pp_SUITE.erl389
-rw-r--r--lib/stdlib/test/erl_scan_SUITE.erl795
-rw-r--r--lib/stdlib/test/error_logger_forwarder.erl8
-rw-r--r--lib/stdlib/test/error_logger_h_SUITE.erl33
-rw-r--r--lib/stdlib/test/escript_SUITE.erl687
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict.erl2
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_app.erl2
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_sup.erl2
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy.erl2
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_app.erl2
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_sup.erl2
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main.erl2
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl2
-rw-r--r--lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl2
-rw-r--r--lib/stdlib/test/ets_SUITE.erl4835
-rw-r--r--lib/stdlib/test/ets_tough_SUITE.erl71
-rw-r--r--lib/stdlib/test/expand_test.erl2
-rw-r--r--lib/stdlib/test/expand_test1.erl2
-rw-r--r--lib/stdlib/test/file_sorter_SUITE.erl1367
-rw-r--r--lib/stdlib/test/filelib_SUITE.erl240
-rw-r--r--lib/stdlib/test/filename_SUITE.erl1127
-rw-r--r--lib/stdlib/test/fixtable_SUITE.erl495
-rw-r--r--lib/stdlib/test/format_SUITE.erl28
-rw-r--r--lib/stdlib/test/gen_event_SUITE.erl1234
-rw-r--r--lib/stdlib/test/gen_fsm_SUITE.erl433
-rw-r--r--lib/stdlib/test/gen_server_SUITE.erl897
-rw-r--r--lib/stdlib/test/gen_statem_SUITE.erl1584
-rw-r--r--lib/stdlib/test/id_transform_SUITE.erl30
-rw-r--r--lib/stdlib/test/id_transform_SUITE_data/External.hrl2
-rw-r--r--lib/stdlib/test/id_transform_SUITE_data/m.hrl2
-rw-r--r--lib/stdlib/test/id_transform_SUITE_data/m_i.hrl2
-rw-r--r--lib/stdlib/test/id_transform_SUITE_data/oe_ex.hrl2
-rw-r--r--lib/stdlib/test/io_SUITE.erl1737
-rw-r--r--lib/stdlib/test/io_proto_SUITE.erl1466
-rw-r--r--lib/stdlib/test/lists_SUITE.erl2345
-rw-r--r--lib/stdlib/test/log_mf_h_SUITE.erl51
-rw-r--r--lib/stdlib/test/maps_SUITE.erl70
-rw-r--r--lib/stdlib/test/ms_transform_SUITE.erl587
-rw-r--r--lib/stdlib/test/naughty_child.erl2
-rw-r--r--lib/stdlib/test/proc_lib_SUITE.erl104
-rw-r--r--lib/stdlib/test/qlc_SUITE.erl617
-rw-r--r--lib/stdlib/test/qlc_SUITE_data/join_info_compat.erl2
-rw-r--r--lib/stdlib/test/queue_SUITE.erl446
-rw-r--r--lib/stdlib/test/rand_SUITE.erl87
-rw-r--r--lib/stdlib/test/random_SUITE.erl104
-rw-r--r--lib/stdlib/test/random_iolist.erl18
-rw-r--r--lib/stdlib/test/random_unicode_list.erl20
-rw-r--r--lib/stdlib/test/re_SUITE.erl606
-rw-r--r--lib/stdlib/test/re_testoutput1_replacement_test.erl2
-rw-r--r--lib/stdlib/test/re_testoutput1_split_test.erl2
-rw-r--r--lib/stdlib/test/run_pcre_tests.erl49
-rw-r--r--lib/stdlib/test/select_SUITE.erl512
-rw-r--r--lib/stdlib/test/sets_SUITE.erl37
-rw-r--r--lib/stdlib/test/shell_SUITE.erl3321
-rw-r--r--lib/stdlib/test/slave_SUITE.erl181
-rw-r--r--lib/stdlib/test/sofs_SUITE.erl2989
-rw-r--r--lib/stdlib/test/stdlib_SUITE.erl23
-rw-r--r--lib/stdlib/test/string_SUITE.erl566
-rw-r--r--lib/stdlib/test/supervisor_1.erl2
-rw-r--r--lib/stdlib/test/supervisor_2.erl2
-rw-r--r--lib/stdlib/test/supervisor_3.erl2
-rw-r--r--lib/stdlib/test/supervisor_SUITE.erl78
-rw-r--r--lib/stdlib/test/supervisor_bridge_SUITE.erl87
-rw-r--r--lib/stdlib/test/sys_SUITE.erl96
-rw-r--r--lib/stdlib/test/sys_sp1.erl2
-rw-r--r--lib/stdlib/test/sys_sp2.erl2
-rw-r--r--lib/stdlib/test/tar_SUITE.erl621
-rw-r--r--lib/stdlib/test/timer_SUITE.erl77
-rw-r--r--lib/stdlib/test/timer_simple_SUITE.erl335
-rw-r--r--lib/stdlib/test/unicode_SUITE.erl724
-rw-r--r--lib/stdlib/test/win32reg_SUITE.erl25
-rw-r--r--lib/stdlib/test/y2k_SUITE.erl159
-rw-r--r--lib/stdlib/test/zip_SUITE.erl177
-rw-r--r--lib/stdlib/vsn.mk2
-rw-r--r--lib/syntax_tools/doc/specs/.gitignore1
-rw-r--r--lib/syntax_tools/doc/src/Makefile10
-rw-r--r--lib/syntax_tools/doc/src/book.xml2
-rw-r--r--lib/syntax_tools/doc/src/notes.xml32
-rw-r--r--lib/syntax_tools/doc/src/part.xml2
-rw-r--r--lib/syntax_tools/doc/src/part_notes.xml2
-rw-r--r--lib/syntax_tools/doc/src/ref_man.xml2
-rw-r--r--lib/syntax_tools/doc/src/specs.xml14
-rw-r--r--lib/syntax_tools/src/Makefile2
-rw-r--r--lib/syntax_tools/src/erl_comment_scan.erl10
-rw-r--r--lib/syntax_tools/src/erl_prettypr.erl366
-rw-r--r--lib/syntax_tools/src/erl_recomment.erl17
-rw-r--r--lib/syntax_tools/src/erl_syntax.erl1421
-rw-r--r--lib/syntax_tools/src/erl_syntax_lib.erl195
-rw-r--r--lib/syntax_tools/src/erl_tidy.erl19
-rw-r--r--lib/syntax_tools/src/igor.erl24
-rw-r--r--lib/syntax_tools/src/merl.erl22
-rw-r--r--lib/syntax_tools/src/merl_transform.erl16
-rw-r--r--lib/syntax_tools/src/syntax_tools.app.src2
-rw-r--r--lib/syntax_tools/src/syntax_tools.appup.src2
-rw-r--r--lib/syntax_tools/test/Makefile2
-rw-r--r--lib/syntax_tools/test/merl_SUITE.erl2
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE.erl37
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE_data/empty.erl1
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE_data/erl_tidy_tilde.erl13
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE_data/igor_type_specs.erl80
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl87
-rw-r--r--lib/syntax_tools/vsn.mk2
-rw-r--r--lib/test_server/AUTHORS12
-rw-r--r--lib/test_server/Makefile39
-rw-r--r--lib/test_server/README113
-rw-r--r--lib/test_server/doc/html/.gitignore0
-rw-r--r--lib/test_server/doc/man3/.gitignore0
-rw-r--r--lib/test_server/doc/man6/.gitignore0
-rw-r--r--lib/test_server/doc/pdf/.gitignore0
-rw-r--r--lib/test_server/doc/src/Makefile140
-rw-r--r--lib/test_server/doc/src/basics_chapter.xml215
-rw-r--r--lib/test_server/doc/src/book.xml50
-rw-r--r--lib/test_server/doc/src/example_chapter.xml151
-rw-r--r--lib/test_server/doc/src/fascicules.xml18
-rw-r--r--lib/test_server/doc/src/notes.xml1715
-rw-r--r--lib/test_server/doc/src/notes_history.xml113
-rw-r--r--lib/test_server/doc/src/part.xml46
-rw-r--r--lib/test_server/doc/src/part_notes.xml41
-rw-r--r--lib/test_server/doc/src/part_notes_history.xml39
-rw-r--r--lib/test_server/doc/src/ref_man.xml44
-rw-r--r--lib/test_server/doc/src/run_test_chapter.xml50
-rw-r--r--lib/test_server/doc/src/test_server.xml853
-rw-r--r--lib/test_server/doc/src/test_server_app.xml75
-rw-r--r--lib/test_server/doc/src/test_server_ctrl.xml844
-rw-r--r--lib/test_server/doc/src/test_spec_chapter.xml375
-rw-r--r--lib/test_server/doc/src/ts.xml568
-rw-r--r--lib/test_server/doc/src/why_test_chapter.xml141
-rw-r--r--lib/test_server/doc/src/write_framework_chapter.xml160
-rw-r--r--lib/test_server/doc/src/write_test_chapter.xml228
-rw-r--r--lib/test_server/ebin/.gitignore0
-rw-r--r--lib/test_server/include/test_server.hrl32
-rw-r--r--lib/test_server/include/test_server_line.hrl20
-rw-r--r--lib/test_server/info2
-rw-r--r--lib/test_server/prebuild.skip1
-rw-r--r--lib/test_server/src/Makefile144
-rw-r--r--lib/test_server/src/test_server.app.src39
-rw-r--r--lib/test_server/src/test_server.appup.src22
-rw-r--r--lib/test_server/src/things/distr_startup_SUITE.erl239
-rw-r--r--lib/test_server/src/things/mnesia_power_SUITE.erl126
-rw-r--r--lib/test_server/src/things/random_kill_SUITE.erl82
-rw-r--r--lib/test_server/src/things/soft.gs.txt16
-rw-r--r--lib/test_server/src/things/verify.erl200
-rw-r--r--lib/test_server/test/Makefile92
-rw-r--r--lib/test_server/test/test_server.cover1
-rw-r--r--lib/test_server/test/test_server.spec1
-rw-r--r--lib/test_server/vsn.mk1
-rw-r--r--lib/tools/Makefile4
-rw-r--r--lib/tools/c_src/Makefile.in10
-rw-r--r--lib/tools/c_src/erl_memory.c2
-rw-r--r--lib/tools/doc/src/Makefile2
-rw-r--r--lib/tools/doc/src/book.xml2
-rw-r--r--lib/tools/doc/src/cover_chapter.xml45
-rw-r--r--lib/tools/doc/src/cprof.xml2
-rw-r--r--lib/tools/doc/src/cprof_chapter.xml2
-rw-r--r--lib/tools/doc/src/eprof.xml2
-rw-r--r--lib/tools/doc/src/erlang_mode.xml3
-rw-r--r--lib/tools/doc/src/erlang_mode_chapter.xml2
-rw-r--r--lib/tools/doc/src/fprof.xml2
-rw-r--r--lib/tools/doc/src/fprof_chapter.xml2
-rw-r--r--lib/tools/doc/src/instrument.xml2
-rw-r--r--lib/tools/doc/src/lcnt.xml2
-rw-r--r--lib/tools/doc/src/lcnt_chapter.xml2
-rw-r--r--lib/tools/doc/src/make.xml2
-rw-r--r--lib/tools/doc/src/notes.xml52
-rw-r--r--lib/tools/doc/src/notes_history.xml2
-rw-r--r--lib/tools/doc/src/part.xml2
-rw-r--r--lib/tools/doc/src/part_notes.xml2
-rw-r--r--lib/tools/doc/src/part_notes_history.xml2
-rw-r--r--lib/tools/doc/src/ref_man.xml2
-rw-r--r--lib/tools/doc/src/tags.xml2
-rw-r--r--lib/tools/doc/src/xref.xml2
-rw-r--r--lib/tools/doc/src/xref_chapter.xml2
-rw-r--r--lib/tools/emacs/erlang-eunit.el2
-rw-r--r--lib/tools/emacs/erlang-skels-old.el4
-rw-r--r--lib/tools/emacs/erlang-skels.el124
-rw-r--r--lib/tools/emacs/erlang-test.el122
-rw-r--r--lib/tools/emacs/erlang.el473
-rw-r--r--lib/tools/emacs/test.erl.indented15
-rw-r--r--lib/tools/emacs/test.erl.orig15
-rw-r--r--lib/tools/priv/.gitignore (renamed from lib/ose/doc/html/.gitignore)0
-rw-r--r--lib/tools/priv/Makefile69
-rw-r--r--lib/tools/priv/cover.tool2
-rw-r--r--lib/tools/priv/index.html10
-rw-r--r--lib/tools/src/Makefile3
-rw-r--r--lib/tools/src/cover.erl165
-rw-r--r--lib/tools/src/cover_web.erl1185
-rw-r--r--lib/tools/src/eprof.erl18
-rw-r--r--lib/tools/src/fprof.erl56
-rw-r--r--lib/tools/src/instrument.erl2
-rw-r--r--lib/tools/src/lcnt.erl115
-rw-r--r--lib/tools/src/make.erl7
-rw-r--r--lib/tools/src/tags.erl4
-rw-r--r--lib/tools/src/tools.app.src5
-rw-r--r--lib/tools/src/tools.appup.src2
-rw-r--r--lib/tools/src/xref.erl2
-rw-r--r--lib/tools/src/xref_base.erl219
-rw-r--r--lib/tools/src/xref_parser.yrl2
-rw-r--r--lib/tools/src/xref_utils.erl8
-rw-r--r--lib/tools/test/Makefile5
-rw-r--r--lib/tools/test/cover_SUITE.erl1671
-rw-r--r--lib/tools/test/cover_SUITE_data/d.erl2
-rw-r--r--lib/tools/test/cprof_SUITE.erl315
-rw-r--r--lib/tools/test/emacs_SUITE.erl2
-rw-r--r--lib/tools/test/emem_SUITE.erl844
-rw-r--r--lib/tools/test/eprof_SUITE.erl55
-rw-r--r--lib/tools/test/fprof_SUITE.erl1493
-rw-r--r--lib/tools/test/ignore_cores.erl16
-rw-r--r--lib/tools/test/instrument_SUITE.erl194
-rw-r--r--lib/tools/test/lcnt_SUITE.erl76
-rw-r--r--lib/tools/test/make_SUITE.erl220
-rw-r--r--lib/tools/test/tools_SUITE.erl47
-rw-r--r--lib/tools/test/xref_SUITE.erl3007
-rw-r--r--lib/tools/vsn.mk2
-rw-r--r--lib/typer/Makefile2
-rw-r--r--lib/typer/doc/Makefile2
-rw-r--r--lib/typer/doc/src/Makefile2
-rw-r--r--lib/typer/doc/src/book.xml2
-rw-r--r--lib/typer/doc/src/notes.xml17
-rw-r--r--lib/typer/doc/src/part_notes.xml2
-rw-r--r--lib/typer/doc/src/ref_man.xml2
-rw-r--r--lib/typer/doc/src/typer_app.xml2
-rw-r--r--lib/typer/src/Makefile2
-rw-r--r--lib/typer/src/typer.appup.src2
-rw-r--r--lib/typer/src/typer.erl12
-rw-r--r--lib/typer/test/Makefile2
-rw-r--r--lib/typer/vsn.mk2
-rw-r--r--lib/webtool/AUTHORS4
-rw-r--r--lib/webtool/Makefile39
-rw-r--r--lib/webtool/doc/html/.gitignore0
-rw-r--r--lib/webtool/doc/man1/.gitignore0
-rw-r--r--lib/webtool/doc/man3/.gitignore0
-rw-r--r--lib/webtool/doc/pdf/.gitignore0
-rw-r--r--lib/webtool/doc/src/Makefile132
-rw-r--r--lib/webtool/doc/src/book.xml48
-rw-r--r--lib/webtool/doc/src/fascicules.xml18
-rw-r--r--lib/webtool/doc/src/notes.xml269
-rw-r--r--lib/webtool/doc/src/notes_history.xml74
-rw-r--r--lib/webtool/doc/src/part.xml38
-rw-r--r--lib/webtool/doc/src/part_notes.xml40
-rw-r--r--lib/webtool/doc/src/part_notes_history.xml40
-rw-r--r--lib/webtool/doc/src/ref_man.xml39
-rw-r--r--lib/webtool/doc/src/start_webtool.xml104
-rw-r--r--lib/webtool/doc/src/webtool.xml157
-rw-r--r--lib/webtool/doc/src/webtool_chapter.xml246
-rw-r--r--lib/webtool/ebin/.gitignore0
-rw-r--r--lib/webtool/info2
-rw-r--r--lib/webtool/priv/Makefile82
-rwxr-xr-xlib/webtool/priv/bin/start_webtool3
-rw-r--r--lib/webtool/priv/bin/start_webtool.bat2
-rw-r--r--lib/webtool/priv/root/conf/mime.types99
-rw-r--r--lib/webtool/priv/root/doc/index.html11
-rw-r--r--lib/webtool/priv/root/doc/start_info.html28
-rw-r--r--lib/webtool/priv/root/doc/tool_management.html9
-rw-r--r--lib/webtool/src/webtool.app.src28
-rw-r--r--lib/webtool/src/webtool.appup.src22
-rw-r--r--lib/webtool/src/webtool.erl1207
-rw-r--r--lib/webtool/src/webtool_sup.erl75
-rw-r--r--lib/webtool/test/Makefile65
-rw-r--r--lib/webtool/test/webtool.spec1
-rw-r--r--lib/webtool/test/webtool_SUITE.erl51
-rw-r--r--lib/webtool/vsn.mk1
-rw-r--r--lib/wx/Makefile2
-rw-r--r--lib/wx/api_gen/Makefile2
-rw-r--r--lib/wx/api_gen/gen_util.erl2
-rw-r--r--lib/wx/api_gen/gl_gen.erl16
-rw-r--r--lib/wx/api_gen/gl_gen_c.erl2
-rw-r--r--lib/wx/api_gen/gl_gen_erl.erl4
-rw-r--r--lib/wx/api_gen/gl_scan_doc.erl2
-rw-r--r--lib/wx/api_gen/wx_extra/wxEvtHandler.c_src2
-rw-r--r--lib/wx/api_gen/wx_extra/wxEvtHandler.erl10
-rw-r--r--lib/wx/api_gen/wx_extra/wxListCtrl.c_src2
-rw-r--r--lib/wx/api_gen/wx_extra/wxListCtrl.erl2
-rw-r--r--lib/wx/api_gen/wx_extra/wxPrintout.erl2
-rw-r--r--lib/wx/api_gen/wx_extra/wxTreeCtrl.c_src2
-rw-r--r--lib/wx/api_gen/wx_extra/wxXmlResource.erl2
-rw-r--r--lib/wx/api_gen/wx_gen.erl2
-rw-r--r--lib/wx/api_gen/wx_gen.hrl2
-rw-r--r--lib/wx/api_gen/wx_gen_cpp.erl54
-rw-r--r--lib/wx/api_gen/wx_gen_erl.erl14
-rw-r--r--lib/wx/api_gen/wxapi.conf10
-rw-r--r--lib/wx/c_src/Makefile.in2
-rw-r--r--lib/wx/c_src/egl_impl.cpp2
-rw-r--r--lib/wx/c_src/egl_impl.h2
-rw-r--r--lib/wx/c_src/gen/gl_fdefs.h2
-rw-r--r--lib/wx/c_src/gen/gl_finit.h2
-rw-r--r--lib/wx/c_src/gen/gl_funcs.cpp2
-rw-r--r--lib/wx/c_src/gen/glu_finit.h2
-rw-r--r--lib/wx/c_src/gen/wxe_funcs.cpp131
-rw-r--r--lib/wx/c_src/gen/wxe_macros.h3834
-rw-r--r--lib/wx/c_src/wxe_callback_impl.cpp2
-rw-r--r--lib/wx/c_src/wxe_callback_impl.h2
-rw-r--r--lib/wx/c_src/wxe_driver.c2
-rw-r--r--lib/wx/c_src/wxe_driver.h2
-rw-r--r--lib/wx/c_src/wxe_events.h2
-rw-r--r--lib/wx/c_src/wxe_gl.cpp2
-rw-r--r--lib/wx/c_src/wxe_gl.h2
-rw-r--r--lib/wx/c_src/wxe_helpers.cpp12
-rw-r--r--lib/wx/c_src/wxe_helpers.h4
-rw-r--r--lib/wx/c_src/wxe_impl.cpp24
-rw-r--r--lib/wx/c_src/wxe_impl.h2
-rw-r--r--lib/wx/c_src/wxe_main.cpp6
-rw-r--r--lib/wx/c_src/wxe_memory.h7
-rw-r--r--lib/wx/c_src/wxe_ps_init.c2
-rw-r--r--lib/wx/c_src/wxe_return.cpp2
-rw-r--r--lib/wx/c_src/wxe_return.h2
-rw-r--r--lib/wx/config.mk.in2
-rw-r--r--lib/wx/configure.in2
-rw-r--r--lib/wx/doc/specs/.gitignore1
-rw-r--r--lib/wx/doc/src/Makefile8
-rw-r--r--lib/wx/doc/src/book.xml2
-rw-r--r--lib/wx/doc/src/notes.xml39
-rw-r--r--lib/wx/doc/src/part.xml2
-rw-r--r--lib/wx/doc/src/part_notes.xml2
-rw-r--r--lib/wx/doc/src/ref_man.xml.src2
-rw-r--r--lib/wx/doc/src/specs.xml232
-rw-r--r--lib/wx/examples/Makefile2
-rw-r--r--lib/wx/examples/demo/Makefile2
-rw-r--r--lib/wx/examples/demo/demo.erl2
-rw-r--r--lib/wx/examples/demo/ex_aui.erl2
-rw-r--r--lib/wx/examples/demo/ex_button.erl2
-rw-r--r--lib/wx/examples/demo/ex_canvas.erl17
-rw-r--r--lib/wx/examples/demo/ex_canvas_paint.erl18
-rw-r--r--lib/wx/examples/demo/ex_choices.erl2
-rw-r--r--lib/wx/examples/demo/ex_cursor.erl2
-rw-r--r--lib/wx/examples/demo/ex_dialogs.erl2
-rw-r--r--lib/wx/examples/demo/ex_frame_utils.erl2
-rw-r--r--lib/wx/examples/demo/ex_gauge.erl2
-rw-r--r--lib/wx/examples/demo/ex_gl.erl2
-rw-r--r--lib/wx/examples/demo/ex_graphicsContext.erl4
-rw-r--r--lib/wx/examples/demo/ex_grid.erl2
-rw-r--r--lib/wx/examples/demo/ex_htmlWindow.erl2
-rw-r--r--lib/wx/examples/demo/ex_listCtrl.erl2
-rw-r--r--lib/wx/examples/demo/ex_notebook.erl2
-rw-r--r--lib/wx/examples/demo/ex_pickers.erl2
-rw-r--r--lib/wx/examples/demo/ex_popupMenu.erl2
-rw-r--r--lib/wx/examples/demo/ex_radioBox.erl2
-rw-r--r--lib/wx/examples/demo/ex_sashWindow.erl2
-rw-r--r--lib/wx/examples/demo/ex_sizers.erl2
-rw-r--r--lib/wx/examples/demo/ex_slider.erl2
-rw-r--r--lib/wx/examples/demo/ex_splitterWindow.erl2
-rw-r--r--lib/wx/examples/demo/ex_static.erl2
-rw-r--r--lib/wx/examples/demo/ex_textCtrl.erl2
-rw-r--r--lib/wx/examples/demo/ex_treeCtrl.erl2
-rw-r--r--lib/wx/examples/simple/Makefile2
-rw-r--r--lib/wx/examples/simple/hello.erl2
-rw-r--r--lib/wx/examples/simple/hello2.erl2
-rw-r--r--lib/wx/examples/simple/menu.erl2
-rw-r--r--lib/wx/examples/simple/minimal.erl2
-rw-r--r--lib/wx/examples/sudoku/Makefile2
-rw-r--r--lib/wx/examples/sudoku/sudoku.erl2
-rw-r--r--lib/wx/examples/sudoku/sudoku.hrl2
-rw-r--r--lib/wx/examples/sudoku/sudoku_board.erl2
-rw-r--r--lib/wx/examples/sudoku/sudoku_game.erl9
-rw-r--r--lib/wx/examples/sudoku/sudoku_gui.erl2
-rw-r--r--lib/wx/examples/xrc/Makefile2
-rw-r--r--lib/wx/examples/xrc/xrc.erl2
-rw-r--r--lib/wx/include/gl.hrl6
-rw-r--r--lib/wx/include/glu.hrl2
-rw-r--r--lib/wx/include/wx.hrl452
-rw-r--r--lib/wx/src/Makefile2
-rw-r--r--lib/wx/src/gen/gl.erl1548
-rw-r--r--lib/wx/src/gen/glu.erl28
-rw-r--r--lib/wx/src/gen/wxAcceleratorEntry.erl18
-rw-r--r--lib/wx/src/gen/wxAcceleratorTable.erl6
-rw-r--r--lib/wx/src/gen/wxActivateEvent.erl2
-rw-r--r--lib/wx/src/gen/wxArtProvider.erl10
-rw-r--r--lib/wx/src/gen/wxAuiDockArt.erl8
-rw-r--r--lib/wx/src/gen/wxAuiManager.erl34
-rw-r--r--lib/wx/src/gen/wxAuiManagerEvent.erl18
-rw-r--r--lib/wx/src/gen/wxAuiNotebook.erl32
-rw-r--r--lib/wx/src/gen/wxAuiNotebookEvent.erl8
-rw-r--r--lib/wx/src/gen/wxAuiPaneInfo.erl42
-rw-r--r--lib/wx/src/gen/wxAuiSimpleTabArt.erl4
-rw-r--r--lib/wx/src/gen/wxAuiTabArt.erl14
-rw-r--r--lib/wx/src/gen/wxBitmap.erl34
-rw-r--r--lib/wx/src/gen/wxBitmapButton.erl26
-rw-r--r--lib/wx/src/gen/wxBitmapDataObject.erl8
-rw-r--r--lib/wx/src/gen/wxBoxSizer.erl4
-rw-r--r--lib/wx/src/gen/wxBrush.erl14
-rw-r--r--lib/wx/src/gen/wxBufferedDC.erl34
-rw-r--r--lib/wx/src/gen/wxBufferedPaintDC.erl10
-rw-r--r--lib/wx/src/gen/wxButton.erl26
-rw-r--r--lib/wx/src/gen/wxCalendarCtrl.erl48
-rw-r--r--lib/wx/src/gen/wxCalendarDateAttr.erl34
-rw-r--r--lib/wx/src/gen/wxCalendarEvent.erl2
-rw-r--r--lib/wx/src/gen/wxCaret.erl22
-rw-r--r--lib/wx/src/gen/wxCheckBox.erl22
-rw-r--r--lib/wx/src/gen/wxCheckListBox.erl18
-rw-r--r--lib/wx/src/gen/wxChildFocusEvent.erl2
-rw-r--r--lib/wx/src/gen/wxChoice.erl24
-rw-r--r--lib/wx/src/gen/wxChoicebook.erl34
-rw-r--r--lib/wx/src/gen/wxClientDC.erl4
-rw-r--r--lib/wx/src/gen/wxClipboard.erl14
-rw-r--r--lib/wx/src/gen/wxClipboardTextEvent.erl2
-rw-r--r--lib/wx/src/gen/wxCloseEvent.erl12
-rw-r--r--lib/wx/src/gen/wxColourData.erl10
-rw-r--r--lib/wx/src/gen/wxColourDialog.erl6
-rw-r--r--lib/wx/src/gen/wxColourPickerCtrl.erl26
-rw-r--r--lib/wx/src/gen/wxColourPickerEvent.erl2
-rw-r--r--lib/wx/src/gen/wxComboBox.erl42
-rw-r--r--lib/wx/src/gen/wxCommandEvent.erl6
-rw-r--r--lib/wx/src/gen/wxContextMenuEvent.erl4
-rw-r--r--lib/wx/src/gen/wxControl.erl2
-rw-r--r--lib/wx/src/gen/wxControlWithItems.erl16
-rw-r--r--lib/wx/src/gen/wxCursor.erl8
-rw-r--r--lib/wx/src/gen/wxDC.erl140
-rw-r--r--lib/wx/src/gen/wxDCOverlay.erl6
-rw-r--r--lib/wx/src/gen/wxDataObject.erl2
-rw-r--r--lib/wx/src/gen/wxDateEvent.erl2
-rw-r--r--lib/wx/src/gen/wxDatePickerCtrl.erl16
-rw-r--r--lib/wx/src/gen/wxDialog.erl22
-rw-r--r--lib/wx/src/gen/wxDirDialog.erl16
-rw-r--r--lib/wx/src/gen/wxDirPickerCtrl.erl28
-rw-r--r--lib/wx/src/gen/wxDisplayChangedEvent.erl2
-rw-r--r--lib/wx/src/gen/wxEraseEvent.erl2
-rw-r--r--lib/wx/src/gen/wxEvent.erl10
-rw-r--r--lib/wx/src/gen/wxEvtHandler.erl12
-rw-r--r--lib/wx/src/gen/wxFileDataObject.erl6
-rw-r--r--lib/wx/src/gen/wxFileDialog.erl28
-rw-r--r--lib/wx/src/gen/wxFileDirPickerEvent.erl2
-rw-r--r--lib/wx/src/gen/wxFilePickerCtrl.erl32
-rw-r--r--lib/wx/src/gen/wxFindReplaceData.erl10
-rw-r--r--lib/wx/src/gen/wxFindReplaceDialog.erl6
-rw-r--r--lib/wx/src/gen/wxFlexGridSizer.erl28
-rw-r--r--lib/wx/src/gen/wxFocusEvent.erl2
-rw-r--r--lib/wx/src/gen/wxFont.erl22
-rw-r--r--lib/wx/src/gen/wxFontData.erl18
-rw-r--r--lib/wx/src/gen/wxFontDialog.erl2
-rw-r--r--lib/wx/src/gen/wxFontPickerCtrl.erl26
-rw-r--r--lib/wx/src/gen/wxFontPickerEvent.erl2
-rw-r--r--lib/wx/src/gen/wxFrame.erl42
-rw-r--r--lib/wx/src/gen/wxGBSizerItem.erl2
-rw-r--r--lib/wx/src/gen/wxGLCanvas.erl48
-rw-r--r--lib/wx/src/gen/wxGauge.erl63
-rw-r--r--lib/wx/src/gen/wxGenericDirCtrl.erl44
-rw-r--r--lib/wx/src/gen/wxGraphicsBrush.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsContext.erl86
-rw-r--r--lib/wx/src/gen/wxGraphicsFont.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsMatrix.erl28
-rw-r--r--lib/wx/src/gen/wxGraphicsObject.erl4
-rw-r--r--lib/wx/src/gen/wxGraphicsPath.erl42
-rw-r--r--lib/wx/src/gen/wxGraphicsPen.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsRenderer.erl16
-rw-r--r--lib/wx/src/gen/wxGrid.erl308
-rw-r--r--lib/wx/src/gen/wxGridBagSizer.erl72
-rw-r--r--lib/wx/src/gen/wxGridCellAttr.erl22
-rw-r--r--lib/wx/src/gen/wxGridCellBoolEditor.erl12
-rw-r--r--lib/wx/src/gen/wxGridCellBoolRenderer.erl4
-rw-r--r--lib/wx/src/gen/wxGridCellChoiceEditor.erl8
-rw-r--r--lib/wx/src/gen/wxGridCellEditor.erl24
-rw-r--r--lib/wx/src/gen/wxGridCellFloatEditor.erl10
-rw-r--r--lib/wx/src/gen/wxGridCellFloatRenderer.erl14
-rw-r--r--lib/wx/src/gen/wxGridCellNumberEditor.erl10
-rw-r--r--lib/wx/src/gen/wxGridCellNumberRenderer.erl4
-rw-r--r--lib/wx/src/gen/wxGridCellRenderer.erl4
-rw-r--r--lib/wx/src/gen/wxGridCellStringRenderer.erl4
-rw-r--r--lib/wx/src/gen/wxGridCellTextEditor.erl6
-rw-r--r--lib/wx/src/gen/wxGridEvent.erl2
-rw-r--r--lib/wx/src/gen/wxGridSizer.erl16
-rw-r--r--lib/wx/src/gen/wxHelpEvent.erl6
-rw-r--r--lib/wx/src/gen/wxHtmlEasyPrinting.erl32
-rw-r--r--lib/wx/src/gen/wxHtmlLinkEvent.erl2
-rw-r--r--lib/wx/src/gen/wxHtmlWindow.erl30
-rw-r--r--lib/wx/src/gen/wxIcon.erl12
-rw-r--r--lib/wx/src/gen/wxIconBundle.erl10
-rw-r--r--lib/wx/src/gen/wxIconizeEvent.erl2
-rw-r--r--lib/wx/src/gen/wxIdleEvent.erl10
-rw-r--r--lib/wx/src/gen/wxImage.erl134
-rw-r--r--lib/wx/src/gen/wxImageList.erl16
-rw-r--r--lib/wx/src/gen/wxInitDialogEvent.erl2
-rw-r--r--lib/wx/src/gen/wxJoystickEvent.erl8
-rw-r--r--lib/wx/src/gen/wxKeyEvent.erl2
-rw-r--r--lib/wx/src/gen/wxLayoutAlgorithm.erl10
-rw-r--r--lib/wx/src/gen/wxListBox.erl28
-rw-r--r--lib/wx/src/gen/wxListCtrl.erl63
-rw-r--r--lib/wx/src/gen/wxListEvent.erl2
-rw-r--r--lib/wx/src/gen/wxListItem.erl30
-rw-r--r--lib/wx/src/gen/wxListItemAttr.erl10
-rw-r--r--lib/wx/src/gen/wxListView.erl12
-rw-r--r--lib/wx/src/gen/wxListbook.erl34
-rw-r--r--lib/wx/src/gen/wxLocale.erl18
-rw-r--r--lib/wx/src/gen/wxLogNull.erl4
-rw-r--r--lib/wx/src/gen/wxMDIChildFrame.erl24
-rw-r--r--lib/wx/src/gen/wxMDIClientWindow.erl6
-rw-r--r--lib/wx/src/gen/wxMDIParentFrame.erl28
-rw-r--r--lib/wx/src/gen/wxMask.erl4
-rw-r--r--lib/wx/src/gen/wxMaximizeEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMemoryDC.erl8
-rw-r--r--lib/wx/src/gen/wxMenu.erl70
-rw-r--r--lib/wx/src/gen/wxMenuBar.erl18
-rw-r--r--lib/wx/src/gen/wxMenuEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMenuItem.erl38
-rw-r--r--lib/wx/src/gen/wxMessageDialog.erl8
-rw-r--r--lib/wx/src/gen/wxMiniFrame.erl14
-rw-r--r--lib/wx/src/gen/wxMirrorDC.erl4
-rw-r--r--lib/wx/src/gen/wxMouseCaptureChangedEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMouseEvent.erl8
-rw-r--r--lib/wx/src/gen/wxMoveEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMultiChoiceDialog.erl8
-rw-r--r--lib/wx/src/gen/wxNavigationKeyEvent.erl10
-rw-r--r--lib/wx/src/gen/wxNotebook.erl36
-rw-r--r--lib/wx/src/gen/wxNotebookEvent.erl6
-rw-r--r--lib/wx/src/gen/wxNotifyEvent.erl6
-rw-r--r--lib/wx/src/gen/wxOverlay.erl6
-rw-r--r--lib/wx/src/gen/wxPageSetupDialog.erl6
-rw-r--r--lib/wx/src/gen/wxPageSetupDialogData.erl36
-rw-r--r--lib/wx/src/gen/wxPaintDC.erl4
-rw-r--r--lib/wx/src/gen/wxPaintEvent.erl2
-rw-r--r--lib/wx/src/gen/wxPalette.erl4
-rw-r--r--lib/wx/src/gen/wxPaletteChangedEvent.erl4
-rw-r--r--lib/wx/src/gen/wxPanel.erl16
-rw-r--r--lib/wx/src/gen/wxPasswordEntryDialog.erl10
-rw-r--r--lib/wx/src/gen/wxPen.erl20
-rw-r--r--lib/wx/src/gen/wxPickerBase.erl18
-rw-r--r--lib/wx/src/gen/wxPopupTransientWindow.erl12
-rw-r--r--lib/wx/src/gen/wxPopupWindow.erl8
-rw-r--r--lib/wx/src/gen/wxPostScriptDC.erl6
-rw-r--r--lib/wx/src/gen/wxPreviewControlBar.erl12
-rw-r--r--lib/wx/src/gen/wxPreviewFrame.erl18
-rw-r--r--lib/wx/src/gen/wxPrintData.erl22
-rw-r--r--lib/wx/src/gen/wxPrintDialog.erl4
-rw-r--r--lib/wx/src/gen/wxPrintDialogData.erl30
-rw-r--r--lib/wx/src/gen/wxPrintPreview.erl16
-rw-r--r--lib/wx/src/gen/wxPrinter.erl10
-rw-r--r--lib/wx/src/gen/wxPrintout.erl22
-rw-r--r--lib/wx/src/gen/wxProgressDialog.erl14
-rw-r--r--lib/wx/src/gen/wxQueryNewPaletteEvent.erl4
-rw-r--r--lib/wx/src/gen/wxRadioBox.erl32
-rw-r--r--lib/wx/src/gen/wxRadioButton.erl20
-rw-r--r--lib/wx/src/gen/wxRegion.erl8
-rw-r--r--lib/wx/src/gen/wxSashEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSashLayoutWindow.erl24
-rw-r--r--lib/wx/src/gen/wxSashWindow.erl20
-rw-r--r--lib/wx/src/gen/wxScreenDC.erl4
-rw-r--r--lib/wx/src/gen/wxScrollBar.erl26
-rw-r--r--lib/wx/src/gen/wxScrollEvent.erl2
-rw-r--r--lib/wx/src/gen/wxScrollWinEvent.erl2
-rw-r--r--lib/wx/src/gen/wxScrolledWindow.erl32
-rw-r--r--lib/wx/src/gen/wxSetCursorEvent.erl4
-rw-r--r--lib/wx/src/gen/wxShowEvent.erl4
-rw-r--r--lib/wx/src/gen/wxSingleChoiceDialog.erl8
-rw-r--r--lib/wx/src/gen/wxSizeEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSizer.erl122
-rw-r--r--lib/wx/src/gen/wxSizerFlags.erl8
-rw-r--r--lib/wx/src/gen/wxSizerItem.erl40
-rw-r--r--lib/wx/src/gen/wxSlider.erl28
-rw-r--r--lib/wx/src/gen/wxSpinButton.erl22
-rw-r--r--lib/wx/src/gen/wxSpinCtrl.erl44
-rw-r--r--lib/wx/src/gen/wxSpinEvent.erl4
-rw-r--r--lib/wx/src/gen/wxSplashScreen.erl8
-rw-r--r--lib/wx/src/gen/wxSplitterEvent.erl4
-rw-r--r--lib/wx/src/gen/wxSplitterWindow.erl42
-rw-r--r--lib/wx/src/gen/wxStaticBitmap.erl16
-rw-r--r--lib/wx/src/gen/wxStaticBox.erl14
-rw-r--r--lib/wx/src/gen/wxStaticBoxSizer.erl6
-rw-r--r--lib/wx/src/gen/wxStaticLine.erl18
-rw-r--r--lib/wx/src/gen/wxStaticText.erl18
-rw-r--r--lib/wx/src/gen/wxStatusBar.erl42
-rw-r--r--lib/wx/src/gen/wxStdDialogButtonSizer.erl14
-rw-r--r--lib/wx/src/gen/wxStyledTextCtrl.erl598
-rw-r--r--lib/wx/src/gen/wxStyledTextEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSysColourChangedEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSystemOptions.erl8
-rw-r--r--lib/wx/src/gen/wxSystemSettings.erl4
-rw-r--r--lib/wx/src/gen/wxTaskBarIcon.erl6
-rw-r--r--lib/wx/src/gen/wxTaskBarIconEvent.erl2
-rw-r--r--lib/wx/src/gen/wxTextAttr.erl34
-rw-r--r--lib/wx/src/gen/wxTextCtrl.erl68
-rw-r--r--lib/wx/src/gen/wxTextDataObject.erl8
-rw-r--r--lib/wx/src/gen/wxTextEntryDialog.erl12
-rw-r--r--lib/wx/src/gen/wxToggleButton.erl20
-rw-r--r--lib/wx/src/gen/wxToolBar.erl118
-rw-r--r--lib/wx/src/gen/wxToolTip.erl10
-rw-r--r--lib/wx/src/gen/wxToolbook.erl34
-rw-r--r--lib/wx/src/gen/wxTopLevelWindow.erl38
-rw-r--r--lib/wx/src/gen/wxTreeCtrl.erl132
-rw-r--r--lib/wx/src/gen/wxTreeEvent.erl4
-rw-r--r--lib/wx/src/gen/wxTreebook.erl40
-rw-r--r--lib/wx/src/gen/wxUpdateUIEvent.erl16
-rw-r--r--lib/wx/src/gen/wxWindow.erl290
-rw-r--r--lib/wx/src/gen/wxWindowCreateEvent.erl2
-rw-r--r--lib/wx/src/gen/wxWindowDC.erl4
-rw-r--r--lib/wx/src/gen/wxWindowDestroyEvent.erl2
-rw-r--r--lib/wx/src/gen/wxXmlResource.erl22
-rw-r--r--lib/wx/src/gen/wx_misc.erl20
-rw-r--r--lib/wx/src/gen/wxe_debug.hrl3834
-rw-r--r--lib/wx/src/gen/wxe_funcs.hrl3834
-rw-r--r--lib/wx/src/wx.app.src2
-rw-r--r--lib/wx/src/wx.appup.src2
-rw-r--r--lib/wx/src/wx.erl28
-rw-r--r--lib/wx/src/wx_object.erl50
-rw-r--r--lib/wx/src/wxe.hrl2
-rw-r--r--lib/wx/src/wxe_master.erl6
-rw-r--r--lib/wx/src/wxe_server.erl2
-rw-r--r--lib/wx/src/wxe_util.erl10
-rw-r--r--lib/wx/test/Makefile2
-rw-r--r--lib/wx/test/wx_app_SUITE.erl12
-rw-r--r--lib/wx/test/wx_basic_SUITE.erl23
-rw-r--r--lib/wx/test/wx_class_SUITE.erl73
-rw-r--r--lib/wx/test/wx_event_SUITE.erl4
-rw-r--r--lib/wx/test/wx_obj_test.erl13
-rw-r--r--lib/wx/test/wx_opengl_SUITE.erl4
-rw-r--r--lib/wx/test/wx_test_lib.erl2
-rw-r--r--lib/wx/test/wx_test_lib.hrl2
-rw-r--r--lib/wx/test/wx_xtra_SUITE.erl4
-rwxr-xr-xlib/wx/test/wxt2
-rw-r--r--lib/wx/test/wxt.erl14
-rw-r--r--lib/wx/vsn.mk2
-rw-r--r--lib/xmerl/doc/src/Makefile2
-rw-r--r--lib/xmerl/doc/src/book.xml2
-rw-r--r--lib/xmerl/doc/src/notes.xml17
-rw-r--r--lib/xmerl/doc/src/notes_history.xml2
-rw-r--r--lib/xmerl/doc/src/part.xml2
-rw-r--r--lib/xmerl/doc/src/part_notes.xml2
-rw-r--r--lib/xmerl/doc/src/ref_man.xml2
-rw-r--r--lib/xmerl/doc/src/xmerl_sax_parser.xml2
-rw-r--r--lib/xmerl/doc/src/xmerl_ug.xmlsrc2
-rw-r--r--lib/xmerl/include/xmerl.hrl2
-rw-r--r--lib/xmerl/src/Makefile2
-rw-r--r--lib/xmerl/src/xmerl.appup.src2
-rw-r--r--lib/xmerl/src/xmerl.erl2
-rw-r--r--lib/xmerl/src/xmerl_b64Bin.yrl2
-rw-r--r--lib/xmerl/src/xmerl_b64Bin_scan.erl2
-rw-r--r--lib/xmerl/src/xmerl_eventp.erl6
-rw-r--r--lib/xmerl/src/xmerl_html.erl2
-rw-r--r--lib/xmerl/src/xmerl_internal.hrl2
-rw-r--r--lib/xmerl/src/xmerl_lib.erl2
-rw-r--r--lib/xmerl/src/xmerl_otpsgml.erl2
-rw-r--r--lib/xmerl/src/xmerl_regexp.erl2
-rw-r--r--lib/xmerl/src/xmerl_sax_old_dom.erl2
-rw-r--r--lib/xmerl/src/xmerl_sax_old_dom.hrl2
-rw-r--r--lib/xmerl/src/xmerl_sax_parser.erl14
-rw-r--r--lib/xmerl/src/xmerl_sax_parser.hrl2
-rw-r--r--lib/xmerl/src/xmerl_sax_parser_base.erlsrc28
-rw-r--r--lib/xmerl/src/xmerl_sax_parser_latin1.erlsrc2
-rw-r--r--lib/xmerl/src/xmerl_sax_parser_list.erlsrc2
-rw-r--r--lib/xmerl/src/xmerl_sax_parser_utf16be.erlsrc2
-rw-r--r--lib/xmerl/src/xmerl_sax_parser_utf16le.erlsrc2
-rw-r--r--lib/xmerl/src/xmerl_sax_parser_utf8.erlsrc2
-rw-r--r--lib/xmerl/src/xmerl_sax_simple_dom.erl2
-rw-r--r--lib/xmerl/src/xmerl_scan.erl4
-rw-r--r--lib/xmerl/src/xmerl_sgml.erl2
-rw-r--r--lib/xmerl/src/xmerl_simple.erl2
-rw-r--r--lib/xmerl/src/xmerl_text.erl2
-rw-r--r--lib/xmerl/src/xmerl_ucs.erl2
-rw-r--r--lib/xmerl/src/xmerl_uri.erl2
-rw-r--r--lib/xmerl/src/xmerl_validate.erl2
-rw-r--r--lib/xmerl/src/xmerl_xlate.erl2
-rw-r--r--lib/xmerl/src/xmerl_xml.erl2
-rw-r--r--lib/xmerl/src/xmerl_xpath.erl2
-rw-r--r--lib/xmerl/src/xmerl_xpath_lib.erl2
-rw-r--r--lib/xmerl/src/xmerl_xpath_parse.yrl2
-rw-r--r--lib/xmerl/src/xmerl_xpath_pred.erl2
-rw-r--r--lib/xmerl/src/xmerl_xpath_scan.erl9
-rw-r--r--lib/xmerl/src/xmerl_xs.erl2
-rw-r--r--lib/xmerl/src/xmerl_xsd.erl149
-rw-r--r--lib/xmerl/src/xmerl_xsd_type.erl16
-rw-r--r--lib/xmerl/test/Makefile4
-rw-r--r--lib/xmerl/test/xmerl_SUITE.erl596
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl405
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl214
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl10
-rw-r--r--lib/xmerl/test/xmerl_app_test.erl31
-rw-r--r--lib/xmerl/test/xmerl_appup_test.erl30
-rw-r--r--lib/xmerl/test/xmerl_sax_SUITE.erl85
-rw-r--r--lib/xmerl/test/xmerl_sax_std_SUITE.erl16386
-rw-r--r--lib/xmerl/test/xmerl_std_SUITE.erl12771
-rw-r--r--lib/xmerl/test/xmerl_test_lib.erl6
-rw-r--r--lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl14492
-rw-r--r--lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl13256
-rw-r--r--lib/xmerl/test/xmerl_xsd_SUITE.erl1089
-rw-r--r--lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl428
-rw-r--r--lib/xmerl/test/xmerl_xsd_lib.erl247
-rw-r--r--lib/xmerl/vsn.mk2
4991 files changed, 178692 insertions, 173866 deletions
diff --git a/lib/Makefile b/lib/Makefile
index 34c2fe9a9e..bc5d4cdcc1 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -25,8 +25,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
ERTS_APPLICATIONS = stdlib sasl kernel compiler
# Then these have to be build
-ERLANG_APPLICATIONS = tools test_server common_test runtime_tools \
- inets parsetools
+ERLANG_APPLICATIONS = tools common_test runtime_tools inets parsetools
# These are only build if -a is given to otp_build or make is used directly
ALL_ERLANG_APPLICATIONS = xmerl edoc erl_docgen snmp otp_mibs erl_interface \
@@ -35,8 +34,8 @@ ALL_ERLANG_APPLICATIONS = xmerl edoc erl_docgen snmp otp_mibs erl_interface \
ic mnesia crypto orber os_mon syntax_tools \
public_key ssl observer odbc diameter \
cosTransactions cosEvent cosTime cosNotification \
- cosProperty cosFileTransfer cosEventDomain et megaco webtool \
- eunit ssh typer percept eldap dialyzer hipe ose
+ cosProperty cosFileTransfer cosEventDomain et megaco \
+ eunit ssh typer percept eldap dialyzer hipe
ifdef BUILD_ALL
ERLANG_APPLICATIONS += $(ALL_ERLANG_APPLICATIONS)
diff --git a/lib/asn1/Makefile b/lib/asn1/Makefile
index 1db7532024..26e7e37924 100644
--- a/lib/asn1/Makefile
+++ b/lib/asn1/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/asn1/c_src/Makefile b/lib/asn1/c_src/Makefile
index 2b72e1a214..1f714df357 100644
--- a/lib/asn1/c_src/Makefile
+++ b/lib/asn1/c_src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2012. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -97,12 +97,7 @@ endif
_create_dirs := $(shell mkdir -p $(OBJDIR) $(LIBDIR))
-ifneq ($(findstring ose,$(TARGET)),ose)
opt: $(NIF_SHARED_OBJ_FILE)
-else
-# Do not build dynamic files on OSE
-opt:
-endif
debug: opt
@@ -140,9 +135,7 @@ include $(ERL_TOP)/make/otp_release_targets.mk
release_spec: opt
$(INSTALL_DIR) "$(RELSYSDIR)/priv/lib"
-ifneq ($(findstring ose,$(TARGET)),ose)
$(INSTALL_PROGRAM) $(NIF_SHARED_OBJ_FILE) "$(RELSYSDIR)/priv/lib"
-endif
$(INSTALL_DIR) "$(RELSYSDIR)/c_src"
$(INSTALL_DATA) *.c "$(RELSYSDIR)/c_src"
diff --git a/lib/asn1/c_src/asn1_erl_nif.c b/lib/asn1/c_src/asn1_erl_nif.c
index 828b55eec6..4577689fc3 100644
--- a/lib/asn1/c_src/asn1_erl_nif.c
+++ b/lib/asn1/c_src/asn1_erl_nif.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/asn1/doc/src/Makefile b/lib/asn1/doc/src/Makefile
index 463e9231dc..559836116f 100644
--- a/lib/asn1/doc/src/Makefile
+++ b/lib/asn1/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/asn1/doc/src/asn1_getting_started.xml b/lib/asn1/doc/src/asn1_getting_started.xml
index ca7dc3a3cc..3c8ec24723 100644
--- a/lib/asn1/doc/src/asn1_getting_started.xml
+++ b/lib/asn1/doc/src/asn1_getting_started.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/src/asn1_introduction.xml b/lib/asn1/doc/src/asn1_introduction.xml
index 3c69eb82ab..d8b81aa467 100644
--- a/lib/asn1/doc/src/asn1_introduction.xml
+++ b/lib/asn1/doc/src/asn1_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/src/asn1_overview.xml b/lib/asn1/doc/src/asn1_overview.xml
index 3929db7a54..b04401b2dc 100644
--- a/lib/asn1/doc/src/asn1_overview.xml
+++ b/lib/asn1/doc/src/asn1_overview.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/src/asn1_spec.xmlsrc b/lib/asn1/doc/src/asn1_spec.xmlsrc
index 5409ba0aa1..6367376f50 100644
--- a/lib/asn1/doc/src/asn1_spec.xmlsrc
+++ b/lib/asn1/doc/src/asn1_spec.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/src/asn1ct.xml b/lib/asn1/doc/src/asn1ct.xml
index e056a89432..e5a7b1bcc4 100644
--- a/lib/asn1/doc/src/asn1ct.xml
+++ b/lib/asn1/doc/src/asn1ct.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/src/asn1rt.xml b/lib/asn1/doc/src/asn1rt.xml
index 65556f3f87..3f53ca0f56 100644
--- a/lib/asn1/doc/src/asn1rt.xml
+++ b/lib/asn1/doc/src/asn1rt.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/src/book.xml b/lib/asn1/doc/src/book.xml
index 0947938429..2073405f54 100644
--- a/lib/asn1/doc/src/book.xml
+++ b/lib/asn1/doc/src/book.xml
@@ -5,7 +5,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/src/notes.xml b/lib/asn1/doc/src/notes.xml
index 78d856b0be..68d335f451 100644
--- a/lib/asn1/doc/src/notes.xml
+++ b/lib/asn1/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,21 @@
<p>This document describes the changes made to the asn1 application.</p>
+<section><title>Asn1 4.0.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Asn1 4.0.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/asn1/doc/src/part.xml b/lib/asn1/doc/src/part.xml
index 9423dc5b9e..5a1b8e1a40 100644
--- a/lib/asn1/doc/src/part.xml
+++ b/lib/asn1/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/src/ref_man.xml b/lib/asn1/doc/src/ref_man.xml
index 01f42f54db..d70e2bc05f 100644
--- a/lib/asn1/doc/src/ref_man.xml
+++ b/lib/asn1/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/asn1/doc/users_guide/Makefile b/lib/asn1/doc/users_guide/Makefile
index ae3a55b945..38196f5e1c 100644
--- a/lib/asn1/doc/users_guide/Makefile
+++ b/lib/asn1/doc/users_guide/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/Makefile b/lib/asn1/src/Makefile
index 5b34017e9b..38cf2d496a 100644
--- a/lib/asn1/src/Makefile
+++ b/lib/asn1/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1.appup.src b/lib/asn1/src/asn1.appup.src
index 66907055b9..9487d6207d 100644
--- a/lib/asn1/src/asn1.appup.src
+++ b/lib/asn1/src/asn1.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1_db.erl b/lib/asn1/src/asn1_db.erl
index 32052885d3..557eca0ffd 100644
--- a/lib/asn1/src/asn1_db.erl
+++ b/lib/asn1/src/asn1_db.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1_records.hrl b/lib/asn1/src/asn1_records.hrl
index 1ffc6c2980..af10c1771c 100644
--- a/lib/asn1/src/asn1_records.hrl
+++ b/lib/asn1/src/asn1_records.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct.erl b/lib/asn1/src/asn1ct.erl
index d0ab947f32..dd269f095d 100644
--- a/lib/asn1/src/asn1ct.erl
+++ b/lib/asn1/src/asn1ct.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
index b31f616677..325bea5879 100644
--- a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -500,9 +500,7 @@ gen_decode_sof(Erules,TypeName,_InnerTypeName,D) when is_record(D,type) ->
Atom when is_atom(Atom) -> Atom;
_ -> TypeNameSuffix
end,
- ObjFun = false,
- gen_dec_line(Erules,TypeName,ContName,[],Cont,mandatory,ObjFun),
- %% gen_dec_line_sof(Erules,Typename,ContName,Cont,ObjFun),
+ gen_dec_line(Erules,TypeName,ContName,[],Cont,mandatory),
emit([" || ",{curr,v}," <- ",{curr,tlv},"].",nl,nl,nl]).
@@ -869,7 +867,7 @@ gen_dec_choice_cases(Erules,TopType, [H|T]) ->
(?ASN1CT_GEN_BER:decode_class(T1class) bsl 10) +
T1number,",_} -> ",nl]),
emit([indent(8),"{",{asis,Cname},", "]),
- gen_dec_line(Erules,TopType,Cname,[],Type,Prop,false),
+ gen_dec_line(Erules,TopType,Cname,[],Type,Prop),
emit(["};",nl,nl]),
Fun(Tail,Fun);
([],_) ->
@@ -896,7 +894,7 @@ gen_dec_choice_cases(Erules,TopType, [H|T]) ->
(?ASN1CT_GEN_BER:decode_class(FirstT#tag.class) bsl 10) +
FirstT#tag.number,", ",{curr,v},"} -> ",nl]),
emit([indent(8),"{",{asis,Cname},", "]),
- gen_dec_line(Erules,TopType,Cname,[],Type#type{tag=RestT},Prop,false),
+ gen_dec_line(Erules,TopType,Cname,[],Type#type{tag=RestT},Prop),
emit(["};",nl,nl])
end,
gen_dec_choice_cases(Erules,TopType, T).
@@ -1060,8 +1058,14 @@ gen_optormand_case({'DEFAULT',DefaultValue}, Erules, _TopType,
end,
emit([indent(9),"_ ->",nl,indent(12)])
end.
-
+%% Use for SEQUENCE OF and CHOICE.
+gen_dec_line(Erules,TopType,Cname,CTags,Type,OptOrMand) ->
+ %% The matching on the next line is an assertion.
+ {[],[]} = gen_dec_line(Erules,TopType,Cname,CTags,Type,OptOrMand,false),
+ ok.
+
+%% Use for SEQUENCE.
gen_dec_line(Erules,TopType,Cname,CTags,Type,OptOrMand,DecObjInf) ->
BytesVar = asn1ct_gen:mk_var(asn1ct_name:curr(v)),
Tag =
diff --git a/lib/asn1/src/asn1ct_constructed_per.erl b/lib/asn1/src/asn1ct_constructed_per.erl
index 42f9bb836e..a34b25182c 100644
--- a/lib/asn1/src/asn1ct_constructed_per.erl
+++ b/lib/asn1/src/asn1ct_constructed_per.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_func.erl b/lib/asn1/src/asn1ct_func.erl
index ad1494f7af..0cd72acf9d 100644
--- a/lib/asn1/src/asn1ct_func.erl
+++ b/lib/asn1/src/asn1ct_func.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl
index 6d5062a118..bfaffa13bf 100644
--- a/lib/asn1/src/asn1ct_gen.erl
+++ b/lib/asn1/src/asn1ct_gen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
index 311307cf78..b884d14b0d 100644
--- a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_gen_check.erl b/lib/asn1/src/asn1ct_gen_check.erl
index 385c67d628..abe77dd0cb 100644
--- a/lib/asn1/src/asn1ct_gen_check.erl
+++ b/lib/asn1/src/asn1ct_gen_check.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_gen_per.erl b/lib/asn1/src/asn1ct_gen_per.erl
index ff5b19b542..aa7223904e 100644
--- a/lib/asn1/src/asn1ct_gen_per.erl
+++ b/lib/asn1/src/asn1ct_gen_per.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl
index e09256cde9..8b96242c56 100644
--- a/lib/asn1/src/asn1ct_imm.erl
+++ b/lib/asn1/src/asn1ct_imm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_name.erl b/lib/asn1/src/asn1ct_name.erl
index 577c15c7c0..72d541cbbc 100644
--- a/lib/asn1/src/asn1ct_name.erl
+++ b/lib/asn1/src/asn1ct_name.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_parser2.erl b/lib/asn1/src/asn1ct_parser2.erl
index 120ca67226..2de9b0e2f0 100644
--- a/lib/asn1/src/asn1ct_parser2.erl
+++ b/lib/asn1/src/asn1ct_parser2.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_pretty_format.erl b/lib/asn1/src/asn1ct_pretty_format.erl
index 7e28543a05..f4669f7eb0 100644
--- a/lib/asn1/src/asn1ct_pretty_format.erl
+++ b/lib/asn1/src/asn1ct_pretty_format.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_table.erl b/lib/asn1/src/asn1ct_table.erl
index b1eaf2b332..1a3a81d329 100644
--- a/lib/asn1/src/asn1ct_table.erl
+++ b/lib/asn1/src/asn1ct_table.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_tok.erl b/lib/asn1/src/asn1ct_tok.erl
index 5aeb8c171e..8235b689f8 100644
--- a/lib/asn1/src/asn1ct_tok.erl
+++ b/lib/asn1/src/asn1ct_tok.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1ct_value.erl b/lib/asn1/src/asn1ct_value.erl
index 7f20d57b1e..57cd3f8af6 100644
--- a/lib/asn1/src/asn1ct_value.erl
+++ b/lib/asn1/src/asn1ct_value.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -353,10 +353,7 @@ random_unnamed_bit_string(M, C) ->
%% end.
random(Upper) ->
- _ = random:seed(erlang:phash2([erlang:node()]),
- erlang:monotonic_time(),
- erlang:unique_integer()),
- random:uniform(Upper).
+ rand:uniform(Upper).
size_random(C) ->
case get_constraint(C,'SizeConstraint') of
diff --git a/lib/asn1/src/asn1rt.erl b/lib/asn1/src/asn1rt.erl
index 2c38c27dd8..3e09ce2252 100644
--- a/lib/asn1/src/asn1rt.erl
+++ b/lib/asn1/src/asn1rt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1rt_nif.erl b/lib/asn1/src/asn1rt_nif.erl
index 6ee182ed23..ff464885f6 100644
--- a/lib/asn1/src/asn1rt_nif.erl
+++ b/lib/asn1/src/asn1rt_nif.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1rtt_ber.erl b/lib/asn1/src/asn1rtt_ber.erl
index e50b14941c..fdb9b9061f 100644
--- a/lib/asn1/src/asn1rtt_ber.erl
+++ b/lib/asn1/src/asn1rtt_ber.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1rtt_check.erl b/lib/asn1/src/asn1rtt_check.erl
index 4839fa98dc..e81842fd20 100644
--- a/lib/asn1/src/asn1rtt_check.erl
+++ b/lib/asn1/src/asn1rtt_check.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1rtt_ext.erl b/lib/asn1/src/asn1rtt_ext.erl
index fa55ae4d85..3bf01823db 100644
--- a/lib/asn1/src/asn1rtt_ext.erl
+++ b/lib/asn1/src/asn1rtt_ext.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1rtt_per.erl b/lib/asn1/src/asn1rtt_per.erl
index a3803659b6..753a38aa6e 100644
--- a/lib/asn1/src/asn1rtt_per.erl
+++ b/lib/asn1/src/asn1rtt_per.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1rtt_per_common.erl b/lib/asn1/src/asn1rtt_per_common.erl
index e85dc94f4c..3896cb7fa5 100644
--- a/lib/asn1/src/asn1rtt_per_common.erl
+++ b/lib/asn1/src/asn1rtt_per_common.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1rtt_real_common.erl b/lib/asn1/src/asn1rtt_real_common.erl
index 7b155e5c91..3a79209015 100644
--- a/lib/asn1/src/asn1rtt_real_common.erl
+++ b/lib/asn1/src/asn1rtt_real_common.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/asn1rtt_uper.erl b/lib/asn1/src/asn1rtt_uper.erl
index 7a52324252..0ab8fab141 100644
--- a/lib/asn1/src/asn1rtt_uper.erl
+++ b/lib/asn1/src/asn1rtt_uper.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/src/prepare_templates.erl b/lib/asn1/src/prepare_templates.erl
index 3e24366cdf..3f996a563f 100644
--- a/lib/asn1/src/prepare_templates.erl
+++ b/lib/asn1/src/prepare_templates.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/External.hrl b/lib/asn1/test/External.hrl
index dd4fa6de3a..6619e5c42f 100644
--- a/lib/asn1/test/External.hrl
+++ b/lib/asn1/test/External.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/Makefile b/lib/asn1/test/Makefile
index 9a34fa6271..0716d79291 100644
--- a/lib/asn1/test/Makefile
+++ b/lib/asn1/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/asn1_SUITE.erl b/lib/asn1/test/asn1_SUITE.erl
index 6dea1787a8..b6430134ab 100644
--- a/lib/asn1/test/asn1_SUITE.erl
+++ b/lib/asn1/test/asn1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,13 +28,15 @@
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%------------------------------------------------------------------------------
%% Suite definition
%%------------------------------------------------------------------------------
-suite() -> [{ct_hooks, [ts_install_cth]}].
+suite() ->
+ [{ct_hooks, [ts_install_cth]},
+ {timetrap,{minutes,60}}].
all() ->
[{group, compile},
@@ -194,18 +196,15 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(Func, Config) ->
- CaseDir = filename:join(?config(priv_dir, Config), Func),
+ CaseDir = filename:join(proplists:get_value(priv_dir, Config), Func),
ok = filelib:ensure_dir(filename:join([CaseDir, dummy_file])),
true = code:add_patha(CaseDir),
-
- Dog = case Func of
- testRfcs -> ct:timetrap({minutes, 90});
- _ -> ct:timetrap({minutes, 60})
- end,
- [{case_dir, CaseDir}, {watchdog, Dog}|Config].
+ [{case_dir, CaseDir}|Config].
end_per_testcase(_Func, Config) ->
- code:del_path(?config(case_dir, Config)).
+ CaseDir = proplists:get_value(case_dir, Config),
+ asn1_test_lib:rm_dirs([CaseDir]),
+ code:del_path(CaseDir).
%%------------------------------------------------------------------------------
%% Test runners
@@ -243,7 +242,7 @@ opts(Rule) when is_atom(Rule) -> [];
opts({_Rule, Opts}) -> Opts.
run_case(Config, Fun, Rule, Opts) ->
- CaseDir = ?config(case_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
Dir = filename:join([CaseDir, join(Rule, Opts)]),
ok = filelib:ensure_dir(filename:join([Dir, dummy_file])),
replace_path(CaseDir, Dir),
@@ -465,7 +464,7 @@ testSeqExtension(Config, Rule, Opts) ->
"SeqExtension2"],
Config,
[Rule|Opts]),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
testSeqExtension:main(Rule, DataDir, [Rule|Opts]).
testSeqOptional(Config) -> test(Config, fun testSeqOptional/3).
@@ -585,8 +584,8 @@ constraint_equivalence(Config, Rule, Opts) ->
asn1_test_lib:compile(M, Config, [Rule|Opts]).
constraint_equivalence_abs(Config) ->
- DataDir = ?config(data_dir, Config),
- CaseDir = ?config(case_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
Asn1Spec = "ConstraintEquivalence",
Asn1Src = filename:join(DataDir, Asn1Spec),
ok = asn1ct:compile(Asn1Src, [abs,{outdir,CaseDir}]),
@@ -637,7 +636,7 @@ module_test(M0, Config, Rule, Opts) ->
%% value for 'Filter' is not guaranteed to terminate.
ok;
M ->
- TestOpts = [{i, ?config(case_dir, Config)}],
+ TestOpts = [{i, proplists:get_value(case_dir, Config)}],
case asn1ct:test(M, TestOpts) of
ok ->
ok;
@@ -768,7 +767,7 @@ testInfObjectClass(Config, Rule, Opts) ->
testUniqueObjectSets(Config) -> test(Config, fun testUniqueObjectSets/3).
testUniqueObjectSets(Config, Rule, Opts) ->
- CaseDir = ?config(case_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
testUniqueObjectSets:main(CaseDir, Rule, Opts).
testInfObjExtract(Config) -> test(Config, fun testInfObjExtract/3).
@@ -993,6 +992,9 @@ testS1AP(Config, Rule, Opts) ->
ok
end.
+testRfcs() ->
+ [{timetrap,{minutes,90}}].
+
testRfcs(Config) -> test(Config, fun testRfcs/3, [{ber,[der]}]).
testRfcs(Config, Rule, Opts) ->
case erlang:system_info(system_architecture) of
@@ -1136,7 +1138,7 @@ test_modules() ->
"CCSNARG3"].
test_OTP_9688(Config) ->
- PrivDir = ?config(case_dir, Config),
+ PrivDir = proplists:get_value(case_dir, Config),
Data = "
OTP-9688 DEFINITIONS ::= BEGIN
@@ -1172,12 +1174,10 @@ testTimer_uper(Config) ->
testTimer:go().
%% Test of multiple-line comment, OTP-8043
-testComment(suite) -> [];
testComment(Config) ->
asn1_test_lib:compile("Comment", Config, []),
asn1_test_lib:roundtrip('Comment', 'Seq', {'Seq',12,true}).
-testName2Number(suite) -> [];
testName2Number(Config) ->
N2NOptions = [{n2n,Type} || Type <- ['CauseMisc', 'CauseProtocol',
'CauseRadioNetwork',
diff --git a/lib/asn1/test/asn1_SUITE_data/Extension-Addition-Group.asn b/lib/asn1/test/asn1_SUITE_data/Extension-Addition-Group.asn
index c0315c1489..71bb915662 100644
--- a/lib/asn1/test/asn1_SUITE_data/Extension-Addition-Group.asn
+++ b/lib/asn1/test/asn1_SUITE_data/Extension-Addition-Group.asn
@@ -1,7 +1,7 @@
--
-- %CopyrightBegin%
--
--- Copyright Ericsson AB 2001-2013. All Rights Reserved.
+-- Copyright Ericsson AB 2001-2016. All Rights Reserved.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl b/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
index 7f7c013f30..2b2e539ec0 100644
--- a/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
+++ b/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/asn1_SUITE_data/a_SeqIn.erl b/lib/asn1/test/asn1_SUITE_data/a_SeqIn.erl
index e8db7231f1..948f382e1a 100644
--- a/lib/asn1/test/asn1_SUITE_data/a_SeqIn.erl
+++ b/lib/asn1/test/asn1_SUITE_data/a_SeqIn.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/asn1_SUITE_data/b_SeqIn.erl b/lib/asn1/test/asn1_SUITE_data/b_SeqIn.erl
index ba73a72132..1c3352df44 100644
--- a/lib/asn1/test/asn1_SUITE_data/b_SeqIn.erl
+++ b/lib/asn1/test/asn1_SUITE_data/b_SeqIn.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl b/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
index 3600ccac26..6cf8ecf451 100644
--- a/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
+++ b/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/asn1_SUITE_data/test_records.erl b/lib/asn1/test/asn1_SUITE_data/test_records.erl
index adfc98600c..9fd07c1449 100644
--- a/lib/asn1/test/asn1_SUITE_data/test_records.erl
+++ b/lib/asn1/test/asn1_SUITE_data/test_records.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,9 +23,6 @@
-export(['check_record_names_OTP-5812'/1]).
-%-include("test_server.hrl").
-%-include_lib("test_server/include/test_server.hrl").
-
-define(line,put(test_server_loc,{?MODULE,?LINE}),).
-include("NBAP-PDU-Discriptions.hrl").
@@ -48,19 +45,19 @@ check_record_names({initiatingMessage,
transactionID = _TransactionID,
value = Value}}) ->
- ?line ok = check_record_ProcedureID(ProcedureID),
- ?line ok = check_record_Value(Value).
+ ok = check_record_ProcedureID(ProcedureID),
+ ok = check_record_Value(Value).
check_record_ProcedureID(#'ProcedureID'{}) ->
ok;
check_record_ProcedureID(_) -> false.
check_record_Value(#'ResourceStatusIndication'{protocolIEs = ProtocolIEs}) ->
- ?line ok = check_record_ProtocolIEs(ProtocolIEs);
+ ok = check_record_ProtocolIEs(ProtocolIEs);
check_record_Value(_) -> false.
check_record_ProtocolIEs([#'ProtocolIE-Field'{value =IndicationType}|_]) ->
- ?line ok = check_record_NFResourceStatusInd(IndicationType);
+ ok = check_record_NFResourceStatusInd(IndicationType);
check_record_ProtocolIEs(_) -> false.
check_record_NFResourceStatusInd({'no-Failure',#'No-Failure-ResourceStatusInd'{'local-Cell-InformationList'=[LCIPF]}}) ->
@@ -68,13 +65,13 @@ check_record_NFResourceStatusInd({'no-Failure',#'No-Failure-ResourceStatusInd'{'
check_record_NFResourceStatusInd(_) -> false.
'check_record_NFResourceStatusInd_ProtocolIE-Field'(#'ProtocolIE-Field'{value=LCI}) ->
- ?line ok = check_record_LCInfoResourceStatusInd(LCI);
+ ok = check_record_LCInfoResourceStatusInd(LCI);
'check_record_NFResourceStatusInd_ProtocolIE-Field'(_) -> false.
check_record_LCInfoResourceStatusInd(#'Local-Cell-InformationItem-ResourceStatusInd'{commonChannelsCapacityConsumptionLaw=[CCCCL],dedicatedChannelsCapacityConsumptionLaw=[DCCCL],'iE-Extensions' = [LCIRE]}) ->
- ?line ok = check_record_CCCCL(CCCCL),
- ?line ok = check_record_DCCCL(DCCCL),
- ?line ok = check_record_LCIRE(LCIRE).
+ ok = check_record_CCCCL(CCCCL),
+ ok = check_record_DCCCL(DCCCL),
+ ok = check_record_LCIRE(LCIRE).
check_record_CCCCL(#'CommonChannelsCapacityConsumptionLaw_SEQOF'{}) ->
ok;
diff --git a/lib/asn1/test/asn1_SUITE_data/testobj.erl b/lib/asn1/test/asn1_SUITE_data/testobj.erl
index efb1cf4713..a0e00f8314 100644
--- a/lib/asn1/test/asn1_SUITE_data/testobj.erl
+++ b/lib/asn1/test/asn1_SUITE_data/testobj.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/asn1_app_test.erl b/lib/asn1/test/asn1_app_test.erl
index 71aad5c62f..028322f555 100644
--- a/lib/asn1/test/asn1_app_test.erl
+++ b/lib/asn1/test/asn1_app_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,8 +42,6 @@ end_per_group(_GroupName, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
init_per_suite(Config) when is_list(Config) ->
case is_app(asn1) of
{ok, AppFile} ->
@@ -64,18 +62,13 @@ is_app(App) ->
end.
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
end_per_suite(Config) when is_list(Config) ->
Config.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-fields(suite) ->
- [];
-fields(doc) ->
- [];
+%% .
fields(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Fields = [vsn, description, modules, registered, applications],
@@ -103,10 +96,7 @@ check_field(Name, AppFile, Missing) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-modules(suite) ->
- [];
-modules(doc) ->
- [];
+%% .
modules(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Mods = key1search(modules, AppFile),
@@ -176,10 +166,7 @@ extra_modules(Mods, [Mod|Ebins], Extra) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-exportall(suite) ->
- [];
-exportall(doc) ->
- [];
+%% .
exportall(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Mods = key1search(modules, AppFile),
@@ -209,10 +196,7 @@ check_export_all([Mod|Mods]) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-app_depend(suite) ->
- [];
-app_depend(doc) ->
- [];
+%% .
app_depend(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Apps = key1search(applications, AppFile),
diff --git a/lib/asn1/test/asn1_appup_test.erl b/lib/asn1/test/asn1_appup_test.erl
index 7df6190f92..54540e53cc 100644
--- a/lib/asn1/test/asn1_appup_test.erl
+++ b/lib/asn1/test/asn1_appup_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,14 +42,10 @@ end_per_group(_GroupName, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
init_per_suite(Config) when is_list(Config) ->
Config.
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
end_per_suite(Config) when is_list(Config) ->
Config.
diff --git a/lib/asn1/test/asn1_test_lib.erl b/lib/asn1/test/asn1_test_lib.erl
index ae2e5641ec..1b4c3b3c77 100644
--- a/lib/asn1/test/asn1_test_lib.erl
+++ b/lib/asn1/test/asn1_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,12 +21,13 @@
-module(asn1_test_lib).
-export([compile/3,compile_all/3,compile_erlang/3,
+ rm_dirs/1,
hex_to_bin/1,
match_value/2,
parallel/0,
roundtrip/3,roundtrip/4,roundtrip_enc/3,roundtrip_enc/4]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
run_dialyzer() ->
false.
@@ -34,8 +35,8 @@ run_dialyzer() ->
compile(File, Config, Options) -> compile_all([File], Config, Options).
compile_all(Files, Config, Options) ->
- DataDir = ?config(data_dir, Config),
- CaseDir = ?config(case_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
[compile_file(filename:join(DataDir, F), [{outdir, CaseDir},
debug_info|Options])
|| F <- Files],
@@ -99,12 +100,24 @@ compile_file(File, Options) ->
end.
compile_erlang(Mod, Config, Options) ->
- DataDir = ?config(data_dir, Config),
- CaseDir = ?config(case_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
M = list_to_atom(Mod),
{ok, M} = compile:file(filename:join(DataDir, Mod),
[report,{i,CaseDir},{outdir,CaseDir}|Options]).
+rm_dirs([Dir|Dirs]) ->
+ {ok,L0} = file:list_dir(Dir),
+ L = [filename:join(Dir, F) || F <- L0],
+ IsDir = fun(F) -> filelib:is_dir(F) end,
+ {Subdirs,Files} = lists:partition(IsDir, L),
+ _ = [ok = file:delete(F) || F <- Files],
+ rm_dirs(Subdirs),
+ ok = file:del_dir(Dir),
+ rm_dirs(Dirs);
+rm_dirs([]) ->
+ ok.
+
hex_to_bin(S) ->
<< <<(hex2num(C)):4>> || C <- S, C =/= $\s >>.
diff --git a/lib/asn1/test/ber_decode_error.erl b/lib/asn1/test/ber_decode_error.erl
index 8268698b8d..c0840e02d7 100644
--- a/lib/asn1/test/ber_decode_error.erl
+++ b/lib/asn1/test/ber_decode_error.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/error_SUITE.erl b/lib/asn1/test/error_SUITE.erl
index a3413d1b3d..6ce77d93fb 100644
--- a/lib/asn1/test/error_SUITE.erl
+++ b/lib/asn1/test/error_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
object_sets/1,parameterization/1,
syntax/1,table_constraints/1,tags/1,values/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks, [ts_install_cth]}].
@@ -929,8 +929,8 @@ values(Config) ->
run({Mod,Spec}, Config) ->
Base = atom_to_list(Mod) ++ ".asn1",
- File = filename:join(?config(priv_dir, Config), Base),
- Include0 = filename:dirname(?config(data_dir, Config)),
+ File = filename:join(proplists:get_value(priv_dir, Config), Base),
+ Include0 = filename:dirname(proplists:get_value(data_dir, Config)),
Include = filename:join(filename:dirname(Include0), "asn1_SUITE_data"),
ok = file:write_file(File, Spec),
asn1ct:compile(File, [{i, Include}]).
diff --git a/lib/asn1/test/h323test.erl b/lib/asn1/test/h323test.erl
index 39097a9330..935af0ba09 100644
--- a/lib/asn1/test/h323test.erl
+++ b/lib/asn1/test/h323test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(h323test).
-export([run/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
run(per) -> run();
run(_Rules) -> ok.
diff --git a/lib/asn1/test/syntax_SUITE.erl b/lib/asn1/test/syntax_SUITE.erl
index 2c23416433..442ec59c70 100644
--- a/lib/asn1/test/syntax_SUITE.erl
+++ b/lib/asn1/test/syntax_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@
types/1,
values/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks, [ts_install_cth]}].
@@ -305,7 +305,7 @@ run(List, File, Config) ->
run(List, File0, Config, Module) ->
Base = File0 ++ ".asn1",
- File = filename:join(?config(priv_dir, Config), Base),
+ File = filename:join(proplists:get_value(priv_dir, Config), Base),
case run_1(List, Base, File, Module, 0) of
0 -> ok;
Errors -> ?t:fail(Errors)
diff --git a/lib/asn1/test/testChoExtension.erl b/lib/asn1/test/testChoExtension.erl
index 33515403d1..4c632aab81 100644
--- a/lib/asn1/test/testChoExtension.erl
+++ b/lib/asn1/test/testChoExtension.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([extension/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
extension(_Rules) ->
diff --git a/lib/asn1/test/testChoExternal.erl b/lib/asn1/test/testChoExternal.erl
index 980b837475..22f4ad859a 100644
--- a/lib/asn1/test/testChoExternal.erl
+++ b/lib/asn1/test/testChoExternal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testChoExternal).
-export([external/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
external(_Rules) ->
diff --git a/lib/asn1/test/testChoOptional.erl b/lib/asn1/test/testChoOptional.erl
index d573e76a89..1f318315e9 100644
--- a/lib/asn1/test/testChoOptional.erl
+++ b/lib/asn1/test/testChoOptional.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testChoPrim.erl b/lib/asn1/test/testChoPrim.erl
index abf3fcdb81..573c482f2b 100644
--- a/lib/asn1/test/testChoPrim.erl
+++ b/lib/asn1/test/testChoPrim.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-export([bool/1]).
-export([int/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
bool(Rules) ->
roundtrip('ChoCon', {bool0,true}),
diff --git a/lib/asn1/test/testChoRecursive.erl b/lib/asn1/test/testChoRecursive.erl
index a307d448ed..1147d08442 100644
--- a/lib/asn1/test/testChoRecursive.erl
+++ b/lib/asn1/test/testChoRecursive.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-export([recursive/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('ChoRec_something',{a, b, c}).
-record('ChoRec2_something',{a, b, c}).
diff --git a/lib/asn1/test/testChoTypeRefCho.erl b/lib/asn1/test/testChoTypeRefCho.erl
index 378a43fa59..e0306425b9 100644
--- a/lib/asn1/test/testChoTypeRefCho.erl
+++ b/lib/asn1/test/testChoTypeRefCho.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([choice/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
choice(_Rules) ->
roundtrip('ChoTRcho', {choCho,{choInt,88}}),
diff --git a/lib/asn1/test/testChoTypeRefPrim.erl b/lib/asn1/test/testChoTypeRefPrim.erl
index 3541277674..a7b77477a5 100644
--- a/lib/asn1/test/testChoTypeRefPrim.erl
+++ b/lib/asn1/test/testChoTypeRefPrim.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([prim/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
prim(_Rules) ->
roundtrip('ChoTR', {bool,true}),
diff --git a/lib/asn1/test/testChoTypeRefSeq.erl b/lib/asn1/test/testChoTypeRefSeq.erl
index c582d6f0fc..f00b185e0c 100644
--- a/lib/asn1/test/testChoTypeRefSeq.erl
+++ b/lib/asn1/test/testChoTypeRefSeq.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([seq/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('ChoSeq', {seqInt, seqOs}).
-record('ChoSeqImp', {seqInt, seqOs}).
diff --git a/lib/asn1/test/testChoTypeRefSet.erl b/lib/asn1/test/testChoTypeRefSet.erl
index 2d4f6cce4b..87de6057d9 100644
--- a/lib/asn1/test/testChoTypeRefSet.erl
+++ b/lib/asn1/test/testChoTypeRefSet.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([set/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('ChoSet', {setInt, setOs}).
-record('ChoSetImp', {setInt, setOs}).
diff --git a/lib/asn1/test/testChoiceIndefinite.erl b/lib/asn1/test/testChoiceIndefinite.erl
index d796871620..765e772648 100644
--- a/lib/asn1/test/testChoiceIndefinite.erl
+++ b/lib/asn1/test/testChoiceIndefinite.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
main(per) -> ok;
main(ber) ->
diff --git a/lib/asn1/test/testCompactBitString.erl b/lib/asn1/test/testCompactBitString.erl
index 6265e20ab2..319ecc1a59 100644
--- a/lib/asn1/test/testCompactBitString.erl
+++ b/lib/asn1/test/testCompactBitString.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testConstraints.erl b/lib/asn1/test/testConstraints.erl
index 60b7994929..6a1fbe4f73 100644
--- a/lib/asn1/test/testConstraints.erl
+++ b/lib/asn1/test/testConstraints.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-export([int_constraints/1,refed_NNL_name/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
int_constraints(Rules) ->
diff --git a/lib/asn1/test/testContextSwitchingTypes.erl b/lib/asn1/test/testContextSwitchingTypes.erl
index f1af6cf0e5..10012908a9 100644
--- a/lib/asn1/test/testContextSwitchingTypes.erl
+++ b/lib/asn1/test/testContextSwitchingTypes.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([test/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
test(Config) ->
ValT_1 = 'ContextSwitchingTypes':'val1-T'(),
@@ -38,7 +38,7 @@ test(Config) ->
check_EXTERNAL(enc_dec('T', ValT_4)),
{ok,ValT2} = asn1ct:value('ContextSwitchingTypes', 'T',
- [{i,?config(case_dir, Config)}]),
+ [{i,proplists:get_value(case_dir, Config)}]),
io:format("ValT2 ~p~n",[ValT2]),
check_EXTERNAL(enc_dec('T', ValT2)),
diff --git a/lib/asn1/test/testDER.erl b/lib/asn1/test/testDER.erl
index 195d8fe5a4..c8f28be5f6 100644
--- a/lib/asn1/test/testDER.erl
+++ b/lib/asn1/test/testDER.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([test/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
test() ->
Val = {'Set',12,{version,214},true},
diff --git a/lib/asn1/test/testDeepTConstr.erl b/lib/asn1/test/testDeepTConstr.erl
index 50291bf645..9169cf5953 100644
--- a/lib/asn1/test/testDeepTConstr.erl
+++ b/lib/asn1/test/testDeepTConstr.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
main(_Erule) ->
Val1 = {substrings,
diff --git a/lib/asn1/test/testDef.erl b/lib/asn1/test/testDef.erl
index c07665d097..eae8e6d378 100644
--- a/lib/asn1/test/testDef.erl
+++ b/lib/asn1/test/testDef.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Def1',{bool0,
bool1 = asn1_DEFAULT,
diff --git a/lib/asn1/test/testDoubleEllipses.erl b/lib/asn1/test/testDoubleEllipses.erl
index 8dcd979d6a..4b50869fd2 100644
--- a/lib/asn1/test/testDoubleEllipses.erl
+++ b/lib/asn1/test/testDoubleEllipses.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Seq',{a, c}).
-record('SeqV1',{a, b}).
diff --git a/lib/asn1/test/testEnumExt.erl b/lib/asn1/test/testEnumExt.erl
index 122d198205..0f8ca816d4 100644
--- a/lib/asn1/test/testEnumExt.erl
+++ b/lib/asn1/test/testEnumExt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
main(Rule) when Rule =:= per; Rule =:= uper ->
io:format("main(~p)~n",[Rule]),
diff --git a/lib/asn1/test/testExtensibilityImplied.erl b/lib/asn1/test/testExtensibilityImplied.erl
index a039bec576..3b2e021c48 100644
--- a/lib/asn1/test/testExtensibilityImplied.erl
+++ b/lib/asn1/test/testExtensibilityImplied.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testFragmented.erl b/lib/asn1/test/testFragmented.erl
index 99867c016e..59e5c99c61 100644
--- a/lib/asn1/test/testFragmented.erl
+++ b/lib/asn1/test/testFragmented.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testINSTANCE_OF.erl b/lib/asn1/test/testINSTANCE_OF.erl
index afff05a4c5..aceaaf7a1d 100644
--- a/lib/asn1/test/testINSTANCE_OF.erl
+++ b/lib/asn1/test/testINSTANCE_OF.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testINSTANCE_OF).
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
main(_Erule) ->
Int = roundtrip('Int', 3),
diff --git a/lib/asn1/test/testImporting.erl b/lib/asn1/test/testImporting.erl
index 5eb950100d..79ad48c0f4 100644
--- a/lib/asn1/test/testImporting.erl
+++ b/lib/asn1/test/testImporting.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testInfObj.erl b/lib/asn1/test/testInfObj.erl
index 1b38d5414e..5a9f47d865 100644
--- a/lib/asn1/test/testInfObj.erl
+++ b/lib/asn1/test/testInfObj.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testInfObjExtract.erl b/lib/asn1/test/testInfObjExtract.erl
index ba1d92c100..b51611f95f 100644
--- a/lib/asn1/test/testInfObjExtract.erl
+++ b/lib/asn1/test/testInfObjExtract.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testInfObjectClass.erl b/lib/asn1/test/testInfObjectClass.erl
index 271be63fc8..560986fac9 100644
--- a/lib/asn1/test/testInfObjectClass.erl
+++ b/lib/asn1/test/testInfObjectClass.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
main(Rule) ->
%% this test is added for OTP-4591, to test that elements in decoded
diff --git a/lib/asn1/test/testMegaco.erl b/lib/asn1/test/testMegaco.erl
index b1b1c866be..0be798b962 100644
--- a/lib/asn1/test/testMegaco.erl
+++ b/lib/asn1/test/testMegaco.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-export([compile/3,main/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
compile(Config, Erule, Options) ->
asn1_test_lib:compile("MEDIA-GATEWAY-CONTROL.asn", Config, [Erule|Options]),
@@ -32,13 +32,13 @@ compile(Config, Erule, Options) ->
main(no_module,_) -> ok;
main('OLD-MEDIA-GATEWAY-CONTROL',Config) ->
- CaseDir = ?config(case_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
{ok,Msg} = asn1ct:value('OLD-MEDIA-GATEWAY-CONTROL','MegacoMessage',
[{i, CaseDir}]),
asn1_test_lib:roundtrip('OLD-MEDIA-GATEWAY-CONTROL', 'MegacoMessage', Msg),
ok;
main('MEDIA-GATEWAY-CONTROL'=Mod, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Files = filelib:wildcard(filename:join([DataDir,megacomessages,"*.val"])),
lists:foreach(fun(File) ->
{ok,Bin} = file:read_file(File),
diff --git a/lib/asn1/test/testMergeCompile.erl b/lib/asn1/test/testMergeCompile.erl
index 6bf7aaa1d6..f0e68e07b7 100644
--- a/lib/asn1/test/testMergeCompile.erl
+++ b/lib/asn1/test/testMergeCompile.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-export([main/1,mvrasn/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('InitiatingMessage',{procedureCode,criticality,value}).
-record('Iu-ReleaseCommand',{protocolIEs,protocolExtensions}).
@@ -66,16 +66,16 @@ main(Erule) ->
mvrasn(Erule) ->
case Erule of
ber ->
- ?line ok = test(isd),
- ?line ok = test(isd2),
- ?line ok = test(dsd),
- ?line ok = test(ul_res),
- ?line ok = test(seqofseq),
- ?line ok = test('InsertSubscriberDataArg');
+ ok = test(isd),
+ ok = test(isd2),
+ ok = test(dsd),
+ ok = test(ul_res),
+ ok = test(seqofseq),
+ ok = test('InsertSubscriberDataArg');
_ ->
ok
end,
- ?line ok = test(mvrasn6,'InsertSubscriberDataArg').
+ ok = test(mvrasn6,'InsertSubscriberDataArg').
test(isd)->
EncPdu = <<48,128,129,7,145,148,113,50,1,0,241,131,1,0,176,128,5,0,
diff --git a/lib/asn1/test/testMultipleLevels.erl b/lib/asn1/test/testMultipleLevels.erl
index 0f465ee9da..c610e59f3d 100644
--- a/lib/asn1/test/testMultipleLevels.erl
+++ b/lib/asn1/test/testMultipleLevels.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testNBAPsystem.erl b/lib/asn1/test/testNBAPsystem.erl
index e0eeb9fe0c..1af283af42 100644
--- a/lib/asn1/test/testNBAPsystem.erl
+++ b/lib/asn1/test/testNBAPsystem.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([compile/2,test/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('InitiatingMessage',{
procedureID, criticality, messageDiscriminator, transactionID, value}).
@@ -92,23 +92,23 @@ compile(Config, Options) ->
test(_Erule,Config) ->
- ?line ok = enc_audit_req_msg(),
- ?line ok = cell_setup_req_msg_test(),
+ ok = enc_audit_req_msg(),
+ ok = cell_setup_req_msg_test(),
ticket_5812(Config).
ticket_5812(Config) ->
- ?line Msg = v_5812(),
+ Msg = v_5812(),
{ok,B2} = 'NBAP-PDU-Discriptions':encode('NBAP-PDU', Msg),
V = <<0,28,74,0,3,48,0,0,1,0,123,64,41,0,0,0,126,64,35,95,208,2,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,145,0,1,205,0,0,0,0,2,98,64,1,128>>,
- ?line ok = compare(V,B2),
+ ok = compare(V,B2),
{ok,Msg2} = 'NBAP-PDU-Discriptions':decode('NBAP-PDU', B2),
- ?line ok = check_record_names(Msg2,Config).
+ ok = check_record_names(Msg2,Config).
enc_audit_req_msg() ->
Msg = {initiatingMessage, audit_req_msg()},
{ok,B} = 'NBAP-PDU-Discriptions':encode('NBAP-PDU', Msg),
{ok,_Msg} = 'NBAP-PDU-Discriptions':decode('NBAP-PDU', B),
- ?line {initiatingMessage,
+ {initiatingMessage,
#'InitiatingMessage'{value=#'AuditRequest'{protocolIEs=[{_,114,ignore,_}],
protocolExtensions = asn1_NOVALUE}}} = _Msg,
io:format("Msg: ~n~P~n~n_Msg:~n~P~n",[Msg,15,_Msg,15]),
@@ -285,8 +285,8 @@ compare(_,_) ->
false.
check_record_names(Msg,Config) ->
- DataDir = ?config(data_dir,Config),
- CaseDir = ?config(case_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
+ CaseDir = proplists:get_value(case_dir,Config),
{ok, test_records} = compile:file(filename:join([DataDir, "test_records"]),
[{i, CaseDir}]),
ok = test_records:'check_record_names_OTP-5812'(Msg).
diff --git a/lib/asn1/test/testOpenTypeImplicitTag.erl b/lib/asn1/test/testOpenTypeImplicitTag.erl
index 01e0a5e07f..b1534bd268 100644
--- a/lib/asn1/test/testOpenTypeImplicitTag.erl
+++ b/lib/asn1/test/testOpenTypeImplicitTag.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
main(_Rules) ->
roundtrip('Seq', {'Seq',<<1,1,255>>,<<1,1,255>>,12,<<1,1,255>>}),
diff --git a/lib/asn1/test/testOpt.erl b/lib/asn1/test/testOpt.erl
index 1f96331966..d7e194078e 100644
--- a/lib/asn1/test/testOpt.erl
+++ b/lib/asn1/test/testOpt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testOpt).
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Opt1',{bool0,
bool1 = asn1_NOVALUE,
diff --git a/lib/asn1/test/testParamBasic.erl b/lib/asn1/test/testParamBasic.erl
index f4a696ff38..1455c6e81a 100644
--- a/lib/asn1/test/testParamBasic.erl
+++ b/lib/asn1/test/testParamBasic.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('T11',{number, string=asn1_DEFAULT}).
-record('T12',{number, string=asn1_DEFAULT}).
diff --git a/lib/asn1/test/testParameterizedInfObj.erl b/lib/asn1/test/testParameterizedInfObj.erl
index 592dc693f0..d485ef137e 100644
--- a/lib/asn1/test/testParameterizedInfObj.erl
+++ b/lib/asn1/test/testParameterizedInfObj.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-export([main/2,param/1,ranap/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('AllocationOrRetentionPriority',{priorityLevel,iE_Extensions}).
-record('ProtocolExtensionField',{id,criticality,extensionValue}).
@@ -97,7 +97,7 @@ roundtrip(T, V) ->
ranap(_Erule) ->
PIEVal2 = [{'ProtocolIE-Field',4,ignore,{radioNetwork,'rab-pre-empted'}}],
- ?line Val2 =
+ Val2 =
#'InitiatingMessage'{procedureCode=1,
criticality=ignore,
value=#'Iu-ReleaseCommand'{protocolIEs=PIEVal2,
@@ -121,8 +121,8 @@ param2(Config, Erule) ->
{'ProtocolIE-Field',101,true}]}),
%% Now remove the data after the extension mark in the object set.
- DataDir = ?config(data_dir, Config),
- CaseDir = ?config(case_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
Asn1SrcBase = "Param2.asn1",
Asn1SrcFile0 = filename:join(DataDir, Asn1SrcBase),
{ok,Src0} = file:read_file(Asn1SrcFile0),
diff --git a/lib/asn1/test/testPrim.erl b/lib/asn1/test/testPrim.erl
index dc2e0fa2e7..96a2dd6c79 100644
--- a/lib/asn1/test/testPrim.erl
+++ b/lib/asn1/test/testPrim.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
-export([null/1]).
-export([real/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
bool(Rules) ->
Types = ['Bool','BoolCon','BoolPri','BoolApp',
diff --git a/lib/asn1/test/testPrimExternal.erl b/lib/asn1/test/testPrimExternal.erl
index 56252241d4..f06acebd66 100644
--- a/lib/asn1/test/testPrimExternal.erl
+++ b/lib/asn1/test/testPrimExternal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([external/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
external(_Rules) ->
Types = ['NT',
diff --git a/lib/asn1/test/testPrimStrings.erl b/lib/asn1/test/testPrimStrings.erl
index 46793c6bff..cb97655c15 100644
--- a/lib/asn1/test/testPrimStrings.erl
+++ b/lib/asn1/test/testPrimStrings.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@
-export([utf8_string/1]).
-export([fragmented/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
fragmented(Rules) ->
Lens = fragmented_lengths(),
@@ -54,7 +54,7 @@ fragmented_strings(Len, Types) ->
ok.
make_ns_value(0) -> [];
-make_ns_value(N) -> [($0 - 1) + random:uniform(10)|make_ns_value(N-1)].
+make_ns_value(N) -> [($0 - 1) + rand:uniform(10)|make_ns_value(N-1)].
fragmented_lengths() ->
K16 = 1 bsl 14,
diff --git a/lib/asn1/test/testRfcs.erl b/lib/asn1/test/testRfcs.erl
index 20eaee9982..da7333ef98 100644
--- a/lib/asn1/test/testRfcs.erl
+++ b/lib/asn1/test/testRfcs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,15 +23,15 @@
-export([compile/3,test/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
compile(Config, Erules, Options0) ->
Options = [no_ok_wrapper|Options0],
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Specs0 = filelib:wildcard("*.asn1", filename:join(DataDir, rfcs)),
Specs = [filename:join(rfcs, Spec) || Spec <- Specs0],
122 = length(Specs),
- CaseDir = ?config(case_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
asn1_test_lib:compile_all(Specs, Config, [Erules,{i,CaseDir}|Options]).
test() ->
diff --git a/lib/asn1/test/testSSLspecs.erl b/lib/asn1/test/testSSLspecs.erl
index 9e51021ad2..9a0129d91a 100644
--- a/lib/asn1/test/testSSLspecs.erl
+++ b/lib/asn1/test/testSSLspecs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,11 +23,11 @@
-export([compile/2,run/1,compile_combined/2,run_combined/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
compile(Config, Options) ->
- DataDir = ?config(data_dir, Config),
- CaseDir = ?config(case_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
NewOptions = [{i, DataDir}, {i, CaseDir}|Options],
asn1_test_lib:compile_all(["SSL-PKIX", "PKIXAttributeCertificate"],
@@ -44,16 +44,16 @@ compile(Config, Options) ->
Config, NewOptions).
compile_combined(Config, ber=Rule) ->
- DataDir = ?config(data_dir, Config),
- CaseDir = ?config(case_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ CaseDir = proplists:get_value(case_dir, Config),
Options = [{i, CaseDir}, {i, DataDir}, Rule,
der, compact_bit_string, asn1config],
ok = remove_db_files_combined(CaseDir),
asn1_test_lib:compile("OTP-PKIX.set.asn", Config, Options).
remove_db_files(Dir) ->
- ?line ok = remove_db_file(Dir ++ "PKIX1Explicit93.asn1db"),
- ?line ok = remove_db_file(Dir ++ "PKIX1Implicit93.asn1db").
+ ok = remove_db_file(Dir ++ "PKIX1Explicit93.asn1db"),
+ ok = remove_db_file(Dir ++ "PKIX1Implicit93.asn1db").
remove_db_file(File) ->
case file:delete(File) of
ok ->
@@ -65,23 +65,23 @@ remove_db_file(File) ->
end.
remove_db_files_combined(Dir) ->
- ?line ok = remove_db_file(Dir ++ "OTP-PKIX.asn1db"),
- ?line ok = remove_db_file(Dir ++ "SSL-PKIX.asn1db"),
- ?line ok = remove_db_file(Dir ++ "PKIXAttributeCertificate.asn1db"),
- ?line ok = remove_db_file(Dir ++ "PKIX1Algorithms88.asn1db"),
- ?line ok = remove_db_file(Dir ++ "PKIX1Explicit88.asn1db"),
- ?line ok = remove_db_file(Dir ++ "PKIX1Implicit88.asn1db").
+ ok = remove_db_file(Dir ++ "OTP-PKIX.asn1db"),
+ ok = remove_db_file(Dir ++ "SSL-PKIX.asn1db"),
+ ok = remove_db_file(Dir ++ "PKIXAttributeCertificate.asn1db"),
+ ok = remove_db_file(Dir ++ "PKIX1Algorithms88.asn1db"),
+ ok = remove_db_file(Dir ++ "PKIX1Explicit88.asn1db"),
+ ok = remove_db_file(Dir ++ "PKIX1Implicit88.asn1db").
run(ber) ->
run1(1).
run1(6) ->
- ?line f1(6),
- ?line f2(6),
- ?line transform4(ex(7));
+ f1(6),
+ f2(6),
+ transform4(ex(7));
run1(N) ->
- ?line f1(N),
- ?line f2(N),
+ f1(N),
+ f2(N),
run1(N+1).
@@ -93,22 +93,22 @@ f2(N) ->
transform1(ATAV) ->
- ?line {ok, ATAVEnc} = 'PKIX1Explicit88':encode('AttributeTypeAndValue',
+ {ok, ATAVEnc} = 'PKIX1Explicit88':encode('AttributeTypeAndValue',
ATAV),
- ?line {ok, _ATAVDec} = 'SSL-PKIX':decode('AttributeTypeAndValue',
+ {ok, _ATAVDec} = 'SSL-PKIX':decode('AttributeTypeAndValue',
ATAVEnc).
transform2(ATAV) ->
- ?line {ok, ATAVEnc} = 'PKIX1Explicit88':encode('AttributeTypeAndValue',
+ {ok, ATAVEnc} = 'PKIX1Explicit88':encode('AttributeTypeAndValue',
ATAV),
- ?line {ok, _ATAVDec} = 'PKIX1Explicit88':decode('AttributeTypeAndValue',
+ {ok, _ATAVDec} = 'PKIX1Explicit88':decode('AttributeTypeAndValue',
ATAVEnc).
transform4(ATAV) ->
- ?line {ok, ATAVEnc} = 'PKIX1Explicit88':encode('Attribute',
+ {ok, ATAVEnc} = 'PKIX1Explicit88':encode('Attribute',
ATAV),
- ?line {ok, _ATAVDec} = 'PKIX1Explicit88':decode('Attribute',
+ {ok, _ATAVDec} = 'PKIX1Explicit88':decode('Attribute',
ATAVEnc).
@@ -144,8 +144,8 @@ ex(7) ->
run_combined(ber) ->
Cert = cert(),
- ?line {ok,{'CertificatePKIX1Explicit88',{Type,UnDec},_,_}} = 'OTP-PKIX':decode_TBSCert_exclusive(Cert),
- ?line {ok,_} = 'OTP-PKIX':decode_part(Type,UnDec),
+ {ok,{'CertificatePKIX1Explicit88',{Type,UnDec},_,_}} = 'OTP-PKIX':decode_TBSCert_exclusive(Cert),
+ {ok,_} = 'OTP-PKIX':decode_part(Type,UnDec),
ok.
cert() ->
diff --git a/lib/asn1/test/testSelectionTypes.erl b/lib/asn1/test/testSelectionTypes.erl
index d33cfcc694..b9f908b251 100644
--- a/lib/asn1/test/testSelectionTypes.erl
+++ b/lib/asn1/test/testSelectionTypes.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testSelectionTypes).
-export([test/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
test() ->
["Es"] = Val2 = ['SelectionType':einsteinium()],
diff --git a/lib/asn1/test/testSeq2738.erl b/lib/asn1/test/testSeq2738.erl
index 3c9e4a744e..105a04a15b 100644
--- a/lib/asn1/test/testSeq2738.erl
+++ b/lib/asn1/test/testSeq2738.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testSeq2738).
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqOptFake',{int, opt = asn1_NOVALUE}).
-record('OptSeqFake',{bool = false}).
diff --git a/lib/asn1/test/testSeqDefault.erl b/lib/asn1/test/testSeqDefault.erl
index db0914bf0a..d9e9e60541 100644
--- a/lib/asn1/test/testSeqDefault.erl
+++ b/lib/asn1/test/testSeqDefault.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-include("External.hrl").
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqDef1',{bool1 = asn1_DEFAULT, int1, seq1 = asn1_DEFAULT}).
-record('SeqDef1Imp',{bool1 = asn1_DEFAULT, int1, seq1 = asn1_DEFAULT}).
diff --git a/lib/asn1/test/testSeqExtension.erl b/lib/asn1/test/testSeqExtension.erl
index 6b49b29047..f7885cb002 100644
--- a/lib/asn1/test/testSeqExtension.erl
+++ b/lib/asn1/test/testSeqExtension.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-include("External.hrl").
-export([main/3]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqExt1',{}).
-record('SeqExt2',{bool, int}).
diff --git a/lib/asn1/test/testSeqExternal.erl b/lib/asn1/test/testSeqExternal.erl
index a48794924f..8f2f2a8f94 100644
--- a/lib/asn1/test/testSeqExternal.erl
+++ b/lib/asn1/test/testSeqExternal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-include("External.hrl").
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqXSet1',{set, bool, int}).
-record('SeqXSet2',{bool, set, int}).
diff --git a/lib/asn1/test/testSeqOf.erl b/lib/asn1/test/testSeqOf.erl
index 898b8c1e15..d4cfafc278 100644
--- a/lib/asn1/test/testSeqOf.erl
+++ b/lib/asn1/test/testSeqOf.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Seq1',{bool1, int1, seq1 = asn1_DEFAULT}).
-record('Seq2',{seq2 = asn1_DEFAULT, bool2, int2}).
diff --git a/lib/asn1/test/testSeqOfCho.erl b/lib/asn1/test/testSeqOfCho.erl
index 82ac56ac50..268500d0e1 100644
--- a/lib/asn1/test/testSeqOfCho.erl
+++ b/lib/asn1/test/testSeqOfCho.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqChoDef',{bool1, int1, seq1 = asn1_DEFAULT}).
-record('SeqChoOpt',{bool1, int1, seq1 = asn1_NOVALUE}).
diff --git a/lib/asn1/test/testSeqOfExternal.erl b/lib/asn1/test/testSeqOfExternal.erl
index 560fdecb64..18f2767613 100644
--- a/lib/asn1/test/testSeqOfExternal.erl
+++ b/lib/asn1/test/testSeqOfExternal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testSeqOfExternal).
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
-record('NT',{os, bool}).
diff --git a/lib/asn1/test/testSeqOfIndefinite.erl b/lib/asn1/test/testSeqOfIndefinite.erl
index 4a0101834a..2f66baf9a8 100644
--- a/lib/asn1/test/testSeqOfIndefinite.erl
+++ b/lib/asn1/test/testSeqOfIndefinite.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,16 +22,16 @@
-export([main/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
main() ->
- ?line ok = test(isd),
- ?line ok = test(isd2),
- ?line ok = test(dsd),
- ?line ok = test(ul_res),
- ?line ok = test(prim),
- ?line ok = test(seqofseq),
- ?line ok = test('InsertSubscriberDataArg'). % OTP-4232
+ ok = test(isd),
+ ok = test(isd2),
+ ok = test(dsd),
+ ok = test(ul_res),
+ ok = test(prim),
+ ok = test(seqofseq),
+ ok = test('InsertSubscriberDataArg'). % OTP-4232
test(isd)->
EncPdu = <<48,128,129,7,145,148,113,50,1,0,241,131,1,0,176,128,5,0,
diff --git a/lib/asn1/test/testSeqOfTag.erl b/lib/asn1/test/testSeqOfTag.erl
index 55f807199f..b6e62e15ef 100644
--- a/lib/asn1/test/testSeqOfTag.erl
+++ b/lib/asn1/test/testSeqOfTag.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
diff --git a/lib/asn1/test/testSeqOptional.erl b/lib/asn1/test/testSeqOptional.erl
index db615d6e4d..13d6615ca4 100644
--- a/lib/asn1/test/testSeqOptional.erl
+++ b/lib/asn1/test/testSeqOptional.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-include("External.hrl").
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqOpt1',{bool1 = asn1_NOVALUE, int1, seq1 = asn1_NOVALUE}).
-record('SeqOpt1Imp',{bool1 = asn1_NOVALUE, int1, seq1 = asn1_NOVALUE}).
diff --git a/lib/asn1/test/testSeqPrim.erl b/lib/asn1/test/testSeqPrim.erl
index 6af0ce9287..7e782351d9 100644
--- a/lib/asn1/test/testSeqPrim.erl
+++ b/lib/asn1/test/testSeqPrim.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Seq',{bool, boolCon, boolPri, boolApp, boolExpCon, boolExpPri, boolExpApp}).
-record('Empty',{}).
diff --git a/lib/asn1/test/testSeqSetDefaultVal.erl b/lib/asn1/test/testSeqSetDefaultVal.erl
index 86ab07a4a8..fd4ef9c088 100644
--- a/lib/asn1/test/testSeqSetDefaultVal.erl
+++ b/lib/asn1/test/testSeqSetDefaultVal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/2]).
-include("External.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqInts',{a = asn1_DEFAULT,
b = asn1_DEFAULT,
diff --git a/lib/asn1/test/testSeqSetIndefinite.erl b/lib/asn1/test/testSeqSetIndefinite.erl
index 8948e10ece..155da2c1ca 100644
--- a/lib/asn1/test/testSeqSetIndefinite.erl
+++ b/lib/asn1/test/testSeqSetIndefinite.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testSeqSetIndefinite).
-export([main/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
main() ->
seq_indefinite(),
diff --git a/lib/asn1/test/testSeqTag.erl b/lib/asn1/test/testSeqTag.erl
index baa79ed428..cc561ffe72 100644
--- a/lib/asn1/test/testSeqTag.erl
+++ b/lib/asn1/test/testSeqTag.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
-record('SeqTag',{nt, imp, exp}).
diff --git a/lib/asn1/test/testSeqTypeRefCho.erl b/lib/asn1/test/testSeqTypeRefCho.erl
index 372be0c637..88993ef49a 100644
--- a/lib/asn1/test/testSeqTypeRefCho.erl
+++ b/lib/asn1/test/testSeqTypeRefCho.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
-record('SeqTRcho',{seqCho, seqChoE, 'seqCho-E', 'seqChoE-E'}).
diff --git a/lib/asn1/test/testSeqTypeRefPrim.erl b/lib/asn1/test/testSeqTypeRefPrim.erl
index 42554e758e..950c9b1de2 100644
--- a/lib/asn1/test/testSeqTypeRefPrim.erl
+++ b/lib/asn1/test/testSeqTypeRefPrim.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testSeqTypeRefPrim).
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqTR',{octStr, octStrI, octStrE, 'octStr-I', 'octStrI-I', 'octStrE-I', 'octStr-E', 'octStrI-E', 'octStrE-E'}).
diff --git a/lib/asn1/test/testSeqTypeRefSeq.erl b/lib/asn1/test/testSeqTypeRefSeq.erl
index ee30937af5..0d88e55d15 100644
--- a/lib/asn1/test/testSeqTypeRefSeq.erl
+++ b/lib/asn1/test/testSeqTypeRefSeq.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Seq1',{bool1, int1, seq1}).
-record('Seq2',{seq2, bool2, int2}).
diff --git a/lib/asn1/test/testSeqTypeRefSet.erl b/lib/asn1/test/testSeqTypeRefSet.erl
index ba690b4503..7d0fd20647 100644
--- a/lib/asn1/test/testSeqTypeRefSet.erl
+++ b/lib/asn1/test/testSeqTypeRefSet.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SeqTRset',{seqSet, seqSetI, seqSetE, 'seqSet-I', 'seqSetI-I', 'seqSetE-I', 'seqSet-E', 'seqSetI-E', 'seqSetE-E'}).
-record('SeqSet',{setInt, setOs}).
diff --git a/lib/asn1/test/testSetDefault.erl b/lib/asn1/test/testSetDefault.erl
index 4e34c01a52..6d84ee3204 100644
--- a/lib/asn1/test/testSetDefault.erl
+++ b/lib/asn1/test/testSetDefault.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SetDef1',{bool1 = asn1_DEFAULT, int1, set1 = asn1_DEFAULT}).
-record('SetDef2',{set2 = asn1_DEFAULT, bool2, int2}).
diff --git a/lib/asn1/test/testSetExtension.erl b/lib/asn1/test/testSetExtension.erl
index 67977a2a31..58259e9f34 100644
--- a/lib/asn1/test/testSetExtension.erl
+++ b/lib/asn1/test/testSetExtension.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-include("External.hrl").
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SetExt1',{}).
-record('SetExt2',{bool, int}).
diff --git a/lib/asn1/test/testSetExternal.erl b/lib/asn1/test/testSetExternal.erl
index e265cf1f3e..a9b1e3952e 100644
--- a/lib/asn1/test/testSetExternal.erl
+++ b/lib/asn1/test/testSetExternal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
-include("External.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SetXSeq1',{seq, bool, int}).
-record('SetXSeq2',{bool, seq, int}).
diff --git a/lib/asn1/test/testSetOf.erl b/lib/asn1/test/testSetOf.erl
index 4ff90676aa..62caa8b3f9 100644
--- a/lib/asn1/test/testSetOf.erl
+++ b/lib/asn1/test/testSetOf.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Set1',{bool1, int1, set1 = asn1_DEFAULT}).
-record('Set2',{set2 = asn1_DEFAULT, bool2, int2}).
diff --git a/lib/asn1/test/testSetOfCho.erl b/lib/asn1/test/testSetOfCho.erl
index 002fa9be0a..a6ff2a79be 100644
--- a/lib/asn1/test/testSetOfCho.erl
+++ b/lib/asn1/test/testSetOfCho.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SetChoDef',{bool1, int1, set1 = asn1_DEFAULT}).
-record('SetChoOpt',{bool1, int1, set1 = asn1_NOVALUE}).
diff --git a/lib/asn1/test/testSetOfExternal.erl b/lib/asn1/test/testSetOfExternal.erl
index 60bde33962..faa7cfd239 100644
--- a/lib/asn1/test/testSetOfExternal.erl
+++ b/lib/asn1/test/testSetOfExternal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testSetOfExternal).
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
-record('NT',{os, bool}).
diff --git a/lib/asn1/test/testSetOfTag.erl b/lib/asn1/test/testSetOfTag.erl
index 96dc9942d7..ccaded42ab 100644
--- a/lib/asn1/test/testSetOfTag.erl
+++ b/lib/asn1/test/testSetOfTag.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testSetOfTag).
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
-record('SetTagNt',{nt}).
diff --git a/lib/asn1/test/testSetOptional.erl b/lib/asn1/test/testSetOptional.erl
index a0010d203a..8d38f4c9d5 100644
--- a/lib/asn1/test/testSetOptional.erl
+++ b/lib/asn1/test/testSetOptional.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testSetPrim.erl b/lib/asn1/test/testSetPrim.erl
index a4b8bb2f09..f91dfeb9bf 100644
--- a/lib/asn1/test/testSetPrim.erl
+++ b/lib/asn1/test/testSetPrim.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Set',{bool, boolCon, boolPri, boolApp, boolExpCon, boolExpPri, boolExpApp}).
-record('Empty',{}).
diff --git a/lib/asn1/test/testSetTag.erl b/lib/asn1/test/testSetTag.erl
index b963ecb4b3..528769c85b 100644
--- a/lib/asn1/test/testSetTag.erl
+++ b/lib/asn1/test/testSetTag.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testSetTag).
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
-record('SetTag',{nt, imp, exp}).
diff --git a/lib/asn1/test/testSetTypeRefCho.erl b/lib/asn1/test/testSetTypeRefCho.erl
index adffb646fb..3015faaa0f 100644
--- a/lib/asn1/test/testSetTypeRefCho.erl
+++ b/lib/asn1/test/testSetTypeRefCho.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("External.hrl").
-record('SetTRcho',{setCho, setChoE, 'setCho-E', 'setChoE-E'}).
diff --git a/lib/asn1/test/testSetTypeRefPrim.erl b/lib/asn1/test/testSetTypeRefPrim.erl
index e20b6c57ab..1f31736f1c 100644
--- a/lib/asn1/test/testSetTypeRefPrim.erl
+++ b/lib/asn1/test/testSetTypeRefPrim.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SetTR',{octStr, octStrI, octStrE, 'octStr-I', 'octStrI-I', 'octStrE-I', 'octStr-E', 'octStrI-E', 'octStrE-E'}).
diff --git a/lib/asn1/test/testSetTypeRefSeq.erl b/lib/asn1/test/testSetTypeRefSeq.erl
index 0d2bd6b32d..d829a5031c 100644
--- a/lib/asn1/test/testSetTypeRefSeq.erl
+++ b/lib/asn1/test/testSetTypeRefSeq.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('SetTRseq',{setSeq, setSeqI, setSeqE, 'setSeq-I', 'setSeqI-I', 'setSeqE-I', 'setSeq-E', 'setSeqI-E', 'setSeqE-E'}).
-record('SetSeq',{seqInt, seqOs}).
diff --git a/lib/asn1/test/testSetTypeRefSet.erl b/lib/asn1/test/testSetTypeRefSet.erl
index 85d9bf52cd..df9732e52a 100644
--- a/lib/asn1/test/testSetTypeRefSet.erl
+++ b/lib/asn1/test/testSetTypeRefSet.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([main/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-record('Set1',{bool1, int1, set1}).
-record('Set2',{set2, bool2, int2}).
diff --git a/lib/asn1/test/testTCAP.erl b/lib/asn1/test/testTCAP.erl
index 6c66d73feb..422ae1f0fc 100644
--- a/lib/asn1/test/testTCAP.erl
+++ b/lib/asn1/test/testTCAP.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([compile/2,test/2,compile_asn1config/2,test_asn1config/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
compile(Config, Options) ->
Files = ["Remote-Operations-Information-Objects",
@@ -39,7 +39,6 @@ compile_asn1config(Config, Options) ->
asn1_test_lib:compile_erlang("TCAPPackage_msg", Config, []).
test(Erule,_Config) ->
-% ?line OutDir = ?config(priv_dir,Config),
%% testing OTP-4798, open type encoded with indefinite length
{ok,_Res} = 'TCAPMessages-simple':decode('MessageType',
val_OTP_4798(Erule)),
@@ -49,20 +48,17 @@ test(Erule,_Config) ->
val_OTP_4799(Erule)),
%% testing vance shipley's problems. Parameterized object sets.
- ?line Val3 = 'TCAPPackage_msg':val('PackageType',unidirectional),
+ Val3 = 'TCAPPackage_msg':val('PackageType',unidirectional),
Res3 = enc_dec('PackageType', Val3),
- ?line ok = 'TCAPPackage_msg':check_result('PackageType',unidirectional,Res3),
-%% ?line io:format("Res3:~n~p~n~n",[Res3]),
+ ok = 'TCAPPackage_msg':check_result('PackageType',unidirectional,Res3),
- ?line Val4 = 'TCAPPackage_msg':val('PackageType',abort),
+ Val4 = 'TCAPPackage_msg':val('PackageType',abort),
Res4 = enc_dec('PackageType', Val4),
- ?line ok = 'TCAPPackage_msg':check_result('PackageType',abort,Res4),
-%% ?line io:format("Res4:~n~p~n~n",[Res4]),
+ ok = 'TCAPPackage_msg':check_result('PackageType',abort,Res4),
- ?line Val5 = 'TCAPPackage_msg':val('PackageType',response),
+ Val5 = 'TCAPPackage_msg':val('PackageType',response),
Res5 = enc_dec('PackageType', Val5),
- ?line ok = 'TCAPPackage_msg':check_result('PackageType',response,Res5).
-%% ?line io:format("Res5:~n~p~n~n",[Res5]).
+ ok = 'TCAPPackage_msg':check_result('PackageType',response,Res5).
val_OTP_4798(ber) ->
[100,129,176,73,4,57,3,17,80,107,42,40,40,6,7,0,17,134,5,1,1,1,160,29,97,27,128,2,7,128,161,9,6,7,4,0,0,1,0,14,2,162,3,2,1,0,163,5,161,3,2,1,0,108,128,162,120,2,1,0,48,115,2,1,56,48,128,48,34,4,16,203,87,215,196,217,93,235,90,64,131,106,145,39,26,25,236,4,4,197,241,81,112,4,8,78,225,34,196,215,212,200,0,48,34,4,16,145,125,27,67,42,144,6,161,207,112,55,75,200,191,191,28,4,4,226,219,242,123,4,8,72,46,130,28,206,178,168,0,48,34,4,16,1,8,20,29,70,160,218,160,125,188,244,174,113,115,253,245,4,4,26,5,90,160,4,8,252,75,149,98,153,224,140,0,0,0,0,0];
diff --git a/lib/asn1/test/testTcapsystem.erl b/lib/asn1/test/testTcapsystem.erl
index a050ceac61..ceff4f6b50 100644
--- a/lib/asn1/test/testTcapsystem.erl
+++ b/lib/asn1/test/testTcapsystem.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testTimer.erl b/lib/asn1/test/testTimer.erl
index 30e31796e2..bd8da85735 100644
--- a/lib/asn1/test/testTimer.erl
+++ b/lib/asn1/test/testTimer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(testTimer).
-export([go/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(times, 5000).
diff --git a/lib/asn1/test/testTypeValueNotation.erl b/lib/asn1/test/testTypeValueNotation.erl
index e75cec04c9..17f1c74dcb 100644
--- a/lib/asn1/test/testTypeValueNotation.erl
+++ b/lib/asn1/test/testTypeValueNotation.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testUniqueObjectSets.erl b/lib/asn1/test/testUniqueObjectSets.erl
index fd82087916..4d3ec94391 100644
--- a/lib/asn1/test/testUniqueObjectSets.erl
+++ b/lib/asn1/test/testUniqueObjectSets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/testValueTest.erl b/lib/asn1/test/testValueTest.erl
index 1764323e93..6699c0094a 100644
--- a/lib/asn1/test/testValueTest.erl
+++ b/lib/asn1/test/testValueTest.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/asn1/test/test_compile_options.erl b/lib/asn1/test/test_compile_options.erl
index 8be3a29763..ac74470537 100644
--- a/lib/asn1/test/test_compile_options.erl
+++ b/lib/asn1/test/test_compile_options.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(test_compile_options).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([wrong_path/1,comp/2,path/1,ticket_6143/1,noobj/1,
@@ -39,50 +39,49 @@ wrong_path(Config) ->
end.
comp(Parent,Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
- ?line Err=asn1ct:compile(DataDir++"NoImport",[{i,OutDir},{i,filename:join([DataDir,"subdir"])},{outdir,OutDir}]),
+ DataDir = proplists:get_value(data_dir,Config),
+ OutDir = proplists:get_value(priv_dir,Config),
+ Err=asn1ct:compile(DataDir++"NoImport",[{i,OutDir},{i,filename:join([DataDir,"subdir"])},{outdir,OutDir}]),
Parent!Err.
%% OTP-5701
path(Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
+ OutDir = proplists:get_value(priv_dir,Config),
{ok,CWD} = file:get_cwd(),
- ?line file:set_cwd(filename:join([DataDir,subdir])),
+ file:set_cwd(filename:join([DataDir,subdir])),
ok = asn1ct:compile("../MyMerge.set.asn",[{outdir,OutDir}]),
- ?line ok=outfiles_check(OutDir),
- ?line outfiles_remove(OutDir),
+ ok=outfiles_check(OutDir),
+ outfiles_remove(OutDir),
file:set_cwd(filename:join([DataDir,subdir,subsubdir])),
ok = asn1ct:compile('../../MyMerge.set.asn',[{i,'..'},{outdir,OutDir}]),
- ?line ok=outfiles_check(OutDir,outfiles2()),
+ ok=outfiles_check(OutDir,outfiles2()),
file:set_cwd(CWD),
ok.
ticket_6143(Config) -> asn1_test_lib:compile("AA1", Config, []).
noobj(Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
+ OutDir = proplists:get_value(priv_dir,Config),
code:purge('P-Record'),
file:delete(filename:join([OutDir,'P-Record.erl'])),
file:delete(filename:join([OutDir,'P-Record.beam'])),
- ?line ok=asn1ct:compile(filename:join([DataDir,"P-Record"]),
+ ok=asn1ct:compile(filename:join([DataDir,"P-Record"]),
[noobj,{outdir,OutDir}]),
-% ?line false = code:is_loaded('P-Record'),
- ?line {ok,_} = file:read_file_info(filename:join([OutDir,
+ {ok,_} = file:read_file_info(filename:join([OutDir,
"P-Record.erl"])),
- ?line {error,enoent} =
+ {error,enoent} =
file:read_file_info(filename:join([OutDir,"P-Record.beam"])),
- ?line {ok,_} = c:c(filename:join([OutDir,'P-Record']),
+ {ok,_} = c:c(filename:join([OutDir,'P-Record']),
[{i,OutDir},{outdir,OutDir}]),
- ?line {file,_} = code:is_loaded('P-Record'),
+ {file,_} = code:is_loaded('P-Record'),
code:purge('P-Record'),
code:delete('P-Record'),
@@ -94,43 +93,41 @@ noobj(Config) ->
file:delete(filename:join([OutDir,'p_record.beam'])),
ok = asn1ct:compile(filename:join([DataDir,"p_record.set.asn"]),
[asn1config,ber,noobj,{outdir,OutDir}]),
-%% ?line false = code:is_loaded('P-Record'),
-%% ?line false = code:is_loaded('p_record'),
- ?line {error,enoent} =
+ {error,enoent} =
file:read_file_info(filename:join([OutDir,"P-Record.beam"])),
- ?line {error,enoent} =
+ {error,enoent} =
file:read_file_info(filename:join([OutDir,"P-Record.erl"])),
- ?line {error,enoent} =
+ {error,enoent} =
file:read_file_info(filename:join([OutDir,"p_record.beam"])),
io:format("read_file_info: p_record.erl~n",[]),
- ?line {ok,_} =
+ {ok,_} =
file:read_file_info(filename:join([OutDir,"p_record.erl"])),
io:format("c:c: p_record.erl~n",[]),
- ?line {ok,_} = c:c(filename:join([OutDir,'p_record']),
+ {ok,_} = c:c(filename:join([OutDir,'p_record']),
[{i,OutDir},{outdir,OutDir}]),
io:format("code:is_loaded: p_record.erl~n",[]),
- ?line {file,_} = code:is_loaded('p_record'),
+ {file,_} = code:is_loaded('p_record'),
io:format("file:delete: p_record.erl~n",[]),
file:delete(filename:join([OutDir,'p_record.erl'])),
file:delete(filename:join([OutDir,'p_record.beam'])).
verbose(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
+ OutDir = proplists:get_value(priv_dir,Config),
Asn1File = filename:join([DataDir,"Comment.asn"]),
%% Test verbose compile
- ?line test_server:capture_start(),
- ?line ok = asn1ct:compile(Asn1File, [{i,DataDir},{outdir,OutDir},noobj,verbose]),
- ?line test_server:capture_stop(),
- ?line [Line0|_] = test_server:capture_get(),
- ?line true = lists:prefix("Erlang ASN.1 compiler", Line0),
+ test_server:capture_start(),
+ ok = asn1ct:compile(Asn1File, [{i,DataDir},{outdir,OutDir},noobj,verbose]),
+ test_server:capture_stop(),
+ [Line0|_] = test_server:capture_get(),
+ true = lists:prefix("Erlang ASN.1 compiler", Line0),
%% Test non-verbose compile
- ?line test_server:capture_start(),
- ?line ok = asn1ct:compile(Asn1File, [{i,DataDir},{outdir,OutDir},noobj]),
- ?line test_server:capture_stop(),
- ?line [] = test_server:capture_get(),
+ test_server:capture_start(),
+ ok = asn1ct:compile(Asn1File, [{i,DataDir},{outdir,OutDir},noobj]),
+ test_server:capture_stop(),
+ [] = test_server:capture_get(),
ok.
outfiles_check(OutDir) ->
@@ -141,7 +138,7 @@ outfiles_check(_OutDir,[])->
ok;
outfiles_check(OutDir,[H|T]) ->
io:format("File: ~p~n",[filename:join([OutDir,H])]),
- ?line {ok,_}=file:read_file_info(filename:join([OutDir,H])),
+ {ok,_}=file:read_file_info(filename:join([OutDir,H])),
outfiles_check(OutDir,T).
outfiles1() ->
@@ -155,8 +152,8 @@ outfiles_remove(OutDir) ->
outfiles1()).
record_name_prefix(Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
+ OutDir = proplists:get_value(priv_dir,Config),
ok = b_SeqIn(DataDir,OutDir),
ok = a_SeqIn(DataDir,OutDir).
@@ -165,15 +162,15 @@ b_SeqIn(DataDir,OutDir) ->
[{record_name_prefix,"b_"},{outdir,OutDir}]),
io:format("FileName: ~p~nOutDir:~p~n",
[filename:join([DataDir,'b_SeqIn']),OutDir]),
- ?line {ok,_} = compile:file(filename:join([DataDir,'b_SeqIn']),
+ {ok,_} = compile:file(filename:join([DataDir,'b_SeqIn']),
[{i,OutDir}]),
- ?line 'b_SeqIn' = b_SeqIn:record_name(),
+ 'b_SeqIn' = b_SeqIn:record_name(),
ok.
a_SeqIn(DataDir,OutDir) ->
asn1ct:compile(filename:join([DataDir,'Seq']),
[{record_name_prefix,"a_"},{outdir,OutDir}]),
- ?line {ok,_} = compile:file(filename:join([DataDir,'a_SeqIn']),
+ {ok,_} = compile:file(filename:join([DataDir,'a_SeqIn']),
[{i,OutDir}]),
- ?line 'a_SeqIn' = a_SeqIn:record_name(),
+ 'a_SeqIn' = a_SeqIn:record_name(),
ok.
diff --git a/lib/asn1/test/test_modified_x420.erl b/lib/asn1/test/test_modified_x420.erl
index f9a29d1436..6cd9e0e33b 100644
--- a/lib/asn1/test/test_modified_x420.erl
+++ b/lib/asn1/test/test_modified_x420.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,10 +21,10 @@
-module(test_modified_x420).
-export([test/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
test(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
Der = read_pem(filename:join([DataDir,modified_x420,"p7_signed_data.pem"])),
{ok,{_,_,SignedData}} = 'PKCS7':decode( 'ContentInfo', Der),
diff --git a/lib/asn1/test/test_partial_incomplete_decode.erl b/lib/asn1/test/test_partial_incomplete_decode.erl
index d5eacc5a4d..7c5cfab10a 100644
--- a/lib/asn1/test/test_partial_incomplete_decode.erl
+++ b/lib/asn1/test/test_partial_incomplete_decode.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-export([test/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
test(Config) ->
FMsg = msg('F'),
@@ -67,7 +67,7 @@ test(Config) ->
ok.
test_megaco(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Files = filelib:wildcard(filename:join([DataDir,megacomessages,"*.val"])),
Mod = 'MEDIA-GATEWAY-CONTROL',
lists:foreach(fun(File) ->
@@ -81,72 +81,72 @@ test_megaco(Config) ->
exclusive_decode(Bin,F) ->
Mod='MEDIA-GATEWAY-CONTROL',
io:format("Encoding message: ~p~n",[F]),
- ?line {ok,{_,_,{_,_VsnNo,{MsgMidKey,MsgMid},{MsgMBodyKey,MsgMBody}}}}=
+ {ok,{_,_,{_,_VsnNo,{MsgMidKey,MsgMid},{MsgMBodyKey,MsgMBody}}}}=
Mod:decode_MegacoMessage_exclusive(Bin),
- ?line {ok,_} = Mod:decode_part(MsgMidKey,MsgMid),
- ?line {ok,_} = Mod:decode_part(MsgMBodyKey,MsgMBody),
+ {ok,_} = Mod:decode_part(MsgMidKey,MsgMid),
+ {ok,_} = Mod:decode_part(MsgMBodyKey,MsgMBody),
ok.
decode_parts('F',PartDecMsg) ->
- ?line {fb,{'E',35,{NameE_b,ListBinE_b},false,{NameE_d,BinE_d}}} = PartDecMsg,
- ?line {ok,[{'D',3,true}|_]} = 'PartialDecSeq':decode_part(NameE_b,ListBinE_b),
- ?line {ok,{'D',3,true}} = 'PartialDecSeq':decode_part(NameE_b,
+ {fb,{'E',35,{NameE_b,ListBinE_b},false,{NameE_d,BinE_d}}} = PartDecMsg,
+ {ok,[{'D',3,true}|_]} = 'PartialDecSeq':decode_part(NameE_b,ListBinE_b),
+ {ok,{'D',3,true}} = 'PartialDecSeq':decode_part(NameE_b,
hd(ListBinE_b)),
- ?line {ok,{da,[{'A',16,{'D',17,true}}]}} =
+ {ok,{da,[{'A',16,{'D',17,true}}]}} =
'PartialDecSeq':decode_part(NameE_d,BinE_d),
ok;
decode_parts('F2',PartDecMsg) ->
- ?line {fb,{'E',35,{E_bkey,E_b},false,{da,{E_d_akey,E_d_a}}}} = PartDecMsg,
- ?line {ok,[{'D',3,true},{'D',4,false},{'D',5,true},{'D',6,true},{'D',7,false},{'D',8,true},{'D',9,true},{'D',10,false},{'D',11,true},{'D',12,true},{'D',13,false},{'D',14,true}]} = 'PartialDecSeq':decode_part(E_bkey,E_b),
- ?line {ok,[{'A',16,{'D',17,true}}]} = 'PartialDecSeq':decode_part(E_d_akey,E_d_a);
+ {fb,{'E',35,{E_bkey,E_b},false,{da,{E_d_akey,E_d_a}}}} = PartDecMsg,
+ {ok,[{'D',3,true},{'D',4,false},{'D',5,true},{'D',6,true},{'D',7,false},{'D',8,true},{'D',9,true},{'D',10,false},{'D',11,true},{'D',12,true},{'D',13,false},{'D',14,true}]} = 'PartialDecSeq':decode_part(E_bkey,E_b),
+ {ok,[{'A',16,{'D',17,true}}]} = 'PartialDecSeq':decode_part(E_d_akey,E_d_a);
decode_parts('F3',PartDecMsg) ->
- ?line {fb,{'E',10,{E_bkey,E_b},false,{dc,{'E_d_dc',13,true,{E_d_dc_dcckey,E_d_dc_dcc}}}}} = PartDecMsg,
- ?line {ok,[{'D',11,true},{'D',12,false}]} = 'PartialDecSeq':decode_part(E_bkey,E_b),
- ?line {ok,{'E_d_dc_dcc',14,15}} = 'PartialDecSeq':decode_part(E_d_dc_dcckey,E_d_dc_dcc);
+ {fb,{'E',10,{E_bkey,E_b},false,{dc,{'E_d_dc',13,true,{E_d_dc_dcckey,E_d_dc_dcc}}}}} = PartDecMsg,
+ {ok,[{'D',11,true},{'D',12,false}]} = 'PartialDecSeq':decode_part(E_bkey,E_b),
+ {ok,{'E_d_dc_dcc',14,15}} = 'PartialDecSeq':decode_part(E_d_dc_dcckey,E_d_dc_dcc);
decode_parts('D',PartDecMsg) ->
- ?line {'D',{NameD_a,BinD_a},true} = PartDecMsg,
- ?line {ok,123} = 'PartialDecSeq':decode_part(NameD_a,BinD_a),
+ {'D',{NameD_a,BinD_a},true} = PartDecMsg,
+ {ok,123} = 'PartialDecSeq':decode_part(NameD_a,BinD_a),
ok;
decode_parts('A',PartDecMsg) ->
- ?line {'A',12,{c,{'S',true,false}},{b,{NameA_c_b,BinA_c_b}}} = PartDecMsg,
- ?line {ok,{'A_c_b',false,false}} =
+ {'A',12,{c,{'S',true,false}},{b,{NameA_c_b,BinA_c_b}}} = PartDecMsg,
+ {ok,{'A_c_b',false,false}} =
'PartialDecSeq2':decode_part(NameA_c_b,BinA_c_b),
ok;
decode_parts('GetRequest',PartDecMsg) ->
- ?line {'GetRequest',true,false,
+ {'GetRequest',true,false,
{'AcceptTypes',[html,'plain-text',gif,jpeg],
{NameAcceptTypes_others,ListBinAcceptTypes_others}},
"IamfineThankYOu"} = PartDecMsg,
- ?line {ok,["hell","othe","reho","peyo","uare","fine"]} =
+ {ok,["hell","othe","reho","peyo","uare","fine"]} =
'PartialDecMyHTTP':decode_part(NameAcceptTypes_others,
ListBinAcceptTypes_others),
- ?line {ok,"hell"} =
+ {ok,"hell"} =
'PartialDecMyHTTP':decode_part(NameAcceptTypes_others,
hd(ListBinAcceptTypes_others)),
ok;
decode_parts('S1_1',PartDecMsg) ->
- ?line {'S1',14,{'S2',false,12,{NameS2c,BinS2c}},
+ {'S1',14,{'S2',false,12,{NameS2c,BinS2c}},
{_,{NameS1c_a,ListBinS1c_a}},{NameS1d,BinS1d}} = PartDecMsg,
- ?line {ok,[{'S3',10,"PrintableString","OCTETSTRING",
+ {ok,[{'S3',10,"PrintableString","OCTETSTRING",
[one,two,three,four]}|_Rest1]} =
'PartialDecSeq3':decode_part(NameS2c,BinS2c),
- ?line {ok,[{'S3',10,"PrintableString","OCTETSTRING",
+ {ok,[{'S3',10,"PrintableString","OCTETSTRING",
[one,two,three,four]}|_Rest2]} =
'PartialDecSeq3':decode_part(NameS1c_a,ListBinS1c_a),
- ?line {ok,{'S3',10,"PrintableString","OCTETSTRING",
+ {ok,{'S3',10,"PrintableString","OCTETSTRING",
[one,two,three,four]}} =
'PartialDecSeq3':decode_part(NameS1c_a,hd(ListBinS1c_a)),
- ?line {ok,[{'Name',"Hans","HCA","Andersen"}|_Rest3]} =
+ {ok,[{'Name',"Hans","HCA","Andersen"}|_Rest3]} =
'PartialDecSeq3':decode_part(NameS1d,BinS1d),
ok;
decode_parts('S1_2',PartDecMsg) ->
- ?line {'S1',14,{'S2',false,12,_S2c},S1c_b,{NameS1d,BinS1d}} = PartDecMsg,
- ?line {b,{'C1_b',11,true,
+ {'S1',14,{'S2',false,12,_S2c},S1c_b,{NameS1d,BinS1d}} = PartDecMsg,
+ {b,{'C1_b',11,true,
{'S4',{'Name',"Hans","HCA","Andersen"},"MSc"}}}=S1c_b,
- ?line {ok,[{'Name',"Hans","HCA","Andersen"}|_Rest3]} =
+ {ok,[{'Name',"Hans","HCA","Andersen"}|_Rest3]} =
'PartialDecSeq3':decode_part(NameS1d,BinS1d),
ok.
diff --git a/lib/asn1/test/test_selective_decode.erl b/lib/asn1/test/test_selective_decode.erl
index 079351db19..c264e919a6 100644
--- a/lib/asn1/test/test_selective_decode.erl
+++ b/lib/asn1/test/test_selective_decode.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(test_selective_decode).
-export([test/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
test() ->
FMsg = msg('F'),
diff --git a/lib/asn1/test/test_special_decode_performance.erl b/lib/asn1/test/test_special_decode_performance.erl
index 7bb324c902..35c396575b 100644
--- a/lib/asn1/test/test_special_decode_performance.erl
+++ b/lib/asn1/test/test_special_decode_performance.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,34 +22,34 @@
-export([go/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
go(all) ->
{Time_S_s,Time_S_e,Time_S_c}=go(10000,'PartialDecSeq'),
{Time_MGC_s,Time_MGC_e,Time_MGC_c}=go(10000,'MEDIA-GATEWAY-CONTROL'),
- ?line do_comment({Time_S_s,Time_MGC_s},
+ do_comment({Time_S_s,Time_MGC_s},
{Time_S_e,Time_MGC_e},
{Time_S_c,Time_MGC_c}).
go(N,Mod) ->
{Type,Val} = val(Mod),
{ok,B} = Mod:encode(Type, Val),
- ?line go(Mod,B,N).
+ go(Mod,B,N).
go(Mod,Bin,N) ->
- ?line FsS = get_selective_funcs(Mod),
- ?line FsE = get_exclusive_funcs(Mod),
- ?line io:format("~nSize of value for module ~p: ~p bytes.~n~n",[Mod,size(Bin)]),
- ?line Time_s=go1(selective,Mod,FsS,Bin,N,0),
- ?line Time_e=go1(exclusive,Mod,FsE,Bin,N,0),
- ?line Time_c=go1(common,Mod,[decode],Bin,N,0),
- ?line {Time_s/length(FsS),Time_e/length(FsE),Time_c}.
+ FsS = get_selective_funcs(Mod),
+ FsE = get_exclusive_funcs(Mod),
+ io:format("~nSize of value for module ~p: ~p bytes.~n~n",[Mod,size(Bin)]),
+ Time_s=go1(selective,Mod,FsS,Bin,N,0),
+ Time_e=go1(exclusive,Mod,FsE,Bin,N,0),
+ Time_c=go1(common,Mod,[decode],Bin,N,0),
+ {Time_s/length(FsS),Time_e/length(FsE),Time_c}.
go1(_,_,[],_,_,AccTime) ->
- ?line AccTime;
+ AccTime;
%% go1 for common decode
go1(common,Mod,_,Bin,N,_) ->
- ?line TT=get_top_type(Mod),
+ TT=get_top_type(Mod),
{Time,Result} = timer:tc(fun() -> loop1(Mod, decode, TT, Bin, N) end),
case Result of
{ok,_R1} ->
diff --git a/lib/asn1/test/test_undecoded_rest.erl b/lib/asn1/test/test_undecoded_rest.erl
index 6264530fff..f70953330b 100644
--- a/lib/asn1/test/test_undecoded_rest.erl
+++ b/lib/asn1/test/test_undecoded_rest.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,14 +22,14 @@
-export([test/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% testing OTP-5104
test(Opts, Config) ->
{ok,Msg} = asn1ct:value('P-Record', 'PersonnelRecord',
- [{i,?config(case_dir, Config)}]),
+ [{i,proplists:get_value(case_dir, Config)}]),
Bytes0 = encode(Opts, 'PersonnelRecord', Msg),
Bytes1 = iolist_to_binary([Bytes0, <<55,55,55>>]),
case proplists:get_bool(undec_rest, Opts) of
diff --git a/lib/asn1/test/test_x691.erl b/lib/asn1/test/test_x691.erl
index 56c1b9bf71..878304d94f 100644
--- a/lib/asn1/test/test_x691.erl
+++ b/lib/asn1/test/test_x691.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(test_x691).
-export([cases/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
cases(Erule) ->
_ = [begin
diff --git a/lib/asn1/vsn.mk b/lib/asn1/vsn.mk
index ab2c127ca2..527af05da1 100644
--- a/lib/asn1/vsn.mk
+++ b/lib/asn1/vsn.mk
@@ -1 +1 @@
-ASN1_VSN = 4.0.2
+ASN1_VSN = 4.0.3
diff --git a/lib/common_test/Makefile b/lib/common_test/Makefile
index d47d60d1e4..f2065b8a0d 100644
--- a/lib/common_test/Makefile
+++ b/lib/common_test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2010. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/common_test/doc/src/Makefile b/lib/common_test/doc/src/Makefile
index a0c89b1222..e495f587a3 100644
--- a/lib/common_test/doc/src/Makefile
+++ b/lib/common_test/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/common_test/doc/src/basics_chapter.xml b/lib/common_test/doc/src/basics_chapter.xml
index 1a5a686fa0..b349d93813 100644
--- a/lib/common_test/doc/src/basics_chapter.xml
+++ b/lib/common_test/doc/src/basics_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/book.xml b/lib/common_test/doc/src/book.xml
index 7fe5331aba..def139a0be 100644
--- a/lib/common_test/doc/src/book.xml
+++ b/lib/common_test/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/common_test_app.xml b/lib/common_test/doc/src/common_test_app.xml
index 10c93e2ed1..3f83747485 100644
--- a/lib/common_test/doc/src/common_test_app.xml
+++ b/lib/common_test/doc/src/common_test_app.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/config_file_chapter.xml b/lib/common_test/doc/src/config_file_chapter.xml
index 62ebfccb98..db93744214 100644
--- a/lib/common_test/doc/src/config_file_chapter.xml
+++ b/lib/common_test/doc/src/config_file_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/cover_chapter.xml b/lib/common_test/doc/src/cover_chapter.xml
index 094aa7d80c..6c180c276c 100644
--- a/lib/common_test/doc/src/cover_chapter.xml
+++ b/lib/common_test/doc/src/cover_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2014</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct.xml b/lib/common_test/doc/src/ct.xml
index b6c862c233..264bcff251 100644
--- a/lib/common_test/doc/src/ct.xml
+++ b/lib/common_test/doc/src/ct.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -935,7 +935,7 @@
</func>
<func>
- <name>reload_config(Required) -&gt; ValueOrElement</name>
+ <name>reload_config(Required) -&gt; ValueOrElement | {error, Reason}</name>
<fsummary>Reloads configuration file containing specified configuration
key.</fsummary>
<type>
diff --git a/lib/common_test/doc/src/ct_cover.xml b/lib/common_test/doc/src/ct_cover.xml
index be09c08a68..89d944acbe 100644
--- a/lib/common_test/doc/src/ct_cover.xml
+++ b/lib/common_test/doc/src/ct_cover.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_ftp.xml b/lib/common_test/doc/src/ct_ftp.xml
index 0598dcbe3e..e8c6f72db7 100644
--- a/lib/common_test/doc/src/ct_ftp.xml
+++ b/lib/common_test/doc/src/ct_ftp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_hooks.xml b/lib/common_test/doc/src/ct_hooks.xml
index 12ec3bcec3..3b1e564b66 100644
--- a/lib/common_test/doc/src/ct_hooks.xml
+++ b/lib/common_test/doc/src/ct_hooks.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_hooks_chapter.xml b/lib/common_test/doc/src/ct_hooks_chapter.xml
index 3eb1945a61..1998f15697 100644
--- a/lib/common_test/doc/src/ct_hooks_chapter.xml
+++ b/lib/common_test/doc/src/ct_hooks_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2011</year><year>2013</year>
+ <year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_master.xml b/lib/common_test/doc/src/ct_master.xml
index 06f9b04f1b..6bde4644c6 100644
--- a/lib/common_test/doc/src/ct_master.xml
+++ b/lib/common_test/doc/src/ct_master.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_master_chapter.xml b/lib/common_test/doc/src/ct_master_chapter.xml
index 99555164e0..7b5aae7ad8 100644
--- a/lib/common_test/doc/src/ct_master_chapter.xml
+++ b/lib/common_test/doc/src/ct_master_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_netconfc.xml b/lib/common_test/doc/src/ct_netconfc.xml
index d8c82c7f2c..e6930b30d5 100644
--- a/lib/common_test/doc/src/ct_netconfc.xml
+++ b/lib/common_test/doc/src/ct_netconfc.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -201,7 +201,8 @@
information, see module <seealso marker="ct"><c>ct</c></seealso>.</p>
</item>
- <tag><c>host() = <seealso marker="kernel:inet#type-hostname"><c>inet:hostname()</c></seealso> | <seealso marker="kernel:inet#type-ip_address"><c>inet:ip_address()</c></seealso></c></tag>
+ <tag><c>host() = </c><seealso marker="kernel:inet#type-hostname"><c>inet:hostname()</c></seealso>
+ <c> | </c><seealso marker="kernel:inet#type-ip_address"><c>inet:ip_address()</c></seealso></tag>
<item><marker id="type-host"/></item>
<tag><c>key_or_name() = server_id() | target_name()</c></tag>
@@ -218,7 +219,9 @@
<tag><c>notification_content() = [event_time() | simple_xml()]</c></tag>
<item><marker id="type-notification_content"/> </item>
- <tag><c>option() = {ssh, host()} | {port, <seealso marker="kernel:inet#type-port_number"><c>inet:port_number()</c></seealso>} | {timeout, timeout()} | SshConnectOption</c></tag>
+ <tag><c>option() = {ssh, host()} | {port, </c>
+ <seealso marker="kernel:inet#type-port_number"><c>inet:port_number()</c></seealso>
+ <c>} | {timeout, timeout()} | SshConnectOption</c></tag>
<item><marker id="type-option"/>
<p><c>SshConnectOption</c> is any valid option to
diff --git a/lib/common_test/doc/src/ct_property_test.xml b/lib/common_test/doc/src/ct_property_test.xml
index 2e9bd1969c..028e5eb69f 100644
--- a/lib/common_test/doc/src/ct_property_test.xml
+++ b/lib/common_test/doc/src/ct_property_test.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_rpc.xml b/lib/common_test/doc/src/ct_rpc.xml
index 0169727581..90e6b833f7 100644
--- a/lib/common_test/doc/src/ct_rpc.xml
+++ b/lib/common_test/doc/src/ct_rpc.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_run.xml b/lib/common_test/doc/src/ct_run.xml
index 2552938346..9e6229f1dd 100644
--- a/lib/common_test/doc/src/ct_run.xml
+++ b/lib/common_test/doc/src/ct_run.xml
@@ -4,7 +4,7 @@
<comref>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_slave.xml b/lib/common_test/doc/src/ct_slave.xml
index 44a7b7873f..9d9aa50051 100644
--- a/lib/common_test/doc/src/ct_slave.xml
+++ b/lib/common_test/doc/src/ct_slave.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_snmp.xml b/lib/common_test/doc/src/ct_snmp.xml
index d001fb24ec..0a5e52b16c 100644
--- a/lib/common_test/doc/src/ct_snmp.xml
+++ b/lib/common_test/doc/src/ct_snmp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_ssh.xml b/lib/common_test/doc/src/ct_ssh.xml
index 92b1f60b8c..d00737aa5a 100644
--- a/lib/common_test/doc/src/ct_ssh.xml
+++ b/lib/common_test/doc/src/ct_ssh.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ct_telnet.xml b/lib/common_test/doc/src/ct_telnet.xml
index 1de278d30c..e2a45e894b 100644
--- a/lib/common_test/doc/src/ct_telnet.xml
+++ b/lib/common_test/doc/src/ct_telnet.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/dependencies_chapter.xml b/lib/common_test/doc/src/dependencies_chapter.xml
index 29c54e819a..8ede822ae5 100644
--- a/lib/common_test/doc/src/dependencies_chapter.xml
+++ b/lib/common_test/doc/src/dependencies_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/event_handler_chapter.xml b/lib/common_test/doc/src/event_handler_chapter.xml
index 31128a7114..2978226a19 100644
--- a/lib/common_test/doc/src/event_handler_chapter.xml
+++ b/lib/common_test/doc/src/event_handler_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/example_chapter.xml b/lib/common_test/doc/src/example_chapter.xml
index 8523c9f485..b82d14d2d8 100644
--- a/lib/common_test/doc/src/example_chapter.xml
+++ b/lib/common_test/doc/src/example_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/getting_started_chapter.xml b/lib/common_test/doc/src/getting_started_chapter.xml
index 802f9ba397..9b021058e8 100644
--- a/lib/common_test/doc/src/getting_started_chapter.xml
+++ b/lib/common_test/doc/src/getting_started_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/install_chapter.xml b/lib/common_test/doc/src/install_chapter.xml
index 9dce1e31a4..b29906d381 100644
--- a/lib/common_test/doc/src/install_chapter.xml
+++ b/lib/common_test/doc/src/install_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/introduction.xml b/lib/common_test/doc/src/introduction.xml
index e2a42bfd33..40724f24e9 100644
--- a/lib/common_test/doc/src/introduction.xml
+++ b/lib/common_test/doc/src/introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/notes.xml b/lib/common_test/doc/src/notes.xml
index 8e85563d9a..32ae699c7a 100644
--- a/lib/common_test/doc/src/notes.xml
+++ b/lib/common_test/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,18 +33,25 @@
<file>notes.xml</file>
</header>
-<section><title>Common_Test 1.12.1.1</title>
+<section><title>Common_Test 1.12.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
- If the telnet server would pause during transmission of a
- line of text before terminating the line, the
- ct_telnet:expect/3 function would print the line twice in
- the test case HTML log. This problem has been fixed.</p>
+ The following modules were missing in
+ common_test.app.src: ct_groups, ct_property_test,
+ ct_release_test, ct_webtool, ct_webtool_sup,
+ test_server_gl. They have now been added.</p>
<p>
- Own Id: OTP-13730 Aux Id: seq13135 </p>
+ Own Id: OTP-13475</p>
+ </item>
+ <item>
+ <p>
+ Common Test printed incorrect timestamps for received
+ error reports.</p>
+ <p>
+ Own Id: OTP-13615 Aux Id: seq13124 </p>
</item>
</list>
</section>
diff --git a/lib/common_test/doc/src/notes_history.xml b/lib/common_test/doc/src/notes_history.xml
index ecc0cab651..3a30632579 100644
--- a/lib/common_test/doc/src/notes_history.xml
+++ b/lib/common_test/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/part.xml b/lib/common_test/doc/src/part.xml
index 41e74e57c6..000eb06b82 100644
--- a/lib/common_test/doc/src/part.xml
+++ b/lib/common_test/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/part_notes.xml b/lib/common_test/doc/src/part_notes.xml
index 3d55d8152d..360c535e96 100644
--- a/lib/common_test/doc/src/part_notes.xml
+++ b/lib/common_test/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/part_notes_history.xml b/lib/common_test/doc/src/part_notes_history.xml
index 1e503ce536..d13bb858db 100644
--- a/lib/common_test/doc/src/part_notes_history.xml
+++ b/lib/common_test/doc/src/part_notes_history.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/ref_man.xml b/lib/common_test/doc/src/ref_man.xml
index 19960bfea7..d1567e2d3c 100644
--- a/lib/common_test/doc/src/ref_man.xml
+++ b/lib/common_test/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/run_test_chapter.xml b/lib/common_test/doc/src/run_test_chapter.xml
index e5e217ca1d..43e36adfb6 100644
--- a/lib/common_test/doc/src/run_test_chapter.xml
+++ b/lib/common_test/doc/src/run_test_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/test_structure_chapter.xml b/lib/common_test/doc/src/test_structure_chapter.xml
index 8076244928..3ffaa623c3 100644
--- a/lib/common_test/doc/src/test_structure_chapter.xml
+++ b/lib/common_test/doc/src/test_structure_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/unix_telnet.xml b/lib/common_test/doc/src/unix_telnet.xml
index a064a222d6..b2314a53ec 100644
--- a/lib/common_test/doc/src/unix_telnet.xml
+++ b/lib/common_test/doc/src/unix_telnet.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/why_test_chapter.xml b/lib/common_test/doc/src/why_test_chapter.xml
index ff6000628b..cdac4e04b2 100644
--- a/lib/common_test/doc/src/why_test_chapter.xml
+++ b/lib/common_test/doc/src/why_test_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/doc/src/write_test_chapter.xml b/lib/common_test/doc/src/write_test_chapter.xml
index a7a652d506..83daf771a6 100644
--- a/lib/common_test/doc/src/write_test_chapter.xml
+++ b/lib/common_test/doc/src/write_test_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/common_test/include/ct.hrl b/lib/common_test/include/ct.hrl
index 53bc43fc24..79f0b2d9df 100644
--- a/lib/common_test/include/ct.hrl
+++ b/lib/common_test/include/ct.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,8 +18,6 @@
%% %CopyrightEnd%
%%
--include_lib("test_server/include/test_server.hrl").
-
%% the log level is used as argument to any CT logging function
-define(MIN_IMPORTANCE, 0 ).
-define(LOW_IMPORTANCE, 25).
@@ -37,3 +35,9 @@
%% name of process executing the CT Hook init and terminate function
-define(CT_HOOK_INIT_PROCESS, ct_util_server).
-define(CT_HOOK_TERMINATE_PROCESS, ct_util_server).
+
+%% Backward compatibility for test_server test suites.
+%% DO NOT USE IN NEW TEST SUITES.
+-define(line,).
+-define(t,test_server).
+-define(config,test_server:lookup_config).
diff --git a/lib/common_test/include/ct_event.hrl b/lib/common_test/include/ct_event.hrl
index 51c533297a..d539641b3e 100644
--- a/lib/common_test/include/ct_event.hrl
+++ b/lib/common_test/include/ct_event.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/priv/Makefile b/lib/common_test/priv/Makefile
index c9aff91b8c..c70bde45aa 100644
--- a/lib/common_test/priv/Makefile
+++ b/lib/common_test/priv/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2009. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/common_test/priv/Makefile.in b/lib/common_test/priv/Makefile.in
index 06a4e40ee9..924174e94a 100644
--- a/lib/common_test/priv/Makefile.in
+++ b/lib/common_test/priv/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/Makefile b/lib/common_test/src/Makefile
index 987345c679..0f9e044f9e 100644
--- a/lib/common_test/src/Makefile
+++ b/lib/common_test/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2014. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -79,7 +79,15 @@ MODULES= \
cth_conn_log \
ct_groups \
ct_property_test \
- ct_release_test
+ ct_release_test \
+ erl2html2 \
+ test_server_ctrl \
+ test_server_gl \
+ test_server_io \
+ test_server_node \
+ test_server \
+ test_server_sup
+
TARGET_MODULES= $(MODULES:%=$(EBIN)/%)
BEAM_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
@@ -101,8 +109,7 @@ DTD_FILES = \
# FLAGS
# ----------------------------------------------------
ERL_COMPILE_FLAGS += -pa ../ebin -I../include -I $(ERL_TOP)/lib/snmp/include/ \
- -I../../test_server/include -I../../xmerl/inc/ \
- -I $(ERL_TOP)/lib/kernel/include -Werror
+ -I../../xmerl/inc/ -I $(ERL_TOP)/lib/kernel/include -Werror
# ----------------------------------------------------
# Targets
diff --git a/lib/common_test/src/common_test.app.src b/lib/common_test/src/common_test.app.src
index d847907d75..77588af59b 100644
--- a/lib/common_test/src/common_test.app.src
+++ b/lib/common_test/src/common_test.app.src
@@ -1,7 +1,7 @@
% This is an -*- erlang -*- file.
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,6 +26,7 @@
ct_framework,
ct_ftp,
ct_gen_conn,
+ ct_groups,
ct_hooks,
ct_hooks_lock,
ct_logs,
@@ -36,6 +37,8 @@
ct_master_status,
ct_netconfc,
ct_conn_log_h,
+ ct_property_test,
+ ct_release_test,
ct_repeat,
ct_rpc,
ct_run,
@@ -45,6 +48,8 @@
ct_telnet,
ct_testspec,
ct_util,
+ ct_webtool,
+ ct_webtool_sup,
unix_telnet,
vts,
ct_config,
@@ -53,7 +58,14 @@
ct_slave,
cth_log_redirect,
cth_conn_log,
- cth_surefire
+ cth_surefire,
+ erl2html2,
+ test_server_ctrl,
+ test_server,
+ test_server_gl,
+ test_server_io,
+ test_server_node,
+ test_server_sup
]},
{registered, [ct_logs,
ct_util_server,
@@ -61,13 +73,27 @@
ct_make_ref,
vts,
ct_master,
- ct_master_logs]},
+ ct_master_logs,
+ test_server_ctrl,
+ test_server,
+ test_server_break_process]},
{applications, [kernel,stdlib]},
{env, []},
- {runtime_dependencies,["xmerl-1.3.8","tools-2.8",
- "test_server-3.9","stdlib-2.5","ssh-4.0",
- "snmp-5.1.2","sasl-2.4.2","runtime_tools-1.8.16",
- "kernel-4.0","inets-6.0","erts-7.0",
- "debugger-4.1","crypto-3.6","compiler-6.0",
- "observer-2.1"]}]}.
+ {runtime_dependencies,
+ ["compiler-6.0",
+ "crypto-3.6",
+ "debugger-4.1",
+ "erts-7.0",
+ "inets-6.0",
+ "kernel-4.0",
+ "observer-2.1",
+ "runtime_tools-1.8.16",
+ "sasl-2.4.2",
+ "snmp-5.1.2",
+ "ssh-4.0",
+ "stdlib-2.5",
+ "syntax_tools-1.7",
+ "tools-2.8",
+ "xmerl-1.3.8"
+ ]}]}.
diff --git a/lib/common_test/src/common_test.appup.src b/lib/common_test/src/common_test.appup.src
index a657e4a3a6..e98f947553 100644
--- a/lib/common_test/src/common_test.appup.src
+++ b/lib/common_test/src/common_test.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct.erl b/lib/common_test/src/ct.erl
index 22941668f2..d7ae81a5ce 100644
--- a/lib/common_test/src/ct.erl
+++ b/lib/common_test/src/ct.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -282,7 +282,7 @@ step(TestDir,Suite,Case,Opts) ->
%%% <c>&gt; ct_telnet:cmd(unix_telnet, "ls .").</c><br/>
%%% <c>{ok,["ls","file1 ...",...]}</c></p>
start_interactive() ->
- ct_util:start(interactive),
+ _ = ct_util:start(interactive),
ok.
%%%-----------------------------------------------------------------
diff --git a/lib/common_test/src/ct_config.erl b/lib/common_test/src/ct_config.erl
index 251204aa75..99de311570 100644
--- a/lib/common_test/src/ct_config.erl
+++ b/lib/common_test/src/ct_config.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -119,7 +119,8 @@ call(Msg) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
+ To ! {Ref, Result},
+ ok.
loop(StartDir) ->
receive
@@ -128,11 +129,11 @@ loop(StartDir) ->
return(From,Result),
loop(StartDir);
{{set_default_config,{Config,Scope}},From} ->
- set_config(Config,{true,Scope}),
+ _ = set_config(Config,{true,Scope}),
return(From,ok),
loop(StartDir);
{{set_default_config,{Name,Config,Scope}},From} ->
- set_config(Name,Config,{true,Scope}),
+ _ = set_config(Name,Config,{true,Scope}),
return(From,ok),
loop(StartDir);
{{delete_default_config,Scope},From} ->
@@ -149,7 +150,7 @@ loop(StartDir) ->
loop(StartDir);
{{stop},From} ->
ets:delete(?attr_table),
- file:set_cwd(StartDir),
+ ok = file:set_cwd(StartDir),
return(From,ok)
end.
@@ -257,7 +258,7 @@ read_config_files(Opts) ->
read_config_files_int([{Callback, File}|Files], FunToSave) ->
case Callback:read_config(File) of
{ok, Config} ->
- FunToSave(Config, Callback, File),
+ _ = FunToSave(Config, Callback, File),
read_config_files_int(Files, FunToSave);
{error, {ErrorName, ErrorDetail}} ->
{user_error, {ErrorName, File, ErrorDetail}};
@@ -267,6 +268,15 @@ read_config_files_int([{Callback, File}|Files], FunToSave) ->
read_config_files_int([], _FunToSave) ->
ok.
+
+read_config_files(ConfigFiles, FunToSave) ->
+ case read_config_files_int(ConfigFiles, FunToSave) of
+ {user_error, Error} ->
+ {error, Error};
+ ok ->
+ ok
+ end.
+
store_config(Config, Callback, File) when is_tuple(Config) ->
store_config([Config], Callback, File);
@@ -455,8 +465,12 @@ reload_conf(KeyOrName) ->
undefined;
HandlerList ->
HandlerList2 = lists:usort(HandlerList),
- read_config_files_int(HandlerList2, fun rewrite_config/3),
- get_config(KeyOrName)
+ case read_config_files(HandlerList2, fun rewrite_config/3) of
+ ok ->
+ get_config(KeyOrName);
+ Error ->
+ Error
+ end
end.
release_allocated() ->
@@ -490,16 +504,16 @@ associate(Name,_Key,Configs) ->
associate_int(Name,Configs,os:getenv("COMMON_TEST_ALIAS_TOP")).
associate_int(Name,Configs,"true") ->
- lists:map(fun({K,_Config}) ->
+ lists:foreach(fun({K,_Config}) ->
Cs = ets:match_object(
?attr_table,
#ct_conf{key=element(1,K),
name='_UNDEF',_='_'}),
[ets:insert(?attr_table,C#ct_conf{name=Name})
|| C <- Cs]
- end,Configs);
+ end,Configs);
associate_int(Name,Configs,_) ->
- lists:map(fun({K,Config}) ->
+ lists:foreach(fun({K,Config}) ->
Key = if is_tuple(K) -> element(1,K);
is_atom(K) -> K
end,
@@ -511,7 +525,7 @@ associate_int(Name,Configs,_) ->
[ets:insert(?attr_table,C#ct_conf{name=Name,
value=Config})
|| C <- Cs]
- end,Configs).
+ end,Configs).
@@ -576,7 +590,7 @@ encrypt_config_file(SrcFileName, EncryptFileName, {file,KeyFile}) ->
end;
encrypt_config_file(SrcFileName, EncryptFileName, {key,Key}) ->
- crypto:start(),
+ _ = crypto:start(),
{Key,IVec} = make_crypto_key(Key),
case file:read_file(SrcFileName) of
{ok,Bin0} ->
@@ -615,7 +629,7 @@ decrypt_config_file(EncryptFileName, TargetFileName, {file,KeyFile}) ->
end;
decrypt_config_file(EncryptFileName, TargetFileName, {key,Key}) ->
- crypto:start(),
+ _ = crypto:start(),
{Key,IVec} = make_crypto_key(Key),
case file:read_file(EncryptFileName) of
{ok,Bin} ->
@@ -694,11 +708,10 @@ make_crypto_key(String) ->
{[K1,K2,K3],IVec}.
random_bytes(N) ->
- random:seed(os:timestamp()),
random_bytes_1(N, []).
random_bytes_1(0, Acc) -> Acc;
-random_bytes_1(N, Acc) -> random_bytes_1(N-1, [random:uniform(255)|Acc]).
+random_bytes_1(N, Acc) -> random_bytes_1(N-1, [rand:uniform(255)|Acc]).
check_callback_load(Callback) ->
case code:is_loaded(Callback) of
@@ -779,14 +792,13 @@ prepare_config_list(Args) ->
% TODO: add logging of the loaded configuration file to the CT FW log!!!
add_config(Callback, []) ->
- read_config_files_int([{Callback, []}], fun store_config/3);
+ read_config_files([{Callback, []}], fun store_config/3);
add_config(Callback, [File|_Files]=Config) when is_list(File) ->
lists:foreach(fun(CfgStr) ->
- read_config_files_int([{Callback, CfgStr}], fun store_config/3) end,
+ read_config_files([{Callback, CfgStr}], fun store_config/3) end,
Config);
add_config(Callback, [C|_]=Config) when is_integer(C) ->
- read_config_files_int([{Callback, Config}], fun store_config/3),
- ok.
+ read_config_files([{Callback, Config}], fun store_config/3).
remove_config(Callback, Config) ->
ets:match_delete(?attr_table,
diff --git a/lib/common_test/src/ct_config_plain.erl b/lib/common_test/src/ct_config_plain.erl
index 810dec7c76..e72b55971b 100644
--- a/lib/common_test/src/ct_config_plain.erl
+++ b/lib/common_test/src/ct_config_plain.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_config_xml.erl b/lib/common_test/src/ct_config_xml.erl
index 593ae3de52..4343761707 100644
--- a/lib/common_test/src/ct_config_xml.erl
+++ b/lib/common_test/src/ct_config_xml.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_conn_log_h.erl b/lib/common_test/src/ct_conn_log_h.erl
index 034906a3ba..93e64c65fe 100644
--- a/lib/common_test/src/ct_conn_log_h.erl
+++ b/lib/common_test/src/ct_conn_log_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_cover.erl b/lib/common_test/src/ct_cover.erl
index 8e5ce9b245..c258516915 100644
--- a/lib/common_test/src/ct_cover.erl
+++ b/lib/common_test/src/ct_cover.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_event.erl b/lib/common_test/src/ct_event.erl
index 01beabaa73..5fa9f410bf 100644
--- a/lib/common_test/src/ct_event.erl
+++ b/lib/common_test/src/ct_event.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_framework.erl b/lib/common_test/src/ct_framework.erl
index 19a3a51b88..104515e57e 100644
--- a/lib/common_test/src/ct_framework.erl
+++ b/lib/common_test/src/ct_framework.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -128,7 +128,7 @@ init_tc1(?MODULE,_,error_in_suite,_,[Config0]) when is_list(Config0) ->
ct_event:notify(#event{name=tc_start,
node=node(),
data={?MODULE,error_in_suite}}),
- ct_suite_init(?MODULE,error_in_suite,[],Config0),
+ _ = ct_suite_init(?MODULE,error_in_suite,[],Config0),
case ?val(error,Config0) of
undefined ->
{fail,"unknown_error_in_suite"};
@@ -212,7 +212,7 @@ init_tc2(Mod,Suite,Func,HookFunc,SuiteInfo,MergeResult,Config) ->
%% timetrap must be handled before require
MergedInfo = timetrap_first(MergeResult, [], []),
%% tell logger to use specified style sheet
- case lists:keysearch(stylesheet,1,MergeResult++Config) of
+ _ = case lists:keysearch(stylesheet,1,MergeResult++Config) of
{value,{stylesheet,SSFile}} ->
ct_logs:set_stylesheet(Func,add_data_dir(SSFile,Config));
_ ->
@@ -632,10 +632,10 @@ try_set_default(Name,Key,Info,Where) ->
{_,[]} ->
no_default;
{'_UNDEF',_} ->
- [ct_config:set_default_config([CfgVal],Where) || CfgVal <- CfgElems],
+ _ = [ct_config:set_default_config([CfgVal],Where) || CfgVal <- CfgElems],
ok;
_ ->
- [ct_config:set_default_config(Name,[CfgVal],Where) || CfgVal <- CfgElems],
+ _ = [ct_config:set_default_config(Name,[CfgVal],Where) || CfgVal <- CfgElems],
ok
end.
@@ -1315,7 +1315,7 @@ report(What,Data) ->
%% top level test index page needs to be refreshed
TestName = filename:basename(?val(topdir, Data), ".logs"),
RunDir = ?val(rundir, Data),
- ct_logs:make_all_suites_index({TestName,RunDir}),
+ _ = ct_logs:make_all_suites_index({TestName,RunDir}),
ok;
tests_start ->
ok;
diff --git a/lib/common_test/src/ct_ftp.erl b/lib/common_test/src/ct_ftp.erl
index 616b1a8934..84e664b387 100644
--- a/lib/common_test/src/ct_ftp.erl
+++ b/lib/common_test/src/ct_ftp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -292,7 +292,7 @@ init(KeyOrName,{IP,Port},{Username,Password}) ->
end.
ftp_connect(IP,Port,Username,Password) ->
- inets:start(),
+ _ = inets:start(),
case inets:start(ftpc,[{host,IP},{port,Port}]) of
{ok,FtpPid} ->
case ftp:user(FtpPid,Username,Password) of
diff --git a/lib/common_test/src/ct_gen_conn.erl b/lib/common_test/src/ct_gen_conn.erl
index e28c89ab1d..8b59d3ab23 100644
--- a/lib/common_test/src/ct_gen_conn.erl
+++ b/lib/common_test/src/ct_gen_conn.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_groups.erl b/lib/common_test/src/ct_groups.erl
index 899d2bfb5a..1375e7dcc7 100644
--- a/lib/common_test/src/ct_groups.erl
+++ b/lib/common_test/src/ct_groups.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -402,12 +402,7 @@ expand(Mod, Name, Defs) ->
end.
make_all_conf(Dir, Mod, Props, TestSpec) ->
- case code:is_loaded(Mod) of
- false ->
- code:load_abs(filename:join(Dir,atom_to_list(Mod)));
- _ ->
- ok
- end,
+ _ = load_abs(Dir, Mod),
make_all_conf(Mod, Props, TestSpec).
make_all_conf(Mod, Props, TestSpec) ->
@@ -428,16 +423,19 @@ make_all_conf(Mod, Props, TestSpec) ->
end.
make_conf(Dir, Mod, Name, Props, TestSpec) ->
+ _ = load_abs(Dir, Mod),
+ make_conf(Mod, Name, Props, TestSpec).
+
+load_abs(Dir, Mod) ->
case code:is_loaded(Mod) of
false ->
code:load_abs(filename:join(Dir,atom_to_list(Mod)));
_ ->
ok
- end,
- make_conf(Mod, Name, Props, TestSpec).
+ end.
make_conf(Mod, Name, Props, TestSpec) ->
- case code:is_loaded(Mod) of
+ _ = case code:is_loaded(Mod) of
false ->
code:load_file(Mod);
_ ->
diff --git a/lib/common_test/src/ct_hooks.erl b/lib/common_test/src/ct_hooks.erl
index 90f36cbdc2..c9a4abb5ee 100644
--- a/lib/common_test/src/ct_hooks.erl
+++ b/lib/common_test/src/ct_hooks.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -408,7 +408,8 @@ catch_apply(M,F,A, Default) ->
maybe_start_locker(Mod,GroupName,Opts) ->
case lists:member(parallel,Opts) of
true ->
- {ok, _Pid} = ct_hooks_lock:start({Mod,GroupName});
+ {ok, _Pid} = ct_hooks_lock:start({Mod,GroupName}),
+ ok;
false ->
ok
end.
diff --git a/lib/common_test/src/ct_hooks_lock.erl b/lib/common_test/src/ct_hooks_lock.erl
index 1a058aa8ca..fea298e535 100644
--- a/lib/common_test/src/ct_hooks_lock.erl
+++ b/lib/common_test/src/ct_hooks_lock.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -82,7 +82,7 @@ init(Id) ->
%% @doc Handling call messages
handle_call({stop,Id}, _From, #state{ id = Id, requests = Reqs } = State) ->
- [gen_server:reply(Req, locker_stopped) || {Req,_ReqId} <- Reqs],
+ _ = [gen_server:reply(Req, locker_stopped) || {Req,_ReqId} <- Reqs],
{stop, normal, stopped, State};
handle_call({stop,_Id}, _From, State) ->
{reply, stopped, State};
diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl
index d87d26e5ba..9282a9f81d 100644
--- a/lib/common_test/src/ct_logs.erl
+++ b/lib/common_test/src/ct_logs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -137,7 +137,8 @@ close(Info, StartDir) ->
%% so we need to use a local copy of the log cache data
LogCacheBin =
case make_last_run_index() of
- {error,_} -> % log server not responding
+ {error, Reason} -> % log server not responding
+ io:format("Warning! ct_logs not responding: ~p~n", [Reason]),
undefined;
LCB ->
LCB
@@ -149,7 +150,7 @@ close(Info, StartDir) ->
ok;
CacheBin ->
%% save final version of the log cache to file
- file:write_file(?log_cache_name,CacheBin),
+ _ = file:write_file(?log_cache_name,CacheBin),
put(ct_log_cache,undefined)
end
end,
@@ -175,12 +176,12 @@ close(Info, StartDir) ->
Error ->
io:format("Warning! Cleanup failed: ~p~n", [Error])
end,
- make_all_suites_index(stop),
+ _ = make_all_suites_index(stop),
make_all_runs_index(stop),
Cache2File();
true ->
- file:set_cwd(".."),
- make_all_suites_index(stop),
+ ok = file:set_cwd(".."),
+ _ = make_all_suites_index(stop),
make_all_runs_index(stop),
Cache2File(),
case ct_util:get_profile_data(browser, StartDir) of
@@ -240,7 +241,7 @@ call(Msg) ->
Pid ->
MRef = erlang:monitor(process,Pid),
Ref = make_ref(),
- ?MODULE ! {Msg,{self(),Ref}},
+ Pid ! {Msg,{self(),Ref}},
receive
{Ref, Result} ->
erlang:demonitor(MRef, [flush]),
@@ -251,16 +252,30 @@ call(Msg) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
+ To ! {Ref, Result},
+ ok.
cast(Msg) ->
case whereis(?MODULE) of
undefined ->
- {error,does_not_exist};
+ io:format("Warning: ct_logs not started~n"),
+ {_,_,_,_,_,_,Content,_} = Msg,
+ FormatArgs = get_format_args(Content),
+ _ = [io:format(Format, Args) || {Format, Args} <- FormatArgs],
+ ok;
_Pid ->
- ?MODULE ! Msg
+ ?MODULE ! Msg,
+ ok
end.
+get_format_args(Content) ->
+ lists:map(fun(C) ->
+ case C of
+ {_, FA, _} -> FA;
+ {_, _} -> C
+ end
+ end, Content).
+
%%%-----------------------------------------------------------------
%%% @spec init_tc(RefreshLog) -> ok
%%%
@@ -269,7 +284,7 @@ cast(Msg) ->
%%% <p>This function is called by ct_framework:init_tc/3</p>
init_tc(RefreshLog) ->
call({init_tc,self(),group_leader(),RefreshLog}),
- io:format(["$tc_html",xhtml("", "<br />")]),
+ tc_io_format(group_leader(), xhtml("", "<br />"), []),
ok.
%%%-----------------------------------------------------------------
@@ -644,7 +659,7 @@ logger(Parent, Mode, Verbosity) ->
end,
%%! <---
- file:make_dir(Dir),
+ _ = file:make_dir(Dir),
AbsDir = ?abs(Dir),
put(ct_run_dir, AbsDir),
@@ -684,7 +699,7 @@ logger(Parent, Mode, Verbosity) ->
end
end,
- test_server_io:start_link(),
+ _ = test_server_io:start_link(),
MiscIoName = filename:join(Dir, ?misc_io_log),
{ok,MiscIoFd} = file:open(MiscIoName,
[write,{encoding,utf8}]),
@@ -714,13 +729,13 @@ logger(Parent, Mode, Verbosity) ->
ct_event:notify(#event{name=start_logging,node=node(),
data=AbsDir}),
make_all_runs_index(start),
- make_all_suites_index(start),
+ _ = make_all_suites_index(start),
case Mode of
interactive -> interactive_link();
_ -> ok
end,
- file:set_cwd(Dir),
- make_last_run_index(Time),
+ ok = file:set_cwd(Dir),
+ _ = make_last_run_index(Time),
CtLogFd = open_ctlog(?misc_io_log),
io:format(CtLogFd,int_header()++int_footer(),
[log_timestamp(?now),"Common Test Logger started"]),
@@ -734,13 +749,13 @@ logger(Parent, Mode, Verbosity) ->
GenLvl -> io:format(CtLogFd, "~-25s~3w~n",
["general level",GenLvl])
end,
- [begin put({verbosity,Cat},VLvl),
- if Cat == '$unspecified' ->
+ _ = [begin put({verbosity,Cat},VLvl),
+ if Cat == '$unspecified' ->
ok;
- true ->
+ true ->
io:format(CtLogFd, "~-25w~3w~n", [Cat,VLvl])
- end
- end || {Cat,VLvl} <- Verbosity],
+ end
+ end || {Cat,VLvl} <- Verbosity],
io:nl(CtLogFd),
TcEscChars = case application:get_env(common_test, esc_chars) of
{ok,ECBool} -> ECBool;
@@ -813,10 +828,11 @@ logger_loop(State) ->
%% make sure no IO for this test case from the
%% CT logger gets rejected
test_server:permit_io(GL, self()),
- print_style(GL,GL,State#logger_state.stylesheet),
+ IoFormat = fun tc_io_format/3,
+ print_style(GL, IoFormat, State#logger_state.stylesheet),
set_evmgr_gl(GL),
TCGLs = add_tc_gl(TCPid,GL,State),
- if not RefreshLog ->
+ _ = if not RefreshLog ->
ok;
true ->
make_last_run_index(State#logger_state.start_time)
@@ -843,7 +859,7 @@ logger_loop(State) ->
return(From,{ok,filename:basename(State#logger_state.log_dir)}),
logger_loop(State);
{make_last_run_index,From} ->
- make_last_run_index(State#logger_state.start_time),
+ _ = make_last_run_index(State#logger_state.start_time),
return(From,get(ct_log_cache)),
logger_loop(State);
{set_stylesheet,_,SSFile} when State#logger_state.stylesheet ==
@@ -944,7 +960,7 @@ print_to_log(sync, FromPid, Category, TCGL, Content, EscChars, State) ->
if FromPid /= TCGL ->
IoFun = create_io_fun(FromPid, CtLogFd, EscChars),
IoList = lists:foldl(IoFun, [], Content),
- try io:format(TCGL,["$tc_html","~ts"], [IoList]) of
+ try tc_io_format(TCGL, "~ts", [IoList]) of
ok -> ok
catch
_:_ ->
@@ -975,7 +991,7 @@ print_to_log(async, FromPid, Category, TCGL, Content, EscChars, State) ->
case erlang:is_process_alive(TCGL) of
true ->
- try io:format(TCGL, ["$tc_html","~ts"],
+ try tc_io_format(TCGL, "~ts",
[lists:foldl(IoFun,[],Content)]) of
_ -> ok
catch
@@ -1126,27 +1142,25 @@ open_ctlog(MiscIoName) ->
"View I/O logged after the test run</a></li>\n</ul>\n",
[MiscIoName,MiscIoName]),
- print_style(Fd,group_leader(),undefined),
+ print_style(Fd, fun io:format/3, undefined),
io:format(Fd,
xhtml("<br><h2>Progress Log</h2>\n<pre>\n",
"<br />\n<h4>PROGRESS LOG</h4>\n<pre>\n"), []),
Fd.
-print_style(Fd,GL,undefined) ->
+print_style(Fd, IoFormat, undefined) ->
case basic_html() of
true ->
Style = "<style>\n
div.ct_internal { background:lightgrey; color:black; }\n
div.default { background:lightgreen; color:black; }\n
</style>\n",
- if Fd == GL -> io:format(["$tc_html",Style], []);
- true -> io:format(Fd, Style, [])
- end;
+ IoFormat(Fd, Style, []);
_ ->
ok
end;
-print_style(Fd,GL,StyleSheet) ->
+print_style(Fd, IoFormat, StyleSheet) ->
case file:read_file(StyleSheet) of
{ok,Bin} ->
Str = b2s(Bin,encoding(StyleSheet)),
@@ -1159,35 +1173,54 @@ print_style(Fd,GL,StyleSheet) ->
N1 -> N1
end,
if (Pos0 == 0) and (Pos1 /= 0) ->
- print_style_error(Fd,GL,StyleSheet,missing_style_start_tag);
+ print_style_error(Fd, IoFormat,
+ StyleSheet, missing_style_start_tag);
(Pos0 /= 0) and (Pos1 == 0) ->
- print_style_error(Fd,GL,StyleSheet,missing_style_end_tag);
+ print_style_error(Fd, IoFormat,
+ StyleSheet,missing_style_end_tag);
Pos0 /= 0 ->
Style = string:sub_string(Str,Pos0,Pos1+7),
- if Fd == GL -> io:format(Fd,["$tc_html","~ts\n"],[Style]);
- true -> io:format(Fd,"~ts\n",[Style])
- end;
+ IoFormat(Fd,"~ts\n",[Style]);
Pos0 == 0 ->
- if Fd == GL -> io:format(Fd,["$tc_html","<style>\n~ts</style>\n"],[Str]);
- true -> io:format(Fd,"<style>\n~ts</style>\n",[Str])
- end
+ IoFormat(Fd,"<style>\n~ts</style>\n",[Str])
end;
{error,Reason} ->
- print_style_error(Fd,GL,StyleSheet,Reason)
+ print_style_error(Fd,IoFormat,StyleSheet,Reason)
end.
-print_style_error(Fd,GL,StyleSheet,Reason) ->
+print_style_error(Fd, IoFormat, StyleSheet, Reason) ->
IO = io_lib:format("\n<!-- Failed to load stylesheet ~ts: ~p -->\n",
[StyleSheet,Reason]),
- if Fd == GL -> io:format(Fd,["$tc_html",IO],[]);
- true -> io:format(Fd,IO,[])
- end,
- print_style(Fd,GL,undefined).
+ IoFormat(Fd, IO, []),
+ print_style(Fd, IoFormat, undefined).
close_ctlog(Fd) ->
io:format(Fd, "\n</pre>\n", []),
io:format(Fd, [xhtml("<br><br>\n", "<br /><br />\n") | footer()], []),
- file:close(Fd).
+ ok = file:close(Fd).
+
+%%%-----------------------------------------------------------------
+%%% tc_io_format/3
+%%% Tell common_test's IO server (group leader) not to escape
+%%% HTML characters.
+
+-spec tc_io_format(io:device(), io:format(), [term()]) -> 'ok'.
+
+tc_io_format(Fd, Format0, Args) ->
+ %% We know that the specially wrapped format string is handled
+ %% by our IO server, but Dialyzer does not and would tell us
+ %% that the call to io:format/3 would fail. Therefore, we must
+ %% fool dialyzer.
+
+ Format = case cloaked_true() of
+ true -> ["$tc_html",Format0];
+ false -> Format0 %Never happens.
+ end,
+ io:format(Fd, Format, Args).
+
+%% Return 'true', but let dialyzer think that a boolean is returned.
+cloaked_true() ->
+ is_process_alive(self()).
%%%-----------------------------------------------------------------
@@ -1768,7 +1801,7 @@ count_cases(Dir) ->
%% file yet.
{0,0,0,0};
Summary ->
- write_summary(SumFile, Summary),
+ _ = write_summary(SumFile, Summary),
Summary
end;
{error, Reason} ->
@@ -1868,7 +1901,7 @@ make_all_runs_index(When) ->
AbsName = ?abs(?all_runs_name),
notify_and_lock_file(AbsName),
if When == start -> ok;
- true -> io:put_chars("Updating " ++ AbsName ++ "... ")
+ true -> io:put_chars("Updating " ++ AbsName ++ " ... ")
end,
%% check if log cache should be used, and if it exists
@@ -2083,7 +2116,7 @@ interactive_link() ->
"</body>\n",
"</html>\n"
],
- file:write_file("last_interactive.html",unicode:characters_to_binary(Body)),
+ _ = file:write_file("last_interactive.html",unicode:characters_to_binary(Body)),
io:format("~n~nUpdated ~ts\n"
"Any CT activities will be logged here\n",
[?abs("last_interactive.html")]).
@@ -2214,9 +2247,9 @@ runentry(Dir, _, _) ->
write_totals_file(Name,Label,Logs,Totals) ->
AbsName = ?abs(Name),
notify_and_lock_file(AbsName),
- force_write_file(AbsName,
- term_to_binary({atom_to_list(node()),
- Label,Logs,Totals})),
+ _ = force_write_file(AbsName,
+ term_to_binary({atom_to_list(node()),
+ Label,Logs,Totals})),
notify_and_unlock_file(AbsName).
%% this function needs to convert from old formats to new so that old
@@ -2261,7 +2294,7 @@ read_totals_file(Name) ->
Result.
force_write_file(Name,Contents) ->
- force_delete(Name),
+ _ = force_delete(Name),
file:write_file(Name,Contents).
force_delete(Name) ->
@@ -2607,7 +2640,7 @@ update_tests_in_cache(TempData,LogCache=#log_cache{tests=Tests}) ->
make_all_suites_index1(When, AbsIndexName, AllTestLogDirs) ->
IndexName = ?index_name,
if When == start -> ok;
- true -> io:put_chars("Updating " ++ AbsIndexName ++ "... ")
+ true -> io:put_chars("Updating " ++ AbsIndexName ++ " ... ")
end,
case catch make_all_suites_index2(IndexName, AllTestLogDirs) of
{'EXIT', Reason} ->
@@ -2812,18 +2845,18 @@ get_cache_data({ok,CacheBin}) ->
true ->
{ok,CacheRec};
false ->
- file:delete(?log_cache_name),
+ _ = file:delete(?log_cache_name),
{error,old_cache_file}
end;
_ ->
- file:delete(?log_cache_name),
+ _ = file:delete(?log_cache_name),
{error,invalid_cache_file}
end;
get_cache_data(NoCache) ->
NoCache.
cache_vsn() ->
- application:load(common_test),
+ _ = application:load(common_test),
case application:get_key(common_test,vsn) of
{ok,VSN} ->
VSN;
diff --git a/lib/common_test/src/ct_make.erl b/lib/common_test/src/ct_make.erl
index f4b81a0ef6..e7a9cfa843 100644
--- a/lib/common_test/src/ct_make.erl
+++ b/lib/common_test/src/ct_make.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -324,10 +324,11 @@ check_includes(File, IncludePath, ObjMTime) ->
end.
check_includes2(Epp, File, ObjMTime) ->
+ A1 = erl_anno:new(1),
case epp:parse_erl_form(Epp) of
- {ok, {attribute, 1, file, {File, 1}}} ->
+ {ok, {attribute, A1, file, {File, A1}}} ->
check_includes2(Epp, File, ObjMTime);
- {ok, {attribute, 1, file, {IncFile, 1}}} ->
+ {ok, {attribute, A1, file, {IncFile, A1}}} ->
case file:read_file_info(IncFile) of
{ok, #file_info{mtime=MTime}} when MTime>ObjMTime ->
epp:close(Epp),
diff --git a/lib/common_test/src/ct_master.erl b/lib/common_test/src/ct_master.erl
index d24edad2eb..4eef27d2a5 100644
--- a/lib/common_test/src/ct_master.erl
+++ b/lib/common_test/src/ct_master.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -376,7 +376,7 @@ init_master(Parent,NodeOptsList,EvHandlers,MasterLogDir,LogDirs,
end,
%% start master event manager and add default handler
- ct_master_event:start_link(),
+ {ok, _} = start_ct_master_event(),
ct_master_event:add_handler(),
%% add user handlers for master event manager
Add = fun({H,Args}) ->
@@ -398,6 +398,14 @@ init_master(Parent,NodeOptsList,EvHandlers,MasterLogDir,LogDirs,
end,
init_master1(Parent,NodeOptsList,InitOptions,LogDirs).
+start_ct_master_event() ->
+ case ct_master_event:start_link() of
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Else ->
+ Else
+ end.
+
init_master1(Parent,NodeOptsList,InitOptions,LogDirs) ->
{Inaccessible,NodeOptsList1,InitOptions1} = init_nodes(NodeOptsList,
InitOptions),
@@ -658,7 +666,7 @@ refresh_logs([D|Dirs],Refreshed) ->
{ok,Cwd} = file:get_cwd(),
case catch ct_run:refresh_logs(D) of
{'EXIT',Reason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
refresh_logs(Dirs,[{D,{error,Reason}}|Refreshed]);
Result ->
refresh_logs(Dirs,[{D,Result}|Refreshed])
@@ -701,7 +709,7 @@ init_node_ctrl(MasterPid,Cookie,Opts) ->
end,
%% start a local event manager
- ct_event:start_link(),
+ {ok, _} = start_ct_event(),
ct_event:add_handler([{master,MasterPid}]),
%% log("Running test with options: ~p~n", [Opts]),
@@ -721,6 +729,14 @@ init_node_ctrl(MasterPid,Cookie,Opts) ->
"Can't report result!~n~n", [MasterNode])
end.
+start_ct_event() ->
+ case ct_event:start_link() of
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Else ->
+ Else
+ end.
+
%%%-----------------------------------------------------------------
%%% Event handling
%%%-----------------------------------------------------------------
@@ -778,7 +794,7 @@ reply(Result,To) ->
ok.
init_nodes(NodeOptions, InitOptions)->
- ping_nodes(NodeOptions),
+ _ = ping_nodes(NodeOptions),
start_nodes(InitOptions),
eval_on_nodes(InitOptions),
{Inaccessible, NodeOptions1}=ping_nodes(NodeOptions),
diff --git a/lib/common_test/src/ct_master_event.erl b/lib/common_test/src/ct_master_event.erl
index 0d7d220fd0..d28ef42c20 100644
--- a/lib/common_test/src/ct_master_event.erl
+++ b/lib/common_test/src/ct_master_event.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_master_logs.erl b/lib/common_test/src/ct_master_logs.erl
index 54190a8254..52003f752d 100644
--- a/lib/common_test/src/ct_master_logs.erl
+++ b/lib/common_test/src/ct_master_logs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -91,8 +91,8 @@ init(Parent,LogDir,Nodes) ->
Time = calendar:local_time(),
RunDir = make_dirname(Time),
RunDirAbs = filename:join(LogDir,RunDir),
- file:make_dir(RunDirAbs),
- write_details_file(RunDirAbs,{node(),Nodes}),
+ ok = make_dir(RunDirAbs),
+ _ = write_details_file(RunDirAbs,{node(),Nodes}),
case basic_html() of
true ->
@@ -128,7 +128,7 @@ init(Parent,LogDir,Nodes) ->
end
end,
- make_all_runs_index(LogDir),
+ _ = make_all_runs_index(LogDir),
CtLogFd = open_ct_master_log(RunDirAbs),
NodeStr =
lists:flatten(lists:map(fun(N) ->
@@ -181,7 +181,7 @@ loop(State) ->
lists:foreach(Fun,List),
loop(State);
{make_all_runs_index,From} ->
- make_all_runs_index(State#state.logdir),
+ _ = make_all_runs_index(State#state.logdir),
return(From,State#state.logdir),
loop(State);
{{nodedir,Node,RunDir},From} ->
@@ -189,12 +189,12 @@ loop(State) ->
return(From,ok),
loop(State);
stop ->
- make_all_runs_index(State#state.logdir),
+ _ = make_all_runs_index(State#state.logdir),
io:format(State#state.log_fd,
int_header()++int_footer(),
[log_timestamp(?now),"Finished!"]),
- close_ct_master_log(State#state.log_fd),
- close_nodedir_index(State#state.nodedir_ix_fd),
+ _ = close_ct_master_log(State#state.log_fd),
+ _ = close_nodedir_index(State#state.nodedir_ix_fd),
ok
end.
@@ -496,7 +496,7 @@ make_relative(Dir) ->
ct_logs:make_relative(Dir).
force_write_file(Name,Contents) ->
- force_delete(Name),
+ _ = force_delete(Name),
file:write_file(Name,Contents).
force_delete(Name) ->
@@ -534,13 +534,34 @@ call(Msg) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
+ To ! {Ref, Result},
+ ok.
cast(Msg) ->
case whereis(?MODULE) of
undefined ->
- {error,does_not_exist};
+ io:format("Warning: ct_master_logs not started~n"),
+ {_,_,Content} = Msg,
+ FormatArgs = get_format_args(Content),
+ _ = [io:format(Format, Args) || {Format, Args} <- FormatArgs],
+ ok;
_Pid ->
- ?MODULE ! Msg
+ ?MODULE ! Msg,
+ ok
end.
+get_format_args(Content) ->
+ lists:map(fun(C) ->
+ case C of
+ {_, FA, _} -> FA;
+ _ -> C
+ end
+ end, Content).
+
+make_dir(Dir) ->
+ case file:make_dir(Dir) of
+ {error, eexist} ->
+ ok;
+ Else ->
+ Else
+ end.
diff --git a/lib/common_test/src/ct_master_status.erl b/lib/common_test/src/ct_master_status.erl
index 6a3572b261..7d3e54e645 100644
--- a/lib/common_test/src/ct_master_status.erl
+++ b/lib/common_test/src/ct_master_status.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_netconfc.erl b/lib/common_test/src/ct_netconfc.erl
index 8812514ad9..ff45407fe0 100644
--- a/lib/common_test/src/ct_netconfc.erl
+++ b/lib/common_test/src/ct_netconfc.erl
@@ -1,7 +1,7 @@
%%----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_netconfc.hrl b/lib/common_test/src/ct_netconfc.hrl
index e4746fe8b7..5eeeafa318 100644
--- a/lib/common_test/src/ct_netconfc.hrl
+++ b/lib/common_test/src/ct_netconfc.hrl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_property_test.erl b/lib/common_test/src/ct_property_test.erl
index 5ee7435695..12c3d726d3 100644
--- a/lib/common_test/src/ct_property_test.erl
+++ b/lib/common_test/src/ct_property_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -161,7 +161,9 @@ property_tests_path(Dir, Config) ->
add_code_pathz(Dir) ->
case lists:member(Dir, code:get_path()) of
true -> ok;
- false -> code:add_pathz(Dir)
+ false ->
+ true = code:add_pathz(Dir),
+ ok
end.
compile_tests(Path, ToolModule) ->
@@ -171,10 +173,10 @@ compile_tests(Path, ToolModule) ->
{ok,FileNames} = file:list_dir("."),
BeamFiles = [F || F<-FileNames,
filename:extension(F) == ".beam"],
- [file:delete(F) || F<-BeamFiles],
+ _ = [file:delete(F) || F<-BeamFiles],
ct:pal("Compiling in ~p:~n Deleted ~p~n MacroDefs=~p",[Path,BeamFiles,MacroDefs]),
Result = make:all([load|MacroDefs]),
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
Result.
diff --git a/lib/common_test/src/ct_release_test.erl b/lib/common_test/src/ct_release_test.erl
index 5d7e945cc3..d783f8d04e 100644
--- a/lib/common_test/src/ct_release_test.erl
+++ b/lib/common_test/src/ct_release_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -342,7 +342,7 @@ cleanup(Config) ->
end
end,
AllNodes),
- [rpc:call(Node,erlang,halt,[]) || Node <- Nodes],
+ _ = [rpc:call(Node,erlang,halt,[]) || Node <- Nodes],
Config.
%%-----------------------------------------------------------------
@@ -552,14 +552,14 @@ target_system(Apps,CreateDir,InstallDir,{FromVsn,_,AllAppsVsns,Path}) ->
%% Add bin and log dirs
BinDir = filename:join([InstallDir, "bin"]),
- file:make_dir(BinDir),
- file:make_dir(filename:join(InstallDir,"log")),
+ ok = make_dir(BinDir),
+ ok = make_dir(filename:join(InstallDir,"log")),
%% Delete start scripts - they will be added later
ErtsBinDir = filename:join([InstallDir, "erts-" ++ ErtsVsn, "bin"]),
- file:delete(filename:join([ErtsBinDir, "erl"])),
- file:delete(filename:join([ErtsBinDir, "start"])),
- file:delete(filename:join([ErtsBinDir, "start_erl"])),
+ ok = delete_file(filename:join([ErtsBinDir, "erl"])),
+ ok = delete_file(filename:join([ErtsBinDir, "start"])),
+ ok = delete_file(filename:join([ErtsBinDir, "start_erl"])),
%% Copy .boot to bin/start.boot
copy_file(RelName++".boot",filename:join([BinDir, "start.boot"])),
@@ -655,10 +655,6 @@ do_upgrade({Cb,InitState},FromVsn,FromAppsVsns,ToRel,ToAppsVsns,InstallDir) ->
Start = filename:join([InstallDir,bin,start]),
{ok,Node} = start_node(Start,FromVsn,FromAppsVsns),
- %% Add path to this module, to allow calls to get_appup/2
- Dir = filename:dirname(code:which(?MODULE)),
- _ = rpc:call(Node,code,add_pathz,[Dir]),
-
ct:log("Node started: ~p",[Node]),
CtData = #ct_data{from = [{A,V,code:lib_dir(A)} || {A,V} <- FromAppsVsns],
to=[{A,V,code:lib_dir(A)} || {A,V} <- ToAppsVsns]},
@@ -684,7 +680,7 @@ do_upgrade({Cb,InitState},FromVsn,FromAppsVsns,ToRel,ToAppsVsns,InstallDir) ->
%% even if install_release returned {ok,...} there might be an
%% emulator restart (instruction restart_emulator), so we must
%% always make sure the node is running.
- wait_node_up(current,ToVsn,ToAppsVsns),
+ {ok, _} = wait_node_up(current,ToVsn,ToAppsVsns),
[{"OTP upgrade test",ToVsn,_,current},
{"OTP upgrade test",FromVsn,_,permanent}] =
@@ -707,7 +703,7 @@ do_upgrade({Cb,InitState},FromVsn,FromAppsVsns,ToRel,ToAppsVsns,InstallDir) ->
%% even if install_release returned {ok,...} there might be an
%% emulator restart (instruction restart_emulator), so we must
%% always make sure the node is running.
- wait_node_up(current,FromVsn,FromAppsVsns),
+ {ok, _} = wait_node_up(current,FromVsn,FromAppsVsns),
[{"OTP upgrade test",ToVsn,_,permanent},
{"OTP upgrade test",FromVsn,_,current}] =
@@ -766,7 +762,7 @@ create_relfile(AppsVsns,CreateDir,RelName0,RelVsn) ->
%% Should test tools really be included? Some library functions
%% here could be used by callback, but not everything since
%% processes of these applications will not be running.
- TestToolAppsVsns0 = get_vsns([test_server,common_test]),
+ TestToolAppsVsns0 = get_vsns([common_test]),
TestToolAppsVsns =
[{A,V,none} || {A,V} <- TestToolAppsVsns0,
false == lists:keymember(A,1,AllAppsVsns0)],
@@ -858,7 +854,7 @@ copy_file(Src, Dest, Opts) ->
case lists:member(preserve, Opts) of
true ->
{ok, FileInfo} = file:read_file_info(Src),
- file:write_file_info(Dest, FileInfo);
+ ok = file:write_file_info(Dest, FileInfo);
false ->
ok
end.
@@ -866,8 +862,8 @@ copy_file(Src, Dest, Opts) ->
write_file(FName, Conts) ->
Enc = file:native_name_encoding(),
{ok, Fd} = file:open(FName, [write]),
- file:write(Fd, unicode:characters_to_binary(Conts,Enc,Enc)),
- file:close(Fd).
+ ok = file:write(Fd, unicode:characters_to_binary(Conts,Enc,Enc)),
+ ok = file:close(Fd).
%% Substitute all occurrences of %Var% for Val in the given scripts
subst_src_scripts(Scripts, SrcDir, DestDir, Vars, Opts) ->
@@ -948,3 +944,19 @@ rm_rf(Dir) ->
_ ->
ok
end.
+
+delete_file(FileName) ->
+ case file:delete(FileName) of
+ {error, enoent} ->
+ ok;
+ Else ->
+ Else
+ end.
+
+make_dir(Dir) ->
+ case file:make_dir(Dir) of
+ {error, eexist} ->
+ ok;
+ Else ->
+ Else
+ end.
diff --git a/lib/common_test/src/ct_repeat.erl b/lib/common_test/src/ct_repeat.erl
index 1cb32f5bcd..dac596a135 100644
--- a/lib/common_test/src/ct_repeat.erl
+++ b/lib/common_test/src/ct_repeat.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,13 +44,13 @@ loop_test(If,Args) when is_list(Args) ->
false;
E = {error,_} ->
io:format("Common Test error: ~p\n\n",[E]),
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
E;
{repeat,N} ->
io:format("\nCommon Test: Will repeat tests ~w times.\n\n",[N]),
Args1 = [{loop_info,[{repeat,1,N}]} | Args],
Result = loop(If,repeat,0,N,undefined,Args1,undefined,[]),
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
Result;
{stop_time,StopTime} ->
Result =
@@ -76,7 +76,7 @@ loop_test(If,Args) when is_list(Args) ->
Args1 = [{loop_info,[{stop_time,Secs,StopTime,1}]} | Args],
loop(If,stop_time,0,Secs,StopTime,Args1,TPid,[])
end,
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
Result
end.
diff --git a/lib/common_test/src/ct_rpc.erl b/lib/common_test/src/ct_rpc.erl
index 73520b3dd5..b4a0bc9d74 100644
--- a/lib/common_test/src/ct_rpc.erl
+++ b/lib/common_test/src/ct_rpc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -81,7 +81,7 @@ app_node(App, [], _, _) ->
app_node(App, _Candidates = [CandidateNode | Nodes], FailOnBadRPC, Cookie) ->
Cookie0 = set_the_cookie(Cookie),
Result = rpc:call(CandidateNode, application, which_applications, []),
- set_the_cookie(Cookie0),
+ _ = set_the_cookie(Cookie0),
case Result of
{badrpc,Reason} when FailOnBadRPC == true ->
ct:fail({Reason,CandidateNode});
@@ -145,7 +145,7 @@ call({Fun, FunArgs}, Module, Function, Args, TimeOut, Cookie) ->
call(Node, Module, Function, Args, TimeOut, Cookie) when is_atom(Node) ->
Cookie0 = set_the_cookie(Cookie),
Result = rpc:call(Node, Module, Function, Args, TimeOut),
- set_the_cookie(Cookie0),
+ _ = set_the_cookie(Cookie0),
Result.
%%% @spec cast(Node, Module, Function, Args) -> ok
@@ -190,7 +190,7 @@ cast({Fun, FunArgs}, Module, Function, Args, Cookie) ->
cast(Node, Module, Function, Args, Cookie) when is_atom(Node) ->
Cookie0 = set_the_cookie(Cookie),
true = rpc:cast(Node, Module, Function, Args),
- set_the_cookie(Cookie0),
+ _ = set_the_cookie(Cookie0),
ok.
diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl
index a0f9f47b41..fbb9c7ab60 100644
--- a/lib/common_test/src/ct_run.erl
+++ b/lib/common_test/src/ct_run.erl
@@ -400,21 +400,21 @@ run_or_refresh(Opts = #opts{logdir = LogDir}, Args) ->
[RefreshDir] -> ?abs(RefreshDir)
end,
{ok,Cwd} = file:get_cwd(),
- file:set_cwd(LogDir1),
+ ok = file:set_cwd(LogDir1),
%% give the shell time to print version etc
timer:sleep(500),
io:nl(),
case catch ct_logs:make_all_runs_index(refresh) of
{'EXIT',ARReason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,{all_runs_index,ARReason}};
_ ->
case catch ct_logs:make_all_suites_index(refresh) of
{'EXIT',ASReason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,{all_suites_index,ASReason}};
_ ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
io:format("Logs in ~ts refreshed!~n~n",
[LogDir1]),
timer:sleep(500), % time to flush io before quitting
@@ -756,8 +756,8 @@ script_start4(#opts{label = Label, profile = Profile,
{ct_hooks, CTHooks},
{enable_builtin_hooks,EnableBuiltinHooks}]) of
ok ->
- ct_util:start(interactive, LogDir,
- add_verbosity_defaults(Verbosity)),
+ _ = ct_util:start(interactive, LogDir,
+ add_verbosity_defaults(Verbosity)),
ct_util:set_testdata({logopts, LogOpts}),
log_ts_names(Specs),
io:nl(),
@@ -901,9 +901,8 @@ install(Opts, LogDir) ->
VarFile = variables_file_name(LogDir),
case file:open(VarFile, [write]) of
{ok,Fd} ->
- [io:format(Fd, "~p.\n", [Opt]) || Opt <- ConfOpts ],
- file:close(Fd),
- ok;
+ _ = [io:format(Fd, "~p.\n", [Opt]) || Opt <- ConfOpts],
+ ok = file:close(Fd);
{error,Reason} ->
io:format("CT failed to install configuration data. Please "
"verify that the log directory exists and that "
@@ -960,7 +959,7 @@ run_test1(StartOpts) when is_list(StartOpts) ->
false ->
case catch run_test2(StartOpts) of
{'EXIT',Reason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,Reason};
Result ->
Result
@@ -971,7 +970,7 @@ run_test1(StartOpts) when is_list(StartOpts) ->
stop_trace(Tracing),
exit(Res);
RefreshDir ->
- refresh_logs(?abs(RefreshDir)),
+ ok = refresh_logs(?abs(RefreshDir)),
exit(done)
end.
@@ -1209,7 +1208,6 @@ run_all_specs([], _, _, TotResult) ->
end;
run_all_specs([{Specs,TS} | TSs], Opts, StartOpts, TotResult) ->
- log_ts_names(Specs),
Combined = #opts{config = TSConfig} = combine_test_opts(TS, Specs, Opts),
AllConfig = merge_vals([Opts#opts.config, TSConfig]),
try run_one_spec(TS,
@@ -1430,7 +1428,7 @@ run_testspec1(TestSpec) ->
io:format("~nCommon Test starting (cwd is ~ts)~n~n", [Cwd]),
case catch run_testspec2(TestSpec) of
{'EXIT',Reason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
exit({error,Reason});
Result ->
exit(Result)
@@ -1562,15 +1560,15 @@ refresh_logs(LogDir) ->
_ ->
case catch ct_logs:make_all_suites_index(refresh) of
{'EXIT',ASReason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,{all_suites_index,ASReason}};
_ ->
case catch ct_logs:make_all_runs_index(refresh) of
{'EXIT',ARReason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,{all_runs_index,ARReason}};
_ ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
io:format("Logs in ~ts refreshed!~n",[LogDir]),
ok
end
@@ -1610,22 +1608,34 @@ delistify(E) -> E.
%%% @hidden
%%% @equiv ct:run/3
run(TestDir, Suite, Cases) ->
- install([]),
- reformat_result(catch do_run(tests(TestDir, Suite, Cases), [])).
+ case install([]) of
+ ok ->
+ reformat_result(catch do_run(tests(TestDir, Suite, Cases), []));
+ Error ->
+ Error
+ end.
%%%-----------------------------------------------------------------
%%% @hidden
%%% @equiv ct:run/2
run(TestDir, Suite) when is_list(TestDir), is_integer(hd(TestDir)) ->
- install([]),
- reformat_result(catch do_run(tests(TestDir, Suite), [])).
+ case install([]) of
+ ok ->
+ reformat_result(catch do_run(tests(TestDir, Suite), []));
+ Error ->
+ Error
+ end.
%%%-----------------------------------------------------------------
%%% @hidden
%%% @equiv ct:run/1
run(TestDirs) ->
- install([]),
- reformat_result(catch do_run(tests(TestDirs), [])).
+ case install([]) of
+ ok ->
+ reformat_result(catch do_run(tests(TestDirs), []));
+ Error ->
+ Error
+ end.
reformat_result({'EXIT',{user_error,Reason}}) ->
{error,Reason};
@@ -2017,7 +2027,7 @@ save_make_errors(Errors) ->
"Error compiling or locating the "
"following suites: ~n~p",[Suites]),
%% save the info for logger
- file:write_file(?missing_suites_info,term_to_binary(Errors)),
+ ok = file:write_file(?missing_suites_info,term_to_binary(Errors)),
Errors.
get_bad_suites([{{_TestDir,_Suite},Failed}|Errors], BadSuites) ->
@@ -2234,7 +2244,7 @@ do_run_test(Tests, Skip, Opts0) ->
end,
application:set_env(test_server, esc_chars, EscChars),
- test_server_ctrl:start_link(local),
+ {ok, _} = test_server_ctrl:start_link(local),
%% let test_server expand the test tuples and count no of cases
{Suites,NoOfCases} = count_test_cases(Tests, Skip),
@@ -2295,7 +2305,7 @@ do_run_test(Tests, Skip, Opts0) ->
lists:foreach(fun(Suite) ->
maybe_cleanup_interpret(Suite, Opts#opts.step)
end, CleanUp),
- [code:del_path(Dir) || Dir <- AddedToPath],
+ _ = [code:del_path(Dir) || Dir <- AddedToPath],
%% If a severe error has occurred in the test_server,
%% we will generate an exception here.
@@ -2422,7 +2432,7 @@ count_test_cases(Tests, Skip) ->
SendResult = fun(Me, Result) -> Me ! {no_of_cases,Result} end,
TSPid = test_server_ctrl:start_get_totals(SendResult),
Ref = erlang:monitor(process, TSPid),
- add_jobs(Tests, Skip, #opts{}, []),
+ _ = add_jobs(Tests, Skip, #opts{}, []),
Counted = (catch count_test_cases1(length(Tests), 0, [], Ref)),
erlang:demonitor(Ref, [flush]),
case Counted of
@@ -2682,11 +2692,9 @@ run_make(Targets, TestDir0, Mod, UserInclude) ->
data=TestDir}),
{ok,Cwd} = file:get_cwd(),
ok = file:set_cwd(TestDir),
- TestServerInclude = get_dir(test_server, "include"),
CtInclude = get_dir(common_test, "include"),
XmerlInclude = get_dir(xmerl, "include"),
- ErlFlags = UserInclude ++ [{i,TestServerInclude},
- {i,CtInclude},
+ ErlFlags = UserInclude ++ [{i,CtInclude},
{i,XmerlInclude},
debug_info],
Result =
@@ -2778,14 +2786,14 @@ maybe_interpret1(Suite, Cases, StepOpts) when is_list(Cases) ->
maybe_interpret2(Suite, Cases, StepOpts) ->
set_break_on_config(Suite, StepOpts),
- [begin try i:ib(Suite, Case, 1) of
+ _ = [begin try i:ib(Suite, Case, 1) of
_ -> ok
catch
_:_Error ->
io:format(user, "Invalid breakpoint: ~w:~w/1~n",
[Suite,Case])
end
- end || Case <- Cases, is_atom(Case)],
+ end || Case <- Cases, is_atom(Case)],
test_server_ctrl:multiply_timetraps(infinity),
WinOp = case lists:member(keep_inactive, ensure_atom(StepOpts)) of
true -> no_kill;
@@ -2804,12 +2812,12 @@ set_break_on_config(Suite, StepOpts) ->
false -> ok
end
end,
- SetBPIfExists(init_per_suite, 1),
- SetBPIfExists(init_per_group, 2),
- SetBPIfExists(init_per_testcase, 2),
- SetBPIfExists(end_per_testcase, 2),
- SetBPIfExists(end_per_group, 2),
- SetBPIfExists(end_per_suite, 1);
+ ok = SetBPIfExists(init_per_suite, 1),
+ ok = SetBPIfExists(init_per_group, 2),
+ ok = SetBPIfExists(init_per_testcase, 2),
+ ok = SetBPIfExists(end_per_testcase, 2),
+ ok = SetBPIfExists(end_per_group, 2),
+ ok = SetBPIfExists(end_per_suite, 1);
false ->
ok
end.
@@ -2986,31 +2994,31 @@ add_verbosity_defaults(VLvls) ->
%% relative dirs "post run_test erl_args" is not kept!
rel_to_abs(CtArgs) ->
{PA,PZ} = get_pa_pz(CtArgs, [], []),
- [begin
+ _ = [begin
Dir = rm_trailing_slash(D),
Abs = make_abs(Dir),
- if Dir /= Abs ->
- code:del_path(Dir),
- code:del_path(Abs),
+ _ = if Dir /= Abs ->
+ _ = code:del_path(Dir),
+ _ = code:del_path(Abs),
io:format(user, "Converting ~p to ~p and re-inserting "
"with add_pathz/1~n",
[Dir, Abs]);
true ->
- code:del_path(Dir)
+ _ = code:del_path(Dir)
end,
code:add_pathz(Abs)
end || D <- PZ],
- [begin
+ _ = [begin
Dir = rm_trailing_slash(D),
Abs = make_abs(Dir),
- if Dir /= Abs ->
- code:del_path(Dir),
- code:del_path(Abs),
+ _ = if Dir /= Abs ->
+ _ = code:del_path(Dir),
+ _ = code:del_path(Abs),
io:format(user, "Converting ~p to ~p and re-inserting "
"with add_patha/1~n",
[Dir, Abs]);
true ->
- code:del_path(Dir)
+ _ = code:del_path(Dir)
end,
code:add_patha(Abs)
end || D <- PA],
diff --git a/lib/common_test/src/ct_slave.erl b/lib/common_test/src/ct_slave.erl
index 3ad3937548..571958ca03 100644
--- a/lib/common_test/src/ct_slave.erl
+++ b/lib/common_test/src/ct_slave.erl
@@ -325,7 +325,7 @@ do_start(Host, Node, Options) ->
Functions
end,
MasterHost = gethostname(),
- if
+ _ = if
MasterHost == Host ->
spawn_local_node(Node, Options);
true->
@@ -359,7 +359,7 @@ do_start(Host, Node, Options) ->
pang->
{error, boot_timeout, ENode}
end,
- case Result of
+ _ = case Result of
{ok, ENode}->
ok;
{error, Timeout, ENode}
@@ -422,7 +422,7 @@ spawn_remote_node(Host, Node, Options) ->
{_, _}->
[{user, Username}, {password, Password}]
end ++ [{silently_accept_hosts, true}] ++ SSHOpts,
- application:ensure_all_started(ssh),
+ {ok, _} = application:ensure_all_started(ssh),
{ok, SSHConnRef} = ssh:connect(atom_to_list(Host), SSHPort, SSHOptions),
{ok, SSHChannelId} = ssh_connection:session_channel(SSHConnRef, infinity),
ssh_setenv(SSHConnRef, SSHChannelId, Env),
diff --git a/lib/common_test/src/ct_snmp.erl b/lib/common_test/src/ct_snmp.erl
index bb0167eb22..2c59b19196 100644
--- a/lib/common_test/src/ct_snmp.erl
+++ b/lib/common_test/src/ct_snmp.erl
@@ -221,9 +221,17 @@ start(Config, MgrAgentConfName, SnmpAppConfName) ->
Config, SysName, AgentManagerIP, IP),
setup_manager(StartManager, MgrAgentConfName, SnmpAppConfName,
Config, AgentManagerIP),
- application:start(snmp),
+ ok = start_application(snmp),
manager_register(StartManager, MgrAgentConfName).
+
+start_application(App) ->
+ case application:start(App) of
+ {error, {already_started, App}} ->
+ ok;
+ Else ->
+ Else
+ end.
%%% @spec stop(Config) -> ok
%%% Config = [{Key, Value}]
@@ -233,8 +241,8 @@ start(Config, MgrAgentConfName, SnmpAppConfName) ->
%%% @doc Stops the snmp manager and/or agent removes all files created.
stop(Config) ->
PrivDir = ?config(priv_dir, Config),
- application:stop(snmp),
- application:stop(mnesia),
+ ok = application:stop(snmp),
+ ok = application:stop(mnesia),
MgrDir = filename:join(PrivDir,"mgr"),
ConfDir = filename:join(PrivDir, "conf"),
DbDir = filename:join(PrivDir,"db"),
@@ -311,7 +319,7 @@ set_info(Config) ->
SetLogFile = filename:join(PrivDir, ?CT_SNMP_LOG_FILE),
case file:consult(SetLogFile) of
{ok, SetInfo} ->
- file:delete(SetLogFile),
+ ok = delete_file(SetLogFile),
lists:reverse(SetInfo);
_ ->
[]
@@ -513,7 +521,7 @@ unload_mibs(Mibs) ->
prepare_snmp_env() ->
%% To make sure application:set_env is not overwritten by any
%% app-file settings.
- application:load(snmp),
+ _ = application:load(snmp),
%% Fix for older versions of snmp where there are some
%% inappropriate default values for alway starting an
@@ -533,7 +541,7 @@ setup_manager(true, MgrConfName, SnmpConfName, Config, IP) ->
Users = [],
Agents = [],
Usms = [],
- file:make_dir(MgrDir),
+ ok = make_dir(MgrDir),
snmp_config:write_manager_snmp_files(MgrDir, IP, Port, MaxMsgSize,
EngineID, Users, Agents, Usms),
@@ -549,7 +557,7 @@ setup_agent(false,_, _, _, _, _, _) ->
ok;
setup_agent(true, AgentConfName, SnmpConfName,
Config, SysName, ManagerIP, AgentIP) ->
- application:start(mnesia),
+ ok = start_application(mnesia),
PrivDir = ?config(priv_dir, Config),
Vsns = ct:get_config({AgentConfName, agent_vsns}, ?CONF_FILE_VER),
TrapUdp = ct:get_config({AgentConfName, agent_trap_udp}, ?TRAP_UDP),
@@ -565,8 +573,8 @@ setup_agent(true, AgentConfName, SnmpConfName,
ConfDir = filename:join(PrivDir, "conf"),
DbDir = filename:join(PrivDir,"db"),
- file:make_dir(ConfDir),
- file:make_dir(DbDir),
+ ok = make_dir(ConfDir),
+ ok = make_dir(DbDir),
snmp_config:write_agent_snmp_files(ConfDir, Vsns, ManagerIP, TrapUdp,
AgentIP, AgentUdp, SysName,
NotifType, SecType, Passwd,
@@ -684,7 +692,7 @@ log(PrivDir, Agent, {_, _, Varbinds}, NewVarsAndVals) ->
File = filename:join(PrivDir, ?CT_SNMP_LOG_FILE),
{ok, Fd} = file:open(File, [write, append]),
io:format(Fd, "~p.~n", [{Agent, OldVarsAndVals, NewVarsAndVals}]),
- file:close(Fd),
+ ok = file:close(Fd),
ok.
%%%---------------------------------------------------------------------------
del_dir(Dir) ->
@@ -692,7 +700,7 @@ del_dir(Dir) ->
FullPathFiles = lists:map(fun(File) -> filename:join(Dir, File) end,
Files),
lists:foreach(fun file:delete/1, FullPathFiles),
- file:del_dir(Dir),
+ ok = delete_dir(Dir),
ok.
%%%---------------------------------------------------------------------------
agent_conf(Agent, MgrAgentConfName) ->
@@ -738,8 +746,8 @@ override_contexts(Config, {data_dir_file, File}) ->
override_contexts(Config, Contexts) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"context.conf"),
- file:delete(File),
- snmp_config:write_agent_context_config(Dir, "", Contexts).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_context_config(Dir, "", Contexts).
%%%---------------------------------------------------------------------------
override_sysinfo(_, undefined) ->
@@ -754,8 +762,8 @@ override_sysinfo(Config, {data_dir_file, File}) ->
override_sysinfo(Config, SysInfo) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"standard.conf"),
- file:delete(File),
- snmp_config:write_agent_standard_config(Dir, "", SysInfo).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_standard_config(Dir, "", SysInfo).
%%%---------------------------------------------------------------------------
override_target_address(_, undefined) ->
@@ -769,8 +777,8 @@ override_target_address(Config, {data_dir_file, File}) ->
override_target_address(Config, TargetAddressConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"target_addr.conf"),
- file:delete(File),
- snmp_config:write_agent_target_addr_config(Dir, "", TargetAddressConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_target_addr_config(Dir, "", TargetAddressConf).
%%%---------------------------------------------------------------------------
@@ -785,8 +793,8 @@ override_target_params(Config, {data_dir_file, File}) ->
override_target_params(Config, TargetParamsConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"target_params.conf"),
- file:delete(File),
- snmp_config:write_agent_target_params_config(Dir, "", TargetParamsConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_target_params_config(Dir, "", TargetParamsConf).
%%%---------------------------------------------------------------------------
override_notify(_, undefined) ->
@@ -800,8 +808,8 @@ override_notify(Config, {data_dir_file, File}) ->
override_notify(Config, NotifyConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"notify.conf"),
- file:delete(File),
- snmp_config:write_agent_notify_config(Dir, "", NotifyConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_notify_config(Dir, "", NotifyConf).
%%%---------------------------------------------------------------------------
override_usm(_, undefined) ->
@@ -815,8 +823,8 @@ override_usm(Config, {data_dir_file, File}) ->
override_usm(Config, UsmConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"usm.conf"),
- file:delete(File),
- snmp_config:write_agent_usm_config(Dir, "", UsmConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_usm_config(Dir, "", UsmConf).
%%%--------------------------------------------------------------------------
override_community(_, undefined) ->
@@ -830,8 +838,8 @@ override_community(Config, {data_dir_file, File}) ->
override_community(Config, CommunityConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"community.conf"),
- file:delete(File),
- snmp_config:write_agent_community_config(Dir, "", CommunityConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_community_config(Dir, "", CommunityConf).
%%%---------------------------------------------------------------------------
@@ -846,8 +854,8 @@ override_vacm(Config, {data_dir_file, File}) ->
override_vacm(Config, VacmConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"vacm.conf"),
- file:delete(File),
- snmp_config:write_agent_vacm_config(Dir, "", VacmConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_vacm_config(Dir, "", VacmConf).
%%%---------------------------------------------------------------------------
@@ -861,3 +869,21 @@ while_ok(Fun,[H|T]) ->
end;
while_ok(_Fun,[]) ->
ok.
+
+delete_file(FileName) ->
+ case file:delete(FileName) of
+ {error, enoent} -> ok;
+ Else -> Else
+ end.
+
+make_dir(Dir) ->
+ case file:make_dir(Dir) of
+ {error, eexist} -> ok;
+ Else -> Else
+ end.
+
+delete_dir(Dir) ->
+ case file:del_dir(Dir) of
+ {error, enoent} -> ok;
+ Else -> Else
+ end.
diff --git a/lib/common_test/src/ct_ssh.erl b/lib/common_test/src/ct_ssh.erl
index d19004fa2c..6ab3bf036c 100644
--- a/lib/common_test/src/ct_ssh.erl
+++ b/lib/common_test/src/ct_ssh.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -962,8 +962,8 @@ init(KeyOrName, {ConnType,Addr,Port}, AllOpts) ->
end, [], AllOpts1),
FinalOptions = [{silently_accept_hosts,true},
{user_interaction,false} | Options],
- crypto:start(),
- ssh:start(),
+ _ = crypto:start(),
+ _ = ssh:start(),
Result = case ConnType of
ssh ->
ssh:connect(Addr, Port, FinalOptions);
diff --git a/lib/common_test/src/ct_telnet.erl b/lib/common_test/src/ct_telnet.erl
index 715eb1bbbd..34d27ed5f4 100644
--- a/lib/common_test/src/ct_telnet.erl
+++ b/lib/common_test/src/ct_telnet.erl
@@ -605,7 +605,7 @@ init(Name,{Ip,Port,Type},{TargetMod,KeepAlive,Extra}) ->
set_telnet_defaults(Settings,#state{})
end,
%% Handle old user versions of TargetMod
- code:ensure_loaded(TargetMod),
+ _ = code:ensure_loaded(TargetMod),
try
case erlang:function_exported(TargetMod,connect,7) of
true ->
@@ -688,7 +688,7 @@ handle_msg({cmd,Cmd,Opts},State) ->
debug_cont_gen_log("Throwing Buffer:",[]),
debug_log_lines(State#state.buffer),
- case {State#state.type,State#state.prompt} of
+ _ = case {State#state.type,State#state.prompt} of
{ts,_} ->
silent_teln_expect(State#state.name,
State#state.teln_pid,
@@ -735,7 +735,7 @@ handle_msg({send,Cmd,Opts},State) ->
debug_cont_gen_log("Throwing Buffer:",[]),
debug_log_lines(State#state.buffer),
- case {State#state.type,State#state.prompt} of
+ _ = case {State#state.type,State#state.prompt} of
{ts,_} ->
silent_teln_expect(State#state.name,
State#state.teln_pid,
diff --git a/lib/common_test/src/ct_telnet_client.erl b/lib/common_test/src/ct_telnet_client.erl
index bdab456cfa..5df7e279ac 100644
--- a/lib/common_test/src/ct_telnet_client.erl
+++ b/lib/common_test/src/ct_telnet_client.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -272,7 +272,7 @@ send(Data, Sock, ConnName) ->
_:_ -> ok
end
end,
- gen_tcp:send(Sock, Data),
+ ok = gen_tcp:send(Sock, Data),
ok.
%% [IAC,IAC] = buffer data value 255
@@ -284,7 +284,7 @@ check_msg(Sock, [?IAC | Cs], Acc) ->
case get_cmd(Cs) of
{Cmd,Cs1} ->
cmd_dbg("Got",Cmd),
- respond_cmd(Cmd, Sock),
+ ok = respond_cmd(Cmd, Sock),
check_msg(Sock, Cs1, Acc);
error ->
Acc
diff --git a/lib/common_test/src/ct_testspec.erl b/lib/common_test/src/ct_testspec.erl
index 61d8f49dcc..991abb0666 100644
--- a/lib/common_test/src/ct_testspec.erl
+++ b/lib/common_test/src/ct_testspec.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl
index 3561a0a2d3..82a8743cf0 100644
--- a/lib/common_test/src/ct_util.erl
+++ b/lib/common_test/src/ct_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -131,14 +131,14 @@ do_start(Parent, Mode, LogDir, Verbosity) ->
create_table(?suite_table,#suite_data.key),
create_table(?verbosity_table,1),
- [ets:insert(?verbosity_table,{Cat,Lvl}) || {Cat,Lvl} <- Verbosity],
+ _ = [ets:insert(?verbosity_table,{Cat,Lvl}) || {Cat,Lvl} <- Verbosity],
{ok,StartDir} = file:get_cwd(),
case file:set_cwd(LogDir) of
ok -> ok;
E -> exit(E)
end,
- DoExit = fun(Reason) -> file:set_cwd(StartDir), exit(Reason) end,
+ DoExit = fun(Reason) -> ok = file:set_cwd(StartDir), exit(Reason) end,
Opts = case read_opts() of
{ok,Opts1} ->
Opts1;
@@ -169,7 +169,7 @@ do_start(Parent, Mode, LogDir, Verbosity) ->
end,
%% add user event handlers
- case lists:keysearch(event_handler,1,Opts) of
+ _ = case lists:keysearch(event_handler,1,Opts) of
{value,{_,Handlers}} ->
Add = fun({H,Args}) ->
case catch gen_event:add_handler(?CT_EVMGR_REF,H,Args) of
@@ -195,7 +195,7 @@ do_start(Parent, Mode, LogDir, Verbosity) ->
data={StartTime,
lists:flatten(TestLogDir)}}),
%% Initialize ct_hooks
- try ct_hooks:init(Opts) of
+ _ = try ct_hooks:init(Opts) of
ok ->
Parent ! {self(),started};
{fail,CTHReason} ->
@@ -228,7 +228,8 @@ create_table(TableName,KeyPos) ->
create_table(TableName,set,KeyPos).
create_table(TableName,Type,KeyPos) ->
catch ets:delete(TableName),
- ets:new(TableName,[Type,named_table,public,{keypos,KeyPos}]).
+ _ = ets:new(TableName,[Type,named_table,public,{keypos,KeyPos}]),
+ ok.
read_opts() ->
case file:consult(ct_run:variables_file_name("./")) of
@@ -473,7 +474,7 @@ loop(Mode,TestData,StartDir) ->
ct_logs:close(Info, StartDir),
ct_event:stop(),
ct_config:stop(),
- file:set_cwd(StartDir),
+ ok = file:set_cwd(StartDir),
return(From, Info);
{Ref, _Msg} when is_reference(Ref) ->
%% This clause is used when doing cast operations.
@@ -505,7 +506,7 @@ loop(Mode,TestData,StartDir) ->
%% Let process crash in case of error, this shouldn't happen!
io:format("\n\nct_util_server got EXIT "
"from ~w: ~p\n\n", [Pid,Reason]),
- file:set_cwd(StartDir),
+ ok = file:set_cwd(StartDir),
exit(Reason)
end
end.
@@ -1035,10 +1036,12 @@ call(Msg, Timeout) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
+ To ! {Ref, Result},
+ ok.
cast(Msg) ->
- ct_util_server ! {Msg, {ct_util_server, make_ref()}}.
+ ct_util_server ! {Msg, {ct_util_server, make_ref()}},
+ ok.
seconds(T) ->
test_server:seconds(T).
@@ -1074,7 +1077,7 @@ abs_name2([],Acc) ->
open_url(iexplore, Args, URL) ->
{ok,R} = win32reg:open([read]),
ok = win32reg:change_key(R,"applications\\iexplore.exe\\shell\\open\\command"),
- case win32reg:values(R) of
+ _ = case win32reg:values(R) of
{ok, Paths} ->
Path = proplists:get_value(default, Paths),
[Cmd | _] = string:tokens(Path, "%"),
diff --git a/lib/common_test/src/ct_util.hrl b/lib/common_test/src/ct_util.hrl
index bdfe2041a5..d7efa26863 100644
--- a/lib/common_test/src/ct_util.hrl
+++ b/lib/common_test/src/ct_util.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/ct_webtool.erl b/lib/common_test/src/ct_webtool.erl
index 014487eb10..87af442fd3 100644
--- a/lib/common_test/src/ct_webtool.erl
+++ b/lib/common_test/src/ct_webtool.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -84,27 +84,27 @@
%% Function = {FunctionName,Arity} | FunctionName |
%% {Module, FunctionName, Arity} | {Module,FunctionName}
debug(F) ->
- ttb:tracer(all,[{file,"webtool.trc"}]), % tracing all nodes
- ttb:p(all,[call,timestamp]),
+ {ok, _} = ttb:tracer(all,[{file,"webtool.trc"}]), % tracing all nodes
+ {ok, _} = ttb:p(all,[call,timestamp]),
MS = [{'_',[],[{return_trace},{message,{caller}}]}],
- tp(F,MS),
- ttb:ctp(?MODULE,stop_debug), % don't want tracing of the stop_debug func
+ _ = tp(F,MS),
+ {ok, _} = ttb:ctp(?MODULE,stop_debug), % don't want tracing of the stop_debug func
ok.
tp(local,MS) -> % all functions
ttb:tpl(?MODULE,MS);
tp(global,MS) -> % all exported functions
ttb:tp(?MODULE,MS);
tp([{M,F,A}|T],MS) -> % Other module
- ttb:tpl(M,F,A,MS),
+ {ok, _} = ttb:tpl(M,F,A,MS),
tp(T,MS);
tp([{M,F}|T],MS) when is_atom(F) -> % Other module
- ttb:tpl(M,F,MS),
+ {ok, _} = ttb:tpl(M,F,MS),
tp(T,MS);
tp([{F,A}|T],MS) -> % function/arity
- ttb:tpl(?MODULE,F,A,MS),
+ {ok, _} = ttb:tpl(?MODULE,F,A,MS),
tp(T,MS);
tp([F|T],MS) -> % function
- ttb:tpl(?MODULE,F,MS),
+ {ok, _} = ttb:tpl(?MODULE,F,MS),
tp(T,MS);
tp([],_MS) ->
ok.
@@ -112,10 +112,10 @@ stop_debug() ->
ttb:stop([format]).
debug_app(Mod) ->
- ttb:tracer(all,[{file,"webtool_app.trc"},{handler,{fun out/4,true}}]),
- ttb:p(all,[call,timestamp]),
+ {ok, _} = ttb:tracer(all,[{file,"webtool_app.trc"},{handler,{fun out/4,true}}]),
+ {ok, _} = ttb:p(all,[call,timestamp]),
MS = [{'_',[],[{return_trace},{message,{caller}}]}],
- ttb:tp(Mod,MS),
+ {ok, _} = ttb:tp(Mod,MS),
ok.
out(_,{trace_ts,Pid,call,MFA={M,F,A},{W,_,_},TS},_,S)
@@ -145,7 +145,7 @@ script_start([App]) ->
script_start([App,DefaultBrowser]);
script_start([App,Browser]) ->
io:format("Starting webtool...\n"),
- start(),
+ {ok, _} = start(),
AvailableApps = get_applications(),
{OSType,_} = os:type(),
case lists:keysearch(App,1,AvailableApps) of
@@ -159,14 +159,14 @@ script_start([App,Browser]) ->
_ ->
"http://localhost:" ++ PortStr ++ "/" ++ StartPage
end,
- case Browser of
+ _ = case Browser of
none ->
ok;
iexplore when OSType == win32->
io:format("Starting internet explorer...\n"),
{ok,R} = win32reg:open(""),
Key="\\local_machine\\SOFTWARE\\Microsoft\\IE Setup\\Setup",
- win32reg:change_key(R,Key),
+ ok = win32reg:change_key(R,Key),
{ok,Val} = win32reg:value(R,"Path"),
IExplore=filename:join(win32reg:expand(Val),"iexplore.exe"),
os:cmd("\"" ++ IExplore ++ "\" " ++ Url);
@@ -186,7 +186,7 @@ script_start([App,Browser]) ->
{Port,{exit_status,_Error}} ->
io:format(" not running, starting ~w...\n",
[Browser]),
- os:cmd(BStr ++ " " ++ Url),
+ _ = os:cmd(BStr ++ " " ++ Url),
ok
after ?SEND_URL_TIMEOUT ->
io:format(" failed, starting ~w...\n",[Browser]),
@@ -206,7 +206,7 @@ script_start([App,Browser]) ->
usage() ->
io:format("Starting webtool...\n"),
- start(),
+ {ok, _} = start(),
Apps = lists:map(fun({A,_}) -> A end,get_applications()),
io:format(
"\nUsage: start_webtool application [ browser ]\n"
@@ -254,7 +254,12 @@ start(Path,Port) when is_integer(Port)->
start(Path,Data0)->
Data = Data0 ++ rest_of_standard_data(),
- gen_server:start({local,ct_web_tool},ct_webtool,{Path,Data},[]).
+ case gen_server:start({local,ct_web_tool},ct_webtool,{Path,Data},[]) of
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Else ->
+ Else
+ end.
stop()->
gen_server:call(ct_web_tool,stoppit).
diff --git a/lib/common_test/src/ct_webtool_sup.erl b/lib/common_test/src/ct_webtool_sup.erl
index 485161c784..c02ec69d04 100644
--- a/lib/common_test/src/ct_webtool_sup.erl
+++ b/lib/common_test/src/ct_webtool_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/cth_conn_log.erl b/lib/common_test/src/cth_conn_log.erl
index 954b4239af..883da0da0a 100644
--- a/lib/common_test/src/cth_conn_log.erl
+++ b/lib/common_test/src/cth_conn_log.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -170,7 +170,7 @@ post_end_per_testcase(TestCase,_Config,Return,CthState) ->
end,
case ct_util:update_testdata(?MODULE, Update) of
deleted ->
- [ct_util:delete_testdata({?MODULE,ConnMod}) ||
+ _ = [ct_util:delete_testdata({?MODULE,ConnMod}) ||
{ConnMod,_} <- CthState],
error_logger:delete_report_handler(ct_conn_log_h);
{error,no_response} ->
diff --git a/lib/common_test/src/cth_log_redirect.erl b/lib/common_test/src/cth_log_redirect.erl
index 780fbea79a..6d77d7ee9e 100644
--- a/lib/common_test/src/cth_log_redirect.erl
+++ b/lib/common_test/src/cth_log_redirect.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -127,7 +127,7 @@ handle_event(Event, #eh_state{log_func = LogFunc} = State) ->
_Else ->
{ok, ErrLogType} = application:get_env(sasl, errlog_type),
SReport = sasl_report:format_report(group_leader(), ErrLogType,
- tag_event(Event)),
+ tag_event(Event, local)),
if is_list(SReport) ->
SaslHeader = format_header(State),
case LogFunc of
@@ -142,8 +142,9 @@ handle_event(Event, #eh_state{log_func = LogFunc} = State) ->
ignore
end
end,
+ %% note that error_logger (unlike sasl) expects UTC time
EReport = error_logger_tty_h:write_event(
- tag_event(Event),io_lib),
+ tag_event(Event, utc), io_lib),
if is_list(EReport) ->
ErrHeader = format_header(State),
case LogFunc of
@@ -220,7 +221,9 @@ terminate(_) ->
terminate(_Arg, _State) ->
ok.
-tag_event(Event) ->
+tag_event(Event, utc) ->
+ {calendar:universal_time(), Event};
+tag_event(Event, _) ->
{calendar:local_time(), Event}.
set_curr_func(CurrFunc, Config) ->
diff --git a/lib/common_test/src/cth_surefire.erl b/lib/common_test/src/cth_surefire.erl
index d6e855c02c..59b916851e 100644
--- a/lib/common_test/src/cth_surefire.erl
+++ b/lib/common_test/src/cth_surefire.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/erl2html2.erl b/lib/common_test/src/erl2html2.erl
index e69383acea..e819f345de 100644
--- a/lib/test_server/src/erl2html2.erl
+++ b/lib/common_test/src/erl2html2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -62,15 +62,15 @@ convert(File, Dest, InclPath, Header) ->
{ok,SFd} ->
case file:open(Dest,[write,raw]) of
{ok,DFd} ->
- file:write(DFd,[Header,"<pre>\n"]),
+ ok = file:write(DFd,[Header,"<pre>\n"]),
_Lines = build_html(SFd,DFd,encoding(File),Functions),
- file:write(DFd,["</pre>\n",footer(),
+ ok = file:write(DFd,["</pre>\n",footer(),
"</body>\n</html>\n"]),
%% {_, Time2} = statistics(runtime),
%% io:format("Converted ~p lines in ~.2f Seconds.~n",
%% [_Lines, Time2/1000]),
- file:close(SFd),
- file:close(DFd),
+ ok = file:close(SFd),
+ ok = file:close(DFd),
ok;
Error ->
Error
@@ -138,7 +138,7 @@ parse_non_preprocessed_file(File) ->
case file:open(File, []) of
{ok,Epp} ->
Forms = parse_non_preprocessed_file(Epp, File, 1),
- file:close(Epp),
+ ok = file:close(Epp),
{ok,Forms};
Error = {error,_E} ->
Error
@@ -170,23 +170,32 @@ get_line(Anno) ->
%%%-----------------------------------------------------------------
%%% Find the line number of the last expression in the function
find_clause_lines([{clause,CL,_Params,_Op,Exprs}], CLs) -> % last clause
- try tuple_to_list(lists:last(Exprs)) of
- [_Type,ExprLine | _] when is_integer(ExprLine) ->
- {lists:reverse([{clause,get_line(CL)}|CLs]), get_line(ExprLine)};
- [tree,_ | Exprs1] ->
+ case classify_exprs(Exprs) of
+ {anno, Anno} ->
+ {lists:reverse([{clause,get_line(CL)}|CLs]), get_line(Anno)};
+ {tree, Exprs1} ->
find_clause_lines([{clause,CL,undefined,undefined,Exprs1}], CLs);
- [macro,{_var,ExprLine,_MACRO} | _] when is_integer(ExprLine) ->
- {lists:reverse([{clause,get_line(CL)}|CLs]), get_line(ExprLine)};
- _ ->
- {lists:reverse([{clause,get_line(CL)}|CLs]), get_line(CL)}
- catch
- _:_ ->
+ unknown ->
{lists:reverse([{clause,get_line(CL)}|CLs]), get_line(CL)}
end;
-
find_clause_lines([{clause,CL,_Params,_Op,_Exprs} | Cs], CLs) ->
find_clause_lines(Cs, [{clause,get_line(CL)}|CLs]).
+classify_exprs(Exprs) ->
+ case tuple_to_list(lists:last(Exprs)) of
+ [macro,{_var,Anno,_MACRO} | _] ->
+ {anno, Anno};
+ [T,ExprAnno | Exprs1] ->
+ case erl_anno:is_anno(ExprAnno) of
+ true ->
+ {anno, ExprAnno};
+ false when T =:= tree ->
+ {tree, Exprs1};
+ false ->
+ unknown
+ end
+ end.
+
%%%-----------------------------------------------------------------
%%% Add a link target for each line and one for each function definition.
build_html(SFd,DFd,Encoding,FuncsAndCs) ->
@@ -196,14 +205,14 @@ build_html(SFd,DFd,Encoding,FuncsAndCs) ->
%% line of last expression in function found
build_html(SFd,DFd,Enc,{ok,Str},LastL,FuncsAndCs,_IsFuncDef,{F,LastL}) ->
LastLineLink = test_server_ctrl:uri_encode(F++"-last_expr",utf8),
- file:write(DFd,["<a name=\"",
- to_raw_list(LastLineLink,Enc),"\"/>"]),
+ ok = file:write(DFd,["<a name=\"",
+ to_raw_list(LastLineLink,Enc),"\"/>"]),
build_html(SFd,DFd,Enc,{ok,Str},LastL,FuncsAndCs,true,undefined);
%% function start line found
build_html(SFd,DFd,Enc,{ok,Str},L0,[{F,A,L0,LastL}|FuncsAndCs],
_IsFuncDef,_FAndLastL) ->
FALink = test_server_ctrl:uri_encode(F++"-"++integer_to_list(A),utf8),
- file:write(DFd,["<a name=\"",to_raw_list(FALink,Enc),"\"/>"]),
+ ok = file:write(DFd,["<a name=\"",to_raw_list(FALink,Enc),"\"/>"]),
build_html(SFd,DFd,Enc,{ok,Str},L0,FuncsAndCs,true,{F,LastL});
build_html(SFd,DFd,Enc,{ok,Str},L,[{clause,L}|FuncsAndCs],
_IsFuncDef,FAndLastL) ->
@@ -211,7 +220,7 @@ build_html(SFd,DFd,Enc,{ok,Str},L,[{clause,L}|FuncsAndCs],
build_html(SFd,DFd,Enc,{ok,Str},L,FuncsAndCs,IsFuncDef,FAndLastL) ->
LStr = line_number(L),
Str1 = line(Str,IsFuncDef),
- file:write(DFd,[LStr,Str1]),
+ ok = file:write(DFd,[LStr,Str1]),
build_html(SFd,DFd,Enc,file:read_line(SFd),L+1,FuncsAndCs,false,FAndLastL);
build_html(_SFd,_DFd,_Enc,eof,L,_FuncsAndCs,_IsFuncDef,_FAndLastL) ->
L.
diff --git a/lib/test_server/src/test_server.erl b/lib/common_test/src/test_server.erl
index 919526c5d7..924086f2bd 100644
--- a/lib/test_server/src/test_server.erl
+++ b/lib/common_test/src/test_server.erl
@@ -21,7 +21,7 @@
-define(DEFAULT_TIMETRAP_SECS, 60).
%%% TEST_SERVER_CTRL INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([run_test_case_apply/1,init_target_info/0,init_purify/0]).
+-export([run_test_case_apply/1,init_target_info/0]).
-export([cover_compile/1,cover_analyse/2]).
%%% TEST_SERVER_SUP INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -49,10 +49,6 @@
-export([break/1,break/2,break/3,continue/0,continue/1]).
-%%% DEBUGGER INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([purify_new_leaks/0, purify_format/2, purify_new_fds_inuse/0,
- purify_is_running/0]).
-
%%% PRIVATE EXPORTED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-export([]).
@@ -73,10 +69,6 @@ init_target_info() ->
username=test_server_sup:get_username(),
cookie=atom_to_list(erlang:get_cookie())}.
-init_purify() ->
- purify_new_leaks().
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% cover_compile(#cover{app=App,incl=Include,excl=Exclude,cross=Cross}) ->
%% {ok,#cover{mods=AnalyseModules}} | {error,Reason}
@@ -100,7 +92,7 @@ cover_compile(CoverInfo=#cover{app=none,incl=Include,cross=Cross}) ->
case length(CompileMods) of
0 ->
io:fwrite("WARNING: No modules to cover compile!\n\n",[]),
- cover:start(), % start cover server anyway
+ {ok, _} = start_cover(), % start cover server anyway
{ok,CoverInfo#cover{mods=[]}};
N ->
io:fwrite("Cover compiling ~w modules - "
@@ -115,7 +107,7 @@ cover_compile(CoverInfo=#cover{app=App,excl=all,incl=Include,cross=Cross}) ->
case length(CompileMods) of
0 ->
io:fwrite("WARNING: No modules to cover compile!\n\n",[]),
- cover:start(), % start cover server anyway
+ {ok, _} = start_cover(), % start cover server anyway
{ok,CoverInfo#cover{mods=[]}};
N ->
io:fwrite("Cover compiling '~w' (~w files) - "
@@ -158,7 +150,7 @@ cover_compile(CoverInfo=#cover{app=App,excl=Exclude,
case length(CompileMods) of
0 ->
io:fwrite("WARNING: No modules to cover compile!\n\n",[]),
- cover:start(), % start cover server anyway
+ {ok, _} = start_cover(), % start cover server anyway
{ok,CoverInfo#cover{mods=[]}};
N ->
io:fwrite("Cover compiling '~w' (~w files) - "
@@ -175,11 +167,11 @@ module_names(Beams) ->
do_cover_compile(Modules) ->
- cover:start(),
+ {ok, _} = start_cover(),
Sticky = prepare_cover_compile(Modules,[]),
R = cover:compile_beam(Modules),
- [warn_compile(Error) || Error <- R,element(1,Error)=/=ok],
- [code:stick_mod(M) || M <- Sticky],
+ _ = [warn_compile(Error) || Error <- R,element(1,Error)=/=ok],
+ _ = [code:stick_mod(M) || M <- Sticky],
ok.
warn_compile({error,{Reason,Module}}) ->
@@ -366,9 +358,7 @@ stick_all_sticky(Node,Sticky) ->
%% compensate timetraps for runtime delays introduced by e.g. tools like
%% cover.
-run_test_case_apply({CaseNum,Mod,Func,Args,Name,
- RunInit,TimetrapData}) ->
- purify_format("Test case #~w ~w:~w/1", [CaseNum, Mod, Func]),
+run_test_case_apply({Mod,Func,Args,Name,RunInit,TimetrapData}) ->
case os:getenv("TS_RUN_VALGRIND") of
false ->
ok;
@@ -380,7 +370,6 @@ run_test_case_apply({CaseNum,Mod,Func,Args,Name,
Result = run_test_case_apply(Mod, Func, Args, Name, RunInit,
TimetrapData),
ProcAft = erlang:system_info(process_count),
- purify_new_leaks(),
DetFail = get(test_server_detected_fail),
{Result,DetFail,ProcBef,ProcAft}.
@@ -585,7 +574,8 @@ run_test_case_msgloop(#st{ref=Ref,pid=Pid,end_conf_pid=EndConfPid0}=St0) ->
{user_timetrap,Pid,_TrapTime,StartTime,E={user_timetrap_error,_},_} ->
case update_user_timetraps(Pid, StartTime) of
proceed ->
- self() ! {abort_current_testcase,E,Pid};
+ self() ! {abort_current_testcase,E,Pid},
+ ok;
ignore ->
ok
end,
@@ -600,7 +590,8 @@ run_test_case_msgloop(#st{ref=Ref,pid=Pid,end_conf_pid=EndConfPid0}=St0) ->
true ->
TrapTime
end,
- timetrap(TrapTime, TotalTime, Pid, Scale);
+ _ = timetrap(TrapTime, TotalTime, Pid, Scale),
+ ok;
ignore ->
ok
end,
@@ -724,7 +715,7 @@ do_call_end_conf(Starter,Mod,Func,Data,TCExitReason,Conf,TVal) ->
Supervisor = self(),
EndConfApply =
fun() ->
- timetrap(TVal),
+ _ = timetrap(TVal),
%% We can't handle fails or skips here
%% (neither input nor output). The error can
%% be read from Conf though (tc_status).
@@ -775,7 +766,8 @@ print_end_conf_result(Mod,Func,Conf,Cause,Error) ->
" ~s!\n\tReason: ~ts\n",
[Mod,Func,Conf,Cause,ErrorStr])
end,
- group_leader() ! {printout,12,Str2Print}.
+ group_leader() ! {printout,12,Str2Print},
+ ok.
spawn_fw_call(Mod,IPTC={init_per_testcase,Func},CurrConf,Pid,
@@ -1287,7 +1279,9 @@ user_callback({CBMod,CBFunc}, Mod, Func, InitOrEnd, Args) ->
init_per_testcase(Mod, Func, Args) ->
case code:is_loaded(Mod) of
- false -> code:load_file(Mod);
+ false ->
+ _ = code:load_file(Mod),
+ ok;
_ -> ok
end,
case erlang:function_exported(Mod, init_per_testcase, 2) of
@@ -1355,7 +1349,8 @@ print_init_conf_result(Line,Cause,Reason) ->
"\tLocation: ~ts\n\tReason: ~ts\n",
[Cause,FormattedLoc,ReasonStr])
end,
- group_leader() ! {printout,12,Str2Print}.
+ group_leader() ! {printout,12,Str2Print},
+ ok.
end_per_testcase(Mod, Func, Conf) ->
@@ -1426,7 +1421,8 @@ print_end_tc_warning(EndFunc,Reason,Cause,Loc) ->
"Reason: ~ts\nLine: ~ts\n",
[EndFunc,Cause,ReasonStr,FormattedLoc])
end,
- group_leader() ! {printout,12,Str2Print}.
+ group_leader() ! {printout,12,Str2Print},
+ ok.
get_loc() ->
get(test_server_loc).
@@ -1657,7 +1653,8 @@ messages_get() ->
%%
%% Make sure proceeding IO from FromPid won't get rejected
permit_io(GroupLeader, FromPid) ->
- GroupLeader ! {permit_io,FromPid}.
+ GroupLeader ! {permit_io,FromPid},
+ ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% sleep(Time) -> ok
@@ -1829,7 +1826,6 @@ timetrap_scale_factor() ->
timetrap_scale_factor([
{ 2, fun() -> has_lock_checking() end},
{ 3, fun() -> has_superfluous_schedulers() end},
- { 5, fun() -> purify_is_running() end},
{ 6, fun() -> is_debug() end},
{10, fun() -> is_cover() end}
]).
@@ -2129,7 +2125,8 @@ timetrap_cancel_all(TCPid, SendToServer) ->
ok;
Timers ->
[timetrap_cancel_one(Handle, false) ||
- {Handle,Pid,_} <- Timers, Pid == TCPid]
+ {Handle,Pid,_} <- Timers, Pid == TCPid],
+ ok
end,
case get(test_server_user_timetrap) of
undefined ->
@@ -2139,13 +2136,15 @@ timetrap_cancel_all(TCPid, SendToServer) ->
{UserTTSup,_StartTime} ->
remove_user_timetrap(UserTTSup),
put(test_server_user_timetrap,
- proplists:delete(TCPid, UserTTs));
+ proplists:delete(TCPid, UserTTs)),
+ ok;
undefined ->
ok
end
end,
if SendToServer == true ->
- group_leader() ! {timetrap_cancel_all,TCPid,self()};
+ group_leader() ! {timetrap_cancel_all,TCPid,self()},
+ ok;
true ->
ok
end,
@@ -2560,10 +2559,11 @@ run_on_shielded_node(Fun, CArgs) when is_function(Fun), is_list(CArgs) ->
-spec start_job_proxy_fun(_, _) -> fun(() -> no_return()).
start_job_proxy_fun(Master, Fun) ->
fun () ->
- start_job_proxy(),
+ _ = start_job_proxy(),
receive
Ref ->
- Master ! {Ref, Fun()}
+ Master ! {Ref, Fun()},
+ ok
end,
receive after infinity -> infinity end
end.
@@ -2729,64 +2729,25 @@ is_commercial() ->
_ -> true
end.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% DEBUGGER INTERFACE %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% purify_is_running() -> false|true
-%%
-%% Tests if Purify is currently running.
-
-purify_is_running() ->
- case catch erlang:system_info({error_checker, running}) of
- {'EXIT', _} -> false;
- Res -> Res
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% purify_new_leaks() -> false|BytesLeaked
-%% BytesLeaked = integer()
-%%
-%% Checks for new memory leaks if Purify is active.
-%% Returns the number of bytes leaked, or false if Purify
-%% is not running.
-purify_new_leaks() ->
- case catch erlang:system_info({error_checker, memory}) of
- {'EXIT', _} -> false;
- Leaked when is_integer(Leaked) -> Leaked
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% purify_new_fds_inuse() -> false|FdsInuse
-%% FdsInuse = integer()
-%%
-%% Checks for new file descriptors in use.
-%% Returns the number of new file descriptors in use, or false
-%% if Purify is not running.
-purify_new_fds_inuse() ->
- case catch erlang:system_info({error_checker, fd}) of
- {'EXIT', _} -> false;
- Inuse when is_integer(Inuse) -> Inuse
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% purify_format(Format, Args) -> ok
-%% Format = string()
-%% Args = lists()
-%%
-%% Outputs the formatted string to Purify's logfile,if Purify is active.
-purify_format(Format, Args) ->
- (catch erlang:system_info({error_checker, io_lib:format(Format, Args)})),
- ok.
-
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Apply given function and reply to caller or proxy.
%%
do_sync_apply(Proxy, From, {M,F,A}) ->
Result = apply(M, F, A),
- if is_pid(Proxy) -> Proxy ! {sync_result_proxy,From,Result};
- true -> From ! {sync_result,Result}
+ if is_pid(Proxy) ->
+ Proxy ! {sync_result_proxy,From,Result},
+ ok;
+ true ->
+ From ! {sync_result,Result},
+ ok
end.
+
+start_cover() ->
+ case cover:start() of
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Else ->
+ Else
+ end.
+
diff --git a/lib/test_server/src/test_server_ctrl.erl b/lib/common_test/src/test_server_ctrl.erl
index e0975ab744..b52e4bef9b 100644
--- a/lib/test_server/src/test_server_ctrl.erl
+++ b/lib/common_test/src/test_server_ctrl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -294,7 +294,7 @@ start_link(_) ->
start() ->
case gen_server:start({local,?MODULE}, ?MODULE, [], []) of
- {ok, Pid} ->
+ {error, {already_started, Pid}} ->
{ok, Pid};
Other ->
Other
@@ -302,7 +302,7 @@ start() ->
start_link() ->
case gen_server:start_link({local,?MODULE}, ?MODULE, [], []) of
- {ok, Pid} ->
+ {error, {already_started, Pid}} ->
{ok, Pid};
Other ->
Other
@@ -512,7 +512,7 @@ init([]) ->
TI = TI0#target_info{host=TargetHost,
naming=naming(),
master=TargetHost},
- ets:new(slave_tab, [named_table,set,public,{keypos,2}]),
+ _ = ets:new(slave_tab, [named_table,set,public,{keypos,2}]),
set_hosts([TI#target_info.host]),
{ok,State#state{target_info=TI}}.
@@ -867,7 +867,7 @@ handle_call({create_priv_dir,Value}, _From, State) ->
handle_call({testcase_callback,ModFunc}, _From, State) ->
case ModFunc of
{Mod,Func} ->
- case code:is_loaded(Mod) of
+ _ = case code:is_loaded(Mod) of
{file,_} ->
ok;
false ->
@@ -1079,8 +1079,8 @@ terminate(_Reason, State) ->
false -> ok;
Sock -> test_server_node:stop_tracer_node(Sock)
end,
- kill_all_jobs(State#state.jobs),
- test_server_node:kill_nodes(),
+ ok = kill_all_jobs(State#state.jobs),
+ _ = test_server_node:kill_nodes(),
ok.
kill_all_jobs([{_Name,JobPid}|Jobs]) ->
@@ -1125,7 +1125,7 @@ spawn_tester(Mod, Func, Args, Dir, Name, Levels, RejectIoReqs,
init_tester(Mod, Func, Args, Dir, Name, {_,_,MinLev}=Levels,
RejectIoReqs, CreatePrivDir, TCCallback, ExtraTools) ->
process_flag(trap_exit, true),
- test_server_io:start_link(),
+ _ = test_server_io:start_link(),
put(test_server_name, Name),
put(test_server_dir, Dir),
put(test_server_total_time, 0),
@@ -1199,8 +1199,7 @@ init_tester(Mod, Func, Args, Dir, Name, {_,_,MinLev}=Levels,
{UnexpectedIoName,UnexpectedIoFooter} = get(test_server_unexpected_footer),
{ok,UnexpectedIoFd} = open_html_file(UnexpectedIoName, [append]),
io:put_chars(UnexpectedIoFd, "\n</pre>\n"++UnexpectedIoFooter),
- file:close(UnexpectedIoFd),
- ok.
+ ok = file:close(UnexpectedIoFd).
report_severe_error(Reason) ->
test_server_sup:framework_call(report, [severe_error,Reason]).
@@ -1927,7 +1926,7 @@ html_convert_modules([Mod|Mods]) ->
Name = atom_to_list(Mod),
DestFile = filename:join(DestDir,
downcase(Name)++?src_listing_ext),
- html_possibly_convert(SrcFile1, SrcFileInfo, DestFile),
+ _ = html_possibly_convert(SrcFile1, SrcFileInfo, DestFile),
html_convert_modules(Mods)
end;
_Other ->
@@ -2066,7 +2065,7 @@ add_init_and_end_per_suite([], LastMod, LastRef, FwMod) ->
end.
do_add_init_and_end_per_suite(LastMod, LastRef, Mod, FwMod) ->
- case code:is_loaded(Mod) of
+ _ = case code:is_loaded(Mod) of
false -> code:load_file(Mod);
_ -> ok
end,
@@ -2140,7 +2139,6 @@ do_add_end_per_suite_and_skip(LastMod, LastRef, Mod, FwMod) ->
%% Runs the specified tests, then displays/logs the summary.
run_test_cases(TestSpec, Config, TimetrapData) ->
- test_server:init_purify(),
case lists:member(no_src, get(test_server_logopts)) of
true ->
ok;
@@ -2323,7 +2321,7 @@ run_test_cases_loop([{SkipTag,{Type,Ref,Case,Comment},SkipMode}|Cases],
Config, TimetrapData, Mode, Status) when
((SkipTag==auto_skip_case) or (SkipTag==skip_case)) and
((Type==conf) or (Type==make)) ->
- file:set_cwd(filename:dirname(get(test_server_dir))),
+ ok = file:set_cwd(filename:dirname(get(test_server_dir))),
CurrIOHandler = get(test_server_common_io_handler),
ParentMode = tl(Mode),
@@ -2339,7 +2337,7 @@ run_test_cases_loop([{SkipTag,{Type,Ref,Case,Comment},SkipMode}|Cases],
false ->
%% this is a skipped end conf for a top level parallel
%% group, buffered io can be flushed
- handle_test_case_io_and_status(),
+ _ = handle_test_case_io_and_status(),
set_io_buffering(undefined),
{Mod,Func} = skip_case(AutoOrUser, Ref, 0, Case, Comment,
false, SkipMode),
@@ -2351,7 +2349,7 @@ run_test_cases_loop([{SkipTag,{Type,Ref,Case,Comment},SkipMode}|Cases],
_ ->
%% this is a skipped end conf for a parallel group nested
%% under a parallel group (io buffering is active)
- wait_for_cases(Ref),
+ _ = wait_for_cases(Ref),
{Mod,Func} = skip_case(AutoOrUser, Ref, 0, Case, Comment,
true, SkipMode),
ConfData = {Mod,{Func,get_name(SkipMode)},Comment},
@@ -2459,7 +2457,7 @@ run_test_cases_loop([{auto_skip_case,{Case,Comment},SkipMode}|Cases],
run_test_cases_loop([{skip_case,{{Mod,all}=Case,Comment},SkipMode}|Cases],
Config, TimetrapData, Mode, Status) ->
- skip_case(user, undefined, 0, Case, Comment, false, SkipMode),
+ _ = skip_case(user, undefined, 0, Case, Comment, false, SkipMode),
test_server_sup:framework_call(report, [tc_user_skip,
{Mod,{all,get_name(SkipMode)},
Comment}]),
@@ -2489,7 +2487,7 @@ run_test_cases_loop([{conf,Ref,Props,{Mod,Func}}|_Cases]=Cs0,
%% collect results from the test case processes
%% and calc total time
OkSkipFail = handle_test_case_io_and_status(),
- file:set_cwd(filename:dirname(get(test_server_dir))),
+ ok = file:set_cwd(filename:dirname(get(test_server_dir))),
After = ?now,
Before = get(test_server_parallel_start_time),
Elapsed = timer:now_diff(After, Before)/1000000,
@@ -3164,11 +3162,17 @@ delete_prop([], Props) ->
%% Shuffles the order of Cases.
shuffle_cases(Ref, Cases, undefined) ->
- shuffle_cases(Ref, Cases, ?now);
+ shuffle_cases(Ref, Cases, rand:seed_s(exsplus));
-shuffle_cases(Ref, [{conf,Ref,_,_}=Start | Cases], Seed) ->
+shuffle_cases(Ref, [{conf,Ref,_,_}=Start | Cases], Seed0) ->
{N,CasesToShuffle,Rest} = cases_to_shuffle(Ref, Cases),
- ShuffledCases = random_order(N, random:uniform_s(N, Seed), CasesToShuffle, []),
+ Seed = case Seed0 of
+ {X,Y,Z} when is_integer(X+Y+Z) ->
+ rand:seed(exsplus, Seed0);
+ _ ->
+ Seed0
+ end,
+ ShuffledCases = random_order(N, rand:uniform_s(N, Seed), CasesToShuffle, []),
[Start|ShuffledCases] ++ Rest.
cases_to_shuffle(Ref, Cases) ->
@@ -3202,7 +3206,7 @@ random_order(1, {_Pos,Seed}, [{_Ix,CaseOrGroup}], Shuffled) ->
Shuffled++CaseOrGroup;
random_order(N, {Pos,NewSeed}, IxCases, Shuffled) ->
{First,[{_Ix,CaseOrGroup}|Rest]} = lists:split(Pos-1, IxCases),
- random_order(N-1, random:uniform_s(N-1, NewSeed),
+ random_order(N-1, rand:uniform_s(N-1, NewSeed),
First++Rest, Shuffled++CaseOrGroup).
@@ -3576,7 +3580,7 @@ handle_io_and_exit_loop([], [{undefined,CurrPid,CaseNum,Mod,Func}|Ps] = Cases, O
handle_io_and_exit_loop(Refs, [{Ref,CurrPid,CaseNum,Mod,Func}|Ps] = Cases, Ok,Skip,Fail) ->
receive
{started,_,CurrPid,CaseNum,Mod,Func} ->
- handle_io_and_exits(self(), CurrPid, CaseNum, Mod, Func, Cases),
+ _ = handle_io_and_exits(self(), CurrPid, CaseNum, Mod, Func, Cases),
Refs1 =
case Refs of
[Ref|Rs] -> % must be end conf case for subgroup
@@ -3652,7 +3656,7 @@ handle_io_and_exits(Main, CurrPid, CaseNum, Mod, Func, Cases) ->
%% about the execution time and the return value of the test case function.
run_test_case(Ref, Num, Mod, Func, Args, RunInit, TimetrapData) ->
- file:set_cwd(filename:dirname(get(test_server_dir))),
+ ok = file:set_cwd(filename:dirname(get(test_server_dir))),
run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
TimetrapData, [], self()).
@@ -3662,7 +3666,7 @@ run_test_case(Ref, Num, Mod, Func, Args, skip_init, TimetrapData, Mode) ->
TimetrapData, Mode, self());
run_test_case(Ref, Num, Mod, Func, Args, RunInit, TimetrapData, Mode) ->
- file:set_cwd(filename:dirname(get(test_server_dir))),
+ ok = file:set_cwd(filename:dirname(get(test_server_dir))),
Main = self(),
case check_prop(parallel, Mode) of
false ->
@@ -3676,7 +3680,7 @@ run_test_case(Ref, Num, Mod, Func, Args, RunInit, TimetrapData, Mode) ->
spawn_link(
fun() ->
process_flag(trap_exit, true),
- [put(Key, Val) || {Key,Val} <- Dictionary],
+ _ = [put(Key, Val) || {Key,Val} <- Dictionary],
set_io_buffering({tc,Main}),
run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
TimetrapData, Mode, Main)
@@ -3693,7 +3697,8 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
false -> ok;
true ->
test_server_io:start_transaction(),
- Main ! {started,Ref,self(),Num,Mod,Func}
+ Main ! {started,Ref,self(),Num,Mod,Func},
+ ok
end,
TSDir = get(test_server_dir),
@@ -3768,7 +3773,7 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
%% run the test case
{Result,DetectedFail,ProcsBefore,ProcsAfter} =
- run_test_case_apply(Num, Mod, Func, [UpdatedArgs], GrName,
+ run_test_case_apply(Mod, Func, [UpdatedArgs], GrName,
RunInit, TimetrapData),
{Time,RetVal,Loc,Opts,Comment} =
case Result of
@@ -3900,7 +3905,8 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
true ->
test_server_io:end_transaction(),
Main ! {finished,Ref,self(),Num,Mod,Func,
- ?mod_result(Status),{Time,RetVal,Opts}}
+ ?mod_result(Status),{Time,RetVal,Opts}},
+ ok
end,
{Time,RetVal,Opts}.
@@ -4323,7 +4329,7 @@ do_format_exception(Reason={Error,Stack}) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% run_test_case_apply(CaseNum, Mod, Func, Args, Name, RunInit,
+%% run_test_case_apply(Mod, Func, Args, Name, RunInit,
%% TimetrapData) ->
%% {{Time,RetVal,Loc,Opts,Comment},DetectedFail,ProcessesBefore,ProcessesAfter} |
%% {{died,Reason,unknown,Comment},DetectedFail,ProcessesBefore,ProcessesAfter}
@@ -4337,9 +4343,9 @@ do_format_exception(Reason={Error,Stack}) ->
%% ProcessesBefore = ProcessesAfter = integer()
%%
-run_test_case_apply(CaseNum, Mod, Func, Args, Name, RunInit,
+run_test_case_apply(Mod, Func, Args, Name, RunInit,
TimetrapData) ->
- test_server:run_test_case_apply({CaseNum,Mod,Func,Args,Name,RunInit,
+ test_server:run_test_case_apply({Mod,Func,Args,Name,RunInit,
TimetrapData}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -5270,7 +5276,8 @@ check_cross([]) ->
%% This per application analysis writes the file cover.html in the
%% application's run.<timestamp> directory.
stop_cover(#cover{}=CoverInfo, TestDir) ->
- cover_analyse(CoverInfo, TestDir);
+ cover_analyse(CoverInfo, TestDir),
+ ok;
stop_cover(_CoverInfo, _TestDir) ->
%% Cover is probably controlled by the framework
ok.
@@ -5309,7 +5316,7 @@ cover_analyse(CoverInfo, TestDir) ->
[?cross_coverlog_name]),
io:fwrite(CoverLog, "<p>CoverFile: <code>~tp</code>\n", [CoverFile]),
- write_cross_cover_info(TestDir,Cross),
+ ok = write_cross_cover_info(TestDir,Cross),
case length(cover:imported_modules()) of
Imps when Imps > 0 ->
@@ -5323,7 +5330,7 @@ cover_analyse(CoverInfo, TestDir) ->
io:fwrite(CoverLog, "<p>Excluded module(s): <code>~tp</code>\n", [Excluded]),
Coverage = test_server:cover_analyse(TestDir, CoverInfo),
- write_binary_file(filename:join(TestDir,?raw_coverlog_name),
+ ok = write_binary_file(filename:join(TestDir,?raw_coverlog_name),
term_to_binary(Coverage)),
case lists:filter(fun({_M,{_,_,_}}) -> false;
@@ -5338,8 +5345,8 @@ cover_analyse(CoverInfo, TestDir) ->
end,
TotPercent = write_cover_result_table(CoverLog, Coverage),
- write_binary_file(filename:join(TestDir, ?cover_total),
- term_to_binary(TotPercent)).
+ ok = write_binary_file(filename:join(TestDir, ?cover_total),
+ term_to_binary(TotPercent)).
%% Cover analysis - accumulated over multiple tests
%% This can be executed on any node after all tests are finished.
@@ -5389,7 +5396,7 @@ write_cross_cover_info(Dir,Cross) ->
write_cross_cover_logs([{Tag,Coverage}|T],TagDirMods) ->
case lists:keyfind(Tag,1,TagDirMods) of
{_,Dir,Mods} when Mods=/=[] ->
- write_binary_file(filename:join(Dir,?raw_cross_coverlog_name),
+ ok = write_binary_file(filename:join(Dir,?raw_cross_coverlog_name),
term_to_binary(Coverage)),
CoverLogName = filename:join(Dir,?cross_coverlog_name),
{ok,CoverLog} = open_html_file(CoverLogName),
diff --git a/lib/test_server/src/test_server_gl.erl b/lib/common_test/src/test_server_gl.erl
index 444cfa595f..7d6fe64b92 100644
--- a/lib/test_server/src/test_server_gl.erl
+++ b/lib/common_test/src/test_server_gl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
-export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2]).
-record(st, {tc_supervisor :: 'none'|pid(), %Test case supervisor
- tc :: mfa(), %Current test case MFA
+ tc :: mfa() | 'undefined', %Current test case MFA
minor :: 'none'|pid(), %Minor fd
minor_monitor, %Monitor ref for minor fd
capture :: 'none'|pid(), %Capture output
@@ -185,7 +185,7 @@ handle_info({capture,Cap0}, St) ->
end,
{noreply,St#st{capture=Cap}};
handle_info({io_request,From,ReplyAs,Req}=IoReq, St) ->
- try io_req(Req, From, St) of
+ _ = try io_req(Req, From, St) of
passthrough ->
group_leader() ! IoReq;
{EscapeHtml,Data} ->
@@ -197,7 +197,8 @@ handle_info({io_request,From,ReplyAs,Req}=IoReq, St) ->
#st{capture=none} ->
ok;
#st{capture=CapturePid} ->
- CapturePid ! {captured,Data}
+ CapturePid ! {captured,Data},
+ ok
end,
case EscapeHtml andalso St#st.escape_chars of
true ->
diff --git a/lib/test_server/src/test_server_internal.hrl b/lib/common_test/src/test_server_internal.hrl
index 1ec2d83417..f0c1876dd6 100644
--- a/lib/test_server/src/test_server_internal.hrl
+++ b/lib/common_test/src/test_server_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/test_server_io.erl b/lib/common_test/src/test_server_io.erl
index 0d881d0ada..3d5238052b 100644
--- a/lib/test_server/src/test_server_io.erl
+++ b/lib/common_test/src/test_server_io.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -215,7 +215,7 @@ handle_call({set_fd,Tag,Fd}, _From, #st{fds=Fds0,tags=Tags0,
true ->
%% Fd ready, print anything buffered for associated Tag
lists:filtermap(fun({T,From,Str}) when T == Tag ->
- output(From, Tag, Str, St1),
+ _ = output(From, Tag, Str, St1),
false;
(_) ->
true
@@ -274,14 +274,15 @@ handle_call(reset_state, _From, #st{fds=Fds,tags=Tags,gls=Gls,
end
end, Tags),
GlList = gb_sets:to_list(Gls),
- [test_server_gl:stop(GL) || GL <- GlList],
+ _ = [test_server_gl:stop(GL) || GL <- GlList],
timer:sleep(100),
case lists:filter(fun(GlPid) -> is_process_alive(GlPid) end, GlList) of
[] ->
ok;
_ ->
timer:sleep(2000),
- [exit(GL, kill) || GL <- GlList]
+ [exit(GL, kill) || GL <- GlList],
+ ok
end,
Empty = gb_trees:empty(),
{ok,Shared} = test_server_gl:start_link(),
@@ -304,7 +305,7 @@ handle_call({stop,FdTags}, From, #st{fds=Fds0,tags=Tags0,
none ->
{Fds,Tags};
{value,Fd} ->
- file:close(Fd),
+ _ = file:close(Fd),
{gb_trees:delete(Tag, Fds),
lists:delete(Tag, Tags)}
end
@@ -333,7 +334,7 @@ handle_info({'EXIT',_Pid,Reason}, _St) ->
handle_info(stop_group_leaders, #st{gls=Gls}=St) ->
%% Stop the remaining group leaders.
GlPids = gb_sets:to_list(Gls),
- [test_server_gl:stop(GL) || GL <- GlPids],
+ _ = [test_server_gl:stop(GL) || GL <- GlPids],
timer:sleep(100),
Wait =
case lists:filter(fun(GlPid) -> is_process_alive(GlPid) end, GlPids) of
@@ -344,7 +345,7 @@ handle_info(stop_group_leaders, #st{gls=Gls}=St) ->
{noreply,St};
handle_info(kill_group_leaders, #st{gls=Gls,stopping=From,
pending_ops=Ops}=St) ->
- [exit(GL, kill) || GL <- gb_sets:to_list(Gls)],
+ _ = [exit(GL, kill) || GL <- gb_sets:to_list(Gls)],
if From /= undefined ->
gen_server:reply(From, ok);
true -> % reply has been sent already
@@ -434,7 +435,7 @@ do_print_buffered(Q0, St) ->
eot ->
Q;
{Tag,Str} ->
- do_output(Tag, Str, undefined, St),
+ _ = do_output(Tag, Str, undefined, St),
do_print_buffered(Q, St)
end.
@@ -448,5 +449,5 @@ gc(#st{gls=Gls0}) ->
InUse = ordsets:from_list(InUse0),
Gls = gb_sets:to_list(Gls0),
NotUsed = ordsets:subtract(Gls, InUse),
- [test_server_gl:stop(Pid) || Pid <- NotUsed],
+ _ = [test_server_gl:stop(Pid) || Pid <- NotUsed],
ok.
diff --git a/lib/test_server/src/test_server_node.erl b/lib/common_test/src/test_server_node.erl
index 37f8941d24..0b406c54cc 100644
--- a/lib/test_server/src/test_server_node.erl
+++ b/lib/common_test/src/test_server_node.erl
@@ -198,9 +198,9 @@ trc_loop(Sock,Patterns,Type) ->
gen_tcp:close(Sock)
end.
add_nodes(Nodes,Patterns,_Type) ->
- ttb:tracer(Nodes,[{file,{local, test_server}},
- {handler, {{?MODULE,handle_debug},initial}}]),
- ttb:p(all,[call,timestamp]),
+ {ok, _} = ttb:tracer(Nodes,[{file,{local, test_server}},
+ {handler, {{?MODULE,handle_debug},initial}}]),
+ {ok, _} = ttb:p(all,[call,timestamp]),
lists:foreach(fun({TP,M,F,A,Pat}) -> ttb:TP(M,F,A,Pat);
({CTP,M,F,A}) -> ttb:CTP(M,F,A)
end,
@@ -360,8 +360,8 @@ start_node_peer(SlaveName, OptList, From, TI) ->
-spec wait_for_node_started_fun(_, _, _, _, _) -> fun(() -> no_return()).
wait_for_node_started_fun(LSock, Tmo, Cleanup, TI, Self) ->
fun() ->
- wait_for_node_started(LSock,Tmo,undefined,
- Cleanup,TI,Self),
+ {{ok, _}, _} = wait_for_node_started(LSock,Tmo,undefined,
+ Cleanup,TI,Self),
receive after infinity -> ok end
end.
@@ -432,7 +432,7 @@ wait_for_node_started(LSock,Timeout,Client,Cleanup,TI,CtrlPid) ->
client=Client});
false -> ok
end,
- gen_tcp:controlling_process(Sock,CtrlPid),
+ ok = gen_tcp:controlling_process(Sock,CtrlPid),
test_server_ctrl:node_started(Nodename),
{{ok,Nodename},W}
end;
@@ -627,8 +627,7 @@ do_quote_progname([Prog,Arg|Args]) ->
end.
random_element(L) ->
- random:seed(os:timestamp()),
- lists:nth(random:uniform(length(L)), L).
+ lists:nth(rand:uniform(length(L)), L).
find_release(latest) ->
"/usr/local/otp/releases/latest/bin/erl";
diff --git a/lib/test_server/src/test_server_sup.erl b/lib/common_test/src/test_server_sup.erl
index c4530ba62f..6922e01fcc 100644
--- a/lib/test_server/src/test_server_sup.erl
+++ b/lib/common_test/src/test_server_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -755,7 +755,7 @@ framework_call(FW,_Func,_Args,DefaultReturn)
DefaultReturn;
framework_call(Callback,Func,Args,DefaultReturn) ->
Mod = list_to_atom(Callback),
- case code:is_loaded(Mod) of
+ _ = case code:is_loaded(Mod) of
false -> code:load_file(Mod);
_ -> ok
end,
@@ -851,7 +851,8 @@ util_start() ->
spawn_link(fun() ->
register(?MODULE, self()),
util_loop(#util_state{starter=Starter})
- end);
+ end),
+ ok;
_Pid ->
ok
end.
diff --git a/lib/common_test/src/unix_telnet.erl b/lib/common_test/src/unix_telnet.erl
index 2fc585735d..4897ddb2f8 100644
--- a/lib/common_test/src/unix_telnet.erl
+++ b/lib/common_test/src/unix_telnet.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/src/vts.erl b/lib/common_test/src/vts.erl
index df434d62c8..f1c5051164 100644
--- a/lib/common_test/src/vts.erl
+++ b/lib/common_test/src/vts.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -64,7 +64,7 @@
%%%-----------------------------------------------------------------
%%% User API
start() ->
- ct_webtool:start(),
+ {ok, _} = ct_webtool:start(),
ct_webtool:start_tools([],"app=vts").
init_data(ConfigFiles,EvHandlers,LogDir,LogOpts,Tests) ->
@@ -169,7 +169,7 @@ loop(State) ->
NewState = State#state{config=Config,event_handler=EvHandlers,
current_log_dir=LogDir,
logopts=LogOpts,tests=Tests},
- ct_install(NewState),
+ _ = ct_install(NewState),
return(From,ok),
loop(NewState);
{start_page,From} ->
@@ -192,12 +192,12 @@ loop(State) ->
loop(State);
{{add_config_file,Input},From} ->
{Return,State1} = add_config_file1(Input,State),
- ct_install(State1),
+ _ = ct_install(State1),
return(From,Return),
loop(State1);
{{remove_config_file,Input},From} ->
{Return,State1} = remove_config_file1(Input,State),
- ct_install(State1),
+ _ = ct_install(State1),
return(From,Return),
loop(State1);
{run_frame,From} ->
@@ -233,7 +233,7 @@ loop(State) ->
return(From,result_summary_frame1(State)),
loop(State);
stop_reload_results ->
- file:set_cwd(State#state.start_dir),
+ ok = file:set_cwd(State#state.start_dir),
loop(State#state{reload_results=false});
{no_result_log_frame,From} ->
return(From,no_result_log_frame1()),
@@ -277,8 +277,8 @@ call(Msg) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
-
+ To ! {Ref, Result},
+ ok.
run_test1(State=#state{tests=Tests,current_log_dir=LogDir,
logopts=LogOpts}) ->
@@ -311,7 +311,6 @@ run_test1(State=#state{tests=Tests,current_log_dir=LogDir,
ct_install(#state{config=Config,event_handler=EvHandlers,
current_log_dir=LogDir}) ->
ct_run:install([{config,Config},{event_handler,EvHandlers}],LogDir).
-
%%%-----------------------------------------------------------------
%%% HTML
start_page1() ->
@@ -549,7 +548,7 @@ case_select(Dir,Suite,Case,N) ->
end,
case MakeResult of
ok ->
- code:add_pathz(Dir),
+ true = code:add_pathz(Dir),
case catch apply(Suite,all,[]) of
{'EXIT',Reason} ->
io:format("\n~p\n",[Reason]),
@@ -755,7 +754,7 @@ report1(tests_start,{TestName,_N},State) ->
end,
State#state{testruns=TestRuns};
report1(tests_done,{_Ok,_Fail,_Skip},State) ->
- timer:send_after(5000, self(),stop_reload_results),
+ {ok, _} = timer:send_after(5000, self(),stop_reload_results),
State#state{running=State#state.running-1,reload_results=true};
report1(tc_start,{_Suite,_Case},State) ->
State;
diff --git a/lib/common_test/test/Makefile b/lib/common_test/test/Makefile
index a1cead4550..b1eddfedd7 100644
--- a/lib/common_test/test/Makefile
+++ b/lib/common_test/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2014. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -66,9 +66,14 @@ MODULES= \
ct_groups_search_SUITE \
ct_surefire_SUITE \
ct_telnet_SUITE \
- ct_release_test_SUITE
+ erl2html2_SUITE \
+ test_server_SUITE \
+ test_server_test_lib \
+ ct_release_test_SUITE \
+ ct_log_SUITE
ERL_FILES= $(MODULES:%=%.erl)
+HRL_FILES= test_server_test_lib.hrl
TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
INSTALL_PROGS= $(TARGET_FILES)
@@ -85,8 +90,8 @@ RELSYSDIR = $(RELEASE_PATH)/common_test_test
# FLAGS
# ----------------------------------------------------
-ERL_MAKE_FLAGS += -pa $(ERL_TOP)/lib/test_server/ebin
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_MAKE_FLAGS +=
+ERL_COMPILE_FLAGS +=
EBIN = .
@@ -119,7 +124,7 @@ release_spec: opt
release_tests_spec:
$(INSTALL_DIR) "$(RELSYSDIR)"
- $(INSTALL_DATA) $(ERL_FILES) $(COVERFILE) "$(RELSYSDIR)"
+ $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) $(COVERFILE) "$(RELSYSDIR)"
$(INSTALL_DATA) common_test.spec common_test.cover "$(RELSYSDIR)"
chmod -R u+w "$(RELSYSDIR)"
@tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
diff --git a/lib/common_test/test/common_test.cover b/lib/common_test/test/common_test.cover
index 87d00c420f..e8e01a9312 100644
--- a/lib/common_test/test/common_test.cover
+++ b/lib/common_test/test/common_test.cover
@@ -1,9 +1,2 @@
%% -*- erlang -*-
{incl_app,common_test,details}.
-{cross,common_test,[{test_server,[erl2html2,
- test_server,
- test_server_ctrl,
- test_server_gl,
- test_server_io,
- test_server_node,
- test_server_sup]}]}.
diff --git a/lib/common_test/test/ct_auto_compile_SUITE.erl b/lib/common_test/test/ct_auto_compile_SUITE.erl
index f00bd46d6f..e6939d23c0 100644
--- a/lib/common_test/test/ct_auto_compile_SUITE.erl
+++ b/lib/common_test/test/ct_auto_compile_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_auto_compile_SUITE_data/bad_SUITE.erl b/lib/common_test/test/ct_auto_compile_SUITE_data/bad_SUITE.erl
index ebeb4a51f6..64ec7dace5 100644
--- a/lib/common_test/test/ct_auto_compile_SUITE_data/bad_SUITE.erl
+++ b/lib/common_test/test/ct_auto_compile_SUITE_data/bad_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_auto_compile_SUITE_data/dummy_SUITE.erl b/lib/common_test/test/ct_auto_compile_SUITE_data/dummy_SUITE.erl
index 935fe1929f..7ce792777f 100644
--- a/lib/common_test/test/ct_auto_compile_SUITE_data/dummy_SUITE.erl
+++ b/lib/common_test/test/ct_auto_compile_SUITE_data/dummy_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_basic_html_SUITE.erl b/lib/common_test/test/ct_basic_html_SUITE.erl
index e8aae9f12a..c6529f6657 100644
--- a/lib/common_test/test/ct_basic_html_SUITE.erl
+++ b/lib/common_test/test/ct_basic_html_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_basic_html_SUITE_data/babbling_SUITE.erl b/lib/common_test/test/ct_basic_html_SUITE_data/babbling_SUITE.erl
index ae408e4ace..c72040d292 100644
--- a/lib/common_test/test/ct_basic_html_SUITE_data/babbling_SUITE.erl
+++ b/lib/common_test/test/ct_basic_html_SUITE_data/babbling_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_config_SUITE.erl b/lib/common_test/test/ct_config_SUITE.erl
index 9de135d786..cbbfe408a8 100644
--- a/lib/common_test/test/ct_config_SUITE.erl
+++ b/lib/common_test/test/ct_config_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -113,10 +113,14 @@ userconfig_static(Config) when is_list(Config) ->
["config_static_SUITE"]).
userconfig_dynamic(Config) when is_list(Config) ->
- run_test(config_dynamic_SUITE,
- Config,
- {userconfig, {config_driver, "config_server"}},
- ["config_dynamic_SUITE"]).
+ case skip_dynamic() of
+ true -> {skip,"TimeWarpingOS"};
+ false ->
+ run_test(config_dynamic_SUITE,
+ Config,
+ {userconfig, {config_driver, "config_server"}},
+ ["config_dynamic_SUITE"])
+ end.
testspec_legacy(Config) when is_list(Config) ->
DataDir = ?config(data_dir, Config),
@@ -147,16 +151,20 @@ testspec_static(Config) when is_list(Config) ->
file:delete(filename:join(ConfigDir, "spec_static.spec")).
testspec_dynamic(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- ConfigDir = ?config(config_dir, Config),
- make_spec(DataDir, ConfigDir, "spec_dynamic.spec",
- [config_dynamic_SUITE],
- [{userconfig, {config_driver, "config_server"}}]),
- run_test(config_dynamic_SUITE,
- Config,
- {spec, filename:join(ConfigDir, "spec_dynamic.spec")},
- []),
- file:delete(filename:join(ConfigDir, "spec_dynamic.spec")).
+ case skip_dynamic() of
+ true -> {skip,"TimeWarpingOS"};
+ false ->
+ DataDir = ?config(data_dir, Config),
+ ConfigDir = ?config(config_dir, Config),
+ make_spec(DataDir, ConfigDir, "spec_dynamic.spec",
+ [config_dynamic_SUITE],
+ [{userconfig, {config_driver, "config_server"}}]),
+ run_test(config_dynamic_SUITE,
+ Config,
+ {spec, filename:join(ConfigDir, "spec_dynamic.spec")},
+ []),
+ file:delete(filename:join(ConfigDir, "spec_dynamic.spec"))
+ end.
@@ -198,6 +206,23 @@ setup_env(Test, Config, CTConfig) ->
reformat_events(Events, EH) ->
ct_test_support:reformat(Events, EH).
+
+%%%-----------------------------------------------------------------
+%%% Test related to 'localtime' will often fail if the test host is
+%%% time warping, so let's just skip the 'dynamic' tests then.
+skip_dynamic() ->
+ case os:getenv("TS_EXTRA_PLATFORM_LABEL") of
+ TSExtraPlatformLabel when is_list(TSExtraPlatformLabel) ->
+ case string:str(TSExtraPlatformLabel,"TimeWarpingOS") of
+ 0 -> false;
+ _ -> true
+ end;
+ _ ->
+ false
+ end.
+
+
+
%%%-----------------------------------------------------------------
%%% TEST EVENTS
%%%-----------------------------------------------------------------
diff --git a/lib/common_test/test/ct_config_SUITE_data/config/test/config_driver.erl b/lib/common_test/test/ct_config_SUITE_data/config/test/config_driver.erl
index 98b32ece1f..f817f60172 100644
--- a/lib/common_test/test/ct_config_SUITE_data/config/test/config_driver.erl
+++ b/lib/common_test/test/ct_config_SUITE_data/config/test/config_driver.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl b/lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl
index e4a839d9f5..20fdf1034b 100644
--- a/lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl
+++ b/lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -73,8 +73,8 @@ test_get_known_variable(_)->
% localtime will be updated in 5 seconds, check that
test_localtime_update(_)->
Seconds = 5,
- LT1 = ct:get_config(localtime),
- ct:sleep(Seconds*1000),
+ LT1 = ct:reload_config(localtime),
+ timer:sleep(Seconds*1000), % don't want scaling of this timer
LT2 = ct:reload_config(localtime),
case is_diff_ok(LT1, LT2, Seconds) of
{false, Actual, Exp}->
@@ -137,6 +137,11 @@ my_dt_to_datetime([{date, D},{time, T}])->
is_diff_ok(DT1, DT2, Seconds)->
GS1 = calendar:datetime_to_gregorian_seconds(my_dt_to_datetime(DT1)),
GS2 = calendar:datetime_to_gregorian_seconds(my_dt_to_datetime(DT2)),
+ ct:log("Checking diff~n"
+ "DT1: ~p, gregorian seconds: ~p~n"
+ "DT2: ~p, gregorian seconds: ~p~n"
+ "Diff: ~p",
+ [DT1,GS1,DT2,GS2,GS2-GS1]),
if
GS2-GS1 > Seconds+Seconds/2;
GS2-GS1 < Seconds-Seconds/2->
diff --git a/lib/common_test/test/ct_config_SUITE_data/config/test/config_server.erl b/lib/common_test/test/ct_config_SUITE_data/config/test/config_server.erl
index 2061ec8d40..d795636606 100644
--- a/lib/common_test/test/ct_config_SUITE_data/config/test/config_server.erl
+++ b/lib/common_test/test/ct_config_SUITE_data/config/test/config_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_config_SUITE_data/config/test/config_static_SUITE.erl b/lib/common_test/test/ct_config_SUITE_data/config/test/config_static_SUITE.erl
index 5e06072bcc..5ebe75e501 100644
--- a/lib/common_test/test/ct_config_SUITE_data/config/test/config_static_SUITE.erl
+++ b/lib/common_test/test/ct_config_SUITE_data/config/test/config_static_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_config_info_SUITE.erl b/lib/common_test/test/ct_config_info_SUITE.erl
index 8ce9d9f16e..1389cd77ba 100644
--- a/lib/common_test/test/ct_config_info_SUITE.erl
+++ b/lib/common_test/test/ct_config_info_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_config_info_SUITE_data/config_info_1_SUITE.erl b/lib/common_test/test/ct_config_info_SUITE_data/config_info_1_SUITE.erl
index ea0e463ea6..ab88194e48 100644
--- a/lib/common_test/test/ct_config_info_SUITE_data/config_info_1_SUITE.erl
+++ b/lib/common_test/test/ct_config_info_SUITE_data/config_info_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_cover_SUITE.erl b/lib/common_test/test/ct_cover_SUITE.erl
index fcd9b15b4b..8c1bf4fe43 100644
--- a/lib/common_test/test/ct_cover_SUITE.erl
+++ b/lib/common_test/test/ct_cover_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_cover_SUITE_data/cover_SUITE.erl b/lib/common_test/test/ct_cover_SUITE_data/cover_SUITE.erl
index bfcc914d8c..4e013b8056 100644
--- a/lib/common_test/test/ct_cover_SUITE_data/cover_SUITE.erl
+++ b/lib/common_test/test/ct_cover_SUITE_data/cover_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_cover_nomerge_SUITE.erl b/lib/common_test/test/ct_cover_nomerge_SUITE.erl
index 5ee1eee5a0..918fcc6c0b 100644
--- a/lib/common_test/test/ct_cover_nomerge_SUITE.erl
+++ b/lib/common_test/test/ct_cover_nomerge_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_local_SUITE.erl b/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_local_SUITE.erl
index dac039a0b0..10bb912539 100644
--- a/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_local_SUITE.erl
+++ b/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_local_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_SUITE.erl b/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_SUITE.erl
index e52a38c6c8..87759638bf 100644
--- a/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_SUITE.erl
+++ b/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_nostop_SUITE.erl b/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_nostop_SUITE.erl
index 7e0674f889..29776324af 100644
--- a/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_nostop_SUITE.erl
+++ b/lib/common_test/test/ct_cover_nomerge_SUITE_data/cover_nomerge_remote_nostop_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE.erl b/lib/common_test/test/ct_error_SUITE.erl
index 53cfbd7118..fae23484e6 100644
--- a/lib/common_test/test/ct_error_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_10_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_10_SUITE.erl
index 27cd3ecf3c..bcbbd5f04f 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_10_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_10_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_11_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_11_SUITE.erl
index 611ce95b48..97ca442220 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_11_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_12_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_12_SUITE.erl
index 1f2e06de9d..3677c5384a 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_12_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_12_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_13_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_13_SUITE.erl
index 4f9d3017b5..b4722b8805 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_13_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_13_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_14_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_14_SUITE.erl
index d8ffd029e3..a0bfed8c35 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_14_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_14_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_1_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_1_SUITE.erl
index ae9edb540d..dfe5597386 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_1_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_2_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_2_SUITE.erl
index 2b31ac7eff..abcccca25c 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_2_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_3_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_3_SUITE.erl
index 884395bfde..bb4a205d0d 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_3_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_3_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_4_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_4_SUITE.erl
index cde1571a3c..69aab90f11 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_4_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_4_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_5_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_5_SUITE.erl
index 5fce02aaf8..22dfd2886f 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_5_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_5_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_6_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_6_SUITE.erl
index becc723c75..43da1b8273 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_6_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_6_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_7_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_7_SUITE.erl
index 3c4c103fac..c91082361b 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_7_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_7_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_8_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_8_SUITE.erl
index 1b98f289a1..591766ef42 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_8_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_8_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_9_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_9_SUITE.erl
index e983c0c7b1..8e53e8a299 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_9_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/cfg_error_9_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/config_func_error_1_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/config_func_error_1_SUITE.erl
index ec331d3444..e211a55b17 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/config_func_error_1_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/config_func_error_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/config_restored_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/config_restored_SUITE.erl
index 366e3d2724..f1fc6445b4 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/config_restored_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/config_restored_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/lib_error_1_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/lib_error_1_SUITE.erl
index 6f1b391ae6..029796b89b 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/lib_error_1_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/lib_error_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/misc_error_1_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/misc_error_1_SUITE.erl
index 8ba6844b27..5e9ff79097 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/misc_error_1_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/misc_error_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/no_compile_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/no_compile_SUITE.erl
index 99f8a68517..87523a932d 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/no_compile_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/no_compile_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_1_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_1_SUITE.erl
index 59a319503d..8e8f13f20b 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_1_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_2_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_2_SUITE.erl
index 759b050b31..21a02a7330 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_2_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_3_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_3_SUITE.erl
index fc4fa5b2d4..9ccd0fbd44 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_3_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_3_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_4_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_4_SUITE.erl
index b7b662cec6..e010b79c6c 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_4_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_4_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_5_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_5_SUITE.erl
index ce524a706c..d2da126360 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_5_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_5_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_6_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_6_SUITE.erl
index d67cd00318..932ce8f798 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_6_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_6_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_7_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_7_SUITE.erl
index 4701c66702..f5a69c1197 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_7_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_7_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_8_SUITE.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_8_SUITE.erl
index df0ce55d7b..eb5df8c45d 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_8_SUITE.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_8_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_utils.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_utils.erl
index 2e06cd7ecf..60a21fcd40 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_utils.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/timetrap_utils.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_error_SUITE_data/error/test/verify_config.erl b/lib/common_test/test/ct_error_SUITE_data/error/test/verify_config.erl
index b3e07288dc..530ee09654 100644
--- a/lib/common_test/test/ct_error_SUITE_data/error/test/verify_config.erl
+++ b/lib/common_test/test/ct_error_SUITE_data/error/test/verify_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_event_handler_SUITE.erl b/lib/common_test/test/ct_event_handler_SUITE.erl
index 683bbf4ea6..26b382e55d 100644
--- a/lib/common_test/test/ct_event_handler_SUITE.erl
+++ b/lib/common_test/test/ct_event_handler_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_event_handler_SUITE_data/eh_A.erl b/lib/common_test/test/ct_event_handler_SUITE_data/eh_A.erl
index 28c85ee2db..07b21b4178 100644
--- a/lib/common_test/test/ct_event_handler_SUITE_data/eh_A.erl
+++ b/lib/common_test/test/ct_event_handler_SUITE_data/eh_A.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
-behaviour(gen_event).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("common_test/include/ct_event.hrl").
%% gen_event callbacks
diff --git a/lib/common_test/test/ct_event_handler_SUITE_data/event_handling_1/test/eh_11_SUITE.erl b/lib/common_test/test/ct_event_handler_SUITE_data/event_handling_1/test/eh_11_SUITE.erl
index af88e6775a..9f58bb8369 100644
--- a/lib/common_test/test/ct_event_handler_SUITE_data/event_handling_1/test/eh_11_SUITE.erl
+++ b/lib/common_test/test/ct_event_handler_SUITE_data/event_handling_1/test/eh_11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_gen_conn_SUITE.erl b/lib/common_test/test/ct_gen_conn_SUITE.erl
index 82f68239d7..27795c7138 100644
--- a/lib/common_test/test/ct_gen_conn_SUITE.erl
+++ b/lib/common_test/test/ct_gen_conn_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl b/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
index 3d122f1de5..19eb1211fa 100644
--- a/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
+++ b/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -73,24 +73,28 @@ handles_to_multi_conn_pids(_Config) ->
ConnPid3 = ct_gen_conn:get_conn_pid(Handle3),
{true,true} = {is_process_alive(Handle3),is_process_alive(ConnPid3)},
+ monitor_procs([Handle1,ConnPid1,Handle2,ConnPid2,Handle3,ConnPid3]),
+
ok = proto:close(Handle1),
- ct:sleep(100),
+ ok = wait_procs_down([Handle1,ConnPid1]),
{false,false} = {is_process_alive(Handle1),is_process_alive(ConnPid1)},
{true,true} = {is_process_alive(Handle2),is_process_alive(ConnPid2)},
ok = proto:kill_conn_proc(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([ConnPid2]),
{true,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2)},
ConnPid2x = ct_gen_conn:get_conn_pid(Handle2),
true = is_process_alive(ConnPid2x),
+ monitor_procs([ConnPid2x]),
+
ok = proto:close(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2,ConnPid2x]),
{false,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2x)},
application:set_env(ct_test, reconnect, false),
ok = proto:kill_conn_proc(Handle3),
- ct:sleep(100),
+ ok = wait_procs_down([Handle3,ConnPid3]),
{false,false} = {is_process_alive(Handle3),is_process_alive(ConnPid3)},
ok.
@@ -116,24 +120,28 @@ handles_to_single_conn_pids(_Config) ->
{undefined,Handle3,_,_}] = lists:sort(ct_util:get_connections(ConnPid)),
ct:pal("CONNS = ~n~p", [Conns]),
+ monitor_procs([Handle1,Handle2,Handle3,ConnPid]),
ok = proto:close(Handle1),
- ct:sleep(100),
+ ok = wait_procs_down([Handle1]),
{false,true} = {is_process_alive(Handle1),is_process_alive(ConnPid)},
ok = proto:kill_conn_proc(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([ConnPid]),
NewConnPid = ct_gen_conn:get_conn_pid(Handle2),
NewConnPid = ct_gen_conn:get_conn_pid(Handle3),
true = is_process_alive(Handle2),
true = is_process_alive(Handle3),
+ false = is_process_alive(ConnPid),
+
+ monitor_procs([NewConnPid]),
ok = proto:close(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2]),
{false,true} = {is_process_alive(Handle2),is_process_alive(NewConnPid)},
application:set_env(ct_test, reconnect, false),
ok = proto:kill_conn_proc(Handle3),
- ct:sleep(100),
+ ok = wait_procs_down([Handle3,NewConnPid]),
{false,false} = {is_process_alive(Handle3),is_process_alive(NewConnPid)},
ok.
@@ -158,30 +166,37 @@ names_to_multi_conn_pids(_Config) ->
Handle1 = proto:open(mconn1),
+ monitor_procs([Handle1,ConnPid1,Handle2,ConnPid2,Handle3,ConnPid3]),
+
ok = proto:close(mconn1),
- ct:sleep(100),
+ ok = wait_procs_down([Handle1,ConnPid1]),
{false,false} = {is_process_alive(Handle1),is_process_alive(ConnPid1)},
ok = proto:kill_conn_proc(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([ConnPid2]),
Handle2 = proto:open(mconn2), % should've been reconnected already
{true,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2)},
ConnPid2x = ct_gen_conn:get_conn_pid(Handle2),
true = is_process_alive(ConnPid2x),
+ monitor_procs([ConnPid2x]),
+
ok = proto:close(mconn2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2,ConnPid2x]),
{false,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2x)},
Handle2y = proto:open(mconn2),
ConnPid2y = ct_gen_conn:get_conn_pid(Handle2y),
{true,true} = {is_process_alive(Handle2y),is_process_alive(ConnPid2y)},
+
+ monitor_procs([Handle2y,ConnPid2y]),
+
ok = proto:close(mconn2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2y,ConnPid2y]),
{false,false} = {is_process_alive(Handle2y),is_process_alive(ConnPid2y)},
application:set_env(ct_test, reconnect, false),
ok = proto:kill_conn_proc(Handle3),
- ct:sleep(100),
+ ok = wait_procs_down([Handle3,ConnPid3]),
{false,false} = {is_process_alive(Handle3),is_process_alive(ConnPid3)},
ok.
@@ -211,16 +226,20 @@ names_to_single_conn_pids(_Config) ->
{sconn3,Handle3,_,_}] = lists:sort(ct_util:get_connections(ConnPid)),
ct:pal("CONNS on ~p = ~n~p", [ConnPid,Conns]),
+ monitor_procs([Handle1,Handle2,Handle3,ConnPid]),
+
ok = proto:close(sconn1),
- ct:sleep(100),
+ ok = wait_procs_down([Handle1]),
{false,true} = {is_process_alive(Handle1),is_process_alive(ConnPid)},
ok = proto:kill_conn_proc(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([ConnPid]),
{true,false} = {is_process_alive(Handle2),is_process_alive(ConnPid)},
Handle2 = proto:open(sconn2), % should've been reconnected already
NewConnPid = ct_gen_conn:get_conn_pid(Handle2),
true = is_process_alive(NewConnPid),
+
+ monitor_procs([NewConnPid]),
Conns1 = [{sconn2,Handle2,_,_},
{sconn3,Handle3,_,_}] =
@@ -228,14 +247,29 @@ names_to_single_conn_pids(_Config) ->
ct:pal("CONNS on ~p = ~n~p", [NewConnPid,Conns1]),
ok = proto:close(sconn2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2]),
{false,true} = {is_process_alive(Handle2),is_process_alive(NewConnPid)},
application:set_env(ct_test, reconnect, false),
ok = proto:kill_conn_proc(Handle3),
- ct:sleep(100),
+ ok = wait_procs_down([Handle3,NewConnPid]),
{false,false} = {is_process_alive(Handle3),is_process_alive(NewConnPid)},
ok.
+%%%-----------------------------------------------------------------
+monitor_procs(Pids) ->
+ [erlang:monitor(process,Pid) || Pid <- Pids],
+ ok.
+
+wait_procs_down([]) ->
+ ok;
+wait_procs_down(Pids) ->
+ receive
+ {'DOWN',_,process,Pid,_} ->
+ wait_procs_down(lists:delete(Pid,Pids))
+ after 2000 ->
+ timeout
+ end.
+
diff --git a/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl b/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl
index a466891f81..dd754b73e4 100644
--- a/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl
+++ b/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_info_SUITE.erl b/lib/common_test/test/ct_group_info_SUITE.erl
index 1c73f3244b..044fc441b3 100644
--- a/lib/common_test/test/ct_group_info_SUITE.erl
+++ b/lib/common_test/test/ct_group_info_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_info_SUITE_data/group_require_1_SUITE.erl b/lib/common_test/test/ct_group_info_SUITE_data/group_require_1_SUITE.erl
index 50d06cd245..57a4af47c4 100644
--- a/lib/common_test/test/ct_group_info_SUITE_data/group_require_1_SUITE.erl
+++ b/lib/common_test/test/ct_group_info_SUITE_data/group_require_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_info_SUITE_data/group_require_2_SUITE.erl b/lib/common_test/test/ct_group_info_SUITE_data/group_require_2_SUITE.erl
index 4d06ff63b2..514ce7d1b5 100644
--- a/lib/common_test/test/ct_group_info_SUITE_data/group_require_2_SUITE.erl
+++ b/lib/common_test/test/ct_group_info_SUITE_data/group_require_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_info_SUITE_data/group_require_3_SUITE.erl b/lib/common_test/test/ct_group_info_SUITE_data/group_require_3_SUITE.erl
index a4069e9ff4..88818b8a00 100644
--- a/lib/common_test/test/ct_group_info_SUITE_data/group_require_3_SUITE.erl
+++ b/lib/common_test/test/ct_group_info_SUITE_data/group_require_3_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_1_SUITE.erl b/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_1_SUITE.erl
index 888477605f..4b5889ef5c 100644
--- a/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_1_SUITE.erl
+++ b/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_2_SUITE.erl b/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_2_SUITE.erl
index ea1ac39817..3acba27b81 100644
--- a/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_2_SUITE.erl
+++ b/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_3_SUITE.erl b/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_3_SUITE.erl
index 974a34ef62..e86058d68c 100644
--- a/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_3_SUITE.erl
+++ b/lib/common_test/test/ct_group_info_SUITE_data/group_timetrap_3_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_leader_SUITE.erl b/lib/common_test/test/ct_group_leader_SUITE.erl
index 3b9f73bb28..a8108bc183 100644
--- a/lib/common_test/test/ct_group_leader_SUITE.erl
+++ b/lib/common_test/test/ct_group_leader_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_group_leader_SUITE_data/group_leader_SUITE.erl b/lib/common_test/test/ct_group_leader_SUITE_data/group_leader_SUITE.erl
index af9fa31926..4bed60e895 100644
--- a/lib/common_test/test/ct_group_leader_SUITE_data/group_leader_SUITE.erl
+++ b/lib/common_test/test/ct_group_leader_SUITE_data/group_leader_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_search_SUITE.erl b/lib/common_test/test/ct_groups_search_SUITE.erl
index ac1659e3c5..13742c11b1 100644
--- a/lib/common_test/test/ct_groups_search_SUITE.erl
+++ b/lib/common_test/test/ct_groups_search_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_1_SUITE.erl b/lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_1_SUITE.erl
index 27291e7269..8dc0802ed6 100644
--- a/lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_1_SUITE.erl
+++ b/lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_2_SUITE.erl b/lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_2_SUITE.erl
index 7e3886b665..8c33125d7b 100644
--- a/lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_2_SUITE.erl
+++ b/lib/common_test/test/ct_groups_search_SUITE_data/groups_search_dummy_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_spec_SUITE.erl b/lib/common_test/test/ct_groups_spec_SUITE.erl
index 363a3c6bf0..44c6e433dc 100644
--- a/lib/common_test/test/ct_groups_spec_SUITE.erl
+++ b/lib/common_test/test/ct_groups_spec_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_spec_SUITE_data/groups_spec_1_SUITE.erl b/lib/common_test/test/ct_groups_spec_SUITE_data/groups_spec_1_SUITE.erl
index 909e203099..bef50a4141 100644
--- a/lib/common_test/test/ct_groups_spec_SUITE_data/groups_spec_1_SUITE.erl
+++ b/lib/common_test/test/ct_groups_spec_SUITE_data/groups_spec_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_1_SUITE.erl b/lib/common_test/test/ct_groups_test_1_SUITE.erl
index 143fe3e354..a0139462f1 100644
--- a/lib/common_test/test/ct_groups_test_1_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_11_SUITE.erl b/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_11_SUITE.erl
index 889d44c33a..e211351dcf 100644
--- a/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_11_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_12_SUITE.erl b/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_12_SUITE.erl
index 2e2385b21a..61210eca7f 100644
--- a/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_12_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_1/test/groups_12_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_21_SUITE.erl b/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_21_SUITE.erl
index 039517227f..b849df678b 100644
--- a/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_21_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_21_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_22_SUITE.erl b/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_22_SUITE.erl
index 596ae25f05..4731bb738f 100644
--- a/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_22_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_1_SUITE_data/groups_2/test/groups_22_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_2_SUITE.erl b/lib/common_test/test/ct_groups_test_2_SUITE.erl
index d8075ffc97..cbc8491b37 100644
--- a/lib/common_test/test/ct_groups_test_2_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/missing_conf_SUITE.erl b/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/missing_conf_SUITE.erl
index e50e131248..4d868ef6e2 100644
--- a/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/missing_conf_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/missing_conf_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/repeat_1_SUITE.erl b/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/repeat_1_SUITE.erl
index 2b9ef5a357..7f6346bc80 100644
--- a/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/repeat_1_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_1/repeat_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_21_SUITE.erl b/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_21_SUITE.erl
index 0138310c36..e99ba8c570 100644
--- a/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_21_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_21_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_22_SUITE.erl b/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_22_SUITE.erl
index ea3db09d9e..934f76c4cf 100644
--- a/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_22_SUITE.erl
+++ b/lib/common_test/test/ct_groups_test_2_SUITE_data/groups_2/groups_22_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE.erl
index 8353f5936c..690d0af1bb 100644
--- a/lib/common_test/test/ct_hooks_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("common_test/include/ct_event.hrl").
-define(eh, ct_test_support_eh).
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_id_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_id_cth.erl
index c7cda285be..5f8656e991 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_id_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_id_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_init_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_init_cth.erl
index 023f6440c2..ea6ee32cfd 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_init_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/crash_init_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_empty_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_empty_SUITE.erl
index c443700dde..efa8b538c1 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_empty_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_empty_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_one_skip_one_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_one_skip_one_SUITE.erl
index 1761b6f8ed..5a23bd9dcb 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_one_skip_one_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_one_skip_one_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_per_suite_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_per_suite_SUITE.erl
index 09cd89a217..64121c3f80 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_per_suite_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_fail_per_suite_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_prio_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_prio_SUITE.erl
index 3569f378c6..0de27621bb 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_prio_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_prio_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_data_dir_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_data_dir_SUITE.erl
index f6b1eab9b6..3fbc536de9 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_data_dir_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_data_dir_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_exit_in_init_scope_suite_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_exit_in_init_scope_suite_cth_SUITE.erl
index 480cd32cb8..749d7a93db 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_exit_in_init_scope_suite_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_exit_in_init_scope_suite_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_no_config_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_no_config_SUITE.erl
index 24f1122e56..ee8f1148a8 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_no_config_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_no_config_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_cth_SUITE.erl
index 1800751d71..464fab87cd 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_state_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_state_cth_SUITE.erl
index ead7e42133..bfdbb4a993 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_state_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_group_state_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_cth_SUITE.erl
index 1eef06419a..26fc2e79c6 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_state_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_state_cth_SUITE.erl
index a0336be61c..9b7b922cc2 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_state_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_suite_state_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_tc_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_tc_cth_SUITE.erl
index 71a0db3e3f..d400348354 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_tc_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_per_tc_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_crash_in_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_crash_in_cth_SUITE.erl
index 25523e06f4..d7eadaf356 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_crash_in_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_crash_in_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_cth_SUITE.erl
index 33dbac2ed1..8632166a00 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_state_cth_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_state_cth_SUITE.erl
index 06b256a77d..cec4b2d5b8 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_state_cth_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_scope_suite_state_cth_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_update_config_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_update_config_SUITE.erl
index 5e4df0b3c2..20f139bcc8 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_update_config_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_update_config_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl
index dbbee365dc..bd1ac54781 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -40,6 +40,7 @@ suite() ->
%% @end
%%--------------------------------------------------------------------
init_per_suite(Config) ->
+ application:start(sasl),
Gen = spawn(fun() -> gen() end),
[{gen,Gen}|Config].
@@ -52,6 +53,7 @@ end_per_suite(Config) ->
Gen = proplists:get_value(gen, Config),
exit(Gen, kill),
ct:sleep(100),
+ application:stop(sasl),
ok.
%%--------------------------------------------------------------------
@@ -90,7 +92,8 @@ end_per_testcase(_TestCase, _Config) ->
%% @end
%%--------------------------------------------------------------------
groups() ->
- [{g1,[parallel,{repeat,10}],[tc1,tc2,tc3]}].
+ [{g1,[parallel,{repeat,10}],[tc1,tc2,tc3]},
+ {g2,[{repeat,10}],[tc1,tc2,tc3]}].
%%--------------------------------------------------------------------
%% @spec all() -> GroupsAndTestCases | {skip,Reason}
@@ -101,7 +104,7 @@ groups() ->
%% @end
%%--------------------------------------------------------------------
all() ->
- [{group,g1}].
+ [{group,g1},{group,g2}].
tc1(_) ->
ct:sleep(100),
@@ -121,5 +124,6 @@ gen() ->
gen_loop(N) ->
ct:log("Logger iteration: ~p", [N]),
error_logger:error_report(N),
- ct:sleep(200),
+ error_logger:info_report(progress, N),
+ ct:sleep(150),
gen_loop(N+1).
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/empty_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/empty_cth.erl
index 8b64ff8060..c00eb5cf93 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/empty_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/empty_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_post_suite_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_post_suite_cth.erl
index dc5806d23d..559b22bc9f 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_post_suite_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_post_suite_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_pre_suite_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_pre_suite_cth.erl
index a79f4d4541..51202443bf 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_pre_suite_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/fail_pre_suite_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/id_no_init_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/id_no_init_cth.erl
index 8e39123fc1..b9dc2dfb09 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/id_no_init_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/id_no_init_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_cth.erl
index a084423cf3..3625c204f3 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_terminate_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_terminate_cth.erl
index 7895c43aeb..b49cbe7fb4 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_terminate_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_terminate_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/prio_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/prio_cth.erl
index 72d6d186ed..a687743641 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/prio_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/prio_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/recover_post_suite_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/recover_post_suite_cth.erl
index cf484d3cd7..4d9c60f1ca 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/recover_post_suite_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/recover_post_suite_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/same_id_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/same_id_cth.erl
index 60615d97fc..494f398fc1 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/same_id_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/same_id_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_post_suite_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_post_suite_cth.erl
index 56163e730c..d5b347e723 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_post_suite_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_post_suite_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl
index deb622b316..36abac0bf8 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_suite_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_suite_cth.erl
index ea1d485700..fa510b2d54 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_suite_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_suite_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/state_update_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/state_update_cth.erl
index c2135bbbee..7ec0d458b6 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/state_update_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/state_update_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/undef_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/undef_cth.erl
index 5ac4bdddf8..2b9e726819 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/undef_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/undef_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/update_config_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/update_config_cth.erl
index 928bedfed1..d48981f667 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/update_config_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/update_config_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_config_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_config_cth.erl
index 1df212f266..71d84781e0 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_config_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_config_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_data_dir_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_data_dir_cth.erl
index 7abcea4393..9abd2e5e83 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_data_dir_cth.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_data_dir_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_log_SUITE.erl b/lib/common_test/test/ct_log_SUITE.erl
new file mode 100644
index 0000000000..9bdd44cbdf
--- /dev/null
+++ b/lib/common_test/test/ct_log_SUITE.erl
@@ -0,0 +1,328 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%%-------------------------------------------------------------------
+%%% File: ct_log_SUITE
+%%%
+%%% Description: Test that ct:log, ct:pal and io:format print to
+%%% the test case log file as expected, with or without special HTML
+%%% characters being escaped.
+%%%
+%%%-------------------------------------------------------------------
+-module(ct_log_SUITE).
+
+-compile(export_all).
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+-define(eh, ct_test_support_eh).
+
+%%--------------------------------------------------------------------
+%% TEST SERVER CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_testcase(_TestCase, Config) ->
+ Config.
+
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ [{group,print_and_verify}].
+
+groups() ->
+ [{print_and_verify,[sequence],[print,verify]}].
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+
+%%%-----------------------------------------------------------------
+%%%
+print(Config) ->
+ TcLogFile = proplists:get_value(tc_logfile, Config),
+ Pid = self(),
+ String = atom_to_list(?MODULE),
+
+ %% START mark
+ io:format("LOGGING START~n"),
+
+ %% io:format
+ io:format("1. Printing nothing~n", []),
+ io:format("2. Printing a string: ~s~n", [String]),
+ io:format("3. Printing a string: ~p~n", [String]),
+ io:format("4. Printing a tuple: ~w~n", [{module,?MODULE}]),
+ io:format("5. Printing a pid: ~w~n", [Pid]),
+ io:format("6. Printing HTML: <pre>~s</pre>~n", [String]),
+
+ %% --- API ---
+ %% pal(Format) ->
+ %% = ct:pal(default, 50, Format, []).
+ %% pal(X1, X2) -> ok
+ %% X1 = Category | Importance | Format
+ %% X2 = Format | FormatArgs
+ %% pal(X1, X2, X3) -> ok
+ %% X1 = Category | Importance
+ %% X2 = Importance | Format
+ %% X3 = Format | FormatArgs
+ %% pal(Category, Importance, Format, FormatArgs) -> ok
+ %% ------
+ ct:pal("1. Printing nothing"),
+ ct:pal("2. Printing nothing", []),
+ ct:pal("3. Printing a string: ~s", [String]),
+ ct:pal("4. Printing a string: ~p", [String]),
+ ct:pal("5. Printing a tuple: ~w", [{module,?MODULE}]),
+ ct:pal("6. Printing a pid: ~w", [Pid]),
+ ct:pal("7. Printing HTML: <pre>~s</pre>", [String]),
+ ct:pal(ct_internal, "8. Printing with category"),
+ ct:pal(ct_internal, "9. Printing with ~s", ["category"]),
+ ct:pal(50, "10. Printing with importance"),
+ ct:pal(50, "11. Printing with ~s", ["importance"]),
+ ct:pal(ct_internal, 50, "12. Printing with ~s", ["category and importance"]),
+
+ %% --- API ---
+ %% log(Format) -> ok
+ %% = ct:log(default, 50, Format, [], []).
+ %% log(X1, X2) -> ok
+ %% X1 = Category | Importance | Format
+ %% X2 = Format | FormatArgs
+ %% log(X1, X2, X3) -> ok
+ %% X1 = Category | Importance
+ %% X2 = Importance | Format
+ %% X3 = Format | FormatArgs | Opts
+ %% log(X1, X2, X3, X4) -> ok
+ %% X1 = Category | Importance
+ %% X2 = Importance | Format
+ %% X3 = Format | FormatArgs
+ %% X4 = FormatArgs | Opts
+ %% log(Category, Importance, Format, FormatArgs, Opts) -> ok
+ %% ------
+ ct:log("1. Printing nothing"),
+ ct:log("2. Printing nothing", []),
+ ct:log("3. Printing a string: ~s", [String]),
+ ct:log("4. Printing a string: ~p", [String]),
+ ct:log("5. Printing a tuple: ~w", [{module,?MODULE}]),
+ ct:log("6. Printing a pid: ~w", [Pid]),
+ ct:log("7. Printing HTML: <pre>~s</pre>", [String]),
+ ct:log("8. Printing a pid escaped: ~w", [Pid], [esc_chars]),
+ ct:log("9. Printing a string escaped: ~p", [String], [esc_chars]),
+ ct:log("10. Printing HTML escaped: <pre>~s</pre>", [String], [esc_chars]),
+ ct:log("11. Printing a string, no css: ~s", [String], [no_css]),
+ ct:log("12. Printing a pid escaped, no css: ~w", [Pid],
+ [esc_chars, no_css]),
+ ct:log(ct_internal, "13. Printing with category"),
+ ct:log(ct_internal, "14. Printing with ~s", ["category"]),
+ ct:log(ct_internal, "15. Printing with ~s, no_css", ["category"],
+ [no_css]),
+ ct:log(50, "16. Printing with importance"),
+ ct:log(50, "17. Printing with ~s", ["importance"]),
+ ct:log(50, "18. Printing with ~s, no_css", ["importance"], [no_css]),
+ ct:log(ct_internal, 50, "19. Printing with category and importance"),
+ ct:log(ct_internal, 50, "20. Printing with ~s", ["category and importance"]),
+ ct:log(ct_internal, 50, "21. Printing a pid escaped with ~s, no_css: ~w",
+ ["category and importance",Pid], [esc_chars,no_css]),
+
+ %% END mark
+ ct:log("LOGGING END", [], [no_css]),
+ {save_config,[{the_logfile,TcLogFile},{the_pid,Pid},{the_string,String}]}.
+
+
+verify(Config) ->
+ {print,SavedCfg} = proplists:get_value(saved_config, Config),
+ TcLogFile = proplists:get_value(the_logfile, SavedCfg),
+ Pid = proplists:get_value(the_pid, SavedCfg),
+ StrPid = lists:flatten(io_lib:format("~p",[Pid])),
+ EscPid = "&lt;" ++ string:substr(StrPid, 2, length(StrPid)-2) ++ "&gt;",
+ String = proplists:get_value(the_string, SavedCfg),
+ ct:log("Read from prev testcase: ~p & ~p", [TcLogFile,Pid]),
+ {ok,Dev} = file:open(TcLogFile, [read]),
+ ok = read_until(Dev, "LOGGING START\n"),
+
+ %% io:format
+ match_line(Dev, "1. Printing nothing", []),
+ read_nl(Dev),
+ match_line(Dev, "2. Printing a string: ~s", [String]),
+ read_nl(Dev),
+ match_line(Dev, "3. Printing a string: ~p", [String]),
+ read_nl(Dev),
+ match_line(Dev, "4. Printing a tuple: ~w", [{module,?MODULE}]),
+ read_nl(Dev),
+ match_line(Dev, "5. Printing a pid: ~s", [EscPid]),
+ read_nl(Dev),
+ match_line(Dev, "6. Printing HTML: &lt;pre&gt;~s&lt;/pre&gt;", [String]),
+ read_nl(Dev),
+ %% ct:pal
+ read_header(Dev),
+ match_line(Dev, "1. Printing nothing", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "2. Printing nothing", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "3. Printing a string: ~s", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "4. Printing a string: ~p", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "5. Printing a tuple: ~w", [{module,?MODULE}]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "6. Printing a pid: ~s", [EscPid]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "7. Printing HTML: &lt;pre&gt;~s&lt;/pre&gt;", [String]),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "8. Printing with category", []),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "9. Printing with ~s", ["category"]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "10. Printing with importance", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "11. Printing with ~s", ["importance"]),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "12. Printing with ~s", ["category and importance"]),
+ read_footer(Dev),
+ %% ct:log
+ read_header(Dev),
+ match_line(Dev, "1. Printing nothing", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "2. Printing nothing", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "3. Printing a string: ~s", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "4. Printing a string: ~p", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "5. Printing a tuple: ~w", [{module,?MODULE}]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "6. Printing a pid: ~w", [Pid]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "7. Printing HTML: <pre>~s</pre>", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "8. Printing a pid escaped: ~s", [EscPid]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "9. Printing a string escaped: ~p", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "10. Printing HTML escaped: &lt;pre&gt;~s&lt;/pre&gt;",
+ [String]),
+ read_footer(Dev),
+ match_line(Dev, "11. Printing a string, no css: ~s", [String]),
+ match_line(Dev, "12. Printing a pid escaped, no css: ~s", [EscPid]),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "13. Printing with category", []),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "14. Printing with ~s", ["category"]),
+ read_footer(Dev),
+ match_line(Dev, "15. Printing with ~s, no_css", ["category"]),
+ read_header(Dev),
+ match_line(Dev, "16. Printing with importance", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "17. Printing with ~s", ["importance"]),
+ read_footer(Dev),
+ match_line(Dev, "18. Printing with ~s, no_css", ["importance"]),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "19. Printing with category and importance", []),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "20. Printing with ~s", ["category and importance"]),
+ read_footer(Dev),
+ match_line(Dev, "21. Printing a pid escaped with ~s, no_css: ~s",
+ ["category and importance",EscPid]),
+
+ file:close(Dev),
+ ok.
+
+%%%-----------------------------------------------------------------
+%%% HELP FUNCTIONS
+%%%-----------------------------------------------------------------
+
+read_until(Dev, Pat) ->
+ case file:read_line(Dev) of
+ {ok,Pat} ->
+ file:read_line(Dev), % \n
+ ok;
+ eof ->
+ file:close(Dev),
+ {error,{not_found,Pat}};
+ _ ->
+ read_until(Dev, Pat)
+ end.
+
+match_line(Dev, Format, Args) ->
+ Pat = lists:flatten(io_lib:format(Format, Args)),
+ Line = element(2, file:read_line(Dev)),
+ case re:run(Line, Pat) of
+ {match,_} ->
+ ok;
+ nomatch ->
+ ct:pal("ERROR! No match for ~p.\nLine = ~p", [Pat,Line]),
+ file:close(Dev),
+ ct:fail({mismatch,Pat,Line})
+ end.
+
+read_header(Dev) ->
+ read_header(Dev, "\"default\"").
+
+read_header(Dev, Cat) ->
+ file:read_line(Dev), % \n
+ "</pre>\n" = element(2, file:read_line(Dev)),
+ {match,_} =
+ re:run(element(2, file:read_line(Dev)), "<div class="++Cat++"><pre><b>"
+ "\\*\\*\\* User \\d{4}-\\d{2}-\\d{2} "
+ "\\d{2}:\\d{2}:\\d{2}.\\d{1,} \\*\\*\\*</b>").
+
+read_footer(Dev) ->
+ "</pre></div>\n" = element(2, file:read_line(Dev)),
+ "<pre>\n" = element(2, file:read_line(Dev)).
+
+read_nl(Dev) ->
+ file:read_line(Dev).
+
+
diff --git a/lib/common_test/test/ct_master_SUITE.erl b/lib/common_test/test/ct_master_SUITE.erl
index 15b49c67c0..0ec549c4bc 100644
--- a/lib/common_test/test/ct_master_SUITE.erl
+++ b/lib/common_test/test/ct_master_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -135,7 +135,7 @@ make_spec(DataDir, FileName, NodeNames, Suites, Config) ->
C = lists:map(
fun(NodeName) ->
- Rnd = random:uniform(2),
+ Rnd = rand:uniform(2),
if Rnd == 1->
{config,NodeName,filename:join(DataDir,
"master/config.txt")};
diff --git a/lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl b/lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl
index e16d629ecc..d94ead4b62 100644
--- a/lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl
+++ b/lib/common_test/test/ct_master_SUITE_data/master/master_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_misc_1_SUITE.erl b/lib/common_test/test/ct_misc_1_SUITE.erl
index 1db8bcc794..4c3d279a82 100644
--- a/lib/common_test/test/ct_misc_1_SUITE.erl
+++ b/lib/common_test/test/ct_misc_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,7 +31,6 @@
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
--include_lib("test_server/include/test_server_line.hrl").
-include_lib("common_test/include/ct_event.hrl").
-define(eh, ct_test_support_eh).
diff --git a/lib/common_test/test/ct_misc_1_SUITE_data/beam_1_SUITE.erl b/lib/common_test/test/ct_misc_1_SUITE_data/beam_1_SUITE.erl
index ef1defe6ef..1f1e287ddc 100644
--- a/lib/common_test/test/ct_misc_1_SUITE_data/beam_1_SUITE.erl
+++ b/lib/common_test/test/ct_misc_1_SUITE_data/beam_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_misc_1_SUITE_data/beam_2_SUITE.erl b/lib/common_test/test/ct_misc_1_SUITE_data/beam_2_SUITE.erl
index 50b2f3ed10..6b5036081e 100644
--- a/lib/common_test/test/ct_misc_1_SUITE_data/beam_2_SUITE.erl
+++ b/lib/common_test/test/ct_misc_1_SUITE_data/beam_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_netconfc_SUITE.erl b/lib/common_test/test/ct_netconfc_SUITE.erl
index af215b72b7..8932f930d1 100644
--- a/lib/common_test/test/ct_netconfc_SUITE.erl
+++ b/lib/common_test/test/ct_netconfc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,11 +44,28 @@
%% there will be clashes with logging processes etc).
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- case application:load(crypto) of
- {error,Reason} when Reason=/={already_loaded,crypto} ->
- {skip, Reason};
- _ ->
- ct_test_support:init_per_suite(Config)
+ case check_crypto_and_ssh() of
+ ok ->
+ ct_test_support:init_per_suite(Config);
+ Skip ->
+ Skip
+ end.
+
+check_crypto_and_ssh() ->
+ (catch code:load_file(crypto)),
+ case code:is_loaded(crypto) of
+ {file,_} ->
+ case catch ssh:start() of
+ Ok when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ ct:log("ssh started",[]),
+ ok;
+ Other ->
+ ct:log("could not start ssh: ~p",[Other]),
+ {skip, "SSH could not be started!"}
+ end;
+ Other ->
+ ct:log("could not load crypto: ~p",[Other]),
+ {skip, "crypto could not be loaded!"}
end.
end_per_suite(Config) ->
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl
index 9d4c798795..2aa6c4d354 100644
--- a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -124,34 +124,37 @@ end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) ->
- case catch {crypto:start(), ssh:start()} of
- {ok, ok} ->
- {ok, _} = netconfc_test_lib:get_id_keys(Config),
- netconfc_test_lib:make_dsa_files(Config),
- Server = ?NS:start(?config(data_dir,Config)),
- [{server,Server}|Config];
- _ ->
- {skip, "Crypto and/or SSH could not be started!"}
+ (catch code:load_file(crypto)),
+ case {ssh:start(),code:is_loaded(crypto)} of
+ {Ok,{file,_}} when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ ct:log("ssh started",[]),
+ SshDir = filename:join(filename:dirname(code:which(?MODULE)),
+ "ssh_dir"),
+ Server = ?NS:start(SshDir),
+ ct:log("netconf server started",[]),
+ [{netconf_server,Server},{ssh_dir,SshDir}|Config];
+ Other ->
+ ct:log("could not start ssh or load crypto: ~p",[Other]),
+ {skip, "SSH could not be started!"}
end.
end_per_suite(Config) ->
- ?NS:stop(?config(server,Config)),
+ ?NS:stop(?config(netconf_server,Config)),
ssh:stop(),
crypto:stop(),
- netconfc_test_lib:remove_id_keys(Config),
Config.
hello(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
ok.
hello_from_server_first(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1),
- {ok,Client} = ct_netconfc:only_open(?DEFAULT_SSH_OPTS(DataDir)),
+ {ok,Client} = ct_netconfc:only_open(?DEFAULT_SSH_OPTS(SshDir)),
ct:sleep(500),
?NS:expect(hello),
?ok = ct_netconfc:hello(Client, [{capability, ["urn:com:ericsson:ebase:1.1.0"]}], infinity),
@@ -160,8 +163,8 @@ hello_from_server_first(Config) ->
ok.
hello_named(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(any_name,DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(any_name,SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
ok.
@@ -169,8 +172,8 @@ hello_named(Config) ->
hello_configured() ->
[{require, netconf1}].
hello_configured(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_configured_success(netconf1,DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_configured_success(netconf1,SshDir),
?NS:expect_do_reply('close-session',close,ok),
{error, {no_such_name,netconf1}} = ct_netconfc:close_session(netconf1),
?ok = ct_netconfc:close_session(Client),
@@ -179,10 +182,10 @@ hello_configured(Config) ->
hello_configured_extraopts() ->
[{require, netconf1}].
hello_configured_extraopts(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
%% Test that the cofiguration overwrites the ExtraOpts parameter
%% to ct_netconfc:open/2.
- {ok,Client} = open_configured_success(netconf1,DataDir,[{password,"faulty"}]),
+ {ok,Client} = open_configured_success(netconf1,SshDir,[{password,"faulty"}]),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
ok.
@@ -190,8 +193,8 @@ hello_configured_extraopts(Config) ->
hello_required() ->
[{require, my_named_connection, netconf1}].
hello_required(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,_Client} = open_configured_success(my_named_connection,DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,_Client} = open_configured_success(my_named_connection,SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(my_named_connection),
ok.
@@ -199,69 +202,69 @@ hello_required(Config) ->
hello_required_exists() ->
[{require, my_named_connection, netconf1}].
hello_required_exists(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,_Client1} = open_configured_success(my_named_connection,DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,_Client1} = open_configured_success(my_named_connection,SshDir),
%% Check that same name can not be used twice
{error,{connection_exists,_Client1}} =
- ct_netconfc:open(my_named_connection,[{user_dir,DataDir}]),
+ ct_netconfc:open(my_named_connection,[{user_dir,SshDir}]),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(my_named_connection),
ct:sleep(500),
%% Then check that it can be used again after the first is closed
- {ok,_Client2} = open_configured_success(my_named_connection,DataDir),
+ {ok,_Client2} = open_configured_success(my_named_connection,SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(my_named_connection),
ok.
hello_global_pwd(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir,[{user,"any-user"},
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir,[{user,"any-user"},
{password,"global-xxx"}]),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
ok.
hello_no_session_id(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(no_session_id),
?NS:expect(no_session_id,hello),
- {error,{incorrect_hello,no_session_id_found}} = open(DataDir),
+ {error,{incorrect_hello,no_session_id_found}} = open(SshDir),
ok.
hello_incomp_base_vsn(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1,{base,"1.1"}),
?NS:expect(hello),
- {error,{incompatible_base_capability_vsn,"1.1"}} = open(DataDir),
+ {error,{incompatible_base_capability_vsn,"1.1"}} = open(SshDir),
ok.
hello_no_base_cap(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1,no_base),
?NS:expect(hello),
- {error,{incorrect_hello,no_base_capability_found}} = open(DataDir),
+ {error,{incorrect_hello,no_base_capability_found}} = open(SshDir),
ok.
hello_no_caps(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1,no_caps),
?NS:expect(hello),
- {error,{incorrect_hello,capabilities_not_found}} = open(DataDir),
+ {error,{incorrect_hello,capabilities_not_found}} = open(SshDir),
ok.
no_server_hello(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:expect(undefined,hello),
- {error,{hello_session_failed,timeout}} = open(DataDir,[{timeout,2000}]),
+ {error,{hello_session_failed,timeout}} = open(SshDir,[{timeout,2000}]),
ok.
no_client_hello(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1),
- {ok,Client} = ct_netconfc:only_open(?DEFAULT_SSH_OPTS(DataDir)),
+ {ok,Client} = ct_netconfc:only_open(?DEFAULT_SSH_OPTS(SshDir)),
%% Allow server hello to arrive
ct:sleep(500),
@@ -274,8 +277,8 @@ no_client_hello(Config) ->
ok.
get_session_id(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
1 = ct_netconfc:get_session_id(Client),
@@ -284,8 +287,8 @@ get_session_id(Config) ->
ok.
get_capabilities(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Caps = ct_netconfc:get_capabilities(Client),
BaseCap = ?NETCONF_BASE_CAP ++ ?NETCONF_BASE_CAP_VSN,
@@ -296,49 +299,49 @@ get_capabilities(Config) ->
ok.
faulty_user(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
{error,{ssh,could_not_connect_to_server,
"Unable to connect using the available authentication methods"}} =
- open(DataDir,[{user,"yyy"}]),
+ open(SshDir,[{user,"yyy"}]),
ok.
faulty_passwd(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
{error,{ssh,could_not_connect_to_server,
"Unable to connect using the available authentication methods"}} =
- open(DataDir,[{password,"yyy"}]),
+ open(SshDir,[{password,"yyy"}]),
ok.
faulty_port(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
{error,{ssh,could_not_connect_to_server,econnrefused}} =
- open(DataDir,[{port,2062}]),
+ open(SshDir,[{port,2062}]),
ok.
no_host(Config) ->
- DataDir = ?config(data_dir,Config),
- Opts = lists:keydelete(ssh,1,?DEFAULT_SSH_OPTS(DataDir)),
+ SshDir = ?config(ssh_dir,Config),
+ Opts = lists:keydelete(ssh,1,?DEFAULT_SSH_OPTS(SshDir)),
{error,no_host_address} = ct_netconfc:open(Opts),
ok.
no_port(Config) ->
- DataDir = ?config(data_dir,Config),
- Opts = lists:keydelete(port,1,?DEFAULT_SSH_OPTS(DataDir)),
+ SshDir = ?config(ssh_dir,Config),
+ Opts = lists:keydelete(port,1,?DEFAULT_SSH_OPTS(SshDir)),
{error,no_port} = ct_netconfc:open(Opts),
ok.
invalid_opt(Config) ->
- DataDir = ?config(data_dir,Config),
- Opts1 = ?DEFAULT_SSH_OPTS(DataDir) ++ [{timeout,invalidvalue}],
+ SshDir = ?config(ssh_dir,Config),
+ Opts1 = ?DEFAULT_SSH_OPTS(SshDir) ++ [{timeout,invalidvalue}],
{error,{invalid_option,{timeout,invalidvalue}}} = ct_netconfc:open(Opts1),
- Opts2 = ?DEFAULT_SSH_OPTS(DataDir) ++ [{some_other_opt,true}],
+ Opts2 = ?DEFAULT_SSH_OPTS(SshDir) ++ [{some_other_opt,true}],
{error,{ssh,could_not_connect_to_server,{options,_}}} =
ct_netconfc:open(Opts2),
ok.
timeout_close_session(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect('close-session'),
true = erlang:is_process_alive(Client),
{error,timeout} = ct_netconfc:close_session(Client,1000),
@@ -346,8 +349,8 @@ timeout_close_session(Config) ->
ok.
get(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply('get',{data,Data}),
{ok,Data} = ct_netconfc:get(Client,{server,[{xmlns,"myns"}],[]}),
@@ -356,9 +359,9 @@ get(Config) ->
ok.
get_a_lot(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
- Descr = lists:append(lists:duplicate(1000,"Description of myserver! ")),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
+ Descr = lists:append(lists:duplicate(100,"Description of myserver! ")),
Server = {server,[{xmlns,"myns"}],[{name,[],["myserver"]},
{description,[],[Descr]}]},
Data = lists:duplicate(100,Server),
@@ -369,8 +372,8 @@ get_a_lot(Config) ->
ok.
timeout_get(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect('get'),
{error,timeout} = ct_netconfc:get(Client,{server,[{xmlns,"myns"}],[]},1000),
?NS:expect_do_reply('close-session',close,ok),
@@ -386,8 +389,8 @@ timeout_get(Config) ->
%% Note that we can only hope that the test case triggers the problem
%% every now and then, as it is very timing dependent...
flush_timeout_get(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply('get',{data,Data}),
timer:sleep(1000),
@@ -400,8 +403,8 @@ flush_timeout_get(Config) ->
ok.
get_xpath(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply({'get',xpath},{data,Data}),
{ok,Data} = ct_netconfc:get(Client,{xpath,"/server"}),
@@ -410,8 +413,8 @@ get_xpath(Config) ->
ok.
get_config(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply('get-config',{data,Data}),
{ok,Data} = ct_netconfc:get_config(Client,running,
@@ -421,8 +424,8 @@ get_config(Config) ->
ok.
get_config_xpath(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply({'get-config',xpath},{data,Data}),
{ok,Data} = ct_netconfc:get_config(Client,running,{xpath,"/server"}),
@@ -431,8 +434,8 @@ get_config_xpath(Config) ->
ok.
edit_config(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('edit-config',ok),
?ok = ct_netconfc:edit_config(Client,running,
{server,[{xmlns,"myns"}],
@@ -442,8 +445,8 @@ edit_config(Config) ->
ok.
edit_config_opt_params(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'edit-config',{'default-operation',"none"}},ok),
?ok = ct_netconfc:edit_config(Client,running,
{server,[{xmlns,"myns"}],
@@ -454,8 +457,8 @@ edit_config_opt_params(Config) ->
ok.
copy_config(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('copy-config',ok),
?ok = ct_netconfc:copy_config(Client,startup,running),
?NS:expect_do_reply('close-session',close,ok),
@@ -463,8 +466,8 @@ copy_config(Config) ->
ok.
delete_config(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('delete-config',ok),
?ok = ct_netconfc:delete_config(Client,startup),
?NS:expect_do_reply('close-session',close,ok),
@@ -472,8 +475,8 @@ delete_config(Config) ->
ok.
lock(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('lock',ok),
?ok = ct_netconfc:lock(Client,running),
?NS:expect_do_reply('close-session',close,ok),
@@ -481,8 +484,8 @@ lock(Config) ->
ok.
unlock(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('unlock',ok),
?ok = ct_netconfc:unlock(Client,running),
?NS:expect_do_reply('close-session',close,ok),
@@ -490,12 +493,12 @@ unlock(Config) ->
ok.
kill_session(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:hello(2),
?NS:expect(2,hello),
- {ok,_OtherClient} = open(DataDir),
+ {ok,_OtherClient} = open(SshDir),
?NS:expect_do_reply('kill-session',{kill,2},ok),
?ok = ct_netconfc:kill_session(Client,2),
@@ -506,8 +509,8 @@ kill_session(Config) ->
ok.
get_no_such_client(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
@@ -523,8 +526,8 @@ get_no_such_client(Config) ->
ok.
action(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{myactionreturn,[{xmlns,"myns"}],["value"]}],
%% test either to receive {data,Data} or {ok,Data},
%% both need to be handled
@@ -543,8 +546,8 @@ action(Config) ->
ok.
send_any_rpc(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
GetConf = {'get-config',
[{source,["running"]},
@@ -565,8 +568,8 @@ send_any_rpc(Config) ->
ok.
send_any(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Correct get-config rpc
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
@@ -598,8 +601,8 @@ send_any(Config) ->
ok.
hide_password(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Password = "my_very_secret_password",
Data = [{passwords,[{xmlns,"myns"}],
[{password,[{xmlns,"pwdns"}],[Password]},
@@ -627,8 +630,8 @@ hide_password(Config) ->
ok.
not_proper_xml(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
NS = list_to_binary(?NETCONF_NAMESPACE),
NotProper = <<"<rpc-reply message-id=\"1\" xmlns=\"",
NS/binary,"\"><data></rpc-reply>">>,
@@ -640,8 +643,8 @@ not_proper_xml(Config) ->
ok.
prefixed_namespace(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
NS = list_to_binary(?NETCONF_NAMESPACE),
%% Test that data element can be properly decoded and that
@@ -673,8 +676,8 @@ prefixed_namespace(Config) ->
%% i.e. when the complete rpc-reply is not contained in one single ssh
%% data message.
receive_chunked_data(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Construct the data to return from netconf server
Data = [{servers,[{xmlns,"myns"}],
@@ -721,8 +724,8 @@ receive_chunked_data(Config) ->
%% Same as receive_chunked_data, but timeout waiting for last part.
timeout_receive_chunked_data(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Construct the data to return from netconf server
Data = [{servers,[{xmlns,"myns"}],
@@ -767,8 +770,8 @@ timeout_receive_chunked_data(Config) ->
%% Same as receive_chunked_data, but close while waiting for last part.
close_while_waiting_for_chunked_data(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Construct the data to return from netconf server
Data = [{servers,[{xmlns,"myns"}],
@@ -806,12 +809,12 @@ close_while_waiting_for_chunked_data(Config) ->
%% Order server to expect a get - then the process above will make
%% sure the rpc-reply is sent - but only a part of it - then close.
?NS:expect('get'),
- {error,closed} = ct_netconfc:get(Client,{server,[{xmlns,"myns"}],[]},2000),
+ {error,closed} = ct_netconfc:get(Client,{server,[{xmlns,"myns"}],[]},4000),
ok.
connection_crash(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Test that if the test survives killing the connection
%% process. Earlier this caused ct_util_server to terminate, and
@@ -822,8 +825,8 @@ connection_crash(Config) ->
ok.
get_event_streams(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
StreamNames = ["NETCONF","stream1","stream2"],
Streams = [{N,[{description,"descr of " ++ N}]} || N <- StreamNames],
StreamsXml = [{stream,[{name,[N]}|[{Tag,[Value]} || {Tag,Value} <- Data]]}
@@ -843,31 +846,31 @@ get_event_streams(Config) ->
ok.
create_subscription(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
%% All defaults
- {ok,Client1} = open_success(DataDir),
+ {ok,Client1} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client1),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client1),
%% All defaults with timeout
- {ok,Client1a} = open_success(DataDir),
+ {ok,Client1a} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client1a,5000),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client1a),
%% All defaults timing out
- {ok,Client1b} = open_success(DataDir),
+ {ok,Client1b} = open_success(SshDir),
?NS:expect({'create-subscription',[stream]}),
{error,timeout} = ct_netconfc:create_subscription(Client1b,100),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client1b),
%% Stream
- {ok,Client2} = open_success(DataDir),
+ {ok,Client2} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
Stream = "some_stream",
?ok = ct_netconfc:create_subscription(Client2,Stream),
@@ -875,7 +878,7 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client2),
%% Filter
- {ok,Client3} = open_success(DataDir),
+ {ok,Client3} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter]},ok),
Filter = {notification,?NETMOD_NOTIF_NAMESPACE_ATTR,
[eventTime]},
@@ -884,28 +887,28 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client3),
%% Filter with timeout
- {ok,Client3a} = open_success(DataDir),
+ {ok,Client3a} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter]},ok),
?ok = ct_netconfc:create_subscription(Client3a,Filter,5000),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client3a),
%% Filter timing out
- {ok,Client3b} = open_success(DataDir),
+ {ok,Client3b} = open_success(SshDir),
?NS:expect({'create-subscription',[stream,filter]}),
{error,timeout}=ct_netconfc:create_subscription(Client3b,Filter,100),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client3b),
%% Stream and filter
- {ok,Client4} = open_success(DataDir),
+ {ok,Client4} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter]},ok),
?ok = ct_netconfc:create_subscription(Client4,Stream,Filter),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client4),
%% Start/stop time
- {ok,Client5} = open_success(DataDir),
+ {ok,Client5} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,startTime,stopTime]},ok),
StartTime = xs_datetime({D,{H,M,S}}= calendar:local_time()),
StopTime = xs_datetime({D,{H+2,M,S}}),
@@ -914,14 +917,14 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client5),
%% Start/stop time with timeout
- {ok,Client5a} = open_success(DataDir),
+ {ok,Client5a} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,startTime,stopTime]},ok),
?ok = ct_netconfc:create_subscription(Client5a,StartTime,StopTime,5000),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client5a),
%% Start/stop time timing out
- {ok,Client5b} = open_success(DataDir),
+ {ok,Client5b} = open_success(SshDir),
?NS:expect({'create-subscription',[stream,startTime,stopTime]}),
{error,timeout} =
ct_netconfc:create_subscription(Client5b,StartTime,StopTime,100),
@@ -929,14 +932,14 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client5b),
%% Stream and start/stop time
- {ok,Client6} = open_success(DataDir),
+ {ok,Client6} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,startTime,stopTime]},ok),
?ok = ct_netconfc:create_subscription(Client6,Stream,StartTime,StopTime),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client6),
%% Filter and start/stop time
- {ok,Client7} = open_success(DataDir),
+ {ok,Client7} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter,startTime,stopTime]},
ok),
?ok = ct_netconfc:create_subscription(Client7,Filter,
@@ -945,7 +948,7 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client7),
%% Stream, filter and start/stop time
- {ok,Client8} = open_success(DataDir),
+ {ok,Client8} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter,startTime,stopTime]},
ok),
?ok = ct_netconfc:create_subscription(Client8,Stream,Filter,
@@ -954,7 +957,7 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client8),
%% Multiple filters
- {ok,Client9} = open_success(DataDir),
+ {ok,Client9} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter]},ok),
MultiFilters = [{event,[{xmlns,"http://my.namespaces.com/event"}],
[{eventClass,["fault"]},
@@ -969,8 +972,8 @@ create_subscription(Config) ->
ok.
receive_one_event(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client),
@@ -996,8 +999,8 @@ receive_one_event(Config) ->
ok.
receive_multiple_events(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client),
@@ -1037,8 +1040,8 @@ receive_multiple_events(Config) ->
ok.
receive_event_and_rpc(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client),
@@ -1097,8 +1100,8 @@ receive_event_and_rpc(Config) ->
receive_event_and_rpc_in_chunks(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client),
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl
index 152d5c7cae..f2580ad8e9 100644
--- a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,8 @@
-compile(export_all).
suite() ->
- [{ct_hooks, [{cth_conn_log,[{ct_netconfc,[{log_type,html}]}]}]}].
+ [{timetrap,?default_timeout},
+ {ct_hooks, [{cth_conn_log,[{ct_netconfc,[{log_type,html}]}]}]}].
all() ->
case os:find_executable("ssh") of
@@ -48,13 +49,10 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(Case, Config) ->
stop_node(Case),
- Dog = test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(Case, Config) ->
+end_per_testcase(Case, _Config) ->
stop_node(Case),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
ok.
stop_node(Case) ->
@@ -64,40 +62,46 @@ stop_node(Case) ->
init_per_suite(Config) ->
- case {crypto:start(),ssh:start()} of
- {ok,ok} ->
- {ok, _} = netconfc_test_lib:get_id_keys(Config),
- netconfc_test_lib:make_dsa_files(Config),
- Config;
- _ ->
- {skip, "Crypto and/or SSH could not be started locally!"}
+ (catch code:load_file(crypto)),
+ case {ssh:start(),code:is_loaded(crypto)} of
+ {Ok,{file,_}} when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ ct:log("SSH started locally",[]),
+ SshDir = filename:join(filename:dirname(code:which(?MODULE)),
+ "ssh_dir"),
+ [{ssh_dir,SshDir}|Config];
+ Other ->
+ ct:log("could not start ssh or load crypto locally: ~p",[Other]),
+ {skip, "SSH could not be started locally!"}
end.
end_per_suite(Config) ->
ssh:stop(),
crypto:stop(),
- netconfc_test_lib:remove_id_keys(Config),
Config.
%% This test case is related to seq12645
%% Running the netconf server in a remote node, test that the client
%% process terminates if the remote node goes down.
remote_crash(Config) ->
- {ok,Node} = ct_slave:start(nc_remote_crash),
+ {ok,Node} = ct_slave:start(nc_remote_crash,[{boot_timeout,15},
+ {init_timeout,15},
+ {startup_timeout,15}]),
Pa = filename:dirname(code:which(?NS)),
true = rpc:call(Node,code,add_patha,[Pa]),
-
- case {rpc:call(Node,crypto,start,[]),rpc:call(Node,ssh,start,[])} of
- {ok,ok} ->
- Server = rpc:call(Node,?NS,start,[?config(data_dir,Config)]),
+ rpc:call(Node,code,load_file,[crypto]),
+ case {rpc:call(Node,ssh,start,[]),rpc:call(Node,code,is_loaded,[crypto])} of
+ {Ok,{file,_}} when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ ct:log("SSH started remote",[]),
+ ns(Node,start,[?config(ssh_dir,Config)]),
+ ct:log("netconf server started remote",[]),
remote_crash(Node,Config);
- _ ->
- {skip, "Crypto and/or SSH could not be started remote!"}
+ Other ->
+ ct:log("could not start ssh or load crypto remote: ~p",[Other]),
+ {skip, "SSH could not be started remote!"}
end.
remote_crash(Node,Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(Node,DataDir),
+ {ok,Client} = open_success(Node,?config(ssh_dir,Config)),
ns(Node,expect_reply,[{'create-subscription',[stream]},ok]),
?ok = ct_netconfc:create_subscription(Client),
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_test_lib.erl b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_test_lib.erl
deleted file mode 100644
index e058bc7600..0000000000
--- a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_test_lib.erl
+++ /dev/null
@@ -1,166 +0,0 @@
--module(netconfc_test_lib).
-
--export([get_id_keys/1, remove_id_keys/1, make_dsa_files/1]).
--include_lib("common_test/include/ct.hrl").
--include_lib("public_key/include/public_key.hrl").
-
-%%%-----------------------------------------------------------------
-%%% BEGIN SSH key management
-%% copy private keys to given dir from ~/.ssh
-get_id_keys(Config) ->
- DstDir = ?config(priv_dir, Config),
- SrcDir = filename:join(os:getenv("HOME"), ".ssh"),
- RsaOk = copyfile(SrcDir, DstDir, "id_rsa"),
- DsaOk = copyfile(SrcDir, DstDir, "id_dsa"),
- case {RsaOk, DsaOk} of
- {{ok, _}, {ok, _}} -> {ok, both};
- {{ok, _}, _} -> {ok, rsa};
- {_, {ok, _}} -> {ok, dsa};
- {Error, _} -> Error
- end.
-
-%% Remove later on. Use make_dsa_files instead.
-remove_id_keys(Config) ->
- Dir = ?config(priv_dir, Config),
- file:delete(filename:join(Dir, "id_rsa")),
- file:delete(filename:join(Dir, "id_dsa")).
-
-
-make_dsa_files(Config) ->
- make_dsa_files(Config, rfc4716_public_key).
-make_dsa_files(Config, Type) ->
- {DSA, EncodedKey} = gen_dsa(128, 20),
- PKey = DSA#'DSAPrivateKey'.y,
- P = DSA#'DSAPrivateKey'.p,
- Q = DSA#'DSAPrivateKey'.q,
- G = DSA#'DSAPrivateKey'.g,
- Dss = #'Dss-Parms'{p=P, q=Q, g=G},
- {ok, Hostname} = inet:gethostname(),
- {ok, {A, B, C, D}} = inet:getaddr(Hostname, inet),
- IP = lists:concat([A, ".", B, ".", C, ".", D]),
- Attributes = [], % Could be [{comment,"user@" ++ Hostname}],
- HostNames = [{hostnames,[IP, IP]}],
- PublicKey = [{{PKey, Dss}, Attributes}],
- KnownHosts = [{{PKey, Dss}, HostNames}],
-
- KnownHostsEnc = public_key:ssh_encode(KnownHosts, known_hosts),
- KnownHosts = public_key:ssh_decode(KnownHostsEnc, known_hosts),
-
- PublicKeyEnc = public_key:ssh_encode(PublicKey, Type),
-
- SystemTmpDir = ?config(data_dir, Config),
- filelib:ensure_dir(SystemTmpDir),
- file:make_dir(SystemTmpDir),
-
- DSAFile = filename:join(SystemTmpDir, "ssh_host_dsa_key.pub"),
- file:delete(DSAFile),
-
- DSAPrivateFile = filename:join(SystemTmpDir, "ssh_host_dsa_key"),
- file:delete(DSAPrivateFile),
-
- KHFile = filename:join(SystemTmpDir, "known_hosts"),
- file:delete(KHFile),
-
- PemBin = public_key:pem_encode([EncodedKey]),
-
- file:write_file(DSAFile, PublicKeyEnc),
- file:write_file(KHFile, KnownHostsEnc),
- file:write_file(DSAPrivateFile, PemBin),
- ok.
-
-
-%%--------------------------------------------------------------------
-%% @doc Creates a dsa key (OBS: for testing only)
-%% the sizes are in bytes
-%% @spec (::integer()) -> {::atom(), ::binary(), ::opaque()}
-%% @end
-%%--------------------------------------------------------------------
-gen_dsa(LSize,NSize) when is_integer(LSize), is_integer(NSize) ->
- Key = gen_dsa2(LSize, NSize),
- {Key, encode_key(Key)}.
-
-encode_key(Key = #'DSAPrivateKey'{}) ->
- Der = public_key:der_encode('DSAPrivateKey', Key),
- {'DSAPrivateKey', Der, not_encrypted}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% DSA key generation (OBS: for testing only)
-%% See http://en.wikipedia.org/wiki/Digital_Signature_Algorithm
-%% and the fips_186-3.pdf
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-gen_dsa2(LSize, NSize) ->
- Q = prime(NSize), %% Choose N-bit prime Q
- X0 = prime(LSize),
- P0 = prime((LSize div 2) +1),
-
- %% Choose L-bit prime modulus P such that p-1 is a multiple of q.
- case dsa_search(X0 div (2*Q*P0), P0, Q, 1000) of
- error ->
- gen_dsa2(LSize, NSize);
- P ->
- G = crypto:mod_pow(2, (P-1) div Q, P), % Choose G a number whose multiplicative order modulo p is q.
- %% such that This may be done by setting g = h^(p-1)/q mod p, commonly h=2 is used.
-
- X = prime(20), %% Choose x by some random method, where 0 < x < q.
- Y = crypto:mod_pow(G, X, P), %% Calculate y = g^x mod p.
-
- #'DSAPrivateKey'{version=0, p = P, q = Q,
- g = crypto:bytes_to_integer(G), y = crypto:bytes_to_integer(Y), x = X}
- end.
-
-%% See fips_186-3.pdf
-dsa_search(T, P0, Q, Iter) when Iter > 0 ->
- P = 2*T*Q*P0 + 1,
- case is_prime(P, 50) of
- true -> P;
- false -> dsa_search(T+1, P0, Q, Iter-1)
- end;
-dsa_search(_,_,_,_) ->
- error.
-
-
-%%%%%%% Crypto Math %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-prime(ByteSize) ->
- Rand = odd_rand(ByteSize),
- prime_odd(Rand, 0).
-
-prime_odd(Rand, N) ->
- case is_prime(Rand, 50) of
- true ->
- Rand;
- false ->
- prime_odd(Rand+2, N+1)
- end.
-
-%% see http://en.wikipedia.org/wiki/Fermat_primality_test
-is_prime(_, 0) -> true;
-is_prime(Candidate, Test) ->
- CoPrime = odd_rand(10000, Candidate),
- Result = crypto:mod_pow(CoPrime, Candidate, Candidate) ,
- is_prime(CoPrime, crypto:bytes_to_integer(Result), Candidate, Test).
-
-is_prime(CoPrime, CoPrime, Candidate, Test) ->
- is_prime(Candidate, Test-1);
-is_prime(_,_,_,_) ->
- false.
-
-odd_rand(Size) ->
- Min = 1 bsl (Size*8-1),
- Max = (1 bsl (Size*8))-1,
- odd_rand(Min, Max).
-
-odd_rand(Min,Max) ->
- Rand = crypto:rand_uniform(Min,Max),
- case Rand rem 2 of
- 0 ->
- Rand + 1;
- _ ->
- Rand
- end.
-
-copyfile(SrcDir, DstDir, Fn) ->
- file:copy(filename:join(SrcDir, Fn),
- filename:join(DstDir, Fn)).
-
-%%% END SSH key management
-%%%-----------------------------------------------------------------
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/ns.erl b/lib/common_test/test/ct_netconfc_SUITE_data/ns.erl
index 67827a053f..2412ea6aba 100644
--- a/lib/common_test/test/ct_netconfc_SUITE_data/ns.erl
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/ns.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -279,7 +279,7 @@ send({CM,Ch},Data) ->
%%% Split into many small parts and send to client
send_frag({CM,Ch},Data) ->
- Sz = rand:uniform(2000),
+ Sz = rand:uniform(1000),
case Data of
<<Chunk:Sz/binary,Rest/binary>> ->
ssh_connection:send(CM, Ch, Chunk),
@@ -302,10 +302,14 @@ table_trans(Fun,Args) ->
S ->
apply(Fun,Args);
Pid ->
+ Ref = erlang:monitor(process,Pid),
Pid ! {table_trans,Fun,Args,self()},
receive
{table_trans_done,Result} ->
- Result
+ erlang:demonitor(Ref,[flush]),
+ Result;
+ {'DOWN',Ref,process,Pid,Reason} ->
+ exit({main_ns_proc_died,Reason})
after 20000 ->
exit(table_trans_timeout)
end
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key b/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key
new file mode 100644
index 0000000000..4ee0b8657e
--- /dev/null
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key
@@ -0,0 +1,13 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIBvQIBAAKBgQDuGhXsDoUC/x98Q1KEgdf+pQjzBXFu0gMf6C2P47FILALVjvzt
+HvpXarT8Y0XZb4/i5XndcKazmRArEVmPzRT0Pp7gSJpOclY/f1YrplvtMjeQaZ/Y
+eD5JoQFpgIUduiifdRRt0r5gXYejCfACa+ZSFiXTvI+ZXpHC7rH+qRCRdwIVAL6Z
+VUd15Rm/C4NrLD/nIL8tnnE3AoGBAOo9qlMBtN1MdmvJZ+Pa/x8O5+VxQvAVNysb
+DDIZQtT58ko5r3sRA783zHtUft80FA8pUAhkrnRKnqn+bK42Xrm/IMXJd8Wi9LBy
+pN5Pg37B/k6pXs2qzLDYnCCBEW9EBBUn6fyZMK7DDs/BTU7Rf0dCh1/YsxRrm0yJ
+reFOd+1gAoGBAJTq0lPrrUB62NXllTbVNAusIQX870BHBHuo3K3OFYGYD85z1gwy
+e495snKyYOT9QfkBiuH/VGxP2BgIQH+cr5hTWsFZ/09mdhEC5sj/bVDrhwexklVx
+ZeHxpIVmpB97jXomdXVR2ZoP92Gco+qU8tXcBdopQQcybk5j4fUxa+KQAhUAmGWZ
+bHhbiRb/ip5oN6edhUe47TU=
+-----END DSA PRIVATE KEY-----
+
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key.pub b/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key.pub
new file mode 100644
index 0000000000..bca37299b0
--- /dev/null
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key.pub
@@ -0,0 +1,11 @@
+---- BEGIN SSH2 PUBLIC KEY ----
+AAAAB3NzaC1kc3MAAACBAO4aFewOhQL/H3xDUoSB1/6lCPMFcW7SAx/oLY/jsUgsAtWO
+/O0e+ldqtPxjRdlvj+Lled1wprOZECsRWY/NFPQ+nuBImk5yVj9/ViumW+0yN5Bpn9h4
+PkmhAWmAhR26KJ91FG3SvmBdh6MJ8AJr5lIWJdO8j5lekcLusf6pEJF3AAAAFQC+mVVH
+deUZvwuDayw/5yC/LZ5xNwAAAIEA6j2qUwG03Ux2a8ln49r/Hw7n5XFC8BU3KxsMMhlC
+1PnySjmvexEDvzfMe1R+3zQUDylQCGSudEqeqf5srjZeub8gxcl3xaL0sHKk3k+DfsH+
+TqlezarMsNicIIERb0QEFSfp/JkwrsMOz8FNTtF/R0KHX9izFGubTImt4U537WAAAACB
+AJTq0lPrrUB62NXllTbVNAusIQX870BHBHuo3K3OFYGYD85z1gwye495snKyYOT9QfkB
+iuH/VGxP2BgIQH+cr5hTWsFZ/09mdhEC5sj/bVDrhwexklVxZeHxpIVmpB97jXomdXVR
+2ZoP92Gco+qU8tXcBdopQQcybk5j4fUxa+KQ
+---- END SSH2 PUBLIC KEY ----
diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE.erl
index bf3eeee328..7ffe6f045b 100644
--- a/lib/common_test/test/ct_pre_post_test_io_SUITE.erl
+++ b/lib/common_test/test/ct_pre_post_test_io_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl
index 66a950c178..347b507c78 100644
--- a/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl
+++ b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl
index ad8beb2ae0..71168cb118 100644
--- a/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl
+++ b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_priv_dir_SUITE.erl b/lib/common_test/test/ct_priv_dir_SUITE.erl
index c42be106de..c881a88d76 100644
--- a/lib/common_test/test/ct_priv_dir_SUITE.erl
+++ b/lib/common_test/test/ct_priv_dir_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_priv_dir_SUITE_data/priv_dir_SUITE.erl b/lib/common_test/test/ct_priv_dir_SUITE_data/priv_dir_SUITE.erl
index 8fae6fe8ed..1b171801a3 100644
--- a/lib/common_test/test/ct_priv_dir_SUITE_data/priv_dir_SUITE.erl
+++ b/lib/common_test/test/ct_priv_dir_SUITE_data/priv_dir_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_release_test_SUITE.erl b/lib/common_test/test/ct_release_test_SUITE.erl
index 66d07155ac..f9450453c9 100644
--- a/lib/common_test/test/ct_release_test_SUITE.erl
+++ b/lib/common_test/test/ct_release_test_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_release_test_SUITE_data/release_test_SUITE.erl b/lib/common_test/test/ct_release_test_SUITE_data/release_test_SUITE.erl
index 04c92be0d1..7f0ba65791 100644
--- a/lib/common_test/test/ct_release_test_SUITE_data/release_test_SUITE.erl
+++ b/lib/common_test/test/ct_release_test_SUITE_data/release_test_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_repeat_1_SUITE.erl b/lib/common_test/test/ct_repeat_1_SUITE.erl
index 7d47bdcf51..42f05aade4 100644
--- a/lib/common_test/test/ct_repeat_1_SUITE.erl
+++ b/lib/common_test/test/ct_repeat_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_repeat_1_SUITE_data/repeat_1_SUITE.erl b/lib/common_test/test/ct_repeat_1_SUITE_data/repeat_1_SUITE.erl
index da00affa30..e7b3c5ad90 100644
--- a/lib/common_test/test/ct_repeat_1_SUITE_data/repeat_1_SUITE.erl
+++ b/lib/common_test/test/ct_repeat_1_SUITE_data/repeat_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_repeat_testrun_SUITE.erl b/lib/common_test/test/ct_repeat_testrun_SUITE.erl
index 7430ceb66d..f8b6a379f6 100644
--- a/lib/common_test/test/ct_repeat_testrun_SUITE.erl
+++ b/lib/common_test/test/ct_repeat_testrun_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -66,25 +66,47 @@
%% there will be clashes with logging processes etc).
%%--------------------------------------------------------------------
init_per_suite(Config0) ->
- Config = ct_test_support:init_per_suite(Config0),
- DataDir = ?config(data_dir, Config),
- Suite1 = filename:join([DataDir,"a_test","r1_SUITE"]),
- Suite2 = filename:join([DataDir,"b_test","r2_SUITE"]),
- Opts0 = ct_test_support:get_opts(Config),
- Opts1 = Opts0 ++ [{suite,Suite1},{testcase,tc2},{label,timing1}],
- Opts2 = Opts0 ++ [{suite,Suite2},{testcase,tc2},{label,timing2}],
-
- %% Make sure both suites are compiled
- {1,0,{0,0}} = ct_test_support:run(ct,run_test,[Opts1],Config),
- {1,0,{0,0}} = ct_test_support:run(ct,run_test,[Opts2],Config),
-
- %% Time the shortest testcase to use for offset
- {_T0,{1,0,{0,0}}} = timer:tc(ct_test_support,run,[ct,run_test,[Opts1],Config]),
-
- %% -2 is to ensure we hit inside the target test case and not after
-% T = round(T0/1000000)-2,
- T=0,
- [{offset,T}|Config].
+ TTInfo = {_T,{_Scaled,ScaleVal}} = ct:get_timetrap_info(),
+ ct:pal("Timetrap info = ~w", [TTInfo]),
+ if ScaleVal > 1 ->
+ {skip,"Skip on systems running e.g. cover or debug!"};
+ ScaleVal =< 1 ->
+ Config = ct_test_support:init_per_suite(Config0),
+ DataDir = ?config(data_dir, Config),
+ Suite1 = filename:join([DataDir,"a_test","r1_SUITE"]),
+ Suite2 = filename:join([DataDir,"b_test","r2_SUITE"]),
+ Opts0 = ct_test_support:get_opts(Config),
+ Opts1 = Opts0 ++ [{suite,Suite1},{testcase,tc2},{label,timing1}],
+ Opts2 = Opts0 ++ [{suite,Suite2},{testcase,tc2},{label,timing2}],
+
+ %% Make sure both suites are compiled
+ {1,0,{0,0}} = ct_test_support:run(ct,run_test,[Opts1],Config),
+ {1,0,{0,0}} = ct_test_support:run(ct,run_test,[Opts2],Config),
+
+ %% Check if file i/o is too slow for correct measurements
+ Opts3 = Opts0 ++ [{suite,Suite1},{testcase,tc1},{label,timing3}],
+ {T,_} =
+ timer:tc(
+ fun() ->
+ {1,0,{0,0}} = ct_test_support:run(ct,run_test,
+ [Opts3],Config),
+ {1,0,{0,0}} = ct_test_support:run(ct,run_test,
+ [Opts3],Config)
+ end),
+ %% The time to compare with here must match the timeout value
+ %% in the test suite. Accept 30% logging overhead (26 sec total).
+ if T > 26000000 ->
+ ct:pal("Timing test took ~w sec (< 27 sec expected). "
+ "Skipping the suite!",
+ [trunc(T/1000000)]),
+ ct_test_support:end_per_suite(Config),
+ {skip,"File I/O too slow for this suite"};
+ true ->
+ ct:pal("Timing test took ~w sec. Proceeding...",
+ [trunc(T/1000000)]),
+ [{offset,0}|Config]
+ end
+ end.
end_per_suite(Config) ->
ct_test_support:end_per_suite(Config).
diff --git a/lib/common_test/test/ct_repeat_testrun_SUITE_data/a_test/r1_SUITE.erl b/lib/common_test/test/ct_repeat_testrun_SUITE_data/a_test/r1_SUITE.erl
index 7afe526914..4ce375b4ee 100644
--- a/lib/common_test/test/ct_repeat_testrun_SUITE_data/a_test/r1_SUITE.erl
+++ b/lib/common_test/test/ct_repeat_testrun_SUITE_data/a_test/r1_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_repeat_testrun_SUITE_data/b_test/r2_SUITE.erl b/lib/common_test/test/ct_repeat_testrun_SUITE_data/b_test/r2_SUITE.erl
index d78b1befab..77bb544080 100644
--- a/lib/common_test/test/ct_repeat_testrun_SUITE_data/b_test/r2_SUITE.erl
+++ b/lib/common_test/test/ct_repeat_testrun_SUITE_data/b_test/r2_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_sequence_1_SUITE.erl b/lib/common_test/test/ct_sequence_1_SUITE.erl
index f13d7e32ea..17d168404e 100644
--- a/lib/common_test/test/ct_sequence_1_SUITE.erl
+++ b/lib/common_test/test/ct_sequence_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_sequence_1_SUITE_data/subgroups_1_SUITE.erl b/lib/common_test/test/ct_sequence_1_SUITE_data/subgroups_1_SUITE.erl
index ee0b5d7a02..8e5a7501ce 100644
--- a/lib/common_test/test/ct_sequence_1_SUITE_data/subgroups_1_SUITE.erl
+++ b/lib/common_test/test/ct_sequence_1_SUITE_data/subgroups_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_shell_SUITE.erl b/lib/common_test/test/ct_shell_SUITE.erl
index 786443e9ae..64dfbdb9f7 100644
--- a/lib/common_test/test/ct_shell_SUITE.erl
+++ b/lib/common_test/test/ct_shell_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE.erl b/lib/common_test/test/ct_skip_SUITE.erl
index 4ed6005c65..06152ed354 100644
--- a/lib/common_test/test/ct_skip_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_10_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_10_SUITE.erl
index cf11de8147..5963f3c41e 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_10_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_10_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_11_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_11_SUITE.erl
index 19cd76df62..5a2b57a143 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_11_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_12_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_12_SUITE.erl
index 877eb6e540..b87ed43bfc 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_12_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_12_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_1_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_1_SUITE.erl
index cf8945c968..9e199c2fb0 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_1_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_2_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_2_SUITE.erl
index dd3be8b6b5..ed9b47f2e1 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_2_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_3_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_3_SUITE.erl
index 55b6fb254d..1c7ad56448 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_3_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_3_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_4_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_4_SUITE.erl
index 7169517480..9fa1335acb 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_4_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_4_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_5_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_5_SUITE.erl
index 560abd0a6e..4946eeedda 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_5_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_5_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_6_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_6_SUITE.erl
index f209d921c4..a26788d439 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_6_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_6_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_7_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_7_SUITE.erl
index 0497fd2785..a35a7bfe64 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_7_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_7_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_8_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_8_SUITE.erl
index 9b5ce06afb..fb94db9fb4 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_8_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_8_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_9_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_9_SUITE.erl
index 48c5930c5b..e6deab9862 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_9_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/auto_skip_9_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_1_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_1_SUITE.erl
index a74c4601bd..fc67e5b4e7 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_1_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_2_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_2_SUITE.erl
index 8f64f4fe8b..1e637e6916 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_2_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_3_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_3_SUITE.erl
index 379a579501..8703163800 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_3_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_3_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_4_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_4_SUITE.erl
index 6d875436a4..0b0ee833a0 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_4_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_4_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_5_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_5_SUITE.erl
index 3575bf65e2..4bfe1f2b9a 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_5_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_5_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_6_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_6_SUITE.erl
index 8a5c13d67c..e67ded1f24 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_6_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_6_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_7_SUITE.erl b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_7_SUITE.erl
index 01efd31d5e..c7b060ff9c 100644
--- a/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_7_SUITE.erl
+++ b/lib/common_test/test/ct_skip_SUITE_data/skip/test/user_skip_7_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_smoke_test_SUITE.erl b/lib/common_test/test/ct_smoke_test_SUITE.erl
index d0a1f14b8d..2dedc7e2cf 100644
--- a/lib/common_test/test/ct_smoke_test_SUITE.erl
+++ b/lib/common_test/test/ct_smoke_test_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_smoke_test_SUITE_data/happy_1/test/happy_11_SUITE.erl b/lib/common_test/test/ct_smoke_test_SUITE_data/happy_1/test/happy_11_SUITE.erl
index 038c44e350..24e52ff58c 100644
--- a/lib/common_test/test/ct_smoke_test_SUITE_data/happy_1/test/happy_11_SUITE.erl
+++ b/lib/common_test/test/ct_smoke_test_SUITE_data/happy_1/test/happy_11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_smoke_test_SUITE_data/happy_2_test/happy_21_SUITE.erl b/lib/common_test/test/ct_smoke_test_SUITE_data/happy_2_test/happy_21_SUITE.erl
index 1d3da7a245..231fb1f62e 100644
--- a/lib/common_test/test/ct_smoke_test_SUITE_data/happy_2_test/happy_21_SUITE.erl
+++ b/lib/common_test/test/ct_smoke_test_SUITE_data/happy_2_test/happy_21_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_snmp_SUITE.erl b/lib/common_test/test/ct_snmp_SUITE.erl
index 17642c8d63..038f4232c0 100644
--- a/lib/common_test/test/ct_snmp_SUITE.erl
+++ b/lib/common_test/test/ct_snmp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_snmp_SUITE_data/snmp_SUITE.erl b/lib/common_test/test/ct_snmp_SUITE_data/snmp_SUITE.erl
index 5afd3a2dde..a6533641d8 100644
--- a/lib/common_test/test/ct_snmp_SUITE_data/snmp_SUITE.erl
+++ b/lib/common_test/test/ct_snmp_SUITE_data/snmp_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_surefire_SUITE.erl b/lib/common_test/test/ct_surefire_SUITE.erl
index 922978fc4b..42ec685c16 100644
--- a/lib/common_test/test/ct_surefire_SUITE.erl
+++ b/lib/common_test/test/ct_surefire_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_surefire_SUITE_data/surefire_SUITE.erl b/lib/common_test/test/ct_surefire_SUITE_data/surefire_SUITE.erl
index ab387c2ea4..ed10356cdd 100644
--- a/lib/common_test/test/ct_surefire_SUITE_data/surefire_SUITE.erl
+++ b/lib/common_test/test/ct_surefire_SUITE_data/surefire_SUITE.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_system_error_SUITE.erl b/lib/common_test/test/ct_system_error_SUITE.erl
index f783a09553..686d0a46fd 100644
--- a/lib/common_test/test/ct_system_error_SUITE.erl
+++ b/lib/common_test/test/ct_system_error_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_system_error_SUITE_data/a_SUITE.erl b/lib/common_test/test/ct_system_error_SUITE_data/a_SUITE.erl
index 35efbb851f..7f9e7595ab 100644
--- a/lib/common_test/test/ct_system_error_SUITE_data/a_SUITE.erl
+++ b/lib/common_test/test/ct_system_error_SUITE_data/a_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_telnet_SUITE.erl b/lib/common_test/test/ct_telnet_SUITE.erl
index 006a921fc1..a0089c9bc9 100644
--- a/lib/common_test/test/ct_telnet_SUITE.erl
+++ b/lib/common_test/test/ct_telnet_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl b/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl
index 9dc9095f47..985fa40ad2 100644
--- a/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl
+++ b/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl
@@ -308,8 +308,19 @@ large_string(_) ->
VerifyStr = [C || C <- lists:flatten(Data1), C/=$ , C/=$\r, C/=$\n, C/=$>],
ok = ct_telnet:send(Handle, "echo_sep "++BigString),
- ct:sleep(50),
- {ok,Data2} = ct_telnet:get_data(Handle),
+ %% On some slow machines, 50 ms might not be enough to get the
+ %% first packet of data. We will therefore keep trying for a
+ %% second before we give up this...
+ F = fun RepeatUntilData(N) ->
+ ct:sleep(50),
+ case ct_telnet:get_data(Handle) of
+ {ok,[]} when N>1 ->
+ RepeatUntilData(N-1);
+ Other ->
+ Other
+ end
+ end,
+ {ok,Data2} = F(20),
ct:log("[GET DATA #2] Received ~w chars: ~s", [length(lists:flatten(Data2)),Data2]),
VerifyStr = [C || C <- lists:flatten(Data2), C/=$ , C/=$\r, C/=$\n, C/=$>],
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE.erl
index 4b2f4ee504..228d900545 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_1_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_1_SUITE.erl
index d32283c859..dbb57ddbb9 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_1_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_2_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_2_SUITE.erl
index 62f2bdc8d5..af1ccd317b 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_2_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/skipped_by_spec_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_1_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_1_SUITE.erl
index c7673577ab..631d14c8ea 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_1_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_2_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_2_SUITE.erl
index d25330d746..f6da881d18 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_2_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_3_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_3_SUITE.erl
index c56c684588..3cd028a82e 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_3_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_3_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_4_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_4_SUITE.erl
index eaad6d2044..06d7760566 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_4_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_4_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_5_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_5_SUITE.erl
index b51d76e707..0b14e22cfe 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_5_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_5_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_6_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_6_SUITE.erl
index 9bfd102409..e48fe904e1 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_6_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_6_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_7_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_7_SUITE.erl
index 9131874c48..be6f9777d1 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_7_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_7_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_8_SUITE.erl b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_8_SUITE.erl
index e3247ed3ea..343cabcaa0 100644
--- a/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_8_SUITE.erl
+++ b/lib/common_test/test/ct_test_server_if_1_SUITE_data/test_server_if/test/ts_if_8_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_test_support.erl b/lib/common_test/test/ct_test_support.erl
index 493fa82c79..e926abd885 100644
--- a/lib/common_test/test/ct_test_support.erl
+++ b/lib/common_test/test/ct_test_support.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -417,14 +417,14 @@ ct_rpc({M,F,A}, Config) ->
%%%-----------------------------------------------------------------
%%% random_error/1
random_error(Config) when is_list(Config) ->
- random:seed(os:timestamp()),
+ rand:seed(exsplus),
Gen = fun(0,_) -> ok; (N,Fun) -> Fun(N-1, Fun) end,
- Gen(random:uniform(100), Gen),
+ Gen(rand:uniform(100), Gen),
ErrorTypes = ['BADMATCH','BADARG','CASE_CLAUSE','FUNCTION_CLAUSE',
'EXIT','THROW','UNDEF'],
- Type = lists:nth(random:uniform(length(ErrorTypes)), ErrorTypes),
- Where = case random:uniform(2) of
+ Type = lists:nth(rand:uniform(length(ErrorTypes)), ErrorTypes),
+ Where = case rand:uniform(2) of
1 ->
io:format("ct_test_support *returning* error of type ~w",
[Type]),
@@ -484,7 +484,8 @@ get_events(_, Config) ->
{event_receiver,CTNode} ! {self(),get_events},
Events = receive {event_receiver,Evs} -> Evs end,
test_server:format(Level, "Stopping event receiver!~n", []),
- {event_receiver,CTNode} ! stop,
+ {event_receiver,CTNode} ! {self(),stop},
+ receive {event_receiver,stopped} -> ok end,
Events.
er() ->
@@ -499,8 +500,9 @@ er_loop(Evs) ->
{From,get_events} ->
From ! {event_receiver,lists:reverse(Evs)},
er_loop(Evs);
- stop ->
+ {From,stop} ->
unregister(event_receiver),
+ From ! {event_receiver,stopped},
ok
end.
diff --git a/lib/common_test/test/ct_test_support_eh.erl b/lib/common_test/test/ct_test_support_eh.erl
index 7c3d137901..e8db52dcd3 100644
--- a/lib/common_test/test/ct_test_support_eh.erl
+++ b/lib/common_test/test/ct_test_support_eh.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
-behaviour(gen_event).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("common_test/include/ct_event.hrl").
%% gen_event callbacks
diff --git a/lib/common_test/test/ct_testspec_1_SUITE.erl b/lib/common_test/test/ct_testspec_1_SUITE.erl
index 6401ed181c..fca5ef3eb3 100644
--- a/lib/common_test/test/ct_testspec_1_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_11_SUITE.erl b/lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_11_SUITE.erl
index abc53c93f5..4d481fe3b8 100644
--- a/lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_11_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_12_SUITE.erl b/lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_12_SUITE.erl
index f55ccb0792..61bde4bbfd 100644
--- a/lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_12_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_1_SUITE_data/groups_1/groups_12_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_21_SUITE.erl b/lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_21_SUITE.erl
index 0138310c36..e99ba8c570 100644
--- a/lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_21_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_21_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_22_SUITE.erl b/lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_22_SUITE.erl
index 4d253dae6f..ae03ae9149 100644
--- a/lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_22_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_1_SUITE_data/groups_2/groups_22_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_1_SUITE.erl b/lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_1_SUITE.erl
index 381742278a..dfd7bc1495 100644
--- a/lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_1_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_1_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_2_SUITE.erl b/lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_2_SUITE.erl
index fb646071b8..7d5df52ee5 100644
--- a/lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_2_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_1_SUITE_data/suites_1/simple_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_2_SUITE.erl b/lib/common_test/test/ct_testspec_2_SUITE.erl
index 887b156cde..1a941df185 100644
--- a/lib/common_test/test/ct_testspec_2_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_3_SUITE.erl b/lib/common_test/test/ct_testspec_3_SUITE.erl
index 09c649ef78..5ca0fcbfac 100644
--- a/lib/common_test/test/ct_testspec_3_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_3_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t11_SUITE.erl b/lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t11_SUITE.erl
index fd66bf5423..f27ecc6360 100644
--- a/lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t11_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t12_SUITE.erl b/lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t12_SUITE.erl
index bc0cf84c8e..35a94a039e 100644
--- a/lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t12_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_3_SUITE_data/tests1/t12_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t21_SUITE.erl b/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t21_SUITE.erl
index bcc1e5ac3d..bd08ef24bf 100644
--- a/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t21_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t21_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t22_SUITE.erl b/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t22_SUITE.erl
index 2dee793c70..9721d48aa1 100644
--- a/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t22_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t22_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t23_SUITE.erl b/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t23_SUITE.erl
index 66b1d10f28..caa5e30ff6 100644
--- a/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t23_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_3_SUITE_data/tests2/t23_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_userconfig_callback.erl b/lib/common_test/test/ct_userconfig_callback.erl
index 8b269c695c..c723f4ca1c 100644
--- a/lib/common_test/test/ct_userconfig_callback.erl
+++ b/lib/common_test/test/ct_userconfig_callback.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_verbosity_SUITE.erl b/lib/common_test/test/ct_verbosity_SUITE.erl
index f19322c183..b9298e54ca 100644
--- a/lib/common_test/test/ct_verbosity_SUITE.erl
+++ b/lib/common_test/test/ct_verbosity_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_verbosity_SUITE_data/io_test_SUITE.erl b/lib/common_test/test/ct_verbosity_SUITE_data/io_test_SUITE.erl
index cc799c1923..0b3c82bf2b 100644
--- a/lib/common_test/test/ct_verbosity_SUITE_data/io_test_SUITE.erl
+++ b/lib/common_test/test/ct_verbosity_SUITE_data/io_test_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/common_test/test/ct_verbosity_SUITE_data/simple_evh.erl b/lib/common_test/test/ct_verbosity_SUITE_data/simple_evh.erl
index 37987538b5..03a0832e53 100644
--- a/lib/common_test/test/ct_verbosity_SUITE_data/simple_evh.erl
+++ b/lib/common_test/test/ct_verbosity_SUITE_data/simple_evh.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/test/erl2html2_SUITE.erl b/lib/common_test/test/erl2html2_SUITE.erl
index 8e9f6e773a..bdce43c9c9 100644
--- a/lib/test_server/test/erl2html2_SUITE.erl
+++ b/lib/common_test/test/erl2html2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/test/erl2html2_SUITE_data/Makefile.src b/lib/common_test/test/erl2html2_SUITE_data/Makefile.src
index 942ac0584b..942ac0584b 100644
--- a/lib/test_server/test/erl2html2_SUITE_data/Makefile.src
+++ b/lib/common_test/test/erl2html2_SUITE_data/Makefile.src
diff --git a/lib/test_server/test/erl2html2_SUITE_data/header1.hrl b/lib/common_test/test/erl2html2_SUITE_data/header1.hrl
index 53d1b79ac5..53d1b79ac5 100644
--- a/lib/test_server/test/erl2html2_SUITE_data/header1.hrl
+++ b/lib/common_test/test/erl2html2_SUITE_data/header1.hrl
diff --git a/lib/test_server/test/erl2html2_SUITE_data/include/header2.hrl b/lib/common_test/test/erl2html2_SUITE_data/include/header2.hrl
index e69de29bb2..e69de29bb2 100644
--- a/lib/test_server/test/erl2html2_SUITE_data/include/header2.hrl
+++ b/lib/common_test/test/erl2html2_SUITE_data/include/header2.hrl
diff --git a/lib/test_server/test/erl2html2_SUITE_data/include/header3.hrl b/lib/common_test/test/erl2html2_SUITE_data/include/header3.hrl
index 2a20850a3a..2a20850a3a 100644
--- a/lib/test_server/test/erl2html2_SUITE_data/include/header3.hrl
+++ b/lib/common_test/test/erl2html2_SUITE_data/include/header3.hrl
diff --git a/lib/test_server/test/erl2html2_SUITE_data/m1.erl b/lib/common_test/test/erl2html2_SUITE_data/m1.erl
index 1d405963a5..1d405963a5 100644
--- a/lib/test_server/test/erl2html2_SUITE_data/m1.erl
+++ b/lib/common_test/test/erl2html2_SUITE_data/m1.erl
diff --git a/lib/common_test/test/telnet_server.erl b/lib/common_test/test/telnet_server.erl
index 107d98d72c..65300b0bdf 100644
--- a/lib/common_test/test/telnet_server.erl
+++ b/lib/common_test/test/telnet_server.erl
@@ -59,7 +59,7 @@ init(Opts) ->
accept(State),
ok = gen_tcp:close(LSock),
dbg("telnet_server closed the listen socket ~p\n", [LSock]),
- ct:sleep(1000),
+ timer:sleep(1000),
ok.
listen(0, _Port, _Opts) ->
@@ -68,7 +68,7 @@ listen(Retries, Port, Opts) ->
case gen_tcp:listen(Port, Opts) of
{error,eaddrinuse} ->
dbg("Listen port not released, trying again..."),
- ct:sleep(5000),
+ timer:sleep(5000),
listen(Retries-1, Port, Opts);
Ok = {ok,_LSock} ->
Ok;
@@ -117,38 +117,64 @@ init_client(#state{client=Sock}=State) ->
dbg("Server sending: ~p~n",["login: "]),
R = case gen_tcp:send(Sock,"login: ") of
ok ->
- loop(State, 1);
+ loop(State);
Error ->
Error
end,
_ = gen_tcp:close(Sock),
R.
-loop(State, N) ->
+loop(State=#state{client=Sock}) ->
receive
- {tcp,_,Data} ->
+ {tcp,Sock,Data} ->
try handle_data(Data,State) of
{ok,State1} ->
- loop(State1, N);
+ loop(State1);
closed ->
+ _ = flush(State),
closed
catch
throw:Error ->
+ _ = flush(State),
Error
end;
- {tcp_closed, _} ->
+ {tcp_closed,Sock} ->
closed;
- {tcp_error,_,Error} ->
+ {tcp_error,Sock,Error} ->
{error,tcp,Error};
disconnect ->
- Sock = State#state.client,
dbg("Server closing connection on socket ~p~n", [Sock]),
+ timer:sleep(1000),
ok = gen_tcp:close(Sock),
- closed;
+ _ = flush(State);
stop ->
+ _ = flush(State),
stopped
end.
+flush(State=#state{client=Sock}) ->
+ receive
+ {tcp,Sock,Data} = M->
+ dbg("Message flushed after close or error: ~p~n", [M]),
+ try handle_data(Data,State) of
+ {ok,State1} ->
+ flush(State1);
+ closed ->
+ flush(State)
+ catch
+ throw:Error ->
+ Error
+ end;
+ {tcp_closed,Sock} = M ->
+ dbg("Message flushed after close or error: ~p~n", [M]),
+ ok;
+ {tcp_error,Sock,Error} = M ->
+ dbg("Message flushed after close or error: ~p~n", [M]),
+ {error,tcp,Error}
+ after 100 ->
+ ok
+ end.
+
handle_data(Cmd,#state{break=true}=State) ->
dbg("Server got data when in break mode: ~p~n",[Cmd]),
handle_break_cmd(Cmd,State);
@@ -193,6 +219,9 @@ handle_cmd([?AYT|T],State) ->
%% Used when testing 'newline' option in ct_telnet:send and ct_telnet:cmd.
send("yes\r\n> ",State),
handle_data(T,State);
+handle_cmd([?NOP|T],State) ->
+ %% Used for 'keep alive'
+ handle_data(T,State);
handle_cmd([_H|T],State) ->
%% Not responding to this command
handle_cmd(T,State);
@@ -203,6 +232,9 @@ handle_break_cmd([$q|T],State) ->
%% Dummy cmd allowed in break mode - quit break mode
send("\r\n> ",State),
handle_data(T,State#state{break=false});
+handle_break_cmd([_H|T],State) ->
+ %% Unknown command i break mode - ignore
+ handle_break_cmd(T,State);
handle_break_cmd([],State) ->
{ok,State}.
@@ -220,7 +252,7 @@ do_handle_data("echo_sep " ++ Data,State) ->
Msgs = string:tokens(Data," "),
lists:foreach(fun(Msg) ->
send(Msg,State),
- ct:sleep(10)
+ timer:sleep(10)
end, Msgs),
send("\r\n> ",State),
{ok,State};
@@ -245,7 +277,7 @@ do_handle_data("echo_loop " ++ Data,State) ->
do_handle_data("echo_delayed_prompt "++Data,State) ->
[MsStr|EchoData] = string:tokens(Data, " "),
send(string:join(EchoData,"\n"),State),
- ct:sleep(list_to_integer(MsStr)),
+ timer:sleep(list_to_integer(MsStr)),
send("\r\n> ",State),
{ok,State};
do_handle_data("disconnect_after " ++WaitStr,State) ->
@@ -298,7 +330,7 @@ send_loop(T0,T,Data,State) ->
ok;
true ->
send(Data,State),
- ct:sleep(500),
+ timer:sleep(500),
send_loop(T0,T,Data,State)
end.
diff --git a/lib/test_server/test/test_server_SUITE.erl b/lib/common_test/test/test_server_SUITE.erl
index 6adf5b8a78..50d8bdd1ac 100644
--- a/lib/test_server/test/test_server_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -330,7 +330,7 @@ generate_and_run_unicode_test(Config0,Encoding) ->
%% Compile the suite
Node = proplists:get_value(node,Config),
- {ok,Mod} = rpc:call(Node,compile,file,[Suite,[{outdir,DataDir}]]),
+ {ok,Mod} = rpc:call(Node,compile,file,[Suite,[report,{outdir,DataDir}]]),
ModStr = atom_to_list(Mod),
%% Clean logdir
@@ -383,7 +383,7 @@ create_unicode_test_suite(Dir,Encoding) ->
"-export([init_per_testcase/2, end_per_testcase/2]).\n"
"-export([tc_äöå/1]).\n"
"\n"
- "-include_lib(\"test_server/include/test_server.hrl\").\n"
+ "-include_lib(\"common_test/include/ct.hrl\").\n"
"\n"
"all(suite) ->\n"
" [tc_äöå].\n"
diff --git a/lib/test_server/test/test_server_SUITE_data/Makefile.src b/lib/common_test/test/test_server_SUITE_data/Makefile.src
index 5aeb035572..5aeb035572 100644
--- a/lib/test_server/test/test_server_SUITE_data/Makefile.src
+++ b/lib/common_test/test/test_server_SUITE_data/Makefile.src
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_SUITE.erl
index 79d8defb22..559e23fad3 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,8 +22,7 @@
%%% Test Server self test.
%%%------------------------------------------------------------------
-module(test_server_SUITE).
--include_lib("test_server/include/test_server.hrl").
--include_lib("test_server/include/test_server_line.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-export([all/1]).
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_SUITE_data/dummy_file b/lib/common_test/test/test_server_SUITE_data/test_server_SUITE_data/dummy_file
index 65c88fbd75..65c88fbd75 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_SUITE_data/dummy_file
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_SUITE_data/dummy_file
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_break_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_break_SUITE.erl
index ae9f018bc8..85b9cb1151 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_break_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_break_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
break_in_end_tc_after_abort/1,
check_all_breaks/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
all(suite) ->
[break_in_init_tc,
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_conf01_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_conf01_SUITE.erl
index f634bc3a46..5921582713 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_conf01_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_conf01_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
%%% Test Server self test.
%%%------------------------------------------------------------------
-module(test_server_conf01_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile(export_all).
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_conf02_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_conf02_SUITE.erl
index f9cca8653b..90e6f0b8ee 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_conf02_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_conf02_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
%%% Test Server self test.
%%%------------------------------------------------------------------
-module(test_server_conf02_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile(export_all).
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_cover_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_cover_SUITE.erl
index ab5ccec7a2..2c7cbb6473 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_cover_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_cover_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-export([init_per_testcase/2, end_per_testcase/2]).
-export([tc1/1, tc2/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
all(suite) ->
[tc1,tc2].
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_cover_SUITE_data/cover_helper.erl b/lib/common_test/test/test_server_SUITE_data/test_server_cover_SUITE_data/cover_helper.erl
index 6c74eb4e8a..6c74eb4e8a 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_cover_SUITE_data/cover_helper.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_cover_SUITE_data/cover_helper.erl
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_parallel01_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_parallel01_SUITE.erl
index 0385435710..cd704e986f 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_parallel01_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_parallel01_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
%%% Test Server self test.
%%%------------------------------------------------------------------
-module(test_server_parallel01_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile(export_all).
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_shuffle01_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_shuffle01_SUITE.erl
index 847c7b6bdd..ebd686c3c0 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_shuffle01_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_shuffle01_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
%%% Test Server self test.
%%%------------------------------------------------------------------
-module(test_server_shuffle01_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile(export_all).
@@ -224,7 +224,7 @@ conf5_end(_Config) ->
ok.
conf6_init(Config) when is_list(Config) ->
- [{shuffle,{_,_,_}}] = ?config(tc_group_properties,Config),
+ validate_shuffle(Config),
test_server:comment("Shuffle (random)"),
init = ?config(suite,Config),
[{cc6,conf6}|Config].
@@ -242,23 +242,28 @@ conf5(suite) -> % test specification
conf7_init(Config) when is_list(Config) ->
test_server:comment("Group 7, Shuffle (random seed)"),
- case proplists:get_value(shuffle,?config(tc_group_properties,Config)) of
- {_,_,_} -> ok
- end,
+ validate_shuffle(Config),
[{cc7,conf7}|Config].
conf7_end(_Config) ->
ok.
conf8_init(Config) when is_list(Config) ->
test_server:comment("Group 8, Shuffle (user start seed)"),
- case proplists:get_value(shuffle,?config(tc_group_properties,Config)) of
- {_,_,_} -> ok
- end,
+ validate_shuffle(Config),
init = ?config(suite,Config),
[{cc8,conf8}|Config].
conf8_end(_Config) ->
ok.
+validate_shuffle(Config) ->
+ case proplists:get_value(shuffle, ?config(tc_group_properties,Config)) of
+ {_,_,_} ->
+ ok;
+ Seed ->
+ %% Must be a valid seed.
+ _ = rand:seed_s(rand:export_seed_s(Seed))
+ end.
+
%%---------- test cases ----------
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_skip_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_skip_SUITE.erl
index 871bd21ee7..cfdca8dd00 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_skip_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_skip_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,8 +22,7 @@
-export([all/1, init_per_suite/1, end_per_suite/1]).
-export([dummy/1]).
--include_lib("test_server/include/test_server.hrl").
--include_lib("test_server/include/test_server_line.hrl").
+-include_lib("common_test/include/ct.hrl").
all(suite) ->
[dummy].
diff --git a/lib/test_server/test/test_server_SUITE_data/test_server_unicode_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_unicode_SUITE.erl
index 3a3366218b..5249756565 100644
--- a/lib/test_server/test/test_server_SUITE_data/test_server_unicode_SUITE.erl
+++ b/lib/common_test/test/test_server_SUITE_data/test_server_unicode_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@
print_and_log_unicode/1,
print_and_log_latin1/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
all(suite) ->
['#=@: difficult_case_name_äöå',
diff --git a/lib/test_server/test/test_server_test_lib.erl b/lib/common_test/test/test_server_test_lib.erl
index e2680938e0..cf5951ae03 100644
--- a/lib/test_server/test/test_server_test_lib.erl
+++ b/lib/common_test/test/test_server_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/test/test_server_test_lib.hrl b/lib/common_test/test/test_server_test_lib.hrl
index 27b7be9618..27b7be9618 100644
--- a/lib/test_server/test/test_server_test_lib.hrl
+++ b/lib/common_test/test/test_server_test_lib.hrl
diff --git a/lib/webtool/src/Makefile b/lib/common_test/test_server/Makefile
index a5a8eaf5dc..f015064b39 100644
--- a/lib/webtool/src/Makefile
+++ b/lib/common_test/test_server/Makefile
@@ -1,8 +1,8 @@
#
# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
-#
+#
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
+#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
@@ -14,85 +14,83 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-#
+#
# %CopyrightEnd%
#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(WEBTOOL_VSN)
+include $(ERL_TOP)/make/target.mk
# ----------------------------------------------------
-# Release directory specification
+# Configuration info.
# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/webtool-$(VSN)
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
-MODULES= webtool \
- webtool_sup
-
-
-
-ERL_FILES= $(MODULES:%=%.erl)
+EBIN=.
-TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR))
+TS_MODULES= \
+ ts \
+ ts_run \
+ ts_lib \
+ ts_make \
+ ts_erl_config \
+ ts_autoconf_win32 \
+ ts_install \
+ ts_install_cth \
+ ts_benchmark
-APP_FILE= webtool.app
-APPUP_FILE= webtool.appup
+TARGET_MODULES= $(MODULES:%=$(EBIN)/%)
+TS_TARGET_MODULES= $(TS_MODULES:%=$(EBIN)/%)
-APP_SRC= $(APP_FILE).src
-APPUP_SRC= $(APPUP_FILE).src
+TS_ERL_FILES = $(TS_MODULES:=.erl)
+TS_HRL_FILES = ts.hrl
+AUTOCONF_FILES = configure.in conf_vars.in
+PROGRAMS = configure config.sub config.guess install-sh
+CONFIG = ts.config ts.unix.config ts.win32.config
+TS_TARGET_FILES = $(TS_MODULES:%=$(EBIN)/%.$(EMULATOR))
-APP_TARGET= $(EBIN)/$(APP_FILE)
-APPUP_TARGET= $(EBIN)/$(APPUP_FILE)
+TS_TARGETS = $(TS_MODULES:%=$(EBIN)/%.$(EMULATOR))
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
-ERL_COMPILE_FLAGS += +warn_obsolete_guard
-
+ERL_COMPILE_FLAGS += -I../include -Werror
# ----------------------------------------------------
# Targets
# ----------------------------------------------------
-debug opt: $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET)
+tests debug opt: $(TS_TARGETS)
clean:
- rm -f $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET)
+ rm -f $(TS_TARGET_FILES)
rm -f core
docs:
+configure: configure.in
+ autoconf configure.in > configure
+
# ----------------------------------------------------
# Special Build Targets
# ----------------------------------------------------
-$(APP_TARGET): $(APP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
# ----------------------------------------------------
# Release Target
# ----------------------------------------------------
include $(ERL_TOP)/make/otp_release_targets.mk
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET) \
- "$(RELSYSDIR)/ebin"
+release_tests_spec: opt
+ $(INSTALL_DIR) "$(RELEASE_PATH)/test_server"
+ $(INSTALL_DATA) $(TS_ERL_FILES) $(TS_HRL_FILES) \
+ $(TS_TARGET_FILES) \
+ $(AUTOCONF_FILES) $(CONFIG) \
+ "$(RELEASE_PATH)/test_server"
+ $(INSTALL_SCRIPT) $(PROGRAMS) "$(RELEASE_PATH)/test_server"
release_docs_spec:
diff --git a/lib/test_server/src/conf_vars.in b/lib/common_test/test_server/conf_vars.in
index 7c55d7b9ed..7c55d7b9ed 100644
--- a/lib/test_server/src/conf_vars.in
+++ b/lib/common_test/test_server/conf_vars.in
diff --git a/lib/test_server/src/configure.in b/lib/common_test/test_server/configure.in
index 001de72a1e..0511d126b4 100644
--- a/lib/test_server/src/configure.in
+++ b/lib/common_test/test_server/configure.in
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script for Erlang.
dnl
dnl %CopyrightBegin%
dnl
-dnl Copyright Ericsson AB 1997-2014. All Rights Reserved.
+dnl Copyright Ericsson AB 1997-2016. All Rights Reserved.
dnl
dnl Licensed under the Apache License, Version 2.0 (the "License");
dnl you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/cross.cover b/lib/common_test/test_server/cross.cover
index 07bf0bed5c..07bf0bed5c 100644
--- a/lib/test_server/src/cross.cover
+++ b/lib/common_test/test_server/cross.cover
diff --git a/lib/test_server/src/ts.config b/lib/common_test/test_server/ts.config
index cf3d269616..d05e4885fc 100644
--- a/lib/test_server/src/ts.config
+++ b/lib/common_test/test_server/ts.config
@@ -44,3 +44,7 @@
% {295,0,0,0,0,0,0,1},
% ["dummy6-ip6"]
% }}.
+
+%% Used by erl_interface tests
+%% Known hostname with an unreachable ip
+%{test_host_not_reachable, "ghost.mydomain.com"}.
diff --git a/lib/test_server/src/ts.erl b/lib/common_test/test_server/ts.erl
index 8bbdc8f8cf..5bfea9f4de 100644
--- a/lib/test_server/src/ts.erl
+++ b/lib/common_test/test_server/ts.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/ts.hrl b/lib/common_test/test_server/ts.hrl
index 4c940fdc4f..403c62d22e 100644
--- a/lib/test_server/src/ts.hrl
+++ b/lib/common_test/test_server/ts.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/ts.unix.config b/lib/common_test/test_server/ts.unix.config
index 1ba5d9033e..1ba5d9033e 100644
--- a/lib/test_server/src/ts.unix.config
+++ b/lib/common_test/test_server/ts.unix.config
diff --git a/lib/test_server/src/ts.win32.config b/lib/common_test/test_server/ts.win32.config
index cae587bea8..cae587bea8 100644
--- a/lib/test_server/src/ts.win32.config
+++ b/lib/common_test/test_server/ts.win32.config
diff --git a/lib/test_server/src/ts_autoconf_win32.erl b/lib/common_test/test_server/ts_autoconf_win32.erl
index 288305b406..52e5ac8e69 100644
--- a/lib/test_server/src/ts_autoconf_win32.erl
+++ b/lib/common_test/test_server/ts_autoconf_win32.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -139,15 +139,15 @@ visual_cxx(Vars) ->
{"-MTd ",
"-MDd ",
"-LDd ",
- "-debug -pdb:none ",
+ "-link -debug -pdb:none ",
"-Z7 -DDEBUG",
" "};
false ->
{"-MT ",
"-MD ",
"-LD ",
- " ",
- " ",
+ "-Zi -link ",
+ "-Zi ",
"-Ox "}
end,
WIN32 = "-D__WIN32__ ",
@@ -158,7 +158,7 @@ visual_cxx(Vars) ->
{'LD', CC},
{'SHLIB_LD', CC},
{'SHLIB_LDFLAGS', ERTS_THR_LIB ++ DLL},
- {'SHLIB_LDLIBS', "-link " ++ DBG_LINK ++ "kernel32.lib"},
+ {'SHLIB_LDLIBS', DBG_LINK ++ "kernel32.lib"},
{'SHLIB_EXTRACT_ALL', ""},
{'CFLAGS', DEFAULT_THR_LIB ++ WIN32 ++ DBG_COMP},
{'EI_CFLAGS', DEFAULT_THR_LIB ++ WIN32 ++ DBG_COMP},
@@ -168,7 +168,7 @@ visual_cxx(Vars) ->
{'DEFS', common_c_defs()},
{'SHLIB_SUFFIX', ".dll"},
{'ERTS_LIBS', ERTS_THR_LIB ++ LIBS},
- {'LIBS', DEFAULT_THR_LIB ++ "-link " ++ DBG_LINK ++ LIBS},
+ {'LIBS', DEFAULT_THR_LIB ++ DBG_LINK ++ LIBS},
{obj,".obj"},
{exe, ".exe"},
{test_c_compiler, "{msc, undefined}"}
diff --git a/lib/test_server/src/ts_benchmark.erl b/lib/common_test/test_server/ts_benchmark.erl
index 3e55edefb0..e4e06b54c2 100644
--- a/lib/test_server/src/ts_benchmark.erl
+++ b/lib/common_test/test_server/ts_benchmark.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/ts_erl_config.erl b/lib/common_test/test_server/ts_erl_config.erl
index ab7363c106..032593bdda 100644
--- a/lib/test_server/src/ts_erl_config.erl
+++ b/lib/common_test/test_server/ts_erl_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/ts_install.erl b/lib/common_test/test_server/ts_install.erl
index 600a576820..5734bd0787 100644
--- a/lib/test_server/src/ts_install.erl
+++ b/lib/common_test/test_server/ts_install.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -332,11 +332,12 @@ platform(Vars) ->
LC = lock_checking(),
MT = modified_timing(),
AsyncThreads = async_threads(),
+ OffHeapMsgQ = off_heap_msgq(),
Debug = debug(),
CpuBits = word_size(),
Common = lists:concat([Hostname,"/",OsType,"/",CpuType,CpuBits,LinuxDist,
Schedulers,BindType,KP,IOTHR,LC,MT,AsyncThreads,
- Debug,ExtraLabel]),
+ OffHeapMsgQ,Debug,ExtraLabel]),
PlatformId = lists:concat([ErlType, " ", Version, Common]),
PlatformLabel = ErlType ++ Common,
PlatformFilename = platform_as_filename(PlatformId),
@@ -400,6 +401,12 @@ async_threads() ->
_ -> ""
end.
+off_heap_msgq() ->
+ case catch erlang:system_info(message_queue_data) of
+ off_heap -> "/OffHeapMsgQ";
+ _ -> ""
+ end.
+
schedulers() ->
case catch erlang:system_info(smp_support) of
true ->
diff --git a/lib/test_server/src/ts_install_cth.erl b/lib/common_test/test_server/ts_install_cth.erl
index 0462e62611..5d325b1115 100644
--- a/lib/test_server/src/ts_install_cth.erl
+++ b/lib/common_test/test_server/ts_install_cth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/ts_lib.erl b/lib/common_test/test_server/ts_lib.erl
index 7c3f450194..a7be740c5c 100644
--- a/lib/test_server/src/ts_lib.erl
+++ b/lib/common_test/test_server/ts_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/test_server/src/ts_make.erl b/lib/common_test/test_server/ts_make.erl
index 0178f4d836..456e913c39 100644
--- a/lib/test_server/src/ts_make.erl
+++ b/lib/common_test/test_server/ts_make.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-export([make/1,make/3,unmake/1]).
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Functions to be called from make test cases.
diff --git a/lib/test_server/src/ts_run.erl b/lib/common_test/test_server/ts_run.erl
index 188094921d..66db1ff9a7 100644
--- a/lib/test_server/src/ts_run.erl
+++ b/lib/common_test/test_server/ts_run.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -261,7 +261,7 @@ run_batch(Vars, _Spec, State) ->
Command = State#state.command ++ " -noinput -s erlang halt",
ts_lib:progress(Vars, 1, "Command: ~ts~n", [Command]),
io:format(user, "Command: ~ts~n",[Command]),
- Port = open_port({spawn, Command}, [stream, in, eof]),
+ Port = open_port({spawn, Command}, [stream, in, eof, exit_status]),
Timeout = 30000 * case os:getenv("TS_RUN_VALGRIND") of
false -> 1;
_ -> 100
@@ -284,7 +284,16 @@ tricky_print_data(Port, Timeout) ->
ok
after 1 -> % force context switch
ok
- end
+ end,
+ receive
+ {Port, {exit_status, 0}} ->
+ ok;
+ {Port, {exit_status, N}} ->
+ io:format(user, "Test run exited with status ~p~n", [N])
+ after 1 ->
+ %% This shouldn't happen, but better safe then hanging
+ ok
+ end
after Timeout ->
case erl_epmd:names() of
{ok,Names} ->
diff --git a/lib/common_test/vsn.mk b/lib/common_test/vsn.mk
index c6e5148716..c68750886a 100644
--- a/lib/common_test/vsn.mk
+++ b/lib/common_test/vsn.mk
@@ -1 +1 @@
-COMMON_TEST_VSN = 1.12.1.1
+COMMON_TEST_VSN = 1.12.2
diff --git a/lib/compiler/Makefile b/lib/compiler/Makefile
index bd63f7031a..b8b2f562a2 100644
--- a/lib/compiler/Makefile
+++ b/lib/compiler/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/compiler/doc/src/Makefile b/lib/compiler/doc/src/Makefile
index b989325686..c6864cb835 100644
--- a/lib/compiler/doc/src/Makefile
+++ b/lib/compiler/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/compiler/doc/src/book.xml b/lib/compiler/doc/src/book.xml
index 8de3fae69a..af6b4cf47a 100644
--- a/lib/compiler/doc/src/book.xml
+++ b/lib/compiler/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml
index db701409db..61e214294e 100644
--- a/lib/compiler/doc/src/compile.xml
+++ b/lib/compiler/doc/src/compile.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -40,6 +40,19 @@
<funcs>
<func>
+ <name>env_compiler_options()</name>
+ <fsummary>
+ Compiler options defined via the environment variable
+ <c>ERL_COMPILER_OPTIONS</c>
+ </fsummary>
+ <desc>
+ <p>Return compiler options given via the environment variable
+ <c>ERL_COMPILER_OPTIONS</c>. If the value is a list, it is
+ returned as is. If it is not a list, it is put into a list.
+ </p>
+ </desc>
+ </func>
+ <func>
<name>file(File)</name>
<fsummary>Compiles a file.</fsummary>
<desc>
@@ -768,6 +781,9 @@ module.beam: module.erl \
if you do not want the environment variable to be consulted,
for example, if you are calling the compiler recursively from
inside a parse transform.</p>
+
+ <p>The list can be retrieved with
+ <seealso marker="#env_compiler_options/0">env_compiler_options/0</seealso>.</p>
</section>
<section>
diff --git a/lib/compiler/doc/src/notes.xml b/lib/compiler/doc/src/notes.xml
index 8ed71db54a..92b3d809fc 100644
--- a/lib/compiler/doc/src/notes.xml
+++ b/lib/compiler/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,117 @@
<p>This document describes the changes made to the Compiler
application.</p>
+<section><title>Compiler 7.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A literal binary matching regression was introduced in
+ 19.0 where a match could fail to resolve to the right
+ clause. This has now been fixed.</p>
+ <p>
+ Own Id: OTP-13738</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Compiler 7.0</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p><c>compile:forms/1,2</c> would crash when used in a
+ working directory that had been deleted by another
+ process.</p>
+ <p>
+ Own Id: OTP-13430 Aux Id: ERL-113 </p>
+ </item>
+ <item>
+ <p>Dialyzer no longer crashes when there is an invalid
+ function call such as <c>42(7)</c> in a module being
+ analyzed. The compiler will now warn for invalid function
+ calls such as <c>X = 42, x(7)</c>.</p>
+ <p>
+ Own Id: OTP-13552 Aux Id: ERL-138 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Optimization of tuple matching has been slightly
+ improved.</p>
+ <p>
+ Own Id: OTP-12951</p>
+ </item>
+ <item>
+ <p>Five deprecated and undocumented functions in the
+ module <c>core_lib</c> have been removed. The functions
+ are: <c>get_anno/{1,2}</c>, <c>is_literal/1</c>,
+ <c>is_literal_list/1</c>, and <c>literal_value</c>. Use
+ the appropriate functions in the <c>cerl</c> module
+ instead.</p>
+ <p>
+ Own Id: OTP-12979</p>
+ </item>
+ <item>
+ <p>The pre-processor can now expand the ?FUNCTION_NAME
+ and ?FUNCTION_ARITY macros.</p>
+ <p>
+ Own Id: OTP-13059</p>
+ </item>
+ <item>
+ <p>The function mapfold/4 has been added to the
+ <c>cerl_trees</c> module.</p>
+ <p>
+ Own Id: OTP-13280</p>
+ </item>
+ <item>
+ <p>Bitstring comprehensions have been generalized to
+ allow arbitrary expressions in the construction part.</p>
+ <p>
+ Own Id: OTP-13289</p>
+ </item>
+ <item>
+ <p>The compiler will now produce warnings for binary
+ patterns that will never match (example:
+ <c>&lt;&lt;-1/unsigned&gt;&gt; = Bin</c>). </p>
+ <p>
+ Own Id: OTP-13374 Aux Id: ERL-44 </p>
+ </item>
+ <item>
+ <p>The compiler will no longer put the compilation date
+ and time into BEAM files. That means that two BEAM files
+ compiled on the same computer from the same source code
+ and compilation options will be identical.</p>
+ <p>Note: If you want to find out whether a BEAM file on
+ disk is different from the loaded code, compared the MD5
+ value obtained from <c>Mod:module_info(md5)</c> with the
+ MD5 value obtained from
+ <c>beam_lib:md5(BeamFileForMod)</c></p>.
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13504</p>
+ </item>
+ <item>
+ <p>The function <c>compile:env_compiler_options/0</c> has
+ been added to allow tools to pick up the same default
+ compiler options as the compiler itself.</p>
+ <p>
+ Own Id: OTP-13654</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Compiler 6.0.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/compiler/doc/src/notes_history.xml b/lib/compiler/doc/src/notes_history.xml
index 85216b2c66..16bfb3d34b 100644
--- a/lib/compiler/doc/src/notes_history.xml
+++ b/lib/compiler/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/compiler/doc/src/part_notes.xml b/lib/compiler/doc/src/part_notes.xml
index 5000f50dca..c1f0ff3861 100644
--- a/lib/compiler/doc/src/part_notes.xml
+++ b/lib/compiler/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/compiler/doc/src/part_notes_history.xml b/lib/compiler/doc/src/part_notes_history.xml
index 046b4893c3..4019676b83 100644
--- a/lib/compiler/doc/src/part_notes_history.xml
+++ b/lib/compiler/doc/src/part_notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/compiler/doc/src/ref_man.xml b/lib/compiler/doc/src/ref_man.xml
index d360e7963f..f5466553c0 100644
--- a/lib/compiler/doc/src/ref_man.xml
+++ b/lib/compiler/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/compiler/src/Makefile b/lib/compiler/src/Makefile
index 299b2892fc..518c89d044 100644
--- a/lib/compiler/src/Makefile
+++ b/lib/compiler/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -50,6 +50,7 @@ MODULES = \
beam_asm \
beam_block \
beam_bool \
+ beam_bs \
beam_bsm \
beam_clean \
beam_dead \
@@ -62,6 +63,7 @@ MODULES = \
beam_opcodes \
beam_peep \
beam_receive \
+ beam_reorder \
beam_split \
beam_trim \
beam_type \
diff --git a/lib/compiler/src/beam_a.erl b/lib/compiler/src/beam_a.erl
index f0f2ee08c2..91e6d80da3 100644
--- a/lib/compiler/src/beam_a.erl
+++ b/lib/compiler/src/beam_a.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/beam_asm.erl b/lib/compiler/src/beam_asm.erl
index a3201b0f4a..f6ca7a0afb 100644
--- a/lib/compiler/src/beam_asm.erl
+++ b/lib/compiler/src/beam_asm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,11 +30,12 @@
module(Code, Abst, SourceFile, Opts) ->
{ok,assemble(Code, Abst, SourceFile, Opts)}.
-assemble({Mod,Exp,Attr0,Asm0,NumLabels}, Abst, SourceFile, Opts) ->
+assemble({Mod,Exp0,Attr0,Asm0,NumLabels}, Abst, SourceFile, Opts) ->
{1,Dict0} = beam_dict:atom(Mod, beam_dict:new()),
{0,Dict1} = beam_dict:fname(atom_to_list(Mod) ++ ".erl", Dict0),
NumFuncs = length(Asm0),
{Asm,Attr} = on_load(Asm0, Attr0),
+ Exp = cerl_sets:from_list(Exp0),
{Code,Dict2} = assemble_1(Asm, Exp, Dict1, []),
build_file(Code, Attr, Dict2, NumLabels, NumFuncs, Abst, SourceFile, Opts).
@@ -61,7 +62,7 @@ insert_on_load_instruction(Is0, Entry) ->
Bef ++ [El,on_load|Is].
assemble_1([{function,Name,Arity,Entry,Asm}|T], Exp, Dict0, Acc) ->
- Dict1 = case member({Name,Arity}, Exp) of
+ Dict1 = case cerl_sets:is_element({Name,Arity}, Exp) of
true ->
beam_dict:export(Name, Arity, Entry, Dict0);
false ->
@@ -224,10 +225,12 @@ flatten_imports(Imps) ->
list_to_binary(map(fun({M,F,A}) -> <<M:32,F:32,A:32>> end, Imps)).
build_attributes(Opts, SourceFile, Attr, MD5) ->
+ Misc0 = case SourceFile of
+ [] -> [];
+ [_|_] -> [{source,SourceFile}]
+ end,
Misc = case member(slim, Opts) of
- false ->
- {{Y,Mo,D},{H,Mi,S}} = erlang:universaltime(),
- [{time,{Y,Mo,D,H,Mi,S}},{source,SourceFile}];
+ false -> Misc0;
true -> []
end,
Compile = [{options,Opts},{version,?COMPILER_VSN}|Misc],
diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl
index 0321b1c07b..85d332c56e 100644
--- a/lib/compiler/src/beam_block.erl
+++ b/lib/compiler/src/beam_block.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,14 +23,13 @@
-module(beam_block).
-export([module/2]).
--import(lists, [mapfoldl/3,reverse/1,reverse/2,foldl/3,member/2]).
--define(MAXREG, 1024).
+-import(lists, [reverse/1,reverse/2,foldl/3,member/2]).
-module({Mod,Exp,Attr,Fs0,Lc0}, _Opt) ->
- {Fs,Lc} = mapfoldl(fun function/2, Lc0, Fs0),
+module({Mod,Exp,Attr,Fs0,Lc}, _Opt) ->
+ Fs = [function(F) || F <- Fs0],
{ok,{Mod,Exp,Attr,Fs,Lc}}.
-function({function,Name,Arity,CLabel,Is0}, Lc0) ->
+function({function,Name,Arity,CLabel,Is0}) ->
try
%% Collect basic blocks and optimize them.
Is1 = blockify(Is0),
@@ -40,11 +39,8 @@ function({function,Name,Arity,CLabel,Is0}, Lc0) ->
Is5 = opt_blocks(Is4),
Is6 = beam_utils:delete_live_annos(Is5),
- %% Optimize bit syntax.
- {Is,Lc} = bsm_opt(Is6, Lc0),
-
%% Done.
- {{function,Name,Arity,CLabel,Is},Lc}
+ {function,Name,Arity,CLabel,Is6}
catch
Class:Error ->
Stack = erlang:get_stacktrace(),
@@ -62,56 +58,22 @@ blockify(Is) ->
blockify([{loop_rec,{f,Fail},{x,0}},{loop_rec_end,_Lbl},{label,Fail}|Is], Acc) ->
%% Useless instruction sequence.
blockify(Is, Acc);
-blockify([{test,is_atom,{f,Fail},[Reg]}=I|
- [{select,select_val,Reg,{f,Fail},
- [{atom,false},{f,_}=BrFalse,
- {atom,true}=AtomTrue,{f,_}=BrTrue]}|Is]=Is0],
- [{block,Bl}|_]=Acc) ->
- case is_last_bool(Bl, Reg) of
- false ->
- blockify(Is0, [I|Acc]);
- true ->
- %% The last instruction is a boolean operator/guard BIF that can't fail.
- %% We can convert the three-way branch to a two-way branch (eliminating
- %% the reference to the failure label).
- blockify(Is, [{jump,BrTrue},
- {test,is_eq_exact,BrFalse,[Reg,AtomTrue]}|Acc])
- end;
-blockify([{test,is_atom,{f,Fail},[Reg]}=I|
- [{select,select_val,Reg,{f,Fail},
- [{atom,true}=AtomTrue,{f,_}=BrTrue,
- {atom,false},{f,_}=BrFalse]}|Is]=Is0],
- [{block,Bl}|_]=Acc) ->
- case is_last_bool(Bl, Reg) of
- false ->
- blockify(Is0, [I|Acc]);
- true ->
- blockify(Is, [{jump,BrTrue},
- {test,is_eq_exact,BrFalse,[Reg,AtomTrue]}|Acc])
- end;
+blockify([{get_map_elements,F,S,{list,Gets}}|Is0], Acc) ->
+ %% A get_map_elements instruction is only safe at the beginning of
+ %% a block because of the failure label.
+ {Ss,Ds} = beam_utils:split_even(Gets),
+ I = {set,Ds,[S|Ss],{get_map_elements,F}},
+ {Block,Is} = collect_block(Is0, [I]),
+ blockify(Is, [{block,Block}|Acc]);
blockify([I|Is0]=IsAll, Acc) ->
- case is_bs_put(I) of
- true ->
- {BsPuts0,Is} = collect_bs_puts(IsAll),
- BsPuts = opt_bs_puts(BsPuts0),
- blockify(Is, reverse(BsPuts, Acc));
- false ->
- case collect(I) of
- error -> blockify(Is0, [I|Acc]);
- Instr when is_tuple(Instr) ->
- {Block,Is} = collect_block(IsAll),
- blockify(Is, [{block,Block}|Acc])
- end
+ case collect(I) of
+ error -> blockify(Is0, [I|Acc]);
+ Instr when is_tuple(Instr) ->
+ {Block,Is} = collect_block(IsAll),
+ blockify(Is, [{block,Block}|Acc])
end;
blockify([], Acc) -> reverse(Acc).
-is_last_bool([{set,[Reg],As,{bif,N,_}}], Reg) ->
- Ar = length(As),
- erl_internal:new_type_test(N, Ar) orelse erl_internal:comp_op(N, Ar)
- orelse erl_internal:bool_op(N, Ar);
-is_last_bool([_|Is], Reg) -> is_last_bool(Is, Reg);
-is_last_bool([], _) -> false.
-
collect_block(Is) ->
collect_block(Is, []).
@@ -126,7 +88,9 @@ collect_block([I|Is]=Is0, Acc) ->
case collect(I) of
error -> {reverse(Acc),Is0};
Instr -> collect_block(Is, [Instr|Acc])
- end.
+ end;
+collect_block([], Acc) ->
+ {reverse(Acc),[]}.
collect({allocate,N,R}) -> {set,[],[],{alloc,R,{nozero,N,0,[]}}};
collect({allocate_zero,N,R}) -> {set,[],[],{alloc,R,{zero,N,0,[]}}};
@@ -146,10 +110,10 @@ collect({get_list,S,D1,D2}) -> {set,[D1,D2],[S],get_list};
collect(remove_message) -> {set,[],[],remove_message};
collect({put_map,F,Op,S,D,R,{list,Puts}}) ->
{set,[D],[S|Puts],{alloc,R,{put_map,Op,F}}};
-collect({get_map_elements,F,S,{list,Gets}}) ->
- {Ss,Ds} = beam_utils:split_even(Gets),
- {set,Ds,[S|Ss],{get_map_elements,F}};
-collect({'catch',R,L}) -> {set,[R],[],{'catch',L}};
+collect({'catch'=Op,R,L}) ->
+ {set,[R],[],{try_catch,Op,L}};
+collect({'try'=Op,R,L}) ->
+ {set,[R],[],{try_catch,Op,L}};
collect(fclearerror) -> {set,[],[],fclearerror};
collect({fcheckerror,{f,0}}) -> {set,[],[],fcheckerror};
collect({fmove,S,D}) -> {set,[D],[S],fmove};
@@ -183,7 +147,9 @@ opt_blocks([I|Is]) ->
opt_blocks([]) -> [].
opt_block(Is0) ->
- Is = find_fixpoint(fun opt/1, Is0),
+ Is = find_fixpoint(fun(Is) ->
+ opt_tuple_element(opt(Is))
+ end, Is0),
opt_alloc(Is).
find_fixpoint(OptFun, Is0) ->
@@ -279,76 +245,156 @@ opt_moves([X0,Y0], Is0) ->
not_possible -> {[X,Y0],Is2};
{X,_} -> {[X,Y0],Is2};
{Y,Is} -> {[X,Y],Is}
- end;
-opt_moves(Ds, Is) ->
- %% multiple destinations -> pass through
- {Ds,Is}.
-
+ end.
%% opt_move(Dest, [Instruction]) -> {UpdatedDest,[Instruction]} | not_possible
%% If there is a {move,Dest,FinalDest} instruction
%% in the instruction stream, remove the move instruction
%% and let FinalDest be the destination.
-%%
-%% For this optimization to be safe, we must be sure that
-%% Dest will not be referenced in any other by other instructions
-%% in the rest of the instruction stream. Not even the indirect
-%% reference by an instruction that may allocate (such as
-%% test_heap/2 or a GC Bif) is allowed.
opt_move(Dest, Is) ->
- opt_move_1(Dest, Is, ?MAXREG, []).
-
-opt_move_1(R, [{set,_,_,{alloc,Live,_}}|_]=Is, SafeRegs, Acc) when Live < SafeRegs ->
- %% Downgrade number of safe regs and rescan the instruction, as it most probably
- %% is a gc_bif instruction.
- opt_move_1(R, Is, Live, Acc);
-opt_move_1(R, [{set,[{x,X}=D],[R],move}|Is], SafeRegs, Acc) ->
- case X < SafeRegs andalso beam_utils:is_killed_block(R, Is) of
- true -> opt_move_2(D, Acc, Is);
- false -> not_possible
+ opt_move_1(Dest, Is, []).
+
+opt_move_1(R, [{set,[D],[R],move}|Is0], Acc) ->
+ %% Provided that the source register is killed by instructions
+ %% that follow, the optimization is safe.
+ case eliminate_use_of_from_reg(Is0, R, D, []) of
+ {yes,Is} -> opt_move_rev(D, Acc, Is);
+ no -> not_possible
end;
-opt_move_1(R, [{set,[D],[R],move}|Is], _SafeRegs, Acc) ->
- case beam_utils:is_killed_block(R, Is) of
- true -> opt_move_2(D, Acc, Is);
- false -> not_possible
+opt_move_1(_R, [{set,_,_,{alloc,_,_}}|_], _) ->
+ %% The optimization is either not possible or not safe.
+ %%
+ %% If R is an X register killed by allocation, the optimization is
+ %% not safe. On the other hand, if the X register is killed, there
+ %% will not follow a 'move' instruction with this X register as
+ %% the source.
+ %%
+ %% If R is a Y register, the optimization is still not safe
+ %% because the new target register is an X register that cannot
+ %% safely pass the alloc instruction.
+ not_possible;
+opt_move_1(R, [{set,_,_,_}=I|Is], Acc) ->
+ %% If the source register is either killed or used by this
+ %% instruction, the optimimization is not possible.
+ case is_killed_or_used(R, I) of
+ true -> not_possible;
+ false -> opt_move_1(R, Is, [I|Acc])
end;
-opt_move_1(R, [I|Is], SafeRegs, Acc) ->
- case is_transparent(R, I) of
- false -> not_possible;
- true -> opt_move_1(R, Is, SafeRegs, [I|Acc])
- end.
+opt_move_1(_, _, _) ->
+ not_possible.
+
+%% opt_tuple_element([Instruction]) -> [Instruction]
+%% If possible, move get_tuple_element instructions forward
+%% in the instruction stream to a move instruction, eliminating
+%% the move instruction. Example:
+%%
+%% get_tuple_element Tuple Pos Dst1
+%% ...
+%% move Dst1 Dst2
+%%
+%% This code may be possible to rewrite to:
+%%
+%% %%(Moved get_tuple_element instruction)
+%% ...
+%% get_tuple_element Tuple Pos Dst2
+%%
+
+opt_tuple_element([{set,[D],[S],{get_tuple_element,_}}=I|Is0]) ->
+ case opt_tuple_element_1(Is0, I, {S,D}, []) of
+ no ->
+ [I|opt_tuple_element(Is0)];
+ {yes,Is} ->
+ opt_tuple_element(Is)
+ end;
+opt_tuple_element([I|Is]) ->
+ [I|opt_tuple_element(Is)];
+opt_tuple_element([]) -> [].
+
+opt_tuple_element_1([{set,_,_,{alloc,_,_}}|_], _, _, _) ->
+ no;
+opt_tuple_element_1([{set,_,_,{try_catch,_,_}}|_], _, _, _) ->
+ no;
+opt_tuple_element_1([{set,[D],[S],move}|Is0], I0, {_,S}, Acc) ->
+ case eliminate_use_of_from_reg(Is0, S, D, []) of
+ no ->
+ no;
+ {yes,Is} ->
+ {set,[S],Ss,Op} = I0,
+ I = {set,[D],Ss,Op},
+ {yes,reverse(Acc, [I|Is])}
+ end;
+opt_tuple_element_1([{set,Ds,Ss,_}=I|Is], MovedI, {S,D}=Regs, Acc) ->
+ case member(S, Ds) orelse member(D, Ss) of
+ true ->
+ no;
+ false ->
+ opt_tuple_element_1(Is, MovedI, Regs, [I|Acc])
+ end;
+opt_tuple_element_1(_, _, _, _) -> no.
-%% Reverse the instructions, while checking that there are no instructions that
-%% would interfere with using the new destination register chosen.
+%% Reverse the instructions, while checking that there are no
+%% instructions that would interfere with using the new destination
+%% register (D).
-opt_move_2(D, [I|Is], Acc) ->
- case is_transparent(D, I) of
- false -> not_possible;
- true -> opt_move_2(D, Is, [I|Acc])
+opt_move_rev(D, [I|Is], Acc) ->
+ case is_killed_or_used(D, I) of
+ true -> not_possible;
+ false -> opt_move_rev(D, Is, [I|Acc])
+ end;
+opt_move_rev(D, [], Acc) -> {D,Acc}.
+
+%% is_killed_or_used(Register, {set,_,_,_}) -> bool()
+%% Test whether the register is used by the instruction.
+
+is_killed_or_used(R, {set,Ss,Ds,_}) ->
+ member(R, Ds) orelse member(R, Ss).
+
+%% eliminate_use_of_from_reg([Instruction], FromRegister, ToRegister, Acc) ->
+%% {yes,Is} | no
+%% Eliminate any use of FromRegister in the instruction sequence
+%% by replacing uses of FromRegister with ToRegister. If FromRegister
+%% is referenced by an allocation instruction, return 'no' to indicate
+%% that FromRegister is still used and that the optimization is not
+%% possible.
+
+eliminate_use_of_from_reg([{set,_,_,{alloc,Live,_}}|_]=Is0, {x,X}, _, Acc) ->
+ if
+ X < Live ->
+ no;
+ true ->
+ {yes,reverse(Acc, Is0)}
end;
-opt_move_2(D, [], Acc) -> {D,Acc}.
-
-%% is_transparent(Register, Instruction) -> true | false
-%% Returns true if Instruction does not in any way references Register
-%% (even indirectly by an allocation instruction).
-%% Returns false if Instruction does reference Register, or we are
-%% not sure.
-
-is_transparent({x,X}, {set,_,_,{alloc,Live,_}}) when X < Live ->
- false;
-is_transparent(R, {set,Ds,Ss,_Op}) ->
- case member(R, Ds) of
- true -> false;
- false -> not member(R, Ss)
+eliminate_use_of_from_reg([{set,Ds,Ss0,Op}=I0|Is], From, To, Acc) ->
+ I = case member(From, Ss0) of
+ true ->
+ Ss = [case S of
+ From -> To;
+ _ -> S
+ end || S <- Ss0],
+ {set,Ds,Ss,Op};
+ false ->
+ I0
+ end,
+ case member(From, Ds) of
+ true ->
+ {yes,reverse(Acc, [I|Is])};
+ false ->
+ eliminate_use_of_from_reg(Is, From, To, [I|Acc])
end;
-is_transparent(_, _) -> false.
+eliminate_use_of_from_reg([I]=Is, From, _To, Acc) ->
+ case beam_utils:is_killed_block(From, [I]) of
+ true ->
+ {yes,reverse(Acc, Is)};
+ false ->
+ no
+ end.
%% opt_alloc(Instructions) -> Instructions'
%% Optimises all allocate instructions.
opt_alloc([{set,[],[],{alloc,R,{_,Ns,Nh,[]}}}|Is]) ->
- [{set,[],[],opt_alloc(Is, Ns, Nh, R)}|opt(Is)];
+ [{set,[],[],opt_alloc(Is, Ns, Nh, R)}|Is];
opt_alloc([I|Is]) -> [I|opt_alloc(Is)];
opt_alloc([]) -> [].
@@ -414,234 +460,3 @@ x_dead([], Regs) -> Regs.
x_live([{x,N}|Rs], Regs) -> x_live(Rs, Regs bor (1 bsl N));
x_live([_|Rs], Regs) -> x_live(Rs, Regs);
x_live([], Regs) -> Regs.
-
-%%%
-%%% Evaluation of constant bit fields.
-%%%
-
-is_bs_put({bs_put,_,{bs_put_integer,_,_},_}) -> true;
-is_bs_put({bs_put,_,{bs_put_float,_,_},_}) -> true;
-is_bs_put(_) -> false.
-
-collect_bs_puts(Is) ->
- collect_bs_puts_1(Is, []).
-
-collect_bs_puts_1([I|Is]=Is0, Acc) ->
- case is_bs_put(I) of
- false -> {reverse(Acc),Is0};
- true -> collect_bs_puts_1(Is, [I|Acc])
- end.
-
-opt_bs_puts(Is) ->
- opt_bs_1(Is, []).
-
-opt_bs_1([{bs_put,Fail,
- {bs_put_float,1,Flags0},[{integer,Sz},Src]}=I0|Is], Acc) ->
- try eval_put_float(Src, Sz, Flags0) of
- <<Int:Sz>> ->
- Flags = force_big(Flags0),
- I = {bs_put,Fail,{bs_put_integer,1,Flags},
- [{integer,Sz},{integer,Int}]},
- opt_bs_1([I|Is], Acc)
- catch
- error:_ ->
- opt_bs_1(Is, [I0|Acc])
- end;
-opt_bs_1([{bs_put,_,{bs_put_integer,1,_},[{integer,8},{integer,_}]}|_]=IsAll,
- Acc0) ->
- {Is,Acc} = bs_collect_string(IsAll, Acc0),
- opt_bs_1(Is, Acc);
-opt_bs_1([{bs_put,Fail,{bs_put_integer,1,F},[{integer,Sz},{integer,N}]}=I|Is0],
- Acc) when Sz > 8 ->
- case field_endian(F) of
- big ->
- %% We can do this optimization for any field size without risk
- %% for code explosion.
- case bs_split_int(N, Sz, Fail, Is0) of
- no_split -> opt_bs_1(Is0, [I|Acc]);
- Is -> opt_bs_1(Is, Acc)
- end;
- little when Sz < 128 ->
- %% We only try to optimize relatively small fields, to avoid
- %% an explosion in code size.
- <<Int:Sz>> = <<N:Sz/little>>,
- Flags = force_big(F),
- Is = [{bs_put,Fail,{bs_put_integer,1,Flags},
- [{integer,Sz},{integer,Int}]}|Is0],
- opt_bs_1(Is, Acc);
- _ -> %native or too wide little field
- opt_bs_1(Is0, [I|Acc])
- end;
-opt_bs_1([{bs_put,Fail,{Op,U,F},[{integer,Sz},Src]}|Is], Acc) when U > 1 ->
- opt_bs_1([{bs_put,Fail,{Op,1,F},[{integer,U*Sz},Src]}|Is], Acc);
-opt_bs_1([I|Is], Acc) ->
- opt_bs_1(Is, [I|Acc]);
-opt_bs_1([], Acc) -> reverse(Acc).
-
-eval_put_float(Src, Sz, Flags) when Sz =< 256 -> %Only evaluate if Sz is reasonable.
- Val = value(Src),
- case field_endian(Flags) of
- little -> <<Val:Sz/little-float-unit:1>>;
- big -> <<Val:Sz/big-float-unit:1>>
- %% native intentionally not handled here - we can't optimize it.
- end.
-
-value({integer,I}) -> I;
-value({float,F}) -> F.
-
-bs_collect_string(Is, [{bs_put,_,{bs_put_string,Len,{string,Str}},[]}|Acc]) ->
- bs_coll_str_1(Is, Len, reverse(Str), Acc);
-bs_collect_string(Is, Acc) ->
- bs_coll_str_1(Is, 0, [], Acc).
-
-bs_coll_str_1([{bs_put,_,{bs_put_integer,U,_},[{integer,Sz},{integer,V}]}|Is],
- Len, StrAcc, IsAcc) when U*Sz =:= 8 ->
- Byte = V band 16#FF,
- bs_coll_str_1(Is, Len+1, [Byte|StrAcc], IsAcc);
-bs_coll_str_1(Is, Len, StrAcc, IsAcc) ->
- {Is,[{bs_put,{f,0},{bs_put_string,Len,{string,reverse(StrAcc)}},[]}|IsAcc]}.
-
-field_endian({field_flags,F}) -> field_endian_1(F).
-
-field_endian_1([big=E|_]) -> E;
-field_endian_1([little=E|_]) -> E;
-field_endian_1([native=E|_]) -> E;
-field_endian_1([_|Fs]) -> field_endian_1(Fs).
-
-force_big({field_flags,F}) ->
- {field_flags,force_big_1(F)}.
-
-force_big_1([big|_]=Fs) -> Fs;
-force_big_1([little|Fs]) -> [big|Fs];
-force_big_1([F|Fs]) -> [F|force_big_1(Fs)].
-
-bs_split_int(0, Sz, _, _) when Sz > 64 ->
- %% We don't want to split in this case because the
- %% string will consist of only zeroes.
- no_split;
-bs_split_int(-1, Sz, _, _) when Sz > 64 ->
- %% We don't want to split in this case because the
- %% string will consist of only 255 bytes.
- no_split;
-bs_split_int(N, Sz, Fail, Acc) ->
- FirstByteSz = case Sz rem 8 of
- 0 -> 8;
- Rem -> Rem
- end,
- bs_split_int_1(N, FirstByteSz, Sz, Fail, Acc).
-
-bs_split_int_1(-1, _, Sz, Fail, Acc) when Sz > 64 ->
- I = {bs_put,Fail,{bs_put_integer,1,{field_flags,[big]}},
- [{integer,Sz},{integer,-1}]},
- [I|Acc];
-bs_split_int_1(0, _, Sz, Fail, Acc) when Sz > 64 ->
- I = {bs_put,Fail,{bs_put_integer,1,{field_flags,[big]}},
- [{integer,Sz},{integer,0}]},
- [I|Acc];
-bs_split_int_1(N, ByteSz, Sz, Fail, Acc) when Sz > 0 ->
- Mask = (1 bsl ByteSz) - 1,
- I = {bs_put,Fail,{bs_put_integer,1,{field_flags,[big]}},
- [{integer,ByteSz},{integer,N band Mask}]},
- bs_split_int_1(N bsr ByteSz, 8, Sz-ByteSz, Fail, [I|Acc]);
-bs_split_int_1(_, _, _, _, Acc) -> Acc.
-
-
-%%%
-%%% Optimization of new bit syntax matching: get rid
-%%% of redundant bs_restore2/2 instructions across select_val
-%%% instructions, as well as a few other simple peep-hole optimizations.
-%%%
-
-bsm_opt(Is0, Lc0) ->
- {Is1,D0,Lc} = bsm_scan(Is0, [], Lc0, []),
- Is2 = case D0 of
- [] ->
- Is1;
- _ ->
- D = gb_trees:from_orddict(orddict:from_list(D0)),
- bsm_reroute(Is1, D, none, [])
- end,
- Is = beam_clean:bs_clean_saves(Is2),
- {bsm_opt_2(Is, []),Lc}.
-
-bsm_scan([{label,L}=Lbl,{bs_restore2,_,Save}=R|Is], D0, Lc, Acc0) ->
- D = [{{L,Save},Lc}|D0],
- Acc = [{label,Lc},R,Lbl|Acc0],
- bsm_scan(Is, D, Lc+1, Acc);
-bsm_scan([I|Is], D, Lc, Acc) ->
- bsm_scan(Is, D, Lc, [I|Acc]);
-bsm_scan([], D, Lc, Acc) ->
- {reverse(Acc),D,Lc}.
-
-bsm_reroute([{bs_save2,Reg,Save}=I|Is], D, _, Acc) ->
- bsm_reroute(Is, D, {Reg,Save}, [I|Acc]);
-bsm_reroute([{bs_restore2,Reg,Save}=I|Is], D, _, Acc) ->
- bsm_reroute(Is, D, {Reg,Save}, [I|Acc]);
-bsm_reroute([{label,_}=I|Is], D, S, Acc) ->
- bsm_reroute(Is, D, S, [I|Acc]);
-bsm_reroute([{select,select_val,Reg,F0,Lbls0}|Is], D, {_,Save}=S, Acc0) ->
- [F|Lbls] = bsm_subst_labels([F0|Lbls0], Save, D),
- Acc = [{select,select_val,Reg,F,Lbls}|Acc0],
- bsm_reroute(Is, D, S, Acc);
-bsm_reroute([{test,TestOp,F0,TestArgs}=I|Is], D, {_,Save}=S, Acc0) ->
- F = bsm_subst_label(F0, Save, D),
- Acc = [{test,TestOp,F,TestArgs}|Acc0],
- case bsm_not_bs_test(I) of
- true ->
- %% The test instruction will not update the bit offset for the
- %% binary being matched. Therefore the save position can be kept.
- bsm_reroute(Is, D, S, Acc);
- false ->
- %% The test instruction might update the bit offset. Kill our
- %% remembered Save position.
- bsm_reroute(Is, D, none, Acc)
- end;
-bsm_reroute([{test,TestOp,F0,Live,TestArgs,Dst}|Is], D, {_,Save}, Acc0) ->
- F = bsm_subst_label(F0, Save, D),
- Acc = [{test,TestOp,F,Live,TestArgs,Dst}|Acc0],
- %% The test instruction will update the bit offset. Kill our
- %% remembered Save position.
- bsm_reroute(Is, D, none, Acc);
-bsm_reroute([{block,[{set,[],[],{alloc,_,_}}]}=Bl,
- {bs_context_to_binary,_}=I|Is], D, S, Acc) ->
- %% To help further bit syntax optimizations.
- bsm_reroute([I,Bl|Is], D, S, Acc);
-bsm_reroute([I|Is], D, _, Acc) ->
- bsm_reroute(Is, D, none, [I|Acc]);
-bsm_reroute([], _, _, Acc) -> reverse(Acc).
-
-bsm_opt_2([{test,bs_test_tail2,F,[Ctx,Bits]}|Is],
- [{test,bs_skip_bits2,F,[Ctx,{integer,I},Unit,_Flags]}|Acc]) ->
- bsm_opt_2(Is, [{test,bs_test_tail2,F,[Ctx,Bits+I*Unit]}|Acc]);
-bsm_opt_2([{test,bs_skip_bits2,F,[Ctx,{integer,I1},Unit1,_]}|Is],
- [{test,bs_skip_bits2,F,[Ctx,{integer,I2},Unit2,Flags]}|Acc]) ->
- bsm_opt_2(Is, [{test,bs_skip_bits2,F,
- [Ctx,{integer,I1*Unit1+I2*Unit2},1,Flags]}|Acc]);
-bsm_opt_2([I|Is], Acc) ->
- bsm_opt_2(Is, [I|Acc]);
-bsm_opt_2([], Acc) -> reverse(Acc).
-
-%% bsm_not_bs_test({test,Name,_,Operands}) -> true|false.
-%% Test whether is the test is a "safe", i.e. does not move the
-%% bit offset for a binary.
-%%
-%% 'true' means that the test is safe, 'false' that we don't know or
-%% that the test moves the offset (e.g. bs_get_integer2).
-
-bsm_not_bs_test({test,bs_test_tail2,_,[_,_]}) -> true;
-bsm_not_bs_test(Test) -> beam_utils:is_pure_test(Test).
-
-bsm_subst_labels(Fs, Save, D) ->
- bsm_subst_labels_1(Fs, Save, D, []).
-
-bsm_subst_labels_1([F|Fs], Save, D, Acc) ->
- bsm_subst_labels_1(Fs, Save, D, [bsm_subst_label(F, Save, D)|Acc]);
-bsm_subst_labels_1([], _, _, Acc) ->
- reverse(Acc).
-
-bsm_subst_label({f,Lbl0}=F, Save, D) ->
- case gb_trees:lookup({Lbl0,Save}, D) of
- {value,Lbl} -> {f,Lbl};
- none -> F
- end;
-bsm_subst_label(Other, _, _) -> Other.
diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl
index d14be83496..99e4ccb1e9 100644
--- a/lib/compiler/src/beam_bool.erl
+++ b/lib/compiler/src/beam_bool.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,8 +25,6 @@
-import(lists, [reverse/1,reverse/2,foldl/3,mapfoldl/3,map/2]).
--define(MAXREG, 1024).
-
-record(st,
{next, %Next label number.
ll %Live regs at labels.
@@ -240,9 +238,9 @@ extend_block(BlAcc0, Fail, [{block,Is0}|OldAcc]) ->
end;
extend_block(BlAcc, _, OldAcc) -> {BlAcc,OldAcc}.
-extend_block_1([{set,[_],_,{bif,_,{f,Fail}}}=I|Is], Fail, Acc) ->
+extend_block_1([{set,[{x,_}],_,{bif,_,{f,Fail}}}=I|Is], Fail, Acc) ->
extend_block_1(Is, Fail, [I|Acc]);
-extend_block_1([{set,[_],As,{bif,Bif,_}}=I|Is]=Is0, Fail, Acc) ->
+extend_block_1([{set,[{x,_}],As,{bif,Bif,_}}=I|Is]=Is0, Fail, Acc) ->
case safe_bool_op(Bif, length(As)) of
false -> {Acc,reverse(Is0)};
true -> extend_block_1(Is, Fail, [I|Acc])
@@ -313,6 +311,8 @@ dst_regs([{set,[D],_,{bif,_,{f,_}}}|Is], Acc) ->
dst_regs(Is, [D|Acc]);
dst_regs([{set,[D],_,{alloc,_,{gc_bif,_,{f,_}}}}|Is], Acc) ->
dst_regs(Is, [D|Acc]);
+dst_regs([{protected,_,Bl,_}|Is], Acc) ->
+ dst_regs(Bl, dst_regs(Is, Acc));
dst_regs([_|Is], Acc) ->
dst_regs(Is, Acc);
dst_regs([], Acc) -> ordsets:from_list(Acc).
diff --git a/lib/compiler/src/beam_bs.erl b/lib/compiler/src/beam_bs.erl
new file mode 100644
index 0000000000..2aed98d4e7
--- /dev/null
+++ b/lib/compiler/src/beam_bs.erl
@@ -0,0 +1,278 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+%% Purpose : Partitions assembly instructions into basic blocks and
+%% optimizes them.
+
+-module(beam_bs).
+
+-export([module/2]).
+-import(lists, [mapfoldl/3,reverse/1]).
+
+module({Mod,Exp,Attr,Fs0,Lc0}, _Opt) ->
+ {Fs,Lc} = mapfoldl(fun function/2, Lc0, Fs0),
+ {ok,{Mod,Exp,Attr,Fs,Lc}}.
+
+function({function,Name,Arity,CLabel,Is0}, Lc0) ->
+ try
+ Is1 = bs_put_opt(Is0),
+ {Is,Lc} = bsm_opt(Is1, Lc0),
+ {{function,Name,Arity,CLabel,Is},Lc}
+ catch
+ Class:Error ->
+ Stack = erlang:get_stacktrace(),
+ io:fwrite("Function: ~w/~w\n", [Name,Arity]),
+ erlang:raise(Class, Error, Stack)
+ end.
+
+%%%
+%%% Evaluation of constant bit fields.
+%%%
+
+bs_put_opt([{bs_put,_,_,_}=I|Is0]) ->
+ {BsPuts0,Is} = collect_bs_puts(Is0, [I]),
+ BsPuts = opt_bs_puts(BsPuts0),
+ BsPuts ++ bs_put_opt(Is);
+bs_put_opt([I|Is]) ->
+ [I|bs_put_opt(Is)];
+bs_put_opt([]) -> [].
+
+collect_bs_puts([{bs_put,_,_,_}=I|Is], Acc) ->
+ collect_bs_puts(Is, [I|Acc]);
+collect_bs_puts([_|_]=Is, Acc) ->
+ {reverse(Acc),Is}.
+
+opt_bs_puts(Is) ->
+ opt_bs_1(Is, []).
+
+opt_bs_1([{bs_put,Fail,
+ {bs_put_float,1,Flags0},[{integer,Sz},Src]}=I0|Is], Acc) ->
+ try eval_put_float(Src, Sz, Flags0) of
+ <<Int:Sz>> ->
+ Flags = force_big(Flags0),
+ I = {bs_put,Fail,{bs_put_integer,1,Flags},
+ [{integer,Sz},{integer,Int}]},
+ opt_bs_1([I|Is], Acc)
+ catch
+ error:_ ->
+ opt_bs_1(Is, [I0|Acc])
+ end;
+opt_bs_1([{bs_put,_,{bs_put_integer,1,_},[{integer,8},{integer,_}]}|_]=IsAll,
+ Acc0) ->
+ {Is,Acc} = bs_collect_string(IsAll, Acc0),
+ opt_bs_1(Is, Acc);
+opt_bs_1([{bs_put,Fail,{bs_put_integer,1,F},[{integer,Sz},{integer,N}]}=I|Is0],
+ Acc) when Sz > 8 ->
+ case field_endian(F) of
+ big ->
+ %% We can do this optimization for any field size without
+ %% risk for code explosion.
+ case bs_split_int(N, Sz, Fail, Is0) of
+ no_split -> opt_bs_1(Is0, [I|Acc]);
+ Is -> opt_bs_1(Is, Acc)
+ end;
+ little when Sz < 128 ->
+ %% We only try to optimize relatively small fields, to
+ %% avoid an explosion in code size.
+ <<Int:Sz>> = <<N:Sz/little>>,
+ Flags = force_big(F),
+ Is = [{bs_put,Fail,{bs_put_integer,1,Flags},
+ [{integer,Sz},{integer,Int}]}|Is0],
+ opt_bs_1(Is, Acc);
+ _ -> %native or too wide little field
+ opt_bs_1(Is0, [I|Acc])
+ end;
+opt_bs_1([{bs_put,Fail,{Op,U,F},[{integer,Sz},Src]}|Is], Acc) when U > 1 ->
+ opt_bs_1([{bs_put,Fail,{Op,1,F},[{integer,U*Sz},Src]}|Is], Acc);
+opt_bs_1([I|Is], Acc) ->
+ opt_bs_1(Is, [I|Acc]);
+opt_bs_1([], Acc) -> reverse(Acc).
+
+eval_put_float(Src, Sz, Flags) when Sz =< 256 ->
+ %%Only evaluate if Sz is reasonable.
+ Val = value(Src),
+ case field_endian(Flags) of
+ little -> <<Val:Sz/little-float-unit:1>>;
+ big -> <<Val:Sz/big-float-unit:1>>
+ %% native intentionally not handled here - we can't optimize
+ %% it.
+ end.
+
+value({integer,I}) -> I;
+value({float,F}) -> F.
+
+bs_collect_string(Is, [{bs_put,_,{bs_put_string,Len,{string,Str}},[]}|Acc]) ->
+ bs_coll_str_1(Is, Len, reverse(Str), Acc);
+bs_collect_string(Is, Acc) ->
+ bs_coll_str_1(Is, 0, [], Acc).
+
+bs_coll_str_1([{bs_put,_,{bs_put_integer,U,_},[{integer,Sz},{integer,V}]}|Is],
+ Len, StrAcc, IsAcc) when U*Sz =:= 8 ->
+ Byte = V band 16#FF,
+ bs_coll_str_1(Is, Len+1, [Byte|StrAcc], IsAcc);
+bs_coll_str_1(Is, Len, StrAcc, IsAcc) ->
+ {Is,[{bs_put,{f,0},{bs_put_string,Len,{string,reverse(StrAcc)}},[]}|IsAcc]}.
+
+field_endian({field_flags,F}) -> field_endian_1(F).
+
+field_endian_1([big=E|_]) -> E;
+field_endian_1([little=E|_]) -> E;
+field_endian_1([native=E|_]) -> E;
+field_endian_1([_|Fs]) -> field_endian_1(Fs).
+
+force_big({field_flags,F}) ->
+ {field_flags,force_big_1(F)}.
+
+force_big_1([big|_]=Fs) -> Fs;
+force_big_1([little|Fs]) -> [big|Fs];
+force_big_1([F|Fs]) -> [F|force_big_1(Fs)].
+
+bs_split_int(0, Sz, _, _) when Sz > 64 ->
+ %% We don't want to split in this case because the
+ %% string will consist of only zeroes.
+ no_split;
+bs_split_int(-1, Sz, _, _) when Sz > 64 ->
+ %% We don't want to split in this case because the
+ %% string will consist of only 255 bytes.
+ no_split;
+bs_split_int(N, Sz, Fail, Acc) ->
+ FirstByteSz = case Sz rem 8 of
+ 0 -> 8;
+ Rem -> Rem
+ end,
+ bs_split_int_1(N, FirstByteSz, Sz, Fail, Acc).
+
+bs_split_int_1(-1, _, Sz, Fail, Acc) when Sz > 64 ->
+ I = {bs_put,Fail,{bs_put_integer,1,{field_flags,[big]}},
+ [{integer,Sz},{integer,-1}]},
+ [I|Acc];
+bs_split_int_1(0, _, Sz, Fail, Acc) when Sz > 64 ->
+ I = {bs_put,Fail,{bs_put_integer,1,{field_flags,[big]}},
+ [{integer,Sz},{integer,0}]},
+ [I|Acc];
+bs_split_int_1(N, ByteSz, Sz, Fail, Acc) when Sz > 0 ->
+ Mask = (1 bsl ByteSz) - 1,
+ I = {bs_put,Fail,{bs_put_integer,1,{field_flags,[big]}},
+ [{integer,ByteSz},{integer,N band Mask}]},
+ bs_split_int_1(N bsr ByteSz, 8, Sz-ByteSz, Fail, [I|Acc]);
+bs_split_int_1(_, _, _, _, Acc) -> Acc.
+
+%%%
+%%% Optimization of bit syntax matching: get rid
+%%% of redundant bs_restore2/2 instructions across select_val
+%%% instructions, as well as a few other simple peep-hole
+%%% optimizations.
+%%%
+
+bsm_opt(Is0, Lc0) ->
+ {Is1,D0,Lc} = bsm_scan(Is0, [], Lc0, []),
+ Is2 = case D0 of
+ [] ->
+ %% No bit syntax matching in this function.
+ Is1;
+ [_|_] ->
+ %% Optimize the bit syntax matching.
+ D = gb_trees:from_orddict(orddict:from_list(D0)),
+ bsm_reroute(Is1, D, none, [])
+ end,
+ Is = beam_clean:bs_clean_saves(Is2),
+ {bsm_opt_2(Is, []),Lc}.
+
+bsm_scan([{label,L}=Lbl,{bs_restore2,_,Save}=R|Is], D0, Lc, Acc0) ->
+ D = [{{L,Save},Lc}|D0],
+ Acc = [{label,Lc},R,Lbl|Acc0],
+ bsm_scan(Is, D, Lc+1, Acc);
+bsm_scan([I|Is], D, Lc, Acc) ->
+ bsm_scan(Is, D, Lc, [I|Acc]);
+bsm_scan([], D, Lc, Acc) ->
+ {reverse(Acc),D,Lc}.
+
+bsm_reroute([{bs_save2,Reg,Save}=I|Is], D, _, Acc) ->
+ bsm_reroute(Is, D, {Reg,Save}, [I|Acc]);
+bsm_reroute([{bs_restore2,Reg,Save}=I|Is], D, _, Acc) ->
+ bsm_reroute(Is, D, {Reg,Save}, [I|Acc]);
+bsm_reroute([{label,_}=I|Is], D, S, Acc) ->
+ bsm_reroute(Is, D, S, [I|Acc]);
+bsm_reroute([{select,select_val,Reg,F0,Lbls0}|Is], D, {_,Save}=S, Acc0) ->
+ [F|Lbls] = bsm_subst_labels([F0|Lbls0], Save, D),
+ Acc = [{select,select_val,Reg,F,Lbls}|Acc0],
+ bsm_reroute(Is, D, S, Acc);
+bsm_reroute([{test,TestOp,F0,TestArgs}=I|Is], D, {_,Save}=S, Acc0) ->
+ F = bsm_subst_label(F0, Save, D),
+ Acc = [{test,TestOp,F,TestArgs}|Acc0],
+ case bsm_not_bs_test(I) of
+ true ->
+ %% The test instruction will not update the bit offset for
+ %% the binary being matched. Therefore the save position
+ %% can be kept.
+ bsm_reroute(Is, D, S, Acc);
+ false ->
+ %% The test instruction might update the bit offset. Kill
+ %% our remembered Save position.
+ bsm_reroute(Is, D, none, Acc)
+ end;
+bsm_reroute([{test,TestOp,F0,Live,TestArgs,Dst}|Is], D, {_,Save}, Acc0) ->
+ F = bsm_subst_label(F0, Save, D),
+ Acc = [{test,TestOp,F,Live,TestArgs,Dst}|Acc0],
+ %% The test instruction will update the bit offset. Kill our
+ %% remembered Save position.
+ bsm_reroute(Is, D, none, Acc);
+bsm_reroute([{block,[{set,[],[],{alloc,_,_}}]}=Bl,
+ {bs_context_to_binary,_}=I|Is], D, S, Acc) ->
+ %% To help further bit syntax optimizations.
+ bsm_reroute([I,Bl|Is], D, S, Acc);
+bsm_reroute([I|Is], D, _, Acc) ->
+ bsm_reroute(Is, D, none, [I|Acc]);
+bsm_reroute([], _, _, Acc) -> reverse(Acc).
+
+bsm_opt_2([{test,bs_test_tail2,F,[Ctx,Bits]}|Is],
+ [{test,bs_skip_bits2,F,[Ctx,{integer,I},Unit,_Flags]}|Acc]) ->
+ bsm_opt_2(Is, [{test,bs_test_tail2,F,[Ctx,Bits+I*Unit]}|Acc]);
+bsm_opt_2([{test,bs_skip_bits2,F,[Ctx,{integer,I1},Unit1,_]}|Is],
+ [{test,bs_skip_bits2,F,[Ctx,{integer,I2},Unit2,Flags]}|Acc]) ->
+ bsm_opt_2(Is, [{test,bs_skip_bits2,F,
+ [Ctx,{integer,I1*Unit1+I2*Unit2},1,Flags]}|Acc]);
+bsm_opt_2([I|Is], Acc) ->
+ bsm_opt_2(Is, [I|Acc]);
+bsm_opt_2([], Acc) -> reverse(Acc).
+
+%% bsm_not_bs_test({test,Name,_,Operands}) -> true|false.
+%% Test whether is the test is a "safe", i.e. does not move the
+%% bit offset for a binary.
+%%
+%% 'true' means that the test is safe, 'false' that we don't know or
+%% that the test moves the offset (e.g. bs_get_integer2).
+
+bsm_not_bs_test({test,bs_test_tail2,_,[_,_]}) -> true;
+bsm_not_bs_test(Test) -> beam_utils:is_pure_test(Test).
+
+bsm_subst_labels(Fs, Save, D) ->
+ bsm_subst_labels_1(Fs, Save, D, []).
+
+bsm_subst_labels_1([F|Fs], Save, D, Acc) ->
+ bsm_subst_labels_1(Fs, Save, D, [bsm_subst_label(F, Save, D)|Acc]);
+bsm_subst_labels_1([], _, _, Acc) ->
+ reverse(Acc).
+
+bsm_subst_label({f,Lbl0}=F, Save, D) ->
+ case gb_trees:lookup({Lbl0,Save}, D) of
+ {value,Lbl} -> {f,Lbl};
+ none -> F
+ end;
+bsm_subst_label(Other, _, _) -> Other.
diff --git a/lib/compiler/src/beam_bsm.erl b/lib/compiler/src/beam_bsm.erl
index 62356928ae..286307a4be 100644
--- a/lib/compiler/src/beam_bsm.erl
+++ b/lib/compiler/src/beam_bsm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/beam_clean.erl b/lib/compiler/src/beam_clean.erl
index 919ee3ee7d..10805a3c36 100644
--- a/lib/compiler/src/beam_clean.erl
+++ b/lib/compiler/src/beam_clean.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -141,7 +141,7 @@ renumber_labels([{bif,is_record,{f,_},
renumber_labels(Is, Acc, St);
renumber_labels([{test,is_record,{f,_}=Fail,
[Term,{atom,Tag}=TagAtom,{integer,Arity}]}|Is0], Acc, St) ->
- Tmp = {x,1023},
+ Tmp = {x,1022},
Is = case is_record_tuple(Term, Tag, Arity) of
yes ->
Is0;
@@ -190,17 +190,11 @@ replace([{test,Test,{f,Lbl},Ops}|Is], Acc, D) ->
replace([{test,Test,{f,Lbl},Live,Ops,Dst}|Is], Acc, D) ->
replace(Is, [{test,Test,{f,label(Lbl, D)},Live,Ops,Dst}|Acc], D);
replace([{select,I,R,{f,Fail0},Vls0}|Is], Acc, D) ->
- Vls1 = map(fun ({f,L}) -> {f,label(L, D)};
- (Other) -> Other end, Vls0),
+ Vls = map(fun ({f,L}) -> {f,label(L, D)};
+ (Other) -> Other
+ end, Vls0),
Fail = label(Fail0, D),
- case redundant_values(Vls1, Fail, []) of
- [] ->
- %% Oops, no choices left. The loader will not accept that.
- %% Convert to a plain jump.
- replace(Is, [{jump,{f,Fail}}|Acc], D);
- Vls ->
- replace(Is, [{select,I,R,{f,Fail},Vls}|Acc], D)
- end;
+ replace(Is, [{select,I,R,{f,Fail},Vls}|Acc], D);
replace([{'try',R,{f,Lbl}}|Is], Acc, D) ->
replace(Is, [{'try',R,{f,label(Lbl, D)}}|Acc], D);
replace([{'catch',R,{f,Lbl}}|Is], Acc, D) ->
@@ -241,12 +235,6 @@ label(Old, D) ->
{value,Val} -> Val;
none -> throw({error,{undefined_label,Old}})
end.
-
-redundant_values([_,{f,Fail}|Vls], Fail, Acc) ->
- redundant_values(Vls, Fail, Acc);
-redundant_values([Val,Lbl|Vls], Fail, Acc) ->
- redundant_values(Vls, Fail, [Lbl,Val|Acc]);
-redundant_values([], _, Acc) -> reverse(Acc).
%%%
%%% Final fixup of bs_start_match2/5,bs_save2/bs_restore2 instructions for
diff --git a/lib/compiler/src/beam_dead.erl b/lib/compiler/src/beam_dead.erl
index ead88b57e9..6f6d742293 100644
--- a/lib/compiler/src/beam_dead.erl
+++ b/lib/compiler/src/beam_dead.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -239,15 +239,30 @@ backward([{test,is_eq_exact,Fail,[Dst,{integer,Arity}]}=I|
backward([{label,Lbl}=L|Is], D, Acc) ->
backward(Is, beam_utils:index_label(Lbl, Acc, D), [L|Acc]);
backward([{select,select_val,Reg,{f,Fail0},List0}|Is], D, Acc) ->
- List = shortcut_select_list(List0, Reg, D, []),
+ List1 = shortcut_select_list(List0, Reg, D, []),
Fail1 = shortcut_label(Fail0, D),
Fail = shortcut_bs_test(Fail1, Is, D),
- Sel = {select,select_val,Reg,{f,Fail},List},
- backward(Is, D, [Sel|Acc]);
+ List = prune_redundant(List1, Fail),
+ case List of
+ [] ->
+ Jump = {jump,{f,Fail}},
+ backward([Jump|Is], D, Acc);
+ [V,F] ->
+ Test = {test,is_eq_exact,{f,Fail},[Reg,V]},
+ Jump = {jump,F},
+ backward([Jump,Test|Is], D, Acc);
+ [{atom,B1},F,{atom,B2},F] when B1 =:= not B2 ->
+ Test = {test,is_boolean,{f,Fail},[Reg]},
+ Jump = {jump,F},
+ backward([Jump,Test|Is], D, Acc);
+ [_|_] ->
+ Sel = {select,select_val,Reg,{f,Fail},List},
+ backward(Is, D, [Sel|Acc])
+ end;
backward([{jump,{f,To0}},{move,Src,Reg}=Move|Is], D, Acc) ->
To = shortcut_select_label(To0, Reg, Src, D),
Jump = {jump,{f,To}},
- case beam_utils:is_killed_at(Reg, To, D) of
+ case is_killed_at(Reg, To, D) of
false -> backward([Move|Is], D, [Jump|Acc]);
true -> backward([Jump|Is], D, Acc)
end;
@@ -295,7 +310,28 @@ backward([{test,Op,{f,To0},Ops0}|Is], D, Acc) ->
is_eq_exact -> combine_eqs(To, Ops0, D, Acc);
_ -> {test,Op,{f,To},Ops0}
end,
- backward(Is, D, [I|Acc]);
+ case {I,Acc} of
+ {{test,is_atom,Fail,Ops0},[{test,is_boolean,Fail,Ops0}|_]} ->
+ %% An is_atom test before an is_boolean test (with the
+ %% same failure label) is redundant.
+ backward(Is, D, Acc);
+ {{test,is_atom,Fail,[R]},
+ [{test,is_eq_exact,Fail,[R,{atom,_}]}|_]} ->
+ %% An is_atom test before a comparison with an atom (with
+ %% the same failure label) is redundant.
+ backward(Is, D, Acc);
+ {{test,is_integer,Fail,[R]},
+ [{test,is_eq_exact,Fail,[R,{integer,_}]}|_]} ->
+ %% An is_integer test before a comparison with an integer
+ %% (with the same failure label) is redundant.
+ backward(Is, D, Acc);
+ {{test,_,_,_},_} ->
+ %% Still a test instruction. Done.
+ backward(Is, D, [I|Acc]);
+ {_,_} ->
+ %% Rewritten to a select_val. Rescan.
+ backward([I|Is], D, Acc)
+ end;
backward([{test,Op,{f,To0},Live,Ops0,Dst}|Is], D, Acc) ->
To1 = shortcut_bs_test(To0, Is, D),
To2 = shortcut_label(To1, D),
@@ -348,6 +384,12 @@ shortcut_label(To0, D) ->
shortcut_select_label(To, Reg, Lit, D) ->
shortcut_rel_op(To, is_ne_exact, [Reg,Lit], D).
+prune_redundant([_,{f,Fail}|T], Fail) ->
+ prune_redundant(T, Fail);
+prune_redundant([V,F|T], Fail) ->
+ [V,F|prune_redundant(T, Fail)];
+prune_redundant([], _) -> [].
+
%% Replace a comparison operator with a test instruction and a jump.
%% For example, if we have this code:
%%
@@ -375,7 +417,7 @@ comp_op_find_shortcut(To0, Reg, Val, D) ->
To0 ->
not_possible();
To ->
- case beam_utils:is_killed_at(Reg, To, D) of
+ case is_killed_at(Reg, To, D) of
false -> not_possible();
true -> To
end
@@ -818,3 +860,17 @@ get_literal(nil) ->
get_literal({literal,_}=Lit) ->
Lit;
get_literal({_,_}) -> error.
+
+
+%%%
+%%% Removing stores to Y registers is not always safe
+%%% if there is an instruction that causes an exception
+%%% within a catch. In practice, there are few or no
+%%% opportunities for removing stores to Y registers anyway
+%%% if sys_core_fold has been run.
+%%%
+
+is_killed_at({x,_}=Reg, Lbl, D) ->
+ beam_utils:is_killed_at(Reg, Lbl, D);
+is_killed_at({y,_}, _, _) ->
+ false.
diff --git a/lib/compiler/src/beam_dict.erl b/lib/compiler/src/beam_dict.erl
index 2b5f8c1b7f..9565ab74c4 100644
--- a/lib/compiler/src/beam_dict.erl
+++ b/lib/compiler/src/beam_dict.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@
locals = [] :: [{label(), arity(), label()}],
imports = gb_trees:empty() :: import_tab(),
strings = <<>> :: binary(), %String pool
- lambdas = [], %[{...}]
+ lambdas = {0,[]}, %[{...}]
literals = dict:new() :: literal_tab(),
fnames = #{} :: fname_tab(),
lines = #{} :: line_tab(),
@@ -145,15 +145,14 @@ string(Str, Dict) when is_list(Str) ->
-spec lambda(label(), non_neg_integer(), bdict()) ->
{non_neg_integer(), bdict()}.
-lambda(Lbl, NumFree, #asm{lambdas=Lambdas0}=Dict) ->
- OldIndex = length(Lambdas0),
+lambda(Lbl, NumFree, #asm{lambdas={OldIndex,Lambdas0}}=Dict) ->
%% Set Index the same as OldIndex.
Index = OldIndex,
%% Initialize OldUniq to 0. It will be set to an unique value
%% based on the MD5 checksum of the BEAM code for the module.
OldUniq = 0,
Lambdas = [{Lbl,{OldIndex,Lbl,Index,NumFree,OldUniq}}|Lambdas0],
- {OldIndex,Dict#asm{lambdas=Lambdas}}.
+ {OldIndex,Dict#asm{lambdas={OldIndex+1,Lambdas}}}.
%% Returns the index for a literal (adding it to the literal table if necessary).
%% literal(Literal, Dict) -> {Index,Dict'}
@@ -236,13 +235,13 @@ string_table(#asm{strings=Strings,string_offset=Size}) ->
-spec lambda_table(bdict()) -> {non_neg_integer(), [<<_:192>>]}.
-lambda_table(#asm{locals=Loc0,lambdas=Lambdas0}) ->
+lambda_table(#asm{locals=Loc0,lambdas={NumLambdas,Lambdas0}}) ->
Lambdas1 = sofs:relation(Lambdas0),
Loc = sofs:relation([{Lbl,{F,A}} || {F,A,Lbl} <- Loc0]),
Lambdas2 = sofs:relative_product1(Lambdas1, Loc),
Lambdas = [<<F:32,A:32,Lbl:32,Index:32,NumFree:32,OldUniq:32>> ||
{{_,Lbl,Index,NumFree,OldUniq},{F,A}} <- sofs:to_external(Lambdas2)],
- {length(Lambdas),Lambdas}.
+ {NumLambdas,Lambdas}.
%% Returns the literal table.
%% literal_table(Dict) -> {NumLiterals, [<<TermSize>>,TermInExternalFormat]}
diff --git a/lib/compiler/src/beam_disasm.erl b/lib/compiler/src/beam_disasm.erl
index 84a94f09e3..c699672db1 100644
--- a/lib/compiler/src/beam_disasm.erl
+++ b/lib/compiler/src/beam_disasm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -314,10 +314,7 @@ get_funs({LsR0,[{func_info,[{atom,M}=AtomM,{atom,F}=AtomF,ArityArg]}|Code0]})
when is_atom(M), is_atom(F) ->
Arity = resolve_arg_unsigned(ArityArg),
{LsR,Code,RestCode} = get_fun(Code0, []),
- Entry = case Code of
- [{label,[{u,E}]}|_] -> E;
- _ -> undefined
- end,
+ [{label,[{u,Entry}]}|_] = Code,
[#function{name=F,
arity=Arity,
entry=Entry,
diff --git a/lib/compiler/src/beam_disasm.hrl b/lib/compiler/src/beam_disasm.hrl
index 30e3f22665..d968cd9587 100644
--- a/lib/compiler/src/beam_disasm.hrl
+++ b/lib/compiler/src/beam_disasm.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,9 @@
%% the system (e.g. in the translation from Beam to Icode).
%%
-%% XXX: THE FOLLOWING TYPE DECLARATION DOES NOT BELONG HERE...
+%% XXX: THE FOLLOWING TYPE DECLARATION DOES NOT BELONG HERE.
+%% IT SHOULD BE MOVED TO A FILE THAT DEFINES (AND EXPORTS)
+%% PROPER TYPES FOR THE SET OF BEAM INSTRUCTIONS.
%%
-type beam_instr() :: 'bs_init_writable' | 'fclearerror' | 'if_end'
| 'remove_message' | 'return' | 'send' | 'timeout'
@@ -34,7 +36,7 @@
-record(function, {name :: atom(),
arity :: byte(),
- entry, %% unused ??
+ entry :: beam_lib:label(), %% unnecessary ?
code = [] :: [beam_instr()]}).
-record(beam_file, {module :: module(),
diff --git a/lib/compiler/src/beam_except.erl b/lib/compiler/src/beam_except.erl
index e33655281f..4a181c1923 100644
--- a/lib/compiler/src/beam_except.erl
+++ b/lib/compiler/src/beam_except.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -133,10 +133,12 @@ translate_exception(_, _, _, _) -> no.
fix_block(Is, 0) ->
reverse(Is);
fix_block(Is, Words) ->
- fix_block_1(reverse(Is), Words).
+ reverse(fix_block_1(Is, Words)).
-fix_block_1([{set,[],[],{alloc,Live,{F1,F2,Needed,F3}}}|Is], Words) ->
- [{set,[],[],{alloc,Live,{F1,F2,Needed-Words,F3}}}|Is];
+fix_block_1([{set,[],[],{alloc,Live,{F1,F2,Needed0,F3}}}|Is], Words) ->
+ Needed = Needed0 - Words,
+ true = Needed >= 0, %Assertion.
+ [{set,[],[],{alloc,Live,{F1,F2,Needed,F3}}}|Is];
fix_block_1([I|Is], Words) ->
[I|fix_block_1(Is, Words)].
diff --git a/lib/compiler/src/beam_flatten.erl b/lib/compiler/src/beam_flatten.erl
index 13c243b155..36369bd0b4 100644
--- a/lib/compiler/src/beam_flatten.erl
+++ b/lib/compiler/src/beam_flatten.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl
index 5e58e0f6ac..09cd3aa2d4 100644
--- a/lib/compiler/src/beam_jump.erl
+++ b/lib/compiler/src/beam_jump.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -266,17 +266,17 @@ extract_seq_1(_, _) -> no.
%%% (3) (4) (5) (6) Jump and unreachable code optimizations.
%%%
--record(st, {fc, %Label for function class errors.
- entry, %Entry label (must not be moved).
- mlbl, %Moved labels.
- labels :: cerl_sets:set() %Set of referenced labels.
- }).
+-record(st,
+ {
+ entry, %Entry label (must not be moved).
+ mlbl, %Moved labels.
+ labels :: cerl_sets:set() %Set of referenced labels.
+ }).
-opt([{label,Fc}|_]=Is0, CLabel) ->
- Lbls = initial_labels(Is0),
+opt(Is0, CLabel) ->
find_fixpoint(fun(Is) ->
- St = #st{fc=Fc,entry=CLabel,mlbl=#{},
- labels=Lbls},
+ Lbls = initial_labels(Is),
+ St = #st{entry=CLabel,mlbl=#{},labels=Lbls},
opt(Is, [], St)
end, Is0).
@@ -327,7 +327,8 @@ opt([{label,Lbl}=I|Is], Acc, #st{mlbl=Mlbl}=St0) ->
%% since we will rescan the inserted labels. We MUST rescan.
St = St0#st{mlbl=maps:remove(Lbl, Mlbl)},
insert_labels([Lbl|Lbls], Is, Acc, St);
- error -> opt(Is, [I|Acc], St0)
+ error ->
+ opt(Is, [I|Acc], St0)
end;
opt([{jump,{f,_}=X}|[{label,_},{jump,X}|_]=Is], Acc, St) ->
opt(Is, Acc, St);
@@ -362,12 +363,19 @@ opt([I|Is], Acc, #st{labels=Used0}=St0) ->
true -> skip_unreachable(Is, [I|Acc], St);
false -> opt(Is, [I|Acc], St)
end;
-opt([], Acc, #st{fc=Fc,mlbl=Mlbl}) ->
+opt([], Acc, #st{mlbl=Mlbl}) ->
Code = reverse(Acc),
- case maps:find(Fc, Mlbl) of
- {ok,Lbls} -> insert_fc_labels(Lbls, Mlbl, Code);
- error -> Code
- end.
+ insert_fc_labels(Code, Mlbl).
+
+insert_fc_labels([{label,L}=I|Is0], Mlbl) ->
+ case maps:find(L, Mlbl) of
+ error ->
+ [I|insert_fc_labels(Is0, Mlbl)];
+ {ok,Lbls} ->
+ Is = [{label,Lb} || Lb <- Lbls] ++ Is0,
+ [I|insert_fc_labels(Is, maps:remove(L, Mlbl))]
+ end;
+insert_fc_labels([_|_]=Is, _) -> Is.
maps_append_list(K,Vs,M) ->
case M of
@@ -375,16 +383,6 @@ maps_append_list(K,Vs,M) ->
_ -> M#{K => Vs}
end.
-insert_fc_labels([L|Ls], Mlbl, Acc0) ->
- Acc = [{label,L}|Acc0],
- case maps:find(L, Mlbl) of
- error ->
- insert_fc_labels(Ls, Mlbl, Acc);
- {ok,Lbls} ->
- insert_fc_labels(Lbls++Ls, Mlbl, Acc)
- end;
-insert_fc_labels([], _, Acc) -> Acc.
-
collect_labels(Is, #st{entry=Entry}) ->
collect_labels_1(Is, Entry, []).
@@ -495,7 +493,7 @@ is_label_used_in_block({set,_,_,Info}, Lbl) ->
{alloc,_,{gc_bif,_,{f,F}}} -> F =:= Lbl;
{alloc,_,{put_map,_,{f,F}}} -> F =:= Lbl;
{get_map_elements,{f,F}} -> F =:= Lbl;
- {'catch',{f,F}} -> F =:= Lbl;
+ {try_catch,_,{f,F}} -> F =:= Lbl;
{alloc,_,_} -> false;
{put_tuple,_} -> false;
{get_tuple_element,_} -> false;
diff --git a/lib/compiler/src/beam_listing.erl b/lib/compiler/src/beam_listing.erl
index fd5c0a042b..ce566373bb 100644
--- a/lib/compiler/src/beam_listing.erl
+++ b/lib/compiler/src/beam_listing.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/beam_peep.erl b/lib/compiler/src/beam_peep.erl
index 17fd2e502a..c8bef31824 100644
--- a/lib/compiler/src/beam_peep.erl
+++ b/lib/compiler/src/beam_peep.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -65,18 +65,6 @@ function({function,Name,Arity,CLabel,Is0}) ->
%% InEncoding =:= latin1, OutEncoding =:= unicode;
%% InEncoding =:= latin1, OutEncoding =:= utf8 ->
%%
-%% (2) A select_val/4 instruction that only verifies that
-%% its argument is either 'true' or 'false' can be
-%% be replaced with an is_boolean/2 instruction. That is:
-%%
-%% select_val Reg Fail [ true Next false Next ]
-%% Next: ...
-%%
-%% can be rewritten to
-%%
-%% is_boolean Fail Reg
-%% Next: ...
-%%
peep(Is) ->
peep(Is, gb_sets:empty(), []).
@@ -95,12 +83,19 @@ peep([{gc_bif,_,_,_,_,Dst}=I|Is], SeenTests0, Acc) ->
%% Kill all remembered tests that depend on the destination register.
SeenTests = kill_seen(Dst, SeenTests0),
peep(Is, SeenTests, [I|Acc]);
-peep([{test,is_boolean,{f,Fail},Ops}|_]=Is, SeenTests,
- [{test,is_atom,{f,Fail},Ops}|Acc]) ->
- %% The previous is_atom/2 test (with the same failure label) is redundant.
- %% (If is_boolean(Src) is true, is_atom(Src) is also true, so it is
- %% OK to still remember that we have seen is_atom/1.)
- peep(Is, SeenTests, Acc);
+peep([{jump,{f,L}},{label,L}=I|Is], _, Acc) ->
+ %% Sometimes beam_jump has missed this optimization.
+ peep(Is, gb_sets:empty(), [I|Acc]);
+peep([{select,Op,R,F,Vls0}|Is], _, Acc) ->
+ case prune_redundant_values(Vls0, F) of
+ [] ->
+ %% No values left. Must convert to plain jump.
+ I = {jump,F},
+ peep(Is, gb_sets:empty(), [I|Acc]);
+ [_|_]=Vls ->
+ I = {select,Op,R,F,Vls},
+ peep(Is, gb_sets:empty(), [I|Acc])
+ end;
peep([{test,Op,_,Ops}=I|Is], SeenTests0, Acc) ->
case beam_utils:is_pure_test(I) of
false ->
@@ -121,16 +116,6 @@ peep([{test,Op,_,Ops}=I|Is], SeenTests0, Acc) ->
peep(Is, SeenTests, [I|Acc])
end
end;
-peep([{select,select_val,Src,Fail,
- [{atom,false},{f,L},{atom,true},{f,L}]}|
- [{label,L}|_]=Is], SeenTests, Acc) ->
- I = {test,is_boolean,Fail,[Src]},
- peep([I|Is], SeenTests, Acc);
-peep([{select,select_val,Src,Fail,
- [{atom,true},{f,L},{atom,false},{f,L}]}|
- [{label,L}|_]=Is], SeenTests, Acc) ->
- I = {test,is_boolean,Fail,[Src]},
- peep([I|Is], SeenTests, Acc);
peep([I|Is], _, Acc) ->
%% An unknown instruction. Throw away all information we
%% have collected about test instructions.
@@ -155,3 +140,9 @@ kill_seen_1([{_,Ops}=Test|T], Dst) ->
false -> [Test|kill_seen_1(T, Dst)]
end;
kill_seen_1([], _) -> [].
+
+prune_redundant_values([_Val,F|Vls], F) ->
+ prune_redundant_values(Vls, F);
+prune_redundant_values([Val,Lbl|Vls], F) ->
+ [Val,Lbl|prune_redundant_values(Vls, F)];
+prune_redundant_values([], _) -> [].
diff --git a/lib/compiler/src/beam_receive.erl b/lib/compiler/src/beam_receive.erl
index 7276537949..89cafe27ce 100644
--- a/lib/compiler/src/beam_receive.erl
+++ b/lib/compiler/src/beam_receive.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -177,7 +177,8 @@ opt_recv([I|Is], D, R0, L0, Acc) ->
no;
false ->
opt_recv(Is, D, R, L, [I|Acc])
- end.
+ end;
+opt_recv([], _, _, _, _) -> no.
opt_update_regs({block,Bl}, R, L) ->
{opt_update_regs_bl(Bl, R),L};
diff --git a/lib/compiler/src/beam_reorder.erl b/lib/compiler/src/beam_reorder.erl
new file mode 100644
index 0000000000..6a7c033ec6
--- /dev/null
+++ b/lib/compiler/src/beam_reorder.erl
@@ -0,0 +1,148 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(beam_reorder).
+
+-export([module/2]).
+-import(lists, [member/2,reverse/1]).
+
+module({Mod,Exp,Attr,Fs0,Lc}, _Opt) ->
+ Fs = [function(F) || F <- Fs0],
+ {ok,{Mod,Exp,Attr,Fs,Lc}}.
+
+function({function,Name,Arity,CLabel,Is0}) ->
+ try
+ Is = reorder(Is0),
+ {function,Name,Arity,CLabel,Is}
+ catch
+ Class:Error ->
+ Stack = erlang:get_stacktrace(),
+ io:fwrite("Function: ~w/~w\n", [Name,Arity]),
+ erlang:raise(Class, Error, Stack)
+ end.
+
+%% reorder(Instructions0) -> Instructions
+%% Reorder instructions before the beam_block pass, because reordering
+%% will be more cumbersome when the blocks are in place.
+%%
+%% Execution of get_tuple_element instructions can be delayed until
+%% they are actually needed. Consider the sequence:
+%%
+%% get_tuple_element Tuple Pos Dst
+%% test Test Fail Operands
+%%
+%% If Dst is killed at label Fail (and not referenced in Operands),
+%% we can can swap the instructions:
+%%
+%% test Test Fail Operands
+%% get_tuple_element Tuple Pos Dst
+%%
+%% That can be beneficial in two ways: Firstly, if the branch is taken
+%% we have avoided execution of the get_tuple_element instruction.
+%% Secondly, even if the branch is not taken, subsequent optimization
+%% (opt_blocks/1) may be able to change Dst to the final destination
+%% register and eliminate a 'move' instruction.
+
+reorder(Is) ->
+ D = beam_utils:index_labels(Is),
+ reorder_1(Is, D, []).
+
+reorder_1([{Op,_,_}=TryCatch|[I|Is]=Is0], D, Acc)
+ when Op =:= 'catch'; Op =:= 'try' ->
+ %% Don't allow 'try' or 'catch' instructions to split blocks if
+ %% it can be avoided.
+ case is_safe(I) of
+ false ->
+ reorder_1(Is0, D, [TryCatch|Acc]);
+ true ->
+ reorder_1([TryCatch|Is], D, [I|Acc])
+ end;
+reorder_1([{label,L}=I|_], D, Acc) ->
+ Is = beam_utils:code_at(L, D),
+ reorder_1(Is, D, [I|Acc]);
+reorder_1([{test,is_nonempty_list,_,_}=I|Is], D, Acc) ->
+ %% The run-time system may combine the is_nonempty_list test with
+ %% the following get_list instruction.
+ reorder_1(Is, D, [I|Acc]);
+reorder_1([{test,_,_,_}=I,
+ {select,_,_,_,_}=S|Is], D, Acc) ->
+ %% There is nothing to gain by inserting a get_tuple_element
+ %% instruction between the test instruction and the select
+ %% instruction.
+ reorder_1(Is, D, [S,I|Acc]);
+reorder_1([{test,_,{f,_},[Src|_]}=I|Is], D,
+ [{get_tuple_element,Src,_,_}|_]=Acc) ->
+ %% We want to avoid code that can confuse beam_validator such as:
+ %% is_tuple Fail Src
+ %% test_arity Fail Src Arity
+ %% is_map Fail Src
+ %% get_tuple_element Src Pos Dst
+ %% Therefore, don't reorder the instructions in such cases.
+ reorder_1(Is, D, [I|Acc]);
+reorder_1([{test,_,{f,L},Ss}=I|Is0], D0,
+ [{get_tuple_element,_,_,El}=G|Acc0]=Acc) ->
+ case member(El, Ss) of
+ true ->
+ reorder_1(Is0, D0, [I|Acc]);
+ false ->
+ case beam_utils:is_killed_at(El, L, D0) of
+ true ->
+ Is = [I,G|Is0],
+ reorder_1(Is, D0, Acc0);
+ false ->
+ case beam_utils:is_killed(El, Is0, D0) of
+ true ->
+ Code0 = beam_utils:code_at(L, D0),
+ Code = [G|Code0],
+ D = beam_utils:index_label(L, Code, D0),
+ Is = [I|Is0],
+ reorder_1(Is, D, Acc0);
+ false ->
+ reorder_1(Is0, D0, [I|Acc])
+ end
+ end
+ end;
+reorder_1([{allocate_zero,N,Live}=I0|Is], D,
+ [{get_tuple_element,{x,Tup},_,{x,Dst}}=G|Acc]=Acc0) ->
+ case Tup < Dst andalso Dst+1 =:= Live of
+ true ->
+ %% Move allocation instruction upwards past
+ %% get_tuple_element instructions to create more
+ %% opportunities for moving get_tuple_element
+ %% instructions.
+ I = {allocate_zero,N,Dst},
+ reorder_1([I,G|Is], D, Acc);
+ false ->
+ reorder_1(Is, D, [I0|Acc0])
+ end;
+reorder_1([I|Is], D, Acc) ->
+ reorder_1(Is, D, [I|Acc]);
+reorder_1([], _, Acc) -> reverse(Acc).
+
+%% is_safe(Instruction) -> true|false
+%% Test whether an instruction is safe (cannot cause an exception).
+
+is_safe({kill,_}) -> true;
+is_safe({move,_,_}) -> true;
+is_safe({put,_}) -> true;
+is_safe({put_list,_,_,_}) -> true;
+is_safe({put_tuple,_,_}) -> true;
+is_safe({test_heap,_,_}) -> true;
+is_safe(_) -> false.
diff --git a/lib/compiler/src/beam_split.erl b/lib/compiler/src/beam_split.erl
index 3be9311080..c83c686953 100644
--- a/lib/compiler/src/beam_split.erl
+++ b/lib/compiler/src/beam_split.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,6 +47,8 @@ split_block([{set,[R],[_,_,_]=As,{bif,is_record,{f,Lbl}}}|Is], Bl, Acc) ->
split_block(Is, [], [{bif,is_record,{f,Lbl},As,R}|make_block(Bl, Acc)]);
split_block([{set,[R],As,{bif,N,{f,Lbl}=Fail}}|Is], Bl, Acc) when Lbl =/= 0 ->
split_block(Is, [], [{bif,N,Fail,As,R}|make_block(Bl, Acc)]);
+split_block([{set,[R],As,{bif,raise,{f,_}=Fail}}|Is], Bl, Acc) ->
+ split_block(Is, [], [{bif,raise,Fail,As,R}|make_block(Bl, Acc)]);
split_block([{set,[R],As,{alloc,Live,{gc_bif,N,{f,Lbl}=Fail}}}|Is], Bl, Acc)
when Lbl =/= 0 ->
split_block(Is, [], [{gc_bif,N,Fail,Live,As,R}|make_block(Bl, Acc)]);
@@ -57,8 +59,8 @@ split_block([{set,[D],[S|Puts],{alloc,R,{put_map,Op,{f,Lbl}=Fail}}}|Is],
split_block([{set,Ds,[S|Ss],{get_map_elements,Fail}}|Is], Bl, Acc) ->
Gets = beam_utils:join_even(Ss,Ds),
split_block(Is, [], [{get_map_elements,Fail,S,{list,Gets}}|make_block(Bl, Acc)]);
-split_block([{set,[R],[],{'catch',L}}|Is], Bl, Acc) ->
- split_block(Is, [], [{'catch',R,L}|make_block(Bl, Acc)]);
+split_block([{set,[R],[],{try_catch,Op,L}}|Is], Bl, Acc) ->
+ split_block(Is, [], [{Op,R,L}|make_block(Bl, Acc)]);
split_block([{set,[],[],{line,_}=Line}|Is], Bl, Acc) ->
split_block(Is, [], [Line|make_block(Bl, Acc)]);
split_block([I|Is], Bl, Acc) ->
diff --git a/lib/compiler/src/beam_trim.erl b/lib/compiler/src/beam_trim.erl
index 509e013b62..a8dc6805bc 100644
--- a/lib/compiler/src/beam_trim.erl
+++ b/lib/compiler/src/beam_trim.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/beam_type.erl b/lib/compiler/src/beam_type.erl
index 5298589f83..acaf3ede66 100644
--- a/lib/compiler/src/beam_type.erl
+++ b/lib/compiler/src/beam_type.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,8 @@
-export([module/2]).
--import(lists, [foldl/3,reverse/1,filter/2]).
+-import(lists, [filter/2,foldl/3,keyfind/3,member/2,
+ reverse/1,reverse/2,sort/1]).
module({Mod,Exp,Attr,Fs0,Lc}, _Opts) ->
Fs = [function(F) || F <- Fs0],
@@ -92,8 +93,19 @@ simplify_basic_1([{set,[D],[TupleReg],{get_tuple_element,0}}=I|Is0], Ts0, Acc) -
Ts = update(I, Ts0),
simplify_basic_1(Is0, Ts, [I|Acc])
end;
-simplify_basic_1([{set,_,_,{'catch',_}}=I|Is], _Ts, Acc) ->
+simplify_basic_1([{set,_,_,{try_catch,_,_}}=I|Is], _Ts, Acc) ->
simplify_basic_1(Is, tdb_new(), [I|Acc]);
+simplify_basic_1([{test,is_atom,_,[R]}=I|Is], Ts, Acc) ->
+ case tdb_find(R, Ts) of
+ boolean -> simplify_basic_1(Is, Ts, Acc);
+ _ -> simplify_basic_1(Is, Ts, [I|Acc])
+ end;
+simplify_basic_1([{test,is_integer,_,[R]}=I|Is], Ts, Acc) ->
+ case tdb_find(R, Ts) of
+ integer -> simplify_basic_1(Is, Ts, Acc);
+ {integer,_} -> simplify_basic_1(Is, Ts, Acc);
+ _ -> simplify_basic_1(Is, Ts, [I|Acc])
+ end;
simplify_basic_1([{test,is_tuple,_,[R]}=I|Is], Ts, Acc) ->
case tdb_find(R, Ts) of
{tuple,_,_} -> simplify_basic_1(Is, Ts, Acc);
@@ -137,6 +149,16 @@ simplify_basic_1([{test,is_record,_,[R,{atom,_}=Tag,{integer,Arity}]}=I|Is], Ts0
Ts = update(I, Ts0),
simplify_basic_1(Is, Ts, [I|Acc])
end;
+simplify_basic_1([{select,select_val,Reg,_,_}=I0|Is], Ts, Acc) ->
+ I = case tdb_find(Reg, Ts) of
+ {integer,Range} ->
+ simplify_select_val_int(I0, Range);
+ boolean ->
+ simplify_select_val_bool(I0);
+ _ ->
+ I0
+ end,
+ simplify_basic_1(Is, tdb_new(), [I|Acc]);
simplify_basic_1([I|Is], Ts0, Acc) ->
Ts = update(I, Ts0),
simplify_basic_1(Is, Ts, [I|Acc]);
@@ -144,6 +166,32 @@ simplify_basic_1([], Ts, Acc) ->
Is = reverse(Acc),
{Is,Ts}.
+simplify_select_val_int({select,select_val,R,_,L0}=I, {Min,Max}) ->
+ Vs = sort([V || {integer,V} <- L0]),
+ case eq_ranges(Vs, Min, Max) of
+ false -> I;
+ true -> simplify_select_val_1(L0, {integer,Max}, R, [])
+ end.
+
+simplify_select_val_bool({select,select_val,R,_,L}=I) ->
+ Vs = sort([V || {atom,V} <- L]),
+ case Vs of
+ [false,true] ->
+ simplify_select_val_1(L, {atom,false}, R, []);
+ _ ->
+ I
+ end.
+
+simplify_select_val_1([Val,F|T], Val, R, Acc) ->
+ L = reverse(Acc, T),
+ {select,select_val,R,F,L};
+simplify_select_val_1([V,F|T], Val, R, Acc) ->
+ simplify_select_val_1(T, Val, R, [F,V|Acc]).
+
+eq_ranges([H], H, H) -> true;
+eq_ranges([H|T], H, Max) -> eq_ranges(T, H+1, Max);
+eq_ranges(_, _, _) -> false.
+
%% simplify_float([Instruction], TypeDatabase) ->
%% {[Instruction],TypeDatabase'} | not_possible
%% Simplify floating point operations in blocks.
@@ -199,7 +247,7 @@ simplify_float_1([{set,[D0],[A0,B0],{alloc,_,{gc_bif,Op0,{f,0}}}}=I|Is]=Is0,
Ts = tdb_update([{D0,float}], Ts0),
simplify_float_1(Is, Ts, Rs, Acc)
end;
-simplify_float_1([{set,_,_,{'catch',_}}=I|Is]=Is0, _Ts, Rs0, Acc0) ->
+simplify_float_1([{set,_,_,{try_catch,_,_}}=I|Is]=Is0, _Ts, Rs0, Acc0) ->
Acc = flush_all(Rs0, Is0, Acc0),
simplify_float_1(Is, tdb_new(), Rs0, [I|Acc]);
simplify_float_1([{set,_,_,{line,_}}=I|Is], Ts, Rs, Acc) ->
@@ -311,7 +359,7 @@ flt_need_heap_2({set,_,_,{get_tuple_element,_}}, H, Fl) ->
{[],H,Fl};
flt_need_heap_2({set,_,_,get_list}, H, Fl) ->
{[],H,Fl};
-flt_need_heap_2({set,_,_,{'catch',_}}, H, Fl) ->
+flt_need_heap_2({set,_,_,{try_catch,_,_}}, H, Fl) ->
{[],H,Fl};
%% All other instructions should cause the insertion of an allocation
%% instruction if needed.
@@ -382,6 +430,17 @@ update({set,[D],[{integer,I},Reg],{bif,element,_}}, Ts0) ->
tdb_update([{Reg,{tuple,I,[]}},{D,kill}], Ts0);
update({set,[D],[_Index,Reg],{bif,element,_}}, Ts0) ->
tdb_update([{Reg,{tuple,0,[]}},{D,kill}], Ts0);
+update({set,[D],Args,{bif,N,_}}, Ts0) ->
+ Ar = length(Args),
+ BoolOp = erl_internal:new_type_test(N, Ar) orelse
+ erl_internal:comp_op(N, Ar) orelse
+ erl_internal:bool_op(N, Ar),
+ case BoolOp of
+ true ->
+ tdb_update([{D,boolean}], Ts0);
+ false ->
+ tdb_update([{D,kill}], Ts0)
+ end;
update({set,[D],[S],{get_tuple_element,0}}, Ts) ->
tdb_update([{D,{tuple_element,S,0}}], Ts);
update({set,[D],[S],{alloc,_,{gc_bif,float,{f,0}}}}, Ts0) ->
@@ -390,6 +449,13 @@ update({set,[D],[S],{alloc,_,{gc_bif,float,{f,0}}}}, Ts0) ->
true -> tdb_update([{D,float}], Ts0);
false -> Ts0
end;
+update({set,[D],[S1,S2],{alloc,_,{gc_bif,'band',{f,0}}}}, Ts) ->
+ case keyfind(integer, 1, [S1,S2]) of
+ {integer,N} ->
+ update_band(N, D, Ts);
+ false ->
+ tdb_update([{D,integer}], Ts)
+ end;
update({set,[D],[S1,S2],{alloc,_,{gc_bif,'/',{f,0}}}}, Ts0) ->
%% Make sure we reject non-numeric literals.
case possibly_numeric(S1) andalso possibly_numeric(S2) of
@@ -397,15 +463,17 @@ update({set,[D],[S1,S2],{alloc,_,{gc_bif,'/',{f,0}}}}, Ts0) ->
false -> Ts0
end;
update({set,[D],[S1,S2],{alloc,_,{gc_bif,Op,{f,0}}}}, Ts0) ->
- case arith_op(Op) of
- no ->
- tdb_update([{D,kill}], Ts0);
- {yes,_} ->
+ case op_type(Op) of
+ integer ->
+ tdb_update([{D,integer}], Ts0);
+ {float,_} ->
case {tdb_find(S1, Ts0),tdb_find(S2, Ts0)} of
{float,_} -> tdb_update([{D,float}], Ts0);
{_,float} -> tdb_update([{D,float}], Ts0);
{_,_} -> tdb_update([{D,kill}], Ts0)
- end
+ end;
+ unknown ->
+ tdb_update([{D,kill}], Ts0)
end;
update({set,[],_Src,_Op}, Ts0) -> Ts0;
update({set,[D],_Src,_Op}, Ts0) ->
@@ -437,26 +505,72 @@ update({test,is_record,_Fail,[Src,Tag,{integer,Arity}]}, Ts) ->
tdb_update([{Src,{tuple,Arity,[Tag]}}], Ts);
update({test,_Test,_Fail,_Other}, Ts) ->
Ts;
+update({test,bs_get_integer2,_,_,Args,Dst}, Ts) ->
+ tdb_update([{Dst,get_bs_integer_type(Args)}], Ts);
update({call_ext,Ar,{extfunc,math,Math,Ar}}, Ts) ->
case is_math_bif(Math, Ar) of
true -> tdb_update([{{x,0},float}], Ts);
false -> tdb_kill_xregs(Ts)
end;
update({call_ext,3,{extfunc,erlang,setelement,3}}, Ts0) ->
- Op = case tdb_find({x,1}, Ts0) of
- error -> kill;
- Info -> Info
- end,
- Ts1 = tdb_kill_xregs(Ts0),
- tdb_update([{{x,0},Op}], Ts1);
+ Ts = tdb_kill_xregs(Ts0),
+ case tdb_find({x,1}, Ts0) of
+ {tuple,Sz,_}=T0 ->
+ T = case tdb_find({x,0}, Ts0) of
+ {integer,{I,I}} when I > 1 ->
+ %% First element is not changed. The result
+ %% will have the same type.
+ T0;
+ _ ->
+ %% Position is 1 or unknown. May change the
+ %% first element of the tuple.
+ {tuple,Sz,[]}
+ end,
+ tdb_update([{{x,0},T}], Ts);
+ _ ->
+ Ts
+ end;
update({call,_Arity,_Func}, Ts) -> tdb_kill_xregs(Ts);
update({call_ext,_Arity,_Func}, Ts) -> tdb_kill_xregs(Ts);
update({make_fun2,_,_,_,_}, Ts) -> tdb_kill_xregs(Ts);
update({line,_}, Ts) -> Ts;
+update({bs_save2,_,_}, Ts) -> Ts;
+update({bs_restore2,_,_}, Ts) -> Ts;
%% The instruction is unknown. Kill all information.
update(_I, _Ts) -> tdb_new().
+update_band(N, Reg, Ts) ->
+ Type = update_band_1(N, 0),
+ tdb_update([{Reg,Type}], Ts).
+
+update_band_1(N, Bits) when Bits < 64 ->
+ case 1 bsl Bits of
+ P when P =:= N + 1 ->
+ {integer,{0,N}};
+ P when P > N + 1 ->
+ integer;
+ _ ->
+ update_band_1(N, Bits+1)
+ end;
+update_band_1(_, _) ->
+ %% Negative or large positive number. Give up.
+ integer.
+
+get_bs_integer_type([_,{integer,N},U,{field_flags,Fl}])
+ when N*U < 64 ->
+ NumBits = N*U,
+ case member(unsigned, Fl) of
+ true ->
+ {integer,{0,(1 bsl NumBits)-1}};
+ false ->
+ %% Signed integer. Don't bother.
+ integer
+ end;
+get_bs_integer_type(_) ->
+ %% Avoid creating ranges with a huge upper limit.
+ integer.
+
is_math_bif(cos, 1) -> true;
is_math_bif(cosh, 1) -> true;
is_math_bif(sin, 1) -> true;
@@ -545,11 +659,22 @@ load_reg(V, Ts, Rs0, Is0) ->
{Rs,Is}
end.
-arith_op('+') -> {yes,fadd};
-arith_op('-') -> {yes,fsub};
-arith_op('*') -> {yes,fmul};
-arith_op('/') -> {yes,fdiv};
-arith_op(_) -> no.
+arith_op(Op) ->
+ case op_type(Op) of
+ {float,Instr} -> {yes,Instr};
+ _ -> no
+ end.
+
+op_type('+') -> {float,fadd};
+op_type('-') -> {float,fsub};
+op_type('*') -> {float,fmul};
+%% '/' and 'band' are specially handled.
+op_type('bor') -> integer;
+op_type('bxor') -> integer;
+op_type('bsl') -> integer;
+op_type('bsr') -> integer;
+op_type('div') -> integer;
+op_type(_) -> unknown.
flush(Rs, [{set,[_],[],{put_tuple,_}}|_]=Is0, Acc0) ->
Acc = flush_all(Rs, Is0, Acc0),
@@ -618,7 +743,6 @@ checkerror(Is) ->
checkerror_1(Is, Is).
checkerror_1([{set,[],[],fcheckerror}|_], OrigIs) -> OrigIs;
-checkerror_1([{set,[],[],fclearerror}|_], OrigIs) -> OrigIs;
checkerror_1([{set,_,_,{bif,fadd,_}}|_], OrigIs) -> checkerror_2(OrigIs);
checkerror_1([{set,_,_,{bif,fsub,_}}|_], OrigIs) -> checkerror_2(OrigIs);
checkerror_1([{set,_,_,{bif,fmul,_}}|_], OrigIs) -> checkerror_2(OrigIs);
@@ -635,11 +759,14 @@ checkerror_2(OrigIs) -> [{set,[],[],fcheckerror}|OrigIs].
%%%
%%% {tuple,Size,First} means that the corresponding register contains a
%%% tuple with *at least* Size elements. An tuple with unknown
-%%% size is represented as {tuple,0}. First is either [] (meaning that
+%%% size is represented as {tuple,0,[]}. First is either [] (meaning that
%%% the tuple's first element is unknown) or [FirstElement] (the contents
%%% of the first element).
%%%
%%% 'float' means that the register contains a float.
+%%%
+%%% 'integer' or {integer,{Min,Max}} that the register contains an
+%%% integer.
%% tdb_new() -> EmptyDataBase
%% Creates a new, empty type database.
@@ -669,21 +796,45 @@ tdb_copy({Tag,_}=S, D, Ts) when Tag =:= x; Tag =:= y ->
error -> orddict:erase(D, Ts);
Type -> orddict:store(D, Type, Ts)
end;
-tdb_copy(Literal, D, Ts) -> orddict:store(D, Literal, Ts).
+tdb_copy(Literal, D, Ts) ->
+ Type = case Literal of
+ {atom,_} -> Literal;
+ {float,_} -> float;
+ {integer,Int} -> {integer,{Int,Int}};
+ {literal,[_|_]} -> nonempty_list;
+ {literal,#{}} -> map;
+ {literal,Tuple} when tuple_size(Tuple) >= 1 ->
+ Lit = tag_literal(element(1, Tuple)),
+ {tuple,tuple_size(Tuple),[Lit]};
+ _ -> term
+ end,
+ if
+ Type =:= term ->
+ orddict:erase(D, Ts);
+ true ->
+ verify_type(Type),
+ orddict:store(D, Type, Ts)
+ end.
+
+tag_literal(A) when is_atom(A) -> {atom,A};
+tag_literal(F) when is_float(F) -> {float,F};
+tag_literal(I) when is_integer(I) -> {integer,I};
+tag_literal([]) -> nil;
+tag_literal(Lit) -> {literal,Lit}.
%% tdb_update([UpdateOp], Db) -> NewDb
%% UpdateOp = {Register,kill}|{Register,NewInfo}
%% Updates a type database. If a 'kill' operation is given, the type
%% information for that register will be removed from the database.
%% A kill operation takes precedence over other operations for the same
-%% register (i.e. [{{x,0},kill},{{x,0},{tuple,5}}] means that the
+%% register (i.e. [{{x,0},kill},{{x,0},{tuple,5,[]}}] means that the
%% the existing type information, if any, will be discarded, and the
-%% the '{tuple,5}' information ignored.
+%% the '{tuple,5,[]}' information ignored.
%%
%% If NewInfo information is given and there exists information about
%% the register, the old and new type information will be merged.
-%% For instance, {tuple,5} and {tuple,10} will be merged to produce
-%% {tuple,10}.
+%% For instance, {tuple,5,_} and {tuple,10,_} will be merged to produce
+%% {tuple,10,_}.
tdb_update(Uis0, Ts0) ->
Uis1 = filter(fun ({{x,_},_Op}) -> true;
@@ -694,7 +845,8 @@ tdb_update(Uis0, Ts0) ->
tdb_update1([{Key,kill}|Ops], [{K,_Old}|_]=Db) when Key < K ->
tdb_update1(remove_key(Key, Ops), Db);
-tdb_update1([{Key,_New}=New|Ops], [{K,_Old}|_]=Db) when Key < K ->
+tdb_update1([{Key,Type}=New|Ops], [{K,_Old}|_]=Db) when Key < K ->
+ verify_type(Type),
[New|tdb_update1(Ops, Db)];
tdb_update1([{Key,kill}|Ops], [{Key,_}|Db]) ->
tdb_update1(remove_key(Key, Ops), Db);
@@ -704,7 +856,8 @@ tdb_update1([{_,_}|_]=Ops, [Old|Db]) ->
[Old|tdb_update1(Ops, Db)];
tdb_update1([{Key,kill}|Ops], []) ->
tdb_update1(remove_key(Key, Ops), []);
-tdb_update1([{_,_}=New|Ops], []) ->
+tdb_update1([{_,Type}=New|Ops], []) ->
+ verify_type(Type),
[New|tdb_update1(Ops, [])];
tdb_update1([], Db) -> Db.
@@ -729,10 +882,21 @@ merge_type_info({tuple,Sz1,[]}, {tuple,_Sz2,First}=Tuple2) ->
merge_type_info({tuple,Sz1,First}, Tuple2);
merge_type_info({tuple,_Sz1,First}=Tuple1, {tuple,Sz2,_}) ->
merge_type_info(Tuple1, {tuple,Sz2,First});
+merge_type_info(integer, {integer,_}=Int) ->
+ Int;
+merge_type_info({integer,_}=Int, integer) ->
+ Int;
+merge_type_info({integer,{Min1,Max1}}, {integer,{Min2,Max2}}) ->
+ {integer,{max(Min1, Min2),min(Max1, Max2)}};
merge_type_info(NewType, _) ->
verify_type(NewType),
NewType.
+verify_type({atom,_}) -> ok;
+verify_type(boolean) -> ok;
+verify_type(integer) -> ok;
+verify_type({integer,{Min,Max}})
+ when is_integer(Min), is_integer(Max) -> ok;
verify_type(map) -> ok;
verify_type(nonempty_list) -> ok;
verify_type({tuple,Sz,[]}) when is_integer(Sz) -> ok;
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index fbcd5de1bb..a15ecf633e 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,9 +25,8 @@
is_not_used/3,is_not_used_at/3,
empty_label_index/0,index_label/3,index_labels/1,
code_at/2,bif_to_test/3,is_pure_test/1,
- live_opt/1,delete_live_annos/1,combine_heap_needs/2]).
-
--export([join_even/2,split_even/1]).
+ live_opt/1,delete_live_annos/1,combine_heap_needs/2,
+ join_even/2,split_even/1]).
-import(lists, [member/2,sort/1,reverse/1,splitwith/2]).
@@ -67,8 +66,7 @@ is_killed(R, Is, D) ->
St = #live{bl=check_killed_block_fun(),lbl=D,res=gb_trees:empty()},
case check_liveness(R, Is, St) of
{killed,_} -> true;
- {used,_} -> false;
- {unknown,_} -> false
+ {used,_} -> false
end.
%% is_killed_at(Reg, Lbl, State) -> true|false
@@ -78,8 +76,7 @@ is_killed_at(R, Lbl, D) when is_integer(Lbl) ->
St0 = #live{bl=check_killed_block_fun(),lbl=D,res=gb_trees:empty()},
case check_liveness_at(R, Lbl, St0) of
{killed,_} -> true;
- {used,_} -> false;
- {unknown,_} -> false
+ {used,_} -> false
end.
%% is_not_used(Register, [Instruction], State) -> true|false
@@ -93,8 +90,7 @@ is_not_used(R, Is, D) ->
St = #live{bl=fun check_used_block/3,lbl=D,res=gb_trees:empty()},
case check_liveness(R, Is, St) of
{killed,_} -> true;
- {used,_} -> false;
- {unknown,_} -> false
+ {used,_} -> false
end.
%% is_not_used(Register, [Instruction], State) -> true|false
@@ -108,8 +104,7 @@ is_not_used_at(R, Lbl, D) ->
St = #live{bl=fun check_used_block/3,lbl=D,res=gb_trees:empty()},
case check_liveness_at(R, Lbl, St) of
{killed,_} -> true;
- {used,_} -> false;
- {unknown,_} -> false
+ {used,_} -> false
end.
%% index_labels(FunctionIs) -> State
@@ -137,10 +132,7 @@ index_label(Lbl, Is0, Acc) ->
%% Retrieve the code at the given label.
code_at(L, Ll) ->
- case gb_trees:lookup(L, Ll) of
- {value,Code} -> Code;
- none -> none
- end.
+ gb_trees:get(L, Ll).
%% bif_to_test(Bif, [Op], Fail) -> {test,Test,Fail,[Op]}
%% Convert a BIF to a test. Fail if not possible.
@@ -164,10 +156,10 @@ bif_to_test('=<', [A,B], Fail) -> {test,is_ge,Fail,[B,A]};
bif_to_test('>', [A,B], Fail) -> {test,is_lt,Fail,[B,A]};
bif_to_test('<', [_,_]=Ops, Fail) -> {test,is_lt,Fail,Ops};
bif_to_test('>=', [_,_]=Ops, Fail) -> {test,is_ge,Fail,Ops};
-bif_to_test('==', [A,[]], Fail) -> {test,is_nil,Fail,[A]};
+bif_to_test('==', [A,nil], Fail) -> {test,is_nil,Fail,[A]};
bif_to_test('==', [_,_]=Ops, Fail) -> {test,is_eq,Fail,Ops};
bif_to_test('/=', [_,_]=Ops, Fail) -> {test,is_ne,Fail,Ops};
-bif_to_test('=:=', [A,[]], Fail) -> {test,is_nil,Fail,[A]};
+bif_to_test('=:=', [A,nil], Fail) -> {test,is_nil,Fail,[A]};
bif_to_test('=:=', [_,_]=Ops, Fail) -> {test,is_eq_exact,Fail,Ops};
bif_to_test('=/=', [_,_]=Ops, Fail) -> {test,is_ne_exact,Fail,Ops};
bif_to_test(is_record, [_,_,_]=Ops, Fail) -> {test,is_record,Fail,Ops}.
@@ -175,8 +167,7 @@ bif_to_test(is_record, [_,_,_]=Ops, Fail) -> {test,is_record,Fail,Ops}.
%% is_pure_test({test,Op,Fail,Ops}) -> true|false.
%% Return 'true' if the test instruction does not modify any
-%% registers and/or bit syntax matching state, nor modifies
-%% any bit syntax matching state.
+%% registers and/or bit syntax matching state.
%%
is_pure_test({test,is_eq,_,[_,_]}) -> true;
is_pure_test({test,is_ne,_,[_,_]}) -> true;
@@ -188,6 +179,8 @@ is_pure_test({test,is_nil,_,[_]}) -> true;
is_pure_test({test,is_nonempty_list,_,[_]}) -> true;
is_pure_test({test,test_arity,_,[_,_]}) -> true;
is_pure_test({test,has_map_fields,_,[_|_]}) -> true;
+is_pure_test({test,is_bitstr,_,[_]}) -> true;
+is_pure_test({test,is_function2,_,[_,_]}) -> true;
is_pure_test({test,Op,_,Ops}) ->
erl_internal:new_type_test(Op, length(Ops)).
@@ -235,21 +228,28 @@ combine_heap_needs(Words, {alloc,Alloc}) when is_integer(Words) ->
combine_heap_needs(H1, H2) when is_integer(H1), is_integer(H2) ->
H1+H2.
+%% split_even/1
+%% [1,2,3,4,5,6] -> {[1,3,5],[2,4,6]}
+
+split_even(Rs) -> split_even(Rs, [], []).
+
+%% join_even/1
+%% {[1,3,5],[2,4,6]} -> [1,2,3,4,5,6]
+
+join_even([], []) -> [];
+join_even([S|Ss], [D|Ds]) -> [S,D|join_even(Ss, Ds)].
+
%%%
%%% Local functions.
%%%
-%% check_liveness(Reg, [Instruction], {State,BlockCheckFun}) ->
-%% {killed | used | unknown,UpdateState}
-%% Finds out how Reg is used in the instruction sequence. Returns one of:
-%% killed - Reg is assigned a new value or killed by an allocation instruction
-%% used - Reg is used (or possibly referenced by an allocation instruction)
-%% unknown - not possible to determine (perhaps because of an instruction
-%% that we don't recognize)
+%% check_liveness(Reg, [Instruction], #live{}) ->
+%% {killed | used, #live{}}
+%% Find out whether Reg is used or killed in instruction sequence.
+%% 'killed' means that Reg is assigned a new value or killed by an
+%% allocation instruction. 'used' means that Reg is used in some way.
-check_liveness(R, [{set,_,_,_}=I|_], St) ->
- erlang:error(only_allowed_in_blocks, [R,I,St]);
check_liveness(R, [{block,Blk}|Is], #live{bl=BlockCheck}=St0) ->
case BlockCheck(R, Blk, St0) of
{transparent,St} -> check_liveness(R, Is, St);
@@ -325,8 +325,11 @@ check_liveness(R, [{deallocate,_}|Is], St) ->
{y,_} -> {killed,St};
_ -> check_liveness(R, Is, St)
end;
-check_liveness(R, [return|_], St) ->
- check_liveness_live_ret(R, 1, St);
+check_liveness({x,_}=R, [return|_], St) ->
+ case R of
+ {x,0} -> {used,St};
+ {x,_} -> {killed,St}
+ end;
check_liveness(R, [{call,Live,_}|Is], St) ->
case R of
{x,X} when X < Live -> {used,St};
@@ -461,8 +464,9 @@ check_liveness(R, [{loop_rec,{f,_},{x,0}}|_], St) ->
{x,_} ->
{killed,St};
_ ->
- %% y register. Rarely happens. Be very conversative.
- {unknown,St}
+ %% y register. Rarely happens. Be very conversative and
+ %% assume it's used.
+ {used,St}
end;
check_liveness(R, [{loop_rec_end,{f,Fail}}|_], St) ->
check_liveness_at(R, Fail, St);
@@ -484,13 +488,30 @@ check_liveness(R, [{get_map_elements,{f,Fail},S,{list,L}}|Is], St0) ->
Other
end
end;
+check_liveness(R, [{put_map,{f,_},_,Src,_D,Live,{list,_}}|_], St0) ->
+ case R of
+ Src ->
+ {used,St0};
+ {x,X} when X < Live ->
+ {used,St0};
+ {x,_} ->
+ {killed,St0};
+ {y,_} ->
+ %% Conservatively mark it as used.
+ {used,St0}
+ end;
+check_liveness(R, [{test_heap,N,Live}|Is], St) ->
+ I = {block,[{set,[],[],{alloc,Live,{nozero,nostack,N,[]}}}]},
+ check_liveness(R, [I|Is], St);
+check_liveness(R, [{allocate_zero,N,Live}|Is], St) ->
+ I = {block,[{set,[],[],{alloc,Live,{zero,N,0,[]}}}]},
+ check_liveness(R, [I|Is], St);
+check_liveness(R, [{get_list,S,D1,D2}|Is], St) ->
+ I = {block,[{set,[D1,D2],[S],get_list}]},
+ check_liveness(R, [I|Is], St);
check_liveness(_R, Is, St) when is_list(Is) ->
-%% case Is of
-%% [I|_] ->
-%% io:format("~p ~p\n", [_R,I]);
-%% _ -> ok
-%% end,
- {unknown,St}.
+ %% Not implemented. Conservatively assume that the register is used.
+ {used,St}.
check_liveness_everywhere(R, [{f,Lbl}|T], St0) ->
case check_liveness_at(R, Lbl, St0) of
@@ -509,7 +530,7 @@ check_liveness_at(R, Lbl, #live{lbl=Ll,res=ResMemorized}=St0) ->
none ->
{Res,St} = case gb_trees:lookup(Lbl, Ll) of
{value,Is} -> check_liveness(R, Is, St0);
- none -> {unknown,St0}
+ none -> {used,St0}
end,
{Res,St#live{res=gb_trees:insert(Lbl, Res, St#live.res)}}
end.
@@ -517,14 +538,6 @@ check_liveness_at(R, Lbl, #live{lbl=Ll,res=ResMemorized}=St0) ->
check_liveness_ret(R, R, St) -> {used,St};
check_liveness_ret(_, _, St) -> {killed,St}.
-check_liveness_live_ret({x,R}, Live, St) ->
- if
- R < Live -> {used,St};
- true -> {killed,St}
- end;
-check_liveness_live_ret({y,_}, _, St) ->
- {killed,St}.
-
check_liveness_fail(_, _, _, 0, St) ->
{killed,St};
check_liveness_fail(R, Op, Args, Fail, St) ->
@@ -561,9 +574,9 @@ check_killed_block(R, [{set,Ds,Ss,_Op}|Is]) ->
false -> check_killed_block(R, Is)
end
end;
-check_killed_block(R, [{'%live',Live,_}|Is]) ->
+check_killed_block(R, [{'%live',_,Regs}|Is]) ->
case R of
- {x,X} when X >= Live -> killed;
+ {x,X} when (Regs bsr X) band 1 =:= 0 -> killed;
_ -> check_killed_block(R, Is)
end;
check_killed_block(_, []) -> transparent.
@@ -574,8 +587,10 @@ check_killed_block(_, []) -> transparent.
%% killed - Reg is assigned a new value or killed by an allocation instruction
%% transparent - Reg is neither used nor killed
%% used - Reg is explicitly used by an instruction
-%%
-%% (Unknown instructions will cause an exception.)
+%%
+%% '%live' annotations are not allowed.
+%%
+%% (Unknown instructions will cause an exception.)
check_used_block({x,X}=R, [{set,Ds,Ss,{alloc,Live,Op}}|Is], St) ->
if
@@ -584,11 +599,6 @@ check_used_block({x,X}=R, [{set,Ds,Ss,{alloc,Live,Op}}|Is], St) ->
end;
check_used_block(R, [{set,Ds,Ss,Op}|Is], St) ->
check_used_block_1(R, Ss, Ds, Op, Is, St);
-check_used_block(R, [{'%live',Live,_}|Is], St) ->
- case R of
- {x,X} when X >= Live -> {killed,St};
- _ -> check_used_block(R, Is, St)
- end;
check_used_block(_, [], St) -> {transparent,St}.
check_used_block_1(R, Ss, Ds, Op, Is, St0) ->
@@ -619,8 +629,7 @@ is_reg_used_at_1(_, 0, St) ->
is_reg_used_at_1(R, Lbl, St0) ->
case check_liveness_at(R, Lbl, St0) of
{killed,St} -> {false,St};
- {used,St} -> {true,St};
- {unknown,St} -> {true,St}
+ {used,St} -> {true,St}
end.
index_labels_1([{label,Lbl}|Is0], Acc) ->
@@ -736,11 +745,6 @@ live_opt([{select,_,Src,Fail,List}=I|Is], Regs0, D, Acc) ->
Regs1 = x_live([Src], Regs0),
Regs = live_join_labels([Fail|List], D, Regs1),
live_opt(Is, Regs, D, [I|Acc]);
-live_opt([{'try',_,_}=I|Is], Regs, D, Acc) ->
- %% If an exeption happens, all x registers will be killed.
- %% Therefore, we should only base liveness of the code inside
- %% the try.
- live_opt(Is, Regs, D, [I|Acc]);
live_opt([{try_case,_}=I|Is], _, D, Acc) ->
live_opt(Is, live_call(1), D, [I|Acc]);
live_opt([{loop_rec,_Fail,_Dst}=I|Is], _, D, Acc) ->
@@ -840,14 +844,7 @@ x_live([], Regs) -> Regs.
is_live(X, Regs) -> ((Regs bsr X) band 1) =:= 1.
-%% split_even/1
-%% [1,2,3,4,5,6] -> {[1,3,5],[2,4,6]}
-split_even(Rs) -> split_even(Rs,[],[]).
-split_even([],Ss,Ds) -> {reverse(Ss),reverse(Ds)};
-split_even([S,D|Rs],Ss,Ds) ->
- split_even(Rs,[S|Ss],[D|Ds]).
-
-%% join_even/1
-%% {[1,3,5],[2,4,6]} -> [1,2,3,4,5,6]
-join_even([],[]) -> [];
-join_even([S|Ss],[D|Ds]) -> [S,D|join_even(Ss,Ds)].
+split_even([], Ss, Ds) ->
+ {reverse(Ss),reverse(Ds)};
+split_even([S,D|Rs], Ss, Ds) ->
+ split_even(Rs, [S|Ss], [D|Ds]).
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index 6004f1974e..4c0cb6780a 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,15 +31,6 @@
-import(lists, [reverse/1,foldl/3,foreach/2,dropwhile/2]).
--define(MAXREG, 1024).
-
-%%-define(DEBUG, 1).
--ifdef(DEBUG).
--define(DBG_FORMAT(F, D), (io:format((F), (D)))).
--else.
--define(DBG_FORMAT(F, D), ok).
--endif.
-
%% To be called by the compiler.
module({Mod,Exp,Attr,Fs,Lc}=Code, _Opts)
when is_atom(Mod), is_list(Exp), is_list(Attr), is_integer(Lc) ->
@@ -170,29 +161,25 @@ validate_0(Module, [{function,Name,Ar,Entry,Code}|Fs], Ft) ->
% in the module (those that start with bs_start_match2).
}).
--ifdef(DEBUG).
-print_st(#st{x=Xs,y=Ys,numy=NumY,h=H,ct=Ct}) ->
- io:format(" #st{x=~p~n"
- " y=~p~n"
- " numy=~p,h=~p,ct=~w~n",
- [gb_trees:to_list(Xs),gb_trees:to_list(Ys),NumY,H,Ct]).
--endif.
+%% Match context type.
+-record(ms,
+ {id=make_ref() :: reference(), %Unique ID.
+ valid=0 :: non_neg_integer(), %Valid slots
+ slots=0 :: non_neg_integer() %Number of slots
+ }).
validate_1(Is, Name, Arity, Entry, Ft) ->
validate_2(labels(Is), Name, Arity, Entry, Ft).
validate_2({Ls1,[{func_info,{atom,Mod},{atom,Name},Arity}=_F|Is]},
Name, Arity, Entry, Ft) ->
- lists:foreach(fun (_L) -> ?DBG_FORMAT(" ~p.~n", [{label,_L}]) end, Ls1),
- ?DBG_FORMAT(" ~p.~n", [_F]),
validate_3(labels(Is), Name, Arity, Entry, Mod, Ls1, Ft);
validate_2({Ls1,Is}, Name, Arity, _Entry, _Ft) ->
error({{'_',Name,Arity},{first(Is),length(Ls1),illegal_instruction}}).
validate_3({Ls2,Is}, Name, Arity, Entry, Mod, Ls1, Ft) ->
- lists:foreach(fun (_L) -> ?DBG_FORMAT(" ~p.~n", [{label,_L}]) end, Ls2),
Offset = 1 + length(Ls1) + 1 + length(Ls2),
- EntryOK = (Entry =:= undefined) orelse lists:member(Entry, Ls2),
+ EntryOK = lists:member(Entry, Ls2),
if
EntryOK ->
St = init_state(Arity),
@@ -260,7 +247,6 @@ valfun([], MFA, _Offset, #vst{branched=Targets0,labels=Labels0}=Vst) ->
error({MFA,Error})
end;
valfun([I|Is], MFA, Offset, Vst0) ->
- ?DBG_FORMAT(" ~p.\n", [I]),
valfun(Is, MFA, Offset+1,
try
Vst = val_dsetel(I, Vst0),
@@ -278,7 +264,6 @@ valfun_1({label,Lbl}, #vst{current=St0,branched=B,labels=Lbls}=Vst) ->
valfun_1(_I, #vst{current=none}=Vst) ->
%% Ignore instructions after erlang:error/1,2, which
%% the original R10B compiler thought would return.
- ?DBG_FORMAT("Ignoring ~p\n", [_I]),
Vst;
valfun_1({badmatch,Src}, Vst) ->
assert_term(Src, Vst),
@@ -296,7 +281,7 @@ valfun_1({bs_context_to_binary,Ctx}, #vst{current=#st{x=Xs}}=Vst) ->
case Ctx of
{Tag,X} when Tag =:= x; Tag =:= y ->
Type = case gb_trees:lookup(X, Xs) of
- {value,{match_context,_,_}} -> term;
+ {value,#ms{}} -> term;
_ -> get_term_type(Ctx, Vst)
end,
set_type_reg(Type, Ctx, Vst);
@@ -531,6 +516,9 @@ valfun_4({bif,element,{f,Fail},[Pos,Tuple],Dst}, Vst0) ->
TupleType = upgrade_tuple_type({tuple,[get_tuple_size(PosType)]}, TupleType0),
Vst = set_type(TupleType, Tuple, Vst1),
set_type_reg(term, Dst, Vst);
+valfun_4({bif,raise,{f,0},Src,_Dst}, Vst) ->
+ validate_src(Src, Vst),
+ kill_state(Vst);
valfun_4({bif,Op,{f,Fail},Src,Dst}, Vst0) ->
validate_src(Src, Vst0),
Vst = branch_state(Fail, Vst0),
@@ -594,7 +582,7 @@ valfun_4({test,bs_start_match2,{f,Fail},Live,[Ctx,NeedSlots],Ctx}, Vst0) ->
verify_live(Live, Vst0),
Vst1 = prune_x_regs(Live, Vst0),
BranchVst = case CtxType of
- {match_context,_,_} ->
+ #ms{} ->
%% The failure branch will never be taken when Ctx
%% is a match context. Therefore, the type for Ctx
%% at the failure label must not be match_context
@@ -670,8 +658,10 @@ valfun_4({test,is_map,{f,Lbl},[Src]}, Vst0) ->
case Src of
{Tag,_} when Tag =:= x; Tag =:= y ->
set_type_reg(map, Src, Vst);
+ {literal,Map} when is_map(Map) ->
+ Vst;
_ ->
- Vst
+ kill_state(Vst)
end;
valfun_4({test,_Op,{f,Lbl},Src}, Vst) ->
validate_src(Src, Vst),
@@ -847,7 +837,7 @@ kill_state_1(Vst) ->
%% The stackframe must be initialized.
%% The instruction will return to the instruction following the call.
call(Name, Live, #vst{current=St}=Vst) ->
- verify_live(Live, Vst),
+ verify_call_args(Name, Live, Vst),
verify_y_init(Vst),
case return_type(Name, Vst) of
Type when Type =/= exception ->
@@ -859,44 +849,74 @@ call(Name, Live, #vst{current=St}=Vst) ->
%% Tail call.
%% The stackframe must have a known size and be initialized.
%% Does not return to the instruction following the call.
-tail_call(Name, Live, Vst) ->
+tail_call(Name, Live, Vst0) ->
+ verify_y_init(Vst0),
+ Vst = deallocate(Vst0),
verify_call_args(Name, Live, Vst),
- verify_y_init(Vst),
verify_no_ct(Vst),
kill_state(Vst).
verify_call_args(_, 0, #vst{}) ->
ok;
verify_call_args({f,Lbl}, Live, Vst) when is_integer(Live)->
- Verify = fun(R) ->
- case get_move_term_type(R, Vst) of
- {match_context,_,_} ->
- verify_call_match_context(Lbl, Vst);
- _ ->
- ok
- end
- end,
- verify_call_args_1(Live, Verify, Vst);
+ verify_local_call(Lbl, Live, Vst);
verify_call_args(_, Live, Vst) when is_integer(Live)->
- Verify = fun(R) -> get_term_type(R, Vst) end,
- verify_call_args_1(Live, Verify, Vst);
+ verify_call_args_1(Live, Vst);
verify_call_args(_, Live, _) ->
error({bad_number_of_live_regs,Live}).
-verify_call_args_1(0, _, _) -> ok;
-verify_call_args_1(N, Verify, Vst) ->
+verify_call_args_1(0, _) -> ok;
+verify_call_args_1(N, Vst) ->
X = N - 1,
- Verify({x,X}),
- verify_call_args_1(X, Verify, Vst).
+ get_term_type({x,X}, Vst),
+ verify_call_args_1(X, Vst).
+
+verify_local_call(Lbl, Live, Vst) ->
+ case all_ms_in_x_regs(Live, Vst) of
+ [{R,Ctx}] ->
+ %% Verify that there is a suitable bs_start_match2 instruction.
+ verify_call_match_context(Lbl, R, Vst),
+
+ %% Since the callee has consumed the match context,
+ %% there must be no additional copies in Y registers.
+ #ms{id=Id} = Ctx,
+ case ms_in_y_regs(Id, Vst) of
+ [] ->
+ ok;
+ [_|_]=Ys ->
+ error({multiple_match_contexts,[R|Ys]})
+ end;
+ [_,_|_]=Xs0 ->
+ Xs = [R || {R,_} <- Xs0],
+ error({multiple_match_contexts,Xs});
+ [] ->
+ ok
+ end.
-verify_call_match_context(Lbl, #vst{ft=Ft}) ->
+all_ms_in_x_regs(0, _Vst) ->
+ [];
+all_ms_in_x_regs(Live0, Vst) ->
+ Live = Live0 - 1,
+ R = {x,Live},
+ case get_move_term_type(R, Vst) of
+ #ms{}=M ->
+ [{R,M}|all_ms_in_x_regs(Live, Vst)];
+ _ ->
+ all_ms_in_x_regs(Live, Vst)
+ end.
+
+ms_in_y_regs(Id, #vst{current=#st{y=Ys0}}) ->
+ Ys = gb_trees:to_list(Ys0),
+ [Y || {Y,#ms{id=OtherId}} <- Ys, OtherId =:= Id].
+
+verify_call_match_context(Lbl, Ctx, #vst{ft=Ft}) ->
case gb_trees:lookup(Lbl, Ft) of
none ->
error(no_bs_start_match2);
{value,[{test,bs_start_match2,_,_,[Ctx,_],Ctx}|_]} ->
ok;
- {value,[{test,bs_start_match2,_,_,[Bin,_,_],Ctx}|_]} ->
- error({binary_and_context_regs_different,Bin,Ctx})
+ {value,[{test,bs_start_match2,_,_,_,_}=I|_]} ->
+ error({unsuitable_bs_start_match2,I})
end.
allocate(Zero, Stk, Heap, Live, #vst{current=#st{numy=none}=St}=Vst0) ->
@@ -980,9 +1000,9 @@ get_fls(#vst{current=#st{fls=Fls}}) when is_atom(Fls) -> Fls.
init_fregs() -> 0.
-set_freg({fr,Fr}, #vst{current=#st{f=Fregs0}=St}=Vst)
+set_freg({fr,Fr}=Freg, #vst{current=#st{f=Fregs0}=St}=Vst)
when is_integer(Fr), 0 =< Fr ->
- limit_check(Fr),
+ check_limit(Freg),
Bit = 1 bsl Fr,
if
Fregs0 band Bit =:= 0 ->
@@ -995,9 +1015,10 @@ set_freg(Fr, _) -> error({bad_target,Fr}).
assert_freg_set({fr,Fr}=Freg, #vst{current=#st{f=Fregs}})
when is_integer(Fr), 0 =< Fr ->
if
- Fregs band (1 bsl Fr) =/= 0 ->
- limit_check(Fr);
- true -> error({uninitialized_reg,Freg})
+ (Fregs bsr Fr) band 1 =:= 0 ->
+ error({uninitialized_reg,Freg});
+ true ->
+ ok
end;
assert_freg_set(Fr, _) -> error({bad_source,Fr}).
@@ -1027,7 +1048,7 @@ assert_unique_map_keys([_,_|_]=Ls) ->
%%%
bsm_match_state(Slots) ->
- {match_context,0,Slots}.
+ #ms{slots=Slots}.
bsm_validate_context(Reg, Vst) ->
_ = bsm_get_context(Reg, Vst),
@@ -1035,7 +1056,7 @@ bsm_validate_context(Reg, Vst) ->
bsm_get_context({x,X}=Reg, #vst{current=#st{x=Xs}}=_Vst) when is_integer(X) ->
case gb_trees:lookup(X, Xs) of
- {value,{match_context,_,_}=Ctx} -> Ctx;
+ {value,#ms{}=Ctx} -> Ctx;
_ -> error({no_bsm_context,Reg})
end;
bsm_get_context(Reg, _) -> error({bad_source,Reg}).
@@ -1047,8 +1068,8 @@ bsm_save(Reg, {atom,start}, Vst) ->
Vst;
bsm_save(Reg, SavePoint, Vst) ->
case bsm_get_context(Reg, Vst) of
- {match_context,Bits,Slots} when SavePoint < Slots ->
- Ctx = {match_context,Bits bor (1 bsl SavePoint),Slots},
+ #ms{valid=Bits,slots=Slots}=Ctxt0 when SavePoint < Slots ->
+ Ctx = Ctxt0#ms{valid=Bits bor (1 bsl SavePoint),slots=Slots},
set_type_reg(Ctx, Reg, Vst);
_ -> error({illegal_save,SavePoint})
end.
@@ -1060,7 +1081,7 @@ bsm_restore(Reg, {atom,start}, Vst) ->
Vst;
bsm_restore(Reg, SavePoint, Vst) ->
case bsm_get_context(Reg, Vst) of
- {match_context,Bits,Slots} when SavePoint < Slots ->
+ #ms{valid=Bits,slots=Slots} when SavePoint < Slots ->
case Bits band (1 bsl SavePoint) of
0 -> error({illegal_restore,SavePoint,not_set});
_ -> Vst
@@ -1076,16 +1097,16 @@ set_type(Type, {x,_}=Reg, Vst) -> set_type_reg(Type, Reg, Vst);
set_type(Type, {y,_}=Reg, Vst) -> set_type_y(Type, Reg, Vst);
set_type(_, _, #vst{}=Vst) -> Vst.
-set_type_reg(Type, {x,X}, #vst{current=#st{x=Xs}=St}=Vst)
+set_type_reg(Type, {x,X}=Reg, #vst{current=#st{x=Xs}=St}=Vst)
when is_integer(X), 0 =< X ->
- limit_check(X),
+ check_limit(Reg),
Vst#vst{current=St#st{x=gb_trees:enter(X, Type, Xs)}};
set_type_reg(Type, Reg, Vst) ->
set_type_y(Type, Reg, Vst).
set_type_y(Type, {y,Y}=Reg, #vst{current=#st{y=Ys0}=St}=Vst)
when is_integer(Y), 0 =< Y ->
- limit_check(Y),
+ check_limit(Reg),
Ys = case gb_trees:lookup(Y, Ys0) of
none ->
error({invalid_store,Reg,Type});
@@ -1141,7 +1162,7 @@ assert_term(Src, Vst) ->
%% Thus 'exception' is never stored as type descriptor
%% for a register.
%%
-%% {match_context,_,_} A matching context for bit syntax matching. We do allow
+%% #ms{} A match context for bit syntax matching. We do allow
%% it to moved/to from stack, but otherwise it must only
%% be accessed by bit syntax matching instructions.
%%
@@ -1183,12 +1204,17 @@ assert_type(WantedType, Term, Vst) ->
assert_type(Correct, Correct) -> ok;
assert_type(float, {float,_}) -> ok;
assert_type(tuple, {tuple,_}) -> ok;
+assert_type(tuple, {literal,Tuple}) when is_tuple(Tuple) -> ok;
assert_type({tuple_element,I}, {tuple,[Sz]})
when 1 =< I, I =< Sz ->
ok;
assert_type({tuple_element,I}, {tuple,Sz})
when is_integer(Sz), 1 =< I, I =< Sz ->
ok;
+assert_type({tuple_element,I}, {literal,Lit}) when I =< tuple_size(Lit) ->
+ ok;
+assert_type(cons, {literal,[_|_]}) ->
+ ok;
assert_type(Needed, Actual) ->
error({bad_type,{needed,Needed},{actual,Actual}}).
@@ -1243,7 +1269,7 @@ get_term_type(Src, Vst) ->
initialized -> error({unassigned,Src});
{catchtag,_} -> error({catchtag,Src});
{trytag,_} -> error({trytag,Src});
- {match_context,_,_} -> error({match_context,Src});
+ #ms{} -> error({match_context,Src});
Type -> Type
end.
@@ -1395,11 +1421,12 @@ merge_types(bool, {atom,A}) ->
merge_bool(A);
merge_types({atom,A}, bool) ->
merge_bool(A);
-merge_types({match_context,B0,Slots},{match_context,B1,Slots}) ->
- {match_context,B0 bor B1,Slots};
-merge_types({match_context,_,_}=M, _) ->
+merge_types(#ms{id=Id,valid=B0,slots=Slots}=M,
+ #ms{id=Id,valid=B1,slots=Slots}) ->
+ M#ms{valid=B0 bor B1,slots=Slots};
+merge_types(#ms{}=M, _) ->
M;
-merge_types(_, {match_context,_,_}=M) ->
+merge_types(_, #ms{}=M) ->
M;
merge_types(T1, T2) when T1 =/= T2 ->
%% Too different. All we know is that the type is a 'term'.
@@ -1523,7 +1550,6 @@ bif_type(node, [_], _) -> {atom,[]};
bif_type(hd, [_], _) -> term;
bif_type(tl, [_], _) -> term;
bif_type(get, [_], _) -> term;
-bif_type(raise, [_,_], _) -> exception;
bif_type(Bif, _, _) when is_atom(Bif) -> term.
is_bif_safe('/=', 2) -> true;
@@ -1537,6 +1563,7 @@ is_bif_safe('>=', 2) -> true;
is_bif_safe(is_atom, 1) -> true;
is_bif_safe(is_boolean, 1) -> true;
is_bif_safe(is_binary, 1) -> true;
+is_bif_safe(is_bitstring, 1) -> true;
is_bif_safe(is_float, 1) -> true;
is_bif_safe(is_function, 1) -> true;
is_bif_safe(is_integer, 1) -> true;
@@ -1567,8 +1594,12 @@ return_type_1(erlang, setelement, 3, Vst) ->
Tuple = {x,1},
TupleType =
case get_term_type(Tuple, Vst) of
- {tuple,_}=TT -> TT;
- _ -> {tuple,[0]}
+ {tuple,_}=TT ->
+ TT;
+ {literal,Lit} when is_tuple(Lit) ->
+ {tuple,tuple_size(Lit)};
+ _ ->
+ {tuple,[0]}
end,
case get_term_type({x,0}, Vst) of
{integer,[]} -> TupleType;
@@ -1612,17 +1643,19 @@ return_type_math(pow, 2) -> {float,[]};
return_type_math(pi, 0) -> {float,[]};
return_type_math(F, A) when is_atom(F), is_integer(A), A >= 0 -> term.
-limit_check(Num) when is_integer(Num), Num >= ?MAXREG ->
- error(limit);
-limit_check(_) -> ok.
+check_limit({x,X}) when is_integer(X), X < 1023 ->
+ %% Note: x(1023) is reserved for use by the BEAM loader.
+ ok;
+check_limit({y,Y}) when is_integer(Y), Y < 1024 ->
+ ok;
+check_limit({fr,Fr}) when is_integer(Fr), Fr < 1024 ->
+ ok;
+check_limit(_) ->
+ error(limit).
min(A, B) when is_integer(A), is_integer(B), A < B -> A;
min(A, B) when is_integer(A), is_integer(B) -> B.
gb_trees_from_list(L) -> gb_trees:from_orddict(lists:sort(L)).
--ifdef(DEBUG).
-error(Error) -> exit(Error).
--else.
error(Error) -> throw(Error).
--endif.
diff --git a/lib/compiler/src/beam_z.erl b/lib/compiler/src/beam_z.erl
index 8381578b68..6c7f8543c2 100644
--- a/lib/compiler/src/beam_z.erl
+++ b/lib/compiler/src/beam_z.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,6 +24,8 @@
-export([module/2]).
+-import(lists, [dropwhile/2]).
+
module({Mod,Exp,Attr,Fs0,Lc}, _Opt) ->
Fs = [function(F) || F <- Fs0],
{ok,{Mod,Exp,Attr,Fs,Lc}}.
@@ -51,6 +53,16 @@ undo_renames([{call,A,F},return|Is]) ->
[{call_only,A,F}|undo_renames(Is)];
undo_renames([{call_ext,A,F},return|Is]) ->
[{call_ext_only,A,F}|undo_renames(Is)];
+undo_renames([{bif,raise,_,_,_}=I|Is0]) ->
+ %% A minor optimization. Done here because:
+ %% (1) beam_jump may move or share 'raise' instructions, and that
+ %% may confuse beam_validator.
+ %% (2) beam_trim cannot do its optimization if the 'deallocate'
+ %% instruction after 'raise' has been removed.
+ Is = dropwhile(fun({label,_}) -> false;
+ (_) -> true
+ end, Is0),
+ [I|undo_renames(Is)];
undo_renames([I|Is]) ->
[undo_rename(I)|undo_renames(Is)];
undo_renames([]) -> [].
diff --git a/lib/compiler/src/cerl.erl b/lib/compiler/src/cerl.erl
index e7a2b8177a..61abae344c 100644
--- a/lib/compiler/src/cerl.erl
+++ b/lib/compiler/src/cerl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -126,6 +126,7 @@
%% keep map exports here for now
c_map_pattern/1,
is_c_map/1,
+ is_c_map_pattern/1,
map_es/1,
map_arg/1,
update_c_map/3,
@@ -134,7 +135,7 @@
ann_c_map_pattern/2,
map_pair_op/1,map_pair_key/1,map_pair_val/1,
update_c_map_pair/4,
- c_map_pair/2,
+ c_map_pair/2, c_map_pair_exact/2,
ann_c_map_pair/4
]).
@@ -1636,6 +1637,11 @@ is_c_map_empty(#c_map{ es=[] }) -> true;
is_c_map_empty(#c_literal{val=M}) when is_map(M),map_size(M) =:= 0 -> true;
is_c_map_empty(_) -> false.
+-spec is_c_map_pattern(c_map()) -> boolean().
+
+is_c_map_pattern(#c_map{is_pat=IsPat}) ->
+ IsPat.
+
-spec ann_c_map([term()], [c_map_pair()]) -> c_map() | c_literal().
ann_c_map(As, Es) ->
@@ -1688,6 +1694,11 @@ map_pair_op(#c_map_pair{op=Op}) -> Op.
c_map_pair(Key,Val) ->
#c_map_pair{op=#c_literal{val=assoc},key=Key,val=Val}.
+-spec c_map_pair_exact(cerl(), cerl()) -> c_map_pair().
+
+c_map_pair_exact(Key,Val) ->
+ #c_map_pair{op=#c_literal{val=exact},key=Key,val=Val}.
+
-spec ann_c_map_pair([term()], cerl(), cerl(), cerl()) ->
c_map_pair().
@@ -1944,7 +1955,7 @@ is_c_var(_) ->
false.
-%% @spec c_fname(Name::atom(), Arity::integer()) -> cerl()
+%% @spec c_fname(Name::atom(), Arity::arity()) -> cerl()
%% @equiv c_var({Name, Arity})
%% @see fname_id/1
%% @see fname_arity/1
@@ -1952,18 +1963,18 @@ is_c_var(_) ->
%% @see ann_c_fname/3
%% @see update_c_fname/3
--spec c_fname(atom(), non_neg_integer()) -> c_var().
+-spec c_fname(atom(), arity()) -> c_var().
c_fname(Atom, Arity) ->
c_var({Atom, Arity}).
-%% @spec ann_c_fname(As::[term()], Name::atom(), Arity::integer()) ->
+%% @spec ann_c_fname(As::[term()], Name::atom(), Arity::arity()) ->
%% cerl()
%% @equiv ann_c_var(As, {Atom, Arity})
%% @see c_fname/2
--spec ann_c_fname([term()], atom(), non_neg_integer()) -> c_var().
+-spec ann_c_fname([term()], atom(), arity()) -> c_var().
ann_c_fname(As, Atom, Arity) ->
ann_c_var(As, {Atom, Arity}).
@@ -1981,13 +1992,13 @@ update_c_fname(#c_var{name = {_, Arity}, anno = As}, Atom) ->
#c_var{name = {Atom, Arity}, anno = As}.
-%% @spec update_c_fname(Old::cerl(), Name::atom(), Arity::integer()) ->
+%% @spec update_c_fname(Old::cerl(), Name::atom(), Arity::arity()) ->
%% cerl()
%% @equiv update_c_var(Old, {Atom, Arity})
%% @see update_c_fname/2
%% @see c_fname/2
--spec update_c_fname(c_var(), atom(), integer()) -> c_var().
+-spec update_c_fname(c_var(), atom(), arity()) -> c_var().
update_c_fname(Node, Atom, Arity) ->
update_c_var(Node, {Atom, Arity}).
@@ -2036,14 +2047,14 @@ fname_id(#c_var{name={A,_}}) ->
A.
-%% @spec fname_arity(cerl()) -> byte()
+%% @spec fname_arity(cerl()) -> arity()
%%
%% @doc Returns the arity part of an abstract function name variable.
%%
%% @see fname_id/1
%% @see c_fname/2
--spec fname_arity(c_var()) -> byte().
+-spec fname_arity(c_var()) -> arity().
fname_arity(#c_var{name={_,N}}) ->
N.
@@ -2489,7 +2500,7 @@ fun_body(Node) ->
Node#c_fun.body.
-%% @spec fun_arity(Node::cerl()) -> integer()
+%% @spec fun_arity(Node::cerl()) -> arity()
%%
%% @doc Returns the number of parameter subtrees of an abstract
%% fun-expression.
@@ -2500,7 +2511,7 @@ fun_body(Node) ->
%% @see c_fun/2
%% @see fun_vars/1
--spec fun_arity(c_fun()) -> non_neg_integer().
+-spec fun_arity(c_fun()) -> arity().
fun_arity(Node) ->
length(fun_vars(Node)).
@@ -3407,7 +3418,7 @@ apply_args(Node) ->
Node#c_apply.args.
-%% @spec apply_arity(Node::cerl()) -> integer()
+%% @spec apply_arity(Node::cerl()) -> arity()
%%
%% @doc Returns the number of argument subtrees of an abstract
%% function application.
@@ -3419,7 +3430,7 @@ apply_args(Node) ->
%% @see c_apply/2
%% @see apply_args/1
--spec apply_arity(c_apply()) -> non_neg_integer().
+-spec apply_arity(c_apply()) -> arity().
apply_arity(Node) ->
length(apply_args(Node)).
@@ -3525,7 +3536,7 @@ call_args(Node) ->
Node#c_call.args.
-%% @spec call_arity(Node::cerl()) -> integer()
+%% @spec call_arity(Node::cerl()) -> arity()
%%
%% @doc Returns the number of argument subtrees of an abstract
%% inter-module call.
@@ -3537,7 +3548,7 @@ call_args(Node) ->
%% @see c_call/3
%% @see call_args/1
--spec call_arity(c_call()) -> non_neg_integer().
+-spec call_arity(c_call()) -> arity().
call_arity(Node) ->
length(call_args(Node)).
@@ -3629,7 +3640,7 @@ primop_args(Node) ->
Node#c_primop.args.
-%% @spec primop_arity(Node::cerl()) -> integer()
+%% @spec primop_arity(Node::cerl()) -> arity()
%%
%% @doc Returns the number of argument subtrees of an abstract
%% primitive operation call.
@@ -3641,7 +3652,7 @@ primop_args(Node) ->
%% @see c_primop/2
%% @see primop_args/1
--spec primop_arity(c_primop()) -> non_neg_integer().
+-spec primop_arity(c_primop()) -> arity().
primop_arity(Node) ->
length(primop_args(Node)).
diff --git a/lib/compiler/src/cerl_clauses.erl b/lib/compiler/src/cerl_clauses.erl
index 4d2f1ebd1b..805095e30c 100644
--- a/lib/compiler/src/cerl_clauses.erl
+++ b/lib/compiler/src/cerl_clauses.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/cerl_inline.erl b/lib/compiler/src/cerl_inline.erl
index cbcacf9e8e..2a8cf2e758 100644
--- a/lib/compiler/src/cerl_inline.erl
+++ b/lib/compiler/src/cerl_inline.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/cerl_trees.erl b/lib/compiler/src/cerl_trees.erl
index 58bb18e34a..b3decbec1f 100644
--- a/lib/compiler/src/cerl_trees.erl
+++ b/lib/compiler/src/cerl_trees.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
-module(cerl_trees).
-export([depth/1, fold/3, free_variables/1, get_label/1, label/1, label/2,
- map/2, mapfold/3, size/1, variables/1]).
+ map/2, mapfold/3, mapfold/4, size/1, variables/1]).
-import(cerl, [alias_pat/1, alias_var/1, ann_c_alias/3, ann_c_apply/3,
ann_c_binary/2, ann_c_bitstr/6, ann_c_call/4,
@@ -61,6 +61,7 @@
map_arg/1, map_es/1,
ann_c_map/3,
update_c_map/3,
+ is_c_map_pattern/1, ann_c_map_pattern/2,
map_pair_key/1,map_pair_val/1,map_pair_op/1,
ann_c_map_pair/4,
update_c_map_pair/4
@@ -340,136 +341,162 @@ fold_pairs(_, S, []) ->
%% starting with the given value <code>Initial</code>, while doing a
%% post-order traversal of the tree, much like <code>fold/3</code>.
%%
+%% This is the same as mapfold/4, with an identity function as the
+%% pre-operation.
+%%
%% @see map/2
%% @see fold/3
+%% @see mapfold/4
-spec mapfold(fun((cerl:cerl(), term()) -> {cerl:cerl(), term()}),
term(), cerl:cerl()) -> {cerl:cerl(), term()}.
mapfold(F, S0, T) ->
+ mapfold(fun(T0, A) -> {T0, A} end, F, S0, T).
+
+
+%% @spec mapfold(Pre, Post, Initial::term(), Tree::cerl()) ->
+%% {cerl(), term()}
+%%
+%% Pre = Post = (cerl(), term()) -> {cerl(), term()}
+%%
+%% @doc Does a combined map/fold operation on the nodes of the
+%% tree. It begins by calling <code>Pre</code> on the tree, using the
+%% <code>Initial</code> value. It then deconstructs the top node of
+%% the returned tree and recurses on the children, using the returned
+%% value as the new initial and carrying the returned values from one
+%% call to the next. Finally it reassembles the top node from the
+%% children, calls <code>Post</code> on it and returns the result.
+
+-spec mapfold(fun((cerl:cerl(), term()) -> {cerl:cerl(), term()}),
+ fun((cerl:cerl(), term()) -> {cerl:cerl(), term()}),
+ term(), cerl:cerl()) -> {cerl:cerl(), term()}.
+
+mapfold(Pre, Post, S00, T0) ->
+ {T, S0} = Pre(T0, S00),
case type(T) of
literal ->
case concrete(T) of
[_ | _] ->
- {T1, S1} = mapfold(F, S0, cons_hd(T)),
- {T2, S2} = mapfold(F, S1, cons_tl(T)),
- F(update_c_cons(T, T1, T2), S2);
+ {T1, S1} = mapfold(Pre, Post, S0, cons_hd(T)),
+ {T2, S2} = mapfold(Pre, Post, S1, cons_tl(T)),
+ Post(update_c_cons(T, T1, T2), S2);
V when tuple_size(V) > 0 ->
- {Ts, S1} = mapfold_list(F, S0, tuple_es(T)),
- F(update_c_tuple(T, Ts), S1);
+ {Ts, S1} = mapfold_list(Pre, Post, S0, tuple_es(T)),
+ Post(update_c_tuple(T, Ts), S1);
_ ->
- F(T, S0)
+ Post(T, S0)
end;
var ->
- F(T, S0);
+ Post(T, S0);
values ->
- {Ts, S1} = mapfold_list(F, S0, values_es(T)),
- F(update_c_values(T, Ts), S1);
+ {Ts, S1} = mapfold_list(Pre, Post, S0, values_es(T)),
+ Post(update_c_values(T, Ts), S1);
cons ->
- {T1, S1} = mapfold(F, S0, cons_hd(T)),
- {T2, S2} = mapfold(F, S1, cons_tl(T)),
- F(update_c_cons_skel(T, T1, T2), S2);
+ {T1, S1} = mapfold(Pre, Post, S0, cons_hd(T)),
+ {T2, S2} = mapfold(Pre, Post, S1, cons_tl(T)),
+ Post(update_c_cons_skel(T, T1, T2), S2);
tuple ->
- {Ts, S1} = mapfold_list(F, S0, tuple_es(T)),
- F(update_c_tuple_skel(T, Ts), S1);
+ {Ts, S1} = mapfold_list(Pre, Post, S0, tuple_es(T)),
+ Post(update_c_tuple_skel(T, Ts), S1);
map ->
- {M , S1} = mapfold(F, S0, map_arg(T)),
- {Ts, S2} = mapfold_list(F, S1, map_es(T)),
- F(update_c_map(T, M, Ts), S2);
+ {M , S1} = mapfold(Pre, Post, S0, map_arg(T)),
+ {Ts, S2} = mapfold_list(Pre, Post, S1, map_es(T)),
+ Post(update_c_map(T, M, Ts), S2);
map_pair ->
- {Op, S1} = mapfold(F, S0, map_pair_op(T)),
- {Key, S2} = mapfold(F, S1, map_pair_key(T)),
- {Val, S3} = mapfold(F, S2, map_pair_val(T)),
- F(update_c_map_pair(T,Op,Key,Val), S3);
+ {Op, S1} = mapfold(Pre, Post, S0, map_pair_op(T)),
+ {Key, S2} = mapfold(Pre, Post, S1, map_pair_key(T)),
+ {Val, S3} = mapfold(Pre, Post, S2, map_pair_val(T)),
+ Post(update_c_map_pair(T,Op,Key,Val), S3);
'let' ->
- {Vs, S1} = mapfold_list(F, S0, let_vars(T)),
- {A, S2} = mapfold(F, S1, let_arg(T)),
- {B, S3} = mapfold(F, S2, let_body(T)),
- F(update_c_let(T, Vs, A, B), S3);
+ {Vs, S1} = mapfold_list(Pre, Post, S0, let_vars(T)),
+ {A, S2} = mapfold(Pre, Post, S1, let_arg(T)),
+ {B, S3} = mapfold(Pre, Post, S2, let_body(T)),
+ Post(update_c_let(T, Vs, A, B), S3);
seq ->
- {A, S1} = mapfold(F, S0, seq_arg(T)),
- {B, S2} = mapfold(F, S1, seq_body(T)),
- F(update_c_seq(T, A, B), S2);
+ {A, S1} = mapfold(Pre, Post, S0, seq_arg(T)),
+ {B, S2} = mapfold(Pre, Post, S1, seq_body(T)),
+ Post(update_c_seq(T, A, B), S2);
apply ->
- {E, S1} = mapfold(F, S0, apply_op(T)),
- {As, S2} = mapfold_list(F, S1, apply_args(T)),
- F(update_c_apply(T, E, As), S2);
+ {E, S1} = mapfold(Pre, Post, S0, apply_op(T)),
+ {As, S2} = mapfold_list(Pre, Post, S1, apply_args(T)),
+ Post(update_c_apply(T, E, As), S2);
call ->
- {M, S1} = mapfold(F, S0, call_module(T)),
- {N, S2} = mapfold(F, S1, call_name(T)),
- {As, S3} = mapfold_list(F, S2, call_args(T)),
- F(update_c_call(T, M, N, As), S3);
+ {M, S1} = mapfold(Pre, Post, S0, call_module(T)),
+ {N, S2} = mapfold(Pre, Post, S1, call_name(T)),
+ {As, S3} = mapfold_list(Pre, Post, S2, call_args(T)),
+ Post(update_c_call(T, M, N, As), S3);
primop ->
- {N, S1} = mapfold(F, S0, primop_name(T)),
- {As, S2} = mapfold_list(F, S1, primop_args(T)),
- F(update_c_primop(T, N, As), S2);
+ {N, S1} = mapfold(Pre, Post, S0, primop_name(T)),
+ {As, S2} = mapfold_list(Pre, Post, S1, primop_args(T)),
+ Post(update_c_primop(T, N, As), S2);
'case' ->
- {A, S1} = mapfold(F, S0, case_arg(T)),
- {Cs, S2} = mapfold_list(F, S1, case_clauses(T)),
- F(update_c_case(T, A, Cs), S2);
+ {A, S1} = mapfold(Pre, Post, S0, case_arg(T)),
+ {Cs, S2} = mapfold_list(Pre, Post, S1, case_clauses(T)),
+ Post(update_c_case(T, A, Cs), S2);
clause ->
- {Ps, S1} = mapfold_list(F, S0, clause_pats(T)),
- {G, S2} = mapfold(F, S1, clause_guard(T)),
- {B, S3} = mapfold(F, S2, clause_body(T)),
- F(update_c_clause(T, Ps, G, B), S3);
+ {Ps, S1} = mapfold_list(Pre, Post, S0, clause_pats(T)),
+ {G, S2} = mapfold(Pre, Post, S1, clause_guard(T)),
+ {B, S3} = mapfold(Pre, Post, S2, clause_body(T)),
+ Post(update_c_clause(T, Ps, G, B), S3);
alias ->
- {V, S1} = mapfold(F, S0, alias_var(T)),
- {P, S2} = mapfold(F, S1, alias_pat(T)),
- F(update_c_alias(T, V, P), S2);
+ {V, S1} = mapfold(Pre, Post, S0, alias_var(T)),
+ {P, S2} = mapfold(Pre, Post, S1, alias_pat(T)),
+ Post(update_c_alias(T, V, P), S2);
'fun' ->
- {Vs, S1} = mapfold_list(F, S0, fun_vars(T)),
- {B, S2} = mapfold(F, S1, fun_body(T)),
- F(update_c_fun(T, Vs, B), S2);
+ {Vs, S1} = mapfold_list(Pre, Post, S0, fun_vars(T)),
+ {B, S2} = mapfold(Pre, Post, S1, fun_body(T)),
+ Post(update_c_fun(T, Vs, B), S2);
'receive' ->
- {Cs, S1} = mapfold_list(F, S0, receive_clauses(T)),
- {E, S2} = mapfold(F, S1, receive_timeout(T)),
- {A, S3} = mapfold(F, S2, receive_action(T)),
- F(update_c_receive(T, Cs, E, A), S3);
+ {Cs, S1} = mapfold_list(Pre, Post, S0, receive_clauses(T)),
+ {E, S2} = mapfold(Pre, Post, S1, receive_timeout(T)),
+ {A, S3} = mapfold(Pre, Post, S2, receive_action(T)),
+ Post(update_c_receive(T, Cs, E, A), S3);
'try' ->
- {E, S1} = mapfold(F, S0, try_arg(T)),
- {Vs, S2} = mapfold_list(F, S1, try_vars(T)),
- {B, S3} = mapfold(F, S2, try_body(T)),
- {Evs, S4} = mapfold_list(F, S3, try_evars(T)),
- {H, S5} = mapfold(F, S4, try_handler(T)),
- F(update_c_try(T, E, Vs, B, Evs, H), S5);
+ {E, S1} = mapfold(Pre, Post, S0, try_arg(T)),
+ {Vs, S2} = mapfold_list(Pre, Post, S1, try_vars(T)),
+ {B, S3} = mapfold(Pre, Post, S2, try_body(T)),
+ {Evs, S4} = mapfold_list(Pre, Post, S3, try_evars(T)),
+ {H, S5} = mapfold(Pre, Post, S4, try_handler(T)),
+ Post(update_c_try(T, E, Vs, B, Evs, H), S5);
'catch' ->
- {B, S1} = mapfold(F, S0, catch_body(T)),
- F(update_c_catch(T, B), S1);
+ {B, S1} = mapfold(Pre, Post, S0, catch_body(T)),
+ Post(update_c_catch(T, B), S1);
binary ->
- {Ds, S1} = mapfold_list(F, S0, binary_segments(T)),
- F(update_c_binary(T, Ds), S1);
+ {Ds, S1} = mapfold_list(Pre, Post, S0, binary_segments(T)),
+ Post(update_c_binary(T, Ds), S1);
bitstr ->
- {Val, S1} = mapfold(F, S0, bitstr_val(T)),
- {Size, S2} = mapfold(F, S1, bitstr_size(T)),
- {Unit, S3} = mapfold(F, S2, bitstr_unit(T)),
- {Type, S4} = mapfold(F, S3, bitstr_type(T)),
- {Flags, S5} = mapfold(F, S4, bitstr_flags(T)),
- F(update_c_bitstr(T, Val, Size, Unit, Type, Flags), S5);
+ {Val, S1} = mapfold(Pre, Post, S0, bitstr_val(T)),
+ {Size, S2} = mapfold(Pre, Post, S1, bitstr_size(T)),
+ {Unit, S3} = mapfold(Pre, Post, S2, bitstr_unit(T)),
+ {Type, S4} = mapfold(Pre, Post, S3, bitstr_type(T)),
+ {Flags, S5} = mapfold(Pre, Post, S4, bitstr_flags(T)),
+ Post(update_c_bitstr(T, Val, Size, Unit, Type, Flags), S5);
letrec ->
- {Ds, S1} = mapfold_pairs(F, S0, letrec_defs(T)),
- {B, S2} = mapfold(F, S1, letrec_body(T)),
- F(update_c_letrec(T, Ds, B), S2);
+ {Ds, S1} = mapfold_pairs(Pre, Post, S0, letrec_defs(T)),
+ {B, S2} = mapfold(Pre, Post, S1, letrec_body(T)),
+ Post(update_c_letrec(T, Ds, B), S2);
module ->
- {N, S1} = mapfold(F, S0, module_name(T)),
- {Es, S2} = mapfold_list(F, S1, module_exports(T)),
- {As, S3} = mapfold_pairs(F, S2, module_attrs(T)),
- {Ds, S4} = mapfold_pairs(F, S3, module_defs(T)),
- F(update_c_module(T, N, Es, As, Ds), S4)
+ {N, S1} = mapfold(Pre, Post, S0, module_name(T)),
+ {Es, S2} = mapfold_list(Pre, Post, S1, module_exports(T)),
+ {As, S3} = mapfold_pairs(Pre, Post, S2, module_attrs(T)),
+ {Ds, S4} = mapfold_pairs(Pre, Post, S3, module_defs(T)),
+ Post(update_c_module(T, N, Es, As, Ds), S4)
end.
-mapfold_list(F, S0, [T | Ts]) ->
- {T1, S1} = mapfold(F, S0, T),
- {Ts1, S2} = mapfold_list(F, S1, Ts),
+mapfold_list(Pre, Post, S0, [T | Ts]) ->
+ {T1, S1} = mapfold(Pre, Post, S0, T),
+ {Ts1, S2} = mapfold_list(Pre, Post, S1, Ts),
{[T1 | Ts1], S2};
-mapfold_list(_, S, []) ->
+mapfold_list(_, _, S, []) ->
{[], S}.
-mapfold_pairs(F, S0, [{T1, T2} | Ps]) ->
- {T3, S1} = mapfold(F, S0, T1),
- {T4, S2} = mapfold(F, S1, T2),
- {Ps1, S3} = mapfold_pairs(F, S2, Ps),
+mapfold_pairs(Pre, Post, S0, [{T1, T2} | Ps]) ->
+ {T3, S1} = mapfold(Pre, Post, S0, T1),
+ {T4, S2} = mapfold(Pre, Post, S1, T2),
+ {Ps1, S3} = mapfold_pairs(Pre, Post, S2, Ps),
{[{T3, T4} | Ps1], S3};
-mapfold_pairs(_, S, []) ->
+mapfold_pairs(_, _, S, []) ->
{[], S}.
@@ -640,8 +667,8 @@ vars_in_list([], _, A) ->
vars_in_defs(Ds, S) ->
vars_in_defs(Ds, S, []).
-vars_in_defs([{_, F} | Ds], S, A) ->
- vars_in_defs(Ds, S, ordsets:union(variables(F, S), A));
+vars_in_defs([{_, Post} | Ds], S, A) ->
+ vars_in_defs(Ds, S, ordsets:union(variables(Post, S), A));
vars_in_defs([], _, A) ->
A.
@@ -703,13 +730,14 @@ label(T, N, Env) ->
%% Constant literals are not labeled.
{T, N};
var ->
- case dict:find(var_name(T), Env) of
- {ok, L} ->
- {As, _} = label_ann(T, L),
- N1 = N;
- error ->
- {As, N1} = label_ann(T, N)
- end,
+ {As, N1} =
+ case dict:find(var_name(T), Env) of
+ {ok, L} ->
+ {A, _} = label_ann(T, L),
+ {A, N};
+ error ->
+ label_ann(T, N)
+ end,
{set_ann(T, As), N1};
values ->
{Ts, N1} = label_list(values_es(T), N, Env),
@@ -725,10 +753,17 @@ label(T, N, Env) ->
{As, N2} = label_ann(T, N1),
{ann_c_tuple_skel(As, Ts), N2};
map ->
- {M, N1} = label(map_arg(T), N, Env),
- {Ts, N2} = label_list(map_es(T), N1, Env),
- {As, N3} = label_ann(T, N2),
- {ann_c_map(As, M, Ts), N3};
+ case is_c_map_pattern(T) of
+ false ->
+ {M, N1} = label(map_arg(T), N, Env),
+ {Ts, N2} = label_list(map_es(T), N1, Env),
+ {As, N3} = label_ann(T, N2),
+ {ann_c_map(As, M, Ts), N3};
+ true ->
+ {Ts, N1} = label_list(map_es(T), N, Env),
+ {As, N2} = label_ann(T, N1),
+ {ann_c_map_pattern(As, Ts), N2}
+ end;
map_pair ->
{Op, N1} = label(map_pair_op(T), N, Env),
{Key, N2} = label(map_pair_key(T), N1, Env),
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index e0a29fe9b1..e951a25e04 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -26,6 +26,7 @@
-export([forms/1,forms/2,noenv_forms/2]).
-export([output_generated/1,noenv_output_generated/1]).
-export([options/0]).
+-export([env_compiler_options/0]).
%% Erlc interface.
-export([compile/3,compile_beam/3,compile_asm/3,compile_core/3]).
@@ -40,6 +41,12 @@
%%----------------------------------------------------------------------
+-type abstract_code() :: [erl_parse:abstract_form()].
+
+%% Internal representations used for 'from_asm' and 'from_beam' compilation can
+%% also be valid, but have no relevant types defined.
+-type forms() :: abstract_code() | cerl:c_module().
+
-type option() :: atom() | {atom(), term()} | {'d', atom(), term()}.
-type err_info() :: {erl_anno:line() | 'none',
@@ -48,6 +55,9 @@
-type warnings() :: [{file:filename(), [err_info()]}].
-type mod_ret() :: {'ok', module()}
| {'ok', module(), cerl:c_module()} %% with option 'to_core'
+ | {'ok', %% with option 'to_pp'
+ module() | [], %% module() if 'to_exp'
+ abstract_code()}
| {'ok', module(), warnings()}.
-type bin_ret() :: {'ok', module(), binary()}
| {'ok', module(), binary(), warnings()}.
@@ -78,7 +88,11 @@ file(File, Opts) when is_list(Opts) ->
file(File, Opt) ->
file(File, [Opt|?DEFAULT_OPTIONS]).
-forms(File) -> forms(File, ?DEFAULT_OPTIONS).
+-spec forms(abstract_code()) -> comp_ret().
+
+forms(Forms) -> forms(Forms, ?DEFAULT_OPTIONS).
+
+-spec forms(forms(), [option()] | option()) -> comp_ret().
forms(Forms, Opts) when is_list(Opts) ->
do_compile({forms,Forms}, [binary|Opts++env_default_opts()]);
@@ -106,6 +120,8 @@ noenv_file(File, Opts) when is_list(Opts) ->
noenv_file(File, Opt) ->
noenv_file(File, [Opt|?DEFAULT_OPTIONS]).
+-spec noenv_forms(forms(), [option()] | option()) -> comp_ret().
+
noenv_forms(Forms, Opts) when is_list(Opts) ->
do_compile({forms,Forms}, [binary|Opts]);
noenv_forms(Forms, Opt) when is_atom(Opt) ->
@@ -120,6 +136,14 @@ noenv_output_generated(Opts) ->
end, Passes).
%%
+%% Retrieve ERL_COMPILER_OPTIONS as a list of terms
+%%
+
+-spec env_compiler_options() -> [term()].
+
+env_compiler_options() -> env_default_opts().
+
+%%
%% Local functions
%%
@@ -216,6 +240,8 @@ format_error({epp,E}) ->
epp:format_error(E);
format_error(write_error) ->
"error writing file";
+format_error({write_error, Error}) ->
+ io_lib:format("error writing file: ~ts", [file:format_error(Error)]);
format_error({rename,From,To,Error}) ->
io_lib:format("failed to rename ~ts to ~ts: ~ts",
[From,To,file:format_error(Error)]);
@@ -671,11 +697,16 @@ asm_passes() ->
%% Assembly level optimisations.
[{delay,
[{pass,beam_a},
+ {iff,da,{listing,"a"}},
{unless,no_postopt,
- [{pass,beam_block},
+ [{unless,no_reorder,{pass,beam_reorder}},
+ {iff,dre,{listing,"reorder"}},
+ {pass,beam_block},
{iff,dblk,{listing,"block"}},
{unless,no_except,{pass,beam_except}},
{iff,dexcept,{listing,"except"}},
+ {unless,no_bs_opt,{pass,beam_bs}},
+ {iff,dbs,{listing,"bs"}},
{unless,no_bopt,{pass,beam_bool}},
{iff,dbool,{listing,"bool"}},
{unless,no_topt,{pass,beam_type}},
@@ -703,6 +734,7 @@ asm_passes() ->
{iff,no_postopt,[{pass,beam_clean}]},
{pass,beam_z},
+ {iff,dz,{listing,"z"}},
{iff,dopt,{listing,"optimize"}},
{iff,'S',{listing,"S"}},
{iff,'to_asm',{done,"S"}}]},
@@ -1180,7 +1212,7 @@ makedep_output(#compile{code=Code,options=Opts,ofile=Ofile}=St) ->
end,
{ok,St}
catch
- exit:_ ->
+ error:_ ->
%% Couldn't write to output Makefile.
Err = {St#compile.ifile,[{none,?MODULE,write_error}]},
{error,St#compile{errors=St#compile.errors++[Err]}}
@@ -1300,27 +1332,18 @@ generate_key(String) when is_list(String) ->
encrypt({des3_cbc=Type,Key,IVec,BlockSize}, Bin0) ->
Bin1 = case byte_size(Bin0) rem BlockSize of
0 -> Bin0;
- N -> list_to_binary([Bin0,random_bytes(BlockSize-N)])
+ N -> list_to_binary([Bin0,crypto:strong_rand_bytes(BlockSize-N)])
end,
Bin = crypto:block_encrypt(Type, Key, IVec, Bin1),
TypeString = atom_to_list(Type),
list_to_binary([0,length(TypeString),TypeString,Bin]).
-random_bytes(N) ->
- _ = random:seed(erlang:time_offset(),
- erlang:monotonic_time(),
- erlang:unique_integer()),
- random_bytes_1(N, []).
-
-random_bytes_1(0, Acc) -> Acc;
-random_bytes_1(N, Acc) -> random_bytes_1(N-1, [random:uniform(255)|Acc]).
-
save_core_code(St) ->
{ok,St#compile{core_code=cerl:from_records(St#compile.code)}}.
beam_asm(#compile{ifile=File,code=Code0,
abstract_code=Abst,mod_options=Opts0}=St) ->
- Source = filename:absname(File),
+ Source = paranoid_absname(File),
Opts1 = lists:map(fun({debug_info_key,_}) -> {debug_info_key,'********'};
(Other) -> Other
end, Opts0),
@@ -1329,6 +1352,16 @@ beam_asm(#compile{ifile=File,code=Code0,
{ok,Code} -> {ok,St#compile{code=Code,abstract_code=[]}}
end.
+paranoid_absname(""=File) ->
+ File;
+paranoid_absname(File) ->
+ case file:get_cwd() of
+ {ok,Cwd} ->
+ filename:absname(File, Cwd);
+ _ ->
+ File
+ end.
+
test_native(#compile{options=Opts}) ->
%% This test is done late, in case some other option has turned off native.
%% 'native' given on the command line can be overridden by
@@ -1452,8 +1485,8 @@ save_binary_1(St) ->
end,
{error,St#compile{errors=St#compile.errors ++ Es}}
end;
- {error,_Error} ->
- Es = [{Tfile,[{none,compile,write_error}]}],
+ {error,Error} ->
+ Es = [{Tfile,[{none,compile,{write_error,Error}}]}],
{error,St#compile{errors=St#compile.errors ++ Es}}
end.
@@ -1601,8 +1634,8 @@ listing(LFun, Ext, St) ->
LFun(Lf, Code),
ok = file:close(Lf),
{ok,St};
- {error,_Error} ->
- Es = [{Lfile,[{none,compile,write_error}]}],
+ {error,Error} ->
+ Es = [{Lfile,[{none,compile,{write_error,Error}}]}],
{error,St#compile{errors=St#compile.errors ++ Es}}
end.
@@ -1612,11 +1645,8 @@ output_encoding(F, #compile{encoding = Encoding}) ->
ok = io:setopts(F, [{encoding, Encoding}]),
ok = io:fwrite(F, <<"%% ~s\n">>, [epp:encoding_to_string(Encoding)]).
-restore_expanded_types("P", Fs) ->
- epp:restore_typed_record_fields(Fs);
restore_expanded_types("E", {M,I,Fs0}) ->
- Fs1 = restore_expand_module(Fs0),
- Fs = epp:restore_typed_record_fields(Fs1),
+ Fs = restore_expand_module(Fs0),
{M,I,Fs};
restore_expanded_types(_Ext, Code) -> Code.
@@ -1628,6 +1658,8 @@ restore_expand_module([{attribute,Line,spec,[Arg]}|Fs]) ->
[{attribute,Line,spec,Arg}|restore_expand_module(Fs)];
restore_expand_module([{attribute,Line,callback,[Arg]}|Fs]) ->
[{attribute,Line,callback,Arg}|restore_expand_module(Fs)];
+restore_expand_module([{attribute,Line,record,[R]}|Fs]) ->
+ [{attribute,Line,record,R}|restore_expand_module(Fs)];
restore_expand_module([F|Fs]) ->
[F|restore_expand_module(Fs)];
restore_expand_module([]) -> [].
@@ -1674,6 +1706,7 @@ help(_) ->
%% Compile entry point for erl_compile.
compile(File0, _OutFile, Options) ->
+ pre_load(),
File = shorten_filename(File0),
case file(File, make_erl_options(Options)) of
{ok,_Mod} -> ok;
@@ -1738,3 +1771,47 @@ make_erl_options(Opts) ->
end,
Options ++ [report_errors, {cwd, Cwd}, {outdir, Outdir}|
[{i, Dir} || Dir <- Includes]] ++ Specific.
+
+pre_load() ->
+ L = [beam_a,
+ beam_asm,
+ beam_block,
+ beam_bool,
+ beam_bs,
+ beam_bsm,
+ beam_clean,
+ beam_dead,
+ beam_dict,
+ beam_except,
+ beam_flatten,
+ beam_jump,
+ beam_opcodes,
+ beam_peep,
+ beam_receive,
+ beam_reorder,
+ beam_split,
+ beam_trim,
+ beam_type,
+ beam_utils,
+ beam_validator,
+ beam_z,
+ cerl,
+ cerl_clauses,
+ cerl_sets,
+ cerl_trees,
+ core_lib,
+ epp,
+ erl_bifs,
+ erl_expand_records,
+ erl_lint,
+ erl_parse,
+ erl_scan,
+ sys_core_dsetel,
+ sys_core_fold,
+ sys_pre_expand,
+ v3_codegen,
+ v3_core,
+ v3_kernel,
+ v3_life],
+ _ = code:ensure_modules_loaded(L),
+ ok.
diff --git a/lib/compiler/src/compiler.app.src b/lib/compiler/src/compiler.app.src
index afb85f4710..1fd7800e85 100644
--- a/lib/compiler/src/compiler.app.src
+++ b/lib/compiler/src/compiler.app.src
@@ -1,7 +1,7 @@
% This is an -*- erlang -*- file.
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@
beam_asm,
beam_block,
beam_bool,
+ beam_bs,
beam_bsm,
beam_clean,
beam_dead,
@@ -37,6 +38,7 @@
beam_opcodes,
beam_peep,
beam_receive,
+ beam_reorder,
beam_split,
beam_trim,
beam_type,
diff --git a/lib/compiler/src/compiler.appup.src b/lib/compiler/src/compiler.appup.src
index 3ada2e933f..e9db37e203 100644
--- a/lib/compiler/src/compiler.appup.src
+++ b/lib/compiler/src/compiler.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/core_lib.erl b/lib/compiler/src/core_lib.erl
index 3abb520485..c1806272bd 100644
--- a/lib/compiler/src/core_lib.erl
+++ b/lib/compiler/src/core_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,52 +21,16 @@
-module(core_lib).
--deprecated({get_anno,1,next_major_release}).
--deprecated({set_anno,2,next_major_release}).
--deprecated({is_literal,1,next_major_release}).
--deprecated({is_literal_list,1,next_major_release}).
--deprecated({literal_value,1,next_major_release}).
-
--export([get_anno/1,set_anno/2]).
--export([is_literal/1,is_literal_list/1]).
--export([literal_value/1]).
-export([make_values/1]).
-export([is_var_used/2]).
-include("core_parse.hrl").
-%%
-%% Generic get/set annotation that should be used only with cerl() structures.
-%%
--spec get_anno(cerl:cerl()) -> term().
-
-get_anno(C) -> cerl:get_ann(C).
-
--spec set_anno(cerl:cerl(), term()) -> cerl:cerl().
-
-set_anno(C, A) -> cerl:set_ann(C, A).
-
--spec is_literal(cerl:cerl()) -> boolean().
-
-is_literal(Cerl) ->
- cerl:is_literal(cerl:fold_literal(Cerl)).
-
--spec is_literal_list([cerl:cerl()]) -> boolean().
-
-is_literal_list(Es) -> lists:all(fun is_literal/1, Es).
-
-%% Return the value of LitExpr.
--spec literal_value(cerl:c_literal() | cerl:c_binary() |
- cerl:c_map() | cerl:c_cons() | cerl:c_tuple()) -> term().
-
-literal_value(Cerl) ->
- cerl:concrete(cerl:fold_literal(Cerl)).
-
%% Make a suitable values structure, expr or values, depending on Expr.
-spec make_values([cerl:cerl()] | cerl:cerl()) -> cerl:cerl().
make_values([E]) -> E;
-make_values([H|_]=Es) -> #c_values{anno=get_anno(H),es=Es};
+make_values([H|_]=Es) -> #c_values{anno=cerl:get_ann(H),es=Es};
make_values([]) -> #c_values{es=[]};
make_values(E) -> E.
diff --git a/lib/compiler/src/core_lint.erl b/lib/compiler/src/core_lint.erl
index cc54f6e411..7d3513c0ba 100644
--- a/lib/compiler/src/core_lint.erl
+++ b/lib/compiler/src/core_lint.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -73,7 +73,7 @@
%% Define the lint state record.
-record(lint, {module :: module(), % Current module
- func :: fa(), % Current function
+ func :: fa() | 'undefined', % Current function
errors = [] :: [error()], % Errors
warnings= [] :: [warning()]}). % Warnings
diff --git a/lib/compiler/src/core_parse.hrl b/lib/compiler/src/core_parse.hrl
index ecf6cc9956..83a6f0179c 100644
--- a/lib/compiler/src/core_parse.hrl
+++ b/lib/compiler/src/core_parse.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/core_parse.yrl b/lib/compiler/src/core_parse.yrl
index 59cfc97ebd..8028aa99bb 100644
--- a/lib/compiler/src/core_parse.yrl
+++ b/lib/compiler/src/core_parse.yrl
@@ -1,7 +1,7 @@
%% -*-Erlang-*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,12 +47,14 @@ receive_expr timeout try_expr
sequence catch_expr
variable clause clause_pattern
-map_expr map_pairs map_pair map_pair_assoc map_pair_exact
+map_expr anno_map_expr map_pairs anno_map_pair map_pair map_pair_assoc map_pair_exact
map_pattern map_pair_patterns map_pair_pattern
-annotation anno_fun anno_expression anno_expressions
+annotation anno_atom anno_fun anno_expression anno_expressions
anno_variable anno_variables anno_pattern anno_patterns
anno_function_name
+anno_literal
+anno_segment anno_segment_pattern
anno_clause anno_clauses.
Terminals
@@ -90,7 +92,7 @@ module_definition ->
module_definition ->
'(' 'module' atom module_export module_attribute module_defs 'end'
'-|' annotation ')' :
- #c_module{anno='$9',name=tok_val('$3'),exports='$4',
+ #c_module{anno='$9',name=#c_literal{val=tok_val('$3')},exports='$4',
attrs='$5',defs='$6'}.
module_export -> '[' ']' : [].
@@ -99,7 +101,7 @@ module_export -> '[' exported_names ']' : '$2'.
exported_names -> exported_name ',' exported_names : ['$1' | '$3'].
exported_names -> exported_name : ['$1'].
-exported_name -> function_name : '$1'.
+exported_name -> anno_function_name : '$1'.
module_attribute -> 'attributes' '[' ']' : [].
module_attribute -> 'attributes' '[' attribute_list ']' : '$3'.
@@ -107,8 +109,16 @@ module_attribute -> 'attributes' '[' attribute_list ']' : '$3'.
attribute_list -> attribute ',' attribute_list : ['$1' | '$3'].
attribute_list -> attribute : ['$1'].
-attribute -> atom '=' literal :
- {#c_literal{val=tok_val('$1')},'$3'}.
+attribute -> anno_atom '=' anno_literal :
+ {'$1','$3'}.
+
+anno_atom -> atom :
+ cerl:c_atom(tok_val('$1')).
+anno_atom -> '(' atom '-|' annotation ')' :
+ cerl:ann_c_atom('$4', tok_val('$2')).
+
+anno_literal -> literal : '$1'.
+anno_literal -> '(' literal '-|' annotation ')' : cerl:set_ann('$2', '$4').
module_defs -> function_definitions : '$1'.
@@ -186,7 +196,9 @@ tuple_pattern -> '{' anno_patterns '}' : c_tuple('$2').
map_pattern -> '~' '{' '}' '~' : c_map_pattern([]).
map_pattern -> '~' '{' map_pair_patterns '}' '~' :
- c_map_pattern(lists:sort('$3')).
+ c_map_pattern('$3').
+map_pattern -> '~' '{' map_pair_patterns '|' anno_map_expr '}' '~' :
+ ann_c_map_pattern('$5', '$3').
map_pair_patterns -> map_pair_pattern : ['$1'].
map_pair_patterns -> map_pair_pattern ',' map_pair_patterns : ['$1' | '$3'].
@@ -194,6 +206,9 @@ map_pair_patterns -> map_pair_pattern ',' map_pair_patterns : ['$1' | '$3'].
map_pair_pattern -> anno_expression ':=' anno_pattern :
#c_map_pair{op=#c_literal{val=exact},
key='$1',val='$3'}.
+map_pair_pattern -> '(' anno_expression ':=' anno_pattern '-|' annotation ')' :
+ #c_map_pair{anno='$6',op=#c_literal{val=exact},
+ key='$2',val='$4'}.
cons_pattern -> '[' anno_pattern tail_pattern :
c_cons('$2', '$3').
@@ -206,8 +221,12 @@ tail_pattern -> ',' anno_pattern tail_pattern :
binary_pattern -> '#' '{' '}' '#' : #c_binary{segments=[]}.
binary_pattern -> '#' '{' segment_patterns '}' '#' : #c_binary{segments='$3'}.
-segment_patterns -> segment_pattern ',' segment_patterns : ['$1' | '$3'].
-segment_patterns -> segment_pattern : ['$1'].
+segment_patterns -> anno_segment_pattern ',' segment_patterns : ['$1' | '$3'].
+segment_patterns -> anno_segment_pattern : ['$1'].
+
+anno_segment_pattern -> segment_pattern : '$1'.
+anno_segment_pattern -> '(' segment_pattern '-|' annotation ')' :
+ cerl:set_ann('$2', '$4').
segment_pattern -> '#' '<' anno_pattern '>' '(' anno_expressions ')':
case '$6' of
@@ -289,11 +308,17 @@ tuple -> '{' anno_expressions '}' : c_tuple('$2').
map_expr -> '~' '{' '}' '~' : c_map([]).
map_expr -> '~' '{' map_pairs '}' '~' : c_map('$3').
-map_expr -> '~' '{' map_pairs '|' variable '}' '~' : ann_c_map([], '$5', '$3').
-map_expr -> '~' '{' map_pairs '|' map_expr '}' '~' : ann_c_map([], '$5', '$3').
+map_expr -> '~' '{' map_pairs '|' anno_variable '}' '~' : ann_c_map([], '$5', '$3').
+map_expr -> '~' '{' map_pairs '|' anno_map_expr '}' '~' : ann_c_map([], '$5', '$3').
-map_pairs -> map_pair : ['$1'].
-map_pairs -> map_pair ',' map_pairs : ['$1' | '$3'].
+anno_map_expr -> map_expr : '$1'.
+anno_map_expr -> '(' map_expr '-|' annotation ')' : cerl:set_ann('$2', '$4').
+
+map_pairs -> anno_map_pair : ['$1'].
+map_pairs -> anno_map_pair ',' map_pairs : ['$1' | '$3'].
+
+anno_map_pair -> map_pair : '$1'.
+anno_map_pair -> '(' map_pair '-|' annotation ')' : cerl:set_ann('$2', '$4').
map_pair -> map_pair_assoc : '$1'.
map_pair -> map_pair_exact : '$1'.
@@ -312,8 +337,11 @@ tail -> ',' anno_expression tail : c_cons('$2', '$3').
binary -> '#' '{' '}' '#' : #c_literal{val = <<>>}.
binary -> '#' '{' segments '}' '#' : make_binary('$3').
-segments -> segment ',' segments : ['$1' | '$3'].
-segments -> segment : ['$1'].
+segments -> anno_segment ',' segments : ['$1' | '$3'].
+segments -> anno_segment : ['$1'].
+
+anno_segment -> segment : '$1'.
+anno_segment -> '(' segment '-|' annotation ')' : cerl:set_ann('$2', '$4').
segment -> '#' '<' anno_expression '>' '(' anno_expressions ')':
case '$6' of
@@ -413,7 +441,8 @@ Erlang code.
-include("core_parse.hrl").
--import(cerl, [ann_c_map/3,c_cons/2,c_map/1,c_map_pattern/1,c_tuple/1]).
+-import(cerl, [ann_c_map/3,ann_c_map_pattern/2,c_cons/2,c_map/1,
+ c_map_pattern/1,c_tuple/1]).
tok_val(T) -> element(3, T).
tok_line(T) -> element(2, T).
diff --git a/lib/compiler/src/core_pp.erl b/lib/compiler/src/core_pp.erl
index c2a6a81d5e..67209d06be 100644
--- a/lib/compiler/src/core_pp.erl
+++ b/lib/compiler/src/core_pp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(core_pp).
--export([format/1]).
+-export([format/1,format_all/1]).
-include("core_parse.hrl").
@@ -33,25 +33,35 @@
%% Prettyprint-formats (naively) an abstract Core Erlang syntax
%% tree.
--record(ctxt, {class = term :: 'clause' | 'def' | 'expr' | 'term',
- indent = 0 :: integer(),
+-record(ctxt, {indent = 0 :: integer(),
item_indent = 2 :: integer(),
body_indent = 4 :: integer(),
- tab_width = 8 :: non_neg_integer(),
- line = 0 :: integer()}).
+ line = 0 :: integer(),
+ clean = true :: boolean()}).
+
+-define(TAB_WIDTH, 8).
-spec format(cerl:cerl()) -> iolist().
format(Node) ->
format(Node, #ctxt{}).
-maybe_anno(Node, Fun, Ctxt) ->
+-spec format_all(cerl:cerl()) -> iolist().
+
+format_all(Node) ->
+ format(Node, #ctxt{clean=false}).
+
+maybe_anno(Node, Fun, #ctxt{clean=false}=Ctxt) ->
As = cerl:get_ann(Node),
- case get_line(As) of
+ maybe_anno(Node, Fun, Ctxt, As);
+maybe_anno(Node, Fun, #ctxt{clean=true}=Ctxt) ->
+ As0 = cerl:get_ann(Node),
+ case get_line(As0) of
none ->
- maybe_anno(Node, Fun, Ctxt, As);
+ maybe_anno(Node, Fun, Ctxt, As0);
Line ->
- if Line > Ctxt#ctxt.line ->
+ As = strip_line(As0),
+ if Line > Ctxt#ctxt.line ->
[io_lib:format("%% Line ~w",[Line]),
nl_indent(Ctxt),
maybe_anno(Node, Fun, Ctxt#ctxt{line = Line}, As)
@@ -61,22 +71,22 @@ maybe_anno(Node, Fun, Ctxt) ->
end
end.
-maybe_anno(Node, Fun, Ctxt, As) ->
- case strip_line(As) of
- [] ->
- Fun(Node, Ctxt);
- List ->
- Ctxt1 = add_indent(Ctxt, 2),
- Ctxt2 = add_indent(Ctxt1, 3),
- ["( ",
- Fun(Node, Ctxt1),
- nl_indent(Ctxt1),
- "-| ",format_anno(List, Ctxt2)," )"
- ]
- end.
+maybe_anno(Node, Fun, Ctxt, []) ->
+ Fun(Node, Ctxt);
+maybe_anno(Node, Fun, Ctxt, List) ->
+ Ctxt1 = add_indent(Ctxt, 2),
+ Ctxt2 = add_indent(Ctxt1, 3),
+ ["( ",
+ Fun(Node, Ctxt1),
+ nl_indent(Ctxt1),
+ "-| ",format_anno(List, Ctxt2)," )"
+ ].
format_anno([_|_]=List, Ctxt) ->
[$[,format_anno_list(List, Ctxt),$]];
+format_anno({file,Name}, _Ctxt) ->
+ %% Optimization: Reduces file size considerably.
+ io_lib:format("{'file',~p}", [Name]);
format_anno(Tuple, Ctxt) when is_tuple(Tuple) ->
[${,format_anno_list(tuple_to_list(Tuple), Ctxt),$}];
format_anno(Val, Ctxt) when is_atom(Val) ->
@@ -121,14 +131,11 @@ format_1(#c_literal{anno=A,val=Bitstring}, Ctxt) when is_bitstring(Bitstring) ->
format_1(#c_binary{anno=A,segments=Segs}, Ctxt);
format_1(#c_literal{anno=A,val=M},Ctxt) when is_map(M) ->
Pairs = maps:to_list(M),
- Op = case Ctxt of
- #ctxt{ class = clause } -> exact;
- _ -> assoc
- end,
- Cpairs = [#c_map_pair{op=#c_literal{val=Op},
+ Op = #c_literal{val=assoc},
+ Cpairs = [#c_map_pair{op=Op,
key=#c_literal{val=K},
val=#c_literal{val=V}} || {K,V} <- Pairs],
- format_1(#c_map{anno=A,arg=#c_literal{val=#{}},es=Cpairs},Ctxt);
+ format_1(#c_map{anno=A,arg=#c_literal{val=#{}},es=Cpairs},Ctxt);
format_1(#c_var{name={I,A}}, _) ->
[core_atom(I),$/,integer_to_list(A)];
format_1(#c_var{name=V}, _) ->
@@ -172,7 +179,8 @@ format_1(#c_tuple{es=Es}, Ctxt) ->
format_hseq(Es, ",", add_indent(Ctxt, 1), fun format/2),
$}
];
-format_1(#c_map{arg=#c_literal{val=M},es=Es}, Ctxt) when is_map(M),map_size(M)=:=0 ->
+format_1(#c_map{arg=#c_literal{anno=[],val=M},es=Es}, Ctxt)
+ when is_map(M), map_size(M) =:= 0 ->
["~{",
format_hseq(Es, ",", add_indent(Ctxt, 1), fun format/2),
"}~"
@@ -195,9 +203,16 @@ format_1(#c_values{es=Es}, Ctxt) ->
format_1(#c_alias{var=V,pat=P}, Ctxt) ->
Txt = [format(V, Ctxt)|" = "],
[Txt|format(P, add_indent(Ctxt, width(Txt, Ctxt)))];
-format_1(#c_let{vars=Vs0,arg=A,body=B}, Ctxt) ->
- Vs = [cerl:set_ann(V, []) || V <- Vs0],
- case is_simple_term(A) of
+format_1(#c_let{anno=Anno0,vars=Vs0,arg=A0,body=B}, #ctxt{clean=Clean}=Ctxt) ->
+ {Vs,A,Anno} = case Clean of
+ false ->
+ {Vs0,A0,Anno0};
+ true ->
+ {[cerl:set_ann(V, []) || V <- Vs0],
+ cerl:set_ann(A0, []),
+ []}
+ end,
+ case is_simple_term(A) andalso Anno =:= [] of
false ->
Ctxt1 = add_indent(Ctxt, Ctxt#ctxt.body_indent),
["let ",
@@ -214,7 +229,7 @@ format_1(#c_let{vars=Vs0,arg=A,body=B}, Ctxt) ->
["let ",
format_values(Vs, add_indent(Ctxt, 4)),
" = ",
- format(cerl:set_ann(A, []), Ctxt1),
+ format(A, Ctxt1),
nl_indent(Ctxt),
"in "
| format(B, add_indent(Ctxt, 4))
@@ -321,35 +336,30 @@ format_1(#c_module{name=N,exports=Es,attrs=As,defs=Ds}, Ctxt) ->
[Mod," [",
format_vseq(Es,
"", ",",
- add_indent(set_class(Ctxt, term), width(Mod, Ctxt)+2),
+ add_indent(Ctxt, width(Mod, Ctxt)+2),
fun format/2),
"]",
nl_indent(Ctxt),
" attributes [",
format_vseq(As,
"", ",",
- add_indent(set_class(Ctxt, def), 16),
+ add_indent(Ctxt, 16),
fun format_def/2),
"]",
nl_indent(Ctxt),
format_funcs(Ds, Ctxt),
nl_indent(Ctxt)
| "end"
- ];
-format_1(Type, _) ->
- ["** Unsupported type: ",
- io_lib:write(Type)
- | " **"
].
format_funcs(Fs, Ctxt) ->
format_vseq(Fs,
"", "",
- set_class(Ctxt, def),
+ Ctxt,
fun format_def/2).
format_def({N,V}, Ctxt0) ->
- Ctxt1 = add_indent(set_class(Ctxt0, expr), Ctxt0#ctxt.body_indent),
+ Ctxt1 = add_indent(Ctxt0, Ctxt0#ctxt.body_indent),
[format(N, Ctxt0),
" =",
nl_indent(Ctxt1)
@@ -362,7 +372,10 @@ format_values(Vs, Ctxt) ->
format_hseq(Vs, ",", add_indent(Ctxt, 1), fun format/2),
$>].
-format_bitstr(#c_bitstr{val=V,size=S,unit=U,type=T,flags=Fs}, Ctxt0) ->
+format_bitstr(Node, Ctxt) ->
+ maybe_anno(Node, fun do_format_bitstr/2, Ctxt).
+
+do_format_bitstr(#c_bitstr{val=V,size=S,unit=U,type=T,flags=Fs}, Ctxt0) ->
Vs = [S, U, T, Fs],
Ctxt1 = add_indent(Ctxt0, 2),
Val = format(V, Ctxt1),
@@ -370,8 +383,7 @@ format_bitstr(#c_bitstr{val=V,size=S,unit=U,type=T,flags=Fs}, Ctxt0) ->
["#<", Val, ">(", format_hseq(Vs,",", Ctxt2, fun format/2), $)].
format_clauses(Cs, Ctxt) ->
- format_vseq(Cs, "", "", set_class(Ctxt, clause),
- fun format_clause/2).
+ format_vseq(Cs, "", "", Ctxt, fun format_clause/2).
format_clause(Node, Ctxt) ->
maybe_anno(Node, fun format_clause_1/2, Ctxt).
@@ -383,15 +395,13 @@ format_clause_1(#c_clause{pats=Ps,guard=G,body=B}, Ctxt) ->
case is_trivial_guard(G) of
true ->
[" when ",
- format_guard(G, add_indent(set_class(Ctxt, expr),
- width(Ptxt, Ctxt) + 6))];
+ format_guard(G, add_indent(Ctxt, width(Ptxt, Ctxt) + 6))];
false ->
[nl_indent(Ctxt2), "when ",
format_guard(G, add_indent(Ctxt2, 2))]
end++
" ->",
- nl_indent(Ctxt2)
- | format(B, set_class(Ctxt2, expr))
+ nl_indent(Ctxt2) | format(B, Ctxt2)
].
is_trivial_guard(#c_literal{val=Val}) when is_atom(Val) -> true;
@@ -445,50 +455,53 @@ format_list_tail(Tail, Ctxt) ->
format_map_pair(Op, K, V, Ctxt0) ->
Ctxt1 = add_indent(Ctxt0, 1),
- Txt = format(K, set_class(Ctxt1, expr)),
+ Txt = format(K, Ctxt1),
Ctxt2 = add_indent(Ctxt0, width(Txt, Ctxt1)),
[Txt,Op,format(V, Ctxt2)].
-indent(Ctxt) -> indent(Ctxt#ctxt.indent, Ctxt).
-
-indent(N, _) when N =< 0 -> "";
-indent(N, Ctxt) ->
- T = Ctxt#ctxt.tab_width,
- string:chars($\t, N div T, string:chars($\s, N rem T)).
+indent(#ctxt{indent=N}) ->
+ if
+ N =< 0 ->
+ "";
+ true ->
+ string:chars($\t, N div ?TAB_WIDTH, spaces(N rem ?TAB_WIDTH))
+ end.
nl_indent(Ctxt) -> [$\n|indent(Ctxt)].
+spaces(0) -> "";
+spaces(1) -> " ";
+spaces(2) -> " ";
+spaces(3) -> " ";
+spaces(4) -> " ";
+spaces(5) -> " ";
+spaces(6) -> " ";
+spaces(7) -> " ".
+%% Undo indentation done by nl_indent/1.
unindent(T, Ctxt) ->
- unindent(T, Ctxt#ctxt.indent, Ctxt, []).
+ unindent(T, Ctxt#ctxt.indent, []).
-unindent(T, N, _, C) when N =< 0 ->
+unindent(T, N, C) when N =< 0 ->
[T|C];
-unindent([$\s|T], N, Ctxt, C) ->
- unindent(T, N - 1, Ctxt, C);
-unindent([$\t|T], N, Ctxt, C) ->
- Tab = Ctxt#ctxt.tab_width,
+unindent([$\s|T], N, C) ->
+ unindent(T, N - 1, C);
+unindent([$\t|T], N, C) ->
+ Tab = ?TAB_WIDTH,
if N >= Tab ->
- unindent(T, N - Tab, Ctxt, C);
+ unindent(T, N - Tab, C);
true ->
- unindent([string:chars($\s, Tab - N)|T], 0, Ctxt, C)
+ unindent([spaces(Tab - N)|T], 0, C)
end;
-unindent([L|T], N, Ctxt, C) when is_list(L) ->
- unindent(L, N, Ctxt, [T|C]);
-unindent([H|T], _, _, C) ->
- [H|[T|C]];
-unindent([], N, Ctxt, [H|T]) ->
- unindent(H, N, Ctxt, T);
-unindent([], _, _, []) -> [].
+unindent([L|T], N, C) when is_list(L) ->
+ unindent(L, N, [T|C]).
width(Txt, Ctxt) ->
- try width(Txt, 0, Ctxt, [])
- catch error:_ -> exit({bad_text,Txt})
- end.
+ width(Txt, 0, Ctxt, []).
width([$\t|T], A, Ctxt, C) ->
- width(T, A + Ctxt#ctxt.tab_width, Ctxt, C);
+ width(T, A + ?TAB_WIDTH, Ctxt, C);
width([$\n|T], _, Ctxt, C) ->
width(unindent([T|C], Ctxt), Ctxt);
width([H|T], A, Ctxt, C) when is_list(H) ->
@@ -502,14 +515,9 @@ width([], A, _, []) -> A.
add_indent(Ctxt, Dx) ->
Ctxt#ctxt{indent = Ctxt#ctxt.indent + Dx}.
-set_class(Ctxt, Class) ->
- Ctxt#ctxt{class = Class}.
-
core_atom(A) -> io_lib:write_string(atom_to_list(A), $').
-is_simple_term(#c_values{es=Es}) ->
- length(Es) < 3 andalso lists:all(fun is_simple_term/1, Es);
is_simple_term(#c_tuple{es=Es}) ->
length(Es) < 4 andalso lists:all(fun is_simple_term/1, Es);
is_simple_term(#c_var{}) -> true;
diff --git a/lib/compiler/src/core_scan.erl b/lib/compiler/src/core_scan.erl
index 5e85bba2bd..11b52f6c5f 100644
--- a/lib/compiler/src/core_scan.erl
+++ b/lib/compiler/src/core_scan.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/erl_bifs.erl b/lib/compiler/src/erl_bifs.erl
index c00f5eab70..6b2d781a76 100644
--- a/lib/compiler/src/erl_bifs.erl
+++ b/lib/compiler/src/erl_bifs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/genop.tab b/lib/compiler/src/genop.tab
index 3a877f2403..dcbdeb32e6 100755
--- a/lib/compiler/src/genop.tab
+++ b/lib/compiler/src/genop.tab
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2011. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/rec_env.erl b/lib/compiler/src/rec_env.erl
index 0e9e12d1ad..cdc513e57c 100644
--- a/lib/compiler/src/rec_env.erl
+++ b/lib/compiler/src/rec_env.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,8 +22,7 @@
%% @doc Abstract environments, supporting self-referential bindings and
%% automatic new-key generation.
-%% The current implementation is based on Erlang standard library
-%% dictionaries.
+%% The current implementation is based on Erlang standard library maps.
%%% -define(DEBUG, true).
@@ -62,7 +61,7 @@ test_0(Type, N) ->
io:fwrite("\ncalls: ~w.\n", [get(new_key_calls)]),
io:fwrite("\nretries: ~w.\n", [get(new_key_retries)]),
io:fwrite("\nmax: ~w.\n", [get(new_key_max)]),
- dict:to_list(element(1,Env)).
+ maps:to_list(element(1,Env)).
test_1(integer = Type, N, Env) when is_integer(N), N > 0 ->
Key = new_key(Env),
@@ -80,14 +79,13 @@ test_1(_,0, Env) ->
%%
%% environment() = [Mapping]
%%
-%% Mapping = {map, Dict} | {rec, Dict, Dict}
-%% Dict = dict:dictionary()
+%% Mapping = {map, map()} | {rec, map(), map()}
%%
-%% An empty environment is a list containing a single `{map, Dict}'
+%% An empty environment is a list containing a single `{map, map()}'
%% element - empty lists are not valid environments. To find a key in an
%% environment, it is searched for in each mapping in the list, in
%% order, until it the key is found in some mapping, or the end of the
-%% list is reached. In a 'rec' mapping, we keep the original dictionary
+%% list is reached. In a 'rec' mapping, we keep the original map
%% together with a version where entries may have been deleted - this
%% makes it possible to garbage collect the entire 'rec' mapping when
%% all its entries are unused (for example, by being shadowed by later
@@ -97,7 +95,7 @@ test_1(_,0, Env) ->
%% =====================================================================
%% @type environment(). An abstract environment.
--type mapping() :: {'map', dict:dict()} | {'rec', dict:dict(), dict:dict()}.
+-type mapping() :: {'map', map()} | {'rec', map(), map()}.
-type environment() :: [mapping(),...].
%% =====================================================================
@@ -108,7 +106,7 @@ test_1(_,0, Env) ->
-spec empty() -> environment().
empty() ->
- [{map, dict:new()}].
+ [{map, #{}}].
%% =====================================================================
@@ -119,14 +117,14 @@ empty() ->
-spec is_empty(environment()) -> boolean().
-is_empty([{map, Dict} | Es]) ->
- N = dict:size(Dict),
+is_empty([{map, Map} | Es]) ->
+ N = map_size(Map),
if N =/= 0 -> false;
Es =:= [] -> true;
true -> is_empty(Es)
end;
-is_empty([{rec, Dict, _} | Es]) ->
- N = dict:size(Dict),
+is_empty([{rec, Map, _} | Es]) ->
+ N = map_size(Map),
if N =/= 0 -> false;
Es =:= [] -> true;
true -> is_empty(Es)
@@ -146,12 +144,12 @@ is_empty([{rec, Dict, _} | Es]) ->
size(Env) ->
env_size(Env).
-env_size([{map, Dict}]) ->
- dict:size(Dict);
-env_size([{map, Dict} | Env]) ->
- dict:size(Dict) + env_size(Env);
-env_size([{rec, Dict, _Dict0} | Env]) ->
- dict:size(Dict) + env_size(Env).
+env_size([{map, Map}]) ->
+ map_size(Map);
+env_size([{map, Map} | Env]) ->
+ map_size(Map) + env_size(Env);
+env_size([{rec, Map, _Map0} | Env]) ->
+ map_size(Map) + env_size(Env).
%% =====================================================================
@@ -165,8 +163,8 @@ env_size([{rec, Dict, _Dict0} | Env]) ->
-spec is_defined(term(), environment()) -> boolean().
-is_defined(Key, [{map, Dict} | Env]) ->
- case dict:is_key(Key, Dict) of
+is_defined(Key, [{map, Map} | Env]) ->
+ case maps:is_key(Key, Map) of
true ->
true;
false when Env =:= [] ->
@@ -174,8 +172,8 @@ is_defined(Key, [{map, Dict} | Env]) ->
false ->
is_defined(Key, Env)
end;
-is_defined(Key, [{rec, Dict, _Dict0} | Env]) ->
- dict:is_key(Key, Dict) orelse is_defined(Key, Env).
+is_defined(Key, [{rec, Map, _Map0} | Env]) ->
+ maps:is_key(Key, Map) orelse is_defined(Key, Env).
%% =====================================================================
@@ -188,12 +186,12 @@ is_defined(Key, [{rec, Dict, _Dict0} | Env]) ->
keys(Env) ->
lists:sort(keys(Env, [])).
-keys([{map, Dict}], S) ->
- dict:fetch_keys(Dict) ++ S;
-keys([{map, Dict} | Env], S) ->
- keys(Env, dict:fetch_keys(Dict) ++ S);
-keys([{rec, Dict, _Dict0} | Env], S) ->
- keys(Env, dict:fetch_keys(Dict) ++ S).
+keys([{map, Map}], S) ->
+ maps:keys(Map) ++ S;
+keys([{map, Map} | Env], S) ->
+ keys(Env, maps:keys(Map) ++ S);
+keys([{rec, Map, _Map0} | Env], S) ->
+ keys(Env, maps:keys(Map) ++ S).
%% =====================================================================
@@ -212,12 +210,12 @@ keys([{rec, Dict, _Dict0} | Env], S) ->
to_list(Env) ->
lists:sort(to_list(Env, [])).
-to_list([{map, Dict}], S) ->
- dict:to_list(Dict) ++ S;
-to_list([{map, Dict} | Env], S) ->
- to_list(Env, dict:to_list(Dict) ++ S);
-to_list([{rec, Dict, _Dict0} | Env], S) ->
- to_list(Env, dict:to_list(Dict) ++ S).
+to_list([{map, Map}], S) ->
+ maps:to_list(Map) ++ S;
+to_list([{map, Map} | Env], S) ->
+ to_list(Env, maps:to_list(Map) ++ S);
+to_list([{rec, Map, _Map0} | Env], S) ->
+ to_list(Env, maps:to_list(Map) ++ S).
%% =====================================================================
@@ -236,12 +234,12 @@ to_list([{rec, Dict, _Dict0} | Env], S) ->
-spec bind(term(), term(), environment()) -> environment().
-bind(Key, Value, [{map, Dict}]) ->
- [{map, dict:store(Key, Value, Dict)}];
-bind(Key, Value, [{map, Dict} | Env]) ->
- [{map, dict:store(Key, Value, Dict)} | delete_any(Key, Env)];
+bind(Key, Value, [{map, Map}]) ->
+ [{map, maps:put(Key, Value, Map)}];
+bind(Key, Value, [{map, Map} | Env]) ->
+ [{map, maps:put(Key, Value, Map)} | delete_any(Key, Env)];
bind(Key, Value, Env) ->
- [{map, dict:store(Key, Value, dict:new())} | delete_any(Key, Env)].
+ [{map, maps:put(Key, Value, #{})} | delete_any(Key, Env)].
%% =====================================================================
@@ -259,17 +257,17 @@ bind(Key, Value, Env) ->
-spec bind_list([term()], [term()], environment()) -> environment().
-bind_list(Ks, Vs, [{map, Dict}]) ->
- [{map, store_list(Ks, Vs, Dict)}];
-bind_list(Ks, Vs, [{map, Dict} | Env]) ->
- [{map, store_list(Ks, Vs, Dict)} | delete_list(Ks, Env)];
+bind_list(Ks, Vs, [{map, Map}]) ->
+ [{map, store_list(Ks, Vs, Map)}];
+bind_list(Ks, Vs, [{map, Map} | Env]) ->
+ [{map, store_list(Ks, Vs, Map)} | delete_list(Ks, Env)];
bind_list(Ks, Vs, Env) ->
- [{map, store_list(Ks, Vs, dict:new())} | delete_list(Ks, Env)].
+ [{map, store_list(Ks, Vs, #{})} | delete_list(Ks, Env)].
-store_list([K | Ks], [V | Vs], Dict) ->
- store_list(Ks, Vs, dict:store(K, V, Dict));
-store_list([], _, Dict) ->
- Dict.
+store_list([K | Ks], [V | Vs], Map) ->
+ store_list(Ks, Vs, maps:put(K, V, Map));
+store_list([], _, Map) ->
+ Map.
delete_list([K | Ks], Env) ->
delete_list(Ks, delete_any(K, Env));
@@ -298,48 +296,40 @@ delete_any(Key, Env) ->
-spec delete(term(), environment()) -> environment().
-delete(Key, [{map, Dict} = E | Env]) ->
- case dict:is_key(Key, Dict) of
- true ->
- [{map, dict:erase(Key, Dict)} | Env];
- false ->
+delete(Key, [{map, Map} = E | Env]) ->
+ case maps:take(Key, Map) of
+ {_, Map1} ->
+ [{map, Map1} | Env];
+ error ->
delete_1(Key, Env, E)
end;
-delete(Key, [{rec, Dict, Dict0} = E | Env]) ->
- case dict:is_key(Key, Dict) of
- true ->
- %% The Dict0 component must be preserved as it is until all
- %% keys in Dict have been deleted.
- Dict1 = dict:erase(Key, Dict),
- case dict:size(Dict1) of
- 0 ->
- Env; % the whole {rec,...} is now garbage
- _ ->
- [{rec, Dict1, Dict0} | Env]
- end;
- false ->
+delete(Key, [{rec, Map, Map0} = E | Env]) ->
+ case maps:take(Key, Map) of
+ {_, Map1} when map_size(Map1) =:= 0 ->
+ Env; % the whole {rec,...} is now garbage
+ %% The Map0 component must be preserved as it is until all
+ %% keys in Map have been deleted.
+ {_, Map1} ->
+ [{rec, Map1, Map0} | Env];
+ error ->
[E | delete(Key, Env)]
end.
%% This is just like above, except we pass on the preceding 'map'
%% mapping in the list to enable merging when removing 'rec' mappings.
-delete_1(Key, [{rec, Dict, Dict0} = E | Env], E1) ->
- case dict:is_key(Key, Dict) of
- true ->
- Dict1 = dict:erase(Key, Dict),
- case dict:size(Dict1) of
- 0 ->
- concat(E1, Env);
- _ ->
- [E1, {rec, Dict1, Dict0} | Env]
- end;
- false ->
+delete_1(Key, [{rec, Map, Map0} = E | Env], E1) ->
+ case maps:take(Key, Map) of
+ {_, Map1} when map_size(Map1) =:= 0 ->
+ concat(E1, Env);
+ {_, Map1} ->
+ [E1, {rec, Map1, Map0} | Env];
+ error ->
[E1, E | delete(Key, Env)]
end.
-concat({map, D1}, [{map, D2} | Env]) ->
- [dict:merge(fun (_K, V1, _V2) -> V1 end, D1, D2) | Env];
+concat({map, M1}, [{map, M2} | Env]) ->
+ [maps:merge(M2, M1) | Env];
concat(E1, Env) ->
[E1 | Env].
@@ -392,15 +382,15 @@ bind_recursive([], [], _, Env) ->
Env;
bind_recursive(Ks, Vs, F, Env) ->
F1 = fun (V) ->
- fun (Dict) -> F(V, [{rec, Dict, Dict} | Env]) end
+ fun (Map) -> F(V, [{rec, Map, Map} | Env]) end
end,
- Dict = bind_recursive_1(Ks, Vs, F1, dict:new()),
- [{rec, Dict, Dict} | Env].
+ Map = bind_recursive_1(Ks, Vs, F1, #{}),
+ [{rec, Map, Map} | Env].
-bind_recursive_1([K | Ks], [V | Vs], F, Dict) ->
- bind_recursive_1(Ks, Vs, F, dict:store(K, F(V), Dict));
-bind_recursive_1([], [], _, Dict) ->
- Dict.
+bind_recursive_1([K | Ks], [V | Vs], F, Map) ->
+ bind_recursive_1(Ks, Vs, F, maps:put(K, F(V), Map));
+bind_recursive_1([], [], _, Map) ->
+ Map.
%% =====================================================================
@@ -416,8 +406,8 @@ bind_recursive_1([], [], _, Dict) ->
-spec lookup(term(), environment()) -> 'error' | {'ok', term()}.
-lookup(Key, [{map, Dict} | Env]) ->
- case dict:find(Key, Dict) of
+lookup(Key, [{map, Map} | Env]) ->
+ case maps:find(Key, Map) of
{ok, _}=Value ->
Value;
error when Env =:= [] ->
@@ -425,10 +415,10 @@ lookup(Key, [{map, Dict} | Env]) ->
error ->
lookup(Key, Env)
end;
-lookup(Key, [{rec, Dict, Dict0} | Env]) ->
- case dict:find(Key, Dict) of
+lookup(Key, [{rec, Map, Map0} | Env]) ->
+ case maps:find(Key, Map) of
{ok, F} ->
- {ok, F(Dict0)};
+ {ok, F(Map0)};
error ->
lookup(Key, Env)
end.
@@ -598,7 +588,17 @@ start_range(Env) ->
%% (pseudo-)randomly distributed over the range.
generate(_N, Range) ->
- random:uniform(Range). % works well
+ %% We must use the same sequence of random variables to ensure
+ %% that two compilations of the same source code generates the
+ %% same BEAM code.
+ case rand:export_seed() of
+ undefined ->
+ _ = rand:seed(exsplus, {1,42,2053}),
+ ok;
+ _ ->
+ ok
+ end,
+ rand:uniform(Range). % works well
%% =====================================================================
diff --git a/lib/compiler/src/sys_core_dsetel.erl b/lib/compiler/src/sys_core_dsetel.erl
index ac32db10fe..bd3eeae238 100644
--- a/lib/compiler/src/sys_core_dsetel.erl
+++ b/lib/compiler/src/sys_core_dsetel.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -72,7 +72,7 @@ module(M0, _Options) ->
{ok,M}.
visit_module(#c_module{defs=Ds0}=R) ->
- Env = dict:new(),
+ Env = #{},
Ds = visit_module_1(Ds0, Env, []),
R#c_module{defs=Ds}.
@@ -95,9 +95,11 @@ visit(Env, #c_var{name={_,_}}=R) ->
{R, Env};
visit(Env0, #c_var{name=X}=R) ->
%% There should not be any free variables. If there are,
- %% the next line will cause an exception.
- {ok, N} = dict:find(X, Env0),
- {R, dict:store(X, N+1, Env0)};
+ %% the case will fail with an exception.
+ case Env0 of
+ #{X:=N} ->
+ {R, Env0#{X:=N+1}}
+ end;
visit(Env, #c_literal{}=R) ->
{R, Env};
visit(Env0, #c_tuple{es=Es0}=R) ->
@@ -203,7 +205,7 @@ bind_vars(Vs, Env) ->
bind_vars(Vs, Env, []).
bind_vars([#c_var{name=X}|Vs], Env0, Xs)->
- bind_vars(Vs, dict:store(X, 0, Env0), [X|Xs]);
+ bind_vars(Vs, Env0#{X=>0}, [X|Xs]);
bind_vars([], Env,Xs) ->
{Xs, Env}.
@@ -217,7 +219,7 @@ visit_pats([], Env, Vs) ->
{Vs, Env}.
visit_pat(Env0, #c_var{name=V}, Vs) ->
- {[V|Vs], dict:store(V, 0, Env0)};
+ {[V|Vs], Env0#{V=>0}};
visit_pat(Env0, #c_tuple{es=Es}, Vs) ->
visit_pats(Es, Env0, Vs);
visit_pat(Env0, #c_map{es=Es}, Vs) ->
@@ -235,23 +237,25 @@ visit_pat(Env0, #c_bitstr{val=Val,size=Sz}, Vs0) ->
case Sz of
#c_var{name=V} ->
%% We don't tolerate free variables.
- {ok, N} = dict:find(V, Env0),
- {Vs0, dict:store(V, N+1, Env0)};
+ case Env0 of
+ #{V:=N} ->
+ {Vs0, Env0#{V:=N+1}}
+ end;
_ ->
visit_pat(Env0, Sz, Vs0)
end,
visit_pat(Env1, Val, Vs1);
visit_pat(Env0, #c_alias{pat=P,var=#c_var{name=V}}, Vs) ->
- visit_pat(dict:store(V, 0, Env0), P, [V|Vs]);
+ visit_pat(Env0#{V=>0}, P, [V|Vs]);
visit_pat(Env, #c_literal{}, Vs) ->
{Vs, Env}.
restore_vars([V|Vs], Env0, Env1) ->
- case dict:find(V, Env0) of
- {ok, N} ->
- restore_vars(Vs, Env0, dict:store(V, N, Env1));
- error ->
- restore_vars(Vs, Env0, dict:erase(V, Env1))
+ case Env0 of
+ #{V:=N} ->
+ restore_vars(Vs, Env0, Env1#{V=>N});
+ _ ->
+ restore_vars(Vs, Env0, maps:remove(V, Env1))
end;
restore_vars([], _, Env1) ->
Env1.
@@ -349,8 +353,8 @@ is_safe(#c_literal{}) -> true;
is_safe(_) -> false.
is_single_use(V, Env) ->
- case dict:find(V, Env) of
- {ok, 1} ->
+ case Env of
+ #{V:=1} ->
true;
_ ->
false
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index 65699ccda9..e0de50f3ae 100644
--- a/lib/compiler/src/sys_core_fold.erl
+++ b/lib/compiler/src/sys_core_fold.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -277,7 +277,7 @@ expr(#c_fun{}=Fun, effect, _) ->
add_warning(Fun, useless_building),
void();
expr(#c_fun{vars=Vs0,body=B0}=Fun, Ctxt0, Sub0) ->
- {Vs1,Sub1} = pattern_list(Vs0, Sub0),
+ {Vs1,Sub1} = var_list(Vs0, Sub0),
Ctxt = case Ctxt0 of
{letrec,Ctxt1} -> Ctxt1;
value -> value
@@ -374,10 +374,21 @@ expr(#c_receive{clauses=Cs0,timeout=T0,action=A0}=Recv, Ctxt, Sub) ->
T1 = expr(T0, value, Sub),
A1 = body(A0, Ctxt, Sub),
Recv#c_receive{clauses=Cs1,timeout=T1,action=A1};
-expr(#c_apply{op=Op0,args=As0}=App, _, Sub) ->
+expr(#c_apply{anno=Anno,op=Op0,args=As0}=App, _, Sub) ->
Op1 = expr(Op0, value, Sub),
As1 = expr_list(As0, value, Sub),
- App#c_apply{op=Op1,args=As1};
+ case Op1 of
+ #c_var{} ->
+ App#c_apply{op=Op1,args=As1};
+ _ ->
+ add_warning(App, invalid_call),
+ Err = #c_call{anno=Anno,
+ module=#c_literal{val=erlang},
+ name=#c_literal{val=error},
+ args=[#c_tuple{es=[#c_literal{val='badfun'},
+ Op1]}]},
+ make_effect_seq(As1++[Err], Sub)
+ end;
expr(#c_call{module=M0,name=N0}=Call0, Ctxt, Sub) ->
M1 = expr(M0, value, Sub),
N1 = expr(N0, value, Sub),
@@ -420,13 +431,13 @@ expr(#c_try{anno=A,arg=E0,vars=Vs0,body=B0,evars=Evs0,handler=H0}=Try, _, Sub0)
%% Here is the general try/catch construct outside of guards.
%% We can remove try if the value is simple and replace it with a let.
E1 = body(E0, value, Sub0),
- {Vs1,Sub1} = pattern_list(Vs0, Sub0),
+ {Vs1,Sub1} = var_list(Vs0, Sub0),
B1 = body(B0, value, Sub1),
case is_safe_simple(E1, Sub0) of
true ->
expr(#c_let{anno=A,vars=Vs1,arg=E1,body=B1}, value, Sub0);
false ->
- {Evs1,Sub2} = pattern_list(Evs0, Sub0),
+ {Evs1,Sub2} = var_list(Evs0, Sub0),
H1 = body(H0, value, Sub2),
Try#c_try{arg=E1,vars=Vs1,body=B1,evars=Evs1,handler=H1}
end.
@@ -775,7 +786,7 @@ fold_lit_args(Call, Module, Name, Args0) ->
Val ->
case cerl:is_literal_term(Val) of
true ->
- cerl:abstract(Val);
+ cerl:ann_abstract(cerl:get_ann(Call), Val);
false ->
%% Successful evaluation, but it was not possible
%% to express the computed value as a literal.
@@ -1078,15 +1089,28 @@ is_atom_or_var(_) -> false.
%% clause(Clause, Cepxr, Context, Sub) -> Clause.
-clause(#c_clause{pats=Ps0,guard=G0,body=B0}=Cl, Cexpr, Ctxt, Sub0) ->
- {Ps1,Sub1} = pattern_list(Ps0, Sub0),
+clause(#c_clause{pats=Ps0}=Cl, Cexpr, Ctxt, Sub0) ->
+ try pattern_list(Ps0, Sub0) of
+ {Ps1,Sub1} ->
+ clause_1(Cl, Ps1, Cexpr, Ctxt, Sub1)
+ catch
+ nomatch ->
+ Cl#c_clause{anno=[compiler_generated],
+ guard=#c_literal{val=false}}
+ end.
+
+clause_1(#c_clause{guard=G0,body=B0}=Cl, Ps1, Cexpr, Ctxt, Sub1) ->
Sub2 = update_types(Cexpr, Ps1, Sub1),
- GSub = case {Cexpr,Ps1} of
- {#c_var{name='_'},_} ->
+ GSub = case {Cexpr,Ps1,G0} of
+ {_,_,#c_literal{}} ->
+ %% No need for substitution tricks when the guard
+ %% does not contain any variables.
+ Sub2;
+ {#c_var{name='_'},_,_} ->
%% In a 'receive', Cexpr is the variable '_', which represents the
%% message being matched. We must NOT do any extra substiutions.
Sub2;
- {#c_var{},[#c_var{}=Var]} ->
+ {#c_var{},[#c_var{}=Var],_} ->
%% The idea here is to optimize expressions such as
%%
%% case A of A -> ...
@@ -1120,7 +1144,7 @@ clause(#c_clause{pats=Ps0,guard=G0,body=B0}=Cl, Cexpr, Ctxt, Sub0) ->
%% the unsubstituted variables and values.
let_substs(Vs0, As0, Sub0) ->
- {Vs1,Sub1} = pattern_list(Vs0, Sub0),
+ {Vs1,Sub1} = var_list(Vs0, Sub0),
{Vs2,As1,Ss} = let_substs_1(Vs1, As0, Sub1),
Sub2 = sub_add_scope([V || #c_var{name=V} <- Vs2], Sub1),
{Vs2,As1,
@@ -1206,20 +1230,132 @@ bin_pattern_list(Ps0, Isub, Osub0) ->
{Ps,{_,Osub}} = mapfoldl(fun bin_pattern/2, {Isub,Osub0}, Ps0),
{Ps,Osub}.
-bin_pattern(#c_bitstr{val=E0,size=Size0}=Pat, {Isub0,Osub0}) ->
+bin_pattern(#c_bitstr{val=E0,size=Size0}=Pat0, {Isub0,Osub0}) ->
Size1 = expr(Size0, Isub0),
{E1,Osub} = pattern(E0, Isub0, Osub0),
Isub = case E0 of
#c_var{} -> sub_set_var(E0, E1, Isub0);
_ -> Isub0
end,
- {Pat#c_bitstr{val=E1,size=Size1},{Isub,Osub}}.
+ Pat = Pat0#c_bitstr{val=E1,size=Size1},
+ bin_pat_warn(Pat),
+ {Pat,{Isub,Osub}}.
pattern_list(Ps, Sub) -> pattern_list(Ps, Sub, Sub).
pattern_list(Ps0, Isub, Osub0) ->
mapfoldl(fun (P, Osub) -> pattern(P, Isub, Osub) end, Osub0, Ps0).
+%% var_list([Var], InSub) -> {Pattern,OutSub}.
+%% Works like pattern_list/2 but only accept variables and is
+%% guaranteed not to throw an exception.
+
+var_list(Vs, Sub0) ->
+ mapfoldl(fun (#c_var{}=V, Sub) ->
+ pattern(V, Sub, Sub)
+ end, Sub0, Vs).
+
+
+%%%
+%%% Generate warnings for binary patterns that will not match.
+%%%
+
+bin_pat_warn(#c_bitstr{type=#c_literal{val=Type},
+ val=Val0,
+ size=#c_literal{val=Sz},
+ unit=#c_literal{val=Unit},
+ flags=Fl}=Pat) ->
+ case {Type,Sz} of
+ {_,_} when is_integer(Sz), Sz >= 0 -> ok;
+ {binary,all} -> ok;
+ {utf8,undefined} -> ok;
+ {utf16,undefined} -> ok;
+ {utf32,undefined} -> ok;
+ {_,_} ->
+ add_warning(Pat, {nomatch_bit_syntax_size,Sz}),
+ throw(nomatch)
+ end,
+ case {Type,Val0} of
+ {integer,#c_literal{val=Val}} when is_integer(Val) ->
+ Signedness = signedness(Fl),
+ TotalSz = Sz * Unit,
+ bit_pat_warn_int(Val, TotalSz, Signedness, Pat);
+ {float,#c_literal{val=Val}} when is_float(Val) ->
+ ok;
+ {utf8,#c_literal{val=Val}} when is_integer(Val) ->
+ bit_pat_warn_unicode(Val, Pat);
+ {utf16,#c_literal{val=Val}} when is_integer(Val) ->
+ bit_pat_warn_unicode(Val, Pat);
+ {utf32,#c_literal{val=Val}} when is_integer(Val) ->
+ bit_pat_warn_unicode(Val, Pat);
+ {_,#c_literal{val=Val}} ->
+ add_warning(Pat, {nomatch_bit_syntax_type,Val,Type}),
+ throw(nomatch);
+ {_,_} ->
+ ok
+ end;
+bin_pat_warn(#c_bitstr{type=#c_literal{val=Type},val=Val0,flags=Fl}=Pat) ->
+ %% Size is variable. Not much that we can check.
+ case {Type,Val0} of
+ {integer,#c_literal{val=Val}} when is_integer(Val) ->
+ case signedness(Fl) of
+ unsigned when Val < 0 ->
+ add_warning(Pat, {nomatch_bit_syntax_unsigned,Val}),
+ throw(nomatch);
+ _ ->
+ ok
+ end;
+ {float,#c_literal{val=Val}} when is_float(Val) ->
+ ok;
+ {_,#c_literal{val=Val}} ->
+ add_warning(Pat, {nomatch_bit_syntax_type,Val,Type}),
+ throw(nomatch);
+ {_,_} ->
+ ok
+ end.
+
+bit_pat_warn_int(Val, 0, signed, Pat) ->
+ if
+ Val =:= 0 ->
+ ok;
+ true ->
+ add_warning(Pat, {nomatch_bit_syntax_truncated,signed,Val,0}),
+ throw(nomatch)
+ end;
+bit_pat_warn_int(Val, Sz, signed, Pat) ->
+ if
+ Val < 0, Val bsr (Sz - 1) =/= -1 ->
+ add_warning(Pat, {nomatch_bit_syntax_truncated,signed,Val,Sz}),
+ throw(nomatch);
+ Val > 0, Val bsr (Sz - 1) =/= 0 ->
+ add_warning(Pat, {nomatch_bit_syntax_truncated,signed,Val,Sz}),
+ throw(nomatch);
+ true ->
+ ok
+ end;
+bit_pat_warn_int(Val, _Sz, unsigned, Pat) when Val < 0 ->
+ add_warning(Pat, {nomatch_bit_syntax_unsigned,Val}),
+ throw(nomatch);
+bit_pat_warn_int(Val, Sz, unsigned, Pat) ->
+ if
+ Val bsr Sz =:= 0 ->
+ ok;
+ true ->
+ add_warning(Pat, {nomatch_bit_syntax_truncated,unsigned,Val,Sz}),
+ throw(nomatch)
+ end.
+
+bit_pat_warn_unicode(U, _Pat) when 0 =< U, U =< 16#10FFFF ->
+ ok;
+bit_pat_warn_unicode(U, Pat) ->
+ add_warning(Pat, {nomatch_bit_syntax_unicode,U}),
+ throw(nomatch).
+
+signedness(#c_literal{val=Flags}) ->
+ [S] = [F || F <- Flags, F =:= signed orelse F =:= unsigned],
+ S.
+
+
%% is_subst(Expr) -> true | false.
%% Test whether an expression is a suitable substitution.
@@ -2040,24 +2176,22 @@ opt_not_in_let_1(V, Call, Body) ->
#c_call{module=#c_literal{val=erlang},
name=#c_literal{val='not'},
args=[#c_var{name=V}]} ->
- opt_not_in_let_2(Body);
+ opt_not_in_let_2(Body, Call);
_ ->
no
end.
-opt_not_in_let_2(#c_case{clauses=Cs0}=Case) ->
+opt_not_in_let_2(#c_case{clauses=Cs0}=Case, NotCall) ->
Vars = make_vars([], 1),
- Body = #c_call{module=#c_literal{val=erlang},
- name=#c_literal{val='not'},
- args=Vars},
+ Body = NotCall#c_call{args=Vars},
Cs = [begin
Let = #c_let{vars=Vars,arg=B,body=Body},
C#c_clause{body=opt_not_in_let(Let)}
end || #c_clause{body=B}=C <- Cs0],
{yes,Case#c_case{clauses=Cs}};
-opt_not_in_let_2(#c_call{}=Call0) ->
+opt_not_in_let_2(#c_call{}=Call0, _NotCall) ->
invert_call(Call0);
-opt_not_in_let_2(_) -> no.
+opt_not_in_let_2(_, _) -> no.
invert_call(#c_call{module=#c_literal{val=erlang},
name=#c_literal{val=Name0},
@@ -2251,11 +2385,11 @@ move_let_into_expr(#c_let{vars=InnerVs0,body=InnerBody0}=Inner,
%%
Arg = body(Arg0, Sub0),
ScopeSub0 = sub_subst_scope(Sub0#sub{t=#{}}),
- {OuterVs,ScopeSub} = pattern_list(OuterVs0, ScopeSub0),
+ {OuterVs,ScopeSub} = var_list(OuterVs0, ScopeSub0),
OuterBody = body(OuterBody0, ScopeSub),
- {InnerVs,Sub} = pattern_list(InnerVs0, Sub0),
+ {InnerVs,Sub} = var_list(InnerVs0, Sub0),
InnerBody = body(InnerBody0, Sub),
Outer#c_let{vars=OuterVs,arg=Arg,
body=Inner#c_let{vars=InnerVs,arg=OuterBody,body=InnerBody}};
@@ -2271,39 +2405,49 @@ move_let_into_expr(#c_let{vars=Lvs0,body=Lbody0}=Let,
case {TwoClauses,is_failing_clause(Ca0),is_failing_clause(Cb0)} of
{true,false,true} ->
%% let <Lvars> = case <Case-expr> of
- %% <Cvars> -> <Clause-body>;
- %% <OtherCvars> -> erlang:error(...)
+ %% <Cpats> -> <Clause-body>;
+ %% <OtherCpats> -> erlang:error(...)
%% end
%% in <Let-body>
%%
%% ==>
%%
%% case <Case-expr> of
- %% <Cvars> ->
+ %% <Cpats> ->
%% let <Lvars> = <Clause-body>
%% in <Let-body>;
- %% <OtherCvars> -> erlang:error(...)
+ %% <OtherCpats> -> erlang:error(...)
%% end
Cexpr = body(Cexpr0, Sub0),
- CaVars0 = Ca0#c_clause.pats,
+ CaPats0 = Ca0#c_clause.pats,
G0 = Ca0#c_clause.guard,
B0 = Ca0#c_clause.body,
ScopeSub0 = sub_subst_scope(Sub0#sub{t=#{}}),
- {CaVars,ScopeSub} = pattern_list(CaVars0, ScopeSub0),
- G = guard(G0, ScopeSub),
-
- B1 = body(B0, ScopeSub),
-
- {Lvs,B2,Sub1} = let_substs(Lvs0, B1, Sub0),
- Sub2 = Sub1#sub{s=cerl_sets:union(ScopeSub#sub.s,
- Sub1#sub.s)},
- Lbody = body(Lbody0, Sub2),
- B = Let#c_let{vars=Lvs,arg=core_lib:make_values(B2),body=Lbody},
-
- Ca = Ca0#c_clause{pats=CaVars,guard=G,body=B},
- Cb = clause(Cb0, Cexpr, value, Sub0),
- Case#c_case{arg=Cexpr,clauses=[Ca,Cb]};
+ try pattern_list(CaPats0, ScopeSub0) of
+ {CaPats,ScopeSub} ->
+ G = guard(G0, ScopeSub),
+
+ B1 = body(B0, ScopeSub),
+
+ {Lvs,B2,Sub1} = let_substs(Lvs0, B1, Sub0),
+ Sub2 = Sub1#sub{s=cerl_sets:union(ScopeSub#sub.s,
+ Sub1#sub.s)},
+ Lbody = body(Lbody0, Sub2),
+ B = Let#c_let{vars=Lvs,
+ arg=core_lib:make_values(B2),
+ body=Lbody},
+
+ Ca = Ca0#c_clause{pats=CaPats,guard=G,body=B},
+ Cb = clause(Cb0, Cexpr, value, Sub0),
+ Case#c_case{arg=Cexpr,clauses=[Ca,Cb]}
+ catch
+ nomatch ->
+ %% This is not a defeat. The code will eventually
+ %% be optimized to erlang:error(...) by the other
+ %% optimizations done in this module.
+ impossible
+ end;
{_,_,_} -> impossible
end;
move_let_into_expr(#c_let{vars=Lvs0,body=Lbody0}=Let,
@@ -2595,7 +2739,7 @@ move_case_into_arg(#c_case{arg=#c_let{vars=OuterVars0,arg=OuterArg,
%% in case <InnerArg> of <InnerClauses> end
%%
ScopeSub0 = sub_subst_scope(Sub#sub{t=#{}}),
- {OuterVars,ScopeSub} = pattern_list(OuterVars0, ScopeSub0),
+ {OuterVars,ScopeSub} = var_list(OuterVars0, ScopeSub0),
InnerArg = body(InnerArg0, ScopeSub),
Outer#c_let{vars=OuterVars,arg=OuterArg,
body=Inner#c_case{arg=InnerArg,clauses=InnerClauses}};
@@ -2624,14 +2768,18 @@ move_case_into_arg(#c_case{arg=#c_case{arg=OuterArg,
%% end
%%
ScopeSub0 = sub_subst_scope(Sub#sub{t=#{}}),
- {OuterPats,ScopeSub} = pattern_list(OuterPats0, ScopeSub0),
- OuterGuard = guard(OuterGuard0, ScopeSub),
- InnerArg = body(InnerArg0, ScopeSub),
- Inner = Inner0#c_case{arg=InnerArg,clauses=InnerClauses},
- OuterCa = OuterCa0#c_clause{pats=OuterPats,guard=OuterGuard,
- body=Inner},
- Outer#c_case{arg=OuterArg,
- clauses=[OuterCa,OuterCb]};
+
+ %% We KNOW that pattern_list/2 has already been called for OuterPats0;
+ %% therefore, it cannot throw an exception.
+ {OuterPats,ScopeSub} = pattern_list(OuterPats0, ScopeSub0),
+ OuterGuard = guard(OuterGuard0, ScopeSub),
+ InnerArg = body(InnerArg0, ScopeSub),
+ Inner = Inner0#c_case{arg=InnerArg,clauses=InnerClauses},
+ OuterCa = OuterCa0#c_clause{pats=OuterPats,
+ guard=OuterGuard,
+ body=Inner},
+ Outer#c_case{arg=OuterArg,
+ clauses=[OuterCa,OuterCb]};
false ->
impossible
end;
@@ -2793,12 +2941,18 @@ extract_type_1(Expr, Sub) ->
true -> bool
end.
+returns_integer('band', [_,_]) -> true;
+returns_integer('bnot', [_]) -> true;
+returns_integer('bor', [_,_]) -> true;
+returns_integer('bxor', [_,_]) -> true;
returns_integer(bit_size, [_]) -> true;
returns_integer('bsl', [_,_]) -> true;
returns_integer('bsr', [_,_]) -> true;
returns_integer(byte_size, [_]) -> true;
+returns_integer('div', [_,_]) -> true;
returns_integer(length, [_]) -> true;
returns_integer('rem', [_,_]) -> true;
+returns_integer('round', [_]) -> true;
returns_integer(size, [_]) -> true;
returns_integer(tuple_size, [_]) -> true;
returns_integer(trunc, [_]) -> true;
@@ -3207,6 +3361,29 @@ format_error(nomatch_shadow) ->
"this clause cannot match because a previous clause always matches";
format_error(nomatch_guard) ->
"the guard for this clause evaluates to 'false'";
+format_error({nomatch_bit_syntax_truncated,Signess,Val,Sz}) ->
+ S = case Signess of
+ signed -> "a 'signed'";
+ unsigned -> "an 'unsigned'"
+ end,
+ F = "this clause cannot match because the value ~P"
+ " will not fit in ~s binary segment of size ~p",
+ flatten(io_lib:format(F, [Val,10,S,Sz]));
+format_error({nomatch_bit_syntax_unsigned,Val}) ->
+ F = "this clause cannot match because the negative value ~P"
+ " will never match the value of an 'unsigned' binary segment",
+ flatten(io_lib:format(F, [Val,10]));
+format_error({nomatch_bit_syntax_size,Sz}) ->
+ F = "this clause cannot match because '~P' is not a valid size for a binary segment",
+ flatten(io_lib:format(F, [Sz,10]));
+format_error({nomatch_bit_syntax_type,Val,Type}) ->
+ F = "this clause cannot match because '~P' is not of the"
+ " expected type '~p'",
+ flatten(io_lib:format(F, [Val,10,Type]));
+format_error({nomatch_bit_syntax_unicode,Val}) ->
+ F = "this clause cannot match because the value ~p"
+ " is not a valid Unicode code point",
+ flatten(io_lib:format(F, [Val]));
format_error(no_clause_match) ->
"no clause will ever match";
format_error(nomatch_clause_type) ->
@@ -3227,6 +3404,8 @@ format_error({no_effect,{erlang,F,A}}) ->
format_error(result_ignored) ->
"the result of the expression is ignored "
"(suppress the warning by assigning the expression to the _ variable)";
+format_error(invalid_call) ->
+ "invalid function call";
format_error(useless_building) ->
"a term is constructed, but never used";
format_error(bin_opt_alias) ->
diff --git a/lib/compiler/src/sys_core_inline.erl b/lib/compiler/src/sys_core_inline.erl
index 838dda68c6..8c1f69d5de 100644
--- a/lib/compiler/src/sys_core_inline.erl
+++ b/lib/compiler/src/sys_core_inline.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/sys_pre_attributes.erl b/lib/compiler/src/sys_pre_attributes.erl
index f0cb630205..bc93c85989 100644
--- a/lib/compiler/src/sys_pre_attributes.erl
+++ b/lib/compiler/src/sys_pre_attributes.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/sys_pre_expand.erl b/lib/compiler/src/sys_pre_expand.erl
index d9cc4b530c..7ab4e1845c 100644
--- a/lib/compiler/src/sys_pre_expand.erl
+++ b/lib/compiler/src/sys_pre_expand.erl
@@ -29,30 +29,26 @@
%% Main entry point.
-export([module/2]).
--import(ordsets, [from_list/1,union/2]).
-import(lists, [member/2,foldl/3,foldr/3]).
--include("../include/erl_bits.hrl").
-
-type fa() :: {atom(), arity()}.
-record(expand, {module=[], %Module name
exports=[], %Exports
- imports=[], %Imports
attributes=[], %Attributes
callbacks=[], %Callbacks
optional_callbacks=[] :: [fa()], %Optional callbacks
- defined, %Defined functions (gb_set)
vcount=0, %Variable counter
func=[], %Current function
arity=[], %Arity for current function
- fcount=0 %Local fun count
+ fcount=0, %Local fun count
+ ctype %Call type map
}).
%% module(Forms, CompileOptions)
%% {ModuleName,Exports,TransformedForms,CompileOptions'}
-%% Expand the forms in one module. N.B.: the lists of predefined
-%% exports and imports are really ordsets!
+%% Expand the forms in one module.
+%%
%% CompileOptions is augmented with options from -compile attributes.
module(Fs0, Opts0) ->
@@ -65,19 +61,28 @@ module(Fs0, Opts0) ->
%% Set pre-defined exported functions.
PreExp = [{module_info,0},{module_info,1}],
+ %% Build the set of defined functions and the initial call
+ %% type map.
+ Defined = defined_functions(Fs, PreExp),
+ Ctype = maps:from_list([{K,local} || K <- Defined]),
+
%% Build initial expand record.
St0 = #expand{exports=PreExp,
- defined=PreExp
+ ctype=Ctype
},
+
%% Expand the functions.
- {Tfs,St1} = forms(Fs, define_functions(Fs, St0)),
+ {Tfs,St1} = forms(Fs, St0),
+
%% Get the correct list of exported functions.
Exports = case member(export_all, Opts) of
- true -> gb_sets:to_list(St1#expand.defined);
+ true -> Defined;
false -> St1#expand.exports
end,
+ St2 = St1#expand{exports=Exports,ctype=undefined},
+
%% Generate all functions from stored info.
- {Ats,St3} = module_attrs(St1#expand{exports = Exports}),
+ {Ats,St3} = module_attrs(St2),
{Mfs,St4} = module_predef_funcs(St3),
{St4#expand.module, St4#expand.exports, Ats ++ Tfs ++ Mfs,
Opts}.
@@ -85,14 +90,14 @@ module(Fs0, Opts0) ->
compiler_options(Forms) ->
lists:flatten([C || {attribute,_,compile,C} <- Forms]).
-%% define_function(Form, State) -> State.
+%% defined_function(Forms, Predef) -> Functions.
%% Add function to defined if form is a function.
-define_functions(Forms, #expand{defined=Predef}=St) ->
+defined_functions(Forms, Predef) ->
Fs = foldl(fun({function,_,N,A,_Cs}, Acc) -> [{N,A}|Acc];
(_, Acc) -> Acc
end, Predef, Forms),
- St#expand{defined=gb_sets:from_list(Fs)}.
+ ordsets:from_list(Fs).
module_attrs(#expand{attributes=Attributes}=St) ->
Attrs = [{attribute,Line,Name,Val} || {Name,Line,Val} <- Attributes],
@@ -113,23 +118,21 @@ is_fa_list([{FuncName, Arity}|L])
is_fa_list([]) -> true;
is_fa_list(_) -> false.
-module_predef_funcs(St) ->
- {Mpf1,St1}=module_predef_func_beh_info(St),
- {Mpf2,St2}=module_predef_funcs_mod_info(St1),
+module_predef_funcs(St0) ->
+ {Mpf1,St1} = module_predef_func_beh_info(St0),
+ Mpf2 = module_predef_funcs_mod_info(St1),
Mpf = [erl_parse:new_anno(F) || F <- Mpf1++Mpf2],
- {Mpf,St2}.
+ {Mpf,St1}.
module_predef_func_beh_info(#expand{callbacks=[]}=St) ->
{[], St};
module_predef_func_beh_info(#expand{callbacks=Callbacks,
optional_callbacks=OptionalCallbacks,
- defined=Defined,
exports=Exports}=St) ->
- PreDef=[{behaviour_info,1}],
- PreExp=PreDef,
+ PreDef0 = [{behaviour_info,1}],
+ PreDef = ordsets:from_list(PreDef0),
{[gen_beh_info(Callbacks, OptionalCallbacks)],
- St#expand{defined=gb_sets:union(gb_sets:from_list(PreDef), Defined),
- exports=union(from_list(PreExp), Exports)}}.
+ St#expand{exports=ordsets:union(PreDef, Exports)}}.
gen_beh_info(Callbacks, OptionalCallbacks) ->
List = make_list(Callbacks),
@@ -156,20 +159,16 @@ make_optional_list([{Name,Arity}|Rest]) ->
{integer,0,Arity}]},
make_optional_list(Rest)}.
-module_predef_funcs_mod_info(St) ->
- PreDef = [{module_info,0},{module_info,1}],
- PreExp = PreDef,
- {[{function,0,module_info,0,
- [{clause,0,[],[],
+module_predef_funcs_mod_info(#expand{module=Mod}) ->
+ ModAtom = {atom,0,Mod},
+ [{function,0,module_info,0,
+ [{clause,0,[],[],
[{call,0,{remote,0,{atom,0,erlang},{atom,0,get_module_info}},
- [{atom,0,St#expand.module}]}]}]},
- {function,0,module_info,1,
- [{clause,0,[{var,0,'X'}],[],
+ [ModAtom]}]}]},
+ {function,0,module_info,1,
+ [{clause,0,[{var,0,'X'}],[],
[{call,0,{remote,0,{atom,0,erlang},{atom,0,get_module_info}},
- [{atom,0,St#expand.module},{var,0,'X'}]}]}]}],
- St#expand{defined=gb_sets:union(gb_sets:from_list(PreDef),
- St#expand.defined),
- exports=union(from_list(PreExp), St#expand.exports)}}.
+ [ModAtom,{var,0,'X'}]}]}]}].
%% forms(Forms, State) ->
%% {TransformedForms,State'}
@@ -196,7 +195,8 @@ attribute(module, Module, _L, St) ->
true = is_atom(Module),
St#expand{module=Module};
attribute(export, Es, _L, St) ->
- St#expand{exports=union(from_list(Es), St#expand.exports)};
+ St#expand{exports=ordsets:union(ordsets:from_list(Es),
+ St#expand.exports)};
attribute(import, Is, _L, St) ->
import(Is, St);
attribute(compile, _C, _L, St) ->
@@ -231,8 +231,6 @@ head(As, St) -> pattern_list(As, St).
%% {TransformedPattern,State'}
%%
-pattern({var,_,'_'}=Var, St) -> %Ignore anonymous variable.
- {Var,St};
pattern({var,_,_}=Var, St) ->
{Var,St};
pattern({char,_,_}=Char, St) ->
@@ -385,19 +383,19 @@ expr({block,Line,Es0}, St0) ->
{Es,St1} = exprs(Es0, St0),
{{block,Line,Es},St1};
expr({'if',Line,Cs0}, St0) ->
- {Cs,St1} = icr_clauses(Cs0, St0),
+ {Cs,St1} = clauses(Cs0, St0),
{{'if',Line,Cs},St1};
expr({'case',Line,E0,Cs0}, St0) ->
{E,St1} = expr(E0, St0),
- {Cs,St2} = icr_clauses(Cs0, St1),
+ {Cs,St2} = clauses(Cs0, St1),
{{'case',Line,E,Cs},St2};
expr({'receive',Line,Cs0}, St0) ->
- {Cs,St1} = icr_clauses(Cs0, St0),
+ {Cs,St1} = clauses(Cs0, St0),
{{'receive',Line,Cs},St1};
expr({'receive',Line,Cs0,To0,ToEs0}, St0) ->
{To,St1} = expr(To0, St0),
{ToEs,St2} = exprs(ToEs0, St1),
- {Cs,St3} = icr_clauses(Cs0, St2),
+ {Cs,St3} = clauses(Cs0, St2),
{{'receive',Line,Cs,To,ToEs},St3};
expr({'fun',Line,Body}, St) ->
fun_tq(Line, Body, St);
@@ -406,21 +404,15 @@ expr({named_fun,Line,Name,Cs}, St) ->
expr({call,Line,{atom,La,N}=Atom,As0}, St0) ->
{As,St1} = expr_list(As0, St0),
Ar = length(As),
- case defined(N,Ar,St1) of
- true ->
+ Key = {N,Ar},
+ case St1#expand.ctype of
+ #{Key:=local} ->
{{call,Line,Atom,As},St1};
+ #{Key:={imported,Mod}} ->
+ {{call,Line,{remote,La,{atom,La,Mod},Atom},As},St1};
_ ->
- case imported(N, Ar, St1) of
- {yes,Mod} ->
- {{call,Line,{remote,La,{atom,La,Mod},Atom},As},St1};
- no ->
- case erl_internal:bif(N, Ar) of
- true ->
- {{call,Line,{remote,La,{atom,La,erlang},Atom},As},St1};
- false -> %% This should have been handled by erl_lint
- {{call,Line,Atom,As},St1}
- end
- end
+ true = erl_internal:bif(N, Ar),
+ {{call,Line,{remote,La,{atom,La,erlang},Atom},As},St1}
end;
expr({call,Line,{remote,Lr,M0,F},As0}, St0) ->
{[M1,F1|As1],St1} = expr_list([M0,F|As0], St0),
@@ -430,12 +422,11 @@ expr({call,Line,F,As0}, St0) ->
{{call,Line,Fun1,As1},St1};
expr({'try',Line,Es0,Scs0,Ccs0,As0}, St0) ->
{Es1,St1} = exprs(Es0, St0),
- {Scs1,St2} = icr_clauses(Scs0, St1),
- {Ccs1,St3} = icr_clauses(Ccs0, St2),
+ {Scs1,St2} = clauses(Scs0, St1),
+ {Ccs1,St3} = clauses(Ccs0, St2),
{As1,St4} = exprs(As0, St3),
{{'try',Line,Es1,Scs1,Ccs1,As1},St4};
expr({'catch',Line,E0}, St0) ->
- %% Catch exports no new variables.
{E,St1} = expr(E0, St0),
{{'catch',Line,E},St1};
expr({match,Line,P0,E0}, St0) ->
@@ -456,21 +447,6 @@ expr_list([E0|Es0], St0) ->
{[E|Es],St2};
expr_list([], St) -> {[],St}.
-%% icr_clauses([Clause], State) -> {[TransformedClause],State'}
-%% Be very careful here to return the variables that are really used
-%% and really new.
-
-icr_clauses([], St) -> {[],St};
-icr_clauses(Clauses, St) -> icr_clauses2(Clauses, St).
-
-icr_clauses2([{clause,Line,H0,G0,B0}|Cs0], St0) ->
- {H,St1} = head(H0, St0),
- {G,St2} = guard(G0, St1),
- {B,St3} = exprs(B0, St2),
- {Cs,St4} = icr_clauses2(Cs0, St3),
- {[{clause,Line,H,G,B}|Cs],St4};
-icr_clauses2([], St) -> {[],St}.
-
%% lc_tq(Line, Qualifiers, State) ->
%% {[TransQual],State'}
@@ -486,16 +462,9 @@ lc_tq(Line, [{b_generate,Lg,P0,G0}|Qs0], St0) ->
{Qs1,St3} = lc_tq(Line, Qs0, St2),
{[{b_generate,Lg,P1,G1}|Qs1],St3};
lc_tq(Line, [F0 | Qs0], St0) ->
- case erl_lint:is_guard_test(F0) of
- true ->
- {F1,St1} = guard_test(F0, St0),
- {Qs1,St2} = lc_tq(Line, Qs0, St1),
- {[F1|Qs1],St2};
- false ->
- {F1,St1} = expr(F0, St0),
- {Qs1,St2} = lc_tq(Line, Qs0, St1),
- {[F1 | Qs1],St2}
- end;
+ {F1,St1} = expr(F0, St0),
+ {Qs1,St2} = lc_tq(Line, Qs0, St1),
+ {[F1|Qs1],St2};
lc_tq(_Line, [], St0) ->
{[],St0}.
@@ -527,7 +496,7 @@ fun_tq(L, {function,M,F,A}, St) when is_atom(M), is_atom(F), is_integer(A) ->
fun_tq(Lf, {function,_,_,_}=ExtFun, St) ->
{{'fun',Lf,ExtFun},St};
fun_tq(Lf, {clauses,Cs0}, St0) ->
- {Cs1,St1} = fun_clauses(Cs0, St0),
+ {Cs1,St1} = clauses(Cs0, St0),
{Fname,St2} = new_fun_name(St1),
%% Set dummy values for Index and Uniq -- the real values will
%% be assigned by beam_asm.
@@ -535,18 +504,10 @@ fun_tq(Lf, {clauses,Cs0}, St0) ->
{{'fun',Lf,{clauses,Cs1},{Index,Uniq,Fname}},St2}.
fun_tq(Line, Cs0, St0, Name) ->
- {Cs1,St1} = fun_clauses(Cs0, St0),
+ {Cs1,St1} = clauses(Cs0, St0),
{Fname,St2} = new_fun_name(St1, Name),
{{named_fun,Line,Name,Cs1,{0,0,Fname}},St2}.
-fun_clauses([{clause,L,H0,G0,B0}|Cs0], St0) ->
- {H,St1} = head(H0, St0),
- {G,St2} = guard(G0, St1),
- {B,St3} = exprs(B0, St2),
- {Cs,St4} = fun_clauses(Cs0, St3),
- {[{clause,L,H,G,B}|Cs],St4};
-fun_clauses([], St) -> {[],St}.
-
%% new_fun_name(State) -> {FunName,State}.
new_fun_name(St) ->
@@ -571,7 +532,6 @@ pattern_element({bin_element,Line,Expr0,Size0,Type0}, {Es,St0}) ->
{[{bin_element,Line,Expr,Size,Type}|Es],St2}.
pat_bit_size(default, St) -> {default,St};
-pat_bit_size({atom,_La,all}=All, St) -> {All,St};
pat_bit_size({var,_Lv,_V}=Var, St) -> {Var,St};
pat_bit_size(Size, St) ->
Line = element(2, Size),
@@ -592,8 +552,7 @@ coerce_to_float({integer,L,I}=E, [float|_]) ->
try
{float,L,float(I)}
catch
- error:badarg -> E;
- error:badarith -> E
+ error:badarg -> E
end;
coerce_to_float(E, _) -> E.
@@ -647,25 +606,11 @@ string_to_conses(Line, Cs, Tail) ->
%% import(Line, Imports, State) ->
%% State'
-%% imported(Name, Arity, State) ->
-%% {yes,Module} | no
-%% Handle import declarations and test for imported functions. No need to
-%% check when building imports as code is correct.
+%% Handle import declarations.
-import({Mod,Fs}, St) ->
+import({Mod,Fs}, #expand{ctype=Ctype0}=St) ->
true = is_atom(Mod),
- Mfs = from_list(Fs),
- St#expand{imports=add_imports(Mod, Mfs, St#expand.imports)}.
-
-add_imports(Mod, [F|Fs], Is) ->
- add_imports(Mod, Fs, orddict:store(F, Mod, Is));
-add_imports(_, [], Is) -> Is.
-
-imported(F, A, St) ->
- case orddict:find({F,A}, St#expand.imports) of
- {ok,Mod} -> {yes,Mod};
- error -> no
- end.
-
-defined(F, A, St) ->
- gb_sets:is_element({F,A}, St#expand.defined).
+ Ctype = foldl(fun(F, A) ->
+ A#{F=>{imported,Mod}}
+ end, Ctype0, Fs),
+ St#expand{ctype=Ctype}.
diff --git a/lib/compiler/src/v3_codegen.erl b/lib/compiler/src/v3_codegen.erl
index 2a89305f4d..4df1aadd0a 100644
--- a/lib/compiler/src/v3_codegen.erl
+++ b/lib/compiler/src/v3_codegen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -827,21 +827,24 @@ select_extract_bin([{var,Hd},{var,Tl}], Size0, Unit, Type, Flags, Vf,
{bs_save2,CtxReg,{Ctx,Tl}}],Int1}
end,
{Es,clear_dead(Aft, I, Vdb),St};
-select_extract_bin([{var,Hd}], Size0, Unit, binary, Flags, Vf,
+select_extract_bin([{var,Hd}], Size, Unit, binary, Flags, Vf,
I, Vdb, Bef, Ctx, Body, St) ->
- SizeReg = get_bin_size_reg(Size0, Bef),
+ %% Match the last segment of a binary. We KNOW that the size
+ %% must be 'all'.
+ Size = {atom,all}, %Assertion.
{Es,Aft} =
case vdb_find(Hd, Vdb) of
{_,_,Lhd} when Lhd =< I ->
+ %% The result will not be used. Furthermore, since we
+ %% we are at the end of the binary, the position will
+ %% not be used again; thus, it is safe to do a cheaper
+ %% test of the unit.
CtxReg = fetch_var(Ctx, Bef),
- {case SizeReg =:= {atom,all} andalso is_context_unused(Body) of
- true when Unit =:= 1 ->
+ {case Unit of
+ 1 ->
[];
- true ->
- [{test,bs_test_unit,{f,Vf},[CtxReg,Unit]}];
- false ->
- [{test,bs_skip_bits2,{f,Vf},
- [CtxReg,SizeReg,Unit,{field_flags,Flags}]}]
+ _ ->
+ [{test,bs_test_unit,{f,Vf},[CtxReg,Unit]}]
end,Bef};
{_,_,_} ->
case is_context_unused(Body) of
@@ -853,7 +856,7 @@ select_extract_bin([{var,Hd}], Size0, Unit, binary, Flags, Vf,
Name = bs_get_binary2,
Live = max_reg(Bef#sr.reg),
{[{test,Name,{f,Vf},Live,
- [CtxReg,SizeReg,Unit,{field_flags,Flags}],Rhd}],
+ [CtxReg,Size,Unit,{field_flags,Flags}],Rhd}],
Int1};
true ->
%% Since the matching context will not be used again,
@@ -868,7 +871,7 @@ select_extract_bin([{var,Hd}], Size0, Unit, binary, Flags, Vf,
Name = bs_get_binary2,
Live = max_reg(Int1#sr.reg),
{[{test,Name,{f,Vf},Live,
- [CtxReg,SizeReg,Unit,{field_flags,Flags}],CtxReg}],
+ [CtxReg,Size,Unit,{field_flags,Flags}],CtxReg}],
Int1}
end
end,
@@ -1086,6 +1089,23 @@ protected_cg(Ts, Rs, _Fail, I, Vdb, Bef, St0) ->
%% test_cg(TestName, Args, Fail, I, Vdb, Bef, St) -> {[Ainstr],Aft,St}.
%% Generate test instruction. Use explicit fail label here.
+test_cg(is_map, [A], Fail, I, Vdb, Bef, St) ->
+ %% We must avoid creating code like this:
+ %%
+ %% move x(0) y(0)
+ %% is_map Fail [x(0)]
+ %% make_fun => x(0) %% Overwrite x(0)
+ %% put_map_assoc y(0) ...
+ %%
+ %% The code is safe, but beam_validator does not understand that.
+ %% Extending beam_validator to handle such (rare) code as the
+ %% above would make it slower for all programs. Instead, change
+ %% the code generator to always prefer the Y register for is_map()
+ %% and put_map_assoc() instructions, ensuring that they use the
+ %% same register.
+ Arg = cg_reg_arg_prefer_y(A, Bef),
+ Aft = clear_dead(Bef, I, Vdb),
+ {[{test,is_map,{f,Fail},[Arg]}],Aft,St};
test_cg(Test, As, Fail, I, Vdb, Bef, St) ->
Args = cg_reg_args(As, Bef),
Aft = clear_dead(Bef, I, Vdb),
@@ -1152,19 +1172,15 @@ call_cg(Func, As, Rs, Le, Vdb, Bef, St0) ->
%% Inside a guard. The only allowed function call is to
%% erlang:error/1,2. We will generate the following code:
%%
- %% jump FailureLabel
%% move {atom,ok} DestReg
- %%
- %% The 'move' instruction will never be executed, but we
- %% generate it anyway in case the beam_validator is run
- %% on unoptimized code.
+ %% jump FailureLabel
{remote,{atom,erlang},{atom,error}} = Func, %Assertion.
[{var,DestVar}] = Rs,
Int0 = clear_dead(Bef, Le#l.i, Vdb),
Reg = put_reg(DestVar, Int0#sr.reg),
Int = Int0#sr{reg=Reg},
Dst = fetch_reg(DestVar, Reg),
- {[{jump,{f,Fail}},{move,{atom,ok},Dst}],
+ {[{move,{atom,ok},Dst},{jump,{f,Fail}}],
clear_dead(Int, Le#l.i, Vdb),St0};
#cg{} ->
%% Ordinary function call in a function body.
@@ -1535,14 +1551,12 @@ set_cg([{var,R}], {binary,Segs}, Le, Vdb, Bef, #cg{bfail=Bfail}=St) ->
%% Now generate the complete code for constructing the binary.
Code = cg_binary(PutCode, Target, Temp, Fail, MaxRegs, Le#l.a),
{Sis++Code,Aft,St};
-% Map single variable key
-set_cg([{var,R}], {map,Op,Map,[{map_pair,{var,_}=K,V}]}, Le, Vdb, Bef,
- #cg{bfail=Bfail}=St) ->
- Fail = {f,Bfail},
- {Sis,Int0} = maybe_adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb, St),
+%% Map: single variable key.
+set_cg([{var,R}], {map,Op,Map,[{map_pair,{var,_}=K,V}]}, Le, Vdb, Bef, St0) ->
+ {Sis,Int0} = maybe_adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb, St0),
- SrcReg = cg_reg_arg(Map,Int0),
+ SrcReg = cg_reg_arg_prefer_y(Map, Int0),
Line = line(Le#l.a),
List = [cg_reg_arg(K,Int0),cg_reg_arg(V,Int0)],
@@ -1554,22 +1568,17 @@ set_cg([{var,R}], {map,Op,Map,[{map_pair,{var,_}=K,V}]}, Le, Vdb, Bef,
Aft = Aft0#sr{reg=put_reg(R, Aft0#sr.reg)},
Target = fetch_reg(R, Aft#sr.reg),
- I = case Op of
- assoc -> put_map_assoc;
- exact -> put_map_exact
- end,
- {Sis++[Line]++[{I,Fail,SrcReg,Target,Live,{list,List}}],Aft,St};
+ {Is,St1} = set_cg_map(Line, Op, SrcReg, Target, Live, List, St0),
+ {Sis++Is,Aft,St1};
-% Map (possibly) multiple literal keys
-set_cg([{var,R}], {map,Op,Map,Es}, Le, Vdb, Bef,
- #cg{bfail=Bfail}=St) ->
+%% Map: (possibly) multiple literal keys.
+set_cg([{var,R}], {map,Op,Map,Es}, Le, Vdb, Bef, St0) ->
%% assert key literals
[] = [Var||{map_pair,{var,_}=Var,_} <- Es],
- Fail = {f,Bfail},
- {Sis,Int0} = maybe_adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb, St),
- SrcReg = cg_reg_arg(Map,Int0),
+ {Sis,Int0} = maybe_adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb, St0),
+ SrcReg = cg_reg_arg_prefer_y(Map, Int0),
Line = line(Le#l.a),
%% fetch registers for values to be put into the map
@@ -1583,11 +1592,10 @@ set_cg([{var,R}], {map,Op,Map,Es}, Le, Vdb, Bef,
Aft = Aft0#sr{reg=put_reg(R, Aft0#sr.reg)},
Target = fetch_reg(R, Aft#sr.reg),
- I = case Op of
- assoc -> put_map_assoc;
- exact -> put_map_exact
- end,
- {Sis++[Line]++[{I,Fail,SrcReg,Target,Live,{list,List}}],Aft,St};
+ {Is,St1} = set_cg_map(Line, Op, SrcReg, Target, Live, List, St0),
+ {Sis++Is,Aft,St1};
+
+%% Everything else.
set_cg([{var,R}], Con, Le, Vdb, Bef, St) ->
%% Find a place for the return register first.
Int = Bef#sr{reg=put_reg(R, Bef#sr.reg)},
@@ -1600,6 +1608,34 @@ set_cg([{var,R}], Con, Le, Vdb, Bef, St) ->
end,
{Ais,clear_dead(Int, Le#l.i, Vdb),St}.
+
+set_cg_map(Line, Op0, SrcReg, Target, Live, List, St0) ->
+ Bfail = St0#cg.bfail,
+ Fail = {f,St0#cg.bfail},
+ Op = case Op0 of
+ assoc -> put_map_assoc;
+ exact -> put_map_exact
+ end,
+ {OkLbl,St1} = new_label(St0),
+ {BadLbl,St2} = new_label(St1),
+ Is = if
+ Bfail =:= 0 orelse Op =:= put_map_assoc ->
+ [Line,{Op,{f,0},SrcReg,Target,Live,{list,List}}];
+ true ->
+ %% Ensure that Target is always set, even if
+ %% the map update operation fails. That is necessary
+ %% because Target may be included in a test_heap
+ %% instruction.
+ [Line,
+ {Op,{f,BadLbl},SrcReg,Target,Live,{list,List}},
+ {jump,{f,OkLbl}},
+ {label,BadLbl},
+ {move,{atom,ok},Target},
+ {jump,Fail},
+ {label,OkLbl}]
+ end,
+ {Is,St2}.
+
%%%
%%% Code generation for constructing binaries.
%%%
@@ -1842,6 +1878,9 @@ cg_reg_args(As, Bef) -> [cg_reg_arg(A, Bef) || A <- As].
cg_reg_arg({var,V}, Bef) -> fetch_var(V, Bef);
cg_reg_arg(Literal, _) -> Literal.
+cg_reg_arg_prefer_y({var,V}, Bef) -> fetch_var_prefer_y(V, Bef);
+cg_reg_arg_prefer_y(Literal, _) -> Literal.
+
%% cg_setup_call([Arg], Bef, Cur, Vdb) -> {[Instr],Aft}.
%% Do the complete setup for a call/enter.
@@ -2083,6 +2122,12 @@ fetch_var(V, Sr) ->
error -> fetch_stack(V, Sr#sr.stk)
end.
+fetch_var_prefer_y(V, #sr{reg=Reg,stk=Stk}) ->
+ case find_stack(V, Stk) of
+ {ok,R} -> R;
+ error -> fetch_reg(V, Reg)
+ end.
+
load_vars(Vs, Regs) ->
foldl(fun ({var,V}, Rs) -> put_reg(V, Rs) end, Regs, Vs).
@@ -2156,11 +2201,11 @@ fetch_stack(Var, Stk) -> fetch_stack(Var, Stk, 0).
fetch_stack(V, [{V}|_], I) -> {yy,I};
fetch_stack(V, [_|Stk], I) -> fetch_stack(V, Stk, I+1).
-% find_stack(Var, Stk) -> find_stack(Var, Stk, 0).
+find_stack(Var, Stk) -> find_stack(Var, Stk, 0).
-% find_stack(V, [{V}|Stk], I) -> {ok,{yy,I}};
-% find_stack(V, [O|Stk], I) -> find_stack(V, Stk, I+1);
-% find_stack(V, [], I) -> error.
+find_stack(V, [{V}|_], I) -> {ok,{yy,I}};
+find_stack(V, [_|Stk], I) -> find_stack(V, Stk, I+1);
+find_stack(_, [], _) -> error.
on_stack(V, Stk) -> keymember(V, 1, Stk).
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index 7d93e2ae16..d71411de80 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -469,7 +469,8 @@ unforce_tree([#iset{var=#c_var{name=V},arg=Arg0}|Es], D0) ->
unforce_tree(Es, D);
unforce_tree([#icall{}=Call], D) ->
unforce_tree_subst(Call, D);
-unforce_tree([Top], _) -> Top.
+unforce_tree([#c_var{name=V}], D) ->
+ gb_trees:get(V, D).
unforce_tree_subst(#icall{module=#c_literal{val=erlang},
name=#c_literal{val='=:='},
@@ -680,9 +681,36 @@ expr({match,L,P0,E0}, St0) ->
Fc = fail_clause([Fpat], Lanno, c_tuple([#c_literal{val=badmatch},Fpat])),
case P2 of
nomatch ->
- St = add_warning(L, nomatch, St5),
- {#icase{anno=#a{anno=Lanno},
- args=[E2],clauses=[],fc=Fc},Eps1++Eps2,St};
+ %% The pattern will not match. We must take care here to
+ %% bind all variables that the pattern would have bound
+ %% so that subsequent expressions do not refer to unbound
+ %% variables.
+ %%
+ %% As an example, this code:
+ %%
+ %% [X] = {Y} = E,
+ %% X + Y.
+ %%
+ %% will be rewritten to:
+ %%
+ %% error({badmatch,E}),
+ %% case E of
+ %% {[X],{Y}} ->
+ %% X + Y;
+ %% Other ->
+ %% error({badmatch,Other})
+ %% end.
+ %%
+ St6 = add_warning(L, nomatch, St5),
+ {Expr,Eps3,St7} = safe(E1, St6),
+ SanPat0 = sanitize(P1),
+ {SanPat,Eps4,St} = pattern(SanPat0, St7),
+ Badmatch = c_tuple([#c_literal{val=badmatch},Expr]),
+ Fail = #iprimop{anno=#a{anno=Lanno},
+ name=#c_literal{val=match_fail},
+ args=[Badmatch]},
+ Eps = Eps3 ++ Eps4 ++ [Fail],
+ {#imatch{anno=#a{anno=Lanno},pat=SanPat,arg=Expr,fc=Fc},Eps,St};
Other when not is_atom(Other) ->
{#imatch{anno=#a{anno=Lanno},pat=P2,arg=E2,fc=Fc},Eps1++Eps2,St5}
end;
@@ -724,6 +752,32 @@ expr({op,L,Op,L0,R0}, St0) ->
module=#c_literal{anno=LineAnno,val=erlang},
name=#c_literal{anno=LineAnno,val=Op},args=As},Aps,St1}.
+
+%% sanitize(Pat) -> SanitizedPattern
+%% Rewrite Pat so that it will be accepted by pattern/2 and will
+%% bind the same variables as the original pattern.
+%%
+%% Here is an example of a pattern that would cause a pattern/2
+%% to generate a 'nomatch' exception:
+%%
+%% #{k:=X,k:=Y} = [Z]
+%%
+%% The sanitized pattern will look like:
+%%
+%% {{X,Y},[Z]}
+
+sanitize({match,L,P1,P2}) ->
+ {tuple,L,[sanitize(P1),sanitize(P2)]};
+sanitize({cons,L,H,T}) ->
+ {cons,L,sanitize(H),sanitize(T)};
+sanitize({tuple,L,Ps0}) ->
+ Ps = [sanitize(P) || P <- Ps0],
+ {tuple,L,Ps};
+sanitize({map,L,Ps0}) ->
+ Ps = [sanitize(V) || {map_field_exact,_,_,V} <- Ps0],
+ {tuple,L,Ps};
+sanitize(P) -> P.
+
make_bool_switch(L, E, V, T, F, #core{in_guard=true}) ->
make_bool_switch_guard(L, E, V, T, F);
make_bool_switch(L, E, V, T, F, #core{}) ->
@@ -783,7 +837,7 @@ badmap_term(_Map, #core{in_guard=true}) ->
%% since it is not user-visible.
#c_literal{val=badmap};
badmap_term(Map, #core{in_guard=false}) ->
- #c_tuple{es=[#c_literal{val=badmap},Map]}.
+ c_tuple([#c_literal{val=badmap},Map]).
map_build_pairs(Map, Es0, Ann, St0) ->
{Es,Pre,St1} = map_build_pairs_1(Es0, St0),
@@ -814,12 +868,16 @@ try_exception(Ecs0, St0) ->
{Evs,St1} = new_vars(3, St0), % Tag, Value, Info
{Ecs1,Ceps,St2} = clauses(Ecs0, St1),
[_,Value,Info] = Evs,
- Ec = #iclause{anno=#a{anno=[compiler_generated]},
+ LA = case Ecs1 of
+ [] -> [];
+ [C|_] -> get_lineno_anno(C)
+ end,
+ Ec = #iclause{anno=#a{anno=[compiler_generated|LA]},
pats=[c_tuple(Evs)],guard=[#c_literal{val=true}],
body=[#iprimop{anno=#a{}, %Must have an #a{}
name=#c_literal{val=raise},
args=[Info,Value]}]},
- Hs = [#icase{anno=#a{},args=[c_tuple(Evs)],clauses=Ecs1,fc=Ec}],
+ Hs = [#icase{anno=#a{anno=LA},args=[c_tuple(Evs)],clauses=Ecs1,fc=Ec}],
{Evs,Ceps++Hs,St2}.
try_after(As, St0) ->
@@ -1079,13 +1137,39 @@ bc_tq1(Line, E, [#igen{anno=GAnno,ceps=Ceps,
bc_tq1(Line, E, [#ifilter{}=Filter|Qs], Mc, St) ->
filter_tq(Line, E, Filter, Mc, St, Qs, fun bc_tq1/5);
bc_tq1(_, {bin,Bl,Elements}, [], AccVar, St0) ->
- {E,Pre,St} = expr({bin,Bl,[{bin_element,Bl,
- {var,Bl,AccVar#c_var.name},
- {atom,Bl,all},
- [binary,{unit,1}]}|Elements]}, St0),
+ bc_tq_build(Bl, [], AccVar, Elements, St0);
+bc_tq1(Line, E0, [], AccVar, St0) ->
+ BsFlags = [binary,{unit,1}],
+ BsSize = {atom,Line,all},
+ {E1,Pre0,St1} = safe(E0, St0),
+ case E1 of
+ #c_var{name=VarName} ->
+ Var = {var,Line,VarName},
+ Els = [{bin_element,Line,Var,BsSize,BsFlags}],
+ bc_tq_build(Line, Pre0, AccVar, Els, St1);
+ #c_literal{val=Val} when is_bitstring(Val) ->
+ Bits = bit_size(Val),
+ <<Int0:Bits>> = Val,
+ Int = {integer,Line,Int0},
+ Sz = {integer,Line,Bits},
+ Els = [{bin_element,Line,Int,Sz,[integer,{unit,1},big]}],
+ bc_tq_build(Line, Pre0, AccVar, Els, St1);
+ _ ->
+ %% Any other safe (cons, tuple, literal) is not a
+ %% bitstring. Force the evaluation to fail (and
+ %% generate a warning).
+ Els = [{bin_element,Line,{atom,Line,bad_value},BsSize,BsFlags}],
+ bc_tq_build(Line, Pre0, AccVar, Els, St1)
+ end.
+
+bc_tq_build(Line, Pre0, #c_var{name=AccVar}, Elements0, St0) ->
+ Elements = [{bin_element,Line,{var,Line,AccVar},{atom,Line,all},
+ [binary,{unit,1}]}|Elements0],
+ {E,Pre,St} = expr({bin,Line,Elements}, St0),
#a{anno=A} = Anno0 = get_anno(E),
Anno = Anno0#a{anno=[compiler_generated,single_use|A]},
- {set_anno(E, Anno),Pre,St}.
+ {set_anno(E, Anno),Pre0++Pre,St}.
+
%% filter_tq(Line, Expr, Filter, Mc, State, [Qualifier], TqFun) ->
%% {Case,[PreExpr],State}.
@@ -1306,7 +1390,9 @@ bc_elem_size({bin,_,El}, St0) ->
Vs = [V || {_,#c_var{name=V}} <- Vars0],
{E,Pre,St} = bc_mul_pairs(F, #c_literal{val=Bits}, [], St0),
{E,Pre,Vs,St}
- end.
+ end;
+bc_elem_size(_, _) ->
+ throw(impossible).
bc_elem_size_1([{bin_element,_,_,{integer,_,N},Flags}|Es], Bits, Vars) ->
{unit,U} = keyfind(unit, 1, Flags),
@@ -1652,10 +1738,12 @@ pat_alias_map_pairs_1([]) -> [].
pat_bin(Ps, St) -> [pat_segment(P, St) || P <- Ps].
-pat_segment({bin_element,_,Val,Size,[Type,{unit,Unit}|Flags]}, St) ->
+pat_segment({bin_element,L,Val,Size,[Type,{unit,Unit}|Flags]}, St) ->
+ Anno = lineno_anno(L, St),
{Pval,[],St1} = pattern(Val,St),
{Psize,[],_St2} = pattern(Size,St1),
- #c_bitstr{val=Pval,size=Psize,
+ #c_bitstr{anno=Anno,
+ val=Pval,size=Psize,
unit=#c_literal{val=Unit},
type=#c_literal{val=Type},
flags=#c_literal{val=Flags}}.
@@ -1852,27 +1940,22 @@ uguard(Pg, Gs0, Ks, St0) ->
%% uexprs([Kexpr], [KnownVar], State) -> {[Kexpr],State}.
uexprs([#imatch{anno=A,pat=P0,arg=Arg,fc=Fc}|Les], Ks, St0) ->
- %% Optimise for simple set of unbound variable.
- case upattern(P0, Ks, St0) of
- {#c_var{},[],_Pvs,_Pus,_} ->
- %% Throw our work away and just set to iset.
+ case upat_is_new_var(P0, Ks) of
+ true ->
+ %% Assignment to a new variable.
uexprs([#iset{var=P0,arg=Arg}|Les], Ks, St0);
- _Other ->
- %% Throw our work away and set to icase.
- if
- Les =:= [] ->
- %% Need to explicitly return match "value", make
- %% safe for efficiency.
- {La0,Lps,St1} = force_safe(Arg, St0),
- La = mark_compiler_generated(La0),
- Mc = #iclause{anno=A,pats=[P0],guard=[],body=[La]},
- uexprs(Lps ++ [#icase{anno=A,
- args=[La0],clauses=[Mc],fc=Fc}], Ks, St1);
- true ->
- Mc = #iclause{anno=A,pats=[P0],guard=[],body=Les},
- uexprs([#icase{anno=A,args=[Arg],
- clauses=[Mc],fc=Fc}], Ks, St0)
- end
+ false when Les =:= [] ->
+ %% Need to explicitly return match "value", make
+ %% safe for efficiency.
+ {La0,Lps,St1} = force_safe(Arg, St0),
+ La = mark_compiler_generated(La0),
+ Mc = #iclause{anno=A,pats=[P0],guard=[],body=[La]},
+ uexprs(Lps ++ [#icase{anno=A,
+ args=[La0],clauses=[Mc],fc=Fc}], Ks, St1);
+ false ->
+ Mc = #iclause{anno=A,pats=[P0],guard=[],body=Les},
+ uexprs([#icase{anno=A,args=[Arg],
+ clauses=[Mc],fc=Fc}], Ks, St0)
end;
uexprs([Le0|Les0], Ks, St0) ->
{Le1,St1} = uexpr(Le0, Ks, St0),
@@ -1880,6 +1963,15 @@ uexprs([Le0|Les0], Ks, St0) ->
{[Le1|Les1],St2};
uexprs([], _, St) -> {[],St}.
+%% upat_is_new_var(Pattern, [KnownVar]) -> true|false.
+%% Test whether the pattern is a single, previously unknown
+%% variable.
+
+upat_is_new_var(#c_var{name=V}, Ks) ->
+ not is_element(V, Ks);
+upat_is_new_var(_, _) ->
+ false.
+
%% Mark a "safe" as compiler-generated.
mark_compiler_generated(#c_cons{anno=A,hd=H,tl=T}) ->
ann_c_cons([compiler_generated|A], mark_compiler_generated(H),
@@ -2010,7 +2102,8 @@ upattern(#c_var{name=V}=Var, Ks, St0) ->
true ->
{N,St1} = new_var_name(St0),
New = #c_var{name=N},
- Test = #icall{anno=#a{us=add_element(N, [V])},
+ LA = get_lineno_anno(Var),
+ Test = #icall{anno=#a{anno=LA,us=add_element(N, [V])},
module=#c_literal{val=erlang},
name=#c_literal{val='=:='},
args=[New,Var]},
diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl
index 7ee564683b..b4bbc5e739 100644
--- a/lib/compiler/src/v3_kernel.erl
+++ b/lib/compiler/src/v3_kernel.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -117,7 +117,7 @@ copy_anno(Kdst, Ksrc) ->
fcount=0, %Fun counter
ds=cerl_sets:new() :: cerl_sets:set(), %Defined variables
funs=[], %Fun functions
- free=[], %Free variables
+ free=#{}, %Free variables
ws=[] :: [warning()], %Warnings.
guard_refc=0}). %> 0 means in guard
@@ -143,8 +143,11 @@ attributes([]) -> [].
include_attribute(type) -> false;
include_attribute(spec) -> false;
+include_attribute(callback) -> false;
include_attribute(opaque) -> false;
include_attribute(export_type) -> false;
+include_attribute(record) -> false;
+include_attribute(optional_callbacks) -> false;
include_attribute(_) -> true.
function({#c_var{name={F,Arity}=FA},Body}, St0) ->
@@ -239,7 +242,7 @@ gexpr_test_add(Ke, St0) ->
expr(#c_var{anno=A,name={_Name,Arity}}=Fname, Sub, St) ->
%% A local in an expression.
%% For now, these are wrapped into a fun by reverse
- %% etha-conversion, but really, there should be exactly one
+ %% eta-conversion, but really, there should be exactly one
%% such "lambda function" for each escaping local name,
%% instead of one for each occurrence as done now.
Vs = [#c_var{name=list_to_atom("V" ++ integer_to_list(V))} ||
@@ -399,7 +402,7 @@ expr(#c_call{anno=A,module=M0,name=F0,args=Cargs}, Sub, St0) ->
Call = #c_call{anno=A,
module=#c_literal{val=erlang},
name=#c_literal{val=apply},
- args=[M0,F0,make_list(Cargs)]},
+ args=[M0,F0,cerl:make_list(Cargs)]},
expr(Call, Sub, St1);
_ ->
{[M1,F1|Kargs],Ap,St} = atomic_list([M0,F0|Cargs], Sub, St1),
@@ -494,7 +497,7 @@ translate_match_fail_1(Anno, As, Sub, #kern{ff=FF}) ->
end.
translate_fc(Args) ->
- [#c_literal{val=function_clause},make_list(Args)].
+ [#c_literal{val=function_clause},cerl:make_list(Args)].
expr_map(A,Var0,Ces,Sub,St0) ->
{Var,Mps,St1} = expr(Var0, Sub, St0),
@@ -1837,14 +1840,17 @@ handle_reuse_anno_1(V, _St) -> V.
%% get_free(Name, Arity, State) -> [Free].
%% store_free(Name, Arity, [Free], State) -> State.
-get_free(F, A, St) ->
- case orddict:find({F,A}, St#kern.free) of
- {ok,Val} -> Val;
- error -> []
+get_free(F, A, #kern{free=FreeMap}) ->
+ Key = {F,A},
+ case FreeMap of
+ #{Key:=Val} -> Val;
+ _ -> []
end.
-store_free(F, A, Free, St) ->
- St#kern{free=orddict:store({F,A}, Free, St#kern.free)}.
+store_free(F, A, Free, #kern{free=FreeMap0}=St) ->
+ Key = {F,A},
+ FreeMap = FreeMap0#{Key=>Free},
+ St#kern{free=FreeMap}.
break_rets({break,Rs}) -> Rs;
break_rets(return) -> [].
@@ -1983,11 +1989,6 @@ pat_list_vars(Ps) ->
{union(Used0, Used),union(New0, New)} end,
{[],[]}, Ps).
-make_list(Es) ->
- foldr(fun(E, Acc) ->
- #c_cons{hd=E,tl=Acc}
- end, #c_literal{val=[]}, Es).
-
%% List of integers in interval [N,M]. Empty list if N > M.
integers(N, M) when N =< M ->
diff --git a/lib/compiler/src/v3_kernel.hrl b/lib/compiler/src/v3_kernel.hrl
index 03b2eae006..5216a1a620 100644
--- a/lib/compiler/src/v3_kernel.hrl
+++ b/lib/compiler/src/v3_kernel.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/v3_kernel_pp.erl b/lib/compiler/src/v3_kernel_pp.erl
index 03b034ae98..0b90f0a1e0 100644
--- a/lib/compiler/src/v3_kernel_pp.erl
+++ b/lib/compiler/src/v3_kernel_pp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/v3_life.erl b/lib/compiler/src/v3_life.erl
index fa057ae211..1452b78d1d 100644
--- a/lib/compiler/src/v3_life.erl
+++ b/lib/compiler/src/v3_life.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/src/v3_life.hrl b/lib/compiler/src/v3_life.hrl
index 29a08f8c72..9d03a86ccd 100644
--- a/lib/compiler/src/v3_life.hrl
+++ b/lib/compiler/src/v3_life.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/Makefile b/lib/compiler/test/Makefile
index 6553d10077..f0185acbc7 100644
--- a/lib/compiler/test/Makefile
+++ b/lib/compiler/test/Makefile
@@ -8,10 +8,16 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
MODULES= \
andor_SUITE \
apply_SUITE \
+ beam_block_SUITE \
+ beam_bool_SUITE \
beam_validator_SUITE \
beam_disasm_SUITE \
beam_except_SUITE \
+ beam_jump_SUITE \
+ beam_reorder_SUITE \
+ beam_type_SUITE \
beam_utils_SUITE \
+ bif_SUITE \
bs_bincomp_SUITE \
bs_bit_binaries_SUITE \
bs_construct_SUITE \
@@ -42,8 +48,14 @@ MODULES= \
NO_OPT= \
andor \
apply \
+ beam_block \
+ beam_bool \
beam_except \
+ beam_jump \
+ beam_reorder \
+ beam_type \
beam_utils \
+ bif \
bs_construct \
bs_match \
bs_utf \
@@ -63,6 +75,8 @@ NO_OPT= \
INLINE= \
andor \
apply \
+ beam_block \
+ beam_bool \
beam_utils \
bs_bincomp \
bs_bit_binaries \
@@ -105,7 +119,7 @@ RELSYSDIR = $(RELEASE_PATH)/compiler_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include +clint +clint0
+ERL_COMPILE_FLAGS += +clint +clint0
EBIN = .
diff --git a/lib/compiler/test/andor_SUITE.erl b/lib/compiler/test/andor_SUITE.erl
index fae9597c8a..05c087104d 100644
--- a/lib/compiler/test/andor_SUITE.erl
+++ b/lib/compiler/test/andor_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,10 +22,9 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
t_case/1,t_and_or/1,t_andalso/1,t_orelse/1,inside/1,overlap/1,
- combined/1,in_case/1,before_and_inside_if/1,
- slow_compilation/1]).
+ combined/1,in_case/1,slow_compilation/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -36,7 +35,7 @@ all() ->
groups() ->
[{p,[parallel],
[t_case,t_and_or,t_andalso,t_orelse,inside,overlap,
- combined,in_case,before_and_inside_if]}].
+ combined,in_case,slow_compilation]}].
init_per_suite(Config) ->
Config.
@@ -54,28 +53,28 @@ end_per_group(_GroupName, Config) ->
t_case(Config) when is_list(Config) ->
%% We test boolean cases almost but not quite like cases
%% generated by andalso/orelse.
- ?line less = t_case_a(1, 2),
- ?line not_less = t_case_a(2, 2),
- ?line {'EXIT',{{case_clause,false},_}} = (catch t_case_b({x,y,z}, 2)),
- ?line {'EXIT',{{case_clause,true},_}} = (catch t_case_b(a, a)),
- ?line eq = t_case_c(a, a),
- ?line ne = t_case_c(42, []),
- ?line t = t_case_d(x, x, true),
- ?line f = t_case_d(x, x, false),
- ?line f = t_case_d(x, y, true),
- ?line {'EXIT',{badarg,_}} = (catch t_case_d(x, y, blurf)),
- ?line true = (catch t_case_e({a,b}, {a,b})),
- ?line false = (catch t_case_e({a,b}, 42)),
-
- ?line true = t_case_xy(42, 100, 700),
- ?line true = t_case_xy(42, 100, whatever),
- ?line false = t_case_xy(42, wrong, 700),
- ?line false = t_case_xy(42, wrong, whatever),
-
- ?line true = t_case_xy(0, whatever, 700),
- ?line true = t_case_xy(0, 100, 700),
- ?line false = t_case_xy(0, whatever, wrong),
- ?line false = t_case_xy(0, 100, wrong),
+ less = t_case_a(1, 2),
+ not_less = t_case_a(2, 2),
+ {'EXIT',{{case_clause,false},_}} = (catch t_case_b({x,y,z}, 2)),
+ {'EXIT',{{case_clause,true},_}} = (catch t_case_b(a, a)),
+ eq = t_case_c(a, a),
+ ne = t_case_c(42, []),
+ t = t_case_d(x, x, true),
+ f = t_case_d(x, x, false),
+ f = t_case_d(x, y, true),
+ {'EXIT',{badarg,_}} = (catch t_case_d(x, y, blurf)),
+ true = (catch t_case_e({a,b}, {a,b})),
+ false = (catch t_case_e({a,b}, 42)),
+
+ true = t_case_xy(42, 100, 700),
+ true = t_case_xy(42, 100, whatever),
+ false = t_case_xy(42, wrong, 700),
+ false = t_case_xy(42, wrong, whatever),
+
+ true = t_case_xy(0, whatever, 700),
+ true = t_case_xy(0, 100, 700),
+ false = t_case_xy(0, whatever, wrong),
+ false = t_case_xy(0, 100, wrong),
ok.
@@ -135,35 +134,35 @@ t_case_y(X, Y, Z) ->
end).
t_and_or(Config) when is_list(Config) ->
- ?line true = true and true,
- ?line false = true and false,
- ?line false = false and true,
- ?line false = false and false,
-
- ?line true = id(true) and true,
- ?line false = id(true) and false,
- ?line false = id(false) and true,
- ?line false = id(false) and false,
-
- ?line true = true and id(true),
- ?line false = true and id(false),
- ?line false = false and id(true),
- ?line false = false and id(false),
-
- ?line true = true or true,
- ?line true = true or false,
- ?line true = false or true,
- ?line false = false or false,
-
- ?line true = id(true) or true,
- ?line true = id(true) or false,
- ?line true = id(false) or true,
- ?line false = id(false) or false,
-
- ?line true = true or id(true),
- ?line true = true or id(false),
- ?line true = false or id(true),
- ?line false = false or id(false),
+ true = true and true,
+ false = true and false,
+ false = false and true,
+ false = false and false,
+
+ true = id(true) and true,
+ false = id(true) and false,
+ false = id(false) and true,
+ false = id(false) and false,
+
+ true = true and id(true),
+ false = true and id(false),
+ false = false and id(true),
+ false = false and id(false),
+
+ true = true or true,
+ true = true or false,
+ true = false or true,
+ false = false or false,
+
+ true = id(true) or true,
+ true = id(true) or false,
+ true = id(false) or true,
+ false = id(false) or false,
+
+ true = true or id(true),
+ true = true or id(false),
+ true = false or id(true),
+ false = false or id(false),
True = id(true),
@@ -187,28 +186,28 @@ t_andalso(Config) when is_list(Config) ->
Ps = [{X,Y} || X <- Bs, Y <- Bs],
lists:foreach(fun (P) -> t_andalso_1(P) end, Ps),
- ?line true = true andalso true,
- ?line false = true andalso false,
- ?line false = false andalso true,
- ?line false = false andalso false,
+ true = true andalso true,
+ false = true andalso false,
+ false = false andalso true,
+ false = false andalso false,
- ?line true = ?GUARD(true andalso true),
- ?line false = ?GUARD(true andalso false),
- ?line false = ?GUARD(false andalso true),
- ?line false = ?GUARD(false andalso false),
+ true = ?GUARD(true andalso true),
+ false = ?GUARD(true andalso false),
+ false = ?GUARD(false andalso true),
+ false = ?GUARD(false andalso false),
- ?line false = false andalso glurf,
- ?line false = false andalso exit(exit_now),
+ false = false andalso glurf,
+ false = false andalso exit(exit_now),
- ?line true = not id(false) andalso not id(false),
- ?line false = not id(false) andalso not id(true),
- ?line false = not id(true) andalso not id(false),
- ?line false = not id(true) andalso not id(true),
+ true = not id(false) andalso not id(false),
+ false = not id(false) andalso not id(true),
+ false = not id(true) andalso not id(false),
+ false = not id(true) andalso not id(true),
- ?line {'EXIT',{badarg,_}} = (catch not id(glurf) andalso id(true)),
- ?line {'EXIT',{badarg,_}} = (catch not id(false) andalso not id(glurf)),
- ?line false = id(false) andalso not id(glurf),
- ?line false = false andalso not id(glurf),
+ {'EXIT',{badarg,_}} = (catch not id(glurf) andalso id(true)),
+ {'EXIT',{badarg,_}} = (catch not id(false) andalso not id(glurf)),
+ false = id(false) andalso not id(glurf),
+ false = false andalso not id(glurf),
true = begin (X1 = true) andalso X1, X1 end,
false = false = begin (X2 = false) andalso X2, X2 end,
@@ -220,28 +219,28 @@ t_orelse(Config) when is_list(Config) ->
Ps = [{X,Y} || X <- Bs, Y <- Bs],
lists:foreach(fun (P) -> t_orelse_1(P) end, Ps),
- ?line true = true orelse true,
- ?line true = true orelse false,
- ?line true = false orelse true,
- ?line false = false orelse false,
+ true = true orelse true,
+ true = true orelse false,
+ true = false orelse true,
+ false = false orelse false,
- ?line true = ?GUARD(true orelse true),
- ?line true = ?GUARD(true orelse false),
- ?line true = ?GUARD(false orelse true),
- ?line false = ?GUARD(false orelse false),
+ true = ?GUARD(true orelse true),
+ true = ?GUARD(true orelse false),
+ true = ?GUARD(false orelse true),
+ false = ?GUARD(false orelse false),
- ?line true = true orelse glurf,
- ?line true = true orelse exit(exit_now),
+ true = true orelse glurf,
+ true = true orelse exit(exit_now),
- ?line true = not id(false) orelse not id(false),
- ?line true = not id(false) orelse not id(true),
- ?line true = not id(true) orelse not id(false),
- ?line false = not id(true) orelse not id(true),
+ true = not id(false) orelse not id(false),
+ true = not id(false) orelse not id(true),
+ true = not id(true) orelse not id(false),
+ false = not id(true) orelse not id(true),
- ?line {'EXIT',{badarg,_}} = (catch not id(glurf) orelse id(true)),
- ?line {'EXIT',{badarg,_}} = (catch not id(true) orelse not id(glurf)),
- ?line true = id(true) orelse not id(glurf),
- ?line true = true orelse not id(glurf),
+ {'EXIT',{badarg,_}} = (catch not id(glurf) orelse id(true)),
+ {'EXIT',{badarg,_}} = (catch not id(true) orelse not id(glurf)),
+ true = id(true) orelse not id(glurf),
+ true = true orelse not id(glurf),
true = begin (X1 = true) orelse X1, X1 end,
false = begin (X2 = false) orelse X2, X2 end,
@@ -255,7 +254,7 @@ t_andalso_1({X,Y}) ->
X andalso Y -> true;
true -> false
end,
- check(V1, X and Y).
+ V1 = id(X and Y).
t_orelse_1({X,Y}) ->
io:fwrite("~w orelse ~w: ",[X,Y]),
@@ -264,19 +263,19 @@ t_orelse_1({X,Y}) ->
X orelse Y -> true;
true -> false
end,
- check(V1, X or Y).
+ V1 = id(X or Y).
inside(Config) when is_list(Config) ->
- ?line true = inside(-8, 1),
- ?line false = inside(-53.5, -879798),
- ?line false = inside(1.0, -879),
- ?line false = inside(59, -879),
- ?line false = inside(-11, 1.0),
- ?line false = inside(100, 0.2),
- ?line false = inside(100, 1.2),
- ?line false = inside(-53.5, 4),
- ?line false = inside(1.0, 5.3),
- ?line false = inside(59, 879),
+ true = inside(-8, 1),
+ false = inside(-53.5, -879798),
+ false = inside(1.0, -879),
+ false = inside(59, -879),
+ false = inside(-11, 1.0),
+ false = inside(100, 0.2),
+ false = inside(100, 1.2),
+ false = inside(-53.5, 4),
+ false = inside(1.0, 5.3),
+ false = inside(59, 879),
ok.
inside(Xm, Ym) ->
@@ -311,15 +310,15 @@ inside_guard(Xm, Ym, X, Y, W, H) ->
{false,Xm,Ym,X,Y,W,H}.
overlap(Config) when is_list(Config) ->
- ?line true = overlap(7.0, 2.0, 8.0, 0.5),
- ?line true = overlap(7.0, 2.0, 8.0, 2.5),
- ?line true = overlap(7.0, 2.0, 5.3, 2),
- ?line true = overlap(7.0, 2.0, 0.0, 100.0),
-
- ?line false = overlap(-1, 2, -35, 0.5),
- ?line false = overlap(-1, 2, 777, 0.5),
- ?line false = overlap(-1, 2, 2, 10),
- ?line false = overlap(2, 10, 12, 55.3),
+ true = overlap(7.0, 2.0, 8.0, 0.5),
+ true = overlap(7.0, 2.0, 8.0, 2.5),
+ true = overlap(7.0, 2.0, 5.3, 2),
+ true = overlap(7.0, 2.0, 0.0, 100.0),
+
+ false = overlap(-1, 2, -35, 0.5),
+ false = overlap(-1, 2, 777, 0.5),
+ false = overlap(-1, 2, 2, 10),
+ false = overlap(2, 10, 12, 55.3),
ok.
overlap(Pos1, Len1, Pos2, Len2) ->
@@ -343,33 +342,33 @@ overlap(Pos1, Len1, Pos2, Len2) ->
-define(COMB(A,B,C), (A andalso B orelse C)).
combined(Config) when is_list(Config) ->
- ?line false = comb(false, false, false),
- ?line true = comb(false, false, true),
- ?line false = comb(false, true, false),
- ?line true = comb(false, true, true),
-
- ?line false = comb(true, false, false),
- ?line true = comb(true, true, false),
- ?line true = comb(true, false, true),
- ?line true = comb(true, true, true),
-
- ?line false = comb(false, blurf, false),
- ?line true = comb(false, blurf, true),
- ?line true = comb(true, true, blurf),
-
- ?line false = ?COMB(false, false, false),
- ?line true = ?COMB(false, false, true),
- ?line false = ?COMB(false, true, false),
- ?line true = ?COMB(false, true, true),
-
- ?line false = ?COMB(true, false, false),
- ?line true = ?COMB(true, true, false),
- ?line true = ?COMB(true, false, true),
- ?line true = ?COMB(true, true, true),
-
- ?line false = ?COMB(false, blurf, false),
- ?line true = ?COMB(false, blurf, true),
- ?line true = ?COMB(true, true, blurf),
+ false = comb(false, false, false),
+ true = comb(false, false, true),
+ false = comb(false, true, false),
+ true = comb(false, true, true),
+
+ false = comb(true, false, false),
+ true = comb(true, true, false),
+ true = comb(true, false, true),
+ true = comb(true, true, true),
+
+ false = comb(false, blurf, false),
+ true = comb(false, blurf, true),
+ true = comb(true, true, blurf),
+
+ false = ?COMB(false, false, false),
+ true = ?COMB(false, false, true),
+ false = ?COMB(false, true, false),
+ true = ?COMB(false, true, true),
+
+ false = ?COMB(true, false, false),
+ true = ?COMB(true, true, false),
+ true = ?COMB(true, false, true),
+ true = ?COMB(true, true, true),
+
+ false = ?COMB(false, blurf, false),
+ true = ?COMB(false, blurf, true),
+ true = ?COMB(true, true, blurf),
false = simple_comb(false, false),
false = simple_comb(false, true),
@@ -412,13 +411,13 @@ simple_comb(A, B) ->
%% Test that a boolean expression in a case expression is properly
%% optimized (in particular, that the error behaviour is correct).
in_case(Config) when is_list(Config) ->
- ?line edge_rings = in_case_1(1, 1, 1, 1, 1),
- ?line not_loop = in_case_1(0.5, 1, 1, 1, 1),
- ?line loop = in_case_1(0.5, 0.9, 1.1, 1, 4),
- ?line {'EXIT',{badarith,_}} = (catch in_case_1(1, 1, 1, 1, 0)),
- ?line {'EXIT',{badarith,_}} = (catch in_case_1(1, 1, 1, 1, nan)),
- ?line {'EXIT',{badarg,_}} = (catch in_case_1(1, 1, 1, blurf, 1)),
- ?line {'EXIT',{badarith,_}} = (catch in_case_1([nan], 1, 1, 1, 1)),
+ edge_rings = in_case_1(1, 1, 1, 1, 1),
+ not_loop = in_case_1(0.5, 1, 1, 1, 1),
+ loop = in_case_1(0.5, 0.9, 1.1, 1, 4),
+ {'EXIT',{badarith,_}} = (catch in_case_1(1, 1, 1, 1, 0)),
+ {'EXIT',{badarith,_}} = (catch in_case_1(1, 1, 1, 1, nan)),
+ {'EXIT',{badarg,_}} = (catch in_case_1(1, 1, 1, blurf, 1)),
+ {'EXIT',{badarith,_}} = (catch in_case_1([nan], 1, 1, 1, 1)),
ok.
in_case_1(LenUp, LenDw, LenN, Rotation, Count) ->
@@ -450,64 +449,6 @@ in_case_1_guard(LenUp, LenDw, LenN, Rotation, Count) ->
false -> loop
end.
-before_and_inside_if(Config) when is_list(Config) ->
- ?line no = before_and_inside_if([a], [b], delete),
- ?line no = before_and_inside_if([a], [b], x),
- ?line no = before_and_inside_if([a], [], delete),
- ?line no = before_and_inside_if([a], [], x),
- ?line no = before_and_inside_if([], [], delete),
- ?line yes = before_and_inside_if([], [], x),
- ?line yes = before_and_inside_if([], [b], delete),
- ?line yes = before_and_inside_if([], [b], x),
-
- ?line {ch1,ch2} = before_and_inside_if_2([a], [b], blah),
- ?line {ch1,ch2} = before_and_inside_if_2([a], [b], xx),
- ?line {ch1,ch2} = before_and_inside_if_2([a], [], blah),
- ?line {ch1,ch2} = before_and_inside_if_2([a], [], xx),
- ?line {no,no} = before_and_inside_if_2([], [b], blah),
- ?line {no,no} = before_and_inside_if_2([], [b], xx),
- ?line {ch1,no} = before_and_inside_if_2([], [], blah),
- ?line {no,ch2} = before_and_inside_if_2([], [], xx),
- ok.
-
-%% Thanks to Simon Cornish and Kostis Sagonas.
-%% Used to crash beam_bool.
-before_and_inside_if(XDo1, XDo2, Do3) ->
- Do1 = (XDo1 =/= []),
- Do2 = (XDo2 =/= []),
- if
- %% This expression occurs in a try/catch (protected)
- %% block, which cannot refer to variables outside of
- %% the block that are boolean expressions.
- Do1 =:= true;
- Do1 =:= false, Do2 =:= false, Do3 =:= delete ->
- no;
- true ->
- yes
- end.
-
-%% Thanks to Simon Cornish.
-%% Used to generate code that would not set {y,0} on
-%% all paths before its use (and therefore fail
-%% validation by the beam_validator).
-before_and_inside_if_2(XDo1, XDo2, Do3) ->
- Do1 = (XDo1 =/= []),
- Do2 = (XDo2 =/= []),
- CH1 = if Do1 == true;
- Do1 == false,Do2==false,Do3 == blah ->
- ch1;
- true ->
- no
- end,
- CH2 = if Do1 == true;
- Do1 == false,Do2==false,Do3 == xx ->
- ch2;
- true ->
- no
- end,
- {CH1,CH2}.
-
-
-record(state, {stack = []}).
slow_compilation(_) ->
@@ -539,14 +480,6 @@ slow_compilation_1(T, _) when element(1, T) == a ->
%% Utilities.
-check(V1, V0) ->
- if V1 /= V0 ->
- io:fwrite("error: ~w.\n", [V1]),
- ?t:fail();
- true ->
- io:fwrite("ok: ~w.\n", [V1])
- end.
-
echo(X) ->
io:fwrite("eval(~w); ",[X]),
X.
diff --git a/lib/compiler/test/apply_SUITE.erl b/lib/compiler/test/apply_SUITE.erl
index 3425553fed..cca92e4713 100644
--- a/lib/compiler/test/apply_SUITE.erl
+++ b/lib/compiler/test/apply_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@
-export([foo/0,bar/1,baz/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -53,44 +53,44 @@ end_per_group(_GroupName, Config) ->
-define(APPLY2(M, F, A1, A2), (fun(Res) -> Res = M:F(A1, A2) end)(apply(M, F, [A1,A2]))).
mfa(Config) when is_list(Config) ->
- ?line ok = ?APPLY0(?MODULE, foo),
- ?line {[a,b]} = ?APPLY1(?MODULE, bar, [a,b]),
- ?line {39,{a}} = ?APPLY2(?MODULE, baz, 39, {a}),
-
- ?line Mod = id(?MODULE),
- ?line ok = ?APPLY0(Mod, foo),
- ?line {[a,b]} = ?APPLY1(Mod, bar, [a,b]),
- ?line {39,{a}} = ?APPLY2(Mod, baz, 39, {a}),
-
- ?line ok = ?APPLY0(?MODULE, (id(foo))),
- ?line {[a,b]} = ?APPLY1(?MODULE, (id(bar)), [a,b]),
- ?line {39,{a}} = ?APPLY2(?MODULE, (id(baz)), 39, {a}),
-
- ?line ok = ?APPLY0(Mod, (id(foo))),
- ?line {[a,b]} = ?APPLY1(Mod, (id(bar)), [a,b]),
- ?line {39,{a}} = ?APPLY2(Mod, (id(baz)), 39, {a}),
-
- ?line {'EXIT',_} = (catch ?APPLY2(Mod, (id(bazzzzzz)), a, b)),
- ?line {'EXIT',_} = (catch ?APPLY2({}, baz, a, b)),
- ?line {'EXIT',_} = (catch ?APPLY2(?MODULE, [], a, b)),
-
- ?line ok = apply(Mod, foo, id([])),
- ?line {[a,b|c]} = apply(Mod, bar, id([[a,b|c]])),
- ?line {[xx],{a}} = apply(?MODULE, baz, id([[xx],{a}])),
-
- ?line Erlang = id(erlang),
- ?line Self = self(),
- ?line Self = ?APPLY0(Erlang, self),
- ?line 42.0 = ?APPLY1(Erlang, abs, -42.0),
- ?line b = ?APPLY2(Erlang, element, 2, {a,b,c}),
- ?line true = ?APPLY1(Erlang, is_function, fun erlang:list_to_binary/1),
- ?line true = ?APPLY1(Erlang, is_function, fun() -> ok end),
- ?line false = ?APPLY1(Erlang, is_function, blurf),
- ?line true = ?APPLY2(Erlang, is_function, fun erlang:list_to_binary/1, 1),
- ?line true = ?APPLY2(Erlang, is_function, fun() -> ok end, 0),
- ?line false = ?APPLY2(Erlang, is_function, blurf, 0),
-
- ?line apply(Mod, foo, []).
+ ok = ?APPLY0(?MODULE, foo),
+ {[a,b]} = ?APPLY1(?MODULE, bar, [a,b]),
+ {39,{a}} = ?APPLY2(?MODULE, baz, 39, {a}),
+
+ Mod = id(?MODULE),
+ ok = ?APPLY0(Mod, foo),
+ {[a,b]} = ?APPLY1(Mod, bar, [a,b]),
+ {39,{a}} = ?APPLY2(Mod, baz, 39, {a}),
+
+ ok = ?APPLY0(?MODULE, (id(foo))),
+ {[a,b]} = ?APPLY1(?MODULE, (id(bar)), [a,b]),
+ {39,{a}} = ?APPLY2(?MODULE, (id(baz)), 39, {a}),
+
+ ok = ?APPLY0(Mod, (id(foo))),
+ {[a,b]} = ?APPLY1(Mod, (id(bar)), [a,b]),
+ {39,{a}} = ?APPLY2(Mod, (id(baz)), 39, {a}),
+
+ {'EXIT',_} = (catch ?APPLY2(Mod, (id(bazzzzzz)), a, b)),
+ {'EXIT',_} = (catch ?APPLY2({}, baz, a, b)),
+ {'EXIT',_} = (catch ?APPLY2(?MODULE, [], a, b)),
+
+ ok = apply(Mod, foo, id([])),
+ {[a,b|c]} = apply(Mod, bar, id([[a,b|c]])),
+ {[xx],{a}} = apply(?MODULE, baz, id([[xx],{a}])),
+
+ Erlang = id(erlang),
+ Self = self(),
+ Self = ?APPLY0(Erlang, self),
+ 42.0 = ?APPLY1(Erlang, abs, -42.0),
+ b = ?APPLY2(Erlang, element, 2, {a,b,c}),
+ true = ?APPLY1(Erlang, is_function, fun erlang:list_to_binary/1),
+ true = ?APPLY1(Erlang, is_function, fun() -> ok end),
+ false = ?APPLY1(Erlang, is_function, blurf),
+ true = ?APPLY2(Erlang, is_function, fun erlang:list_to_binary/1, 1),
+ true = ?APPLY2(Erlang, is_function, fun() -> ok end, 0),
+ false = ?APPLY2(Erlang, is_function, blurf, 0),
+
+ apply(Mod, foo, []).
foo() ->
ok.
@@ -106,21 +106,21 @@ baz(A, B) ->
-define(FUNAPPLY2(F, A1, A2), (fun(Res) -> Res = F(A1, A2) end)(apply(F, [A1,A2]))).
fun_apply(Config) when is_list(Config) ->
- ?line Self = self(),
+ Self = self(),
- ?line Self = ?FUNAPPLY0(fun() -> self() end),
- ?line Self = ?FUNAPPLY0((id(fun() -> self() end))),
- ?line ok = ?FUNAPPLY0(fun ?MODULE:foo/0),
- ?line ok = ?FUNAPPLY0((id(fun ?MODULE:foo/0))),
+ Self = ?FUNAPPLY0(fun() -> self() end),
+ Self = ?FUNAPPLY0((id(fun() -> self() end))),
+ ok = ?FUNAPPLY0(fun ?MODULE:foo/0),
+ ok = ?FUNAPPLY0((id(fun ?MODULE:foo/0))),
- ?line -42 = ?FUNAPPLY1(fun(A) -> -A end, 42),
- ?line [x,yy] = ?FUNAPPLY1((id(fun(T) -> [x|T] end)), [yy]),
- ?line {[a|b]} = ?FUNAPPLY1(fun ?MODULE:bar/1, [a|b]),
- ?line {[a|b]} = ?FUNAPPLY1((id(fun ?MODULE:bar/1)), [a|b]),
+ -42 = ?FUNAPPLY1(fun(A) -> -A end, 42),
+ [x,yy] = ?FUNAPPLY1((id(fun(T) -> [x|T] end)), [yy]),
+ {[a|b]} = ?FUNAPPLY1(fun ?MODULE:bar/1, [a|b]),
+ {[a|b]} = ?FUNAPPLY1((id(fun ?MODULE:bar/1)), [a|b]),
- ?line {a,b} = ?FUNAPPLY2(fun(A, B) -> {A,B} end, a, b),
- ?line {a,[b]} = ?FUNAPPLY2((id(fun(A, B) -> {A,B} end)), a, [b]),
- ?line {42,{a}} = ?FUNAPPLY2((id(fun ?MODULE:baz/2)), 42, {a}),
+ {a,b} = ?FUNAPPLY2(fun(A, B) -> {A,B} end, a, b),
+ {a,[b]} = ?FUNAPPLY2((id(fun(A, B) -> {A,B} end)), a, [b]),
+ {42,{a}} = ?FUNAPPLY2((id(fun ?MODULE:baz/2)), 42, {a}),
ok.
diff --git a/lib/compiler/test/beam_block_SUITE.erl b/lib/compiler/test/beam_block_SUITE.erl
new file mode 100644
index 0000000000..4bcb252833
--- /dev/null
+++ b/lib/compiler/test/beam_block_SUITE.erl
@@ -0,0 +1,199 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(beam_block_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ get_map_elements/1,otp_7345/1,move_opt_across_gc_bif/1]).
+
+%% The only test for the following functions is that
+%% the code compiles and is accepted by beam_validator.
+-export([encode_wildcards3/4,find_operands/4]).
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [get_map_elements,
+ otp_7345,
+ move_opt_across_gc_bif
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+get_map_elements(_Config) ->
+ [{pred,var}] = get_map_elements([{pred,var}], #{}, []),
+ [{pred,var}] = get_map_elements([{pred,var}], #{pred=>[]}, []),
+ acc = get_map_elements([], #{pred=>[]}, acc),
+ ok.
+
+get_map_elements([{Pred,Var}|Left], Map, Acc) ->
+ case Map of
+ #{Var := List} ->
+ case lists:keyfind(Pred, 1, List) of
+ false ->
+ get_map_elements(Left, Map, [{Pred,Var}|Acc])
+ end;
+ #{} ->
+ get_map_elements(Left, Map, [{Pred,Var}|Acc])
+ end;
+get_map_elements([], _Map, Acc) ->
+ Acc.
+
+%% The following code
+%%
+%% {get_list,{x,2},{x,0},{x,1}}.
+%% {gc_bif,length,{f,0},1,[{x,0}],{x,0}}.
+%% {move,{x,0},{x,1}}.
+%%
+%% was incorrectly optimized to
+%%
+%% {get_list,{x,2},{x,0},{y,0}}.
+%% {gc_bif,length,{f,0},3,[{x,0}],{x,1}}.
+%%
+%% because beam_block:is_transparent({x,1},
+%% {gc_bif,length,{f,0},3,[{x,0}],{x,1}}
+%% incorrectly returned true.
+
+-record(contextId,{cid,device_type,contextRef}).
+-record(dpRef,{cid,tlli,ms_device_context_id}).
+-record(qosProfileBssgp,{peak_bit_rate_msb,
+ peak_bit_rate_lsb,
+ t_a_precedence}).
+-record(llUnitdataReq,{sapi,
+ l3_pdu_length,
+ pdu_life}).
+-record(ptmsi,{value}).
+
+otp_7345(_Config) ->
+ #llUnitdataReq{l3_pdu_length=3,pdu_life=4} =
+ otp_7345(#contextId{}, 0, [[1,2,3],4,5]).
+
+
+otp_7345(ObjRef, _RdEnv, Args) ->
+ Cid = ObjRef#contextId.cid,
+ _ = #dpRef{cid = Cid,
+ ms_device_context_id = cid_id,
+ tlli = #ptmsi{value = 0}},
+ _ = #qosProfileBssgp{peak_bit_rate_msb = 0,
+ peak_bit_rate_lsb = 80,
+ t_a_precedence = 49},
+ [Cpdu|_] = Args,
+ LlUnitdataReq =
+ #llUnitdataReq{sapi = 7,
+ l3_pdu_length = length(Cpdu),
+ pdu_life =
+ id(42)
+ div
+ 10},
+ id(LlUnitdataReq).
+
+
+%% Doing move optimizations across GC bifs are in general not safe.
+move_opt_across_gc_bif(_Config) ->
+ [0,true,1] = positive(speaking),
+ ok.
+
+positive(speaking) ->
+ try
+ Positive = 0,
+ [+Positive, case Positive of _ -> true end, paris([], Positive)]
+ after
+ mailing
+ end.
+
+paris([], P) -> P + 1.
+
+%%%
+%%% The only test of the following code is that it compiles.
+%%%
+
+%% Slightly simplifed from megaco_binary_term_id_gen.
+%% beam_block failed to note that the {gc_bif,'-'...} instruction could
+%% fail, and that therefore {y,0} need to be initialized.
+%% {allocate,8,6}.
+%% %% {init,{y,0}} needed here.
+%% {get_list,{x,1},{x,6},{x,7}}.
+%% {'catch',{y,7},{f,3}}.
+%% {move,{x,4},{y,1}}.
+%% {move,{x,3},{y,2}}.
+%% {move,{x,2},{y,3}}.
+%% {move,{x,5},{y,4}}.
+%% {move,{x,7},{y,5}}.
+%% {move,{x,6},{y,6}}.
+%% {gc_bif,'-',{f,0},8,[{x,3},{x,6}],{x,0}}.
+%% {move,{x,0},{y,0}}.
+
+encode_wildcards3([],[],_,_) -> [];
+encode_wildcards3([Level|Levels],[BitsInLevel|BitsRest],LevelNo,TotSize) ->
+ case (catch ?MODULE:encode_wildcard(Level,BitsInLevel,TotSize-BitsInLevel,
+ length(Levels))) of
+ {'EXIT',{Reason,Info}} ->
+ exit({Reason,{LevelNo,Info}});
+
+ no_wildcard ->
+ encode_wildcards3(Levels,BitsRest,LevelNo+1,TotSize-BitsInLevel);
+
+ {level,Wl} ->
+ [Wl|
+ encode_wildcards3(Levels,BitsRest,LevelNo+1,TotSize-BitsInLevel)];
+
+ {recursive,Wr} ->
+ [Wr]
+ end.
+
+%% Slightly simplified code from hipe_rtl_ssapre.
+%% beam_block used to do the following incorrect optimization:
+%%
+%% {gc_bif,length,{f,0},1,[{x,0}],{x,3}}.
+%% ^^^^^ Was {x,0} - changing to {x,3} is not safe.
+%% {gc_bif,'+',{f,0},0,[{y,2},{integer,1}],{x,0}}.
+%% ^^^ Only one register live
+%% . . .
+%% {call_last,4,{f,2},4}. %% beam_validator noted that {x,3} wasn't live.
+
+find_operands(Cfg,XsiGraph,[],_Count) ->
+ {Cfg,XsiGraph};
+find_operands(Cfg,XsiGraph,ActiveList,Count) ->
+ {NewCfg,TempActiveList}=?MODULE:find_operands_for_active_list(Cfg,XsiGraph,
+ ActiveList,[]),
+ NewActiveList=lists:reverse(TempActiveList),
+ [Count+1, length(NewActiveList), length(digraph:vertices(XsiGraph))],
+ find_operands(NewCfg,XsiGraph,NewActiveList,Count+1).
+
+%%%
+%%% Common functions.
+%%%
+
+id(I) -> I.
diff --git a/lib/compiler/test/beam_bool_SUITE.erl b/lib/compiler/test/beam_bool_SUITE.erl
new file mode 100644
index 0000000000..e585eaedb5
--- /dev/null
+++ b/lib/compiler/test/beam_bool_SUITE.erl
@@ -0,0 +1,197 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(beam_bool_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ before_and_inside_if/1,
+ scotland/1,y_registers/1,protected/1,
+ maps/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [before_and_inside_if,
+ scotland,
+ y_registers,
+ protected,
+ maps
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+before_and_inside_if(_Config) ->
+ no = before_and_inside_if([a], [b], delete),
+ no = before_and_inside_if([a], [b], x),
+ no = before_and_inside_if([a], [], delete),
+ no = before_and_inside_if([a], [], x),
+ no = before_and_inside_if([], [], delete),
+ yes = before_and_inside_if([], [], x),
+ yes = before_and_inside_if([], [b], delete),
+ yes = before_and_inside_if([], [b], x),
+
+ {ch1,ch2} = before_and_inside_if_2([a], [b], blah),
+ {ch1,ch2} = before_and_inside_if_2([a], [b], xx),
+ {ch1,ch2} = before_and_inside_if_2([a], [], blah),
+ {ch1,ch2} = before_and_inside_if_2([a], [], xx),
+ {no,no} = before_and_inside_if_2([], [b], blah),
+ {no,no} = before_and_inside_if_2([], [b], xx),
+ {ch1,no} = before_and_inside_if_2([], [], blah),
+ {no,ch2} = before_and_inside_if_2([], [], xx),
+ ok.
+
+%% Thanks to Simon Cornish and Kostis Sagonas.
+%% Used to crash beam_bool.
+before_and_inside_if(XDo1, XDo2, Do3) ->
+ Do1 = (XDo1 =/= []),
+ Do2 = (XDo2 =/= []),
+ if
+ %% This expression occurs in a try/catch (protected)
+ %% block, which cannot refer to variables outside of
+ %% the block that are boolean expressions.
+ Do1 =:= true;
+ Do1 =:= false, Do2 =:= false, Do3 =:= delete ->
+ no;
+ true ->
+ yes
+ end.
+
+%% Thanks to Simon Cornish.
+%% Used to generate code that would not set {y,0} on
+%% all paths before its use (and therefore fail
+%% validation by the beam_validator).
+before_and_inside_if_2(XDo1, XDo2, Do3) ->
+ Do1 = (XDo1 =/= []),
+ Do2 = (XDo2 =/= []),
+ CH1 = if Do1 == true;
+ Do1 == false,Do2==false,Do3 == blah ->
+ ch1;
+ true ->
+ no
+ end,
+ CH2 = if Do1 == true;
+ Do1 == false,Do2==false,Do3 == xx ->
+ ch2;
+ true ->
+ no
+ end,
+ {CH1,CH2}.
+
+
+%% beam_bool would remove the initialization of {y,0}.
+%% (Thanks to Thomas Arts and QuickCheck.)
+
+scotland(_Config) ->
+ million = do_scotland(placed),
+ {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(false)),
+ {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(true)),
+ {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(echo)),
+ ok.
+
+do_scotland(Echo) ->
+ found(case Echo of
+ Echo when true; Echo, Echo, Echo ->
+ Echo;
+ echo ->
+ []
+ end,
+ Echo = placed).
+
+found(_, _) -> million.
+
+
+%% ERL-143: beam_bool could not handle Y registers as a destination.
+y_registers(_Config) ->
+ {'EXIT',{badarith,[_|_]}} = (catch baker(valentine)),
+ {'EXIT',{badarith,[_|_]}} = (catch baker(clementine)),
+
+ {not_ok,true} = potter([]),
+ {ok,false} = potter([{encoding,any}]),
+
+ ok.
+
+%% Thanks to Quickcheck.
+baker(Baker) ->
+ (valentine == Baker) +
+ case Baker of
+ Baker when Baker; Baker ->
+ Baker;
+ Baker ->
+ []
+ end.
+
+%% Thanks to Jose Valim.
+potter(Modes) ->
+ Raw = lists:keyfind(encoding, 1, Modes) == false,
+ Final = case Raw of
+ X when X == false; X == nil -> ok;
+ _ -> not_ok
+ end,
+ {Final,Raw}.
+
+protected(_Config) ->
+ {'EXIT',{if_clause,_}} = (catch photographs({1, surprise, true}, opinions)),
+
+ {{true}} = welcome({perfect, true}),
+ {'EXIT',{if_clause,_}} = (catch welcome({perfect, false})),
+ ok.
+
+photographs({_Violation, surprise, Deep}, opinions) ->
+ {if
+ 0; "here", Deep ->
+ Deep = Deep
+ end}.
+
+welcome({perfect, Profit}) ->
+ if
+ Profit, Profit, Profit; 0 ->
+ {id({Profit})}
+ end.
+
+maps(_Config) ->
+ ok = evidence(#{0 => 42}).
+
+%% Cover handling of put_map in in split_block_label_used/2.
+evidence(#{0 := Charge}) when 0; #{[] => Charge} == #{[] => 42} ->
+ ok.
+
+
+%%%
+%%% Common utilities.
+%%%
+
+id(I) ->
+ I.
diff --git a/lib/compiler/test/beam_disasm_SUITE.erl b/lib/compiler/test/beam_disasm_SUITE.erl
index 4dd92e7ed9..e2ec030d31 100644
--- a/lib/compiler/test/beam_disasm_SUITE.erl
+++ b/lib/compiler/test/beam_disasm_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(beam_disasm_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
@@ -46,21 +46,20 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-stripped(doc) ->
- ["Check that stripped beam files can be disassembled"];
+%% Check that stripped beam files can be disassembled.
stripped(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line SrcName = filename:join(PrivDir, "tmp.erl"),
- ?line BeamName = filename:join(PrivDir, "tmp.beam"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SrcName = filename:join(PrivDir, "tmp.erl"),
+ BeamName = filename:join(PrivDir, "tmp.beam"),
Prog = <<"-module(tmp).\n-export([tmp/0]).\ntmp()->ok.\n">>,
- ?line ok = file:write_file(SrcName, Prog),
- ?line {ok, tmp} =
+ ok = file:write_file(SrcName, Prog),
+ {ok, tmp} =
compile:file(SrcName, [{outdir, PrivDir}]),
- ?line {beam_file, tmp, _, Attr, CompileInfo, [_|_]} =
+ {beam_file, tmp, _, Attr, CompileInfo, [_|_]} =
beam_disasm:file(BeamName),
- ?line true = is_list(Attr),
- ?line true = is_list(CompileInfo),
- ?line {ok, {tmp, _}} = beam_lib:strip(BeamName),
- ?line {beam_file, tmp, _, [], [], [_|_]} =
+ true = is_list(Attr),
+ true = is_list(CompileInfo),
+ {ok, {tmp, _}} = beam_lib:strip(BeamName),
+ {beam_file, tmp, _, [], [], [_|_]} =
beam_disasm:file(BeamName),
ok.
diff --git a/lib/compiler/test/beam_except_SUITE.erl b/lib/compiler/test/beam_except_SUITE.erl
index afacb939d1..47367d6eab 100644
--- a/lib/compiler/test/beam_except_SUITE.erl
+++ b/lib/compiler/test/beam_except_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,15 +21,18 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
- coverage/1]).
+ multiple_allocs/1,coverage/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [coverage].
+ test_lib:recompile(?MODULE),
+ [{group,p}].
groups() ->
- [].
+ [{p,[parallel],
+ [multiple_allocs,
+ coverage]}].
init_per_suite(Config) ->
Config.
@@ -43,6 +46,23 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
+multiple_allocs(_Config) ->
+ {'EXIT',{{badmatch,#{true:=[p]}},_}} =
+ (catch could(pda, 0.0, {false,true}, {p})),
+ {'EXIT',{function_clause,_}} = (catch place(lee)),
+ {'EXIT',{{badmatch,wanted},_}} = (catch conditions()),
+
+ ok.
+
+could(Coupons = pda, Favorite = _pleasure = 0.0, {_, true}, {Presents}) ->
+ (0 = true) = #{true => [Presents]}.
+
+place(lee) ->
+ (pregnancy = presentations) = [hours | [purchase || _ <- 0]] + wine.
+
+conditions() ->
+ (talking = going) = storage + [large = wanted].
+
coverage(_) ->
File = {file,"fake.erl"},
ok = fc(a),
diff --git a/lib/compiler/test/beam_jump_SUITE.erl b/lib/compiler/test/beam_jump_SUITE.erl
new file mode 100644
index 0000000000..0b13adaff2
--- /dev/null
+++ b/lib/compiler/test/beam_jump_SUITE.erl
@@ -0,0 +1,59 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(beam_jump_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ undefined_label/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [undefined_label
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+undefined_label(_Config) ->
+ {'EXIT',{function_clause,_}} = (catch flights(0, [], [])),
+ ok.
+
+%% Would lose a label when compiled with no_copt.
+
+flights(0, [], []) when [], 0; 0.0, [], false ->
+ clark;
+flights(_, Reproduction, introduction) when false, Reproduction ->
+ responsible.
diff --git a/lib/compiler/test/beam_reorder_SUITE.erl b/lib/compiler/test/beam_reorder_SUITE.erl
new file mode 100644
index 0000000000..ff31f2d3bd
--- /dev/null
+++ b/lib/compiler/test/beam_reorder_SUITE.erl
@@ -0,0 +1,81 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(beam_reorder_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ alloc/1,confused_beam_validator/1]).
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [alloc,
+ confused_beam_validator
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+-record(alloc, {version}).
+
+alloc(_Config) ->
+ {ok,42} = alloc_a(1, 2, #alloc{version=42}),
+ {a,b,c} = alloc_b(1, 2, #alloc{version={a,b,c}}),
+ ok.
+
+alloc_a(_U1, _U2, R) ->
+ V = R#alloc.version,
+ Res = id({ok,V}),
+ _ = id(0),
+ Res.
+
+alloc_b(_U1, _U2, R) ->
+ V = R#alloc.version,
+ Res = id(V),
+ _ = id(0),
+ Res.
+
+confused_beam_validator(_Config) ->
+ {'EXIT',{{badmap,{any}},_}} = (catch efficient({any})),
+ ok.
+
+efficient({Var}=God) ->
+ id(God#{}),
+ catch
+ receive _ ->
+ Var
+ end.
+
+id(I) ->
+ I.
diff --git a/lib/compiler/test/beam_type_SUITE.erl b/lib/compiler/test/beam_type_SUITE.erl
new file mode 100644
index 0000000000..69e2f1838d
--- /dev/null
+++ b/lib/compiler/test/beam_type_SUITE.erl
@@ -0,0 +1,130 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(beam_type_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ integers/1,coverage/1,booleans/1,setelement/1,cons/1,
+ tuple/1]).
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [integers,
+ coverage,
+ booleans,
+ setelement,
+ cons,
+ tuple
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+integers(_Config) ->
+ a = do_integers_1(2#11000),
+ b = do_integers_1(2#11001),
+
+ a = do_integers_2(<<0:1>>),
+ {'EXIT',{{case_clause,-1},_}} = (catch do_integers_2(<<1:1>>)),
+
+ college = do_integers_3(),
+
+ ok.
+
+do_integers_1(B0) ->
+ B = B0 band 1,
+ case B band 15 of
+ 0 -> a;
+ 1 -> b
+ end.
+
+do_integers_2(Bin) ->
+ <<B:1/signed>> = Bin,
+ case B of
+ 0 -> a;
+ 1 -> b
+ end.
+
+do_integers_3() ->
+ case try 0 after [] end of
+ 0 -> college;
+ 1 -> 0
+ end.
+
+coverage(_Config) ->
+ {'EXIT',{badarith,_}} = (catch id(1) bsl 0.5),
+ {'EXIT',{badarith,_}} = (catch id(2.0) bsl 2),
+ {'EXIT',{badarith,_}} = (catch a + 0.5),
+ {'EXIT',{badarith,_}} = (catch 2.0 * b),
+
+ {'EXIT',{badarith,_}} = (catch id(42.0) / (1 bsl 2000)),
+
+ id(id(42) band 387439739874298734983787934283479243879),
+ id(-1 band id(13)),
+
+ ok.
+
+booleans(_Config) ->
+ {'EXIT',{{case_clause,_},_}} = (catch do_booleans(42)),
+ ok.
+
+do_booleans(B) ->
+ case is_integer(B) of
+ yes -> yes;
+ no -> no
+ end.
+
+setelement(_Config) ->
+ T0 = id({a,42}),
+ {a,_} = T0,
+ {b,_} = setelement(1, T0, b),
+ ok.
+
+cons(_Config) ->
+ [did] = cons(assigned, did),
+ ok.
+
+cons(assigned, Instrument) ->
+ [Instrument] = [did].
+
+tuple(_Config) ->
+ {'EXIT',{{badmatch,{necessary}},_}} = (catch do_tuple()),
+ ok.
+
+do_tuple() ->
+ {0, _} = {necessary}.
+
+id(I) ->
+ I.
diff --git a/lib/compiler/test/beam_utils_SUITE.erl b/lib/compiler/test/beam_utils_SUITE.erl
index 70c00f163c..f6d4a311bb 100644
--- a/lib/compiler/test/beam_utils_SUITE.erl
+++ b/lib/compiler/test/beam_utils_SUITE.erl
@@ -23,7 +23,8 @@
init_per_group/2,end_per_group/2,
apply_fun/1,apply_mf/1,bs_init/1,bs_save/1,
is_not_killed/1,is_not_used_at/1,
- select/1,y_catch/1]).
+ select/1,y_catch/1,otp_8949_b/1,liveopt/1,coverage/1,
+ y_registers/1]).
-export([id/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -41,7 +42,11 @@ groups() ->
is_not_killed,
is_not_used_at,
select,
- y_catch
+ y_catch,
+ otp_8949_b,
+ liveopt,
+ coverage,
+ y_registers
]}].
init_per_suite(Config) ->
@@ -232,6 +237,121 @@ do_y_catch_1(<<_,_/binary>>, _) ->
do_y_catch_2(_) -> {a,b,c}.
+otp_8949_b(_Config) ->
+ self() ! something,
+ value = otp_8949_b([], false),
+ {'EXIT',_} = (catch otp_8949_b([], true)),
+ ok.
+
+%% Would cause an endless loop in beam_utils.
+otp_8949_b(A, B) ->
+ Var = id(value),
+ if
+ A == [], B == false ->
+ ok
+ end,
+ receive
+ something ->
+ id(Var)
+ end.
+
+-record(alarmInfo, {type,cause,origin}).
+
+liveopt(_Config) ->
+ F = liveopt_fun(42, pebkac, user),
+ void = F(42, #alarmInfo{type=sctp,cause=pebkac,origin=user}),
+ ok.
+
+liveopt_fun(Peer, Cause, Origin) ->
+ fun(PeerNo, AlarmInfo)
+ when PeerNo == Peer andalso
+ AlarmInfo == #alarmInfo{type=sctp,
+ cause=Cause,
+ origin=Origin} ->
+ void
+ end.
+
+%% Thanks to QuickCheck.
+coverage(_Config) ->
+ 42+7 = merchant([[],7,false]),
+
+ {'EXIT',{{try_clause,0},_}} = (catch resulting([0], stone)),
+ 0.0 = resulting([true], stone),
+
+ {'EXIT',{if_clause,_}} = (catch clinic(false)),
+ {'EXIT',{{try_clause,"trials"},_}} = (catch clinic(true)),
+
+ {'EXIT',{function_clause,_}} = (catch town(overall, {{abc},alcohol})),
+
+ ok.
+
+%% Cover check_liveness/3.
+merchant([Merchant, Laws, Electric]) ->
+ id(42),
+ oklahoma([[] || 0 <- Merchant],
+ if true; Electric -> Laws end) + 42.
+oklahoma([], Int) -> Int.
+
+town(overall, {{If}, Healing = alcohol})
+ when Healing#{[] => Healing}; include ->
+ [If || Healing <- awareness].
+
+%% Cover is_reg_used_at/3.
+resulting([Conservation], stone) ->
+ try 0 of
+ Conservation when Conservation -> Conservation;
+ _ when Conservation; 0 -> 0.0
+ after
+ Conservation
+ end.
+
+%% Cover is_reg_used_at_1/3.
+clinic(Damage) ->
+ if
+ Damage ->
+ try "trials" of Damage when Damage -> Damage catch true -> [] end
+ end,
+ carefully.
+
+y_registers(_Config) ->
+ {'EXIT',{{badfun,0},_}} = (catch economic(0.0, jim)),
+ {'EXIT',{{badmatch,apartments},_}} = (catch louisiana()),
+ {a,b} = (boxes(true))({a,b}),
+ {'EXIT',{{case_clause,webmaster},_}} = (catch yellow(true)),
+ ok.
+
+economic(0.0 = Serves, Existence) ->
+ case Serves of
+ Serves -> 0
+ end,
+ Existence = jim,
+ 0(),
+ Serves,
+ Existence.
+
+louisiana() ->
+ {catch necessarily,
+ try
+ [] == reg,
+ true = apartments
+ catch [] -> barbara
+ end}.
+
+boxes(Call) ->
+ case Call of
+ Call -> approval
+ end,
+ Call,
+ fun id/1.
+
+yellow(Hill) ->
+ case webmaster of
+ station -> eyes; Hill ->
+ "under"
+ end,
+ Hill,
+ id(42).
+
%% The identity function.
id(I) -> I.
diff --git a/lib/compiler/test/beam_validator_SUITE.erl b/lib/compiler/test/beam_validator_SUITE.erl
index 69391b15eb..263fd2ca7e 100644
--- a/lib/compiler/test/beam_validator_SUITE.erl
+++ b/lib/compiler/test/beam_validator_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,20 +32,19 @@
bad_bin_match/1,bad_dsetel/1,
state_after_fault_in_catch/1,no_exception_in_catch/1,
undef_label/1,illegal_instruction/1,failing_gc_guard_bif/1,
- map_field_lists/1]).
+ map_field_lists/1,cover_bin_opt/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = test_server:timetrap(?t:minutes(10)),
- [{watchdog,Dog}|Config].
+ Config.
end_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,10}}].
all() ->
test_lib:recompile(?MODULE),
@@ -61,7 +60,7 @@ groups() ->
freg_state,bad_bin_match,bad_dsetel,
state_after_fault_in_catch,no_exception_in_catch,
undef_label,illegal_instruction,failing_gc_guard_bif,
- map_field_lists]}].
+ map_field_lists,cover_bin_opt]}].
init_per_suite(Config) ->
Config.
@@ -78,7 +77,7 @@ end_per_group(_GroupName, Config) ->
compiler_bug(Config) when is_list(Config) ->
%% Check that the compiler returns an error if we try to
%% assemble one of the bad '.S' files.
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, "compiler_bug"),
error = compile:file(File, [from_asm,report_errors,time]),
@@ -93,43 +92,41 @@ compiler_bug(Config) when is_list(Config) ->
%% The following code is stupid but it should compile.
stupid_but_valid(Config) when is_list(Config) ->
AnAtom = nisse,
- ?line try setelement(5, setelement(6, AnAtom, value), another_value) of
- Term -> ?line ?t:fail({what_happened,Term})
- catch
- error:badarg -> ok
- end,
+ try setelement(5, setelement(6, AnAtom, value), another_value) of
+ Term -> ct:fail({what_happened,Term})
+ catch
+ error:badarg -> ok
+ end,
ok.
xrange(Config) when is_list(Config) ->
Errors = do_val(xrange, Config),
- ?line
- [{{t,sum_1,2},
- {{bif,'+',{f,0},[{x,-1},{x,1}],{x,0}},4,
- {uninitialized_reg,{x,-1}}}},
- {{t,sum_2,2},
- {{bif,'+',{f,0},[{x,0},{x,1024}],{x,0}},4,
- {uninitialized_reg,{x,1024}}}},
- {{t,sum_3,2},
- {{bif,'+',{f,0},[{x,0},{x,1}],{x,-1}},4,
- {invalid_store,{x,-1},number}}},
- {{t,sum_4,2},
- {{bif,'+',{f,0},[{x,0},{x,1}],{x,1024}},4,limit}}] = Errors,
+ [{{t,sum_1,2},
+ {{bif,'+',{f,0},[{x,-1},{x,1}],{x,0}},4,
+ {uninitialized_reg,{x,-1}}}},
+ {{t,sum_2,2},
+ {{bif,'+',{f,0},[{x,0},{x,1023}],{x,0}},4,
+ {uninitialized_reg,{x,1023}}}},
+ {{t,sum_3,2},
+ {{bif,'+',{f,0},[{x,0},{x,1}],{x,-1}},4,
+ {invalid_store,{x,-1},number}}},
+ {{t,sum_4,2},
+ {{bif,'+',{f,0},[{x,0},{x,1}],{x,1023}},4,limit}}] = Errors,
ok.
yrange(Config) when is_list(Config) ->
Errors = do_val(yrange, Config),
- ?line
- [{{t,sum_1,2},
- {{move,{x,1},{y,-1}},5,
- {invalid_store,{y,-1},term}}},
- {{t,sum_2,2},
- {{bif,'+',{f,0},[{x,0},{y,1024}],{x,0}},7,
- {uninitialized_reg,{y,1024}}}},
- {{t,sum_3,2},
- {{move,{x,1},{y,1024}},5,limit}},
- {{t,sum_4,2},
- {{move,{x,1},{y,-1}},5,
- {invalid_store,{y,-1},term}}}] = Errors,
+ [{{t,sum_1,2},
+ {{move,{x,1},{y,-1}},5,
+ {invalid_store,{y,-1},term}}},
+ {{t,sum_2,2},
+ {{bif,'+',{f,0},[{x,0},{y,1024}],{x,0}},7,
+ {uninitialized_reg,{y,1024}}}},
+ {{t,sum_3,2},
+ {{move,{x,1},{y,1024}},5,limit}},
+ {{t,sum_4,2},
+ {{move,{x,1},{y,-1}},5,
+ {invalid_store,{y,-1},term}}}] = Errors,
ok.
stack(Config) when is_list(Config) ->
@@ -163,25 +160,23 @@ merge_undefined(Config) when is_list(Config) ->
uninit(Config) when is_list(Config) ->
Errors = do_val(uninit, Config),
- ?line
- [{{t,sum_1,2},
- {{move,{y,0},{x,0}},5,{uninitialized_reg,{y,0}}}},
- {{t,sum_2,2},
- {{call,1,{f,8}},5,{uninitialized_reg,{y,0}}}},
- {{t,sum_3,2},
- {{bif,'+',{f,0},[{x,0},{y,0}],{x,0}},
- 6,
- {unassigned,{y,0}}}}] = Errors,
+ [{{t,sum_1,2},
+ {{move,{y,0},{x,0}},5,{uninitialized_reg,{y,0}}}},
+ {{t,sum_2,2},
+ {{call,1,{f,8}},5,{uninitialized_reg,{y,0}}}},
+ {{t,sum_3,2},
+ {{bif,'+',{f,0},[{x,0},{y,0}],{x,0}},
+ 6,
+ {unassigned,{y,0}}}}] = Errors,
ok.
unsafe_catch(Config) when is_list(Config) ->
Errors = do_val(unsafe_catch, Config),
- ?line
- [{{t,small,2},
- {{bs_put_integer,{f,0},{integer,16},1,
- {field_flags,[unsigned,big]},{y,0}},
- 20,
- {unassigned,{y,0}}}}] = Errors,
+ [{{t,small,2},
+ {{bs_put_integer,{f,0},{integer,16},1,
+ {field_flags,[unsigned,big]},{y,0}},
+ 20,
+ {unassigned,{y,0}}}}] = Errors,
ok.
dead_code(Config) when is_list(Config) ->
@@ -190,16 +185,14 @@ dead_code(Config) when is_list(Config) ->
overwrite_catchtag(Config) when is_list(Config) ->
Errors = do_val(overwrite_catchtag, Config),
- ?line
- [{{overwrite_catchtag,foo,1},
- {{move,{x,0},{y,0}},6,{catchtag,_}}}] = Errors,
+ [{{overwrite_catchtag,foo,1},
+ {{move,{x,0},{y,0}},6,{catchtag,_}}}] = Errors,
ok.
overwrite_trytag(Config) when is_list(Config) ->
Errors = do_val(overwrite_trytag, Config),
- ?line
- [{{overwrite_trytag,foo,1},
- {{kill,{y,2}},8,{trytag,_}}}] = Errors,
+ [{{overwrite_trytag,foo,1},
+ {{kill,{y,2}},8,{trytag,_}}}] = Errors,
ok.
accessing_tags(Config) when is_list(Config) ->
@@ -231,82 +224,77 @@ bad_catch_try(Config) when is_list(Config) ->
cons_guard(Config) when is_list(Config) ->
Errors = do_val(cons, Config),
- ?line
- [{{cons,foo,1},
- {{get_list,{x,0},{x,1},{x,2}},
- 5,
- {bad_type,{needed,cons},{actual,term}}}}] = Errors,
+ [{{cons,foo,1},
+ {{get_list,{x,0},{x,1},{x,2}},
+ 5,
+ {bad_type,{needed,cons},{actual,term}}}}] = Errors,
ok.
freg_range(Config) when is_list(Config) ->
Errors = do_val(freg_range, Config),
- ?line
- [{{t,sum_1,2},
- {{bif,fadd,{f,0},[{fr,-1},{fr,1}],{fr,0}},
- 5,
- {bad_source,{fr,-1}}}},
- {{t,sum_2,2},
- {{bif,fadd,{f,0},[{fr,0},{fr,1024}],{fr,0}},
- 6,
- {uninitialized_reg,{fr,1024}}}},
- {{t,sum_3,2},
- {{bif,fadd,{f,0},[{fr,0},{fr,1}],{fr,-1}},
- 7,
- {bad_target,{fr,-1}}}},
- {{t,sum_4,2},
- {{bif,fadd,{f,0},[{fr,0},{fr,1}],{fr,1024}},
- 7,
- limit}}] = Errors,
+ [{{t,sum_1,2},
+ {{bif,fadd,{f,0},[{fr,-1},{fr,1}],{fr,0}},
+ 5,
+ {bad_source,{fr,-1}}}},
+ {{t,sum_2,2},
+ {{bif,fadd,{f,0},[{fr,0},{fr,1024}],{fr,0}},
+ 6,
+ {uninitialized_reg,{fr,1024}}}},
+ {{t,sum_3,2},
+ {{bif,fadd,{f,0},[{fr,0},{fr,1}],{fr,-1}},
+ 7,
+ {bad_target,{fr,-1}}}},
+ {{t,sum_4,2},
+ {{bif,fadd,{f,0},[{fr,0},{fr,1}],{fr,1024}},
+ 7,
+ limit}}] = Errors,
ok.
freg_uninit(Config) when is_list(Config) ->
Errors = do_val(freg_uninit, Config),
- ?line
- [{{t,sum_1,2},
- {{bif,fadd,{f,0},[{fr,0},{fr,1}],{fr,0}},
- 6,
- {uninitialized_reg,{fr,1}}}},
- {{t,sum_2,2},
- {{bif,fadd,{f,0},[{fr,0},{fr,1}],{fr,0}},
- 9,
- {uninitialized_reg,{fr,0}}}}] = Errors,
+ [{{t,sum_1,2},
+ {{bif,fadd,{f,0},[{fr,0},{fr,1}],{fr,0}},
+ 6,
+ {uninitialized_reg,{fr,1}}}},
+ {{t,sum_2,2},
+ {{bif,fadd,{f,0},[{fr,0},{fr,1}],{fr,0}},
+ 9,
+ {uninitialized_reg,{fr,0}}}}] = Errors,
ok.
freg_state(Config) when is_list(Config) ->
Errors = do_val(freg_state, Config),
- ?line
- [{{t,sum_1,2},
- {{bif,fmul,{f,0},[{fr,0},{fr,1}],{fr,0}},
- 6,
- {bad_floating_point_state,undefined}}},
- {{t,sum_2,2},
- {{fmove,{fr,0},{x,0}},
- 8,
- {bad_floating_point_state,cleared}}},
- {{t,sum_3,2},
- {{bif,'-',{f,0},[{x,1},{x,0}],{x,1}},
- 8,
- {unsafe_instruction,{float_error_state,cleared}}}},
- {{t,sum_4,2},
- {{fcheckerror,{f,0}},
- 4,
- {bad_floating_point_state,undefined}}},
- {{t,sum_5,2},
- {fclearerror,5,{bad_floating_point_state,cleared}}}] = Errors,
+ [{{t,sum_1,2},
+ {{bif,fmul,{f,0},[{fr,0},{fr,1}],{fr,0}},
+ 6,
+ {bad_floating_point_state,undefined}}},
+ {{t,sum_2,2},
+ {{fmove,{fr,0},{x,0}},
+ 8,
+ {bad_floating_point_state,cleared}}},
+ {{t,sum_3,2},
+ {{bif,'-',{f,0},[{x,1},{x,0}],{x,1}},
+ 8,
+ {unsafe_instruction,{float_error_state,cleared}}}},
+ {{t,sum_4,2},
+ {{fcheckerror,{f,0}},
+ 4,
+ {bad_floating_point_state,undefined}}},
+ {{t,sum_5,2},
+ {fclearerror,5,{bad_floating_point_state,cleared}}}] = Errors,
ok.
bad_bin_match(Config) when is_list(Config) ->
- [{{t,t,1},{return,5,{match_context,{x,0}}}}] =
- do_val(bad_bin_match, Config),
- ok.
+ [{{t,t,1},{return,5,{match_context,{x,0}}}}] =
+ do_val(bad_bin_match, Config),
+ ok.
bad_dsetel(Config) when is_list(Config) ->
Errors = do_val(bad_dsetel, Config),
- ?line
- [{{t,t,1},
- {{set_tuple_element,{x,1},{x,0},1},
- 17,
- illegal_context_for_set_tuple_element}}] = Errors,
+ [{{t,t,1},
+ {{set_tuple_element,{x,1},{x,0},1},
+ 17,
+ illegal_context_for_set_tuple_element}}] = Errors,
ok.
state_after_fault_in_catch(Config) when is_list(Config) ->
@@ -324,7 +312,7 @@ state_after_fault_in_catch(Config) when is_list(Config) ->
no_exception_in_catch(Config) when is_list(Config) ->
Errors = do_val(no_exception_in_catch, Config),
[{{no_exception_in_catch,nested_of_1,4},
- {{move,{x,3},{x,0}},88,{uninitialized_reg,{x,3}}}}] = Errors,
+ {{move,{x,3},{x,0}},87,{uninitialized_reg,{x,3}}}}] = Errors,
ok.
undef_label(Config) when is_list(Config) ->
@@ -382,9 +370,9 @@ illegal_instruction(Config) when is_list(Config) ->
%% (Thanks to Kiran Khaladkar.)
%%
failing_gc_guard_bif(Config) when is_list(Config) ->
- ?line ok = process_request(lists:seq(1, 36)),
- ?line error = process_request([]),
- ?line error = process_request(not_a_list),
+ ok = process_request(lists:seq(1, 36)),
+ error = process_request([]),
+ error = process_request(not_a_list),
ok.
process_request(ConfId) ->
@@ -418,10 +406,126 @@ map_field_lists(Config) ->
empty_field_list}}
] = Errors.
+%% Coverage and smoke test of beam_validator.
+cover_bin_opt(_Config) ->
+ Ms = [beam_utils_SUITE,
+ bs_match_SUITE,
+ bs_bincomp_SUITE,
+ bs_bit_binaries_SUITE,
+ bs_utf_SUITE],
+ test_lib:p_run(fun try_bin_opt/1, Ms),
+ ok.
+
+try_bin_opt(Mod) ->
+ try
+ do_bin_opt(Mod)
+ catch
+ Class:Error ->
+ io:format("~p: ~p ~p\n~p\n",
+ [Mod,Class,Error,erlang:get_stacktrace()]),
+ error
+ end.
+
+do_bin_opt(Mod) ->
+ Beam = code:which(Mod),
+ {ok,{Mod,[{abstract_code,
+ {raw_abstract_v1,Abstr}}]}} =
+ beam_lib:chunks(Beam, [abstract_code]),
+ {ok,Mod,Asm} = compile:forms(Abstr, ['S']),
+ do_bin_opt(Mod, Asm).
+
+do_bin_opt(Mod, Asm) ->
+ do_bin_opt(fun enable_bin_opt/1, Mod, Asm),
+ do_bin_opt(fun remove_bs_start_match/1, Mod, Asm),
+ do_bin_opt(fun remove_bs_save/1, Mod, Asm),
+ do_bin_opt(fun destroy_ctxt/1, Mod, Asm),
+ do_bin_opt(fun destroy_save_point/1, Mod, Asm),
+ ok.
+
+do_bin_opt(Transform, Mod, Asm0) ->
+ Asm = Transform(Asm0),
+ case compile:forms(Asm, [from_asm,no_postopt,return]) of
+ {ok,[],Code,_Warnings} when is_binary(Code) ->
+ ok;
+ {error,Errors0,_} ->
+ %% beam_validator must return errors, not simply crash,
+ %% when illegal code is found.
+ ModString = atom_to_list(Mod),
+ [{ModString,Errors}] = Errors0,
+ _ = [verify_bin_opt_error(E) || E <- Errors],
+ ok
+ end.
+
+verify_bin_opt_error({beam_validator,_}) ->
+ ok.
+
+enable_bin_opt(Module) ->
+ transform_is(fun enable_bin_opt_body/1, Module).
+
+enable_bin_opt_body([_,{'%',{no_bin_opt,_Reason,_Anno}}|Is]) ->
+ enable_bin_opt_body(Is);
+enable_bin_opt_body([I|Is]) ->
+ [I|enable_bin_opt_body(Is)];
+enable_bin_opt_body([]) ->
+ [].
+
+remove_bs_start_match(Module) ->
+ transform_remove(fun({test,bs_start_match2,_,_,_,_}) -> true;
+ (_) -> false
+ end, Module).
+
+remove_bs_save(Module) ->
+ transform_remove(fun({bs_save2,_,_}) -> true;
+ (_) -> false
+ end, Module).
+
+destroy_save_point(Module) ->
+ transform_i(fun do_destroy_save_point/1, Module).
+
+do_destroy_save_point({I,Ctx,_Point})
+ when I =:= bs_save2; I =:= bs_restore2 ->
+ {I,Ctx,42};
+do_destroy_save_point(I) ->
+ I.
+
+destroy_ctxt(Module) ->
+ transform_i(fun do_destroy_ctxt/1, Module).
+
+do_destroy_ctxt({bs_save2=I,Ctx,Point}) ->
+ {I,destroy_reg(Ctx),Point};
+do_destroy_ctxt({bs_restore2=I,Ctx,Point}) ->
+ {I,destroy_reg(Ctx),Point};
+do_destroy_ctxt({bs_context_to_binary=I,Ctx}) ->
+ {I,destroy_reg(Ctx)};
+do_destroy_ctxt(I) ->
+ I.
+
+destroy_reg({Tag,N}) ->
+ case rand:uniform() of
+ R when R < 0.6 ->
+ {Tag,N+1};
+ _ ->
+ {y,N+1}
+ end.
+
%%%-------------------------------------------------------------------------
+transform_remove(Remove, Module) ->
+ transform_is(fun(Is) -> [I || I <- Is, not Remove(I)] end, Module).
+
+transform_i(Transform, Module) ->
+ transform_is(fun(Is) -> [Transform(I) || I <- Is] end, Module).
+
+transform_is(Transform, {Mod,Exp,Imp,Fs0,Lc}) ->
+ Fs = [transform_is_1(Transform, F) || F <- Fs0],
+ {Mod,Exp,Imp,Fs,Lc}.
+
+transform_is_1(Transform, {function,N,A,E,Is0}) ->
+ Is = Transform(Is0),
+ {function,N,A,E,Is}.
+
do_val(Mod, Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Base = atom_to_list(Mod),
File = filename:join(Data, Base),
case compile:file(File, [from_asm,no_postopt,return_errors]) of
diff --git a/lib/compiler/test/beam_validator_SUITE_data/xrange.S b/lib/compiler/test/beam_validator_SUITE_data/xrange.S
index c6f20288f7..a76408dde3 100644
--- a/lib/compiler/test/beam_validator_SUITE_data/xrange.S
+++ b/lib/compiler/test/beam_validator_SUITE_data/xrange.S
@@ -20,7 +20,7 @@
{label,3}.
{func_info,{atom,t},{atom,sum_2},2}.
{label,4}.
- {bif,'+',{f,0},[{x,0},{x,1024}],{x,0}}.
+ {bif,'+',{f,0},[{x,0},{x,1023}],{x,0}}.
{'%live',1}.
return.
@@ -38,7 +38,7 @@
{label,7}.
{func_info,{atom,t},{atom,sum_4},2}.
{label,8}.
- {bif,'+',{f,0},[{x,0},{x,1}],{x,1024}}.
+ {bif,'+',{f,0},[{x,0},{x,1}],{x,1023}}.
{'%live',1}.
return.
diff --git a/lib/compiler/test/bif_SUITE.erl b/lib/compiler/test/bif_SUITE.erl
new file mode 100644
index 0000000000..51bc71da81
--- /dev/null
+++ b/lib/compiler/test/bif_SUITE.erl
@@ -0,0 +1,65 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(bif_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ beam_validator/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [beam_validator
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+%% Cover code in beam_validator.
+
+beam_validator(Config) ->
+ [false,Config] = food(Config),
+
+ true = is_number(42.0),
+ false = is_port(Config),
+
+ ok.
+
+food(Curriculum) ->
+ [try
+ is_bitstring(functions)
+ catch _ ->
+ 0
+ end, Curriculum].
diff --git a/lib/compiler/test/bs_bincomp_SUITE.erl b/lib/compiler/test/bs_bincomp_SUITE.erl
index 1bf4e9d4a7..4743821337 100644
--- a/lib/compiler/test/bs_bincomp_SUITE.erl
+++ b/lib/compiler/test/bs_bincomp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,9 @@
init_per_group/2,end_per_group/2,
byte_aligned/1,bit_aligned/1,extended_byte_aligned/1,
extended_bit_aligned/1,mixed/1,filters/1,trim_coverage/1,
- nomatch/1,sizes/1]).
+ nomatch/1,sizes/1,general_expressions/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -36,7 +36,7 @@ all() ->
test_lib:recompile(?MODULE),
[byte_aligned, bit_aligned, extended_byte_aligned,
extended_bit_aligned, mixed, filters, trim_coverage,
- nomatch, sizes].
+ nomatch, sizes, general_expressions].
groups() ->
[].
@@ -55,110 +55,114 @@ end_per_group(_GroupName, Config) ->
byte_aligned(Config) when is_list(Config) ->
cs_init(),
- ?line <<"abcdefg">> = cs(<< <<(X+32)>> || <<X>> <= <<"ABCDEFG">> >>),
+ <<"abcdefg">> = cs(<< <<(X+32)>> || <<X>> <= <<"ABCDEFG">> >>),
<<1:32/little,2:32/little,3:32/little,4:32/little>> =
cs(<< <<X:32/little>> || <<X:32>> <= <<1:32,2:32,3:32,4:32>> >>),
- ?line cs(<<1:32/little,2:32/little,3:32/little,4:32/little>> =
- << <<X:32/little>> || <<X:16>> <= <<1:16,2:16,3:16,4:16>> >>),
+ cs(<<1:32/little,2:32/little,3:32/little,4:32/little>> =
+ << <<X:32/little>> || <<X:16>> <= <<1:16,2:16,3:16,4:16>> >>),
cs_end().
bit_aligned(Config) when is_list(Config) ->
cs_init(),
- ?line <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> =
+ <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> =
cs(<< <<(X+32):7>> || <<X>> <= <<"ABCDEFG">> >>),
- ?line <<"ABCDEFG">> =
+ <<"ABCDEFG">> =
cs(<< <<(X-32)>> || <<X:7>> <= <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> >>),
- ?line <<1:31/little,2:31/little,3:31/little,4:31/little>> =
+ <<1:31/little,2:31/little,3:31/little,4:31/little>> =
cs(<< <<X:31/little>> || <<X:31>> <= <<1:31,2:31,3:31,4:31>> >>),
- ?line <<1:31/little,2:31/little,3:31/little,4:31/little>> =
+ <<1:31/little,2:31/little,3:31/little,4:31/little>> =
cs(<< <<X:31/little>> || <<X:15>> <= <<1:15,2:15,3:15,4:15>> >>),
cs_end().
extended_byte_aligned(Config) when is_list(Config) ->
cs_init(),
- ?line <<"abcdefg">> = cs(<< <<(X+32)>> || X <- "ABCDEFG" >>),
- ?line "abcdefg" = [(X+32) || <<X>> <= <<"ABCDEFG">>],
- ?line <<1:32/little,2:32/little,3:32/little,4:32/little>> =
+ <<"abcdefg">> = cs(<< <<(X+32)>> || X <- "ABCDEFG" >>),
+ "abcdefg" = [(X+32) || <<X>> <= <<"ABCDEFG">>],
+ <<1:32/little,2:32/little,3:32/little,4:32/little>> =
cs(<< <<X:32/little>> || X <- [1,2,3,4] >>),
- ?line [256,512,768,1024] =
+ [256,512,768,1024] =
[X || <<X:16/little>> <= <<1:16,2:16,3:16,4:16>>],
cs_end().
extended_bit_aligned(Config) when is_list(Config) ->
cs_init(),
- ?line <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> =
+ <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> =
cs(<< <<(X+32):7>> || X <- "ABCDEFG" >>),
- ?line "ABCDEFG" = [(X-32) || <<X:7>> <= <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>>],
- ?line <<1:31/little,2:31/little,3:31/little,4:31/little>> =
+ "ABCDEFG" = [(X-32) || <<X:7>> <= <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>>],
+ <<1:31/little,2:31/little,3:31/little,4:31/little>> =
cs(<< <<X:31/little>> || X <- [1,2,3,4] >>),
- ?line [256,512,768,1024] =
+ [256,512,768,1024] =
[X || <<X:15/little>> <= <<1:15,2:15,3:15,4:15>>],
cs_end().
mixed(Config) when is_list(Config) ->
cs_init(),
- ?line <<2,3,3,4,4,5,5,6>> =
+ <<2,3,3,4,4,5,5,6>> =
cs(<< <<(X+Y)>> || <<X>> <= <<1,2,3,4>>, <<Y>> <= <<1,2>> >>),
- ?line <<2,3,3,4,4,5,5,6>> =
+ <<2,3,3,4,4,5,5,6>> =
<< <<(X+Y)>> || <<X>> <= <<1,2,3,4>>, Y <- [1,2] >>,
- ?line <<2,3,3,4,4,5,5,6>> =
+ <<2,3,3,4,4,5,5,6>> =
cs(<< <<(X+Y)>> || X <- [1,2,3,4], Y <- [1,2] >>),
One = id([1,2,3,4]),
Two = id([1,2]),
- ?line <<2,3,3,4,4,5,5,6>> =
+ <<2,3,3,4,4,5,5,6>> =
cs(<< <<(X+Y)>> || X <- One, Y <- Two >>),
- ?line [2,3,3,4,4,5,5,6] =
+ [2,3,3,4,4,5,5,6] =
[(X+Y) || <<X>> <= <<1,2,3,4>>, <<Y>> <= <<1,2>>],
- ?line [2,3,3,4,4,5,5,6] =
+ [2,3,3,4,4,5,5,6] =
[(X+Y) || <<X>> <= <<1,2,3,4>>, Y <- [1,2]],
- ?line <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
+ <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
cs(<< <<(X+Y):3>> || <<X:3>> <= <<1:3,2:3,3:3,4:3>>,
<<Y:3>> <= <<1:3,2:3>> >>),
- ?line <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
+ <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
cs(<< <<(X+Y):3>> || <<X:3>> <= <<1:3,2:3,3:3,4:3>>, Y <- [1,2] >>),
- ?line <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
+ <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
cs(<< <<(X+Y):3>> || X <- [1,2,3,4], Y <- [1,2] >>),
- ?line <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
+ <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
cs_default(<< <<(X+Y):3>> || {X,Y} <- [{1,1},{1,2},{2,1},{2,2},
{3,1},{3,2},{4,1},{4,2}] >>),
- ?line [2,3,3,4,4,5,5,6] =
+ [2,3,3,4,4,5,5,6] =
[(X+Y) || <<X:3>> <= <<1:3,2:3,3:3,4:3>>, <<Y:3>> <= <<1:3,2:3>>],
- ?line [2,3,3,4,4,5,5,6] =
+ [2,3,3,4,4,5,5,6] =
[(X+Y) || <<X:3>> <= <<1:3,2:3,3:3,4:3>>, {_,Y} <- [{a,1},{b,2}]],
cs_end().
filters(Config) when is_list(Config) ->
cs_init(),
- ?line <<"BDF">> =
- cs_default(<< <<(X-32)>> || <<X:7>> <= <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>>,
- X rem 2 == 0>>),
- ?line <<"abc">> = cs_default(<< <<(X+32)>> || X <- "ABCDEFG",
- is_less_than(X, $D)>>),
- ?line <<"efg">> = cs_default(<< <<(X+32)>> || X <- "ABCDEFG",
- not is_less_than(X, $E)>>),
- ?line <<"b">> = cs_default(<< <<(X+32)>> || X <- "ABCDEFG",
- is_less_than(X, $D),
- X rem 2 == 0>>),
- ?line <<"eg">> = cs_default(<< <<(X+32)>> || X <- "ABCDEFG",
- not is_less_than(X, $E),
- X rem 2 == 1>>),
+ <<"BDF">> =
+ cs_default(<< <<(X-32)>> ||
+ <<X:7>> <= <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>>,
+ X rem 2 == 0>>),
+ <<"abc">> = cs_default(<< <<(X+32)>> ||
+ X <- "ABCDEFG",
+ is_less_than(X, $D)>>),
+ <<"efg">> = cs_default(<< <<(X+32)>> ||
+ X <- "ABCDEFG",
+ not is_less_than(X, $E)>>),
+ <<"b">> = cs_default(<< <<(X+32)>> ||
+ X <- "ABCDEFG",
+ is_less_than(X, $D),
+ X rem 2 == 0>>),
+ <<"eg">> = cs_default(<< <<(X+32)>> ||
+ X <- "ABCDEFG",
+ not is_less_than(X, $E),
+ X rem 2 == 1>>),
%% Filtering by a non-matching pattern.
- ?line <<"abd">> = cs_default(<< <<X:8>> ||
- <<0:1,X:7>> <= <<$a:8,$b:8,1:1,$c:7,$d:8,
- 1:1,$e:7,0:4>> >>),
+ <<"abd">> = cs_default(<< <<X:8>> ||
+ <<0:1,X:7>> <= <<$a:8,$b:8,1:1,$c:7,$d:8,
+ 1:1,$e:7,0:4>> >>),
- ?line <<42,42>> = cs_default(<< <<42:8>> ||
- 42 <- [1,2,3,42,43,42] >>),
+ <<42,42>> = cs_default(<< <<42:8>> || 42 <- [1,2,3,42,43,42] >>),
cs_end().
is_less_than(X, C) when X < C -> true;
is_less_than(_, _) -> false.
trim_coverage(Config) when is_list(Config) ->
- ?line <<0,0,0,2,0,0,5,48,0,11,219,174,0,0,0,0>> = coverage_materialiv(a, b, {1328,777134}),
- ?line <<67,40,0,0,66,152,0,0,69,66,64,0>> = coverage_trimmer([42,19,777]),
- ?line <<0,0,2,43,0,0,3,9,0,0,0,3,64,8,0,0,0,0,0,0,
+ <<0,0,0,2,0,0,5,48,0,11,219,174,0,0,0,0>> = coverage_materialiv(a, b, {1328,777134}),
+ <<67,40,0,0,66,152,0,0,69,66,64,0>> = coverage_trimmer([42,19,777]),
+ <<0,0,2,43,0,0,3,9,0,0,0,3,64,8,0,0,0,0,0,0,
64,68,0,0,0,0,0,0,192,171,198,0,0,0,0,0>> =
coverage_lightfv(555, 777, {3.0,40.0,-3555.0}),
ok.
@@ -186,111 +190,153 @@ coverage_trimmer(Params) ->
coverage_summer(A, B, C, D) -> A+B+C+D.
nomatch(Config) when is_list(Config) ->
- ?line <<>> = << <<X:8>> || X = {_,_} = [_|_] <- [1,2,3] >>,
+ <<>> = << <<X:8>> || X = {_,_} = [_|_] <- [1,2,3] >>,
ok.
sizes(Config) when is_list(Config) ->
- ?line cs_init(),
+ cs_init(),
Fun0 = fun(List) ->
cs(<< <<E:8>> || E <- List >>)
end,
- ?line <<>> = Fun0([]),
- ?line <<1>> = Fun0([1]),
- ?line <<1,2>> = Fun0([1,2]),
- ?line <<1,2,3>> = Fun0([1,2,3]),
+ <<>> = Fun0([]),
+ <<1>> = Fun0([1]),
+ <<1,2>> = Fun0([1,2]),
+ <<1,2,3>> = Fun0([1,2,3]),
Fun1 = fun(List) ->
cs(<< <<E:16>> || E <- List >>)
end,
- ?line <<>> = Fun1([]),
- ?line <<1:16>> = Fun1([1]),
- ?line <<1:16,2:16>> = Fun1([1,2]),
- ?line <<1:16,2:16,3:16>> = Fun1([1,2,3]),
+ <<>> = Fun1([]),
+ <<1:16>> = Fun1([1]),
+ <<1:16,2:16>> = Fun1([1,2]),
+ <<1:16,2:16,3:16>> = Fun1([1,2,3]),
Fun2 = fun(List) ->
cs(<< <<E:4>> || E <- List >>)
end,
- ?line <<>> = Fun2([]),
- ?line <<1:4>> = Fun2([1]),
- ?line <<1:4,13:4>> = Fun2([1,13]),
- ?line <<1:4,13:4,7:4>> = Fun2([1,13,7]),
- ?line <<0:1000/unit:8>> = Fun2(lists:duplicate(2000, 0)),
+ <<>> = Fun2([]),
+ <<1:4>> = Fun2([1]),
+ <<1:4,13:4>> = Fun2([1,13]),
+ <<1:4,13:4,7:4>> = Fun2([1,13,7]),
+ <<0:1000/unit:8>> = Fun2(lists:duplicate(2000, 0)),
Fun3 = fun(List) ->
cs(<< <<E:3>> || E <- List >>)
end,
- ?line <<>> = Fun3([]),
- ?line <<40,177,29:5>> = Fun3([1,2,1,3,0,7,5]),
- ?line <<0:512/unit:3>> = Fun3(lists:duplicate(512, 0)),
+ <<>> = Fun3([]),
+ <<40,177,29:5>> = Fun3([1,2,1,3,0,7,5]),
+ <<0:512/unit:3>> = Fun3(lists:duplicate(512, 0)),
Fun4 = fun(List, Size) ->
cs(<< <<E:Size>> || E <- List >>)
end,
- ?line <<>> = Fun4([], 8),
- ?line <<42:6>> = Fun4([42], 6),
- ?line <<42:16>> = Fun4([42], 16),
+ <<>> = Fun4([], 8),
+ <<42:6>> = Fun4([42], 6),
+ <<42:16>> = Fun4([42], 16),
Fun5 = fun(List, Sz1, Sz2, Sz3) ->
cs(<< <<E:Sz1,(E+1):Sz2/unit:8,(E+2):Sz3/unit:8>> || E <- List >>)
end,
- ?line <<>> = Fun5([], 1, 1, 1),
- ?line <<7:3,8:40,9:56>> = Fun5([7], 3, 5, 7),
+ <<>> = Fun5([], 1, 1, 1),
+ <<7:3,8:40,9:56>> = Fun5([7], 3, 5, 7),
Fun6 = fun(List, Size) ->
cs(<< <<E:8,(E+1):Size>> || E <- List >>)
end,
- ?line <<>> = Fun6([], 42),
- ?line <<42,43:20>> = Fun6([42], 20),
+ <<>> = Fun6([], 42),
+ <<42,43:20>> = Fun6([42], 20),
%% Binary generators.
Fun10 = fun(Bin) ->
cs(<< <<E:16>> || <<E:8>> <= Bin >>)
end,
- ?line <<>> = Fun10(<<>>),
- ?line <<1:16>> = Fun10(<<1>>),
- ?line <<1:16,2:16>> = Fun10(<<1,2>>),
+ <<>> = Fun10(<<>>),
+ <<1:16>> = Fun10(<<1>>),
+ <<1:16,2:16>> = Fun10(<<1,2>>),
Fun11 = fun(Bin) ->
cs(<< <<E:8>> || <<E:16>> <= Bin >>)
end,
- ?line <<>> = Fun11(<<>>),
- ?line <<1>> = Fun11(<<1:16>>),
- ?line <<1,2>> = Fun11(<<1:16,2:16>>),
- ?line <<1,2>> = Fun11(<<1:16,2:16,0:1>>),
- ?line <<1,2>> = Fun11(<<1:16,2:16,0:7>>),
- ?line <<1,2>> = Fun11(<<1:16,2:16,42:8>>),
- ?line <<1,2>> = Fun11(<<1:16,2:16,42:9>>),
- ?line <<1,2>> = Fun11(<<1:16,2:16,255:15>>),
+ <<>> = Fun11(<<>>),
+ <<1>> = Fun11(<<1:16>>),
+ <<1,2>> = Fun11(<<1:16,2:16>>),
+ <<1,2>> = Fun11(<<1:16,2:16,0:1>>),
+ <<1,2>> = Fun11(<<1:16,2:16,0:7>>),
+ <<1,2>> = Fun11(<<1:16,2:16,42:8>>),
+ <<1,2>> = Fun11(<<1:16,2:16,42:9>>),
+ <<1,2>> = Fun11(<<1:16,2:16,255:15>>),
Fun12 = fun(Bin, Sz1, Sz2) ->
cs(<< <<E:Sz1>> || <<E:Sz2>> <= Bin >>)
end,
- ?line <<>> = Fun12(<<>>, 1, 1),
- ?line Binary = list_to_binary(lists:seq(0, 255)),
- ?line Binary = Fun12(Binary, 1, 1),
- ?line Binary = Fun12(Binary, 4, 4),
- ?line Binary = Fun12(Binary, 8, 8),
- ?line <<17:9,19:9>> = Fun12(<<17:6,19:6>>, 9, 6),
+ <<>> = Fun12(<<>>, 1, 1),
+ Binary = list_to_binary(lists:seq(0, 255)),
+ Binary = Fun12(Binary, 1, 1),
+ Binary = Fun12(Binary, 4, 4),
+ Binary = Fun12(Binary, 8, 8),
+ <<17:9,19:9>> = Fun12(<<17:6,19:6>>, 9, 6),
Fun13 = fun(Sz) ->
cs_default(<< <<C:8>> || <<C:4>> <= <<1:4,2:4,3:4,0:Sz>> >>)
end,
- ?line <<1,2,3>> = Fun13(0),
- ?line <<1,2,3,0>> = Fun13(4),
- ?line <<1,2,3,0>> = Fun13(5),
- ?line <<1,2,3,0>> = Fun13(6),
- ?line <<1,2,3,0>> = Fun13(7),
- ?line <<1,2,3,0,0>> = Fun13(8),
+ <<1,2,3>> = Fun13(0),
+ <<1,2,3,0>> = Fun13(4),
+ <<1,2,3,0>> = Fun13(5),
+ <<1,2,3,0>> = Fun13(6),
+ <<1,2,3,0>> = Fun13(7),
+ <<1,2,3,0,0>> = Fun13(8),
<<0:3>> = cs_default(<< <<0:S>> || S <- [0,1,2] >>),
<<0:3>> = cs_default(<< <<0:S>> || <<S>> <= <<0,1,2>> >>),
- ?line {'EXIT',_} = (catch << <<C:4>> || <<C:8>> <= {1,2,3} >>),
+ {'EXIT',_} = (catch << <<C:4>> || <<C:8>> <= {1,2,3} >>),
+
+ cs_end(),
+ ok.
+
+-define(BAD(E), {'EXIT',{badarg,_}} = (catch << (E) || _ <- [1,2,3] >>)).
+-define(BAD_V(E), {'EXIT',{badarg,_}} = (catch << (E) || I <- [1,2,3] >>)).
+
+general_expressions(_) ->
+ <<1,2,3>> = << begin <<1,2,3>> end || _ <- [1] >>,
+ <<"abc">> = << begin <<"abc">> end || _ <- [1] >>,
+ <<1,2,3>> = << begin
+ I = <<(I0+1)>>,
+ id(I)
+ end || <<I0>> <= <<0,1,2>> >>,
+ <<1,2,3>> = << I || I <- [<<1,2>>,<<3>>] >>,
+ <<1,2,3>> = << (id(<<I>>)) || I <- [1,2,3] >>,
+ <<2,4>> = << case I rem 2 of
+ 0 -> <<I>>;
+ 1 -> <<>>
+ end || I <- [1,2,3,4,5] >>,
+ <<2,3,4,5,6,7>> = << << (id(<<J>>)) || J <- [2*I,2*I+1] >> ||
+ I <- [1,2,3] >>,
+ <<1,2,2,3,4,4>> = << if
+ I rem 2 =:= 0 -> <<I,I>>;
+ true -> <<I>>
+ end || I <- [1,2,3,4] >>,
+ self() ! <<42>>,
+ <<42>> = << receive B -> B end || _ <- [1] >>,
+ <<10,5,3>> = << try
+ <<(10 div I)>>
+ catch _:_ ->
+ <<>>
+ end || I <- [0,1,2,3] >>,
+
+ %% Failing expressions.
+ ?BAD(bad_atom),
+ ?BAD(42),
+ ?BAD(42.0),
+ ?BAD_V({ok,I}),
+ ?BAD_V([I]),
+ ?BAD_V(fun() -> I end),
- ?line cs_end(),
ok.
+-undef(BAD).
+
cs_init() ->
erts_debug:set_internal_state(available_internal_state, true),
ok.
diff --git a/lib/compiler/test/bs_bit_binaries_SUITE.erl b/lib/compiler/test/bs_bit_binaries_SUITE.erl
index afee52c9b9..208d8c5487 100644
--- a/lib/compiler/test/bs_bit_binaries_SUITE.erl
+++ b/lib/compiler/test/bs_bit_binaries_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
big_binary_to_and_from_list/1,send_and_receive/1,
send_and_receive_alot/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -59,9 +59,9 @@ end_per_group(_GroupName, Config) ->
misc(Config) when is_list(Config) ->
- ?line <<1:100>> = <<1:100>>,
- ?line {ok,ok} = {match(7),match(9)},
- ?line {ok,ok} = {match1(15),match1(31)},
+ <<1:100>> = <<1:100>>,
+ {ok,ok} = {match(7),match(9)},
+ {ok,ok} = {match1(15),match1(31)},
ok.
@@ -74,75 +74,75 @@ match1(N) ->
ok.
test_bit_size(Config) when is_list(Config) ->
- ?line 101 = erlang:bit_size(<<1:101>>),
- ?line 1001 = erlang:bit_size(<<1:1001>>),
- ?line 1001 = erlang:bit_size(<<-10:1001>>),
- ?line 80 = erlang:bit_size(<<1:80>>),
- ?line 800 = erlang:bit_size(<<1:800>>),
- ?line Bin = <<0:16#1000000>>,
- ?line BigBin = list_to_bitstring([Bin||_ <- lists:seq(1,16#10)]++[<<1:1>>]),
- ?line 16#10000001 = erlang:bit_size(BigBin),
+ 101 = erlang:bit_size(<<1:101>>),
+ 1001 = erlang:bit_size(<<1:1001>>),
+ 1001 = erlang:bit_size(<<-10:1001>>),
+ 80 = erlang:bit_size(<<1:80>>),
+ 800 = erlang:bit_size(<<1:800>>),
+ Bin = <<0:16#1000000>>,
+ BigBin = list_to_bitstring([Bin||_ <- lists:seq(1,16#10)]++[<<1:1>>]),
+ 16#10000001 = erlang:bit_size(BigBin),
%% Only run these on computers with lots of memory
%% HugeBin = list_to_bitstring([BigBin||_ <- lists:seq(1,16#10)]++[<<1:1>>]),
%% 16#100000011 = erlang:bit_size(HugeBin),
- ?line 0 = erlang:bit_size(<<>>),
+ 0 = erlang:bit_size(<<>>),
ok.
horrid_match(Config) when is_list(Config) ->
- ?line <<1:4,B:24/bitstring>> = <<1:4,42:24/little>>,
- ?line <<42:24/little>> = B,
+ <<1:4,B:24/bitstring>> = <<1:4,42:24/little>>,
+ <<42:24/little>> = B,
ok.
test_bitstr(Config) when is_list(Config) ->
- ?line <<1:7,B/bitstring>> = <<1:7,<<1:1,6>>/bitstring>>,
- ?line <<1:1,6>> = B,
- ?line B = <<1:1,6>>,
+ <<1:7,B/bitstring>> = <<1:7,<<1:1,6>>/bitstring>>,
+ <<1:1,6>> = B,
+ B = <<1:1,6>>,
ok.
asymmetric_tests(Config) when is_list(Config) ->
- ?line <<1:12>> = <<0,1:4>>,
- ?line <<0,1:4>> = <<1:12>>,
- ?line <<1:1,X/bitstring>> = <<128,255,0,0:2>>,
- ?line <<1,254,0,0:1>> = X,
- ?line X = <<1,254,0,0:1>>,
- ?line <<1:1,X1:25/bitstring>> = <<128,255,0,0:2>>,
- ?line <<1,254,0,0:1>> = X1,
- ?line X1 = <<1,254,0,0:1>>,
+ <<1:12>> = <<0,1:4>>,
+ <<0,1:4>> = <<1:12>>,
+ <<1:1,X/bitstring>> = <<128,255,0,0:2>>,
+ <<1,254,0,0:1>> = X,
+ X = <<1,254,0,0:1>>,
+ <<1:1,X1:25/bitstring>> = <<128,255,0,0:2>>,
+ <<1,254,0,0:1>> = X1,
+ X1 = <<1,254,0,0:1>>,
ok.
big_asymmetric_tests(Config) when is_list(Config) ->
- ?line <<1:875,1:12>> = <<1:875,0,1:4>>,
- ?line <<1:875,0,1:4>> = <<1:875,1:12>>,
- ?line <<1:1,X/bitstring>> = <<128,255,0,0:2,1:875>>,
- ?line <<1,254,0,0:1,1:875>> = X,
- ?line X = <<1,254,0,0:1,1:875>>,
- ?line <<1:1,X1:900/bitstring>> = <<128,255,0,0:2,1:875>>,
- ?line <<1,254,0,0:1,1:875>> = X1,
- ?line X1 = <<1,254,0,0:1,1:875>>,
+ <<1:875,1:12>> = <<1:875,0,1:4>>,
+ <<1:875,0,1:4>> = <<1:875,1:12>>,
+ <<1:1,X/bitstring>> = <<128,255,0,0:2,1:875>>,
+ <<1,254,0,0:1,1:875>> = X,
+ X = <<1,254,0,0:1,1:875>>,
+ <<1:1,X1:900/bitstring>> = <<128,255,0,0:2,1:875>>,
+ <<1,254,0,0:1,1:875>> = X1,
+ X1 = <<1,254,0,0:1,1:875>>,
ok.
binary_to_and_from_list(Config) when is_list(Config) ->
- ?line <<1,2,3,4,1:1>> = list_to_bitstring(bitstring_to_list(<<1,2,3,4,1:1>>)),
- ?line [1,2,3,4,<<1:1>>] = bitstring_to_list(<<1,2,3,4,1:1>>),
- ?line <<1:1,1,2,3,4>> = list_to_bitstring([<<1:1>>,1,2,3,4]),
- ?line [128,129,1,130,<<0:1>>] = bitstring_to_list(<<1:1,1,2,3,4>>),
+ <<1,2,3,4,1:1>> = list_to_bitstring(bitstring_to_list(<<1,2,3,4,1:1>>)),
+ [1,2,3,4,<<1:1>>] = bitstring_to_list(<<1,2,3,4,1:1>>),
+ <<1:1,1,2,3,4>> = list_to_bitstring([<<1:1>>,1,2,3,4]),
+ [128,129,1,130,<<0:1>>] = bitstring_to_list(<<1:1,1,2,3,4>>),
ok.
big_binary_to_and_from_list(Config) when is_list(Config) ->
- ?line <<1:800,2,3,4,1:1>> =
+ <<1:800,2,3,4,1:1>> =
list_to_bitstring(bitstring_to_list(<<1:800,2,3,4,1:1>>)),
- ?line [1,2,3,4|_Rest1] = bitstring_to_list(<<1,2,3,4,1:800,1:1>>),
- ?line <<1:801,1,2,3,4>> = list_to_bitstring([<<1:801>>,1,2,3,4]),
+ [1,2,3,4|_Rest1] = bitstring_to_list(<<1,2,3,4,1:800,1:1>>),
+ <<1:801,1,2,3,4>> = list_to_bitstring([<<1:801>>,1,2,3,4]),
ok.
send_and_receive(Config) when is_list(Config) ->
- ?line Bin = <<1,2:7>>,
+ Bin = <<1,2:7>>,
Pid = spawn_link(fun() -> receiver(Bin) end),
- ?line Pid ! {self(),<<1:7,8:5,Bin/bitstring>>},
- ?line receive
- ok ->
- ok
- end.
+ Pid ! {self(),<<1:7,8:5,Bin/bitstring>>},
+ receive
+ ok ->
+ ok
+ end.
receiver(Bin) ->
receive
diff --git a/lib/compiler/test/bs_construct_SUITE.erl b/lib/compiler/test/bs_construct_SUITE.erl
index 87cfaaf73c..ff18f8b41c 100644
--- a/lib/compiler/test/bs_construct_SUITE.erl
+++ b/lib/compiler/test/bs_construct_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,9 +31,11 @@
nasty_literals/1,coerce_to_float/1,side_effect/1,
opt/1,otp_7556/1,float_arith/1,otp_8054/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
test_lib:recompile(?MODULE),
@@ -60,12 +62,9 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
end_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
two(Config) when is_list(Config) ->
@@ -86,7 +85,7 @@ id(I) -> I.
-define(T(B, L), {B, ??B, L}).
-define(N(B), {B, ??B, unknown}).
--define(FAIL(Expr), ?line {'EXIT',{badarg,_}} = (catch Expr)).
+-define(FAIL(Expr), {'EXIT',{badarg,_}} = (catch Expr)).
l(I_13, I_big1, I_16, Bin) ->
[
@@ -200,7 +199,7 @@ one_test({C_bin, E_bin, Str, Bytes}) when is_list(Bytes) ->
true ->
io:format("ERROR: Compiled: ~p. Expected ~p. Got ~p.~n",
[Str, Bytes, bitstring_to_list(C_bin)]),
- test_server:fail(comp)
+ ct:fail(comp)
end,
if
E_bin == Bin ->
@@ -208,7 +207,7 @@ one_test({C_bin, E_bin, Str, Bytes}) when is_list(Bytes) ->
true ->
io:format("ERROR: Interpreted: ~p. Expected ~p. Got ~p.~n",
[Str, Bytes, bitstring_to_list(E_bin)]),
- test_server:fail(comp)
+ ct:fail(comp)
end;
one_test({C_bin, E_bin, Str, Result}) ->
io:format(" ~s ~p~n", [Str, C_bin]),
@@ -229,7 +228,7 @@ one_test({C_bin, E_bin, Str, Result}) ->
io:format("ERROR: Compiled not equal to interpreted:"
"~n ~p, ~p.~n",
[bitstring_to_list(C_bin), bitstring_to_list(E_bin)]),
- test_server:fail(comp);
+ ct:fail(comp);
0 ->
ok;
%% For situations where the final bits may not matter, like
@@ -261,15 +260,15 @@ equal_lists(A, B, R) ->
end.
test1(Config) when is_list(Config) ->
- ?line I_13 = i(13),
- ?line I_big1 = big(1),
- ?line I_16 = i(16),
- ?line Bin = i(<<16#A5,16#5A,16#C3>>),
- ?line Vars = lists:sort([{'I_13',I_13},
- {'I_big1',I_big1},
- {'I_16',I_16},
- {'Bin',Bin}]),
- ?line lists:foreach(fun one_test/1, eval_list(l(I_13, I_big1, I_16, Bin), Vars)).
+ I_13 = i(13),
+ I_big1 = big(1),
+ I_16 = i(16),
+ Bin = i(<<16#A5,16#5A,16#C3>>),
+ Vars = lists:sort([{'I_13',I_13},
+ {'I_big1',I_big1},
+ {'I_16',I_16},
+ {'Bin',Bin}]),
+ lists:foreach(fun one_test/1, eval_list(l(I_13, I_big1, I_16, Bin), Vars)).
fail(Config) when is_list(Config) ->
I_minus_777 = i(-777),
@@ -278,68 +277,68 @@ fail(Config) when is_list(Config) ->
%% One negative field size, but the sum of field sizes will be 1 byte.
%% Make sure that we reject that properly.
- ?line {'EXIT',{badarg,_}} = (catch <<I_minus_777:2048/unit:8,
- 57:I_minus_2047/unit:8>>),
+ {'EXIT',{badarg,_}} = (catch <<I_minus_777:2048/unit:8,
+ 57:I_minus_2047/unit:8>>),
%% Same thing, but use literals.
- ?line {'EXIT',{badarg,_}} = (catch <<I_minus_777:2048/unit:8,
- 57:(-2047)/unit:8>>),
+ {'EXIT',{badarg,_}} = (catch <<I_minus_777:2048/unit:8,
+ 57:(-2047)/unit:8>>),
%% Not numbers.
- ?line {'EXIT',{badarg,_}} = (catch <<45:(i(not_a_number))>>),
- ?line {'EXIT',{badarg,_}} = (catch <<13:8,45:(i(not_a_number))>>),
+ {'EXIT',{badarg,_}} = (catch <<45:(i(not_a_number))>>),
+ {'EXIT',{badarg,_}} = (catch <<13:8,45:(i(not_a_number))>>),
%% Unaligned sizes.
BadSz = i(7),
Bitstr = i(<<42:17>>),
- ?line {'EXIT',{badarg,_}} = (catch <<Bitstr:4/binary>>),
- ?line {'EXIT',{badarg,_}} = (catch <<Bitstr:BadSz/binary>>),
+ {'EXIT',{badarg,_}} = (catch <<Bitstr:4/binary>>),
+ {'EXIT',{badarg,_}} = (catch <<Bitstr:BadSz/binary>>),
- ?line [] = [X || {X} <- [], X == <<Bitstr:BadSz/binary>>],
- ?line [] = [X || {X} <- [], X == <<Bitstr:4/binary>>],
+ [] = [X || {X} <- [], X == <<Bitstr:BadSz/binary>>],
+ [] = [X || {X} <- [], X == <<Bitstr:4/binary>>],
%% Literals with incorrect type.
- ?line {'EXIT',{badarg,_}} = (catch <<42.0/integer>>),
- ?line {'EXIT',{badarg,_}} = (catch <<42/binary>>),
- ?line {'EXIT',{badarg,_}} = (catch <<an_atom/integer>>),
+ {'EXIT',{badarg,_}} = (catch <<42.0/integer>>),
+ {'EXIT',{badarg,_}} = (catch <<42/binary>>),
+ {'EXIT',{badarg,_}} = (catch <<an_atom/integer>>),
ok.
float_bin(Config) when is_list(Config) ->
%% Some more coverage.
- ?line {<<1,2,3>>,7.0} = float_bin_1(4),
+ {<<1,2,3>>,7.0} = float_bin_1(4),
F = 42.0,
- ?line <<42,0,0,0,0,0,0,69,64>> = <<(id(42)),F/little-float>>,
+ <<42,0,0,0,0,0,0,69,64>> = <<(id(42)),F/little-float>>,
ok.
float_bin_1(F) ->
{<<1,2,3>>,F+3.0}.
in_guard(Config) when is_list(Config) ->
- ?line 1 = in_guard_1(<<16#74ad:16>>, 16#e95, 5),
- ?line 2 = in_guard_1(<<16#3A,16#F7,"hello">>, 16#3AF7, <<"hello">>),
- ?line 3 = in_guard_1(<<16#FBCD:14,3.1415/float,3:2>>, 16#FBCD, 3.1415),
- ?line 3 = in_guard_1(<<16#FBCD:14,3/float,3:2>>, 16#FBCD, 3),
- ?line 3 = in_guard_1(<<16#FBCD:14,(2 bsl 226)/float,3:2>>, 16#FBCD, 2 bsl 226),
- ?line nope = in_guard_1(<<1>>, 42, b),
- ?line nope = in_guard_1(<<1>>, a, b),
- ?line nope = in_guard_1(<<1,2>>, 1, 1),
- ?line nope = in_guard_1(<<4,5>>, 1, 2.71),
- ?line nope = in_guard_1(<<4,5>>, 1, <<12,13>>),
-
- ?line 1 = in_guard_2(<<0,56>>, 7, blurf),
- ?line 2 = in_guard_2(<<1,255>>, 511, blurf),
- ?line 3 = in_guard_2(<<0,3>>, 0, blurf),
- ?line 4 = in_guard_2(<<>>, 1, {<<7:16>>}),
- ?line nope = in_guard_2(<<4,5>>, 1, blurf),
-
- ?line 42 = in_guard_3(<<1,2,3,42>>, <<1,2,3>>),
- ?line 42 = in_guard_3(<<1,2,3,42>>, <<1,2,3>>),
- ?line nope = in_guard_3(<<>>, <<>>),
-
- ?line ok = in_guard_4(<<15:4>>, 255),
- ?line nope = in_guard_4(<<15:8>>, 255),
+ 1 = in_guard_1(<<16#74ad:16>>, 16#e95, 5),
+ 2 = in_guard_1(<<16#3A,16#F7,"hello">>, 16#3AF7, <<"hello">>),
+ 3 = in_guard_1(<<16#FBCD:14,3.1415/float,3:2>>, 16#FBCD, 3.1415),
+ 3 = in_guard_1(<<16#FBCD:14,3/float,3:2>>, 16#FBCD, 3),
+ 3 = in_guard_1(<<16#FBCD:14,(2 bsl 226)/float,3:2>>, 16#FBCD, 2 bsl 226),
+ nope = in_guard_1(<<1>>, 42, b),
+ nope = in_guard_1(<<1>>, a, b),
+ nope = in_guard_1(<<1,2>>, 1, 1),
+ nope = in_guard_1(<<4,5>>, 1, 2.71),
+ nope = in_guard_1(<<4,5>>, 1, <<12,13>>),
+
+ 1 = in_guard_2(<<0,56>>, 7, blurf),
+ 2 = in_guard_2(<<1,255>>, 511, blurf),
+ 3 = in_guard_2(<<0,3>>, 0, blurf),
+ 4 = in_guard_2(<<>>, 1, {<<7:16>>}),
+ nope = in_guard_2(<<4,5>>, 1, blurf),
+
+ 42 = in_guard_3(<<1,2,3,42>>, <<1,2,3>>),
+ 42 = in_guard_3(<<1,2,3,42>>, <<1,2,3>>),
+ nope = in_guard_3(<<>>, <<>>),
+
+ ok = in_guard_4(<<15:4>>, 255),
+ nope = in_guard_4(<<15:8>>, 255),
ok.
in_guard_1(Bin, A, B) when <<A:13,B:3>> == Bin -> 1;
@@ -361,10 +360,10 @@ in_guard_4(Bin, A) when <<A:4>> =:= Bin -> ok;
in_guard_4(_, _) -> nope.
in_catch(Config) when is_list(Config) ->
- ?line <<42,0,5>> = small(42, 5),
- ?line <<255>> = small(255, <<1,2,3,4,5,6,7,8,9>>),
- ?line <<1,2>> = small(<<7,8,9,10>>, 258),
- ?line <<>> = small(<<1,2,3,4,5>>, <<7,8,9,10>>),
+ <<42,0,5>> = small(42, 5),
+ <<255>> = small(255, <<1,2,3,4,5,6,7,8,9>>),
+ <<1,2>> = small(<<7,8,9,10>>, 258),
+ <<>> = small(<<1,2,3,4,5>>, <<7,8,9,10>>),
<<15,240,0,42>> = small2(255, 42),
<<7:20>> = small2(<<1,2,3>>, 7),
@@ -413,20 +412,20 @@ small2(A, B) ->
nasty_literals(Config) when is_list(Config) ->
case erlang:system_info(endian) of
big ->
- ?line [0,42] = binary_to_list(id(<<42:16/native>>));
+ [0,42] = binary_to_list(id(<<42:16/native>>));
little ->
- ?line [42,0] = binary_to_list(id(<<42:16/native>>))
+ [42,0] = binary_to_list(id(<<42:16/native>>))
end,
- ?line Bin0 = id(<<1,2,3,0:10000000,4,5,6>>),
- ?line 1250006 = size(Bin0),
- ?line <<1,2,3,0:10000000,4,5,6>> = Bin0,
+ Bin0 = id(<<1,2,3,0:10000000,4,5,6>>),
+ 1250006 = size(Bin0),
+ <<1,2,3,0:10000000,4,5,6>> = Bin0,
- ?line Bin1 = id(<<0:10000000,7,8,-1:10000000,9,10,0:10000000>>),
- ?line 3750004 = size(Bin1),
- ?line <<0:10000000,7,8,-1:10000000/signed,9,10,0:10000000>> = Bin1,
+ Bin1 = id(<<0:10000000,7,8,-1:10000000,9,10,0:10000000>>),
+ 3750004 = size(Bin1),
+ <<0:10000000,7,8,-1:10000000/signed,9,10,0:10000000>> = Bin1,
- ?line <<255,255,0,0,0>> = id(<<255,255,0,0,0>>),
+ <<255,255,0,0,0>> = id(<<255,255,0,0,0>>),
%% Coverage.
I = 16#7777FFFF7777FFFF7777FFFF7777FFFF7777FFFF7777FFFF,
@@ -435,18 +434,18 @@ nasty_literals(Config) when is_list(Config) ->
ok.
-define(COF(Int0),
- ?line (fun(Int) ->
- true = <<Int:32/float>> =:= <<(float(Int)):32/float>>,
- true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
- end)(nonliteral(Int0)),
- ?line true = <<Int0:32/float>> =:= <<(float(Int0)):32/float>>,
- ?line true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
+ (fun(Int) ->
+ true = <<Int:32/float>> =:= <<(float(Int)):32/float>>,
+ true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
+ end)(nonliteral(Int0)),
+ true = <<Int0:32/float>> =:= <<(float(Int0)):32/float>>,
+ true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
-define(COF64(Int0),
- ?line (fun(Int) ->
- true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
- end)(nonliteral(Int0)),
- ?line true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
+ (fun(Int) ->
+ true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
+ end)(nonliteral(Int0)),
+ true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
nonliteral(X) -> X.
@@ -467,7 +466,7 @@ coerce_to_float(Config) when is_list(Config) ->
side_effect(Config) when is_list(Config) ->
{'EXIT',{badarg,_}} = (catch side_effect_1(a)),
{'EXIT',{badarg,_}} = (catch side_effect_1(<<>>)),
- ?line ok = side_effect_1(42),
+ ok = side_effect_1(42),
ok.
side_effect_1(A) ->
@@ -477,32 +476,32 @@ side_effect_1(A) ->
-record(otp_7029, {a,b}).
opt(Config) when is_list(Config) ->
- ?line 42 = otp_7029(#otp_7029{a = <<>>,b = 42}),
+ 42 = otp_7029(#otp_7029{a = <<>>,b = 42}),
N = 16,
- ?line <<1,3,65>> = id(<<1,833:N>>),
- ?line <<1,66,3>> = id(<<1,834:N/little>>),
- ?line <<1,65,136,0,0>> = id(<<1,17.0:32/float>>),
- ?line <<1,64,8,0,0,0,0,0,0>> = id(<<1,3.0:N/float-unit:4>>),
- ?line <<1,0,0,0,0,0,0,8,64>> = id(<<1,3.0:N/little-float-unit:4>>),
- ?line {'EXIT',{badarg,_}} = (catch id(<<3.1416:N/float>>)),
+ <<1,3,65>> = id(<<1,833:N>>),
+ <<1,66,3>> = id(<<1,834:N/little>>),
+ <<1,65,136,0,0>> = id(<<1,17.0:32/float>>),
+ <<1,64,8,0,0,0,0,0,0>> = id(<<1,3.0:N/float-unit:4>>),
+ <<1,0,0,0,0,0,0,8,64>> = id(<<1,3.0:N/little-float-unit:4>>),
+ {'EXIT',{badarg,_}} = (catch id(<<3.1416:N/float>>)),
B = <<1,2,3,4,5>>,
- ?line <<0,1,2,3,4,5>> = id(<<0,B/binary>>),
- ?line <<1,2,3,4,5,19>> = id(<<B:5/binary,19>>),
- ?line <<1,2,3,42>> = id(<<B:3/binary,42>>),
+ <<0,1,2,3,4,5>> = id(<<0,B/binary>>),
+ <<1,2,3,4,5,19>> = id(<<B:5/binary,19>>),
+ <<1,2,3,42>> = id(<<B:3/binary,42>>),
- ?line {'EXIT',_} = (catch <<<<23,56,0,2>>:(2.5)/binary>>),
- ?line {'EXIT',_} = (catch <<<<23,56,0,2>>:(-16)/binary>>),
- ?line {'EXIT',_} = (catch <<<<23,56,0,2>>:(anka)>>),
- ?line {'EXIT',_} = (catch <<<<23,56,0,2>>:64/float>>),
- ?line {'EXIT',_} = (catch <<<<23,56,0,2:7>>/binary>>),
+ {'EXIT',_} = (catch <<<<23,56,0,2>>:(2.5)/binary>>),
+ {'EXIT',_} = (catch <<<<23,56,0,2>>:(-16)/binary>>),
+ {'EXIT',_} = (catch <<<<23,56,0,2>>:(anka)>>),
+ {'EXIT',_} = (catch <<<<23,56,0,2>>:64/float>>),
+ {'EXIT',_} = (catch <<<<23,56,0,2:7>>/binary>>),
%% Test constant propagation - there should be a warning.
BadSz = 2.5,
{'EXIT',_} = (catch <<<<N,56,0,2>>:BadSz/binary>>),
case id(false) of
- true -> ?line opt_dont_call_me();
+ true -> opt_dont_call_me();
false -> ok
end,
@@ -530,7 +529,7 @@ otp_7556(Bin, A, B, C) ->
%% for a binary construction with a later allocation).
float_arith(Config) when is_list(Config) ->
- ?line {<<1,2,3,64,69,0,0,0,0,0,0>>,21.0} = do_float_arith(<<1,2,3>>, 42, 2),
+ {<<1,2,3,64,69,0,0,0,0,0,0>>,21.0} = do_float_arith(<<1,2,3>>, 42, 2),
ok.
do_float_arith(Bin0, X, Y) ->
@@ -538,7 +537,7 @@ do_float_arith(Bin0, X, Y) ->
{Bin,X / Y}.
otp_8054(Config) when is_list(Config) ->
- ?line <<"abc">> = otp_8054_1([null,1,2,3], <<"abc">>),
+ <<"abc">> = otp_8054_1([null,1,2,3], <<"abc">>),
ok.
otp_8054_1([H|T], Bin) ->
diff --git a/lib/compiler/test/bs_match_SUITE.erl b/lib/compiler/test/bs_match_SUITE.erl
index 7fb0a16540..224abf6c29 100644
--- a/lib/compiler/test/bs_match_SUITE.erl
+++ b/lib/compiler/test/bs_match_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,11 +24,11 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
init_per_testcase/2,end_per_testcase/2,
- fun_shadow/1,int_float/1,otp_5269/1,null_fields/1,wiger/1,
+ size_shadow/1,int_float/1,otp_5269/1,null_fields/1,wiger/1,
bin_tail/1,save_restore/1,
partitioned_bs_match/1,function_clause/1,
unit/1,shared_sub_bins/1,bin_and_float/1,
- dec_subidentifiers/1,skip_optional_tag/1,
+ dec_subidentifiers/1,skip_optional_tag/1,decode_integer/1,
wfbm/1,degenerated_match/1,bs_sum/1,coverage/1,
multiple_uses/1,zero_label/1,followed_by_catch/1,
matching_meets_construction/1,simon/1,matching_and_andalso/1,
@@ -36,15 +36,19 @@
match_string/1,zero_width/1,bad_size/1,haystack/1,
cover_beam_bool/1,matched_out_size/1,follow_fail_branch/1,
no_partition/1,calling_a_binary/1,binary_in_map/1,
- match_string_opt/1,map_and_binary/1,
- unsafe_branch_caching/1]).
+ match_string_opt/1,select_on_integer/1,
+ map_and_binary/1,unsafe_branch_caching/1,
+ bad_literals/1,good_literals/1,constant_propagation/1]).
-export([coverage_id/1,coverage_external_ignore/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
+-include_lib("syntax_tools/include/merl.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
test_lib:recompile(?MODULE),
@@ -52,19 +56,20 @@ all() ->
groups() ->
[{p,[parallel],
- [fun_shadow,int_float,otp_5269,null_fields,wiger,
+ [size_shadow,int_float,otp_5269,null_fields,wiger,
bin_tail,save_restore,
partitioned_bs_match,function_clause,unit,
shared_sub_bins,bin_and_float,dec_subidentifiers,
- skip_optional_tag,wfbm,degenerated_match,bs_sum,
+ skip_optional_tag,decode_integer,wfbm,degenerated_match,bs_sum,
coverage,multiple_uses,zero_label,followed_by_catch,
matching_meets_construction,simon,
matching_and_andalso,otp_7188,otp_7233,otp_7240,
otp_7498,match_string,zero_width,bad_size,haystack,
cover_beam_bool,matched_out_size,follow_fail_branch,
no_partition,calling_a_binary,binary_in_map,
- match_string_opt,map_and_binary,
- unsafe_branch_caching]}].
+ match_string_opt,select_on_integer,
+ map_and_binary,unsafe_branch_caching,
+ bad_literals,good_literals,constant_propagation]}].
init_per_suite(Config) ->
@@ -81,108 +86,133 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
end_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
-fun_shadow(Config) when is_list(Config) ->
- %% OTP-5270
- ?line 7 = fun_shadow_1(),
- ?line 7 = fun_shadow_2(8),
- ?line 7 = fun_shadow_3(),
- ?line no = fun_shadow_4(8),
+size_shadow(Config) when is_list(Config) ->
+ %% Originally OTP-5270.
+ 7 = size_shadow_1(),
+ 7 = size_shadow_2(8),
+ 7 = size_shadow_3(),
+ no = size_shadow_4(8),
+ Any = {any,term,goes},
+ {2577,Any,-175,whatever} =
+ (size_shadow_5(Any, 12))(<<2577:12>>, -175, whatever),
+ {7777,Any,42,whatever} =
+ (size_shadow_6(Any, 13))(42, <<7777:13>>, whatever),
+ {<<45>>,<<>>} = size_shadow_7({int,1}, <<1:16,45>>),
+ {'EXIT',{function_clause,_}} =
+ (catch size_shadow_7({int,42}, <<1:16,45>>)),
ok.
-fun_shadow_1() ->
+size_shadow_1() ->
L = 8,
F = fun(<<L:L,B:L>>) -> B end,
F(<<16:8, 7:16>>).
-fun_shadow_2(L) ->
+size_shadow_2(L) ->
F = fun(<<L:L,B:L>>) -> B end,
F(<<16:8, 7:16>>).
-fun_shadow_3() ->
+size_shadow_3() ->
L = 8,
F = fun(<<L:L,B:L,L:L>>) -> B end,
F(<<16:8, 7:16,16:16>>).
-fun_shadow_4(L) ->
+size_shadow_4(L) ->
F = fun(<<L:L,B:L,L:L>>) -> B;
(_) -> no end,
F(<<16:8, 7:16,15:16>>).
+size_shadow_5(X, Y) ->
+ fun (<< A:Y >>, Y, B) -> fum(A, X, Y, B) end.
+
+size_shadow_6(X, Y) ->
+ fun (Y, << A:Y >>, B) -> fum(A, X, Y, B) end.
+
+fum(A, B, C, D) ->
+ {A,B,C,D}.
+
+size_shadow_7({int,N}, <<N:16,B:N/binary,T/binary>>) ->
+ {B,T}.
+
+
int_float(Config) when is_list(Config) ->
%% OTP-5323
- ?line <<103133.0:64/float>> = <<103133:64/float>>,
- ?line <<103133:64/float>> = <<103133:64/float>>,
- ok.
+ <<103133.0:64/float>> = <<103133:64/float>>,
+ <<103133:64/float>> = <<103133:64/float>>,
+
+ %% Coverage of error cases in sys_pre_expand:coerce_to_float/2.
+ case id(default) of
+ <<(1 bsl 1024):64/float>> ->
+ ct:fail(should_not_match);
+ default ->
+ ok
+ end.
%% Stolen from erl_eval_SUITE and modified.
%% OTP-5269. Bugs in the bit syntax.
otp_5269(Config) when is_list(Config) ->
- ?line check(fun() -> L = 8,
- F = fun(<<A:L,B:A>>) -> B end,
- F(<<16:8, 7:16>>)
+ check(fun() -> L = 8,
+ F = fun(<<A:L,B:A>>) -> B end,
+ F(<<16:8, 7:16>>)
end,
7),
- ?line check(fun() -> L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end,
- 7),
- ?line check(fun() -> U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end,
- 32),
- ?line check(fun() -> U = 8, [U || <<U:U>> <- [<<32:8>>]] end,
- [32]),
- ?line check(fun() -> [X || <<A:8,
- B:A>> <- [<<16:8,19:16>>],
- <<X:8>> <- [<<B:8>>]] end,
- [19]),
- ?line check(fun() -> A = 4, B = 28, bit_size(<<13:(A+(X=B))>>), X end,
- 28),
- ?line check(fun() ->
- <<Size,B:Size/binary,Rest/binary>> = <<2,"AB","CD">>,
- {Size,B,Rest}
- end,
- {2,<<"AB">>,<<"CD">>}),
- ?line check(fun() -> X = 32,
- [X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end,
- %% "binsize variable" ^
- [1,2]),
- ?line check(fun() ->
- (fun (<<A:1/binary, B:8/integer, _C:B/binary>>) ->
- case A of
- B -> wrong;
- _ -> ok
- end
- end)(<<1,2,3,4>>) end,
- ok),
+ check(fun() -> L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end,
+ 7),
+ check(fun() -> U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end,
+ 32),
+ check(fun() -> U = 8, [U || <<U:U>> <- [<<32:8>>]] end,
+ [32]),
+ check(fun() -> [X || <<A:8,
+ B:A>> <- [<<16:8,19:16>>],
+ <<X:8>> <- [<<B:8>>]] end,
+ [19]),
+ check(fun() -> A = 4, B = 28, bit_size(<<13:(A+(X=B))>>), X end,
+ 28),
+ check(fun() ->
+ <<Size,B:Size/binary,Rest/binary>> = <<2,"AB","CD">>,
+ {Size,B,Rest}
+ end,
+ {2,<<"AB">>,<<"CD">>}),
+ check(fun() -> X = 32,
+ [X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end,
+ %% "binsize variable" ^
+ [1,2]),
+ check(fun() ->
+ (fun (<<A:1/binary, B:8/integer, _C:B/binary>>) ->
+ case A of
+ B -> wrong;
+ _ -> ok
+ end
+ end)(<<1,2,3,4>>) end,
+ ok),
ok.
null_fields(Config) when is_list(Config) ->
- ?line check(fun() ->
- W = id(0),
- F = fun(<<_:W>>) -> tail;
- (<<>>) -> empty
- end,
- F(<<>>)
- end, tail),
- ?line check(fun() ->
- F = fun(<<_/binary>>) -> tail;
- (<<>>) -> empty
- end,
- F(<<>>)
- end, tail),
+ check(fun() ->
+ W = id(0),
+ F = fun(<<_:W>>) -> tail;
+ (<<>>) -> empty
+ end,
+ F(<<>>)
+ end, tail),
+ check(fun() ->
+ F = fun(<<_/binary>>) -> tail;
+ (<<>>) -> empty
+ end,
+ F(<<>>)
+ end, tail),
ok.
wiger(Config) when is_list(Config) ->
- ?line ok1 = wcheck(<<3>>),
- ?line ok2 = wcheck(<<1,2,3>>),
- ?line ok3 = wcheck(<<4>>),
- ?line {error,<<1,2,3,4>>} = wcheck(<<1,2,3,4>>),
- ?line {error,<<>>} = wcheck(<<>>),
+ ok1 = wcheck(<<3>>),
+ ok2 = wcheck(<<1,2,3>>),
+ ok3 = wcheck(<<4>>),
+ {error,<<1,2,3,4>>} = wcheck(<<1,2,3,4>>),
+ {error,<<>>} = wcheck(<<>>),
ok.
wcheck(<<A>>) when A==3->
@@ -196,24 +226,24 @@ wcheck(Other) ->
bin_tail(Config) when is_list(Config) ->
S = <<"abcde">>,
- ?line $a = bin_tail_c(S, 0),
- ?line $c = bin_tail_c(S, 2),
- ?line $e = bin_tail_c(S, 4),
- ?line {'EXIT',_} = (catch bin_tail_c(S, 5)),
- ?line {'EXIT',_} = (catch bin_tail_c_var(S, 5)),
-
- ?line $a = bin_tail_d(S, 0),
- ?line $b = bin_tail_d(S, 8),
- ?line $d = bin_tail_d(S, 3*8),
- ?line {'EXIT',_} = (catch bin_tail_d_dead(S, 1)),
- ?line {'EXIT',_} = (catch bin_tail_d_dead(S, 9)),
- ?line {'EXIT',_} = (catch bin_tail_d_dead(S, 5*8)),
- ?line {'EXIT',_} = (catch bin_tail_d_var(S, 1)),
-
- ?line ok = bin_tail_e(<<2:2,0:1,1:5>>),
- ?line ok = bin_tail_e(<<2:2,1:1,1:5,42:64>>),
- ?line error = bin_tail_e(<<3:2,1:1,1:5,42:64>>),
- ?line error = bin_tail_e(<<>>),
+ $a = bin_tail_c(S, 0),
+ $c = bin_tail_c(S, 2),
+ $e = bin_tail_c(S, 4),
+ {'EXIT',_} = (catch bin_tail_c(S, 5)),
+ {'EXIT',_} = (catch bin_tail_c_var(S, 5)),
+
+ $a = bin_tail_d(S, 0),
+ $b = bin_tail_d(S, 8),
+ $d = bin_tail_d(S, 3*8),
+ {'EXIT',_} = (catch bin_tail_d_dead(S, 1)),
+ {'EXIT',_} = (catch bin_tail_d_dead(S, 9)),
+ {'EXIT',_} = (catch bin_tail_d_dead(S, 5*8)),
+ {'EXIT',_} = (catch bin_tail_d_var(S, 1)),
+
+ ok = bin_tail_e(<<2:2,0:1,1:5>>),
+ ok = bin_tail_e(<<2:2,1:1,1:5,42:64>>),
+ error = bin_tail_e(<<3:2,1:1,1:5,42:64>>),
+ error = bin_tail_e(<<>>),
ok.
bin_tail_c(Bin, Offset) ->
@@ -272,34 +302,34 @@ bin_tail_e_var(Bin) ->
end.
save_restore(Config) when is_list(Config) ->
- ?line 0 = save_restore_1(<<0:2,42:6>>),
- ?line {1,3456} = save_restore_1(<<1:2,3456:14>>),
- ?line {2,7981234} = save_restore_1(<<2:2,7981234:30>>),
- ?line {3,763967493838} = save_restore_1(<<0:2,763967493838:62>>),
+ 0 = save_restore_1(<<0:2,42:6>>),
+ {1,3456} = save_restore_1(<<1:2,3456:14>>),
+ {2,7981234} = save_restore_1(<<2:2,7981234:30>>),
+ {3,763967493838} = save_restore_1(<<0:2,763967493838:62>>),
A = <<" x">>,
B = <<".x">>,
C = <<"-x">>,
- ?line {" ",<<"x">>} = lll(A),
- ?line {" ",<<"x">>} = mmm(A),
- ?line {" ",<<"x">>} = nnn(A),
- ?line {" ",<<"x">>} = ooo(A),
+ {" ",<<"x">>} = lll(A),
+ {" ",<<"x">>} = mmm(A),
+ {" ",<<"x">>} = nnn(A),
+ {" ",<<"x">>} = ooo(A),
- ?line {".",<<"x">>} = lll(B),
- ?line {".",<<"x">>} = mmm(B),
- ?line {".",<<"x">>} = nnn(B),
- ?line {".",<<"x">>} = ooo(B),
+ {".",<<"x">>} = lll(B),
+ {".",<<"x">>} = mmm(B),
+ {".",<<"x">>} = nnn(B),
+ {".",<<"x">>} = ooo(B),
- ?line {"-",<<"x">>} = lll(C),
- ?line {"-",<<"x">>} = mmm(C),
- ?line {"-",<<"x">>} = nnn(C),
- ?line {"-",<<"x">>} = ooo(C),
+ {"-",<<"x">>} = lll(C),
+ {"-",<<"x">>} = mmm(C),
+ {"-",<<"x">>} = nnn(C),
+ {"-",<<"x">>} = ooo(C),
Bin = <<-1:64>>,
case bad_float_unpack_match(Bin) of
-1 -> ok;
- _Other -> ?line ?t:fail(bad_return_value_probably_NaN)
+ _Other -> ct:fail(bad_return_value_probably_NaN)
end.
save_restore_1(Bin) ->
@@ -328,18 +358,18 @@ bad_float_unpack_match(<<I:64/integer-signed>>) -> I.
partitioned_bs_match(Config) when is_list(Config) ->
- ?line <<1,2,3>> = partitioned_bs_match(blurf, <<42,1,2,3>>),
- ?line error = partitioned_bs_match(10, <<7,8,15,13>>),
- ?line error = partitioned_bs_match(100, {a,tuple,is,'not',a,binary}),
- ?line ok = partitioned_bs_match(0, <<>>),
- ?line fc(partitioned_bs_match, [-1,blurf],
+ <<1,2,3>> = partitioned_bs_match(blurf, <<42,1,2,3>>),
+ error = partitioned_bs_match(10, <<7,8,15,13>>),
+ error = partitioned_bs_match(100, {a,tuple,is,'not',a,binary}),
+ ok = partitioned_bs_match(0, <<>>),
+ fc(partitioned_bs_match, [-1,blurf],
catch partitioned_bs_match(-1, blurf)),
- ?line fc(partitioned_bs_match, [-1,<<1,2,3>>],
+ fc(partitioned_bs_match, [-1,<<1,2,3>>],
catch partitioned_bs_match(-1, <<1,2,3>>)),
- ?line {17,<<1,2,3>>} = partitioned_bs_match_2(1, <<17,1,2,3>>),
- ?line {7,<<1,2,3>>} = partitioned_bs_match_2(7, <<17,1,2,3>>),
+ {17,<<1,2,3>>} = partitioned_bs_match_2(1, <<17,1,2,3>>),
+ {7,<<1,2,3>>} = partitioned_bs_match_2(7, <<17,1,2,3>>),
- ?line fc(partitioned_bs_match_2, [4,<<0:17>>],
+ fc(partitioned_bs_match_2, [4,<<0:17>>],
catch partitioned_bs_match_2(4, <<0:17>>)),
anything = partitioned_bs_match_3(anything, <<42>>),
@@ -392,25 +422,25 @@ function_clause_2(<<_:4>>) ->
ok.
unit(Config) when is_list(Config) ->
- ?line 42 = peek1(<<42>>),
- ?line 43 = peek1(<<43,1,2>>),
- ?line 43 = peek1(<<43,1,2,(-1):1>>),
- ?line 43 = peek1(<<43,1,2,(-1):2>>),
- ?line 43 = peek1(<<43,1,2,(-1):7>>),
-
- ?line 99 = peek8(<<99>>),
- ?line 100 = peek8(<<100,101>>),
- ?line fc(peek8, [<<100,101,0:1>>], catch peek8(<<100,101,0:1>>)),
-
- ?line 37484 = peek16(<<37484:16>>),
- ?line 37489 = peek16(<<37489:16,5566:16>>),
- ?line fc(peek16, [<<8>>], catch peek16(<<8>>)),
- ?line fc(peek16, [<<42:15>>], catch peek16(<<42:15>>)),
- ?line fc(peek16, [<<1,2,3,4,5>>], catch peek16(<<1,2,3,4,5>>)),
-
- ?line 127 = peek7(<<127:7>>),
- ?line 100 = peek7(<<100:7,19:7>>),
- ?line fc(peek7, [<<1,2>>], catch peek7(<<1,2>>)),
+ 42 = peek1(<<42>>),
+ 43 = peek1(<<43,1,2>>),
+ 43 = peek1(<<43,1,2,(-1):1>>),
+ 43 = peek1(<<43,1,2,(-1):2>>),
+ 43 = peek1(<<43,1,2,(-1):7>>),
+
+ 99 = peek8(<<99>>),
+ 100 = peek8(<<100,101>>),
+ fc(peek8, [<<100,101,0:1>>], catch peek8(<<100,101,0:1>>)),
+
+ 37484 = peek16(<<37484:16>>),
+ 37489 = peek16(<<37489:16,5566:16>>),
+ fc(peek16, [<<8>>], catch peek16(<<8>>)),
+ fc(peek16, [<<42:15>>], catch peek16(<<42:15>>)),
+ fc(peek16, [<<1,2,3,4,5>>], catch peek16(<<1,2,3,4,5>>)),
+
+ 127 = peek7(<<127:7>>),
+ 100 = peek7(<<100:7,19:7>>),
+ fc(peek7, [<<1,2>>], catch peek7(<<1,2>>)),
ok.
peek1(<<B:8,_/bitstring>>) -> B.
@@ -422,7 +452,7 @@ peek8(<<B:8,_/binary>>) -> B.
peek16(<<B:16,_/binary-unit:16>>) -> B.
shared_sub_bins(Config) when is_list(Config) ->
- ?line {15,[<<>>,<<5>>,<<4,5>>,<<3,4,5>>,<<2,3,4,5>>]} = sum(<<1,2,3,4,5>>, [], 0),
+ {15,[<<>>,<<5>>,<<4,5>>,<<3,4,5>>,<<2,3,4,5>>]} = sum(<<1,2,3,4,5>>, [], 0),
ok.
sum(<<B,T/binary>>, Acc, Sum) ->
@@ -431,7 +461,7 @@ sum(<<>>, Last, Sum) -> {Sum,Last}.
bin_and_float(Config) when is_list(Config) ->
- ?line 14.0 = bin_and_float(<<1.0/float,2.0/float,3.0/float>>, 0.0),
+ 14.0 = bin_and_float(<<1.0/float,2.0/float,3.0/float>>, 0.0),
ok.
bin_and_float(<<X/float,Y/float,Z/float,T/binary>>, Sum) when is_float(X),
@@ -441,10 +471,10 @@ bin_and_float(<<X/float,Y/float,Z/float,T/binary>>, Sum) when is_float(X),
bin_and_float(<<>>, Sum) -> Sum.
dec_subidentifiers(Config) when is_list(Config) ->
- ?line {[],<<1,2,3>>} =
+ {[],<<1,2,3>>} =
do_dec_subidentifiers(<<1:1,42:7,1:1,99:7,1,2,3>>, 0, [], 2),
- ?line {[5389],<<1,2,3>>} = do_dec_subidentifiers(<<1:1,42:7,0:1,13:7,1,2,3>>, 0, [], 2),
- ?line {[3,2,1],not_a_binary} = dec_subidentifiers(not_a_binary, any, [1,2,3], 0),
+ {[5389],<<1,2,3>>} = do_dec_subidentifiers(<<1:1,42:7,0:1,13:7,1,2,3>>, 0, [], 2),
+ {[3,2,1],not_a_binary} = dec_subidentifiers(not_a_binary, any, [1,2,3], 0),
ok.
do_dec_subidentifiers(Buffer, Av, Al, Len) ->
@@ -495,23 +525,40 @@ skip_optional_tag(<<Tag,RestTag/binary>>, <<Tag,Rest/binary>>) ->
skip_optional_tag(RestTag, Rest);
skip_optional_tag(_, _) -> missing.
+decode_integer(_Config) ->
+ {10795,<<43>>,whatever} = decode_integer(1, <<42,43>>, whatever),
+ {-28909,<<19>>,whatever} = decode_integer(1, <<143,19>>, whatever),
+ ok.
+
+decode_integer(Len, <<B1:1,B2:7,Bs/binary>>, RemovedBytes) when B1 == 0 ->
+ Bin = <<_Skip:Len/unit:8, Buffer2/binary>> = <<B1:1,B2:7,Bs/binary>>,
+ Size = byte_size(Bin),
+ <<Int:Size/unit:8>> = Bin,
+ {Int,Buffer2,RemovedBytes};
+decode_integer(Len, <<B1:1,B2:7,Bs/binary>>, RemovedBytes) ->
+ Bin = <<_Skip:Len/unit:8,Buffer2/binary>> = <<B1:1,B2:7,Bs/binary>>,
+ Size = byte_size(Bin),
+ <<N:Size/unit:8>> = <<B2,Bs/binary>>,
+ Int = N - (1 bsl (8 * size(Bin) -1)),
+ {Int,Buffer2,RemovedBytes}.
+
-define(DATELEN, 16).
wfbm(Config) when is_list(Config) ->
%% check_for_dot_or_space and get_tail is from wfbm4 by Steve Vinoski,
%% with modifications.
- ?line {nomatch,0} = check_for_dot_or_space(<<" ">>),
- ?line {nomatch,0} = check_for_dot_or_space(<<" abc">>),
- ?line {ok,<<"abcde">>} = check_for_dot_or_space(<<"abcde 34555">>),
- ?line {nomatch,0} = check_for_dot_or_space(<<".gurka">>),
- ?line {nomatch,1} = check_for_dot_or_space(<<"g.urka">>),
-
- ?line nomatch = get_tail(<<>>),
- ?line {ok,<<"2007/10/23/blurf">>} = get_tail(<<"200x/2007/10/23/blurf ">>),
- ?line {skip,?DATELEN+5} = get_tail(<<"200x/2007/10/23/blurf.">>),
- ?line nomatch = get_tail(<<"200y.2007.10.23.blurf ">>),
- ?line {'EXIT',_} = (catch get_tail({no,binary,at,all})),
- ?line {'EXIT',_} = (catch get_tail(no_binary)),
+ {nomatch,0} = check_for_dot_or_space(<<" ">>),
+ {nomatch,0} = check_for_dot_or_space(<<" abc">>),
+ {ok,<<"abcde">>} = check_for_dot_or_space(<<"abcde 34555">>),
+ {nomatch,0} = check_for_dot_or_space(<<".gurka">>),
+ {nomatch,1} = check_for_dot_or_space(<<"g.urka">>),
+
+ nomatch = get_tail(<<>>),
+ {ok,<<"2007/10/23/blurf">>} = get_tail(<<"200x/2007/10/23/blurf ">>),
+ {skip,?DATELEN+5} = get_tail(<<"200x/2007/10/23/blurf.">>),
+ nomatch = get_tail(<<"200y.2007.10.23.blurf ">>),
+ {'EXIT',_} = (catch get_tail({no,binary,at,all})),
+ {'EXIT',_} = (catch get_tail(no_binary)),
ok.
check_for_dot_or_space(Bin) ->
@@ -544,13 +591,13 @@ get_tail(Bin) ->
end.
degenerated_match(Config) when is_list(Config) ->
- ?line error = degenerated_match_1(<<>>),
- ?line 1 = degenerated_match_1(<<1:1>>),
- ?line 2 = degenerated_match_1(<<42,43>>),
+ error = degenerated_match_1(<<>>),
+ 1 = degenerated_match_1(<<1:1>>),
+ 2 = degenerated_match_1(<<42,43>>),
- ?line error = degenerated_match_2(<<>>),
- ?line no_split = degenerated_match_2(<<1,2>>),
- ?line {<<1,2,3,4>>,<<5>>} = degenerated_match_2(<<1,2,3,4,5>>),
+ error = degenerated_match_2(<<>>),
+ no_split = degenerated_match_2(<<1,2>>),
+ {<<1,2,3,4>>,<<5>>} = degenerated_match_2(<<1,2,3,4,5>>),
ok.
@@ -567,25 +614,25 @@ degenerated_match_2(Bin) ->
end.
bs_sum(Config) when is_list(Config) ->
- ?line 0 = bs_sum_1([]),
- ?line 0 = bs_sum_1(<<>>),
- ?line 42 = bs_sum_1([42]),
- ?line 1 = bs_sum_1(<<1>>),
- ?line 10 = bs_sum_1([1,2,3,4]),
- ?line 15 = bs_sum_1(<<1,2,3,4,5>>),
- ?line 21 = bs_sum_1([1,2,3|<<4,5,6>>]),
- ?line 15 = bs_sum_1([1,2,3|{4,5}]),
- ?line 6 = bs_sum_1([1,2,3|zero]),
- ?line 6 = bs_sum_1([1,2,3|0]),
- ?line 7 = bs_sum_1([1,2,3|one]),
-
- ?line fc(catch bs_sum_1({too,big,tuple})),
- ?line fc(catch bs_sum_1([1,2,3|{too,big,tuple}])),
-
- ?line [] = sneaky_alias(<<>>),
- ?line [559,387655] = sneaky_alias(id(<<559:32,387655:32>>)),
- ?line fc(sneaky_alias, [<<1>>], catch sneaky_alias(id(<<1>>))),
- ?line fc(sneaky_alias, [[1,2,3,4]], catch sneaky_alias(lists:seq(1, 4))),
+ 0 = bs_sum_1([]),
+ 0 = bs_sum_1(<<>>),
+ 42 = bs_sum_1([42]),
+ 1 = bs_sum_1(<<1>>),
+ 10 = bs_sum_1([1,2,3,4]),
+ 15 = bs_sum_1(<<1,2,3,4,5>>),
+ 21 = bs_sum_1([1,2,3|<<4,5,6>>]),
+ 15 = bs_sum_1([1,2,3|{4,5}]),
+ 6 = bs_sum_1([1,2,3|zero]),
+ 6 = bs_sum_1([1,2,3|0]),
+ 7 = bs_sum_1([1,2,3|one]),
+
+ fc(catch bs_sum_1({too,big,tuple})),
+ fc(catch bs_sum_1([1,2,3|{too,big,tuple}])),
+
+ [] = sneaky_alias(<<>>),
+ [559,387655] = sneaky_alias(id(<<559:32,387655:32>>)),
+ fc(sneaky_alias, [<<1>>], catch sneaky_alias(id(<<1>>))),
+ fc(sneaky_alias, [[1,2,3,4]], catch sneaky_alias(lists:seq(1, 4))),
ok.
bs_sum_1(<<H,T/binary>>) -> H+bs_sum_1(T);
@@ -601,31 +648,31 @@ sneaky_alias(<<>>=L) -> binary_to_list(L);
sneaky_alias(<<From:32,L/binary>>) -> [From|sneaky_alias(L)].
coverage(Config) when is_list(Config) ->
- ?line 0 = coverage_fold(fun(B, A) -> A+B end, 0, <<>>),
- ?line 6 = coverage_fold(fun(B, A) -> A+B end, 0, <<1,2,3>>),
- ?line fc(catch coverage_fold(fun(B, A) ->
+ 0 = coverage_fold(fun(B, A) -> A+B end, 0, <<>>),
+ 6 = coverage_fold(fun(B, A) -> A+B end, 0, <<1,2,3>>),
+ fc(catch coverage_fold(fun(B, A) ->
A+B
end, 0, [a,b,c])),
- ?line {<<42.0:64/float>>,float} = coverage_build(<<>>, <<42>>, float),
- ?line {<<>>,not_a_tuple} = coverage_build(<<>>, <<>>, not_a_tuple),
- ?line {<<16#76,"abc",16#A9,"abc">>,{x,42,43}} =
+ {<<42.0:64/float>>,float} = coverage_build(<<>>, <<42>>, float),
+ {<<>>,not_a_tuple} = coverage_build(<<>>, <<>>, not_a_tuple),
+ {<<16#76,"abc",16#A9,"abc">>,{x,42,43}} =
coverage_build(<<>>, <<16#7,16#A>>, {x,y,z}),
- ?line [<<2>>,<<1>>] = coverage_bc(<<1,2>>, []),
+ [<<2>>,<<1>>] = coverage_bc(<<1,2>>, []),
- ?line {x,<<"abc">>,z} = coverage_setelement(<<2,"abc">>, {x,y,z}),
+ {x,<<"abc">>,z} = coverage_setelement(<<2,"abc">>, {x,y,z}),
- ?line [42] = coverage_apply(<<42>>, [coverage_id]),
- ?line 42 = coverage_external(<<42>>),
+ [42] = coverage_apply(<<42>>, [coverage_id]),
+ 42 = coverage_external(<<42>>),
- ?line do_coverage_bin_to_term_list([]),
- ?line do_coverage_bin_to_term_list([lists:seq(0, 10),{a,b,c},<<23:42>>]),
- ?line fc(coverage_bin_to_term_list, [<<0,0,0,7>>],
+ do_coverage_bin_to_term_list([]),
+ do_coverage_bin_to_term_list([lists:seq(0, 10),{a,b,c},<<23:42>>]),
+ fc(coverage_bin_to_term_list, [<<0,0,0,7>>],
catch do_coverage_bin_to_term_list_1(<<7:32>>)),
- ?line <<>> = coverage_per_key(<<4:32>>),
- ?line <<$a,$b,$c>> = coverage_per_key(<<7:32,"abc">>),
+ <<>> = coverage_per_key(<<4:32>>),
+ <<$a,$b,$c>> = coverage_per_key(<<7:32,"abc">>),
ok.
@@ -718,9 +765,9 @@ coverage_per_key(<<BinSize:32,Bin/binary>> = B) ->
Bin.
multiple_uses(Config) when is_list(Config) ->
- ?line {344,62879,345,<<245,159,1,89>>} = multiple_uses_1(<<1,88,245,159,1,89>>),
- ?line true = multiple_uses_2(<<0,0,197,18>>),
- ?line <<42,43>> = multiple_uses_3(<<0,0,42,43>>, fun id/1),
+ {344,62879,345,<<245,159,1,89>>} = multiple_uses_1(<<1,88,245,159,1,89>>),
+ true = multiple_uses_2(<<0,0,197,18>>),
+ <<42,43>> = multiple_uses_3(<<0,0,42,43>>, fun id/1),
ok.
multiple_uses_1(<<X:16,Tail/binary>>) ->
@@ -743,8 +790,8 @@ multiple_uses_cmp(<<Y:16>>, <<Y:16>>) -> true;
multiple_uses_cmp(<<_:16>>, <<_:16>>) -> false.
zero_label(Config) when is_list(Config) ->
- ?line <<"nosemouth">> = read_pols(<<"FACE","nose","mouth">>),
- ?line <<"CE">> = read_pols(<<"noFACE">>),
+ <<"nosemouth">> = read_pols(<<"FACE","nose","mouth">>),
+ <<"CE">> = read_pols(<<"noFACE">>),
ok.
read_pols(Data) ->
@@ -772,14 +819,14 @@ matching_meets_construction(Config) when is_list(Config) ->
Bin = id(<<"abc">>),
Len = id(2),
Tail0 = id(<<1,2,3,4,5>>),
- ?line <<_:Len/binary,Tail/binary>> = Tail0,
- ?line Res = <<Tail/binary,Bin/binary>>,
- ?line <<3,4,5,"abc">> = Res,
- ?line {'EXIT',{badarg,_}} = (catch matching_meets_construction_1(<<"Abc">>)),
- ?line {'EXIT',{badarg,_}} = (catch matching_meets_construction_2(<<"Abc">>)),
- ?line <<"Bbc">> = matching_meets_construction_3(<<"Abc">>),
-
- ?line <<1,2>> = encode_octet_string(<<1,2,3>>, 2),
+ <<_:Len/binary,Tail/binary>> = Tail0,
+ Res = <<Tail/binary,Bin/binary>>,
+ <<3,4,5,"abc">> = Res,
+ {'EXIT',{badarg,_}} = (catch matching_meets_construction_1(<<"Abc">>)),
+ {'EXIT',{badarg,_}} = (catch matching_meets_construction_2(<<"Abc">>)),
+ <<"Bbc">> = matching_meets_construction_3(<<"Abc">>),
+
+ <<1,2>> = encode_octet_string(<<1,2,3>>, 2),
ok.
matching_meets_construction_1(<<"A",H/binary>>) -> <<"B",H>>.
@@ -792,14 +839,14 @@ encode_octet_string(<<OctetString/binary>>, Len) ->
<<OctetString:Len/binary-unit:8>>.
simon(Config) when is_list(Config) ->
- ?line one = simon(blurf, <<>>),
- ?line two = simon(0, <<42>>),
- ?line fc(simon, [17,<<1>>], catch simon(17, <<1>>)),
- ?line fc(simon, [0,<<1,2,3>>], catch simon(0, <<1,2,3>>)),
-
- ?line one = simon2(blurf, <<9>>),
- ?line two = simon2(0, <<9,1>>),
- ?line fc(simon2, [0,<<9,10,11>>], catch simon2(0, <<9,10,11>>)),
+ one = simon(blurf, <<>>),
+ two = simon(0, <<42>>),
+ fc(simon, [17,<<1>>], catch simon(17, <<1>>)),
+ fc(simon, [0,<<1,2,3>>], catch simon(0, <<1,2,3>>)),
+
+ one = simon2(blurf, <<9>>),
+ two = simon2(0, <<9,1>>),
+ fc(simon2, [0,<<9,10,11>>], catch simon2(0, <<9,10,11>>)),
ok.
simon(_, <<>>) -> one;
@@ -811,10 +858,10 @@ simon2(0, <<_:16>>) -> two.
%% OTP-7113: Crash in v3_codegen.
matching_and_andalso(Config) when is_list(Config) ->
- ?line ok = matching_and_andalso_1(<<1,2,3>>, 3),
- ?line {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, -8)),
- ?line {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, blurf)),
- ?line {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, 19)),
+ ok = matching_and_andalso_1(<<1,2,3>>, 3),
+ {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, -8)),
+ {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, blurf)),
+ {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, 19)),
{"abc",<<"xyz">>} = matching_and_andalso_2("abc", <<"-xyz">>),
{"abc",<<"">>} = matching_and_andalso_2("abc", <<($a-1)>>),
@@ -847,7 +894,7 @@ otp_7188(Config) when is_list(Config) ->
0,0,0,0,0,0,50,48,48,48,50,48,48,48,32,45,32,66,101,115,
116,32,79,102,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,12>>,
- ?line {ok,{"ID3v1",
+ {ok,{"ID3v1",
[{title,<<68,117,154,105,232,107,121>>},
{artist,<<"Daniel Landa">>},
{album,<<"Best Of">>}]}} = parse_v1_or_v11_tag(MP3).
@@ -891,11 +938,11 @@ skip_blanks_and_zero(L) ->
-record(rec_otp_7233, {key, val}).
otp_7233(Config) when is_list(Config) ->
- ?line otp_7233_1(#rec_otp_7233{key = <<"XXabcde">>,val=[{"xxxxxxxx",42}]}),
- ?line [<<"XXabcde">>,{"xxxxxxxx",42}] = get(io_format),
+ otp_7233_1(#rec_otp_7233{key = <<"XXabcde">>,val=[{"xxxxxxxx",42}]}),
+ [<<"XXabcde">>,{"xxxxxxxx",42}] = get(io_format),
erase(io_format),
- ?line otp_7233_1(#rec_otp_7233{key = <<"XXabcde">>,val=[]}),
- ?line undefined = get(io_format),
+ otp_7233_1(#rec_otp_7233{key = <<"XXabcde">>,val=[]}),
+ undefined = get(io_format),
ok.
otp_7233_1(Rec) ->
@@ -903,32 +950,34 @@ otp_7233_1(Rec) ->
case K of
<<"XX">> ->
Value = Rec#rec_otp_7233.val,
- case lists:keysearch("xxxxxxxx", 1, Value) of
- {value,T} -> put(io_format, [Rec#rec_otp_7233.key,T]);
- false -> ok
+ case lists:keyfind("xxxxxxxx", 1, Value) of
+ false ->
+ ok;
+ T ->
+ put(io_format, [Rec#rec_otp_7233.key,T])
end;
_ -> ok
end.
otp_7240(Config) when is_list(Config) ->
- ?line a = otp_7240_a(0, <<>>),
- ?line b = otp_7240_a(1, 2),
+ a = otp_7240_a(0, <<>>),
+ b = otp_7240_a(1, 2),
- ?line a = otp_7240_b(anything, <<>>),
- ?line b = otp_7240_b(1, {x,y}),
+ a = otp_7240_b(anything, <<>>),
+ b = otp_7240_b(1, {x,y}),
- ?line a = otp_7240_c(anything, <<>>),
- ?line b = otp_7240_c(1, <<2>>),
+ a = otp_7240_c(anything, <<>>),
+ b = otp_7240_c(1, <<2>>),
- ?line a = otp_7240_d(anything, <<>>),
- ?line b = otp_7240_d(again, <<2>>),
+ a = otp_7240_d(anything, <<>>),
+ b = otp_7240_d(again, <<2>>),
- ?line a = otp_7240_e(anything, <<>>),
- ?line b = otp_7240_e(1, 41),
+ a = otp_7240_e(anything, <<>>),
+ b = otp_7240_e(1, 41),
- ?line a = otp_7240_f(anything, <<>>),
- ?line b = otp_7240_f(1, {}),
+ a = otp_7240_f(anything, <<>>),
+ b = otp_7240_f(1, {}),
ok.
@@ -951,15 +1000,15 @@ otp_7240_f(_, <<>>) -> a;
otp_7240_f(1, B) when is_tuple(B) -> b.
otp_7498(Config) when is_list(Config) ->
- ?line <<1,2,3>> = otp_7498_foo(<<1,2,3>>, 0),
- ?line <<2,3>> = otp_7498_foo(<<1,2,3>>, 1),
- ?line <<1,2,3>> = otp_7498_foo(<<1,2,3>>, 2),
+ <<1,2,3>> = otp_7498_foo(<<1,2,3>>, 0),
+ <<2,3>> = otp_7498_foo(<<1,2,3>>, 1),
+ <<1,2,3>> = otp_7498_foo(<<1,2,3>>, 2),
- ?line <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 0),
- ?line <<2,3>> = otp_7498_bar(<<1,2,3>>, 1),
- ?line <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 2),
- ?line <<>> = otp_7498_bar(<<>>, 2),
- ?line <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 3),
+ <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 0),
+ <<2,3>> = otp_7498_bar(<<1,2,3>>, 1),
+ <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 2),
+ <<>> = otp_7498_bar(<<>>, 2),
+ <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 3),
ok.
@@ -988,19 +1037,19 @@ match_string(Config) when is_list(Config) ->
%% check the coverage for the v3_kernel module.
case erlang:system_info(endian) of
little ->
- ?line do_match_string_native(<<$a,0,$b,0>>);
+ do_match_string_native(<<$a,0,$b,0>>);
big ->
- ?line do_match_string_native(<<0,$a,0,$b>>)
+ do_match_string_native(<<0,$a,0,$b>>)
end,
- ?line do_match_string_big(<<0,$a,0,$b>>),
- ?line do_match_string_little(<<$a,0,$b,0>>),
+ do_match_string_big(<<0,$a,0,$b>>),
+ do_match_string_little(<<$a,0,$b,0>>),
- ?line do_match_string_big_signed(<<255,255>>),
- ?line do_match_string_little_signed(<<255,255>>),
+ do_match_string_big_signed(<<255,255>>),
+ do_match_string_little_signed(<<255,255>>),
- ?line plain = no_match_string_opt(<<"abc">>),
- ?line strange = no_match_string_opt(<<$a:9,$b:9,$c:9>>),
+ plain = no_match_string_opt(<<"abc">>),
+ strange = no_match_string_opt(<<$a:9,$b:9,$c:9>>),
ok.
@@ -1021,13 +1070,13 @@ no_match_string_opt(<<$a:9,$b:9,$c:9>>) -> strange.
%% OTP-7591: A zero-width segment in matching would crash the compiler.
zero_width(Config) when is_list(Config) ->
- ?line <<Len:16/little, Str:Len/binary, 0:0>> = <<2, 0, $h, $i, 0:0>>,
- ?line 2 = Len,
- ?line Str = <<"hi">>,
+ <<Len:16/little, Str:Len/binary, 0:0>> = <<2, 0, $h, $i, 0:0>>,
+ 2 = Len,
+ Str = <<"hi">>,
%% Match sure that values that cannot fit in a segment will not match.
case id(<<0:8>>) of
- <<256:8>> -> ?line ?t:fail();
+ <<256:8>> -> ct:fail(should_not_match);
_ -> ok
end,
ok.
@@ -1036,14 +1085,14 @@ zero_width(Config) when is_list(Config) ->
%% OTP_7650: A invalid size for binary segments could crash the compiler.
bad_size(Config) when is_list(Config) ->
Tuple = {a,b,c},
- ?line {'EXIT',{{badmatch,<<>>},_}} = (catch <<32:Tuple>> = id(<<>>)),
+ {'EXIT',{{badmatch,<<>>},_}} = (catch <<32:Tuple>> = id(<<>>)),
Binary = <<1,2,3>>,
- ?line {'EXIT',{{badmatch,<<>>},_}} = (catch <<32:Binary>> = id(<<>>)),
+ {'EXIT',{{badmatch,<<>>},_}} = (catch <<32:Binary>> = id(<<>>)),
ok.
haystack(Config) when is_list(Config) ->
- ?line <<0:10/unit:8>> = haystack_1(<<0:10/unit:8>>),
- ?line [<<0:10/unit:8>>,
+ <<0:10/unit:8>> = haystack_1(<<0:10/unit:8>>),
+ [<<0:10/unit:8>>,
<<0:20/unit:8>>] = haystack_2(<<1:8192>>),
ok.
@@ -1078,10 +1127,10 @@ fc(_, Args, {'EXIT',{{case_clause,ActualArgs},_}})
%% Cover the clause handling bs_context to binary in
%% beam_block:initialized_regs/2.
cover_beam_bool(Config) when is_list(Config) ->
- ?line ok = do_cover_beam_bool(<<>>, 3),
- ?line <<19>> = do_cover_beam_bool(<<19>>, 2),
- ?line <<42>> = do_cover_beam_bool(<<42>>, 1),
- ?line <<17>> = do_cover_beam_bool(<<13,17>>, 0),
+ ok = do_cover_beam_bool(<<>>, 3),
+ <<19>> = do_cover_beam_bool(<<19>>, 2),
+ <<42>> = do_cover_beam_bool(<<42>>, 1),
+ <<17>> = do_cover_beam_bool(<<13,17>>, 0),
ok.
do_cover_beam_bool(Bin, X) when X > 0 ->
@@ -1227,6 +1276,21 @@ match_string_opt(Config) when is_list(Config) ->
do_match_string_opt({<<1>>,{v,V}}=T) ->
{x,V,T}.
+select_on_integer(Config) when is_list(Config) ->
+ 42 = do_select_on_integer(<<42>>),
+ <<"abc">> = do_select_on_integer(<<128,"abc">>),
+
+ {'EXIT',_} = (catch do_select_on_integer(<<0:1>>)),
+ {'EXIT',_} = (catch do_select_on_integer(<<1:1>>)),
+ {'EXIT',_} = (catch do_select_on_integer(<<0:1,0:15>>)),
+ ok.
+
+%% The ASN.1 compiler frequently generates code like this.
+do_select_on_integer(<<0:1,I:7>>) ->
+ I;
+do_select_on_integer(<<1:1,_:7,Bin/binary>>) ->
+ Bin.
+
%% If 'bin_opt_info' was given the warning would lack filename
%% and line number.
@@ -1271,6 +1335,122 @@ do_unsafe_branch_caching(<<Code/integer, Bin/binary>>) ->
_ -> Bin2
end.
+bad_literals(_Config) ->
+ Mod = list_to_atom(?MODULE_STRING ++ "_" ++
+ atom_to_list(?FUNCTION_NAME)),
+ S = [signed_lit_match(V, Sz) || V <- lists:seq(-8, 8),
+ Sz <- [0,1,2,3]] ++
+ [unsigned_lit_match(V, Sz) || V <- lists:seq(-2, 8),
+ Sz <- [0,1,2]] ++
+ [unicode_match(V) ||
+ V <- [-100,-1,0,1,2|lists:seq(16#10FFFC, 16#110004)]],
+ Code = ?Q(["-module('@Mod@').\n"
+ "-export([f/0]).\n"
+ "f() ->\n"
+ "_@S,\n"
+ "ok.\n"]),
+ merl:print(Code),
+ Opts = test_lib:opt_opts(?MODULE),
+ {ok,_} = merl:compile_and_load(Code, Opts),
+ Mod:f(),
+
+ {'EXIT',<<42>>} = (catch bad_literals_1()),
+
+ Sz = id(8),
+ {'EXIT',{{badmatch,_},_}} = (catch <<-1:Sz>> = <<-1>>),
+ ok.
+
+bad_literals_1() ->
+ BadSz = bad,
+ case case <<42>> of
+ <<42:BadSz>> -> ok;
+ Val -> exit(Val)
+ end of
+ ok -> ok;
+ error -> error
+ end.
+
+signed_lit_match(V, Sz) ->
+ case <<V:Sz>> of
+ <<V:Sz/signed>> ->
+ ?Q("<<_@V@:_@Sz@/signed>> = <<_@V@:_@Sz@>>");
+ _ ->
+ ?Q(["case <<_@V@:_@Sz@>> of\n",
+ " <<_@V@:_@Sz@/signed>> ->\n",
+ " ct:fail(should_not_match);\n",
+ " _ ->\n",
+ " ok\n",
+ "end\n"])
+ end.
+
+unsigned_lit_match(V, Sz) ->
+ case <<V:Sz>> of
+ <<V:Sz/unsigned>> ->
+ ?Q("<<_@V@:_@Sz@>> = <<_@V@:_@Sz@>>");
+ _ ->
+ ?Q(["case <<_@V@:_@Sz@>> of\n",
+ " <<_@V@:_@Sz@/unsigned>> ->\n",
+ " ct:fail(should_not_match);\n",
+ " _ ->\n",
+ " ok\n",
+ "end\n"])
+ end.
+
+unicode_match(V) ->
+ try <<V/utf8>> of
+ <<V/utf8>> ->
+ ?Q(["<<_@V@/utf8>> = <<_@V@/utf8>>,\n",
+ "<<_@V@/utf16>> = <<_@V@/utf16>>,\n",
+ "<<_@V@/utf32>> = <<_@V@/utf32>>\n"])
+ catch
+ error:badarg ->
+ ?Q(["case <<_@V@:32>> of\n",
+ " <<_@V@/utf32>> ->\n",
+ " ct:fail(should_not_match);\n",
+ " _ ->\n",
+ " ok\n",
+ "end\n"])
+ end.
+
+%% Test a few legal but rare cases.
+
+good_literals(_Config) ->
+ Sz = id(64),
+
+ %% Variable size.
+ <<42:Sz>> = id(<<42:Sz>>),
+ <<42.0:Sz/float>> = id(<<42:Sz/float>>),
+
+ %% unit > 1
+ <<16#cafebeef:4/unit:8>> = id(<<16#cafebeef:32>>),
+ ok.
+
+constant_propagation(_Config) ->
+ <<5>> = constant_propagation_a(a, <<5>>),
+ {'EXIT',{{case_clause,b},_}} = (catch constant_propagation_a(b, <<5>>)),
+ 258 = constant_propagation_b(<<1,2>>),
+ F = constant_propagation_c(),
+ 259 = F(<<1,3>>),
+ ok.
+
+constant_propagation_a(X, Y) ->
+ case X of
+ a -> Y2 = 8
+ end,
+ <<5:Y2>> = Y.
+
+constant_propagation_b(B) ->
+ Sz = 16,
+ <<X:Sz/integer>> = B,
+ X.
+
+constant_propagation_c() ->
+ Size = 16,
+ fun(Bin) ->
+ <<X:Size/integer>> = Bin,
+ X
+ end.
+
check(F, R) ->
R = F().
diff --git a/lib/compiler/test/bs_utf_SUITE.erl b/lib/compiler/test/bs_utf_SUITE.erl
index e6d292d9e6..c894041f72 100644
--- a/lib/compiler/test/bs_utf_SUITE.erl
+++ b/lib/compiler/test/bs_utf_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
utf32_roundtrip/1,guard/1,extreme_tripping/1,
literals/1,coverage/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -53,14 +53,14 @@ end_per_group(_GroupName, Config) ->
utf8_roundtrip(Config) when is_list(Config) ->
- ?line [utf8_roundtrip_1(P) || P <- utf_data()],
+ [utf8_roundtrip_1(P) || P <- utf_data()],
ok.
utf8_roundtrip_1({Str,Bin,Bin}) ->
- ?line Str = utf8_to_list(Bin),
- ?line Bin = list_to_utf8(Str),
- ?line [ok = utf8_guard(C, <<42,C/utf8>>) || C <- Str],
- ?line [error = utf8_guard(C, <<C/utf8>>) || C <- Str],
+ Str = utf8_to_list(Bin),
+ Bin = list_to_utf8(Str),
+ [ok = utf8_guard(C, <<42,C/utf8>>) || C <- Str],
+ [error = utf8_guard(C, <<C/utf8>>) || C <- Str],
ok.
utf8_guard(C, Bin) when <<42,C/utf8>> =:= Bin -> ok;
@@ -90,14 +90,14 @@ utf8_len(<<_/utf8,T/binary>>, N) ->
utf8_len(<<>>, N) -> N.
utf16_roundtrip(Config) when is_list(Config) ->
- ?line {Str,Big,Big,Little,Little} = utf16_data(),
- ?line 4 = utf16_big_len(Big),
- ?line 4 = utf16_little_len(Little),
- ?line Str = big_utf16_to_list(Big),
- ?line Str = little_utf16_to_list(Little),
+ {Str,Big,Big,Little,Little} = utf16_data(),
+ 4 = utf16_big_len(Big),
+ 4 = utf16_little_len(Little),
+ Str = big_utf16_to_list(Big),
+ Str = little_utf16_to_list(Little),
- ?line Big = list_to_big_utf16(Str),
- ?line Little = list_to_little_utf16(Str),
+ Big = list_to_big_utf16(Str),
+ Little = list_to_little_utf16(Str),
ok.
@@ -138,14 +138,14 @@ little_utf16_to_list(<<H/little-utf16,T/binary>>) ->
little_utf16_to_list(<<>>) -> [].
utf32_roundtrip(Config) when is_list(Config) ->
- ?line {Str,Big,Big,Little,Little} = utf32_data(),
- ?line 4 = utf32_big_len(Big),
- ?line 4 = utf32_little_len(Little),
- ?line Str = big_utf32_to_list(Big),
- ?line Str = little_utf32_to_list(Little),
+ {Str,Big,Big,Little,Little} = utf32_data(),
+ 4 = utf32_big_len(Big),
+ 4 = utf32_little_len(Little),
+ Str = big_utf32_to_list(Big),
+ Str = little_utf32_to_list(Little),
- ?line Big = list_to_big_utf32(Str),
- ?line Little = list_to_little_utf32(Str),
+ Big = list_to_big_utf32(Str),
+ Little = list_to_little_utf32(Str),
ok.
@@ -187,7 +187,7 @@ little_utf32_to_list(<<>>) -> [].
guard(Config) when is_list(Config) ->
- ?line error = do_guard(16#D800),
+ error = do_guard(16#D800),
ok.
do_guard(C) when byte_size(<<C/utf8>>) =/= 42 -> ok;
@@ -199,13 +199,13 @@ do_guard(_) -> error.
%% the delayed creation of sub-binaries works.
extreme_tripping(Config) when is_list(Config) ->
- ?line Unicode = lists:seq(0, 1024),
- ?line Utf8 = unicode_to_utf8(Unicode, <<>>),
- ?line Utf16 = utf8_to_utf16(Utf8, <<>>),
- ?line Utf32 = utf8_to_utf32(Utf8, <<>>),
- ?line Utf32 = utf16_to_utf32(Utf16, <<>>),
- ?line Utf8 = utf32_to_utf8(Utf32, <<>>),
- ?line Unicode = utf32_to_unicode(Utf32),
+ Unicode = lists:seq(0, 1024),
+ Utf8 = unicode_to_utf8(Unicode, <<>>),
+ Utf16 = utf8_to_utf16(Utf8, <<>>),
+ Utf32 = utf8_to_utf32(Utf8, <<>>),
+ Utf32 = utf16_to_utf32(Utf16, <<>>),
+ Utf8 = utf32_to_utf8(Utf32, <<>>),
+ Unicode = utf32_to_unicode(Utf32),
ok.
unicode_to_utf8([C|T], Bin) ->
@@ -233,58 +233,58 @@ utf32_to_unicode(<<C/utf32,T/binary>>) ->
utf32_to_unicode(<<>>) -> [].
literals(Config) when is_list(Config) ->
- ?line abc_utf8 = match_literal(<<"abc"/utf8>>),
- ?line abc_utf8 = match_literal(<<$a,$b,$c>>),
-
- ?line abc_utf16be = match_literal(<<"abc"/utf16>>),
- ?line abc_utf16be = match_literal(<<$a:16,$b:16,$c:16>>),
- ?line abc_utf16le = match_literal(<<"abc"/little-utf16>>),
- ?line abc_utf16le = match_literal(<<$a:16/little,$b:16/little,$c:16/little>>),
-
- ?line abc_utf32be = match_literal(<<"abc"/utf32>>),
- ?line abc_utf32be = match_literal(<<$a:32,$b:32,$c:32>>),
- ?line abc_utf32le = match_literal(<<"abc"/little-utf32>>),
- ?line abc_utf32le = match_literal(<<$a:32/little,$b:32/little,$c:32/little>>),
-
- ?line bjorn_utf8 = match_literal(<<"bj\366rn"/utf8>>),
- ?line bjorn_utf8 = match_literal(<<$b,$j,195,182,$r,$n>>),
-
- ?line bjorn_utf16be = match_literal(<<"bj\366rn"/utf16>>),
- ?line bjorn_utf16be = match_literal(<<$b:16,$j:16,246:16,$r:16,$n:16>>),
- ?line bjorn_utf16le = match_literal(<<"bj\366rn"/little-utf16>>),
- ?line bjorn_utf16le = match_literal(<<$b:16/little,$j:16/little,
+ abc_utf8 = match_literal(<<"abc"/utf8>>),
+ abc_utf8 = match_literal(<<$a,$b,$c>>),
+
+ abc_utf16be = match_literal(<<"abc"/utf16>>),
+ abc_utf16be = match_literal(<<$a:16,$b:16,$c:16>>),
+ abc_utf16le = match_literal(<<"abc"/little-utf16>>),
+ abc_utf16le = match_literal(<<$a:16/little,$b:16/little,$c:16/little>>),
+
+ abc_utf32be = match_literal(<<"abc"/utf32>>),
+ abc_utf32be = match_literal(<<$a:32,$b:32,$c:32>>),
+ abc_utf32le = match_literal(<<"abc"/little-utf32>>),
+ abc_utf32le = match_literal(<<$a:32/little,$b:32/little,$c:32/little>>),
+
+ bjorn_utf8 = match_literal(<<"bj\366rn"/utf8>>),
+ bjorn_utf8 = match_literal(<<$b,$j,195,182,$r,$n>>),
+
+ bjorn_utf16be = match_literal(<<"bj\366rn"/utf16>>),
+ bjorn_utf16be = match_literal(<<$b:16,$j:16,246:16,$r:16,$n:16>>),
+ bjorn_utf16le = match_literal(<<"bj\366rn"/little-utf16>>),
+ bjorn_utf16le = match_literal(<<$b:16/little,$j:16/little,
246:16/little,$r:16/little,
$n:16/little>>),
- ?line <<244,143,191,191>> = <<16#10ffff/utf8>>,
+ <<244,143,191,191>> = <<16#10ffff/utf8>>,
%% Invalid literals.
I = 0,
- ?line {'EXIT',{badarg,_}} = (catch <<(-1)/utf8,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<(-1)/utf16,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<(-1)/little-utf16,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<(-1)/utf32,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<(-1)/little-utf32,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<16#D800/utf8,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<16#D800/utf16,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<16#D800/little-utf16,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<16#D800/utf32,I/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<16#D800/little-utf32,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<(-1)/utf8,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<(-1)/utf16,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<(-1)/little-utf16,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<(-1)/utf32,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<(-1)/little-utf32,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<16#D800/utf8,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<16#D800/utf16,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<16#D800/little-utf16,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<16#D800/utf32,I/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<16#D800/little-utf32,I/utf8>>),
B = 16#10FFFF+1,
- ?line {'EXIT',{badarg,_}} = (catch <<B/utf8>>),
- ?line {'EXIT',{badarg,_}} = (catch <<B/utf16>>),
- ?line {'EXIT',{badarg,_}} = (catch <<B/little-utf16>>),
- ?line {'EXIT',{badarg,_}} = (catch <<B/utf32>>),
- ?line {'EXIT',{badarg,_}} = (catch <<B/little-utf32>>),
+ {'EXIT',{badarg,_}} = (catch <<B/utf8>>),
+ {'EXIT',{badarg,_}} = (catch <<B/utf16>>),
+ {'EXIT',{badarg,_}} = (catch <<B/little-utf16>>),
+ {'EXIT',{badarg,_}} = (catch <<B/utf32>>),
+ {'EXIT',{badarg,_}} = (catch <<B/little-utf32>>),
%% Matching of bad literals.
- ?line error = bad_literal_match(<<237,160,128>>), %16#D800 in UTF-8
- ?line error = bad_literal_match(<<244,144,128,128>>), %16#110000 in UTF-8
+ error = bad_literal_match(<<237,160,128>>), %16#D800 in UTF-8
+ error = bad_literal_match(<<244,144,128,128>>), %16#110000 in UTF-8
- ?line error = bad_literal_match(<<16#D800:32>>),
- ?line error = bad_literal_match(<<16#110000:32>>),
- ?line error = bad_literal_match(<<16#D800:32/little>>),
- ?line error = bad_literal_match(<<16#110000:32/little>>),
+ error = bad_literal_match(<<16#D800:32>>),
+ error = bad_literal_match(<<16#110000:32>>),
+ error = bad_literal_match(<<16#D800:32/little>>),
+ error = bad_literal_match(<<16#110000:32/little>>),
ok.
@@ -307,13 +307,13 @@ bad_literal_match(_) -> error.
coverage(Config) when is_list(Config) ->
%% Cover bit syntax matching optimizations in v3_kernel.
- ?line 0 = coverage_1(<<4096/utf8,65536/utf8,0>>),
- ?line 1 = coverage_1(<<4096/utf8,65536/utf8,1>>),
+ 0 = coverage_1(<<4096/utf8,65536/utf8,0>>),
+ 1 = coverage_1(<<4096/utf8,65536/utf8,1>>),
- ?line 0 = coverage_2(<<4096/utf8,65536/utf8,0>>),
- ?line 1 = coverage_2(<<1024/utf8,1025/utf8,1>>),
+ 0 = coverage_2(<<4096/utf8,65536/utf8,0>>),
+ 1 = coverage_2(<<1024/utf8,1025/utf8,1>>),
- ?line fc(catch coverage_3(1)),
+ fc(catch coverage_3(1)),
%% Cover beam_flatten (combining the heap allocation in
%% a subsequent test_heap instruction into the bs_init2
diff --git a/lib/compiler/test/compilation_SUITE.erl b/lib/compiler/test/compilation_SUITE.erl
index 2715a3aec5..cd1bc099e9 100644
--- a/lib/compiler/test/compilation_SUITE.erl
+++ b/lib/compiler/test/compilation_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,12 +19,51 @@
%%% Purpose : Compiles various modules with tough code
-module(compilation_SUITE).
-
--include_lib("test_server/include/test_server.hrl").
-
--compile(export_all).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ beam_compiler_4/1,
+ beam_compiler_6/1,
+ beam_compiler_7/1,
+ beam_compiler_8/1,
+ beam_compiler_9/1,
+ beam_compiler_10/1,
+ beam_compiler_11/1,
+ compiler_1/1,
+ const_list_256/1,
+ convopts/1,
+ live_var/1,
+ on_load/1,
+ on_load_inline/1,
+ opt_crash/1,
+ otp_2330/1,
+ otp_2380/1,
+ otp_4790/1,
+ otp_5151/1,
+ otp_5235/1,
+ otp_5404/1,
+ otp_5436/1,
+ otp_5481/1,
+ otp_5553/1,
+ otp_5632/1,
+ otp_5714/1,
+ otp_5872/1,
+ otp_6121/1,
+ otp_7202/1,
+ otp_8949_a/1,
+ redundant_case/1,
+ self_compile/1,
+ self_compile_old_inliner/1,
+ split_cases/1,
+ string_table/1,
+ vsn_1/1,
+ vsn_2/1,
+ vsn_3/1]).
+
+-include_lib("common_test/include/ct.hrl").
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,10}}].
all() ->
test_lib:recompile(?MODULE),
@@ -35,23 +74,18 @@ groups() ->
[{vsn,[parallel],[vsn_1,vsn_2,vsn_3]},
{p,test_lib:parallel(),
[compiler_1,
- compiler_3,compiler_5,beam_compiler_1,
- beam_compiler_2,beam_compiler_3,beam_compiler_4,
- beam_compiler_5,beam_compiler_6,beam_compiler_7,
+ beam_compiler_4,beam_compiler_6,beam_compiler_7,
beam_compiler_8,beam_compiler_9,beam_compiler_10,
- beam_compiler_11,beam_compiler_12,
- nested_tuples_in_case_expr,otp_2330,guards,
- {group,vsn},otp_2380,otp_2141,otp_2173,otp_4790,
- const_list_256,bin_syntax_1,bin_syntax_2,
- bin_syntax_3,bin_syntax_4,bin_syntax_5,bin_syntax_6,
- live_var,convopts,
- catch_in_catch,redundant_case,long_string,otp_5076,
- complex_guard,otp_5092,otp_5151,otp_5235,otp_5244,
- trycatch_4,opt_crash,otp_5404,otp_5436,otp_5481,
+ beam_compiler_11,
+ otp_2330,
+ {group,vsn},otp_2380,otp_4790,
+ const_list_256,live_var,convopts,
+ redundant_case,
+ otp_5151,otp_5235,
+ opt_crash,otp_5404,otp_5436,otp_5481,
otp_5553,otp_5632,otp_5714,otp_5872,otp_6121,
- otp_6121a,otp_6121b,otp_7202,otp_7345,on_load,
- string_table,otp_8949_a,otp_8949_b,split_cases,
- beam_utils_liveopt]}].
+ otp_7202,on_load,on_load_inline,
+ string_table,otp_8949_a,split_cases]}].
init_per_suite(Config) ->
Config.
@@ -68,85 +102,25 @@ end_per_group(_GroupName, Config) ->
-define(comp(N),
N(Config) when is_list(Config) -> try_it(N, Config)).
--define(comp_fail(N),
- N(Config) when is_list(Config) -> failure(N, Config)).
-
?comp(compiler_1).
-?comp(compiler_3).
-?comp(compiler_4).
-?comp(compiler_5).
-?comp(beam_compiler_1).
-?comp(beam_compiler_2).
-?comp(beam_compiler_3).
?comp(beam_compiler_4).
-?comp(beam_compiler_5).
?comp(beam_compiler_6).
?comp(beam_compiler_8).
?comp(beam_compiler_9).
?comp(beam_compiler_10).
?comp(beam_compiler_11).
-?comp(beam_compiler_12).
-?comp(beam_compiler_13).
-
-?comp(nested_tuples_in_case_expr).
?comp(otp_2330).
?comp(otp_2380).
-?comp(otp_2141).
-?comp(otp_2173).
?comp(otp_4790).
?comp(otp_5235).
-?comp(otp_5244).
-
-?comp(guards).
-
-?comp(pattern_expr).
-
?comp(const_list_256).
-?comp(bin_syntax_1).
-?comp(bin_syntax_2).
-?comp(bin_syntax_3).
-?comp(bin_syntax_4).
-
-?comp(bin_syntax_6).
-
-?comp(otp_5076).
-
-?comp(complex_guard).
-
-?comp(otp_5092).
?comp(otp_5151).
-%%% By Per Gustafsson <[email protected]>
-
-bin_syntax_5(Config) when is_list(Config) ->
- {<<45>>,<<>>} = split({int, 1}, <<1:16,45>>).
-
-split({int, N}, <<N:16,B:N/binary,T/binary>>) ->
- {B,T}.
-
-%% This program works with the old version of the compiler
-%% but, the core erlang that it produces have the same variable appearing
-%% looks like this:
-%%
-%% split({int, N}, <<_core1:16, B:N/binary, T/binary>>) when _core1==N
-%%
-%% with my change it will look like this:
-%%
-%% split({int, N}, <<_core1:16, B:_core1/binary, T/binary>>) when _core1==N
-%%
-%% This means that everything worked fine as long as the pattern
-%% matching order was left-to-right but on core erlang any order should be possible
-
?comp(live_var).
-
-?comp(trycatch_4).
-
-?comp(catch_in_catch).
-
?comp(opt_crash).
?comp(otp_5404).
@@ -157,18 +131,14 @@ split({int, N}, <<N:16,B:N/binary,T/binary>>) ->
?comp(otp_5714).
?comp(otp_5872).
?comp(otp_6121).
-?comp(otp_6121a).
-?comp(otp_6121b).
?comp(convopts).
?comp(otp_7202).
?comp(on_load).
?comp(on_load_inline).
-beam_compiler_7(doc) ->
- "Code snippet submitted from Ulf Wiger which fails in R3 Beam.";
-beam_compiler_7(suite) -> [];
+%% Code snippet submitted from Ulf Wiger which fails in R3 Beam.
beam_compiler_7(Config) when is_list(Config) ->
- ?line done = empty(2, false).
+ done = empty(2, false).
empty(N, Toggle) when N > 0 ->
%% R3 Beam copies the second argument to the first before call.
@@ -193,121 +163,63 @@ redundant_case_1(3) -> d;
redundant_case_1(4) -> d;
redundant_case_1(_) -> d.
-failure(Module, Conf) ->
- ?line Src = filename:join(?config(data_dir, Conf), atom_to_list(Module)),
- ?line Out = ?config(priv_dir,Conf),
- ?line io:format("Compiling: ~ts\n", [Src]),
- ?line CompRc = compile:file(Src, [{outdir,Out},return,time]),
- ?line io:format("Result: ~p\n",[CompRc]),
- ?line case CompRc of
- error -> ok;
- {error,Errors,_} -> check_errors(Errors);
- _ -> test_server:fail({no_error, CompRc})
- end,
- ok.
-
-check_errors([{_,Eds}|T]) ->
- check_error(Eds),
- check_errors(T);
-check_errors([]) -> ok.
-
-check_error([{_,Mod,Error}|T]) ->
- check_error_1(Mod:format_error(Error)),
- check_error(T);
-check_error([{Mod,Error}|T]) ->
- check_error_1(Mod:format_error(Error)),
- check_error(T);
-check_error([]) -> ok.
-
-check_error_1(Str0) ->
- Str = lists:flatten(Str0),
- io:format("~s\n", [Str]),
- case Str of
- "internal"++_=Str ->
- ?t:fail(internal_compiler_error);
- _ ->
- ok
- end.
-
--define(TC(Body), tc(fun() -> Body end, ?LINE)).
-
try_it(Module, Conf) ->
- %% Change 'false' to 'true' to start a new node for every module.
- try_it(false, Module, Conf).
-
-try_it(StartNode, Module, Conf) ->
- ?line OtherOpts = [], %Can be changed to [time] if needed
- ?line Src = filename:join(?config(data_dir, Conf), atom_to_list(Module)),
- ?line Out = ?config(priv_dir,Conf),
- ?line io:format("Compiling: ~s\n", [Src]),
- ?line CompRc0 = compile:file(Src, [clint,{outdir,Out},report,
- bin_opt_info|OtherOpts]),
- ?line io:format("Result: ~p\n",[CompRc0]),
- ?line {ok,_Mod} = CompRc0,
-
- ?line Dog = test_server:timetrap(test_server:minutes(10)),
- Node = case StartNode of
- false ->
- node();
- true ->
- ?line Pa = "-pa " ++ filename:dirname(code:which(?MODULE)),
- ?line {ok,Node0} = start_node(compiler, Pa),
- Node0
- end,
-
- ?line ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
- ?line load_and_call(Out, Module),
- ?line test_server:timetrap_cancel(Dog),
-
- ?line NewDog = test_server:timetrap(test_server:minutes(10)),
- ?line io:format("Compiling (without optimization): ~s\n", [Src]),
- ?line CompRc1 = compile:file(Src,
- [no_copt,no_postopt,{outdir,Out},report|OtherOpts]),
-
- ?line io:format("Result: ~p\n",[CompRc1]),
- ?line {ok,_Mod} = CompRc1,
- ?line ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
- ?line test_server:timetrap_cancel(NewDog),
-
- ?line LastDog = test_server:timetrap(test_server:minutes(10)),
- ?line io:format("Compiling (with old inliner): ~s\n", [Src]),
- ?line CompRc2 = compile:file(Src, [{outdir,Out},report,bin_opt_info,
- {inline,1000}|OtherOpts]),
- ?line io:format("Result: ~p\n",[CompRc2]),
- ?line {ok,_Mod} = CompRc2,
- ?line ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
- ?line test_server:timetrap_cancel(LastDog),
-
- AsmDog = test_server:timetrap(test_server:minutes(10)),
+ Timetrap = {minutes,10},
+ OtherOpts = [], %Can be changed to [time] if needed
+ Src = filename:join(proplists:get_value(data_dir, Conf),
+ atom_to_list(Module)),
+ Out = proplists:get_value(priv_dir,Conf),
+ io:format("Compiling: ~s\n", [Src]),
+ CompRc0 = compile:file(Src, [clint0,clint,{outdir,Out},report,
+ bin_opt_info|OtherOpts]),
+ io:format("Result: ~p\n",[CompRc0]),
+ {ok,_Mod} = CompRc0,
+
+ load_and_call(Out, Module),
+
+ ct:timetrap(Timetrap),
+ io:format("Compiling (without optimization): ~s\n", [Src]),
+ CompRc1 = compile:file(Src,
+ [no_copt,no_postopt,
+ {outdir,Out},report|OtherOpts]),
+
+ io:format("Result: ~p\n",[CompRc1]),
+ {ok,_Mod} = CompRc1,
+ load_and_call(Out, Module),
+
+ ct:timetrap(Timetrap),
+ io:format("Compiling (with old inliner): ~s\n", [Src]),
+ CompRc2 = compile:file(Src, [clint,
+ {outdir,Out},report,bin_opt_info,
+ {inline,1000}|OtherOpts]),
+ io:format("Result: ~p\n",[CompRc2]),
+ {ok,_Mod} = CompRc2,
+ load_and_call(Out, Module),
+
+ ct:timetrap(Timetrap),
io:format("Compiling (from assembly): ~s\n", [Src]),
{ok,_} = compile:file(Src, [to_asm,{outdir,Out},report|OtherOpts]),
Asm = filename:join(Out, lists:concat([Module, ".S"])),
CompRc3 = compile:file(Asm, [from_asm,{outdir,Out},report|OtherOpts]),
io:format("Result: ~p\n",[CompRc3]),
{ok,_} = CompRc3,
- ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
- test_server:timetrap_cancel(AsmDog),
+ load_and_call(Out, Module),
- case StartNode of
- false -> ok;
- true -> ?line test_server:stop_node(Node)
- end,
- ?line test_server:timetrap_cancel(LastDog),
ok.
load_and_call(Out, Module) ->
- ?line io:format("Loading...\n",[]),
- ?line {module,Module} = code:load_abs(filename:join(Out, Module)),
+ io:format("Loading...\n",[]),
+ {module,Module} = code:load_abs(filename:join(Out, Module)),
- ?line io:format("Calling...\n",[]),
+ io:format("Calling...\n",[]),
%% Call M:M, and expect ok back, that's our interface
- ?line CallRc = Module:Module(),
- ?line io:format("Got value: ~p\n",[CallRc]),
+ CallRc = Module:Module(),
+ io:format("Got value: ~p\n",[CallRc]),
- ?line ok = CallRc,
+ ok = CallRc,
%% Smoke-test of beam disassembler.
- ?line test_lib:smoke_disasm(Module),
+ test_lib:smoke_disasm(Module),
_ = code:delete(Module),
_ = code:purge(Module),
@@ -320,102 +232,73 @@ load_and_call(Out, Module) ->
ok.
-tc(F, Line) ->
- {Diff,Value} = timer:tc(erlang, apply, [F,[]]),
- io:format("~p: ~p\n", [Line,Diff]),
- Value.
-
-start_node(Name, Args) ->
- case test_server:start_node(Name, slave, [{args, Args}]) of
- {ok, Node} ->
- {ok, Node};
- Error ->
- ?line test_server:fail(Error)
- end.
+%% Test generation of 'vsn' attribute.
+vsn_1(Conf) when is_list(Conf) ->
+ M = vsn_1,
-from(H, [H | T]) -> T;
-from(H, [_ | T]) -> from(H, T);
-from(_, []) -> [].
+ compile_load(M, proplists:get_value(data_dir, Conf), Conf),
+ Vsn1 = get_vsn(M),
+ timer:sleep(1000),
+ compile_load(M, proplists:get_value(data_dir, Conf), Conf),
+ Vsn2 = get_vsn(M),
-vsn_1(doc) ->
- "Test generation of 'vsn' attribute";
-vsn_1(suite) -> [];
-vsn_1(Conf) when is_list(Conf) ->
- ?line M = vsn_1,
-
- ?line compile_load(M, ?config(data_dir, Conf), Conf),
- ?line Vsn1 = get_vsn(M),
- ?line timer:sleep(1000),
-
- ?line compile_load(M, ?config(data_dir, Conf), Conf),
- ?line Vsn2 = get_vsn(M),
-
- ?line compile_load(M, filename:join(?config(data_dir, Conf), "other"),
- Conf),
- ?line Vsn3 = get_vsn(M),
- ?line if
- Vsn1 == Vsn2, Vsn2 == Vsn3 ->
- ok;
- true ->
- test_server:fail({vsn, Vsn1, Vsn2, Vsn3})
- end,
+ compile_load(M, filename:join(proplists:get_value(data_dir, Conf),
+ "other"),
+ Conf),
+ Vsn3 = get_vsn(M),
+ if
+ Vsn1 == Vsn2, Vsn2 == Vsn3 ->
+ ok;
+ true ->
+ ct:fail({vsn, Vsn1, Vsn2, Vsn3})
+ end,
ok.
-vsn_2(doc) ->
- "Test overriding of generation of 'vsn' attribute";
-vsn_2(suite) -> [];
+%% Test overriding of generation of 'vsn' attribute.
vsn_2(Conf) when is_list(Conf) ->
- ?line M = vsn_2,
-
- ?line compile_load(M, ?config(data_dir, Conf), Conf),
- ?line Vsn = get_vsn(M),
- ?line case Vsn of
- [34] ->
- ok;
- _ ->
- test_server:fail({vsn, Vsn})
- end,
+ M = vsn_2,
+
+ compile_load(M, proplists:get_value(data_dir, Conf), Conf),
+ Vsn = get_vsn(M),
+ case Vsn of
+ [34] ->
+ ok;
+ _ ->
+ ct:fail({vsn, Vsn})
+ end,
ok.
-vsn_3(doc) ->
- "Test that different code yields different generated 'vsn'";
-vsn_3(suite) -> [];
+%% Test that different code yields different generated 'vsn'.
vsn_3(Conf) when is_list(Conf) ->
- ?line M = vsn_3,
-
- ?line compile_load(M, ?config(data_dir, Conf), Conf),
- ?line Vsn1 = get_vsn(M),
-
- ?line compile_load(M, filename:join(?config(data_dir, Conf), "other"),
- Conf),
- ?line Vsn2 = get_vsn(M),
- ?line if
- Vsn1 /= Vsn2 ->
- ok;
- true ->
- test_server:fail({vsn, Vsn1, Vsn2})
- end,
+ M = vsn_3,
+
+ compile_load(M, proplists:get_value(data_dir, Conf), Conf),
+ Vsn1 = get_vsn(M),
+
+ compile_load(M, filename:join(proplists:get_value(data_dir, Conf),
+ "other"),
+ Conf),
+ Vsn2 = get_vsn(M),
+ if
+ Vsn1 /= Vsn2 ->
+ ok;
+ true ->
+ ct:fail({vsn, Vsn1, Vsn2})
+ end,
ok.
get_vsn(M) ->
- {value, {vsn, V}} = lists:keysearch(vsn, 1, M:module_info(attributes)),
+ {vsn,V} = lists:keyfind(vsn, 1, M:module_info(attributes)),
V.
-long_string(Config) when is_list(Config) ->
- %% The test must complete in one minute - it should be plenty of time.
- ?line Dog = test_server:timetrap(test_server:minutes(1)),
- ?line try_it(long_string, Config),
- ?line test_server:timetrap_cancel(Dog),
- ok.
-
compile_load(Module, Dir, Conf) ->
- ?line Src = filename:join(Dir, atom_to_list(Module)),
- ?line Out = ?config(priv_dir,Conf),
- ?line CompRc = compile:file(Src, [{outdir,Out}]),
- ?line {ok, Module} = CompRc,
- ?line code:purge(Module),
- ?line {module, Module} =
+ Src = filename:join(Dir, atom_to_list(Module)),
+ Out = proplists:get_value(priv_dir,Conf),
+ CompRc = compile:file(Src, [{outdir,Out}]),
+ {ok, Module} = CompRc,
+ code:purge(Module),
+ {module, Module} =
code:load_abs(filename:join(Out, atom_to_list(Module))),
ok.
@@ -428,9 +311,9 @@ self_compile_old_inliner(Config) when is_list(Config) ->
self_compile_1(Config, "old", [verbose,{inline,500}]).
self_compile_1(Config, Prefix, Opts) ->
- Dog = test_server:timetrap(test_server:minutes(40)),
+ ct:timetrap({minutes,40}),
- Priv = ?config(priv_dir,Config),
+ Priv = proplists:get_value(priv_dir,Config),
Version = compiler_version(),
%% Compile the compiler. (In this node to get better coverage.)
@@ -449,11 +332,10 @@ self_compile_1(Config, Prefix, Opts) ->
%% be equal (except for beam_asm that contains the compiler version).
compare_compilers(CompA, CompB),
- test_server:timetrap_cancel(Dog),
ok.
self_compile_node(CompilerDir, OutDir, Version, Opts) ->
- Dog = test_server:timetrap(test_server:minutes(15)),
+ ct:timetrap({minutes,15}),
Pa = "-pa " ++ filename:dirname(code:which(?MODULE)) ++
" -pa " ++ CompilerDir,
Files = compiler_src(),
@@ -462,17 +344,18 @@ self_compile_node(CompilerDir, OutDir, Version, Opts) ->
%% because it will load the same cover-compiled code as on this
%% node. Use a shielded node to prevent the cover server from
%% being started.
- ?t:run_on_shielded_node(
- fun() ->
- compile_compiler(Files, OutDir, Version, Opts)
- end, Pa),
- test_server:timetrap_cancel(Dog),
+ test_server:run_on_shielded_node(
+ fun() ->
+ compile_compiler(Files, OutDir, Version, Opts)
+ end, Pa),
+
ok.
compile_compiler(Files, OutDir, Version, InlineOpts) ->
io:format("~ts", [code:which(compile)]),
io:format("Compiling ~s into ~ts", [Version,OutDir]),
Opts = [report,
+ clint0,clint,
bin_opt_info,
{outdir,OutDir},
{d,'COMPILER_VSN',"\""++Version++"\""},
@@ -488,10 +371,6 @@ compile_compiler(Files, OutDir, Version, InlineOpts) ->
compiler_src() ->
filelib:wildcard(filename:join([code:lib_dir(compiler), "src", "*.erl"])).
-compiler_modules(Dir) ->
- Files = filelib:wildcard(filename:join(Dir, "*.beam")),
- [list_to_atom(filename:rootname(filename:basename(F))) || F <- Files].
-
make_compiler_dir(Priv, Dir0) ->
Dir = filename:join(Priv, Dir0),
ok = file:make_dir(Dir),
@@ -510,120 +389,14 @@ compare_compilers(ADir, BDir) ->
["beam_asm.beam"] = [filename:basename(A) || {A,_} <- D],
ok.
-%%%
-%%% The only test of the following code is that it compiles.
-%%%
-
-%% Slightly simplifed from megaco_binary_term_id_gen.
-%% beam_block failed to note that the {gc_bif,'-'...} instruction could
-%% fail, and that therefore {y,0} need to be initialized.
-%% {allocate,8,6}.
-%% %% {init,{y,0}} needed here.
-%% {get_list,{x,1},{x,6},{x,7}}.
-%% {'catch',{y,7},{f,3}}.
-%% {move,{x,4},{y,1}}.
-%% {move,{x,3},{y,2}}.
-%% {move,{x,2},{y,3}}.
-%% {move,{x,5},{y,4}}.
-%% {move,{x,7},{y,5}}.
-%% {move,{x,6},{y,6}}.
-%% {gc_bif,'-',{f,0},8,[{x,3},{x,6}],{x,0}}.
-%% {move,{x,0},{y,0}}.
-
-encode_wildcards3([],[],_,_) -> [];
-encode_wildcards3([Level|Levels],[BitsInLevel|BitsRest],LevelNo,TotSize) ->
- case (catch ?MODULE:encode_wildcard(Level,BitsInLevel,TotSize-BitsInLevel,
- length(Levels))) of
- {'EXIT',{Reason,Info}} ->
- exit({Reason,{LevelNo,Info}});
-
- no_wildcard ->
- encode_wildcards3(Levels,BitsRest,LevelNo+1,TotSize-BitsInLevel);
-
- {level,Wl} ->
- [Wl|
- encode_wildcards3(Levels,BitsRest,LevelNo+1,TotSize-BitsInLevel)];
-
- {recursive,Wr} ->
- [Wr]
- end.
-
-%% Slightly simplified code from hipe_rtl_ssapre.
-%% beam_block used to do the following incorrect optimization:
-%%
-%% {gc_bif,length,{f,0},1,[{x,0}],{x,3}}.
-%% ^^^^^ Was {x,0} - changing to {x,3} is not safe.
-%% {gc_bif,'+',{f,0},0,[{y,2},{integer,1}],{x,0}}.
-%% ^^^ Only one register live
-%% . . .
-%% {call_last,4,{f,2},4}. %% beam_validator noted that {x,3} wasn't live.
-
-find_operands(Cfg,XsiGraph,[],_Count) ->
- {Cfg,XsiGraph};
-find_operands(Cfg,XsiGraph,ActiveList,Count) ->
- {NewCfg,TempActiveList}=?MODULE:find_operands_for_active_list(Cfg,XsiGraph,
- ActiveList,[]),
- NewActiveList=lists:reverse(TempActiveList),
- [Count+1, length(NewActiveList), length(digraph:vertices(XsiGraph))],
- find_operands(NewCfg,XsiGraph,NewActiveList,Count+1).
-
-
-%% The following code
-%%
-%% {get_list,{x,2},{x,0},{x,1}}.
-%% {gc_bif,length,{f,0},1,[{x,0}],{x,0}}.
-%% {move,{x,0},{x,1}}.
-%%
-%% was incorrectly optimized to
-%%
-%% {get_list,{x,2},{x,0},{y,0}}.
-%% {gc_bif,length,{f,0},3,[{x,0}],{x,1}}.
-%%
-%% because beam_block:is_transparent({x,1},
-%% {gc_bif,length,{f,0},3,[{x,0}],{x,1}}
-%% incorrectly returned true.
-
--record(contextId,{cid,device_type,contextRef}).
--record(dpRef,{cid,tlli,ms_device_context_id}).
--record(qosProfileBssgp,{peak_bit_rate_msb,
- peak_bit_rate_lsb,
- t_a_precedence}).
--record(llUnitdataReq,{sapi,
- l3_pdu_length,
- pdu_life}).
--record(ptmsi,{value}).
-
-otp_7345(Config) when is_list(Config) ->
- #llUnitdataReq{l3_pdu_length=3,pdu_life=4} =
- otp_7345(#contextId{}, 0, [[1,2,3],4,5]).
-
-
-otp_7345(ObjRef, _RdEnv, Args) ->
- Cid = ObjRef#contextId.cid,
- _ = #dpRef{cid = Cid,
- ms_device_context_id = cid_id,
- tlli = #ptmsi{value = 0}},
- _ = #qosProfileBssgp{peak_bit_rate_msb = 0,
- peak_bit_rate_lsb = 80,
- t_a_precedence = 49},
- [Cpdu|_] = Args,
- LlUnitdataReq =
- #llUnitdataReq{sapi = 7,
- l3_pdu_length = length(Cpdu),
- pdu_life =
- id(42)
- div
- 10},
- id(LlUnitdataReq).
-
%% Check the generation of the string table.
string_table(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line File = filename:join(DataDir, "string_table.erl"),
- ?line {ok,string_table,Beam,[]} = compile:file(File, [return, binary]),
- ?line {ok,{string_table,[StringTableChunk]}} = beam_lib:chunks(Beam, ["StrT"]),
- ?line {"StrT", <<"stringtable">>} = StringTableChunk,
+ DataDir = proplists:get_value(data_dir, Config),
+ File = filename:join(DataDir, "string_table.erl"),
+ {ok,string_table,Beam,[]} = compile:file(File, [return, binary]),
+ {ok,{string_table,[StringTableChunk]}} = beam_lib:chunks(Beam, ["StrT"]),
+ {"StrT", <<"stringtable">>} = StringTableChunk,
ok.
otp_8949_a(Config) when is_list(Config) ->
@@ -648,24 +421,6 @@ do_otp_8949_a() ->
end
end.
-otp_8949_b(Config) when is_list(Config) ->
- self() ! something,
- ?line value = otp_8949_b([], false),
- ?line {'EXIT',_} = (catch otp_8949_b([], true)),
- ok.
-
-%% Would cause an endless loop in beam_utils.
-otp_8949_b(A, B) ->
- Var = id(value),
- if
- A == [], B == false ->
- ok
- end,
- receive
- something ->
- id(Var)
- end.
-
split_cases(_) ->
dummy1 = do_split_cases(x),
{'EXIT',{{badmatch,b},_}} = (catch do_split_cases(y)),
@@ -681,21 +436,5 @@ do_split_cases(A) ->
end,
Z.
--record(alarmInfo, {type,cause,origin}).
-
-beam_utils_liveopt(Config) ->
- F = beam_utils_liveopt_fun(42, pebkac, user),
- void = F(42, #alarmInfo{type=sctp,cause=pebkac,origin=user}),
- ok.
-
-beam_utils_liveopt_fun(Peer, Cause, Origin) ->
- fun(PeerNo, AlarmInfo)
- when PeerNo == Peer andalso
- AlarmInfo == #alarmInfo{type=sctp,
- cause=Cause,
- origin=Origin} ->
- void
- end.
-
id(I) -> I.
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_1.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_1.erl
deleted file mode 100644
index ce72d0d0f2..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_1.erl
+++ /dev/null
@@ -1,32 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(beam_compiler_1).
--export([beam_compiler_1/0]).
-
-beam_compiler_1() ->
- ok.
-
--record(foo,{a,b}).
-
-try_me() ->
- X = #foo{},
- Y = #foo{},
- {X#foo.a == Y#foo.a,X#foo.b}.
-
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_10.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_10.erl
index 41c5e7b4d2..66f2f78b32 100644
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_10.erl
+++ b/lib/compiler/test/compilation_SUITE_data/beam_compiler_10.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_11.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_11.erl
index 1b6cd66953..0339b2a488 100644
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_11.erl
+++ b/lib/compiler/test/compilation_SUITE_data/beam_compiler_11.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_12.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_12.erl
deleted file mode 100644
index 8bb6ce9e4a..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_12.erl
+++ /dev/null
@@ -1,30 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(beam_compiler_12).
-
--export([?MODULE/0,t/1]).
-
-?MODULE() ->
- ok.
-
-t(Name) ->
- {ok = {file_info,_,regular,_,AccTime1,ModTime1,_,_,_,_,_,_,_,_}} =
- prim_file:read_file_info(Name).
-
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_2.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_2.erl
deleted file mode 100644
index 66fdcae4d0..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_2.erl
+++ /dev/null
@@ -1,36 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(beam_compiler_2).
--export([beam_compiler_2/0]).
-
-beam_compiler_2() ->
- ok.
-
--record(foo,{a,b}).
-
-try_me() ->
- try_me({foo,x,z},{foo,y,z}).
-
-try_me(X,Y) ->
- f(X#foo.a =/= Y#foo.a,X#foo.b =/= X#foo.b).
-
-f(A,B) ->
- A.
-
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_3.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_3.erl
deleted file mode 100644
index adf6fa2720..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_3.erl
+++ /dev/null
@@ -1,30 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(beam_compiler_3).
--export([beam_compiler_3/0, f/0]).
-
-%% From Ulf Wiger.
-
-beam_compiler_3() ->
- ok.
-
-f() ->
- [_|T] = lists:reverse("xxx"),
- T.
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_4.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_4.erl
index 5ecfed52df..0a394619de 100644
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_4.erl
+++ b/lib/compiler/test/compilation_SUITE_data/beam_compiler_4.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_5.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_5.erl
deleted file mode 100644
index 21bab01c82..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_5.erl
+++ /dev/null
@@ -1,29 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(beam_compiler_5).
--export([beam_compiler_5/0]).
-
--compile(export_all).
-
-beam_compiler_5() ->
- ok.
-
-t() ->
- [_|_] = x.
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_6.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_6.erl
index a14c05de10..1fe1b2d693 100644
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_6.erl
+++ b/lib/compiler/test/compilation_SUITE_data/beam_compiler_6.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_8.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_8.erl
index d8eebc07d1..de51c59aae 100644
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_8.erl
+++ b/lib/compiler/test/compilation_SUITE_data/beam_compiler_8.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/beam_compiler_9.erl b/lib/compiler/test/compilation_SUITE_data/beam_compiler_9.erl
index fecc566a95..5d0097f0fd 100644
--- a/lib/compiler/test/compilation_SUITE_data/beam_compiler_9.erl
+++ b/lib/compiler/test/compilation_SUITE_data/beam_compiler_9.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/bin_syntax_1.erl b/lib/compiler/test/compilation_SUITE_data/bin_syntax_1.erl
deleted file mode 100644
index b381c539b7..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/bin_syntax_1.erl
+++ /dev/null
@@ -1,32 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(bin_syntax_1).
-
--export([f/2,?MODULE/0]).
-
-?MODULE() ->
- ok.
-
-f(X, Y) ->
- case X of
- a ->
- Y2 = 8
- end,
- <<5:Y2>> = Y.
diff --git a/lib/compiler/test/compilation_SUITE_data/bin_syntax_2.erl b/lib/compiler/test/compilation_SUITE_data/bin_syntax_2.erl
deleted file mode 100644
index b3e3785249..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/bin_syntax_2.erl
+++ /dev/null
@@ -1,42 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(bin_syntax_2).
-
--export([?MODULE/0]).
-
-%% This module tests that constant propagation is done properly.
-
-?MODULE() ->
- 258 = b(<<1,2>>),
- F = c(),
- 259 = F(<<1,3>>),
- ok.
-
-b(B) ->
- Sz = 16,
- <<X:Sz/integer>> = B,
- X.
-
-c() ->
- Size = 16,
- fun(Bin) ->
- <<X:Size/integer>> = Bin,
- X
- end.
diff --git a/lib/compiler/test/compilation_SUITE_data/bin_syntax_3.erl b/lib/compiler/test/compilation_SUITE_data/bin_syntax_3.erl
deleted file mode 100644
index b881d2769e..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/bin_syntax_3.erl
+++ /dev/null
@@ -1,36 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(bin_syntax_3).
--export([?MODULE/0,decode_integer/3]).
-
-?MODULE() ->
- ok.
-
-decode_integer(Len, <<B1:1,B2:7,Bs/binary>>, RemovedBytes) when B1 == 0 ->
- Bin = <<Skip:Len/unit:8, Buffer2/binary>> = <<B1:1,B2:7,Bs/binary>>,
- Size = size(Bin),
- <<Int:Size/unit:8>> = Bin,
- {Int,Buffer2,RemovedBytes};
-decode_integer(Len,<<B1:1,B2:7,Bs/binary>>,RemovedBytes) ->
- Bin = <<Skip:Len/unit:8,Buffer2/binary>> = <<B1:1,B2:7,Bs/binary>>,
- Size = size(Bin),
- <<N:Size/unit:8>> = <<B2,Bs/binary>>,
- Int = N - (1 bsl (8 * size(Bin) -1)),
- {Int,Buffer2,RemovedBytes}.
diff --git a/lib/compiler/test/compilation_SUITE_data/bin_syntax_4.erl b/lib/compiler/test/compilation_SUITE_data/bin_syntax_4.erl
deleted file mode 100644
index f63eb34fb2..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/bin_syntax_4.erl
+++ /dev/null
@@ -1,33 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(bin_syntax_4).
--export([?MODULE/0,f4b/2,f4c/2]).
-
-?MODULE() ->
- ok.
-
-f4b(X, Y) ->
- fun (<< A:Y >>, Y, B) -> fum(A, X, Y, B) end.
-
-f4c(X, Y) ->
- fun (Y, << A:Y >>, B) -> fum(A, X, Y, B) end.
-
-fum(A, B, C, D) ->
- {A,B,C,D}.
diff --git a/lib/compiler/test/compilation_SUITE_data/bin_syntax_6.erl b/lib/compiler/test/compilation_SUITE_data/bin_syntax_6.erl
deleted file mode 100644
index 13e4bb8707..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/bin_syntax_6.erl
+++ /dev/null
@@ -1,40 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(bin_syntax_6).
--export([?MODULE/0,x/1,y/1]).
-
-?MODULE() ->
- ok.
-
-x(X) ->
- blurf(),
- B = {X,"OK",<<>>},
- catch b({a,B}).
-
-y(X) ->
- blurf(),
- B = {X,"OK",<<42>>},
- catch b({a,B}).
-
-blurf() ->
- ok.
-
-b(_) ->
- ok.
diff --git a/lib/compiler/test/compilation_SUITE_data/catch_in_catch.erl b/lib/compiler/test/compilation_SUITE_data/catch_in_catch.erl
deleted file mode 100644
index 0abde0ff5d..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/catch_in_catch.erl
+++ /dev/null
@@ -1,52 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(catch_in_catch).
-
--export([?MODULE/0,do_start/1]).
-
-?MODULE() ->
- process_flag(trap_exit, true),
- Pid = spawn_link(?MODULE, do_start, [x]),
- receive
- {'EXIT',Pid,good_exit} -> ok;
- Other ->
- io:format("Unexpected: ~p\n", [Other]),
- error
- after 32000 ->
- io:format("No message received\n"),
- error
- end.
-
-do_start(Param) ->
- init(Param),
- exit(good_exit).
-
-init(Param) ->
- process_flag(trap_exit, true),
- %% The catches were improperly nested, causing a "No catch found" crash.
- (catch begin
- foo(Param),
- (catch exit(bar))
- end
- ),
- ignore.
-
-foo(_) ->
- ok.
diff --git a/lib/compiler/test/compilation_SUITE_data/compiler_1.erl b/lib/compiler/test/compilation_SUITE_data/compiler_1.erl
index 02858ec308..87985bdf80 100644
--- a/lib/compiler/test/compilation_SUITE_data/compiler_1.erl
+++ b/lib/compiler/test/compilation_SUITE_data/compiler_1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/compiler_3.erl b/lib/compiler/test/compilation_SUITE_data/compiler_3.erl
deleted file mode 100644
index 4b99eafc63..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/compiler_3.erl
+++ /dev/null
@@ -1,34 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(compiler_3).
--export([compiler_3/0]).
--record(rec,{a}).
-
-compiler_3() ->
- guard_record().
-
-guard_record() ->
- 1=func(#rec{}),
- {'EXIT',_} = (catch func({rec})),
- ok.
-
-func(X) when record(X,
-rec) ->
- 1.
diff --git a/lib/compiler/test/compilation_SUITE_data/compiler_5.erl b/lib/compiler/test/compilation_SUITE_data/compiler_5.erl
deleted file mode 100644
index 63564ac938..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/compiler_5.erl
+++ /dev/null
@@ -1,50 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(compiler_5).
--export([compiler_5/0]).
-
-compiler_5() ->
- f0(),
- f1(),
- f2(),
- ok.
-
-%% compiler treats records with 1 and 2 fields differently...
--record(nil, {}).
--record(foo, {hello=1}).
--record(bar, {hello=2,there=3}).
-
-f0() ->
- R1 = #nil{},
- R2 = R1#nil{}, %% stupid code, but compiler shouldn't crash
- R1 = R2,
- ok.
-
-f1() ->
- R1 = #foo{},
- R2 = R1#foo{}, %% stupid code, but compiler shouldn't crash
- R1 = R2,
- ok.
-
-f2() ->
- R1 = #bar{},
- R2 = R1#bar{}, %% stupid code, but compiler shouldn't crash
- R1 = R2,
- ok.
diff --git a/lib/compiler/test/compilation_SUITE_data/complex_guard.erl b/lib/compiler/test/compilation_SUITE_data/complex_guard.erl
deleted file mode 100644
index 37b861b0b5..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/complex_guard.erl
+++ /dev/null
@@ -1,32 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(complex_guard).
-
--compile(export_all).
-
-?MODULE() ->
- ok.
-
-f(X1,Y1,Z1) ->
- if
- ((X1 =:= 4) or (X1 =:= 5)) and ((Y1 =:= 4) or (Y1 =:= 5)) and ((Z1 =:= 4) or (Z1 =:= 5)) or ((X1 =:= 1) or (X1 =:= 2) or (X1 =:= 3)) and ((Y1 =:= 1) or (Y1 =:= 2) or (Y1 =:= 3)) and ((Z1 =:= 1) or (Z1 =:= 2) or (Z1 =:= 3)) ->
- true
- end.
-
diff --git a/lib/compiler/test/compilation_SUITE_data/const_list_256.erl b/lib/compiler/test/compilation_SUITE_data/const_list_256.erl
index 18f4d52d7b..bdce438162 100644
--- a/lib/compiler/test/compilation_SUITE_data/const_list_256.erl
+++ b/lib/compiler/test/compilation_SUITE_data/const_list_256.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/convopts.erl b/lib/compiler/test/compilation_SUITE_data/convopts.erl
index 55b65d6763..8404eb82fd 100644
--- a/lib/compiler/test/compilation_SUITE_data/convopts.erl
+++ b/lib/compiler/test/compilation_SUITE_data/convopts.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/guards.erl b/lib/compiler/test/compilation_SUITE_data/guards.erl
deleted file mode 100644
index f0d11fc79a..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/guards.erl
+++ /dev/null
@@ -1,107 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(guards).
-
--export([guards/0]).
-
-guards() ->
- ok = t(),
- ok = f(),
- ok = ct(1),
- ok = multi(1),
- ok = multi(2),
- ok = multi(3).
-
-%% The following tests are always true.
-t() when integer(42) ->
- ok;
-t() when float(2.0) ->
- ok;
-t() when number(7) ->
- ok;
-t() when number(3.14) ->
- ok;
-t() when atom(error) ->
- ok;
-t() when list([a]) ->
- ok;
-t() when tuple({}) ->
- ok;
-t() when tuple({1, 2}) ->
- ok.
-
-%% The following tests are always false.
-f() when integer(a) ->
- ok;
-f() when float(b) ->
- ok;
-f() when number(c) ->
- ok;
-f() when atom(42) ->
- ok;
-f() when list(33) ->
- ok;
-f() when list({}) ->
- ok;
-f() when list({1, 2}) ->
- ok;
-f() when tuple(33) ->
- ok;
-f() when tuple([a]) ->
- ok;
-f() when tuple([]) ->
- ok;
-f() when tuple(35) ->
- ok;
-f() ->
- ok.
-
-%% The following tests are always true.
-ct(X) ->
- case X of
- Y when integer(42) ->
- ok;
- Y when float(2.0) ->
- ok;
- Y when number(7) ->
- ok;
- Y when number(3.14) ->
- ok;
- Y when atom(error) ->
- ok;
- Y when list([a]) ->
- ok;
- Y when tuple({}) ->
- ok;
- Y when tuple({1, 2}) ->
- ok
- end.
-
-multi(X) ->
- case X of
- Y when float(Y) ; integer(Y) ->
- ok;
- Y when Y > 1, Y < 10 ; atom(Y) ->
- ok;
- Y when Y == 4, number(Y) ; list(Y) ->
- pannkaka;
- Y when Y==3 ; Y==5 ; Y==6 ->
- ok
- end.
diff --git a/lib/compiler/test/compilation_SUITE_data/live_var.erl b/lib/compiler/test/compilation_SUITE_data/live_var.erl
index be79041baf..b984d98c2b 100644
--- a/lib/compiler/test/compilation_SUITE_data/live_var.erl
+++ b/lib/compiler/test/compilation_SUITE_data/live_var.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/long_string.erl b/lib/compiler/test/compilation_SUITE_data/long_string.erl
deleted file mode 100644
index 1624e222ab..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/long_string.erl
+++ /dev/null
@@ -1,671 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(long_string).
-
--export([?MODULE/0]).
-
-?MODULE() ->
- Options = "some stupid long string",
- 49252 = length(generate(Options, "348927432097sfkjfkljf329")),
- ok.
-
-generate(Options, Glurf) ->
- "asdhfaslfdjhhwleirsk e4kjhr430usduy fdk;///s llsjkf;laskjfsdfkjasdfkj
-sdkljflasdfkjasldkfjasd" ++ Options ++
-"CSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQoKIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBG
-cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICAgICAgICAgICAgICAgICAgICA1OSBU
-ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiBFdmVy
-eW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMK
-IG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2Vk
-LgoKCQkJICAgIFByZWFtYmxlCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUg
-ZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0
-LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpcyBpbnRlbmRl
-ZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQpzb2Z0
-d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJz
-LiAgVGhpcwpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJl
-ZSBTb2Z0d2FyZQpGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFt
-IHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCnVzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0
-d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKdGhlIEdOVSBMaWJyYXJ5IEdl
-bmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCnlvdXIg
-cHJvZ3JhbXMsIHRvby4KCiAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUg
-cmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdApwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNl
-bnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CmhhdmUgdGhlIGZyZWVkb20g
-dG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKdGhp
-cyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBj
-YW4gZ2V0IGl0CmlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2Fy
-ZSBvciB1c2UgcGllY2VzIG9mIGl0CmluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Ug
-a25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywg
-d2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAphbnlvbmUgdG8gZGVueSB5
-b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuClRo
-ZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZv
-ciB5b3UgaWYgeW91CmRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91
-IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBz
-dWNoIGEgcHJvZ3JhbSwgd2hldGhlcgpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZl
-IHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKeW91IGhhdmUuICBZb3UgbXVzdCBt
-YWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKc291cmNlIGNv
-ZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVp
-cgpyaWdodHMuCgogIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBj
-b3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hp
-Y2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKZGlzdHJpYnV0ZSBhbmQvb3Ig
-bW9kaWZ5IHRoZSBzb2Z0d2FyZS4KCiAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlv
-biBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KdGhhdCBldmVyeW9uZSB1bmRlcnN0
-YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKc29mdHdhcmUuICBJ
-ZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24s
-IHdlCndhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5v
-dCB0aGUgb3JpZ2luYWwsIHNvCnRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJz
-IHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCmF1dGhvcnMnIHJlcHV0YXRpb25zLgoK
-ICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBz
-b2Z0d2FyZQpwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0
-cmlidXRvcnMgb2YgYSBmcmVlCnByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVu
-dCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRv
-IHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CnBhdGVudCBtdXN0
-IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBh
-bGwuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0
-cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgwKCQkgICAgR05VIEdFTkVSQUwgUFVC
-TElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJV
-VElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBw
-cm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKYSBub3RpY2UgcGxhY2VkIGJ5IHRo
-ZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKdW5kZXIgdGhl
-IHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJl
-bG93LApyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNl
-ZCBvbiB0aGUgUHJvZ3JhbSIKbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0
-aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250
-YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKZWl0aGVyIHZlcmJhdGltIG9y
-IHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKbGFuZ3Vh
-Z2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRh
-dGlvbiBpbgp0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJl
-c3NlZCBhcyAieW91Ii4KCkFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRp
-b24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5
-IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyB0aGUgUHJvZ3JhbSBp
-cyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQppcyBjb3Zl
-cmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQpQ
-cm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFBy
-b2dyYW0pLgpXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0g
-ZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBv
-ZiB0aGUgUHJvZ3JhbSdzCnNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVk
-aXVtLCBwcm92aWRlZCB0aGF0IHlvdQpjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1
-Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCmNvcHlyaWdodCBub3RpY2UgYW5kIGRp
-c2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKbm90aWNlcyB0aGF0IHJl
-ZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5Owph
-bmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhp
-cyBMaWNlbnNlCmFsb25nIHdpdGggdGhlIFByb2dyYW0uCgpZb3UgbWF5IGNoYXJnZSBhIGZlZSBm
-b3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKeW91IG1heSBh
-dCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBh
-IGZlZS4KCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJv
-Z3JhbSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0
-aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9y
-IHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5
-b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFlvdSBtdXN0IGNh
-dXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgc3Rh
-dGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5n
-ZS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9y
-IHB1Ymxpc2gsIHRoYXQgaW4KICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVy
-aXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQogICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNl
-bnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKICAgIHBhcnRpZXMgdW5k
-ZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJv
-Z3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CiAgICB3aGVuIHJ1biwg
-eW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCiAgICBpbnRl
-cmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5
-IGFuCiAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBu
-b3RpY2UgYW5kIGEKICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNl
-LCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQogICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMg
-bWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgogICAgdGhlc2UgY29uZGl0aW9ucywg
-YW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKICAgIExpY2Vu
-c2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0
-CiAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3
-b3JrIGJhc2VkIG9uCiAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4g
-YW5ub3VuY2VtZW50LikKDApUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVk
-IHdvcmsgYXMgYSB3aG9sZS4gIElmCmlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsg
-YXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCmFuZCBjYW4gYmUgcmVhc29uYWJseSBj
-b25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgp0aGVtc2VsdmVzLCB0
-aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCnNl
-Y3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3
-aGVuIHlvdQpkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3
-aGljaCBpcyBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2Yg
-dGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCnRoaXMgTGljZW5zZSwgd2hvc2UgcGVy
-bWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCmVudGlyZSB3aG9sZSwg
-YW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBp
-dC4KClRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSBy
-aWdodHMgb3IgY29udGVzdAp5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkg
-eW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRy
-b2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCmNvbGxlY3RpdmUgd29ya3MgYmFz
-ZWQgb24gdGhlIFByb2dyYW0uCgpJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90
-aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCndpdGggdGhlIFByb2dyYW0gKG9yIHdp
-dGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgphIHN0b3JhZ2Ug
-b3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRl
-cgp0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgoKICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3Ry
-aWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKdW5kZXIgU2VjdGlvbiAy
-KSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mClNl
-Y3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhl
-IGZvbGxvd2luZzoKCiAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVz
-cG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCiAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBk
-aXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKICAgIDEgYW5kIDIgYWJvdmUg
-b24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9y
-LAoKICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0
-IGxlYXN0IHRocmVlCiAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNo
-YXJnZSBubyBtb3JlIHRoYW4geW91cgogICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcg
-c291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQogICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5
-IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQogICAgZGlzdHJpYnV0ZWQg
-dW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KICAg
-IGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBjKSBB
-Y2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBv
-ZmZlcgogICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMg
-YWx0ZXJuYXRpdmUgaXMKICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmli
-dXRpb24gYW5kIG9ubHkgaWYgeW91CiAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3Qg
-Y29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCiAgICBhbiBvZmZlciwgaW4gYWNjb3Jk
-IHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKClRoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1l
-YW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKbWFraW5nIG1vZGlmaWNhdGlv
-bnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKY29kZSBt
-ZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1
-cyBhbnkKYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2Ny
-aXB0cyB1c2VkIHRvCmNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUg
-ZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2Ug
-Y29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCmFueXRoaW5nIHRoYXQgaXMgbm9ybWFs
-bHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CmZvcm0pIHdpdGggdGhl
-IG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCm9w
-ZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQg
-Y29tcG9uZW50Cml0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KCklmIGRpc3RyaWJ1
-dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKYWNj
-ZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZh
-bGVudAphY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBj
-b3VudHMgYXMKZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhp
-cmQgcGFydGllcyBhcmUgbm90CmNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0
-aCB0aGUgb2JqZWN0IGNvZGUuCgwKICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1Ymxp
-Y2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92
-aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdApvdGhlcndpc2UgdG8gY29weSwg
-bW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKdm9pZCwgYW5k
-IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNl
-bnNlLgpIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRz
-LCBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNl
-cyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaApwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBs
-aWFuY2UuCgogIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2Us
-IHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3Jh
-bnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9y
-IGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBs
-YXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2Rp
-Znlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0
-aGUKUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNl
-IHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywg
-ZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBp
-dC4KCiAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3
-b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJl
-Y2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0
-cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCnRoZXNlIHRlcm1zIGFuZCBj
-b25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBv
-biB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4K
-WW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJk
-IHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoKICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBh
-IGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBm
-b3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRp
-dGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1l
-bnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBM
-aWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhp
-cyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2lt
-dWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBv
-dGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5
-IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBh
-dGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9u
-IG9mIHRoZSBQcm9ncmFtIGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkg
-b3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNh
-dGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJl
-bHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCgpJZiBhbnkgcG9ydGlvbiBvZiB0
-aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKYW55IHBh
-cnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRl
-bmRlZCB0bwphcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBh
-cHBseSBpbiBvdGhlcgpjaXJjdW1zdGFuY2VzLgoKSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRo
-aXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQpwYXRlbnRzIG9yIG90aGVy
-IHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQpzdWNo
-IGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3Rpbmcg
-dGhlCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3
-aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBl
-b3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBv
-ZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9u
-IGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBh
-dXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1
-dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5v
-dAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0
-aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0
-aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgwKICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9v
-ciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBl
-aXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2lu
-YWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGlj
-ZW5zZQptYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRh
-dGlvbiBleGNsdWRpbmcKdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBw
-ZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZwpjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJ
-biBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKdGhlIGxpbWl0YXRpb24gYXMg
-aWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDkuIFRoZSBGcmVlIFNv
-ZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25z
-Cm9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBu
-ZXcgdmVyc2lvbnMgd2lsbApiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJz
-aW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3Ig
-Y29uY2VybnMuCgpFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9u
-IG51bWJlci4gIElmIHRoZSBQcm9ncmFtCnNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRo
-aXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CmxhdGVyIHZlcnNpb24iLCB5
-b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMK
-ZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQg
-YnkgdGhlIEZyZWUKU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90
-IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgp0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3Nl
-IGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRp
-b24uCgogIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3Jh
-bSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMg
-YXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgp0byBhc2sgZm9yIHBlcm1pc3Npb24u
-ICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKU29mdHdhcmUg
-Rm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29t
-ZXRpbWVzCm1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1
-aWRlZCBieSB0aGUgdHdvIGdvYWxzCm9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFs
-bCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKb2YgcHJvbW90aW5nIHRoZSBz
-aGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCgoJCQkgICAgTk8gV0FSUkFO
-VFkKCiAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0Us
-IFRIRVJFIElTIE5PIFdBUlJBTlRZCkZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJN
-SVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgpPVEhFUldJU0UgU1RBVEVEIElO
-IFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTClBST1ZJ
-REUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRI
-RVIgRVhQUkVTU0VECk9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
-SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
-QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKVE8gVEhFIFFVQUxJVFkg
-QU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQpQ
-Uk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNT
-QVJZIFNFUlZJQ0lORywKUkVQQUlSIE9SIENPUlJFQ1RJT04uCgogIDEyLiBJTiBOTyBFVkVOVCBV
-TkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcK
-V0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9E
-SUZZIEFORC9PUgpSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBC
-RSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLApJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJ
-QUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKT1VUIE9GIFRI
-RSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1Qg
-TElNSVRFRApUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRF
-IE9SIExPU1NFUyBTVVNUQUlORUQgQlkKWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJF
-IE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKUFJPR1JBTVMpLCBFVkVO
-IElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFClBP
-U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KCgkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJ
-VElPTlMKDAoJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFt
-cwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUg
-b2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkg
-dG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9u
-ZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRv
-IHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMg
-c2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRv
-IG1vc3QgZWZmZWN0aXZlbHkKY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBl
-YWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEg
-cG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCgogICAgPG9uZSBsaW5l
-IHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBk
-b2VzLj4KICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CgogICAgVGhp
-cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
-ciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
-IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
-OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICAgKGF0IHlvdXIgb3B0aW9u
-KSBhbnkgbGF0ZXIgdmVyc2lvbi4KCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
-dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
-QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFC
-SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBH
-TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91
-bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
-CiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
-b2Z0d2FyZQogICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs
-IEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoKCkFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhv
-dyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgoKSWYgdGhlIHBy
-b2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2Ug
-dGhpcwp3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIEdub21vdmlz
-aW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgogICAgR25v
-bW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0
-eXBlIGBzaG93IHcnLgogICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxj
-b21lIHRvIHJlZGlzdHJpYnV0ZSBpdAogICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBl
-IGBzaG93IGMnIGZvciBkZXRhaWxzLgoKVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3
-JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCnBhcnRzIG9mIHRoZSBH
-ZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBt
-YXkKYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsg
-dGhleSBjb3VsZCBldmVuIGJlCm1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBz
-dWl0cyB5b3VyIHByb2dyYW0uCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlm
-IHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2ln
-biBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgpuZWNlc3Nhcnku
-ICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBo
-ZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KICBg
-R25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5
-IEphbWVzIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CiAg
-VHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBk
-b2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bwpwcm9wcmlldGFy
-eSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91
-IG1heQpjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFy
-eSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2Fu
-dCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3Rl
-YWQgb2YgdGhpcyBMaWNlbnNlLgo=
-ClxjaGFwdGVye1RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZX0KClxiZWdpbntjZW50ZXJ9
-CntccGFyaW5kZW50IDBpbgoKVmVyc2lvbiAyLCBKdW5lIDE5OTEKCkNvcHlyaWdodCBcY29weXJp
-Z2h0XCAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgoKXGJpZ3NraXAK
-CjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNB
-CgpcYmlnc2tpcAoKRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUg
-dmVyYmF0aW0gY29waWVzCm9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0
-IGlzIG5vdCBhbGxvd2VkLgp9ClxlbmR7Y2VudGVyfQoKXGJlZ2lue2NlbnRlcn0Ke1xiZlxsYXJn
-ZSBQcmVhbWJsZX0KXGVuZHtjZW50ZXJ9CgoKVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJl
-IGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFu
-Z2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzCmlu
-dGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVl
-IHNvZnR3YXJlLS0tdG8KbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRz
-IHVzZXJzLiAgVGhpcyBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0
-aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvCmFueSBvdGhlciBw
-cm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJl
-ZQpTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMaWJy
-YXJ5IEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRv
-IHlvdXIgcHJvZ3JhbXMsIHRvby4KCldoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2Ug
-YXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuCk91ciBHZW5lcmFsIFB1YmxpYyBM
-aWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlCmZyZWVk
-b20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3Ig
-dGhpcyBzZXJ2aWNlCmlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBv
-ciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LAp0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0
-d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOwphbmQgdGhhdCB5
-b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KClRvIHByb3RlY3QgeW91ciByaWdodHMs
-IHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvCmRlbnkg
-eW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAg
-VGhlc2UKcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMg
-Zm9yIHlvdSBpZiB5b3UKZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5
-b3UgbW9kaWZ5IGl0LgoKRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBz
-dWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IKZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZl
-IHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuICBZb3UKbXVzdCBt
-YWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNv
-ZGUuICBBbmQKeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVp
-ciByaWdodHMuCgpXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29w
-eXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kICgyKQpvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNo
-IGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCmRpc3RyaWJ1dGUgYW5kL29yIG1v
-ZGlmeSB0aGUgc29mdHdhcmUuCgpBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFu
-ZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0CmV2ZXJ5b25lIHVuZGVyc3RhbmRz
-IHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIElmCnRo
-ZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ug
-d2FudCBpdHMKcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRo
-ZSBvcmlnaW5hbCwgc28gdGhhdCBhbnkKcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2ls
-bCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwgYXV0aG9ycycKcmVwdXRhdGlvbnMuCgpGaW5h
-bGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2Fy
-ZSBwYXRlbnRzLgpXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9y
-cyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsCmluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vu
-c2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZSBwcm9ncmFtCnByb3ByaWV0YXJ5LiAgVG8gcHJldmVu
-dCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QKYmUgbGlj
-ZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KClRo
-ZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24g
-YW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgpcYmVnaW57Y2VudGVyfQp7XExhcmdlIFxzYyBUZXJt
-cyBhbmQgQ29uZGl0aW9ucyBGb3IgQ29weWluZywgRGlzdHJpYnV0aW9uIGFuZAogIE1vZGlmaWNh
-dGlvbn0KXGVuZHtjZW50ZXJ9CgoKJVxyZW5ld2NvbW1hbmR7XHRoZWVudW1pfXtcYWxwaGF7ZW51
-bWl9fQpcYmVnaW57ZW51bWVyYXRlfQoKXGFkZHRvY291bnRlcntlbnVtaX17LTF9CgpcaXRlbSAK
-ClRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2gg
-Y29udGFpbnMgYSBub3RpY2UKcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBp
-dCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCnRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJs
-aWMgTGljZW5zZS4gIFRoZSBgYFByb2dyYW0nJywgYmVsb3csIHJlZmVycyB0bwphbnkgc3VjaCBw
-cm9ncmFtIG9yIHdvcmssIGFuZCBhIGBgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbScnIG1lYW5z
-IGVpdGhlcgp0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdo
-dCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhCndvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBh
-IHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoCm1vZGlmaWNhdGlvbnMgYW5k
-L29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLAp0cmFu
-c2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gYGBtb2Rp
-ZmljYXRpb24nJy4pCkVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzIGBgeW91JycuCgpBY3Rp
-dml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24g
-YXJlIG5vdApjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2Nv
-cGUuICBUaGUgYWN0IG9mCnJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFu
-ZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250
-ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSAoaW5kZXBlbmRlbnQg
-b2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KV2hldGhlciB0aGF0
-IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCgpcaXRlbSBZb3UgbWF5
-IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291
-cmNlCiAgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhh
-dCB5b3UgY29uc3BpY3VvdXNseQogIGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBj
-b3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UKICBhbmQgZGlzY2xhaW1lciBvZiB3
-YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8KICB0aGlz
-IExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55
-IG90aGVyCiAgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNl
-IGFsb25nIHdpdGggdGhlIFByb2dyYW0uCgpZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBo
-eXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91Cm1heSBhdCB5b3VyIG9w
-dGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KClxp
-dGVtCgpZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9y
-IGFueSBwb3J0aW9uCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9n
-cmFtLCBhbmQgY29weSBhbmQKZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1
-bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCmFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNv
-IG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgpcYmVnaW57ZW51bWVyYXRlfQoKXGl0ZW0g
-CgpZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5v
-dGljZXMgc3RhdGluZyB0aGF0CnlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2Yg
-YW55IGNoYW5nZS4KClxpdGVtCgpZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0
-cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4Kd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBp
-cyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CnBhcnQgdGhlcmVvZiwgdG8gYmUgbGlj
-ZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCnBhcnRpZXMgdW5kZXIg
-dGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KClxpdGVtCklmIHRoZSBtb2RpZmllZCBwcm9ncmFt
-IG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKd2hlbiBydW4sIHlvdSBtdXN0
-IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAppbnRlcmFjdGl2ZSB1c2Ug
-aW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCmFubm91bmNl
-bWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQpub3Rp
-Y2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHBy
-b3ZpZGUKYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJv
-Z3JhbSB1bmRlcgp0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8g
-dmlldyBhIGNvcHkgb2YgdGhpcwpMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0g
-aXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dApkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFu
-IGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCnRoZSBQcm9ncmFtIGlzIG5vdCByZXF1
-aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQoKXGVuZHtlbnVtZXJhdGV9CgoKVGhlc2Ug
-cmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgpp
-ZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRo
-ZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBh
-bmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBp
-dHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmli
-dXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUg
-c2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9u
-IHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRo
-ZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNl
-bnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2
-ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhl
-IGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciBy
-aWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50
-IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2Yg
-ZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4g
-YWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0
-aGUgUHJvZ3JhbQp3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUg
-UHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0g
-ZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGlj
-ZW5zZS4KClxpdGVtCllvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3Ig
-YSB3b3JrIGJhc2VkIG9uIGl0LAp1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4
-ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBw
-cm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoKXGJlZ2lue2Vu
-dW1lcmF0ZX0KClxpdGVtCgpBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9u
-ZGluZyBtYWNoaW5lLXJlYWRhYmxlCnNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1
-dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucwoxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVt
-IGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKClxpdGVtCgpB
-Y2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJl
-ZQp5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRo
-YW4geW91cgpjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9u
-LCBhIGNvbXBsZXRlCm1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBz
-b3VyY2UgY29kZSwgdG8gYmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25z
-IDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUg
-aW50ZXJjaGFuZ2U7IG9yLAoKXGl0ZW0KCkFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlv
-biB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCnRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGlu
-ZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCmFsbG93ZWQgb25seSBmb3Igbm9u
-Y29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CnJlY2VpdmVkIHRoZSBwcm9n
-cmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKYW4gb2ZmZXIs
-IGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpcZW5ke2VudW1lcmF0ZX0KCgpU
-aGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhl
-IHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUg
-d29yaywgY29tcGxldGUgc291cmNlCmNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3Ig
-YWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRl
-ZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bwpjb250cm9sIGNvbXBpbGF0
-aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCnNw
-ZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5j
-bHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291
-cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwg
-a2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBl
-eGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21wYW5pZXMg
-dGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3Qg
-Y29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVk
-IHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJj
-ZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUg
-c291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQg
-dG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoKXGl0ZW0KWW91
-IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9n
-cmFtCmV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55
-IGF0dGVtcHQKb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmli
-dXRlIHRoZSBQcm9ncmFtIGlzCnZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRl
-IHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KSG93ZXZlciwgcGFydGllcyB3aG8gaGF2
-ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKdGhpcyBMaWNlbnNl
-IHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gK
-cGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgoKXGl0ZW0KWW91IGFyZSBub3QgcmVx
-dWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBp
-dC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5
-IG9yCmRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVz
-ZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlz
-IExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFBy
-b2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgeW91IGluZGljYXRlIHlv
-dXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1z
-IGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRo
-ZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKXGl0ZW0KRWFjaCB0aW1lIHlvdSByZWRp
-c3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwg
-dGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpv
-cmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3Jh
-bSBzdWJqZWN0IHRvCnRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1w
-b3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ug
-b2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9y
-IGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoK
-XGl0ZW0KSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0
-aW9uIG9mIHBhdGVudAppbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBs
-aW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLApjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAo
-d2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCm90aGVyd2lzZSkgdGhhdCBjb250
-cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKZXhjdXNl
-IHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QK
-ZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlv
-bnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25z
-LCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Cm1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3Jh
-bSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKbGljZW5zZSB3b3VsZCBub3QgcGVy
-bWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQphbGwgdGhv
-c2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3Us
-IHRoZW4KdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGlj
-ZW5zZSB3b3VsZCBiZSB0bwpyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRo
-ZSBQcm9ncmFtLgoKSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxp
-ZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCmFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhl
-IGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KYXBwbHkgYW5kIHRoZSBzZWN0
-aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKY2lyY3Vtc3RhbmNl
-cy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0
-byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3Ig
-dG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMg
-dGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUg
-c29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKaW1wbGVtZW50ZWQgYnkgcHVi
-bGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCmdlbmVyb3VzIGNv
-bnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKdGhy
-b3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9m
-IHRoYXQKc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBo
-ZSBvciBzaGUgaXMgd2lsbGluZwp0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90
-aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKaW1wb3NlIHRoYXQgY2hvaWNlLgoKVGhp
-cyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJl
-bGlldmVkIHRvCmJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgoK
-XGl0ZW0KSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJl
-c3RyaWN0ZWQgaW4KY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29w
-eXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCm9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBs
-YWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKbWF5IGFkZCBhbiBleHBsaWNpdCBn
-ZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCnRob3NlIGNvdW50
-cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcK
-Y291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2Ug
-aW5jb3Jwb3JhdGVzCnRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2Yg
-dGhpcyBMaWNlbnNlLgoKXGl0ZW0KVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVi
-bGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKb2YgdGhlIEdlbmVyYWwgUHVibGljIExp
-Y2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWls
-YXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRl
-dGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBp
-cyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0K
-c3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMg
-dG8gaXQgYW5kIGBgYW55CmxhdGVyIHZlcnNpb24nJywgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBm
-b2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCmVpdGhlciBvZiB0aGF0IHZlcnNpb24g
-b3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlClNvZnR3YXJlIEZv
-dW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1i
-ZXIgb2YKdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxp
-c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLgoKXGl0ZW0KSWYgeW91IHdpc2gg
-dG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCnByb2dy
-YW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRv
-IHRoZSBhdXRob3IKdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlz
-IGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlClNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRo
-ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcwptYWtlIGV4Y2VwdGlvbnMg
-Zm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscwpv
-ZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZy
-ZWUgc29mdHdhcmUgYW5kCm9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29m
-dHdhcmUgZ2VuZXJhbGx5LgoKXGJlZ2lue2NlbnRlcn0Ke1xMYXJnZVxzYwpObyBXYXJyYW50eQp9
-ClxlbmR7Y2VudGVyfQoKXGl0ZW0Ke1xzYyBCZWNhdXNlIHRoZSBwcm9ncmFtIGlzIGxpY2Vuc2Vk
-IGZyZWUgb2YgY2hhcmdlLCB0aGVyZSBpcyBubyB3YXJyYW50eQpmb3IgdGhlIHByb2dyYW0sIHRv
-IHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiAgRXhjZXB0IHdoZW4Kb3Ro
-ZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQvb3Igb3Ro
-ZXIgcGFydGllcwpwcm92aWRlIHRoZSBwcm9ncmFtIGBgYXMgaXMnJyB3aXRob3V0IHdhcnJhbnR5
-IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkCm9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0
-IG5vdCBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mCm1lcmNoYW50YWJpbGl0
-eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBUaGUgZW50aXJlIHJpc2sg
-YXMKdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBwcm9ncmFtIGlzIHdpdGgg
-eW91LiAgU2hvdWxkIHRoZQpwcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUg
-Y29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywKcmVwYWlyIG9yIGNvcnJlY3Rpb24ufQoK
-XGl0ZW0Ke1xzYyBJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
-b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcKd2lsbCBhbnkgY29weXJpZ2h0IGhvbGRlciwgb3IgYW55
-IG90aGVyIHBhcnR5IHdobyBtYXkgbW9kaWZ5IGFuZC9vcgpyZWRpc3RyaWJ1dGUgdGhlIHByb2dy
-YW0gYXMgcGVybWl0dGVkIGFib3ZlLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLAppbmNs
-dWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBk
-YW1hZ2VzIGFyaXNpbmcKb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgcHJv
-Z3JhbSAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZAp0byBsb3NzIG9mIGRhdGEgb3IgZGF0YSBi
-ZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkKeW91IG9yIHRo
-aXJkIHBhcnRpZXMgb3IgYSBmYWlsdXJlIG9mIHRoZSBwcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBh
-bnkgb3RoZXIKcHJvZ3JhbXMpLCBldmVuIGlmIHN1Y2ggaG9sZGVyIG9yIG90aGVyIHBhcnR5IGhh
-cyBiZWVuIGFkdmlzZWQgb2YgdGhlCnBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy59CgpcZW5k
-e2VudW1lcmF0ZX0KCgpcYmVnaW57Y2VudGVyfQp7XExhcmdlXHNjIEVuZCBvZiBUZXJtcyBhbmQg
-Q29uZGl0aW9uc30KXGVuZHtjZW50ZXJ9CgoKXHBhZ2VicmVha1syXQoKXHNlY3Rpb24qe0FwcGVu
-ZGl4OiBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXN9CgpJZiB5
-b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdy
-ZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2
-ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVk
-aXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UKdGVybXMuCgogIFRvIGRvIHNvLCBhdHRh
-Y2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0IHRv
-CiAgYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBl
-ZmZlY3RpdmVseSBjb252ZXkKICB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBm
-aWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQogIGBgY29weXJpZ2h0JycgbGluZSBhbmQgYSBw
-b2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KClxiZWdpbntxdW90ZX0K
-b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3
-aGF0IGl0IGRvZXMuIFxcCkNvcHlyaWdodCAoQykgeXl5eSAgbmFtZSBvZiBhdXRob3IgXFwKClRo
-aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
-b3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
-Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
-ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
-IHZlcnNpb24uCgpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
-dCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
-dGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
-UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
-b3IgbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
-R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v
-dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
-IFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuClxlbmR7cXVv
-dGV9CgpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ry
-b25pYyBhbmQgcGFwZXIgbWFpbC4KCklmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtl
-IGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKd2hlbiBpdCBzdGFydHMgaW4gYW4g
-aW50ZXJhY3RpdmUgbW9kZToKClxiZWdpbntxdW90ZX0KR25vbW92aXNpb24gdmVyc2lvbiA2OSwg
-Q29weXJpZ2h0IChDKSB5eXl5ICBuYW1lIG9mIGF1dGhvciBcXApHbm9tb3Zpc2lvbiBjb21lcyB3
-aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuIFxc
-ClRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1
-dGUgaXQKdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxz
-LgpcZW5ke3F1b3RlfQoKClRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMge1x0dCBzaG93IHd9IGFu
-ZCB7XHR0IHNob3cgY30gc2hvdWxkIHNob3cgdGhlCmFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBH
-ZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMKeW91IHVzZSBt
-YXkgYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIHtcdHQgc2hvdyB3fSBhbmQge1x0dCBz
-aG93IGN9Owp0aGV5IGNvdWxkIGV2ZW4gYmUgbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLS13
-aGF0ZXZlciBzdWl0cyB5b3VyCnByb2dyYW0uCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1w
-bG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFu
-eSwgdG8gc2lnbiBhIGBgY29weXJpZ2h0IGRpc2NsYWltZXInJyBmb3IgdGhlIHByb2dyYW0sIGlm
-Cm5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKClxiZWdpbntx
-dW90ZX0KWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRl
-cmVzdCBpbiB0aGUgcHJvZ3JhbSBcXApgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMg
-YXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4gXFwKCnNpZ25hdHVyZSBvZiBU
-eSBDb29uLCAxIEFwcmlsIDE5ODkgXFwKVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKXGVuZHtx
-dW90ZX0KCgpUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29y
-cG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3Vy
-IHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9y
-ZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zCndpdGgg
-dGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05V
-IExpYnJhcnkKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4K
-Cgo=
-" ++ Glurf ++ lists:reverse(Glurf++"kalle").
diff --git a/lib/compiler/test/compilation_SUITE_data/nested_tuples_in_case_expr.erl b/lib/compiler/test/compilation_SUITE_data/nested_tuples_in_case_expr.erl
deleted file mode 100644
index 76401cea97..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/nested_tuples_in_case_expr.erl
+++ /dev/null
@@ -1,37 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(nested_tuples_in_case_expr).
--export([nested_tuples_in_case_expr/0,t/2]).
-
-nested_tuples_in_case_expr() ->
- ok.
-
-t(A, B) ->
- case {{element(1, A),element(2, B)},{element(2, A),element(2, B)}} of
- {Same,Same} -> ok;
- {{0,1},{up,X}} -> bar(X);
- {_,{X,_}} -> bar(X)
- end.
-
-bar(X) -> X.
-
-
-
-
diff --git a/lib/compiler/test/compilation_SUITE_data/opt_crash.erl b/lib/compiler/test/compilation_SUITE_data/opt_crash.erl
index 9a88df33af..f1607cca68 100644
--- a/lib/compiler/test/compilation_SUITE_data/opt_crash.erl
+++ b/lib/compiler/test/compilation_SUITE_data/opt_crash.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/other/vsn_1.erl b/lib/compiler/test/compilation_SUITE_data/other/vsn_1.erl
index 7acdb047fb..ea9b32bcbb 100644
--- a/lib/compiler/test/compilation_SUITE_data/other/vsn_1.erl
+++ b/lib/compiler/test/compilation_SUITE_data/other/vsn_1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/other/vsn_3.erl b/lib/compiler/test/compilation_SUITE_data/other/vsn_3.erl
index c8c9975d9b..9815138886 100644
--- a/lib/compiler/test/compilation_SUITE_data/other/vsn_3.erl
+++ b/lib/compiler/test/compilation_SUITE_data/other/vsn_3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_2141.erl b/lib/compiler/test/compilation_SUITE_data/otp_2141.erl
deleted file mode 100644
index 97daf8bffd..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/otp_2141.erl
+++ /dev/null
@@ -1,25 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(otp_2141).
--export([otp_2141/0]).
-
-
-otp_2141() ->
- ok.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_2173.erl b/lib/compiler/test/compilation_SUITE_data/otp_2173.erl
deleted file mode 100644
index 4155e2d1ff..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/otp_2173.erl
+++ /dev/null
@@ -1,32 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(otp_2173).
--compile(export_all).
-
--record(t, {a = fun(X) -> X*X end}).
-
-otp_2173() ->
- ok.
-
-t() ->
- #t{}.
-
-
-
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_2330.erl b/lib/compiler/test/compilation_SUITE_data/otp_2330.erl
index c9ba7c7ba5..92e93be1c1 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_2330.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_2330.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_2380.erl b/lib/compiler/test/compilation_SUITE_data/otp_2380.erl
index dbf44e5fb8..b7b2b04793 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_2380.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_2380.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_4790.erl b/lib/compiler/test/compilation_SUITE_data/otp_4790.erl
index 3a32372cc9..08769c5303 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_4790.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_4790.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5076.erl b/lib/compiler/test/compilation_SUITE_data/otp_5076.erl
deleted file mode 100644
index 7d96b5c734..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/otp_5076.erl
+++ /dev/null
@@ -1,28 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(otp_5076).
--export([?MODULE/0]).
-
-?MODULE() ->
- [] = t(),
- ok.
-
-t() ->
- [3 || {3=4} <- []].
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5092.erl b/lib/compiler/test/compilation_SUITE_data/otp_5092.erl
deleted file mode 100644
index b675e09af6..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/otp_5092.erl
+++ /dev/null
@@ -1,40 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(otp_5092).
--export([?MODULE/0]).
-
-?MODULE() ->
- [] = t(),
- [] = t2(),
- [t] = t4(),
- [] = t5(),
- ok.
-
-t() ->
- [t || {C=D}={_,_} <- []].
-
-t2() ->
- [X || {X,{Y}={X,X}} <- []].
-
-t4() ->
- [t || "a"++"b" = "ab" <- ["ab"]].
-
-t5() ->
- [{X,Y} || {X} <- [], begin Y = X, Y =:= X end].
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5151.erl b/lib/compiler/test/compilation_SUITE_data/otp_5151.erl
index c40de9e508..02a19ebd3d 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5151.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5151.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5235.erl b/lib/compiler/test/compilation_SUITE_data/otp_5235.erl
index 69a0a476fb..e0f77c73f6 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5235.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5235.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5244.erl b/lib/compiler/test/compilation_SUITE_data/otp_5244.erl
deleted file mode 100644
index 0fc32ddd36..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/otp_5244.erl
+++ /dev/null
@@ -1,48 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(otp_5244).
--export([?MODULE/0]).
-
-?MODULE() ->
- L = [{stretch,0,0},
- {bad,[]},
- {bad,atom},
- {bad,0},
- {bad,16#AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA},
- {bad,16#555555555555555555555555555555555555555555555555555}],
- remove_failure(L, unit, 0).
-
-remove_failure([], _Unit, _MaxFailure) ->
- ok;
-remove_failure([{bad,Bad}|_], _Unit, _MaxFailure) ->
- Bad;
-remove_failure([{stretch,_,Mi}=Stretch | Specs], Unit, _MaxFailure) ->
- {MinMax,NewMaxFailure} = max_failure(),
- case {MinMax,remove_failure(Specs, Unit, NewMaxFailure)} of
- {min,{NewMaxFailure,Rest}} ->
- {done,[{fixed,Mi} | Rest]};
- {min,_} when Specs =/= [] ->
- remove_failure([Stretch|tl(Specs)], Unit, NewMaxFailure);
- {min,_} ->
- ok
- end.
-
-max_failure() ->
- {min,1}.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5404.erl b/lib/compiler/test/compilation_SUITE_data/otp_5404.erl
index 66256fe33b..393c32aa00 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5404.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5404.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5436.erl b/lib/compiler/test/compilation_SUITE_data/otp_5436.erl
index 1ae564eed0..842d46e93e 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5436.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5436.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5481.erl b/lib/compiler/test/compilation_SUITE_data/otp_5481.erl
index 068845ac98..881d2cd239 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5481.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5481.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5553.erl b/lib/compiler/test/compilation_SUITE_data/otp_5553.erl
index fb654dca8a..fd7757ac1e 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5553.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5553.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5632.erl b/lib/compiler/test/compilation_SUITE_data/otp_5632.erl
index 229b5197bc..aaf6814f4e 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5632.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5632.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5714.erl b/lib/compiler/test/compilation_SUITE_data/otp_5714.erl
index d90f937385..b65663f063 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5714.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5714.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5872.erl b/lib/compiler/test/compilation_SUITE_data/otp_5872.erl
index 00d210c4c8..b9b9677a14 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_5872.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_5872.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_6121.erl b/lib/compiler/test/compilation_SUITE_data/otp_6121.erl
index 898e6304d6..f2bc9b3ee8 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_6121.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_6121.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_6121a.erl b/lib/compiler/test/compilation_SUITE_data/otp_6121a.erl
deleted file mode 100644
index fd0a25c779..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/otp_6121a.erl
+++ /dev/null
@@ -1,33 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(otp_6121a).
--export([?MODULE/0]).
-
-%% Thanks to Martin Bjorklund.
-
-?MODULE() ->
- G = fun() -> ok end,
- try
- fun() -> ok end
- after
- fun({A, B}) -> A + B end
- end,
- ok.
-
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_6121b.erl b/lib/compiler/test/compilation_SUITE_data/otp_6121b.erl
deleted file mode 100644
index 0c6b511bec..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/otp_6121b.erl
+++ /dev/null
@@ -1,34 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(otp_6121b).
--export([?MODULE/0]).
-
-%% Thanks to Tim Rath.
-
-?MODULE() ->
- A = {6},
- try
- io:fwrite("")
- after
- fun () ->
- fun () -> {B} = A end
- end
- end.
-
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_7202.erl b/lib/compiler/test/compilation_SUITE_data/otp_7202.erl
index 4437c484b4..4d86763b52 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_7202.erl
+++ b/lib/compiler/test/compilation_SUITE_data/otp_7202.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/pattern_expr.erl b/lib/compiler/test/compilation_SUITE_data/pattern_expr.erl
deleted file mode 100644
index da9c3c0a9a..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/pattern_expr.erl
+++ /dev/null
@@ -1,31 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(pattern_expr).
-
--export(pattern_expr/0).
-
-pattern_expr() ->
- f().
-
-f() ->
- case 4 of
- 2+2 ->
- ok
- end.
diff --git a/lib/compiler/test/compilation_SUITE_data/trycatch_4.erl b/lib/compiler/test/compilation_SUITE_data/trycatch_4.erl
deleted file mode 100644
index e6f87bf01b..0000000000
--- a/lib/compiler/test/compilation_SUITE_data/trycatch_4.erl
+++ /dev/null
@@ -1,51 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(trycatch_4).
--export([trycatch_4/0]).
--record(state, {foo}).
-
-trycatch_4() ->
- handle_info({foo}, #state{}),
- ok.
-
-handle_info({_}, State) ->
- foo(),
- State#state{foo = bar},
- case ok of
- _ ->
- case catch foo() of
- ok ->
- {stop, State}
- end
- end;
-handle_info(_, State) ->
- (catch begin
- foo(),
- State#state{foo = bar}
- end),
- case ok of
- _ ->
- case catch foo() of
- ok ->
- {stop, State}
- end
- end.
-
-foo() -> ok.
diff --git a/lib/compiler/test/compilation_SUITE_data/vsn_1.erl b/lib/compiler/test/compilation_SUITE_data/vsn_1.erl
index c3ce2f0445..fed91a25c6 100644
--- a/lib/compiler/test/compilation_SUITE_data/vsn_1.erl
+++ b/lib/compiler/test/compilation_SUITE_data/vsn_1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/vsn_2.erl b/lib/compiler/test/compilation_SUITE_data/vsn_2.erl
index ced2d7ca0b..670b3b34ed 100644
--- a/lib/compiler/test/compilation_SUITE_data/vsn_2.erl
+++ b/lib/compiler/test/compilation_SUITE_data/vsn_2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compilation_SUITE_data/vsn_3.erl b/lib/compiler/test/compilation_SUITE_data/vsn_3.erl
index 8312668d27..8fcd596636 100644
--- a/lib/compiler/test/compilation_SUITE_data/vsn_3.erl
+++ b/lib/compiler/test/compilation_SUITE_data/vsn_3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index cbdd9ce8cd..b0148f7103 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,8 @@
%% Tests compile:file/1 and compile:file/2 with various options.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
+-include_lib("stdlib/include/erl_compile.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
@@ -29,14 +30,13 @@
file_1/1, forms_2/1, module_mismatch/1, big_file/1, outdir/1,
binary/1, makedep/1, cond_and_ifdef/1, listings/1, listings_big/1,
other_output/1, encrypted_abstr/1,
- bad_record_use1/1, bad_record_use2/1, strict_record/1,
- missing_testheap/1, cover/1, env/1, core/1, asm/1,
+ strict_record/1,
+ cover/1, env/1, core/1,
+ core_roundtrip/1, asm/1,
sys_pre_attributes/1, dialyzer/1,
- warnings/1
+ warnings/1, pre_load_check/1, env_compiler_options/1
]).
--export([init/3]).
-
suite() -> [{ct_hooks,[ts_install_cth]}].
%% To cover the stripping of 'type' and 'spec' in beam_asm.
@@ -48,13 +48,13 @@ all() ->
[app_test, appup_test, file_1, forms_2, module_mismatch, big_file, outdir,
binary, makedep, cond_and_ifdef, listings, listings_big,
other_output, encrypted_abstr,
- {group, bad_record_use}, strict_record,
- missing_testheap, cover, env, core, asm,
- sys_pre_attributes, dialyzer, warnings].
+ strict_record,
+ cover, env, core, core_roundtrip, asm,
+ sys_pre_attributes, dialyzer, warnings, pre_load_check,
+ env_compiler_options].
groups() ->
- [{bad_record_use, [],
- [bad_record_use1, bad_record_use2]}].
+ [].
init_per_suite(Config) ->
Config.
@@ -72,71 +72,94 @@ end_per_group(_GroupName, Config) ->
%% Test that the Application file has no `basic' errors.";
app_test(Config) when is_list(Config) ->
- ?line ?t:app_test(compiler).
+ test_server:app_test(compiler).
%% Test that the Application upgrade file has no `basic' errors.";
appup_test(Config) when is_list(Config) ->
- ok = ?t:appup_test(compiler).
+ ok = test_server:appup_test(compiler).
%% Tests that we can compile and run a simple Erlang program,
%% using compile:file/1.
file_1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(5)),
-
process_flag(trap_exit, true),
- ?line {Simple, Target} = files(Config, "file_1"),
- ?line {ok, Cwd} = file:get_cwd(),
- ?line ok = file:set_cwd(filename:dirname(Target)),
+ {Simple, Target} = get_files(Config, simple, "file_1"),
+ {ok, Cwd} = file:get_cwd(),
+ ok = file:set_cwd(filename:dirname(Target)),
%% Native from BEAM without compilation info.
- ?line {ok,simple} = compile:file(Simple, [slim]), %Smoke test only.
- ?line {ok,simple} = compile:file(Target, [native,from_beam]), %Smoke test.
+ {ok,simple} = compile:file(Simple, [slim]), %Smoke test only.
+ {ok,simple} = compile:file(Target, [native,from_beam]), %Smoke test.
%% Native from BEAM with compilation info.
- ?line {ok,simple} = compile:file(Simple), %Smoke test only.
- ?line {ok,simple} = compile:file(Target, [native,from_beam]), %Smoke test.
+ {ok,simple} = compile:file(Simple), %Smoke test only.
+ {ok,simple} = compile:file(Target, [native,from_beam]), %Smoke test.
- ?line {ok,simple} = compile:file(Simple, [native,report]), %Smoke test.
+ {ok,simple} = compile:file(Simple, [native,report]), %Smoke test.
- ?line compile_and_verify(Simple, Target, []),
- ?line compile_and_verify(Simple, Target, [native]),
- ?line compile_and_verify(Simple, Target, [debug_info]),
- ?line {ok,simple} = compile:file(Simple, [no_line_info]), %Coverage
+ compile_and_verify(Simple, Target, []),
+ compile_and_verify(Simple, Target, [native]),
+ compile_and_verify(Simple, Target, [debug_info]),
+ {ok,simple} = compile:file(Simple, [no_line_info]), %Coverage
{ok,simple} = compile:file(Simple, [{eprof,beam_z}]), %Coverage
- ?line ok = file:set_cwd(Cwd),
- ?line true = exists(Target),
- ?line passed = run(Target, test, []),
+ ok = file:set_cwd(Cwd),
+ true = exists(Target),
+ passed = run(Target, test, []),
%% Cleanup.
- ?line ok = file:delete(Target),
- ?line ok = file:del_dir(filename:dirname(Target)),
+ ok = file:delete(Target),
+ ok = file:del_dir(filename:dirname(Target)),
%% There should not be any messages in the messages.
receive
Any ->
- ?t:fail({unexpected,Any})
+ ct:fail({unexpected,Any})
after 10 ->
ok
end,
- ?line test_server:timetrap_cancel(Dog),
ok.
forms_2(Config) when is_list(Config) ->
Src = "/foo/bar",
AbsSrc = filename:absname(Src),
Anno = erl_anno:new(1),
- {ok,simple,Binary} = compile:forms([{attribute,Anno,module,simple}],
- [binary,{source,Src}]),
- code:load_binary(simple, Src, Binary),
- Info = simple:module_info(compile),
+ SimpleCode = [{attribute,Anno,module,simple}],
+ {ok,simple,Bin1} = compile:forms(SimpleCode, [binary,{source,Src}]),
+
+ %% Load and test that the proper source is returned.
+ AbsSrc = forms_load_code(simple, Src, Bin1),
+
+ %% Work in a deleted directory.
+ PrivDir = proplists:get_value(priv_dir, Config),
+ WorkDir = filename:join(PrivDir, ?FUNCTION_NAME),
+ ok = file:make_dir(WorkDir),
+ ok = file:set_cwd(WorkDir),
+ case os:type() of
+ {unix,_} -> os:cmd("rm -rf " ++ WorkDir);
+ _ -> ok
+ end,
+ {ok,simple,Bin2} = compile:forms(SimpleCode),
+ undefined = forms_load_code(simple, "ignore", Bin2),
+
+ {ok,simple,Bin3} = compile:forms(SimpleCode, [{source,Src},report]),
+ case forms_load_code(simple, "ignore", Bin3) of
+ Src -> %Unix.
+ ok;
+ AbsSrc -> %Windows.
+ ok
+ end,
+
+ ok.
+
- %% Test that the proper source is returned.
- AbsSrc = proplists:get_value(source, Info),
+forms_load_code(Mod, Src, Bin) ->
+ {module,Mod} = code:load_binary(Mod, Src, Bin),
+ Info = Mod:module_info(compile),
+ SourceOption = proplists:get_value(source, Info),
%% Ensure that the options are not polluted with 'source'.
[] = proplists:get_value(options, Info),
@@ -144,124 +167,115 @@ forms_2(Config) when is_list(Config) ->
%% Cleanup.
true = code:delete(simple),
false = code:purge(simple),
- ok.
+
+ SourceOption.
+
module_mismatch(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line File = filename:join(DataDir, "wrong_module_name.erl"),
+ DataDir = proplists:get_value(data_dir, Config),
+ File = filename:join(DataDir, "wrong_module_name.erl"),
{error,[{"wrong_module_name.beam",
[{none,compile,{module_name,arne,"wrong_module_name"}}]}],
[]} = compile:file(File, [return]),
- ?line error = compile:file(File, [report]),
+ error = compile:file(File, [report]),
- ?line {ok,arne,[]} = compile:file(File,
+ {ok,arne,[]} = compile:file(File,
[return,no_error_module_mismatch]),
ok.
big_file(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(5)),
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Big = filename:join(DataDir, "big.erl"),
- ?line Target = filename:join(PrivDir, "big.beam"),
- ?line ok = file:set_cwd(PrivDir),
- ?line compile_and_verify(Big, Target, []),
- ?line compile_and_verify(Big, Target, [debug_info]),
- ?line compile_and_verify(Big, Target, [no_postopt]),
+ {Big,Target} = get_files(Config, big, "big_file"),
+ ok = file:set_cwd(filename:dirname(Target)),
+ compile_and_verify(Big, Target, []),
+ compile_and_verify(Big, Target, [debug_info]),
+ compile_and_verify(Big, Target, [no_postopt]),
%% Cleanup.
- ?line ok = file:delete(Target),
- ?line test_server:timetrap_cancel(Dog),
+ ok = file:delete(Target),
ok.
%% Tests that the {outdir, Dir} option works.
outdir(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
- ?line {Simple, Target} = files(Config, "outdir"),
- ?line {ok, simple} = compile:file(Simple, [{outdir, filename:dirname(Target)}]),
- ?line true = exists(Target),
- ?line passed = run(Target, test, []),
- ?line ok = file:delete(Target),
- ?line ok = file:del_dir(filename:dirname(Target)),
- ?line test_server:timetrap_cancel(Dog),
+ {Simple, Target} = get_files(Config, simple, "outdir"),
+ {ok, simple} = compile:file(Simple, [{outdir, filename:dirname(Target)}]),
+ true = exists(Target),
+ passed = run(Target, test, []),
+ ok = file:delete(Target),
+ ok = file:del_dir(filename:dirname(Target)),
ok.
%% Tests that the binary option works.
binary(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
- ?line {Simple, Target} = files(Config, "binary"),
- ?line {ok, simple, Binary} = compile:file(Simple, [binary]),
- ?line code:load_binary(simple, Target, Binary),
- ?line passed = simple:test(),
- ?line true = code:delete(simple),
- ?line false = code:purge(simple),
- ?line ok = file:del_dir(filename:dirname(Target)),
- ?line test_server:timetrap_cancel(Dog),
+ {Simple, Target} = get_files(Config, simple, "binary"),
+ {ok, simple, Binary} = compile:file(Simple, [binary]),
+ code:load_binary(simple, Target, Binary),
+ passed = simple:test(),
+ true = code:delete(simple),
+ false = code:purge(simple),
+ ok = file:del_dir(filename:dirname(Target)),
ok.
%% Tests that the dependencies-Makefile-related options work.
makedep(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
- ?line {Simple,Target} = files(Config, "makedep"),
- ?line DataDir = ?config(data_dir, Config),
- ?line SimpleRootname = filename:rootname(Simple),
- ?line IncludeDir = filename:join(filename:dirname(Simple), "include"),
- ?line IncludeOptions = [
- {d,need_foo},
- {d,foo_value,42},
- {d,include_generated},
- {i,IncludeDir}
- ],
+ {Simple,Target} = get_files(Config, simple, "makedep"),
+ DataDir = proplists:get_value(data_dir, Config),
+ SimpleRootname = filename:rootname(Simple),
+ IncludeDir = filename:join(filename:dirname(Simple), "include"),
+ IncludeOptions = [
+ {d,need_foo},
+ {d,foo_value,42},
+ {d,include_generated},
+ {i,IncludeDir}
+ ],
%% Basic rule.
- ?line BasicMf1Name = SimpleRootname ++ "-basic1.mk",
- ?line {ok,BasicMf1} = file:read_file(BasicMf1Name),
- ?line {ok,_,Mf1} = compile:file(Simple, [binary,makedep]),
- ?line BasicMf1 = makedep_canonicalize_result(Mf1, DataDir),
+ BasicMf1Name = SimpleRootname ++ "-basic1.mk",
+ {ok,BasicMf1} = file:read_file(BasicMf1Name),
+ {ok,_,Mf1} = compile:file(Simple, [binary,makedep]),
+ BasicMf1 = makedep_canonicalize_result(Mf1, DataDir),
%% Basic rule with one existing header.
- ?line BasicMf2Name = SimpleRootname ++ "-basic2.mk",
- ?line {ok,BasicMf2} = file:read_file(BasicMf2Name),
- ?line {ok,_,Mf2} = compile:file(Simple, [binary,makedep|IncludeOptions]),
- ?line BasicMf2 = makedep_canonicalize_result(Mf2, DataDir),
+ BasicMf2Name = SimpleRootname ++ "-basic2.mk",
+ {ok,BasicMf2} = file:read_file(BasicMf2Name),
+ {ok,_,Mf2} = compile:file(Simple, [binary,makedep|IncludeOptions]),
+ BasicMf2 = makedep_canonicalize_result(Mf2, DataDir),
%% Rule with one existing header and one missing header.
- ?line MissingMfName = SimpleRootname ++ "-missing.mk",
- ?line {ok,MissingMf} = file:read_file(MissingMfName),
- ?line {ok,_,Mf3} = compile:file(Simple,
+ MissingMfName = SimpleRootname ++ "-missing.mk",
+ {ok,MissingMf} = file:read_file(MissingMfName),
+ {ok,_,Mf3} = compile:file(Simple,
[binary,makedep,makedep_add_missing|IncludeOptions]),
- ?line MissingMf = makedep_canonicalize_result(Mf3, DataDir),
+ MissingMf = makedep_canonicalize_result(Mf3, DataDir),
%% Rule with modified target.
- ?line TargetMf1Name = SimpleRootname ++ "-target1.mk",
- ?line {ok,TargetMf1} = file:read_file(TargetMf1Name),
- ?line {ok,_,Mf4} = compile:file(Simple,
+ TargetMf1Name = SimpleRootname ++ "-target1.mk",
+ {ok,TargetMf1} = file:read_file(TargetMf1Name),
+ {ok,_,Mf4} = compile:file(Simple,
[binary,makedep,{makedep_target,"$target"}|IncludeOptions]),
- ?line TargetMf1 = makedep_modify_target(
+ TargetMf1 = makedep_modify_target(
makedep_canonicalize_result(Mf4, DataDir), "$$target"),
%% Rule with quoted modified target.
- ?line TargetMf2Name = SimpleRootname ++ "-target2.mk",
- ?line {ok,TargetMf2} = file:read_file(TargetMf2Name),
- ?line {ok,_,Mf5} = compile:file(Simple,
+ TargetMf2Name = SimpleRootname ++ "-target2.mk",
+ {ok,TargetMf2} = file:read_file(TargetMf2Name),
+ {ok,_,Mf5} = compile:file(Simple,
[binary,makedep,{makedep_target,"$target"},makedep_quote_target|
IncludeOptions]),
- ?line TargetMf2 = makedep_modify_target(
+ TargetMf2 = makedep_modify_target(
makedep_canonicalize_result(Mf5, DataDir), "$$target"),
%% Basic rule written to some file.
- ?line {ok,_} = compile:file(Simple,
+ {ok,_} = compile:file(Simple,
[makedep,{makedep_output,Target}|IncludeOptions]),
- ?line {ok,Mf6} = file:read_file(Target),
- ?line BasicMf2 = makedep_canonicalize_result(Mf6, DataDir),
+ {ok,Mf6} = file:read_file(Target),
+ BasicMf2 = makedep_canonicalize_result(Mf6, DataDir),
%% Rule with creating phony target.
- ?line PhonyMfName = SimpleRootname ++ "-phony.mk",
- ?line {ok,PhonyMf} = file:read_file(PhonyMfName),
- ?line {ok,_,Mf7} = compile:file(Simple,
+ PhonyMfName = SimpleRootname ++ "-phony.mk",
+ {ok,PhonyMf} = file:read_file(PhonyMfName),
+ {ok,_,Mf7} = compile:file(Simple,
[binary,makedep,makedep_phony|IncludeOptions]),
- ?line PhonyMf = makedep_canonicalize_result(Mf7, DataDir),
+ PhonyMf = makedep_canonicalize_result(Mf7, DataDir),
- ?line ok = file:delete(Target),
- ?line ok = file:del_dir(filename:dirname(Target)),
- ?line test_server:timetrap_cancel(Dog),
+ ok = file:delete(Target),
+ ok = file:del_dir(filename:dirname(Target)),
ok.
makedep_canonicalize_result(Mf, DataDir) ->
@@ -281,30 +295,26 @@ makedep_modify_target(Mf, Target) ->
%% Tests that conditional compilation, defining values, including files work.
cond_and_ifdef(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
- ?line {Simple, Target} = files(Config, "cond_and_ifdef"),
- ?line IncludeDir = filename:join(filename:dirname(Simple), "include"),
- ?line Options = [{outdir, filename:dirname(Target)},
+ {Simple, Target} = get_files(Config, simple, "cond_and_ifdef"),
+ IncludeDir = filename:join(filename:dirname(Simple), "include"),
+ Options = [{outdir, filename:dirname(Target)},
{d, need_foo}, {d, foo_value, 42},
{i, IncludeDir}, report],
- ?line {ok, simple} = compile:file(Simple, Options),
- ?line true = exists(Target),
- ?line {hiker, 42} = run(Target, foo, []),
- ?line ok = file:delete(Target),
- ?line ok = file:del_dir(filename:dirname(Target)),
- ?line test_server:timetrap_cancel(Dog),
+ {ok, simple} = compile:file(Simple, Options),
+ true = exists(Target),
+ {hiker, 42} = run(Target, foo, []),
+ ok = file:delete(Target),
+ ok = file:del_dir(filename:dirname(Target)),
ok.
listings(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:minutes(8)),
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ok = do_file_listings(DataDir, PrivDir, [
"simple",
"small",
"small_maps"
]),
- test_server:timetrap_cancel(Dog),
ok.
do_file_listings(_, _, []) -> ok;
@@ -330,6 +340,8 @@ do_file_listings(DataDir, PrivDir, [File|Files]) ->
do_listing(Simple, TargetDir, dlife, ".life"),
do_listing(Simple, TargetDir, dcg, ".codegen"),
do_listing(Simple, TargetDir, dblk, ".block"),
+ do_listing(Simple, TargetDir, dexcept, ".except"),
+ do_listing(Simple, TargetDir, dbs, ".bs"),
do_listing(Simple, TargetDir, dbool, ".bool"),
do_listing(Simple, TargetDir, dtype, ".type"),
do_listing(Simple, TargetDir, ddead, ".dead"),
@@ -359,159 +371,146 @@ do_file_listings(DataDir, PrivDir, [File|Files]) ->
do_file_listings(DataDir,PrivDir,Files).
listings_big(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(10)),
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Big = filename:join(DataDir, big),
- ?line TargetDir = filename:join(PrivDir, listings_big),
- ?line ok = file:make_dir(TargetDir),
- ?line do_listing(Big, TargetDir, 'S'),
- ?line do_listing(Big, TargetDir, 'E'),
- ?line do_listing(Big, TargetDir, 'P'),
- ?line do_listing(Big, TargetDir, dkern, ".kernel"),
-
- ?line Target = filename:join(TargetDir, big),
- {ok,big} = compile:file(Target, [from_asm,{outdir,TargetDir}]),
+ {Big,Target} = get_files(Config, big, listings_big),
+ TargetDir = filename:dirname(Target),
+ do_listing(Big, TargetDir, 'S'),
+ do_listing(Big, TargetDir, 'E'),
+ do_listing(Big, TargetDir, 'P'),
+ do_listing(Big, TargetDir, dkern, ".kernel"),
+
+ TargetNoext = filename:rootname(Target, code:objfile_extension()),
+ {ok,big} = compile:file(TargetNoext, [from_asm,{outdir,TargetDir}]),
%% Cleanup.
- ?line ok = file:delete(Target ++ ".beam"),
- ?line lists:foreach(fun(F) -> ok = file:delete(F) end,
- filelib:wildcard(filename:join(TargetDir, "*"))),
- ?line ok = file:del_dir(TargetDir),
- ?line test_server:timetrap_cancel(Dog),
+ ok = file:delete(Target),
+ lists:foreach(fun(F) -> ok = file:delete(F) end,
+ filelib:wildcard(filename:join(TargetDir, "*"))),
+ ok = file:del_dir(TargetDir),
ok.
other_output(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(8)),
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Simple = filename:join(DataDir, simple),
- ?line TargetDir = filename:join(PrivDir, other_output),
- ?line ok = file:make_dir(TargetDir),
+ {Simple,_Target} = get_files(Config, simple, "other_output"),
io:put_chars("to_pp"),
- ?line {ok,[],PP} = compile:file(Simple, [to_pp,binary,time]),
- ?line [] = [E || E <- PP,
- begin
- case element(1, E) of
- attribute -> false;
- function -> false;
- eof -> false
- end
- end],
+ {ok,[],PP} = compile:file(Simple, [to_pp,binary,time]),
+ [] = [E || E <- PP,
+ begin
+ case element(1, E) of
+ attribute -> false;
+ function -> false;
+ eof -> false
+ end
+ end],
io:put_chars("to_exp (file)"),
- ?line {ok,simple,Expand} = compile:file(Simple, [to_exp,binary,time]),
- ?line case Expand of
- {simple,Exports,Forms} when is_list(Exports), is_list(Forms) -> ok
- end,
+ {ok,simple,Expand} = compile:file(Simple, [to_exp,binary,time]),
+ case Expand of
+ {simple,Exports,Forms} when is_list(Exports), is_list(Forms) -> ok
+ end,
io:put_chars("to_exp (forms)"),
- ?line {ok,simple,Expand} = compile:forms(PP, [to_exp,binary,time]),
+ {ok,simple,Expand} = compile:forms(PP, [to_exp,binary,time]),
io:put_chars("to_core (file)"),
- ?line {ok,simple,Core} = compile:file(Simple, [to_core,binary,time]),
- ?line c_module = element(1, Core),
- ?line {ok,_} = core_lint:module(Core),
+ {ok,simple,Core} = compile:file(Simple, [to_core,binary,time]),
+ c_module = element(1, Core),
+ {ok,_} = core_lint:module(Core),
io:put_chars("to_core (forms)"),
- ?line {ok,simple,Core} = compile:forms(PP, [to_core,binary,time]),
+ {ok,simple,Core} = compile:forms(PP, [to_core,binary,time]),
io:put_chars("to_kernel (file)"),
- ?line {ok,simple,Kernel} = compile:file(Simple, [to_kernel,binary,time]),
- ?line k_mdef = element(1, Kernel),
+ {ok,simple,Kernel} = compile:file(Simple, [to_kernel,binary,time]),
+ k_mdef = element(1, Kernel),
io:put_chars("to_kernel (forms)"),
- ?line {ok,simple,Kernel} = compile:forms(PP, [to_kernel,binary,time]),
+ {ok,simple,Kernel} = compile:forms(PP, [to_kernel,binary,time]),
io:put_chars("to_asm (file)"),
- ?line {ok,simple,Asm} = compile:file(Simple, [to_asm,binary,time]),
- ?line {simple,_,_,_,_} = Asm,
+ {ok,simple,Asm} = compile:file(Simple, [to_asm,binary,time]),
+ {simple,_,_,_,_} = Asm,
io:put_chars("to_asm (forms)"),
- ?line {ok,simple,Asm} = compile:forms(PP, [to_asm,binary,time]),
+ {ok,simple,Asm} = compile:forms(PP, [to_asm,binary,time]),
- ?line test_server:timetrap_cancel(Dog),
ok.
encrypted_abstr(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(10)),
- ?line {Simple,Target} = files(Config, "encrypted_abstr"),
+ {Simple,Target} = get_files(Config, simple, "encrypted_abstr"),
Res = case has_crypto() of
false ->
%% No crypto.
- ?line encrypted_abstr_no_crypto(Simple, Target),
+ encrypted_abstr_no_crypto(Simple, Target),
{comment,"The crypto application is missing or broken"};
true ->
%% Simulate not having crypto by removing
%% the crypto application from the path.
- ?line OldPath = code:get_path(),
+ OldPath = code:get_path(),
try
- ?line NewPath = OldPath -- [filename:dirname(code:which(crypto))],
- ?line (catch crypto:stop()),
- ?line code:delete(crypto),
- ?line code:purge(crypto),
- ?line code:set_path(NewPath),
- ?line encrypted_abstr_no_crypto(Simple, Target)
+ NewPath = OldPath -- [filename:dirname(code:which(crypto))],
+ (catch crypto:stop()),
+ code:delete(crypto),
+ code:purge(crypto),
+ code:set_path(NewPath),
+ encrypted_abstr_no_crypto(Simple, Target)
after
code:set_path(OldPath)
end,
%% Now run the tests that require crypto.
- ?line encrypted_abstr_1(Simple, Target),
- ?line ok = file:delete(Target),
- ?line ok = file:del_dir(filename:dirname(Target))
+ encrypted_abstr_1(Simple, Target),
+ ok = file:delete(Target),
+ ok = file:del_dir(filename:dirname(Target))
end,
%% Cleanup.
- ?line test_server:timetrap_cancel(Dog),
Res.
encrypted_abstr_1(Simple, Target) ->
- ?line TargetDir = filename:dirname(Target),
- ?line Key = "ablurf123BX#$;3",
- ?line install_crypto_key(Key),
- ?line {ok,simple} = compile:file(Simple,
+ TargetDir = filename:dirname(Target),
+ Key = "ablurf123BX#$;3",
+ install_crypto_key(Key),
+ {ok,simple} = compile:file(Simple,
[debug_info,{debug_info_key,Key},
{outdir,TargetDir}]),
- ?line verify_abstract(Target),
+ verify_abstract(Target),
- ?line {ok,simple} = compile:file(Simple,
+ {ok,simple} = compile:file(Simple,
[{debug_info_key,Key},
{outdir,TargetDir}]),
- ?line verify_abstract(Target),
+ verify_abstract(Target),
- ?line {ok,simple} = compile:file(Simple,
+ {ok,simple} = compile:file(Simple,
[debug_info,{debug_info_key,{des3_cbc,Key}},
{outdir,TargetDir}]),
- ?line verify_abstract(Target),
+ verify_abstract(Target),
- ?line {ok,{simple,[{compile_info,CInfo}]}} =
+ {ok,{simple,[{compile_info,CInfo}]}} =
beam_lib:chunks(Target, [compile_info]),
- ?line {value,{_,Opts}} = lists:keysearch(options, 1, CInfo),
- ?line {value,{_,'********'}} = lists:keysearch(debug_info_key, 1, Opts),
+ {_,Opts} = lists:keyfind(options, 1, CInfo),
+ {_,'********'} = lists:keyfind(debug_info_key, 1, Opts),
%% Try some illegal forms of crypto keys.
- ?line error = compile:file(Simple,
+ error = compile:file(Simple,
[debug_info,{debug_info_key,{blurf,"ss"}},report]),
- ?line error = compile:file(Simple,
+ error = compile:file(Simple,
[debug_info,{debug_info_key,{blurf,1,"ss"}},report]),
- ?line error = compile:file(Simple,
+ error = compile:file(Simple,
[debug_info,{debug_info_key,42},report]),
%% Place the crypto key in .erlang.crypt.
- ?line beam_lib:clear_crypto_key_fun(),
- ?line {ok,OldCwd} = file:get_cwd(),
- ?line ok = file:set_cwd(TargetDir),
-
- ?line error = compile:file(Simple, [encrypt_debug_info,report]),
-
- ?line NewKey = "better use another key here",
- ?line write_crypt_file(["[{debug_info,des3_cbc,simple,\"",NewKey,"\"}].\n"]),
- ?line {ok,simple} = compile:file(Simple, [encrypt_debug_info,report]),
- ?line verify_abstract("simple.beam"),
- ?line ok = file:delete(".erlang.crypt"),
- ?line beam_lib:clear_crypto_key_fun(),
- ?line {error,beam_lib,{key_missing_or_invalid,"simple.beam",abstract_code}} =
+ beam_lib:clear_crypto_key_fun(),
+ {ok,OldCwd} = file:get_cwd(),
+ ok = file:set_cwd(TargetDir),
+
+ error = compile:file(Simple, [encrypt_debug_info,report]),
+
+ NewKey = "better use another key here",
+ write_crypt_file(["[{debug_info,des3_cbc,simple,\"",NewKey,"\"}].\n"]),
+ {ok,simple} = compile:file(Simple, [encrypt_debug_info,report]),
+ verify_abstract("simple.beam"),
+ ok = file:delete(".erlang.crypt"),
+ beam_lib:clear_crypto_key_fun(),
+ {error,beam_lib,{key_missing_or_invalid,"simple.beam",abstract_code}} =
beam_lib:chunks("simple.beam", [abstract_code]),
- ?line ok = file:set_cwd(OldCwd),
+ ok = file:set_cwd(OldCwd),
%% Test key compatibility by reading a BEAM file produced before
%% the update to the new crypto functions.
@@ -532,9 +531,9 @@ write_crypt_file(Contents0) ->
encrypted_abstr_no_crypto(Simple, Target) ->
io:format("simpe: ~p~n", [Simple]),
- ?line TargetDir = filename:dirname(Target),
- ?line Key = "ablurf123BX#$;3",
- ?line error = compile:file(Simple,
+ TargetDir = filename:dirname(Target),
+ Key = "ablurf123BX#$;3",
+ error = compile:file(Simple,
[debug_info,{debug_info_key,Key},
{outdir,TargetDir},report]),
ok.
@@ -546,7 +545,6 @@ verify_abstract(Target) ->
has_crypto() ->
try
crypto:start(),
- <<_,_,_,_,_>> = crypto:rand_bytes(5),
crypto:stop(),
true
catch
@@ -562,7 +560,7 @@ install_crypto_key(Key) ->
%% Miscellanous tests, mainly to get better coverage.
cover(Config) when is_list(Config) ->
- ?line io:format("~p\n", [compile:options()]),
+ io:format("~p\n", [compile:options()]),
ok.
do_listing(Source, TargetDir, Type) ->
@@ -573,31 +571,31 @@ do_listing(Source, TargetDir, Type, Ext) ->
[Source, TargetDir, Type, Ext]),
case compile:file(Source, [Type, time, {outdir, TargetDir}]) of
{ok, _} -> ok;
- Other -> test_server:fail({unexpected_result, Other})
+ Other -> ct:fail({unexpected_result, Other})
end,
SourceBase = filename:rootname(filename:basename(Source)),
Target = filename:join(TargetDir, SourceBase ++ Ext),
true = exists(Target).
-files(Config, Name) ->
- ?line code:delete(simple),
- ?line code:purge(simple),
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Simple = filename:join(DataDir, "simple"),
- ?line TargetDir = filename:join(PrivDir, Name),
- ?line ok = file:make_dir(TargetDir),
- ?line Target = filename:join(TargetDir, "simple"++code:objfile_extension()),
- {Simple, Target}.
-
+get_files(Config, Module, OutputName) ->
+ code:delete(Module),
+ code:purge(Module),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Src = filename:join(DataDir, atom_to_list(Module)),
+ TargetDir = filename:join(PrivDir, OutputName),
+ ok = file:make_dir(TargetDir),
+ File = atom_to_list(Module) ++ code:objfile_extension(),
+ Target = filename:join(TargetDir, File),
+ {Src, Target}.
run(Target, Func, Args) ->
- ?line Module = list_to_atom(filename:rootname(filename:basename(Target))),
- ?line {module, Module} = code:load_abs(filename:rootname(Target)),
- ?line Result = (catch apply(Module, Func, Args)),
- ?line true = code:delete(Module),
- ?line false = code:purge(Module),
+ Module = list_to_atom(filename:rootname(filename:basename(Target))),
+ {module, Module} = code:load_abs(filename:rootname(Target)),
+ Result = (catch apply(Module, Func, Args)),
+ true = code:delete(Module),
+ false = code:purge(Module),
Result.
exists(Name) ->
@@ -607,49 +605,27 @@ exists(Name) ->
end.
-%% Tests that the compiler does not accept
-%% bad use of records.
-bad_record_use1(Config) when is_list(Config) ->
- ?line {ok, Cwd} = file:get_cwd(),
- ?line file:set_cwd(?config(data_dir, Config)),
- ?line true=exists("bad_record_use.erl"),
- ?line Ret=c:c(bad_record_use),
- ?line file:set_cwd(Cwd),
- ?line error=Ret,
- ok.
-
-%% Tests that the compiler does not accept
-%% bad use of records.
-bad_record_use2(Config) when is_list(Config) ->
- ?line {ok, Cwd} = file:get_cwd(),
- ?line file:set_cwd(?config(data_dir, Config)),
- ?line true=exists("bad_record_use2.erl"),
- ?line Ret=c:c(bad_record_use),
- ?line file:set_cwd(Cwd),
- ?line error=Ret,
- ok.
-
strict_record(Config) when is_list(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line file:set_cwd(?config(data_dir, Config)),
- ?line Opts = [{outdir,Priv},report_errors],
+ Priv = proplists:get_value(priv_dir, Config),
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
+ Opts = [{outdir,Priv},report_errors],
M = record_access,
- ?line {ok,M} = c:c(M, [strict_record_tests|Opts]),
- ?line Turtle = test_strict(),
+ {ok,M} = c:c(M, [strict_record_tests|Opts]),
+ Turtle = test_strict(),
- ?line {ok,M} = c:c(M, [no_strict_record_tests|Opts]),
- ?line Turtle = test_sloppy(),
+ {ok,M} = c:c(M, [no_strict_record_tests|Opts]),
+ Turtle = test_sloppy(),
%% The option first given wins.
- ?line {ok,M} = c:c(M, [no_strict_record_tests,strict_record_tests|Opts]),
- ?line Turtle = test_sloppy(),
- ?line {ok,M} = c:c(M, [strict_record_tests,no_strict_record_tests|Opts]),
- ?line Turtle = test_strict(),
+ {ok,M} = c:c(M, [no_strict_record_tests,strict_record_tests|Opts]),
+ Turtle = test_sloppy(),
+ {ok,M} = c:c(M, [strict_record_tests,no_strict_record_tests|Opts]),
+ Turtle = test_strict(),
%% Default (possibly influenced by ERL_COMPILER_OPTIONS).
- ?line {ok,M} = c:c(M, [{outdir,Priv},report_errors]),
- ?line try
+ {ok,M} = c:c(M, [{outdir,Priv},report_errors]),
+ try
{1,2} = record_access:test(Turtle),
{comment,"Default: no_strict_record_tests"}
catch
@@ -659,7 +635,7 @@ strict_record(Config) when is_list(Config) ->
test_strict() ->
Turtle = record_access:turtle(),
- ?line try
+ try
record_access:test(Turtle)
catch
error:{badrecord,tortoise} ->
@@ -672,81 +648,41 @@ test_sloppy() ->
{1,2} = record_access:test(Turtle),
Turtle.
-missing_testheap(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
- Opts = [{outdir,PrivDir}],
- OldPath = code:get_path(),
- try
- code:add_patha(PrivDir),
- c:c(filename:join(DataDir, "missing_testheap1"), Opts),
- c:c(filename:join(DataDir, "missing_testheap2"), Opts),
- ?line ok = test(fun() ->
- missing_testheap1:f({a,self()},{state,true,b})
- end, {a,b}),
- ?line ok = test(fun() ->
- missing_testheap2:f({a,self()},16#80000000) end,
- bigger)
- after
- code:set_path(OldPath),
- file:delete(filename:join(PrivDir, "missing_testheap1.beam")),
- file:delete(filename:join(PrivDir, "missing_testheap2.beam"))
- end,
- ok.
-
-test(Fun, Result) ->
- test(500, Fun, Result, []).
-
-test(0, _, _, _) ->
- ok;
-test(Iter, Fun, Result, Filler) ->
- spawn(?MODULE, init, [self(), Fun, list_to_tuple(Filler)]),
- receive
- {result, Result} ->
- test(Iter-1, Fun, Result, [0|Filler]);
- {result, Other} ->
- io:format("Expected ~p; got ~p~n", [Result, Other]),
- test_server:fail()
- end.
-
-init(ReplyTo, Fun, _Filler) ->
- ReplyTo ! {result, Fun()}.
-
env(Config) when is_list(Config) ->
- ?line {Simple,Target} = files(Config, "file_1"),
- ?line {ok,Cwd} = file:get_cwd(),
- ?line ok = file:set_cwd(filename:dirname(Target)),
+ {Simple,Target} = get_files(Config, simple, env),
+ {ok,Cwd} = file:get_cwd(),
+ ok = file:set_cwd(filename:dirname(Target)),
true = os:putenv("ERL_COMPILER_OPTIONS", "binary"),
try
env_1(Simple, Target)
after
true = os:putenv("ERL_COMPILER_OPTIONS", "ignore_me"),
- file:set_cwd(Cwd),
- file:delete(Target),
- file:del_dir(filename:dirname(Target))
+ file:set_cwd(Cwd),
+ file:delete(Target),
+ file:del_dir(filename:dirname(Target))
end,
ok.
env_1(Simple, Target) ->
%% file
- ?line {ok,simple,<<_/binary>>} = compile:file(Simple),
- ?line {ok,simple} = compile:noenv_file(Simple, [debug_info]),
- ?line true = exists(Target),
- ?line {ok,{simple,[{abstract_code,Abstr0}]}} =
+ {ok,simple,<<_/binary>>} = compile:file(Simple),
+ {ok,simple} = compile:noenv_file(Simple, [debug_info]),
+ true = exists(Target),
+ {ok,{simple,[{abstract_code,Abstr0}]}} =
beam_lib:chunks(Target, [abstract_code]),
- ?line {raw_abstract_v1,Forms} = Abstr0,
+ {raw_abstract_v1,Forms} = Abstr0,
%% forms
- ?line true = os:putenv("ERL_COMPILER_OPTIONS", "strong_validation"),
- ?line {ok,simple} = compile:forms(Forms),
- ?line {ok,simple,<<"FOR1",_/binary>>} = compile:noenv_forms(Forms, []),
+ true = os:putenv("ERL_COMPILER_OPTIONS", "strong_validation"),
+ {ok,simple} = compile:forms(Forms),
+ {ok,simple,<<"FOR1",_/binary>>} = compile:noenv_forms(Forms, []),
%% output_generated
- ?line false = compile:output_generated([]),
- ?line true = compile:noenv_output_generated([]),
+ false = compile:output_generated([]),
+ true = compile:noenv_output_generated([]),
- ?line ok = file:delete(Target),
+ ok = file:delete(Target),
ok.
@@ -754,12 +690,11 @@ env_1(Simple, Target) ->
%% compile the generated Core Erlang files.
core(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Outdir = filename:join(PrivDir, "core"),
ok = file:make_dir(Outdir),
- Wc = filename:join(filename:dirname(code:which(?MODULE)), "*.beam"),
- TestBeams = filelib:wildcard(Wc),
+ TestBeams = get_unique_beam_files(),
Abstr = [begin {ok,{Mod,[{abstract_code,
{raw_abstract_v1,Abstr}}]}} =
beam_lib:chunks(Beam, [abstract_code]),
@@ -813,19 +748,134 @@ compile_forms(Forms, Opts) ->
Other -> throw({error,Other})
end.
+%% Pretty-print core and read it back. Should be identical.
+
+core_roundtrip(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Outdir = filename:join(PrivDir, atom_to_list(?FUNCTION_NAME)),
+ ok = file:make_dir(Outdir),
+
+ TestBeams = get_unique_beam_files(),
+ test_lib:p_run(fun(F) -> do_core_roundtrip(F, Outdir) end, TestBeams).
+
+do_core_roundtrip(Beam, Outdir) ->
+ try
+ {ok,{Mod,[{abstract_code,{raw_abstract_v1,Abstr}}]}} =
+ beam_lib:chunks(Beam, [abstract_code]),
+ do_core_roundtrip_1(Mod, Abstr, Outdir)
+ catch
+ throw:{error,Error} ->
+ io:format("*** compilation failure '~p' for file ~s\n",
+ [Error,Beam]),
+ error;
+ Class:Error ->
+ io:format("~p: ~p ~p\n~p\n",
+ [Beam,Class,Error,erlang:get_stacktrace()]),
+ error
+ end.
+
+do_core_roundtrip_1(Mod, Abstr, Outdir) ->
+ {ok,Mod,Core0} = compile:forms(Abstr, [to_core0]),
+ do_core_roundtrip_2(Mod, Core0, Outdir),
+
+ %% Primarily, test that annotations are accepted for all
+ %% constructs. Secondarily, smoke test cerl_trees:label/1.
+ {Core1,_} = cerl_trees:label(Core0),
+ do_core_roundtrip_2(Mod, Core1, Outdir),
+
+ %% Run the inliner to force generation of variables
+ %% with numeric names.
+ {ok,Mod,Core2} = compile:forms(Abstr, [inline,to_core]),
+ do_core_roundtrip_2(Mod, Core2, Outdir).
+
+do_core_roundtrip_2(M, Core0, Outdir) ->
+ CoreFile = filename:join(Outdir, atom_to_list(M)++".core"),
+ CorePP = core_pp:format_all(Core0),
+ ok = file:write_file(CoreFile, CorePP),
+
+ %% Parse the .core file and return the result as Core Erlang Terms.
+ Core2 = case compile:file(CoreFile, [report_errors,from_core,
+ no_copt,to_core,binary]) of
+ {ok,M,Core1} -> Core1;
+ Other -> throw({error,Other})
+ end,
+ Core = undo_var_translation(Core2),
+ ok = file:delete(CoreFile),
+
+ case cmp_core(Core0, Core, M) of
+ true -> ok;
+ false -> error
+ end,
+
+ ok.
+
+undo_var_translation(Tree) ->
+ F = fun(Node) ->
+ case cerl:is_c_var(Node) of
+ true ->
+ Name0 = cerl:var_name(Node),
+ try atom_to_list(Name0) of
+ "_X"++Name ->
+ cerl:update_c_var(Node, list_to_atom(Name));
+ "_"++Name ->
+ cerl:update_c_var(Node, list_to_atom(Name));
+ _ ->
+ Node
+ catch
+ error:badarg ->
+ Node
+
+ end;
+ false ->
+ Node
+ end
+ end,
+ cerl_trees:map(F, Tree).
+
+cmp_core(E, E, _Mod) ->
+ true;
+cmp_core(M1, M2, Mod) ->
+ cmp_core_fs(cerl:module_defs(M1), cerl:module_defs(M2), Mod).
+
+cmp_core_fs([F1|T1], [F2|T2], Mod) ->
+ cmp_core_f(F1, F2, Mod) andalso cmp_core_fs(T1, T2, Mod);
+cmp_core_fs([], [], _Mod) ->
+ true;
+cmp_core_fs(_, _, _Mod) ->
+ false.
+
+cmp_core_f(E, E, _Mod) ->
+ true;
+cmp_core_f({Name,F1}, {Name,F2}, Mod) ->
+ case diff(F1, F2) of
+ F1 ->
+ true;
+ Diff ->
+ io:format("~p ~p:\n~p\n", [Mod,Name,Diff]),
+ false
+ end.
+
+diff(E, E) ->
+ E;
+diff([H1|T1], [H2|T2]) ->
+ [diff(H1, H2)|diff(T1, T2)];
+diff(T1, T2) when tuple_size(T1) =:= tuple_size(T2) ->
+ L = diff(tuple_to_list(T1), tuple_to_list(T2)),
+ list_to_tuple(L);
+diff(E1, E2) ->
+ {'DIFF',E1,E2}.
+
+
%% Compile to Beam assembly language (.S) and then try to
%% run .S through the compiler again.
asm(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(20)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Outdir = filename:join(PrivDir, "asm"),
- ?line ok = file:make_dir(Outdir),
-
- ?line Wc = filename:join(filename:dirname(code:which(?MODULE)), "*.beam"),
- ?line TestBeams = filelib:wildcard(Wc),
- ?line Res = test_lib:p_run(fun(F) -> do_asm(F, Outdir) end, TestBeams),
- ?line test_server:timetrap_cancel(Dog),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Outdir = filename:join(PrivDir, "asm"),
+ ok = file:make_dir(Outdir),
+
+ TestBeams = get_unique_beam_files(),
+ Res = test_lib:p_run(fun(F) -> do_asm(F, Outdir) end, TestBeams),
Res.
@@ -853,7 +903,7 @@ do_asm(Beam, Outdir) ->
end.
sys_pre_attributes(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
File = filename:join(DataDir, "attributes.erl"),
Mod = attributes,
CommonOpts = [binary,report,verbose,
@@ -885,8 +935,8 @@ sys_pre_attributes(Config) ->
%% Test the dialyzer option to cover more code.
dialyzer(Config) ->
- Priv = ?config(priv_dir, Config),
- file:set_cwd(?config(data_dir, Config)),
+ Priv = proplists:get_value(priv_dir, Config),
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
Opts = [{outdir,Priv},report_errors],
M = dialyzer_test,
{ok,M} = c:c(M, [dialyzer|Opts]),
@@ -900,8 +950,7 @@ dialyzer(Config) ->
%% Test that warnings contain filenames and line numbers.
warnings(_Config) ->
- TestDir = filename:dirname(code:which(?MODULE)),
- Files = filelib:wildcard(filename:join(TestDir, "*.erl")),
+ Files = get_unique_files(".erl"),
test_lib:p_run(fun do_warnings/1, Files).
do_warnings(F) ->
@@ -935,6 +984,132 @@ do_warnings_2([], Next, F) ->
do_warnings_1(Next, F).
+%% Test that the compile:pre_load/0 function (used by 'erlc')
+%% pre-loads the modules that are used by a typical compilation.
+
+pre_load_check(Config) ->
+ case test_server:is_cover() of
+ true ->
+ {skip,"Cover is running"};
+ false ->
+ try
+ do_pre_load_check(Config)
+ after
+ dbg:stop_clear()
+ end
+ end.
+
+do_pre_load_check(Config) ->
+ DataDir = ?config(data_dir, Config),
+ Simple = filename:join(DataDir, "simple.erl"),
+ Big = filename:join(DataDir, "big.erl"),
+ {ok,_} = dbg:tracer(process, {fun pre_load_trace/2,[]}),
+ dbg:p(self(), call),
+ dbg:p(new, call),
+ {ok,_} = dbg:tpl({?MODULE,get_trace_data,0}, []),
+ {ok,_} = dbg:tp({code,ensure_modules_loaded,1}, []),
+
+ %% Compile a simple module using the erl_compile interface
+ %% to find out the modules that are pre-loaded by
+ %% compile:pre_load/0.
+ Opts = #options{specific=[binary]},
+ {ok,simple,_} = compile:compile(Simple, "", Opts),
+ [{code,ensure_modules_loaded,[PreLoaded0]}] = get_trace_data(),
+ PreLoaded1 = ordsets:from_list(PreLoaded0),
+
+ %% Since 'compile' is the function doing the pre-loaded,
+ %% it is useless to include it in the list.
+ case ordsets:is_element(compile, PreLoaded1) of
+ true ->
+ io:put_chars("The 'compile' module should not be included "
+ "in the list of modules to be pre-loaded."),
+ ?t:fail(compile);
+ false ->
+ []
+ end,
+ PreLoaded = ordsets:add_element(compile, PreLoaded1),
+
+ %% Now unload all pre-loaded modules and all modules in
+ %% compiler application. Then compile a module to find
+ %% which modules that get loaded.
+ CompilerMods = compiler_modules(),
+ Unload = ordsets:union(ordsets:from_list(CompilerMods), PreLoaded),
+ _ = [begin
+ code:delete(M),
+ code:purge(M)
+ end || M <- Unload],
+
+ {ok,_} = dbg:ctp({code,ensure_modules_loaded,1}),
+ {ok,_} = dbg:tp({code,ensure_loaded,1}, []),
+ {ok,big,_} = compile:file(Big, [binary]),
+ WasLoaded0 = get_trace_data(),
+ WasLoaded1 = [M || {code,ensure_loaded,[M]} <- WasLoaded0],
+ WasLoaded = ordsets:from_list(WasLoaded1),
+
+ %% Check for modules that should have been pre-loaded.
+ case ordsets:subtract(WasLoaded, PreLoaded) of
+ [] ->
+ ok;
+ [_|_]=NotPreLoaded ->
+ io:format("The following modules were used "
+ "but not pre-loaded:\n~p\n",
+ [NotPreLoaded]),
+ ?t:fail({not_preload,NotPreLoaded})
+ end,
+
+ %% Check for modules that should not be pre-loaded.
+ case ordsets:subtract(PreLoaded, WasLoaded) of
+ [] ->
+ ok;
+ [_|_]=NotUsed ->
+ io:format("The following modules were pre-loaded"
+ " but not used:\n~p\n",
+ [NotUsed]),
+ ?t:fail({not_used,NotUsed})
+ end,
+
+ ok.
+
+get_trace_data() ->
+ %% Apparantely, doing a receive at the beginning of
+ %% a traced function can cause extra trace messages.
+ %% To avoid that, don't do the receive in this function.
+ do_get_trace_data().
+
+do_get_trace_data() ->
+ receive
+ {trace_data,Data} -> Data
+ end.
+
+pre_load_trace({trace,Pid,call,{?MODULE,get_trace_data,[]}}, Acc) ->
+ Pid ! {trace_data,Acc},
+ [];
+pre_load_trace({trace,_,call,MFA}, Acc) ->
+ [MFA|Acc].
+
+compiler_modules() ->
+ Wc = filename:join([code:lib_dir(compiler),"ebin","*.beam"]),
+ Ms = filelib:wildcard(Wc),
+ FN = filename,
+ [list_to_atom(FN:rootname(FN:basename(M), ".beam")) || M <- Ms].
+
+%% Test that ERL_COMPILER_OPTIONS are correctly retrieved
+%% by env_compiler_options/0
+
+env_compiler_options(_Config) ->
+ Cases = [
+ {"bin_opt_info", [bin_opt_info]},
+ {"'S'", ['S']},
+ {"{source, \"test.erl\"}", [{source, "test.erl"}]},
+ {"[{d,macro_one,1},{d,macro_two}]", [{d, macro_one, 1}, {d, macro_two}]},
+ {"[warn_export_all, warn_export_vars]", [warn_export_all, warn_export_vars]}
+ ],
+ F = fun({Env, Expected}) ->
+ true = os:putenv("ERL_COMPILER_OPTIONS", Env),
+ Expected = compile:env_compiler_options()
+ end,
+ lists:foreach(F, Cases).
+
%%%
%%% Utilities.
%%%
@@ -946,3 +1121,14 @@ compile_and_verify(Name, Target, Opts) ->
beam_lib:chunks(Target, [compile_info]),
{options,BeamOpts} = lists:keyfind(options, 1, CInfo),
Opts = BeamOpts.
+
+get_unique_beam_files() ->
+ get_unique_files(".beam").
+
+get_unique_files(Ext) ->
+ Wc = filename:join(filename:dirname(code:which(?MODULE)), "*"++Ext),
+ [F || F <- filelib:wildcard(Wc), not is_cloned(F, Ext)].
+
+is_cloned(File, Ext) ->
+ Mod = list_to_atom(filename:basename(File, Ext)),
+ test_lib:is_cloned_mod(Mod).
diff --git a/lib/compiler/test/compile_SUITE_data/attributes.erl b/lib/compiler/test/compile_SUITE_data/attributes.erl
index 00e635a021..140965c97d 100644
--- a/lib/compiler/test/compile_SUITE_data/attributes.erl
+++ b/lib/compiler/test/compile_SUITE_data/attributes.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compile_SUITE_data/bad_record_use.erl b/lib/compiler/test/compile_SUITE_data/bad_record_use.erl
deleted file mode 100644
index 0fb6fc3045..0000000000
--- a/lib/compiler/test/compile_SUITE_data/bad_record_use.erl
+++ /dev/null
@@ -1,29 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(bad_record_use).
--export([test/0]).
-
--record(bad_use, {a=undefined,
- b=undefined,
- c=undefined}).
-
-test() ->
- NewRecord=#bad_use{a=1, b=2, a=2}.
-
diff --git a/lib/compiler/test/compile_SUITE_data/bad_record_use2.erl b/lib/compiler/test/compile_SUITE_data/bad_record_use2.erl
deleted file mode 100644
index 7c898af00f..0000000000
--- a/lib/compiler/test/compile_SUITE_data/bad_record_use2.erl
+++ /dev/null
@@ -1,30 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(bad_record_use2).
--export([test/0]).
-
--record(bad_use, {a=undefined,
- b=undefined,
- c=undefined}).
-
-test() ->
- R=#bad_use{a=1, b=2},
- R2=R#bad_use{a=1, b=2, a=2},
- ok.
diff --git a/lib/compiler/test/compile_SUITE_data/big.erl b/lib/compiler/test/compile_SUITE_data/big.erl
index d916742770..2e54ee8660 100644
--- a/lib/compiler/test/compile_SUITE_data/big.erl
+++ b/lib/compiler/test/compile_SUITE_data/big.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compile_SUITE_data/include/simple.hrl b/lib/compiler/test/compile_SUITE_data/include/simple.hrl
index 91398e209a..065378f820 100644
--- a/lib/compiler/test/compile_SUITE_data/include/simple.hrl
+++ b/lib/compiler/test/compile_SUITE_data/include/simple.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compile_SUITE_data/missing_testheap1.erl b/lib/compiler/test/compile_SUITE_data/missing_testheap1.erl
deleted file mode 100644
index 9d88bc4afe..0000000000
--- a/lib/compiler/test/compile_SUITE_data/missing_testheap1.erl
+++ /dev/null
@@ -1,36 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(missing_testheap1).
-
--compile(export_all).
-%%-export([Function/Arity, ...]).
--record(state,{e1,e2}).
-
-f({a,DpId},State) when State ==
-#state{e1=true,
- e2=a} ->
- {a,a};
-
-f({a,DpId},State) when State ==
-#state{e1=true,
- e2=b} ->
- {a,b}.
-
-
diff --git a/lib/compiler/test/compile_SUITE_data/missing_testheap2.erl b/lib/compiler/test/compile_SUITE_data/missing_testheap2.erl
deleted file mode 100644
index b61e8d3c88..0000000000
--- a/lib/compiler/test/compile_SUITE_data/missing_testheap2.erl
+++ /dev/null
@@ -1,30 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(missing_testheap2).
-
--compile(export_all).
-
-f({a,DpId},16#7fffffff) ->
- big;
-
-f({a,DpId},16#80000000) ->
- bigger.
-
-
diff --git a/lib/compiler/test/compile_SUITE_data/record_access.erl b/lib/compiler/test/compile_SUITE_data/record_access.erl
index 9a83472da4..537e9c8536 100644
--- a/lib/compiler/test/compile_SUITE_data/record_access.erl
+++ b/lib/compiler/test/compile_SUITE_data/record_access.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compile_SUITE_data/simple.erl b/lib/compiler/test/compile_SUITE_data/simple.erl
index 37e7b508f9..d8324dafaf 100644
--- a/lib/compiler/test/compile_SUITE_data/simple.erl
+++ b/lib/compiler/test/compile_SUITE_data/simple.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/compile_SUITE_data/wrong_module_name.erl b/lib/compiler/test/compile_SUITE_data/wrong_module_name.erl
index 8b4db1cfa3..77dd4747f0 100644
--- a/lib/compiler/test/compile_SUITE_data/wrong_module_name.erl
+++ b/lib/compiler/test/compile_SUITE_data/wrong_module_name.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/core_SUITE.erl b/lib/compiler/test/core_SUITE.erl
index 25f8564ce4..b768f49e2c 100644
--- a/lib/compiler/test/core_SUITE.erl
+++ b/lib/compiler/test/core_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,21 +29,20 @@
bs_shadowed_size_var/1
]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(comp(N),
N(Config) when is_list(Config) -> try_it(N, Config)).
init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = test_server:timetrap(?t:minutes(5)),
- [{watchdog,Dog}|Config].
+ Config.
end_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
test_lib:recompile(?MODULE),
@@ -86,7 +85,8 @@ end_per_group(_GroupName, Config) ->
try_it(Mod, Conf) ->
- Src = filename:join(?config(data_dir, Conf), atom_to_list(Mod)),
+ Src = filename:join(proplists:get_value(data_dir, Conf),
+ atom_to_list(Mod)),
compile_and_load(Src, []),
compile_and_load(Src, [no_copt]).
diff --git a/lib/compiler/test/core_fold_SUITE.erl b/lib/compiler/test/core_fold_SUITE.erl
index 016ea9d0d9..376d2c8e9a 100644
--- a/lib/compiler/test/core_fold_SUITE.erl
+++ b/lib/compiler/test/core_fold_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,11 +25,12 @@
eq/1,nested_call_in_case/1,guard_try_catch/1,coverage/1,
unused_multiple_values_error/1,unused_multiple_values/1,
multiple_aliases/1,redundant_boolean_clauses/1,
- mixed_matching_clauses/1,unnecessary_building/1]).
+ mixed_matching_clauses/1,unnecessary_building/1,
+ no_no_file/1]).
-export([foo/0,foo/1,foo/2,foo/3]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -43,7 +44,8 @@ groups() ->
eq,nested_call_in_case,guard_try_catch,coverage,
unused_multiple_values_error,unused_multiple_values,
multiple_aliases,redundant_boolean_clauses,
- mixed_matching_clauses,unnecessary_building]}].
+ mixed_matching_clauses,unnecessary_building,
+ no_no_file]}].
init_per_suite(Config) ->
@@ -61,8 +63,8 @@ end_per_group(_GroupName, Config) ->
t_element(Config) when is_list(Config) ->
X = make_ref(),
- ?line X = id(element(1, {X,y,z})),
- ?line b = id(element(2, {a,b,c,d})),
+ X = id(element(1, {X,y,z})),
+ b = id(element(2, {a,b,c,d})),
(fun() ->
case {a,#{k=>X}} of
{a,#{k:=X}}=Tuple ->
@@ -73,21 +75,21 @@ t_element(Config) when is_list(Config) ->
%% No optimization, but should work.
Tuple = id({x,y,z}),
Pos = id(3),
- ?line x = id(element(1, Tuple)),
- ?line c = id(element(Pos, {a,b,c,d})),
- ?line X = id(element(Pos, {a,b,X,d})),
- ?line z = id(element(Pos, Tuple)),
+ x = id(element(1, Tuple)),
+ c = id(element(Pos, {a,b,c,d})),
+ X = id(element(Pos, {a,b,X,d})),
+ z = id(element(Pos, Tuple)),
%% Calls that will fail.
- ?line {'EXIT',{badarg,_}} = (catch element(5, {a,b,c,d})),
- ?line {'EXIT',{badarg,_}} = (catch element(5, {a,b,X,d})),
- ?line {'EXIT',{badarg,_}} = (catch element(5.0, {a,b,X,d})),
+ {'EXIT',{badarg,_}} = (catch element(5, {a,b,c,d})),
+ {'EXIT',{badarg,_}} = (catch element(5, {a,b,X,d})),
+ {'EXIT',{badarg,_}} = (catch element(5.0, {a,b,X,d})),
{'EXIT',{badarg,_}} = (catch element(2, not_a_tuple)),
{'EXIT',{badarg,_}} = (catch element(2, [])),
{'EXIT',{badarg,_}} = (catch element(2, Tuple == 3)),
case id({a,b,c}) of
{_,_,_}=Tup ->
- ?line {'EXIT',{badarg,_}} = (catch element(4, Tup))
+ {'EXIT',{badarg,_}} = (catch element(4, Tup))
end,
{'EXIT',{badarg,_}} = (catch element(1, tuple_size(Tuple))),
@@ -96,16 +98,16 @@ t_element(Config) when is_list(Config) ->
setelement(Config) when is_list(Config) ->
X = id(b),
New = id([1,2,3]),
- ?line {y,b,c} = id(setelement(1, {a,b,c}, y)),
- ?line {y,b,c} = id(setelement(1, {a,X,c}, y)),
- ?line {a,y,c} = id(setelement(2, {a,X,c}, y)),
- ?line {a,[1,2,3],c} = id(setelement(2, {a,b,c}, New)),
- ?line {a,[1,2,3],c} = id(setelement(2, {a,X,c}, New)),
- ?line {a,b,[1,2,3]} = id(setelement(3, {a,b,c}, New)),
- ?line {a,b,[1,2,3]} = id(setelement(3, {a,X,c}, New)),
+ {y,b,c} = id(setelement(1, {a,b,c}, y)),
+ {y,b,c} = id(setelement(1, {a,X,c}, y)),
+ {a,y,c} = id(setelement(2, {a,X,c}, y)),
+ {a,[1,2,3],c} = id(setelement(2, {a,b,c}, New)),
+ {a,[1,2,3],c} = id(setelement(2, {a,X,c}, New)),
+ {a,b,[1,2,3]} = id(setelement(3, {a,b,c}, New)),
+ {a,b,[1,2,3]} = id(setelement(3, {a,X,c}, New)),
- ?line {'EXIT',{badarg,_}} = (catch setelement_crash({a,b,c,d,e,f})),
- ?line error = setelement_crash_2({a,b,c,d,e,f}, <<42>>),
+ {'EXIT',{badarg,_}} = (catch setelement_crash({a,b,c,d,e,f})),
+ error = setelement_crash_2({a,b,c,d,e,f}, <<42>>),
{'EXIT',{badarg,_}} = (catch setelement(1, not_a_tuple, New)),
{'EXIT',{badarg,_}} = (catch setelement(3, {a,b}, New)),
@@ -132,19 +134,19 @@ setelement_crash_2(Tuple, Bin) ->
t_length(Config) when is_list(Config) ->
Blurf = id({blurf,a,b}),
Tail = id([42,43,44,45]),
- ?line 0 = id(length([])),
- ?line 1 = id(length([x])),
- ?line 2 = id(length([x,Blurf])),
- ?line 4 = id(length([x,Blurf,a,b])),
+ 0 = id(length([])),
+ 1 = id(length([x])),
+ 2 = id(length([x,Blurf])),
+ 4 = id(length([x,Blurf,a,b])),
%% No or partial optimization.
- ?line 4 = length(Tail),
- ?line 5 = id(length([x|Tail])),
+ 4 = length(Tail),
+ 5 = id(length([x|Tail])),
%% Will fail.
- ?line {'EXIT',{badarg,_}} = (catch id(length([a,b|c]))),
- ?line {'EXIT',{badarg,_}} = (catch id(length([a,Blurf|c]))),
- ?line {'EXIT',{badarg,_}} = (catch id(length(atom))),
+ {'EXIT',{badarg,_}} = (catch id(length([a,b|c]))),
+ {'EXIT',{badarg,_}} = (catch id(length([a,Blurf|c]))),
+ {'EXIT',{badarg,_}} = (catch id(length(atom))),
ok.
@@ -156,34 +158,34 @@ t_length(Config) when is_list(Config) ->
append(Config) when is_list(Config) ->
A = id(0),
- ?line [a,b,c,d,e,f,g,h,i,j,k] = id(?APPEND([a,b,c,d,e,f],[g,h,i,j,k])),
- ?line [a,b,c,d,e] = id(?APPEND([a,b,c],id([d,e]))),
- ?line [0,1,2,3,4,5,6] = id(?APPEND([A,1,2,3],[4,5,6])),
- ?line {'EXIT',{badarg,_}} = (catch id(?APPEND([A|blurf],[4,5,6]))),
+ [a,b,c,d,e,f,g,h,i,j,k] = id(?APPEND([a,b,c,d,e,f],[g,h,i,j,k])),
+ [a,b,c,d,e] = id(?APPEND([a,b,c],id([d,e]))),
+ [0,1,2,3,4,5,6] = id(?APPEND([A,1,2,3],[4,5,6])),
+ {'EXIT',{badarg,_}} = (catch id(?APPEND([A|blurf],[4,5,6]))),
ok.
t_apply(Config) when is_list(Config) ->
- ?line ok = apply(?MODULE, foo, []),
- ?line 4 = apply(?MODULE, foo, [3]),
- ?line 7 = apply(?MODULE, foo, [3,4]),
- ?line 12 = apply(?MODULE, foo, [id(8),4]),
- ?line 21 = apply(?MODULE, foo, [8,id(9),4]),
- ?line 20 = apply(?MODULE, foo, [8,8,id(4)]),
- ?line 24 = apply(?MODULE, foo, [id(10),10,4]),
+ ok = apply(?MODULE, foo, []),
+ 4 = apply(?MODULE, foo, [3]),
+ 7 = apply(?MODULE, foo, [3,4]),
+ 12 = apply(?MODULE, foo, [id(8),4]),
+ 21 = apply(?MODULE, foo, [8,id(9),4]),
+ 20 = apply(?MODULE, foo, [8,8,id(4)]),
+ 24 = apply(?MODULE, foo, [id(10),10,4]),
M = id(?MODULE),
- ?line ok = apply(M, foo, []),
- ?line 4 = apply(M, foo, [3]),
- ?line 16.0 = apply(M, foo, [12.0,4]),
+ ok = apply(M, foo, []),
+ 4 = apply(M, foo, [3]),
+ 16.0 = apply(M, foo, [12.0,4]),
%% Will fail.
- ?line {'EXIT',{badarg,_}} = (catch apply([a,b,c], foo, [])),
- ?line {'EXIT',{badarg,_}} = (catch apply(42, foo, [])),
- ?line {'EXIT',{badarg,_}} = (catch apply(?MODULE, 45, [xx])),
- ?line {'EXIT',{badarg,_}} = (catch apply(?MODULE, foo, {a,b})),
- ?line {'EXIT',{badarg,_}} = (catch apply(M, M, [1009|10010])),
- ?line {'EXIT',{badarg,_}} = (catch apply(?MODULE, foo, [10000|9999])),
- ?line {'EXIT',{badarg,_}} = (catch apply(?MODULE, foo, a)),
+ {'EXIT',{badarg,_}} = (catch apply([a,b,c], foo, [])),
+ {'EXIT',{badarg,_}} = (catch apply(42, foo, [])),
+ {'EXIT',{badarg,_}} = (catch apply(?MODULE, 45, [xx])),
+ {'EXIT',{badarg,_}} = (catch apply(?MODULE, foo, {a,b})),
+ {'EXIT',{badarg,_}} = (catch apply(M, M, [1009|10010])),
+ {'EXIT',{badarg,_}} = (catch apply(?MODULE, foo, [10000|9999])),
+ {'EXIT',{badarg,_}} = (catch apply(?MODULE, foo, a)),
ok.
@@ -210,13 +212,13 @@ bifs(Config) when is_list(Config) ->
-define(CMP_DIFF(A0, B), (fun(A) -> false = A == B, true = A /= B end)(id(A0))).
eq(Config) when is_list(Config) ->
- ?line ?CMP_SAME([a,b,c], [a,b,c]),
- ?line ?CMP_SAME([42.0], [42.0]),
- ?line ?CMP_SAME([42], [42]),
- ?line ?CMP_SAME([42.0], [42]),
+ ?CMP_SAME([a,b,c], [a,b,c]),
+ ?CMP_SAME([42.0], [42.0]),
+ ?CMP_SAME([42], [42]),
+ ?CMP_SAME([42.0], [42]),
- ?line ?CMP_DIFF(a, [a]),
- ?line ?CMP_DIFF(a, {1,2,3}),
+ ?CMP_DIFF(a, [a]),
+ ?CMP_DIFF(a, {1,2,3}),
?CMP_SAME(#{a=>1.0,b=>2}, #{b=>2.0,a=>1}),
?CMP_SAME(#{a=>[1.0],b=>[2]}, #{b=>[2.0],a=>[1]}),
@@ -232,7 +234,7 @@ eq(Config) when is_list(Config) ->
%% OTP-7117.
nested_call_in_case(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = test_lib:get_data_dir(Config),
Core = filename:join(Dir, "nested_call_in_case"),
Opts = [from_core,{outdir,PrivDir}|test_lib:opt_opts(?MODULE)],
@@ -265,12 +267,12 @@ do_guard_try_catch(K, V) ->
-record(cover_opt_guard_try, {list=[]}).
coverage(Config) when is_list(Config) ->
- ?line {'EXIT',{{case_clause,{a,b,c}},_}} =
+ {'EXIT',{{case_clause,{a,b,c}},_}} =
(catch cover_will_match_list_type({a,b,c})),
- ?line {'EXIT',{{case_clause,{a,b,c,d}},_}} =
+ {'EXIT',{{case_clause,{a,b,c,d}},_}} =
(catch cover_will_match_list_type({a,b,c,d})),
- ?line a = cover_remove_non_vars_alias({a,b,c}),
- ?line error = cover_will_match_lit_list(),
+ a = cover_remove_non_vars_alias({a,b,c}),
+ error = cover_will_match_lit_list(),
{ok,[a]} = cover_is_safe_bool_expr(a),
ok = cover_opt_guard_try(#cover_opt_guard_try{list=[a]}),
@@ -347,7 +349,7 @@ bsm_an_inlined(<<_:8>>, _) -> ok;
bsm_an_inlined(_, _) -> error.
unused_multiple_values_error(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = test_lib:get_data_dir(Config),
Core = filename:join(Dir, "unused_multiple_values_error"),
Opts = [no_copt,clint,return,from_core,{outdir,PrivDir}
@@ -454,4 +456,47 @@ do_unnecessary_building_2({a,_,_}=T) ->
[_,_] = [T,none],
x}.
+%% This test tests that v3_core has provided annotations and that
+%% sys_core_fold retains them, so that warnings produced by
+%% sys_core_fold will have proper filenames and line numbers. Thus, no
+%% "no_file" warnings.
+no_no_file(_Config) ->
+ {'EXIT',{{case_clause,0},_}} = (catch source(true, any)),
+ surgery = (tim(#{reduction => any}))(),
+
+ false = soul(#{[] => true}),
+ {'EXIT',{{case_clause,true},_}} = (catch soul(#{[] => false})),
+
+ ok = experiment(),
+ ok.
+
+source(true, Activities) ->
+ case 0 of
+ Activities when [] ->
+ Activities
+ end.
+
+tim(#{reduction := Emergency}) ->
+ try
+ fun() -> surgery end
+ catch
+ _ when [] ->
+ planet
+ end.
+
+soul(#{[] := Properly}) ->
+ not case true of
+ Properly -> true;
+ Properly -> 0
+ end.
+
+experiment() ->
+ case kingdom of
+ _ ->
+ +case "map" of
+ _ -> 0.0
+ end
+ end,
+ ok.
+
id(I) -> I.
diff --git a/lib/compiler/test/error_SUITE.erl b/lib/compiler/test/error_SUITE.erl
index 2962e3ff77..01c779b181 100644
--- a/lib/compiler/test/error_SUITE.erl
+++ b/lib/compiler/test/error_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,7 +18,7 @@
%% %CopyrightEnd%
-module(error_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
@@ -65,7 +65,7 @@ bif_clashes(Config) when is_list(Config) ->
[return_warnings],
{error,
[{4, erl_lint,{call_to_redefined_old_bif,{length,1}}}], []} }],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
Ts1 = [{bif_clashes2,
<<"
-export([t/0]).
@@ -76,7 +76,7 @@ bif_clashes(Config) when is_list(Config) ->
[return_warnings],
{error,
[{3, erl_lint,{redefine_old_bif_import,{length,1}}}], []} }],
- ?line [] = run(Config, Ts1),
+ [] = run(Config, Ts1),
Ts00 = [{bif_clashes3,
<<"
-export([t/0]).
@@ -89,7 +89,7 @@ bif_clashes(Config) when is_list(Config) ->
">>,
[return_warnings],
[]}],
- ?line [] = run(Config, Ts00),
+ [] = run(Config, Ts00),
Ts11 = [{bif_clashes4,
<<"
-export([t/0]).
@@ -100,7 +100,7 @@ bif_clashes(Config) when is_list(Config) ->
">>,
[return_warnings],
[]}],
- ?line [] = run(Config, Ts11),
+ [] = run(Config, Ts11),
Ts000 = [{bif_clashes5,
<<"
-export([t/0]).
@@ -113,7 +113,7 @@ bif_clashes(Config) when is_list(Config) ->
[return_warnings],
{warning,
[{4, erl_lint,{call_to_redefined_bif,{binary_part,3}}}]} }],
- ?line [] = run(Config, Ts000),
+ [] = run(Config, Ts000),
Ts111 = [{bif_clashes6,
<<"
-export([t/0]).
@@ -124,7 +124,7 @@ bif_clashes(Config) when is_list(Config) ->
[return_warnings],
{warning,
[{3, erl_lint,{redefine_bif_import,{binary_part,3}}}]} }],
- ?line [] = run(Config, Ts111),
+ [] = run(Config, Ts111),
Ts2 = [{bif_clashes7,
<<"
-export([t/0]).
@@ -139,7 +139,7 @@ bif_clashes(Config) when is_list(Config) ->
{error,
[{7,erl_lint,{define_import,{length,1}}}],
[]} }],
- ?line [] = run2(Config, Ts2),
+ [] = run2(Config, Ts2),
Ts3 = [{bif_clashes8,
<<"
-export([t/1]).
@@ -153,7 +153,7 @@ bif_clashes(Config) when is_list(Config) ->
{error,
[{4,erl_lint,{illegal_guard_local_call,{length,1}}}],
[]} }],
- ?line [] = run2(Config, Ts3),
+ [] = run2(Config, Ts3),
Ts4 = [{bif_clashes9,
<<"
-export([t/1]).
@@ -166,7 +166,7 @@ bif_clashes(Config) when is_list(Config) ->
{error,
[{5,erl_lint,{illegal_guard_local_call,{length,1}}}],
[]} }],
- ?line [] = run2(Config, Ts4),
+ [] = run2(Config, Ts4),
ok.
@@ -175,23 +175,23 @@ bif_clashes(Config) when is_list(Config) ->
%% Tests that a head mismatch is reported on the correct line (OTP-2125).
head_mismatch_line(Config) when is_list(Config) ->
- ?line [E|_] = get_compilation_errors(Config, "head_mismatch_line"),
- ?line {26, Mod, Reason} = E,
- ?line Mod:format_error(Reason),
+ [E|_] = get_compilation_errors(Config, "head_mismatch_line"),
+ {26, Mod, Reason} = E,
+ Mod:format_error(Reason),
ok.
%% Compiles a test file and returns the list of errors.
get_compilation_errors(Config, Filename) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line File = filename:join(DataDir, Filename),
- ?line {error, [{_Name, E}|_], []} = compile:file(File, [return_errors]),
+ DataDir = proplists:get_value(data_dir, Config),
+ File = filename:join(DataDir, Filename),
+ {error, [{_Name, E}|_], []} = compile:file(File, [return_errors]),
E.
warnings_as_errors(Config) when is_list(Config) ->
- ?line TestFile = test_filename(Config),
- ?line BeamFile = filename:rootname(TestFile, ".erl") ++ ".beam",
- ?line OutDir = ?config(priv_dir, Config),
+ TestFile = test_filename(Config),
+ BeamFile = filename:rootname(TestFile, ".erl") ++ ".beam",
+ OutDir = proplists:get_value(priv_dir, Config),
Ts1 = [{warnings_as_errors,
<<"
@@ -203,8 +203,8 @@ warnings_as_errors(Config) when is_list(Config) ->
{error,
[],
[{3,erl_lint,{unused_var,'A'}}]} }],
- ?line [] = run(Ts1, TestFile, write_beam),
- ?line false = filelib:is_regular(BeamFile),
+ [] = run(Ts1, TestFile, write_beam),
+ false = filelib:is_regular(BeamFile),
Ts2 = [{warning_unused_var,
<<"
@@ -216,9 +216,9 @@ warnings_as_errors(Config) when is_list(Config) ->
{warning,
[{3,erl_lint,{unused_var,'A'}}]} }],
- ?line [] = run(Ts2, TestFile, write_beam),
- ?line true = filelib:is_regular(BeamFile),
- ?line ok = file:delete(BeamFile),
+ [] = run(Ts2, TestFile, write_beam),
+ true = filelib:is_regular(BeamFile),
+ ok = file:delete(BeamFile),
ok.
@@ -295,7 +295,7 @@ bad_utf8(Config) ->
run(Config, Tests) ->
- ?line File = test_filename(Config),
+ File = test_filename(Config),
run(Tests, File, dont_write_beam).
run(Tests, File, WriteBeam) ->
@@ -304,7 +304,7 @@ run(Tests, File, WriteBeam) ->
E ->
BadL;
Bad ->
- ?t:format("~nTest ~p failed. Expected~n ~p~n"
+ io:format("~nTest ~p failed. Expected~n ~p~n"
"but got~n ~p~n", [N, E, Bad]),
fail()
end
@@ -312,7 +312,7 @@ run(Tests, File, WriteBeam) ->
lists:foldl(F, [], Tests).
run2(Config, Tests) ->
- ?line File = test_filename(Config),
+ File = test_filename(Config),
run2(Tests, File, dont_write_beam).
run2(Tests, File, WriteBeam) ->
@@ -321,7 +321,7 @@ run2(Tests, File, WriteBeam) ->
E ->
BadL;
Bad ->
- ?t:format("~nTest ~p failed. Expected~n ~p~n"
+ io:format("~nTest ~p failed. Expected~n ~p~n"
"but got~n ~p~n", [N, E, Bad]),
fail()
end
@@ -338,56 +338,45 @@ filter(X) ->
test_filename(Conf) ->
Filename = ["errors_test_",test_lib:uniq(),".erl"],
- DataDir = ?config(priv_dir, Conf),
+ DataDir = proplists:get_value(priv_dir, Conf),
filename:join(DataDir, Filename).
run_test(Test0, File, Warnings, WriteBeam) ->
ModName = filename:rootname(filename:basename(File), ".erl"),
Mod = list_to_atom(ModName),
Test = ["-module(",ModName,"). ",Test0],
- ?line Opts = case WriteBeam of
- dont_write_beam ->
- [binary,return_errors|Warnings];
- write_beam ->
- [return_errors|Warnings]
- end,
- ?line ok = file:write_file(File, Test),
+ Opts = case WriteBeam of
+ dont_write_beam ->
+ [binary,return_errors|Warnings];
+ write_beam ->
+ [return_errors|Warnings]
+ end,
+ ok = file:write_file(File, Test),
%% Compile once just to print all errors and warnings.
- ?line compile:file(File, [binary,report|Warnings]),
+ compile:file(File, [binary,report|Warnings]),
%% Test result of compilation.
io:format("~p\n", [Opts]),
- ?line Res = case compile:file(File, Opts) of
- {ok,Mod,_,[{_File,Ws}]} ->
- %io:format("compile:file(~s,~p) ->~n~p~n",
- % [File,Opts,Ws]),
- {warning,Ws};
- {ok,Mod,_,[]} ->
- %io:format("compile:file(~s,~p) ->~n~p~n",
- % [File,Opts,Ws]),
- [];
- {ok,Mod,[{_File,Ws}]} ->
- {warning,Ws};
- {ok,Mod,[]} ->
- [];
- {error,[{XFile,Es}],Ws} = _ZZ when is_list(XFile) ->
- %io:format("compile:file(~s,~p) ->~n~p~n",
- % [File,Opts,_ZZ]),
- {error,Es,Ws};
- {error,[{XFile,Es1},{XFile,Es2}],Ws} = _ZZ
- when is_list(XFile) ->
- %io:format("compile:file(~s,~p) ->~n~p~n",
- % [File,Opts,_ZZ]),
- {error,Es1++Es2,Ws};
- {error,Es,[{_File,Ws}]} = _ZZ->
- %io:format("compile:file(~s,~p) ->~n~p~n",
- % [File,Opts,_ZZ]),
- {error,Es,Ws}
- end,
+ Res = case compile:file(File, Opts) of
+ {ok,Mod,_,[{_File,Ws}]} ->
+ {warning,Ws};
+ {ok,Mod,_,[]} ->
+ [];
+ {ok,Mod,[{_File,Ws}]} ->
+ {warning,Ws};
+ {ok,Mod,[]} ->
+ [];
+ {error,[{XFile,Es}],Ws} = _ZZ when is_list(XFile) ->
+ {error,Es,Ws};
+ {error,[{XFile,Es1},{XFile,Es2}],Ws} = _ZZ
+ when is_list(XFile) ->
+ {error,Es1++Es2,Ws};
+ {error,Es,[{_File,Ws}]} = _ZZ->
+ {error,Es,Ws}
+ end,
file:delete(File),
Res.
fail() ->
- io:format("failed~n"),
- ?t:fail().
+ ct:fail(failed).
diff --git a/lib/compiler/test/error_SUITE_data/head_mismatch_line.erl b/lib/compiler/test/error_SUITE_data/head_mismatch_line.erl
index 090f2fb829..5676d60daa 100644
--- a/lib/compiler/test/error_SUITE_data/head_mismatch_line.erl
+++ b/lib/compiler/test/error_SUITE_data/head_mismatch_line.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/float_SUITE.erl b/lib/compiler/test/float_SUITE.erl
index 1b313ad021..f6095947ca 100644
--- a/lib/compiler/test/float_SUITE.erl
+++ b/lib/compiler/test/float_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
init_per_group/2,end_per_group/2,
pending/1,bif_calls/1,math_functions/1,mixed_float_and_int/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -51,11 +51,11 @@ end_per_group(_GroupName, Config) ->
%% Shows the effect of pending exceptions on the x86.
pending(Config) when is_list(Config) ->
- ?line case catch float_mul(1, 1.1e300, 3.14e300) of
- {'EXIT',{badarith,_}} -> ok;
- Other -> ?t:fail({expected_exception,Other})
- end,
- ?line 0.0 = float_sub(2.0).
+ case catch float_mul(1, 1.1e300, 3.14e300) of
+ {'EXIT',{badarith,_}} -> ok;
+ Other -> ct:fail({expected_exception,Other})
+ end,
+ 0.0 = float_sub(2.0).
float_sub(A)->
catch A - 2.0.
@@ -69,11 +69,11 @@ float_mul(Iter, A, B) when is_float(A), is_float(B) ->
%% Thanks to Mikael Pettersson and Tobias Lindahl (HiPE).
bif_calls(Config) when is_list(Config) ->
- ?line {'EXIT',{badarith,_}} = (catch bad_arith(2.0, 1.7)),
- ?line {'EXIT',{badarith,_}} = (catch bad_arith_again(2.0, [])),
- ?line {'EXIT',{badarith,_}} = (catch bad_arith_xor(2.0, [])),
- ?line {'EXIT',{badarith,_}} = (catch bad_arith_hd(2.0, [])),
- ?line {'EXIT',{badarith,_}} = (catch bad_negate(2.0, 1.7)),
+ {'EXIT',{badarith,_}} = (catch bad_arith(2.0, 1.7)),
+ {'EXIT',{badarith,_}} = (catch bad_arith_again(2.0, [])),
+ {'EXIT',{badarith,_}} = (catch bad_arith_xor(2.0, [])),
+ {'EXIT',{badarith,_}} = (catch bad_arith_hd(2.0, [])),
+ {'EXIT',{badarith,_}} = (catch bad_negate(2.0, 1.7)),
ok.
bad_arith(X, Y) when is_float(X) ->
@@ -114,51 +114,51 @@ bad_negate(X, Y) when is_float(X) ->
math_functions(Config) when is_list(Config) ->
%% Mostly silly coverage.
- ?line 0.0 = math:tan(0),
- ?line 0.0 = math:atan2(0, 1),
- ?line 0.0 = math:sinh(0),
- ?line 1.0 = math:cosh(0),
- ?line 0.0 = math:tanh(0),
+ 0.0 = math:tan(0),
+ 0.0 = math:atan2(0, 1),
+ 0.0 = math:sinh(0),
+ 1.0 = math:cosh(0),
+ 0.0 = math:tanh(0),
1.0 = math:log2(2),
- ?line 1.0 = math:log10(10),
- ?line -1.0 = math:cos(math:pi()),
- ?line 1.0 = math:exp(0),
- ?line 1.0 = math:pow(math:pi(), 0),
- ?line 0.0 = math:log(1),
- ?line 0.0 = math:asin(0),
- ?line 0.0 = math:acos(1),
- ?line ?OPTIONAL(0.0, math:asinh(0)),
- ?line ?OPTIONAL(0.0, math:acosh(1)),
- ?line ?OPTIONAL(0.0, math:atanh(0)),
- ?line ?OPTIONAL(0.0, math:erf(0)),
- ?line ?OPTIONAL(1.0, math:erfc(0)),
-
- ?line 0.0 = math:tan(id(0)),
- ?line 0.0 = math:atan2(id(0), 1),
- ?line 0.0 = math:sinh(id(0)),
- ?line 1.0 = math:cosh(id(0)),
- ?line 0.0 = math:tanh(id(0)),
+ 1.0 = math:log10(10),
+ -1.0 = math:cos(math:pi()),
+ 1.0 = math:exp(0),
+ 1.0 = math:pow(math:pi(), 0),
+ 0.0 = math:log(1),
+ 0.0 = math:asin(0),
+ 0.0 = math:acos(1),
+ ?OPTIONAL(0.0, math:asinh(0)),
+ ?OPTIONAL(0.0, math:acosh(1)),
+ ?OPTIONAL(0.0, math:atanh(0)),
+ ?OPTIONAL(0.0, math:erf(0)),
+ ?OPTIONAL(1.0, math:erfc(0)),
+
+ 0.0 = math:tan(id(0)),
+ 0.0 = math:atan2(id(0), 1),
+ 0.0 = math:sinh(id(0)),
+ 1.0 = math:cosh(id(0)),
+ 0.0 = math:tanh(id(0)),
1.0 = math:log2(id(2)),
- ?line 1.0 = math:log10(id(10)),
- ?line 1.0 = math:exp(id(0)),
- ?line 0.0 = math:log(id(1)),
- ?line 0.0 = math:asin(id(0)),
- ?line 0.0 = math:acos(id(1)),
- ?line ?OPTIONAL(0.0, math:asinh(id(0))),
- ?line ?OPTIONAL(0.0, math:acosh(id(1))),
- ?line ?OPTIONAL(0.0, math:atanh(id(0))),
- ?line ?OPTIONAL(0.0, math:erf(id(0))),
- ?line ?OPTIONAL(1.0, math:erfc(id(0))),
+ 1.0 = math:log10(id(10)),
+ 1.0 = math:exp(id(0)),
+ 0.0 = math:log(id(1)),
+ 0.0 = math:asin(id(0)),
+ 0.0 = math:acos(id(1)),
+ ?OPTIONAL(0.0, math:asinh(id(0))),
+ ?OPTIONAL(0.0, math:acosh(id(1))),
+ ?OPTIONAL(0.0, math:atanh(id(0))),
+ ?OPTIONAL(0.0, math:erf(id(0))),
+ ?OPTIONAL(1.0, math:erfc(id(0))),
%% Only for coverage (of beam_type.erl).
- ?line {'EXIT',{undef,_}} = (catch math:fnurfla(0)),
- ?line {'EXIT',{undef,_}} = (catch math:fnurfla(0, 0)),
- ?line {'EXIT',{badarg,_}} = (catch float(kalle)),
- ?line {'EXIT',{badarith,_}} = (catch name/1),
+ {'EXIT',{undef,_}} = (catch math:fnurfla(0)),
+ {'EXIT',{undef,_}} = (catch math:fnurfla(0, 0)),
+ {'EXIT',{badarg,_}} = (catch float(kalle)),
+ {'EXIT',{badarith,_}} = (catch name/1),
ok.
mixed_float_and_int(Config) when is_list(Config) ->
- ?line 129.0 = pc(77, 23, 5),
+ 129.0 = pc(77, 23, 5),
ok.
pc(Cov, NotCov, X) ->
diff --git a/lib/compiler/test/fun_SUITE.erl b/lib/compiler/test/fun_SUITE.erl
index 36a4d6fce2..16474adf5b 100644
--- a/lib/compiler/test/fun_SUITE.erl
+++ b/lib/compiler/test/fun_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,21 +22,23 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
test1/1,overwritten_fun/1,otp_7202/1,bif_fun/1,
- external/1,eep37/1,eep37_dup/1,badarity/1]).
+ external/1,eep37/1,eep37_dup/1,badarity/1,badfun/1]).
%% Internal exports.
-export([call_me/1,dup1/0,dup2/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
test_lib:recompile(?MODULE),
- [test1,overwritten_fun,otp_7202,bif_fun,external,eep37,eep37_dup,badarity].
+ [{group,p}].
-groups() ->
- [].
+groups() ->
+ [{p,[parallel],
+ [test1,overwritten_fun,otp_7202,bif_fun,external,eep37,
+ eep37_dup,badarity,badfun]}].
init_per_suite(Config) ->
Config.
@@ -60,9 +62,8 @@ l1() ->
?T((begin G = fun(1=0) -> ok end, {'EXIT',_} = (catch G(2)), ok end), ok)
].
-test1(suite) -> [];
test1(Config) when is_list(Config) ->
- ?line lists:foreach(fun one_test/1, eval_list(l1(), [])),
+ lists:foreach(fun one_test/1, eval_list(l1(), [])),
ok.
evaluate(Str, Vars) ->
@@ -93,7 +94,7 @@ one_test({C, E, Str, Correct}) ->
true ->
io:format("ERROR: Compiled: ~p. Expected ~p. Got ~p.~n",
[Str, Correct, C]),
- test_server:fail(comp)
+ ct:fail(comp)
end,
if
E == Correct ->
@@ -101,7 +102,7 @@ one_test({C, E, Str, Correct}) ->
true ->
io:format("ERROR: Interpreted: ~p. Expected ~p. Got ~p.~n",
[Str, Correct, E]),
- test_server:fail(comp)
+ ct:fail(comp)
end.
-record(b, {c}).
@@ -109,9 +110,9 @@ one_test({C, E, Str, Correct}) ->
%% OTP-7102. (Thanks to Simon Cornish.)
overwritten_fun(Config) when is_list(Config) ->
- ?line {a2,a} = overwritten_fun_1(a),
- ?line {a2,{b,c}} = overwritten_fun_1(#b{c=c}),
- ?line one = overwritten_fun_1(#b{c=[]}),
+ {a2,a} = overwritten_fun_1(a),
+ {a2,{b,c}} = overwritten_fun_1(#b{c=c}),
+ one = overwritten_fun_1(#b{c=[]}),
ok.
overwritten_fun_1(A) ->
@@ -153,8 +154,8 @@ otp_7202_func() ->
no_value.
bif_fun(Config) when is_list(Config) ->
- ?line F = fun abs/1,
- ?line 5 = F(-5),
+ F = fun abs/1,
+ 5 = F(-5),
ok.
-define(APPLY(M, F, A), (fun(Fun) -> {ok,{a,b}} = Fun({a,b}) end)(fun M:F/A)).
@@ -222,5 +223,25 @@ badarity(Config) when is_list(Config) ->
{'EXIT',{{badarity,{_,[]}},_}} = (catch (fun badarity/1)()),
ok.
+badfun(_Config) ->
+ X = not_a_fun,
+ expect_badfun(42, catch 42()),
+ expect_badfun(42.0, catch 42.0(1)),
+ expect_badfun(X, catch X()),
+ expect_badfun(X, catch X(1)),
+ Len = length(atom_to_list(X)),
+ expect_badfun(Len, catch begin length(atom_to_list(X)) end(1)),
+
+ expect_badfun(42, catch 42(put(?FUNCTION_NAME, yes))),
+ yes = erase(?FUNCTION_NAME),
+
+ expect_badfun(X, catch X(put(?FUNCTION_NAME, of_course))),
+ of_course = erase(?FUNCTION_NAME),
+
+ ok.
+
+expect_badfun(Term, Exit) ->
+ {'EXIT',{{badfun,Term},_}} = Exit.
+
id(I) ->
I.
diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl
index 47eb1ba78b..6302f82f29 100644
--- a/lib/compiler/test/guard_SUITE.erl
+++ b/lib/compiler/test/guard_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(guard_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
@@ -28,13 +28,13 @@
or_guard/1,more_or_guards/1,
complex_or_guards/1,and_guard/1,
xor_guard/1,more_xor_guards/1,
- old_guard_tests/1,
+ old_guard_tests/1,complex_guard/1,
build_in_guard/1,gbif/1,
t_is_boolean/1,is_function_2/1,
tricky/1,rel_ops/1,rel_op_combinations/1,literal_type_tests/1,
basic_andalso_orelse/1,traverse_dcd/1,
check_qlc_hrl/1,andalso_semi/1,t_tuple_size/1,binary_part/1,
- bad_constants/1,bad_guards/1,scotland/1,
+ bad_constants/1,bad_guards/1,
guard_in_catch/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -48,12 +48,13 @@ groups() ->
[misc,const_cond,basic_not,complex_not,nested_nots,
semicolon,complex_semicolon,comma,or_guard,
more_or_guards,complex_or_guards,and_guard,xor_guard,
- more_xor_guards,build_in_guard,old_guard_tests,gbif,
+ more_xor_guards,build_in_guard,
+ old_guard_tests,complex_guard,gbif,
t_is_boolean,is_function_2,tricky,
rel_ops,rel_op_combinations,
literal_type_tests,basic_andalso_orelse,traverse_dcd,
check_qlc_hrl,andalso_semi,t_tuple_size,binary_part,
- bad_constants,bad_guards,scotland,guard_in_catch]}].
+ bad_constants,bad_guards,guard_in_catch]}].
init_per_suite(Config) ->
Config.
@@ -69,23 +70,23 @@ end_per_group(_GroupName, Config) ->
misc(Config) when is_list(Config) ->
- ?line 42 = case id(42) of
- X when -X -> ok;
- X -> X
- end,
- ?line {a,b,c} = misc_1([{{a,b,c}},{[4]},{[3]},{-2}]),
- ?line none = misc_1([{{a,b,c}},{[4]},{[3]},{-3}]),
- ?line none = misc_1([{{a,b,c}},{[4]},{[7]},{-2}]),
- ?line none = misc_1([{{a,b,c}},{[4]},{[3]},{[1,2,3]}]),
-
- ?line {ok,buf,<<>>} = get_data({o,true,raw}, 0, buf),
- ?line {ok,buf,<<>>} = get_data({o,true,raw}, 42, buf),
- ?line {ok,buf,<<>>} = get_data({o,false,raw}, 0, buf),
- ?line error = get_data({o,false,raw}, 42, buf),
- ?line {ok,buf,<<>>} = get_data({o,true,0}, 0, buf),
- ?line {ok,buf,<<>>} = get_data({o,true,0}, 42, buf),
- ?line {ok,buf,<<>>} = get_data({o,false,0}, 0, buf),
- ?line error = get_data({o,false,0}, 42, buf),
+ 42 = case id(42) of
+ X when -X -> ok;
+ X -> X
+ end,
+ {a,b,c} = misc_1([{{a,b,c}},{[4]},{[3]},{-2}]),
+ none = misc_1([{{a,b,c}},{[4]},{[3]},{-3}]),
+ none = misc_1([{{a,b,c}},{[4]},{[7]},{-2}]),
+ none = misc_1([{{a,b,c}},{[4]},{[3]},{[1,2,3]}]),
+
+ {ok,buf,<<>>} = get_data({o,true,raw}, 0, buf),
+ {ok,buf,<<>>} = get_data({o,true,raw}, 42, buf),
+ {ok,buf,<<>>} = get_data({o,false,raw}, 0, buf),
+ error = get_data({o,false,raw}, 42, buf),
+ {ok,buf,<<>>} = get_data({o,true,0}, 0, buf),
+ {ok,buf,<<>>} = get_data({o,true,0}, 42, buf),
+ {ok,buf,<<>>} = get_data({o,false,0}, 0, buf),
+ error = get_data({o,false,0}, 42, buf),
ok.
@@ -107,11 +108,11 @@ get_data({o,Active,Raw}, BytesToRead, Buffer)
end.
const_cond(Config) when is_list(Config) ->
- ?line ok = const_cond({}, 0),
- ?line ok = const_cond({a}, 1),
- ?line error = const_cond({a,b}, 3),
- ?line error = const_cond({a}, 0),
- ?line error = const_cond({a,b}, 1),
+ ok = const_cond({}, 0),
+ ok = const_cond({a}, 1),
+ error = const_cond({a,b}, 3),
+ error = const_cond({a}, 0),
+ error = const_cond({a,b}, 1),
ok.
const_cond(T, Sz) ->
@@ -132,80 +133,80 @@ basic_not(Config) when is_list(Config) ->
D = id(5),
ATuple = {False,True,Glurf},
- ?line check(fun() -> if not false -> ok; true -> error end end, ok),
- ?line check(fun() -> if not true -> ok; true -> error end end, error),
- ?line check(fun() -> if not False -> ok; true -> error end end, ok),
- ?line check(fun() -> if not True -> ok; true -> error end end, error),
+ check(fun() -> if not false -> ok; true -> error end end, ok),
+ check(fun() -> if not true -> ok; true -> error end end, error),
+ check(fun() -> if not False -> ok; true -> error end end, ok),
+ check(fun() -> if not True -> ok; true -> error end end, error),
- ?line check(fun() -> if A > B -> gt; A < B -> lt; A == B -> eq end end, lt),
- ?line check(fun() -> if A > C -> gt; A < C -> lt; A == C -> eq end end, gt),
- ?line check(fun() -> if A > D -> gt; A < D -> lt; A == D -> eq end end, eq),
+ check(fun() -> if A > B -> gt; A < B -> lt; A == B -> eq end end, lt),
+ check(fun() -> if A > C -> gt; A < C -> lt; A == C -> eq end end, gt),
+ check(fun() -> if A > D -> gt; A < D -> lt; A == D -> eq end end, eq),
- ?line check(fun() -> if not (7 > 453) -> le; not (7 < 453) -> ge;
- not (7 == 453) -> ne; true -> eq end end, le),
- ?line check(fun() -> if not (7 > -8) -> le; not (7 < -8) -> ge;
- not (7 == -8) -> ne; true -> eq end end, ge),
- ?line check(fun() -> if not (7 > 7) -> le; not (7 < 7) -> ge;
- not (7 == 7) -> ne; true -> eq end end, le),
+ check(fun() -> if not (7 > 453) -> le; not (7 < 453) -> ge;
+ not (7 == 453) -> ne; true -> eq end end, le),
+ check(fun() -> if not (7 > -8) -> le; not (7 < -8) -> ge;
+ not (7 == -8) -> ne; true -> eq end end, ge),
+ check(fun() -> if not (7 > 7) -> le; not (7 < 7) -> ge;
+ not (7 == 7) -> ne; true -> eq end end, le),
- ?line check(fun() -> if not (A > B) -> le; not (A < B) -> ge;
- not (A == B) -> ne; true -> eq end end, le),
- ?line check(fun() -> if not (A > C) -> le; not (A < C) -> ge;
- not (A == C) -> ne; true -> eq end end, ge),
- ?line check(fun() -> if not (A > D) -> le; not (A < D) -> ge;
- not (A == D) -> ne; true -> eq end end, le),
+ check(fun() -> if not (A > B) -> le; not (A < B) -> ge;
+ not (A == B) -> ne; true -> eq end end, le),
+ check(fun() -> if not (A > C) -> le; not (A < C) -> ge;
+ not (A == C) -> ne; true -> eq end end, ge),
+ check(fun() -> if not (A > D) -> le; not (A < D) -> ge;
+ not (A == D) -> ne; true -> eq end end, le),
- ?line check(fun() -> if not element(1, ATuple) -> ok; true -> error end end, ok),
- ?line check(fun() -> if not element(2, ATuple) -> ok; true -> error end end, error),
- ?line check(fun() -> if not element(3, ATuple) -> ok; true -> error end end, error),
+ check(fun() -> if not element(1, ATuple) -> ok; true -> error end end, ok),
+ check(fun() -> if not element(2, ATuple) -> ok; true -> error end end, error),
+ check(fun() -> if not element(3, ATuple) -> ok; true -> error end end, error),
- ?line check(fun() -> if not glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if not Glurf -> ok; true -> error end end, error),
+ check(fun() -> if not glurf -> ok; true -> error end end, error),
+ check(fun() -> if not Glurf -> ok; true -> error end end, error),
ok.
complex_not(Config) when is_list(Config) ->
ATuple = id({false,true,gurka}),
- ?line check(fun() -> if not(element(1, ATuple)) -> ok; true -> error end end, ok),
- ?line check(fun() -> if not(element(2, ATuple)) -> ok; true -> error end end, error),
+ check(fun() -> if not(element(1, ATuple)) -> ok; true -> error end end, ok),
+ check(fun() -> if not(element(2, ATuple)) -> ok; true -> error end end, error),
- ?line check(fun() -> if not(element(3, ATuple) == gurka) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if not(element(3, ATuple) =/= gurka) -> ok;
- true -> error end end, ok),
+ check(fun() -> if not(element(3, ATuple) == gurka) -> ok;
+ true -> error end end, error),
+ check(fun() -> if not(element(3, ATuple) =/= gurka) -> ok;
+ true -> error end end, ok),
- ?line check(fun() -> if {a,not(element(2, ATuple))} == {a,false} -> ok;
- true -> error end end, ok),
- ?line check(fun() -> if {a,not(element(1, ATuple))} == {a,false} -> ok;
- true -> error end end, error),
+ check(fun() -> if {a,not(element(2, ATuple))} == {a,false} -> ok;
+ true -> error end end, ok),
+ check(fun() -> if {a,not(element(1, ATuple))} == {a,false} -> ok;
+ true -> error end end, error),
- ?line check(fun() -> if not(element(1, ATuple) or element(3, ATuple)) -> ok;
- true -> error end end, error),
+ check(fun() -> if not(element(1, ATuple) or element(3, ATuple)) -> ok;
+ true -> error end end, error),
%% orelse
- ?line check(fun() -> if not(element(1, ATuple) orelse element(3, ATuple)) -> ok;
- true -> error end end, error),
+ check(fun() -> if not(element(1, ATuple) orelse element(3, ATuple)) -> ok;
+ true -> error end end, error),
ok.
nested_nots(Config) when is_list(Config) ->
- ?line true = nested_not_1(0, 0),
- ?line true = nested_not_1(0, 1),
- ?line true = nested_not_1(a, b),
- ?line true = nested_not_1(10, 0),
- ?line false = nested_not_1(z, a),
- ?line false = nested_not_1(3.4, {anything,goes}),
- ?line false = nested_not_1(3.4, atom),
- ?line true = nested_not_1(3.0, [list]),
-
- ?line true = nested_not_2(false, false, 42),
- ?line true = nested_not_2(false, true, 42),
- ?line true = nested_not_2(true, false, 42),
- ?line true = nested_not_2(true, true, 42),
- ?line true = nested_not_2(false, false, atom),
- ?line false = nested_not_2(false, true, atom),
- ?line false = nested_not_2(true, false, atom),
- ?line false = nested_not_2(true, true, atom),
+ true = nested_not_1(0, 0),
+ true = nested_not_1(0, 1),
+ true = nested_not_1(a, b),
+ true = nested_not_1(10, 0),
+ false = nested_not_1(z, a),
+ false = nested_not_1(3.4, {anything,goes}),
+ false = nested_not_1(3.4, atom),
+ true = nested_not_1(3.0, [list]),
+
+ true = nested_not_2(false, false, 42),
+ true = nested_not_2(false, true, 42),
+ true = nested_not_2(true, false, 42),
+ true = nested_not_2(true, true, 42),
+ true = nested_not_2(false, false, atom),
+ false = nested_not_2(false, true, atom),
+ false = nested_not_2(true, false, atom),
+ false = nested_not_2(true, true, atom),
ok.
nested_not_1(X, Y) when not (((X>Y) or not(is_atom(X))) and
@@ -227,112 +228,112 @@ semicolon(Config) when is_list(Config) ->
%% True/false combined using ';' (literal atoms).
- ?line check(fun() -> if true; false -> ok end end, ok),
- ?line check(fun() -> if false; true -> ok end end, ok),
- ?line check(fun() -> if true; true -> ok end end, ok),
- ?line check(fun() -> if false; false -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if false; false -> ok end),
- exit
- end, exit),
+ check(fun() -> if true; false -> ok end end, ok),
+ check(fun() -> if false; true -> ok end end, ok),
+ check(fun() -> if true; true -> ok end end, ok),
+ check(fun() -> if false; false -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if false; false -> ok end),
+ exit
+ end, exit),
%% True/false combined used ';'.
True = id(true),
False = id(false),
- ?line check(fun() -> if True; False -> ok end end, ok),
- ?line check(fun() -> if False; True -> ok end end, ok),
- ?line check(fun() -> if True; True -> ok end end, ok),
- ?line check(fun() -> if False; False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if False; False -> ok end),
- exit
- end, exit),
+ check(fun() -> if True; False -> ok end end, ok),
+ check(fun() -> if False; True -> ok end end, ok),
+ check(fun() -> if True; True -> ok end end, ok),
+ check(fun() -> if False; False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if False; False -> ok end),
+ exit
+ end, exit),
%% Combine true/false with a non-boolean value.
Glurf = id(glurf),
- ?line check(fun() -> if True; Glurf -> ok end end, ok),
- ?line check(fun() -> if Glurf; True -> ok end end, ok),
- ?line check(fun() -> if Glurf; Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if False; Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf; False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if Glurf; Glurf -> ok end),
- exit
- end, exit),
+ check(fun() -> if True; Glurf -> ok end end, ok),
+ check(fun() -> if Glurf; True -> ok end end, ok),
+ check(fun() -> if Glurf; Glurf -> ok; true -> error end end, error),
+ check(fun() -> if False; Glurf -> ok; true -> error end end, error),
+ check(fun() -> if Glurf; False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if Glurf; Glurf -> ok end),
+ exit
+ end, exit),
%% Combine true/false with errors.
ATuple = id({false,true,gurka}),
- ?line check(fun() -> if True; element(42, ATuple) -> ok end end, ok),
- ?line check(fun() -> if element(42, ATuple); True -> ok end end, ok),
- ?line check(fun() -> if element(42, ATuple); element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if False; element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if element(42, ATuple);
- False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if element(42, ATuple);
- element(42, ATuple) -> ok end),
- exit
- end, exit),
+ check(fun() -> if True; element(42, ATuple) -> ok end end, ok),
+ check(fun() -> if element(42, ATuple); True -> ok end end, ok),
+ check(fun() -> if element(42, ATuple); element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() -> if False; element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() -> if element(42, ATuple);
+ False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if element(42, ATuple);
+ element(42, ATuple) -> ok end),
+ exit
+ end, exit),
ok.
complex_semicolon(Config) when is_list(Config) ->
- ?line ok = csemi1(int, {blurf}),
- ?line ok = csemi1(string, {blurf}),
- ?line ok = csemi1(float, [a]),
- ?line error = csemi1(35, 42),
+ ok = csemi1(int, {blurf}),
+ ok = csemi1(string, {blurf}),
+ ok = csemi1(float, [a]),
+ error = csemi1(35, 42),
%% 2
- ?line ok = csemi2({}, {a,b,c}),
- ?line ok = csemi2({1,3.5}, {a,b,c}),
- ?line ok = csemi2(dum, {a,b,c}),
+ ok = csemi2({}, {a,b,c}),
+ ok = csemi2({1,3.5}, {a,b,c}),
+ ok = csemi2(dum, {a,b,c}),
- ?line ok = csemi2({45,-19.3}, {}),
- ?line ok = csemi2({45,-19.3}, {dum}),
- ?line ok = csemi2({45,-19.3}, {dum,dum}),
+ ok = csemi2({45,-19.3}, {}),
+ ok = csemi2({45,-19.3}, {dum}),
+ ok = csemi2({45,-19.3}, {dum,dum}),
- ?line error = csemi2({45}, {dum}),
- ?line error = csemi2([], {dum}),
- ?line error = csemi2({dum}, []),
- ?line error = csemi2([], []),
+ error = csemi2({45}, {dum}),
+ error = csemi2([], {dum}),
+ error = csemi2({dum}, []),
+ error = csemi2([], []),
%% 3
- ?line csemi3(fun csemi3a/4),
- ?line csemi3(fun csemi3b/4),
- ?line csemi3(fun csemi3c/4),
+ csemi3(fun csemi3a/4),
+ csemi3(fun csemi3b/4),
+ csemi3(fun csemi3c/4),
%% 4
- ?line csemi4(fun csemi4a/4),
- ?line csemi4(fun csemi4b/4),
- ?line csemi4(fun csemi4c/4),
- ?line csemi4(fun csemi4d/4),
+ csemi4(fun csemi4a/4),
+ csemi4(fun csemi4b/4),
+ csemi4(fun csemi4c/4),
+ csemi4(fun csemi4d/4),
%% 4, 'orelse' instead of 'or'
- ?line csemi4_orelse(fun csemi4_orelse_a/4),
- ?line csemi4_orelse(fun csemi4_orelse_b/4),
- ?line csemi4_orelse(fun csemi4_orelse_c/4),
- ?line csemi4_orelse(fun csemi4_orelse_d/4),
+ csemi4_orelse(fun csemi4_orelse_a/4),
+ csemi4_orelse(fun csemi4_orelse_b/4),
+ csemi4_orelse(fun csemi4_orelse_c/4),
+ csemi4_orelse(fun csemi4_orelse_d/4),
%% 5
- ?line error = csemi5(0, 0),
- ?line ok = csemi5(5, 0),
- ?line ok = csemi5(4, -4),
- ?line ok = csemi5(10, -4),
+ error = csemi5(0, 0),
+ ok = csemi5(5, 0),
+ ok = csemi5(4, -4),
+ ok = csemi5(10, -4),
%% 6
- ?line error = csemi6({a}, 0),
- ?line ok = csemi6({a,b}, 0),
- ?line ok = csemi6({}, 3),
- ?line ok = csemi6({a,b,c}, 3),
+ error = csemi6({a}, 0),
+ ok = csemi6({a,b}, 0),
+ ok = csemi6({}, 3),
+ ok = csemi6({a,b,c}, 3),
%% 7
error = csemi7(#{a=>1}, 1, 0),
@@ -427,7 +428,7 @@ csemi4_orelse(Test) ->
ok = Test({}, 2, blurf, 0),
ok = Test({}, 2, {1}, 2),
- ?line error = Test([], 1, {}, 0),
+ error = Test([], 1, {}, 0),
ok.
@@ -460,72 +461,72 @@ comma(Config) when is_list(Config) ->
%% ',' combinations of literal true/false.
- ?line check(fun() -> if true, false -> ok; true -> error end end, error),
- ?line check(fun() -> if false, true -> ok; true -> error end end, error),
- ?line check(fun() -> if true, true -> ok end end, ok),
- ?line check(fun() -> if false, false -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if true, false -> ok;
- false, true -> ok;
- false, false -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if true, false -> ok; true -> error end end, error),
+ check(fun() -> if false, true -> ok; true -> error end end, error),
+ check(fun() -> if true, true -> ok end end, ok),
+ check(fun() -> if false, false -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if true, false -> ok;
+ false, true -> ok;
+ false, false -> ok
+ end),
+ exit
+ end, exit),
%% ',' combinations of true/false in variables.
True = id(true),
False = id(false),
- ?line check(fun() -> if True, False -> ok; true -> error end end, error),
- ?line check(fun() -> if False, True -> ok; true -> error end end, error),
- ?line check(fun() -> if True, True -> ok end end, ok),
- ?line check(fun() -> if False, False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True, False -> ok;
- False, True -> ok;
- False, False -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True, False -> ok; true -> error end end, error),
+ check(fun() -> if False, True -> ok; true -> error end end, error),
+ check(fun() -> if True, True -> ok end end, ok),
+ check(fun() -> if False, False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True, False -> ok;
+ False, True -> ok;
+ False, False -> ok
+ end),
+ exit
+ end, exit),
%% ',' combinations of true/false, and non-boolean in variables.
Glurf = id(glurf),
- ?line check(fun() -> if True, Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf, True -> ok; true -> error end end, error),
- ?line check(fun() -> if True, True -> ok end end, ok),
- ?line check(fun() -> if Glurf, Glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True, Glurf -> ok;
- Glurf, True -> ok;
- Glurf, Glurf -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True, Glurf -> ok; true -> error end end, error),
+ check(fun() -> if Glurf, True -> ok; true -> error end end, error),
+ check(fun() -> if True, True -> ok end end, ok),
+ check(fun() -> if Glurf, Glurf -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True, Glurf -> ok;
+ Glurf, True -> ok;
+ Glurf, Glurf -> ok
+ end),
+ exit
+ end, exit),
%% ',' combinations of true/false with errors.
ATuple = id({a,b,c}),
- ?line check(fun() -> if True, element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if element(42, ATuple), True -> ok;
- true -> error end end, error),
- ?line check(fun() -> if True, True -> ok end end, ok),
- ?line check(fun() -> if element(42, ATuple), element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True, element(42, ATuple) -> ok;
- element(42, ATuple), True -> ok;
- element(42, ATuple), element(42, ATuple) -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True, element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() -> if element(42, ATuple), True -> ok;
+ true -> error end end, error),
+ check(fun() -> if True, True -> ok end end, ok),
+ check(fun() -> if element(42, ATuple), element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True, element(42, ATuple) -> ok;
+ element(42, ATuple), True -> ok;
+ element(42, ATuple), element(42, ATuple) -> ok
+ end),
+ exit
+ end, exit),
ok.
@@ -535,35 +536,35 @@ or_guard(Config) when is_list(Config) ->
Glurf = id(glurf),
%% 'or' combinations of literal true/false.
- ?line check(fun() -> if true or false -> ok end end, ok),
- ?line check(fun() -> if false or true -> ok end end, ok),
- ?line check(fun() -> if true or true -> ok end end, ok),
- ?line check(fun() -> if false or false -> ok; true -> error end end, error),
+ check(fun() -> if true or false -> ok end end, ok),
+ check(fun() -> if false or true -> ok end end, ok),
+ check(fun() -> if true or true -> ok end end, ok),
+ check(fun() -> if false or false -> ok; true -> error end end, error),
- ?line check(fun() -> if glurf or true -> ok; true -> error end end, error),
- ?line check(fun() -> if true or glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if glurf or glurf -> ok; true -> error end end, error),
+ check(fun() -> if glurf or true -> ok; true -> error end end, error),
+ check(fun() -> if true or glurf -> ok; true -> error end end, error),
+ check(fun() -> if glurf or glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if false or false -> ok end),
- exit
- end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if false or false -> ok end),
+ exit
+ end, exit),
%% 'or' combinations using variables containing true/false.
- ?line check(fun() -> if True or False -> ok end end, ok),
- ?line check(fun() -> if False or True -> ok end end, ok),
- ?line check(fun() -> if True or True -> ok end end, ok),
- ?line check(fun() -> if False or False -> ok; true -> error end end, error),
+ check(fun() -> if True or False -> ok end end, ok),
+ check(fun() -> if False or True -> ok end end, ok),
+ check(fun() -> if True or True -> ok end end, ok),
+ check(fun() -> if False or False -> ok; true -> error end end, error),
- ?line check(fun() -> if True or Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf or True -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf or Glurf -> ok; true -> error end end, error),
+ check(fun() -> if True or Glurf -> ok; true -> error end end, error),
+ check(fun() -> if Glurf or True -> ok; true -> error end end, error),
+ check(fun() -> if Glurf or Glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if False or False -> ok end),
- exit
- end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if False or False -> ok end),
+ exit
+ end, exit),
ok.
@@ -572,142 +573,142 @@ more_or_guards(Config) when is_list(Config) ->
False = id(false),
ATuple = id({false,true,gurka}),
- ?line check(fun() ->
- if element(42, ATuple) or False -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if False or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(18, ATuple) or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if True or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(42, ATuple) or True -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(1, ATuple) or element(42, ATuple) or True -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(1, ATuple) or True or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if
- (<<False:8>> == <<0>>) or element(2, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if
- element(2, ATuple) or (<<True:8>> == <<1>>) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(2, ATuple) or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if
- element(1, ATuple) or
- element(2, ATuple) or
- element(19, ATuple) -> ok;
- true -> error end
- end, error),
+ check(fun() ->
+ if element(42, ATuple) or False -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if False or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(18, ATuple) or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if True or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(42, ATuple) or True -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(1, ATuple) or element(42, ATuple) or True -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(1, ATuple) or True or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if
+ (<<False:8>> == <<0>>) or element(2, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if
+ element(2, ATuple) or (<<True:8>> == <<1>>) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(2, ATuple) or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if
+ element(1, ATuple) or
+ element(2, ATuple) or
+ element(19, ATuple) -> ok;
+ true -> error end
+ end, error),
ok.
complex_or_guards(Config) when is_list(Config) ->
%% complex_or_1/2
- ?line ok = complex_or_1({a,b,c,d}, {1,2,3}),
- ?line ok = complex_or_1({a,b,c,d}, {1}),
- ?line ok = complex_or_1({a}, {1,2,3}),
- ?line error = complex_or_1({a}, {1}),
+ ok = complex_or_1({a,b,c,d}, {1,2,3}),
+ ok = complex_or_1({a,b,c,d}, {1}),
+ ok = complex_or_1({a}, {1,2,3}),
+ error = complex_or_1({a}, {1}),
- ?line error = complex_or_1(1, 2),
- ?line error = complex_or_1([], {a,b,c,d}),
- ?line error = complex_or_1({a,b,c,d}, []),
+ error = complex_or_1(1, 2),
+ error = complex_or_1([], {a,b,c,d}),
+ error = complex_or_1({a,b,c,d}, []),
%% complex_or_2/1
- ?line ok = complex_or_2({true,{}}),
- ?line ok = complex_or_2({false,{a}}),
- ?line ok = complex_or_2({false,{a,b,c}}),
- ?line ok = complex_or_2({true,{a,b,c,d}}),
+ ok = complex_or_2({true,{}}),
+ ok = complex_or_2({false,{a}}),
+ ok = complex_or_2({false,{a,b,c}}),
+ ok = complex_or_2({true,{a,b,c,d}}),
- ?line error = complex_or_2({blurf,{a,b,c}}),
+ error = complex_or_2({blurf,{a,b,c}}),
- ?line error = complex_or_2({true}),
- ?line error = complex_or_2({true,no_tuple}),
- ?line error = complex_or_2({true,[]}),
+ error = complex_or_2({true}),
+ error = complex_or_2({true,no_tuple}),
+ error = complex_or_2({true,[]}),
%% complex_or_3/2
- ?line ok = complex_or_3({true}, {}),
- ?line ok = complex_or_3({false}, {a}),
- ?line ok = complex_or_3({false}, {a,b,c}),
- ?line ok = complex_or_3({true}, {a,b,c,d}),
- ?line ok = complex_or_3({false}, <<1,2,3>>),
- ?line ok = complex_or_3({true}, <<1,2,3,4>>),
+ ok = complex_or_3({true}, {}),
+ ok = complex_or_3({false}, {a}),
+ ok = complex_or_3({false}, {a,b,c}),
+ ok = complex_or_3({true}, {a,b,c,d}),
+ ok = complex_or_3({false}, <<1,2,3>>),
+ ok = complex_or_3({true}, <<1,2,3,4>>),
- ?line error = complex_or_3(blurf, {a,b,c}),
+ error = complex_or_3(blurf, {a,b,c}),
- ?line error = complex_or_3({false}, <<1,2,3,4>>),
- ?line error = complex_or_3([], <<1,2>>),
- ?line error = complex_or_3({true}, 45),
- ?line error = complex_or_3(<<>>, <<>>),
+ error = complex_or_3({false}, <<1,2,3,4>>),
+ error = complex_or_3([], <<1,2>>),
+ error = complex_or_3({true}, 45),
+ error = complex_or_3(<<>>, <<>>),
%% complex_or_4/2
- ?line ok = complex_or_4(<<1,2,3>>, {true}),
- ?line ok = complex_or_4(<<1,2,3>>, {false}),
- ?line ok = complex_or_4(<<1,2,3>>, {true}),
- ?line ok = complex_or_4({1,2,3}, {true}),
- ?line error = complex_or_4({1,2,3,4}, {false}),
+ ok = complex_or_4(<<1,2,3>>, {true}),
+ ok = complex_or_4(<<1,2,3>>, {false}),
+ ok = complex_or_4(<<1,2,3>>, {true}),
+ ok = complex_or_4({1,2,3}, {true}),
+ error = complex_or_4({1,2,3,4}, {false}),
- ?line error = complex_or_4(<<1,2,3,4>>, []),
- ?line error = complex_or_4([], {true}),
+ error = complex_or_4(<<1,2,3,4>>, []),
+ error = complex_or_4([], {true}),
%% complex_or_5/2
- ?line ok = complex_or_5(<<1>>, {false}),
- ?line ok = complex_or_5(<<1,2,3>>, {true}),
- ?line ok = complex_or_5(<<1,2,3,4>>, {false}),
- ?line ok = complex_or_5({1,2,3}, {false}),
- ?line ok = complex_or_5({1,2,3,4}, {false}),
+ ok = complex_or_5(<<1>>, {false}),
+ ok = complex_or_5(<<1,2,3>>, {true}),
+ ok = complex_or_5(<<1,2,3,4>>, {false}),
+ ok = complex_or_5({1,2,3}, {false}),
+ ok = complex_or_5({1,2,3,4}, {false}),
- ?line error = complex_or_5(blurf, {false}),
- ?line error = complex_or_5(<<1>>, klarf),
- ?line error = complex_or_5(blurf, klarf),
+ error = complex_or_5(blurf, {false}),
+ error = complex_or_5(<<1>>, klarf),
+ error = complex_or_5(blurf, klarf),
%% complex_or_6/2
- ?line ok = complex_or_6({true,true}, {1,2,3,4}),
- ?line ok = complex_or_6({true,true}, <<1,2,3,4>>),
- ?line ok = complex_or_6({false,false}, <<1,2,3,4>>),
- ?line ok = complex_or_6({false,true}, <<1>>),
- ?line ok = complex_or_6({true,false}, {1}),
- ?line ok = complex_or_6({true,true}, {1}),
+ ok = complex_or_6({true,true}, {1,2,3,4}),
+ ok = complex_or_6({true,true}, <<1,2,3,4>>),
+ ok = complex_or_6({false,false}, <<1,2,3,4>>),
+ ok = complex_or_6({false,true}, <<1>>),
+ ok = complex_or_6({true,false}, {1}),
+ ok = complex_or_6({true,true}, {1}),
- ?line error = complex_or_6({false,false}, {1}),
+ error = complex_or_6({false,false}, {1}),
- ?line error = complex_or_6({true}, {1,2,3,4}),
- ?line error = complex_or_6({}, {1,2,3,4}),
- ?line error = complex_or_6([], {1,2,3,4}),
- ?line error = complex_or_6([], {1,2,3,4}),
- ?line error = complex_or_6({true,false}, klurf),
+ error = complex_or_6({true}, {1,2,3,4}),
+ error = complex_or_6({}, {1,2,3,4}),
+ error = complex_or_6([], {1,2,3,4}),
+ error = complex_or_6([], {1,2,3,4}),
+ error = complex_or_6({true,false}, klurf),
ok.
@@ -753,79 +754,79 @@ and_guard(Config) when is_list(Config) ->
%% 'and' combinations of literal true/false.
- ?line check(fun() -> if true and false -> ok; true -> error end end, error),
- ?line check(fun() -> if false and true -> ok; true -> error end end, error),
- ?line check(fun() -> if true and true -> ok end end, ok),
- ?line check(fun() -> if false and false -> ok; true -> error end end, error),
-
- ?line check(fun() -> if glurf and true -> ok; true -> error end end, error),
- ?line check(fun() -> if true and glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if glurf and glurf -> ok; true -> error end end, error),
-
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if true and false -> ok;
- false and true -> ok;
- false and false -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if true and false -> ok; true -> error end end, error),
+ check(fun() -> if false and true -> ok; true -> error end end, error),
+ check(fun() -> if true and true -> ok end end, ok),
+ check(fun() -> if false and false -> ok; true -> error end end, error),
+
+ check(fun() -> if glurf and true -> ok; true -> error end end, error),
+ check(fun() -> if true and glurf -> ok; true -> error end end, error),
+ check(fun() -> if glurf and glurf -> ok; true -> error end end, error),
+
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if true and false -> ok;
+ false and true -> ok;
+ false and false -> ok
+ end),
+ exit
+ end, exit),
%% 'and' combinations of true/false in variables.
True = id(true),
False = id(false),
- ?line check(fun() -> if True and False -> ok; true -> error end end, error),
- ?line check(fun() -> if False and True -> ok; true -> error end end, error),
- ?line check(fun() -> if True and True -> ok end end, ok),
- ?line check(fun() -> if False and False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True and False -> ok;
- False and True -> ok;
- False and False -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True and False -> ok; true -> error end end, error),
+ check(fun() -> if False and True -> ok; true -> error end end, error),
+ check(fun() -> if True and True -> ok end end, ok),
+ check(fun() -> if False and False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True and False -> ok;
+ False and True -> ok;
+ False and False -> ok
+ end),
+ exit
+ end, exit),
%% 'and' combinations of true/false and a non-boolean in variables.
Glurf = id(glurf),
- ?line check(fun() -> if True and Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf and True -> ok; true -> error end end, error),
- ?line check(fun() -> if True and True -> ok end end, ok),
- ?line check(fun() -> if Glurf and Glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True and Glurf -> ok;
- Glurf and True -> ok;
- Glurf and Glurf -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True and Glurf -> ok; true -> error end end, error),
+ check(fun() -> if Glurf and True -> ok; true -> error end end, error),
+ check(fun() -> if True and True -> ok end end, ok),
+ check(fun() -> if Glurf and Glurf -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True and Glurf -> ok;
+ Glurf and True -> ok;
+ Glurf and Glurf -> ok
+ end),
+ exit
+ end, exit),
%% 'and' combinations of true/false with errors.
ATuple = id({a,b,c}),
- ?line check(fun() -> if True and element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if element(42, ATuple) and True -> ok;
- true -> error end end, error),
- ?line check(fun() -> if True and True -> ok end end, ok),
- ?line check(fun() -> if element(42, ATuple) and element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True and element(42, ATuple) -> ok;
- element(42, ATuple) and True -> ok;
- element(42, ATuple) and element(42, ATuple) -> ok
- end),
+ check(fun() -> if True and element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() -> if element(42, ATuple) and True -> ok;
+ true -> error end end, error),
+ check(fun() -> if True and True -> ok end end, ok),
+ check(fun() -> if element(42, ATuple) and element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True and element(42, ATuple) -> ok;
+ element(42, ATuple) and True -> ok;
+ element(42, ATuple) and element(42, ATuple) -> ok
+ end),
exit
end, exit),
- ?line ok = relprod({'Set',a,b}, {'Set',a,b}),
+ ok = relprod({'Set',a,b}, {'Set',a,b}),
ok = and_same_var(42),
{'EXIT',{if_clause,_}} = (catch and_same_var(x)),
@@ -844,18 +845,18 @@ relprod(R1, R2) when (erlang:size(R1) =:= 3) and (erlang:element(1,R1) =:= 'Set'
xor_guard(Config) when is_list(Config) ->
%% 'xor' combinations of literal true/false.
- ?line check(fun() -> if true xor false -> ok end end, ok),
- ?line check(fun() -> if false xor true -> ok end end, ok),
- ?line check(fun() -> if true xor true -> ok; true -> error end end, error),
- ?line check(fun() -> if false xor false -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if false xor false -> ok end),
- exit
- end, exit),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if true xor true -> ok end),
- exit
- end, exit),
+ check(fun() -> if true xor false -> ok end end, ok),
+ check(fun() -> if false xor true -> ok end end, ok),
+ check(fun() -> if true xor true -> ok; true -> error end end, error),
+ check(fun() -> if false xor false -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if false xor false -> ok end),
+ exit
+ end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if true xor true -> ok end),
+ exit
+ end, exit),
%% 'xor' combinations using variables containing true/false.
@@ -863,18 +864,18 @@ xor_guard(Config) when is_list(Config) ->
True = id(true),
False = id(false),
- ?line check(fun() -> if True xor False -> ok end end, ok),
- ?line check(fun() -> if False xor True -> ok end end, ok),
- ?line check(fun() -> if True xor True -> ok; true -> error end end, error),
- ?line check(fun() -> if False xor False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if False xor False -> ok end),
- exit
- end, exit),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if True xor True -> ok end),
- exit
- end, exit),
+ check(fun() -> if True xor False -> ok end end, ok),
+ check(fun() -> if False xor True -> ok end end, ok),
+ check(fun() -> if True xor True -> ok; true -> error end end, error),
+ check(fun() -> if False xor False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if False xor False -> ok end),
+ exit
+ end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if True xor True -> ok end),
+ exit
+ end, exit),
ok.
@@ -883,53 +884,53 @@ more_xor_guards(Config) when is_list(Config) ->
False = id(false),
ATuple = id({false,true,gurka}),
- ?line check(fun() ->
- if element(42, ATuple) xor False -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if False xor element(42, ATuple) xor False -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(18, ATuple) xor element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if True xor element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(42, ATuple) xor True -> ok;
- true -> error end
- end, error),
+ check(fun() ->
+ if element(42, ATuple) xor False -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if False xor element(42, ATuple) xor False -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(18, ATuple) xor element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if True xor element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(42, ATuple) xor True -> ok;
+ true -> error end
+ end, error),
ok.
build_in_guard(Config) when is_list(Config) ->
SubBin = <<5.0/float>>,
- ?line B = <<1,SubBin/binary,3.5/float>>,
- ?line if
- B =:= <<1,SubBin/binary,3.5/float>> -> ok
- end.
+ B = <<1,SubBin/binary,3.5/float>>,
+ if
+ B =:= <<1,SubBin/binary,3.5/float>> -> ok
+ end.
old_guard_tests(Config) when list(Config) ->
%% Check that all the old guard tests are still recognized.
- ?line list = og(Config),
- ?line atom = og(an_atom),
- ?line binary = og(<<1,2>>),
- ?line float = og(3.14),
- ?line integer = og(43),
- ?line a_function = og(fun() -> ok end),
- ?line pid = og(self()),
- ?line reference = og(make_ref()),
- ?line tuple = og({}),
-
- ?line number = on(45.333),
- ?line number = on(-19),
+ list = og(Config),
+ atom = og(an_atom),
+ binary = og(<<1,2>>),
+ float = og(3.14),
+ integer = og(43),
+ a_function = og(fun() -> ok end),
+ pid = og(self()),
+ reference = og(make_ref()),
+ tuple = og({}),
+
+ number = on(45.333),
+ number = on(-19),
ok.
og(V) when atom(V) -> atom;
@@ -947,9 +948,29 @@ og(_) -> what.
on(V) when number(V) -> number;
on(_) -> not_number.
+complex_guard(_Config) ->
+ _ = [true = do_complex_guard(X, Y, Z) ||
+ X <- [4,5], Y <- [4,5], Z <- [4,5]],
+ _ = [true = do_complex_guard(X, Y, Z) ||
+ X <- [1,2,3], Y <- [1,2,3], Z <- [1,2,3]],
+ _ = [catch do_complex_guard(X, Y, Z) ||
+ X <- [1,2,3,4,5], Y <- [0,6], Z <- [1,2,3,4,5]],
+ ok.
+
+do_complex_guard(X1, Y1, Z1) ->
+ if
+ ((X1 =:= 4) or (X1 =:= 5)) and
+ ((Y1 =:= 4) or (Y1 =:= 5)) and
+ ((Z1 =:= 4) or (Z1 =:= 5)) or
+ ((X1 =:= 1) or (X1 =:= 2) or (X1 =:= 3)) and
+ ((Y1 =:= 1) or (Y1 =:= 2) or (Y1 =:= 3)) and
+ ((Z1 =:= 1) or (Z1 =:= 2) or (Z1 =:= 3)) ->
+ true
+ end.
+
gbif(Config) when is_list(Config) ->
- ?line error = gbif_1(1, {false,true}),
- ?line ok = gbif_1(2, {false,true}),
+ error = gbif_1(1, {false,true}),
+ ok = gbif_1(2, {false,true}),
ok.
gbif_1(P, T) when element(P, T) -> ok;
@@ -957,57 +978,57 @@ gbif_1(_, _) -> error.
t_is_boolean(Config) when is_list(Config) ->
- ?line true = is_boolean(true),
- ?line true = is_boolean(false),
- ?line true = is_boolean(id(true)),
- ?line true = is_boolean(id(false)),
-
- ?line false = is_boolean(glurf),
- ?line false = is_boolean(id(glurf)),
-
- ?line false = is_boolean([]),
- ?line false = is_boolean(id([])),
- ?line false = is_boolean(42),
- ?line false = is_boolean(id(-42)),
-
- ?line false = is_boolean(math:pi()),
- ?line false = is_boolean(384793478934378924978439789873478934897),
-
- ?line false = is_boolean(id(self())),
- ?line false = is_boolean(id({x,y,z})),
- ?line false = is_boolean(id([a,b,c])),
- ?line false = is_boolean(id(make_ref())),
- ?line false = is_boolean(id(<<1,2,3>>)),
- ?line false = is_boolean({id(x),y,z}),
- ?line false = is_boolean([id(a),b,c]),
-
- ?line ok = bool(true),
- ?line ok = bool(false),
- ?line ok = bool(id(true)),
- ?line ok = bool(id(false)),
-
- ?line error = bool(glurf),
- ?line error = bool(id(glurf)),
-
- ?line error = bool([]),
- ?line error = bool(id([])),
- ?line error = bool(42),
- ?line error = bool(id(-42)),
-
- ?line error = bool(math:pi()),
- ?line error = bool(384793478934378924978439789873478934897),
-
- ?line error = bool(id(self())),
- ?line error = bool(id({x,y,z})),
- ?line error = bool(id([a,b,c])),
- ?line error = bool(id(make_ref())),
- ?line error = bool(id(<<1,2,3>>)),
-
- ?line true = my_is_bool(true),
- ?line true = my_is_bool(false),
- ?line false = my_is_bool([]),
- ?line false = my_is_bool([1,2,3,4]),
- ?line false = my_is_bool({a,b,c}),
+ true = is_boolean(true),
+ true = is_boolean(false),
+ true = is_boolean(id(true)),
+ true = is_boolean(id(false)),
+
+ false = is_boolean(glurf),
+ false = is_boolean(id(glurf)),
+
+ false = is_boolean([]),
+ false = is_boolean(id([])),
+ false = is_boolean(42),
+ false = is_boolean(id(-42)),
+
+ false = is_boolean(math:pi()),
+ false = is_boolean(384793478934378924978439789873478934897),
+
+ false = is_boolean(id(self())),
+ false = is_boolean(id({x,y,z})),
+ false = is_boolean(id([a,b,c])),
+ false = is_boolean(id(make_ref())),
+ false = is_boolean(id(<<1,2,3>>)),
+ false = is_boolean({id(x),y,z}),
+ false = is_boolean([id(a),b,c]),
+
+ ok = bool(true),
+ ok = bool(false),
+ ok = bool(id(true)),
+ ok = bool(id(false)),
+
+ error = bool(glurf),
+ error = bool(id(glurf)),
+
+ error = bool([]),
+ error = bool(id([])),
+ error = bool(42),
+ error = bool(id(-42)),
+
+ error = bool(math:pi()),
+ error = bool(384793478934378924978439789873478934897),
+
+ error = bool(id(self())),
+ error = bool(id({x,y,z})),
+ error = bool(id([a,b,c])),
+ error = bool(id(make_ref())),
+ error = bool(id(<<1,2,3>>)),
+
+ true = my_is_bool(true),
+ true = my_is_bool(false),
+ false = my_is_bool([]),
+ false = my_is_bool([1,2,3,4]),
+ false = my_is_bool({a,b,c}),
ok.
@@ -1048,18 +1069,18 @@ is_function_2(Config) when is_list(Config) ->
end.
tricky(Config) when is_list(Config) ->
- ?line not_ok = tricky_1(1, 2),
- ?line not_ok = tricky_1(1, blurf),
- ?line not_ok = tricky_1(foo, 2),
- ?line not_ok = tricky_1(a, b),
-
- ?line error = tricky_2(0.5),
- ?line error = tricky_2(a),
- ?line error = tricky_2({a,b,c}),
-
- ?line false = rb(100000, [1], 42),
- ?line true = rb(100000, [], 42),
- ?line true = rb(555, [a,b,c], 19),
+ not_ok = tricky_1(1, 2),
+ not_ok = tricky_1(1, blurf),
+ not_ok = tricky_1(foo, 2),
+ not_ok = tricky_1(a, b),
+
+ error = tricky_2(0.5),
+ error = tricky_2(a),
+ error = tricky_2({a,b,c}),
+
+ false = rb(100000, [1], 42),
+ true = rb(100000, [], 42),
+ true = rb(555, [a,b,c], 19),
ok.
tricky_1(X, Y) when abs((X == 1) or (Y == 2)) -> ok;
@@ -1097,40 +1118,40 @@ rb(_, _, _) -> false.
rel_ops(Config) when is_list(Config) ->
- ?line ?T(=/=, 1, 1.0),
- ?line ?F(=/=, 2, 2),
- ?line ?F(=/=, {a}, {a}),
+ ?T(=/=, 1, 1.0),
+ ?F(=/=, 2, 2),
+ ?F(=/=, {a}, {a}),
- ?line ?F(/=, a, a),
- ?line ?F(/=, 0, 0.0),
- ?line ?T(/=, 0, 1),
- ?line ?F(/=, {a}, {a}),
+ ?F(/=, a, a),
+ ?F(/=, 0, 0.0),
+ ?T(/=, 0, 1),
+ ?F(/=, {a}, {a}),
- ?line ?T(==, 1, 1.0),
- ?line ?F(==, a, {}),
+ ?T(==, 1, 1.0),
+ ?F(==, a, {}),
- ?line ?F(=:=, 1, 1.0),
- ?line ?T(=:=, 42.0, 42.0),
+ ?F(=:=, 1, 1.0),
+ ?T(=:=, 42.0, 42.0),
- ?line ?F(>, a, b),
- ?line ?T(>, 42, 1.0),
- ?line ?F(>, 42, 42.0),
+ ?F(>, a, b),
+ ?T(>, 42, 1.0),
+ ?F(>, 42, 42.0),
- ?line ?T(<, a, b),
- ?line ?F(<, 42, 1.0),
- ?line ?F(<, 42, 42.0),
+ ?T(<, a, b),
+ ?F(<, 42, 1.0),
+ ?F(<, 42, 42.0),
- ?line ?T(=<, 1.5, 5),
- ?line ?F(=<, -9, -100.344),
- ?line ?T(=<, 42, 42.0),
+ ?T(=<, 1.5, 5),
+ ?F(=<, -9, -100.344),
+ ?T(=<, 42, 42.0),
- ?line ?T(>=, 42, 42.0),
- ?line ?F(>=, a, b),
- ?line ?T(>=, 1.0, 0),
+ ?T(>=, 42, 42.0),
+ ?F(>=, a, b),
+ ?T(>=, 1.0, 0),
%% Coverage of beam_block:is_exact_eq_ok/1 and collect/1.
- ?line true = any_atom /= id(42),
- ?line true = [] /= id(42),
+ true = any_atom /= id(42),
+ true = [] /= id(42),
ok.
@@ -1371,10 +1392,10 @@ literal_type_tests(Config) when is_list(Config) ->
literal_type_tests_1(Config) ->
%% Generate an Erlang module with all different type of type tests.
- ?line Tests = make_test([{T,L} || T <- type_tests(), L <- literals()] ++
+ Tests = make_test([{T,L} || T <- type_tests(), L <- literals()] ++
[{is_function,L1,L2} ||
L1 <- literals(), L2 <- literals()]),
- ?line Mod = literal_test,
+ Mod = literal_test,
Anno = erl_anno:new(0),
Func = {function, Anno, test, 0, [{clause,Anno,[],[],Tests}]},
Form = [{attribute,Anno,module,Mod},
@@ -1382,24 +1403,24 @@ literal_type_tests_1(Config) ->
Func, {eof,Anno}],
%% Print generated code for inspection.
- ?line lists:foreach(fun (F) -> io:put_chars([erl_pp:form(F),"\n"]) end, Form),
+ lists:foreach(fun (F) -> io:put_chars([erl_pp:form(F),"\n"]) end, Form),
%% Test compile:form/1. This implies full optimization (default).
- ?line {ok,Mod,Code1} = compile:forms(Form),
- ?line smoke_disasm(Config, Mod, Code1),
- ?line {module,Mod} = code:load_binary(Mod, Mod, Code1),
- ?line Mod:test(),
- ?line true = code:delete(Mod),
- ?line code:purge(Mod),
+ {ok,Mod,Code1} = compile:forms(Form),
+ smoke_disasm(Config, Mod, Code1),
+ {module,Mod} = code:load_binary(Mod, Mod, Code1),
+ Mod:test(),
+ true = code:delete(Mod),
+ code:purge(Mod),
%% Test compile:form/2. Turn off all optimizations.
- ?line {ok,Mod,Code2} = compile:forms(Form, [binary,report,time,
+ {ok,Mod,Code2} = compile:forms(Form, [binary,report,time,
no_copt,no_postopt]),
- ?line smoke_disasm(Config, Mod, Code2),
- ?line {module,Mod} = code:load_binary(Mod, Mod, Code2),
- ?line Mod:test(),
- ?line true = code:delete(Mod),
- ?line code:purge(Mod),
+ smoke_disasm(Config, Mod, Code2),
+ {module,Mod} = code:load_binary(Mod, Mod, Code2),
+ Mod:test(),
+ true = code:delete(Mod),
+ code:purge(Mod),
ok.
make_test([{T,L1,L2}|Ts]) ->
@@ -1427,7 +1448,7 @@ test(T, L1, L2) ->
{match,Anno,{atom,Anno,Val},hd(E)}.
smoke_disasm(Config, Mod, Bin) ->
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
File = filename:join(Priv, atom_to_list(Mod)++".beam"),
ok = file:write_file(File, Bin),
test_lib:smoke_disasm(File).
@@ -1459,30 +1480,30 @@ type_tests() ->
is_function].
basic_andalso_orelse(Config) when is_list(Config) ->
- ?line T = id({type,integers,23,42}),
- ?line 65 = if
- ((element(1, T) =:= type) andalso (tuple_size(T) =:= 4) andalso
- element(2, T)) == integers ->
- element(3, T) + element(4, T);
- true -> error
- end,
- ?line 65 = case [] of
- [] when ((element(1, T) =:= type) andalso (tuple_size(T) =:= 4) andalso
- element(2, T)) == integers ->
- element(3, T) + element(4, T)
- end,
-
- ?line 42 = basic_rt({type,integers,40,2}),
- ?line 5.0 = basic_rt({vector,{3.0,4.0}}),
- ?line 20 = basic_rt(['+',3,7]),
- ?line {'Set',a,b} = basic_rt({{'Set',a,b},{'Set',a,b}}),
- ?line 12 = basic_rt({klurf,4}),
-
- ?line error = basic_rt({type,integers,40,2,3}),
- ?line error = basic_rt({kalle,integers,40,2}),
- ?line error = basic_rt({kalle,integers,40,2}),
- ?line error = basic_rt({1,2}),
- ?line error = basic_rt([]),
+ T = id({type,integers,23,42}),
+ 65 = if
+ ((element(1, T) =:= type) andalso (tuple_size(T) =:= 4) andalso
+ element(2, T)) == integers ->
+ element(3, T) + element(4, T);
+ true -> error
+ end,
+ 65 = case [] of
+ [] when ((element(1, T) =:= type) andalso (tuple_size(T) =:= 4) andalso
+ element(2, T)) == integers ->
+ element(3, T) + element(4, T)
+ end,
+
+ 42 = basic_rt({type,integers,40,2}),
+ 5.0 = basic_rt({vector,{3.0,4.0}}),
+ 20 = basic_rt(['+',3,7]),
+ {'Set',a,b} = basic_rt({{'Set',a,b},{'Set',a,b}}),
+ 12 = basic_rt({klurf,4}),
+
+ error = basic_rt({type,integers,40,2,3}),
+ error = basic_rt({kalle,integers,40,2}),
+ error = basic_rt({kalle,integers,40,2}),
+ error = basic_rt({1,2}),
+ error = basic_rt([]),
RelProdBody =
fun(R1, R2) ->
@@ -1493,7 +1514,7 @@ basic_andalso_orelse(Config) when is_list(Config) ->
end
end,
- ?line ok = RelProdBody({'Set',a,b}, {'Set',a,b}),
+ ok = RelProdBody({'Set',a,b}, {'Set',a,b}),
%% 'andalso'/'orelse' with calls known to fail already at compile time.
%% Used to crash the code generator.
@@ -1564,14 +1585,14 @@ traverse_dcd({Cont,Recs},Log,Fun) ->
check_qlc_hrl(Config) when is_list(Config) ->
St = {r1,false,dum},
- ?line foo = cqlc(qlc, q, [{lc,1,2,3}], St),
- ?line foo = cqlc(qlc, q, [{lc,1,2,3},b], St),
- ?line St = cqlc(qlc, q, [], St),
- ?line St = cqlc(qlc, blurf, [{lc,1,2,3},b], St),
- ?line St = cqlc(q, q, [{lc,1,2,3},b], St),
- ?line St = cqlc(qlc, q, [{lc,1,2,3},b,c], St),
- ?line St = cqlc(qlc, q, [a,b], St),
- ?line {r1,true,kalle} = cqlc(qlc, q, [{lc,1,2,3},b], {r1,true,kalle}),
+ foo = cqlc(qlc, q, [{lc,1,2,3}], St),
+ foo = cqlc(qlc, q, [{lc,1,2,3},b], St),
+ St = cqlc(qlc, q, [], St),
+ St = cqlc(qlc, blurf, [{lc,1,2,3},b], St),
+ St = cqlc(q, q, [{lc,1,2,3},b], St),
+ St = cqlc(qlc, q, [{lc,1,2,3},b,c], St),
+ St = cqlc(qlc, q, [a,b], St),
+ {r1,true,kalle} = cqlc(qlc, q, [{lc,1,2,3},b], {r1,true,kalle}),
ok.
%% From erl_lint.erl; original name was check_qlc_hrl/4.
@@ -1588,13 +1609,13 @@ cqlc(M, F, As, St) ->
%% OTP-7679: Thanks to Hunter Morris.
andalso_semi(Config) when is_list(Config) ->
- ?line ok = andalso_semi_foo(0),
- ?line ok = andalso_semi_foo(1),
- ?line fc(catch andalso_semi_foo(2)),
+ ok = andalso_semi_foo(0),
+ ok = andalso_semi_foo(1),
+ fc(catch andalso_semi_foo(2)),
- ?line ok = andalso_semi_bar([a,b,c]),
- ?line ok = andalso_semi_bar(1),
- ?line fc(catch andalso_semi_bar([a,b])),
+ ok = andalso_semi_bar([a,b,c]),
+ ok = andalso_semi_bar(1),
+ fc(catch andalso_semi_bar([a,b])),
ok.
andalso_semi_foo(Bar) when is_integer(Bar) andalso Bar =:= 0; Bar =:= 1 ->
@@ -1605,20 +1626,20 @@ andalso_semi_bar(Bar) when is_list(Bar) andalso length(Bar) =:= 3; Bar =:= 1 ->
t_tuple_size(Config) when is_list(Config) ->
- ?line 10 = do_tuple_size({1,2,3,4}),
- ?line fc(catch do_tuple_size({1,2,3})),
- ?line fc(catch do_tuple_size(42)),
+ 10 = do_tuple_size({1,2,3,4}),
+ fc(catch do_tuple_size({1,2,3})),
+ fc(catch do_tuple_size(42)),
- ?line error = ludicrous_tuple_size({a,b,c}),
- ?line error = ludicrous_tuple_size([a,b,c]),
+ error = ludicrous_tuple_size({a,b,c}),
+ error = ludicrous_tuple_size([a,b,c]),
%% Test the "unsafe case" - the register assigned the tuple size is
%% not killed.
- ?line DataDir = test_lib:get_data_dir(Config),
- ?line File = filename:join(DataDir, "guard_SUITE_tuple_size"),
- ?line {ok,Mod,Code} = compile:file(File, [from_asm,binary]),
- ?line code:load_binary(Mod, File, Code),
- ?line 14 = Mod:t({1,2,3,4}),
+ DataDir = test_lib:get_data_dir(Config),
+ File = filename:join(DataDir, "guard_SUITE_tuple_size"),
+ {ok,Mod,Code} = compile:file(File, [from_asm,binary]),
+ code:load_binary(Mod, File, Code),
+ 14 = Mod:t({1,2,3,4}),
_ = code:delete(Mod),
_ = code:purge(Mod),
@@ -1647,71 +1668,70 @@ mask_error({'EXIT',{Err,_}}) ->
mask_error(Else) ->
Else.
-binary_part(doc) ->
- ["Tests the binary_part/2,3 guard (GC) bif's"];
+%% Test the binary_part/2,3 guard (GC) BIFs.
binary_part(Config) when is_list(Config) ->
%% This is more or less a copy of what the guard_SUITE in emulator
%% does to cover the guard bif's
- ?line 1 = bptest(<<1,2,3>>),
- ?line 2 = bptest(<<2,1,3>>),
- ?line error = bptest(<<1>>),
- ?line error = bptest(<<>>),
- ?line error = bptest(apa),
- ?line 3 = bptest(<<2,3,3>>),
+ 1 = bptest(<<1,2,3>>),
+ 2 = bptest(<<2,1,3>>),
+ error = bptest(<<1>>),
+ error = bptest(<<>>),
+ error = bptest(apa),
+ 3 = bptest(<<2,3,3>>),
% With one variable (pos)
- ?line 1 = bptest(<<1,2,3>>,1),
- ?line 2 = bptest(<<2,1,3>>,1),
- ?line error = bptest(<<1>>,1),
- ?line error = bptest(<<>>,1),
- ?line error = bptest(apa,1),
- ?line 3 = bptest(<<2,3,3>>,1),
+ 1 = bptest(<<1,2,3>>,1),
+ 2 = bptest(<<2,1,3>>,1),
+ error = bptest(<<1>>,1),
+ error = bptest(<<>>,1),
+ error = bptest(apa,1),
+ 3 = bptest(<<2,3,3>>,1),
% With one variable (length)
- ?line 1 = bptesty(<<1,2,3>>,1),
- ?line 2 = bptesty(<<2,1,3>>,1),
- ?line error = bptesty(<<1>>,1),
- ?line error = bptesty(<<>>,1),
- ?line error = bptesty(apa,1),
- ?line 3 = bptesty(<<2,3,3>>,2),
+ 1 = bptesty(<<1,2,3>>,1),
+ 2 = bptesty(<<2,1,3>>,1),
+ error = bptesty(<<1>>,1),
+ error = bptesty(<<>>,1),
+ error = bptesty(apa,1),
+ 3 = bptesty(<<2,3,3>>,2),
% With one variable (whole tuple)
- ?line 1 = bptestx(<<1,2,3>>,{1,1}),
- ?line 2 = bptestx(<<2,1,3>>,{1,1}),
- ?line error = bptestx(<<1>>,{1,1}),
- ?line error = bptestx(<<>>,{1,1}),
- ?line error = bptestx(apa,{1,1}),
- ?line 3 = bptestx(<<2,3,3>>,{1,2}),
+ 1 = bptestx(<<1,2,3>>,{1,1}),
+ 2 = bptestx(<<2,1,3>>,{1,1}),
+ error = bptestx(<<1>>,{1,1}),
+ error = bptestx(<<>>,{1,1}),
+ error = bptestx(apa,{1,1}),
+ 3 = bptestx(<<2,3,3>>,{1,2}),
% With two variables
- ?line 1 = bptest(<<1,2,3>>,1,1),
- ?line 2 = bptest(<<2,1,3>>,1,1),
- ?line error = bptest(<<1>>,1,1),
- ?line error = bptest(<<>>,1,1),
- ?line error = bptest(apa,1,1),
- ?line 3 = bptest(<<2,3,3>>,1,2),
+ 1 = bptest(<<1,2,3>>,1,1),
+ 2 = bptest(<<2,1,3>>,1,1),
+ error = bptest(<<1>>,1,1),
+ error = bptest(<<>>,1,1),
+ error = bptest(apa,1,1),
+ 3 = bptest(<<2,3,3>>,1,2),
% Direct (autoimported) call, these will be evaluated by the compiler...
- ?line <<2>> = binary_part(<<1,2,3>>,1,1),
- ?line <<1>> = binary_part(<<2,1,3>>,1,1),
+ <<2>> = binary_part(<<1,2,3>>,1,1),
+ <<1>> = binary_part(<<2,1,3>>,1,1),
% Compiler warnings due to constant evaluation expected (3)
- ?line badarg = ?MASK_ERROR(binary_part(<<1>>,1,1)),
- ?line badarg = ?MASK_ERROR(binary_part(<<>>,1,1)),
- ?line badarg = ?MASK_ERROR(binary_part(apa,1,1)),
- ?line <<3,3>> = binary_part(<<2,3,3>>,1,2),
+ badarg = ?MASK_ERROR(binary_part(<<1>>,1,1)),
+ badarg = ?MASK_ERROR(binary_part(<<>>,1,1)),
+ badarg = ?MASK_ERROR(binary_part(apa,1,1)),
+ <<3,3>> = binary_part(<<2,3,3>>,1,2),
% Direct call through apply
- ?line <<2>> = apply(erlang,binary_part,[<<1,2,3>>,1,1]),
- ?line <<1>> = apply(erlang,binary_part,[<<2,1,3>>,1,1]),
+ <<2>> = apply(erlang,binary_part,[<<1,2,3>>,1,1]),
+ <<1>> = apply(erlang,binary_part,[<<2,1,3>>,1,1]),
% Compiler warnings due to constant evaluation expected (3)
- ?line badarg = ?MASK_ERROR(apply(erlang,binary_part,[<<1>>,1,1])),
- ?line badarg = ?MASK_ERROR(apply(erlang,binary_part,[<<>>,1,1])),
- ?line badarg = ?MASK_ERROR(apply(erlang,binary_part,[apa,1,1])),
- ?line <<3,3>> = apply(erlang,binary_part,[<<2,3,3>>,1,2]),
+ badarg = ?MASK_ERROR(apply(erlang,binary_part,[<<1>>,1,1])),
+ badarg = ?MASK_ERROR(apply(erlang,binary_part,[<<>>,1,1])),
+ badarg = ?MASK_ERROR(apply(erlang,binary_part,[apa,1,1])),
+ <<3,3>> = apply(erlang,binary_part,[<<2,3,3>>,1,2]),
% Constant propagation
- ?line Bin = <<1,2,3>>,
- ?line ok = if
+ Bin = <<1,2,3>>,
+ ok = if
binary_part(Bin,1,1) =:= <<2>> ->
ok;
%% Compiler warning, clause cannot match (expected)
true ->
error
end,
- ?line ok = if
+ ok = if
binary_part(Bin,{1,1}) =:= <<2>> ->
ok;
%% Compiler warning, clause cannot match (expected)
@@ -1778,24 +1798,24 @@ bptest(_,_,_) ->
-define(FAILING(C),
if
- C -> ?t:fail(should_fail);
+ C -> ct:fail(should_fail);
true -> ok
end,
if
- true, C -> ?t:fail(should_fail);
+ true, C -> ct:fail(should_fail);
true -> ok
end).
bad_constants(Config) when is_list(Config) ->
- ?line ?FAILING(false),
- ?line ?FAILING([]),
- ?line ?FAILING([a]),
- ?line ?FAILING([Config]),
- ?line ?FAILING({a,b}),
- ?line ?FAILING({a,Config}),
- ?line ?FAILING(<<1>>),
- ?line ?FAILING(42),
- ?line ?FAILING(3.14),
+ ?FAILING(false),
+ ?FAILING([]),
+ ?FAILING([a]),
+ ?FAILING([Config]),
+ ?FAILING({a,b}),
+ ?FAILING({a,Config}),
+ ?FAILING(<<1>>),
+ ?FAILING(42),
+ ?FAILING(3.14),
ok.
bad_guards(Config) when is_list(Config) ->
@@ -1815,6 +1835,8 @@ bad_guards(Config) when is_list(Config) ->
fc(catch bad_guards_3(not_a_map, [x])),
fc(catch bad_guards_3(42, [x])),
+ fc(catch bad_guards_4()),
+
ok.
%% beam_bool used to produce GC BIF instructions whose
@@ -1832,26 +1854,11 @@ bad_guards_2(M, [_]) when M#{a := 0, b => 0}, map_size(M) ->
bad_guards_3(M, [_]) when is_map(M) andalso M#{a := 0, b => 0}, length(M) ->
ok.
-%% beam_bool would remove the initialization of {y,0}.
-%% (Thanks to Thomas Arts and QuickCheck.)
-
-scotland(_Config) ->
- million = do_scotland(placed),
- {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(false)),
- {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(true)),
- {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(echo)),
- ok.
-
-do_scotland(Echo) ->
- found(case Echo of
- Echo when true; Echo, Echo, Echo ->
- Echo;
- echo ->
- []
- end,
- Echo = placed).
+%% v3_codegen would generate a jump to the failure label, but
+%% without initializing x(0). The code at the failure label expected
+%% x(0) to be initialized.
-found(_, _) -> million.
+bad_guards_4() when not (error#{}); {not 0.0} -> freedom.
%% Building maps in a guard in a 'catch' would crash v3_codegen.
@@ -1915,7 +1922,7 @@ check(F, Result) ->
Other ->
io:format("Expected: ~p\n", [Result]),
io:format(" Got: ~p\n", [Other]),
- test_server:fail()
+ ct:fail(check_failed)
end.
fc({'EXIT',{function_clause,_}}) -> ok;
diff --git a/lib/compiler/test/inline_SUITE.erl b/lib/compiler/test/inline_SUITE.erl
index 0b92a784de..ae59cc8026 100644
--- a/lib/compiler/test/inline_SUITE.erl
+++ b/lib/compiler/test/inline_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(inline_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile(export_all).
-compile({inline,[badarg/2]}).
@@ -47,8 +47,8 @@ init_per_suite(Config) ->
[{testing_node,Node}|Config].
end_per_suite(Config) ->
- Node = ?config(testing_node, Config),
- ?t:stop_node(Node),
+ Node = proplists:get_value(testing_node, Config),
+ test_server:stop_node(Node),
ok.
init_per_group(_GroupName, Config) ->
@@ -60,16 +60,16 @@ end_per_group(_GroupName, Config) ->
attribute(Config) when is_list(Config) ->
Name = "attribute",
- ?line Src = filename:join(?config(data_dir, Config), Name),
- ?line Out = ?config(priv_dir,Config),
+ Src = filename:join(proplists:get_value(data_dir, Config), Name),
+ Out = proplists:get_value(priv_dir,Config),
- ?line {ok,attribute=Mod} = compile:file(Src, [{outdir,Out},report,time]),
- ?line Outfile = filename:join(Out, Name++".beam"),
- ?line {ok,{Mod,[{locals,Locals}]}} = beam_lib:chunks(Outfile, [locals]),
- ?line io:format("locals: ~p\n", [Locals]),
+ {ok,attribute=Mod} = compile:file(Src, [{outdir,Out},report,time]),
+ Outfile = filename:join(Out, Name++".beam"),
+ {ok,{Mod,[{locals,Locals}]}} = beam_lib:chunks(Outfile, [locals]),
+ io:format("locals: ~p\n", [Locals]),
%% The inliner should have removed all local functions.
- ?line [] = Locals,
+ [] = Locals,
ok.
@@ -89,48 +89,46 @@ attribute(Config) when is_list(Config) ->
?comp(maps_inline_test).
try_inline(Mod, Config) ->
- Node = ?config(testing_node, Config),
- ?line Src = filename:join(?config(data_dir, Config), atom_to_list(Mod)),
- ?line Out = ?config(priv_dir,Config),
+ Node = proplists:get_value(testing_node, Config),
+ Src = filename:join(proplists:get_value(data_dir, Config),
+ atom_to_list(Mod)),
+ Out = proplists:get_value(priv_dir,Config),
%% Normal compilation.
- ?line io:format("Compiling: ~s\n", [Src]),
- ?line {ok,Mod} = compile:file(Src, [{outdir,Out},report,bin_opt_info,clint]),
+ io:format("Compiling: ~s\n", [Src]),
+ {ok,Mod} = compile:file(Src, [{outdir,Out},report,bin_opt_info,clint]),
- ?line Dog = test_server:timetrap(test_server:minutes(10)),
- ?line NormalResult = rpc:call(Node, ?MODULE, load_and_call, [Out,Mod]),
- ?line test_server:timetrap_cancel(Dog),
+ ct:timetrap({minutes,10}),
+ NormalResult = rpc:call(Node, ?MODULE, load_and_call, [Out,Mod]),
%% Inlining.
- ?line io:format("Compiling with old inliner: ~s\n", [Src]),
- ?line {ok,Mod} = compile:file(Src, [{outdir,Out},report,bin_opt_info,
+ io:format("Compiling with old inliner: ~s\n", [Src]),
+ {ok,Mod} = compile:file(Src, [{outdir,Out},report,bin_opt_info,
{inline,1000},clint]),
%% Run inlined code.
- ?line Dog3 = test_server:timetrap(test_server:minutes(10)),
- ?line OldInlinedResult = rpc:call(Node, ?MODULE, load_and_call, [Out,Mod]),
- ?line test_server:timetrap_cancel(Dog3),
+ ct:timetrap({minutes,10}),
+ OldInlinedResult = rpc:call(Node, ?MODULE, load_and_call, [Out,Mod]),
%% Compare results.
- ?line compare(NormalResult, OldInlinedResult),
- ?line NormalResult = OldInlinedResult,
+ compare(NormalResult, OldInlinedResult),
+ NormalResult = OldInlinedResult,
%% Inlining.
- ?line io:format("Compiling with new inliner: ~s\n", [Src]),
- ?line {ok,Mod} = compile:file(Src, [{outdir,Out},report,
+ io:format("Compiling with new inliner: ~s\n", [Src]),
+ {ok,Mod} = compile:file(Src, [{outdir,Out},report,
bin_opt_info,inline,clint]),
%% Run inlined code.
- ?line Dog4 = test_server:timetrap(test_server:minutes(10)),
- ?line InlinedResult = rpc:call(Node, ?MODULE, load_and_call, [Out,Mod]),
- ?line test_server:timetrap_cancel(Dog4),
+ ct:timetrap({minutes,10}),
+ InlinedResult = rpc:call(Node, ?MODULE, load_and_call, [Out,Mod]),
%% Compare results.
- ?line compare(NormalResult, InlinedResult),
- ?line NormalResult = InlinedResult,
+ compare(NormalResult, InlinedResult),
+ NormalResult = InlinedResult,
%% Delete Beam file.
- ?line ok = file:delete(filename:join(Out, atom_to_list(Mod)++code:objfile_extension())),
+ ok = file:delete(filename:join(Out, atom_to_list(Mod)++code:objfile_extension())),
ok.
@@ -142,24 +140,24 @@ compare([{X,Y,RGB1}|T1], [{X,Y,RGB2}|T2]) ->
compare(T1, T2);
compare([H1|_], [H2|_]) ->
io:format("Normal = ~p, Inlined = ~p\n", [H1,H2]),
- ?t:fail();
+ ct:fail(different);
compare([], []) -> ok.
start_node(Name, Args) ->
case test_server:start_node(Name, slave, [{args,Args}]) of
{ok,Node} -> {ok, Node};
- Error -> ?line test_server:fail(Error)
+ Error -> ct:fail(Error)
end.
load_and_call(Out, Module) ->
- ?line io:format("Loading...\n",[]),
- ?line code:purge(Module),
- ?line LoadRc = code:load_abs(filename:join(Out, Module)),
- ?line {module,Module} = LoadRc,
-
- ?line io:format("Calling...\n",[]),
- ?line {Time,CallResult} = timer:tc(Module, Module, []),
- ?line io:format("Time: ~p\n", [Time]),
+ io:format("Loading...\n",[]),
+ code:purge(Module),
+ LoadRc = code:load_abs(filename:join(Out, Module)),
+ {module,Module} = LoadRc,
+
+ io:format("Calling...\n",[]),
+ {Time,CallResult} = timer:tc(Module, Module, []),
+ io:format("Time: ~p\n", [Time]),
CallResult.
%% Macros used by lists/1 below.
@@ -195,69 +193,78 @@ load_and_call(Out, Module) ->
%% Note: This module must be compiled with the inline_lists_funcs option.
lists(Config) when is_list(Config) ->
- ?line List = lists:seq(1, 20),
+ List = lists:seq(1, 20),
%% lists:map/2
- ?line ?TestHighOrder_2(map, (fun(E) ->
- R = E band 16#ff,
- put(?MODULE, [E|get(?MODULE)]),
- R
- end), List),
+ ?TestHighOrder_2(map,
+ (fun(E) ->
+ R = E band 16#ff,
+ put(?MODULE, [E|get(?MODULE)]),
+ R
+ end), List),
%% lists:flatmap/2
- ?line ?TestHighOrder_2(flatmap, (fun(E) ->
- R = lists:duplicate(E, E),
- put(?MODULE, [E|get(?MODULE)]),
- R
- end), List),
+ ?TestHighOrder_2(flatmap,
+ (fun(E) ->
+ R = lists:duplicate(E, E),
+ put(?MODULE, [E|get(?MODULE)]),
+ R
+ end), List),
%% lists:foreach/2
- ?line ?TestHighOrder_2(foreach,
- (fun(E) ->
- put(?MODULE, [E bor 7|get(?MODULE)])
- end), List),
+ ?TestHighOrder_2(foreach,
+ (fun(E) ->
+ put(?MODULE, [E bor 7|get(?MODULE)])
+ end), List),
%% lists:filter/2
- ?line ?TestHighOrder_2(filter, (fun(E) ->
- put(?MODULE, [E|get(?MODULE)]),
- (E bsr 1) band 1 =/= 0
- end), List),
+ ?TestHighOrder_2(filter,
+ (fun(E) ->
+ put(?MODULE, [E|get(?MODULE)]),
+ (E bsr 1) band 1 =/= 0
+ end), List),
%% lists:any/2
- ?line ?TestHighOrder_2(any, (fun(E) ->
- put(?MODULE, [E|get(?MODULE)]),
- false %Force it to go through all.
- end), List),
+ ?TestHighOrder_2(any,
+ (fun(E) ->
+ put(?MODULE, [E|get(?MODULE)]),
+ false %Force it to go through all.
+ end), List),
%% lists:all/2
- ?line ?TestHighOrder_2(all, (fun(E) ->
- put(?MODULE, [E|get(?MODULE)]),
- true %Force it to go through all.
- end), List),
+ ?TestHighOrder_2(all,
+ (fun(E) ->
+ put(?MODULE, [E|get(?MODULE)]),
+ true %Force it to go through all.
+ end), List),
%% lists:foldl/3
- ?line ?TestHighOrder_3(foldl, (fun(E, A) ->
- put(?MODULE, [E|get(?MODULE)]),
- A bxor E
- end), 0, List),
+ ?TestHighOrder_3(foldl,
+ (fun(E, A) ->
+ put(?MODULE, [E|get(?MODULE)]),
+ A bxor E
+ end), 0, List),
%% lists:foldr/3
- ?line ?TestHighOrder_3(foldr, (fun(E, A) ->
- put(?MODULE, [E|get(?MODULE)]),
- A bxor (bnot E)
- end), 0, List),
+ ?TestHighOrder_3(foldr,
+ (fun(E, A) ->
+ put(?MODULE, [E|get(?MODULE)]),
+ A bxor (bnot E)
+ end), 0, List),
%% lists:mapfoldl/3
- ?line ?TestHighOrder_3(mapfoldl, (fun(E, A) ->
- put(?MODULE, [E|get(?MODULE)]),
- {bnot E,A bxor (bnot E)}
- end), 0, List),
+ ?TestHighOrder_3(mapfoldl,
+ (fun(E, A) ->
+ put(?MODULE, [E|get(?MODULE)]),
+ {bnot E,A bxor (bnot E)}
+ end), 0, List),
%% lists:mapfoldr/3
- ?line ?TestHighOrder_3(mapfoldr, (fun(E, A) ->
- put(?MODULE, [E|get(?MODULE)]),
- {bnot E,A bxor (bnot E)}
- end), 0, List),
+ ?TestHighOrder_3(mapfoldr,
+ (fun(E, A) ->
+ put(?MODULE, [E|get(?MODULE)]),
+ {bnot E,A bxor (bnot E)}
+ end), 0, List),
%% Cleanup.
erase(?MODULE),
@@ -330,7 +337,7 @@ badarg(Reply, _A) ->
Reply.
otp_7223(Config) when is_list(Config) ->
- ?line {'EXIT', {{case_clause,{1}},_}} = (catch otp_7223_1(1)),
+ {'EXIT', {{case_clause,{1}},_}} = (catch otp_7223_1(1)),
ok.
-compile({inline,[{otp_7223_1,1}]}).
@@ -343,7 +350,7 @@ otp_7223_2({a}) ->
coverage(Config) when is_list(Config) ->
Mod = bsdecode,
- Src = filename:join(?config(data_dir, Config), Mod),
+ Src = filename:join(proplists:get_value(data_dir, Config), Mod),
{ok,Mod,_} = compile:file(Src, [binary,report,{inline,0},clint]),
{ok,Mod,_} = compile:file(Src, [binary,report,{inline,20},
verbose,clint]),
diff --git a/lib/compiler/test/inline_SUITE_data/attribute.erl b/lib/compiler/test/inline_SUITE_data/attribute.erl
index 08ef230c47..4bd9d65032 100644
--- a/lib/compiler/test/inline_SUITE_data/attribute.erl
+++ b/lib/compiler/test/inline_SUITE_data/attribute.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/inline_SUITE_data/bsdecode.erl b/lib/compiler/test/inline_SUITE_data/bsdecode.erl
index e72d5ec73d..f6419b33d1 100644
--- a/lib/compiler/test/inline_SUITE_data/bsdecode.erl
+++ b/lib/compiler/test/inline_SUITE_data/bsdecode.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/inline_SUITE_data/bsdes.erl b/lib/compiler/test/inline_SUITE_data/bsdes.erl
index a9717219d1..43d941f144 100644
--- a/lib/compiler/test/inline_SUITE_data/bsdes.erl
+++ b/lib/compiler/test/inline_SUITE_data/bsdes.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/inline_SUITE_data/decode1.erl b/lib/compiler/test/inline_SUITE_data/decode1.erl
index e89b5305a5..f390a32061 100644
--- a/lib/compiler/test/inline_SUITE_data/decode1.erl
+++ b/lib/compiler/test/inline_SUITE_data/decode1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/inline_SUITE_data/fname.erl b/lib/compiler/test/inline_SUITE_data/fname.erl
index 90da1d17ac..5df8ee6b8c 100644
--- a/lib/compiler/test/inline_SUITE_data/fname.erl
+++ b/lib/compiler/test/inline_SUITE_data/fname.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/inline_SUITE_data/itracer.erl b/lib/compiler/test/inline_SUITE_data/itracer.erl
index 66122e33b5..a6df21f233 100644
--- a/lib/compiler/test/inline_SUITE_data/itracer.erl
+++ b/lib/compiler/test/inline_SUITE_data/itracer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/inline_SUITE_data/maps_inline_test.erl b/lib/compiler/test/inline_SUITE_data/maps_inline_test.erl
index 83ac8b2084..776a1a5950 100644
--- a/lib/compiler/test/inline_SUITE_data/maps_inline_test.erl
+++ b/lib/compiler/test/inline_SUITE_data/maps_inline_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/lc_SUITE.erl b/lib/compiler/test/lc_SUITE.erl
index d10839ccf2..3cb49433ce 100644
--- a/lib/compiler/test/lc_SUITE.erl
+++ b/lib/compiler/test/lc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,11 @@
empty_generator/1,no_export/1,shadow/1,
effect/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
test_lib:recompile(?MODULE),
@@ -59,12 +61,9 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
end_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
basic(Config) when is_list(Config) ->
@@ -90,6 +89,18 @@ basic(Config) when is_list(Config) ->
%% Filter expressions with andalso/orelse.
"abc123" = alphanum("?abc123.;"),
+ %% Aliased patterns.
+ [] = [t || {C=D}={_,_} <- []],
+ [] = [X || {X,{Y}={X,X}} <- []],
+ [t] = [t || "a"++"b" = "ab" <- ["ab"]],
+
+ %% Strange filter block.
+ [] = [{X,Y} || {X} <- [], begin Y = X, Y =:= X end],
+ [{a,a}] = [{X,Y} || {X} <- [{a}], begin Y = X, Y =:= X end],
+
+ %% Not matching.
+ [] = [3 || {3=4} <- []],
+
%% Error cases.
[] = [{xx,X} || X <- L0, element(2, X) == no_no_no],
{'EXIT',_} = (catch [X || X <- L1, list_to_atom(X) == dum]),
@@ -171,7 +182,7 @@ no_gen_verify(Res, A, B) ->
ShouldBe -> ok;
_ ->
io:format("A = ~p; B = ~p; Expected = ~p, actual = ~p", [A,B,ShouldBe,Res]),
- ?t:fail()
+ ct:fail(failed)
end.
no_gen_eval(Fun, Res) ->
diff --git a/lib/compiler/test/map_SUITE.erl b/lib/compiler/test/map_SUITE.erl
index cff3b5deb4..36e82c1459 100644
--- a/lib/compiler/test/map_SUITE.erl
+++ b/lib/compiler/test/map_SUITE.erl
@@ -66,7 +66,9 @@
t_export/1,
%% errors in 18
- t_register_corruption/1
+ t_register_corruption/1,
+ t_bad_update/1
+
]).
suite() -> [].
@@ -117,7 +119,8 @@ all() ->
t_export,
%% errors in 18
- t_register_corruption
+ t_register_corruption,
+ t_bad_update
].
groups() -> [].
@@ -1284,6 +1287,7 @@ t_guard_update(Config) when is_list(Config) ->
first = map_guard_update(#{}, #{x=>first}),
second = map_guard_update(#{y=>old}, #{x=>second,y=>old}),
third = map_guard_update(#{x=>old,y=>old}, #{x=>third,y=>old}),
+ bad_map_guard_update(),
ok.
t_guard_update_large(Config) when is_list(Config) ->
@@ -1350,6 +1354,29 @@ map_guard_update(M1, M2) when M1#{x=>second} =:= M2 -> second;
map_guard_update(M1, M2) when M1#{x:=third} =:= M2 -> third;
map_guard_update(_, _) -> error.
+bad_map_guard_update() ->
+ do_bad_map_guard_update(fun burns/1),
+ do_bad_map_guard_update(fun turns/1),
+ ok.
+
+do_bad_map_guard_update(Fun) ->
+ do_bad_map_guard_update_1(Fun, #{}),
+ do_bad_map_guard_update_1(Fun, #{true=>1}),
+ ok.
+
+do_bad_map_guard_update_1(Fun, Value) ->
+ %% Note: The business with the seemingly redundant fun
+ %% disables inlining, which would otherwise change the
+ %% EXIT reason.
+ {'EXIT',{function_clause,_}} = (catch Fun(Value)),
+ ok.
+
+burns(Richmond) when not (Richmond#{true := 0}); [Richmond] ->
+ specification.
+
+turns(Richmond) when not (Richmond#{true => 0}); [Richmond] ->
+ specification.
+
t_guard_receive(Config) when is_list(Config) ->
M0 = #{ id => 0 },
Pid = spawn_link(fun() -> guard_receive_loop() end),
@@ -1479,7 +1506,7 @@ t_guard_fun(Config) when is_list(Config) ->
{'EXIT', {function_clause,[{?MODULE,_,[#{s:=none,v:=none}],_}|_]}} -> ok;
{'EXIT', {{case_clause,_},_}} -> {comment,inlined};
Other ->
- test_server:fail({no_match, Other})
+ ct:fail({no_match, Other})
end.
@@ -1565,7 +1592,7 @@ t_build_and_match_empty_val(Config) when is_list(Config) ->
{'EXIT',{function_clause,_}} -> ok;
{'EXIT', {{case_clause,_},_}} -> {comment,inlined};
Other ->
- test_server:fail({no_match, Other})
+ ct:fail({no_match, Other})
end.
t_build_and_match_val(Config) when is_list(Config) ->
@@ -1583,7 +1610,7 @@ t_build_and_match_val(Config) when is_list(Config) ->
{'EXIT',{function_clause,_}} -> ok;
{'EXIT', {{case_clause,_},_}} -> {comment,inlined};
Other ->
- test_server:fail({no_match, Other})
+ ct:fail({no_match, Other})
end.
t_build_and_match_nil(Config) when is_list(Config) ->
@@ -1885,7 +1912,7 @@ register_corruption_dummy_call(A,B,C) -> {A,B,C}.
t_frequency_table(Config) when is_list(Config) ->
- random:seed({13,1337,54}), % pseudo random
+ rand:seed(exsplus, {13,1337,54}), % pseudo random
N = 100000,
Ts = rand_terms(N),
#{ n:=N, tf := Tf } = frequency_table(Ts,#{ n=>0, tf => #{}}),
@@ -1922,13 +1949,26 @@ validate_frequency([{T,C}|Fs],Tf) ->
validate_frequency([], _) -> ok.
+t_bad_update(_Config) ->
+ {#{0.0:=Id},#{}} = properly(#{}),
+ 42 = Id(42),
+ {'EXIT',{{badmap,_},_}} = (catch increase(0)),
+ ok.
+
+properly(Item) ->
+ {Item#{0.0 => fun id/1},Item}.
+
+increase(Allows) ->
+ catch fun() -> Allows end#{[] => +Allows, "warranty" => fun id/1}.
+
+
%% aux
rand_terms(0) -> [];
rand_terms(N) -> [rand_term()|rand_terms(N-1)].
rand_term() ->
- case random:uniform(6) of
+ case rand:uniform(6) of
1 -> rand_binary();
2 -> rand_number();
3 -> rand_atom();
@@ -1938,21 +1978,21 @@ rand_term() ->
end.
rand_binary() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> <<>>;
2 -> <<"hi">>;
3 -> <<"message text larger than 64 bytes. yep, message text larger than 64 bytes.">>
end.
rand_number() ->
- case random:uniform(3) of
- 1 -> random:uniform(5);
- 2 -> float(random:uniform(5));
- 3 -> 1 bsl (63 + random:uniform(3))
+ case rand:uniform(3) of
+ 1 -> rand:uniform(5);
+ 2 -> float(rand:uniform(5));
+ 3 -> 1 bsl (63 + rand:uniform(3))
end.
rand_atom() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> hi;
2 -> some_atom;
3 -> some_other_atom
@@ -1960,21 +2000,21 @@ rand_atom() ->
rand_tuple() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> {ok, rand_term()}; % careful
2 -> {1, 2, 3};
3 -> {<<"yep">>, 1337}
end.
rand_list() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> "hi";
2 -> [1,rand_term()]; % careful
3 -> [improper|list]
end.
rand_map() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> #{ hi => 3 };
2 -> #{ wat => rand_term(), other => 3 }; % careful
3 -> #{ hi => 42, other => 42, yet_anoter => 1337 }
diff --git a/lib/compiler/test/match_SUITE.erl b/lib/compiler/test/match_SUITE.erl
index 67d668f650..127679ba69 100644
--- a/lib/compiler/test/match_SUITE.erl
+++ b/lib/compiler/test/match_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,12 +21,12 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
- pmatch/1,mixed/1,aliases/1,match_in_call/1,
- untuplify/1,shortcut_boolean/1,letify_guard/1,
+ pmatch/1,mixed/1,aliases/1,non_matching_aliases/1,
+ match_in_call/1,untuplify/1,shortcut_boolean/1,letify_guard/1,
selectify/1,underscore/1,match_map/1,map_vars_used/1,
- coverage/1]).
+ coverage/1,grab_bag/1,literal_binary/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -36,9 +36,11 @@ all() ->
groups() ->
[{p,[parallel],
- [pmatch,mixed,aliases,match_in_call,untuplify,
+ [pmatch,mixed,aliases,non_matching_aliases,
+ match_in_call,untuplify,
shortcut_boolean,letify_guard,selectify,
- underscore,match_map,map_vars_used,coverage]}].
+ underscore,match_map,map_vars_used,coverage,
+ grab_bag,literal_binary]}].
init_per_suite(Config) ->
@@ -55,10 +57,10 @@ end_per_group(_GroupName, Config) ->
pmatch(Config) when is_list(Config) ->
- ?line ok = doit(1),
- ?line ok = doit(2),
- ?line {error,baz} = doit(3),
- ?line {error,foobar} = doit(4),
+ ok = doit(1),
+ ok = doit(2),
+ {error,baz} = doit(3),
+ {error,foobar} = doit(4),
ok.
%% Thanks to Tobias Lindahl (HiPE).
@@ -78,13 +80,13 @@ doit(X) ->
end.
mixed(Config) when is_list(Config) ->
- ?line glufs = mixit(1),
- ?line klafs = mixit(2),
- ?line fnurra = mixit(3),
- ?line usch = mixit(4),
- ?line {error,blurf} = mixit(5),
- ?line {error,87987987} = mixit(6),
- ?line {error,{a,b,c}} = mixit(7),
+ glufs = mixit(1),
+ klafs = mixit(2),
+ fnurra = mixit(3),
+ usch = mixit(4),
+ {error,blurf} = mixit(5),
+ {error,87987987} = mixit(6),
+ {error,{a,b,c}} = mixit(7),
ok.
mixit(X) ->
@@ -93,9 +95,9 @@ mixit(X) ->
2 -> b;
3 -> 42;
4 -> 77;
- 5 -> blurf;
- 6 -> 87987987;
- 7 -> {a,b,c}
+ 4+1 -> blurf;
+ 5+1 -> 87987987;
+ 6+1 -> {a,b,c}
end of
a -> glufs;
b -> klafs;
@@ -106,48 +108,41 @@ mixit(X) ->
aliases(Config) when is_list(Config) ->
%% Lists/strings.
- ?line ok = str_alias("abc"),
- ?line ok = str_alias("def"),
- ?line ok = str_alias("ghi"),
- ?line ok = str_alias("klm"),
- ?line ok = str_alias("qrs"),
- ?line ok = str_alias("xy"),
- ?line ok = str_alias(""),
- ?line ok = str_alias([]),
- ?line error = str_alias("blurf"),
+ ok = str_alias("abc"),
+ ok = str_alias("def"),
+ ok = str_alias("ghi"),
+ ok = str_alias("klm"),
+ ok = str_alias("qrs"),
+ ok = str_alias("xy"),
+ ok = str_alias(""),
+ ok = str_alias([]),
+ error = str_alias("blurf"),
%% Characters/integers.
- ?line ok = char_alias($v),
- ?line ok = char_alias(118),
- ?line ok = char_alias($w),
- ?line ok = char_alias(119),
- ?line ok = char_alias(42),
- ?line ok = char_alias(3.0),
- ?line error = char_alias($_),
- ?line error = char_alias(0),
-
- ?line {42,42,42} = three(42),
-
- ?line {1,42,99,1,42,99} = tuple_alias({1,42,99}),
- ?line {-10,20,-10,20,-10,20} = tuple_alias({-10,20}),
- ?line 6 = tup_lit_alias({1,2,3}),
- ?line 6 = tup_lit_alias_rev({1,2,3}),
-
- ?line {42,42,42,42} = multiple_aliases_1(42),
- ?line {7,7,7} = multiple_aliases_2(7),
- ?line {{a,b},{a,b},{a,b}} = multiple_aliases_3({a,b}),
+ ok = char_alias($v),
+ ok = char_alias(118),
+ ok = char_alias($w),
+ ok = char_alias(119),
+ ok = char_alias(42),
+ ok = char_alias(3.0),
+ error = char_alias($_),
+ error = char_alias(0),
+
+ {42,42,42} = three(42),
+
+ {1,42,99,1,42,99} = tuple_alias({1,42,99}),
+ {-10,20,-10,20,-10,20} = tuple_alias({-10,20}),
+ 6 = tup_lit_alias({1,2,3}),
+ 6 = tup_lit_alias_rev({1,2,3}),
+
+ {42,42,42,42} = multiple_aliases_1(42),
+ {7,7,7} = multiple_aliases_2(7),
+ {{a,b},{a,b},{a,b}} = multiple_aliases_3({a,b}),
%% Lists/literals.
- ?line {a,b} = list_alias1([a,b]),
- ?line {a,b} = list_alias2([a,b]),
- ?line {a,b} = list_alias3([a,b]),
-
- %% Non-matching aliases.
- none = mixed_aliases(<<42>>),
- none = mixed_aliases([b]),
- none = mixed_aliases([d]),
- none = mixed_aliases({a,42}),
- none = mixed_aliases(42),
+ {a,b} = list_alias1([a,b]),
+ {a,b} = list_alias2([a,b]),
+ {a,b} = list_alias3([a,b]),
ok.
@@ -252,23 +247,90 @@ list_alias2([X,Y]=[a,b]) ->
list_alias3([X,b]=[a,Y]) ->
{X,Y}.
+non_matching_aliases(_Config) ->
+ none = mixed_aliases(<<42>>),
+ none = mixed_aliases([b]),
+ none = mixed_aliases([d]),
+ none = mixed_aliases({a,42}),
+ none = mixed_aliases(42),
+
+ {'EXIT',{{badmatch,42},_}} = (catch nomatch_alias(42)),
+ {'EXIT',{{badmatch,job},_}} = (catch entirely()),
+ {'EXIT',{{badmatch,associates},_}} = (catch printer()),
+ {'EXIT',{{badmatch,borogoves},_}} = (catch tench()),
+
+ put(perch, 0),
+ {'EXIT',{{badmatch,{spine,42}},_}} = (catch perch(42)),
+ 1 = erase(perch),
+
+ put(salmon, 0),
+ {'EXIT',{{badmatch,mimsy},_}} = (catch salmon()),
+ 1 = erase(salmon),
+
+ put(shark, 0),
+ {'EXIT',{{badmatch,_},_}} = (catch shark()),
+ 1 = erase(shark),
+
+ {'EXIT',{{badmatch,_},_}} = (catch radio(research)),
+ ok.
+
mixed_aliases(<<X:8>> = x) -> {a,X};
mixed_aliases([b] = <<X:8>>) -> {b,X};
mixed_aliases(<<X:8>> = {a,X}) -> {c,X};
mixed_aliases([X] = <<X:8>>) -> {d,X};
mixed_aliases(_) -> none.
+nomatch_alias(I) ->
+ {ok={A,B}} = id(I),
+ {A,B}.
+
+entirely() ->
+ 0(((Voice = true) = cool) = job),
+ [receive _ -> Voice end || banking <- printer].
+
+printer() ->
+ {[Indoor] = [] = associates},
+ [ireland || Indoor <- Indoor].
+
+tench() ->
+ E = begin
+ [A] = [] = borogoves,
+ A + 1
+ end,
+ E + 7 * A.
+
+perch(X) ->
+ begin
+ put(perch, get(perch)+1),
+ [A] = [] = {spine,X}
+ end.
+
+salmon() ->
+ {put(salmon, get(salmon)+1),#{key:=([A]=[])}=mimsy,exit(fail)},
+ A + 10.
+
+shark() ->
+ (hello = there) = (catch shark(put(shark, get(shark)+1), a = b)).
+
+shark(_, _) ->
+ ok.
+
+radio(research) ->
+ (connection = proof) =
+ (catch erlang:trace_pattern(catch mechanisms + assist,
+ summary = mechanisms)).
+
%% OTP-7018.
match_in_call(Config) when is_list(Config) ->
- ?line mac_a(0),
- ?line mac_b(1),
- ?line mac_c(42),
- ?line mac_d(42),
- ?line mac_e({gurka,42}),
+ mac_a(0),
+ mac_b(1),
+ mac_c(42),
+ mac_d(42),
+ mac_e({gurka,42}),
- ?line [{2,2},{2,2}] = mac_lc([{2,any},{2,2}]),
- ?line {'EXIT',_} = (catch mac_lc([{1,1}])),
+ [{2,2},{2,2}] = mac_lc([{2,any},{2,2}]),
+ {'EXIT',_} = (catch mac_lc([{1,1}])),
ok.
@@ -313,8 +375,8 @@ gurka({gurka,X}, X) -> ok.
untuplify(Config) when is_list(Config) ->
%% We do this to cover sys_core_fold:unalias_pat/1.
- ?line {1,2,3,4,alias,{[1,2],{3,4},alias}} = untuplify_1([1,2], {3,4}, alias),
- ?line error = untuplify_1([1,2], {3,4}, 42),
+ {1,2,3,4,alias,{[1,2],{3,4},alias}} = untuplify_1([1,2], {3,4}, alias),
+ error = untuplify_1([1,2], {3,4}, 42),
ok.
untuplify_1(A, B, C) ->
@@ -329,11 +391,11 @@ untuplify_1(A, B, C) ->
%% Coverage of beam_dead:shortcut_boolean_label/4.
shortcut_boolean(Config) when is_list(Config) ->
- ?line false = shortcut_boolean_1([0]),
- ?line true = shortcut_boolean_1({42}),
- ?line maybe = shortcut_boolean_1(self()),
- ?line {'EXIT',_} = (catch shortcut_boolean_1([a,b])),
- ?line {'EXIT',_} = (catch shortcut_boolean_1({a,b})),
+ false = shortcut_boolean_1([0]),
+ true = shortcut_boolean_1({42}),
+ maybe = shortcut_boolean_1(self()),
+ {'EXIT',_} = (catch shortcut_boolean_1([a,b])),
+ {'EXIT',_} = (catch shortcut_boolean_1({a,b})),
ok.
shortcut_boolean_1(X) ->
@@ -352,8 +414,8 @@ shortcut_boolean_1(X) ->
%% Test sys_core_fold:letify_guard/3.
letify_guard(Config) when is_list(Config) ->
- ?line {-15,a} = letify_guard(-15, a),
- ?line 5 = letify_guard(2, 3),
+ {-15,a} = letify_guard(-15, a),
+ 5 = letify_guard(2, 3),
ok.
letify_guard(A, B) ->
@@ -369,18 +431,18 @@ letify_guard(A, B) ->
%% instructions in beam_dead and beam_peep.
selectify(Config) when is_list(Config) ->
- ?line integer = sel_different_types({r,42}),
- ?line atom = sel_different_types({r,forty_two}),
- ?line none = sel_different_types({r,18}),
- ?line {'EXIT',_} = (catch sel_different_types([a,b,c])),
-
- ?line integer = sel_same_value({r,42}),
- ?line error = sel_same_value({r,100}),
- ?line error = sel_same_value(a),
-
- ?line integer42 = sel_same_value2(42),
- ?line integer43 = sel_same_value2(43),
- ?line error = sel_same_value2(44),
+ integer = sel_different_types({r,42}),
+ atom = sel_different_types({r,forty_two}),
+ none = sel_different_types({r,18}),
+ {'EXIT',_} = (catch sel_different_types([a,b,c])),
+
+ integer = sel_same_value({r,42}),
+ error = sel_same_value({r,100}),
+ error = sel_same_value(a),
+
+ integer42 = sel_same_value2(42),
+ integer43 = sel_same_value2(43),
+ error = sel_same_value2(44),
ok.
sel_different_types({r,_}=T) when element(2, T) =:= forty_two ->
@@ -449,7 +511,10 @@ do_map_vars_used(X, Y, Map) ->
coverage(Config) when is_list(Config) ->
%% Cover beam_dead.
ok = coverage_1(x, a),
- ok = coverage_1(x, b).
+ ok = coverage_1(x, b),
+
+ %% Cover sys_pre_expand.
+ ok = coverage_3("abc").
coverage_1(B, Tag) ->
case Tag of
@@ -460,4 +525,64 @@ coverage_1(B, Tag) ->
coverage_2(1, a, x) -> ok;
coverage_2(2, b, x) -> ok.
+coverage_3([$a]++[]++"bc") -> ok.
+
+grab_bag(_Config) ->
+ [_|T] = id([a,b,c]),
+ [b,c] = id(T),
+
+ T1 = fun() ->
+ [_|_] = x
+ end,
+ {'EXIT',_} = (catch T1()),
+
+ T2 = fun(A, B) ->
+ case {{element(1, A),element(2, B)},
+ {element(2, A),element(2, B)}} of
+ {Same,Same} -> ok;
+ {{0,1},{up,X}} -> id(X);
+ {_,{X,_}} -> id(X)
+ end
+ end,
+ ok = T2({a,a,z,z}, {z,a,z}),
+ 1 = T2({0,up}, {zzz,1}),
+ y = T2({x,y}, {a,z,z}),
+
+ %% OTP-5244.
+ L = [{stretch,0,0},
+ {bad,[]},
+ {bad,atom},
+ {bad,0},
+ {bad,16#AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA},
+ {bad,16#555555555555555555555555555555555555555555555555555}],
+ ok = grab_bag_remove_failure(L, unit, 0),
+
+ ok.
+
+grab_bag_remove_failure([], _Unit, _MaxFailure) ->
+ ok;
+grab_bag_remove_failure([{bad,Bad}|_], _Unit, _MaxFailure) ->
+ Bad;
+grab_bag_remove_failure([{stretch,_,Mi}=Stretch | Specs], Unit, _MaxFailure) ->
+ {MinMax,NewMaxFailure} = id({min,1}),
+ case {MinMax,grab_bag_remove_failure(Specs, Unit, NewMaxFailure)} of
+ {min,{NewMaxFailure,Rest}} ->
+ {done,[{fixed,Mi} | Rest]};
+ {min,_} when Specs =/= [] ->
+ grab_bag_remove_failure([Stretch|tl(Specs)], Unit, NewMaxFailure);
+ {min,_} ->
+ ok
+ end.
+
+%% Regression in 19.0, reported by Alexei Sholik
+literal_binary(_Config) ->
+ 3 = literal_binary_match(bar,<<"y">>),
+ ok.
+
+literal_binary_match(bar, <<"x">>) -> 1;
+literal_binary_match(_, <<"x">>) -> 2;
+literal_binary_match(_, <<"y">>) -> 3;
+literal_binary_match(_, _) -> fail.
+
+
id(I) -> I.
diff --git a/lib/compiler/test/misc_SUITE.erl b/lib/compiler/test/misc_SUITE.erl
index 8606935504..f543f0d4de 100644
--- a/lib/compiler/test/misc_SUITE.erl
+++ b/lib/compiler/test/misc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,9 +23,10 @@
init_per_group/2,end_per_group/2,
init_per_testcase/2,end_per_testcase/2,
tobias/1,empty_string/1,md5/1,silly_coverage/1,
- confused_literals/1,integer_encoding/1,override_bif/1]).
+ confused_literals/1,integer_encoding/0,integer_encoding/1,
+ override_bif/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% For the override_bif testcase.
%% NB, no other testcases in this testsuite can use these without erlang:prefix!
@@ -38,22 +39,25 @@
-compile({no_auto_import,[byte_size/1]}).
-import(erlang,[byte_size/1]).
-
+%% Cover the code for callback handling.
+-callback must_define_this_one() -> 'ok'.
+-callback do_something_strange(atom()) -> 'ok'.
+-optional_callbacks([do_something_strange/1]).
+-optional_callbacks([ignore_me]). %Invalid; ignored.
%% Include an opaque declaration to cover the stripping of
%% opaque types from attributes in v3_kernel.
-opaque misc_SUITE_test_cases() :: [atom()].
init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = test_server:timetrap(?t:minutes(10)),
- [{watchdog,Dog}|Config].
+ Config.
end_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,10}}].
-spec all() -> misc_SUITE_test_cases().
all() ->
@@ -88,32 +92,27 @@ abs(_N) ->
binary_part(_,_,_) ->
dummy_bp.
-% Make sure that auto-imported BIF's are overridden correctly
-
-override_bif(suite) ->
- [];
-override_bif(doc) ->
- ["Test dat local functions and imports override auto-imported BIFs."];
+%% Test that local functions and imports override auto-imported BIFs.
override_bif(Config) when is_list(Config) ->
- ?line dummy_abs = abs(1),
- ?line dummy_bp = binary_part(<<"hello">>,1,1),
- ?line dummy = binary_part(<<"hello">>,{1,1}),
- ?line 1 = erlang:abs(1),
- ?line <<"e">> = erlang:binary_part(<<"hello">>,1,1),
- ?line <<"e">> = erlang:binary_part(<<"hello">>,{1,1}),
+ dummy_abs = abs(1),
+ dummy_bp = binary_part(<<"hello">>,1,1),
+ dummy = binary_part(<<"hello">>,{1,1}),
+ 1 = erlang:abs(1),
+ <<"e">> = erlang:binary_part(<<"hello">>,1,1),
+ <<"e">> = erlang:binary_part(<<"hello">>,{1,1}),
F = fun(X) when byte_size(X) =:= 4 ->
four;
(X) ->
byte_size(X)
end,
- ?line four = F(<<1,2,3,4>>),
- ?line 5 = F(<<1,2,3,4,5>>),
+ four = F(<<1,2,3,4>>),
+ 5 = F(<<1,2,3,4,5>>),
ok.
%% A bug reported by Tobias Lindahl for a development version of R11B.
tobias(Config) when is_list(Config) ->
- ?line 1 = tobias_1([1,2,3]),
+ 1 = tobias_1([1,2,3]),
ok.
tobias_1([H|_T]) ->
@@ -134,7 +133,7 @@ tobias_2(_, _) ->
-record(r, {s = ""}).
empty_string(Config) when is_list(Config) ->
- ?line #r{s="x"} = empty_string_1(#r{}),
+ #r{s="x"} = empty_string_1(#r{}),
ok.
empty_string_1(T) ->
@@ -149,15 +148,15 @@ md5(Config) when is_list(Config) ->
end.
md5() ->
- ?line Dir = filename:dirname(code:which(?MODULE)),
- ?line Beams = filelib:wildcard(filename:join(Dir, "*.beam")),
- ?line io:format("Found ~w beam files", [length(Beams)]),
- ?line lists:foreach(fun md5_1/1, Beams).
+ Dir = filename:dirname(code:which(?MODULE)),
+ Beams = filelib:wildcard(filename:join(Dir, "*.beam")),
+ io:format("Found ~w beam files", [length(Beams)]),
+ lists:foreach(fun md5_1/1, Beams).
md5_1(Beam) ->
- ?line {ok,{Mod,[Vsn]}} = beam_lib:version(Beam),
- ?line {ok,Code} = file:read_file(Beam),
- ?line {Mod,<<Vsn:128>>} = {Mod,code:module_md5(Code)}.
+ {ok,{Mod,[Vsn]}} = beam_lib:version(Beam),
+ {ok,Code} = file:read_file(Beam),
+ {Mod,<<Vsn:128>>} = {Mod,code:module_md5(Code)}.
%% Cover some code that handles internal errors.
@@ -166,9 +165,9 @@ silly_coverage(Config) when is_list(Config) ->
BadCoreErlang = {c_module,[],
name,[],[],
[{{c_var,[],{foo,2}},seriously_bad_body}]},
- ?line expect_error(fun() -> sys_core_fold:module(BadCoreErlang, []) end),
- ?line expect_error(fun() -> sys_core_dsetel:module(BadCoreErlang, []) end),
- ?line expect_error(fun() -> v3_kernel:module(BadCoreErlang, []) end),
+ expect_error(fun() -> sys_core_fold:module(BadCoreErlang, []) end),
+ expect_error(fun() -> sys_core_dsetel:module(BadCoreErlang, []) end),
+ expect_error(fun() -> v3_kernel:module(BadCoreErlang, []) end),
%% v3_life
BadKernel = {k_mdef,[],?MODULE,
@@ -178,11 +177,11 @@ silly_coverage(Config) when is_list(Config) ->
{k,[],[],[]},
f,0,[],
seriously_bad_body}]},
- ?line expect_error(fun() -> v3_life:module(BadKernel, []) end),
+ expect_error(fun() -> v3_life:module(BadKernel, []) end),
%% v3_codegen
CodegenInput = {?MODULE,[{foo,0}],[],[{function,foo,0,[a|b],a,b,[]}]},
- ?line expect_error(fun() -> v3_codegen:module(CodegenInput, []) end),
+ expect_error(fun() -> v3_codegen:module(CodegenInput, []) end),
%% beam_a
BeamAInput = {?MODULE,[{foo,0}],[],
@@ -192,13 +191,25 @@ silly_coverage(Config) when is_list(Config) ->
{label,2}|non_proper_list]}],99},
expect_error(fun() -> beam_a:module(BeamAInput, []) end),
+ %% beam_reorder
+ BlockInput = {?MODULE,[{foo,0}],[],
+ [{function,foo,0,2,
+ [{label,1},
+ {func_info,{atom,?MODULE},{atom,foo},0},
+ {label,2}|non_proper_list]}],99},
+ expect_error(fun() -> beam_reorder:module(BlockInput, []) end),
+
%% beam_block
BlockInput = {?MODULE,[{foo,0}],[],
[{function,foo,0,2,
[{label,1},
{func_info,{atom,?MODULE},{atom,foo},0},
{label,2}|non_proper_list]}],99},
- ?line expect_error(fun() -> beam_block:module(BlockInput, []) end),
+ expect_error(fun() -> beam_block:module(BlockInput, []) end),
+
+ %% beam_bs
+ BsInput = BlockInput,
+ expect_error(fun() -> beam_bs:module(BsInput, []) end),
%% beam_type
TypeInput = {?MODULE,[{foo,0}],[],
@@ -224,7 +235,7 @@ silly_coverage(Config) when is_list(Config) ->
[{label,1},
{func_info,{atom,?MODULE},{atom,foo},0},
{label,2}|non_proper_list]}],99},
- ?line expect_error(fun() -> beam_bool:module(BoolInput, []) end),
+ expect_error(fun() -> beam_bool:module(BoolInput, []) end),
%% beam_dead. This is tricky. Our function must look OK to
%% beam_utils:clean_labels/1, but must crash beam_dead.
@@ -243,15 +254,18 @@ silly_coverage(Config) when is_list(Config) ->
{func_info,{atom,?MODULE},{atom,foo},0},
{label,2},
{jump,{f,42}}]}],99},
- ?line expect_error(fun() -> beam_clean:module(CleanInput, []) end),
+ expect_error(fun() -> beam_clean:module(CleanInput, []) end),
- %% beam_peep
+ %% beam_peep. This is tricky. Use a select instruction with
+ %% an odd number of elements in the list to crash
+ %% prune_redundant_values/2 but not beam_clean:clean_labels/1.
PeepInput = {?MODULE,[{foo,0}],[],
[{function,foo,0,2,
[{label,1},
{func_info,{atom,?MODULE},{atom,foo},0},
- {label,2}|non_proper_list]}],99},
- ?line expect_error(fun() -> beam_peep:module(PeepInput, []) end),
+ {label,2},{select,op,r,{f,2},[{f,2}]}]}],
+ 2},
+ expect_error(fun() -> beam_peep:module(PeepInput, []) end),
%% beam_bsm. This is tricky. Our function must be sane enough to not crash
%% btb_index/1, but must crash the main optimization pass.
@@ -262,7 +276,7 @@ silly_coverage(Config) when is_list(Config) ->
{label,2},
{test,bs_get_binary2,{f,99},0,[{x,0},{atom,all},1,[]],{x,0}},
{block,[a|b]}]}],0},
- ?line expect_error(fun() -> beam_bsm:module(BsmInput, []) end),
+ expect_error(fun() -> beam_bsm:module(BsmInput, []) end),
%% beam_receive.
ReceiveInput = {?MODULE,[{foo,0}],[],
@@ -272,7 +286,7 @@ silly_coverage(Config) when is_list(Config) ->
{label,2},
{call_ext,0,{extfunc,erlang,make_ref,0}},
{block,[a|b]}]}],0},
- ?line expect_error(fun() -> beam_receive:module(ReceiveInput, []) end),
+ expect_error(fun() -> beam_receive:module(ReceiveInput, []) end),
BeamZInput = {?MODULE,[{foo,0}],[],
[{function,foo,0,2,
@@ -295,27 +309,30 @@ expect_error(Fun) ->
try Fun() of
Any ->
io:format("~p", [Any]),
- ?t:fail(call_was_supposed_to_fail)
+ ct:fail(call_was_supposed_to_fail)
catch
Class:Reason ->
Stk = erlang:get_stacktrace(),
io:format("~p:~p\n~p\n", [Class,Reason,Stk]),
case {Class,Reason} of
{error,undef} ->
- ?t:fail(not_supposed_to_fail_with_undef);
+ ct:fail(not_supposed_to_fail_with_undef);
{_,_} ->
ok
end
end.
confused_literals(Config) when is_list(Config) ->
- ?line {0,infinity} = confused_literals_1(int),
- ?line {0.0,infinity} = confused_literals_1(float),
+ {0,infinity} = confused_literals_1(int),
+ {0.0,infinity} = confused_literals_1(float),
ok.
confused_literals_1(int) -> {0,infinity};
confused_literals_1(float) -> {0.0,infinity}.
+integer_encoding() ->
+ [{timetrap,{minutes,4}}].
+
integer_encoding(Config) when is_list(Config) ->
case ?MODULE of
misc_SUITE -> integer_encoding_1(Config);
@@ -323,22 +340,21 @@ integer_encoding(Config) when is_list(Config) ->
end.
integer_encoding_1(Config) ->
- Dog = test_server:timetrap(?t:minutes(4)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line SrcFile = filename:join(PrivDir, "misc_SUITE_integer_encoding.erl"),
- ?line DataFile = filename:join(PrivDir, "integer_encoding.data"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SrcFile = filename:join(PrivDir, "misc_SUITE_integer_encoding.erl"),
+ DataFile = filename:join(PrivDir, "integer_encoding.data"),
Mod = misc_SUITE_integer_encoding,
%% Create files.
- ?line {ok,Src} = file:open(SrcFile, [write]),
- ?line {ok,Data} = file:open(DataFile, [write]),
+ {ok,Src} = file:open(SrcFile, [write]),
+ {ok,Data} = file:open(DataFile, [write]),
io:format(Src, "-module(~s).\n", [Mod]),
io:put_chars(Src, "-export([t/1]).\n"),
io:put_chars(Src, "t(Last) ->[\n"),
io:put_chars(Data, "[\n"),
- ?line do_integer_encoding(-(id(1) bsl 10000), Src, Data),
- ?line do_integer_encoding(id(1) bsl 10000, Src, Data),
+ do_integer_encoding(-(id(1) bsl 10000), Src, Data),
+ do_integer_encoding(id(1) bsl 10000, Src, Data),
do_integer_encoding(1024, 0, Src, Data),
_ = [begin
B = 1 bsl I,
@@ -350,32 +366,31 @@ integer_encoding_1(Config) ->
do_integer_encoding(B+1, Src, Data)
end || I <- lists:seq(1, 128)],
io:put_chars(Src, "Last].\n\n"),
- ?line ok = file:close(Src),
+ ok = file:close(Src),
io:put_chars(Data, "0].\n\n"),
- ?line ok = file:close(Data),
+ ok = file:close(Data),
%% Compile and load Erlang module.
- ?line SrcRoot = filename:rootname(SrcFile),
- ?line {ok,Mod,Binary} = compile:file(SrcRoot, [binary,report]),
- ?line {module,Mod} = code:load_binary(Mod, SrcRoot, Binary),
+ SrcRoot = filename:rootname(SrcFile),
+ {ok,Mod,Binary} = compile:file(SrcRoot, [binary,report]),
+ {module,Mod} = code:load_binary(Mod, SrcRoot, Binary),
%% Compare lists.
- ?line List = Mod:t(0),
- ?line {ok,[List]} = file:consult(DataFile),
+ List = Mod:t(0),
+ {ok,[List]} = file:consult(DataFile),
OneBsl10000 = id(1) bsl 10000,
- ?line [-(1 bsl 10000),OneBsl10000|_] = List,
+ [-(1 bsl 10000),OneBsl10000|_] = List,
%% Cleanup.
- ?line file:delete(SrcFile),
- ?line file:delete(DataFile),
- ?t:timetrap_cancel(Dog),
+ file:delete(SrcFile),
+ file:delete(DataFile),
ok.
do_integer_encoding(0, _, _, _) -> ok;
do_integer_encoding(N, I0, Src, Data) ->
- I1 = (I0 bsl 5) bor (random:uniform(32) - 1),
+ I1 = (I0 bsl 5) bor (rand:uniform(32) - 1),
do_integer_encoding(I1, Src, Data),
- I2 = -(I1 bxor (random:uniform(32) - 1)),
+ I2 = -(I1 bxor (rand:uniform(32) - 1)),
do_integer_encoding(I2, Src, Data),
do_integer_encoding(N-1, I1, Src, Data).
diff --git a/lib/compiler/test/num_bif_SUITE.erl b/lib/compiler/test/num_bif_SUITE.erl
index d54fa203f0..7eac90bac3 100644
--- a/lib/compiler/test/num_bif_SUITE.erl
+++ b/lib/compiler/test/num_bif_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(num_bif_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Tests optimization of the BIFs:
%% abs/1
@@ -65,68 +65,68 @@ end_per_group(_GroupName, Config) ->
t_abs(Config) when is_list(Config) ->
%% Floats.
- ?line 5.5 = abs(5.5),
- ?line 0.0 = abs(0.0),
- ?line 100.0 = abs(-100.0),
+ 5.5 = abs(5.5),
+ 0.0 = abs(0.0),
+ 100.0 = abs(-100.0),
%% Integers.
- ?line 5 = abs(5),
- ?line 0 = abs(0),
- ?line 100 = abs(-100),
+ 5 = abs(5),
+ 0 = abs(0),
+ 100 = abs(-100),
%% The largest smallnum. OTP-3190.
- ?line X = (1 bsl 27) - 1,
- ?line X = abs(X),
- ?line X = abs(X-1)+1,
- ?line X = abs(X+1)-1,
- ?line X = abs(-X),
- ?line X = abs(-X-1)-1,
- ?line X = abs(-X+1)+1,
+ X = (1 bsl 27) - 1,
+ X = abs(X),
+ X = abs(X-1)+1,
+ X = abs(X+1)-1,
+ X = abs(-X),
+ X = abs(-X-1)-1,
+ X = abs(-X+1)+1,
%% Bignums.
BigNum = 13984792374983749,
- ?line BigNum = abs(BigNum),
- ?line BigNum = abs(-BigNum),
+ BigNum = abs(BigNum),
+ BigNum = abs(-BigNum),
ok.
t_float(Config) when is_list(Config) ->
- ?line 0.0 = float(0),
- ?line 2.5 = float(2.5),
- ?line 0.0 = float(0.0),
- ?line -100.55 = float(-100.55),
- ?line 42.0 = float(42),
- ?line -100.0 = float(-100),
+ 0.0 = float(0),
+ 2.5 = float(2.5),
+ 0.0 = float(0.0),
+ -100.55 = float(-100.55),
+ 42.0 = float(42),
+ -100.0 = float(-100),
%% Bignums.
- ?line 4294967305.0 = float(4294967305),
- ?line -4294967305.0 = float(-4294967305),
+ 4294967305.0 = float(4294967305),
+ -4294967305.0 = float(-4294967305),
%% Extremly big bignums.
- ?line Big = list_to_integer(lists:duplicate(2000, $1)),
- ?line {'EXIT', {badarg, _}} = (catch float(Big)),
+ Big = list_to_integer(lists:duplicate(2000, $1)),
+ {'EXIT', {badarg, _}} = (catch float(Big)),
%% Invalid types and lists.
- ?line {'EXIT', {badarg, _}} = (catch list_to_integer(atom)),
- ?line {'EXIT', {badarg, _}} = (catch list_to_integer(123)),
- ?line {'EXIT', {badarg, _}} = (catch list_to_integer([$1, [$2]])),
- ?line {'EXIT', {badarg, _}} = (catch list_to_integer("1.2")),
- ?line {'EXIT', {badarg, _}} = (catch list_to_integer("a")),
- ?line {'EXIT', {badarg, _}} = (catch list_to_integer("")),
+ {'EXIT', {badarg, _}} = (catch list_to_integer(atom)),
+ {'EXIT', {badarg, _}} = (catch list_to_integer(123)),
+ {'EXIT', {badarg, _}} = (catch list_to_integer([$1, [$2]])),
+ {'EXIT', {badarg, _}} = (catch list_to_integer("1.2")),
+ {'EXIT', {badarg, _}} = (catch list_to_integer("a")),
+ {'EXIT', {badarg, _}} = (catch list_to_integer("")),
ok.
%% Tests float_to_list/1.
t_float_to_list(Config) when is_list(Config) ->
- ?line test_ftl("0.0e+0", 0.0),
- ?line test_ftl("2.5e+1", 25.0),
- ?line test_ftl("2.5e+0", 2.5),
- ?line test_ftl("2.5e-1", 0.25),
- ?line test_ftl("-3.5e+17", -350.0e15),
+ test_ftl("0.0e+0", 0.0),
+ test_ftl("2.5e+1", 25.0),
+ test_ftl("2.5e+0", 2.5),
+ test_ftl("2.5e-1", 0.25),
+ test_ftl("-3.5e+17", -350.0e15),
ok.
test_ftl(Expect, Float) ->
- %% No ?line on the next line -- we want the line number from t_float_to_list.
+ %% No on the next line -- we want the line number from t_float_to_list.
Expect = remove_zeros(lists:reverse(float_to_list(Float)), []).
%% Removes any non-significant zeros in a floating point number.
@@ -148,36 +148,36 @@ remove_zeros([], Result) ->
%% Tests integer_to_list/1.
t_integer_to_list(Config) when is_list(Config) ->
- ?line "0" = integer_to_list(0),
- ?line "42" = integer_to_list(42),
- ?line "-42" = integer_to_list(-42),
- ?line "-42" = integer_to_list(-42),
- ?line "32768" = integer_to_list(32768),
- ?line "268435455" = integer_to_list(268435455),
- ?line "-268435455" = integer_to_list(-268435455),
- ?line "123456932798748738738" = integer_to_list(123456932798748738738),
- ?line Big_List = lists:duplicate(2000, $1),
- ?line Big = list_to_integer(Big_List),
- ?line Big_List = integer_to_list(Big),
+ "0" = integer_to_list(0),
+ "42" = integer_to_list(42),
+ "-42" = integer_to_list(-42),
+ "-42" = integer_to_list(-42),
+ "32768" = integer_to_list(32768),
+ "268435455" = integer_to_list(268435455),
+ "-268435455" = integer_to_list(-268435455),
+ "123456932798748738738" = integer_to_list(123456932798748738738),
+ Big_List = lists:duplicate(2000, $1),
+ Big = list_to_integer(Big_List),
+ Big_List = integer_to_list(Big),
ok.
%% Tests list_to_float/1.
t_list_to_float_safe(Config) when is_list(Config) ->
- ?line 0.0 = list_to_float("0.0"),
- ?line 0.0 = list_to_float("-0.0"),
- ?line 0.5 = list_to_float("0.5"),
- ?line -0.5 = list_to_float("-0.5"),
- ?line 100.0 = list_to_float("1.0e2"),
- ?line 127.5 = list_to_float("127.5"),
- ?line -199.5 = list_to_float("-199.5"),
-
- ?line {'EXIT', {badarg, _}} = (catch list_to_float("0")),
- ?line {'EXIT', {badarg, _}} = (catch list_to_float("0..0")),
- ?line {'EXIT', {badarg, _}} = (catch list_to_float("0e12")),
- ?line {'EXIT', {badarg, _}} = (catch list_to_float("--0.0")),
-%% ?line {'EXIT', {badarg, _}} = (catch list_to_float("0.0e+99999999")),
+ 0.0 = list_to_float("0.0"),
+ 0.0 = list_to_float("-0.0"),
+ 0.5 = list_to_float("0.5"),
+ -0.5 = list_to_float("-0.5"),
+ 100.0 = list_to_float("1.0e2"),
+ 127.5 = list_to_float("127.5"),
+ -199.5 = list_to_float("-199.5"),
+
+ {'EXIT', {badarg, _}} = (catch list_to_float("0")),
+ {'EXIT', {badarg, _}} = (catch list_to_float("0..0")),
+ {'EXIT', {badarg, _}} = (catch list_to_float("0e12")),
+ {'EXIT', {badarg, _}} = (catch list_to_float("--0.0")),
+%% {'EXIT', {badarg, _}} = (catch list_to_float("0.0e+99999999")),
ok.
@@ -185,101 +185,101 @@ t_list_to_float_safe(Config) when is_list(Config) ->
%% (Known to crash the Unix version of Erlang 4.4.1)
t_list_to_float_risky(Config) when is_list(Config) ->
- ?line Many_Ones = lists:duplicate(25000, $1),
- ?line _ = list_to_float("2."++Many_Ones),
- ?line {'EXIT', {badarg, _}} = (catch list_to_float("2"++Many_Ones)),
+ Many_Ones = lists:duplicate(25000, $1),
+ _ = list_to_float("2."++Many_Ones),
+ {'EXIT', {badarg, _}} = (catch list_to_float("2"++Many_Ones)),
ok.
%% Tests list_to_integer/1.
t_list_to_integer(Config) when is_list(Config) ->
- ?line 0 = list_to_integer("0"),
- ?line 0 = list_to_integer("00"),
- ?line 0 = list_to_integer("-0"),
- ?line 1 = list_to_integer("1"),
- ?line -1 = list_to_integer("-1"),
- ?line 42 = list_to_integer("42"),
- ?line -12 = list_to_integer("-12"),
- ?line 32768 = list_to_integer("32768"),
- ?line 268435455 = list_to_integer("268435455"),
- ?line -268435455 = list_to_integer("-268435455"),
+ 0 = list_to_integer("0"),
+ 0 = list_to_integer("00"),
+ 0 = list_to_integer("-0"),
+ 1 = list_to_integer("1"),
+ -1 = list_to_integer("-1"),
+ 42 = list_to_integer("42"),
+ -12 = list_to_integer("-12"),
+ 32768 = list_to_integer("32768"),
+ 268435455 = list_to_integer("268435455"),
+ -268435455 = list_to_integer("-268435455"),
%% Bignums.
- ?line 123456932798748738738 = list_to_integer("123456932798748738738"),
- ?line _ = list_to_integer(lists:duplicate(2000, $1)),
+ 123456932798748738738 = list_to_integer("123456932798748738738"),
+ _ = list_to_integer(lists:duplicate(2000, $1)),
ok.
%% Tests round/1.
t_round(Config) when is_list(Config) ->
- ?line 0 = round(0.0),
- ?line 0 = round(0.4),
- ?line 1 = round(0.5),
- ?line 0 = round(-0.4),
- ?line -1 = round(-0.5),
- ?line 255 = round(255.3),
- ?line 256 = round(255.6),
- ?line -1033 = round(-1033.3),
- ?line -1034 = round(-1033.6),
+ 0 = round(0.0),
+ 0 = round(0.4),
+ 1 = round(0.5),
+ 0 = round(-0.4),
+ -1 = round(-0.5),
+ 255 = round(255.3),
+ 256 = round(255.6),
+ -1033 = round(-1033.3),
+ -1034 = round(-1033.6),
% OTP-3722:
- ?line X = (1 bsl 27) - 1,
- ?line MX = -X,
- ?line MXm1 = -X-1,
- ?line MXp1 = -X+1,
- ?line F = X + 0.0,
- ?line X = round(F),
- ?line X = round(F+1)-1,
- ?line X = round(F-1)+1,
- ?line MX = round(-F),
- ?line MXm1 = round(-F-1),
- ?line MXp1 = round(-F+1),
-
- ?line X = round(F+0.1),
- ?line X = round(F+1+0.1)-1,
- ?line X = round(F-1+0.1)+1,
- ?line MX = round(-F+0.1),
- ?line MXm1 = round(-F-1+0.1),
- ?line MXp1 = round(-F+1+0.1),
-
- ?line X = round(F-0.1),
- ?line X = round(F+1-0.1)-1,
- ?line X = round(F-1-0.1)+1,
- ?line MX = round(-F-0.1),
- ?line MXm1 = round(-F-1-0.1),
- ?line MXp1 = round(-F+1-0.1),
-
- ?line 0.5 = abs(round(F+0.5)-(F+0.5)),
- ?line 0.5 = abs(round(F-0.5)-(F-0.5)),
- ?line 0.5 = abs(round(-F-0.5)-(-F-0.5)),
- ?line 0.5 = abs(round(-F+0.5)-(-F+0.5)),
+ X = (1 bsl 27) - 1,
+ MX = -X,
+ MXm1 = -X-1,
+ MXp1 = -X+1,
+ F = X + 0.0,
+ X = round(F),
+ X = round(F+1)-1,
+ X = round(F-1)+1,
+ MX = round(-F),
+ MXm1 = round(-F-1),
+ MXp1 = round(-F+1),
+
+ X = round(F+0.1),
+ X = round(F+1+0.1)-1,
+ X = round(F-1+0.1)+1,
+ MX = round(-F+0.1),
+ MXm1 = round(-F-1+0.1),
+ MXp1 = round(-F+1+0.1),
+
+ X = round(F-0.1),
+ X = round(F+1-0.1)-1,
+ X = round(F-1-0.1)+1,
+ MX = round(-F-0.1),
+ MXm1 = round(-F-1-0.1),
+ MXp1 = round(-F+1-0.1),
+
+ 0.5 = abs(round(F+0.5)-(F+0.5)),
+ 0.5 = abs(round(F-0.5)-(F-0.5)),
+ 0.5 = abs(round(-F-0.5)-(-F-0.5)),
+ 0.5 = abs(round(-F+0.5)-(-F+0.5)),
%% Bignums.
- ?line 4294967296 = round(4294967296.1),
- ?line 4294967297 = round(4294967296.9),
- ?line -4294967296 = -round(4294967296.1),
- ?line -4294967297 = -round(4294967296.9),
+ 4294967296 = round(4294967296.1),
+ 4294967297 = round(4294967296.9),
+ -4294967296 = -round(4294967296.1),
+ -4294967297 = -round(4294967296.9),
ok.
t_trunc(Config) when is_list(Config) ->
- ?line 0 = trunc(0.0),
- ?line 5 = trunc(5.3333),
- ?line -10 = trunc(-10.978987),
+ 0 = trunc(0.0),
+ 5 = trunc(5.3333),
+ -10 = trunc(-10.978987),
% The largest smallnum, converted to float (OTP-3722):
- ?line X = (1 bsl 27) - 1,
- ?line F = X + 0.0,
+ X = (1 bsl 27) - 1,
+ F = X + 0.0,
io:format("X = ~p/~w/~w, F = ~p/~w/~w, trunc(F) = ~p/~w/~w~n",
[X, X, binary_to_list(term_to_binary(X)),
F, F, binary_to_list(term_to_binary(F)),
trunc(F), trunc(F), binary_to_list(term_to_binary(trunc(F)))]),
- ?line X = trunc(F),
- ?line X = trunc(F+1)-1,
- ?line X = trunc(F-1)+1,
- ?line X = -trunc(-F),
- ?line X = -trunc(-F-1)-1,
- ?line X = -trunc(-F+1)+1,
+ X = trunc(F),
+ X = trunc(F+1)-1,
+ X = trunc(F-1)+1,
+ X = -trunc(-F),
+ X = -trunc(-F-1)-1,
+ X = -trunc(-F+1)+1,
%% Bignums.
- ?line 4294967305 = trunc(4294967305.7),
- ?line -4294967305 = trunc(-4294967305.7),
+ 4294967305 = trunc(4294967305.7),
+ -4294967305 = trunc(-4294967305.7),
ok.
diff --git a/lib/compiler/test/receive_SUITE.erl b/lib/compiler/test/receive_SUITE.erl
index 4016fac0b5..8304672558 100644
--- a/lib/compiler/test/receive_SUITE.erl
+++ b/lib/compiler/test/receive_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,18 +27,17 @@
export/1,recv/1,coverage/1,otp_7980/1,ref_opt/1,
wait/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
init_per_testcase(_Case, Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(2)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
test_lib:recompile(?MODULE),
@@ -64,21 +63,21 @@ end_per_group(_GroupName, Config) ->
-record(state, {ena = true}).
recv(Config) when is_list(Config) ->
- ?line Pid = spawn_link(fun() -> loop(#state{}) end),
+ Pid = spawn_link(fun() -> loop(#state{}) end),
Self = self(),
- ?line Pid ! {Self,test},
+ Pid ! {Self,test},
receive
{ok,test} -> ok;
{error,Other} ->
io:format("Got unpexected ~p", [Other]),
- ?line ?t:fail()
+ ct:fail(unexpected)
after 10000 ->
- ?line ?t:fail(no_answer)
+ ct:fail(no_answer)
end,
receive
X ->
io:format("Unexpected extra message: ~p", [X]),
- ?line ?t:fail()
+ ct:fail(unexpected)
after 10 ->
ok
end,
@@ -116,11 +115,17 @@ coverage(Config) when is_list(Config) ->
self() ! 17,
self() ! 19,
- ?line 59 = tuple_to_values(infinity, x),
- ?line 61 = tuple_to_values(999999, x),
- ?line 0 = tuple_to_values(1, x),
+ 59 = tuple_to_values(infinity, x),
+ 61 = tuple_to_values(999999, x),
+ 0 = tuple_to_values(1, x),
+
+ {'EXIT',{{badmap,[]},_}} = (catch monitor_plus_badmap(self())),
+
ok.
+monitor_plus_badmap(Pid) ->
+ monitor(process, Pid) + []#{}.
+
receive_all() ->
receive
Any ->
@@ -188,8 +193,8 @@ ref_opt(Config) when is_list(Config) ->
end.
ref_opt_1(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Sources = filelib:wildcard(filename:join([DataDir,"ref_opt","*.{erl,S}"])),
test_lib:p_run(fun(Src) ->
do_ref_opt(Src, PrivDir)
@@ -257,9 +262,9 @@ cover_recv_instructions() ->
export(Config) when is_list(Config) ->
Ref = make_ref(),
- ?line self() ! {result,Ref,42},
- ?line 42 = export_1(Ref),
- ?line {error,timeout} = export_1(Ref),
+ self() ! {result,Ref,42},
+ 42 = export_1(Ref),
+ {error,timeout} = export_1(Ref),
ok.
export_1(Reference) ->
diff --git a/lib/compiler/test/record_SUITE.erl b/lib/compiler/test/record_SUITE.erl
index 2ef379e43f..5546765f26 100644
--- a/lib/compiler/test/record_SUITE.erl
+++ b/lib/compiler/test/record_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,25 +21,24 @@
-module(record_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
init_per_testcase/2,end_per_testcase/2,
errors/1,record_test_2/1,record_test_3/1,record_access_in_guards/1,
guard_opt/1,eval_once/1,foobar/1,missing_test_heap/1,
- nested_access/1,coverage/1]).
+ nested_access/1,coverage/1,grab_bag/1]).
init_per_testcase(_Case, Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(2)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
test_lib:recompile(?MODULE),
@@ -49,7 +48,7 @@ groups() ->
[{p,test_lib:parallel(),
[errors,record_test_2,record_test_3,
record_access_in_guards,guard_opt,eval_once,foobar,
- missing_test_heap,nested_access,coverage]}].
+ missing_test_heap,nested_access,coverage,grab_bag]}].
init_per_suite(Config) ->
@@ -71,18 +70,18 @@ end_per_group(_GroupName, Config) ->
errors(Config) when is_list(Config) ->
Foo = #foo{a=1,b=2,c=3,d=4},
- ?line #foo{a=19,b=42,c=3,d=4} = update_foo(Foo, 19, 42),
-
- ?line {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19)),
- ?line {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35)),
- ?line {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35, 17)),
- ?line {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35, 17, 42)),
-
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35, 17)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35, 17, 42)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19,
+ #foo{a=19,b=42,c=3,d=4} = update_foo(Foo, 19, 42),
+
+ {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19)),
+ {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35)),
+ {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35, 17)),
+ {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35, 17, 42)),
+
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35, 17)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35, 17, 42)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19,
35, 17, 42, -2)),
ok.
@@ -118,72 +117,72 @@ update_foo_barf(#foo{}=R, A, _B, C, D, E) ->
R#barf{a=A,b=A,c=C,d=D,e=E}.
--define(TrueGuard(Expr), if Expr -> ok; true -> ?t:fail() end).
--define(FalseGuard(Expr), if Expr -> ?t:fail(); true -> ok end).
+-define(TrueGuard(Expr), if Expr -> ok; true -> ct:fail(failed) end).
+-define(FalseGuard(Expr), if Expr -> ct:fail(failed); true -> ok end).
record_test_2(Config) when is_list(Config) ->
- ?line true = is_record(#foo{}, foo),
- ?line false = is_record(#foo{}, barf),
- ?line false = is_record({foo}, foo),
+ true = is_record(#foo{}, foo),
+ false = is_record(#foo{}, barf),
+ false = is_record({foo}, foo),
- ?line true = erlang:is_record(#foo{}, foo),
- ?line false = erlang:is_record(#foo{}, barf),
- ?line false = erlang:is_record({foo}, foo),
+ true = erlang:is_record(#foo{}, foo),
+ false = erlang:is_record(#foo{}, barf),
+ false = erlang:is_record({foo}, foo),
- ?line false = is_record([], foo),
- ?line false = is_record(Config, foo),
+ false = is_record([], foo),
+ false = is_record(Config, foo),
- ?line ?TrueGuard(is_record(#foo{}, foo)),
- ?line ?FalseGuard(is_record(#foo{}, barf)),
- ?line ?FalseGuard(is_record({foo}, foo)),
+ ?TrueGuard(is_record(#foo{}, foo)),
+ ?FalseGuard(is_record(#foo{}, barf)),
+ ?FalseGuard(is_record({foo}, foo)),
- ?line ?TrueGuard(erlang:is_record(#foo{}, foo)),
- ?line ?FalseGuard(erlang:is_record(#foo{}, barf)),
- ?line ?FalseGuard(erlang:is_record({foo}, foo)),
+ ?TrueGuard(erlang:is_record(#foo{}, foo)),
+ ?FalseGuard(erlang:is_record(#foo{}, barf)),
+ ?FalseGuard(erlang:is_record({foo}, foo)),
- ?line ?FalseGuard(is_record([], foo)),
- ?line ?FalseGuard(is_record(Config, foo)),
+ ?FalseGuard(is_record([], foo)),
+ ?FalseGuard(is_record(Config, foo)),
%% 'not is_record/2' to test guard optimization.
- ?line ?FalseGuard(not is_record(#foo{}, foo)),
- ?line ?TrueGuard(not is_record(#foo{}, barf)),
- ?line ?TrueGuard(not is_record({foo}, foo)),
+ ?FalseGuard(not is_record(#foo{}, foo)),
+ ?TrueGuard(not is_record(#foo{}, barf)),
+ ?TrueGuard(not is_record({foo}, foo)),
- ?line ?FalseGuard(not erlang:is_record(#foo{}, foo)),
- ?line ?TrueGuard(not erlang:is_record(#foo{}, barf)),
- ?line ?TrueGuard(not erlang:is_record({foo}, foo)),
+ ?FalseGuard(not erlang:is_record(#foo{}, foo)),
+ ?TrueGuard(not erlang:is_record(#foo{}, barf)),
+ ?TrueGuard(not erlang:is_record({foo}, foo)),
Foo = id(#foo{}),
- ?line ?FalseGuard(not erlang:is_record(Foo, foo)),
- ?line ?TrueGuard(not erlang:is_record(Foo, barf)),
+ ?FalseGuard(not erlang:is_record(Foo, foo)),
+ ?TrueGuard(not erlang:is_record(Foo, barf)),
- ?line ?TrueGuard(not is_record(Config, foo)),
+ ?TrueGuard(not is_record(Config, foo)),
- ?line ?TrueGuard(not is_record(a, foo)),
- ?line ?TrueGuard(not is_record([], foo)),
+ ?TrueGuard(not is_record(a, foo)),
+ ?TrueGuard(not is_record([], foo)),
%% Pass non-literal first argument.
- ?line true = is_record(id(#foo{}), foo),
- ?line false = is_record(id(#foo{}), barf),
- ?line false = is_record(id({foo}), foo),
+ true = is_record(id(#foo{}), foo),
+ false = is_record(id(#foo{}), barf),
+ false = is_record(id({foo}), foo),
- ?line true = erlang:is_record(id(#foo{}), foo),
- ?line false = erlang:is_record(id(#foo{}), barf),
- ?line false = erlang:is_record(id({foo}), foo),
+ true = erlang:is_record(id(#foo{}), foo),
+ false = erlang:is_record(id(#foo{}), barf),
+ false = erlang:is_record(id({foo}), foo),
NoRec1 = id(blurf),
NoRec2 = id([]),
- ?line ?TrueGuard(not is_record(NoRec1, foo)),
- ?line ?TrueGuard(not is_record(NoRec2, foo)),
+ ?TrueGuard(not is_record(NoRec1, foo)),
+ ?TrueGuard(not is_record(NoRec2, foo)),
%% The optimizer attempts to move expressions to guards,
%% but it must not move an is_record/2 call that is not
%% allowed in a guard in the first place.
- ?line ok = case is_record(id({a}), id(a)) of
+ ok = case is_record(id({a}), id(a)) of
true -> ok;
false -> error
end,
@@ -191,61 +190,61 @@ record_test_2(Config) when is_list(Config) ->
%% Force the use of guard bifs by using the 'xor' operation.
False = id(false),
- ?line ?TrueGuard(is_record(#foo{}, foo) xor False),
- ?line ?FalseGuard(is_record(#foo{}, barf) xor False),
- ?line ?FalseGuard(is_record({foo}, foo) xor False ),
+ ?TrueGuard(is_record(#foo{}, foo) xor False),
+ ?FalseGuard(is_record(#foo{}, barf) xor False),
+ ?FalseGuard(is_record({foo}, foo) xor False ),
- ?line ?TrueGuard(is_record(Foo, foo) xor False),
- ?line ?FalseGuard(is_record(Foo, barf) xor False),
+ ?TrueGuard(is_record(Foo, foo) xor False),
+ ?FalseGuard(is_record(Foo, barf) xor False),
%% Implicit guards by using a list comprehension.
List = id([1,#foo{a=2},3,#bar{d=4},5,#foo{a=6},7]),
- ?line [#foo{a=2},#foo{a=6}] = [X || X <- List, is_record(X, foo)],
- ?line [#bar{d=4}] = [X || X <- List, is_record(X, bar)],
- ?line [1,#foo{a=2},3,5,#foo{a=6},7] =
+ [#foo{a=2},#foo{a=6}] = [X || X <- List, is_record(X, foo)],
+ [#bar{d=4}] = [X || X <- List, is_record(X, bar)],
+ [1,#foo{a=2},3,5,#foo{a=6},7] =
[X || X <- List, not is_record(X, bar)],
- ?line [1,3,5,7] =
+ [1,3,5,7] =
[X || X <- List, ((not is_record(X, bar)) and (not is_record(X, foo)))],
- ?line [#foo{a=2},#bar{d=4},#foo{a=6}] =
+ [#foo{a=2},#bar{d=4},#foo{a=6}] =
[X || X <- List, ((is_record(X, bar)) or (is_record(X, foo)))],
- ?line [1,3,#bar{d=4}] =
+ [1,3,#bar{d=4}] =
[X || X <- List, ((is_record(X, bar)) or (X < 5))],
- ?line MyList = [#foo{a=3},x,[],{a,b}],
- ?line [#foo{a=3}] = [X || X <- MyList, is_record(X, foo)],
- ?line [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo)],
- ?line [#foo{a=3}] = [X || X <- MyList, begin is_record(X, foo) end],
- ?line [x,[],{a,b}] = [X || X <- MyList, begin not is_record(X, foo) end],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, is_record(X, foo) or
- not is_binary(X)],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
- not is_binary(X)],
- ?line [#foo{a=3}] = [X || X <- MyList, is_record(X, foo) or is_reference(X)],
- ?line [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
- is_reference(X)],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
- begin is_record(X, foo) or
- not is_binary(X) end],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
- begin not is_record(X, foo) or
- not is_binary(X) end],
- ?line [#foo{a=3}] = [X || X <- MyList,
- begin is_record(X, foo) or is_reference(X) end],
- ?line [x,[],{a,b}] = [X || X <- MyList,
- begin not is_record(X, foo) or
- is_reference(X) end],
+ MyList = [#foo{a=3},x,[],{a,b}],
+ [#foo{a=3}] = [X || X <- MyList, is_record(X, foo)],
+ [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo)],
+ [#foo{a=3}] = [X || X <- MyList, begin is_record(X, foo) end],
+ [x,[],{a,b}] = [X || X <- MyList, begin not is_record(X, foo) end],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, is_record(X, foo) or
+ not is_binary(X)],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
+ not is_binary(X)],
+ [#foo{a=3}] = [X || X <- MyList, is_record(X, foo) or is_reference(X)],
+ [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
+ is_reference(X)],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
+ begin is_record(X, foo) or
+ not is_binary(X) end],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
+ begin not is_record(X, foo) or
+ not is_binary(X) end],
+ [#foo{a=3}] = [X || X <- MyList,
+ begin is_record(X, foo) or is_reference(X) end],
+ [x,[],{a,b}] = [X || X <- MyList,
+ begin not is_record(X, foo) or
+ is_reference(X) end],
%% Call is_record/2 with illegal arguments.
- ?line [] = [X || X <- [], is_record(t, id(X))],
- ?line {'EXIT',{badarg,_}} = (catch [X || X <- [1], is_record(t, id(X))]),
+ [] = [X || X <- [], is_record(t, id(X))],
+ {'EXIT',{badarg,_}} = (catch [X || X <- [1], is_record(t, id(X))]),
%% Update several fields with a string literal.
- ?line #barf{} = Barf0 = id(#barf{}),
- ?line Barf = update_barf(Barf0),
- ?line #barf{a="abc",b=1} = id(Barf),
+ #barf{} = Barf0 = id(#barf{}),
+ Barf = update_barf(Barf0),
+ #barf{a="abc",b=1} = id(Barf),
%% Test optimization of is_record/3.
false = case id({a,b}) of
@@ -258,125 +257,125 @@ record_test_2(Config) when is_list(Config) ->
ok.
record_test_3(Config) when is_list(Config) ->
- ?line true = is_record(#foo{}, foo, 5),
- ?line false = is_record(#foo{}, barf, 5),
- ?line false = is_record(#foo{}, barf, 6),
- ?line false = is_record({foo}, foo, 5),
+ true = is_record(#foo{}, foo, 5),
+ false = is_record(#foo{}, barf, 5),
+ false = is_record(#foo{}, barf, 6),
+ false = is_record({foo}, foo, 5),
- ?line true = erlang:is_record(#foo{}, foo, 5),
- ?line false = erlang:is_record(#foo{}, barf, 5),
- ?line false = erlang:is_record({foo}, foo, 5),
+ true = erlang:is_record(#foo{}, foo, 5),
+ false = erlang:is_record(#foo{}, barf, 5),
+ false = erlang:is_record({foo}, foo, 5),
- ?line false = is_record([], foo),
- ?line false = is_record(Config, foo),
+ false = is_record([], foo),
+ false = is_record(Config, foo),
- ?line ?TrueGuard(is_record(#foo{}, foo, 5)),
- ?line ?FalseGuard(is_record(#foo{}, barf, 5)),
- ?line ?FalseGuard(is_record(#foo{}, barf, 6)),
- ?line ?FalseGuard(is_record({foo}, foo, 5)),
+ ?TrueGuard(is_record(#foo{}, foo, 5)),
+ ?FalseGuard(is_record(#foo{}, barf, 5)),
+ ?FalseGuard(is_record(#foo{}, barf, 6)),
+ ?FalseGuard(is_record({foo}, foo, 5)),
- ?line ?TrueGuard(erlang:is_record(#foo{}, foo, 5)),
- ?line ?FalseGuard(erlang:is_record(#foo{}, barf, 5)),
- ?line ?FalseGuard(erlang:is_record(#foo{}, barf, 6)),
- ?line ?FalseGuard(erlang:is_record({foo}, foo, 5)),
+ ?TrueGuard(erlang:is_record(#foo{}, foo, 5)),
+ ?FalseGuard(erlang:is_record(#foo{}, barf, 5)),
+ ?FalseGuard(erlang:is_record(#foo{}, barf, 6)),
+ ?FalseGuard(erlang:is_record({foo}, foo, 5)),
- ?line ?FalseGuard(is_record([], foo, 5)),
- ?line ?FalseGuard(is_record(Config, foo, 5)),
+ ?FalseGuard(is_record([], foo, 5)),
+ ?FalseGuard(is_record(Config, foo, 5)),
%% 'not is_record/2' to test guard optimization.
- ?line ?FalseGuard(not is_record(#foo{}, foo, 5)),
- ?line ?TrueGuard(not is_record(#foo{}, barf, 6)),
- ?line ?TrueGuard(not is_record({foo}, foo, 5)),
+ ?FalseGuard(not is_record(#foo{}, foo, 5)),
+ ?TrueGuard(not is_record(#foo{}, barf, 6)),
+ ?TrueGuard(not is_record({foo}, foo, 5)),
- ?line ?FalseGuard(not erlang:is_record(#foo{}, foo, 5)),
- ?line ?TrueGuard(not erlang:is_record(#foo{}, barf, 5)),
- ?line ?TrueGuard(not erlang:is_record({foo}, foo, 5)),
+ ?FalseGuard(not erlang:is_record(#foo{}, foo, 5)),
+ ?TrueGuard(not erlang:is_record(#foo{}, barf, 5)),
+ ?TrueGuard(not erlang:is_record({foo}, foo, 5)),
Foo = id(#foo{}),
- ?line ?FalseGuard(not erlang:is_record(Foo, foo, 5)),
- ?line ?TrueGuard(not erlang:is_record(Foo, barf, 6)),
+ ?FalseGuard(not erlang:is_record(Foo, foo, 5)),
+ ?TrueGuard(not erlang:is_record(Foo, barf, 6)),
- ?line ?TrueGuard(not is_record(Config, foo, 5)),
+ ?TrueGuard(not is_record(Config, foo, 5)),
- ?line ?TrueGuard(not is_record(a, foo, 5)),
- ?line ?TrueGuard(not is_record([], foo, 5)),
+ ?TrueGuard(not is_record(a, foo, 5)),
+ ?TrueGuard(not is_record([], foo, 5)),
%% Pass non-literal first argument.
- ?line true = is_record(id(#foo{}), foo, 5),
- ?line false = is_record(id(#foo{}), barf, 6),
- ?line false = is_record(id({foo}), foo, 5),
+ true = is_record(id(#foo{}), foo, 5),
+ false = is_record(id(#foo{}), barf, 6),
+ false = is_record(id({foo}), foo, 5),
- ?line true = erlang:is_record(id(#foo{}), foo, 5),
- ?line false = erlang:is_record(id(#foo{}), barf, 6),
- ?line false = erlang:is_record(id({foo}), foo, 5),
+ true = erlang:is_record(id(#foo{}), foo, 5),
+ false = erlang:is_record(id(#foo{}), barf, 6),
+ false = erlang:is_record(id({foo}), foo, 5),
NoRec1 = id(blurf),
NoRec2 = id([]),
- ?line ?TrueGuard(not is_record(NoRec1, foo, 5)),
- ?line ?TrueGuard(not is_record(NoRec2, foo, 5)),
+ ?TrueGuard(not is_record(NoRec1, foo, 5)),
+ ?TrueGuard(not is_record(NoRec2, foo, 5)),
%% Force the use of guard bifs by using the 'xor' operation.
False = id(false),
- ?line ?TrueGuard(is_record(#foo{}, foo, 5) xor False),
- ?line ?FalseGuard(is_record(#foo{}, barf, 6) xor False),
- ?line ?FalseGuard(is_record({foo}, foo, 5) xor False ),
+ ?TrueGuard(is_record(#foo{}, foo, 5) xor False),
+ ?FalseGuard(is_record(#foo{}, barf, 6) xor False),
+ ?FalseGuard(is_record({foo}, foo, 5) xor False ),
- ?line ?TrueGuard(is_record(Foo, foo, 5) xor False),
- ?line ?FalseGuard(is_record(Foo, barf, 6) xor False),
+ ?TrueGuard(is_record(Foo, foo, 5) xor False),
+ ?FalseGuard(is_record(Foo, barf, 6) xor False),
%% Implicit guards by using a list comprehension.
List = id([1,#foo{a=2},3,#bar{d=4},5,#foo{a=6},7]),
- ?line [#foo{a=2},#foo{a=6}] = [X || X <- List, is_record(X, foo, 5)],
- ?line [#bar{d=4}] = [X || X <- List, is_record(X, bar, 5)],
- ?line [1,#foo{a=2},3,5,#foo{a=6},7] =
+ [#foo{a=2},#foo{a=6}] = [X || X <- List, is_record(X, foo, 5)],
+ [#bar{d=4}] = [X || X <- List, is_record(X, bar, 5)],
+ [1,#foo{a=2},3,5,#foo{a=6},7] =
[X || X <- List, not is_record(X, bar, 5)],
- ?line [1,3,5,7] =
+ [1,3,5,7] =
[X || X <- List, ((not is_record(X, bar, 5)) and (not is_record(X, foo, 5)))],
- ?line [#foo{a=2},#bar{d=4},#foo{a=6}] =
+ [#foo{a=2},#bar{d=4},#foo{a=6}] =
[X || X <- List, ((is_record(X, bar, 5)) or (is_record(X, foo, 5)))],
- ?line [1,3,#bar{d=4}] =
+ [1,3,#bar{d=4}] =
[X || X <- List, ((is_record(X, bar, 5)) or (X < 5))],
- ?line MyList = [#foo{a=3},x,[],{a,b}],
- ?line [#foo{a=3}] = [X || X <- MyList, is_record(X, foo, 5)],
- ?line [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo, 5)],
- ?line [#foo{a=3}] = [X || X <- MyList, begin is_record(X, foo, 5) end],
- ?line [x,[],{a,b}] = [X || X <- MyList, begin not is_record(X, foo, 5) end],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, is_record(X, foo, 5) or
- not is_binary(X)],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo, 5) or
- not is_binary(X)],
- ?line [#foo{a=3}] = [X || X <- MyList, is_record(X, foo) or is_reference(X)],
- ?line [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
- is_reference(X)],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
- begin is_record(X, foo, 5) or
- not is_binary(X) end],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
- begin not is_record(X, foo, 5) or
- not is_binary(X) end],
- ?line [#foo{a=3}] = [X || X <- MyList,
- begin is_record(X, foo, 5) or is_reference(X) end],
- ?line [x,[],{a,b}] = [X || X <- MyList,
- begin not is_record(X, foo, 5) or
- is_reference(X) end],
+ MyList = [#foo{a=3},x,[],{a,b}],
+ [#foo{a=3}] = [X || X <- MyList, is_record(X, foo, 5)],
+ [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo, 5)],
+ [#foo{a=3}] = [X || X <- MyList, begin is_record(X, foo, 5) end],
+ [x,[],{a,b}] = [X || X <- MyList, begin not is_record(X, foo, 5) end],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, is_record(X, foo, 5) or
+ not is_binary(X)],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo, 5) or
+ not is_binary(X)],
+ [#foo{a=3}] = [X || X <- MyList, is_record(X, foo) or is_reference(X)],
+ [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
+ is_reference(X)],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
+ begin is_record(X, foo, 5) or
+ not is_binary(X) end],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
+ begin not is_record(X, foo, 5) or
+ not is_binary(X) end],
+ [#foo{a=3}] = [X || X <- MyList,
+ begin is_record(X, foo, 5) or is_reference(X) end],
+ [x,[],{a,b}] = [X || X <- MyList,
+ begin not is_record(X, foo, 5) or
+ is_reference(X) end],
%% Update several fields with a string literal.
- ?line #barf{} = Barf0 = id(#barf{}),
- ?line Barf = update_barf(Barf0),
- ?line #barf{a="abc",b=1} = id(Barf),
+ #barf{} = Barf0 = id(#barf{}),
+ Barf = update_barf(Barf0),
+ #barf{a="abc",b=1} = id(Barf),
%% Non-literal arguments.
- ?line true = is_record(id(#barf{}), id(barf), id(6)),
- ?line false = is_record(id(#barf{}), id(barf), id(42)),
- ?line false = is_record(id(#barf{}), id(foo), id(6)),
+ true = is_record(id(#barf{}), id(barf), id(6)),
+ false = is_record(id(#barf{}), id(barf), id(42)),
+ false = is_record(id(#barf{}), id(foo), id(6)),
Rec = id(#barf{}),
Good = id(barf),
@@ -389,15 +388,15 @@ record_test_3(Config) when is_list(Config) ->
ok.
record_access_in_guards(Config) when is_list(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line file:set_cwd(test_lib:get_data_dir(Config)),
- ?line Opts0 = [{outdir,Priv},report_errors|test_lib:opt_opts(?MODULE)],
+ Priv = proplists:get_value(priv_dir, Config),
+ file:set_cwd(test_lib:get_data_dir(Config)),
+ Opts0 = [{outdir,Priv},report_errors|test_lib:opt_opts(?MODULE)],
M = record_access_in_guards,
Opts = [strict_record_tests|Opts0],
- ?line io:format("Options: ~p\n", [Opts]),
- ?line {ok,M} = c:c(M, Opts),
- ?line ok = M:t(),
+ io:format("Options: ~p\n", [Opts]),
+ {ok,M} = c:c(M, Opts),
+ ok = M:t(),
ok.
@@ -487,19 +486,19 @@ update_barf(R) ->
R#barf{a="abc",b=1}.
eval_once(Config) when is_list(Config) ->
- ?line once(fun(GetRec) ->
+ once(fun(GetRec) ->
true = erlang:is_record(GetRec(), foo)
end, #foo{}),
- ?line once(fun(GetRec) ->
+ once(fun(GetRec) ->
(GetRec())#foo{a=1}
end, #foo{}),
- ?line once(fun(GetRec) ->
+ once(fun(GetRec) ->
(GetRec())#foo{a=1,b=2}
end, #foo{}),
- ?line once(fun(GetRec) ->
+ once(fun(GetRec) ->
(GetRec())#foo{a=1,b=2,c=3}
end, #foo{}),
- ?line once(fun(GetRec) ->
+ once(fun(GetRec) ->
(GetRec())#foo{a=1,b=2,c=3,d=4}
end, #foo{}),
ok.
@@ -515,7 +514,7 @@ once(Test, Record) ->
1 -> ok;
N ->
io:format("Evaluated ~w times\n", [N]),
- ?t:fail()
+ ct:fail(more_than_once)
end,
Result.
@@ -571,21 +570,21 @@ nested_access(Config) when is_list(Config) ->
N0 = #nrec0{},
N1 = #nrec1{},
N2 = #nrec2{},
- ?line <<"nested0">> = N0#nrec0.name,
- ?line <<"nested1">> = N1#nrec1.name,
- ?line <<"nested2">> = N2#nrec2.name,
- ?line <<"nested0">> = N1#nrec1.nrec0#nrec0.name,
- ?line <<"nested0">> = N2#nrec2.nrec1#nrec1.nrec0#nrec0.name,
- ?line <<"nested1">> = N2#nrec2.nrec1#nrec1.name,
- ?line <<"nested0">> = ((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0.name,
+ <<"nested0">> = N0#nrec0.name,
+ <<"nested1">> = N1#nrec1.name,
+ <<"nested2">> = N2#nrec2.name,
+ <<"nested0">> = N1#nrec1.nrec0#nrec0.name,
+ <<"nested0">> = N2#nrec2.nrec1#nrec1.nrec0#nrec0.name,
+ <<"nested1">> = N2#nrec2.nrec1#nrec1.name,
+ <<"nested0">> = ((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0.name,
N1a = N2#nrec2.nrec1#nrec1{name = <<"nested1a">>},
- ?line <<"nested1a">> = N1a#nrec1.name,
+ <<"nested1a">> = N1a#nrec1.name,
N2a = N2#nrec2.nrec1#nrec1.nrec0#nrec0{name = <<"nested0a">>},
N2b = ((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0{name = <<"nested0a">>},
- ?line <<"nested0a">> = N2a#nrec0.name,
- ?line N2a = N2b,
+ <<"nested0a">> = N2a#nrec0.name,
+ N2a = N2b,
ok.
-record(rr, {a,b,c}).
@@ -602,4 +601,60 @@ coverage(Config) when is_list(Config) ->
#rr{a=1,b=2,c=42} = id(R), %Test for correctness.
ok.
+
+-record(default_fun, {a = fun(X) -> X*X end}).
+
+%% compiler treats records with 1 and 2 fields differently...
+-record(gb_nil, {}).
+-record(gb_foo, {hello=1}).
+-record(gb_bar, {hello=2,there=3}).
+
+%% Taken from compilation_SUITE.
+grab_bag(_Config) ->
+ T1 = fun() ->
+ X = #foo{},
+ Y = #foo{},
+ {X#foo.a == Y#foo.a,X#foo.b}
+ end,
+ {true,undefined} = T1(),
+
+ T2 = fun(X, Y) ->
+ first_arg(X#foo.a =/= Y#foo.a, X#foo.b =/= X#foo.b)
+ end,
+ true = T2(#foo{a=x,b=z}, #foo{a=y,b=z}),
+
+ T3 = fun() ->
+ #default_fun{a=Fun} = id(#default_fun{}),
+ 9 = Fun(3)
+ end,
+ T3(),
+
+ %% Stupid code, but the compiler used to crash.
+ T4 = fun() ->
+ F0 = fun() ->
+ R1 = #gb_nil{},
+ R2 = R1#gb_nil{},
+ R1 = R2
+ end,
+ F1 = fun() ->
+ R1 = #gb_foo{},
+ R2 = R1#gb_foo{},
+ R1 = R2
+ end,
+
+ F2 = fun() ->
+ R1 = #gb_bar{},
+ R2 = R1#gb_bar{},
+ R1 = R2
+ end,
+ F0(),
+ F1(),
+ F2()
+ end,
+ T4(),
+
+ ok.
+
+first_arg(First, _) -> First.
+
id(I) -> I.
diff --git a/lib/compiler/test/record_SUITE_data/record_access_in_guards.erl b/lib/compiler/test/record_SUITE_data/record_access_in_guards.erl
index fb3d7d3ae4..9b72432246 100644
--- a/lib/compiler/test/record_SUITE_data/record_access_in_guards.erl
+++ b/lib/compiler/test/record_SUITE_data/record_access_in_guards.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/compiler/test/regressions_SUITE.erl b/lib/compiler/test/regressions_SUITE.erl
index 716a9693ed..7d2c2ac974 100644
--- a/lib/compiler/test/regressions_SUITE.erl
+++ b/lib/compiler/test/regressions_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2015. All Rights Reserved.
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,28 +19,25 @@
%% Test specific code snippets that has crashed the compiler in the past.
-module(regressions_SUITE).
--include_lib("test_server/include/test_server.hrl").
-
--export([all/0, groups/0, init_per_testcase/2,end_per_testcase/2]).
+-include_lib("common_test/include/ct.hrl").
+-export([all/0,groups/0,init_per_testcase/2,end_per_testcase/2,suite/0]).
-export([maps/1]).
groups() ->
[{p,test_lib:parallel(),
[maps]}].
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(2)).
-
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
+
all() ->
test_lib:recompile(?MODULE),
[{group,p}].
@@ -62,7 +59,8 @@ run(Config, Tests) ->
io:format("Compiling test for: ~w~n", [N]),
case catch run_test(Config, P) of
{'EXIT', Reason} ->
- ?t:format("~nTest ~p failed.~nReason: ~p~n", [N, Reason]),
+ io:format("~nTest ~p failed.~nReason: ~p~n",
+ [N, Reason]),
fail();
_ -> ok
end
@@ -73,7 +71,7 @@ run(Config, Tests) ->
run_test(Conf, Test0) ->
Module = "regressions_"++test_lib:uniq(),
Filename = Module ++ ".erl",
- DataDir = ?config(priv_dir, Conf),
+ DataDir = proplists:get_value(priv_dir, Conf),
Test = ["-module(", Module, "). ", Test0],
File = filename:join(DataDir, Filename),
Def = [binary,export_all,return],
@@ -94,5 +92,4 @@ run_test(Conf, Test0) ->
ok.
fail() ->
- io:format("failed~n"),
- ?t:fail().
+ ct:fail(failed).
diff --git a/lib/compiler/test/test_lib.erl b/lib/compiler/test/test_lib.erl
index 09ec8f3c81..d5b79e2357 100644
--- a/lib/compiler/test/test_lib.erl
+++ b/lib/compiler/test/test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,10 +19,10 @@
%%
-module(test_lib).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile({no_auto_import,[binary_part/2]}).
-export([id/1,recompile/1,parallel/0,uniq/0,opt_opts/1,get_data_dir/1,
- smoke_disasm/1,p_run/2,binary_part/2]).
+ is_cloned_mod/1,smoke_disasm/1,p_run/2,binary_part/2]).
id(I) -> I.
@@ -52,7 +52,7 @@ smoke_disasm(File) when is_list(File) ->
%% be slower than running them sequentially.
parallel() ->
- case ?t:is_cover() orelse erlang:system_info(schedulers) =:= 1 of
+ case test_server:is_cover() orelse erlang:system_info(schedulers) =:= 1 of
true -> [];
false -> [parallel]
end.
@@ -66,7 +66,7 @@ uniq() ->
opt_opts(Mod) ->
Comp = Mod:module_info(compile),
- {value,{options,Opts}} = lists:keysearch(options, 1, Comp),
+ {options,Opts} = lists:keyfind(options, 1, Comp),
lists:filter(fun(no_copt) -> true;
(no_postopt) -> true;
(no_float_opt) -> true;
@@ -85,18 +85,29 @@ opt_opts(Mod) ->
%% This function retrieves the path to the original data directory.
get_data_dir(Config) ->
- Data0 = ?config(data_dir, Config),
+ Data0 = proplists:get_value(data_dir, Config),
Opts = [{return,list}],
Data1 = re:replace(Data0, "_no_opt_SUITE", "_SUITE", Opts),
Data = re:replace(Data1, "_post_opt_SUITE", "_SUITE", Opts),
re:replace(Data, "_inline_SUITE", "_SUITE", Opts).
+is_cloned_mod(Mod) ->
+ is_cloned_mod_1(atom_to_list(Mod)).
+
+%% Test whether Mod is a cloned module.
+
+is_cloned_mod_1("no_opt_SUITE") -> true;
+is_cloned_mod_1("post_opt_SUITE") -> true;
+is_cloned_mod_1("inline_SUITE") -> true;
+is_cloned_mod_1([_|T]) -> is_cloned_mod_1(T);
+is_cloned_mod_1([]) -> false.
+
%% p_run(fun(Data) -> ok|error, List) -> ok
%% Will fail the test case if there were any errors.
p_run(Test, List) ->
S = erlang:system_info(schedulers),
- N = case ?t:is_cover() of
+ N = case test_server:is_cover() of
false ->
S + 1;
true ->
@@ -106,8 +117,9 @@ p_run(Test, List) ->
%% slightly faster than using 3. Using more than
%% 4 would not buy us much and could actually be
%% slower.
- max(S, 4)
+ min(S, 4)
end,
+ io:format("p_run: ~p parallel processes\n", [N]),
p_run_loop(Test, List, N, [], 0, 0).
p_run_loop(_, [], _, [], Errors, Ws) ->
@@ -118,7 +130,8 @@ p_run_loop(_, [], _, [], Errors, Ws) ->
1 -> {comment,"1 warning"};
N -> {comment,integer_to_list(N)++" warnings"}
end;
- N -> ?t:fail({N,errors})
+ N ->
+ ct:fail({N,errors})
end;
p_run_loop(Test, [H|T], N, Refs, Errors, Ws) when length(Refs) < N ->
{_,Ref} = erlang:spawn_monitor(fun() -> exit(Test(H)) end),
diff --git a/lib/compiler/test/trycatch_SUITE.erl b/lib/compiler/test/trycatch_SUITE.erl
index adcab8ef67..a591d6cc93 100644
--- a/lib/compiler/test/trycatch_SUITE.erl
+++ b/lib/compiler/test/trycatch_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,9 @@
nested_of/1,nested_catch/1,nested_after/1,
nested_horrid/1,last_call_optimization/1,bool/1,
plain_catch_coverage/1,andalso_orelse/1,get_in_try/1,
- hockey/1]).
+ hockey/1,handle_info/1,catch_in_catch/1,grab_bag/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -42,7 +42,7 @@ groups() ->
after_oops,eclectic,rethrow,nested_of,nested_catch,
nested_after,nested_horrid,last_call_optimization,
bool,plain_catch_coverage,andalso_orelse,get_in_try,
- hockey]}].
+ hockey,handle_info,catch_in_catch,grab_bag]}].
init_per_suite(Config) ->
@@ -60,32 +60,32 @@ end_per_group(_GroupName, Config) ->
basic(Conf) when is_list(Conf) ->
- ?line 2 =
+ 2 =
try my_div(4, 2)
catch
Class:Reason -> {Class,Reason}
end,
- ?line error =
+ error =
try my_div(1, 0)
catch
error:badarith -> error
end,
- ?line error =
+ error =
try 1.0 / zero()
catch
error:badarith -> error
end,
- ?line ok =
+ ok =
try my_add(53, atom)
catch
error:badarith -> ok
end,
- ?line exit_nisse =
+ exit_nisse =
try exit(nisse)
catch
exit:nisse -> exit_nisse
end,
- ?line ok =
+ ok =
try throw(kalle)
catch
kalle -> ok
@@ -94,27 +94,27 @@ basic(Conf) when is_list(Conf) ->
%% Try some stuff where the compiler will optimize away the try.
V = id({a,variable}),
- ?line V = try V catch nisse -> error end,
- ?line 42 = try 42 catch nisse -> error end,
- ?line [V] = try [V] catch nisse -> error end,
- ?line {ok,V} = try {ok,V} catch nisse -> error end,
+ V = try V catch nisse -> error end,
+ 42 = try 42 catch nisse -> error end,
+ [V] = try [V] catch nisse -> error end,
+ {ok,V} = try {ok,V} catch nisse -> error end,
%% Same idea, but use an after too.
- ?line V = try V catch nisse -> error after after_call() end,
- ?line after_clean(),
- ?line 42 = try 42 after after_call() end,
- ?line after_clean(),
- ?line [V] = try [V] catch nisse -> error after after_call() end,
- ?line after_clean(),
- ?line {ok,V} = try {ok,V} after after_call() end,
+ V = try V catch nisse -> error after after_call() end,
+ after_clean(),
+ 42 = try 42 after after_call() end,
+ after_clean(),
+ [V] = try [V] catch nisse -> error after after_call() end,
+ after_clean(),
+ {ok,V} = try {ok,V} after after_call() end,
%% Try/of
- ?line ok = try V of
- {a,variable} -> ok
- catch nisse -> erro
- end,
-
+ ok = try V of
+ {a,variable} -> ok
+ catch nisse -> erro
+ end,
+
ok.
after_call() ->
@@ -125,24 +125,24 @@ after_clean() ->
lean_throw(Conf) when is_list(Conf) ->
- ?line {throw,kalle} =
+ {throw,kalle} =
try throw(kalle)
catch
Kalle -> {throw,Kalle}
end,
- ?line {exit,kalle} =
+ {exit,kalle} =
try exit(kalle)
catch
Throw1 -> {throw,Throw1};
exit:Reason1 -> {exit,Reason1}
end,
- ?line {exit,kalle} =
+ {exit,kalle} =
try exit(kalle)
catch
exit:Reason2 -> {exit,Reason2};
Throw2 -> {throw,Throw2}
end,
- ?line {exit,kalle} =
+ {exit,kalle} =
try try exit(kalle)
catch
Throw3 -> {throw,Throw3}
@@ -155,25 +155,25 @@ lean_throw(Conf) when is_list(Conf) ->
try_of(Conf) when is_list(Conf) ->
- ?line {ok,{some,content}} =
+ {ok,{some,content}} =
try_of_1({value,{good,{some,content}}}),
- ?line {error,[other,content]} =
+ {error,[other,content]} =
try_of_1({value,{bad,[other,content]}}),
- ?line {caught,{exit,{ex,it,[reason]}}} =
+ {caught,{exit,{ex,it,[reason]}}} =
try_of_1({exit,{ex,it,[reason]}}),
- ?line {caught,{throw,[term,{in,a,{tuple}}]}} =
+ {caught,{throw,[term,{in,a,{tuple}}]}} =
try_of_1({throw,[term,{in,a,{tuple}}]}),
- ?line {caught,{error,[bad,arg]}} =
+ {caught,{error,[bad,arg]}} =
try_of_1({error,[bad,arg]}),
- ?line {caught,{error,badarith}} =
+ {caught,{error,badarith}} =
try_of_1({'div',{1,0}}),
- ?line {caught,{error,badarith}} =
+ {caught,{error,badarith}} =
try_of_1({'add',{a,0}}),
- ?line {caught,{error,badarg}} =
+ {caught,{error,badarg}} =
try_of_1({'abs',x}),
- ?line {caught,{error,function_clause}} =
+ {caught,{error,function_clause}} =
try_of_1(illegal),
- ?line {error,{try_clause,{some,other_garbage}}} =
+ {error,{try_clause,{some,other_garbage}}} =
try try_of_1({value,{some,other_garbage}})
catch error:Reason -> {error,Reason}
end,
@@ -191,29 +191,29 @@ try_of_1(X) ->
try_after(Conf) when is_list(Conf) ->
- ?line {{ok,[some,value],undefined},finalized} =
+ {{ok,[some,value],undefined},finalized} =
try_after_1({value,{ok,[some,value]}},finalized),
- ?line {{error,badarith,undefined},finalized} =
+ {{error,badarith,undefined},finalized} =
try_after_1({'div',{1,0}},finalized),
- ?line {{error,badarith,undefined},finalized} =
+ {{error,badarith,undefined},finalized} =
try_after_1({'add',{1,a}},finalized),
- ?line {{error,badarg,undefined},finalized} =
+ {{error,badarg,undefined},finalized} =
try_after_1({'abs',a},finalized),
- ?line {{error,[the,{reason}],undefined},finalized} =
+ {{error,[the,{reason}],undefined},finalized} =
try_after_1({error,[the,{reason}]},finalized),
- ?line {{throw,{thrown,[reason]},undefined},finalized} =
+ {{throw,{thrown,[reason]},undefined},finalized} =
try_after_1({throw,{thrown,[reason]}},finalized),
- ?line {{exit,{exited,{reason}},undefined},finalized} =
+ {{exit,{exited,{reason}},undefined},finalized} =
try_after_1({exit,{exited,{reason}}},finalized),
- ?line {{error,function_clause,undefined},finalized} =
+ {{error,function_clause,undefined},finalized} =
try_after_1(function_clause,finalized),
- ?line ok =
+ ok =
try try_after_1({'add',{1,1}}, finalized)
catch
error:{try_clause,2} -> ok
end,
- ?line finalized = erase(try_after),
- ?line ok =
+ finalized = erase(try_after),
+ ok =
try try foo({exit,[reaso,{n}]})
after put(try_after, finalized)
end
@@ -242,7 +242,7 @@ try_after_1(X, Y) ->
after_bind(Conf) when is_list(Conf) ->
V = [make_ref(),self()|value],
- ?line {value,{value,V}} =
+ {value,{value,V}} =
after_bind_1({value,V}, V, {value,V}),
ok.
@@ -269,12 +269,12 @@ after_bind_1(X, V, Y) ->
catch_oops(Conf) when is_list(Conf) ->
V = {v,[a,l|u],{e},self()},
- ?line {value,V} = catch_oops_1({value,V}),
- ?line {value,1} = catch_oops_1({'div',{1,1}}),
- ?line {error,badarith} = catch_oops_1({'div',{1,0}}),
- ?line {error,function_clause} = catch_oops_1(function_clause),
- ?line {throw,V} = catch_oops_1({throw,V}),
- ?line {exit,V} = catch_oops_1({exit,V}),
+ {value,V} = catch_oops_1({value,V}),
+ {value,1} = catch_oops_1({'div',{1,1}}),
+ {error,badarith} = catch_oops_1({'div',{1,0}}),
+ {error,function_clause} = catch_oops_1(function_clause),
+ {throw,V} = catch_oops_1({throw,V}),
+ {exit,V} = catch_oops_1({exit,V}),
ok.
catch_oops_1(X) ->
@@ -293,10 +293,10 @@ catch_oops_1(X) ->
after_oops(Conf) when is_list(Conf) ->
V = {self(),make_ref()},
- ?line {{value,V},V} = after_oops_1({value,V}, {value,V}),
- ?line {{exit,V},V} = after_oops_1({exit,V}, {value,V}),
- ?line {{error,V},undefined} = after_oops_1({value,V}, {error,V}),
- ?line {{error,function_clause},undefined} =
+ {{value,V},V} = after_oops_1({value,V}, {value,V}),
+ {{exit,V},V} = after_oops_1({exit,V}, {value,V}),
+ {{error,V},undefined} = after_oops_1({value,V}, {error,V}),
+ {{error,function_clause},undefined} =
after_oops_1({exit,V}, function_clause),
ok.
@@ -317,39 +317,39 @@ after_oops_1(X, Y) ->
eclectic(Conf) when is_list(Conf) ->
V = {make_ref(),3.1415926535,[[]|{}]},
- ?line {{value,{value,V},V},V} =
+ {{value,{value,V},V},V} =
eclectic_1({foo,{value,{value,V}}}, undefined, {value,V}),
- ?line {{'EXIT',{V,[{?MODULE,foo,1,_}|_]}},V} =
+ {{'EXIT',{V,[{?MODULE,foo,1,_}|_]}},V} =
eclectic_1({catch_foo,{error,V}}, undefined, {value,V}),
- ?line {{error,{exit,V},{'EXIT',V}},V} =
+ {{error,{exit,V},{'EXIT',V}},V} =
eclectic_1({foo,{error,{exit,V}}}, error, {value,V}),
- ?line {{value,{value,V},V},
+ {{value,{value,V},V},
{'EXIT',{badarith,[{?MODULE,my_add,2,_}|_]}}} =
eclectic_1({foo,{value,{value,V}}}, undefined, {'add',{0,a}}),
- ?line {{'EXIT',V},V} =
+ {{'EXIT',V},V} =
eclectic_1({catch_foo,{exit,V}}, undefined, {throw,V}),
- ?line {{error,{'div',{1,0}},{'EXIT',{badarith,[{?MODULE,my_div,2,_}|_]}}},
+ {{error,{'div',{1,0}},{'EXIT',{badarith,[{?MODULE,my_div,2,_}|_]}}},
{'EXIT',V}} =
eclectic_1({foo,{error,{'div',{1,0}}}}, error, {exit,V}),
- ?line {{{error,V},{'EXIT',{V,[{?MODULE,foo,1,_}|_]}}},
+ {{{error,V},{'EXIT',{V,[{?MODULE,foo,1,_}|_]}}},
{'EXIT',V}} =
eclectic_1({catch_foo,{throw,{error,V}}}, undefined, {exit,V}),
%%
- ?line {{value,{value,{value,V},V}},V} =
+ {{value,{value,{value,V},V}},V} =
eclectic_2({value,{value,V}}, undefined, {value,V}),
- ?line {{value,{throw,{value,V},V}},V} =
+ {{value,{throw,{value,V},V}},V} =
eclectic_2({throw,{value,V}}, throw, {value,V}),
- ?line {{caught,{'EXIT',V}},undefined} =
+ {{caught,{'EXIT',V}},undefined} =
eclectic_2({value,{value,V}}, undefined, {exit,V}),
- ?line {{caught,{'EXIT',{V,[{?MODULE,foo,1,_}|_]}}},undefined} =
+ {{caught,{'EXIT',{V,[{?MODULE,foo,1,_}|_]}}},undefined} =
eclectic_2({error,{value,V}}, throw, {error,V}),
- ?line {{caught,{'EXIT',{badarg,[{erlang,abs,[V],_}|_]}}},V} =
+ {{caught,{'EXIT',{badarg,[{erlang,abs,[V],_}|_]}}},V} =
eclectic_2({value,{'abs',V}}, undefined, {value,V}),
- ?line {{caught,{'EXIT',{badarith,[{?MODULE,my_add,2,_}|_]}}},V} =
+ {{caught,{'EXIT',{badarith,[{?MODULE,my_add,2,_}|_]}}},V} =
eclectic_2({exit,{'add',{0,a}}}, exit, {value,V}),
- ?line {{caught,{'EXIT',V}},undefined} =
+ {{caught,{'EXIT',V}},undefined} =
eclectic_2({value,{error,V}}, undefined, {exit,V}),
- ?line {{caught,{'EXIT',{V,[{?MODULE,foo,1,_}|_]}}},undefined} =
+ {{caught,{'EXIT',{V,[{?MODULE,foo,1,_}|_]}}},undefined} =
eclectic_2({throw,{'div',{1,0}}}, throw, {error,V}),
ok.
@@ -377,44 +377,44 @@ eclectic_2(X, C, Y) ->
Catch =
case
catch
- {Done,
- try foo(X) of
- V -> {value,V,foo(V)}
- catch
- C:D -> {C,D,foo(D)}
- after
- put(eclectic, foo(Y))
- end} of
- {Done,Z} -> {value,Z};
- Z -> {caught,Z}
- end,
+ {Done,
+ try foo(X) of
+ V -> {value,V,foo(V)}
+ catch
+ C:D -> {C,D,foo(D)}
+ after
+ put(eclectic, foo(Y))
+ end} of
+ {Done,Z} -> {value,Z};
+ Z -> {caught,Z}
+ end,
{Catch,erase(eclectic)}.
rethrow(Conf) when is_list(Conf) ->
V = {a,[b,{c,self()},make_ref]},
- ?line {value2,value1} =
+ {value2,value1} =
rethrow_1({value,V}, V),
- ?line {caught2,{error,V}} =
+ {caught2,{error,V}} =
rethrow_2({error,V}, undefined),
- ?line {caught2,{exit,V}} =
+ {caught2,{exit,V}} =
rethrow_1({exit,V}, error),
- ?line {caught2,{throw,V}} =
+ {caught2,{throw,V}} =
rethrow_1({throw,V}, undefined),
- ?line {caught2,{throw,V}} =
+ {caught2,{throw,V}} =
rethrow_2({throw,V}, undefined),
- ?line {caught2,{error,badarith}} =
+ {caught2,{error,badarith}} =
rethrow_1({'add',{0,a}}, throw),
- ?line {caught2,{error,function_clause}} =
+ {caught2,{error,function_clause}} =
rethrow_2(function_clause, undefined),
- ?line {caught2,{error,{try_clause,V}}} =
+ {caught2,{error,{try_clause,V}}} =
rethrow_1({value,V}, exit),
- ?line {value2,{caught1,V}} =
+ {value2,{caught1,V}} =
rethrow_1({error,V}, error),
- ?line {value2,{caught1,V}} =
+ {value2,{caught1,V}} =
rethrow_1({exit,V}, exit),
- ?line {value2,caught1} =
+ {value2,caught1} =
rethrow_2({throw,V}, V),
ok.
@@ -444,91 +444,91 @@ rethrow_2(X, C1) ->
nested_of(Conf) when is_list(Conf) ->
V = {[self()|make_ref()],1.4142136},
- ?line {{value,{value1,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{value,{value1,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,{V,x1}},
{value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{throw,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{throw,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,{V,x1}},
{throw,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,{V,x1}},
{throw,{V,x2}}, {'div',{1,0}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,badarith}},
+ undefined,
+ undefined,
+ finalized} =
nested_of_1({{value,{V,x1}},void,{V,x1}},
{throw,{V,x2}}, {'div',{1,0}}, {'add',{0,b}}),
%%
- ?line {{caught,{error,{try_clause,{V,x1}}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,{try_clause,{V,x1}}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,try_clause},
void, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{exit,{V,x3}}},
- undefined,
- {V,x4},
- finalized} =
+ {{caught,{exit,{V,x3}}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,try_clause},
void, {exit,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{throw,{V,x4}}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{throw,{V,x4}}},
+ undefined,
+ undefined,
+ finalized} =
nested_of_1({{value,{V,x1}},void,try_clause},
void, {exit,{V,x3}}, {throw,{V,x4}}),
%%
- ?line {{value,{caught1,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{value,{caught1,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{error,{V,x1}},error,{V,x1}},
{value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{error,{V,x1}},error,{V,x1}},
{'add',{1,c}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_of_1({{error,{V,x1}},error,{V,x1}},
{'add',{1,c}}, {'div',{17,0}}, {value,{V,x4}}),
- ?line {{caught,{error,badarg}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,badarg}},
+ undefined,
+ undefined,
+ finalized} =
nested_of_1({{error,{V,x1}},error,{V,x1}},
{'add',{1,c}}, {'div',{17,0}}, {'abs',V}),
%%
- ?line {{caught,{error,badarith}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{'add',{2,c}},rethrow,void},
void, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarg}},
- undefined,
- {V,x4},
- finalized} =
+ {{caught,{error,badarg}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_of_1({{'add',{2,c}},rethrow,void},
void, {'abs',V}, {value,{V,x4}}),
- ?line {{caught,{error,function_clause}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,function_clause}},
+ undefined,
+ undefined,
+ finalized} =
nested_of_1({{'add',{2,c}},rethrow,void},
void, {'abs',V}, function_clause),
ok.
@@ -569,93 +569,93 @@ nested_of_1({X1,C1,V1},
nested_catch(Conf) when is_list(Conf) ->
V = {[make_ref(),1.4142136,self()]},
- ?line {{value,{value1,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{value,{value1,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,{V,x1}},
- {value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{throw,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{throw,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,{V,x1}},
- {throw,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- {V,x4},
- finalized} =
+ {throw,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{error,badarith}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,{V,x1}},
- {throw,{V,x2}}, {'div',{1,0}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- undefined,
- finalized} =
+ {throw,{V,x2}}, {'div',{1,0}}, {value,{V,x4}}),
+ {{caught,{error,badarith}},
+ undefined,
+ undefined,
+ finalized} =
nested_catch_1({{value,{V,x1}},void,{V,x1}},
- {throw,{V,x2}}, {'div',{1,0}}, {'add',{0,b}}),
+ {throw,{V,x2}}, {'div',{1,0}}, {'add',{0,b}}),
%%
- ?line {{caught,{error,{try_clause,{V,x1}}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,{try_clause,{V,x1}}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,try_clause},
- void, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{exit,{V,x3}}},
- undefined,
- {V,x4},
- finalized} =
+ void, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{exit,{V,x3}}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,try_clause},
- void, {exit,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{throw,{V,x4}}},
- undefined,
- undefined,
- finalized} =
+ void, {exit,{V,x3}}, {value,{V,x4}}),
+ {{caught,{throw,{V,x4}}},
+ undefined,
+ undefined,
+ finalized} =
nested_catch_1({{value,{V,x1}},void,try_clause},
- void, {exit,{V,x3}}, {throw,{V,x4}}),
+ void, {exit,{V,x3}}, {throw,{V,x4}}),
%%
- ?line {{value,{caught1,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{value,{caught1,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{error,{V,x1}},error,{V,x1}},
- {value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- {V,x3},
- {V,x4},
- finalized} =
+ {value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{error,badarith}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{error,{V,x1}},error,{V,x1}},
- {'add',{1,c}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- {V,x4},
- finalized} =
+ {'add',{1,c}}, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{error,badarith}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_catch_1({{error,{V,x1}},error,{V,x1}},
- {'add',{1,c}}, {'div',{17,0}}, {value,{V,x4}}),
- ?line {{caught,{error,badarg}},
- undefined,
- undefined,
- finalized} =
+ {'add',{1,c}}, {'div',{17,0}}, {value,{V,x4}}),
+ {{caught,{error,badarg}},
+ undefined,
+ undefined,
+ finalized} =
nested_catch_1({{error,{V,x1}},error,{V,x1}},
- {'add',{1,c}}, {'div',{17,0}}, {'abs',V}),
+ {'add',{1,c}}, {'div',{17,0}}, {'abs',V}),
%%
- ?line {{caught,{error,badarith}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{'add',{2,c}},rethrow,void},
- void, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarg}},
- undefined,
- {V,x4},
- finalized} =
+ void, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{error,badarg}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_catch_1({{'add',{2,c}},rethrow,void},
- void, {'abs',V}, {value,{V,x4}}),
- ?line {{caught,{error,function_clause}},
- undefined,
- undefined,
- finalized} =
+ void, {'abs',V}, {value,{V,x4}}),
+ {{caught,{error,function_clause}},
+ undefined,
+ undefined,
+ finalized} =
nested_catch_1({{'add',{2,c}},rethrow,void},
- void, {'abs',V}, function_clause),
+ void, {'abs',V}, function_clause),
ok.
nested_catch_1({X1,C1,V1},
@@ -694,64 +694,64 @@ nested_catch_1({X1,C1,V1},
nested_after(Conf) when is_list(Conf) ->
V = [{make_ref(),1.4142136,self()}],
- ?line {value,
+ {value,
{V,x3},
{value1,{V,x2}},
finalized} =
nested_after_1({{value,{V,x1}},void,{V,x1}},
{value,{V,x2}}, {value,{V,x3}}),
- ?line {{caught,{error,{V,x2}}},
+ {{caught,{error,{V,x2}}},
{V,x3},
undefined,
finalized} =
nested_after_1({{value,{V,x1}},void,{V,x1}},
{error,{V,x2}}, {value,{V,x3}}),
- ?line {{caught,{exit,{V,x3}}},
+ {{caught,{exit,{V,x3}}},
undefined,
undefined,
finalized} =
nested_after_1({{value,{V,x1}},void,{V,x1}},
{error,{V,x2}}, {exit,{V,x3}}),
%%
- ?line {{caught,{error,{try_clause,{V,x1}}}},
+ {{caught,{error,{try_clause,{V,x1}}}},
{V,x3},
undefined,
finalized} =
nested_after_1({{value,{V,x1}},void,try_clause},
void, {value,{V,x3}}),
- ?line {{caught,{error,badarith}},
+ {{caught,{error,badarith}},
undefined,
undefined,
finalized} =
nested_after_1({{value,{V,x1}},void,try_clause},
void, {'div',{17,0}}),
%%
- ?line {value,
+ {value,
{V,x3},
{caught1,{V,x2}},
finalized} =
nested_after_1({{throw,{V,x1}},throw,{V,x1}},
{value,{V,x2}}, {value,{V,x3}}),
- ?line {{caught,{error,badarith}},
+ {{caught,{error,badarith}},
{V,x3},
undefined,
finalized} =
nested_after_1({{throw,{V,x1}},throw,{V,x1}},
{'add',{a,b}}, {value,{V,x3}}),
- ?line {{caught,{error,badarg}},
+ {{caught,{error,badarg}},
undefined,
undefined,
finalized} =
nested_after_1({{throw,{V,x1}},throw,{V,x1}},
{'add',{a,b}}, {'abs',V}),
%%
- ?line {{caught,{throw,{V,x1}}},
+ {{caught,{throw,{V,x1}}},
{V,x3},
undefined,
finalized} =
nested_after_1({{throw,{V,x1}},rethrow,void},
void, {value,{V,x3}}),
- ?line {{caught,{error,badarith}},
+ {{caught,{error,badarith}},
undefined,
undefined,
finalized} =
@@ -843,12 +843,12 @@ my_abs(X) -> abs(X).
last_call_optimization(Config) when is_list(Config) ->
- ?line error = in_tail(dum),
- ?line StkSize0 = in_tail(0),
- ?line StkSize = in_tail(50000),
+ error = in_tail(dum),
+ StkSize0 = in_tail(0),
+ StkSize = in_tail(50000),
io:format("StkSize0 = ~p", [StkSize0]),
io:format("StkSize = ~p", [StkSize]),
- ?line StkSize = StkSize0,
+ StkSize = StkSize0,
ok.
in_tail(E) ->
@@ -891,20 +891,20 @@ do_bool(A0, B) ->
plain_catch_coverage(Config) when is_list(Config) ->
%% Cover some code in beam_block:alloc_may_pass/1.
- ?line {a,[42]} = do_plain_catch_list(42).
+ {a,[42]} = do_plain_catch_list(42).
do_plain_catch_list(X) ->
B = [X],
catch id({a,B}).
andalso_orelse(Config) when is_list(Config) ->
- ?line {2,{a,42}} = andalso_orelse_1(true, {a,42}),
- ?line {b,{b}} = andalso_orelse_1(false, {b}),
- ?line {catched,no_tuple} = andalso_orelse_1(false, no_tuple),
+ {2,{a,42}} = andalso_orelse_1(true, {a,42}),
+ {b,{b}} = andalso_orelse_1(false, {b}),
+ {catched,no_tuple} = andalso_orelse_1(false, no_tuple),
- ?line ok = andalso_orelse_2({type,[a]}),
- ?line also_ok = andalso_orelse_2({type,[]}),
- ?line also_ok = andalso_orelse_2({type,{a}}),
+ ok = andalso_orelse_2({type,[a]}),
+ also_ok = andalso_orelse_2({type,[]}),
+ also_ok = andalso_orelse_2({type,{a}}),
ok.
andalso_orelse_1(A, B) ->
@@ -919,8 +919,6 @@ andalso_orelse_1(A, B) ->
catched
end,B}.
-id(I) -> I.
-
andalso_orelse_2({Type,Keyval}) ->
try
if is_atom(Type) andalso length(Keyval) > 0 -> ok;
@@ -957,3 +955,89 @@ hockey() ->
receive _ -> (b = fun() -> ok end)
+ hockey, +x after 0 -> ok end, try (a = fun() -> ok end) + hockey, +
y catch _ -> ok end.
+
+
+-record(state, {foo}).
+
+handle_info(_Config) ->
+ do_handle_info({foo}, #state{}),
+ ok.
+
+do_handle_info({_}, State) ->
+ handle_info_ok(),
+ State#state{foo = bar},
+ case ok of
+ _ ->
+ case catch handle_info_ok() of
+ ok ->
+ {stop, State}
+ end
+ end;
+do_handle_info(_, State) ->
+ (catch begin
+ handle_info_ok(),
+ State#state{foo = bar}
+ end),
+ case ok of
+ _ ->
+ case catch handle_info_ok() of
+ ok ->
+ {stop, State}
+ end
+ end.
+
+handle_info_ok() -> ok.
+
+'catch_in_catch'(_Config) ->
+ process_flag(trap_exit, true),
+ Pid = spawn_link(fun() ->
+ catch_in_catch_init(x),
+ exit(good_exit)
+ end),
+ receive
+ {'EXIT',Pid,good_exit} ->
+ ok;
+ Other ->
+ io:format("Unexpected: ~p\n", [Other]),
+ error
+ after 32000 ->
+ io:format("No message received\n"),
+ error
+ end.
+
+'catch_in_catch_init'(Param) ->
+ process_flag(trap_exit, true),
+ %% The catches were improperly nested, causing a "No catch found" crash.
+ (catch begin
+ id(Param),
+ (catch exit(bar))
+ end
+ ),
+ ignore.
+
+grab_bag(_Config) ->
+ %% Thanks to Martin Bjorklund.
+ _ = fun() -> ok end,
+ try
+ fun() -> ok end
+ after
+ fun({A, B}) -> A + B end
+ end,
+
+ %% Thanks to Tim Rath.
+ A = {6},
+ try
+ io:fwrite("")
+ after
+ fun () ->
+ fun () -> {_} = A end
+ end
+ end,
+
+ %% Unnecessary catch.
+ 22 = (catch 22),
+
+ ok.
+
+
+id(I) -> I.
diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl
index a964afe5a1..f884e6e7d6 100644
--- a/lib/compiler/test/warnings_SUITE.erl
+++ b/lib/compiler/test/warnings_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,9 +27,9 @@
-define(privdir, "warnings_SUITE_priv").
-define(t, test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
--define(datadir, ?config(data_dir, Conf)).
--define(privdir, ?config(priv_dir, Conf)).
+-include_lib("common_test/include/ct.hrl").
+-define(datadir, proplists:get_value(data_dir, Conf)).
+-define(privdir, proplists:get_value(priv_dir, Conf)).
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -41,21 +41,18 @@
files/1,effect/1,bin_opt_info/1,bin_construction/1,
comprehensions/1,maps/1,maps_bin_opt_info/1,
redundant_boolean_clauses/1,
- latin1_fallback/1,underscore/1,no_warnings/1]).
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(2)).
+ latin1_fallback/1,underscore/1,no_warnings/1,
+ bit_syntax/1]).
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
test_lib:recompile(?MODULE),
@@ -68,7 +65,7 @@ groups() ->
bin_opt_info,bin_construction,comprehensions,maps,
maps_bin_opt_info,
redundant_boolean_clauses,latin1_fallback,
- underscore,no_warnings]}].
+ underscore,no_warnings,bit_syntax]}].
init_per_suite(Config) ->
Config.
@@ -103,7 +100,7 @@ pattern(Config) when is_list(Config) ->
[{2,v3_core,nomatch},
{6,v3_core,nomatch},
{11,v3_core,nomatch} ] }}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
pattern2(Config) when is_list(Config) ->
@@ -127,7 +124,7 @@ pattern2(Config) when is_list(Config) ->
{4,sys_core_fold,no_clause_match},
{5,sys_core_fold,nomatch_clause_type},
{6,sys_core_fold,nomatch_clause_type}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
%% Disable Core Erlang optimizations. v3_kernel should produce
%% a warning for the clause that didn't match.
@@ -136,7 +133,7 @@ pattern2(Config) when is_list(Config) ->
[nowarn_unused_vars,no_copt],
{warnings,
[{2,v3_kernel,{nomatch_shadow,1}}]}}],
- ?line [] = run(Config, Ts2),
+ [] = run(Config, Ts2),
ok.
pattern3(Config) when is_list(Config) ->
@@ -152,7 +149,7 @@ pattern3(Config) when is_list(Config) ->
[nowarn_unused_vars],
{warnings,
[{4,v3_kernel,{nomatch_shadow,2}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
@@ -213,7 +210,7 @@ pattern4(Config) when is_list(Config) ->
{23,sys_core_fold,no_clause_match},
{33,sys_core_fold,no_clause_match}
]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
@@ -256,7 +253,7 @@ guard(Config) when is_list(Config) ->
{11,sys_core_fold,nomatch_guard},
{11,sys_core_fold,{eval_failure,badarg}}
]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
@@ -321,7 +318,7 @@ bool_cases(Config) when is_list(Config) ->
[{6,sys_core_fold,nomatch_shadow},
{13,sys_core_fold,nomatch_shadow},
{18,sys_core_fold,nomatch_clause_type} ]} }],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
bad_apply(Config) when is_list(Config) ->
@@ -340,11 +337,11 @@ bad_apply(Config) when is_list(Config) ->
{4,v3_kernel,bad_call},
{5,v3_kernel,bad_call},
{6,v3_kernel,bad_call}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
%% Also verify that the generated code generates the correct error.
- ?line try erlang:42() of
- _ -> ?line ?t:fail()
+ try erlang:42() of
+ _ -> ct:fail(should_fail)
catch
error:badarg -> ok
end,
@@ -368,7 +365,7 @@ files(Config) when is_list(Config) ->
[{"file1",[{17,sys_core_fold,{eval_failure,badarith}}]},
{"file2",[{10,sys_core_fold,{eval_failure,badarith}}]}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
%% Test warnings for term construction and BIF calls in effect context.
@@ -514,7 +511,7 @@ effect(Config) when is_list(Config) ->
{28,sys_core_fold,useless_building},
{36,sys_core_fold,{no_effect,{erlang,'=:=',2}}},
{38,sys_core_fold,{no_effect,{erlang,get_cookie,0}}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
bin_opt_info(Config) when is_list(Config) ->
@@ -537,14 +534,14 @@ bin_opt_info(Config) when is_list(Config) ->
{5,beam_bsm,{no_bin_opt,{{t1,1},no_suitable_bs_start_match}}},
{9,beam_bsm,{no_bin_opt,
{binary_used_in,{extfunc,erlang,split_binary,2}}}} ]}}],
- ?line [] = run(Config, Ts1),
+ [] = run(Config, Ts1),
%% For coverage: don't give the bin_opt_info option.
Ts2 = [{bsm2,
Code,
[],
[]}],
- ?line [] = run(Config, Ts2),
+ [] = run(Config, Ts2),
ok.
bin_construction(Config) when is_list(Config) ->
@@ -561,7 +558,7 @@ bin_construction(Config) when is_list(Config) ->
[],
{warnings,[{4,sys_core_fold,embedded_binary_size},
{8,sys_core_fold,{embedded_unit,8,28}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
@@ -783,6 +780,50 @@ no_warnings(Config) when is_list(Config) ->
run(Config, Ts),
ok.
+bit_syntax(Config) ->
+ Ts = [{?FUNCTION_NAME,
+ <<"a(<<-1>>) -> ok;
+ a(<<1023>>) -> ok;
+ a(<<777/signed>>) -> ok;
+ a(<<a/binary>>) -> ok;
+ a(<<a/integer>>) -> ok;
+ a(<<a/float>>) -> ok;
+ a(<<a/utf8>>) -> ok;
+ a(<<a/utf16>>) -> ok;
+ a(<<a/utf32>>) -> ok;
+ a(<<a/utf32>>) -> ok.
+ b(Bin) -> Sz = bad, <<42:Sz>> = Bin.
+ c(Sz, Bin) ->
+ case Bin of
+ <<-42:Sz/unsigned>> -> ok;
+ <<42:Sz/float>> -> ok;
+ <<42:Sz/binary>> -> ok
+ end.
+ ">>,
+ [],
+ {warnings,[{1,sys_core_fold,no_clause_match},
+ {1,sys_core_fold,{nomatch_bit_syntax_unsigned,-1}},
+ {2,sys_core_fold,{nomatch_bit_syntax_truncated,
+ unsigned,1023,8}},
+ {3,sys_core_fold,{nomatch_bit_syntax_truncated,
+ signed,777,8}},
+ {4,sys_core_fold,{nomatch_bit_syntax_type,a,binary}},
+ {5,sys_core_fold,{nomatch_bit_syntax_type,a,integer}},
+ {6,sys_core_fold,{nomatch_bit_syntax_type,a,float}},
+ {7,sys_core_fold,{nomatch_bit_syntax_type,a,utf8}},
+ {8,sys_core_fold,{nomatch_bit_syntax_type,a,utf16}},
+ {9,sys_core_fold,{nomatch_bit_syntax_type,a,utf32}},
+ {10,sys_core_fold,{nomatch_bit_syntax_type,a,utf32}},
+ {11,sys_core_fold,no_clause_match},
+ {11,sys_core_fold,{nomatch_bit_syntax_size,bad}},
+ {14,sys_core_fold,{nomatch_bit_syntax_unsigned,-42}},
+ {16,sys_core_fold,{nomatch_bit_syntax_type,42,binary}}
+ ]}
+ }],
+ run(Config, Ts),
+ ok.
+
+
%%%
%%% End of test cases.
%%%
@@ -793,7 +834,7 @@ run(Config, Tests) ->
E ->
BadL;
Bad ->
- ?t:format("~nTest ~p failed. Expected~n ~p~n"
+ io:format("~nTest ~p failed. Expected~n ~p~n"
"but got~n ~p~n", [N, E, Bad]),
fail()
end
@@ -806,33 +847,32 @@ run(Config, Tests) ->
run_test(Conf, Test0, Warnings) ->
Module = "warnings_"++test_lib:uniq(),
Filename = Module ++ ".erl",
- ?line DataDir = ?privdir,
+ DataDir = ?privdir,
Test = ["-module(", Module, "). ", Test0],
- ?line File = filename:join(DataDir, Filename),
- ?line Opts = [binary,export_all,return|Warnings],
- ?line ok = file:write_file(File, Test),
+ File = filename:join(DataDir, Filename),
+ Opts = [binary,export_all,return|Warnings],
+ ok = file:write_file(File, Test),
%% Compile once just to print all warnings.
- ?line compile:file(File, [binary,export_all,report|Warnings]),
+ compile:file(File, [binary,export_all,report|Warnings]),
%% Test result of compilation.
- ?line Res = case compile:file(File, Opts) of
- {ok, _M, Bin, []} when is_binary(Bin) ->
- [];
- {ok, _M, Bin, Ws0} when is_binary(Bin) ->
- %% We are not interested in warnings from
- %% erl_lint here.
- WsL = [{F,[W || {_,Mod,_}=W <- Ws,
- Mod =/= erl_lint]} ||
- {F,Ws} <- Ws0],
- case WsL of
- [{_File,Ws}] -> {warnings, Ws};
- _ -> list_to_tuple([warnings, WsL])
- end
- end,
+ Res = case compile:file(File, Opts) of
+ {ok, _M, Bin, []} when is_binary(Bin) ->
+ [];
+ {ok, _M, Bin, Ws0} when is_binary(Bin) ->
+ %% We are not interested in warnings from
+ %% erl_lint here.
+ WsL = [{F,[W || {_,Mod,_}=W <- Ws,
+ Mod =/= erl_lint]} ||
+ {F,Ws} <- Ws0],
+ case WsL of
+ [{_File,Ws}] -> {warnings, Ws};
+ _ -> list_to_tuple([warnings, WsL])
+ end
+ end,
file:delete(File),
Res.
fail() ->
- io:format("failed~n"),
- ?t:fail().
+ ct:fail(failed).
diff --git a/lib/compiler/vsn.mk b/lib/compiler/vsn.mk
index c83455240d..334784657e 100644
--- a/lib/compiler/vsn.mk
+++ b/lib/compiler/vsn.mk
@@ -1 +1 @@
-COMPILER_VSN = 6.0.3
+COMPILER_VSN = 7.0.1
diff --git a/lib/configure.in.src b/lib/configure.in.src
index 7ac52f8a97..d507a5c0dd 100644
--- a/lib/configure.in.src
+++ b/lib/configure.in.src
@@ -1,7 +1,7 @@
dnl
dnl %CopyrightBegin%
dnl
-dnl Copyright Ericsson AB 1999-2011. All Rights Reserved.
+dnl Copyright Ericsson AB 1999-2016. All Rights Reserved.
dnl
dnl Licensed under the Apache License, Version 2.0 (the "License");
dnl you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/Makefile b/lib/cosEvent/Makefile
index 4c13a8ce01..276b7bd865 100644
--- a/lib/cosEvent/Makefile
+++ b/lib/cosEvent/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin.xml
index 1e82dd684a..29336c1878 100644
--- a/lib/cosEvent/doc/src/CosEventChannelAdmin.xml
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml
index 1903812e5e..80d36ba5c5 100644
--- a/lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ConsumerAdmin.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml
index 159c0b87e2..f32e742240 100644
--- a/lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_EventChannel.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml
index de18f047a9..83bf8acbf2 100644
--- a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullConsumer.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml
index 212372b4c2..0060e71e2b 100644
--- a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPullSupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml
index 58127cac95..9f19d001f9 100644
--- a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushConsumer.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml
index 650a303d7e..2b1098b9a7 100644
--- a/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_ProxyPushSupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml b/lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml
index f29bb5994b..2a58c0a873 100644
--- a/lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml
+++ b/lib/cosEvent/doc/src/CosEventChannelAdmin_SupplierAdmin.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/Makefile b/lib/cosEvent/doc/src/Makefile
index ed69d70d47..ba505d6f7b 100644
--- a/lib/cosEvent/doc/src/Makefile
+++ b/lib/cosEvent/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/doc/src/book.xml b/lib/cosEvent/doc/src/book.xml
index f7c4e853c7..5c0172b4cd 100644
--- a/lib/cosEvent/doc/src/book.xml
+++ b/lib/cosEvent/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/ch_contents.xml b/lib/cosEvent/doc/src/ch_contents.xml
index 1fe0f772e6..07773877ea 100644
--- a/lib/cosEvent/doc/src/ch_contents.xml
+++ b/lib/cosEvent/doc/src/ch_contents.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/ch_event_service.xml b/lib/cosEvent/doc/src/ch_event_service.xml
index 60d948b323..3a783234af 100644
--- a/lib/cosEvent/doc/src/ch_event_service.xml
+++ b/lib/cosEvent/doc/src/ch_event_service.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/ch_introduction.xml b/lib/cosEvent/doc/src/ch_introduction.xml
index b3d26f23f6..c88e96e40d 100644
--- a/lib/cosEvent/doc/src/ch_introduction.xml
+++ b/lib/cosEvent/doc/src/ch_introduction.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/cosEventApp.xml b/lib/cosEvent/doc/src/cosEventApp.xml
index 5b911fec4f..d26512e0c3 100644
--- a/lib/cosEvent/doc/src/cosEventApp.xml
+++ b/lib/cosEvent/doc/src/cosEventApp.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2001</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/notes.xml b/lib/cosEvent/doc/src/notes.xml
index 3af3a9e141..fe94cb64d3 100644
--- a/lib/cosEvent/doc/src/notes.xml
+++ b/lib/cosEvent/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,7 +33,22 @@
<file>notes.xml</file>
</header>
- <section><title>cosEvent 2.2</title>
+ <section><title>cosEvent 2.2.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosEvent 2.2</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/cosEvent/doc/src/part.xml b/lib/cosEvent/doc/src/part.xml
index 43ed8e9184..5e32455ebb 100644
--- a/lib/cosEvent/doc/src/part.xml
+++ b/lib/cosEvent/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/part_notes.xml b/lib/cosEvent/doc/src/part_notes.xml
index e406f16a70..37103a5592 100644
--- a/lib/cosEvent/doc/src/part_notes.xml
+++ b/lib/cosEvent/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/doc/src/ref_man.xml b/lib/cosEvent/doc/src/ref_man.xml
index 38a52c1b61..5db5626478 100644
--- a/lib/cosEvent/doc/src/ref_man.xml
+++ b/lib/cosEvent/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl b/lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl
index 424b86e956..cb9bb4f4a4 100644
--- a/lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl
+++ b/lib/cosEvent/src/CosEventChannelAdmin_ProxyPullConsumer_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl b/lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl
index bf00399429..4c2b8629f2 100644
--- a/lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl
+++ b/lib/cosEvent/src/CosEventChannelAdmin_ProxyPushConsumer_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl b/lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl
index 52b18fc824..fb5304292b 100644
--- a/lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl
+++ b/lib/cosEvent/src/CosEventChannelAdmin_SupplierAdmin_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/src/Makefile b/lib/cosEvent/src/Makefile
index b79f0ec1e5..29d6223005 100644
--- a/lib/cosEvent/src/Makefile
+++ b/lib/cosEvent/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/src/cosEventApp.erl b/lib/cosEvent/src/cosEventApp.erl
index 065032d933..b3c38cef0e 100644
--- a/lib/cosEvent/src/cosEventApp.erl
+++ b/lib/cosEvent/src/cosEventApp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/src/cosEventApp.hrl b/lib/cosEvent/src/cosEventApp.hrl
index 6b7f23c827..d801e83530 100644
--- a/lib/cosEvent/src/cosEventApp.hrl
+++ b/lib/cosEvent/src/cosEventApp.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl b/lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl
index d1e4c9c758..728c4cc5ab 100644
--- a/lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl
+++ b/lib/cosEvent/src/oe_CosEventComm_CAdmin_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl b/lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl
index 61d96a51e0..4f53ca6164 100644
--- a/lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl
+++ b/lib/cosEvent/src/oe_CosEventComm_Channel_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl b/lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl
index e9482e77d6..ac23412000 100644
--- a/lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl
+++ b/lib/cosEvent/src/oe_CosEventComm_PusherS_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/test/Makefile b/lib/cosEvent/test/Makefile
index 2d29afd20d..878e1c8a4c 100644
--- a/lib/cosEvent/test/Makefile
+++ b/lib/cosEvent/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -96,12 +96,10 @@ TARGET_FILES = \
ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
ERL_COMPILE_FLAGS += $(ERL_IDL_FLAGS) \
- -pa $(ERL_TOP)/lib/test_server/ebin \
-pa $(ERL_TOP)/lib/cosEvent/ebin \
-pa $(ERL_TOP)/lib/cosEvent/test/idl_output \
-I$(ERL_TOP)/lib/cosEvent \
- -I$(ERL_TOP)/lib/cosEvent/test/$(IDLOUTDIR) \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/cosEvent/test/$(IDLOUTDIR)
# ----------------------------------------------------
# Targets
diff --git a/lib/cosEvent/test/event_channel_SUITE.erl b/lib/cosEvent/test/event_channel_SUITE.erl
index 0d67a94520..bbae8d782a 100644
--- a/lib/cosEvent/test/event_channel_SUITE.erl
+++ b/lib/cosEvent/test/event_channel_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-module(event_channel_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -32,7 +32,7 @@
%% Macros
%%-----------------------------------------------------------------
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes, Expr),
@@ -46,7 +46,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,12 +87,12 @@ cases() ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -131,8 +131,7 @@ app_test(_Config) ->
-event_objects_api(doc) -> ["Testing the CosEvent API to setup a complete service", ""];
-event_objects_api(suite) -> [];
+%% Testing the CosEvent API to setup a complete service
event_objects_api(_Config) ->
Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
@@ -234,8 +233,7 @@ event_objects_api(_Config) ->
ok.
-events_api(doc) -> ["Testing the CosEvent API for sending events asynchronous", ""];
-events_api(suite) -> [];
+%% Testing the CosEvent API for sending events asynchronous
events_api(_Config) ->
Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
@@ -244,8 +242,7 @@ events_api(_Config) ->
event_sender(Ch).
-events_sync_api(doc) -> ["Testing the CosEvent API for sending events synchronous", ""];
-events_sync_api(suite) -> [];
+%% Testing the CosEvent API for sending events synchronous
events_sync_api(_Config) ->
Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
diff --git a/lib/cosEvent/test/event_test_PullC_impl.erl b/lib/cosEvent/test/event_test_PullC_impl.erl
index e1824dceae..fb72d2e595 100644
--- a/lib/cosEvent/test/event_test_PullC_impl.erl
+++ b/lib/cosEvent/test/event_test_PullC_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/test/event_test_PullS_impl.erl b/lib/cosEvent/test/event_test_PullS_impl.erl
index 2bfb86d4c3..de59b251da 100644
--- a/lib/cosEvent/test/event_test_PullS_impl.erl
+++ b/lib/cosEvent/test/event_test_PullS_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/test/event_test_PushC_impl.erl b/lib/cosEvent/test/event_test_PushC_impl.erl
index e035f7cf0a..98e4d611fc 100644
--- a/lib/cosEvent/test/event_test_PushC_impl.erl
+++ b/lib/cosEvent/test/event_test_PushC_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/test/event_test_PushS_impl.erl b/lib/cosEvent/test/event_test_PushS_impl.erl
index b60c634d05..062ee8a311 100644
--- a/lib/cosEvent/test/event_test_PushS_impl.erl
+++ b/lib/cosEvent/test/event_test_PushS_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/test/event_test_server.idl b/lib/cosEvent/test/event_test_server.idl
index 74bab08444..f76ac085e1 100644
--- a/lib/cosEvent/test/event_test_server.idl
+++ b/lib/cosEvent/test/event_test_server.idl
@@ -1,7 +1,7 @@
//
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2001-2010. All Rights Reserved.
+// Copyright Ericsson AB 2001-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/cosEvent/test/generated_SUITE.erl b/lib/cosEvent/test/generated_SUITE.erl
index 40fe94386a..86794023af 100644
--- a/lib/cosEvent/test/generated_SUITE.erl
+++ b/lib/cosEvent/test/generated_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
-module(generated_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -125,12 +125,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -139,8 +139,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_AlreadyConnected'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_AlreadyConnected'(doc) -> [""];
-'CosEventChannelAdmin_AlreadyConnected'(suite) -> [];
'CosEventChannelAdmin_AlreadyConnected'(_) ->
?match(true, orber_tc:check_tc('CosEventChannelAdmin_AlreadyConnected':tc())),
?match("IDL:omg.org/CosEventChannelAdmin/AlreadyConnected:1.0",
@@ -154,8 +152,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_TypeError'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_TypeError'(doc) -> [""];
-'CosEventChannelAdmin_TypeError'(suite) -> [];
'CosEventChannelAdmin_TypeError'(_) ->
?match(true, orber_tc:check_tc('CosEventChannelAdmin_TypeError':tc())),
?match("IDL:omg.org/CosEventChannelAdmin/TypeError:1.0",
@@ -169,8 +165,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_Disconnected'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_Disconnected'(doc) -> [""];
-'CosEventComm_Disconnected'(suite) -> [];
'CosEventComm_Disconnected'(_) ->
?match(true, orber_tc:check_tc('CosEventComm_Disconnected':tc())),
?match("IDL:omg.org/CosEventComm/Disconnected:1.0",
@@ -183,8 +177,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ConsumerAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ConsumerAdmin'(doc) -> [""];
-'CosEventChannelAdmin_ConsumerAdmin'(suite) -> [];
'CosEventChannelAdmin_ConsumerAdmin'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ConsumerAdmin':oe_tc(obtain_push_supplier)),
?nomatch(undefined, 'CosEventChannelAdmin_ConsumerAdmin':oe_tc(obtain_pull_supplier)),
@@ -201,8 +193,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_EventChannel'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_EventChannel'(doc) -> [""];
-'CosEventChannelAdmin_EventChannel'(suite) -> [];
'CosEventChannelAdmin_EventChannel'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_EventChannel':oe_tc(for_consumers)),
?nomatch(undefined, 'CosEventChannelAdmin_EventChannel':oe_tc(for_suppliers)),
@@ -220,8 +210,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ProxyPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ProxyPullConsumer'(doc) -> [""];
-'CosEventChannelAdmin_ProxyPullConsumer'(suite) -> [];
'CosEventChannelAdmin_ProxyPullConsumer'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullConsumer':oe_tc(connect_pull_supplier)),
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullConsumer':oe_tc(disconnect_pull_consumer)),
@@ -239,8 +227,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ProxyPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ProxyPullSupplier'(doc) -> [""];
-'CosEventChannelAdmin_ProxyPullSupplier'(suite) -> [];
'CosEventChannelAdmin_ProxyPullSupplier'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(connect_pull_consumer)),
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(pull)),
@@ -260,8 +246,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ProxyPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ProxyPushConsumer'(doc) -> [""];
-'CosEventChannelAdmin_ProxyPushConsumer'(suite) -> [];
'CosEventChannelAdmin_ProxyPushConsumer'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushConsumer':oe_tc(connect_push_supplier)),
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushConsumer':oe_tc(push)),
@@ -280,8 +264,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ProxyPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ProxyPushSupplier'(doc) -> [""];
-'CosEventChannelAdmin_ProxyPushSupplier'(suite) -> [];
'CosEventChannelAdmin_ProxyPushSupplier'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushSupplier':oe_tc(connect_push_consumer)),
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushSupplier':oe_tc(disconnect_push_supplier)),
@@ -299,8 +281,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_SupplierAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_SupplierAdmin'(doc) -> [""];
-'CosEventChannelAdmin_SupplierAdmin'(suite) -> [];
'CosEventChannelAdmin_SupplierAdmin'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_SupplierAdmin':oe_tc(obtain_push_consumer)),
?nomatch(undefined, 'CosEventChannelAdmin_SupplierAdmin':oe_tc(obtain_pull_consumer)),
@@ -317,8 +297,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_CAdmin'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_CAdmin'(doc) -> [""];
-'oe_CosEventComm_CAdmin'(suite) -> [];
'oe_CosEventComm_CAdmin'(_) ->
?nomatch(undefined, 'oe_CosEventComm_CAdmin':oe_tc(obtain_push_supplier)),
?nomatch(undefined, 'oe_CosEventComm_CAdmin':oe_tc(obtain_pull_supplier)),
@@ -339,8 +317,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_Channel'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_Channel'(doc) -> [""];
-'oe_CosEventComm_Channel'(suite) -> [];
'oe_CosEventComm_Channel'(_) ->
?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(for_consumers)),
?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(for_suppliers)),
@@ -362,8 +338,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_Event'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_Event'(doc) -> [""];
-'oe_CosEventComm_Event'(suite) -> [];
'oe_CosEventComm_Event'(_) ->
?nomatch(undefined, 'oe_CosEventComm_Event':oe_tc(send)),
?nomatch(undefined, 'oe_CosEventComm_Event':oe_tc(send_sync)),
@@ -380,8 +354,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_PullerS'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_PullerS'(doc) -> [""];
-'oe_CosEventComm_PullerS'(suite) -> [];
'oe_CosEventComm_PullerS'(_) ->
?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(connect_pull_consumer)),
?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(pull)),
@@ -405,8 +377,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_PusherS'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_PusherS'(doc) -> [""];
-'oe_CosEventComm_PusherS'(suite) -> [];
'oe_CosEventComm_PusherS'(_) ->
?nomatch(undefined, 'oe_CosEventComm_PusherS':oe_tc(connect_push_consumer)),
?nomatch(undefined, 'oe_CosEventComm_PusherS':oe_tc(disconnect_push_supplier)),
@@ -428,8 +398,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_PullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_PullConsumer'(doc) -> [""];
-'CosEventComm_PullConsumer'(suite) -> [];
'CosEventComm_PullConsumer'(_) ->
?nomatch(undefined, 'CosEventComm_PullConsumer':oe_tc(disconnect_pull_consumer)),
?match(undefined, 'CosEventComm_PullConsumer':oe_tc(undefined)),
@@ -445,8 +413,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_PullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_PullSupplier'(doc) -> [""];
-'CosEventComm_PullSupplier'(suite) -> [];
'CosEventComm_PullSupplier'(_) ->
?nomatch(undefined, 'CosEventComm_PullSupplier':oe_tc(pull)),
?nomatch(undefined, 'CosEventComm_PullSupplier':oe_tc(try_pull)),
@@ -464,8 +430,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_PushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_PushConsumer'(doc) -> [""];
-'CosEventComm_PushConsumer'(suite) -> [];
'CosEventComm_PushConsumer'(_) ->
?nomatch(undefined, 'CosEventComm_PushConsumer':oe_tc(push)),
?nomatch(undefined, 'CosEventComm_PushConsumer':oe_tc(disconnect_push_consumer)),
@@ -482,8 +446,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_PushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_PushSupplier'(doc) -> [""];
-'CosEventComm_PushSupplier'(suite) -> [];
'CosEventComm_PushSupplier'(_) ->
?nomatch(undefined, 'CosEventComm_PushSupplier':oe_tc(disconnect_push_supplier)),
?match(undefined, 'CosEventComm_PushSupplier':oe_tc(undefined)),
diff --git a/lib/cosEvent/vsn.mk b/lib/cosEvent/vsn.mk
index 3149020d7c..c39bed9fe4 100644
--- a/lib/cosEvent/vsn.mk
+++ b/lib/cosEvent/vsn.mk
@@ -1,2 +1,2 @@
-COSEVENT_VSN = 2.2
+COSEVENT_VSN = 2.2.1
diff --git a/lib/cosEventDomain/Makefile b/lib/cosEventDomain/Makefile
index f74d77bd2e..8e8ae7e4da 100644
--- a/lib/cosEventDomain/Makefile
+++ b/lib/cosEventDomain/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosEventDomain/doc/src/CosEventDomainAdmin.xml b/lib/cosEventDomain/doc/src/CosEventDomainAdmin.xml
index ca7ec31969..6931059e67 100644
--- a/lib/cosEventDomain/doc/src/CosEventDomainAdmin.xml
+++ b/lib/cosEventDomain/doc/src/CosEventDomainAdmin.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2002</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomain.xml b/lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomain.xml
index 143d448089..e99c8d380b 100644
--- a/lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomain.xml
+++ b/lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomain.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomainFactory.xml b/lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomainFactory.xml
index b6d64299b8..602e0e5fb0 100644
--- a/lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomainFactory.xml
+++ b/lib/cosEventDomain/doc/src/CosEventDomainAdmin_EventDomainFactory.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2001</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/Makefile b/lib/cosEventDomain/doc/src/Makefile
index 8b2450e64d..0f18e43547 100644
--- a/lib/cosEventDomain/doc/src/Makefile
+++ b/lib/cosEventDomain/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosEventDomain/doc/src/book.xml b/lib/cosEventDomain/doc/src/book.xml
index 3dde504cfd..b073e5edc0 100644
--- a/lib/cosEventDomain/doc/src/book.xml
+++ b/lib/cosEventDomain/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/ch_QoS.xml b/lib/cosEventDomain/doc/src/ch_QoS.xml
index bdc9a8dcfb..c356e38752 100644
--- a/lib/cosEventDomain/doc/src/ch_QoS.xml
+++ b/lib/cosEventDomain/doc/src/ch_QoS.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/ch_contents.xml b/lib/cosEventDomain/doc/src/ch_contents.xml
index 4e98e21948..b8fefecf44 100644
--- a/lib/cosEventDomain/doc/src/ch_contents.xml
+++ b/lib/cosEventDomain/doc/src/ch_contents.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/ch_event_domain_service.xml b/lib/cosEventDomain/doc/src/ch_event_domain_service.xml
index f1d2405e9f..a0ecf20415 100644
--- a/lib/cosEventDomain/doc/src/ch_event_domain_service.xml
+++ b/lib/cosEventDomain/doc/src/ch_event_domain_service.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/ch_introduction.xml b/lib/cosEventDomain/doc/src/ch_introduction.xml
index 59034ca84a..f7a3426673 100644
--- a/lib/cosEventDomain/doc/src/ch_introduction.xml
+++ b/lib/cosEventDomain/doc/src/ch_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/cosEventDomainApp.xml b/lib/cosEventDomain/doc/src/cosEventDomainApp.xml
index 2efba82094..c75ee05512 100644
--- a/lib/cosEventDomain/doc/src/cosEventDomainApp.xml
+++ b/lib/cosEventDomain/doc/src/cosEventDomainApp.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2001</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/notes.xml b/lib/cosEventDomain/doc/src/notes.xml
index d4af1b66f0..5e5bb2c33e 100644
--- a/lib/cosEventDomain/doc/src/notes.xml
+++ b/lib/cosEventDomain/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,7 +32,22 @@
<file>notes.xml</file>
</header>
- <section><title>cosEventDomain 1.2</title>
+ <section><title>cosEventDomain 1.2.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosEventDomain 1.2</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/cosEventDomain/doc/src/part.xml b/lib/cosEventDomain/doc/src/part.xml
index 2d8512fc87..328fdfc20f 100644
--- a/lib/cosEventDomain/doc/src/part.xml
+++ b/lib/cosEventDomain/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/part_notes.xml b/lib/cosEventDomain/doc/src/part_notes.xml
index 55d4d21c3a..af6864decf 100644
--- a/lib/cosEventDomain/doc/src/part_notes.xml
+++ b/lib/cosEventDomain/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/doc/src/ref_man.xml b/lib/cosEventDomain/doc/src/ref_man.xml
index 8ad8366e5b..14b826e4f9 100644
--- a/lib/cosEventDomain/doc/src/ref_man.xml
+++ b/lib/cosEventDomain/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosEventDomain/src/CosEventDomainAdmin_EventDomainFactory_impl.erl b/lib/cosEventDomain/src/CosEventDomainAdmin_EventDomainFactory_impl.erl
index 21024913c1..75ff81196c 100644
--- a/lib/cosEventDomain/src/CosEventDomainAdmin_EventDomainFactory_impl.erl
+++ b/lib/cosEventDomain/src/CosEventDomainAdmin_EventDomainFactory_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEventDomain/src/CosEventDomainAdmin_EventDomain_impl.erl b/lib/cosEventDomain/src/CosEventDomainAdmin_EventDomain_impl.erl
index 50b076df65..a31a70acc2 100644
--- a/lib/cosEventDomain/src/CosEventDomainAdmin_EventDomain_impl.erl
+++ b/lib/cosEventDomain/src/CosEventDomainAdmin_EventDomain_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEventDomain/src/Makefile b/lib/cosEventDomain/src/Makefile
index da8dcf08b6..cdaf9e5f1f 100644
--- a/lib/cosEventDomain/src/Makefile
+++ b/lib/cosEventDomain/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosEventDomain/src/cosEventDomainApp.hrl b/lib/cosEventDomain/src/cosEventDomainApp.hrl
index ff8b004fb9..6df20692be 100644
--- a/lib/cosEventDomain/src/cosEventDomainApp.hrl
+++ b/lib/cosEventDomain/src/cosEventDomainApp.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosEventDomain/test/Makefile b/lib/cosEventDomain/test/Makefile
index 1bbd1f1693..1841676be7 100644
--- a/lib/cosEventDomain/test/Makefile
+++ b/lib/cosEventDomain/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -61,15 +61,13 @@ ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
ERL_COMPILE_FLAGS += \
$(ERL_IDL_FLAGS) \
- -pa $(ERL_TOP)/lib/test_server/ebin \
-pa $(ERL_TOP)/lib/cosEventDomain/ebin \
-pa $(ERL_TOP)/lib/cosEventDomain/include \
-pa $(ERL_TOP)/lib/cosNotification/ebin \
-pa $(ERL_TOP)/lib/cosNotification/include \
-I$(ERL_TOP)/lib/cosEventDomain/include \
-I$(ERL_TOP)/lib/cosNotification/include \
- -I$(ERL_TOP)/lib/cosNotification/ebin \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/cosNotification/ebin
# ----------------------------------------------------
# Targets
diff --git a/lib/cosEventDomain/test/event_domain_SUITE.erl b/lib/cosEventDomain/test/event_domain_SUITE.erl
index 75835b03a0..031b7726c5 100644
--- a/lib/cosEventDomain/test/event_domain_SUITE.erl
+++ b/lib/cosEventDomain/test/event_domain_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-module(event_domain_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("cosNotification/include/CosNotifyChannelAdmin.hrl").
-include_lib("cosNotification/include/CosNotification.hrl").
@@ -35,7 +35,7 @@
%% Macros
%%-----------------------------------------------------------------
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes, Expr),
@@ -49,7 +49,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -89,12 +89,12 @@ cases() ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -129,15 +129,12 @@ end_per_suite(Config) when is_list(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosEventDomain),
ok.
-event_domain_api(doc) -> ["Testing the CosEventDomain Domain API", ""];
-event_domain_api(suite) -> [];
+%% Testing the CosEventDomain Domain API
event_domain_api(_Config) ->
%% We will setup a cluster looking like:
@@ -418,8 +415,7 @@ event_domain_api(_Config) ->
ok.
-event_domain_factory_api(doc) -> ["Testing the CosEventDomain Factory API", ""];
-event_domain_factory_api(suite) -> [];
+%% Testing the CosEventDomain Factory API
event_domain_factory_api(_Config) ->
Cyclic = #'CosNotification_Property'{name=?CycleDetection,
diff --git a/lib/cosEventDomain/test/generated_SUITE.erl b/lib/cosEventDomain/test/generated_SUITE.erl
index 553516bed1..172465da2f 100644
--- a/lib/cosEventDomain/test/generated_SUITE.erl
+++ b/lib/cosEventDomain/test/generated_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
-module(generated_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -123,12 +123,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -137,8 +137,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin'(doc) -> ["CosEventDomainAdmin"];
-'CosEventDomainAdmin'(suite) -> [];
'CosEventDomainAdmin'(_) ->
?match("CycleDetection", 'CosEventDomainAdmin':'CycleDetection'()),
?match(0, 'CosEventDomainAdmin':'AuthorizeCycles'()),
@@ -152,8 +150,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_DiamondSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_DiamondSeq'(doc) -> ["CosEventDomainAdmin_DiamondSeq"];
-'CosEventDomainAdmin_DiamondSeq'(suite) -> [];
'CosEventDomainAdmin_DiamondSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_DiamondSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/DiamondSeq:1.0",
@@ -166,8 +162,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_AlreadyExists'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_AlreadyExists'(doc) -> ["CosEventDomainAdmin_AlreadyExists"];
-'CosEventDomainAdmin_AlreadyExists'(suite) -> [];
'CosEventDomainAdmin_AlreadyExists'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_AlreadyExists':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/AlreadyExists:1.0",
@@ -180,8 +174,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_DomainIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_DomainIDSeq'(doc) -> ["CosEventDomainAdmin_DomainIDSeq"];
-'CosEventDomainAdmin_DomainIDSeq'(suite) -> [];
'CosEventDomainAdmin_DomainIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_DomainIDSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/DomainIDSeq:1.0",
@@ -194,8 +186,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_Connection'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_Connection'(doc) -> ["CosEventDomainAdmin_Connection"];
-'CosEventDomainAdmin_Connection'(suite) -> [];
'CosEventDomainAdmin_Connection'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_Connection':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/Connection:1.0",
@@ -208,8 +198,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_ConnectionIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_ConnectionIDSeq'(doc) -> ["CosEventDomainAdmin_ConnectionIDSeq"];
-'CosEventDomainAdmin_ConnectionIDSeq'(suite) -> [];
'CosEventDomainAdmin_ConnectionIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_ConnectionIDSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/ConnectionIDSeq:1.0",
@@ -222,8 +210,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_ConnectionNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_ConnectionNotFound'(doc) -> ["CosEventDomainAdmin_ConnectionNotFound"];
-'CosEventDomainAdmin_ConnectionNotFound'(suite) -> [];
'CosEventDomainAdmin_ConnectionNotFound'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_ConnectionNotFound':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/ConnectionNotFound:1.0",
@@ -236,8 +222,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_CycleCreationForbidden'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_CycleCreationForbidden'(doc) -> ["CosEventDomainAdmin_CycleCreationForbidden"];
-'CosEventDomainAdmin_CycleCreationForbidden'(suite) -> [];
'CosEventDomainAdmin_CycleCreationForbidden'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_CycleCreationForbidden':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/CycleCreationForbidden:1.0",
@@ -250,8 +234,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_CycleSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_CycleSeq'(doc) -> ["CosEventDomainAdmin_CycleSeq"];
-'CosEventDomainAdmin_CycleSeq'(suite) -> [];
'CosEventDomainAdmin_CycleSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_CycleSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/CycleSeq:1.0",
@@ -264,8 +246,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_DiamondCreationForbidden'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_DiamondCreationForbidden'(doc) -> ["CosEventDomainAdmin_DiamondCreationForbidden"];
-'CosEventDomainAdmin_DiamondCreationForbidden'(suite) -> [];
'CosEventDomainAdmin_DiamondCreationForbidden'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_DiamondCreationForbidden':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/DiamondCreationForbidden:1.0",
@@ -278,8 +258,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_DomainNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_DomainNotFound'(doc) -> ["CosEventDomainAdmin_DomainNotFound"];
-'CosEventDomainAdmin_DomainNotFound'(suite) -> [];
'CosEventDomainAdmin_DomainNotFound'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_DomainNotFound':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/DomainNotFound:1.0",
@@ -292,8 +270,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_MemberIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_MemberIDSeq'(doc) -> ["CosEventDomainAdmin_MemberIDSeq"];
-'CosEventDomainAdmin_MemberIDSeq'(suite) -> [];
'CosEventDomainAdmin_MemberIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_MemberIDSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/MemberIDSeq:1.0",
@@ -306,8 +282,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_RouteSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_RouteSeq'(doc) -> ["CosEventDomainAdmin_RouteSeq"];
-'CosEventDomainAdmin_RouteSeq'(suite) -> [];
'CosEventDomainAdmin_RouteSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_RouteSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/RouteSeq:1.0",
@@ -320,8 +294,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_EventDomainFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_EventDomainFactory'(doc) -> ["CosEventDomainAdmin_EventDomainFactory"];
-'CosEventDomainAdmin_EventDomainFactory'(suite) -> [];
'CosEventDomainAdmin_EventDomainFactory'(_) ->
?nomatch(undefined, 'CosEventDomainAdmin_EventDomainFactory':oe_tc(create_event_domain)),
?nomatch(undefined, 'CosEventDomainAdmin_EventDomainFactory':oe_tc(get_all_domains)),
@@ -340,8 +312,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_EventDomain'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_EventDomain'(doc) -> ["CosEventDomainAdmin_EventDomain"];
-'CosEventDomainAdmin_EventDomain'(suite) -> [];
'CosEventDomainAdmin_EventDomain'(_) ->
?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(add_channel)),
?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_all_channels)),
diff --git a/lib/cosEventDomain/vsn.mk b/lib/cosEventDomain/vsn.mk
index bdde1f6ab2..4e10d6ac60 100644
--- a/lib/cosEventDomain/vsn.mk
+++ b/lib/cosEventDomain/vsn.mk
@@ -1,2 +1,2 @@
-COSEVENTDOMAIN_VSN = 1.2
+COSEVENTDOMAIN_VSN = 1.2.1
diff --git a/lib/cosFileTransfer/Makefile b/lib/cosFileTransfer/Makefile
index c811d7be8f..c9c07dcdad 100644
--- a/lib/cosFileTransfer/Makefile
+++ b/lib/cosFileTransfer/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/doc/src/CosFileTransfer_Directory.xml b/lib/cosFileTransfer/doc/src/CosFileTransfer_Directory.xml
index 3d5e4f024f..da5810521a 100644
--- a/lib/cosFileTransfer/doc/src/CosFileTransfer_Directory.xml
+++ b/lib/cosFileTransfer/doc/src/CosFileTransfer_Directory.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/CosFileTransfer_File.xml b/lib/cosFileTransfer/doc/src/CosFileTransfer_File.xml
index 97ea054c46..373c14d1f1 100644
--- a/lib/cosFileTransfer/doc/src/CosFileTransfer_File.xml
+++ b/lib/cosFileTransfer/doc/src/CosFileTransfer_File.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/CosFileTransfer_FileIterator.xml b/lib/cosFileTransfer/doc/src/CosFileTransfer_FileIterator.xml
index c26449a4dd..f5c219b9c1 100644
--- a/lib/cosFileTransfer/doc/src/CosFileTransfer_FileIterator.xml
+++ b/lib/cosFileTransfer/doc/src/CosFileTransfer_FileIterator.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/CosFileTransfer_FileTransferSession.xml b/lib/cosFileTransfer/doc/src/CosFileTransfer_FileTransferSession.xml
index 19caace060..312af3b8c2 100644
--- a/lib/cosFileTransfer/doc/src/CosFileTransfer_FileTransferSession.xml
+++ b/lib/cosFileTransfer/doc/src/CosFileTransfer_FileTransferSession.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/CosFileTransfer_VirtualFileSystem.xml b/lib/cosFileTransfer/doc/src/CosFileTransfer_VirtualFileSystem.xml
index 67a9fa72fd..701e56e660 100644
--- a/lib/cosFileTransfer/doc/src/CosFileTransfer_VirtualFileSystem.xml
+++ b/lib/cosFileTransfer/doc/src/CosFileTransfer_VirtualFileSystem.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/Makefile b/lib/cosFileTransfer/doc/src/Makefile
index 96cb983ff2..8d8c736f1b 100644
--- a/lib/cosFileTransfer/doc/src/Makefile
+++ b/lib/cosFileTransfer/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/doc/src/book.xml b/lib/cosFileTransfer/doc/src/book.xml
index c6b8e05b33..9a9ec3d0a2 100644
--- a/lib/cosFileTransfer/doc/src/book.xml
+++ b/lib/cosFileTransfer/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/ch_contents.xml b/lib/cosFileTransfer/doc/src/ch_contents.xml
index 79b39308ab..bd4ed5116f 100644
--- a/lib/cosFileTransfer/doc/src/ch_contents.xml
+++ b/lib/cosFileTransfer/doc/src/ch_contents.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/ch_example.xml b/lib/cosFileTransfer/doc/src/ch_example.xml
index 79e47d73f4..7e3c65eedd 100644
--- a/lib/cosFileTransfer/doc/src/ch_example.xml
+++ b/lib/cosFileTransfer/doc/src/ch_example.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/ch_install.xml b/lib/cosFileTransfer/doc/src/ch_install.xml
index 260fb14d65..9681f98b45 100644
--- a/lib/cosFileTransfer/doc/src/ch_install.xml
+++ b/lib/cosFileTransfer/doc/src/ch_install.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/ch_introduction.xml b/lib/cosFileTransfer/doc/src/ch_introduction.xml
index 24f64cfa49..67616b0a39 100644
--- a/lib/cosFileTransfer/doc/src/ch_introduction.xml
+++ b/lib/cosFileTransfer/doc/src/ch_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/ch_system.xml b/lib/cosFileTransfer/doc/src/ch_system.xml
index 18f4e84e56..377ec1fa49 100644
--- a/lib/cosFileTransfer/doc/src/ch_system.xml
+++ b/lib/cosFileTransfer/doc/src/ch_system.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/cosFileTransferApp.xml b/lib/cosFileTransfer/doc/src/cosFileTransferApp.xml
index b9c6ec8aad..ae7b4f1ec5 100644
--- a/lib/cosFileTransfer/doc/src/cosFileTransferApp.xml
+++ b/lib/cosFileTransfer/doc/src/cosFileTransferApp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/notes.xml b/lib/cosFileTransfer/doc/src/notes.xml
index 9f5b7ae6e5..58ab087014 100644
--- a/lib/cosFileTransfer/doc/src/notes.xml
+++ b/lib/cosFileTransfer/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,7 +31,22 @@
<file>notes.xml</file>
</header>
- <section><title>cosFileTransfer 1.2</title>
+ <section><title>cosFileTransfer 1.2.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosFileTransfer 1.2</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/cosFileTransfer/doc/src/part.xml b/lib/cosFileTransfer/doc/src/part.xml
index 22fa434c08..b4e6f573dd 100644
--- a/lib/cosFileTransfer/doc/src/part.xml
+++ b/lib/cosFileTransfer/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/part_notes.xml b/lib/cosFileTransfer/doc/src/part_notes.xml
index 6d383099c2..d91de39b1f 100644
--- a/lib/cosFileTransfer/doc/src/part_notes.xml
+++ b/lib/cosFileTransfer/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/doc/src/ref_man.xml b/lib/cosFileTransfer/doc/src/ref_man.xml
index 884ba809b9..ce050128e6 100644
--- a/lib/cosFileTransfer/doc/src/ref_man.xml
+++ b/lib/cosFileTransfer/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosFileTransfer/src/CosFileTransfer_Directory_impl.erl b/lib/cosFileTransfer/src/CosFileTransfer_Directory_impl.erl
index a63cad4c6d..8ce6cebf77 100644
--- a/lib/cosFileTransfer/src/CosFileTransfer_Directory_impl.erl
+++ b/lib/cosFileTransfer/src/CosFileTransfer_Directory_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/src/CosFileTransfer_FileIterator_impl.erl b/lib/cosFileTransfer/src/CosFileTransfer_FileIterator_impl.erl
index 93890629bf..d824129147 100644
--- a/lib/cosFileTransfer/src/CosFileTransfer_FileIterator_impl.erl
+++ b/lib/cosFileTransfer/src/CosFileTransfer_FileIterator_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/src/CosFileTransfer_FileTransferSession_impl.erl b/lib/cosFileTransfer/src/CosFileTransfer_FileTransferSession_impl.erl
index 01281f8056..3a8285f092 100644
--- a/lib/cosFileTransfer/src/CosFileTransfer_FileTransferSession_impl.erl
+++ b/lib/cosFileTransfer/src/CosFileTransfer_FileTransferSession_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/src/CosFileTransfer_File_impl.erl b/lib/cosFileTransfer/src/CosFileTransfer_File_impl.erl
index b87583976c..263255413e 100644
--- a/lib/cosFileTransfer/src/CosFileTransfer_File_impl.erl
+++ b/lib/cosFileTransfer/src/CosFileTransfer_File_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/src/CosFileTransfer_VirtualFileSystem_impl.erl b/lib/cosFileTransfer/src/CosFileTransfer_VirtualFileSystem_impl.erl
index 919aa3f2ad..7440498a23 100644
--- a/lib/cosFileTransfer/src/CosFileTransfer_VirtualFileSystem_impl.erl
+++ b/lib/cosFileTransfer/src/CosFileTransfer_VirtualFileSystem_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/src/Makefile b/lib/cosFileTransfer/src/Makefile
index f9107ff48f..b3967101e9 100644
--- a/lib/cosFileTransfer/src/Makefile
+++ b/lib/cosFileTransfer/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/src/cosFileTransferApp.hrl b/lib/cosFileTransfer/src/cosFileTransferApp.hrl
index 97ef8a2bde..037be7a4af 100644
--- a/lib/cosFileTransfer/src/cosFileTransferApp.hrl
+++ b/lib/cosFileTransfer/src/cosFileTransferApp.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/src/cosFileTransferNATIVE_file.erl b/lib/cosFileTransfer/src/cosFileTransferNATIVE_file.erl
index 0a374749ff..2969e61a2b 100644
--- a/lib/cosFileTransfer/src/cosFileTransferNATIVE_file.erl
+++ b/lib/cosFileTransfer/src/cosFileTransferNATIVE_file.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosFileTransfer/test/Makefile b/lib/cosFileTransfer/test/Makefile
index 39512d83bd..45c67a95dd 100644
--- a/lib/cosFileTransfer/test/Makefile
+++ b/lib/cosFileTransfer/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -85,7 +85,6 @@ ERL_COMPILE_FLAGS += \
$(ERL_IDL_FLAGS) \
-pa $(ERL_TOP)/lib/orber/include \
-pa $(ERL_TOP)/lib/cosProperty/include \
- -pa $(ERL_TOP)/internal_tools/test_server/ebin \
-pa $(ERL_TOP)/lib/cosFileTransfer/ebin \
-pa $(ERL_TOP)/lib/cosFileTransfer/include \
-pa $(ERL_TOP)/lib/cosFileTransfer/test/idl_output \
@@ -94,8 +93,7 @@ ERL_COMPILE_FLAGS += \
-I$(ERL_TOP)/lib/cosFileTransfer/src \
-I$(ERL_TOP)/lib/cosFileTransfer/include \
-I$(ERL_TOP)/lib/cosFileTransfer \
- -I$(ERL_TOP)/lib/cosFileTransfer/test/$(IDLOUTDIR) \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/cosFileTransfer/test/$(IDLOUTDIR)
# ----------------------------------------------------
# Targets
diff --git a/lib/cosFileTransfer/test/fileTransfer_SUITE.erl b/lib/cosFileTransfer/test/fileTransfer_SUITE.erl
index 3fb08dbcdd..12aef2913a 100644
--- a/lib/cosFileTransfer/test/fileTransfer_SUITE.erl
+++ b/lib/cosFileTransfer/test/fileTransfer_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,10 +29,10 @@
%%--------------- INCLUDES -----------------------------------
-include_lib("cosFileTransfer/src/cosFileTransferApp.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -122,12 +122,12 @@ cases() ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -192,7 +192,6 @@ end_per_suite(Config) ->
-define(FTP_PASS, "fileTransfer_SUITE@localhost").
-define(TEST_DIR,["/", "incoming"]).
-
-define(FTP_PORT, 21).
-define(FTP_ACC, "anonymous").
@@ -203,53 +202,48 @@ end_per_suite(Config) ->
-define(TEST_FILE_DATA, "If this file exists after a completed test an error occurred.").
-define(TEST_FILE_DATA2, "1234567890123").
-
%%-----------------------------------------------------------------
%% aoo-file test
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
- ?line ok=?t:app_test(cosFileTransfer),
+ ok=?t:app_test(cosFileTransfer),
ok.
%%-----------------------------------------------------------------
%% FileIterator API tests
%%-----------------------------------------------------------------
-fileIterator_api(doc) -> ["CosFileTransfer FileIterator API tests.", ""];
-fileIterator_api(suite) -> [];
fileIterator_api(Config) ->
case ftp_host(Config) of
{skipped, SkippedReason} ->
{skipped, SkippedReason};
Host ->
- ?line {ok, Node} = create_node("fileIterator_api", 4008, normal),
- ?line ?match(ok, remote_apply(Node, ?MODULE, install_data,
+ {ok, Node} = create_node("fileIterator_api", 4008, normal),
+ ?match(ok, remote_apply(Node, ?MODULE, install_data,
[tcp, {{'NATIVE',
'cosFileTransferNATIVE_file'}, Host,
"fileIterator_api"}])),
%% Create a Virtual File System.
-%% ?line VFS = ?match({_,_,_,_,_,_},
+%% VFS = ?match({_,_,_,_,_,_},
%% cosFileTransferApp:create_VFS({'NATIVE',
%% 'cosFileTransferNATIVE_file'},
%% [], Host, ?FTP_PORT)),
- ?line VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
+ VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
corba:string_to_object("corbaname::1.2@localhost:4008/NameService#fileIterator_api")),
%% Start two File Transfer Sessions (Source and Target).
- ?line {FS, Dir} = ?matchnopr({{_,_,_},{_,_,_}},
+ {FS, Dir} = ?matchnopr({{_,_,_},{_,_,_}},
'CosFileTransfer_VirtualFileSystem':login(VFS,
?FTP_USER,
?FTP_PASS,
?FTP_ACC)),
%% Do some basic test on one of the Directories attributes.
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(Dir)),
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(Dir)),
- ?line ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(Dir)),
- ?line ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(Dir)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(Dir)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(Dir)),
+ ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(Dir)),
+ ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(Dir)),
{ok,[],FileIter} = ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir, 0)),
%% Usually the working directory for the test is not empty so no need for
%% creating files of our own?!
@@ -259,23 +253,23 @@ fileIterator_api(Config) ->
if
Children > 5 ->
- ?line ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)),
- ?line ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter, 3)),
- ?line ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter,
+ ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)),
+ ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter, 3)),
+ ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter,
Children)),
- ?line ?matchnopr({false, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)),
- ?line ?match({false, []}, 'CosFileTransfer_FileIterator':next_n(FileIter, 1)),
+ ?matchnopr({false, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)),
+ ?match({false, []}, 'CosFileTransfer_FileIterator':next_n(FileIter, 1)),
ok;
true ->
ok
end,
- ?line ?match(ok, 'CosFileTransfer_FileIterator':destroy(FileIter)),
- ?line ?match(false, corba_object:non_existent(FS)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)),
+ ?match(ok, 'CosFileTransfer_FileIterator':destroy(FileIter)),
+ ?match(false, corba_object:non_existent(FS)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)),
%% To make sure Orber can remove it from mnesia.
timer:sleep(1000),
- ?line ?match(true, corba_object:non_existent(FS)),
- ?line ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, ["fileIterator_api"])),
+ ?match(true, corba_object:non_existent(FS)),
+ ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, ["fileIterator_api"])),
stop_orber_remote(Node, normal),
ok
end.
@@ -284,36 +278,27 @@ fileIterator_api(Config) ->
%%-----------------------------------------------------------------
%% FileTransferSession API tests
%%-----------------------------------------------------------------
-fts_ftp_file_api(doc) -> ["CosFileTransfer FTP FileTransferSession API tests.", ""];
-fts_ftp_file_api(suite) -> [];
fts_ftp_file_api(Config) ->
- ?line {ok, Node} = create_node("ftp_file_api", 4004, normal),
+ {ok, Node} = create_node("ftp_file_api", 4004, normal),
file_helper(Config, 'FTP', ?TEST_DIR, Node, 4004, "ftp_file_api", tcp).
-fts_ftp_file_ssl_api(doc) -> ["CosFileTransfer FTP FileTransferSession API tests.", ""];
-fts_ftp_file_ssl_api(suite) -> [];
fts_ftp_file_ssl_api(Config) ->
- ?line {ok, Node} = create_node("ftp_file_api_ssl", {4005, 1}, ssl),
+ {ok, Node} = create_node("ftp_file_api_ssl", {4005, 1}, ssl),
file_helper(Config, 'FTP', ?TEST_DIR, Node, 4005, "ftp_file_api_ssl", ssl).
-fts_native_file_api(doc) -> ["CosFileTransfer NATIVE FileTransferSession API tests.", ""];
-fts_native_file_api(suite) -> [];
fts_native_file_api(Config) ->
- ?line {ok, Node} = create_node("native_file_api", 4006, normal),
+ {ok, Node} = create_node("native_file_api", 4006, normal),
{ok, Pwd} = file:get_cwd(),
file_helper(Config,{'NATIVE', 'cosFileTransferNATIVE_file'},filename:split(Pwd),
Node, 4006, "native_file_api", tcp).
-fts_native_file_ssl_api(doc) -> ["CosFileTransfer NATIVE FileTransferSession API tests.", ""];
-fts_native_file_ssl_api(suite) -> [];
fts_native_file_ssl_api(Config) ->
- ?line {ok, Node} = create_node("native_file_ssl_api", {4007, 1}, ssl),
+ {ok, Node} = create_node("native_file_ssl_api", {4007, 1}, ssl),
{ok, Pwd} = file:get_cwd(),
file_helper(Config,{'NATIVE', 'cosFileTransferNATIVE_file'},filename:split(Pwd),
Node, 4007, "native_file_ssl_api", ssl).
-
file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
case ftp_host(Config) of
{skipped, SkippedReason} ->
@@ -326,47 +311,47 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
io:format("<<<<<< CosFileTransfer Testing Configuration >>>>>>~n",[]),
io:format("Source: ~p~nTarget: ~p~n", [TEST_SOURCE, TEST_TARGET]),
- ?line ?match(ok, remote_apply(Node, ?MODULE, install_data,
+ ?match(ok, remote_apply(Node, ?MODULE, install_data,
[Type, {WhichType, Host, Name}])),
- ?line VFST = ?match({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
+ VFST = ?match({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
corba:string_to_object("corbaname::1.2@localhost:"++integer_to_list(Port)++"/NameService#"++Name)),
%% Create a Virtual File System.
- ?line VFS = ?match({_,_,_,_,_,_},
+ VFS = ?match({_,_,_,_,_,_},
cosFileTransferApp:create_VFS(WhichType, [], Host, ?FTP_PORT,
[{protocol, Type}])),
%% Start two File Transfer Sessions (Source and Target).
- ?line {FST, _DirT} = ?match({{_,_,_},{_,_,_}},
+ {FST, _DirT} = ?match({{_,_,_},{_,_,_}},
'CosFileTransfer_VirtualFileSystem':login(VFST,
?FTP_USER,
?FTP_PASS,
?FTP_ACC)),
- ?line {FSS, DirS} = ?match({{_,_,_,_,_,_},{_,_,_,_,_,_}},
+ {FSS, DirS} = ?match({{_,_,_,_,_,_},{_,_,_,_,_,_}},
'CosFileTransfer_VirtualFileSystem':login(VFS,
?FTP_USER,
?FTP_PASS,
?FTP_ACC)),
%% Do some basic test on one of the Directories attributes.
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)),
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)),
- ?line ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)),
- ?line ?match(FSS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)),
+ ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)),
+ ?match(FSS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)),
%% Get a FileList before we create any new Files
- ?line #'CosFileTransfer_FileWrapper'{the_file = Dir} =
+ #'CosFileTransfer_FileWrapper'{the_file = Dir} =
?match({'CosFileTransfer_FileWrapper', _, ndirectory},
'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_DIR)),
- ?line {ok,FileList, Iter1} = ?match({ok,_,_}, 'CosFileTransfer_Directory':list(Dir, 10)),
- ?line loop_files(FileList),
+ {ok,FileList, Iter1} = ?match({ok,_,_}, 'CosFileTransfer_Directory':list(Dir, 10)),
+ loop_files(FileList),
case Iter1 of
{'IOP_IOR',[],[]} ->
ok;
_->
- ?line ?match(ok, 'CosFileTransfer_FileIterator':destroy(Iter1))
+ ?match(ok, 'CosFileTransfer_FileIterator':destroy(Iter1))
end,
#any{value=Count1} = ?match({any, _, _}, 'CosPropertyService_PropertySet':
@@ -374,17 +359,17 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
%% Now we want to transfer a file from source to target. First, we'll create
%% a a file to work with.
- ?line create_file_on_source_node(WhichType, Config, Host,
+ create_file_on_source_node(WhichType, Config, Host,
filename:join(TEST_SOURCE), TEST_DIR,
?TEST_FILE_DATA),
- ?line create_file_on_source_node(WhichType, Config, Host,
+ create_file_on_source_node(WhichType, Config, Host,
filename:join(TEST_SOURCE2), TEST_DIR,
?TEST_FILE_DATA2),
- ?line #'CosFileTransfer_FileWrapper'{the_file = FileS} =
+ #'CosFileTransfer_FileWrapper'{the_file = FileS} =
?matchnopr({'CosFileTransfer_FileWrapper', _, nfile},
'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_SOURCE)),
- ?line #'CosFileTransfer_FileWrapper'{the_file = FileS2} =
+ #'CosFileTransfer_FileWrapper'{the_file = FileS2} =
?matchnopr({'CosFileTransfer_FileWrapper', _, nfile},
'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_SOURCE2)),
@@ -394,27 +379,27 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
?match(true, (Count1+2 == Count2)),
%% Create a target File
- ?line FileT = ?matchnopr({_,_,_},
+ FileT = ?matchnopr({_,_,_},
'CosFileTransfer_FileTransferSession':create_file(FST, TEST_TARGET)),
%% Try to delete the non-existing file.
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_FileTransferSession':delete(FST, FileT)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':transfer(FSS, FileS, FileT)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':transfer(FSS, FileS, FileT)),
%% Remove this test when ftp supports append.
case WhichType of
{'NATIVE', 'cosFileTransferNATIVE_file'} ->
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':append(FSS, FileS, FileT)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':insert(FSS, FileS2, FileT, 7));
+ ?match(ok, 'CosFileTransfer_FileTransferSession':append(FSS, FileS, FileT)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':insert(FSS, FileS2, FileT, 7));
_->
ok
end,
%% Delete source and target files
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS2)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FST, FileT)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS2)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FST, FileT)),
%% Should be back where we started.
timer:sleep(2000),
@@ -423,15 +408,15 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
?match(true, (Count1 == Count3)),
- ?line ?match(false, corba_object:non_existent(FSS)),
- ?line ?match(false, corba_object:non_existent(FST)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FSS)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FST)),
+ ?match(false, corba_object:non_existent(FSS)),
+ ?match(false, corba_object:non_existent(FST)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FSS)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FST)),
%% To make sure Orber can remove it from mnesia.
timer:sleep(2000),
- ?line ?match(true, corba_object:non_existent(FSS)),
- ?line ?match(true, corba_object:non_existent(FST)),
- ?line ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])),
+ ?match(true, corba_object:non_existent(FSS)),
+ ?match(true, corba_object:non_existent(FST)),
+ ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])),
stop_orber_remote(Node, normal),
ok
end.
@@ -439,17 +424,12 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
%%-----------------------------------------------------------------
%% FileTransferSession API tests
%%-----------------------------------------------------------------
-fts_ftp_dir_api(doc) -> ["CosFileTransfer FTP FileTransferSession API tests.", ""];
-fts_ftp_dir_api(suite) -> [];
fts_ftp_dir_api(Config) ->
- ?line {ok, Node} = create_node("ftp_dir_api", 4009, normal),
+ {ok, Node} = create_node("ftp_dir_api", 4009, normal),
dir_helper(Config, 'FTP', ?TEST_DIR, Node, 4009, "ftp_dir_api").
-
-fts_native_dir_api(doc) -> ["CosFileTransfer NATIVE FileTransferSession API tests.", ""];
-fts_native_dir_api(suite) -> [];
fts_native_dir_api(Config) ->
- ?line {ok, Node} = create_node("native_dir_api", 4010, normal),
+ {ok, Node} = create_node("native_dir_api", 4010, normal),
{ok, Pwd} = file:get_cwd(),
dir_helper(Config, {'NATIVE', 'cosFileTransferNATIVE_file'},
filename:split(Pwd), Node, 4010, "native_dir_api").
@@ -465,235 +445,235 @@ dir_helper(Config, WhichType, TEST_DIR, Node, Port, Name) ->
io:format("<<<<<< CosFileTransfer Testing Configuration >>>>>>~n",[]),
io:format("Top Dir: ~p~nLevel2 Dir: ~p~n", [TEST_DIR_LEVEL1, TEST_DIR_LEVEL2]),
- ?line ?match(ok, remote_apply(Node, ?MODULE, install_data,
+ ?match(ok, remote_apply(Node, ?MODULE, install_data,
[tcp, {WhichType, Host, Name}])),
- ?line VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
+ VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
corba:string_to_object("corbaname::1.2@localhost:"++integer_to_list(Port)++"/NameService#"++Name)),
%% Start two File Transfer Sessions (Source and Target).
- ?line {FS, DirS} = ?matchnopr({{'IOP_IOR',_,_}, _},
+ {FS, DirS} = ?matchnopr({{'IOP_IOR',_,_}, _},
'CosFileTransfer_VirtualFileSystem':login(VFS,
?FTP_USER,
?FTP_PASS,
?FTP_ACC)),
%% Do some basic test on one of the Directories attributes.
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)),
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)),
- ?line ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)),
- ?line ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)),
+ ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)),
+ ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)),
%% Create a Root Directory. Currently we only need to create one but
%% later on, when supporting other protocols than FTP it's not enough.
- ?line Dir1 = 'CosFileTransfer_FileTransferSession':create_directory(FS,
+ Dir1 = 'CosFileTransfer_FileTransferSession':create_directory(FS,
TEST_DIR_LEVEL1),
io:format("<<<<<< CosFileTransfer Testing Properties >>>>>>~n",[]),
- ?line ?match({ok, [tk_long, tk_boolean]},
+ ?match({ok, [tk_long, tk_boolean]},
'CosFileTransfer_Directory':get_allowed_property_types(Dir1)),
- ?line ?match({ok, [_,_]},
+ ?match({ok, [_,_]},
'CosFileTransfer_Directory':get_allowed_properties(Dir1)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property_with_mode(Dir1,
"num_children",
#any{typecode=tk_long, value=0},
fixed_readonly)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property_with_mode(Dir1,
"wrong",
#any{typecode=tk_long, value=0},
fixed_readonly)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property_with_mode(Dir1,
"num_children",
#any{typecode=tk_short, value=0},
fixed_readonly)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property_with_mode(Dir1,
"num_children",
#any{typecode=tk_long, value=0},
fixed_normal)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_properties_with_modes(Dir1,
[#'CosPropertyService_PropertyDef'
{property_name = "num_children",
property_value = #any{typecode=tk_long, value=0},
property_mode = fixed_readonly}])),
- ?line ?match(fixed_readonly,
+ ?match(fixed_readonly,
'CosFileTransfer_Directory':get_property_mode(Dir1, "num_children")),
- ?line ?match({true,
+ ?match({true,
[#'CosPropertyService_PropertyMode'{property_name = "num_children",
property_mode = fixed_readonly}]},
'CosFileTransfer_Directory':get_property_modes(Dir1, ["num_children"])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':set_property_mode(Dir1, "num_children", fixed_readonly)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
set_property_modes(Dir1,
[#'CosPropertyService_PropertyMode'
{property_name = "num_children",
property_mode = fixed_readonly}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
set_property_modes(Dir1,
[#'CosPropertyService_PropertyMode'
{property_name = "wrong",
property_mode = fixed_readonly}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
set_property_modes(Dir1,
[#'CosPropertyService_PropertyMode'
{property_name = "num_children",
property_mode = fixed_normal}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property(Dir1,
"num_children",
#any{typecode=tk_long, value=0})),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property(Dir1,
"wrong",
#any{typecode=tk_long, value=0})),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property(Dir1,
"num_children",
#any{typecode=tk_short, value=0})),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property(Dir1,
"num_children",
#any{typecode=tk_long, value=0})),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
define_properties(Dir1,
[#'CosPropertyService_Property'
{property_name = "num_children",
property_value = #any{typecode=tk_long,
value=0}}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
define_properties(Dir1,
[#'CosPropertyService_Property'
{property_name = "wrong",
property_value = #any{typecode=tk_long,
value=0}}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
define_properties(Dir1,
[#'CosPropertyService_Property'
{property_name = "num_children",
property_value = #any{typecode=tk_short,
value=0}}])),
- ?line ?match(2, 'CosFileTransfer_Directory':get_number_of_properties(Dir1)),
+ ?match(2, 'CosFileTransfer_Directory':get_number_of_properties(Dir1)),
- ?line ?match({ok, ["num_children", "is_directory"], {'IOP_IOR',[],[]}},
+ ?match({ok, ["num_children", "is_directory"], {'IOP_IOR',[],[]}},
'CosFileTransfer_Directory':get_all_property_names(Dir1, 2)),
- ?line ?match({ok, ["is_directory"], _},
+ ?match({ok, ["is_directory"], _},
'CosFileTransfer_Directory':get_all_property_names(Dir1, 1)),
- ?line ?match(#any{},
+ ?match(#any{},
'CosFileTransfer_Directory':get_property_value(Dir1, "num_children")),
- ?line ?match(#any{},
+ ?match(#any{},
'CosFileTransfer_Directory':get_property_value(Dir1, "is_directory")),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':get_property_value(Dir1, "wrong")),
- ?line ?match({true,
+ ?match({true,
[#'CosPropertyService_Property'{property_name = "num_children"}]},
'CosFileTransfer_Directory':get_properties(Dir1, ["num_children"])),
- ?line ?match({false,
+ ?match({false,
[#'CosPropertyService_Property'{property_name = "wrong"}]},
'CosFileTransfer_Directory':get_properties(Dir1, ["wrong"])),
- ?line ?match({ok, [_],_},
+ ?match({ok, [_],_},
'CosFileTransfer_Directory':get_all_properties(Dir1, 1)),
- ?line ?match({ok, [_,_], {'IOP_IOR',[],[]}},
+ ?match({ok, [_,_], {'IOP_IOR',[],[]}},
'CosFileTransfer_Directory':get_all_properties(Dir1, 2)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':delete_property(Dir1, "num_children")),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':delete_property(Dir1, "wrong")),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':delete_properties(Dir1, ["num_children"])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':delete_properties(Dir1, ["wrong"])),
- ?line ?match(false, 'CosFileTransfer_Directory':delete_all_properties(Dir1)),
- ?line ?match(true,
+ ?match(false, 'CosFileTransfer_Directory':delete_all_properties(Dir1)),
+ ?match(true,
'CosFileTransfer_Directory':is_property_defined(Dir1, "num_children")),
- ?line ?match(false,
+ ?match(false,
'CosFileTransfer_Directory':is_property_defined(Dir1, "wrong")),
%% The Top Dir should be empty and ...
- ?line ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)),
- ?line ?match( #any{value=0},
+ ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)),
+ ?match( #any{value=0},
'CosPropertyService_PropertySet':get_property_value(Dir1, "num_children")),
%% Create a sub-directory.
- ?line Dir2 = 'CosFileTransfer_FileTransferSession':create_directory(FS,
+ Dir2 = 'CosFileTransfer_FileTransferSession':create_directory(FS,
TEST_DIR_LEVEL2),
- ?line ?match( #any{value=1},
+ ?match( #any{value=1},
'CosPropertyService_PropertySet':get_property_value(Dir1, "num_children")),
- ?line ?match({ok, [_,_], {'IOP_IOR',[],[]}},
+ ?match({ok, [_,_], {'IOP_IOR',[],[]}},
'CosFileTransfer_Directory':get_all_properties(Dir1, 2)),
- ?line {_,_,Iterator1} = ?match({ok, [_], _},
+ {_,_,Iterator1} = ?match({ok, [_], _},
'CosFileTransfer_Directory':get_all_properties(Dir1, 1)),
- ?line ?match({false, [_]},
+ ?match({false, [_]},
'CosPropertyService_PropertiesIterator':next_n(Iterator1,4)),
- ?line {_,_,Iterator0} = ?match({ok, [], _},
+ {_,_,Iterator0} = ?match({ok, [], _},
'CosFileTransfer_Directory':get_all_properties(Dir1, 0)),
- ?line ?match({false, [_, {'CosPropertyService_Property',
+ ?match({false, [_, {'CosPropertyService_Property',
"num_children",{any,tk_long,1}}]},
'CosPropertyService_PropertiesIterator':next_n(Iterator0,4)),
- ?line ?match({true,
+ ?match({true,
[#'CosPropertyService_Property'{property_name = "num_children"}]},
'CosFileTransfer_Directory':get_properties(Dir1, ["num_children"])),
%% The Top Directory is not emtpy any more and ...
- ?line {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef}],_} =
+ {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef}],_} =
?matchnopr({ok,[{'CosFileTransfer_FileWrapper', _, ndirectory}],_},
'CosFileTransfer_Directory':list(Dir1, 1000)),
%% ... its name eq. to 'TEST_DIR_LEVEL2'
- ?line ?match(TEST_DIR_LEVEL2,
+ ?match(TEST_DIR_LEVEL2,
'CosFileTransfer_Directory':'_get_complete_file_name'(DirRef)),
- ?line #'CosFileTransfer_FileWrapper'{the_file = Dir3} =
+ #'CosFileTransfer_FileWrapper'{the_file = Dir3} =
?matchnopr({'CosFileTransfer_FileWrapper', _, ndirectory},
'CosFileTransfer_FileTransferSession':get_file(FS, TEST_DIR_LEVEL1)),
%% Must get the same result for the 'get_file' operation.
- ?line {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef2}],_} =
+ {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef2}],_} =
?matchnopr({ok,[{'CosFileTransfer_FileWrapper', _, ndirectory}],_},
'CosFileTransfer_Directory':list(Dir3,1000)),
- ?line ?match(TEST_DIR_LEVEL2,
+ ?match(TEST_DIR_LEVEL2,
'CosFileTransfer_Directory':'_get_complete_file_name'(DirRef2)),
%% Since the top directory isn't empty deleting it must fail.
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_FileTransferSession':delete(FS, Dir1)),
%% Delete the sub-directory and ...
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir2)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir2)),
%% ... see if the top directory realyy is empty.
- ?line ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)),
+ ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir1)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir1)),
%% Test if the top directory been removed as intended.
- ?line ?match({'EXCEPTION', {'CosFileTransfer_FileNotFoundException', _, _}},
+ ?match({'EXCEPTION', {'CosFileTransfer_FileNotFoundException', _, _}},
'CosFileTransfer_FileTransferSession':get_file(FS, TEST_DIR_LEVEL1)),
- ?line ?match(false, corba_object:non_existent(FS)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)),
+ ?match(false, corba_object:non_existent(FS)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)),
%% To make sure Orber can remove it from mnesia.
timer:sleep(1000),
- ?line ?match(true, corba_object:non_existent(FS)),
- ?line ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])),
+ ?match(true, corba_object:non_existent(FS)),
+ ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])),
stop_orber_remote(Node, normal),
ok
end.
@@ -790,10 +770,10 @@ create_node(Name, Port, Retries, Type, Args, Options) ->
[_, Host] = ?match([_,_],string:tokens(atom_to_list(node()), [$@])),
case starter(Host, Name, Args) of
{ok, NewNode} ->
- ?line ?match(pong, net_adm:ping(NewNode)),
+ ?match(pong, net_adm:ping(NewNode)),
{ok, Cwd} = file:get_cwd(),
Path = code:get_path(),
- ?line ?match(ok, rpc:call(NewNode, file, set_cwd, [Cwd])),
+ ?match(ok, rpc:call(NewNode, file, set_cwd, [Cwd])),
true = rpc:call(NewNode, code, set_path, [Path]),
?match(ok, start_orber_remote(NewNode, Type, Options, Port)),
spawn_link(NewNode, ?MODULE, slave_sup, []),
@@ -939,7 +919,7 @@ install_data(Protocol, {WhichType, Host, Name}) ->
io:format("<<<<<< Starting ~p/~p VFS at ~p/~p>>>>>>~n",
[Protocol, WhichType, Host, Name]),
%% Create a Virtual File System.
- ?line VFS = ?match({_,_,_,_,_,_},
+ VFS = ?match({_,_,_,_,_,_},
cosFileTransferApp:create_VFS(WhichType, [], Host, ?FTP_PORT,
[{protocol, Protocol}])),
NS = corba:resolve_initial_references("NameService"),
@@ -948,9 +928,9 @@ install_data(Protocol, {WhichType, Host, Name}) ->
'CosNaming_NamingContext':rebind(NS, N, VFS).
uninstall_data(Name) ->
- ?line VFS = ?match({_,_,_,_,_,_},
+ VFS = ?match({_,_,_,_,_,_},
corba:string_to_object("corbaname:rir:/NameService#"++Name)),
- ?line ?match(ok, corba:dispose(VFS)),
+ ?match(ok, corba:dispose(VFS)),
ok.
diff --git a/lib/cosFileTransfer/vsn.mk b/lib/cosFileTransfer/vsn.mk
index 00bfdb3087..e271c05242 100644
--- a/lib/cosFileTransfer/vsn.mk
+++ b/lib/cosFileTransfer/vsn.mk
@@ -1 +1 @@
-COSFILETRANSFER_VSN = 1.2
+COSFILETRANSFER_VSN = 1.2.1
diff --git a/lib/cosNotification/Makefile b/lib/cosNotification/Makefile
index e04a837483..0408417a3b 100644
--- a/lib/cosNotification/Makefile
+++ b/lib/cosNotification/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/doc/src/CosNotification.xml b/lib/cosNotification/doc/src/CosNotification.xml
index 8c89b8830f..6aac312d5e 100644
--- a/lib/cosNotification/doc/src/CosNotification.xml
+++ b/lib/cosNotification/doc/src/CosNotification.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2002</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotification_AdminPropertiesAdmin.xml b/lib/cosNotification/doc/src/CosNotification_AdminPropertiesAdmin.xml
index f5ffd4cdf1..6086402f1a 100644
--- a/lib/cosNotification/doc/src/CosNotification_AdminPropertiesAdmin.xml
+++ b/lib/cosNotification/doc/src/CosNotification_AdminPropertiesAdmin.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotification_QoSAdmin.xml b/lib/cosNotification/doc/src/CosNotification_QoSAdmin.xml
index 034c86fb9f..7774652e60 100644
--- a/lib/cosNotification/doc/src/CosNotification_QoSAdmin.xml
+++ b/lib/cosNotification/doc/src/CosNotification_QoSAdmin.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ConsumerAdmin.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ConsumerAdmin.xml
index b06ddcc61e..cbe22ce7cd 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ConsumerAdmin.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ConsumerAdmin.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannel.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannel.xml
index 4bd3e7bd30..7696e6a26c 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannel.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannel.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannelFactory.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannelFactory.xml
index 7f9e980433..552ea182c0 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannelFactory.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_EventChannelFactory.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyConsumer.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyConsumer.xml
index f0367c2d10..3d61893162 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyConsumer.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyConsumer.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullConsumer.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullConsumer.xml
index df93aade22..caf572dee8 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullConsumer.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullConsumer.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullSupplier.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullSupplier.xml
index 9305b4aed1..42aaaec319 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullSupplier.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPullSupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushConsumer.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushConsumer.xml
index e9dea15bcc..9808b460c7 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushConsumer.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushConsumer.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushSupplier.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushSupplier.xml
index 9333c89cd0..6f85de114a 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushSupplier.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxyPushSupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxySupplier.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxySupplier.xml
index 1638d1192e..69013fdb1e 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxySupplier.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_ProxySupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullConsumer.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullConsumer.xml
index 1cbb5ec491..043472df55 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullConsumer.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullConsumer.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullSupplier.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullSupplier.xml
index d367736a62..a0040a50d7 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullSupplier.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPullSupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushConsumer.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushConsumer.xml
index db6d273dd1..efec1f99cc 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushConsumer.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushConsumer.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushSupplier.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushSupplier.xml
index 9d0f1ee3fa..229d3667c5 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushSupplier.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SequenceProxyPushSupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullConsumer.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullConsumer.xml
index cf9d97e2d0..5a86cb84da 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullConsumer.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullConsumer.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullSupplier.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullSupplier.xml
index 0b56d1b7af..1ca7c2d7df 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullSupplier.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPullSupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushConsumer.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushConsumer.xml
index ecbcc08e63..63bcdf120c 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushConsumer.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushConsumer.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushSupplier.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushSupplier.xml
index 2e9d925d0d..9ba5497fd8 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushSupplier.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_StructuredProxyPushSupplier.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SupplierAdmin.xml b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SupplierAdmin.xml
index 4b6bc29aba..540edaff3f 100644
--- a/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SupplierAdmin.xml
+++ b/lib/cosNotification/doc/src/CosNotifyChannelAdmin_SupplierAdmin.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyComm_NotifyPublish.xml b/lib/cosNotification/doc/src/CosNotifyComm_NotifyPublish.xml
index 7c128cf102..a41319cb5c 100644
--- a/lib/cosNotification/doc/src/CosNotifyComm_NotifyPublish.xml
+++ b/lib/cosNotification/doc/src/CosNotifyComm_NotifyPublish.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyComm_NotifySubscribe.xml b/lib/cosNotification/doc/src/CosNotifyComm_NotifySubscribe.xml
index fd8cba1f2d..277c666459 100644
--- a/lib/cosNotification/doc/src/CosNotifyComm_NotifySubscribe.xml
+++ b/lib/cosNotification/doc/src/CosNotifyComm_NotifySubscribe.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyFilter_Filter.xml b/lib/cosNotification/doc/src/CosNotifyFilter_Filter.xml
index 7dc522d4a5..a953540849 100644
--- a/lib/cosNotification/doc/src/CosNotifyFilter_Filter.xml
+++ b/lib/cosNotification/doc/src/CosNotifyFilter_Filter.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyFilter_FilterAdmin.xml b/lib/cosNotification/doc/src/CosNotifyFilter_FilterAdmin.xml
index 32467ed07e..5cb56963f1 100644
--- a/lib/cosNotification/doc/src/CosNotifyFilter_FilterAdmin.xml
+++ b/lib/cosNotification/doc/src/CosNotifyFilter_FilterAdmin.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyFilter_FilterFactory.xml b/lib/cosNotification/doc/src/CosNotifyFilter_FilterFactory.xml
index c4294572df..adacbc3281 100644
--- a/lib/cosNotification/doc/src/CosNotifyFilter_FilterFactory.xml
+++ b/lib/cosNotification/doc/src/CosNotifyFilter_FilterFactory.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/CosNotifyFilter_MappingFilter.xml b/lib/cosNotification/doc/src/CosNotifyFilter_MappingFilter.xml
index 6fa16dc363..c0db8c1ae0 100644
--- a/lib/cosNotification/doc/src/CosNotifyFilter_MappingFilter.xml
+++ b/lib/cosNotification/doc/src/CosNotifyFilter_MappingFilter.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/Makefile b/lib/cosNotification/doc/src/Makefile
index d0d3ec6bdf..6207290101 100644
--- a/lib/cosNotification/doc/src/Makefile
+++ b/lib/cosNotification/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/doc/src/book.xml b/lib/cosNotification/doc/src/book.xml
index 80515f9654..3151abceaa 100644
--- a/lib/cosNotification/doc/src/book.xml
+++ b/lib/cosNotification/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/ch_BNF.xml b/lib/cosNotification/doc/src/ch_BNF.xml
index b9f411d34f..9763c0c4ca 100644
--- a/lib/cosNotification/doc/src/ch_BNF.xml
+++ b/lib/cosNotification/doc/src/ch_BNF.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/ch_QoS.xml b/lib/cosNotification/doc/src/ch_QoS.xml
index 147761d37a..7f7a26f69a 100644
--- a/lib/cosNotification/doc/src/ch_QoS.xml
+++ b/lib/cosNotification/doc/src/ch_QoS.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/ch_contents.xml b/lib/cosNotification/doc/src/ch_contents.xml
index bfa2cebb07..11014f693b 100644
--- a/lib/cosNotification/doc/src/ch_contents.xml
+++ b/lib/cosNotification/doc/src/ch_contents.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/ch_example.xml b/lib/cosNotification/doc/src/ch_example.xml
index 2d368730d3..a86aaccc82 100644
--- a/lib/cosNotification/doc/src/ch_example.xml
+++ b/lib/cosNotification/doc/src/ch_example.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/ch_install.xml b/lib/cosNotification/doc/src/ch_install.xml
index 41e9461d20..c76c68cb42 100644
--- a/lib/cosNotification/doc/src/ch_install.xml
+++ b/lib/cosNotification/doc/src/ch_install.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/ch_introduction.xml b/lib/cosNotification/doc/src/ch_introduction.xml
index fcd15fd2bc..39cd12f1e6 100644
--- a/lib/cosNotification/doc/src/ch_introduction.xml
+++ b/lib/cosNotification/doc/src/ch_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/ch_system.xml b/lib/cosNotification/doc/src/ch_system.xml
index a9a444afdc..91375088a0 100644
--- a/lib/cosNotification/doc/src/ch_system.xml
+++ b/lib/cosNotification/doc/src/ch_system.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/cosNotificationApp.xml b/lib/cosNotification/doc/src/cosNotificationApp.xml
index e2f7f2f2f2..4f662a5dc4 100644
--- a/lib/cosNotification/doc/src/cosNotificationApp.xml
+++ b/lib/cosNotification/doc/src/cosNotificationApp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/notes.xml b/lib/cosNotification/doc/src/notes.xml
index f896d219b5..1237000153 100644
--- a/lib/cosNotification/doc/src/notes.xml
+++ b/lib/cosNotification/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,7 +32,22 @@
<file>notes.xml</file>
</header>
- <section><title>cosNotification 1.2.1</title>
+ <section><title>cosNotification 1.2.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosNotification 1.2.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/cosNotification/doc/src/part.xml b/lib/cosNotification/doc/src/part.xml
index 2f3d45e63d..9cc5a8a95a 100644
--- a/lib/cosNotification/doc/src/part.xml
+++ b/lib/cosNotification/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/part_notes.xml b/lib/cosNotification/doc/src/part_notes.xml
index 22ede75ca1..c999d885c1 100644
--- a/lib/cosNotification/doc/src/part_notes.xml
+++ b/lib/cosNotification/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/doc/src/ref_man.xml b/lib/cosNotification/doc/src/ref_man.xml
index 65197fac37..58fb4febd2 100644
--- a/lib/cosNotification/doc/src/ref_man.xml
+++ b/lib/cosNotification/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosNotification/src/CosNotifyChannelAdmin_ConsumerAdmin_impl.erl b/lib/cosNotification/src/CosNotifyChannelAdmin_ConsumerAdmin_impl.erl
index c7cecd87d4..e7a6a35ea7 100644
--- a/lib/cosNotification/src/CosNotifyChannelAdmin_ConsumerAdmin_impl.erl
+++ b/lib/cosNotification/src/CosNotifyChannelAdmin_ConsumerAdmin_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/CosNotifyChannelAdmin_EventChannelFactory_impl.erl b/lib/cosNotification/src/CosNotifyChannelAdmin_EventChannelFactory_impl.erl
index ea09e7ff82..eb3fb4a6a3 100644
--- a/lib/cosNotification/src/CosNotifyChannelAdmin_EventChannelFactory_impl.erl
+++ b/lib/cosNotification/src/CosNotifyChannelAdmin_EventChannelFactory_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/CosNotifyChannelAdmin_EventChannel_impl.erl b/lib/cosNotification/src/CosNotifyChannelAdmin_EventChannel_impl.erl
index 064c356171..485c9aeef4 100644
--- a/lib/cosNotification/src/CosNotifyChannelAdmin_EventChannel_impl.erl
+++ b/lib/cosNotification/src/CosNotifyChannelAdmin_EventChannel_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/CosNotifyChannelAdmin_SupplierAdmin_impl.erl b/lib/cosNotification/src/CosNotifyChannelAdmin_SupplierAdmin_impl.erl
index f85f52e9df..2810bef93d 100644
--- a/lib/cosNotification/src/CosNotifyChannelAdmin_SupplierAdmin_impl.erl
+++ b/lib/cosNotification/src/CosNotifyChannelAdmin_SupplierAdmin_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/CosNotifyFilter_FilterFactory_impl.erl b/lib/cosNotification/src/CosNotifyFilter_FilterFactory_impl.erl
index bb82eee525..760dcf40b8 100644
--- a/lib/cosNotification/src/CosNotifyFilter_FilterFactory_impl.erl
+++ b/lib/cosNotification/src/CosNotifyFilter_FilterFactory_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/Makefile b/lib/cosNotification/src/Makefile
index 72b063fd1c..009c6be4a5 100644
--- a/lib/cosNotification/src/Makefile
+++ b/lib/cosNotification/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/PullerConsumer_impl.erl b/lib/cosNotification/src/PullerConsumer_impl.erl
index 3f8ec5c7c5..52bd13918f 100644
--- a/lib/cosNotification/src/PullerConsumer_impl.erl
+++ b/lib/cosNotification/src/PullerConsumer_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/PusherConsumer_impl.erl b/lib/cosNotification/src/PusherConsumer_impl.erl
index c99c7ea434..f82f9d8bbd 100644
--- a/lib/cosNotification/src/PusherConsumer_impl.erl
+++ b/lib/cosNotification/src/PusherConsumer_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/PusherSupplier_impl.erl b/lib/cosNotification/src/PusherSupplier_impl.erl
index df0b5b77b3..d3e44f3ef9 100644
--- a/lib/cosNotification/src/PusherSupplier_impl.erl
+++ b/lib/cosNotification/src/PusherSupplier_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/cosNotification_Filter.erl b/lib/cosNotification/src/cosNotification_Filter.erl
index 40e7cf02ae..a92c9b8d41 100644
--- a/lib/cosNotification/src/cosNotification_Filter.erl
+++ b/lib/cosNotification/src/cosNotification_Filter.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/cosNotification_Grammar.yrl b/lib/cosNotification/src/cosNotification_Grammar.yrl
index 2650efcdfe..f4a42d022e 100644
--- a/lib/cosNotification/src/cosNotification_Grammar.yrl
+++ b/lib/cosNotification/src/cosNotification_Grammar.yrl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/src/cosNotification_Scanner.erl b/lib/cosNotification/src/cosNotification_Scanner.erl
index e79f0380b0..31f27a8d78 100644
--- a/lib/cosNotification/src/cosNotification_Scanner.erl
+++ b/lib/cosNotification/src/cosNotification_Scanner.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/test/Makefile b/lib/cosNotification/test/Makefile
index 1db6d2bc14..583cca1f42 100644
--- a/lib/cosNotification/test/Makefile
+++ b/lib/cosNotification/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -128,7 +128,6 @@ ERL_IDL_FLAGS += \
ERL_COMPILE_FLAGS += \
$(ERL_IDL_FLAGS) \
-pa $(ERL_TOP)/lib/orber/include \
- -pa $(ERL_TOP)/internal_tools/test_server/ebin \
-pa $(ERL_TOP)/lib/cosEvent/ebin \
-pa $(ERL_TOP)/lib/cosNotification/ebin \
-pa $(ERL_TOP)/lib/cosNotification/test/idl_output \
@@ -142,8 +141,7 @@ ERL_COMPILE_FLAGS += \
-I$(ERL_TOP)/lib/cosNotification/src \
-I$(ERL_TOP)/lib/cosNotification/include \
-I$(ERL_TOP)/lib/cosNotification \
- -I$(ERL_TOP)/lib/cosNotification/test/$(IDLOUTDIR) \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/cosNotification/test/$(IDLOUTDIR)
# ----------------------------------------------------
# Targets
diff --git a/lib/cosNotification/test/eventDB_SUITE.erl b/lib/cosNotification/test/eventDB_SUITE.erl
index 0f0faed065..a0c47ad4c7 100644
--- a/lib/cosNotification/test/eventDB_SUITE.erl
+++ b/lib/cosNotification/test/eventDB_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,10 +42,10 @@
-include("idl_output/notify_test.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -57,7 +57,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -297,14 +297,13 @@ cases() ->
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -333,12 +332,10 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB lookup API tests
%%-----------------------------------------------------------------
-mapping_filter_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. This case is supposed to test",
- "that the events are delivered in the correct order",
- "if a MappingFilter have benn associated.",
- ""];
-mapping_filter_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. This case is supposed to test
+%% that the events are delivered in the correct order
+%% if a MappingFilter have benn associated.
mapping_filter_api(_Config) ->
InitQoS = ?not_CreateInitQoS(),
InitQoS2 = ?not_SetMaxEventsPerConsumer(InitQoS,100),
@@ -405,12 +402,10 @@ do_lookup(QoS, Events, Return, Txt, DLFilter, PrioFilter, Timeout) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB discard API tests
%%-----------------------------------------------------------------
-discard_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If MaxEvents limit is reached there",
- "different ways we can discard the. This case will test",
- "all permutations of order and discard policies.",
- ""];
-discard_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If MaxEvents limit is reached there
+%% different ways we can discard the. This case will test
+%% all permutations of order and discard policies.
discard_api(_Config) ->
InitQoS1 = ?not_CreateInitQoS(),
InitQoS2 = ?not_SetPriority(InitQoS1, 10),
@@ -523,11 +518,9 @@ do_discard(Events, QoS, Reply, Txt) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB lookup API tests
%%-----------------------------------------------------------------
-lookup_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. This case is supposed to test",
- "that the events are delivered in the correct order.",
- ""];
-lookup_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. This case is supposed to test
+%% that the events are delivered in the correct order.
lookup_api(_Config) ->
InitQoS = ?not_CreateInitQoS(),
InitQoS2 = ?not_SetMaxEventsPerConsumer(InitQoS,100),
@@ -562,11 +555,9 @@ do_lookup(QoS, Events, Return, Txt) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB max events API tests
%%-----------------------------------------------------------------
-max_events_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If the MaxEvents QoS is updated we must be",
- "able to reduce the amount of stored events.",
- ""];
-max_events_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If the MaxEvents QoS is updated we must be
+%% able to reduce the amount of stored events.
max_events_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -602,10 +593,8 @@ max_events_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB persisten events API tests
%%-----------------------------------------------------------------
-persisten_event_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once.",
- ""];
-persisten_event_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once.
persisten_event_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -639,11 +628,9 @@ persisten_event_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB gc API tests
%%-----------------------------------------------------------------
-gc_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If Deadline defined the events that",
- "are older must be discarded.",
- ""];
-gc_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If Deadline defined the events that
+%% are older must be discarded.
gc_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -680,11 +667,9 @@ gc_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB gc API tests
%%-----------------------------------------------------------------
-auto_gc_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If Deadline defined the events that",
- "are older must be discarded.",
- ""];
-auto_gc_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If Deadline defined the events that
+%% are older must be discarded.
auto_gc_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -717,11 +702,9 @@ auto_gc_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB start- and stop-time API tests
%%-----------------------------------------------------------------
-start_stop_time_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If Deadline defined the events that",
- "are older must be discarded.",
- ""];
-start_stop_time_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If Deadline defined the events that
+%% are older must be discarded.
start_stop_time_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -823,12 +806,10 @@ start_stop_time_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB order API tests
%%-----------------------------------------------------------------
-reorder_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If the QoS is updated we must be",
- "able to change the ordering of events as the discard",
- "and order policies tells us.",
- ""];
-reorder_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If the QoS is updated we must be
+%% able to change the ordering of events as the discard
+%% and order policies tells us.
reorder_api(_Config) ->
%% We need to test switching between:
%% * Priority -> Fifo
diff --git a/lib/cosNotification/test/generated_SUITE.erl b/lib/cosNotification/test/generated_SUITE.erl
index fe186f24e8..8e3ccbd90e 100644
--- a/lib/cosNotification/test/generated_SUITE.erl
+++ b/lib/cosNotification/test/generated_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
-module(generated_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -193,12 +193,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -206,8 +206,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification'(doc) -> ["CosNotification"];
-'CosNotification'(suite) -> [];
'CosNotification'(_) ->
?match("EventReliability", 'CosNotification':'EventReliability'()),
?match(0, 'CosNotification':'BestEffort'()),
@@ -242,8 +240,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_EventHeader'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_EventHeader'(doc) -> ["CosNotification_EventHeader"];
-'CosNotification_EventHeader'(suite) -> [];
'CosNotification_EventHeader'(_) ->
?match(true, orber_tc:check_tc('CosNotification_EventHeader':tc())),
?match("IDL:omg.org/CosNotification/EventHeader:1.0",
@@ -257,8 +253,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_EventType'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_EventType'(doc) -> ["CosNotification_EventType"];
-'CosNotification_EventType'(suite) -> [];
'CosNotification_EventType'(_) ->
?match(true, orber_tc:check_tc('CosNotification_EventType':tc())),
?match("IDL:omg.org/CosNotification/EventType:1.0",
@@ -272,8 +266,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_FixedEventHeader'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_FixedEventHeader'(doc) -> ["CosNotification_FixedEventHeader"];
-'CosNotification_FixedEventHeader'(suite) -> [];
'CosNotification_FixedEventHeader'(_) ->
?match(true, orber_tc:check_tc('CosNotification_FixedEventHeader':tc())),
?match("IDL:omg.org/CosNotification/FixedEventHeader:1.0",
@@ -287,8 +279,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_NamedPropertyRange'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_NamedPropertyRange'(doc) -> ["CosNotification_NamedPropertyRange"];
-'CosNotification_NamedPropertyRange'(suite) -> [];
'CosNotification_NamedPropertyRange'(_) ->
?match(true, orber_tc:check_tc('CosNotification_NamedPropertyRange':tc())),
?match("IDL:omg.org/CosNotification/NamedPropertyRange:1.0",
@@ -302,8 +292,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_Property'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_Property'(doc) -> ["CosNotification_Property"];
-'CosNotification_Property'(suite) -> [];
'CosNotification_Property'(_) ->
?match(true, orber_tc:check_tc('CosNotification_Property':tc())),
?match("IDL:omg.org/CosNotification/Property:1.0",
@@ -317,8 +305,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_PropertyError'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_PropertyError'(doc) -> ["CosNotification_PropertyError"];
-'CosNotification_PropertyError'(suite) -> [];
'CosNotification_PropertyError'(_) ->
?match(true, orber_tc:check_tc('CosNotification_PropertyError':tc())),
?match("IDL:omg.org/CosNotification/PropertyError:1.0",
@@ -332,8 +318,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_PropertyRange'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_PropertyRange'(doc) -> [""];
-'CosNotification_PropertyRange'(suite) -> [];
'CosNotification_PropertyRange'(_) ->
?match(true, orber_tc:check_tc('CosNotification_PropertyRange':tc())),
?match("IDL:omg.org/CosNotification/PropertyRange:1.0",
@@ -347,8 +331,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_StructuredEvent'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_StructuredEvent'(doc) -> ["CosNotification_StructuredEvent"];
-'CosNotification_StructuredEvent'(suite) -> [];
'CosNotification_StructuredEvent'(_) ->
?match(true, orber_tc:check_tc('CosNotification_StructuredEvent':tc())),
?match("IDL:omg.org/CosNotification/StructuredEvent:1.0",
@@ -362,8 +344,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_UnsupportedAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_UnsupportedAdmin'(doc) -> ["CosNotification_UnsupportedAdmin"];
-'CosNotification_UnsupportedAdmin'(suite) -> [];
'CosNotification_UnsupportedAdmin'(_) ->
?match(true, orber_tc:check_tc('CosNotification_UnsupportedAdmin':tc())),
?match("IDL:omg.org/CosNotification/UnsupportedAdmin:1.0",
@@ -377,8 +357,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_UnsupportedQoS'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_UnsupportedQoS'(doc) -> ["CosNotification_UnsupportedQoS"];
-'CosNotification_UnsupportedQoS'(suite) -> [];
'CosNotification_UnsupportedQoS'(_) ->
?match(true, orber_tc:check_tc('CosNotification_UnsupportedQoS':tc())),
?match("IDL:omg.org/CosNotification/UnsupportedQoS:1.0",
@@ -392,8 +370,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_EventBatch'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_EventBatch'(doc) -> ["CosNotification_EventBatch"];
-'CosNotification_EventBatch'(suite) -> [];
'CosNotification_EventBatch'(_) ->
?match(true, orber_tc:check_tc('CosNotification_EventBatch':tc())),
?match("IDL:omg.org/CosNotification/EventBatch:1.0",
@@ -407,8 +383,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_EventTypeSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_EventTypeSeq'(doc) -> ["CosNotification_EventTypeSeq"];
-'CosNotification_EventTypeSeq'(suite) -> [];
'CosNotification_EventTypeSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotification_EventTypeSeq':tc())),
?match("IDL:omg.org/CosNotification/EventTypeSeq:1.0",
@@ -422,8 +396,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_NamedPropertyRangeSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_NamedPropertyRangeSeq'(doc) -> ["CosNotification_NamedPropertyRangeSeq"];
-'CosNotification_NamedPropertyRangeSeq'(suite) -> [];
'CosNotification_NamedPropertyRangeSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotification_NamedPropertyRangeSeq':tc())),
?match("IDL:omg.org/CosNotification/NamedPropertyRangeSeq:1.0",
@@ -437,8 +409,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_PropertyErrorSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_PropertyErrorSeq'(doc) -> ["CosNotification_PropertyErrorSeq"];
-'CosNotification_PropertyErrorSeq'(suite) -> [];
'CosNotification_PropertyErrorSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotification_PropertyErrorSeq':tc())),
?match("IDL:omg.org/CosNotification/PropertyErrorSeq:1.0",
@@ -452,8 +422,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_PropertySeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_PropertySeq'(doc) -> ["CosNotification_PropertySeq"];
-'CosNotification_PropertySeq'(suite) -> [];
'CosNotification_PropertySeq'(_) ->
?match(true, orber_tc:check_tc('CosNotification_PropertySeq':tc())),
?match("IDL:omg.org/CosNotification/PropertySeq:1.0",
@@ -467,8 +435,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_AdminLimit'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_AdminLimit'(doc) -> ["CosNotifyChannelAdmin_AdminLimit"];
-'CosNotifyChannelAdmin_AdminLimit'(suite) -> [];
'CosNotifyChannelAdmin_AdminLimit'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminLimit':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/AdminLimit:1.0",
@@ -482,8 +448,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_AdminLimitExceeded'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_AdminLimitExceeded'(doc) -> ["CosNotifyChannelAdmin_AdminLimitExceeded"];
-'CosNotifyChannelAdmin_AdminLimitExceeded'(suite) -> [];
'CosNotifyChannelAdmin_AdminLimitExceeded'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminLimitExceeded':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/AdminLimitExceeded:1.0",
@@ -497,8 +461,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_AdminNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_AdminNotFound'(doc) -> ["CosNotifyChannelAdmin_AdminNotFound"];
-'CosNotifyChannelAdmin_AdminNotFound'(suite) -> [];
'CosNotifyChannelAdmin_AdminNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminNotFound':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/AdminNotFound:1.0",
@@ -512,8 +474,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ChannelNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ChannelNotFound'(doc) -> ["CosNotifyChannelAdmin_ChannelNotFound"];
-'CosNotifyChannelAdmin_ChannelNotFound'(suite) -> [];
'CosNotifyChannelAdmin_ChannelNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ChannelNotFound':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ChannelNotFound:1.0",
@@ -527,8 +487,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ConnectionAlreadyActive'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ConnectionAlreadyActive'(doc) -> ["CosNotifyChannelAdmin_ConnectionAlreadyActive"];
-'CosNotifyChannelAdmin_ConnectionAlreadyActive'(suite) -> [];
'CosNotifyChannelAdmin_ConnectionAlreadyActive'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ConnectionAlreadyActive':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ConnectionAlreadyActive:1.0",
@@ -537,13 +495,10 @@ end_per_testcase(_Case, Config) ->
'CosNotifyChannelAdmin_ConnectionAlreadyActive':name()),
ok.
-
%%-----------------------------------------------------------------
%% Test Case: 'CosNotifyChannelAdmin_ConnectionAlreadyInactive'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(doc) -> ["CosNotifyChannelAdmin_ConnectionAlreadyInactive"];
-'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(suite) -> [];
'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ConnectionAlreadyInactive':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ConnectionAlreadyInactive:1.0",
@@ -556,8 +511,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_NotConnected'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_NotConnected'(doc) -> ["CosNotifyChannelAdmin_NotConnected"];
-'CosNotifyChannelAdmin_NotConnected'(suite) -> [];
'CosNotifyChannelAdmin_NotConnected'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_NotConnected':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/NotConnected:1.0",
@@ -570,8 +523,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_AdminIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_AdminIDSeq'(doc) -> ["CosNotifyChannelAdmin_AdminIDSeq"];
-'CosNotifyChannelAdmin_AdminIDSeq'(suite) -> [];
'CosNotifyChannelAdmin_AdminIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminIDSeq':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/AdminIDSeq:1.0",
@@ -584,8 +535,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ChannelIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ChannelIDSeq'(doc) -> ["CosNotifyChannelAdmin_ChannelIDSeq"];
-'CosNotifyChannelAdmin_ChannelIDSeq'(suite) -> [];
'CosNotifyChannelAdmin_ChannelIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ChannelIDSeq':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ChannelIDSeq:1.0",
@@ -598,8 +547,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyIDSeq'(doc) -> ["CosNotifyChannelAdmin_ProxyIDSeq"];
-'CosNotifyChannelAdmin_ProxyIDSeq'(suite) -> [];
'CosNotifyChannelAdmin_ProxyIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ProxyIDSeq':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyIDSeq:1.0",
@@ -612,8 +559,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_CallbackNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_CallbackNotFound'(doc) -> ["CosNotifyFilter_CallbackNotFound"];
-'CosNotifyFilter_CallbackNotFound'(suite) -> [];
'CosNotifyFilter_CallbackNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_CallbackNotFound':tc())),
?match("IDL:omg.org/CosNotifyFilter/CallbackNotFound:1.0",
@@ -626,8 +571,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintExp'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintExp'(doc) -> ["CosNotifyFilter_ConstraintExp"];
-'CosNotifyFilter_ConstraintExp'(suite) -> [];
'CosNotifyFilter_ConstraintExp'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintExp':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintExp:1.0",
@@ -640,8 +583,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintInfo'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintInfo'(doc) -> ["CosNotifyFilter_ConstraintInfo"];
-'CosNotifyFilter_ConstraintInfo'(suite) -> [];
'CosNotifyFilter_ConstraintInfo'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintInfo':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintInfo:1.0",
@@ -654,8 +595,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintNotFound'(doc) -> ["CosNotifyFilter_ConstraintNotFound"];
-'CosNotifyFilter_ConstraintNotFound'(suite) -> [];
'CosNotifyFilter_ConstraintNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintNotFound':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintNotFound:1.0",
@@ -668,8 +607,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_DuplicateConstraintID'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_DuplicateConstraintID'(doc) -> ["CosNotifyFilter_DuplicateConstraintID"];
-'CosNotifyFilter_DuplicateConstraintID'(suite) -> [];
'CosNotifyFilter_DuplicateConstraintID'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_DuplicateConstraintID':tc())),
?match("IDL:omg.org/CosNotifyFilter/DuplicateConstraintID:1.0",
@@ -682,8 +619,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_FilterNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_FilterNotFound'(doc) -> ["CosNotifyFilter_FilterNotFound"];
-'CosNotifyFilter_FilterNotFound'(suite) -> [];
'CosNotifyFilter_FilterNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_FilterNotFound':tc())),
?match("IDL:omg.org/CosNotifyFilter/FilterNotFound:1.0",
@@ -696,8 +631,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_InvalidConstraint'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_InvalidConstraint'(doc) -> ["CosNotifyFilter_InvalidConstraint"];
-'CosNotifyFilter_InvalidConstraint'(suite) -> [];
'CosNotifyFilter_InvalidConstraint'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidConstraint':tc())),
?match("IDL:omg.org/CosNotifyFilter/InvalidConstraint:1.0",
@@ -710,8 +643,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_InvalidGrammar'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_InvalidGrammar'(doc) -> ["CosNotifyFilter_InvalidGrammar"];
-'CosNotifyFilter_InvalidGrammar'(suite) -> [];
'CosNotifyFilter_InvalidGrammar'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidGrammar':tc())),
?match("IDL:omg.org/CosNotifyFilter/InvalidGrammar:1.0",
@@ -724,8 +655,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_InvalidValue'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_InvalidValue'(doc) -> ["CosNotifyFilter_InvalidValue"];
-'CosNotifyFilter_InvalidValue'(suite) -> [];
'CosNotifyFilter_InvalidValue'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidValue':tc())),
?match("IDL:omg.org/CosNotifyFilter/InvalidValue:1.0",
@@ -738,8 +667,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingConstraintInfo'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingConstraintInfo'(doc) -> ["CosNotifyFilter_MappingConstraintInfo"];
-'CosNotifyFilter_MappingConstraintInfo'(suite) -> [];
'CosNotifyFilter_MappingConstraintInfo'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintInfo':tc())),
?match("IDL:omg.org/CosNotifyFilter/MappingConstraintInfo:1.0",
@@ -752,8 +679,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingConstraintPair'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingConstraintPair'(doc) -> ["CosNotifyFilter_MappingConstraintPair"];
-'CosNotifyFilter_MappingConstraintPair'(suite) -> [];
'CosNotifyFilter_MappingConstraintPair'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintPair':tc())),
?match("IDL:omg.org/CosNotifyFilter/MappingConstraintPair:1.0",
@@ -766,8 +691,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_UnsupportedFilterableData'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_UnsupportedFilterableData'(doc) -> ["CosNotifyFilter_UnsupportedFilterableData"];
-'CosNotifyFilter_UnsupportedFilterableData'(suite) -> [];
'CosNotifyFilter_UnsupportedFilterableData'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_UnsupportedFilterableData':tc())),
?match("IDL:omg.org/CosNotifyFilter/UnsupportedFilterableData:1.0",
@@ -780,8 +703,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_CallbackIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_CallbackIDSeq'(doc) -> ["CosNotifyFilter_CallbackIDSeq"];
-'CosNotifyFilter_CallbackIDSeq'(suite) -> [];
'CosNotifyFilter_CallbackIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_CallbackIDSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/CallbackIDSeq:1.0",
@@ -795,8 +716,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintExpSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintExpSeq'(doc) -> ["CosNotifyFilter_ConstraintExpSeq"];
-'CosNotifyFilter_ConstraintExpSeq'(suite) -> [];
'CosNotifyFilter_ConstraintExpSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintExpSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintExpSeq:1.0",
@@ -810,8 +729,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintIDSeq'(doc) -> ["CosNotifyFilter_ConstraintIDSeq"];
-'CosNotifyFilter_ConstraintIDSeq'(suite) -> [];
'CosNotifyFilter_ConstraintIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintIDSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintIDSeq:1.0",
@@ -825,8 +742,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintInfoSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintInfoSeq'(doc) -> ["CosNotifyFilter_ConstraintInfoSeq"];
-'CosNotifyFilter_ConstraintInfoSeq'(suite) -> [];
'CosNotifyFilter_ConstraintInfoSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintInfoSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintInfoSeq:1.0",
@@ -840,8 +755,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_FilterIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_FilterIDSeq'(doc) -> ["CosNotifyFilter_FilterIDSeq"];
-'CosNotifyFilter_FilterIDSeq'(suite) -> [];
'CosNotifyFilter_FilterIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_FilterIDSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/FilterIDSeq:1.0",
@@ -855,8 +768,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingConstraintInfoSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingConstraintInfoSeq'(doc) -> ["CosNotifyFilter_MappingConstraintInfoSeq"];
-'CosNotifyFilter_MappingConstraintInfoSeq'(suite) -> [];
'CosNotifyFilter_MappingConstraintInfoSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintInfoSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/MappingConstraintInfoSeq:1.0",
@@ -870,8 +781,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingConstraintPairSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingConstraintPairSeq'(doc) -> ["CosNotifyFilter_MappingConstraintPairSeq"];
-'CosNotifyFilter_MappingConstraintPairSeq'(suite) -> [];
'CosNotifyFilter_MappingConstraintPairSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintPairSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/MappingConstraintPairSeq:1.0",
@@ -885,8 +794,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_InvalidEventType'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_InvalidEventType'(doc) -> ["CosNotifyComm_InvalidEventType"];
-'CosNotifyComm_InvalidEventType'(suite) -> [];
'CosNotifyComm_InvalidEventType'(_) ->
?match(true, orber_tc:check_tc('CosNotifyComm_InvalidEventType':tc())),
?match("IDL:omg.org/CosNotifyComm/InvalidEventType:1.0",
@@ -900,8 +807,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyNotFound'(doc) -> ["CosNotifyChannelAdmin_ProxyNotFound"];
-'CosNotifyChannelAdmin_ProxyNotFound'(suite) -> [];
'CosNotifyChannelAdmin_ProxyNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ProxyNotFound':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyNotFound:1.0",
@@ -915,8 +820,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_AdminPropertiesAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_AdminPropertiesAdmin'(doc) -> ["CosNotification_AdminPropertiesAdmin"];
-'CosNotification_AdminPropertiesAdmin'(suite) -> [];
'CosNotification_AdminPropertiesAdmin'(_) ->
?nomatch(undefined, 'CosNotification_AdminPropertiesAdmin':oe_tc(get_admin)),
?nomatch(undefined, 'CosNotification_AdminPropertiesAdmin':oe_tc(set_admin)),
@@ -933,8 +836,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_QoSAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_QoSAdmin'(doc) -> ["CosNotification_QoSAdmin"];
-'CosNotification_QoSAdmin'(suite) -> [];
'CosNotification_QoSAdmin'(_) ->
?nomatch(undefined, 'CosNotification_QoSAdmin':oe_tc(get_qos)),
?nomatch(undefined, 'CosNotification_QoSAdmin':oe_tc(set_qos)),
@@ -952,8 +853,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ConsumerAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ConsumerAdmin'(doc) -> ["CosNotifyChannelAdmin_ConsumerAdmin"];
-'CosNotifyChannelAdmin_ConsumerAdmin'(suite) -> [];
'CosNotifyChannelAdmin_ConsumerAdmin'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_MyID')),
?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_MyChannel')),
@@ -999,8 +898,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_EventChannel'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_EventChannel'(doc) -> ["CosNotifyChannelAdmin_EventChannel"];
-'CosNotifyChannelAdmin_EventChannel'(suite) -> [];
'CosNotifyChannelAdmin_EventChannel'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc('_get_MyFactory')),
?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc('_get_default_consumer_admin')),
@@ -1039,8 +936,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_EventChannelFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_EventChannelFactory'(doc) -> ["CosNotifyChannelAdmin_EventChannelFactory"];
-'CosNotifyChannelAdmin_EventChannelFactory'(suite) -> [];
'CosNotifyChannelAdmin_EventChannelFactory'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannelFactory':oe_tc(create_channel)),
?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannelFactory':oe_tc(get_all_channels)),
@@ -1058,8 +953,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyConsumer"];
-'CosNotifyChannelAdmin_ProxyConsumer'(suite) -> [];
'CosNotifyChannelAdmin_ProxyConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc('_get_MyType')),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc('_get_MyAdmin')),
@@ -1088,8 +981,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyPullConsumer"];
-'CosNotifyChannelAdmin_ProxyPullConsumer'(suite) -> [];
'CosNotifyChannelAdmin_ProxyPullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(connect_any_pull_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(suspend_connection)),
@@ -1129,8 +1020,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_ProxyPullSupplier"];
-'CosNotifyChannelAdmin_ProxyPullSupplier'(suite) -> [];
'CosNotifyChannelAdmin_ProxyPullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_get_MyType')),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_get_MyAdmin')),
@@ -1176,8 +1065,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyPushConsumer"];
-'CosNotifyChannelAdmin_ProxyPushConsumer'(suite) -> [];
'CosNotifyChannelAdmin_ProxyPushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(connect_any_push_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc('_get_MyType')),
@@ -1216,8 +1103,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_ProxyPushSupplier"];
-'CosNotifyChannelAdmin_ProxyPushSupplier'(suite) -> [];
'CosNotifyChannelAdmin_ProxyPushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(connect_any_push_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(suspend_connection)),
@@ -1264,8 +1149,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxySupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxySupplier'(doc) -> ["CosNotifyChannelAdmin_ProxySupplier"];
-'CosNotifyChannelAdmin_ProxySupplier'(suite) -> [];
'CosNotifyChannelAdmin_ProxySupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_get_MyType')),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_get_MyAdmin')),
@@ -1299,8 +1182,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPullConsumer"];
-'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(suite) -> [];
'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(connect_sequence_pull_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(suspend_connection)),
@@ -1338,8 +1219,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPullSupplier"];
-'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(suite) -> [];
'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(connect_sequence_pull_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc('_get_MyType')),
@@ -1384,8 +1263,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPushConsumer"];
-'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(suite) -> [];
'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(connect_sequence_push_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc('_get_MyType')),
@@ -1422,8 +1299,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPushSupplier"];
-'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(suite) -> [];
'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(connect_sequence_push_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(suspend_connection)),
@@ -1468,8 +1343,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPullConsumer"];
-'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(suite) -> [];
'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(connect_structured_pull_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(suspend_connection)),
@@ -1507,8 +1380,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPullSupplier"];
-'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(suite) -> [];
'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(connect_structured_pull_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc('_get_MyType')),
@@ -1553,8 +1424,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPushConsumer"];
-'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(suite) -> [];
'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(connect_structured_push_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc('_get_MyType')),
@@ -1591,8 +1460,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPushSupplier"];
-'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(suite) -> [];
'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(connect_structured_push_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(suspend_connection)),
@@ -1637,8 +1504,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SupplierAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SupplierAdmin'(doc) -> ["CosNotifyChannelAdmin_SupplierAdmin"];
-'CosNotifyChannelAdmin_SupplierAdmin'(suite) -> [];
'CosNotifyChannelAdmin_SupplierAdmin'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_MyID')),
?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_MyChannel')),
@@ -1681,8 +1546,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_Filter'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_Filter'(doc) -> ["CosNotifyFilter_Filter"];
-'CosNotifyFilter_Filter'(suite) -> [];
'CosNotifyFilter_Filter'(_) ->
?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc('_get_constraint_grammar')),
?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(add_constraints)),
@@ -1711,8 +1574,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_FilterAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_FilterAdmin'(doc) -> ["CosNotifyFilter_FilterAdmin"];
-'CosNotifyFilter_FilterAdmin'(suite) -> [];
'CosNotifyFilter_FilterAdmin'(_) ->
?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(add_filter)),
?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(remove_filter)),
@@ -1733,8 +1594,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_FilterFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_FilterFactory'(doc) -> ["CosNotifyFilter_FilterFactory"];
-'CosNotifyFilter_FilterFactory'(suite) -> [];
'CosNotifyFilter_FilterFactory'(_) ->
?nomatch(undefined, 'CosNotifyFilter_FilterFactory':oe_tc(create_filter)),
?nomatch(undefined, 'CosNotifyFilter_FilterFactory':oe_tc(create_mapping_filter)),
@@ -1752,8 +1611,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingFilter'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingFilter'(doc) -> ["CosNotifyFilter_MappingFilter"];
-'CosNotifyFilter_MappingFilter'(suite) -> [];
'CosNotifyFilter_MappingFilter'(_) ->
?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc('_get_constraint_grammar')),
?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc('_get_value_type')),
@@ -1781,8 +1638,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_NotifyPublish'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_NotifyPublish'(doc) -> ["CosNotifyComm_NotifyPublish"];
-'CosNotifyComm_NotifyPublish'(suite) -> [];
'CosNotifyComm_NotifyPublish'(_) ->
?nomatch(undefined, 'CosNotifyComm_NotifyPublish':oe_tc(offer_change)),
?match(undefined, 'CosNotifyComm_NotifyPublish':oe_tc(undefined)),
@@ -1799,8 +1654,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_NotifySubscribe'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_NotifySubscribe'(doc) -> ["CosNotifyComm_NotifySubscribe"];
-'CosNotifyComm_NotifySubscribe'(suite) -> [];
'CosNotifyComm_NotifySubscribe'(_) ->
?nomatch(undefined, 'CosNotifyComm_NotifySubscribe':oe_tc(subscription_change)),
?match(undefined, 'CosNotifyComm_NotifySubscribe':oe_tc(undefined)),
@@ -1817,8 +1670,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_PullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_PullConsumer'(doc) -> ["CosNotifyComm_PullConsumer"];
-'CosNotifyComm_PullConsumer'(suite) -> [];
'CosNotifyComm_PullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_PullConsumer':oe_tc(offer_change)),
?nomatch(undefined, 'CosNotifyComm_PullConsumer':oe_tc(disconnect_pull_consumer)),
@@ -1838,8 +1689,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_PullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_PullSupplier'(doc) -> ["CosNotifyComm_PullSupplier"];
-'CosNotifyComm_PullSupplier'(suite) -> [];
'CosNotifyComm_PullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_PullSupplier':oe_tc(subscription_change)),
?nomatch(undefined, 'CosNotifyComm_PullSupplier':oe_tc(pull)),
@@ -1861,8 +1710,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_PushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_PushConsumer'(doc) -> ["CosNotifyComm_PushConsumer"];
-'CosNotifyComm_PushConsumer'(suite) -> [];
'CosNotifyComm_PushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_PushConsumer':oe_tc(offer_change)),
?nomatch(undefined, 'CosNotifyComm_PushConsumer':oe_tc(push)),
@@ -1883,8 +1730,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_PushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_PushSupplier'(doc) -> ["CosNotifyComm_PushSupplier"];
-'CosNotifyComm_PushSupplier'(suite) -> [];
'CosNotifyComm_PushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_PushSupplier':oe_tc(subscription_change)),
?nomatch(undefined, 'CosNotifyComm_PushSupplier':oe_tc(disconnect_push_supplier)),
@@ -1904,8 +1749,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_SequencePullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_SequencePullConsumer'(doc) -> ["CosNotifyComm_SequencePullConsumer"];
-'CosNotifyComm_SequencePullConsumer'(suite) -> [];
'CosNotifyComm_SequencePullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_SequencePullConsumer':oe_tc(disconnect_sequence_pull_consumer)),
?nomatch(undefined, 'CosNotifyComm_SequencePullConsumer':oe_tc(offer_change)),
@@ -1924,8 +1767,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_SequencePullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_SequencePullSupplier'(doc) -> ["CosNotifyComm_SequencePullSupplier"];
-'CosNotifyComm_SequencePullSupplier'(suite) -> [];
'CosNotifyComm_SequencePullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(pull_structured_events)),
?nomatch(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(try_pull_structured_events)),
@@ -1946,8 +1787,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_SequencePushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_SequencePushConsumer'(doc) -> ["CosNotifyComm_SequencePushConsumer"];
-'CosNotifyComm_SequencePushConsumer'(suite) -> [];
'CosNotifyComm_SequencePushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_SequencePushConsumer':oe_tc(push_structured_events)),
?nomatch(undefined, 'CosNotifyComm_SequencePushConsumer':oe_tc(disconnect_sequence_push_consumer)),
@@ -1967,8 +1806,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_SequencePushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_SequencePushSupplier'(doc) -> ["CosNotifyComm_SequencePushSupplier"];
-'CosNotifyComm_SequencePushSupplier'(suite) -> [];
'CosNotifyComm_SequencePushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_SequencePushSupplier':oe_tc(disconnect_sequence_push_supplier)),
?nomatch(undefined, 'CosNotifyComm_SequencePushSupplier':oe_tc(subscription_change)),
@@ -1987,8 +1824,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_StructuredPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_StructuredPullConsumer'(doc) -> ["CosNotifyComm_StructuredPullConsumer"];
-'CosNotifyComm_StructuredPullConsumer'(suite) -> [];
'CosNotifyComm_StructuredPullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_StructuredPullConsumer':oe_tc(disconnect_structured_pull_consumer)),
?nomatch(undefined, 'CosNotifyComm_StructuredPullConsumer':oe_tc(offer_change)),
@@ -2007,8 +1842,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_StructuredPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_StructuredPullSupplier'(doc) -> ["CosNotifyComm_StructuredPullSupplier"];
-'CosNotifyComm_StructuredPullSupplier'(suite) -> [];
'CosNotifyComm_StructuredPullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(pull_structured_event)),
?nomatch(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(try_pull_structured_event)),
@@ -2029,8 +1862,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_StructuredPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_StructuredPushConsumer'(doc) -> ["CosNotifyComm_StructuredPushConsumer"];
-'CosNotifyComm_StructuredPushConsumer'(suite) -> [];
'CosNotifyComm_StructuredPushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_StructuredPushConsumer':oe_tc(push_structured_event)),
?nomatch(undefined, 'CosNotifyComm_StructuredPushConsumer':oe_tc(disconnect_structured_push_consumer)),
@@ -2050,8 +1881,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_StructuredPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_StructuredPushSupplier'(doc) -> ["CosNotifyComm_StructuredPushSupplier"];
-'CosNotifyComm_StructuredPushSupplier'(suite) -> [];
'CosNotifyComm_StructuredPushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_StructuredPushSupplier':oe_tc(disconnect_structured_push_supplier)),
?nomatch(undefined, 'CosNotifyComm_StructuredPushSupplier':oe_tc(subscription_change)),
@@ -2070,8 +1899,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosNotificationComm_Event'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosNotificationComm_Event'(doc) -> ["oe_CosNotificationComm_Event"];
-'oe_CosNotificationComm_Event'(suite) -> [];
'oe_CosNotificationComm_Event'(_) ->
?nomatch(undefined, 'oe_CosNotificationComm_Event':oe_tc(callSeq)),
?nomatch(undefined, 'oe_CosNotificationComm_Event':oe_tc(callAny)),
diff --git a/lib/cosNotification/test/grammar_SUITE.erl b/lib/cosNotification/test/grammar_SUITE.erl
index eb0741ce04..536292fdee 100644
--- a/lib/cosNotification/test/grammar_SUITE.erl
+++ b/lib/cosNotification/test/grammar_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,8 +26,6 @@
-module(grammar_SUITE).
-
-
%%--------------- INCLUDES -----------------------------------
-include_lib("orber/include/corba.hrl").
-include_lib("orber/include/ifr_types.hrl").
@@ -43,10 +41,10 @@
-include("idl_output/notify_test.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -58,7 +56,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -100,18 +98,17 @@ cases() ->
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -134,8 +131,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% simple types grammar tests
%%-----------------------------------------------------------------
-simple_types_api(doc) -> ["CosNotification simple types grammar tests", ""];
-simple_types_api(suite) -> [];
simple_types_api(_Config) ->
%% Will always be true, no matter what kind of event we receive.
{ok,T1} = ?match({ok, _}, create_filter("2==2 and 3<4")),
@@ -208,8 +203,6 @@ simple_types_api(_Config) ->
%%-----------------------------------------------------------------
%% enum grammar tests
%%-----------------------------------------------------------------
-enum_api(doc) -> ["CosNotification enum grammar tests", ""];
-enum_api(suite) -> [];
enum_api(_Config) ->
%% Accept events whose 'in' enum is set to the value 'HOUSE' or 'CAR'.
{ok,T1} = ?match({ok, _}, create_filter("$.\\in == HOUSE or $.\\in == CAR")),
@@ -221,13 +214,11 @@ enum_api(_Config) ->
any:create({tk_enum, "IFRId", "in", ["HOUSE", "CAR"]},
'GARAGE')))),
ok.
-
+
%%-----------------------------------------------------------------
%% Union grammar tests
%%-----------------------------------------------------------------
-union_api(doc) -> ["CosNotification union grammar tests", ""];
-union_api(suite) -> [];
union_api(_Config) ->
{ok,T1} = ?match({ok, _}, create_filter("exist $.uni1._d and $.uni1._d == 1 and $.uni1.(1) == 10")),
{ok,T2} = ?match({ok, _}, create_filter("default $.uni1._d and $.uni1.() == 10")),
@@ -541,8 +532,6 @@ union_api(_Config) ->
%%-----------------------------------------------------------------
%% Variables grammar tests
%%-----------------------------------------------------------------
-variable_api(doc) -> ["CosNotification variables grammar tests", ""];
-variable_api(suite) -> [];
variable_api(_Config) ->
%% Accept all "CommunicationsAlarm" events
{ok,T0} = ?match({ok, _}, create_filter("$type_name == 'CommunicationsAlarm'")),
@@ -873,8 +862,6 @@ variable_api(_Config) ->
%%-----------------------------------------------------------------
%% Misc grammar tests
%%-----------------------------------------------------------------
-positional_api(doc) -> ["CosNotification positional notation grammar tests", ""];
-positional_api(suite) -> [];
positional_api(_Config) ->
{ok,T1} = ?match({ok, _}, create_filter("$.3 < 80 or $.1(midterm) > $.1(final) or $.2[3] < 10")),
@@ -929,8 +916,6 @@ positional_api(_Config) ->
%%-----------------------------------------------------------------
%% Components grammar tests
%%-----------------------------------------------------------------
-components_api(doc) -> ["CosNotification components grammar tests", ""];
-components_api(suite) -> [];
components_api(_Config) ->
{ok,T1} = ?match({ok, _}, create_filter("$ == 2")),
?match(true, eval(T1, ?not_CreateSE("DomainName","TypeName","EventName",
diff --git a/lib/cosNotification/test/notification_SUITE.erl b/lib/cosNotification/test/notification_SUITE.erl
index b3884e7968..624a76c64a 100644
--- a/lib/cosNotification/test/notification_SUITE.erl
+++ b/lib/cosNotification/test/notification_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -41,10 +41,10 @@
-include("idl_output/notify_test.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -56,7 +56,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -164,18 +164,16 @@ cases() ->
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
-
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -209,8 +207,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosNotification),
ok.
@@ -219,9 +215,6 @@ app_test(_Config) ->
%%-----------------------------------------------------------------
%% Persistent events max limit
%%-----------------------------------------------------------------
-persistent_max_events_api(doc) -> ["CosNotification QoS EventReliability Persistent",
- ""];
-persistent_max_events_api(suite) -> [];
persistent_max_events_api(_Config) ->
QoSPersistent =
[#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
@@ -309,10 +302,6 @@ terminated(Items) ->
%%-----------------------------------------------------------------
%% Persistent events timeout
%%-----------------------------------------------------------------
-persistent_timeout_events_api(doc) ->
- ["CosNotification QoS EventReliability Persistent",
- ""];
-persistent_timeout_events_api(suite) -> [];
persistent_timeout_events_api(_Config) ->
QoSPersistent =
[#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
@@ -394,10 +383,6 @@ persistent_timeout_events_api(_Config) ->
%%-----------------------------------------------------------------
%% Persistent events max limit
%%-----------------------------------------------------------------
-persistent_recover_events_api(doc) ->
- ["CosNotification QoS EventReliability Persistent",
- ""];
-persistent_recover_events_api(suite) -> [];
persistent_recover_events_api(_Config) ->
QoSPersistent =
[#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
@@ -484,8 +469,6 @@ persistent_recover_events_api(_Config) ->
%%-----------------------------------------------------------------
%% CosNotifyFilter::Filter API tests
%%-----------------------------------------------------------------
-mapping_filter_api(doc) -> ["CosNotifyFilter::MappingFilter API tests.", ""];
-mapping_filter_api(suite) -> [];
mapping_filter_api(_Config) ->
FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
?match({_,key,_,_,_,_}, FiFac),
@@ -514,7 +497,7 @@ mapping_filter_api(_Config) ->
constraint_expr = "2==2 and 3<"},
result_to_set = any:create(orber_tc:short(), 10)}])),
%% Try adding two correct constraint_expr
- ?line[{_,_,CID1,_},{_,_,CID2,_}]=
+ [{_,_,CID1,_},{_,_,CID2,_}]=
?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}, {'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
[#'CosNotifyFilter_MappingConstraintPair'
@@ -685,8 +668,6 @@ mapping_filter_api(_Config) ->
%%-----------------------------------------------------------------
%% CosNotifyFilter::Filter API tests
%%-----------------------------------------------------------------
-filter_api(doc) -> ["CosNotifyFilter::Filter API tests.", ""];
-filter_api(suite) -> [];
filter_api(_Config) ->
Fac = cosNotificationApp:start_global_factory(?FAC_OPT),
?match({_,key,_,_,_,_}, Fac),
@@ -730,7 +711,7 @@ filter_api(_Config) ->
type_name = "type"}],
constraint_expr = "2==2 and 3<"}])),
%% Try adding two correct constraint_expr
- ?line[{_,_,CID1},{_,_,CID2}]=
+ [{_,_,CID1},{_,_,CID2}]=
?match([{'CosNotifyFilter_ConstraintInfo',_,_}, {'CosNotifyFilter_ConstraintInfo',_,_}],
'CosNotifyFilter_Filter':add_constraints(Filter,
[#'CosNotifyFilter_ConstraintExp'{event_types =
@@ -870,8 +851,6 @@ filter_api(_Config) ->
%%-----------------------------------------------------------------
%% Subscription handling API tests
%%-----------------------------------------------------------------
-subscription_api(doc) -> ["CosNotification subscription handling", ""];
-subscription_api(suite) -> [];
subscription_api(_Config) ->
%% Initialize the application.
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
@@ -1090,8 +1069,6 @@ subscription_api(_Config) ->
%%-----------------------------------------------------------------
%% Filter admin API tests
%%-----------------------------------------------------------------
-filter_adm_api(doc) -> ["CosNotification filter admin tests", ""];
-filter_adm_api(suite) -> [];
filter_adm_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
@@ -1166,8 +1143,6 @@ filter_tests(Mod, Obj, Filter, Ch) ->
%%-----------------------------------------------------------------
%% Creating different event pushing and pulling API tests
%%-----------------------------------------------------------------
-events_api(doc) -> ["CosNotification event pushing and pulling tests", ""];
-events_api(suite) -> [];
events_api(_Config) ->
%% Initialize the application.
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
@@ -1550,7 +1525,7 @@ events_api_helper(Fac, Ch, _Id1) ->
FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
Filter = 'CosNotifyFilter_FilterFactory':create_filter(FiFac,"EXTENDED_TCL"),
%% Add constraints to the Filter
- ?line[{_,_,CID1},{_,_,CID2}]=
+ [{_,_,CID1},{_,_,CID2}]=
?match([{'CosNotifyFilter_ConstraintInfo',_,_}, {'CosNotifyFilter_ConstraintInfo',_,_}],
'CosNotifyFilter_Filter':add_constraints(Filter,
[#'CosNotifyFilter_ConstraintExp'{event_types =
@@ -1728,8 +1703,6 @@ event_filtering(_FiFac, _Filter, _AdminConsumer, StructuredProxyPushConsumer, Pu
%%-----------------------------------------------------------------
%% Creating different cosEvent API tests
%%-----------------------------------------------------------------
-cosevent_api(doc) -> ["CosNotification Objects tested with CosEvent API", ""];
-cosevent_api(suite) -> [];
cosevent_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
@@ -1844,8 +1817,6 @@ cosevent_api(_Config) ->
%%-----------------------------------------------------------------
%% AdminPropertiesAdmin API tests
%%-----------------------------------------------------------------
-adm_api(doc) -> ["CosNotification AdminPropertiesAdmin tests", ""];
-adm_api(suite) -> [];
adm_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
@@ -1892,8 +1863,6 @@ adm_api(_Config) ->
%%-----------------------------------------------------------------
%% QoSAdm API tests
%%-----------------------------------------------------------------
-qos_api(doc) -> ["CosNotification QoSAdmin tests", ""];
-qos_api(suite) -> [];
qos_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
@@ -2060,8 +2029,6 @@ qos_api(_Config) ->
%%-----------------------------------------------------------------
%% QoSAdm API tests
%%-----------------------------------------------------------------
-event_qos_api(doc) -> ["CosNotification QoSAdmin tests", ""];
-event_qos_api(suite) -> [];
event_qos_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
diff --git a/lib/cosNotification/test/notify_test_impl.erl b/lib/cosNotification/test/notify_test_impl.erl
index 76973db04b..6c833f4915 100644
--- a/lib/cosNotification/test/notify_test_impl.erl
+++ b/lib/cosNotification/test/notify_test_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/test/notify_test_server.cfg b/lib/cosNotification/test/notify_test_server.cfg
index 87ef97873c..60f50b23bb 100644
--- a/lib/cosNotification/test/notify_test_server.cfg
+++ b/lib/cosNotification/test/notify_test_server.cfg
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/test/notify_test_server.idl b/lib/cosNotification/test/notify_test_server.idl
index e7f3bccf4c..0334d67717 100644
--- a/lib/cosNotification/test/notify_test_server.idl
+++ b/lib/cosNotification/test/notify_test_server.idl
@@ -1,7 +1,7 @@
//
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1999-2010. All Rights Reserved.
+// Copyright Ericsson AB 1999-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/cosNotification/vsn.mk b/lib/cosNotification/vsn.mk
index 07b9bf474b..0d95ab4853 100644
--- a/lib/cosNotification/vsn.mk
+++ b/lib/cosNotification/vsn.mk
@@ -1,2 +1,2 @@
-COSNOTIFICATION_VSN = 1.2.1
+COSNOTIFICATION_VSN = 1.2.2
diff --git a/lib/cosProperty/Makefile b/lib/cosProperty/Makefile
index da3718e99c..44d1aafade 100644
--- a/lib/cosProperty/Makefile
+++ b/lib/cosProperty/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosProperty/doc/src/CosPropertyService_PropertiesIterator.xml b/lib/cosProperty/doc/src/CosPropertyService_PropertiesIterator.xml
index 9f5b79ce08..62a1732e99 100644
--- a/lib/cosProperty/doc/src/CosPropertyService_PropertiesIterator.xml
+++ b/lib/cosProperty/doc/src/CosPropertyService_PropertiesIterator.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/CosPropertyService_PropertyNamesIterator.xml b/lib/cosProperty/doc/src/CosPropertyService_PropertyNamesIterator.xml
index f95e98b1af..5948490547 100644
--- a/lib/cosProperty/doc/src/CosPropertyService_PropertyNamesIterator.xml
+++ b/lib/cosProperty/doc/src/CosPropertyService_PropertyNamesIterator.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/CosPropertyService_PropertySet.xml b/lib/cosProperty/doc/src/CosPropertyService_PropertySet.xml
index 8a204d536c..8e7fbbd80a 100644
--- a/lib/cosProperty/doc/src/CosPropertyService_PropertySet.xml
+++ b/lib/cosProperty/doc/src/CosPropertyService_PropertySet.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/CosPropertyService_PropertySetDef.xml b/lib/cosProperty/doc/src/CosPropertyService_PropertySetDef.xml
index 5c5000858f..2cbf2fc4f9 100644
--- a/lib/cosProperty/doc/src/CosPropertyService_PropertySetDef.xml
+++ b/lib/cosProperty/doc/src/CosPropertyService_PropertySetDef.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/CosPropertyService_PropertySetDefFactory.xml b/lib/cosProperty/doc/src/CosPropertyService_PropertySetDefFactory.xml
index 39b2548f5d..d6425db9cf 100644
--- a/lib/cosProperty/doc/src/CosPropertyService_PropertySetDefFactory.xml
+++ b/lib/cosProperty/doc/src/CosPropertyService_PropertySetDefFactory.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/CosPropertyService_PropertySetFactory.xml b/lib/cosProperty/doc/src/CosPropertyService_PropertySetFactory.xml
index a8e843ca95..0aa22dd716 100644
--- a/lib/cosProperty/doc/src/CosPropertyService_PropertySetFactory.xml
+++ b/lib/cosProperty/doc/src/CosPropertyService_PropertySetFactory.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/Makefile b/lib/cosProperty/doc/src/Makefile
index 5fd117c01a..6b210500f9 100644
--- a/lib/cosProperty/doc/src/Makefile
+++ b/lib/cosProperty/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosProperty/doc/src/book.xml b/lib/cosProperty/doc/src/book.xml
index 4ed3c57edf..9ee681b057 100644
--- a/lib/cosProperty/doc/src/book.xml
+++ b/lib/cosProperty/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/ch_contents.xml b/lib/cosProperty/doc/src/ch_contents.xml
index e054a2aa12..5c3112a644 100644
--- a/lib/cosProperty/doc/src/ch_contents.xml
+++ b/lib/cosProperty/doc/src/ch_contents.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/ch_example.xml b/lib/cosProperty/doc/src/ch_example.xml
index f4e990b876..da13af2312 100644
--- a/lib/cosProperty/doc/src/ch_example.xml
+++ b/lib/cosProperty/doc/src/ch_example.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/ch_install.xml b/lib/cosProperty/doc/src/ch_install.xml
index 9df82bc794..a1aa2914b4 100644
--- a/lib/cosProperty/doc/src/ch_install.xml
+++ b/lib/cosProperty/doc/src/ch_install.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/ch_introduction.xml b/lib/cosProperty/doc/src/ch_introduction.xml
index 7e79e58f18..03ef6f619c 100644
--- a/lib/cosProperty/doc/src/ch_introduction.xml
+++ b/lib/cosProperty/doc/src/ch_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/cosProperty.xml b/lib/cosProperty/doc/src/cosProperty.xml
index e0eaca4f1d..d9310b3113 100644
--- a/lib/cosProperty/doc/src/cosProperty.xml
+++ b/lib/cosProperty/doc/src/cosProperty.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/notes.xml b/lib/cosProperty/doc/src/notes.xml
index fe6983c10f..d5219fc110 100644
--- a/lib/cosProperty/doc/src/notes.xml
+++ b/lib/cosProperty/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,7 +32,22 @@
<file>notes.xml</file>
</header>
- <section><title>cosProperty 1.2</title>
+ <section><title>cosProperty 1.2.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosProperty 1.2</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/cosProperty/doc/src/part.xml b/lib/cosProperty/doc/src/part.xml
index 6be119f0cc..9d28c6dda4 100644
--- a/lib/cosProperty/doc/src/part.xml
+++ b/lib/cosProperty/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/part_notes.xml b/lib/cosProperty/doc/src/part_notes.xml
index 07af5dac14..bb3221e41c 100644
--- a/lib/cosProperty/doc/src/part_notes.xml
+++ b/lib/cosProperty/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/doc/src/ref_man.xml b/lib/cosProperty/doc/src/ref_man.xml
index 55502ecb9b..a315c0285f 100644
--- a/lib/cosProperty/doc/src/ref_man.xml
+++ b/lib/cosProperty/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl b/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl
index 3c930ecc2c..5972e8f4d2 100644
--- a/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl
+++ b/lib/cosProperty/src/CosPropertyService_PropertiesIterator_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosProperty/src/CosPropertyService_PropertyNamesIterator_impl.erl b/lib/cosProperty/src/CosPropertyService_PropertyNamesIterator_impl.erl
index 976ecda89f..7ce4f6b303 100644
--- a/lib/cosProperty/src/CosPropertyService_PropertyNamesIterator_impl.erl
+++ b/lib/cosProperty/src/CosPropertyService_PropertyNamesIterator_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosProperty/src/CosPropertyService_PropertySetDefFactory_impl.erl b/lib/cosProperty/src/CosPropertyService_PropertySetDefFactory_impl.erl
index 29093b8ad6..722bb45eb7 100644
--- a/lib/cosProperty/src/CosPropertyService_PropertySetDefFactory_impl.erl
+++ b/lib/cosProperty/src/CosPropertyService_PropertySetDefFactory_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosProperty/src/CosPropertyService_PropertySetFactory_impl.erl b/lib/cosProperty/src/CosPropertyService_PropertySetFactory_impl.erl
index 8b4b5a2769..bc6572b634 100644
--- a/lib/cosProperty/src/CosPropertyService_PropertySetFactory_impl.erl
+++ b/lib/cosProperty/src/CosPropertyService_PropertySetFactory_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosProperty/src/Makefile b/lib/cosProperty/src/Makefile
index cd559e168f..1fdc258a6d 100644
--- a/lib/cosProperty/src/Makefile
+++ b/lib/cosProperty/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosProperty/src/cosProperty.hrl b/lib/cosProperty/src/cosProperty.hrl
index 4bc71e5465..0225a43ebd 100644
--- a/lib/cosProperty/src/cosProperty.hrl
+++ b/lib/cosProperty/src/cosProperty.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosProperty/test/Makefile b/lib/cosProperty/test/Makefile
index ec928a9789..5f599c9621 100644
--- a/lib/cosProperty/test/Makefile
+++ b/lib/cosProperty/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -82,14 +82,12 @@ ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/cosProperty/ebin \
ERL_COMPILE_FLAGS += \
$(ERL_IDL_FLAGS) \
-pa $(ERL_TOP)/lib/orber/include \
- -pa $(ERL_TOP)/internal_tools/test_server/ebin \
-pa $(ERL_TOP)/lib/cosProperty/ebin \
-pa $(ERL_TOP)/lib/cosProperty/test/idl_output \
-I$(ERL_TOP)/lib/orber/include \
-I$(ERL_TOP)/lib/cosProperty/src \
-I$(ERL_TOP)/lib/cosProperty \
- -I$(ERL_TOP)/lib/cosProperty/test/$(IDLOUTDIR) \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/cosProperty/test/$(IDLOUTDIR)
# ----------------------------------------------------
# Targets
diff --git a/lib/cosProperty/test/generated_SUITE.erl b/lib/cosProperty/test/generated_SUITE.erl
index 0422e0d018..313f5bf8f9 100644
--- a/lib/cosProperty/test/generated_SUITE.erl
+++ b/lib/cosProperty/test/generated_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
-module(generated_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -136,24 +136,18 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
-
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
-
-
-
%%-----------------------------------------------------------------
%% Test Case: 'CosPropertyService_ConflictingProperty'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_ConflictingProperty'(doc) -> ["CosPropertyService_ConflictingProperty"];
-'CosPropertyService_ConflictingProperty'(suite) -> [];
'CosPropertyService_ConflictingProperty'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_ConflictingProperty':tc())),
?match("IDL:omg.org/CosPropertyService/ConflictingProperty:1.0",
@@ -167,8 +161,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_ConstraintNotSupported'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_ConstraintNotSupported'(doc) -> ["CosPropertyService_ConstraintNotSupported"];
-'CosPropertyService_ConstraintNotSupported'(suite) -> [];
'CosPropertyService_ConstraintNotSupported'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_ConstraintNotSupported':tc())),
?match("IDL:omg.org/CosPropertyService/ConstraintNotSupported:1.0",
@@ -182,8 +174,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_FixedProperty'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_FixedProperty'(doc) -> ["CosPropertyService_FixedProperty"];
-'CosPropertyService_FixedProperty'(suite) -> [];
'CosPropertyService_FixedProperty'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_FixedProperty':tc())),
?match("IDL:omg.org/CosPropertyService/FixedProperty:1.0",
@@ -197,8 +187,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_InvalidPropertyName'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_InvalidPropertyName'(doc) -> ["CosPropertyService_InvalidPropertyName"];
-'CosPropertyService_InvalidPropertyName'(suite) -> [];
'CosPropertyService_InvalidPropertyName'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_InvalidPropertyName':tc())),
?match("IDL:omg.org/CosPropertyService/InvalidPropertyName:1.0",
@@ -212,8 +200,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_MultipleExceptions'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_MultipleExceptions'(doc) -> ["CosPropertyService_MultipleExceptions"];
-'CosPropertyService_MultipleExceptions'(suite) -> [];
'CosPropertyService_MultipleExceptions'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_MultipleExceptions':tc())),
?match("IDL:omg.org/CosPropertyService/MultipleExceptions:1.0",
@@ -227,8 +213,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_Properties'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_Properties'(doc) -> ["CosPropertyService_Properties"];
-'CosPropertyService_Properties'(suite) -> [];
'CosPropertyService_Properties'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_Properties':tc())),
?match("IDL:omg.org/CosPropertyService/Properties:1.0",
@@ -242,8 +226,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_Property'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_Property'(doc) -> ["CosPropertyService_Property"];
-'CosPropertyService_Property'(suite) -> [];
'CosPropertyService_Property'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_Property':tc())),
?match("IDL:omg.org/CosPropertyService/Property:1.0",
@@ -257,8 +239,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyDef'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyDef'(doc) -> ["CosPropertyService_PropertyDef"];
-'CosPropertyService_PropertyDef'(suite) -> [];
'CosPropertyService_PropertyDef'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyDef':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyDef:1.0",
@@ -272,8 +252,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyDefs'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyDefs'(doc) -> ["CosPropertyService_PropertyDefs"];
-'CosPropertyService_PropertyDefs'(suite) -> [];
'CosPropertyService_PropertyDefs'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyDefs':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyDefs:1.0",
@@ -287,8 +265,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyException'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyException'(doc) -> ["CosPropertyService_PropertyException"];
-'CosPropertyService_PropertyException'(suite) -> [];
'CosPropertyService_PropertyException'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyException':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyException:1.0",
@@ -302,8 +278,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyExceptions'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyExceptions'(doc) -> ["CosPropertyService_PropertyExceptions"];
-'CosPropertyService_PropertyExceptions'(suite) -> [];
'CosPropertyService_PropertyExceptions'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyExceptions':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyExceptions:1.0",
@@ -317,8 +291,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyMode'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyMode'(doc) -> ["CosPropertyService_PropertyMode"];
-'CosPropertyService_PropertyMode'(suite) -> [];
'CosPropertyService_PropertyMode'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyMode':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyMode:1.0",
@@ -332,8 +304,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyModes'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyModes'(doc) -> ["CosPropertyService_PropertyModes"];
-'CosPropertyService_PropertyModes'(suite) -> [];
'CosPropertyService_PropertyModes'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyModes':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyModes:1.0",
@@ -347,8 +317,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyNames'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyNames'(doc) -> ["CosPropertyService_PropertyNames"];
-'CosPropertyService_PropertyNames'(suite) -> [];
'CosPropertyService_PropertyNames'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyNames':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyNames:1.0",
@@ -361,8 +329,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyNotFound'(doc) -> ["CosPropertyService_PropertyNotFound"];
-'CosPropertyService_PropertyNotFound'(suite) -> [];
'CosPropertyService_PropertyNotFound'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyNotFound':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyNotFound:1.0",
@@ -375,8 +341,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyTypes'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyTypes'(doc) -> ["CosPropertyService_PropertyTypes"];
-'CosPropertyService_PropertyTypes'(suite) -> [];
'CosPropertyService_PropertyTypes'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyTypes':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyTypes:1.0",
@@ -389,8 +353,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_ReadOnlyProperty'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_ReadOnlyProperty'(doc) -> ["CosPropertyService_ReadOnlyProperty"];
-'CosPropertyService_ReadOnlyProperty'(suite) -> [];
'CosPropertyService_ReadOnlyProperty'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_ReadOnlyProperty':tc())),
?match("IDL:omg.org/CosPropertyService/ReadOnlyProperty:1.0",
@@ -403,8 +365,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_UnsupportedMode'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_UnsupportedMode'(doc) -> ["CosPropertyService_UnsupportedMode"];
-'CosPropertyService_UnsupportedMode'(suite) -> [];
'CosPropertyService_UnsupportedMode'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedMode':tc())),
?match("IDL:omg.org/CosPropertyService/UnsupportedMode:1.0",
@@ -417,8 +377,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_UnsupportedProperty'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_UnsupportedProperty'(doc) -> ["CosPropertyService_UnsupportedProperty"];
-'CosPropertyService_UnsupportedProperty'(suite) -> [];
'CosPropertyService_UnsupportedProperty'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedProperty':tc())),
?match("IDL:omg.org/CosPropertyService/UnsupportedProperty:1.0",
@@ -431,8 +389,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_UnsupportedTypeCode'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_UnsupportedTypeCode'(doc) -> ["CosPropertyService_UnsupportedTypeCode"];
-'CosPropertyService_UnsupportedTypeCode'(suite) -> [];
'CosPropertyService_UnsupportedTypeCode'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedTypeCode':tc())),
?match("IDL:omg.org/CosPropertyService/UnsupportedTypeCode:1.0",
@@ -445,8 +401,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyNamesIterator'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyNamesIterator'(doc) -> ["CosPropertyService_PropertyNamesIterator"];
-'CosPropertyService_PropertyNamesIterator'(suite) -> [];
'CosPropertyService_PropertyNamesIterator'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(reset)),
?nomatch(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(next_one)),
@@ -465,8 +419,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertiesIterator'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertiesIterator'(doc) -> ["CosPropertyService_PropertiesIterator"];
-'CosPropertyService_PropertiesIterator'(suite) -> [];
'CosPropertyService_PropertiesIterator'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(reset)),
?nomatch(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(next_one)),
@@ -486,8 +438,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertySet'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertySet'(doc) -> ["CosPropertyService_PropertySet"];
-'CosPropertyService_PropertySet'(suite) -> [];
'CosPropertyService_PropertySet'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(define_property)),
?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(define_properties)),
@@ -514,8 +464,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertySetDef'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertySetDef'(doc) -> ["CosPropertyService_PropertySetDef"];
-'CosPropertyService_PropertySetDef'(suite) -> [];
'CosPropertyService_PropertySetDef'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_allowed_property_types)),
?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_allowed_properties)),
@@ -551,8 +499,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertySetDefFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertySetDefFactory'(doc) -> ["CosPropertyService_PropertySetDefFactory"];
-'CosPropertyService_PropertySetDefFactory'(suite) -> [];
'CosPropertyService_PropertySetDefFactory'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertySetDefFactory':oe_tc(create_propertysetdef)),
?nomatch(undefined, 'CosPropertyService_PropertySetDefFactory':oe_tc(create_constrained_propertysetdef)),
@@ -571,8 +517,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertySetFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertySetFactory'(doc) -> ["CosPropertyService_PropertySetFactory"];
-'CosPropertyService_PropertySetFactory'(suite) -> [];
'CosPropertyService_PropertySetFactory'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertySetFactory':oe_tc(create_propertyset)),
?nomatch(undefined, 'CosPropertyService_PropertySetFactory':oe_tc(create_constrained_propertyset)),
diff --git a/lib/cosProperty/test/property_SUITE.erl b/lib/cosProperty/test/property_SUITE.erl
index 94765e7479..77f35c319a 100644
--- a/lib/cosProperty/test/property_SUITE.erl
+++ b/lib/cosProperty/test/property_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -33,10 +33,10 @@
-include_lib("cosProperty/src/cosProperty.hrl").
-include_lib("cosProperty/include/CosPropertyService.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -122,18 +122,17 @@ cases() ->
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -143,7 +142,7 @@ init_per_suite(Config) ->
orber:jump_start(),
cosProperty:install(),
cosProperty:install_db(),
- ?line ?match(ok, application:start(cosProperty)),
+ ?match(ok, application:start(cosProperty)),
if
is_list(Config) ->
Config;
@@ -163,8 +162,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosProperty),
ok.
@@ -173,9 +170,6 @@ app_test(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertySetDefFactory API tests
%%-----------------------------------------------------------------
-create_setdef_api(doc) -> ["CosPropertyService_PropertySetDefFactory API tests.",
- ""];
-create_setdef_api(suite) -> [];
create_setdef_api(_Config) ->
ValidDefs = [#'CosPropertyService_PropertyDef'
@@ -239,9 +233,6 @@ create_setdef_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertySetFactory API tests
%%-----------------------------------------------------------------
-create_set_api(doc) -> ["CosPropertyService_PropertySetFactory API tests.",
- ""];
-create_set_api(suite) -> [];
create_set_api(_Config) ->
Valid = [#'CosPropertyService_Property'
{property_name = ?id1,
@@ -296,9 +287,6 @@ create_set_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertySetDef API tests
%%-----------------------------------------------------------------
-define_api(doc) -> ["CosPropertyService_PropertySet API tests.",
- ""];
-define_api(suite) -> [];
define_api(_Config) ->
ValidDefs = [#'CosPropertyService_Property'
{property_name = ?id1,
@@ -466,9 +454,6 @@ define_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertySetDef API tests
%%-----------------------------------------------------------------
-define_with_mode_api(doc) -> ["CosPropertyService_PropertySetDef API tests.",
- ""];
-define_with_mode_api(suite) -> [];
define_with_mode_api(_Config) ->
ValidDefs = [#'CosPropertyService_PropertyDef'
{property_name = ?id1,
@@ -684,9 +669,6 @@ define_with_mode_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertyNamesIterator API tests
%%-----------------------------------------------------------------
-names_iterator_api(doc) -> ["CosPropertyService_PropertyNamesIterator API tests.",
- ""];
-names_iterator_api(suite) -> [];
names_iterator_api(_Config) ->
Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetFactory()),
Obj = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
@@ -717,9 +699,6 @@ names_iterator_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertiesIterator API tests
%%-----------------------------------------------------------------
-properties_iterator_api(doc) -> ["CosPropertyService_PropertiesIterator API tests.",
- ""];
-properties_iterator_api(suite) -> [];
properties_iterator_api(_Config) ->
Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetFactory()),
Obj = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
diff --git a/lib/cosProperty/vsn.mk b/lib/cosProperty/vsn.mk
index d96508c2d2..1a8e42ffdb 100644
--- a/lib/cosProperty/vsn.mk
+++ b/lib/cosProperty/vsn.mk
@@ -1,2 +1,2 @@
-COSPROPERTY_VSN = 1.2
+COSPROPERTY_VSN = 1.2.1
diff --git a/lib/cosTime/Makefile b/lib/cosTime/Makefile
index 8f17b0249d..e1b0b27284 100644
--- a/lib/cosTime/Makefile
+++ b/lib/cosTime/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/doc/src/CosTime_TIO.xml b/lib/cosTime/doc/src/CosTime_TIO.xml
index 622b2eaeaf..c01154a2c5 100644
--- a/lib/cosTime/doc/src/CosTime_TIO.xml
+++ b/lib/cosTime/doc/src/CosTime_TIO.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/CosTime_TimeService.xml b/lib/cosTime/doc/src/CosTime_TimeService.xml
index 076eb2a73c..b578128277 100644
--- a/lib/cosTime/doc/src/CosTime_TimeService.xml
+++ b/lib/cosTime/doc/src/CosTime_TimeService.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/CosTime_UTO.xml b/lib/cosTime/doc/src/CosTime_UTO.xml
index eb41a2133a..432d9d92f9 100644
--- a/lib/cosTime/doc/src/CosTime_UTO.xml
+++ b/lib/cosTime/doc/src/CosTime_UTO.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/CosTimerEvent_TimerEventHandler.xml b/lib/cosTime/doc/src/CosTimerEvent_TimerEventHandler.xml
index d5b45f4280..4b43b0b12e 100644
--- a/lib/cosTime/doc/src/CosTimerEvent_TimerEventHandler.xml
+++ b/lib/cosTime/doc/src/CosTimerEvent_TimerEventHandler.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/CosTimerEvent_TimerEventService.xml b/lib/cosTime/doc/src/CosTimerEvent_TimerEventService.xml
index 0620acd0af..1db4760c81 100644
--- a/lib/cosTime/doc/src/CosTimerEvent_TimerEventService.xml
+++ b/lib/cosTime/doc/src/CosTimerEvent_TimerEventService.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/Makefile b/lib/cosTime/doc/src/Makefile
index ec2692e538..f3fdafa58a 100644
--- a/lib/cosTime/doc/src/Makefile
+++ b/lib/cosTime/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/doc/src/book.xml b/lib/cosTime/doc/src/book.xml
index 93cf36acdf..a89b005e84 100644
--- a/lib/cosTime/doc/src/book.xml
+++ b/lib/cosTime/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/ch_contents.xml b/lib/cosTime/doc/src/ch_contents.xml
index d016e3404a..8b1c9dd646 100644
--- a/lib/cosTime/doc/src/ch_contents.xml
+++ b/lib/cosTime/doc/src/ch_contents.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/ch_example.xml b/lib/cosTime/doc/src/ch_example.xml
index efea0814c9..690fba8d93 100644
--- a/lib/cosTime/doc/src/ch_example.xml
+++ b/lib/cosTime/doc/src/ch_example.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/ch_install.xml b/lib/cosTime/doc/src/ch_install.xml
index 982845ea6f..9d819a7be7 100644
--- a/lib/cosTime/doc/src/ch_install.xml
+++ b/lib/cosTime/doc/src/ch_install.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/ch_introduction.xml b/lib/cosTime/doc/src/ch_introduction.xml
index c0c62e7b09..1a11606716 100644
--- a/lib/cosTime/doc/src/ch_introduction.xml
+++ b/lib/cosTime/doc/src/ch_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/cosTime.xml b/lib/cosTime/doc/src/cosTime.xml
index f052191c03..02aef1401c 100644
--- a/lib/cosTime/doc/src/cosTime.xml
+++ b/lib/cosTime/doc/src/cosTime.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/notes.xml b/lib/cosTime/doc/src/notes.xml
index bf75f7f617..686d9e6add 100644
--- a/lib/cosTime/doc/src/notes.xml
+++ b/lib/cosTime/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,7 +33,22 @@
<file>notes.xml</file>
</header>
- <section><title>cosTime 1.2.1</title>
+ <section><title>cosTime 1.2.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosTime 1.2.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/cosTime/doc/src/part.xml b/lib/cosTime/doc/src/part.xml
index 3a3e3fcf6e..f0b26d4a56 100644
--- a/lib/cosTime/doc/src/part.xml
+++ b/lib/cosTime/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/part_notes.xml b/lib/cosTime/doc/src/part_notes.xml
index f441961b7c..dbc9185038 100644
--- a/lib/cosTime/doc/src/part_notes.xml
+++ b/lib/cosTime/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/doc/src/ref_man.xml b/lib/cosTime/doc/src/ref_man.xml
index be44a80b91..66bca4af0e 100644
--- a/lib/cosTime/doc/src/ref_man.xml
+++ b/lib/cosTime/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTime/src/CosTime_TIO_impl.erl b/lib/cosTime/src/CosTime_TIO_impl.erl
index 7dc3c743bd..6d4046d428 100644
--- a/lib/cosTime/src/CosTime_TIO_impl.erl
+++ b/lib/cosTime/src/CosTime_TIO_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/src/CosTime_UTO_impl.erl b/lib/cosTime/src/CosTime_UTO_impl.erl
index 9453881c65..09f3eb2fdb 100644
--- a/lib/cosTime/src/CosTime_UTO_impl.erl
+++ b/lib/cosTime/src/CosTime_UTO_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/src/CosTimerEvent_TimerEventHandler_impl.erl b/lib/cosTime/src/CosTimerEvent_TimerEventHandler_impl.erl
index 6ebcafef77..5bc751dfb1 100644
--- a/lib/cosTime/src/CosTimerEvent_TimerEventHandler_impl.erl
+++ b/lib/cosTime/src/CosTimerEvent_TimerEventHandler_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/src/CosTimerEvent_TimerEventService_impl.erl b/lib/cosTime/src/CosTimerEvent_TimerEventService_impl.erl
index fe9b2013b8..59552e4b1b 100644
--- a/lib/cosTime/src/CosTimerEvent_TimerEventService_impl.erl
+++ b/lib/cosTime/src/CosTimerEvent_TimerEventService_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/src/Makefile b/lib/cosTime/src/Makefile
index 7a14db6974..55d59baea3 100644
--- a/lib/cosTime/src/Makefile
+++ b/lib/cosTime/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/src/cosTime.erl b/lib/cosTime/src/cosTime.erl
index afb611beff..a32e210a26 100644
--- a/lib/cosTime/src/cosTime.erl
+++ b/lib/cosTime/src/cosTime.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/src/cosTimeApp.hrl b/lib/cosTime/src/cosTimeApp.hrl
index 74c9bcca5d..7c084dc585 100644
--- a/lib/cosTime/src/cosTimeApp.hrl
+++ b/lib/cosTime/src/cosTimeApp.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTime/test/Makefile b/lib/cosTime/test/Makefile
index aabf855af5..91d3eccf43 100644
--- a/lib/cosTime/test/Makefile
+++ b/lib/cosTime/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -85,7 +85,6 @@ ERL_COMPILE_FLAGS += \
$(ERL_IDL_FLAGS) \
-pa $(ERL_TOP)/lib/orber/include \
-pa $(ERL_TOP)/lib/cosNotification/include \
- -pa $(ERL_TOP)/internal_tools/test_server/ebin \
-pa $(ERL_TOP)/lib/cosTime/ebin \
-pa $(ERL_TOP)/lib/cosTime/include \
-pa $(ERL_TOP)/lib/cosTime/test/idl_output \
@@ -94,8 +93,7 @@ ERL_COMPILE_FLAGS += \
-I$(ERL_TOP)/lib/cosTime/src \
-I$(ERL_TOP)/lib/cosTime/include \
-I$(ERL_TOP)/lib/cosTime \
- -I$(ERL_TOP)/lib/cosTime/test/$(IDLOUTDIR) \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/cosTime/test/$(IDLOUTDIR)
# ----------------------------------------------------
# Targets
diff --git a/lib/cosTime/test/generated_SUITE.erl b/lib/cosTime/test/generated_SUITE.erl
index 2e63b6f50e..b030155340 100644
--- a/lib/cosTime/test/generated_SUITE.erl
+++ b/lib/cosTime/test/generated_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
-module(generated_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -114,12 +114,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -127,8 +127,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'TimeBase_IntervalT'
%% Description:
%%-----------------------------------------------------------------
-'TimeBase_IntervalT'(doc) -> ["TimeBase_IntervalT"];
-'TimeBase_IntervalT'(suite) -> [];
'TimeBase_IntervalT'(_) ->
?match(true, orber_tc:check_tc('TimeBase_IntervalT':tc())),
?match("IDL:omg.org/TimeBase/IntervalT:1.0",
@@ -142,8 +140,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'TimeBase_UtcT'
%% Description:
%%-----------------------------------------------------------------
-'TimeBase_UtcT'(doc) -> ["TimeBase_UtcT"];
-'TimeBase_UtcT'(suite) -> [];
'TimeBase_UtcT'(_) ->
?match(true, orber_tc:check_tc('TimeBase_UtcT':tc())),
?match("IDL:omg.org/TimeBase/UtcT:1.0",
@@ -157,8 +153,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTime_TimeUnavailable'
%% Description:
%%-----------------------------------------------------------------
-'CosTime_TimeUnavailable'(doc) -> ["CosTime_TimeUnavailable"];
-'CosTime_TimeUnavailable'(suite) -> [];
'CosTime_TimeUnavailable'(_) ->
?match(true, orber_tc:check_tc('CosTime_TimeUnavailable':tc())),
?match("IDL:omg.org/CosTime/TimeUnavailable:1.0",
@@ -172,8 +166,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTimerEvent_TimerEventT'
%% Description:
%%-----------------------------------------------------------------
-'CosTimerEvent_TimerEventT'(doc) -> ["CosTimerEvent_TimerEventT"];
-'CosTimerEvent_TimerEventT'(suite) -> [];
'CosTimerEvent_TimerEventT'(_) ->
?match(true, orber_tc:check_tc('CosTimerEvent_TimerEventT':tc())),
?match("IDL:omg.org/CosTimerEvent/TimerEventT:1.0",
@@ -187,8 +179,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTime_TIO'
%% Description:
%%-----------------------------------------------------------------
-'CosTime_TIO'(doc) -> ["CosTime_TIO"];
-'CosTime_TIO'(suite) -> [];
'CosTime_TIO'(_) ->
?nomatch(undefined, 'CosTime_TIO':oe_tc('_get_time_interval')),
?nomatch(undefined, 'CosTime_TIO':oe_tc(spans)),
@@ -207,8 +197,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTime_TimeService'
%% Description:
%%-----------------------------------------------------------------
-'CosTime_TimeService'(doc) -> ["CosTime_TimeService"];
-'CosTime_TimeService'(suite) -> [];
'CosTime_TimeService'(_) ->
?nomatch(undefined, 'CosTime_TimeService':oe_tc(universal_time)),
?nomatch(undefined, 'CosTime_TimeService':oe_tc(secure_universal_time)),
@@ -229,8 +217,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTime_UTO'
%% Description:
%%-----------------------------------------------------------------
-'CosTime_UTO'(doc) -> ["CosTime_UTO"];
-'CosTime_UTO'(suite) -> [];
'CosTime_UTO'(_) ->
?nomatch(undefined, 'CosTime_UTO':oe_tc('_get_time')),
?nomatch(undefined, 'CosTime_UTO':oe_tc('_get_inaccuracy')),
@@ -253,8 +239,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTimerEvent_TimerEventHandler'
%% Description:
%%-----------------------------------------------------------------
-'CosTimerEvent_TimerEventHandler'(doc) -> ["CosTimerEvent_TimerEventHandler"];
-'CosTimerEvent_TimerEventHandler'(suite) -> [];
'CosTimerEvent_TimerEventHandler'(_) ->
?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc('_get_status')),
?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc(time_set)),
@@ -275,8 +259,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTimerEvent_TimerEventService'
%% Description:
%%-----------------------------------------------------------------
-'CosTimerEvent_TimerEventService'(doc) -> ["CosTimerEvent_TimerEventService"];
-'CosTimerEvent_TimerEventService'(suite) -> [];
'CosTimerEvent_TimerEventService'(_) ->
?nomatch(undefined, 'CosTimerEvent_TimerEventService':oe_tc(register)),
?nomatch(undefined, 'CosTimerEvent_TimerEventService':oe_tc(unregister)),
diff --git a/lib/cosTime/test/time_SUITE.erl b/lib/cosTime/test/time_SUITE.erl
index 0e805aed05..f85f13badb 100644
--- a/lib/cosTime/test/time_SUITE.erl
+++ b/lib/cosTime/test/time_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,10 +30,10 @@
%%--------------- INCLUDES -----------------------------------
-include_lib("cosTime/src/cosTimeApp.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -105,14 +105,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -150,8 +150,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosTime),
ok.
@@ -159,27 +157,25 @@ app_test(_Config) ->
%%-----------------------------------------------------------------
%% CosTime API tests
%%-----------------------------------------------------------------
-time_api(doc) -> ["CosTime API tests.", ""];
-time_api(suite) -> [];
time_api(_Config) ->
- ?line ?match(ok, application:start(cosTime)),
+ ?match(ok, application:start(cosTime)),
TS=cosTime:start_time_service(0, 500),
Time=calendar:datetime_to_gregorian_seconds({{1582,1,1},{0,0,0}}),
Inaccuracy = 1000,
Tdf =1,
Utc = #'TimeBase_UtcT'{time=Time, inacclo = ?low_TimeT(Inaccuracy),
inacchi = ?high_TimeT(Inaccuracy), tdf = Tdf},
- ?line UTO1='CosTime_TimeService':new_universal_time(TS, Time, Inaccuracy, Tdf),
- ?line UTO2='CosTime_TimeService':uto_from_utc(TS, Utc),
- ?line ?match(Time, 'CosTime_UTO':'_get_time'(UTO1)),
- ?line ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO1)),
- ?line ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO1)),
- ?line ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO1)),
-
- ?line ?match(Time, 'CosTime_UTO':'_get_time'(UTO2)),
- ?line ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO2)),
- ?line ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO2)),
- ?line ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO2)),
+ UTO1='CosTime_TimeService':new_universal_time(TS, Time, Inaccuracy, Tdf),
+ UTO2='CosTime_TimeService':uto_from_utc(TS, Utc),
+ ?match(Time, 'CosTime_UTO':'_get_time'(UTO1)),
+ ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO1)),
+ ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO1)),
+ ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO1)),
+
+ ?match(Time, 'CosTime_UTO':'_get_time'(UTO2)),
+ ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO2)),
+ ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO2)),
+ ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO2)),
TIO1='CosTime_TimeService':new_interval(TS, 2, 5),
_TIO2='CosTime_TimeService':new_interval(TS, 3, 6),
@@ -189,40 +185,40 @@ time_api(_Config) ->
TIO6='CosTime_TimeService':new_interval(TS, 2, 6),
TIO7='CosTime_TimeService':new_interval(TS, 3, 7),
- ?line {_,TIO8} = ?match({'OTContained', _}, 'CosTime_TIO':overlaps(TIO1, TIO6)),
- ?line {_,TIO9} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO1)),
- ?line {_,TIO10} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO4)),
- ?line {_,TIO11} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO3)),
- ?line {_,TIO12} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO7)),
- ?line {_,TIO13} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO5)),
+ {_,TIO8} = ?match({'OTContained', _}, 'CosTime_TIO':overlaps(TIO1, TIO6)),
+ {_,TIO9} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO1)),
+ {_,TIO10} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO4)),
+ {_,TIO11} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO3)),
+ {_,TIO12} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO7)),
+ {_,TIO13} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO5)),
- ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO8)),
- ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO9)),
- ?line ?match({'TimeBase_IntervalT',3,4},'CosTime_TIO':'_get_time_interval'(TIO10)),
- ?line ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO11)),
- ?line ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO12)),
- ?line ?match({'TimeBase_IntervalT',5,7},'CosTime_TIO':'_get_time_interval'(TIO13)),
+ ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO8)),
+ ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO9)),
+ ?match({'TimeBase_IntervalT',3,4},'CosTime_TIO':'_get_time_interval'(TIO10)),
+ ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO11)),
+ ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO12)),
+ ?match({'TimeBase_IntervalT',5,7},'CosTime_TIO':'_get_time_interval'(TIO13)),
- ?line UTO3='CosTime_TimeService':new_universal_time(TS, 4, 2, 0), %% 2-6
- ?line UTO4='CosTime_TimeService':new_universal_time(TS, 2, 1, 0), %% 1-3
- ?line UTO5='CosTime_TimeService':new_universal_time(TS, 3, 0, 0), %% 3-3
- ?line UTO6='CosTime_TimeService':new_universal_time(TS, 9, 1, 0), %% 8-10
- ?line UTO7='CosTime_TimeService':new_universal_time(TS, 4, 3, 0), %% 1-7
- ?line UTO8='CosTime_TimeService':new_universal_time(TS, 5, 2, 0), %% 3-7
-
- ?line {_,TIO14} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO7)),
- ?line {_,TIO15} = ?match({'OTContainer', _}, 'CosTime_TIO':spans(TIO1, UTO5)),
- ?line {_,TIO16} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO4)),
- ?line {_,TIO17} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO8)),
- ?line {_,TIO18} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO6)),
- ?line {_,TIO19} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO3)),
-
- ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO14)),
- ?line ?match({'TimeBase_IntervalT',3,3},'CosTime_TIO':'_get_time_interval'(TIO15)),
- ?line ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO16)),
- ?line ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO17)),
- ?line ?match({'TimeBase_IntervalT',5,8},'CosTime_TIO':'_get_time_interval'(TIO18)),
- ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO19)),
+ UTO3='CosTime_TimeService':new_universal_time(TS, 4, 2, 0), %% 2-6
+ UTO4='CosTime_TimeService':new_universal_time(TS, 2, 1, 0), %% 1-3
+ UTO5='CosTime_TimeService':new_universal_time(TS, 3, 0, 0), %% 3-3
+ UTO6='CosTime_TimeService':new_universal_time(TS, 9, 1, 0), %% 8-10
+ UTO7='CosTime_TimeService':new_universal_time(TS, 4, 3, 0), %% 1-7
+ UTO8='CosTime_TimeService':new_universal_time(TS, 5, 2, 0), %% 3-7
+
+ {_,TIO14} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO7)),
+ {_,TIO15} = ?match({'OTContainer', _}, 'CosTime_TIO':spans(TIO1, UTO5)),
+ {_,TIO16} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO4)),
+ {_,TIO17} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO8)),
+ {_,TIO18} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO6)),
+ {_,TIO19} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO3)),
+
+ ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO14)),
+ ?match({'TimeBase_IntervalT',3,3},'CosTime_TIO':'_get_time_interval'(TIO15)),
+ ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO16)),
+ ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO17)),
+ ?match({'TimeBase_IntervalT',5,8},'CosTime_TIO':'_get_time_interval'(TIO18)),
+ ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO19)),
cosTime:stop_time_service(TS),
@@ -233,66 +229,64 @@ time_api(_Config) ->
%%-----------------------------------------------------------------
%% CosTimerEvent API tests
%%-----------------------------------------------------------------
-timerevent_api(doc) -> ["CosTimerEvent API tests.", ""];
-timerevent_api(suite) -> [];
timerevent_api(_Config) ->
%% Init cosTime apps.
- ?line ?match(ok, application:start(cosTime)),
- ?line TS=cosTime:start_time_service(0, 500),
- ?line TES=cosTime:start_timerevent_service(TS),
+ ?match(ok, application:start(cosTime)),
+ TS=cosTime:start_time_service(0, 500),
+ TES=cosTime:start_timerevent_service(TS),
%%----- Initialize the cosNotification application. -----
- ?line cosNotificationApp:start(),
- ?line Fac = (catch cosNotificationApp:start_factory([])),
- ?line {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, [], [])),
+ cosNotificationApp:start(),
+ Fac = (catch cosNotificationApp:start_factory([])),
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, [], [])),
%% Create the Admin objects
- ?line {AdminSupplier, _ASID}= ?match({{_,key,_,_,_,_},_},
+ {AdminSupplier, _ASID}= ?match({{_,key,_,_,_,_},_},
'CosNotifyChannelAdmin_EventChannel':new_for_suppliers(Ch,'OR_OP')),
- ?line {AdminConsumer, _ACID}= ?match({{_,key,_,_,_,_},_},
+ {AdminConsumer, _ACID}= ?match({{_,key,_,_,_,_},_},
'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch,'OR_OP')),
%% Create a push consumer TimerEventService will push events to.
- ?line {ProxyPushConsumer,_ID10}= ?match({{_,key,_,_,_,_},_},
+ {ProxyPushConsumer,_ID10}= ?match({{_,key,_,_,_,_},_},
'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'ANY_EVENT')),
%% Create a pull suppliers so we can check we actually got the event.
- ?line {ProxyPullSupplier,_ID1} = ?match({{_,key,_,_,_,_},_},
+ {ProxyPullSupplier,_ID1} = ?match({{_,key,_,_,_,_},_},
'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_pull_supplier(AdminConsumer, 'ANY_EVENT')),
AnyEvent = any:create(orber_tc:long(), 100),
- ?line UTO=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 10*10000000,1,1)),
- ?line EH=?match({_,key,_,_,_,_}, 'CosTimerEvent_TimerEventService':register(TES, ProxyPushConsumer, AnyEvent)),
-
- ?line ?match('ESTimeCleared','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
- ?line ?match({false,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
- ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO)),
- ?line ?match({true,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
- ?line ?match('ESTimeSet','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+ UTO=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 10*10000000,1,1)),
+ EH=?match({_,key,_,_,_,_}, 'CosTimerEvent_TimerEventService':register(TES, ProxyPushConsumer, AnyEvent)),
+
+ ?match('ESTimeCleared','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+ ?match({false,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
+ ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO)),
+ ?match({true,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
+ ?match('ESTimeSet','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
- ?line ?match({{any,tk_null,null}, false},
+ ?match({{any,tk_null,null}, false},
'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
- ?line ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
- ?line ?match('ESTriggered','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+ ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
+ ?match('ESTriggered','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
%% It's allowed to send an UTO with time eq. to 0 if the server is TTRelative.
%% When TTAbsolute BAD_PARAM is raised.
- ?line UTO2=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 0,1,1)),
- ?line ?match({'EXCEPTION',_},'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTAbsolute', UTO2)),
- ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO2)),
- ?line ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
+ UTO2=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 0,1,1)),
+ ?match({'EXCEPTION',_},'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTAbsolute', UTO2)),
+ ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO2)),
+ ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
%% TTPeriodic is defined to be relative, i.e., we can use the tactic as above.
- ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTPeriodic', UTO2)),
+ ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTPeriodic', UTO2)),
%% Sleep for UTO*2+4 secs. At this point the Timer should have delivered 2 events.
timer:sleep(24000),
%% Cancel the timer so no more events will be delivered.
- ?line ?match(true,'CosTimerEvent_TimerEventHandler':cancel_timer(EH)),
+ ?match(true,'CosTimerEvent_TimerEventHandler':cancel_timer(EH)),
- ?line ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
- ?line ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
- ?line ?match({{any,tk_null,null}, false},
+ ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
+ ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
+ ?match({{any,tk_null,null}, false},
'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
diff --git a/lib/cosTime/vsn.mk b/lib/cosTime/vsn.mk
index 39b457b53b..7c9cae2d2f 100644
--- a/lib/cosTime/vsn.mk
+++ b/lib/cosTime/vsn.mk
@@ -1,2 +1,2 @@
-COSTIME_VSN = 1.2.1
+COSTIME_VSN = 1.2.2
diff --git a/lib/cosTransactions/Makefile b/lib/cosTransactions/Makefile
index 459fc8b271..e8d0d1c0cd 100644
--- a/lib/cosTransactions/Makefile
+++ b/lib/cosTransactions/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/doc/src/CosTransactions_Control.xml b/lib/cosTransactions/doc/src/CosTransactions_Control.xml
index 2092ca42dd..bf5e25a701 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_Control.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_Control.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/CosTransactions_Coordinator.xml b/lib/cosTransactions/doc/src/CosTransactions_Coordinator.xml
index 64b1f0dd0f..006ba4cc29 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_Coordinator.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_Coordinator.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/CosTransactions_RecoveryCoordinator.xml b/lib/cosTransactions/doc/src/CosTransactions_RecoveryCoordinator.xml
index 5888f1ada9..2d61f815a3 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_RecoveryCoordinator.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_RecoveryCoordinator.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/CosTransactions_Resource.xml b/lib/cosTransactions/doc/src/CosTransactions_Resource.xml
index 3e6e0eb7d6..40006b55d9 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_Resource.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_Resource.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/CosTransactions_SubtransactionAwareResource.xml b/lib/cosTransactions/doc/src/CosTransactions_SubtransactionAwareResource.xml
index fec970db33..30102d18d9 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_SubtransactionAwareResource.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_SubtransactionAwareResource.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/CosTransactions_Synchronization.xml b/lib/cosTransactions/doc/src/CosTransactions_Synchronization.xml
index 2181134086..c21e7c559d 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_Synchronization.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_Synchronization.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/CosTransactions_Terminator.xml b/lib/cosTransactions/doc/src/CosTransactions_Terminator.xml
index ef92e327c5..f75f4d912d 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_Terminator.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_Terminator.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/CosTransactions_TransactionFactory.xml b/lib/cosTransactions/doc/src/CosTransactions_TransactionFactory.xml
index 00919d3e5a..c4469ef850 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_TransactionFactory.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_TransactionFactory.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/CosTransactions_TransactionalObject.xml b/lib/cosTransactions/doc/src/CosTransactions_TransactionalObject.xml
index f7db880f31..319da2bd16 100644
--- a/lib/cosTransactions/doc/src/CosTransactions_TransactionalObject.xml
+++ b/lib/cosTransactions/doc/src/CosTransactions_TransactionalObject.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/Makefile b/lib/cosTransactions/doc/src/Makefile
index 4aaba44f96..b70d7647b1 100644
--- a/lib/cosTransactions/doc/src/Makefile
+++ b/lib/cosTransactions/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/doc/src/book.xml b/lib/cosTransactions/doc/src/book.xml
index 723c5199cb..33a8c323bb 100644
--- a/lib/cosTransactions/doc/src/book.xml
+++ b/lib/cosTransactions/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/ch_contents.xml b/lib/cosTransactions/doc/src/ch_contents.xml
index d8d9395e65..9b2832a032 100644
--- a/lib/cosTransactions/doc/src/ch_contents.xml
+++ b/lib/cosTransactions/doc/src/ch_contents.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/ch_example.xml b/lib/cosTransactions/doc/src/ch_example.xml
index 6e1ec1d600..a2451e5fbc 100644
--- a/lib/cosTransactions/doc/src/ch_example.xml
+++ b/lib/cosTransactions/doc/src/ch_example.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/ch_install.xml b/lib/cosTransactions/doc/src/ch_install.xml
index 2b518c8678..4270c320b5 100644
--- a/lib/cosTransactions/doc/src/ch_install.xml
+++ b/lib/cosTransactions/doc/src/ch_install.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/ch_introduction.xml b/lib/cosTransactions/doc/src/ch_introduction.xml
index e1fade751c..43d25360bc 100644
--- a/lib/cosTransactions/doc/src/ch_introduction.xml
+++ b/lib/cosTransactions/doc/src/ch_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/ch_skeletons.xml b/lib/cosTransactions/doc/src/ch_skeletons.xml
index 8c7e07ed59..e101cff5da 100644
--- a/lib/cosTransactions/doc/src/ch_skeletons.xml
+++ b/lib/cosTransactions/doc/src/ch_skeletons.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/cosTransactions.xml b/lib/cosTransactions/doc/src/cosTransactions.xml
index e0adb7fead..772baaf18a 100644
--- a/lib/cosTransactions/doc/src/cosTransactions.xml
+++ b/lib/cosTransactions/doc/src/cosTransactions.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/notes.xml b/lib/cosTransactions/doc/src/notes.xml
index 76d14962b7..85ace1208b 100644
--- a/lib/cosTransactions/doc/src/notes.xml
+++ b/lib/cosTransactions/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,7 +33,22 @@
<file>notes.xml</file>
</header>
- <section><title>cosTransactions 1.3.1</title>
+ <section><title>cosTransactions 1.3.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosTransactions 1.3.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/cosTransactions/doc/src/part.xml b/lib/cosTransactions/doc/src/part.xml
index 934b27311d..6777d7d979 100644
--- a/lib/cosTransactions/doc/src/part.xml
+++ b/lib/cosTransactions/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/part_notes.xml b/lib/cosTransactions/doc/src/part_notes.xml
index 05f98e653a..48cc04aa4c 100644
--- a/lib/cosTransactions/doc/src/part_notes.xml
+++ b/lib/cosTransactions/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/doc/src/ref_man.xml b/lib/cosTransactions/doc/src/ref_man.xml
index bcc489ed0f..9d296967b3 100644
--- a/lib/cosTransactions/doc/src/ref_man.xml
+++ b/lib/cosTransactions/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/cosTransactions/examples/Makefile b/lib/cosTransactions/examples/Makefile
index 1289f4c845..57a51f5932 100644
--- a/lib/cosTransactions/examples/Makefile
+++ b/lib/cosTransactions/examples/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/src/CosTransactions_Terminator_impl.erl b/lib/cosTransactions/src/CosTransactions_Terminator_impl.erl
index 9b8a0d93e2..d995eb64e4 100644
--- a/lib/cosTransactions/src/CosTransactions_Terminator_impl.erl
+++ b/lib/cosTransactions/src/CosTransactions_Terminator_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/src/ETraP_Common.hrl b/lib/cosTransactions/src/ETraP_Common.hrl
index 971aef669a..906e984a5b 100644
--- a/lib/cosTransactions/src/ETraP_Common.hrl
+++ b/lib/cosTransactions/src/ETraP_Common.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/src/Makefile b/lib/cosTransactions/src/Makefile
index 90e1e5130f..4cc1e487c2 100644
--- a/lib/cosTransactions/src/Makefile
+++ b/lib/cosTransactions/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/src/cosTransactions.erl b/lib/cosTransactions/src/cosTransactions.erl
index 6284b8abd1..60e5fff46d 100644
--- a/lib/cosTransactions/src/cosTransactions.erl
+++ b/lib/cosTransactions/src/cosTransactions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/src/etrap_logmgr.erl b/lib/cosTransactions/src/etrap_logmgr.erl
index 188cc27d35..a5d9affe7d 100644
--- a/lib/cosTransactions/src/etrap_logmgr.erl
+++ b/lib/cosTransactions/src/etrap_logmgr.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/test/Makefile b/lib/cosTransactions/test/Makefile
index 3cdb05e7ef..58199248d1 100644
--- a/lib/cosTransactions/test/Makefile
+++ b/lib/cosTransactions/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -93,13 +93,11 @@ ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/cosTransactions/ebin\
ERL_COMPILE_FLAGS += \
$(ERL_IDL_FLAGS) \
-pa $(ERL_TOP)/lib/orber/include \
- -pa $(ERL_TOP)/lib/test_server/ebin \
-pa $(ERL_TOP)/lib/cosTransactions/ebin \
-pa $(ERL_TOP)/lib/cosTransactions/test/idl_output \
-I$(ERL_TOP)/lib/orber/include \
-I$(ERL_TOP)/lib/cosTransactions \
- -I$(ERL_TOP)/lib/cosTransactions/test/$(IDLOUTDIR) \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/cosTransactions/test/$(IDLOUTDIR)
# ----------------------------------------------------
# Targets
diff --git a/lib/cosTransactions/test/etrap_test.cfg b/lib/cosTransactions/test/etrap_test.cfg
index a047a6fb1b..a2bc7d3fb7 100644
--- a/lib/cosTransactions/test/etrap_test.cfg
+++ b/lib/cosTransactions/test/etrap_test.cfg
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/test/etrap_test.idl b/lib/cosTransactions/test/etrap_test.idl
index 6b1dbbc8f8..7379115be7 100644
--- a/lib/cosTransactions/test/etrap_test.idl
+++ b/lib/cosTransactions/test/etrap_test.idl
@@ -1,7 +1,7 @@
//
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1999-2010. All Rights Reserved.
+// Copyright Ericsson AB 1999-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/test/etrap_test_lib.erl b/lib/cosTransactions/test/etrap_test_lib.erl
index 9774222531..e8d8c3a429 100644
--- a/lib/cosTransactions/test/etrap_test_lib.erl
+++ b/lib/cosTransactions/test/etrap_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/test/etrap_test_lib.hrl b/lib/cosTransactions/test/etrap_test_lib.hrl
index 01e507d5ac..6fe61a4d45 100644
--- a/lib/cosTransactions/test/etrap_test_lib.hrl
+++ b/lib/cosTransactions/test/etrap_test_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/test/etrap_test_server_impl.erl b/lib/cosTransactions/test/etrap_test_server_impl.erl
index e5d360808f..8a244b42c7 100644
--- a/lib/cosTransactions/test/etrap_test_server_impl.erl
+++ b/lib/cosTransactions/test/etrap_test_server_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/cosTransactions/test/generated_SUITE.erl b/lib/cosTransactions/test/generated_SUITE.erl
index 9d5cfb154a..52b850b189 100644
--- a/lib/cosTransactions/test/generated_SUITE.erl
+++ b/lib/cosTransactions/test/generated_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,10 +27,10 @@
-module(generated_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -41,7 +41,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -52,7 +52,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -64,7 +64,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -133,22 +133,18 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
-
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
-
%%-----------------------------------------------------------------
%% Test Case: 'CosTransactions_HeuristicCommit'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_HeuristicCommit'(doc) -> ["CosTransactions_HeuristicCommit"];
-'CosTransactions_HeuristicCommit'(suite) -> [];
'CosTransactions_HeuristicCommit'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_HeuristicCommit':tc())),
?match("IDL:omg.org/CosTransactions/HeuristicCommit:1.0",
@@ -162,8 +158,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_HeuristicHazard'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_HeuristicHazard'(doc) -> ["CosTransactions_HeuristicHazard"];
-'CosTransactions_HeuristicHazard'(suite) -> [];
'CosTransactions_HeuristicHazard'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_HeuristicHazard':tc())),
?match("IDL:omg.org/CosTransactions/HeuristicHazard:1.0",
@@ -177,8 +171,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_HeuristicMixed'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_HeuristicMixed'(doc) -> ["CosTransactions_HeuristicMixed"];
-'CosTransactions_HeuristicMixed'(suite) -> [];
'CosTransactions_HeuristicMixed'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_HeuristicMixed':tc())),
?match("IDL:omg.org/CosTransactions/HeuristicMixed:1.0",
@@ -192,8 +184,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_HeuristicRollback'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_HeuristicRollback'(doc) -> ["CosTransactions_HeuristicRollback"];
-'CosTransactions_HeuristicRollback'(suite) -> [];
'CosTransactions_HeuristicRollback'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_HeuristicRollback':tc())),
?match("IDL:omg.org/CosTransactions/HeuristicRollback:1.0",
@@ -207,8 +197,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Inactive'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Inactive'(doc) -> ["CosTransactions_Inactive"];
-'CosTransactions_Inactive'(suite) -> [];
'CosTransactions_Inactive'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_Inactive':tc())),
?match("IDL:omg.org/CosTransactions/Inactive:1.0",
@@ -222,8 +210,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_InvalidControl'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_InvalidControl'(doc) -> ["CosTransactions_InvalidControl"];
-'CosTransactions_InvalidControl'(suite) -> [];
'CosTransactions_InvalidControl'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_InvalidControl':tc())),
?match("IDL:omg.org/CosTransactions/InvalidControl:1.0",
@@ -237,8 +223,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_NoTransaction'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_NoTransaction'(doc) -> ["CosTransactions_NoTransaction"];
-'CosTransactions_NoTransaction'(suite) -> [];
'CosTransactions_NoTransaction'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_NoTransaction':tc())),
?match("IDL:omg.org/CosTransactions/NoTransaction:1.0",
@@ -252,8 +236,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_NotPrepared'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_NotPrepared'(doc) -> ["CosTransactions_NotPrepared"];
-'CosTransactions_NotPrepared'(suite) -> [];
'CosTransactions_NotPrepared'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_NotPrepared':tc())),
?match("IDL:omg.org/CosTransactions/NotPrepared:1.0",
@@ -267,8 +249,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_NotSubtransaction'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_NotSubtransaction'(doc) -> ["CosTransactions_NotSubtransaction"];
-'CosTransactions_NotSubtransaction'(suite) -> [];
'CosTransactions_NotSubtransaction'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_NotSubtransaction':tc())),
?match("IDL:omg.org/CosTransactions/NotSubtransaction:1.0",
@@ -282,8 +262,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_SubtransactionsUnavailable'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_SubtransactionsUnavailable'(doc) -> ["CosTransactions_SubtransactionsUnavailable"];
-'CosTransactions_SubtransactionsUnavailable'(suite) -> [];
'CosTransactions_SubtransactionsUnavailable'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_SubtransactionsUnavailable':tc())),
?match("IDL:omg.org/CosTransactions/SubtransactionsUnavailable:1.0",
@@ -297,8 +275,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Unavailable'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Unavailable'(doc) -> ["CosTransactions_Unavailable"];
-'CosTransactions_Unavailable'(suite) -> [];
'CosTransactions_Unavailable'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_Unavailable':tc())),
?match("IDL:omg.org/CosTransactions/Unavailable:1.0",
@@ -312,8 +288,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_SynchronizationUnavailable'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_SynchronizationUnavailable'(doc) -> ["CosTransactions_SynchronizationUnavailable"];
-'CosTransactions_SynchronizationUnavailable'(suite) -> [];
'CosTransactions_SynchronizationUnavailable'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_SynchronizationUnavailable':tc())),
?match("IDL:omg.org/CosTransactions/SynchronizationUnavailable:1.0",
@@ -326,8 +300,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_TransIdentity'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_TransIdentity'(doc) -> ["CosTransactions_TransIdentity"];
-'CosTransactions_TransIdentity'(suite) -> [];
'CosTransactions_TransIdentity'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_TransIdentity':tc())),
?match("IDL:omg.org/CosTransactions/TransIdentity:1.0",
@@ -340,8 +312,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_PropagationContext'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_PropagationContext'(doc) -> ["CosTransactions_PropagationContext"];
-'CosTransactions_PropagationContext'(suite) -> [];
'CosTransactions_PropagationContext'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_PropagationContext':tc())),
?match("IDL:omg.org/CosTransactions/PropagationContext:1.0",
@@ -354,8 +324,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_otid_t'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_otid_t'(doc) -> ["CosTransactions_otid_t"];
-'CosTransactions_otid_t'(suite) -> [];
'CosTransactions_otid_t'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_otid_t':tc())),
?match("IDL:omg.org/CosTransactions/otid_t:1.0",
@@ -368,8 +336,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_WrongTransaction'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_WrongTransaction'(doc) -> ["CosTransactions_WrongTransaction"];
-'CosTransactions_WrongTransaction'(suite) -> [];
'CosTransactions_WrongTransaction'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_WrongTransaction':tc())),
?match("IDL:omg.org/CosTransactions/WrongTransaction:1.0",
@@ -383,8 +349,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Control'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Control'(doc) -> ["CosTransactions_Control"];
-'CosTransactions_Control'(suite) -> [];
'CosTransactions_Control'(_) ->
?nomatch(undefined, 'CosTransactions_Control':oe_tc(get_terminator)),
?nomatch(undefined, 'CosTransactions_Control':oe_tc(get_coordinator)),
@@ -402,8 +366,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Coordinator'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Coordinator'(doc) -> ["CosTransactions_Coordinator"];
-'CosTransactions_Coordinator'(suite) -> [];
'CosTransactions_Coordinator'(_) ->
?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_status)),
?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_parent_status)),
@@ -435,8 +397,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_RecoveryCoordinator'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_RecoveryCoordinator'(doc) -> ["CosTransactions_RecoveryCoordinator"];
-'CosTransactions_RecoveryCoordinator'(suite) -> [];
'CosTransactions_RecoveryCoordinator'(_) ->
?nomatch(undefined, 'CosTransactions_RecoveryCoordinator':oe_tc(replay_completion)),
?match(undefined, 'CosTransactions_RecoveryCoordinator':oe_tc(undefined)),
@@ -453,8 +413,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Resource'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Resource'(doc) -> ["CosTransactions_Resource"];
-'CosTransactions_Resource'(suite) -> [];
'CosTransactions_Resource'(_) ->
?nomatch(undefined, 'CosTransactions_Resource':oe_tc(prepare)),
?nomatch(undefined, 'CosTransactions_Resource':oe_tc(rollback)),
@@ -475,8 +433,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_SubtransactionAwareResource'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_SubtransactionAwareResource'(doc) -> ["CosTransactions_SubtransactionAwareResource"];
-'CosTransactions_SubtransactionAwareResource'(suite) -> [];
'CosTransactions_SubtransactionAwareResource'(_) ->
?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(commit_subtransaction)),
?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(rollback_subtransaction)),
@@ -500,8 +456,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Terminator'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Terminator'(doc) -> ["CosTransactions_Terminator"];
-'CosTransactions_Terminator'(suite) -> [];
'CosTransactions_Terminator'(_) ->
?nomatch(undefined, 'CosTransactions_Terminator':oe_tc(commit)),
?nomatch(undefined, 'CosTransactions_Terminator':oe_tc(rollback)),
@@ -519,8 +473,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_TransactionFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_TransactionFactory'(doc) -> ["CosTransactions_TransactionFactory"];
-'CosTransactions_TransactionFactory'(suite) -> [];
'CosTransactions_TransactionFactory'(_) ->
?nomatch(undefined, 'CosTransactions_TransactionFactory':oe_tc(create)),
?nomatch(undefined, 'CosTransactions_TransactionFactory':oe_tc(recreate)),
@@ -538,8 +490,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'ETraP_Server'
%% Description:
%%-----------------------------------------------------------------
-'ETraP_Server'(doc) -> ["ETraP_Server"];
-'ETraP_Server'(suite) -> [];
'ETraP_Server'(_) ->
?nomatch(undefined, 'ETraP_Server':oe_tc(get_status)),
?nomatch(undefined, 'ETraP_Server':oe_tc(get_parent_status)),
diff --git a/lib/cosTransactions/test/transactions_SUITE.erl b/lib/cosTransactions/test/transactions_SUITE.erl
index 0f06c3d262..00753a4e6e 100644
--- a/lib/cosTransactions/test/transactions_SUITE.erl
+++ b/lib/cosTransactions/test/transactions_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,9 +29,9 @@
-include_lib("cosTransactions/include/CosTransactions.hrl").
-include("etrap_test_lib.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
%%-----------------------------------------------------------------
@@ -63,19 +63,16 @@ end_per_group(_GroupName, Config) ->
cases() ->
[etrap_api, resource_api, app_test].
-
-
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
'oe_CosTransactions':'oe_register'(),
'oe_etrap_test':'oe_register'(),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
@@ -84,7 +81,7 @@ end_per_testcase(_Case, Config) ->
'oe_CosTransactions':'oe_unregister'(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -110,8 +107,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosTransactions),
ok.
@@ -119,12 +114,10 @@ app_test(_Config) ->
%%-----------------------------------------------------------------
%% API tests
%%-----------------------------------------------------------------
-etrap_api(doc) -> ["ETraP_Server tests", ""];
-etrap_api(suite) -> [];
etrap_api(_Config) ->
- ?line ?match(ok, application:start(cosTransactions),
+ ?match(ok, application:start(cosTransactions),
"Starting the cosTransactions application"),
- ?line TrFac = cosTransactions:start_factory(),
+ TrFac = cosTransactions:start_factory(),
%% Start a new transaction:
%% RootCoord
%% / \
@@ -139,28 +132,28 @@ etrap_api(_Config) ->
%%------ Test CosTransactions::Coordinator ------
- ?line ?match(true,
+ ?match(true,
'CosTransactions_Coordinator':is_same_transaction(Coord, Coord),
"'CosTransactions_Coordinator':is_same_transaction"),
- ?line ?match(false,
+ ?match(false,
'CosTransactions_Coordinator':is_same_transaction(Coord, SubCoord1),
"'CosTransactions_Coordinator':is_same_transaction"),
- ?line ?match(true,
+ ?match(true,
'CosTransactions_Coordinator':is_descendant_transaction(Coord, Coord),
"'CosTransactions_Coordinator':is_descendant_transaction"),
- ?line ?match(false,
+ ?match(false,
'CosTransactions_Coordinator':is_descendant_transaction(Coord, SubCoord1),
"'CosTransactions_Coordinator':is_descendant_transaction"),
- ?line ?match(true,
+ ?match(true,
'CosTransactions_Coordinator':is_descendant_transaction(SubCoord1, Coord),
"'CosTransactions_Coordinator':is_descendant_transaction"),
- ?line ?match(false,
+ ?match(false,
'CosTransactions_Coordinator':is_descendant_transaction(SubCoord1, SubCoord2),
"'CosTransactions_Coordinator':is_descendant_transaction"),
- ?line ?match(true,
+ ?match(true,
'CosTransactions_Coordinator':is_top_level_transaction(Coord),
"'CosTransactions_Coordinator':is_top_level_transaction"),
- ?line ?match(false,
+ ?match(false,
'CosTransactions_Coordinator':is_top_level_transaction(SubCoord2),
"'CosTransactions_Coordinator':is_top_level_transaction"),
@@ -169,31 +162,31 @@ etrap_api(_Config) ->
RootHash2 = 'CosTransactions_Coordinator':hash_top_level_tran(SubCoord1),
RootHash3 = 'CosTransactions_Coordinator':hash_top_level_tran(Coord),
_SubHash = 'CosTransactions_Coordinator':hash_transaction(SubCoord2),
- ?line ?match(RootHash, RepeatHash,
+ ?match(RootHash, RepeatHash,
"'CosTransactions_Coordinator':hash_transaction"),
- ?line ?match(RootHash, RootHash2,
+ ?match(RootHash, RootHash2,
"'CosTransactions_Coordinator':hash_top_level_tran"),
- ?line ?match(RootHash, RootHash3,
+ ?match(RootHash, RootHash3,
"'CosTransactions_Coordinator':hash_top_level_tran"),
-% ?line ?match_inverse(RootHash, SubHash,
+% ?match_inverse(RootHash, SubHash,
% "'CosTransactions_Coordinator':hash_transaction"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_status(Coord),
"'CosTransactions_Coordinator':get_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_status(SubCoord1),
"'CosTransactions_Coordinator':get_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_parent_status(Coord),
"'CosTransactions_Coordinator':get_parent_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_parent_status(SubCoord1),
"'CosTransactions_Coordinator':get_parent_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_top_level_status(Coord),
"'CosTransactions_Coordinator':get_top_level_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_top_level_status(SubCoord1),
"'CosTransactions_Coordinator':get_top_level_status"),
@@ -209,21 +202,21 @@ etrap_api(_Config) ->
_RC1 = 'CosTransactions_Coordinator':register_resource(SubCoord1, O1),
% 'CosTransactions_Coordinator':register_synchronization(SubCoord1, O1),
- ?line ?match('VoteCommit',
+ ?match('VoteCommit',
'CosTransactions_Resource':prepare(SubCoord1),
"'CosTransactions_Coordinator':prepare"),
%% The Transaction are no longer in 'StatusActive' state. No new
%% "members" allowed.
- ?line ?match('StatusPrepared',
+ ?match('StatusPrepared',
'CosTransactions_Coordinator':get_status(SubCoord1),
"'CosTransactions_Coordinator':get_status"),
-% ?line ?match({'EXCEPTION', ?tr_inactive},
+% ?match({'EXCEPTION', ?tr_inactive},
% 'CosTransactions_Coordinator':register_synchronization(SubCoord1, O1),
% "'CosTransactions_Coordinator':register_synchronization"),
- ?line ?match({'EXCEPTION', ?tr_inactive},
+ ?match({'EXCEPTION', ?tr_inactive},
'CosTransactions_Coordinator':register_resource(SubCoord1, O1),
"'CosTransactions_Coordinator':register_resource"),
- ?line ?match({'EXCEPTION', ?tr_inactive},
+ ?match({'EXCEPTION', ?tr_inactive},
'CosTransactions_Coordinator':create_subtransaction(SubCoord1),
"'CosTransactions_Coordinator':create_subtransaction"),
@@ -236,108 +229,106 @@ etrap_api(_Config) ->
catch corba:dispose(Coord),
catch corba:dispose(O1),
- ?line cosTransactions:stop_factory(TrFac),
- ?line application:stop(cosTransactions),
+ cosTransactions:stop_factory(TrFac),
+ application:stop(cosTransactions),
ok.
%%-----------------------------------------------------------------
%% API tests
%%-----------------------------------------------------------------
-resource_api(doc) -> ["cosTransactions API tests", ""];
-resource_api(suite) -> [];
resource_api(_Config) ->
- ?line ?match(ok, application:start(cosTransactions),
+ ?match(ok, application:start(cosTransactions),
"Starting the cosTransactions application"),
- ?line TrFac = cosTransactions:start_factory([{typecheck, true}]),
+ TrFac = cosTransactions:start_factory([{typecheck, true}]),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?prepare_rollback}),
"TESTCASE #1: Prepare rollback Resource 4"),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?nop, ?commit_mix, ?nop}),
"TESTCASE #2: Heuristic Mixed exception Resource 3"),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop}),
"TESTCASE #3: Normal completion. No errors."),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_cm}),
"TESTCASE #4: Heuristic Commit Exception Resource 4"),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, 0, {?nop, ?rollback_rb, ?nop, ?prepare_rollback}),
"TESTCASE #5: Heuristic Rollbac Resource 2, Resource 4 reply 'VoteRollback'"),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, 0, {?nop, ?nop, ?prepare_rollback, ?rollback_rb}),
"TESTCASE #6: Heuristic Rollbac Resource 4, Resource 3 reply 'VoteRollback'"),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?commit_delay, ?nop}),
"TESTCASE #7: Resource 3 delay during commit. No timeout."),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?prepare_delay, ?nop}),
"TESTCASE #8: Resource 3 delay during prepare. No timeout."),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, ?TIMEOUT, {?nop, ?commit_delay, ?nop, ?nop}),
"TESTCASE #9: Resource 3 delay during commit. Timeout."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, ?TIMEOUT, {?nop, ?prepare_delay, ?nop, ?nop}),
"TESTCASE #10: Resource 3 delay during prepare. Timeout."),
case ?is_debug_compiled of
true ->
%% Testing the Coordinators (root and sub).
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_transient(commit), ?nop]}),
"TESTCASE #11: SubCoord 3 crash transient during commit."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_transient(send_prepare), ?nop]}),
"TESTCASE #12: SubCoord 3 crash transient during send prepare."),
- ?line ?match({'EXCEPTION', ?tr_hazard},
+ ?match({'EXCEPTION', ?tr_hazard},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_permanent(commit), ?nop]}),
"TESTCASE #13: SubCoord 3 crash permanent during commit."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_permanent(send_prepare), ?nop]}),
"TESTCASE #14: SubCoord 3 crash permanent during prepare."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?crash_transient(send_prepare), ?crash_transient(commit), ?nop]}),
"TESTCASE #15: SubCoord 2 crash transient during prepare. SubCoord 3 crash transient during commit"),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?crash_transient(send_prepare), ?nop, ?nop, ?nop]}),
"TESTCASE #16: RootCoord crash transient during send prepare."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?crash_transient(prepare1), ?nop, ?nop]}),
"TESTCASE #17: SubCoord 1 crash transient during prepare1."),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?prepare_mix, ?nop, ?nop, [?nop, ?nop, ?crash_transient(prepare2), ?nop]}),
"TESTCASE #18: SubCoord 3 crash transient during prepare2. Resource 2 raise Heuristic Mixed during prepare"),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?commit_mix, ?nop, ?nop, [?nop, ?nop, ?crash_transient(commit2), ?nop]}),
"TESTCASE #19: Resource 2 raise Heurist mixed during commit. SubCoord crash transient commit2"),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?rollback_cm, ?nop, ?prepare_rollback, [?nop, ?crash_transient(rollback2), ?nop, ?nop]}),
"TESTCASE #20: Resource 2 raise Heuristic Commit during rollback. Resource 4 'VoteRollback'. SubCoord 2 crash transient rollback2."),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?nop, ?nop, ?crash_transient(send_forget1), ?nop]}),
"TESTCASE #21: Resource 4 raise Heuristic Mixed during commit. SubCoord 2 crash transient send_forget1."),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?crash_transient(send_forget1), ?nop, ?nop, ?nop]}),
"TESTCASE #22: Resource 4 raise Heuristic Mixed during commit. Root Coord crash transient send_forget1."),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?crash_transient(send_forget3), ?nop, ?crash_transient(send_forget1), ?nop]}),
"TESTCASE #23: Resource 4 raise Heuristic Mixed during commit. Root Coord crash transient send_forget3. SubCoord 3 crash transient send_forget1."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, ?TIMEOUT, {?nop, ?nop, ?nop, ?nop, [?delay_transient(root_delay, ?TIMEOUT*2), ?nop, ?nop, ?nop]}),
"TESTCASE #24: Delay RootCoord. Timeout."),
%% Testing the Terminator.
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, ?TIMEOUT, {?nop, ?prepare_mix, ?nop, ?nop, [?nop, ?nop, ?nop, ?crash_transient(commit_heuristic1)]}),
"TESTCASE #25: Terminator crash transient after received and logged Heuristic mix."),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, ?TIMEOUT, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop, ?nop, ?crash_transient(commit_ok2)]}),
"TESTCASE #26: Terminator crash transient after received and logged 'ok'.");
_ ->
ok
end,
- ?line cosTransactions:stop_factory(TrFac),
- ?line application:stop(cosTransactions),
+ cosTransactions:stop_factory(TrFac),
+ application:stop(cosTransactions),
ok.
%%-----------------------------------------------------------------
@@ -390,8 +381,6 @@ run(TrFac, Time, Spec) ->
catch corba:dispose(O4),
Reply.
-
-
start_resources({A1, A2, A3, A4})->
start_resources({A1, A2, A3, A4, ?no_context});
start_resources({A1, A2, A3, A4, Ctx})->
diff --git a/lib/cosTransactions/vsn.mk b/lib/cosTransactions/vsn.mk
index 3a18cae384..ab163d83c2 100644
--- a/lib/cosTransactions/vsn.mk
+++ b/lib/cosTransactions/vsn.mk
@@ -1 +1 @@
-COSTRANSACTIONS_VSN = 1.3.1
+COSTRANSACTIONS_VSN = 1.3.2
diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile
index 24db75bf91..afe56aa7d6 100644
--- a/lib/crypto/Makefile
+++ b/lib/crypto/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -24,11 +24,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
# Macros
#
-ifneq ($(findstring ose,$(TARGET)),ose)
SUB_DIRECTORIES = src c_src doc/src
-else
-SUB_DIRECTORIES = src doc/src
-endif
static_lib: SUB_DIRECTORIES = c_src
include vsn.mk
diff --git a/lib/crypto/c_src/Makefile.in b/lib/crypto/c_src/Makefile.in
index e66c0ca916..c62f25b3ee 100644
--- a/lib/crypto/c_src/Makefile.in
+++ b/lib/crypto/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -127,12 +127,7 @@ ALL_STATIC_CFLAGS = $(DED_STATIC_CFLAGS) $(INCLUDES)
_create_dirs := $(shell mkdir -p $(OBJDIR) $(LIBDIR))
-ifneq ($(findstring ose,$(TARGET)),ose)
debug opt valgrind: $(NIF_LIB) $(CALLBACK_LIB)
-else
-# Do not build dynamic files on OSE
-debug opt valgrind:
-endif
static_lib: $(NIF_ARCHIVE)
@@ -203,14 +198,12 @@ release_spec: opt
$(INSTALL_DIR) "$(RELSYSDIR)/priv/obj"
$(INSTALL_DIR) "$(RELSYSDIR)/priv/lib"
$(INSTALL_DATA) $(NIF_MAKEFILE) "$(RELSYSDIR)/priv/obj"
-ifneq ($(findstring ose,$(TARGET)),ose)
$(INSTALL_PROGRAM) $(CRYPTO_OBJS) "$(RELSYSDIR)/priv/obj"
$(INSTALL_PROGRAM) $(NIF_LIB) "$(RELSYSDIR)/priv/lib"
ifeq ($(DYNAMIC_CRYPTO_LIB),yes)
$(INSTALL_PROGRAM) $(CALLBACK_OBJS) "$(RELSYSDIR)/priv/obj"
$(INSTALL_PROGRAM) $(CALLBACK_LIB) "$(RELSYSDIR)/priv/lib"
endif
-endif
release_docs_spec:
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c
index 4966701e41..7183c395ae 100644
--- a/lib/crypto/c_src/crypto.c
+++ b/lib/crypto/c_src/crypto.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2010-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2010-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -55,49 +55,72 @@
#include <openssl/evp.h>
#include <openssl/hmac.h>
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+
+/* Helper macro to construct a OPENSSL_VERSION_NUMBER.
+ * See openssl/opensslv.h
+ */
+#define OpenSSL_version(MAJ, MIN, FIX, P) \
+ ((((((((MAJ << 8) | MIN) << 8 ) | FIX) << 8) | (P-'a'+1)) << 4) | 0xf)
+
+#define OpenSSL_version_plain(MAJ, MIN, FIX) \
+ OpenSSL_version(MAJ,MIN,FIX,('a'-1))
+
+
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
#include <openssl/modes.h>
#endif
#include "crypto_callback.h"
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L && !defined(OPENSSL_NO_SHA224) && defined(NID_sha224)\
- && !defined(OPENSSL_NO_SHA256) /* disabled like this in my sha.h (?) */
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \
+ && !defined(OPENSSL_NO_SHA224) && defined(NID_sha224) \
+ && !defined(OPENSSL_NO_SHA256) /* disabled like this in my sha.h (?) */
# define HAVE_SHA224
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L && !defined(OPENSSL_NO_SHA256) && defined(NID_sha256)
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \
+ && !defined(OPENSSL_NO_SHA256) && defined(NID_sha256)
# define HAVE_SHA256
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L && !defined(OPENSSL_NO_SHA384) && defined(NID_sha384)\
- && !defined(OPENSSL_NO_SHA512) /* disabled like this in my sha.h (?) */
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \
+ && !defined(OPENSSL_NO_SHA384) && defined(NID_sha384)\
+ && !defined(OPENSSL_NO_SHA512) /* disabled like this in my sha.h (?) */
# define HAVE_SHA384
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L && !defined(OPENSSL_NO_SHA512) && defined(NID_sha512)
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \
+ && !defined(OPENSSL_NO_SHA512) && defined(NID_sha512)
# define HAVE_SHA512
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x0090705FL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,7,'e')
# define HAVE_DES_ede3_cfb_encrypt
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x009080ffL \
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,8,'o') \
&& !defined(OPENSSL_NO_EC) \
&& !defined(OPENSSL_NO_ECDH) \
&& !defined(OPENSSL_NO_ECDSA)
# define HAVE_EC
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x0090803fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,8,'c')
# define HAVE_AES_IGE
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x1000100fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,1)
+# define HAVE_EVP_AES_CTR
# define HAVE_GCM
+# if OPENSSL_VERSION_NUMBER < OpenSSL_version(1,0,1,'d')
+# define HAVE_GCM_EVP_DECRYPT_BUG
+# endif
#endif
#if defined(NID_chacha20) && !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
# define HAVE_CHACHA20_POLY1305
#endif
+#if OPENSSL_VERSION_NUMBER <= OpenSSL_version(0,9,8,'l')
+# define HAVE_ECB_IVEC_BUG
+#endif
+
#if defined(HAVE_EC)
#include <openssl/ec.h>
#include <openssl/ecdh.h>
@@ -193,72 +216,31 @@ static void unload(ErlNifEnv* env, void* priv_data);
/* The NIFs: */
static ERL_NIF_TERM info_lib(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM algorithms(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md5(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md5_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md5_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md5_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM ripemd160(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM ripemd160_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM ripemd160_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM ripemd160_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha224_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha224_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha224_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha224_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha256_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha256_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha256_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha256_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha384_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha384_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha384_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha384_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha512_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha512_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha512_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha512_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md4_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md4_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md4_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM md5_mac_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha_mac_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha224_mac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha256_mac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha384_mac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM sha512_mac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM hmac_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM hmac_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM hmac_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM des_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM des_cfb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM des_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM des_ede3_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM des_ede3_cfb_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM hash_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM hash_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM hash_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM hmac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM hmac_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM hmac_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM hmac_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM block_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM aes_cfb_8_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM aes_cfb_128_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM aes_ige_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM aes_ctr_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM aes_ctr_stream_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM aes_ctr_stream_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM aes_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM rand_bytes_1(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM strong_rand_bytes_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM rand_bytes_3(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM strong_rand_mpint_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM rand_uniform_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM mod_exp_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM dss_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM rsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM aes_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM aes_ige_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM do_exor(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM rc4_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM rc4_set_key(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM rc4_encrypt_with_state(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM rc2_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM dss_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM rsa_public_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
@@ -270,10 +252,6 @@ static ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_T
static ERL_NIF_TERM srp_value_B_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM srp_user_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM srp_host_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM bf_cfb64_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM bf_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM bf_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
-static ERL_NIF_TERM blowfish_ofb64_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM ec_key_generate(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM ecdsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
@@ -284,6 +262,9 @@ static ERL_NIF_TERM rand_seed_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
static ERL_NIF_TERM aes_gcm_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM aes_gcm_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+#ifdef HAVE_GCM_EVP_DECRYPT_BUG
+static ERL_NIF_TERM aes_gcm_decrypt_NO_EVP(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+#endif
static ERL_NIF_TERM chacha20_poly1305_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM chacha20_poly1305_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
@@ -291,32 +272,7 @@ static ERL_NIF_TERM chacha20_poly1305_decrypt(ErlNifEnv* env, int argc, const ER
/* helpers */
static void init_algorithms_types(ErlNifEnv*);
static void init_digest_types(ErlNifEnv* env);
-static void hmac_md5(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf);
-static void hmac_sha1(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf);
-#ifdef HAVE_SHA224
-static void hmac_sha224(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf);
-#endif
-#ifdef HAVE_SHA256
-static void hmac_sha256(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf);
-#endif
-#ifdef HAVE_SHA384
-static void hmac_sha384(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf);
-#endif
-#ifdef HAVE_SHA512
-static void hmac_sha512(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf);
-#endif
+static void init_cipher_types(ErlNifEnv* env);
#ifdef HAVE_EC
static EC_KEY* ec_key_new(ErlNifEnv* env, ERL_NIF_TERM curve_arg);
static int term2point(ErlNifEnv* env, ERL_NIF_TERM term,
@@ -328,75 +284,36 @@ static int library_refc = 0; /* number of users of this dynamic library */
static ErlNifFunc nif_funcs[] = {
{"info_lib", 0, info_lib},
{"algorithms", 0, algorithms},
- {"md5", 1, md5},
- {"md5_init", 0, md5_init},
- {"md5_update", 2, md5_update},
- {"md5_final", 1, md5_final},
- {"ripemd160", 1, ripemd160},
- {"ripemd160_init", 0, ripemd160_init},
- {"ripemd160_update", 2, ripemd160_update},
- {"ripemd160_final", 1, ripemd160_final},
- {"sha", 1, sha},
- {"sha_init", 0, sha_init},
- {"sha_update", 2, sha_update},
- {"sha_final", 1, sha_final},
- {"sha224_nif", 1, sha224_nif},
- {"sha224_init_nif", 0, sha224_init_nif},
- {"sha224_update_nif", 2, sha224_update_nif},
- {"sha224_final_nif", 1, sha224_final_nif},
- {"sha256_nif", 1, sha256_nif},
- {"sha256_init_nif", 0, sha256_init_nif},
- {"sha256_update_nif", 2, sha256_update_nif},
- {"sha256_final_nif", 1, sha256_final_nif},
- {"sha384_nif", 1, sha384_nif},
- {"sha384_init_nif", 0, sha384_init_nif},
- {"sha384_update_nif", 2, sha384_update_nif},
- {"sha384_final_nif", 1, sha384_final_nif},
- {"sha512_nif", 1, sha512_nif},
- {"sha512_init_nif", 0, sha512_init_nif},
- {"sha512_update_nif", 2, sha512_update_nif},
- {"sha512_final_nif", 1, sha512_final_nif},
- {"md4", 1, md4},
- {"md4_init", 0, md4_init},
- {"md4_update", 2, md4_update},
- {"md4_final", 1, md4_final},
- {"md5_mac_n", 3, md5_mac_n},
- {"sha_mac_n", 3, sha_mac_n},
- {"sha224_mac_nif", 3, sha224_mac_nif},
- {"sha256_mac_nif", 3, sha256_mac_nif},
- {"sha384_mac_nif", 3, sha384_mac_nif},
- {"sha512_mac_nif", 3, sha512_mac_nif},
- {"hmac_init", 2, hmac_init},
- {"hmac_update", 2, hmac_update},
- {"hmac_final", 1, hmac_final},
- {"hmac_final_n", 2, hmac_final},
- {"des_cbc_crypt", 4, des_cbc_crypt},
- {"des_cfb_crypt", 4, des_cfb_crypt},
- {"des_ecb_crypt", 3, des_ecb_crypt},
- {"des_ede3_cbc_crypt", 6, des_ede3_cbc_crypt},
- {"des_ede3_cfb_crypt_nif", 6, des_ede3_cfb_crypt_nif},
- {"aes_cfb_8_crypt", 4, aes_cfb_8_crypt},
- {"aes_cfb_128_crypt", 4, aes_cfb_128_crypt},
+ {"hash_nif", 2, hash_nif},
+ {"hash_init_nif", 1, hash_init_nif},
+ {"hash_update_nif", 2, hash_update_nif},
+ {"hash_final_nif", 1, hash_final_nif},
+ {"hmac_nif", 3, hmac_nif},
+ {"hmac_nif", 4, hmac_nif},
+ {"hmac_init_nif", 2, hmac_init_nif},
+ {"hmac_update_nif", 2, hmac_update_nif},
+ {"hmac_final_nif", 1, hmac_final_nif},
+ {"hmac_final_nif", 2, hmac_final_nif},
+ {"block_crypt_nif", 5, block_crypt_nif},
+ {"block_crypt_nif", 4, block_crypt_nif},
+ {"aes_ige_crypt_nif", 4, aes_ige_crypt_nif},
+
{"aes_ctr_encrypt", 3, aes_ctr_encrypt},
{"aes_ctr_decrypt", 3, aes_ctr_encrypt},
+ {"aes_ctr_stream_init", 2, aes_ctr_stream_init},
{"aes_ctr_stream_encrypt", 2, aes_ctr_stream_encrypt},
{"aes_ctr_stream_decrypt", 2, aes_ctr_stream_encrypt},
- {"aes_ecb_crypt", 3, aes_ecb_crypt},
{"rand_bytes", 1, rand_bytes_1},
{"strong_rand_bytes_nif", 1, strong_rand_bytes_nif},
- {"rand_bytes", 3, rand_bytes_3},
{"strong_rand_mpint_nif", 3, strong_rand_mpint_nif},
{"rand_uniform_nif", 2, rand_uniform_nif},
{"mod_exp_nif", 4, mod_exp_nif},
{"dss_verify_nif", 4, dss_verify_nif},
{"rsa_verify_nif", 4, rsa_verify_nif},
- {"aes_cbc_crypt", 4, aes_cbc_crypt},
- {"aes_ige_crypt_nif", 4, aes_ige_crypt_nif},
{"do_exor", 2, do_exor},
{"rc4_encrypt", 2, rc4_encrypt},
{"rc4_set_key", 1, rc4_set_key},
{"rc4_encrypt_with_state", 2, rc4_encrypt_with_state},
- {"rc2_cbc_crypt", 4, rc2_cbc_crypt},
{"rsa_sign_nif", 3, rsa_sign_nif},
{"dss_sign_nif", 3, dss_sign_nif},
{"rsa_public_crypt", 4, rsa_public_crypt},
@@ -408,10 +325,6 @@ static ErlNifFunc nif_funcs[] = {
{"srp_value_B_nif", 5, srp_value_B_nif},
{"srp_user_secret_nif", 7, srp_user_secret_nif},
{"srp_host_secret_nif", 5, srp_host_secret_nif},
- {"bf_cfb64_crypt", 4, bf_cfb64_crypt},
- {"bf_cbc_crypt", 4, bf_cbc_crypt},
- {"bf_ecb_crypt", 3, bf_ecb_crypt},
- {"blowfish_ofb64_encrypt", 3, blowfish_ofb64_encrypt},
{"ec_key_generate", 2, ec_key_generate},
{"ecdsa_sign_nif", 4, ecdsa_sign_nif},
@@ -420,7 +333,7 @@ static ErlNifFunc nif_funcs[] = {
{"rand_seed_nif", 1, rand_seed_nif},
- {"aes_gcm_encrypt", 4, aes_gcm_encrypt},
+ {"aes_gcm_encrypt", 5, aes_gcm_encrypt},
{"aes_gcm_decrypt", 5, aes_gcm_decrypt},
{"chacha20_poly1305_encrypt", 4, chacha20_poly1305_encrypt},
@@ -432,37 +345,14 @@ static ErlNifFunc nif_funcs[] = {
ERL_NIF_INIT(crypto,nif_funcs,load,NULL,upgrade,unload)
-#define MD5_CTX_LEN (sizeof(MD5_CTX))
-#define MD5_LEN 16
-#define MD5_LEN_96 12
-#define MD4_CTX_LEN (sizeof(MD4_CTX))
-#define MD4_LEN 16
+#define MD5_CTX_LEN (sizeof(MD5_CTX))
+#define MD4_CTX_LEN (sizeof(MD4_CTX))
#define RIPEMD160_CTX_LEN (sizeof(RIPEMD160_CTX))
-#define RIPEMD160_LEN 20
-#define SHA_CTX_LEN (sizeof(SHA_CTX))
-#define SHA_LEN 20
-#define SHA_LEN_96 12
-#define SHA224_LEN (224/8)
-#define SHA256_LEN (256/8)
-#define SHA384_LEN (384/8)
-#define SHA512_LEN (512/8)
-#define HMAC_INT_LEN 64
-#define HMAC_INT2_LEN 128
-
-#define HMAC_IPAD 0x36
-#define HMAC_OPAD 0x5c
static ERL_NIF_TERM atom_true;
static ERL_NIF_TERM atom_false;
static ERL_NIF_TERM atom_sha;
-static ERL_NIF_TERM atom_sha224;
-static ERL_NIF_TERM atom_sha256;
-static ERL_NIF_TERM atom_sha384;
-static ERL_NIF_TERM atom_sha512;
-static ERL_NIF_TERM atom_md5;
-static ERL_NIF_TERM atom_md4;
-static ERL_NIF_TERM atom_ripemd160;
static ERL_NIF_TERM atom_error;
static ERL_NIF_TERM atom_rsa_pkcs1_padding;
static ERL_NIF_TERM atom_rsa_pkcs1_oaep_padding;
@@ -489,6 +379,14 @@ static ERL_NIF_TERM atom_ppbasis;
static ERL_NIF_TERM atom_onbasis;
#endif
+static ERL_NIF_TERM atom_aes_cfb8;
+static ERL_NIF_TERM atom_aes_cfb128;
+#ifdef HAVE_ECB_IVEC_BUG
+static ERL_NIF_TERM atom_aes_ecb;
+static ERL_NIF_TERM atom_des_ecb;
+static ERL_NIF_TERM atom_blowfish_ecb;
+#endif
+
static ErlNifResourceType* hmac_context_rtype;
struct hmac_context
{
@@ -498,6 +396,101 @@ struct hmac_context
};
static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context*);
+struct digest_type_t {
+ union {
+ const char* str; /* before init, NULL for end-of-table */
+ ERL_NIF_TERM atom; /* after init, 'false' for end-of-table */
+ }type;
+ union {
+ const EVP_MD* (*funcp)(void); /* before init, NULL if notsup */
+ const EVP_MD* p; /* after init, NULL if notsup */
+ }md;
+};
+
+struct digest_type_t digest_types[] =
+{
+ {{"md4"}, {&EVP_md4}},
+ {{"md5"}, {&EVP_md5}},
+ {{"ripemd160"}, {&EVP_ripemd160}},
+ {{"sha"}, {&EVP_sha1}},
+ {{"sha224"},
+#ifdef HAVE_SHA224
+ {&EVP_sha224}
+#else
+ {NULL}
+#endif
+ },
+ {{"sha256"},
+#ifdef HAVE_SHA256
+ {&EVP_sha256}
+#else
+ {NULL}
+#endif
+ },
+ {{"sha384"},
+#ifdef HAVE_SHA384
+ {&EVP_sha384}
+#else
+ {NULL}
+#endif
+ },
+ {{"sha512"},
+#ifdef HAVE_SHA512
+ {&EVP_sha512}
+#else
+ {NULL}
+#endif
+ },
+ {{NULL}}
+};
+
+static struct digest_type_t* get_digest_type(ERL_NIF_TERM type);
+
+struct cipher_type_t {
+ union {
+ const char* str; /* before init */
+ ERL_NIF_TERM atom; /* after init */
+ }type;
+ union {
+ const EVP_CIPHER* (*funcp)(void); /* before init, NULL if notsup */
+ const EVP_CIPHER* p; /* after init, NULL if notsup */
+ }cipher;
+ const size_t key_len; /* != 0 to also match on key_len */
+};
+
+struct cipher_type_t cipher_types[] =
+{
+ {{"rc2_cbc"}, {&EVP_rc2_cbc}},
+ {{"des_cbc"}, {&EVP_des_cbc}},
+ {{"des_cfb"}, {&EVP_des_cfb8}},
+ {{"des_ecb"}, {&EVP_des_ecb}},
+ {{"des_ede3_cbc"}, {&EVP_des_ede3_cbc}},
+ {{"des_ede3_cbf"},
+#ifdef HAVE_DES_ede3_cfb_encrypt
+ {&EVP_des_ede3_cfb8}
+#else
+ {NULL}
+#endif
+ },
+ {{"blowfish_cbc"}, {&EVP_bf_cbc}},
+ {{"blowfish_cfb64"}, {&EVP_bf_cfb64}},
+ {{"blowfish_ofb64"}, {&EVP_bf_ofb}},
+ {{"blowfish_ecb"}, {&EVP_bf_ecb}},
+ {{"aes_cbc"}, {&EVP_aes_128_cbc}, 16},
+ {{"aes_cbc"}, {&EVP_aes_192_cbc}, 24},
+ {{"aes_cbc"}, {&EVP_aes_256_cbc}, 32},
+ {{"aes_cbc128"}, {&EVP_aes_128_cbc}},
+ {{"aes_cbc256"}, {&EVP_aes_256_cbc}},
+ {{"aes_cfb8"}, {&EVP_aes_128_cfb8}},
+ {{"aes_cfb128"}, {&EVP_aes_128_cfb128}},
+ {{"aes_ecb"}, {&EVP_aes_128_ecb}, 16},
+ {{"aes_ecb"}, {&EVP_aes_192_ecb}, 24},
+ {{"aes_ecb"}, {&EVP_aes_256_ecb}, 32},
+ {{NULL}}
+};
+
+static struct cipher_type_t* get_cipher_type(ERL_NIF_TERM type, size_t key_len);
+
/*
#define PRINTF_ERR0(FMT) enif_fprintf(stderr, FMT "\n")
#define PRINTF_ERR1(FMT, A1) enif_fprintf(stderr, FMT "\n", A1)
@@ -507,47 +500,21 @@ static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context*);
#define PRINTF_ERR1(FMT,A1)
#define PRINTF_ERR2(FMT,A1,A2)
-#ifdef __OSE__
-
-/* For crypto on OSE we have to initialize the crypto library on each
- process that uses it. So since we do not know which scheduler is going
- to execute the nif we have to check before each nif call that we have
- initialized crypto in that process. */
-
-#include "ose.h"
-#include "openssl/osessl.h"
-
-static ErlNifTSDKey crypto_init_key;
-static int check_ose_crypto(void);
-static int init_ose_crypto(void);
-
-static int check_ose_crypto() {
- int key = (int)enif_tsd_get(crypto_init_key);
- if (!key) {
- if (!CRYPTO_OSE5_init()) {
- PRINTF_ERR0("CRYPTO: Call to CRYPTO_OSE5_init failed");
- return 0;
- }
- enif_tsd_set(crypto_init_key,1);
- }
- return 1;
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
+/* Define resource types for OpenSSL context structures. */
+static ErlNifResourceType* evp_md_ctx_rtype;
+static void evp_md_ctx_dtor(ErlNifEnv* env, EVP_MD_CTX* ctx) {
+ EVP_MD_CTX_cleanup(ctx);
}
+#endif
-static int init_ose_crypto() {
- /* Crypto nif upgrade does not work on OSE so no need to
- destroy this key */
- enif_tsd_key_create("crypto_init_key", &crypto_init_key);
- return check_ose_crypto();
+#ifdef HAVE_EVP_AES_CTR
+static ErlNifResourceType* evp_cipher_ctx_rtype;
+static void evp_cipher_ctx_dtor(ErlNifEnv* env, EVP_CIPHER_CTX* ctx) {
+ EVP_CIPHER_CTX_cleanup(ctx);
}
-
-#define INIT_OSE_CRYPTO() init_ose_crypto()
-#define CHECK_OSE_CRYPTO() check_ose_crypto()
-#else
-#define INIT_OSE_CRYPTO() 1
-#define CHECK_OSE_CRYPTO()
#endif
-
static int verify_lib_version(void)
{
const unsigned long libv = SSLeay();
@@ -563,7 +530,6 @@ static int verify_lib_version(void)
return 1;
}
-
#ifdef HAVE_DYNAMIC_CRYPTO_LIB
# if defined(DEBUG)
@@ -599,7 +565,9 @@ static void error_handler(void* null, const char* errstr)
static int init(ErlNifEnv* env, ERL_NIF_TERM load_info)
{
+#ifdef OPENSSL_THREADS
ErlNifSysInfo sys_info;
+#endif
get_crypto_callbacks_t* funcp;
struct crypto_callbacks* ccb;
int nlocks = 0;
@@ -609,9 +577,6 @@ static int init(ErlNifEnv* env, ERL_NIF_TERM load_info)
ErlNifBinary lib_bin;
char lib_buf[1000];
- if (!INIT_OSE_CRYPTO())
- return 0;
-
if (!verify_lib_version())
return 0;
@@ -634,7 +599,26 @@ static int init(ErlNifEnv* env, ERL_NIF_TERM load_info)
PRINTF_ERR0("CRYPTO: Could not open resource type 'hmac_context'");
return 0;
}
-
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
+ evp_md_ctx_rtype = enif_open_resource_type(env, NULL, "EVP_MD_CTX",
+ (ErlNifResourceDtor*) evp_md_ctx_dtor,
+ ERL_NIF_RT_CREATE|ERL_NIF_RT_TAKEOVER,
+ NULL);
+ if (!evp_md_ctx_rtype) {
+ PRINTF_ERR0("CRYPTO: Could not open resource type 'EVP_MD_CTX'");
+ return 0;
+ }
+#endif
+#ifdef HAVE_EVP_AES_CTR
+ evp_cipher_ctx_rtype = enif_open_resource_type(env, NULL, "EVP_CIPHER_CTX",
+ (ErlNifResourceDtor*) evp_cipher_ctx_dtor,
+ ERL_NIF_RT_CREATE|ERL_NIF_RT_TAKEOVER,
+ NULL);
+ if (!evp_cipher_ctx_rtype) {
+ PRINTF_ERR0("CRYPTO: Could not open resource type 'EVP_CIPHER_CTX'");
+ return 0;
+ }
+#endif
if (library_refc > 0) {
/* Repeated loading of this library (module upgrade).
* Atoms and callbacks are already set, we are done.
@@ -642,16 +626,9 @@ static int init(ErlNifEnv* env, ERL_NIF_TERM load_info)
return 1;
}
- atom_true = enif_make_atom(env,"true");
+ atom_true = enif_make_atom(env,"true");
atom_false = enif_make_atom(env,"false");
atom_sha = enif_make_atom(env,"sha");
- atom_sha224 = enif_make_atom(env,"sha224");
- atom_sha256 = enif_make_atom(env,"sha256");
- atom_sha384 = enif_make_atom(env,"sha384");
- atom_sha512 = enif_make_atom(env,"sha512");
- atom_md4 = enif_make_atom(env,"md4");
- atom_md5 = enif_make_atom(env,"md5");
- atom_ripemd160 = enif_make_atom(env,"ripemd160");
atom_error = enif_make_atom(env,"error");
atom_rsa_pkcs1_padding = enif_make_atom(env,"rsa_pkcs1_padding");
atom_rsa_pkcs1_oaep_padding = enif_make_atom(env,"rsa_pkcs1_oaep_padding");
@@ -676,8 +653,16 @@ static int init(ErlNifEnv* env, ERL_NIF_TERM load_info)
atom_ppbasis = enif_make_atom(env,"ppbasis");
atom_onbasis = enif_make_atom(env,"onbasis");
#endif
+ atom_aes_cfb8 = enif_make_atom(env, "aes_cfb8");
+ atom_aes_cfb128 = enif_make_atom(env, "aes_cfb128");
+#ifdef HAVE_ECB_IVEC_BUG
+ atom_aes_ecb = enif_make_atom(env, "aes_ecb");
+ atom_des_ecb = enif_make_atom(env, "des_ecb");
+ atom_blowfish_ecb = enif_make_atom(env, "blowfish_ecb");
+#endif
init_digest_types(env);
+ init_cipher_types(env);
init_algorithms_types(env);
#ifdef HAVE_DYNAMIC_CRYPTO_LIB
@@ -762,46 +747,67 @@ static void unload(ErlNifEnv* env, void* priv_data)
static int algo_hash_cnt;
static ERL_NIF_TERM algo_hash[8]; /* increase when extending the list */
static int algo_pubkey_cnt;
-static ERL_NIF_TERM algo_pubkey[3]; /* increase when extending the list */
+static ERL_NIF_TERM algo_pubkey[7]; /* increase when extending the list */
static int algo_cipher_cnt;
-static ERL_NIF_TERM algo_cipher[4]; /* increase when extending the list */
+static ERL_NIF_TERM algo_cipher[20]; /* increase when extending the list */
static void init_algorithms_types(ErlNifEnv* env)
{
algo_hash_cnt = 0;
- algo_hash[algo_hash_cnt++] = atom_md4;
- algo_hash[algo_hash_cnt++] = atom_md5;
algo_hash[algo_hash_cnt++] = atom_sha;
- algo_hash[algo_hash_cnt++] = atom_ripemd160;
#ifdef HAVE_SHA224
- algo_hash[algo_hash_cnt++] = atom_sha224;
+ algo_hash[algo_hash_cnt++] = enif_make_atom(env, "sha224");
#endif
#ifdef HAVE_SHA256
- algo_hash[algo_hash_cnt++] = atom_sha256;
+ algo_hash[algo_hash_cnt++] = enif_make_atom(env, "sha256");
#endif
#ifdef HAVE_SHA384
- algo_hash[algo_hash_cnt++] = atom_sha384;
+ algo_hash[algo_hash_cnt++] = enif_make_atom(env, "sha384");
#endif
#ifdef HAVE_SHA512
- algo_hash[algo_hash_cnt++] = atom_sha512;
+ algo_hash[algo_hash_cnt++] = enif_make_atom(env, "sha512");
#endif
+ algo_hash[algo_hash_cnt++] = enif_make_atom(env, "md4");
+ algo_hash[algo_hash_cnt++] = enif_make_atom(env, "md5");
+ algo_hash[algo_hash_cnt++] = enif_make_atom(env, "ripemd160");
algo_pubkey_cnt = 0;
+ algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env, "rsa");
+ algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env, "dss");
+ algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env, "dh");
#if defined(HAVE_EC)
#if !defined(OPENSSL_NO_EC2M)
- algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env,"ec_gf2m");
+ algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env, "ec_gf2m");
#endif
- algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env,"ecdsa");
- algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env,"ecdh");
+ algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env, "ecdsa");
+ algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env, "ecdh");
#endif
+ algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env, "srp");
algo_cipher_cnt = 0;
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "des3_cbc");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "des_ede3");
#ifdef HAVE_DES_ede3_cfb_encrypt
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "des3_cbf");
#endif
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_cbc");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_cbc128");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_cfb8");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_cfb128");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_cbc256");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_ctr");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_ecb");
#ifdef HAVE_AES_IGE
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"aes_ige256");
#endif
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"des_cbc");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"des_cfb");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"blowfish_cbc");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"blowfish_cfb64");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"blowfish_ofb64");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"blowfish_ecb");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"rc2_cbc");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"rc4");
#if defined(HAVE_GCM)
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"aes_gcm");
#endif
@@ -816,10 +822,13 @@ static void init_algorithms_types(ErlNifEnv* env)
static ERL_NIF_TERM algorithms(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
+ int hash_cnt = algo_hash_cnt;
+ int pubkey_cnt = algo_pubkey_cnt;
+ int cipher_cnt = algo_cipher_cnt;
return enif_make_tuple3(env,
- enif_make_list_from_array(env, algo_hash, algo_hash_cnt),
- enif_make_list_from_array(env, algo_pubkey, algo_pubkey_cnt),
- enif_make_list_from_array(env, algo_cipher, algo_cipher_cnt));
+ enif_make_list_from_array(env, algo_hash, hash_cnt),
+ enif_make_list_from_array(env, algo_pubkey, pubkey_cnt),
+ enif_make_list_from_array(env, algo_cipher, cipher_cnt));
}
static ERL_NIF_TERM info_lib(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
@@ -849,601 +858,392 @@ static ERL_NIF_TERM info_lib(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
ver_term));
}
-static ERL_NIF_TERM md5(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Data) */
- ErlNifBinary ibin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
+static ERL_NIF_TERM make_badarg_maybe(ErlNifEnv* env)
+{
+ ERL_NIF_TERM reason;
+ if (enif_has_pending_exception(env, &reason))
+ return reason; /* dummy return value ignored */
+ else
return enif_make_badarg(env);
- }
- MD5((unsigned char *) ibin.data, ibin.size,
- enif_make_new_binary(env,MD5_LEN, &ret));
- CONSUME_REDS(env,ibin);
- return ret;
}
-static ERL_NIF_TERM md5_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* () */
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- MD5_Init((MD5_CTX *) enif_make_new_binary(env, MD5_CTX_LEN, &ret));
- return ret;
-}
-static ERL_NIF_TERM md5_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context, Data) */
- MD5_CTX* new_ctx;
- ErlNifBinary ctx_bin, data_bin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin)
- || ctx_bin.size != MD5_CTX_LEN
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
+
+static ERL_NIF_TERM hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Type, Data) */
+ struct digest_type_t *digp = NULL;
+ const EVP_MD *md;
+ ErlNifBinary data;
+ ERL_NIF_TERM ret;
+ unsigned ret_size;
+
+ digp = get_digest_type(argv[0]);
+ if (!digp ||
+ !enif_inspect_iolist_as_binary(env, argv[1], &data)) {
return enif_make_badarg(env);
}
- new_ctx = (MD5_CTX*) enif_make_new_binary(env,MD5_CTX_LEN, &ret);
- memcpy(new_ctx, ctx_bin.data, MD5_CTX_LEN);
- MD5_Update(new_ctx, data_bin.data, data_bin.size);
- CONSUME_REDS(env,data_bin);
- return ret;
-}
-static ERL_NIF_TERM md5_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context) */
- ErlNifBinary ctx_bin;
- MD5_CTX ctx_clone;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != MD5_CTX_LEN) {
- return enif_make_badarg(env);
+ md = digp->md.p;
+ if (!md) {
+ return atom_notsup;
}
- memcpy(&ctx_clone, ctx_bin.data, MD5_CTX_LEN); /* writable */
- MD5_Final(enif_make_new_binary(env, MD5_LEN, &ret), &ctx_clone);
- return ret;
-}
-static ERL_NIF_TERM ripemd160(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Data) */
- ErlNifBinary ibin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
- return enif_make_badarg(env);
+ ret_size = (unsigned)EVP_MD_size(md);
+ ASSERT(0 < ret_size && ret_size <= EVP_MAX_MD_SIZE);
+ if (!EVP_Digest(data.data, data.size,
+ enif_make_new_binary(env, ret_size, &ret), &ret_size,
+ md, NULL)) {
+ return atom_notsup;
}
- RIPEMD160((unsigned char *) ibin.data, ibin.size,
- enif_make_new_binary(env,RIPEMD160_LEN, &ret));
- CONSUME_REDS(env,ibin);
- return ret;
-}
-static ERL_NIF_TERM ripemd160_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* () */
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- RIPEMD160_Init((RIPEMD160_CTX *) enif_make_new_binary(env, RIPEMD160_CTX_LEN, &ret));
+ ASSERT(ret_size == (unsigned)EVP_MD_size(md));
+
+ CONSUME_REDS(env, data);
return ret;
}
-static ERL_NIF_TERM ripemd160_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context, Data) */
- RIPEMD160_CTX* new_ctx;
- ErlNifBinary ctx_bin, data_bin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin)
- || ctx_bin.size != RIPEMD160_CTX_LEN
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
+
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
+
+static ERL_NIF_TERM hash_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Type) */
+ struct digest_type_t *digp = NULL;
+ EVP_MD_CTX *ctx;
+ ERL_NIF_TERM ret;
+
+ digp = get_digest_type(argv[0]);
+ if (!digp) {
return enif_make_badarg(env);
}
- new_ctx = (RIPEMD160_CTX*) enif_make_new_binary(env,RIPEMD160_CTX_LEN, &ret);
- memcpy(new_ctx, ctx_bin.data, RIPEMD160_CTX_LEN);
- RIPEMD160_Update(new_ctx, data_bin.data, data_bin.size);
- CONSUME_REDS(env, data_bin);
- return ret;
-}
-static ERL_NIF_TERM ripemd160_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context) */
- ErlNifBinary ctx_bin;
- RIPEMD160_CTX ctx_clone;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != RIPEMD160_CTX_LEN) {
- return enif_make_badarg(env);
+ if (!digp->md.p) {
+ return atom_notsup;
}
- memcpy(&ctx_clone, ctx_bin.data, RIPEMD160_CTX_LEN); /* writable */
- RIPEMD160_Final(enif_make_new_binary(env, RIPEMD160_LEN, &ret), &ctx_clone);
- return ret;
-}
-
-static ERL_NIF_TERM sha(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Data) */
- ErlNifBinary ibin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
- return enif_make_badarg(env);
+ ctx = enif_alloc_resource(evp_md_ctx_rtype, sizeof(EVP_MD_CTX));
+ if (!EVP_DigestInit(ctx, digp->md.p)) {
+ enif_release_resource(ctx);
+ return atom_notsup;
}
- SHA1((unsigned char *) ibin.data, ibin.size,
- enif_make_new_binary(env,SHA_LEN, &ret));
- CONSUME_REDS(env,ibin);
+ ret = enif_make_resource(env, ctx);
+ enif_release_resource(ctx);
return ret;
}
-static ERL_NIF_TERM sha_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* () */
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- SHA1_Init((SHA_CTX *) enif_make_new_binary(env, SHA_CTX_LEN, &ret));
- return ret;
-}
-static ERL_NIF_TERM sha_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+static ERL_NIF_TERM hash_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Context, Data) */
- SHA_CTX* new_ctx;
- ErlNifBinary ctx_bin, data_bin;
+ EVP_MD_CTX *ctx, *new_ctx;
+ ErlNifBinary data;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != SHA_CTX_LEN
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
- return enif_make_badarg(env);
+
+ if (!enif_get_resource(env, argv[0], evp_md_ctx_rtype, (void**)&ctx) ||
+ !enif_inspect_iolist_as_binary(env, argv[1], &data)) {
+ return enif_make_badarg(env);
}
- new_ctx = (SHA_CTX*) enif_make_new_binary(env,SHA_CTX_LEN, &ret);
- memcpy(new_ctx, ctx_bin.data, SHA_CTX_LEN);
- SHA1_Update(new_ctx, data_bin.data, data_bin.size);
- CONSUME_REDS(env,data_bin);
+
+ new_ctx = enif_alloc_resource(evp_md_ctx_rtype, sizeof(EVP_MD_CTX));
+ if (!EVP_MD_CTX_copy(new_ctx, ctx) ||
+ !EVP_DigestUpdate(new_ctx, data.data, data.size)) {
+ enif_release_resource(new_ctx);
+ return atom_notsup;
+ }
+
+ ret = enif_make_resource(env, new_ctx);
+ enif_release_resource(new_ctx);
+ CONSUME_REDS(env, data);
return ret;
}
-static ERL_NIF_TERM sha_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+static ERL_NIF_TERM hash_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Context) */
- ErlNifBinary ctx_bin;
- SHA_CTX ctx_clone;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != SHA_CTX_LEN) {
- return enif_make_badarg(env);
+ EVP_MD_CTX *ctx, new_ctx;
+ ERL_NIF_TERM ret;
+ unsigned ret_size;
+
+ if (!enif_get_resource(env, argv[0], evp_md_ctx_rtype, (void**)&ctx)) {
+ return enif_make_badarg(env);
}
- memcpy(&ctx_clone, ctx_bin.data, SHA_CTX_LEN); /* writable */
- SHA1_Final(enif_make_new_binary(env, SHA_LEN, &ret), &ctx_clone);
- return ret;
-}
-static ERL_NIF_TERM sha224_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Data) */
-#ifdef HAVE_SHA224
- ErlNifBinary ibin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
- return enif_make_badarg(env);
+ ret_size = (unsigned)EVP_MD_CTX_size(ctx);
+ ASSERT(0 < ret_size && ret_size <= EVP_MAX_MD_SIZE);
+
+ if (!EVP_MD_CTX_copy(&new_ctx, ctx) ||
+ !EVP_DigestFinal(&new_ctx,
+ enif_make_new_binary(env, ret_size, &ret),
+ &ret_size)) {
+ return atom_notsup;
}
- SHA224((unsigned char *) ibin.data, ibin.size,
- enif_make_new_binary(env,SHA224_LEN, &ret));
- CONSUME_REDS(env,ibin);
- return ret;
-#else
- return atom_notsup;
-#endif
-}
-static ERL_NIF_TERM sha224_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* () */
-#ifdef HAVE_SHA224
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- SHA224_Init((SHA256_CTX *) enif_make_new_binary(env, sizeof(SHA256_CTX), &ret));
+ ASSERT(ret_size == (unsigned)EVP_MD_CTX_size(ctx));
+
return ret;
-#else
- return atom_notsup;
-#endif
}
-static ERL_NIF_TERM sha224_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context, Data) */
-#ifdef HAVE_SHA224
- SHA256_CTX* new_ctx;
- ErlNifBinary ctx_bin, data_bin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != sizeof(SHA256_CTX)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
+
+#else /* if OPENSSL_VERSION_NUMBER < 1.0 */
+
+static ERL_NIF_TERM hash_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Type) */
+ typedef int (*init_fun)(unsigned char*);
+ struct digest_type_t *digp = NULL;
+ ERL_NIF_TERM ctx;
+ size_t ctx_size = 0;
+ init_fun ctx_init = 0;
+
+ digp = get_digest_type(argv[0]);
+ if (!digp) {
return enif_make_badarg(env);
}
- new_ctx = (SHA256_CTX*) enif_make_new_binary(env,sizeof(SHA256_CTX), &ret);
- memcpy(new_ctx, ctx_bin.data, sizeof(SHA256_CTX));
- SHA224_Update(new_ctx, data_bin.data, data_bin.size);
- CONSUME_REDS(env,data_bin);
- return ret;
-#else
- return atom_notsup;
-#endif
-}
-static ERL_NIF_TERM sha224_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context) */
-#ifdef HAVE_SHA224
- ErlNifBinary ctx_bin;
- SHA256_CTX ctx_clone;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != sizeof(SHA256_CTX)) {
- return enif_make_badarg(env);
+ if (!digp->md.p) {
+ return atom_notsup;
}
- memcpy(&ctx_clone, ctx_bin.data, sizeof(SHA256_CTX)); /* writable */
- SHA224_Final(enif_make_new_binary(env, SHA224_LEN, &ret), &ctx_clone);
- return ret;
-#else
- return atom_notsup;
-#endif
-}
-static ERL_NIF_TERM sha256_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Data) */
-#ifdef HAVE_SHA256
- ErlNifBinary ibin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
- return enif_make_badarg(env);
- }
- SHA256((unsigned char *) ibin.data, ibin.size,
- enif_make_new_binary(env,SHA256_LEN, &ret));
- CONSUME_REDS(env,ibin);
- return ret;
-#else
- return atom_notsup;
+ switch (EVP_MD_type(digp->md.p))
+ {
+ case NID_md4:
+ ctx_size = MD4_CTX_LEN;
+ ctx_init = (init_fun)(&MD4_Init);
+ break;
+ case NID_md5:
+ ctx_size = MD5_CTX_LEN;
+ ctx_init = (init_fun)(&MD5_Init);
+ break;
+ case NID_ripemd160:
+ ctx_size = RIPEMD160_CTX_LEN;
+ ctx_init = (init_fun)(&RIPEMD160_Init);
+ break;
+ case NID_sha1:
+ ctx_size = sizeof(SHA_CTX);
+ ctx_init = (init_fun)(&SHA1_Init);
+ break;
+#ifdef HAVE_SHA224
+ case NID_sha224:
+ ctx_size = sizeof(SHA256_CTX);
+ ctx_init = (init_fun)(&SHA224_Init);
+ break;
#endif
-}
-static ERL_NIF_TERM sha256_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* () */
#ifdef HAVE_SHA256
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- SHA256_Init((SHA256_CTX *) enif_make_new_binary(env, sizeof(SHA256_CTX), &ret));
- return ret;
-#else
- return atom_notsup;
+ case NID_sha256:
+ ctx_size = sizeof(SHA256_CTX);
+ ctx_init = (init_fun)(&SHA256_Init);
+ break;
#endif
-}
-static ERL_NIF_TERM sha256_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context, Data) */
-#ifdef HAVE_SHA256
- SHA256_CTX* new_ctx;
- ErlNifBinary ctx_bin, data_bin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != sizeof(SHA256_CTX)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
- return enif_make_badarg(env);
+#ifdef HAVE_SHA384
+ case NID_sha384:
+ ctx_size = sizeof(SHA512_CTX);
+ ctx_init = (init_fun)(&SHA384_Init);
+ break;
+#endif
+#ifdef HAVE_SHA512
+ case NID_sha512:
+ ctx_size = sizeof(SHA512_CTX);
+ ctx_init = (init_fun)(&SHA512_Init);
+ break;
+#endif
+ default:
+ return atom_notsup;
+ }
+ ASSERT(ctx_size);
+ ASSERT(ctx_init);
+
+ ctx_init(enif_make_new_binary(env, ctx_size, &ctx));
+ return enif_make_tuple2(env, argv[0], ctx);
+}
+static ERL_NIF_TERM hash_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* ({Type, Context}, Data) */
+ typedef int (*update_fun)(unsigned char*, const unsigned char*, size_t);
+ ERL_NIF_TERM new_ctx;
+ ErlNifBinary ctx, data;
+ const ERL_NIF_TERM *tuple;
+ int arity;
+ struct digest_type_t *digp = NULL;
+ unsigned char *ctx_buff;
+ size_t ctx_size = 0;
+ update_fun ctx_update = 0;
+
+ if (!enif_get_tuple(env, argv[0], &arity, &tuple) ||
+ arity != 2 ||
+ !(digp = get_digest_type(tuple[0])) ||
+ !enif_inspect_binary(env, tuple[1], &ctx) ||
+ !enif_inspect_iolist_as_binary(env, argv[1], &data)) {
+ return enif_make_badarg(env);
}
- new_ctx = (SHA256_CTX*) enif_make_new_binary(env,sizeof(SHA256_CTX), &ret);
- memcpy(new_ctx, ctx_bin.data, sizeof(SHA256_CTX));
- SHA256_Update(new_ctx, data_bin.data, data_bin.size);
- CONSUME_REDS(env,data_bin);
- return ret;
-#else
- return atom_notsup;
+ if (!digp->md.p) {
+ return atom_notsup;
+ }
+
+ switch (EVP_MD_type(digp->md.p))
+ {
+ case NID_md4:
+ ctx_size = MD4_CTX_LEN;
+ ctx_update = (update_fun)(&MD4_Update);
+ break;
+ case NID_md5:
+ ctx_size = MD5_CTX_LEN;
+ ctx_update = (update_fun)(&MD5_Update);
+ break;
+ case NID_ripemd160:
+ ctx_size = RIPEMD160_CTX_LEN;
+ ctx_update = (update_fun)(&RIPEMD160_Update);
+ break;
+ case NID_sha1:
+ ctx_size = sizeof(SHA_CTX);
+ ctx_update = (update_fun)(&SHA1_Update);
+ break;
+#ifdef HAVE_SHA224
+ case NID_sha224:
+ ctx_size = sizeof(SHA256_CTX);
+ ctx_update = (update_fun)(&SHA224_Update);
+ break;
#endif
-}
-static ERL_NIF_TERM sha256_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context) */
#ifdef HAVE_SHA256
- ErlNifBinary ctx_bin;
- SHA256_CTX ctx_clone;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != sizeof(SHA256_CTX)) {
- return enif_make_badarg(env);
- }
- memcpy(&ctx_clone, ctx_bin.data, sizeof(SHA256_CTX)); /* writable */
- SHA256_Final(enif_make_new_binary(env, SHA256_LEN, &ret), &ctx_clone);
- return ret;
-#else
- return atom_notsup;
+ case NID_sha256:
+ ctx_size = sizeof(SHA256_CTX);
+ ctx_update = (update_fun)(&SHA256_Update);
+ break;
#endif
-}
-
-static ERL_NIF_TERM sha384_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Data) */
#ifdef HAVE_SHA384
- ErlNifBinary ibin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
- return enif_make_badarg(env);
- }
- SHA384((unsigned char *) ibin.data, ibin.size,
- enif_make_new_binary(env,SHA384_LEN, &ret));
- CONSUME_REDS(env,ibin);
- return ret;
-#else
- return atom_notsup;
+ case NID_sha384:
+ ctx_size = sizeof(SHA512_CTX);
+ ctx_update = (update_fun)(&SHA384_Update);
+ break;
#endif
-}
-static ERL_NIF_TERM sha384_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* () */
-#ifdef HAVE_SHA384
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- SHA384_Init((SHA512_CTX *) enif_make_new_binary(env, sizeof(SHA512_CTX), &ret));
- return ret;
-#else
- return atom_notsup;
+#ifdef HAVE_SHA512
+ case NID_sha512:
+ ctx_size = sizeof(SHA512_CTX);
+ ctx_update = (update_fun)(&SHA512_Update);
+ break;
#endif
-}
-static ERL_NIF_TERM sha384_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context, Data) */
-#ifdef HAVE_SHA384
- SHA512_CTX* new_ctx;
- ErlNifBinary ctx_bin, data_bin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != sizeof(SHA512_CTX)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
- return enif_make_badarg(env);
+ default:
+ return atom_notsup;
}
- new_ctx = (SHA512_CTX*) enif_make_new_binary(env,sizeof(SHA512_CTX), &ret);
- memcpy(new_ctx, ctx_bin.data, sizeof(SHA512_CTX));
- SHA384_Update(new_ctx, data_bin.data, data_bin.size);
- CONSUME_REDS(env,data_bin);
- return ret;
-#else
- return atom_notsup;
-#endif
-}
-static ERL_NIF_TERM sha384_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context) */
-#ifdef HAVE_SHA384
- ErlNifBinary ctx_bin;
- SHA512_CTX ctx_clone;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != sizeof(SHA512_CTX)) {
- return enif_make_badarg(env);
+ ASSERT(ctx_size);
+ ASSERT(ctx_update);
+
+ if (ctx.size != ctx_size) {
+ return enif_make_badarg(env);
}
- memcpy(&ctx_clone, ctx_bin.data, sizeof(SHA512_CTX)); /* writable */
- SHA384_Final(enif_make_new_binary(env, SHA384_LEN, &ret), &ctx_clone);
- return ret;
-#else
- return atom_notsup;
-#endif
-}
-static ERL_NIF_TERM sha512_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Data) */
-#ifdef HAVE_SHA512
- ErlNifBinary ibin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
- return enif_make_badarg(env);
+ ctx_buff = enif_make_new_binary(env, ctx_size, &new_ctx);
+ memcpy(ctx_buff, ctx.data, ctx_size);
+ ctx_update(ctx_buff, data.data, data.size);
+
+ CONSUME_REDS(env, data);
+ return enif_make_tuple2(env, tuple[0], new_ctx);
+}
+static ERL_NIF_TERM hash_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* ({Type, Context}) */
+ typedef int (*final_fun)(unsigned char*, void*);
+ ERL_NIF_TERM ret;
+ ErlNifBinary ctx;
+ const ERL_NIF_TERM *tuple;
+ int arity;
+ struct digest_type_t *digp = NULL;
+ const EVP_MD *md;
+ void *new_ctx;
+ size_t ctx_size = 0;
+ final_fun ctx_final = 0;
+
+ if (!enif_get_tuple(env, argv[0], &arity, &tuple) ||
+ arity != 2 ||
+ !(digp = get_digest_type(tuple[0])) ||
+ !enif_inspect_binary(env, tuple[1], &ctx)) {
+ return enif_make_badarg(env);
}
- SHA512((unsigned char *) ibin.data, ibin.size,
- enif_make_new_binary(env,SHA512_LEN, &ret));
- CONSUME_REDS(env,ibin);
- return ret;
-#else
- return atom_notsup;
+ md = digp->md.p;
+ if (!md) {
+ return atom_notsup;
+ }
+
+
+ switch (EVP_MD_type(md))
+ {
+ case NID_md4:
+ ctx_size = MD4_CTX_LEN;
+ ctx_final = (final_fun)(&MD4_Final);
+ break;
+ case NID_md5:
+ ctx_size = MD5_CTX_LEN;
+ ctx_final = (final_fun)(&MD5_Final);
+ break;
+ case NID_ripemd160:
+ ctx_size = RIPEMD160_CTX_LEN;
+ ctx_final = (final_fun)(&RIPEMD160_Final);
+ break;
+ case NID_sha1:
+ ctx_size = sizeof(SHA_CTX);
+ ctx_final = (final_fun)(&SHA1_Final);
+ break;
+#ifdef HAVE_SHA224
+ case NID_sha224:
+ ctx_size = sizeof(SHA256_CTX);
+ ctx_final = (final_fun)(&SHA224_Final);
+ break;
#endif
-}
-static ERL_NIF_TERM sha512_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* () */
-#ifdef HAVE_SHA512
- ERL_NIF_TERM ret;
- SHA512_Init((SHA512_CTX *) enif_make_new_binary(env, sizeof(SHA512_CTX), &ret));
- return ret;
-#else
- return atom_notsup;
+#ifdef HAVE_SHA256
+ case NID_sha256:
+ ctx_size = sizeof(SHA256_CTX);
+ ctx_final = (final_fun)(&SHA256_Final);
+ break;
#endif
-}
-static ERL_NIF_TERM sha512_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context, Data) */
-#ifdef HAVE_SHA512
- SHA512_CTX* new_ctx;
- ErlNifBinary ctx_bin, data_bin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != sizeof(SHA512_CTX)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
- return enif_make_badarg(env);
- }
- new_ctx = (SHA512_CTX*) enif_make_new_binary(env,sizeof(SHA512_CTX), &ret);
- memcpy(new_ctx, ctx_bin.data, sizeof(SHA512_CTX));
- SHA512_Update(new_ctx, data_bin.data, data_bin.size);
- CONSUME_REDS(env,data_bin);
- return ret;
-#else
- return atom_notsup;
+#ifdef HAVE_SHA384
+ case NID_sha384:
+ ctx_size = sizeof(SHA512_CTX);
+ ctx_final = (final_fun)(&SHA384_Final);
+ break;
#endif
-}
-static ERL_NIF_TERM sha512_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context) */
#ifdef HAVE_SHA512
- ErlNifBinary ctx_bin;
- SHA512_CTX ctx_clone;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != sizeof(SHA512_CTX)) {
- return enif_make_badarg(env);
- }
- memcpy(&ctx_clone, ctx_bin.data, sizeof(SHA512_CTX)); /* writable */
- SHA512_Final(enif_make_new_binary(env, SHA512_LEN, &ret), &ctx_clone);
- return ret;
-#else
- return atom_notsup;
+ case NID_sha512:
+ ctx_size = sizeof(SHA512_CTX);
+ ctx_final = (final_fun)(&SHA512_Final);
+ break;
#endif
-}
-
-
-static ERL_NIF_TERM md4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Data) */
- ErlNifBinary ibin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &ibin)) {
- return enif_make_badarg(env);
+ default:
+ return atom_notsup;
}
- MD4((unsigned char *) ibin.data, ibin.size,
- enif_make_new_binary(env,MD4_LEN, &ret));
- CONSUME_REDS(env,ibin);
- return ret;
-}
-static ERL_NIF_TERM md4_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* () */
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- MD4_Init((MD4_CTX *) enif_make_new_binary(env, MD4_CTX_LEN, &ret));
- return ret;
-}
-static ERL_NIF_TERM md4_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context, Data) */
- MD4_CTX* new_ctx;
- ErlNifBinary ctx_bin, data_bin;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != MD4_CTX_LEN
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
- return enif_make_badarg(env);
- }
- new_ctx = (MD4_CTX*) enif_make_new_binary(env,MD4_CTX_LEN, &ret);
- memcpy(new_ctx, ctx_bin.data, MD4_CTX_LEN);
- MD4_Update(new_ctx, data_bin.data, data_bin.size);
- CONSUME_REDS(env,data_bin);
- return ret;
-}
-static ERL_NIF_TERM md4_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Context) */
- ErlNifBinary ctx_bin;
- MD4_CTX ctx_clone;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_binary(env, argv[0], &ctx_bin) || ctx_bin.size != MD4_CTX_LEN) {
- return enif_make_badarg(env);
- }
- memcpy(&ctx_clone, ctx_bin.data, MD4_CTX_LEN); /* writable */
- MD4_Final(enif_make_new_binary(env, MD4_LEN, &ret), &ctx_clone);
- return ret;
-}
+ ASSERT(ctx_size);
+ ASSERT(ctx_final);
-static ERL_NIF_TERM md5_mac_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Data, MacSize) */
- unsigned char hmacbuf[SHA_DIGEST_LENGTH];
- ErlNifBinary key, data;
- unsigned mac_sz;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data)
- || !enif_get_uint(env,argv[2],&mac_sz) || mac_sz > MD5_LEN) {
- return enif_make_badarg(env);
+ if (ctx.size != ctx_size) {
+ return enif_make_badarg(env);
}
- hmac_md5(key.data, key.size, data.data, data.size, hmacbuf);
- memcpy(enif_make_new_binary(env, mac_sz, &ret), hmacbuf, mac_sz);
- CONSUME_REDS(env,data);
- return ret;
-}
-static ERL_NIF_TERM sha_mac_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Data, MacSize) */
- unsigned char hmacbuf[SHA_DIGEST_LENGTH];
- ErlNifBinary key, data;
- unsigned mac_sz;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data)
- || !enif_get_uint(env,argv[2],&mac_sz) || mac_sz > SHA_LEN) {
- return enif_make_badarg(env);
- }
- hmac_sha1(key.data, key.size, data.data, data.size, hmacbuf);
- memcpy(enif_make_new_binary(env, mac_sz, &ret),
- hmacbuf, mac_sz);
- CONSUME_REDS(env,data);
- return ret;
-}
+ new_ctx = enif_alloc(ctx_size);
+ memcpy(new_ctx, ctx.data, ctx_size);
+ ctx_final(enif_make_new_binary(env, (size_t)EVP_MD_size(md), &ret),
+ new_ctx);
+ enif_free(new_ctx);
-static ERL_NIF_TERM sha224_mac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Data, MacSize) */
-#ifdef HAVE_SHA224
- unsigned char hmacbuf[SHA224_DIGEST_LENGTH];
- ErlNifBinary key, data;
- unsigned mac_sz;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data)
- || !enif_get_uint(env,argv[2],&mac_sz) || mac_sz > SHA224_DIGEST_LENGTH) {
- return enif_make_badarg(env);
- }
- hmac_sha224(key.data, key.size, data.data, data.size, hmacbuf);
- memcpy(enif_make_new_binary(env, mac_sz, &ret),
- hmacbuf, mac_sz);
- CONSUME_REDS(env,data);
return ret;
-#else
- return atom_notsup;
-#endif
}
+#endif /* OPENSSL_VERSION_NUMBER < 1.0 */
-static ERL_NIF_TERM sha256_mac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Data, MacSize) */
-#ifdef HAVE_SHA256
- unsigned char hmacbuf[SHA256_DIGEST_LENGTH];
- ErlNifBinary key, data;
- unsigned mac_sz;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data)
- || !enif_get_uint(env,argv[2],&mac_sz) || mac_sz > SHA256_DIGEST_LENGTH) {
- return enif_make_badarg(env);
- }
- hmac_sha256(key.data, key.size, data.data, data.size, hmacbuf);
- memcpy(enif_make_new_binary(env, mac_sz, &ret),
- hmacbuf, mac_sz);
- CONSUME_REDS(env,data);
- return ret;
-#else
- return atom_notsup;
-#endif
-}
+static ERL_NIF_TERM hmac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Type, Key, Data) or (Type, Key, Data, MacSize) */
+ struct digest_type_t *digp = NULL;
+ ErlNifBinary key, data;
+ unsigned char buff[EVP_MAX_MD_SIZE];
+ unsigned size = 0, req_size = 0;
+ ERL_NIF_TERM ret;
-static ERL_NIF_TERM sha384_mac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Data, MacSize) */
-#ifdef HAVE_SHA384
- unsigned char hmacbuf[SHA384_DIGEST_LENGTH];
- ErlNifBinary key, data;
- unsigned mac_sz;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data)
- || !enif_get_uint(env,argv[2],&mac_sz) || mac_sz > SHA384_DIGEST_LENGTH) {
- return enif_make_badarg(env);
+ digp = get_digest_type(argv[0]);
+ if (!digp ||
+ !enif_inspect_iolist_as_binary(env, argv[1], &key) ||
+ !enif_inspect_iolist_as_binary(env, argv[2], &data) ||
+ (argc == 4 && !enif_get_uint(env, argv[3], &req_size))) {
+ return enif_make_badarg(env);
}
- hmac_sha384(key.data, key.size, data.data, data.size, hmacbuf);
- memcpy(enif_make_new_binary(env, mac_sz, &ret),
- hmacbuf, mac_sz);
- CONSUME_REDS(env,data);
- return ret;
-#else
- return atom_notsup;
-#endif
-}
+ if (!digp->md.p ||
+ !HMAC(digp->md.p,
+ key.data, key.size,
+ data.data, data.size,
+ buff, &size)) {
+ return atom_notsup;
+ }
+ ASSERT(0 < size && size <= EVP_MAX_MD_SIZE);
+ CONSUME_REDS(env, data);
-static ERL_NIF_TERM sha512_mac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Data, MacSize) */
-#ifdef HAVE_SHA512
- unsigned char hmacbuf[SHA512_DIGEST_LENGTH];
- ErlNifBinary key, data;
- unsigned mac_sz;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data)
- || !enif_get_uint(env,argv[2],&mac_sz) || mac_sz > SHA512_DIGEST_LENGTH) {
- return enif_make_badarg(env);
+ if (argc == 4) {
+ if (req_size <= size) {
+ size = req_size;
+ }
+ else {
+ return enif_make_badarg(env);
+ }
}
- hmac_sha512(key.data, key.size, data.data, data.size, hmacbuf);
- memcpy(enif_make_new_binary(env, mac_sz, &ret),
- hmacbuf, mac_sz);
- CONSUME_REDS(env,data);
+ memcpy(enif_make_new_binary(env, size, &ret), buff, size);
return ret;
-#else
- return atom_notsup;
-#endif
}
static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context *obj)
@@ -1455,55 +1255,46 @@ static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context *obj)
enif_mutex_destroy(obj->mtx);
}
-static ERL_NIF_TERM hmac_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+static ERL_NIF_TERM hmac_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Type, Key) */
- ErlNifBinary key;
- struct hmac_context* obj;
- const EVP_MD *md;
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
+ struct digest_type_t *digp = NULL;
+ ErlNifBinary key;
+ ERL_NIF_TERM ret;
+ struct hmac_context *obj;
- if (argv[0] == atom_sha) md = EVP_sha1();
-#ifdef HAVE_SHA224
- else if (argv[0] == atom_sha224) md = EVP_sha224();
-#endif
-#ifdef HAVE_SHA256
- else if (argv[0] == atom_sha256) md = EVP_sha256();
-#endif
-#ifdef HAVE_SHA384
- else if (argv[0] == atom_sha384) md = EVP_sha384();
-#endif
-#ifdef HAVE_SHA512
- else if (argv[0] == atom_sha512) md = EVP_sha512();
-#endif
- else if (argv[0] == atom_md5) md = EVP_md5();
- else if (argv[0] == atom_ripemd160) md = EVP_ripemd160();
- else goto badarg;
-
- if (!enif_inspect_iolist_as_binary(env, argv[1], &key)) {
- badarg:
- return enif_make_badarg(env);
+ digp = get_digest_type(argv[0]);
+ if (!digp ||
+ !enif_inspect_iolist_as_binary(env, argv[1], &key)) {
+ return enif_make_badarg(env);
+ }
+ if (!digp->md.p) {
+ return atom_notsup;
}
obj = enif_alloc_resource(hmac_context_rtype, sizeof(struct hmac_context));
obj->mtx = enif_mutex_create("crypto.hmac");
obj->alive = 1;
- HMAC_CTX_init(&obj->ctx);
- HMAC_Init(&obj->ctx, key.data, key.size, md);
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
+ // Check the return value of HMAC_Init: it may fail in FIPS mode
+ // for disabled algorithms
+ if (!HMAC_Init(&obj->ctx, key.data, key.size, digp->md.p)) {
+ enif_release_resource(obj);
+ return atom_notsup;
+ }
+#else
+ HMAC_Init(&obj->ctx, key.data, key.size, digp->md.p);
+#endif
ret = enif_make_resource(env, obj);
enif_release_resource(obj);
return ret;
}
-static ERL_NIF_TERM hmac_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+static ERL_NIF_TERM hmac_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Context, Data) */
ErlNifBinary data;
struct hmac_context* obj;
- CHECK_OSE_CRYPTO();
-
if (!enif_get_resource(env, argv[0], hmac_context_rtype, (void**)&obj)
|| !enif_inspect_iolist_as_binary(env, argv[1], &data)) {
return enif_make_badarg(env);
@@ -1520,7 +1311,7 @@ static ERL_NIF_TERM hmac_update(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
return argv[0];
}
-static ERL_NIF_TERM hmac_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+static ERL_NIF_TERM hmac_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Context) or (Context, HashLen) */
ERL_NIF_TERM ret;
struct hmac_context* obj;
@@ -1529,8 +1320,6 @@ static ERL_NIF_TERM hmac_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv
unsigned int req_len = 0;
unsigned int mac_len;
- CHECK_OSE_CRYPTO();
-
if (!enif_get_resource(env,argv[0],hmac_context_rtype, (void**)&obj)
|| (argc == 2 && !enif_get_uint(env, argv[1], &req_len))) {
return enif_make_badarg(env);
@@ -1557,206 +1346,197 @@ static ERL_NIF_TERM hmac_final(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv
return ret;
}
-static ERL_NIF_TERM des_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Ivec, Text, IsEncrypt) */
- ErlNifBinary key, ivec, text;
- DES_key_schedule schedule;
- DES_cblock ivec_clone; /* writable copy */
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
+static ERL_NIF_TERM block_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Type, Key, Ivec, Text, IsEncrypt) or (Type, Key, Text, IsEncrypt) */
+ struct cipher_type_t *cipherp = NULL;
+ const EVP_CIPHER *cipher;
+ ErlNifBinary key, ivec, text;
+ EVP_CIPHER_CTX ctx;
+ ERL_NIF_TERM ret;
+ unsigned char *out;
+ int ivec_size, out_size = 0;
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 8
- || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[2], &text)
- || text.size % 8 != 0) {
- return enif_make_badarg(env);
+ if (!enif_inspect_iolist_as_binary(env, argv[1], &key)
+ || !(cipherp = get_cipher_type(argv[0], key.size))
+ || !enif_inspect_iolist_as_binary(env, argv[argc - 2], &text)) {
+ return enif_make_badarg(env);
}
- memcpy(&ivec_clone, ivec.data, 8);
- DES_set_key((const_DES_cblock*)key.data, &schedule);
- DES_ncbc_encrypt(text.data, enif_make_new_binary(env, text.size, &ret),
- text.size, &schedule, &ivec_clone, (argv[3] == atom_true));
- CONSUME_REDS(env,text);
- return ret;
-}
-
-static ERL_NIF_TERM des_cfb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Ivec, Text, IsEncrypt) */
- ErlNifBinary key, ivec, text;
- DES_key_schedule schedule;
- DES_cblock ivec_clone; /* writable copy */
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 8
- || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[2], &text)) {
- return enif_make_badarg(env);
+ cipher = cipherp->cipher.p;
+ if (!cipher) {
+ return enif_raise_exception(env, atom_notsup);
}
- memcpy(&ivec_clone, ivec.data, 8);
- DES_set_key((const_DES_cblock*)key.data, &schedule);
- DES_cfb_encrypt(text.data, enif_make_new_binary(env, text.size, &ret),
- 8, text.size, &schedule, &ivec_clone, (argv[3] == atom_true));
- CONSUME_REDS(env,text);
- return ret;
-}
-static ERL_NIF_TERM des_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Text/Cipher, IsEncrypt) */
- ErlNifBinary key, text;
- DES_key_schedule schedule;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 8 ||
- !enif_inspect_iolist_as_binary(env, argv[1], &text) || text.size != 8) {
- return enif_make_badarg(env);
+ if ((argv[0] == atom_aes_cfb8 || argv[0] == atom_aes_cfb128)
+ && (key.size == 24 || key.size == 32)) {
+ /* Why do EVP_CIPHER_CTX_set_key_length() fail on these key sizes?
+ * Fall back on low level API
+ */
+ return aes_cfb_8_crypt(env, argc-1, argv+1);
}
- DES_set_key((const_DES_cblock*)key.data, &schedule);
- DES_ecb_encrypt((const_DES_cblock*)text.data,
- (DES_cblock*)enif_make_new_binary(env, 8, &ret),
- &schedule, (argv[2] == atom_true));
- CONSUME_REDS(env,text);
- return ret;
-}
-static ERL_NIF_TERM des_ede3_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key1, Key2, Key3, IVec, Text/Cipher, IsEncrypt) */
- ErlNifBinary key1, key2, key3, ivec, text;
- DES_key_schedule schedule1, schedule2, schedule3;
- DES_cblock ivec_clone; /* writable copy */
- ERL_NIF_TERM ret;
+ ivec_size = EVP_CIPHER_iv_length(cipher);
- CHECK_OSE_CRYPTO();
+#ifdef HAVE_ECB_IVEC_BUG
+ if (argv[0] == atom_aes_ecb || argv[0] == atom_blowfish_ecb ||
+ argv[0] == atom_des_ecb)
+ ivec_size = 0; /* 0.9.8l returns faulty ivec_size */
+#endif
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key1) || key1.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[1], &key2) || key2.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[2], &key3) || key3.size != 8
- || !enif_inspect_binary(env, argv[3], &ivec) || ivec.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[4], &text)
- || text.size % 8 != 0) {
- return enif_make_badarg(env);
+ if (text.size % EVP_CIPHER_block_size(cipher) != 0 ||
+ (ivec_size == 0 ? argc != 4
+ : (argc != 5 ||
+ !enif_inspect_iolist_as_binary(env, argv[2], &ivec) ||
+ ivec.size != ivec_size))) {
+ return enif_make_badarg(env);
}
- memcpy(&ivec_clone, ivec.data, 8);
- DES_set_key((const_DES_cblock*)key1.data, &schedule1);
- DES_set_key((const_DES_cblock*)key2.data, &schedule2);
- DES_set_key((const_DES_cblock*)key3.data, &schedule3);
- DES_ede3_cbc_encrypt(text.data, enif_make_new_binary(env,text.size,&ret),
- text.size, &schedule1, &schedule2, &schedule3,
- &ivec_clone, (argv[5] == atom_true));
- CONSUME_REDS(env,text);
- return ret;
-}
+ out = enif_make_new_binary(env, text.size, &ret);
-static ERL_NIF_TERM des_ede3_cfb_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key1, Key2, Key3, IVec, Text/Cipher, IsEncrypt) */
-#ifdef HAVE_DES_ede3_cfb_encrypt
- ErlNifBinary key1, key2, key3, ivec, text;
- DES_key_schedule schedule1, schedule2, schedule3;
- DES_cblock ivec_clone; /* writable copy */
- ERL_NIF_TERM ret;
+ EVP_CIPHER_CTX_init(&ctx);
+ if (!EVP_CipherInit_ex(&ctx, cipher, NULL, NULL, NULL,
+ (argv[argc - 1] == atom_true)) ||
+ !EVP_CIPHER_CTX_set_key_length(&ctx, key.size) ||
+ !(EVP_CIPHER_type(cipher) != NID_rc2_cbc ||
+ EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_SET_RC2_KEY_BITS, key.size * 8, NULL)) ||
+ !EVP_CipherInit_ex(&ctx, NULL, NULL,
+ key.data, ivec_size ? ivec.data : NULL, -1) ||
+ !EVP_CIPHER_CTX_set_padding(&ctx, 0)) {
- CHECK_OSE_CRYPTO();
+ EVP_CIPHER_CTX_cleanup(&ctx);
+ return enif_raise_exception(env, atom_notsup);
+ }
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key1) || key1.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[1], &key2) || key2.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[2], &key3) || key3.size != 8
- || !enif_inspect_binary(env, argv[3], &ivec) || ivec.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[4], &text)) {
- return enif_make_badarg(env);
+ if (text.size > 0 && /* OpenSSL 0.9.8h asserts text.size > 0 */
+ (!EVP_CipherUpdate(&ctx, out, &out_size, text.data, text.size)
+ || (ASSERT(out_size == text.size), 0)
+ || !EVP_CipherFinal_ex(&ctx, out + out_size, &out_size))) {
+
+ EVP_CIPHER_CTX_cleanup(&ctx);
+ return enif_raise_exception(env, atom_notsup);
}
+ ASSERT(out_size == 0);
+ EVP_CIPHER_CTX_cleanup(&ctx);
+ CONSUME_REDS(env, text);
- memcpy(&ivec_clone, ivec.data, 8);
- DES_set_key((const_DES_cblock*)key1.data, &schedule1);
- DES_set_key((const_DES_cblock*)key2.data, &schedule2);
- DES_set_key((const_DES_cblock*)key3.data, &schedule3);
- DES_ede3_cfb_encrypt(text.data, enif_make_new_binary(env,text.size,&ret),
- 8, text.size, &schedule1, &schedule2, &schedule3,
- &ivec_clone, (argv[5] == atom_true));
- CONSUME_REDS(env,text);
return ret;
-#else
- return atom_notsup;
-#endif
}
static ERL_NIF_TERM aes_cfb_8_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, IVec, Data, IsEncrypt) */
- ErlNifBinary key, ivec, text;
- AES_KEY aes_key;
- unsigned char ivec_clone[16]; /* writable copy */
- int new_ivlen = 0;
- ERL_NIF_TERM ret;
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || !(key.size == 16 || key.size == 24 || key.size == 32)
- || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 16
- || !enif_inspect_iolist_as_binary(env, argv[2], &text)) {
- return enif_make_badarg(env);
- }
-
- memcpy(ivec_clone, ivec.data, 16);
- AES_set_encrypt_key(key.data, key.size * 8, &aes_key);
- AES_cfb8_encrypt((unsigned char *) text.data,
- enif_make_new_binary(env, text.size, &ret),
- text.size, &aes_key, ivec_clone, &new_ivlen,
- (argv[3] == atom_true));
- CONSUME_REDS(env,text);
- return ret;
+{/* (Key, IVec, Data, IsEncrypt) */
+ ErlNifBinary key, ivec, text;
+ AES_KEY aes_key;
+ unsigned char ivec_clone[16]; /* writable copy */
+ int new_ivlen = 0;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
+ || !(key.size == 16 || key.size == 24 || key.size == 32)
+ || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 16
+ || !enif_inspect_iolist_as_binary(env, argv[2], &text)) {
+ return enif_make_badarg(env);
+ }
+
+ memcpy(ivec_clone, ivec.data, 16);
+ AES_set_encrypt_key(key.data, key.size * 8, &aes_key);
+ AES_cfb8_encrypt((unsigned char *) text.data,
+ enif_make_new_binary(env, text.size, &ret),
+ text.size, &aes_key, ivec_clone, &new_ivlen,
+ (argv[3] == atom_true));
+ CONSUME_REDS(env,text);
+ return ret;
}
-static ERL_NIF_TERM aes_cfb_128_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, IVec, Data, IsEncrypt) */
- ErlNifBinary key, ivec, text;
+static ERL_NIF_TERM aes_ige_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, IVec, Data, IsEncrypt) */
+#ifdef HAVE_AES_IGE
+ ErlNifBinary key_bin, ivec_bin, data_bin;
AES_KEY aes_key;
- unsigned char ivec_clone[16]; /* writable copy */
- int new_ivlen = 0;
+ unsigned char ivec[32];
+ int i;
+ unsigned char* ret_ptr;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || (key_bin.size != 16 && key_bin.size != 32)
+ || !enif_inspect_binary(env, argv[1], &ivec_bin)
+ || ivec_bin.size != 32
+ || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)
+ || data_bin.size % 16 != 0) {
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || !(key.size == 16 || key.size == 24 || key.size == 32)
- || !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 16
- || !enif_inspect_iolist_as_binary(env, argv[2], &text)) {
- return enif_make_badarg(env);
+ return enif_make_badarg(env);
}
- memcpy(ivec_clone, ivec.data, 16);
- AES_set_encrypt_key(key.data, key.size * 8, &aes_key);
- AES_cfb128_encrypt((unsigned char *) text.data,
- enif_make_new_binary(env, text.size, &ret),
- text.size, &aes_key, ivec_clone, &new_ivlen,
- (argv[3] == atom_true));
- CONSUME_REDS(env,text);
+ if (argv[3] == atom_true) {
+ i = AES_ENCRYPT;
+ AES_set_encrypt_key(key_bin.data, key_bin.size*8, &aes_key);
+ }
+ else {
+ i = AES_DECRYPT;
+ AES_set_decrypt_key(key_bin.data, key_bin.size*8, &aes_key);
+ }
+
+ ret_ptr = enif_make_new_binary(env, data_bin.size, &ret);
+ memcpy(ivec, ivec_bin.data, 32); /* writable copy */
+ AES_ige_encrypt(data_bin.data, ret_ptr, data_bin.size, &aes_key, ivec, i);
+ CONSUME_REDS(env,data_bin);
return ret;
+#else
+ return atom_notsup;
+#endif
}
/* Common for both encrypt and decrypt
*/
static ERL_NIF_TERM aes_ctr_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Key, IVec, Data) */
- ErlNifBinary key, ivec, text;
- AES_KEY aes_key;
- unsigned char ivec_clone[16]; /* writable copy */
- unsigned char ecount_buf[AES_BLOCK_SIZE];
- unsigned int num = 0;
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
+ ErlNifBinary key, ivec, text;
+#ifdef HAVE_EVP_AES_CTR
+ const EVP_CIPHER *cipher;
+ EVP_CIPHER_CTX ctx;
+ unsigned char *out;
+ int outl = 0;
+#else
+ AES_KEY aes_key;
+ unsigned char ivec_clone[16]; /* writable copy */
+ unsigned char ecount_buf[AES_BLOCK_SIZE];
+ unsigned int num = 0;
+#endif
+ ERL_NIF_TERM ret;
if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
+#ifndef HAVE_EVP_AES_CTR
|| AES_set_encrypt_key(key.data, key.size*8, &aes_key) != 0
+#endif
|| !enif_inspect_binary(env, argv[1], &ivec) || ivec.size != 16
|| !enif_inspect_iolist_as_binary(env, argv[2], &text)) {
return enif_make_badarg(env);
}
+#ifdef HAVE_EVP_AES_CTR
+ switch (key.size)
+ {
+ case 16: cipher = EVP_aes_128_ctr(); break;
+ case 24: cipher = EVP_aes_192_ctr(); break;
+ case 32: cipher = EVP_aes_256_ctr(); break;
+ default: return enif_make_badarg(env);
+ }
+
+ out = enif_make_new_binary(env,text.size,&ret);
+ EVP_CIPHER_CTX_init(&ctx);
+ EVP_CipherInit_ex(&ctx, cipher, NULL,
+ key.data, ivec.data, (argv[3] == atom_true));
+ EVP_CIPHER_CTX_set_padding(&ctx, 0);
+ EVP_CipherUpdate(&ctx, out, &outl, text.data, text.size);
+ ASSERT(outl == text.size);
+ EVP_CipherFinal_ex(&ctx, out + outl, &outl);
+ ASSERT(outl == 0);
+ EVP_CIPHER_CTX_cleanup(&ctx);
+#else
memcpy(ivec_clone, ivec.data, 16);
memset(ecount_buf, 0, sizeof(ecount_buf));
AES_ctr128_encrypt((unsigned char *) text.data,
enif_make_new_binary(env, text.size, &ret),
text.size, &aes_key, ivec_clone, ecount_buf, &num);
+#endif
CONSUME_REDS(env,text);
/* To do an incremental {en|de}cryption, the state to to keep between calls
@@ -1766,6 +1546,81 @@ static ERL_NIF_TERM aes_ctr_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM
/* Initializes state for ctr streaming (de)encryption
*/
+#ifdef HAVE_EVP_AES_CTR
+static ERL_NIF_TERM aes_ctr_stream_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, IVec) */
+ ErlNifBinary key_bin, ivec_bin;
+ EVP_CIPHER_CTX *ctx;
+ const EVP_CIPHER *cipher;
+ ERL_NIF_TERM ret;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || !enif_inspect_binary(env, argv[1], &ivec_bin)
+ || ivec_bin.size != 16) {
+ return enif_make_badarg(env);
+ }
+
+ switch (key_bin.size)
+ {
+ case 16: cipher = EVP_aes_128_ctr(); break;
+ case 24: cipher = EVP_aes_192_ctr(); break;
+ case 32: cipher = EVP_aes_256_ctr(); break;
+ default: return enif_make_badarg(env);
+ }
+
+ ctx = enif_alloc_resource(evp_cipher_ctx_rtype, sizeof(EVP_CIPHER_CTX));
+ EVP_CIPHER_CTX_init(ctx);
+ EVP_CipherInit_ex(ctx, cipher, NULL,
+ key_bin.data, ivec_bin.data, 1);
+ EVP_CIPHER_CTX_set_padding(ctx, 0);
+ ret = enif_make_resource(env, ctx);
+ enif_release_resource(ctx);
+ return ret;
+}
+static ERL_NIF_TERM aes_ctr_stream_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Context, Data) */
+ EVP_CIPHER_CTX *ctx, *new_ctx;
+ ErlNifBinary data_bin;
+ ERL_NIF_TERM ret, cipher_term;
+ unsigned char *out;
+ int outl = 0;
+
+ if (!enif_get_resource(env, argv[0], evp_cipher_ctx_rtype, (void**)&ctx)
+ || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)) {
+ return enif_make_badarg(env);
+ }
+ new_ctx = enif_alloc_resource(evp_cipher_ctx_rtype, sizeof(EVP_CIPHER_CTX));
+ EVP_CIPHER_CTX_init(new_ctx);
+ EVP_CIPHER_CTX_copy(new_ctx, ctx);
+ out = enif_make_new_binary(env, data_bin.size, &cipher_term);
+ EVP_CipherUpdate(new_ctx, out, &outl, data_bin.data, data_bin.size);
+ ASSERT(outl == data_bin.size);
+
+ ret = enif_make_tuple2(env, enif_make_resource(env, new_ctx), cipher_term);
+ enif_release_resource(new_ctx);
+ CONSUME_REDS(env,data_bin);
+ return ret;
+}
+
+#else /* if not HAVE_EVP_AES_CTR */
+
+static ERL_NIF_TERM aes_ctr_stream_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Key, IVec) */
+ ErlNifBinary key_bin, ivec_bin;
+ ERL_NIF_TERM ecount_bin;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
+ || !enif_inspect_binary(env, argv[1], &ivec_bin)
+ || !(key_bin.size == 16 || key_bin.size == 24 || key_bin.size ==32)
+ || ivec_bin.size != 16) {
+ return enif_make_badarg(env);
+ }
+
+ memset(enif_make_new_binary(env, AES_BLOCK_SIZE, &ecount_bin),
+ 0, AES_BLOCK_SIZE);
+ return enif_make_tuple4(env, argv[0], argv[1], ecount_bin, enif_make_int(env, 0));
+}
+
static ERL_NIF_TERM aes_ctr_stream_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* ({Key, IVec, ECount, Num}, Data) */
ErlNifBinary key_bin, ivec_bin, text_bin, ecount_bin;
@@ -1777,8 +1632,6 @@ static ERL_NIF_TERM aes_ctr_stream_encrypt(ErlNifEnv* env, int argc, const ERL_N
unsigned char * ivec2_buf;
unsigned char * ecount2_buf;
- CHECK_OSE_CRYPTO();
-
if (!enif_get_tuple(env, argv[0], &state_arity, &state_term)
|| state_arity != 4
|| !enif_inspect_iolist_as_binary(env, state_term[0], &key_bin)
@@ -1806,94 +1659,173 @@ static ERL_NIF_TERM aes_ctr_stream_encrypt(ErlNifEnv* env, int argc, const ERL_N
CONSUME_REDS(env,text_bin);
return ret;
}
+#endif /* !HAVE_EVP_AES_CTR */
static ERL_NIF_TERM aes_gcm_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Key,Iv,AAD,In) */
#if defined(HAVE_GCM)
- GCM128_CONTEXT *ctx = NULL;
+ EVP_CIPHER_CTX ctx;
+ const EVP_CIPHER *cipher = NULL;
ErlNifBinary key, iv, aad, in;
- AES_KEY aes_key;
- unsigned char *outp;
+ unsigned int tag_len;
+ unsigned char *outp, *tagp;
ERL_NIF_TERM out, out_tag;
-
- CHECK_OSE_CRYPTO();
+ int len;
if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || AES_set_encrypt_key(key.data, key.size*8, &aes_key) != 0
+ || (key.size != 16 && key.size != 24 && key.size != 32)
|| !enif_inspect_binary(env, argv[1], &iv) || iv.size == 0
|| !enif_inspect_iolist_as_binary(env, argv[2], &aad)
- || !enif_inspect_iolist_as_binary(env, argv[3], &in)) {
+ || !enif_inspect_iolist_as_binary(env, argv[3], &in)
+ || !enif_get_uint(env, argv[4], &tag_len) || tag_len < 1 || tag_len > 16) {
return enif_make_badarg(env);
}
- if (!(ctx = CRYPTO_gcm128_new(&aes_key, (block128_f)AES_encrypt)))
- return atom_error;
+ if (key.size == 16)
+ cipher = EVP_aes_128_gcm();
+ else if (key.size == 24)
+ cipher = EVP_aes_192_gcm();
+ else if (key.size == 32)
+ cipher = EVP_aes_256_gcm();
- CRYPTO_gcm128_setiv(ctx, iv.data, iv.size);
+ EVP_CIPHER_CTX_init(&ctx);
- if (CRYPTO_gcm128_aad(ctx, aad.data, aad.size))
- goto out_err;
+ if (EVP_EncryptInit_ex(&ctx, cipher, NULL, NULL, NULL) != 1)
+ goto out_err;
+
+ EVP_CIPHER_CTX_set_padding(&ctx, 0);
+
+ if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size, NULL) != 1)
+ goto out_err;
+ if (EVP_EncryptInit_ex(&ctx, NULL, NULL, key.data, iv.data) != 1)
+ goto out_err;
+ if (EVP_EncryptUpdate(&ctx, NULL, &len, aad.data, aad.size) != 1)
+ goto out_err;
outp = enif_make_new_binary(env, in.size, &out);
- /* encrypt */
- if (CRYPTO_gcm128_encrypt(ctx, in.data, outp, in.size))
- goto out_err;
+ if (EVP_EncryptUpdate(&ctx, outp, &len, in.data, in.size) != 1)
+ goto out_err;
+ if (EVP_EncryptFinal_ex(&ctx, outp+len, &len) != 1)
+ goto out_err;
- /* calculate the tag */
- CRYPTO_gcm128_tag(ctx, enif_make_new_binary(env, EVP_GCM_TLS_TAG_LEN, &out_tag), EVP_GCM_TLS_TAG_LEN);
- CRYPTO_gcm128_release(ctx);
+ tagp = enif_make_new_binary(env, tag_len, &out_tag);
+
+ if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_GET_TAG, tag_len, tagp) != 1)
+ goto out_err;
+
+ EVP_CIPHER_CTX_cleanup(&ctx);
CONSUME_REDS(env, in);
return enif_make_tuple2(env, out, out_tag);
out_err:
- CRYPTO_gcm128_release(ctx);
+ EVP_CIPHER_CTX_cleanup(&ctx);
return atom_error;
#else
- return atom_notsup;
+ return enif_raise_exception(env, atom_notsup);
#endif
}
static ERL_NIF_TERM aes_gcm_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Key,Iv,AAD,In,Tag) */
-#if defined(HAVE_GCM)
- GCM128_CONTEXT *ctx;
+#if defined(HAVE_GCM_EVP_DECRYPT_BUG)
+ return aes_gcm_decrypt_NO_EVP(env, argc, argv);
+#elif defined(HAVE_GCM)
+ EVP_CIPHER_CTX ctx;
+ const EVP_CIPHER *cipher = NULL;
ErlNifBinary key, iv, aad, in, tag;
- AES_KEY aes_key;
unsigned char *outp;
ERL_NIF_TERM out;
-
- CHECK_OSE_CRYPTO();
+ int len;
if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
- || AES_set_encrypt_key(key.data, key.size*8, &aes_key) != 0
+ || (key.size != 16 && key.size != 24 && key.size != 32)
|| !enif_inspect_binary(env, argv[1], &iv) || iv.size == 0
|| !enif_inspect_iolist_as_binary(env, argv[2], &aad)
|| !enif_inspect_iolist_as_binary(env, argv[3], &in)
- || !enif_inspect_iolist_as_binary(env, argv[4], &tag) || tag.size != EVP_GCM_TLS_TAG_LEN) {
+ || !enif_inspect_iolist_as_binary(env, argv[4], &tag)) {
return enif_make_badarg(env);
}
+ if (key.size == 16)
+ cipher = EVP_aes_128_gcm();
+ else if (key.size == 24)
+ cipher = EVP_aes_192_gcm();
+ else if (key.size == 32)
+ cipher = EVP_aes_256_gcm();
+
+ EVP_CIPHER_CTX_init(&ctx);
+
+ if (EVP_DecryptInit_ex(&ctx, cipher, NULL, NULL, NULL) != 1)
+ goto out_err;
+ if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size, NULL) != 1)
+ goto out_err;
+ if (EVP_DecryptInit_ex(&ctx, NULL, NULL, key.data, iv.data) != 1)
+ goto out_err;
+ if (EVP_DecryptUpdate(&ctx, NULL, &len, aad.data, aad.size) != 1)
+ goto out_err;
+
+ outp = enif_make_new_binary(env, in.size, &out);
+
+ if (EVP_DecryptUpdate(&ctx, outp, &len, in.data, in.size) != 1)
+ goto out_err;
+ if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_TAG, tag.size, tag.data) != 1)
+ goto out_err;
+ if (EVP_DecryptFinal_ex(&ctx, outp+len, &len) != 1)
+ goto out_err;
+
+ EVP_CIPHER_CTX_cleanup(&ctx);
+
+ CONSUME_REDS(env, in);
+
+ return out;
+
+out_err:
+ EVP_CIPHER_CTX_cleanup(&ctx);
+ return atom_error;
+#else
+ return enif_raise_exception(env, atom_notsup);
+#endif
+}
+
+#ifdef HAVE_GCM_EVP_DECRYPT_BUG
+static ERL_NIF_TERM aes_gcm_decrypt_NO_EVP(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ GCM128_CONTEXT *ctx;
+ ErlNifBinary key, iv, aad, in, tag;
+ AES_KEY aes_key;
+ unsigned char *outp;
+ ERL_NIF_TERM out;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
+ || AES_set_encrypt_key(key.data, key.size*8, &aes_key) != 0
+ || !enif_inspect_binary(env, argv[1], &iv) || iv.size == 0
+ || !enif_inspect_iolist_as_binary(env, argv[2], &aad)
+ || !enif_inspect_iolist_as_binary(env, argv[3], &in)
+ || !enif_inspect_iolist_as_binary(env, argv[4], &tag)) {
+ return enif_make_badarg(env);
+ }
+
if (!(ctx = CRYPTO_gcm128_new(&aes_key, (block128_f)AES_encrypt)))
- return atom_error;
+ return atom_error;
CRYPTO_gcm128_setiv(ctx, iv.data, iv.size);
if (CRYPTO_gcm128_aad(ctx, aad.data, aad.size))
- goto out_err;
+ goto out_err;
outp = enif_make_new_binary(env, in.size, &out);
/* decrypt */
if (CRYPTO_gcm128_decrypt(ctx, in.data, outp, in.size))
- goto out_err;
+ goto out_err;
/* calculate and check the tag */
- if (CRYPTO_gcm128_finish(ctx, tag.data, EVP_GCM_TLS_TAG_LEN))
- goto out_err;
+ if (CRYPTO_gcm128_finish(ctx, tag.data, tag.size))
+ goto out_err;
CRYPTO_gcm128_release(ctx);
CONSUME_REDS(env, in);
@@ -1903,10 +1835,8 @@ static ERL_NIF_TERM aes_gcm_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM
out_err:
CRYPTO_gcm128_release(ctx);
return atom_error;
-#else
- return atom_notsup;
-#endif
}
+#endif /* HAVE_GCM_EVP_DECRYPT_BUG */
#if defined(HAVE_CHACHA20_POLY1305)
static void
@@ -1937,8 +1867,6 @@ static ERL_NIF_TERM chacha20_poly1305_encrypt(ErlNifEnv* env, int argc, const ER
unsigned char poly1305_key[32];
poly1305_state poly1305;
- CHECK_OSE_CRYPTO();
-
if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 32
|| !enif_inspect_binary(env, argv[1], &iv) || iv.size != CHACHA20_NONCE_LEN
|| !enif_inspect_iolist_as_binary(env, argv[2], &aad)
@@ -1976,7 +1904,7 @@ static ERL_NIF_TERM chacha20_poly1305_encrypt(ErlNifEnv* env, int argc, const ER
return enif_make_tuple2(env, out, out_tag);
#else
- return atom_notsup;
+ return enif_raise_exception(env, atom_notsup);
#endif
}
@@ -1991,8 +1919,6 @@ static ERL_NIF_TERM chacha20_poly1305_decrypt(ErlNifEnv* env, int argc, const ER
unsigned char mac[POLY1305_TAG_LEN];
poly1305_state poly1305;
- CHECK_OSE_CRYPTO();
-
if (!enif_inspect_iolist_as_binary(env, argv[0], &key) || key.size != 32
|| !enif_inspect_binary(env, argv[1], &iv) || iv.size != CHACHA20_NONCE_LEN
|| !enif_inspect_iolist_as_binary(env, argv[2], &aad)
@@ -2033,51 +1959,16 @@ static ERL_NIF_TERM chacha20_poly1305_decrypt(ErlNifEnv* env, int argc, const ER
return out;
#else
- return atom_notsup;
+ return enif_raise_exception(env, atom_notsup);
#endif
}
-static ERL_NIF_TERM aes_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Data, IsEncrypt) */
- ErlNifBinary key_bin, data_bin;
- AES_KEY aes_key;
- int i;
- int j;
- unsigned char* ret_ptr;
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
- || (key_bin.size != 16 && key_bin.size != 32)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)
- || data_bin.size % 16 != 0) {
- return enif_make_badarg(env);
- }
-
- if (argv[2] == atom_true) {
- i = AES_ENCRYPT;
- AES_set_encrypt_key(key_bin.data, key_bin.size*8, &aes_key);
- }
- else {
- i = AES_DECRYPT;
- AES_set_decrypt_key(key_bin.data, key_bin.size*8, &aes_key);
- }
-
- ret_ptr = enif_make_new_binary(env, data_bin.size, &ret);
- for (j = 0; j < data_bin.size; j += 16) {
- AES_ecb_encrypt(data_bin.data+j, ret_ptr+j, &aes_key, i);
- }
- CONSUME_REDS(env,data_bin);
- return ret;
-}
-
static ERL_NIF_TERM rand_bytes_1(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Bytes) */
unsigned bytes;
unsigned char* data;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
+
if (!enif_get_uint(env, argv[0], &bytes)) {
return enif_make_badarg(env);
}
@@ -2091,7 +1982,7 @@ static ERL_NIF_TERM strong_rand_bytes_nif(ErlNifEnv* env, int argc, const ERL_NI
unsigned bytes;
unsigned char* data;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
+
if (!enif_get_uint(env, argv[0], &bytes)) {
return enif_make_badarg(env);
}
@@ -2103,27 +1994,7 @@ static ERL_NIF_TERM strong_rand_bytes_nif(ErlNifEnv* env, int argc, const ERL_NI
return ret;
}
-static ERL_NIF_TERM rand_bytes_3(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Bytes, TopMask, BottomMask) */
- unsigned bytes;
- unsigned char* data;
- unsigned top_mask, bot_mask;
- ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
- if (!enif_get_uint(env, argv[0], &bytes)
- || !enif_get_uint(env, argv[1], &top_mask)
- || !enif_get_uint(env, argv[2], &bot_mask)) {
- return enif_make_badarg(env);
- }
- data = enif_make_new_binary(env, bytes, &ret);
- RAND_pseudo_bytes(data, bytes);
- ERL_VALGRIND_MAKE_MEM_DEFINED(data, bytes);
- if (bytes > 0) {
- data[bytes-1] |= top_mask;
- data[0] |= bot_mask;
- }
- return ret;
-}
+
static ERL_NIF_TERM strong_rand_mpint_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Bytes, TopMask, BottomMask) */
unsigned bits;
@@ -2133,8 +2004,6 @@ static ERL_NIF_TERM strong_rand_mpint_nif(ErlNifEnv* env, int argc, const ERL_NI
unsigned dlen;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!enif_get_uint(env, argv[0], &bits)
|| !enif_get_int(env, argv[1], &top)
|| !enif_get_int(env, argv[2], &bottom)) {
@@ -2203,8 +2072,6 @@ static ERL_NIF_TERM rand_uniform_nif(ErlNifEnv* env, int argc, const ERL_NIF_TER
unsigned dlen;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!get_bn_from_mpint(env, argv[0], &bn_from)
|| !get_bn_from_mpint(env, argv[1], &bn_rand)) {
if (bn_from) BN_free(bn_from);
@@ -2236,8 +2103,6 @@ static ERL_NIF_TERM mod_exp_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
unsigned extra_byte;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!get_bn_from_bin(env, argv[0], &bn_base)
|| !get_bn_from_bin(env, argv[1], &bn_exponent)
|| !get_bn_from_bin(env, argv[2], &bn_modulo)
@@ -2269,46 +2134,17 @@ static ERL_NIF_TERM mod_exp_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
}
static ERL_NIF_TERM dss_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (DigestType|none, Data|{digest,Digest}, Signature,Key=[P, Q, G, Y]) */
- ErlNifBinary data_bin, sign_bin;
+{/* (sha, Digest, Signature,Key=[P, Q, G, Y]) */
+ ErlNifBinary digest_bin, sign_bin;
BIGNUM *dsa_p = NULL, *dsa_q = NULL, *dsa_g = NULL, *dsa_y = NULL;
- unsigned char hmacbuf[SHA_DIGEST_LENGTH];
- unsigned char* digest;
ERL_NIF_TERM head, tail;
- const ERL_NIF_TERM* tpl_terms;
- int tpl_arity;
DSA *dsa;
int i;
- CHECK_OSE_CRYPTO();
-
- if (argv[0] == atom_sha) {
- if (enif_get_tuple(env, argv[1], &tpl_arity, &tpl_terms)) {
- if (tpl_arity != 2 || tpl_terms[0] != atom_digest
- || !enif_inspect_binary(env, tpl_terms[1], &data_bin)
- || data_bin.size != SHA_DIGEST_LENGTH) {
-
- return enif_make_badarg(env);
- }
- digest = data_bin.data;
- }
- else {
- if (!enif_inspect_binary(env, argv[1], &data_bin)) {
- return enif_make_badarg(env);
- }
- SHA1(data_bin.data, data_bin.size, hmacbuf);
- digest = hmacbuf;
- }
- }
- else if (argv[0] == atom_none && enif_inspect_binary(env, argv[1], &data_bin)
- && data_bin.size == SHA_DIGEST_LENGTH) {
- digest = data_bin.data;
- }
- else {
- return enif_make_badarg(env);
- }
-
- if (!enif_inspect_binary(env, argv[2], &sign_bin)
+ if (!argv[0] == atom_sha
+ || !enif_inspect_binary(env, argv[1], &digest_bin)
+ || digest_bin.size != SHA_DIGEST_LENGTH
+ || !enif_inspect_binary(env, argv[2], &sign_bin)
|| !enif_get_list_cell(env, argv[3], &head, &tail)
|| !get_bn_from_bin(env, head, &dsa_p)
|| !enif_get_list_cell(env, tail, &head, &tail)
@@ -2332,136 +2168,86 @@ static ERL_NIF_TERM dss_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
dsa->g = dsa_g;
dsa->priv_key = NULL;
dsa->pub_key = dsa_y;
- i = DSA_verify(0, digest, SHA_DIGEST_LENGTH,
+ i = DSA_verify(0, digest_bin.data, SHA_DIGEST_LENGTH,
sign_bin.data, sign_bin.size, dsa);
DSA_free(dsa);
return(i > 0) ? atom_true : atom_false;
}
-
-static void md5_digest(unsigned char* in, unsigned int in_len, unsigned char* out)
-{
- MD5(in, in_len, out);
-}
-static void sha1_digest(unsigned char* in, unsigned int in_len, unsigned char* out)
-{
- SHA1(in, in_len, out);
-}
-#ifdef HAVE_SHA224
-static void sha224_digest(unsigned char* in, unsigned int in_len, unsigned char* out)
-{
- SHA224(in, in_len, out);
-}
-#endif
-#ifdef HAVE_SHA256
-static void sha256_digest(unsigned char* in, unsigned int in_len, unsigned char* out)
-{
- SHA256(in, in_len, out);
-}
-#endif
-#ifdef HAVE_SHA384
-static void sha384_digest(unsigned char* in, unsigned int in_len, unsigned char* out)
-{
- SHA384(in, in_len, out);
-}
-#endif
-#ifdef HAVE_SHA512
-static void sha512_digest(unsigned char* in, unsigned int in_len, unsigned char* out)
-{
- SHA512(in, in_len, out);
-}
-#endif
-
-struct digest_type_t {
- const char* type_str;
- unsigned len; /* 0 if notsup */
- int NID_type;
- void (*funcp)(unsigned char* in, unsigned int in_len, unsigned char* out);
- ERL_NIF_TERM type_atom;
-};
-
-struct digest_type_t digest_types[] =
-{
- {"md5", MD5_DIGEST_LENGTH, NID_md5, md5_digest},
- {"sha", SHA_DIGEST_LENGTH, NID_sha1, sha1_digest},
- {"sha224",
-#ifdef HAVE_SHA224
- SHA224_LEN, NID_sha224, sha224_digest
-#else
- 0
-#endif
- },
- {"sha256",
-#ifdef HAVE_SHA256
- SHA256_LEN, NID_sha256, sha256_digest
-#else
- 0
-#endif
- },
- {"sha384",
-#ifdef HAVE_SHA384
- SHA384_LEN, NID_sha384, sha384_digest
-#else
- 0
-#endif
- },
- {"sha512",
-#ifdef HAVE_SHA512
- SHA512_LEN, NID_sha512, sha512_digest
-#else
- 0
-#endif
- },
- {NULL}
-};
-
static void init_digest_types(ErlNifEnv* env)
{
struct digest_type_t* p = digest_types;
- for (p = digest_types; p->type_str; p++) {
- p->type_atom = enif_make_atom(env, p->type_str);
+ for (p = digest_types; p->type.str; p++) {
+ p->type.atom = enif_make_atom(env, p->type.str);
+ if (p->md.funcp)
+ p->md.p = p->md.funcp();
}
+ p->type.atom = atom_false; /* end marker */
+}
+
+static void init_cipher_types(ErlNifEnv* env)
+{
+ struct cipher_type_t* p = cipher_types;
+ for (p = cipher_types; p->type.str; p++) {
+ p->type.atom = enif_make_atom(env, p->type.str);
+ if (p->cipher.funcp)
+ p->cipher.p = p->cipher.funcp();
+ }
+ p->type.atom = atom_false; /* end marker */
}
static struct digest_type_t* get_digest_type(ERL_NIF_TERM type)
{
struct digest_type_t* p = NULL;
- for (p = digest_types; p->type_str; p++) {
- if (type == p->type_atom) {
+ for (p = digest_types; p->type.atom != atom_false; p++) {
+ if (type == p->type.atom) {
return p;
}
}
return NULL;
}
-static ERL_NIF_TERM rsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Type, Data|{digest,Digest}, Signature, Key=[E,N]) */
- ErlNifBinary data_bin, sign_bin;
- unsigned char hmacbuf[SHA512_LEN];
- ERL_NIF_TERM head, tail, ret;
- int i;
- RSA* rsa;
- const ERL_NIF_TERM type = argv[0];
- const ERL_NIF_TERM* tpl_terms;
- int tpl_arity;
- struct digest_type_t* digp = NULL;
- unsigned char* digest = NULL;
+static struct cipher_type_t* get_cipher_type(ERL_NIF_TERM type, size_t key_len)
+{
+ struct cipher_type_t* p = NULL;
+ for (p = cipher_types; p->type.atom != atom_false; p++) {
+ if (type == p->type.atom && (!p->key_len || key_len == p->key_len)) {
+ return p;
+ }
+ }
+ return NULL;
+}
- CHECK_OSE_CRYPTO();
+static ERL_NIF_TERM rsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{/* (Type, Digest, Signature, Key=[E,N]) */
+ ErlNifBinary digest_bin, sign_bin;
+ ERL_NIF_TERM head, tail, ret;
+ int i;
+ RSA *rsa;
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
+ EVP_PKEY *pkey;
+ EVP_PKEY_CTX *ctx;
+#endif
+ const EVP_MD *md;
+ const ERL_NIF_TERM type = argv[0];
+ struct digest_type_t *digp = NULL;
digp = get_digest_type(type);
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->len) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
rsa = RSA_new();
- if (!enif_inspect_binary(env, argv[2], &sign_bin)
+ if (!enif_inspect_binary(env, argv[1], &digest_bin)
+ || digest_bin.size != EVP_MD_size(md)
+ || !enif_inspect_binary(env, argv[2], &sign_bin)
|| !enif_get_list_cell(env, argv[3], &head, &tail)
|| !get_bn_from_bin(env, head, &rsa->e)
|| !enif_get_list_cell(env, tail, &head, &tail)
@@ -2471,27 +2257,24 @@ static ERL_NIF_TERM rsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
ret = enif_make_badarg(env);
goto done;
}
- if (enif_get_tuple(env, argv[1], &tpl_arity, &tpl_terms)) {
- if (tpl_arity != 2 || tpl_terms[0] != atom_digest
- || !enif_inspect_binary(env, tpl_terms[1], &data_bin)
- || data_bin.size != digp->len) {
- ret = enif_make_badarg(env);
- goto done;
- }
- digest = data_bin.data;
- }
- else if (enif_inspect_binary(env, argv[1], &data_bin)) {
- digest = hmacbuf;
- digp->funcp(data_bin.data, data_bin.size, digest);
- }
- else {
- ret = enif_make_badarg(env);
- goto done;
- }
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
+ pkey = EVP_PKEY_new();
+ EVP_PKEY_set1_RSA(pkey, rsa);
- i = RSA_verify(digp->NID_type, digest, digp->len,
+ ctx = EVP_PKEY_CTX_new(pkey, NULL);
+ EVP_PKEY_verify_init(ctx);
+ EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING);
+ EVP_PKEY_CTX_set_signature_md(ctx, md);
+
+ i = EVP_PKEY_verify(ctx, sign_bin.data, sign_bin.size,
+ digest_bin.data, digest_bin.size);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+#else
+ i = RSA_verify(md->type, digest_bin.data, EVP_MD_size(md),
sign_bin.data, sign_bin.size, rsa);
+#endif
ret = (i==1 ? atom_true : atom_false);
@@ -2500,109 +2283,6 @@ done:
return ret;
}
-
-static ERL_NIF_TERM aes_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, IVec, Data, IsEncrypt) */
- ErlNifBinary key_bin, ivec_bin, data_bin;
- unsigned char ivec[16];
- int enc, i = 0, outlen = 0;
- EVP_CIPHER_CTX ctx;
- const EVP_CIPHER *cipher = NULL;
- unsigned char* ret_ptr;
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
- || (key_bin.size != 16 && key_bin.size != 32)
- || !enif_inspect_binary(env, argv[1], &ivec_bin)
- || ivec_bin.size != 16
- || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)
- || data_bin.size % 16 != 0) {
-
- return enif_make_badarg(env);
- }
-
- if (argv[3] == atom_true)
- enc = 1;
- else
- enc = 0;
-
- EVP_CIPHER_CTX_init(&ctx);
-
- if (key_bin.size == 16)
- cipher = EVP_aes_128_cbc();
- else if (key_bin.size == 32)
- cipher = EVP_aes_256_cbc();
-
- memcpy(ivec, ivec_bin.data, 16); /* writeable copy */
-
- /* openssl docs say we need to leave at least 3 blocks available
- at the end of the buffer for EVP calls. let's be safe */
- ret_ptr = enif_make_new_binary(env, data_bin.size + 16*3, &ret);
-
- if (EVP_CipherInit_ex(&ctx, cipher, NULL, key_bin.data, ivec, enc) != 1)
- return enif_make_badarg(env);
-
- /* disable padding, we only handle whole blocks */
- EVP_CIPHER_CTX_set_padding(&ctx, 0);
-
- if (EVP_CipherUpdate(&ctx, ret_ptr, &i, data_bin.data, data_bin.size) != 1)
- return enif_make_badarg(env);
- outlen += i;
- if (EVP_CipherFinal_ex(&ctx, ret_ptr + outlen, &i) != 1)
- return enif_make_badarg(env);
- outlen += i;
-
- EVP_CIPHER_CTX_cleanup(&ctx);
-
- CONSUME_REDS(env,data_bin);
-
- /* the garbage collector is going to love this */
- return enif_make_sub_binary(env, ret, 0, outlen);
-}
-
-static ERL_NIF_TERM aes_ige_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, IVec, Data, IsEncrypt) */
-#ifdef HAVE_AES_IGE
- ErlNifBinary key_bin, ivec_bin, data_bin;
- AES_KEY aes_key;
- unsigned char ivec[32];
- int i;
- unsigned char* ret_ptr;
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
- || (key_bin.size != 16 && key_bin.size != 32)
- || !enif_inspect_binary(env, argv[1], &ivec_bin)
- || ivec_bin.size != 32
- || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)
- || data_bin.size % 16 != 0) {
-
- return enif_make_badarg(env);
- }
-
- if (argv[3] == atom_true) {
- i = AES_ENCRYPT;
- AES_set_encrypt_key(key_bin.data, key_bin.size*8, &aes_key);
- }
- else {
- i = AES_DECRYPT;
- AES_set_decrypt_key(key_bin.data, key_bin.size*8, &aes_key);
- }
-
- ret_ptr = enif_make_new_binary(env, data_bin.size, &ret);
- memcpy(ivec, ivec_bin.data, 32); /* writable copy */
- AES_ige_encrypt(data_bin.data, ret_ptr, data_bin.size, &aes_key, ivec, i);
- CONSUME_REDS(env,data_bin);
- return ret;
-#else
- return atom_notsup;
-#endif
-}
-
static ERL_NIF_TERM do_exor(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Data1, Data2) */
ErlNifBinary d1, d2;
@@ -2610,8 +2290,6 @@ static ERL_NIF_TERM do_exor(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
int i;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!enif_inspect_iolist_as_binary(env,argv[0], &d1)
|| !enif_inspect_iolist_as_binary(env,argv[1], &d2)
|| d1.size != d2.size) {
@@ -2632,8 +2310,6 @@ static ERL_NIF_TERM rc4_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
RC4_KEY rc4_key;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!enif_inspect_iolist_as_binary(env,argv[0], &key)
|| !enif_inspect_iolist_as_binary(env,argv[1], &data)) {
return enif_make_badarg(env);
@@ -2650,8 +2326,6 @@ static ERL_NIF_TERM rc4_set_key(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
ErlNifBinary key;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!enif_inspect_iolist_as_binary(env,argv[0], &key)) {
return enif_make_badarg(env);
}
@@ -2667,8 +2341,6 @@ static ERL_NIF_TERM rc4_encrypt_with_state(ErlNifEnv* env, int argc, const ERL_N
RC4_KEY* rc4_key;
ERL_NIF_TERM new_state, new_data;
- CHECK_OSE_CRYPTO();
-
if (!enif_inspect_iolist_as_binary(env,argv[0], &state)
|| state.size != sizeof(RC4_KEY)
|| !enif_inspect_iolist_as_binary(env,argv[1], &data)) {
@@ -2682,35 +2354,6 @@ static ERL_NIF_TERM rc4_encrypt_with_state(ErlNifEnv* env, int argc, const ERL_N
return enif_make_tuple2(env,new_state,new_data);
}
-static ERL_NIF_TERM rc2_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key,IVec,Data,IsEncrypt) */
- ErlNifBinary key_bin, ivec_bin, data_bin;
- RC2_KEY rc2_key;
- ERL_NIF_TERM ret;
- unsigned char iv_copy[8];
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
- || (key_bin.size != 5 && key_bin.size != 8 && key_bin.size != 16)
- || !enif_inspect_binary(env, argv[1], &ivec_bin)
- || ivec_bin.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)
- || data_bin.size % 8 != 0) {
- return enif_make_badarg(env);
- }
-
- RC2_set_key(&rc2_key, key_bin.size, key_bin.data, key_bin.size*8);
- memcpy(iv_copy, ivec_bin.data, 8);
- RC2_cbc_encrypt(data_bin.data,
- enif_make_new_binary(env, data_bin.size, &ret),
- data_bin.size, &rc2_key,
- iv_copy,
- (argv[3] == atom_true));
- CONSUME_REDS(env,data_bin);
- return ret;
-}
-
static int get_rsa_private_key(ErlNifEnv* env, ERL_NIF_TERM key, RSA *rsa)
{
/* key=[E,N,D]|[E,N,D,P1,P2,E1,E2,C] */
@@ -2740,42 +2383,32 @@ static int get_rsa_private_key(ErlNifEnv* env, ERL_NIF_TERM key, RSA *rsa)
}
static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Type, Data|{digest,Digest}, Key=[E,N,D]|[E,N,D,P1,P2,E1,E2,C]) */
- ErlNifBinary data_bin, ret_bin;
- unsigned char hmacbuf[SHA512_LEN];
- unsigned rsa_s_len;
- RSA* rsa;
- int i;
- const ERL_NIF_TERM* tpl_terms;
- int tpl_arity;
+{/* (Type, Digest, Key=[E,N,D]|[E,N,D,P1,P2,E1,E2,C]) */
+ ErlNifBinary digest_bin, ret_bin;
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
+ EVP_PKEY *pkey;
+ EVP_PKEY_CTX *ctx;
+ size_t rsa_s_len;
+#else
+ unsigned rsa_s_len, len;
+#endif
+ RSA *rsa;
+ int i;
struct digest_type_t *digp;
- unsigned char* digest;
-
- CHECK_OSE_CRYPTO();
+ const EVP_MD *md;
digp = get_digest_type(argv[0]);
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->len) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
- if (enif_get_tuple(env, argv[1], &tpl_arity, &tpl_terms)) {
- if (tpl_arity != 2 || tpl_terms[0] != atom_digest
- || !enif_inspect_binary(env, tpl_terms[1], &data_bin)
- || data_bin.size != digp->len) {
-
- return enif_make_badarg(env);
- }
- digest = data_bin.data;
- }
- else {
- if (!enif_inspect_binary(env,argv[1],&data_bin)) {
- return enif_make_badarg(env);
- }
- digest = hmacbuf;
- digp->funcp(data_bin.data, data_bin.size, digest);
+ if (!enif_inspect_binary(env,argv[1],&digest_bin)
+ || digest_bin.size != EVP_MD_size(md)) {
+ return enif_make_badarg(env);
}
rsa = RSA_new();
@@ -2785,14 +2418,33 @@ static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
}
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
+ pkey = EVP_PKEY_new();
+ EVP_PKEY_set1_RSA(pkey, rsa);
+ rsa_s_len=(size_t)EVP_PKEY_size(pkey);
+ enif_alloc_binary(rsa_s_len, &ret_bin);
+
+ ctx = EVP_PKEY_CTX_new(pkey, NULL);
+ EVP_PKEY_sign_init(ctx);
+ EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING);
+ EVP_PKEY_CTX_set_signature_md(ctx, md);
+
+ i = EVP_PKEY_sign(ctx, ret_bin.data, &rsa_s_len,
+ digest_bin.data, digest_bin.size);
+ ASSERT(i<=0 || rsa_s_len <= ret_bin.size);
+ EVP_PKEY_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+#else
enif_alloc_binary(RSA_size(rsa), &ret_bin);
+ len = EVP_MD_size(md);
- ERL_VALGRIND_ASSERT_MEM_DEFINED(digest, digp->len);
- i = RSA_sign(digp->NID_type, digest, digp->len,
+ ERL_VALGRIND_ASSERT_MEM_DEFINED(digest_bin.data, len);
+ i = RSA_sign(md->type, digest_bin.data, len,
ret_bin.data, &rsa_s_len, rsa);
+#endif
RSA_free(rsa);
- if (i) {
+ if (i > 0) {
ERL_VALGRIND_MAKE_MEM_DEFINED(ret_bin.data, rsa_s_len);
if (rsa_s_len != ret_bin.size) {
enif_realloc_binary(&ret_bin, rsa_s_len);
@@ -2808,44 +2460,16 @@ static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
static ERL_NIF_TERM dss_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (DigesType|none, Data|{digest,Digest}, Key=[P,Q,G,PrivKey]) */
- ErlNifBinary data_bin, ret_bin;
+{/* (sha, Digest, Key=[P,Q,G,PrivKey]) */
+ ErlNifBinary digest_bin, ret_bin;
ERL_NIF_TERM head, tail;
- unsigned char hmacbuf[SHA_DIGEST_LENGTH];
unsigned int dsa_s_len;
- const ERL_NIF_TERM* tpl_terms;
- int tpl_arity;
- unsigned char* digest = NULL;
DSA* dsa;
int i;
- CHECK_OSE_CRYPTO();
-
- if (argv[0] == atom_sha) {
- if (enif_get_tuple(env, argv[1], &tpl_arity, &tpl_terms)) {
- if (tpl_arity != 2 || tpl_terms[0] != atom_digest
- || !enif_inspect_binary(env, tpl_terms[1], &data_bin)
- || data_bin.size != SHA_DIGEST_LENGTH) {
-
- return enif_make_badarg(env);
- }
- digest = data_bin.data;
- }
- else {
- if (!enif_inspect_binary(env,argv[1],&data_bin)) {
- return enif_make_badarg(env);
- }
- SHA1(data_bin.data, data_bin.size, hmacbuf);
- digest = hmacbuf;
- }
- }
- else if (argv[0] == atom_none
- && enif_inspect_binary(env,argv[1],&data_bin)
- && data_bin.size == SHA_DIGEST_LENGTH) {
-
- digest = data_bin.data;
- }
- else {
+ if (!argv[0] == atom_sha
+ || !enif_inspect_binary(env, argv[1], &digest_bin)
+ || digest_bin.size != SHA_DIGEST_LENGTH) {
return enif_make_badarg(env);
}
@@ -2866,7 +2490,7 @@ static ERL_NIF_TERM dss_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
}
enif_alloc_binary(DSA_size(dsa), &ret_bin);
- i = DSA_sign(NID_sha1, digest, SHA_DIGEST_LENGTH,
+ i = DSA_sign(NID_sha1, digest_bin.data, SHA_DIGEST_LENGTH,
ret_bin.data, &dsa_s_len, dsa);
DSA_free(dsa);
if (i) {
@@ -2906,8 +2530,6 @@ static ERL_NIF_TERM rsa_public_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TER
int padding, i;
RSA* rsa;
- CHECK_OSE_CRYPTO();
-
rsa = RSA_new();
if (!enif_inspect_binary(env, argv[0], &data_bin)
@@ -2956,8 +2578,6 @@ static ERL_NIF_TERM rsa_private_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TE
int padding, i;
RSA* rsa;
- CHECK_OSE_CRYPTO();
-
rsa = RSA_new();
if (!enif_inspect_binary(env, argv[0], &data_bin)
@@ -3004,8 +2624,6 @@ static ERL_NIF_TERM dh_generate_parameters_nif(ErlNifEnv* env, int argc, const E
unsigned char *p_ptr, *g_ptr;
ERL_NIF_TERM ret_p, ret_g;
- CHECK_OSE_CRYPTO();
-
if (!enif_get_int(env, argv[0], &prime_len)
|| !enif_get_int(env, argv[1], &generator)) {
@@ -3033,8 +2651,6 @@ static ERL_NIF_TERM dh_check(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
int i;
ERL_NIF_TERM ret, head, tail;
- CHECK_OSE_CRYPTO();
-
dh_params = DH_new();
if (!enif_get_list_cell(env, argv[0], &head, &tail)
@@ -3069,8 +2685,6 @@ static ERL_NIF_TERM dh_generate_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_
ERL_NIF_TERM ret, ret_pub, ret_prv, head, tail;
int mpint; /* 0 or 4 */
- CHECK_OSE_CRYPTO();
-
dh_params = DH_new();
if (!(get_bn_from_bin(env, argv[0], &dh_params->priv_key)
@@ -3115,8 +2729,6 @@ static ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_T
ErlNifBinary ret_bin;
ERL_NIF_TERM ret, head, tail;
- CHECK_OSE_CRYPTO();
-
dh_params = DH_new();
if (!get_bn_from_bin(env, argv[0], &pubkey)
@@ -3139,7 +2751,7 @@ static ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_T
ret = enif_make_binary(env, &ret_bin);
}
else {
- enif_release_binary(&ret_bin);
+ enif_release_binary(&ret_bin);
ret = atom_error;
}
}
@@ -3157,8 +2769,6 @@ static ERL_NIF_TERM srp_value_B_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
unsigned dlen;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!get_bn_from_bin(env, argv[0], &bn_multiplier)
|| !get_bn_from_bin(env, argv[1], &bn_verifier)
|| !get_bn_from_bin(env, argv[2], &bn_generator)
@@ -3219,8 +2829,6 @@ static ERL_NIF_TERM srp_user_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_
unsigned dlen;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!get_bn_from_bin(env, argv[0], &bn_a)
|| !get_bn_from_bin(env, argv[1], &bn_u)
|| !get_bn_from_bin(env, argv[2], &bn_B)
@@ -3300,8 +2908,6 @@ static ERL_NIF_TERM srp_host_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_
unsigned dlen;
ERL_NIF_TERM ret;
- CHECK_OSE_CRYPTO();
-
if (!get_bn_from_bin(env, argv[0], &bn_verifier)
|| !get_bn_from_bin(env, argv[1], &bn_b)
|| !get_bn_from_bin(env, argv[2], &bn_u)
@@ -3354,103 +2960,6 @@ static ERL_NIF_TERM srp_host_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_
return ret;
}
-static ERL_NIF_TERM bf_cfb64_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Ivec, Data, IsEncrypt) */
- ErlNifBinary key_bin, ivec_bin, data_bin;
- BF_KEY bf_key; /* blowfish key 8 */
- unsigned char bf_tkey[8]; /* blowfish ivec */
- int bf_n = 0; /* blowfish ivec pos */
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
- || !enif_inspect_binary(env, argv[1], &ivec_bin)
- || ivec_bin.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)) {
- return enif_make_badarg(env);
- }
-
- BF_set_key(&bf_key, key_bin.size, key_bin.data);
- memcpy(bf_tkey, ivec_bin.data, 8);
- BF_cfb64_encrypt(data_bin.data, enif_make_new_binary(env,data_bin.size,&ret),
- data_bin.size, &bf_key, bf_tkey, &bf_n,
- (argv[3] == atom_true ? BF_ENCRYPT : BF_DECRYPT));
- CONSUME_REDS(env,data_bin);
- return ret;
-}
-
-static ERL_NIF_TERM bf_cbc_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Ivec, Data, IsEncrypt) */
- ErlNifBinary key_bin, ivec_bin, data_bin;
- BF_KEY bf_key; /* blowfish key 8 */
- unsigned char bf_tkey[8]; /* blowfish ivec */
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
- || !enif_inspect_binary(env, argv[1], &ivec_bin)
- || ivec_bin.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)
- || data_bin.size % 8 != 0) {
- return enif_make_badarg(env);
- }
-
- BF_set_key(&bf_key, key_bin.size, key_bin.data);
- memcpy(bf_tkey, ivec_bin.data, 8);
- BF_cbc_encrypt(data_bin.data, enif_make_new_binary(env,data_bin.size,&ret),
- data_bin.size, &bf_key, bf_tkey,
- (argv[3] == atom_true ? BF_ENCRYPT : BF_DECRYPT));
- CONSUME_REDS(env,data_bin);
- return ret;
-}
-
-static ERL_NIF_TERM bf_ecb_crypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, Data, IsEncrypt) */
- ErlNifBinary key_bin, data_bin;
- BF_KEY bf_key; /* blowfish key 8 */
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
- || !enif_inspect_iolist_as_binary(env, argv[1], &data_bin)
- || data_bin.size < 8) {
- return enif_make_badarg(env);
- }
- BF_set_key(&bf_key, key_bin.size, key_bin.data);
- BF_ecb_encrypt(data_bin.data, enif_make_new_binary(env,data_bin.size,&ret),
- &bf_key, (argv[2] == atom_true ? BF_ENCRYPT : BF_DECRYPT));
- CONSUME_REDS(env,data_bin);
- return ret;
-}
-
-static ERL_NIF_TERM blowfish_ofb64_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Key, IVec, Data) */
- ErlNifBinary key_bin, ivec_bin, data_bin;
- BF_KEY bf_key; /* blowfish key 8 */
- unsigned char bf_tkey[8]; /* blowfish ivec */
- int bf_n = 0; /* blowfish ivec pos */
- ERL_NIF_TERM ret;
-
- CHECK_OSE_CRYPTO();
-
- if (!enif_inspect_iolist_as_binary(env, argv[0], &key_bin)
- || !enif_inspect_binary(env, argv[1], &ivec_bin)
- || ivec_bin.size != 8
- || !enif_inspect_iolist_as_binary(env, argv[2], &data_bin)) {
- return enif_make_badarg(env);
- }
-
- BF_set_key(&bf_key, key_bin.size, key_bin.data);
- memcpy(bf_tkey, ivec_bin.data, 8);
- BF_ofb64_encrypt(data_bin.data, enif_make_new_binary(env,data_bin.size,&ret),
- data_bin.size, &bf_key, bf_tkey, &bf_n);
- CONSUME_REDS(env,data_bin);
- return ret;
-}
-
#if defined(HAVE_EC)
static EC_KEY* ec_key_new(ErlNifEnv* env, ERL_NIF_TERM curve_arg)
{
@@ -3467,8 +2976,7 @@ static EC_KEY* ec_key_new(ErlNifEnv* env, ERL_NIF_TERM curve_arg)
EC_POINT *point = NULL;
/* {Field, Prime, Point, Order, CoFactor} = Curve */
- if (enif_is_tuple(env, curve_arg)
- && enif_get_tuple(env,curve_arg,&c_arity,&curve)
+ if (enif_get_tuple(env,curve_arg,&c_arity,&curve)
&& c_arity == 5
&& get_bn_from_bin(env, curve[3], &bn_order)
&& (curve[4] != atom_none && get_bn_from_bin(env, curve[4], &cofactor))) {
@@ -3505,9 +3013,11 @@ static EC_KEY* ec_key_new(ErlNifEnv* env, ERL_NIF_TERM curve_arg)
/* create the EC_GROUP structure */
group = EC_GROUP_new_curve_GFp(p, a, b, NULL);
-#if !defined(OPENSSL_NO_EC2M)
-
} else if (f_arity == 3 && field[0] == atom_characteristic_two_field) {
+#if defined(OPENSSL_NO_EC2M)
+ enif_raise_exception(env, atom_notsup);
+ goto out_err;
+#else
/* {characteristic_two_field, M, Basis} */
int b_arity = -1;
@@ -3762,8 +3272,6 @@ static ERL_NIF_TERM ec_key_generate(ErlNifEnv* env, int argc, const ERL_NIF_TERM
ERL_NIF_TERM priv_key;
ERL_NIF_TERM pub_key = atom_undefined;
- CHECK_OSE_CRYPTO();
-
if (!get_ec_key(env, argv[0], argv[1], atom_undefined, &key))
goto badarg;
@@ -3786,58 +3294,40 @@ static ERL_NIF_TERM ec_key_generate(ErlNifEnv* env, int argc, const ERL_NIF_TERM
badarg:
if (key)
EC_KEY_free(key);
- return enif_make_badarg(env);
+ return make_badarg_maybe(env);
#else
return atom_notsup;
#endif
}
static ERL_NIF_TERM ecdsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Type, Data|{digest,Digest}, Curve, Key) */
+{/* (Type, Digest, Curve, Key) */
#if defined(HAVE_EC)
- ErlNifBinary data_bin, ret_bin;
- unsigned char hmacbuf[SHA_DIGEST_LENGTH];
+ ErlNifBinary digest_bin, ret_bin;
unsigned int dsa_s_len;
EC_KEY* key = NULL;
- int i;
- const ERL_NIF_TERM* tpl_terms;
- int tpl_arity;
+ int i, len;
struct digest_type_t *digp;
- unsigned char* digest;
-
- CHECK_OSE_CRYPTO();
+ const EVP_MD *md;
digp = get_digest_type(argv[0]);
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->len) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
+ len = EVP_MD_size(md);
- if (!get_ec_key(env, argv[2], argv[3], atom_undefined, &key))
+ if (!enif_inspect_binary(env,argv[1],&digest_bin)
+ || digest_bin.size != len
+ || !get_ec_key(env, argv[2], argv[3], atom_undefined, &key))
goto badarg;
- if (enif_get_tuple(env, argv[1], &tpl_arity, &tpl_terms)) {
- if (tpl_arity != 2 || tpl_terms[0] != atom_digest
- || !enif_inspect_binary(env, tpl_terms[1], &data_bin)
- || data_bin.size != digp->len) {
-
- goto badarg;
- }
- digest = data_bin.data;
- }
- else {
- if (!enif_inspect_binary(env,argv[1],&data_bin)) {
- goto badarg;
- }
- digest = hmacbuf;
- digp->funcp(data_bin.data, data_bin.size, digest);
- }
-
enif_alloc_binary(ECDSA_size(key), &ret_bin);
- i = ECDSA_sign(digp->NID_type, digest, digp->len,
+ i = ECDSA_sign(md->type, digest_bin.data, len,
ret_bin.data, &dsa_s_len, key);
EC_KEY_free(key);
@@ -3855,57 +3345,39 @@ static ERL_NIF_TERM ecdsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
badarg:
if (key)
EC_KEY_free(key);
- return enif_make_badarg(env);
+ return make_badarg_maybe(env);
#else
return atom_notsup;
#endif
}
static ERL_NIF_TERM ecdsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{/* (Type, Data|{digest,Digest}, Signature, Curve, Key) */
+{/* (Type, Digest, Signature, Curve, Key) */
#if defined(HAVE_EC)
- ErlNifBinary data_bin, sign_bin;
- unsigned char hmacbuf[SHA512_LEN];
- int i;
+ ErlNifBinary digest_bin, sign_bin;
+ int i, len;
EC_KEY* key = NULL;
const ERL_NIF_TERM type = argv[0];
- const ERL_NIF_TERM* tpl_terms;
- int tpl_arity;
- struct digest_type_t* digp = NULL;
- unsigned char* digest = NULL;
-
- CHECK_OSE_CRYPTO();
+ struct digest_type_t *digp = NULL;
+ const EVP_MD *md;
digp = get_digest_type(type);
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->len) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
+ len = EVP_MD_size(md);
- if (!enif_inspect_binary(env, argv[2], &sign_bin)
+ if (!enif_inspect_binary(env, argv[1], &digest_bin)
+ || digest_bin.size != len
+ || !enif_inspect_binary(env, argv[2], &sign_bin)
|| !get_ec_key(env, argv[3], atom_undefined, argv[4], &key))
goto badarg;
- if (enif_get_tuple(env, argv[1], &tpl_arity, &tpl_terms)) {
- if (tpl_arity != 2 || tpl_terms[0] != atom_digest
- || !enif_inspect_binary(env, tpl_terms[1], &data_bin)
- || data_bin.size != digp->len) {
-
- goto badarg;
- }
- digest = data_bin.data;
- }
- else if (enif_inspect_binary(env, argv[1], &data_bin)) {
- digest = hmacbuf;
- digp->funcp(data_bin.data, data_bin.size, digest);
- }
- else {
- goto badarg;
- }
-
- i = ECDSA_verify(digp->NID_type, digest, digp->len,
+ i = ECDSA_verify(md->type, digest_bin.data, len,
sign_bin.data, sign_bin.size, key);
EC_KEY_free(key);
@@ -3915,7 +3387,7 @@ static ERL_NIF_TERM ecdsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TER
badarg:
if (key)
EC_KEY_free(key);
- return enif_make_badarg(env);
+ return make_badarg_maybe(env);
#else
return atom_notsup;
#endif
@@ -3939,10 +3411,8 @@ static ERL_NIF_TERM ecdh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF
EC_POINT *my_ecpoint;
EC_KEY *other_ecdh = NULL;
- CHECK_OSE_CRYPTO();
-
if (!get_ec_key(env, argv[1], argv[2], atom_undefined, &key))
- return enif_make_badarg(env);
+ return make_badarg_maybe(env);
group = EC_GROUP_dup(EC_KEY_get0_group(key));
priv_key = EC_KEY_get0_private_key(key);
@@ -3984,253 +3454,9 @@ out_err:
static ERL_NIF_TERM rand_seed_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
ErlNifBinary seed_bin;
- CHECK_OSE_CRYPTO();
+
if (!enif_inspect_binary(env, argv[0], &seed_bin))
return enif_make_badarg(env);
RAND_seed(seed_bin.data,seed_bin.size);
return atom_ok;
}
-
-
-/* HMAC */
-
-static void hmac_md5(unsigned char *key, int klen, unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf)
-{
- MD5_CTX ctx;
- char ipad[HMAC_INT_LEN];
- char opad[HMAC_INT_LEN];
- unsigned char nkey[MD5_LEN];
- int i;
-
- /* Change key if longer than 64 bytes */
- if (klen > HMAC_INT_LEN) {
- MD5(key, klen, nkey);
- key = nkey;
- klen = MD5_LEN;
- }
-
- memset(ipad, '\0', sizeof(ipad));
- memset(opad, '\0', sizeof(opad));
- memcpy(ipad, key, klen);
- memcpy(opad, key, klen);
-
- for (i = 0; i < HMAC_INT_LEN; i++) {
- ipad[i] ^= HMAC_IPAD;
- opad[i] ^= HMAC_OPAD;
- }
-
- /* inner MD5 */
- MD5_Init(&ctx);
- MD5_Update(&ctx, ipad, HMAC_INT_LEN);
- MD5_Update(&ctx, dbuf, dlen);
- MD5_Final((unsigned char *) hmacbuf, &ctx);
- /* outer MD5 */
- MD5_Init(&ctx);
- MD5_Update(&ctx, opad, HMAC_INT_LEN);
- MD5_Update(&ctx, hmacbuf, MD5_LEN);
- MD5_Final((unsigned char *) hmacbuf, &ctx);
-}
-
-static void hmac_sha1(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf)
-{
- SHA_CTX ctx;
- char ipad[HMAC_INT_LEN];
- char opad[HMAC_INT_LEN];
- unsigned char nkey[SHA_LEN];
- int i;
-
- /* Change key if longer than 64 bytes */
- if (klen > HMAC_INT_LEN) {
- SHA1(key, klen, nkey);
- key = nkey;
- klen = SHA_LEN;
- }
-
- memset(ipad, '\0', sizeof(ipad));
- memset(opad, '\0', sizeof(opad));
- memcpy(ipad, key, klen);
- memcpy(opad, key, klen);
-
- for (i = 0; i < HMAC_INT_LEN; i++) {
- ipad[i] ^= HMAC_IPAD;
- opad[i] ^= HMAC_OPAD;
- }
-
- /* inner SHA */
- SHA1_Init(&ctx);
- SHA1_Update(&ctx, ipad, HMAC_INT_LEN);
- SHA1_Update(&ctx, dbuf, dlen);
- SHA1_Final((unsigned char *) hmacbuf, &ctx);
- /* outer SHA */
- SHA1_Init(&ctx);
- SHA1_Update(&ctx, opad, HMAC_INT_LEN);
- SHA1_Update(&ctx, hmacbuf, SHA_LEN);
- SHA1_Final((unsigned char *) hmacbuf, &ctx);
-}
-
-#ifdef HAVE_SHA224
-static void hmac_sha224(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf)
-{
- SHA256_CTX ctx;
- char ipad[HMAC_INT_LEN];
- char opad[HMAC_INT_LEN];
- unsigned char nkey[SHA224_DIGEST_LENGTH];
- int i;
-
- /* Change key if longer than 64 bytes */
- if (klen > HMAC_INT_LEN) {
- SHA224(key, klen, nkey);
- key = nkey;
- klen = SHA224_DIGEST_LENGTH;
- }
-
- memset(ipad, '\0', sizeof(ipad));
- memset(opad, '\0', sizeof(opad));
- memcpy(ipad, key, klen);
- memcpy(opad, key, klen);
-
- for (i = 0; i < HMAC_INT_LEN; i++) {
- ipad[i] ^= HMAC_IPAD;
- opad[i] ^= HMAC_OPAD;
- }
-
- /* inner SHA */
- SHA224_Init(&ctx);
- SHA224_Update(&ctx, ipad, HMAC_INT_LEN);
- SHA224_Update(&ctx, dbuf, dlen);
- SHA224_Final((unsigned char *) hmacbuf, &ctx);
- /* outer SHA */
- SHA224_Init(&ctx);
- SHA224_Update(&ctx, opad, HMAC_INT_LEN);
- SHA224_Update(&ctx, hmacbuf, SHA224_DIGEST_LENGTH);
- SHA224_Final((unsigned char *) hmacbuf, &ctx);
-}
-#endif
-
-#ifdef HAVE_SHA256
-static void hmac_sha256(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf)
-{
- SHA256_CTX ctx;
- char ipad[HMAC_INT_LEN];
- char opad[HMAC_INT_LEN];
- unsigned char nkey[SHA256_DIGEST_LENGTH];
- int i;
-
- /* Change key if longer than 64 bytes */
- if (klen > HMAC_INT_LEN) {
- SHA256(key, klen, nkey);
- key = nkey;
- klen = SHA256_DIGEST_LENGTH;
- }
-
- memset(ipad, '\0', sizeof(ipad));
- memset(opad, '\0', sizeof(opad));
- memcpy(ipad, key, klen);
- memcpy(opad, key, klen);
-
- for (i = 0; i < HMAC_INT_LEN; i++) {
- ipad[i] ^= HMAC_IPAD;
- opad[i] ^= HMAC_OPAD;
- }
-
- /* inner SHA */
- SHA256_Init(&ctx);
- SHA256_Update(&ctx, ipad, HMAC_INT_LEN);
- SHA256_Update(&ctx, dbuf, dlen);
- SHA256_Final((unsigned char *) hmacbuf, &ctx);
- /* outer SHA */
- SHA256_Init(&ctx);
- SHA256_Update(&ctx, opad, HMAC_INT_LEN);
- SHA256_Update(&ctx, hmacbuf, SHA256_DIGEST_LENGTH);
- SHA256_Final((unsigned char *) hmacbuf, &ctx);
-}
-#endif
-
-#ifdef HAVE_SHA384
-static void hmac_sha384(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf)
-{
- SHA512_CTX ctx;
- char ipad[HMAC_INT2_LEN];
- char opad[HMAC_INT2_LEN];
- unsigned char nkey[SHA384_DIGEST_LENGTH];
- int i;
-
- /* Change key if longer than 64 bytes */
- if (klen > HMAC_INT2_LEN) {
- SHA384(key, klen, nkey);
- key = nkey;
- klen = SHA384_DIGEST_LENGTH;
- }
-
- memset(ipad, '\0', sizeof(ipad));
- memset(opad, '\0', sizeof(opad));
- memcpy(ipad, key, klen);
- memcpy(opad, key, klen);
-
- for (i = 0; i < HMAC_INT2_LEN; i++) {
- ipad[i] ^= HMAC_IPAD;
- opad[i] ^= HMAC_OPAD;
- }
-
- /* inner SHA */
- SHA384_Init(&ctx);
- SHA384_Update(&ctx, ipad, HMAC_INT2_LEN);
- SHA384_Update(&ctx, dbuf, dlen);
- SHA384_Final((unsigned char *) hmacbuf, &ctx);
- /* outer SHA */
- SHA384_Init(&ctx);
- SHA384_Update(&ctx, opad, HMAC_INT2_LEN);
- SHA384_Update(&ctx, hmacbuf, SHA384_DIGEST_LENGTH);
- SHA384_Final((unsigned char *) hmacbuf, &ctx);
-}
-#endif
-
-#ifdef HAVE_SHA512
-static void hmac_sha512(unsigned char *key, int klen,
- unsigned char *dbuf, int dlen,
- unsigned char *hmacbuf)
-{
- SHA512_CTX ctx;
- char ipad[HMAC_INT2_LEN];
- char opad[HMAC_INT2_LEN];
- unsigned char nkey[SHA512_DIGEST_LENGTH];
- int i;
-
- /* Change key if longer than 64 bytes */
- if (klen > HMAC_INT2_LEN) {
- SHA512(key, klen, nkey);
- key = nkey;
- klen = SHA512_DIGEST_LENGTH;
- }
-
- memset(ipad, '\0', sizeof(ipad));
- memset(opad, '\0', sizeof(opad));
- memcpy(ipad, key, klen);
- memcpy(opad, key, klen);
-
- for (i = 0; i < HMAC_INT2_LEN; i++) {
- ipad[i] ^= HMAC_IPAD;
- opad[i] ^= HMAC_OPAD;
- }
-
- /* inner SHA */
- SHA512_Init(&ctx);
- SHA512_Update(&ctx, ipad, HMAC_INT2_LEN);
- SHA512_Update(&ctx, dbuf, dlen);
- SHA512_Final((unsigned char *) hmacbuf, &ctx);
- /* outer SHA */
- SHA512_Init(&ctx);
- SHA512_Update(&ctx, opad, HMAC_INT2_LEN);
- SHA512_Update(&ctx, hmacbuf, SHA512_DIGEST_LENGTH);
- SHA512_Final((unsigned char *) hmacbuf, &ctx);
-}
-#endif
diff --git a/lib/crypto/c_src/crypto_callback.c b/lib/crypto/c_src/crypto_callback.c
index e0de16074c..3acbbf406b 100644
--- a/lib/crypto/c_src/crypto_callback.c
+++ b/lib/crypto/c_src/crypto_callback.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2014. All Rights Reserved.
+ * Copyright Ericsson AB 2014-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -43,6 +43,10 @@
#ifdef __WIN32__
# define DLLEXPORT __declspec(dllexport)
+#elif defined(__GNUC__) && __GNUC__ >= 4
+# define DLLEXPORT __attribute__ ((visibility("default")))
+#elif defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+# define DLLEXPORT __global
#else
# define DLLEXPORT
#endif
@@ -51,8 +55,6 @@
DLLEXPORT struct crypto_callbacks* get_crypto_callbacks(int nlocks);
-static ErlNifRWLock** lock_vec = NULL; /* Static locks used by openssl */
-
static void nomem(size_t size, const char* op)
{
fprintf(stderr, "Out of memory abort. Crypto failed to %s %zu bytes.\r\n",
@@ -84,6 +86,8 @@ static void crypto_free(void* ptr)
#ifdef OPENSSL_THREADS /* vvvvvvvvvvvvvvv OPENSSL_THREADS vvvvvvvvvvvvvvvv */
+static ErlNifRWLock** lock_vec = NULL; /* Static locks used by openssl */
+
#include <openssl/crypto.h>
static INLINE void locking(int mode, ErlNifRWLock* lock)
diff --git a/lib/crypto/c_src/crypto_callback.h b/lib/crypto/c_src/crypto_callback.h
index df5c99d4d3..894d86cfd9 100644
--- a/lib/crypto/c_src/crypto_callback.h
+++ b/lib/crypto/c_src/crypto_callback.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2012. All Rights Reserved.
+ * Copyright Ericsson AB 2012-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/crypto/doc/src/book.xml b/lib/crypto/doc/src/book.xml
index 43ed49113f..b8b2c935b3 100644
--- a/lib/crypto/doc/src/book.xml
+++ b/lib/crypto/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/crypto/doc/src/crypto.xml b/lib/crypto/doc/src/crypto.xml
index 563a090e98..5a5627747c 100644
--- a/lib/crypto/doc/src/crypto.xml
+++ b/lib/crypto/doc/src/crypto.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2014</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -135,9 +135,8 @@
<code>stream_cipher() = rc4 | aes_ctr </code>
- <code>block_cipher() = aes_cbc128 | aes_cfb8 | aes_cfb128 | aes_ige256 | blowfish_cbc |
- blowfish_cfb64 | des_cbc | des_cfb | des3_cbc | des3_cbf
- | des_ede3 | rc2_cbc </code>
+ <code>block_cipher() = aes_cbc | aes_cfb8 | aes_cfb128 | aes_ige256 | blowfish_cbc |
+ blowfish_cfb64 | des_cbc | des_cfb | des3_cbc | des3_cbf | des_ede3 | rc2_cbc </code>
<code>aead_cipher() = aes_gcm | chacha20_poly1305 </code>
@@ -160,8 +159,9 @@
<code> hash_algorithms() = md5 | ripemd160 | sha | sha224 | sha256 | sha384 | sha512 </code> <p>md4 is also supported for hash_init/1 and hash/2.
Note that both md4 and md5 are recommended only for compatibility with existing applications.
</p>
- <code> cipher_algorithms() = des_cbc | des_cfb | des3_cbc | des3_cbf | des_ede3 |
- blowfish_cbc | blowfish_cfb64 | aes_cbc128 | aes_cfb8 | aes_cfb128| aes_cbc256 | aes_ige256 | aes_gcm | chacha20_poly1305 | rc2_cbc | aes_ctr| rc4 </code>
+ <code> cipher_algorithms() = aes_cbc | aes_cfb8 | aes_cfb128 | aes_ctr | aes_gcm |
+ aes_ige256 | blowfish_cbc | blowfish_cfb64 | chacha20_poly1305 | des_cbc | des_cfb |
+ des3_cbc | des3_cbf | des_ede3 | rc2_cbc | rc4 </code>
<code> public_key_algorithms() = rsa |dss | ecdsa | dh | ecdh | ec_gf2m</code>
<p>Note that ec_gf2m is not strictly a public key algorithm, but a restriction on what curves are supported
with ecdsa and ecdh.
@@ -203,6 +203,7 @@
<func>
<name>block_encrypt(Type, Key, Ivec, PlainText) -> CipherText</name>
<name>block_encrypt(AeadType, Key, Ivec, {AAD, PlainText}) -> {CipherText, CipherTag}</name>
+ <name>block_encrypt(aes_gcm, Key, Ivec, {AAD, PlainText, TagLength}) -> {CipherText, CipherTag}</name>
<fsummary>Encrypt <c>PlainText</c> according to <c>Type</c> block cipher</fsummary>
<type>
<v>Type = block_cipher() </v>
@@ -210,6 +211,7 @@
<v>Key = block_key() </v>
<v>PlainText = iodata() </v>
<v>AAD = IVec = CipherText = CipherTag = binary()</v>
+ <v>TagLength = 1..16</v>
</type>
<desc>
<p>Encrypt <c>PlainText</c> according to <c>Type</c> block cipher.
@@ -306,6 +308,8 @@
<desc>
<p>Generates public keys of type <c>Type</c>.
See also <seealso marker="public_key:public_key#generate_key-1">public_key:generate_key/1</seealso>
+ May throw exception <c>low_entropy</c> in case the random generator
+ failed due to lack of secure "randomness".
</p>
</desc>
</func>
@@ -594,22 +598,6 @@
</func>
<func>
- <name>rand_bytes(N) -> binary()</name>
- <fsummary>Generate a binary of random bytes</fsummary>
- <type>
- <v>N = integer()</v>
- </type>
- <desc>
- <p>Generates N bytes randomly uniform 0..255, and returns the
- result in a binary. Uses the <c>crypto</c> library pseudo-random
- number generator.</p>
- <p>This function is not recommended for cryptographic purposes.
- Please use <seealso marker="#strong_rand_bytes/1">
- strong_rand_bytes/1</seealso> instead.</p>
- </desc>
- </func>
-
- <func>
<name>rand_seed(Seed) -> ok</name>
<fsummary>Set the seed for random bytes generation</fsummary>
<type>
diff --git a/lib/crypto/doc/src/crypto_app.xml b/lib/crypto/doc/src/crypto_app.xml
index 4ba2d34934..2b9e505988 100644
--- a/lib/crypto/doc/src/crypto_app.xml
+++ b/lib/crypto/doc/src/crypto_app.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2014</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/crypto/doc/src/licenses.xml b/lib/crypto/doc/src/licenses.xml
index 57d78f7bd9..e5c06cf7ce 100644
--- a/lib/crypto/doc/src/licenses.xml
+++ b/lib/crypto/doc/src/licenses.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/crypto/doc/src/notes.xml b/lib/crypto/doc/src/notes.xml
index 0138eb6ad2..7d3a85326f 100644
--- a/lib/crypto/doc/src/notes.xml
+++ b/lib/crypto/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,52 @@
</header>
<p>This document describes the changes made to the Crypto application.</p>
+<section><title>Crypto 3.7</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Refactor <c>crypto</c> to use the EVP interface of
+ OpenSSL, which is the recommended interface that also
+ enables access to hardware acceleration for some
+ operations.</p>
+ <p>
+ Own Id: OTP-12217</p>
+ </item>
+ <item>
+ <p>
+ Add support for 192-bit keys for the <c>aes_cbc</c>
+ cipher.</p>
+ <p>
+ Own Id: OTP-13206 Aux Id: pr 832 </p>
+ </item>
+ <item>
+ <p>
+ Add support for 192-bit keys for <c>aes_ecb</c>.</p>
+ <p>
+ Own Id: OTP-13207 Aux Id: pr829 </p>
+ </item>
+ <item>
+ <p>
+ Deprecate the function <c>crypto:rand_bytes</c> and make
+ sure that <c>crypto:strong_rand_bytes</c> is used in all
+ places that are cryptographically significant.</p>
+ <p>
+ Own Id: OTP-13214</p>
+ </item>
+ <item>
+ <p>
+ Enable AES-GCM encryption/decryption to change the tag
+ length between 1 to 16 bytes.</p>
+ <p>
+ Own Id: OTP-13483 Aux Id: PR-998 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Crypto 3.6.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/crypto/doc/src/ref_man.xml b/lib/crypto/doc/src/ref_man.xml
index ccdb5afb9b..14922cbcec 100644
--- a/lib/crypto/doc/src/ref_man.xml
+++ b/lib/crypto/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/crypto/doc/src/release_notes.xml b/lib/crypto/doc/src/release_notes.xml
index 5253027b9c..a2d7964455 100644
--- a/lib/crypto/doc/src/release_notes.xml
+++ b/lib/crypto/doc/src/release_notes.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/crypto/doc/src/usersguide.xml b/lib/crypto/doc/src/usersguide.xml
index 469ab10cc8..fb088a8285 100644
--- a/lib/crypto/doc/src/usersguide.xml
+++ b/lib/crypto/doc/src/usersguide.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/crypto/src/Makefile b/lib/crypto/src/Makefile
index 6e4008e434..456b8be64d 100644
--- a/lib/crypto/src/Makefile
+++ b/lib/crypto/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2014. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/crypto/src/crypto.app.src b/lib/crypto/src/crypto.app.src
index 70611bb637..8a47b8a78b 100644
--- a/lib/crypto/src/crypto.app.src
+++ b/lib/crypto/src/crypto.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/crypto/src/crypto.appup.src b/lib/crypto/src/crypto.appup.src
index ce13746a07..a177de22fb 100644
--- a/lib/crypto/src/crypto.appup.src
+++ b/lib/crypto/src/crypto.appup.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl
index 38e71591f3..025d57e9c5 100644
--- a/lib/crypto/src/crypto.erl
+++ b/lib/crypto/src/crypto.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
-export([generate_key/2, generate_key/3, compute_key/4]).
-export([hmac/3, hmac/4, hmac_init/2, hmac_update/2, hmac_final/1, hmac_final_n/2]).
-export([exor/2, strong_rand_bytes/1, mod_pow/3]).
--export([rand_bytes/1, rand_bytes/3, rand_uniform/2]).
+-export([rand_uniform/2]).
-export([block_encrypt/3, block_decrypt/3, block_encrypt/4, block_decrypt/4]).
-export([next_iv/2, next_iv/3]).
-export([stream_init/2, stream_init/3, stream_encrypt/2, stream_decrypt/2]).
@@ -39,6 +39,9 @@
-export([rand_seed/1]).
%% DEPRECATED
+-export([rand_bytes/1]).
+-deprecated({rand_bytes, 1, next_major_release}).
+
%% Replaced by hash_*
-export([md4/1, md4_init/0, md4_update/2, md4_final/1]).
-export([md5/1, md5_init/0, md5_update/2, md5_final/1]).
@@ -210,10 +213,8 @@ supports()->
{Hashs, PubKeys, Ciphers} = algorithms(),
[{hashs, Hashs},
- {ciphers, [des_cbc, des_cfb, des3_cbc, des_ede3, blowfish_cbc,
- blowfish_cfb64, blowfish_ofb64, blowfish_ecb, aes_cbc128, aes_cfb8, aes_cfb128,
- aes_cbc256, rc2_cbc, aes_ctr, rc4, aes_ecb] ++ Ciphers},
- {public_keys, [rsa, dss, dh, srp] ++ PubKeys}
+ {ciphers, Ciphers},
+ {public_keys, PubKeys}
].
info_lib() -> ?nif_stub.
@@ -222,20 +223,14 @@ info_lib() -> ?nif_stub.
hash(Hash, Data0) ->
Data = iolist_to_binary(Data0),
- MaxByts = max_bytes(),
- hash(Hash, Data, erlang:byte_size(Data), MaxByts, initial).
+ MaxBytes = max_bytes(),
+ hash(Hash, Data, erlang:byte_size(Data), MaxBytes).
-spec hash_init('md5'|'md4'|'ripemd160'|
'sha'|'sha224'|'sha256'|'sha384'|'sha512') -> any().
-hash_init(md5) -> {md5, md5_init()};
-hash_init(md4) -> {md4, md4_init()};
-hash_init(sha) -> {sha, sha_init()};
-hash_init(ripemd160) -> {ripemd160, ripemd160_init()};
-hash_init(sha224) -> {sha224, sha224_init()};
-hash_init(sha256) -> {sha256, sha256_init()};
-hash_init(sha384) -> {sha384, sha384_init()};
-hash_init(sha512) -> {sha512, sha512_init()}.
+hash_init(Hash) ->
+ notsup_to_error(hash_init_nif(Hash)).
-spec hash_update(_, iodata()) -> any().
@@ -246,14 +241,8 @@ hash_update(State, Data0) ->
-spec hash_final(_) -> binary().
-hash_final({md5,Context}) -> md5_final(Context);
-hash_final({md4,Context}) -> md4_final(Context);
-hash_final({sha,Context}) -> sha_final(Context);
-hash_final({ripemd160,Context}) -> ripemd160_final(Context);
-hash_final({sha224,Context}) -> sha224_final(Context);
-hash_final({sha256,Context}) -> sha256_final(Context);
-hash_final({sha384,Context}) -> sha384_final(Context);
-hash_final({sha512,Context}) -> sha512_final(Context).
+hash_final(State) ->
+ notsup_to_error(hash_final_nif(State)).
-spec hmac(_, iodata(), iodata()) -> binary().
@@ -265,151 +254,134 @@ hash_final({sha512,Context}) -> sha512_final(Context).
hmac(Type, Key, Data0) ->
Data = iolist_to_binary(Data0),
- hmac(Type, Key, Data, undefined, erlang:byte_size(Data), max_bytes(), initial).
+ hmac(Type, Key, Data, undefined, erlang:byte_size(Data), max_bytes()).
hmac(Type, Key, Data0, MacSize) ->
Data = iolist_to_binary(Data0),
- hmac(Type, Key, Data, MacSize, erlang:byte_size(Data), max_bytes(), initial).
+ hmac(Type, Key, Data, MacSize, erlang:byte_size(Data), max_bytes()).
-
-hmac_init(_Type, _Key) -> ?nif_stub.
+hmac_init(Type, Key) ->
+ notsup_to_error(hmac_init_nif(Type, Key)).
hmac_update(State, Data0) ->
Data = iolist_to_binary(Data0),
hmac_update(State, Data, erlang:byte_size(Data), max_bytes()).
-hmac_final(_Context) -> ? nif_stub.
-hmac_final_n(_Context, _HashLen) -> ? nif_stub.
+
+hmac_final(Context) ->
+ notsup_to_error(hmac_final_nif(Context)).
+hmac_final_n(Context, HashLen) ->
+ notsup_to_error(hmac_final_nif(Context, HashLen)).
%% Ecrypt/decrypt %%%
--spec block_encrypt(des_cbc | des_cfb | des3_cbc | des3_cbf | des_ede3 | blowfish_cbc |
- blowfish_cfb64 | aes_cbc128 | aes_cfb8 | aes_cfb128 | aes_cbc256 | rc2_cbc,
+-spec block_encrypt(des_cbc | des_cfb |
+ des3_cbc | des3_cbf | des_ede3 |
+ blowfish_cbc | blowfish_cfb64 | blowfish_ofb64 |
+ aes_cbc128 | aes_cfb8 | aes_cfb128 | aes_cbc256 | aes_ige256 |
+ aes_cbc |
+ rc2_cbc,
Key::iodata(), Ivec::binary(), Data::iodata()) -> binary();
(aes_gcm | chacha20_poly1305, Key::iodata(), Ivec::binary(), {AAD::binary(), Data::iodata()}) -> {binary(), binary()}.
-block_encrypt(des_cbc, Key, Ivec, Data) ->
- des_cbc_encrypt(Key, Ivec, Data);
-block_encrypt(des_cfb, Key, Ivec, Data) ->
- des_cfb_encrypt(Key, Ivec, Data);
-block_encrypt(des3_cbc, [Key1, Key2, Key3], Ivec, Data) ->
- des3_cbc_encrypt(Key1, Key2, Key3, Ivec, Data);
-block_encrypt(des3_cbf, [Key1, Key2, Key3], Ivec, Data) ->
- des3_cfb_encrypt(Key1, Key2, Key3, Ivec, Data);
-block_encrypt(des_ede3, [Key1, Key2, Key3], Ivec, Data) ->
- des_ede3_cbc_encrypt(Key1, Key2, Key3, Ivec, Data);
-block_encrypt(blowfish_cbc, Key, Ivec, Data) ->
- blowfish_cbc_encrypt(Key, Ivec, Data);
-block_encrypt(blowfish_cfb64, Key, Ivec, Data) ->
- blowfish_cfb64_encrypt(Key, Ivec, Data);
-block_encrypt(blowfish_ofb64, Key, Ivec, Data) ->
- blowfish_ofb64_encrypt(Key, Ivec, Data);
-block_encrypt(aes_cbc128, Key, Ivec, Data) ->
- aes_cbc_128_encrypt(Key, Ivec, Data);
-block_encrypt(aes_cbc256, Key, Ivec, Data) ->
- aes_cbc_256_encrypt(Key, Ivec, Data);
+block_encrypt(Type, Key, Ivec, Data) when Type =:= des_cbc;
+ Type =:= des_cfb;
+ Type =:= blowfish_cbc;
+ Type =:= blowfish_cfb64;
+ Type =:= blowfish_ofb64;
+ Type =:= aes_cbc128;
+ Type =:= aes_cfb8;
+ Type =:= aes_cfb128;
+ Type =:= aes_cbc256;
+ Type =:= aes_cbc;
+ Type =:= rc2_cbc ->
+ block_crypt_nif(Type, Key, Ivec, Data, true);
+block_encrypt(Type, Key0, Ivec, Data) when Type =:= des3_cbc;
+ Type =:= des_ede3 ->
+ Key = check_des3_key(Key0),
+ block_crypt_nif(des_ede3_cbc, Key, Ivec, Data, true);
+block_encrypt(des3_cbf, Key0, Ivec, Data) ->
+ Key = check_des3_key(Key0),
+ block_crypt_nif(des_ede3_cbf, Key, Ivec, Data, true);
block_encrypt(aes_ige256, Key, Ivec, Data) ->
- aes_ige_256_encrypt(Key, Ivec, Data);
-block_encrypt(aes_cfb8, Key, Ivec, Data) ->
- aes_cfb_8_encrypt(Key, Ivec, Data);
-block_encrypt(aes_cfb128, Key, Ivec, Data) ->
- aes_cfb_128_encrypt(Key, Ivec, Data);
+ aes_ige_crypt_nif(Key, Ivec, Data, true);
block_encrypt(aes_gcm, Key, Ivec, {AAD, Data}) ->
- case aes_gcm_encrypt(Key, Ivec, AAD, Data) of
- notsup -> erlang:error(notsup);
- Return -> Return
- end;
+ aes_gcm_encrypt(Key, Ivec, AAD, Data);
+block_encrypt(aes_gcm, Key, Ivec, {AAD, Data, TagLength}) ->
+ aes_gcm_encrypt(Key, Ivec, AAD, Data, TagLength);
block_encrypt(chacha20_poly1305, Key, Ivec, {AAD, Data}) ->
- case chacha20_poly1305_encrypt(Key, Ivec, AAD, Data) of
- notsup -> erlang:error(notsup);
- Return -> Return
- end;
-block_encrypt(rc2_cbc, Key, Ivec, Data) ->
- rc2_cbc_encrypt(Key, Ivec, Data).
-
--spec block_decrypt(des_cbc | des_cfb | des3_cbc | des3_cbf | des_ede3 | blowfish_cbc |
- blowfish_cfb64 | blowfish_ofb64 | aes_cbc128 | aes_cbc256 | aes_ige256 |
- aes_cfb8 | aes_cfb128 | rc2_cbc,
+ chacha20_poly1305_encrypt(Key, Ivec, AAD, Data).
+
+-spec block_decrypt(des_cbc | des_cfb |
+ des3_cbc | des3_cbf | des_ede3 |
+ blowfish_cbc | blowfish_cfb64 | blowfish_ofb64 |
+ aes_cbc128 | aes_cfb8 | aes_cfb128 | aes_cbc256 | aes_ige256 |
+ aes_cbc |
+ rc2_cbc,
Key::iodata(), Ivec::binary(), Data::iodata()) -> binary();
(aes_gcm | chacha20_poly1305, Key::iodata(), Ivec::binary(),
{AAD::binary(), Data::iodata(), Tag::binary()}) -> binary() | error.
-block_decrypt(des_cbc, Key, Ivec, Data) ->
- des_cbc_decrypt(Key, Ivec, Data);
-block_decrypt(des_cfb, Key, Ivec, Data) ->
- des_cfb_decrypt(Key, Ivec, Data);
-block_decrypt(des3_cbc, [Key1, Key2, Key3], Ivec, Data) ->
- des3_cbc_decrypt(Key1, Key2, Key3, Ivec, Data);
-block_decrypt(des3_cbf, [Key1, Key2, Key3], Ivec, Data) ->
- des3_cfb_decrypt(Key1, Key2, Key3, Ivec, Data);
-block_decrypt(des_ede3, [Key1, Key2, Key3], Ivec, Data) ->
- des_ede3_cbc_decrypt(Key1, Key2, Key3, Ivec, Data);
-block_decrypt(blowfish_cbc, Key, Ivec, Data) ->
- blowfish_cbc_decrypt(Key, Ivec, Data);
-block_decrypt(blowfish_cfb64, Key, Ivec, Data) ->
- blowfish_cfb64_decrypt(Key, Ivec, Data);
-block_decrypt(blowfish_ofb64, Key, Ivec, Data) ->
- blowfish_ofb64_decrypt(Key, Ivec, Data);
-block_decrypt(aes_cbc128, Key, Ivec, Data) ->
- aes_cbc_128_decrypt(Key, Ivec, Data);
-block_decrypt(aes_cbc256, Key, Ivec, Data) ->
- aes_cbc_256_decrypt(Key, Ivec, Data);
+block_decrypt(Type, Key, Ivec, Data) when Type =:= des_cbc;
+ Type =:= des_cfb;
+ Type =:= blowfish_cbc;
+ Type =:= blowfish_cfb64;
+ Type =:= blowfish_ofb64;
+ Type =:= aes_cbc;
+ Type =:= aes_cbc128;
+ Type =:= aes_cfb8;
+ Type =:= aes_cfb128;
+ Type =:= aes_cbc256;
+ Type =:= rc2_cbc ->
+ block_crypt_nif(Type, Key, Ivec, Data, false);
+block_decrypt(Type, Key0, Ivec, Data) when Type =:= des3_cbc;
+ Type =:= des_ede3 ->
+ Key = check_des3_key(Key0),
+ block_crypt_nif(des_ede3_cbc, Key, Ivec, Data, false);
+block_decrypt(des3_cbf, Key0, Ivec, Data) ->
+ Key = check_des3_key(Key0),
+ block_crypt_nif(des_ede3_cbf, Key, Ivec, Data, false);
block_decrypt(aes_ige256, Key, Ivec, Data) ->
- aes_ige_256_decrypt(Key, Ivec, Data);
-block_decrypt(aes_cfb8, Key, Ivec, Data) ->
- aes_cfb_8_decrypt(Key, Ivec, Data);
-block_decrypt(aes_cfb128, Key, Ivec, Data) ->
- aes_cfb_128_decrypt(Key, Ivec, Data);
+ notsup_to_error(aes_ige_crypt_nif(Key, Ivec, Data, false));
block_decrypt(aes_gcm, Key, Ivec, {AAD, Data, Tag}) ->
- case aes_gcm_decrypt(Key, Ivec, AAD, Data, Tag) of
- notsup -> erlang:error(notsup);
- Return -> Return
- end;
+ aes_gcm_decrypt(Key, Ivec, AAD, Data, Tag);
block_decrypt(chacha20_poly1305, Key, Ivec, {AAD, Data, Tag}) ->
- case chacha20_poly1305_decrypt(Key, Ivec, AAD, Data, Tag) of
- notsup -> erlang:error(notsup);
- Return -> Return
- end;
-block_decrypt(rc2_cbc, Key, Ivec, Data) ->
- rc2_cbc_decrypt(Key, Ivec, Data).
+ chacha20_poly1305_decrypt(Key, Ivec, AAD, Data, Tag).
-spec block_encrypt(des_ecb | blowfish_ecb | aes_ecb, Key::iodata(), Data::iodata()) -> binary().
-block_encrypt(des_ecb, Key, Data) ->
- des_ecb_encrypt(Key, Data);
-block_encrypt(blowfish_ecb, Key, Data) ->
- blowfish_ecb_encrypt(Key, Data);
-block_encrypt(aes_ecb, Key, Data) ->
- aes_ecb_encrypt(Key, Data).
+block_encrypt(Type, Key, Data) ->
+ block_crypt_nif(Type, Key, Data, true).
-spec block_decrypt(des_ecb | blowfish_ecb | aes_ecb, Key::iodata(), Data::iodata()) -> binary().
-block_decrypt(des_ecb, Key, Data) ->
- des_ecb_decrypt(Key, Data);
-block_decrypt(blowfish_ecb, Key, Data) ->
- blowfish_ecb_decrypt(Key, Data);
-block_decrypt(aes_ecb, Key, Data) ->
- aes_ecb_decrypt(Key, Data).
+block_decrypt(Type, Key, Data) ->
+ block_crypt_nif(Type, Key, Data, false).
-spec next_iv(des_cbc | des3_cbc | aes_cbc | aes_ige, Data::iodata()) -> binary().
-next_iv(des_cbc, Data) ->
- des_cbc_ivec(Data);
-next_iv(des3_cbc, Data) ->
- des_cbc_ivec(Data);
-next_iv(aes_cbc, Data) ->
- aes_cbc_ivec(Data);
-next_iv(aes_ige, Data) ->
- aes_ige_ivec(Data).
+next_iv(Type, Data) when is_binary(Data) ->
+ IVecSize = case Type of
+ des_cbc -> 8;
+ des3_cbc -> 8;
+ aes_cbc -> 16;
+ aes_ige -> 32
+ end,
+ {_, IVec} = split_binary(Data, size(Data) - IVecSize),
+ IVec;
+next_iv(Type, Data) when is_list(Data) ->
+ next_iv(Type, list_to_binary(Data)).
-spec next_iv(des_cfb, Data::iodata(), Ivec::binary()) -> binary().
-next_iv(des_cfb, Data, Ivec) ->
- des_cfb_ivec(Ivec, Data);
+next_iv(des_cfb, Data, IVec) ->
+ IVecAndData = list_to_binary([IVec, Data]),
+ {_, NewIVec} = split_binary(IVecAndData, byte_size(IVecAndData) - 8),
+ NewIVec;
next_iv(Type, Data, _Ivec) ->
next_iv(Type, Data).
stream_init(aes_ctr, Key, Ivec) ->
{aes_ctr, aes_ctr_stream_init(Key, Ivec)}.
stream_init(rc4, Key) ->
- {rc4, rc4_set_key(Key)}.
+ {rc4, notsup_to_error(rc4_set_key(Key))}.
stream_encrypt(State, Data0) ->
Data = iolist_to_binary(Data0),
@@ -438,8 +410,6 @@ strong_rand_bytes(Bytes) ->
end.
strong_rand_bytes_nif(_Bytes) -> ?nif_stub.
-rand_bytes(_Bytes, _Topmask, _Bottommask) -> ?nif_stub.
-
rand_uniform(From,To) when is_binary(From), is_binary(To) ->
case rand_uniform_nif(From,To) of
@@ -485,35 +455,31 @@ verify(dss, none, Data, Signature, Key) when is_binary(Data) ->
verify(dss, sha, {digest, Data}, Signature, Key);
verify(Alg, Type, Data, Signature, Key) when is_binary(Data) ->
verify(Alg, Type, {digest, hash(Type, Data)}, Signature, Key);
-verify(dss, Type, Data, Signature, Key) ->
- dss_verify_nif(Type, Data, Signature, map_ensure_int_as_bin(Key));
-verify(rsa, Type, DataOrDigest, Signature, Key) ->
- case rsa_verify_nif(Type, DataOrDigest, Signature, map_ensure_int_as_bin(Key)) of
- notsup -> erlang:error(notsup);
- Bool -> Bool
- end;
-verify(ecdsa, Type, DataOrDigest, Signature, [Key, Curve]) ->
- case ecdsa_verify_nif(Type, DataOrDigest, Signature, nif_curve_params(Curve), ensure_int_as_bin(Key)) of
- notsup -> erlang:error(notsup);
- Bool -> Bool
- end.
+verify(dss, Type, {digest, Digest}, Signature, Key) ->
+ dss_verify_nif(Type, Digest, Signature, map_ensure_int_as_bin(Key));
+verify(rsa, Type, {digest, Digest}, Signature, Key) ->
+ notsup_to_error(
+ rsa_verify_nif(Type, Digest, Signature, map_ensure_int_as_bin(Key)));
+verify(ecdsa, Type, {digest, Digest}, Signature, [Key, Curve]) ->
+ notsup_to_error(
+ ecdsa_verify_nif(Type, Digest, Signature, nif_curve_params(Curve), ensure_int_as_bin(Key))).
sign(dss, none, Data, Key) when is_binary(Data) ->
sign(dss, sha, {digest, Data}, Key);
sign(Alg, Type, Data, Key) when is_binary(Data) ->
sign(Alg, Type, {digest, hash(Type, Data)}, Key);
-sign(rsa, Type, DataOrDigest, Key) ->
- case rsa_sign_nif(Type, DataOrDigest, map_ensure_int_as_bin(Key)) of
- error -> erlang:error(badkey, [Type,DataOrDigest,Key]);
+sign(rsa, Type, {digest, Digest}, Key) ->
+ case rsa_sign_nif(Type, Digest, map_ensure_int_as_bin(Key)) of
+ error -> erlang:error(badkey, [Type,Digest,Key]);
Sign -> Sign
end;
-sign(dss, Type, DataOrDigest, Key) ->
- case dss_sign_nif(Type, DataOrDigest, map_ensure_int_as_bin(Key)) of
- error -> erlang:error(badkey, [DataOrDigest, Key]);
+sign(dss, Type, {digest, Digest}, Key) ->
+ case dss_sign_nif(Type, Digest, map_ensure_int_as_bin(Key)) of
+ error -> erlang:error(badkey, [Digest, Key]);
Sign -> Sign
end;
-sign(ecdsa, Type, DataOrDigest, [Key, Curve]) ->
- case ecdsa_sign_nif(Type, DataOrDigest, nif_curve_params(Curve), ensure_int_as_bin(Key)) of
- error -> erlang:error(badkey, [Type,DataOrDigest,Key]);
+sign(ecdsa, Type, {digest, Digest}, [Key, Curve]) ->
+ case ecdsa_sign_nif(Type, Digest, nif_curve_params(Curve), ensure_int_as_bin(Key)) of
+ error -> erlang:error(badkey, [Type,Digest,Key]);
Sign -> Sign
end.
@@ -581,7 +547,7 @@ generate_key(dh, DHParameters, PrivateKey) ->
generate_key(srp, {host, [Verifier, Generator, Prime, Version]}, PrivArg)
when is_binary(Verifier), is_binary(Generator), is_binary(Prime), is_atom(Version) ->
Private = case PrivArg of
- undefined -> random_bytes(32);
+ undefined -> strong_rand_bytes(32);
_ -> ensure_int_as_bin(PrivArg)
end,
host_srp_gen_key(Private, Verifier, Generator, Prime, Version);
@@ -589,7 +555,7 @@ generate_key(srp, {host, [Verifier, Generator, Prime, Version]}, PrivArg)
generate_key(srp, {user, [Generator, Prime, Version]}, PrivateArg)
when is_binary(Generator), is_binary(Prime), is_atom(Version) ->
Private = case PrivateArg of
- undefined -> random_bytes(32);
+ undefined -> strong_rand_bytes(32);
_ -> PrivateArg
end,
user_srp_gen_key(Private, Generator, Prime);
@@ -618,8 +584,9 @@ compute_key(srp, HostPublic, {UserPublic, UserPrivate},
HostPubBin, Prime);
[S] -> S
end,
+ notsup_to_error(
srp_user_secret_nif(ensure_int_as_bin(UserPrivate), Scrambler, HostPubBin,
- Multiplier, Generator, DerivedKey, Prime);
+ Multiplier, Generator, DerivedKey, Prime));
compute_key(srp, UserPublic, {HostPublic, HostPrivate},
{host,[Verifier, Prime, Version | ScramblerArg]}) when
@@ -631,24 +598,15 @@ compute_key(srp, UserPublic, {HostPublic, HostPrivate},
[] -> srp_scrambler(Version, UserPubBin, ensure_int_as_bin(HostPublic), Prime);
[S] -> S
end,
+ notsup_to_error(
srp_host_secret_nif(Verifier, ensure_int_as_bin(HostPrivate), Scrambler,
- UserPubBin, Prime);
+ UserPubBin, Prime));
compute_key(ecdh, Others, My, Curve) ->
ecdh_compute_key_nif(ensure_int_as_bin(Others),
nif_curve_params(Curve),
ensure_int_as_bin(My)).
-
-random_bytes(N) ->
- try strong_rand_bytes(N) of
- RandBytes ->
- RandBytes
- catch
- error:low_entropy ->
- rand_bytes(N)
- end.
-
%%--------------------------------------------------------------------
%%% On load
%%--------------------------------------------------------------------
@@ -677,7 +635,8 @@ on_load() ->
end
end,
Lib = filename:join([PrivDir, "lib", LibName]),
- Status = case erlang:load_nif(Lib, {?CRYPTO_NIF_VSN,path2bin(Lib)}) of
+ LibBin = path2bin(Lib),
+ Status = case erlang:load_nif(Lib, {?CRYPTO_NIF_VSN,LibBin}) of
ok -> ok;
{error, {load_failed, _}}=Error1 ->
ArchLibDir =
@@ -689,7 +648,8 @@ on_load() ->
[] -> Error1;
_ ->
ArchLib = filename:join([ArchLibDir, LibName]),
- erlang:load_nif(ArchLib, {?CRYPTO_NIF_VSN,path2bin(ArchLib)})
+ ArchBin = path2bin(ArchLib),
+ erlang:load_nif(ArchLib, {?CRYPTO_NIF_VSN,ArchBin})
end;
Error1 -> Error1
end,
@@ -714,46 +674,30 @@ path2bin(Path) when is_list(Path) ->
max_bytes() ->
?MAX_BYTES_TO_NIF.
+notsup_to_error(notsup) ->
+ erlang:error(notsup);
+notsup_to_error(Other) ->
+ Other.
+
%% HASH --------------------------------------------------------------------
-hash(Hash, Data, Size, Max, initial) when Size =< Max ->
- do_hash(Hash, Data);
-hash(State0, Data, Size, Max, continue) when Size =< Max ->
- State = do_hash_update(State0, Data),
- hash_final(State);
-hash(Hash, Data, _Size, Max, initial) ->
- <<Increment:Max/binary, Rest/binary>> = Data,
+hash(Hash, Data, Size, Max) when Size =< Max ->
+ notsup_to_error(hash_nif(Hash, Data));
+hash(Hash, Data, Size, Max) ->
State0 = hash_init(Hash),
- State = do_hash_update(State0, Increment),
- hash(State, Rest, erlang:byte_size(Rest), max_bytes(), continue);
-hash(State0, Data, _Size, MaxByts, continue) ->
- <<Increment:MaxByts/binary, Rest/binary>> = Data,
- State = do_hash_update(State0, Increment),
- hash(State, Rest, erlang:byte_size(Rest), max_bytes(), continue).
-
-do_hash(md5, Data) -> md5(Data);
-do_hash(md4, Data) -> md4(Data);
-do_hash(sha, Data) -> sha(Data);
-do_hash(ripemd160, Data) -> ripemd160(Data);
-do_hash(sha224, Data) -> sha224(Data);
-do_hash(sha256, Data) -> sha256(Data);
-do_hash(sha384, Data) -> sha384(Data);
-do_hash(sha512, Data) -> sha512(Data).
+ State1 = hash_update(State0, Data, Size, Max),
+ hash_final(State1).
hash_update(State, Data, Size, MaxBytes) when Size =< MaxBytes ->
- do_hash_update(State, Data);
+ notsup_to_error(hash_update_nif(State, Data));
hash_update(State0, Data, _, MaxBytes) ->
<<Increment:MaxBytes/binary, Rest/binary>> = Data,
- State = do_hash_update(State0, Increment),
+ State = notsup_to_error(hash_update_nif(State0, Increment)),
hash_update(State, Rest, erlang:byte_size(Rest), MaxBytes).
-do_hash_update({md5,Context}, Data) -> {md5, md5_update(Context,Data)};
-do_hash_update({md4,Context}, Data) -> {md4, md4_update(Context,Data)};
-do_hash_update({sha,Context}, Data) -> {sha, sha_update(Context,Data)};
-do_hash_update({ripemd160,Context}, Data) -> {ripemd160, ripemd160_update(Context,Data)};
-do_hash_update({sha224,Context}, Data) -> {sha224, sha224_update(Context,Data)};
-do_hash_update({sha256,Context}, Data) -> {sha256, sha256_update(Context,Data)};
-do_hash_update({sha384,Context}, Data) -> {sha384, sha384_update(Context,Data)};
-do_hash_update({sha512,Context}, Data) -> {sha512, sha512_update(Context,Data)}.
+hash_nif(_Hash, _Data) -> ?nif_stub.
+hash_init_nif(_Hash) -> ?nif_stub.
+hash_update_nif(_State, _Data) -> ?nif_stub.
+hash_final_nif(_State) -> ?nif_stub.
%%
@@ -765,10 +709,14 @@ do_hash_update({sha512,Context}, Data) -> {sha512, sha512_update(Context,Data
-spec md5_update(binary(), iodata()) -> binary().
-spec md5_final(binary()) -> binary().
-md5(_Data) -> ?nif_stub.
-md5_init() -> ?nif_stub.
-md5_update(_Context, _Data) -> ?nif_stub.
-md5_final(_Context) -> ?nif_stub.
+md5(Data) ->
+ hash(md5, Data).
+md5_init() ->
+ hash_init(md5).
+md5_update(Context, Data) ->
+ hash_update(Context, Data).
+md5_final(Context) ->
+ hash_final(Context).
%%
%% MD4
@@ -778,24 +726,14 @@ md5_final(_Context) -> ?nif_stub.
-spec md4_update(binary(), iodata()) -> binary().
-spec md4_final(binary()) -> binary().
-md4(_Data) -> ?nif_stub.
-md4_init() -> ?nif_stub.
-md4_update(_Context, _Data) -> ?nif_stub.
-md4_final(_Context) -> ?nif_stub.
-
-%%
-%% RIPEMD160
-%%
-
--spec ripemd160(iodata()) -> binary().
--spec ripemd160_init() -> binary().
--spec ripemd160_update(binary(), iodata()) -> binary().
--spec ripemd160_final(binary()) -> binary().
-
-ripemd160(_Data) -> ?nif_stub.
-ripemd160_init() -> ?nif_stub.
-ripemd160_update(_Context, _Data) -> ?nif_stub.
-ripemd160_final(_Context) -> ?nif_stub.
+md4(Data) ->
+ hash(md4, Data).
+md4_init() ->
+ hash_init(md4).
+md4_update(Context, Data) ->
+ hash_update(Context, Data).
+md4_final(Context) ->
+ hash_final(Context).
%%
%% SHA
@@ -805,196 +743,44 @@ ripemd160_final(_Context) -> ?nif_stub.
-spec sha_update(binary(), iodata()) -> binary().
-spec sha_final(binary()) -> binary().
-sha(_Data) -> ?nif_stub.
-sha_init() -> ?nif_stub.
-sha_update(_Context, _Data) -> ?nif_stub.
-sha_final(_Context) -> ?nif_stub.
-
-%
-%% SHA224
-%%
--spec sha224(iodata()) -> binary().
--spec sha224_init() -> binary().
--spec sha224_update(binary(), iodata()) -> binary().
--spec sha224_final(binary()) -> binary().
-
-sha224(Data) ->
- case sha224_nif(Data) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha224_init() ->
- case sha224_init_nif() of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha224_update(Context, Data) ->
- case sha224_update_nif(Context, Data) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha224_final(Context) ->
- case sha224_final_nif(Context) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
-sha224_nif(_Data) -> ?nif_stub.
-sha224_init_nif() -> ?nif_stub.
-sha224_update_nif(_Context, _Data) -> ?nif_stub.
-sha224_final_nif(_Context) -> ?nif_stub.
-
-%
-%% SHA256
-%%
--spec sha256(iodata()) -> binary().
--spec sha256_init() -> binary().
--spec sha256_update(binary(), iodata()) -> binary().
--spec sha256_final(binary()) -> binary().
-
-sha256(Data) ->
- case sha256_nif(Data) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha256_init() ->
- case sha256_init_nif() of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha256_update(Context, Data) ->
- case sha256_update_nif(Context, Data) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha256_final(Context) ->
- case sha256_final_nif(Context) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
-sha256_nif(_Data) -> ?nif_stub.
-sha256_init_nif() -> ?nif_stub.
-sha256_update_nif(_Context, _Data) -> ?nif_stub.
-sha256_final_nif(_Context) -> ?nif_stub.
-
-%
-%% SHA384
-%%
--spec sha384(iodata()) -> binary().
--spec sha384_init() -> binary().
--spec sha384_update(binary(), iodata()) -> binary().
--spec sha384_final(binary()) -> binary().
-
-sha384(Data) ->
- case sha384_nif(Data) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha384_init() ->
- case sha384_init_nif() of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha384_update(Context, Data) ->
- case sha384_update_nif(Context, Data) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha384_final(Context) ->
- case sha384_final_nif(Context) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
-sha384_nif(_Data) -> ?nif_stub.
-sha384_init_nif() -> ?nif_stub.
-sha384_update_nif(_Context, _Data) -> ?nif_stub.
-sha384_final_nif(_Context) -> ?nif_stub.
-
-%
-%% SHA512
-%%
--spec sha512(iodata()) -> binary().
--spec sha512_init() -> binary().
--spec sha512_update(binary(), iodata()) -> binary().
--spec sha512_final(binary()) -> binary().
-
-sha512(Data) ->
- case sha512_nif(Data) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha512_init() ->
- case sha512_init_nif() of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha512_update(Context, Data) ->
- case sha512_update_nif(Context, Data) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-sha512_final(Context) ->
- case sha512_final_nif(Context) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
-sha512_nif(_Data) -> ?nif_stub.
-sha512_init_nif() -> ?nif_stub.
-sha512_update_nif(_Context, _Data) -> ?nif_stub.
-sha512_final_nif(_Context) -> ?nif_stub.
+sha(Data) ->
+ hash(sha, Data).
+sha_init() ->
+ hash_init(sha).
+sha_update(Context, Data) ->
+ hash_update(Context, Data).
+sha_final(Context) ->
+ hash_final(Context).
%% HMAC --------------------------------------------------------------------
-hmac(Type, Key, Data, MacSize, Size, MaxBytes, initial) when Size =< MaxBytes ->
+hmac(Type, Key, Data, MacSize, Size, MaxBytes) when Size =< MaxBytes ->
+ notsup_to_error(
case MacSize of
- undefined ->
- do_hmac(Type, Key, Data);
- _ ->
- do_hmac(Type, Key, Data, MacSize)
- end;
-hmac(Type, Key, Data, MacSize, _, MaxBytes, initial) ->
- <<Increment:MaxBytes/binary, Rest/binary>> = Data,
+ undefined -> hmac_nif(Type, Key, Data);
+ _ -> hmac_nif(Type, Key, Data, MacSize)
+ end);
+hmac(Type, Key, Data, MacSize, Size, MaxBytes) ->
State0 = hmac_init(Type, Key),
- State = hmac_update(State0, Increment),
- hmac(State, Rest, MacSize, erlang:byte_size(Rest), max_bytes(), continue).
-hmac(State0, Data, MacSize, Size, MaxBytes, continue) when Size =< MaxBytes ->
- State = hmac_update(State0, Data),
+ State1 = hmac_update(State0, Data, Size, MaxBytes),
case MacSize of
- undefined ->
- hmac_final(State);
- _ ->
- hmac_final_n(State, MacSize)
- end;
-hmac(State0, Data, MacSize, _Size, MaxBytes, continue) ->
- <<Increment:MaxBytes/binary, Rest/binary>> = Data,
- State = hmac_update(State0, Increment),
- hmac(State, Rest, MacSize, erlang:byte_size(Rest), max_bytes(), continue).
+ undefined -> hmac_final(State1);
+ _ -> hmac_final_n(State1, MacSize)
+ end.
hmac_update(State, Data, Size, MaxBytes) when Size =< MaxBytes ->
- do_hmac_update(State, Data);
+ notsup_to_error(hmac_update_nif(State, Data));
hmac_update(State0, Data, _, MaxBytes) ->
<<Increment:MaxBytes/binary, Rest/binary>> = Data,
- State = do_hmac_update(State0, Increment),
+ State = notsup_to_error(hmac_update_nif(State0, Increment)),
hmac_update(State, Rest, erlang:byte_size(Rest), MaxBytes).
-do_hmac(md5, Key, Data) -> md5_mac(Key, Data);
-do_hmac(sha, Key, Data) -> sha_mac(Key, Data);
-do_hmac(sha224, Key, Data) -> sha224_mac(Key, Data);
-do_hmac(sha256, Key, Data) -> sha256_mac(Key, Data);
-do_hmac(sha384, Key, Data) -> sha384_mac(Key, Data);
-do_hmac(sha512, Key, Data) -> sha512_mac(Key, Data).
-
-do_hmac(md5, Key, Data, Size) -> md5_mac_n(Key, Data, Size);
-do_hmac(sha, Key, Data, Size) -> sha_mac_n(Key, Data, Size);
-do_hmac(sha224, Key, Data, Size) -> sha224_mac(Key, Data, Size);
-do_hmac(sha256, Key, Data, Size) -> sha256_mac(Key, Data, Size);
-do_hmac(sha384, Key, Data, Size) -> sha384_mac(Key, Data, Size);
-do_hmac(sha512, Key, Data, Size) -> sha512_mac(Key, Data, Size).
-
-do_hmac_update(_Context, _Data) -> ? nif_stub.
+hmac_nif(_Type, _Key, _Data) -> ?nif_stub.
+hmac_nif(_Type, _Key, _Data, _MacSize) -> ?nif_stub.
+hmac_init_nif(_Type, _Key) -> ?nif_stub.
+hmac_update_nif(_Context, _Data) -> ?nif_stub.
+hmac_final_nif(_Context) -> ?nif_stub.
+hmac_final_nif(_Context, _MacSize) -> ?nif_stub.
%%
%% MD5_MAC
@@ -1002,97 +788,37 @@ do_hmac_update(_Context, _Data) -> ? nif_stub.
-spec md5_mac(iodata(), iodata()) -> binary().
-spec md5_mac_96(iodata(), iodata()) -> binary().
-md5_mac(Key, Data) ->
- md5_mac_n(Key,Data,16).
+md5_mac(Key, Data) -> hmac(md5, Key, Data).
-md5_mac_96(Key, Data) ->
- md5_mac_n(Key,Data,12).
+md5_mac_96(Key, Data) -> hmac(md5, Key, Data, 12).
-md5_mac_n(_Key,_Data,_MacSz) -> ?nif_stub.
-
%%
%% SHA_MAC
%%
-spec sha_mac(iodata(), iodata()) -> binary().
-spec sha_mac_96(iodata(), iodata()) -> binary().
-sha_mac(Key, Data) ->
- sha_mac_n(Key,Data,20).
-
-sha_mac(Key, Data, Size) ->
- sha_mac_n(Key, Data, Size).
-
-sha_mac_96(Key, Data) ->
- sha_mac_n(Key,Data,12).
+sha_mac(Key, Data) -> hmac(sha, Key, Data).
-sha_mac_n(_Key,_Data,_MacSz) -> ?nif_stub.
+sha_mac(Key, Data, Size) -> hmac(sha, Key, Data, Size).
-%%
-%% SHA224_MAC
-%%
--spec sha224_mac(iodata(), iodata()) -> binary().
-
-sha224_mac(Key, Data) ->
- sha224_mac(Key, Data, 224 div 8).
-
-sha224_mac(Key, Data, Size) ->
- case sha224_mac_nif(Key, Data, Size) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
-sha224_mac_nif(_Key,_Data,_MacSz) -> ?nif_stub.
-
-%%
-%% SHA256_MAC
-%%
--spec sha256_mac(iodata(), iodata()) -> binary().
-
-sha256_mac(Key, Data) ->
- sha256_mac(Key, Data, 256 div 8).
-
-sha256_mac(Key, Data, Size) ->
- case sha256_mac_nif(Key, Data, Size) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
-sha256_mac_nif(_Key,_Data,_MacSz) -> ?nif_stub.
-
-%%
-%% SHA384_MAC
-%%
--spec sha384_mac(iodata(), iodata()) -> binary().
-
-sha384_mac(Key, Data) ->
- sha384_mac(Key, Data, 384 div 8).
+sha_mac_96(Key, Data) -> hmac(sha, Key, Data, 12).
-sha384_mac(Key, Data, Size) ->
- case sha384_mac_nif(Key, Data, Size) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
-sha384_mac_nif(_Key,_Data,_MacSz) -> ?nif_stub.
-
-%%
-%% SHA512_MAC
-%%
--spec sha512_mac(iodata(), iodata()) -> binary().
-
-sha512_mac(Key, Data) ->
- sha512_mac(Key, Data, 512 div 8).
+%% CIPHERS --------------------------------------------------------------------
-sha512_mac(Key, Data, MacSz) ->
- case sha512_mac_nif(Key, Data, MacSz) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
+block_crypt_nif(_Type, _Key, _Ivec, _Text, _IsEncrypt) -> ?nif_stub.
+block_crypt_nif(_Type, _Key, _Text, _IsEncrypt) -> ?nif_stub.
+
+check_des3_key(Key) ->
+ case lists:map(fun erlang:iolist_to_binary/1, Key) of
+ ValidKey = [B1, B2, B3] when byte_size(B1) =:= 8,
+ byte_size(B2) =:= 8,
+ byte_size(B3) =:= 8 ->
+ ValidKey;
+ _ ->
+ error(badarg)
end.
-sha512_mac_nif(_Key,_Data,_MacSz) -> ?nif_stub.
-
-%% CIPHERS --------------------------------------------------------------------
-
%%
%% DES - in electronic codebook mode (ECB)
%%
@@ -1100,10 +826,9 @@ sha512_mac_nif(_Key,_Data,_MacSz) -> ?nif_stub.
-spec des_ecb_decrypt(iodata(), iodata()) -> binary().
des_ecb_encrypt(Key, Data) ->
- des_ecb_crypt(Key, Data, true).
+ block_encrypt(des_ecb, Key, Data).
des_ecb_decrypt(Key, Data) ->
- des_ecb_crypt(Key, Data, false).
-des_ecb_crypt(_Key, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(des_ecb, Key, Data).
%%
%% DES3 - in cipher block chaining mode (CBC)
@@ -1114,16 +839,14 @@ des_ecb_crypt(_Key, _Data, _IsEncrypt) -> ?nif_stub.
binary().
des3_cbc_encrypt(Key1, Key2, Key3, IVec, Data) ->
- des_ede3_cbc_crypt(Key1, Key2, Key3, IVec, Data, true).
+ block_encrypt(des3_cbc, [Key1, Key2, Key3], IVec, Data).
des_ede3_cbc_encrypt(Key1, Key2, Key3, IVec, Data) ->
- des_ede3_cbc_crypt(Key1, Key2, Key3, IVec, Data, true).
+ block_encrypt(des_ede3, [Key1, Key2, Key3], IVec, Data).
des3_cbc_decrypt(Key1, Key2, Key3, IVec, Data) ->
- des_ede3_cbc_crypt(Key1, Key2, Key3, IVec, Data, false).
+ block_decrypt(des3_cbc, [Key1, Key2, Key3], IVec, Data).
des_ede3_cbc_decrypt(Key1, Key2, Key3, IVec, Data) ->
- des_ede3_cbc_crypt(Key1, Key2, Key3, IVec, Data, false).
-
-des_ede3_cbc_crypt(_Key1, _Key2, _Key3, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(des_ede3, [Key1, Key2, Key3], IVec, Data).
%%
%% DES3 - in 8-bits cipher feedback mode (CFB)
@@ -1134,18 +857,10 @@ des_ede3_cbc_crypt(_Key1, _Key2, _Key3, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
binary().
des3_cfb_encrypt(Key1, Key2, Key3, IVec, Data) ->
- des_ede3_cfb_crypt(Key1, Key2, Key3, IVec, Data, true).
+ block_encrypt(des3_cbf, [Key1, Key2, Key3], IVec, Data).
des3_cfb_decrypt(Key1, Key2, Key3, IVec, Data) ->
- des_ede3_cfb_crypt(Key1, Key2, Key3, IVec, Data, false).
-
-des_ede3_cfb_crypt(Key1, Key2, Key3, IVec, Data, IsEncrypt) ->
- case des_ede3_cfb_crypt_nif(Key1,Key2,Key3,IVec,Data,IsEncrypt) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
-des_ede3_cfb_crypt_nif(_Key1, _Key2, _Key3, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(des3_cbf, [Key1, Key2, Key3], IVec, Data).
%%
%% Blowfish
@@ -1159,48 +874,26 @@ des_ede3_cfb_crypt_nif(_Key1, _Key2, _Key3, _IVec, _Data, _IsEncrypt) -> ?nif_st
-spec blowfish_ofb64_encrypt(iodata(), binary(), iodata()) -> binary().
blowfish_ecb_encrypt(Key, Data) ->
- bf_ecb_crypt(Key,Data, true).
+ block_encrypt(blowfish_ecb, Key, Data).
blowfish_ecb_decrypt(Key, Data) ->
- bf_ecb_crypt(Key,Data, false).
-
-bf_ecb_crypt(_Key,_Data,_IsEncrypt) -> ?nif_stub.
+ block_decrypt(blowfish_ecb, Key, Data).
blowfish_cbc_encrypt(Key, IVec, Data) ->
- bf_cbc_crypt(Key,IVec,Data,true).
+ block_encrypt(blowfish_cbc, Key, IVec, Data).
blowfish_cbc_decrypt(Key, IVec, Data) ->
- bf_cbc_crypt(Key,IVec,Data,false).
-
-bf_cbc_crypt(_Key,_IVec,_Data,_IsEncrypt) -> ?nif_stub.
+ block_decrypt(blowfish_cbc, Key, IVec, Data).
blowfish_cfb64_encrypt(Key, IVec, Data) ->
- bf_cfb64_crypt(Key, IVec, Data, true).
+ block_encrypt(blowfish_cfb64, Key, IVec, Data).
blowfish_cfb64_decrypt(Key, IVec, Data) ->
- bf_cfb64_crypt(Key, IVec, Data, false).
-
-bf_cfb64_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(blowfish_cfb64, Key, IVec, Data).
-blowfish_ofb64_decrypt(Key, Ivec, Data) ->
- blowfish_ofb64_encrypt(Key, Ivec, Data).
+blowfish_ofb64_encrypt(Key, IVec, Data) ->
+ block_encrypt(blowfish_ofb64, Key, IVec, Data).
-blowfish_ofb64_encrypt(_Key, _IVec, _Data) -> ?nif_stub.
-
-
-%%
-%% AES in cipher feedback mode (CFB) - 8 bit shift
-%%
--spec aes_cfb_8_encrypt(iodata(), binary(), iodata()) -> binary().
--spec aes_cfb_8_decrypt(iodata(), binary(), iodata()) -> binary().
-
-aes_cfb_8_encrypt(Key, IVec, Data) ->
- aes_cfb_8_crypt(Key, IVec, Data, true).
-
-aes_cfb_8_decrypt(Key, IVec, Data) ->
- aes_cfb_8_crypt(Key, IVec, Data, false).
-
-aes_cfb_8_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
%%
%% AES in cipher feedback mode (CFB) - 128 bit shift
@@ -1209,17 +902,18 @@ aes_cfb_8_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
-spec aes_cfb_128_decrypt(iodata(), binary(), iodata()) -> binary().
aes_cfb_128_encrypt(Key, IVec, Data) ->
- aes_cfb_128_crypt(Key, IVec, Data, true).
+ block_encrypt(aes_cfb128, Key, IVec, Data).
aes_cfb_128_decrypt(Key, IVec, Data) ->
- aes_cfb_128_crypt(Key, IVec, Data, false).
-
-aes_cfb_128_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(aes_cfb128, Key, IVec, Data).
%%
%% AES - in Galois/Counter Mode (GCM)
%%
-aes_gcm_encrypt(_Key, _Ivec, _AAD, _In) -> ?nif_stub.
+%% The default tag length is EVP_GCM_TLS_TAG_LEN(16),
+aes_gcm_encrypt(Key, Ivec, AAD, In) ->
+ aes_gcm_encrypt(Key, Ivec, AAD, In, 16).
+aes_gcm_encrypt(_Key, _Ivec, _AAD, _In, _TagLength) -> ?nif_stub.
aes_gcm_decrypt(_Key, _Ivec, _AAD, _In, _Tag) -> ?nif_stub.
%%
@@ -1235,12 +929,10 @@ chacha20_poly1305_decrypt(_Key, _Ivec, _AAD, _In, _Tag) -> ?nif_stub.
-spec des_cbc_decrypt(iodata(), binary(), iodata()) -> binary().
des_cbc_encrypt(Key, IVec, Data) ->
- des_cbc_crypt(Key, IVec, Data, true).
+ block_encrypt(des_cbc, Key, IVec, Data).
des_cbc_decrypt(Key, IVec, Data) ->
- des_cbc_crypt(Key, IVec, Data, false).
-
-des_cbc_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(des_cbc, Key, IVec, Data).
%%
%% dec_cbc_ivec(Data) -> binary()
@@ -1250,11 +942,8 @@ des_cbc_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
%%
-spec des_cbc_ivec(iodata()) -> binary().
-des_cbc_ivec(Data) when is_binary(Data) ->
- {_, IVec} = split_binary(Data, size(Data) - 8),
- IVec;
-des_cbc_ivec(Data) when is_list(Data) ->
- des_cbc_ivec(list_to_binary(Data)).
+des_cbc_ivec(Data) ->
+ next_iv(des_cbc, Data).
%%
%% DES - in 8-bits cipher feedback mode (CFB)
@@ -1263,12 +952,10 @@ des_cbc_ivec(Data) when is_list(Data) ->
-spec des_cfb_decrypt(iodata(), binary(), iodata()) -> binary().
des_cfb_encrypt(Key, IVec, Data) ->
- des_cfb_crypt(Key, IVec, Data, true).
+ block_encrypt(des_cfb, Key, IVec, Data).
des_cfb_decrypt(Key, IVec, Data) ->
- des_cfb_crypt(Key, IVec, Data, false).
-
-des_cfb_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(des_cfb, Key, IVec, Data).
%%
%% dec_cfb_ivec(IVec, Data) -> binary()
@@ -1280,9 +967,7 @@ des_cfb_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
-spec des_cfb_ivec(iodata(), iodata()) -> binary().
des_cfb_ivec(IVec, Data) ->
- IVecAndData = list_to_binary([IVec, Data]),
- {_, NewIVec} = split_binary(IVecAndData, byte_size(IVecAndData) - 8),
- NewIVec.
+ next_iv(des_cfb, Data, IVec).
%%
@@ -1298,18 +983,16 @@ des_cfb_ivec(IVec, Data) ->
binary().
aes_cbc_128_encrypt(Key, IVec, Data) ->
- aes_cbc_crypt(Key, IVec, Data, true).
+ block_encrypt(aes_cbc128, Key, IVec, Data).
aes_cbc_128_decrypt(Key, IVec, Data) ->
- aes_cbc_crypt(Key, IVec, Data, false).
+ block_decrypt(aes_cbc128, Key, IVec, Data).
aes_cbc_256_encrypt(Key, IVec, Data) ->
- aes_cbc_crypt(Key, IVec, Data, true).
+ block_encrypt(aes_cbc256, Key, IVec, Data).
aes_cbc_256_decrypt(Key, IVec, Data) ->
- aes_cbc_crypt(Key, IVec, Data, false).
-
-aes_cbc_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(aes_cbc256, Key, IVec, Data).
%%
%% aes_cbc_ivec(Data) -> binary()
@@ -1318,47 +1001,15 @@ aes_cbc_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
%% aes_cbc_*_[encrypt|decrypt].
%% IVec size: 16 bytes
%%
-aes_cbc_ivec(Data) when is_binary(Data) ->
- {_, IVec} = split_binary(Data, size(Data) - 16),
- IVec;
-aes_cbc_ivec(Data) when is_list(Data) ->
- aes_cbc_ivec(list_to_binary(Data)).
-
+aes_cbc_ivec(Data) ->
+ next_iv(aes_cbc, Data).
%%
%% AES - with 256 bit key in infinite garble extension mode (IGE)
%%
--spec aes_ige_256_decrypt(iodata(), binary(), iodata()) ->
- binary().
-
-aes_ige_256_encrypt(Key, IVec, Data) ->
- aes_ige_crypt(Key, IVec, Data, true).
-
-aes_ige_256_decrypt(Key, IVec, Data) ->
- aes_ige_crypt(Key, IVec, Data, false).
-
-aes_ige_crypt(Key, IVec, Data, IsEncrypt) ->
- case aes_ige_crypt_nif(Key,IVec,Data,IsEncrypt) of
- notsup -> erlang:error(notsup);
- Bin -> Bin
- end.
-
aes_ige_crypt_nif(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
-%%
-%% aes_ige_ivec(Data) -> binary()
-%%
-%% Returns the IVec to be used in the next iteration of
-%% aes_ige_*_[encrypt|decrypt].
-%% IVec size: 32 bytes
-%%
-aes_ige_ivec(Data) when is_binary(Data) ->
- {_, IVec} = split_binary(Data, size(Data) - 32),
- IVec;
-aes_ige_ivec(Data) when is_list(Data) ->
- aes_ige_ivec(list_to_binary(Data)).
-
%% Stream ciphers --------------------------------------------------------------------
@@ -1397,22 +1048,11 @@ do_stream_decrypt({rc4, State0}, Data) ->
aes_ctr_encrypt(_Key, _IVec, _Data) -> ?nif_stub.
aes_ctr_decrypt(_Key, _IVec, _Cipher) -> ?nif_stub.
-%%
-%% AES - in electronic codebook mode (ECB)
-%%
-aes_ecb_encrypt(Key, Data) ->
- aes_ecb_crypt(Key, Data, true).
-
-aes_ecb_decrypt(Key, Data) ->
- aes_ecb_crypt(Key, Data, false).
-
-aes_ecb_crypt(_Key, __Data, _IsEncrypt) -> ?nif_stub.
-
%%
%% AES - in counter mode (CTR) with state maintained for multi-call streaming
%%
--type ctr_state() :: { iodata(), binary(), binary(), integer() }.
+-type ctr_state() :: { iodata(), binary(), binary(), integer() } | binary().
-spec aes_ctr_stream_init(iodata(), binary()) -> ctr_state().
-spec aes_ctr_stream_encrypt(ctr_state(), binary()) ->
@@ -1420,10 +1060,9 @@ aes_ecb_crypt(_Key, __Data, _IsEncrypt) -> ?nif_stub.
-spec aes_ctr_stream_decrypt(ctr_state(), binary()) ->
{ ctr_state(), binary() }.
-aes_ctr_stream_init(Key, IVec) ->
- {Key, IVec, << 0:128 >>, 0}.
-aes_ctr_stream_encrypt({_Key, _IVec, _ECount, _Num}=_State, _Data) -> ?nif_stub.
-aes_ctr_stream_decrypt({_Key, _IVec, _ECount, _Num}=_State, _Cipher) -> ?nif_stub.
+aes_ctr_stream_init(_Key, _IVec) -> ?nif_stub.
+aes_ctr_stream_encrypt(_State, _Data) -> ?nif_stub.
+aes_ctr_stream_decrypt(_State, _Cipher) -> ?nif_stub.
%%
%% RC4 - symmetric stream cipher
@@ -1438,21 +1077,19 @@ rc4_encrypt_with_state(_State, _Data) -> ?nif_stub.
%% RC2 block cipher
rc2_cbc_encrypt(Key, IVec, Data) ->
- rc2_cbc_crypt(Key,IVec,Data,true).
+ block_encrypt(rc2_cbc, Key, IVec, Data).
rc2_cbc_decrypt(Key, IVec, Data) ->
- rc2_cbc_crypt(Key,IVec,Data,false).
-
-rc2_cbc_crypt(_Key, _IVec, _Data, _IsEncrypt) -> ?nif_stub.
+ block_decrypt(rc2_cbc, Key, IVec, Data).
%%
%% RC2 - 40 bits block cipher - Backwards compatibility not documented.
%%
rc2_40_cbc_encrypt(Key, IVec, Data) when erlang:byte_size(Key) == 5 ->
- rc2_cbc_crypt(Key,IVec,Data,true).
+ block_encrypt(rc2_cbc, Key, IVec, Data).
rc2_40_cbc_decrypt(Key, IVec, Data) when erlang:byte_size(Key) == 5 ->
- rc2_cbc_crypt(Key,IVec,Data,false).
+ block_decrypt(rc2_cbc, Key, IVec, Data).
%% Secure remote password -------------------------------------------------------------------
@@ -1470,16 +1107,18 @@ host_srp_gen_key(Private, Verifier, Generator, Prime, Version) ->
case srp_value_B_nif(Multiplier, Verifier, Generator, Private, Prime) of
error ->
error;
+ notsup ->
+ erlang:error(notsup);
Public ->
{Public, Private}
end.
srp_multiplier('6a', Generator, Prime) ->
%% k = SHA1(N | PAD(g)) from http://srp.stanford.edu/design.html
- C0 = sha_init(),
- C1 = sha_update(C0, Prime),
- C2 = sha_update(C1, srp_pad_to(erlang:byte_size(Prime), Generator)),
- sha_final(C2);
+ C0 = hash_init(sha),
+ C1 = hash_update(C0, Prime),
+ C2 = hash_update(C1, srp_pad_to(erlang:byte_size(Prime), Generator)),
+ hash_final(C2);
srp_multiplier('6', _, _) ->
<<3/integer>>;
srp_multiplier('3', _, _) ->
@@ -1488,10 +1127,10 @@ srp_multiplier('3', _, _) ->
srp_scrambler(Version, UserPublic, HostPublic, Prime) when Version == '6'; Version == '6a'->
%% SHA1(PAD(A) | PAD(B)) from http://srp.stanford.edu/design.html
PadLength = erlang:byte_size(Prime),
- C0 = sha_init(),
- C1 = sha_update(C0, srp_pad_to(PadLength, UserPublic)),
- C2 = sha_update(C1, srp_pad_to(PadLength, HostPublic)),
- sha_final(C2);
+ C0 = hash_init(sha),
+ C1 = hash_update(C0, srp_pad_to(PadLength, UserPublic)),
+ C2 = hash_update(C1, srp_pad_to(PadLength, HostPublic)),
+ hash_final(C2);
srp_scrambler('3', _, HostPublic, _Prime) ->
%% The parameter u is a 32-bit unsigned integer which takes its value
%% from the first 32 bits of the SHA1 hash of B, MSB first.
@@ -1515,13 +1154,13 @@ srp_value_B_nif(_Multiplier, _Verifier, _Generator, _Exponent, _Prime) -> ?nif_s
%% Digital signatures --------------------------------------------------------------------
-rsa_sign_nif(_Type,_Data,_Key) -> ?nif_stub.
-dss_sign_nif(_Type,_Data,_Key) -> ?nif_stub.
-ecdsa_sign_nif(_Type, _DataOrDigest, _Curve, _Key) -> ?nif_stub.
+rsa_sign_nif(_Type,_Digest,_Key) -> ?nif_stub.
+dss_sign_nif(_Type,_Digest,_Key) -> ?nif_stub.
+ecdsa_sign_nif(_Type, _Digest, _Curve, _Key) -> ?nif_stub.
-dss_verify_nif(_Type, _Data, _Signature, _Key) -> ?nif_stub.
-rsa_verify_nif(_Type, _Data, _Signature, _Key) -> ?nif_stub.
-ecdsa_verify_nif(_Type, _DataOrDigest, _Signature, _Curve, _Key) -> ?nif_stub.
+dss_verify_nif(_Type, _Digest, _Signature, _Key) -> ?nif_stub.
+rsa_verify_nif(_Type, _Digest, _Signature, _Key) -> ?nif_stub.
+ecdsa_verify_nif(_Type, _Digest, _Signature, _Curve, _Key) -> ?nif_stub.
%% Public Keys --------------------------------------------------------------------
%% DH Diffie-Hellman functions
diff --git a/lib/crypto/test/Makefile b/lib/crypto/test/Makefile
index 07e5c1b754..928a1b1d73 100644
--- a/lib/crypto/test/Makefile
+++ b/lib/crypto/test/Makefile
@@ -28,7 +28,7 @@ RELSYSDIR = $(RELEASE_PATH)/crypto_test
# FLAGS
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
MAKE_EMAKE = $(wildcard $(ERL_TOP)/make/make_emakefile)
diff --git a/lib/crypto/test/blowfish_SUITE.erl b/lib/crypto/test/blowfish_SUITE.erl
index b0d6954820..d7c50dc6de 100644
--- a/lib/crypto/test/blowfish_SUITE.erl
+++ b/lib/crypto/test/blowfish_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,8 +24,7 @@
%% Note: This directive should only be used in test suites.
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
--include("test_server_line.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(TIMEOUT, 120000). % 2 min
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl
index 307fc4b019..6732f27824 100644
--- a/lib/crypto/test/crypto_SUITE.erl
+++ b/lib/crypto/test/crypto_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -66,6 +66,7 @@ all() ->
{group, aes_ctr},
{group, aes_gcm},
{group, chacha20_poly1305},
+ {group, aes_cbc},
mod_pow,
exor,
rand_uniform
@@ -107,7 +108,8 @@ groups() ->
{rc4, [], [stream]},
{aes_ctr, [], [stream]},
{aes_gcm, [], [aead]},
- {chacha20_poly1305, [], [aead]}
+ {chacha20_poly1305, [], [aead]},
+ {aes_cbc, [], [block]}
].
%%-------------------------------------------------------------------
@@ -118,10 +120,10 @@ init_per_suite(Config) ->
_ ->
Config
catch error:low_entropy ->
- %% Make sure we are on OSE, otherwise we want to crash
- {ose,_} = os:type(),
+ %% We are testing on an OS with low entropy in its random
+ %% seed. So we have to seed it with a binary to get started.
- %% This is NOT how you want to seed this, it is just here
+ %% This is NOT how you want to do seeding, it is just here
%% to make the tests pass. Check your OS manual for how you
%% really want to seed.
{H,M,L} = erlang:now(),
@@ -267,7 +269,6 @@ rand_uniform() ->
[{doc, "rand_uniform and random_bytes testing"}].
rand_uniform(Config) when is_list(Config) ->
rand_uniform_aux_test(10),
- 10 = byte_size(crypto:rand_bytes(10)),
10 = byte_size(crypto:strong_rand_bytes(10)).
%%--------------------------------------------------------------------
@@ -363,6 +364,21 @@ block_cipher({Type, Key, IV, PlainText}) ->
ok;
Other ->
ct:fail({{crypto, block_decrypt, [Type, Key, IV, CipherText]}, {expected, Plain}, {got, Other}})
+ end;
+
+block_cipher({Type, Key, IV, PlainText, CipherText}) ->
+ Plain = iolist_to_binary(PlainText),
+ case crypto:block_encrypt(Type, Key, IV, Plain) of
+ CipherText ->
+ ok;
+ Other0 ->
+ ct:fail({{crypto, block_encrypt, [Type, Key, IV, Plain]}, {expected, CipherText}, {got, Other0}})
+ end,
+ case crypto:block_decrypt(Type, Key, IV, CipherText) of
+ Plain ->
+ ok;
+ Other1 ->
+ ct:fail({{crypto, block_decrypt, [Type, Key, IV, CipherText]}, {expected, Plain}, {got, Other1}})
end.
block_cipher_increment({Type, Key, IV, PlainTexts}) when Type == des_cbc;
@@ -370,7 +386,11 @@ block_cipher_increment({Type, Key, IV, PlainTexts}) when Type == des_cbc;
Type == aes_cbc;
Type == des_cbf
->
- block_cipher_increment(Type, Key, IV, IV, PlainTexts, iolist_to_binary(PlainTexts), []);
+ block_cipher_increment(Type, Key, IV, IV, PlainTexts, iolist_to_binary(PlainTexts), []);
+block_cipher_increment({Type, Key, IV, PlainTexts, _CipherText}) when Type == aes_cbc ->
+ Plain = iolist_to_binary(PlainTexts),
+ Blocks = [iolistify(Block) || << Block:128/bitstring >> <= Plain],
+ block_cipher_increment(Type, Key, IV, IV, Blocks, Plain, []);
block_cipher_increment({_Type, _, _, _}) ->
ok;
block_cipher_increment({_,_,_}) ->
@@ -441,6 +461,21 @@ aead_cipher({Type, Key, PlainText, IV, AAD, CipherText, CipherTag}) ->
ok;
Other1 ->
ct:fail({{crypto, block_decrypt, [CipherText]}, {expected, Plain}, {got, Other1}})
+ end;
+aead_cipher({Type, Key, PlainText, IV, AAD, CipherText, CipherTag, TagLen}) ->
+ <<TruncatedCipherTag:TagLen/binary, _/binary>> = CipherTag,
+ Plain = iolist_to_binary(PlainText),
+ case crypto:block_encrypt(Type, Key, IV, {AAD, Plain, TagLen}) of
+ {CipherText, TruncatedCipherTag} ->
+ ok;
+ Other0 ->
+ ct:fail({{crypto, block_encrypt, [Plain, PlainText]}, {expected, {CipherText, TruncatedCipherTag}}, {got, Other0}})
+ end,
+ case crypto:block_decrypt(Type, Key, IV, {AAD, CipherText, TruncatedCipherTag}) of
+ Plain ->
+ ok;
+ Other1 ->
+ ct:fail({{crypto, block_decrypt, [CipherText]}, {expected, Plain}, {got, Other1}})
end.
do_sign_verify({Type, Hash, Public, Private, Msg}) ->
@@ -552,7 +587,9 @@ do_block_iolistify({des_ede3 = Type, Key, IV, PlainText}) ->
do_block_iolistify({Type, Key, PlainText}) ->
{Type, iolistify(Key), iolistify(PlainText)};
do_block_iolistify({Type, Key, IV, PlainText}) ->
- {Type, iolistify(Key), IV, iolistify(PlainText)}.
+ {Type, iolistify(Key), IV, iolistify(PlainText)};
+do_block_iolistify({Type, Key, IV, PlainText, CipherText}) ->
+ {Type, iolistify(Key), IV, iolistify(PlainText), CipherText}.
iolistify(<<"Test With Truncation">>)->
%% Do not iolistify as it spoils this special case
@@ -611,8 +648,8 @@ ipow(A, B, M, Prod) ->
do_exor(B) ->
Z1 = zero_bin(B),
Z1 = crypto:exor(B, B),
- B1 = crypto:rand_bytes(100),
- B2 = crypto:rand_bytes(100),
+ B1 = crypto:strong_rand_bytes(100),
+ B2 = crypto:strong_rand_bytes(100),
Z2 = zero_bin(B1),
Z2 = crypto:exor(B1, B1),
Z2 = crypto:exor(B2, B2),
@@ -803,6 +840,9 @@ group_config(aes_gcm, Config) ->
group_config(chacha20_poly1305, Config) ->
AEAD = chacha20_poly1305(),
[{aead, AEAD} | Config];
+group_config(aes_cbc, Config) ->
+ Block = aes_cbc(),
+ [{block, Block} | Config];
group_config(_, Config) ->
Config.
@@ -1166,6 +1206,50 @@ rc2_cbc() ->
<<72,91,135,182,25,42,35,210>>,
<<36,245,206,158,168,230,58,69,148,137,32,192,250,41,237,181,181,251, 192,2,175,135,177,171,57,30,111,117,159,149,15,28,88,158,28,81,28,115, 85,219,241,82,117,222,91,85,73,117,164,25,182,52,191,64,123,57,26,19, 211,27,253,31,194,219,231,104,247,240,172,130,119,21,225,154,101,247, 32,216,42,216,133,169,78,22,97,27,227,26,196,224,172,168,17,9,148,55, 203,91,252,40,61,226,236,221,215,160,78,63,13,181,68,57,196,241,185, 207, 116,129,152,237,60,139,247,153,27,146,161,246,222,98,185,222,152, 187,135, 236,86,34,7,110,91,230,173,34,160,242,202,222,121,127,181,140, 101,203,195, 190,88,250,86,147,127,87,72,126,171,16,71,47,110,248,88, 14,29,143,161,152, 129,236,148,22,152,186,208,119,70,8,174,193,203,100, 193,203,200,117,102,242, 134,142,96,125,135,200,217,190,76,117,50,70, 209,186,101,241,200,91,40,193,54, 90,195,38,47,59,197,38,234,86,223,16, 51,253,204,129,20,171,66,21,241,26,135,216, 196,114,110,91,15,53,40, 164,201,136,113,95,247,51,181,208,241,68,168,98,151,36, 155,72,24,57, 42,191,14,125,204,10,167,214,233,138,115,125,234,121,134,227,26,247, 77,200,117,110,117,111,168,156,206,67,159,149,189,173,150,193,91,199, 216,153,22, 189,137,185,89,160,13,131,132,58,109,28,110,246,252,251,14, 232,91,38,52,29,101,188,69,123,50,0,130,178,93,73,239,118,7,77,35,59, 253,10,159,45,86,142,37,78,232,48>>
}].
+
+%% AES CBC test vectors from http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
+aes_cbc() ->
+ [
+ %% F.2.1 CBC-AES128.Encrypt, F.2.2 CBC-AES128.Decrypt
+ {aes_cbc,
+ hexstr2bin("2b7e151628aed2a6abf7158809cf4f3c"), %% Key
+ hexstr2bin("000102030405060708090a0b0c0d0e0f"), %% IV
+ hexstr2bin("6bc1bee22e409f96e93d7e117393172a" %% PlainText
+ "ae2d8a571e03ac9c9eb76fac45af8e51"
+ "30c81c46a35ce411e5fbc1191a0a52ef"
+ "f69f2445df4f9b17ad2b417be66c3710"),
+ hexstr2bin("7649abac8119b246cee98e9b12e9197d" %% CipherText
+ "5086cb9b507219ee95db113a917678b2"
+ "73bed6b8e3c1743b7116e69e22229516"
+ "3ff1caa1681fac09120eca307586e1a7")},
+ %% F.2.3 CBC-AES192.Encrypt, F.2.4 CBC-AES192.Decrypt
+ {aes_cbc,
+ hexstr2bin("8e73b0f7da0e6452c810f32b809079e5" %% Key
+ "62f8ead2522c6b7b"),
+ hexstr2bin("000102030405060708090a0b0c0d0e0f"), %% IV
+ hexstr2bin("6bc1bee22e409f96e93d7e117393172a" %% PlainText
+ "ae2d8a571e03ac9c9eb76fac45af8e51"
+ "30c81c46a35ce411e5fbc1191a0a52ef"
+ "f69f2445df4f9b17ad2b417be66c3710"),
+ hexstr2bin("4f021db243bc633d7178183a9fa071e8" %% CipherText
+ "b4d9ada9ad7dedf4e5e738763f69145a"
+ "571b242012fb7ae07fa9baac3df102e0"
+ "08b0e27988598881d920a9e64f5615cd")},
+ %% F.2.5 CBC-AES256.Encrypt, F.2.6 CBC-AES256.Decrypt
+ {aes_cbc,
+ hexstr2bin("603deb1015ca71be2b73aef0857d7781" %% Key
+ "1f352c073b6108d72d9810a30914dff4"),
+ hexstr2bin("000102030405060708090a0b0c0d0e0f"), %% IV
+ hexstr2bin("6bc1bee22e409f96e93d7e117393172a" %% PlainText
+ "ae2d8a571e03ac9c9eb76fac45af8e51"
+ "30c81c46a35ce411e5fbc1191a0a52ef"
+ "f69f2445df4f9b17ad2b417be66c3710"),
+ hexstr2bin("f58c4c04d6e5f1ba779eabfb5f7bfbd6" %% CipherText
+ "9cfc4e967edb808d679f777bc6702c7d"
+ "39f23369a9d9bacfa530e26304231461"
+ "b2eb05e2c39be9fcda6c19078c6a9d1b")}
+ ].
+
aes_cbc128() ->
[{aes_cbc128,
hexstr2bin("2b7e151628aed2a6abf7158809cf4f3c"),
@@ -1310,6 +1394,14 @@ aes_ecb() ->
"ae2d8a571e03ac9c9eb76fac45af8e51"
"30c81c46a35ce411e5fbc1191a0a52ef"
"f69f2445df4f9b17ad2b417be66c3710")},
+ %% F.1.3 ECB-AES192.Encrypt, F.1.4 ECB-AES192.Decrypt
+ {aes_ecb,
+ hexstr2bin("8e73b0f7da0e6452c810f32b809079e5"
+ "62f8ead2522c6b7b"),
+ hexstr2bin("6bc1bee22e409f96e93d7e117393172a"
+ "ae2d8a571e03ac9c9eb76fac45af8e51"
+ "30c81c46a35ce411e5fbc1191a0a52ef"
+ "f69f2445df4f9b17ad2b417be66c3710")},
%% F.1.5 ECB-AES256.Encrypt, F.1.6 ECB-AES256.Decrypt
{aes_ecb,
hexstr2bin("603deb1015ca71be2b73aef0857d7781"
@@ -1860,7 +1952,36 @@ aes_gcm() ->
"eeb2b22aafde6419a058ab4f6f746bf4"
"0fc0c3b780f244452da3ebf1c5d82cde"
"a2418997200ef82e44ae7e3f"),
- hexstr2bin("a44a8266ee1c8eb0c8b5d4cf5ae9f19a")} %% CipherTag
+ hexstr2bin("a44a8266ee1c8eb0c8b5d4cf5ae9f19a")}, %% CipherTag
+
+ %% Test Case 0 for TagLength = 1
+ {aes_gcm, hexstr2bin("00000000000000000000000000000000"), %% Key
+ hexstr2bin(""), %% PlainText
+ hexstr2bin("000000000000000000000000"), %% IV
+ hexstr2bin(""), %% AAD
+ hexstr2bin(""), %% CipherText
+ hexstr2bin("58"), %% CipherTag
+ 1}, %% TagLength
+
+ %% Test Case 18 for TagLength = 1
+ {aes_gcm, hexstr2bin("feffe9928665731c6d6a8f9467308308" %% Key
+ "feffe9928665731c6d6a8f9467308308"),
+ hexstr2bin("d9313225f88406e5a55909c5aff5269a" %% PlainText
+ "86a7a9531534f7da2e4c303d8a318a72"
+ "1c3c0c95956809532fcf0e2449a6b525"
+ "b16aedf5aa0de657ba637b39"),
+ hexstr2bin("9313225df88406e555909c5aff5269aa" %% IV
+ "6a7a9538534f7da1e4c303d2a318a728"
+ "c3c0c95156809539fcf0e2429a6b5254"
+ "16aedbf5a0de6a57a637b39b"),
+ hexstr2bin("feedfacedeadbeeffeedfacedeadbeef" %% AAD
+ "abaddad2"),
+ hexstr2bin("5a8def2f0c9e53f1f75d7853659e2a20" %% CipherText
+ "eeb2b22aafde6419a058ab4f6f746bf4"
+ "0fc0c3b780f244452da3ebf1c5d82cde"
+ "a2418997200ef82e44ae7e3f"),
+ hexstr2bin("a4"), %% CipherTag
+ 1} %% TagLength
].
%% http://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-04
diff --git a/lib/crypto/test/old_crypto_SUITE.erl b/lib/crypto/test/old_crypto_SUITE.erl
index 1e7f3a1438..0d97290d10 100644
--- a/lib/crypto/test/old_crypto_SUITE.erl
+++ b/lib/crypto/test/old_crypto_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(old_crypto_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2,
init_per_testcase/2,
@@ -187,7 +187,9 @@ ldd_program() ->
case os:find_executable("otool") of
false -> none;
Otool -> Otool ++ " -L"
- end
+ end;
+ _ ->
+ none
end;
Ldd when is_list(Ldd) -> Ldd
end.
@@ -2066,8 +2068,8 @@ exor_test(Config) when is_list(Config) ->
B = <<1, 2, 3, 4, 5, 6, 7, 8, 9, 10>>,
Z1 = zero_bin(B),
Z1 = crypto:exor(B, B),
- B1 = crypto:rand_bytes(100),
- B2 = crypto:rand_bytes(100),
+ B1 = crypto:strong_rand_bytes(100),
+ B2 = crypto:strong_rand_bytes(100),
Z2 = zero_bin(B1),
Z2 = crypto:exor(B1, B1),
Z2 = crypto:exor(B2, B2),
diff --git a/lib/crypto/vsn.mk b/lib/crypto/vsn.mk
index 6dcb28ec8a..96466869d1 100644
--- a/lib/crypto/vsn.mk
+++ b/lib/crypto/vsn.mk
@@ -1 +1 @@
-CRYPTO_VSN = 3.6.3
+CRYPTO_VSN = 3.7
diff --git a/lib/debugger/Makefile b/lib/debugger/Makefile
index 9c761d216b..8c8b617831 100644
--- a/lib/debugger/Makefile
+++ b/lib/debugger/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/debugger/doc/src/Makefile b/lib/debugger/doc/src/Makefile
index 226dbe5b44..6c9617ca69 100644
--- a/lib/debugger/doc/src/Makefile
+++ b/lib/debugger/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/debugger/doc/src/book.xml b/lib/debugger/doc/src/book.xml
index 5424ef2c04..10356e14d0 100644
--- a/lib/debugger/doc/src/book.xml
+++ b/lib/debugger/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/debugger/doc/src/introduction.xml b/lib/debugger/doc/src/introduction.xml
index 9f5f279bb0..95a42cad09 100644
--- a/lib/debugger/doc/src/introduction.xml
+++ b/lib/debugger/doc/src/introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/debugger/doc/src/notes.xml b/lib/debugger/doc/src/notes.xml
index 6e8cf54ae4..2e0d834269 100644
--- a/lib/debugger/doc/src/notes.xml
+++ b/lib/debugger/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,6 +33,22 @@
<p>This document describes the changes made to the Debugger
application.</p>
+<section><title>Debugger 4.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>When the debugger searches for source files, it will
+ also use the location of the source in the compilation
+ information part of the BEAM file.</p>
+ <p>
+ Own Id: OTP-13375</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Debugger 4.1.2</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/debugger/doc/src/ref_man.xml b/lib/debugger/doc/src/ref_man.xml
index c44f07f912..0f224cdb4b 100644
--- a/lib/debugger/doc/src/ref_man.xml
+++ b/lib/debugger/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/debugger/priv/Makefile b/lib/debugger/priv/Makefile
index 77c114fa35..726d7eb2f3 100644
--- a/lib/debugger/priv/Makefile
+++ b/lib/debugger/priv/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/Makefile b/lib/debugger/src/Makefile
index f115f49d98..9594a0bfe3 100644
--- a/lib/debugger/src/Makefile
+++ b/lib/debugger/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/dbg_debugged.erl b/lib/debugger/src/dbg_debugged.erl
index 99bed6f01b..e142af4ae0 100644
--- a/lib/debugger/src/dbg_debugged.erl
+++ b/lib/debugger/src/dbg_debugged.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -70,7 +70,10 @@ msg_loop(Meta, Mref, SaveStacktrace) ->
%% Meta is evaluating a receive, must be done within context
%% of real (=this) process
{sys, Meta, {'receive',Msg}} ->
- receive Msg -> Meta ! {self(), rec_acked} end,
+ receive Msg ->
+ Meta ! {self(), rec_acked},
+ ok
+ end,
msg_loop(Meta, Mref, SaveStacktrace);
%% Meta needs something evaluated within context of real process
diff --git a/lib/debugger/src/dbg_icmd.erl b/lib/debugger/src/dbg_icmd.erl
index 1b274e20ae..57a3719a50 100644
--- a/lib/debugger/src/dbg_icmd.erl
+++ b/lib/debugger/src/dbg_icmd.erl
@@ -171,10 +171,10 @@ handle_cmd(Bs, Status, Ieval) ->
%% User control of process execution and settings
%%====================================================================
-step(Meta) -> Meta ! {user, {cmd, step}}.
-next(Meta) -> Meta ! {user, {cmd, next}}.
-continue(Meta) -> Meta ! {user, {cmd, continue}}.
-finish(Meta) -> Meta ! {user, {cmd, finish}}.
+step(Meta) -> Meta ! {user, {cmd, step}}, ok.
+next(Meta) -> Meta ! {user, {cmd, next}}, ok.
+continue(Meta) -> Meta ! {user, {cmd, continue}}, ok.
+finish(Meta) -> Meta ! {user, {cmd, finish}}, ok.
skip(Meta) -> Meta ! {user, {cmd, skip}}.
timeout(Meta) -> Meta ! {user, timeout}.
diff --git a/lib/debugger/src/dbg_idb.erl b/lib/debugger/src/dbg_idb.erl
index 9ce3ec3ef2..55177bbe76 100644
--- a/lib/debugger/src/dbg_idb.erl
+++ b/lib/debugger/src/dbg_idb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/dbg_iload.erl b/lib/debugger/src/dbg_iload.erl
index 2a8bcd32d8..369b456524 100644
--- a/lib/debugger/src/dbg_iload.erl
+++ b/lib/debugger/src/dbg_iload.erl
@@ -39,7 +39,7 @@
%% dbg_iserver. We are suspended until the module has been loaded.
%%--------------------------------------------------------------------
-spec load_mod(Mod, file:filename(), binary(), ets:tid()) ->
- {'ok', Mod} when is_subtype(Mod, atom()).
+ {'ok', Mod} when Mod :: atom().
load_mod(Mod, File, Binary, Db) ->
Flag = process_flag(trap_exit, true),
@@ -541,7 +541,7 @@ fun_clauses([]) -> [].
new_map(Fs0, Anno, F) ->
Line = ln(Anno),
Fs1 = map_fields(Fs0, F),
- Fs2 = [{ln(A),K,V} || {map_field_assoc,A,K,V} <- Fs1],
+ Fs2 = [{L,K,V} || {map_field_assoc,L,K,V} <- Fs1],
try
{value,Line,map_literal(Fs2, #{})}
catch
diff --git a/lib/debugger/src/dbg_iserver.erl b/lib/debugger/src/dbg_iserver.erl
index 28e8012f71..3561454685 100644
--- a/lib/debugger/src/dbg_iserver.erl
+++ b/lib/debugger/src/dbg_iserver.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -72,17 +72,17 @@ cast(Int, Request) ->
gen_server:cast(Int, Request).
safe_call(Request) ->
- ensure_started(),
+ {ok, _} = ensure_started(),
call(Request).
safe_cast(Request) ->
- ensure_started(),
+ {ok, _} = ensure_started(),
cast(Request).
ensure_started() ->
case whereis(?MODULE) of
undefined -> start();
- _Pid -> ignore
+ Pid -> {ok, Pid}
end.
%%--Module database---------------------------------------------------
@@ -402,8 +402,10 @@ handle_cast({set_status, Meta, Status, Info}, State) ->
send_all(subscriber, {new_status, Proc#proc.pid, Status, Info}, State),
if
Status =:= break ->
- auto_attach(break, State#state.auto, Proc);
- true -> ignore
+ _ = auto_attach(break, State#state.auto, Proc),
+ ok;
+ true ->
+ ok
end,
Proc2 = Proc#proc{status=Status, info=Info},
{noreply, State#state{procs=lists:keyreplace(Meta, #proc.meta,
@@ -470,7 +472,7 @@ handle_info({'EXIT',Who,Why}, State) ->
[self(),AttPid,Pid,Why,ExitInfo]);
undefined ->
%% Otherwise, auto attach if necessary
- auto_attach(exit, State#state.auto, Pid),
+ _ = auto_attach(exit, State#state.auto, Pid),
Who
end,
send_all(subscriber, {new_status,Pid,exit,Why}, State),
@@ -583,7 +585,8 @@ send_all(Pids, Msg) ->
lists:foreach(fun(Pid) -> send(Pid, Msg) end, Pids).
send(Pid, Msg) ->
- Pid ! {int, Msg}.
+ Pid ! {int, Msg},
+ ok.
get_proc({Type, Pid}, Procs) ->
Index = case Type of
diff --git a/lib/debugger/src/dbg_istk.erl b/lib/debugger/src/dbg_istk.erl
index d6c512bdf8..886ea142af 100644
--- a/lib/debugger/src/dbg_istk.erl
+++ b/lib/debugger/src/dbg_istk.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/dbg_wx_break.erl b/lib/debugger/src/dbg_wx_break.erl
index b577cfdaec..764322d7c4 100644
--- a/lib/debugger/src/dbg_wx_break.erl
+++ b/lib/debugger/src/dbg_wx_break.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/dbg_wx_break_win.erl b/lib/debugger/src/dbg_wx_break_win.erl
index c9464f1e07..770681510d 100644
--- a/lib/debugger/src/dbg_wx_break_win.erl
+++ b/lib/debugger/src/dbg_wx_break_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -65,18 +65,18 @@ create_win(Parent, Pos, function, Mod, _Line) ->
{choices, IntStrs}]),
Expand = [{border, 5}, {flag,?wxLEFT bor ?wxRIGHT bor ?wxEXPAND}],
- wxSizer:add(MainS, Label, [{border,5},
+ _ = wxSizer:add(MainS, Label, [{border,5},
{flag,?wxTOP bor ?wxLEFT bor ?wxRIGHT}]),
- wxSizer:add(MainS, Text, Expand),
+ _ = wxSizer:add(MainS, Text, Expand),
FunLabel = wxStaticText:new(Win, ?wxID_ANY, "Function:"),
LB = wxListBox:new(Win, ?wxID_ANY, [{size,{-1, 100}},{style,?wxLB_MULTIPLE}]),
- wxSizer:add(MainS, FunLabel, Expand),
- wxSizer:add(MainS, LB, [{proportion,1}|Expand]),
+ _ = wxSizer:add(MainS, FunLabel, Expand),
+ _ = wxSizer:add(MainS, LB, [{proportion,1}|Expand]),
wxSizer:setMinSize(MainS, 300, 400),
OK = wxDialog:createStdDialogButtonSizer(Win, ?wxOK bor ?wxCANCEL),
- wxSizer:add(MainS, OK, [{border,5},{flag,?wxALL}]),
+ _ = wxSizer:add(MainS, OK, [{border,5},{flag,?wxALL}]),
wxDialog:setSizer(Win,MainS),
- wxSizer:fit(MainS, Win),
+ _ = wxSizer:fit(MainS, Win),
wxSizer:setSizeHints(MainS,Win),
wxComboBox:setFocus(Text),
wxDialog:connect(Win, command_button_clicked),
@@ -110,11 +110,11 @@ create_win(Parent, Pos, Type, Mod, Line) ->
IntStrs = [atom_to_list(M) || M <- Int],
ModT = wxComboBox:new(Win, ?wxID_ANY, [{choices,IntStrs}]),
ModSz = create_label_of_control(Win, "Module:", ModT, Mod),
- wxSizer:add(MainS,ModSz,[{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(MainS,ModSz,[{flag, ?wxEXPAND}]),
%% Create rest of text input fields
Add = fun({IType, Label, Def}) ->
{Sz, Text} = create_sizer_with_text(Win, Label, Def),
- wxSizer:add(MainS, Sz, [{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(MainS, Sz, [{flag, ?wxEXPAND}]),
{Text, IType}
end,
Inputs = case Type of
@@ -129,15 +129,15 @@ create_win(Parent, Pos, Type, Mod, Line) ->
Entries = wx:map(Add, Inputs),
%% Create and add radio box
{TriggerBox,Trigger} = create_trigger_box(Win),
- wxSizer:add(MainS, TriggerBox, [{border,5},{flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(MainS, TriggerBox, [{border,5},{flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:addStretchSpacer(MainS),
+ _ = wxSizer:addStretchSpacer(MainS),
%% Put it together
OK = wxDialog:createStdDialogButtonSizer(Win, ?wxOK bor ?wxCANCEL),
- wxSizer:add(MainS, OK, [{border,5},{flag,?wxALL}]),
+ _ = wxSizer:add(MainS, OK, [{border,5},{flag,?wxALL}]),
wxSizer:setMinSize(MainS, 300, -1),
wxDialog:setSizer(Win,MainS),
- wxSizer:fit(MainS, Win),
+ _ = wxSizer:fit(MainS, Win),
wxSizer:setSizeHints(MainS,Win),
wxComboBox:setFocus(ModT),
wxDialog:connect(Win, command_button_clicked),
@@ -243,8 +243,8 @@ create_label_of_control(Parent, Label, Control, Def) ->
Text = wxStaticText:new(Parent, ?wxID_ANY, Label),
Border = {border, 5},
Flag = ?wxRIGHT bor ?wxLEFT bor ?wxALIGN_CENTRE_VERTICAL,
- wxSizer:add(Sizer, Text, [{proportion,1}, {flag,Flag}, Border]),
- wxSizer:add(Sizer, Control, [{proportion,3}, {flag,Flag bor ?wxEXPAND}, Border]),
+ _ = wxSizer:add(Sizer, Text, [{proportion,1}, {flag,Flag}, Border]),
+ _ = wxSizer:add(Sizer, Control, [{proportion,3}, {flag,Flag bor ?wxEXPAND}, Border]),
wxControl:setLabel(Control, dbg_wx_win:to_string(Def)),
Sizer.
@@ -252,11 +252,11 @@ create_trigger_box(Win) ->
SBox = wxStaticBox:new(Win, ?wxID_ANY, "Trigger Action:"),
SBS = wxStaticBoxSizer:new(SBox, ?wxVERTICAL),
Ebtn = wxRadioButton:new(Win, ?wxID_ANY, "Enable"),
- wxSizer:add(SBS,Ebtn),
+ _ = wxSizer:add(SBS,Ebtn),
Dibtn = wxRadioButton:new(Win, ?wxID_ANY, "Disable"),
- wxSizer:add(SBS,Dibtn),
+ _ = wxSizer:add(SBS,Dibtn),
Debtn = wxRadioButton:new(Win, ?wxID_ANY, "Delete"),
- wxSizer:add(SBS,Debtn),
+ _ = wxSizer:add(SBS,Debtn),
wxRadioButton:setValue(Ebtn, true),
{SBS, [{Ebtn,enable},{Dibtn,disable},{Debtn,delete}]}.
diff --git a/lib/debugger/src/dbg_wx_code.erl b/lib/debugger/src/dbg_wx_code.erl
index a0e6c94d60..473963500a 100644
--- a/lib/debugger/src/dbg_wx_code.erl
+++ b/lib/debugger/src/dbg_wx_code.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -127,20 +127,22 @@ load_code(Ed, Code) ->
%%io:format("~p ~p ~p~n", [Lines, Sz, LW]),
?stc:setMarginWidth(Ed, 0, LW+5),
?stc:setReadOnly(Ed, true),
- Ed.
+ ok.
unload_code(Ed) ->
?stc:setReadOnly(Ed, false),
?stc:setTextRaw(Ed, <<0:8>>),
?stc:setReadOnly(Ed, true),
- Ed.
+ ok.
add_break_to_code(Ed, Line, active) ->
?stc:markerDelete(Ed, Line-1, 1),
- ?stc:markerAdd(Ed, Line-1, 0);
+ ?stc:markerAdd(Ed, Line-1, 0),
+ ok;
add_break_to_code(Ed, Line, inactive) ->
?stc:markerDelete(Ed, Line-1, 0),
- ?stc:markerAdd(Ed, Line-1, 1).
+ ?stc:markerAdd(Ed, Line-1, 1),
+ ok.
del_break_from_code(Ed,Line) ->
?stc:markerDelete(Ed, Line-1, 0),
diff --git a/lib/debugger/src/dbg_wx_filedialog_win.erl b/lib/debugger/src/dbg_wx_filedialog_win.erl
index 910eda7fad..f7b031dc28 100644
--- a/lib/debugger/src/dbg_wx_filedialog_win.erl
+++ b/lib/debugger/src/dbg_wx_filedialog_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -118,9 +118,9 @@ init([Parent, Id, Options0]) ->
wxTextCtrl:connect(Dir, char, [{callback, IsTab}]),
Top = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(Top, Back, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(Top, Forw, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(Top, Up, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Top, Back, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Top, Forw, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Top, Up, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
%% List Ctrl
{Art, IconMap} = create_icons(ExtraIcons),
@@ -154,13 +154,13 @@ init([Parent, Id, Options0]) ->
%% OK done
Box = wxBoxSizer:new(?wxVERTICAL),
- wxSizer:add(Box, Top, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(Box, Dir, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(Box, LC, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}, {proportion, 1}]),
- wxSizer:add(Box, Bott, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Box, Top, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Box, Dir, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Box, LC, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}, {proportion, 1}]),
+ _ = wxSizer:add(Box, Bott, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
wxWindow:setSizer(Dlg, Box),
- wxSizer:fit(Box, Dlg),
+ _ = wxSizer:fit(Box, Dlg),
wxSizer:setSizeHints(Box,Dlg),
State = #state{win=Dlg,
back=Back, forward=Forw, up=Up,
diff --git a/lib/debugger/src/dbg_wx_filedialog_win.hrl b/lib/debugger/src/dbg_wx_filedialog_win.hrl
index 96a6fb2ae9..3eb21ffb29 100644
--- a/lib/debugger/src/dbg_wx_filedialog_win.hrl
+++ b/lib/debugger/src/dbg_wx_filedialog_win.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/dbg_wx_interpret.erl b/lib/debugger/src/dbg_wx_interpret.erl
index f93a9089d7..4dcb5b65ac 100644
--- a/lib/debugger/src/dbg_wx_interpret.erl
+++ b/lib/debugger/src/dbg_wx_interpret.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/dbg_wx_mon.erl b/lib/debugger/src/dbg_wx_mon.erl
index cd09dd1273..a32a6894b8 100644
--- a/lib/debugger/src/dbg_wx_mon.erl
+++ b/lib/debugger/src/dbg_wx_mon.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -135,7 +135,7 @@ init2(CallingPid, Mode, SFile, GS) ->
%% Start other necessary stuff
dbg_wx_win:init(),
- dbg_wx_winman:start(), % Debugger window manager
+ _ = dbg_wx_winman:start(), % Debugger window manager
%% Create monitor window
Title = "Monitor",
@@ -339,7 +339,7 @@ gui_cmd('Delete All Modules', State) ->
lists:foreach(fun(Mod) -> int:nn(Mod) end, int:interpreted()),
State;
gui_cmd({module, Mod, What}, State) ->
- case What of
+ _ = case What of
delete -> int:nn(Mod);
view ->
Window = dbg_wx_mon_win:get_window(State#state.win),
diff --git a/lib/debugger/src/dbg_wx_mon_win.erl b/lib/debugger/src/dbg_wx_mon_win.erl
index 5377ef83af..9737c9e67f 100644
--- a/lib/debugger/src/dbg_wx_mon_win.erl
+++ b/lib/debugger/src/dbg_wx_mon_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -107,31 +107,31 @@ create_win_batch(Title, Menus) ->
Hlb = 200,
Listbox = wxListBox:new(Panel, ?wxID_ANY, [{size,{?Wf,Hlb}},
{style,?wxLB_SINGLE}]),
- wxSizer:add(LeftSz,Listbox,[{proportion,1},{border,3},{flag,?wxEXPAND}]),
+ _ = wxSizer:add(LeftSz,Listbox,[{proportion,1},{border,3},{flag,?wxEXPAND}]),
wxListBox:connect(Listbox, command_listbox_doubleclicked),
wxListBox:connect(Listbox, right_down),
SBox = wxStaticBox:new(Panel, ?wxID_ANY, "Auto Attach:"),
SBS = wxStaticBoxSizer:new(SBox, ?wxVERTICAL),
Fbtn = wxCheckBox:new(Panel, ?autoId, "First Call"),
- wxSizer:add(SBS,Fbtn),
+ _ = wxSizer:add(SBS,Fbtn),
Bbtn = wxCheckBox:new(Panel, ?autoId, "On Break"),
- wxSizer:add(SBS,Bbtn),
+ _ = wxSizer:add(SBS,Bbtn),
Ebtn = wxCheckBox:new(Panel, ?autoId, "On Exit"),
- wxSizer:add(SBS,Ebtn),
+ _ = wxSizer:add(SBS,Ebtn),
wxFrame:connect(Panel, command_checkbox_clicked),
- wxSizer:add(LeftSz,SBS, [{flag,?wxEXPAND}]),
+ _ = wxSizer:add(LeftSz,SBS, [{flag,?wxEXPAND}]),
SLabel = wxStaticText:new(Panel, ?wxID_ANY, "Stack Trace:\n On (with tail)"),
- wxSizer:add(LeftSz,SLabel),
+ _ = wxSizer:add(LeftSz,SLabel),
BLabel = wxStaticText:new(Panel, ?wxID_ANY, "Back Trace Size:\n 50000"),
- wxSizer:add(LeftSz,BLabel),
+ _ = wxSizer:add(LeftSz,BLabel),
StringsBox = wxStaticBox:new(Panel, ?wxID_ANY, "Strings:"),
StringsBS = wxStaticBoxSizer:new(StringsBox, ?wxVERTICAL),
Stringsbtn = wxCheckBox:new(Panel, ?stringsId, ?STRTEXT),
- wxSizer:add(StringsBS,Stringsbtn),
- wxSizer:add(LeftSz,StringsBS, [{flag,?wxEXPAND}]),
+ _ = wxSizer:add(StringsBS,Stringsbtn),
+ _ = wxSizer:add(LeftSz,StringsBS, [{flag,?wxEXPAND}]),
%% Create list_crtl / grid
Grid = wxListCtrl:new(Panel, [{winid, ?GRID},
@@ -169,12 +169,12 @@ create_win_batch(Title, Menus) ->
wxWindow:setFocus(Grid),
%% Put it in the window
- wxSizer:add(MainSz, LeftSz, [{border, 3}, {flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(MainSz, Grid, [{border, 3}, {flag,?wxALL bor ?wxEXPAND},
+ _ = wxSizer:add(MainSz, LeftSz, [{border, 3}, {flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(MainSz, Grid, [{border, 3}, {flag,?wxALL bor ?wxEXPAND},
{proportion, 1}]),
wxWindow:setSizer(Panel,MainSz),
- wxSizer:fit(MainSz, Win),
+ _ = wxSizer:fit(MainSz, Win),
wxSizer:setSizeHints(MainSz,Win),
IconFile = dbg_wx_win:find_icon("erlang_bug.png"),
diff --git a/lib/debugger/src/dbg_wx_settings.erl b/lib/debugger/src/dbg_wx_settings.erl
index e45d74f67e..3a355f18a9 100644
--- a/lib/debugger/src/dbg_wx_settings.erl
+++ b/lib/debugger/src/dbg_wx_settings.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/dbg_wx_src_view.erl b/lib/debugger/src/dbg_wx_src_view.erl
index 43c36a4d8e..207c407fbc 100644
--- a/lib/debugger/src/dbg_wx_src_view.erl
+++ b/lib/debugger/src/dbg_wx_src_view.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -56,7 +56,7 @@ code_area(Parent, Sizer) ->
end,
[SetStyle(Style) || Style <- Styles],
?stc:setKeyWords(Ed, 0, keyWords()),
- wxSizer:add(Sizer, Ed, [{proportion,1}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(Sizer, Ed, [{proportion,1}, {flag, ?wxEXPAND}]),
Ed.
diff --git a/lib/debugger/src/dbg_wx_trace.erl b/lib/debugger/src/dbg_wx_trace.erl
index f9c60f9b72..6af19af33b 100644
--- a/lib/debugger/src/dbg_wx_trace.erl
+++ b/lib/debugger/src/dbg_wx_trace.erl
@@ -321,7 +321,7 @@ gui_cmd('Kill', State) ->
exit(State#state.pid, kill),
State;
gui_cmd('Messages', State) ->
- case int:meta(State#state.meta, messages) of
+ _ = case int:meta(State#state.meta, messages) of
[] ->
dbg_wx_trace_win:eval_output(State#state.win,"< No Messages!\n", bold);
Messages ->
diff --git a/lib/debugger/src/dbg_wx_trace_win.erl b/lib/debugger/src/dbg_wx_trace_win.erl
index 232d61b1db..972a917728 100644
--- a/lib/debugger/src/dbg_wx_trace_win.erl
+++ b/lib/debugger/src/dbg_wx_trace_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -123,7 +123,8 @@
%% GS = term()
%%--------------------------------------------------------------------
init() ->
- dbg_wx_win:init().
+ _ = dbg_wx_win:init(),
+ ok.
stop(#winInfo{window=Win}) ->
(catch wxFrame:destroy(Win)),
@@ -149,29 +150,29 @@ create_win(Parent, Title, Windows, Menus) ->
Sizer = wxBoxSizer:new(?wxVERTICAL),
Code = code_area(Panel),
- wxSizer:add(Sizer, Code#sub.win,
+ _ = wxSizer:add(Sizer, Code#sub.win,
[{proportion,1}, {border, 2},
{flag, ?wxEXPAND bor ?wxDOWN}]),
wxSizer:setVirtualSizeHints(Sizer, Code#sub.win),
ExpandWithBorder = [{border, 3},{flag,?wxEXPAND bor ?wxALL}],
Search = search_area(Panel),
- wxSizer:add(Sizer, Search#sub.win, ExpandWithBorder),
+ _ = wxSizer:add(Sizer, Search#sub.win, ExpandWithBorder),
Bs = button_area(Panel),
- wxSizer:add(Sizer, Bs#sub.win, ExpandWithBorder),
+ _ = wxSizer:add(Sizer, Bs#sub.win, ExpandWithBorder),
InfoArea = wxBoxSizer:new(?wxHORIZONTAL),
wxSizer:setMinSize(InfoArea, {100, ?EVAL_H}),
Eval = eval_area(Panel),
- wxSizer:add(InfoArea, Eval#sub.win, [{proportion,1},{flag,?wxEXPAND}]),
+ _ = wxSizer:add(InfoArea, Eval#sub.win, [{proportion,1},{flag,?wxEXPAND}]),
Bind = bind_area(Panel),
- wxSizer:add(InfoArea, Bind#sub.win,
+ _ = wxSizer:add(InfoArea, Bind#sub.win,
[{proportion,1},{border, 2},
{flag,?wxEXPAND bor ?wxLEFT}]),
- wxSizer:add(Sizer, InfoArea, ExpandWithBorder),
+ _ = wxSizer:add(Sizer, InfoArea, ExpandWithBorder),
Trace = trace_area(Panel),
- wxSizer:add(Sizer, Trace#sub.win, ExpandWithBorder),
+ _ = wxSizer:add(Sizer, Trace#sub.win, ExpandWithBorder),
SB = wxFrame:createStatusBar(Win,[]),
%% Note id and lastId to get the event when it dragged is complete
@@ -192,7 +193,7 @@ create_win(Parent, Title, Windows, Menus) ->
Wi = show_windows(enable_windows(Wi0,Windows)),
wxWindow:setSizer(Panel, Sizer),
- wxSizer:fit(Sizer, Win),
+ _ = wxSizer:fit(Sizer, Win),
wxSizer:setSizeHints(Sizer,Win),
IconFile = dbg_wx_win:find_icon("erlang_bug.png"),
@@ -230,11 +231,11 @@ get_window(WinInfo) ->
%%--------------------------------------------------------------------
configure(Wi=#winInfo{window=Win,m_szr={Panel,Sizer}}) ->
wx:batch(fun() ->
- show_windows(Wi),
+ _ = show_windows(Wi),
wxSizer:layout(Sizer),
%%wxWindow:setSizerAndFit(Panel,Sizer),
wxWindow:setSizer(Panel, Sizer),
- wxSizer:fit(Sizer, Win),
+ _ = wxSizer:fit(Sizer, Win),
wxSizer:setSizeHints(Sizer,Win),
Wi
end).
@@ -242,10 +243,10 @@ configure(Wi=#winInfo{window=Win,m_szr={Panel,Sizer}}) ->
configure(Wi0=#winInfo{window=Win,m_szr={Panel,Sizer}}, Windows) ->
wx:batch(fun() ->
Wi = enable_windows(Wi0, Windows),
- show_windows(Wi),
+ _ = show_windows(Wi),
wxSizer:layout(Sizer),
wxWindow:setSizer(Panel, Sizer),
- wxSizer:fit(Sizer, Win),
+ _ = wxSizer:fit(Sizer, Win),
wxSizer:setSizeHints(Sizer,Win),
Wi
end).
@@ -348,7 +349,7 @@ add_break(WinInfo, Menu, {{Mod,Line},[Status|_Options]}=Break) ->
case WinInfo#winInfo.editor of
{Mod, Editor} ->
dbg_wx_code:add_break_to_code(Editor, Line, Status);
- _ -> ignore
+ _ -> ok
end,
add_break_to_menu(WinInfo, Menu, Break).
@@ -372,7 +373,7 @@ update_break(WinInfo, {{Mod,Line},[Status|_Options]}=Break) ->
case WinInfo#winInfo.editor of
{Mod, Editor} ->
dbg_wx_code:add_break_to_code(Editor, Line, Status);
- _ -> ignore
+ _ -> ok
end,
update_break_in_menu(WinInfo, Break).
@@ -929,7 +930,7 @@ button_area(Parent) ->
B=wxButton:new(Parent, Button,
[{label,dbg_wx_win:to_string(Name)}]),
Id = wxWindow:getId(B),
- wxSizer:add(Sz,B, []),
+ _ = wxSizer:add(Sz,B, []),
wxButton:connect(B, command_button_clicked, [{id,Id}])
end, buttons()),
#sub{name='Button Area', win=Sz}.
@@ -938,22 +939,22 @@ button_area(Parent) ->
search_area(Parent) ->
HSz = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Find:"),
+ _ = wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Find:"),
[{flag,?wxALIGN_CENTER_VERTICAL}]),
TC1 = wxTextCtrl:new(Parent, ?SEARCH_ENTRY, [{style, ?wxTE_PROCESS_ENTER}]),
- wxSizer:add(HSz, TC1, [{proportion,3}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(HSz, TC1, [{proportion,3}, {flag, ?wxEXPAND}]),
Nbtn = wxRadioButton:new(Parent, ?wxID_ANY, "Next"),
wxRadioButton:setValue(Nbtn, true),
- wxSizer:add(HSz,Nbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
+ _ = wxSizer:add(HSz,Nbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
Pbtn = wxRadioButton:new(Parent, ?wxID_ANY, "Previous"),
- wxSizer:add(HSz,Pbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
+ _ = wxSizer:add(HSz,Pbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
Cbtn = wxCheckBox:new(Parent, ?wxID_ANY, "Match Case"),
- wxSizer:add(HSz,Cbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
- wxSizer:add(HSz, 15,15, [{proportion,1}, {flag, ?wxEXPAND}]),
- wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Goto Line:"),
+ _ = wxSizer:add(HSz,Cbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
+ _ = wxSizer:add(HSz, 15,15, [{proportion,1}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Goto Line:"),
[{flag,?wxALIGN_CENTER_VERTICAL}]),
TC2 = wxTextCtrl:new(Parent, ?GOTO_ENTRY, [{style, ?wxTE_PROCESS_ENTER}]),
- wxSizer:add(HSz, TC2, [{proportion,0}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(HSz, TC2, [{proportion,0}, {flag, ?wxEXPAND}]),
wxTextCtrl:connect(TC1, command_text_updated),
wxTextCtrl:connect(TC1, command_text_enter),
wxTextCtrl:connect(TC1, kill_focus),
@@ -969,14 +970,14 @@ eval_area(Parent) ->
VSz = wxBoxSizer:new(?wxVERTICAL),
HSz = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Evaluator:"),
+ _ = wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Evaluator:"),
[{flag,?wxALIGN_CENTER_VERTICAL}]),
TC = wxTextCtrl:new(Parent, ?EVAL_ENTRY, [{style, ?wxTE_PROCESS_ENTER}]),
- wxSizer:add(HSz, TC, [{proportion,1}, {flag, ?wxEXPAND}]),
- wxSizer:add(VSz, HSz, [{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(HSz, TC, [{proportion,1}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(VSz, HSz, [{flag, ?wxEXPAND}]),
TL = wxTextCtrl:new(Parent, ?EVAL_LOG, [{style, ?wxTE_DONTWRAP bor
?wxTE_MULTILINE bor ?wxTE_READONLY}]),
- wxSizer:add(VSz, TL, [{proportion,5}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(VSz, TL, [{proportion,5}, {flag, ?wxEXPAND}]),
wxTextCtrl:connect(TC, command_text_enter),
#sub{name='Evaluator Area', win=VSz, in=TC, out=TL}.
diff --git a/lib/debugger/src/dbg_wx_view.erl b/lib/debugger/src/dbg_wx_view.erl
index 9715a9c17b..91fc0d08cb 100644
--- a/lib/debugger/src/dbg_wx_view.erl
+++ b/lib/debugger/src/dbg_wx_view.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/dbg_wx_win.erl b/lib/debugger/src/dbg_wx_win.erl
index 63f74392b5..25ffc5054c 100644
--- a/lib/debugger/src/dbg_wx_win.erl
+++ b/lib/debugger/src/dbg_wx_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -43,7 +43,8 @@
%% GS = term()
%%--------------------------------------------------------------------
init() ->
- wx:new().
+ _ = wx:new(),
+ ok.
%%--------------------------------------------------------------------
%% create_menus(MenuBar, [Menu])
@@ -80,12 +81,12 @@ create_menus(_MB,[], _Win,Id) ->
Id.
create_menu_item(Menu, [separator|Is], Win, Id,Connect) ->
- wxMenu:appendSeparator(Menu),
+ _ = wxMenu:appendSeparator(Menu),
create_menu_item(Menu,Is,Win,Id+1,Connect);
create_menu_item(Menu, [{Name, _N, cascade, Items}|Is], Win, Id0,Connect) ->
Sub = wxMenu:new([]),
Id = create_menu_item(Sub, Items, Win, Id0, false),
- wxMenu:append(Menu, ?wxID_ANY, menu_name(Name,ignore), Sub),
+ _ = wxMenu:append(Menu, ?wxID_ANY, menu_name(Name,ignore), Sub),
%% Simulate GS sub checkBox/RadioBox behaviour
Self = self(),
Butts = [{MI,get(MI)} || {MI,_,_} <- Items],
@@ -95,13 +96,12 @@ create_menu_item(Menu, [{Name, _N, cascade, Items}|Is], Win, Id0,Connect) ->
false -> Acc
end
end,
- Filter = fun(_,_) ->
+ Filter = fun(Ev,_) ->
Enabled = lists:foldl(IsChecked, [], Butts),
- Self ! #wx{userData={Name, Enabled},
- event=#wxCommand{type=command_menu_selected}}
+ Self ! Ev#wx{userData={Name, Enabled}}
end,
- wxMenu:connect(Win, command_menu_selected,
- [{id,Id0},{lastId, Id-1},{callback,Filter}]),
+ _ = wxMenu:connect(Win, command_menu_selected,
+ [{id,Id0},{lastId, Id-1},{callback,Filter}]),
create_menu_item(Menu, Is, Win, Id, Connect);
create_menu_item(Menu, [{Name,Pos}|Is], Win, Id, Connect) ->
MenuId = case lists:member(Name, ['Debugger']) of
@@ -169,7 +169,7 @@ add_break(Win, MenuName, Point) ->
Delete = wxMenu:appendRadioItem(Trigger, ?wxID_ANY,"Delete"),
Add(Delete, {break,Point,{trigger,delete}}),
- wxMenu:append(Sub, ?wxID_ANY, "Trigger Action", Trigger),
+ _ = wxMenu:append(Sub, ?wxID_ANY, "Trigger Action", Trigger),
MenuBtn = wxMenu:append(Menu,?wxID_ANY, Label, Sub),
#break{mb={Menu,MenuBtn},
diff --git a/lib/debugger/src/dbg_wx_winman.erl b/lib/debugger/src/dbg_wx_winman.erl
index 0045948d2f..ca858fa4bb 100644
--- a/lib/debugger/src/dbg_wx_winman.erl
+++ b/lib/debugger/src/dbg_wx_winman.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -100,11 +100,11 @@ update_windows_menu(Win, [MonInfo|Infos]) ->
OldItems = wxMenu:getMenuItems(Menu),
[wxMenu:delete(Menu, Item) || Item <- OldItems],
menuitem(Win, Menu,MonInfo, 700),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenu:appendSeparator(Menu),
wx:foldl(fun(Info,Acc) -> menuitem(Win,Menu,Info,Acc) end, 701, Infos).
menuitem(Window, Menu, {Title, Win}, Id) ->
- wxMenu:append(Menu, Id, Title),
+ _ = wxMenu:append(Menu, Id, Title),
wxWindow:connect(Window, command_menu_selected,
[{id,Id},{userData,{dbg_ui_winman,Win}}]),
Id+1.
diff --git a/lib/debugger/src/debugger.appup.src b/lib/debugger/src/debugger.appup.src
index 2fa3f5de5f..afad2a6a09 100644
--- a/lib/debugger/src/debugger.appup.src
+++ b/lib/debugger/src/debugger.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/debugger.erl b/lib/debugger/src/debugger.erl
index c188663668..f92c8e4a23 100644
--- a/lib/debugger/src/debugger.erl
+++ b/lib/debugger/src/debugger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/src/i.erl b/lib/debugger/src/i.erl
index f8f6a3b245..2da3e77618 100644
--- a/lib/debugger/src/i.erl
+++ b/lib/debugger/src/i.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -108,7 +108,7 @@ ib(Module,Function,Arity) ->
ib(Module,Function,Arity,Cond) ->
Breaks1 = int:all_breaks(Module),
- int:break_in(Module,Function,Arity),
+ ok = int:break_in(Module,Function,Arity),
Breaks2 = int:all_breaks(Module),
lists:foreach(fun({Mod,Line}) -> int:test_at_break(Mod,Line,Cond) end,
Breaks2--Breaks1).
diff --git a/lib/debugger/src/int.erl b/lib/debugger/src/int.erl
index 4f54beb45b..e5bade9abe 100644
--- a/lib/debugger/src/int.erl
+++ b/lib/debugger/src/int.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -352,10 +352,10 @@ start() -> dbg_iserver:start().
stop() ->
lists:foreach(
fun(Mod) ->
- everywhere(distributed,
- fun() ->
+ _ = everywhere(distributed,
+ fun() ->
erts_debug:breakpoint({Mod,'_','_'}, false)
- end)
+ end)
end,
interpreted()),
dbg_iserver:stop().
@@ -524,21 +524,21 @@ check(Mod) when is_atom(Mod) -> catch check_module(Mod);
check(File) when is_list(File) -> catch check_file(File).
load({Mod, Src, Beam, BeamBin, Exp, Abst}, Dist) ->
- everywhere(Dist,
- fun() ->
+ _ = everywhere(Dist,
+ fun() ->
code:purge(Mod),
erts_debug:breakpoint({Mod,'_','_'}, false),
{module,Mod} = code:load_binary(Mod, Beam, BeamBin)
- end),
+ end),
case erl_prim_loader:get_file(filename:absname(Src)) of
{ok, SrcBin, _} ->
MD5 = code:module_md5(BeamBin),
Bin = term_to_binary({interpreter_module,Exp,Abst,SrcBin,MD5}),
{module, Mod} = dbg_iserver:safe_call({load, Mod, Src, Bin}),
- everywhere(Dist,
- fun() ->
+ _ = everywhere(Dist,
+ fun() ->
true = erts_debug:breakpoint({Mod,'_','_'}, true) > 0
- end),
+ end),
{module, Mod};
error ->
error
@@ -547,7 +547,7 @@ load({Mod, Src, Beam, BeamBin, Exp, Abst}, Dist) ->
check_module(Mod) ->
case code:which(Mod) of
Beam when is_list(Beam) ->
- case find_src(Beam) of
+ case find_src(Mod, Beam) of
Src when is_list(Src) ->
check_application(Src),
case check_beam(Beam) of
@@ -608,7 +608,7 @@ check_application2("gs-"++_) -> throw({error,{app,gs}});
check_application2("debugger-"++_) -> throw({error,{app,debugger}});
check_application2(_) -> ok.
-find_src(Beam) ->
+find_src(Mod, Beam) ->
Src0 = filename:rootname(Beam) ++ ".erl",
case is_file(Src0) of
true -> Src0;
@@ -618,10 +618,22 @@ find_src(Beam) ->
filename:basename(Src0)]),
case is_file(Src) of
true -> Src;
- false -> error
+ false -> find_src_from_module(Mod)
end
end.
+find_src_from_module(Mod) ->
+ Compile = Mod:module_info(compile),
+ case lists:keyfind(source, 1, Compile) of
+ {source, Src} ->
+ case is_file(Src) of
+ true -> Src;
+ false -> error
+ end;
+ false ->
+ error
+ end.
+
find_beam(Mod, Src) ->
SrcDir = filename:dirname(Src),
BeamFile = atom_to_list(Mod) ++ code:objfile_extension(),
@@ -726,9 +738,9 @@ del_mod(AbsMod, Dist) ->
list_to_atom(filename:basename(AbsMod,".erl"))
end,
dbg_iserver:safe_cast({delete, Mod}),
- everywhere(Dist,
- fun() ->
+ _ = everywhere(Dist,
+ fun() ->
erts_debug:breakpoint({Mod,'_','_'}, false),
erlang:yield()
- end),
+ end),
ok.
diff --git a/lib/debugger/test/Makefile b/lib/debugger/test/Makefile
index 82f49c155f..125abcacda 100644
--- a/lib/debugger/test/Makefile
+++ b/lib/debugger/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2012. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -68,7 +68,7 @@ RELSYSDIR = $(RELEASE_PATH)/debugger_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/debugger/test/andor_SUITE.erl b/lib/debugger/test/andor_SUITE.erl
index 384b6c7c77..d7bbd4fccb 100644
--- a/lib/debugger/test/andor_SUITE.erl
+++ b/lib/debugger/test/andor_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,9 +27,11 @@
t_andalso/1,t_orelse/1,inside/1,overlap/1,
combined/1,in_case/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
cases().
@@ -46,17 +48,14 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- ?line Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
@@ -71,23 +70,23 @@ t_andalso(Config) when is_list(Config) ->
Ps = [{X,Y} || X <- Bs, Y <- Bs],
lists:foreach(fun (P) -> t_andalso_1(P) end, Ps),
- ?line true = true andalso true,
- ?line false = true andalso false,
- ?line false = false andalso true,
- ?line false = false andalso false,
+ true = true andalso true,
+ false = true andalso false,
+ false = false andalso true,
+ false = false andalso false,
- ?line false = false andalso glurf,
- ?line false = false andalso exit(exit_now),
+ false = false andalso glurf,
+ false = false andalso exit(exit_now),
- ?line true = not id(false) andalso not id(false),
- ?line false = not id(false) andalso not id(true),
- ?line false = not id(true) andalso not id(false),
- ?line false = not id(true) andalso not id(true),
+ true = not id(false) andalso not id(false),
+ false = not id(false) andalso not id(true),
+ false = not id(true) andalso not id(false),
+ false = not id(true) andalso not id(true),
- ?line {'EXIT',{badarg,_}} = (catch not id(glurf) andalso id(true)),
- ?line {'EXIT',{badarg,_}} = (catch not id(false) andalso not id(glurf)),
- ?line false = id(false) andalso not id(glurf),
- ?line false = false andalso not id(glurf),
+ {'EXIT',{badarg,_}} = (catch not id(glurf) andalso id(true)),
+ {'EXIT',{badarg,_}} = (catch not id(false) andalso not id(glurf)),
+ false = id(false) andalso not id(glurf),
+ false = false andalso not id(glurf),
ok.
@@ -96,23 +95,23 @@ t_orelse(Config) when is_list(Config) ->
Ps = [{X,Y} || X <- Bs, Y <- Bs],
lists:foreach(fun (P) -> t_orelse_1(P) end, Ps),
- ?line true = true orelse true,
- ?line true = true orelse false,
- ?line true = false orelse true,
- ?line false = false orelse false,
+ true = true orelse true,
+ true = true orelse false,
+ true = false orelse true,
+ false = false orelse false,
- ?line true = true orelse glurf,
- ?line true = true orelse exit(exit_now),
+ true = true orelse glurf,
+ true = true orelse exit(exit_now),
- ?line true = not id(false) orelse not id(false),
- ?line true = not id(false) orelse not id(true),
- ?line true = not id(true) orelse not id(false),
- ?line false = not id(true) orelse not id(true),
+ true = not id(false) orelse not id(false),
+ true = not id(false) orelse not id(true),
+ true = not id(true) orelse not id(false),
+ false = not id(true) orelse not id(true),
- ?line {'EXIT',{badarg,_}} = (catch not id(glurf) orelse id(true)),
- ?line {'EXIT',{badarg,_}} = (catch not id(true) orelse not id(glurf)),
- ?line true = id(true) orelse not id(glurf),
- ?line true = true orelse not id(glurf),
+ {'EXIT',{badarg,_}} = (catch not id(glurf) orelse id(true)),
+ {'EXIT',{badarg,_}} = (catch not id(true) orelse not id(glurf)),
+ true = id(true) orelse not id(glurf),
+ true = true orelse not id(glurf),
ok.
@@ -135,16 +134,16 @@ t_orelse_1({X,Y}) ->
check(V1, X or Y).
inside(Config) when is_list(Config) ->
- ?line true = inside(-8, 1),
- ?line false = inside(-53.5, -879798),
- ?line false = inside(1.0, -879),
- ?line false = inside(59, -879),
- ?line false = inside(-11, 1.0),
- ?line false = inside(100, 0.2),
- ?line false = inside(100, 1.2),
- ?line false = inside(-53.5, 4),
- ?line false = inside(1.0, 5.3),
- ?line false = inside(59, 879),
+ true = inside(-8, 1),
+ false = inside(-53.5, -879798),
+ false = inside(1.0, -879),
+ false = inside(59, -879),
+ false = inside(-11, 1.0),
+ false = inside(100, 0.2),
+ false = inside(100, 1.2),
+ false = inside(-53.5, 4),
+ false = inside(1.0, 5.3),
+ false = inside(59, 879),
ok.
inside(Xm, Ym) ->
@@ -179,15 +178,15 @@ inside_guard(Xm, Ym, X, Y, W, H) ->
{false,Xm,Ym,X,Y,W,H}.
overlap(Config) when is_list(Config) ->
- ?line true = overlap(7.0, 2.0, 8.0, 0.5),
- ?line true = overlap(7.0, 2.0, 8.0, 2.5),
- ?line true = overlap(7.0, 2.0, 5.3, 2),
- ?line true = overlap(7.0, 2.0, 0.0, 100.0),
-
- ?line false = overlap(-1, 2, -35, 0.5),
- ?line false = overlap(-1, 2, 777, 0.5),
- ?line false = overlap(-1, 2, 2, 10),
- ?line false = overlap(2, 10, 12, 55.3),
+ true = overlap(7.0, 2.0, 8.0, 0.5),
+ true = overlap(7.0, 2.0, 8.0, 2.5),
+ true = overlap(7.0, 2.0, 5.3, 2),
+ true = overlap(7.0, 2.0, 0.0, 100.0),
+
+ false = overlap(-1, 2, -35, 0.5),
+ false = overlap(-1, 2, 777, 0.5),
+ false = overlap(-1, 2, 2, 10),
+ false = overlap(2, 10, 12, 55.3),
ok.
overlap(Pos1, Len1, Pos2, Len2) ->
@@ -211,33 +210,33 @@ overlap(Pos1, Len1, Pos2, Len2) ->
-define(COMB(A,B,C), (A andalso B orelse C)).
combined(Config) when is_list(Config) ->
- ?line false = comb(false, false, false),
- ?line true = comb(false, false, true),
- ?line false = comb(false, true, false),
- ?line true = comb(false, true, true),
-
- ?line false = comb(true, false, false),
- ?line true = comb(true, true, false),
- ?line true = comb(true, false, true),
- ?line true = comb(true, true, true),
-
- ?line false = comb(false, blurf, false),
- ?line true = comb(false, blurf, true),
- ?line true = comb(true, true, blurf),
-
- ?line false = ?COMB(false, false, false),
- ?line true = ?COMB(false, false, true),
- ?line false = ?COMB(false, true, false),
- ?line true = ?COMB(false, true, true),
-
- ?line false = ?COMB(true, false, false),
- ?line true = ?COMB(true, true, false),
- ?line true = ?COMB(true, false, true),
- ?line true = ?COMB(true, true, true),
-
- ?line false = ?COMB(false, blurf, false),
- ?line true = ?COMB(false, blurf, true),
- ?line true = ?COMB(true, true, blurf),
+ false = comb(false, false, false),
+ true = comb(false, false, true),
+ false = comb(false, true, false),
+ true = comb(false, true, true),
+
+ false = comb(true, false, false),
+ true = comb(true, true, false),
+ true = comb(true, false, true),
+ true = comb(true, true, true),
+
+ false = comb(false, blurf, false),
+ true = comb(false, blurf, true),
+ true = comb(true, true, blurf),
+
+ false = ?COMB(false, false, false),
+ true = ?COMB(false, false, true),
+ false = ?COMB(false, true, false),
+ true = ?COMB(false, true, true),
+
+ false = ?COMB(true, false, false),
+ true = ?COMB(true, true, false),
+ true = ?COMB(true, false, true),
+ true = ?COMB(true, true, true),
+
+ false = ?COMB(false, blurf, false),
+ true = ?COMB(false, blurf, true),
+ true = ?COMB(true, true, blurf),
ok.
-undef(COMB).
@@ -268,13 +267,13 @@ comb(A, B, C) ->
%% Test that a boolean expression in a case expression is properly
%% optimized (in particular, that the error behaviour is correct).
in_case(Config) when is_list(Config) ->
- ?line edge_rings = in_case_1(1, 1, 1, 1, 1),
- ?line not_loop = in_case_1(0.5, 1, 1, 1, 1),
- ?line loop = in_case_1(0.5, 0.9, 1.1, 1, 4),
- ?line {'EXIT',{badarith,_}} = (catch in_case_1(1, 1, 1, 1, 0)),
- ?line {'EXIT',{badarith,_}} = (catch in_case_1(1, 1, 1, 1, nan)),
- ?line {'EXIT',{badarg,_}} = (catch in_case_1(1, 1, 1, blurf, 1)),
- ?line {'EXIT',{badarith,_}} = (catch in_case_1([nan], 1, 1, 1, 1)),
+ edge_rings = in_case_1(1, 1, 1, 1, 1),
+ not_loop = in_case_1(0.5, 1, 1, 1, 1),
+ loop = in_case_1(0.5, 0.9, 1.1, 1, 4),
+ {'EXIT',{badarith,_}} = (catch in_case_1(1, 1, 1, 1, 0)),
+ {'EXIT',{badarith,_}} = (catch in_case_1(1, 1, 1, 1, nan)),
+ {'EXIT',{badarg,_}} = (catch in_case_1(1, 1, 1, blurf, 1)),
+ {'EXIT',{badarith,_}} = (catch in_case_1([nan], 1, 1, 1, 1)),
ok.
in_case_1(LenUp, LenDw, LenN, Rotation, Count) ->
@@ -302,14 +301,14 @@ in_case_1_guard(LenUp, LenDw, LenN, Rotation, Count) ->
(abs(Rotation) > 0.707) of
true -> edge_rings;
false when LenUp >= 1 orelse LenDw >= 1 orelse
- LenN =< 1 orelse Count < 4 -> not_loop;
+ LenN =< 1 orelse Count < 4 -> not_loop;
false -> loop
end.
check(V1, V0) ->
if V1 /= V0 ->
io:fwrite("error: ~w.\n", [V1]),
- ?t:fail();
+ ct:fail(failed);
true ->
io:fwrite("ok: ~w.\n", [V1])
end.
diff --git a/lib/debugger/test/bs_bincomp_SUITE.erl b/lib/debugger/test/bs_bincomp_SUITE.erl
index 0750c6793d..39e2240f2d 100644
--- a/lib/debugger/test/bs_bincomp_SUITE.erl
+++ b/lib/debugger/test/bs_bincomp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,19 +30,18 @@
byte_aligned/1,bit_aligned/1,extended_byte_aligned/1,
extended_bit_aligned/1,mixed/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[byte_aligned, bit_aligned, extended_byte_aligned,
@@ -66,62 +65,62 @@ end_per_group(_GroupName, Config) ->
byte_aligned(Config) when is_list(Config) ->
- ?line <<"abcdefg">> = << <<(X+32)>> || <<X>> <= <<"ABCDEFG">> >>,
- ?line <<1:32/little,2:32/little,3:32/little,4:32/little>> =
+ <<"abcdefg">> = << <<(X+32)>> || <<X>> <= <<"ABCDEFG">> >>,
+ <<1:32/little,2:32/little,3:32/little,4:32/little>> =
<< <<X:32/little>> || <<X:32>> <= <<1:32,2:32,3:32,4:32>> >>,
- ?line <<1:32/little,2:32/little,3:32/little,4:32/little>> =
+ <<1:32/little,2:32/little,3:32/little,4:32/little>> =
<< <<X:32/little>> || <<X:16>> <= <<1:16,2:16,3:16,4:16>> >>,
- ok.
+ ok.
bit_aligned(Config) when is_list(Config) ->
- ?line <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> =
+ <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> =
<< <<(X+32):7>> || <<X>> <= <<"ABCDEFG">> >>,
- ?line <<"ABCDEFG">> =
+ <<"ABCDEFG">> =
<< <<(X-32)>> || <<X:7>> <= <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> >>,
- ?line <<1:31/little,2:31/little,3:31/little,4:31/little>> =
+ <<1:31/little,2:31/little,3:31/little,4:31/little>> =
<< <<X:31/little>> || <<X:31>> <= <<1:31,2:31,3:31,4:31>> >>,
- ?line <<1:31/little,2:31/little,3:31/little,4:31/little>> =
+ <<1:31/little,2:31/little,3:31/little,4:31/little>> =
<< <<X:31/little>> || <<X:15>> <= <<1:15,2:15,3:15,4:15>> >>,
- ok.
+ ok.
extended_byte_aligned(Config) when is_list(Config) ->
- ?line <<"abcdefg">> = << <<(X+32)>> || X <- "ABCDEFG" >>,
- ?line "abcdefg" = [(X+32) || <<X>> <= <<"ABCDEFG">>],
- ?line <<1:32/little,2:32/little,3:32/little,4:32/little>> =
+ <<"abcdefg">> = << <<(X+32)>> || X <- "ABCDEFG" >>,
+ "abcdefg" = [(X+32) || <<X>> <= <<"ABCDEFG">>],
+ <<1:32/little,2:32/little,3:32/little,4:32/little>> =
<< <<X:32/little>> || X <- [1,2,3,4] >>,
- ?line [256,512,768,1024] =
+ [256,512,768,1024] =
[X || <<X:16/little>> <= <<1:16,2:16,3:16,4:16>>],
- ok.
+ ok.
extended_bit_aligned(Config) when is_list(Config) ->
- ?line <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> =
+ <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>> =
<< <<(X+32):7>> || X <- "ABCDEFG" >>,
- ?line "ABCDEFG" = [(X-32) || <<X:7>> <= <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>>],
- ?line <<1:31/little,2:31/little,3:31/little,4:31/little>> =
+ "ABCDEFG" = [(X-32) || <<X:7>> <= <<$a:7,$b:7,$c:7,$d:7,$e:7,$f:7,$g:7>>],
+ <<1:31/little,2:31/little,3:31/little,4:31/little>> =
<< <<X:31/little>> || X <- [1,2,3,4] >>,
- ?line [256,512,768,1024] =
+ [256,512,768,1024] =
[X || <<X:15/little>> <= <<1:15,2:15,3:15,4:15>>],
ok.
mixed(Config) when is_list(Config) ->
- ?line <<2,3,3,4,4,5,5,6>> =
+ <<2,3,3,4,4,5,5,6>> =
<< <<(X+Y)>> || <<X>> <= <<1,2,3,4>>, <<Y>> <= <<1,2>> >>,
- ?line <<2,3,3,4,4,5,5,6>> =
+ <<2,3,3,4,4,5,5,6>> =
<< <<(X+Y)>> || <<X>> <= <<1,2,3,4>>, Y <- [1,2] >>,
- ?line <<2,3,3,4,4,5,5,6>> =
+ <<2,3,3,4,4,5,5,6>> =
<< <<(X+Y)>> || X <- [1,2,3,4], Y <- [1,2] >>,
- ?line [2,3,3,4,4,5,5,6] =
+ [2,3,3,4,4,5,5,6] =
[(X+Y) || <<X>> <= <<1,2,3,4>>, <<Y>> <= <<1,2>>],
- ?line [2,3,3,4,4,5,5,6] =
+ [2,3,3,4,4,5,5,6] =
[(X+Y) || <<X>> <= <<1,2,3,4>>, Y <- [1,2]],
- ?line <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
+ <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
<< <<(X+Y):3>> || <<X:3>> <= <<1:3,2:3,3:3,4:3>>, <<Y:3>> <= <<1:3,2:3>> >>,
- ?line <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
+ <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
<< <<(X+Y):3>> || <<X:3>> <= <<1:3,2:3,3:3,4:3>>, Y <- [1,2] >>,
- ?line <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
+ <<2:3,3:3,3:3,4:3,4:3,5:3,5:3,6:3>> =
<< <<(X+Y):3>> || X <- [1,2,3,4], Y <- [1,2] >>,
- ?line [2,3,3,4,4,5,5,6] =
+ [2,3,3,4,4,5,5,6] =
[(X+Y) || <<X:3>> <= <<1:3,2:3,3:3,4:3>>, <<Y:3>> <= <<1:3,2:3>>],
- ?line [2,3,3,4,4,5,5,6] =
+ [2,3,3,4,4,5,5,6] =
[(X+Y) || <<X:3>> <= <<1:3,2:3,3:3,4:3>>, Y <- [1,2]],
ok.
diff --git a/lib/debugger/test/bs_construct_SUITE.erl b/lib/debugger/test/bs_construct_SUITE.erl
index f62512568f..6c6435c61a 100644
--- a/lib/debugger/test/bs_construct_SUITE.erl
+++ b/lib/debugger/test/bs_construct_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,9 +36,11 @@
copy_writable_binary/1, dynamic/1,
otp_7422/1, zero_width/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,15}}].
all() ->
[test1, test2, test3, test4, test5, testf, not_used,
@@ -57,17 +59,14 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(15)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
@@ -84,9 +83,9 @@ r(L) ->
-define(T(B, L), {B, ??B, L}).
-define(N(B), {B, ??B, unknown}).
--define(FAIL(Expr), ?line fail_check(catch Expr, ??Expr, [])).
+-define(FAIL(Expr), fail_check(catch Expr, ??Expr, [])).
--define(FAIL_VARS(Expr, Vars), ?line fail_check(catch Expr, ??Expr, Vars)).
+-define(FAIL_VARS(Expr, Vars), fail_check(catch Expr, ??Expr, Vars)).
l(I_13, I_big1) ->
[
@@ -162,7 +161,7 @@ l(I_13, I_big1) ->
?T(<<<<344:17>>/binary-unit:17>>, <<344:17>>),
?T(<<<<42,3,7656:16>>/binary-unit:16>>, <<42,3,7656:16>>)
- ].
+ ].
native_3798() ->
case <<1:16/native>> of
@@ -205,7 +204,7 @@ one_test({C_bin, E_bin, Str, Bytes}) when is_list(Bytes) ->
true ->
io:format("ERROR: Compiled: ~p. Expected ~p. Got ~p.~n",
[Str, Bytes, binary_to_list(C_bin)]),
- test_server:fail(comp)
+ ct:fail(comp)
end,
if
E_bin == Bin ->
@@ -213,7 +212,7 @@ one_test({C_bin, E_bin, Str, Bytes}) when is_list(Bytes) ->
true ->
io:format("ERROR: Interpreted: ~p. Expected ~p. Got ~p.~n",
[Str, Bytes, binary_to_list(E_bin)]),
- test_server:fail(comp)
+ ct:fail(comp)
end;
one_test({C_bin, E_bin, Str, Result}) ->
io:format(" ~s ~p~n", [Str, C_bin]),
@@ -234,7 +233,7 @@ one_test({C_bin, E_bin, Str, Result}) ->
io:format("ERROR: Compiled not equal to interpreted:"
"~n ~p, ~p.~n",
[binary_to_list(C_bin), binary_to_list(E_bin)]),
- test_server:fail(comp);
+ ct:fail(comp);
0 ->
ok;
%% For situations where the final bits may not matter, like
@@ -269,23 +268,22 @@ fail_check({'EXIT',{badarg,_}}, Str, Vars) ->
try evaluate(Str, Vars) of
Res ->
io:format("Interpreted result: ~p", [Res]),
- ?t:fail(did_not_fail_in_intepreted_code)
+ ct:fail(did_not_fail_in_intepreted_code)
catch
error:badarg ->
ok
end;
fail_check(Res, _, _) ->
io:format("Compiled result: ~p", [Res]),
- ?t:fail(did_not_fail_in_compiled_code).
+ ct:fail(did_not_fail_in_compiled_code).
%%% Simple working cases
-test1(suite) -> [];
test1(Config) when is_list(Config) ->
- ?line I_13 = i(13),
- ?line I_big1 = big(1),
- ?line Vars = [{'I_13', I_13},
- {'I_big1', I_big1}],
- ?line lists:foreach(fun one_test/1, eval_list(l(I_13, I_big1), Vars)).
+ I_13 = i(13),
+ I_big1 = big(1),
+ Vars = [{'I_13', I_13},
+ {'I_big1', I_big1}],
+ lists:foreach(fun one_test/1, eval_list(l(I_13, I_big1), Vars)).
%%% Misc
@@ -301,10 +299,9 @@ gen(N, S, A) ->
gen_l(N, S, A) ->
[?T(<<A:S/little, A:(N-S)/little>>, comp(N, A, S))].
-test2(suite) -> [];
test2(Config) when is_list(Config) ->
- ?line test2(0, 8, 2#10101010101010101),
- ?line test2(0, 8, 2#1111111111).
+ test2(0, 8, 2#10101010101010101),
+ test2(0, 8, 2#1111111111).
test2(End, End, _) ->
ok;
@@ -329,10 +326,9 @@ t3() ->
?N(<<>>)
].
-test3(suite) -> [];
test3(Config) when is_list(Config) ->
- ?line Vars = [],
- ?line lists:foreach(fun one_test/1, eval_list(t3(), Vars)).
+ Vars = [],
+ lists:foreach(fun one_test/1, eval_list(t3(), Vars)).
gen_u(N, S, A) ->
[?N(<<A:S, A:(N-S)>>)].
@@ -340,10 +336,9 @@ gen_u(N, S, A) ->
gen_u_l(N, S, A) ->
[?N(<<A:S/little, A:(N-S)/little>>)].
-test4(suite) -> [];
test4(Config) when is_list(Config) ->
- ?line test4(0, 16, 2#10101010101010101),
- ?line test4(0, 16, 2#1111111111).
+ test4(0, 16, 2#10101010101010101),
+ test4(0, 16, 2#1111111111).
test4(End, End, _) ->
ok;
@@ -361,11 +356,10 @@ gen_b(N, S, A) ->
[?T(<<A:S/binary-unit:1, A:(N-S)/binary-unit:1>>,
binary_to_list(<<A:S/binary-unit:1, A:(N-S)/binary-unit:1>>))].
-test5(suite) -> [];
-test5(doc) -> ["OTP-3995"];
+%% OTP-3995.
test5(Config) when is_list(Config) ->
- ?line test5(0, 8, <<73>>),
- ?line test5(0, 8, <<68>>).
+ test5(0, 8, <<73>>),
+ test5(0, 8, <<68>>).
test5(End, End, _) ->
ok;
@@ -379,47 +373,46 @@ test5(S, A) ->
lists:foreach(fun one_test/1, eval_list(gen_b(N, S, A), Vars)).
%%% Failure cases
-testf(suite) -> [];
testf(Config) when is_list(Config) ->
- ?line ?FAIL(<<3.14>>),
- ?line ?FAIL(<<<<1,2>>>>),
+ ?FAIL(<<3.14>>),
+ ?FAIL(<<<<1,2>>>>),
- ?line ?FAIL(<<2.71/binary>>),
- ?line ?FAIL(<<24334/binary>>),
- ?line ?FAIL(<<24334344294788947129487129487219847/binary>>),
+ ?FAIL(<<2.71/binary>>),
+ ?FAIL(<<24334/binary>>),
+ ?FAIL(<<24334344294788947129487129487219847/binary>>),
BigInt = id(24334344294788947129487129487219847),
- ?line ?FAIL_VARS(<<BigInt/binary>>, [{'BigInt',BigInt}]),
- ?line ?FAIL_VARS(<<42,BigInt/binary>>, [{'BigInt',BigInt}]),
- ?line ?FAIL_VARS(<<BigInt:2/binary>>, [{'BigInt',BigInt}]),
+ ?FAIL_VARS(<<BigInt/binary>>, [{'BigInt',BigInt}]),
+ ?FAIL_VARS(<<42,BigInt/binary>>, [{'BigInt',BigInt}]),
+ ?FAIL_VARS(<<BigInt:2/binary>>, [{'BigInt',BigInt}]),
%% One negative field size, but the sum of field sizes will be 1 byte.
%% Make sure that we reject that properly.
I_minus_777 = id(-777),
I_minus_2047 = id(-2047),
- ?line ?FAIL_VARS(<<I_minus_777:2048/unit:8,57:I_minus_2047/unit:8>>,
- ordsets:from_list([{'I_minus_777',I_minus_777},
- {'I_minus_2047',I_minus_2047}])),
- ?line ?FAIL(<<<<1,2,3>>/float>>),
+ ?FAIL_VARS(<<I_minus_777:2048/unit:8,57:I_minus_2047/unit:8>>,
+ ordsets:from_list([{'I_minus_777',I_minus_777},
+ {'I_minus_2047',I_minus_2047}])),
+ ?FAIL(<<<<1,2,3>>/float>>),
%% Negative field widths.
- ?line testf_1(-8, <<1,2,3,4,5>>),
- ?line ?FAIL(<<0:(-(1 bsl 100))>>),
+ testf_1(-8, <<1,2,3,4,5>>),
+ ?FAIL(<<0:(-(1 bsl 100))>>),
- ?line ?FAIL(<<42:(-16)>>),
- ?line ?FAIL(<<3.14:(-8)/float>>),
- ?line ?FAIL(<<<<23,56,0,2>>:(-16)/binary>>),
- ?line ?FAIL(<<<<23,56,0,2>>:(2.5)/binary>>),
- ?line ?FAIL(<<<<23,56,0,2>>:(anka)>>),
- ?line ?FAIL(<<<<23,56,0,2>>:(anka)>>),
+ ?FAIL(<<42:(-16)>>),
+ ?FAIL(<<3.14:(-8)/float>>),
+ ?FAIL(<<<<23,56,0,2>>:(-16)/binary>>),
+ ?FAIL(<<<<23,56,0,2>>:(2.5)/binary>>),
+ ?FAIL(<<<<23,56,0,2>>:(anka)>>),
+ ?FAIL(<<<<23,56,0,2>>:(anka)>>),
%% Unit failures.
- ?line ?FAIL(<<<<1:1>>/binary>>),
+ ?FAIL(<<<<1:1>>/binary>>),
Sz = id(1),
- ?line ?FAIL_VARS(<<<<1:Sz>>/binary>>, [{'Sz',Sz}]),
- ?line {'EXIT',{badarg,_}} = (catch <<<<1:(id(1))>>/binary>>),
- ?line ?FAIL(<<<<7,8,9>>/binary-unit:16>>),
- ?line ?FAIL(<<<<7,8,9,3:7>>/binary-unit:16>>),
- ?line ?FAIL(<<<<7,8,9,3:7>>/binary-unit:17>>),
+ ?FAIL_VARS(<<<<1:Sz>>/binary>>, [{'Sz',Sz}]),
+ {'EXIT',{badarg,_}} = (catch <<<<1:(id(1))>>/binary>>),
+ ?FAIL(<<<<7,8,9>>/binary-unit:16>>),
+ ?FAIL(<<<<7,8,9,3:7>>/binary-unit:16>>),
+ ?FAIL(<<<<7,8,9,3:7>>/binary-unit:17>>),
ok.
@@ -429,14 +422,13 @@ testf_1(W, B) ->
?FAIL_VARS(<<3.14:W/float>>, Vars),
?FAIL_VARS(<<B:W/binary>>, [{'B',B}|Vars]).
-not_used(doc) ->
- "Test that constructed binaries that are not used will still give an exception.";
+%% Test that constructed binaries that are not used will still give an exception.
not_used(Config) when is_list(Config) ->
- ?line ok = not_used1(3, <<"dum">>),
- ?line {'EXIT',{badarg,_}} = (catch not_used1(3, "dum")),
- ?line {'EXIT',{badarg,_}} = (catch not_used2(444, -2)),
- ?line {'EXIT',{badarg,_}} = (catch not_used2(444, anka)),
- ?line {'EXIT',{badarg,_}} = (catch not_used3(444)),
+ ok = not_used1(3, <<"dum">>),
+ {'EXIT',{badarg,_}} = (catch not_used1(3, "dum")),
+ {'EXIT',{badarg,_}} = (catch not_used2(444, -2)),
+ {'EXIT',{badarg,_}} = (catch not_used2(444, anka)),
+ {'EXIT',{badarg,_}} = (catch not_used3(444)),
ok.
not_used1(I, BinString) ->
@@ -452,11 +444,11 @@ not_used3(I) ->
ok.
in_guard(Config) when is_list(Config) ->
- ?line 1 = in_guard(<<16#74ad:16>>, 16#e95, 5),
- ?line 2 = in_guard(<<16#3A,16#F7,"hello">>, 16#3AF7, <<"hello">>),
- ?line 3 = in_guard(<<16#FBCD:14,3.1415/float,3:2>>, 16#FBCD, 3.1415),
- ?line 3 = in_guard(<<16#FBCD:14,3/float,3:2>>, 16#FBCD, 3),
- ?line 3 = in_guard(<<16#FBCD:14,(2 bsl 226)/float,3:2>>, 16#FBCD, 2 bsl 226),
+ 1 = in_guard(<<16#74ad:16>>, 16#e95, 5),
+ 2 = in_guard(<<16#3A,16#F7,"hello">>, 16#3AF7, <<"hello">>),
+ 3 = in_guard(<<16#FBCD:14,3.1415/float,3:2>>, 16#FBCD, 3.1415),
+ 3 = in_guard(<<16#FBCD:14,3/float,3:2>>, 16#FBCD, 3),
+ 3 = in_guard(<<16#FBCD:14,(2 bsl 226)/float,3:2>>, 16#FBCD, 2 bsl 226),
nope = in_guard(<<1>>, 42, b),
nope = in_guard(<<1>>, a, b),
nope = in_guard(<<1,2>>, 1, 1),
@@ -470,16 +462,16 @@ in_guard(Bin, A, B) when <<A:14,B/float,3:2>> == Bin -> 3;
in_guard(Bin, A, B) when {a,b,<<A:14,B/float,3:2>>} == Bin -> cant_happen;
in_guard(_, _, _) -> nope.
-mem_leak(doc) -> "Make sure that construction has no memory leak";
+%% Make sure that construction has no memory leak.
mem_leak(Config) when is_list(Config) ->
- ?line B = make_bin(16, <<0>>),
- ?line mem_leak(1024, B),
+ B = make_bin(16, <<0>>),
+ mem_leak(1024, B),
ok.
mem_leak(0, _) -> ok;
mem_leak(N, B) ->
- ?line big_bin(B, <<23>>),
- ?line {'EXIT',{badarg,_}} = (catch big_bin(B, bad)),
+ big_bin(B, <<23>>),
+ {'EXIT',{badarg,_}} = (catch big_bin(B, bad)),
mem_leak(N-1, B).
big_bin(B1, B2) ->
@@ -493,18 +485,18 @@ make_bin(0, Acc) -> Acc;
make_bin(N, Acc) -> make_bin(N-1, <<Acc/binary,Acc/binary>>).
-define(COF(Int0),
- ?line (fun(Int) ->
- true = <<Int:32/float>> =:= <<(float(Int)):32/float>>,
- true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
- end)(nonliteral(Int0)),
- ?line true = <<Int0:32/float>> =:= <<(float(Int0)):32/float>>,
- ?line true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
+ (fun(Int) ->
+ true = <<Int:32/float>> =:= <<(float(Int)):32/float>>,
+ true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
+ end)(nonliteral(Int0)),
+ true = <<Int0:32/float>> =:= <<(float(Int0)):32/float>>,
+ true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
-define(COF64(Int0),
- ?line (fun(Int) ->
- true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
- end)(nonliteral(Int0)),
- ?line true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
+ (fun(Int) ->
+ true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
+ end)(nonliteral(Int0)),
+ true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
nonliteral(X) -> X.
@@ -523,7 +515,7 @@ coerce_to_float(Config) when is_list(Config) ->
ok.
bjorn(Config) when is_list(Config) ->
- ?line error = bjorn_1(),
+ error = bjorn_1(),
ok.
bjorn_1() ->
@@ -551,30 +543,30 @@ do_something() ->
throw(blurf).
huge_float_field(Config) when is_list(Config) ->
- ?line {'EXIT',{badarg,_}} = (catch <<0.0:9/float-unit:8>>),
- ?line huge_float_check(catch <<0.0:67108865/float-unit:64>>),
- ?line huge_float_check(catch <<0.0:((1 bsl 26)+1)/float-unit:64>>),
- ?line huge_float_check(catch <<0.0:(id(67108865))/float-unit:64>>),
-%% ?line huge_float_check(catch <<0.0:((1 bsl 60)+1)/float-unit:64>>),
- ?line huge_float_check(catch <<3839739387439387383739387987347983:((1 bsl 26)+1)/float-unit:64>>),
-%% ?line huge_float_check(catch <<3839739387439387383739387987347983:((1 bsl 60)+1)/float-unit:64>>),
+ {'EXIT',{badarg,_}} = (catch <<0.0:9/float-unit:8>>),
+ huge_float_check(catch <<0.0:67108865/float-unit:64>>),
+ huge_float_check(catch <<0.0:((1 bsl 26)+1)/float-unit:64>>),
+ huge_float_check(catch <<0.0:(id(67108865))/float-unit:64>>),
+ %% huge_float_check(catch <<0.0:((1 bsl 60)+1)/float-unit:64>>),
+ huge_float_check(catch <<3839739387439387383739387987347983:((1 bsl 26)+1)/float-unit:64>>),
+ %% huge_float_check(catch <<3839739387439387383739387987347983:((1 bsl 60)+1)/float-unit:64>>),
ok.
huge_float_check({'EXIT',{system_limit,_}}) -> ok;
huge_float_check({'EXIT',{badarg,_}}) -> ok.
huge_binary(Config) when is_list(Config) ->
- ?line 16777216 = size(<<0:(id(1 bsl 26)),(-1):(id(1 bsl 26))>>),
+ 16777216 = size(<<0:(id(1 bsl 26)),(-1):(id(1 bsl 26))>>),
ok.
system_limit(Config) when is_list(Config) ->
WordSize = erlang:system_info(wordsize),
BitsPerWord = WordSize * 8,
- ?line {'EXIT',{system_limit,_}} =
+ {'EXIT',{system_limit,_}} =
(catch <<0:(id(0)),42:(id(1 bsl BitsPerWord))>>),
- ?line {'EXIT',{system_limit,_}} =
+ {'EXIT',{system_limit,_}} =
(catch <<42:(id(1 bsl BitsPerWord)),0:(id(0))>>),
- ?line {'EXIT',{system_limit,_}} =
+ {'EXIT',{system_limit,_}} =
(catch <<(id(<<>>))/binary,0:(id(1 bsl 100))>>),
case WordSize of
@@ -585,13 +577,13 @@ system_limit(Config) when is_list(Config) ->
end.
system_limit_32() ->
- ?line {'EXIT',{badarg,_}} = (catch <<42:(-1)>>),
- ?line {'EXIT',{badarg,_}} = (catch <<42:(id(-1))>>),
- ?line {'EXIT',{badarg,_}} = (catch <<42:(id(-389739873536870912))/unit:8>>),
- ?line {'EXIT',{system_limit,_}} = (catch <<42:536870912/unit:8>>),
- ?line {'EXIT',{system_limit,_}} = (catch <<42:(id(536870912))/unit:8>>),
- ?line {'EXIT',{system_limit,_}} = (catch <<0:(id(8)),42:536870912/unit:8>>),
- ?line {'EXIT',{system_limit,_}} =
+ {'EXIT',{badarg,_}} = (catch <<42:(-1)>>),
+ {'EXIT',{badarg,_}} = (catch <<42:(id(-1))>>),
+ {'EXIT',{badarg,_}} = (catch <<42:(id(-389739873536870912))/unit:8>>),
+ {'EXIT',{system_limit,_}} = (catch <<42:536870912/unit:8>>),
+ {'EXIT',{system_limit,_}} = (catch <<42:(id(536870912))/unit:8>>),
+ {'EXIT',{system_limit,_}} = (catch <<0:(id(8)),42:536870912/unit:8>>),
+ {'EXIT',{system_limit,_}} =
(catch <<0:(id(8)),42:(id(536870912))/unit:8>>),
ok.
@@ -601,34 +593,34 @@ badarg(Config) when is_list(Config) ->
%% but the debugger will generate a system_limit exception.
%% It does not seems worthwhile to fix the debugger.
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch <<(id(<<>>))/binary,0:(id(-(1 bsl 100)))>>),
ok.
copy_writable_binary(Config) when is_list(Config) ->
- ?line [copy_writable_binary_1(I) || I <- lists:seq(0, 256)],
+ [copy_writable_binary_1(I) || I <- lists:seq(0, 256)],
ok.
copy_writable_binary_1(_) ->
- ?line Bin0 = <<(id(<<>>))/binary,0,1,2,3,4,5,6,7>>,
- ?line SubBin = make_sub_bin(Bin0),
- ?line id(<<42,34,55,Bin0/binary>>), %Make reallocation likelier.
- ?line Pid = spawn(fun() ->
- copy_writable_binary_holder(Bin0, SubBin)
- end),
- ?line Tab = ets:new(holder, []),
- ?line ets:insert(Tab, {17,Bin0}),
- ?line ets:insert(Tab, {42,SubBin}),
- ?line id(<<Bin0/binary,0:(64*1024*8)>>),
- ?line Pid ! self(),
- ?line [{17,Bin0}] = ets:lookup(Tab, 17),
- ?line [{42,Bin0}] = ets:lookup(Tab, 42),
+ Bin0 = <<(id(<<>>))/binary,0,1,2,3,4,5,6,7>>,
+ SubBin = make_sub_bin(Bin0),
+ id(<<42,34,55,Bin0/binary>>), %Make reallocation likelier.
+ Pid = spawn(fun() ->
+ copy_writable_binary_holder(Bin0, SubBin)
+ end),
+ Tab = ets:new(holder, []),
+ ets:insert(Tab, {17,Bin0}),
+ ets:insert(Tab, {42,SubBin}),
+ id(<<Bin0/binary,0:(64*1024*8)>>),
+ Pid ! self(),
+ [{17,Bin0}] = ets:lookup(Tab, 17),
+ [{42,Bin0}] = ets:lookup(Tab, 42),
receive
{Pid,Bin0,Bin0} -> ok;
Other ->
io:format("Unexpected message: ~p", [Other]),
- ?line ?t:fail()
+ ct:fail(failed)
end,
ok.
@@ -656,7 +648,7 @@ dynamic(Config) when is_list(Config) ->
{'DOWN',Ref,process,Pid,normal} ->
ok;
{'DOWN',Ref,process,Pid,Exit} ->
- ?t:fail({Pid,Exit})
+ ct:fail({Pid,Exit})
end || {Pid,Ref} <- Ps],
ok.
@@ -743,17 +735,17 @@ otp_7422_bin(N) when N < 512 ->
otp_7422_bin(_) -> ok.
zero_width(Config) when is_list(Config) ->
- ?line Z = id(0),
+ Z = id(0),
Small = id(42),
Big = id(1 bsl 128),
- ?line <<>> = <<Small:Z>>,
- ?line <<>> = <<Small:0>>,
- ?line <<>> = <<Big:Z>>,
- ?line <<>> = <<Big:0>>,
-
- ?line {'EXIT',{badarg,_}} = (catch <<not_a_number:0>>),
- ?line {'EXIT',{badarg,_}} = (catch <<(id(not_a_number)):Z>>),
- ?line {'EXIT',{badarg,_}} = (catch <<(id(not_a_number)):0>>),
+ <<>> = <<Small:Z>>,
+ <<>> = <<Small:0>>,
+ <<>> = <<Big:Z>>,
+ <<>> = <<Big:0>>,
+
+ {'EXIT',{badarg,_}} = (catch <<not_a_number:0>>),
+ {'EXIT',{badarg,_}} = (catch <<(id(not_a_number)):Z>>),
+ {'EXIT',{badarg,_}} = (catch <<(id(not_a_number)):0>>),
ok.
diff --git a/lib/debugger/test/bs_match_bin_SUITE.erl b/lib/debugger/test/bs_match_bin_SUITE.erl
index a61b56501c..cd62874a9d 100644
--- a/lib/debugger/test/bs_match_bin_SUITE.erl
+++ b/lib/debugger/test/bs_match_bin_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,9 +27,11 @@
init_per_suite/1,end_per_suite/1,
byte_split_binary/1,bit_split_binary/1,match_huge_bin/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[byte_split_binary, bit_split_binary, match_huge_bin].
@@ -45,50 +47,47 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
ok.
-byte_split_binary(doc) -> "Tries to split a binary at all byte-aligned positions.";
+%% Tries to split a binary at all byte-aligned positions.
byte_split_binary(Config) when is_list(Config) ->
- ?line L = lists:seq(0, 57),
- ?line B = mkbin(L),
- ?line byte_split(L, B, size(B)),
- ?line Unaligned = make_unaligned_sub_binary(B),
- ?line byte_split(L, Unaligned, size(Unaligned)).
+ L = lists:seq(0, 57),
+ B = mkbin(L),
+ byte_split(L, B, size(B)),
+ Unaligned = make_unaligned_sub_binary(B),
+ byte_split(L, Unaligned, size(Unaligned)).
byte_split(L, B, Pos) when Pos >= 0 ->
- ?line Sz1 = Pos,
- ?line Sz2 = size(B) - Pos,
- ?line <<B1:Sz1/binary,B2:Sz2/binary>> = B,
- ?line B1 = list_to_binary(lists:sublist(L, 1, Pos)),
- ?line B2 = list_to_binary(lists:nthtail(Pos, L)),
- ?line byte_split(L, B, Pos-1);
+ Sz1 = Pos,
+ Sz2 = size(B) - Pos,
+ <<B1:Sz1/binary,B2:Sz2/binary>> = B,
+ B1 = list_to_binary(lists:sublist(L, 1, Pos)),
+ B2 = list_to_binary(lists:nthtail(Pos, L)),
+ byte_split(L, B, Pos-1);
byte_split(_, _, _) -> ok.
-bit_split_binary(doc) -> "Tries to split a binary at all positions.";
+%% Tries to split a binary at all positions.
bit_split_binary(Config) when is_list(Config) ->
Fun = fun(Bin, List, SkipBef, N) ->
- ?line SkipAft = 8*size(Bin) - N - SkipBef,
+ SkipAft = 8*size(Bin) - N - SkipBef,
%%io:format("~p, ~p, ~p", [SkipBef,N,SkipAft]),
- ?line <<_:SkipBef,OutBin:N/binary-unit:1,_:SkipAft>> = Bin,
- ?line OutBin = make_bin_from_list(List, N)
+ <<_:SkipBef,OutBin:N/binary-unit:1,_:SkipAft>> = Bin,
+ OutBin = make_bin_from_list(List, N)
end,
- ?line bit_split_binary1(Fun, erlang:md5(<<1,2,3>>)),
- ?line bit_split_binary1(Fun,
- make_unaligned_sub_binary(erlang:md5(<<1,2,3>>))),
+ bit_split_binary1(Fun, erlang:md5(<<1,2,3>>)),
+ bit_split_binary1(Fun,
+ make_unaligned_sub_binary(erlang:md5(<<1,2,3>>))),
ok.
bit_split_binary1(Action, Bin) ->
@@ -133,19 +132,19 @@ make_unaligned_sub_binary(Bin0) ->
id(I) -> I.
match_huge_bin(Config) when is_list(Config) ->
- ?line Bin = <<0:(1 bsl 27),13:8>>,
- ?line skip_huge_bin_1(1 bsl 27, Bin),
- ?line 16777216 = match_huge_bin_1(1 bsl 27, Bin),
+ Bin = <<0:(1 bsl 27),13:8>>,
+ skip_huge_bin_1(1 bsl 27, Bin),
+ 16777216 = match_huge_bin_1(1 bsl 27, Bin),
%% Test overflowing the size of a binary field.
- ?line nomatch = overflow_huge_bin_skip_32(Bin),
- ?line nomatch = overflow_huge_bin_32(Bin),
- ?line nomatch = overflow_huge_bin_skip_64(Bin),
- ?line nomatch = overflow_huge_bin_64(Bin),
+ nomatch = overflow_huge_bin_skip_32(Bin),
+ nomatch = overflow_huge_bin_32(Bin),
+ nomatch = overflow_huge_bin_skip_64(Bin),
+ nomatch = overflow_huge_bin_64(Bin),
%% Size in variable
- ?line ok = overflow_huge_bin(Bin, lists:seq(25, 32)++lists:seq(50, 64)),
- ?line ok = overflow_huge_bin_unit128(Bin, lists:seq(25, 32)++lists:seq(50, 64)),
+ ok = overflow_huge_bin(Bin, lists:seq(25, 32)++lists:seq(50, 64)),
+ ok = overflow_huge_bin_unit128(Bin, lists:seq(25, 32)++lists:seq(50, 64)),
ok.
diff --git a/lib/debugger/test/bs_match_int_SUITE.erl b/lib/debugger/test/bs_match_int_SUITE.erl
index fd77530dd5..8ff5fe260e 100644
--- a/lib/debugger/test/bs_match_int_SUITE.erl
+++ b/lib/debugger/test/bs_match_int_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,11 +26,13 @@
integer/1,signed_integer/1,dynamic/1,more_dynamic/1,mml/1,
match_huge_int/1,bignum/1,unaligned_32_bit/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-import(lists, [seq/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,4}}].
all() ->
[integer, signed_integer, dynamic, more_dynamic, mml,
@@ -47,39 +49,36 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(4)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
ok.
integer(Config) when is_list(Config) ->
- ?line 0 = get_int(mkbin([])),
- ?line 0 = get_int(mkbin([0])),
- ?line 42 = get_int(mkbin([42])),
- ?line 255 = get_int(mkbin([255])),
- ?line 256 = get_int(mkbin([1,0])),
- ?line 257 = get_int(mkbin([1,1])),
- ?line 258 = get_int(mkbin([1,2])),
- ?line 258 = get_int(mkbin([1,2])),
- ?line 65534 = get_int(mkbin([255,254])),
- ?line 16776455 = get_int(mkbin([255,253,7])),
- ?line 4245492555 = get_int(mkbin([253,13,19,75])),
- ?line 4294967294 = get_int(mkbin([255,255,255,254])),
- ?line 4294967295 = get_int(mkbin([255,255,255,255])),
- ?line Eight = [200,1,19,128,222,42,97,111],
- ?line cmp128(Eight, uint(Eight)),
- ?line fun_clause(catch get_int(mkbin(seq(1,5)))),
+ 0 = get_int(mkbin([])),
+ 0 = get_int(mkbin([0])),
+ 42 = get_int(mkbin([42])),
+ 255 = get_int(mkbin([255])),
+ 256 = get_int(mkbin([1,0])),
+ 257 = get_int(mkbin([1,1])),
+ 258 = get_int(mkbin([1,2])),
+ 258 = get_int(mkbin([1,2])),
+ 65534 = get_int(mkbin([255,254])),
+ 16776455 = get_int(mkbin([255,253,7])),
+ 4245492555 = get_int(mkbin([253,13,19,75])),
+ 4294967294 = get_int(mkbin([255,255,255,254])),
+ 4294967295 = get_int(mkbin([255,255,255,255])),
+ Eight = [200,1,19,128,222,42,97,111],
+ cmp128(Eight, uint(Eight)),
+ fun_clause(catch get_int(mkbin(seq(1,5)))),
ok.
get_int(Bin) ->
@@ -102,13 +101,13 @@ cmp128(<<I:128>>, I) -> equal;
cmp128(_, _) -> not_equal.
signed_integer(Config) when is_list(Config) ->
- ?line {no_match,_} = sint(mkbin([])),
- ?line {no_match,_} = sint(mkbin([1,2,3])),
- ?line 127 = sint(mkbin([127])),
- ?line -1 = sint(mkbin([255])),
- ?line -128 = sint(mkbin([128])),
- ?line 42 = sint(mkbin([42,255])),
- ?line 127 = sint(mkbin([127,255])).
+ {no_match,_} = sint(mkbin([])),
+ {no_match,_} = sint(mkbin([1,2,3])),
+ 127 = sint(mkbin([127])),
+ -1 = sint(mkbin([255])),
+ -128 = sint(mkbin([128])),
+ 42 = sint(mkbin([42,255])),
+ 127 = sint(mkbin([127,255])).
sint(Bin) ->
case Bin of
@@ -135,7 +134,7 @@ dynamic(Bin, S1) when S1 >= 0 ->
dynamic(_, _) -> ok.
dynamic(Bin, S1, S2, A, B) ->
-% io:format("~p ~p ~p ~p\n", [S1,S2,A,B]),
+ %% io:format("~p ~p ~p ~p\n", [S1,S2,A,B]),
case Bin of
<<A:S1,B:S2>> ->
io:format("~p ~p ~p ~p\n", [S1,S2,A,B]),
@@ -143,16 +142,16 @@ dynamic(Bin, S1, S2, A, B) ->
_Other -> erlang:error(badmatch, [Bin,S1,S2,A,B])
end.
-more_dynamic(doc) -> "Extract integers at different alignments and of different sizes.";
+%% Extract integers at different alignments and of different sizes.
more_dynamic(Config) when is_list(Config) ->
- % Unsigned big-endian numbers.
+ %% Unsigned big-endian numbers.
Unsigned = fun(Bin, List, SkipBef, N) ->
SkipAft = 8*size(Bin) - N - SkipBef,
<<_:SkipBef,Int:N,_:SkipAft>> = Bin,
Int = make_int(List, N, 0)
end,
- ?line more_dynamic1(Unsigned, funny_binary(42)),
+ more_dynamic1(Unsigned, funny_binary(42)),
%% Signed big-endian numbers.
Signed = fun(Bin, List, SkipBef, N) ->
@@ -164,10 +163,10 @@ more_dynamic(Config) when is_list(Config) ->
io:format("Bin = ~p,", [Bin]),
io:format("SkipBef = ~p, N = ~p", [SkipBef,N]),
io:format("Expected ~p, got ~p", [Int,Other]),
- ?t:fail()
+ ct:fail(failed)
end
end,
- ?line more_dynamic1(Signed, funny_binary(43)),
+ more_dynamic1(Signed, funny_binary(43)),
%% Unsigned little-endian numbers.
UnsLittle = fun(Bin, List, SkipBef, N) ->
@@ -175,7 +174,7 @@ more_dynamic(Config) when is_list(Config) ->
<<_:SkipBef,Int:N/little,_:SkipAft>> = Bin,
Int = make_int(big_to_little(List, N), N, 0)
end,
- ?line more_dynamic1(UnsLittle, funny_binary(44)),
+ more_dynamic1(UnsLittle, funny_binary(44)),
%% Signed little-endian numbers.
SignLittle = fun(Bin, List, SkipBef, N) ->
@@ -184,7 +183,7 @@ more_dynamic(Config) when is_list(Config) ->
Little = big_to_little(List, N),
Int = make_signed_int(Little, N)
end,
- ?line more_dynamic1(SignLittle, funny_binary(45)),
+ more_dynamic1(SignLittle, funny_binary(45)),
ok.
@@ -198,7 +197,7 @@ more_dynamic2(Action, Bin, [_|T]=List, Bef) ->
more_dynamic2(_, _, [], _) -> ok.
more_dynamic3(Action, Bin, List, Bef, Aft) when Bef =< Aft ->
-%% io:format("~p, ~p", [Bef,Aft-Bef]),
+ %% io:format("~p, ~p", [Bef,Aft-Bef]),
Action(Bin, List, Bef, Aft-Bef),
more_dynamic3(Action, Bin, List, Bef, Aft-1);
more_dynamic3(_, _, _, _, _) -> ok.
@@ -244,23 +243,23 @@ funny_binary(N) ->
B1.
mml(Config) when is_list(Config) ->
- ?line single_byte_binary = mml_choose(<<42>>),
- ?line multi_byte_binary = mml_choose(<<42,43>>).
+ single_byte_binary = mml_choose(<<42>>),
+ multi_byte_binary = mml_choose(<<42,43>>).
mml_choose(<<_A:8>>) -> single_byte_binary;
mml_choose(<<_A:8,_T/binary>>) -> multi_byte_binary.
match_huge_int(Config) when is_list(Config) ->
Sz = 1 bsl 27,
- ?line Bin = <<0:Sz,13:8>>,
- ?line skip_huge_int_1(Sz, Bin),
- ?line 0 = match_huge_int_1(Sz, Bin),
+ Bin = <<0:Sz,13:8>>,
+ skip_huge_int_1(Sz, Bin),
+ 0 = match_huge_int_1(Sz, Bin),
%% Test overflowing the size of an integer field.
- ?line nomatch = overflow_huge_int_skip_32(Bin),
+ nomatch = overflow_huge_int_skip_32(Bin),
case erlang:system_info(wordsize) of
4 ->
- ?line nomatch = overflow_huge_int_32(Bin);
+ nomatch = overflow_huge_int_32(Bin);
8 ->
%% An attempt will be made to allocate heap space for
%% the bignum (which will probably fail); only if the
@@ -268,15 +267,15 @@ match_huge_int(Config) when is_list(Config) ->
%% the binary is too small.
ok
end,
- ?line nomatch = overflow_huge_int_skip_64(Bin),
- ?line nomatch = overflow_huge_int_64(Bin),
+ nomatch = overflow_huge_int_skip_64(Bin),
+ nomatch = overflow_huge_int_64(Bin),
%% Test overflowing the size of an integer field using variables as sizes.
- ?line Sizes = case erlang:system_info(wordsize) of
- 4 -> lists:seq(25, 32);
- 8 -> []
- end ++ lists:seq(50, 64),
- ?line ok = overflow_huge_int_unit128(Bin, Sizes),
+ Sizes = case erlang:system_info(wordsize) of
+ 4 -> lists:seq(25, 32);
+ 8 -> []
+ end ++ lists:seq(50, 64),
+ ok = overflow_huge_int_unit128(Bin, Sizes),
ok.
@@ -343,19 +342,19 @@ overflow_huge_int_64(<<Int:9223372036854775808/unit:128,0,_/binary>>) -> {8,Int}
overflow_huge_int_64(_) -> nomatch.
bignum(Config) when is_list(Config) ->
- ?line Bin = id(<<42,0:1024/unit:8,43>>),
- ?line <<42:1025/little-integer-unit:8,_:8>> = Bin,
- ?line <<_:8,43:1025/integer-unit:8>> = Bin,
+ Bin = id(<<42,0:1024/unit:8,43>>),
+ <<42:1025/little-integer-unit:8,_:8>> = Bin,
+ <<_:8,43:1025/integer-unit:8>> = Bin,
- ?line BignumBin = id(<<0:512/unit:8,258254417031933722623:9/unit:8>>),
- ?line <<258254417031933722623:(512+9)/unit:8>> = BignumBin,
+ BignumBin = id(<<0:512/unit:8,258254417031933722623:9/unit:8>>),
+ <<258254417031933722623:(512+9)/unit:8>> = BignumBin,
erlang:garbage_collect(), %Search for holes in debug-build.
ok.
unaligned_32_bit(Config) when is_list(Config) ->
%% There used to be a risk for heap overflow (fixed in R11B-5).
- ?line L = unaligned_32_bit_1(<<-1:(64*1024)>>),
- ?line unaligned_32_bit_verify(L, 1638).
+ L = unaligned_32_bit_1(<<-1:(64*1024)>>),
+ unaligned_32_bit_verify(L, 1638).
unaligned_32_bit_1(<<1:1,U:32,_:7,T/binary>>) ->
[U|unaligned_32_bit_1(T)];
diff --git a/lib/debugger/test/bs_match_misc_SUITE.erl b/lib/debugger/test/bs_match_misc_SUITE.erl
index 2221cfe08b..fe86b54992 100644
--- a/lib/debugger/test/bs_match_misc_SUITE.erl
+++ b/lib/debugger/test/bs_match_misc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,9 +29,11 @@
writable_binary_matched/1,otp_7198/1,
unordered_bindings/1,float_middle_endian/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,15}}].
all() ->
[bound_var, bound_tail, t_float, little_float, sean,
@@ -49,8 +51,8 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
@@ -58,31 +60,28 @@ end_per_suite(Config) when is_list(Config) ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(15)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-bound_var(doc) -> "Test matching of bound variables.";
+%% Test matching of bound variables.
bound_var(Config) when is_list(Config) ->
- ?line ok = bound_var(42, 13, <<42,13>>),
- ?line nope = bound_var(42, 13, <<42,255>>),
- ?line nope = bound_var(42, 13, <<154,255>>),
+ ok = bound_var(42, 13, <<42,13>>),
+ nope = bound_var(42, 13, <<42,255>>),
+ nope = bound_var(42, 13, <<154,255>>),
ok.
bound_var(A, B, <<A:8,B:8>>) -> ok;
bound_var(_, _, _) -> nope.
-bound_tail(doc) -> "Test matching of a bound tail.";
+%% Test matching of a bound tail.
bound_tail(Config) when is_list(Config) ->
- ?line ok = bound_tail(<<>>, <<13,14>>),
- ?line ok = bound_tail(<<2,3>>, <<1,1,2,3>>),
- ?line nope = bound_tail(<<2,3>>, <<1,1,2,7>>),
- ?line nope = bound_tail(<<2,3>>, <<1,1,2,3,4>>),
- ?line nope = bound_tail(<<2,3>>, <<>>),
+ ok = bound_tail(<<>>, <<13,14>>),
+ ok = bound_tail(<<2,3>>, <<1,1,2,3>>),
+ nope = bound_tail(<<2,3>>, <<1,1,2,7>>),
+ nope = bound_tail(<<2,3>>, <<1,1,2,3,4>>),
+ nope = bound_tail(<<2,3>>, <<>>),
ok.
bound_tail(T, <<_:16,T/binary>>) -> ok;
@@ -92,26 +91,26 @@ t_float(Config) when is_list(Config) ->
F = f1(),
G = f_one(),
- ?line G = match_float(<<63,128,0,0>>, 32, 0),
- ?line G = match_float(<<63,240,0,0,0,0,0,0>>, 64, 0),
+ G = match_float(<<63,128,0,0>>, 32, 0),
+ G = match_float(<<63,240,0,0,0,0,0,0>>, 64, 0),
- ?line fcmp(F, match_float(<<F:32/float>>, 32, 0)),
- ?line fcmp(F, match_float(<<F:64/float>>, 64, 0)),
- ?line fcmp(F, match_float(<<1:1,F:32/float,127:7>>, 32, 1)),
- ?line fcmp(F, match_float(<<1:1,F:64/float,127:7>>, 64, 1)),
- ?line fcmp(F, match_float(<<1:13,F:32/float,127:3>>, 32, 13)),
- ?line fcmp(F, match_float(<<1:13,F:64/float,127:3>>, 64, 13)),
+ fcmp(F, match_float(<<F:32/float>>, 32, 0)),
+ fcmp(F, match_float(<<F:64/float>>, 64, 0)),
+ fcmp(F, match_float(<<1:1,F:32/float,127:7>>, 32, 1)),
+ fcmp(F, match_float(<<1:1,F:64/float,127:7>>, 64, 1)),
+ fcmp(F, match_float(<<1:13,F:32/float,127:3>>, 32, 13)),
+ fcmp(F, match_float(<<1:13,F:64/float,127:3>>, 64, 13)),
- ?line {'EXIT',{{badmatch,_},_}} = (catch match_float(<<0,0>>, 16, 0)),
- ?line {'EXIT',{{badmatch,_},_}} = (catch match_float(<<0,0>>, 16#7fffffff, 0)),
+ {'EXIT',{{badmatch,_},_}} = (catch match_float(<<0,0>>, 16, 0)),
+ {'EXIT',{{badmatch,_},_}} = (catch match_float(<<0,0>>, 16#7fffffff, 0)),
ok.
float_middle_endian(Config) when is_list(Config) ->
F = 9007199254740990.0, % turns to -NaN when word-swapped
- ?line fcmp(F, match_float(<<F:64/float>>, 64, 0)),
- ?line fcmp(F, match_float(<<1:1,F:64/float,127:7>>, 64, 1)),
- ?line fcmp(F, match_float(<<1:13,F:64/float,127:3>>, 64, 13)),
+ fcmp(F, match_float(<<F:64/float>>, 64, 0)),
+ fcmp(F, match_float(<<1:1,F:64/float,127:7>>, 64, 1)),
+ fcmp(F, match_float(<<1:13,F:64/float,127:3>>, 64, 13)),
ok.
@@ -128,15 +127,15 @@ little_float(Config) when is_list(Config) ->
F = f2(),
G = f_one(),
- ?line G = match_float_little(<<0,0,0,0,0,0,240,63>>, 64, 0),
- ?line G = match_float_little(<<0,0,128,63>>, 32, 0),
+ G = match_float_little(<<0,0,0,0,0,0,240,63>>, 64, 0),
+ G = match_float_little(<<0,0,128,63>>, 32, 0),
- ?line fcmp(F, match_float_little(<<F:32/float-little>>, 32, 0)),
- ?line fcmp(F, match_float_little(<<F:64/float-little>>, 64, 0)),
- ?line fcmp(F, match_float_little(<<1:1,F:32/float-little,127:7>>, 32, 1)),
- ?line fcmp(F, match_float_little(<<1:1,F:64/float-little,127:7>>, 64, 1)),
- ?line fcmp(F, match_float_little(<<1:13,F:32/float-little,127:3>>, 32, 13)),
- ?line fcmp(F, match_float_little(<<1:13,F:64/float-little,127:3>>, 64, 13)),
+ fcmp(F, match_float_little(<<F:32/float-little>>, 32, 0)),
+ fcmp(F, match_float_little(<<F:64/float-little>>, 64, 0)),
+ fcmp(F, match_float_little(<<1:1,F:32/float-little,127:7>>, 32, 1)),
+ fcmp(F, match_float_little(<<1:1,F:64/float-little,127:7>>, 64, 1)),
+ fcmp(F, match_float_little(<<1:13,F:32/float-little,127:3>>, 32, 13)),
+ fcmp(F, match_float_little(<<1:13,F:64/float-little,127:3>>, 64, 13)),
ok.
@@ -164,16 +163,16 @@ f_one() ->
1.0.
sean(Config) when is_list(Config) ->
- ?line small = sean1(<<>>),
- ?line small = sean1(<<1>>),
- ?line small = sean1(<<1,2>>),
- ?line small = sean1(<<1,2,3>>),
- ?line large = sean1(<<1,2,3,4>>),
-
- ?line small = sean1(<<4>>),
- ?line small = sean1(<<4,5>>),
- ?line small = sean1(<<4,5,6>>),
- ?line {'EXIT',{function_clause,_}} = (catch sean1(<<4,5,6,7>>)),
+ small = sean1(<<>>),
+ small = sean1(<<1>>),
+ small = sean1(<<1,2>>),
+ small = sean1(<<1,2,3>>),
+ large = sean1(<<1,2,3,4>>),
+
+ small = sean1(<<4>>),
+ small = sean1(<<4,5>>),
+ small = sean1(<<4,5,6>>),
+ {'EXIT',{function_clause,_}} = (catch sean1(<<4,5,6,7>>)),
ok.
sean1(<<B/binary>>) when byte_size(B) < 4 -> small;
@@ -188,11 +187,11 @@ msisdn_internal_storage(<<>>,MSISDN) ->
msisdn_internal_storage(<<2#11111111:8,_Rest/binary>>,MSISDN) ->
{ok,lists:reverse(MSISDN)};
msisdn_internal_storage(<<2#1111:4,DigitN:4,_Rest/binary>>,MSISDN) when
- DigitN < 10 ->
+ DigitN < 10 ->
{ok,lists:reverse([(DigitN bor 2#11110000)|MSISDN])};
msisdn_internal_storage(<<DigitNplus1:4,DigitN:4,Rest/binary>>,MSISDN) when
- DigitNplus1 < 10,
- DigitN < 10 ->
+ DigitNplus1 < 10,
+ DigitN < 10 ->
NewMSISDN=[((DigitNplus1 bsl 4) bor DigitN)|MSISDN],
msisdn_internal_storage(Rest,NewMSISDN);
msisdn_internal_storage(_Rest,_MSISDN) ->
@@ -297,36 +296,36 @@ getBase64Char(62) -> "+";
getBase64Char(63) -> "/";
getBase64Char(_Else) ->
%% This is an illegal input.
-% cgLogEM:log(error, ?MODULE, getBase64Char, [Else],
-% "illegal input",
-% ?LINE, version()),
+ %% cgLogEM:log(error, ?MODULE, getBase64Char, [Else],
+ %% "illegal input",
+ %% ?LINE, version()),
"**".
-define(M(F), <<F>> = <<F>>).
native(Config) when is_list(Config) ->
- ?line ?M(3.14:64/native-float),
- ?line ?M(333:16/native),
- ?line ?M(38658345:32/native),
+ ?M(3.14:64/native-float),
+ ?M(333:16/native),
+ ?M(38658345:32/native),
case <<1:16/native>> of
<<0,1>> -> native_big();
<<1,0>> -> native_little()
end.
native_big() ->
- ?line <<37.33:64/native-float>> = <<37.33:64/big-float>>,
- ?line <<3974:16/native-integer>> = <<3974:16/big-integer>>,
+ <<37.33:64/native-float>> = <<37.33:64/big-float>>,
+ <<3974:16/native-integer>> = <<3974:16/big-integer>>,
{comment,"Big endian"}.
native_little() ->
- ?line <<37869.32343:64/native-float>> = <<37869.32343:64/little-float>>,
- ?line <<7974:16/native-integer>> = <<7974:16/little-integer>>,
+ <<37869.32343:64/native-float>> = <<37869.32343:64/little-float>>,
+ <<7974:16/native-integer>> = <<7974:16/little-integer>>,
{comment,"Little endian"}.
happi(Config) when is_list(Config) ->
Bin = <<".123">>,
- ?line <<"123">> = lex_digits1(Bin, 1, []),
- ?line <<"123">> = lex_digits2(Bin, 1, []),
+ <<"123">> = lex_digits1(Bin, 1, []),
+ <<"123">> = lex_digits2(Bin, 1, []),
ok.
lex_digits1(<<$., Rest/binary>>,_Val,_Acc) ->
@@ -347,16 +346,16 @@ dec(A) ->
A-$0.
size_var(Config) when is_list(Config) ->
- ?line {<<45>>,<<>>} = split(<<1:16,45>>),
- ?line {<<45>>,<<46,47>>} = split(<<1:16,45,46,47>>),
- ?line {<<45,46>>,<<47>>} = split(<<2:16,45,46,47>>),
+ {<<45>>,<<>>} = split(<<1:16,45>>),
+ {<<45>>,<<46,47>>} = split(<<1:16,45,46,47>>),
+ {<<45,46>>,<<47>>} = split(<<2:16,45,46,47>>),
- ?line {<<45,46,47>>,<<48>>} = split_2(<<16:8,3:16,45,46,47,48>>),
+ {<<45,46,47>>,<<48>>} = split_2(<<16:8,3:16,45,46,47,48>>),
- ?line {<<45,46>>,<<47>>} = split(2, <<2:16,45,46,47>>),
- ?line {'EXIT',{function_clause,_}} = (catch split(42, <<2:16,45,46,47>>)),
+ {<<45,46>>,<<47>>} = split(2, <<2:16,45,46,47>>),
+ {'EXIT',{function_clause,_}} = (catch split(42, <<2:16,45,46,47>>)),
- ?line <<"cdef">> = skip(<<2:8,"abcdef">>),
+ <<"cdef">> = skip(<<2:8,"abcdef">>),
ok.
@@ -372,11 +371,11 @@ split_2(<<N0:8,N:N0,B:N/binary,T/binary>>) ->
skip(<<N:8,_:N/binary,T/binary>>) -> T.
wiger(Config) when is_list(Config) ->
- ?line ok1 = wcheck(<<3>>),
- ?line ok2 = wcheck(<<1,2,3>>),
- ?line ok3 = wcheck(<<4>>),
- ?line {error,<<1,2,3,4>>} = wcheck(<<1,2,3,4>>),
- ?line {error,<<>>} = wcheck(<<>>),
+ ok1 = wcheck(<<3>>),
+ ok2 = wcheck(<<1,2,3>>),
+ ok3 = wcheck(<<4>>),
+ {error,<<1,2,3,4>>} = wcheck(<<1,2,3,4>>),
+ {error,<<>>} = wcheck(<<>>),
ok.
wcheck(<<A>>) when A==3->
@@ -410,9 +409,9 @@ x0_2(_, Bin) ->
x0_3(_, Bin) ->
case Bin of
<<_:72,7:8,_/binary>> ->
- ?line ?t:fail();
+ ct:fail(failed);
<<_:64,0:16,_/binary>> ->
- ?line ?t:fail();
+ ct:fail(failed);
<<_:64,42:16,123456:32,_/binary>> ->
ok
end.
@@ -420,13 +419,13 @@ x0_3(_, Bin) ->
huge_float_field(Config) when is_list(Config) ->
Sz = 1 bsl 27,
- ?line Bin = <<0:Sz>>,
+ Bin = <<0:Sz>>,
- ?line nomatch = overflow_huge_float_skip_32(Bin),
- ?line nomatch = overflow_huge_float_32(Bin),
+ nomatch = overflow_huge_float_skip_32(Bin),
+ nomatch = overflow_huge_float_32(Bin),
- ?line ok = overflow_huge_float(Bin, lists:seq(25, 32)++lists:seq(50, 64)),
- ?line ok = overflow_huge_float_unit128(Bin, lists:seq(25, 32)++lists:seq(50, 64)),
+ ok = overflow_huge_float(Bin, lists:seq(25, 32)++lists:seq(50, 64)),
+ ok = overflow_huge_float_unit128(Bin, lists:seq(25, 32)++lists:seq(50, 64)),
ok.
overflow_huge_float_skip_32(<<_:4294967296/float,0,_/binary>>) -> 1; % 1 bsl 32
@@ -486,36 +485,36 @@ overflow_huge_float_unit128(_, []) -> ok.
%%
writable_binary_matched(Config) when is_list(Config) ->
- ?line WritableBin = create_writeable_binary(),
- ?line writable_binary_matched(WritableBin, WritableBin, 500).
+ WritableBin = create_writeable_binary(),
+ writable_binary_matched(WritableBin, WritableBin, 500).
writable_binary_matched(<<0>>, _, N) ->
if
N =:= 0 -> ok;
true ->
put(grow_heap, [N|get(grow_heap)]),
- ?line WritableBin = create_writeable_binary(),
- ?line writable_binary_matched(WritableBin, WritableBin, N-1)
+ WritableBin = create_writeable_binary(),
+ writable_binary_matched(WritableBin, WritableBin, N-1)
end;
writable_binary_matched(<<B:8,T/binary>>, WritableBin0, N) ->
- ?line WritableBin = writable_binary(WritableBin0, B),
+ WritableBin = writable_binary(WritableBin0, B),
writable_binary_matched(T, WritableBin, N).
writable_binary(WritableBin0, B) when is_binary(WritableBin0) ->
%% Heavy append to force the binary to move.
- ?line WritableBin = <<WritableBin0/binary,0:(size(WritableBin0))/unit:8,B>>,
- ?line id(<<(id(0)):128/unit:8>>),
+ WritableBin = <<WritableBin0/binary,0:(size(WritableBin0))/unit:8,B>>,
+ id(<<(id(0)):128/unit:8>>),
WritableBin.
create_writeable_binary() ->
- <<(id(<<>>))/binary,1,2,3,4,5,6,0>>.
+ <<(id(<<>>))/binary,1,2,3,4,5,6,0>>.
otp_7198(Config) when is_list(Config) ->
%% When a match context was reused, and grown at the same time to
%% increase the number of saved positions, the thing word was not updated
%% to account for the new size. Therefore, if there was a garbage collection,
%% the new slots would be included in the garbage collection.
- ?line [do_otp_7198(FillerSize) || FillerSize <- lists:seq(0, 256)],
+ [do_otp_7198(FillerSize) || FillerSize <- lists:seq(0, 256)],
ok.
do_otp_7198(FillerSize) ->
@@ -526,7 +525,7 @@ do_otp_7198(FillerSize) ->
ok;
{'DOWN',Ref,process,Pid,Reason} ->
io:format("unexpected: ~p", [Reason]),
- ?line ?t:fail()
+ ct:fail(failed)
end.
do_otp_7198_test(_) ->
@@ -548,32 +547,32 @@ do_otp_7198_test(_) ->
otp_7198_scan(<<>>, TokAcc) ->
- lists:reverse(['$thats_all_folks$' | TokAcc]);
+ lists:reverse(['$thats_all_folks$' | TokAcc]);
otp_7198_scan(<<D, Z, Rest/binary>>, TokAcc) when
- (D =:= $D orelse D =:= $d) and
- ((Z =:= $\s) or (Z =:= $() or (Z =:= $))) ->
- otp_7198_scan(<<Z, Rest/binary>>, ['AND' | TokAcc]);
+ (D =:= $D orelse D =:= $d) and
+ ((Z =:= $\s) or (Z =:= $() or (Z =:= $))) ->
+ otp_7198_scan(<<Z, Rest/binary>>, ['AND' | TokAcc]);
otp_7198_scan(<<D>>, TokAcc) when
- (D =:= $D) or (D =:= $d) ->
- otp_7198_scan(<<>>, ['AND' | TokAcc]);
+ (D =:= $D) or (D =:= $d) ->
+ otp_7198_scan(<<>>, ['AND' | TokAcc]);
otp_7198_scan(<<N, Z, Rest/binary>>, TokAcc) when
- (N =:= $N orelse N =:= $n) and
- ((Z =:= $\s) or (Z =:= $() or (Z =:= $))) ->
- otp_7198_scan(<<Z, Rest/binary>>, ['NOT' | TokAcc]);
+ (N =:= $N orelse N =:= $n) and
+ ((Z =:= $\s) or (Z =:= $() or (Z =:= $))) ->
+ otp_7198_scan(<<Z, Rest/binary>>, ['NOT' | TokAcc]);
otp_7198_scan(<<C, Rest/binary>>, TokAcc) when
- (C >= $A) and (C =< $Z);
- (C >= $a) and (C =< $z);
- (C >= $0) and (C =< $9) ->
- case Rest of
- <<$:, R/binary>> ->
- otp_7198_scan(R, [{'FIELD', C} | TokAcc]);
- _ ->
- otp_7198_scan(Rest, [{'KEYWORD', C} | TokAcc])
- end.
+ (C >= $A) and (C =< $Z);
+ (C >= $a) and (C =< $z);
+ (C >= $0) and (C =< $9) ->
+ case Rest of
+ <<$:, R/binary>> ->
+ otp_7198_scan(R, [{'FIELD', C} | TokAcc]);
+ _ ->
+ otp_7198_scan(Rest, [{'KEYWORD', C} | TokAcc])
+ end.
unordered_bindings(Config) when is_list(Config) ->
{<<1,2,3,4>>,<<42,42>>,<<3,3,3>>} =
@@ -582,7 +581,7 @@ unordered_bindings(Config) when is_list(Config) ->
unordered_bindings(CompressedLength, HashSize, PadLength, T) ->
<<Content:CompressedLength/binary,Mac:HashSize/binary,
- Padding:PadLength/binary,PadLength>> = T,
+ Padding:PadLength/binary,PadLength>> = T,
{Content,Mac,Padding}.
diff --git a/lib/debugger/test/bs_match_tail_SUITE.erl b/lib/debugger/test/bs_match_tail_SUITE.erl
index 9ec93978ed..4faa0360ce 100644
--- a/lib/debugger/test/bs_match_tail_SUITE.erl
+++ b/lib/debugger/test/bs_match_tail_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,11 @@
init_per_suite/1,end_per_suite/1,
aligned/1,unaligned/1,zero_tail/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
cases().
@@ -48,51 +50,48 @@ cases() ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
ok.
-aligned(doc) -> "Test aligned tails.";
+%% Test aligned tails.
aligned(Config) when is_list(Config) ->
- ?line Tail1 = mkbin([]),
- ?line {258,Tail1} = al_get_tail_used(mkbin([1,2])),
- ?line Tail2 = mkbin(lists:seq(1, 127)),
- ?line {35091,Tail2} = al_get_tail_used(mkbin([137,19|Tail2])),
-
- ?line 64896 = al_get_tail_unused(mkbin([253,128])),
- ?line 64895 = al_get_tail_unused(mkbin([253,127|lists:seq(42, 255)])),
-
- ?line Tail3 = mkbin(lists:seq(0, 19)),
- ?line {0,Tail1} = get_dyn_tail_used(Tail1, 0),
- ?line {0,Tail3} = get_dyn_tail_used(mkbin([Tail3]), 0),
- ?line {73,Tail3} = get_dyn_tail_used(mkbin([73|Tail3]), 8),
-
- ?line 0 = get_dyn_tail_unused(mkbin([]), 0),
- ?line 233 = get_dyn_tail_unused(mkbin([233]), 8),
- ?line 23 = get_dyn_tail_unused(mkbin([23,22,2]), 8),
+ Tail1 = mkbin([]),
+ {258,Tail1} = al_get_tail_used(mkbin([1,2])),
+ Tail2 = mkbin(lists:seq(1, 127)),
+ {35091,Tail2} = al_get_tail_used(mkbin([137,19|Tail2])),
+
+ 64896 = al_get_tail_unused(mkbin([253,128])),
+ 64895 = al_get_tail_unused(mkbin([253,127|lists:seq(42, 255)])),
+
+ Tail3 = mkbin(lists:seq(0, 19)),
+ {0,Tail1} = get_dyn_tail_used(Tail1, 0),
+ {0,Tail3} = get_dyn_tail_used(mkbin([Tail3]), 0),
+ {73,Tail3} = get_dyn_tail_used(mkbin([73|Tail3]), 8),
+
+ 0 = get_dyn_tail_unused(mkbin([]), 0),
+ 233 = get_dyn_tail_unused(mkbin([233]), 8),
+ 23 = get_dyn_tail_unused(mkbin([23,22,2]), 8),
ok.
al_get_tail_used(<<A:16,T/binary>>) -> {A,T}.
al_get_tail_unused(<<A:16,_/binary>>) -> A.
-unaligned(doc) -> "Test that an non-aligned tail cannot be matched out.";
+%% Test that an non-aligned tail cannot be matched out.
unaligned(Config) when is_list(Config) ->
- ?line {'EXIT',{function_clause,_}} = (catch get_tail_used(mkbin([42]))),
- ?line {'EXIT',{{badmatch,_},_}} = (catch get_dyn_tail_used(mkbin([137]), 3)),
- ?line {'EXIT',{function_clause,_}} = (catch get_tail_unused(mkbin([42,33]))),
- ?line {'EXIT',{{badmatch,_},_}} = (catch get_dyn_tail_unused(mkbin([44]), 7)),
+ {'EXIT',{function_clause,_}} = (catch get_tail_used(mkbin([42]))),
+ {'EXIT',{{badmatch,_},_}} = (catch get_dyn_tail_used(mkbin([137]), 3)),
+ {'EXIT',{function_clause,_}} = (catch get_tail_unused(mkbin([42,33]))),
+ {'EXIT',{{badmatch,_},_}} = (catch get_dyn_tail_unused(mkbin([44]), 7)),
ok.
get_tail_used(<<A:1,T/binary>>) -> {A,T}.
@@ -107,11 +106,11 @@ get_dyn_tail_unused(Bin, Sz) ->
<<A:Sz,_/binary>> = Bin,
A.
-zero_tail(doc) -> "Test that zero tails are tested correctly.";
+%% Test that zero tails are tested correctly.
zero_tail(Config) when is_list(Config) ->
- ?line 7 = (catch test_zero_tail(mkbin([7]))),
- ?line {'EXIT',{function_clause,_}} = (catch test_zero_tail(mkbin([1,2]))),
- ?line {'EXIT',{function_clause,_}} = (catch test_zero_tail2(mkbin([1,2,3]))),
+ 7 = (catch test_zero_tail(mkbin([7]))),
+ {'EXIT',{function_clause,_}} = (catch test_zero_tail(mkbin([1,2]))),
+ {'EXIT',{function_clause,_}} = (catch test_zero_tail2(mkbin([1,2,3]))),
ok.
test_zero_tail(<<A:8>>) -> A.
diff --git a/lib/debugger/test/bs_utf_SUITE.erl b/lib/debugger/test/bs_utf_SUITE.erl
index 90c4d6c7b9..ccedc42064 100644
--- a/lib/debugger/test/bs_utf_SUITE.erl
+++ b/lib/debugger/test/bs_utf_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,10 +28,12 @@
utf8_roundtrip/1,unused_utf_char/1,utf16_roundtrip/1,
utf32_roundtrip/1,guard/1,extreme_tripping/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile([no_jopt,time]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
cases().
@@ -52,31 +54,28 @@ cases() ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
ok.
utf8_roundtrip(Config) when is_list(Config) ->
- ?line [utf8_roundtrip_1(P) || P <- utf_data()],
+ [utf8_roundtrip_1(P) || P <- utf_data()],
ok.
utf8_roundtrip_1({Str,Bin,Bin}) ->
- ?line Str = utf8_to_list(Bin),
- ?line Bin = list_to_utf8(Str),
- ?line [ok = utf8_guard(C, <<42,C/utf8>>) || C <- Str],
- ?line [error = utf8_guard(C, <<C/utf8>>) || C <- Str],
+ Str = utf8_to_list(Bin),
+ Bin = list_to_utf8(Str),
+ [ok = utf8_guard(C, <<42,C/utf8>>) || C <- Str],
+ [error = utf8_guard(C, <<C/utf8>>) || C <- Str],
ok.
utf8_guard(C, Bin) when <<42,C/utf8>> =:= Bin -> ok;
@@ -106,14 +105,14 @@ utf8_len(<<_/utf8,T/binary>>, N) ->
utf8_len(<<>>, N) -> N.
utf16_roundtrip(Config) when is_list(Config) ->
- ?line {Str,Big,Big,Little,Little} = utf16_data(),
- ?line 4 = utf16_big_len(Big),
- ?line 4 = utf16_little_len(Little),
- ?line Str = big_utf16_to_list(Big),
- ?line Str = little_utf16_to_list(Little),
+ {Str,Big,Big,Little,Little} = utf16_data(),
+ 4 = utf16_big_len(Big),
+ 4 = utf16_little_len(Little),
+ Str = big_utf16_to_list(Big),
+ Str = little_utf16_to_list(Little),
- ?line Big = list_to_big_utf16(Str),
- ?line Little = list_to_little_utf16(Str),
+ Big = list_to_big_utf16(Str),
+ Little = list_to_little_utf16(Str),
ok.
@@ -154,14 +153,14 @@ little_utf16_to_list(<<H/little-utf16,T/binary>>) ->
little_utf16_to_list(<<>>) -> [].
utf32_roundtrip(Config) when is_list(Config) ->
- ?line {Str,Big,Big,Little,Little} = utf32_data(),
- ?line 4 = utf32_big_len(Big),
- ?line 4 = utf32_little_len(Little),
- ?line Str = big_utf32_to_list(Big),
- ?line Str = little_utf32_to_list(Little),
+ {Str,Big,Big,Little,Little} = utf32_data(),
+ 4 = utf32_big_len(Big),
+ 4 = utf32_little_len(Little),
+ Str = big_utf32_to_list(Big),
+ Str = little_utf32_to_list(Little),
- ?line Big = list_to_big_utf32(Str),
- ?line Little = list_to_little_utf32(Str),
+ Big = list_to_big_utf32(Str),
+ Little = list_to_little_utf32(Str),
ok.
@@ -203,7 +202,7 @@ little_utf32_to_list(<<>>) -> [].
guard(Config) when is_list(Config) ->
- ?line error = do_guard(16#D800),
+ error = do_guard(16#D800),
ok.
do_guard(C) when byte_size(<<C/utf8>>) =/= 42 -> ok;
@@ -215,13 +214,13 @@ do_guard(_) -> error.
%% the delayed creation of sub-binaries works.
extreme_tripping(Config) when is_list(Config) ->
- ?line Unicode = lists:seq(0, 1024),
- ?line Utf8 = unicode_to_utf8(Unicode, <<>>),
- ?line Utf16 = utf8_to_utf16(Utf8, <<>>),
- ?line Utf32 = utf8_to_utf32(Utf8, <<>>),
- ?line Utf32 = utf16_to_utf32(Utf16, <<>>),
- ?line Utf8 = utf32_to_utf8(Utf32, <<>>),
- ?line Unicode = utf32_to_unicode(Utf32),
+ Unicode = lists:seq(0, 1024),
+ Utf8 = unicode_to_utf8(Unicode, <<>>),
+ Utf16 = utf8_to_utf16(Utf8, <<>>),
+ Utf32 = utf8_to_utf32(Utf8, <<>>),
+ Utf32 = utf16_to_utf32(Utf16, <<>>),
+ Utf8 = utf32_to_utf8(Utf32, <<>>),
+ Unicode = utf32_to_unicode(Utf32),
ok.
unicode_to_utf8([C|T], Bin) ->
@@ -249,7 +248,7 @@ utf32_to_unicode(<<C/utf32,T/binary>>) ->
utf32_to_unicode(<<>>) -> [].
utf_data() ->
-%% From RFC-3629.
+ %% From RFC-3629.
%% Give the compiler a change to do some constant propagation.
NotIdentical = 16#2262,
@@ -287,7 +286,7 @@ utf16_data() ->
%% Little endian (the two binaries should be equal).
<<RaHieroglyph/little-utf16,16#3D/little-utf16,
- 16#52/little-utf16,16#61/little-utf16>>,
+ 16#52/little-utf16,16#61/little-utf16>>,
<<16#08,16#D8,16#45,16#DF,16#3D,16#00,16#52,16#00,16#61,16#00>>}.
utf32_data() ->
@@ -301,6 +300,6 @@ utf32_data() ->
%% Little endian.
<<16#0041/little-utf32,NotIdentical/little-utf32,
- 16#0391/little-utf32,16#002E/little-utf32>>,
+ 16#0391/little-utf32,16#002E/little-utf32>>,
<<16#41:32/little,NotIdentical:32/little,
- 16#0391:32/little,16#2E:32/little>>}.
+ 16#0391:32/little,16#2E:32/little>>}.
diff --git a/lib/debugger/test/bug_SUITE.erl b/lib/debugger/test/bug_SUITE.erl
index 542db3f41e..ac73672d2a 100644
--- a/lib/debugger/test/bug_SUITE.erl
+++ b/lib/debugger/test/bug_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,14 +21,16 @@
%%
-module(bug_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
-export([otp2163/1, otp4845/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[{group, ticket_tests}].
@@ -43,54 +45,52 @@ end_per_suite(_Config) ->
ok.
init_per_group(_GroupName, Config) ->
- Config.
+ Config.
end_per_group(_GroupName, Config) ->
- Config.
+ Config.
-otp2163(doc) -> ["BIF exit reason"];
-otp2163(suite) -> [];
+%% BIF exit reason.
otp2163(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% First compile and get the expected results:
- ?line FileName = filename:join(DataDir, "otp2163"),
- ?line {module,otp2163} = code:load_abs(FileName),
+ FileName = filename:join(DataDir, "otp2163"),
+ {module,otp2163} = code:load_abs(FileName),
- ?line {'EXIT',{badarg,[ApplyRes|_]}} = (catch otp2163:apply_test()),
- ?line {'EXIT',{badarg,[ListRes|_]}} = (catch otp2163:list_to_atom_test()),
+ {'EXIT',{badarg,[ApplyRes|_]}} = (catch otp2163:apply_test()),
+ {'EXIT',{badarg,[ListRes|_]}} = (catch otp2163:list_to_atom_test()),
%% Then interpret, and check if the results are OK.
- ?line {module,otp2163} = int:i(FileName),
+ {module,otp2163} = int:i(FileName),
- ?line ok = io:format("Expecting ~p", [ApplyRes]),
- ?line {'EXIT',{badarg,[ApplyRes|_]}} = (catch otp2163:apply_test()),
- ?line ok = io:format("Expecting ~p", [ListRes]),
- ?line {'EXIT',{badarg,[ListRes|_]}} = (catch otp2163:list_to_atom_test()),
+ ok = io:format("Expecting ~p", [ApplyRes]),
+ {'EXIT',{badarg,[ApplyRes|_]}} = (catch otp2163:apply_test()),
+ ok = io:format("Expecting ~p", [ListRes]),
+ {'EXIT',{badarg,[ListRes|_]}} = (catch otp2163:list_to_atom_test()),
ok.
-otp4845(doc) -> ["BIF not loading and not bug compatible, OTP-4845 OTP-4859"];
-otp4845(suite) -> [];
+%% BIF not loading and not bug compatible, OTP-4845 OTP-4859.
otp4845(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% First compile and get the expected results:
- ?line FileName = filename:join(DataDir, "otp4845"),
- ?line {module,otp4845} = code:load_abs(FileName),
+ FileName = filename:join(DataDir, "otp4845"),
+ {module,otp4845} = code:load_abs(FileName),
- ?line CompiledRes = (catch otp4845:test()),
- ?line ok = io:format("Compiled ~p", [CompiledRes]),
+ CompiledRes = (catch otp4845:test()),
+ ok = io:format("Compiled ~p", [CompiledRes]),
%% Then interpret, and check if the results are OK.
- ?line {module,otp4845} = int:i(FileName),
+ {module,otp4845} = int:i(FileName),
- ?line IntRes = (catch otp4845:test()),
- ?line ok = io:format("Interpreted ~p", [IntRes]),
+ IntRes = (catch otp4845:test()),
+ ok = io:format("Interpreted ~p", [IntRes]),
- ?line CompiledRes = IntRes,
+ CompiledRes = IntRes,
ok.
diff --git a/lib/debugger/test/bug_SUITE_data/Makefile.src b/lib/debugger/test/bug_SUITE_data/Makefile.src
index 244c9025f0..621eebc389 100644
--- a/lib/debugger/test/bug_SUITE_data/Makefile.src
+++ b/lib/debugger/test/bug_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2010. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/bug_SUITE_data/otp2163.erl b/lib/debugger/test/bug_SUITE_data/otp2163.erl
index 6b6dcffa8c..f80b019854 100644
--- a/lib/debugger/test/bug_SUITE_data/otp2163.erl
+++ b/lib/debugger/test/bug_SUITE_data/otp2163.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/bug_SUITE_data/otp4845.erl b/lib/debugger/test/bug_SUITE_data/otp4845.erl
index ffb038cc9e..43e0263df0 100644
--- a/lib/debugger/test/bug_SUITE_data/otp4845.erl
+++ b/lib/debugger/test/bug_SUITE_data/otp4845.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/cleanup.erl b/lib/debugger/test/cleanup.erl
index b40ae5f82c..7970b53086 100644
--- a/lib/debugger/test/cleanup.erl
+++ b/lib/debugger/test/cleanup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,25 +23,24 @@
-export([all/0,groups/0,init_per_group/2,end_per_group/2, cleanup/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
all() ->
-[cleanup].
+ [cleanup].
groups() ->
[].
init_per_group(_GroupName, Config) ->
- Config.
+ Config.
end_per_group(_GroupName, Config) ->
- Config.
+ Config.
-cleanup(suite) -> [];
cleanup(_) ->
- ?line Mods = int:interpreted(),
- ?line ok = int:n(Mods),
+ Mods = int:interpreted(),
+ ok = int:n(Mods),
case whereis(interpret) of
undefined ->
ok;
diff --git a/lib/debugger/test/dbg_ui_SUITE.erl b/lib/debugger/test/dbg_ui_SUITE.erl
index f0f4e09aa8..32577d48cd 100644
--- a/lib/debugger/test/dbg_ui_SUITE.erl
+++ b/lib/debugger/test/dbg_ui_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,17 +22,17 @@
-module(dbg_ui_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-% Test server specific exports
+%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
-% Test cases must be exported.
+%% Test cases must be exported.
-export ([dbg_ui/1]).
-% Manual test suites/cases exports
+%% Manual test suites/cases exports
-export([start1/1, interpret1/1, quit1/1,
start2/1, interpret2/1, break2/1, options2/1, quit2/1,
interpret3/1, all_step3/1,all_next3/1,save3/1,restore3/1,finish3/1,
@@ -44,15 +44,14 @@
-export([init_per_testcase/2, end_per_testcase/2]).
init_per_testcase(_Func, Config) ->
- Dog=test_server:timetrap(60*1000),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ Config.
+end_per_testcase(_Func, _Config) ->
+ ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[dbg_ui, {group, manual_tests}].
@@ -78,22 +77,17 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-dbg_ui (doc) ->
- ["Debugger GUI"];
-
-dbg_ui (suite) ->
- [];
-
+%% Test Debugger GUI.
dbg_ui (_Config) ->
case os:getenv("DISPLAY") of
false ->
{skipped,"No display"};
Other when is_list(Other) ->
-% ?line {ok, Pid} = debugger:start (),
-% ?line ok = is_pid (Pid),
-% ?line true = erlang:is_process_alive(Pid),
-% ?line ok = debugger:stop(),
-% ?line false = erlang:is_process_alive(Pid)
+ %% {ok, Pid} = debugger:start (),
+ %% ok = is_pid (Pid),
+ %% true = erlang:is_process_alive(Pid),
+ %% ok = debugger:stop(),
+ %% false = erlang:is_process_alive(Pid)
{skipped,"Gunilla: Workaround"}
end.
@@ -105,11 +99,11 @@ dbg_ui (_Config) ->
check(Case, Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line ResultFileName = filename:join([DataDir, "manual_results.erl"]),
+ DataDir = proplists:get_value(data_dir, Config),
+ ResultFileName = filename:join([DataDir, "manual_results.erl"]),
case file:consult(ResultFileName) of
{ok, Results} ->
- ?line io:format("Results: ~p~n",[Results]),
+ io:format("Results: ~p~n",[Results]),
case Results of
[] ->
no_result;
@@ -136,29 +130,27 @@ check(Case, Config) ->
-define(MAN_CASE(Name,Doc, Description),
- Name(doc) -> [Doc];
- Name(suite) -> [];
Name(Config) ->
- ?line io:format("Checking ~p~n",[Name]),
- ?line io:format("Config = ~p~n",[Config]),
+ io:format("Checking ~p~n",[Name]),
+ io:format("Config = ~p~n",[Config]),
case check(Name, Config) of
pass ->
- ?line ok;
+ ok;
fail ->
- ?line test_server:fail("Manual test failed");
+ ct:fail("Manual test failed");
unknown ->
- ?line {skipped, "Manual test result unknown"};
+ {skipped, "Manual test result unknown"};
no_result ->
- ?line {skipped, Description};
+ {skipped, Description};
{error, _Reason} ->
-%% Text = lists:flatten(
-%% io_lib:format("[File problem: ~s]~s",
-%% [Reason,Description])),
- ?line {skipped, Description}
+ %% Text = lists:flatten(
+ %% io_lib:format("[File problem: ~s]~s",
+ %% [Reason,Description])),
+ {skipped, Description}
end
- ).
+ ).
%% SET 1
@@ -170,101 +162,101 @@ please start the debugger from the toolbar").
?MAN_CASE(interpret1, "Interpreting modules",
"In this test case and all of the ones following, the source code
files to use can be found in the test data directory for this debugger test
- suite (probably in
-/clearcase/otp/tools/debugger/test/dbg_ui_SUITE_data/manual_data/src ).
+ suite (probably in
+ /clearcase/otp/tools/debugger/test/dbg_ui_SUITE_data/manual_data/src ).
Interpret one module").
?MAN_CASE(quit1, "Quit the debugger",
-"Quit the debugger using File->Exit in the main window").
+ "Quit the debugger using File->Exit in the main window").
%% SET 2
?MAN_CASE(start2, "Start the debugger from the shell",
-"Start the debugger from the shell. Use debugger:start()").
+ "Start the debugger from the shell. Use debugger:start()").
?MAN_CASE(interpret2, "Interpret all modules",
-"Interpret all modules").
+ "Interpret all modules").
?MAN_CASE(break2, "Set break points",
-"Set break points").
+ "Set break points").
?MAN_CASE(options2, "Set options to attach on break",
-"Set options to attach on break").
+ "Set options to attach on break").
?MAN_CASE(quit2, "Quit the debugger",
-"Quit the debugger using the close box in the main window title frame").
+ "Quit the debugger using the close box in the main window title frame").
%% SET3
?MAN_CASE(interpret3, "Test attach options",
-"Start the debugger and interpret the modules [test, lists1, ordsets1]. Close the Interpret dialog. Set Attach on First Call and Attach on Break.").
+ "Start the debugger and interpret the modules [test, lists1, ordsets1]. Close the Interpret dialog. Set Attach on First Call and Attach on Break.").
?MAN_CASE(all_step3, "Click Step through all evaluation",
-"In the shell, call test:test1(). Use the Step button, the Process->Step menu item and the ctrl-s shortcut to step through the *entire* execution of the call. (Approx 36 steps). Then close the Attach window. The result printed in the shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
+ "In the shell, call test:test1(). Use the Step button, the Process->Step menu item and the ctrl-s shortcut to step through the *entire* execution of the call. (Approx 36 steps). Then close the Attach window. The result printed in the shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
?MAN_CASE(all_next3,"Click Next through all evaluation",
-"Again call test:test1() in the shell. This time Use the Next button, the Process->Next menu and the ctrl-n shortcut to quickly step over the execution of the four lines in the test1-function. The result printed in the shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
+ "Again call test:test1() in the shell. This time Use the Next button, the Process->Next menu and the ctrl-n shortcut to quickly step over the execution of the four lines in the test1-function. The result printed in the shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
?MAN_CASE(save3, "Save the debugger state",
-"Use File->Save Settings to save the debugger state with the name 'three.state'").
+ "Use File->Save Settings to save the debugger state with the name 'three.state'").
?MAN_CASE(restore3,"Quit the debugger, restart and restore the state",
-"Quit the debugger. Start it again. Use File->Load Settings to restore the state saved in 'three.state'. Check that the Attach-options are the same as what you set them to in the interpret3 test case. Check that the three modules [test,lists1,ordsets1] are interpreted.").
+ "Quit the debugger. Start it again. Use File->Load Settings to restore the state saved in 'three.state'. Check that the Attach-options are the same as what you set them to in the interpret3 test case. Check that the three modules [test,lists1,ordsets1] are interpreted.").
?MAN_CASE(finish3, "Finish the current function body",
-"Call the fucntion test:test1() from the shell. Press Finish to evaluate the remaining lines in the function. The result printed in the shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
+ "Call the fucntion test:test1() from the shell. Press Finish to evaluate the remaining lines in the function. The result printed in the shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
?MAN_CASE(killinit3,"Set up for killing and clearing processes",
-"Call test:test2() from the shell. Set a break point at the last line of test:test2. Click Continue. This should open three new attach windows. One for each spawn called in test:test2/0. ").
+ "Call test:test2() from the shell. Set a break point at the last line of test:test2. Click Continue. This should open three new attach windows. One for each spawn called in test:test2/0. ").
?MAN_CASE(killone3, "Kill a process and clear it",
-"In one of the newly openend Attach windows: select Process->Kill. A message should appear above the Code Area in the Attach window. Use Windows->Monitor to verify that the Monitor window also shows that the process has been killed. In the Monitor window: select Edit->Clear. This should do two things: 1) close/remove the window of the killed process. 2) Remove the entry of the killed process from the monitor window.").
+ "In one of the newly openend Attach windows: select Process->Kill. A message should appear above the Code Area in the Attach window. Use Windows->Monitor to verify that the Monitor window also shows that the process has been killed. In the Monitor window: select Edit->Clear. This should do two things: 1) close/remove the window of the killed process. 2) Remove the entry of the killed process from the monitor window.").
?MAN_CASE(killall3,"KIll all processes, and clear them",
-"In the Monitor window: Select Edit->Kill All. Verify that all processes have been killed (in their respective windows and in the monitor window). Windows will be raised as their processes die. Next select, Edit->Clear. All attach windows should now be closed. Their entris should also disappear from the monitor window. The shell should have reported: ** exited: killed **").
+ "In the Monitor window: Select Edit->Kill All. Verify that all processes have been killed (in their respective windows and in the monitor window). Windows will be raised as their processes die. Next select, Edit->Clear. All attach windows should now be closed. Their entris should also disappear from the monitor window. The shell should have reported: ** exited: killed **").
?MAN_CASE(deleteone3,"Delete/uniterpret one module",
-"In the Monitor window: Select Module->test->Delete. This should remove the breakpoints set in the test module, and the test module should disappear from the Module menu.").
+ "In the Monitor window: Select Module->test->Delete. This should remove the breakpoints set in the test module, and the test module should disappear from the Module menu.").
?MAN_CASE(deleteall3,"Delete/uniterpret all modules",
-"In the Monitor window: Select Module->Delete All Modules. This should remove all modules from the Module menu. ").
+ "In the Monitor window: Select Module->Delete All Modules. This should remove all modules from the Module menu. ").
%% SET 4
?MAN_CASE(viewbreak4, "Test the View window",
-"Restore the settings from the three.state file again. In the Monitor window: Use Module->test->View to view the source code of the test module. In the View window, select Break->Line Break and set a break at line 53. Check that it appears in the View window and in the Monitor Window Break-menu. Also in the View window, select Break->Function Break and set a break at function test:test4. Check that the break (at line 59) appears in the View Window and in the Monitor Window Break-menu.").
+ "Restore the settings from the three.state file again. In the Monitor window: Use Module->test->View to view the source code of the test module. In the View window, select Break->Line Break and set a break at line 53. Check that it appears in the View window and in the Monitor Window Break-menu. Also in the View window, select Break->Function Break and set a break at function test:test4. Check that the break (at line 59) appears in the View Window and in the Monitor Window Break-menu.").
?MAN_CASE(delete4, "Remove breaks",
-"Use the Break->Delete All function in the View window to remove all breaks in the test module. Check that they are all removed. Close the View window.").
+ "Use the Break->Delete All function in the View window to remove all breaks in the test module. Check that they are all removed. Close the View window.").
%% SET 5
?MAN_CASE(attach5,"Set attach options",
-"Set the attach options to only attach on exit").
+ "Set the attach options to only attach on exit").
?MAN_CASE(normal5, "Test normal exit",
-"Call test:test12(normal) in the shell. This should return the atom 'done', and no windows should be opened.").
+ "Call test:test12(normal) in the shell. This should return the atom 'done', and no windows should be opened.").
?MAN_CASE(exit5, "Test abnormal exit",
-"Call test:test12(crash) in the shell. This should give the error message ** exited: crash **, and an attach window should be opened highlighting the last line in the test12-function.").
+ "Call test:test12(crash) in the shell. This should give the error message ** exited: crash **, and an attach window should be opened highlighting the last line in the test12-function.").
?MAN_CASE(options5, "Experiment with the frames in the attach window",
-"Try all possible configurations of the [Button, Evaluator, Bindings, Trace] Frames in the attach window and see that the expected frames are shown/hidden.").
+ "Try all possible configurations of the [Button, Evaluator, Bindings, Trace] Frames in the attach window and see that the expected frames are shown/hidden.").
%% SET 6 (Distribution)
?MAN_CASE(distsetup6,"Set up distribution",
-"Start two erlang systems [foo,bar] (with option -sname), make them aware of eachother using net_adm:ping/1. Start the debugger on foo. Interpret the modules [test, lists1, ordsets1]. Set attach on First call. ").
+ "Start two erlang systems [foo,bar] (with option -sname), make them aware of eachother using net_adm:ping/1. Start the debugger on foo. Interpret the modules [test, lists1, ordsets1]. Set attach on First call. ").
?MAN_CASE(all_step6, "Click Step through all evaluation",
-"In the bar shell, call test:test1().This should open an attach window. Use the Step button, the Process->Step menu item and the ctrl-s shortcut to step through the *entire* execution of the call. (Approx 36 steps). Then close the Attach window. The result printed in the bar shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
+ "In the bar shell, call test:test1().This should open an attach window. Use the Step button, the Process->Step menu item and the ctrl-s shortcut to step through the *entire* execution of the call. (Approx 36 steps). Then close the Attach window. The result printed in the bar shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
?MAN_CASE(all_next6,"Click Next through all evaluation",
-"Again, in the bar shell, call test:test1(). This time Use the Next button, the Process->Next menu and the ctrl-n shortcut to quickly step over the execution of the four lines in the test1-function. The result printed in the shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
+ "Again, in the bar shell, call test:test1(). This time Use the Next button, the Process->Next menu and the ctrl-n shortcut to quickly step over the execution of the four lines in the test1-function. The result printed in the shell should be: {\"peter\",[1,2,4,a,b,c],\"olin\"}").
diff --git a/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/lists1.erl b/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/lists1.erl
index c26ccfceda..32aabfcbb9 100644
--- a/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/lists1.erl
+++ b/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/lists1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/ordsets1.erl b/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/ordsets1.erl
index 63224fc493..bb7439aac0 100644
--- a/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/ordsets1.erl
+++ b/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/ordsets1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/test.erl b/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/test.erl
index d7af58e573..6c38fd011a 100644
--- a/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/test.erl
+++ b/lib/debugger/test/dbg_ui_SUITE_data/manual_data/src/test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/debugger_SUITE.erl b/lib/debugger/test/debugger_SUITE.erl
index 9207df38e4..c72f154928 100644
--- a/lib/debugger/test/debugger_SUITE.erl
+++ b/lib/debugger/test/debugger_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
%% Test break points.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
@@ -31,7 +31,9 @@
app_test/1,appup_test/1,erts_debug/1,encrypted_debug_info/1,
no_abstract_code/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[app_test, appup_test, erts_debug, no_abstract_code,
@@ -54,39 +56,37 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- Dog=test_server:timetrap(?t:minutes(0.5)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
app_test(Config) when is_list(Config) ->
- ?line ?t:app_test(debugger),
+ test_server:app_test(debugger),
ok.
appup_test(Config) when is_list(Config) ->
- ok = ?t:appup_test(debugger).
+ ok = test_server:appup_test(debugger).
erts_debug(Config) when is_list(Config) ->
c:l(erts_debug),
ok.
no_abstract_code(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Simple = filename:join(PrivDir, "simple"),
- ?line Source = Simple ++ ".erl",
- ?line BeamFile = Simple ++ ".beam",
- ?line simple_file(Source),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Simple = filename:join(PrivDir, "simple"),
+ Source = Simple ++ ".erl",
+ BeamFile = Simple ++ ".beam",
+ simple_file(Source),
%% Compile module without abstract code.
CompileFlags = [{outdir,PrivDir}],
- ?line {ok,_} = compile:file(Source, CompileFlags),
- ?line error = int:i(Simple),
+ {ok,_} = compile:file(Source, CompileFlags),
+ error = int:i(Simple),
%% Cleanup.
- ?line ok = file:delete(Source),
- ?line ok = file:delete(BeamFile),
+ ok = file:delete(Source),
+ ok = file:delete(BeamFile),
ok.
@@ -100,28 +100,28 @@ encrypted_debug_info(Config) when is_list(Config) ->
end.
encrypted_debug_info_1(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Simple = filename:join(PrivDir, "simple"),
- ?line Source = Simple ++ ".erl",
- ?line BeamFile = Simple ++ ".beam",
- ?line simple_file(Source),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Simple = filename:join(PrivDir, "simple"),
+ Source = Simple ++ ".erl",
+ BeamFile = Simple ++ ".beam",
+ simple_file(Source),
%% Compile module.
Key = "_This a Crypto Key_",
CompileFlags = [{outdir,PrivDir},debug_info,{debug_info_key,Key}],
- ?line {ok,_} = compile:file(Source, CompileFlags),
+ {ok,_} = compile:file(Source, CompileFlags),
%% Interpret module
- ?line ok = beam_lib:crypto_key_fun(simple_crypto_fun(Key)),
- ?line {module,simple} = int:i(Simple),
+ ok = beam_lib:crypto_key_fun(simple_crypto_fun(Key)),
+ {module,simple} = int:i(Simple),
%% Remove key.
- ?line {ok,_} = beam_lib:clear_crypto_key_fun(),
- ?line error = int:i(Simple),
+ {ok,_} = beam_lib:clear_crypto_key_fun(),
+ error = int:i(Simple),
%% Cleanup.
- ?line ok = file:delete(Source),
- ?line ok = file:delete(BeamFile),
+ ok = file:delete(Source),
+ ok = file:delete(BeamFile),
ok.
diff --git a/lib/debugger/test/debugger_test.erl b/lib/debugger/test/debugger_test.erl
index 9a5fb11b8c..d895f25db2 100644
--- a/lib/debugger/test/debugger_test.erl
+++ b/lib/debugger/test/debugger_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/erl_eval_SUITE.erl b/lib/debugger/test/erl_eval_SUITE.erl
index af9b0a6e6e..8907856583 100644
--- a/lib/debugger/test/erl_eval_SUITE.erl
+++ b/lib/debugger/test/erl_eval_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
-module(erl_eval_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
init_per_group/2,end_per_group/2]).
-export([guard_1/1, guard_2/1,
@@ -43,38 +44,23 @@
eval_expr_5/1,
eep37/1]).
-%%
-%% Define to run outside of test server
-%%
-%%-define(STANDALONE,1).
+-include_lib("common_test/include/ct.hrl").
-import(lists,[concat/1, sort/1]).
-export([count_down/2, count_down_fun/0, do_apply/2,
local_func/3, local_func_value/2]).
--ifdef(STANDALONE).
--define(config(A,B),config(A,B)).
--export([config/2]).
--define(line, noop, ).
-config(priv_dir,_) ->
- ".".
--else.
--include_lib("test_server/include/test_server.hrl").
--export([init_per_testcase/2, end_per_testcase/2]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
--endif.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[guard_1, guard_2, match_pattern, string_plusplus,
@@ -99,125 +85,101 @@ end_per_group(_GroupName, Config) ->
Config.
-guard_1(doc) ->
- ["(OTP-2405)"];
-guard_1(suite) ->
- [];
+%% (OTP-2405).
guard_1(Config) when is_list(Config) ->
- ?line {ok,Tokens ,_} =
+ {ok,Tokens ,_} =
erl_scan:string("if a+4 == 4 -> yes; true -> no end. "),
- ?line {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
- ?line no = guard_1_compiled(),
- ?line {value, no, []} = erl_eval:expr(Expr, []),
+ {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
+ no = guard_1_compiled(),
+ {value, no, []} = erl_eval:expr(Expr, []),
ok.
guard_1_compiled() ->
if a+4 == 4 -> yes; true -> no end.
-guard_2(doc) ->
- ["Similar to guard_1, but type-correct"];
-guard_2(suite) ->
- [];
+%% Similar to guard_1, but type-correct.
guard_2(Config) when is_list(Config) ->
- ?line {ok,Tokens ,_} =
+ {ok,Tokens ,_} =
erl_scan:string("if 6+4 == 4 -> yes; true -> no end. "),
- ?line {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
- ?line no = guard_2_compiled(),
- ?line {value, no, []} = erl_eval:expr(Expr, []),
+ {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
+ no = guard_2_compiled(),
+ {value, no, []} = erl_eval:expr(Expr, []),
ok.
guard_2_compiled() ->
if 6+4 == 4 -> yes; true -> no end.
-string_plusplus(doc) ->
- ["OTP-3069: syntactic sugar string ++ ..."];
-string_plusplus(suite) ->
- [];
+%% OTP-3069: syntactic sugar string ++ ...
string_plusplus(Config) when is_list(Config) ->
- ?line check(fun() -> case "abc" of "ab" ++ L -> L end end,
- "case \"abc\" of \"ab\" ++ L -> L end. ",
- "c"),
- ?line check(fun() -> case "abcde" of "ab" ++ "cd" ++ L -> L end end,
- "case \"abcde\" of \"ab\" ++ \"cd\" ++ L -> L end. ",
- "e"),
- ?line check(fun() -> case "abc" of [97, 98] ++ L -> L end end,
- "case \"abc\" of [97, 98] ++ L -> L end. ",
- "c"),
+ check(fun() -> case "abc" of "ab" ++ L -> L end end,
+ "case \"abc\" of \"ab\" ++ L -> L end. ",
+ "c"),
+ check(fun() -> case "abcde" of "ab" ++ "cd" ++ L -> L end end,
+ "case \"abcde\" of \"ab\" ++ \"cd\" ++ L -> L end. ",
+ "e"),
+ check(fun() -> case "abc" of [97, 98] ++ L -> L end end,
+ "case \"abc\" of [97, 98] ++ L -> L end. ",
+ "c"),
ok.
-match_pattern(doc) ->
- ["OTP-2983: match operator in pattern"];
-match_pattern(suite) ->
- [];
+%% OTP-2983: match operator in pattern.
match_pattern(Config) when is_list(Config) ->
- ?line check(fun() -> case {a, b} of {a, _X}=Y -> {x,Y} end end,
- "case {a, b} of {a, X}=Y -> {x,Y} end. ",
- {x, {a, b}}),
- ?line check(fun() -> case {a, b} of Y={a, _X} -> {x,Y} end end,
- "case {a, b} of Y={a, X} -> {x,Y} end. ",
- {x, {a, b}}),
- ?line check(fun() -> case {a, b} of Y={a, _X}=Z -> {Z,Y} end end,
- "case {a, b} of Y={a, X}=Z -> {Z,Y} end. ",
- {{a, b}, {a, b}}),
- ?line check(fun() -> A = 4, B = 28, <<13:(A+(X=B))>>, X end,
- "begin A = 4, B = 28, <<13:(A+(X=B))>>, X end.",
- 28),
+ check(fun() -> case {a, b} of {a, _X}=Y -> {x,Y} end end,
+ "case {a, b} of {a, X}=Y -> {x,Y} end. ",
+ {x, {a, b}}),
+ check(fun() -> case {a, b} of Y={a, _X} -> {x,Y} end end,
+ "case {a, b} of Y={a, X} -> {x,Y} end. ",
+ {x, {a, b}}),
+ check(fun() -> case {a, b} of Y={a, _X}=Z -> {Z,Y} end end,
+ "case {a, b} of Y={a, X}=Z -> {Z,Y} end. ",
+ {{a, b}, {a, b}}),
+ check(fun() -> A = 4, B = 28, <<13:(A+(X=B))>>, X end,
+ "begin A = 4, B = 28, <<13:(A+(X=B))>>, X end.",
+ 28),
ok.
-match_bin(doc) ->
- ["binary match problems"];
-match_bin(suite) ->
- [];
+%% binary match problems.
match_bin(Config) when is_list(Config) ->
- ?line check(fun() -> <<"abc">> = <<"abc">> end,
- "<<\"abc\">> = <<\"abc\">>. ",
- <<"abc">>),
- ?line check(fun() ->
- <<Size,B:Size/binary,Rest/binary>> = <<2,"AB","CD">>,
- {Size,B,Rest}
- end,
- "begin <<Size,B:Size/binary,Rest/binary>> = <<2,\"AB\",\"CD\">>, "
- "{Size,B,Rest} end. ",
- {2,<<"AB">>,<<"CD">>}),
+ check(fun() -> <<"abc">> = <<"abc">> end,
+ "<<\"abc\">> = <<\"abc\">>. ",
+ <<"abc">>),
+ check(fun() ->
+ <<Size,B:Size/binary,Rest/binary>> = <<2,"AB","CD">>,
+ {Size,B,Rest}
+ end,
+ "begin <<Size,B:Size/binary,Rest/binary>> = <<2,\"AB\",\"CD\">>, "
+ "{Size,B,Rest} end. ",
+ {2,<<"AB">>,<<"CD">>}),
ok.
-pattern_expr(doc) ->
- ["OTP-3144: compile-time expressions in pattern"];
-pattern_expr(suite) ->
- [];
+%% OTP-3144: compile-time expressions in pattern.
pattern_expr(Config) when is_list(Config) ->
- ?line check(fun() -> case 4 of 2+2 -> ok end end,
- "case 4 of 2+2 -> ok end. ",
- ok),
- ?line check(fun() -> case 2 of +2 -> ok end end,
- "case 2 of +2 -> ok end. ",
- ok),
+ check(fun() -> case 4 of 2+2 -> ok end end,
+ "case 4 of 2+2 -> ok end. ",
+ ok),
+ check(fun() -> case 2 of +2 -> ok end end,
+ "case 2 of +2 -> ok end. ",
+ ok),
ok.
-guard_3(doc) ->
- ["OTP-4518."];
-guard_3(suite) ->
- [];
+%% OTP-4518.
guard_3(Config) when is_list(Config) ->
- ?line check(fun() -> if false -> false; true -> true end end,
- "if false -> false; true -> true end.",
- true),
- ?line check(fun() -> if <<"hej">> == <<"hopp">> -> true;
- true -> false end end,
- "begin if <<\"hej\">> == <<\"hopp\">> -> true;
+ check(fun() -> if false -> false; true -> true end end,
+ "if false -> false; true -> true end.",
+ true),
+ check(fun() -> if <<"hej">> == <<"hopp">> -> true;
+ true -> false end end,
+ "begin if <<\"hej\">> == <<\"hopp\">> -> true;
true -> false end end.",
false),
- ?line check(fun() -> if <<"hej">> == <<"hej">> -> true;
- true -> false end end,
- "begin if <<\"hej\">> == <<\"hej\">> -> true;
+ check(fun() -> if <<"hej">> == <<"hej">> -> true;
+ true -> false end end,
+ "begin if <<\"hej\">> == <<\"hej\">> -> true;
true -> false end end.",
true),
ok.
-guard_4(doc) ->
- ["OTP-4885."];
-guard_4(suite) ->
- [];
+%% OTP-4885.
guard_4(Config) when is_list(Config) ->
check(fun() -> if erlang:'+'(3,a) -> true ; true -> false end end,
"if erlang:'+'(3,a) -> true ; true -> false end.",
@@ -226,315 +188,300 @@ guard_4(Config) when is_list(Config) ->
end,
"if erlang:is_integer(3) -> true ; true -> false end.",
true),
- ?line check(fun() -> [X || X <- [1,2,3], erlang:is_integer(X)] end,
- "[X || X <- [1,2,3], erlang:is_integer(X)].",
- [1,2,3]),
- ?line check(fun() -> if is_atom(is_integer(a)) -> true ; true -> false end
- end,
- "if is_atom(is_integer(a)) -> true ; true -> false end.",
- true),
+ check(fun() -> [X || X <- [1,2,3], erlang:is_integer(X)] end,
+ "[X || X <- [1,2,3], erlang:is_integer(X)].",
+ [1,2,3]),
+ check(fun() -> if is_atom(is_integer(a)) -> true ; true -> false end
+ end,
+ "if is_atom(is_integer(a)) -> true ; true -> false end.",
+ true),
check(fun() -> if erlang:is_atom(erlang:is_integer(a)) -> true;
true -> false end end,
"if erlang:is_atom(erlang:is_integer(a)) -> true; "
"true -> false end.",
true),
- ?line check(fun() -> if is_atom(3+a) -> true ; true -> false end end,
- "if is_atom(3+a) -> true ; true -> false end.",
- false),
- ?line check(fun() -> if erlang:is_atom(3+a) -> true ; true -> false end
- end,
- "if erlang:is_atom(3+a) -> true ; true -> false end.",
- false),
+ check(fun() -> if is_atom(3+a) -> true ; true -> false end end,
+ "if is_atom(3+a) -> true ; true -> false end.",
+ false),
+ check(fun() -> if erlang:is_atom(3+a) -> true ; true -> false end
+ end,
+ "if erlang:is_atom(3+a) -> true ; true -> false end.",
+ false),
ok.
-lc(doc) ->
- ["OTP-4518."];
-lc(suite) ->
- [];
+%% OTP-4518.
lc(Config) when is_list(Config) ->
- ?line check(fun() -> X = 32, [X || X <- [1,2,3]] end,
- "begin X = 32, [X || X <- [1,2,3]] end.",
- [1,2,3]),
- ?line check(fun() -> X = 32,
- [X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end,
- %% "binsize variable" ^
- "begin X = 32,
+ check(fun() -> X = 32, [X || X <- [1,2,3]] end,
+ "begin X = 32, [X || X <- [1,2,3]] end.",
+ [1,2,3]),
+ check(fun() -> X = 32,
+ [X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end,
+ %% "binsize variable" ^
+ "begin X = 32,
[X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end.",
[1,2]),
- ?line check(fun() -> Y = 13,[X || {X,Y} <- [{1,2}]] end,
- "begin Y = 13,[X || {X,Y} <- [{1,2}]] end.",
- [1]),
- ?line error_check("begin [A || X <- [{1,2}], 1 == A] end.",
- {unbound_var,'A'}),
- ?line error_check("begin X = 32,
+ check(fun() -> Y = 13,[X || {X,Y} <- [{1,2}]] end,
+ "begin Y = 13,[X || {X,Y} <- [{1,2}]] end.",
+ [1]),
+ error_check("begin [A || X <- [{1,2}], 1 == A] end.",
+ {unbound_var,'A'}),
+ error_check("begin X = 32,
[{Y,W} || X <- [1,2,32,Y=4], Z <- [1,2,W=3]] end.",
{unbound_var,'Y'}),
- ?line error_check("begin X = 32,<<A:B>> = <<100:X>> end.",
- {unbound_var,'B'}),
- ?line check(fun() -> [X || X <- [1,2,3,4], not (X < 2)] end,
- "begin [X || X <- [1,2,3,4], not (X < 2)] end.",
- [2,3,4]),
- ?line check(fun() -> [X || X <- [true,false], X] end,
- "[X || X <- [true,false], X].", [true]),
+ error_check("begin X = 32,<<A:B>> = <<100:X>> end.",
+ {unbound_var,'B'}),
+ check(fun() -> [X || X <- [1,2,3,4], not (X < 2)] end,
+ "begin [X || X <- [1,2,3,4], not (X < 2)] end.",
+ [2,3,4]),
+ check(fun() -> [X || X <- [true,false], X] end,
+ "[X || X <- [true,false], X].", [true]),
ok.
-simple_cases(doc) ->
- ["Simple cases, just to cover some code."];
-simple_cases(suite) ->
- [];
+%% Simple cases, just to cover some code.
simple_cases(Config) when is_list(Config) ->
- ?line check(fun() -> A = $C end, "A = $C.", $C),
- %% ?line check(fun() -> A = 3.14 end, "A = 3.14.", 3.14),
- ?line check(fun() -> self() ! a, A = receive a -> true end end,
- "begin self() ! a, A = receive a -> true end end.",
- true),
- ?line check(fun() -> c:flush(), self() ! a, self() ! b, self() ! c,
- receive b -> b end,
- {messages, [a,c]} =
- erlang:process_info(self(), messages),
- c:flush() end,
- "begin c:flush(), self() ! a, self() ! b, self() ! c,"
- "receive b -> b end,"
- "{messages, [a,c]} ="
- " erlang:process_info(self(), messages), c:flush() end.",
- ok),
- ?line check(fun() -> self() ! a, A = receive a -> true
- after 0 -> false end end,
- "begin self() ! a, A = receive a -> true"
- " after 0 -> false end end.",
- true),
- ?line check(fun() -> c:flush(), self() ! a, self() ! b, self() ! c,
- receive b -> b after 0 -> true end,
- {messages, [a,c]} =
- erlang:process_info(self(), messages),
- c:flush() end,
- "begin c:flush(), self() ! a, self() ! b, self() ! c,"
- "receive b -> b after 0 -> true end,"
- "{messages, [a,c]} ="
- " erlang:process_info(self(), messages), c:flush() end.",
- ok),
- ?line check(fun() -> receive _ -> true after 10 -> false end end,
- "receive _ -> true after 10 -> false end.",
- false),
- ?line check(fun() -> F = fun(A) -> A end, true = 3 == F(3) end,
- "begin F = fun(A) -> A end, true = 3 == F(3) end.",
- true),
- ?line check(fun() -> F = fun(A) -> A end, true = 3 == apply(F, [3]) end,
- "begin F = fun(A) -> A end, true = 3 == apply(F,[3]) end.",
- true),
- ?line check(fun() -> catch throw(a) end, "catch throw(a).", a),
- ?line check(fun() -> catch a end, "catch a.", a),
- ?line check(fun() -> 4 == 3 end, "4 == 3.", false),
- ?line check(fun() -> not true end, "not true.", false),
- ?line check(fun() -> -3 end, "-3.", -3),
-
- ?line error_check("3.0 = 4.0.", {badmatch,4.0}),
- ?line check(fun() -> <<(3.0+2.0):32/float>> = <<5.0:32/float>> end,
- "<<(3.0+2.0):32/float>> = <<5.0:32/float>>.",
- <<5.0:32/float>>),
-
- ?line check(fun() -> false andalso kludd end, "false andalso kludd.",
- false),
- ?line check(fun() -> true andalso true end, "true andalso true.",
- true),
- ?line check(fun() -> true andalso false end, "true andalso false.",
- false),
- ?line check(fun() -> true andalso kludd end, "true andalso kludd.",
- kludd),
- ?line error_check("kladd andalso kludd.", {badarg,kladd}),
-
- ?line check(fun() -> if false andalso kludd -> a; true -> b end end,
- "if false andalso kludd -> a; true -> b end.",
- b),
- ?line check(fun() -> if true andalso true -> a; true -> b end end,
- "if true andalso true -> a; true -> b end.",
- a),
- ?line check(fun() -> if true andalso false -> a; true -> b end end,
- "if true andalso false -> a; true -> b end.",
- b),
-
- ?line check(fun() -> true orelse kludd end,
- "true orelse kludd.", true),
- ?line check(fun() -> false orelse false end,
- "false orelse false.", false),
- ?line check(fun() -> false orelse true end,
- "false orelse true.", true),
- ?line check(fun() -> false orelse kludd end,
- "false orelse kludd.", kludd),
- ?line error_check("kladd orelse kludd.", {badarg,kladd}),
- ?line error_check("[X || X <- [1,2,3], begin 1 end].",{bad_filter,1}),
- ?line error_check("[X || X <- a].",{bad_generator,a}),
-
- ?line check(fun() -> if true orelse kludd -> a; true -> b end end,
- "if true orelse kludd -> a; true -> b end.", a),
- ?line check(fun() -> if false orelse false -> a; true -> b end end,
- "if false orelse false -> a; true -> b end.", b),
- ?line check(fun() -> if false orelse true -> a; true -> b end end,
- "if false orelse true -> a; true -> b end.", a),
-
- ?line check(fun() -> [X || X <- [1,2,3], X+2] end,
- "[X || X <- [1,2,3], X+2].", []),
-
- ?line check(fun() -> [X || X <- [1,2,3], [X] == [X || X <- [2]]] end,
- "[X || X <- [1,2,3], [X] == [X || X <- [2]]].",
- [2]),
- ?line check(fun() -> F = fun(1) -> ett; (2) -> zwei end,
- ett = F(1), zwei = F(2) end,
- "begin F = fun(1) -> ett; (2) -> zwei end,
+ check(fun() -> A = $C end, "A = $C.", $C),
+ %% check(fun() -> A = 3.14 end, "A = 3.14.", 3.14),
+ check(fun() -> self() ! a, A = receive a -> true end end,
+ "begin self() ! a, A = receive a -> true end end.",
+ true),
+ check(fun() -> c:flush(), self() ! a, self() ! b, self() ! c,
+ receive b -> b end,
+ {messages, [a,c]} =
+ erlang:process_info(self(), messages),
+ c:flush() end,
+ "begin c:flush(), self() ! a, self() ! b, self() ! c,"
+ "receive b -> b end,"
+ "{messages, [a,c]} ="
+ " erlang:process_info(self(), messages), c:flush() end.",
+ ok),
+ check(fun() -> self() ! a, A = receive a -> true
+ after 0 -> false end end,
+ "begin self() ! a, A = receive a -> true"
+ " after 0 -> false end end.",
+ true),
+ check(fun() -> c:flush(), self() ! a, self() ! b, self() ! c,
+ receive b -> b after 0 -> true end,
+ {messages, [a,c]} =
+ erlang:process_info(self(), messages),
+ c:flush() end,
+ "begin c:flush(), self() ! a, self() ! b, self() ! c,"
+ "receive b -> b after 0 -> true end,"
+ "{messages, [a,c]} ="
+ " erlang:process_info(self(), messages), c:flush() end.",
+ ok),
+ check(fun() -> receive _ -> true after 10 -> false end end,
+ "receive _ -> true after 10 -> false end.",
+ false),
+ check(fun() -> F = fun(A) -> A end, true = 3 == F(3) end,
+ "begin F = fun(A) -> A end, true = 3 == F(3) end.",
+ true),
+ check(fun() -> F = fun(A) -> A end, true = 3 == apply(F, [3]) end,
+ "begin F = fun(A) -> A end, true = 3 == apply(F,[3]) end.",
+ true),
+ check(fun() -> catch throw(a) end, "catch throw(a).", a),
+ check(fun() -> catch a end, "catch a.", a),
+ check(fun() -> 4 == 3 end, "4 == 3.", false),
+ check(fun() -> not true end, "not true.", false),
+ check(fun() -> -3 end, "-3.", -3),
+
+ error_check("3.0 = 4.0.", {badmatch,4.0}),
+ check(fun() -> <<(3.0+2.0):32/float>> = <<5.0:32/float>> end,
+ "<<(3.0+2.0):32/float>> = <<5.0:32/float>>.",
+ <<5.0:32/float>>),
+
+ check(fun() -> false andalso kludd end, "false andalso kludd.",
+ false),
+ check(fun() -> true andalso true end, "true andalso true.",
+ true),
+ check(fun() -> true andalso false end, "true andalso false.",
+ false),
+ check(fun() -> true andalso kludd end, "true andalso kludd.",
+ kludd),
+ error_check("kladd andalso kludd.", {badarg,kladd}),
+
+ check(fun() -> if false andalso kludd -> a; true -> b end end,
+ "if false andalso kludd -> a; true -> b end.",
+ b),
+ check(fun() -> if true andalso true -> a; true -> b end end,
+ "if true andalso true -> a; true -> b end.",
+ a),
+ check(fun() -> if true andalso false -> a; true -> b end end,
+ "if true andalso false -> a; true -> b end.",
+ b),
+
+ check(fun() -> true orelse kludd end,
+ "true orelse kludd.", true),
+ check(fun() -> false orelse false end,
+ "false orelse false.", false),
+ check(fun() -> false orelse true end,
+ "false orelse true.", true),
+ check(fun() -> false orelse kludd end,
+ "false orelse kludd.", kludd),
+ error_check("kladd orelse kludd.", {badarg,kladd}),
+ error_check("[X || X <- [1,2,3], begin 1 end].",{bad_filter,1}),
+ error_check("[X || X <- a].",{bad_generator,a}),
+
+ check(fun() -> if true orelse kludd -> a; true -> b end end,
+ "if true orelse kludd -> a; true -> b end.", a),
+ check(fun() -> if false orelse false -> a; true -> b end end,
+ "if false orelse false -> a; true -> b end.", b),
+ check(fun() -> if false orelse true -> a; true -> b end end,
+ "if false orelse true -> a; true -> b end.", a),
+
+ check(fun() -> [X || X <- [1,2,3], X+2] end,
+ "[X || X <- [1,2,3], X+2].", []),
+
+ check(fun() -> [X || X <- [1,2,3], [X] == [X || X <- [2]]] end,
+ "[X || X <- [1,2,3], [X] == [X || X <- [2]]].",
+ [2]),
+ check(fun() -> F = fun(1) -> ett; (2) -> zwei end,
+ ett = F(1), zwei = F(2) end,
+ "begin F = fun(1) -> ett; (2) -> zwei end,
ett = F(1), zwei = F(2) end.",
zwei),
- ?line check(fun() -> F = fun(X) when X == 1 -> ett;
- (X) when X == 2 -> zwei end,
- ett = F(1), zwei = F(2) end,
- "begin F = fun(X) when X == 1 -> ett;
+ check(fun() -> F = fun(X) when X == 1 -> ett;
+ (X) when X == 2 -> zwei end,
+ ett = F(1), zwei = F(2) end,
+ "begin F = fun(X) when X == 1 -> ett;
(X) when X == 2 -> zwei end,
- ett = F(1), zwei = F(2) end.",
+ ett = F(1), zwei = F(2) end.",
zwei),
- ?line error_check("begin F = fun(1) -> ett end, zwei = F(2) end.",
- function_clause),
- ?line check(fun() -> if length([1]) == 1 -> yes;
- true -> no end end,
- "if length([1]) == 1 -> yes;
+ error_check("begin F = fun(1) -> ett end, zwei = F(2) end.",
+ function_clause),
+ check(fun() -> if length([1]) == 1 -> yes;
+ true -> no end end,
+ "if length([1]) == 1 -> yes;
true -> no end.",
yes),
- ?line check(fun() -> if is_integer(3) -> true; true -> false end end,
- "if is_integer(3) -> true; true -> false end.", true),
- ?line check(fun() -> if integer(3) -> true; true -> false end end,
- "if integer(3) -> true; true -> false end.", true),
- ?line check(fun() -> if is_float(3) -> true; true -> false end end,
- "if is_float(3) -> true; true -> false end.", false),
- ?line check(fun() -> if float(3) -> true; true -> false end end,
- "if float(3) -> true; true -> false end.", false),
- ?line check(fun() -> if is_number(3) -> true; true -> false end end,
- "if is_number(3) -> true; true -> false end.", true),
- ?line check(fun() -> if number(3) -> true; true -> false end end,
- "if number(3) -> true; true -> false end.", true),
- ?line check(fun() -> if is_atom(a) -> true; true -> false end end,
- "if is_atom(a) -> true; true -> false end.", true),
- ?line check(fun() -> if atom(a) -> true; true -> false end end,
- "if atom(a) -> true; true -> false end.", true),
- ?line check(fun() -> if is_list([]) -> true; true -> false end end,
- "if is_list([]) -> true; true -> false end.", true),
- ?line check(fun() -> if list([]) -> true; true -> false end end,
- "if list([]) -> true; true -> false end.", true),
- ?line check(fun() -> if is_tuple({}) -> true; true -> false end end,
- "if is_tuple({}) -> true; true -> false end.", true),
- ?line check(fun() -> if tuple({}) -> true; true -> false end end,
- "if tuple({}) -> true; true -> false end.", true),
- ?line check(fun() -> if is_pid(self()) -> true; true -> false end end,
- "if is_pid(self()) -> true; true -> false end.", true),
- ?line check(fun() -> if pid(self()) -> true; true -> false end end,
- "if pid(self()) -> true; true -> false end.", true),
- ?line check(fun() -> R = make_ref(), if is_reference(R) -> true;
- true -> false end end,
- "begin R = make_ref(), if is_reference(R) -> true;"
- "true -> false end end.", true),
- ?line check(fun() -> R = make_ref(), if reference(R) -> true;
- true -> false end end,
- "begin R = make_ref(), if reference(R) -> true;"
- "true -> false end end.", true),
- ?line check(fun() -> if is_port(a) -> true; true -> false end end,
- "if is_port(a) -> true; true -> false end.", false),
- ?line check(fun() -> if port(a) -> true; true -> false end end,
- "if port(a) -> true; true -> false end.", false),
- ?line check(fun() -> if is_function(a) -> true; true -> false end end,
- "if is_function(a) -> true; true -> false end.", false),
- ?line check(fun() -> if function(a) -> true; true -> false end end,
- "if function(a) -> true; true -> false end.", false),
- ?line check(fun() -> if is_binary(<<>>) -> true; true -> false end end,
- "if is_binary(<<>>) -> true; true -> false end.", true),
- ?line check(fun() -> if binary(<<>>) -> true; true -> false end end,
- "if binary(<<>>) -> true; true -> false end.", true),
- ?line check(fun() -> if is_integer(a) == true -> yes;
- true -> no end end,
- "if is_integer(a) == true -> yes;
+ check(fun() -> if is_integer(3) -> true; true -> false end end,
+ "if is_integer(3) -> true; true -> false end.", true),
+ check(fun() -> if integer(3) -> true; true -> false end end,
+ "if integer(3) -> true; true -> false end.", true),
+ check(fun() -> if is_float(3) -> true; true -> false end end,
+ "if is_float(3) -> true; true -> false end.", false),
+ check(fun() -> if float(3) -> true; true -> false end end,
+ "if float(3) -> true; true -> false end.", false),
+ check(fun() -> if is_number(3) -> true; true -> false end end,
+ "if is_number(3) -> true; true -> false end.", true),
+ check(fun() -> if number(3) -> true; true -> false end end,
+ "if number(3) -> true; true -> false end.", true),
+ check(fun() -> if is_atom(a) -> true; true -> false end end,
+ "if is_atom(a) -> true; true -> false end.", true),
+ check(fun() -> if atom(a) -> true; true -> false end end,
+ "if atom(a) -> true; true -> false end.", true),
+ check(fun() -> if is_list([]) -> true; true -> false end end,
+ "if is_list([]) -> true; true -> false end.", true),
+ check(fun() -> if list([]) -> true; true -> false end end,
+ "if list([]) -> true; true -> false end.", true),
+ check(fun() -> if is_tuple({}) -> true; true -> false end end,
+ "if is_tuple({}) -> true; true -> false end.", true),
+ check(fun() -> if tuple({}) -> true; true -> false end end,
+ "if tuple({}) -> true; true -> false end.", true),
+ check(fun() -> if is_pid(self()) -> true; true -> false end end,
+ "if is_pid(self()) -> true; true -> false end.", true),
+ check(fun() -> if pid(self()) -> true; true -> false end end,
+ "if pid(self()) -> true; true -> false end.", true),
+ check(fun() -> R = make_ref(), if is_reference(R) -> true;
+ true -> false end end,
+ "begin R = make_ref(), if is_reference(R) -> true;"
+ "true -> false end end.", true),
+ check(fun() -> R = make_ref(), if reference(R) -> true;
+ true -> false end end,
+ "begin R = make_ref(), if reference(R) -> true;"
+ "true -> false end end.", true),
+ check(fun() -> if is_port(a) -> true; true -> false end end,
+ "if is_port(a) -> true; true -> false end.", false),
+ check(fun() -> if port(a) -> true; true -> false end end,
+ "if port(a) -> true; true -> false end.", false),
+ check(fun() -> if is_function(a) -> true; true -> false end end,
+ "if is_function(a) -> true; true -> false end.", false),
+ check(fun() -> if function(a) -> true; true -> false end end,
+ "if function(a) -> true; true -> false end.", false),
+ check(fun() -> if is_binary(<<>>) -> true; true -> false end end,
+ "if is_binary(<<>>) -> true; true -> false end.", true),
+ check(fun() -> if binary(<<>>) -> true; true -> false end end,
+ "if binary(<<>>) -> true; true -> false end.", true),
+ check(fun() -> if is_integer(a) == true -> yes;
+ true -> no end end,
+ "if is_integer(a) == true -> yes;
true -> no end.",
no),
- ?line check(fun() -> if [] -> true; true -> false end end,
- "if [] -> true; true -> false end.", false),
- ?line error_check("if lists:member(1,[1]) -> true; true -> false end.",
- illegal_guard_expr),
- ?line error_check("if false -> true end.", if_clause),
- ?line check(fun() -> if a+b -> true; true -> false end end,
- "if a + b -> true; true -> false end.", false),
- ?line check(fun() -> if + b -> true; true -> false end end,
- "if + b -> true; true -> false end.", false),
- ?line error_check("case foo of bar -> true end.", {case_clause,foo}),
- ?line error_check("case 4 of 2+a -> true; _ -> false end.",
- illegal_pattern),
- ?line error_check("case 4 of +a -> true; _ -> false end.",
- illegal_pattern),
- ?line check(fun() -> case a of
- X when X == b -> one;
- X when X == a -> two
- end end,
- "begin case a of
+ check(fun() -> if [] -> true; true -> false end end,
+ "if [] -> true; true -> false end.", false),
+ error_check("if lists:member(1,[1]) -> true; true -> false end.",
+ illegal_guard_expr),
+ error_check("if false -> true end.", if_clause),
+ check(fun() -> if a+b -> true; true -> false end end,
+ "if a + b -> true; true -> false end.", false),
+ check(fun() -> if + b -> true; true -> false end end,
+ "if + b -> true; true -> false end.", false),
+ error_check("case foo of bar -> true end.", {case_clause,foo}),
+ error_check("case 4 of 2+a -> true; _ -> false end.",
+ illegal_pattern),
+ error_check("case 4 of +a -> true; _ -> false end.",
+ illegal_pattern),
+ check(fun() -> case a of
+ X when X == b -> one;
+ X when X == a -> two
+ end end,
+ "begin case a of
X when X == b -> one;
- X when X == a -> two
- end end.", two),
- ?line error_check("3 = 4.", {badmatch,4}),
- ?line error_check("a = 3.", {badmatch,3}),
- %% ?line error_check("3.1 = 2.7.",{badmatch,2.7}),
- ?line error_check("$c = 4.", {badmatch,4}),
- ?line check(fun() -> $c = $c end, "$c = $c.", $c),
- ?line check(fun() -> _ = bar end, "_ = bar.", bar),
- ?line check(fun() -> A = 14, A = 14 end,
+ X when X == a -> two
+ end end.", two),
+ error_check("3 = 4.", {badmatch,4}),
+ error_check("a = 3.", {badmatch,3}),
+ %% error_check("3.1 = 2.7.",{badmatch,2.7}),
+ error_check("$c = 4.", {badmatch,4}),
+ check(fun() -> $c = $c end, "$c = $c.", $c),
+ check(fun() -> _ = bar end, "_ = bar.", bar),
+ check(fun() -> A = 14, A = 14 end,
"begin A = 14, A = 14 end.", 14),
- ?line error_check("begin A = 14, A = 16 end.", {badmatch,16}),
- ?line error_check("\"hej\" = \"san\".", {badmatch,"san"}),
- ?line check(fun() -> "hej" = "hej" end,
+ error_check("begin A = 14, A = 16 end.", {badmatch,16}),
+ error_check("\"hej\" = \"san\".", {badmatch,"san"}),
+ check(fun() -> "hej" = "hej" end,
"\"hej\" = \"hej\".", "hej"),
- ?line error_check("[] = [a].", {badmatch,[a]}),
- ?line check(fun() -> [] = [] end, "[] = [].", []),
- ?line error_check("[a] = [].", {badmatch,[]}),
- ?line error_check("{a,b} = 34.", {badmatch,34}),
- ?line check(fun() -> <<X:7>> = <<8:7>>, X end,
+ error_check("[] = [a].", {badmatch,[a]}),
+ check(fun() -> [] = [] end, "[] = [].", []),
+ error_check("[a] = [].", {badmatch,[]}),
+ error_check("{a,b} = 34.", {badmatch,34}),
+ check(fun() -> <<X:7>> = <<8:7>>, X end,
"begin <<X:7>> = <<8:7>>, X end.", 8),
- ?line error_check("<<34:32>> = \"hej\".", {badmatch,"hej"}),
- ?line check(fun() -> trunc((1 * 3 div 3 + 4 - 3) / 1) rem 2 end,
+ error_check("<<34:32>> = \"hej\".", {badmatch,"hej"}),
+ check(fun() -> trunc((1 * 3 div 3 + 4 - 3) / 1) rem 2 end,
"begin trunc((1 * 3 div 3 + 4 - 3) / 1) rem 2 end.", 0),
- ?line check(fun() -> (2#101 band 2#10101) bor (2#110 bxor 2#010) end,
+ check(fun() -> (2#101 band 2#10101) bor (2#110 bxor 2#010) end,
"(2#101 band 2#10101) bor (2#110 bxor 2#010).", 5),
- ?line check(fun() -> (2#1 bsl 4) + (2#10000 bsr 3) end,
+ check(fun() -> (2#1 bsl 4) + (2#10000 bsr 3) end,
"(2#1 bsl 4) + (2#10000 bsr 3).", 18),
- ?line check(fun() -> ((1<3) and ((1 =:= 2) or (1 =/= 2))) xor (1=<2) end,
+ check(fun() -> ((1<3) and ((1 =:= 2) or (1 =/= 2))) xor (1=<2) end,
"((1<3) and ((1 =:= 2) or (1 =/= 2))) xor (1=<2).", false),
- ?line check(fun() -> (a /= b) or (2 > 4) or (3 >= 3) end,
+ check(fun() -> (a /= b) or (2 > 4) or (3 >= 3) end,
"(a /= b) or (2 > 4) or (3 >= 3).", true),
- ?line check(fun() -> "hej" ++ "san" =/= "hejsan" -- "san" end,
+ check(fun() -> "hej" ++ "san" =/= "hejsan" -- "san" end,
"\"hej\" ++ \"san\" =/= \"hejsan\" -- \"san\".", true),
- ?line check(fun() -> (bnot 1) < -0 end, "(bnot (+1)) < -0.", true),
- ok.
+ check(fun() -> (bnot 1) < -0 end, "(bnot (+1)) < -0.", true),
+ ok.
-unary_plus(doc) ->
- ["OTP-4929. Unary plus rejects non-numbers."];
-unary_plus(suite) ->
- [];
+%% OTP-4929. Unary plus rejects non-numbers.
unary_plus(Config) when is_list(Config) ->
- ?line check(fun() -> F = fun(X) -> + X end,
- true = -1 == F(-1) end,
- "begin F = fun(X) -> + X end,"
- " true = -1 == F(-1) end.", true, ['F'], none, none),
- ?line error_check("+a.", badarith),
+ check(fun() -> F = fun(X) -> + X end,
+ true = -1 == F(-1) end,
+ "begin F = fun(X) -> + X end,"
+ " true = -1 == F(-1) end.", true, ['F'], none, none),
+ error_check("+a.", badarith),
ok.
-apply_atom(doc) ->
- ["OTP-5064. Can no longer apply atoms."];
-apply_atom(suite) ->
- [];
+%% OTP-5064. Can no longer apply atoms.
apply_atom(Config) when is_list(Config) ->
- ?line error_check("[X || X <- [[1],[2]],
+ error_check("[X || X <- [[1],[2]],
begin L = length, L(X) =:= 1 end].",
{badfun,length}),
ok.
-otp_5269(doc) ->
- ["OTP-5269. Bugs in the bit syntax."];
-otp_5269(suite) ->
- [];
+%% OTP-5269. Bugs in the bit syntax.
otp_5269(Config) when is_list(Config) ->
- ?line check(fun() -> L = 8,
+ check(fun() -> L = 8,
F = fun(<<A:L,B:A>>) -> B end,
F(<<16:8, 7:16>>)
end,
@@ -542,7 +489,7 @@ otp_5269(Config) when is_list(Config) ->
L = 8, F = fun(<<A:L,B:A>>) -> B end, F(<<16:8, 7:16>>)
end.",
7),
- ?line check(fun() -> L = 8,
+ check(fun() -> L = 8,
F = fun(<<L:L,B:L>>) -> B end,
F(<<16:8, 7:16>>)
end,
@@ -550,24 +497,24 @@ otp_5269(Config) when is_list(Config) ->
L = 8, F = fun(<<L:L,B:L>>) -> B end, F(<<16:8, 7:16>>)
end.",
7),
- ?line check(fun() -> L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end,
+ check(fun() -> L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end,
"begin L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end.",
7),
- ?line error_check("begin L = 8, <<L:L,B:L>> = <<16:8, 7:16>> end.",
+ error_check("begin L = 8, <<L:L,B:L>> = <<16:8, 7:16>> end.",
{badmatch,<<16:8,7:16>>}),
- ?line error_check("begin <<L:16,L:L>> = <<16:16,8:16>>, L end.",
+ error_check("begin <<L:16,L:L>> = <<16:16,8:16>>, L end.",
{badmatch, <<16:16,8:16>>}),
- ?line check(fun() -> U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end,
+ check(fun() -> U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end,
"begin U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end.",
32),
- ?line check(fun() -> U = 8, [U || <<U:U>> <- [<<32:8>>]] end,
+ check(fun() -> U = 8, [U || <<U:U>> <- [<<32:8>>]] end,
"begin U = 8, [U || <<U:U>> <- [<<32:8>>]] end.",
[32]),
- ?line error_check("(fun({3,<<A:32,A:32>>}) -> a end)
+ error_check("(fun({3,<<A:32,A:32>>}) -> a end)
({3,<<17:32,19:32>>}).",
function_clause),
- ?line check(fun() -> [X || <<A:8,
+ check(fun() -> [X || <<A:8,
B:A>> <- [<<16:8,19:16>>],
<<X:8>> <- [<<B:8>>]] end,
"[X || <<A:8,
@@ -576,12 +523,9 @@ otp_5269(Config) when is_list(Config) ->
[19]),
ok.
-otp_6539(doc) ->
- ["OTP-6539. try/catch bugs."];
-otp_6539(suite) ->
- [];
+%% OTP-6539. try/catch bugs.
otp_6539(Config) when is_list(Config) ->
- ?line check(fun() ->
+ check(fun() ->
F = fun(A,B) ->
try A+B
catch _:_ -> dontthinkso
@@ -600,152 +544,149 @@ otp_6539(Config) when is_list(Config) ->
[3, 5]),
ok.
-otp_6543(doc) ->
- ["OTP-6543. bitlevel binaries."];
-otp_6543(suite) ->
- [];
+%% OTP-6543. bitlevel binaries.
otp_6543(Config) when is_list(Config) ->
- ?line check(fun() ->
+ check(fun() ->
<< <<X>> || <<X>> <- [1,2,3] >>
end,
"<< <<X>> || <<X>> <- [1,2,3] >>.",
<<>>),
- ?line check(fun() ->
+ check(fun() ->
<< <<X>> || X <- [1,2,3] >>
end,
"<< <<X>> || X <- [1,2,3] >>.",
<<1,2,3>>),
- ?line check(fun() ->
+ check(fun() ->
<< <<X:8>> || <<X:2>> <= <<"hej">> >>
end,
"<< <<X:8>> || <<X:2>> <= <<\"hej\">> >>.",
<<1,2,2,0,1,2,1,1,1,2,2,2>>),
- ?line check(fun() ->
+ check(fun() ->
<< <<X:8>> ||
<<65,X:4>> <= <<65,7:4,65,3:4,66,8:4>> >>
end,
"<< <<X:8>> ||
<<65,X:4>> <= <<65,7:4,65,3:4,66,8:4>> >>.",
<<7,3>>),
- ?line check(fun() -> <<34:18/big>> end,
+ check(fun() -> <<34:18/big>> end,
"<<34:18/big>>.",
<<0,8,2:2>>),
- ?line check(fun() -> <<34:18/big-unit:2>> end,
+ check(fun() -> <<34:18/big-unit:2>> end,
"<<34:18/big-unit:2>>.",
<<0,0,0,2,2:4>>),
- ?line check(fun() -> <<34:18/little>> end,
+ check(fun() -> <<34:18/little>> end,
"<<34:18/little>>.",
<<34,0,0:2>>),
- ?line case eval_string("<<34:18/native>>.") of
+ case eval_string("<<34:18/native>>.") of
<<0,8,2:2>> -> ok;
<<34,0,0:2>> -> ok
end,
- ?line check(fun() -> <<34:18/big-signed>> end,
+ check(fun() -> <<34:18/big-signed>> end,
"<<34:18/big-signed>>.",
<<0,8,2:2>>),
- ?line check(fun() -> <<34:18/little-signed>> end,
+ check(fun() -> <<34:18/little-signed>> end,
"<<34:18/little-signed>>.",
<<34,0,0:2>>),
- ?line case eval_string("<<34:18/native-signed>>.") of
+ case eval_string("<<34:18/native-signed>>.") of
<<0,8,2:2>> -> ok;
<<34,0,0:2>> -> ok
end,
- ?line check(fun() -> <<34:18/big-unsigned>> end,
+ check(fun() -> <<34:18/big-unsigned>> end,
"<<34:18/big-unsigned>>.",
<<0,8,2:2>>),
- ?line check(fun() -> <<34:18/little-unsigned>> end,
+ check(fun() -> <<34:18/little-unsigned>> end,
"<<34:18/little-unsigned>>.",
<<34,0,0:2>>),
- ?line case eval_string("<<34:18/native-unsigned>>.") of
+ case eval_string("<<34:18/native-unsigned>>.") of
<<0,8,2:2>> -> ok;
<<34,0,0:2>> -> ok
end,
- ?line check(fun() -> <<3.14:32/float-big>> end,
+ check(fun() -> <<3.14:32/float-big>> end,
"<<3.14:32/float-big>>.",
<<64,72,245,195>>),
- ?line check(fun() -> <<3.14:32/float-little>> end,
+ check(fun() -> <<3.14:32/float-little>> end,
"<<3.14:32/float-little>>.",
<<195,245,72,64>>),
- ?line case eval_string("<<3.14:32/float-native>>.") of
+ case eval_string("<<3.14:32/float-native>>.") of
<<64,72,245,195>> -> ok;
<<195,245,72,64>> -> ok
end,
- ?line error_check("<<(<<17,3:2>>)/binary>>.", badarg),
- ?line check(fun() -> <<(<<17,3:2>>)/bitstring>> end,
+ error_check("<<(<<17,3:2>>)/binary>>.", badarg),
+ check(fun() -> <<(<<17,3:2>>)/bitstring>> end,
"<<(<<17,3:2>>)/bitstring>>.",
<<17,3:2>>),
- ?line check(fun() -> <<(<<17,3:2>>):10/bitstring>> end,
+ check(fun() -> <<(<<17,3:2>>):10/bitstring>> end,
"<<(<<17,3:2>>):10/bitstring>>.",
<<17,3:2>>),
- ?line check(fun() -> <<<<344:17>>/binary-unit:17>> end,
+ check(fun() -> <<<<344:17>>/binary-unit:17>> end,
"<<<<344:17>>/binary-unit:17>>.",
<<344:17>>),
- ?line check(fun() -> <<X:18/big>> = <<34:18/big>>, X end,
+ check(fun() -> <<X:18/big>> = <<34:18/big>>, X end,
"begin <<X:18/big>> = <<34:18/big>>, X end.",
34),
- ?line check(fun() -> <<X:18/big-unit:2>> = <<34:18/big-unit:2>>, X end,
+ check(fun() -> <<X:18/big-unit:2>> = <<34:18/big-unit:2>>, X end,
"begin <<X:18/big-unit:2>> = <<34:18/big-unit:2>>, X end.",
34),
- ?line check(fun() -> <<X:18/little>> = <<34:18/little>>, X end,
+ check(fun() -> <<X:18/little>> = <<34:18/little>>, X end,
"begin <<X:18/little>> = <<34:18/little>>, X end.",
34),
- ?line check(fun() -> <<X:18/native>> = <<34:18/native>>, X end,
+ check(fun() -> <<X:18/native>> = <<34:18/native>>, X end,
"begin <<X:18/native>> = <<34:18/native>>, X end.",
34),
- ?line check(fun() -> <<X:18/big-signed>> = <<34:18/big-signed>>, X end,
+ check(fun() -> <<X:18/big-signed>> = <<34:18/big-signed>>, X end,
"begin <<X:18/big-signed>> = <<34:18/big-signed>>, X end.",
34),
- ?line check(fun() -> <<X:18/little-signed>> = <<34:18/little-signed>>,
+ check(fun() -> <<X:18/little-signed>> = <<34:18/little-signed>>,
X end,
"begin <<X:18/little-signed>> = <<34:18/little-signed>>,
X end.",
34),
- ?line check(fun() -> <<X:18/native-signed>> = <<34:18/native-signed>>,
+ check(fun() -> <<X:18/native-signed>> = <<34:18/native-signed>>,
X end,
"begin <<X:18/native-signed>> = <<34:18/native-signed>>,
X end.",
34),
- ?line check(fun() -> <<X:18/big-unsigned>> = <<34:18/big-unsigned>>,
+ check(fun() -> <<X:18/big-unsigned>> = <<34:18/big-unsigned>>,
X end,
"begin <<X:18/big-unsigned>> = <<34:18/big-unsigned>>,
X end.",
34),
- ?line check(fun() ->
+ check(fun() ->
<<X:18/little-unsigned>> = <<34:18/little-unsigned>>,
X end,
"begin <<X:18/little-unsigned>> = <<34:18/little-unsigned>>,
X end.",
34),
- ?line check(fun() ->
+ check(fun() ->
<<X:18/native-unsigned>> = <<34:18/native-unsigned>>,
X end,
"begin <<X:18/native-unsigned>> = <<34:18/native-unsigned>>,
X end.",
34),
- ?line check(fun() -> <<X:32/float-big>> = <<2.0:32/float-big>>, X end,
+ check(fun() -> <<X:32/float-big>> = <<2.0:32/float-big>>, X end,
"begin <<X:32/float-big>> = <<2.0:32/float-big>>,
X end.",
2.0),
- ?line check(fun() -> <<X:32/float-little>> = <<2.0:32/float-little>>,
+ check(fun() -> <<X:32/float-little>> = <<2.0:32/float-little>>,
X end,
"begin <<X:32/float-little>> = <<2.0:32/float-little>>,
X end.",
2.0),
- ?line check(fun() -> <<X:32/float-native>> = <<2.0:32/float-native>>,
+ check(fun() -> <<X:32/float-native>> = <<2.0:32/float-native>>,
X end,
"begin <<X:32/float-native>> = <<2.0:32/float-native>>,
X end.",
2.0),
- ?line check(
+ check(
fun() ->
[X || <<"hej",X:8>> <= <<"hej",8,"san",9,"hej",17,"hej">>]
end,
"[X || <<\"hej\",X:8>> <=
<<\"hej\",8,\"san\",9,\"hej\",17,\"hej\">>].",
[8,17]),
- ?line check(
+ check(
fun() ->
L = 8, << <<B:32>> || <<L:L,B:L>> <= <<16:8, 7:16>> >>
end,
@@ -754,41 +695,41 @@ otp_6543(Config) when is_list(Config) ->
<<0,0,0,7>>),
%% Test the Value part of a binary segment.
%% "Old" bugs have been fixed (partial_eval is called on Value).
- ?line check(fun() -> [ 3 || <<17/float>> <= <<17.0/float>>] end,
+ check(fun() -> [ 3 || <<17/float>> <= <<17.0/float>>] end,
"[ 3 || <<17/float>> <= <<17.0/float>>].",
[3]),
- ?line check(fun() -> [ 3 || <<17/float>> <- [<<17.0/float>>]] end,
+ check(fun() -> [ 3 || <<17/float>> <- [<<17.0/float>>]] end,
"[ 3 || <<17/float>> <- [<<17.0/float>>]].",
[3]),
- ?line check(fun() -> [ X || <<17/float,X:3>> <= <<17.0/float,2:3>>] end,
+ check(fun() -> [ X || <<17/float,X:3>> <= <<17.0/float,2:3>>] end,
"[ X || <<17/float,X:3>> <= <<17.0/float,2:3>>].",
[2]),
- ?line check(fun() ->
+ check(fun() ->
[ foo || <<(1 bsl 1023)/float>> <= <<(1 bsl 1023)/float>>]
end,
"[ foo || <<(1 bsl 1023)/float>> <= <<(1 bsl 1023)/float>>].",
[foo]),
- ?line check(fun() ->
+ check(fun() ->
[ foo || <<(1 bsl 1023)/float>> <- [<<(1 bsl 1023)/float>>]]
end,
"[ foo || <<(1 bsl 1023)/float>> <- [<<(1 bsl 1023)/float>>]].",
[foo]),
- ?line error_check("[ foo || <<(1 bsl 1024)/float>> <-
+ error_check("[ foo || <<(1 bsl 1024)/float>> <-
[<<(1 bsl 1024)/float>>]].",
badarg),
- ?line check(fun() ->
+ check(fun() ->
[ foo || <<(1 bsl 1024)/float>> <- [<<(1 bsl 1023)/float>>]]
end,
"[ foo || <<(1 bsl 1024)/float>> <-
[<<(1 bsl 1023)/float>>]].",
[]),
- ?line check(fun() ->
+ check(fun() ->
[ foo || <<(1 bsl 1024)/float>> <= <<(1 bsl 1023)/float>>]
end,
"[ foo || <<(1 bsl 1024)/float>> <=
<<(1 bsl 1023)/float>>].",
[]),
- ?line check(fun() ->
+ check(fun() ->
L = 8,
[{L,B} || <<L:L,B:L/float>> <= <<32:8,7:32/float>>]
end,
@@ -796,7 +737,7 @@ otp_6543(Config) when is_list(Config) ->
[{L,B} || <<L:L,B:L/float>> <= <<32:8,7:32/float>>]
end.",
[{32,7.0}]),
- ?line check(fun() ->
+ check(fun() ->
L = 8,
[{L,B} || <<L:L,B:L/float>> <- [<<32:8,7:32/float>>]]
end,
@@ -804,127 +745,117 @@ otp_6543(Config) when is_list(Config) ->
[{L,B} || <<L:L,B:L/float>> <- [<<32:8,7:32/float>>]]
end.",
[{32,7.0}]),
- ?line check(fun() ->
+ check(fun() ->
[foo || <<"s">> <= <<"st">>]
end,
"[foo || <<\"s\">> <= <<\"st\">>].",
[foo]),
- ?line check(fun() -> <<_:32>> = <<17:32>> end,
+ check(fun() -> <<_:32>> = <<17:32>> end,
"<<_:32>> = <<17:32>>.",
<<17:32>>),
- ?line check(fun() -> [foo || <<_:32>> <= <<17:32,20:32>>] end,
+ check(fun() -> [foo || <<_:32>> <= <<17:32,20:32>>] end,
"[foo || <<_:32>> <= <<17:32,20:32>>].",
[foo,foo]),
- ?line check(fun() -> << <<X:32>> || X <- [1,2,3], X > 1 >> end,
+ check(fun() -> << <<X:32>> || X <- [1,2,3], X > 1 >> end,
"<< <<X:32>> || X <- [1,2,3], X > 1 >>.",
<<0,0,0,2,0,0,0,3>>),
- ?line error_check("[X || <<X>> <= [a,b]].",{bad_generator,[a,b]}),
+ error_check("[X || <<X>> <= [a,b]].",{bad_generator,[a,b]}),
ok.
-otp_6787(doc) ->
- ["OTP-6787. bitlevel binaries."];
-otp_6787(suite) ->
- [];
+%% OTP-6787. bitlevel binaries.
otp_6787(Config) when is_list(Config) ->
- ?line check(
+ check(
fun() -> <<16:(1024*1024)>> = <<16:(1024*1024)>> end,
"<<16:(1024*1024)>> = <<16:(1024*1024)>>.",
<<16:1048576>>),
ok.
-otp_6977(doc) ->
- ["OTP-6977. ++ bug."];
-otp_6977(suite) ->
- [];
+%% OTP-6977. ++ bug.
otp_6977(Config) when is_list(Config) ->
- ?line check(
+ check(
fun() -> (fun([$X] ++ _) -> ok end)("X") end,
"(fun([$X] ++ _) -> ok end)(\"X\").",
ok),
ok.
-otp_7550(doc) ->
- ["OTP-7550. Support for UTF-8, UTF-16, UTF-32."];
+%% OTP-7550. Support for UTF-8, UTF-16, UTF-32.
otp_7550(Config) when is_list(Config) ->
%% UTF-8.
- ?line check(
+ check(
fun() -> <<65>> = <<65/utf8>> end,
"<<65>> = <<65/utf8>>.",
<<65>>),
- ?line check(
+ check(
fun() -> <<350/utf8>> = <<197,158>> end,
"<<350/utf8>> = <<197,158>>.",
<<197,158>>),
- ?line check(
+ check(
fun() -> <<$b,$j,$\303,$\266,$r,$n>> = <<"bj\366rn"/utf8>> end,
"<<$b,$j,$\303,$\266,$r,$n>> = <<\"bj\366rn\"/utf8>>.",
<<$b,$j,$\303,$\266,$r,$n>>),
%% UTF-16.
- ?line check(
+ check(
fun() -> <<0,65>> = <<65/utf16>> end,
"<<0,65>> = <<65/utf16>>.",
<<0,65>>),
- ?line check(
+ check(
fun() -> <<16#D8,16#08,16#DF,16#45>> = <<16#12345/utf16>> end,
"<<16#D8,16#08,16#DF,16#45>> = <<16#12345/utf16>>.",
<<16#D8,16#08,16#DF,16#45>>),
- ?line check(
+ check(
fun() -> <<16#08,16#D8,16#45,16#DF>> = <<16#12345/little-utf16>> end,
"<<16#08,16#D8,16#45,16#DF>> = <<16#12345/little-utf16>>.",
<<16#08,16#D8,16#45,16#DF>>),
- ?line check(
+ check(
fun() -> <<350/utf16>> = <<1,94>> end,
"<<350/utf16>> = <<1,94>>.",
<<1,94>>),
- ?line check(
+ check(
fun() -> <<350/little-utf16>> = <<94,1>> end,
"<<350/little-utf16>> = <<94,1>>.",
<<94,1>>),
- ?line check(
+ check(
fun() -> <<16#12345/utf16>> = <<16#D8,16#08,16#DF,16#45>> end,
"<<16#12345/utf16>> = <<16#D8,16#08,16#DF,16#45>>.",
<<16#D8,16#08,16#DF,16#45>>),
- ?line check(
+ check(
fun() -> <<16#12345/little-utf16>> = <<16#08,16#D8,16#45,16#DF>> end,
"<<16#12345/little-utf16>> = <<16#08,16#D8,16#45,16#DF>>.",
<<16#08,16#D8,16#45,16#DF>>),
%% UTF-32.
- ?line check(
+ check(
fun() -> <<16#12345/utf32>> = <<16#0,16#01,16#23,16#45>> end,
"<<16#12345/utf32>> = <<16#0,16#01,16#23,16#45>>.",
<<16#0,16#01,16#23,16#45>>),
- ?line check(
+ check(
fun() -> <<16#0,16#01,16#23,16#45>> = <<16#12345/utf32>> end,
"<<16#0,16#01,16#23,16#45>> = <<16#12345/utf32>>.",
<<16#0,16#01,16#23,16#45>>),
- ?line check(
+ check(
fun() -> <<16#12345/little-utf32>> = <<16#45,16#23,16#01,16#00>> end,
"<<16#12345/little-utf32>> = <<16#45,16#23,16#01,16#00>>.",
<<16#45,16#23,16#01,16#00>>),
- ?line check(
+ check(
fun() -> <<16#12345/little-utf32>> end,
"<<16#12345/little-utf32>>.",
<<16#45,16#23,16#01,16#00>>),
%% Mixed.
- ?line check(
+ check(
fun() -> <<16#41,16#12345/utf32,16#0391:16,16#2E:8>> end,
"<<16#41,16#12345/utf32,16#0391:16,16#2E:8>>.",
<<16#41,16#00,16#01,16#23,16#45,16#03,16#91,16#2E>>),
ok.
-otp_8133(doc) ->
- ["OTP-8133. Bit comprehension bug."];
-otp_8133(suite) ->
- [];
+%% OTP-8133. Bit comprehension bug.
otp_8133(Config) when is_list(Config) ->
- ?line check(
+ check(
fun() ->
E = fun(N) ->
if
@@ -947,7 +878,7 @@ otp_8133(Config) when is_list(Config) ->
end
end.",
ok),
- ?line check(
+ check(
fun() ->
E = fun(N) ->
if
@@ -972,44 +903,41 @@ otp_8133(Config) when is_list(Config) ->
ok),
ok.
-funs(doc) ->
- ["Simple cases, just to cover some code."];
-funs(suite) ->
- [];
+%% Simple cases, just to cover some code.
funs(Config) when is_list(Config) ->
do_funs(none, none),
do_funs(lfh(), none),
do_funs(lfh(), efh()),
- ?line error_check("nix:foo().", {access_not_allowed,nix}, lfh(), efh()),
- ?line error_check("bar().", undef, none, none),
+ error_check("nix:foo().", {access_not_allowed,nix}, lfh(), efh()),
+ error_check("bar().", undef, none, none),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
"begin F1 = fun(F,N) -> count_down(F, N) end,"
"F1(F1,1000) end.",
0, ['F1'], lfh(), none),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
"begin F1 = fun(F,N) -> count_down(F, N) end,"
"F1(F1,1000) end.",
0, ['F1'], lfh_value(), none),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
"begin F1 = fun(F,N) -> count_down(F, N) end,"
"F1(F1,1000) end.",
0, ['F1'], lfh_value_extra(), none),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
"begin F1 = fun(F,N) -> count_down(F, N) end,"
"F1(F1,1000) end.",
0, ['F1'], {?MODULE,local_func_value}, none),
%% This is not documented, and only for backward compatibility (good!).
B0 = erl_eval:new_bindings(),
- ?line check(fun() -> is_function(?MODULE:count_down_fun()) end,
+ check(fun() -> is_function(?MODULE:count_down_fun()) end,
"begin is_function(count_down_fun()) end.",
true, [], {?MODULE,local_func,[B0]},none),
@@ -1017,16 +945,16 @@ funs(Config) when is_list(Config) ->
({M,F}, As) -> apply(M, F, As)
end,
EFH = {value, EF},
- ?line error_check("apply(timer, sleep, [1]).", got_it, none, EFH),
- ?line error_check("begin F = fun(T) -> timer:sleep(T) end,F(1) end.",
+ error_check("apply(timer, sleep, [1]).", got_it, none, EFH),
+ error_check("begin F = fun(T) -> timer:sleep(T) end,F(1) end.",
got_it, none, EFH),
- ?line error_check("fun c/1.", undef),
- ?line error_check("fun a:b/0().", undef),
+ error_check("fun c/1.", undef),
+ error_check("fun a:b/0().", undef),
MaxArgs = 20,
- ?line [true] =
+ [true] =
lists:usort([run_many_args(SAs) || SAs <- many_args(MaxArgs)]),
- ?line {'EXIT',{{argument_limit,_},_}} =
+ {'EXIT',{{argument_limit,_},_}} =
(catch run_many_args(many_args1(MaxArgs+1))),
ok.
@@ -1053,17 +981,17 @@ do_funs(LFH, EFH) ->
%% manually with 1000 replaced by 1000000.
M = atom_to_list(?MODULE),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
concat(["begin F1 = fun(F,N) -> ", M,
":count_down(F, N) end, F1(F1,1000) end."]),
0, ['F1'], LFH, EFH),
- ?line check(fun() -> F1 = fun(F,N) -> apply(?MODULE,count_down,[F,N])
+ check(fun() -> F1 = fun(F,N) -> apply(?MODULE,count_down,[F,N])
end, F1(F1, 1000) end,
concat(["begin F1 = fun(F,N) -> apply(", M,
",count_down,[F, N]) end, F1(F1,1000) end."]),
0, ['F1'], LFH, EFH),
- ?line check(fun() -> F = fun(F,N) when N > 0 -> apply(F,[F,N-1]);
+ check(fun() -> F = fun(F,N) when N > 0 -> apply(F,[F,N-1]);
(_F,0) -> ok end,
F(F, 1000)
end,
@@ -1071,7 +999,7 @@ do_funs(LFH, EFH) ->
"(_F,0) -> ok end,"
"F(F, 1000) end.",
ok, ['F'], LFH, EFH),
- ?line check(fun() -> F = fun(F,N) when N > 0 ->
+ check(fun() -> F = fun(F,N) when N > 0 ->
apply(erlang,apply,[F,[F,N-1]]);
(_F,0) -> ok end,
F(F, 1000)
@@ -1081,7 +1009,7 @@ do_funs(LFH, EFH) ->
"(_F,0) -> ok end,"
"F(F, 1000) end.",
ok, ['F'], LFH, EFH),
- ?line check(fun() -> F = count_down_fun(),
+ check(fun() -> F = count_down_fun(),
SF = fun(SF, F1, N) -> F(SF, F1, N) end,
SF(SF, F, 1000) end,
concat(["begin F = ", M, ":count_down_fun(),"
@@ -1090,17 +1018,17 @@ do_funs(LFH, EFH) ->
ok, ['F','SF'], LFH, EFH),
- ?line check(fun() -> F = fun(X) -> A = 1+X, {X,A} end,
+ check(fun() -> F = fun(X) -> A = 1+X, {X,A} end,
true = {2,3} == F(2) end,
"begin F = fun(X) -> A = 1+X, {X,A} end,
true = {2,3} == F(2) end.", true, ['F'], LFH, EFH),
- ?line check(fun() -> F = fun(X) -> byte_size(X) end,
+ check(fun() -> F = fun(X) -> byte_size(X) end,
?MODULE:do_apply(F,<<"hej">>) end,
concat(["begin F = fun(X) -> size(X) end,",
M,":do_apply(F,<<\"hej\">>) end."]),
3, ['F'], LFH, EFH),
- ?line check(fun() -> F1 = fun(X, Z) -> {X,Z} end,
+ check(fun() -> F1 = fun(X, Z) -> {X,Z} end,
Z = 5,
F2 = fun(X, Y) -> F1(Z,{X,Y}) end,
F3 = fun(X, Y) -> {a,F1(Z,{X,Y})} end,
@@ -1117,26 +1045,26 @@ do_funs(LFH, EFH) ->
{5,{5,y}} = F2(Z,y),
true = {5,{x,5}} == F2(x,Z) end.",
true, ['F1','Z','F2','F3'], LFH, EFH),
- ?line check(fun() -> F = fun(X) -> byte_size(X) end,
+ check(fun() -> F = fun(X) -> byte_size(X) end,
F2 = fun(Y) -> F(Y) end,
?MODULE:do_apply(F2,<<"hej">>) end,
concat(["begin F = fun(X) -> size(X) end,",
"F2 = fun(Y) -> F(Y) end,",
M,":do_apply(F2,<<\"hej\">>) end."]),
3, ['F','F2'], LFH, EFH),
- ?line check(fun() -> Z = 5, F = fun(X) -> {Z,X} end,
+ check(fun() -> Z = 5, F = fun(X) -> {Z,X} end,
F2 = fun(Z) -> F(Z) end, F2(3) end,
"begin Z = 5, F = fun(X) -> {Z,X} end,
F2 = fun(Z) -> F(Z) end, F2(3) end.",
{5,3},['F','F2','Z'], LFH, EFH),
- ?line check(fun() -> F = fun(Z) -> Z end,
+ check(fun() -> F = fun(Z) -> Z end,
F2 = fun(X) -> F(X), Z = {X,X}, Z end,
{1,1} = F2(1), Z = 7, Z end,
"begin F = fun(Z) -> Z end,
F2 = fun(X) -> F(X), Z = {X,X}, Z end,
{1,1} = F2(1), Z = 7, Z end.", 7, ['F','F2','Z'],
LFH, EFH),
- ?line check(fun() -> F = fun(F, N) -> [?MODULE:count_down(F,N) || X <-[1]]
+ check(fun() -> F = fun(F, N) -> [?MODULE:count_down(F,N) || X <-[1]]
end, F(F,2) end,
concat(["begin F = fun(F, N) -> [", M,
":count_down(F,N) || X <-[1]] end, F(F,2) end."]),
@@ -1195,45 +1123,42 @@ external_func({M,F}, As) ->
-try_catch(doc) ->
- ["Test try-of-catch-after-end statement"];
-try_catch(suite) ->
- [];
+%% Test try-of-catch-after-end statement.
try_catch(Config) when is_list(Config) ->
%% Match in of with catch
- ?line check(fun() -> try 1 of 1 -> 2 catch _:_ -> 3 end end,
+ check(fun() -> try 1 of 1 -> 2 catch _:_ -> 3 end end,
"try 1 of 1 -> 2 catch _:_ -> 3 end.", 2),
- ?line check(fun() -> try 1 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end end,
+ check(fun() -> try 1 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end end,
"try 1 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end.", 2),
- ?line check(fun() -> try 3 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end end,
+ check(fun() -> try 3 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end end,
"try 3 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end.", 4),
%% Just after
- ?line check(fun () -> X = try 1 after put(try_catch, 2) end,
+ check(fun () -> X = try 1 after put(try_catch, 2) end,
{X,get(try_catch)} end,
"begin X = try 1 after put(try_catch, 2) end, "
"{X,get(try_catch)} end.", {1,2}),
%% Match in of with after
- ?line check(fun() -> X = try 1 of 1 -> 2 after put(try_catch, 3) end,
+ check(fun() -> X = try 1 of 1 -> 2 after put(try_catch, 3) end,
{X,get(try_catch)} end,
"begin X = try 1 of 1 -> 2 after put(try_catch, 3) end, "
"{X,get(try_catch)} end.", {2,3}),
- ?line check(fun() -> X = try 1 of 1 -> 2; 3 -> 4
+ check(fun() -> X = try 1 of 1 -> 2; 3 -> 4
after put(try_catch, 5) end,
{X,get(try_catch)} end,
"begin X = try 1 of 1 -> 2; 3 -> 4 "
" after put(try_catch, 5) end, "
" {X,get(try_catch)} end.", {2,5}),
- ?line check(fun() -> X = try 3 of 1 -> 2; 3 -> 4
+ check(fun() -> X = try 3 of 1 -> 2; 3 -> 4
after put(try_catch, 5) end,
{X,get(try_catch)} end,
"begin X = try 3 of 1 -> 2; 3 -> 4 "
" after put(try_catch, 5) end, "
" {X,get(try_catch)} end.", {4,5}),
%% Nomatch in of
- ?line error_check("try 1 of 2 -> 3 catch _:_ -> 4 end.",
+ error_check("try 1 of 2 -> 3 catch _:_ -> 4 end.",
{try_clause,1}),
%% Nomatch in of with after
- ?line check(fun () -> {'EXIT',{{try_clause,1},_}} =
+ check(fun () -> {'EXIT',{{try_clause,1},_}} =
begin catch try 1 of 2 -> 3
after put(try_catch, 4) end end,
get(try_catch) end,
@@ -1242,14 +1167,14 @@ try_catch(Config) when is_list(Config) ->
" after put(try_catch, 4) end end, "
" get(try_catch) end. ", 4),
%% Exception in try
- ?line check(fun () -> try 1=2 catch error:{badmatch,2} -> 3 end end,
+ check(fun () -> try 1=2 catch error:{badmatch,2} -> 3 end end,
"try 1=2 catch error:{badmatch,2} -> 3 end.", 3),
- ?line check(fun () -> try 1=2 of 3 -> 4
+ check(fun () -> try 1=2 of 3 -> 4
catch error:{badmatch,2} -> 5 end end,
"try 1=2 of 3 -> 4 "
"catch error:{badmatch,2} -> 5 end.", 5),
%% Exception in try with after
- ?line check(fun () -> X = try 1=2
+ check(fun () -> X = try 1=2
catch error:{badmatch,2} -> 3
after put(try_catch, 4) end,
{X,get(try_catch)} end,
@@ -1257,7 +1182,7 @@ try_catch(Config) when is_list(Config) ->
" catch error:{badmatch,2} -> 3 "
" after put(try_catch, 4) end, "
" {X,get(try_catch)} end. ", {3,4}),
- ?line check(fun () -> X = try 1=2 of 3 -> 4
+ check(fun () -> X = try 1=2 of 3 -> 4
catch error:{badmatch,2} -> 5
after put(try_catch, 6) end,
{X,get(try_catch)} end,
@@ -1266,12 +1191,12 @@ try_catch(Config) when is_list(Config) ->
" after put(try_catch, 6) end, "
" {X,get(try_catch)} end. ", {5,6}),
%% Uncaught exception
- ?line error_check("try 1=2 catch error:undefined -> 3 end. ",
+ error_check("try 1=2 catch error:undefined -> 3 end. ",
{badmatch,2}),
- ?line error_check("try 1=2 of 3 -> 4 catch error:undefined -> 5 end. ",
+ error_check("try 1=2 of 3 -> 4 catch error:undefined -> 5 end. ",
{badmatch,2}),
%% Uncaught exception with after
- ?line check(fun () -> {'EXIT',{{badmatch,2},_}} =
+ check(fun () -> {'EXIT',{{badmatch,2},_}} =
begin catch try 1=2
after put(try_catch, 3) end end,
get(try_catch) end,
@@ -1279,7 +1204,7 @@ try_catch(Config) when is_list(Config) ->
" begin catch try 1=2 "
" after put(try_catch, 3) end end, "
" get(try_catch) end. ", 3),
- ?line check(fun () -> {'EXIT',{{badmatch,2},_}} =
+ check(fun () -> {'EXIT',{{badmatch,2},_}} =
begin catch try 1=2 of 3 -> 4
after put(try_catch, 5) end end,
get(try_catch) end,
@@ -1287,7 +1212,7 @@ try_catch(Config) when is_list(Config) ->
" begin catch try 1=2 of 3 -> 4"
" after put(try_catch, 5) end end, "
" get(try_catch) end. ", 5),
- ?line check(fun () -> {'EXIT',{{badmatch,2},_}} =
+ check(fun () -> {'EXIT',{{badmatch,2},_}} =
begin catch try 1=2 catch error:undefined -> 3
after put(try_catch, 4) end end,
get(try_catch) end,
@@ -1295,7 +1220,7 @@ try_catch(Config) when is_list(Config) ->
" begin catch try 1=2 catch error:undefined -> 3 "
" after put(try_catch, 4) end end, "
" get(try_catch) end. ", 4),
- ?line check(fun () -> {'EXIT',{{badmatch,2},_}} =
+ check(fun () -> {'EXIT',{{badmatch,2},_}} =
begin catch try 1=2 of 3 -> 4
catch error:undefined -> 5
after put(try_catch, 6) end end,
@@ -1308,19 +1233,16 @@ try_catch(Config) when is_list(Config) ->
ok.
-eval_expr_5(doc) ->
- ["(OTP-7933)"];
-eval_expr_5(suite) ->
- [];
+%% (OTP-7933).
eval_expr_5(Config) when is_list(Config) ->
- ?line {ok,Tokens ,_} =
+ {ok,Tokens ,_} =
erl_scan:string("if a+4 == 4 -> yes; true -> no end. "),
- ?line {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
- ?line {value, no, []} = erl_eval:expr(Expr, [], none, none, none),
- ?line no = erl_eval:expr(Expr, [], none, none, value),
+ {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
+ {value, no, []} = erl_eval:expr(Expr, [], none, none, none),
+ no = erl_eval:expr(Expr, [], none, none, value),
try
erl_eval:expr(Expr, [], none, none, 4711),
- ?line function_clause = should_never_reach_here
+ function_clause = should_never_reach_here
catch
error:function_clause ->
ok
@@ -1362,7 +1284,7 @@ check1(F, String, Result) ->
{value, Result, _} ->
ok;
Other ->
- test_server:fail({eval, Other, Result})
+ ct:fail({eval, Other, Result})
end.
check(F, String, Result, BoundVars, LFH, EFH) ->
@@ -1375,11 +1297,11 @@ check(F, String, Result, BoundVars, LFH, EFH) ->
true ->
ok;
false ->
- test_server:fail({check, BoundVars, Keys})
+ ct:fail({check, BoundVars, Keys})
end,
ok;
Other ->
- test_server:fail({check, Other, Result})
+ ct:fail({check, Other, Result})
end.
error_check(String, Result) ->
@@ -1387,7 +1309,7 @@ error_check(String, Result) ->
{'EXIT', {Result,_}} ->
ok;
Other ->
- test_server:fail({eval, Other, Result})
+ ct:fail({eval, Other, Result})
end.
error_check(String, Result, LFH, EFH) ->
@@ -1395,7 +1317,7 @@ error_check(String, Result, LFH, EFH) ->
{'EXIT', {Result,_}} ->
ok;
Other ->
- test_server:fail({eval, Other, Result})
+ ct:fail({eval, Other, Result})
end.
eval_string(String) ->
diff --git a/lib/debugger/test/exception_SUITE.erl b/lib/debugger/test/exception_SUITE.erl
index f42dbc7776..ef824b00be 100644
--- a/lib/debugger/test/exception_SUITE.erl
+++ b/lib/debugger/test/exception_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,15 +28,15 @@
-export([bad_guy/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
%% Filler.
%%
%%
-%%
-%%
%% This is line 40.
even(N) when is_integer(N), N > 1, (N rem 2) == 0 ->
odd(N-1)++[N].
@@ -68,17 +68,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
@@ -87,25 +84,25 @@ end_per_suite(Config) when is_list(Config) ->
%% Test that deliberately bad matches are reported correctly.
badmatch(Config) when is_list(Config) ->
- ?line ?try_match(a),
- ?line ?try_match(42),
- ?line ?try_match({a, b, c}),
- ?line ?try_match([]),
- ?line ?try_match(1.0),
+ ?try_match(a),
+ ?try_match(42),
+ ?try_match({a, b, c}),
+ ?try_match([]),
+ ?try_match(1.0),
ok.
%% Test various exceptions, in the presence of a previous error suppressed
%% in a guard.
pending_errors(Config) when is_list(Config) ->
- ?line pending(e_badmatch, {badmatch, b}),
- ?line pending(x, function_clause),
- ?line pending(e_case, {case_clause, xxx}),
- ?line pending(e_if, if_clause),
- ?line pending(e_badarith, badarith),
- ?line pending(e_undef, undef),
- ?line pending(e_timeoutval, timeout_value),
- ?line pending(e_badarg, badarg),
- ?line pending(e_badarg_spawn, badarg),
+ pending(e_badmatch, {badmatch, b}),
+ pending(x, function_clause),
+ pending(e_case, {case_clause, xxx}),
+ pending(e_if, if_clause),
+ pending(e_badarith, badarith),
+ pending(e_undef, undef),
+ pending(e_timeoutval, timeout_value),
+ pending(e_badarg, badarg),
+ pending(e_badarg_spawn, badarg),
ok.
bad_guy(pe_badarith, Other) when Other+1 == 0 -> % badarith (suppressed)
@@ -126,9 +123,9 @@ bad_guy(_, e_undef) ->
non_existing_module:foo(); % undef
bad_guy(_, e_timeoutval) ->
receive
- after arne -> % timeout_value
- ok
- end;
+ after arne -> % timeout_value
+ ok
+ end;
bad_guy(_, e_badarg) ->
node(xxx); % badarg
bad_guy(_, e_badarg_spawn) ->
@@ -150,7 +147,7 @@ pending_catched(First, Second, Expected) ->
{'EXIT', Reason} ->
pending(Reason, bad_guy, [First, Second], Expected);
Other ->
- test_server:fail({not_exit, Other})
+ ct:fail({not_exit, Other})
end.
pending_exit_message(Args, Expected) ->
@@ -162,9 +159,9 @@ pending_exit_message(Args, Expected) ->
{'EXIT', Pid, Reason} ->
pending(Reason, bad_guy, Args, Expected);
Other ->
- test_server:fail({unexpected_message, Other})
+ ct:fail({unexpected_message, Other})
after 10000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end,
process_flag(trap_exit, false).
@@ -180,67 +177,67 @@ pending({Code,[{?MODULE,Func,Arity,_}|_]}, Func, Args, Code)
when length(Args) == Arity ->
ok;
pending(Reason, _Function, _Args, _Code) ->
- test_server:fail({bad_exit_reason,Reason}).
+ ct:fail({bad_exit_reason,Reason}).
%% Test that doing arithmetics on [] gives a badarith EXIT and not a crash.
nil_arith(Config) when is_list(Config) ->
- ?line ba_plus_minus_times([], []),
-
- ?line ba_plus_minus_times([], 0),
- ?line ba_plus_minus_times([], 42),
- ?line ba_plus_minus_times([], 38724978123478923784),
- ?line ba_plus_minus_times([], 38.72),
-
- ?line ba_plus_minus_times(0, []),
- ?line ba_plus_minus_times(334, []),
- ?line ba_plus_minus_times(387249797813478923784, []),
- ?line ba_plus_minus_times(344.22, []),
-
- ?line ba_div_rem([], []),
-
- ?line ba_div_rem([], 0),
- ?line ba_div_rem([], 1),
- ?line ba_div_rem([], 42),
- ?line ba_div_rem([], 38724978123478923784),
- ?line ba_div_rem(344.22, []),
-
- ?line ba_div_rem(0, []),
- ?line ba_div_rem(1, []),
- ?line ba_div_rem(334, []),
- ?line ba_div_rem(387249797813478923784, []),
- ?line ba_div_rem(344.22, []),
-
- ?line ba_div_rem(344.22, 0.0),
- ?line ba_div_rem(1, 0.0),
- ?line ba_div_rem(392873498733971, 0.0),
-
- ?line ba_bop([], []),
- ?line ba_bop(0, []),
- ?line ba_bop(42, []),
- ?line ba_bop(-42342742987343, []),
- ?line ba_bop(238.342, []),
- ?line ba_bop([], 0),
- ?line ba_bop([], -243),
- ?line ba_bop([], 243),
- ?line ba_bop([], 2438724982478933),
- ?line ba_bop([], 3987.37),
-
- ?line ba_bnot([]),
- ?line ba_bnot(23.33),
-
- ?line ba_shift([], []),
- ?line ba_shift([], 0),
- ?line ba_shift([], 4),
- ?line ba_shift([], -4),
- ?line ba_shift([], 2343333333333),
- ?line ba_shift([], -333333333),
- ?line ba_shift([], 234.00),
- ?line ba_shift(23, []),
- ?line ba_shift(0, []),
- ?line ba_shift(-3433443433433323, []),
- ?line ba_shift(433443433433323, []),
- ?line ba_shift(343.93, []),
+ ba_plus_minus_times([], []),
+
+ ba_plus_minus_times([], 0),
+ ba_plus_minus_times([], 42),
+ ba_plus_minus_times([], 38724978123478923784),
+ ba_plus_minus_times([], 38.72),
+
+ ba_plus_minus_times(0, []),
+ ba_plus_minus_times(334, []),
+ ba_plus_minus_times(387249797813478923784, []),
+ ba_plus_minus_times(344.22, []),
+
+ ba_div_rem([], []),
+
+ ba_div_rem([], 0),
+ ba_div_rem([], 1),
+ ba_div_rem([], 42),
+ ba_div_rem([], 38724978123478923784),
+ ba_div_rem(344.22, []),
+
+ ba_div_rem(0, []),
+ ba_div_rem(1, []),
+ ba_div_rem(334, []),
+ ba_div_rem(387249797813478923784, []),
+ ba_div_rem(344.22, []),
+
+ ba_div_rem(344.22, 0.0),
+ ba_div_rem(1, 0.0),
+ ba_div_rem(392873498733971, 0.0),
+
+ ba_bop([], []),
+ ba_bop(0, []),
+ ba_bop(42, []),
+ ba_bop(-42342742987343, []),
+ ba_bop(238.342, []),
+ ba_bop([], 0),
+ ba_bop([], -243),
+ ba_bop([], 243),
+ ba_bop([], 2438724982478933),
+ ba_bop([], 3987.37),
+
+ ba_bnot([]),
+ ba_bnot(23.33),
+
+ ba_shift([], []),
+ ba_shift([], 0),
+ ba_shift([], 4),
+ ba_shift([], -4),
+ ba_shift([], 2343333333333),
+ ba_shift([], -333333333),
+ ba_shift([], 234.00),
+ ba_shift(23, []),
+ ba_shift(0, []),
+ ba_shift(-3433443433433323, []),
+ ba_shift(433443433433323, []),
+ ba_shift(343.93, []),
ok.
ba_plus_minus_times(A, B) ->
@@ -279,29 +276,29 @@ ba_bnot(A) ->
stacktrace(Conf) when is_list(Conf) ->
Tag = make_ref(),
- ?line {_,Mref} = spawn_monitor(fun() -> exit({Tag,erlang:get_stacktrace()}) end),
- ?line {Tag,[]} = receive {'DOWN',Mref,_,_,Info} -> Info end,
+ {_,Mref} = spawn_monitor(fun() -> exit({Tag,erlang:get_stacktrace()}) end),
+ {Tag,[]} = receive {'DOWN',Mref,_,_,Info} -> Info end,
V = [make_ref()|self()],
- ?line {value2,{caught1,badarg,[{erlang,abs,[V],_}|_]=St1}} =
+ {value2,{caught1,badarg,[{erlang,abs,[V],_}|_]=St1}} =
stacktrace_1({'abs',V}, error, {value,V}),
- ?line St1 = erase(stacktrace1),
- ?line St1 = erase(stacktrace2),
- ?line St1 = erlang:get_stacktrace(),
- ?line {caught2,{error,badarith},[{?MODULE,my_add,2,_}|_]=St2} =
+ St1 = erase(stacktrace1),
+ St1 = erase(stacktrace2),
+ St1 = erlang:get_stacktrace(),
+ {caught2,{error,badarith},[{?MODULE,my_add,2,_}|_]=St2} =
stacktrace_1({'div',{1,0}}, error, {'add',{0,a}}),
- ?line [{?MODULE,my_div,2,_}|_] = erase(stacktrace1),
- ?line St2 = erase(stacktrace2),
- ?line St2 = erlang:get_stacktrace(),
- ?line {caught2,{error,{try_clause,V}},[{?MODULE,stacktrace_1,3,_}|_]=St3} =
+ [{?MODULE,my_div,2,_}|_] = erase(stacktrace1),
+ St2 = erase(stacktrace2),
+ St2 = erlang:get_stacktrace(),
+ {caught2,{error,{try_clause,V}},[{?MODULE,stacktrace_1,3,_}|_]=St3} =
stacktrace_1({value,V}, error, {value,V}),
- ?line St3 = erase(stacktrace1),
- ?line St3 = erase(stacktrace2),
- ?line St3 = erlang:get_stacktrace(),
- ?line {caught2,{throw,V},[{?MODULE,foo,1,_}|_]=St4} =
+ St3 = erase(stacktrace1),
+ St3 = erase(stacktrace2),
+ St3 = erlang:get_stacktrace(),
+ {caught2,{throw,V},[{?MODULE,foo,1,_}|_]=St4} =
stacktrace_1({value,V}, error, {throw,V}),
- ?line [{?MODULE,stacktrace_1,3,_}|_] = erase(stacktrace1),
- ?line St4 = erase(stacktrace2),
- ?line St4 = erlang:get_stacktrace(),
+ [{?MODULE,stacktrace_1,3,_}|_] = erase(stacktrace1),
+ St4 = erase(stacktrace2),
+ St4 = erlang:get_stacktrace(),
ok.
stacktrace_1(X, C1, Y) ->
@@ -326,19 +323,19 @@ stacktrace_1(X, C1, Y) ->
nested_stacktrace(Conf) when is_list(Conf) ->
V = [{make_ref()}|[self()]],
- ?line value1 =
+ value1 =
nested_stacktrace_1({{value,{V,x1}},void,{V,x1}},
{void,void,void}),
- ?line {caught1,
- [{?MODULE,my_add,2,_}|_],
- value2,
- [{?MODULE,my_add,2,_}|_]} =
+ {caught1,
+ [{?MODULE,my_add,2,_}|_],
+ value2,
+ [{?MODULE,my_add,2,_}|_]} =
nested_stacktrace_1({{'add',{V,x1}},error,badarith},
{{value,{V,x2}},void,{V,x2}}),
- ?line {caught1,
- [{?MODULE,my_add,2,_}|_],
- {caught2,[{erlang,abs,[V],_}|_]},
- [{erlang,abs,[V],_}|_]} =
+ {caught1,
+ [{?MODULE,my_add,2,_}|_],
+ {caught2,[{erlang,abs,[V],_}|_]},
+ [{erlang,abs,[V],_}|_]} =
nested_stacktrace_1({{'add',{V,x1}},error,badarith},
{{'abs',V},error,badarg}),
ok.
@@ -361,42 +358,42 @@ nested_stacktrace_1({X1,C1,V1}, {X2,C2,V2}) ->
raise(Conf) when is_list(Conf) ->
- ?line erase(raise),
- ?line A =
+ erase(raise),
+ A =
try
- ?line try foo({'div',{1,0}})
- catch
- error:badarith ->
- put(raise, A0 = erlang:get_stacktrace()),
- ?line erlang:raise(error, badarith, A0)
- end
+ try foo({'div',{1,0}})
+ catch
+ error:badarith ->
+ put(raise, A0 = erlang:get_stacktrace()),
+ erlang:raise(error, badarith, A0)
+ end
catch
error:badarith ->
- ?line A1 = erlang:get_stacktrace(),
- ?line A1 = get(raise)
+ A1 = erlang:get_stacktrace(),
+ A1 = get(raise)
end,
- ?line A = erlang:get_stacktrace(),
- ?line A = get(raise),
- ?line [{?MODULE,my_div,2,_}|_] = A,
+ A = erlang:get_stacktrace(),
+ A = get(raise),
+ [{?MODULE,my_div,2,_}|_] = A,
%%
N = 8, % Must be even
- ?line N = erlang:system_flag(backtrace_depth, N),
- ?line try even(N)
- catch error:function_clause -> ok
- end,
- ?line B = odd_even(N, []),
- ?line B = erlang:get_stacktrace(),
+ N = erlang:system_flag(backtrace_depth, N),
+ try even(N)
+ catch error:function_clause -> ok
+ end,
+ B = odd_even(N, []),
+ B = erlang:get_stacktrace(),
%%
- ?line C0 = odd_even(N+1, []),
- ?line C = lists:sublist(C0, N),
- ?line try odd(N+1)
- catch error:function_clause -> ok
- end,
- ?line C = erlang:get_stacktrace(),
- ?line try erlang:raise(error, function_clause, C0)
- catch error:function_clause -> ok
- end,
- ?line C = erlang:get_stacktrace(),
+ C0 = odd_even(N+1, []),
+ C = lists:sublist(C0, N),
+ try odd(N+1)
+ catch error:function_clause -> ok
+ end,
+ C = erlang:get_stacktrace(),
+ try erlang:raise(error, function_clause, C0)
+ catch error:function_clause -> ok
+ end,
+ C = erlang:get_stacktrace(),
ok.
odd_even(N, R) when is_integer(N), N > 1 ->
@@ -438,8 +435,8 @@ my_add(A, B) ->
my_abs(X) -> abs(X).
gunilla(Config) when is_list(Config) ->
- ?line {throw,kalle} = gunilla_1(),
- ?line [] = erlang:get_stacktrace(),
+ {throw,kalle} = gunilla_1(),
+ [] = erlang:get_stacktrace(),
ok.
gunilla_1() ->
@@ -466,9 +463,9 @@ per(Config) when is_list(Config) ->
end.
t1(_,X,_) ->
- (1 bsl X) + 1.
+ (1 bsl X) + 1.
t2(_,X,_) ->
- (X bsl 1) + 1.
+ (X bsl 1) + 1.
id(I) -> I.
diff --git a/lib/debugger/test/fun_SUITE.erl b/lib/debugger/test/fun_SUITE.erl
index fabee16cee..7eb53e4ce4 100644
--- a/lib/debugger/test/fun_SUITE.erl
+++ b/lib/debugger/test/fun_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,9 +30,11 @@
%% Internal exports.
-export([nothing/0,call_me/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
cases().
@@ -53,43 +55,38 @@ cases() ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
ok.
good_call(Config) when is_list(Config) ->
- ?line F = fun() -> ok end,
- ?line ok = F(),
- ?line FF = fun ?MODULE:nothing/0,
- ?line ok = FF(),
+ F = fun() -> ok end,
+ ok = F(),
+ FF = fun ?MODULE:nothing/0,
+ ok = FF(),
ok.
-bad_apply(doc) ->
- "Test that the correct EXIT code is returned for all types of bad funs.";
-bad_apply(suite) -> [];
+%% Test that the correct EXIT code is returned for all types of bad funs.
bad_apply(Config) when is_list(Config) ->
- ?line bad_apply_fc(42, [0]),
- ?line bad_apply_fc(xx, [1]),
- ?line bad_apply_fc({}, [2]),
- ?line bad_apply_fc({1}, [3]),
- ?line bad_apply_fc({1,2,3}, [4]),
- ?line bad_apply_fc({1,2,3}, [5]),
- ?line bad_apply_fc({1,2,3,4}, [6]),
- ?line bad_apply_fc({1,2,3,4,5,6}, [7]),
- ?line bad_apply_fc({1,2,3,4,5}, [8]),
- ?line bad_apply_badarg({1,2}, [9]),
+ bad_apply_fc(42, [0]),
+ bad_apply_fc(xx, [1]),
+ bad_apply_fc({}, [2]),
+ bad_apply_fc({1}, [3]),
+ bad_apply_fc({1,2,3}, [4]),
+ bad_apply_fc({1,2,3}, [5]),
+ bad_apply_fc({1,2,3,4}, [6]),
+ bad_apply_fc({1,2,3,4,5,6}, [7]),
+ bad_apply_fc({1,2,3,4,5}, [8]),
+ bad_apply_badarg({1,2}, [9]),
ok.
bad_apply_fc(Fun, Args) ->
@@ -101,7 +98,7 @@ bad_apply_fc(Fun, Args) ->
ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res]);
Other ->
ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res]),
- ?t:fail({bad_result,Other})
+ ct:fail({bad_result,Other})
end.
bad_apply_badarg(Fun, Args) ->
@@ -113,23 +110,21 @@ bad_apply_badarg(Fun, Args) ->
ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res]);
Other ->
ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res]),
- ?t:fail({bad_result, Other})
+ ct:fail({bad_result, Other})
end.
-bad_fun_call(doc) ->
- "Try directly calling bad funs.";
-bad_fun_call(suite) -> [];
+%% Try directly calling bad funs.
bad_fun_call(Config) when is_list(Config) ->
- ?line bad_call_fc(42),
- ?line bad_call_fc(xx),
- ?line bad_call_fc({}),
- ?line bad_call_fc({1}),
- ?line bad_call_fc({1,2,3}),
- ?line bad_call_fc({1,2,3}),
- ?line bad_call_fc({1,2,3,4}),
- ?line bad_call_fc({1,2,3,4,5,6}),
- ?line bad_call_fc({1,2,3,4,5}),
- ?line bad_call_fc({1,2}),
+ bad_call_fc(42),
+ bad_call_fc(xx),
+ bad_call_fc({}),
+ bad_call_fc({1}),
+ bad_call_fc({1,2,3}),
+ bad_call_fc({1,2,3}),
+ bad_call_fc({1,2,3,4}),
+ bad_call_fc({1,2,3,4,5,6}),
+ bad_call_fc({1,2,3,4,5}),
+ bad_call_fc({1,2}),
ok.
bad_call_fc(Fun) ->
@@ -140,104 +135,101 @@ bad_call_fc(Fun) ->
ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]);
Other ->
ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]),
- ?t:fail({bad_result,Other})
+ ct:fail({bad_result,Other})
end.
%% Call and apply valid external funs with wrong number of arguments.
badarity(Config) when is_list(Config) ->
- ?line Fun = fun() -> ok end,
- ?line Stupid = {stupid,arguments},
- ?line Args = [some,{stupid,arguments},here],
+ Fun = fun() -> ok end,
+ Stupid = {stupid,arguments},
+ Args = [some,{stupid,arguments},here],
%% Simple call.
- ?line Res = (catch Fun(some, Stupid, here)),
+ Res = (catch Fun(some, Stupid, here)),
erlang:garbage_collect(),
erlang:yield(),
case Res of
{'EXIT',{{badarity,{Fun,Args}},[_|_]}} ->
- ?line ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]);
+ ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]);
_ ->
- ?line ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]),
- ?line ?t:fail({bad_result,Res})
+ ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]),
+ ct:fail({bad_result,Res})
end,
%% Apply.
- ?line Res2 = (catch apply(Fun, Args)),
+ Res2 = (catch apply(Fun, Args)),
erlang:garbage_collect(),
erlang:yield(),
case Res2 of
{'EXIT',{{badarity,{Fun,Args}},[_|_]}} ->
- ?line ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res2]);
+ ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res2]);
_ ->
- ?line ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res2]),
- ?line ?t:fail({bad_result,Res2})
+ ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res2]),
+ ct:fail({bad_result,Res2})
end,
ok.
%% Call and apply valid external funs with wrong number of arguments.
ext_badarity(Config) when is_list(Config) ->
- ?line Fun = fun ?MODULE:nothing/0,
- ?line Stupid = {stupid,arguments},
- ?line Args = [some,{stupid,arguments},here],
+ Fun = fun ?MODULE:nothing/0,
+ Stupid = {stupid,arguments},
+ Args = [some,{stupid,arguments},here],
%% Simple call.
- ?line Res = (catch Fun(some, Stupid, here)),
+ Res = (catch Fun(some, Stupid, here)),
erlang:garbage_collect(),
erlang:yield(),
case Res of
{'EXIT',{{badarity,{Fun,Args}},_}} ->
- ?line ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]);
+ ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]);
_ ->
- ?line ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]),
- ?line ?t:fail({bad_result,Res})
+ ok = io:format("~p(~p) -> ~p\n", [Fun,Args,Res]),
+ ct:fail({bad_result,Res})
end,
%% Apply.
- ?line Res2 = (catch apply(Fun, Args)),
+ Res2 = (catch apply(Fun, Args)),
erlang:garbage_collect(),
erlang:yield(),
case Res2 of
{'EXIT',{{badarity,{Fun,Args}},_}} ->
- ?line ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res2]);
+ ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res2]);
_ ->
- ?line ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res2]),
- ?line ?t:fail({bad_result,Res2})
+ ok = io:format("apply(~p, ~p) -> ~p\n", [Fun,Args,Res2]),
+ ct:fail({bad_result,Res2})
end,
ok.
nothing() ->
ok.
-otp_6061(suite) ->
- [];
-otp_6061(doc) ->
- ["Test handling of fun expression referring to uninterpreted code"];
+%% Test handling of fun expression referring to uninterpreted code.
otp_6061(Config) when is_list(Config) ->
- ?line OrigFlag = process_flag(trap_exit, true),
+ OrigFlag = process_flag(trap_exit, true),
- ?line Self = self(),
- ?line Pid = spawn_link(fun() -> test_otp_6061(Self) end),
+ Self = self(),
+ Pid = spawn_link(fun() -> test_otp_6061(Self) end),
receive
working ->
- ?line ok;
+ ok;
not_working ->
- ?line ?t:fail(not_working);
+ ct:fail(not_working);
{'EXIT', Pid, Reason} ->
- ?line ?t:fail({crash, Reason})
+ ct:fail({crash, Reason})
after
5000 ->
- ?line ?t:fail(timeout)
+ ct:fail(timeout)
end,
- ?line process_flag(trap_exit, OrigFlag),
+ process_flag(trap_exit, OrigFlag),
ok.
diff --git a/lib/debugger/test/guard_SUITE.erl b/lib/debugger/test/guard_SUITE.erl
index 880c89532b..f7874f79df 100644
--- a/lib/debugger/test/guard_SUITE.erl
+++ b/lib/debugger/test/guard_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -39,12 +39,14 @@
check_qlc_hrl/1,andalso_semi/1,t_tuple_size/1,binary_part/1,
bad_constants/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([init/4]).
-import(lists, [member/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
cases().
@@ -72,29 +74,25 @@ cases() ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- ?line Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
ok.
-bad_arith(doc) -> "Test that a bad arithmetic operation in a guard works correctly.";
-bad_arith(suite) -> [];
+%% Test that a bad arithmetic operation in a guard works correctly.
bad_arith(Config) when list(Config) ->
- ?line 5 = bad_arith1(2, 3),
- ?line 10 = bad_arith1(1, infinity),
- ?line 10 = bad_arith1(infinity, 1),
- ?line 42 = bad_div(24, 0),
+ 5 = bad_arith1(2, 3),
+ 10 = bad_arith1(1, infinity),
+ 10 = bad_arith1(infinity, 1),
+ 42 = bad_div(24, 0),
ok.
bad_arith1(T1, T2) when T1+T2 < 10 ->
@@ -109,37 +107,35 @@ bad_div(A, B) when A div B > 0 ->
bad_div(_A, _B) ->
42.
-bad_tuple(doc) -> "Test that bad arguments to element/2 are handled correctly.";
-bad_tuple(suite) -> [];
+%% Test that bad arguments to element/2 are handled correctly.
bad_tuple(Config) when list(Config) ->
- ?line error = bad_tuple1(a),
- ?line error = bad_tuple1({a, b}),
- ?line x = bad_tuple1({x, b}),
- ?line y = bad_tuple1({a, b, y}),
+ error = bad_tuple1(a),
+ error = bad_tuple1({a, b}),
+ x = bad_tuple1({x, b}),
+ y = bad_tuple1({a, b, y}),
ok.
bad_tuple1(T) when element(1, T) == x -> x;
bad_tuple1(T) when element(3, T) == y -> y;
bad_tuple1(_) -> error.
-test_heap_guards(doc) -> "";
-test_heap_guards(suite) -> [];
+%% .
test_heap_guards(Config) when list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Tuple = {a, tuple, is, built, here, xxx},
- ?line List = [a, list, is, built, here],
+ process_flag(trap_exit, true),
+ Tuple = {a, tuple, is, built, here, xxx},
+ List = [a, list, is, built, here],
- ?line try_fun(fun a_case/1, [Tuple], [Tuple]),
- ?line try_fun(fun a_case/1, [List], [List, List]),
- ?line try_fun(fun a_case/1, [a], [a]),
+ try_fun(fun a_case/1, [Tuple], [Tuple]),
+ try_fun(fun a_case/1, [List], [List, List]),
+ try_fun(fun a_case/1, [a], [a]),
- ?line try_fun(fun an_if/1, [Tuple], [Tuple]),
- ?line try_fun(fun an_if/1, [List], [List, List]),
- ?line try_fun(fun an_if/1, [a], [a]),
+ try_fun(fun an_if/1, [Tuple], [Tuple]),
+ try_fun(fun an_if/1, [List], [List, List]),
+ try_fun(fun an_if/1, [a], [a]),
- ?line try_fun(fun receive_test/1, [Tuple], [Tuple]),
- ?line try_fun(fun receive_test/1, [List], [List, List]),
- ?line try_fun(fun receive_test/1, [a], [a]),
+ try_fun(fun receive_test/1, [Tuple], [Tuple]),
+ try_fun(fun receive_test/1, [List], [List, List]),
+ try_fun(fun receive_test/1, [a], [a]),
ok.
a_case(V) ->
@@ -185,12 +181,12 @@ try_fun(Iter, Fun, Args, Result, Filler) ->
Pid = spawn_link(?MODULE, init, [self(),Fun,Args,list_to_tuple(Filler)]),
receive
{'EXIT',Pid,{result,Result}} ->
- ?line try_fun(Iter-1, Fun, Args, Result, [0|Filler]);
+ try_fun(Iter-1, Fun, Args, Result, [0|Filler]);
{'EXIT',Pid,{result,Other}} ->
- ?line io:format("Expected ~p; got ~p~n", [Result,Other]),
- ?line test_server:fail();
+ io:format("Expected ~p; got ~p~n", [Result,Other]),
+ ct:fail(failed);
Other ->
- ?line test_server:fail({unexpected_message,Other})
+ ct:fail({unexpected_message,Other})
end.
init(_ReplyTo, Fun, Args, Filler) ->
@@ -202,87 +198,86 @@ init(_ReplyTo, Fun, Args, Filler) ->
dummy(_) ->
ok.
-guard_bifs(doc) -> "Test all guard bifs with nasty (but legal arguments).";
-guard_bifs(suite) -> [];
+%% Test all guard bifs with nasty (but legal arguments).
guard_bifs(Config) when list(Config) ->
- ?line Big = -237849247829874297658726487367328971246284736473821617265433,
- ?line Float = 387924.874,
+ Big = -237849247829874297658726487367328971246284736473821617265433,
+ Float = 387924.874,
%% Succeding use of guard bifs.
- ?line try_gbif('abs/1', Big, -Big),
- ?line try_gbif('float/1', Big, float(Big)),
- ?line try_gbif('trunc/1', Float, 387924.0),
- ?line try_gbif('round/1', Float, 387925.0),
- ?line try_gbif('length/1', [], 0),
+ try_gbif('abs/1', Big, -Big),
+ try_gbif('float/1', Big, float(Big)),
+ try_gbif('trunc/1', Float, 387924.0),
+ try_gbif('round/1', Float, 387925.0),
+ try_gbif('length/1', [], 0),
- ?line try_gbif('length/1', [a], 1),
- ?line try_gbif('length/1', [a, b], 2),
- ?line try_gbif('length/1', lists:seq(0, 31), 32),
+ try_gbif('length/1', [a], 1),
+ try_gbif('length/1', [a, b], 2),
+ try_gbif('length/1', lists:seq(0, 31), 32),
- ?line try_gbif('hd/1', [a], a),
- ?line try_gbif('hd/1', [a, b], a),
+ try_gbif('hd/1', [a], a),
+ try_gbif('hd/1', [a, b], a),
- ?line try_gbif('tl/1', [a], []),
- ?line try_gbif('tl/1', [a, b], [b]),
- ?line try_gbif('tl/1', [a, b, c], [b, c]),
+ try_gbif('tl/1', [a], []),
+ try_gbif('tl/1', [a, b], [b]),
+ try_gbif('tl/1', [a, b, c], [b, c]),
- ?line try_gbif('size/1', {}, 0),
- ?line try_gbif('size/1', {a}, 1),
- ?line try_gbif('size/1', {a, b}, 2),
- ?line try_gbif('size/1', {a, b, c}, 3),
- ?line try_gbif('size/1', list_to_binary([]), 0),
- ?line try_gbif('size/1', list_to_binary([1]), 1),
- ?line try_gbif('size/1', list_to_binary([1, 2]), 2),
- ?line try_gbif('size/1', list_to_binary([1, 2, 3]), 3),
+ try_gbif('size/1', {}, 0),
+ try_gbif('size/1', {a}, 1),
+ try_gbif('size/1', {a, b}, 2),
+ try_gbif('size/1', {a, b, c}, 3),
+ try_gbif('size/1', list_to_binary([]), 0),
+ try_gbif('size/1', list_to_binary([1]), 1),
+ try_gbif('size/1', list_to_binary([1, 2]), 2),
+ try_gbif('size/1', list_to_binary([1, 2, 3]), 3),
- ?line try_gbif('element/2', {x}, {1, x}),
- ?line try_gbif('element/2', {x, y}, {1, x}),
- ?line try_gbif('element/2', {x, y}, {2, y}),
+ try_gbif('element/2', {x}, {1, x}),
+ try_gbif('element/2', {x, y}, {1, x}),
+ try_gbif('element/2', {x, y}, {2, y}),
- ?line try_gbif('self/0', 0, self()),
- ?line try_gbif('node/0', 0, node()),
- ?line try_gbif('node/1', self(), node()),
+ try_gbif('self/0', 0, self()),
+ try_gbif('node/0', 0, node()),
+ try_gbif('node/1', self(), node()),
%% Failing use of guard bifs.
- ?line try_fail_gbif('abs/1', Big, 1),
- ?line try_fail_gbif('abs/1', [], 1),
+ try_fail_gbif('abs/1', Big, 1),
+ try_fail_gbif('abs/1', [], 1),
- ?line try_fail_gbif('float/1', Big, 42),
- ?line try_fail_gbif('float/1', [], 42),
+ try_fail_gbif('float/1', Big, 42),
+ try_fail_gbif('float/1', [], 42),
- ?line try_fail_gbif('trunc/1', Float, 0.0),
- ?line try_fail_gbif('trunc/1', [], 0.0),
+ try_fail_gbif('trunc/1', Float, 0.0),
+ try_fail_gbif('trunc/1', [], 0.0),
- ?line try_fail_gbif('round/1', Float, 1.0),
- ?line try_fail_gbif('round/1', [], a),
+ try_fail_gbif('round/1', Float, 1.0),
+ try_fail_gbif('round/1', [], a),
- ?line try_fail_gbif('length/1', [], 1),
- ?line try_fail_gbif('length/1', [a], 0),
- ?line try_fail_gbif('length/1', a, 0),
- ?line try_fail_gbif('length/1', {a}, 0),
+ try_fail_gbif('length/1', [], 1),
+ try_fail_gbif('length/1', [a], 0),
+ try_fail_gbif('length/1', a, 0),
+ try_fail_gbif('length/1', {a}, 0),
- ?line try_fail_gbif('hd/1', [], 0),
- ?line try_fail_gbif('hd/1', [a], x),
- ?line try_fail_gbif('hd/1', x, x),
+ try_fail_gbif('hd/1', [], 0),
+ try_fail_gbif('hd/1', [a], x),
+ try_fail_gbif('hd/1', x, x),
- ?line try_fail_gbif('tl/1', [], 0),
- ?line try_fail_gbif('tl/1', [a], x),
- ?line try_fail_gbif('tl/1', x, x),
+ try_fail_gbif('tl/1', [], 0),
+ try_fail_gbif('tl/1', [a], x),
+ try_fail_gbif('tl/1', x, x),
- ?line try_fail_gbif('size/1', {}, 1),
- ?line try_fail_gbif('size/1', [], 0),
- ?line try_fail_gbif('size/1', [a], 1),
+ try_fail_gbif('size/1', {}, 1),
+ try_fail_gbif('size/1', [], 0),
+ try_fail_gbif('size/1', [a], 1),
- ?line try_fail_gbif('element/2', {}, {1, x}),
- ?line try_fail_gbif('element/2', {x}, {1, y}),
- ?line try_fail_gbif('element/2', [], {1, z}),
+ try_fail_gbif('element/2', {}, {1, x}),
+ try_fail_gbif('element/2', {x}, {1, y}),
+ try_fail_gbif('element/2', [], {1, z}),
- ?line try_fail_gbif('self/0', 0, list_to_pid("<0.0.0>")),
- ?line try_fail_gbif('node/0', 0, xxxx),
- ?line try_fail_gbif('node/1', self(), xxx),
- ?line try_fail_gbif('node/1', yyy, xxx),
+ try_fail_gbif('self/0', 0, list_to_pid("<0.0.0>")),
+ try_fail_gbif('node/0', 0, xxxx),
+ try_fail_gbif('node/1', self(), xxx),
+ try_fail_gbif('node/1', yyy, xxx),
ok.
try_gbif(Id, X, Y) ->
@@ -290,9 +285,9 @@ try_gbif(Id, X, Y) ->
{Id, X, Y} ->
io:format("guard_bif(~p, ~p, ~p) -- ok", [Id, X, Y]);
Other ->
- ?line ok = io:format("guard_bif(~p, ~p, ~p) -- bad result: ~p\n",
- [Id, X, Y, Other]),
- ?line test_server:fail()
+ ok = io:format("guard_bif(~p, ~p, ~p) -- bad result: ~p\n",
+ [Id, X, Y, Other]),
+ ct:fail(failed)
end.
try_fail_gbif(Id, X, Y) ->
@@ -300,9 +295,9 @@ try_fail_gbif(Id, X, Y) ->
{'EXIT', {function_clause,[{?MODULE,guard_bif,[Id,X,Y],_}|_]}} ->
io:format("guard_bif(~p, ~p, ~p) -- ok", [Id,X,Y]);
Other ->
- ?line ok = io:format("guard_bif(~p, ~p, ~p) -- bad result: ~p\n",
- [Id, X, Y, Other]),
- ?line test_server:fail()
+ ok = io:format("guard_bif(~p, ~p, ~p) -- bad result: ~p\n",
+ [Id, X, Y, Other]),
+ ct:fail(failed)
end.
guard_bif('abs/1', X, Y) when abs(X) == Y ->
@@ -330,24 +325,23 @@ guard_bif('node/0', X, Y) when node() == Y ->
guard_bif('node/1', X, Y) when node(X) == Y ->
{'node/1', X, Y}.
-type_tests(doc) -> "Test the type tests.";
-type_tests(suite) -> [];
+%% Test the type tests.
type_tests(Config) when list(Config) ->
- ?line Types = all_types(),
- ?line Tests = type_test_desc(),
- ?line put(errors, 0),
- ?line put(violations, 0),
- ?line type_tests(Tests, Types),
- ?line case {get(errors), get(violations)} of
- {0, 0} ->
- ok;
- {0, N} ->
- {comment, integer_to_list(N) ++ " standard violation(s)"};
- {Errors, Violations} ->
- io:format("~p sub test(s) failed, ~p violation(s)",
- [Errors, Violations]),
- ?line test_server:fail()
- end.
+ Types = all_types(),
+ Tests = type_test_desc(),
+ put(errors, 0),
+ put(violations, 0),
+ type_tests(Tests, Types),
+ case {get(errors), get(violations)} of
+ {0, 0} ->
+ ok;
+ {0, N} ->
+ {comment, integer_to_list(N) ++ " standard violation(s)"};
+ {Errors, Violations} ->
+ io:format("~p sub test(s) failed, ~p violation(s)",
+ [Errors, Violations]),
+ ct:fail(failed)
+ end.
type_tests([{Test, AllowedTypes}| T], AllTypes) ->
type_tests(Test, AllTypes, AllowedTypes),
@@ -372,7 +366,7 @@ type_tests(Test, [Type|T], Allowed) ->
[{?MODULE,type_test,[Test,Value],_}|_]}} ->
ok;
{'EXIT',Other} ->
- ?line test_server:fail({unexpected_error_reason,Other});
+ ct:fail({unexpected_error_reason,Other});
tuple when function(Value) ->
io:format("Standard violation: Test ~p(~p) should fail",
[Test, Value]),
@@ -442,18 +436,18 @@ type_test(function, X) when function(X) ->
function.
const_guard(Config) when is_list(Config) ->
- ?line if
- (0 == 0) and ((0 == 0) or (0 == 0)) ->
- ok
- end.
+ if
+ (0 == 0) and ((0 == 0) or (0 == 0)) ->
+ ok
+ end.
const_cond(Config) when is_list(Config) ->
- ?line ok = const_cond({}, 0),
- ?line ok = const_cond({a}, 1),
- ?line error = const_cond({a,b}, 3),
- ?line error = const_cond({a}, 0),
- ?line error = const_cond({a,b}, 1),
+ ok = const_cond({}, 0),
+ ok = const_cond({a}, 1),
+ error = const_cond({a,b}, 3),
+ error = const_cond({a}, 0),
+ error = const_cond({a,b}, 1),
ok.
const_cond(T, Sz) ->
@@ -474,59 +468,59 @@ basic_not(Config) when is_list(Config) ->
D = id(5),
ATuple = {False,True,Glurf},
- ?line check(fun() -> if not false -> ok; true -> error end end, ok),
- ?line check(fun() -> if not true -> ok; true -> error end end, error),
- ?line check(fun() -> if not False -> ok; true -> error end end, ok),
- ?line check(fun() -> if not True -> ok; true -> error end end, error),
+ check(fun() -> if not false -> ok; true -> error end end, ok),
+ check(fun() -> if not true -> ok; true -> error end end, error),
+ check(fun() -> if not False -> ok; true -> error end end, ok),
+ check(fun() -> if not True -> ok; true -> error end end, error),
- ?line check(fun() -> if A > B -> gt; A < B -> lt; A == B -> eq end end, lt),
- ?line check(fun() -> if A > C -> gt; A < C -> lt; A == C -> eq end end, gt),
- ?line check(fun() -> if A > D -> gt; A < D -> lt; A == D -> eq end end, eq),
+ check(fun() -> if A > B -> gt; A < B -> lt; A == B -> eq end end, lt),
+ check(fun() -> if A > C -> gt; A < C -> lt; A == C -> eq end end, gt),
+ check(fun() -> if A > D -> gt; A < D -> lt; A == D -> eq end end, eq),
- ?line check(fun() -> if not (7 > 453) -> le; not (7 < 453) -> ge;
- not (7 == 453) -> ne; true -> eq end end, le),
- ?line check(fun() -> if not (7 > -8) -> le; not (7 < -8) -> ge;
- not (7 == -8) -> ne; true -> eq end end, ge),
- ?line check(fun() -> if not (7 > 7) -> le; not (7 < 7) -> ge;
- not (7 == 7) -> ne; true -> eq end end, le),
+ check(fun() -> if not (7 > 453) -> le; not (7 < 453) -> ge;
+ not (7 == 453) -> ne; true -> eq end end, le),
+ check(fun() -> if not (7 > -8) -> le; not (7 < -8) -> ge;
+ not (7 == -8) -> ne; true -> eq end end, ge),
+ check(fun() -> if not (7 > 7) -> le; not (7 < 7) -> ge;
+ not (7 == 7) -> ne; true -> eq end end, le),
- ?line check(fun() -> if not (A > B) -> le; not (A < B) -> ge;
- not (A == B) -> ne; true -> eq end end, le),
- ?line check(fun() -> if not (A > C) -> le; not (A < C) -> ge;
- not (A == C) -> ne; true -> eq end end, ge),
- ?line check(fun() -> if not (A > D) -> le; not (A < D) -> ge;
- not (A == D) -> ne; true -> eq end end, le),
+ check(fun() -> if not (A > B) -> le; not (A < B) -> ge;
+ not (A == B) -> ne; true -> eq end end, le),
+ check(fun() -> if not (A > C) -> le; not (A < C) -> ge;
+ not (A == C) -> ne; true -> eq end end, ge),
+ check(fun() -> if not (A > D) -> le; not (A < D) -> ge;
+ not (A == D) -> ne; true -> eq end end, le),
- ?line check(fun() -> if not element(1, ATuple) -> ok; true -> error end end, ok),
- ?line check(fun() -> if not element(2, ATuple) -> ok; true -> error end end, error),
- ?line check(fun() -> if not element(3, ATuple) -> ok; true -> error end end, error),
+ check(fun() -> if not element(1, ATuple) -> ok; true -> error end end, ok),
+ check(fun() -> if not element(2, ATuple) -> ok; true -> error end end, error),
+ check(fun() -> if not element(3, ATuple) -> ok; true -> error end end, error),
- ?line check(fun() -> if not glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if not Glurf -> ok; true -> error end end, error),
+ check(fun() -> if not glurf -> ok; true -> error end end, error),
+ check(fun() -> if not Glurf -> ok; true -> error end end, error),
ok.
complex_not(Config) when is_list(Config) ->
ATuple = id({false,true,gurka}),
- ?line check(fun() -> if not(element(1, ATuple)) -> ok; true -> error end end, ok),
- ?line check(fun() -> if not(element(2, ATuple)) -> ok; true -> error end end, error),
+ check(fun() -> if not(element(1, ATuple)) -> ok; true -> error end end, ok),
+ check(fun() -> if not(element(2, ATuple)) -> ok; true -> error end end, error),
- ?line check(fun() -> if not(element(3, ATuple) == gurka) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if not(element(3, ATuple) =/= gurka) -> ok;
- true -> error end end, ok),
+ check(fun() -> if not(element(3, ATuple) == gurka) -> ok;
+ true -> error end end, error),
+ check(fun() -> if not(element(3, ATuple) =/= gurka) -> ok;
+ true -> error end end, ok),
- ?line check(fun() -> if {a,not(element(2, ATuple))} == {a,false} -> ok;
- true -> error end end, ok),
- ?line check(fun() -> if {a,not(element(1, ATuple))} == {a,false} -> ok;
- true -> error end end, error),
+ check(fun() -> if {a,not(element(2, ATuple))} == {a,false} -> ok;
+ true -> error end end, ok),
+ check(fun() -> if {a,not(element(1, ATuple))} == {a,false} -> ok;
+ true -> error end end, error),
- ?line check(fun() -> if not(element(1, ATuple) or element(3, ATuple)) -> ok;
- true -> error end end, error),
+ check(fun() -> if not(element(1, ATuple) or element(3, ATuple)) -> ok;
+ true -> error end end, error),
%% orelse
- ?line check(fun() -> if not(element(1, ATuple) orelse element(3, ATuple)) -> ok;
- true -> error end end, error),
+ check(fun() -> if not(element(1, ATuple) orelse element(3, ATuple)) -> ok;
+ true -> error end end, error),
ok.
@@ -534,100 +528,100 @@ semicolon(Config) when is_list(Config) ->
%% True/false combined using ';' (literal atoms).
- ?line check(fun() -> if true; false -> ok end end, ok),
- ?line check(fun() -> if false; true -> ok end end, ok),
- ?line check(fun() -> if true; true -> ok end end, ok),
- ?line check(fun() -> if false; false -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if false; false -> ok end),
- exit
- end, exit),
+ check(fun() -> if true; false -> ok end end, ok),
+ check(fun() -> if false; true -> ok end end, ok),
+ check(fun() -> if true; true -> ok end end, ok),
+ check(fun() -> if false; false -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if false; false -> ok end),
+ exit
+ end, exit),
%% True/false combined used ';'.
True = id(true),
False = id(false),
- ?line check(fun() -> if True; False -> ok end end, ok),
- ?line check(fun() -> if False; True -> ok end end, ok),
- ?line check(fun() -> if True; True -> ok end end, ok),
- ?line check(fun() -> if False; False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if False; False -> ok end),
- exit
- end, exit),
+ check(fun() -> if True; False -> ok end end, ok),
+ check(fun() -> if False; True -> ok end end, ok),
+ check(fun() -> if True; True -> ok end end, ok),
+ check(fun() -> if False; False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if False; False -> ok end),
+ exit
+ end, exit),
%% Combine true/false with a non-boolean value.
Glurf = id(glurf),
- ?line check(fun() -> if True; Glurf -> ok end end, ok),
- ?line check(fun() -> if Glurf; True -> ok end end, ok),
- ?line check(fun() -> if Glurf; Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if False; Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf; False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if Glurf; Glurf -> ok end),
- exit
- end, exit),
+ check(fun() -> if True; Glurf -> ok end end, ok),
+ check(fun() -> if Glurf; True -> ok end end, ok),
+ check(fun() -> if Glurf; Glurf -> ok; true -> error end end, error),
+ check(fun() -> if False; Glurf -> ok; true -> error end end, error),
+ check(fun() -> if Glurf; False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if Glurf; Glurf -> ok end),
+ exit
+ end, exit),
%% Combine true/false with errors.
ATuple = id({false,true,gurka}),
- ?line check(fun() -> if True; element(42, ATuple) -> ok end end, ok),
- ?line check(fun() -> if element(42, ATuple); True -> ok end end, ok),
- ?line check(fun() -> if element(42, ATuple); element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if False; element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if element(42, ATuple);
- False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if element(42, ATuple);
- element(42, ATuple) -> ok end),
- exit
- end, exit),
+ check(fun() -> if True; element(42, ATuple) -> ok end end, ok),
+ check(fun() -> if element(42, ATuple); True -> ok end end, ok),
+ check(fun() -> if element(42, ATuple); element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() -> if False; element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() -> if element(42, ATuple);
+ False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if element(42, ATuple);
+ element(42, ATuple) -> ok end),
+ exit
+ end, exit),
ok.
complex_semicolon(Config) when is_list(Config) ->
- ?line ok = csemi1(int, {blurf}),
- ?line ok = csemi1(string, {blurf}),
- ?line ok = csemi1(float, [a]),
- ?line error = csemi1(35, 42),
+ ok = csemi1(int, {blurf}),
+ ok = csemi1(string, {blurf}),
+ ok = csemi1(float, [a]),
+ error = csemi1(35, 42),
%% 2
- ?line ok = csemi2({}, {a,b,c}),
- ?line ok = csemi2({1,3.5}, {a,b,c}),
- ?line ok = csemi2(dum, {a,b,c}),
+ ok = csemi2({}, {a,b,c}),
+ ok = csemi2({1,3.5}, {a,b,c}),
+ ok = csemi2(dum, {a,b,c}),
- ?line ok = csemi2({45,-19.3}, {}),
- ?line ok = csemi2({45,-19.3}, {dum}),
- ?line ok = csemi2({45,-19.3}, {dum,dum}),
+ ok = csemi2({45,-19.3}, {}),
+ ok = csemi2({45,-19.3}, {dum}),
+ ok = csemi2({45,-19.3}, {dum,dum}),
- ?line error = csemi2({45}, {dum}),
- ?line error = csemi2([], {dum}),
- ?line error = csemi2({dum}, []),
- ?line error = csemi2([], []),
+ error = csemi2({45}, {dum}),
+ error = csemi2([], {dum}),
+ error = csemi2({dum}, []),
+ error = csemi2([], []),
%% 3
- ?line csemi3(fun csemi3a/4),
- ?line csemi3(fun csemi3b/4),
- ?line csemi3(fun csemi3c/4),
+ csemi3(fun csemi3a/4),
+ csemi3(fun csemi3b/4),
+ csemi3(fun csemi3c/4),
%% 4
- ?line csemi4(fun csemi4a/4),
- ?line csemi4(fun csemi4b/4),
- ?line csemi4(fun csemi4c/4),
- ?line csemi4(fun csemi4d/4),
+ csemi4(fun csemi4a/4),
+ csemi4(fun csemi4b/4),
+ csemi4(fun csemi4c/4),
+ csemi4(fun csemi4d/4),
%% 4, 'orelse' instead of 'or'
- ?line csemi4_orelse(fun csemi4_orelse_a/4),
- ?line csemi4_orelse(fun csemi4_orelse_b/4),
- ?line csemi4_orelse(fun csemi4_orelse_c/4),
- ?line csemi4_orelse(fun csemi4_orelse_d/4),
+ csemi4_orelse(fun csemi4_orelse_a/4),
+ csemi4_orelse(fun csemi4_orelse_b/4),
+ csemi4_orelse(fun csemi4_orelse_c/4),
+ csemi4_orelse(fun csemi4_orelse_d/4),
ok.
@@ -713,24 +707,24 @@ csemi4_orelse(Test) ->
ok = Test({}, 2, blurf, 0),
ok = Test({}, 2, {1}, 2),
- ?line error = Test([], 1, {}, 0),
+ error = Test([], 1, {}, 0),
ok.
csemi4_orelse_a(A, X, B, Y) when (size(A) > 1) orelse (X > 1);
- (size(B) > 1) orelse (Y > 1) -> ok;
+ (size(B) > 1) orelse (Y > 1) -> ok;
csemi4_orelse_a(_, _, _, _) -> error.
csemi4_orelse_b(A, X, B, Y) when (X > 1) orelse (size(A) > 1);
- (size(B) > 1) orelse (Y > 1) -> ok;
+ (size(B) > 1) orelse (Y > 1) -> ok;
csemi4_orelse_b(_, _, _, _) -> error.
csemi4_orelse_c(A, X, B, Y) when (size(A) > 1) orelse (X > 1);
- (Y > 1) orelse (size(B) > 1) -> ok;
+ (Y > 1) orelse (size(B) > 1) -> ok;
csemi4_orelse_c(_, _, _, _) -> error.
csemi4_orelse_d(A, X, B, Y) when (X > 1) or (size(A) > 1);
- (Y > 1) or (size(B) > 1) -> ok;
+ (Y > 1) or (size(B) > 1) -> ok;
csemi4_orelse_d(_, _, _, _) -> error.
@@ -738,72 +732,72 @@ comma(Config) when is_list(Config) ->
%% ',' combinations of literal true/false.
- ?line check(fun() -> if true, false -> ok; true -> error end end, error),
- ?line check(fun() -> if false, true -> ok; true -> error end end, error),
- ?line check(fun() -> if true, true -> ok end end, ok),
- ?line check(fun() -> if false, false -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if true, false -> ok;
- false, true -> ok;
- false, false -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if true, false -> ok; true -> error end end, error),
+ check(fun() -> if false, true -> ok; true -> error end end, error),
+ check(fun() -> if true, true -> ok end end, ok),
+ check(fun() -> if false, false -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if true, false -> ok;
+ false, true -> ok;
+ false, false -> ok
+ end),
+ exit
+ end, exit),
%% ',' combinations of true/false in variables.
True = id(true),
False = id(false),
- ?line check(fun() -> if True, False -> ok; true -> error end end, error),
- ?line check(fun() -> if False, True -> ok; true -> error end end, error),
- ?line check(fun() -> if True, True -> ok end end, ok),
- ?line check(fun() -> if False, False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True, False -> ok;
- False, True -> ok;
- False, False -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True, False -> ok; true -> error end end, error),
+ check(fun() -> if False, True -> ok; true -> error end end, error),
+ check(fun() -> if True, True -> ok end end, ok),
+ check(fun() -> if False, False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True, False -> ok;
+ False, True -> ok;
+ False, False -> ok
+ end),
+ exit
+ end, exit),
%% ',' combinations of true/false, and non-boolean in variables.
Glurf = id(glurf),
- ?line check(fun() -> if True, Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf, True -> ok; true -> error end end, error),
- ?line check(fun() -> if True, True -> ok end end, ok),
- ?line check(fun() -> if Glurf, Glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True, Glurf -> ok;
- Glurf, True -> ok;
- Glurf, Glurf -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True, Glurf -> ok; true -> error end end, error),
+ check(fun() -> if Glurf, True -> ok; true -> error end end, error),
+ check(fun() -> if True, True -> ok end end, ok),
+ check(fun() -> if Glurf, Glurf -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True, Glurf -> ok;
+ Glurf, True -> ok;
+ Glurf, Glurf -> ok
+ end),
+ exit
+ end, exit),
%% ',' combinations of true/false with errors.
ATuple = id({a,b,c}),
- ?line check(fun() -> if True, element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if element(42, ATuple), True -> ok;
- true -> error end end, error),
- ?line check(fun() -> if True, True -> ok end end, ok),
- ?line check(fun() -> if element(42, ATuple), element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True, element(42, ATuple) -> ok;
- element(42, ATuple), True -> ok;
- element(42, ATuple), element(42, ATuple) -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True, element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() -> if element(42, ATuple), True -> ok;
+ true -> error end end, error),
+ check(fun() -> if True, True -> ok end end, ok),
+ check(fun() -> if element(42, ATuple), element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True, element(42, ATuple) -> ok;
+ element(42, ATuple), True -> ok;
+ element(42, ATuple), element(42, ATuple) -> ok
+ end),
+ exit
+ end, exit),
ok.
@@ -813,35 +807,35 @@ or_guard(Config) when is_list(Config) ->
Glurf = id(glurf),
%% 'or' combinations of literal true/false.
- ?line check(fun() -> if true or false -> ok end end, ok),
- ?line check(fun() -> if false or true -> ok end end, ok),
- ?line check(fun() -> if true or true -> ok end end, ok),
- ?line check(fun() -> if false or false -> ok; true -> error end end, error),
+ check(fun() -> if true or false -> ok end end, ok),
+ check(fun() -> if false or true -> ok end end, ok),
+ check(fun() -> if true or true -> ok end end, ok),
+ check(fun() -> if false or false -> ok; true -> error end end, error),
- ?line check(fun() -> if glurf or true -> ok; true -> error end end, error),
- ?line check(fun() -> if true or glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if glurf or glurf -> ok; true -> error end end, error),
+ check(fun() -> if glurf or true -> ok; true -> error end end, error),
+ check(fun() -> if true or glurf -> ok; true -> error end end, error),
+ check(fun() -> if glurf or glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if false or false -> ok end),
- exit
- end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if false or false -> ok end),
+ exit
+ end, exit),
%% 'or' combinations using variables containing true/false.
- ?line check(fun() -> if True or False -> ok end end, ok),
- ?line check(fun() -> if False or True -> ok end end, ok),
- ?line check(fun() -> if True or True -> ok end end, ok),
- ?line check(fun() -> if False or False -> ok; true -> error end end, error),
+ check(fun() -> if True or False -> ok end end, ok),
+ check(fun() -> if False or True -> ok end end, ok),
+ check(fun() -> if True or True -> ok end end, ok),
+ check(fun() -> if False or False -> ok; true -> error end end, error),
- ?line check(fun() -> if True or Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf or True -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf or Glurf -> ok; true -> error end end, error),
+ check(fun() -> if True or Glurf -> ok; true -> error end end, error),
+ check(fun() -> if Glurf or True -> ok; true -> error end end, error),
+ check(fun() -> if Glurf or Glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if False or False -> ok end),
- exit
- end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if False or False -> ok end),
+ exit
+ end, exit),
ok.
@@ -850,142 +844,142 @@ more_or_guards(Config) when is_list(Config) ->
False = id(false),
ATuple = id({false,true,gurka}),
- ?line check(fun() ->
- if element(42, ATuple) or False -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if False or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(18, ATuple) or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if True or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(42, ATuple) or True -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(1, ATuple) or element(42, ATuple) or True -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(1, ATuple) or True or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if
- (<<False:8>> == <<0>>) or element(2, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if
- element(2, ATuple) or (<<True:8>> == <<1>>) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(2, ATuple) or element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if
- element(1, ATuple) or
- element(2, ATuple) or
- element(19, ATuple) -> ok;
- true -> error end
- end, error),
+ check(fun() ->
+ if element(42, ATuple) or False -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if False or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(18, ATuple) or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if True or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(42, ATuple) or True -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(1, ATuple) or element(42, ATuple) or True -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(1, ATuple) or True or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if
+ (<<False:8>> == <<0>>) or element(2, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if
+ element(2, ATuple) or (<<True:8>> == <<1>>) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(2, ATuple) or element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if
+ element(1, ATuple) or
+ element(2, ATuple) or
+ element(19, ATuple) -> ok;
+ true -> error end
+ end, error),
ok.
complex_or_guards(Config) when is_list(Config) ->
%% complex_or_1/2
- ?line ok = complex_or_1({a,b,c,d}, {1,2,3}),
- ?line ok = complex_or_1({a,b,c,d}, {1}),
- ?line ok = complex_or_1({a}, {1,2,3}),
- ?line error = complex_or_1({a}, {1}),
+ ok = complex_or_1({a,b,c,d}, {1,2,3}),
+ ok = complex_or_1({a,b,c,d}, {1}),
+ ok = complex_or_1({a}, {1,2,3}),
+ error = complex_or_1({a}, {1}),
- ?line error = complex_or_1(1, 2),
- ?line error = complex_or_1([], {a,b,c,d}),
- ?line error = complex_or_1({a,b,c,d}, []),
+ error = complex_or_1(1, 2),
+ error = complex_or_1([], {a,b,c,d}),
+ error = complex_or_1({a,b,c,d}, []),
%% complex_or_2/1
- ?line ok = complex_or_2({true,{}}),
- ?line ok = complex_or_2({false,{a}}),
- ?line ok = complex_or_2({false,{a,b,c}}),
- ?line ok = complex_or_2({true,{a,b,c,d}}),
+ ok = complex_or_2({true,{}}),
+ ok = complex_or_2({false,{a}}),
+ ok = complex_or_2({false,{a,b,c}}),
+ ok = complex_or_2({true,{a,b,c,d}}),
- ?line error = complex_or_2({blurf,{a,b,c}}),
+ error = complex_or_2({blurf,{a,b,c}}),
- ?line error = complex_or_2({true}),
- ?line error = complex_or_2({true,no_tuple}),
- ?line error = complex_or_2({true,[]}),
+ error = complex_or_2({true}),
+ error = complex_or_2({true,no_tuple}),
+ error = complex_or_2({true,[]}),
%% complex_or_3/2
- ?line ok = complex_or_3({true}, {}),
- ?line ok = complex_or_3({false}, {a}),
- ?line ok = complex_or_3({false}, {a,b,c}),
- ?line ok = complex_or_3({true}, {a,b,c,d}),
- ?line ok = complex_or_3({false}, <<1,2,3>>),
- ?line ok = complex_or_3({true}, <<1,2,3,4>>),
+ ok = complex_or_3({true}, {}),
+ ok = complex_or_3({false}, {a}),
+ ok = complex_or_3({false}, {a,b,c}),
+ ok = complex_or_3({true}, {a,b,c,d}),
+ ok = complex_or_3({false}, <<1,2,3>>),
+ ok = complex_or_3({true}, <<1,2,3,4>>),
- ?line error = complex_or_3(blurf, {a,b,c}),
+ error = complex_or_3(blurf, {a,b,c}),
- ?line error = complex_or_3({false}, <<1,2,3,4>>),
- ?line error = complex_or_3([], <<1,2>>),
- ?line error = complex_or_3({true}, 45),
- ?line error = complex_or_3(<<>>, <<>>),
+ error = complex_or_3({false}, <<1,2,3,4>>),
+ error = complex_or_3([], <<1,2>>),
+ error = complex_or_3({true}, 45),
+ error = complex_or_3(<<>>, <<>>),
%% complex_or_4/2
- ?line ok = complex_or_4(<<1,2,3>>, {true}),
- ?line ok = complex_or_4(<<1,2,3>>, {false}),
- ?line ok = complex_or_4(<<1,2,3>>, {true}),
- ?line ok = complex_or_4({1,2,3}, {true}),
- ?line error = complex_or_4({1,2,3,4}, {false}),
+ ok = complex_or_4(<<1,2,3>>, {true}),
+ ok = complex_or_4(<<1,2,3>>, {false}),
+ ok = complex_or_4(<<1,2,3>>, {true}),
+ ok = complex_or_4({1,2,3}, {true}),
+ error = complex_or_4({1,2,3,4}, {false}),
- ?line error = complex_or_4(<<1,2,3,4>>, []),
- ?line error = complex_or_4([], {true}),
+ error = complex_or_4(<<1,2,3,4>>, []),
+ error = complex_or_4([], {true}),
%% complex_or_5/2
- ?line ok = complex_or_5(<<1>>, {false}),
- ?line ok = complex_or_5(<<1,2,3>>, {true}),
- ?line ok = complex_or_5(<<1,2,3,4>>, {false}),
- ?line ok = complex_or_5({1,2,3}, {false}),
- ?line ok = complex_or_5({1,2,3,4}, {false}),
+ ok = complex_or_5(<<1>>, {false}),
+ ok = complex_or_5(<<1,2,3>>, {true}),
+ ok = complex_or_5(<<1,2,3,4>>, {false}),
+ ok = complex_or_5({1,2,3}, {false}),
+ ok = complex_or_5({1,2,3,4}, {false}),
- ?line error = complex_or_5(blurf, {false}),
- ?line error = complex_or_5(<<1>>, klarf),
- ?line error = complex_or_5(blurf, klarf),
+ error = complex_or_5(blurf, {false}),
+ error = complex_or_5(<<1>>, klarf),
+ error = complex_or_5(blurf, klarf),
%% complex_or_6/2
- ?line ok = complex_or_6({true,true}, {1,2,3,4}),
- ?line ok = complex_or_6({true,true}, <<1,2,3,4>>),
- ?line ok = complex_or_6({false,false}, <<1,2,3,4>>),
- ?line ok = complex_or_6({false,true}, <<1>>),
- ?line ok = complex_or_6({true,false}, {1}),
- ?line ok = complex_or_6({true,true}, {1}),
+ ok = complex_or_6({true,true}, {1,2,3,4}),
+ ok = complex_or_6({true,true}, <<1,2,3,4>>),
+ ok = complex_or_6({false,false}, <<1,2,3,4>>),
+ ok = complex_or_6({false,true}, <<1>>),
+ ok = complex_or_6({true,false}, {1}),
+ ok = complex_or_6({true,true}, {1}),
- ?line error = complex_or_6({false,false}, {1}),
+ error = complex_or_6({false,false}, {1}),
- ?line error = complex_or_6({true}, {1,2,3,4}),
- ?line error = complex_or_6({}, {1,2,3,4}),
- ?line error = complex_or_6([], {1,2,3,4}),
- ?line error = complex_or_6([], {1,2,3,4}),
- ?line error = complex_or_6({true,false}, klurf),
+ error = complex_or_6({true}, {1,2,3,4}),
+ error = complex_or_6({}, {1,2,3,4}),
+ error = complex_or_6([], {1,2,3,4}),
+ error = complex_or_6([], {1,2,3,4}),
+ error = complex_or_6({true,false}, klurf),
ok.
@@ -1031,79 +1025,79 @@ and_guard(Config) when is_list(Config) ->
%% 'and' combinations of literal true/false.
- ?line check(fun() -> if true and false -> ok; true -> error end end, error),
- ?line check(fun() -> if false and true -> ok; true -> error end end, error),
- ?line check(fun() -> if true and true -> ok end end, ok),
- ?line check(fun() -> if false and false -> ok; true -> error end end, error),
+ check(fun() -> if true and false -> ok; true -> error end end, error),
+ check(fun() -> if false and true -> ok; true -> error end end, error),
+ check(fun() -> if true and true -> ok end end, ok),
+ check(fun() -> if false and false -> ok; true -> error end end, error),
- ?line check(fun() -> if glurf and true -> ok; true -> error end end, error),
- ?line check(fun() -> if true and glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if glurf and glurf -> ok; true -> error end end, error),
+ check(fun() -> if glurf and true -> ok; true -> error end end, error),
+ check(fun() -> if true and glurf -> ok; true -> error end end, error),
+ check(fun() -> if glurf and glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if true and false -> ok;
- false and true -> ok;
- false and false -> ok
- end),
- exit
- end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if true and false -> ok;
+ false and true -> ok;
+ false and false -> ok
+ end),
+ exit
+ end, exit),
%% 'and' combinations of true/false in variables.
True = id(true),
False = id(false),
- ?line check(fun() -> if True and False -> ok; true -> error end end, error),
- ?line check(fun() -> if False and True -> ok; true -> error end end, error),
- ?line check(fun() -> if True and True -> ok end end, ok),
- ?line check(fun() -> if False and False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True and False -> ok;
- False and True -> ok;
- False and False -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True and False -> ok; true -> error end end, error),
+ check(fun() -> if False and True -> ok; true -> error end end, error),
+ check(fun() -> if True and True -> ok end end, ok),
+ check(fun() -> if False and False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True and False -> ok;
+ False and True -> ok;
+ False and False -> ok
+ end),
+ exit
+ end, exit),
%% 'and' combinations of true/false and a non-boolean in variables.
Glurf = id(glurf),
- ?line check(fun() -> if True and Glurf -> ok; true -> error end end, error),
- ?line check(fun() -> if Glurf and True -> ok; true -> error end end, error),
- ?line check(fun() -> if True and True -> ok end end, ok),
- ?line check(fun() -> if Glurf and Glurf -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True and Glurf -> ok;
- Glurf and True -> ok;
- Glurf and Glurf -> ok
- end),
- exit
- end, exit),
+ check(fun() -> if True and Glurf -> ok; true -> error end end, error),
+ check(fun() -> if Glurf and True -> ok; true -> error end end, error),
+ check(fun() -> if True and True -> ok end end, ok),
+ check(fun() -> if Glurf and Glurf -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True and Glurf -> ok;
+ Glurf and True -> ok;
+ Glurf and Glurf -> ok
+ end),
+ exit
+ end, exit),
%% 'and' combinations of true/false with errors.
ATuple = id({a,b,c}),
- ?line check(fun() -> if True and element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() -> if element(42, ATuple) and True -> ok;
- true -> error end end, error),
- ?line check(fun() -> if True and True -> ok end end, ok),
- ?line check(fun() -> if element(42, ATuple) and element(42, ATuple) -> ok;
- true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} =
- (catch if True and element(42, ATuple) -> ok;
- element(42, ATuple) and True -> ok;
- element(42, ATuple) and element(42, ATuple) -> ok
- end),
- exit
- end, exit),
-
- ?line ok = relprod({'Set',a,b}, {'Set',a,b}),
+ check(fun() -> if True and element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() -> if element(42, ATuple) and True -> ok;
+ true -> error end end, error),
+ check(fun() -> if True and True -> ok end end, ok),
+ check(fun() -> if element(42, ATuple) and element(42, ATuple) -> ok;
+ true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} =
+ (catch if True and element(42, ATuple) -> ok;
+ element(42, ATuple) and True -> ok;
+ element(42, ATuple) and element(42, ATuple) -> ok
+ end),
+ exit
+ end, exit),
+
+ ok = relprod({'Set',a,b}, {'Set',a,b}),
ok.
@@ -1114,18 +1108,18 @@ relprod(R1, R2) when (erlang:size(R1) =:= 3) and (erlang:element(1,R1) =:= 'Set'
xor_guard(Config) when is_list(Config) ->
%% 'xor' combinations of literal true/false.
- ?line check(fun() -> if true xor false -> ok end end, ok),
- ?line check(fun() -> if false xor true -> ok end end, ok),
- ?line check(fun() -> if true xor true -> ok; true -> error end end, error),
- ?line check(fun() -> if false xor false -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if false xor false -> ok end),
- exit
- end, exit),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if true xor true -> ok end),
- exit
- end, exit),
+ check(fun() -> if true xor false -> ok end end, ok),
+ check(fun() -> if false xor true -> ok end end, ok),
+ check(fun() -> if true xor true -> ok; true -> error end end, error),
+ check(fun() -> if false xor false -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if false xor false -> ok end),
+ exit
+ end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if true xor true -> ok end),
+ exit
+ end, exit),
%% 'xor' combinations using variables containing true/false.
@@ -1133,18 +1127,18 @@ xor_guard(Config) when is_list(Config) ->
True = id(true),
False = id(false),
- ?line check(fun() -> if True xor False -> ok end end, ok),
- ?line check(fun() -> if False xor True -> ok end end, ok),
- ?line check(fun() -> if True xor True -> ok; true -> error end end, error),
- ?line check(fun() -> if False xor False -> ok; true -> error end end, error),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if False xor False -> ok end),
- exit
- end, exit),
- ?line check(fun() ->
- {'EXIT',{if_clause,_}} = (catch if True xor True -> ok end),
- exit
- end, exit),
+ check(fun() -> if True xor False -> ok end end, ok),
+ check(fun() -> if False xor True -> ok end end, ok),
+ check(fun() -> if True xor True -> ok; true -> error end end, error),
+ check(fun() -> if False xor False -> ok; true -> error end end, error),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if False xor False -> ok end),
+ exit
+ end, exit),
+ check(fun() ->
+ {'EXIT',{if_clause,_}} = (catch if True xor True -> ok end),
+ exit
+ end, exit),
ok.
@@ -1153,53 +1147,53 @@ more_xor_guards(Config) when is_list(Config) ->
False = id(false),
ATuple = id({false,true,gurka}),
- ?line check(fun() ->
- if element(42, ATuple) xor False -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if False xor element(42, ATuple) xor False -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(18, ATuple) xor element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if True xor element(42, ATuple) -> ok;
- true -> error end
- end, error),
-
- ?line check(fun() ->
- if element(42, ATuple) xor True -> ok;
- true -> error end
- end, error),
+ check(fun() ->
+ if element(42, ATuple) xor False -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if False xor element(42, ATuple) xor False -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(18, ATuple) xor element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if True xor element(42, ATuple) -> ok;
+ true -> error end
+ end, error),
+
+ check(fun() ->
+ if element(42, ATuple) xor True -> ok;
+ true -> error end
+ end, error),
ok.
build_in_guard(Config) when is_list(Config) ->
SubBin = <<5.0/float>>,
- ?line B = <<1,SubBin/binary,3.5/float>>,
- ?line if
- B =:= <<1,SubBin/binary,3.5/float>> -> ok
- end.
+ B = <<1,SubBin/binary,3.5/float>>,
+ if
+ B =:= <<1,SubBin/binary,3.5/float>> -> ok
+ end.
old_guard_tests(Config) when list(Config) ->
%% Check that all the old guard tests are still recognized.
- ?line list = og(Config),
- ?line atom = og(an_atom),
- ?line binary = og(<<1,2>>),
- ?line float = og(3.14),
- ?line integer = og(43),
- ?line a_function = og(fun() -> ok end),
- ?line pid = og(self()),
- ?line reference = og(make_ref()),
- ?line tuple = og({}),
-
- ?line number = on(45.333),
- ?line number = on(-19),
+ list = og(Config),
+ atom = og(an_atom),
+ binary = og(<<1,2>>),
+ float = og(3.14),
+ integer = og(43),
+ a_function = og(fun() -> ok end),
+ pid = og(self()),
+ reference = og(make_ref()),
+ tuple = og({}),
+
+ number = on(45.333),
+ number = on(-19),
ok.
og(V) when atom(V) -> atom;
@@ -1218,8 +1212,8 @@ on(V) when number(V) -> number;
on(_) -> not_number.
gbif(Config) when is_list(Config) ->
- ?line error = gbif_1(1, {false,true}),
- ?line ok = gbif_1(2, {false,true}),
+ error = gbif_1(1, {false,true}),
+ ok = gbif_1(2, {false,true}),
ok.
gbif_1(P, T) when element(P, T) -> ok;
@@ -1227,49 +1221,49 @@ gbif_1(_, _) -> error.
t_is_boolean(Config) when is_list(Config) ->
- ?line true = is_boolean(true),
- ?line true = is_boolean(false),
- ?line true = is_boolean(id(true)),
- ?line true = is_boolean(id(false)),
-
- ?line false = is_boolean(glurf),
- ?line false = is_boolean(id(glurf)),
-
- ?line false = is_boolean([]),
- ?line false = is_boolean(id([])),
- ?line false = is_boolean(42),
- ?line false = is_boolean(id(-42)),
-
- ?line false = is_boolean(math:pi()),
- ?line false = is_boolean(384793478934378924978439789873478934897),
-
- ?line false = is_boolean(id(self())),
- ?line false = is_boolean(id({x,y,z})),
- ?line false = is_boolean(id([a,b,c])),
- ?line false = is_boolean(id(make_ref())),
- ?line false = is_boolean(id(<<1,2,3>>)),
-
- ?line ok = bool(true),
- ?line ok = bool(false),
- ?line ok = bool(id(true)),
- ?line ok = bool(id(false)),
-
- ?line error = bool(glurf),
- ?line error = bool(id(glurf)),
-
- ?line error = bool([]),
- ?line error = bool(id([])),
- ?line error = bool(42),
- ?line error = bool(id(-42)),
-
- ?line error = bool(math:pi()),
- ?line error = bool(384793478934378924978439789873478934897),
-
- ?line error = bool(id(self())),
- ?line error = bool(id({x,y,z})),
- ?line error = bool(id([a,b,c])),
- ?line error = bool(id(make_ref())),
- ?line error = bool(id(<<1,2,3>>)),
+ true = is_boolean(true),
+ true = is_boolean(false),
+ true = is_boolean(id(true)),
+ true = is_boolean(id(false)),
+
+ false = is_boolean(glurf),
+ false = is_boolean(id(glurf)),
+
+ false = is_boolean([]),
+ false = is_boolean(id([])),
+ false = is_boolean(42),
+ false = is_boolean(id(-42)),
+
+ false = is_boolean(math:pi()),
+ false = is_boolean(384793478934378924978439789873478934897),
+
+ false = is_boolean(id(self())),
+ false = is_boolean(id({x,y,z})),
+ false = is_boolean(id([a,b,c])),
+ false = is_boolean(id(make_ref())),
+ false = is_boolean(id(<<1,2,3>>)),
+
+ ok = bool(true),
+ ok = bool(false),
+ ok = bool(id(true)),
+ ok = bool(id(false)),
+
+ error = bool(glurf),
+ error = bool(id(glurf)),
+
+ error = bool([]),
+ error = bool(id([])),
+ error = bool(42),
+ error = bool(id(-42)),
+
+ error = bool(math:pi()),
+ error = bool(384793478934378924978439789873478934897),
+
+ error = bool(id(self())),
+ error = bool(id({x,y,z})),
+ error = bool(id([a,b,c])),
+ error = bool(id(make_ref())),
+ error = bool(id(<<1,2,3>>)),
ok.
@@ -1289,14 +1283,14 @@ is_function_2(Config) when is_list(Config) ->
end.
tricky(Config) when is_list(Config) ->
- ?line not_ok = tricky_1(1, 2),
- ?line not_ok = tricky_1(1, blurf),
- ?line not_ok = tricky_1(foo, 2),
- ?line not_ok = tricky_1(a, b),
-
- ?line false = rb(100000, [1], 42),
- ?line true = rb(100000, [], 42),
- ?line true = rb(555, [a,b,c], 19),
+ not_ok = tricky_1(1, 2),
+ not_ok = tricky_1(1, blurf),
+ not_ok = tricky_1(foo, 2),
+ not_ok = tricky_1(a, b),
+
+ false = rb(100000, [1], 42),
+ true = rb(100000, [], 42),
+ true = rb(555, [a,b,c], 19),
ok.
tricky_1(X, Y) when abs((X == 1) or (Y == 2)) -> ok;
@@ -1331,66 +1325,66 @@ rb(_, _, _) -> false.
rel_ops(Config) when is_list(Config) ->
- ?line ?T(=/=, 1, 1.0),
- ?line ?F(=/=, 2, 2),
- ?line ?F(=/=, {a}, {a}),
+ ?T(=/=, 1, 1.0),
+ ?F(=/=, 2, 2),
+ ?F(=/=, {a}, {a}),
- ?line ?F(/=, a, a),
- ?line ?F(/=, 0, 0.0),
- ?line ?T(/=, 0, 1),
- ?line ?F(/=, {a}, {a}),
+ ?F(/=, a, a),
+ ?F(/=, 0, 0.0),
+ ?T(/=, 0, 1),
+ ?F(/=, {a}, {a}),
- ?line ?T(==, 1, 1.0),
- ?line ?F(==, a, {}),
+ ?T(==, 1, 1.0),
+ ?F(==, a, {}),
- ?line ?F(=:=, 1, 1.0),
- ?line ?T(=:=, 42.0, 42.0),
+ ?F(=:=, 1, 1.0),
+ ?T(=:=, 42.0, 42.0),
- ?line ?F(>, a, b),
- ?line ?T(>, 42, 1.0),
- ?line ?F(>, 42, 42.0),
+ ?F(>, a, b),
+ ?T(>, 42, 1.0),
+ ?F(>, 42, 42.0),
- ?line ?T(<, a, b),
- ?line ?F(<, 42, 1.0),
- ?line ?F(<, 42, 42.0),
+ ?T(<, a, b),
+ ?F(<, 42, 1.0),
+ ?F(<, 42, 42.0),
- ?line ?T(=<, 1.5, 5),
- ?line ?F(=<, -9, -100.344),
- ?line ?T(=<, 42, 42.0),
+ ?T(=<, 1.5, 5),
+ ?F(=<, -9, -100.344),
+ ?T(=<, 42, 42.0),
- ?line ?T(>=, 42, 42.0),
- ?line ?F(>=, a, b),
- ?line ?T(>=, 1.0, 0),
+ ?T(>=, 42, 42.0),
+ ?F(>=, a, b),
+ ?T(>=, 1.0, 0),
ok.
-undef(TestOp).
basic_andalso_orelse(Config) when is_list(Config) ->
- ?line T = id({type,integers,23,42}),
- ?line 65 = if
- ((element(1, T) =:= type) andalso (size(T) =:= 4) andalso
- element(2, T) == integers) ->
- element(3, T) + element(4, T);
- true -> error
- end,
- ?line 65 = case [] of
- [] when ((element(1, T) =:= type) andalso (size(T) =:= 4) andalso
- element(2, T) == integers) ->
- element(3, T) + element(4, T)
- end,
-
- ?line 42 = basic_rt({type,integers,40,2}),
- ?line 5.0 = basic_rt({vector,{3.0,4.0}}),
- ?line 20 = basic_rt(['+',3,7]),
- ?line {'Set',a,b} = basic_rt({{'Set',a,b},{'Set',a,b}}),
- ?line 12 = basic_rt({klurf,4}),
-
- ?line error = basic_rt({type,integers,40,2,3}),
- ?line error = basic_rt({kalle,integers,40,2}),
- ?line error = basic_rt({kalle,integers,40,2}),
- ?line error = basic_rt({1,2}),
- ?line error = basic_rt([]),
+ T = id({type,integers,23,42}),
+ 65 = if
+ ((element(1, T) =:= type) andalso (size(T) =:= 4) andalso
+ element(2, T) == integers) ->
+ element(3, T) + element(4, T);
+ true -> error
+ end,
+ 65 = case [] of
+ [] when ((element(1, T) =:= type) andalso (size(T) =:= 4) andalso
+ element(2, T) == integers) ->
+ element(3, T) + element(4, T)
+ end,
+
+ 42 = basic_rt({type,integers,40,2}),
+ 5.0 = basic_rt({vector,{3.0,4.0}}),
+ 20 = basic_rt(['+',3,7]),
+ {'Set',a,b} = basic_rt({{'Set',a,b},{'Set',a,b}}),
+ 12 = basic_rt({klurf,4}),
+
+ error = basic_rt({type,integers,40,2,3}),
+ error = basic_rt({kalle,integers,40,2}),
+ error = basic_rt({kalle,integers,40,2}),
+ error = basic_rt({1,2}),
+ error = basic_rt([]),
RelProdBody =
fun(R1, R2) ->
@@ -1401,7 +1395,7 @@ basic_andalso_orelse(Config) when is_list(Config) ->
end
end,
- ?line ok = RelProdBody({'Set',a,b}, {'Set',a,b}),
+ ok = RelProdBody({'Set',a,b}, {'Set',a,b}),
ok.
basic_rt(T) when is_tuple(T) andalso size(T) =:= 4 andalso element(1, T) =:= type andalso
@@ -1445,9 +1439,9 @@ traverse_dcd(Config) when is_list(Config) ->
traverse_dcd({Cont,[LogH|Rest]},Log,Fun)
when is_tuple(LogH) andalso size(LogH) =:= 6 andalso element(1, LogH) =:= log_header
-andalso erlang:element(2,LogH) == dcd_log,
-is_tuple(LogH) andalso size(LogH) =:= 6 andalso element(1, LogH) =:= log_header
-andalso erlang:element(3,LogH) >= "1.0" ->
+ andalso erlang:element(2,LogH) == dcd_log,
+ is_tuple(LogH) andalso size(LogH) =:= 6 andalso element(1, LogH) =:= log_header
+ andalso erlang:element(3,LogH) >= "1.0" ->
traverse_dcd({Cont,Rest},Log,Fun);
traverse_dcd({Cont,Recs},Log,Fun) ->
{Cont,Recs,Log,Fun}.
@@ -1455,14 +1449,14 @@ traverse_dcd({Cont,Recs},Log,Fun) ->
check_qlc_hrl(Config) when is_list(Config) ->
St = {r1,false,dum},
- ?line foo = cqlc(qlc, q, [{lc,1,2,3}], St),
- ?line foo = cqlc(qlc, q, [{lc,1,2,3},b], St),
- ?line St = cqlc(qlc, q, [], St),
- ?line St = cqlc(qlc, blurf, [{lc,1,2,3},b], St),
- ?line St = cqlc(q, q, [{lc,1,2,3},b], St),
- ?line St = cqlc(qlc, q, [{lc,1,2,3},b,c], St),
- ?line St = cqlc(qlc, q, [a,b], St),
- ?line {r1,true,kalle} = cqlc(qlc, q, [{lc,1,2,3},b], {r1,true,kalle}),
+ foo = cqlc(qlc, q, [{lc,1,2,3}], St),
+ foo = cqlc(qlc, q, [{lc,1,2,3},b], St),
+ St = cqlc(qlc, q, [], St),
+ St = cqlc(qlc, blurf, [{lc,1,2,3},b], St),
+ St = cqlc(q, q, [{lc,1,2,3},b], St),
+ St = cqlc(qlc, q, [{lc,1,2,3},b,c], St),
+ St = cqlc(qlc, q, [a,b], St),
+ {r1,true,kalle} = cqlc(qlc, q, [{lc,1,2,3},b], {r1,true,kalle}),
ok.
%% From erl_lint.erl; original name was check_qlc_hrl/4.
@@ -1479,29 +1473,29 @@ cqlc(M, F, As, St) ->
%% OTP-7679: Thanks to Hunter Morris.
andalso_semi(Config) when is_list(Config) ->
- ?line ok = andalso_semi_foo(0),
- ?line ok = andalso_semi_foo(1),
- ?line fc(catch andalso_semi_foo(2)),
+ ok = andalso_semi_foo(0),
+ ok = andalso_semi_foo(1),
+ fc(catch andalso_semi_foo(2)),
- ?line ok = andalso_semi_bar([a,b,c]),
- ?line ok = andalso_semi_bar(1),
- ?line fc(catch andalso_semi_bar([a,b])),
+ ok = andalso_semi_bar([a,b,c]),
+ ok = andalso_semi_bar(1),
+ fc(catch andalso_semi_bar([a,b])),
ok.
andalso_semi_foo(Bar) when is_integer(Bar) andalso Bar =:= 0; Bar =:= 1 ->
- ok.
+ ok.
andalso_semi_bar(Bar) when is_list(Bar) andalso length(Bar) =:= 3; Bar =:= 1 ->
- ok.
+ ok.
t_tuple_size(Config) when is_list(Config) ->
- ?line 10 = do_tuple_size({1,2,3,4}),
- ?line fc(catch do_tuple_size({1,2,3})),
- ?line fc(catch do_tuple_size(42)),
+ 10 = do_tuple_size({1,2,3,4}),
+ fc(catch do_tuple_size({1,2,3})),
+ fc(catch do_tuple_size(42)),
- ?line error = ludicrous_tuple_size({a,b,c}),
- ?line error = ludicrous_tuple_size([a,b,c]),
+ error = ludicrous_tuple_size({a,b,c}),
+ error = ludicrous_tuple_size([a,b,c]),
ok.
@@ -1528,77 +1522,76 @@ mask_error({'EXIT',{Err,_}}) ->
mask_error(Else) ->
Else.
-binary_part(doc) ->
- ["Tests the binary_part/2,3 guard (GC) bif's"];
+%% Tests the binary_part/2,3 guard (GC) bif's.
binary_part(Config) when is_list(Config) ->
%% This is more or less a copy of what the guard_SUITE in emulator
%% does to cover the guard bif's
- ?line 1 = bptest(<<1,2,3>>),
- ?line 2 = bptest(<<2,1,3>>),
- ?line error = bptest(<<1>>),
- ?line error = bptest(<<>>),
- ?line error = bptest(apa),
- ?line 3 = bptest(<<2,3,3>>),
- % With one variable (pos)
- ?line 1 = bptest(<<1,2,3>>,1),
- ?line 2 = bptest(<<2,1,3>>,1),
- ?line error = bptest(<<1>>,1),
- ?line error = bptest(<<>>,1),
- ?line error = bptest(apa,1),
- ?line 3 = bptest(<<2,3,3>>,1),
- % With one variable (length)
- ?line 1 = bptesty(<<1,2,3>>,1),
- ?line 2 = bptesty(<<2,1,3>>,1),
- ?line error = bptesty(<<1>>,1),
- ?line error = bptesty(<<>>,1),
- ?line error = bptesty(apa,1),
- ?line 3 = bptesty(<<2,3,3>>,2),
- % With one variable (whole tuple)
- ?line 1 = bptestx(<<1,2,3>>,{1,1}),
- ?line 2 = bptestx(<<2,1,3>>,{1,1}),
- ?line error = bptestx(<<1>>,{1,1}),
- ?line error = bptestx(<<>>,{1,1}),
- ?line error = bptestx(apa,{1,1}),
- ?line 3 = bptestx(<<2,3,3>>,{1,2}),
- % With two variables
- ?line 1 = bptest(<<1,2,3>>,1,1),
- ?line 2 = bptest(<<2,1,3>>,1,1),
- ?line error = bptest(<<1>>,1,1),
- ?line error = bptest(<<>>,1,1),
- ?line error = bptest(apa,1,1),
- ?line 3 = bptest(<<2,3,3>>,1,2),
- % Direct (autoimported) call, these will be evaluated by the compiler...
- ?line <<2>> = binary_part(<<1,2,3>>,1,1),
- ?line <<1>> = binary_part(<<2,1,3>>,1,1),
- % Compiler warnings due to constant evaluation expected (3)
- ?line badarg = ?MASK_ERROR(binary_part(<<1>>,1,1)),
- ?line badarg = ?MASK_ERROR(binary_part(<<>>,1,1)),
- ?line badarg = ?MASK_ERROR(binary_part(apa,1,1)),
- ?line <<3,3>> = binary_part(<<2,3,3>>,1,2),
- % Direct call through apply
- ?line <<2>> = apply(erlang,binary_part,[<<1,2,3>>,1,1]),
- ?line <<1>> = apply(erlang,binary_part,[<<2,1,3>>,1,1]),
- % Compiler warnings due to constant evaluation expected (3)
- ?line badarg = ?MASK_ERROR(apply(erlang,binary_part,[<<1>>,1,1])),
- ?line badarg = ?MASK_ERROR(apply(erlang,binary_part,[<<>>,1,1])),
- ?line badarg = ?MASK_ERROR(apply(erlang,binary_part,[apa,1,1])),
- ?line <<3,3>> = apply(erlang,binary_part,[<<2,3,3>>,1,2]),
- % Constant propagation
- ?line Bin = <<1,2,3>>,
- ?line ok = if
- binary_part(Bin,1,1) =:= <<2>> ->
- ok;
- %% Compiler warning, clause cannot match (expected)
- true ->
- error
- end,
- ?line ok = if
- binary_part(Bin,{1,1}) =:= <<2>> ->
- ok;
- %% Compiler warning, clause cannot match (expected)
- true ->
- error
- end,
+ 1 = bptest(<<1,2,3>>),
+ 2 = bptest(<<2,1,3>>),
+ error = bptest(<<1>>),
+ error = bptest(<<>>),
+ error = bptest(apa),
+ 3 = bptest(<<2,3,3>>),
+ %% With one variable (pos)
+ 1 = bptest(<<1,2,3>>,1),
+ 2 = bptest(<<2,1,3>>,1),
+ error = bptest(<<1>>,1),
+ error = bptest(<<>>,1),
+ error = bptest(apa,1),
+ 3 = bptest(<<2,3,3>>,1),
+ %% With one variable (length)
+ 1 = bptesty(<<1,2,3>>,1),
+ 2 = bptesty(<<2,1,3>>,1),
+ error = bptesty(<<1>>,1),
+ error = bptesty(<<>>,1),
+ error = bptesty(apa,1),
+ 3 = bptesty(<<2,3,3>>,2),
+ %% With one variable (whole tuple)
+ 1 = bptestx(<<1,2,3>>,{1,1}),
+ 2 = bptestx(<<2,1,3>>,{1,1}),
+ error = bptestx(<<1>>,{1,1}),
+ error = bptestx(<<>>,{1,1}),
+ error = bptestx(apa,{1,1}),
+ 3 = bptestx(<<2,3,3>>,{1,2}),
+ %% With two variables
+ 1 = bptest(<<1,2,3>>,1,1),
+ 2 = bptest(<<2,1,3>>,1,1),
+ error = bptest(<<1>>,1,1),
+ error = bptest(<<>>,1,1),
+ error = bptest(apa,1,1),
+ 3 = bptest(<<2,3,3>>,1,2),
+ %% Direct (autoimported) call, these will be evaluated by the compiler...
+ <<2>> = binary_part(<<1,2,3>>,1,1),
+ <<1>> = binary_part(<<2,1,3>>,1,1),
+ %% Compiler warnings due to constant evaluation expected (3)
+ badarg = ?MASK_ERROR(binary_part(<<1>>,1,1)),
+ badarg = ?MASK_ERROR(binary_part(<<>>,1,1)),
+ badarg = ?MASK_ERROR(binary_part(apa,1,1)),
+ <<3,3>> = binary_part(<<2,3,3>>,1,2),
+ %% Direct call through apply
+ <<2>> = apply(erlang,binary_part,[<<1,2,3>>,1,1]),
+ <<1>> = apply(erlang,binary_part,[<<2,1,3>>,1,1]),
+ %% Compiler warnings due to constant evaluation expected (3)
+ badarg = ?MASK_ERROR(apply(erlang,binary_part,[<<1>>,1,1])),
+ badarg = ?MASK_ERROR(apply(erlang,binary_part,[<<>>,1,1])),
+ badarg = ?MASK_ERROR(apply(erlang,binary_part,[apa,1,1])),
+ <<3,3>> = apply(erlang,binary_part,[<<2,3,3>>,1,2]),
+ %% Constant propagation
+ Bin = <<1,2,3>>,
+ ok = if
+ binary_part(Bin,1,1) =:= <<2>> ->
+ ok;
+ %% Compiler warning, clause cannot match (expected)
+ true ->
+ error
+ end,
+ ok = if
+ binary_part(Bin,{1,1}) =:= <<2>> ->
+ ok;
+ %% Compiler warning, clause cannot match (expected)
+ true ->
+ error
+ end,
ok.
@@ -1659,24 +1652,24 @@ bptest(_,_,_) ->
-define(FAILING(C),
if
- C -> ?t:fail(should_fail);
+ C -> ct:fail(should_fail);
true -> ok
end,
if
- true, C -> ?t:fail(should_fail);
+ true, C -> ct:fail(should_fail);
true -> ok
end).
bad_constants(Config) when is_list(Config) ->
- ?line ?FAILING(false),
- ?line ?FAILING([]),
- ?line ?FAILING([a]),
- ?line ?FAILING([Config]),
- ?line ?FAILING({a,b}),
- ?line ?FAILING({a,Config}),
- ?line ?FAILING(<<1>>),
- ?line ?FAILING(42),
- ?line ?FAILING(3.14),
+ ?FAILING(false),
+ ?FAILING([]),
+ ?FAILING([a]),
+ ?FAILING([Config]),
+ ?FAILING({a,b}),
+ ?FAILING({a,Config}),
+ ?FAILING(<<1>>),
+ ?FAILING(42),
+ ?FAILING(3.14),
ok.
%% Call this function to turn off constant propagation.
@@ -1688,7 +1681,7 @@ check(F, Result) ->
Other ->
io:format("Expected: ~p\n", [Result]),
io:format(" Got: ~p\n", [Other]),
- test_server:fail()
+ ct:fail(failed)
end.
fc({'EXIT',{function_clause,_}}) -> ok.
diff --git a/lib/debugger/test/int_SUITE.erl b/lib/debugger/test/int_SUITE.erl
index 5f2e4dd84d..f697ace4e5 100644
--- a/lib/debugger/test/int_SUITE.erl
+++ b/lib/debugger/test/int_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
%%
-module(int_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -31,37 +31,30 @@
-export([interpret/1, guards/1, interpretable/1]).
-export([ append_1/1, append_2/1, member/1, reverse/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
init_per_testcase(interpretable, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config];
+ Config;
init_per_testcase(_Case, Config) ->
%% Interpret some existing and non-existing modules
- ?line DataDir = ?config(data_dir, Config),
- ?line {module, lists1} = int:i(filename:join([DataDir,lists1])),
- ?line {module, guards} = int:i(filename:join([DataDir,guards])),
+ DataDir = proplists:get_value(data_dir, Config),
+ {module, lists1} = int:i(filename:join([DataDir,lists1])),
+ {module, guards} = int:i(filename:join([DataDir,guards])),
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(interpretable, Config) ->
- ?line Dog=?config(watchdog, Config),
- ?line test_server:timetrap_cancel(Dog),
+end_per_testcase(interpretable, _Config) ->
ok;
end_per_testcase(_Case, Config) ->
%% Quit interpreting
- ?line ok = int:n(lists1),
- ?line ok = int:n(guards),
+ ok = int:n(lists1),
+ ok = int:n(guards),
- ?line Dog=?config(watchdog, Config),
- ?line test_server:timetrap_cancel(Dog),
- ?line ok.
+ ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[interpret, guards, {group, list_suite}, interpretable].
@@ -71,6 +64,14 @@ groups() ->
{append, [], [append_1, append_2]}].
init_per_suite(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,OldCwd} = file:get_cwd(),
+ try
+ ok = file:set_cwd(DataDir),
+ make:all()
+ after
+ file:set_cwd(OldCwd)
+ end,
Config.
end_per_suite(_Config) ->
@@ -83,83 +84,62 @@ end_per_group(_GroupName, Config) ->
Config.
-interpret(suite) ->
- [];
-interpret(doc) ->
- ["Interpreting modules"];
+%% Interpreting modules.
interpret(Config) when is_list(Config) ->
- ?line int:n(int:interpreted()),
+ int:n(int:interpreted()),
%% Interpret some existing and non-existing modules
- ?line DataDir = ?config(data_dir, Config),
- ?line {module, lists1} = int:i(filename:join([DataDir,lists1])),
- ?line {module, ordsets1} = int:i(filename:join([DataDir,ordsets1])),
- ?line error = int:i(non_existent_module),
+ DataDir = proplists:get_value(data_dir, Config),
+ {module, lists1} = int:i(filename:join([DataDir,lists1])),
+ {module, ordsets1} = int:i(filename:join([DataDir,ordsets1])),
+ error = int:i(non_existent_module),
%% Check that the interpreter has the right view.
- ?line ExpectedResult = lists:sort([lists1, ordsets1]),
- ?line Result = int:interpreted(),
- ?line ExpectedResult = lists:sort(Result),
+ ExpectedResult = lists:sort([lists1, ordsets1]),
+ Result = int:interpreted(),
+ ExpectedResult = lists:sort(Result),
%% Uniterpret the modules.
- ?line ok = int:n(non_existent_module),
- ?line ok = int:n(lists1),
- ?line [ordsets1] = int:interpreted(),
- ?line ok = int:n("ordsets1"),
- ?line [] = int:interpreted(),
+ ok = int:n(non_existent_module),
+ ok = int:n(lists1),
+ [ordsets1] = int:interpreted(),
+ ok = int:n("ordsets1"),
+ [] = int:interpreted(),
ok.
-guards(suite) ->
- [];
-guards(doc) ->
- "Evaluate guards.";
+%% Evaluate guards.
guards(Config) when is_list(Config) ->
ok = guards:guards().
-
-
-
-append_1(suite) ->
- [];
-append_1(doc) ->
- [];
append_1(Config) when is_list(Config) ->
- ?line test_server:format("In append_1~n"),
- ?line test_server:format("code:which(lists1)=~p~n",
- [code:which(lists1)]),
- ?line test_server:format("lists1:append([a],[b])=~p~n",
- [spawn_eval(lists1,append,[[a],[b]])]),
-
- ?line "abcdef"=spawn_eval(lists1,append,[["abc","def"]]),
- ?line [hej, du,[glade, [bagare]]]=
+ io:format("In append_1~n"),
+ io:format("code:which(lists1)=~p~n",
+ [code:which(lists1)]),
+ io:format("lists1:append([a],[b])=~p~n",
+ [spawn_eval(lists1,append,[[a],[b]])]),
+
+ "abcdef"=spawn_eval(lists1,append,[["abc","def"]]),
+ [hej, du,[glade, [bagare]]]=
spawn_eval(lists1,append,[[[hej], [du], [[glade, [bagare]]]]]),
- ?line [10, [elem]]=spawn_eval(lists1,append,[[[10], [[elem]]]]),
+ [10, [elem]]=spawn_eval(lists1,append,[[[10], [[elem]]]]),
ok.
-append_2(suite) ->
- [];
-append_2(doc) ->
- [];
append_2(Config) when is_list(Config) ->
- ?line test_server:format("In append_2~n"),
- ?line test_server:format("code:which(lists1)=~p~n",
- [code:which(lists1)]),
+ io:format("In append_2~n"),
+ io:format("code:which(lists1)=~p~n",
+ [code:which(lists1)]),
- ?line "abcdef"=spawn_eval(lists1,append,["abc", "def"]),
- ?line [hej, du]=spawn_eval(lists1,append,[[hej], [du]]),
- ?line [10, [elem]]=spawn_eval(lists1,append,[[10], [[elem]]]),
+ "abcdef"=spawn_eval(lists1,append,["abc", "def"]),
+ [hej, du]=spawn_eval(lists1,append,[[hej], [du]]),
+ [10, [elem]]=spawn_eval(lists1,append,[[10], [[elem]]]),
ok.
-reverse(suite) ->
- [];
-reverse(doc) ->
- [];
reverse(Config) when is_list(Config) ->
- ?line ok=reverse_test(0),
- ?line ok=reverse_test(1),
- ?line ok=reverse_test(2),
- ?line ok=reverse_test(537),
+ ok=reverse_test(0),
+ ok=reverse_test(1),
+ ok=reverse_test(2),
+ ok=reverse_test(537),
ok.
reverse_test(0) ->
@@ -179,19 +159,16 @@ reverse_test(Num) ->
error
end.
-member(suite) ->
- [];
-member(doc) ->
- ["Tests the lists1:member() implementation. The function "
- "is `non-blocking', and only processes 2000 elements "
- "at a time.",
- "This test case depends on lists1:reverse() to work, "
- "wich is tested in a separate test case."];
+%% Tests the lists1:member() implementation. The function
+%% is `non-blocking', and only processes 2000 elements
+%% at a time.
+%% This test case depends on lists1:reverse() to work,
+%% which is tested in a separate test case.
member(Config) when list(Config) ->
- ?line ok=member_test(0),
- ?line ok=member_test(1),
- ?line ok=member_test(100),
- ?line ok=member_test(537),
+ ok=member_test(0),
+ ok=member_test(1),
+ ok=member_test(100),
+ ok=member_test(537),
ok.
member_test(0) ->
@@ -223,69 +200,79 @@ spawn_eval(M,F,A) ->
evaluator(Pid, M,F,A) ->
Pid ! (catch apply(M,F,A)).
-interpretable(suite) ->
- [];
-interpretable(doc) ->
- ["Test int:interpretable/1"];
+%% Test int:interpretable/1.
interpretable(Config) when is_list(Config) ->
%% First make sure that 'lists1' is not loaded
case code:is_loaded(lists1) of
{file, _Loaded} ->
- ?line code:purge(lists1),
- ?line code:delete(lists1),
- ?line code:purge(lists1);
+ code:purge(lists1),
+ code:delete(lists1),
+ code:purge(lists1);
false -> ignore
end,
%% true
- ?line DataDir = filename:dirname(?config(data_dir, Config)),
- ?line true = code:add_patha(DataDir),
- ?line true = int:interpretable(lists1),
- ?line true = int:interpretable(filename:join([DataDir,lists1])),
- ?line true = code:del_path(DataDir),
-
- %% {error, no_src}
- ?line PrivDir = filename:join(?config(priv_dir, Config), ""),
- ?line {ok, _} = file:copy(filename:join([DataDir,"lists1.beam"]),
- filename:join([PrivDir,"lists1.beam"])),
- ?line true = code:add_patha(PrivDir),
-
- ?line {error, no_src} = int:interpretable(lists1),
- ?line ok = file:delete(filename:join([PrivDir,"lists1.beam"])),
+ DataDir = filename:dirname(proplists:get_value(data_dir, Config)),
+ true = code:add_patha(DataDir),
+ true = int:interpretable(lists1),
+ true = int:interpretable(filename:join([DataDir,lists1])),
+ true = code:del_path(DataDir),
+
+ %% true (from source)
+ PrivDir = filename:join(proplists:get_value(priv_dir, Config), ""),
+ {ok, _} = file:copy(filename:join([DataDir,"lists1.beam"]),
+ filename:join([PrivDir,"lists1.beam"])),
+ true = code:add_patha(PrivDir),
+ true = int:interpretable(lists1),
+ ok = file:delete(filename:join([PrivDir,"lists1.beam"])),
%% {error, no_beam}
Src = filename:join([PrivDir,"lists1.erl"]),
- ?line {ok, _} = file:copy(filename:join([DataDir,"lists1.erl"]),
- Src),
- ?line {error, no_beam} = int:interpretable(Src),
+ {ok, _} = file:copy(filename:join([DataDir,"lists1.erl"]),
+ Src),
+ {error, no_beam} = int:interpretable(Src),
%% {error, no_debug_info}
- ?line {ok, _} = compile:file(Src, [{outdir,PrivDir}]),
- ?line {error, no_debug_info} = int:interpretable(Src),
- ?line {error, no_debug_info} = int:interpretable(lists1),
- ?line ok = file:delete(Src),
- ?line true = code:del_path(PrivDir),
+ {ok, _} = compile:file(Src, [{outdir,PrivDir}]),
+ {error, no_debug_info} = int:interpretable(Src),
+ {error, no_debug_info} = int:interpretable(lists1),
+ ok = file:delete(Src),
+ true = code:del_path(PrivDir),
+
+ %% {error, no_src}
+ {ok, lists2, Binary} = compile:forms([{attribute,1,module,lists2}], []),
+ code:load_binary(lists2, "unknown", Binary),
+ {error, no_src} = int:interpretable(lists2),
%% {error, badarg}
- ?line {error, badarg} = int:interpretable(pride),
- ?line {error, badarg} = int:interpretable("prejudice.erl"),
+ {error, badarg} = int:interpretable(pride),
+ {error, badarg} = int:interpretable("prejudice.erl"),
%% {error, {app,App}}
- ?line {error, {app,_}} = int:interpretable(file),
- ?line {error, {app,_}} = int:interpretable(lists),
- ?line case int:interpretable(dbg_ieval) of
- {error, {app,_}} ->
- ok;
- {error, badarg} ->
- case code:which(dbg_ieval) of
- cover_compiled ->
- ok;
- Other1 ->
- ?line ?t:fail({unexpected_result, Other1})
- end;
- Other2 ->
- ?line ?t:fail({unexpected_result, Other2})
- end,
-
+ case filename:basename(code:lib_dir(kernel)) of
+ "kernel" ->
+ %% Development system (not installed). We are allowed
+ %% to interpret modules in kernel and stdlib
+ %% (at our own risk).
+ ok;
+ "kernel-" ++ _ ->
+ %% Installed system. Certain applications (including
+ %% kernel and stdlib) cannot be interpreted.
+ {error, {app,_}} = int:interpretable(file),
+ {error, {app,_}} = int:interpretable(lists),
+ case int:interpretable(dbg_ieval) of
+ {error, {app,_}} ->
+ ok;
+ {error, badarg} ->
+ case code:which(dbg_ieval) of
+ cover_compiled ->
+ ok;
+ Other1 ->
+ ct:fail({unexpected_result, Other1})
+ end;
+ Other2 ->
+ ct:fail({unexpected_result, Other2})
+ end
+ end,
ok.
diff --git a/lib/debugger/test/int_SUITE_data/Emakefile b/lib/debugger/test/int_SUITE_data/Emakefile
new file mode 100644
index 0000000000..6158d66764
--- /dev/null
+++ b/lib/debugger/test/int_SUITE_data/Emakefile
@@ -0,0 +1 @@
+{[guards,lists1,my_lists,ordsets1,test,test1],[{outdir,"."},debug_info]}.
diff --git a/lib/debugger/test/int_SUITE_data/Makefile.src b/lib/debugger/test/int_SUITE_data/Makefile.src
deleted file mode 100644
index 0bbb90734f..0000000000
--- a/lib/debugger/test/int_SUITE_data/Makefile.src
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2000-2010. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-EFLAGS=+debug_info
-all: guards.@EMULATOR@ lists1.@EMULATOR@ my_lists.@EMULATOR@ \
- ordsets1.@EMULATOR@ test.@EMULATOR@ test1.@EMULATOR@
-
-guards.@EMULATOR@: guards.erl
- erlc $(EFLAGS) guards.erl
-
-lists1.@EMULATOR@: lists1.erl
- erlc $(EFLAGS) lists1.erl
-
-my_lists.@EMULATOR@: my_lists.erl
- erlc $(EFLAGS) my_lists.erl
-
-ordsets1.@EMULATOR@: ordsets1.erl
- erlc $(EFLAGS) ordsets1.erl
-
-test.@EMULATOR@: test.erl
- erlc $(EFLAGS) test.erl
-
-test1.@EMULATOR@: test1.erl
- erlc $(EFLAGS) test1.erl
diff --git a/lib/debugger/test/int_SUITE_data/guards.erl b/lib/debugger/test/int_SUITE_data/guards.erl
index d148974e53..b790bc5934 100644
--- a/lib/debugger/test/int_SUITE_data/guards.erl
+++ b/lib/debugger/test/int_SUITE_data/guards.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_SUITE_data/lists1.erl b/lib/debugger/test/int_SUITE_data/lists1.erl
index c26ccfceda..32aabfcbb9 100644
--- a/lib/debugger/test/int_SUITE_data/lists1.erl
+++ b/lib/debugger/test/int_SUITE_data/lists1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_SUITE_data/my_lists.erl b/lib/debugger/test/int_SUITE_data/my_lists.erl
index 0ec2a7585f..dade8e824c 100644
--- a/lib/debugger/test/int_SUITE_data/my_lists.erl
+++ b/lib/debugger/test/int_SUITE_data/my_lists.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_SUITE_data/ordsets1.erl b/lib/debugger/test/int_SUITE_data/ordsets1.erl
index 349921b951..f96548a52c 100644
--- a/lib/debugger/test/int_SUITE_data/ordsets1.erl
+++ b/lib/debugger/test/int_SUITE_data/ordsets1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_SUITE_data/test.erl b/lib/debugger/test/int_SUITE_data/test.erl
index b29394302b..c2165a9856 100644
--- a/lib/debugger/test/int_SUITE_data/test.erl
+++ b/lib/debugger/test/int_SUITE_data/test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_SUITE_data/test1.erl b/lib/debugger/test/int_SUITE_data/test1.erl
index cb60c67bc4..2a7b8ab329 100644
--- a/lib/debugger/test/int_SUITE_data/test1.erl
+++ b/lib/debugger/test/int_SUITE_data/test1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_break_SUITE.erl b/lib/debugger/test/int_break_SUITE.erl
index 21b53a8d30..9894c27b81 100644
--- a/lib/debugger/test/int_break_SUITE.erl
+++ b/lib/debugger/test/int_break_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
%% Test break points.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
@@ -31,7 +31,9 @@
-export([auto_attach/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[basic, cleanup].
@@ -53,38 +55,33 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line Mod = ordsets1,
- ?line {module,Mod} = int:i(filename:join(DataDir, Mod)),
- ?line ok = io:format("Interpreted modules: ~p", [int:interpreted()]),
- ?line Dog = test_server:timetrap(?t:minutes(0.5)),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- ?line ok = io:format("Interpreted modules: ~p", [int:interpreted()]),
- ?line Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+ DataDir = proplists:get_value(data_dir, Config),
+ Mod = ordsets1,
+ {module,Mod} = int:i(filename:join(DataDir, Mod)),
+ ok = io:format("Interpreted modules: ~p", [int:interpreted()]),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
+ ok = io:format("Interpreted modules: ~p", [int:interpreted()]),
ok.
-basic(doc) -> "Tests setting a few break points.";
-basic(suite) -> [];
+%% Tests setting a few break points.
basic(Config) when list(Config) ->
- ?line int:auto_attach([init], {?MODULE,auto_attach}),
- ?line S1 = [] = ordsets1:new_set(),
- ?line ok = i:ib(ordsets1, 86),
- ?line S2 = [xxx] = ordsets1:add_element(xxx, S1),
- ?line S3 = [xxx,y] = ordsets1:add_element(y, S2),
- ?line ok = i:ib(ordsets1, union, 2),
- ?line [xxx,y,z] = ordsets1:union(S3, [z]),
+ int:auto_attach([init], {?MODULE,auto_attach}),
+ S1 = [] = ordsets1:new_set(),
+ ok = i:ib(ordsets1, 86),
+ S2 = [xxx] = ordsets1:add_element(xxx, S1),
+ S3 = [xxx,y] = ordsets1:add_element(y, S2),
+ ok = i:ib(ordsets1, union, 2),
+ [xxx,y,z] = ordsets1:union(S3, [z]),
All = [{{ordsets1,86}, _}, {{ordsets1,_},_}|_] = lists:sort(int:all_breaks()),
[] = lists:sort(int:all_breaks(foobar)),
All = lists:sort(int:all_breaks(ordsets1)),
ok.
-cleanup(doc) -> "Make sure that the auto-attach flag is turned off.";
-cleanup(suite) -> [];
+%% Make sure that the auto-attach flag is turned off.
cleanup(Config) when list(Config) ->
- ?line int:auto_attach(false),
+ int:auto_attach(false),
ok.
auto_attach(Pid) ->
diff --git a/lib/debugger/test/int_break_SUITE_data/Makefile.src b/lib/debugger/test/int_break_SUITE_data/Makefile.src
index 7b79aec4aa..2002b51a41 100644
--- a/lib/debugger/test/int_break_SUITE_data/Makefile.src
+++ b/lib/debugger/test/int_break_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2010. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_break_SUITE_data/ordsets1.erl b/lib/debugger/test/int_break_SUITE_data/ordsets1.erl
index b2c7221eea..a23c057fbe 100644
--- a/lib/debugger/test/int_break_SUITE_data/ordsets1.erl
+++ b/lib/debugger/test/int_break_SUITE_data/ordsets1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_eval_SUITE.erl b/lib/debugger/test/int_eval_SUITE.erl
index f30d386de9..27ca4852b5 100644
--- a/lib/debugger/test/int_eval_SUITE.erl
+++ b/lib/debugger/test/int_eval_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@
-define(IM, my_int_eval_module).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]},
{timetrap,{minutes,1}}].
@@ -64,19 +64,16 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {module,?IM} = int:i(filename:join(DataDir, ?IM)),
- ?line ok = io:format("Interpreted modules: ~p",[int:interpreted()]),
+ DataDir = proplists:get_value(data_dir, Config),
+ {module,?IM} = int:i(filename:join(DataDir, ?IM)),
+ ok = io:format("Interpreted modules: ~p",[int:interpreted()]),
Config.
end_per_testcase(_Case, _Config) ->
ok = io:format("Interpreted modules: ~p", [int:interpreted()]),
ok.
-bifs_outside_erlang(doc) ->
- "Test that BIFs outside the erlang module are correctly evaluated.";
-bifs_outside_erlang(suite) ->
- [];
+%% Test that BIFs outside the erlang module are correctly evaluated.
bifs_outside_erlang(Config) when is_list(Config) ->
Fun = fun() ->
Id = ?IM:ets_new(),
@@ -87,164 +84,145 @@ bifs_outside_erlang(Config) when is_list(Config) ->
?IM:ets_delete(Id),
ok
end,
- ?line ok = spawn_eval(Fun),
+ ok = spawn_eval(Fun),
ok.
-spawning(doc) ->
- "Try evalutate spawn_link/3.";
-spawning(suite) ->
- [];
+%% Try evalutate spawn_link/3.
spawning(Config) when is_list(Config) ->
- ?line ok = spawn_eval(fun() -> ?IM:spawn_test() end).
+ ok = spawn_eval(fun() -> ?IM:spawn_test() end).
-applying(doc) ->
- "Try various sorts of applies.";
-applying(suite) ->
- [];
+%% Try various sorts of applies.
applying(Config) when is_list(Config) ->
Fun = fun({number,X}, {number,Y}) -> X+Y end,
- ?line ok = spawn_eval(fun() -> ?IM:apply_test(Fun) end).
+ ok = spawn_eval(fun() -> ?IM:apply_test(Fun) end).
-catch_and_throw(doc) ->
- "Test catch and throw/1.";
-catch_and_throw(suite) ->
- [];
+%% Test catch and throw/1.
catch_and_throw(Config) when is_list(Config) ->
- {a,ball} = spawn_eval(fun() -> ok = ?IM:catch_a_ball(),
- catch ?IM:throw_a_ball() end),
-
- %% Throw and catch without any extra outer catch.
-
- ?line process_flag(trap_exit, true),
- ?line Pid1 = spawn_link(fun() -> exit(?IM:catch_a_ball()) end),
- receive
- {'EXIT',Pid1,ok} -> ok;
- {'EXIT',Pid1,Bad1} -> ?line ?t:fail({bad_message,Bad1})
- after 5000 ->
- ?line ?t:fail(timeout)
- end,
+ {a,ball} = spawn_eval(fun() -> ok = ?IM:catch_a_ball(),
+ catch ?IM:throw_a_ball() end),
+
+ %% Throw and catch without any extra outer catch.
+
+ process_flag(trap_exit, true),
+ Pid1 = spawn_link(fun() -> exit(?IM:catch_a_ball()) end),
+ receive
+ {'EXIT',Pid1,ok} -> ok;
+ {'EXIT',Pid1,Bad1} -> ct:fail({bad_message,Bad1})
+ after 5000 ->
+ ct:fail(timeout)
+ end,
- %% Throw without catch.
+ %% Throw without catch.
- ?line Pid2 = spawn_link(fun() -> ?IM:throw_a_ball() end),
- receive
- {'EXIT',Pid2,{{nocatch,{a,ball}},[_|_]}} -> ok;
- {'EXIT',Pid2,Bad2} -> ?line ?t:fail({bad_message,Bad2})
- after 5000 ->
- ?line ?t:fail(timeout)
- end,
+ Pid2 = spawn_link(fun() -> ?IM:throw_a_ball() end),
+ receive
+ {'EXIT',Pid2,{{nocatch,{a,ball}},[_|_]}} -> ok;
+ {'EXIT',Pid2,Bad2} -> ct:fail({bad_message,Bad2})
+ after 5000 ->
+ ct:fail(timeout)
+ end,
- ?line ok = ?IM:more_catch(fun(_) -> ?IM:exit_me() end),
- ?line ok = ?IM:more_catch(fun(_) -> exit({unint, exit}) end),
- ?line {a, ball} = ?IM:more_catch(fun(_) -> ?IM:throw_a_ball() end),
- ?line {b, ball} = ?IM:more_catch(fun(_) -> throw({b,ball}) end),
+ ok = ?IM:more_catch(fun(_) -> ?IM:exit_me() end),
+ ok = ?IM:more_catch(fun(_) -> exit({unint, exit}) end),
+ {a, ball} = ?IM:more_catch(fun(_) -> ?IM:throw_a_ball() end),
+ {b, ball} = ?IM:more_catch(fun(_) -> throw({b,ball}) end),
- ExitInt = {'EXIT',{int,exit}},
- ExitU = {'EXIT',{unint,exit}},
+ ExitInt = {'EXIT',{int,exit}},
+ ExitU = {'EXIT',{unint,exit}},
- ?line ExitInt = (catch ?IM:more_nocatch(fun(_) -> ?IM:exit_me() end)),
- ?line ExitU = (catch ?IM:more_nocatch(fun(_) -> exit({unint, exit}) end)),
- ?line {a, ball} = (catch {error, ?IM:more_nocatch(fun(_) -> ?IM:throw_a_ball() end)}),
- ?line {b, ball} = (catch {error, ?IM:more_nocatch(fun(_) -> throw({b,ball}) end)}),
- ok.
+ ExitInt = (catch ?IM:more_nocatch(fun(_) -> ?IM:exit_me() end)),
+ ExitU = (catch ?IM:more_nocatch(fun(_) -> exit({unint, exit}) end)),
+ {a, ball} = (catch {error, ?IM:more_nocatch(fun(_) -> ?IM:throw_a_ball() end)}),
+ {b, ball} = (catch {error, ?IM:more_nocatch(fun(_) -> throw({b,ball}) end)}),
+ ok.
-external_call(doc) ->
- "Test external calls.";
-external_call(suite) ->
- [];
+%% Test external calls.
external_call(Config) when is_list(Config) ->
- ?line ok = spawn_eval(fun() -> ?IM:external_call_test({some,stupid,data}) end).
+ ok = spawn_eval(fun() -> ?IM:external_call_test({some,stupid,data}) end).
-test_module_info(doc) ->
- "Test the module_info/0,1 functions.";
-test_module_info(suite) ->
- [];
+%% Test the module_info/0,1 functions.
test_module_info(Config) when is_list(Config) ->
- ?line ModInfo = ?IM:module_info(),
- ?line {value,{exports,Exp}} = lists:keysearch(exports, 1, ModInfo),
- ?line {value,{attributes,Attr}} = lists:keysearch(attributes, 1, ModInfo),
- ?line Exp = ?IM:module_info(exports),
- ?line Attr = ?IM:module_info(attributes),
- ?line {value,{stupid_attribute,[{a,b}]}} =
+ ModInfo = ?IM:module_info(),
+ {value,{exports,Exp}} = lists:keysearch(exports, 1, ModInfo),
+ {value,{attributes,Attr}} = lists:keysearch(attributes, 1, ModInfo),
+ Exp = ?IM:module_info(exports),
+ Attr = ?IM:module_info(attributes),
+ {value,{stupid_attribute,[{a,b}]}} =
lists:keysearch(stupid_attribute, 1, Attr),
%% Check exports using a list comprehension in the module itself.
- ?line ok = ?IM:check_exports(Exp),
+ ok = ?IM:check_exports(Exp),
%% Call module_info/0,1 from the module itself.
- ?line ok = ?IM:check_module_info(ModInfo, Exp),
+ ok = ?IM:check_module_info(ModInfo, Exp),
ok.
-apply_interpreted_fun(doc) ->
- "Apply a fun defined in interpreted code.";
-apply_interpreted_fun(suite) -> [];
+%% Apply a fun defined in interpreted code.
apply_interpreted_fun(Config) when is_list(Config) ->
%% Called from uninterpreted code
- ?line F1 = spawn_eval(fun() -> ?IM:give_me_a_fun_0() end),
- ?line perfectly_alright = spawn_eval(fun() -> F1() end),
- ?line ATerm = {a,term},
- ?line F2 = spawn_eval(fun() -> ?IM:give_me_a_fun_0(ATerm) end),
- ?line {ok,ATerm} = spawn_eval(fun() -> F2() end),
+ F1 = spawn_eval(fun() -> ?IM:give_me_a_fun_0() end),
+ perfectly_alright = spawn_eval(fun() -> F1() end),
+ ATerm = {a,term},
+ F2 = spawn_eval(fun() -> ?IM:give_me_a_fun_0(ATerm) end),
+ {ok,ATerm} = spawn_eval(fun() -> F2() end),
%% Called from uninterpreted code, badarity
- ?line {'EXIT',{{badarity,{F1,[snape]}},[{?MODULE,_,_,_}|_]}} =
+ {'EXIT',{{badarity,{F1,[snape]}},[{?MODULE,_,_,_}|_]}} =
spawn_eval(fun() -> F1(snape) end),
%% Called from uninterpreted code, error in fun
- ?line F3 = spawn_eval(fun() -> ?IM:give_me_a_bad_fun() end),
- ?line {'EXIT',{snape,[{?IM,_FunName,_,_}|_]}} =
+ F3 = spawn_eval(fun() -> ?IM:give_me_a_bad_fun() end),
+ {'EXIT',{snape,[{?IM,_FunName,_,_}|_]}} =
spawn_eval(fun() -> F3(snape) end),
%% Called from within interpreted code
- ?line perfectly_alright = spawn_eval(fun() -> ?IM:do_apply(F1) end),
+ perfectly_alright = spawn_eval(fun() -> ?IM:do_apply(F1) end),
%% Called from within interpreted code, badarity
- ?line {'EXIT',{{badarity,{F1,[snape]}},[{?IM,do_apply,_,_}|_]}} =
+ {'EXIT',{{badarity,{F1,[snape]}},[{?IM,do_apply,_,_}|_]}} =
spawn_eval(fun() -> ?IM:do_apply(F1, snape) end),
%% Called from within interpreted code, error in fun
- ?line {'EXIT',{snape,[{?IM,_FunName,_,_}|_]}} =
+ {'EXIT',{snape,[{?IM,_FunName,_,_}|_]}} =
spawn_eval(fun() -> ?IM:do_apply(F3, snape) end),
%% Try some more complex funs.
- ?line F4 = ?IM:give_me_a_fun_1(14, 42),
- ?line {false,yes,yeah,false} =
+ F4 = ?IM:give_me_a_fun_1(14, 42),
+ {false,yes,yeah,false} =
F4({{1,nope},{14,yes},{42,yeah},{100,forget_it}}),
- ?line [this_is_ok,me_too] =
+ [this_is_ok,me_too] =
F4([{-24,no_way},{15,this_is_ok},{1333,forget_me},{37,me_too}]),
%% OTP-5837
%% Try fun with guard containing variable bound in environment
- ?line [yes,no,no,no] = ?IM:otp_5837(1),
+ [yes,no,no,no] = ?IM:otp_5837(1),
ok.
-apply_uninterpreted_fun(doc) ->
- "Apply a fun defined outside interpreted code.";
-apply_uninterpreted_fun(suite) -> [];
+%% Apply a fun defined outside interpreted code.
apply_uninterpreted_fun(Config) when is_list(Config) ->
- ?line F1 = fun(snape) ->
- erlang:error(snape);
- (_Arg) ->
- perfectly_alright
- end,
+ F1 = fun(snape) ->
+ erlang:error(snape);
+ (_Arg) ->
+ perfectly_alright
+ end,
%% Ok
- ?line perfectly_alright =
+ perfectly_alright =
spawn_eval(fun() -> ?IM:do_apply(F1, any_arg) end),
%% Badarity (evaluated in dbg_debugged, which calls erlang:apply/2)
- ?line {'EXIT',{{badarity,{F1,[]}},[{erlang,apply,_,_}|_]}} =
+ {'EXIT',{{badarity,{F1,[]}},[{erlang,apply,_,_}|_]}} =
spawn_eval(fun() -> ?IM:do_apply(F1) end),
%% Error in fun
- ?line {'EXIT',{snape,[{?MODULE,_FunName,_,_}|_]}} =
+ {'EXIT',{snape,[{?MODULE,_FunName,_,_}|_]}} =
spawn_eval(fun() -> ?IM:do_apply(F1, snape) end),
ok.
@@ -254,23 +232,22 @@ apply_uninterpreted_fun(Config) when is_list(Config) ->
%%
interpreted_exit(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Reason = make_ref(),
- ?line Pid = spawn_link(fun() -> ?IM:please_call_exit(Reason) end),
- ?line receive
- {'EXIT',Pid,Reason} ->
- ok;
- {'EXIT',Pid,BadReason} ->
- ?line ?t:fail({bad_message,BadReason})
- after 10000 ->
- ?line ?t:fail(timeout)
- end,
+ process_flag(trap_exit, true),
+ Reason = make_ref(),
+ Pid = spawn_link(fun() -> ?IM:please_call_exit(Reason) end),
+ receive
+ {'EXIT',Pid,Reason} ->
+ ok;
+ {'EXIT',Pid,BadReason} ->
+ ct:fail({bad_message,BadReason})
+ after 10000 ->
+ ct:fail(timeout)
+ end,
ok.
-otp_8310(doc) ->
- "OTP-8310. Bugfixes lc/bc and andalso/orelse.";
+%% OTP-8310. Bugfixes lc/bc and andalso/orelse.
otp_8310(Config) when is_list(Config) ->
- ?line ok = ?IM:otp_8310(),
+ ok = ?IM:otp_8310(),
ok.
applier(M, F, A) ->
@@ -279,17 +256,17 @@ applier(M, F, A) ->
Res.
stacktrace(Config) when is_list(Config) ->
- ?line {done,Stk} = do_eval(Config, stacktrace),
- ?line 13 = length(Stk),
- ?line OldStackTraceFlag = int:stack_trace(),
- ?line int:stack_trace(no_tail),
+ {done,Stk} = do_eval(Config, stacktrace),
+ 13 = length(Stk),
+ OldStackTraceFlag = int:stack_trace(),
+ int:stack_trace(no_tail),
try
- ?line Res = spawn_eval(fun() -> stacktrace:stacktrace() end),
- ?line io:format("\nInterpreted (no_tail):\n~p", [Res]),
- ?line {done,Stk} = Res
- after
- ?line int:stack_trace(OldStackTraceFlag)
- end,
+ Res = spawn_eval(fun() -> stacktrace:stacktrace() end),
+ io:format("\nInterpreted (no_tail):\n~p", [Res]),
+ {done,Stk} = Res
+ after
+ int:stack_trace(OldStackTraceFlag)
+ end,
ok.
maps(Config) when is_list(Config) ->
@@ -300,20 +277,20 @@ maps(Config) when is_list(Config) ->
do_eval(Config, Mod) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line ok = file:set_cwd(DataDir),
+ DataDir = proplists:get_value(data_dir, Config),
+ ok = file:set_cwd(DataDir),
- ?line {ok,Mod} = compile:file(Mod, [report,debug_info]),
- ?line {module,Mod} = code:load_file(Mod),
- ?line CompiledRes = Mod:Mod(),
- ?line ok = io:format("Compiled:\n~p", [CompiledRes]),
+ {ok,Mod} = compile:file(Mod, [report,debug_info]),
+ {module,Mod} = code:load_file(Mod),
+ CompiledRes = Mod:Mod(),
+ ok = io:format("Compiled:\n~p", [CompiledRes]),
io:nl(),
- ?line {module,Mod} = int:i(Mod),
- ?line IntRes = Mod:Mod(),
- ?line ok = io:format("Interpreted:\n~p", [IntRes]),
+ {module,Mod} = int:i(Mod),
+ IntRes = Mod:Mod(),
+ ok = io:format("Interpreted:\n~p", [IntRes]),
- ?line CompiledRes = IntRes.
+ CompiledRes = IntRes.
%%
%% Evaluate in another process, to prevent the test_case process to become
diff --git a/lib/debugger/test/int_eval_SUITE_data/Makefile.src b/lib/debugger/test/int_eval_SUITE_data/Makefile.src
index bc2eb9a37d..01cdb8d7b7 100644
--- a/lib/debugger/test/int_eval_SUITE_data/Makefile.src
+++ b/lib/debugger/test/int_eval_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2010. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl b/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl
index b0ff4ce752..ca7929c10b 100644
--- a/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl
+++ b/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/lc_SUITE.erl b/lib/debugger/test/lc_SUITE.erl
index aca4c4de7c..28415b412b 100644
--- a/lib/debugger/test/lc_SUITE.erl
+++ b/lib/debugger/test/lc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,9 +28,11 @@
basic/1,deeply_nested/1,no_generator/1,
empty_generator/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[basic, deeply_nested, no_generator, empty_generator].
@@ -46,53 +48,50 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
ok.
basic(Config) when is_list(Config) ->
- ?line L0 = lists:seq(1, 10),
- ?line L1 = my_map(fun(X) -> {x,X} end, L0),
- ?line L1 = [{x,X} || X <- L0],
- ?line L0 = my_map(fun({x,X}) -> X end, L1),
- ?line [1,2,3,4,5] = [X || X <- L0, X < 6],
- ?line [4,5,6] = [X || X <- L0, X > 3, X < 7],
- ?line [] = [X || X <- L0, X > 32, X < 7],
- ?line [1,3,5,7,9] = [X || X <- L0, odd(X)],
- ?line [2,4,6,8,10] = [X || X <- L0, not odd(X)],
- ?line [1,3,5,9] = [X || X <- L0, odd(X), X =/= 7],
- ?line [2,4,8,10] = [X || X <- L0, not odd(X), X =/= 6],
+ L0 = lists:seq(1, 10),
+ L1 = my_map(fun(X) -> {x,X} end, L0),
+ L1 = [{x,X} || X <- L0],
+ L0 = my_map(fun({x,X}) -> X end, L1),
+ [1,2,3,4,5] = [X || X <- L0, X < 6],
+ [4,5,6] = [X || X <- L0, X > 3, X < 7],
+ [] = [X || X <- L0, X > 32, X < 7],
+ [1,3,5,7,9] = [X || X <- L0, odd(X)],
+ [2,4,6,8,10] = [X || X <- L0, not odd(X)],
+ [1,3,5,9] = [X || X <- L0, odd(X), X =/= 7],
+ [2,4,8,10] = [X || X <- L0, not odd(X), X =/= 6],
%% Append is specially handled.
- ?line [1,3,5,9,2,4,8,10] = [X || X <- L0, odd(X), X =/= 7] ++
+ [1,3,5,9,2,4,8,10] = [X || X <- L0, odd(X), X =/= 7] ++
[X || X <- L0, not odd(X), X =/= 6],
%% Guards BIFs are evaluated in guard context. Weird, but true.
- ?line [{a,b,true},{x,y,true,true}] = [X || X <- tuple_list(), element(3, X)],
+ [{a,b,true},{x,y,true,true}] = [X || X <- tuple_list(), element(3, X)],
%% Filter expressions with andalso/orelse.
- ?line "abc123" = alphanum("?abc123.;"),
+ "abc123" = alphanum("?abc123.;"),
%% Error cases.
- ?line [] = [{xx,X} || X <- L0, element(2, X) == no_no_no],
- ?line {'EXIT',_} = (catch [X || X <- L1, list_to_atom(X) == dum]),
- ?line [] = [X || X <- L1, X+1 < 2],
- ?line {'EXIT',_} = (catch [X || X <- L1, odd(X)]),
+ [] = [{xx,X} || X <- L0, element(2, X) == no_no_no],
+ {'EXIT',_} = (catch [X || X <- L1, list_to_atom(X) == dum]),
+ [] = [X || X <- L1, X+1 < 2],
+ {'EXIT',_} = (catch [X || X <- L1, odd(X)]),
%% A bad generator has a different exception compared to BEAM.
- ?line {'EXIT',{{bad_generator,x},_}} = (catch [E || E <- id(x)]),
+ {'EXIT',{{bad_generator,x},_}} = (catch [E || E <- id(x)]),
ok.
tuple_list() ->
@@ -122,12 +121,12 @@ deeply_nested_1() ->
X16 <- [4],X17 <- [3],X18 <- [fun() -> X16+X17 end],X19 <- [2],X20 <- [1]].
no_generator(Config) when is_list(Config) ->
- ?line Seq = lists:seq(-10, 17),
- ?line [no_gen_verify(no_gen(A, B), A, B) || A <- Seq, B <- Seq],
+ Seq = lists:seq(-10, 17),
+ [no_gen_verify(no_gen(A, B), A, B) || A <- Seq, B <- Seq],
%% Literal expression, for coverage.
- ?line [a] = [a || true],
- ?line [a,b,c] = [a || true] ++ [b,c],
+ [a] = [a || true],
+ [a,b,c] = [a || true] ++ [b,c],
ok.
no_gen(A, B) ->
@@ -168,7 +167,7 @@ no_gen_verify(Res, A, B) ->
ShouldBe -> ok;
_ ->
io:format("A = ~p; B = ~p; Expected = ~p, actual = ~p", [A,B,ShouldBe,Res]),
- ?t:fail()
+ ct:fail(failed)
end.
no_gen_eval(Fun, Res) ->
@@ -180,7 +179,7 @@ no_gen_eval(Fun, Res) ->
no_gen_one_more(A, B) -> A + 1 =:= B.
empty_generator(Config) when is_list(Config) ->
- ?line [] = [X || {X} <- [], (false or (X/0 > 3))],
+ [] = [X || {X} <- [], (false or (X/0 > 3))],
ok.
id(I) -> I.
diff --git a/lib/debugger/test/line_number_SUITE.erl b/lib/debugger/test/line_number_SUITE.erl
index 6ec5ef5d5a..276473b95f 100644
--- a/lib/debugger/test/line_number_SUITE.erl
+++ b/lib/debugger/test/line_number_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,11 @@
line_numbers/1]).
-export([crash/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
cases().
@@ -47,17 +49,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
@@ -66,6 +65,7 @@ end_per_suite(Config) when is_list(Config) ->
+
%%
%% === Make sure that this is always line 70 ===
%%
diff --git a/lib/debugger/test/map_SUITE.erl b/lib/debugger/test/map_SUITE.erl
index 0ef634f7aa..42484ff723 100644
--- a/lib/debugger/test/map_SUITE.erl
+++ b/lib/debugger/test/map_SUITE.erl
@@ -191,8 +191,8 @@ t_build_and_match_literals(Config) when is_list(Config) ->
id(#{ map_1=>#{ map_2=>#{value_3 => third}, value_2=> second}, value_1=>first}),
%% error case
- %V = 32,
- %{'EXIT',{{badmatch,_},_}} = (catch (#{<<"hi all">> => 1} = id(#{<<"hi",V,"all">> => 1}))),
+ %% V = 32,
+ %%{'EXIT',{{badmatch,_},_}} = (catch (#{<<"hi all">> => 1} = id(#{<<"hi",V,"all">> => 1}))),
{'EXIT',{{badmatch,_},_}} = (catch (#{x:=3,x:=2} = id(#{x=>3}))),
{'EXIT',{{badmatch,_},_}} = (catch (#{x:=2} = id(#{x=>3}))),
{'EXIT',{{badmatch,_},_}} = (catch (#{x:=3} = id({a,b,c}))),
@@ -201,7 +201,7 @@ t_build_and_match_literals(Config) when is_list(Config) ->
ok.
t_build_and_match_literals_large(Config) when is_list(Config) ->
- % normal non-repeating
+ %% normal non-repeating
M0 = id(#{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
@@ -229,7 +229,7 @@ t_build_and_match_literals_large(Config) when is_list(Config) ->
60 = map_size(M0),
60 = maps:size(M0),
- % with repeating
+ %% with repeating
M1 = id(#{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
@@ -265,7 +265,7 @@ t_build_and_match_literals_large(Config) when is_list(Config) ->
60 = map_size(M1),
60 = maps:size(M1),
- % with floats
+ %% with floats
M2 = id(#{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
@@ -318,7 +318,7 @@ t_build_and_match_literals_large(Config) when is_list(Config) ->
90 = map_size(M2),
90 = maps:size(M2),
- % with bignums
+ %% with bignums
M3 = id(#{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
@@ -501,7 +501,7 @@ t_build_and_match_literals_large(Config) when is_list(Config) ->
95 = map_size(M4),
95 = maps:size(M4),
- % call for value
+ %% call for value
M5 = id(#{ 10=>id(a0),20=>b0,30=>id("c0"),"40"=>"d0",<<"50">>=>id("e0"),{["00"]}=>"10",
11=>id(a1),21=>b1,31=>id("c1"),"41"=>"d1",<<"51">>=>id("e1"),{["01"]}=>"11",
@@ -681,7 +681,7 @@ t_map_size(Config) when is_list(Config) ->
map_is_size(M,N) when map_size(M) =:= N -> true;
map_is_size(_,_) -> false.
-% test map updates without matching
+%% test map updates without matching
t_update_literals(Config) when is_list(Config) ->
Map = #{x=>1,y=>2,z=>3,q=>4},
#{x:="d",q:="4"} = loop_update_literals_x_q(Map, [
@@ -751,7 +751,7 @@ loop_update_literals_x_q(Map, []) -> Map;
loop_update_literals_x_q(Map, [{X,Q}|Vs]) ->
loop_update_literals_x_q(Map#{q=>Q,x=>X},Vs).
-% test map updates with matching
+%% test map updates with matching
t_match_and_update_literals(Config) when is_list(Config) ->
Map = #{ x=>0,y=>"untouched",z=>"also untouched",q=>1,
#{ "one" => small, map => key } => "small map key 1" },
@@ -1413,7 +1413,7 @@ t_guard_fun(Config) when is_list(Config) ->
t_map_sort_literals(Config) when is_list(Config) ->
- % test relation
+ %% test relation
%% size order
true = #{ a => 1, b => 2} < id(#{ a => 1, b => 1, c => 1}),
@@ -1983,10 +1983,10 @@ t_ets(_Config) ->
[] = ets:select(Tid,[{{'$1','_'},[{'==','$1',#{ b => c }}],['$_']}]),
%% Test match with map of different size
- %[{#{ a := b },_}] = ets:select(Tid,[{{#{ b => c },'_'},[],['$_']}]),
+ %%[{#{ a := b },_}] = ets:select(Tid,[{{#{ b => c },'_'},[],['$_']}]),
%%% Test match with don't care value
- %[{#{ a := b },_}] = ets:select(Tid,[{{#{ b => '_' },'_'},[],['$_']}]),
+ %%[{#{ a := b },_}] = ets:select(Tid,[{{#{ b => '_' },'_'},[],['$_']}]),
%% Test is_map bif
101 = length(ets:select(Tid,[{'$1',[{is_map,{element,1,'$1'}}],['$1']}])),
@@ -2138,13 +2138,13 @@ t_update_exact_variables(Config) when is_list(Config) ->
t_nested_pattern_expressions(Config) when is_list(Config) ->
K1 = id("hello"),
- %K2 = id({ok}),
+ %% K2 = id({ok}),
[_,_,#{ <<"hi">> := wat, K1 := 42 }|_] = id([k,k,#{<<"hi">> => wat, K1 => 42}]),
[_,_,#{ -1 := wat, K1 := 42 }|_] = id([k,k,#{-1 => wat, K1 => 42}]),
[_,_,{#{ -1 := #{ {-3,<<0:300>>} := V1 }, K1 := 42 },3}|_] = id([k,k,{#{-1 => #{{-3,<<0:300>>}=>"hi"}, K1 => 42},3}]),
"hi" = V1,
- %[k,#{ {-1,K1,[]} := {wat,K1}, K2 := 42 }|_] = id([k,#{{-1,K1,[]} => {wat,K1}, K2 => 42}]),
- %[k,#{ [-1,K2,[]] := {wat,K1}, K1 := 42 }|_] = id([k,#{[-1,K2,[]] => {wat,K1}, K1 => 42}]),
+ %%[k,#{ {-1,K1,[]} := {wat,K1}, K2 := 42 }|_] = id([k,#{{-1,K1,[]} => {wat,K1}, K2 => 42}]),
+ %%[k,#{ [-1,K2,[]] := {wat,K1}, K1 := 42 }|_] = id([k,#{[-1,K2,[]] => {wat,K1}, K1 => 42}]),
ok.
t_guard_update_variables(Config) when is_list(Config) ->
@@ -2219,7 +2219,7 @@ map_guard_sequence_mixed(K1,K2,M) ->
t_frequency_table(Config) when is_list(Config) ->
- random:seed({13,1337,54}), % pseudo random
+ rand:seed(exsplus, {13,1337,54}), % pseudo random
N = 1000,
Ts = rand_terms(N),
#{ n:=N, tf := Tf } = frequency_table(Ts,#{ n=>0, tf => #{}}),
@@ -2262,7 +2262,7 @@ rand_terms(0) -> [];
rand_terms(N) -> [rand_term()|rand_terms(N-1)].
rand_term() ->
- case random:uniform(6) of
+ case rand:uniform(6) of
1 -> rand_binary();
2 -> rand_number();
3 -> rand_atom();
@@ -2272,21 +2272,21 @@ rand_term() ->
end.
rand_binary() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> <<>>;
2 -> <<"hi">>;
3 -> <<"message text larger than 64 bytes. yep, message text larger than 64 bytes.">>
end.
rand_number() ->
- case random:uniform(3) of
- 1 -> random:uniform(5);
- 2 -> float(random:uniform(5));
- 3 -> 1 bsl (63 + random:uniform(3))
+ case rand:uniform(3) of
+ 1 -> rand:uniform(5);
+ 2 -> float(rand:uniform(5));
+ 3 -> 1 bsl (63 + rand:uniform(3))
end.
rand_atom() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> hi;
2 -> some_atom;
3 -> some_other_atom
@@ -2294,21 +2294,21 @@ rand_atom() ->
rand_tuple() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> {ok, rand_term()}; % careful
2 -> {1, 2, 3};
3 -> {<<"yep">>, 1337}
end.
rand_list() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> "hi";
2 -> [1,rand_term()]; % careful
3 -> [improper|list]
end.
rand_map() ->
- case random:uniform(3) of
+ case rand:uniform(3) of
1 -> #{ hi => 3 };
2 -> #{ wat => rand_term(), other => 3 }; % careful
3 -> #{ hi => 42, other => 42, yet_anoter => 1337 }
@@ -2335,7 +2335,7 @@ t_build_and_match_empty_val(Config) when is_list(Config) ->
{'EXIT',{function_clause,_}} -> ok;
{'EXIT', {{case_clause,_},_}} -> {comment,inlined};
Other ->
- test_server:fail({no_match, Other})
+ ct:fail({no_match, Other})
end.
t_build_and_match_val(Config) when is_list(Config) ->
@@ -2353,7 +2353,7 @@ t_build_and_match_val(Config) when is_list(Config) ->
{'EXIT',{function_clause,_}} -> ok;
{'EXIT', {{case_clause,_},_}} -> {comment,inlined};
Other ->
- test_server:fail({no_match, Other})
+ ct:fail({no_match, Other})
end.
t_build_and_match_nil(Config) when is_list(Config) ->
diff --git a/lib/debugger/test/record_SUITE.erl b/lib/debugger/test/record_SUITE.erl
index 2f663e2dfc..0edb3786be 100644
--- a/lib/debugger/test/record_SUITE.erl
+++ b/lib/debugger/test/record_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,14 +23,16 @@
-module(record_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
init_per_testcase/2,end_per_testcase/2,
init_per_suite/1,end_per_suite/1,
errors/1,record_test/1,eval_once/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
cases().
@@ -50,17 +52,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
@@ -72,19 +71,19 @@ end_per_suite(Config) when is_list(Config) ->
errors(Config) when is_list(Config) ->
Foo = #foo{a=1,b=2,c=3,d=4},
- ?line #foo{a=19,b=42,c=3,d=4} = update_foo(Foo, 19, 42),
+ #foo{a=19,b=42,c=3,d=4} = update_foo(Foo, 19, 42),
- ?line {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19)),
- ?line {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35)),
- ?line {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35, 17)),
- ?line {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35, 17, 42)),
+ {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19)),
+ {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35)),
+ {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35, 17)),
+ {'EXIT',{{badrecord,bar},_}} = (catch update_foo_bar(Foo, 19, 35, 17, 42)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35, 17)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35, 17, 42)),
- ?line {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19,
- 35, 17, 42, -2)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35, 17)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19, 35, 17, 42)),
+ {'EXIT',{{badrecord,barf},_}} = (catch update_foo_barf(Foo, 19,
+ 35, 17, 42, -2)),
ok.
@@ -119,134 +118,134 @@ update_foo_barf(#foo{}=R, A, _B, C, D, E) ->
R#barf{a=A,b=A,c=C,d=D,e=E}.
--define(TrueGuard(Expr), if Expr -> ok; true -> ?t:fail() end).
--define(FalseGuard(Expr), if Expr -> ?t:fail(); true -> ok end).
+-define(TrueGuard(Expr), if Expr -> ok; true -> ct:fail(failed) end).
+-define(FalseGuard(Expr), if Expr -> ct:fail(failed); true -> ok end).
record_test(Config) when is_list(Config) ->
- ?line true = is_record(#foo{}, foo),
- ?line false = is_record(#foo{}, barf),
- ?line false = is_record({foo}, foo),
+ true = is_record(#foo{}, foo),
+ false = is_record(#foo{}, barf),
+ false = is_record({foo}, foo),
- ?line true = erlang:is_record(#foo{}, foo),
- ?line false = erlang:is_record(#foo{}, barf),
- ?line false = erlang:is_record({foo}, foo),
+ true = erlang:is_record(#foo{}, foo),
+ false = erlang:is_record(#foo{}, barf),
+ false = erlang:is_record({foo}, foo),
- ?line false = is_record([], foo),
- ?line false = is_record(Config, foo),
+ false = is_record([], foo),
+ false = is_record(Config, foo),
- ?line ?TrueGuard(is_record(#foo{}, foo)),
- ?line ?FalseGuard(is_record(#foo{}, barf)),
- ?line ?FalseGuard(is_record({foo}, foo)),
+ ?TrueGuard(is_record(#foo{}, foo)),
+ ?FalseGuard(is_record(#foo{}, barf)),
+ ?FalseGuard(is_record({foo}, foo)),
- ?line ?TrueGuard(erlang:is_record(#foo{}, foo)),
- ?line ?FalseGuard(erlang:is_record(#foo{}, barf)),
- ?line ?FalseGuard(erlang:is_record({foo}, foo)),
+ ?TrueGuard(erlang:is_record(#foo{}, foo)),
+ ?FalseGuard(erlang:is_record(#foo{}, barf)),
+ ?FalseGuard(erlang:is_record({foo}, foo)),
- ?line ?FalseGuard(is_record([], foo)),
- ?line ?FalseGuard(is_record(Config, foo)),
+ ?FalseGuard(is_record([], foo)),
+ ?FalseGuard(is_record(Config, foo)),
%% 'not is_record/2' to test guard optimization.
- ?line ?FalseGuard(not is_record(#foo{}, foo)),
- ?line ?TrueGuard(not is_record(#foo{}, barf)),
- ?line ?TrueGuard(not is_record({foo}, foo)),
+ ?FalseGuard(not is_record(#foo{}, foo)),
+ ?TrueGuard(not is_record(#foo{}, barf)),
+ ?TrueGuard(not is_record({foo}, foo)),
- ?line ?FalseGuard(not erlang:is_record(#foo{}, foo)),
- ?line ?TrueGuard(not erlang:is_record(#foo{}, barf)),
- ?line ?TrueGuard(not erlang:is_record({foo}, foo)),
+ ?FalseGuard(not erlang:is_record(#foo{}, foo)),
+ ?TrueGuard(not erlang:is_record(#foo{}, barf)),
+ ?TrueGuard(not erlang:is_record({foo}, foo)),
Foo = id(#foo{}),
- ?line ?FalseGuard(not erlang:is_record(Foo, foo)),
- ?line ?TrueGuard(not erlang:is_record(Foo, barf)),
+ ?FalseGuard(not erlang:is_record(Foo, foo)),
+ ?TrueGuard(not erlang:is_record(Foo, barf)),
- ?line ?TrueGuard(not is_record(Config, foo)),
+ ?TrueGuard(not is_record(Config, foo)),
- ?line ?TrueGuard(not is_record(a, foo)),
- ?line ?TrueGuard(not is_record([], foo)),
+ ?TrueGuard(not is_record(a, foo)),
+ ?TrueGuard(not is_record([], foo)),
%% Pass non-literal first argument.
- ?line true = is_record(id(#foo{}), foo),
- ?line false = is_record(id(#foo{}), barf),
- ?line false = is_record(id({foo}), foo),
+ true = is_record(id(#foo{}), foo),
+ false = is_record(id(#foo{}), barf),
+ false = is_record(id({foo}), foo),
- ?line true = erlang:is_record(id(#foo{}), foo),
- ?line false = erlang:is_record(id(#foo{}), barf),
- ?line false = erlang:is_record(id({foo}), foo),
+ true = erlang:is_record(id(#foo{}), foo),
+ false = erlang:is_record(id(#foo{}), barf),
+ false = erlang:is_record(id({foo}), foo),
NoRec1 = id(blurf),
NoRec2 = id([]),
- ?line ?TrueGuard(not is_record(NoRec1, foo)),
- ?line ?TrueGuard(not is_record(NoRec2, foo)),
+ ?TrueGuard(not is_record(NoRec1, foo)),
+ ?TrueGuard(not is_record(NoRec2, foo)),
%% Force the use of guard bifs by using the 'xor' operation.
False = id(false),
- ?line ?TrueGuard(is_record(#foo{}, foo) xor False),
- ?line ?FalseGuard(is_record(#foo{}, barf) xor False),
- ?line ?FalseGuard(is_record({foo}, foo) xor False ),
+ ?TrueGuard(is_record(#foo{}, foo) xor False),
+ ?FalseGuard(is_record(#foo{}, barf) xor False),
+ ?FalseGuard(is_record({foo}, foo) xor False ),
- ?line ?TrueGuard(is_record(Foo, foo) xor False),
- ?line ?FalseGuard(is_record(Foo, barf) xor False),
+ ?TrueGuard(is_record(Foo, foo) xor False),
+ ?FalseGuard(is_record(Foo, barf) xor False),
%% Implicit guards by using a list comprehension.
List = id([1,#foo{a=2},3,#bar{d=4},5,#foo{a=6},7]),
- ?line [#foo{a=2},#foo{a=6}] = [X || X <- List, is_record(X, foo)],
- ?line [#bar{d=4}] = [X || X <- List, is_record(X, bar)],
- ?line [1,#foo{a=2},3,5,#foo{a=6},7] =
+ [#foo{a=2},#foo{a=6}] = [X || X <- List, is_record(X, foo)],
+ [#bar{d=4}] = [X || X <- List, is_record(X, bar)],
+ [1,#foo{a=2},3,5,#foo{a=6},7] =
[X || X <- List, not is_record(X, bar)],
- ?line [1,3,5,7] =
+ [1,3,5,7] =
[X || X <- List, ((not is_record(X, bar)) and (not is_record(X, foo)))],
- ?line [#foo{a=2},#bar{d=4},#foo{a=6}] =
+ [#foo{a=2},#bar{d=4},#foo{a=6}] =
[X || X <- List, ((is_record(X, bar)) or (is_record(X, foo)))],
- ?line [1,3,#bar{d=4}] =
+ [1,3,#bar{d=4}] =
[X || X <- List, ((is_record(X, bar)) or (X < 5))],
- ?line MyList = [#foo{a=3},x,[],{a,b}],
- ?line [#foo{a=3}] = [X || X <- MyList, is_record(X, foo)],
- ?line [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo)],
- ?line [#foo{a=3}] = [X || X <- MyList, begin is_record(X, foo) end],
- ?line [x,[],{a,b}] = [X || X <- MyList, begin not is_record(X, foo) end],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, is_record(X, foo) or
- not is_binary(X)],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
- not is_binary(X)],
- ?line [#foo{a=3}] = [X || X <- MyList, is_record(X, foo) or is_reference(X)],
- ?line [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
- is_reference(X)],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
- begin is_record(X, foo) or
- not is_binary(X) end],
- ?line [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
- begin not is_record(X, foo) or
- not is_binary(X) end],
- ?line [#foo{a=3}] = [X || X <- MyList,
- begin is_record(X, foo) or is_reference(X) end],
- ?line [x,[],{a,b}] = [X || X <- MyList,
- begin not is_record(X, foo) or
- is_reference(X) end],
+ MyList = [#foo{a=3},x,[],{a,b}],
+ [#foo{a=3}] = [X || X <- MyList, is_record(X, foo)],
+ [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo)],
+ [#foo{a=3}] = [X || X <- MyList, begin is_record(X, foo) end],
+ [x,[],{a,b}] = [X || X <- MyList, begin not is_record(X, foo) end],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, is_record(X, foo) or
+ not is_binary(X)],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
+ not is_binary(X)],
+ [#foo{a=3}] = [X || X <- MyList, is_record(X, foo) or is_reference(X)],
+ [x,[],{a,b}] = [X || X <- MyList, not is_record(X, foo) or
+ is_reference(X)],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
+ begin is_record(X, foo) or
+ not is_binary(X) end],
+ [#foo{a=3},x,[],{a,b}] = [X || X <- MyList,
+ begin not is_record(X, foo) or
+ not is_binary(X) end],
+ [#foo{a=3}] = [X || X <- MyList,
+ begin is_record(X, foo) or is_reference(X) end],
+ [x,[],{a,b}] = [X || X <- MyList,
+ begin not is_record(X, foo) or
+ is_reference(X) end],
ok.
eval_once(Config) when is_list(Config) ->
- ?line once(fun(GetRec) ->
- true = erlang:is_record(GetRec(), foo)
- end, #foo{}),
- ?line once(fun(GetRec) ->
- (GetRec())#foo{a=1}
- end, #foo{}),
- ?line once(fun(GetRec) ->
- (GetRec())#foo{a=1,b=2}
- end, #foo{}),
- ?line once(fun(GetRec) ->
- (GetRec())#foo{a=1,b=2,c=3}
- end, #foo{}),
- ?line once(fun(GetRec) ->
- (GetRec())#foo{a=1,b=2,c=3,d=4}
- end, #foo{}),
+ once(fun(GetRec) ->
+ true = erlang:is_record(GetRec(), foo)
+ end, #foo{}),
+ once(fun(GetRec) ->
+ (GetRec())#foo{a=1}
+ end, #foo{}),
+ once(fun(GetRec) ->
+ (GetRec())#foo{a=1,b=2}
+ end, #foo{}),
+ once(fun(GetRec) ->
+ (GetRec())#foo{a=1,b=2,c=3}
+ end, #foo{}),
+ once(fun(GetRec) ->
+ (GetRec())#foo{a=1,b=2,c=3,d=4}
+ end, #foo{}),
ok.
once(Test, Record) ->
@@ -260,7 +259,7 @@ once(Test, Record) ->
1 -> ok;
N ->
io:format("Evaluated ~w times\n", [N]),
- ?t:fail()
+ ct:fail(failed)
end,
Result.
diff --git a/lib/debugger/test/test_lib.erl b/lib/debugger/test/test_lib.erl
index 2d3e772fc8..b9ac486694 100644
--- a/lib/debugger/test/test_lib.erl
+++ b/lib/debugger/test/test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/debugger/test/trycatch_SUITE.erl b/lib/debugger/test/trycatch_SUITE.erl
index 7fdd98fc71..2857cac9a3 100644
--- a/lib/debugger/test/trycatch_SUITE.erl
+++ b/lib/debugger/test/trycatch_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,9 +28,11 @@
catch_oops/1,after_oops/1,eclectic/1,rethrow/1,
nested_of/1,nested_catch/1,nested_after/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
cases().
@@ -52,49 +54,46 @@ cases() ->
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
- Dog = test_server:timetrap(?t:minutes(1)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) when is_list(Config) ->
- ?line test_lib:interpret(?MODULE),
- ?line true = lists:member(?MODULE, int:interpreted()),
+ test_lib:interpret(?MODULE),
+ true = lists:member(?MODULE, int:interpreted()),
Config.
end_per_suite(Config) when is_list(Config) ->
ok.
basic(Conf) when is_list(Conf) ->
- ?line 2 =
+ 2 =
try my_div(4, 2)
catch
Class:Reason -> {Class,Reason}
end,
- ?line error =
+ error =
try my_div(1, 0)
catch
error:badarith -> error
end,
- ?line error =
+ error =
try 1/0
catch
error:badarith -> error
end,
- ?line ok =
+ ok =
try my_add(53, atom)
catch
error:badarith -> ok
end,
- ?line exit_nisse =
+ exit_nisse =
try exit(nisse)
catch
exit:nisse -> exit_nisse
end,
- ?line ok =
+ ok =
try throw(kalle)
catch
kalle -> ok
@@ -103,26 +102,26 @@ basic(Conf) when is_list(Conf) ->
%% Try some stuff where the compiler will optimize away the try.
V = id({a,variable}),
- ?line V = try V catch nisse -> error end,
- ?line 42 = try 42 catch nisse -> error end,
- ?line [V] = try [V] catch nisse -> error end,
- ?line {ok,V} = try {ok,V} catch nisse -> error end,
+ V = try V catch nisse -> error end,
+ 42 = try 42 catch nisse -> error end,
+ [V] = try [V] catch nisse -> error end,
+ {ok,V} = try {ok,V} catch nisse -> error end,
%% Same idea, but use an after too.
- ?line V = try V catch nisse -> error after after_call() end,
- ?line after_clean(),
- ?line 42 = try 42 after after_call() end,
- ?line after_clean(),
- ?line [V] = try [V] catch nisse -> error after after_call() end,
- ?line after_clean(),
- ?line {ok,V} = try {ok,V} after after_call() end,
+ V = try V catch nisse -> error after after_call() end,
+ after_clean(),
+ 42 = try 42 after after_call() end,
+ after_clean(),
+ [V] = try [V] catch nisse -> error after after_call() end,
+ after_clean(),
+ {ok,V} = try {ok,V} after after_call() end,
%% Try/of
- ?line ok = try V of
- {a,variable} -> ok
- catch nisse -> erro
- end,
+ ok = try V of
+ {a,variable} -> ok
+ catch nisse -> erro
+ end,
ok.
@@ -133,24 +132,24 @@ after_clean() ->
after_was_called = erase(basic).
lean_throw(Conf) when is_list(Conf) ->
- ?line {throw,kalle} =
+ {throw,kalle} =
try throw(kalle)
catch
Kalle -> {throw,Kalle}
end,
- ?line {exit,kalle} =
+ {exit,kalle} =
try exit(kalle)
catch
Throw1 -> {throw,Throw1};
exit:Reason1 -> {exit,Reason1}
end,
- ?line {exit,kalle} =
+ {exit,kalle} =
try exit(kalle)
catch
exit:Reason2 -> {exit,Reason2};
Throw2 -> {throw,Throw2}
end,
- ?line {exit,kalle} =
+ {exit,kalle} =
try try exit(kalle)
catch
Throw3 -> {throw,Throw3}
@@ -161,25 +160,25 @@ lean_throw(Conf) when is_list(Conf) ->
ok.
try_of(Conf) when is_list(Conf) ->
- ?line {ok,{some,content}} =
+ {ok,{some,content}} =
try_of_1({value,{good,{some,content}}}),
- ?line {error,[other,content]} =
+ {error,[other,content]} =
try_of_1({value,{bad,[other,content]}}),
- ?line {caught,{exit,{ex,it,[reason]}}} =
+ {caught,{exit,{ex,it,[reason]}}} =
try_of_1({exit,{ex,it,[reason]}}),
- ?line {caught,{throw,[term,{in,a,{tuple}}]}} =
+ {caught,{throw,[term,{in,a,{tuple}}]}} =
try_of_1({throw,[term,{in,a,{tuple}}]}),
- ?line {caught,{error,[bad,arg]}} =
+ {caught,{error,[bad,arg]}} =
try_of_1({error,[bad,arg]}),
- ?line {caught,{error,badarith}} =
+ {caught,{error,badarith}} =
try_of_1({'div',{1,0}}),
- ?line {caught,{error,badarith}} =
+ {caught,{error,badarith}} =
try_of_1({'add',{a,0}}),
- ?line {caught,{error,badarg}} =
+ {caught,{error,badarg}} =
try_of_1({'abs',x}),
- ?line {caught,{error,function_clause}} =
+ {caught,{error,function_clause}} =
try_of_1(illegal),
- ?line {error,{try_clause,{some,other_garbage}}} =
+ {error,{try_clause,{some,other_garbage}}} =
try try_of_1({value,{some,other_garbage}})
catch error:Reason -> {error,Reason}
end,
@@ -191,33 +190,33 @@ try_of_1(X) ->
{bad,Y} -> {error,Y}
catch
Class:Reason ->
- {caught,{Class,Reason}}
+ {caught,{Class,Reason}}
end.
try_after(Conf) when is_list(Conf) ->
- ?line {{ok,[some,value],undefined},finalized} =
+ {{ok,[some,value],undefined},finalized} =
try_after_1({value,{ok,[some,value]}},finalized),
- ?line {{error,badarith,undefined},finalized} =
+ {{error,badarith,undefined},finalized} =
try_after_1({'div',{1,0}},finalized),
- ?line {{error,badarith,undefined},finalized} =
+ {{error,badarith,undefined},finalized} =
try_after_1({'add',{1,a}},finalized),
- ?line {{error,badarg,undefined},finalized} =
+ {{error,badarg,undefined},finalized} =
try_after_1({'abs',a},finalized),
- ?line {{error,[the,{reason}],undefined},finalized} =
+ {{error,[the,{reason}],undefined},finalized} =
try_after_1({error,[the,{reason}]},finalized),
- ?line {{throw,{thrown,[reason]},undefined},finalized} =
+ {{throw,{thrown,[reason]},undefined},finalized} =
try_after_1({throw,{thrown,[reason]}},finalized),
- ?line {{exit,{exited,{reason}},undefined},finalized} =
+ {{exit,{exited,{reason}},undefined},finalized} =
try_after_1({exit,{exited,{reason}}},finalized),
- ?line {{error,function_clause,undefined},finalized} =
+ {{error,function_clause,undefined},finalized} =
try_after_1(function_clause,finalized),
- ?line ok =
+ ok =
try try_after_1({'add',{1,1}}, finalized)
catch
error:{try_clause,2} -> ok
end,
- ?line finalized = erase(try_after),
- ?line ok =
+ finalized = erase(try_after),
+ ok =
try try foo({exit,[reaso,{n}]})
after put(try_after, finalized)
end
@@ -244,7 +243,7 @@ try_after_1(X, Y) ->
after_bind(Conf) when is_list(Conf) ->
V = [make_ref(),self()|value],
- ?line {value,{value,V}} =
+ {value,{value,V}} =
after_bind_1({value,V}, V, {value,V}),
ok.
@@ -268,35 +267,35 @@ after_bind_1(X, V, Y) ->
-endif.
catch_oops(Conf) when is_list(Conf) ->
- V = {v,[a,l|u],{e},self()},
- ?line {value,V} = catch_oops_1({value,V}),
- ?line {value,1} = catch_oops_1({'div',{1,1}}),
- ?line {error,badarith} = catch_oops_1({'div',{1,0}}),
- ?line {error,function_clause} = catch_oops_1(function_clause),
- ?line {throw,V} = catch_oops_1({throw,V}),
- ?line {exit,V} = catch_oops_1({exit,V}),
- ok.
+ V = {v,[a,l|u],{e},self()},
+ {value,V} = catch_oops_1({value,V}),
+ {value,1} = catch_oops_1({'div',{1,1}}),
+ {error,badarith} = catch_oops_1({'div',{1,0}}),
+ {error,function_clause} = catch_oops_1(function_clause),
+ {throw,V} = catch_oops_1({throw,V}),
+ {exit,V} = catch_oops_1({exit,V}),
+ ok.
catch_oops_1(X) ->
- Ref = make_ref(),
- try try foo({error,Ref})
- catch
- error:Ref ->
- foo(X)
- end of
- Value -> {value,Value}
- catch
- Class:Data -> {Class,Data}
- end.
+ Ref = make_ref(),
+ try try foo({error,Ref})
+ catch
+ error:Ref ->
+ foo(X)
+ end of
+ Value -> {value,Value}
+ catch
+ Class:Data -> {Class,Data}
+ end.
after_oops(Conf) when is_list(Conf) ->
V = {self(),make_ref()},
- ?line {{value,V},V} = after_oops_1({value,V}, {value,V}),
- ?line {{exit,V},V} = after_oops_1({exit,V}, {value,V}),
- ?line {{error,V},undefined} = after_oops_1({value,V}, {error,V}),
- ?line {{error,function_clause},undefined} =
+ {{value,V},V} = after_oops_1({value,V}, {value,V}),
+ {{exit,V},V} = after_oops_1({exit,V}, {value,V}),
+ {{error,V},undefined} = after_oops_1({value,V}, {error,V}),
+ {{error,function_clause},undefined} =
after_oops_1({exit,V}, function_clause),
ok.
@@ -317,37 +316,37 @@ after_oops_1(X, Y) ->
eclectic(Conf) when is_list(Conf) ->
V = {make_ref(),3.1415926535,[[]|{}]},
- ?line {{value,{value,V},V},V} =
+ {{value,{value,V},V},V} =
eclectic_1({foo,{value,{value,V}}}, undefined, {value,V}),
- ?line {{'EXIT',{V,[{?MODULE,foo,_,_}|_]}},V} =
+ {{'EXIT',{V,[{?MODULE,foo,_,_}|_]}},V} =
eclectic_1({catch_foo,{error,V}}, undefined, {value,V}),
- ?line {{error,{exit,V},{'EXIT',V}},V} =
+ {{error,{exit,V},{'EXIT',V}},V} =
eclectic_1({foo,{error,{exit,V}}}, error, {value,V}),
- ?line {{value,{value,V},V},{'EXIT',{badarith,[{?MODULE,my_add,_,_}|_]}}} =
+ {{value,{value,V},V},{'EXIT',{badarith,[{?MODULE,my_add,_,_}|_]}}} =
eclectic_1({foo,{value,{value,V}}}, undefined, {'add',{0,a}}),
- ?line {{'EXIT',V},V} =
+ {{'EXIT',V},V} =
eclectic_1({catch_foo,{exit,V}}, undefined, {throw,V}),
- ?line {{error,{'div',{1,0}},{'EXIT',{badarith,[{?MODULE,my_div,_,_}|_]}}},
- {'EXIT',V}} =
+ {{error,{'div',{1,0}},{'EXIT',{badarith,[{?MODULE,my_div,_,_}|_]}}},
+ {'EXIT',V}} =
eclectic_1({foo,{error,{'div',{1,0}}}}, error, {exit,V}),
- ?line {{{error,V},{'EXIT',{V,[{?MODULE,foo,_,_}|_]}}},{'EXIT',V}} =
+ {{{error,V},{'EXIT',{V,[{?MODULE,foo,_,_}|_]}}},{'EXIT',V}} =
eclectic_1({catch_foo,{throw,{error,V}}}, undefined, {exit,V}),
%%
- ?line {{value,{value,{value,V},V}},V} =
+ {{value,{value,{value,V},V}},V} =
eclectic_2({value,{value,V}}, undefined, {value,V}),
- ?line {{value,{throw,{value,V},V}},V} =
+ {{value,{throw,{value,V},V}},V} =
eclectic_2({throw,{value,V}}, throw, {value,V}),
- ?line {{caught,{'EXIT',V}},undefined} =
+ {{caught,{'EXIT',V}},undefined} =
eclectic_2({value,{value,V}}, undefined, {exit,V}),
- ?line {{caught,{'EXIT',{V,[{?MODULE,foo,_,_}|_]}}},undefined} =
+ {{caught,{'EXIT',{V,[{?MODULE,foo,_,_}|_]}}},undefined} =
eclectic_2({error,{value,V}}, throw, {error,V}),
- ?line {{caught,{'EXIT',{badarg,[{erlang,abs,[V],_}|_]}}},V} =
+ {{caught,{'EXIT',{badarg,[{erlang,abs,[V],_}|_]}}},V} =
eclectic_2({value,{'abs',V}}, undefined, {value,V}),
- ?line {{caught,{'EXIT',{badarith,[{?MODULE,my_add,_,_}|_]}}},V} =
+ {{caught,{'EXIT',{badarith,[{?MODULE,my_add,_,_}|_]}}},V} =
eclectic_2({exit,{'add',{0,a}}}, exit, {value,V}),
- ?line {{caught,{'EXIT',V}},undefined} =
+ {{caught,{'EXIT',V}},undefined} =
eclectic_2({value,{error,V}}, undefined, {exit,V}),
- ?line {{caught,{'EXIT',{V,[{?MODULE,foo,_,_}|_]}}},undefined} =
+ {{caught,{'EXIT',{V,[{?MODULE,foo,_,_}|_]}}},undefined} =
eclectic_2({throw,{'div',{1,0}}}, throw, {error,V}),
ok.
@@ -375,42 +374,42 @@ eclectic_2(X, C, Y) ->
Catch =
case
catch
- {Done,
- try foo(X) of
- V -> {value,V,foo(V)}
- catch
- C:D -> {C,D,foo(D)}
- after
- put(eclectic, foo(Y))
- end} of
- {Done,Z} -> {value,Z};
- Z -> {caught,Z}
- end,
+ {Done,
+ try foo(X) of
+ V -> {value,V,foo(V)}
+ catch
+ C:D -> {C,D,foo(D)}
+ after
+ put(eclectic, foo(Y))
+ end} of
+ {Done,Z} -> {value,Z};
+ Z -> {caught,Z}
+ end,
{Catch,erase(eclectic)}.
rethrow(Conf) when is_list(Conf) ->
V = {a,[b,{c,self()},make_ref]},
- ?line {value2,value1} =
+ {value2,value1} =
rethrow_1({value,V}, V),
- ?line {caught2,{error,V}} =
+ {caught2,{error,V}} =
rethrow_2({error,V}, undefined),
- ?line {caught2,{exit,V}} =
+ {caught2,{exit,V}} =
rethrow_1({exit,V}, error),
- ?line {caught2,{throw,V}} =
+ {caught2,{throw,V}} =
rethrow_1({throw,V}, undefined),
- ?line {caught2,{throw,V}} =
+ {caught2,{throw,V}} =
rethrow_2({throw,V}, undefined),
- ?line {caught2,{error,badarith}} =
+ {caught2,{error,badarith}} =
rethrow_1({'add',{0,a}}, throw),
- ?line {caught2,{error,function_clause}} =
+ {caught2,{error,function_clause}} =
rethrow_2(function_clause, undefined),
- ?line {caught2,{error,{try_clause,V}}} =
+ {caught2,{error,{try_clause,V}}} =
rethrow_1({value,V}, exit),
- ?line {value2,{caught1,V}} =
+ {value2,{caught1,V}} =
rethrow_1({error,V}, error),
- ?line {value2,{caught1,V}} =
+ {value2,{caught1,V}} =
rethrow_1({exit,V}, exit),
- ?line {value2,caught1} =
+ {value2,caught1} =
rethrow_2({throw,V}, V),
ok.
@@ -440,91 +439,91 @@ rethrow_2(X, C1) ->
nested_of(Conf) when is_list(Conf) ->
V = {[self()|make_ref()],1.4142136},
- ?line {{value,{value1,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{value,{value1,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,{V,x1}},
{value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{throw,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{throw,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,{V,x1}},
{throw,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,{V,x1}},
{throw,{V,x2}}, {'div',{1,0}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,badarith}},
+ undefined,
+ undefined,
+ finalized} =
nested_of_1({{value,{V,x1}},void,{V,x1}},
{throw,{V,x2}}, {'div',{1,0}}, {'add',{0,b}}),
%%
- ?line {{caught,{error,{try_clause,{V,x1}}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,{try_clause,{V,x1}}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,try_clause},
void, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{exit,{V,x3}}},
- undefined,
- {V,x4},
- finalized} =
+ {{caught,{exit,{V,x3}}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_of_1({{value,{V,x1}},void,try_clause},
void, {exit,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{throw,{V,x4}}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{throw,{V,x4}}},
+ undefined,
+ undefined,
+ finalized} =
nested_of_1({{value,{V,x1}},void,try_clause},
void, {exit,{V,x3}}, {throw,{V,x4}}),
%%
- ?line {{value,{caught1,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{value,{caught1,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{error,{V,x1}},error,{V,x1}},
{value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{error,{V,x1}},error,{V,x1}},
{'add',{1,c}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_of_1({{error,{V,x1}},error,{V,x1}},
{'add',{1,c}}, {'div',{17,0}}, {value,{V,x4}}),
- ?line {{caught,{error,badarg}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,badarg}},
+ undefined,
+ undefined,
+ finalized} =
nested_of_1({{error,{V,x1}},error,{V,x1}},
{'add',{1,c}}, {'div',{17,0}}, {'abs',V}),
%%
- ?line {{caught,{error,badarith}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_of_1({{'add',{2,c}},rethrow,void},
void, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarg}},
- undefined,
- {V,x4},
- finalized} =
+ {{caught,{error,badarg}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_of_1({{'add',{2,c}},rethrow,void},
void, {'abs',V}, {value,{V,x4}}),
- ?line {{caught,{error,function_clause}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,function_clause}},
+ undefined,
+ undefined,
+ finalized} =
nested_of_1({{'add',{2,c}},rethrow,void},
void, {'abs',V}, function_clause),
ok.
@@ -565,97 +564,97 @@ nested_of_1({X1,C1,V1},
nested_catch(Conf) when is_list(Conf) ->
V = {[make_ref(),1.4142136,self()]},
- ?line {{value,{value1,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{value,{value1,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,{V,x1}},
- {value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{throw,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{throw,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,{V,x1}},
- {throw,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- {V,x4},
- finalized} =
+ {throw,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{error,badarith}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,{V,x1}},
- {throw,{V,x2}}, {'div',{1,0}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- undefined,
- finalized} =
+ {throw,{V,x2}}, {'div',{1,0}}, {value,{V,x4}}),
+ {{caught,{error,badarith}},
+ undefined,
+ undefined,
+ finalized} =
nested_catch_1({{value,{V,x1}},void,{V,x1}},
- {throw,{V,x2}}, {'div',{1,0}}, {'add',{0,b}}),
+ {throw,{V,x2}}, {'div',{1,0}}, {'add',{0,b}}),
%%
- ?line {{caught,{error,{try_clause,{V,x1}}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,{try_clause,{V,x1}}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,try_clause},
- void, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{exit,{V,x3}}},
- undefined,
- {V,x4},
- finalized} =
+ void, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{exit,{V,x3}}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_catch_1({{value,{V,x1}},void,try_clause},
- void, {exit,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{throw,{V,x4}}},
- undefined,
- undefined,
- finalized} =
+ void, {exit,{V,x3}}, {value,{V,x4}}),
+ {{caught,{throw,{V,x4}}},
+ undefined,
+ undefined,
+ finalized} =
nested_catch_1({{value,{V,x1}},void,try_clause},
- void, {exit,{V,x3}}, {throw,{V,x4}}),
+ void, {exit,{V,x3}}, {throw,{V,x4}}),
%%
- ?line {{value,{caught1,{V,x2}}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{value,{caught1,{V,x2}}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{error,{V,x1}},error,{V,x1}},
- {value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- {V,x3},
- {V,x4},
- finalized} =
+ {value,{V,x2}}, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{error,badarith}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{error,{V,x1}},error,{V,x1}},
- {'add',{1,c}}, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarith}},
- undefined,
- {V,x4},
- finalized} =
+ {'add',{1,c}}, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{error,badarith}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_catch_1({{error,{V,x1}},error,{V,x1}},
- {'add',{1,c}}, {'div',{17,0}}, {value,{V,x4}}),
- ?line {{caught,{error,badarg}},
- undefined,
- undefined,
- finalized} =
+ {'add',{1,c}}, {'div',{17,0}}, {value,{V,x4}}),
+ {{caught,{error,badarg}},
+ undefined,
+ undefined,
+ finalized} =
nested_catch_1({{error,{V,x1}},error,{V,x1}},
- {'add',{1,c}}, {'div',{17,0}}, {'abs',V}),
+ {'add',{1,c}}, {'div',{17,0}}, {'abs',V}),
%%
- ?line {{caught,{error,badarith}},
- {V,x3},
- {V,x4},
- finalized} =
+ {{caught,{error,badarith}},
+ {V,x3},
+ {V,x4},
+ finalized} =
nested_catch_1({{'add',{2,c}},rethrow,void},
- void, {value,{V,x3}}, {value,{V,x4}}),
- ?line {{caught,{error,badarg}},
- undefined,
- {V,x4},
- finalized} =
+ void, {value,{V,x3}}, {value,{V,x4}}),
+ {{caught,{error,badarg}},
+ undefined,
+ {V,x4},
+ finalized} =
nested_catch_1({{'add',{2,c}},rethrow,void},
- void, {'abs',V}, {value,{V,x4}}),
- ?line {{caught,{error,function_clause}},
- undefined,
- undefined,
- finalized} =
+ void, {'abs',V}, {value,{V,x4}}),
+ {{caught,{error,function_clause}},
+ undefined,
+ undefined,
+ finalized} =
nested_catch_1({{'add',{2,c}},rethrow,void},
- void, {'abs',V}, function_clause),
+ void, {'abs',V}, function_clause),
ok.
nested_catch_1({X1,C1,V1},
- X2, X3, X4) ->
+ X2, X3, X4) ->
erase(nested3),
erase(nested4),
erase(nested),
@@ -688,73 +687,73 @@ nested_catch_1({X1,C1,V1},
nested_after(Conf) when is_list(Conf) ->
V = [{make_ref(),1.4142136,self()}],
- ?line {value,
- {V,x3},
- {value1,{V,x2}},
- finalized} =
+ {value,
+ {V,x3},
+ {value1,{V,x2}},
+ finalized} =
nested_after_1({{value,{V,x1}},void,{V,x1}},
{value,{V,x2}}, {value,{V,x3}}),
- ?line {{caught,{error,{V,x2}}},
- {V,x3},
- undefined,
- finalized} =
+ {{caught,{error,{V,x2}}},
+ {V,x3},
+ undefined,
+ finalized} =
nested_after_1({{value,{V,x1}},void,{V,x1}},
{error,{V,x2}}, {value,{V,x3}}),
- ?line {{caught,{exit,{V,x3}}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{exit,{V,x3}}},
+ undefined,
+ undefined,
+ finalized} =
nested_after_1({{value,{V,x1}},void,{V,x1}},
{error,{V,x2}}, {exit,{V,x3}}),
%%
- ?line {{caught,{error,{try_clause,{V,x1}}}},
- {V,x3},
- undefined,
- finalized} =
+ {{caught,{error,{try_clause,{V,x1}}}},
+ {V,x3},
+ undefined,
+ finalized} =
nested_after_1({{value,{V,x1}},void,try_clause},
void, {value,{V,x3}}),
- ?line {{caught,{error,badarith}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,badarith}},
+ undefined,
+ undefined,
+ finalized} =
nested_after_1({{value,{V,x1}},void,try_clause},
void, {'div',{17,0}}),
%%
- ?line {value,
- {V,x3},
- {caught1,{V,x2}},
- finalized} =
+ {value,
+ {V,x3},
+ {caught1,{V,x2}},
+ finalized} =
nested_after_1({{throw,{V,x1}},throw,{V,x1}},
{value,{V,x2}}, {value,{V,x3}}),
- ?line {{caught,{error,badarith}},
- {V,x3},
- undefined,
- finalized} =
+ {{caught,{error,badarith}},
+ {V,x3},
+ undefined,
+ finalized} =
nested_after_1({{throw,{V,x1}},throw,{V,x1}},
{'add',{a,b}}, {value,{V,x3}}),
- ?line {{caught,{error,badarg}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,badarg}},
+ undefined,
+ undefined,
+ finalized} =
nested_after_1({{throw,{V,x1}},throw,{V,x1}},
{'add',{a,b}}, {'abs',V}),
%%
- ?line {{caught,{throw,{V,x1}}},
- {V,x3},
- undefined,
- finalized} =
+ {{caught,{throw,{V,x1}}},
+ {V,x3},
+ undefined,
+ finalized} =
nested_after_1({{throw,{V,x1}},rethrow,void},
void, {value,{V,x3}}),
- ?line {{caught,{error,badarith}},
- undefined,
- undefined,
- finalized} =
+ {{caught,{error,badarith}},
+ undefined,
+ undefined,
+ finalized} =
nested_after_1({{throw,{V,x1}},rethrow,void},
void, {'div',{1,0}}),
ok.
nested_after_1({X1,C1,V1},
- X2, X3) ->
+ X2, X3) ->
erase(nested3),
erase(nested4),
erase(nested),
diff --git a/lib/debugger/vsn.mk b/lib/debugger/vsn.mk
index cf8ffd3272..dd496013cd 100644
--- a/lib/debugger/vsn.mk
+++ b/lib/debugger/vsn.mk
@@ -1 +1 @@
-DEBUGGER_VSN = 4.1.2
+DEBUGGER_VSN = 4.2
diff --git a/lib/dialyzer/Makefile b/lib/dialyzer/Makefile
index 0e59376240..e4f681dcd9 100644
--- a/lib/dialyzer/Makefile
+++ b/lib/dialyzer/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2009. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/dialyzer/README b/lib/dialyzer/README
index 82d0f5ec48..951a92469b 100644
--- a/lib/dialyzer/README
+++ b/lib/dialyzer/README
@@ -6,7 +6,7 @@
## Copyright: Held by the authors; all rights reserved (2004 - 2010).
##----------------------------------------------------------------------------
-The DIALYZER, a DIscrepany AnaLYZer for ERlang programs.
+The DIALYZER, a DIscrepancy AnaLYZer for ERlang programs.
-----------------------------------------------
diff --git a/lib/dialyzer/doc/about.txt b/lib/dialyzer/doc/about.txt
index 7d9d819731..1318d9a65e 100644
--- a/lib/dialyzer/doc/about.txt
+++ b/lib/dialyzer/doc/about.txt
@@ -1,5 +1,5 @@
This is DIALYZER version 2.1.0
- DIALYZER is a DIscrepany AnaLYZer for ERlang programs.
+ DIALYZER is a DIscrepancy AnaLYZer for ERlang programs.
Copyright (C) Tobias Lindahl <[email protected]>
Kostis Sagonas <[email protected]>
diff --git a/lib/dialyzer/doc/manual.txt b/lib/dialyzer/doc/manual.txt
index 29c9518d84..be1fd2f8bc 100644
--- a/lib/dialyzer/doc/manual.txt
+++ b/lib/dialyzer/doc/manual.txt
@@ -4,7 +4,7 @@
## Kostis Sagonas <[email protected]>
##----------------------------------------------------------------------------
-The DIALYZER, a DIscrepany AnaLYZer for ERlang programs.
+The DIALYZER, a DIscrepancy AnaLYZer for ERlang programs.
-----------------------------------------------
diff --git a/lib/dialyzer/doc/src/book.xml b/lib/dialyzer/doc/src/book.xml
index 4cc2a9db7c..aecc0e5bfa 100644
--- a/lib/dialyzer/doc/src/book.xml
+++ b/lib/dialyzer/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/dialyzer/doc/src/dialyzer.xml b/lib/dialyzer/doc/src/dialyzer.xml
index 3fd34241b2..619db125b1 100644
--- a/lib/dialyzer/doc/src/dialyzer.xml
+++ b/lib/dialyzer/doc/src/dialyzer.xml
@@ -254,7 +254,7 @@
analysis that finds data races performs intra-procedural data flow analysis
and can sometimes explode in time. Enable it at your own risk.
</item>
-i <tag><c><![CDATA[-Wunderspecs]]></c>***</tag>
+ <tag><c><![CDATA[-Wunderspecs]]></c>***</tag>
<item>Warn about underspecified functions
(the -spec is strictly more allowing than the success typing).</item>
<tag><c><![CDATA[-Wunknown]]></c>***</tag>
diff --git a/lib/dialyzer/doc/src/dialyzer_chapter.xml b/lib/dialyzer/doc/src/dialyzer_chapter.xml
index 9bfb7ea2e1..c445f2633f 100644
--- a/lib/dialyzer/doc/src/dialyzer_chapter.xml
+++ b/lib/dialyzer/doc/src/dialyzer_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/dialyzer/doc/src/notes.xml b/lib/dialyzer/doc/src/notes.xml
index 4202730eed..6400072b1f 100644
--- a/lib/dialyzer/doc/src/notes.xml
+++ b/lib/dialyzer/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,102 @@
<p>This document describes the changes made to the Dialyzer
application.</p>
+<section><title>Dialyzer 3.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Fix a map related bug.</p>
+ <p>
+ Own Id: OTP-13709 Aux Id: ERL-177, PR-1115 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 3.0</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> Fix a bug in the translation of forms to types. </p>
+ <p>
+ Own Id: OTP-13520</p>
+ </item>
+ <item>
+ <p>Correct misspelling in Dialyzer's acronym definition.
+ </p>
+ <p>
+ Own Id: OTP-13544 Aux Id: PR-1007 </p>
+ </item>
+ <item>
+ <p>Dialyzer no longer crashes when there is an invalid
+ function call such as <c>42(7)</c> in a module being
+ analyzed. The compiler will now warn for invalid function
+ calls such as <c>X = 42, x(7)</c>.</p>
+ <p>
+ Own Id: OTP-13552 Aux Id: ERL-138 </p>
+ </item>
+ <item>
+ <p> Fix a bug that caused Dialyzer to go into an infinite
+ loop. </p>
+ <p>
+ Own Id: OTP-13653 Aux Id: ERL-157 </p>
+ </item>
+ <item>
+ <p>Fix a bug in Dialyzer related to call-site
+ analysis.</p>
+ <p>
+ Own Id: OTP-13655 Aux Id: PR-1092 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> The evaluation of SCCs in <c>dialyzer_typesig</c> is
+ optimized. </p> <p> Maps are used instead of Dicts to
+ further optimize the evaluation. </p>
+ <p>
+ Own Id: OTP-10349</p>
+ </item>
+ <item>
+ <p> Since Erlang/OTP R14A, when support for parameterized
+ modules was added, <c>module()</c> has included
+ <c>tuple()</c>, but that part is removed; the type
+ <c>module()</c> is now the same as <c>atom()</c>, as
+ documented in the Reference Manual. </p>
+ <p>
+ Own Id: OTP-13244</p>
+ </item>
+ <item>
+ <p> The type specification syntax for Maps is improved:
+ </p> <list> <item> <p> The association type <c>KeyType :=
+ ValueType</c> denotes an association that must be
+ present. </p> </item> <item> <p> The shorthand <c>...</c>
+ stands for the association type <c>any() => any()</c>.
+ </p> </item> </list> <p> An incompatible change is that
+ <c>#{}</c> stands for the empty map. The type
+ <c>map()</c> (a map of any size) can be written as
+ <c>#{...}</c>. </p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13542 Aux Id: PR-1014 </p>
+ </item>
+ <item>
+ <p>The translation of forms to types is improved. </p>
+ <p>
+ Own Id: OTP-13547</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Dialyzer 2.9</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/dialyzer/doc/src/part.xml b/lib/dialyzer/doc/src/part.xml
index eff8e05257..575f77549a 100644
--- a/lib/dialyzer/doc/src/part.xml
+++ b/lib/dialyzer/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/dialyzer/doc/src/part_notes.xml b/lib/dialyzer/doc/src/part_notes.xml
index ba8d30e1be..4a0a0af2d1 100644
--- a/lib/dialyzer/doc/src/part_notes.xml
+++ b/lib/dialyzer/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/dialyzer/doc/src/ref_man.xml b/lib/dialyzer/doc/src/ref_man.xml
index 9c3887b599..01478cfb40 100644
--- a/lib/dialyzer/doc/src/ref_man.xml
+++ b/lib/dialyzer/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/dialyzer/info b/lib/dialyzer/info
index 9fba4b54ad..b9ea26b712 100644
--- a/lib/dialyzer/info
+++ b/lib/dialyzer/info
@@ -1,2 +1,2 @@
group: tools
-short: The DIALYZER, a DIscrepany AnaLYZer for ERlang programs.
+short: The DIALYZER, a DIscrepancy AnaLYZer for ERlang programs.
diff --git a/lib/dialyzer/src/Makefile b/lib/dialyzer/src/Makefile
index 770af2140f..256f20f549 100644
--- a/lib/dialyzer/src/Makefile
+++ b/lib/dialyzer/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2012. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -61,6 +61,7 @@ MODULES = \
dialyzer_gui_wx \
dialyzer_options \
dialyzer_plt \
+ dialyzer_race_data_server \
dialyzer_races \
dialyzer_succ_typings \
dialyzer_timing \
@@ -140,6 +141,7 @@ $(EBIN)/dialyzer_explanation.beam: dialyzer.hrl
$(EBIN)/dialyzer_gui_wx.beam: dialyzer.hrl dialyzer_gui_wx.hrl
$(EBIN)/dialyzer_options.beam: dialyzer.hrl
$(EBIN)/dialyzer_plt.beam: dialyzer.hrl
+$(EBIN)/dialyzer_race_data_server.beam: dialyzer.hrl
$(EBIN)/dialyzer_races.beam: dialyzer.hrl
$(EBIN)/dialyzer_succ_typings.beam: dialyzer.hrl
$(EBIN)/dialyzer_typesig.beam: dialyzer.hrl
diff --git a/lib/dialyzer/src/dialyzer.app.src b/lib/dialyzer/src/dialyzer.app.src
index 8ac6dc1367..5b28f7ae86 100644
--- a/lib/dialyzer/src/dialyzer.app.src
+++ b/lib/dialyzer/src/dialyzer.app.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -37,6 +37,7 @@
dialyzer_gui_wx,
dialyzer_options,
dialyzer_plt,
+ dialyzer_race_data_server,
dialyzer_races,
dialyzer_succ_typings,
dialyzer_typesig,
@@ -44,8 +45,8 @@
dialyzer_timing,
dialyzer_worker]},
{registered, []},
- {applications, [compiler, gs, hipe, kernel, stdlib, wx]},
+ {applications, [compiler, hipe, kernel, stdlib, wx]},
{env, []},
- {runtime_dependencies, ["wx-1.2","syntax_tools-1.6.14","stdlib-2.5",
- "kernel-3.0","hipe-3.13","erts-7.0",
- "compiler-5.0"]}]}.
+ {runtime_dependencies, ["wx-1.2","syntax_tools-2.0","stdlib-3.0",
+ "kernel-5.0","hipe-3.15.1","erts-8.0",
+ "compiler-7.0"]}]}.
diff --git a/lib/dialyzer/src/dialyzer.appup.src b/lib/dialyzer/src/dialyzer.appup.src
index 727e961629..d81ff641d7 100644
--- a/lib/dialyzer/src/dialyzer.appup.src
+++ b/lib/dialyzer/src/dialyzer.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl
index 9f51dfe356..bcac8afe64 100644
--- a/lib/dialyzer/src/dialyzer.erl
+++ b/lib/dialyzer/src/dialyzer.erl
@@ -336,6 +336,9 @@ message_to_string({guard_fail, []}) ->
"Clause guard cannot succeed.\n";
message_to_string({guard_fail, [Arg1, Infix, Arg2]}) ->
io_lib:format("Guard test ~s ~s ~s can never succeed\n", [Arg1, Infix, Arg2]);
+message_to_string({map_update, [Type, Key]}) ->
+ io_lib:format("A key of type ~s cannot exist "
+ "in a map of type ~s\n", [Key, Type]);
message_to_string({neg_guard_fail, [Arg1, Infix, Arg2]}) ->
io_lib:format("Guard test not(~s ~s ~s) can never succeed\n",
[Arg1, Infix, Arg2]);
diff --git a/lib/dialyzer/src/dialyzer.hrl b/lib/dialyzer/src/dialyzer.hrl
index de236f91ab..ea6a71217c 100644
--- a/lib/dialyzer/src/dialyzer.hrl
+++ b/lib/dialyzer/src/dialyzer.hrl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
@@ -60,6 +60,7 @@
-define(WARN_BEHAVIOUR, warn_behaviour).
-define(WARN_UNDEFINED_CALLBACK, warn_undefined_callbacks).
-define(WARN_UNKNOWN, warn_unknown).
+-define(WARN_MAP_CONSTRUCTION, warn_map_construction).
%%
%% The following type has double role:
@@ -75,7 +76,8 @@
| ?WARN_CONTRACT_SUPERTYPE | ?WARN_CALLGRAPH
| ?WARN_UNMATCHED_RETURN | ?WARN_RACE_CONDITION
| ?WARN_BEHAVIOUR | ?WARN_CONTRACT_RANGE
- | ?WARN_UNDEFINED_CALLBACK | ?WARN_UNKNOWN.
+ | ?WARN_UNDEFINED_CALLBACK | ?WARN_UNKNOWN
+ | ?WARN_MAP_CONSTRUCTION.
%%
%% This is the representation of each warning as they will be returned
@@ -123,10 +125,12 @@
%% Record declarations used by various files
%%--------------------------------------------------------------------
--record(analysis, {analysis_pid :: pid(),
+-type doc_plt() :: 'undefined' | dialyzer_plt:plt().
+
+-record(analysis, {analysis_pid :: pid() | 'undefined',
type = succ_typings :: anal_type(),
defines = [] :: [dial_define()],
- doc_plt :: dialyzer_plt:plt(),
+ doc_plt :: doc_plt(),
files = [] :: [file:filename()],
include_dirs = [] :: [file:filename()],
start_from = byte_code :: start_from(),
@@ -135,7 +139,7 @@
race_detection = false :: boolean(),
behaviours_chk = false :: boolean(),
timing = false :: boolean() | 'debug',
- timing_server :: dialyzer_timing:timing_server(),
+ timing_server = none :: dialyzer_timing:timing_server(),
callgraph_file = "" :: file:filename(),
solvers :: [solver()]}).
diff --git a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
index 8537878dfc..50fc1d8471 100644
--- a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
+++ b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,14 +31,17 @@
-export([start/3]).
+%%% Export for dialyzer_coordinator...
-export([compile_init_result/0,
- add_to_result/4,
- start_compilation/2,
+ add_to_result/4]).
+%%% ... and export for dialyzer_worker.
+-export([start_compilation/2,
continue_compilation/2]).
-export_type([compile_init_data/0,
- one_file_result/0,
- compile_result/0]).
+ one_file_mid_error/0,
+ one_file_result_ok/0,
+ compile_result/0]).
-include("dialyzer.hrl").
@@ -153,8 +156,7 @@ analysis_start(Parent, Analysis, LegalWarnings) ->
MergedExpTypes = sets:union(NewExpTypes, OldExpTypes1),
TmpCServer1 = dialyzer_codeserver:set_temp_records(MergedRecords, TmpCServer0),
TmpCServer2 =
- dialyzer_codeserver:insert_temp_exported_types(MergedExpTypes,
- TmpCServer1),
+ dialyzer_codeserver:finalize_exported_types(MergedExpTypes, TmpCServer1),
?timing(State#analysis_state.timing_server, "remote",
begin
TmpCServer3 =
@@ -247,6 +249,10 @@ compile_and_store(Files, #analysis_state{codeserver = CServer,
{T1, _} = statistics(wall_clock),
Callgraph = dialyzer_callgraph:new(),
CompileInit = make_compile_init(State, Callgraph),
+ %% Spawn a worker per file - where each worker calls
+ %% start_compilation on its file, asks next label to coordinator and
+ %% calls continue_compilation - and let coordinator aggregate
+ %% results using (compile_init_result and) add_to_result.
{{Failed, Modules}, NextLabel} =
?timing(Timing, "compile", _C1,
dialyzer_coordinator:parallel_job(compile, Files,
@@ -278,16 +284,18 @@ compile_and_store(Files, #analysis_state{codeserver = CServer,
send_log(Parent, Msg2),
{Callgraph, CServer2}.
--type compile_init_data() :: #compile_init{}.
--type error_reason() :: string().
--type compile_result() :: {[{file:filename(), error_reason()}],
- [module()]}. %%opaque
--type one_file_result() :: {error, error_reason()} |
- {ok, [dialyzer_callgraph:callgraph_edge()],
- [mfa_or_funlbl()], module()}. %%opaque
--type compile_mid_data() :: {module(), cerl:cerl(),
- dialyzer_callgraph:callgraph(),
- dialyzer_codeserver:codeserver()}.
+-opaque compile_init_data() :: #compile_init{}.
+-type error_reason() :: string().
+-opaque compile_result() :: {[{file:filename(), error_reason()}],
+ [module()]}.
+-type one_file_mid_error() :: {error, error_reason()}.
+-opaque one_file_result_ok() :: {ok, [dialyzer_callgraph:callgraph_edge()],
+ [mfa_or_funlbl()], module()}.
+-type one_file_result() :: one_file_mid_error() |
+ one_file_result_ok().
+-type compile_mid_data() :: {module(), cerl:cerl(),
+ dialyzer_callgraph:callgraph(),
+ dialyzer_codeserver:codeserver()}.
-spec compile_init_result() -> compile_result().
@@ -428,7 +436,8 @@ store_core(Mod, Core, Callgraph, CServer) ->
CoreSize = cerl_trees:size(CoreTree),
{ok, CoreSize, {Mod, CoreTree, Callgraph, CServer}}.
--spec continue_compilation(integer(), compile_mid_data()) -> one_file_result().
+-spec continue_compilation(integer(), compile_mid_data()) ->
+ one_file_result_ok().
continue_compilation(NextLabel, {Mod, CoreTree, Callgraph, CServer}) ->
{LabeledTree, _NewNextLabel} = cerl_trees:label(CoreTree, NextLabel),
diff --git a/lib/dialyzer/src/dialyzer_behaviours.erl b/lib/dialyzer/src/dialyzer_behaviours.erl
index b6f15fdc0e..5623929a43 100644
--- a/lib/dialyzer/src/dialyzer_behaviours.erl
+++ b/lib/dialyzer/src/dialyzer_behaviours.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/dialyzer/src/dialyzer_callgraph.erl b/lib/dialyzer/src/dialyzer_callgraph.erl
index 9e53e171c0..50abb22009 100644
--- a/lib/dialyzer/src/dialyzer_callgraph.erl
+++ b/lib/dialyzer/src/dialyzer_callgraph.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -96,26 +96,28 @@
%% whenever applicable.
%%-----------------------------------------------------------------------------
+%% Types with comment 'race' are due to dialyzer_races.erl.
-record(callgraph, {digraph = digraph:new() :: digraph:graph(),
- active_digraph :: active_digraph(),
- esc :: ets:tid(),
- letrec_map :: ets:tid(),
+ active_digraph :: active_digraph()
+ | 'undefined', % race
+ esc :: ets:tid()
+ | 'undefined', % race
+ letrec_map :: ets:tid()
+ | 'undefined', % race
name_map :: ets:tid(),
rev_name_map :: ets:tid(),
- rec_var_map :: ets:tid(),
- self_rec :: ets:tid(),
- calls :: ets:tid(),
+ rec_var_map :: ets:tid()
+ | 'undefined', % race
+ self_rec :: ets:tid()
+ | 'undefined', % race
+ calls :: ets:tid()
+ | 'undefined', % race
race_detection = false :: boolean(),
- race_data_server = new_race_data_server() :: pid()}).
-
--record(race_data_state, {race_code = dict:new() :: dict:dict(),
- public_tables = [] :: [label()],
- named_tables = [] :: [string()],
- beh_api_calls = [] :: [{mfa(), mfa()}]}).
+ race_data_server = dialyzer_race_data_server:new() :: pid()}).
%% Exported Types
--type callgraph() :: #callgraph{}.
+-opaque callgraph() :: #callgraph{}.
-type active_digraph() :: {'d', digraph:graph()} | {'e', ets:tid(), ets:tid()}.
@@ -609,45 +611,30 @@ digraph_reaching_subgraph(Funs, DG) ->
renew_race_info(#callgraph{race_data_server = RaceDataServer} = CG,
RaceCode, PublicTables, NamedTables) ->
- ok = race_data_server_cast(
+ ok = dialyzer_race_data_server:cast(
{renew_race_info, {RaceCode, PublicTables, NamedTables}},
RaceDataServer),
CG.
-renew_race_info({RaceCode, PublicTables, NamedTables},
- #race_data_state{} = State) ->
- State#race_data_state{race_code = RaceCode,
- public_tables = PublicTables,
- named_tables = NamedTables}.
-
-spec renew_race_code(dialyzer_races:races(), callgraph()) -> callgraph().
renew_race_code(Races, #callgraph{race_data_server = RaceDataServer} = CG) ->
Fun = dialyzer_races:get_curr_fun(Races),
FunArgs = dialyzer_races:get_curr_fun_args(Races),
Code = lists:reverse(dialyzer_races:get_race_list(Races)),
- ok = race_data_server_cast(
+ ok = dialyzer_race_data_server:cast(
{renew_race_code, {Fun, FunArgs, Code}},
RaceDataServer),
CG.
-renew_race_code_handler({Fun, FunArgs, Code},
- #race_data_state{race_code = RaceCode} = State) ->
- State#race_data_state{race_code = dict:store(Fun, [FunArgs, Code], RaceCode)}.
-
-spec renew_race_public_tables(label(), callgraph()) -> callgraph().
renew_race_public_tables(VarLabel,
#callgraph{race_data_server = RaceDataServer} = CG) ->
ok =
- race_data_server_cast({renew_race_public_tables, VarLabel}, RaceDataServer),
+ dialyzer_race_data_server:cast({renew_race_public_tables, VarLabel}, RaceDataServer),
CG.
-renew_race_public_tables_handler(VarLabel,
- #race_data_state{public_tables = PT}
- = State) ->
- State#race_data_state{public_tables = ordsets:add_element(VarLabel, PT)}.
-
-spec cleanup(callgraph()) -> callgraph().
cleanup(#callgraph{digraph = Digraph,
@@ -657,18 +644,18 @@ cleanup(#callgraph{digraph = Digraph,
#callgraph{digraph = Digraph,
name_map = NameMap,
rev_name_map = RevNameMap,
- race_data_server = race_data_server_call(dup, RaceDataServer)}.
+ race_data_server = dialyzer_race_data_server:duplicate(RaceDataServer)}.
-spec duplicate(callgraph()) -> callgraph().
duplicate(#callgraph{race_data_server = RaceDataServer} = Callgraph) ->
Callgraph#callgraph{
- race_data_server = race_data_server_call(dup, RaceDataServer)}.
+ race_data_server = dialyzer_race_data_server:duplicate(RaceDataServer)}.
-spec dispose_race_server(callgraph()) -> ok.
dispose_race_server(#callgraph{race_data_server = RaceDataServer}) ->
- race_data_server_cast(stop, RaceDataServer).
+ dialyzer_race_data_server:stop(RaceDataServer).
-spec get_digraph(callgraph()) -> digraph:graph().
@@ -678,17 +665,17 @@ get_digraph(#callgraph{digraph = Digraph}) ->
-spec get_named_tables(callgraph()) -> [string()].
get_named_tables(#callgraph{race_data_server = RaceDataServer}) ->
- race_data_server_call(get_named_tables, RaceDataServer).
+ dialyzer_race_data_server:call(get_named_tables, RaceDataServer).
-spec get_public_tables(callgraph()) -> [label()].
get_public_tables(#callgraph{race_data_server = RaceDataServer}) ->
- race_data_server_call(get_public_tables, RaceDataServer).
+ dialyzer_race_data_server:call(get_public_tables, RaceDataServer).
-spec get_race_code(callgraph()) -> dict:dict().
get_race_code(#callgraph{race_data_server = RaceDataServer}) ->
- race_data_server_call(get_race_code, RaceDataServer).
+ dialyzer_race_data_server:call(get_race_code, RaceDataServer).
-spec get_race_detection(callgraph()) -> boolean().
@@ -698,12 +685,12 @@ get_race_detection(#callgraph{race_detection = RD}) ->
-spec get_behaviour_api_calls(callgraph()) -> [{mfa(), mfa()}].
get_behaviour_api_calls(#callgraph{race_data_server = RaceDataServer}) ->
- race_data_server_call(get_behaviour_api_calls, RaceDataServer).
+ dialyzer_race_data_server:call(get_behaviour_api_calls, RaceDataServer).
-spec race_code_new(callgraph()) -> callgraph().
race_code_new(#callgraph{race_data_server = RaceDataServer} = CG) ->
- ok = race_data_server_cast(race_code_new, RaceDataServer),
+ ok = dialyzer_race_data_server:cast(race_code_new, RaceDataServer),
CG.
-spec put_digraph(digraph:graph(), callgraph()) -> callgraph().
@@ -714,7 +701,7 @@ put_digraph(Digraph, Callgraph) ->
-spec put_race_code(dict:dict(), callgraph()) -> callgraph().
put_race_code(RaceCode, #callgraph{race_data_server = RaceDataServer} = CG) ->
- ok = race_data_server_cast({put_race_code, RaceCode}, RaceDataServer),
+ ok = dialyzer_race_data_server:cast({put_race_code, RaceCode}, RaceDataServer),
CG.
-spec put_race_detection(boolean(), callgraph()) -> callgraph().
@@ -726,78 +713,23 @@ put_race_detection(RaceDetection, Callgraph) ->
put_named_tables(NamedTables,
#callgraph{race_data_server = RaceDataServer} = CG) ->
- ok = race_data_server_cast({put_named_tables, NamedTables}, RaceDataServer),
+ ok = dialyzer_race_data_server:cast({put_named_tables, NamedTables}, RaceDataServer),
CG.
-spec put_public_tables([label()], callgraph()) -> callgraph().
put_public_tables(PublicTables,
#callgraph{race_data_server = RaceDataServer} = CG) ->
- ok = race_data_server_cast({put_public_tables, PublicTables}, RaceDataServer),
+ ok = dialyzer_race_data_server:cast({put_public_tables, PublicTables}, RaceDataServer),
CG.
-spec put_behaviour_api_calls([{mfa(), mfa()}], callgraph()) -> callgraph().
put_behaviour_api_calls(Calls,
#callgraph{race_data_server = RaceDataServer} = CG) ->
- ok = race_data_server_cast({put_behaviour_api_calls, Calls}, RaceDataServer),
+ ok = dialyzer_race_data_server:cast({put_behaviour_api_calls, Calls}, RaceDataServer),
CG.
-
-new_race_data_server() ->
- spawn_link(fun() -> race_data_server_loop(#race_data_state{}) end).
-
-race_data_server_loop(State) ->
- receive
- {call, From, Ref, Query} ->
- Reply = race_data_server_handle_call(Query, State),
- From ! {Ref, Reply},
- race_data_server_loop(State);
- {cast, stop} ->
- ok;
- {cast, Message} ->
- NewState = race_data_server_handle_cast(Message, State),
- race_data_server_loop(NewState)
- end.
-
-race_data_server_call(Query, Server) ->
- Ref = make_ref(),
- Server ! {call, self(), Ref, Query},
- receive
- {Ref, Reply} -> Reply
- end.
-
-race_data_server_cast(Message, Server) ->
- Server ! {cast, Message},
- ok.
-
-race_data_server_handle_cast(race_code_new, State) ->
- State#race_data_state{race_code = dict:new()};
-race_data_server_handle_cast({Tag, Data}, State) ->
- case Tag of
- renew_race_info -> renew_race_info(Data, State);
- renew_race_code -> renew_race_code_handler(Data, State);
- renew_race_public_tables -> renew_race_public_tables_handler(Data, State);
- put_race_code -> State#race_data_state{race_code = Data};
- put_public_tables -> State#race_data_state{public_tables = Data};
- put_named_tables -> State#race_data_state{named_tables = Data};
- put_behaviour_api_calls -> State#race_data_state{beh_api_calls = Data}
- end.
-
-race_data_server_handle_call(Query,
- #race_data_state{race_code = RaceCode,
- public_tables = PublicTables,
- named_tables = NamedTables,
- beh_api_calls = BehApiCalls}
- = State) ->
- case Query of
- dup -> spawn_link(fun() -> race_data_server_loop(State) end);
- get_race_code -> RaceCode;
- get_public_tables -> PublicTables;
- get_named_tables -> NamedTables;
- get_behaviour_api_calls -> BehApiCalls
- end.
-
%%=============================================================================
%% Utilities for 'dot'
%%=============================================================================
diff --git a/lib/dialyzer/src/dialyzer_cl.erl b/lib/dialyzer/src/dialyzer_cl.erl
index 9354b8007e..fc56693ea3 100644
--- a/lib/dialyzer/src/dialyzer_cl.erl
+++ b/lib/dialyzer/src/dialyzer_cl.erl
@@ -2,7 +2,7 @@
%%-------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@
-include_lib("kernel/include/file.hrl"). % needed for #file_info{}
-record(cl_state,
- {backend_pid :: pid(),
+ {backend_pid :: pid() | 'undefined',
erlang_mode = false :: boolean(),
external_calls = [] :: [mfa()],
external_types = [] :: [mfa()],
diff --git a/lib/dialyzer/src/dialyzer_codeserver.erl b/lib/dialyzer/src/dialyzer_codeserver.erl
index 978ecd3843..03cd9671af 100644
--- a/lib/dialyzer/src/dialyzer_codeserver.erl
+++ b/lib/dialyzer/src/dialyzer_codeserver.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -81,10 +81,10 @@
-record(codeserver, {next_core_label = 0 :: label(),
code :: dict_ets(),
- exported_types :: set_ets(), % set(mfa())
- records :: dict_ets(),
- contracts :: dict_ets(),
- callbacks :: dict_ets(),
+ exported_types :: set_ets() | 'undefined', % set(mfa())
+ records :: dict_ets() | 'undefined',
+ contracts :: dict_ets() | 'undefined',
+ callbacks :: dict_ets() | 'undefined',
fun_meta_info :: dict_ets(), % {mfa(), meta_info()}
exports :: 'clean' | set_ets(), % set(mfa())
temp_exported_types :: 'clean' | set_ets(), % set(mfa())
diff --git a/lib/dialyzer/src/dialyzer_contracts.erl b/lib/dialyzer/src/dialyzer_contracts.erl
index 7251de8b10..976a2b8955 100644
--- a/lib/dialyzer/src/dialyzer_contracts.erl
+++ b/lib/dialyzer/src/dialyzer_contracts.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -53,7 +53,9 @@
%% to expand records and/or remote types that they might contain.
%%-----------------------------------------------------------------------
--type tmp_contract_fun() :: fun((sets:set(mfa()), types()) -> contract_pair()).
+-type cache() :: ets:tid().
+-type tmp_contract_fun() ::
+ fun((sets:set(mfa()), types(), cache()) -> contract_pair()).
-record(tmp_contract, {contract_funs = [] :: [tmp_contract_fun()],
forms = [] :: [{_, _}]}).
@@ -126,13 +128,19 @@ butlast([H|T]) -> [H|butlast(T)].
constraints_to_string([]) ->
"";
-constraints_to_string([{type, _, constraint, [{atom, _, What}, Types]}]) ->
- atom_to_list(What) ++ "(" ++
- sequence([erl_types:t_form_to_string(T) || T <- Types], ",") ++ ")";
constraints_to_string([{type, _, constraint, [{atom, _, What}, Types]}|Rest]) ->
- atom_to_list(What) ++ "(" ++
- sequence([erl_types:t_form_to_string(T) || T <- Types], ",")
- ++ "), " ++ constraints_to_string(Rest).
+ S = constraint_to_string(What, Types),
+ case Rest of
+ [] -> S;
+ _ -> S ++ ", " ++ constraints_to_string(Rest)
+ end.
+
+constraint_to_string(is_subtype, [{var, _, Var}, T]) ->
+ atom_to_list(Var) ++ " :: " ++ erl_types:t_form_to_string(T);
+constraint_to_string(What, Types) ->
+ atom_to_list(What) ++ "("
+ ++ sequence([erl_types:t_form_to_string(T) || T <- Types], ",")
+ ++ ")".
sequence([], _Delimiter) -> "";
sequence([H], _Delimiter) -> H;
@@ -147,22 +155,32 @@ process_contract_remote_types(CodeServer) ->
ExpTypes = dialyzer_codeserver:get_exported_types(CodeServer),
RecordDict = dialyzer_codeserver:get_records(CodeServer),
ContractFun =
- fun({_M, _F, _A}, {File, #tmp_contract{contract_funs = CFuns, forms = Forms}, Xtra}) ->
- NewCs = [CFun(ExpTypes, RecordDict) || CFun <- CFuns],
- Args = general_domain(NewCs),
- {File, #contract{contracts = NewCs, args = Args, forms = Forms}, Xtra}
+ fun({{_M, _F, _A}=MFA, {File, TmpContract, Xtra}}, C0) ->
+ #tmp_contract{contract_funs = CFuns, forms = Forms} = TmpContract,
+ {NewCs, C2} = lists:mapfoldl(fun(CFun, C1) ->
+ CFun(ExpTypes, RecordDict, C1)
+ end, C0, CFuns),
+ Args = general_domain(NewCs),
+ Contract = #contract{contracts = NewCs, args = Args, forms = Forms},
+ {{MFA, {File, Contract, Xtra}}, C2}
end,
ModuleFun =
- fun(_ModuleName, ContractDict) ->
- dict:map(ContractFun, ContractDict)
+ fun({ModuleName, ContractDict}, C3) ->
+ {NewContractList, C4} =
+ lists:mapfoldl(ContractFun, C3, dict:to_list(ContractDict)),
+ {{ModuleName, dict:from_list(NewContractList)}, C4}
end,
- NewContractDict = dict:map(ModuleFun, TmpContractDict),
- NewCallbackDict = dict:map(ModuleFun, TmpCallbackDict),
+ Cache = erl_types:cache__new(),
+ {NewContractList, C5} =
+ lists:mapfoldl(ModuleFun, Cache, dict:to_list(TmpContractDict)),
+ {NewCallbackList, _C6} =
+ lists:mapfoldl(ModuleFun, C5, dict:to_list(TmpCallbackDict)),
+ NewContractDict = dict:from_list(NewContractList),
+ NewCallbackDict = dict:from_list(NewCallbackList),
dialyzer_codeserver:finalize_contracts(NewContractDict, NewCallbackDict,
- CodeServer).
+ CodeServer).
--type opaques() :: [erl_types:erl_type()] | 'universe'.
--type opaques_fun() :: fun((module()) -> opaques()).
+-type opaques_fun() :: fun((module()) -> [erl_types:erl_type()]).
-type fun_types() :: dict:dict(label(), erl_types:type_table()).
@@ -205,10 +223,10 @@ check_contract(Contract, SuccType) ->
check_contract(#contract{contracts = Contracts}, SuccType, Opaques) ->
try
- Contracts1 = [{Contract, insert_constraints(Constraints, dict:new())}
+ Contracts1 = [{Contract, insert_constraints(Constraints)}
|| {Contract, Constraints} <- Contracts],
- Contracts2 = [erl_types:t_subst(Contract, Dict)
- || {Contract, Dict} <- Contracts1],
+ Contracts2 = [erl_types:t_subst(Contract, Map)
+ || {Contract, Map} <- Contracts1],
GenDomains = [erl_types:t_fun_args(C) || C <- Contracts2],
case check_domains(GenDomains) of
error ->
@@ -272,28 +290,45 @@ check_extraneous_1(Contract, SuccType) ->
case [CR || CR <- CRngs,
erl_types:t_is_none(erl_types:t_inf(CR, STRng))] of
[] ->
- CRngList = list_part(CRng),
- STRngList = list_part(STRng),
- case is_not_nil_list(CRngList) andalso is_not_nil_list(STRngList) of
- false -> ok;
- true ->
- CRngElements = erl_types:t_list_elements(CRngList),
- STRngElements = erl_types:t_list_elements(STRngList),
- Inf = erl_types:t_inf(CRngElements, STRngElements),
- case erl_types:t_is_none(Inf) of
- true -> {error, invalid_contract};
- false -> ok
- end
+ case bad_extraneous_list(CRng, STRng)
+ orelse bad_extraneous_map(CRng, STRng)
+ of
+ true -> {error, invalid_contract};
+ false -> ok
end;
CRs -> {error, {extra_range, erl_types:t_sup(CRs), STRng}}
end.
+bad_extraneous_list(CRng, STRng) ->
+ CRngList = list_part(CRng),
+ STRngList = list_part(STRng),
+ case is_not_nil_list(CRngList) andalso is_not_nil_list(STRngList) of
+ false -> false;
+ true ->
+ CRngElements = erl_types:t_list_elements(CRngList),
+ STRngElements = erl_types:t_list_elements(STRngList),
+ Inf = erl_types:t_inf(CRngElements, STRngElements),
+ erl_types:t_is_none(Inf)
+ end.
+
list_part(Type) ->
erl_types:t_inf(erl_types:t_list(), Type).
is_not_nil_list(Type) ->
erl_types:t_is_list(Type) andalso not erl_types:t_is_nil(Type).
+bad_extraneous_map(CRng, STRng) ->
+ CRngMap = map_part(CRng),
+ STRngMap = map_part(STRng),
+ (not is_empty_map(CRngMap)) andalso (not is_empty_map(STRngMap))
+ andalso is_empty_map(erl_types:t_inf(CRngMap, STRngMap)).
+
+map_part(Type) ->
+ erl_types:t_inf(erl_types:t_map(), Type).
+
+is_empty_map(Type) ->
+ erl_types:t_is_equal(Type, erl_types:t_from_term(#{})).
+
%% This is the heart of the "range function"
-spec process_contracts([contract_pair()], [erl_types:erl_type()]) ->
erl_types:erl_type().
@@ -322,15 +357,15 @@ process_contract({Contract, Constraints}, CallTypes0) ->
[erl_types:t_to_string(ContArgsFun),
erl_types:t_to_string(CallTypesFun)]),
case solve_constraints(ContArgsFun, CallTypesFun, Constraints) of
- {ok, VarDict} ->
- {ok, erl_types:t_subst(erl_types:t_fun_range(Contract), VarDict)};
+ {ok, VarMap} ->
+ {ok, erl_types:t_subst(erl_types:t_fun_range(Contract), VarMap)};
error -> error
end.
solve_constraints(Contract, Call, Constraints) ->
%% First make sure the call follows the constraints
- CDict = insert_constraints(Constraints, dict:new()),
- Contract1 = erl_types:t_subst(Contract, CDict),
+ CMap = insert_constraints(Constraints),
+ Contract1 = erl_types:t_subst(Contract, CMap),
%% Just a safe over-approximation.
%% TODO: Find the types for type variables properly
ContrArgs = erl_types:t_fun_args(Contract1),
@@ -338,7 +373,7 @@ solve_constraints(Contract, Call, Constraints) ->
InfList = erl_types:t_inf_lists(ContrArgs, CallArgs),
case erl_types:any_none_or_unit(InfList) of
true -> error;
- false -> {ok, CDict}
+ false -> {ok, CMap}
end.
%%Inf = erl_types:t_inf(Contract1, Call),
%% Then unify with the constrained call type.
@@ -368,23 +403,26 @@ warn_spec_missing_fun({M, F, A} = MFA, Contracts) ->
{?WARN_CONTRACT_SYNTAX, WarningInfo, {spec_missing_fun, [M, F, A]}}.
%% This treats the "when" constraints. It will be extended, we hope.
-insert_constraints([{subtype, Type1, Type2}|Left], Dict) ->
+insert_constraints(Constraints) ->
+ insert_constraints(Constraints, maps:new()).
+
+insert_constraints([{subtype, Type1, Type2}|Left], Map) ->
case erl_types:t_is_var(Type1) of
true ->
Name = erl_types:t_var_name(Type1),
- Dict1 = case dict:find(Name, Dict) of
- error ->
- dict:store(Name, Type2, Dict);
- {ok, VarType} ->
- dict:store(Name, erl_types:t_inf(VarType, Type2), Dict)
- end,
- insert_constraints(Left, Dict1);
+ Map1 = case maps:find(Name, Map) of
+ error ->
+ maps:put(Name, Type2, Map);
+ {ok, VarType} ->
+ maps:put(Name, erl_types:t_inf(VarType, Type2), Map)
+ end,
+ insert_constraints(Left, Map1);
false ->
%% A lot of things should change to add supertypes
throw({error, io_lib:format("First argument of is_subtype constraint "
"must be a type variable: ~p\n", [Type1])})
end;
-insert_constraints([], Dict) -> Dict.
+insert_constraints([], Map) -> Map.
-type types() :: erl_types:type_table().
@@ -406,19 +444,19 @@ contract_from_form(Forms, MFA, RecDict, FileLine) ->
contract_from_form([{type, _, 'fun', [_, _]} = Form | Left], MFA, RecDict,
FileLine, TypeAcc, FormAcc) ->
TypeFun =
- fun(ExpTypes, AllRecords) ->
- NewType =
+ fun(ExpTypes, AllRecords, Cache) ->
+ {NewType, NewCache} =
try
- from_form_with_check(Form, ExpTypes, MFA, AllRecords)
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords, Cache)
catch
throw:{error, Msg} ->
{File, Line} = FileLine,
NewMsg = io_lib:format("~s:~p: ~s", [filename:basename(File),
- Line, Msg]),
+ Line, Msg]),
throw({error, NewMsg})
end,
NewTypeNoVars = erl_types:subst_all_vars_to_any(NewType),
- {NewTypeNoVars, []}
+ {{NewTypeNoVars, []}, NewCache}
end,
NewTypeAcc = [TypeFun | TypeAcc],
NewFormAcc = [{Form, []} | FormAcc],
@@ -427,13 +465,15 @@ contract_from_form([{type, _L1, bounded_fun,
[{type, _L2, 'fun', [_, _]} = Form, Constr]}| Left],
MFA, RecDict, FileLine, TypeAcc, FormAcc) ->
TypeFun =
- fun(ExpTypes, AllRecords) ->
- {Constr1, VarDict} =
- process_constraints(Constr, MFA, RecDict, ExpTypes, AllRecords),
- NewType = from_form_with_check(Form, ExpTypes, MFA, AllRecords,
- VarDict),
+ fun(ExpTypes, AllRecords, Cache) ->
+ {Constr1, VarTable, Cache1} =
+ process_constraints(Constr, MFA, RecDict, ExpTypes, AllRecords,
+ Cache),
+ {NewType, NewCache} =
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords,
+ VarTable, Cache1),
NewTypeNoVars = erl_types:subst_all_vars_to_any(NewType),
- {NewTypeNoVars, Constr1}
+ {{NewTypeNoVars, Constr1}, NewCache}
end,
NewTypeAcc = [TypeFun | TypeAcc],
NewFormAcc = [{Form, Constr} | FormAcc],
@@ -441,72 +481,91 @@ contract_from_form([{type, _L1, bounded_fun,
contract_from_form([], _MFA, _RecDict, _FileLine, TypeAcc, FormAcc) ->
{lists:reverse(TypeAcc), lists:reverse(FormAcc)}.
-process_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords) ->
- Init0 = initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords),
+process_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords, Cache) ->
+ {Init0, NewCache} = initialize_constraints(Constrs, MFA, RecDict, ExpTypes,
+ AllRecords, Cache),
Init = remove_cycles(Init0),
- constraints_fixpoint(Init, MFA, RecDict, ExpTypes, AllRecords).
+ constraints_fixpoint(Init, MFA, RecDict, ExpTypes, AllRecords, NewCache).
-initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords) ->
- initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords, []).
+initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords, Cache) ->
+ initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ Cache, []).
-initialize_constraints([], _MFA, _RecDict, _ExpTypes, _AllRecords, Acc) ->
- Acc;
-initialize_constraints([Constr|Rest], MFA, RecDict, ExpTypes, AllRecords, Acc) ->
+initialize_constraints([], _MFA, _RecDict, _ExpTypes, _AllRecords,
+ Cache, Acc) ->
+ {Acc, Cache};
+initialize_constraints([Constr|Rest], MFA, RecDict, ExpTypes, AllRecords,
+ Cache, Acc) ->
case Constr of
{type, _, constraint, [{atom, _, is_subtype}, [Type1, Type2]]} ->
- T1 = final_form(Type1, ExpTypes, MFA, AllRecords, dict:new()),
+ VarTable = erl_types:var_table__new(),
+ {T1, NewCache} =
+ final_form(Type1, ExpTypes, MFA, AllRecords, VarTable, Cache),
Entry = {T1, Type2},
- initialize_constraints(Rest, MFA, RecDict, ExpTypes, AllRecords, [Entry|Acc]);
+ initialize_constraints(Rest, MFA, RecDict, ExpTypes, AllRecords,
+ NewCache, [Entry|Acc]);
{type, _, constraint, [{atom,_,Name}, List]} ->
N = length(List),
throw({error,
io_lib:format("Unsupported type guard ~w/~w\n", [Name, N])})
end.
-constraints_fixpoint(Constrs, MFA, RecDict, ExpTypes, AllRecords) ->
- VarDict =
- constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, dict:new()),
- constraints_fixpoint(VarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords).
-
-constraints_fixpoint(OldVarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords) ->
- NewVarDict =
- constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, OldVarDict),
- case NewVarDict of
- OldVarDict ->
- DictFold =
+constraints_fixpoint(Constrs, MFA, RecDict, ExpTypes, AllRecords, Cache) ->
+ VarTable = erl_types:var_table__new(),
+ {VarTab, NewCache} =
+ constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ VarTable, Cache),
+ constraints_fixpoint(VarTab, MFA, Constrs, RecDict, ExpTypes,
+ AllRecords, NewCache).
+
+constraints_fixpoint(OldVarTab, MFA, Constrs, RecDict, ExpTypes,
+ AllRecords, Cache) ->
+ {NewVarTab, NewCache} =
+ constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ OldVarTab, Cache),
+ case NewVarTab of
+ OldVarTab ->
+ Fun =
fun(Key, Value, Acc) ->
[{subtype, erl_types:t_var(Key), Value}|Acc]
end,
- FinalConstrs = dict:fold(DictFold, [], NewVarDict),
- {FinalConstrs, NewVarDict};
+ FinalConstrs = maps:fold(Fun, [], NewVarTab),
+ {FinalConstrs, NewVarTab, NewCache};
_Other ->
- constraints_fixpoint(NewVarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords)
+ constraints_fixpoint(NewVarTab, MFA, Constrs, RecDict, ExpTypes,
+ AllRecords, NewCache)
end.
-final_form(Form, ExpTypes, MFA, AllRecords, VarDict) ->
- from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarDict).
+final_form(Form, ExpTypes, MFA, AllRecords, VarTable, Cache) ->
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarTable, Cache).
-from_form_with_check(Form, ExpTypes, MFA, AllRecords) ->
- from_form_with_check(Form, ExpTypes, MFA, AllRecords, dict:new()).
+from_form_with_check(Form, ExpTypes, MFA, AllRecords, Cache) ->
+ VarTable = erl_types:var_table__new(),
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarTable, Cache).
-from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarDict) ->
+from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarTable, Cache) ->
Site = {spec, MFA},
- erl_types:t_check_record_fields(Form, ExpTypes, Site, AllRecords,
- VarDict),
- erl_types:t_from_form(Form, ExpTypes, Site, AllRecords, VarDict).
-
-constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, VarDict) ->
- Subtypes =
- constraints_to_subs(Constrs, MFA, RecDict, ExpTypes, AllRecords, VarDict, []),
- insert_constraints(Subtypes, dict:new()).
-
-constraints_to_subs([], _MFA, _RecDict, _ExpTypes, _AllRecords, _VarDict, Acc) ->
- Acc;
-constraints_to_subs([C|Rest], MFA, RecDict, ExpTypes, AllRecords, VarDict, Acc) ->
- {T1, Form2} = C,
- T2 = final_form(Form2, ExpTypes, MFA, AllRecords, VarDict),
+ C1 = erl_types:t_check_record_fields(Form, ExpTypes, Site, AllRecords,
+ VarTable, Cache),
+ erl_types:t_from_form(Form, ExpTypes, Site, AllRecords, VarTable, C1).
+
+constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ VarTab, Cache) ->
+ {Subtypes, NewCache} =
+ constraints_to_subs(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ VarTab, Cache, []),
+ {insert_constraints(Subtypes), NewCache}.
+
+constraints_to_subs([], _MFA, _RecDict, _ExpTypes, _AllRecords,
+ _VarTab, Cache, Acc) ->
+ {Acc, Cache};
+constraints_to_subs([{T1, Form2}|Rest], MFA, RecDict, ExpTypes, AllRecords,
+ VarTab, Cache, Acc) ->
+ {T2, NewCache} =
+ final_form(Form2, ExpTypes, MFA, AllRecords, VarTab, Cache),
NewAcc = [{subtype, T1, T2}|Acc],
- constraints_to_subs(Rest, MFA, RecDict, ExpTypes, AllRecords, VarDict, NewAcc).
+ constraints_to_subs(Rest, MFA, RecDict, ExpTypes, AllRecords,
+ VarTab, NewCache, NewAcc).
%% Replaces variables with '_' when necessary to break up cycles among
%% the constraints.
@@ -564,10 +623,13 @@ remove_uses([{Var, Use}|ToRemove], Constrs0) ->
remove_uses(_Var, _Use, []) -> [];
remove_uses(Var, Use, [Constr|Constrs]) ->
{V, Form} = Constr,
- case erl_types:t_var_name(V) =:= Var of
- true -> [{V, remove_use(Form, Use)}|Constrs];
- false -> [Constr|remove_uses(Var, Use, Constrs)]
- end.
+ NewConstr = case erl_types:t_var_name(V) =:= Var of
+ true ->
+ {V, remove_use(Form, Use)};
+ false ->
+ Constr
+ end,
+ [NewConstr|remove_uses(Var, Use, Constrs)].
remove_use({var, L, V}, V) -> {var, L, '_'};
remove_use(T, V) when is_tuple(T) ->
@@ -583,8 +645,8 @@ general_domain(List) ->
general_domain(List, erl_types:t_none()).
general_domain([{Sig, Constraints}|Left], AccSig) ->
- Dict = insert_constraints(Constraints, dict:new()),
- Sig1 = erl_types:t_subst(Sig, Dict),
+ Map = insert_constraints(Constraints),
+ Sig1 = erl_types:t_subst(Sig, Map),
general_domain(Left, erl_types:t_sup(AccSig, Sig1));
general_domain([], AccSig) ->
%% Get rid of all variables in the domain.
@@ -617,6 +679,7 @@ get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract, _Xtra}}|Left],
{value, {Ret, Args}} ->
Sig = erl_types:t_fun(Args, Ret),
{M, _F, _A} = MFA,
+ %% io:format("MFA ~p~n", [MFA]),
Opaques = FindOpaques(M),
{File, Line} = FileLine,
WarningInfo = {File, Line, MFA},
@@ -765,7 +828,7 @@ is_remote_types_related(Contract, CSig, Sig, MFA, RecDict) ->
t_from_forms_without_remote([{FType, []}], MFA, RecDict) ->
Site = {spec, MFA},
- Type1 = erl_types:t_from_form_without_remote(FType, Site, RecDict),
+ {Type1, _} = erl_types:t_from_form_without_remote(FType, Site, RecDict),
{ok, erl_types:subst_all_vars_to_any(Type1)};
t_from_forms_without_remote([{_FType, _Constrs}], _MFA, _RecDict) ->
%% 'When' constraints
diff --git a/lib/dialyzer/src/dialyzer_coordinator.erl b/lib/dialyzer/src/dialyzer_coordinator.erl
index 612f379d32..87cbd25b30 100644
--- a/lib/dialyzer/src/dialyzer_coordinator.erl
+++ b/lib/dialyzer/src/dialyzer_coordinator.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,8 +29,8 @@
%%% Export for dialyzer main process
-export([parallel_job/4]).
-%%% Exports for all possible workers
--export([wait_activation/0, job_done/3]).
+%%% Export for all possible workers
+-export([job_done/3]).
%%% Exports for the typesig and dataflow analysis workers
-export([sccs_to_pids/2, request_activation/1]).
@@ -38,7 +38,7 @@
%%% Exports for the compilation workers
-export([get_next_label/2]).
--export_type([coordinator/0, mode/0, init_data/0, result/0]).
+-export_type([coordinator/0, mode/0, init_data/0, result/0, job/0]).
%%--------------------------------------------------------------------
@@ -46,16 +46,18 @@
-type regulator() :: pid().
-type scc_to_pid() :: ets:tid() | 'unused'.
--type coordinator() :: {collector(), regulator(), scc_to_pid()}. %%opaque
+-opaque coordinator() :: {collector(), regulator(), scc_to_pid()}.
-type timing() :: dialyzer_timing:timing_server().
-type scc() :: [mfa_or_funlbl()].
-type mode() :: 'typesig' | 'dataflow' | 'compile' | 'warnings'.
--type compile_jobs() :: [file:filename()].
--type typesig_jobs() :: [scc()].
--type dataflow_jobs() :: [module()].
--type warnings_jobs() :: [module()].
+-type compile_job() :: file:filename().
+-type typesig_job() :: scc().
+-type dataflow_job() :: module().
+-type warnings_job() :: module().
+
+-type job() :: compile_job() | typesig_job() | dataflow_job() | warnings_job().
-type compile_init_data() :: dialyzer_analysis_callgraph:compile_init_data().
-type typesig_init_data() :: dialyzer_succ_typings:typesig_init_data().
@@ -73,9 +75,9 @@
-type result() :: compile_result() | typesig_result() |
dataflow_result() | warnings_result().
--type job() :: scc() | module() | file:filename().
--type job_result() :: dialyzer_analysis_callgraph:one_file_result() |
- typesig_result() | dataflow_result() | warnings_result().
+-type job_result() :: dialyzer_analysis_callgraph:one_file_mid_error() |
+ dialyzer_analysis_callgraph:one_file_result_ok() |
+ typesig_result() | dataflow_result() | warnings_result().
-record(state, {mode :: mode(),
active = 0 :: integer(),
@@ -90,13 +92,13 @@
%%--------------------------------------------------------------------
--spec parallel_job('compile', compile_jobs(), compile_init_data(), timing()) ->
+-spec parallel_job('compile', [compile_job()], compile_init_data(), timing()) ->
{compile_result(), integer()};
- ('typesig', typesig_jobs(), typesig_init_data(), timing()) ->
+ ('typesig', [typesig_job()], typesig_init_data(), timing()) ->
typesig_result();
- ('dataflow', dataflow_jobs(), dataflow_init_data(),
+ ('dataflow', [dataflow_job()], dataflow_init_data(),
timing()) -> dataflow_result();
- ('warnings', warnings_jobs(), warnings_init_data(),
+ ('warnings', [warnings_job()], warnings_init_data(),
timing()) -> warnings_result().
parallel_job(Mode, Jobs, InitData, Timing) ->
@@ -118,7 +120,7 @@ spawn_jobs(Mode, Jobs, InitData, Timing) ->
Pid = dialyzer_worker:launch(Mode, Job, InitData, Coordinator),
case TypesigOrDataflow of
true -> true = ets:insert(SCCtoPID, {Job, Pid}), ok;
- false -> request_activation(Regulator, Pid)
+ false -> ok
end,
Count + 1
end,
@@ -217,10 +219,6 @@ request_activation({_Collector, Regulator, _SCCtoPID}) ->
Regulator ! {req, self()},
wait_activation().
-request_activation(Regulator, Pid) ->
- Regulator ! {req, Pid},
- ok.
-
spawn_regulator() ->
InitTickets = dialyzer_utils:parallelism(),
spawn_link(fun() -> regulator_loop(InitTickets, queue:new()) end).
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index cabc5e9e0d..963c953447 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -43,7 +43,6 @@
-include("dialyzer.hrl").
-%%-import(helper, %% 'helper' could be any module doing sanity checks...
-import(erl_types,
[t_inf/2, t_inf/3, t_inf_lists/2, t_inf_lists/3,
t_inf_lists/3, t_is_equal/2, t_is_subtype/2, t_subtract/2,
@@ -72,7 +71,7 @@
t_tuple/0, t_tuple/1, t_tuple_args/1, t_tuple_args/2,
t_tuple_subtypes/2,
t_unit/0, t_unopaque/2,
- t_map/1
+ t_map/0, t_map/1, t_is_singleton/2
]).
%%-define(DEBUG, true).
@@ -99,25 +98,35 @@
-define(BITS, 128).
--record(state, {callgraph :: dialyzer_callgraph:callgraph(),
- codeserver :: dialyzer_codeserver:codeserver(),
- envs :: env_tab(),
- fun_tab :: fun_tab(),
- fun_homes :: dict:dict(label(), mfa()),
- plt :: dialyzer_plt:plt(),
- opaques :: [type()],
+%% Types with comment 'race' are due to dialyzer_races.erl.
+-record(state, {callgraph :: dialyzer_callgraph:callgraph()
+ | 'undefined', % race
+ codeserver :: dialyzer_codeserver:codeserver()
+ | 'undefined', % race
+ envs :: env_tab()
+ | 'undefined', % race
+ fun_tab :: fun_tab()
+ | 'undefined', % race
+ fun_homes :: dict:dict(label(), mfa())
+ | 'undefined', % race
+ plt :: dialyzer_plt:plt()
+ | 'undefined', % race
+ opaques :: [type()]
+ | 'undefined', % race
races = dialyzer_races:new() :: dialyzer_races:races(),
records = dict:new() :: types(),
- tree_map :: dict:dict(label(), cerl:cerl()),
+ tree_map :: dict:dict(label(), cerl:cerl())
+ | 'undefined', % race
warning_mode = false :: boolean(),
warnings = [] :: [raw_warning()],
- work :: {[_], [_], sets:set()},
+ work :: {[_], [_], sets:set()}
+ | 'undefined', % race
module :: module(),
curr_fun :: curr_fun()
}).
--record(map, {dict = dict:new() :: type_tab(),
- subst = dict:new() :: subst_tab(),
+-record(map, {map = maps:new() :: type_tab(),
+ subst = maps:new() :: subst_tab(),
modified = [] :: [Key :: term()],
modified_stack = [] :: [{[Key :: term()],reference()}],
ref = undefined :: reference() | undefined}).
@@ -125,10 +134,10 @@
-type env_tab() :: dict:dict(label(), #map{}).
-type fun_entry() :: {Args :: [type()], RetType :: type()}.
-type fun_tab() :: dict:dict('top' | label(),
- {'not_handled', fun_entry()} | fun_entry()).
+ {'not_handled', fun_entry()} | fun_entry()).
-type key() :: label() | cerl:cerl().
--type type_tab() :: dict:dict(key(), type()).
--type subst_tab() :: dict:dict(key(), cerl:cerl()).
+-type type_tab() :: #{key() => type()}.
+-type subst_tab() :: #{key() => cerl:cerl()}.
%% Exported Types
@@ -332,8 +341,6 @@ traverse(Tree, Map, State) ->
handle_tuple(Tree, Map, State);
map ->
handle_map(Tree, Map, State);
- map_pair ->
- handle_map_pair(Tree, Map, State);
values ->
Elements = cerl:values_es(Tree),
{State1, Map1, EsType} = traverse_list(Elements, Map, State),
@@ -423,17 +430,35 @@ handle_apply(Tree, Map, State) ->
handle_apply_or_call(FunInfoList, Args, ArgTypes, Map, Tree, State) ->
None = t_none(),
+ %% Call-site analysis may be inaccurate and consider more funs than those that
+ %% are actually possible. If all of them are incorrect, then warnings can be
+ %% emitted. If at least one fun is ok, however, then no warning is emitted,
+ %% just in case the bad ones are not really possible. The last argument is
+ %% used for this, with the following encoding:
+ %% Initial value: {none, []}
+ %% First fun checked: {one, <List of warns>}
+ %% More funs checked: {many, <List of warns>}
+ %% A '{one, []}' can only become '{many, []}'.
+ %% If at any point an fun does not add warnings, then the list is also
+ %% replaced with an empty list.
handle_apply_or_call(FunInfoList, Args, ArgTypes, Map, Tree, State,
- [None || _ <- ArgTypes], None, false).
+ [None || _ <- ArgTypes], None, false, {none, []}).
handle_apply_or_call([{local, external}|Left], Args, ArgTypes, Map, Tree, State,
- _AccArgTypes, _AccRet, _HadExternal) ->
+ _AccArgTypes, _AccRet, _HadExternal, Warns) ->
+ {HowMany, _} = Warns,
+ NewHowMany =
+ case HowMany of
+ none -> one;
+ _ -> many
+ end,
+ NewWarns = {NewHowMany, []},
handle_apply_or_call(Left, Args, ArgTypes, Map, Tree, State,
- ArgTypes, t_any(), true);
+ ArgTypes, t_any(), true, NewWarns);
handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
Args, ArgTypes, Map, Tree,
#state{opaques = Opaques} = State,
- AccArgTypes, AccRet, HadExternal) ->
+ AccArgTypes, AccRet, HadExternal, Warns) ->
Any = t_any(),
AnyArgs = [Any || _ <- Args],
GenSig = {AnyArgs, fun(_) -> t_any() end},
@@ -497,7 +522,7 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
?debug("RetWithoutLocal: ~s\n", [erl_types:t_to_string(RetWithoutLocal)]),
?debug("BifRet: ~s\n", [erl_types:t_to_string(BifRange(NewArgTypes))]),
?debug("SigRange: ~s\n", [erl_types:t_to_string(SigRange)]),
- ?debug("ContrRet: ~s\n", [erl_types:t_to_string(CRange(NewArgTypes))]),
+ ?debug("ContrRet: ~s\n", [erl_types:t_to_string(ContrRet)]),
?debug("LocalRet: ~s\n", [erl_types:t_to_string(LocalRet)]),
State1 =
@@ -579,16 +604,32 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
end,
NewAccRet = t_sup(AccRet, TotalRet),
?debug("NewAccRet: ~s\n", [t_to_string(NewAccRet)]),
+ {NewWarnings, State4} = state__remove_added_warnings(State, State3),
+ {HowMany, OldWarnings} = Warns,
+ NewWarns =
+ case HowMany of
+ none -> {one, NewWarnings};
+ _ ->
+ case OldWarnings =:= [] of
+ true -> {many, []};
+ false ->
+ case NewWarnings =:= [] of
+ true -> {many, []};
+ false -> {many, NewWarnings ++ OldWarnings}
+ end
+ end
+ end,
handle_apply_or_call(Left, Args, ArgTypes, Map, Tree,
- State3, NewAccArgTypes, NewAccRet, HadExternal);
+ State4, NewAccArgTypes, NewAccRet, HadExternal, NewWarns);
handle_apply_or_call([], Args, _ArgTypes, Map, _Tree, State,
- AccArgTypes, AccRet, HadExternal) ->
+ AccArgTypes, AccRet, HadExternal, {_, Warnings}) ->
+ State1 = state__add_warnings(Warnings, State),
case HadExternal of
false ->
NewMap = enter_type_lists(Args, AccArgTypes, Map),
- {State, NewMap, AccRet};
+ {State1, NewMap, AccRet};
true ->
- {had_external, State}
+ {had_external, State1}
end.
apply_fail_reason(FailedSig, FailedBif, FailedContract) ->
@@ -937,12 +978,21 @@ handle_case(Tree, Map, State) ->
false -> State1
end,
Map2 = join_maps_begin(Map1),
- {MapList, State3, Type} =
+ {MapList, State3, Type, Warns} =
handle_clauses(Clauses, Arg, ArgType, ArgType, State2,
- [], Map2, [], []),
+ [], Map2, [], [], []),
+ %% Non-Erlang BEAM languages, such as Elixir, expand language constructs
+ %% into case statements. In that case, we do not want to warn on
+ %% individual clauses not matching unless none of them can.
+ SupressForced = is_compiler_generated(cerl:get_ann(Tree))
+ andalso not (t_is_none(Type)),
+ State4 = lists:foldl(fun({T,R,M,F}, S) ->
+ state__add_warning(
+ S,T,R,M,F andalso (not SupressForced))
+ end, State3, Warns),
Map3 = join_maps_end(MapList, Map2),
debug_pp_map(Map3),
- {State3, Map3, Type}
+ {State4, Map3, Type}
end.
%%----------------------------------------
@@ -1041,22 +1091,24 @@ handle_receive(Tree, Map, State) ->
RaceListSize + 1, State);
false -> State
end,
- {MapList, State2, ReceiveType} =
+ {MapList, State2, ReceiveType, Warns} =
handle_clauses(Clauses, ?no_arg, t_any(), t_any(), State1, [], Map,
- [], []),
+ [], [], []),
+ State3 = lists:foldl(fun({T,R,M,F}, S) -> state__add_warning(S,T,R,M,F) end,
+ State2, Warns),
Map1 = join_maps(MapList, Map),
- {State3, Map2, TimeoutType} = traverse(Timeout, Map1, State2),
- Opaques = State3#state.opaques,
+ {State4, Map2, TimeoutType} = traverse(Timeout, Map1, State3),
+ Opaques = State4#state.opaques,
case (t_is_atom(TimeoutType, Opaques) andalso
(t_atom_vals(TimeoutType, Opaques) =:= ['infinity'])) of
true ->
- {State3, Map2, ReceiveType};
+ {State4, Map2, ReceiveType};
false ->
Action = cerl:receive_action(Tree),
- {State4, Map3, ActionType} = traverse(Action, Map, State3),
+ {State5, Map3, ActionType} = traverse(Action, Map, State4),
Map4 = join_maps([Map3, Map1], Map),
Type = t_sup(ReceiveType, ActionType),
- {State4, Map4, Type}
+ {State5, Map4, Type}
end.
%%----------------------------------------
@@ -1092,15 +1144,54 @@ handle_try(Tree, Map, State) ->
%%----------------------------------------
handle_map(Tree,Map,State) ->
- Pairs = cerl:map_es(Tree),
- {State1, Map1, TypePairs} = traverse_list(Pairs,Map,State),
- {State1, Map1, t_map(TypePairs)}.
+ Pairs = cerl:map_es(Tree),
+ Arg = cerl:map_arg(Tree),
+ {State1, Map1, ArgType} = traverse(Arg, Map, State),
+ ArgType1 = t_inf(t_map(), ArgType),
+ case t_is_none_or_unit(ArgType1) of
+ true ->
+ {State1, Map1, ArgType1};
+ false ->
+ {State2, Map2, TypePairs, ExactKeys} =
+ traverse_map_pairs(Pairs, Map1, State1, t_none(), [], []),
+ InsertPair = fun({KV,assoc,_},Acc) -> erl_types:t_map_put(KV,Acc);
+ ({KV,exact,KVTree},Acc) ->
+ case t_is_none(T=erl_types:t_map_update(KV,Acc)) of
+ true -> throw({none, Acc, KV, KVTree});
+ false -> T
+ end
+ end,
+ try lists:foldl(InsertPair, ArgType1, TypePairs)
+ of ResT ->
+ BindT = t_map([{K, t_any()} || K <- ExactKeys]),
+ case bind_pat_vars_reverse([Arg], [BindT], [], Map2, State2) of
+ {error, _, _, _, _} -> {State2, Map2, ResT};
+ {Map3, _} -> {State2, Map3, ResT}
+ end
+ catch {none, MapType, {K,_}, KVTree} ->
+ Msg2 = {map_update, [format_type(MapType, State2),
+ format_type(K, State2)]},
+ {state__add_warning(State2, ?WARN_MAP_CONSTRUCTION, KVTree, Msg2),
+ Map2, t_none()}
+ end
+ end.
-handle_map_pair(Tree,Map,State) ->
- Key = cerl:map_pair_key(Tree),
- Val = cerl:map_pair_val(Tree),
+traverse_map_pairs([], Map, State, _ShadowKeys, PairAcc, KeyAcc) ->
+ {State, Map, lists:reverse(PairAcc), KeyAcc};
+traverse_map_pairs([Pair|Pairs], Map, State, ShadowKeys, PairAcc, KeyAcc) ->
+ Key = cerl:map_pair_key(Pair),
+ Val = cerl:map_pair_val(Pair),
+ Op = cerl:map_pair_op(Pair),
{State1, Map1, [K,V]} = traverse_list([Key,Val],Map,State),
- {State1, Map1, {K,V}}.
+ KeyAcc1 =
+ case cerl:is_literal(Op) andalso cerl:concrete(Op) =:= exact andalso
+ t_is_singleton(K, State#state.opaques) andalso
+ t_is_none(t_inf(ShadowKeys, K)) of
+ true -> [K|KeyAcc];
+ false -> KeyAcc
+ end,
+ traverse_map_pairs(Pairs, Map1, State1, t_sup(K, ShadowKeys),
+ [{{K,V},cerl:concrete(Op),Pair}|PairAcc], KeyAcc1).
%%----------------------------------------
@@ -1165,7 +1256,7 @@ handle_tuple(Tree, Map, State) ->
%% Clauses
%%
handle_clauses([C|Left], Arg, ArgType, OrigArgType, State, CaseTypes, MapIn,
- Acc, ClauseAcc) ->
+ Acc, ClauseAcc, WarnAcc0) ->
IsRaceAnalysisEnabled = is_race_analysis_enabled(State),
State1 =
case IsRaceAnalysisEnabled of
@@ -1178,8 +1269,8 @@ handle_clauses([C|Left], Arg, ArgType, OrigArgType, State, CaseTypes, MapIn,
State);
false -> State
end,
- {State2, ClauseMap, BodyType, NewArgType} =
- do_clause(C, Arg, ArgType, OrigArgType, MapIn, State1),
+ {State2, ClauseMap, BodyType, NewArgType, WarnAcc} =
+ do_clause(C, Arg, ArgType, OrigArgType, MapIn, State1, WarnAcc0),
{NewClauseAcc, State3} =
case IsRaceAnalysisEnabled of
true ->
@@ -1197,9 +1288,9 @@ handle_clauses([C|Left], Arg, ArgType, OrigArgType, State, CaseTypes, MapIn,
false -> {[BodyType|CaseTypes], [ClauseMap|Acc]}
end,
handle_clauses(Left, Arg, NewArgType, OrigArgType, State3,
- NewCaseTypes, MapIn, NewAcc, NewClauseAcc);
+ NewCaseTypes, MapIn, NewAcc, NewClauseAcc, WarnAcc);
handle_clauses([], _Arg, _ArgType, _OrigArgType, State, CaseTypes, _MapIn, Acc,
- ClauseAcc) ->
+ ClauseAcc, WarnAcc) ->
State1 =
case is_race_analysis_enabled(State) of
true ->
@@ -1209,9 +1300,9 @@ handle_clauses([], _Arg, _ArgType, _OrigArgType, State, CaseTypes, _MapIn, Acc,
RaceListSize + 1, State);
false -> State
end,
- {lists:reverse(Acc), State1, t_sup(CaseTypes)}.
+ {lists:reverse(Acc), State1, t_sup(CaseTypes), WarnAcc}.
-do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
+do_clause(C, Arg, ArgType0, OrigArgType, Map, State, Warns) ->
Pats = cerl:clause_pats(C),
Guard = cerl:clause_guard(C),
Body = cerl:clause_body(C),
@@ -1243,7 +1334,7 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
[cerl_prettypr:format(C), format_type(ArgType0, State1)]),
case state__warning_mode(State1) of
false ->
- {State1, Map, t_none(), ArgType0};
+ {State1, Map, t_none(), ArgType0, Warns};
true ->
{Msg, Force} =
case t_is_none(ArgType0) of
@@ -1323,8 +1414,7 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
{record_match, _} -> ?WARN_MATCHING;
{pattern_match_cov, _} -> ?WARN_MATCHING
end,
- {state__add_warning(State1, WarnType, C, Msg, Force),
- Map, t_none(), ArgType0}
+ {State1, Map, t_none(), ArgType0, [{WarnType, C, Msg, Force}|Warns]}
end;
{Map2, PatTypes} ->
Map3 =
@@ -1357,9 +1447,9 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
false ->
{guard_fail_pat, [PatString, format_type(ArgType0, State1)]}
end,
- State2 =
+ Warn =
case Reason of
- none -> state__add_warning(State1, ?WARN_MATCHING, C, DefaultMsg);
+ none -> {?WARN_MATCHING, C, DefaultMsg, false};
{FailGuard, Msg} ->
case is_compiler_generated(cerl:get_ann(FailGuard)) of
false ->
@@ -1368,15 +1458,15 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
{neg_guard_fail, _} -> ?WARN_MATCHING;
{opaque_guard, _} -> ?WARN_OPAQUE
end,
- state__add_warning(State1, WarnType, FailGuard, Msg);
+ {WarnType, FailGuard, Msg, false};
true ->
- state__add_warning(State1, ?WARN_MATCHING, C, Msg)
+ {?WARN_MATCHING, C, Msg, false}
end
end,
- {State2, Map, t_none(), NewArgType};
+ {State1, Map, t_none(), NewArgType, [Warn|Warns]};
Map4 ->
{RetState, RetMap, BodyType} = traverse(Body, Map4, State1),
- {RetState, RetMap, BodyType, NewArgType}
+ {RetState, RetMap, BodyType, NewArgType, Warns}
end
end.
@@ -1435,7 +1525,9 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
{NewMap, TypeOut} =
case cerl:type(Pat) of
alias ->
- AliasPat = cerl:alias_pat(Pat),
+ %% Map patterns are more allowing than the type of their literal. We
+ %% must unfold AliasPat if it is a literal.
+ AliasPat = dialyzer_utils:refold_pattern(cerl:alias_pat(Pat)),
Var = cerl:alias_var(Pat),
Map1 = enter_subst(Var, AliasPat, Map),
{Map2, [PatType]} = bind_pat_vars([AliasPat], [Type], [],
@@ -1476,14 +1568,59 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
{Map1, t_cons(HdType, TlType)}
end;
literal ->
- Literal = literal_type(Pat),
- case t_is_none(t_inf(Literal, Type, Opaques)) of
+ Pat0 = dialyzer_utils:refold_pattern(Pat),
+ case cerl:is_literal(Pat0) of
true ->
- bind_opaque_pats(Literal, Type, Pat, State);
- false -> {Map, Literal}
+ Literal = literal_type(Pat),
+ case t_is_none(t_inf(Literal, Type, Opaques)) of
+ true ->
+ bind_opaque_pats(Literal, Type, Pat, State);
+ false -> {Map, Literal}
+ end;
+ false ->
+ %% Retry with the unfolded pattern
+ {Map1, [PatType]}
+ = bind_pat_vars([Pat0], [Type], [], Map, State, Rev),
+ {Map1, PatType}
end;
map ->
- {Map, t_map([])};
+ MapT = t_inf(Type, t_map(), Opaques),
+ case t_is_none(MapT) of
+ true ->
+ bind_opaque_pats(t_map(), Type, Pat, State);
+ false ->
+ case Rev of
+ %% TODO: Reverse matching (propagating a matched subset back to a value)
+ true -> {Map, MapT};
+ false ->
+ FoldFun =
+ fun(Pair, {MapAcc, ListAcc}) ->
+ %% Only exact (:=) can appear in patterns
+ exact = cerl:concrete(cerl:map_pair_op(Pair)),
+ Key = cerl:map_pair_key(Pair),
+ KeyType =
+ case cerl:type(Key) of
+ var ->
+ case state__lookup_type_for_letrec(Key, State) of
+ error -> lookup_type(Key, MapAcc);
+ {ok, RecType} -> RecType
+ end;
+ literal ->
+ literal_type(Key)
+ end,
+ Bind = erl_types:t_map_get(KeyType, MapT),
+ {MapAcc1, [ValType]} =
+ bind_pat_vars([cerl:map_pair_val(Pair)],
+ [Bind], [], MapAcc, State, Rev),
+ case t_is_singleton(KeyType, Opaques) of
+ true -> {MapAcc1, [{KeyType, ValType}|ListAcc]};
+ false -> {MapAcc1, ListAcc}
+ end
+ end,
+ {Map1, Pairs} = lists:foldl(FoldFun, {Map, []}, cerl:map_es(Pat)),
+ {Map1, t_inf(MapT, t_map(Pairs))}
+ end
+ end;
tuple ->
Es = cerl:tuple_es(Pat),
{TypedRecord, Prototype} =
@@ -1672,7 +1809,7 @@ bind_opaque_pats(GenType, Type, Pat, State) ->
%%
bind_guard(Guard, Map, State) ->
- try bind_guard(Guard, Map, dict:new(), pos, State) of
+ try bind_guard(Guard, Map, maps:new(), pos, State) of
{Map1, _Type} -> Map1
catch
throw:{fail, Warning} -> {error, Warning};
@@ -1700,20 +1837,63 @@ bind_guard(Guard, Map, Env, Eval, State) ->
'try' ->
Arg = cerl:try_arg(Guard),
[Var] = cerl:try_vars(Guard),
+ EVars = cerl:try_evars(Guard),
%%?debug("Storing: ~w\n", [Var]),
- NewEnv = dict:store(get_label(Var), Arg, Env),
- bind_guard(cerl:try_body(Guard), Map, NewEnv, Eval, State);
+ Map1 = join_maps_begin(Map),
+ Map2 = mark_as_fresh(EVars, Map1),
+ %% Visit handler first so we know if it should be ignored
+ {{HandlerMap, HandlerType}, HandlerE} =
+ try {bind_guard(cerl:try_handler(Guard), Map2, Env, Eval, State), none}
+ catch throw:HE ->
+ {{Map2, t_none()}, HE}
+ end,
+ BodyEnv = maps:put(get_label(Var), Arg, Env),
+ Wanted = case Eval of pos -> t_atom(true); neg -> t_atom(false);
+ dont_know -> t_any() end,
+ case t_is_none(t_inf(HandlerType, Wanted)) of
+ %% Handler won't save us; pretend it does not exist
+ true -> bind_guard(cerl:try_body(Guard), Map, BodyEnv, Eval, State);
+ false ->
+ {{BodyMap, BodyType}, BodyE} =
+ try {bind_guard(cerl:try_body(Guard), Map1, BodyEnv,
+ Eval, State), none}
+ catch throw:BE ->
+ {{Map1, t_none()}, BE}
+ end,
+ Map3 = join_maps_end([BodyMap, HandlerMap], Map1),
+ case t_is_none(Sup = t_sup(BodyType, HandlerType)) of
+ true ->
+ %% Pick a reason. N.B. We assume that the handler is always
+ %% compiler-generated if the body is; that way, we won't need to
+ %% check.
+ Fatality = case {BodyE, HandlerE} of
+ {{fatal_fail, _}, _} -> fatal_fail;
+ {_, {fatal_fail, _}} -> fatal_fail;
+ _ -> fail
+ end,
+ throw({Fatality,
+ case {BodyE, HandlerE} of
+ {{_, Rsn}, _} when Rsn =/= none -> Rsn;
+ {_, {_,Rsn}} -> Rsn;
+ _ -> none
+ end});
+ false -> {Map3, Sup}
+ end
+ end;
tuple ->
Es0 = cerl:tuple_es(Guard),
{Map1, Es} = bind_guard_list(Es0, Map, Env, dont_know, State),
{Map1, t_tuple(Es)};
map ->
- {Map, t_map([])};
+ case Eval of
+ dont_know -> handle_guard_map(Guard, Map, Env, State);
+ _PosOrNeg -> {Map, t_none()} %% Map exprs do not produce bools
+ end;
'let' ->
Arg = cerl:let_arg(Guard),
[Var] = cerl:let_vars(Guard),
%%?debug("Storing: ~w\n", [Var]),
- NewEnv = dict:store(get_label(Var), Arg, Env),
+ NewEnv = maps:put(get_label(Var), Arg, Env),
bind_guard(cerl:let_body(Guard), Map, NewEnv, Eval, State);
values ->
Es = cerl:values_es(Guard),
@@ -1722,7 +1902,7 @@ bind_guard(Guard, Map, Env, Eval, State) ->
{Map, Type};
var ->
?debug("Looking for var(~w)...", [cerl_trees:get_label(Guard)]),
- case dict:find(get_label(Guard), Env) of
+ case maps:find(get_label(Guard), Env) of
error ->
?debug("Did not find it\n", []),
Type = lookup_type(Guard, Map),
@@ -1751,7 +1931,7 @@ handle_guard_call(Guard, Map, Env, Eval, State) ->
{erlang, F, 1} when F =:= is_atom; F =:= is_boolean;
F =:= is_binary; F =:= is_bitstring;
F =:= is_float; F =:= is_function;
- F =:= is_integer; F =:= is_list;
+ F =:= is_integer; F =:= is_list; F =:= is_map;
F =:= is_number; F =:= is_pid; F =:= is_port;
F =:= is_reference; F =:= is_tuple ->
handle_guard_type_test(Guard, F, Map, Env, Eval, State);
@@ -1831,6 +2011,7 @@ bind_type_test(Eval, TypeTest, ArgType, State) ->
is_function -> t_fun();
is_integer -> t_integer();
is_list -> t_maybe_improper_list();
+ is_map -> t_map();
is_number -> t_number();
is_pid -> t_pid();
is_port -> t_port();
@@ -2339,6 +2520,30 @@ bind_guard_list([G|Gs], Map, Env, Eval, State, Acc) ->
bind_guard_list([], Map, _Env, _Eval, _State, Acc) ->
{Map, lists:reverse(Acc)}.
+handle_guard_map(Guard, Map, Env, State) ->
+ Pairs = cerl:map_es(Guard),
+ Arg = cerl:map_arg(Guard),
+ {Map1, ArgType0} = bind_guard(Arg, Map, Env, dont_know, State),
+ ArgType1 = t_inf(t_map(), ArgType0),
+ case t_is_none_or_unit(ArgType1) of
+ true -> {Map1, t_none()};
+ false ->
+ {Map2, TypePairs} = bind_guard_map_pairs(Pairs, Map1, Env, State, []),
+ {Map2, lists:foldl(fun({KV,assoc},Acc) -> erl_types:t_map_put(KV,Acc);
+ ({KV,exact},Acc) -> erl_types:t_map_update(KV,Acc)
+ end, ArgType1, TypePairs)}
+ end.
+
+bind_guard_map_pairs([], Map, _Env, _State, PairAcc) ->
+ {Map, lists:reverse(PairAcc)};
+bind_guard_map_pairs([Pair|Pairs], Map, Env, State, PairAcc) ->
+ Key = cerl:map_pair_key(Pair),
+ Val = cerl:map_pair_val(Pair),
+ Op = cerl:map_pair_op(Pair),
+ {Map1, [K,V]} = bind_guard_list([Key,Val],Map,Env,dont_know,State),
+ bind_guard_map_pairs(Pairs, Map1, Env, State,
+ [{{K,V},cerl:concrete(Op)}|PairAcc]).
+
-type eval() :: 'pos' | 'neg' | 'dont_know'.
-spec signal_guard_fail(eval(), cerl:c_call(), [type()],
@@ -2411,7 +2616,9 @@ filter_fail_clauses([Clause|Left]) ->
case (cerl:clause_pats(Clause) =:= []) of
true ->
Body = cerl:clause_body(Clause),
- case cerl:is_literal(Body) andalso (cerl:concrete(Body) =:= fail) of
+ case cerl:is_literal(Body) andalso (cerl:concrete(Body) =:= fail) orelse
+ cerl:is_c_primop(Body) andalso
+ (cerl:atom_val(cerl:primop_name(Body)) =:= match_fail) of
true -> filter_fail_clauses(Left);
false -> [Clause|filter_fail_clauses(Left)]
end;
@@ -2525,10 +2732,10 @@ join_maps_end(Maps, MapOut) ->
#map{ref = Ref, modified_stack = [{M1,R1} | S]} = MapOut,
true = lists:all(fun(M) -> M#map.ref =:= Ref end, Maps), % sanity
Keys0 = lists:usort(lists:append([M#map.modified || M <- Maps])),
- #map{dict = Dict, subst = Subst} = MapOut,
+ #map{map = Map, subst = Subst} = MapOut,
Keys = [Key ||
Key <- Keys0,
- dict:is_key(Key, Dict) orelse dict:is_key(Key, Subst)],
+ maps:is_key(Key, Map) orelse maps:is_key(Key, Subst)],
Out = case Maps of
[] -> join_maps(Maps, MapOut);
_ -> join_maps(Keys, Maps, MapOut)
@@ -2539,8 +2746,8 @@ join_maps_end(Maps, MapOut) ->
modified_stack = S}.
join_maps(Maps, MapOut) ->
- #map{dict = Dict, subst = Subst} = MapOut,
- Keys = ordsets:from_list(dict:fetch_keys(Dict) ++ dict:fetch_keys(Subst)),
+ #map{map = Map, subst = Subst} = MapOut,
+ Keys = ordsets:from_list(maps:keys(Map) ++ maps:keys(Subst)),
join_maps(Keys, Maps, MapOut).
join_maps(Keys, Maps, MapOut) ->
@@ -2569,11 +2776,11 @@ join_maps_one_key([], _Key, AccType) ->
-ifdef(DEBUG).
debug_join_check(Maps, MapOut, Out) ->
- #map{dict = Dict, subst = Subst} = Out,
- #map{dict = Dict2, subst = Subst2} = join_maps(Maps, MapOut),
- F = fun(D) -> lists:keysort(1, dict:to_list(D)) end,
+ #map{map = Map, subst = Subst} = Out,
+ #map{map = Map2, subst = Subst2} = join_maps(Maps, MapOut),
+ F = fun(D) -> lists:keysort(1, maps:to_list(D)) end,
[throw({bug, join_maps}) ||
- F(Dict) =/= F(Dict2) orelse F(Subst) =/= F(Subst2)].
+ F(Map) =/= F(Map2) orelse F(Subst) =/= F(Subst2)].
-else.
debug_join_check(_Maps, _MapOut, _Out) -> ok.
-endif.
@@ -2604,15 +2811,15 @@ enter_type(Key, Val, MS) ->
enter_type_lists(Keys, t_to_tlist(Val), MS)
end;
false ->
- #map{dict = Dict, subst = Subst} = MS,
+ #map{map = Map, subst = Subst} = MS,
KeyLabel = get_label(Key),
- case dict:find(KeyLabel, Subst) of
+ case maps:find(KeyLabel, Subst) of
{ok, NewKey} ->
?debug("Binding ~p to ~p\n", [KeyLabel, NewKey]),
enter_type(NewKey, Val, MS);
error ->
?debug("Entering ~p :: ~s\n", [KeyLabel, t_to_string(Val)]),
- case dict:find(KeyLabel, Dict) of
+ case maps:find(KeyLabel, Map) of
{ok, Value} ->
case erl_types:t_is_equal(Val, Value) of
true -> MS;
@@ -2624,13 +2831,14 @@ enter_type(Key, Val, MS) ->
end
end.
-store_map(Key, Val, #map{dict = Dict, ref = undefined} = Map) ->
- Map#map{dict = dict:store(Key, Val, Dict)};
-store_map(Key, Val, #map{dict = Dict, modified = Mod} = Map) ->
- Map#map{dict = dict:store(Key, Val, Dict), modified = [Key | Mod]}.
+store_map(Key, Val, #map{map = Map, ref = undefined} = MapRec) ->
+ MapRec#map{map = maps:put(Key, Val, Map)};
+store_map(Key, Val, #map{map = Map, modified = Mod} = MapRec) ->
+ MapRec#map{map = maps:put(Key, Val, Map), modified = [Key | Mod]}.
-enter_subst(Key, Val, #map{subst = Subst} = MS) ->
+enter_subst(Key, Val0, #map{subst = Subst} = MS) ->
KeyLabel = get_label(Key),
+ Val = dialyzer_utils:refold_pattern(Val0),
case cerl:is_literal(Val) of
true ->
store_map(KeyLabel, literal_type(Val), MS);
@@ -2639,7 +2847,7 @@ enter_subst(Key, Val, #map{subst = Subst} = MS) ->
false -> MS;
true ->
ValLabel = get_label(Val),
- case dict:find(ValLabel, Subst) of
+ case maps:find(ValLabel, Subst) of
{ok, NewVal} ->
enter_subst(Key, NewVal, MS);
error ->
@@ -2653,22 +2861,22 @@ enter_subst(Key, Val, #map{subst = Subst} = MS) ->
end.
store_subst(Key, Val, #map{subst = S, ref = undefined} = Map) ->
- Map#map{subst = dict:store(Key, Val, S)};
+ Map#map{subst = maps:put(Key, Val, S)};
store_subst(Key, Val, #map{subst = S, modified = Mod} = Map) ->
- Map#map{subst = dict:store(Key, Val, S), modified = [Key | Mod]}.
+ Map#map{subst = maps:put(Key, Val, S), modified = [Key | Mod]}.
-lookup_type(Key, #map{dict = Dict, subst = Subst}) ->
- lookup(Key, Dict, Subst, t_none()).
+lookup_type(Key, #map{map = Map, subst = Subst}) ->
+ lookup(Key, Map, Subst, t_none()).
-lookup(Key, Dict, Subst, AnyNone) ->
+lookup(Key, Map, Subst, AnyNone) ->
case cerl:is_literal(Key) of
true -> literal_type(Key);
false ->
Label = get_label(Key),
- case dict:find(Label, Subst) of
- {ok, NewKey} -> lookup(NewKey, Dict, Subst, AnyNone);
+ case maps:find(Label, Subst) of
+ {ok, NewKey} -> lookup(NewKey, Map, Subst, AnyNone);
error ->
- case dict:find(Label, Dict) of
+ case maps:find(Label, Map) of
{ok, Val} -> Val;
error -> AnyNone
end
@@ -2693,6 +2901,9 @@ mark_as_fresh([Tree|Left], Map) ->
bitstr ->
%% The Size field is not fresh.
{SubTrees1 -- [cerl:bitstr_size(Tree)], Map};
+ map_pair ->
+ %% The keys are not fresh
+ {SubTrees1 -- [cerl:map_pair_key(Tree)], Map};
var ->
{SubTrees1, enter_type(Tree, t_any(), Map)};
_ ->
@@ -2703,12 +2914,12 @@ mark_as_fresh([], Map) ->
Map.
-ifdef(DEBUG).
-debug_pp_map(#map{dict = Dict}=Map) ->
- Keys = dict:fetch_keys(Dict),
+debug_pp_map(#map{map = Map}=MapRec) ->
+ Keys = maps:keys(Map),
io:format("Map:\n", []),
lists:foreach(fun (Key) ->
io:format("\t~w :: ~s\n",
- [Key, t_to_string(lookup_type(Key, Map))])
+ [Key, t_to_string(lookup_type(Key, MapRec))])
end, Keys),
ok.
-else.
@@ -2753,11 +2964,15 @@ is_call_to_send(Tree) ->
Arity = cerl:call_arity(Tree),
cerl:is_c_atom(Mod)
andalso cerl:is_c_atom(Name)
- andalso (cerl:atom_val(Name) =:= '!')
+ andalso is_send(cerl:atom_val(Name))
andalso (cerl:atom_val(Mod) =:= erlang)
andalso (Arity =:= 2)
end.
+is_send('!') -> true;
+is_send(send) -> true;
+is_send(_) -> false.
+
is_lc_simple_list(Tree, TreeType, State) ->
Opaques = State#state.opaques,
Ann = cerl:get_ann(Tree),
@@ -2866,11 +3081,22 @@ state__add_warning(#state{warnings = Warnings, warning_mode = true} = State,
false ->
WarningInfo = {get_file(Ann), get_line(Ann), State#state.curr_fun},
Warn = {Tag, WarningInfo, Msg},
- ?debug("MSG ~s\n", [dialyzer:format_warning(Warn)]),
+ case Tag of
+ ?WARN_CONTRACT_RANGE -> ok;
+ _ -> ?debug("MSG ~s\n", [dialyzer:format_warning(Warn)])
+ end,
State#state{warnings = [Warn|Warnings]}
end
end.
+state__remove_added_warnings(OldState, NewState) ->
+ #state{warnings = OldWarnings} = OldState,
+ #state{warnings = NewWarnings} = NewState,
+ {NewWarnings -- OldWarnings, NewState#state{warnings = OldWarnings}}.
+
+state__add_warnings(Warns, #state{warnings = Warnings} = State) ->
+ State#state{warnings = Warns ++ Warnings}.
+
-spec state__set_curr_fun(curr_fun(), state()) -> state().
state__set_curr_fun(undefined, State) ->
diff --git a/lib/dialyzer/src/dialyzer_dep.erl b/lib/dialyzer/src/dialyzer_dep.erl
index a7bc074d02..273c05c54c 100644
--- a/lib/dialyzer/src/dialyzer_dep.erl
+++ b/lib/dialyzer/src/dialyzer_dep.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -59,8 +59,14 @@
%% separately.
%%
--spec analyze(cerl:c_module()) ->
- {dict:dict(), ordsets:ordset('external' | label()), dict:dict(), dict:dict()}.
+-type dep_ordset() :: ordsets:ordset(label() | 'external').
+
+-type deps() :: dict:dict(label() | 'external' | 'top', dep_ordset()).
+-type esc() :: dep_ordset().
+-type calls() :: dict:dict(label(), ordsets:ordset(label())).
+-type letrecs() :: dict:dict(label(), label()).
+
+-spec analyze(cerl:c_module()) -> {deps(), esc(), calls(), letrecs()}.
analyze(Tree) ->
%% io:format("Handling ~w\n", [cerl:atom_val(cerl:module_name(Tree))]),
@@ -79,22 +85,26 @@ traverse(Tree, Out, State, CurrentFun) ->
apply ->
Op = cerl:apply_op(Tree),
Args = cerl:apply_args(Tree),
- %% Op is always a variable and should not be marked as escaping
- %% based on its use.
case var =:= cerl:type(Op) of
- false -> erlang:error({apply_op_not_a_variable, cerl:type(Op)});
- true -> ok
- end,
- OpFuns = case map__lookup(cerl_trees:get_label(Op), Out) of
- none -> output(none);
- {value, OF} -> OF
- end,
- {ArgFuns, State2} = traverse_list(Args, Out, State, CurrentFun),
- State3 = state__add_esc(merge_outs(ArgFuns), State2),
- State4 = state__add_deps(CurrentFun, OpFuns, State3),
- State5 = state__store_callsite(cerl_trees:get_label(Tree),
- OpFuns, length(Args), State4),
- {output(set__singleton(external)), State5};
+ false ->
+ %% We have discovered an error here, but we ignore it and let
+ %% later passes handle it; we do not modify the dependencies.
+ %% erlang:error({apply_op_not_a_variable, cerl:type(Op)});
+ {output(none), State};
+ true ->
+ %% Op is a variable and should not be marked as escaping
+ %% based on its use.
+ OpFuns = case map__lookup(cerl_trees:get_label(Op), Out) of
+ none -> output(none);
+ {value, OF} -> OF
+ end,
+ {ArgFuns, State2} = traverse_list(Args, Out, State, CurrentFun),
+ State3 = state__add_esc(merge_outs(ArgFuns), State2),
+ State4 = state__add_deps(CurrentFun, OpFuns, State3),
+ State5 = state__store_callsite(cerl_trees:get_label(Tree),
+ OpFuns, length(Args), State4),
+ {output(set__singleton(external)), State5}
+ end;
binary ->
{output(none), State};
'case' ->
@@ -481,11 +491,11 @@ all_vars(Tree, AccIn) ->
-type local_set() :: 'none' | #set{}.
--record(state, {deps :: dict:dict(),
+-record(state, {deps :: deps(),
esc :: local_set(),
- call :: dict:dict(),
- arities :: dict:dict(),
- letrecs :: dict:dict()}).
+ calls :: calls(),
+ arities :: dict:dict(label() | 'top', arity()),
+ letrecs :: letrecs()}).
state__new(Tree) ->
Exports = set__from_list([X || X <- cerl:module_exports(Tree)]),
@@ -503,7 +513,7 @@ state__new(Tree) ->
%% init the escaping function labels to exported + called from on_load
InitEsc = set__from_list(OnLoadLs ++ ExpLs),
Arities = cerl_trees:fold(fun find_arities/2, dict:new(), Tree),
- #state{deps = map__new(), esc = InitEsc, call = map__new(),
+ #state{deps = map__new(), esc = InitEsc, calls = map__new(),
arities = Arities, letrecs = map__new()}.
find_arities(Tree, AccMap) ->
@@ -518,7 +528,7 @@ find_arities(Tree, AccMap) ->
state__add_deps(_From, #output{content = none}, State) ->
State;
-state__add_deps(From, #output{type = single, content=To},
+state__add_deps(From, #output{type = single, content = To},
#state{deps = Map} = State) ->
%% io:format("Adding deps from ~w to ~w\n", [From, set__to_ordsets(To)]),
State#state{deps = map__add(From, To, Map)}.
@@ -544,16 +554,16 @@ state__esc(#state{esc = Esc}) ->
state__store_callsite(_From, #output{content = none}, _CallArity, State) ->
State;
state__store_callsite(From, To, CallArity,
- #state{call = Calls, arities = Arities} = State) ->
+ #state{calls = Calls, arities = Arities} = State) ->
Filter = fun(external) -> true;
(Fun) -> CallArity =:= dict:fetch(Fun, Arities)
end,
case filter_outs(To, Filter) of
#output{content = none} -> State;
- To1 -> State#state{call = map__store(From, To1, Calls)}
+ To1 -> State#state{calls = map__store(From, To1, Calls)}
end.
-state__calls(#state{call = Calls}) ->
+state__calls(#state{calls = Calls}) ->
Calls.
%%------------------------------------------------------------
diff --git a/lib/dialyzer/src/dialyzer_explanation.erl b/lib/dialyzer/src/dialyzer_explanation.erl
index 20fbcfed35..968f8df78e 100644
--- a/lib/dialyzer/src/dialyzer_explanation.erl
+++ b/lib/dialyzer/src/dialyzer_explanation.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/dialyzer/src/dialyzer_gui_wx.erl b/lib/dialyzer/src/dialyzer_gui_wx.erl
index ff54a91ce1..30d2bdeca4 100644
--- a/lib/dialyzer/src/dialyzer_gui_wx.erl
+++ b/lib/dialyzer/src/dialyzer_gui_wx.erl
@@ -2,7 +2,7 @@
%%------------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,7 +52,6 @@
add_dir :: wx:wx_object(),
add_rec :: wx:wx_object(),
chosen_box :: wx:wx_object(),
- analysis_pid :: pid(),
del_file :: wx:wx_object(),
doc_plt :: dialyzer_plt:plt(),
clear_chosen :: wx:wx_object(),
@@ -72,11 +71,11 @@
stop :: wx:wx_object(),
frame :: wx:wx_object(),
warnings_box :: wx:wx_object(),
- explanation_box :: wx:wx_object(),
+ explanation_box :: wx:wx_object() | 'undefined',
wantedWarnings :: list(),
rawWarnings :: list(),
- backend_pid :: pid(),
- expl_pid :: pid()}).
+ backend_pid :: pid() | 'undefined',
+ expl_pid :: pid() | 'undefined'}).
%%------------------------------------------------------------------------
@@ -423,7 +422,7 @@ gui_loop(#gui_state{backend_pid = BackendPid, doc_plt = DocPlt,
#wx{id=?menuID_HELP_ABOUT, obj=Frame,
event=#wxCommand{type=command_menu_selected}} ->
Message = " This is DIALYZER version " ++ ?VSN ++ " \n"++
- "DIALYZER is a DIscrepany AnaLYZer for ERlang programs.\n\n"++
+ "DIALYZER is a DIscrepancy AnaLYZer for ERlang programs.\n\n"++
" Copyright (C) Tobias Lindahl <[email protected]>\n"++
" Kostis Sagonas <[email protected]>\n\n",
output_sms(State, "About Dialyzer", Message, info),
diff --git a/lib/dialyzer/src/dialyzer_options.erl b/lib/dialyzer/src/dialyzer_options.erl
index dd81dd01ed..add660eae9 100644
--- a/lib/dialyzer/src/dialyzer_options.erl
+++ b/lib/dialyzer/src/dialyzer_options.erl
@@ -47,6 +47,7 @@ build(Opts) ->
?WARN_CALLGRAPH,
?WARN_FAILING_CALL,
?WARN_BIN_CONSTRUCTION,
+ ?WARN_MAP_CONSTRUCTION,
?WARN_CONTRACT_RANGE,
?WARN_CONTRACT_TYPES,
?WARN_CONTRACT_SYNTAX,
diff --git a/lib/dialyzer/src/dialyzer_plt.erl b/lib/dialyzer/src/dialyzer_plt.erl
index 769f26a3df..cf2f0e919e 100644
--- a/lib/dialyzer/src/dialyzer_plt.erl
+++ b/lib/dialyzer/src/dialyzer_plt.erl
@@ -2,7 +2,7 @@
%%----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/dialyzer/src/dialyzer_race_data_server.erl b/lib/dialyzer/src/dialyzer_race_data_server.erl
new file mode 100644
index 0000000000..3600491809
--- /dev/null
+++ b/lib/dialyzer/src/dialyzer_race_data_server.erl
@@ -0,0 +1,134 @@
+%% -*- erlang-indent-level: 2 -*-
+%%-----------------------------------------------------------------------
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%%-------------------------------------------------------------------
+%%% File : dialyzer_race_data_server.erl
+%%% Author : Tobias Lindahl <[email protected]>
+%%% Description :
+%%%
+%%% Created : 18 Sep 2015 by Luca Favatella <[email protected]>
+%%%-------------------------------------------------------------------
+-module(dialyzer_race_data_server).
+
+-export([new/0,
+ duplicate/1,
+ stop/1,
+ call/2,
+ cast/2]).
+
+-include("dialyzer.hrl").
+
+%%----------------------------------------------------------------------
+
+-record(state, {race_code = dict:new() :: dict:dict(),
+ public_tables = [] :: [label()],
+ named_tables = [] :: [string()],
+ beh_api_calls = [] :: [{mfa(), mfa()}]}).
+
+%%----------------------------------------------------------------------
+
+-spec new() -> pid().
+
+new() ->
+ spawn_link(fun() -> loop(#state{}) end).
+
+-spec duplicate(pid()) -> pid().
+
+duplicate(Server) ->
+ call(dup, Server).
+
+-spec stop(pid()) -> ok.
+
+stop(Server) ->
+ cast(stop, Server).
+
+-spec call(atom(), pid()) -> term().
+
+call(Query, Server) ->
+ Ref = make_ref(),
+ Server ! {call, self(), Ref, Query},
+ receive
+ {Ref, Reply} -> Reply
+ end.
+
+-spec cast(atom() | {atom(), term()}, pid()) -> ok.
+
+cast(Message, Server) ->
+ Server ! {cast, Message},
+ ok.
+
+%%----------------------------------------------------------------------
+
+loop(State) ->
+ receive
+ {call, From, Ref, Query} ->
+ Reply = handle_call(Query, State),
+ From ! {Ref, Reply},
+ loop(State);
+ {cast, stop} ->
+ ok;
+ {cast, Message} ->
+ NewState = handle_cast(Message, State),
+ loop(NewState)
+ end.
+
+handle_cast(race_code_new, State) ->
+ State#state{race_code = dict:new()};
+handle_cast({Tag, Data}, State) ->
+ case Tag of
+ renew_race_info -> renew_race_info_handler(Data, State);
+ renew_race_code -> renew_race_code_handler(Data, State);
+ renew_race_public_tables -> renew_race_public_tables_handler(Data, State);
+ put_race_code -> State#state{race_code = Data};
+ put_public_tables -> State#state{public_tables = Data};
+ put_named_tables -> State#state{named_tables = Data};
+ put_behaviour_api_calls -> State#state{beh_api_calls = Data}
+ end.
+
+handle_call(Query,
+ #state{race_code = RaceCode,
+ public_tables = PublicTables,
+ named_tables = NamedTables,
+ beh_api_calls = BehApiCalls}
+ = State) ->
+ case Query of
+ dup -> spawn_link(fun() -> loop(State) end);
+ get_race_code -> RaceCode;
+ get_public_tables -> PublicTables;
+ get_named_tables -> NamedTables;
+ get_behaviour_api_calls -> BehApiCalls
+ end.
+
+%%----------------------------------------------------------------------
+
+renew_race_info_handler({RaceCode, PublicTables, NamedTables},
+ #state{} = State) ->
+ State#state{race_code = RaceCode,
+ public_tables = PublicTables,
+ named_tables = NamedTables}.
+
+renew_race_code_handler({Fun, FunArgs, Code},
+ #state{race_code = RaceCode} = State) ->
+ State#state{race_code = dict:store(Fun, [FunArgs, Code], RaceCode)}.
+
+renew_race_public_tables_handler(VarLabel,
+ #state{public_tables = PT} = State) ->
+ State#state{public_tables = ordsets:add_element(VarLabel, PT)}.
diff --git a/lib/dialyzer/src/dialyzer_races.erl b/lib/dialyzer/src/dialyzer_races.erl
index 39de071bde..bb43d1dcb8 100644
--- a/lib/dialyzer/src/dialyzer_races.erl
+++ b/lib/dialyzer/src/dialyzer_races.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -92,27 +92,28 @@
-type race_warn_tag() :: ?WARN_WHEREIS_REGISTER | ?WARN_WHEREIS_UNREGISTER
| ?WARN_ETS_LOOKUP_INSERT | ?WARN_MNESIA_DIRTY_READ_WRITE.
--record(beg_clause, {arg :: var_to_map1(),
- pats :: var_to_map1(),
- guard :: cerl:cerl()}).
--record(end_clause, {arg :: var_to_map1(),
- pats :: var_to_map1(),
- guard :: cerl:cerl()}).
+-record(beg_clause, {arg :: var_to_map1() | 'undefined',
+ pats :: var_to_map1() | 'undefined',
+ guard :: cerl:cerl() | 'undefined'}).
+-record(end_clause, {arg :: var_to_map1() | 'undefined',
+ pats :: var_to_map1() | 'undefined',
+ guard :: cerl:cerl() | 'undefined'}).
-record(end_case, {clauses :: [#end_clause{}]}).
--record(curr_fun, {status :: 'in' | 'out',
- mfa :: dialyzer_callgraph:mfa_or_funlbl(),
- label :: label(),
- def_vars :: [core_vars()],
- arg_types :: [erl_types:erl_type()],
- call_vars :: [core_vars()],
- var_map :: dict:dict()}).
+-record(curr_fun, {status :: 'in' | 'out' | 'undefined',
+ mfa :: dialyzer_callgraph:mfa_or_funlbl()
+ | 'undefined',
+ label :: label() | 'undefined',
+ def_vars :: [core_vars()] | 'undefined',
+ arg_types :: [erl_types:erl_type()] | 'undefined',
+ call_vars :: [core_vars()] | 'undefined',
+ var_map :: dict:dict() | 'undefined'}).
-record(dep_call, {call_name :: dep_calls(),
- args :: args(),
+ args :: args() | 'undefined',
arg_types :: [erl_types:erl_type()],
vars :: [core_vars()],
state :: dialyzer_dataflow:state(),
file_line :: file_line(),
- var_map :: dict:dict()}).
+ var_map :: dict:dict() | 'undefined'}).
-record(fun_call, {caller :: dialyzer_callgraph:mfa_or_funlbl(),
callee :: dialyzer_callgraph:mfa_or_funlbl(),
arg_types :: [erl_types:erl_type()],
@@ -121,7 +122,7 @@
arg :: var_to_map1()}).
-record(warn_call, {call_name :: warn_calls(),
args :: args(),
- var_map :: dict:dict()}).
+ var_map :: dict:dict() | 'undefined'}).
-type case_tags() :: 'beg_case' | #beg_clause{} | #end_clause{} | #end_case{}.
-type code() :: [#dep_call{} | #fun_call{} | #warn_call{} |
@@ -139,8 +140,9 @@
fun_mfa :: dialyzer_callgraph:mfa_or_funlbl(),
fun_label :: label()}).
--record(races, {curr_fun :: dialyzer_callgraph:mfa_or_funlbl(),
- curr_fun_label :: label(),
+-record(races, {curr_fun :: dialyzer_callgraph:mfa_or_funlbl()
+ | 'undefined',
+ curr_fun_label :: label() | 'undefined',
curr_fun_args = 'empty' :: core_args(),
new_table = 'no_t' :: table(),
race_list = [] :: code(),
diff --git a/lib/dialyzer/src/dialyzer_succ_typings.erl b/lib/dialyzer/src/dialyzer_succ_typings.erl
index 18f02e6742..987da3aecf 100644
--- a/lib/dialyzer/src/dialyzer_succ_typings.erl
+++ b/lib/dialyzer/src/dialyzer_succ_typings.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -134,7 +134,6 @@ get_refined_success_typings(SCCs, #st{callgraph = Callgraph,
end
end.
--type doc_plt() :: 'undefined' | dialyzer_plt:plt().
-spec get_warnings(dialyzer_callgraph:callgraph(), dialyzer_plt:plt(),
doc_plt(), dialyzer_codeserver:codeserver(),
dialyzer_timing:timing_server(), [solver()], pid()) ->
diff --git a/lib/dialyzer/src/dialyzer_timing.erl b/lib/dialyzer/src/dialyzer_timing.erl
index 33fd008732..aa71318d8e 100644
--- a/lib/dialyzer/src/dialyzer_timing.erl
+++ b/lib/dialyzer/src/dialyzer_timing.erl
@@ -2,7 +2,7 @@
%%-------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/dialyzer/src/dialyzer_typesig.erl b/lib/dialyzer/src/dialyzer_typesig.erl
index 0b8b244cc9..1787b66192 100644
--- a/lib/dialyzer/src/dialyzer_typesig.erl
+++ b/lib/dialyzer/src/dialyzer_typesig.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -48,6 +48,7 @@
t_is_float/1, t_is_fun/1,
t_is_integer/1, t_non_neg_integer/0,
t_is_list/1, t_is_nil/1, t_is_none/1, t_is_number/1,
+ t_is_singleton/1,
t_limit/2, t_list/0, t_list/1,
t_list_elements/1, t_nonempty_list/1, t_maybe_improper_list/0,
@@ -57,7 +58,7 @@
t_timeout/0, t_tuple/0, t_tuple/1,
t_var/1, t_var_name/1,
t_none/0, t_unit/0,
- t_map/1
+ t_map/0, t_map/1, t_map_get/2, t_map_put/2
]).
-include("dialyzer.hrl").
@@ -65,10 +66,12 @@
%%-----------------------------------------------------------------------------
-type dep() :: integer(). %% type variable names used as constraint ids
+-type deps() :: ordsets:ordset(dep()).
+
-type type_var() :: erl_types:erl_type(). %% actually: {'c','var',_,_}
--record(fun_var, {'fun' :: fun((_) -> erl_types:erl_type()), deps :: [dep()],
- origin :: integer()}).
+-record(fun_var, {'fun' :: fun((_) -> erl_types:erl_type()), deps :: deps(),
+ origin :: integer() | 'undefined'}).
-type constr_op() :: 'eq' | 'sub'.
-type fvar_or_type() :: #fun_var{} | erl_types:erl_type().
@@ -76,20 +79,21 @@
-record(constraint, {lhs :: erl_types:erl_type(),
op :: constr_op(),
rhs :: fvar_or_type(),
- deps :: [dep()]}).
+ deps :: deps()}).
-type constraint() :: #constraint{}.
+-type mask() :: ordsets:ordset(non_neg_integer()).
+
-record(constraint_list, {type :: 'conj' | 'disj',
list :: [constr()],
- deps :: [dep()],
- masks :: [{dep(),[non_neg_integer()]}] |
- {'d',dict:dict(dep(), [non_neg_integer()])},
- id :: {'list', dep()}}).
+ deps :: deps(),
+ masks = maps:new() :: #{dep() => mask()},
+ id :: {'list', dep()} | 'undefined'}).
-type constraint_list() :: #constraint_list{}.
--record(constraint_ref, {id :: type_var(), deps :: [dep()]}).
+-record(constraint_ref, {id :: type_var(), deps :: deps()}).
-type constraint_ref() :: #constraint_ref{}.
@@ -98,32 +102,33 @@
-type types() :: erl_types:type_table().
-type typesig_scc() :: [{mfa(), {cerl:c_var(), cerl:c_fun()}, types()}].
--type typesig_funmap() :: [{type_var(), type_var()}]. %% Orddict
+-type typesig_funmap() :: #{type_var() => type_var()}.
-type prop_types() :: dict:dict(label(), types()).
--type dict_or_ets() :: {'d', prop_types()} | {'e', ets:tid()}.
-
--record(state, {callgraph :: dialyzer_callgraph:callgraph(),
- cs = [] :: [constr()],
- cmap = {'d', dict:new()} :: dict_or_ets(),
- fun_map = [] :: typesig_funmap(),
- fun_arities = dict:new() :: dict:dict(type_var(), arity()),
- in_match = false :: boolean(),
- in_guard = false :: boolean(),
- module :: module(),
- name_map = dict:new() :: dict:dict(mfa(),
- cerl:c_fun()),
- next_label = 0 :: label(),
- self_rec :: 'false' | erl_types:erl_type(),
- plt :: dialyzer_plt:plt(),
- prop_types = {'d', dict:new()} :: dict_or_ets(),
- records = dict:new() :: types(),
- scc = [] :: [type_var()],
- mfas :: [tuple()],
- solvers = [] :: [solver()]
+-record(state, {callgraph :: dialyzer_callgraph:callgraph()
+ | 'undefined',
+ cs = [] :: [constr()],
+ cmap = maps:new() :: #{type_var() => constr()},
+ fun_map = maps:new() :: typesig_funmap(),
+ fun_arities = maps:new() :: #{type_var() => arity()},
+ in_match = false :: boolean(),
+ in_guard = false :: boolean(),
+ module :: module(),
+ name_map = maps:new() :: #{mfa() => cerl:c_fun()},
+ next_label = 0 :: label(),
+ self_rec :: 'false' | erl_types:erl_type(),
+ plt :: dialyzer_plt:plt()
+ | 'undefined',
+ prop_types = dict:new() :: prop_types(),
+ records = dict:new() :: types(),
+ scc = [] :: ordsets:ordset(type_var()),
+ mfas :: [mfa()],
+ solvers = [] :: [solver()]
}).
+-type state() :: #state{}.
+
%%-----------------------------------------------------------------------------
-define(TYPE_LIMIT, 4).
@@ -185,7 +190,8 @@ analyze_scc(SCC, NextLabel, CallGraph, Plt, PropTypes, Solvers0) ->
Funs = state__scc(State3),
pp_constrs_scc(Funs, State3),
constraints_to_dot_scc(Funs, State3),
- solve(Funs, State3).
+ T = solve(Funs, State3),
+ dict:from_list(maps:to_list(T)).
assert_format_of_scc([{_MFA, {_Var, _Fun}, _Records}|Left]) ->
assert_format_of_scc(Left);
@@ -309,7 +315,7 @@ traverse(Tree, DefinedVars, State) ->
Hd = cerl:cons_hd(Tree),
Tl = cerl:cons_tl(Tree),
{State1, [HdVar, TlVar]} = traverse_list([Hd, Tl], DefinedVars, State),
- case cerl:is_literal(cerl:fold_literal(Tree)) of
+ case cerl:is_literal(fold_literal_maybe_match(Tree, State)) of
true ->
%% We do not need to do anything more here.
{State, t_cons(HdVar, TlVar)};
@@ -390,8 +396,18 @@ traverse(Tree, DefinedVars, State) ->
{State2, _} = traverse_list(Funs, DefinedVars1, State1),
traverse(Body, DefinedVars1, State2);
literal ->
- Type = t_from_term(cerl:concrete(Tree)),
- {State, Type};
+ %% Maps are special; a literal pattern matches more than just the value
+ %% constructed by the literal. For example #{} constructs the empty map,
+ %% but matches every map.
+ case state__is_in_match(State) of
+ true ->
+ Tree1 = dialyzer_utils:refold_pattern(Tree),
+ case cerl:is_literal(Tree1) of
+ false -> traverse(Tree1, DefinedVars, State);
+ true -> {State, t_from_term(cerl:concrete(Tree))}
+ end;
+ _ -> {State, t_from_term(cerl:concrete(Tree))}
+ end;
module ->
Defs = cerl:module_defs(Tree),
Funs = [Fun || {_Var, Fun} <- Defs],
@@ -435,7 +451,7 @@ traverse(Tree, DefinedVars, State) ->
Elements = cerl:tuple_es(Tree),
{State1, EVars} = traverse_list(Elements, DefinedVars, State),
{State2, TupleType} =
- case cerl:is_literal(cerl:fold_literal(Tree)) of
+ case cerl:is_literal(fold_literal_maybe_match(Tree, State1)) of
true ->
%% We do not need to do anything more here.
{State, t_tuple(EVars)};
@@ -474,7 +490,111 @@ traverse(Tree, DefinedVars, State) ->
[] -> {State2, TupleType}
end;
map ->
- {State, t_map([])};
+ Entries = cerl:map_es(Tree),
+ MapFoldFun = fun(Entry, AccState) ->
+ AccState1 = state__set_in_match(AccState, false),
+ {AccState2, KeyVar} = traverse(cerl:map_pair_key(Entry),
+ DefinedVars, AccState1),
+ AccState3 = state__set_in_match(
+ AccState2, state__is_in_match(AccState)),
+ {AccState4, ValVar} = traverse(cerl:map_pair_val(Entry),
+ DefinedVars, AccState3),
+ {{KeyVar, ValVar}, AccState4}
+ end,
+ {Pairs, State1} = lists:mapfoldl(MapFoldFun, State, Entries),
+ %% We mustn't recurse into map arguments to matches. Not only are they
+ %% syntactically only allowed to be the literal #{}, but that would also
+ %% cause an infinite recursion, since traverse/3 unfolds literals with
+ %% maps in them using dialyzer_utils:reflow_pattern/1.
+ {State2, ArgVar} =
+ case state__is_in_match(State) of
+ false -> traverse(cerl:map_arg(Tree), DefinedVars, State1);
+ true -> {State1, t_map()}
+ end,
+ MapVar = mk_var(Tree),
+ MapType = ?mk_fun_var(
+ fun(Map) ->
+ lists:foldl(
+ fun({K,V}, TypeAcc) ->
+ t_map_put({lookup_type(K, Map),
+ lookup_type(V, Map)},
+ TypeAcc)
+ end, t_inf(t_map(), lookup_type(ArgVar, Map)),
+ Pairs)
+ end, [ArgVar | lists:append([[K,V] || {K,V} <- Pairs])]),
+ %% TODO: does the "same element appearing several times" problem apply
+ %% here too?
+ Fun =
+ fun({KeyVar, ValVar}, {AccState, ShadowKeys}) ->
+ %% If Val is known to be the last association of Key (i.e. Key
+ %% is not in ShadowKeys), Val must be a subtype of what is
+ %% associated to Key in Tree
+ TypeFun =
+ fun(Map) ->
+ KeyType = lookup_type(KeyVar, Map),
+ case t_is_singleton(KeyType) of
+ false -> t_any();
+ true ->
+ MT = t_inf(lookup_type(MapVar, Map), t_map()),
+ case t_is_none(MT) of
+ true -> t_none();
+ false ->
+ DisjointFromKeyType =
+ fun(ShadowKey) ->
+ t_is_none(t_inf(lookup_type(ShadowKey, Map),
+ KeyType))
+ end,
+ case lists:all(DisjointFromKeyType, ShadowKeys) of
+ true -> t_map_get(KeyType, MT);
+ %% A later association might shadow this one
+ false -> t_any()
+ end
+ end
+ end
+ end,
+ ValType = ?mk_fun_var(TypeFun, [KeyVar, MapVar | ShadowKeys]),
+ {state__store_conj(ValVar, sub, ValType, AccState),
+ [KeyVar | ShadowKeys]}
+ end,
+ %% Accumulate shadowing keys right-to-left
+ {State3, _} = lists:foldr(Fun, {State2, []}, Pairs),
+ %% In a map expression, Arg must contain all keys that are inserted with
+ %% the exact (:=) operator, and are known (i.e. are not in ShadowedKeys)
+ %% to not have been introduced by a previous association
+ State4 =
+ case state__is_in_match(State) of
+ true -> State3;
+ false ->
+ ArgFun =
+ fun(Map) ->
+ FoldFun =
+ fun({{KeyVar, _}, Entry}, {AccType, ShadowedKeys}) ->
+ OpTree = cerl:map_pair_op(Entry),
+ KeyType = lookup_type(KeyVar, Map),
+ AccType1 =
+ case cerl:is_literal(OpTree) andalso
+ cerl:concrete(OpTree) =:= exact of
+ true ->
+ case t_is_none(t_inf(ShadowedKeys, KeyType)) of
+ true ->
+ t_map_put({KeyType, t_any()}, AccType);
+ false ->
+ AccType
+ end;
+ false ->
+ AccType
+ end,
+ {AccType1, t_sup(KeyType, ShadowedKeys)}
+ end,
+ %% Accumulate shadowed keys left-to-right
+ {ResType, _} = lists:foldl(FoldFun, {t_map(), t_none()},
+ lists:zip(Pairs, Entries)),
+ ResType
+ end,
+ ArgType = ?mk_fun_var(ArgFun, [KeyVar || {KeyVar, _} <- Pairs]),
+ state__store_conj(ArgVar, sub, ArgType, State3)
+ end,
+ {state__store_conj(MapVar, sub, MapType, State4), MapVar};
values ->
%% We can get into trouble when unifying products that have the
%% same element appearing several times. Handle these cases by
@@ -825,11 +945,11 @@ get_safe_underapprox(Pats, Guard) ->
Map1 = cerl_trees:fold(fun(X, Acc) ->
case cerl:is_c_var(X) of
true ->
- dict:store(cerl_trees:get_label(X), t_any(),
- Acc);
+ maps:put(cerl_trees:get_label(X), t_any(),
+ Acc);
false -> Acc
end
- end, dict:new(), cerl:c_values(Pats)),
+ end, maps:new(), cerl:c_values(Pats)),
{Type, Map2} = get_underapprox_from_guard(Guard, Map1),
Map3 = case t_is_none(t_inf(t_from_term(true), Type)) of
true -> throw(dont_know);
@@ -837,8 +957,8 @@ get_safe_underapprox(Pats, Guard) ->
case cerl:is_c_var(Guard) of
false -> Map2;
true ->
- dict:store(cerl_trees:get_label(Guard),
- t_from_term(true), Map2)
+ maps:put(cerl_trees:get_label(Guard),
+ t_from_term(true), Map2)
end
end,
{Ts, _Map4} = get_safe_underapprox_1(Pats, [], Map3),
@@ -864,7 +984,7 @@ get_underapprox_from_guard(Tree, Map) ->
case t_is_none(Inf) of
true -> throw(dont_know);
false ->
- {True, dict:store(cerl_trees:get_label(Fun), Inf, Map1)}
+ {True, maps:put(cerl_trees:get_label(Fun), Inf, Map1)}
end
end;
MFA ->
@@ -880,7 +1000,7 @@ get_underapprox_from_guard(Tree, Map) ->
case cerl:is_literal(Arg) of
true -> {True, Map1};
false ->
- {True, dict:store(cerl_trees:get_label(Arg), Inf, Map1)}
+ {True, maps:put(cerl_trees:get_label(Arg), Inf, Map1)}
end
end;
error ->
@@ -912,7 +1032,7 @@ get_underapprox_from_guard(Tree, Map) ->
end;
var ->
Type =
- case dict:find(cerl_trees:get_label(Tree), Map) of
+ case maps:find(cerl_trees:get_label(Tree), Map) of
error -> throw(dont_know);
{ok, T} -> T
end,
@@ -946,6 +1066,7 @@ get_type_test({erlang, is_float, 1}) -> {ok, t_float()};
get_type_test({erlang, is_function, 1}) -> {ok, t_fun()};
get_type_test({erlang, is_integer, 1}) -> {ok, t_integer()};
get_type_test({erlang, is_list, 1}) -> {ok, t_list()};
+get_type_test({erlang, is_map, 1}) -> {ok, t_map()};
get_type_test({erlang, is_number, 1}) -> {ok, t_number()};
get_type_test({erlang, is_pid, 1}) -> {ok, t_pid()};
get_type_test({erlang, is_port, 1}) -> {ok, t_port()};
@@ -1002,7 +1123,9 @@ bitstr_val_constr(SizeType, UnitVal, Flags) ->
end
end.
-get_safe_underapprox_1([Pat|Left], Acc, Map) ->
+get_safe_underapprox_1([Pat0|Left], Acc, Map) ->
+ %% Maps should be treated as patterns, not as literals
+ Pat = dialyzer_utils:refold_pattern(Pat0),
case cerl:type(Pat) of
alias ->
APat = cerl:alias_pat(Pat),
@@ -1013,7 +1136,7 @@ get_safe_underapprox_1([Pat|Left], Acc, Map) ->
case t_is_none(Inf) of
true -> throw(dont_know);
false ->
- Map3 = dict:store(cerl_trees:get_label(AVar), Inf, Map2),
+ Map3 = maps:put(cerl_trees:get_label(AVar), Inf, Map2),
get_safe_underapprox_1(Left, [Inf|Acc], Map3)
end;
binary ->
@@ -1046,15 +1169,42 @@ get_safe_underapprox_1([Pat|Left], Acc, Map) ->
Type = t_tuple(Ts),
get_safe_underapprox_1(Left, [Type|Acc], Map1);
map ->
- %% TODO: Can maybe do something here
- throw(dont_know);
+ %% Some assertions in case the syntax gets more premissive in the future
+ true = #{} =:= cerl:concrete(cerl:map_arg(Pat)),
+ true = lists:all(fun(P) ->
+ cerl:is_literal(Op = cerl:map_pair_op(P)) andalso
+ exact =:= cerl:concrete(Op)
+ end, cerl:map_es(Pat)),
+ KeyTrees = lists:map(fun cerl:map_pair_key/1, cerl:map_es(Pat)),
+ ValTrees = lists:map(fun cerl:map_pair_val/1, cerl:map_es(Pat)),
+ %% Keys must not be underapproximated. Overapproximations are safe.
+ Keys = get_safe_overapprox(KeyTrees),
+ {Vals, Map1} = get_safe_underapprox_1(ValTrees, [], Map),
+ case lists:all(fun erl_types:t_is_singleton/1, Keys) of
+ false -> throw(dont_know);
+ true -> ok
+ end,
+ SortedPairs = lists:sort(lists:zip(Keys, Vals)),
+ %% We need to deal with duplicates ourselves
+ SquashDuplicates =
+ fun SquashDuplicates([{K,First},{K,Second}|List]) ->
+ case t_is_none(Inf = t_inf(First, Second)) of
+ true -> throw(dont_know);
+ false -> [{K, Inf}|SquashDuplicates(List)]
+ end;
+ SquashDuplicates([Good|Rest]) ->
+ [Good|SquashDuplicates(Rest)];
+ SquashDuplicates([]) -> []
+ end,
+ Type = t_map(SquashDuplicates(SortedPairs)),
+ get_safe_underapprox_1(Left, [Type|Acc], Map1);
values ->
Es = cerl:values_es(Pat),
{Ts, Map1} = get_safe_underapprox_1(Es, [], Map),
Type = t_product(Ts),
get_safe_underapprox_1(Left, [Type|Acc], Map1);
var ->
- case dict:find(cerl_trees:get_label(Pat), Map) of
+ case maps:find(cerl_trees:get_label(Pat), Map) of
error -> throw(dont_know);
{ok, VarType} -> get_safe_underapprox_1(Left, [VarType|Acc], Map)
end
@@ -1062,6 +1212,15 @@ get_safe_underapprox_1([Pat|Left], Acc, Map) ->
get_safe_underapprox_1([], Acc, Map) ->
{lists:reverse(Acc), Map}.
+get_safe_overapprox(Pats) ->
+ lists:map(fun get_safe_overapprox_1/1, Pats).
+
+get_safe_overapprox_1(Pat) ->
+ case cerl:is_literal(Lit = cerl:fold_literal(Pat)) of
+ true -> t_from_term(cerl:concrete(Lit));
+ false -> t_any()
+ end.
+
%%----------------------------------------
%% Guards
%%
@@ -1261,6 +1420,8 @@ get_bif_constr({erlang, is_integer, 1}, Dst, [Arg], State) ->
get_bif_test_constr(Dst, Arg, t_integer(), State);
get_bif_constr({erlang, is_list, 1}, Dst, [Arg], State) ->
get_bif_test_constr(Dst, Arg, t_maybe_improper_list(), State);
+get_bif_constr({erlang, is_map, 1}, Dst, [Arg], State) ->
+ get_bif_test_constr(Dst, Arg, t_map(), State);
get_bif_constr({erlang, is_number, 1}, Dst, [Arg], State) ->
get_bif_test_constr(Dst, Arg, t_number(), State);
get_bif_constr({erlang, is_pid, 1}, Dst, [Arg], State) ->
@@ -1642,12 +1803,16 @@ solve([Fun], State) ->
solve([_|_] = SCC, State) ->
?debug("============ Analyzing SCC: ~w ===========\n",
[[debug_lookup_name(F) || F <- SCC]]),
- {Parallel, NewState} =
- case parallel_split(SCC) of
- false -> {false, State};
- SplitSCC -> {SplitSCC, minimize_state(State)}
- end,
- solve_scc(SCC, Parallel, map_new(), NewState, false).
+ Users = comp_users(SCC, State),
+ solve_scc(SCC, map_new(), State, Users, _ToSolve=SCC, false).
+
+comp_users(SCC, State) ->
+ Vars0 = [{Fun, state__get_rec_var(Fun, State)} || Fun <- SCC],
+ Vars = lists:sort([t_var_name(Var) || {_, {ok, Var}} <- Vars0]),
+ family([{t_var(V), F} ||
+ F <- SCC,
+ V <- ordsets:intersection(get_deps(state__get_cs(F, State)),
+ Vars)]).
solve_fun(Fun, FunMap, State) ->
Cs = state__get_cs(Fun, State),
@@ -1662,7 +1827,7 @@ solve_fun(Fun, FunMap, State) ->
end,
enter_type(Fun, NewType, NewFunMap1).
-solve_scc(SCC, Parallel, Map, State, TryingUnit) ->
+solve_scc(SCC, Map, State, Users, ToSolve, TryingUnit) ->
Vars0 = [{Fun, state__get_rec_var(Fun, State)} || Fun <- SCC],
Vars = [Var || {_, {ok, Var}} <- Vars0],
Funs = [Fun || {Fun, {ok, _}} <- Vars0],
@@ -1670,16 +1835,13 @@ solve_scc(SCC, Parallel, Map, State, TryingUnit) ->
RecTypes = [t_limit(Type, ?TYPE_LIMIT) || Type <- Types],
CleanMap = lists:foldl(fun(Fun, AccFunMap) ->
erase_type(t_var_name(Fun), AccFunMap)
- end, Map, SCC),
+ end, Map, ToSolve),
Map1 = enter_type_lists(Vars, RecTypes, CleanMap),
?debug("Checking SCC: ~w\n", [[debug_lookup_name(F) || F <- SCC]]),
- FunSet = ordsets:from_list([t_var_name(F) || F <- SCC]),
- Map2 =
- case Parallel of
- false -> solve_whole_scc(SCC, Map1, State);
- SplitSCC -> solve_whole_scc_parallel(SplitSCC, Map1, State)
- end,
- case maps_are_equal(Map2, Map, FunSet) of
+ SolveFun = fun(X, Y) -> scc_fold_fun(X, Y, State) end,
+ Map2 = lists:foldl(SolveFun, Map1, ToSolve),
+ Updated = updated_vars_only(Vars, Map, Map2),
+ case Updated =:= [] of
true ->
?debug("SCC ~w reached fixpoint\n", [SCC]),
NewTypes = unsafe_lookup_type_list(Funs, Map2),
@@ -1692,127 +1854,21 @@ solve_scc(SCC, Parallel, Map, State, TryingUnit) ->
true -> t_fun(t_fun_args(T), t_unit())
end || T <- NewTypes],
Map3 = enter_type_lists(Funs, UnitTypes, Map2),
- solve_scc(SCC, Parallel, Map3, State, true);
+ solve_scc(SCC, Map3, State, Users, SCC, true);
false ->
- case Parallel of
- false -> true;
- _ -> dispose_state(State)
- end,
Map2
end;
false ->
?debug("SCC ~w did not reach fixpoint\n", [SCC]),
- solve_scc(SCC, Parallel, Map2, State, TryingUnit)
- end.
-
-solve_whole_scc(SCC, Map, State) ->
- SolveFun = fun(X, Y) -> scc_fold_fun(X, Y, State) end,
- lists:foldl(SolveFun, Map, SCC).
-
-%%------------------------------------------------------------------------------
-
--define(worth_it, 42).
-
-parallel_split(SCC) ->
- Length = length(SCC),
- case Length > 2*?worth_it of
- false -> false;
- true ->
- case min(dialyzer_utils:parallelism(), 8) of
- 1 -> false;
- CPUs ->
- FullShare = Length div CPUs + 1,
- Unit = max(FullShare, ?worth_it),
- split(SCC, Unit, [])
- end
- end.
-
-minimize_state(#state{
- cmap = {d, CMap},
- fun_map = FunMap,
- fun_arities = FunArities,
- self_rec = SelfRec,
- prop_types = {d, PropTypes},
- solvers = Solvers
- }) ->
- Opts = [{read_concurrency, true}],
- ETSCMap = ets:new(cmap, Opts),
- ETSPropTypes = ets:new(prop_types, Opts),
- true = ets:insert(ETSCMap, dict:to_list(CMap)),
- true = ets:insert(ETSPropTypes, dict:to_list(PropTypes)),
- #state
- {cmap = {e, ETSCMap},
- fun_map = FunMap,
- fun_arities = FunArities,
- self_rec = SelfRec,
- prop_types = {e, ETSPropTypes},
- solvers = Solvers
- }.
-
-dispose_state(#state{cmap = {e, ETSCMap},
- prop_types = {e, ETSPropTypes}}) ->
- true = ets:delete(ETSCMap),
- true = ets:delete(ETSPropTypes).
-
-solve_whole_scc_parallel(SplitSCC, Map, State) ->
- Workers = spawn_workers(SplitSCC, Map, State),
- wait_results(Workers, Map, fold_res_fun(State)).
-
-spawn_workers(SplitSCC, Map, State) ->
- Spawner = solve_scc_spawner(self(), Map, State),
- lists:foreach(Spawner, SplitSCC),
- length(SplitSCC).
-
-wait_results(0, Map, _FoldResFun) ->
- Map;
-wait_results(Pending, Map, FoldResFun) ->
- Res = receive_scc_result(),
- NewMap = lists:foldl(FoldResFun, Map, Res),
- wait_results(Pending-1, NewMap, FoldResFun).
-
-solve_scc_spawner(Parent, Map, State) ->
- fun(SCCPart) ->
- spawn_link(fun() -> solve_scc_worker(Parent, SCCPart, Map, State) end)
- end.
-
-split([], _Unit, Acc) ->
- Acc;
-split(List, Unit, Acc) ->
- {Taken, Rest} =
- try
- lists:split(Unit, List)
- catch
- _:_ -> {List, []}
- end,
- split(Rest, Unit, [Taken|Acc]).
-
-solve_scc_worker(Parent, SCCPart, Map, State) ->
- SolveFun = fun(X, Y) -> scc_fold_fun(X, Y, State) end,
- FinalMap = lists:foldl(SolveFun, Map, SCCPart),
- Res =
- [{F, t_limit(unsafe_lookup_type(F, FinalMap), ?TYPE_LIMIT)} ||
- F <- SCCPart],
- send_scc_result(Parent, Res).
-
-fold_res_fun(State) ->
- fun({F, Type}, Map) ->
- case state__get_rec_var(F, State) of
- {ok, R} ->
- enter_type(R, Type, enter_type(F, Type, Map));
- error ->
- enter_type(F, Type, Map)
- end
+ ToSolve1 = affected(Updated, Users),
+ solve_scc(SCC, Map2, State, Users, ToSolve1, TryingUnit)
end.
-receive_scc_result() ->
- receive
- {scc_fun, Res} -> Res
- end.
-
-send_scc_result(Parent, Res) ->
- Parent ! {scc_fun, Res}.
-
-%%------------------------------------------------------------------------------
+affected(Updated, Users) ->
+ lists:umerge([case lists:keyfind(V, 1, Users) of
+ {V, Vs} -> Vs;
+ false -> []
+ end || V <- Updated]).
scc_fold_fun(F, FunMap, State) ->
Deps = get_deps(state__get_cs(F, State)),
@@ -1854,7 +1910,7 @@ solver(Solver, SolveFun) ->
solve_fun(v1, _Fun, Cs, FunMap, State) ->
fun() ->
- {ok, _MapDict, NewMap} = solve_ref_or_list(Cs, FunMap, dict:new(), State),
+ {ok, _MapDict, NewMap} = solve_ref_or_list(Cs, FunMap, map_new(), State),
{ok, NewMap}
end;
solve_fun(v2, Fun, _Cs, FunMap, State) ->
@@ -1894,8 +1950,8 @@ sane_maps(Map1, Map2, Keys, _S1, _S2) ->
%% Solver v2
--record(v2_state, {constr_data = dict:new() :: dict:dict(),
- state :: #state{}}).
+-record(v2_state, {constr_data = maps:new() :: map(),
+ state :: state()}).
v2_solve_ref(Fun, Map, State) ->
V2State = #v2_state{state = State},
@@ -2056,30 +2112,30 @@ v2_solve_disj(Is, [C|Cs], I, Map, V2State, UL, MapL, Eval, Uneval0, Failed) ->
v2_solve_disj(Is, Cs, I+1, Map, V2State, UL, MapL, Eval, Uneval, Failed).
save_local_map(#v2_state{constr_data = ConData}=V2State, Id, U, Map) ->
- Part0 = [{V,dict:fetch(V, Map)} || V <- U],
+ Part0 = [{V,maps:get(V, Map)} || V <- U],
Part1 =
- case dict:find(Id, ConData) of
+ case maps:find(Id, ConData) of
error -> []; % cannot happen
{ok, {Part2,[]}} -> Part2
end,
?debug("save local map Id=~w:\n", [Id]),
Part = lists:ukeymerge(1, lists:keysort(1, Part0), Part1),
- pp_map("New Part", dict:from_list(Part0)),
- pp_map("Old Part", dict:from_list(Part1)),
- pp_map(" => Part", dict:from_list(Part)),
- V2State#v2_state{constr_data = dict:store(Id, {Part,[]}, ConData)}.
+ pp_map("New Part", maps:from_list(Part0)),
+ pp_map("Old Part", maps:from_list(Part1)),
+ pp_map(" => Part", maps:from_list(Part)),
+ V2State#v2_state{constr_data = maps:put(Id, {Part,[]}, ConData)}.
restore_local_map(#v2_state{constr_data = ConData}, Id, Map0) ->
- case dict:find(Id, ConData) of
+ case maps:find(Id, ConData) of
error -> Map0;
{ok, failed} -> Map0;
{ok, {[],_}} -> Map0;
{ok, {Part0,U}} ->
Part = [KV || {K,_V} = KV <- Part0, not lists:member(K, U)],
?debug("restore local map Id=~w U=~w\n", [Id, U]),
- pp_map("Part", dict:from_list(Part)),
+ pp_map("Part", maps:from_list(Part)),
pp_map("Map0", Map0),
- Map = lists:foldl(fun({K,V}, D) -> dict:store(K, V, D) end, Map0, Part),
+ Map = lists:foldl(fun({K,V}, D) -> maps:put(K, V, D) end, Map0, Part),
pp_map("Map", Map),
Map
end.
@@ -2159,31 +2215,26 @@ report_detected_loop(_) ->
add_mask_to_flags(Flags, [Im|M], I, L) when I > Im ->
add_mask_to_flags(Flags, M, I, [Im|L]);
add_mask_to_flags(Flags, [_|M], _I, L) ->
- {lists:umerge(Flags, M), lists:reverse(L)}.
+ {lists:umerge(M, Flags), lists:reverse(L)}.
-get_mask(V, {d, Masks}) ->
- case dict:find(V, Masks) of
+get_mask(V, Masks) ->
+ case maps:find(V, Masks) of
error -> [];
{ok, M} -> M
- end;
-get_mask(V, Masks) ->
- case lists:keyfind(V, 1, Masks) of
- false -> [];
- {V, M} -> M
end.
get_flags(#v2_state{constr_data = ConData}=V2State0, C) ->
#constraint_list{id = Id, list = Cs, masks = Masks} = C,
- case dict:find(Id, ConData) of
+ case maps:find(Id, ConData) of
error ->
?debug("get_flags Id=~w Flags=all ~w\n", [Id, length(Cs)]),
- V2State = V2State0#v2_state{constr_data = dict:store(Id, {[],[]}, ConData)},
+ V2State = V2State0#v2_state{constr_data = maps:put(Id, {[],[]}, ConData)},
{V2State, lists:seq(1, length(Cs))};
{ok, failed} ->
{V2State0, failed_list};
{ok, {Part,U}} when U =/= [] ->
?debug("get_flags Id=~w U=~w\n", [Id, U]),
- V2State = V2State0#v2_state{constr_data = dict:store(Id, {Part,[]}, ConData)},
+ V2State = V2State0#v2_state{constr_data = maps:put(Id, {Part,[]}, ConData)},
save_updated_vars_list(Cs, vars_per_child(U, Masks), V2State)
end.
@@ -2212,13 +2263,13 @@ save_updated_vars(#constraint_ref{id = Id}, U, V2State) ->
save_updated_vars1(V2State, C, U) ->
#v2_state{constr_data = ConData} = V2State,
#constraint_list{id = Id} = C,
- case dict:find(Id, ConData) of
+ case maps:find(Id, ConData) of
error -> V2State; % error means everything is flagged
{ok, failed} -> V2State;
{ok, {Part,U0}} ->
%% Duplicates are not so common; let masks/2 remove them.
U1 = U ++ U0,
- V2State#v2_state{constr_data = dict:store(Id, {Part,U1}, ConData)}
+ V2State#v2_state{constr_data = maps:put(Id, {Part,U1}, ConData)}
end.
-ifdef(DEBUG).
@@ -2228,12 +2279,12 @@ pp_constr_data(_Tag, #v2_state{constr_data = D}) ->
case _PartU of
{_Part, _U} ->
io:format("Id: ~w Vars: ~w\n", [_Id, _U]),
- [pp_map("Part", dict:from_list(_Part)) || _Part =/= []];
+ [pp_map("Part", maps:from_list(_Part)) || _Part =/= []];
failed ->
io:format("Id: ~w failed list\n", [_Id])
end
end ||
- {_Id, _PartU} <- lists:keysort(1, dict:to_list(D))],
+ {_Id, _PartU} <- lists:keysort(1, maps:to_list(D))],
ok.
-else.
@@ -2243,17 +2294,17 @@ pp_constr_data(_Tag, _V2State) ->
failed_list(#constraint_list{id = Id}, #v2_state{constr_data = D}=V2State) ->
?debug("error list ~w~n", [Id]),
- V2State#v2_state{constr_data = dict:store(Id, failed, D)}.
+ V2State#v2_state{constr_data = maps:put(Id, failed, D)}.
is_failed_list(#constraint_list{id = Id}, #v2_state{constr_data = D}) ->
- dict:find(Id, D) =:= {ok, failed}.
+ maps:find(Id, D) =:= {ok, failed}.
%% Solver v1
solve_ref_or_list(#constraint_ref{id = Id, deps = Deps},
Map, MapDict, State) ->
{OldLocalMap, Check} =
- case dict:find(Id, MapDict) of
+ case maps:find(Id, MapDict) of
error -> {map_new(), false};
{ok, M} -> {M, true}
end,
@@ -2299,12 +2350,12 @@ solve_ref_or_list(#constraint_ref{id = Id, deps = Deps},
{ok, Var} -> enter_type(Var, FunType, NewMap1);
error -> NewMap1
end,
- {ok, dict:store(Id, NewMap2, NewMapDict), NewMap2}
+ {ok, maps:put(Id, NewMap2, NewMapDict), NewMap2}
end;
solve_ref_or_list(#constraint_list{type=Type, list = Cs, deps = Deps, id = Id},
Map, MapDict, State) ->
{OldLocalMap, Check} =
- case dict:find(Id, MapDict) of
+ case maps:find(Id, MapDict) of
error -> {map_new(), false};
{ok, M} -> {M, true}
end,
@@ -2354,7 +2405,7 @@ solve_self_recursive(Cs, Map, MapDict, Id, RecType0, State) ->
solve_clist(Cs, conj, Id, Deps, MapDict, Map, State) ->
case solve_cs(Cs, Map, MapDict, State) of
{error, NewMapDict} ->
- {error, dict:store(Id, error, NewMapDict)};
+ {error, maps:put(Id, error, NewMapDict)};
{ok, NewMapDict, NewMap} = Ret ->
case Cs of
[_] ->
@@ -2362,7 +2413,7 @@ solve_clist(Cs, conj, Id, Deps, MapDict, Map, State) ->
Ret;
_ ->
case maps_are_equal(Map, NewMap, Deps) of
- true -> {ok, dict:store(Id, NewMap, NewMapDict), NewMap};
+ true -> {ok, maps:put(Id, NewMap, NewMapDict), NewMap};
false -> solve_clist(Cs, conj, Id, Deps, NewMapDict, NewMap, State)
end
end
@@ -2376,10 +2427,10 @@ solve_clist(Cs, disj, Id, _Deps, MapDict, Map, State) ->
end,
{Maps, NewMapDict} = lists:mapfoldl(Fun, MapDict, Cs),
case [X || {ok, X} <- Maps] of
- [] -> {error, dict:store(Id, error, NewMapDict)};
+ [] -> {error, maps:put(Id, error, NewMapDict)};
MapList ->
NewMap = join_maps(MapList),
- {ok, dict:store(Id, NewMap, NewMapDict), NewMap}
+ {ok, maps:put(Id, NewMap, NewMapDict), NewMap}
end.
solve_cs([#constraint_ref{} = C|Tail], Map, MapDict, State) ->
@@ -2460,7 +2511,7 @@ report_failed_constraint(_C, _Map) ->
%% ============================================================================
map_new() ->
- dict:new().
+ maps:new().
join_maps([Map]) ->
Map;
@@ -2470,9 +2521,9 @@ join_maps(Maps) ->
constrained_keys(Maps) ->
lists:foldl(fun(TmpMap, AccKeys) ->
- [Key || Key <- AccKeys, dict:is_key(Key, TmpMap)]
+ [Key || Key <- AccKeys, maps:is_key(Key, TmpMap)]
end,
- dict:fetch_keys(hd(Maps)), tl(Maps)).
+ maps:keys(hd(Maps)), tl(Maps)).
join_maps([Key|Left], Maps = [Map|MapsLeft], AccMap) ->
NewType = join_one_key(Key, MapsLeft, lookup_type(Key, Map)),
@@ -2518,11 +2569,11 @@ prune_keys(Map1, Map2, Deps) ->
NofDeps = length(Deps),
case NofDeps > ?PRUNE_LIMIT of
true ->
- Keys1 = dict:fetch_keys(Map1),
+ Keys1 = maps:keys(Map1),
case length(Keys1) > NofDeps of
true ->
Set1 = lists:sort(Keys1),
- Set2 = lists:sort(dict:fetch_keys(Map2)),
+ Set2 = lists:sort(maps:keys(Map2)),
ordsets:intersection(ordsets:union(Set1, Set2), Deps);
false ->
Deps
@@ -2543,7 +2594,7 @@ enter_type(Key, Val, Map) when is_integer(Key) ->
true -> ok;
false -> ?debug("LimitedVal ~s\n", [format_type(LimitedVal)])
end,
- case dict:find(Key, Map) of
+ case maps:find(Key, Map) of
{ok, Value} ->
case is_equal(Value, LimitedVal) of
true -> Map;
@@ -2577,16 +2628,16 @@ enter_type2(Key, Val, Map) ->
map_store(Key, Val, Map) ->
?debug("Storing ~w :: ~s\n", [Key, format_type(Val)]),
- dict:store(Key, Val, Map).
+ maps:put(Key, Val, Map).
erase_type(Key, Map) ->
- dict:erase(Key, Map).
+ maps:remove(Key, Map).
lookup_type_list(List, Map) ->
[lookup_type(X, Map) || X <- List].
unsafe_lookup_type(Key, Map) ->
- case dict:find(t_var_name(Key), Map) of
+ case maps:find(t_var_name(Key), Map) of
{ok, Type} -> Type;
error -> t_none()
end.
@@ -2595,7 +2646,7 @@ unsafe_lookup_type_list(List, Map) ->
[unsafe_lookup_type(X, Map) || X <- List].
lookup_type(Key, Map) when is_integer(Key) ->
- case dict:find(Key, Map) of
+ case maps:find(Key, Map) of
error -> t_any();
{ok, Val} -> Val
end;
@@ -2643,7 +2694,7 @@ is_equal(Type1, Type2) ->
pp_map(_S, _Map) ->
?debug("\t~s: ~p\n",
[_S, [{X, lists:flatten(format_type(Y))} ||
- {X, Y} <- lists:keysort(1, dict:to_list(_Map))]]).
+ {X, Y} <- lists:keysort(1, maps:to_list(_Map))]]).
%% ============================================================================
%%
@@ -2653,7 +2704,7 @@ pp_map(_S, _Map) ->
new_state(SCC0, NextLabel, CallGraph, Plt, PropTypes, Solvers) ->
List = [{MFA, Var} || {MFA, {Var, _Fun}, _Rec} <- SCC0],
- NameMap = dict:from_list(List),
+ NameMap = maps:from_list(List),
MFAs = [MFA || {MFA, _Var} <- List],
SCC = [mk_var(Fun) || {_MFA, {_Var, Fun}, _Rec} <- SCC0],
SelfRec =
@@ -2667,7 +2718,7 @@ new_state(SCC0, NextLabel, CallGraph, Plt, PropTypes, Solvers) ->
_Many -> false
end,
#state{callgraph = CallGraph, name_map = NameMap, next_label = NextLabel,
- prop_types = {d, PropTypes}, plt = Plt, scc = ordsets:from_list(SCC),
+ prop_types = PropTypes, plt = Plt, scc = ordsets:from_list(SCC),
mfas = MFAs, self_rec = SelfRec, solvers = Solvers}.
state__set_rec_dict(State, RecDict) ->
@@ -2695,15 +2746,15 @@ state__get_fun_prototype(Op, Arity, State) ->
end.
state__lookup_rec_var_in_scope(MFA, #state{name_map = NameMap}) ->
- dict:find(MFA, NameMap).
+ maps:find(MFA, NameMap).
state__store_fun_arity(Tree, #state{fun_arities = Map} = State) ->
Arity = length(cerl:fun_vars(Tree)),
Id = mk_var(Tree),
- State#state{fun_arities = dict:store(Id, Arity, Map)}.
+ State#state{fun_arities = maps:put(Id, Arity, Map)}.
state__fun_arity(Id, #state{fun_arities = Map}) ->
- dict:fetch(Id, Map).
+ maps:get(Id, Map).
state__lookup_undef_var(Tree, #state{callgraph = CG, plt = Plt}) ->
Label = cerl_trees:get_label(Tree),
@@ -2763,21 +2814,14 @@ state__plt(#state{plt = PLT}) ->
state__new_constraint_context(State) ->
State#state{cs = []}.
-state__prop_domain(FunLabel, #state{prop_types = {e, ETSPropTypes}}) ->
- try ets:lookup_element(ETSPropTypes, FunLabel, 2) of
- {_Range_Fun, Dom} -> {ok, Dom};
- FunType -> {ok, t_fun_args(FunType)}
- catch
- _:_ -> error
- end;
-state__prop_domain(FunLabel, #state{prop_types = {d, PropTypes}}) ->
+state__prop_domain(FunLabel, #state{prop_types = PropTypes}) ->
case dict:find(FunLabel, PropTypes) of
error -> error;
{ok, {_Range_Fun, Dom}} -> {ok, Dom};
{ok, FunType} -> {ok, t_fun_args(FunType)}
end.
-state__add_prop_constrs(Tree, #state{prop_types = {d, PropTypes}} = State) ->
+state__add_prop_constrs(Tree, #state{prop_types = PropTypes} = State) ->
Label = cerl_trees:get_label(Tree),
case dict:find(Label, PropTypes) of
error -> State;
@@ -2840,14 +2884,12 @@ state__mk_vars(N, #state{next_label = NL} = State) ->
Vars = [t_var(X) || X <- lists:seq(NL, NewLabel-1)],
{State#state{next_label = NewLabel}, Vars}.
-state__store_constrs(Id, Cs, #state{cmap = {d, Dict}} = State) ->
- NewDict = dict:store(Id, Cs, Dict),
- State#state{cmap = {d, NewDict}}.
+state__store_constrs(Id, Cs, #state{cmap = Map} = State) ->
+ NewMap = maps:put(Id, Cs, Map),
+ State#state{cmap = NewMap}.
-state__get_cs(Var, #state{cmap = {e, ETSDict}}) ->
- ets:lookup_element(ETSDict, Var, 2);
-state__get_cs(Var, #state{cmap = {d, Dict}}) ->
- dict:fetch(Var, Dict).
+state__get_cs(Var, #state{cmap = Map}) ->
+ maps:get(Var, Map).
state__is_self_rec(Fun, #state{self_rec = SelfRec}) ->
not (SelfRec =:= 'false') andalso is_equal(Fun, SelfRec).
@@ -2856,15 +2898,12 @@ state__store_funs(Vars0, Funs0, #state{fun_map = Map} = State) ->
debug_make_name_map(Vars0, Funs0),
Vars = mk_var_list(Vars0),
Funs = mk_var_list(Funs0),
- NewMap = lists:foldl(fun({Var, Fun}, MP) -> orddict:store(Var, Fun, MP) end,
+ NewMap = lists:foldl(fun({Var, Fun}, MP) -> maps:put(Fun, Var, MP) end,
Map, lists:zip(Vars, Funs)),
State#state{fun_map = NewMap}.
state__get_rec_var(Fun, #state{fun_map = Map}) ->
- case [V || {V, FV} <- Map, FV =:= Fun] of
- [Var] -> {ok, Var};
- [] -> error
- end.
+ maps:find(Fun, Map).
state__finalize(State) ->
State1 = enumerate_constraints(State),
@@ -2884,8 +2923,7 @@ mk_constraint(Lhs, Op, Rhs) ->
case t_is_any(Lhs) orelse constraint_opnd_is_any(Rhs) of
false ->
Deps = find_constraint_deps([Lhs, Rhs]),
- C0 = mk_constraint_1(Lhs, Op, Rhs),
- C = C0#constraint{deps = Deps},
+ C = mk_constraint_1(Lhs, Op, Rhs, Deps),
case Deps =:= [] of
true ->
%% This constraint is constant. Solve it immediately.
@@ -2903,8 +2941,7 @@ mk_constraint(Lhs, Op, Rhs) ->
end.
mk_constraint_any(Op) ->
- C = mk_constraint_1(t_any(), Op, t_any()),
- C#constraint{deps = []}.
+ mk_constraint_1(t_any(), Op, t_any(), []).
%% the following function is used so that we do not call
%% erl_types:t_is_any/1 with a term other than an erl_type()
@@ -2933,13 +2970,13 @@ mk_fun_var(Fun, Types) ->
-endif.
--spec get_deps(constr()) -> [dep()].
+-spec get_deps(constr()) -> deps().
get_deps(#constraint{deps = D}) -> D;
get_deps(#constraint_list{deps = D}) -> D;
get_deps(#constraint_ref{deps = D}) -> D.
--spec find_constraint_deps([fvar_or_type()]) -> [dep()].
+-spec find_constraint_deps([fvar_or_type()]) -> deps().
find_constraint_deps(List) ->
ordsets:from_list(find_constraint_deps(List, [])).
@@ -2952,12 +2989,12 @@ find_constraint_deps([Type|Tail], Acc) ->
find_constraint_deps([], Acc) ->
lists:flatten(Acc).
-mk_constraint_1(Lhs, eq, Rhs) when Lhs < Rhs ->
- #constraint{lhs = Lhs, op = eq, rhs = Rhs};
-mk_constraint_1(Lhs, eq, Rhs) ->
- #constraint{lhs = Rhs, op = eq, rhs = Lhs};
-mk_constraint_1(Lhs, Op, Rhs) ->
- #constraint{lhs = Lhs, op = Op, rhs = Rhs}.
+mk_constraint_1(Lhs, eq, Rhs, Deps) when Lhs < Rhs ->
+ #constraint{lhs = Lhs, op = eq, rhs = Rhs, deps = Deps};
+mk_constraint_1(Lhs, eq, Rhs, Deps) ->
+ #constraint{lhs = Rhs, op = eq, rhs = Lhs, deps = Deps};
+mk_constraint_1(Lhs, Op, Rhs, Deps) ->
+ #constraint{lhs = Lhs, op = Op, rhs = Rhs, deps = Deps}.
mk_constraints([Lhs|LhsTail], Op, [Rhs|RhsTail]) ->
[mk_constraint(Lhs, Op, Rhs) |
@@ -2972,13 +3009,24 @@ mk_constraint_ref(Id, Deps) ->
mk_constraint_list(Type, List) ->
List1 = ordsets:from_list(lift_lists(Type, List)),
- List2 = ordsets:filter(fun(X) -> get_deps(X) =/= [] end, List1),
- Deps = calculate_deps(List2),
+ case Type of
+ conj ->
+ List2 = ordsets:filter(fun(X) -> get_deps(X) =/= [] end, List1),
+ mk_constraint_list_cont(Type, List2);
+ disj ->
+ case lists:any(fun(X) -> get_deps(X) =:= [] end, List1) of
+ true -> mk_constraint_list_cont(Type, [mk_constraint_any(eq)]);
+ false -> mk_constraint_list_cont(Type, List1)
+ end
+ end.
+
+mk_constraint_list_cont(Type, List) ->
+ Deps = calculate_deps(List),
case Deps =:= [] of
true -> #constraint_list{type = conj,
list = [mk_constraint_any(eq)],
deps = []};
- false -> #constraint_list{type = Type, list = List2, deps = Deps}
+ false -> #constraint_list{type = Type, list = List, deps = Deps}
end.
lift_lists(Type, List) ->
@@ -3176,18 +3224,11 @@ order_fun_constraints([], Funs, Acc, State) ->
update_masks(C, Masks) ->
C#constraint_list{masks = Masks}.
--define(VARS_LIMIT, 50).
-
calculate_masks([C|Cs], I, L0) ->
calculate_masks(Cs, I+1, [{V, I} || V <- get_deps(C)] ++ L0);
calculate_masks([], _I, L) ->
M = family(L),
- case length(M) > ?VARS_LIMIT of
- true ->
- {d, dict:from_list(M)};
- false ->
- M
- end.
+ maps:from_list(M).
%% ============================================================================
%%
@@ -3260,6 +3301,15 @@ find_constraint(Tuple, [#constraint_list{list = List}|Cs]) ->
find_constraint(Tuple, [_|Cs]) ->
find_constraint(Tuple, Cs).
+-spec fold_literal_maybe_match(cerl:cerl(), state()) -> cerl:cerl().
+
+fold_literal_maybe_match(Tree0, State) ->
+ Tree1 = cerl:fold_literal(Tree0),
+ case state__is_in_match(State) of
+ false -> Tree1;
+ true -> dialyzer_utils:refold_pattern(Tree1)
+ end.
+
lookup_record(Records, Tag, Arity) ->
case erl_types:lookup_record(Tag, Arity, Records) of
{ok, Fields} ->
@@ -3306,7 +3356,7 @@ join_chars([H|T], Sep) ->
[H|[[Sep,X] || X <- T]].
debug_lookup_name(Var) ->
- case dict:find(t_var_name(Var), get(dialyzer_typesig_map)) of
+ case maps:find(t_var_name(Var), get(dialyzer_typesig_map)) of
error -> Var;
{ok, Name} -> Name
end.
@@ -3316,7 +3366,7 @@ debug_lookup_name(Var) ->
debug_make_name_map(Vars, Funs) ->
Map = get(dialyzer_typesig_map),
NewMap =
- if Map =:= undefined -> debug_make_name_map(Vars, Funs, dict:new());
+ if Map =:= undefined -> debug_make_name_map(Vars, Funs, maps:new());
true -> debug_make_name_map(Vars, Funs, Map)
end,
put(dialyzer_typesig_map, NewMap).
@@ -3324,7 +3374,7 @@ debug_make_name_map(Vars, Funs) ->
debug_make_name_map([Var|VarLeft], [Fun|FunLeft], Map) ->
Name = {cerl:fname_id(Var), cerl:fname_arity(Var)},
FunLabel = cerl_trees:get_label(Fun),
- debug_make_name_map(VarLeft, FunLeft, dict:store(FunLabel, Name, Map));
+ debug_make_name_map(VarLeft, FunLeft, maps:put(FunLabel, Name, Map));
debug_make_name_map([], [], Map) ->
Map.
diff --git a/lib/dialyzer/src/dialyzer_utils.erl b/lib/dialyzer/src/dialyzer_utils.erl
index 7fe982a992..76a5cf3d0b 100644
--- a/lib/dialyzer/src/dialyzer_utils.erl
+++ b/lib/dialyzer/src/dialyzer_utils.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -49,6 +49,7 @@
process_record_remote_types/1,
sets_filter/2,
src_compiler_opts/0,
+ refold_pattern/1,
parallelism/0,
family/1
]).
@@ -83,7 +84,7 @@ print_types1([{record, _Name} = Key|T], RecDict) ->
%% ----------------------------------------------------------------------------
--type abstract_code() :: [tuple()]. %% XXX: import from somewhere
+-type abstract_code() :: [erl_parse:abstract_form()].
-type comp_options() :: [compile:option()].
-type mod_or_fname() :: module() | file:filename().
-type fa() :: {atom(), arity()}.
@@ -193,15 +194,18 @@ get_core_from_abstract_code(AbstrCode, Opts) ->
%%
%% ============================================================================
+-type type_table() :: erl_types:type_table().
+-type mod_records() :: dict:dict(module(), type_table()).
+
-spec get_record_and_type_info(abstract_code()) ->
- {'ok', dict:dict()} | {'error', string()}.
+ {'ok', type_table()} | {'error', string()}.
get_record_and_type_info(AbstractCode) ->
Module = get_module(AbstractCode),
get_record_and_type_info(AbstractCode, Module, dict:new()).
--spec get_record_and_type_info(abstract_code(), module(), dict:dict()) ->
- {'ok', dict:dict()} | {'error', string()}.
+-spec get_record_and_type_info(abstract_code(), module(), type_table()) ->
+ {'ok', type_table()} | {'error', string()}.
get_record_and_type_info(AbstractCode, Module, RecDict) ->
get_record_and_type_info(AbstractCode, Module, RecDict, "nofile").
@@ -297,94 +301,118 @@ get_record_fields([], _RecDict, Acc) ->
%% The field types are cached. Used during analysis when handling records.
process_record_remote_types(CServer) ->
TempRecords = dialyzer_codeserver:get_temp_records(CServer),
- TempExpTypes = dialyzer_codeserver:get_temp_exported_types(CServer),
- TempRecords1 = process_opaque_types0(TempRecords, TempExpTypes),
+ ExpTypes = dialyzer_codeserver:get_exported_types(CServer),
+ Cache = erl_types:cache__new(),
+ {TempRecords1, Cache1} =
+ process_opaque_types0(TempRecords, ExpTypes, Cache),
+ %% A cache (not the field type cache) is used for speeding things up a bit.
+ VarTable = erl_types:var_table__new(),
ModuleFun =
- fun(Module, Record) ->
+ fun({Module, Record}, C0) ->
RecordFun =
- fun(Key, Value) ->
+ fun({Key, Value}, C2) ->
case Key of
{record, Name} ->
FieldFun =
- fun(Arity, Fields) ->
+ fun({Arity, Fields}, C4) ->
Site = {record, {Module, Name, Arity}},
- [{FieldName, Field,
- erl_types:t_from_form(Field,
- TempExpTypes,
- Site,
- TempRecords1)}
- || {FieldName, Field, _} <- Fields]
+ {Fields1, C7} =
+ lists:mapfoldl(fun({FieldName, Field, _}, C5) ->
+ {FieldT, C6} =
+ erl_types:t_from_form
+ (Field, ExpTypes, Site,
+ TempRecords1, VarTable,
+ C5),
+ {{FieldName, Field, FieldT}, C6}
+ end, C4, Fields),
+ {{Arity, Fields1}, C7}
end,
{FileLine, Fields} = Value,
- {FileLine, orddict:map(FieldFun, Fields)};
- _Other -> Value
+ {FieldsList, C3} =
+ lists:mapfoldl(FieldFun, C2, orddict:to_list(Fields)),
+ {{Key, {FileLine, orddict:from_list(FieldsList)}}, C3};
+ _Other -> {{Key, Value}, C2}
end
end,
- dict:map(RecordFun, Record)
+ {RecordList, C1} =
+ lists:mapfoldl(RecordFun, C0, dict:to_list(Record)),
+ {{Module, dict:from_list(RecordList)}, C1}
end,
- NewRecords = dict:map(ModuleFun, TempRecords1),
- ok = check_record_fields(NewRecords, TempExpTypes),
- CServer1 = dialyzer_codeserver:finalize_records(NewRecords, CServer),
- dialyzer_codeserver:finalize_exported_types(TempExpTypes, CServer1).
+ {NewRecordsList, C1} =
+ lists:mapfoldl(ModuleFun, Cache1, dict:to_list(TempRecords1)),
+ NewRecords = dict:from_list(NewRecordsList),
+ _C8 = check_record_fields(NewRecords, ExpTypes, C1),
+ dialyzer_codeserver:finalize_records(NewRecords, CServer).
%% erl_types:t_from_form() substitutes the declaration of opaque types
%% for the expanded type in some cases. To make sure the initial type,
%% any(), is not used, the expansion is done twice.
%% XXX: Recursive opaque types are not handled well.
-process_opaque_types0(TempRecords0, TempExpTypes) ->
- TempRecords1 = process_opaque_types(TempRecords0, TempExpTypes),
- process_opaque_types(TempRecords1, TempExpTypes).
+process_opaque_types0(TempRecords0, TempExpTypes, Cache) ->
+ {TempRecords1, NewCache} =
+ process_opaque_types(TempRecords0, TempExpTypes, Cache),
+ process_opaque_types(TempRecords1, TempExpTypes, NewCache).
-process_opaque_types(TempRecords, TempExpTypes) ->
+process_opaque_types(TempRecords, TempExpTypes, Cache) ->
+ VarTable = erl_types:var_table__new(),
ModuleFun =
- fun(Module, Record) ->
+ fun({Module, Record}, C0) ->
RecordFun =
- fun(Key, Value) ->
+ fun({Key, Value}, C2) ->
case Key of
{opaque, Name, NArgs} ->
{{_Module, _FileLine, Form, _ArgNames}=F, _Type} = Value,
Site = {type, {Module, Name, NArgs}},
- Type = erl_types:t_from_form(Form, TempExpTypes, Site,
- TempRecords),
- {F, Type};
- _Other -> Value
+ {Type, C3} =
+ erl_types:t_from_form(Form, TempExpTypes, Site,
+ TempRecords, VarTable, C2),
+ {{Key, {F, Type}}, C3};
+ _Other -> {{Key, Value}, C2}
end
end,
- dict:map(RecordFun, Record)
+ {RecordList, C1} =
+ lists:mapfoldl(RecordFun, C0, dict:to_list(Record)),
+ {{Module, dict:from_list(RecordList)}, C1}
+ %% dict:map(RecordFun, Record)
end,
- dict:map(ModuleFun, TempRecords).
+ {TempRecordList, NewCache} =
+ lists:mapfoldl(ModuleFun, Cache, dict:to_list(TempRecords)),
+ {dict:from_list(TempRecordList), NewCache}.
+ %% dict:map(ModuleFun, TempRecords).
-check_record_fields(Records, TempExpTypes) ->
+check_record_fields(Records, TempExpTypes, Cache) ->
+ VarTable = erl_types:var_table__new(),
CheckFun =
- fun({Module, Element}) ->
- CheckForm = fun(Form, Site) ->
- erl_types:t_check_record_fields(Form, TempExpTypes,
- Site, Records)
+ fun({Module, Element}, C0) ->
+ CheckForm = fun(Form, Site, C1) ->
+ erl_types:t_check_record_fields(Form, TempExpTypes,
+ Site, Records,
+ VarTable, C1)
end,
ElemFun =
- fun({Key, Value}) ->
+ fun({Key, Value}, C2) ->
case Key of
{record, Name} ->
FieldFun =
- fun({Arity, Fields}) ->
+ fun({Arity, Fields}, C3) ->
Site = {record, {Module, Name, Arity}},
- _ = [ok = CheckForm(Field, Site) ||
- {_, Field, _} <- Fields],
- ok
+ lists:foldl(fun({_, Field, _}, C4) ->
+ CheckForm(Field, Site, C4)
+ end, C3, Fields)
end,
{FileLine, Fields} = Value,
- Fun = fun() -> lists:foreach(FieldFun, Fields) end,
+ Fun = fun() -> lists:foldl(FieldFun, C2, Fields) end,
msg_with_position(Fun, FileLine);
{_OpaqueOrType, Name, NArgs} ->
Site = {type, {Module, Name, NArgs}},
{{_Module, FileLine, Form, _ArgNames}, _Type} = Value,
- Fun = fun() -> ok = CheckForm(Form, Site) end,
+ Fun = fun() -> CheckForm(Form, Site, C2) end,
msg_with_position(Fun, FileLine)
end
end,
- lists:foreach(ElemFun, dict:to_list(Element))
+ lists:foldl(ElemFun, C0, dict:to_list(Element))
end,
- lists:foreach(CheckFun, dict:to_list(Records)).
+ lists:foldl(CheckFun, Cache, dict:to_list(Records)).
msg_with_position(Fun, FileLine) ->
try Fun()
@@ -396,7 +424,7 @@ msg_with_position(Fun, FileLine) ->
throw({error, NewMsg})
end.
--spec merge_records(dict:dict(), dict:dict()) -> dict:dict().
+-spec merge_records(mod_records(), mod_records()) -> mod_records().
merge_records(NewRecords, OldRecords) ->
dict:merge(fun(_Key, NewVal, _OldVal) -> NewVal end, NewRecords, OldRecords).
@@ -410,7 +438,7 @@ merge_records(NewRecords, OldRecords) ->
-type spec_dict() :: dict:dict().
-type callback_dict() :: dict:dict().
--spec get_spec_info(module(), abstract_code(), dict:dict()) ->
+-spec get_spec_info(module(), abstract_code(), type_table()) ->
{'ok', spec_dict(), callback_dict()} | {'error', string()}.
get_spec_info(ModName, AbstractCode, RecordsDict) ->
@@ -676,7 +704,7 @@ format_errors([]) ->
format_sig(Type) ->
format_sig(Type, dict:new()).
--spec format_sig(erl_types:erl_type(), dict:dict()) -> string().
+-spec format_sig(erl_types:erl_type(), type_table()) -> string().
format_sig(Type, RecDict) ->
"fun(" ++ Sig = lists:flatten(erl_types:t_to_string(Type, RecDict)),
@@ -753,6 +781,13 @@ pp_hook(Node, Ctxt, Cont) ->
pp_binary(Node, Ctxt, Cont);
bitstr ->
pp_segment(Node, Ctxt, Cont);
+ map ->
+ pp_map(Node, Ctxt, Cont);
+ literal ->
+ case is_map(cerl:concrete(Node)) of
+ true -> pp_map(Node, Ctxt, Cont);
+ false -> Cont(Node, Ctxt)
+ end;
_ ->
Cont(Node, Ctxt)
end.
@@ -833,6 +868,87 @@ pp_atom(Atom) ->
String = atom_to_list(cerl:atom_val(Atom)),
prettypr:text(String).
+pp_map(Node, Ctxt, Cont) ->
+ Arg = cerl:map_arg(Node),
+ Before = case cerl:is_c_map_empty(Arg) of
+ true -> prettypr:floating(prettypr:text("#{"));
+ false ->
+ prettypr:beside(Cont(Arg,Ctxt),
+ prettypr:floating(prettypr:text("#{")))
+ end,
+ prettypr:beside(
+ Before, prettypr:beside(
+ prettypr:par(seq(cerl:map_es(Node),
+ prettypr:floating(prettypr:text(",")),
+ Ctxt, Cont)),
+ prettypr:floating(prettypr:text("}")))).
+
+seq([H | T], Separator, Ctxt, Fun) ->
+ case T of
+ [] -> [Fun(H, Ctxt)];
+ _ -> [prettypr:beside(Fun(H, Ctxt), Separator)
+ | seq(T, Separator, Ctxt, Fun)]
+ end;
+seq([], _, _, _) ->
+ [prettypr:empty()].
+
+%%------------------------------------------------------------------------------
+
+-spec refold_pattern(cerl:cerl()) -> cerl:cerl().
+
+refold_pattern(Pat) ->
+ %% Avoid the churn of unfolding and refolding
+ case cerl:is_literal(Pat) andalso find_map(cerl:concrete(Pat)) of
+ true ->
+ Tree = refold_concrete_pat(cerl:concrete(Pat)),
+ PatAnn = cerl:get_ann(Pat),
+ case proplists:is_defined(label, PatAnn) of
+ %% Literals are not normally annotated with a label, but can be if, for
+ %% example, they were created by cerl:fold_literal/1.
+ true -> cerl:set_ann(Tree, PatAnn);
+ false ->
+ [{label, Label}] = cerl:get_ann(Tree),
+ cerl:set_ann(Tree, [{label, Label}|PatAnn])
+ end;
+ false -> Pat
+ end.
+
+find_map(#{}) -> true;
+find_map(Tuple) when is_tuple(Tuple) -> find_map(tuple_to_list(Tuple));
+find_map([H|T]) -> find_map(H) orelse find_map(T);
+find_map(_) -> false.
+
+refold_concrete_pat(Val) ->
+ case Val of
+ _ when is_tuple(Val) ->
+ Els = lists:map(fun refold_concrete_pat/1, tuple_to_list(Val)),
+ case lists:all(fun cerl:is_literal/1, Els) of
+ true -> cerl:abstract(Val);
+ false -> label(cerl:c_tuple_skel(Els))
+ end;
+ [H|T] ->
+ case cerl:is_literal(HP=refold_concrete_pat(H))
+ and cerl:is_literal(TP=refold_concrete_pat(T))
+ of
+ true -> cerl:abstract(Val);
+ false -> label(cerl:c_cons_skel(HP, TP))
+ end;
+ M when is_map(M) ->
+ %% Map patterns are not generated by the parser(!), but they have a
+ %% property we want, namely that they are never folded into literals.
+ %% N.B.: The key in a map pattern is an expression, *not* a pattern.
+ label(cerl:c_map_pattern([cerl:c_map_pair_exact(cerl:abstract(K),
+ refold_concrete_pat(V))
+ || {K, V} <- maps:to_list(M)]));
+ _ ->
+ cerl:abstract(Val)
+ end.
+
+label(Tree) ->
+ %% Sigh
+ Label = -erlang:unique_integer([positive]),
+ cerl:set_ann(Tree, [{label, Label}]).
+
%%------------------------------------------------------------------------------
-spec parallelism() -> integer().
diff --git a/lib/dialyzer/src/dialyzer_worker.erl b/lib/dialyzer/src/dialyzer_worker.erl
index 4be93c75bf..b9ab27c11d 100644
--- a/lib/dialyzer/src/dialyzer_worker.erl
+++ b/lib/dialyzer/src/dialyzer_worker.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,20 +21,20 @@
-module(dialyzer_worker).
--export([launch/4, sequential/4]).
+-export([launch/4]).
-export_type([worker/0]).
--type worker() :: pid(). %%opaque
+-opaque worker() :: pid().
-type mode() :: dialyzer_coordinator:mode().
-type coordinator() :: dialyzer_coordinator:coordinator().
-type init_data() :: dialyzer_coordinator:init_data().
--type result() :: dialyzer_coordinator:result().
+-type job() :: dialyzer_coordinator:job().
-record(state, {
mode :: mode(),
- job :: mfa_or_funlbl() | file:filename(),
+ job :: job(),
coordinator :: coordinator(),
init_data :: init_data(),
depends_on = [] :: list()
@@ -52,23 +52,28 @@
%%--------------------------------------------------------------------
--spec launch(mode(), [mfa_or_funlbl()], init_data(), coordinator()) -> worker().
+-spec launch(mode(), job(), init_data(), coordinator()) -> worker().
launch(Mode, Job, InitData, Coordinator) ->
State = #state{mode = Mode,
job = Job,
init_data = InitData,
coordinator = Coordinator},
- InitState =
- case Mode of
- X when X =:= 'typesig'; X =:= 'dataflow' -> initializing;
- X when X =:= 'compile'; X =:= 'warnings' -> running
- end,
- spawn_link(fun() -> loop(InitState, State) end).
+ spawn_link(fun() -> init(State) end).
%%--------------------------------------------------------------------
-loop(updating, State) ->
+init(#state{job = SCC, mode = Mode, init_data = InitData} = State) when
+ Mode =:= 'typesig'; Mode =:= 'dataflow' ->
+ DependsOn = dialyzer_succ_typings:find_depends_on(SCC, InitData),
+ ?debug("Deps ~p: ~p\n",[SCC, DependsOn]),
+ loop(updating, State#state{depends_on = DependsOn});
+init(#state{mode = Mode} = State) when
+ Mode =:= 'compile'; Mode =:= 'warnings' ->
+ loop(running, State).
+
+loop(updating, #state{mode = Mode} = State) when
+ Mode =:= 'typesig'; Mode =:= 'dataflow' ->
?debug("Update: ~p\n",[State#state.job]),
NextStatus =
case waits_more_success_typings(State) of
@@ -76,16 +81,13 @@ loop(updating, State) ->
false -> running
end,
loop(NextStatus, State);
-loop(initializing, #state{job = SCC, init_data = InitData} = State) ->
- DependsOn = dialyzer_succ_typings:find_depends_on(SCC, InitData),
- ?debug("Deps ~p: ~p\n",[State#state.job, DependsOn]),
- loop(updating, State#state{depends_on = DependsOn});
-loop(waiting, State) ->
+loop(waiting, #state{mode = Mode} = State) when
+ Mode =:= 'typesig'; Mode =:= 'dataflow' ->
?debug("Wait: ~p\n",[State#state.job]),
NewState = wait_for_success_typings(State),
loop(updating, NewState);
loop(running, #state{mode = 'compile'} = State) ->
- dialyzer_coordinator:wait_activation(),
+ dialyzer_coordinator:request_activation(State#state.coordinator),
?debug("Compile: ~s\n",[State#state.job]),
Result =
case start_compilation(State) of
@@ -97,7 +99,7 @@ loop(running, #state{mode = 'compile'} = State) ->
end,
report_to_coordinator(Result, State);
loop(running, #state{mode = 'warnings'} = State) ->
- dialyzer_coordinator:wait_activation(),
+ dialyzer_coordinator:request_activation(State#state.coordinator),
?debug("Warning: ~s\n",[State#state.job]),
Result = collect_warnings(State),
report_to_coordinator(Result, State);
@@ -169,22 +171,3 @@ continue_compilation(Label, Data) ->
collect_warnings(#state{job = Job, init_data = InitData}) ->
dialyzer_succ_typings:collect_warnings(Job, InitData).
-
-%%------------------------------------------------------------------------------
-
--type extra() :: label() | 'unused'.
-
--spec sequential(mode(), [mfa_or_funlbl()], init_data(), extra()) -> result().
-
-sequential('compile', Job, InitData, Extra) ->
- case dialyzer_analysis_callgraph:start_compilation(Job, InitData) of
- {ok, EstimatedSize, Data} ->
- {EstimatedSize, continue_compilation(Extra, Data)};
- {error, _Reason} = Error -> {0, Error}
- end;
-sequential('typesig', Job, InitData, _Extra) ->
- dialyzer_succ_typings:find_succ_types_for_scc(Job, InitData);
-sequential('dataflow', Job, InitData, _Extra) ->
- dialyzer_succ_typings:refine_one_module(Job, InitData);
-sequential('warnings', Job, InitData, _Extra) ->
- dialyzer_succ_typings:collect_warnings(Job, InitData).
diff --git a/lib/dialyzer/test/Makefile b/lib/dialyzer/test/Makefile
index f43e04dd59..0d8fba438c 100644
--- a/lib/dialyzer/test/Makefile
+++ b/lib/dialyzer/test/Makefile
@@ -12,6 +12,7 @@ AUXILIARY_FILES=\
dialyzer_common.erl\
file_utils.erl\
dialyzer_SUITE.erl\
+ abstract_SUITE.erl\
plt_SUITE.erl
# ----------------------------------------------------
diff --git a/lib/dialyzer/test/abstract_SUITE.erl b/lib/dialyzer/test/abstract_SUITE.erl
new file mode 100644
index 0000000000..269db3e836
--- /dev/null
+++ b/lib/dialyzer/test/abstract_SUITE.erl
@@ -0,0 +1,102 @@
+%% This suite contains cases that cannot be written
+%% in Erlang itself and must be done via the abstract
+%% format.
+
+-module(abstract_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+-include("dialyzer_test_constants.hrl").
+
+-export([suite/0, all/0, init_per_suite/0, init_per_suite/1]).
+-export([generated_case/1]).
+
+suite() ->
+ [{timetrap, {minutes, 1}}].
+all() ->
+ [generated_case].
+
+init_per_suite() ->
+ [{timetrap, ?plt_timeout}].
+init_per_suite(Config) ->
+ OutDir = ?config(priv_dir, Config),
+ case dialyzer_common:check_plt(OutDir) of
+ fail -> {skip, "Plt creation/check failed."};
+ ok -> [{dialyzer_options, []}|Config]
+ end.
+
+generated_case(Config) when is_list(Config) ->
+ %% Equivalent to:
+ %%
+ %% -module(foo).
+ %% -export(bar).
+ %% bar() ->
+ %% Arg = sample,
+ %% case Arg of
+ %% #{} -> map;
+ %% _ -> Arg:fn()
+ %% end.
+ %%
+ %% Except the case statement and its clauses are marked as autogenerated.
+ [] =
+ test([{attribute,1,module,foo},
+ {attribute,2,export,[{bar,0}]},
+ {function,3,bar,0,
+ [{clause,3,[],[],
+ [{match,4,{var,4,'Arg'},{atom,4,sample}},
+ {'case',[{location,5},{generated,true}],{var,5,'Arg'},
+ [{clause,[{location,6},{generated,true}],[{map,6,[]}],[],
+ [{atom,6,map}]},
+ {clause,[{location,7},{generated,true}],[{var,7,'_'}],[],
+ [{call,7,{remote,7,{var,7,'Arg'},{atom,7,fn}},[]}]}]}]}]}],
+ Config, [], []),
+ %% With the first clause not auto-generated
+ [{warn_matching,{_,6},_}] =
+ test([{attribute,1,module,foo},
+ {attribute,2,export,[{bar,0}]},
+ {function,3,bar,0,
+ [{clause,3,[],[],
+ [{match,4,{var,4,'Arg'},{atom,4,sample}},
+ {'case',[{location,5},{generated,true}],{var,5,'Arg'},
+ [{clause,6,[{map,6,[]}],[],
+ [{atom,6,map}]},
+ {clause,[{location,7},{generated,true}],[{var,7,'_'}],[],
+ [{call,7,{remote,7,{var,7,'Arg'},{atom,7,fn}},[]}]}]}]}]}],
+ Config, [], []),
+ %% With Arg set to [] so neither clause matches
+ [{warn_return_no_exit,{_,3},_},
+ {warn_matching,{_,6},_},
+ {warn_failing_call,{_,7},_}] =
+ test([{attribute,1,module,foo},
+ {attribute,2,export,[{bar,0}]},
+ {function,3,bar,0,
+ [{clause,3,[],[],
+ [{match,4,{var,4,'Arg'},{nil,4}},
+ {'case',[{location,5},{generated,true}],{var,5,'Arg'},
+ [{clause,[{location,6},{generated,true}],[{map,6,[]}],[],
+ [{atom,6,map}]},
+ {clause,[{location,7},{generated,true}],[{var,7,'_'}],[],
+ [{call,7,{remote,7,{var,7,'Arg'},{atom,7,fn}},[]}]}]}]}]}],
+ Config, [], []),
+ ok.
+
+test(Prog, Config, COpts, DOpts) ->
+ {ok, BeamFile} = compile(Config, Prog, COpts),
+ run_dialyzer(Config, succ_typings, [BeamFile], DOpts).
+
+compile(Config, Prog, CompileOpts) ->
+ OutDir = ?config(priv_dir, Config),
+ Opts = [{outdir, OutDir}, debug_info, return_errors | CompileOpts],
+ {ok, Module, Source} = compile:forms(Prog, Opts),
+ BeamFile = filename:join([OutDir, lists:concat([Module, ".beam"])]),
+ ok = file:write_file(BeamFile, Source),
+ {ok, BeamFile}.
+
+run_dialyzer(Config, Analysis, Files, Opts) ->
+ OutDir = ?config(priv_dir, Config),
+ PltFilename = dialyzer_common:plt_file(OutDir),
+ dialyzer:run([{analysis_type, Analysis},
+ {files, Files},
+ {init_plt, PltFilename},
+ {check_plt, false},
+ {from, byte_code} |
+ Opts]).
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/results/callbacks_and_specs b/lib/dialyzer/test/behaviour_SUITE_data/results/callbacks_and_specs
index 33d135048e..38999e8919 100644
--- a/lib/dialyzer/test/behaviour_SUITE_data/results/callbacks_and_specs
+++ b/lib/dialyzer/test/behaviour_SUITE_data/results/callbacks_and_specs
@@ -1,5 +1,5 @@
-my_callbacks_wrong.erl:26: The return type #state{parent::'undefined' | pid(),status::'closed' | 'init' | 'open',subscribe::[{pid(),integer()}],counter::integer()} in the specification of callback_init/1 is not a subtype of {'ok',_}, which is the expected return type for the callback of my_behaviour behaviour
-my_callbacks_wrong.erl:28: The inferred return type of callback_init/1 (#state{parent::'undefined' | pid(),status::'init',subscribe::[],counter::1}) has nothing in common with {'ok',_}, which is the expected return type for the callback of my_behaviour behaviour
-my_callbacks_wrong.erl:30: The return type {'reply',#state{parent::'undefined' | pid(),status::'closed' | 'init' | 'open',subscribe::[{pid(),integer()}],counter::integer()}} in the specification of callback_cast/3 is not a subtype of {'noreply',_}, which is the expected return type for the callback of my_behaviour behaviour
+my_callbacks_wrong.erl:26: The return type #state{parent::pid(),status::'closed' | 'init' | 'open',subscribe::[{pid(),integer()}],counter::integer()} in the specification of callback_init/1 is not a subtype of {'ok',_}, which is the expected return type for the callback of my_behaviour behaviour
+my_callbacks_wrong.erl:28: The inferred return type of callback_init/1 (#state{parent::pid(),status::'init',subscribe::[],counter::1}) has nothing in common with {'ok',_}, which is the expected return type for the callback of my_behaviour behaviour
+my_callbacks_wrong.erl:30: The return type {'reply',#state{parent::pid(),status::'closed' | 'init' | 'open',subscribe::[{pid(),integer()}],counter::integer()}} in the specification of callback_cast/3 is not a subtype of {'noreply',_}, which is the expected return type for the callback of my_behaviour behaviour
my_callbacks_wrong.erl:39: The specified type for the 2nd argument of callback_call/3 (atom()) is not a supertype of pid(), which is expected type for this argument in the callback of the my_behaviour behaviour
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/results/supervisor_incorrect_return b/lib/dialyzer/test/behaviour_SUITE_data/results/supervisor_incorrect_return
index 4103a2d8b4..638d031923 100644
--- a/lib/dialyzer/test/behaviour_SUITE_data/results/supervisor_incorrect_return
+++ b/lib/dialyzer/test/behaviour_SUITE_data/results/supervisor_incorrect_return
@@ -1,2 +1,2 @@
-supervisor_incorrect_return.erl:14: The inferred return type of init/1 ({'ok',{{'one_against_one',0,1},[{_,_,_,_,_,_},...]}}) has nothing in common with 'ignore' | {'ok',{{'one_for_all',non_neg_integer(),pos_integer()} | {'one_for_one',non_neg_integer(),pos_integer()} | {'rest_for_one',non_neg_integer(),pos_integer()} | {'simple_one_for_one',non_neg_integer(),pos_integer()} | #{},[{_,{atom() | tuple(),atom(),'undefined' | [any()]},'permanent' | 'temporary' | 'transient','brutal_kill' | 'infinity' | non_neg_integer(),'supervisor' | 'worker','dynamic' | [atom() | tuple()]} | #{}]}}, which is the expected return type for the callback of supervisor behaviour
+supervisor_incorrect_return.erl:14: The inferred return type of init/1 ({'ok',{{'one_against_one',0,1},[{_,_,_,_,_,_},...]}}) has nothing in common with 'ignore' | {'ok',{{'one_for_all',non_neg_integer(),pos_integer()} | {'one_for_one',non_neg_integer(),pos_integer()} | {'rest_for_one',non_neg_integer(),pos_integer()} | {'simple_one_for_one',non_neg_integer(),pos_integer()} | #{'intensity'=>non_neg_integer(), 'period'=>pos_integer(), 'strategy'=>'one_for_all' | 'one_for_one' | 'rest_for_one' | 'simple_one_for_one'},[{_,{atom(),atom(),'undefined' | [any()]},'permanent' | 'temporary' | 'transient','brutal_kill' | 'infinity' | non_neg_integer(),'supervisor' | 'worker','dynamic' | [atom()]} | #{'id':=_, 'start':={atom(),atom(),'undefined' | [any()]}, 'modules'=>'dynamic' | [atom()], 'restart'=>'permanent' | 'temporary' | 'transient', 'shutdown'=>'brutal_kill' | 'infinity' | non_neg_integer(), 'type'=>'supervisor' | 'worker'}]}}, which is the expected return type for the callback of supervisor behaviour
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/src/proper/compile_flags.hrl b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/compile_flags.hrl
new file mode 100644
index 0000000000..e5ee44ace1
--- /dev/null
+++ b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/compile_flags.hrl
@@ -0,0 +1,2 @@
+-define(AT_LEAST_19, 1).
+-define(AT_LEAST_17, 1).
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_common.hrl b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_common.hrl
new file mode 100644
index 0000000000..c10626c5cc
--- /dev/null
+++ b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_common.hrl
@@ -0,0 +1,55 @@
+%%% Copyright 2010-2013 Manolis Papadakis <[email protected]>,
+%%% Eirini Arvaniti <[email protected]>
+%%% and Kostis Sagonas <[email protected]>
+%%%
+%%% This file is part of PropEr.
+%%%
+%%% PropEr is free software: you can redistribute it and/or modify
+%%% it under the terms of the GNU General Public License as published by
+%%% the Free Software Foundation, either version 3 of the License, or
+%%% (at your option) any later version.
+%%%
+%%% PropEr is distributed in the hope that it will be useful,
+%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%%% GNU General Public License for more details.
+%%%
+%%% You should have received a copy of the GNU General Public License
+%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
+
+%%% @copyright 2010-2013 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
+%%% @version {@version}
+%%% @author Manolis Papadakis
+%%% @doc Common parts of user and internal header files
+
+
+%%------------------------------------------------------------------------------
+%% Test generation macros
+%%------------------------------------------------------------------------------
+
+-define(FORALL(X,RawType,Prop), proper:forall(RawType,fun(X) -> Prop end)).
+-define(IMPLIES(Pre,Prop), proper:implies(Pre,?DELAY(Prop))).
+-define(WHENFAIL(Action,Prop), proper:whenfail(?DELAY(Action),?DELAY(Prop))).
+-define(TRAPEXIT(Prop), proper:trapexit(?DELAY(Prop))).
+-define(TIMEOUT(Limit,Prop), proper:timeout(Limit,?DELAY(Prop))).
+%% TODO: -define(ALWAYS(Tests,Prop), proper:always(Tests,?DELAY(Prop))).
+%% TODO: -define(SOMETIMES(Tests,Prop), proper:sometimes(Tests,?DELAY(Prop))).
+
+
+%%------------------------------------------------------------------------------
+%% Generator macros
+%%------------------------------------------------------------------------------
+
+-define(FORCE(X), (X)()).
+-define(DELAY(X), fun() -> X end).
+-define(LAZY(X), proper_types:lazy(?DELAY(X))).
+-define(SIZED(SizeArg,Gen), proper_types:sized(fun(SizeArg) -> Gen end)).
+-define(LET(X,RawType,Gen), proper_types:bind(RawType,fun(X) -> Gen end,false)).
+-define(SHRINK(Gen,AltGens),
+ proper_types:shrinkwith(?DELAY(Gen),?DELAY(AltGens))).
+-define(LETSHRINK(Xs,RawType,Gen),
+ proper_types:bind(RawType,fun(Xs) -> Gen end,true)).
+-define(SUCHTHAT(X,RawType,Condition),
+ proper_types:add_constraint(RawType,fun(X) -> Condition end,true)).
+-define(SUCHTHATMAYBE(X,RawType,Condition),
+ proper_types:add_constraint(RawType,fun(X) -> Condition end,false)).
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_gen.erl b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_gen.erl
new file mode 100644
index 0000000000..b64a139e4d
--- /dev/null
+++ b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_gen.erl
@@ -0,0 +1,611 @@
+%%% Copyright 2010-2015 Manolis Papadakis <[email protected]>,
+%%% Eirini Arvaniti <[email protected]>
+%%% and Kostis Sagonas <[email protected]>
+%%%
+%%% This file is part of PropEr.
+%%%
+%%% PropEr is free software: you can redistribute it and/or modify
+%%% it under the terms of the GNU General Public License as published by
+%%% the Free Software Foundation, either version 3 of the License, or
+%%% (at your option) any later version.
+%%%
+%%% PropEr is distributed in the hope that it will be useful,
+%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%%% GNU General Public License for more details.
+%%%
+%%% You should have received a copy of the GNU General Public License
+%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
+
+%%% @copyright 2010-2015 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
+%%% @version {@version}
+%%% @author Manolis Papadakis
+
+%%% @doc Generator subsystem and generators for basic types.
+%%%
+%%% You can use <a href="#index">these</a> functions to try out the random
+%%% instance generation and shrinking subsystems.
+%%%
+%%% CAUTION: These functions should never be used inside properties. They are
+%%% meant for demonstration purposes only.
+
+-module(proper_gen).
+-export([pick/1, pick/2, pick/3,
+ sample/1, sample/3, sampleshrink/1, sampleshrink/2]).
+
+-export([safe_generate/1]).
+-export([generate/1, normal_gen/1, alt_gens/1, clean_instance/1,
+ get_ret_type/1]).
+-export([integer_gen/3, float_gen/3, atom_gen/1, atom_rev/1, binary_gen/1,
+ binary_rev/1, binary_len_gen/1, bitstring_gen/1, bitstring_rev/1,
+ bitstring_len_gen/1, list_gen/2, distlist_gen/3, vector_gen/2,
+ union_gen/1, weighted_union_gen/1, tuple_gen/1, loose_tuple_gen/2,
+ loose_tuple_rev/2, exactly_gen/1, fixed_list_gen/1, function_gen/2,
+ any_gen/1, native_type_gen/2, safe_weighted_union_gen/1,
+ safe_union_gen/1]).
+
+-export_type([instance/0, imm_instance/0, sized_generator/0, nosize_generator/0,
+ generator/0, reverse_gen/0, combine_fun/0, alt_gens/0]).
+
+-include("proper_internal.hrl").
+
+%%-----------------------------------------------------------------------------
+%% Types
+%%-----------------------------------------------------------------------------
+
+%% TODO: update imm_instance() when adding more types: be careful when reading
+%% anything that returns it
+%% @private_type
+-type imm_instance() :: proper_types:raw_type()
+ | instance()
+ | {'$used', imm_instance(), imm_instance()}
+ | {'$to_part', imm_instance()}.
+-type instance() :: term().
+%% A value produced by the random instance generator.
+-type error_reason() :: 'arity_limit' | 'cant_generate' | {'typeserver',term()}.
+
+%% @private_type
+-type sized_generator() :: fun((size()) -> imm_instance()).
+%% @private_type
+-type typed_sized_generator() :: {'typed',
+ fun((proper_types:type(),size()) ->
+ imm_instance())}.
+%% @private_type
+-type nosize_generator() :: fun(() -> imm_instance()).
+%% @private_type
+-type typed_nosize_generator() :: {'typed',
+ fun((proper_types:type()) ->
+ imm_instance())}.
+%% @private_type
+-type generator() :: sized_generator()
+ | typed_sized_generator()
+ | nosize_generator()
+ | typed_nosize_generator().
+%% @private_type
+-type plain_reverse_gen() :: fun((instance()) -> imm_instance()).
+%% @private_type
+-type typed_reverse_gen() :: {'typed',
+ fun((proper_types:type(),instance()) ->
+ imm_instance())}.
+%% @private_type
+-type reverse_gen() :: plain_reverse_gen() | typed_reverse_gen().
+%% @private_type
+-type combine_fun() :: fun((instance()) -> imm_instance()).
+%% @private_type
+-type alt_gens() :: fun(() -> [imm_instance()]).
+%% @private_type
+-type fun_seed() :: {non_neg_integer(),non_neg_integer()}.
+
+
+%%-----------------------------------------------------------------------------
+%% Instance generation functions
+%%-----------------------------------------------------------------------------
+
+%% @private
+-spec safe_generate(proper_types:raw_type()) ->
+ {'ok',imm_instance()} | {'error',error_reason()}.
+safe_generate(RawType) ->
+ try generate(RawType) of
+ ImmInstance -> {ok, ImmInstance}
+ catch
+ throw:'$arity_limit' -> {error, arity_limit};
+ throw:'$cant_generate' -> {error, cant_generate};
+ throw:{'$typeserver',SubReason} -> {error, {typeserver,SubReason}}
+ end.
+
+%% @private
+-spec generate(proper_types:raw_type()) -> imm_instance().
+generate(RawType) ->
+ Type = proper_types:cook_outer(RawType),
+ ok = add_parameters(Type),
+ Instance = generate(Type, get('$constraint_tries'), none),
+ ok = remove_parameters(Type),
+ Instance.
+
+-spec add_parameters(proper_types:type()) -> 'ok'.
+add_parameters(Type) ->
+ case proper_types:find_prop(parameters, Type) of
+ {ok, Params} ->
+ OldParams = erlang:get('$parameters'),
+ case OldParams of
+ undefined ->
+ erlang:put('$parameters', Params);
+ _ ->
+ erlang:put('$parameters', Params ++ OldParams)
+ end,
+ ok;
+ _ ->
+ ok
+ end.
+
+-spec remove_parameters(proper_types:type()) -> 'ok'.
+remove_parameters(Type) ->
+ case proper_types:find_prop(parameters, Type) of
+ {ok, Params} ->
+ AllParams = erlang:get('$parameters'),
+ case AllParams of
+ Params->
+ erlang:erase('$parameters');
+ _ ->
+ erlang:put('$parameters', AllParams -- Params)
+ end,
+ ok;
+ _ ->
+ ok
+ end.
+
+-spec generate(proper_types:type(), non_neg_integer(),
+ 'none' | {'ok',imm_instance()}) -> imm_instance().
+generate(_Type, 0, none) ->
+ throw('$cant_generate');
+generate(_Type, 0, {ok,Fallback}) ->
+ Fallback;
+generate(Type, TriesLeft, Fallback) ->
+ ImmInstance =
+ case proper_types:get_prop(kind, Type) of
+ constructed ->
+ PartsType = proper_types:get_prop(parts_type, Type),
+ Combine = proper_types:get_prop(combine, Type),
+ ImmParts = generate(PartsType),
+ Parts = clean_instance(ImmParts),
+ ImmInstance1 = Combine(Parts),
+ %% TODO: We can just generate the internal type: if it's not
+ %% a type, it will turn into an exactly.
+ ImmInstance2 =
+ case proper_types:is_raw_type(ImmInstance1) of
+ true -> generate(ImmInstance1);
+ false -> ImmInstance1
+ end,
+ {'$used',ImmParts,ImmInstance2};
+ _ ->
+ ImmInstance1 = normal_gen(Type),
+ case proper_types:is_raw_type(ImmInstance1) of
+ true -> generate(ImmInstance1);
+ false -> ImmInstance1
+ end
+ end,
+ case proper_types:satisfies_all(clean_instance(ImmInstance), Type) of
+ {_,true} -> ImmInstance;
+ {true,false} -> generate(Type, TriesLeft - 1, {ok,ImmInstance});
+ {false,false} -> generate(Type, TriesLeft - 1, Fallback)
+ end.
+
+%% @equiv pick(Type, 10)
+-spec pick(Type::proper_types:raw_type()) -> {'ok',instance()} | 'error'.
+pick(RawType) ->
+ pick(RawType, 10).
+
+%% @equiv pick(Type, Size, os:timestamp())
+-spec pick(Type::proper_types:raw_type(), size()) -> {'ok',instance()} | 'error'.
+pick(RawType, Size) ->
+ pick(RawType, Size, os:timestamp()).
+
+%% @doc Generates a random instance of `Type', of size `Size' with seed `Seed'.
+-spec pick(Type::proper_types:raw_type(), size(), seed()) ->
+ {'ok',instance()} | 'error'.
+pick(RawType, Size, Seed) ->
+ proper:global_state_init_size_seed(Size, Seed),
+ case clean_instance(safe_generate(RawType)) of
+ {ok,Instance} = Result ->
+ Msg = "WARNING: Some garbage has been left in the process registry "
+ "and the code server~n"
+ "to allow for the returned function(s) to run normally.~n"
+ "Please run proper:global_state_erase() when done.~n",
+ case contains_fun(Instance) of
+ true -> io:format(Msg, []);
+ false -> proper:global_state_erase()
+ end,
+ Result;
+ {error,Reason} ->
+ proper:report_error(Reason, fun io:format/2),
+ proper:global_state_erase(),
+ error
+ end.
+
+%% @equiv sample(Type, 10, 20)
+-spec sample(Type::proper_types:raw_type()) -> 'ok'.
+sample(RawType) ->
+ sample(RawType, 10, 20).
+
+%% @doc Generates and prints one random instance of `Type' for each size from
+%% `StartSize' up to `EndSize'.
+-spec sample(Type::proper_types:raw_type(), size(), size()) -> 'ok'.
+sample(RawType, StartSize, EndSize) when StartSize =< EndSize ->
+ Tests = EndSize - StartSize + 1,
+ Prop = ?FORALL(X, RawType, begin io:format("~p~n",[X]), true end),
+ Opts = [quiet,{start_size,StartSize},{max_size,EndSize},{numtests,Tests}],
+ _ = proper:quickcheck(Prop, Opts),
+ ok.
+
+%% @equiv sampleshrink(Type, 10)
+-spec sampleshrink(Type::proper_types:raw_type()) -> 'ok'.
+sampleshrink(RawType) ->
+ sampleshrink(RawType, 10).
+
+%% @doc Generates a random instance of `Type', of size `Size', then shrinks it
+%% as far as it goes. The value produced on each step of the shrinking process
+%% is printed on the screen.
+-spec sampleshrink(Type::proper_types:raw_type(), size()) -> 'ok'.
+sampleshrink(RawType, Size) ->
+ proper:global_state_init_size(Size),
+ Type = proper_types:cook_outer(RawType),
+ case safe_generate(Type) of
+ {ok,ImmInstance} ->
+ Shrunk = keep_shrinking(ImmInstance, [], Type),
+ PrintInst = fun(I) -> io:format("~p~n",[clean_instance(I)]) end,
+ lists:foreach(PrintInst, Shrunk);
+ {error,Reason} ->
+ proper:report_error(Reason, fun io:format/2)
+ end,
+ proper:global_state_erase(),
+ ok.
+
+-spec keep_shrinking(imm_instance(), [imm_instance()], proper_types:type()) ->
+ [imm_instance(),...].
+keep_shrinking(ImmInstance, Acc, Type) ->
+ keep_shrinking(ImmInstance, Acc, Type, init).
+
+keep_shrinking(ImmInstance, Acc, Type, State) ->
+ case proper_shrink:shrink(ImmInstance, Type, State) of
+ {[], done} -> %% no more shrinkers
+ lists:reverse([ImmInstance|Acc]);
+ {[], NewState} ->
+ %% try next shrinker
+ keep_shrinking(ImmInstance, Acc, Type, NewState);
+ {[Shrunk|_Rest], _NewState} ->
+ Acc2 = [ImmInstance|Acc],
+ case lists:member(Shrunk, Acc2) of
+ true ->
+ %% Avoid infinite loops
+ lists:reverse(Acc2);
+ false ->
+ keep_shrinking(Shrunk, Acc2, Type)
+ end
+ end.
+
+-spec contains_fun(term()) -> boolean().
+contains_fun(List) when is_list(List) ->
+ proper_arith:safe_any(fun contains_fun/1, List);
+contains_fun(Tuple) when is_tuple(Tuple) ->
+ contains_fun(tuple_to_list(Tuple));
+contains_fun(Fun) when is_function(Fun) ->
+ true;
+contains_fun(_Term) ->
+ false.
+
+
+%%-----------------------------------------------------------------------------
+%% Utility functions
+%%-----------------------------------------------------------------------------
+
+%% @private
+-spec normal_gen(proper_types:type()) -> imm_instance().
+normal_gen(Type) ->
+ case proper_types:get_prop(generator, Type) of
+ {typed, Gen} ->
+ if
+ is_function(Gen, 1) -> Gen(Type);
+ is_function(Gen, 2) -> Gen(Type, proper:get_size(Type))
+ end;
+ Gen ->
+ if
+ is_function(Gen, 0) -> Gen();
+ is_function(Gen, 1) -> Gen(proper:get_size(Type))
+ end
+ end.
+
+%% @private
+-spec alt_gens(proper_types:type()) -> [imm_instance()].
+alt_gens(Type) ->
+ case proper_types:find_prop(alt_gens, Type) of
+ {ok, AltGens} -> ?FORCE(AltGens);
+ error -> []
+ end.
+
+%% @private
+-spec clean_instance(imm_instance()) -> instance().
+clean_instance({'$used',_ImmParts,ImmInstance}) ->
+ clean_instance(ImmInstance);
+clean_instance({'$to_part',ImmInstance}) ->
+ clean_instance(ImmInstance);
+clean_instance(ImmInstance) ->
+ if
+ is_list(ImmInstance) ->
+ %% CAUTION: this must handle improper lists
+ proper_arith:safe_map(fun clean_instance/1, ImmInstance);
+ is_tuple(ImmInstance) ->
+ proper_arith:tuple_map(fun clean_instance/1, ImmInstance);
+ true ->
+ ImmInstance
+ end.
+
+
+%%-----------------------------------------------------------------------------
+%% Basic type generators
+%%-----------------------------------------------------------------------------
+
+%% @private
+-spec integer_gen(size(), proper_types:extint(), proper_types:extint()) ->
+ integer().
+integer_gen(Size, inf, inf) ->
+ proper_arith:rand_int(Size);
+integer_gen(Size, inf, High) ->
+ High - proper_arith:rand_non_neg_int(Size);
+integer_gen(Size, Low, inf) ->
+ Low + proper_arith:rand_non_neg_int(Size);
+integer_gen(Size, Low, High) ->
+ proper_arith:smart_rand_int(Size, Low, High).
+
+%% @private
+-spec float_gen(size(), proper_types:extnum(), proper_types:extnum()) ->
+ float().
+float_gen(Size, inf, inf) ->
+ proper_arith:rand_float(Size);
+float_gen(Size, inf, High) ->
+ High - proper_arith:rand_non_neg_float(Size);
+float_gen(Size, Low, inf) ->
+ Low + proper_arith:rand_non_neg_float(Size);
+float_gen(_Size, Low, High) ->
+ proper_arith:rand_float(Low, High).
+
+%% @private
+-spec atom_gen(size()) -> proper_types:type().
+%% We make sure we never clash with internal atoms by checking that the first
+%% character is not '$'.
+atom_gen(Size) ->
+ ?LET(Str,
+ ?SUCHTHAT(X,
+ proper_types:resize(Size,
+ proper_types:list(proper_types:byte())),
+ X =:= [] orelse hd(X) =/= $$),
+ list_to_atom(Str)).
+
+%% @private
+-spec atom_rev(atom()) -> imm_instance().
+atom_rev(Atom) ->
+ {'$used', atom_to_list(Atom), Atom}.
+
+%% @private
+-spec binary_gen(size()) -> proper_types:type().
+binary_gen(Size) ->
+ ?LET(Bytes,
+ proper_types:resize(Size,
+ proper_types:list(proper_types:byte())),
+ list_to_binary(Bytes)).
+
+%% @private
+-spec binary_rev(binary()) -> imm_instance().
+binary_rev(Binary) ->
+ {'$used', binary_to_list(Binary), Binary}.
+
+%% @private
+-spec binary_len_gen(length()) -> proper_types:type().
+binary_len_gen(Len) ->
+ ?LET(Bytes,
+ proper_types:vector(Len, proper_types:byte()),
+ list_to_binary(Bytes)).
+
+%% @private
+-spec bitstring_gen(size()) -> proper_types:type().
+bitstring_gen(Size) ->
+ ?LET({BytesHead, NumBits, TailByte},
+ {proper_types:resize(Size,proper_types:binary()),
+ proper_types:range(0,7), proper_types:range(0,127)},
+ <<BytesHead/binary, TailByte:NumBits>>).
+
+%% @private
+-spec bitstring_rev(bitstring()) -> imm_instance().
+bitstring_rev(BitString) ->
+ List = bitstring_to_list(BitString),
+ {BytesList, BitsTail} = lists:splitwith(fun erlang:is_integer/1, List),
+ {NumBits, TailByte} = case BitsTail of
+ [] -> {0, 0};
+ [Bits] -> N = bit_size(Bits),
+ <<Byte:N>> = Bits,
+ {N, Byte}
+ end,
+ {'$used',
+ {{'$used',BytesList,list_to_binary(BytesList)}, NumBits, TailByte},
+ BitString}.
+
+%% @private
+-spec bitstring_len_gen(length()) -> proper_types:type().
+bitstring_len_gen(Len) ->
+ BytesLen = Len div 8,
+ BitsLen = Len rem 8,
+ ?LET({BytesHead, NumBits, TailByte},
+ {proper_types:binary(BytesLen), BitsLen,
+ proper_types:range(0, 1 bsl BitsLen - 1)},
+ <<BytesHead/binary, TailByte:NumBits>>).
+
+%% @private
+-spec list_gen(size(), proper_types:type()) -> [imm_instance()].
+list_gen(Size, ElemType) ->
+ Len = proper_arith:rand_int(0, Size),
+ vector_gen(Len, ElemType).
+
+%% @private
+-spec distlist_gen(size(), sized_generator(), boolean()) -> [imm_instance()].
+distlist_gen(RawSize, Gen, NonEmpty) ->
+ Len = case NonEmpty of
+ true -> proper_arith:rand_int(1, erlang:max(1,RawSize));
+ false -> proper_arith:rand_int(0, RawSize)
+ end,
+ Size = case Len of
+ 1 -> RawSize - 1;
+ _ -> RawSize
+ end,
+ %% TODO: this produces a lot of types: maybe a simple 'div' is sufficient?
+ Sizes = proper_arith:distribute(Size, Len),
+ InnerTypes = [Gen(S) || S <- Sizes],
+ fixed_list_gen(InnerTypes).
+
+%% @private
+-spec vector_gen(length(), proper_types:type()) -> [imm_instance()].
+vector_gen(Len, ElemType) ->
+ vector_gen_tr(Len, ElemType, []).
+
+-spec vector_gen_tr(length(), proper_types:type(), [imm_instance()]) ->
+ [imm_instance()].
+vector_gen_tr(0, _ElemType, AccList) ->
+ AccList;
+vector_gen_tr(Left, ElemType, AccList) ->
+ vector_gen_tr(Left - 1, ElemType, [generate(ElemType) | AccList]).
+
+%% @private
+-spec union_gen([proper_types:type(),...]) -> imm_instance().
+union_gen(Choices) ->
+ {_Choice,Type} = proper_arith:rand_choose(Choices),
+ generate(Type).
+
+%% @private
+-spec weighted_union_gen([{frequency(),proper_types:type()},...]) ->
+ imm_instance().
+weighted_union_gen(FreqChoices) ->
+ {_Choice,Type} = proper_arith:freq_choose(FreqChoices),
+ generate(Type).
+
+%% @private
+-spec safe_union_gen([proper_types:type(),...]) -> imm_instance().
+safe_union_gen(Choices) ->
+ {Choice,Type} = proper_arith:rand_choose(Choices),
+ try generate(Type)
+ catch
+ error:_ ->
+ safe_union_gen(proper_arith:list_remove(Choice, Choices))
+ end.
+
+%% @private
+-spec safe_weighted_union_gen([{frequency(),proper_types:type()},...]) ->
+ imm_instance().
+safe_weighted_union_gen(FreqChoices) ->
+ {Choice,Type} = proper_arith:freq_choose(FreqChoices),
+ try generate(Type)
+ catch
+ error:_ ->
+ safe_weighted_union_gen(proper_arith:list_remove(Choice,
+ FreqChoices))
+ end.
+
+%% @private
+-spec tuple_gen([proper_types:type()]) -> tuple().
+tuple_gen(Fields) ->
+ list_to_tuple(fixed_list_gen(Fields)).
+
+%% @private
+-spec loose_tuple_gen(size(), proper_types:type()) -> proper_types:type().
+loose_tuple_gen(Size, ElemType) ->
+ ?LET(L,
+ proper_types:resize(Size, proper_types:list(ElemType)),
+ list_to_tuple(L)).
+
+%% @private
+-spec loose_tuple_rev(tuple(), proper_types:type()) -> imm_instance().
+loose_tuple_rev(Tuple, ElemType) ->
+ CleanList = tuple_to_list(Tuple),
+ List = case proper_types:find_prop(reverse_gen, ElemType) of
+ {ok,{typed, ReverseGen}} ->
+ [ReverseGen(ElemType,X) || X <- CleanList];
+ {ok,ReverseGen} -> [ReverseGen(X) || X <- CleanList];
+ error -> CleanList
+ end,
+ {'$used', List, Tuple}.
+
+%% @private
+-spec exactly_gen(T) -> T.
+exactly_gen(X) ->
+ X.
+
+%% @private
+-spec fixed_list_gen([proper_types:type()]) -> imm_instance()
+ ; ({[proper_types:type()],proper_types:type()}) ->
+ maybe_improper_list(imm_instance(), imm_instance() | []).
+fixed_list_gen({ProperHead,ImproperTail}) ->
+ [generate(F) || F <- ProperHead] ++ generate(ImproperTail);
+fixed_list_gen(ProperFields) ->
+ [generate(F) || F <- ProperFields].
+
+%% @private
+-spec function_gen(arity(), proper_types:type()) -> function().
+function_gen(Arity, RetType) ->
+ FunSeed = {proper_arith:rand_int(0, ?SEED_RANGE - 1),
+ proper_arith:rand_int(0, ?SEED_RANGE - 1)},
+ create_fun(Arity, RetType, FunSeed).
+
+%% @private
+-spec any_gen(size()) -> imm_instance().
+any_gen(Size) ->
+ case get('$any_type') of
+ undefined -> real_any_gen(Size);
+ {type,AnyType} -> generate(proper_types:resize(Size, AnyType))
+ end.
+
+-spec real_any_gen(size()) -> imm_instance().
+real_any_gen(0) ->
+ SimpleTypes = [proper_types:integer(), proper_types:float(),
+ proper_types:atom()],
+ union_gen(SimpleTypes);
+real_any_gen(Size) ->
+ FreqChoices = [{?ANY_SIMPLE_PROB,simple}, {?ANY_BINARY_PROB,binary},
+ {?ANY_EXPAND_PROB,expand}],
+ case proper_arith:freq_choose(FreqChoices) of
+ {_,simple} ->
+ real_any_gen(0);
+ {_,binary} ->
+ generate(proper_types:resize(Size, proper_types:bitstring()));
+ {_,expand} ->
+ %% TODO: statistics of produced terms?
+ NumElems = proper_arith:rand_int(0, Size - 1),
+ ElemSizes = proper_arith:distribute(Size - 1, NumElems),
+ ElemTypes = [?LAZY(real_any_gen(S)) || S <- ElemSizes],
+ case proper_arith:rand_int(1,2) of
+ 1 -> fixed_list_gen(ElemTypes);
+ 2 -> tuple_gen(ElemTypes)
+ end
+ end.
+
+%% @private
+-spec native_type_gen(mod_name(), string()) -> proper_types:type().
+native_type_gen(Mod, TypeStr) ->
+ case proper_typeserver:translate_type({Mod,TypeStr}) of
+ {ok,Type} -> Type;
+ {error,Reason} -> throw({'$typeserver',Reason})
+ end.
+
+
+%%------------------------------------------------------------------------------
+%% Function-generation functions
+%%------------------------------------------------------------------------------
+
+-spec create_fun(arity(), proper_types:type(), fun_seed()) -> function().
+create_fun(_Arity, _RetType, _FunSeed) ->
+ fun() -> throw('$arity_limit') end.
+
+%% @private
+-spec get_ret_type(function()) -> proper_types:type().
+get_ret_type(Fun) ->
+ {arity,Arity} = erlang:fun_info(Fun, arity),
+ put('$get_ret_type', true),
+ RetType = apply(Fun, lists:duplicate(Arity,dummy)),
+ erase('$get_ret_type'),
+ RetType.
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_internal.hrl b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_internal.hrl
new file mode 100644
index 0000000000..89e6b34296
--- /dev/null
+++ b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_internal.hrl
@@ -0,0 +1,98 @@
+%%% Copyright 2010-2013 Manolis Papadakis <[email protected]>,
+%%% Eirini Arvaniti <[email protected]>
+%%% and Kostis Sagonas <[email protected]>
+%%%
+%%% This file is part of PropEr.
+%%%
+%%% PropEr is free software: you can redistribute it and/or modify
+%%% it under the terms of the GNU General Public License as published by
+%%% the Free Software Foundation, either version 3 of the License, or
+%%% (at your option) any later version.
+%%%
+%%% PropEr is distributed in the hope that it will be useful,
+%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%%% GNU General Public License for more details.
+%%%
+%%% You should have received a copy of the GNU General Public License
+%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
+
+%%% @copyright 2010-2016 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
+%%% @version {@version}
+%%% @author Manolis Papadakis
+%%% @doc Internal header file: This header is included in all PropEr source
+%%% files.
+
+-include("compile_flags.hrl").
+-include("proper_common.hrl").
+
+
+%%------------------------------------------------------------------------------
+%% Activate strip_types parse transform
+%%------------------------------------------------------------------------------
+
+-ifdef(NO_TYPES).
+-compile({parse_transform, strip_types}).
+-endif.
+
+%%------------------------------------------------------------------------------
+%% Random generator selection
+%%------------------------------------------------------------------------------
+
+-ifdef(USE_SFMT).
+-define(RANDOM_MOD, sfmt).
+-define(SEED_NAME, sfmt_seed).
+-else.
+-define(RANDOM_MOD, random).
+-define(SEED_NAME, random_seed).
+-endif.
+
+%%------------------------------------------------------------------------------
+%% Macros
+%%------------------------------------------------------------------------------
+
+-define(PROPERTY_PREFIX, "prop_").
+
+
+%%------------------------------------------------------------------------------
+%% Constants
+%%------------------------------------------------------------------------------
+
+-define(SEED_RANGE, 4294967296).
+-define(MAX_ARITY, 20).
+-define(MAX_TRIES_FACTOR, 5).
+-define(ANY_SIMPLE_PROB, 3).
+-define(ANY_BINARY_PROB, 1).
+-define(ANY_EXPAND_PROB, 8).
+-define(SMALL_RANGE_THRESHOLD, 16#FFFF).
+
+
+%%------------------------------------------------------------------------------
+%% Common type aliases
+%%------------------------------------------------------------------------------
+
+%% TODO: Perhaps these should be moved inside modules.
+-type mod_name() :: atom().
+-type fun_name() :: atom().
+-type size() :: non_neg_integer().
+-type length() :: non_neg_integer().
+-type position() :: pos_integer().
+-type frequency() :: pos_integer().
+-type seed() :: {non_neg_integer(), non_neg_integer(), non_neg_integer()}.
+
+-type abs_form() :: erl_parse:abstract_form().
+-type abs_expr() :: erl_parse:abstract_expr().
+-type abs_clause() :: erl_parse:abstract_clause().
+
+%% TODO: Replace these with the appropriate types from stdlib.
+-ifdef(AT_LEAST_19).
+-type abs_type() :: erl_parse:abstract_type().
+-type abs_rec_field() :: term(). % erl_parse:af_field_decl().
+-else.
+-type abs_type() :: term().
+-type abs_rec_field() :: term().
+-endif.
+
+-type loose_tuple(T) :: {} | {T} | {T,T} | {T,T,T} | {T,T,T,T} | {T,T,T,T,T}
+ | {T,T,T,T,T,T} | {T,T,T,T,T,T,T} | {T,T,T,T,T,T,T,T}
+ | {T,T,T,T,T,T,T,T,T} | {T,T,T,T,T,T,T,T,T,T} | tuple().
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_types.erl b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_types.erl
new file mode 100644
index 0000000000..6b154b813b
--- /dev/null
+++ b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_types.erl
@@ -0,0 +1,1353 @@
+%%% Copyright 2010-2013 Manolis Papadakis <[email protected]>,
+%%% Eirini Arvaniti <[email protected]>
+%%% and Kostis Sagonas <[email protected]>
+%%%
+%%% This file is part of PropEr.
+%%%
+%%% PropEr is free software: you can redistribute it and/or modify
+%%% it under the terms of the GNU General Public License as published by
+%%% the Free Software Foundation, either version 3 of the License, or
+%%% (at your option) any later version.
+%%%
+%%% PropEr is distributed in the hope that it will be useful,
+%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%%% GNU General Public License for more details.
+%%%
+%%% You should have received a copy of the GNU General Public License
+%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
+
+%%% @copyright 2010-2013 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
+%%% @version {@version}
+%%% @author Manolis Papadakis
+
+%%% @doc Type manipulation functions and predefined types.
+%%%
+%%% == Basic types ==
+%%% This module defines all the basic types of the PropEr type system as
+%%% functions. See the <a href="#index">function index</a> for an overview.
+%%%
+%%% Types can be combined in tuples or lists to produce other types. Exact
+%%% values (such as exact numbers, atoms, binaries and strings) can be combined
+%%% with types inside such structures, like in this example of the type of a
+%%% tagged tuple: ``{'result', integer()}''.
+%%%
+%%% When including the PropEr header file, all
+%%% <a href="#index">API functions</a> of this module are automatically
+%%% imported, unless `PROPER_NO_IMPORTS' is defined.
+%%%
+%%% == Customized types ==
+%%% The following operators can be applied to basic types in order to produce
+%%% new ones:
+%%%
+%%% <dl>
+%%% <dt>`?LET(<Xs>, <Xs_type>, <In>)'</dt>
+%%% <dd>To produce an instance of this type, all appearances of the variables
+%%% in `<Xs>' are replaced inside `<In>' by their corresponding values in a
+%%% randomly generated instance of `<Xs_type>'. It's OK for the `<In>' part to
+%%% evaluate to a type - in that case, an instance of the inner type is
+%%% generated recursively.</dd>
+%%% <dt>`?SUCHTHAT(<X>, <Type>, <Condition>)'</dt>
+%%% <dd>This produces a specialization of `<Type>', which only includes those
+%%% members of `<Type>' that satisfy the constraint `<Condition>' - that is,
+%%% those members for which the function `fun(<X>) -> <Condition> end' returns
+%%% `true'. If the constraint is very strict - that is, only a small
+%%% percentage of instances of `<Type>' pass the test - it will take a lot of
+%%% tries for the instance generation subsystem to randomly produce a valid
+%%% instance. This will result in slower testing, and testing may even be
+%%% stopped short, in case the `constraint_tries' limit is reached (see the
+%%% "Options" section in the documentation of the {@link proper} module). If
+%%% this is the case, it would be more appropriate to generate valid instances
+%%% of the specialized type using the `?LET' macro. Also make sure that even
+%%% small instances can satisfy the constraint, since PropEr will only try
+%%% small instances at the start of testing. If this is not possible, you can
+%%% instruct PropEr to start at a larger size, by supplying a suitable value
+%%% for the `start_size' option (see the "Options" section in the
+%%% documentation of the {@link proper} module).</dd>
+%%% <dt>`?SUCHTHATMAYBE(<X>, <Type>, <Condition>)'</dt>
+%%% <dd>Equivalent to the `?SUCHTHAT' macro, but the constraint `<Condition>'
+%%% is considered non-strict: if the `constraint_tries' limit is reached, the
+%%% generator will just return an instance of `<Type>' instead of failing,
+%%% even if that instance doesn't satisfy the constraint.</dd>
+%%% <dt>`?SHRINK(<Generator>, <List_of_alt_gens>)'</dt>
+%%% <dd>This creates a type whose instances are generated by evaluating the
+%%% statement block `<Generator>' (this may evaluate to a type, which will
+%%% then be generated recursively). If an instance of such a type is to be
+%%% shrunk, the generators in `<List_of_alt_gens>' are first run to produce
+%%% hopefully simpler instances of the type. Thus, the generators in the
+%%% second argument should be simpler than the default. The simplest ones
+%%% should be at the front of the list, since those are the generators
+%%% preferred by the shrinking subsystem. Like the main `<Generator>', the
+%%% alternatives may also evaluate to a type, which is generated recursively.
+%%% </dd>
+%%% <dt>`?LETSHRINK(<List_of_variables>, <List_of_types>, <Generator>)'</dt>
+%%% <dd>This is created by combining a `?LET' and a `?SHRINK' macro. Instances
+%%% are generated by applying a randomly generated list of values inside
+%%% `<Generator>' (just like a `?LET', with the added constraint that the
+%%% variables and types must be provided in a list - alternatively,
+%%% `<List_of_types>' may be a list or vector type). When shrinking instances
+%%% of such a type, the sub-instances that were combined to produce it are
+%%% first tried in place of the failing instance.</dd>
+%%% <dt>`?LAZY(<Generator>)'</dt>
+%%% <dd>This construct returns a type whose only purpose is to delay the
+%%% evaluation of `<Generator>' (`<Generator>' can return a type, which will
+%%% be generated recursively). Using this, you can simulate the lazy
+%%% generation of instances:
+%%% ``` stream() -> ?LAZY(frequency([ {1,[]}, {3,[0|stream()]} ])). '''
+%%% The above type produces lists of zeroes with an average length of 3. Note
+%%% that, had we not enclosed the generator with a `?LAZY' macro, the
+%%% evaluation would continue indefinitely, due to the eager evaluation of
+%%% the Erlang language.</dd>
+%%% <dt>`non_empty(<List_or_binary_type>)'</dt>
+%%% <dd>See the documentation for {@link non_empty/1}.</dd>
+%%% <dt>`noshrink(<Type>)'</dt>
+%%% <dd>See the documentation for {@link noshrink/1}.</dd>
+%%% <dt>`default(<Default_value>, <Type>)'</dt>
+%%% <dd>See the documentation for {@link default/2}.</dd>
+%%% <dt>`with_parameter(<Parameter>, <Value>, <Type>)'</dt>
+%%% <dd>See the documentation for {@link with_parameter/3}.</dd>
+%%% <dt>`with_parameters(<Param_value_pairs>, <Type>)'</dt>
+%%% <dd>See the documentation for {@link with_parameters/2}.</dd>
+%%% </dl>
+%%%
+%%% == Size manipulation ==
+%%% The following operators are related to the `size' parameter, which controls
+%%% the maximum size of produced instances. The actual size of a produced
+%%% instance is chosen randomly, but can never exceed the value of the `size'
+%%% parameter at the moment of generation. A more accurate definition is the
+%%% following: the maximum instance of `size S' can never be smaller than the
+%%% maximum instance of `size S-1'. The actual size of an instance is measured
+%%% differently for each type: the actual size of a list is its length, while
+%%% the actual size of a tree may be the number of its internal nodes. Some
+%%% types, e.g. unions, have no notion of size, thus their generation is not
+%%% influenced by the value of `size'. The `size' parameter starts at 1 and
+%%% grows automatically during testing.
+%%%
+%%% <dl>
+%%% <dt>`?SIZED(<S>, <Generator>)'</dt>
+%%% <dd>Creates a new type, whose instances are produced by replacing all
+%%% appearances of the `<S>' parameter inside the statement block
+%%% `<Generator>' with the value of the `size' parameter. It's OK for the
+%%% `<Generator>' to return a type - in that case, an instance of the inner
+%%% type is generated recursively.</dd>
+%%% <dt>`resize(<New_size>, <Type>)'</dt>
+%%% <dd>See the documentation for {@link resize/2}.</dd>
+%%% </dl>
+
+-module(proper_types).
+-export([is_inst/2, is_inst/3]).
+
+-export([integer/2, float/2, atom/0, binary/0, binary/1, bitstring/0,
+ bitstring/1, list/1, vector/2, union/1, weighted_union/1, tuple/1,
+ loose_tuple/1, exactly/1, fixed_list/1, function/2, any/0,
+ shrink_list/1, safe_union/1, safe_weighted_union/1]).
+-export([integer/0, non_neg_integer/0, pos_integer/0, neg_integer/0, range/2,
+ float/0, non_neg_float/0, number/0, boolean/0, byte/0, char/0,
+ list/0, tuple/0, string/0, wunion/1, term/0, timeout/0, arity/0]).
+-export([int/0, nat/0, largeint/0, real/0, bool/0, choose/2, elements/1,
+ oneof/1, frequency/1, return/1, default/2, orderedlist/1, function0/1,
+ function1/1, function2/1, function3/1, function4/1,
+ weighted_default/2]).
+-export([resize/2, non_empty/1, noshrink/1]).
+
+-export([cook_outer/1, is_type/1, equal_types/2, is_raw_type/1, to_binary/1,
+ from_binary/1, get_prop/2, find_prop/2, safe_is_instance/2,
+ is_instance/2, unwrap/1, weakly/1, strongly/1, satisfies_all/2,
+ new_type/2, subtype/2]).
+-export([lazy/1, sized/1, bind/3, shrinkwith/2, add_constraint/3,
+ native_type/2, distlist/3, with_parameter/3, with_parameters/2,
+ parameter/1, parameter/2]).
+-export([le/2]).
+
+-export_type([type/0, raw_type/0, extint/0, extnum/0]).
+
+-include("proper_internal.hrl").
+
+
+%%------------------------------------------------------------------------------
+%% Comparison with erl_types
+%%------------------------------------------------------------------------------
+
+%% Missing types
+%% -------------------
+%% will do:
+%% records, maybe_improper_list(T,S), nonempty_improper_list(T,S)
+%% maybe_improper_list(), maybe_improper_list(T), iolist, iodata
+%% don't need:
+%% nonempty_{list,string,maybe_improper_list}
+%% won't do:
+%% pid, port, ref, identifier, none, no_return, module, mfa, node
+%% array, dict, digraph, set, gb_tree, gb_set, queue, tid
+
+%% Missing type information
+%% ------------------------
+%% bin types:
+%% other unit sizes? what about size info?
+%% functions:
+%% generally some fun, unspecified number of arguments but specified
+%% return type
+%% any:
+%% doesn't cover functions and improper lists
+
+
+%%------------------------------------------------------------------------------
+%% Type declaration macros
+%%------------------------------------------------------------------------------
+
+-define(BASIC(PropList), new_type(PropList,basic)).
+-define(WRAPPER(PropList), new_type(PropList,wrapper)).
+-define(CONSTRUCTED(PropList), new_type(PropList,constructed)).
+-define(CONTAINER(PropList), new_type(PropList,container)).
+-define(SUBTYPE(Type,PropList), subtype(PropList,Type)).
+
+
+%%------------------------------------------------------------------------------
+%% Types
+%%------------------------------------------------------------------------------
+
+-type type_kind() :: 'basic' | 'wrapper' | 'constructed' | 'container' | atom().
+-type instance_test() :: fun((proper_gen:imm_instance()) -> boolean())
+ | {'typed',
+ fun((proper_types:type(),
+ proper_gen:imm_instance()) -> boolean())}.
+-type index() :: pos_integer().
+%% @alias
+-type value() :: term().
+%% @private_type
+%% @alias
+-type extint() :: integer() | 'inf'.
+%% @private_type
+%% @alias
+-type extnum() :: number() | 'inf'.
+-type constraint_fun() :: fun((proper_gen:instance()) -> boolean()).
+
+-opaque type() :: {'$type', [type_prop()]}.
+%% A type of the PropEr type system
+%% @type raw_type(). You can consider this as an equivalent of {@type type()}.
+-type raw_type() :: type() | [raw_type()] | loose_tuple(raw_type()) | term().
+-type type_prop_name() :: 'kind' | 'generator' | 'reverse_gen' | 'parts_type'
+ | 'combine' | 'alt_gens' | 'shrink_to_parts'
+ | 'size_transform' | 'is_instance' | 'shrinkers'
+ | 'noshrink' | 'internal_type' | 'internal_types'
+ | 'get_length' | 'split' | 'join' | 'get_indices'
+ | 'remove' | 'retrieve' | 'update' | 'constraints'
+ | 'parameters' | 'env' | 'subenv'.
+
+-type type_prop_value() :: term().
+-type type_prop() ::
+ {'kind', type_kind()}
+ | {'generator', proper_gen:generator()}
+ | {'reverse_gen', proper_gen:reverse_gen()}
+ | {'parts_type', type()}
+ | {'combine', proper_gen:combine_fun()}
+ | {'alt_gens', proper_gen:alt_gens()}
+ | {'shrink_to_parts', boolean()}
+ | {'size_transform', fun((size()) -> size())}
+ | {'is_instance', instance_test()}
+ | {'shrinkers', [proper_shrink:shrinker()]}
+ | {'noshrink', boolean()}
+ | {'internal_type', raw_type()}
+ | {'internal_types', tuple() | maybe_improper_list(type(),type() | [])}
+ %% The items returned by 'remove' must be of this type.
+ | {'get_length', fun((proper_gen:imm_instance()) -> length())}
+ %% If this is a container type, this should return the number of elements
+ %% it contains.
+ | {'split', fun((proper_gen:imm_instance()) -> [proper_gen:imm_instance()])
+ | fun((length(),proper_gen:imm_instance()) ->
+ {proper_gen:imm_instance(),proper_gen:imm_instance()})}
+ %% If present, the appropriate form depends on whether get_length is
+ %% defined: if get_length is undefined, this must be in the one-argument
+ %% form (e.g. a tree should be split into its subtrees), else it must be
+ %% in the two-argument form (e.g. a list should be split in two at the
+ %% index provided).
+ | {'join', fun((proper_gen:imm_instance(),proper_gen:imm_instance()) ->
+ proper_gen:imm_instance())}
+ | {'get_indices', fun((proper_types:type(),
+ proper_gen:imm_instance()) -> [index()])}
+ %% If this is a container type, this should return a list of indices we
+ %% can use to remove or insert elements from the given instance.
+ | {'remove', fun((index(),proper_gen:imm_instance()) ->
+ proper_gen:imm_instance())}
+ | {'retrieve', fun((index(), proper_gen:imm_instance() | tuple()
+ | maybe_improper_list(type(),type() | [])) ->
+ value() | type())}
+ | {'update', fun((index(),value(),proper_gen:imm_instance()) ->
+ proper_gen:imm_instance())}
+ | {'constraints', [{constraint_fun(), boolean()}]}
+ %% A list of constraints on instances of this type: each constraint is a
+ %% tuple of a fun that must return 'true' for each valid instance and a
+ %% boolean field that specifies whether the condition is strict.
+ | {'parameters', [{atom(),value()}]}
+ | {'env', term()}
+ | {'subenv', term()}.
+
+
+%%------------------------------------------------------------------------------
+%% Type manipulation functions
+%%------------------------------------------------------------------------------
+
+%% TODO: We shouldn't need the fully qualified type name in the range of these
+%% functions.
+
+%% @private
+%% TODO: just cook/1 ?
+-spec cook_outer(raw_type()) -> proper_types:type().
+cook_outer(Type = {'$type',_Props}) ->
+ Type;
+cook_outer(RawType) ->
+ if
+ is_tuple(RawType) -> tuple(tuple_to_list(RawType));
+ %% CAUTION: this must handle improper lists
+ is_list(RawType) -> fixed_list(RawType);
+ %% default case (covers integers, floats, atoms, binaries, ...):
+ true -> exactly(RawType)
+ end.
+
+%% @private
+-spec is_type(term()) -> boolean().
+is_type({'$type',_Props}) ->
+ true;
+is_type(_) ->
+ false.
+
+%% @private
+-spec equal_types(proper_types:type(), proper_types:type()) -> boolean().
+equal_types(SameType, SameType) ->
+ true;
+equal_types(_, _) ->
+ false.
+
+%% @private
+-spec is_raw_type(term()) -> boolean().
+is_raw_type({'$type',_TypeProps}) ->
+ true;
+is_raw_type(X) ->
+ if
+ is_tuple(X) -> is_raw_type_list(tuple_to_list(X));
+ is_list(X) -> is_raw_type_list(X);
+ true -> false
+ end.
+
+-spec is_raw_type_list(maybe_improper_list()) -> boolean().
+%% CAUTION: this must handle improper lists
+is_raw_type_list(List) ->
+ proper_arith:safe_any(fun is_raw_type/1, List).
+
+%% @private
+-spec to_binary(proper_types:type()) -> binary().
+to_binary(Type) ->
+ term_to_binary(Type).
+
+%% @private
+-ifdef(AT_LEAST_17).
+-spec from_binary(binary()) -> proper_types:type().
+-endif.
+from_binary(Binary) ->
+ binary_to_term(Binary).
+
+-spec type_from_list([type_prop()]) -> proper_types:type().
+type_from_list(KeyValueList) ->
+ {'$type',KeyValueList}.
+
+-spec add_prop(type_prop_name(), type_prop_value(), proper_types:type()) ->
+ proper_types:type().
+add_prop(PropName, Value, {'$type',Props}) ->
+ {'$type',lists:keystore(PropName, 1, Props, {PropName, Value})}.
+
+-spec add_props([type_prop()], proper_types:type()) -> proper_types:type().
+add_props(PropList, {'$type',OldProps}) ->
+ {'$type', lists:foldl(fun({N,_}=NV,Acc) ->
+ lists:keystore(N, 1, Acc, NV)
+ end, OldProps, PropList)}.
+
+-spec append_to_prop(type_prop_name(), type_prop_value(),
+ proper_types:type()) -> proper_types:type().
+append_to_prop(PropName, Value, {'$type',Props}) ->
+ Val = case lists:keyfind(PropName, 1, Props) of
+ {PropName, V} ->
+ V;
+ _ ->
+ []
+ end,
+ {'$type', lists:keystore(PropName, 1, Props,
+ {PropName, lists:reverse([Value|Val])})}.
+
+-spec append_list_to_prop(type_prop_name(), [type_prop_value()],
+ proper_types:type()) -> proper_types:type().
+append_list_to_prop(PropName, List, {'$type',Props}) ->
+ {PropName, Val} = lists:keyfind(PropName, 1, Props),
+ {'$type', lists:keystore(PropName, 1, Props, {PropName, Val++List})}.
+
+%% @private
+-spec get_prop(type_prop_name(), proper_types:type()) -> type_prop_value().
+get_prop(PropName, {'$type',Props}) ->
+ {_PropName, Val} = lists:keyfind(PropName, 1, Props),
+ Val.
+
+%% @private
+-spec find_prop(type_prop_name(), proper_types:type()) ->
+ {'ok',type_prop_value()} | 'error'.
+find_prop(PropName, {'$type',Props}) ->
+ case lists:keyfind(PropName, 1, Props) of
+ {PropName, Value} ->
+ {ok, Value};
+ _ ->
+ error
+ end.
+
+%% @private
+-spec new_type([type_prop()], type_kind()) -> proper_types:type().
+new_type(PropList, Kind) ->
+ Type = type_from_list(PropList),
+ add_prop(kind, Kind, Type).
+
+%% @private
+-spec subtype([type_prop()], proper_types:type()) -> proper_types:type().
+%% TODO: should the 'is_instance' function etc. be reset for subtypes?
+subtype(PropList, Type) ->
+ add_props(PropList, Type).
+
+%% @private
+-spec is_inst(proper_gen:instance(), raw_type()) ->
+ boolean() | {'error',{'typeserver',term()}}.
+is_inst(Instance, RawType) ->
+ is_inst(Instance, RawType, 10).
+
+%% @private
+-spec is_inst(proper_gen:instance(), raw_type(), size()) ->
+ boolean() | {'error',{'typeserver',term()}}.
+is_inst(Instance, RawType, Size) ->
+ proper:global_state_init_size(Size),
+ Result = safe_is_instance(Instance, RawType),
+ proper:global_state_erase(),
+ Result.
+
+%% @private
+-spec safe_is_instance(proper_gen:imm_instance(), raw_type()) ->
+ boolean() | {'error',{'typeserver',term()}}.
+safe_is_instance(ImmInstance, RawType) ->
+ try is_instance(ImmInstance, RawType) catch
+ throw:{'$typeserver',SubReason} -> {error, {typeserver,SubReason}}
+ end.
+
+%% @private
+-spec is_instance(proper_gen:imm_instance(), raw_type()) -> boolean().
+%% TODO: If the second argument is not a type, let it pass (don't even check for
+%% term equality?) - if it's a raw type, don't cook it, instead recurse
+%% into it.
+is_instance(ImmInstance, RawType) ->
+ CleanInstance = proper_gen:clean_instance(ImmInstance),
+ Type = cook_outer(RawType),
+ (case get_prop(kind, Type) of
+ wrapper -> wrapper_test(ImmInstance, Type);
+ constructed -> constructed_test(ImmInstance, Type);
+ _ -> false
+ end
+ orelse
+ case find_prop(is_instance, Type) of
+ {ok,{typed, IsInstance}} -> IsInstance(Type, ImmInstance);
+ {ok,IsInstance} -> IsInstance(ImmInstance);
+ error -> false
+ end)
+ andalso weakly(satisfies_all(CleanInstance, Type)).
+
+-spec wrapper_test(proper_gen:imm_instance(), proper_types:type()) -> boolean().
+wrapper_test(ImmInstance, Type) ->
+ %% TODO: check if it's actually a raw type that's returned?
+ lists:any(fun(T) -> is_instance(ImmInstance, T) end, unwrap(Type)).
+
+%% @private
+-ifdef(AT_LEAST_17).
+-spec unwrap(proper_types:type()) -> [proper_types:type(),...].
+-endif.
+%% TODO: check if it's actually a raw type that's returned?
+unwrap(Type) ->
+ RawInnerTypes = proper_gen:alt_gens(Type) ++ [proper_gen:normal_gen(Type)],
+ [cook_outer(T) || T <- RawInnerTypes].
+
+-spec constructed_test(proper_gen:imm_instance(), proper_types:type()) ->
+ boolean().
+constructed_test({'$used',ImmParts,ImmInstance}, Type) ->
+ PartsType = get_prop(parts_type, Type),
+ Combine = get_prop(combine, Type),
+ is_instance(ImmParts, PartsType) andalso
+ begin
+ %% TODO: check if it's actually a raw type that's returned?
+ %% TODO: move construction code to proper_gen
+ %% TODO: non-type => should we check for strict term equality?
+ RawInnerType = Combine(proper_gen:clean_instance(ImmParts)),
+ is_instance(ImmInstance, RawInnerType)
+ end;
+constructed_test({'$to_part',ImmInstance}, Type) ->
+ PartsType = get_prop(parts_type, Type),
+ get_prop(shrink_to_parts, Type) =:= true andalso
+ %% TODO: we reject non-container types
+ get_prop(kind, PartsType) =:= container andalso
+ case {find_prop(internal_type,PartsType),
+ find_prop(internal_types,PartsType)} of
+ {{ok,EachPartType},error} ->
+ %% The parts are in a list or a vector.
+ is_instance(ImmInstance, EachPartType);
+ {error,{ok,PartTypesList}} ->
+ %% The parts are in a fixed list.
+ %% TODO: It should always be a proper list.
+ lists:any(fun(T) -> is_instance(ImmInstance,T) end, PartTypesList)
+ end;
+constructed_test(_CleanInstance, _Type) ->
+ %% TODO: can we do anything better?
+ false.
+
+%% @private
+-spec weakly({boolean(),boolean()}) -> boolean().
+weakly({B1,_B2}) -> B1.
+
+%% @private
+-spec strongly({boolean(),boolean()}) -> boolean().
+strongly({_B1,B2}) -> B2.
+
+-spec satisfies(proper_gen:instance(), {constraint_fun(),boolean()})
+ -> {boolean(),boolean()}.
+satisfies(Instance, {Test,false}) ->
+ {true,Test(Instance)};
+satisfies(Instance, {Test,true}) ->
+ Result = Test(Instance),
+ {Result,Result}.
+
+%% @private
+-spec satisfies_all(proper_gen:instance(), proper_types:type()) ->
+ {boolean(),boolean()}.
+satisfies_all(Instance, Type) ->
+ case find_prop(constraints, Type) of
+ {ok, Constraints} ->
+ L = [satisfies(Instance, C) || C <- Constraints],
+ {L1,L2} = lists:unzip(L),
+ {lists:all(fun(B) -> B end, L1), lists:all(fun(B) -> B end, L2)};
+ error ->
+ {true,true}
+ end.
+
+
+%%------------------------------------------------------------------------------
+%% Type definition functions
+%%------------------------------------------------------------------------------
+
+%% @private
+-spec lazy(proper_gen:nosize_generator()) -> proper_types:type().
+lazy(Gen) ->
+ ?WRAPPER([
+ {generator, Gen}
+ ]).
+
+%% @private
+-spec sized(proper_gen:sized_generator()) -> proper_types:type().
+sized(Gen) ->
+ ?WRAPPER([
+ {generator, Gen}
+ ]).
+
+%% @private
+-spec bind(raw_type(), proper_gen:combine_fun(), boolean()) ->
+ proper_types:type().
+bind(RawPartsType, Combine, ShrinkToParts) ->
+ PartsType = cook_outer(RawPartsType),
+ ?CONSTRUCTED([
+ {parts_type, PartsType},
+ {combine, Combine},
+ {shrink_to_parts, ShrinkToParts}
+ ]).
+
+%% @private
+-spec shrinkwith(proper_gen:nosize_generator(), proper_gen:alt_gens()) ->
+ proper_types:type().
+shrinkwith(Gen, DelaydAltGens) ->
+ ?WRAPPER([
+ {generator, Gen},
+ {alt_gens, DelaydAltGens}
+ ]).
+
+%% @private
+-spec add_constraint(raw_type(), constraint_fun(), boolean()) ->
+ proper_types:type().
+add_constraint(RawType, Condition, IsStrict) ->
+ Type = cook_outer(RawType),
+ append_to_prop(constraints, {Condition,IsStrict}, Type).
+
+%% @private
+-spec native_type(mod_name(), string()) -> proper_types:type().
+native_type(Mod, TypeStr) ->
+ ?WRAPPER([
+ {generator, fun() -> proper_gen:native_type_gen(Mod,TypeStr) end}
+ ]).
+
+
+%%------------------------------------------------------------------------------
+%% Basic types
+%%------------------------------------------------------------------------------
+
+%% @doc All integers between `Low' and `High', bounds included.
+%% `Low' and `High' must be Erlang expressions that evaluate to integers, with
+%% `Low =< High'. Additionally, `Low' and `High' may have the value `inf', in
+%% which case they represent minus infinity and plus infinity respectively.
+%% Instances shrink towards 0 if `Low =< 0 =< High', or towards the bound with
+%% the smallest absolute value otherwise.
+-spec integer(extint(), extint()) -> proper_types:type().
+integer(Low, High) ->
+ ?BASIC([
+ {env, {Low, High}},
+ {generator, {typed, fun integer_gen/2}},
+ {is_instance, {typed, fun integer_is_instance/2}},
+ {shrinkers, [fun number_shrinker/3]}
+ ]).
+
+integer_gen(Type, Size) ->
+ {Low, High} = get_prop(env, Type),
+ proper_gen:integer_gen(Size, Low, High).
+
+integer_is_instance(Type, X) ->
+ {Low, High} = get_prop(env, Type),
+ is_integer(X) andalso le(Low, X) andalso le(X, High).
+
+number_shrinker(X, Type, S) ->
+ {Low, High} = get_prop(env, Type),
+ proper_shrink:number_shrinker(X, Low, High, S).
+
+%% @doc All floats between `Low' and `High', bounds included.
+%% `Low' and `High' must be Erlang expressions that evaluate to floats, with
+%% `Low =< High'. Additionally, `Low' and `High' may have the value `inf', in
+%% which case they represent minus infinity and plus infinity respectively.
+%% Instances shrink towards 0.0 if `Low =< 0.0 =< High', or towards the bound
+%% with the smallest absolute value otherwise.
+-spec float(extnum(), extnum()) -> proper_types:type().
+float(Low, High) ->
+ ?BASIC([
+ {env, {Low, High}},
+ {generator, {typed, fun float_gen/2}},
+ {is_instance, {typed, fun float_is_instance/2}},
+ {shrinkers, [fun number_shrinker/3]}
+ ]).
+
+float_gen(Type, Size) ->
+ {Low, High} = get_prop(env, Type),
+ proper_gen:float_gen(Size, Low, High).
+
+float_is_instance(Type, X) ->
+ {Low, High} = get_prop(env, Type),
+ is_float(X) andalso le(Low, X) andalso le(X, High).
+
+%% @private
+-spec le(extnum(), extnum()) -> boolean().
+le(inf, _B) -> true;
+le(_A, inf) -> true;
+le(A, B) -> A =< B.
+
+%% @doc All atoms. All atoms used internally by PropEr start with a '`$'', so
+%% such atoms will never be produced as instances of this type. You should also
+%% refrain from using such atoms in your code, to avoid a potential clash.
+%% Instances shrink towards the empty atom, ''.
+-spec atom() -> proper_types:type().
+atom() ->
+ ?WRAPPER([
+ {generator, fun proper_gen:atom_gen/1},
+ {reverse_gen, fun proper_gen:atom_rev/1},
+ {size_transform, fun(Size) -> erlang:min(Size,255) end},
+ {is_instance, fun atom_is_instance/1}
+ ]).
+
+atom_is_instance(X) ->
+ is_atom(X)
+ %% We return false for atoms starting with '$', since these are
+ %% atoms used internally and never produced by the atom generator.
+ andalso (X =:= '' orelse hd(atom_to_list(X)) =/= $$).
+
+%% @doc All binaries. Instances shrink towards the empty binary, `<<>>'.
+-spec binary() -> proper_types:type().
+binary() ->
+ ?WRAPPER([
+ {generator, fun proper_gen:binary_gen/1},
+ {reverse_gen, fun proper_gen:binary_rev/1},
+ {is_instance, fun erlang:is_binary/1}
+ ]).
+
+%% @doc All binaries with a byte size of `Len'.
+%% `Len' must be an Erlang expression that evaluates to a non-negative integer.
+%% Instances shrink towards binaries of zeroes.
+-spec binary(length()) -> proper_types:type().
+binary(Len) ->
+ ?WRAPPER([
+ {env, Len},
+ {generator, {typed, fun binary_len_gen/1}},
+ {reverse_gen, fun proper_gen:binary_rev/1},
+ {is_instance, {typed, fun binary_len_is_instance/2}}
+ ]).
+
+binary_len_gen(Type) ->
+ Len = get_prop(env, Type),
+ proper_gen:binary_len_gen(Len).
+
+binary_len_is_instance(Type, X) ->
+ Len = get_prop(env, Type),
+ is_binary(X) andalso byte_size(X) =:= Len.
+
+%% @doc All bitstrings. Instances shrink towards the empty bitstring, `<<>>'.
+-spec bitstring() -> proper_types:type().
+bitstring() ->
+ ?WRAPPER([
+ {generator, fun proper_gen:bitstring_gen/1},
+ {reverse_gen, fun proper_gen:bitstring_rev/1},
+ {is_instance, fun erlang:is_bitstring/1}
+ ]).
+
+%% @doc All bitstrings with a bit size of `Len'.
+%% `Len' must be an Erlang expression that evaluates to a non-negative integer.
+%% Instances shrink towards bitstrings of zeroes
+-spec bitstring(length()) -> proper_types:type().
+bitstring(Len) ->
+ ?WRAPPER([
+ {env, Len},
+ {generator, {typed, fun bitstring_len_gen/1}},
+ {reverse_gen, fun proper_gen:bitstring_rev/1},
+ {is_instance, {typed, fun bitstring_len_is_instance/2}}
+ ]).
+
+bitstring_len_gen(Type) ->
+ Len = get_prop(env, Type),
+ proper_gen:bitstring_len_gen(Len).
+
+bitstring_len_is_instance(Type, X) ->
+ Len = get_prop(env, Type),
+ is_bitstring(X) andalso bit_size(X) =:= Len.
+
+%% @doc All lists containing elements of type `ElemType'.
+%% Instances shrink towards the empty list, `[]'.
+-spec list(ElemType::raw_type()) -> proper_types:type().
+% TODO: subtyping would be useful here (list, vector, fixed_list)
+list(RawElemType) ->
+ ElemType = cook_outer(RawElemType),
+ ?CONTAINER([
+ {generator, {typed, fun list_gen/2}},
+ {is_instance, {typed, fun list_is_instance/2}},
+ {internal_type, ElemType},
+ {get_length, fun erlang:length/1},
+ {split, fun lists:split/2},
+ {join, fun lists:append/2},
+ {get_indices, fun list_get_indices/2},
+ {remove, fun proper_arith:list_remove/2},
+ {retrieve, fun lists:nth/2},
+ {update, fun proper_arith:list_update/3}
+ ]).
+
+list_gen(Type, Size) ->
+ ElemType = get_prop(internal_type, Type),
+ proper_gen:list_gen(Size, ElemType).
+
+list_is_instance(Type, X) ->
+ ElemType = get_prop(internal_type, Type),
+ list_test(X, ElemType).
+
+%% @doc A type that generates exactly the list `List'. Instances shrink towards
+%% shorter sublists of the original list.
+-spec shrink_list([term()]) -> proper_types:type().
+shrink_list(List) ->
+ ?CONTAINER([
+ {env, List},
+ {generator, {typed, fun shrink_list_gen/1}},
+ {is_instance, {typed, fun shrink_list_is_instance/2}},
+ {get_length, fun erlang:length/1},
+ {split, fun lists:split/2},
+ {join, fun lists:append/2},
+ {get_indices, fun list_get_indices/2},
+ {remove, fun proper_arith:list_remove/2}
+ ]).
+
+shrink_list_gen(Type) ->
+ get_prop(env, Type).
+
+shrink_list_is_instance(Type, X) ->
+ List = get_prop(env, Type),
+ is_sublist(X, List).
+
+-spec is_sublist([term()], [term()]) -> boolean().
+is_sublist([], _) -> true;
+is_sublist(_, []) -> false;
+is_sublist([H|T1], [H|T2]) -> is_sublist(T1, T2);
+is_sublist(Slice, [_|T2]) -> is_sublist(Slice, T2).
+
+-spec list_test(proper_gen:imm_instance(), proper_types:type()) -> boolean().
+list_test(X, ElemType) ->
+ is_list(X) andalso lists:all(fun(E) -> is_instance(E, ElemType) end, X).
+
+%% @private
+-spec list_get_indices(proper_gen:generator(), list()) -> [position()].
+list_get_indices(_, List) ->
+ lists:seq(1, length(List)).
+
+%% @private
+%% This assumes that:
+%% - instances of size S are always valid instances of size >S
+%% - any recursive calls inside Gen are lazy
+-spec distlist(size(), proper_gen:sized_generator(), boolean()) ->
+ proper_types:type().
+distlist(Size, Gen, NonEmpty) ->
+ ParentType = case NonEmpty of
+ true -> non_empty(list(Gen(Size)));
+ false -> list(Gen(Size))
+ end,
+ ?SUBTYPE(ParentType, [
+ {subenv, {Size, Gen, NonEmpty}},
+ {generator, {typed, fun distlist_gen/1}}
+ ]).
+
+distlist_gen(Type) ->
+ {Size, Gen, NonEmpty} = get_prop(subenv, Type),
+ proper_gen:distlist_gen(Size, Gen, NonEmpty).
+
+%% @doc All lists of length `Len' containing elements of type `ElemType'.
+%% `Len' must be an Erlang expression that evaluates to a non-negative integer.
+-spec vector(length(), ElemType::raw_type()) -> proper_types:type().
+vector(Len, RawElemType) ->
+ ElemType = cook_outer(RawElemType),
+ ?CONTAINER([
+ {env, Len},
+ {generator, {typed, fun vector_gen/1}},
+ {is_instance, {typed, fun vector_is_instance/2}},
+ {internal_type, ElemType},
+ {get_indices, fun vector_get_indices/2},
+ {retrieve, fun lists:nth/2},
+ {update, fun proper_arith:list_update/3}
+ ]).
+
+vector_gen(Type) ->
+ Len = get_prop(env, Type),
+ ElemType = get_prop(internal_type, Type),
+ proper_gen:vector_gen(Len, ElemType).
+
+vector_is_instance(Type, X) ->
+ Len = get_prop(env, Type),
+ ElemType = get_prop(internal_type, Type),
+ is_list(X)
+ andalso length(X) =:= Len
+ andalso lists:all(fun(E) -> is_instance(E, ElemType) end, X).
+
+vector_get_indices(Type, _X) ->
+ lists:seq(1, get_prop(env, Type)).
+
+%% @doc The union of all types in `ListOfTypes'. `ListOfTypes' can't be empty.
+%% The random instance generator is equally likely to choose any one of the
+%% types in `ListOfTypes'. The shrinking subsystem will always try to shrink an
+%% instance of a type union to an instance of the first type in `ListOfTypes',
+%% thus you should write the simplest case first.
+-spec union(ListOfTypes::[raw_type(),...]) -> proper_types:type().
+union(RawChoices) ->
+ Choices = [cook_outer(C) || C <- RawChoices],
+ ?BASIC([
+ {env, Choices},
+ {generator, {typed, fun union_gen/1}},
+ {is_instance, {typed, fun union_is_instance/2}},
+ {shrinkers, [fun union_shrinker_1/3, fun union_shrinker_2/3]}
+ ]).
+
+union_gen(Type) ->
+ Choices = get_prop(env,Type),
+ proper_gen:union_gen(Choices).
+
+union_is_instance(Type, X) ->
+ Choices = get_prop(env, Type),
+ lists:any(fun(C) -> is_instance(X, C) end, Choices).
+
+union_shrinker_1(X, Type, S) ->
+ Choices = get_prop(env, Type),
+ proper_shrink:union_first_choice_shrinker(X, Choices, S).
+
+union_shrinker_2(X, Type, S) ->
+ Choices = get_prop(env, Type),
+ proper_shrink:union_recursive_shrinker(X, Choices, S).
+
+%% @doc A specialization of {@link union/1}, where each type in `ListOfTypes' is
+%% assigned a frequency. Frequencies must be Erlang expressions that evaluate to
+%% positive integers. Types with larger frequencies are more likely to be chosen
+%% by the random instance generator. The shrinking subsystem will ignore the
+%% frequencies and try to shrink towards the first type in the list.
+-spec weighted_union(ListOfTypes::[{frequency(),raw_type()},...]) ->
+ proper_types:type().
+weighted_union(RawFreqChoices) ->
+ CookFreqType = fun({Freq,RawType}) -> {Freq,cook_outer(RawType)} end,
+ FreqChoices = lists:map(CookFreqType, RawFreqChoices),
+ Choices = [T || {_F,T} <- FreqChoices],
+ ?SUBTYPE(union(Choices), [
+ {subenv, FreqChoices},
+ {generator, {typed, fun weighted_union_gen/1}}
+ ]).
+
+weighted_union_gen(Gen) ->
+ FreqChoices = get_prop(subenv, Gen),
+ proper_gen:weighted_union_gen(FreqChoices).
+
+%% @private
+-spec safe_union([raw_type(),...]) -> proper_types:type().
+safe_union(RawChoices) ->
+ Choices = [cook_outer(C) || C <- RawChoices],
+ subtype(
+ [{subenv, Choices},
+ {generator, {typed, fun safe_union_gen/1}}],
+ union(Choices)).
+
+safe_union_gen(Type) ->
+ Choices = get_prop(subenv, Type),
+ proper_gen:safe_union_gen(Choices).
+
+%% @private
+-spec safe_weighted_union([{frequency(),raw_type()},...]) ->
+ proper_types:type().
+safe_weighted_union(RawFreqChoices) ->
+ CookFreqType = fun({Freq,RawType}) ->
+ {Freq,cook_outer(RawType)} end,
+ FreqChoices = lists:map(CookFreqType, RawFreqChoices),
+ Choices = [T || {_F,T} <- FreqChoices],
+ subtype([{subenv, FreqChoices},
+ {generator, {typed, fun safe_weighted_union_gen/1}}],
+ union(Choices)).
+
+safe_weighted_union_gen(Type) ->
+ FreqChoices = get_prop(subenv, Type),
+ proper_gen:safe_weighted_union_gen(FreqChoices).
+
+%% @doc All tuples whose i-th element is an instance of the type at index i of
+%% `ListOfTypes'. Also written simply as a tuple of types.
+-spec tuple(ListOfTypes::[raw_type()]) -> proper_types:type().
+tuple(RawFields) ->
+ Fields = [cook_outer(F) || F <- RawFields],
+ ?CONTAINER([
+ {env, Fields},
+ {generator, {typed, fun tuple_gen/1}},
+ {is_instance, {typed, fun tuple_is_instance/2}},
+ {internal_types, list_to_tuple(Fields)},
+ {get_indices, fun tuple_get_indices/2},
+ {retrieve, fun erlang:element/2},
+ {update, fun tuple_update/3}
+ ]).
+
+tuple_gen(Type) ->
+ Fields = get_prop(env, Type),
+ proper_gen:tuple_gen(Fields).
+
+tuple_is_instance(Type, X) ->
+ Fields = get_prop(env, Type),
+ is_tuple(X) andalso fixed_list_test(tuple_to_list(X), Fields).
+
+tuple_get_indices(Type, _X) ->
+ lists:seq(1, length(get_prop(env, Type))).
+
+-spec tuple_update(index(), value(), tuple()) -> tuple().
+tuple_update(Index, NewElem, Tuple) ->
+ setelement(Index, Tuple, NewElem).
+
+%% @doc Tuples whose elements are all of type `ElemType'.
+%% Instances shrink towards the 0-size tuple, `{}'.
+-spec loose_tuple(ElemType::raw_type()) -> proper_types:type().
+loose_tuple(RawElemType) ->
+ ElemType = cook_outer(RawElemType),
+ ?WRAPPER([
+ {env, ElemType},
+ {generator, {typed, fun loose_tuple_gen/2}},
+ {reverse_gen, {typed, fun loose_tuple_rev/2}},
+ {is_instance, {typed, fun loose_tuple_is_instance/2}}
+ ]).
+
+loose_tuple_gen(Type, Size) ->
+ ElemType = get_prop(env, Type),
+ proper_gen:loose_tuple_gen(Size, ElemType).
+
+loose_tuple_rev(Type, X) ->
+ ElemType = get_prop(env, Type),
+ proper_gen:loose_tuple_rev(X, ElemType).
+
+loose_tuple_is_instance(Type, X) ->
+ ElemType = get_prop(env, Type),
+ is_tuple(X) andalso list_test(tuple_to_list(X), ElemType).
+
+%% @doc Singleton type consisting only of `E'. `E' must be an evaluated term.
+%% Also written simply as `E'.
+-spec exactly(term()) -> proper_types:type().
+exactly(E) ->
+ ?BASIC([
+ {env, E},
+ {generator, {typed, fun exactly_gen/1}},
+ {is_instance, {typed, fun exactly_is_instance/2}}
+ ]).
+
+exactly_gen(Type) ->
+ E = get_prop(env, Type),
+ proper_gen:exactly_gen(E).
+
+exactly_is_instance(Type, X) ->
+ E = get_prop(env, Type),
+ X =:= E.
+
+%% @doc All lists whose i-th element is an instance of the type at index i of
+%% `ListOfTypes'. Also written simply as a list of types.
+-spec fixed_list(ListOfTypes::maybe_improper_list(raw_type(),raw_type()|[])) ->
+ proper_types:type().
+fixed_list(MaybeImproperRawFields) ->
+ %% CAUTION: must handle improper lists
+ {Fields, Internal, Len, Retrieve, Update} =
+ case proper_arith:cut_improper_tail(MaybeImproperRawFields) of
+ % TODO: have cut_improper_tail return the length and use it in test?
+ {ProperRawHead, ImproperRawTail} ->
+ HeadLen = length(ProperRawHead),
+ CookedHead = [cook_outer(F) || F <- ProperRawHead],
+ CookedTail = cook_outer(ImproperRawTail),
+ {{CookedHead,CookedTail},
+ CookedHead ++ CookedTail,
+ HeadLen + 1,
+ fun(I,L) -> improper_list_retrieve(I, L, HeadLen) end,
+ fun(I,V,L) -> improper_list_update(I, V, L, HeadLen) end};
+ ProperRawFields ->
+ LocalFields = [cook_outer(F) || F <- ProperRawFields],
+ {LocalFields,
+ LocalFields,
+ length(ProperRawFields),
+ fun lists:nth/2,
+ fun proper_arith:list_update/3}
+ end,
+ ?CONTAINER([
+ {env, {Fields, Len}},
+ {generator, {typed, fun fixed_list_gen/1}},
+ {is_instance, {typed, fun fixed_list_is_instance/2}},
+ {internal_types, Internal},
+ {get_indices, fun fixed_list_get_indices/2},
+ {retrieve, Retrieve},
+ {update, Update}
+ ]).
+
+fixed_list_gen(Type) ->
+ {Fields, _} = get_prop(env, Type),
+ proper_gen:fixed_list_gen(Fields).
+
+fixed_list_is_instance(Type, X) ->
+ {Fields, _} = get_prop(env, Type),
+ fixed_list_test(X, Fields).
+
+fixed_list_get_indices(Type, _X) ->
+ {_, Len} = get_prop(env, Type),
+ lists:seq(1, Len).
+
+-spec fixed_list_test(proper_gen:imm_instance(),
+ [proper_types:type()] | {[proper_types:type()],
+ proper_types:type()}) ->
+ boolean().
+fixed_list_test(X, {ProperHead,ImproperTail}) ->
+ is_list(X) andalso
+ begin
+ ProperHeadLen = length(ProperHead),
+ proper_arith:head_length(X) >= ProperHeadLen andalso
+ begin
+ {XHead,XTail} = lists:split(ProperHeadLen, X),
+ fixed_list_test(XHead, ProperHead)
+ andalso is_instance(XTail, ImproperTail)
+ end
+ end;
+fixed_list_test(X, ProperFields) ->
+ is_list(X)
+ andalso length(X) =:= length(ProperFields)
+ andalso lists:all(fun({E,T}) -> is_instance(E, T) end,
+ lists:zip(X, ProperFields)).
+
+%% TODO: Move these 2 functions to proper_arith?
+-spec improper_list_retrieve(index(), nonempty_improper_list(value(),value()),
+ pos_integer()) -> value().
+improper_list_retrieve(Index, List, HeadLen) ->
+ case Index =< HeadLen of
+ true -> lists:nth(Index, List);
+ false -> lists:nthtail(HeadLen, List)
+ end.
+
+-spec improper_list_update(index(), value(),
+ nonempty_improper_list(value(),value()),
+ pos_integer()) ->
+ nonempty_improper_list(value(),value()).
+improper_list_update(Index, Value, List, HeadLen) ->
+ case Index =< HeadLen of
+ %% TODO: This happens to work, but is not implied by list_update's spec.
+ true -> proper_arith:list_update(Index, Value, List);
+ false -> lists:sublist(List, HeadLen) ++ Value
+ end.
+
+%% @doc All pure functions that map instances of `ArgTypes' to instances of
+%% `RetType'. The syntax `function(Arity, RetType)' is also acceptable.
+-spec function(ArgTypes::[raw_type()] | arity(), RetType::raw_type()) ->
+ proper_types:type().
+function(Arity, RawRetType) when is_integer(Arity), Arity >= 0, Arity =< 255 ->
+ RetType = cook_outer(RawRetType),
+ ?BASIC([
+ {env, {Arity, RetType}},
+ {generator, {typed, fun function_gen/1}},
+ {is_instance, {typed, fun function_is_instance/2}}
+ ]);
+function(RawArgTypes, RawRetType) ->
+ function(length(RawArgTypes), RawRetType).
+
+function_gen(Type) ->
+ {Arity, RetType} = get_prop(env, Type),
+ proper_gen:function_gen(Arity, RetType).
+
+function_is_instance(Type, X) ->
+ {Arity, RetType} = get_prop(env, Type),
+ is_function(X, Arity)
+ %% TODO: what if it's not a function we produced?
+ andalso equal_types(RetType, proper_gen:get_ret_type(X)).
+
+%% @doc All Erlang terms (that PropEr can produce). For reasons of efficiency,
+%% functions are never produced as instances of this type.<br />
+%% CAUTION: Instances of this type are expensive to produce, shrink and instance-
+%% check, both in terms of processing time and consumed memory. Only use this
+%% type if you are certain that you need it.
+-spec any() -> proper_types:type().
+any() ->
+ AllTypes = [integer(),float(),atom(),bitstring(),?LAZY(loose_tuple(any())),
+ ?LAZY(list(any()))],
+ ?SUBTYPE(union(AllTypes), [
+ {generator, fun proper_gen:any_gen/1}
+ ]).
+
+
+%%------------------------------------------------------------------------------
+%% Type aliases
+%%------------------------------------------------------------------------------
+
+%% @equiv integer(inf, inf)
+-spec integer() -> proper_types:type().
+integer() -> integer(inf, inf).
+
+%% @equiv integer(0, inf)
+-spec non_neg_integer() -> proper_types:type().
+non_neg_integer() -> integer(0, inf).
+
+%% @equiv integer(1, inf)
+-spec pos_integer() -> proper_types:type().
+pos_integer() -> integer(1, inf).
+
+%% @equiv integer(inf, -1)
+-spec neg_integer() -> proper_types:type().
+neg_integer() -> integer(inf, -1).
+
+%% @equiv integer(Low, High)
+-spec range(extint(), extint()) -> proper_types:type().
+range(Low, High) -> integer(Low, High).
+
+%% @equiv float(inf, inf)
+-spec float() -> proper_types:type().
+float() -> float(inf, inf).
+
+%% @equiv float(0.0, inf)
+-spec non_neg_float() -> proper_types:type().
+non_neg_float() -> float(0.0, inf).
+
+%% @equiv union([integer(), float()])
+-spec number() -> proper_types:type().
+number() -> union([integer(), float()]).
+
+%% @doc The atoms `true' and `false'. Instances shrink towards `false'.
+-spec boolean() -> proper_types:type().
+boolean() -> union(['false', 'true']).
+
+%% @equiv integer(0, 255)
+-spec byte() -> proper_types:type().
+byte() -> integer(0, 255).
+
+%% @equiv integer(0, 16#10ffff)
+-spec char() -> proper_types:type().
+char() -> integer(0, 16#10ffff).
+
+%% @equiv list(any())
+-spec list() -> proper_types:type().
+list() -> list(any()).
+
+%% @equiv loose_tuple(any())
+-spec tuple() -> proper_types:type().
+tuple() -> loose_tuple(any()).
+
+%% @equiv list(char())
+-spec string() -> proper_types:type().
+string() -> list(char()).
+
+%% @equiv weighted_union(FreqChoices)
+-spec wunion([{frequency(),raw_type()},...]) -> proper_types:type().
+wunion(FreqChoices) -> weighted_union(FreqChoices).
+
+%% @equiv any()
+-spec term() -> proper_types:type().
+term() -> any().
+
+%% @equiv union([non_neg_integer() | infinity])
+-spec timeout() -> proper_types:type().
+timeout() -> union([non_neg_integer(), 'infinity']).
+
+%% @equiv integer(0, 255)
+-spec arity() -> proper_types:type().
+arity() -> integer(0, 255).
+
+
+%%------------------------------------------------------------------------------
+%% QuickCheck compatibility types
+%%------------------------------------------------------------------------------
+
+%% @doc Small integers (bound by the current value of the `size' parameter).
+%% Instances shrink towards `0'.
+-spec int() -> proper_types:type().
+int() -> ?SIZED(Size, integer(-Size,Size)).
+
+%% @doc Small non-negative integers (bound by the current value of the `size'
+%% parameter). Instances shrink towards `0'.
+-spec nat() -> proper_types:type().
+nat() -> ?SIZED(Size, integer(0,Size)).
+
+%% @equiv integer()
+-spec largeint() -> proper_types:type().
+largeint() -> integer().
+
+%% @equiv float()
+-spec real() -> proper_types:type().
+real() -> float().
+
+%% @equiv boolean()
+-spec bool() -> proper_types:type().
+bool() -> boolean().
+
+%% @equiv integer(Low, High)
+-spec choose(extint(), extint()) -> proper_types:type().
+choose(Low, High) -> integer(Low, High).
+
+%% @equiv union(Choices)
+-spec elements([raw_type(),...]) -> proper_types:type().
+elements(Choices) -> union(Choices).
+
+%% @equiv union(Choices)
+-spec oneof([raw_type(),...]) -> proper_types:type().
+oneof(Choices) -> union(Choices).
+
+%% @equiv weighted_union(Choices)
+-spec frequency([{frequency(),raw_type()},...]) -> proper_types:type().
+frequency(FreqChoices) -> weighted_union(FreqChoices).
+
+%% @equiv exactly(E)
+-spec return(term()) -> proper_types:type().
+return(E) -> exactly(E).
+
+%% @doc Adds a default value, `Default', to `Type'.
+%% The default serves as a primary shrinking target for instances, while it
+%% is also chosen by the random instance generation subsystem half the time.
+-spec default(raw_type(), raw_type()) -> proper_types:type().
+default(Default, Type) ->
+ union([Default, Type]).
+
+%% @doc All sorted lists containing elements of type `ElemType'.
+%% Instances shrink towards the empty list, `[]'.
+-spec orderedlist(ElemType::raw_type()) -> proper_types:type().
+orderedlist(RawElemType) ->
+ ?LET(L, list(RawElemType), lists:sort(L)).
+
+%% @equiv function(0, RetType)
+-spec function0(raw_type()) -> proper_types:type().
+function0(RetType) ->
+ function(0, RetType).
+
+%% @equiv function(1, RetType)
+-spec function1(raw_type()) -> proper_types:type().
+function1(RetType) ->
+ function(1, RetType).
+
+%% @equiv function(2, RetType)
+-spec function2(raw_type()) -> proper_types:type().
+function2(RetType) ->
+ function(2, RetType).
+
+%% @equiv function(3, RetType)
+-spec function3(raw_type()) -> proper_types:type().
+function3(RetType) ->
+ function(3, RetType).
+
+%% @equiv function(4, RetType)
+-spec function4(raw_type()) -> proper_types:type().
+function4(RetType) ->
+ function(4, RetType).
+
+%% @doc A specialization of {@link default/2}, where `Default' and `Type' are
+%% assigned weights to be considered by the random instance generator. The
+%% shrinking subsystem will ignore the weights and try to shrink using the
+%% default value.
+-spec weighted_default({frequency(),raw_type()}, {frequency(),raw_type()}) ->
+ proper_types:type().
+weighted_default(Default, Type) ->
+ weighted_union([Default, Type]).
+
+
+%%------------------------------------------------------------------------------
+%% Additional type specification functions
+%%------------------------------------------------------------------------------
+
+%% @doc Overrides the `size' parameter used when generating instances of
+%% `Type' with `NewSize'. Has no effect on size-less types, such as unions.
+%% Also, this will not affect the generation of any internal types contained in
+%% `Type', such as the elements of a list - those will still be generated
+%% using the test-wide value of `size'. One use of this function is to modify
+%% types to produce instances that grow faster or slower, like so:
+%% ```?SIZED(Size, resize(Size * 2, list(integer()))'''
+%% The above specifies a list type that grows twice as fast as normal lists.
+-spec resize(size(), Type::raw_type()) -> proper_types:type().
+resize(NewSize, RawType) ->
+ Type = cook_outer(RawType),
+ case find_prop(size_transform, Type) of
+ {ok,Transform} ->
+ add_prop(size_transform, fun(_S) -> Transform(NewSize) end, Type);
+ error ->
+ add_prop(size_transform, fun(_S) -> NewSize end, Type)
+ end.
+
+%% @doc This is a predefined constraint that can be applied to random-length
+%% list and binary types to ensure that the produced values are never empty.
+%%
+%% e.g. {@link list/0}, {@link string/0}, {@link binary/0})
+-spec non_empty(ListType::raw_type()) -> proper_types:type().
+non_empty(RawListType) ->
+ ?SUCHTHAT(L, RawListType, L =/= [] andalso L =/= <<>>).
+
+%% @doc Creates a new type which is equivalent to `Type', but whose instances
+%% are never shrunk by the shrinking subsystem.
+-spec noshrink(Type::raw_type()) -> proper_types:type().
+noshrink(RawType) ->
+ add_prop(noshrink, true, cook_outer(RawType)).
+
+%% @doc Associates the atom key `Parameter' with the value `Value' while
+%% generating instances of `Type'.
+-spec with_parameter(atom(), value(), Type::raw_type()) -> proper_types:type().
+with_parameter(Parameter, Value, RawType) ->
+ with_parameters([{Parameter,Value}], RawType).
+
+%% @doc Similar to {@link with_parameter/3}, but accepts a list of
+%% `{Parameter, Value}' pairs.
+-spec with_parameters([{atom(),value()}], Type::raw_type()) ->
+ proper_types:type().
+with_parameters(PVlist, RawType) ->
+ Type = cook_outer(RawType),
+ case find_prop(parameters, Type) of
+ {ok,Params} when is_list(Params) ->
+ append_list_to_prop(parameters, PVlist, Type);
+ error ->
+ add_prop(parameters, PVlist, Type)
+ end.
+
+%% @doc Returns the value associated with `Parameter', or `Default' in case
+%% `Parameter' is not associated with any value.
+-spec parameter(atom(), value()) -> value().
+parameter(Parameter, Default) ->
+ Parameters =
+ case erlang:get('$parameters') of
+ undefined -> [];
+ List -> List
+ end,
+ proplists:get_value(Parameter, Parameters, Default).
+
+%% @equiv parameter(Parameter, undefined)
+-spec parameter(atom()) -> value().
+parameter(Parameter) ->
+ parameter(Parameter, undefined).
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_typeserver.erl b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_typeserver.erl
new file mode 100644
index 0000000000..b16075763f
--- /dev/null
+++ b/lib/dialyzer/test/behaviour_SUITE_data/src/proper/proper_typeserver.erl
@@ -0,0 +1,2411 @@
+%%% Copyright 2010-2016 Manolis Papadakis <[email protected]>,
+%%% Eirini Arvaniti <[email protected]>
+%%% and Kostis Sagonas <[email protected]>
+%%%
+%%% This file is part of PropEr.
+%%%
+%%% PropEr is free software: you can redistribute it and/or modify
+%%% it under the terms of the GNU General Public License as published by
+%%% the Free Software Foundation, either version 3 of the License, or
+%%% (at your option) any later version.
+%%%
+%%% PropEr is distributed in the hope that it will be useful,
+%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%%% GNU General Public License for more details.
+%%%
+%%% You should have received a copy of the GNU General Public License
+%%% along with PropEr. If not, see <http://www.gnu.org/licenses/>.
+
+%%% @copyright 2010-2016 Manolis Papadakis, Eirini Arvaniti and Kostis Sagonas
+%%% @version {@version}
+%%% @author Manolis Papadakis
+
+%%% @doc Erlang type system - PropEr type system integration module.
+%%%
+%%% PropEr can parse types expressed in Erlang's type language and convert them
+%%% to its own type format. Such expressions can be used instead of regular type
+%%% constructors in the second argument of `?FORALL's. No extra notation is
+%%% required; PropEr will detect which calls correspond to native types by
+%%% applying a parse transform during compilation. This parse transform is
+%%% automatically applied to any module that includes the `proper.hrl' header
+%%% file. You can disable this feature by compiling your modules with
+%%% `-DPROPER_NO_TRANS'. Note that this will currently also disable the
+%%% automatic exporting of properties.
+%%%
+%%% The use of native types in properties is subject to the following usage
+%%% rules:
+%%% <ul>
+%%% <li>Native types cannot be used outside of `?FORALL's.</li>
+%%% <li>Inside `?FORALL's, native types can be combined with other native
+%%% types, and even with PropEr types, inside tuples and lists (the constructs
+%%% `[...]', `{...}' and `++' are all allowed).</li>
+%%% <li>All other constructs of Erlang's built-in type system (e.g. `|' for
+%%% union, `_' as an alias of `any()', `<<_:_>>' binary type syntax and
+%%% `fun((...) -> ...)' function type syntax) are not allowed in `?FORALL's,
+%%% because they are rejected by the Erlang parser.</li>
+%%% <li>Anything other than a tuple constructor, list constructor, `++'
+%%% application, local or remote call will automatically be considered a
+%%% PropEr type constructor and not be processed further by the parse
+%%% transform.</li>
+%%% <li>Parametric native types are fully supported; of course, they can only
+%%% appear instantiated in a `?FORALL'. The arguments of parametric native
+%%% types are always interpreted as native types.</li>
+%%% <li>Parametric PropEr types, on the other hand, can take any kind of
+%%% argument. You can even mix native and PropEr types in the arguments of a
+%%% PropEr type. For example, assuming that the following declarations are
+%%% present:
+%%% ``` my_proper_type() -> ?LET(...).
+%%% -type my_native_type() :: ... .'''
+%%% Then the following expressions are all legal:
+%%% ``` vector(2, my_native_type())
+%%% function(0, my_native_type())
+%%% union([my_proper_type(), my_native_type()])''' </li>
+%%% <li>Some type constructors can take native types as arguments (but only
+%%% inside `?FORALL's):
+%%% <ul>
+%%% <li>`?SUCHTHAT', `?SUCHTHATMAYBE', `non_empty', `noshrink': these work
+%%% with native types too</li>
+%%% <li>`?LAZY', `?SHRINK', `resize', `?SIZED': these don't work with native
+%%% types</li>
+%%% <li>`?LET', `?LETSHRINK': only the top-level base type can be a native
+%%% type</li>
+%%% </ul></li>
+%%% <li>Native type declarations in the `?FORALL's of a module can reference any
+%%% custom type declared in a `-type' or `-opaque' attribute of the same
+%%% module, as long as no module identifier is used.</li>
+%%% <li>Typed records cannot be referenced inside `?FORALL's using the
+%%% `#rec_name{}' syntax. To use a typed record in a `?FORALL', enclose the
+%%% record in a custom type like so:
+%%% ``` -type rec_name() :: #rec_name{}. '''
+%%% and use the custom type instead.</li>
+%%% <li>`?FORALL's may contain references to self-recursive or mutually
+%%% recursive native types, so long as each type in the hierarchy has a clear
+%%% base case.
+%%% Currently, PropEr requires that the toplevel of any recursive type
+%%% declaration is either a (maybe empty) list or a union containing at least
+%%% one choice that doesn't reference the type directly (it may, however,
+%%% reference any of the types that are mutually recursive with it). This
+%%% means, for example, that some valid recursive type declarations, such as
+%%% this one:
+%%% ``` ?FORALL(..., a(), ...) '''
+%%% where:
+%%% ``` -type a() :: {'a','none' | a()}. '''
+%%% are not accepted by PropEr. However, such types can be rewritten in a way
+%%% that allows PropEr to parse them:
+%%% ``` ?FORALL(..., a(), ...) '''
+%%% where:
+%%% ``` -type a() :: {'a','none'} | {'a',a()}. '''
+%%% This also means that recursive record declarations are not allowed:
+%%% ``` ?FORALL(..., rec(), ...) '''
+%%% where:
+%%% ``` -type rec() :: #rec{}.
+%%% -record(rec, {a = 0 :: integer(), b = 'nil' :: 'nil' | #rec{}}). '''
+%%% A little rewritting can usually remedy this problem as well:
+%%% ``` ?FORALL(..., rec(), ...) '''
+%%% where:
+%%% ``` -type rec() :: #rec{b :: 'nil'} | #rec{b :: rec()}.
+%%% -record(rec, {a = 0 :: integer(), b = 'nil' :: 'nil' | #rec{}}). '''
+%%% </li>
+%%% <li>Remote types may be referenced in a `?FORALL', so long as they are
+%%% exported from the remote module. Currently, PropEr requires that any
+%%% remote modules whose types are directly referenced from within properties
+%%% are present in the code path at compile time, either compiled with
+%%% `debug_info' enabled or in source form. If PropEr cannot find a remote
+%%% module at all, finds only a compiled object file with no debug
+%%% information or fails to compile the source file, all calls to that module
+%%% will automatically be considered calls to PropEr type constructors.</li>
+%%% <li>For native types to be translated correctly, both the module that
+%%% contains the `?FORALL' declaration as well as any module that contains
+%%% the declaration of a type referenced (directly or indirectly) from inside
+%%% a `?FORALL' must be present in the code path at runtime, either compiled
+%%% with `debug_info' enabled or in source form.</li>
+%%% <li>Local types with the same name as an auto-imported BIF are not accepted
+%%% by PropEr, unless the BIF in question has been declared in a
+%%% `no_auto_import' option.</li>
+%%% <li>When an expression can be interpreted both as a PropEr type and as a
+%%% native type, the former takes precedence. This means that a function
+%%% `foo()' will shadow a type `foo()' if they are both present in the module.
+%%% The same rule applies to remote functions and types as well.</li>
+%%% <li>The above may cause some confusion when list syntax is used:
+%%% <ul>
+%%% <li>The expression `[integer()]' can be interpreted both ways, so the
+%%% PropEr way applies. Therefore, instances of this type will always be
+%%% lists of length 1, not arbitrary integer lists, as would be expected
+%%% when interpreting the expression as a native type.</li>
+%%% <li>Assuming that a custom type foo/1 has been declared, the expression
+%%% `foo([integer()])' can only be interpreted as a native type declaration,
+%%% which means that the generic type of integer lists will be passed to
+%%% `foo/1'.</li>
+%%% </ul></li>
+%%% <li>Currently, PropEr does not detect the following mistakes:
+%%% <ul>
+%%% <li>inline record-field specializations that reference non-existent
+%%% fields</li>
+%%% <li>type parameters that are not present in the RHS of a `-type'
+%%% declaration</li>
+%%% <li>using `_' as a type variable in the LHS of a `-type' declaration</li>
+%%% <li>using the same variable in more than one position in the LHS of a
+%%% `-type' declaration</li>
+%%% </ul>
+%%% </li>
+%%% </ul>
+%%%
+%%% You can use <a href="#index">these</a> functions to try out the type
+%%% translation subsystem.
+%%%
+%%% CAUTION: These functions should never be used inside properties. They are
+%%% meant for demonstration purposes only.
+
+-module(proper_typeserver).
+-behaviour(gen_server).
+-export([demo_translate_type/2, demo_is_instance/3]).
+
+-export([start/0, restart/0, stop/0, create_spec_test/3, get_exp_specced/1,
+ is_instance/3, translate_type/1]).
+-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
+ code_change/3]).
+-export([get_exp_info/1, match/2]).
+
+-export_type([imm_type/0, mod_exp_types/0, mod_exp_funs/0]).
+
+-include("proper_internal.hrl").
+
+
+%%------------------------------------------------------------------------------
+%% Macros
+%%------------------------------------------------------------------------------
+
+-define(SRC_FILE_EXT, ".erl").
+
+-ifdef(AT_LEAST_19).
+-define(anno(L), erl_anno:new(L)).
+-else.
+-define(anno(L), L).
+-endif.
+
+%% Starting with 18.0 we need to handle both 'type' and 'user_type' tags;
+%% prior Erlang/OTP releases had only 'type' as a tag.
+-define(IS_TYPE_TAG(T), (T =:= type orelse T =:= user_type)).
+
+%% CAUTION: all these must be sorted
+-define(STD_TYPES_0,
+ [any,arity,atom,binary,bitstring,bool,boolean,byte,char,float,integer,
+ list,neg_integer,non_neg_integer,number,pos_integer,string,term,
+ timeout]).
+-define(HARD_ADTS,
+ %% gb_trees:iterator and gb_sets:iterator are NOT hardcoded
+ [{{array,0},array}, {{array,1},proper_array},
+ {{dict,0},dict}, {{dict,2},proper_dict},
+ {{gb_set,0},gb_sets}, {{gb_set,1},proper_gb_sets},
+ {{gb_tree,0},gb_trees}, {{gb_tree,2},proper_gb_trees},
+ {{orddict,2},proper_orddict},
+ {{ordset,1},proper_ordsets},
+ {{queue,0},queue}, {{queue,1},proper_queue},
+ {{set,0},sets}, {{set,1},proper_sets}]).
+-define(HARD_ADT_MODS,
+ [{array, [{{array,0},
+ {{type,0,record,[{atom,0,array}]},[]}}]},
+ {dict, [{{dict,0},
+ {{type,0,record,[{atom,0,dict}]},[]}}]},
+ {gb_sets, [{{gb_set,0},
+ {{type,0,tuple,[{type,0,non_neg_integer,[]},
+ {type,0,gb_set_node,[]}]},[]}}]},
+ {gb_trees, [{{gb_tree,0},
+ {{type,0,tuple,[{type,0,non_neg_integer,[]},
+ {type,0,gb_tree_node,[]}]},[]}}]},
+ %% Our parametric ADTs are already declared as normal types, we just
+ %% need to change them to opaques.
+ {proper_array, [{{array,1},already_declared}]},
+ {proper_dict, [{{dict,2},already_declared}]},
+ {proper_gb_sets, [{{gb_set,1},already_declared},
+ {{iterator,1},already_declared}]},
+ {proper_gb_trees, [{{gb_tree,2},already_declared},
+ {{iterator,2},already_declared}]},
+ {proper_orddict, [{{orddict,2},already_declared}]},
+ {proper_ordsets, [{{ordset,1},already_declared}]},
+ {proper_queue, [{{queue,1},already_declared}]},
+ {proper_sets, [{{set,1},already_declared}]},
+ {queue, [{{queue,0},
+ {{type,0,tuple,[{type,0,list,[]},{type,0,list,[]}]},[]}}]},
+ {sets, [{{set,0},
+ {{type,0,record,[{atom,0,set}]},[]}}]}]).
+
+
+%%------------------------------------------------------------------------------
+%% Types
+%%------------------------------------------------------------------------------
+
+-type type_name() :: atom().
+-type var_name() :: atom(). %% TODO: also integers?
+-type field_name() :: atom().
+
+-type type_kind() :: 'type' | 'record'.
+-type type_ref() :: {type_kind(),type_name(),arity()}.
+-ifdef(NO_MODULES_IN_OPAQUES).
+-type substs_dict() :: dict(). %% dict(field_name(),ret_type())
+-else.
+-type substs_dict() :: dict:dict(field_name(),ret_type()).
+-endif.
+-type full_type_ref() :: {mod_name(),type_kind(),type_name(),
+ [ret_type()] | substs_dict()}.
+-type symb_info() :: 'not_symb' | {'orig_abs',abs_type()}.
+-type type_repr() :: {'abs_type',abs_type(),[var_name()],symb_info()}
+ | {'cached',fin_type(),abs_type(),symb_info()}
+ | {'abs_record',[{field_name(),abs_type()}]}.
+-type gen_fun() :: fun((size()) -> fin_type()).
+-type rec_fun() :: fun(([gen_fun()],size()) -> fin_type()).
+-type rec_arg() :: {boolean() | {'list',boolean(),rec_fun()},full_type_ref()}.
+-type rec_args() :: [rec_arg()].
+-type ret_type() :: {'simple',fin_type()} | {'rec',rec_fun(),rec_args()}.
+-type rec_fun_info() :: {pos_integer(),pos_integer(),[arity(),...],
+ [rec_fun(),...]}.
+
+-type imm_type_ref() :: {type_name(),arity()}.
+-type hard_adt_repr() :: {abs_type(),[var_name()]} | 'already_declared'.
+-type fun_ref() :: {fun_name(),arity()}.
+-type fun_repr() :: fun_clause_repr().
+-type fun_clause_repr() :: {[abs_type()],abs_type()}.
+-type proc_fun_ref() :: {fun_name(),[abs_type()],abs_type()}.
+-type full_imm_type_ref() :: {mod_name(),type_name(),arity()}.
+-type imm_stack() :: [full_imm_type_ref()].
+-type pat_field() :: 0 | 1 | atom().
+-type pattern() :: loose_tuple(pat_field()).
+-type next_step() :: 'none' | 'take_head' | {'match_with',pattern()}.
+
+-ifdef(NO_MODULES_IN_OPAQUES).
+%% @private_type
+-type mod_exp_types() :: set(). %% set(imm_type_ref())
+-type mod_types() :: dict(). %% dict(type_ref(),type_repr())
+%% @private_type
+-type mod_exp_funs() :: set(). %% set(fun_ref())
+-type mod_specs() :: dict(). %% dict(fun_ref(),fun_repr())
+-else.
+%% @private_type
+-type mod_exp_types() :: sets:set(imm_type_ref()).
+-type mod_types() :: dict:dict(type_ref(),type_repr()).
+%% @private_type
+-type mod_exp_funs() :: sets:set(fun_ref()).
+-type mod_specs() :: dict:dict(fun_ref(),fun_repr()).
+-endif.
+
+-ifdef(NO_MODULES_IN_OPAQUES).
+-record(state,
+ {cached = dict:new() :: dict(), %% dict(imm_type(),fin_type())
+ exp_types = dict:new() :: dict(), %% dict(mod_name(),mod_exp_types())
+ types = dict:new() :: dict(), %% dict(mod_name(),mod_types())
+ exp_specs = dict:new() :: dict()}). %% dict(mod_name(),mod_specs())
+-else.
+-record(state,
+ {cached = dict:new() :: dict:dict(imm_type(),fin_type()),
+ exp_types = dict:new() :: dict:dict(mod_name(),mod_exp_types()),
+ types = dict:new() :: dict:dict(mod_name(),mod_types()),
+ exp_specs = dict:new() :: dict:dict(mod_name(),mod_specs())}).
+-endif.
+-type state() :: #state{}.
+
+-record(mod_info,
+ {mod_exp_types = sets:new() :: mod_exp_types(),
+ mod_types = dict:new() :: mod_types(),
+ mod_opaques = sets:new() :: mod_exp_types(),
+ mod_exp_funs = sets:new() :: mod_exp_funs(),
+ mod_specs = dict:new() :: mod_specs()}).
+-type mod_info() :: #mod_info{}.
+
+-type stack() :: [full_type_ref() | 'tuple' | 'list' | 'union' | 'fun'].
+-ifdef(NO_MODULES_IN_OPAQUES).
+-type var_dict() :: dict(). %% dict(var_name(),ret_type())
+-else.
+-type var_dict() :: dict:dict(var_name(),ret_type()).
+-endif.
+%% @private_type
+-type imm_type() :: {mod_name(),string()}.
+%% @alias
+-type fin_type() :: proper_types:type().
+-type tagged_result(T) :: {'ok',T} | 'error'.
+-type tagged_result2(T,S) :: {'ok',T,S} | 'error'.
+%% @alias
+-type rich_result(T) :: {'ok',T} | {'error',term()}.
+-type rich_result2(T,S) :: {'ok',T,S} | {'error',term()}.
+-type false_positive_mfas() :: proper:false_positive_mfas().
+
+-type server_call() :: {'create_spec_test',mfa(),timeout(),false_positive_mfas()}
+ | {'get_exp_specced',mod_name()}
+ | {'get_type_repr',mod_name(),type_ref(),boolean()}
+ | {'translate_type',imm_type()}.
+-type server_response() :: rich_result(proper:test())
+ | rich_result([mfa()])
+ | rich_result(type_repr())
+ | rich_result(fin_type()).
+
+
+%%------------------------------------------------------------------------------
+%% Server interface functions
+%%------------------------------------------------------------------------------
+
+%% @private
+-spec start() -> 'ok'.
+start() ->
+ {ok,TypeserverPid} = gen_server:start_link(?MODULE, dummy, []),
+ put('$typeserver_pid', TypeserverPid),
+ ok.
+
+%% @private
+-spec restart() -> 'ok'.
+restart() ->
+ TypeserverPid = get('$typeserver_pid'),
+ case (TypeserverPid =:= undefined orelse not is_process_alive(TypeserverPid)) of
+ true -> start();
+ false -> ok
+ end.
+
+%% @private
+-spec stop() -> 'ok'.
+stop() ->
+ TypeserverPid = get('$typeserver_pid'),
+ erase('$typeserver_pid'),
+ gen_server:cast(TypeserverPid, stop).
+
+%% @private
+-spec create_spec_test(mfa(), timeout(), false_positive_mfas()) -> rich_result(proper:test()).
+create_spec_test(MFA, SpecTimeout, FalsePositiveMFAs) ->
+ TypeserverPid = get('$typeserver_pid'),
+ gen_server:call(TypeserverPid, {create_spec_test,MFA,SpecTimeout,FalsePositiveMFAs}).
+
+%% @private
+-spec get_exp_specced(mod_name()) -> rich_result([mfa()]).
+get_exp_specced(Mod) ->
+ TypeserverPid = get('$typeserver_pid'),
+ gen_server:call(TypeserverPid, {get_exp_specced,Mod}).
+
+-spec get_type_repr(mod_name(), type_ref(), boolean()) ->
+ rich_result(type_repr()).
+get_type_repr(Mod, TypeRef, IsRemote) ->
+ TypeserverPid = get('$typeserver_pid'),
+ gen_server:call(TypeserverPid, {get_type_repr,Mod,TypeRef,IsRemote}).
+
+%% @private
+-spec translate_type(imm_type()) -> rich_result(fin_type()).
+translate_type(ImmType) ->
+ TypeserverPid = get('$typeserver_pid'),
+ gen_server:call(TypeserverPid, {translate_type,ImmType}).
+
+%% @doc Translates the native type expression `TypeExpr' (which should be
+%% provided inside a string) into a PropEr type, which can then be passed to any
+%% of the demo functions defined in the {@link proper_gen} module. PropEr acts
+%% as if it found this type expression inside the code of module `Mod'.
+-spec demo_translate_type(mod_name(), string()) -> rich_result(fin_type()).
+demo_translate_type(Mod, TypeExpr) ->
+ start(),
+ Result = translate_type({Mod,TypeExpr}),
+ stop(),
+ Result.
+
+%% @doc Checks if `Term' is a valid instance of native type `TypeExpr' (which
+%% should be provided inside a string). PropEr acts as if it found this type
+%% expression inside the code of module `Mod'.
+-spec demo_is_instance(term(), mod_name(), string()) ->
+ boolean() | {'error',term()}.
+demo_is_instance(Term, Mod, TypeExpr) ->
+ case parse_type(TypeExpr) of
+ {ok,TypeForm} ->
+ start(),
+ Result =
+ %% Force the typeserver to load the module.
+ case translate_type({Mod,"integer()"}) of
+ {ok,_FinType} ->
+ try is_instance(Term, Mod, TypeForm)
+ catch
+ throw:{'$typeserver',Reason} -> {error, Reason}
+ end;
+ {error,_Reason} = Error ->
+ Error
+ end,
+ stop(),
+ Result;
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+
+%%------------------------------------------------------------------------------
+%% Implementation of gen_server interface
+%%------------------------------------------------------------------------------
+
+%% @private
+-spec init(_) -> {'ok',state()}.
+init(_) ->
+ {ok, #state{}}.
+
+%% @private
+-spec handle_call(server_call(), _, state()) ->
+ {'reply',server_response(),state()}.
+handle_call({create_spec_test,MFA,SpecTimeout,FalsePositiveMFAs}, _From, State) ->
+ case create_spec_test(MFA, SpecTimeout, FalsePositiveMFAs, State) of
+ {ok,Test,NewState} ->
+ {reply, {ok,Test}, NewState};
+ {error,_Reason} = Error ->
+ {reply, Error, State}
+ end;
+handle_call({get_exp_specced,Mod}, _From, State) ->
+ case get_exp_specced(Mod, State) of
+ {ok,MFAs,NewState} ->
+ {reply, {ok,MFAs}, NewState};
+ {error,_Reason} = Error ->
+ {reply, Error, State}
+ end;
+handle_call({get_type_repr,Mod,TypeRef,IsRemote}, _From, State) ->
+ case get_type_repr(Mod, TypeRef, IsRemote, State) of
+ {ok,TypeRepr,NewState} ->
+ {reply, {ok,TypeRepr}, NewState};
+ {error,_Reason} = Error ->
+ {reply, Error, State}
+ end;
+handle_call({translate_type,ImmType}, _From, State) ->
+ case translate_type(ImmType, State) of
+ {ok,FinType,NewState} ->
+ {reply, {ok,FinType}, NewState};
+ {error,_Reason} = Error ->
+ {reply, Error, State}
+ end.
+
+%% @private
+-spec handle_cast('stop', state()) -> {'stop','normal',state()}.
+handle_cast(stop, State) ->
+ {stop, normal, State}.
+
+%% @private
+-spec handle_info(term(), state()) -> {'stop',{'received_info',term()},state()}.
+handle_info(Info, State) ->
+ {stop, {received_info,Info}, State}.
+
+%% @private
+-spec terminate(term(), state()) -> 'ok'.
+terminate(_Reason, _State) ->
+ ok.
+
+%% @private
+-spec code_change(term(), state(), _) -> {'ok',state()}.
+code_change(_OldVsn, State, _) ->
+ {ok, State}.
+
+
+%%------------------------------------------------------------------------------
+%% Top-level interface
+%%------------------------------------------------------------------------------
+
+-spec create_spec_test(mfa(), timeout(), false_positive_mfas(), state()) ->
+ rich_result2(proper:test(),state()).
+create_spec_test(MFA, SpecTimeout, FalsePositiveMFAs, State) ->
+ case get_exp_spec(MFA, State) of
+ {ok,FunRepr,NewState} ->
+ make_spec_test(MFA, FunRepr, SpecTimeout, FalsePositiveMFAs, NewState);
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec get_exp_spec(mfa(), state()) -> rich_result2(fun_repr(),state()).
+get_exp_spec({Mod,Fun,Arity} = MFA, State) ->
+ case add_module(Mod, State) of
+ {ok,#state{exp_specs = ExpSpecs} = NewState} ->
+ ModExpSpecs = dict:fetch(Mod, ExpSpecs),
+ case dict:find({Fun,Arity}, ModExpSpecs) of
+ {ok,FunRepr} ->
+ {ok, FunRepr, NewState};
+ error ->
+ {error, {function_not_exported_or_specced,MFA}}
+ end;
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec make_spec_test(mfa(), fun_repr(), timeout(), false_positive_mfas(), state()) ->
+ rich_result2(proper:test(),state()).
+make_spec_test({Mod,_Fun,_Arity}=MFA, {Domain,_Range}=FunRepr, SpecTimeout, FalsePositiveMFAs, State) ->
+ case convert(Mod, {type,?anno(0),'$fixed_list',Domain}, State) of
+ {ok,FinType,NewState} ->
+ Test = ?FORALL(Args, FinType, apply_spec_test(MFA, FunRepr, SpecTimeout, FalsePositiveMFAs, Args)),
+ {ok, Test, NewState};
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec apply_spec_test(mfa(), fun_repr(), timeout(), false_positive_mfas(), term()) -> proper:test().
+apply_spec_test({Mod,Fun,_Arity}=MFA, {_Domain,Range}, SpecTimeout, FalsePositiveMFAs, Args) ->
+ ?TIMEOUT(SpecTimeout,
+ begin
+ %% NOTE: only call apply/3 inside try/catch (do not trust ?MODULE:is_instance/3)
+ Result =
+ try apply(Mod, Fun, Args) of
+ X -> {ok, X}
+ catch
+ X:Y -> {X, Y}
+ end,
+ case Result of
+ {ok, Z} ->
+ case ?MODULE:is_instance(Z, Mod, Range) of
+ true ->
+ true;
+ false when is_function(FalsePositiveMFAs) ->
+ FalsePositiveMFAs(MFA, Args, {fail, Z});
+ false ->
+ false
+ end;
+ Exception when is_function(FalsePositiveMFAs) ->
+ case FalsePositiveMFAs(MFA, Args, Exception) of
+ true ->
+ true;
+ false ->
+ error(Exception, erlang:get_stacktrace())
+ end;
+ Exception ->
+ error(Exception, erlang:get_stacktrace())
+ end
+ end).
+
+-spec get_exp_specced(mod_name(), state()) -> rich_result2([mfa()],state()).
+get_exp_specced(Mod, State) ->
+ case add_module(Mod, State) of
+ {ok,#state{exp_specs = ExpSpecs} = NewState} ->
+ ModExpSpecs = dict:fetch(Mod, ExpSpecs),
+ ExpSpecced = [{Mod,F,A} || {F,A} <- dict:fetch_keys(ModExpSpecs)],
+ {ok, ExpSpecced, NewState};
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec get_type_repr(mod_name(), type_ref(), boolean(), state()) ->
+ rich_result2(type_repr(),state()).
+get_type_repr(Mod, {type,Name,Arity} = TypeRef, true, State) ->
+ case prepare_for_remote(Mod, Name, Arity, State) of
+ {ok,NewState} ->
+ get_type_repr(Mod, TypeRef, false, NewState);
+ {error,_Reason} = Error ->
+ Error
+ end;
+get_type_repr(Mod, TypeRef, false, #state{types = Types} = State) ->
+ ModTypes = dict:fetch(Mod, Types),
+ case dict:find(TypeRef, ModTypes) of
+ {ok,TypeRepr} ->
+ {ok, TypeRepr, State};
+ error ->
+ {error, {missing_type,Mod,TypeRef}}
+ end.
+
+-spec prepare_for_remote(mod_name(), type_name(), arity(), state()) ->
+ rich_result(state()).
+prepare_for_remote(RemMod, Name, Arity, State) ->
+ case add_module(RemMod, State) of
+ {ok,#state{exp_types = ExpTypes} = NewState} ->
+ RemModExpTypes = dict:fetch(RemMod, ExpTypes),
+ case sets:is_element({Name,Arity}, RemModExpTypes) of
+ true -> {ok, NewState};
+ false -> {error, {type_not_exported,{RemMod,Name,Arity}}}
+ end;
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec translate_type(imm_type(), state()) -> rich_result2(fin_type(),state()).
+translate_type({Mod,Str} = ImmType, #state{cached = Cached} = State) ->
+ case dict:find(ImmType, Cached) of
+ {ok,Type} ->
+ {ok, Type, State};
+ error ->
+ case parse_type(Str) of
+ {ok,TypeForm} ->
+ case add_module(Mod, State) of
+ {ok,NewState} ->
+ case convert(Mod, TypeForm, NewState) of
+ {ok,FinType,
+ #state{cached = Cached} = FinalState} ->
+ NewCached = dict:store(ImmType, FinType,
+ Cached),
+ {ok, FinType,
+ FinalState#state{cached = NewCached}};
+ {error,_Reason} = Error ->
+ Error
+ end;
+ {error,_Reason} = Error ->
+ Error
+ end;
+ {error,Reason} ->
+ {error, {parse_error,Str,Reason}}
+ end
+ end.
+
+-spec parse_type(string()) -> rich_result(abs_type()).
+parse_type(Str) ->
+ TypeStr = "-type mytype() :: " ++ Str ++ ".",
+ case erl_scan:string(TypeStr) of
+ {ok,Tokens,_EndLocation} ->
+ case erl_parse:parse_form(Tokens) of
+ {ok,{attribute,_Line,type,{mytype,TypeExpr,[]}}} ->
+ {ok, TypeExpr};
+ {error,_ErrorInfo} = Error ->
+ Error
+ end;
+ {error,ErrorInfo,_EndLocation} ->
+ {error, ErrorInfo}
+ end.
+
+-spec add_module(mod_name(), state()) -> rich_result(state()).
+add_module(Mod, #state{exp_types = ExpTypes} = State) ->
+ case dict:is_key(Mod, ExpTypes) of
+ true ->
+ {ok, State};
+ false ->
+ case get_code_and_exports(Mod) of
+ {ok,AbsCode,ModExpFuns} ->
+ RawModInfo = get_mod_info(Mod, AbsCode, ModExpFuns),
+ ModInfo = process_adts(Mod, RawModInfo),
+ {ok, store_mod_info(Mod, ModInfo, State)};
+ {error,Reason} ->
+ {error, {cant_load_code,Mod,Reason}}
+ end
+ end.
+
+%% @private
+-spec get_exp_info(mod_name()) -> rich_result2(mod_exp_types(),mod_exp_funs()).
+get_exp_info(Mod) ->
+ case get_code_and_exports(Mod) of
+ {ok,AbsCode,ModExpFuns} ->
+ RawModInfo = get_mod_info(Mod, AbsCode, ModExpFuns),
+ {ok, RawModInfo#mod_info.mod_exp_types, ModExpFuns};
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec get_code_and_exports(mod_name()) ->
+ rich_result2([abs_form()],mod_exp_funs()).
+get_code_and_exports(Mod) ->
+ case code:get_object_code(Mod) of
+ {Mod, ObjBin, _ObjFileName} ->
+ case get_chunks(ObjBin) of
+ {ok,_AbsCode,_ModExpFuns} = Result ->
+ Result;
+ {error,Reason} ->
+ get_code_and_exports_from_source(Mod, Reason)
+ end;
+ error ->
+ get_code_and_exports_from_source(Mod, cant_find_object_file)
+ end.
+
+-spec get_code_and_exports_from_source(mod_name(), term()) ->
+ rich_result2([abs_form()],mod_exp_funs()).
+get_code_and_exports_from_source(Mod, ObjError) ->
+ SrcFileName = atom_to_list(Mod) ++ ?SRC_FILE_EXT,
+ case code:where_is_file(SrcFileName) of
+ FullSrcFileName when is_list(FullSrcFileName) ->
+ Opts = [binary,debug_info,return_errors,{d,'PROPER_REMOVE_PROPS'}],
+ case compile:file(FullSrcFileName, Opts) of
+ {ok,Mod,Binary} ->
+ get_chunks(Binary);
+ {error,Errors,_Warnings} ->
+ {error, {ObjError,{cant_compile_source_file,Errors}}}
+ end;
+ non_existing ->
+ {error, {ObjError,cant_find_source_file}}
+ end.
+
+-spec get_chunks(string() | binary()) ->
+ rich_result2([abs_form()],mod_exp_funs()).
+get_chunks(ObjFile) ->
+ case beam_lib:chunks(ObjFile, [abstract_code,exports]) of
+ {ok,{_Mod,[{abstract_code,AbsCodeChunk},{exports,ExpFunsList}]}} ->
+ case AbsCodeChunk of
+ {raw_abstract_v1,AbsCode} ->
+ %% HACK: Add a declaration for iolist() to every module
+ {ok, add_iolist(AbsCode), sets:from_list(ExpFunsList)};
+ no_abstract_code ->
+ {error, no_abstract_code};
+ _ ->
+ {error, unsupported_abstract_code_format}
+ end;
+ {error,beam_lib,Reason} ->
+ {error, Reason}
+ end.
+
+-spec add_iolist([abs_form()]) -> [abs_form()].
+add_iolist(Forms) ->
+ IOListDef =
+ {type,0,maybe_improper_list,
+ [{type,0,union,[{type,0,byte,[]},{type,0,binary,[]},
+ {type,0,iolist,[]}]},
+ {type,0,binary,[]}]},
+ IOListDecl = {attribute,0,type,{iolist,IOListDef,[]}},
+ [IOListDecl | Forms].
+
+-spec get_mod_info(mod_name(), [abs_form()], mod_exp_funs()) -> mod_info().
+get_mod_info(Mod, AbsCode, ModExpFuns) ->
+ StartModInfo = #mod_info{mod_exp_funs = ModExpFuns},
+ ImmModInfo = lists:foldl(fun add_mod_info/2, StartModInfo, AbsCode),
+ #mod_info{mod_specs = AllModSpecs} = ImmModInfo,
+ IsExported = fun(FunRef,_FunRepr) -> sets:is_element(FunRef,ModExpFuns) end,
+ ModExpSpecs = dict:filter(IsExported, AllModSpecs),
+ ModInfo = ImmModInfo#mod_info{mod_specs = ModExpSpecs},
+ case orddict:find(Mod, ?HARD_ADT_MODS) of
+ {ok,ModADTs} ->
+ #mod_info{mod_exp_types = ModExpTypes, mod_types = ModTypes,
+ mod_opaques = ModOpaques} = ModInfo,
+ ModADTsSet =
+ sets:from_list([ImmTypeRef
+ || {ImmTypeRef,_HardADTRepr} <- ModADTs]),
+ NewModExpTypes = sets:union(ModExpTypes, ModADTsSet),
+ NewModTypes = lists:foldl(fun store_hard_adt/2, ModTypes, ModADTs),
+ NewModOpaques = sets:union(ModOpaques, ModADTsSet),
+ ModInfo#mod_info{mod_exp_types = NewModExpTypes,
+ mod_types = NewModTypes,
+ mod_opaques = NewModOpaques};
+ error ->
+ ModInfo
+ end.
+
+-spec store_hard_adt({imm_type_ref(),hard_adt_repr()}, mod_types()) ->
+ mod_types().
+store_hard_adt({_ImmTypeRef,already_declared}, ModTypes) ->
+ ModTypes;
+store_hard_adt({{Name,Arity},{TypeForm,VarNames}}, ModTypes) ->
+ TypeRef = {type,Name,Arity},
+ TypeRepr = {abs_type,TypeForm,VarNames,not_symb},
+ dict:store(TypeRef, TypeRepr, ModTypes).
+
+-spec add_mod_info(abs_form(), mod_info()) -> mod_info().
+add_mod_info({attribute,_Line,export_type,TypesList},
+ #mod_info{mod_exp_types = ModExpTypes} = ModInfo) ->
+ NewModExpTypes = sets:union(sets:from_list(TypesList), ModExpTypes),
+ ModInfo#mod_info{mod_exp_types = NewModExpTypes};
+add_mod_info({attribute,_Line,type,{{record,RecName},Fields,[]}},
+ #mod_info{mod_types = ModTypes} = ModInfo) ->
+ FieldInfo = [process_rec_field(F) || F <- Fields],
+ NewModTypes = dict:store({record,RecName,0}, {abs_record,FieldInfo},
+ ModTypes),
+ ModInfo#mod_info{mod_types = NewModTypes};
+add_mod_info({attribute,Line,record,{RecName,Fields}},
+ #mod_info{mod_types = ModTypes} = ModInfo) ->
+ case dict:is_key(RecName, ModTypes) of
+ true ->
+ ModInfo;
+ false -> % fake an opaque term by using the same Line as annotation
+ TypedRecord = {attribute,Line,type,{{record,RecName},Fields,[]}},
+ add_mod_info(TypedRecord, ModInfo)
+ end;
+add_mod_info({attribute,_Line,Kind,{Name,TypeForm,VarForms}},
+ #mod_info{mod_types = ModTypes,
+ mod_opaques = ModOpaques} = ModInfo)
+ when Kind =:= type; Kind =:= opaque ->
+ Arity = length(VarForms),
+ VarNames = [V || {var,_,V} <- VarForms],
+ %% TODO: No check whether variables are different, or non-'_'.
+ NewModTypes = dict:store({type,Name,Arity},
+ {abs_type,TypeForm,VarNames,not_symb}, ModTypes),
+ NewModOpaques =
+ case Kind of
+ type -> ModOpaques;
+ opaque -> sets:add_element({Name,Arity}, ModOpaques)
+ end,
+ ModInfo#mod_info{mod_types = NewModTypes, mod_opaques = NewModOpaques};
+add_mod_info({attribute,_Line,spec,{RawFunRef,[RawFirstClause | _Rest]}},
+ #mod_info{mod_specs = ModSpecs} = ModInfo) ->
+ FunRef = case RawFunRef of
+ {_Mod,Name,Arity} -> {Name,Arity};
+ {_Name,_Arity} = F -> F
+ end,
+ %% TODO: We just take the first function clause.
+ FirstClause = process_fun_clause(RawFirstClause),
+ NewModSpecs = dict:store(FunRef, FirstClause, ModSpecs),
+ ModInfo#mod_info{mod_specs = NewModSpecs};
+add_mod_info(_Form, ModInfo) ->
+ ModInfo.
+
+-spec process_rec_field(abs_rec_field()) -> {field_name(),abs_type()}.
+process_rec_field({record_field,_,{atom,_,FieldName}}) ->
+ {FieldName, {type,0,any,[]}};
+process_rec_field({record_field,_,{atom,_,FieldName},_Initialization}) ->
+ {FieldName, {type,0,any,[]}};
+process_rec_field({typed_record_field,RecField,FieldType}) ->
+ {FieldName,_} = process_rec_field(RecField),
+ {FieldName, FieldType}.
+
+-spec process_fun_clause(abs_type()) -> fun_clause_repr().
+process_fun_clause({type,_,'fun',[{type,_,product,Domain},Range]}) ->
+ {Domain, Range};
+process_fun_clause({type,_,bounded_fun,[MainClause,Constraints]}) ->
+ {RawDomain,RawRange} = process_fun_clause(MainClause),
+ VarSubsts = [{V,T} || {type,_,constraint,
+ [{atom,_,is_subtype},[{var,_,V},T]]} <- Constraints,
+ V =/= '_'],
+ VarSubstsDict = dict:from_list(VarSubsts),
+ Domain = [update_vars(A, VarSubstsDict, false) || A <- RawDomain],
+ Range = update_vars(RawRange, VarSubstsDict, false),
+ {Domain, Range}.
+
+-spec store_mod_info(mod_name(), mod_info(), state()) -> state().
+store_mod_info(Mod, #mod_info{mod_exp_types = ModExpTypes, mod_types = ModTypes,
+ mod_specs = ImmModExpSpecs},
+ #state{exp_types = ExpTypes, types = Types,
+ exp_specs = ExpSpecs} = State) ->
+ NewExpTypes = dict:store(Mod, ModExpTypes, ExpTypes),
+ NewTypes = dict:store(Mod, ModTypes, Types),
+ ModExpSpecs = dict:map(fun unbound_to_any/2, ImmModExpSpecs),
+ NewExpSpecs = dict:store(Mod, ModExpSpecs, ExpSpecs),
+ State#state{exp_types = NewExpTypes, types = NewTypes,
+ exp_specs = NewExpSpecs}.
+
+-spec unbound_to_any(fun_ref(), fun_repr()) -> fun_repr().
+unbound_to_any(_FunRef, {Domain,Range}) ->
+ EmptySubstsDict = dict:new(),
+ NewDomain = [update_vars(A,EmptySubstsDict,true) || A <- Domain],
+ NewRange = update_vars(Range, EmptySubstsDict, true),
+ {NewDomain, NewRange}.
+
+
+%%------------------------------------------------------------------------------
+%% ADT translation functions
+%%------------------------------------------------------------------------------
+
+-spec process_adts(mod_name(), mod_info()) -> mod_info().
+process_adts(Mod,
+ #mod_info{mod_exp_types = ModExpTypes, mod_opaques = ModOpaques,
+ mod_specs = ModExpSpecs} = ModInfo) ->
+ %% TODO: No warning on unexported opaques.
+ case sets:to_list(sets:intersection(ModExpTypes,ModOpaques)) of
+ [] ->
+ ModInfo;
+ ModADTs ->
+ %% TODO: No warning on unexported API functions.
+ ModExpSpecsList = [{Name,Domain,Range}
+ || {{Name,_Arity},{Domain,Range}}
+ <- dict:to_list(ModExpSpecs)],
+ AddADT = fun(ADT,Acc) -> add_adt(Mod,ADT,Acc,ModExpSpecsList) end,
+ lists:foldl(AddADT, ModInfo, ModADTs)
+ end.
+
+-spec add_adt(mod_name(), imm_type_ref(), mod_info(), [proc_fun_ref()]) ->
+ mod_info().
+add_adt(Mod, {Name,Arity}, #mod_info{mod_types = ModTypes} = ModInfo,
+ ModExpFunSpecs) ->
+ ADTRef = {type,Name,Arity},
+ {abs_type,InternalRepr,VarNames,not_symb} = dict:fetch(ADTRef, ModTypes),
+ FullADTRef = {Mod,Name,Arity},
+ %% TODO: No warning on unsuitable range.
+ SymbCalls1 = [get_symb_call(FullADTRef,Spec) || Spec <- ModExpFunSpecs],
+ %% TODO: No warning on bad use of variables.
+ SymbCalls2 = [fix_vars(FullADTRef,Call,RangeVars,VarNames)
+ || {ok,Call,RangeVars} <- SymbCalls1],
+ case [Call || {ok,Call} <- SymbCalls2] of
+ [] ->
+ %% TODO: No warning on no acceptable spec.
+ ModInfo;
+ SymbCalls3 ->
+ NewADTRepr = {abs_type,{type,0,union,SymbCalls3},VarNames,
+ {orig_abs,InternalRepr}},
+ NewModTypes = dict:store(ADTRef, NewADTRepr, ModTypes),
+ ModInfo#mod_info{mod_types = NewModTypes}
+ end.
+
+-spec get_symb_call(full_imm_type_ref(), proc_fun_ref()) ->
+ tagged_result2(abs_type(),[var_name()]).
+get_symb_call({Mod,_TypeName,_Arity} = FullADTRef, {FunName,Domain,Range}) ->
+ A = ?anno(0),
+ BaseCall = {type,A,tuple,[{atom,A,'$call'},{atom,A,Mod},{atom,A,FunName},
+ {type,A,'$fixed_list',Domain}]},
+ unwrap_range(FullADTRef, BaseCall, Range, false).
+
+-spec unwrap_range(full_imm_type_ref(), abs_type() | next_step(), abs_type(),
+ boolean()) ->
+ tagged_result2(abs_type() | next_step(),[var_name()]).
+unwrap_range(FullADTRef, Call, {paren_type,_,[Type]}, TestRun) ->
+ unwrap_range(FullADTRef, Call, Type, TestRun);
+unwrap_range(FullADTRef, Call, {ann_type,_,[_Var,Type]}, TestRun) ->
+ unwrap_range(FullADTRef, Call, Type, TestRun);
+unwrap_range(FullADTRef, Call, {type,_,list,[ElemType]}, TestRun) ->
+ unwrap_list(FullADTRef, Call, ElemType, TestRun);
+unwrap_range(FullADTRef, Call, {type,_,maybe_improper_list,[Cont,_Term]},
+ TestRun) ->
+ unwrap_list(FullADTRef, Call, Cont, TestRun);
+unwrap_range(FullADTRef, Call, {type,_,nonempty_list,[ElemType]}, TestRun) ->
+ unwrap_list(FullADTRef, Call, ElemType, TestRun);
+unwrap_range(FullADTRef, Call, {type,_,nonempty_improper_list,[Cont,_Term]},
+ TestRun) ->
+ unwrap_list(FullADTRef, Call, Cont, TestRun);
+unwrap_range(FullADTRef, Call,
+ {type,_,nonempty_maybe_improper_list,[Cont,_Term]}, TestRun) ->
+ unwrap_list(FullADTRef, Call, Cont, TestRun);
+unwrap_range(_FullADTRef, _Call, {type,_,tuple,any}, _TestRun) ->
+ error;
+unwrap_range(FullADTRef, Call, {type,_,tuple,FieldForms}, TestRun) ->
+ Translates = fun(T) -> unwrap_range(FullADTRef,none,T,true) =/= error end,
+ case proper_arith:find_first(Translates, FieldForms) of
+ none ->
+ error;
+ {TargetPos,TargetElem} ->
+ Pattern = get_pattern(TargetPos, FieldForms),
+ case TestRun of
+ true ->
+ NewCall =
+ case Call of
+ none -> {match_with,Pattern};
+ _ -> Call
+ end,
+ {ok, NewCall, []};
+ false ->
+ AbsPattern = term_to_singleton_type(Pattern),
+ A = ?anno(0),
+ NewCall =
+ {type,A,tuple,
+ [{atom,A,'$call'},{atom,A,?MODULE},{atom,A,match},
+ {type,A,'$fixed_list',[AbsPattern,Call]}]},
+ unwrap_range(FullADTRef, NewCall, TargetElem, TestRun)
+ end
+ end;
+unwrap_range(FullADTRef, Call, {type,_,union,Choices}, TestRun) ->
+ TestedChoices = [unwrap_range(FullADTRef,none,C,true) || C <- Choices],
+ NotError = fun(error) -> false; (_) -> true end,
+ case proper_arith:find_first(NotError, TestedChoices) of
+ none ->
+ error;
+ {_ChoicePos,{ok,none,_RangeVars}} ->
+ error;
+ {ChoicePos,{ok,NextStep,_RangeVars}} ->
+ {A, [ChoiceElem|B]} = lists:split(ChoicePos-1, Choices),
+ OtherChoices = A ++ B,
+ DistinctChoice =
+ case NextStep of
+ take_head ->
+ fun cant_have_head/1;
+ {match_with,Pattern} ->
+ fun(C) -> cant_match(Pattern, C) end
+ end,
+ case {lists:all(DistinctChoice,OtherChoices), TestRun} of
+ {true,true} ->
+ {ok, NextStep, []};
+ {true,false} ->
+ unwrap_range(FullADTRef, Call, ChoiceElem, TestRun);
+ {false,_} ->
+ error
+ end
+ end;
+unwrap_range({_Mod,SameName,Arity}, Call, {type,_,SameName,ArgForms},
+ _TestRun) ->
+ RangeVars = [V || {var,_,V} <- ArgForms, V =/= '_'],
+ case length(ArgForms) =:= Arity andalso length(RangeVars) =:= Arity of
+ true -> {ok, Call, RangeVars};
+ false -> error
+ end;
+unwrap_range({SameMod,SameName,_Arity} = FullADTRef, Call,
+ {remote_type,_,[{atom,_,SameMod},{atom,_,SameName},ArgForms]},
+ TestRun) ->
+ unwrap_range(FullADTRef, Call, {type,?anno(0),SameName,ArgForms}, TestRun);
+unwrap_range(_FullADTRef, _Call, _Range, _TestRun) ->
+ error.
+
+-spec unwrap_list(full_imm_type_ref(), abs_type() | next_step(), abs_type(),
+ boolean()) ->
+ tagged_result2(abs_type() | next_step(),[var_name()]).
+unwrap_list(FullADTRef, Call, HeadType, TestRun) ->
+ NewCall =
+ case TestRun of
+ true ->
+ case Call of
+ none -> take_head;
+ _ -> Call
+ end;
+ false ->
+ {type,0,tuple,[{atom,0,'$call'},{atom,0,erlang},{atom,0,hd},
+ {type,0,'$fixed_list',[Call]}]}
+ end,
+ unwrap_range(FullADTRef, NewCall, HeadType, TestRun).
+
+-spec fix_vars(full_imm_type_ref(), abs_type(), [var_name()], [var_name()]) ->
+ tagged_result(abs_type()).
+fix_vars(FullADTRef, Call, RangeVars, VarNames) ->
+ NotAnyVar = fun(V) -> V =/= '_' end,
+ case no_duplicates(VarNames) andalso lists:all(NotAnyVar,VarNames) of
+ true ->
+ RawUsedVars =
+ collect_vars(FullADTRef, Call, [[V] || V <- RangeVars]),
+ UsedVars = [lists:usort(L) || L <- RawUsedVars],
+ case correct_var_use(UsedVars) of
+ true ->
+ PairAll = fun(L,Y) -> [{X,{var,0,Y}} || X <- L] end,
+ VarSubsts =
+ lists:flatten(lists:zipwith(PairAll,UsedVars,VarNames)),
+ VarSubstsDict = dict:from_list(VarSubsts),
+ {ok, update_vars(Call,VarSubstsDict,true)};
+ false ->
+ error
+ end;
+ false ->
+ error
+ end.
+
+-spec no_duplicates(list()) -> boolean().
+no_duplicates(L) ->
+ length(lists:usort(L)) =:= length(L).
+
+-spec correct_var_use([[var_name() | 0]]) -> boolean().
+correct_var_use(UsedVars) ->
+ NoNonVarArgs = fun([0|_]) -> false; (_) -> true end,
+ lists:all(NoNonVarArgs, UsedVars)
+ andalso no_duplicates(lists:flatten(UsedVars)).
+
+-spec collect_vars(full_imm_type_ref(), abs_type(), [[var_name() | 0]]) ->
+ [[var_name() | 0]].
+collect_vars(FullADTRef, {paren_type,_,[Type]}, UsedVars) ->
+ collect_vars(FullADTRef, Type, UsedVars);
+collect_vars(FullADTRef, {ann_type,_,[_Var,Type]}, UsedVars) ->
+ collect_vars(FullADTRef, Type, UsedVars);
+collect_vars(_FullADTRef, {type,_,tuple,any}, UsedVars) ->
+ UsedVars;
+collect_vars({_Mod,SameName,Arity} = FullADTRef, {type,_,SameName,ArgForms},
+ UsedVars) ->
+ case length(ArgForms) =:= Arity of
+ true ->
+ VarArgs = [V || {var,_,V} <- ArgForms, V =/= '_'],
+ case length(VarArgs) =:= Arity of
+ true ->
+ AddToList = fun(X,L) -> [X | L] end,
+ lists:zipwith(AddToList, VarArgs, UsedVars);
+ false ->
+ [[0|L] || L <- UsedVars]
+ end;
+ false ->
+ multi_collect_vars(FullADTRef, ArgForms, UsedVars)
+ end;
+collect_vars(FullADTRef, {type,_,_Name,ArgForms}, UsedVars) ->
+ multi_collect_vars(FullADTRef, ArgForms, UsedVars);
+collect_vars({SameMod,SameName,_Arity} = FullADTRef,
+ {remote_type,_,[{atom,_,SameMod},{atom,_,SameName},ArgForms]},
+ UsedVars) ->
+ collect_vars(FullADTRef, {type,?anno(0),SameName,ArgForms}, UsedVars);
+collect_vars(FullADTRef, {remote_type,_,[_RemModForm,_NameForm,ArgForms]},
+ UsedVars) ->
+ multi_collect_vars(FullADTRef, ArgForms, UsedVars);
+collect_vars(_FullADTRef, _Call, UsedVars) ->
+ UsedVars.
+
+-spec multi_collect_vars(full_imm_type_ref(), [abs_type()],
+ [[var_name() | 0]]) -> [[var_name() | 0]].
+multi_collect_vars({_Mod,_Name,Arity} = FullADTRef, Forms, UsedVars) ->
+ NoUsedVars = lists:duplicate(Arity, []),
+ MoreUsedVars = [collect_vars(FullADTRef,T,NoUsedVars) || T <- Forms],
+ CombineVars = fun(L1,L2) -> lists:zipwith(fun erlang:'++'/2, L1, L2) end,
+ lists:foldl(CombineVars, UsedVars, MoreUsedVars).
+
+-ifdef(NO_MODULES_IN_OPAQUES).
+-type var_substs_dict() :: dict().
+-else.
+-type var_substs_dict() :: dict:dict(var_name(),abs_type()).
+-endif.
+-spec update_vars(abs_type(), var_substs_dict(), boolean()) -> abs_type().
+update_vars({paren_type,Line,[Type]}, VarSubstsDict, UnboundToAny) ->
+ {paren_type, Line, [update_vars(Type,VarSubstsDict,UnboundToAny)]};
+update_vars({ann_type,Line,[Var,Type]}, VarSubstsDict, UnboundToAny) ->
+ {ann_type, Line, [Var,update_vars(Type,VarSubstsDict,UnboundToAny)]};
+update_vars({var,Line,VarName} = Call, VarSubstsDict, UnboundToAny) ->
+ case dict:find(VarName, VarSubstsDict) of
+ {ok,SubstType} ->
+ SubstType;
+ error when UnboundToAny =:= false ->
+ Call;
+ error when UnboundToAny =:= true ->
+ {type,Line,any,[]}
+ end;
+update_vars({remote_type,Line,[RemModForm,NameForm,ArgForms]}, VarSubstsDict,
+ UnboundToAny) ->
+ NewArgForms = [update_vars(A,VarSubstsDict,UnboundToAny) || A <- ArgForms],
+ {remote_type, Line, [RemModForm,NameForm,NewArgForms]};
+update_vars({T,_,tuple,any} = Call, _VarSubstsDict, _UnboundToAny) when ?IS_TYPE_TAG(T) ->
+ Call;
+update_vars({T,Line,Name,ArgForms}, VarSubstsDict, UnboundToAny) when ?IS_TYPE_TAG(T) ->
+ NewArgForms = [update_vars(A,VarSubstsDict,UnboundToAny) || A <- ArgForms],
+ {T, Line, Name, NewArgForms};
+update_vars(Call, _VarSubstsDict, _UnboundToAny) ->
+ Call.
+
+
+%%------------------------------------------------------------------------------
+%% Match-related functions
+%%------------------------------------------------------------------------------
+
+-spec get_pattern(position(), [abs_type()]) -> pattern().
+get_pattern(TargetPos, FieldForms) ->
+ {0,RevPattern} = lists:foldl(fun add_field/2, {TargetPos,[]}, FieldForms),
+ list_to_tuple(lists:reverse(RevPattern)).
+
+-spec add_field(abs_type(), {non_neg_integer(),[pat_field()]}) ->
+ {non_neg_integer(),[pat_field(),...]}.
+add_field(_Type, {1,Acc}) ->
+ {0, [1|Acc]};
+add_field({atom,_,Tag}, {Left,Acc}) ->
+ {erlang:max(0,Left-1), [Tag|Acc]};
+add_field(_Type, {Left,Acc}) ->
+ {erlang:max(0,Left-1), [0|Acc]}.
+
+%% @private
+-spec match(pattern(), tuple()) -> term().
+match(Pattern, Term) when tuple_size(Pattern) =:= tuple_size(Term) ->
+ match(tuple_to_list(Pattern), tuple_to_list(Term), none, false);
+match(_Pattern, _Term) ->
+ throw(no_match).
+
+-spec match([pat_field()], [term()], 'none' | {'ok',T}, boolean()) -> T.
+match([], [], {ok,Target}, _TypeMode) ->
+ Target;
+match([0|PatRest], [_|ToMatchRest], Acc, TypeMode) ->
+ match(PatRest, ToMatchRest, Acc, TypeMode);
+match([1|PatRest], [Target|ToMatchRest], none, TypeMode) ->
+ match(PatRest, ToMatchRest, {ok,Target}, TypeMode);
+match([Tag|PatRest], [X|ToMatchRest], Acc, TypeMode) when is_atom(Tag) ->
+ MatchesTag =
+ case TypeMode of
+ true -> can_be_tag(Tag, X);
+ false -> Tag =:= X
+ end,
+ case MatchesTag of
+ true -> match(PatRest, ToMatchRest, Acc, TypeMode);
+ false -> throw(no_match)
+ end.
+
+%% CAUTION: these must be sorted
+-define(NON_ATOM_TYPES,
+ [arity,binary,bitstring,byte,char,float,'fun',function,integer,iodata,
+ iolist,list,maybe_improper_list,mfa,neg_integer,nil,no_return,
+ non_neg_integer,none,nonempty_improper_list,nonempty_list,
+ nonempty_maybe_improper_list,nonempty_string,number,pid,port,
+ pos_integer,range,record,reference,string,tuple]).
+-define(NON_TUPLE_TYPES,
+ [arity,atom,binary,bitstring,bool,boolean,byte,char,float,'fun',
+ function,identifier,integer,iodata,iolist,list,maybe_improper_list,
+ neg_integer,nil,no_return,node,non_neg_integer,none,
+ nonempty_improper_list,nonempty_list,nonempty_maybe_improper_list,
+ nonempty_string,number,pid,port,pos_integer,range,reference,string,
+ timeout]).
+-define(NO_HEAD_TYPES,
+ [arity,atom,binary,bitstring,bool,boolean,byte,char,float,'fun',
+ function,identifier,integer,mfa,module,neg_integer,nil,no_return,node,
+ non_neg_integer,none,number,pid,port,pos_integer,range,record,
+ reference,timeout,tuple]).
+
+-spec can_be_tag(atom(), abs_type()) -> boolean().
+can_be_tag(Tag, {ann_type,_,[_Var,Type]}) ->
+ can_be_tag(Tag, Type);
+can_be_tag(Tag, {paren_type,_,[Type]}) ->
+ can_be_tag(Tag, Type);
+can_be_tag(Tag, {atom,_,Atom}) ->
+ Tag =:= Atom;
+can_be_tag(_Tag, {integer,_,_Int}) ->
+ false;
+can_be_tag(_Tag, {op,_,_Op,_Arg}) ->
+ false;
+can_be_tag(_Tag, {op,_,_Op,_Arg1,_Arg2}) ->
+ false;
+can_be_tag(Tag, {type,_,BName,[]}) when BName =:= bool; BName =:= boolean ->
+ is_boolean(Tag);
+can_be_tag(Tag, {type,_,timeout,[]}) ->
+ Tag =:= infinity;
+can_be_tag(Tag, {type,_,union,Choices}) ->
+ lists:any(fun(C) -> can_be_tag(Tag,C) end, Choices);
+can_be_tag(_Tag, {type,_,Name,_Args}) ->
+ not ordsets:is_element(Name, ?NON_ATOM_TYPES);
+can_be_tag(_Tag, _Type) ->
+ true.
+
+-spec cant_match(pattern(), abs_type()) -> boolean().
+cant_match(Pattern, {ann_type,_,[_Var,Type]}) ->
+ cant_match(Pattern, Type);
+cant_match(Pattern, {paren_type,_,[Type]}) ->
+ cant_match(Pattern, Type);
+cant_match(_Pattern, {atom,_,_Atom}) ->
+ true;
+cant_match(_Pattern, {integer,_,_Int}) ->
+ true;
+cant_match(_Pattern, {op,_,_Op,_Arg}) ->
+ true;
+cant_match(_Pattern, {op,_,_Op,_Arg1,_Arg2}) ->
+ true;
+cant_match(Pattern, {type,Anno,mfa,[]}) ->
+ MFA_Ts = [{type,Anno,atom,[]}, {type,Anno,atom,[]}, {type,Anno,arity,[]}],
+ cant_match(Pattern, {type,Anno,tuple,MFA_Ts});
+cant_match(Pattern, {type,_,union,Choices}) ->
+ lists:all(fun(C) -> cant_match(Pattern,C) end, Choices);
+cant_match(_Pattern, {type,_,tuple,any}) ->
+ false;
+cant_match(Pattern, {type,_,tuple,Fields}) ->
+ tuple_size(Pattern) =/= length(Fields) orelse
+ try match(tuple_to_list(Pattern), Fields, none, true) of
+ _ -> false
+ catch
+ throw:no_match -> true
+ end;
+cant_match(_Pattern, {type,_,Name,_Args}) ->
+ ordsets:is_element(Name, ?NON_TUPLE_TYPES);
+cant_match(_Pattern, _Type) ->
+ false.
+
+-spec cant_have_head(abs_type()) -> boolean().
+cant_have_head({ann_type,_,[_Var,Type]}) ->
+ cant_have_head(Type);
+cant_have_head({paren_type,_,[Type]}) ->
+ cant_have_head(Type);
+cant_have_head({atom,_,_Atom}) ->
+ true;
+cant_have_head({integer,_,_Int}) ->
+ true;
+cant_have_head({op,_,_Op,_Arg}) ->
+ true;
+cant_have_head({op,_,_Op,_Arg1,_Arg2}) ->
+ true;
+cant_have_head({type,_,union,Choices}) ->
+ lists:all(fun cant_have_head/1, Choices);
+cant_have_head({type,_,Name,_Args}) ->
+ ordsets:is_element(Name, ?NO_HEAD_TYPES);
+cant_have_head(_Type) ->
+ false.
+
+%% Only covers atoms, integers and tuples, i.e. those that can be specified
+%% through singleton types.
+-spec term_to_singleton_type(atom() | integer()
+ | loose_tuple(atom() | integer())) -> abs_type().
+term_to_singleton_type(Atom) when is_atom(Atom) ->
+ {atom,?anno(0),Atom};
+term_to_singleton_type(Int) when is_integer(Int), Int >= 0 ->
+ {integer,?anno(0),Int};
+term_to_singleton_type(Int) when is_integer(Int), Int < 0 ->
+ A = ?anno(0),
+ {op,A,'-',{integer,A,-Int}};
+term_to_singleton_type(Tuple) when is_tuple(Tuple) ->
+ Fields = tuple_to_list(Tuple),
+ {type,?anno(0),tuple,[term_to_singleton_type(F) || F <- Fields]}.
+
+
+%%------------------------------------------------------------------------------
+%% Instance testing functions
+%%------------------------------------------------------------------------------
+
+%% CAUTION: this must be sorted
+-define(EQUIV_TYPES,
+ [{arity, {type,0,range,[{integer,0,0},{integer,0,255}]}},
+ {bool, {type,0,boolean,[]}},
+ {byte, {type,0,range,[{integer,0,0},{integer,0,255}]}},
+ {char, {type,0,range,[{integer,0,0},{integer,0,16#10ffff}]}},
+ {function, {type,0,'fun',[]}},
+ {identifier, {type,0,union,[{type,0,pid,[]},{type,0,port,[]},
+ {type,0,reference,[]}]}},
+ {iodata, {type,0,union,[{type,0,binary,[]},{type,0,iolist,[]}]}},
+ {iolist, {type,0,maybe_improper_list,
+ [{type,0,union,[{type,0,byte,[]},{type,0,binary,[]},
+ {type,0,iolist,[]}]},
+ {type,0,binary,[]}]}},
+ {list, {type,0,list,[{type,0,any,[]}]}},
+ {maybe_improper_list, {type,0,maybe_improper_list,[{type,0,any,[]},
+ {type,0,any,[]}]}},
+ {mfa, {type,0,tuple,[{type,0,atom,[]},{type,0,atom,[]},
+ {type,0,arity,[]}]}},
+ {node, {type,0,atom,[]}},
+ {nonempty_list, {type,0,nonempty_list,[{type,0,any,[]}]}},
+ {nonempty_maybe_improper_list, {type,0,nonempty_maybe_improper_list,
+ [{type,0,any,[]},{type,0,any,[]}]}},
+ {nonempty_string, {type,0,nonempty_list,[{type,0,char,[]}]}},
+ {string, {type,0,list,[{type,0,char,[]}]}},
+ {term, {type,0,any,[]}},
+ {timeout, {type,0,union,[{atom,0,infinity},
+ {type,0,non_neg_integer,[]}]}}]).
+
+%% @private
+%% TODO: Most of these functions accept an extended form of abs_type(), namely
+%% the addition of a custom wrapper: {'from_mod',mod_name(),...}
+-spec is_instance(term(), mod_name(), abs_type()) -> boolean().
+is_instance(X, Mod, TypeForm) ->
+ is_instance(X, Mod, TypeForm, []).
+
+-spec is_instance(term(), mod_name(), abs_type(), imm_stack()) -> boolean().
+is_instance(X, _Mod, {from_mod,OrigMod,Type}, Stack) ->
+ is_instance(X, OrigMod, Type, Stack);
+is_instance(_X, _Mod, {var,_,'_'}, _Stack) ->
+ true;
+is_instance(_X, _Mod, {var,_,Name}, _Stack) ->
+ %% All unconstrained spec vars have been replaced by 'any()' and we always
+ %% replace the variables on the RHS of types before recursing into them.
+ %% Provided that '-type' declarations contain no unbound variables, we
+ %% don't expect to find any non-'_' variables while recursing.
+ throw({'$typeserver',{unbound_var_in_type_declaration,Name}});
+is_instance(X, Mod, {ann_type,_,[_Var,Type]}, Stack) ->
+ is_instance(X, Mod, Type, Stack);
+is_instance(X, Mod, {paren_type,_,[Type]}, Stack) ->
+ is_instance(X, Mod, Type, Stack);
+is_instance(X, Mod, {remote_type,_,[{atom,_,RemMod},{atom,_,Name},ArgForms]},
+ Stack) ->
+ is_custom_instance(X, Mod, RemMod, Name, ArgForms, true, Stack);
+is_instance(SameAtom, _Mod, {atom,_,SameAtom}, _Stack) ->
+ true;
+is_instance(SameInt, _Mod, {integer,_,SameInt}, _Stack) ->
+ true;
+is_instance(X, _Mod, {op,_,_Op,_Arg} = Expr, _Stack) ->
+ is_int_const(X, Expr);
+is_instance(X, _Mod, {op,_,_Op,_Arg1,_Arg2} = Expr, _Stack) ->
+ is_int_const(X, Expr);
+is_instance(_X, _Mod, {type,_,any,[]}, _Stack) ->
+ true;
+is_instance(X, _Mod, {type,_,atom,[]}, _Stack) ->
+ is_atom(X);
+is_instance(X, _Mod, {type,_,binary,[]}, _Stack) ->
+ is_binary(X);
+is_instance(X, _Mod, {type,_,binary,[BaseExpr,UnitExpr]}, _Stack) ->
+ %% <<_:X,_:_*Y>> means "bitstrings of X + k*Y bits, k >= 0"
+ case eval_int(BaseExpr) of
+ {ok,Base} when Base >= 0 ->
+ case eval_int(UnitExpr) of
+ {ok,Unit} when Unit >= 0 ->
+ case is_bitstring(X) of
+ true ->
+ BitSizeX = bit_size(X),
+ case Unit =:= 0 of
+ true ->
+ BitSizeX =:= Base;
+ false ->
+ BitSizeX >= Base
+ andalso
+ (BitSizeX - Base) rem Unit =:= 0
+ end;
+ false -> false
+ end;
+ _ ->
+ abs_expr_error(invalid_unit, UnitExpr)
+ end;
+ _ ->
+ abs_expr_error(invalid_base, BaseExpr)
+ end;
+is_instance(X, _Mod, {type,_,bitstring,[]}, _Stack) ->
+ is_bitstring(X);
+is_instance(X, _Mod, {type,_,boolean,[]}, _Stack) ->
+ is_boolean(X);
+is_instance(X, _Mod, {type,_,float,[]}, _Stack) ->
+ is_float(X);
+is_instance(X, _Mod, {type,_,'fun',[]}, _Stack) ->
+ is_function(X);
+%% TODO: how to check range type? random inputs? special case for 0-arity?
+is_instance(X, _Mod, {type,_,'fun',[{type,_,any,[]},_Range]}, _Stack) ->
+ is_function(X);
+is_instance(X, _Mod, {type,_,'fun',[{type,_,product,Domain},_Range]}, _Stack) ->
+ is_function(X, length(Domain));
+is_instance(X, _Mod, {type,_,integer,[]}, _Stack) ->
+ is_integer(X);
+is_instance(X, Mod, {type,_,list,[Type]}, _Stack) ->
+ list_test(X, Mod, Type, dummy, true, true, false);
+is_instance(X, Mod, {type,_,maybe_improper_list,[Cont,Term]}, _Stack) ->
+ list_test(X, Mod, Cont, Term, true, true, true);
+is_instance(X, _Mod, {type,_,module,[]}, _Stack) ->
+ is_atom(X) orelse
+ is_tuple(X) andalso X =/= {} andalso is_atom(element(1,X));
+is_instance([], _Mod, {type,_,nil,[]}, _Stack) ->
+ true;
+is_instance(X, _Mod, {type,_,neg_integer,[]}, _Stack) ->
+ is_integer(X) andalso X < 0;
+is_instance(X, _Mod, {type,_,non_neg_integer,[]}, _Stack) ->
+ is_integer(X) andalso X >= 0;
+is_instance(X, Mod, {type,_,nonempty_list,[Type]}, _Stack) ->
+ list_test(X, Mod, Type, dummy, false, true, false);
+is_instance(X, Mod, {type,_,nonempty_improper_list,[Cont,Term]}, _Stack) ->
+ list_test(X, Mod, Cont, Term, false, false, true);
+is_instance(X, Mod, {type,_,nonempty_maybe_improper_list,[Cont,Term]},
+ _Stack) ->
+ list_test(X, Mod, Cont, Term, false, true, true);
+is_instance(X, _Mod, {type,_,number,[]}, _Stack) ->
+ is_number(X);
+is_instance(X, _Mod, {type,_,pid,[]}, _Stack) ->
+ is_pid(X);
+is_instance(X, _Mod, {type,_,port,[]}, _Stack) ->
+ is_port(X);
+is_instance(X, _Mod, {type,_,pos_integer,[]}, _Stack) ->
+ is_integer(X) andalso X > 0;
+is_instance(_X, _Mod, {type,_,product,_Elements}, _Stack) ->
+ throw({'$typeserver',{internal,product_in_is_instance}});
+is_instance(X, _Mod, {type,_,range,[LowExpr,HighExpr]}, _Stack) ->
+ case {eval_int(LowExpr),eval_int(HighExpr)} of
+ {{ok,Low},{ok,High}} when Low =< High ->
+ X >= Low andalso X =< High;
+ _ ->
+ abs_expr_error(invalid_range, LowExpr, HighExpr)
+ end;
+is_instance(X, Mod, {type,_,record,[{atom,_,Name} = NameForm | RawSubsts]},
+ Stack) ->
+ Substs = [{N,T} || {type,_,field_type,[{atom,_,N},T]} <- RawSubsts],
+ SubstsDict = dict:from_list(Substs),
+ case get_type_repr(Mod, {record,Name,0}, false) of
+ {ok,{abs_record,OrigFields}} ->
+ Fields = [case dict:find(FieldName, SubstsDict) of
+ {ok,NewFieldType} -> NewFieldType;
+ error -> OrigFieldType
+ end
+ || {FieldName,OrigFieldType} <- OrigFields],
+ is_instance(X, Mod, {type,?anno(0),tuple,[NameForm|Fields]}, Stack);
+ {error,Reason} ->
+ throw({'$typeserver',Reason})
+ end;
+is_instance(X, _Mod, {type,_,reference,[]}, _Stack) ->
+ is_reference(X);
+is_instance(X, _Mod, {type,_,tuple,any}, _Stack) ->
+ is_tuple(X);
+is_instance(X, Mod, {type,_,tuple,Fields}, _Stack) ->
+ is_tuple(X) andalso tuple_test(tuple_to_list(X), Mod, Fields);
+is_instance(X, Mod, {type,_,union,Choices}, Stack) ->
+ IsInstance = fun(Choice) -> is_instance(X,Mod,Choice,Stack) end,
+ lists:any(IsInstance, Choices);
+is_instance(X, Mod, {T,_,Name,[]}, Stack) when ?IS_TYPE_TAG(T) ->
+ case orddict:find(Name, ?EQUIV_TYPES) of
+ {ok,EquivType} ->
+ is_instance(X, Mod, EquivType, Stack);
+ error ->
+ is_maybe_hard_adt(X, Mod, Name, [], Stack)
+ end;
+is_instance(X, Mod, {T,_,Name,ArgForms}, Stack) when ?IS_TYPE_TAG(T) ->
+ is_maybe_hard_adt(X, Mod, Name, ArgForms, Stack);
+is_instance(_X, _Mod, _Type, _Stack) ->
+ false.
+
+-spec is_int_const(term(), abs_expr()) -> boolean().
+is_int_const(X, Expr) ->
+ case eval_int(Expr) of
+ {ok,Int} ->
+ X =:= Int;
+ error ->
+ abs_expr_error(invalid_int_const, Expr)
+ end.
+
+%% TODO: We implicitly add the '| []' at the termination of maybe_improper_list.
+%% TODO: We ignore a '[]' termination in improper_list.
+-spec list_test(term(), mod_name(), abs_type(), 'dummy' | abs_type(), boolean(),
+ boolean(), boolean()) -> boolean().
+list_test(X, Mod, Content, Termination, CanEmpty, CanProper, CanImproper) ->
+ is_list(X) andalso
+ list_rec(X, Mod, Content, Termination, CanEmpty, CanProper, CanImproper).
+
+-spec list_rec(term(), mod_name(), abs_type(), 'dummy' | abs_type(), boolean(),
+ boolean(), boolean()) -> boolean().
+list_rec([], _Mod, _Content, _Termination, CanEmpty, CanProper, _CanImproper) ->
+ CanEmpty andalso CanProper;
+list_rec([X | Rest], Mod, Content, Termination, _CanEmpty, CanProper,
+ CanImproper) ->
+ is_instance(X, Mod, Content, []) andalso
+ list_rec(Rest, Mod, Content, Termination, true, CanProper, CanImproper);
+list_rec(X, Mod, _Content, Termination, _CanEmpty, _CanProper, CanImproper) ->
+ CanImproper andalso is_instance(X, Mod, Termination, []).
+
+-spec tuple_test([term()], mod_name(), [abs_type()]) -> boolean().
+tuple_test([], _Mod, []) ->
+ true;
+tuple_test([X | XTail], Mod, [T | TTail]) ->
+ is_instance(X, Mod, T, []) andalso tuple_test(XTail, Mod, TTail);
+tuple_test(_, _Mod, _) ->
+ false.
+
+-spec is_maybe_hard_adt(term(), mod_name(), type_name(), [abs_type()],
+ imm_stack()) -> boolean().
+is_maybe_hard_adt(X, Mod, Name, ArgForms, Stack) ->
+ case orddict:find({Name,length(ArgForms)}, ?HARD_ADTS) of
+ {ok,ADTMod} ->
+ is_custom_instance(X, Mod, ADTMod, Name, ArgForms, true, Stack);
+ error ->
+ is_custom_instance(X, Mod, Mod, Name, ArgForms, false, Stack)
+ end.
+
+-spec is_custom_instance(term(), mod_name(), mod_name(), type_name(),
+ [abs_type()], boolean(), imm_stack()) -> boolean().
+is_custom_instance(X, Mod, RemMod, Name, RawArgForms, IsRemote, Stack) ->
+ ArgForms = case Mod =/= RemMod of
+ true -> [{from_mod,Mod,A} || A <- RawArgForms];
+ false -> RawArgForms
+ end,
+ Arity = length(ArgForms),
+ FullTypeRef = {RemMod,Name,Arity},
+ case lists:member(FullTypeRef, Stack) of
+ true ->
+ throw({'$typeserver',{self_reference,FullTypeRef}});
+ false ->
+ TypeRef = {type,Name,Arity},
+ AbsType = get_abs_type(RemMod, TypeRef, ArgForms, IsRemote),
+ is_instance(X, RemMod, AbsType, [FullTypeRef|Stack])
+ end.
+
+-spec get_abs_type(mod_name(), type_ref(), [abs_type()], boolean()) ->
+ abs_type().
+get_abs_type(RemMod, TypeRef, ArgForms, IsRemote) ->
+ case get_type_repr(RemMod, TypeRef, IsRemote) of
+ {ok,TypeRepr} ->
+ {FinalAbsType,SymbInfo,VarNames} =
+ case TypeRepr of
+ {cached,_FinType,FAT,SI} -> {FAT,SI,[]};
+ {abs_type,FAT,VN,SI} -> {FAT,SI,VN}
+ end,
+ AbsType =
+ case SymbInfo of
+ not_symb -> FinalAbsType;
+ {orig_abs,OrigAbsType} -> OrigAbsType
+ end,
+ VarSubstsDict = dict:from_list(lists:zip(VarNames,ArgForms)),
+ update_vars(AbsType, VarSubstsDict, false);
+ {error,Reason} ->
+ throw({'$typeserver',Reason})
+ end.
+
+-spec abs_expr_error(atom(), abs_expr()) -> no_return().
+abs_expr_error(ImmReason, Expr) ->
+ {error,Reason} = expr_error(ImmReason, Expr),
+ throw({'$typeserver',Reason}).
+
+-spec abs_expr_error(atom(), abs_expr(), abs_expr()) -> no_return().
+abs_expr_error(ImmReason, Expr1, Expr2) ->
+ {error,Reason} = expr_error(ImmReason, Expr1, Expr2),
+ throw({'$typeserver',Reason}).
+
+
+%%------------------------------------------------------------------------------
+%% Type translation functions
+%%------------------------------------------------------------------------------
+
+-spec convert(mod_name(), abs_type(), state()) ->
+ rich_result2(fin_type(),state()).
+convert(Mod, TypeForm, State) ->
+ case convert(Mod, TypeForm, State, [], dict:new()) of
+ {ok,{simple,Type},NewState} ->
+ {ok, Type, NewState};
+ {ok,{rec,_RecFun,_RecArgs},_NewState} ->
+ {error, {internal,rec_returned_to_toplevel}};
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec convert(mod_name(), abs_type(), state(), stack(), var_dict()) ->
+ rich_result2(ret_type(),state()).
+convert(Mod, {paren_type,_,[Type]}, State, Stack, VarDict) ->
+ convert(Mod, Type, State, Stack, VarDict);
+convert(Mod, {ann_type,_,[_Var,Type]}, State, Stack, VarDict) ->
+ convert(Mod, Type, State, Stack, VarDict);
+convert(_Mod, {var,_,'_'}, State, _Stack, _VarDict) ->
+ {ok, {simple,proper_types:any()}, State};
+convert(_Mod, {var,_,VarName}, State, _Stack, VarDict) ->
+ case dict:find(VarName, VarDict) of
+ %% TODO: do we need to check if we are at toplevel of a recursive?
+ {ok,RetType} -> {ok, RetType, State};
+ error -> {error, {unbound_var,VarName}}
+ end;
+convert(Mod, {remote_type,_,[{atom,_,RemMod},{atom,_,Name},ArgForms]}, State,
+ Stack, VarDict) ->
+ case prepare_for_remote(RemMod, Name, length(ArgForms), State) of
+ {ok,NewState} ->
+ convert_custom(Mod,RemMod,Name,ArgForms,NewState,Stack,VarDict);
+ {error,_Reason} = Error ->
+ Error
+ end;
+convert(_Mod, {atom,_,Atom}, State, _Stack, _VarDict) ->
+ {ok, {simple,proper_types:exactly(Atom)}, State};
+convert(_Mod, {integer,_,_Int} = IntExpr, State, _Stack, _VarDict) ->
+ convert_integer(IntExpr, State);
+convert(_Mod, {op,_,_Op,_Arg} = OpExpr, State, _Stack, _VarDict) ->
+ convert_integer(OpExpr, State);
+convert(_Mod, {op,_,_Op,_Arg1,_Arg2} = OpExpr, State, _Stack, _VarDict) ->
+ convert_integer(OpExpr, State);
+convert(_Mod, {type,_,binary,[BaseExpr,UnitExpr]}, State, _Stack, _VarDict) ->
+ %% <<_:X,_:_*Y>> means "bitstrings of X + k*Y bits, k >= 0"
+ case eval_int(BaseExpr) of
+ {ok,0} ->
+ case eval_int(UnitExpr) of
+ {ok,0} -> {ok, {simple,proper_types:exactly(<<>>)}, State};
+ {ok,1} -> {ok, {simple,proper_types:bitstring()}, State};
+ {ok,8} -> {ok, {simple,proper_types:binary()}, State};
+ {ok,N} when N > 0 ->
+ Gen = ?LET(L, proper_types:list(proper_types:bitstring(N)),
+ concat_bitstrings(L)),
+ {ok, {simple,Gen}, State};
+ _ -> expr_error(invalid_unit, UnitExpr)
+ end;
+ {ok,Base} when Base > 0 ->
+ Head = proper_types:bitstring(Base),
+ case eval_int(UnitExpr) of
+ {ok,0} -> {ok, {simple,Head}, State};
+ {ok,1} ->
+ Tail = proper_types:bitstring(),
+ {ok, {simple,concat_binary_gens(Head, Tail)}, State};
+ {ok,8} ->
+ Tail = proper_types:binary(),
+ {ok, {simple,concat_binary_gens(Head, Tail)}, State};
+ {ok,N} when N > 0 ->
+ Tail =
+ ?LET(L, proper_types:list(proper_types:bitstring(N)),
+ concat_bitstrings(L)),
+ {ok, {simple,concat_binary_gens(Head, Tail)}, State};
+ _ -> expr_error(invalid_unit, UnitExpr)
+ end;
+ _ ->
+ expr_error(invalid_base, BaseExpr)
+ end;
+convert(_Mod, {type,_,range,[LowExpr,HighExpr]}, State, _Stack, _VarDict) ->
+ case {eval_int(LowExpr),eval_int(HighExpr)} of
+ {{ok,Low},{ok,High}} when Low =< High ->
+ {ok, {simple,proper_types:integer(Low,High)}, State};
+ _ ->
+ expr_error(invalid_range, LowExpr, HighExpr)
+ end;
+convert(_Mod, {type,_,nil,[]}, State, _Stack, _VarDict) ->
+ {ok, {simple,proper_types:exactly([])}, State};
+convert(Mod, {type,_,list,[ElemForm]}, State, Stack, VarDict) ->
+ convert_list(Mod, false, ElemForm, State, Stack, VarDict);
+convert(Mod, {type,_,nonempty_list,[ElemForm]}, State, Stack, VarDict) ->
+ convert_list(Mod, true, ElemForm, State, Stack, VarDict);
+convert(_Mod, {type,_,nonempty_list,[]}, State, _Stack, _VarDict) ->
+ {ok, {simple,proper_types:non_empty(proper_types:list())}, State};
+convert(_Mod, {type,_,nonempty_string,[]}, State, _Stack, _VarDict) ->
+ {ok, {simple,proper_types:non_empty(proper_types:string())}, State};
+convert(_Mod, {type,_,tuple,any}, State, _Stack, _VarDict) ->
+ {ok, {simple,proper_types:tuple()}, State};
+convert(Mod, {type,_,tuple,ElemForms}, State, Stack, VarDict) ->
+ convert_tuple(Mod, ElemForms, false, State, Stack, VarDict);
+convert(Mod, {type,_,'$fixed_list',ElemForms}, State, Stack, VarDict) ->
+ convert_tuple(Mod, ElemForms, true, State, Stack, VarDict);
+convert(Mod, {type,_,record,[{atom,_,Name}|FieldForms]}, State, Stack,
+ VarDict) ->
+ convert_record(Mod, Name, FieldForms, State, Stack, VarDict);
+convert(Mod, {type,_,union,ChoiceForms}, State, Stack, VarDict) ->
+ convert_union(Mod, ChoiceForms, State, Stack, VarDict);
+convert(Mod, {type,_,'fun',[{type,_,product,Domain},Range]}, State, Stack,
+ VarDict) ->
+ convert_fun(Mod, length(Domain), Range, State, Stack, VarDict);
+%% TODO: These types should be replaced with accurate types.
+%% TODO: Add support for nonempty_improper_list/2.
+convert(Mod, {type,Anno,maybe_improper_list,[]}, State, Stack, VarDict) ->
+ convert(Mod, {type,Anno,list,[]}, State, Stack, VarDict);
+convert(Mod, {type,A,maybe_improper_list,[Cont,_Ter]}, State, Stack, VarDict) ->
+ convert(Mod, {type,A,list,[Cont]}, State, Stack, VarDict);
+convert(Mod, {type,A,nonempty_maybe_improper_list,[]}, State, Stack, VarDict) ->
+ convert(Mod, {type,A,nonempty_list,[]}, State, Stack, VarDict);
+convert(Mod, {type,A,nonempty_maybe_improper_list,[Cont,_Term]}, State, Stack,
+ VarDict) ->
+ convert(Mod, {type,A,nonempty_list,[Cont]}, State, Stack, VarDict);
+convert(Mod, {type,A,iodata,[]}, State, Stack, VarDict) ->
+ RealType = {type,A,union,[{type,A,binary,[]},{type,A,iolist,[]}]},
+ convert(Mod, RealType, State, Stack, VarDict);
+convert(Mod, {T,_,Name,[]}, State, Stack, VarDict) when ?IS_TYPE_TAG(T) ->
+ case ordsets:is_element(Name, ?STD_TYPES_0) of
+ true ->
+ {ok, {simple,proper_types:Name()}, State};
+ false ->
+ convert_maybe_hard_adt(Mod, Name, [], State, Stack, VarDict)
+ end;
+convert(Mod, {T,_,Name,ArgForms}, State, Stack, VarDict) when ?IS_TYPE_TAG(T) ->
+ convert_maybe_hard_adt(Mod, Name, ArgForms, State, Stack, VarDict);
+convert(_Mod, TypeForm, _State, _Stack, _VarDict) ->
+ {error, {unsupported_type,TypeForm}}.
+
+-spec concat_bitstrings([bitstring()]) -> bitstring().
+concat_bitstrings(BitStrings) ->
+ concat_bitstrings_tr(BitStrings, <<>>).
+
+-spec concat_bitstrings_tr([bitstring()], bitstring()) -> bitstring().
+concat_bitstrings_tr([], Acc) ->
+ Acc;
+concat_bitstrings_tr([BitString | Rest], Acc) ->
+ concat_bitstrings_tr(Rest, <<Acc/bits,BitString/bits>>).
+
+-spec concat_binary_gens(fin_type(), fin_type()) -> fin_type().
+concat_binary_gens(HeadType, TailType) ->
+ ?LET({H,T}, {HeadType,TailType}, <<H/bits,T/bits>>).
+
+-spec convert_fun(mod_name(), arity(), abs_type(), state(), stack(),
+ var_dict()) -> rich_result2(ret_type(),state()).
+convert_fun(Mod, Arity, Range, State, Stack, VarDict) ->
+ case convert(Mod, Range, State, ['fun' | Stack], VarDict) of
+ {ok,{simple,RangeType},NewState} ->
+ {ok, {simple,proper_types:function(Arity,RangeType)}, NewState};
+ {ok,{rec,RecFun,RecArgs},NewState} ->
+ case at_toplevel(RecArgs, Stack) of
+ true -> base_case_error(Stack);
+ false -> convert_rec_fun(Arity, RecFun, RecArgs, NewState)
+ end;
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec convert_rec_fun(arity(), rec_fun(), rec_args(), state()) ->
+ {'ok',ret_type(),state()}.
+convert_rec_fun(Arity, RecFun, RecArgs, State) ->
+ %% We bind the generated value by size.
+ NewRecFun =
+ fun(GenFuns,Size) ->
+ proper_types:function(Arity, RecFun(GenFuns,Size))
+ end,
+ NewRecArgs = clean_rec_args(RecArgs),
+ {ok, {rec,NewRecFun,NewRecArgs}, State}.
+
+-spec convert_list(mod_name(), boolean(), abs_type(), state(), stack(),
+ var_dict()) -> rich_result2(ret_type(),state()).
+convert_list(Mod, NonEmpty, ElemForm, State, Stack, VarDict) ->
+ case convert(Mod, ElemForm, State, [list | Stack], VarDict) of
+ {ok,{simple,ElemType},NewState} ->
+ InnerType = proper_types:list(ElemType),
+ FinType = case NonEmpty of
+ true -> proper_types:non_empty(InnerType);
+ false -> InnerType
+ end,
+ {ok, {simple,FinType}, NewState};
+ {ok,{rec,RecFun,RecArgs},NewState} ->
+ case {at_toplevel(RecArgs,Stack), NonEmpty} of
+ {true,true} ->
+ base_case_error(Stack);
+ {true,false} ->
+ NewRecFun =
+ fun(GenFuns,Size) ->
+ ElemGen = fun(S) -> ?LAZY(RecFun(GenFuns,S)) end,
+ proper_types:distlist(Size, ElemGen, false)
+ end,
+ NewRecArgs = clean_rec_args(RecArgs),
+ {ok, {rec,NewRecFun,NewRecArgs}, NewState};
+ {false,_} ->
+ {NewRecFun,NewRecArgs} =
+ convert_rec_list(RecFun, RecArgs, NonEmpty),
+ {ok, {rec,NewRecFun,NewRecArgs}, NewState}
+ end;
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec convert_rec_list(rec_fun(), rec_args(), boolean()) ->
+ {rec_fun(),rec_args()}.
+convert_rec_list(RecFun, [{true,FullTypeRef}] = RecArgs, NonEmpty) ->
+ {NewRecFun,_NormalRecArgs} =
+ convert_normal_rec_list(RecFun, RecArgs, NonEmpty),
+ AltRecFun =
+ fun([InstListGen],Size) ->
+ InstTypesList =
+ proper_types:get_prop(internal_types, InstListGen(Size)),
+ proper_types:fixed_list([RecFun([fun(_Size) -> I end],0)
+ || I <- InstTypesList])
+ end,
+ NewRecArgs = [{{list,NonEmpty,AltRecFun},FullTypeRef}],
+ {NewRecFun, NewRecArgs};
+convert_rec_list(RecFun, RecArgs, NonEmpty) ->
+ convert_normal_rec_list(RecFun, RecArgs, NonEmpty).
+
+-spec convert_normal_rec_list(rec_fun(), rec_args(), boolean()) ->
+ {rec_fun(),rec_args()}.
+convert_normal_rec_list(RecFun, RecArgs, NonEmpty) ->
+ NewRecFun = fun(GenFuns,Size) ->
+ ElemGen = fun(S) -> RecFun(GenFuns, S) end,
+ proper_types:distlist(Size, ElemGen, NonEmpty)
+ end,
+ NewRecArgs = clean_rec_args(RecArgs),
+ {NewRecFun, NewRecArgs}.
+
+-spec convert_tuple(mod_name(), [abs_type()], boolean(), state(), stack(),
+ var_dict()) -> rich_result2(ret_type(),state()).
+convert_tuple(Mod, ElemForms, ToList, State, Stack, VarDict) ->
+ case process_list(Mod, ElemForms, State, [tuple | Stack], VarDict) of
+ {ok,RetTypes,NewState} ->
+ case combine_ret_types(RetTypes, {tuple,ToList}) of
+ {simple,_FinType} = RetType ->
+ {ok, RetType, NewState};
+ {rec,_RecFun,RecArgs} = RetType ->
+ case at_toplevel(RecArgs, Stack) of
+ true -> base_case_error(Stack);
+ false -> {ok, RetType, NewState}
+ end
+ end;
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec convert_union(mod_name(), [abs_type()], state(), stack(), var_dict()) ->
+ rich_result2(ret_type(),state()).
+convert_union(Mod, ChoiceForms, State, Stack, VarDict) ->
+ case process_list(Mod, ChoiceForms, State, [union | Stack], VarDict) of
+ {ok,RawChoices,NewState} ->
+ ProcessChoice = fun(T,A) -> process_choice(T,A,Stack) end,
+ {RevSelfRecs,RevNonSelfRecs,RevNonRecs} =
+ lists:foldl(ProcessChoice, {[],[],[]}, RawChoices),
+ case {lists:reverse(RevSelfRecs),lists:reverse(RevNonSelfRecs),
+ lists:reverse(RevNonRecs)} of
+ {_SelfRecs,[],[]} ->
+ base_case_error(Stack);
+ {[],NonSelfRecs,NonRecs} ->
+ {ok, combine_ret_types(NonRecs ++ NonSelfRecs, union),
+ NewState};
+ {SelfRecs,NonSelfRecs,NonRecs} ->
+ {BCaseRecFun,BCaseRecArgs} =
+ case combine_ret_types(NonRecs ++ NonSelfRecs, union) of
+ {simple,BCaseType} ->
+ {fun([],_Size) -> BCaseType end,[]};
+ {rec,BCRecFun,BCRecArgs} ->
+ {BCRecFun,BCRecArgs}
+ end,
+ NumBCaseGens = length(BCaseRecArgs),
+ [ParentRef | _Upper] = Stack,
+ FallbackRecFun = fun([SelfGen],_Size) -> SelfGen(0) end,
+ FallbackRecArgs = [{false,ParentRef}],
+ FallbackRetType = {rec,FallbackRecFun,FallbackRecArgs},
+ {rec,RCaseRecFun,RCaseRecArgs} =
+ combine_ret_types([FallbackRetType] ++ SelfRecs
+ ++ NonSelfRecs, wunion),
+ NewRecFun =
+ fun(AllGens,Size) ->
+ {BCaseGens,RCaseGens} =
+ lists:split(NumBCaseGens, AllGens),
+ case Size of
+ 0 -> BCaseRecFun(BCaseGens,0);
+ _ -> RCaseRecFun(RCaseGens,Size)
+ end
+ end,
+ NewRecArgs = BCaseRecArgs ++ RCaseRecArgs,
+ {ok, {rec,NewRecFun,NewRecArgs}, NewState}
+ end;
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec process_choice(ret_type(), {[ret_type()],[ret_type()],[ret_type()]},
+ stack()) -> {[ret_type()],[ret_type()],[ret_type()]}.
+process_choice({simple,_} = RetType, {SelfRecs,NonSelfRecs,NonRecs}, _Stack) ->
+ {SelfRecs, NonSelfRecs, [RetType | NonRecs]};
+process_choice({rec,RecFun,RecArgs}, {SelfRecs,NonSelfRecs,NonRecs}, Stack) ->
+ case at_toplevel(RecArgs, Stack) of
+ true ->
+ case partition_by_toplevel(RecArgs, Stack, true) of
+ {[],[],_,_} ->
+ NewRecArgs = clean_rec_args(RecArgs),
+ {[{rec,RecFun,NewRecArgs} | SelfRecs], NonSelfRecs,
+ NonRecs};
+ {SelfRecArgs,SelfPos,OtherRecArgs,_OtherPos} ->
+ NumInstances = length(SelfRecArgs),
+ IsListInst = fun({true,_FTRef}) -> false
+ ; ({{list,_NE,_AltRecFun},_FTRef}) -> true
+ end,
+ NewRecFun =
+ case proper_arith:filter(IsListInst,SelfRecArgs) of
+ {[],[]} ->
+ no_list_inst_rec_fun(RecFun,NumInstances,
+ SelfPos);
+ {[{{list,NonEmpty,AltRecFun},_}],[ListInstPos]} ->
+ list_inst_rec_fun(AltRecFun,NumInstances,
+ SelfPos,NonEmpty,ListInstPos)
+ end,
+ [{_B,SelfRef} | _] = SelfRecArgs,
+ NewRecArgs =
+ [{false,SelfRef} | clean_rec_args(OtherRecArgs)],
+ {[{rec,NewRecFun,NewRecArgs} | SelfRecs], NonSelfRecs,
+ NonRecs}
+ end;
+ false ->
+ NewRecArgs = clean_rec_args(RecArgs),
+ {SelfRecs, [{rec,RecFun,NewRecArgs} | NonSelfRecs], NonRecs}
+ end.
+
+-spec no_list_inst_rec_fun(rec_fun(), pos_integer(), [position()]) -> rec_fun().
+no_list_inst_rec_fun(RecFun, NumInstances, SelfPos) ->
+ fun([SelfGen|OtherGens], Size) ->
+ ?LETSHRINK(
+ Instances,
+ %% Size distribution will be a little off if both normal and
+ %% instance-accepting generators are present.
+ lists:duplicate(NumInstances, SelfGen(Size div NumInstances)),
+ begin
+ InstGens = [fun(_Size) -> proper_types:exactly(I) end
+ || I <- Instances],
+ AllGens = proper_arith:insert(InstGens, SelfPos, OtherGens),
+ RecFun(AllGens, Size)
+ end)
+ end.
+
+-spec list_inst_rec_fun(rec_fun(), pos_integer(), [position()], boolean(),
+ position()) -> rec_fun().
+list_inst_rec_fun(AltRecFun, NumInstances, SelfPos, NonEmpty, ListInstPos) ->
+ fun([SelfGen|OtherGens], Size) ->
+ ?LETSHRINK(
+ AllInsts,
+ lists:duplicate(NumInstances - 1, SelfGen(Size div NumInstances))
+ ++ proper_types:distlist(Size div NumInstances, SelfGen, NonEmpty),
+ begin
+ {Instances,InstList} = lists:split(NumInstances - 1, AllInsts),
+ InstGens = [fun(_Size) -> proper_types:exactly(I) end
+ || I <- Instances],
+ InstTypesList = [proper_types:exactly(I) || I <- InstList],
+ InstListGen =
+ fun(_Size) -> proper_types:fixed_list(InstTypesList) end,
+ AllInstGens = proper_arith:list_insert(ListInstPos, InstListGen,
+ InstGens),
+ AllGens = proper_arith:insert(AllInstGens, SelfPos, OtherGens),
+ AltRecFun(AllGens, Size)
+ end)
+ end.
+
+-spec convert_maybe_hard_adt(mod_name(), type_name(), [abs_type()], state(),
+ stack(), var_dict()) ->
+ rich_result2(ret_type(),state()).
+convert_maybe_hard_adt(Mod, Name, ArgForms, State, Stack, VarDict) ->
+ Arity = length(ArgForms),
+ case orddict:find({Name,Arity}, ?HARD_ADTS) of
+ {ok,Mod} ->
+ convert_custom(Mod, Mod, Name, ArgForms, State, Stack, VarDict);
+ {ok,ADTMod} ->
+ A = ?anno(0),
+ ADT = {remote_type,A,[{atom,A,ADTMod},{atom,A,Name},ArgForms]},
+ convert(Mod, ADT, State, Stack, VarDict);
+ error ->
+ convert_custom(Mod, Mod, Name, ArgForms, State, Stack, VarDict)
+ end.
+
+-spec convert_custom(mod_name(), mod_name(), type_name(), [abs_type()], state(),
+ stack(), var_dict()) -> rich_result2(ret_type(),state()).
+convert_custom(Mod, RemMod, Name, ArgForms, State, Stack, VarDict) ->
+ case process_list(Mod, ArgForms, State, Stack, VarDict) of
+ {ok,Args,NewState} ->
+ Arity = length(Args),
+ TypeRef = {type,Name,Arity},
+ FullTypeRef = {RemMod,type,Name,Args},
+ convert_type(TypeRef, FullTypeRef, NewState, Stack);
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec convert_record(mod_name(), type_name(), [abs_type()], state(), stack(),
+ var_dict()) -> rich_result2(ret_type(),state()).
+convert_record(Mod, Name, RawSubsts, State, Stack, VarDict) ->
+ Substs = [{N,T} || {type,_,field_type,[{atom,_,N},T]} <- RawSubsts],
+ {SubstFields,SubstTypeForms} = lists:unzip(Substs),
+ case process_list(Mod, SubstTypeForms, State, Stack, VarDict) of
+ {ok,SubstTypes,NewState} ->
+ SubstsDict = dict:from_list(lists:zip(SubstFields, SubstTypes)),
+ TypeRef = {record,Name,0},
+ FullTypeRef = {Mod,record,Name,SubstsDict},
+ convert_type(TypeRef, FullTypeRef, NewState, Stack);
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec convert_type(type_ref(), full_type_ref(), state(), stack()) ->
+ rich_result2(ret_type(),state()).
+convert_type(TypeRef, {Mod,_Kind,_Name,_Spec} = FullTypeRef, State, Stack) ->
+ case stack_position(FullTypeRef, Stack) of
+ none ->
+ case get_type_repr(Mod, TypeRef, false, State) of
+ {ok,TypeRepr,NewState} ->
+ convert_new_type(TypeRef, FullTypeRef, TypeRepr, NewState,
+ Stack);
+ {error,_Reason} = Error ->
+ Error
+ end;
+ 1 ->
+ base_case_error(Stack);
+ _Pos ->
+ {ok, {rec,fun([Gen],Size) -> Gen(Size) end,[{true,FullTypeRef}]},
+ State}
+ end.
+
+-spec convert_new_type(type_ref(), full_type_ref(), type_repr(), state(),
+ stack()) -> rich_result2(ret_type(),state()).
+convert_new_type(_TypeRef, {_Mod,type,_Name,[]},
+ {cached,FinType,_TypeForm,_SymbInfo}, State, _Stack) ->
+ {ok, {simple,FinType}, State};
+convert_new_type(TypeRef, {Mod,type,_Name,Args} = FullTypeRef,
+ {abs_type,TypeForm,Vars,SymbInfo}, State, Stack) ->
+ VarDict = dict:from_list(lists:zip(Vars, Args)),
+ case convert(Mod, TypeForm, State, [FullTypeRef | Stack], VarDict) of
+ {ok, {simple,ImmFinType}, NewState} ->
+ FinType = case SymbInfo of
+ not_symb ->
+ ImmFinType;
+ {orig_abs,_OrigAbsType} ->
+ proper_symb:internal_well_defined(ImmFinType)
+ end,
+ FinalState = case Vars of
+ [] -> cache_type(Mod, TypeRef, FinType, TypeForm,
+ SymbInfo, NewState);
+ _ -> NewState
+ end,
+ {ok, {simple,FinType}, FinalState};
+ {ok, {rec,RecFun,RecArgs}, NewState} ->
+ convert_maybe_rec(FullTypeRef, SymbInfo, RecFun, RecArgs, NewState,
+ Stack);
+ {error,_Reason} = Error ->
+ Error
+ end;
+convert_new_type(_TypeRef, {Mod,record,Name,SubstsDict} = FullTypeRef,
+ {abs_record,OrigFields}, State, Stack) ->
+ Fields = [case dict:find(FieldName, SubstsDict) of
+ {ok,NewFieldType} -> NewFieldType;
+ error -> OrigFieldType
+ end
+ || {FieldName,OrigFieldType} <- OrigFields],
+ case convert_tuple(Mod, [{atom,0,Name} | Fields], false, State,
+ [FullTypeRef | Stack], dict:new()) of
+ {ok, {simple,_FinType}, _NewState} = Result ->
+ Result;
+ {ok, {rec,RecFun,RecArgs}, NewState} ->
+ convert_maybe_rec(FullTypeRef, not_symb, RecFun, RecArgs, NewState,
+ Stack);
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec cache_type(mod_name(), type_ref(), fin_type(), abs_type(), symb_info(),
+ state()) -> state().
+cache_type(Mod, TypeRef, FinType, TypeForm, SymbInfo,
+ #state{types = Types} = State) ->
+ TypeRepr = {cached,FinType,TypeForm,SymbInfo},
+ ModTypes = dict:fetch(Mod, Types),
+ NewModTypes = dict:store(TypeRef, TypeRepr, ModTypes),
+ NewTypes = dict:store(Mod, NewModTypes, Types),
+ State#state{types = NewTypes}.
+
+-spec convert_maybe_rec(full_type_ref(), symb_info(), rec_fun(), rec_args(),
+ state(), stack()) -> rich_result2(ret_type(),state()).
+convert_maybe_rec(FullTypeRef, SymbInfo, RecFun, RecArgs, State, Stack) ->
+ case at_toplevel(RecArgs, Stack) of
+ true -> base_case_error(Stack);
+ false -> safe_convert_maybe_rec(FullTypeRef, SymbInfo, RecFun, RecArgs,
+ State)
+ end.
+
+-spec safe_convert_maybe_rec(full_type_ref(),symb_info(),rec_fun(),rec_args(),
+ state()) -> rich_result2(ret_type(),state()).
+safe_convert_maybe_rec(FullTypeRef, SymbInfo, RecFun, RecArgs, State) ->
+ case partition_rec_args(FullTypeRef, RecArgs, false) of
+ {[],[],_,_} ->
+ {ok, {rec,RecFun,RecArgs}, State};
+ {MyRecArgs,MyPos,OtherRecArgs,_OtherPos} ->
+ case lists:all(fun({B,_T}) -> B =:= false end, MyRecArgs) of
+ true -> convert_rec_type(SymbInfo, RecFun, MyPos, OtherRecArgs,
+ State);
+ false -> {error, {internal,true_rec_arg_reached_type}}
+ end
+ end.
+
+-spec convert_rec_type(symb_info(), rec_fun(), [position()], rec_args(),
+ state()) -> {ok, ret_type(), state()}.
+convert_rec_type(SymbInfo, RecFun, MyPos, [], State) ->
+ NumRecArgs = length(MyPos),
+ M = fun(GenFun) ->
+ fun(Size) ->
+ GenFuns = lists:duplicate(NumRecArgs, GenFun),
+ RecFun(GenFuns, erlang:max(0,Size - 1))
+ end
+ end,
+ SizedGen = y(M),
+ ImmFinType = ?SIZED(Size,SizedGen(Size + 1)),
+ FinType = case SymbInfo of
+ not_symb ->
+ ImmFinType;
+ {orig_abs,_OrigAbsType} ->
+ proper_symb:internal_well_defined(ImmFinType)
+ end,
+ {ok, {simple,FinType}, State};
+convert_rec_type(_SymbInfo, RecFun, MyPos, OtherRecArgs, State) ->
+ NumRecArgs = length(MyPos),
+ NewRecFun =
+ fun(OtherGens,TopSize) ->
+ M = fun(GenFun) ->
+ fun(Size) ->
+ GenFuns = lists:duplicate(NumRecArgs, GenFun),
+ AllGens =
+ proper_arith:insert(GenFuns, MyPos, OtherGens),
+ RecFun(AllGens, erlang:max(0,Size - 1))
+ end
+ end,
+ (y(M))(TopSize)
+ end,
+ NewRecArgs = clean_rec_args(OtherRecArgs),
+ {ok, {rec,NewRecFun,NewRecArgs}, State}.
+
+%% Y Combinator: Read more at http://bc.tech.coop/blog/070611.html.
+-spec y(fun((fun((T) -> S)) -> fun((T) -> S))) -> fun((T) -> S).
+y(M) ->
+ G = fun(F) ->
+ M(fun(A) -> (F(F))(A) end)
+ end,
+ G(G).
+
+-spec process_list(mod_name(), [abs_type() | ret_type()], state(), stack(),
+ var_dict()) -> rich_result2([ret_type()],state()).
+process_list(Mod, RawTypes, State, Stack, VarDict) ->
+ Process = fun({simple,_FinType} = Type, {ok,Types,State1}) ->
+ {ok, [Type|Types], State1};
+ ({rec,_RecFun,_RecArgs} = Type, {ok,Types,State1}) ->
+ {ok, [Type|Types], State1};
+ (TypeForm, {ok,Types,State1}) ->
+ case convert(Mod, TypeForm, State1, Stack, VarDict) of
+ {ok,Type,State2} -> {ok,[Type|Types],State2};
+ {error,_} = Err -> Err
+ end;
+ (_RawType, {error,_} = Err) ->
+ Err
+ end,
+ case lists:foldl(Process, {ok,[],State}, RawTypes) of
+ {ok,RevTypes,NewState} ->
+ {ok, lists:reverse(RevTypes), NewState};
+ {error,_Reason} = Error ->
+ Error
+ end.
+
+-spec convert_integer(abs_expr(), state()) -> rich_result2(ret_type(),state()).
+convert_integer(Expr, State) ->
+ case eval_int(Expr) of
+ {ok,Int} -> {ok, {simple,proper_types:exactly(Int)}, State};
+ error -> expr_error(invalid_int_const, Expr)
+ end.
+
+-spec eval_int(abs_expr()) -> tagged_result(integer()).
+eval_int(Expr) ->
+ NoBindings = erl_eval:new_bindings(),
+ try erl_eval:expr(Expr, NoBindings) of
+ {value,Value,_NewBindings} when is_integer(Value) ->
+ {ok, Value};
+ _ ->
+ error
+ catch
+ error:_ ->
+ error
+ end.
+
+-spec expr_error(atom(), abs_expr()) -> {'error',term()}.
+expr_error(Reason, Expr) ->
+ {error, {Reason,lists:flatten(erl_pp:expr(Expr))}}.
+
+-spec expr_error(atom(), abs_expr(), abs_expr()) -> {'error',term()}.
+expr_error(Reason, Expr1, Expr2) ->
+ Str1 = lists:flatten(erl_pp:expr(Expr1)),
+ Str2 = lists:flatten(erl_pp:expr(Expr2)),
+ {error, {Reason,Str1,Str2}}.
+
+-spec base_case_error(stack()) -> {'error',term()}.
+%% TODO: This might confuse, since it doesn't record the arguments to parametric
+%% types or the type subsitutions of a record.
+base_case_error([{Mod,type,Name,Args} | _Upper]) ->
+ Arity = length(Args),
+ {error, {no_base_case,{Mod,type,Name,Arity}}};
+base_case_error([{Mod,record,Name,_SubstsDict} | _Upper]) ->
+ {error, {no_base_case,{Mod,record,Name}}}.
+
+
+%%------------------------------------------------------------------------------
+%% Helper datatypes handling functions
+%%------------------------------------------------------------------------------
+
+-spec stack_position(full_type_ref(), stack()) -> 'none' | pos_integer().
+stack_position(FullTypeRef, Stack) ->
+ SameType = fun(A) -> same_full_type_ref(A,FullTypeRef) end,
+ case proper_arith:find_first(SameType, Stack) of
+ {Pos,_} -> Pos;
+ none -> none
+ end.
+
+-spec partition_by_toplevel(rec_args(), stack(), boolean()) ->
+ {rec_args(),[position()],rec_args(),[position()]}.
+partition_by_toplevel(RecArgs, [], _OnlyInstanceAccepting) ->
+ {[],[],RecArgs,lists:seq(1,length(RecArgs))};
+partition_by_toplevel(RecArgs, [_Parent | _Upper], _OnlyInstanceAccepting)
+ when is_atom(_Parent) ->
+ {[],[],RecArgs,lists:seq(1,length(RecArgs))};
+partition_by_toplevel(RecArgs, [Parent | _Upper], OnlyInstanceAccepting) ->
+ partition_rec_args(Parent, RecArgs, OnlyInstanceAccepting).
+
+-spec at_toplevel(rec_args(), stack()) -> boolean().
+at_toplevel(RecArgs, Stack) ->
+ case partition_by_toplevel(RecArgs, Stack, false) of
+ {[],[],_,_} -> false;
+ _ -> true
+ end.
+
+-spec partition_rec_args(full_type_ref(), rec_args(), boolean()) ->
+ {rec_args(),[position()],rec_args(),[position()]}.
+partition_rec_args(FullTypeRef, RecArgs, OnlyInstanceAccepting) ->
+ SameType =
+ case OnlyInstanceAccepting of
+ true -> fun({false,_T}) -> false
+ ; ({_B,T}) -> same_full_type_ref(T,FullTypeRef) end;
+ false -> fun({_B,T}) -> same_full_type_ref(T,FullTypeRef) end
+ end,
+ proper_arith:partition(SameType, RecArgs).
+
+%% Tuples can be of 0 arity, unions of 1 and wunions at least of 2.
+-spec combine_ret_types([ret_type()], {'tuple',boolean()} | 'union'
+ | 'wunion') -> ret_type().
+combine_ret_types(RetTypes, EnclosingType) ->
+ case lists:all(fun is_simple_ret_type/1, RetTypes) of
+ true ->
+ %% This should never happen for wunion.
+ Combine = case EnclosingType of
+ {tuple,false} -> fun proper_types:tuple/1;
+ {tuple,true} -> fun proper_types:fixed_list/1;
+ union -> fun proper_types:union/1
+ end,
+ FinTypes = [T || {simple,T} <- RetTypes],
+ {simple, Combine(FinTypes)};
+ false ->
+ NumTypes = length(RetTypes),
+ {RevRecFuns,RevRecArgsList,NumRecs} =
+ lists:foldl(fun add_ret_type/2, {[],[],0}, RetTypes),
+ RecFuns = lists:reverse(RevRecFuns),
+ RecArgsList = lists:reverse(RevRecArgsList),
+ RecArgLens = [length(RecArgs) || RecArgs <- RecArgsList],
+ RecFunInfo = {NumTypes,NumRecs,RecArgLens,RecFuns},
+ FlatRecArgs = lists:flatten(RecArgsList),
+ {NewRecFun,NewRecArgs} =
+ case EnclosingType of
+ {tuple,ToList} ->
+ {tuple_rec_fun(RecFunInfo,ToList),
+ soft_clean_rec_args(FlatRecArgs,RecFunInfo,ToList)};
+ union ->
+ {union_rec_fun(RecFunInfo),clean_rec_args(FlatRecArgs)};
+ wunion ->
+ {wunion_rec_fun(RecFunInfo),
+ clean_rec_args(FlatRecArgs)}
+ end,
+ {rec, NewRecFun, NewRecArgs}
+ end.
+
+-spec tuple_rec_fun(rec_fun_info(), boolean()) -> rec_fun().
+tuple_rec_fun({_NumTypes,NumRecs,RecArgLens,RecFuns}, ToList) ->
+ Combine = case ToList of
+ true -> fun proper_types:fixed_list/1;
+ false -> fun proper_types:tuple/1
+ end,
+ fun(AllGFs,TopSize) ->
+ Size = TopSize div NumRecs,
+ GFsList = proper_arith:unflatten(AllGFs, RecArgLens),
+ ArgsList = [[GenFuns,Size] || GenFuns <- GFsList],
+ ZipFun = fun erlang:apply/2,
+ Combine(lists:zipwith(ZipFun, RecFuns, ArgsList))
+ end.
+
+-spec union_rec_fun(rec_fun_info()) -> rec_fun().
+union_rec_fun({_NumTypes,_NumRecs,RecArgLens,RecFuns}) ->
+ fun(AllGFs,Size) ->
+ GFsList = proper_arith:unflatten(AllGFs, RecArgLens),
+ ArgsList = [[GenFuns,Size] || GenFuns <- GFsList],
+ ZipFun = fun(F,A) -> ?LAZY(apply(F,A)) end,
+ proper_types:union(lists:zipwith(ZipFun, RecFuns, ArgsList))
+ end.
+
+-spec wunion_rec_fun(rec_fun_info()) -> rec_fun().
+wunion_rec_fun({NumTypes,_NumRecs,RecArgLens,RecFuns}) ->
+ fun(AllGFs,Size) ->
+ GFsList = proper_arith:unflatten(AllGFs, RecArgLens),
+ ArgsList = [[GenFuns,Size] || GenFuns <- GFsList],
+ ZipFun = fun(W,F,A) -> {W,?LAZY(apply(F,A))} end,
+ RecWeight = erlang:max(1, Size div (NumTypes - 1)),
+ Weights = [1 | lists:duplicate(NumTypes - 1, RecWeight)],
+ WeightedChoices = lists:zipwith3(ZipFun, Weights, RecFuns, ArgsList),
+ proper_types:wunion(WeightedChoices)
+ end.
+
+-spec add_ret_type(ret_type(), {[rec_fun()],[rec_args()],non_neg_integer()}) ->
+ {[rec_fun()],[rec_args()],non_neg_integer()}.
+add_ret_type({simple,FinType}, {RecFuns,RecArgsList,NumRecs}) ->
+ {[fun([],_) -> FinType end | RecFuns], [[] | RecArgsList], NumRecs};
+add_ret_type({rec,RecFun,RecArgs}, {RecFuns,RecArgsList,NumRecs}) ->
+ {[RecFun | RecFuns], [RecArgs | RecArgsList], NumRecs + 1}.
+
+-spec is_simple_ret_type(ret_type()) -> boolean().
+is_simple_ret_type({simple,_FinType}) ->
+ true;
+is_simple_ret_type({rec,_RecFun,_RecArgs}) ->
+ false.
+
+-spec clean_rec_args(rec_args()) -> rec_args().
+clean_rec_args(RecArgs) ->
+ [{false,F} || {_B,F} <- RecArgs].
+
+-spec soft_clean_rec_args(rec_args(), rec_fun_info(), boolean()) -> rec_args().
+soft_clean_rec_args(RecArgs, RecFunInfo, ToList) ->
+ soft_clean_rec_args_tr(RecArgs, [], RecFunInfo, ToList, false, 1).
+
+-spec soft_clean_rec_args_tr(rec_args(), rec_args(), rec_fun_info(), boolean(),
+ boolean(), position()) -> rec_args().
+soft_clean_rec_args_tr([], Acc, _RecFunInfo, _ToList, _FoundListInst, _Pos) ->
+ lists:reverse(Acc);
+soft_clean_rec_args_tr([{{list,_NonEmpty,_AltRecFun},FTRef} | Rest], Acc,
+ RecFunInfo, ToList, true, Pos) ->
+ NewArg = {false,FTRef},
+ soft_clean_rec_args_tr(Rest, [NewArg|Acc], RecFunInfo, ToList, true, Pos+1);
+soft_clean_rec_args_tr([{{list,NonEmpty,AltRecFun},FTRef} | Rest], Acc,
+ RecFunInfo, ToList, false, Pos) ->
+ {NumTypes,NumRecs,RecArgLens,RecFuns} = RecFunInfo,
+ AltRecFunPos = get_group(Pos, RecArgLens),
+ AltRecFuns = proper_arith:list_update(AltRecFunPos, AltRecFun, RecFuns),
+ AltRecFunInfo = {NumTypes,NumRecs,RecArgLens,AltRecFuns},
+ NewArg = {{list,NonEmpty,tuple_rec_fun(AltRecFunInfo,ToList)},FTRef},
+ soft_clean_rec_args_tr(Rest, [NewArg|Acc], RecFunInfo, ToList, true, Pos+1);
+soft_clean_rec_args_tr([Arg | Rest], Acc, RecFunInfo, ToList, FoundListInst,
+ Pos) ->
+ soft_clean_rec_args_tr(Rest, [Arg | Acc], RecFunInfo, ToList, FoundListInst,
+ Pos+1).
+
+-spec get_group(pos_integer(), [non_neg_integer()]) -> pos_integer().
+get_group(Pos, AllMembers) ->
+ get_group_tr(Pos, AllMembers, 1).
+
+-spec get_group_tr(pos_integer(), [non_neg_integer()], pos_integer()) ->
+ pos_integer().
+get_group_tr(Pos, [Members | Rest], GroupNum) ->
+ case Pos =< Members of
+ true -> GroupNum;
+ false -> get_group_tr(Pos - Members, Rest, GroupNum + 1)
+ end.
+
+-spec same_full_type_ref(full_type_ref(), term()) -> boolean().
+same_full_type_ref({SameMod,type,SameName,Args1},
+ {SameMod,type,SameName,Args2}) ->
+ length(Args1) =:= length(Args2)
+ andalso lists:all(fun({A,B}) -> same_ret_type(A,B) end,
+ lists:zip(Args1, Args2));
+same_full_type_ref({SameMod,record,SameName,SubstsDict1},
+ {SameMod,record,SameName,SubstsDict2}) ->
+ same_substs_dict(SubstsDict1, SubstsDict2);
+same_full_type_ref(_, _) ->
+ false.
+
+-spec same_ret_type(ret_type(), ret_type()) -> boolean().
+same_ret_type({simple,FinType1}, {simple,FinType2}) ->
+ same_fin_type(FinType1, FinType2);
+same_ret_type({rec,RecFun1,RecArgs1}, {rec,RecFun2,RecArgs2}) ->
+ NumRecArgs = length(RecArgs1),
+ length(RecArgs2) =:= NumRecArgs
+ andalso lists:all(fun({A1,A2}) -> same_rec_arg(A1,A2,NumRecArgs) end,
+ lists:zip(RecArgs1,RecArgs2))
+ andalso same_rec_fun(RecFun1, RecFun2, NumRecArgs);
+same_ret_type(_, _) ->
+ false.
+
+%% TODO: Is this too strict?
+-spec same_rec_arg(rec_arg(), rec_arg(), arity()) -> boolean().
+same_rec_arg({{list,SameBool,AltRecFun1},FTRef1},
+ {{list,SameBool,AltRecFun2},FTRef2}, NumRecArgs) ->
+ same_rec_fun(AltRecFun1, AltRecFun2, NumRecArgs)
+ andalso same_full_type_ref(FTRef1, FTRef2);
+same_rec_arg({true,FTRef1}, {true,FTRef2}, _NumRecArgs) ->
+ same_full_type_ref(FTRef1, FTRef2);
+same_rec_arg({false,FTRef1}, {false,FTRef2}, _NumRecArgs) ->
+ same_full_type_ref(FTRef1, FTRef2);
+same_rec_arg(_, _, _NumRecArgs) ->
+ false.
+
+-spec same_substs_dict(substs_dict(), substs_dict()) -> boolean().
+same_substs_dict(SubstsDict1, SubstsDict2) ->
+ SameKVPair = fun({{_K,V1},{_K,V2}}) -> same_ret_type(V1,V2);
+ (_) -> false
+ end,
+ SubstsKVList1 = lists:sort(dict:to_list(SubstsDict1)),
+ SubstsKVList2 = lists:sort(dict:to_list(SubstsDict2)),
+ length(SubstsKVList1) =:= length(SubstsKVList2)
+ andalso lists:all(SameKVPair, lists:zip(SubstsKVList1,SubstsKVList2)).
+
+-spec same_fin_type(fin_type(), fin_type()) -> boolean().
+same_fin_type(Type1, Type2) ->
+ proper_types:equal_types(Type1, Type2).
+
+-spec same_rec_fun(rec_fun(), rec_fun(), arity()) -> boolean().
+same_rec_fun(RecFun1, RecFun2, NumRecArgs) ->
+ %% It's ok that we return a type, even if there's a 'true' for use of
+ %% an instance.
+ GenFun = fun(_Size) -> proper_types:exactly('$dummy') end,
+ GenFuns = lists:duplicate(NumRecArgs,GenFun),
+ same_fin_type(RecFun1(GenFuns,0), RecFun2(GenFuns,0)).
diff --git a/lib/dialyzer/test/dialyzer_SUITE.erl b/lib/dialyzer/test/dialyzer_SUITE.erl
index 80f4508ec6..d46181f66f 100644
--- a/lib/dialyzer/test/dialyzer_SUITE.erl
+++ b/lib/dialyzer/test/dialyzer_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2015. All Rights Reserved.
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(dialyzer_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Default timetrap timeout (set in init_per_testcase).
-define(default_timeout, ?t:minutes(1)).
diff --git a/lib/dialyzer/test/dialyzer_common.erl b/lib/dialyzer/test/dialyzer_common.erl
index d2b1026c06..48083a2731 100644
--- a/lib/dialyzer/test/dialyzer_common.erl
+++ b/lib/dialyzer/test/dialyzer_common.erl
@@ -7,7 +7,7 @@
-module(dialyzer_common).
--export([check_plt/1, check/4, create_all_suites/0, new_tests/2]).
+-export([check_plt/1, check/4, create_all_suites/0, new_tests/2, plt_file/1]).
-include_lib("kernel/include/file.hrl").
@@ -39,7 +39,7 @@
check_plt(OutDir) ->
io:format("Checking plt:"),
- PltFilename = filename:join(OutDir, ?plt_filename),
+ PltFilename = plt_file(OutDir),
case file:read_file_info(PltFilename) of
{ok, _} -> dialyzer_check_plt(PltFilename);
{error, _ } ->
@@ -63,6 +63,11 @@ check_plt(OutDir) ->
end
end.
+-spec plt_file(string()) -> string().
+
+plt_file(OutDir) ->
+ filename:join(OutDir, ?plt_filename).
+
dialyzer_check_plt(PltFilename) ->
try dialyzer:run([{analysis_type, plt_check},
{init_plt, PltFilename}]) of
@@ -119,7 +124,7 @@ build_plt(PltFilename) ->
'same' | {differ, [term()]}.
check(TestCase, Opts, Dir, OutDir) ->
- PltFilename = filename:join(OutDir, ?plt_filename),
+ PltFilename = plt_file(OutDir),
SrcDir = filename:join(Dir, ?input_files_directory),
ResDir = filename:join(Dir, ?result_files_directory),
Filename = filename:join(SrcDir, atom_to_list(TestCase)),
diff --git a/lib/dialyzer/test/map_SUITE_data/dialyzer_options b/lib/dialyzer/test/map_SUITE_data/dialyzer_options
new file mode 100644
index 0000000000..50991c9bc5
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/dialyzer_options
@@ -0,0 +1 @@
+{dialyzer_options, []}.
diff --git a/lib/dialyzer/test/map_SUITE_data/results/bad_argument b/lib/dialyzer/test/map_SUITE_data/results/bad_argument
new file mode 100644
index 0000000000..af61a89638
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/bad_argument
@@ -0,0 +1,5 @@
+
+bad_argument.erl:14: Function t3/0 has no local return
+bad_argument.erl:15: Guard test is_map('not_a_map') can never succeed
+bad_argument.erl:5: Function t/0 has no local return
+bad_argument.erl:6: A key of type 'b' cannot exist in a map of type #{'a':='q'}
diff --git a/lib/dialyzer/test/map_SUITE_data/results/contract b/lib/dialyzer/test/map_SUITE_data/results/contract
new file mode 100644
index 0000000000..0f6e1d0c65
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/contract
@@ -0,0 +1,7 @@
+
+contract.erl:10: Function t2/0 has no local return
+contract.erl:10: The call missing:f(#{'a':=1, 'c':=4}) breaks the contract (#{'a':=1,'b'=>2,'c'=>3}) -> 'ok'
+contract.erl:12: Function t3/0 has no local return
+contract.erl:12: The call missing:f(#{'a':=1, 'b':=2, 'e':=3}) breaks the contract (#{'a':=1,'b'=>2,'c'=>3}) -> 'ok'
+contract.erl:8: Function t1/0 has no local return
+contract.erl:8: The call missing:f(#{'b':=2}) breaks the contract (#{'a':=1,'b'=>2,'c'=>3}) -> 'ok'
diff --git a/lib/dialyzer/test/map_SUITE_data/results/contract_violation b/lib/dialyzer/test/map_SUITE_data/results/contract_violation
new file mode 100644
index 0000000000..958321618f
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/contract_violation
@@ -0,0 +1,3 @@
+
+contract_violation.erl:12: The pattern #{I:=Loc} can never match the type #{}
+contract_violation.erl:16: Invalid type specification for function contract_violation:beam_disasm_lines/2. The success typing is ('none' | <<_:32,_:_*8>>,_) -> #{pos_integer()=>{'location',_,_}}
diff --git a/lib/dialyzer/test/map_SUITE_data/results/exact b/lib/dialyzer/test/map_SUITE_data/results/exact
new file mode 100644
index 0000000000..ea00e61330
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/exact
@@ -0,0 +1,3 @@
+
+exact.erl:15: Function t2/1 has no local return
+exact.erl:19: The variable _ can never match since previous clauses completely covered the type #{'a':=_, _=>_}
diff --git a/lib/dialyzer/test/map_SUITE_data/results/guard_update b/lib/dialyzer/test/map_SUITE_data/results/guard_update
new file mode 100644
index 0000000000..98df23907f
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/guard_update
@@ -0,0 +1,5 @@
+
+guard_update.erl:5: Function t/0 has no local return
+guard_update.erl:6: The call guard_update:f(#{'a':=2}) will never return since it differs in the 1st argument from the success typing arguments: (#{'b':=_, _=>_})
+guard_update.erl:8: Clause guard cannot succeed. The variable M was matched against the type #{'a':=2}
+guard_update.erl:8: Function f/1 has no local return
diff --git a/lib/dialyzer/test/map_SUITE_data/results/initial_dataflow b/lib/dialyzer/test/map_SUITE_data/results/initial_dataflow
new file mode 100644
index 0000000000..69144f9208
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/initial_dataflow
@@ -0,0 +1,4 @@
+
+initial_dataflow.erl:11: The variable Q can never match since previous clauses completely covered the type #{}
+initial_dataflow.erl:5: Function test/0 has no local return
+initial_dataflow.erl:6: The pattern 'false' can never match the type 'true'
diff --git a/lib/dialyzer/test/map_SUITE_data/results/is_map_guard b/lib/dialyzer/test/map_SUITE_data/results/is_map_guard
new file mode 100644
index 0000000000..6ab464d865
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/is_map_guard
@@ -0,0 +1,5 @@
+
+is_map_guard.erl:13: Function t2/0 has no local return
+is_map_guard.erl:15: The call is_map_guard:explicit('still_not_map') will never return since it differs in the 1st argument from the success typing arguments: (map())
+is_map_guard.erl:6: Function t1/0 has no local return
+is_map_guard.erl:8: The call is_map_guard:implicit('not_a_map') will never return since it differs in the 1st argument from the success typing arguments: (map())
diff --git a/lib/dialyzer/test/map_SUITE_data/results/map_galore b/lib/dialyzer/test/map_SUITE_data/results/map_galore
new file mode 100644
index 0000000000..6ea88f01f8
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/map_galore
@@ -0,0 +1,28 @@
+
+map_galore.erl:1000: A key of type 42 cannot exist in a map of type #{1:='a', 2:='b', 4:='d', 5:='e', float()=>'c' | 'v'}
+map_galore.erl:1080: A key of type 'nonexisting' cannot exist in a map of type #{#{'map':='key', 'one':='small'}:=[32 | 49 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'second':='small'}:=[32 | 50 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'third':='small'}:=[32 | 51 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], 10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 16:='a6', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 26:='b6', 27:='b7', 28:='b8', 29:='b9', 30:=[48 | 99,...], 31:=[49 | 99,...], 32:=[50 | 99,...], 33:=[51 | 99,...], 34:=[52 | 99,...], 35:=[53 | 99,...], 36:=[54 | 99,...], 37:=[55 | 99,...], 38:=[56 | 99,...], 39:=[57 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | float() | {[[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...],...]} | #{10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 27:='b7', 28:='b8', 29:='b9', 30:=[48 | 99,...], 31:=[49 | 99,...], 32:=[50 | 99,...], 33:=[51 | 99,...], 34:=[52 | 99,...], 35:=[53 | 99,...], 37:=[55 | 99,...], 38:=[56 | 99,...], 39:=[57 | 99,...], 'k16'=>'a6', 'k26'=>'b6', 'k36'=>[54 | 99,...], 16=>'a6', 26=>'b6', 36=>[54 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | {[[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...],...]}=>[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 100 | 101,...]}=>atom() | [1..255,...]}
+map_galore.erl:1082: A key of type 42 cannot exist in a map of type #{#{'map':='key', 'one':='small'}:=[32 | 49 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'second':='small'}:=[32 | 50 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'third':='small'}:=[32 | 51 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], 10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 16:='a6', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 26:='b6', 27:='b7', 28:='b8', 29:='b9', 30:=[48 | 99,...], 31:=[49 | 99,...], 32:=[50 | 99,...], 33:=[51 | 99,...], 34:=[52 | 99,...], 35:=[53 | 99,...], 36:=[54 | 99,...], 37:=[55 | 99,...], 38:=[56 | 99,...], 39:=[57 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | float() | {[[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...],...]} | #{10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 27:='b7', 28:='b8', 29:='b9', 30:=[48 | 99,...], 31:=[49 | 99,...], 32:=[50 | 99,...], 33:=[51 | 99,...], 34:=[52 | 99,...], 35:=[53 | 99,...], 37:=[55 | 99,...], 38:=[56 | 99,...], 39:=[57 | 99,...], 'k16'=>'a6', 'k26'=>'b6', 'k36'=>[54 | 99,...], 16=>'a6', 26=>'b6', 36=>[54 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | {[[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...],...]}=>[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 100 | 101,...]}=>atom() | [1..255,...]}
+map_galore.erl:1140: The call map_galore:map_guard_sequence_1(#{'seq':=6, 'val':=[101,...]}) will never return since it differs in the 1st argument from the success typing arguments: (#{'seq':=1 | 2 | 3 | 4 | 5, 'val':=[97 | 98 | 99 | 100 | 101,...], #{'map':='key', 'one':='small'}=>[32 | 49 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'second':='small'}=>[32 | 50 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'third':='small'}=>[32 | 51 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], 10=>'a0', 11=>'a1', 12=>'a2', 13=>'a3', 14=>'a4', 15=>'a5', 16=>'a6', 17=>'a7', 18=>'a8', 19=>'a9', 20=>'b0', 21=>'b1', 22=>'b2', 23=>'b3', 24=>'b4', 25=>'b5', 26=>'b6', 27=>'b7', 28=>'b8', 29=>'b9', 30=>[48 | 99,...], 31=>[49 | 99,...], 32=>[50 | 99,...], 33=>[51 | 99,...], 34=>[52 | 99,...], 35=>[53 | 99,...], 36=>[54 | 99,...], 37=>[55 | 99,...], 38=>[56 | 99,...], 39=>[57 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | float() | {[any(),...]} | #{10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 27:='b7', 28:='b8', 29:='b9', 30:=[any(),...], 31:=[any(),...], 32:=[any(),...], 33:=[any(),...], 34:=[any(),...], 35:=[any(),...], 37:=[any(),...], 38:=[any(),...], 39:=[any(),...], 'k16'=>'a6', 'k26'=>'b6', 'k36'=>[any(),...], 16=>'a6', 26=>'b6', 36=>[any(),...], <<_:16>> | [any(),...] | {_}=>[any(),...]}=>atom() | [1..255,...]})
+map_galore.erl:1141: The call map_galore:map_guard_sequence_2(#{'b':=5}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':='gg' | 'kk' | 'sc' | 3 | 4, 'b'=>'other' | 3 | 4 | 5, 'c'=>'sc2', #{'map':='key', 'one':='small'}=>[32 | 49 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'second':='small'}=>[32 | 50 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'third':='small'}=>[32 | 51 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], 10=>'a0', 11=>'a1', 12=>'a2', 13=>'a3', 14=>'a4', 15=>'a5', 16=>'a6', 17=>'a7', 18=>'a8', 19=>'a9', 20=>'b0', 21=>'b1', 22=>'b2', 23=>'b3', 24=>'b4', 25=>'b5', 26=>'b6', 27=>'b7', 28=>'b8', 29=>'b9', 30=>[48 | 99,...], 31=>[49 | 99,...], 32=>[50 | 99,...], 33=>[51 | 99,...], 34=>[52 | 99,...], 35=>[53 | 99,...], 36=>[54 | 99,...], 37=>[55 | 99,...], 38=>[56 | 99,...], 39=>[57 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | float() | {[any(),...]} | #{10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 27:='b7', 28:='b8', 29:='b9', 30:=[any(),...], 31:=[any(),...], 32:=[any(),...], 33:=[any(),...], 34:=[any(),...], 35:=[any(),...], 37:=[any(),...], 38:=[any(),...], 39:=[any(),...], 'k16'=>'a6', 'k26'=>'b6', 'k36'=>[any(),...], 16=>'a6', 26=>'b6', 36=>[any(),...], <<_:16>> | [any(),...] | {_}=>[any(),...]}=>atom() | [1..255,...]})
+map_galore.erl:1209: The call map_galore:map_guard_sequence_1(#{'seq':=6, 'val':=[101,...], #{'map':='key', 'one':='small'}:=[32 | 49 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'second':='small'}:=[32 | 50 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'third':='small'}:=[32 | 51 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], 10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 16:='a6', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 26:='b6', 27:='b7', 28:='b8', 29:='b9', 30:=[48 | 99,...], 31:=[49 | 99,...], 32:=[50 | 99,...], 33:=[51 | 99,...], 34:=[52 | 99,...], 35:=[53 | 99,...], 36:=[54 | 99,...], 37:=[55 | 99,...], 38:=[56 | 99,...], 39:=[57 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | float() | {[[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | 3,...]} | #{10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 27:='b7', 28:='b8', 29:='b9', 30:=[48 | 99,...], 31:=[49 | 99,...], 32:=[50 | 99,...], 33:=[51 | 99,...], 34:=[52 | 99,...], 35:=[53 | 99,...], 37:=[55 | 99,...], 38:=[56 | 99,...], 39:=[57 | 99,...], 'k16'=>'a6', 'k26'=>'b6', 'k36'=>[54 | 99,...], 16=>'a6', 26=>'b6', 36=>[54 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | {[[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...],...]}=>[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 100 | 101,...]}=>atom() | [1..255,...]}) will never return since it differs in the 1st argument from the success typing arguments: (#{'seq':=1 | 2 | 3 | 4 | 5, 'val':=[97 | 98 | 99 | 100 | 101,...], #{'map':='key', 'one':='small'}=>[32 | 49 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'second':='small'}=>[32 | 50 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'third':='small'}=>[32 | 51 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], 10=>'a0', 11=>'a1', 12=>'a2', 13=>'a3', 14=>'a4', 15=>'a5', 16=>'a6', 17=>'a7', 18=>'a8', 19=>'a9', 20=>'b0', 21=>'b1', 22=>'b2', 23=>'b3', 24=>'b4', 25=>'b5', 26=>'b6', 27=>'b7', 28=>'b8', 29=>'b9', 30=>[48 | 99,...], 31=>[49 | 99,...], 32=>[50 | 99,...], 33=>[51 | 99,...], 34=>[52 | 99,...], 35=>[53 | 99,...], 36=>[54 | 99,...], 37=>[55 | 99,...], 38=>[56 | 99,...], 39=>[57 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | float() | {[any(),...]} | #{10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 27:='b7', 28:='b8', 29:='b9', 30:=[any(),...], 31:=[any(),...], 32:=[any(),...], 33:=[any(),...], 34:=[any(),...], 35:=[any(),...], 37:=[any(),...], 38:=[any(),...], 39:=[any(),...], 'k16'=>'a6', 'k26'=>'b6', 'k36'=>[any(),...], 16=>'a6', 26=>'b6', 36=>[any(),...], <<_:16>> | [any(),...] | {_}=>[any(),...]}=>atom() | [1..255,...]})
+map_galore.erl:1210: The call map_galore:map_guard_sequence_2(#{'b':=5, #{'map':='key', 'one':='small'}:=[32 | 49 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'second':='small'}:=[32 | 50 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'third':='small'}:=[32 | 51 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], 10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 16:='a6', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 26:='b6', 27:='b7', 28:='b8', 29:='b9', 30:=[48 | 99,...], 31:=[49 | 99,...], 32:=[50 | 99,...], 33:=[51 | 99,...], 34:=[52 | 99,...], 35:=[53 | 99,...], 36:=[54 | 99,...], 37:=[55 | 99,...], 38:=[56 | 99,...], 39:=[57 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | float() | {[[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | 3,...]} | #{10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 27:='b7', 28:='b8', 29:='b9', 30:=[48 | 99,...], 31:=[49 | 99,...], 32:=[50 | 99,...], 33:=[51 | 99,...], 34:=[52 | 99,...], 35:=[53 | 99,...], 37:=[55 | 99,...], 38:=[56 | 99,...], 39:=[57 | 99,...], 'k16'=>'a6', 'k26'=>'b6', 'k36'=>[54 | 99,...], 16=>'a6', 26=>'b6', 36=>[54 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | {[[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...],...]}=>[48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 100 | 101,...]}=>atom() | [1..255,...]}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':='gg' | 'kk' | 'sc' | 3 | 4, 'b'=>'other' | 3 | 4 | 5, 'c'=>'sc2', #{'map':='key', 'one':='small'}=>[32 | 49 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'second':='small'}=>[32 | 50 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], #{'map':='key', 'third':='small'}=>[32 | 51 | 97 | 101 | 107 | 108 | 109 | 112 | 115 | 121,...], 10=>'a0', 11=>'a1', 12=>'a2', 13=>'a3', 14=>'a4', 15=>'a5', 16=>'a6', 17=>'a7', 18=>'a8', 19=>'a9', 20=>'b0', 21=>'b1', 22=>'b2', 23=>'b3', 24=>'b4', 25=>'b5', 26=>'b6', 27=>'b7', 28=>'b8', 29=>'b9', 30=>[48 | 99,...], 31=>[49 | 99,...], 32=>[50 | 99,...], 33=>[51 | 99,...], 34=>[52 | 99,...], 35=>[53 | 99,...], 36=>[54 | 99,...], 37=>[55 | 99,...], 38=>[56 | 99,...], 39=>[57 | 99,...], <<_:16>> | [48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57,...] | float() | {[any(),...]} | #{10:='a0', 11:='a1', 12:='a2', 13:='a3', 14:='a4', 15:='a5', 17:='a7', 18:='a8', 19:='a9', 20:='b0', 21:='b1', 22:='b2', 23:='b3', 24:='b4', 25:='b5', 27:='b7', 28:='b8', 29:='b9', 30:=[any(),...], 31:=[any(),...], 32:=[any(),...], 33:=[any(),...], 34:=[any(),...], 35:=[any(),...], 37:=[any(),...], 38:=[any(),...], 39:=[any(),...], 'k16'=>'a6', 'k26'=>'b6', 'k36'=>[any(),...], 16=>'a6', 26=>'b6', 36=>[any(),...], <<_:16>> | [any(),...] | {_}=>[any(),...]}=>atom() | [1..255,...]})
+map_galore.erl:1418: Fun application with arguments (#{'s':='none', 'v':='none'}) will never return since it differs in the 1st argument from the success typing arguments: (#{'s':='l' | 't' | 'v', 'v':='none' | <<_:16>> | [<<_:16>>,...] | {<<_:16>>,<<_:16>>}})
+map_galore.erl:1491: The test #{} =:= #{'a':=1} can never evaluate to 'true'
+map_galore.erl:1492: The test #{'a':=1} =:= #{} can never evaluate to 'true'
+map_galore.erl:1495: The test #{'a':=1} =:= #{'a':=2} can never evaluate to 'true'
+map_galore.erl:1496: The test #{'a':=2} =:= #{'a':=1} can never evaluate to 'true'
+map_galore.erl:1497: The test #{'a':=2, 'b':=1} =:= #{'a':=1, 'b':=3} can never evaluate to 'true'
+map_galore.erl:1498: The test #{'a':=1, 'b':=1} =:= #{'a':=1, 'b':=3} can never evaluate to 'true'
+map_galore.erl:1762: The call maps:get({1, 1},#{{1,float()}=>[101 | 108 | 112 | 116 | 117,...]}) will never return since the success typing arguments are (any(),map())
+map_galore.erl:1763: The call maps:get('a',#{}) will never return since the success typing arguments are (any(),map())
+map_galore.erl:1765: The call maps:get('a',#{'b':=1, 'c':=2}) will never return since the success typing arguments are (any(),map())
+map_galore.erl:186: The pattern #{'x':=2} can never match the type #{'x':=3}
+map_galore.erl:187: The pattern #{'x':=3} can never match the type {'a','b','c'}
+map_galore.erl:188: The pattern #{'x':=3} can never match the type #{'y':=3}
+map_galore.erl:189: The pattern #{'x':=3} can never match the type #{'x':=[101 | 104 | 114 | 116,...]}
+map_galore.erl:2304: Cons will produce an improper list since its 2nd argument is {'b','a'}
+map_galore.erl:2304: The call maps:from_list(nonempty_improper_list({'a','b'},{'b','a'})) will never return since it differs in the 1st argument from the success typing arguments: ([{_,_}])
+map_galore.erl:2305: The call maps:from_list('a') will never return since it differs in the 1st argument from the success typing arguments: ([{_,_}])
+map_galore.erl:2306: The call maps:from_list(42) will never return since it differs in the 1st argument from the success typing arguments: ([{_,_}])
+map_galore.erl:997: A key of type 'nonexisting' cannot exist in a map of type #{}
+map_galore.erl:998: A key of type 'nonexisting' cannot exist in a map of type #{1:='a', 2:='b', 4:='d', 5:='e', float()=>'c'}
diff --git a/lib/dialyzer/test/map_SUITE_data/results/map_in_guard b/lib/dialyzer/test/map_SUITE_data/results/map_in_guard
new file mode 100644
index 0000000000..1015f76128
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/map_in_guard
@@ -0,0 +1,4 @@
+
+map_in_guard.erl:10: The call map_in_guard:assoc_update('not_a_map') will never return since it differs in the 1st argument from the success typing arguments: (#{})
+map_in_guard.erl:13: The call map_in_guard:assoc_guard_clause('not_a_map') will never return since it differs in the 1st argument from the success typing arguments: (#{})
+map_in_guard.erl:20: The call map_in_guard:exact_guard_clause(#{}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':='q'})
diff --git a/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2 b/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2
new file mode 100644
index 0000000000..f6fb98a863
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2
@@ -0,0 +1,13 @@
+
+map_in_guard2.erl:10: The call map_in_guard2:assoc_guard_clause('not_a_map') will never return since it differs in the 1st argument from the success typing arguments: (map())
+map_in_guard2.erl:12: The pattern 'true' can never match the type 'false'
+map_in_guard2.erl:14: The call map_in_guard2:exact_guard_clause(#{}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':=_, _=>_})
+map_in_guard2.erl:17: Clause guard cannot succeed. The variable M was matched against the type 'not_a_map'
+map_in_guard2.erl:20: Function assoc_update/1 has no local return
+map_in_guard2.erl:20: Guard test is_map(M::'not_a_map') can never succeed
+map_in_guard2.erl:22: Clause guard cannot succeed. The variable M was matched against the type 'not_a_map'
+map_in_guard2.erl:22: Function assoc_guard_clause/1 has no local return
+map_in_guard2.erl:24: Clause guard cannot succeed. The variable M was matched against the type #{}
+map_in_guard2.erl:27: Clause guard cannot succeed. The variable M was matched against the type #{}
+map_in_guard2.erl:27: Function exact_guard_clause/1 has no local return
+map_in_guard2.erl:8: The call map_in_guard2:assoc_update('not_a_map') will never return since it differs in the 1st argument from the success typing arguments: (map())
diff --git a/lib/dialyzer/test/map_SUITE_data/results/map_size b/lib/dialyzer/test/map_SUITE_data/results/map_size
new file mode 100644
index 0000000000..fc6c1f028c
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/map_size
@@ -0,0 +1,13 @@
+
+map_size.erl:11: The pattern 1 can never match the type 0
+map_size.erl:13: Function t2/0 has no local return
+map_size.erl:15: Function p/1 has no local return
+map_size.erl:15: Guard test 1 =:= 0 can never succeed
+map_size.erl:17: Function t3/0 has no local return
+map_size.erl:21: The pattern 4 can never match the type 1 | 2 | 3
+map_size.erl:23: Function t4/0 has no local return
+map_size.erl:24: The pattern 0 can never match the type 1 | 2 | 3
+map_size.erl:26: Function t5/1 has no local return
+map_size.erl:5: Function t1/0 has no local return
+map_size.erl:7: The pattern 1 can never match the type 0
+map_size.erl:9: Function e1/0 has no local return
diff --git a/lib/dialyzer/test/map_SUITE_data/results/maps_merge b/lib/dialyzer/test/map_SUITE_data/results/maps_merge
new file mode 100644
index 0000000000..0c347b4cdb
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/maps_merge
@@ -0,0 +1,11 @@
+
+maps_merge.erl:10: The pattern #{_:=_} can never match the type #{'a':=1, 3:='ok', 'q'=>none(), 7=>none(), atom() | integer()=>_}
+maps_merge.erl:12: Function t3/0 has no local return
+maps_merge.erl:14: The pattern #{7:='q'} can never match the type #{'a':=1, 3:='ok', 'q'=>none(), 7=>none(), atom() | integer()=>_}
+maps_merge.erl:16: Function t4/0 has no local return
+maps_merge.erl:18: The pattern #{7:='q'} can never match the type #{'a':=1, 3:='ok', 'q'=>none(), 7=>none(), atom() | integer()=>_}
+maps_merge.erl:20: Function t5/0 has no local return
+maps_merge.erl:21: The pattern #{'a':=2} can never match the type #{'a':=1, 'q'=>none(), 11=>_, atom()=>_}
+maps_merge.erl:5: Function t1/0 has no local return
+maps_merge.erl:6: The pattern #{'a':=1} can never match the type #{}
+maps_merge.erl:8: Function t2/0 has no local return
diff --git a/lib/dialyzer/test/map_SUITE_data/results/opaque_key b/lib/dialyzer/test/map_SUITE_data/results/opaque_key
new file mode 100644
index 0000000000..fb7080cdc5
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/opaque_key
@@ -0,0 +1,15 @@
+
+opaque_key_adt.erl:41: Invalid type specification for function opaque_key_adt:s4/0. The success typing is () -> #{1:='a'}
+opaque_key_adt.erl:44: Invalid type specification for function opaque_key_adt:s5/0. The success typing is () -> #{2:=3}
+opaque_key_adt.erl:56: Invalid type specification for function opaque_key_adt:smt1/0. The success typing is () -> #{3:='a'}
+opaque_key_adt.erl:59: Invalid type specification for function opaque_key_adt:smt2/0. The success typing is () -> #{1:='a'}
+opaque_key_use.erl:13: The test opaque_key_use:t() =:= opaque_key_use:t(integer()) can never evaluate to 'true'
+opaque_key_use.erl:24: Attempt to test for equality between a term of type opaque_key_adt:t(integer()) and a term of opaque type opaque_key_adt:t()
+opaque_key_use.erl:37: Function adt_mm1/0 has no local return
+opaque_key_use.erl:40: The attempt to match a term of type opaque_key_adt:m() against the pattern #{A:=R} breaks the opaqueness of the term
+opaque_key_use.erl:48: Function adt_mu1/0 has no local return
+opaque_key_use.erl:51: Guard test is_map(M::opaque_key_adt:m()) breaks the opaqueness of its argument
+opaque_key_use.erl:53: Function adt_mu2/0 has no local return
+opaque_key_use.erl:56: Guard test is_map(M::opaque_key_adt:m()) breaks the opaqueness of its argument
+opaque_key_use.erl:58: Function adt_mu3/0 has no local return
+opaque_key_use.erl:60: Guard test is_map(M::opaque_key_adt:m()) breaks the opaqueness of its argument
diff --git a/lib/dialyzer/test/map_SUITE_data/results/order b/lib/dialyzer/test/map_SUITE_data/results/order
new file mode 100644
index 0000000000..7be789a11a
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/order
@@ -0,0 +1,17 @@
+
+order.erl:12: Function t2/0 has no local return
+order.erl:14: Guard test is_integer(Int::'b') can never succeed
+order.erl:16: The variable _Else can never match since previous clauses completely covered the type 'b'
+order.erl:19: Function t3/0 has no local return
+order.erl:21: Guard test is_integer(Int::'b') can never succeed
+order.erl:23: The variable _Else can never match since previous clauses completely covered the type 'b'
+order.erl:30: The variable _Else can never match since previous clauses completely covered the type 'b' | 1
+order.erl:33: Function t5/0 has no local return
+order.erl:36: The variable Atom can never match since previous clauses completely covered the type 1
+order.erl:37: The variable _Else can never match since previous clauses completely covered the type 1
+order.erl:40: Function t6/0 has no local return
+order.erl:42: Guard test is_integer(Int::'b') can never succeed
+order.erl:44: The variable _Else can never match since previous clauses completely covered the type 'b'
+order.erl:5: Function t1/0 has no local return
+order.erl:7: Guard test is_integer(Int::'b') can never succeed
+order.erl:9: The variable _Else can never match since previous clauses completely covered the type 'b'
diff --git a/lib/gs/contribs/ebin/.gitignore b/lib/dialyzer/test/map_SUITE_data/results/subtract_value_flip
index e69de29bb2..e69de29bb2 100644
--- a/lib/gs/contribs/ebin/.gitignore
+++ b/lib/dialyzer/test/map_SUITE_data/results/subtract_value_flip
diff --git a/lib/dialyzer/test/map_SUITE_data/results/typeflow b/lib/dialyzer/test/map_SUITE_data/results/typeflow
new file mode 100644
index 0000000000..acfb7f551e
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/typeflow
@@ -0,0 +1,4 @@
+
+typeflow.erl:14: Function t2/1 has no local return
+typeflow.erl:16: The call lists:sort(integer()) will never return since it differs in the 1st argument from the success typing arguments: ([any()])
+typeflow.erl:9: The variable _ can never match since previous clauses completely covered the type #{'a':=integer(), _=>_}
diff --git a/lib/dialyzer/test/map_SUITE_data/results/typeflow2 b/lib/dialyzer/test/map_SUITE_data/results/typeflow2
new file mode 100644
index 0000000000..3adf638978
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/typeflow2
@@ -0,0 +1,13 @@
+
+typeflow2.erl:10: The pattern #{'a':=X} can never match the type #{'a'=>none(), _=>maybe_improper_list() | integer()}
+typeflow2.erl:11: The pattern #{'a':=X} can never match the type #{'a'=>none(), _=>maybe_improper_list() | integer()}
+typeflow2.erl:26: Function t2/1 has no local return
+typeflow2.erl:29: The call lists:sort(integer()) will never return since it differs in the 1st argument from the success typing arguments: ([any()])
+typeflow2.erl:42: The pattern #{'a':=X} can never match since previous clauses completely covered the type #{'a':=integer()}
+typeflow2.erl:43: The variable _ can never match since previous clauses completely covered the type #{'a':=integer()}
+typeflow2.erl:48: The pattern #{} can never match since previous clauses completely covered the type #{'a':=atom() | maybe_improper_list() | integer()}
+typeflow2.erl:58: The pattern #{'a':=X} can never match the type #{'a'=>none(), _=>maybe_improper_list() | integer()}
+typeflow2.erl:59: The pattern #{'a':=X} can never match the type #{'a'=>none(), _=>maybe_improper_list() | integer()}
+typeflow2.erl:60: The pattern #{'a':=X} can never match the type #{'a'=>none(), _=>maybe_improper_list() | integer()}
+typeflow2.erl:82: The pattern #{'a':=X} can never match the type #{}
+typeflow2.erl:83: The pattern #{'a':=X} can never match the type #{}
diff --git a/lib/dialyzer/test/map_SUITE_data/results/typesig b/lib/dialyzer/test/map_SUITE_data/results/typesig
new file mode 100644
index 0000000000..fb2f851a7d
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/results/typesig
@@ -0,0 +1,5 @@
+
+typesig.erl:5: Function t1/0 has no local return
+typesig.erl:5: The call typesig:test(#{'a':=1}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':={number()}, _=>_})
+typesig.erl:6: Function t2/0 has no local return
+typesig.erl:6: The call typesig:test(#{'a':={'b'}}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':={number()}, _=>_})
diff --git a/lib/dialyzer/test/map_SUITE_data/src/bad_argument.erl b/lib/dialyzer/test/map_SUITE_data/src/bad_argument.erl
new file mode 100644
index 0000000000..95e2b32ddc
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/bad_argument.erl
@@ -0,0 +1,19 @@
+-module(bad_argument).
+
+-export([t/0, t2/0, t3/0]).
+
+t() ->
+ _=(id1(#{a=>q}))#{b:=9}.
+
+t2() ->
+ _ = id2(4),
+ X = id2(3),
+ _ = (#{ X => q})#{3 := p},
+ X.
+
+t3() ->
+ (id3(not_a_map))#{a => b}.
+
+id1(X) -> X.
+id2(X) -> X.
+id3(X) -> X.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/bug.erl b/lib/dialyzer/test/map_SUITE_data/src/bug.erl
new file mode 100644
index 0000000000..fc32f5641a
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/bug.erl
@@ -0,0 +1,63 @@
+-module(bug).
+
+-export([t1/0, f1/1
+ ,t2/0, f2/1
+ ,t3/0, f3/1
+ ,t4/0, f4/1
+ ,t5/0, f5/1
+ ]).
+
+t1() ->
+ V = f1(#{a=>b}),
+ case V of
+ #{a := Q} -> Q; %% Must not warn here
+ _ -> ok
+ end,
+ ok.
+
+f1(M) -> %% Should get map() succ typing
+ #{} = M.
+
+t2() ->
+ V = f2([#{a=>b}]),
+ case V of
+ [#{a := P}] -> P; %% Must not warn here
+ _ -> ok
+ end,
+ ok.
+
+f2(M) -> %% Should get [map(),...] succ typing
+ [#{}] = M.
+
+t3() ->
+ V = f3([#{a=>b},a]),
+ case V of
+ [#{a := P}, _Q] -> P; %% Must not warn here
+ _ -> ok
+ end,
+ ok.
+
+f3(M) -> %% Should get [map()|a,...] succ typing
+ [#{},a] = M.
+
+t4() ->
+ V = f4({#{a=>b},{}}),
+ case V of
+ {#{a := P},{}} -> P; %% Must not warn here
+ _ -> ok
+ end,
+ ok.
+
+f4(M) -> %% Should get {map(),{}} succ typing
+ {#{},{}} = M.
+
+t5() ->
+ V = f5(#{k=>q,a=>b}),
+ case V of
+ #{k := q, a := P} -> P; %% Must not warn here
+ _ -> ok
+ end,
+ ok.
+
+f5(M) -> %% Should get #{k:=q, ...} succ typing
+ #{k:=q} = M.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/contract.erl b/lib/dialyzer/test/map_SUITE_data/src/contract.erl
new file mode 100644
index 0000000000..2b31be0d58
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/contract.erl
@@ -0,0 +1,14 @@
+-module(missing).
+
+-export([t1/0, t2/0, t3/0, t4/0]).
+
+-spec f(#{a := 1, b => 2, c => 3}) -> ok.
+f(_) -> ok.
+
+t1() -> f(#{b => 2}).
+
+t2() -> f(#{a => 1, c => 4}).
+
+t3() -> f(#{a => 1, b => 2, e => 3}).
+
+t4() -> f(#{a => 1, b => 2}).
diff --git a/lib/dialyzer/test/map_SUITE_data/src/contract_violation.erl b/lib/dialyzer/test/map_SUITE_data/src/contract_violation.erl
new file mode 100644
index 0000000000..850f2cad34
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/contract_violation.erl
@@ -0,0 +1,29 @@
+-module(contract_violation).
+
+-export([entry/1, beam_disasm_lines/2]).
+
+%%-----------------------------------------------------------------------
+
+-type lines() :: #{non_neg_integer() => {string(), non_neg_integer()}}.
+
+entry(Bin) ->
+ I = 42,
+ case beam_disasm_lines(Bin, ':-)') of
+ #{I := Loc} -> {good, Loc};
+ _ -> bad
+ end.
+
+-spec beam_disasm_lines(binary() | none, module()) -> lines().
+
+beam_disasm_lines(none, _) -> #{};
+beam_disasm_lines(<<NumLines:32, LineBin:NumLines/binary, FileBin/binary>>,
+ _Module) ->
+ Lines = binary_to_term(LineBin),
+ Files = binary_to_term(FileBin),
+ lines_collect_items(Lines, Files, #{}).
+
+lines_collect_items([], _, Acc) -> Acc;
+lines_collect_items([{FileNo, LineNo}|Rest], Files, Acc) ->
+ #{FileNo := File} = Files,
+ lines_collect_items(
+ Rest, Files, Acc#{map_size(Acc)+1 => {location, File, LineNo}}).
diff --git a/lib/dialyzer/test/map_SUITE_data/src/exact.erl b/lib/dialyzer/test/map_SUITE_data/src/exact.erl
new file mode 100644
index 0000000000..e5ad02ec54
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/exact.erl
@@ -0,0 +1,23 @@
+-module(exact).
+
+-export([t1/1, t2/1]).
+
+t1(M = #{}) ->
+ any_map(M),
+ case M of
+ #{a := _} -> error(fail);
+ _ -> ok
+ end.
+
+any_map(X) ->
+ X#{a => 1, a := 2}.
+
+t2(M = #{}) ->
+ has_a(M),
+ case M of
+ #{a := _} -> error(ok);
+ _ -> unreachable
+ end.
+
+has_a(M) ->
+ M#{a := 1, a => 2}.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/guard_update.erl b/lib/dialyzer/test/map_SUITE_data/src/guard_update.erl
new file mode 100644
index 0000000000..19d0089401
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/guard_update.erl
@@ -0,0 +1,18 @@
+-module(guard_update).
+
+-export([t/0, t2/0]).
+
+t() ->
+ f(#{a=>2}). %% Illegal
+
+f(M)
+ when M#{b := 7} =/= q
+ -> ok.
+
+t2() ->
+ f2(#{a=>2}). %% Legal!
+
+f2(M)
+ when M#{b := 7} =/= q;
+ M =/= p
+ -> ok.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/initial_dataflow.erl b/lib/dialyzer/test/map_SUITE_data/src/initial_dataflow.erl
new file mode 100644
index 0000000000..bbc0d5682a
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/initial_dataflow.erl
@@ -0,0 +1,11 @@
+-module(initial_dataflow).
+
+-export([test/0]).
+
+test() ->
+ false = assoc_guard(#{}),
+ true = assoc_guard(not_a_map),
+ ok.
+
+assoc_guard(#{}) -> true;
+assoc_guard(Q) -> false.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/is_map_guard.erl b/lib/dialyzer/test/map_SUITE_data/src/is_map_guard.erl
new file mode 100644
index 0000000000..ceb4a8763a
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/is_map_guard.erl
@@ -0,0 +1,17 @@
+-module(is_map_guard).
+
+-export([t1/0, t2/0, implicit/1, explicit/1
+ ]).
+
+t1() ->
+ _ = implicit(#{}),
+ implicit(not_a_map).
+
+implicit(M) ->
+ M#{}.
+
+t2() ->
+ explicit(#{q=>d}),
+ explicit(still_not_map).
+
+explicit(M) when is_map(M) -> ok.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/a.erl b/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/a.erl
new file mode 100644
index 0000000000..827984b20b
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/a.erl
@@ -0,0 +1,9 @@
+-module(a).
+-export([to_map/1, to_map/2]).
+-type t() :: #{type := b:t()}.
+
+-spec to_map(t()) -> map().
+to_map(Resource) -> to_map(Resource, #{}).
+
+-spec to_map(t(), map()) -> map().
+to_map(_, Map) when is_map(Map) -> #{}.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/b.erl b/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/b.erl
new file mode 100644
index 0000000000..31f9bb6b3e
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/b.erl
@@ -0,0 +1,3 @@
+-module(b).
+-export_type([t/0]).
+-type t() :: binary().
diff --git a/lib/dialyzer/test/map_SUITE_data/src/map_galore.erl b/lib/dialyzer/test/map_SUITE_data/src/map_galore.erl
new file mode 100644
index 0000000000..2611241379
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/map_galore.erl
@@ -0,0 +1,2824 @@
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(map_galore).
+-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_group/2,end_per_group/2
+ ]).
+
+-export([
+ t_build_and_match_literals/1, t_build_and_match_literals_large/1,
+ t_update_literals/1, t_update_literals_large/1,
+ t_match_and_update_literals/1, t_match_and_update_literals_large/1,
+ t_update_map_expressions/1,
+ t_update_assoc/1, t_update_assoc_large/1,
+ t_update_exact/1, t_update_exact_large/1,
+ t_guard_bifs/1,
+ t_guard_sequence/1, t_guard_sequence_large/1,
+ t_guard_update/1, t_guard_update_large/1,
+ t_guard_receive/1, t_guard_receive_large/1,
+ t_guard_fun/1,
+ t_update_deep/1,
+ t_list_comprehension/1,
+ t_map_sort_literals/1,
+ t_map_equal/1,
+ t_map_compare/1,
+ t_map_size/1,
+ t_is_map/1,
+
+ %% Specific Map BIFs
+ t_bif_map_get/1,
+ t_bif_map_find/1,
+ t_bif_map_is_key/1,
+ t_bif_map_keys/1,
+ t_bif_map_merge/1,
+ t_bif_map_new/1,
+ t_bif_map_put/1,
+ t_bif_map_remove/1,
+ t_bif_map_update/1,
+ t_bif_map_values/1,
+ t_bif_map_to_list/1,
+ t_bif_map_from_list/1,
+
+ %% erlang
+ t_erlang_hash/1,
+ t_map_encode_decode/1,
+
+ %% non specific BIF related
+ t_bif_build_and_check/1,
+ t_bif_merge_and_check/1,
+
+ %% maps module not bifs
+ t_maps_fold/1,
+ t_maps_map/1,
+ t_maps_size/1,
+ t_maps_without/1,
+
+ %% misc
+ t_erts_internal_order/1,
+ t_erts_internal_hash/1,
+ t_pdict/1,
+ t_ets/1,
+ t_dets/1,
+ t_tracing/1,
+
+ %% instruction-level tests
+ t_has_map_fields/1,
+ y_regs/1
+ ]).
+
+-include_lib("stdlib/include/ms_transform.hrl").
+
+-define(CHECK(Cond,Term),
+ case (catch (Cond)) of
+ true -> true;
+ _ -> io:format("###### CHECK FAILED ######~nINPUT: ~p~n", [Term]),
+ exit(Term)
+ end).
+
+suite() -> [].
+
+all() -> [
+ t_build_and_match_literals, t_build_and_match_literals_large,
+ t_update_literals, t_update_literals_large,
+ t_match_and_update_literals, t_match_and_update_literals_large,
+ t_update_map_expressions,
+ t_update_assoc, t_update_assoc_large,
+ t_update_exact, t_update_exact_large,
+ t_guard_bifs,
+ t_guard_sequence, t_guard_sequence_large,
+ t_guard_update, t_guard_update_large,
+ t_guard_receive, t_guard_receive_large,
+ t_guard_fun, t_list_comprehension,
+ t_update_deep,
+ t_map_equal, t_map_compare,
+ t_map_sort_literals,
+
+ %% Specific Map BIFs
+ t_bif_map_get,t_bif_map_find,t_bif_map_is_key,
+ t_bif_map_keys, t_bif_map_merge, t_bif_map_new,
+ t_bif_map_put,
+ t_bif_map_remove, t_bif_map_update,
+ t_bif_map_values,
+ t_bif_map_to_list, t_bif_map_from_list,
+
+ %% erlang
+ t_erlang_hash, t_map_encode_decode,
+ t_map_size, t_is_map,
+
+ %% non specific BIF related
+ t_bif_build_and_check,
+ t_bif_merge_and_check,
+
+ %% maps module
+ t_maps_fold, t_maps_map,
+ t_maps_size, t_maps_without,
+
+
+ %% Other functions
+ t_erts_internal_order,
+ t_erts_internal_hash,
+ t_pdict,
+ t_ets,
+ t_tracing,
+
+ %% instruction-level tests
+ t_has_map_fields,
+ y_regs
+ ].
+
+groups() -> [].
+
+init_per_suite(Config) -> Config.
+end_per_suite(_Config) -> ok.
+
+init_per_group(_GroupName, Config) -> Config.
+end_per_group(_GroupName, Config) -> Config.
+
+%% tests
+
+t_build_and_match_literals(Config) when is_list(Config) ->
+ #{} = #{},
+ #{1:=a} = #{1=>a},
+ #{1:=a,2:=b} = #{1=>a,2=>b},
+ #{1:=a,2:=b,3:="c"} = #{1=>a,2=>b,3=>"c"},
+ #{1:=a,2:=b,3:="c","4":="d"} = #{1=>a,2=>b,3=>"c","4"=>"d"},
+ #{1:=a,2:=b,3:="c","4":="d",<<"5">>:=<<"e">>} =
+ #{1=>a,2=>b,3=>"c","4"=>"d",<<"5">>=><<"e">>},
+ #{1:=a,2:=b,3:="c","4":="d",<<"5">>:=<<"e">>,{"6",7}:="f"} =
+ #{1=>a,2=>b,3=>"c","4"=>"d",<<"5">>=><<"e">>,{"6",7}=>"f"},
+ #{1:=a,2:=b,3:="c","4":="d",<<"5">>:=<<"e">>,{"6",7}:="f",8:=g} =
+ #{1=>a,2=>b,3=>"c","4"=>"d",<<"5">>=><<"e">>,{"6",7}=>"f",8=>g},
+
+ #{[]:=a,42.0:=b,x:={x,y},[a,b]:=list} =
+ #{[]=>a,42.0=>b,x=>{x,y},[a,b]=>list},
+
+ #{<<"hi all">> := 1} = #{<<"hi",32,"all">> => 1},
+
+ #{a:=X,a:=X=3,b:=4} = #{a=>3,b=>4}, % weird but ok =)
+
+ #{ a:=#{ b:=#{c := third, b:=second}}, b:=first} =
+ #{ b=>first, a=>#{ b=>#{c => third, b=> second}}},
+
+ M = #{ map_1=>#{ map_2=>#{value_3 => third}, value_2=> second}, value_1=>first},
+ M = #{ map_1:=#{ map_2:=#{value_3 := third}, value_2:= second}, value_1:=first} =
+ #{ map_1=>#{ map_2=>#{value_3 => third}, value_2=> second}, value_1=>first},
+
+ %% error case
+ %V = 32,
+ %{'EXIT',{{badmatch,_},_}} = (catch (#{<<"hi all">> => 1} = #{<<"hi",V,"all">> => 1})),
+ {'EXIT',{{badmatch,_},_}} = (catch (#{x:=3,x:=2} = #{x=>3})),
+ {'EXIT',{{badmatch,_},_}} = (catch (#{x:=2} = #{x=>3})),
+ {'EXIT',{{badmatch,_},_}} = (catch (#{x:=3} = {a,b,c})),
+ {'EXIT',{{badmatch,_},_}} = (catch (#{x:=3} = #{y=>3})),
+ {'EXIT',{{badmatch,_},_}} = (catch (#{x:=3} = #{x=>"three"})),
+ ok.
+
+t_build_and_match_literals_large(Config) when is_list(Config) ->
+ % normal non-repeating
+ M0 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" },
+
+ #{10:=a0,20:=b0,30:="c0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M0,
+ #{11:=a1,21:=b1,31:="c1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M0,
+ #{12:=a2,22:=b2,32:="c2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M0,
+ #{13:=a3,23:=b3,33:="c3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M0,
+ #{14:=a4,24:=b4,34:="c4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M0,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M0,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M0,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M0,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M0,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M0,
+
+ 60 = map_size(M0),
+ 60 = maps:size(M0),
+
+ % with repeating
+ M1 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 10=>na0,20=>nb0,30=>"nc0","40"=>"nd0",<<"50">>=>"ne0",{["00"]}=>"n10",
+ 11=>na1,21=>nb1,31=>"nc1","41"=>"nd1",<<"51">>=>"ne1",{["01"]}=>"n11",
+ 12=>na2,22=>nb2,32=>"nc2","42"=>"nd2",<<"52">>=>"ne2",{["02"]}=>"n12",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+
+ 13=>na3,23=>nb3,33=>"nc3","43"=>"nd3",<<"53">>=>"ne3",{["03"]}=>"n13",
+ 14=>na4,24=>nb4,34=>"nc4","44"=>"nd4",<<"54">>=>"ne4",{["04"]}=>"n14",
+
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" },
+
+ #{10:=na0,20:=nb0,30:="nc0","40":="nd0",<<"50">>:="ne0",{["00"]}:="n10"} = M1,
+ #{11:=na1,21:=nb1,31:="nc1","41":="nd1",<<"51">>:="ne1",{["01"]}:="n11"} = M1,
+ #{12:=na2,22:=nb2,32:="nc2","42":="nd2",<<"52">>:="ne2",{["02"]}:="n12"} = M1,
+ #{13:=na3,23:=nb3,33:="nc3","43":="nd3",<<"53">>:="ne3",{["03"]}:="n13"} = M1,
+ #{14:=na4,24:=nb4,34:="nc4","44":="nd4",<<"54">>:="ne4",{["04"]}:="n14"} = M1,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M1,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M1,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M1,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M1,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M1,
+
+ 60 = map_size(M1),
+ 60 = maps:size(M1),
+
+ % with floats
+
+ M2 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9"},
+
+ #{10:=a0,20:=b0,30:="c0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M2,
+ #{11:=a1,21:=b1,31:="c1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M2,
+ #{12:=a2,22:=b2,32:="c2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M2,
+ #{13:=a3,23:=b3,33:="c3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M2,
+ #{14:=a4,24:=b4,34:="c4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M2,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M2,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M2,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M2,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M2,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M2,
+
+ #{10.0:=fa0,20.0:=fb0,30.0:="fc0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M2,
+ #{11.0:=fa1,21.0:=fb1,31.0:="fc1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M2,
+ #{12.0:=fa2,22.0:=fb2,32.0:="fc2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M2,
+ #{13.0:=fa3,23.0:=fb3,33.0:="fc3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M2,
+ #{14.0:=fa4,24.0:=fb4,34.0:="fc4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M2,
+
+ #{15.0:=fa5,25.0:=fb5,35.0:="fc5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M2,
+ #{16.0:=fa6,26.0:=fb6,36.0:="fc6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M2,
+ #{17.0:=fa7,27.0:=fb7,37.0:="fc7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M2,
+ #{18.0:=fa8,28.0:=fb8,38.0:="fc8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M2,
+ #{19.0:=fa9,29.0:=fb9,39.0:="fc9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M2,
+
+ 90 = map_size(M2),
+ 90 = maps:size(M2),
+
+ % with bignums
+ M3 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9",
+
+ 36893488147419103232=>big1, 73786976294838206464=>big2,
+ 147573952589676412928=>big3, 18446744073709551616=>big4,
+ 4294967296=>big5, 8589934592=>big6,
+ 4294967295=>big7, 67108863=>big8
+ },
+
+ #{10:=a0,20:=b0,30:="c0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M3,
+ #{11:=a1,21:=b1,31:="c1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M3,
+ #{12:=a2,22:=b2,32:="c2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M3,
+ #{13:=a3,23:=b3,33:="c3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M3,
+ #{14:=a4,24:=b4,34:="c4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M3,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M3,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M3,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M3,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M3,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M3,
+
+ #{10.0:=fa0,20.0:=fb0,30.0:="fc0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M3,
+ #{11.0:=fa1,21.0:=fb1,31.0:="fc1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M3,
+ #{12.0:=fa2,22.0:=fb2,32.0:="fc2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M3,
+ #{13.0:=fa3,23.0:=fb3,33.0:="fc3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M3,
+ #{14.0:=fa4,24.0:=fb4,34.0:="fc4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M3,
+
+ #{15.0:=fa5,25.0:=fb5,35.0:="fc5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M3,
+ #{16.0:=fa6,26.0:=fb6,36.0:="fc6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M3,
+ #{17.0:=fa7,27.0:=fb7,37.0:="fc7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M3,
+ #{18.0:=fa8,28.0:=fb8,38.0:="fc8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M3,
+ #{19.0:=fa9,29.0:=fb9,39.0:="fc9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M3,
+
+ #{36893488147419103232:=big1,67108863:=big8,"45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M3,
+ #{147573952589676412928:=big3,8589934592:=big6,"46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M3,
+ #{4294967296:=big5,18446744073709551616:=big4,"47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M3,
+ #{4294967295:=big7,73786976294838206464:=big2,"48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M3,
+
+ 98 = map_size(M3),
+ 98 = maps:size(M3),
+
+ %% with maps
+
+ M4 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9",
+
+ #{ one => small, map => key } => "small map key 1",
+ #{ second => small, map => key } => "small map key 2",
+ #{ third => small, map => key } => "small map key 3",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" },
+
+ #{10:=a0,20:=b0,30:="c0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M4,
+ #{11:=a1,21:=b1,31:="c1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M4,
+ #{12:=a2,22:=b2,32:="c2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M4,
+ #{13:=a3,23:=b3,33:="c3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M4,
+ #{14:=a4,24:=b4,34:="c4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M4,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M4,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M4,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M4,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M4,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M4,
+
+ #{ #{ one => small, map => key } := "small map key 1",
+ #{ second => small, map => key } := "small map key 2",
+ #{ third => small, map => key } := "small map key 3" } = M4,
+
+ #{ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } := "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } := "large map key 2" } = M4,
+
+
+ #{ 15:=V1,25:=b5,35:=V2,"45":="d5",<<"55">>:=V3,{["05"]}:="15",
+ #{ one => small, map => key } := "small map key 1",
+ #{ second => small, map => key } := V4,
+ #{ third => small, map => key } := "small map key 3",
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } := V5 } = M4,
+
+ a5 = V1,
+ "c5" = V2,
+ "e5" = V3,
+ "small map key 2" = V4,
+ "large map key 1" = V5,
+
+ 95 = map_size(M4),
+ 95 = maps:size(M4),
+
+ % call for value
+
+ M5 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9",
+
+ #{ one => small, map => key } => "small map key 1",
+ #{ second => small, map => key } => "small map key 2",
+ #{ third => small, map => key } => "small map key 3",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" },
+
+ #{10:=a0,20:=b0,30:="c0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M5,
+ #{11:=a1,21:=b1,31:="c1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M5,
+ #{12:=a2,22:=b2,32:="c2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M5,
+ #{13:=a3,23:=b3,33:="c3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M5,
+ #{14:=a4,24:=b4,34:="c4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M5,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M5,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M5,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M5,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M5,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M5,
+
+ #{ #{ one => small, map => key } := "small map key 1",
+ #{ second => small, map => key } := "small map key 2",
+ #{ third => small, map => key } := "small map key 3" } = M5,
+
+ #{ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } := "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } := "large map key 2" } = M5,
+
+ 95 = map_size(M5),
+ 95 = maps:size(M5),
+
+ %% remember
+
+ #{10:=a0,20:=b0,30:="c0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M0,
+ #{11:=a1,21:=b1,31:="c1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M0,
+ #{12:=a2,22:=b2,32:="c2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M0,
+ #{13:=a3,23:=b3,33:="c3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M0,
+ #{14:=a4,24:=b4,34:="c4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M0,
+
+ #{10:=na0,20:=nb0,30:="nc0","40":="nd0",<<"50">>:="ne0",{["00"]}:="n10"} = M1,
+ #{11:=na1,21:=nb1,31:="nc1","41":="nd1",<<"51">>:="ne1",{["01"]}:="n11"} = M1,
+ #{12:=na2,22:=nb2,32:="nc2","42":="nd2",<<"52">>:="ne2",{["02"]}:="n12"} = M1,
+ #{13:=na3,23:=nb3,33:="nc3","43":="nd3",<<"53">>:="ne3",{["03"]}:="n13"} = M1,
+ #{14:=na4,24:=nb4,34:="nc4","44":="nd4",<<"54">>:="ne4",{["04"]}:="n14"} = M1,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M1,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M1,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M1,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M1,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M1,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M2,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M2,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M2,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M2,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M2,
+
+ #{10.0:=fa0,20.0:=fb0,30.0:="fc0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M2,
+ #{11.0:=fa1,21.0:=fb1,31.0:="fc1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M2,
+ #{12.0:=fa2,22.0:=fb2,32.0:="fc2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M2,
+ #{13.0:=fa3,23.0:=fb3,33.0:="fc3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M2,
+ #{14.0:=fa4,24.0:=fb4,34.0:="fc4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M2,
+
+ #{15:=a5,25:=b5,35:="c5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M3,
+ #{16:=a6,26:=b6,36:="c6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M3,
+ #{17:=a7,27:=b7,37:="c7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M3,
+ #{18:=a8,28:=b8,38:="c8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M3,
+ #{19:=a9,29:=b9,39:="c9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M3,
+
+ #{10.0:=fa0,20.0:=fb0,30.0:="fc0","40":="d0",<<"50">>:="e0",{["00"]}:="10"} = M3,
+ #{11.0:=fa1,21.0:=fb1,31.0:="fc1","41":="d1",<<"51">>:="e1",{["01"]}:="11"} = M3,
+ #{12.0:=fa2,22.0:=fb2,32.0:="fc2","42":="d2",<<"52">>:="e2",{["02"]}:="12"} = M3,
+ #{13.0:=fa3,23.0:=fb3,33.0:="fc3","43":="d3",<<"53">>:="e3",{["03"]}:="13"} = M3,
+ #{14.0:=fa4,24.0:=fb4,34.0:="fc4","44":="d4",<<"54">>:="e4",{["04"]}:="14"} = M3,
+
+ #{15.0:=fa5,25.0:=fb5,35.0:="fc5","45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M3,
+ #{16.0:=fa6,26.0:=fb6,36.0:="fc6","46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M3,
+ #{17.0:=fa7,27.0:=fb7,37.0:="fc7","47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M3,
+ #{18.0:=fa8,28.0:=fb8,38.0:="fc8","48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M3,
+ #{19.0:=fa9,29.0:=fb9,39.0:="fc9","49":="d9",<<"59">>:="e9",{["09"]}:="19"} = M3,
+
+ #{36893488147419103232:=big1,67108863:=big8,"45":="d5",<<"55">>:="e5",{["05"]}:="15"} = M3,
+ #{147573952589676412928:=big3,8589934592:=big6,"46":="d6",<<"56">>:="e6",{["06"]}:="16"} = M3,
+ #{4294967296:=big5,18446744073709551616:=big4,"47":="d7",<<"57">>:="e7",{["07"]}:="17"} = M3,
+ #{4294967295:=big7,73786976294838206464:=big2,"48":="d8",<<"58">>:="e8",{["08"]}:="18"} = M3,
+
+ ok.
+
+
+t_map_size(Config) when is_list(Config) ->
+ 0 = map_size(#{}),
+ 1 = map_size(#{a=>1}),
+ 1 = map_size(#{a=>"wat"}),
+ 2 = map_size(#{a=>1, b=>2}),
+ 3 = map_size(#{a=>1, b=>2, b=>"3","33"=><<"n">>}),
+
+ true = map_is_size(#{a=>1}, 1),
+ true = map_is_size(#{a=>1, a=>2}, 1),
+ M = #{ "a" => 1, "b" => 2},
+ true = map_is_size(M, 2),
+ false = map_is_size(M, 3),
+ true = map_is_size(M#{ "a" => 2}, 2),
+ false = map_is_size(M#{ "c" => 2}, 2),
+
+ Ks = [build_key(fun(K) -> <<1,K:32,1>> end,I)||I<-lists:seq(1,100)],
+ ok = build_and_check_size(Ks,0,#{}),
+
+ %% try deep collisions
+ %% statistically we get another subtree at 50k -> 100k elements
+ %% Try to be nice and don't use too much memory in the testcase,
+
+ N = 500000,
+ Is = lists:seq(1,N),
+ N = map_size(maps:from_list([{I,I}||I<-Is])),
+ N = map_size(maps:from_list([{<<I:32>>,I}||I<-Is])),
+ N = map_size(maps:from_list([{integer_to_list(I),I}||I<-Is])),
+ N = map_size(maps:from_list([{float(I),I}||I<-Is])),
+
+ %% Error cases.
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},_}} =
+ (catch map_size(T))
+ end),
+ ok.
+
+build_and_check_size([K|Ks],N,M0) ->
+ N = map_size(M0),
+ M1 = M0#{ K => K },
+ build_and_check_size(Ks,N + 1,M1);
+build_and_check_size([],N,M) ->
+ N = map_size(M),
+ ok.
+
+map_is_size(M,N) when map_size(M) =:= N -> true;
+map_is_size(_,_) -> false.
+
+t_is_map(Config) when is_list(Config) ->
+ true = is_map(#{}),
+ true = is_map(#{a=>1}),
+ false = is_map({a,b}),
+ false = is_map(x),
+ if is_map(#{}) -> ok end,
+ if is_map(#{b=>1}) -> ok end,
+ if not is_map([1,2,3]) -> ok end,
+ if not is_map(x) -> ok end,
+ ok.
+
+% test map updates without matching
+t_update_literals_large(Config) when is_list(Config) ->
+ Map = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9",
+
+ #{ one => small, map => key } => "small map key 1",
+ #{ second => small, map => key } => "small map key 2",
+ #{ third => small, map => key } => "small map key 3",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" },
+
+ #{x:="d",q:="4"} = loop_update_literals_x_q(Map, [
+ {"a","1"},{"b","2"},{"c","3"},{"d","4"}
+ ]),
+ ok.
+
+t_update_literals(Config) when is_list(Config) ->
+ Map = #{x=>1,y=>2,z=>3,q=>4},
+ #{x:="d",q:="4"} = loop_update_literals_x_q(Map, [
+ {"a","1"},{"b","2"},{"c","3"},{"d","4"}
+ ]),
+ ok.
+
+
+loop_update_literals_x_q(Map, []) -> Map;
+loop_update_literals_x_q(Map, [{X,Q}|Vs]) ->
+ loop_update_literals_x_q(Map#{q=>Q,x=>X},Vs).
+
+% test map updates with matching
+t_match_and_update_literals(Config) when is_list(Config) ->
+ Map = #{ x=>0,y=>"untouched",z=>"also untouched",q=>1,
+ #{ "one" => small, map => key } => "small map key 1" },
+ #{x:=16,q:=21,y:="untouched",z:="also untouched"} = loop_match_and_update_literals_x_q(Map, [
+ {1,2},{3,4},{5,6},{7,8}
+ ]),
+ M0 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+ M1 = #{},
+ M2 = M1#{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+ M0 = M2,
+
+ #{ 4 := another_number, int := 3 } = M2#{ 4 => another_number },
+ ok.
+
+t_match_and_update_literals_large(Config) when is_list(Config) ->
+ Map = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9",
+
+ x=>0,y=>"untouched",z=>"also untouched",q=>1,
+
+ #{ "one" => small, map => key } => "small map key 1",
+ #{ second => small, map => key } => "small map key 2",
+ #{ third => small, map => key } => "small map key 3",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" },
+
+ #{x:=16,q:=21,y:="untouched",z:="also untouched"} = loop_match_and_update_literals_x_q(Map, [
+ {1,2},{3,4},{5,6},{7,8}
+ ]),
+ M0 = Map#{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+ M1 = Map#{},
+ M2 = M1#{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+ M0 = M2,
+
+ #{ 4 := another_number, int := 3 } = M2#{ 4 => another_number },
+ ok.
+
+
+loop_match_and_update_literals_x_q(Map, []) -> Map;
+loop_match_and_update_literals_x_q(#{ q:=Q0, x:=X0,
+ #{ "one" => small, map => key } := "small map key 1" } = Map, [{X,Q}|Vs]) ->
+ loop_match_and_update_literals_x_q(Map#{q=>Q0+Q,x=>X0+X},Vs).
+
+
+t_update_map_expressions(Config) when is_list(Config) ->
+ M = maps:new(),
+ #{ a := 1 } = M#{a => 1},
+
+ #{ b := 2 } = (maps:new())#{ b => 2 },
+
+ #{ a :=42, b:=42, c:=42 } = (maps:from_list([{a,1},{b,2},{c,3}]))#{ a := 42, b := 42, c := 42 },
+ #{ "a" :=1, "b":=42, "c":=42 } = (maps:from_list([{"a",1},{"b",2}]))#{ "b" := 42, "c" => 42 },
+ Ks = lists:seq($a,$z),
+ #{ "aa" := {$a,$a}, "ac":=41, "dc":=42 } =
+ (maps:from_list([{[K1,K2],{K1,K2}}|| K1 <- Ks, K2 <- Ks]))#{ "ac" := 41, "dc" => 42 },
+
+ %% Error cases.
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},_}} =
+ (catch (T)#{a:=42,b=>2})
+ end),
+ ok.
+
+t_update_assoc(Config) when is_list(Config) ->
+ M0 = #{1=>a,2=>b,3.0=>c,4=>d,5=>e},
+
+ M1 = M0#{1=>42,2=>100,4=>[a,b,c]},
+ #{1:=42,2:=100,3.0:=c,4:=[a,b,c],5:=e} = M1,
+ #{1:=42,2:=b,4:=d,5:=e,2.0:=100,3.0:=c,4.0:=[a,b,c]} = M0#{1.0=>float,1:=42,2.0=>wrong,2.0=>100,4.0=>[a,b,c]},
+
+ M2 = M0#{3.0=>new},
+ #{1:=a,2:=b,3.0:=new,4:=d,5:=e} = M2,
+ M2 = M0#{3.0:=wrong,3.0=>new},
+
+ %% Errors cases.
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},_}} =
+ (catch T#{nonexisting=>val})
+ end),
+ ok.
+
+
+t_update_assoc_large(Config) when is_list(Config) ->
+ M0 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9",
+
+ #{ one => small, map => key } => "small map key 1",
+ #{ second => small, map => key } => "small map key 2",
+ #{ third => small, map => key } => "small map key 3",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" },
+
+
+ M1 = M0#{1=>42,2=>100,4=>[a,b,c]},
+ #{1:=42,2:=100,10.0:=fa0,4:=[a,b,c],25:=b5} = M1,
+ #{ 10:=43, 24:=b4, 15:=a5, 35:="c5", 2.0:=100, 13.0:=fa3, 4.0:=[a,b,c]} =
+ M0#{1.0=>float,10:=43,2.0=>wrong,2.0=>100,4.0=>[a,b,c]},
+
+ M2 = M0#{13.0=>new},
+ #{10:=a0,20:=b0,13.0:=new,"40":="d0",<<"50">>:="e0"} = M2,
+ M2 = M0#{13.0:=wrong,13.0=>new},
+
+ ok.
+
+t_update_exact(Config) when is_list(Config) ->
+ M0 = #{1=>a,2=>b,3.0=>c,4=>d,5=>e},
+
+ M1 = M0#{1:=42,2:=100,4:=[a,b,c]},
+ #{1:=42,2:=100,3.0:=c,4:=[a,b,c],5:=e} = M1,
+ M1 = M0#{1:=wrong,1=>42,2=>wrong,2:=100,4:=[a,b,c]},
+
+ M2 = M0#{3.0:=new},
+ #{1:=a,2:=b,3.0:=new,4:=d,5:=e} = M2,
+ M2 = M0#{3.0=>wrong,3.0:=new},
+ true = M2 =/= M0#{3=>right,3.0:=new},
+ #{ 3 := right, 3.0 := new } = M0#{3=>right,3.0:=new},
+
+ M3 = #{ 1 => val},
+ #{1 := update2,1.0 := new_val4} = M3#{
+ 1.0 => new_val1, 1 := update, 1=> update3,
+ 1 := update2, 1.0 := new_val2, 1.0 => new_val3,
+ 1.0 => new_val4 },
+
+ %% Errors cases.
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},_}} =
+ (catch T#{nonexisting=>val})
+ end),
+ Empty = #{},
+ {'EXIT',{{badkey,nonexisting},_}} = (catch Empty#{nonexisting:=val}),
+ {'EXIT',{{badkey,nonexisting},_}} = (catch M0#{nonexisting:=val}),
+ {'EXIT',{{badkey,1.0},_}} = (catch M0#{1.0:=v,1.0=>v2}),
+ {'EXIT',{{badkey,42},_}} = (catch M0#{42.0:=v,42:=v2}),
+ {'EXIT',{{badkey,42.0},_}} = (catch M0#{42=>v1,42.0:=v2,42:=v3}),
+
+ ok.
+
+t_update_exact_large(Config) when is_list(Config) ->
+ M0 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9",
+
+ #{ one => small, map => key } => "small map key 1",
+ #{ second => small, map => key } => "small map key 2",
+ #{ third => small, map => key } => "small map key 3",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" },
+
+
+ M1 = M0#{10:=42,<<"55">>:=100,10.0:=[a,b,c]},
+ #{ 10:=42,<<"55">>:=100,{["05"]}:="15",10.0:=[a,b,c],
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } := "large map key 1" } = M1,
+
+ M1 = M0#{10:=wrong,10=>42,<<"55">>=>wrong,<<"55">>:=100,10.0:=[a,b,c]},
+
+ M2 = M0#{13.0:=new},
+ #{10:=a0,20:=b0,13.0:=new} = M2,
+ M2 = M0#{13.0=>wrong,13.0:=new},
+
+ %% Errors cases.
+ {'EXIT',{{badkey,nonexisting},_}} = (catch M0#{nonexisting:=val}),
+ {'EXIT',{{badkey,1.0},_}} = (catch M0#{1.0:=v,1.0=>v2}),
+ {'EXIT',{{badkey,42},_}} = (catch M0#{42.0:=v,42:=v2}),
+ {'EXIT',{{badkey,42.0},_}} = (catch M0#{42=>v1,42.0:=v2,42:=v3}),
+
+ ok.
+
+t_update_deep(Config) when is_list(Config) ->
+ N = 250000,
+ M0 = maps:from_list([{integer_to_list(I),a}||I<-lists:seq(1,N)]),
+ #{ "1" := a, "10" := a, "100" := a, "1000" := a, "10000" := a } = M0,
+
+ M1 = M0#{ "1" := b, "10" := b, "100" := b, "1000" := b, "10000" := b },
+ #{ "1" := a, "10" := a, "100" := a, "1000" := a, "10000" := a } = M0,
+ #{ "1" := b, "10" := b, "100" := b, "1000" := b, "10000" := b } = M1,
+
+ M2 = M0#{ "1" => c, "10" => c, "100" => c, "1000" => c, "10000" => c },
+ #{ "1" := a, "10" := a, "100" := a, "1000" := a, "10000" := a } = M0,
+ #{ "1" := b, "10" := b, "100" := b, "1000" := b, "10000" := b } = M1,
+ #{ "1" := c, "10" := c, "100" := c, "1000" := c, "10000" := c } = M2,
+
+ M3 = M2#{ "n1" => d, "n10" => d, "n100" => d, "n1000" => d, "n10000" => d },
+ #{ "1" := a, "10" := a, "100" := a, "1000" := a, "10000" := a } = M0,
+ #{ "1" := b, "10" := b, "100" := b, "1000" := b, "10000" := b } = M1,
+ #{ "1" := c, "10" := c, "100" := c, "1000" := c, "10000" := c } = M2,
+ #{ "1" := c, "10" := c, "100" := c, "1000" := c, "10000" := c } = M3,
+ #{ "n1" := d, "n10" := d, "n100" := d, "n1000" := d, "n10000" := d } = M3,
+ ok.
+
+t_guard_bifs(Config) when is_list(Config) ->
+ true = map_guard_head(#{a=>1}),
+ false = map_guard_head([]),
+ true = map_guard_body(#{a=>1}),
+ false = map_guard_body({}),
+ true = map_guard_pattern(#{a=>1, <<"hi">> => "hi" }),
+ false = map_guard_pattern("list"),
+ ok.
+
+map_guard_head(M) when is_map(M) -> true;
+map_guard_head(_) -> false.
+
+map_guard_body(M) -> is_map(M).
+
+map_guard_pattern(#{}) -> true;
+map_guard_pattern(_) -> false.
+
+t_guard_sequence(Config) when is_list(Config) ->
+ {1, "a"} = map_guard_sequence_1(#{seq=>1,val=>"a"}),
+ {2, "b"} = map_guard_sequence_1(#{seq=>2,val=>"b"}),
+ {3, "c"} = map_guard_sequence_1(#{seq=>3,val=>"c"}),
+ {4, "d"} = map_guard_sequence_1(#{seq=>4,val=>"d"}),
+ {5, "e"} = map_guard_sequence_1(#{seq=>5,val=>"e"}),
+
+ {1,M1} = map_guard_sequence_2(M1 = #{a=>3}),
+ {2,M2} = map_guard_sequence_2(M2 = #{a=>4, b=>4}),
+ {3,gg,M3} = map_guard_sequence_2(M3 = #{a=>gg, b=>4}),
+ {4,sc,sc,M4} = map_guard_sequence_2(M4 = #{a=>sc, b=>3, c=>sc2}),
+ {5,kk,kk,M5} = map_guard_sequence_2(M5 = #{a=>kk, b=>other, c=>sc2}),
+
+ %% error case
+ {'EXIT',{function_clause,_}} = (catch map_guard_sequence_1(#{seq=>6,val=>"e"})),
+ {'EXIT',{function_clause,_}} = (catch map_guard_sequence_2(#{b=>5})),
+ ok.
+
+t_guard_sequence_large(Config) when is_list(Config) ->
+ M0 = #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00",03]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01",03]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02",03]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03",03]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04",03]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05",03]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06",03]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07",03]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08",03]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09",03]}=>"19",
+
+ 10.0=>fa0,20.0=>fb0,30.0=>"fc0",
+ 11.0=>fa1,21.0=>fb1,31.0=>"fc1",
+ 12.0=>fa2,22.0=>fb2,32.0=>"fc2",
+ 13.0=>fa3,23.0=>fb3,33.0=>"fc3",
+ 14.0=>fa4,24.0=>fb4,34.0=>"fc4",
+
+ 15.0=>fa5,25.0=>fb5,35.0=>"fc5",
+ 16.0=>fa6,26.0=>fb6,36.0=>"fc6",
+ 17.0=>fa7,27.0=>fb7,37.0=>"fc7",
+ 18.0=>fa8,28.0=>fb8,38.0=>"fc8",
+ 19.0=>fa9,29.0=>fb9,39.0=>"fc9",
+
+ #{ one => small, map => key } => "small map key 1",
+ #{ second => small, map => key } => "small map key 2",
+ #{ third => small, map => key } => "small map key 3",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" },
+
+ {1, "a"} = map_guard_sequence_1(M0#{seq=>1,val=>"a"}),
+ {2, "b"} = map_guard_sequence_1(M0#{seq=>2,val=>"b"}),
+ {3, "c"} = map_guard_sequence_1(M0#{seq=>3,val=>"c"}),
+ {4, "d"} = map_guard_sequence_1(M0#{seq=>4,val=>"d"}),
+ {5, "e"} = map_guard_sequence_1(M0#{seq=>5,val=>"e"}),
+
+ {1,M1} = map_guard_sequence_2(M1 = M0#{a=>3}),
+ {2,M2} = map_guard_sequence_2(M2 = M0#{a=>4, b=>4}),
+ {3,gg,M3} = map_guard_sequence_2(M3 = M0#{a=>gg, b=>4}),
+ {4,sc,sc,M4} = map_guard_sequence_2(M4 = M0#{a=>sc, b=>3, c=>sc2}),
+ {5,kk,kk,M5} = map_guard_sequence_2(M5 = M0#{a=>kk, b=>other, c=>sc2}),
+
+ {'EXIT',{function_clause,_}} = (catch map_guard_sequence_1(M0#{seq=>6,val=>"e"})),
+ {'EXIT',{function_clause,_}} = (catch map_guard_sequence_2(M0#{b=>5})),
+ ok.
+
+
+map_guard_sequence_1(#{seq:=1=Seq, val:=Val}) -> {Seq,Val};
+map_guard_sequence_1(#{seq:=2=Seq, val:=Val}) -> {Seq,Val};
+map_guard_sequence_1(#{seq:=3=Seq, val:=Val}) -> {Seq,Val};
+map_guard_sequence_1(#{seq:=4=Seq, val:=Val}) -> {Seq,Val};
+map_guard_sequence_1(#{seq:=5=Seq, val:=Val}) -> {Seq,Val}.
+
+map_guard_sequence_2(#{ a:=3 }=M) -> {1, M};
+map_guard_sequence_2(#{ a:=4 }=M) -> {2, M};
+map_guard_sequence_2(#{ a:=X, a:=X, b:=4 }=M) -> {3,X,M};
+map_guard_sequence_2(#{ a:=X, a:=Y, b:=3 }=M) when X =:= Y -> {4,X,Y,M};
+map_guard_sequence_2(#{ a:=X, a:=Y }=M) when X =:= Y -> {5,X,Y,M}.
+
+
+t_guard_update(Config) when is_list(Config) ->
+ error = map_guard_update(#{},#{}),
+ first = map_guard_update(#{}, #{x=>first}),
+ second = map_guard_update(#{y=>old}, #{x=>second,y=>old}),
+ ok.
+
+t_guard_update_large(Config) when is_list(Config) ->
+ M0 = #{ 70=>a0,80=>b0,90=>"c0","40"=>"d0",<<"50">>=>"e0",{["00",03]}=>"10",
+ 71=>a1,81=>b1,91=>"c1","41"=>"d1",<<"51">>=>"e1",{["01",03]}=>"11",
+ 72=>a2,82=>b2,92=>"c2","42"=>"d2",<<"52">>=>"e2",{["02",03]}=>"12",
+ 73=>a3,83=>b3,93=>"c3","43"=>"d3",<<"53">>=>"e3",{["03",03]}=>"13",
+ 74=>a4,84=>b4,94=>"c4","44"=>"d4",<<"54">>=>"e4",{["04",03]}=>"14",
+
+ 75=>a5,85=>b5,95=>"c5","45"=>"d5",<<"55">>=>"e5",{["05",03]}=>"15",
+ 76=>a6,86=>b6,96=>"c6","46"=>"d6",<<"56">>=>"e6",{["06",03]}=>"16",
+ 77=>a7,87=>b7,97=>"c7","47"=>"d7",<<"57">>=>"e7",{["07",03]}=>"17",
+ 78=>a8,88=>b8,98=>"c8","48"=>"d8",<<"58">>=>"e8",{["08",03]}=>"18",
+ 79=>a9,89=>b9,99=>"c9","49"=>"d9",<<"59">>=>"e9",{["09",03]}=>"19",
+
+ 70.0=>fa0,80.0=>fb0,90.0=>"fc0",
+ 71.0=>fa1,81.0=>fb1,91.0=>"fc1",
+ 72.0=>fa2,82.0=>fb2,92.0=>"fc2",
+ 73.0=>fa3,83.0=>fb3,93.0=>"fc3",
+ 74.0=>fa4,84.0=>fb4,94.0=>"fc4",
+
+ 75.0=>fa5,85.0=>fb5,95.0=>"fc5",
+ 76.0=>fa6,86.0=>fb6,96.0=>"fc6",
+ 77.0=>fa7,87.0=>fb7,97.0=>"fc7",
+ 78.0=>fa8,88.0=>fb8,98.0=>"fc8",
+ 79.0=>fa9,89.0=>fb9,99.0=>"fc9",
+
+ #{ one => small, map => key } => "small map key 1",
+ #{ second => small, map => key } => "small map key 2",
+ #{ third => small, map => key } => "small map key 3",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ 16=>a6,26=>b6,36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 1",
+
+ #{ 10=>a0,20=>b0,30=>"c0","40"=>"d0",<<"50">>=>"e0",{["00"]}=>"10",
+ 11=>a1,21=>b1,31=>"c1","41"=>"d1",<<"51">>=>"e1",{["01"]}=>"11",
+ 12=>a2,22=>b2,32=>"c2","42"=>"d2",<<"52">>=>"e2",{["02"]}=>"12",
+ 13=>a3,23=>b3,33=>"c3","43"=>"d3",<<"53">>=>"e3",{["03"]}=>"13",
+ 14=>a4,24=>b4,34=>"c4","44"=>"d4",<<"54">>=>"e4",{["04"]}=>"14",
+
+ 15=>a5,25=>b5,35=>"c5","45"=>"d5",<<"55">>=>"e5",{["05"]}=>"15",
+ k16=>a6,k26=>b6,k36=>"c6","46"=>"d6",<<"56">>=>"e6",{["06"]}=>"16",
+ 17=>a7,27=>b7,37=>"c7","47"=>"d7",<<"57">>=>"e7",{["07"]}=>"17",
+ 18=>a8,28=>b8,38=>"c8","48"=>"d8",<<"58">>=>"e8",{["08"]}=>"18",
+ 19=>a9,29=>b9,39=>"c9","49"=>"d9",<<"59">>=>"e9",{["09"]}=>"19" } => "large map key 2" },
+
+
+ error = map_guard_update(M0#{},M0#{}),
+ first = map_guard_update(M0#{},M0#{x=>first}),
+ second = map_guard_update(M0#{y=>old}, M0#{x=>second,y=>old}),
+ ok.
+
+
+map_guard_update(M1, M2) when M1#{x=>first} =:= M2 -> first;
+map_guard_update(M1, M2) when M1#{x=>second} =:= M2 -> second;
+map_guard_update(_, _) -> error.
+
+t_guard_receive(Config) when is_list(Config) ->
+ M0 = #{ id => 0 },
+ Pid = spawn_link(fun() -> guard_receive_loop() end),
+ Big = 36893488147419103229,
+ B1 = <<"some text">>,
+ B2 = <<"was appended">>,
+ B3 = <<B1/binary, B2/binary>>,
+
+ #{id:=1, res:=Big} = M1 = call(Pid, M0#{op=>sub,in=>{1 bsl 65, 3}}),
+ #{id:=2, res:=26} = M2 = call(Pid, M1#{op=>idiv,in=>{53,2}}),
+ #{id:=3, res:=832} = M3 = call(Pid, M2#{op=>imul,in=>{26,32}}),
+ #{id:=4, res:=4} = M4 = call(Pid, M3#{op=>add,in=>{1,3}}),
+ #{id:=5, res:=Big} = M5 = call(Pid, M4#{op=>sub,in=>{1 bsl 65, 3}}),
+ #{id:=6, res:=B3} = M6 = call(Pid, M5#{op=>"append",in=>{B1,B2}}),
+ #{id:=7, res:=4} = _ = call(Pid, M6#{op=>add,in=>{1,3}}),
+
+
+ %% update old maps and check id update
+ #{id:=2, res:=B3} = call(Pid, M1#{op=>"append",in=>{B1,B2}}),
+ #{id:=5, res:=99} = call(Pid, M4#{op=>add,in=>{33, 66}}),
+
+ %% cleanup
+ done = call(Pid, done),
+ ok.
+
+-define(t_guard_receive_large_procs, 1500).
+
+t_guard_receive_large(Config) when is_list(Config) ->
+ M = lists:foldl(fun(_,#{procs := Ps } = M) ->
+ M#{ procs := Ps#{ spawn_link(fun() -> grecv_loop() end) => 0 }}
+ end, #{procs => #{}, done => 0}, lists:seq(1,?t_guard_receive_large_procs)),
+ lists:foreach(fun(Pid) ->
+ Pid ! {self(), hello}
+ end, maps:keys(maps:get(procs,M))),
+ ok = guard_receive_large_loop(M),
+ ok.
+
+guard_receive_large_loop(#{done := ?t_guard_receive_large_procs}) ->
+ ok;
+guard_receive_large_loop(M) ->
+ receive
+ #{pid := Pid, msg := hello} ->
+ case M of
+ #{done := Count, procs := #{Pid := 150}} ->
+ Pid ! {self(), done},
+ guard_receive_large_loop(M#{done := Count + 1});
+ #{procs := #{Pid := Count} = Ps} ->
+ Pid ! {self(), hello},
+ guard_receive_large_loop(M#{procs := Ps#{Pid := Count + 1}})
+ end
+ end.
+
+grecv_loop() ->
+ receive
+ {_, done} ->
+ ok;
+ {Pid, hello} ->
+ Pid ! #{pid=>self(), msg=>hello},
+ grecv_loop()
+ end.
+
+call(Pid, M) ->
+ Pid ! {self(), M}, receive {Pid, Res} -> Res end.
+
+guard_receive_loop() ->
+ receive
+ {Pid, #{ id:=Id, op:="append", in:={X,Y}}=M} when is_binary(X), is_binary(Y) ->
+ Pid ! {self(), M#{ id=>Id+1, res=><<X/binary,Y/binary>>}},
+ guard_receive_loop();
+ {Pid, #{ id:=Id, op:=add, in:={X,Y}}} ->
+ Pid ! {self(), #{ id=>Id+1, res=>X+Y}},
+ guard_receive_loop();
+ {Pid, #{ id:=Id, op:=sub, in:={X,Y}}=M} ->
+ Pid ! {self(), M#{ id=>Id+1, res=>X-Y}},
+ guard_receive_loop();
+ {Pid, #{ id:=Id, op:=idiv, in:={X,Y}}=M} ->
+ Pid ! {self(), M#{ id=>Id+1, res=>X div Y}},
+ guard_receive_loop();
+ {Pid, #{ id:=Id, op:=imul, in:={X,Y}}=M} ->
+ Pid ! {self(), M#{ id=>Id+1, res=>X * Y}},
+ guard_receive_loop();
+ {Pid, done} ->
+ Pid ! {self(), done};
+ {Pid, Other} ->
+ Pid ! {error, Other},
+ guard_receive_loop()
+ end.
+
+
+t_list_comprehension(Config) when is_list(Config) ->
+ [#{k:=1},#{k:=2},#{k:=3}] = [#{k=>I} || I <- [1,2,3]],
+
+ Ks = lists:seq($a,$z),
+ Ms = [#{[K1,K2]=>{K1,K2}} || K1 <- Ks, K2 <- Ks],
+ [#{"aa" := {$a,$a}},#{"ab":={$a,$b}}|_] = Ms,
+ [#{"zz" := {$z,$z}},#{"zy":={$z,$y}}|_] = lists:reverse(Ms),
+ ok.
+
+t_guard_fun(Config) when is_list(Config) ->
+ F1 = fun
+ (#{s:=v,v:=V}) -> {v,V};
+ (#{s:=t,v:={V,V}}) -> {t,V};
+ (#{s:=l,v:=[V,V]}) -> {l,V}
+ end,
+
+ F2 = fun
+ (#{s:=T,v:={V,V}}) -> {T,V};
+ (#{s:=T,v:=[V,V]}) -> {T,V};
+ (#{s:=T,v:=V}) -> {T,V}
+ end,
+ V = <<"hi">>,
+
+ {v,V} = F1(#{s=>v,v=>V}),
+ {t,V} = F1(#{s=>t,v=>{V,V}}),
+ {l,V} = F1(#{s=>l,v=>[V,V]}),
+
+ {v,V} = F2(#{s=>v,v=>V}),
+ {t,V} = F2(#{s=>t,v=>{V,V}}),
+ {l,V} = F2(#{s=>l,v=>[V,V]}),
+
+ %% error case
+ {'EXIT', {function_clause,[{?MODULE,_,[#{s:=none,v:=none}],_}|_]}} = (catch F1(#{s=>none,v=>none})),
+ ok.
+
+
+t_map_sort_literals(Config) when is_list(Config) ->
+ % test relation
+
+ %% size order
+ true = #{ a => 1, b => 2} < #{ a => 1, b => 1, c => 1},
+ true = #{ b => 1, a => 1} < #{ c => 1, a => 1, b => 1},
+ false = #{ c => 1, b => 1, a => 1} < #{ c => 1, a => 1},
+
+ %% key order
+ true = #{ a => 1 } < #{ b => 1},
+ false = #{ b => 1 } < #{ a => 1},
+ true = #{ a => 1, b => 1, c => 1 } < #{ b => 1, c => 1, d => 1},
+ true = #{ b => 1, c => 1, d => 1 } > #{ a => 1, b => 1, c => 1},
+ true = #{ c => 1, b => 1, a => 1 } < #{ b => 1, c => 1, d => 1},
+ true = #{ "a" => 1 } < #{ <<"a">> => 1},
+ false = #{ <<"a">> => 1 } < #{ "a" => 1},
+ true = #{ 1 => 1 } < #{ 1.0 => 1},
+ false = #{ 1.0 => 1 } < #{ 1 => 1},
+
+ %% value order
+ true = #{ a => 1 } < #{ a => 2},
+ false = #{ a => 2 } < #{ a => 1},
+ false = #{ a => 2, b => 1 } < #{ a => 1, b => 3},
+ true = #{ a => 1, b => 1 } < #{ a => 1, b => 3},
+ false = #{ a => 1 } < #{ a => 1.0},
+ false = #{ a => 1.0 } < #{ a => 1},
+
+ true = #{ "a" => "hi", b => 134 } == #{ b => 134,"a" => "hi"},
+
+ %% large maps
+
+ M = maps:from_list([{I,I}||I <- lists:seq(1,500)]),
+
+ %% size order
+ true = M#{ a => 1, b => 2} < M#{ a => 1, b => 1, c => 1},
+ true = M#{ b => 1, a => 1} < M#{ c => 1, a => 1, b => 1},
+ false = M#{ c => 1, b => 1, a => 1} < M#{ c => 1, a => 1},
+
+ %% key order
+ true = M#{ a => 1 } < M#{ b => 1},
+ false = M#{ b => 1 } < M#{ a => 1},
+ true = M#{ a => 1, b => 1, c => 1 } < M#{ b => 1, c => 1, d => 1},
+ true = M#{ b => 1, c => 1, d => 1 } > M#{ a => 1, b => 1, c => 1},
+ true = M#{ c => 1, b => 1, a => 1 } < M#{ b => 1, c => 1, d => 1},
+ true = M#{ "a" => 1 } < M#{ <<"a">> => 1},
+ false = M#{ <<"a">> => 1 } < #{ "a" => 1},
+ true = M#{ 1 => 1 } < maps:remove(1,M#{ 1.0 => 1}),
+ false = M#{ 1.0 => 1 } < M#{ 1 => 1},
+
+ %% value order
+ true = M#{ a => 1 } < M#{ a => 2},
+ false = M#{ a => 2 } < M#{ a => 1},
+ false = M#{ a => 2, b => 1 } < M#{ a => 1, b => 3},
+ true = M#{ a => 1, b => 1 } < M#{ a => 1, b => 3},
+ false = M#{ a => 1 } < M#{ a => 1.0},
+ false = M#{ a => 1.0 } < M#{ a => 1},
+
+ true = M#{ "a" => "hi", b => 134 } == M#{ b => 134,"a" => "hi"},
+
+ %% lists:sort
+
+ SortVs = [#{"a"=>1},#{a=>2},#{1=>3},#{<<"a">>=>4}],
+ [#{1:=ok},#{a:=ok},#{"a":=ok},#{<<"a">>:=ok}] = lists:sort([#{"a"=>ok},#{a=>ok},#{1=>ok},#{<<"a">>=>ok}]),
+ [#{1:=3},#{a:=2},#{"a":=1},#{<<"a">>:=4}] = lists:sort(SortVs),
+ [#{1:=3},#{a:=2},#{"a":=1},#{<<"a">>:=4}] = lists:sort(lists:reverse(SortVs)),
+ ok.
+
+t_map_equal(Config) when is_list(Config) ->
+ true = #{} =:= #{},
+ false = #{} =:= #{a=>1},
+ false = #{a=>1} =:= #{},
+ true = #{ "a" => "hi", b => 134 } =:= #{ b => 134,"a" => "hi"},
+
+ false = #{ a => 1 } =:= #{ a => 2},
+ false = #{ a => 2 } =:= #{ a => 1},
+ false = #{ a => 2, b => 1 } =:= #{ a => 1, b => 3},
+ false = #{ a => 1, b => 1 } =:= #{ a => 1, b => 3},
+
+ true = #{ a => 1 } =:= #{ a => 1},
+ true = #{ "a" => 2 } =:= #{ "a" => 2},
+ true = #{ "a" => 2, b => 3 } =:= #{ "a" => 2, b => 3},
+ true = #{ a => 1, b => 3, c => <<"wat">> } =:= #{ a => 1, b => 3, c=><<"wat">>},
+ ok.
+
+
+t_map_compare(Config) when is_list(Config) ->
+ Seed = {erlang:monotonic_time(),
+ erlang:time_offset(),
+ erlang:unique_integer()},
+ io:format("seed = ~p\n", [Seed]),
+ random:seed(Seed),
+ repeat(100, fun(_) -> float_int_compare() end, []),
+ repeat(100, fun(_) -> recursive_compare() end, []),
+ ok.
+
+float_int_compare() ->
+ Terms = numeric_keys(3),
+ %%io:format("Keys to use: ~p\n", [Terms]),
+ Pairs = lists:map(fun(K) -> list_to_tuple([{K,V} || V <- Terms]) end, Terms),
+ lists:foreach(fun(Size) ->
+ MapGen = fun() -> map_gen(list_to_tuple(Pairs), Size) end,
+ repeat(100, fun do_compare/1, [MapGen, MapGen])
+ end,
+ lists:seq(1,length(Terms))),
+ ok.
+
+numeric_keys(N) ->
+ lists:foldl(fun(_,Acc) ->
+ Int = random:uniform(N*4) - N*2,
+ Float = float(Int),
+ [Int, Float, Float * 0.99, Float * 1.01 | Acc]
+ end,
+ [],
+ lists:seq(1,N)).
+
+
+repeat(0, _, _) ->
+ ok;
+repeat(N, Fun, Arg) ->
+ Fun(Arg),
+ repeat(N-1, Fun, Arg).
+
+copy_term(T) ->
+ Papa = self(),
+ P = spawn_link(fun() -> receive Msg -> Papa ! Msg end end),
+ P ! T,
+ receive R -> R end.
+
+do_compare([Gen1, Gen2]) ->
+ M1 = Gen1(),
+ M2 = Gen2(),
+ %%io:format("Maps to compare: ~p AND ~p\n", [M1, M2]),
+ C = (M1 < M2),
+ Erlang = maps_lessthan(M1, M2),
+ C = Erlang,
+ ?CHECK(M1==M1, M1),
+
+ %% Change one key from int to float (or vice versa) and check compare
+ ML1 = maps:to_list(M1),
+ {K1,V1} = lists:nth(random:uniform(length(ML1)), ML1),
+ case K1 of
+ I when is_integer(I) ->
+ case maps:find(float(I),M1) of
+ error ->
+ M1f = maps:remove(I, maps:put(float(I), V1, M1)),
+ ?CHECK(M1f > M1, [M1f, M1]);
+ _ -> ok
+ end;
+
+ F when is_float(F), round(F) == F ->
+ case maps:find(round(F),M1) of
+ error ->
+ M1i = maps:remove(F, maps:put(round(F), V1, M1)),
+ ?CHECK(M1i < M1, [M1i, M1]);
+ _ -> ok
+ end;
+
+ _ -> ok % skip floats with decimals
+ end,
+
+ ?CHECK(M2 == M2, [M2]).
+
+
+maps_lessthan(M1, M2) ->
+ case {maps:size(M1),maps:size(M2)} of
+ {_S,_S} ->
+ {K1,V1} = lists:unzip(term_sort(maps:to_list(M1))),
+ {K2,V2} = lists:unzip(term_sort(maps:to_list(M2))),
+
+ case erts_internal:cmp_term(K1,K2) of
+ -1 -> true;
+ 0 -> (V1 < V2);
+ 1 -> false
+ end;
+
+ {S1, S2} ->
+ S1 < S2
+ end.
+
+term_sort(L) ->
+ lists:sort(fun(A,B) -> erts_internal:cmp_term(A,B) =< 0 end,
+ L).
+
+
+cmp(T1, T2, Exact) when is_tuple(T1) and is_tuple(T2) ->
+ case {size(T1),size(T2)} of
+ {_S,_S} -> cmp(tuple_to_list(T1), tuple_to_list(T2), Exact);
+ {S1,S2} when S1 < S2 -> -1;
+ {S1,S2} when S1 > S2 -> 1
+ end;
+
+cmp([H1|T1], [H2|T2], Exact) ->
+ case cmp(H1,H2, Exact) of
+ 0 -> cmp(T1,T2, Exact);
+ C -> C
+ end;
+
+cmp(M1, M2, Exact) when is_map(M1) andalso is_map(M2) ->
+ cmp_maps(M1,M2,Exact);
+cmp(M1, M2, Exact) ->
+ cmp_others(M1, M2, Exact).
+
+cmp_maps(M1, M2, Exact) ->
+ case {maps:size(M1),maps:size(M2)} of
+ {_S,_S} ->
+ {K1,V1} = lists:unzip(term_sort(maps:to_list(M1))),
+ {K2,V2} = lists:unzip(term_sort(maps:to_list(M2))),
+
+ case cmp(K1, K2, true) of
+ 0 -> cmp(V1, V2, Exact);
+ C -> C
+ end;
+
+ {S1,S2} when S1 < S2 -> -1;
+ {S1,S2} when S1 > S2 -> 1
+ end.
+
+cmp_others(I, F, true) when is_integer(I), is_float(F) ->
+ -1;
+cmp_others(F, I, true) when is_float(F), is_integer(I) ->
+ 1;
+cmp_others(T1, T2, _) ->
+ case {T1<T2, T1==T2} of
+ {true,false} -> -1;
+ {false,true} -> 0;
+ {false,false} -> 1
+ end.
+
+map_gen(Pairs, Size) ->
+ {_,L} = lists:foldl(fun(_, {Keys, Acc}) ->
+ KI = random:uniform(size(Keys)),
+ K = element(KI,Keys),
+ KV = element(random:uniform(size(K)), K),
+ {erlang:delete_element(KI,Keys), [KV | Acc]}
+ end,
+ {Pairs, []},
+ lists:seq(1,Size)),
+
+ maps:from_list(L).
+
+
+recursive_compare() ->
+ Leafs = {atom, 17, 16.9, 17.1, [], self(), spawn(fun() -> ok end), make_ref(), make_ref()},
+ {A, B} = term_gen_recursive(Leafs, 0, 0),
+ %%io:format("Recursive term A = ~p\n", [A]),
+ %%io:format("Recursive term B = ~p\n", [B]),
+
+ ?CHECK({true,false} =:= case do_cmp(A, B, false) of
+ -1 -> {A<B, A>=B};
+ 0 -> {A==B, A/=B};
+ 1 -> {A>B, A=<B}
+ end,
+ {A,B}),
+ A2 = copy_term(A),
+ ?CHECK(A == A2, {A,A2}),
+ ?CHECK(0 =:= cmp(A, A2, false), {A,A2}),
+
+ B2 = copy_term(B),
+ ?CHECK(B == B2, {B,B2}),
+ ?CHECK(0 =:= cmp(B, B2, false), {B,B2}),
+ ok.
+
+do_cmp(A, B, Exact) ->
+ C = cmp(A, B, Exact),
+ C.
+
+%% Generate two terms {A,B} that may only differ
+%% at float vs integer types.
+term_gen_recursive(Leafs, Flags, Depth) ->
+ MaxDepth = 10,
+ Rnd = case {Flags, Depth} of
+ {_, MaxDepth} -> % Only leafs
+ random:uniform(size(Leafs)) + 3;
+ {0, 0} -> % Only containers
+ random:uniform(3);
+ {0,_} -> % Anything
+ random:uniform(size(Leafs)+3)
+ end,
+ case Rnd of
+ 1 -> % Make map
+ Size = random:uniform(size(Leafs)),
+ lists:foldl(fun(_, {Acc1,Acc2}) ->
+ {K1,K2} = term_gen_recursive(Leafs, Flags,
+ Depth+1),
+ {V1,V2} = term_gen_recursive(Leafs, Flags, Depth+1),
+ {maps:put(K1,V1, Acc1), maps:put(K2,V2, Acc2)}
+ end,
+ {maps:new(), maps:new()},
+ lists:seq(1,Size));
+ 2 -> % Make cons
+ {Car1,Car2} = term_gen_recursive(Leafs, Flags, Depth+1),
+ {Cdr1,Cdr2} = term_gen_recursive(Leafs, Flags, Depth+1),
+ {[Car1 | Cdr1], [Car2 | Cdr2]};
+ 3 -> % Make tuple
+ Size = random:uniform(size(Leafs)),
+ L = lists:map(fun(_) -> term_gen_recursive(Leafs, Flags, Depth+1) end,
+ lists:seq(1,Size)),
+ {L1, L2} = lists:unzip(L),
+ {list_to_tuple(L1), list_to_tuple(L2)};
+
+ N -> % Make leaf
+ case element(N-3, Leafs) of
+ I when is_integer(I) ->
+ case random:uniform(4) of
+ 1 -> {I, float(I)};
+ 2 -> {float(I), I};
+ _ -> {I,I}
+ end;
+ T -> {T,T}
+ end
+ end.
+
+%% BIFs
+t_bif_map_get(Config) when is_list(Config) ->
+ %% small map
+ 1 = maps:get(a, #{ a=> 1}),
+ 2 = maps:get(b, #{ a=> 1, b => 2}),
+ "hi" = maps:get("hello", #{ a=>1, "hello" => "hi"}),
+ "tuple hi" = maps:get({1,1.0}, #{ a=>a, {1,1.0} => "tuple hi"}),
+
+ M0 = #{ k1=>"v1", <<"k2">> => <<"v3">> },
+ "v4" = maps:get(<<"k2">>, M0#{<<"k2">> => "v4"}),
+
+ %% large map
+ M1 = maps:from_list([{I,I}||I<-lists:seq(1,100)] ++
+ [{a,1},{b,2},{"hello","hi"},{{1,1.0},"tuple hi"},
+ {k1,"v1"},{<<"k2">>,"v3"}]),
+ 1 = maps:get(a, M1),
+ 2 = maps:get(b, M1),
+ "hi" = maps:get("hello", M1),
+ "tuple hi" = maps:get({1,1.0}, M1),
+ "v3" = maps:get(<<"k2">>, M1),
+
+ %% error cases
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,get,_,_}|_]}} =
+ (catch maps:get(a, T))
+ end),
+
+ {'EXIT',{{badkey,{1,1}},[{maps,get,_,_}|_]}} =
+ (catch maps:get({1,1}, #{{1,1.0} => "tuple"})),
+ {'EXIT',{{badkey,a},[{maps,get,_,_}|_]}} = (catch maps:get(a, #{})),
+ {'EXIT',{{badkey,a},[{maps,get,_,_}|_]}} =
+ (catch maps:get(a, #{b=>1, c=>2})),
+ ok.
+
+t_bif_map_find(Config) when is_list(Config) ->
+ %% small map
+ {ok, 1} = maps:find(a, #{ a=> 1}),
+ {ok, 2} = maps:find(b, #{ a=> 1, b => 2}),
+ {ok, "int"} = maps:find(1, #{ 1 => "int"}),
+ {ok, "float"} = maps:find(1.0, #{ 1.0=> "float"}),
+
+ {ok, "hi"} = maps:find("hello", #{ a=>1, "hello" => "hi"}),
+ {ok, "tuple hi"} = maps:find({1,1.0}, #{ a=>a, {1,1.0} => "tuple hi"}),
+
+ M0 = #{ k1=>"v1", <<"k2">> => <<"v3">> },
+ {ok, "v4"} = maps:find(<<"k2">>, M0#{ <<"k2">> => "v4" }),
+
+ %% large map
+ M1 = maps:from_list([{I,I}||I<-lists:seq(1,100)] ++
+ [{a,1},{b,2},{"hello","hi"},{{1,1.0},"tuple hi"},
+ {k1,"v1"},{<<"k2">>,"v3"}]),
+ {ok, 1} = maps:find(a, M1),
+ {ok, 2} = maps:find(b, M1),
+ {ok, "hi"} = maps:find("hello", M1),
+ {ok, "tuple hi"} = maps:find({1,1.0}, M1),
+ {ok, "v3"} = maps:find(<<"k2">>, M1),
+
+ %% error case
+ error = maps:find(a,#{}),
+ error = maps:find(a,#{b=>1, c=>2}),
+ error = maps:find(1.0, #{ 1 => "int"}),
+ error = maps:find(1, #{ 1.0 => "float"}),
+ error = maps:find({1.0,1}, #{ a=>a, {1,1.0} => "tuple hi"}), % reverse types in tuple key
+
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,find,_,_}|_]}} =
+ (catch maps:find(a, T))
+ end),
+ ok.
+
+
+t_bif_map_is_key(Config) when is_list(Config) ->
+ M1 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>, 4 => number},
+
+ true = maps:is_key("hi", M1),
+ true = maps:is_key(int, M1),
+ true = maps:is_key(<<"key">>, M1),
+ true = maps:is_key(4, M1),
+
+ false = maps:is_key(5, M1),
+ false = maps:is_key(<<"key2">>, M1),
+ false = maps:is_key("h", M1),
+ false = maps:is_key("hello", M1),
+ false = maps:is_key(atom, M1),
+ false = maps:is_key(any, #{}),
+
+ false = maps:is_key("hi", maps:remove("hi", M1)),
+ true = maps:is_key("hi", M1),
+ true = maps:is_key(1, maps:put(1, "number", M1)),
+ false = maps:is_key(1.0, maps:put(1, "number", M1)),
+
+ %% error case
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,is_key,_,_}|_]}} =
+ (catch maps:is_key(a, T))
+ end),
+ ok.
+
+t_bif_map_keys(Config) when is_list(Config) ->
+ [] = maps:keys(#{}),
+
+ [1,2,3,4,5] = lists:sort(maps:keys(#{ 1 => a, 2 => b, 3 => c, 4 => d, 5 => e})),
+ [1,2,3,4,5] = lists:sort(maps:keys(#{ 4 => d, 5 => e, 1 => a, 2 => b, 3 => c})),
+
+ % values in key order: [4,int,"hi",<<"key">>]
+ M1 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>, 4 => number},
+ [4,int,"hi",<<"key">>] = lists:sort(maps:keys(M1)),
+
+ %% error case
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,keys,_,_}|_]}} =
+ (catch maps:keys(T))
+ end),
+ ok.
+
+t_bif_map_new(Config) when is_list(Config) ->
+ #{} = maps:new(),
+ 0 = erlang:map_size(maps:new()),
+ ok.
+
+t_bif_map_merge(Config) when is_list(Config) ->
+ 0 = erlang:map_size(maps:merge(#{},#{})),
+
+ M0 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+
+ #{ "hi" := "hello", int := 3, <<"key">> := <<"value">>,
+ 4 := number, 18446744073709551629 := wat} = maps:merge(#{}, M0),
+
+ #{ "hi" := "hello", int := 3, <<"key">> := <<"value">>,
+ 4 := number, 18446744073709551629 := wat} = maps:merge(M0, #{}),
+
+ M1 = #{ "hi" => "hello again", float => 3.3, {1,2} => "tuple", 4 => integer },
+
+ #{4 := number, 18446744073709551629 := wat, float := 3.3, int := 3,
+ {1,2} := "tuple", "hi" := "hello", <<"key">> := <<"value">>} = maps:merge(M1,M0),
+
+ #{4 := integer, 18446744073709551629 := wat, float := 3.3, int := 3,
+ {1,2} := "tuple", "hi" := "hello again", <<"key">> := <<"value">>} = maps:merge(M0,M1),
+
+ %% try deep collisions
+ N = 150000,
+ Is = lists:seq(1,N),
+ M2 = maps:from_list([{I,I}||I<-Is]),
+ 150000 = maps:size(M2),
+ M3 = maps:from_list([{<<I:32>>,I}||I<-Is]),
+ 150000 = maps:size(M3),
+ M4 = maps:merge(M2,M3),
+ 300000 = maps:size(M4),
+ M5 = maps:from_list([{integer_to_list(I),I}||I<-Is]),
+ 150000 = maps:size(M5),
+ M6 = maps:merge(M4,M5),
+ 450000 = maps:size(M6),
+ M7 = maps:from_list([{float(I),I}||I<-Is]),
+ 150000 = maps:size(M7),
+ M8 = maps:merge(M7,M6),
+ 600000 = maps:size(M8),
+
+ #{ 1 := 1, "1" := 1, <<1:32>> := 1 } = M8,
+ #{ 10 := 10, "10" := 10, <<10:32>> := 10 } = M8,
+ #{ 100 := 100, "100" := 100, <<100:32>> := 100 } = M8,
+ #{ 1000 := 1000, "1000" := 1000, <<1000:32>> := 1000 } = M8,
+ #{ 10000 := 10000, "10000" := 10000, <<10000:32>> := 10000 } = M8,
+ #{ 100000 := 100000, "100000" := 100000, <<100000:32>> := 100000 } = M8,
+
+ %% overlapping
+ M8 = maps:merge(M2,M8),
+ M8 = maps:merge(M3,M8),
+ M8 = maps:merge(M4,M8),
+ M8 = maps:merge(M5,M8),
+ M8 = maps:merge(M6,M8),
+ M8 = maps:merge(M7,M8),
+ M8 = maps:merge(M8,M8),
+
+ %% maps:merge/2 and mixed
+
+ Ks1 = [764492191,2361333849], %% deep collision
+ Ks2 = lists:seq(1,33),
+ M9 = maps:from_list([{K,K}||K <- Ks1]),
+ M10 = maps:from_list([{K,K}||K <- Ks2]),
+ M11 = maps:merge(M9,M10),
+ ok = check_keys_exist(Ks1 ++ Ks2, M11),
+
+ %% error case
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,merge,_,_}|_]}} =
+ (catch maps:merge(#{}, T)),
+ {'EXIT',{{badmap,T},[{maps,merge,_,_}|_]}} =
+ (catch maps:merge(T, #{})),
+ {'EXIT',{{badmap,T},[{maps,merge,_,_}|_]}} =
+ (catch maps:merge(T, T))
+ end),
+ ok.
+
+
+t_bif_map_put(Config) when is_list(Config) ->
+ M0 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+
+ M1 = #{ "hi" := "hello"} = maps:put("hi", "hello", #{}),
+
+ true = is_members(["hi"],maps:keys(M1)),
+ true = is_members(["hello"],maps:values(M1)),
+
+ M2 = #{ int := 3 } = maps:put(int, 3, M1),
+
+ true = is_members([int,"hi"],maps:keys(M2)),
+ true = is_members([3,"hello"],maps:values(M2)),
+
+ M3 = #{ <<"key">> := <<"value">> } = maps:put(<<"key">>, <<"value">>, M2),
+
+ true = is_members([int,"hi",<<"key">>],maps:keys(M3)),
+ true = is_members([3,"hello",<<"value">>],maps:values(M3)),
+
+ M4 = #{ 18446744073709551629 := wat } = maps:put(18446744073709551629, wat, M3),
+
+ true = is_members([18446744073709551629,int,"hi",<<"key">>],maps:keys(M4)),
+ true = is_members([wat,3,"hello",<<"value">>],maps:values(M4)),
+
+ M0 = #{ 4 := number } = M5 = maps:put(4, number, M4),
+
+ true = is_members([4,18446744073709551629,int,"hi",<<"key">>],maps:keys(M5)),
+ true = is_members([number,wat,3,"hello",<<"value">>],maps:values(M5)),
+
+ M6 = #{ <<"key">> := <<"other value">> } = maps:put(<<"key">>, <<"other value">>, M5),
+
+ true = is_members([4,18446744073709551629,int,"hi",<<"key">>],maps:keys(M6)),
+ true = is_members([number,wat,3,"hello",<<"other value">>],maps:values(M6)),
+
+ %% error case
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,put,_,_}|_]}} =
+ (catch maps:put(1, a, T))
+ end),
+ ok.
+
+is_members(Ks,Ls) when length(Ks) =/= length(Ls) -> false;
+is_members(Ks,Ls) -> is_members_do(Ks,Ls).
+
+is_members_do([],[]) -> true;
+is_members_do([],_) -> false;
+is_members_do([K|Ks],Ls) ->
+ is_members_do(Ks, lists:delete(K,Ls)).
+
+t_bif_map_remove(Config) when is_list(Config) ->
+ 0 = erlang:map_size(maps:remove(some_key, #{})),
+
+ M0 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+
+ M1 = maps:remove("hi", M0),
+ true = is_members([4,18446744073709551629,int,<<"key">>],maps:keys(M1)),
+ true = is_members([number,wat,3,<<"value">>],maps:values(M1)),
+
+ M2 = maps:remove(int, M1),
+ true = is_members([4,18446744073709551629,<<"key">>],maps:keys(M2)),
+ true = is_members([number,wat,<<"value">>],maps:values(M2)),
+
+ M3 = maps:remove(<<"key">>, M2),
+ true = is_members([4,18446744073709551629],maps:keys(M3)),
+ true = is_members([number,wat],maps:values(M3)),
+
+ M4 = maps:remove(18446744073709551629, M3),
+ true = is_members([4],maps:keys(M4)),
+ true = is_members([number],maps:values(M4)),
+
+ M5 = maps:remove(4, M4),
+ [] = maps:keys(M5),
+ [] = maps:values(M5),
+
+ M0 = maps:remove(5,M0),
+ M0 = maps:remove("hi there",M0),
+
+ #{ "hi" := "hello", int := 3, 4 := number} = maps:remove(18446744073709551629,maps:remove(<<"key">>,M0)),
+
+ %% error case
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,remove,_,_}|_]}} =
+ (catch maps:remove(a, T))
+ end),
+ ok.
+
+t_bif_map_update(Config) when is_list(Config) ->
+ M0 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+
+ #{ "hi" := "hello again", int := 3, <<"key">> := <<"value">>,
+ 4 := number, 18446744073709551629 := wat} = maps:update("hi", "hello again", M0),
+
+ #{ "hi" := "hello", int := 1337, <<"key">> := <<"value">>,
+ 4 := number, 18446744073709551629 := wat} = maps:update(int, 1337, M0),
+
+ #{ "hi" := "hello", int := 3, <<"key">> := <<"new value">>,
+ 4 := number, 18446744073709551629 := wat} = maps:update(<<"key">>, <<"new value">>, M0),
+
+ #{ "hi" := "hello", int := 3, <<"key">> := <<"value">>,
+ 4 := integer, 18446744073709551629 := wat} = maps:update(4, integer, M0),
+
+ #{ "hi" := "hello", int := 3, <<"key">> := <<"value">>,
+ 4 := number, 18446744073709551629 := wazzup} = maps:update(18446744073709551629, wazzup, M0),
+
+ %% error case
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,update,_,_}|_]}} =
+ (catch maps:update(1, none, T))
+ end),
+ ok.
+
+
+
+t_bif_map_values(Config) when is_list(Config) ->
+
+ [] = maps:values(#{}),
+ [1] = maps:values(#{a=>1}),
+
+ true = is_members([a,b,c,d,e],maps:values(#{ 1 => a, 2 => b, 3 => c, 4 => d, 5 => e})),
+ true = is_members([a,b,c,d,e],maps:values(#{ 4 => d, 5 => e, 1 => a, 2 => b, 3 => c})),
+
+ M1 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>, 4 => number},
+ M2 = M1#{ "hi" => "hello2", <<"key">> => <<"value2">> },
+ true = is_members([number,3,"hello2",<<"value2">>],maps:values(M2)),
+ true = is_members([number,3,"hello",<<"value">>],maps:values(M1)),
+
+ Vs = lists:seq(1000,20000),
+ M3 = maps:from_list([{K,K}||K<-Vs]),
+ M4 = maps:merge(M1,M3),
+ M5 = maps:merge(M2,M3),
+ true = is_members(Vs,maps:values(M3)),
+ true = is_members([number,3,"hello",<<"value">>]++Vs,maps:values(M4)),
+ true = is_members([number,3,"hello2",<<"value2">>]++Vs,maps:values(M5)),
+
+ %% error case
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,values,_,_}|_]}} =
+ (catch maps:values(T))
+ end),
+ ok.
+
+t_erlang_hash(Config) when is_list(Config) ->
+
+ ok = t_bif_erlang_phash2(),
+ ok = t_bif_erlang_phash(),
+ ok = t_bif_erlang_hash(),
+
+ ok.
+
+t_bif_erlang_phash2() ->
+
+ 39679005 = erlang:phash2(#{}),
+ 33667975 = erlang:phash2(#{ a => 1, "a" => 2, <<"a">> => 3, {a,b} => 4 }), % 78942764
+ 95332690 = erlang:phash2(#{ 1 => a, 2 => "a", 3 => <<"a">>, 4 => {a,b} }), % 37338230
+ 108954384 = erlang:phash2(#{ 1 => a }), % 14363616
+ 59617982 = erlang:phash2(#{ a => 1 }), % 51612236
+
+ 42770201 = erlang:phash2(#{{} => <<>>}), % 37468437
+ 71687700 = erlang:phash2(#{<<>> => {}}), % 44049159
+
+ M0 = #{ a => 1, "key" => <<"value">> },
+ M1 = maps:remove("key",M0),
+ M2 = M1#{ "key" => <<"value">> },
+
+ 70249457 = erlang:phash2(M0), % 118679416
+ 59617982 = erlang:phash2(M1), % 51612236
+ 70249457 = erlang:phash2(M2), % 118679416
+ ok.
+
+t_bif_erlang_phash() ->
+ Sz = 1 bsl 32,
+ 1113425985 = erlang:phash(#{},Sz), % 268440612
+ 1510068139 = erlang:phash(#{ a => 1, "a" => 2, <<"a">> => 3, {a,b} => 4 },Sz), % 1196461908
+ 3182345590 = erlang:phash(#{ 1 => a, 2 => "a", 3 => <<"a">>, 4 => {a,b} },Sz), % 3944426064
+ 2927531828 = erlang:phash(#{ 1 => a },Sz), % 1394238263
+ 1670235874 = erlang:phash(#{ a => 1 },Sz), % 4066388227
+
+ 3935089469 = erlang:phash(#{{} => <<>>},Sz), % 1578050717
+ 71692856 = erlang:phash(#{<<>> => {}},Sz), % 1578050717
+
+ M0 = #{ a => 1, "key" => <<"value">> },
+ M1 = maps:remove("key",M0),
+ M2 = M1#{ "key" => <<"value">> },
+
+ 2620391445 = erlang:phash(M0,Sz), % 3590546636
+ 1670235874 = erlang:phash(M1,Sz), % 4066388227
+ 2620391445 = erlang:phash(M2,Sz), % 3590546636
+ ok.
+
+t_bif_erlang_hash() ->
+ Sz = 1 bsl 27 - 1,
+ 39684169 = erlang:hash(#{},Sz), % 5158
+ 33673142 = erlang:hash(#{ a => 1, "a" => 2, <<"a">> => 3, {a,b} => 4 },Sz), % 71555838
+ 95337869 = erlang:hash(#{ 1 => a, 2 => "a", 3 => <<"a">>, 4 => {a,b} },Sz), % 5497225
+ 108959561 = erlang:hash(#{ 1 => a },Sz), % 126071654
+ 59623150 = erlang:hash(#{ a => 1 },Sz), % 126426236
+
+ 42775386 = erlang:hash(#{{} => <<>>},Sz), % 101655720
+ 71692856 = erlang:hash(#{<<>> => {}},Sz), % 101655720
+
+ M0 = #{ a => 1, "key" => <<"value">> },
+ M1 = maps:remove("key",M0),
+ M2 = M1#{ "key" => <<"value">> },
+
+ 70254632 = erlang:hash(M0,Sz), % 38260486
+ 59623150 = erlang:hash(M1,Sz), % 126426236
+ 70254632 = erlang:hash(M2,Sz), % 38260486
+ ok.
+
+
+t_map_encode_decode(Config) when is_list(Config) ->
+ <<131,116,0,0,0,0>> = erlang:term_to_binary(#{}),
+ Pairs = [
+ {a,b},{"key","values"},{<<"key">>,<<"value">>},
+ {1,b},{[atom,1],{<<"wat">>,1,2,3}},
+ {aa,"values"},
+ {1 bsl 64 + (1 bsl 50 - 1), sc1},
+ {99, sc2},
+ {1 bsl 65 + (1 bsl 51 - 1), sc3},
+ {88, sc4},
+ {1 bsl 66 + (1 bsl 52 - 1), sc5},
+ {77, sc6},
+ {1 bsl 67 + (1 bsl 53 - 1), sc3},
+ {75, sc6}, {-10,sc8},
+ {<<>>, sc9}, {3.14158, sc10},
+ {[3.14158], sc11}, {more_atoms, sc12},
+ {{more_tuples}, sc13}, {self(), sc14},
+ {{},{}},{[],[]}
+ ],
+ ok = map_encode_decode_and_match(Pairs,[],#{}),
+
+ %% check sorting
+
+ %% literally #{ b=>2, a=>1 } in the internal order
+ #{ a:=1, b:=2 } =
+ erlang:binary_to_term(<<131,116,0,0,0,2,100,0,1,98,97,2,100,0,1,97,97,1>>),
+
+
+ %% literally #{ "hi" => "value", a=>33, b=>55 } in the internal order
+ #{ a:=33, b:=55, "hi" := "value"} = erlang:binary_to_term(<<131,116,0,0,0,3,
+ 107,0,2,104,105, % "hi" :: list()
+ 107,0,5,118,97,108,117,101, % "value" :: list()
+ 100,0,1,97, % a :: atom()
+ 97,33, % 33 :: integer()
+ 100,0,1,98, % b :: atom()
+ 97,55 % 55 :: integer()
+ >>),
+
+ %% Maps of different sizes
+ lists:foldl(fun(Key, M0) ->
+ M1 = M0#{Key => Key},
+ case Key rem 17 of
+ 0 ->
+ M1 = binary_to_term(term_to_binary(M1));
+ _ ->
+ ok
+ end,
+ M1
+ end,
+ #{},
+ lists:seq(1,10000)),
+
+ %% many maps in same binary
+ MapList = lists:foldl(fun(K, [M|_]=Acc) -> [M#{K => K} | Acc] end,
+ [#{}],
+ lists:seq(1,100)),
+ MapList = binary_to_term(term_to_binary(MapList)),
+ MapListR = lists:reverse(MapList),
+ MapListR = binary_to_term(term_to_binary(MapListR)),
+
+ %% error cases
+ %% template: <<131,116,0,0,0,2,100,0,1,97,100,0,1,98,97,1,97,1>>
+ %% which is: #{ a=>1, b=>1 }
+
+ %% uniqueness violation
+ %% literally #{ a=>1, "hi"=>"value", a=>2 }
+ {'EXIT',{badarg,[{_,_,_,_}|_]}} = (catch
+ erlang:binary_to_term(<<131,116,0,0,0,3,
+ 100,0,1,97,
+ 97,1,
+ 107,0,2,104,105,
+ 107,0,5,118,97,108,117,101,
+ 100,0,1,97,
+ 97,2>>)),
+
+ %% bad size (too large)
+ {'EXIT',{badarg,[{_,_,_,_}|_]}} = (catch
+ erlang:binary_to_term(<<131,116,0,0,0,12,100,0,1,97,97,1,100,0,1,98,97,1>>)),
+
+ %% bad size (too small) .. should fail just truncate it .. weird.
+ %% possibly change external format so truncated will be #{a:=1}
+ #{ a:=b } =
+ erlang:binary_to_term(<<131,116,0,0,0,1,100,0,1,97,100,0,1,98,97,1,97,1>>),
+
+ ok.
+
+map_encode_decode_and_match([{K,V}|Pairs], EncodedPairs, M0) ->
+ M1 = maps:put(K,V,M0),
+ B0 = erlang:term_to_binary(M1),
+ Ls = [{erlang:term_to_binary(K), erlang:term_to_binary(V)}|EncodedPairs],
+ ok = match_encoded_map(B0, length(Ls), Ls),
+ %% decode and match it
+ M1 = erlang:binary_to_term(B0),
+ map_encode_decode_and_match(Pairs,Ls,M1);
+map_encode_decode_and_match([],_,_) -> ok.
+
+match_encoded_map(<<131,116,Size:32,Encoded/binary>>,Size,Items) ->
+ match_encoded_map_stripped_size(Encoded,Items,Items);
+match_encoded_map(_,_,_) -> no_match_size.
+
+match_encoded_map_stripped_size(<<>>,_,_) -> ok;
+match_encoded_map_stripped_size(B0,[{<<131,K/binary>>,<<131,V/binary>>}|Items],Ls) ->
+ Ksz = byte_size(K),
+ Vsz = byte_size(V),
+ case B0 of
+ <<K:Ksz/binary,V:Vsz/binary,B1/binary>> ->
+ match_encoded_map_stripped_size(B1,Ls,Ls);
+ _ ->
+ match_encoded_map_stripped_size(B0,Items,Ls)
+ end;
+match_encoded_map_stripped_size(_,[],_) -> fail.
+
+
+t_bif_map_to_list(Config) when is_list(Config) ->
+ [] = maps:to_list(#{}),
+ [{a,1},{b,2}] = lists:sort(maps:to_list(#{a=>1,b=>2})),
+ [{a,1},{b,2},{c,3}] = lists:sort(maps:to_list(#{c=>3,a=>1,b=>2})),
+ [{a,1},{b,2},{g,3}] = lists:sort(maps:to_list(#{g=>3,a=>1,b=>2})),
+ [{a,1},{b,2},{g,3},{"c",4}] = lists:sort(maps:to_list(#{g=>3,a=>1,b=>2,"c"=>4})),
+ [{3,v2},{hi,v4},{{hi,3},v5},{"hi",v3},{<<"hi">>,v1}] =
+ lists:sort(maps:to_list(#{<<"hi">>=>v1,3=>v2,"hi"=>v3,hi=>v4,{hi,3}=>v5})),
+
+ [{3,v7},{hi,v9},{{hi,3},v10},{"hi",v8},{<<"hi">>,v6}] =
+ lists:sort(maps:to_list(#{<<"hi">>=>v1,3=>v2,"hi"=>v3,hi=>v4,{hi,3}=>v5,
+ <<"hi">>=>v6,3=>v7,"hi"=>v8,hi=>v9,{hi,3}=>v10})),
+
+ %% error cases
+ do_badmap(fun(T) ->
+ {'EXIT', {{badmap,T},_}} =
+ (catch maps:to_list(T))
+ end),
+ ok.
+
+
+t_bif_map_from_list(Config) when is_list(Config) ->
+ #{} = maps:from_list([]),
+ A = maps:from_list([]),
+ 0 = erlang:map_size(A),
+
+ #{a:=1,b:=2} = maps:from_list([{a,1},{b,2}]),
+ #{c:=3,a:=1,b:=2} = maps:from_list([{a,1},{b,2},{c,3}]),
+ #{g:=3,a:=1,b:=2} = maps:from_list([{a,1},{b,2},{g,3}]),
+
+ #{a:=2} = maps:from_list([{a,1},{a,3},{a,2}]),
+
+ #{ <<"hi">>:=v1,3:=v3,"hi":=v6,hi:=v4,{hi,3}:=v5} =
+ maps:from_list([{3,v3},{"hi",v6},{hi,v4},{{hi,3},v5},{<<"hi">>,v1}]),
+
+ #{<<"hi">>:=v6,3:=v8,"hi":=v11,hi:=v9,{hi,3}:=v10} =
+ maps:from_list([ {{hi,3},v3}, {"hi",v0},{3,v1}, {<<"hi">>,v4}, {hi,v2},
+ {<<"hi">>,v6}, {{hi,3},v10},{"hi",v11}, {hi,v9}, {3,v8}]),
+
+ %% repeated keys (large -> small)
+ Ps1 = [{a,I}|| I <- lists:seq(1,32)],
+ Ps2 = [{a,I}|| I <- lists:seq(33,64)],
+
+ M = maps:from_list(Ps1 ++ [{b,1},{c,1}] ++ Ps2),
+ #{ a := 64, b := 1, c := 1 } = M,
+
+ %% error cases
+ {'EXIT', {badarg,_}} = (catch maps:from_list([{a,b},b])),
+ {'EXIT', {badarg,_}} = (catch maps:from_list([{a,b},{b,b,3}])),
+ {'EXIT', {badarg,_}} = (catch maps:from_list([{a,b},<<>>])),
+ {'EXIT', {badarg,_}} = (catch maps:from_list([{a,b}|{b,a}])),
+ {'EXIT', {badarg,_}} = (catch maps:from_list(a)),
+ {'EXIT', {badarg,_}} = (catch maps:from_list(42)),
+ ok.
+
+t_bif_build_and_check(Config) when is_list(Config) ->
+ ok = check_build_and_remove(750,[
+ fun(K) -> [K,K] end,
+ fun(K) -> [float(K),K] end,
+ fun(K) -> K end,
+ fun(K) -> {1,K} end,
+ fun(K) -> {K} end,
+ fun(K) -> [K|K] end,
+ fun(K) -> [K,1,2,3,4] end,
+ fun(K) -> {K,atom} end,
+ fun(K) -> float(K) end,
+ fun(K) -> integer_to_list(K) end,
+ fun(K) -> list_to_atom(integer_to_list(K)) end,
+ fun(K) -> [K,{K,[K,{K,[K]}]}] end,
+ fun(K) -> <<K:32>> end
+ ]),
+
+ ok.
+
+check_build_and_remove(_,[]) -> ok;
+check_build_and_remove(N,[F|Fs]) ->
+ {M,Ks} = build_and_check(N, maps:new(), F, []),
+ ok = remove_and_check(Ks,M),
+ check_build_and_remove(N,Fs).
+
+build_and_check(0, M0, _, Ks) -> {M0, Ks};
+build_and_check(N, M0, F, Ks) ->
+ K = build_key(F,N),
+ M1 = maps:put(K,K,M0),
+ ok = check_keys_exist([I||{I,_} <- [{K,M1}|Ks]], M1),
+ M2 = maps:update(K,v,M1),
+ v = maps:get(K,M2),
+ build_and_check(N-1,M1,F,[{K,M1}|Ks]).
+
+remove_and_check([],_) -> ok;
+remove_and_check([{K,Mc}|Ks], M0) ->
+ K = maps:get(K,M0),
+ true = maps:is_key(K,M0),
+ true = Mc =:= M0,
+ true = M0 == Mc,
+ M1 = maps:remove(K,M0),
+ false = M1 =:= Mc,
+ false = Mc == M1,
+ false = maps:is_key(K,M1),
+ true = maps:is_key(K,M0),
+ ok = check_keys_exist([I||{I,_} <- Ks],M1),
+ error = maps:find(K,M1),
+ remove_and_check(Ks, M1).
+
+build_key(F,N) when N rem 3 =:= 0 -> F(N);
+build_key(F,N) when N rem 3 =:= 1 -> K = F(N), {K,K};
+build_key(F,N) when N rem 3 =:= 2 -> K = F(N), [K,K].
+
+check_keys_exist([], _) -> ok;
+check_keys_exist([K|Ks],M) ->
+ true = maps:is_key(K,M),
+ check_keys_exist(Ks,M).
+
+t_bif_merge_and_check(Config) when is_list(Config) ->
+
+ io:format("rand:export_seed() -> ~p\n",[rand:export_seed()]),
+
+ %% simple disjunct ones
+ %% make sure all keys are unique
+ Kss = [[a,b,c,d],
+ [1,2,3,4],
+ [],
+ ["hi"],
+ [e],
+ [build_key(fun(K) -> {small,K} end, I) || I <- lists:seq(1,32)],
+ lists:seq(5, 28),
+ lists:seq(29, 59),
+ [build_key(fun(K) -> integer_to_list(K) end, I) || I <- lists:seq(2000,10000)],
+ [build_key(fun(K) -> <<K:32>> end, I) || I <- lists:seq(1,80)],
+ [build_key(fun(K) -> {<<K:32>>} end, I) || I <- lists:seq(100,1000)]],
+
+
+ KsMs = build_keys_map_pairs(Kss),
+ Cs = [{CKs1,CM1,CKs2,CM2} || {CKs1,CM1} <- KsMs, {CKs2,CM2} <- KsMs],
+ ok = merge_and_check_combo(Cs),
+
+ %% overlapping ones
+
+ KVs1 = [{a,1},{b,2},{c,3}],
+ KVs2 = [{b,3},{c,4},{d,5}],
+ KVs = [{I,I} || I <- lists:seq(1,32)],
+ KVs3 = KVs1 ++ KVs,
+ KVs4 = KVs2 ++ KVs,
+
+ M1 = maps:from_list(KVs1),
+ M2 = maps:from_list(KVs2),
+ M3 = maps:from_list(KVs3),
+ M4 = maps:from_list(KVs4),
+
+ M12 = maps:merge(M1,M2),
+ ok = check_key_values(KVs2 ++ [{a,1}], M12),
+ M21 = maps:merge(M2,M1),
+ ok = check_key_values(KVs1 ++ [{d,5}], M21),
+
+ M34 = maps:merge(M3,M4),
+ ok = check_key_values(KVs4 ++ [{a,1}], M34),
+ M43 = maps:merge(M4,M3),
+ ok = check_key_values(KVs3 ++ [{d,5}], M43),
+
+ M14 = maps:merge(M1,M4),
+ ok = check_key_values(KVs4 ++ [{a,1}], M14),
+ M41 = maps:merge(M4,M1),
+ ok = check_key_values(KVs1 ++ [{d,5}] ++ KVs, M41),
+
+ [begin Ma = random_map(SzA, a),
+ Mb = random_map(SzB, b),
+ ok = merge_maps(Ma, Mb)
+ end || SzA <- [3,10,20,100,200,1000], SzB <- [3,10,20,100,200,1000]],
+
+ ok.
+
+% Generate random map with an average of Sz number of pairs: K -> {V,K}
+random_map(Sz, V) ->
+ random_map_insert(#{}, 0, V, Sz*2).
+
+random_map_insert(M0, K0, _, Sz) when K0 > Sz ->
+ M0;
+random_map_insert(M0, K0, V, Sz) ->
+ Key = K0 + rand:uniform(3),
+ random_map_insert(M0#{Key => {V,Key}}, Key, V, Sz).
+
+
+merge_maps(A, B) ->
+ AB = maps:merge(A, B),
+ %%io:format("A=~p\nB=~p\n",[A,B]),
+ maps_foreach(fun(K,VB) -> VB = maps:get(K, AB)
+ end, B),
+ maps_foreach(fun(K,VA) ->
+ case {maps:get(K, AB),maps:find(K, B)} of
+ {VA, error} -> ok;
+ {VB, {ok, VB}} -> ok
+ end
+ end, A),
+
+ maps_foreach(fun(K,V) ->
+ case {maps:find(K, A),maps:find(K, B)} of
+ {{ok, V}, error} -> ok;
+ {error, {ok, V}} -> ok;
+ {{ok,_}, {ok, V}} -> ok
+ end
+ end, AB),
+ ok.
+
+maps_foreach(Fun, Map) ->
+ maps:fold(fun(K,V,_) -> Fun(K,V) end, void, Map).
+
+
+check_key_values([],_) -> ok;
+check_key_values([{K,V}|KVs],M) ->
+ V = maps:get(K,M),
+ check_key_values(KVs,M).
+
+merge_and_check_combo([]) -> ok;
+merge_and_check_combo([{Ks1,M1,Ks2,M2}|Cs]) ->
+ M12 = maps:merge(M1,M2),
+ ok = check_keys_exist(Ks1 ++ Ks2, M12),
+ M21 = maps:merge(M2,M1),
+ ok = check_keys_exist(Ks1 ++ Ks2, M21),
+
+ true = M12 =:= M21,
+ M12 = M21,
+
+ merge_and_check_combo(Cs).
+
+build_keys_map_pairs([]) -> [];
+build_keys_map_pairs([Ks|Kss]) ->
+ M = maps:from_list(keys_to_pairs(Ks)),
+ ok = check_keys_exist(Ks, M),
+ [{Ks,M}|build_keys_map_pairs(Kss)].
+
+keys_to_pairs(Ks) -> [{K,K} || K <- Ks].
+
+
+%% Maps module, not BIFs
+t_maps_fold(_Config) ->
+ Vs = lists:seq(1,100),
+ M = maps:from_list([{{k,I},{v,I}}||I<-Vs]),
+
+ %% fold
+ 5050 = maps:fold(fun({k,_},{v,V},A) -> V + A end, 0, M),
+
+ ok.
+
+t_maps_map(_Config) ->
+ Vs = lists:seq(1,100),
+ M1 = maps:from_list([{I,I}||I<-Vs]),
+ M2 = maps:from_list([{I,{token,I}}||I<-Vs]),
+
+ M2 = maps:map(fun(_K,V) -> {token,V} end, M1),
+ ok.
+
+t_maps_size(_Config) ->
+ Vs = lists:seq(1,100),
+ lists:foldl(fun(I,M) ->
+ M1 = maps:put(I,I,M),
+ I = maps:size(M1),
+ M1
+ end, #{}, Vs),
+ ok.
+
+
+t_maps_without(_Config) ->
+ Ki = [11,22,33,44,55,66,77,88,99],
+ M0 = maps:from_list([{{k,I},{v,I}}||I<-lists:seq(1,100)]),
+ M1 = maps:from_list([{{k,I},{v,I}}||I<-lists:seq(1,100) -- Ki]),
+ M1 = maps:without([{k,I}||I <- Ki],M0),
+ ok.
+
+t_erts_internal_order(_Config) when is_list(_Config) ->
+ M = #{0 => 0,2147483648 => 0},
+ true = M =:= binary_to_term(term_to_binary(M)),
+
+ F1 = fun(_, _) -> 0 end,
+ F2 = fun(_, _) -> 1 end,
+ M0 = maps:from_list( [{-2147483649, 0}, {0,0}, {97, 0}, {false, 0}, {flower, 0}, {F1, 0}, {F2, 0}, {<<>>, 0}]),
+ M1 = maps:merge(M0, #{0 => 1}),
+ 8 = maps:size(M1),
+ 1 = maps:get(0,M1),
+ ok.
+
+t_erts_internal_hash(_Config) when is_list(_Config) ->
+ K1 = 0.0,
+ K2 = 0.0/-1,
+ M = maps:from_list([{I,I}||I<-lists:seq(1,32)]),
+
+ M1 = M#{ K1 => a, K2 => b },
+ b = maps:get(K2,M1),
+
+ M2 = M#{ K2 => a, K1 => b },
+ b = maps:get(K1,M2),
+
+ %% test previously faulty hash list optimization
+
+ M3 = M#{[0] => a, [0,0] => b, [0,0,0] => c, [0,0,0,0] => d},
+ a = maps:get([0],M3),
+ b = maps:get([0,0],M3),
+ c = maps:get([0,0,0],M3),
+ d = maps:get([0,0,0,0],M3),
+
+ M4 = M#{{[0]} => a, {[0,0]} => b, {[0,0,0]} => c, {[0,0,0,0]} => d},
+ a = maps:get({[0]},M4),
+ b = maps:get({[0,0]},M4),
+ c = maps:get({[0,0,0]},M4),
+ d = maps:get({[0,0,0,0]},M4),
+
+ M5 = M3#{[0,0,0] => e, [0,0,0,0] => f, [0,0,0,0,0] => g,
+ [0,0,0,0,0,0] => h, [0,0,0,0,0,0,0] => i,
+ [0,0,0,0,0,0,0,0] => j, [0,0,0,0,0,0,0,0,0] => k},
+
+ a = maps:get([0],M5),
+ b = maps:get([0,0],M5),
+ e = maps:get([0,0,0],M5),
+ f = maps:get([0,0,0,0],M5),
+ g = maps:get([0,0,0,0,0],M5),
+ h = maps:get([0,0,0,0,0,0],M5),
+ i = maps:get([0,0,0,0,0,0,0],M5),
+ j = maps:get([0,0,0,0,0,0,0,0],M5),
+ k = maps:get([0,0,0,0,0,0,0,0,0],M5),
+
+ M6 = M4#{{[0,0,0]} => e, {[0,0,0,0]} => f, {[0,0,0,0,0]} => g,
+ {[0,0,0,0,0,0]} => h, {[0,0,0,0,0,0,0]} => i,
+ {[0,0,0,0,0,0,0,0]} => j, {[0,0,0,0,0,0,0,0,0]} => k},
+
+ a = maps:get({[0]},M6),
+ b = maps:get({[0,0]},M6),
+ e = maps:get({[0,0,0]},M6),
+ f = maps:get({[0,0,0,0]},M6),
+ g = maps:get({[0,0,0,0,0]},M6),
+ h = maps:get({[0,0,0,0,0,0]},M6),
+ i = maps:get({[0,0,0,0,0,0,0]},M6),
+ j = maps:get({[0,0,0,0,0,0,0,0]},M6),
+ k = maps:get({[0,0,0,0,0,0,0,0,0]},M6),
+
+ M7 = maps:merge(M5,M6),
+
+ a = maps:get([0],M7),
+ b = maps:get([0,0],M7),
+ e = maps:get([0,0,0],M7),
+ f = maps:get([0,0,0,0],M7),
+ g = maps:get([0,0,0,0,0],M7),
+ h = maps:get([0,0,0,0,0,0],M7),
+ i = maps:get([0,0,0,0,0,0,0],M7),
+ j = maps:get([0,0,0,0,0,0,0,0],M7),
+ k = maps:get([0,0,0,0,0,0,0,0,0],M7),
+ a = maps:get({[0]},M7),
+ b = maps:get({[0,0]},M7),
+ e = maps:get({[0,0,0]},M7),
+ f = maps:get({[0,0,0,0]},M7),
+ g = maps:get({[0,0,0,0,0]},M7),
+ h = maps:get({[0,0,0,0,0,0]},M7),
+ i = maps:get({[0,0,0,0,0,0,0]},M7),
+ j = maps:get({[0,0,0,0,0,0,0,0]},M7),
+ k = maps:get({[0,0,0,0,0,0,0,0,0]},M7),
+ ok.
+
+t_pdict(_Config) ->
+
+ put(#{ a => b, b => a},#{ c => d}),
+ put(get(#{ a => b, b => a}),1),
+ 1 = get(#{ c => d}),
+ #{ c := d } = get(#{ a => b, b => a}).
+
+t_ets(_Config) ->
+
+ Tid = ets:new(map_table,[]),
+
+ [ets:insert(Tid,{maps:from_list([{I,-I}]),I}) || I <- lists:seq(1,100)],
+
+
+ [{#{ 2 := -2},2}] = ets:lookup(Tid,#{ 2 => -2 }),
+
+ %% Test equal
+ [3,4] = lists:sort(
+ ets:select(Tid,[{{'$1','$2'},
+ [{'or',{'==','$1',#{ 3 => -3 }},
+ {'==','$1',#{ 4 => -4 }}}],
+ ['$2']}])),
+ %% Test match
+ [30,50] = lists:sort(
+ ets:select(Tid,
+ [{{#{ 30 => -30}, '$1'},[],['$1']},
+ {{#{ 50 => -50}, '$1'},[],['$1']}]
+ )),
+
+ ets:insert(Tid,{#{ a => b, b => c, c => a},transitivity}),
+
+ %% Test equal with map of different size
+ [] = ets:select(Tid,[{{'$1','_'},[{'==','$1',#{ b => c }}],['$_']}]),
+
+ %% Test match with map of different size
+ %[{#{ a := b },_}] = ets:select(Tid,[{{#{ b => c },'_'},[],['$_']}]),
+
+ %%% Test match with don't care value
+ %[{#{ a := b },_}] = ets:select(Tid,[{{#{ b => '_' },'_'},[],['$_']}]),
+
+ %% Test is_map bif
+ 101 = length(ets:select(Tid,[{'$1',[{is_map,{element,1,'$1'}}],['$1']}])),
+ ets:insert(Tid,{not_a_map,2}),
+ 101 = length(ets:select(Tid,[{'$1',[{is_map,{element,1,'$1'}}],['$1']}])),
+ ets:insert(Tid,{{nope,a,tuple},2}),
+ 101 = length(ets:select(Tid,[{'$1',[{is_map,{element,1,'$1'}}],['$1']}])),
+
+ %% Test map_size bif
+ [3] = ets:select(Tid,[{{'$1','_'},[{'==',{map_size,'$1'},3}],
+ [{map_size,'$1'}]}]),
+
+ true = ets:delete(Tid,#{50 => -50}),
+ [] = ets:lookup(Tid,#{50 => -50}),
+
+ ets:delete(Tid),
+ ok.
+
+t_dets(_Config) ->
+ ok.
+
+t_tracing(_Config) ->
+
+ dbg:stop_clear(),
+ {ok,Tracer} = dbg:tracer(process,{fun trace_collector/2, self()}),
+ dbg:p(self(),c),
+
+ %% Test basic map call
+ {ok,_} = dbg:tpl(?MODULE,id,x),
+ #{ a => b },
+ {trace,_,call,{?MODULE,id,[#{ a := b }]}} = getmsg(Tracer),
+ {trace,_,return_from,{?MODULE,id,1},#{ a := b }} = getmsg(Tracer),
+ dbg:ctpl(),
+
+ %% Test equals in argument list
+ {ok,_} = dbg:tpl(?MODULE,id,[{['$1'],[{'==','$1',#{ b => c}}],
+ [{return_trace}]}]),
+ #{ a => b },
+ #{ b => c },
+ {trace,_,call,{?MODULE,id,[#{ b := c }]}} = getmsg(Tracer),
+ {trace,_,return_from,{?MODULE,id,1},#{ b := c }} = getmsg(Tracer),
+ dbg:ctpl(),
+
+ %% Test match in head
+ {ok,_} = dbg:tpl(?MODULE,id,[{[#{b => c}],[],[]}]),
+ #{ a => b },
+ #{ b => c },
+ {trace,_,call,{?MODULE,id,[#{ b := c }]}} = getmsg(Tracer),
+ dbg:ctpl(),
+
+ % Test map guard bifs
+ {ok,_} = dbg:tpl(?MODULE,id,[{['$1'],[{is_map,{element,1,'$1'}}],[]}]),
+ #{ a => b },
+ {1,2},
+ {#{ a => b},2},
+ {trace,_,call,{?MODULE,id,[{#{ a := b },2}]}} = getmsg(Tracer),
+ dbg:ctpl(),
+
+ {ok,_} = dbg:tpl(?MODULE,id,[{['$1'],[{'==',{map_size,{element,1,'$1'}},2}],[]}]),
+ #{ a => b },
+ {1,2},
+ {#{ a => b},2},
+ {#{ a => b, b => c},atom},
+ {trace,_,call,{?MODULE,id,[{#{ a := b, b := c },atom}]}} = getmsg(Tracer),
+ dbg:ctpl(),
+
+ %MS = dbg:fun2ms(fun([A]) when A == #{ a => b} -> ok end),
+ %dbg:tpl(?MODULE,id,MS),
+ %#{ a => b },
+ %#{ b => c },
+ %{trace,_,call,{?MODULE,id,[#{ a := b }]}} = getmsg(Tracer),
+ %dbg:ctpl(),
+
+ %% Check to extra messages
+ timeout = getmsg(Tracer),
+
+ dbg:stop_clear(),
+ ok.
+
+getmsg(_Tracer) ->
+ receive V -> V after 100 -> timeout end.
+
+trace_collector(Msg,Parent) ->
+ io:format("~p~n",[Msg]),
+ Parent ! Msg,
+ Parent.
+
+t_has_map_fields(Config) when is_list(Config) ->
+ true = has_map_fields_1(#{one=>1}),
+ true = has_map_fields_1(#{one=>1,two=>2}),
+ false = has_map_fields_1(#{two=>2}),
+ false = has_map_fields_1(#{}),
+
+ true = has_map_fields_2(#{c=>1,b=>2,a=>3}),
+ true = has_map_fields_2(#{c=>1,b=>2,a=>3,x=>42}),
+ false = has_map_fields_2(#{b=>2,c=>1}),
+ false = has_map_fields_2(#{x=>y}),
+ false = has_map_fields_2(#{}),
+
+ true = has_map_fields_3(#{c=>1,b=>2,a=>3}),
+ true = has_map_fields_3(#{c=>1,b=>2,a=>3,[]=>42}),
+ true = has_map_fields_3(#{b=>2,a=>3,[]=>42,42.0=>43}),
+ true = has_map_fields_3(#{a=>3,[]=>42,42.0=>43}),
+ true = has_map_fields_3(#{[]=>42,42.0=>43}),
+ false = has_map_fields_3(#{b=>2,c=>1}),
+ false = has_map_fields_3(#{[]=>y}),
+ false = has_map_fields_3(#{42.0=>x,a=>99}),
+ false = has_map_fields_3(#{}),
+
+ ok.
+
+has_map_fields_1(#{one:=_}) -> true;
+has_map_fields_1(#{}) -> false.
+
+has_map_fields_2(#{a:=_,b:=_,c:=_}) -> true;
+has_map_fields_2(#{}) -> false.
+
+has_map_fields_3(#{a:=_,b:=_}) -> true;
+has_map_fields_3(#{[]:=_,42.0:=_}) -> true;
+has_map_fields_3(#{}) -> false.
+
+y_regs(Config) when is_list(Config) ->
+ Val = [length(Config)],
+ Map0 = y_regs_update(#{}, Val),
+ Map2 = y_regs_update(Map0, Val),
+
+ Map3 = maps:from_list([{I,I*I} || I <- lists:seq(1, 100)]),
+ Map4 = y_regs_update(Map3, Val),
+
+ true = is_map(Map2) andalso is_map(Map4),
+
+ ok.
+
+y_regs_update(Map0, Val0) ->
+ Val1 = {t,Val0},
+ K1 = {key,1},
+ K2 = {key,2},
+ Map1 = Map0#{K1=>K1,
+ a=>Val0,b=>Val0,c=>Val0,d=>Val0,e=>Val0,
+ f=>Val0,g=>Val0,h=>Val0,i=>Val0,j=>Val0,
+ k=>Val0,l=>Val0,m=>Val0,n=>Val0,o=>Val0,
+ p=>Val0,q=>Val0,r=>Val0,s=>Val0,t=>Val0,
+ u=>Val0,v=>Val0,w=>Val0,x=>Val0,y=>Val0,
+ z=>Val0,
+ aa=>Val0,ab=>Val0,ac=>Val0,ad=>Val0,ae=>Val0,
+ af=>Val0,ag=>Val0,ah=>Val0,ai=>Val0,aj=>Val0,
+ ak=>Val0,al=>Val0,am=>Val0,an=>Val0,ao=>Val0,
+ ap=>Val0,aq=>Val0,ar=>Val0,as=>Val0,at=>Val0,
+ au=>Val0,av=>Val0,aw=>Val0,ax=>Val0,ay=>Val0,
+ az=>Val0,
+ K2=>[a,b,c]},
+ Map2 = Map1#{K1=>K1,
+ a:=Val1,b:=Val1,c:=Val1,d:=Val1,e:=Val1,
+ f:=Val1,g:=Val1,h:=Val1,i:=Val1,j:=Val1,
+ k:=Val1,l:=Val1,m:=Val1,n:=Val1,o:=Val1,
+ p:=Val1,q:=Val1,r:=Val1,s:=Val1,t:=Val1,
+ u:=Val1,v:=Val1,w:=Val1,x:=Val1,y:=Val1,
+ z:=Val1,
+ aa:=Val1,ab:=Val1,ac:=Val1,ad:=Val1,ae:=Val1,
+ af:=Val1,ag:=Val1,ah:=Val1,ai:=Val1,aj:=Val1,
+ ak:=Val1,al:=Val1,am:=Val1,an:=Val1,ao:=Val1,
+ ap:=Val1,aq:=Val1,ar:=Val1,as:=Val1,at:=Val1,
+ au:=Val1,av:=Val1,aw:=Val1,ax:=Val1,ay:=Val1,
+ az:=Val1,
+ K2=>[a,b,c]},
+
+ %% Traverse the maps to validate them.
+ _ = erlang:phash2({Map1,Map2}, 100000),
+
+ _ = {K1,K2,Val0,Val1}, %Force use of Y registers.
+ Map2.
+
+do_badmap(Test) ->
+ Terms = [Test,fun erlang:abs/1,make_ref(),self(),0.0/-1,
+ <<0:1024>>,<<1:1>>,<<>>,<<1,2,3>>,
+ [],{a,b,c},[a,b],atom,10.0,42,(1 bsl 65) + 3],
+ [Test(T) || T <- Terms].
diff --git a/lib/dialyzer/test/map_SUITE_data/src/map_in_guard.erl b/lib/dialyzer/test/map_SUITE_data/src/map_in_guard.erl
new file mode 100644
index 0000000000..6176ef1fdf
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/map_in_guard.erl
@@ -0,0 +1,35 @@
+-module(map_in_guard).
+
+-export([test/0, raw_expr/0]).
+
+test() ->
+ false = assoc_guard(#{}),
+ true = assoc_guard(not_a_map),
+ #{a := true} = assoc_update(#{}),
+ {'EXIT', {{badmap, not_a_map}, [{?MODULE, assoc_update, 1, _}|_]}}
+ = (catch assoc_update(not_a_map)),
+ ok = assoc_guard_clause(#{}),
+ {'EXIT', {function_clause, [{?MODULE, assoc_guard_clause, _, _}|_]}}
+ = (catch assoc_guard_clause(not_a_map)),
+ true = exact_guard(#{a=>1}),
+ {'EXIT', {function_clause, [{?MODULE, assoc_guard_clause, _, _}|_]}}
+ %% There's nothing we can do to find the error here, is there?
+ = (catch (begin true = exact_guard(#{}) end)),
+ ok = exact_guard_clause(#{a => q}),
+ {'EXIT', {function_clause, [{?MODULE, exact_guard_clause, _, _}|_]}}
+ = (catch exact_guard_clause(#{})),
+ ok.
+
+assoc_guard(M) when is_map(M#{a => b}) -> true;
+assoc_guard(Q) -> false.
+
+assoc_update(M) -> M#{a => true}.
+
+assoc_guard_clause(M) when is_map(M#{a => 3}) -> ok.
+
+exact_guard(M) when (false =/= M#{a := b}) -> true;
+exact_guard(_) -> false.
+
+exact_guard_clause(M) when (false =/= M#{a := b}) -> ok.
+
+raw_expr() when #{}; true -> ok. %% Must not warn here!
diff --git a/lib/dialyzer/test/map_SUITE_data/src/map_in_guard2.erl b/lib/dialyzer/test/map_SUITE_data/src/map_in_guard2.erl
new file mode 100644
index 0000000000..ac2205e8fa
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/map_in_guard2.erl
@@ -0,0 +1,27 @@
+-module(map_in_guard2).
+
+-export([test/0]).
+
+test() ->
+ false = assoc_guard(not_a_map),
+ {'EXIT', {{badmap, not_a_map}, [{?MODULE, assoc_update, 1, _}|_]}}
+ = (catch assoc_update(not_a_map)),
+ {'EXIT', {function_clause, [{?MODULE, assoc_guard_clause, _, _}|_]}}
+ = (catch assoc_guard_clause(not_a_map)),
+ {'EXIT', {function_clause, [{?MODULE, assoc_guard_clause, _, _}|_]}}
+ = (catch (begin true = exact_guard(#{}) end)),
+ {'EXIT', {function_clause, [{?MODULE, exact_guard_clause, _, _}|_]}}
+ = (catch exact_guard_clause(#{})),
+ ok.
+
+assoc_guard(M) when is_map(M#{a => b}) -> true;
+assoc_guard(_) -> false.
+
+assoc_update(M) -> M#{a => true}.
+
+assoc_guard_clause(M) when is_map(M#{a => 3}) -> ok.
+
+exact_guard(M) when (false =/= M#{a := b}) -> true;
+exact_guard(_) -> false.
+
+exact_guard_clause(M) when (false =/= M#{a := b}) -> ok.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/map_size.erl b/lib/dialyzer/test/map_SUITE_data/src/map_size.erl
new file mode 100644
index 0000000000..2da4f6904e
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/map_size.erl
@@ -0,0 +1,36 @@
+-module(map_size).
+
+-export([t1/0, e1/0, t2/0, t3/0, t4/0, t5/1, t6/1, t7/1]).
+
+t1() ->
+ 0 = maps:size(#{}),
+ 1 = maps:size(#{}).
+
+e1() ->
+ 0 = map_size(#{}),
+ 1 = map_size(#{}).
+
+t2() -> p(#{a=>x}).
+
+p(M) when map_size(M) =:= 0 -> ok.
+
+t3() ->
+ 1 = map_size(cio()),
+ 2 = map_size(cio()),
+ 3 = map_size(cio()),
+ 4 = map_size(cio()).
+
+t4() ->
+ 0 = map_size(cio()).
+
+t5(M) when map_size(M) =:= 0 ->
+ #{a := _} = M. %% Only t5 has no local return; want better message
+
+t6(M) when map_size(M) =:= 0 ->
+ #{} = M.
+
+t7(M=#{a := _}) when map_size(M) =:= 1 ->
+ #{b := _} = M. %% We should warn here too
+
+-spec cio() -> #{3 := ok, 9 => _, 11 => x}.
+cio() -> binary_to_term(<<131,116,0,0,0,2,97,3,100,0,2,111,107,97,9,97,6>>).
diff --git a/lib/dialyzer/test/map_SUITE_data/src/maps_merge.erl b/lib/dialyzer/test/map_SUITE_data/src/maps_merge.erl
new file mode 100644
index 0000000000..d4f3c6887a
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/maps_merge.erl
@@ -0,0 +1,29 @@
+-module(maps_merge).
+
+-export([t1/0, t2/0, t3/0, t4/0, t5/0]).
+
+t1() ->
+ #{a:=1} = maps:merge(#{}, #{}).
+
+t2() ->
+ #{hej := _} = maps:merge(cao(), cio()),
+ #{{} := _} = maps:merge(cao(), cio()).
+
+t3() ->
+ #{a:=1} = maps:merge(cao(), cio()),
+ #{7:=q} = maps:merge(cao(), cio()).
+
+t4() ->
+ #{a:=1} = maps:merge(cio(), cao()),
+ #{7:=q} = maps:merge(cio(), cao()).
+
+t5() ->
+ #{a:=2} = maps:merge(cao(), #{}).
+
+-spec cao() -> #{a := 1, q => none(), 11 => _, atom() => _}.
+cao() ->
+ binary_to_term(<<131,116,0,0,0,3,100,0,1,97,97,1,100,0,1,98,97,9,100,0,1,
+ 102,104,0>>).
+
+-spec cio() -> #{3 := ok, 7 => none(), z => _, integer() => _}.
+cio() -> binary_to_term(<<131,116,0,0,0,2,97,3,100,0,2,111,107,97,9,97,6>>).
diff --git a/lib/dialyzer/test/map_SUITE_data/src/opaque_key/opaque_key_adt.erl b/lib/dialyzer/test/map_SUITE_data/src/opaque_key/opaque_key_adt.erl
new file mode 100644
index 0000000000..b98c713c6b
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/opaque_key/opaque_key_adt.erl
@@ -0,0 +1,69 @@
+-module(opaque_key_adt).
+
+-compile(export_all).
+
+-export_type([t/0, t/1, m/0, s/1, sm/1]).
+
+-opaque t() :: #{atom() => integer()}.
+-opaque t(A) :: #{A => integer()}.
+
+-opaque m() :: #{t() => integer()}.
+-type mt() :: #{t() => integer()}.
+
+-opaque s(K) :: #{K => integer(), integer() => atom()}.
+-opaque sm(K) :: #{K := integer(), integer() := atom()}.
+-type smt(K) :: #{K := integer(), integer() := atom()}.
+
+-spec t0() -> t().
+t0() -> #{}.
+
+-spec t1() -> t(integer()).
+t1() -> #{3 => 1}.
+
+-spec m0() -> m().
+m0() -> #{#{} => 3}.
+
+-spec mt0() -> mt().
+mt0() -> #{#{} => 3}.
+
+-spec s0() -> s(atom()).
+s0() -> #{}.
+
+-spec s1() -> s(atom()).
+s1() -> #{3 => a}.
+
+-spec s2() -> s(atom() | 3).
+s2() -> #{3 => a}. %% Contract breakage (not found)
+
+-spec s3() -> s(atom() | 3).
+s3() -> #{3 => 5, a => 6, 7 => 8}.
+
+-spec s4() -> s(integer()).
+s4() -> #{1 => a}. %% Contract breakage
+
+-spec s5() -> s(1).
+s5() -> #{2 => 3}. %% Contract breakage
+
+-spec s6() -> s(1).
+s6() -> #{1 => 3}.
+
+-spec s7() -> s(integer()).
+s7() -> #{1 => 3}.
+
+-spec sm1() -> sm(1).
+sm1() -> #{1 => 2, 3 => a}.
+
+-spec smt1() -> smt(1).
+smt1() -> #{3 => a}. %% Contract breakage
+
+-spec smt2() -> smt(1).
+smt2() -> #{1 => a}. %% Contract breakage
+
+-spec smt3() -> smt(q).
+smt3() -> #{q => 1}. %% Slight contract breakage (probably requires better map type)
+
+-spec smt4() -> smt(q).
+smt4() -> #{q => 2, 3 => a}.
+
+-spec smt5() -> smt(1).
+smt5() -> #{1 => 2, 3 => a}.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/opaque_key/opaque_key_use.erl b/lib/dialyzer/test/map_SUITE_data/src/opaque_key/opaque_key_use.erl
new file mode 100644
index 0000000000..917413fdd2
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/opaque_key/opaque_key_use.erl
@@ -0,0 +1,97 @@
+-module(opaque_key_use).
+
+-compile(export_all).
+
+-export_type([t/0, t/1]).
+
+-opaque t() :: #{atom() => integer()}.
+-opaque t(A) :: #{A => integer()}.
+
+tt1() ->
+ A = t0(),
+ B = t1(),
+ A =:= B. % never 'true'
+
+-spec t0() -> t().
+t0() -> #{a => 1}.
+
+-spec t1() -> t(integer()).
+t1() -> #{3 => 1}.
+
+adt_tt1() ->
+ A = adt_t0(),
+ B = adt_t1(),
+ A =:= B. % opaque attempt
+
+adt_tt2() ->
+ A = adt_t0(),
+ B = adt_t1(),
+ #{A => 1 % opaque key
+ ,B => 2 % opaque key
+ }.
+
+adt_tt3() ->
+ A = map_adt:t0(),
+ #{A => 1}. % opaque key
+
+adt_mm1() ->
+ A = adt_t0(),
+ M = adt_m0(),
+ #{A := R} = M, % opaque attempt
+ R.
+
+%% adt_ms1() ->
+%% A = adt_t0(),
+%% M = adt_m0(),
+%% M#{A}. % opaque arg
+
+adt_mu1() ->
+ A = adt_t0(),
+ M = adt_m0(),
+ M#{A := 4}. % opaque arg
+
+adt_mu2() ->
+ A = adt_t0(),
+ M = adt_m0(),
+ M#{A => 4}. % opaque arg
+
+adt_mu3() ->
+ M = adt_m0(),
+ M#{}. % opaque arg
+
+adt_mtm1() ->
+ A = adt_t0(),
+ M = adt_mt0(),
+ #{A := R} = M, % opaque key
+ R.
+
+%% adt_mts1() ->
+%% A = adt_t0(),
+%% M = adt_mt0(),
+%% M#{A}. % opaque key
+
+adt_mtu1() ->
+ A = adt_t0(),
+ M = adt_mt0(),
+ M#{A := 4}. % opaque key
+
+adt_mtu2() ->
+ A = adt_t0(),
+ M = adt_mt0(),
+ M#{A => 4}. % opaque key
+
+adt_mtu3() ->
+ M = adt_mt0(),
+ M#{}. % Ok to not warn
+
+adt_t0() ->
+ opaque_key_adt:t0().
+
+adt_t1() ->
+ opaque_key_adt:t1().
+
+adt_m0() ->
+ opaque_key_adt:m0().
+
+adt_mt0() ->
+ opaque_key_adt:mt0().
diff --git a/lib/dialyzer/test/map_SUITE_data/src/order.erl b/lib/dialyzer/test/map_SUITE_data/src/order.erl
new file mode 100644
index 0000000000..51868d7e94
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/order.erl
@@ -0,0 +1,56 @@
+-module(order).
+
+-export([t1/0, t2/0, t3/0, t4/0, t5/0, t6/0]).
+
+t1() ->
+ case maps:get(a, #{a=>1, a=>b}) of
+ Int when is_integer(Int) -> fail;
+ Atom when is_atom(Atom) -> error(ok);
+ _Else -> fail
+ end.
+
+t2() ->
+ case maps:get(a, #{a=>id_1(1), a=>id_b(b)}) of
+ Int when is_integer(Int) -> fail;
+ Atom when is_atom(Atom) -> error(ok);
+ _Else -> fail
+ end.
+
+t3() ->
+ case maps:get(a, #{a=>id_1(1), id_a(a)=>id_b(b)}) of
+ Int when is_integer(Int) -> fail;
+ Atom when is_atom(Atom) -> error(ok);
+ _Else -> fail
+ end.
+
+t4() ->
+ case maps:get(a, #{a=>id_1(1), a_or_b()=>id_b(b)}) of
+ Int when is_integer(Int) -> ok;
+ Atom when is_atom(Atom) -> ok;
+ _Else -> fail
+ end.
+
+t5() ->
+ case maps:get(c, #{c=>id_1(1), a_or_b()=>id_b(b)}) of
+ Int when is_integer(Int) -> error(ok);
+ Atom when is_atom(Atom) -> fail;
+ _Else -> fail
+ end.
+
+t6() ->
+ case maps:get(a, #{a_or_b()=>id_1(1), id_a(a)=>id_b(b)}) of
+ Int when is_integer(Int) -> fail;
+ Atom when is_atom(Atom) -> error(ok);
+ _Else -> fail
+ end.
+
+id_1(X) -> X.
+
+id_a(X) -> X.
+
+id_b(X) -> X.
+
+any() -> binary_to_term(<<>>).
+
+-spec a_or_b() -> a | b.
+a_or_b() -> any().
diff --git a/lib/dialyzer/test/map_SUITE_data/src/subtract_value_flip.erl b/lib/dialyzer/test/map_SUITE_data/src/subtract_value_flip.erl
new file mode 100644
index 0000000000..97e6b54e3c
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/subtract_value_flip.erl
@@ -0,0 +1,9 @@
+-module(subtract_value_flip).
+
+-export([t1/1]).
+
+t1(#{type := _Smth} = Map) ->
+ case Map of
+ #{type := a} -> ok;
+ #{type := b} -> error
+ end.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/typeflow.erl b/lib/dialyzer/test/map_SUITE_data/src/typeflow.erl
new file mode 100644
index 0000000000..b43fd6897b
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/typeflow.erl
@@ -0,0 +1,25 @@
+-module(typeflow).
+
+-export([t1/1, t2/1, t3/1, t4/1]).
+
+t1(M = #{}) ->
+ a_is_integer(M),
+ case M of
+ #{a := X} when is_integer(X) -> ok;
+ _ -> fail
+ end.
+
+a_is_integer(#{a := X}) when is_integer(X) -> ok.
+
+t2(M = #{}) ->
+ a_is_integer(M),
+ lists:sort(maps:get(a, M)),
+ ok.
+
+t3(M = #{}) ->
+ lists:sort(maps:get(a, M)),
+ ok.
+
+t4(M) ->
+ lists:sort(maps:get(a, M)),
+ ok.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/typeflow2.erl b/lib/dialyzer/test/map_SUITE_data/src/typeflow2.erl
new file mode 100644
index 0000000000..71a9657a60
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/typeflow2.erl
@@ -0,0 +1,88 @@
+-module(typeflow2).
+
+-export([t1/1, t2/1, t3/1, t4/1, t5/1, t6/1, t7/1, optional3/1]).
+
+t1(L) ->
+ M = only_integers_and_lists(L),
+ optional(M),
+ case M of
+ #{a := X} when is_integer(X) -> ok;
+ #{a := X} when is_list(X) -> ok; %% Must warn here
+ #{a := X} when is_pid(X) -> ok;
+ _ -> fail
+ end.
+
+optional(#{a:=X}) ->
+ true = is_integer(X);
+optional(#{}) ->
+ true.
+
+only_integers_and_lists(L) -> only_integers_and_lists(L, #{}).
+
+only_integers_and_lists([], M) -> M;
+only_integers_and_lists([{K,V}|T], M) when is_integer(V); is_list(V)->
+ only_integers_and_lists(T, M#{K => V}).
+
+t2(L) ->
+ M = only_integers_and_lists(L),
+ optional(M),
+ lists:sort(maps:get(a, M)),
+ ok.
+
+t3(L) ->
+ M = only_integers_and_lists(L),
+ lists:sort(maps:get(a, M)),
+ ok.
+
+t4(V) ->
+ M=map_with(a,V),
+ optional2(M),
+ case M of
+ #{a := X} when is_integer(X) -> ok;
+ #{a := X} when is_list(X) -> ok; %% Must warn here
+ _ -> fail
+ end.
+
+optional2(#{a:=X}) ->
+ true = is_integer(X);
+optional2(#{}) ->
+ true.
+
+map_with(K, V) when is_integer(V); is_list(V); is_atom(V) -> #{K => V}.
+
+t5(L) ->
+ M = only_integers_and_lists(L),
+ optional3(M),
+ case M of
+ #{a := X} when is_integer(X) -> ok;
+ #{a := X} when is_list(X) -> ok; %% Must warn here
+ #{a := X} when is_pid(X) -> ok; %% Must warn here
+ #{a := X} when is_atom(X) -> ok;
+ _ -> fail
+ end.
+
+t6(L) ->
+ M = only_integers_and_lists(L),
+ case M of
+ #{a := X} when is_integer(X) -> ok;
+ #{a := X} when is_list(X) -> ok; %% Must not warn here
+ _ -> fail
+ end.
+
+optional3(#{a:=X}) ->
+ true = is_integer(X);
+optional3(#{}) ->
+ true.
+
+t7(M) ->
+ optional4(M),
+ case M of
+ #{a := X} when is_integer(X) -> ok;
+ #{a := X} when is_list(X) -> ok;
+ #{a := X} when is_pid(X) -> ok; %% Must warn here
+ #{a := X} when is_atom(X) -> ok; %% Must warn here
+ _ -> fail %% Must not warn here (requires parsing)
+ end.
+
+-spec optional4(#{a=>integer()|list()}) -> true.
+optional4(#{}) -> true.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/typesig.erl b/lib/dialyzer/test/map_SUITE_data/src/typesig.erl
new file mode 100644
index 0000000000..b50511af41
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/typesig.erl
@@ -0,0 +1,9 @@
+-module(typesig).
+
+-export([t1/0, t2/0, t3/0, test/1]).
+
+t1() -> test(#{a=>1}).
+t2() -> test(#{a=>{b}}).
+t3() -> test(#{a=>{3}}).
+
+test(#{a:={X}}) -> X+1.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/crash b/lib/dialyzer/test/opaque_SUITE_data/results/crash
index 69bdc00257..d63389f79c 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/crash
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/crash
@@ -1,6 +1,6 @@
-crash_1.erl:45: Record construction #targetlist{list::[]} violates the declared type of field list::'undefined' | crash_1:target()
-crash_1.erl:48: The call crash_1:get_using_branch2(Branch::maybe_improper_list(),L::'undefined' | crash_1:target()) will never return since it differs in the 2nd argument from the success typing arguments: (any(),maybe_improper_list())
-crash_1.erl:50: The pattern <_Branch, []> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
-crash_1.erl:52: The pattern <Branch, [H = {'target', _, _} | _T]> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
-crash_1.erl:54: The pattern <Branch, [{'target', _, _} | T]> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
+crash_1.erl:45: Record construction #targetlist{list::[]} violates the declared type of field list::crash_1:target()
+crash_1.erl:48: The call crash_1:get_using_branch2(Branch::maybe_improper_list(),L::crash_1:target()) will never return since it differs in the 2nd argument from the success typing arguments: (any(),maybe_improper_list())
+crash_1.erl:50: The pattern <_Branch, []> can never match the type <maybe_improper_list(),crash_1:target()>
+crash_1.erl:52: The pattern <Branch, [H = {'target', _, _} | _T]> can never match the type <maybe_improper_list(),crash_1:target()>
+crash_1.erl:54: The pattern <Branch, [{'target', _, _} | T]> can never match the type <maybe_improper_list(),crash_1:target()>
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/simple b/lib/dialyzer/test/opaque_SUITE_data/results/simple
index 1a7a139d6e..391c37664e 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/simple
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/simple
@@ -18,7 +18,7 @@ rec_api.erl:104: Matching of pattern {'r2', 10} tagged with a record name violat
rec_api.erl:113: The attempt to match a term of type #r3{f1::queue:queue(_)} against the pattern {'r3', 'a'} breaks the opaqueness of queue:queue(_)
rec_api.erl:118: Record construction #r3{f1::10} violates the declared type of field f1::queue:queue(_)
rec_api.erl:123: The attempt to match a term of type #r3{f1::10} against the pattern {'r3', 10} breaks the opaqueness of queue:queue(_)
-rec_api.erl:24: Record construction #r1{f1::10} violates the declared type of field f1::'undefined' | rec_api:a()
+rec_api.erl:24: Record construction #r1{f1::10} violates the declared type of field f1::rec_api:a()
rec_api.erl:29: Matching of pattern {'r1', 10} tagged with a record name violates the declared type of #r1{f1::10}
rec_api.erl:33: The attempt to match a term of type rec_adt:r1() against the pattern {'r1', 'a'} breaks the opaqueness of the term
rec_api.erl:35: Invalid type specification for function rec_api:adt_t1/1. The success typing is (#r1{f1::'a'}) -> #r1{f1::'a'}
@@ -70,8 +70,8 @@ simple1_api.erl:478: The call 'foo':A(A::simple1_adt:a()) breaks the opaqueness
simple1_api.erl:486: The call A:'foo'(A::simple1_adt:a()) breaks the opaqueness of the term A :: simple1_adt:a()
simple1_api.erl:499: The call 'foo':A(A::simple1_api:i()) requires that A is of type atom() not simple1_api:i()
simple1_api.erl:503: The call 'foo':A(A::simple1_adt:i()) requires that A is of type atom() not simple1_adt:i()
-simple1_api.erl:507: The call A:'foo'(A::simple1_api:i()) requires that A is of type atom() | tuple() not simple1_api:i()
-simple1_api.erl:511: The call A:'foo'(A::simple1_adt:i()) requires that A is of type atom() | tuple() not simple1_adt:i()
+simple1_api.erl:507: The call A:'foo'(A::simple1_api:i()) requires that A is of type atom() not simple1_api:i()
+simple1_api.erl:511: The call A:'foo'(A::simple1_adt:i()) requires that A is of type atom() not simple1_adt:i()
simple1_api.erl:519: Guard test A::simple1_adt:d2() == B::simple1_adt:d1() contains opaque terms as 1st and 2nd arguments
simple1_api.erl:534: Guard test A::simple1_adt:d1() >= 3 contains an opaque term as 1st argument
simple1_api.erl:536: Guard test A::simple1_adt:d1() == 3 contains an opaque term as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl
index 47185dc99d..27d937277e 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl
index d6b3a730bb..12506f5b4c 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/proper/proper_typeserver.erl b/lib/dialyzer/test/opaque_SUITE_data/src/proper/proper_typeserver.erl
index b6cab5e24b..1677b4efb8 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/proper/proper_typeserver.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/proper/proper_typeserver.erl
@@ -781,7 +781,8 @@ add_mod_info({attribute,_Line,record,{RecName,Fields}},
true ->
ModInfo;
false ->
- TypedRecord = {attribute,0,type,{{record,RecName},Fields,[]}},
+ A = erl_anno:new(0),
+ TypedRecord = {attribute,A,type,{{record,RecName},Fields,[]}},
add_mod_info(TypedRecord, ModInfo)
end;
add_mod_info({attribute,_Line,Kind,{Name,TypeForm,VarForms}},
diff --git a/lib/dialyzer/test/r9c_SUITE_data/results/mnesia b/lib/dialyzer/test/r9c_SUITE_data/results/mnesia
index b73943422a..bf67447ee7 100644
--- a/lib/dialyzer/test/r9c_SUITE_data/results/mnesia
+++ b/lib/dialyzer/test/r9c_SUITE_data/results/mnesia
@@ -6,7 +6,7 @@ mnesia_bup.erl:111: The created fun has no local return
mnesia_bup.erl:574: Function fallback_receiver/2 has no local return
mnesia_bup.erl:967: Function uninstall_fallback_master/2 has no local return
mnesia_checkpoint.erl:1014: The variable Error can never match since previous clauses completely covered the type {'ok',#checkpoint_args{nodes::[any()],retainers::[any(),...]}}
-mnesia_checkpoint.erl:894: The call sys:handle_system_msg(Msg::any(),From::any(),'no_parent','mnesia_checkpoint',[],Cp::#checkpoint_args{}) breaks the contract (Msg,From,Parent,Module,Debug,Misc) -> no_return() when is_subtype(Msg,term()), is_subtype(From,{pid(),Tag::_}), is_subtype(Parent,pid()), is_subtype(Module,module()), is_subtype(Debug,[dbg_opt()]), is_subtype(Misc,term())
+mnesia_checkpoint.erl:894: The call sys:handle_system_msg(Msg::any(),From::any(),'no_parent','mnesia_checkpoint',[],Cp::#checkpoint_args{}) breaks the contract (Msg,From,Parent,Module,Debug,Misc) -> no_return() when Msg :: term(), From :: {pid(),Tag::_}, Parent :: pid(), Module :: module(), Debug :: [dbg_opt()], Misc :: term()
mnesia_controller.erl:1666: The variable Tab can never match since previous clauses completely covered the type [any()]
mnesia_controller.erl:1679: The pattern {'stop', Reason, Reply, State2} can never match the type {'noreply',_} | {'reply',_,_} | {'stop','shutdown',#state{}}
mnesia_controller.erl:1685: The pattern {'noreply', State2, _Timeout} can never match the type {'reply',_,_}
@@ -35,6 +35,6 @@ mnesia_schema.erl:1258: Guard test FromS::'disc_copies' | 'disc_only_copies' | '
mnesia_schema.erl:1639: The pattern {'false', 'mandatory'} can never match the type {'false','optional'}
mnesia_schema.erl:2434: The variable Reason can never match since previous clauses completely covered the type {'error',_} | {'ok',_}
mnesia_schema.erl:451: Guard test UseDirAnyway::'false' == 'true' can never succeed
-mnesia_text.erl:180: The variable T can never match since previous clauses completely covered the type {'error',{integer(),atom() | tuple(),_}} | {'ok',_}
+mnesia_text.erl:180: The variable T can never match since previous clauses completely covered the type {'error',{non_neg_integer(),atom(),_}} | {'ok',_}
mnesia_tm.erl:1522: Function commit_participant/5 has no local return
mnesia_tm.erl:2169: Function system_terminate/4 has no local return
diff --git a/lib/dialyzer/test/small_SUITE_data/results/app_call b/lib/dialyzer/test/small_SUITE_data/results/app_call
index cc1a63f944..1af649815a 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/app_call
+++ b/lib/dialyzer/test/small_SUITE_data/results/app_call
@@ -1,3 +1,3 @@
-app_call.erl:6: The call M:'foo'() requires that M is of type atom() | tuple() not 42
+app_call.erl:6: The call M:'foo'() requires that M is of type atom() not 42
app_call.erl:9: The call 'mod':F() requires that F is of type atom() not {'gazonk',[]}
diff --git a/lib/dialyzer/test/small_SUITE_data/results/bif1 b/lib/dialyzer/test/small_SUITE_data/results/bif1
new file mode 100644
index 0000000000..289b6f821f
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/results/bif1
@@ -0,0 +1,3 @@
+
+bif1.erl:13: Function string_chars/0 has no local return
+bif1.erl:16: The call string:chars(S::65,10,L2::bif1_adt:s()) contains an opaque term as 3rd argument when terms of different types are expected in these positions
diff --git a/lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes b/lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes
index a9fbfb6068..d2a3ebb766 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes
+++ b/lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes
@@ -1,15 +1,15 @@
-contracts_with_subtypes.erl:106: The call contracts_with_subtypes:rec_arg({'a','b'}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,{'a',A} | {'b',B}), is_subtype(A,'a' | {'b',B}), is_subtype(B,'b' | {'a',A})
-contracts_with_subtypes.erl:107: The call contracts_with_subtypes:rec_arg({'b','a'}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,{'a',A} | {'b',B}), is_subtype(A,'a' | {'b',B}), is_subtype(B,'b' | {'a',A})
-contracts_with_subtypes.erl:109: The call contracts_with_subtypes:rec_arg({'b',{'a','b'}}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,{'a',A} | {'b',B}), is_subtype(A,'a' | {'b',B}), is_subtype(B,'b' | {'a',A})
-contracts_with_subtypes.erl:135: The call contracts_with_subtypes:rec2({'a','b'}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,ab())
-contracts_with_subtypes.erl:136: The call contracts_with_subtypes:rec2({'b','a'}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,ab())
-contracts_with_subtypes.erl:137: The call contracts_with_subtypes:rec2({'a',{'b','a'}}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,ab())
-contracts_with_subtypes.erl:138: The call contracts_with_subtypes:rec2({'b',{'a','b'}}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,ab())
-contracts_with_subtypes.erl:139: The call contracts_with_subtypes:rec2({'a',{'b',{'a','b'}}}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,ab())
-contracts_with_subtypes.erl:140: The call contracts_with_subtypes:rec2({'b',{'a',{'b','a'}}}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,ab())
-contracts_with_subtypes.erl:141: The call contracts_with_subtypes:rec2({'a',{'b',{'a',{'b','a'}}}}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,ab())
-contracts_with_subtypes.erl:142: The call contracts_with_subtypes:rec2({'b',{'a',{'b',{'a','b'}}}}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,ab())
+contracts_with_subtypes.erl:106: The call contracts_with_subtypes:rec_arg({'a','b'}) breaks the contract (Arg) -> 'ok' when Arg :: {'a',A} | {'b',B}, A :: 'a' | {'b',B}, B :: 'b' | {'a',A}
+contracts_with_subtypes.erl:107: The call contracts_with_subtypes:rec_arg({'b','a'}) breaks the contract (Arg) -> 'ok' when Arg :: {'a',A} | {'b',B}, A :: 'a' | {'b',B}, B :: 'b' | {'a',A}
+contracts_with_subtypes.erl:109: The call contracts_with_subtypes:rec_arg({'b',{'a','b'}}) breaks the contract (Arg) -> 'ok' when Arg :: {'a',A} | {'b',B}, A :: 'a' | {'b',B}, B :: 'b' | {'a',A}
+contracts_with_subtypes.erl:135: The call contracts_with_subtypes:rec2({'a','b'}) breaks the contract (Arg) -> 'ok' when Arg :: ab()
+contracts_with_subtypes.erl:136: The call contracts_with_subtypes:rec2({'b','a'}) breaks the contract (Arg) -> 'ok' when Arg :: ab()
+contracts_with_subtypes.erl:137: The call contracts_with_subtypes:rec2({'a',{'b','a'}}) breaks the contract (Arg) -> 'ok' when Arg :: ab()
+contracts_with_subtypes.erl:138: The call contracts_with_subtypes:rec2({'b',{'a','b'}}) breaks the contract (Arg) -> 'ok' when Arg :: ab()
+contracts_with_subtypes.erl:139: The call contracts_with_subtypes:rec2({'a',{'b',{'a','b'}}}) breaks the contract (Arg) -> 'ok' when Arg :: ab()
+contracts_with_subtypes.erl:140: The call contracts_with_subtypes:rec2({'b',{'a',{'b','a'}}}) breaks the contract (Arg) -> 'ok' when Arg :: ab()
+contracts_with_subtypes.erl:141: The call contracts_with_subtypes:rec2({'a',{'b',{'a',{'b','a'}}}}) breaks the contract (Arg) -> 'ok' when Arg :: ab()
+contracts_with_subtypes.erl:142: The call contracts_with_subtypes:rec2({'b',{'a',{'b',{'a','b'}}}}) breaks the contract (Arg) -> 'ok' when Arg :: ab()
contracts_with_subtypes.erl:175: The pattern 1 can never match the type string()
contracts_with_subtypes.erl:178: The pattern 'alpha' can never match the type {'ok',_} | {'ok',_,string()}
contracts_with_subtypes.erl:180: The pattern 42 can never match the type {'ok',_} | {'ok',_,string()}
@@ -24,13 +24,13 @@ contracts_with_subtypes.erl:23: Invalid type specification for function contract
contracts_with_subtypes.erl:240: The pattern {'ok', 42} can never match the type {'ok',_,string()}
contracts_with_subtypes.erl:241: The pattern 42 can never match the type {'ok',_,string()}
contracts_with_subtypes.erl:267: Function flat_ets_new_t/0 has no local return
-contracts_with_subtypes.erl:268: The call contracts_with_subtypes:flat_ets_new(12,[]) breaks the contract (Name,Options) -> atom() when is_subtype(Name,atom()), is_subtype(Options,[Option]), is_subtype(Option,'set' | 'ordered_set' | 'bag' | 'duplicate_bag' | 'public' | 'protected' | 'private' | 'named_table' | {'keypos',integer()} | {'heir',pid(),term()} | {'heir','none'} | {'write_concurrency',boolean()} | {'read_concurrency',boolean()} | 'compressed')
+contracts_with_subtypes.erl:268: The call contracts_with_subtypes:flat_ets_new(12,[]) breaks the contract (Name,Options) -> atom() when Name :: atom(), Options :: [Option], Option :: 'set' | 'ordered_set' | 'bag' | 'duplicate_bag' | 'public' | 'protected' | 'private' | 'named_table' | {'keypos',integer()} | {'heir',pid(),term()} | {'heir','none'} | {'write_concurrency',boolean()} | {'read_concurrency',boolean()} | 'compressed'
contracts_with_subtypes.erl:294: Function factored_ets_new_t/0 has no local return
-contracts_with_subtypes.erl:295: The call contracts_with_subtypes:factored_ets_new(12,[]) breaks the contract (Name,Options) -> atom() when is_subtype(Name,atom()), is_subtype(Options,[Option]), is_subtype(Option,Type | Access | 'named_table' | {'keypos',Pos} | {'heir',Pid::pid(),HeirData} | {'heir','none'} | Tweaks), is_subtype(Type,type()), is_subtype(Access,access()), is_subtype(Tweaks,{'write_concurrency',boolean()} | {'read_concurrency',boolean()} | 'compressed'), is_subtype(Pos,pos_integer()), is_subtype(HeirData,term())
-contracts_with_subtypes.erl:77: The call contracts_with_subtypes:foo1(5) breaks the contract (Arg1) -> Res when is_subtype(Arg1,atom()), is_subtype(Res,atom())
-contracts_with_subtypes.erl:78: The call contracts_with_subtypes:foo2(5) breaks the contract (Arg1) -> Res when is_subtype(Arg1,Arg2), is_subtype(Arg2,atom()), is_subtype(Res,atom())
-contracts_with_subtypes.erl:79: The call contracts_with_subtypes:foo3(5) breaks the contract (Arg1) -> Res when is_subtype(Arg2,atom()), is_subtype(Arg1,Arg2), is_subtype(Res,atom())
+contracts_with_subtypes.erl:295: The call contracts_with_subtypes:factored_ets_new(12,[]) breaks the contract (Name,Options) -> atom() when Name :: atom(), Options :: [Option], Option :: Type | Access | 'named_table' | {'keypos',Pos} | {'heir',Pid::pid(),HeirData} | {'heir','none'} | Tweaks, Type :: type(), Access :: access(), Tweaks :: {'write_concurrency',boolean()} | {'read_concurrency',boolean()} | 'compressed', Pos :: pos_integer(), HeirData :: term()
+contracts_with_subtypes.erl:77: The call contracts_with_subtypes:foo1(5) breaks the contract (Arg1) -> Res when Arg1 :: atom(), Res :: atom()
+contracts_with_subtypes.erl:78: The call contracts_with_subtypes:foo2(5) breaks the contract (Arg1) -> Res when Arg1 :: Arg2, Arg2 :: atom(), Res :: atom()
+contracts_with_subtypes.erl:79: The call contracts_with_subtypes:foo3(5) breaks the contract (Arg1) -> Res when Arg2 :: atom(), Arg1 :: Arg2, Res :: atom()
contracts_with_subtypes.erl:7: Invalid type specification for function contracts_with_subtypes:extract/0. The success typing is () -> 'something'
-contracts_with_subtypes.erl:80: The call contracts_with_subtypes:foo4(5) breaks the contract (Type) -> Type when is_subtype(Type,atom())
+contracts_with_subtypes.erl:80: The call contracts_with_subtypes:foo4(5) breaks the contract (Type) -> Type when Type :: atom()
contracts_with_subtypes.erl:81: The call contracts_with_subtypes:foo5(5) breaks the contract (Type::atom()) -> Type::atom()
-contracts_with_subtypes.erl:82: The call contracts_with_subtypes:foo6(5) breaks the contract (Type) -> Type when is_subtype(Type,atom())
+contracts_with_subtypes.erl:82: The call contracts_with_subtypes:foo6(5) breaks the contract (Type) -> Type when Type :: atom()
diff --git a/lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes2 b/lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes2
index 9f5433a13d..1a8aeb13d0 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes2
+++ b/lib/dialyzer/test/small_SUITE_data/results/contracts_with_subtypes2
@@ -1,3 +1,3 @@
contracts_with_subtypes2.erl:18: Function t/0 has no local return
-contracts_with_subtypes2.erl:19: The call contracts_with_subtypes2:t({'a',{'b',{'c',{'d',{'e',{'g',3}}}}}}) breaks the contract (Arg) -> 'ok' when is_subtype(Arg,{'a',A}), is_subtype(A,{'b',B}), is_subtype(B,{'c',C}), is_subtype(C,{'d',D}), is_subtype(D,{'e',E}), is_subtype(E,{'f',_})
+contracts_with_subtypes2.erl:19: The call contracts_with_subtypes2:t({'a',{'b',{'c',{'d',{'e',{'g',3}}}}}}) breaks the contract (Arg) -> 'ok' when Arg :: {'a',A}, A :: {'b',B}, B :: {'c',C}, C :: {'d',D}, D :: {'e',E}, E :: {'f',_}
diff --git a/lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy b/lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy
index 7ce440a60d..11b9ecade6 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy
+++ b/lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy
@@ -1,4 +1,3 @@
-higher_order_discrepancy.erl:11: The call higher_order_discrepancy:g('foo') will never return since it differs in the 1st argument from the success typing arguments: ('bar')
-higher_order_discrepancy.erl:14: Function g/1 has no local return
-higher_order_discrepancy.erl:14: The pattern 'bar' can never match the type 'foo'
+higher_order_discrepancy.erl:19: Function g/1 has no local return
+higher_order_discrepancy.erl:19: The pattern 'bar' can never match the type 'foo'
diff --git a/lib/dialyzer/test/small_SUITE_data/results/literals b/lib/dialyzer/test/small_SUITE_data/results/literals
index 03e161ca71..1ee39453a4 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/literals
+++ b/lib/dialyzer/test/small_SUITE_data/results/literals
@@ -1,14 +1,17 @@
literals.erl:11: Function t1/0 has no local return
-literals.erl:12: Record construction #r{id::'a'} violates the declared type of field id::'integer' | 'undefined'
+literals.erl:12: Record construction #r{id::'a'} violates the declared type of field id::'integer'
literals.erl:14: Function t2/0 has no local return
-literals.erl:15: Record construction #r{id::'a'} violates the declared type of field id::'integer' | 'undefined'
+literals.erl:15: Record construction #r{id::'a'} violates the declared type of field id::'integer'
literals.erl:17: Function t3/0 has no local return
-literals.erl:18: Record construction #r{id::'a'} violates the declared type of field id::'integer' | 'undefined'
-literals.erl:21: Record construction #r{id::'a'} violates the declared type of field id::'integer' | 'undefined'
+literals.erl:18: Record construction #r{id::'a'} violates the declared type of field id::'integer'
+literals.erl:20: Function t4/0 has no local return
+literals.erl:21: Record construction #r{id::'a'} violates the declared type of field id::'integer'
literals.erl:23: Function m1/1 has no local return
-literals.erl:23: Matching of pattern {'r', 'a'} tagged with a record name violates the declared type of #r{id::'integer' | 'undefined'}
+literals.erl:23: Matching of pattern {'r', 'a'} tagged with a record name violates the declared type of #r{id::'integer'}
literals.erl:26: Function m2/1 has no local return
-literals.erl:26: Matching of pattern {'r', 'a'} tagged with a record name violates the declared type of #r{id::'integer' | 'undefined'}
+literals.erl:26: Matching of pattern {'r', 'a'} tagged with a record name violates the declared type of #r{id::'integer'}
literals.erl:29: Function m3/1 has no local return
literals.erl:29: The pattern {{'r', 'a'}} can never match the type any()
+literals.erl:32: Function m4/1 has no local return
+literals.erl:32: Matching of pattern {'r', 'a'} tagged with a record name violates the declared type of #r{id::'integer'}
diff --git a/lib/dialyzer/test/small_SUITE_data/results/maps1 b/lib/dialyzer/test/small_SUITE_data/results/maps1
index 5a78d66a92..f36f7f4926 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/maps1
+++ b/lib/dialyzer/test/small_SUITE_data/results/maps1
@@ -1,4 +1,4 @@
maps1.erl:43: Function t3/0 has no local return
-maps1.erl:44: The call maps1:foo(~{'greger'=>3, ~{'arne'=>'anka'}~=>45}~,1) will never return since it differs in the 2nd argument from the success typing arguments: (#{},'b')
-maps1.erl:52: The call Mod:'function'(~{'literal'=>'map'}~,'another_arg') requires that Mod is of type atom() | tuple() not #{}
+maps1.erl:44: The call maps1:foo(#{'greger'=>3, #{'arne'=>'anka'}=>45},1) will never return since it differs in the 1st and 2nd argument from the success typing arguments: (#{'beta':=_, _=>_},'b')
+maps1.erl:52: The variable Mod can never match since previous clauses completely covered the type #{}
diff --git a/lib/dialyzer/test/small_SUITE_data/results/maps_difftype b/lib/dialyzer/test/small_SUITE_data/results/maps_difftype
index 8980321135..3018b888db 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/maps_difftype
+++ b/lib/dialyzer/test/small_SUITE_data/results/maps_difftype
@@ -1,3 +1,3 @@
maps_difftype.erl:10: Function empty_mismatch/1 has no local return
-maps_difftype.erl:11: The pattern ~{}~ can never match the type tuple()
+maps_difftype.erl:11: The pattern #{} can never match the type tuple()
diff --git a/lib/dialyzer/test/small_SUITE_data/results/maps_sum b/lib/dialyzer/test/small_SUITE_data/results/maps_sum
index a19c0bba96..bd192bdb93 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/maps_sum
+++ b/lib/dialyzer/test/small_SUITE_data/results/maps_sum
@@ -1,4 +1,4 @@
-maps_sum.erl:15: Invalid type specification for function maps_sum:wrong1/1. The success typing is (#{}) -> any()
+maps_sum.erl:15: Invalid type specification for function maps_sum:wrong1/1. The success typing is (map()) -> any()
maps_sum.erl:26: Function wrong2/1 has no local return
maps_sum.erl:27: The call lists:foldl(fun((_,_,_) -> any()),0,Data::any()) will never return since it differs in the 1st argument from the success typing arguments: (fun((_,_) -> any()),any(),[any()])
diff --git a/lib/dialyzer/test/small_SUITE_data/results/pretty_bitstring b/lib/dialyzer/test/small_SUITE_data/results/pretty_bitstring
index 0ad6eee766..e148e5cf22 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/pretty_bitstring
+++ b/lib/dialyzer/test/small_SUITE_data/results/pretty_bitstring
@@ -1,3 +1,3 @@
pretty_bitstring.erl:7: Function t/0 has no local return
-pretty_bitstring.erl:8: The call binary:copy(#{#<1>(8, 1, 'integer', ['unsigned', 'big']), #<2>(8, 1, 'integer', ['unsigned', 'big']), #<3>(3, 1, 'integer', ['unsigned', 'big'])}#,2) breaks the contract (Subject,N) -> binary() when is_subtype(Subject,binary()), is_subtype(N,non_neg_integer())
+pretty_bitstring.erl:8: The call binary:copy(#{#<1>(8, 1, 'integer', ['unsigned', 'big']), #<2>(8, 1, 'integer', ['unsigned', 'big']), #<3>(3, 1, 'integer', ['unsigned', 'big'])}#,2) breaks the contract (Subject,N) -> binary() when Subject :: binary(), N :: non_neg_integer()
diff --git a/lib/dialyzer/test/small_SUITE_data/results/record_creation_diffs b/lib/dialyzer/test/small_SUITE_data/results/record_creation_diffs
index f00c4b10ff..c971935bbf 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/record_creation_diffs
+++ b/lib/dialyzer/test/small_SUITE_data/results/record_creation_diffs
@@ -1,3 +1,3 @@
record_creation_diffs.erl:10: Function foo/1 has no local return
-record_creation_diffs.erl:11: Record construction #bar{some_list::{'this','is','a','tuple'}} violates the declared type of field some_list::'undefined' | [any()]
+record_creation_diffs.erl:11: Record construction #bar{some_list::{'this','is','a','tuple'}} violates the declared type of field some_list::[any()]
diff --git a/lib/dialyzer/test/small_SUITE_data/results/record_pat b/lib/dialyzer/test/small_SUITE_data/results/record_pat
index a46be6c451..8317ea041a 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/record_pat
+++ b/lib/dialyzer/test/small_SUITE_data/results/record_pat
@@ -1,2 +1,2 @@
-record_pat.erl:14: Matching of pattern {'foo', 'baz'} tagged with a record name violates the declared type of #foo{bar::'undefined' | integer()}
+record_pat.erl:14: Matching of pattern {'foo', 'baz'} tagged with a record name violates the declared type of #foo{bar::integer()}
diff --git a/lib/dialyzer/test/small_SUITE_data/results/relevant_record_warning b/lib/dialyzer/test/small_SUITE_data/results/relevant_record_warning
index 2e417e1b2a..ea3ac92d96 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/relevant_record_warning
+++ b/lib/dialyzer/test/small_SUITE_data/results/relevant_record_warning
@@ -1,3 +1,3 @@
relevant_record_warning.erl:22: Function test/1 has no local return
-relevant_record_warning.erl:23: Record construction #r{field::<<_:8>>} violates the declared type of field field::'binary' | 'undefined'
+relevant_record_warning.erl:23: Record construction #r{field::<<_:8>>} violates the declared type of field field::'binary'
diff --git a/lib/dialyzer/test/small_SUITE_data/results/undefined b/lib/dialyzer/test/small_SUITE_data/results/undefined
new file mode 100644
index 0000000000..9daa8640d3
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/results/undefined
@@ -0,0 +1,2 @@
+
+r.erl:16: Record construction #r{a::{'fi'},b::{'a','b'},c::[],d::'undefined',e::[],f::'undefined'} violates the declared type of field b::[any()] and d::[any()] and f::[any()]
diff --git a/lib/dialyzer/test/small_SUITE_data/src/bif1/bif1.erl b/lib/dialyzer/test/small_SUITE_data/src/bif1/bif1.erl
new file mode 100644
index 0000000000..bc746538d3
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/bif1/bif1.erl
@@ -0,0 +1,16 @@
+-module(bif1).
+
+%% Other set of warnings due to removed of functions from
+%% erl_bif_types.
+
+-export([ets_rename/0, string_chars/0]).
+
+ets_rename() ->
+ A = ets:new(fipp, []),
+ true = not is_atom(A),
+ ets:rename(A, fopp). % No warning
+
+string_chars() ->
+ L2 = bif1_adt:opaque_string(),
+ S = $A,
+ string:chars(S, 10, L2). % Warning
diff --git a/lib/dialyzer/test/small_SUITE_data/src/bif1/bif1_adt.erl b/lib/dialyzer/test/small_SUITE_data/src/bif1/bif1_adt.erl
new file mode 100644
index 0000000000..01b0bccc68
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/bif1/bif1_adt.erl
@@ -0,0 +1,12 @@
+-module(bif1_adt).
+
+-export([opaque_string/0]).
+
+-export_type([s/0]).
+
+-opaque s() :: string().
+
+-spec opaque_string() -> s().
+
+opaque_string() ->
+ "string".
diff --git a/lib/dialyzer/test/small_SUITE_data/src/big_external_type.erl b/lib/dialyzer/test/small_SUITE_data/src/big_external_type.erl
index ab84e94106..9ad4810a5e 100644
--- a/lib/dialyzer/test/small_SUITE_data/src/big_external_type.erl
+++ b/lib/dialyzer/test/small_SUITE_data/src/big_external_type.erl
@@ -36,7 +36,7 @@
%% Start of Abstract Format
--type line() :: erl_scan:line().
+-type line() :: erl_anno:line().
-export_type([af_record_index/0, af_record_field/1, af_record_name/0,
af_field_name/0, af_function_decl/0]).
@@ -332,8 +332,8 @@
%% End of Abstract Format
-type error_description() :: term().
--type error_info() :: {erl_scan:line(), module(), error_description()}.
--type token() :: {Tag :: atom(), Line :: erl_scan:line()}.
+-type error_info() :: {erl_anno:line(), module(), error_description()}.
+-type token() :: {Tag :: atom(), Line :: erl_scan:anno()}.
%% mkop(Op, Arg) -> {op,Line,Op,Arg}.
%% mkop(Left, Op, Right) -> {op,Line,Op,Left,Right}.
diff --git a/lib/dialyzer/test/small_SUITE_data/src/big_local_type.erl b/lib/dialyzer/test/small_SUITE_data/src/big_local_type.erl
index fc7c5241a8..fe567ff10d 100644
--- a/lib/dialyzer/test/small_SUITE_data/src/big_local_type.erl
+++ b/lib/dialyzer/test/small_SUITE_data/src/big_local_type.erl
@@ -36,7 +36,7 @@
%% Start of Abstract Format
--type line() :: erl_scan:line().
+-type line() :: erl_anno:line().
-export_type([af_module/0, af_export/0, af_import/0, af_fa_list/0,
af_compile/0, af_file/0, af_record_decl/0,
@@ -329,8 +329,8 @@
%% End of Abstract Format
-type error_description() :: term().
--type error_info() :: {erl_scan:line(), module(), error_description()}.
--type token() :: {Tag :: atom(), Line :: erl_scan:line()}.
+-type error_info() :: {erl_anno:line(), module(), error_description()}.
+-type token() :: {Tag :: atom(), Line :: erl_anno:line()}.
%% mkop(Op, Arg) -> {op,Line,Op,Arg}.
%% mkop(Left, Op, Right) -> {op,Line,Op,Left,Right}.
diff --git a/lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl b/lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl
index ff5ee6bac4..f9547d4929 100644
--- a/lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl
+++ b/lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl
@@ -1,3 +1,8 @@
+%% With the patch introduced to avoid false warnings in
+%% user_SUITE_data/src/wpc_hlines.erl we can unfortunately no longer precisely
+%% catch problems like this one... The refinement procedure is still enough to
+%% keep some of the details, nevertheless.
+
-module(higher_order_discrepancy).
-export([test/1]).
diff --git a/lib/dialyzer/test/small_SUITE_data/src/literals.erl b/lib/dialyzer/test/small_SUITE_data/src/literals.erl
index abd7033712..354a0f4cdc 100644
--- a/lib/dialyzer/test/small_SUITE_data/src/literals.erl
+++ b/lib/dialyzer/test/small_SUITE_data/src/literals.erl
@@ -2,7 +2,7 @@
%% Bad records inside structures used to be ignored. The reason:
%% v3_core:unfold() does not annotate the parts of a literal.
-%% This example does not work perfectly yet, in particular Maps.
+%% This example does not work perfectly yet.
-export([t1/0, t2/0, t3/0, t4/0, m1/1, m2/1, m3/1, m4/1]).
@@ -18,7 +18,7 @@ t3() ->
{#r{id = a}}. % violation
t4() ->
- #{a => #r{id = a}}. % violation found, but t4() returns... (bug)
+ #{a => #r{id = a}}. % violation
m1(#r{id = a}) -> % violation
ok.
@@ -29,5 +29,5 @@ m2([#r{id = a}]) -> % violation
m3({#r{id = a}}) -> % can never match; not so good
ok.
-m4(#{a := #r{id = a}}) -> % violation not found
+m4(#{a := #r{id = a}}) -> % violation
ok.
diff --git a/lib/dialyzer/test/small_SUITE_data/src/loopy.erl b/lib/dialyzer/test/small_SUITE_data/src/loopy.erl
new file mode 100644
index 0000000000..28125ec3d9
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/loopy.erl
@@ -0,0 +1,17 @@
+%% ERL-157, OTP-13653.
+%% Would cause Dialyzer to go into an infinite loop.
+
+-module(loopy).
+
+-export([loop/1]).
+
+
+-spec loop(Args) -> ok when
+ Args :: [{Module, Args}],
+ Module :: module(),
+ Args :: any().
+loop([{Module, Args} | Rest]) ->
+ Module:init(Args),
+ loop(Rest);
+loop([]) ->
+ ok.
diff --git a/lib/dialyzer/test/small_SUITE_data/src/maps1.erl b/lib/dialyzer/test/small_SUITE_data/src/maps1.erl
index bb2f66a498..597358d16a 100644
--- a/lib/dialyzer/test/small_SUITE_data/src/maps1.erl
+++ b/lib/dialyzer/test/small_SUITE_data/src/maps1.erl
@@ -21,7 +21,7 @@ recv(Packet, Fun, Chan) ->
#{id := Can_id, data := Can_data} = P = decode(Packet),
Fun(P).
--spec decode(<<_:64,_:_*8>>) -> #{id => <<_:11>>,timestamp => char()}.
+-spec decode(<<_:64,_:_*8>>) -> #{id => <<_:11>>,timestamp => char(),_ => _}.
decode(<<_:12, Len:4, Timestamp:16, 0:3, Id:11/bitstring, 0:18,
Data:Len/binary, _/binary>>) ->
#{id => Id, data => Data, timestamp => Timestamp}.
diff --git a/lib/dialyzer/test/small_SUITE_data/src/maps_redef.erl b/lib/dialyzer/test/small_SUITE_data/src/maps_redef.erl
deleted file mode 100644
index 70059f73b6..0000000000
--- a/lib/dialyzer/test/small_SUITE_data/src/maps_redef.erl
+++ /dev/null
@@ -1,12 +0,0 @@
--module(maps_redef).
-
--export([t/0]).
-
-%% OK in Erlang/OTP 17, at least.
-
--type map() :: atom(). % redefine built-in type
-
--spec t() -> map().
-
-t() ->
- a. % OK
diff --git a/lib/dialyzer/test/small_SUITE_data/src/trec.erl b/lib/dialyzer/test/small_SUITE_data/src/trec.erl
index 06706162c1..516358f7c6 100644
--- a/lib/dialyzer/test/small_SUITE_data/src/trec.erl
+++ b/lib/dialyzer/test/small_SUITE_data/src/trec.erl
@@ -8,7 +8,7 @@
-module(trec).
-export([test/0, mk_foo_exp/2]).
--record(foo, {a :: integer(), b :: [atom()]}).
+-record(foo, {a :: integer() | 'undefined', b :: [atom()]}).
%%
%% For these functions we currently get the following warnings:
diff --git a/lib/dialyzer/test/small_SUITE_data/undefined.erl b/lib/dialyzer/test/small_SUITE_data/undefined.erl
new file mode 100644
index 0000000000..8549f2e161
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/undefined.erl
@@ -0,0 +1,29 @@
+-module(undefined).
+
+-export([t/0]).
+
+%% As of OTP 19.0 'undefined' is no longer added to fields with a type
+%% declaration but without an initializer. The pretty printing of
+%% records (erl_types:t_to_string()) is updated to reflect this: if a
+%% field is of type 'undefined', it is output if 'undefined' is not in
+%% the declared type of the field. (It used to be the case that the
+%% singleton type 'undefined' was never output.)
+%%
+%% One consequence is shown by the example below: the warning about
+%% the record construction violating the the declared type shows
+%% #r{..., d::'undefined', ...} which is meant to be of help to the
+%% user, who could otherwise get confused the first time (s)he gets
+%% confronted by the warning.
+
+-record(r,
+ {
+ a = {fi},
+ b = {a,b} :: list(), % violation
+ c = {a,b} :: list(),
+ d :: list(), % violation
+ e = [] :: list(),
+ f = undefined :: list() % violation
+ }).
+
+t() ->
+ #r{c = []}.
diff --git a/lib/dialyzer/test/unmatched_returns_SUITE_data/src/send.erl b/lib/dialyzer/test/unmatched_returns_SUITE_data/src/send.erl
new file mode 100644
index 0000000000..4d681b5cc7
--- /dev/null
+++ b/lib/dialyzer/test/unmatched_returns_SUITE_data/src/send.erl
@@ -0,0 +1,11 @@
+-module(send).
+
+-export([s/0]).
+
+s() ->
+ self() ! n(), % no warning
+ erlang:send(self(), n()), % no warning
+ ok.
+
+n() ->
+ {1, 1}.
diff --git a/lib/dialyzer/test/user_SUITE_data/results/wpc_hlines b/lib/dialyzer/test/user_SUITE_data/results/wpc_hlines
new file mode 100644
index 0000000000..d6e3f29ab9
--- /dev/null
+++ b/lib/dialyzer/test/user_SUITE_data/results/wpc_hlines
@@ -0,0 +1,3 @@
+
+wpc_hlines.erl:22: Function bad/1 has no local return
+wpc_hlines.erl:22: The pattern 'false' can never match the type 'true'
diff --git a/lib/dialyzer/test/user_SUITE_data/results/wsp_pdu b/lib/dialyzer/test/user_SUITE_data/results/wsp_pdu
index d1f8f4caf2..626e677524 100644
--- a/lib/dialyzer/test/user_SUITE_data/results/wsp_pdu
+++ b/lib/dialyzer/test/user_SUITE_data/results/wsp_pdu
@@ -6,7 +6,7 @@ wsp_pdu.erl:2403: The call wsp_pdu:d_date(Data1::binary()) will never return sin
wsp_pdu.erl:2406: Guard test is_integer(Sec::{[byte()] | byte() | {'long',binary()} | {'short',binary()},binary()}) can never succeed
wsp_pdu.erl:2408: The pattern {'short', Data2} can never match the type {[byte()] | byte() | {'long',binary()} | {'short',binary()},binary()}
wsp_pdu.erl:2755: Function parse_push_flag/1 has no local return
-wsp_pdu.erl:2756: The call erlang:integer_to_list(Value::[any()]) breaks the contract (Integer) -> string() when is_subtype(Integer,integer())
+wsp_pdu.erl:2756: The call erlang:integer_to_list(Value::[any()]) breaks the contract (Integer) -> string() when Integer :: integer()
wsp_pdu.erl:2875: The call wsp_pdu:d_text_string(Data::byte()) will never return since it differs in the 1st argument from the success typing arguments: (binary())
wsp_pdu.erl:2976: The call wsp_pdu:d_q_value(QData::byte()) will never return since it differs in the 1st argument from the success typing arguments: (<<_:8,_:_*8>>)
wsp_pdu.erl:3336: The call wsp_pdu:encode_typed_field(Ver::any(),'Q-value',ParamValue::any()) will never return since it differs in the 2nd argument from the success typing arguments: (any(),'Constrained-encoding' | 'Date-value' | 'No-value' | 'Short-integer' | 'Text-string' | 'Text-value' | 'Well-known-charset',any())
diff --git a/lib/dialyzer/test/user_SUITE_data/src/wpc_hlines.erl b/lib/dialyzer/test/user_SUITE_data/src/wpc_hlines.erl
new file mode 100644
index 0000000000..8c205a8247
--- /dev/null
+++ b/lib/dialyzer/test/user_SUITE_data/src/wpc_hlines.erl
@@ -0,0 +1,22 @@
+%% Bug reported by Dan Gudmundsson, test shrunk down by Magnus Lång.
+
+%% The problem is that dialyzer_dep generates edges from the fun
+%% application to both of the functions, and then during the warning pass
+%% dialyzer_dataflow:handle_apply_or_call generates warnings for any such
+%% edge that won't return.
+
+%% Since dialyzer_dep is currently supposed to overapproximate rather than
+%% underapproximate, the fix was to modify handle_apply_or_call to not generate
+%% warnings if some of the possible funs can succeed.
+
+-module(wpc_hlines).
+
+-export([do_export/0]).
+
+do_export() ->
+ {Proj, _} = % The culprit seems to be putting the funs in a tuple
+ {fun good/1, fun bad/1},
+ Proj(true).
+
+good(_) -> ok.
+bad(false) -> ok.
diff --git a/lib/dialyzer/vsn.mk b/lib/dialyzer/vsn.mk
index 44982ab46d..b9a28afdd9 100644
--- a/lib/dialyzer/vsn.mk
+++ b/lib/dialyzer/vsn.mk
@@ -1 +1 @@
-DIALYZER_VSN = 2.9
+DIALYZER_VSN = 3.0.1
diff --git a/lib/diameter/Makefile b/lib/diameter/Makefile
index 111530c75f..a0195a0988 100644
--- a/lib/diameter/Makefile
+++ b/lib/diameter/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2013. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/bin/diameterc b/lib/diameter/bin/diameterc
index 90588dadb5..3dbd238c19 100755
--- a/lib/diameter/bin/diameterc
+++ b/lib/diameter/bin/diameterc
@@ -4,7 +4,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/doc/src/Makefile b/lib/diameter/doc/src/Makefile
index ae621c3e11..7a7546fc4d 100644
--- a/lib/diameter/doc/src/Makefile
+++ b/lib/diameter/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2013. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/doc/src/book.xml b/lib/diameter/doc/src/book.xml
index dd5a5ea30c..b6cbcbc560 100644
--- a/lib/diameter/doc/src/book.xml
+++ b/lib/diameter/doc/src/book.xml
@@ -5,7 +5,7 @@
<header titlestyle="normal">
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/depend.sed b/lib/diameter/doc/src/depend.sed
index a878460b00..9c0a417be2 100644
--- a/lib/diameter/doc/src/depend.sed
+++ b/lib/diameter/doc/src/depend.sed
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2011. All Rights Reserved.
+# Copyright Ericsson AB 2011-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/doc/src/diameter.xml b/lib/diameter/doc/src/diameter.xml
index 5cb29c80e3..d68a78ed6d 100644
--- a/lib/diameter/doc/src/diameter.xml
+++ b/lib/diameter/doc/src/diameter.xml
@@ -21,7 +21,7 @@
<copyright>
<year>2011</year>
-<year>2015</year>
+<year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -1764,11 +1764,13 @@ An example return value with for a client service with Origin-Host
{send_pend,0}]}]},
{statistics,[{{{0,258,0},recv},3},
{{{0,258,1},send},3},
+ {{{0,258,0},recv,{'Result-Code',2001}},3},
{{{0,257,0},recv},1},
{{{0,257,1},send},1},
- {{{0,258,0},recv,{'Result-Code',2001}},3},
+ {{{0,257,0},recv,{'Result-Code',2001}},1},
{{{0,280,1},recv},2},
- {{{0,280,0},send},2}]}]]
+ {{{0,280,0},send},2},
+ {{{0,280,0},send,{'Result-Code',2001}},2}]}]]
</pre>
<p>
@@ -1844,13 +1846,16 @@ connection might look as follows.</p>
[{watchdog,{&lt;0.72.0>,{1346,171491,998404},initial}}]]},
{statistics,[{{{0,280,0},recv},7},
{{{0,280,1},send},7},
- {{{0,258,0},send,{'Result-Code',2001}},3},
+ {{{0,280,0},recv,{'Result-Code',2001}},7},
{{{0,258,1},recv},3},
{{{0,258,0},send},3},
+ {{{0,258,0},send,{'Result-Code',2001}},3},
{{{0,280,1},recv},5},
{{{0,280,0},send},5},
+ {{{0,280,0},send,{'Result-Code',2001}},5},
{{{0,257,1},recv},1},
- {{{0,257,0},send},1}]}]]
+ {{{0,257,0},send},1},
+ {{{0,257,0},send,{'Result-Code',2001}},1}]}]]
</pre>
<p>
@@ -1918,13 +1923,16 @@ A return value for the server above might look as follows.</p>
{send_pend,0}]}]},
{statistics,[{{{0,280,0},recv},62},
{{{0,280,1},send},62},
- {{{0,258,0},send,{'Result-Code',2001}},3},
+ {{{0,280,0},recv,{'Result-Code',2001}},62},
{{{0,258,1},recv},3},
{{{0,258,0},send},3},
+ {{{0,258,0},send,{'Result-Code',2001}},3},
{{{0,280,1},recv},66},
{{{0,280,0},send},66},
+ {{{0,280,0},send,{'Result-Code',2001}},66},
{{{0,257,1},recv},1},
- {{{0,257,0},send},1}]}]]
+ {{{0,257,0},send},1},
+ {{{0,257,0},send,{'Result-Code',2001}},1}]}]]
</pre>
<p>
diff --git a/lib/diameter/doc/src/diameter_app.xml b/lib/diameter/doc/src/diameter_app.xml
index 4cd25c18c2..973b6eb732 100644
--- a/lib/diameter/doc/src/diameter_app.xml
+++ b/lib/diameter/doc/src/diameter_app.xml
@@ -13,7 +13,7 @@
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/diameter_codec.xml b/lib/diameter/doc/src/diameter_codec.xml
index e2ebe7acf6..a0313e2877 100644
--- a/lib/diameter/doc/src/diameter_codec.xml
+++ b/lib/diameter/doc/src/diameter_codec.xml
@@ -13,7 +13,7 @@
<erlref>
<header>
<copyright>
-<year>2012</year><year>2013</year>
+<year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/diameter_dict.xml b/lib/diameter/doc/src/diameter_dict.xml
index 087b24fb87..ae40f99aee 100644
--- a/lib/diameter/doc/src/diameter_dict.xml
+++ b/lib/diameter/doc/src/diameter_dict.xml
@@ -16,7 +16,7 @@
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/diameter_examples.xml b/lib/diameter/doc/src/diameter_examples.xml
index ba3b42b88d..853ef96bb3 100644
--- a/lib/diameter/doc/src/diameter_examples.xml
+++ b/lib/diameter/doc/src/diameter_examples.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
diff --git a/lib/diameter/doc/src/diameter_intro.xml b/lib/diameter/doc/src/diameter_intro.xml
index 1718d1c612..cb0aa3de2a 100644
--- a/lib/diameter/doc/src/diameter_intro.xml
+++ b/lib/diameter/doc/src/diameter_intro.xml
@@ -7,7 +7,7 @@
<chapter>
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
diff --git a/lib/diameter/doc/src/diameter_make.xml b/lib/diameter/doc/src/diameter_make.xml
index f53ad434ae..112355816f 100644
--- a/lib/diameter/doc/src/diameter_make.xml
+++ b/lib/diameter/doc/src/diameter_make.xml
@@ -16,7 +16,7 @@
<header>
<copyright>
<year>2012</year>
-<year>2014</year>
+<year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/diameter_sctp.xml b/lib/diameter/doc/src/diameter_sctp.xml
index 09c5c33004..9b6d629f79 100644
--- a/lib/diameter/doc/src/diameter_sctp.xml
+++ b/lib/diameter/doc/src/diameter_sctp.xml
@@ -16,7 +16,7 @@
<header>
<copyright>
<year>2011</year>
-<year>2014</year>
+<year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/diameter_soc.xml b/lib/diameter/doc/src/diameter_soc.xml
index 2ba93bf452..ae404fcda4 100644
--- a/lib/diameter/doc/src/diameter_soc.xml
+++ b/lib/diameter/doc/src/diameter_soc.xml
@@ -9,7 +9,7 @@
<header>
<copyright>
<year>2011</year>
-<year>2013</year>
+<year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
diff --git a/lib/diameter/doc/src/diameter_soc_rfc6733.xml b/lib/diameter/doc/src/diameter_soc_rfc6733.xml
index 61931c6b5a..2098965706 100644
--- a/lib/diameter/doc/src/diameter_soc_rfc6733.xml
+++ b/lib/diameter/doc/src/diameter_soc_rfc6733.xml
@@ -3,7 +3,7 @@
<!--
<copyright>
-<year>2013</year><year>2013</year>
+<year>2013</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
diff --git a/lib/diameter/doc/src/diameter_tcp.xml b/lib/diameter/doc/src/diameter_tcp.xml
index 5fafec283c..00ccc39c15 100644
--- a/lib/diameter/doc/src/diameter_tcp.xml
+++ b/lib/diameter/doc/src/diameter_tcp.xml
@@ -27,7 +27,7 @@
<erlref>
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/diameter_transport.xml b/lib/diameter/doc/src/diameter_transport.xml
index fd89fbc344..736d4cbfbd 100644
--- a/lib/diameter/doc/src/diameter_transport.xml
+++ b/lib/diameter/doc/src/diameter_transport.xml
@@ -14,7 +14,7 @@
<erlref>
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/diameter_using.xml b/lib/diameter/doc/src/diameter_using.xml
index 596a6861a1..dbdb1be284 100644
--- a/lib/diameter/doc/src/diameter_using.xml
+++ b/lib/diameter/doc/src/diameter_using.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
diff --git a/lib/diameter/doc/src/files.mk b/lib/diameter/doc/src/files.mk
index 72f26c769e..cb4f88a375 100644
--- a/lib/diameter/doc/src/files.mk
+++ b/lib/diameter/doc/src/files.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2013. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/doc/src/notes.xml b/lib/diameter/doc/src/notes.xml
index 5052515d6a..b1be7bdcf7 100644
--- a/lib/diameter/doc/src/notes.xml
+++ b/lib/diameter/doc/src/notes.xml
@@ -11,7 +11,7 @@
<header>
<copyright>
<year>2011</year>
-<year>2014</year>
+<year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -43,6 +43,41 @@ first.</p>
<!-- ===================================================================== -->
+<section><title>diameter 1.12</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Ensure listening socket is closed at transport removal.</p>
+ <p>
+ Transport removal did not immediately close a
+ <c>diameter_tcp/sctp</c> listening socket, and a
+ subsequent peer connection caused it to remain open.</p>
+ <p>
+ Own Id: OTP-13611</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Add <c>diameter:peer_info/1</c>.</p>
+ <p>
+ That retrieves information in the style of
+ <c>diameter:service_info/2</c>, but for a single peer
+ connection.</p>
+ <p>
+ Own Id: OTP-13508</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>diameter 1.11.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/diameter/doc/src/ref_man.xml b/lib/diameter/doc/src/ref_man.xml
index 4781878fbb..a0ef28844d 100644
--- a/lib/diameter/doc/src/ref_man.xml
+++ b/lib/diameter/doc/src/ref_man.xml
@@ -6,7 +6,7 @@
<header>
<copyright>
<year>2011</year>
-<year>2013</year>
+<year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/doc/src/seehere.sed b/lib/diameter/doc/src/seehere.sed
index 56932c4178..10eca9258e 100644
--- a/lib/diameter/doc/src/seehere.sed
+++ b/lib/diameter/doc/src/seehere.sed
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2012. All Rights Reserved.
+# Copyright Ericsson AB 2012-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/doc/src/user_man.xml b/lib/diameter/doc/src/user_man.xml
index ac5bef95f5..adfc8de880 100644
--- a/lib/diameter/doc/src/user_man.xml
+++ b/lib/diameter/doc/src/user_man.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/diameter/examples/code/client_cb.erl b/lib/diameter/examples/code/client_cb.erl
index 213c0b8bc6..ed1d3b9b7b 100644
--- a/lib/diameter/examples/code/client_cb.erl
+++ b/lib/diameter/examples/code/client_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/code/redirect.erl b/lib/diameter/examples/code/redirect.erl
index 393e30fe1b..6934e54507 100644
--- a/lib/diameter/examples/code/redirect.erl
+++ b/lib/diameter/examples/code/redirect.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/code/redirect_cb.erl b/lib/diameter/examples/code/redirect_cb.erl
index 021d061e6d..8325e86391 100644
--- a/lib/diameter/examples/code/redirect_cb.erl
+++ b/lib/diameter/examples/code/redirect_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/code/relay_cb.erl b/lib/diameter/examples/code/relay_cb.erl
index dba0f302ec..6df1738143 100644
--- a/lib/diameter/examples/code/relay_cb.erl
+++ b/lib/diameter/examples/code/relay_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/code/sctp.erl b/lib/diameter/examples/code/sctp.erl
index e0fed17fe3..86a7023142 100644
--- a/lib/diameter/examples/code/sctp.erl
+++ b/lib/diameter/examples/code/sctp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/dict/GNUmakefile b/lib/diameter/examples/dict/GNUmakefile
index 3f4178aa49..9f1e74c83a 100644
--- a/lib/diameter/examples/dict/GNUmakefile
+++ b/lib/diameter/examples/dict/GNUmakefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2013. All Rights Reserved.
+# Copyright Ericsson AB 2013-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/dict/depend.sed b/lib/diameter/examples/dict/depend.sed
index 1b91c493f0..127e4f67cc 100644
--- a/lib/diameter/examples/dict/depend.sed
+++ b/lib/diameter/examples/dict/depend.sed
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2013. All Rights Reserved.
+# Copyright Ericsson AB 2013-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/dict/rfc4004_mip.dia b/lib/diameter/examples/dict/rfc4004_mip.dia
index 61b2b6eec8..a03d8016b0 100644
--- a/lib/diameter/examples/dict/rfc4004_mip.dia
+++ b/lib/diameter/examples/dict/rfc4004_mip.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2013. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/dict/rfc4005_nas.dia b/lib/diameter/examples/dict/rfc4005_nas.dia
index f5619259f0..2039e68941 100644
--- a/lib/diameter/examples/dict/rfc4005_nas.dia
+++ b/lib/diameter/examples/dict/rfc4005_nas.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2013. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/dict/rfc4006_cc.dia b/lib/diameter/examples/dict/rfc4006_cc.dia
index 2a9428fc84..971bd98845 100644
--- a/lib/diameter/examples/dict/rfc4006_cc.dia
+++ b/lib/diameter/examples/dict/rfc4006_cc.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2013. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/dict/rfc4072_eap.dia b/lib/diameter/examples/dict/rfc4072_eap.dia
index 53be6f445e..2dcaa5f1a6 100644
--- a/lib/diameter/examples/dict/rfc4072_eap.dia
+++ b/lib/diameter/examples/dict/rfc4072_eap.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2013. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/dict/rfc4590_digest.dia b/lib/diameter/examples/dict/rfc4590_digest.dia
index 3db91a21a7..6a05294eb4 100644
--- a/lib/diameter/examples/dict/rfc4590_digest.dia
+++ b/lib/diameter/examples/dict/rfc4590_digest.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2013. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/examples/dict/rfc4740_sip.dia b/lib/diameter/examples/dict/rfc4740_sip.dia
index 90f4d025e8..80cd15ea52 100644
--- a/lib/diameter/examples/dict/rfc4740_sip.dia
+++ b/lib/diameter/examples/dict/rfc4740_sip.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2013. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/include/diameter.hrl b/lib/diameter/include/diameter.hrl
index 91ddd56cd6..1dd6850fa3 100644
--- a/lib/diameter/include/diameter.hrl
+++ b/lib/diameter/include/diameter.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/Makefile b/lib/diameter/src/Makefile
index e0bbbdfe63..7f61620fc1 100644
--- a/lib/diameter/src/Makefile
+++ b/lib/diameter/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2014. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/app.sed b/lib/diameter/src/app.sed
index 78e5bd2bad..dd3806f5f1 100644
--- a/lib/diameter/src/app.sed
+++ b/lib/diameter/src/app.sed
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2014. All Rights Reserved.
+# Copyright Ericsson AB 2014-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/base/diameter.erl b/lib/diameter/src/base/diameter.erl
index de88f6befd..e8f2f63f86 100644
--- a/lib/diameter/src/base/diameter.erl
+++ b/lib/diameter/src/base/diameter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,6 +36,8 @@
%% Information.
-export([services/0,
+ peer_info/1,
+ peer_find/1,
service_info/2]).
%% Start/stop the application. In a "real" application this should
@@ -53,6 +55,7 @@
service_name/0,
capability/0,
peer_filter/0,
+ peer_ref/0,
service_opt/0,
application_opt/0,
app_module/0,
@@ -147,6 +150,27 @@ service_info(SvcName, Option) ->
diameter_service:info(SvcName, Option).
%% ---------------------------------------------------------------------------
+%% peer_info/2
+%% ---------------------------------------------------------------------------
+
+-spec peer_info(peer_ref())
+ -> [tuple()].
+
+peer_info(PeerRef) ->
+ diameter_service:peer_info(PeerRef).
+
+%% ---------------------------------------------------------------------------
+%% peer_find/1
+%% ---------------------------------------------------------------------------
+
+-spec peer_find(peer_ref() | pid())
+ -> {peer_ref(), pid()}
+ | false.
+
+peer_find(Pid) ->
+ diameter_peer_fsm:find(Pid).
+
+%% ---------------------------------------------------------------------------
%% add_transport/3
%% ---------------------------------------------------------------------------
@@ -280,6 +304,9 @@ call(SvcName, App, Message) ->
| {all, [peer_filter()]}
| {any, [peer_filter()]}.
+-opaque peer_ref()
+ :: pid().
+
-type evaluable()
:: {module(), atom(), list()}
| fun()
diff --git a/lib/diameter/src/base/diameter_app.erl b/lib/diameter/src/base/diameter_app.erl
index 6f0c78094a..122f60dd88 100644
--- a/lib/diameter/src/base/diameter_app.erl
+++ b/lib/diameter/src/base/diameter_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/base/diameter_callback.erl b/lib/diameter/src/base/diameter_callback.erl
index 70c70fb5bd..f479cb6612 100644
--- a/lib/diameter/src/base/diameter_callback.erl
+++ b/lib/diameter/src/base/diameter_callback.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/base/diameter_config.erl b/lib/diameter/src/base/diameter_config.erl
index 702f11593a..fdbbd412a1 100644
--- a/lib/diameter/src/base/diameter_config.erl
+++ b/lib/diameter/src/base/diameter_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -38,17 +38,17 @@
-module(diameter_config).
-behaviour(gen_server).
--compile({no_auto_import, [monitor/2]}).
-
-export([start_service/2,
stop_service/1,
add_transport/2,
remove_transport/2,
have_transport/2,
- lookup/1]).
+ lookup/1,
+ subscribe/2]).
-%% child server start
--export([start_link/0]).
+%% server start
+-export([start_link/0,
+ start_link/1]).
%% gen_server callbacks
-export([init/1,
@@ -58,8 +58,8 @@
handle_info/2,
code_change/3]).
-%% diameter_sync requests.
--export([sync/1]).
+%% callbacks
+-export([sync/1]). %% diameter_sync requests
%% debug
-export([state/0,
@@ -69,7 +69,8 @@
-include("diameter_internal.hrl").
%% Server state.
--record(state, {id = diameter_lib:now()}).
+-record(state, {id = diameter_lib:now(),
+ role :: server | transport}).
%% Registered name of the server.
-define(SERVER, ?MODULE).
@@ -77,6 +78,9 @@
%% Table config is written to.
-define(TABLE, ?MODULE).
+%% Key on which a transport-specific child registers itself.
+-define(TRANSPORT_KEY(Ref), {?MODULE, transport, Ref}).
+
%% Workaround for dialyzer's lack of understanding of match specs.
-type match(T)
:: T | '_' | '$1' | '$2' | '$3' | '$4'.
@@ -225,6 +229,13 @@ pred(_) ->
?THROW(pred).
%% --------------------------------------------------------------------------
+%% # subscribe/2
+%% --------------------------------------------------------------------------
+
+subscribe(Ref, T) ->
+ diameter_reg:subscribe(?TRANSPORT_KEY(Ref), T).
+
+%% --------------------------------------------------------------------------
%% # have_transport/2
%%
%% Output: true | false
@@ -264,6 +275,9 @@ start_link() ->
Options = [{spawn_opt, diameter_lib:spawn_opts(server, [])}],
gen_server:start_link(ServerName, Module, Args, Options).
+start_link(T) ->
+ proc_lib:start_link(?MODULE, init, [T], infinity, []).
+
state() ->
call(state).
@@ -274,8 +288,27 @@ uptime() ->
%%% # init/1
%%% ----------------------------------------------------------
+%% ?SERVER start.
init([]) ->
- {ok, #state{}}.
+ {ok, #state{role = server}};
+
+%% Child start as a consequence of add_transport.
+init({SvcName, Type, Opts}) ->
+ Res = try
+ add(SvcName, Type, Opts)
+ catch
+ ?FAILURE(Reason) -> {error, Reason}
+ end,
+ proc_lib:init_ack({ok, self(), Res}),
+ loop(Res).
+
+%% loop/1
+
+loop({ok, _}) ->
+ gen_server:enter_loop(?MODULE, [], #state{role = transport});
+
+loop({error, _}) ->
+ ok. %% die
%%% ----------------------------------------------------------
%%% # handle_call/2
@@ -284,8 +317,8 @@ init([]) ->
handle_call(state, _, State) ->
{reply, State, State};
-handle_call(uptime, _, #state{id = Time} = State) ->
- {reply, diameter_lib:now_diff(Time), State};
+handle_call(uptime, _, #state{id = Time} = S) ->
+ {reply, diameter_lib:now_diff(Time), S};
handle_call(Req, From, State) ->
?UNEXPECTED([Req, From]),
@@ -304,30 +337,34 @@ handle_cast(Msg, State) ->
%%% # handle_info/2
%%% ----------------------------------------------------------
+%% remove_transport is telling published child to die.
+handle_info(stop, #state{role = transport} = S) ->
+ {stop, normal, S};
+
%% A service process has died. This is most likely a consequence of
%% stop_service, in which case the restart will find no config for the
%% service and do nothing. The entry keyed on the monitor ref is only
%% removed as a result of the 'DOWN' notification however.
-handle_info({'DOWN', MRef, process, _, Reason}, State) ->
+handle_info({'DOWN', MRef, process, _, Reason}, #state{role = server} = S) ->
[#monitor{service = SvcName} = T] = select([{#monitor{mref = MRef,
_ = '_'},
[],
['$_']}]),
queue_restart(Reason, SvcName),
delete_object(T),
- {noreply, State};
+ {noreply, S};
-handle_info({monitor, SvcName, Pid}, State) ->
- monitor(Pid, SvcName),
- {noreply, State};
+handle_info({monitor, SvcName, Pid}, #state{role = server} = S) ->
+ insert_monitor(Pid, SvcName),
+ {noreply, S};
-handle_info({restart, SvcName}, State) ->
+handle_info({restart, SvcName}, #state{role = server} = S) ->
restart(SvcName),
- {noreply, State};
+ {noreply, S};
-handle_info(restart, State) ->
+handle_info(restart, #state{role = server} = S) ->
restart(),
- {noreply, State};
+ {noreply, S};
handle_info(Info, State) ->
?UNEXPECTED([Info]),
@@ -404,19 +441,22 @@ sync({start_service, SvcName, Opts}) ->
sync({stop_service, SvcName}) ->
stop(SvcName);
+%% Start a child whose only purpose is to be alive for the lifetime of
+%% the transport configuration and publish itself in diameter_reg.
+%% This is to provide a way for processes to to be notified when the
+%% configuration is removed (diameter_reg:subscribe/2).
sync({add, SvcName, Type, Opts}) ->
- try
- add(SvcName, Type, Opts)
- catch
- ?FAILURE(Reason) -> {error, Reason}
- end;
+ {ok, _Pid, Res} = diameter_config_sup:start_child({SvcName, Type, Opts}),
+ Res;
sync({remove, SvcName, Pred}) ->
- remove(select([{#transport{service = '$1', _ = '_'},
+ Recs = select([{#transport{service = '$1', _ = '_'},
[{'=:=', '$1', {const, SvcName}}],
['$_']}]),
- SvcName,
- Pred).
+ F = fun(#transport{ref = R, type = T, options = O}) ->
+ Pred(R,T,O)
+ end,
+ remove(SvcName, lists:filter(F, Recs)).
%% start/3
@@ -438,8 +478,8 @@ startmon(SvcName, {ok, Pid}) ->
startmon(_, {error, _}) ->
ok.
-monitor(Pid, SvcName) ->
- MRef = erlang:monitor(process, Pid),
+insert_monitor(Pid, SvcName) ->
+ MRef = monitor(process, Pid),
insert(#monitor{mref = MRef, service = SvcName}).
%% queue_restart/2
@@ -503,6 +543,7 @@ add(SvcName, Type, Opts) ->
ok = transport_opts(Opts),
Ref = make_ref(),
+ true = diameter_reg:add_new(?TRANSPORT_KEY(Ref)),
T = {Ref, Type, Opts},
%% The call to the service returns error if the service isn't
%% started yet, which is harmless. The transport will be started
@@ -594,26 +635,30 @@ start_transport(SvcName, T) ->
No
end.
-%% remove/3
+%% remove/2
-remove(L, SvcName, Pred) ->
- rm(SvcName, lists:filter(fun(#transport{ref = R, type = T, options = O}) ->
- Pred(R,T,O)
- end,
- L)).
-
-rm(_, []) ->
+remove(_, []) ->
ok;
-rm(SvcName, L) ->
+
+remove(SvcName, L) ->
Refs = lists:map(fun(#transport{ref = R}) -> R end, L),
case stop_transport(SvcName, Refs) of
ok ->
+ lists:foreach(fun stop_child/1, Refs),
diameter_stats:flush(Refs),
lists:foreach(fun delete_object/1, L);
{error, _} = No ->
No
end.
+stop_child(Ref) ->
+ case diameter_reg:match(?TRANSPORT_KEY(Ref)) of
+ [{_, Pid}] -> %% tell the transport-specific child to die
+ Pid ! stop;
+ [] -> %% already removed/dead
+ ok
+ end.
+
stop_transport(SvcName, Refs) ->
case diameter_service:stop_transport(SvcName, Refs) of
ok ->
diff --git a/lib/diameter/src/base/diameter_config_sup.erl b/lib/diameter/src/base/diameter_config_sup.erl
new file mode 100644
index 0000000000..9524573378
--- /dev/null
+++ b/lib/diameter/src/base/diameter_config_sup.erl
@@ -0,0 +1,58 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%
+%% Supervisor for config processes.
+%%
+
+-module(diameter_config_sup).
+
+-behaviour(supervisor).
+
+%% interface
+-export([start_link/0, %% supervisor start
+ start_child/1]). %% config start
+
+-export([init/1]).
+
+-define(NAME, ?MODULE). %% supervisor name
+
+%% start_link/0
+
+start_link() ->
+ SupName = {local, ?NAME},
+ supervisor:start_link(SupName, ?MODULE, []).
+
+%% start_child/1
+
+start_child(T) ->
+ supervisor:start_child(?NAME, [T]).
+
+%% init/1
+
+init([]) ->
+ Mod = diameter_config,
+ Flags = {simple_one_for_one, 0, 1},
+ ChildSpec = {Mod,
+ {Mod, start_link, []},
+ temporary,
+ 1000,
+ worker,
+ [Mod]},
+ {ok, {Flags, [ChildSpec]}}.
diff --git a/lib/diameter/src/base/diameter_dict.erl b/lib/diameter/src/base/diameter_dict.erl
index 1013690a5b..7db294a1b1 100644
--- a/lib/diameter/src/base/diameter_dict.erl
+++ b/lib/diameter/src/base/diameter_dict.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/base/diameter_internal.hrl b/lib/diameter/src/base/diameter_internal.hrl
index 518c0b9b1f..a0f4a8567d 100644
--- a/lib/diameter/src/base/diameter_internal.hrl
+++ b/lib/diameter/src/base/diameter_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/base/diameter_lib.erl b/lib/diameter/src/base/diameter_lib.erl
index 43b0ca24ab..b835e87967 100644
--- a/lib/diameter/src/base/diameter_lib.erl
+++ b/lib/diameter/src/base/diameter_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,18 +20,17 @@
-module(diameter_lib).
-compile({no_auto_import, [now/0]}).
--compile({nowarn_deprecated_function, [{erlang, now, 0}]}).
-export([info_report/2,
error_report/2,
warning_report/2,
now/0,
+ timestamp/0,
timestamp/1,
now_diff/1,
micro_diff/1,
micro_diff/2,
time/1,
- seed/0,
eval/1,
eval_name/1,
get_stacktrace/0,
@@ -110,6 +109,16 @@ now() ->
erlang:monotonic_time().
%% ---------------------------------------------------------------------------
+%% # timestamp/0
+%% ---------------------------------------------------------------------------
+
+-spec timestamp()
+ -> erlang:timestamp().
+
+timestamp() ->
+ timestamp(now()).
+
+%% ---------------------------------------------------------------------------
%% # timestamp/1
%% ---------------------------------------------------------------------------
@@ -184,24 +193,6 @@ time(Micro) -> %% elapsed time
{H, M, S, Micro rem 1000000}.
%% ---------------------------------------------------------------------------
-%% # seed/0
-%% ---------------------------------------------------------------------------
-
--spec seed()
- -> {erlang:timestamp(), {integer(), integer(), integer()}}.
-
-%% Return an argument for random:seed/1.
-
-seed() ->
- T = now(),
- {timestamp(T), seed(T)}.
-
-%% seed/1
-
-seed(T) -> %% monotonic time
- {erlang:phash2(node()), T, erlang:unique_integer()}.
-
-%% ---------------------------------------------------------------------------
%% # eval/1
%%
%% Evaluate a function in various forms.
diff --git a/lib/diameter/src/base/diameter_misc_sup.erl b/lib/diameter/src/base/diameter_misc_sup.erl
index 2054ea7831..343688be23 100644
--- a/lib/diameter/src/base/diameter_misc_sup.erl
+++ b/lib/diameter/src/base/diameter_misc_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/base/diameter_peer_fsm.erl b/lib/diameter/src/base/diameter_peer_fsm.erl
index 2b23183d18..996e75a8d3 100644
--- a/lib/diameter/src/base/diameter_peer_fsm.erl
+++ b/lib/diameter/src/base/diameter_peer_fsm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,6 +32,9 @@
-export([start/3,
result_code/2]).
+%% Interface towards diameter.
+-export([find/1]).
+
%% gen_server callbacks
-export([init/1,
handle_call/3,
@@ -117,7 +120,7 @@
parent :: pid(), %% watchdog process
transport :: pid(), %% transport process
dictionary :: module(), %% common dictionary
- service :: #diameter_service{},
+ service :: #diameter_service{} | undefined,
dpr = false :: false
| true %% DPR received, DPA sent
| {boolean(), uint32(), uint32()},
@@ -185,6 +188,25 @@ start_link(T) ->
infinity,
diameter_lib:spawn_opts(server, [])).
+%% find/1
+%%
+%% Identify both pids of a peer_fsm/transport pair.
+
+find(Pid) ->
+ findl([{?MODULE, '_', Pid}, {?MODULE, Pid, '_'}]).
+
+findl([]) ->
+ false;
+
+findl([Pat | Rest]) ->
+ try
+ [{{_, Pid, TPid}, Pid}] = diameter_reg:match(Pat),
+ {Pid, TPid}
+ catch
+ error:_ ->
+ findl(Rest)
+ end.
+
%% ---------------------------------------------------------------------------
%% ---------------------------------------------------------------------------
@@ -215,6 +237,8 @@ i({Ack, WPid, {M, Ref} = T, Opts, {SvcOpts, Nodes, Dict0, Svc}}) ->
{TPid, Addrs} = start_transport(T, Rest, Svc),
+ diameter_reg:add({?MODULE, self(), TPid}), %% lets pairs be discovered
+
#state{state = {'Wait-Conn-Ack', Tmo},
parent = WPid,
transport = TPid,
@@ -416,8 +440,8 @@ transition({connection_timeout, _}, _) ->
ok;
%% Incoming message from the transport.
-transition({diameter, {recv, Pkt}}, S) ->
- recv(Pkt, S);
+transition({diameter, {recv, MsgT}}, S) ->
+ incoming(MsgT, S);
%% Timeout when still in the same state ...
transition({timeout = T, PS}, #state{state = PS}) ->
@@ -543,6 +567,28 @@ encode(Rec, Dict) ->
diameter_codec:encode(Dict, #diameter_packet{header = Hdr,
msg = Rec}).
+%% incoming/2
+
+incoming({Msg, NPid}, S) ->
+ try recv(Msg, S) of
+ T ->
+ NPid ! {diameter, discard},
+ T
+ catch
+ {?MODULE, Name, Pkt} ->
+ S#state.parent ! {recv, self(), Name, {Pkt, NPid}},
+ rcv(Name, Pkt, S)
+ end;
+
+incoming(Msg, S) ->
+ try
+ recv(Msg, S)
+ catch
+ {?MODULE, Name, Pkt} ->
+ S#state.parent ! {recv, self(), Name, Pkt},
+ rcv(Name, Pkt, S)
+ end.
+
%% recv/2
recv(#diameter_packet{header = #diameter_header{} = Hdr}
@@ -597,9 +643,8 @@ recv1('DPA' = N,
%% Any other message with a header and no length errors: send to the
%% parent.
-recv1(Name, Pkt, #state{parent = Pid} = S) ->
- Pid ! {recv, self(), Name, Pkt},
- rcv(Name, Pkt, S).
+recv1(Name, Pkt, #state{}) ->
+ throw({?MODULE, Name, Pkt}).
%% recv/3
diff --git a/lib/diameter/src/base/diameter_peer_fsm_sup.erl b/lib/diameter/src/base/diameter_peer_fsm_sup.erl
index 54bd06929d..cf3c205e3f 100644
--- a/lib/diameter/src/base/diameter_peer_fsm_sup.erl
+++ b/lib/diameter/src/base/diameter_peer_fsm_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/base/diameter_reg.erl b/lib/diameter/src/base/diameter_reg.erl
index 7f198080ba..9027130063 100644
--- a/lib/diameter/src/base/diameter_reg.erl
+++ b/lib/diameter/src/base/diameter_reg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,14 +25,12 @@
-module(diameter_reg).
-behaviour(gen_server).
--compile({no_auto_import, [monitor/2]}).
-
-export([add/1,
add_new/1,
- del/1,
- repl/2,
+ remove/1,
match/1,
- wait/1]).
+ wait/1,
+ subscribe/2]).
-export([start_link/0]).
@@ -46,29 +44,32 @@
%% test
-export([pids/0,
- terms/0]).
+ terms/0,
+ subs/0,
+ waits/0]).
%% debug
-export([state/0,
uptime/0]).
--include("diameter_internal.hrl").
-
-define(SERVER, ?MODULE).
-define(TABLE, ?MODULE).
-%% Table entry used to keep from starting more than one monitor on the
-%% same process. This isn't a problem but there's no point in starting
-%% multiple monitors if we can avoid it. Note that we can't have a 2-tuple
-%% keyed on Pid since a registered term can be anything. Want the entry
-%% keyed on Pid so that lookup is fast.
--define(MONITOR(Pid, MRef), {Pid, monitor, MRef}).
-
-%% Table entry containing the Term -> Pid mapping.
--define(MAPPING(Term, Pid), {Term, Pid}).
+-type key() :: term().
+-type from() :: {pid(), term()}.
+-type pattern() :: term().
-record(state, {id = diameter_lib:now(),
- q = []}). %% [{From, Pat}]
+ receivers = dict:new()
+ :: dict:dict(pattern(), [[pid() | term()]%% subscribe
+ | from()]), %% wait
+ monitors = sets:new() :: sets:set(pid())}).
+
+%% The ?TABLE bag contains the Key -> Pid mapping, as {Key, Pid}
+%% tuples. Each pid is stored in the monitors set to ensure only one
+%% monitor for each pid: more are harmless, but unnecessary. A pattern
+%% is added to receivers a result of calls to wait/1 or subscribe/2:
+%% changes to ?TABLE causes processes to be notified as required.
%% ===========================================================================
%% # add(T)
@@ -77,18 +78,18 @@
%% this or other assocations can be retrieved using match/1.
%%
%% An association is removed when the calling process dies or as a
-%% result of calling del/1. Adding the same term more than once is
-%% equivalent to adding it exactly once.
+%% result of calling remove/1. Adding the same term more than once is
+%% equivalent to adding it once.
%%
%% Note that since match/1 takes a pattern as argument, specifying a
%% term that contains match variables is probably not a good idea
%% ===========================================================================
--spec add(any())
+-spec add(key())
-> true.
add(T) ->
- call({add, fun ets:insert/2, T, self()}).
+ call({add, false, T}).
%% ===========================================================================
%% # add_new(T)
@@ -97,36 +98,23 @@ add(T) ->
%% association, false being returned if an association already exists.
%% ===========================================================================
--spec add_new(any())
+-spec add_new(key())
-> boolean().
add_new(T) ->
- call({add, fun insert_new/2, T, self()}).
+ call({add, true, T}).
%% ===========================================================================
-%% # repl(T, NewT)
-%%
-%% Like add/1 but only replace an existing association on T, false
-%% being returned if it doesn't exist.
-%% ===========================================================================
-
--spec repl(any(), any())
- -> boolean().
-
-repl(T, U) ->
- call({repl, T, U, self()}).
-
-%% ===========================================================================
-%% # del(Term)
+%% # remove(Term)
%%
%% Remove any existing association of Term with self().
%% ===========================================================================
--spec del(any())
+-spec remove(key())
-> true.
-del(T) ->
- call({del, T, self()}).
+remove(T) ->
+ call({remove, T}).
%% ===========================================================================
%% # match(Pat)
@@ -139,12 +127,17 @@ del(T) ->
%% associations removed.)
%% ===========================================================================
--spec match(any())
- -> [{term(), pid()}].
+-spec match(pattern())
+ -> [{key(), pid()}].
match(Pat) ->
- ets:match_object(?TABLE, ?MAPPING(Pat, '_')).
+ match(Pat, '_').
+
+%% match/2
+match(Pat, Pid) ->
+ ets:match_object(?TABLE, {Pat, Pid}).
+
%% ===========================================================================
%% # wait(Pat)
%%
@@ -152,10 +145,29 @@ match(Pat) ->
%% It's up to the caller to ensure that the wait won't be forever.
%% ===========================================================================
+-spec wait(pattern())
+ -> [{key(), pid()}].
+
wait(Pat) ->
+ _ = match(Pat), %% ensure match can succeed
call({wait, Pat}).
%% ===========================================================================
+%% # subscribe(Pat, T)
+%%
+%% Like match/1, but additionally receive messages of the form
+%% {T, add|remove, {term(), pid()} when associations are added
+%% or removed.
+%% ===========================================================================
+
+-spec subscribe(Pat :: any(), T :: term())
+ -> [{term(), pid()}].
+
+subscribe(Pat, T) ->
+ _ = match(Pat), %% ensure match can succeed
+ call({subscribe, Pat, T}).
+
+%% ===========================================================================
start_link() ->
ServerName = {local, ?SERVER},
@@ -169,19 +181,15 @@ uptime() ->
call(uptime).
%% pids/0
-%%
-%% Return: list of {Pid, [Term, ...]}
+
+-spec pids()
+ -> [{pid(), [key()]}].
pids() ->
to_list(fun swap/1).
to_list(Fun) ->
- ets:foldl(fun(T,A) -> acc(Fun, T, A) end, orddict:new(), ?TABLE).
-
-acc(Fun, ?MAPPING(Term, Pid), Dict) ->
- append(Fun({Term, Pid}), Dict);
-acc(_, _, Dict) ->
- Dict.
+ ets:foldl(fun(T,D) -> append(Fun(T), D) end, orddict:new(), ?TABLE).
append({K,V}, Dict) ->
orddict:append(K, V, Dict).
@@ -189,14 +197,47 @@ append({K,V}, Dict) ->
id(T) -> T.
%% terms/0
-%%
-%% Return: list of {Term, [Pid, ...]}
+
+-spec terms()
+ -> [{key(), [pid()]}].
terms() ->
to_list(fun id/1).
swap({X,Y}) -> {Y,X}.
+%% subs/0
+
+-spec subs()
+ -> [{pattern(), [{pid(), term()}]}].
+
+subs() ->
+ #state{receivers = RD} = state(),
+ dict:fold(fun sub/3, orddict:new(), RD).
+
+sub(Pat, Ps, Dict) ->
+ lists:foldl(fun([P|T], D) -> orddict:append(Pat, {P,T}, D);
+ (_, D) -> D
+ end,
+ Dict,
+ Ps).
+
+%% waits/0
+
+-spec waits()
+ -> [{pattern(), [{from(), term()}]}].
+
+waits() ->
+ #state{receivers = RD} = state(),
+ dict:fold(fun wait/3, orddict:new(), RD).
+
+wait(Pat, Ps, Dict) ->
+ lists:foldl(fun({_,_} = F, D) -> orddict:append(Pat, F, D);
+ (_, D) -> D
+ end,
+ Dict,
+ Ps).
+
%% ----------------------------------------------------------
%% # init/1
%% ----------------------------------------------------------
@@ -209,57 +250,58 @@ init(_) ->
%% # handle_call/3
%% ----------------------------------------------------------
-handle_call({add, Fun, Key, Pid}, _, S) ->
- B = Fun(?TABLE, {Key, Pid}),
- monitor(B andalso no_monitor(Pid), Pid),
- {reply, B, pending(B, S)};
-
-handle_call({del, Key, Pid}, _, S) ->
- {reply, ets:delete_object(?TABLE, ?MAPPING(Key, Pid)), S};
-
-handle_call({repl, T, U, Pid}, _, S) ->
- MatchSpec = [{?MAPPING('$1', Pid),
- [{'=:=', '$1', {const, T}}],
- ['$_']}],
- {reply, repl(ets:select(?TABLE, MatchSpec), U, Pid), S};
-
-handle_call({wait, Pat}, From, #state{q = Q} = S) ->
- case find(Pat) of
- {ok, L} ->
- {reply, L, S};
- false ->
- {noreply, S#state{q = [{From, Pat} | Q]}}
+handle_call({add, Uniq, Key}, {Pid, _}, S0) ->
+ Rec = {Key, Pid},
+ S1 = flush(Uniq, Rec, S0),
+ {Res, New} = insert(Uniq, Rec),
+ {Recvs, S} = add(New, Rec, S1),
+ notify(Recvs, Rec),
+ {reply, Res, S};
+
+handle_call({remove, Key}, {Pid, _}, S) ->
+ Rec = {Key, Pid},
+ Recvs = delete([Rec], S),
+ ets:delete_object(?TABLE, Rec),
+ notify(Recvs, remove),
+ {reply, true, S};
+
+handle_call({wait, Pat}, {Pid, _} = From, #state{receivers = RD} = S) ->
+ NS = add_monitor(Pid, S),
+ case match(Pat) of
+ [_|_] = L ->
+ {reply, L, NS};
+ [] ->
+ {noreply, NS#state{receivers = dict:append(Pat, From, RD)}}
end;
+handle_call({subscribe, Pat, T}, {Pid, _}, #state{receivers = RD} = S) ->
+ NS = add_monitor(Pid, S),
+ {reply, match(Pat), NS#state{receivers = dict:append(Pat, [Pid | T], RD)}};
+
handle_call(state, _, S) ->
{reply, S, S};
handle_call(uptime, _, #state{id = Time} = S) ->
{reply, diameter_lib:now_diff(Time), S};
-handle_call(Req, From, S) ->
- ?UNEXPECTED([Req, From]),
+handle_call(_Req, _From, S) ->
{reply, nok, S}.
%% ----------------------------------------------------------
%% # handle_cast/2
%% ----------------------------------------------------------
-handle_cast(Msg, S)->
- ?UNEXPECTED([Msg]),
+handle_cast(_Msg, S)->
{noreply, S}.
%% ----------------------------------------------------------
%% # handle_info/2
%% ----------------------------------------------------------
-handle_info({'DOWN', MRef, process, Pid, _}, S) ->
- ets:delete_object(?TABLE, ?MONITOR(Pid, MRef)),
- ets:match_delete(?TABLE, ?MAPPING('_', Pid)),
- {noreply, S};
+handle_info({'DOWN', _MRef, process, Pid, _}, S) ->
+ {noreply, down(Pid, S)};
-handle_info(Info, S) ->
- ?UNEXPECTED([Info]),
+handle_info(_Info, S) ->
{noreply, S}.
%% ----------------------------------------------------------
@@ -278,71 +320,166 @@ code_change(_OldVsn, State, _Extra) ->
%% ===========================================================================
-monitor(true, Pid) ->
- ets:insert(?TABLE, ?MONITOR(Pid, erlang:monitor(process, Pid)));
-monitor(false, _) ->
- ok.
+%% insert/2
+
+insert(false, Rec) ->
+ Spec = [{'$1', [{'==', '$1', {const, Rec}}], ['$_']}],
+ X = '$end_of_table' /= ets:select(?TABLE, Spec, 1), %% entry exists?
+ X orelse ets:insert(?TABLE, Rec),
+ {true, not X};
-%% Do we need a monitor for the specified Pid?
-no_monitor(Pid) ->
- [] == ets:match_object(?TABLE, ?MONITOR(Pid, '_')).
+insert(true, Rec) ->
+ B = ets:insert_new(?TABLE, Rec), %% entry inserted?
+ {B, B}.
-%% insert_new/2
+%% add/3
-insert_new(?TABLE, {Key, _} = T) ->
- flush(ets:lookup(?TABLE, Key)),
- ets:insert_new(?TABLE, T).
+%% Only add a single monitor for any given process, since there's no
+%% use to more.
+add(true, {_Key, Pid} = Rec, S) ->
+ NS = add_monitor(Pid, S),
+ {Recvs, RD} = add(Rec, NS),
+ {Recvs, S#state{receivers = RD}};
+
+add(false = No, _, S) ->
+ {No, S}.
+
+%% add/2
+
+%% Notify processes whose patterns match the inserted key.
+add({_Key, Pid} = Rec, #state{receivers = RD}) ->
+ dict:fold(fun(Pt, Ps, A) ->
+ add(lists:member(Rec, match(Pt, Pid)), Pt, Ps, Rec, A)
+ end,
+ {sets:new(), RD},
+ RD).
+
+%% add/5
+
+add(true, Pat, Recvs, {_,_} = Rec, {Set, Dict}) ->
+ {lists:foldl(fun sets:add_element/2, Set, Recvs),
+ remove(fun erlang:is_list/1, Pat, Recvs, Dict)};
+
+add(false, _, _, _, Acc) ->
+ Acc.
+
+%% add_monitor/2
+
+add_monitor(Pid, #state{monitors = MS} = S) ->
+ add_monitor(sets:is_element(Pid, MS), Pid, S).
+
+%% add_monitor/3
+
+add_monitor(false, Pid, #state{monitors = MS} = S) ->
+ monitor(process, Pid),
+ S#state{monitors = sets:add_element(Pid, MS)};
+
+add_monitor(true, _, S) ->
+ S.
+
+%% delete/2
+
+delete(Recs, #state{receivers = RD}) ->
+ lists:foldl(fun(R,S) -> delete(R, RD, S) end, sets:new(), Recs).
+
+%% delete/3
+
+delete({_Key, Pid} = Rec, RD, Set) ->
+ dict:fold(fun(Pt, Ps, S) ->
+ delete(lists:member(Rec, match(Pt, Pid)), Rec, Ps, S)
+ end,
+ Set,
+ RD).
+
+%% delete/4
+
+%% Entry matches a pattern ...
+delete(true, Rec, Recvs, Set) ->
+ lists:foldl(fun(R,S) -> sets:add_element({R, Rec}, S) end,
+ Set,
+ Recvs);
+
+%% ... or not.
+delete(false, _, _, Set) ->
+ Set.
+
+%% notify/2
+
+notify(false = No, _) ->
+ No;
+
+notify(Recvs, remove = Op) ->
+ sets:fold(fun({P,R}, N) -> send(P, R, Op), N+1 end, 0, Recvs);
+
+notify(Recvs, {_,_} = Rec) ->
+ sets:fold(fun(P,N) -> send(P, Rec, add), N+1 end, 0, Recvs).
+
+%% send/3
+
+%% No processes waiting on remove, by construction: they've either
+%% received notification at add or aren't waiting.
+send([Pid | T], Rec, Op) ->
+ Pid ! {T, Op, Rec};
+
+send({_,_} = From, Rec, add) ->
+ gen_server:reply(From, [Rec]).
+
+%% down/2
+
+down(Pid, #state{monitors = MS} = S) ->
+ NS = flush(Pid, S),
+ Recvs = delete(match('_', Pid), NS),
+ ets:match_delete(?TABLE, {'_', Pid}),
+ notify(Recvs, remove),
+ NS#state{monitors = sets:del_element(Pid, MS)}.
+
+%% flush/3
%% Remove any processes that are dead but for which we may not have
-%% received 'DOWN' yet. This is to ensure that add_new can be used
-%% to register a unique name each time a process restarts.
-flush(List) ->
- lists:foreach(fun({_,P} = T) ->
- del(erlang:is_process_alive(P), T)
- end,
- List).
-
-del(Alive, T) ->
- Alive orelse ets:delete_object(?TABLE, T).
-
-%% repl/3
-
-repl([?MAPPING(_, Pid) = M], Key, Pid) ->
- ets:delete_object(?TABLE, M),
- true = ets:insert(?TABLE, ?MAPPING(Key, Pid));
-repl([], _, _) ->
- false.
-
-%% pending/1
-
-pending(true, #state{q = [_|_] = Q} = S) ->
- S#state{q = q(lists:reverse(Q), [])}; %% retain reply order
-pending(_, S) ->
+%% received 'DOWN' yet, to ensure that add_new can be used to register
+%% a unique name each time a registering process restarts.
+flush(true, {Key, Pid}, S) ->
+ Spec = [{{'$1', '$2'},
+ [{'andalso', {'==', '$1', {const, Key}},
+ {'/=', '$2', Pid}}],
+ ['$2']}],
+ lists:foldl(fun down/2, S, [P || P <- ets:select(?TABLE, Spec),
+ not is_process_alive(P)]);
+
+flush(false, _, S) ->
S.
-q([], Q) ->
- Q;
-q([{From, Pat} = T | Rest], Q) ->
- case find(Pat) of
- {ok, L} ->
- gen_server:reply(From, L),
- q(Rest, Q);
- false ->
- q(Rest, [T|Q])
- end.
-
-%% find/1
-
-find(Pat) ->
- try match(Pat) of
- [] ->
- false;
- L ->
- {ok, L}
- catch
- _:_ ->
- {ok, []}
- end.
+%% flush/2
+
+%% Process has died and should no longer receive messages/replies.
+flush(Pid, #state{receivers = RD} = S)
+ when is_pid(Pid) ->
+ S#state{receivers = dict:fold(fun(Pt,Ps,D) -> flush(Pid, Pt, Ps, D) end,
+ RD,
+ RD)}.
+
+%% flush/4
+
+flush(Pid, Pat, Recvs, Dict) ->
+ remove(fun(T) -> Pid /= head(T) end, Pat, Recvs, Dict).
+
+%% head/1
+
+head([P|_]) ->
+ P;
+
+head({P,_}) ->
+ P.
+
+%% remove/4
+
+remove(Pred, Key, Values, Dict) ->
+ case lists:filter(Pred, Values) of
+ [] ->
+ dict:erase(Key, Dict);
+ Rest ->
+ dict:store(Key, Rest, Dict)
+ end.
%% call/1
diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl
index 87ef2e522d..ccf68f4d93 100644
--- a/lib/diameter/src/base/diameter_service.erl
+++ b/lib/diameter/src/base/diameter_service.erl
@@ -32,6 +32,7 @@
-export([subscribe/1,
unsubscribe/1,
services/0,
+ peer_info/1,
info/2]).
%% towards diameter_config
@@ -128,14 +129,14 @@
%% Record representing an RFC 3539 watchdog process implemented by
%% diameter_watchdog.
-record(watchdog,
- {pid :: match(pid()),
+ {pid :: match(pid()) | undefined,
type :: match(connect | accept),
ref :: match(reference()), %% key into diameter_config
options :: match([diameter:transport_opt()]),%% from start_transport
state = ?WD_INITIAL :: match(wd_state()),
started = diameter_lib:now(),%% at process start
peer = false :: match(boolean() | pid())}).
- %% true at accepted, pid() at okay/reopen
+ %% true at accepted/remove, pid() at okay/reopen
%% Record representing a Peer State Machine processes implemented by
%% diameter_peer_fsm.
@@ -218,6 +219,29 @@ lookup_state(SvcName) ->
end.
%% ---------------------------------------------------------------------------
+%% # peer_info/2
+%% ---------------------------------------------------------------------------
+
+%% An extended version of info_peer/1 for peer_info/1.
+peer_info(Pid) ->
+ try
+ {_, PD} = process_info(Pid, dictionary),
+ {_, T} = lists:keyfind({diameter_peer_fsm, start}, 1, PD),
+ {TPid, {{Type, Ref}, TMod, Cfg}} = T,
+ {_, TD} = process_info(TPid, dictionary),
+ {_, Data} = lists:keyfind({TMod, info}, 1, TD),
+ [{ref, Ref},
+ {type, Type},
+ {owner, TPid},
+ {module, TMod},
+ {config, Cfg}
+ | try TMod:info(Data) catch _:_ -> [] end]
+ catch
+ error:_ ->
+ []
+ end.
+
+%% ---------------------------------------------------------------------------
%% # subscribe/1
%% # unsubscribe/1
%% ---------------------------------------------------------------------------
@@ -226,7 +250,7 @@ subscribe(SvcName) ->
diameter_reg:add({?MODULE, subscriber, SvcName}).
unsubscribe(SvcName) ->
- diameter_reg:del({?MODULE, subscriber, SvcName}).
+ diameter_reg:remove({?MODULE, subscriber, SvcName}).
subscriptions(Pat) ->
pmap(diameter_reg:match({?MODULE, subscriber, Pat})).
@@ -652,25 +676,34 @@ mod_state(Alias, ModS) ->
%% remove_transport
shutdown(Refs, #state{watchdogT = WatchdogT})
when is_list(Refs) ->
- ets:foldl(fun(P,ok) -> st(P, Refs), ok end, ok, WatchdogT);
+ ets:insert(WatchdogT, ets:foldl(fun(R,A) -> st(R, Refs, A) end,
+ [],
+ WatchdogT));
%% application/service shutdown
shutdown(Reason, #state{watchdogT = WatchdogT})
when Reason == application;
Reason == service ->
- diameter_lib:wait(ets:foldl(fun(P,A) -> st(P, Reason, A) end,
+ diameter_lib:wait(ets:foldl(fun(P,A) -> ss(P, Reason, A) end,
[],
WatchdogT)).
-%% st/2
+%% st/3
-st(#watchdog{ref = Ref, pid = Pid}, Refs) ->
- lists:member(Ref, Refs)
- andalso (Pid ! {shutdown, self(), transport}). %% 'DOWN' cleans up
+%% Mark replacement as started so that a subsequent accept doesn't
+%% result in a new process that isn't terminated.
+st(#watchdog{ref = Ref, pid = Pid, peer = P} = Rec, Refs, Acc) ->
+ case lists:member(Ref, Refs) of
+ true ->
+ Pid ! {shutdown, self(), transport}, %% 'DOWN' cleans up
+ [Rec#watchdog{peer = true} || P == false] ++ Acc;
+ false ->
+ Acc
+ end.
-%% st/3
+%% ss/3
-st(#watchdog{pid = Pid}, Reason, Acc) ->
+ss(#watchdog{pid = Pid}, Reason, Acc) ->
MRef = monitor(process, Pid),
Pid ! {shutdown, self(), Reason},
[MRef | Acc].
@@ -950,11 +983,22 @@ ms(_, Svc) ->
%% ---------------------------------------------------------------------------
accepted(Pid, _TPid, #state{watchdogT = WatchdogT} = S) ->
- #watchdog{ref = Ref, type = accept = T, peer = false, options = Opts}
+ #watchdog{type = accept = T, peer = P}
= Wd
= fetch(WatchdogT, Pid),
- ets:insert(WatchdogT, Wd#watchdog{peer = true}),%% mark replacement started
- start(Ref, T, Opts, S). %% start new watchdog
+ if not P ->
+ #watchdog{ref = Ref, options = Opts} = Wd,
+ %% Mark replacement started, and start new watchdog.
+ ets:insert(WatchdogT, Wd#watchdog{peer = true}),
+ start(Ref, T, Opts, S);
+ P ->
+ %% Transport removal in progress: true has been set in
+ %% shutdown/2, and the transport will die as a
+ %% consequence.
+ ok
+ end.
+
+%% fetch/2
fetch(Tid, Key) ->
[T] = ets:lookup(Tid, Key),
@@ -1293,8 +1337,7 @@ start_tc(Tc, T, _) ->
tc_timeout({Ref, _Type, _Opts} = T, #state{service_name = SvcName} = S) ->
tc(diameter_config:have_transport(SvcName, Ref), T, S).
-tc(true, {Ref, Type, Opts}, #state{service_name = SvcName}
- = S) ->
+tc(true, {Ref, Type, Opts}, #state{service_name = SvcName} = S) ->
send_event(SvcName, {reconnect, Ref, Opts}),
start(Ref, Type, Opts, S);
tc(false = No, _, _) -> %% removed
diff --git a/lib/diameter/src/base/diameter_session.erl b/lib/diameter/src/base/diameter_session.erl
index 4cd76ed1f1..d854bc36a5 100644
--- a/lib/diameter/src/base/diameter_session.erl
+++ b/lib/diameter/src/base/diameter_session.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -158,10 +158,9 @@ session_id(Host) ->
%% ---------------------------------------------------------------------------
init() ->
- {Now, Seed} = diameter_lib:seed(),
- random:seed(Seed),
+ Now = diameter_lib:timestamp(),
Time = time32(Now),
- Seq = (?INT32 band (Time bsl 20)) bor (random:uniform(1 bsl 20) - 1),
+ Seq = (?INT32 band (Time bsl 20)) bor (rand:uniform(1 bsl 20) - 1),
ets:insert(diameter_sequence, [{origin_state_id, Time},
{session_base, Time bsl 32},
{sequence, Seq}]),
diff --git a/lib/diameter/src/base/diameter_sup.erl b/lib/diameter/src/base/diameter_sup.erl
index e89ede9843..482289cb9a 100644
--- a/lib/diameter/src/base/diameter_sup.erl
+++ b/lib/diameter/src/base/diameter_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@
-export([init/1]).
-define(CHILDREN, [diameter_misc_sup,
+ diameter_config_sup,
diameter_watchdog_sup,
diameter_peer_fsm_sup,
diameter_transport_sup,
diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl
index c169d3fc2c..2112941d5e 100644
--- a/lib/diameter/src/base/diameter_traffic.erl
+++ b/lib/diameter/src/base/diameter_traffic.erl
@@ -230,7 +230,15 @@ pending(TPids) ->
%% used to come through the service process but this avoids that
%% becoming a bottleneck.
-receive_message(TPid, Pkt, Dict0, RecvData)
+receive_message(TPid, {Pkt, NPid}, Dict0, RecvData) ->
+ NPid ! {diameter, incoming(TPid, Pkt, Dict0, RecvData)};
+
+receive_message(TPid, Pkt, Dict0, RecvData) ->
+ incoming(TPid, Pkt, Dict0, RecvData).
+
+%% incoming/4
+
+incoming(TPid, Pkt, Dict0, RecvData)
when is_pid(TPid) ->
#diameter_packet{header = #diameter_header{is_request = R}} = Pkt,
recv(R,
@@ -244,11 +252,18 @@ receive_message(TPid, Pkt, Dict0, RecvData)
%% Incoming request ...
recv(true, false, TPid, Pkt, Dict0, T) ->
- spawn_request(TPid, Pkt, Dict0, T);
+ try
+ {request, spawn_request(TPid, Pkt, Dict0, T)}
+ catch
+ error: system_limit = E -> %% discard
+ ?LOG(error, E),
+ discard
+ end;
%% ... answer to known request ...
recv(false, #request{ref = Ref, handler = Pid} = Req, _, Pkt, Dict0, _) ->
- Pid ! {answer, Ref, Req, Dict0, Pkt};
+ Pid ! {answer, Ref, Req, Dict0, Pkt},
+ {answer, Pid};
%% Note that failover could have happened prior to this message being
%% received and triggering failback. That is, both a failover message
@@ -263,7 +278,7 @@ recv(false, #request{ref = Ref, handler = Pid} = Req, _, Pkt, Dict0, _) ->
recv(false, false, TPid, Pkt, _, _) ->
?LOG(discarded, Pkt#diameter_packet.header),
incr(TPid, {{unknown, 0}, recv, discarded}),
- ok.
+ discard.
%% spawn_request/4
@@ -273,12 +288,7 @@ spawn_request(TPid, Pkt, Dict0, RecvData) ->
spawn_request(TPid, Pkt, Dict0, ?DEFAULT_SPAWN_OPTS, RecvData).
spawn_request(TPid, Pkt, Dict0, Opts, RecvData) ->
- try
- spawn_opt(fun() -> recv_request(TPid, Pkt, Dict0, RecvData) end, Opts)
- catch
- error: system_limit = E -> %% discard
- ?LOG(error, E)
- end.
+ spawn_opt(fun() -> recv_request(TPid, Pkt, Dict0, RecvData) end, Opts).
%% ---------------------------------------------------------------------------
%% recv_request/4
diff --git a/lib/diameter/src/base/diameter_watchdog.erl b/lib/diameter/src/base/diameter_watchdog.erl
index ea8b2fdb0e..2ba60a65fb 100644
--- a/lib/diameter/src/base/diameter_watchdog.erl
+++ b/lib/diameter/src/base/diameter_watchdog.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -125,8 +125,6 @@ i({Ack, T, Pid, {RecvData,
= Svc}}) ->
monitor(process, Pid),
wait(Ack, Pid),
- {_, Seed} = diameter_lib:seed(),
- random:seed(Seed),
putr(restart, {T, Opts, Svc, SvcOpts}), %% save seeing it in trace
putr(dwr, dwr(Caps)), %%
{_,_} = Mask = proplists:get_value(sequence, SvcOpts),
@@ -449,8 +447,14 @@ transition({'DOWN', _, process, TPid, _Reason} = D,
end;
%% Incoming message.
-transition({recv, TPid, Name, Pkt}, #watchdog{transport = TPid} = S) ->
- recv(Name, Pkt, S);
+transition({recv, TPid, Name, PktT}, #watchdog{transport = TPid} = S) ->
+ try
+ incoming(Name, PktT, S)
+ catch
+ #watchdog{dictionary = Dict0, receive_data = T} = NS ->
+ diameter_traffic:receive_message(TPid, PktT, Dict0, T),
+ NS
+ end;
%% Current watchdog has timed out.
transition({timeout, TRef, tw}, #watchdog{tref = TRef} = S) ->
@@ -559,7 +563,7 @@ tw(TwInit, Ms) ->
tw(T)
when is_integer(T), T >= 6000 ->
- T - 2000 + (random:uniform(4001) - 1); %% RFC3539 jitter of +/- 2 sec.
+ T - 2000 + (rand:uniform(4001) - 1); %% RFC3539 jitter of +/- 2 sec.
tw({M,F,A}) ->
apply(M,F,A).
@@ -578,22 +582,32 @@ send_watchdog(#watchdog{pending = false,
%% Don't count encode errors since we don't expect any on DWR/DWA.
+%% incoming/3
+
+incoming(Name, {Pkt, NPid}, S) ->
+ NS = recv(Name, Pkt, S),
+ NPid ! {diameter, discard},
+ NS;
+
+incoming(Name, Pkt, S) ->
+ recv(Name, Pkt, S).
+
%% recv/3
recv(Name, Pkt, S) ->
- try rcv(Name, S) of
+ try rcv(Name, Pkt, rcv(Name, S)) of
#watchdog{} = NS ->
- rcv(Name, Pkt, S),
- NS
+ throw(NS)
catch
- {?MODULE, throwaway, #watchdog{} = NS} ->
+ #watchdog{} = NS -> %% throwaway
NS
end.
%% rcv/3
rcv('DWR', Pkt, #watchdog{transport = TPid,
- dictionary = Dict0}) ->
+ dictionary = Dict0}
+ = S) ->
?LOG(recv, 'DWR'),
DPkt = diameter_codec:decode(Dict0, Pkt),
diameter_traffic:incr(recv, DPkt, TPid, Dict0),
@@ -610,32 +624,30 @@ rcv('DWR', Pkt, #watchdog{transport = TPid,
send(TPid, {send, #diameter_packet{header = H,
transport_data = T,
bin = Bin}}),
- ?LOG(send, 'DWA');
+ ?LOG(send, 'DWA'),
+ throw(S);
rcv('DWA', Pkt, #watchdog{transport = TPid,
- dictionary = Dict0}) ->
+ dictionary = Dict0}
+ = S) ->
?LOG(recv, 'DWA'),
diameter_traffic:incr(recv, Pkt, TPid, Dict0),
diameter_traffic:incr_rc(recv,
diameter_codec:decode(Dict0, Pkt),
TPid,
- Dict0);
+ Dict0),
+ throw(S);
-rcv(N, _, _)
+rcv(N, _, S)
when N == 'CER';
N == 'CEA';
N == 'DPR' ->
- false;
+ throw(S);
%% DPR can be sent explicitly with diameter:call/4. Only the
%% corresponding DPAs arrive here.
-rcv(_, Pkt, #watchdog{transport = TPid,
- dictionary = Dict0,
- receive_data = T}) ->
- diameter_traffic:receive_message(TPid, Pkt, Dict0, T).
-
-throwaway(S) ->
- throw({?MODULE, throwaway, S}).
+rcv(_, _, S)->
+ S.
%% rcv/2
%%
@@ -652,20 +664,20 @@ throwaway(S) ->
%% INITIAL Receive non-DWA Throwaway() INITIAL
rcv('DWA', #watchdog{status = initial} = S) ->
- throwaway(S#watchdog{pending = false});
+ throw(S#watchdog{pending = false});
rcv(_, #watchdog{status = initial} = S) ->
- throwaway(S);
+ throw(S);
%% DOWN Receive DWA Pending = FALSE
%% Throwaway() DOWN
%% DOWN Receive non-DWA Throwaway() DOWN
rcv('DWA', #watchdog{status = down} = S) ->
- throwaway(S#watchdog{pending = false});
+ throw(S#watchdog{pending = false});
rcv(_, #watchdog{status = down} = S) ->
- throwaway(S);
+ throw(S);
%% OKAY Receive DWA Pending = FALSE
%% SetWatchdog() OKAY
@@ -721,7 +733,7 @@ rcv('DWR', #watchdog{status = reopen} = S) ->
S; %% ensure DWA: the RFC isn't explicit about answering
rcv(_, #watchdog{status = reopen} = S) ->
- throwaway(S).
+ throw(S).
%% timeout/1
%%
diff --git a/lib/diameter/src/base/diameter_watchdog_sup.erl b/lib/diameter/src/base/diameter_watchdog_sup.erl
index 5d24e12f19..7b6669f381 100644
--- a/lib/diameter/src/base/diameter_watchdog_sup.erl
+++ b/lib/diameter/src/base/diameter_watchdog_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/compiler/diameter_dict_parser.yrl b/lib/diameter/src/compiler/diameter_dict_parser.yrl
index ef8d58d63b..4d2eb09831 100644
--- a/lib/diameter/src/compiler/diameter_dict_parser.yrl
+++ b/lib/diameter/src/compiler/diameter_dict_parser.yrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/compiler/diameter_dict_scanner.erl b/lib/diameter/src/compiler/diameter_dict_scanner.erl
index aeedc89d83..a9abb67640 100644
--- a/lib/diameter/src/compiler/diameter_dict_scanner.erl
+++ b/lib/diameter/src/compiler/diameter_dict_scanner.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/compiler/diameter_dict_util.erl b/lib/diameter/src/compiler/diameter_dict_util.erl
index 9525393128..f9f2b02e94 100644
--- a/lib/diameter/src/compiler/diameter_dict_util.erl
+++ b/lib/diameter/src/compiler/diameter_dict_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/compiler/diameter_exprecs.erl b/lib/diameter/src/compiler/diameter_exprecs.erl
index 2a04917995..9a0cb6baf2 100644
--- a/lib/diameter/src/compiler/diameter_exprecs.erl
+++ b/lib/diameter/src/compiler/diameter_exprecs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/compiler/diameter_make.erl b/lib/diameter/src/compiler/diameter_make.erl
index d9709029ae..eae40dbafd 100644
--- a/lib/diameter/src/compiler/diameter_make.erl
+++ b/lib/diameter/src/compiler/diameter_make.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/compiler/diameter_vsn.hrl b/lib/diameter/src/compiler/diameter_vsn.hrl
index 2efac98bff..5201e6b84d 100644
--- a/lib/diameter/src/compiler/diameter_vsn.hrl
+++ b/lib/diameter/src/compiler/diameter_vsn.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/depend.sed b/lib/diameter/src/depend.sed
index 5adf7f05d5..e385d7db4a 100644
--- a/lib/diameter/src/depend.sed
+++ b/lib/diameter/src/depend.sed
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2011. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/diameter.app.src b/lib/diameter/src/diameter.app.src
index 49bfd803e7..d380ebbd92 100644
--- a/lib/diameter/src/diameter.app.src
+++ b/lib/diameter/src/diameter.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/diameter.appup.src b/lib/diameter/src/diameter.appup.src
index a3e21db012..618d5a7f10 100644
--- a/lib/diameter/src/diameter.appup.src
+++ b/lib/diameter/src/diameter.appup.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,10 +47,9 @@
{"1.9.2.2", [{restart_application, diameter}]}, %% 17.5.6.7
{"1.9.2.3", [{restart_application, diameter}]}, %% 17.5.6.8
{"1.10", [{restart_application, diameter}]}, %% 18.0
- {"1.11", [{load_module, diameter_traffic}, %% 18.1
- {update, diameter_service, {advanced, []}}]},
- {"1.11.1", [{load_module, diameter_traffic}, %% 18.2
- {update, diameter_service, {advanced, []}}]}
+ {"1.11", [{restart_application, diameter}]}, %% 18.1
+ {"1.11.1", [{restart_application, diameter}]}, %% 18.2
+ {"1.11.2", [{restart_application, diameter}]} %% 18.3
],
[
{"0.9", [{restart_application, diameter}]},
@@ -80,6 +79,7 @@
{"1.9.2.3", [{restart_application, diameter}]},
{"1.10", [{restart_application, diameter}]},
{"1.11", [{restart_application, diameter}]},
- {"1.11.1", [{restart_application, diameter}]}
+ {"1.11.1", [{restart_application, diameter}]},
+ {"1.11.2", [{restart_application, diameter}]}
]
}.
diff --git a/lib/diameter/src/dict/acct_rfc6733.dia b/lib/diameter/src/dict/acct_rfc6733.dia
index 4eb326ce88..7690958932 100644
--- a/lib/diameter/src/dict/acct_rfc6733.dia
+++ b/lib/diameter/src/dict/acct_rfc6733.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2013. All Rights Reserved.
+;; Copyright Ericsson AB 2013-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/dict/base_accounting.dia b/lib/diameter/src/dict/base_accounting.dia
index 839add8764..b719bcd128 100644
--- a/lib/diameter/src/dict/base_accounting.dia
+++ b/lib/diameter/src/dict/base_accounting.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2011. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/dict/base_rfc3588.dia b/lib/diameter/src/dict/base_rfc3588.dia
index f7316208a6..ef4c8388c3 100644
--- a/lib/diameter/src/dict/base_rfc3588.dia
+++ b/lib/diameter/src/dict/base_rfc3588.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2013. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/dict/base_rfc6733.dia b/lib/diameter/src/dict/base_rfc6733.dia
index d92760711c..a120b4eece 100644
--- a/lib/diameter/src/dict/base_rfc6733.dia
+++ b/lib/diameter/src/dict/base_rfc6733.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2013. All Rights Reserved.
+;; Copyright Ericsson AB 2013-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/dict/capup_rfc6737.dia b/lib/diameter/src/dict/capup_rfc6737.dia
index 396c7de9ac..a473cc9d22 100644
--- a/lib/diameter/src/dict/capup_rfc6737.dia
+++ b/lib/diameter/src/dict/capup_rfc6737.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2013. All Rights Reserved.
+;; Copyright Ericsson AB 2013-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/dict/relay.dia b/lib/diameter/src/dict/relay.dia
index 23772fedf8..c7320cc737 100644
--- a/lib/diameter/src/dict/relay.dia
+++ b/lib/diameter/src/dict/relay.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2011. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/info/diameter_dbg.erl b/lib/diameter/src/info/diameter_dbg.erl
index 4f5c91d24f..e1d2086871 100644
--- a/lib/diameter/src/info/diameter_dbg.erl
+++ b/lib/diameter/src/info/diameter_dbg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/modules.mk b/lib/diameter/src/modules.mk
index 3b223ea391..4e4ce60ddf 100644
--- a/lib/diameter/src/modules.mk
+++ b/lib/diameter/src/modules.mk
@@ -1,7 +1,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2015. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -37,6 +37,7 @@ RT_MODULES = \
base/diameter_callback \
base/diameter_capx \
base/diameter_config \
+ base/diameter_config_sup \
base/diameter_codec \
base/diameter_dict \
base/diameter_lib \
diff --git a/lib/diameter/src/transport/diameter_etcp.erl b/lib/diameter/src/transport/diameter_etcp.erl
index 9db198ff86..10a014754f 100644
--- a/lib/diameter/src/transport/diameter_etcp.erl
+++ b/lib/diameter/src/transport/diameter_etcp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/transport/diameter_etcp_sup.erl b/lib/diameter/src/transport/diameter_etcp_sup.erl
index 48794d4fe1..b230397b59 100644
--- a/lib/diameter/src/transport/diameter_etcp_sup.erl
+++ b/lib/diameter/src/transport/diameter_etcp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/transport/diameter_sctp.erl b/lib/diameter/src/transport/diameter_sctp.erl
index 678dc9b5d6..4a005b853d 100644
--- a/lib/diameter/src/transport/diameter_sctp.erl
+++ b/lib/diameter/src/transport/diameter_sctp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -61,10 +61,6 @@
%% Remote addresses to accept connections from.
-define(DEFAULT_ACCEPT, []). %% any
-%% How long a listener with no associations lives before offing
-%% itself.
--define(LISTENER_TIMEOUT, 30000).
-
%% How long to wait for a transport process to attach after
%% association establishment.
-define(ACCEPT_TIMEOUT, 5000).
@@ -84,16 +80,18 @@
%% Accepting/connecting transport process state.
-record(transport,
- {parent :: pid(),
+ {parent :: pid() | undefined,
mode :: {accept, pid()}
| accept
| {connect, {[inet:ip_address()], uint(), list()}}
%% {RAs, RP, Errors}
| connect,
- socket :: gen_sctp:sctp_socket(),
+ socket :: gen_sctp:sctp_socket() | undefined,
assoc_id :: gen_sctp:assoc_id(), %% association identifier
- peer :: {[inet:ip_address()], uint()}, %% {RAs, RP}
- streams :: {uint(), uint()}, %% {InStream, OutStream} counts
+ peer :: {[inet:ip_address()], uint()} %% {RAs, RP}
+ | undefined,
+ streams :: {uint(), uint()} %% {InStream, OutStream} counts
+ | undefined,
os = 0 :: uint()}). %% next output stream
%% Listener process state.
@@ -102,7 +100,6 @@
socket :: gen_sctp:sctp_socket(),
count = 0 :: uint(), %% attached transport processes
pending = {0, queue:new()},
- tref :: reference(),
accept :: [match()]}).
%% Field pending implements two queues: the first of transport-to-be
%% processes to which an association has been assigned but for which
@@ -214,14 +211,15 @@ init(T) ->
%% A process owning a listening socket.
i({listen, Ref, {Opts, Addrs}}) ->
+ [_] = diameter_config:subscribe(Ref, transport), %% assert existence
{[Matches], Rest} = proplists:split(Opts, [accept]),
{LAs, Sock} = AS = open(Addrs, Rest, ?DEFAULT_PORT),
ok = gen_sctp:listen(Sock, true),
true = diameter_reg:add_new({?MODULE, listener, {Ref, AS}}),
proc_lib:init_ack({ok, self(), LAs}),
- start_timer(#listener{ref = Ref,
- socket = Sock,
- accept = [[M] || {accept, M} <- Matches]});
+ #listener{ref = Ref,
+ socket = Sock,
+ accept = [[M] || {accept, M} <- Matches]};
%% A connecting transport.
i({connect, Pid, Opts, Addrs, Ref}) ->
@@ -429,13 +427,6 @@ putr(Key, Val) ->
getr(Key) ->
get({?MODULE, Key}).
-%% start_timer/1
-
-start_timer(#listener{count = 0} = S) ->
- S#listener{tref = erlang:start_timer(?LISTENER_TIMEOUT, self(), close)};
-start_timer(S) ->
- S.
-
%% l/2
%%
%% Transition listener state.
@@ -453,12 +444,10 @@ l({sctp, Sock, _RA, _RP, Data} = T, #listener{socket = Sock,
l({'DOWN', _MRef, process, TPid, _}, #listener{pending = {_,Q}} = S) ->
down(queue:member(TPid, Q), TPid, S);
-%% Timeout after the last accepting process has died.
-l({timeout, TRef, close = T}, #listener{tref = TRef,
- count = 0}) ->
- x(T);
-l({timeout, _, close}, #listener{} = S) ->
- S.
+%% Transport has been removed.
+l({transport, remove, _} = T, #listener{socket = Sock}) ->
+ gen_sctp:close(Sock),
+ x(T).
%% down/3
%%
@@ -470,15 +459,15 @@ down(true, TPid, #listener{pending = {N,Q},
= S) ->
NQ = queue:filter(fun(P) -> P /= TPid end, Q),
if N < 0 -> %% awaiting an association ...
- start_timer(S#listener{count = K-1,
- pending = {N+1, NQ}});
+ S#listener{count = K-1,
+ pending = {N+1, NQ}};
true -> %% ... or one has been assigned
S#listener{pending = {N-1, NQ}}
end;
%% ... or one that's already attached.
down(false, _TPid, #listener{count = K} = S) ->
- start_timer(S#listener{count = K-1}).
+ S#listener{count = K-1}.
%% t/2
%%
diff --git a/lib/diameter/src/transport/diameter_sctp_sup.erl b/lib/diameter/src/transport/diameter_sctp_sup.erl
index 48df975ae9..36050aaf28 100644
--- a/lib/diameter/src/transport/diameter_sctp_sup.erl
+++ b/lib/diameter/src/transport/diameter_sctp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/transport/diameter_tcp.erl b/lib/diameter/src/transport/diameter_tcp.erl
index 005b2442c0..546c2cfa5e 100644
--- a/lib/diameter/src/transport/diameter_tcp.erl
+++ b/lib/diameter/src/transport/diameter_tcp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
%%
-module(diameter_tcp).
+-dialyzer({no_fail_call, throttle/2}).
-behaviour(gen_server).
@@ -56,7 +57,6 @@
-define(ERROR(T), erlang:error({T, ?MODULE, ?LINE})).
-define(DEFAULT_PORT, 3868). %% RFC 3588, ch 2.1
--define(LISTENER_TIMEOUT, 30000).
-define(DEFAULT_FRAGMENT_TIMEOUT, 1000).
-define(IS_UINT32(N), (is_integer(N) andalso 0 =< N andalso 0 == N bsr 32)).
@@ -72,8 +72,10 @@
%% Listener process state.
-record(listener, {socket :: inet:socket(),
- count = 1 :: non_neg_integer(),
- tref :: reference()}).
+ count = 1 :: non_neg_integer()}). %% accepting processes
+%% The count of accepting processes was previously used to terminate
+%% the listening process, but diameter_reg:subscribe/2 is now used for
+%% this. Leave the the count for trace purposes.
%% Monitor process state.
-record(monitor,
@@ -102,7 +104,8 @@
| gen_tcp:listen_option().
-type option() :: {port, non_neg_integer()}
- | {fragment_timer, 0..16#FFFFFFFF}.
+ | {fragment_timer, 0..16#FFFFFFFF}
+ | {throttle_cb, diameter:evaluable()}.
%% Accepting/connecting transport process state.
-record(transport,
@@ -110,10 +113,13 @@
parent :: pid(), %% of process that started us
module :: module(), %% gen_tcp-like module
frag = <<>> :: frag(), %% message fragment
- ssl :: boolean() | [term()], %% ssl options
+ ssl :: [term()] | boolean(), %% ssl options, ssl or not
timeout :: infinity | 0..16#FFFFFFFF, %% fragment timeout
tref = false :: false | reference(), %% fragment timer reference
- flush = false :: boolean()}). %% flush fragment at timeout?
+ flush = false :: boolean(), %% flush fragment at timeout?
+ throttle_cb :: false | diameter:evaluable(), %% ask to receive
+ throttled :: boolean() | binary()}). %% stopped receiving?
+
%% The usual transport using gen_tcp can be replaced by anything
%% sufficiently gen_tcp-like by passing a 'module' option as the first
%% (for simplicity) transport option. The transport_module diameter_etcp
@@ -198,22 +204,27 @@ i({T, Ref, Mod, Pid, Opts, Addrs})
%% that does nothing but kill us with the parent until call
%% returns.
{ok, MPid} = diameter_tcp_sup:start_child(#monitor{parent = Pid}),
- {SslOpts, Rest0} = ssl(Opts),
- {OwnOpts, Rest} = own(Rest0),
+ {[SO|TO], Rest} = proplists:split(Opts, [ssl_options,
+ fragment_timer,
+ throttle_cb]),
+ SslOpts = ssl_opts(SO),
+ OwnOpts = lists:append(TO),
Tmo = proplists:get_value(fragment_timer,
OwnOpts,
?DEFAULT_FRAGMENT_TIMEOUT),
?IS_TIMEOUT(Tmo) orelse ?ERROR({fragment_timer, Tmo}),
+ Throttle = proplists:get_value(throttle_cb, OwnOpts, false),
Sock = init(T, Ref, Mod, Pid, SslOpts, Rest, Addrs),
MPid ! {stop, self()}, %% tell the monitor to die
M = if SslOpts -> ssl; true -> Mod end,
- setopts(M, Sock),
putr(?REF_KEY, Ref),
- #transport{parent = Pid,
- module = M,
- socket = Sock,
- ssl = SslOpts,
- timeout = Tmo};
+ throttle(#transport{parent = Pid,
+ module = M,
+ socket = Sock,
+ ssl = SslOpts,
+ timeout = Tmo,
+ throttle_cb = Throttle,
+ throttled = false /= Throttle});
%% Put the reference in the process dictionary since we now use it
%% advertise the ssl socket after TLS upgrade.
@@ -230,6 +241,7 @@ i(#monitor{parent = Pid, transport = TPid} = S) ->
%% gen_tcp seems to so. Links should be left to supervisors.
i({listen, LRef, APid, {Mod, Opts, Addrs}}) ->
+ [_] = diameter_config:subscribe(LRef, transport), %% assert existence
{[LA, LP], Rest} = proplists:split(Opts, [ip, port]),
LAddrOpt = get_addr(LA, Addrs),
LPort = get_port(LP),
@@ -238,7 +250,7 @@ i({listen, LRef, APid, {Mod, Opts, Addrs}}) ->
true = diameter_reg:add_new({?MODULE, listener, {LRef, {LAddr, LSock}}}),
proc_lib:init_ack({ok, self(), {LAddr, LSock}}),
monitor(process, APid),
- start_timer(#listener{socket = LSock}).
+ #listener{socket = LSock}.
laddr([], Mod, Sock) ->
{ok, {Addr, _Port}} = sockname(Mod, Sock),
@@ -246,14 +258,6 @@ laddr([], Mod, Sock) ->
laddr([{ip, Addr}], _, _) ->
Addr.
-own(Opts) ->
- {[Own], Rest} = proplists:split(Opts, [fragment_timer]),
- {Own, Rest}.
-
-ssl(Opts) ->
- {[SslOpts], Rest} = proplists:split(Opts, [ssl_options]),
- {ssl_opts(SslOpts), Rest}.
-
ssl_opts([]) ->
false;
ssl_opts([{ssl_options, true}]) ->
@@ -261,8 +265,8 @@ ssl_opts([{ssl_options, true}]) ->
ssl_opts([{ssl_options, Opts}])
when is_list(Opts) ->
Opts;
-ssl_opts(L) ->
- ?ERROR({ssl_options, L}).
+ssl_opts(T) ->
+ ?ERROR({ssl_options, T}).
%% init/7
@@ -393,7 +397,7 @@ get_port(Ps) ->
gen_opts(LAddrOpt, Opts) ->
{L,_} = proplists:split(Opts, [binary, packet, active]),
[[],[],[]] == L orelse ?ERROR({reserved_options, Opts}),
- [binary, {packet, 0}, {active, once}] ++ LAddrOpt ++ Opts.
+ [binary, {packet, 0}, {active, false}] ++ LAddrOpt ++ Opts.
%% ---------------------------------------------------------------------------
%% # ports/1
@@ -482,13 +486,6 @@ putr(Key, Val) ->
getr(Key) ->
get({?MODULE, Key}).
-%% start_timer/1
-
-start_timer(#listener{count = 0} = S) ->
- S#listener{tref = erlang:start_timer(?LISTENER_TIMEOUT, self(), close)};
-start_timer(S) ->
- S.
-
%% m/2
%%
%% Transition monitor state.
@@ -510,21 +507,19 @@ m({'DOWN', _, process, Pid, _}, #monitor{parent = Pid,
%%
%% Transition listener state.
-%% Another accept transport is attaching.
+%% An accepting transport is attaching.
l({accept, TPid}, #listener{count = N} = S) ->
monitor(process, TPid),
S#listener{count = N+1};
%% Accepting process has died.
l({'DOWN', _, process, _, _}, #listener{count = N} = S) ->
- start_timer(S#listener{count = N-1});
+ S#listener{count = N-1};
-%% Timeout after the last accepting process has died.
-l({timeout, TRef, close = T}, #listener{tref = TRef,
- count = 0}) ->
- x(T);
-l({timeout, _, close}, #listener{} = S) ->
- S.
+%% Transport has been removed.
+l({transport, remove, _} = T, #listener{socket = Sock}) ->
+ gen_tcp:close(Sock),
+ x(T).
%% t/2
%%
@@ -536,53 +531,37 @@ t(T,S) ->
S;
#transport{} = NS ->
NS;
- {stop, Reason} ->
- x(Reason);
stop ->
x(T)
end.
%% transition/2
-%% Initial incoming message when we might need to upgrade to TLS:
-%% don't request another message until we know.
-
-transition({tcp, Sock, Bin}, #transport{socket = Sock,
- parent = Pid,
- frag = Head,
- module = M,
- ssl = Opts}
- = S)
- when is_list(Opts) ->
- case rcv(Head, Bin) of
- {Msg, B} when is_binary(Msg) ->
- diameter_peer:recv(Pid, Msg),
- S#transport{frag = B};
- Frag ->
- setopts(M, Sock),
- start_fragment_timer(S#transport{frag = Frag})
- end;
-
%% Incoming message.
transition({P, Sock, Bin}, #transport{socket = Sock,
- module = M,
- ssl = B}
+ ssl = B,
+ throttled = T}
= S)
- when P == tcp, not B;
- P == ssl, B ->
- setopts(M, Sock),
- start_fragment_timer(recv(Bin, S));
+ when P == ssl, true == B;
+ P == tcp ->
+ false = T, %% assert
+ recv(Bin, S);
+
+%% Make a new throttling callback after a timeout.
+transition(throttle, #transport{throttled = false}) ->
+ ok;
+transition(throttle, S) ->
+ throttle(S);
%% Capabilties exchange has decided on whether or not to run over TLS.
transition({diameter, {tls, Ref, Type, B}}, #transport{parent = Pid}
= S) ->
- #transport{socket = Sock,
- module = M}
+ true = is_boolean(B), %% assert
+ #transport{}
= NS
= tls_handshake(Type, B, S),
Pid ! {diameter, {tls, Ref}},
- setopts(M, Sock),
- start_fragment_timer(NS#transport{ssl = B});
+ throttle(NS#transport{ssl = B});
transition({C, Sock}, #transport{socket = Sock,
ssl = B})
@@ -598,14 +577,8 @@ transition({E, Sock, _Reason} = T, #transport{socket = Sock,
?ERROR({T,S});
%% Outgoing message.
-transition({diameter, {send, Bin}}, #transport{socket = Sock,
- module = M}) ->
- case send(M, Sock, Bin) of
- ok ->
- ok;
- {error, Reason} ->
- {stop, {send, Reason}}
- end;
+transition({diameter, {send, Bin}}, S) ->
+ send(Bin, S);
%% Request to close the transport connection.
transition({diameter, {close, Pid}}, #transport{parent = Pid,
@@ -672,16 +645,25 @@ tls(accept, Sock, Opts) ->
%% Reassemble fragmented messages and extract multiple message sent
%% using Nagle.
-recv(Bin, #transport{parent = Pid, frag = Head} = S) ->
+%% Receive packets until a full message is received,
+recv(Bin, #transport{frag = Head, throttled = false} = S) ->
case rcv(Head, Bin) of
- {Msg, B} when is_binary(Msg) ->
- diameter_peer:recv(Pid, Msg),
- recv(B, S#transport{frag = <<>>});
+ {Msg, B} ->
+ throttle(S#transport{frag = B, throttled = Msg});
Frag ->
- S#transport{frag = Frag,
- flush = false}
+ setopts(S),
+ start_fragment_timer(S#transport{frag = Frag,
+ flush = false})
end.
+%% recv/1
+
+recv(#transport{throttled = false} = S) ->
+ recv(<<>>, S);
+
+recv(#transport{} = S) ->
+ S.
+
%% rcv/2
%% No previous fragment.
@@ -765,8 +747,10 @@ bin(Bin)
%% since all messages with length problems are discarded this should
%% also eventually lead to watchdog failover.
-%% No fragment to flush.
-flush(#transport{frag = <<>>} = S) ->
+%% No fragment to flush or not receiving messages.
+flush(#transport{frag = Frag, throttled = B} = S)
+ when Frag == <<>>;
+ B /= false ->
S;
%% Messages have been received since last timer expiry.
@@ -807,6 +791,17 @@ accept(Mod, LSock) ->
connect(Mod, Host, Port, Opts) ->
Mod:connect(Host, Port, Opts).
+%% send/2
+
+send(Bin, #transport{socket = Sock,
+ module = M}) ->
+ case send(M, Sock, Bin) of
+ ok ->
+ ok;
+ {error, Reason} ->
+ x({send, Reason})
+ end.
+
%% send/3
send(gen_tcp, Sock, Bin) ->
@@ -825,6 +820,11 @@ setopts(ssl, Sock, Opts) ->
setopts(M, Sock, Opts) ->
M:setopts(Sock, Opts).
+%% setopts/1
+
+setopts(#transport{socket = Sock, module = M}) ->
+ setopts(M, Sock).
+
%% setopts/2
setopts(M, Sock) ->
@@ -833,6 +833,110 @@ setopts(M, Sock) ->
X -> x({setopts, M, Sock, X}) %% possibly on peer disconnect
end.
+%% throttle/1
+
+%% Still collecting packets for a complete message: keep receiving.
+throttle(#transport{throttled = false} = S) ->
+ recv(S);
+
+%% Decide whether to receive another, or whether to accept a message
+%% that's been received.
+throttle(#transport{throttle_cb = F, throttled = T} = S) ->
+ Res = cb(F, T),
+
+ try throttle(Res, S) of
+ #transport{ssl = SB} = NS when is_boolean(SB) ->
+ throttle(defrag(NS));
+ #transport{throttled = Msg} = NS when is_binary(Msg) ->
+ %% Initial incoming message when we might need to upgrade
+ %% to TLS: wait for reception of a tls tuple.
+ defrag(NS)
+ catch
+ #transport{} = NS ->
+ recv(NS)
+ end.
+
+%% cb/2
+
+cb(false, _) ->
+ ok;
+
+cb(F, B) ->
+ diameter_lib:eval([F, true /= B andalso B]).
+
+%% throttle/2
+
+%% Callback says to receive another message.
+throttle(ok, #transport{throttled = true} = S) ->
+ throw(S#transport{throttled = false});
+
+%% Callback says to accept a received message.
+throttle(ok, #transport{parent = Pid, throttled = Msg} = S)
+ when is_binary(Msg) ->
+ diameter_peer:recv(Pid, Msg),
+ S;
+
+throttle({ok = T, F}, S) ->
+ throttle(T, S#transport{throttle_cb = F});
+
+%% Callback says to accept a received message and acknowledged the
+%% returned pid with a {request, Pid} message if a request pid is
+%% spawned, a discard message otherwise. The latter does not mean that
+%% the message was necessarily discarded: it could have been an
+%% answer.
+throttle(NPid, #transport{parent = Pid, throttled = Msg} = S)
+ when is_pid(NPid), is_binary(Msg) ->
+ diameter_peer:recv(Pid, {Msg, NPid}),
+ S;
+
+throttle({NPid, F}, #transport{throttled = Msg} = S)
+ when is_pid(NPid), is_binary(Msg) ->
+ throttle(NPid, S#transport{throttle_cb = F});
+
+%% Callback to accept a received message says to discard it.
+throttle(discard, #transport{throttled = Msg} = S)
+ when is_binary(Msg) ->
+ S;
+
+throttle({discard = T, F}, #transport{throttled = Msg} = S)
+ when is_binary(Msg) ->
+ throttle(T, S#transport{throttle_cb = F});
+
+%% Callback to accept a received message says to answer it with the
+%% supplied binary.
+throttle(Bin, #transport{throttled = Msg} = S)
+ when is_binary(Bin), is_binary(Msg) ->
+ send(Bin, S),
+ S;
+
+throttle({Bin, F}, #transport{throttled = Msg} = S)
+ when is_binary(Bin), is_binary(Msg) ->
+ throttle(Bin, S#transport{throttle_cb = F});
+
+%% Callback says to ask again in the specified number of milliseconds.
+throttle({timeout, Tmo}, S) ->
+ erlang:send_after(Tmo, self(), throttle),
+ throw(S);
+
+throttle({timeout = T, Tmo, F}, S) ->
+ throttle({T, Tmo}, S#transport{throttle_cb = F});
+
+throttle(T, #transport{throttle_cb = F}) ->
+ ?ERROR({invalid_return, T, F}).
+
+%% defrag/1
+%%
+%% Try to extract another message from packets already read before
+%% another throttling callback.
+
+defrag(#transport{frag = Head} = S) ->
+ case rcv(Head, <<>>) of
+ {Msg, B} ->
+ S#transport{throttled = Msg, frag = B};
+ _ ->
+ S#transport{throttled = true}
+ end.
+
%% portnr/2
portnr(gen_tcp, Sock) ->
diff --git a/lib/diameter/src/transport/diameter_tcp_sup.erl b/lib/diameter/src/transport/diameter_tcp_sup.erl
index a7bdb49968..6cf758748a 100644
--- a/lib/diameter/src/transport/diameter_tcp_sup.erl
+++ b/lib/diameter/src/transport/diameter_tcp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/src/transport/diameter_transport.erl b/lib/diameter/src/transport/diameter_transport.erl
index 5a7c59b4dc..3ca4d97f50 100644
--- a/lib/diameter/src/transport/diameter_transport.erl
+++ b/lib/diameter/src/transport/diameter_transport.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/subdirs.mk b/lib/diameter/subdirs.mk
index 1246d4fb91..6e9581aa08 100644
--- a/lib/diameter/subdirs.mk
+++ b/lib/diameter/subdirs.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2011. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/Makefile b/lib/diameter/test/Makefile
index f9e0a61215..c574d70e45 100644
--- a/lib/diameter/test/Makefile
+++ b/lib/diameter/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2013. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/coverspec.sed b/lib/diameter/test/coverspec.sed
index 3f573e29a2..ef77877f3d 100644
--- a/lib/diameter/test/coverspec.sed
+++ b/lib/diameter/test/coverspec.sed
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2013. All Rights Reserved.
+# Copyright Ericsson AB 2013-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/depend.sed b/lib/diameter/test/depend.sed
index 58680a0c1b..d84a586d8a 100644
--- a/lib/diameter/test/depend.sed
+++ b/lib/diameter/test/depend.sed
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2013. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_3xxx_SUITE.erl b/lib/diameter/test/diameter_3xxx_SUITE.erl
index 856244a691..0f060c4ba7 100644
--- a/lib/diameter/test/diameter_3xxx_SUITE.erl
+++ b/lib/diameter/test/diameter_3xxx_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_codec_SUITE_data/avps.dia b/lib/diameter/test/diameter_codec_SUITE_data/avps.dia
index d8fa7ac02e..bae2edca56 100644
--- a/lib/diameter/test/diameter_codec_SUITE_data/avps.dia
+++ b/lib/diameter/test/diameter_codec_SUITE_data/avps.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2011. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_codec_SUITE_data/diameter_test_unknown.erl b/lib/diameter/test/diameter_codec_SUITE_data/diameter_test_unknown.erl
index 248fb66f40..50cc6e7eef 100644
--- a/lib/diameter/test/diameter_codec_SUITE_data/diameter_test_unknown.erl
+++ b/lib/diameter/test/diameter_codec_SUITE_data/diameter_test_unknown.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_codec_SUITE_data/recv.dia b/lib/diameter/test/diameter_codec_SUITE_data/recv.dia
index 7302f8cec2..2c5cf5de54 100644
--- a/lib/diameter/test/diameter_codec_SUITE_data/recv.dia
+++ b/lib/diameter/test/diameter_codec_SUITE_data/recv.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2011. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_codec_SUITE_data/send.dia b/lib/diameter/test/diameter_codec_SUITE_data/send.dia
index 2b6478e4b6..3f992bb743 100644
--- a/lib/diameter/test/diameter_codec_SUITE_data/send.dia
+++ b/lib/diameter/test/diameter_codec_SUITE_data/send.dia
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2011. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_codec_test.erl b/lib/diameter/test/diameter_codec_test.erl
index 78308856ac..37c41a1761 100644
--- a/lib/diameter/test/diameter_codec_test.erl
+++ b/lib/diameter/test/diameter_codec_test.erl
@@ -230,13 +230,12 @@ v(Max, Ord, E)
when Ord =< Max ->
diameter_enum:to_list(E);
v(Max, Ord, E) ->
- random:seed(diameter_util:seed()),
v(Max, Ord, E, []).
v(0, _, _, Acc) ->
Acc;
v(N, Ord, E, Acc) ->
- v(N-1, Ord, E, [E(random:uniform(Ord)) | Acc]).
+ v(N-1, Ord, E, [E(rand:uniform(Ord)) | Acc]).
%% arity/3
@@ -518,15 +517,7 @@ random(M) ->
random(0,M).
random(Mn,Mx) ->
- seed(get({?MODULE, seed})),
- Mn + random:uniform(Mx - Mn + 1) - 1.
-
-seed(undefined) ->
- put({?MODULE, seed}, true),
- random:seed(diameter_util:seed());
-
-seed(true) ->
- ok.
+ Mn + rand:uniform(Mx - Mn + 1) - 1.
%% run/1
%%
diff --git a/lib/diameter/test/diameter_compiler_SUITE.erl b/lib/diameter/test/diameter_compiler_SUITE.erl
index 8807f19f09..7a9ac65ae3 100644
--- a/lib/diameter/test/diameter_compiler_SUITE.erl
+++ b/lib/diameter/test/diameter_compiler_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_ct.hrl b/lib/diameter/test/diameter_ct.hrl
index 0b5a999de6..fdf8782456 100644
--- a/lib/diameter/test/diameter_ct.hrl
+++ b/lib/diameter/test/diameter_ct.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_dict_SUITE.erl b/lib/diameter/test/diameter_dict_SUITE.erl
index f1d69be33e..4c1349f4eb 100644
--- a/lib/diameter/test/diameter_dict_SUITE.erl
+++ b/lib/diameter/test/diameter_dict_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_distribution_SUITE.erl b/lib/diameter/test/diameter_distribution_SUITE.erl
index d32d5bbd49..5146f68ff1 100644
--- a/lib/diameter/test/diameter_distribution_SUITE.erl
+++ b/lib/diameter/test/diameter_distribution_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_enum.erl b/lib/diameter/test/diameter_enum.erl
index ab1b76e5fe..3f1fa7563f 100644
--- a/lib/diameter/test/diameter_enum.erl
+++ b/lib/diameter/test/diameter_enum.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_event_SUITE.erl b/lib/diameter/test/diameter_event_SUITE.erl
index b450c9ea59..57d3427037 100644
--- a/lib/diameter/test/diameter_event_SUITE.erl
+++ b/lib/diameter/test/diameter_event_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-15. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_failover_SUITE.erl b/lib/diameter/test/diameter_failover_SUITE.erl
index 1f345423cf..8a3b3e8413 100644
--- a/lib/diameter/test/diameter_failover_SUITE.erl
+++ b/lib/diameter/test/diameter_failover_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_gen_sctp_SUITE.erl b/lib/diameter/test/diameter_gen_sctp_SUITE.erl
index cbd7fc8ec5..79db39ca45 100644
--- a/lib/diameter/test/diameter_gen_sctp_SUITE.erl
+++ b/lib/diameter/test/diameter_gen_sctp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -365,8 +365,8 @@ open(Opts) ->
assoc(Sock) ->
receive
- ?SCTP(Sock, {[], #sctp_assoc_change{state = S,
- assoc_id = Id}}) ->
+ ?SCTP(Sock, {_, #sctp_assoc_change{state = S,
+ assoc_id = Id}}) ->
comm_up = S, %% assert
Id
end.
diff --git a/lib/diameter/test/diameter_length_SUITE.erl b/lib/diameter/test/diameter_length_SUITE.erl
index 0f98b08585..daaaae6e00 100644
--- a/lib/diameter/test/diameter_length_SUITE.erl
+++ b/lib/diameter/test/diameter_length_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_reg_SUITE.erl b/lib/diameter/test/diameter_reg_SUITE.erl
index 2945235ecc..e2a1ca00c3 100644
--- a/lib/diameter/test/diameter_reg_SUITE.erl
+++ b/lib/diameter/test/diameter_reg_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -33,8 +33,7 @@
%% testcases
-export([add/1,
add_new/1,
- del/1,
- repl/1,
+ remove/1,
terms/1,
pids/1]).
@@ -56,8 +55,7 @@ groups() ->
tc() ->
[add,
add_new,
- del,
- repl,
+ remove,
terms,
pids].
@@ -82,20 +80,11 @@ add_new(_) ->
true = ?reg:add_new(Ref),
false = ?reg:add_new(Ref).
-del(_) ->
+remove(_) ->
Ref = make_ref(),
true = ?reg:add_new(Ref),
true = ?reg:add_new({Ref}),
- true = ?reg:del({Ref}),
- [{Ref, Pid}] = ?reg:match(Ref),
- Pid = self().
-
-repl(_) ->
- Ref = make_ref(),
- true = ?reg:add_new({Ref}),
- true = ?reg:repl({Ref}, Ref),
- false = ?reg:add_new(Ref),
- false = ?reg:repl({Ref}, Ref),
+ true = ?reg:remove({Ref}),
[{Ref, Pid}] = ?reg:match(Ref),
Pid = self().
diff --git a/lib/diameter/test/diameter_relay_SUITE.erl b/lib/diameter/test/diameter_relay_SUITE.erl
index f766f54a80..b5e520e642 100644
--- a/lib/diameter/test/diameter_relay_SUITE.erl
+++ b/lib/diameter/test/diameter_relay_SUITE.erl
@@ -171,8 +171,9 @@ connect(Config) ->
Conns)).
disconnect(Config) ->
- lists:foreach(fun({{CN,CR},{SN,SR}}) -> ?util:disconnect(CN,CR,SN,SR) end,
- ?util:read_priv(Config, "cfg")).
+ [] = [{T,C} || C <- ?util:read_priv(Config, "cfg"),
+ T <- [break(C)],
+ T /= ok].
stop_services(_Config) ->
[] = [{H,T} || H <- ?SERVICES,
@@ -184,6 +185,13 @@ stop(_Config) ->
%% ----------------------------------------
+break({{CN,CR},{SN,SR}}) ->
+ try
+ ?util:disconnect(CN,CR,SN,SR)
+ after
+ diameter:remove_transport(SN, SR)
+ end.
+
server(Name, Dict) ->
ok = diameter:start_service(Name, ?SERVICE(Name, Dict)),
{Name, ?util:listen(Name, tcp)}.
diff --git a/lib/diameter/test/diameter_sync_SUITE.erl b/lib/diameter/test/diameter_sync_SUITE.erl
index f913389f65..2785bd92d6 100644
--- a/lib/diameter/test/diameter_sync_SUITE.erl
+++ b/lib/diameter/test/diameter_sync_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_tls_SUITE.erl b/lib/diameter/test/diameter_tls_SUITE.erl
index 5cadbbc17e..1ad897dcd2 100644
--- a/lib/diameter/test/diameter_tls_SUITE.erl
+++ b/lib/diameter/test/diameter_tls_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -327,10 +327,10 @@ make_cert(Dir, Keyfile, Certfile) ->
"-subj /C=SE/ST=./L=Stockholm/CN=www.erlang.org"]),
%% Hope for the best and only check that files are written.
- [{_, _, {ok,_}},{_, _, {ok,_}}]
- = [{P,O,T} || {P,C} <- [{KP,KC}, {CP,CC}],
- O <- [os:cmd(C)],
- T <- [file:read_file_info(P)]],
+ KR = os:cmd(KC),
+ {_, {ok, _}} = {KR, file:read_file_info(KP)},
+ CR = os:cmd(CC),
+ {_, {ok, _}} = {CR, file:read_file_info(CP)},
{KP,CP}.
diff --git a/lib/diameter/test/diameter_tls_SUITE_data/Makefile.ca b/lib/diameter/test/diameter_tls_SUITE_data/Makefile.ca
index d9c0753d0d..12487abe61 100644
--- a/lib/diameter/test/diameter_tls_SUITE_data/Makefile.ca
+++ b/lib/diameter/test/diameter_tls_SUITE_data/Makefile.ca
@@ -1,7 +1,7 @@
# -*- makefile -*-
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2011. All Rights Reserved.
+# Copyright Ericsson AB 2011-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/test/diameter_traffic_SUITE.erl b/lib/diameter/test/diameter_traffic_SUITE.erl
index 967a0bf591..6f3a4801ee 100644
--- a/lib/diameter/test/diameter_traffic_SUITE.erl
+++ b/lib/diameter/test/diameter_traffic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -428,7 +428,11 @@ remove_transports(Config) ->
server_service = SN}
= group(Config),
[LRef | Cs] = ?util:read_priv(Config, "transport"),
- [?util:disconnect(CN, C, SN, LRef) || C <- Cs].
+ try
+ [] = [T || C <- Cs, T <- [?util:disconnect(CN, C, SN, LRef)], T /= ok]
+ after
+ ok = diameter:remove_transport(SN, LRef)
+ end.
stop_services(Config) ->
#group{client_service = CN,
diff --git a/lib/diameter/test/diameter_transport_SUITE.erl b/lib/diameter/test/diameter_transport_SUITE.erl
index 53d2d6660e..c94f46b7a5 100644
--- a/lib/diameter/test/diameter_transport_SUITE.erl
+++ b/lib/diameter/test/diameter_transport_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -140,7 +140,9 @@ sctp_accept(Config) ->
-define(PEER_COUNT, 8).
accept(Prot) ->
- T = {Prot, make_ref()},
+ Ref = make_ref(),
+ true = diameter_reg:add_new({diameter_config, transport, Ref}), %% fake it
+ T = {Prot, Ref},
[] = ?util:run(?util:scramble(acc(2*?PEER_COUNT, T, []))).
acc(0, _, Acc) ->
@@ -336,13 +338,12 @@ make_msg() ->
%% crypto:rand_bytes/1 isn't available on all platforms (since openssl
%% isn't) so roll our own.
rand_bytes(N) ->
- random:seed(diameter_util:seed()),
rand_bytes(N, <<>>).
rand_bytes(0, Bin) ->
Bin;
rand_bytes(N, Bin) ->
- Oct = random:uniform(256) - 1,
+ Oct = rand:uniform(256) - 1,
rand_bytes(N-1, <<Oct, Bin/binary>>).
%% ===========================================================================
diff --git a/lib/diameter/test/diameter_util.erl b/lib/diameter/test/diameter_util.erl
index 52b747e99c..37fcbbc267 100644
--- a/lib/diameter/test/diameter_util.erl
+++ b/lib/diameter/test/diameter_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,7 +31,6 @@
fold/3,
foldl/3,
scramble/1,
- seed/0,
unique_string/0,
have_sctp/0]).
@@ -178,23 +177,15 @@ scramble(L) ->
[[fun s/1, L]]).
s(L) ->
- random:seed(seed()),
s([], L).
s(Acc, []) ->
Acc;
s(Acc, L) ->
- {H, [T|Rest]} = lists:split(random:uniform(length(L)) - 1, L),
+ {H, [T|Rest]} = lists:split(rand:uniform(length(L)) - 1, L),
s([T|Acc], H ++ Rest).
%% ---------------------------------------------------------------------------
-%% seed/0
-
-seed() ->
- {_,T} = diameter_lib:seed(),
- T.
-
-%% ---------------------------------------------------------------------------
%% unique_string/0
unique_string() ->
@@ -345,11 +336,12 @@ transport(SvcName, Ref) ->
disconnect(Client, Ref, Server, LRef) ->
true = diameter:subscribe(Server),
ok = diameter:remove_transport(Client, Ref),
- ok = receive
- {diameter_event, Server, {down, LRef, _, _}} -> ok
- after 10000 ->
- {Client, Ref, Server, LRef, process_info(self(), messages)}
- end.
+ receive
+ {diameter_event, Server, {down, LRef, _, _}} ->
+ ok
+ after 10000 ->
+ {Client, Ref, Server, LRef, process_info(self(), messages)}
+ end.
%% ---------------------------------------------------------------------------
diff --git a/lib/diameter/test/release.sed b/lib/diameter/test/release.sed
index c4124046bc..c84edcc6d9 100644
--- a/lib/diameter/test/release.sed
+++ b/lib/diameter/test/release.sed
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2011. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/diameter/vsn.mk b/lib/diameter/vsn.mk
index 836def8447..cb750c69a3 100644
--- a/lib/diameter/vsn.mk
+++ b/lib/diameter/vsn.mk
@@ -1,6 +1,6 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2015. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,5 +17,5 @@
# %CopyrightEnd%
APPLICATION = diameter
-DIAMETER_VSN = 1.11.2
+DIAMETER_VSN = 1.12
APP_VSN = $(APPLICATION)-$(DIAMETER_VSN)$(PRE_VSN)
diff --git a/lib/edoc/doc/src/book.xml b/lib/edoc/doc/src/book.xml
index 002bf27b94..cdd7eb6f1a 100644
--- a/lib/edoc/doc/src/book.xml
+++ b/lib/edoc/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/edoc/doc/src/notes.xml b/lib/edoc/doc/src/notes.xml
index 3f9d26796a..ae8147c564 100644
--- a/lib/edoc/doc/src/notes.xml
+++ b/lib/edoc/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,20 @@
<p>This document describes the changes made to the EDoc
application.</p>
+<section><title>Edoc 0.7.19</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Handle typed record fields. </p>
+ <p>
+ Own Id: OTP-13558</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Edoc 0.7.18</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/edoc/doc/src/part.xml b/lib/edoc/doc/src/part.xml
index b55916823a..389efa902b 100644
--- a/lib/edoc/doc/src/part.xml
+++ b/lib/edoc/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/edoc/doc/src/part_notes.xml b/lib/edoc/doc/src/part_notes.xml
index da3d7299f4..6a79435ff0 100644
--- a/lib/edoc/doc/src/part_notes.xml
+++ b/lib/edoc/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/edoc/doc/src/ref_man.xml b/lib/edoc/doc/src/ref_man.xml
index abe400d4d5..e3460345a0 100644
--- a/lib/edoc/doc/src/ref_man.xml
+++ b/lib/edoc/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/edoc/priv/edoc.dtd b/lib/edoc/priv/edoc.dtd
index 4278a9e643..89058f5d85 100644
--- a/lib/edoc/priv/edoc.dtd
+++ b/lib/edoc/priv/edoc.dtd
@@ -103,7 +103,7 @@
<!ATTLIST type name CDATA #IMPLIED>
<!ELEMENT union (typevar | atom | integer | float | nil | list | tuple |
- fun | record | abstype)+>
+ fun | record | map | abstype)+>
<!ELEMENT typevar EMPTY>
<!ATTLIST typevar name CDATA #REQUIRED>
@@ -129,6 +129,10 @@
<!ELEMENT field (atom, type)>
+<!ELEMENT map (map_field)*>
+
+<!ELEMENT map_field (type, type)>
+
<!ELEMENT abstype (erlangName, type*)>
<!ATTLIST abstype
href CDATA #IMPLIED>
diff --git a/lib/edoc/src/edoc.appup.src b/lib/edoc/src/edoc.appup.src
index 6d21891a36..4765eead70 100644
--- a/lib/edoc/src/edoc.appup.src
+++ b/lib/edoc/src/edoc.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/edoc/src/edoc.erl b/lib/edoc/src/edoc.erl
index d2494b69fe..94013bb5ac 100644
--- a/lib/edoc/src/edoc.erl
+++ b/lib/edoc/src/edoc.erl
@@ -653,20 +653,7 @@ find_invalid_unicode([]) -> none.
parse_file(Epp) ->
case scan_and_parse(Epp) of
{ok, Form} ->
- case Form of
- {attribute,La,record,{Record, Fields}} ->
- case epp:normalize_typed_record_fields(Fields) of
- {typed, NewFields} ->
- [{attribute, La, record, {Record, NewFields}},
- {attribute, La, type,
- {{record, Record}, Fields, []}}
- | parse_file(Epp)];
- not_typed ->
- [Form | parse_file(Epp)]
- end;
- _ ->
- [Form | parse_file(Epp)]
- end;
+ [Form | parse_file(Epp)];
{error, E} ->
[{error, E} | parse_file(Epp)];
{eof, Location} ->
diff --git a/lib/edoc/src/edoc_extract.erl b/lib/edoc/src/edoc_extract.erl
index 758750083d..2d6cb04a6d 100644
--- a/lib/edoc/src/edoc_extract.erl
+++ b/lib/edoc/src/edoc_extract.erl
@@ -32,9 +32,9 @@
%% %% @headerfile "edoc.hrl" (disabled until it can be made private)
-include("edoc.hrl").
-%% @type filename() = file:filename().
-%% @type proplist() = proplists:property().
-%% @type syntaxTree() = erl_syntax:syntaxTree().
+%% @type filename() = //kernel/file:filename().
+%% @type proplist() = //stdlib/proplists:property().
+%% @type syntaxTree() = //syntax_tools/erl_syntax:syntaxTree().
%% @spec source(File::filename(), Env::edoc_env(), Options::proplist())
%% -> {ModuleName, edoc:edoc_module()}
@@ -355,6 +355,8 @@ preprocess_forms_2(F, Fs) ->
[F | preprocess_forms_1(Fs)];
text ->
[F | preprocess_forms_1(Fs)];
+ {attribute, {record, _}} ->
+ [F | preprocess_forms_1(Fs)];
{attribute, {N, _}} ->
case edoc_specs:is_tag(N) of
true ->
@@ -373,50 +375,62 @@ preprocess_forms_2(F, Fs) ->
%% in the list.
collect(Fs, Mod) ->
- collect(Fs, [], [], [], [], undefined, Mod).
+ collect(Fs, [], [], [], [], [], undefined, Mod).
-collect([F | Fs], Cs, Ss, Ts, As, Header, Mod) ->
+collect([F | Fs], Cs, Ss, Ts, Rs, As, Header, Mod) ->
case erl_syntax_lib:analyze_form(F) of
comment ->
- collect(Fs, [F | Cs], Ss, Ts, As, Header, Mod);
+ collect(Fs, [F | Cs], Ss, Ts, Rs, As, Header, Mod);
{function, Name} ->
L = erl_syntax:get_pos(F),
Export = ordsets:is_element(Name, Mod#module.exports),
Args = parameters(erl_syntax:function_clauses(F)),
- collect(Fs, [], [], [],
+ collect(Fs, [], [], [], [],
[#entry{name = Name, args = Args, line = L,
export = Export,
- data = {comment_text(Cs),Ss,Ts}} | As],
+ data = {comment_text(Cs),Ss,Ts,Rs}} | As],
Header, Mod);
{attribute, {module, _}} when Header =:= undefined ->
L = erl_syntax:get_pos(F),
- collect(Fs, [], [], [], As,
+ collect(Fs, [], [], [], [], As,
#entry{name = module, line = L,
- data = {comment_text(Cs),Ss,Ts}},
+ data = {comment_text(Cs),Ss,Ts,Rs}},
Mod);
+ {attribute, {record, {_Name, Fields}}} ->
+ case is_typed_record(Fields) of
+ true ->
+ collect(Fs, Cs, Ss, Ts, [F | Rs], As, Header, Mod);
+ false ->
+ collect(Fs, Cs, Ss, Ts, Rs, As, Header, Mod)
+ end;
{attribute, {N, _}} ->
case edoc_specs:tag(N) of
spec ->
- collect(Fs, Cs, [F | Ss], Ts, As, Header, Mod);
+ collect(Fs, Cs, [F | Ss], Ts, Rs, As, Header, Mod);
type ->
- collect(Fs, Cs, Ss, [F | Ts], As, Header, Mod);
+ collect(Fs, Cs, Ss, [F | Ts], Rs, As, Header, Mod);
unknown ->
%% Drop current seen comments.
- collect(Fs, [], [], [], As, Header, Mod)
+ collect(Fs, [], [], [], Rs, As, Header, Mod)
end;
_ ->
%% Drop current seen comments.
- collect(Fs, [], [], [], As, Header, Mod)
+ collect(Fs, [], [], [], [], As, Header, Mod)
end;
-collect([], Cs, Ss, Ts, As, Header, _Mod) ->
- Footer = #entry{name = footer, data = {comment_text(Cs),Ss,Ts}},
+collect([], Cs, Ss, Ts, Rs, As, Header, _Mod) ->
+ Footer = #entry{name = footer, data = {comment_text(Cs),Ss,Ts,Rs}},
As1 = lists:reverse(As),
if Header =:= undefined ->
- {#entry{name = module, data = {[],[],[]}}, Footer, As1};
+ {#entry{name = module, data = {[],[],[],[]}}, Footer, As1};
true ->
{Header, Footer, As1}
end.
+is_typed_record([]) ->
+ false;
+is_typed_record([{_, {_, Type}} | Fs]) ->
+ Type =/= none orelse is_typed_record(Fs).
+
%% Returns a list of simplified comment information (position and text)
%% for a list of abstract comments. The order of elements is reversed.
@@ -549,8 +563,8 @@ get_tags(Es, Env, File, TypeDocs) ->
How = dict:from_list(edoc_tags:tag_parsers()),
get_tags(Es, Tags, Env, How, File, TypeDocs).
-get_tags([#entry{name = Name, data = {Cs,Specs,Types}} = E | Es], Tags, Env,
- How, File, TypeDocs) ->
+get_tags([#entry{name = Name, data = {Cs,Specs,Types,Records}} = E | Es],
+ Tags, Env, How, File, TypeDocs) ->
Where = {File, Name},
Ts0 = scan_tags(Cs),
{Ts1,Specs1} = select_spec(Ts0, Where, Specs),
@@ -558,7 +572,7 @@ get_tags([#entry{name = Name, data = {Cs,Specs,Types}} = E | Es], Tags, Env,
Ts3 = edoc_macros:expand_tags(Ts2, Env, Where),
Ts4 = edoc_tags:parse_tags(Ts3, How, Env, Where),
Ts = selected_specs(Specs1, Ts4),
- ETypes = [edoc_specs:type(Type, TypeDocs) || Type <- Types],
+ ETypes = [edoc_specs:type(Type, TypeDocs) || Type <- Types ++ Records],
[E#entry{data = Ts++ETypes} | get_tags(Es, Tags, Env, How, File, TypeDocs)];
get_tags([], _, _, _, _, _) ->
[].
@@ -625,11 +639,11 @@ file_macros(_Context, Env) ->
%%
%% The idea is to mimic how the @type tag works.
%% Using @type:
-%% @type t() = t1(). Some docs of t/0;
-%% Further docs of t/0.
+%%```@type t() = t1(). Some docs of t/0;
+%% Further docs of t/0.'''
%% The same thing using -type:
-%% -type t() :: t1(). % Some docs of t/0;
-%% Further docs of t/0.
+%%```-type t() :: t1(). % Some docs of t/0;
+%% Further docs of t/0.'''
find_type_docs(Forms0, Comments, Env, File) ->
Tree = erl_recomment:recomment_forms(Forms0, Comments),
Forms = preprocess_forms(Tree),
diff --git a/lib/edoc/src/edoc_layout.erl b/lib/edoc/src/edoc_layout.erl
index f723cd8373..ef57b7b084 100644
--- a/lib/edoc/src/edoc_layout.erl
+++ b/lib/edoc/src/edoc_layout.erl
@@ -898,8 +898,14 @@ t_map(Es) ->
Fs = get_elem(map_field, Es),
["#{"] ++ seq(fun t_map_field/1, Fs, ["}"]).
-t_map_field(#xmlElement{content = [K,V]}) ->
- t_utype_elem(K) ++ [" => "] ++ t_utype_elem(V).
+t_map_field(#xmlElement{content = [K,V]}=E) ->
+ KElem = t_utype_elem(K),
+ VElem = t_utype_elem(V),
+ AS = case get_attrval(assoc_type, E) of
+ "assoc" -> " => ";
+ "exact" -> " := "
+ end,
+ KElem ++ [AS] ++ VElem.
t_record(E, Es) ->
Name = ["#"] ++ t_type(get_elem(atom, Es)),
@@ -1133,8 +1139,12 @@ ot_tuple(Es) ->
ot_map(Es) ->
{type,0,map,[ot_map_field(E) || E <- get_elem(map_field,Es)]}.
-ot_map_field(#xmlElement{content=[K,V]}) ->
- {type,0,map_field_assoc,ot_utype_elem(K), ot_utype_elem(V)}.
+ot_map_field(#xmlElement{content=[K,V]}=E) ->
+ A = case get_attrval(assoc_type, E) of
+ "assoc" -> map_field_assoc;
+ "exact" -> map_field_exact
+ end,
+ {type,0,A,[ot_utype_elem(K), ot_utype_elem(V)]}.
ot_fun(Es) ->
Range = ot_utype(get_elem(type, Es)),
diff --git a/lib/edoc/src/edoc_lib.erl b/lib/edoc/src/edoc_lib.erl
index dcc239f6b4..cc0a8d0b94 100644
--- a/lib/edoc/src/edoc_lib.erl
+++ b/lib/edoc/src/edoc_lib.erl
@@ -935,7 +935,7 @@ get_doc_env(Opts) ->
%% Modules = [atom()]
%% proplist() = [term()]
%%
-%% @type proplist() = proplists:property().
+%% @type proplist() = //stdlib/proplists:property().
%% @type edoc_env(). Environment information needed by EDoc for
%% generating references. The data representation is not documented.
%%
diff --git a/lib/edoc/src/edoc_parser.yrl b/lib/edoc/src/edoc_parser.yrl
index 835e7ccaa6..68a3439f10 100644
--- a/lib/edoc/src/edoc_parser.yrl
+++ b/lib/edoc/src/edoc_parser.yrl
@@ -36,8 +36,8 @@ Terminals
atom float integer var an_var string start_spec start_typedef start_throws
start_ref
-'(' ')' ',' '.' '=>' '->' '{' '}' '[' ']' '|' '+' ':' '::' '=' '/' '//' '*'
-'#' 'where' '<<' '>>' '..' '...'.
+'(' ')' ',' '.' '=>' ':=' '->' '{' '}' '[' ']' '|' '+' ':' '::' '=' '/' '//'
+'*' '#' 'where' '<<' '>>' '..' '...'.
Rootsymbol start.
@@ -76,7 +76,12 @@ utype_map_fields -> '$empty' : [].
utype_map_fields -> utype_map_field : ['$1'].
utype_map_fields -> utype_map_fields ',' utype_map_field : ['$3' | '$1'].
-utype_map_field -> utype '=>' utype : #t_map_field{ k_type = '$1', v_type = '$3'}.
+utype_map_field -> utype '=>' utype : #t_map_field{assoc_type = assoc,
+ k_type = '$1',
+ v_type = '$3'}.
+utype_map_field -> utype ':=' utype : #t_map_field{assoc_type = exact,
+ k_type = '$1',
+ v_type = '$3'}.
utype_tuple -> '{' utypes '}' : lists:reverse('$2').
diff --git a/lib/edoc/src/edoc_run.erl b/lib/edoc/src/edoc_run.erl
index 9a569d0879..261a649c70 100644
--- a/lib/edoc/src/edoc_run.erl
+++ b/lib/edoc/src/edoc_run.erl
@@ -44,6 +44,8 @@
-import(edoc_report, [report/2, error/1]).
+-type args() :: [string()].
+
%% @spec application([string()]) -> none()
%%
@@ -58,6 +60,7 @@
%% automatically terminated when the call has completed, signalling
%% success or failure to the operating system.
+-spec application(args()) -> no_return().
application(Args) ->
F = fun () ->
case parse_args(Args) of
@@ -81,6 +84,7 @@ application(Args) ->
%% automatically terminated when the call has completed, signalling
%% success or failure to the operating system.
+-spec files(args()) -> no_return().
files(Args) ->
F = fun () ->
case parse_args(Args) of
@@ -93,6 +97,7 @@ files(Args) ->
run(F).
%% @hidden Not official yet
+-spec toc(args()) -> no_return().
toc(Args) ->
F = fun () ->
case parse_args(Args) of
@@ -126,6 +131,7 @@ toc(Args) ->
%% automatically terminated when the call has completed, signalling
%% success or failure to the operating system.
+-spec file(args()) -> no_return().
file(Args) ->
F = fun () ->
case parse_args(Args) of
@@ -137,8 +143,7 @@ file(Args) ->
end,
run(F).
--spec invalid_args(string(), list()) -> no_return().
-
+-spec invalid_args(string(), args()) -> no_return().
invalid_args(Where, Args) ->
report("invalid arguments to ~ts: ~w.", [Where, Args]),
shutdown_error().
@@ -169,10 +174,12 @@ wait_init() ->
%% When and if a function init:stop/1 becomes generally available, we
%% can use that instead of delay-and-pray when there is an error.
+-spec shutdown_ok() -> no_return().
shutdown_ok() ->
%% shut down emulator nicely, signalling "normal termination"
init:stop().
+-spec shutdown_error() -> no_return().
shutdown_error() ->
%% delay 1 second to allow I/O to finish
receive after 1000 -> ok end,
diff --git a/lib/edoc/src/edoc_scanner.erl b/lib/edoc/src/edoc_scanner.erl
index 36423d63f8..f1d5e1d4b9 100644
--- a/lib/edoc/src/edoc_scanner.erl
+++ b/lib/edoc/src/edoc_scanner.erl
@@ -146,6 +146,8 @@ scan1([$>,$>|Cs], Toks, Pos) ->
scan1(Cs, [{'>>',Pos}|Toks], Pos);
scan1([$-,$>|Cs], Toks, Pos) ->
scan1(Cs, [{'->',Pos}|Toks], Pos);
+scan1([$:,$=|Cs], Toks, Pos) ->
+ scan1(Cs, [{':=',Pos}|Toks], Pos);
scan1([$:,$:|Cs], Toks, Pos) ->
scan1(Cs, [{'::',Pos}|Toks], Pos);
scan1([$/,$/|Cs], Toks, Pos) ->
diff --git a/lib/edoc/src/edoc_specs.erl b/lib/edoc/src/edoc_specs.erl
index f2e5891c2e..c15dfd328f 100644
--- a/lib/edoc/src/edoc_specs.erl
+++ b/lib/edoc/src/edoc_specs.erl
@@ -42,14 +42,15 @@
%% TypeDocs is a dict of {Name, Doc}.
%% Note: #t_typedef.name is set to {record, R} for record types.
type(Form, TypeDocs) ->
- {Name, Data0} = erl_syntax_lib:analyze_wild_attribute(Form),
- type = tag(Name),
+ {Name, Data0} = analyze_type_attribute(Form),
{TypeName, Type, Args, Doc} =
case Data0 of
- {{record, R}, Fs, []} ->
+ {R, Fs} ->
+ record = Name,
L = erl_syntax:get_pos(Form),
{{record, R}, {type, L, record, [{atom,L,R} | Fs]}, [], ""};
{N,T,As} ->
+ type = tag(Name),
Doc0 =
case dict:find({N, length(As)}, TypeDocs) of
{ok, Doc1} ->
@@ -188,7 +189,7 @@ strip([_ | S]) ->
%% Find the type name and the greatest line number of a type spec.
%% Should use syntax_tools but this has to do for now.
get_name_and_last_line(F) ->
- {Name, Data} = erl_syntax_lib:analyze_wild_attribute(F),
+ {Name, Data} = analyze_type_attribute(F),
type = edoc_specs:tag(Name),
Attr = {attribute, erl_syntax:get_pos(F), Name, Data},
Fun = fun(A) ->
@@ -229,6 +230,7 @@ get_all_tags(Es) ->
%% Turns an opaque type into an abstract datatype.
%% Note: top level annotation is ignored.
opaque2abstr(opaque, _T) -> undefined;
+opaque2abstr(record, T) -> T;
opaque2abstr(type, T) -> T.
%% Replaces the parameters extracted from the source (by
@@ -367,11 +369,11 @@ d2e({type,_,map,any}, _Prec) ->
d2e({type,_,map,Es}, _Prec) ->
#t_map{types = d2e(Es) };
d2e({type,_,map_field_assoc,[K,V]}, Prec) ->
- T = #t_map_field{k_type = d2e(K), v_type=d2e(V) },
+ T = #t_map_field{assoc_type = assoc, k_type = d2e(K), v_type=d2e(V) },
{P,_R} = erl_parse:type_preop_prec('#'),
maybe_paren(P, Prec, T);
-d2e({type,_,map_field_exact,K,V}, Prec) ->
- T = #t_map_field{k_type = d2e(K), v_type=d2e(V) },
+d2e({type,_,map_field_exact,[K,V]}, Prec) ->
+ T = #t_map_field{assoc_type = exact, k_type = d2e(K), v_type=d2e(V) },
{P,_R} = erl_parse:type_preop_prec('#'),
maybe_paren(P, Prec, T);
d2e({type,_,tuple,Ts0}, _Prec) ->
@@ -608,6 +610,16 @@ type_name(#tag{name = type,
data = {#t_typedef{name = Name, args = As},_}}) ->
{Name, length(As)}.
+analyze_type_attribute(Form) ->
+ Name = erl_syntax:atom_value(erl_syntax:attribute_name(Form)),
+ case tag(Name) of
+ type ->
+ erl_syntax_lib:analyze_wild_attribute(Form);
+ _ when Name =:= record ->
+ {attribute, _, record, {N, Fields}} = erl_syntax:revert(Form),
+ {record, {N, Fields}}
+ end.
+
%% @doc Return `true' if `Tag' is one of the specification and type
%% attribute tags recognized by the Erlang compiler.
diff --git a/lib/edoc/src/edoc_tags.erl b/lib/edoc/src/edoc_tags.erl
index 9e2e41e902..93f423b906 100644
--- a/lib/edoc/src/edoc_tags.erl
+++ b/lib/edoc/src/edoc_tags.erl
@@ -213,8 +213,10 @@ filter_tags([#tag{name = N, line = L} = T | Ts], Tags, Where, Ts1) ->
true ->
filter_tags(Ts, Tags, Where, [T | Ts1]);
false ->
- [warning(L, Where, "tag @~s not recognized.", [N]) ||
- Where =/= no],
+ case Where of
+ no -> ok;
+ _ -> warning(L, Where, "tag @~s not recognized.", [N])
+ end,
filter_tags(Ts, Tags, Where, Ts1)
end;
filter_tags([], _, _, Ts) ->
@@ -451,7 +453,7 @@ check_type(#tag{line = L, data = Data}, P0, Ls, Ts) ->
check_type(#t_def{type = Type}, P, Ls, Ts) ->
check_type(Type, P, Ls, Ts);
check_type(#t_type{name = Name, args = Args}, P, Ls, Ts) ->
- _ = check_used_type(Name, Args, P, Ls),
+ check_used_type(Name, Args, P, Ls),
check_types3(Args++Ts, P, Ls);
check_type(#t_var{}, P, Ls, Ts) ->
check_types3(Ts, P, Ls);
@@ -503,7 +505,8 @@ check_used_type(#t_name{name = N, module = Mod}=Name, Args, P, LocalTypes) ->
false ->
#parms{warn = W, line = L, file = File} = P,
%% true = ets:insert(DT, TypeName),
- [type_warning(L, File, "missing type", N, NArgs) || W]
+ _ = [type_warning(L, File, "missing type", N, NArgs) || W],
+ ok
end.
type_warning(Line, File, S, N, NArgs) ->
diff --git a/lib/edoc/src/edoc_types.erl b/lib/edoc/src/edoc_types.erl
index 65fba61a72..5bb68e79fb 100644
--- a/lib/edoc/src/edoc_types.erl
+++ b/lib/edoc/src/edoc_types.erl
@@ -89,8 +89,8 @@ to_xml(#t_fun{args = As, range = T}, Env) ->
wrap_utype(T, Env)]};
to_xml(#t_map{ types = Ts}, Env) ->
{map, map(fun to_xml/2, Ts, Env)};
-to_xml(#t_map_field{ k_type=K, v_type=V}, Env) ->
- {map_field, [wrap_utype(K,Env), wrap_utype(V, Env)]};
+to_xml(#t_map_field{assoc_type = AT, k_type=K, v_type=V}, Env) ->
+ {map_field, [{assoc_type, AT}], [wrap_utype(K,Env), wrap_utype(V, Env)]};
to_xml(#t_tuple{types = Ts}, Env) ->
{tuple, map(fun wrap_utype/2, Ts, Env)};
to_xml(#t_list{type = T}, Env) ->
diff --git a/lib/edoc/src/edoc_types.hrl b/lib/edoc/src/edoc_types.hrl
index 7fec10d936..3e5e91484f 100644
--- a/lib/edoc/src/edoc_types.hrl
+++ b/lib/edoc/src/edoc_types.hrl
@@ -157,5 +157,5 @@
-record(t_paren, {a=[], type}). % parentheses
-record(t_map, {a=[], types=[]}).
--record(t_map_field, {a=[], k_type, v_type}).
+-record(t_map_field, {a=[], assoc_type, k_type, v_type}).
diff --git a/lib/edoc/test/Makefile b/lib/edoc/test/Makefile
index 2033e003b3..7a03ddeba9 100644
--- a/lib/edoc/test/Makefile
+++ b/lib/edoc/test/Makefile
@@ -25,7 +25,7 @@ RELSYSDIR = $(RELEASE_PATH)/edoc_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/edoc/test/edoc_SUITE.erl b/lib/edoc/test/edoc_SUITE.erl
index 2e2d5584f0..00d7550bed 100644
--- a/lib/edoc/test/edoc_SUITE.erl
+++ b/lib/edoc/test/edoc_SUITE.erl
@@ -16,7 +16,7 @@
%%
-module(edoc_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
diff --git a/lib/edoc/vsn.mk b/lib/edoc/vsn.mk
index 83514ac94f..f38800b3e0 100644
--- a/lib/edoc/vsn.mk
+++ b/lib/edoc/vsn.mk
@@ -1 +1 @@
-EDOC_VSN = 0.7.18
+EDOC_VSN = 0.7.19
diff --git a/lib/eldap/Makefile b/lib/eldap/Makefile
index 4b12717692..28f995e068 100644
--- a/lib/eldap/Makefile
+++ b/lib/eldap/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2012. All Rights Reserved.
+# Copyright Ericsson AB 2012-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/eldap/doc/src/book.xml b/lib/eldap/doc/src/book.xml
index 2d938fb074..56bd6e580c 100644
--- a/lib/eldap/doc/src/book.xml
+++ b/lib/eldap/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2012</year><year>2013</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/eldap/doc/src/notes.xml b/lib/eldap/doc/src/notes.xml
index 04b75f9e31..7aad745f67 100644
--- a/lib/eldap/doc/src/notes.xml
+++ b/lib/eldap/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2012</year><year>2013</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,39 @@
</header>
<p>This document describes the changes made to the Eldap application.</p>
+<section><title>Eldap 1.2.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ If the underlying tcp connection is closed and an LDAP
+ operation returned tcp_error, the client applications
+ tend to close the ldap handle with eldap:close. This will
+ cause a <c>{nocatch, {gen_tcp_error, ...}}</c> exception.</p>
+ <p>
+ Such errors are now ignored during close, because the
+ socket will be closed anyway.</p>
+ <p>
+ Own Id: OTP-13590 Aux Id: PR-1048 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Modernize test suites</p>
+ <p>
+ Own Id: OTP-13566</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Eldap 1.2.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/eldap/doc/src/ref_man.xml b/lib/eldap/doc/src/ref_man.xml
index b70529635f..8b18d5089b 100644
--- a/lib/eldap/doc/src/ref_man.xml
+++ b/lib/eldap/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2012</year><year>2013</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/eldap/doc/src/release_notes.xml b/lib/eldap/doc/src/release_notes.xml
index 65a277b657..dc78d2743c 100644
--- a/lib/eldap/doc/src/release_notes.xml
+++ b/lib/eldap/doc/src/release_notes.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2012</year><year>2013</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/eldap/doc/src/usersguide.xml b/lib/eldap/doc/src/usersguide.xml
index 38190c5a7b..0aea773457 100644
--- a/lib/eldap/doc/src/usersguide.xml
+++ b/lib/eldap/doc/src/usersguide.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2012</year><year>2013</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/eldap/src/Makefile b/lib/eldap/src/Makefile
index cd3c102f55..b79a537424 100644
--- a/lib/eldap/src/Makefile
+++ b/lib/eldap/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2012-2013. All Rights Reserved.
+# Copyright Ericsson AB 2012-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -98,7 +98,7 @@ include $(ERL_TOP)/make/otp_release_targets.mk
release_spec: opt
$(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET) "$(RELSYSDIR)/ebin"
+ $(INSTALL_DATA) $(ASN1_HRL) $(TARGET_FILES) $(APP_TARGET) $(APPUP_TARGET) "$(RELSYSDIR)/ebin"
$(INSTALL_DIR) "$(RELSYSDIR)/src"
$(INSTALL_DATA) $(ERL_FILES) "$(RELSYSDIR)/src"
$(INSTALL_DIR) "$(RELSYSDIR)/asn1"
diff --git a/lib/eldap/src/eldap.appup.src b/lib/eldap/src/eldap.appup.src
index f2a57fa945..06f8e15a71 100644
--- a/lib/eldap/src/eldap.appup.src
+++ b/lib/eldap/src/eldap.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/eldap/src/eldap.erl b/lib/eldap/src/eldap.erl
index 0c03021bd0..625309271b 100644
--- a/lib/eldap/src/eldap.erl
+++ b/lib/eldap/src/eldap.erl
@@ -272,7 +272,7 @@ modify_dn(Handle, Entry, NewRDN, DelOldRDN, NewSup, Controls)
%%% Sanity checks !
-bool_p(Bool) when Bool==true;Bool==false -> Bool.
+bool_p(Bool) when is_boolean(Bool) -> Bool.
optional([]) -> asn1_NOVALUE;
optional(Value) -> Value.
@@ -564,7 +564,12 @@ loop(Cpid, Data) ->
?MODULE:loop(Cpid, NewData);
{_From, close} ->
- {no_reply,_NewData} = do_unbind(Data),
+ % Ignore tcp error if connection is already closed.
+ try do_unbind(Data) of
+ {no_reply,_NewData} -> ok
+ catch
+ throw:{gen_tcp_error, _TcpErr} -> ok
+ end,
unlink(Cpid),
exit(closed);
@@ -1101,10 +1106,13 @@ log(_, _, _, _) ->
%%% Misc. routines
%%% --------------------------------------------------------------------
-send(To,Msg) -> To ! {self(),Msg}.
+send(To,Msg) ->
+ To ! {self(), Msg},
+ ok.
+
recv(From) ->
receive
- {From,Msg} -> Msg;
+ {From, Msg} -> Msg;
{'EXIT', From, Reason} ->
{error, {internal_error, Reason}}
end.
diff --git a/lib/eldap/test/Makefile b/lib/eldap/test/Makefile
index b8598546c4..21a0da926f 100644
--- a/lib/eldap/test/Makefile
+++ b/lib/eldap/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2012. All Rights Reserved.
+# Copyright Ericsson AB 2012-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/eldap/test/eldap_basic_SUITE.erl b/lib/eldap/test/eldap_basic_SUITE.erl
index 8414ca6e46..ac3447cfe6 100644
--- a/lib/eldap/test/eldap_basic_SUITE.erl
+++ b/lib/eldap/test/eldap_basic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,17 +23,16 @@
-compile(export_all).
%%-include_lib("common_test/include/ct.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("eldap/include/eldap.hrl").
-include_lib("eldap/ebin/ELDAPv3.hrl").
--define(TIMEOUT, 120000). % 2 min
-
-
%% Control to delete a referral object:
-define(manageDsaIT, {control,"2.16.840.1.113730.3.4.2",false,asn1_NOVALUE}).
+suite() ->
+ [{timetrap,{seconds,360}}].
all() ->
[app,
@@ -94,7 +93,8 @@ connection_tests() ->
client_side_start_tls_timeout,
client_side_bind_timeout,
client_side_add_timeout,
- client_side_search_timeout
+ client_side_search_timeout,
+ close_after_tcp_error
].
@@ -123,7 +123,7 @@ end_per_suite(_Config) ->
init_per_group(return_values, Config) ->
- case ?config(ldap_server,Config) of
+ case proplists:get_value(ldap_server,Config) of
undefined ->
{skip, "LDAP server not availble"};
{Host,Port} ->
@@ -131,7 +131,7 @@ init_per_group(return_values, Config) ->
Config
end;
init_per_group(plain_api, Config0) ->
- case ?config(ldap_server,Config0) of
+ case proplists:get_value(ldap_server,Config0) of
undefined ->
{skip, "LDAP server not availble"};
Server = {Host,Port} ->
@@ -139,7 +139,7 @@ init_per_group(plain_api, Config0) ->
initialize_db([{server,Server}, {ssl_flag,false}, {start_tls,false} | Config0])
end;
init_per_group(ssl_api, Config0) ->
- case ?config(ldaps_server,Config0) of
+ case proplists:get_value(ldaps_server,Config0) of
undefined ->
{skip, "LDAPS server not availble"};
Server = {Host,Port} ->
@@ -147,7 +147,7 @@ init_per_group(ssl_api, Config0) ->
initialize_db([{server,Server}, {ssl_flag,true}, {start_tls,false} | Config0])
end;
init_per_group(start_tls_api, Config0) ->
- case {?config(ldap_server,Config0), ?config(ssl_available,Config0)} of
+ case {proplists:get_value(ldap_server,Config0), proplists:get_value(ssl_available,Config0)} of
{undefined,true} ->
{skip, "LDAP server not availble"};
{_,false} ->
@@ -186,18 +186,18 @@ end_per_group(_Group, Config) -> Config.
init_per_testcase(ssl_connection, Config) ->
- case ?config(ssl_available,Config) of
+ case proplists:get_value(ssl_available,Config) of
true ->
SSL_Port = 9999,
- CertFile = filename:join(?config(data_dir,Config), "certs/server/cert.pem"),
- KeyFile = filename:join(?config(data_dir,Config), "certs/server/key.pem"),
+ CertFile = filename:join(proplists:get_value(data_dir,Config), "certs/server/cert.pem"),
+ KeyFile = filename:join(proplists:get_value(data_dir,Config), "certs/server/key.pem"),
Parent = self(),
Listener = spawn_link(
fun() ->
case ssl:listen(SSL_Port, [{certfile, CertFile},
{keyfile, KeyFile}
- | ?config(tcp_listen_opts,Config)
+ | proplists:get_value(tcp_listen_opts,Config)
]) of
{ok,SSL_LSock} ->
Parent ! {ok,self()},
@@ -244,7 +244,7 @@ init_per_testcase(TC, Config) ->
end;
false ->
- case proplists:get_value(name,?config(tc_group_properties, Config)) of
+ case proplists:get_value(name,proplists:get_value(tc_group_properties, Config)) of
api_not_bound ->
{ok,H} = open(Config),
[{handle,H} | Config];
@@ -281,7 +281,7 @@ appup(Config) when is_list(Config) ->
%%%----------------------------------------------------------------
open_ret_val_success(Config) ->
- {Host,Port} = ?config(ldap_server,Config),
+ {Host,Port} = proplists:get_value(ldap_server,Config),
{ok,H} = eldap:open([Host], [{port,Port}]),
catch eldap:close(H).
@@ -291,7 +291,7 @@ open_ret_val_error(_Config) ->
%%%----------------------------------------------------------------
close_ret_val(Config) ->
- {Host,Port} = ?config(ldap_server,Config),
+ {Host,Port} = proplists:get_value(ldap_server,Config),
{ok,H} = eldap:open([Host], [{port,Port}]),
ok = eldap:close(H).
@@ -312,6 +312,29 @@ tcp_connection(Config) ->
end.
%%%----------------------------------------------------------------
+close_after_tcp_error(Config) ->
+ Host = proplists:get_value(listen_host, Config),
+ Port = proplists:get_value(listen_port, Config),
+ Opts = proplists:get_value(tcp_connect_opts, Config),
+ T = 1000,
+ case eldap:open([Host], [{timeout,T},{port,Port}|Opts]) of
+ {ok,H} ->
+ Sl = proplists:get_value(listen_socket, Config),
+ gen_tcp:close(Sl),
+ {error,{gen_tcp_error,closed}} = eldap:simple_bind(H, anon, anon),
+ ok = eldap:close(H),
+ wait_for_close(H);
+ Other -> ct:fail("eldap:open failed: ~p",[Other])
+ end.
+
+wait_for_close(H) ->
+ case erlang:is_process_alive(H) of
+ true -> timer:sleep(100),
+ wait_for_close(H);
+ false -> ok
+ end.
+
+%%%----------------------------------------------------------------
ssl_connection(Config) ->
Host = proplists:get_value(listen_host, Config),
Port = proplists:get_value(ssl_listen_port, Config),
@@ -411,37 +434,37 @@ tcp_connection_option(Config) ->
%%%----------------------------------------------------------------
elementary_search(Config) ->
{ok, #eldap_search_result{entries=[_]}} =
- eldap:search(?config(handle,Config),
- #eldap_search{base = ?config(eldap_path, Config),
+ eldap:search(proplists:get_value(handle,Config),
+ #eldap_search{base = proplists:get_value(eldap_path, Config),
filter= eldap:present("objectclass"),
scope = eldap:wholeSubtree()}).
%%%----------------------------------------------------------------
search_non_existant(Config) ->
{error, noSuchObject} =
- eldap:search(?config(handle,Config),
- #eldap_search{base = "cn=Bar," ++ ?config(eldap_path, Config),
+ eldap:search(proplists:get_value(handle,Config),
+ #eldap_search{base = "cn=Bar," ++ proplists:get_value(eldap_path, Config),
filter= eldap:present("objectclass"),
scope = eldap:wholeSubtree()}).
%%%----------------------------------------------------------------
add_when_not_bound(Config) ->
- {error, _} = eldap:add(?config(handle,Config),
- "cn=Jonas Jonsson," ++ ?config(eldap_path, Config),
+ {error, _} = eldap:add(proplists:get_value(handle,Config),
+ "cn=Jonas Jonsson," ++ proplists:get_value(eldap_path, Config),
[{"objectclass", ["person"]},
{"cn", ["Jonas Jonsson"]},
{"sn", ["Jonsson"]}]).
%%%----------------------------------------------------------------
bind(Config) ->
- ok = eldap:simple_bind(?config(handle,Config),
+ ok = eldap:simple_bind(proplists:get_value(handle,Config),
"cn=Manager,dc=ericsson,dc=se",
"hejsan").
%%%----------------------------------------------------------------
add_when_bound(Config) ->
- ok = eldap:add(?config(handle, Config),
- "cn=Jonas Jonsson," ++ ?config(eldap_path, Config),
+ ok = eldap:add(proplists:get_value(handle, Config),
+ "cn=Jonas Jonsson," ++ proplists:get_value(eldap_path, Config),
[{"objectclass", ["person"]},
{"cn", ["Jonas Jonsson"]},
{"sn", ["Jonsson"]}]).
@@ -449,16 +472,16 @@ add_when_bound(Config) ->
%%%----------------------------------------------------------------
add_already_exists(Config) ->
{error, entryAlreadyExists} =
- eldap:add(?config(handle, Config),
- "cn=Jonas Jonsson," ++ ?config(eldap_path, Config),
+ eldap:add(proplists:get_value(handle, Config),
+ "cn=Jonas Jonsson," ++ proplists:get_value(eldap_path, Config),
[{"objectclass", ["person"]},
{"cn", ["Jonas Jonsson"]},
{"sn", ["Jonsson"]}]).
%%%----------------------------------------------------------------
more_add(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ok = eldap:add(H, "cn=Foo Bar," ++ BasePath,
[{"objectclass", ["person"]},
{"cn", ["Foo Bar"]},
@@ -470,8 +493,8 @@ more_add(Config) ->
%%%----------------------------------------------------------------
add_referral(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
{ok,{referral,["ldap://nowhere.example.com"++_]}} =
eldap:add(H, "cn=Foo Bar,dc=notHere," ++ BasePath,
[{"objectclass", ["person"]},
@@ -481,28 +504,28 @@ add_referral(Config) ->
%%%----------------------------------------------------------------
search_filter_equalityMatch(Config) ->
- BasePath = ?config(eldap_path, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Jonas Jonsson," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
- eldap:search(?config(handle, Config),
+ eldap:search(proplists:get_value(handle, Config),
#eldap_search{base = BasePath,
filter = eldap:equalityMatch("sn", "Jonsson"),
scope=eldap:singleLevel()}).
%%%----------------------------------------------------------------
search_filter_substring_any(Config) ->
- BasePath = ?config(eldap_path, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Jonas Jonsson," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
- eldap:search(?config(handle, Config),
+ eldap:search(proplists:get_value(handle, Config),
#eldap_search{base = BasePath,
filter = eldap:substrings("sn", [{any, "ss"}]),
scope=eldap:singleLevel()}).
%%%----------------------------------------------------------------
search_filter_initial(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Foo Bar," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
eldap:search(H,
@@ -512,8 +535,8 @@ search_filter_initial(Config) ->
%%%----------------------------------------------------------------
search_filter_final(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Foo Bar," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
eldap:search(H,
@@ -523,8 +546,8 @@ search_filter_final(Config) ->
%%%----------------------------------------------------------------
search_filter_and(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Foo Bar," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
eldap:search(H,
@@ -535,8 +558,8 @@ search_filter_and(Config) ->
%%%----------------------------------------------------------------
search_filter_or(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDNs = lists:sort(["cn=Foo Bar," ++ BasePath,
"ou=Team," ++ BasePath]),
{ok, #eldap_search_result{entries=Es}} =
@@ -549,8 +572,8 @@ search_filter_or(Config) ->
%%%----------------------------------------------------------------
search_filter_and_not(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
{ok, #eldap_search_result{entries=[]}} =
eldap:search(H,
#eldap_search{base = BasePath,
@@ -562,8 +585,8 @@ search_filter_and_not(Config) ->
%%%----------------------------------------------------------------
search_two_hits(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
DN1 = "cn=Santa Claus," ++ BasePath,
DN2 = "cn=Jultomten," ++ BasePath,
%% Add two objects:
@@ -594,8 +617,8 @@ search_two_hits(Config) ->
%%%----------------------------------------------------------------
search_referral(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
DN = "cn=Santa Claus,dc=notHere," ++ BasePath,
{ok,{referral,["ldap://nowhere.example.com"++_]}} =
eldap:search(H, #eldap_search{base = DN,
@@ -604,8 +627,8 @@ search_referral(Config) ->
%%%----------------------------------------------------------------
modify(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
%% The object to modify
DN = "cn=Foo Bar," ++ BasePath,
@@ -637,8 +660,8 @@ modify(Config) ->
%%%----------------------------------------------------------------
modify_referral(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
%% The object to modify
DN = "cn=Foo Bar,dc=notHere," ++ BasePath,
@@ -650,8 +673,8 @@ modify_referral(Config) ->
%%%----------------------------------------------------------------
delete(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
%% The element to play with:
DN = "cn=Jonas Jonsson," ++ BasePath,
@@ -668,16 +691,16 @@ delete(Config) ->
%%%----------------------------------------------------------------
delete_referral(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
%% The element to play with:
DN = "cn=Jonas Jonsson,dc=notHere," ++ BasePath,
{ok,{referral,["ldap://nowhere.example.com"++_]}} = eldap:delete(H, DN).
%%%----------------------------------------------------------------
modify_dn_delete_old(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
OrigCN = "Foo Bar",
OriginalRDN = "cn="++OrigCN,
DN = OriginalRDN ++ "," ++ BasePath,
@@ -722,8 +745,8 @@ modify_dn_delete_old(Config) ->
%%%----------------------------------------------------------------
modify_dn_keep_old(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
OriginalRDN = "cn=Foo Bar",
DN = OriginalRDN ++ "," ++ BasePath,
NewCN = "Niclas Andre",
@@ -862,7 +885,7 @@ initialize_db(Config) ->
clear_db(Config) ->
{ok,H} = open_bind(Config),
- Path = ?config(eldap_path, Config),
+ Path = proplists:get_value(eldap_path, Config),
delete_old_contents(H, Path),
eldap:close(H),
Config.
@@ -914,20 +937,20 @@ ok(MODULE, LINE, X) ->
cond_start_tls(H, Config) ->
- case ?config(start_tls,Config) of
+ case proplists:get_value(start_tls,Config) of
true -> start_tls(H,Config);
_ -> Config
end.
start_tls(H, Config) ->
- KeyFile = filename:join([?config(data_dir,Config),
+ KeyFile = filename:join([proplists:get_value(data_dir,Config),
"certs/client/key.pem"
]),
case eldap:start_tls(H, [{keyfile, KeyFile}]) of
ok ->
[{start_tls_success,true} | Config];
Error ->
- ct:log("Start_tls on ~p failed: ~p",[?config(url,Config) ,Error]),
+ ct:log("Start_tls on ~p failed: ~p",[proplists:get_value(url,Config) ,Error]),
ct:fail("start_tls failed")
end.
@@ -939,8 +962,8 @@ open_bind(Config) ->
{ok,H}.
open(Config) ->
- {Host,Port} = ?config(server,Config),
- SSLflag = ?config(ssl_flag,Config),
+ {Host,Port} = proplists:get_value(server,Config),
+ SSLflag = proplists:get_value(ssl_flag,Config),
{ok,H} = eldap:open([Host], [{port,Port},{ssl,SSLflag}]),
cond_start_tls(H, Config),
{ok,H}.
@@ -998,7 +1021,7 @@ init_ssl_certs_et_al(Config) ->
of
R when R==ok ; R=={error,{already_started,ssl}} ->
try make_certs:all("/dev/null",
- filename:join(?config(data_dir,Config), "certs"))
+ filename:join(proplists:get_value(data_dir,Config), "certs"))
of
{ok,_} -> true;
Other ->
diff --git a/lib/eldap/test/make_certs.erl b/lib/eldap/test/make_certs.erl
index 74ee04a361..cfa43289e1 100644
--- a/lib/eldap/test/make_certs.erl
+++ b/lib/eldap/test/make_certs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/eldap/vsn.mk b/lib/eldap/vsn.mk
index 99c474d588..721387d97d 100644
--- a/lib/eldap/vsn.mk
+++ b/lib/eldap/vsn.mk
@@ -1 +1 @@
-ELDAP_VSN = 1.2.1
+ELDAP_VSN = 1.2.2
diff --git a/lib/erl_docgen/Makefile b/lib/erl_docgen/Makefile
index 2f62db3442..30ff2bf16e 100644
--- a/lib/erl_docgen/Makefile
+++ b/lib/erl_docgen/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2011. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/doc/src/Makefile b/lib/erl_docgen/doc/src/Makefile
index 3a6d3d04c6..a9110e4635 100644
--- a/lib/erl_docgen/doc/src/Makefile
+++ b/lib/erl_docgen/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2011-2012. All Rights Reserved.
+# Copyright Ericsson AB 2011-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/doc/src/block_tags.xml b/lib/erl_docgen/doc/src/block_tags.xml
index cf8c425bc2..ceed9305f4 100644
--- a/lib/erl_docgen/doc/src/block_tags.xml
+++ b/lib/erl_docgen/doc/src/block_tags.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/book.xml b/lib/erl_docgen/doc/src/book.xml
index 2fa02e359a..b32ae42673 100644
--- a/lib/erl_docgen/doc/src/book.xml
+++ b/lib/erl_docgen/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/character_entities.xml b/lib/erl_docgen/doc/src/character_entities.xml
index e189d7cb6c..65cb07cf7c 100644
--- a/lib/erl_docgen/doc/src/character_entities.xml
+++ b/lib/erl_docgen/doc/src/character_entities.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/doc-build.xml b/lib/erl_docgen/doc/src/doc-build.xml
index 76129128eb..3ea8798639 100644
--- a/lib/erl_docgen/doc/src/doc-build.xml
+++ b/lib/erl_docgen/doc/src/doc-build.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/docgen_xml_check.xml b/lib/erl_docgen/doc/src/docgen_xml_check.xml
index 2351463770..68253edef7 100644
--- a/lib/erl_docgen/doc/src/docgen_xml_check.xml
+++ b/lib/erl_docgen/doc/src/docgen_xml_check.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/erl_docgen_app.xml b/lib/erl_docgen/doc/src/erl_docgen_app.xml
index 58c2a24f4b..8b36fd5a0a 100644
--- a/lib/erl_docgen/doc/src/erl_docgen_app.xml
+++ b/lib/erl_docgen/doc/src/erl_docgen_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>2011</year><year>2013</year>
+ <year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/fasc_dtds.xml b/lib/erl_docgen/doc/src/fasc_dtds.xml
index a212d58ef5..390ae6c5d1 100644
--- a/lib/erl_docgen/doc/src/fasc_dtds.xml
+++ b/lib/erl_docgen/doc/src/fasc_dtds.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/header_tags.xml b/lib/erl_docgen/doc/src/header_tags.xml
index 76472b5cce..a34ae2d562 100644
--- a/lib/erl_docgen/doc/src/header_tags.xml
+++ b/lib/erl_docgen/doc/src/header_tags.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/inline_tags.xml b/lib/erl_docgen/doc/src/inline_tags.xml
index 187c6c308a..25b0cd4d87 100644
--- a/lib/erl_docgen/doc/src/inline_tags.xml
+++ b/lib/erl_docgen/doc/src/inline_tags.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/notes.xml b/lib/erl_docgen/doc/src/notes.xml
index f70b3c8404..21dc617d55 100644
--- a/lib/erl_docgen/doc/src/notes.xml
+++ b/lib/erl_docgen/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,7 +31,52 @@
</header>
<p>This document describes the changes made to the <em>erl_docgen</em> application.</p>
- <section><title>Erl_Docgen 0.4.2</title>
+ <section><title>Erl_Docgen 0.5</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> Generate HTML anchors for data types without
+ <c>name</c> attribute. </p>
+ <p>
+ Own Id: OTP-13600 Aux Id: Jira: ERL-141 </p>
+ </item>
+ <item>
+ <p> Updated make rules so it's possible to use the
+ xmllint target for checking the system
+ documentation.<br/> Removed usage of non defined DTD tag
+ (output) from the system documentation and corrected a
+ number of xml faults. </p> <p> Added support for quote
+ tag and a new level of header formatting in erl_docgen.
+ </p> <p> A fault when generating html for manual set
+ markers for section headings is corrected so now is the
+ title visible after hyperlink jump. </p>
+ <p>
+ Own Id: OTP-13638</p>
+ </item>
+ <item>
+ <p> Corrected the space handling for the seealso tag.
+ </p>
+ <p>
+ Own Id: OTP-13639</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Sort the modules function index alphabetically. </p>
+ <p>
+ Own Id: OTP-13668 Aux Id: PR-543 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erl_Docgen 0.4.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
diff --git a/lib/erl_docgen/doc/src/overview.xml b/lib/erl_docgen/doc/src/overview.xml
index 860eb02028..5c4576000c 100644
--- a/lib/erl_docgen/doc/src/overview.xml
+++ b/lib/erl_docgen/doc/src/overview.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/part.xml b/lib/erl_docgen/doc/src/part.xml
index aeed47b8c7..0e97af7169 100644
--- a/lib/erl_docgen/doc/src/part.xml
+++ b/lib/erl_docgen/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2011</year><year>2013</year>
+ <year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/ref_man.xml b/lib/erl_docgen/doc/src/ref_man.xml
index da05f3f1d2..5c7976f12b 100644
--- a/lib/erl_docgen/doc/src/ref_man.xml
+++ b/lib/erl_docgen/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2011</year><year>2013</year>
+ <year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/refman_dtds.xml b/lib/erl_docgen/doc/src/refman_dtds.xml
index e92539d301..ee3e2f09ad 100644
--- a/lib/erl_docgen/doc/src/refman_dtds.xml
+++ b/lib/erl_docgen/doc/src/refman_dtds.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/doc/src/user_guide_dtds.xml b/lib/erl_docgen/doc/src/user_guide_dtds.xml
index 01df6b62cb..fdbaba2d92 100644
--- a/lib/erl_docgen/doc/src/user_guide_dtds.xml
+++ b/lib/erl_docgen/doc/src/user_guide_dtds.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_docgen/priv/bin/Makefile b/lib/erl_docgen/priv/bin/Makefile
index 20c2dac936..9ccb84b9c6 100644
--- a/lib/erl_docgen/priv/bin/Makefile
+++ b/lib/erl_docgen/priv/bin/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/bin/codeline_preprocessing.escript b/lib/erl_docgen/priv/bin/codeline_preprocessing.escript
index 129c5c287a..8e1e35bcdd 100755
--- a/lib/erl_docgen/priv/bin/codeline_preprocessing.escript
+++ b/lib/erl_docgen/priv/bin/codeline_preprocessing.escript
@@ -2,7 +2,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/bin/specs_gen.escript b/lib/erl_docgen/priv/bin/specs_gen.escript
index 988262e7a1..859f3c21f5 100644
--- a/lib/erl_docgen/priv/bin/specs_gen.escript
+++ b/lib/erl_docgen/priv/bin/specs_gen.escript
@@ -2,7 +2,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/bin/xml_from_edoc.escript b/lib/erl_docgen/priv/bin/xml_from_edoc.escript
index c09bf0f91c..b930ae3818 100755
--- a/lib/erl_docgen/priv/bin/xml_from_edoc.escript
+++ b/lib/erl_docgen/priv/bin/xml_from_edoc.escript
@@ -2,7 +2,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/bin/xref_mod_app.escript b/lib/erl_docgen/priv/bin/xref_mod_app.escript
index f754d4f2e0..4a418fe144 100755
--- a/lib/erl_docgen/priv/bin/xref_mod_app.escript
+++ b/lib/erl_docgen/priv/bin/xref_mod_app.escript
@@ -2,7 +2,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -84,7 +84,7 @@ preloaded(TopDir) ->
%% It's OK if too much data is generated as long as all applications
%% and all modules are mentioned.
appmods(D) ->
- ErlFiles = filelib:wildcard(filename:join([D,"src","*.erl"])),
+ ErlFiles = filelib:wildcard(filename:join([D,"src","**","*.erl"])),
AppV = filename:basename(D),
App = case string:rstr(AppV, "-") of
0 -> AppV;
diff --git a/lib/erl_docgen/priv/css/Makefile b/lib/erl_docgen/priv/css/Makefile
index 4dde562337..c317411d32 100644
--- a/lib/erl_docgen/priv/css/Makefile
+++ b/lib/erl_docgen/priv/css/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/css/otp_doc.css b/lib/erl_docgen/priv/css/otp_doc.css
index 0b531db701..219740a557 100644
--- a/lib/erl_docgen/priv/css/otp_doc.css
+++ b/lib/erl_docgen/priv/css/otp_doc.css
@@ -37,7 +37,7 @@ a:visited { color: blue; text-decoration: none }
top: 0;
bottom: 0;
left: 0;
- width: 200px;
+ width: 300px;
overflow:auto;
margin: 0;
padding: 1px;
@@ -45,7 +45,7 @@ a:visited { color: blue; text-decoration: none }
}
#content {
- margin-left: 240px; /* set left value to WidthOfFrameDiv */
+ margin-left: 340px; /* set left value to WidthOfFrameDiv */
}
.frontpage
@@ -122,6 +122,11 @@ span.code { font-family: Courier, monospace; font-weight: normal }
font-size: 90%;
padding: 5px 10px;
}
+
+.quote {
+ font-style: italic
+}
+
.example {
background-color:#eeeeff;
padding: 0px 10px;
diff --git a/lib/erl_docgen/priv/dtd/Makefile b/lib/erl_docgen/priv/dtd/Makefile
index 6ea7d6bec0..e35e5f8826 100644
--- a/lib/erl_docgen/priv/dtd/Makefile
+++ b/lib/erl_docgen/priv/dtd/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/dtd/common.dtd b/lib/erl_docgen/priv/dtd/common.dtd
index 961bcd3fc2..b1578ad9d4 100644
--- a/lib/erl_docgen/priv/dtd/common.dtd
+++ b/lib/erl_docgen/priv/dtd/common.dtd
@@ -12,7 +12,7 @@
limitations under the License.
The Initial Developer of the Original Code is Ericsson AB.
- Portions created by Ericsson are Copyright 1999-2007, Ericsson AB.
+ Portions created by Ericsson are Copyright 1999-2016, Ericsson AB.
All Rights Reserved.''
$Id$
@@ -24,7 +24,7 @@
<!ENTITY % block "p|pre|code|list|taglist|codeinclude|
erleval" >
-<!ENTITY % inline "#PCDATA|c|i|em|term|cite|br|path|seealso|
+<!ENTITY % inline "#PCDATA|c|i|em|strong|term|cite|br|path|seealso|
url|marker|anno" >
<!-- XXX -->
<!ELEMENT p (%inline;)* >
@@ -40,6 +40,7 @@
<!ELEMENT c (#PCDATA|anno)* >
<!ELEMENT i (#PCDATA|c|anno)* >
<!ELEMENT em (#PCDATA|c|anno)* >
+<!ELEMENT strong (#PCDATA|c|anno)* >
<!ELEMENT anno (#PCDATA) >
<!-- XXX -->
@@ -68,7 +69,7 @@
<!ATTLIST list type (ordered|bulleted) "bulleted" >
<!ELEMENT taglist (tag,item+)+ >
<!ELEMENT tag (#PCDATA|c|i|em|br|seealso|url|marker|anno)* >
-<!ELEMENT item (%inline;|%block;|warning|note|dont|do)* >
+<!ELEMENT item (%inline;|%block;|warning|note|dont|do|quote)* >
<!-- References -->
diff --git a/lib/erl_docgen/priv/dtd/erlref.dtd b/lib/erl_docgen/priv/dtd/erlref.dtd
index 835407520a..615b88b61a 100644
--- a/lib/erl_docgen/priv/dtd/erlref.dtd
+++ b/lib/erl_docgen/priv/dtd/erlref.dtd
@@ -29,7 +29,7 @@
<!-- `name' is used in common.refs.dtd and must therefore
be defined in each *ref. dtd -->
-<!ELEMENT name (#PCDATA) >
+<!ELEMENT name (#PCDATA|seealso)* >
<!ATTLIST name name CDATA #IMPLIED
arity CDATA #IMPLIED
clause_i CDATA #IMPLIED
diff --git a/lib/erl_docgen/priv/dtd_html_entities/Makefile b/lib/erl_docgen/priv/dtd_html_entities/Makefile
index 8a853ba279..c0026bd04d 100644
--- a/lib/erl_docgen/priv/dtd_html_entities/Makefile
+++ b/lib/erl_docgen/priv/dtd_html_entities/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/dtd_man_entities/Makefile b/lib/erl_docgen/priv/dtd_man_entities/Makefile
index 991a1a20c7..c634417e8c 100644
--- a/lib/erl_docgen/priv/dtd_man_entities/Makefile
+++ b/lib/erl_docgen/priv/dtd_man_entities/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/fop.xconf b/lib/erl_docgen/priv/fop.xconf
index 1a07af5c64..ee48255a93 100644
--- a/lib/erl_docgen/priv/fop.xconf
+++ b/lib/erl_docgen/priv/fop.xconf
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
- # Copyright Ericsson AB 2009-2012. All Rights Reserved.
+ # Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/images/Makefile b/lib/erl_docgen/priv/images/Makefile
index 664505fa9a..cd98399b6a 100644
--- a/lib/erl_docgen/priv/images/Makefile
+++ b/lib/erl_docgen/priv/images/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/js/flipmenu/Makefile b/lib/erl_docgen/priv/js/flipmenu/Makefile
index 287aeb3dd2..06a13defca 100644
--- a/lib/erl_docgen/priv/js/flipmenu/Makefile
+++ b/lib/erl_docgen/priv/js/flipmenu/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/xsl/Makefile b/lib/erl_docgen/priv/xsl/Makefile
index 80b3a59592..d0dd227169 100644
--- a/lib/erl_docgen/priv/xsl/Makefile
+++ b/lib/erl_docgen/priv/xsl/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/xsl/db_eix.xsl b/lib/erl_docgen/priv/xsl/db_eix.xsl
index 3ca6f73bd6..b496614854 100644
--- a/lib/erl_docgen/priv/xsl/db_eix.xsl
+++ b/lib/erl_docgen/priv/xsl/db_eix.xsl
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
- # Copyright Ericsson AB 2009-2011. All Rights Reserved.
+ # Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/xsl/db_html.xsl b/lib/erl_docgen/priv/xsl/db_html.xsl
index c2325fbee9..edab8e1c7e 100644
--- a/lib/erl_docgen/priv/xsl/db_html.xsl
+++ b/lib/erl_docgen/priv/xsl/db_html.xsl
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
- # Copyright Ericsson AB 2009-2012. All Rights Reserved.
+ # Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -24,11 +24,76 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
- extension-element-prefixes="exsl"
+ xmlns:func="http://exslt.org/functions"
+ xmlns:erl="http://erlang.org"
+ extension-element-prefixes="exsl func"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<xsl:include href="db_html_params.xsl"/>
+ <func:function name="erl:flip_first_char">
+ <xsl:param name="in"/>
+
+ <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
+ <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'"/>
+
+ <xsl:variable name="first-char" select="substring($in, 1, 1)"/>
+
+ <xsl:variable name="result">
+ <xsl:choose>
+ <xsl:when test="contains($uppercase, $first-char)">
+ <xsl:value-of select="concat(translate($first-char, $uppercase, $lowercase), substring($in, 2))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat(translate($first-char, $lowercase, $uppercase), substring($in, 2))"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <func:result select="$result"/>
+ </func:function>
+
+ <!-- Used from template menu.funcs to sort a module's functions for the lefthand index list,
+ from the module's .xml file. Returns a value on which to sort the entity in question
+ (a <name> element).
+
+ Some functions are listed with the name as an attribute, as in string.xml:
+ <name name="join" arity="2"/>
+
+ Others use the element value for the name, as in gen_server.xml:
+ <name>start_link(Module, Args, Options) -> Result</name>
+
+ Additionally, callbacks may be included, as in gen_server.xml:
+ <name>Module:handle_call(Request, From, State) -> Result</name>
+
+ So first, get the name from either the attribute or the element value.
+ Then, reverse the case of the first character. This is because xsltproc, used for processing,
+ orders uppercase before lowercase (even when the 'case-order="lower-first"' option
+ is given). But we want the Module callback functions listed after a module's regular
+ functions, as they are now. This doesn't affect the actual value used in the output, but
+ just the value used as a sort key. To then ensure that uppercase is indeed sorted before
+ lower, as we now want it to be, the 'case-order="upper-first"' option is used.
+
+ This processing only affect the lefthand index list- the body of the doc page is not
+ affected.
+ -->
+ <func:function name="erl:get_sort_field">
+ <xsl:param name="elem"/>
+
+ <xsl:variable name="base">
+ <xsl:choose>
+ <xsl:when test="string-length($elem/@name) > 0">
+ <xsl:value-of select="$elem/@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$elem"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <func:result select="erl:flip_first_char($base)"/>
+ </func:function>
+
<!-- Start of Dialyzer type/spec tags.
See also the templates matching "name" and "seealso" as well as
the template "menu.funcs"
@@ -383,9 +448,7 @@
</xsl:choose>
</xsl:when>
<xsl:otherwise> <!-- <datatype> with <name> -->
- <span class="bold_code">
- <xsl:apply-templates/>
- </span>
+ <xsl:call-template name="name"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
@@ -787,39 +850,36 @@
<!-- Book -->
<xsl:template match="/book">
-
- <xsl:apply-templates name="parts"/>
- <xsl:apply-templates name="applications"/>
-
+ <xsl:apply-templates select="parts"/>
+ <xsl:apply-templates select="applications"/>
+ <xsl:apply-templates select="releasenotes"/>
</xsl:template>
<!-- Parts -->
<xsl:template match="parts">
- <xsl:apply-templates name="part"/>
+ <xsl:apply-templates select="part"/>
</xsl:template>
<!-- Applications -->
<xsl:template match="applications">
- <xsl:apply-templates name="application"/>
+ <xsl:apply-templates select="application"/>
</xsl:template>
-
<!-- Header -->
- <xsl:template match="header">
- </xsl:template>
-
- <!-- Section/Title -->
- <xsl:template match="section/title">
- </xsl:template>
-
- <xsl:template match="pagetext">
- </xsl:template>
+ <xsl:template match="header"/>
+
+ <!-- Section/Title -->
+ <xsl:template match="section/title"/>
+ <xsl:template match="pagetext"/>
- <!-- Chapter/Section -->
+ <!-- Chapter/Section, subsection level 1-->
<xsl:template match="chapter/section">
<xsl:param name="chapnum"/>
<h3>
+ <xsl:for-each select="marker">
+ <xsl:call-template name="marker-before-title"/>
+ </xsl:for-each>
<a name="{generate-id(title)}">
<xsl:value-of select="$chapnum"/>.<xsl:number/>&#160;
<xsl:value-of select="title"/>
@@ -831,11 +891,14 @@
</xsl:apply-templates>
</xsl:template>
- <!-- Subsections lvl 3 and ... -->
+ <!-- Subsections lvl 2 -->
<xsl:template match="section/section">
<xsl:param name="chapnum"/>
<xsl:param name="sectnum"/>
<h4>
+ <xsl:for-each select="marker">
+ <xsl:call-template name="marker-before-title"/>
+ </xsl:for-each>
<!-- xsl:value-of select="$partnum"/>.<xsl:value-of select="$chapnum"/>.<xsl:value-of select="$sectnum"/>.<xsl:number/ -->
<xsl:value-of select="title"/>
</h4>
@@ -844,10 +907,29 @@
</xsl:apply-templates>
</xsl:template>
+ <!-- Subsections lvl 3 and ... -->
+ <xsl:template match="section/section/section">
+ <xsl:param name="chapnum"/>
+ <xsl:param name="sectnum"/>
+ <h5>
+ <xsl:for-each select="marker">
+ <xsl:call-template name="marker-before-title"/>
+ </xsl:for-each>
+ <!-- xsl:value-of select="$partnum"/>.<xsl:value-of select="$chapnum"/>.<xsl:value-of select="$sectnum"/>.<xsl:number/ -->
+ <xsl:value-of select="title"/>
+ </h5>
+ <xsl:apply-templates>
+ <xsl:with-param name="chapnum" select="$chapnum"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
<!-- *ref/Section -->
<xsl:template match="erlref/section|cref/section|comref/section|fileref/section|appref/section">
<xsl:param name="chapnum"/>
<h3>
+ <xsl:for-each select="marker">
+ <xsl:call-template name="marker-before-title"/>
+ </xsl:for-each>
<a name="{generate-id(title)}">
<xsl:value-of select="title"/>
</a>
@@ -875,7 +957,6 @@
<!-- Lists -->
-
<xsl:template match="list">
<xsl:param name="chapnum"/>
<ul>
@@ -983,6 +1064,18 @@
</div>
</xsl:template>
+ <!-- Quote -->
+ <xsl:template match="quote">
+ <xsl:param name="chapnum"/>
+ <div class="quote">
+ <p>
+ <xsl:apply-templates>
+ <xsl:with-param name="chapnum" select="$chapnum"/>
+ </xsl:apply-templates>
+ </p>
+ </div>
+ </xsl:template>
+
<!-- Paragraph -->
<xsl:template match="p">
<p>
@@ -991,10 +1084,6 @@
</xsl:template>
<!-- Inline elements -->
- <xsl:template match="b">
- <strong><xsl:apply-templates/></strong>
- </xsl:template>
-
<xsl:template match="i">
<i><xsl:apply-templates/></i>
</xsl:template>
@@ -1011,6 +1100,10 @@
<strong><xsl:apply-templates/></strong>
</xsl:template>
+ <xsl:template match="strong">
+ <strong><xsl:apply-templates/></strong>
+ </xsl:template>
+
<!-- Code -->
<xsl:template match="code">
<xsl:param name="chapnum"/>
@@ -1097,11 +1190,11 @@
<xsl:param name="chapnum"/>
<xsl:param name="fignum"/>
- <em>Figure
+ <p><em>Figure
<xsl:value-of select="$chapnum"/>.<xsl:value-of select="$fignum"/>:
&#160;
<xsl:apply-templates/>
- </em>
+ </em></p>
</xsl:template>
@@ -1288,9 +1381,7 @@
<xsl:with-param name="type">ref_man</xsl:with-param>
</xsl:call-template-->
-
<xsl:document href="{$outdir}/index.html" method="html" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN">
-
<xsl:call-template name="pagelayout"/>
</xsl:document>
</xsl:template>
@@ -1460,6 +1551,8 @@
<xsl:param name="cval"/>
<xsl:for-each select="$entries">
+ <!-- Sort on function name, so the index list in lefthand frame is ordered. -->
+ <xsl:sort select="erl:get_sort_field(.)" data-type="text" case-order="upper-first"/>
<xsl:choose>
<xsl:when test="ancestor::cref">
@@ -1855,6 +1948,7 @@
</xsl:choose>
</xsl:template>
+ <!-- Used both in <datatype> and in <func>! -->
<xsl:template name="name">
<xsl:variable name="tmpstring">
@@ -1911,7 +2005,14 @@
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
- <a name="{$fname}-{$arity}"><span class="bold_code"><xsl:value-of select="."/></span></a><br/>
+ <xsl:choose>
+ <xsl:when test="ancestor::datatype">
+ <a name="type-{$fname}"></a><span class="bold_code"><xsl:apply-templates/></span><br/>
+ </xsl:when>
+ <xsl:otherwise>
+ <a name="{$fname}-{$arity}"></a><span class="bold_code"><xsl:apply-templates/></span><br/>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:when>
<xsl:otherwise>
<span class="bold_code"><xsl:value-of select="."/></span>
@@ -1997,7 +2098,7 @@
</xsl:template>
<xsl:template match="seealso">
- <xsl:call-template name="seealso"/>
+ <xsl:call-template name="seealso"/>
</xsl:template>
<xsl:template name="seealso">
@@ -2079,16 +2180,27 @@
</xsl:template>
-
<xsl:template match="url">
<span class="bold_code"><a href="{@href}"><xsl:apply-templates/></a></span>
</xsl:template>
-
<xsl:template match="marker">
- <a name="{@id}"><xsl:apply-templates/></a>
+ <xsl:choose>
+ <xsl:when test="not(parent::section and following-sibling::title)">
+ <a name="{@id}"><xsl:apply-templates/></a>
+ </xsl:when>
+ </xsl:choose>
</xsl:template>
+ <xsl:template name="marker-before-title">
+ <xsl:choose>
+ <xsl:when test="self::marker and parent::section and following-sibling::title">
+ <a name="{@id}"><xsl:apply-templates/></a>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+
<xsl:template match="term">
<xsl:value-of select="@id"/>
<!-- xsl:choose>
@@ -2367,7 +2479,11 @@
<xsl:template name="nl">
<xsl:text>
-</xsl:text>
+ </xsl:text>
+ </xsl:template>
+
+ <xsl:template match="seealso//text()">
+ <xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>
diff --git a/lib/erl_docgen/priv/xsl/db_html_params.xsl b/lib/erl_docgen/priv/xsl/db_html_params.xsl
index 2949dbfef0..41ca26af21 100644
--- a/lib/erl_docgen/priv/xsl/db_html_params.xsl
+++ b/lib/erl_docgen/priv/xsl/db_html_params.xsl
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
- # Copyright Ericsson AB 2009. All Rights Reserved.
+ # Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/priv/xsl/db_man.xsl b/lib/erl_docgen/priv/xsl/db_man.xsl
index 5201465e42..03b6b0691d 100644
--- a/lib/erl_docgen/priv/xsl/db_man.xsl
+++ b/lib/erl_docgen/priv/xsl/db_man.xsl
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
- # Copyright Ericsson AB 2009-2012. All Rights Reserved.
+ # Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -589,12 +589,6 @@
</xsl:template>
<!-- Inline elements -->
- <xsl:template match="b">
- <xsl:text>\fB</xsl:text>
- <xsl:apply-templates/>
- <xsl:text>\fR\&amp; </xsl:text>
- </xsl:template>
-
<xsl:template match="i">
<xsl:text>\fI</xsl:text>
<xsl:apply-templates/>
@@ -622,6 +616,12 @@
<xsl:text>\fI</xsl:text> <xsl:apply-templates/><xsl:text>\fR\&amp;</xsl:text>
</xsl:template>
+ <xsl:template match="strong">
+ <xsl:text>\fB</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>\fR\&amp; </xsl:text>
+ </xsl:template>
+
<xsl:template match="seealso">
<xsl:choose>
<xsl:when test="ancestor::head">
diff --git a/lib/erl_docgen/priv/xsl/db_pdf.xsl b/lib/erl_docgen/priv/xsl/db_pdf.xsl
index 37a2d55274..99263847fb 100644
--- a/lib/erl_docgen/priv/xsl/db_pdf.xsl
+++ b/lib/erl_docgen/priv/xsl/db_pdf.xsl
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
- # Copyright Ericsson AB 2009-2013. All Rights Reserved.
+ # Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -1171,6 +1171,16 @@
</fo:block>
</xsl:template>
+ <!-- Quote -->
+ <xsl:template match="quote">
+ <xsl:param name="chapnum"/>
+ <fo:block font-style="italic">
+ <xsl:apply-templates>
+ <xsl:with-param name="chapnum" select="$chapnum"/>
+ </xsl:apply-templates>
+ </fo:block>
+ </xsl:template>
+
<!-- Paragraph -->
<xsl:template match="p">
<fo:block xsl:use-attribute-sets="p">
@@ -1180,14 +1190,8 @@
<!-- Inline elements -->
- <xsl:template match="b">
- <fo:inline font-weight="bold">
- <xsl:apply-templates/>
- </fo:inline>
- </xsl:template>
-
<xsl:template match="i">
- <fo:inline font-weight="italic">
+ <fo:inline font-style="italic">
<xsl:apply-templates/>
</fo:inline>
</xsl:template>
@@ -1203,7 +1207,13 @@
</xsl:template>
<xsl:template match="em">
- <fo:inline font-style="italic">
+ <fo:inline font-weight="bold">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+
+ <xsl:template match="strong">
+ <fo:inline font-weight="bold">
<xsl:apply-templates/>
</fo:inline>
</xsl:template>
diff --git a/lib/erl_docgen/priv/xsl/db_pdf_params.xsl b/lib/erl_docgen/priv/xsl/db_pdf_params.xsl
index 61c8ff75aa..d9a150d2d9 100644
--- a/lib/erl_docgen/priv/xsl/db_pdf_params.xsl
+++ b/lib/erl_docgen/priv/xsl/db_pdf_params.xsl
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
- # Copyright Ericsson AB 2009-2012. All Rights Reserved.
+ # Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/src/Makefile b/lib/erl_docgen/src/Makefile
index 7d41506dbd..82d051e9bb 100644
--- a/lib/erl_docgen/src/Makefile
+++ b/lib/erl_docgen/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/src/docgen_edoc_xml_cb.erl b/lib/erl_docgen/src/docgen_edoc_xml_cb.erl
index 0ac7985a48..4f3af1f767 100644
--- a/lib/erl_docgen/src/docgen_edoc_xml_cb.erl
+++ b/lib/erl_docgen/src/docgen_edoc_xml_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -563,7 +563,14 @@ otp_xmlify_a_fileref(FileRef1, AppS) ->
true ->
case split(Marker0, "-") of
[Func,Arity] ->
- Func++"/"++Arity;
+ try list_to_integer(Arity) of
+ _ ->
+ Func++"/"++Arity
+ catch
+ _:_ ->
+ %% This is "type-"<a-type>.
+ Marker0
+ end;
_ ->
Marker0
end
@@ -831,19 +838,49 @@ local_types([]) -> [];
local_types(Es) ->
local_defs2(get_elem(localdef, Es)).
+-define(LOCAL_TYPES, edoc_local_defs).
+
local_defs2([]) -> [];
local_defs2(Es) ->
+ case collect_local_types(Es) of
+ [] -> local_defs3(Es);
+ LocalTypes ->
+ ?LOCAL_TYPES = ets:new(?LOCAL_TYPES, [named_table]),
+ true = ets:insert(?LOCAL_TYPES, LocalTypes),
+ try
+ local_defs3(Es)
+ after
+ ets:delete(?LOCAL_TYPES)
+ end
+ end.
+
+local_defs3(Es) ->
{type,[?NL | [{v, localdef2(E)} || E <- Es]]}.
+%% Does not work well for parametrized types.
+collect_local_types(Es) ->
+ lists:append([collect_local_type(E) || E <- Es]).
+
+collect_local_type(#xmlElement{content = Es}) ->
+ case get_elem(typevar, Es) of
+ [] ->
+ [{t_abstype(get_content(abstype, Es))}];
+ [_] ->
+ []
+ end.
+
%% Like localdef/1, but does not use label_anchor/2 -- we don't want any
%% markers or em tags in <v> tag, plain text only!
+%% When used stand-alone, EDoc generates links to local types. An ETS
+%% table holds local types, to avoid generating links to them.
localdef2(#xmlElement{content = Es}) ->
- case get_elem(typevar, Es) of
- [] ->
- t_utype(get_elem(type, Es));
- [V] ->
- t_var(V) ++ [" = "] ++ t_utype(get_elem(type, Es))
- end.
+ Var = case get_elem(typevar, Es) of
+ [] ->
+ [t_abstype(get_content(abstype, Es))];
+ [V] ->
+ t_var(V)
+ end,
+ Var ++ [" = "] ++ t_utype(get_elem(type, Es)).
type_name(#xmlElement{content = Es}) ->
t_name(get_elem(erlangName, get_content(typedef, Es))).
@@ -855,10 +892,9 @@ types(Ts) ->
typedecl(Name, #xmlElement{content = Es}) ->
TypedefEs = get_content(typedef, Es),
Id = "type-"++Name,
- [{tag, typedef(TypedefEs)},
+ [{tag, [{marker,[{id,Id}],[]}] ++ typedef(TypedefEs)},
?NL,
- {item, [{marker,[{id,Id}],[]} |
- local_defs(get_elem(localdef, TypedefEs)) ++ fulldesc(Es)]},
+ {item, local_defs(get_elem(localdef, TypedefEs)) ++ fulldesc(Es)},
?NL].
typedef(Es) ->
@@ -866,14 +902,14 @@ typedef(Es) ->
++ seq(fun t_utype_elem/1, get_content(argtypes, Es), [")"])),
case get_elem(type, Es) of
[] ->
- [{tt, Name}];
+ Name;
Type ->
- [{tt, Name ++ [" = "] ++ t_utype(Type)}]
+ Name ++ [" = "] ++ t_utype(Type)
end.
-local_defs([]) -> [];
+local_defs([]) -> [{p,[]}];
local_defs(Es) ->
- [?NL, {ul, [{li, [{tt, localdef(E)}]} || E <- Es]}].
+ [?NL, {ul, [{li, [{p, localdef(E)}]} || E <- Es]}].
localdef(E = #xmlElement{content = Es}) ->
Var = case get_elem(typevar, Es) of
@@ -917,6 +953,7 @@ seealso_module(Es) ->
Es1 ->
{section,[{title,["See also"]},{p,seq(fun see/1, Es1, [])}]}
end.
+
seealso_function(Es) ->
case get_elem(see, Es) of
[] -> [];
@@ -988,7 +1025,14 @@ t_name([E]) ->
end.
t_utype([E]) ->
- t_utype_elem(E).
+ flatten_type(t_utype_elem(E)).
+
+%% Make sure see also are top elements of lists.
+flatten_type(T) ->
+ [case is_integer(E) of
+ true -> [E];
+ false -> E
+ end || E <- lists:flatten(T)].
t_utype_elem(E=#xmlElement{content = Es}) ->
case get_attrval(name, E) of
@@ -1021,16 +1065,14 @@ t_type([#xmlElement{name = tuple, content = Es}]) ->
t_tuple(Es);
t_type([#xmlElement{name = 'fun', content = Es}]) ->
t_fun(Es);
-t_type([#xmlElement{name = abstype, content = Es}]) ->
- t_abstype(Es);
+t_type([E = #xmlElement{name = abstype, content = Es}]) ->
+ t_abstype(E, Es);
t_type([#xmlElement{name = union, content = Es}]) ->
t_union(Es);
t_type([#xmlElement{name = record, content = Es}]) ->
t_record(Es);
t_type([#xmlElement{name = map, content = Es}]) ->
- t_map(Es);
-t_type([#xmlElement{name = map_field, content = Es}]) ->
- t_map_field(Es).
+ t_map(Es).
t_var(E) ->
[get_attrval(name, E)].
@@ -1065,35 +1107,53 @@ t_fun(Es) ->
t_record([E|Es]) ->
["#", get_attrval(value, E), "{"++ seq(fun t_field/1, Es) ++"}"].
+
t_field(#xmlElement{name=field, content=[Atom,Type]}) ->
[get_attrval(value, Atom), "="] ++ t_utype_elem(Type).
t_map(Es) ->
- ["#{"] ++ seq(fun t_utype_elem/1, Es, ["}"]).
+ ["#{"] ++ seq(fun t_map_field/1, Es, ["}"]).
+
+t_map_field(E = #xmlElement{name = map_field, content = [K,V]}) ->
+ KElem = t_utype_elem(K),
+ VElem = t_utype_elem(V),
+ AS = case get_attrval(assoc_type, E) of
+ "assoc" -> " => ";
+ "exact" -> " := "
+ end,
+ [KElem ++ AS ++ VElem].
-t_map_field([K,V]) ->
- [t_utype_elem(K) ++ " => " ++ t_utype_elem(V)].
+t_abstype(E, Es) ->
+ see_type(E, t_abstype(Es)).
t_abstype(Es) ->
- case split_at_colon(t_name(get_elem(erlangName, Es)),[]) of
- {Mod,Type} ->
- [Type, "("] ++
- seq(fun t_utype_elem/1, get_elem(type, Es), [")"]) ++
- [" (see module ", Mod, ")"];
- Type ->
- [Type, "("] ++
- seq(fun t_utype_elem/1, get_elem(type, Es), [")"])
+ Name = t_name(get_elem(erlangName, Es)),
+ [Name, "("] ++ seq(fun t_utype_elem/1, get_elem(type, Es), [")"]).
+
+see_type(E, Es0) ->
+ case get_attrval(href, E) of
+ [] -> Es0;
+ Href0 ->
+ try
+ false = is_local_type(Es0),
+ %% Fails for parametrized types:
+ Text = #xmlText{value = lists:append(Es0)},
+ {Href, Es} = otp_xmlify_a_href(Href0, [Text]),
+ [{seealso, [{marker, Href}], Es}]
+ catch
+ _:_ ->
+ Es0
+ end
end.
-%% Split at one colon, but not at two (or more)
-split_at_colon([$:,$:|_]=Rest,Acc) ->
- lists:reverse(Acc)++Rest;
-split_at_colon([$:|Type],Acc) ->
- {lists:reverse(Acc),Type};
-split_at_colon([Char|Rest],Acc) ->
- split_at_colon(Rest,[Char|Acc]);
-split_at_colon([],Acc) ->
- lists:reverse(Acc).
+is_local_type(Es) ->
+ try
+ [_] = ets:lookup(?LOCAL_TYPES, Es),
+ true
+ catch
+ _:_->
+ false
+ end.
t_union(Es) ->
seq(fun t_utype_elem/1, Es, " | ", []).
diff --git a/lib/erl_docgen/src/docgen_otp_specs.erl b/lib/erl_docgen/src/docgen_otp_specs.erl
index e154323f07..6c41147e27 100644
--- a/lib/erl_docgen/src/docgen_otp_specs.erl
+++ b/lib/erl_docgen/src/docgen_otp_specs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -389,10 +389,10 @@ t_type([#xmlElement{name = list, content = Es}]) ->
t_list(Es);
t_type([#xmlElement{name = nonempty_list, content = Es}]) ->
t_nonempty_list(Es);
-t_type([#xmlElement{name = tuple, content = Es}]) ->
- t_tuple(Es);
t_type([#xmlElement{name = map, content = Es}]) ->
t_map(Es);
+t_type([#xmlElement{name = tuple, content = Es}]) ->
+ t_tuple(Es);
t_type([#xmlElement{name = 'fun', content = Es}]) ->
["fun("] ++ t_fun(Es) ++ [")"];
t_type([E = #xmlElement{name = record, content = Es}]) ->
@@ -435,16 +435,22 @@ t_nonempty_list(Es) ->
t_tuple(Es) ->
["{"] ++ seq(fun t_utype_elem/1, Es, ["}"]).
+t_fun(Es) ->
+ ["("] ++ seq(fun t_utype_elem/1, get_content(argtypes, Es),
+ [") -> "] ++ t_utype(get_elem(type, Es))).
+
t_map(Es) ->
Fs = get_elem(map_field, Es),
["#{"] ++ seq(fun t_map_field/1, Fs, ["}"]).
-t_map_field(#xmlElement{content = [K,V]}) ->
- [t_utype_elem(K) ++ " => " ++ t_utype_elem(V)].
-
-t_fun(Es) ->
- ["("] ++ seq(fun t_utype_elem/1, get_content(argtypes, Es),
- [") -> "] ++ t_utype(get_elem(type, Es))).
+t_map_field(#xmlElement{content = [K,V]}=E) ->
+ KElem = t_utype_elem(K),
+ VElem = t_utype_elem(V),
+ AS = case get_attrval(assoc_type, E) of
+ "assoc" -> " => ";
+ "exact" -> " := "
+ end,
+ KElem ++ [AS] ++ VElem.
t_record(E, Es) ->
Name = ["#"] ++ t_type(get_elem(atom, Es)),
@@ -618,8 +624,12 @@ ot_tuple(Es) ->
ot_map(Es) ->
{type,0,map,[ot_map_field(E) || E <- get_elem(map_field,Es)]}.
-ot_map_field(#xmlElement{content=[K,V]}) ->
- {type,0,map_field_assoc,[ot_utype_elem(K),ot_utype_elem(V)]}.
+ot_map_field(#xmlElement{content=[K,V]}=E) ->
+ A = case get_attrval(assoc_type, E) of
+ "assoc" -> map_field_assoc;
+ "exact" -> map_field_exact
+ end,
+ {type,0,A,[ot_utype_elem(K), ot_utype_elem(V)]}.
ot_fun(Es) ->
Range = ot_utype(get_elem(type, Es)),
diff --git a/lib/erl_docgen/src/docgen_xmerl_xml_cb.erl b/lib/erl_docgen/src/docgen_xmerl_xml_cb.erl
index f6e003aa14..59d4dccfb7 100644
--- a/lib/erl_docgen/src/docgen_xmerl_xml_cb.erl
+++ b/lib/erl_docgen/src/docgen_xmerl_xml_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/src/erl_docgen.appup.src b/lib/erl_docgen/src/erl_docgen.appup.src
index 58cde75395..0d874acf7a 100644
--- a/lib/erl_docgen/src/erl_docgen.appup.src
+++ b/lib/erl_docgen/src/erl_docgen.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/erl_docgen/test/Makefile b/lib/erl_docgen/test/Makefile
index 9f4cc04105..9e58157023 100644
--- a/lib/erl_docgen/test/Makefile
+++ b/lib/erl_docgen/test/Makefile
@@ -25,7 +25,7 @@ RELSYSDIR = $(RELEASE_PATH)/erl_docgen_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/erl_docgen/test/erl_docgen_SUITE.erl b/lib/erl_docgen/test/erl_docgen_SUITE.erl
index a202fefa9d..972fda5762 100644
--- a/lib/erl_docgen/test/erl_docgen_SUITE.erl
+++ b/lib/erl_docgen/test/erl_docgen_SUITE.erl
@@ -40,12 +40,10 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-app() ->
- [{doc, "Test that the erl_docgen app file is ok"}].
+%% Test that the erl_docgen app file is ok
app(Config) when is_list(Config) ->
- ok = ?t:app_test(erl_docgen).
+ ok = test_server:app_test(erl_docgen).
-appup() ->
- [{doc, "Test that the erl_docgen appup file is ok"}].
+%% Test that the erl_docgen appup file is ok
appup(Config) when is_list(Config) ->
- ok = ?t:appup_test(erl_docgen).
+ ok = test_server:appup_test(erl_docgen).
diff --git a/lib/erl_docgen/vsn.mk b/lib/erl_docgen/vsn.mk
index 3188b926ff..98d1c3f7be 100644
--- a/lib/erl_docgen/vsn.mk
+++ b/lib/erl_docgen/vsn.mk
@@ -1 +1 @@
-ERL_DOCGEN_VSN = 0.4.2
+ERL_DOCGEN_VSN = 0.5
diff --git a/lib/erl_interface/Makefile b/lib/erl_interface/Makefile
index 56edcdfabc..9471b0df18 100644
--- a/lib/erl_interface/Makefile
+++ b/lib/erl_interface/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/configure.in b/lib/erl_interface/configure.in
index 7a3b5ce378..0a8fbf513c 100644
--- a/lib/erl_interface/configure.in
+++ b/lib/erl_interface/configure.in
@@ -1,7 +1,7 @@
# -*- Autoconf -*-
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -100,7 +100,9 @@ AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(long long)
-if test $ac_cv_sizeof_void_p = 8; then
+dnl We set EI_64BIT mode when long is 8 bytes, this makes things
+dnl work on windows and unix correctly
+if test $ac_cv_sizeof_long = 8; then
CFLAGS="$CFLAGS -DEI_64BIT"
fi
diff --git a/lib/erl_interface/doc/src/Makefile b/lib/erl_interface/doc/src/Makefile
index 53dadec5a3..204a6051b2 100644
--- a/lib/erl_interface/doc/src/Makefile
+++ b/lib/erl_interface/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2012. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/doc/src/book.xml b/lib/erl_interface/doc/src/book.xml
index cf7323f3a2..c9194d96ff 100644
--- a/lib/erl_interface/doc/src/book.xml
+++ b/lib/erl_interface/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/ei.xml b/lib/erl_interface/doc/src/ei.xml
index 8ef433d10f..1177954eb9 100644
--- a/lib/erl_interface/doc/src/ei.xml
+++ b/lib/erl_interface/doc/src/ei.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2001</year><year>2014</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/ei_connect.xml b/lib/erl_interface/doc/src/ei_connect.xml
index a06013ed6a..516357b6a3 100644
--- a/lib/erl_interface/doc/src/ei_connect.xml
+++ b/lib/erl_interface/doc/src/ei_connect.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/ei_users_guide.xml b/lib/erl_interface/doc/src/ei_users_guide.xml
index cdf3a912bb..4b9809aee4 100644
--- a/lib/erl_interface/doc/src/ei_users_guide.xml
+++ b/lib/erl_interface/doc/src/ei_users_guide.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_call.xml b/lib/erl_interface/doc/src/erl_call.xml
index e982bf89e1..46015621ac 100644
--- a/lib/erl_interface/doc/src/erl_call.xml
+++ b/lib/erl_interface/doc/src/erl_call.xml
@@ -4,7 +4,7 @@
<comref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_connect.xml b/lib/erl_interface/doc/src/erl_connect.xml
index 86b2648918..0fad98cd17 100644
--- a/lib/erl_interface/doc/src/erl_connect.xml
+++ b/lib/erl_interface/doc/src/erl_connect.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_error.xml b/lib/erl_interface/doc/src/erl_error.xml
index 8b8c2e95d8..abe84780e1 100644
--- a/lib/erl_interface/doc/src/erl_error.xml
+++ b/lib/erl_interface/doc/src/erl_error.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_eterm.xml b/lib/erl_interface/doc/src/erl_eterm.xml
index 713a90a390..800f8a3207 100644
--- a/lib/erl_interface/doc/src/erl_eterm.xml
+++ b/lib/erl_interface/doc/src/erl_eterm.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_format.xml b/lib/erl_interface/doc/src/erl_format.xml
index 2918cb8b84..6e3ac4f0c9 100644
--- a/lib/erl_interface/doc/src/erl_format.xml
+++ b/lib/erl_interface/doc/src/erl_format.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_global.xml b/lib/erl_interface/doc/src/erl_global.xml
index ec5e51a0b6..d6bfffc69d 100644
--- a/lib/erl_interface/doc/src/erl_global.xml
+++ b/lib/erl_interface/doc/src/erl_global.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_interface.xml b/lib/erl_interface/doc/src/erl_interface.xml
index 3a01cba74e..a9d421bbeb 100644
--- a/lib/erl_interface/doc/src/erl_interface.xml
+++ b/lib/erl_interface/doc/src/erl_interface.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_malloc.xml b/lib/erl_interface/doc/src/erl_malloc.xml
index 0a9830f612..799c903b1a 100644
--- a/lib/erl_interface/doc/src/erl_malloc.xml
+++ b/lib/erl_interface/doc/src/erl_malloc.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/erl_marshal.xml b/lib/erl_interface/doc/src/erl_marshal.xml
index 9b9622dcc2..7c56089016 100644
--- a/lib/erl_interface/doc/src/erl_marshal.xml
+++ b/lib/erl_interface/doc/src/erl_marshal.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/notes.xml b/lib/erl_interface/doc/src/notes.xml
index 37266d9354..a69c5aac11 100644
--- a/lib/erl_interface/doc/src/notes.xml
+++ b/lib/erl_interface/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,48 @@
</header>
<p>This document describes the changes made to the Erl_interface application.</p>
+<section><title>Erl_Interface 3.9</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix decoding of LLONG_MIN in erl_decode</p>
+ <p>
+ Own Id: OTP-13666 Aux Id: ERL-158 </p>
+ </item>
+ <item>
+ <p>
+ On windows <c>ei_decode_ulong</c> and
+ <c>ei_decode_long</c> now correctly returns an error when
+ trying to decode a number that does not fit in a long.
+ Fixed a bug on windows where enabling ei tracing would
+ cause a segmentation fault.</p>
+ <p>
+ Own Id: OTP-13673</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Handle terms (pids,ports and refs) from nodes with a
+ 'creation' value larger than 3. This is a preparation of
+ the distribution protocol to allow OTP 19 nodes to
+ correctly communicate with future nodes (20 or higher).
+ The 'creation' value differentiates different
+ incarnations of the same node (name).</p>
+ <p>
+ Own Id: OTP-13488</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Erl_Interface 3.8.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/erl_interface/doc/src/notes_history.xml b/lib/erl_interface/doc/src/notes_history.xml
index f3cf8d01ae..c8cdc8832d 100644
--- a/lib/erl_interface/doc/src/notes_history.xml
+++ b/lib/erl_interface/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/part.xml b/lib/erl_interface/doc/src/part.xml
index ec598f0339..d044e2b981 100644
--- a/lib/erl_interface/doc/src/part.xml
+++ b/lib/erl_interface/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/part_erl_interface.xml b/lib/erl_interface/doc/src/part_erl_interface.xml
index 08225133e0..2abe7ecd60 100644
--- a/lib/erl_interface/doc/src/part_erl_interface.xml
+++ b/lib/erl_interface/doc/src/part_erl_interface.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/part_notes.xml b/lib/erl_interface/doc/src/part_notes.xml
index f2d5bd962b..facdf821ee 100644
--- a/lib/erl_interface/doc/src/part_notes.xml
+++ b/lib/erl_interface/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/part_notes_history.xml b/lib/erl_interface/doc/src/part_notes_history.xml
index 7cf1b25f54..401fea4dd4 100644
--- a/lib/erl_interface/doc/src/part_notes_history.xml
+++ b/lib/erl_interface/doc/src/part_notes_history.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/ref_man.xml b/lib/erl_interface/doc/src/ref_man.xml
index 2e115dba5b..0cf060829b 100644
--- a/lib/erl_interface/doc/src/ref_man.xml
+++ b/lib/erl_interface/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/ref_man_ei.xml b/lib/erl_interface/doc/src/ref_man_ei.xml
index bbb2b402cd..d24828c394 100644
--- a/lib/erl_interface/doc/src/ref_man_ei.xml
+++ b/lib/erl_interface/doc/src/ref_man_ei.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/ref_man_erl_interface.xml b/lib/erl_interface/doc/src/ref_man_erl_interface.xml
index c5836c11c3..fb39c5a7e4 100644
--- a/lib/erl_interface/doc/src/ref_man_erl_interface.xml
+++ b/lib/erl_interface/doc/src/ref_man_erl_interface.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/doc/src/registry.xml b/lib/erl_interface/doc/src/registry.xml
index cd7e5d976d..285a2402b8 100644
--- a/lib/erl_interface/doc/src/registry.xml
+++ b/lib/erl_interface/doc/src/registry.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/erl_interface/include/ei.h b/lib/erl_interface/include/ei.h
index c1dbc8470d..948f89be85 100644
--- a/lib/erl_interface/include/ei.h
+++ b/lib/erl_interface/include/ei.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2014. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -121,8 +121,11 @@
#define ERL_SMALL_ATOM_UTF8_EXT 'w'
#define ERL_REFERENCE_EXT 'e'
#define ERL_NEW_REFERENCE_EXT 'r'
+#define ERL_NEWER_REFERENCE_EXT 'Z'
#define ERL_PORT_EXT 'f'
+#define ERL_NEW_PORT_EXT 'Y'
#define ERL_PID_EXT 'g'
+#define ERL_NEW_PID_EXT 'X'
#define ERL_SMALL_TUPLE_EXT 'h'
#define ERL_LARGE_TUPLE_EXT 'i'
#define ERL_NIL_EXT 'j'
diff --git a/lib/erl_interface/include/ei_connect.h b/lib/erl_interface/include/ei_connect.h
index c8eeba7ae0..825fee0165 100644
--- a/lib/erl_interface/include/ei_connect.h
+++ b/lib/erl_interface/include/ei_connect.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2003-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2003-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/include/eicode.h b/lib/erl_interface/include/eicode.h
index 1077528d3c..efba630d13 100644
--- a/lib/erl_interface/include/eicode.h
+++ b/lib/erl_interface/include/eicode.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2003-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2003-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/include/erl_interface.h b/lib/erl_interface/include/erl_interface.h
index 3f9804da7d..c22f21af2b 100644
--- a/lib/erl_interface/include/erl_interface.h
+++ b/lib/erl_interface/include/erl_interface.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -211,14 +211,14 @@ typedef struct {
Erl_Atom_data node;
unsigned int number;
unsigned int serial;
- unsigned char creation;
+ unsigned int creation;
} Erl_Pid;
typedef struct {
Erl_Header h;
Erl_Atom_data node;
unsigned int number;
- unsigned char creation;
+ unsigned int creation;
} Erl_Port;
typedef struct {
@@ -226,7 +226,7 @@ typedef struct {
Erl_Atom_data node;
int len;
unsigned int n[3];
- unsigned char creation;
+ unsigned int creation;
} Erl_Ref;
typedef struct {
diff --git a/lib/erl_interface/src/Makefile b/lib/erl_interface/src/Makefile
index 868407a23f..31f34d4bba 100644
--- a/lib/erl_interface/src/Makefile
+++ b/lib/erl_interface/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/Makefile.in b/lib/erl_interface/src/Makefile.in
index 777d709b1e..4f393e952c 100644
--- a/lib/erl_interface/src/Makefile.in
+++ b/lib/erl_interface/src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -126,11 +126,7 @@ else
WARNFLAGS = @WFLAGS@
endif
-ifneq ($(findstring ose,$(TARGET)),ose)
CFLAGS = @LIB_CFLAGS@ $(WARNFLAGS) $(INCFLAGS) $(TYPE_FLAGS)
-else
-CFLAGS = @CFLAGS@ $(INCFLAGS)
-endif
PROG_CFLAGS = @CFLAGS@ $(WARNFLAGS) $(INCFLAGS) $(TYPE_FLAGS) -Ilegacy
ifeq ($(findstring vxworks,$(TARGET)),vxworks)
@@ -210,12 +206,8 @@ MDD_ERLLIB = $(OBJDIR)/$(LIBPRE)erl_interface_mdd$(LIBEXT)
# Specify targets to build
###########################################################################
-ifneq ($(findstring ose,$(TARGET)),ose)
EXE_TARGETS = \
$(ERL_CALL)
-else
-EXE_TARGETS =
-endif
ifeq ($(USING_VC),yes)
@@ -480,44 +472,6 @@ ERLSOURCES = \
SOURCES = $(EISOURCES) $(ERLSOURCES)
-OSE_EISOURCES = \
- $(DECODESRC) \
- $(ENCODESRC) \
- misc/ei_decode_term.c \
- misc/ei_format.c \
- misc/ei_locking.c \
- misc/ei_malloc.c \
- misc/ei_printterm.c \
- misc/ei_pthreads.c \
- misc/ei_trace.c \
- misc/ei_x_encode.c \
- misc/eimd5.c \
- misc/get_type.c \
- misc/show_msg.c \
- misc/ei_compat.c \
- registry/hash_dohash.c \
- registry/hash_foreach.c \
- registry/hash_freetab.c \
- registry/hash_insert.c \
- registry/hash_isprime.c \
- registry/hash_lookup.c \
- registry/hash_newtab.c \
- registry/hash_remove.c \
- registry/hash_resize.c \
- registry/hash_rlookup.c
-
-OSE_ERLSOURCES = \
- legacy/decode_term.c \
- legacy/encode_term.c \
- legacy/erl_error.c \
- legacy/erl_eterm.c \
- legacy/erl_fix_alloc.c \
- legacy/erl_format.c \
- legacy/erl_malloc.c \
- legacy/erl_marshal.c
-
-OSE_SOURCES = $(OSE_EISOURCES) $(OSE_ERLSOURCES)
-
NEVERUSED = \
whereis.c \
ei_send.c \
@@ -532,13 +486,8 @@ ERLCALL = \
# Note that encode/decode_term.c defines ei functions that is
# located in the erl_interface library, not ei library.
-ifneq ($(findstring ose,$(TARGET)),ose)
ST_EIOBJECTS = $(addprefix $(ST_OBJDIR)/,$(notdir $(EISOURCES:.c=.o)))
ST_ERLOBJECTS = $(addprefix $(ST_OBJDIR)/,$(notdir $(ERLSOURCES:.c=.o)))
-else
-ST_EIOBJECTS = $(addprefix $(ST_OBJDIR)/,$(notdir $(OSE_EISOURCES:.c=.o)))
-ST_ERLOBJECTS = $(addprefix $(ST_OBJDIR)/,$(notdir $(OSE_ERLSOURCES:.c=.o)))
-endif
MT_EIOBJECTS = $(addprefix $(MT_OBJDIR)/,$(notdir $(EISOURCES:.c=.o)))
MT_ERLOBJECTS = $(addprefix $(MT_OBJDIR)/,$(notdir $(ERLSOURCES:.c=.o)))
MD_EIOBJECTS = $(addprefix $(MD_OBJDIR)/,$(notdir $(EISOURCES:.c=.o)))
@@ -587,14 +536,6 @@ $(TARGET)/config.h:
$(V_at)echo "#define HAVE_SOCKLEN_T 1" >> $@
endif
-ifeq ($(findstring ose,$(TARGET)),ose)
-$(TARGET)/config.h:
- $(gen_verbose)
- $(V_at)echo "/* Generated by Makefile */" > $@
- $(V_at)echo "#define HAVE_STRERROR 1" >> $@
- $(V_at)echo "#define HAVE_SOCKLEN_T 1" >> $@
-endif
-
###########################################################################
# Default rules, normal and threaded
###########################################################################
@@ -719,9 +660,6 @@ $(ST_OBJDIR)/erl_start.o: prog/erl_start.c
$(V_CC) $(CFLAGS) -c $< -o $@
else
-ifeq ($(findstring ose,$(TARGET)),ose)
-$(ERL_CALL):
-else
ifdef THR_DEFS
$(ERL_CALL): $(ERLCALL) ../include/ei.h $(MT_EILIB)
$(ld_verbose)$(PURIFY) $(CC) $(PROG_CFLAGS) $(THR_DEFS) $(LDFLAGS) -o $@ $(ERLCALL) \
@@ -733,7 +671,6 @@ $(ERL_CALL): $(ERLCALL) ../include/ei.h $(ST_EILIB)
endif
endif
endif
-endif
###########################################################################
# Fake application targets used to test header files and linking
diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c
index 7b1b2810bb..6dc51adee1 100644
--- a/lib/erl_interface/src/connect/ei_connect.c
+++ b/lib/erl_interface/src/connect/ei_connect.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -1342,7 +1342,8 @@ static int send_name_or_challenge(int fd, char *nodename,
| DFLAG_NEW_FLOATS
| DFLAG_SMALL_ATOM_TAGS
| DFLAG_UTF8_ATOMS
- | DFLAG_MAP_TAG));
+ | DFLAG_MAP_TAG
+ | DFLAG_BIG_CREATION));
if (f_chall)
put32be(s, challenge);
memcpy(s, nodename, strlen(nodename));
diff --git a/lib/erl_interface/src/connect/ei_connect_int.h b/lib/erl_interface/src/connect/ei_connect_int.h
index efb6719a1d..0bcccaa84b 100644
--- a/lib/erl_interface/src/connect/ei_connect_int.h
+++ b/lib/erl_interface/src/connect/ei_connect_int.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -106,6 +106,7 @@ extern int h_errno;
#define DFLAG_SMALL_ATOM_TAGS 0x4000
#define DFLAG_UTF8_ATOMS 0x10000
#define DFLAG_MAP_TAG 0x20000
+#define DFLAG_BIG_CREATION 0x40000
ei_cnode *ei_fd_to_cnode(int fd);
int ei_distversion(int fd);
diff --git a/lib/erl_interface/src/connect/ei_resolve.c b/lib/erl_interface/src/connect/ei_resolve.c
index 414cb8be3e..fd0c659373 100644
--- a/lib/erl_interface/src/connect/ei_resolve.c
+++ b/lib/erl_interface/src/connect/ei_resolve.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/connect/ei_resolve.h b/lib/erl_interface/src/connect/ei_resolve.h
index 71ebeab20b..10a49ffbc6 100644
--- a/lib/erl_interface/src/connect/ei_resolve.h
+++ b/lib/erl_interface/src/connect/ei_resolve.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/connect/eirecv.c b/lib/erl_interface/src/connect/eirecv.c
index b036c8969e..7b9dbfc387 100644
--- a/lib/erl_interface/src/connect/eirecv.c
+++ b/lib/erl_interface/src/connect/eirecv.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/connect/eirecv.h b/lib/erl_interface/src/connect/eirecv.h
index d56f36b286..bd40061c07 100644
--- a/lib/erl_interface/src/connect/eirecv.h
+++ b/lib/erl_interface/src/connect/eirecv.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/connect/eisend.h b/lib/erl_interface/src/connect/eisend.h
index 6762c4cf40..d555208ed0 100644
--- a/lib/erl_interface/src/connect/eisend.h
+++ b/lib/erl_interface/src/connect/eisend.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/connect/send.c b/lib/erl_interface/src/connect/send.c
index 826bc1f22a..37d7db6d68 100644
--- a/lib/erl_interface/src/connect/send.c
+++ b/lib/erl_interface/src/connect/send.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/connect/send_exit.c b/lib/erl_interface/src/connect/send_exit.c
index f71acfa155..2e298e3221 100644
--- a/lib/erl_interface/src/connect/send_exit.c
+++ b/lib/erl_interface/src/connect/send_exit.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/connect/send_reg.c b/lib/erl_interface/src/connect/send_reg.c
index dac3877d2a..62478f042d 100644
--- a/lib/erl_interface/src/connect/send_reg.c
+++ b/lib/erl_interface/src/connect/send_reg.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_atom.c b/lib/erl_interface/src/decode/decode_atom.c
index df1e5b9350..b3bba82434 100644
--- a/lib/erl_interface/src/decode/decode_atom.c
+++ b/lib/erl_interface/src/decode/decode_atom.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_big.c b/lib/erl_interface/src/decode/decode_big.c
index 5739d159bf..cbbbd3f0b7 100644
--- a/lib/erl_interface/src/decode/decode_big.c
+++ b/lib/erl_interface/src/decode/decode_big.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_bignum.c b/lib/erl_interface/src/decode/decode_bignum.c
index 9d09aefd76..70a86e29c9 100644
--- a/lib/erl_interface/src/decode/decode_bignum.c
+++ b/lib/erl_interface/src/decode/decode_bignum.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_binary.c b/lib/erl_interface/src/decode/decode_binary.c
index 66014181b5..5b8d234984 100644
--- a/lib/erl_interface/src/decode/decode_binary.c
+++ b/lib/erl_interface/src/decode/decode_binary.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_boolean.c b/lib/erl_interface/src/decode/decode_boolean.c
index edaf1486d4..23cfd16f77 100644
--- a/lib/erl_interface/src/decode/decode_boolean.c
+++ b/lib/erl_interface/src/decode/decode_boolean.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_char.c b/lib/erl_interface/src/decode/decode_char.c
index 0290c71988..babf34c90c 100644
--- a/lib/erl_interface/src/decode/decode_char.c
+++ b/lib/erl_interface/src/decode/decode_char.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_double.c b/lib/erl_interface/src/decode/decode_double.c
index 413d575b1a..1ce8b2a417 100644
--- a/lib/erl_interface/src/decode/decode_double.c
+++ b/lib/erl_interface/src/decode/decode_double.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2010. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_fun.c b/lib/erl_interface/src/decode/decode_fun.c
index c2e321c067..f944c028af 100644
--- a/lib/erl_interface/src/decode/decode_fun.c
+++ b/lib/erl_interface/src/decode/decode_fun.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_intlist.c b/lib/erl_interface/src/decode/decode_intlist.c
index 68f38075e2..494371d778 100644
--- a/lib/erl_interface/src/decode/decode_intlist.c
+++ b/lib/erl_interface/src/decode/decode_intlist.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_list_header.c b/lib/erl_interface/src/decode/decode_list_header.c
index e198f52d52..4c6ce3859e 100644
--- a/lib/erl_interface/src/decode/decode_list_header.c
+++ b/lib/erl_interface/src/decode/decode_list_header.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_long.c b/lib/erl_interface/src/decode/decode_long.c
index 15bfb28cf0..b5f36adbb6 100644
--- a/lib/erl_interface/src/decode/decode_long.c
+++ b/lib/erl_interface/src/decode/decode_long.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_longlong.c b/lib/erl_interface/src/decode/decode_longlong.c
index 22f2a63d2e..e052cb7164 100644
--- a/lib/erl_interface/src/decode/decode_longlong.c
+++ b/lib/erl_interface/src/decode/decode_longlong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_pid.c b/lib/erl_interface/src/decode/decode_pid.c
index 7fbb818b31..e1055aa5c9 100644
--- a/lib/erl_interface/src/decode/decode_pid.c
+++ b/lib/erl_interface/src/decode/decode_pid.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,18 +27,22 @@ int ei_decode_pid(const char *buf, int *index, erlang_pid *p)
{
const char *s = buf + *index;
const char *s0 = s;
+ const char tag = get8(s);
- if (get8(s) != ERL_PID_EXT) return -1;
+ if (tag != ERL_PID_EXT && tag != ERL_NEW_PID_EXT) return -1;
if (p) {
if (get_atom(&s, p->node, NULL) < 0) return -1;
p->num = get32be(s) & 0x7fff; /* 15 bits */
p->serial = get32be(s) & 0x1fff; /* 13 bits */
- p->creation = get8(s) & 0x03; /* 2 bits */
+ if (tag == ERL_PID_EXT)
+ p->creation = get8(s) & 0x03; /* 2 bits */
+ else
+ p->creation = get32be(s); /* 32 bits */
}
else {
if (get_atom(&s, NULL, NULL) < 0) return -1;
- s+= 9;
+ s+= (tag == ERL_PID_EXT ? 9 : 12);
}
*index += s-s0;
diff --git a/lib/erl_interface/src/decode/decode_port.c b/lib/erl_interface/src/decode/decode_port.c
index e039b5b845..337648d803 100644
--- a/lib/erl_interface/src/decode/decode_port.c
+++ b/lib/erl_interface/src/decode/decode_port.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,17 +26,21 @@ int ei_decode_port(const char *buf, int *index, erlang_port *p)
{
const char *s = buf + *index;
const char *s0 = s;
+ const char tag = get8(s);
- if (get8(s) != ERL_PORT_EXT) return -1;
+ if (tag != ERL_PORT_EXT && tag != ERL_NEW_PORT_EXT) return -1;
if (p) {
if (get_atom(&s, p->node, NULL) < 0) return -1;
p->id = get32be(s) & 0x0fffffff /* 28 bits */;
- p->creation = get8(s) & 0x03;
+ if (tag == ERL_PORT_EXT)
+ p->creation = get8(s) & 0x03;
+ else
+ p->creation = get32be(s);
}
else {
if (get_atom(&s, NULL, NULL) < 0) return -1;
- s += 5;
+ s += (tag == ERL_PORT_EXT ? 5 : 8);
}
*index += s-s0;
diff --git a/lib/erl_interface/src/decode/decode_ref.c b/lib/erl_interface/src/decode/decode_ref.c
index a6b87e5a21..c9b38c1c3b 100644
--- a/lib/erl_interface/src/decode/decode_ref.c
+++ b/lib/erl_interface/src/decode/decode_ref.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,8 +28,9 @@ int ei_decode_ref(const char *buf, int *index, erlang_ref *p)
const char *s = buf + *index;
const char *s0 = s;
int count, i;
+ const char tag = get8(s);
- switch (get8(s)) {
+ switch (tag) {
case ERL_REFERENCE_EXT:
if (p) {
if (get_atom(&s, p->node, NULL) < 0) return -1;
@@ -47,18 +48,23 @@ int ei_decode_ref(const char *buf, int *index, erlang_ref *p)
return 0;
break;
- case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEWER_REFERENCE_EXT:
+
/* first the integer count */
count = get16be(s);
if (p) {
p->len = count;
if (get_atom(&s, p->node, NULL) < 0) return -1;
- p->creation = get8(s) & 0x03;
+ if (tag == ERL_NEW_REFERENCE_EXT)
+ p->creation = get8(s) & 0x03;
+ else
+ p->creation = get32be(s);
}
else {
if (get_atom(&s, NULL, NULL) < 0) return -1;
- s += 1;
+ s += (tag == ERL_NEW_REFERENCE_EXT ? 1 : 4);
}
/* finally the id integers */
diff --git a/lib/erl_interface/src/decode/decode_skip.c b/lib/erl_interface/src/decode/decode_skip.c
index d49ae0007f..0db315f09b 100644
--- a/lib/erl_interface/src/decode/decode_skip.c
+++ b/lib/erl_interface/src/decode/decode_skip.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,12 +35,15 @@ int ei_skip_term(const char* buf, int* index)
NULL, NULL) < 0) return -1;
break;
case ERL_PID_EXT:
+ case ERL_NEW_PID_EXT:
if (ei_decode_pid(buf, index, NULL) < 0) return -1;
break;
case ERL_PORT_EXT:
+ case ERL_NEW_PORT_EXT:
if (ei_decode_port(buf, index, NULL) < 0) return -1;
break;
case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEWER_REFERENCE_EXT:
case ERL_REFERENCE_EXT:
if (ei_decode_ref(buf, index, NULL) < 0) return -1;
break;
diff --git a/lib/erl_interface/src/decode/decode_skip.h b/lib/erl_interface/src/decode/decode_skip.h
index a0934fdf35..be497e8601 100644
--- a/lib/erl_interface/src/decode/decode_skip.h
+++ b/lib/erl_interface/src/decode/decode_skip.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_string.c b/lib/erl_interface/src/decode/decode_string.c
index 98b7384dc5..3fe4fdd02d 100644
--- a/lib/erl_interface/src/decode/decode_string.c
+++ b/lib/erl_interface/src/decode/decode_string.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_trace.c b/lib/erl_interface/src/decode/decode_trace.c
index bcc53bce96..738d6f0885 100644
--- a/lib/erl_interface/src/decode/decode_trace.c
+++ b/lib/erl_interface/src/decode/decode_trace.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_tuple_header.c b/lib/erl_interface/src/decode/decode_tuple_header.c
index ea60a03ddc..4507edbc8e 100644
--- a/lib/erl_interface/src/decode/decode_tuple_header.c
+++ b/lib/erl_interface/src/decode/decode_tuple_header.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2014. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_ulong.c b/lib/erl_interface/src/decode/decode_ulong.c
index dbd86f5022..8675ae257f 100644
--- a/lib/erl_interface/src/decode/decode_ulong.c
+++ b/lib/erl_interface/src/decode/decode_ulong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_ulonglong.c b/lib/erl_interface/src/decode/decode_ulonglong.c
index e579df41aa..0f0eaeb5da 100644
--- a/lib/erl_interface/src/decode/decode_ulonglong.c
+++ b/lib/erl_interface/src/decode/decode_ulonglong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/decode/decode_version.c b/lib/erl_interface/src/decode/decode_version.c
index b2146d3280..00a85bea35 100644
--- a/lib/erl_interface/src/decode/decode_version.c
+++ b/lib/erl_interface/src/decode/decode_version.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/eidefs.mk.in b/lib/erl_interface/src/eidefs.mk.in
index 4f6c4e5a3c..dc34ad478a 100644
--- a/lib/erl_interface/src/eidefs.mk.in
+++ b/lib/erl_interface/src/eidefs.mk.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/eicode.h b/lib/erl_interface/src/encode/eicode.h
index 351e88cf2b..1db9a0b65a 100644
--- a/lib/erl_interface/src/encode/eicode.h
+++ b/lib/erl_interface/src/encode/eicode.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_atom.c b/lib/erl_interface/src/encode/encode_atom.c
index 372122f3eb..c1817628e5 100644
--- a/lib/erl_interface/src/encode/encode_atom.c
+++ b/lib/erl_interface/src/encode/encode_atom.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_big.c b/lib/erl_interface/src/encode/encode_big.c
index f758070d8c..cf542a5557 100644
--- a/lib/erl_interface/src/encode/encode_big.c
+++ b/lib/erl_interface/src/encode/encode_big.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2009. All Rights Reserved.
+ * Copyright Ericsson AB 2009-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_bignum.c b/lib/erl_interface/src/encode/encode_bignum.c
index ebd1853b21..6e418df0c7 100644
--- a/lib/erl_interface/src/encode/encode_bignum.c
+++ b/lib/erl_interface/src/encode/encode_bignum.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_binary.c b/lib/erl_interface/src/encode/encode_binary.c
index 91dab32c29..4471c51769 100644
--- a/lib/erl_interface/src/encode/encode_binary.c
+++ b/lib/erl_interface/src/encode/encode_binary.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_boolean.c b/lib/erl_interface/src/encode/encode_boolean.c
index d98cb5ad09..61e7e5e6e7 100644
--- a/lib/erl_interface/src/encode/encode_boolean.c
+++ b/lib/erl_interface/src/encode/encode_boolean.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_char.c b/lib/erl_interface/src/encode/encode_char.c
index 87fdef7bdd..fab56469aa 100644
--- a/lib/erl_interface/src/encode/encode_char.c
+++ b/lib/erl_interface/src/encode/encode_char.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_double.c b/lib/erl_interface/src/encode/encode_double.c
index 8943cefa11..cff220639a 100644
--- a/lib/erl_interface/src/encode/encode_double.c
+++ b/lib/erl_interface/src/encode/encode_double.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2010. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_fun.c b/lib/erl_interface/src/encode/encode_fun.c
index 14f66dcde1..3bfc7530d1 100644
--- a/lib/erl_interface/src/encode/encode_fun.c
+++ b/lib/erl_interface/src/encode/encode_fun.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_list_header.c b/lib/erl_interface/src/encode/encode_list_header.c
index 0ddca107d7..409bd98ea0 100644
--- a/lib/erl_interface/src/encode/encode_list_header.c
+++ b/lib/erl_interface/src/encode/encode_list_header.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_long.c b/lib/erl_interface/src/encode/encode_long.c
index cf99a7488c..ef3b92cd9e 100644
--- a/lib/erl_interface/src/encode/encode_long.c
+++ b/lib/erl_interface/src/encode/encode_long.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_longlong.c b/lib/erl_interface/src/encode/encode_longlong.c
index fff170c32d..2a1cbedce1 100644
--- a/lib/erl_interface/src/encode/encode_longlong.c
+++ b/lib/erl_interface/src/encode/encode_longlong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_pid.c b/lib/erl_interface/src/encode/encode_pid.c
index 7b01b7045f..d14746b40f 100644
--- a/lib/erl_interface/src/encode/encode_pid.c
+++ b/lib/erl_interface/src/encode/encode_pid.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,7 +24,8 @@
int ei_encode_pid(char *buf, int *index, const erlang_pid *p)
{
- char *s = buf + *index;
+ char* s = buf + *index;
+ const char tag = (p->creation > 3) ? ERL_NEW_PID_EXT : ERL_PID_EXT;
++(*index); /* skip ERL_PID_EXT */
if (ei_encode_atom_len_as(buf, index, p->node, strlen(p->node),
@@ -32,17 +33,21 @@ int ei_encode_pid(char *buf, int *index, const erlang_pid *p)
return -1;
if (buf) {
- put8(s,ERL_PID_EXT);
+ put8(s, tag);
s = buf + *index;
/* now the integers */
put32be(s,p->num & 0x7fff); /* 15 bits */
put32be(s,p->serial & 0x1fff); /* 13 bits */
- put8(s,(p->creation & 0x03)); /* 2 bits */
+ if (tag == ERL_PID_EXT) {
+ put8(s,(p->creation & 0x03)); /* 2 bits */
+ } else {
+ put32be(s, p->creation); /* 32 bits */
+ }
}
- *index += 4 + 4 + 1;
+ *index += 4 + 4 + (tag == ERL_PID_EXT ? 1 : 4);
return 0;
}
diff --git a/lib/erl_interface/src/encode/encode_port.c b/lib/erl_interface/src/encode/encode_port.c
index a7468e5917..eb464380c0 100644
--- a/lib/erl_interface/src/encode/encode_port.c
+++ b/lib/erl_interface/src/encode/encode_port.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@
int ei_encode_port(char *buf, int *index, const erlang_port *p)
{
char *s = buf + *index;
+ const char tag = p->creation > 3 ? ERL_NEW_PORT_EXT : ERL_PORT_EXT;
++(*index); /* skip ERL_PORT_EXT */
if (ei_encode_atom_len_as(buf, index, p->node, strlen(p->node), ERLANG_UTF8,
@@ -32,16 +33,19 @@ int ei_encode_port(char *buf, int *index, const erlang_port *p)
return -1;
}
if (buf) {
- put8(s,ERL_PORT_EXT);
+ put8(s, tag);
s = buf + *index;
/* now the integers */
put32be(s,p->id & 0x0fffffff /* 28 bits */);
- put8(s,(p->creation & 0x03));
+ if (tag == ERL_PORT_EXT) {
+ put8(s,(p->creation & 0x03));
+ } else {
+ put32be(s, p->creation);
+ }
}
-
- *index += 4 + 1;
+ *index += 4 + (tag == ERL_PORT_EXT ? 1 : 4);
return 0;
}
diff --git a/lib/erl_interface/src/encode/encode_ref.c b/lib/erl_interface/src/encode/encode_ref.c
index 0f27a086f0..5ccfc32c6d 100644
--- a/lib/erl_interface/src/encode/encode_ref.c
+++ b/lib/erl_interface/src/encode/encode_ref.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@
int ei_encode_ref(char *buf, int *index, const erlang_ref *p)
{
+ const char tag = (p->creation > 3) ? ERL_NEWER_REFERENCE_EXT : ERL_NEW_REFERENCE_EXT;
char *s = buf + *index;
int i;
@@ -36,7 +37,7 @@ int ei_encode_ref(char *buf, int *index, const erlang_ref *p)
/* Always encode as an extended reference; all participating parties
are now expected to be able to decode extended references. */
if (buf) {
- put8(s,ERL_NEW_REFERENCE_EXT);
+ put8(s, tag);
/* first, number of integers */
put16be(s, p->len);
@@ -45,12 +46,15 @@ int ei_encode_ref(char *buf, int *index, const erlang_ref *p)
s = buf + *index;
/* now the integers */
- put8(s,(p->creation & 0x03));
+ if (tag == ERL_NEW_REFERENCE_EXT)
+ put8(s,(p->creation & 0x03));
+ else
+ put32be(s, p->creation);
for (i = 0; i < p->len; i++)
put32be(s,p->n[i]);
}
- *index += p->len*4 + 1;
+ *index += p->len*4 + (tag == ERL_NEW_REFERENCE_EXT ? 1 : 4);
return 0;
}
diff --git a/lib/erl_interface/src/encode/encode_string.c b/lib/erl_interface/src/encode/encode_string.c
index 180fe3f1da..a45eae934d 100644
--- a/lib/erl_interface/src/encode/encode_string.c
+++ b/lib/erl_interface/src/encode/encode_string.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_trace.c b/lib/erl_interface/src/encode/encode_trace.c
index 95b49a04e6..d0e6aec474 100644
--- a/lib/erl_interface/src/encode/encode_trace.c
+++ b/lib/erl_interface/src/encode/encode_trace.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_tuple_header.c b/lib/erl_interface/src/encode/encode_tuple_header.c
index 254840a3d1..e75df57bed 100644
--- a/lib/erl_interface/src/encode/encode_tuple_header.c
+++ b/lib/erl_interface/src/encode/encode_tuple_header.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2014. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_ulong.c b/lib/erl_interface/src/encode/encode_ulong.c
index 98b26fed40..94b45b2dd4 100644
--- a/lib/erl_interface/src/encode/encode_ulong.c
+++ b/lib/erl_interface/src/encode/encode_ulong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_ulonglong.c b/lib/erl_interface/src/encode/encode_ulonglong.c
index 069138a458..e16acc10ef 100644
--- a/lib/erl_interface/src/encode/encode_ulonglong.c
+++ b/lib/erl_interface/src/encode/encode_ulonglong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/encode/encode_version.c b/lib/erl_interface/src/encode/encode_version.c
index 1694697260..41a2deda12 100644
--- a/lib/erl_interface/src/encode/encode_version.c
+++ b/lib/erl_interface/src/encode/encode_version.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/epmd/ei_epmd.h b/lib/erl_interface/src/epmd/ei_epmd.h
index 50974b89c5..ac153b6e66 100644
--- a/lib/erl_interface/src/epmd/ei_epmd.h
+++ b/lib/erl_interface/src/epmd/ei_epmd.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2010. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/epmd/epmd_port.c b/lib/erl_interface/src/epmd/epmd_port.c
index dedc21e679..2ec418b24a 100644
--- a/lib/erl_interface/src/epmd/epmd_port.c
+++ b/lib/erl_interface/src/epmd/epmd_port.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/epmd/epmd_publish.c b/lib/erl_interface/src/epmd/epmd_publish.c
index 6370a5ab37..47d68a6db0 100644
--- a/lib/erl_interface/src/epmd/epmd_publish.c
+++ b/lib/erl_interface/src/epmd/epmd_publish.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2010. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/epmd/epmd_unpublish.c b/lib/erl_interface/src/epmd/epmd_unpublish.c
index ef84938e5b..255d0ffb59 100644
--- a/lib/erl_interface/src/epmd/epmd_unpublish.c
+++ b/lib/erl_interface/src/epmd/epmd_unpublish.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/erl_interface.app.src b/lib/erl_interface/src/erl_interface.app.src
index 8ab3e1012f..f00cdfba88 100644
--- a/lib/erl_interface/src/erl_interface.app.src
+++ b/lib/erl_interface/src/erl_interface.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/erl_interface.appup.src b/lib/erl_interface/src/erl_interface.appup.src
index eee7be1540..eb9854d22d 100644
--- a/lib/erl_interface/src/erl_interface.appup.src
+++ b/lib/erl_interface/src/erl_interface.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/decode_term.c b/lib/erl_interface/src/legacy/decode_term.c
index fabbee19a9..72bacc3123 100644
--- a/lib/erl_interface/src/legacy/decode_term.c
+++ b/lib/erl_interface/src/legacy/decode_term.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2010. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/encode_term.c b/lib/erl_interface/src/legacy/encode_term.c
index 47837214e8..df740ab487 100644
--- a/lib/erl_interface/src/legacy/encode_term.c
+++ b/lib/erl_interface/src/legacy/encode_term.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_config.h b/lib/erl_interface/src/legacy/erl_config.h
index 1da150bdbd..fb72169f23 100644
--- a/lib/erl_interface/src/legacy/erl_config.h
+++ b/lib/erl_interface/src/legacy/erl_config.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_connect.c b/lib/erl_interface/src/legacy/erl_connect.c
index 4b1004ae2b..7ffd545d3e 100644
--- a/lib/erl_interface/src/legacy/erl_connect.c
+++ b/lib/erl_interface/src/legacy/erl_connect.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_connect.h b/lib/erl_interface/src/legacy/erl_connect.h
index eb3292b679..6cb5d5cd1b 100644
--- a/lib/erl_interface/src/legacy/erl_connect.h
+++ b/lib/erl_interface/src/legacy/erl_connect.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_error.c b/lib/erl_interface/src/legacy/erl_error.c
index d3309d2863..a3bbfbc58f 100644
--- a/lib/erl_interface/src/legacy/erl_error.c
+++ b/lib/erl_interface/src/legacy/erl_error.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_error.h b/lib/erl_interface/src/legacy/erl_error.h
index 27a8d13d0f..0cce083ae7 100644
--- a/lib/erl_interface/src/legacy/erl_error.h
+++ b/lib/erl_interface/src/legacy/erl_error.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_eterm.c b/lib/erl_interface/src/legacy/erl_eterm.c
index f2f35ab693..e4b3b49c7d 100644
--- a/lib/erl_interface/src/legacy/erl_eterm.c
+++ b/lib/erl_interface/src/legacy/erl_eterm.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -285,12 +285,12 @@ ETERM *erl_mk_pid(const char *node,
erl_errno = ENOMEM;
return NULL;
}
- erl_mk_pid_helper(ep, number, serial, creation);
+ erl_mk_pid_helper(ep, number, serial, creation & 0x03);
return ep;
}
void erl_mk_pid_helper(ETERM *ep, unsigned int number,
- unsigned int serial, unsigned char creation)
+ unsigned int serial, unsigned int creation)
{
ERL_PID_NUMBER(ep) = number & 0x7fff; /* 15 bits */
if (ei_internal_use_r9_pids_ports()) {
@@ -299,7 +299,7 @@ void erl_mk_pid_helper(ETERM *ep, unsigned int number,
else {
ERL_PID_SERIAL(ep) = serial & 0x1fff; /* 13 bits */
}
- ERL_PID_CREATION(ep) = creation & 0x03; /* 2 bits */
+ ERL_PID_CREATION(ep) = creation; /* 32 bits */
}
/*
@@ -326,7 +326,7 @@ ETERM *erl_mk_port(const char *node,
return ep;
}
-void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned char creation)
+void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned int creation)
{
if (ei_internal_use_r9_pids_ports()) {
ERL_PORT_NUMBER(ep) = number & 0x3ffff; /* 18 bits */
@@ -334,7 +334,7 @@ void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned char creation)
else {
ERL_PORT_NUMBER(ep) = number & 0x0fffffff; /* 18 bits */
}
- ERL_PORT_CREATION(ep) = creation & 0x03; /* 2 bits */
+ ERL_PORT_CREATION(ep) = creation; /* 32 bits */
}
/*
@@ -344,7 +344,7 @@ ETERM *__erl_mk_reference (ETERM* t,
const char *node,
size_t len,
unsigned int n[],
- unsigned char creation)
+ unsigned int creation)
{
if (t == NULL) {
if (node == NULL) return NULL;
@@ -363,7 +363,7 @@ ETERM *__erl_mk_reference (ETERM* t,
ERL_REF_NUMBERS(t)[0] = n[0] & 0x3ffff; /* 18 bits */
ERL_REF_NUMBERS(t)[1] = n[1];
ERL_REF_NUMBERS(t)[2] = n[2];
- ERL_REF_CREATION(t) = creation & 0x03; /* 2 bits */
+ ERL_REF_CREATION(t) = creation; /* 32 bits */
return t;
}
diff --git a/lib/erl_interface/src/legacy/erl_eterm.h b/lib/erl_interface/src/legacy/erl_eterm.h
index d9a26b2541..e2f3a90531 100644
--- a/lib/erl_interface/src/legacy/erl_eterm.h
+++ b/lib/erl_interface/src/legacy/erl_eterm.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -56,9 +56,9 @@ typedef struct _heapmark {
} Erl_HeapMark;
-void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned char creation);
-void erl_mk_pid_helper(ETERM*, unsigned,unsigned, unsigned char);
-ETERM * __erl_mk_reference(ETERM*, const char *, size_t, unsigned int n[], unsigned char);
+void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned int creation);
+void erl_mk_pid_helper(ETERM*, unsigned,unsigned, unsigned int);
+ETERM * __erl_mk_reference(ETERM*, const char *, size_t, unsigned int n[], unsigned int);
int erl_current_fix_desc(void);
#endif /* _ERL_ETERM_H */
diff --git a/lib/erl_interface/src/legacy/erl_fix_alloc.c b/lib/erl_interface/src/legacy/erl_fix_alloc.c
index 70d592bfe1..890a9ce291 100644
--- a/lib/erl_interface/src/legacy/erl_fix_alloc.c
+++ b/lib/erl_interface/src/legacy/erl_fix_alloc.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_fix_alloc.h b/lib/erl_interface/src/legacy/erl_fix_alloc.h
index af86202ae7..50d1368e34 100644
--- a/lib/erl_interface/src/legacy/erl_fix_alloc.h
+++ b/lib/erl_interface/src/legacy/erl_fix_alloc.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_format.c b/lib/erl_interface/src/legacy/erl_format.c
index c5ef47236d..45f5489e54 100644
--- a/lib/erl_interface/src/legacy/erl_format.c
+++ b/lib/erl_interface/src/legacy/erl_format.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_format.h b/lib/erl_interface/src/legacy/erl_format.h
index 388267f859..92fa068206 100644
--- a/lib/erl_interface/src/legacy/erl_format.h
+++ b/lib/erl_interface/src/legacy/erl_format.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_global.h b/lib/erl_interface/src/legacy/erl_global.h
index 3c99b2fe40..d2eec08b35 100644
--- a/lib/erl_interface/src/legacy/erl_global.h
+++ b/lib/erl_interface/src/legacy/erl_global.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_internal.h b/lib/erl_interface/src/legacy/erl_internal.h
index 22160d8911..25cf3e4f42 100644
--- a/lib/erl_interface/src/legacy/erl_internal.h
+++ b/lib/erl_interface/src/legacy/erl_internal.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_malloc.c b/lib/erl_interface/src/legacy/erl_malloc.c
index cad7f75261..27ef8c4b32 100644
--- a/lib/erl_interface/src/legacy/erl_malloc.c
+++ b/lib/erl_interface/src/legacy/erl_malloc.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_malloc.h b/lib/erl_interface/src/legacy/erl_malloc.h
index cfbd190b61..6cbc01faba 100644
--- a/lib/erl_interface/src/legacy/erl_malloc.h
+++ b/lib/erl_interface/src/legacy/erl_malloc.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_marshal.c b/lib/erl_interface/src/legacy/erl_marshal.c
index a4216c9541..2bdf5f2134 100644
--- a/lib/erl_interface/src/legacy/erl_marshal.c
+++ b/lib/erl_interface/src/legacy/erl_marshal.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -120,10 +120,13 @@ void erl_init_marshal(void)
cmp_array[ERL_SMALL_ATOM_UTF8_EXT] = ERL_ATOM_CMP;
cmp_array[ERL_REFERENCE_EXT] = ERL_REF_CMP;
cmp_array[ERL_NEW_REFERENCE_EXT] = ERL_REF_CMP;
+ cmp_array[ERL_NEWER_REFERENCE_EXT]=ERL_REF_CMP;
cmp_array[ERL_FUN_EXT] = ERL_FUN_CMP;
cmp_array[ERL_NEW_FUN_EXT] = ERL_FUN_CMP;
cmp_array[ERL_PORT_EXT] = ERL_PORT_CMP;
+ cmp_array[ERL_NEW_PORT_EXT] = ERL_PORT_CMP;
cmp_array[ERL_PID_EXT] = ERL_PID_CMP;
+ cmp_array[ERL_NEW_PID_EXT] = ERL_PID_CMP;
cmp_array[ERL_SMALL_TUPLE_EXT] = ERL_TUPLE_CMP;
cmp_array[ERL_LARGE_TUPLE_EXT] = ERL_TUPLE_CMP;
cmp_array[ERL_NIL_EXT] = ERL_NIL_CMP;
@@ -304,8 +307,8 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist)
*(*ext)++ = ul & 0xff;
return 0;
- case ERL_PID:
- *(*ext)++ = ERL_PID_EXT;
+ case ERL_PID: {
+ unsigned char* tagp = (*ext)++;
/* First poke in node as an atom */
encode_atom(&ep->uval.pidval.node, ext);
/* And then fill in the integer fields */
@@ -319,17 +322,29 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist)
*(*ext)++ = (i >> 16) &0xff;
*(*ext)++ = (i >> 8) &0xff;
*(*ext)++ = i &0xff;
- *(*ext)++ = ERL_PID_CREATION(ep);
+
+ i = ERL_PID_CREATION(ep);
+ if ((unsigned int)i <= 3) {
+ *tagp = ERL_PID_EXT;
+ *(*ext)++ = i;
+ } else {
+ *tagp = ERL_NEW_PID_EXT;
+ *(*ext)++ = (i >> 24) &0xff;
+ *(*ext)++ = (i >> 16) &0xff;
+ *(*ext)++ = (i >> 8) &0xff;
+ *(*ext)++ = i &0xff;
+ }
return 0;
+ }
case ERL_REF: {
+ unsigned char* tagp = (*ext)++;
+
int len, j;
/* Always encode as an extended reference; all
participating parties are now expected to be
able to decode extended references. */
- *(*ext)++ = ERL_NEW_REFERENCE_EXT;
-
i = strlen((char *)ERL_REF_NODE(ep));
len = ERL_REF_LEN(ep);
*(*ext)++ = (len >> 8) &0xff;
@@ -337,7 +352,18 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist)
encode_atom(&ep->uval.refval.node, ext);
- *(*ext)++ = ERL_REF_CREATION(ep);
+ i = ERL_REF_CREATION(ep);
+ if ((unsigned int)i <= 3) {
+ *tagp = ERL_NEW_REFERENCE_EXT;
+ *(*ext)++ = i;
+ } else {
+ *tagp = ERL_NEWER_REFERENCE_EXT;
+ *(*ext)++ = (i >> 24) &0xff;
+ *(*ext)++ = (i >> 16) &0xff;
+ *(*ext)++ = (i >> 8) &0xff;
+ *(*ext)++ = i &0xff;
+ }
+
/* Then the integer fields */
for (j = 0; j < ERL_REF_LEN(ep); j++) {
i = ERL_REF_NUMBERS(ep)[j];
@@ -348,8 +374,8 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist)
}
}
return 0;
- case ERL_PORT:
- *(*ext)++ = ERL_PORT_EXT;
+ case ERL_PORT: {
+ unsigned char* tagp = (*ext)++;
/* First poke in node as an atom */
encode_atom(&ep->uval.portval.node, ext);
/* Then the integer fields */
@@ -358,8 +384,20 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist)
*(*ext)++ = (i >> 16) &0xff;
*(*ext)++ = (i >> 8) &0xff;
*(*ext)++ = i &0xff;
- *(*ext)++ = ERL_PORT_CREATION(ep);
+
+ i = ERL_PORT_CREATION(ep);
+ if ((unsigned int)i <= 3) {
+ *tagp = ERL_PORT_EXT;
+ *(*ext)++ = i;
+ } else {
+ *tagp = ERL_NEW_PORT_EXT;
+ *(*ext)++ = (i >> 24) &0xff;
+ *(*ext)++ = (i >> 16) &0xff;
+ *(*ext)++ = (i >> 8) &0xff;
+ *(*ext)++ = i &0xff;
+ }
return 0;
+ }
case ERL_EMPTY_LIST:
*(*ext)++ = ERL_NIL_EXT;
break;
@@ -698,12 +736,14 @@ static ETERM *erl_decode_it(unsigned char **ext)
unsigned int u,sign;
int i,j,arity;
double ff;
+ unsigned char tag;
/* Assume we are going to decode an integer */
ep = erl_alloc_eterm(ERL_INTEGER);
ERL_COUNT(ep) = 1;
- switch (*(*ext)++)
+ tag = *(*ext)++;
+ switch (tag)
{
case ERL_INTEGER_EXT:
i = (int) (**ext << 24) | ((*ext)[1] << 16) |
@@ -727,6 +767,13 @@ static ETERM *erl_decode_it(unsigned char **ext)
((*ext)[2]) << 8 |((*ext)[3]);
*ext += 4;
big_cont:
+
+#ifdef _MSC_VER
+#define MAX_TO_NEGATE 0x8000000000000000Ui64
+#else
+#define MAX_TO_NEGATE 0x8000000000000000ULL
+#endif
+
sign = *(*ext)++;
if (arity > 8)
goto big_truncate;
@@ -763,23 +810,28 @@ static ETERM *erl_decode_it(unsigned char **ext)
*ext += arity;
return ep;
} else {
- /* Fits in a long long */
- int x;
- long long l = 0LL;
-
- for(x = 0 ; x < arity ; x++) {
- l |= ((long long)(*ext)[x]) << ((long long)(8*x));
- }
- if (sign) {
- l = -l;
- if (l > 0) goto big_truncate;
- }
-
- ERL_TYPE(ep) = ERL_LONGLONG;
- ep->uval.llval.i = l;
- *ext += arity;
- return ep;
+ /* Fits in a signed long long */
+ int x;
+ unsigned long long l = 0LL;
+ long long sl;
+
+ for(x = 0 ; x < arity ; x++) {
+ l |= ((unsigned long long)(*ext)[x]) << ((unsigned long long)(8*x));
+ }
+
+ sl = (long long)l;
+
+ if (sign && l != MAX_TO_NEGATE) {
+ sl = -sl;
+ if (sl > 0) goto big_truncate;
+ }
+
+ ERL_TYPE(ep) = ERL_LONGLONG;
+ ep->uval.llval.i = sl;
+ *ext += arity;
+ return ep;
}
+#undef MAX_TO_NEGATE
big_truncate:
/* truncate to: (+/-) 1 */
#ifdef DEBUG
@@ -801,9 +853,10 @@ static ETERM *erl_decode_it(unsigned char **ext)
return ep;
case ERL_PID_EXT:
+ case ERL_NEW_PID_EXT:
{
unsigned int number, serial;
- unsigned char creation;
+ unsigned int creation;
ERL_TYPE(ep) = ERL_PID;
if (read_atom(ext, &ep->uval.pidval.node) < 0) return NULL;
@@ -815,7 +868,13 @@ static ETERM *erl_decode_it(unsigned char **ext)
serial = ((*ext)[0] << 24) | ((*ext)[1]) << 16 |
((*ext)[2]) << 8 | ((*ext)[3]);
*ext += 4;
- creation = *(*ext)++;
+ if (tag == ERL_PID_EXT)
+ creation = *(*ext)++;
+ else {
+ creation = ((*ext)[0] << 24) | ((*ext)[1]) << 16 |
+ ((*ext)[2]) << 8 | ((*ext)[3]);
+ *ext += 4;
+ }
erl_mk_pid_helper(ep, number, serial, creation);
return ep;
}
@@ -836,11 +895,12 @@ static ETERM *erl_decode_it(unsigned char **ext)
return ep;
}
- case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEWER_REFERENCE_EXT:
{
size_t cnt, i;
unsigned int n[3];
- unsigned char creation;
+ unsigned int creation;
ERL_TYPE(ep) = ERL_REF;
cnt = ((*ext)[0] << 8) | (*ext)[1];
@@ -849,7 +909,13 @@ static ETERM *erl_decode_it(unsigned char **ext)
if (read_atom(ext, &ep->uval.refval.node) < 0) return NULL;
/* get the integers */
- creation = *(*ext)++;
+ if (tag == ERL_NEW_REFERENCE_EXT)
+ creation = *(*ext)++;
+ else {
+ creation = ((*ext)[0] << 24) | ((*ext)[1]) << 16 |
+ ((*ext)[2]) << 8 | ((*ext)[3]);
+ *ext += 4;
+ }
for(i = 0; i < cnt; i++)
{
n[i] = ((*ext)[0] << 24) | ((*ext)[1]) << 16 |
@@ -861,9 +927,10 @@ static ETERM *erl_decode_it(unsigned char **ext)
}
case ERL_PORT_EXT:
+ case ERL_NEW_PORT_EXT:
{
unsigned int number;
- unsigned char creation;
+ unsigned int creation;
ERL_TYPE(ep) = ERL_PORT;
if (read_atom(ext, &ep->uval.portval.node) < 0) return NULL;
@@ -872,7 +939,13 @@ static ETERM *erl_decode_it(unsigned char **ext)
number = ((*ext)[0] << 24) | ((*ext)[1]) << 16 |
((*ext)[2]) << 8 | ((*ext)[3]);
*ext += 4;
- creation = *(*ext)++;
+ if (tag == ERL_PORT_EXT)
+ creation = *(*ext)++;
+ else {
+ creation = (((*ext)[0] << 24) | ((*ext)[1]) << 16 |
+ ((*ext)[2]) << 8 | ((*ext)[3]));
+ *ext += 4;
+ }
erl_mk_port_helper(ep, number, creation);
return ep;
}
@@ -1114,11 +1187,14 @@ unsigned char erl_ext_type(unsigned char *ext)
case ERL_SMALL_ATOM_UTF8_EXT:
return ERL_ATOM;
case ERL_PID_EXT:
+ case ERL_NEW_PID_EXT:
return ERL_PID;
case ERL_PORT_EXT:
+ case ERL_NEW_PORT_EXT:
return ERL_PORT;
case ERL_REFERENCE_EXT:
case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEWER_REFERENCE_EXT:
return ERL_REF;
case ERL_NIL_EXT:
return ERL_EMPTY_LIST;
@@ -1167,9 +1243,12 @@ int erl_ext_size(unsigned char *t)
case ERL_SMALL_ATOM_EXT:
case ERL_SMALL_ATOM_UTF8_EXT:
case ERL_PID_EXT:
+ case ERL_NEW_PID_EXT:
case ERL_PORT_EXT:
+ case ERL_NEW_PORT_EXT:
case ERL_REFERENCE_EXT:
case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEWER_REFERENCE_EXT:
case ERL_NIL_EXT:
case ERL_BINARY_EXT:
case ERL_STRING_EXT:
@@ -1240,8 +1319,9 @@ static int jump(unsigned char **ext)
{
int j,k,i=0;
int n;
+ const int tag = *(*ext)++;
- switch (*(*ext)++) {
+ switch (tag) {
case ERL_VERSION_MAGIC:
return jump(ext);
case ERL_INTEGER_EXT:
@@ -1257,22 +1337,29 @@ static int jump(unsigned char **ext)
jump_atom(ext);
break;
case ERL_PID_EXT:
- /* eat first atom */
if (!jump_atom(ext)) return 0;
- *ext += 9; /* Two int's and the creation field */
+ *ext += 4 + 4 + 1;
break;
+ case ERL_NEW_PID_EXT:
+ if (!jump_atom(ext)) return 0;
+ *ext += 4 + 4 + 4;
+ break;
case ERL_REFERENCE_EXT:
case ERL_PORT_EXT:
- /* first field is an atom */
if (!jump_atom(ext)) return 0;
- *ext += 5; /* One int and the creation field */
+ *ext += 4 + 1;
break;
+ case ERL_NEW_PORT_EXT:
+ if (!jump_atom(ext)) return 0;
+ *ext += 4 + 4;
+ break;
case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEWER_REFERENCE_EXT:
n = (**ext << 8) | (*ext)[1];
*ext += 2;
/* first field is an atom */
if (!jump_atom(ext)) return 0;
- *ext += 4*n+1;
+ *ext += 4*n + (tag == ERL_NEW_REFERENCE_EXT ? 1 : 4);
break;
case ERL_NIL_EXT:
/* We just passed it... */
@@ -1605,7 +1692,6 @@ static int cmp_exe2(unsigned char **e1, unsigned char **e2)
{
int min, ret,i,j,k;
double ff1, ff2;
- unsigned char *tmp1, *tmp2;
unsigned char tag1, tag2;
if ( ((*e1)[0] == ERL_STRING_EXT) && ((*e2)[0] == ERL_LIST_EXT) ) {
@@ -1649,47 +1735,68 @@ static int cmp_exe2(unsigned char **e1, unsigned char **e2)
*e1 += i;
*e2 += j;
return ret;
- case ERL_PID_EXT: {
- unsigned char *n1 = *e1;
- unsigned char *n2 = *e2;
- CMP_EXT_SKIP_ATOM(*e1); CMP_EXT_SKIP_ATOM(*e2);
- *e1 += 9; *e2 += 9;
+ case ERL_PID_EXT:
+ case ERL_NEW_PID_EXT: {
+ erlang_pid pid1, pid2;
+ unsigned char* buf1 = *e1 - 1;
+ unsigned char* buf2 = *e2 - 1;
+ int ix1 = 0, ix2 = 0;
+
+ if (ei_decode_pid((char*)buf1, &ix1, &pid1) ||
+ ei_decode_pid((char*)buf2, &ix2, &pid2))
+ return CMP_EXT_ERROR_CODE;
+
+ *e1 = buf1 + ix1;
+ *e2 = buf2 + ix2;
/* First compare serials ... */
- tmp1 = *e1 - 5; tmp2 = *e2 - 5;
- CMP_EXT_INT32_BE(tmp1, tmp2);
+ if (pid1.serial < pid2.serial) return -1;
+ else if (pid1.serial > pid2.serial) return 1;
/* ... then ids ... */
- tmp1 -= 4; tmp2 -= 4;
- CMP_EXT_INT32_BE(tmp1, tmp2);
+ if (pid1.num < pid2.num) return -1;
+ else if (pid1.num > pid2.num) return 1;
/* ... then node names ... */
- ret = cmp_exe2(&n1, &n2);
- if (ret != 0)
- return ret;
+ j = strcmp(pid1.node, pid2.node);
+ if (j < 0) return -1;
+ else if (j > 0) return 1;
/* ... and then finaly creations. */
- tmp1 += 8; tmp2 += 8;
- if (*tmp1 != *tmp2)
- return *tmp1 < *tmp2 ? -1 : 1;
+ if (pid1.creation < pid2.creation) return -1;
+ else if (pid1.creation > pid2.creation) return 1;
+
return 0;
}
case ERL_PORT_EXT:
- /* First compare node names ... */
- if (!IS_ERL_ATOM(**e1) || !IS_ERL_ATOM(**e2))
- return CMP_EXT_ERROR_CODE;
- ret = cmp_exe2(e1, e2);
- *e1 += 5; *e2 += 5;
- if (ret != 0)
- return ret;
+ case ERL_NEW_PORT_EXT: {
+ erlang_port port1, port2;
+ unsigned char* buf1 = *e1 - 1;
+ unsigned char* buf2 = *e2 - 1;
+ int ix1 = 0, ix2 = 0;
+
+ if (ei_decode_port((char*)buf1, &ix1, &port1) ||
+ ei_decode_port((char*)buf2, &ix2, &port2))
+ return CMP_EXT_ERROR_CODE;
+
+ *e1 = buf1 + ix1;
+ *e2 = buf2 + ix2;
+
+ /* First compare node names ... */
+ j = strcmp(port1.node, port2.node);
+ if (j < 0) return -1;
+ else if (j > 0) return 1;
+
/* ... then creations ... */
- tmp1 = *e1 - 1; tmp2 = *e2 - 1;
- if (*tmp1 != *tmp2)
- return *tmp1 < *tmp2 ? -1 : 1;
+ if (port1.creation < port2.creation) return -1;
+ else if (port1.creation > port2.creation) return 1;
+
/* ... and then finaly ids. */
- tmp1 -= 4; tmp2 -= 4;
- CMP_EXT_INT32_BE(tmp1, tmp2);
- return 0;
+ if (port1.id < port2.id) return -1;
+ else if (port1.id > port2.id) return 1;
+
+ return 0;
+ }
case ERL_NIL_EXT: return 0;
case ERL_LIST_EXT:
i = (**e1 << 24) | ((*e1)[1] << 16) |((*e1)[2] << 8) | (*e1)[3];
diff --git a/lib/erl_interface/src/legacy/erl_marshal.h b/lib/erl_interface/src/legacy/erl_marshal.h
index c7fe2139a6..c1963b832d 100644
--- a/lib/erl_interface/src/legacy/erl_marshal.h
+++ b/lib/erl_interface/src/legacy/erl_marshal.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_resolve.c b/lib/erl_interface/src/legacy/erl_resolve.c
index cc6558471a..bb09caec85 100644
--- a/lib/erl_interface/src/legacy/erl_resolve.c
+++ b/lib/erl_interface/src/legacy/erl_resolve.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2003-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2003-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_timeout.c b/lib/erl_interface/src/legacy/erl_timeout.c
index 1651131dff..e36ea0e250 100644
--- a/lib/erl_interface/src/legacy/erl_timeout.c
+++ b/lib/erl_interface/src/legacy/erl_timeout.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/erl_timeout.h b/lib/erl_interface/src/legacy/erl_timeout.h
index 17d45915f5..6bcfa5ecbb 100644
--- a/lib/erl_interface/src/legacy/erl_timeout.h
+++ b/lib/erl_interface/src/legacy/erl_timeout.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/global_names.c b/lib/erl_interface/src/legacy/global_names.c
index bf717bb32b..ee808620fb 100644
--- a/lib/erl_interface/src/legacy/global_names.c
+++ b/lib/erl_interface/src/legacy/global_names.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/global_register.c b/lib/erl_interface/src/legacy/global_register.c
index 9905977514..4cb6d8071f 100644
--- a/lib/erl_interface/src/legacy/global_register.c
+++ b/lib/erl_interface/src/legacy/global_register.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/global_unregister.c b/lib/erl_interface/src/legacy/global_unregister.c
index ace7343503..27f68670ca 100644
--- a/lib/erl_interface/src/legacy/global_unregister.c
+++ b/lib/erl_interface/src/legacy/global_unregister.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/global_whereis.c b/lib/erl_interface/src/legacy/global_whereis.c
index 23be4a1055..13c4c93ca7 100644
--- a/lib/erl_interface/src/legacy/global_whereis.c
+++ b/lib/erl_interface/src/legacy/global_whereis.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/legacy/portability.h b/lib/erl_interface/src/legacy/portability.h
index d544c63c99..42a78662d5 100644
--- a/lib/erl_interface/src/legacy/portability.h
+++ b/lib/erl_interface/src/legacy/portability.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_compat.c b/lib/erl_interface/src/misc/ei_compat.c
index ceb597e970..93d7dbfb83 100644
--- a/lib/erl_interface/src/misc/ei_compat.c
+++ b/lib/erl_interface/src/misc/ei_compat.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_decode_term.c b/lib/erl_interface/src/misc/ei_decode_term.c
index 0ec67dde09..63a7034508 100644
--- a/lib/erl_interface/src/misc/ei_decode_term.c
+++ b/lib/erl_interface/src/misc/ei_decode_term.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@
int ei_decode_ei_term(const char* buf, int* index, ei_term* term)
{
const char* s = buf + *index, * s0 = s;
- int i, n, sign;
+ int n, sign;
char c;
if (term == NULL) return -1;
@@ -47,47 +47,27 @@ int ei_decode_ei_term(const char* buf, int* index, ei_term* term)
break;
case ERL_FLOAT_EXT:
case NEW_FLOAT_EXT:
- return ei_decode_double(buf, index, &term->value.d_val);
+ return (ei_decode_double(buf, index, &term->value.d_val) < 0
+ ? -1 : 1);
case ERL_ATOM_EXT:
case ERL_ATOM_UTF8_EXT:
case ERL_SMALL_ATOM_EXT:
case ERL_SMALL_ATOM_UTF8_EXT:
- return ei_decode_atom(buf, index, term->value.atom_name);
+ return (ei_decode_atom(buf, index, term->value.atom_name) < 0
+ ? -1 : 1);
case ERL_REFERENCE_EXT:
- /* first the nodename */
- if (get_atom(&s, term->value.ref.node, NULL) < 0) return -1;
- /* now the numbers: num (4), creation (1) */
- term->value.ref.n[0] = get32be(s);
- term->value.ref.len = 1;
- term->value.ref.creation = get8(s) & 0x03;
- break;
case ERL_NEW_REFERENCE_EXT:
- /* first the integer count */
- term->value.ref.len = get16be(s);
- /* then the nodename */
- if (get_atom(&s, term->value.ref.node, NULL) < 0) return -1;
- /* creation */
- term->value.ref.creation = get8(s) & 0x03;
- /* finally the id integers */
- for (i = 0; (i<term->value.ref.len) && (i<3); i++) {
- term->value.ref.n[i] = get32be(s);
- }
- if (term->value.ref.len > 3) {
- s += 4 * (term->value.ref.len - 3);
- }
- break;
+ case ERL_NEWER_REFERENCE_EXT:
+ return (ei_decode_ref(buf, index, &term->value.ref) < 0
+ ? -1 : 1);
case ERL_PORT_EXT:
- if (get_atom(&s, term->value.port.node, NULL) < 0) return -1;
- term->value.port.id = get32be(s) & 0x0fffffff; /* 28 bits */;
- term->value.port.creation = get8(s) & 0x03;
- break;
+ case ERL_NEW_PORT_EXT:
+ return (ei_decode_port(buf, index, &term->value.port) < 0
+ ? -1 : 1);
case ERL_PID_EXT:
- if (get_atom(&s, term->value.pid.node, NULL) < 0) return -1;
- /* now the numbers: num (4), serial (4), creation (1) */
- term->value.pid.num = get32be(s) & 0x7fff; /* 15 bits */
- term->value.pid.serial = get32be(s) & 0x1fff; /* 13 bits */
- term->value.pid.creation = get8(s) & 0x03; /* 2 bits */
- break;
+ case ERL_NEW_PID_EXT:
+ return (ei_decode_pid(buf, index, &term->value.pid) < 0
+ ? -1 : 1);
case ERL_SMALL_TUPLE_EXT:
term->arity = get8(s);
break;
diff --git a/lib/erl_interface/src/misc/ei_decode_term.h b/lib/erl_interface/src/misc/ei_decode_term.h
index 1f7cedff02..cf2b8f7e86 100644
--- a/lib/erl_interface/src/misc/ei_decode_term.h
+++ b/lib/erl_interface/src/misc/ei_decode_term.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_format.c b/lib/erl_interface/src/misc/ei_format.c
index 191f4ec7b5..a188171f40 100644
--- a/lib/erl_interface/src/misc/ei_format.c
+++ b/lib/erl_interface/src/misc/ei_format.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_format.h b/lib/erl_interface/src/misc/ei_format.h
index 5fa3247d60..7a418008a1 100644
--- a/lib/erl_interface/src/misc/ei_format.h
+++ b/lib/erl_interface/src/misc/ei_format.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_internal.h b/lib/erl_interface/src/misc/ei_internal.h
index 56cdb53fbf..aa6aacd703 100644
--- a/lib/erl_interface/src/misc/ei_internal.h
+++ b/lib/erl_interface/src/misc/ei_internal.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_locking.c b/lib/erl_interface/src/misc/ei_locking.c
index c4c4a8e735..85b2a5fd8b 100644
--- a/lib/erl_interface/src/misc/ei_locking.c
+++ b/lib/erl_interface/src/misc/ei_locking.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_locking.h b/lib/erl_interface/src/misc/ei_locking.h
index 99b88ead3b..1bbee2d499 100644
--- a/lib/erl_interface/src/misc/ei_locking.h
+++ b/lib/erl_interface/src/misc/ei_locking.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_malloc.c b/lib/erl_interface/src/misc/ei_malloc.c
index 347973bbd6..a8921bc5b5 100644
--- a/lib/erl_interface/src/misc/ei_malloc.c
+++ b/lib/erl_interface/src/misc/ei_malloc.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_malloc.h b/lib/erl_interface/src/misc/ei_malloc.h
index b02811101b..b62a3cf4d7 100644
--- a/lib/erl_interface/src/misc/ei_malloc.h
+++ b/lib/erl_interface/src/misc/ei_malloc.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_portio.c b/lib/erl_interface/src/misc/ei_portio.c
index d4fa2c30e7..8cd35bf2e5 100644
--- a/lib/erl_interface/src/misc/ei_portio.c
+++ b/lib/erl_interface/src/misc/ei_portio.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_portio.h b/lib/erl_interface/src/misc/ei_portio.h
index 24dcee4780..fbb61b0ccf 100644
--- a/lib/erl_interface/src/misc/ei_portio.h
+++ b/lib/erl_interface/src/misc/ei_portio.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,6 +21,12 @@
*/
#ifndef _EI_PORTIO_H
#define _EI_PORTIO_H
+#if !defined(__WIN32__) || !defined(VXWORKS)
+#ifdef HAVE_WRITEV
+/* Declaration of struct iovec *iov should be visible in this scope. */
+#include <sys/uio.h>
+#endif
+#endif
int ei_accept_t(int fd, void *addr, void *addrlen, unsigned ms);
int ei_connect_t(int fd, void *sinp, int sin_siz, unsigned ms);
@@ -29,8 +35,7 @@ int ei_write_fill(int fd, const char *buf, int len);
int ei_read_fill_t(int fd, char* buf, int len, unsigned ms);
int ei_write_fill_t(int fd, const char *buf, int len, unsigned ms);
#ifdef HAVE_WRITEV
-int ei_writev_fill_t(int fd, const struct iovec *iov, int iovcnt,
- unsigned ms);
+int ei_writev_fill_t(int fd, const struct iovec *iov, int iovcnt, unsigned ms);
#endif
#endif /* _EI_PORTIO_H */
diff --git a/lib/erl_interface/src/misc/ei_printterm.c b/lib/erl_interface/src/misc/ei_printterm.c
index 702ee9566d..058de00de5 100644
--- a/lib/erl_interface/src/misc/ei_printterm.c
+++ b/lib/erl_interface/src/misc/ei_printterm.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -151,15 +151,18 @@ static int print_term(FILE* fp, ei_x_buff* x,
}
break;
case ERL_PID_EXT:
+ case ERL_NEW_PID_EXT:
if (ei_decode_pid(buf, index, &pid) < 0) goto err;
ch_written += xprintf(fp, x, "<%s.%d.%d>", pid.node,
pid.num, pid.serial);
break;
case ERL_PORT_EXT:
+ case ERL_NEW_PORT_EXT:
if (ei_decode_port(buf, index, &port) < 0) goto err;
ch_written += xprintf(fp, x, "#Port<%d.%d>", port.id, port.creation);
break;
case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEWER_REFERENCE_EXT:
case ERL_REFERENCE_EXT:
if (ei_decode_ref(buf, index, &ref) < 0) goto err;
ch_written += xprintf(fp, x, "#Ref<");
diff --git a/lib/erl_interface/src/misc/ei_printterm.h b/lib/erl_interface/src/misc/ei_printterm.h
index cb9e12c2dd..953ea00744 100644
--- a/lib/erl_interface/src/misc/ei_printterm.h
+++ b/lib/erl_interface/src/misc/ei_printterm.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_pthreads.c b/lib/erl_interface/src/misc/ei_pthreads.c
index 1d86fdb736..25608edeec 100644
--- a/lib/erl_interface/src/misc/ei_pthreads.c
+++ b/lib/erl_interface/src/misc/ei_pthreads.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_trace.c b/lib/erl_interface/src/misc/ei_trace.c
index b341f38105..53d90a9c51 100644
--- a/lib/erl_interface/src/misc/ei_trace.c
+++ b/lib/erl_interface/src/misc/ei_trace.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_trace.h b/lib/erl_interface/src/misc/ei_trace.h
index 0105a0c1f1..a0988ca8ae 100644
--- a/lib/erl_interface/src/misc/ei_trace.h
+++ b/lib/erl_interface/src/misc/ei_trace.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_x_encode.c b/lib/erl_interface/src/misc/ei_x_encode.c
index 4cd882235f..4ff5974663 100644
--- a/lib/erl_interface/src/misc/ei_x_encode.c
+++ b/lib/erl_interface/src/misc/ei_x_encode.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/ei_x_encode.h b/lib/erl_interface/src/misc/ei_x_encode.h
index f11d750b28..2c8e362caa 100644
--- a/lib/erl_interface/src/misc/ei_x_encode.h
+++ b/lib/erl_interface/src/misc/ei_x_encode.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/eidef.h b/lib/erl_interface/src/misc/eidef.h
index 9ac49434e6..f38824d826 100644
--- a/lib/erl_interface/src/misc/eidef.h
+++ b/lib/erl_interface/src/misc/eidef.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/eiext.h b/lib/erl_interface/src/misc/eiext.h
index caf98c8e70..ac60d73821 100644
--- a/lib/erl_interface/src/misc/eiext.h
+++ b/lib/erl_interface/src/misc/eiext.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/get_type.c b/lib/erl_interface/src/misc/get_type.c
index 6b95c1f470..aa69cd4d60 100644
--- a/lib/erl_interface/src/misc/get_type.c
+++ b/lib/erl_interface/src/misc/get_type.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -76,6 +76,15 @@ int ei_get_type_internal(const char *buf, const int *index,
*len = get32be(s); /* #digit_bytes */
break;
+ case ERL_NEW_PID_EXT:
+ *type = ERL_PID_EXT;
+ break;
+ case ERL_NEW_PORT_EXT:
+ *type = ERL_PORT_EXT;
+ break;
+ case ERL_NEWER_REFERENCE_EXT:
+ *type = ERL_NEW_REFERENCE_EXT;
+ break;
default:
*len = 0;
break;
diff --git a/lib/erl_interface/src/misc/putget.h b/lib/erl_interface/src/misc/putget.h
index f7b42b6efa..afc04e32f9 100644
--- a/lib/erl_interface/src/misc/putget.h
+++ b/lib/erl_interface/src/misc/putget.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/misc/show_msg.c b/lib/erl_interface/src/misc/show_msg.c
index b08b17aea4..5868cccba6 100644
--- a/lib/erl_interface/src/misc/show_msg.c
+++ b/lib/erl_interface/src/misc/show_msg.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -40,6 +40,8 @@
# include <time.h>
# endif
# endif
+#else
+# include <time.h>
#endif
#include "eiext.h"
@@ -398,6 +400,7 @@ static void show_term(const char *termbuf, int *index, FILE *stream)
break;
case ERL_PID_EXT:
+ case ERL_NEW_PID_EXT:
ei_decode_pid(termbuf,index,&pid);
show_pid(stream,&pid);
break;
@@ -432,6 +435,7 @@ static void show_term(const char *termbuf, int *index, FILE *stream)
case ERL_REFERENCE_EXT:
case ERL_NEW_REFERENCE_EXT:
+ case ERL_NEWER_REFERENCE_EXT:
ei_decode_ref(termbuf,index,&ref);
fprintf(stream,"#Ref<%s",ref.node);
for (i = 0; i < ref.len; i++) {
@@ -441,6 +445,7 @@ static void show_term(const char *termbuf, int *index, FILE *stream)
break;
case ERL_PORT_EXT:
+ case ERL_NEW_PORT_EXT:
ei_decode_port(termbuf,index,&port);
fprintf(stream,"#Port<%s.%u.%u>",port.node,port.id,port.creation);
break;
diff --git a/lib/erl_interface/src/misc/show_msg.h b/lib/erl_interface/src/misc/show_msg.h
index 1f1bd9cb17..de0f8fcdcd 100644
--- a/lib/erl_interface/src/misc/show_msg.h
+++ b/lib/erl_interface/src/misc/show_msg.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/not_used/ei_send.c b/lib/erl_interface/src/not_used/ei_send.c
index 437b62cc5d..8071876677 100644
--- a/lib/erl_interface/src/not_used/ei_send.c
+++ b/lib/erl_interface/src/not_used/ei_send.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/not_used/ei_send_reg.c b/lib/erl_interface/src/not_used/ei_send_reg.c
index f6b66e155c..ba9c7348f9 100644
--- a/lib/erl_interface/src/not_used/ei_send_reg.c
+++ b/lib/erl_interface/src/not_used/ei_send_reg.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/not_used/send_link.c b/lib/erl_interface/src/not_used/send_link.c
index 3c907897e0..7be476fd93 100644
--- a/lib/erl_interface/src/not_used/send_link.c
+++ b/lib/erl_interface/src/not_used/send_link.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/not_used/whereis.c b/lib/erl_interface/src/not_used/whereis.c
index 3b7cfb0ee7..4072fa7b33 100644
--- a/lib/erl_interface/src/not_used/whereis.c
+++ b/lib/erl_interface/src/not_used/whereis.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/prog/ei_fake_prog.c b/lib/erl_interface/src/prog/ei_fake_prog.c
index 2d149aec0c..c7a16dc7c4 100644
--- a/lib/erl_interface/src/prog/ei_fake_prog.c
+++ b/lib/erl_interface/src/prog/ei_fake_prog.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/prog/erl_call.c b/lib/erl_interface/src/prog/erl_call.c
index d36742c4f6..d233ed26a2 100644
--- a/lib/erl_interface/src/prog/erl_call.c
+++ b/lib/erl_interface/src/prog/erl_call.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/prog/erl_fake_prog.c b/lib/erl_interface/src/prog/erl_fake_prog.c
index 80d72eb933..093bad8d7c 100644
--- a/lib/erl_interface/src/prog/erl_fake_prog.c
+++ b/lib/erl_interface/src/prog/erl_fake_prog.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/prog/erl_start.c b/lib/erl_interface/src/prog/erl_start.c
index b7816f3ad4..d8f0632341 100644
--- a/lib/erl_interface/src/prog/erl_start.c
+++ b/lib/erl_interface/src/prog/erl_start.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/prog/erl_start.h b/lib/erl_interface/src/prog/erl_start.h
index a78dd16edb..1d0d584c45 100644
--- a/lib/erl_interface/src/prog/erl_start.h
+++ b/lib/erl_interface/src/prog/erl_start.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash.h b/lib/erl_interface/src/registry/hash.h
index 69882a79d9..7fcaced319 100644
--- a/lib/erl_interface/src/registry/hash.h
+++ b/lib/erl_interface/src/registry/hash.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_dohash.c b/lib/erl_interface/src/registry/hash_dohash.c
index 0be54e0d3d..6f859cef2e 100644
--- a/lib/erl_interface/src/registry/hash_dohash.c
+++ b/lib/erl_interface/src/registry/hash_dohash.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_foreach.c b/lib/erl_interface/src/registry/hash_foreach.c
index 2fe8eebfbc..b58df27e8e 100644
--- a/lib/erl_interface/src/registry/hash_foreach.c
+++ b/lib/erl_interface/src/registry/hash_foreach.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_freetab.c b/lib/erl_interface/src/registry/hash_freetab.c
index e509af4a69..0a2c0dcfe6 100644
--- a/lib/erl_interface/src/registry/hash_freetab.c
+++ b/lib/erl_interface/src/registry/hash_freetab.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_insert.c b/lib/erl_interface/src/registry/hash_insert.c
index d1b27ee6fe..0002cb64df 100644
--- a/lib/erl_interface/src/registry/hash_insert.c
+++ b/lib/erl_interface/src/registry/hash_insert.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_isprime.c b/lib/erl_interface/src/registry/hash_isprime.c
index 18fd74fbc7..58166c6957 100644
--- a/lib/erl_interface/src/registry/hash_isprime.c
+++ b/lib/erl_interface/src/registry/hash_isprime.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_lookup.c b/lib/erl_interface/src/registry/hash_lookup.c
index 3a6643ad69..31c30179df 100644
--- a/lib/erl_interface/src/registry/hash_lookup.c
+++ b/lib/erl_interface/src/registry/hash_lookup.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_newtab.c b/lib/erl_interface/src/registry/hash_newtab.c
index 08ecc60f8a..4baa5a7b41 100644
--- a/lib/erl_interface/src/registry/hash_newtab.c
+++ b/lib/erl_interface/src/registry/hash_newtab.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_remove.c b/lib/erl_interface/src/registry/hash_remove.c
index 63484daff6..080f15889e 100644
--- a/lib/erl_interface/src/registry/hash_remove.c
+++ b/lib/erl_interface/src/registry/hash_remove.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_resize.c b/lib/erl_interface/src/registry/hash_resize.c
index c556ab7b68..031d8bfbf6 100644
--- a/lib/erl_interface/src/registry/hash_resize.c
+++ b/lib/erl_interface/src/registry/hash_resize.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/hash_rlookup.c b/lib/erl_interface/src/registry/hash_rlookup.c
index d774089e36..b0a948673a 100644
--- a/lib/erl_interface/src/registry/hash_rlookup.c
+++ b/lib/erl_interface/src/registry/hash_rlookup.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg.h b/lib/erl_interface/src/registry/reg.h
index 92798f02c8..261e36ac06 100644
--- a/lib/erl_interface/src/registry/reg.h
+++ b/lib/erl_interface/src/registry/reg.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_close.c b/lib/erl_interface/src/registry/reg_close.c
index 1ac9e623a7..c1475383e1 100644
--- a/lib/erl_interface/src/registry/reg_close.c
+++ b/lib/erl_interface/src/registry/reg_close.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_delete.c b/lib/erl_interface/src/registry/reg_delete.c
index b1fb7a1fac..8882f611bc 100644
--- a/lib/erl_interface/src/registry/reg_delete.c
+++ b/lib/erl_interface/src/registry/reg_delete.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_dirty.c b/lib/erl_interface/src/registry/reg_dirty.c
index a128136054..00f19482c2 100644
--- a/lib/erl_interface/src/registry/reg_dirty.c
+++ b/lib/erl_interface/src/registry/reg_dirty.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_dump.c b/lib/erl_interface/src/registry/reg_dump.c
index d1347491e5..43c9824433 100644
--- a/lib/erl_interface/src/registry/reg_dump.c
+++ b/lib/erl_interface/src/registry/reg_dump.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_free.c b/lib/erl_interface/src/registry/reg_free.c
index aff6782925..d835520e76 100644
--- a/lib/erl_interface/src/registry/reg_free.c
+++ b/lib/erl_interface/src/registry/reg_free.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_get.c b/lib/erl_interface/src/registry/reg_get.c
index e3f111e746..67d99e231e 100644
--- a/lib/erl_interface/src/registry/reg_get.c
+++ b/lib/erl_interface/src/registry/reg_get.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_getf.c b/lib/erl_interface/src/registry/reg_getf.c
index 20071d6d95..35956c3d79 100644
--- a/lib/erl_interface/src/registry/reg_getf.c
+++ b/lib/erl_interface/src/registry/reg_getf.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_geti.c b/lib/erl_interface/src/registry/reg_geti.c
index 14c8a17b51..09709fdf3d 100644
--- a/lib/erl_interface/src/registry/reg_geti.c
+++ b/lib/erl_interface/src/registry/reg_geti.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_getp.c b/lib/erl_interface/src/registry/reg_getp.c
index b60aa9d37f..faff00bcb0 100644
--- a/lib/erl_interface/src/registry/reg_getp.c
+++ b/lib/erl_interface/src/registry/reg_getp.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_gets.c b/lib/erl_interface/src/registry/reg_gets.c
index 32d34197c2..27fd83ac03 100644
--- a/lib/erl_interface/src/registry/reg_gets.c
+++ b/lib/erl_interface/src/registry/reg_gets.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_make.c b/lib/erl_interface/src/registry/reg_make.c
index 11373afab9..ed77a740b6 100644
--- a/lib/erl_interface/src/registry/reg_make.c
+++ b/lib/erl_interface/src/registry/reg_make.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_open.c b/lib/erl_interface/src/registry/reg_open.c
index 9965416599..73c2140145 100644
--- a/lib/erl_interface/src/registry/reg_open.c
+++ b/lib/erl_interface/src/registry/reg_open.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_purge.c b/lib/erl_interface/src/registry/reg_purge.c
index b585a43a64..08483e32f5 100644
--- a/lib/erl_interface/src/registry/reg_purge.c
+++ b/lib/erl_interface/src/registry/reg_purge.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_resize.c b/lib/erl_interface/src/registry/reg_resize.c
index 18a2c2670e..b451a28348 100644
--- a/lib/erl_interface/src/registry/reg_resize.c
+++ b/lib/erl_interface/src/registry/reg_resize.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_restore.c b/lib/erl_interface/src/registry/reg_restore.c
index 49e8f2740d..75d073303f 100644
--- a/lib/erl_interface/src/registry/reg_restore.c
+++ b/lib/erl_interface/src/registry/reg_restore.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_set.c b/lib/erl_interface/src/registry/reg_set.c
index 0519246a7f..95b90adb87 100644
--- a/lib/erl_interface/src/registry/reg_set.c
+++ b/lib/erl_interface/src/registry/reg_set.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_setf.c b/lib/erl_interface/src/registry/reg_setf.c
index abbe409f10..e0879cb3d5 100644
--- a/lib/erl_interface/src/registry/reg_setf.c
+++ b/lib/erl_interface/src/registry/reg_setf.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_seti.c b/lib/erl_interface/src/registry/reg_seti.c
index afb3b1fee7..507ed9907e 100644
--- a/lib/erl_interface/src/registry/reg_seti.c
+++ b/lib/erl_interface/src/registry/reg_seti.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_setp.c b/lib/erl_interface/src/registry/reg_setp.c
index dd8038a811..1dd158778a 100644
--- a/lib/erl_interface/src/registry/reg_setp.c
+++ b/lib/erl_interface/src/registry/reg_setp.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_sets.c b/lib/erl_interface/src/registry/reg_sets.c
index 7f0e64162f..d281d732b7 100644
--- a/lib/erl_interface/src/registry/reg_sets.c
+++ b/lib/erl_interface/src/registry/reg_sets.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_stat.c b/lib/erl_interface/src/registry/reg_stat.c
index e876aa566c..e946199f4a 100644
--- a/lib/erl_interface/src/registry/reg_stat.c
+++ b/lib/erl_interface/src/registry/reg_stat.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/src/registry/reg_tabstat.c b/lib/erl_interface/src/registry/reg_tabstat.c
index 2c5d185ec1..1a3e654090 100644
--- a/lib/erl_interface/src/registry/reg_tabstat.c
+++ b/lib/erl_interface/src/registry/reg_tabstat.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/Makefile b/lib/erl_interface/test/Makefile
index 800573e8e4..94f4b422d6 100644
--- a/lib/erl_interface/test/Makefile
+++ b/lib/erl_interface/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/Makefile.src b/lib/erl_interface/test/Makefile.src
index f105a1a3d1..8cf2ea0933 100644
--- a/lib/erl_interface/test/Makefile.src
+++ b/lib/erl_interface/test/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/all_SUITE_data/Makefile.first b/lib/erl_interface/test/all_SUITE_data/Makefile.first
index fe295b5e5c..b83fa6ff5c 100644
--- a/lib/erl_interface/test/all_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/all_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2009. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/all_SUITE_data/Makefile.src b/lib/erl_interface/test/all_SUITE_data/Makefile.src
index 476784230b..4f27b097c8 100644
--- a/lib/erl_interface/test/all_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/all_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/all_SUITE_data/ei_runner.c b/lib/erl_interface/test/all_SUITE_data/ei_runner.c
index 3a0de22df4..cd7a67c57c 100644
--- a/lib/erl_interface/test/all_SUITE_data/ei_runner.c
+++ b/lib/erl_interface/test/all_SUITE_data/ei_runner.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -198,8 +198,8 @@ void free_packet(char* packet)
* ----- ----------------------------
* [$b|Bytes] {bytes, Bytes}
* [$e] eot
- * [$f] test_server:fail()
- * [$f|Reason] test_server:fail(Reason)
+ * [$f] ct:fail()
+ * [$f|Reason] ct:fail(Reason)
* [$t|EncodedTerm] {term, Term}
* [$N] 'NULL'
* [$m|Message] io:format("~s", [Message]) (otherwise ignored)
@@ -211,7 +211,7 @@ void free_packet(char* packet)
* you implement a test case entirely in C code.
*
* If the ok argument is zero, a [$f] reply will be sent to the
- * Erlang side (causing test_server:fail() to be called); otherwise,
+ * Erlang side (causing ct:fail() to be called); otherwise,
* the atom 'eot' will be sent to Erlang.
*
* If you need to provide more details on a failure, use the fail() function.
@@ -251,16 +251,21 @@ do_report(file, line, ok)
/*
- * This function causes a call to test_server:fail(Reason) on the
+ * This function causes a call to ct:fail(Reason) on the
* Erlang side.
*/
-void do_fail(char* file, int line, char* reason)
+void do_fail(const char* file, int line, const char* reason, ...)
{
+ va_list ap;
char sbuf[2048];
+ char* sp = sbuf;
- sbuf[0] = 'f';
- sprintf(sbuf+1, "%s, line %d: %s", file, line, reason);
+ *sp++ = 'f';
+ sp += sprintf(sp, "%s, line %d: ", file, line);
+ va_start(ap, reason);
+ sp += vsprintf(sp, reason, ap);
+ va_end(ap);
reply(sbuf, 1+strlen(sbuf+1));
}
diff --git a/lib/erl_interface/test/all_SUITE_data/ei_runner.h b/lib/erl_interface/test/all_SUITE_data/ei_runner.h
index 62997d00a0..2608661303 100644
--- a/lib/erl_interface/test/all_SUITE_data/ei_runner.h
+++ b/lib/erl_interface/test/all_SUITE_data/ei_runner.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -52,10 +52,11 @@ void free_packet(char*);
*/
#define fail(reason) do_fail(__FILE__, __LINE__, reason)
+#define fail1(reason, a1) do_fail(__FILE__, __LINE__, reason, a1)
#define report(ok) do_report(__FILE__, __LINE__, ok)
void do_report(char* file, int line, int ok);
-void do_fail(char* file, int line, char* reason);
+void do_fail(const char* file, int line, const char* reason, ...);
void send_buffer(char* buf, int size);
void message(char* format, ...);
diff --git a/lib/erl_interface/test/all_SUITE_data/gccifier.c b/lib/erl_interface/test/all_SUITE_data/gccifier.c
index ca022eb390..0c3ef915fb 100644
--- a/lib/erl_interface/test/all_SUITE_data/gccifier.c
+++ b/lib/erl_interface/test/all_SUITE_data/gccifier.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/all_SUITE_data/gccifier.sh b/lib/erl_interface/test/all_SUITE_data/gccifier.sh
index 594608df9f..179394bb4e 100755
--- a/lib/erl_interface/test/all_SUITE_data/gccifier.sh
+++ b/lib/erl_interface/test/all_SUITE_data/gccifier.sh
@@ -2,7 +2,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2009. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/all_SUITE_data/init_tc.erl b/lib/erl_interface/test/all_SUITE_data/init_tc.erl
index 74d32d9ea4..d9ad291f3d 100644
--- a/lib/erl_interface/test/all_SUITE_data/init_tc.erl
+++ b/lib/erl_interface/test/all_SUITE_data/init_tc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/all_SUITE_data/reclaim.h b/lib/erl_interface/test/all_SUITE_data/reclaim.h
index eb0f7ce9fa..fe99bb0afc 100644
--- a/lib/erl_interface/test/all_SUITE_data/reclaim.h
+++ b/lib/erl_interface/test/all_SUITE_data/reclaim.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/all_SUITE_data/runner.c b/lib/erl_interface/test/all_SUITE_data/runner.c
index 47d918308d..42e8bb03e5 100644
--- a/lib/erl_interface/test/all_SUITE_data/runner.c
+++ b/lib/erl_interface/test/all_SUITE_data/runner.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -200,8 +200,8 @@ char *read_packet(int *len)
* ----- ----------------------------
* [$b|Bytes] {bytes, Bytes}
* [$e] eot
- * [$f] test_server:fail()
- * [$f|Reason] test_server:fail(Reason)
+ * [$f] ct:fail()
+ * [$f|Reason] ct:fail(Reason)
* [$t|EncodedTerm] {term, Term}
* [$N] 'NULL'
* [$m|Message] io:format("~s", [Message]) (otherwise ignored)
@@ -213,7 +213,7 @@ char *read_packet(int *len)
* you implement a test case entirely in C code.
*
* If the ok argument is zero, a [$f] reply will be sent to the
- * Erlang side (causing test_server:fail() to be called); otherwise,
+ * Erlang side (causing ct:fail() to be called); otherwise,
* the atom 'eot' will be sent to Erlang.
*
* If you need to provide more details on a failure, use the fail() function.
@@ -253,7 +253,7 @@ do_report(file, line, ok)
/*
- * This function causes a call to test_server:fail(Reason) on the
+ * This function causes a call to ct:fail(Reason) on the
* Erlang side.
*/
diff --git a/lib/erl_interface/test/all_SUITE_data/runner.h b/lib/erl_interface/test/all_SUITE_data/runner.h
index 2af267ecb9..493602869f 100644
--- a/lib/erl_interface/test/all_SUITE_data/runner.h
+++ b/lib/erl_interface/test/all_SUITE_data/runner.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_accept_SUITE.erl b/lib/erl_interface/test/ei_accept_SUITE.erl
index 144ec99e0a..e06ee762d7 100644
--- a/lib/erl_interface/test/ei_accept_SUITE.erl
+++ b/lib/erl_interface/test/ei_accept_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,97 +21,70 @@
%%
-module(ei_accept_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("ei_accept_SUITE_data/ei_accept_test_cases.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2,
- ei_accept/1, ei_threaded_accept/1]).
+-export([all/0, suite/0,
+ ei_accept/1, ei_threaded_accept/1]).
-import(runner, [get_term/1,send_term/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
all() ->
[ei_accept, ei_threaded_accept].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:seconds(30)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
ei_accept(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
-
- ?line Myname= hd(tl(string:tokens(atom_to_list(node()), "@"))),
- ?line io:format("Myname ~p ~n", [Myname]),
- ?line EINode= list_to_atom("c42@"++Myname),
- ?line io:format("EINode ~p ~n", [EINode]),
- ?line Self= self(),
- ?line TermToSend= {call, Self, "Test"},
- ?line F= fun() ->
- case waitfornode("c42",20) of
- true ->
- {any, EINode} ! TermToSend,
- Self ! sent_ok;
- false ->
- Self ! never_published
- end,
- ok
- end,
-
- ?line spawn(F),
- ?line Port = 6543,
- ?line {ok, Fd, _Node} = ei_accept(P, Port),
- ?line TermReceived= ei_receive(P, Fd),
- ?line io:format("Sent ~p received ~p ~n", [TermToSend, TermReceived]),
- ?line TermToSend= TermReceived,
- ?line receive
- sent_ok ->
- ok;
- Unknown ->
- io:format("~p ~n", [Unknown])
- after 1000 ->
- io:format("timeout ~n")
- end,
- ?line runner:finish(P),
+ P = runner:start(?interpret),
+ 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
+
+ Myname = hd(tl(string:tokens(atom_to_list(node()), "@"))),
+ io:format("Myname ~p ~n", [Myname]),
+ EINode = list_to_atom("c42@"++Myname),
+ io:format("EINode ~p ~n", [EINode]),
+ Self = self(),
+ TermToSend= {call, Self, "Test"},
+ F= fun() ->
+ case waitfornode("c42",20) of
+ true ->
+ {any, EINode} ! TermToSend,
+ Self ! sent_ok;
+ false ->
+ Self ! never_published
+ end,
+ ok
+ end,
+
+ spawn(F),
+ Port = 6543,
+ {ok, Fd, _Node} = ei_accept(P, Port),
+ TermReceived= ei_receive(P, Fd),
+ io:format("Sent ~p received ~p ~n", [TermToSend, TermReceived]),
+ TermToSend= TermReceived,
+ receive
+ sent_ok ->
+ ok;
+ Unknown ->
+ io:format("~p ~n", [Unknown])
+ after 1000 ->
+ io:format("timeout ~n")
+ end,
+ runner:finish(P),
ok.
ei_threaded_accept(Config) when is_list(Config) ->
- ?line Einode = filename:join(?config(data_dir, Config), "eiaccnode"),
- ?line N = 1, % 3,
- ?line Host = atom_to_list(node()),
- ?line Port = 6767,
- ?line start_einode(Einode, N, Host, Port),
- ?line io:format("started eiaccnode"),
- %%?line spawn_link(fun() -> start_einode(Einode, N, Host, Port) end),
- ?line TestServerPid = self(),
- ?line [ spawn_link(fun() -> send_rec_einode(I, TestServerPid) end)
- || I <- lists:seq(0, N-1) ],
- ?line [ receive I -> ok end
- || I <- lists:seq(0, N-1) ],
+ Einode = filename:join(proplists:get_value(data_dir, Config), "eiaccnode"),
+ N = 1, % 3,
+ Host = atom_to_list(node()),
+ Port = 6767,
+ start_einode(Einode, N, Host, Port),
+ io:format("started eiaccnode"),
+ %%spawn_link(fun() -> start_einode(Einode, N, Host, Port) end),
+ TestServerPid = self(),
+ [spawn_link(fun() -> send_rec_einode(I, TestServerPid) end) || I <- lists:seq(0, N-1)],
+ [receive I -> ok end || I <- lists:seq(0, N-1) ],
ok.
waitfornode(String,0) ->
@@ -120,66 +93,61 @@ waitfornode(String,0) ->
waitfornode(String,N) ->
Registered = [X || {X,_} <- element(2,erl_epmd:names())],
case lists:member(String,Registered) of
- true ->
- true;
- false ->
- timer:sleep(1000),
- waitfornode(String,N-1)
+ true ->
+ true;
+ false ->
+ timer:sleep(1000),
+ waitfornode(String,N-1)
end.
send_rec_einode(N, TestServerPid) ->
- ?line Myname= hd(tl(string:tokens(atom_to_list(node()), "@"))),
- ?line FirstPart = "eiacc" ++ integer_to_list(N),
- ?line EINode= list_to_atom(FirstPart ++ "@" ++ Myname),
- ?line io:format("EINode ~p ~n", [EINode]),
- ?line Self= self(),
- ?line case waitfornode(FirstPart,20) of
- true -> ok;
- false -> test_server:fail({never_published,EINode})
- end,
- ?line {any, EINode} ! Self,
- ?line receive
- {N,_}=X ->
- ?line io:format("Received by ~s ~p~n", [EINode, X]),
- ?line TestServerPid ! N,
- ?line X
- after 10000 ->
- ?line test_server:fail(EINode)
- end.
+ Myname= hd(tl(string:tokens(atom_to_list(node()), "@"))),
+ FirstPart = "eiacc" ++ integer_to_list(N),
+ EINode= list_to_atom(FirstPart ++ "@" ++ Myname),
+ io:format("EINode ~p ~n", [EINode]),
+ Self= self(),
+ case waitfornode(FirstPart,20) of
+ true -> ok;
+ false -> ct:fail({never_published,EINode})
+ end,
+ {any, EINode} ! Self,
+ receive
+ {N,_}=X ->
+ io:format("Received by ~s ~p~n", [EINode, X]),
+ TestServerPid ! N,
+ X
+ after 10000 ->
+ ct:fail(EINode)
+ end.
start_einode(Einode, N, Host, Port) ->
Einodecmd = Einode ++ " " ++ atom_to_list(erlang:get_cookie())
- ++ " " ++ integer_to_list(N) ++ " " ++ Host ++ " "
- ++ integer_to_list(Port) ++ " nothreads",
+ ++ " " ++ integer_to_list(N) ++ " " ++ Host ++ " "
+ ++ integer_to_list(Port) ++ " nothreads",
io:format("Einodecmd ~p ~n", [Einodecmd]),
- ?line open_port({spawn, Einodecmd}, []),
+ open_port({spawn, Einodecmd}, []),
ok.
-
%%% Interface functions for ei (erl_interface) functions.
ei_connect_init(P, Num, Cookie, Creation) ->
send_command(P, ei_connect_init, [Num,Cookie,Creation]),
case get_term(P) of
- {term,Int} when is_integer(Int) -> Int
+ {term,Int} when is_integer(Int) -> Int
end.
ei_accept(P, PortNo) ->
send_command(P, ei_accept, [PortNo]),
case get_term(P) of
- {term,{Fd, _, Node}} when Fd >= 0 -> {ok, Fd, Node};
- {term,{_Fd, Errno, _Node}} -> {error,Errno}
+ {term,{Fd, _, Node}} when Fd >= 0 -> {ok, Fd, Node};
+ {term,{_Fd, Errno, _Node}} -> {error,Errno}
end.
ei_receive(P, Fd) ->
send_command(P, ei_receive, [Fd]),
- {term, T}= get_term(P),
+ {term, T} = get_term(P),
T.
send_command(P, Name, Args) ->
runner:send_term(P, {Name,list_to_tuple(Args)}).
-
-
-
-
diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first
index 8153368870..6e89cc5a78 100644
--- a/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src
index d900b4aa8f..10ef437f8b 100644
--- a/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c b/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c
index ad68ba9bb5..7b81ee5491 100644
--- a/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c
+++ b/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c b/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c
index 6a3d2bc157..308f843530 100644
--- a/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c
+++ b/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_connect_SUITE.erl b/lib/erl_interface/test/ei_connect_SUITE.erl
index 3385d1eb6c..66498deadc 100644
--- a/lib/erl_interface/test/ei_connect_SUITE.erl
+++ b/lib/erl_interface/test/ei_connect_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,176 +21,148 @@
%%
-module(ei_connect_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("ei_connect_SUITE_data/ei_connect_test_cases.hrl").
--export([
- all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2,
- end_per_testcase/2,
-
- ei_send/1,
- ei_reg_send/1,
- ei_format_pid/1,
- ei_rpc/1,
- rpc_test/1,
- ei_send_funs/1,
- ei_threaded_send/1,
- ei_set_get_tracelevel/1
- ]).
+-export([all/0, suite/0,
+ ei_send/1,
+ ei_reg_send/1,
+ ei_format_pid/1,
+ ei_rpc/1,
+ rpc_test/1,
+ ei_send_funs/1,
+ ei_threaded_send/1,
+ ei_set_get_tracelevel/1]).
-import(runner, [get_term/1,send_term/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
all() ->
[ei_send, ei_reg_send, ei_rpc, ei_format_pid, ei_send_funs,
ei_threaded_send, ei_set_get_tracelevel].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:minutes(0.25)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
ei_send(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
- ?line {ok,Fd} = ei_connect(P, node()),
+ P = runner:start(?interpret),
+ 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
+ {ok,Fd} = ei_connect(P, node()),
- ?line ok = ei_send(P, Fd, self(), AMsg={a,message}),
- ?line receive AMsg -> ok end,
+ ok = ei_send(P, Fd, self(), AMsg={a,message}),
+ receive AMsg -> ok end,
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
ei_format_pid(Config) when is_list(Config) ->
- ?line S = self(),
- ?line P = runner:start(?interpret),
- ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
- ?line {ok,Fd} = ei_connect(P, node()),
+ S = self(),
+ P = runner:start(?interpret),
+ 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
+ {ok,Fd} = ei_connect(P, node()),
- ?line ok = ei_format_pid(P, Fd, S),
- ?line receive S -> ok end,
+ ok = ei_format_pid(P, Fd, S),
+ receive S -> ok end,
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
ei_send_funs(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
- ?line {ok,Fd} = ei_connect(P, node()),
-
- ?line Fun1 = fun ei_send/1,
- ?line Fun2 = fun(X) -> P, X, Fd, Fun1 end,
-
- ?line AMsg={Fun1,Fun2},
+ P = runner:start(?interpret),
+ 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
+ {ok,Fd} = ei_connect(P, node()),
+
+ Fun1 = fun ei_send/1,
+ Fun2 = fun(X) -> P, X, Fd, Fun1 end,
+
+ AMsg={Fun1,Fun2},
%%AMsg={wait_with_funs, new_dist_format},
- ?line ok = ei_send_funs(P, Fd, self(), AMsg),
- ?line EIMsg = receive M -> M end,
- ?line EIMsg = AMsg,
+ ok = ei_send_funs(P, Fd, self(), AMsg),
+ EIMsg = receive M -> M end,
+ EIMsg = AMsg,
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
ei_reg_send(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
- ?line {ok,Fd} = ei_connect(P, node()),
+ P = runner:start(?interpret),
+ 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
+ {ok,Fd} = ei_connect(P, node()),
ARegName = a_strange_registred_name,
- ?line register(ARegName, self()),
- ?line ok = ei_reg_send(P, Fd, ARegName, AMsg={another,[strange],message}),
- ?line receive AMsg -> ok end,
+ register(ARegName, self()),
+ ok = ei_reg_send(P, Fd, ARegName, AMsg={another,[strange],message}),
+ receive AMsg -> ok end,
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
ei_threaded_send(Config) when is_list(Config) ->
- ?line Einode = filename:join(?config(data_dir, Config), "einode"),
- ?line N = 15,
- ?line Host = atom_to_list(node()),
- ?line TestServerPid = self(),
- ?line [ spawn_link(fun() -> rec_einode(I, TestServerPid) end)
- || I <- lists:seq(0, N-1) ],
- ?line [ receive {I,registered} -> ok end
- || I <- lists:seq(0, N-1) ],
- ?line spawn_link(fun() -> start_einode(Einode, N, Host) end),
- ?line [ receive I -> ok end
- || I <- lists:seq(0, N-1) ],
+ Einode = filename:join(proplists:get_value(data_dir, Config), "einode"),
+ N = 15,
+ Host = atom_to_list(node()),
+ TestServerPid = self(),
+ [ spawn_link(fun() -> rec_einode(I, TestServerPid) end)
+ || I <- lists:seq(0, N-1) ],
+ [ receive {I,registered} -> ok end
+ || I <- lists:seq(0, N-1) ],
+ spawn_link(fun() -> start_einode(Einode, N, Host) end),
+ [ receive I -> ok end
+ || I <- lists:seq(0, N-1) ],
ok.
rec_einode(N, TestServerPid) ->
- ?line Regname = list_to_atom("mth"++integer_to_list(N)),
- ?line register(Regname, self()),
- ?line TestServerPid ! {N, registered},
- ?line io:format("~p waiting~n", [Regname]),
- ?line receive
- X ->
- ?line io:format("Received by ~s ~p~n", [Regname, X]),
- ?line TestServerPid ! N,
- ?line X
- after 10000 ->
- ?line test_server:fail(Regname)
- end.
+ Regname = list_to_atom("mth"++integer_to_list(N)),
+ register(Regname, self()),
+ TestServerPid ! {N, registered},
+ io:format("~p waiting~n", [Regname]),
+ receive
+ X ->
+ io:format("Received by ~s ~p~n", [Regname, X]),
+ TestServerPid ! N,
+ X
+ after 10000 ->
+ ct:fail(Regname)
+ end.
start_einode(Einode, N, Host) ->
Einodecmd = Einode ++ " " ++ atom_to_list(erlang:get_cookie())
- ++ " " ++ integer_to_list(N) ++ " " ++ Host,
+ ++ " " ++ integer_to_list(N) ++ " " ++ Host,
io:format("Einodecmd ~p ~n", [Einodecmd]),
- ?line open_port({spawn, Einodecmd}, []),
+ open_port({spawn, Einodecmd}, []),
ok.
ei_rpc(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
- ?line {ok,Fd} = ei_connect(P, node()),
+ P = runner:start(?interpret),
+ 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
+ {ok,Fd} = ei_connect(P, node()),
- ?line S= "Hej du glade!", SRev = lists:reverse(S),
- ?line X = ei_rpc(P, Fd, self(), {?MODULE, rpc_test}, [SRev]),
- ?line {term, S}= X,
+ S= "Hej du glade!", SRev = lists:reverse(S),
+ X = ei_rpc(P, Fd, self(), {?MODULE, rpc_test}, [SRev]),
+ {term, S}= X,
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
ei_set_get_tracelevel(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line 5 = ei_set_get_tracelevel(P, 5),
- ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
- ?line {ok,Fd} = ei_connect(P, node()),
+ P = runner:start(?interpret),
+ 5 = ei_set_get_tracelevel(P, 5),
+ 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0),
+ {ok,Fd} = ei_connect(P, node()),
- ?line S= "Hej du glade!", SRev = lists:reverse(S),
- ?line X = ei_rpc(P, Fd, self(), {?MODULE, rpc_test}, [SRev]),
- ?line {term, S}= X,
+ S= "Hej du glade!", SRev = lists:reverse(S),
+ X = ei_rpc(P, Fd, self(), {?MODULE, rpc_test}, [SRev]),
+ {term, S}= X,
- ?line 0 = ei_set_get_tracelevel(P, 0),
+ 0 = ei_set_get_tracelevel(P, 0),
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
@@ -199,20 +171,20 @@ ei_set_get_tracelevel(Config) when is_list(Config) ->
ei_connect_init(P, Num, Cookie, Creation) ->
send_command(P, ei_connect_init, [Num,Cookie,Creation]),
case get_term(P) of
- {term,Int} when is_integer(Int) -> Int
+ {term,Int} when is_integer(Int) -> Int
end.
ei_connect(P, Node) ->
send_command(P, ei_connect, [Node]),
case get_term(P) of
- {term,{Fd,_}} when Fd >= 0 -> {ok,Fd};
- {term,{-1,Errno}} -> {error,Errno}
+ {term,{Fd,_}} when Fd >= 0 -> {ok,Fd};
+ {term,{-1,Errno}} -> {error,Errno}
end.
ei_set_get_tracelevel(P, Tracelevel) ->
send_command(P, ei_set_get_tracelevel, [Tracelevel]),
case get_term(P) of
- {term,{tracelevel, Level}} when is_integer(Level) -> Level
+ {term,{tracelevel, Level}} when is_integer(Level) -> Level
end.
ei_send(P, Fd, To, Msg) ->
@@ -238,12 +210,12 @@ ei_rpc(P, Fd, To, Func, Msg) ->
get_send_result(P) ->
case get_term(P) of
- {term,{0,_}} -> ok;
- {term,{1,_}} -> ok;
- {term,{-1,Errno}} -> {error,Errno};
- {term,{Res,Errno}}->
- io:format("Return value: ~p\nerl_errno: ~p", [Res,Errno]),
- ?t:fail(bad_return_value)
+ {term,{0,_}} -> ok;
+ {term,{1,_}} -> ok;
+ {term,{-1,Errno}} -> {error,Errno};
+ {term,{Res,Errno}}->
+ io:format("Return value: ~p\nerl_errno: ~p", [Res,Errno]),
+ ct:fail(bad_return_value)
end.
send_command(P, Name, Args) ->
diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first
index feee049795..1a9b4dbcea 100644
--- a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src
index 49e5e8f8e2..c2d8261dd8 100644
--- a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -23,9 +23,10 @@ include @erl_interface_mk_include@
CC0 = @CC@
CC = ..@DS@all_SUITE_data@DS@gccifier@exe@ -CC"$(CC0)"
LD = @LD@
+LIBERL = @erl_interface_lib@
LIBEI = @erl_interface_eilib@
LIBFLAGS = ../all_SUITE_data/ei_runner@obj@ \
- $(LIBEI) @LIBS@ @erl_interface_sock_libs@ \
+ $(LIBERL) $(LIBEI) @LIBS@ @erl_interface_sock_libs@ \
@erl_interface_threadlib@
CFLAGS = @EI_CFLAGS@ $(THR_DEFS) -I@erl_interface_include@ -I../all_SUITE_data
EI_CONNECT_OBJS = ei_connect_test@obj@ ei_connect_test_decl@obj@
diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c b/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c
index cfad73fd07..6a3796dd24 100644
--- a/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c
+++ b/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/einode.c b/lib/erl_interface/test/ei_connect_SUITE_data/einode.c
index f151f6d2d6..bb71575740 100644
--- a/lib/erl_interface/test/ei_connect_SUITE_data/einode.c
+++ b/lib/erl_interface/test/ei_connect_SUITE_data/einode.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,6 +35,7 @@
#endif
#include "ei.h"
+#include "erl_interface.h"
#ifdef VXWORKS
#define MAIN cnode
@@ -115,6 +116,8 @@ MAIN(int argc, char *argv[])
if (argc < 3)
exit(1);
+ erl_init(NULL, 0);
+
cookie = argv[1];
n = atoi(argv[2]);
if (n > 100)
diff --git a/lib/erl_interface/test/ei_decode_SUITE.erl b/lib/erl_interface/test/ei_decode_SUITE.erl
index 0abcf50fb5..1495a0d5d9 100644
--- a/lib/erl_interface/test/ei_decode_SUITE.erl
+++ b/lib/erl_interface/test/ei_decode_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,23 +21,18 @@
%%
-module(ei_decode_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("ei_decode_SUITE_data/ei_decode_test_cases.hrl").
--export(
- [
- all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, init_per_testcase/2,
- end_per_testcase/2,
- test_ei_decode_long/1,
- test_ei_decode_ulong/1,
- test_ei_decode_longlong/1,
- test_ei_decode_ulonglong/1,
- test_ei_decode_char/1,
- test_ei_decode_nonoptimal/1,
- test_ei_decode_misc/1,
- test_ei_decode_utf8_atom/1
- ]).
+-export([all/0, suite/0,
+ test_ei_decode_long/1,
+ test_ei_decode_ulong/1,
+ test_ei_decode_longlong/1,
+ test_ei_decode_ulonglong/1,
+ test_ei_decode_char/1,
+ test_ei_decode_nonoptimal/1,
+ test_ei_decode_misc/1,
+ test_ei_decode_utf8_atom/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -47,27 +42,6 @@ all() ->
test_ei_decode_char, test_ei_decode_nonoptimal,
test_ei_decode_misc, test_ei_decode_utf8_atom].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-init_per_testcase(_TC, Config) ->
- Config.
-
-end_per_testcase(_RC, Config) ->
- Config.
-
%% ---------------------------------------------------------------------------
% NOTE: for historical reasons we don't pach as tight as we can,
@@ -76,55 +50,51 @@ end_per_testcase(_RC, Config) ->
%% ######################################################################## %%
-test_ei_decode_long(suite) -> [];
test_ei_decode_long(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_decode_long),
+ P = runner:start(?test_ei_decode_long),
send_integers(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
-test_ei_decode_ulong(suite) -> [];
test_ei_decode_ulong(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_decode_ulong),
+ P = runner:start(?test_ei_decode_ulong),
send_integers(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
% (*) In practical terms, other values may fit into the ext format
% i32 is signed 32 bit on C side
% u32 is unsigned 32 bit on C side
-
+
%% ######################################################################## %%
-test_ei_decode_longlong(suite) -> [];
test_ei_decode_longlong(Config) when is_list(Config) ->
case os:type() of
- vxworks ->
- {skip,"Skipped on VxWorks"};
- _ ->
- ?line P = runner:start(?test_ei_decode_longlong),
- send_integers2(P),
- ?line runner:recv_eot(P),
- ok
+ vxworks ->
+ {skip,"Skipped on VxWorks"};
+ _ ->
+ P = runner:start(?test_ei_decode_longlong),
+ send_integers2(P),
+ runner:recv_eot(P),
+ ok
end.
%% ######################################################################## %%
-test_ei_decode_ulonglong(suite) -> [];
test_ei_decode_ulonglong(Config) when is_list(Config) ->
case os:type() of
- vxworks ->
- {skip,"Skipped on VxWorks"};
- _ ->
- ?line P = runner:start(?test_ei_decode_ulonglong),
- send_integers2(P),
- ?line runner:recv_eot(P),
- ok
+ vxworks ->
+ {skip,"Skipped on VxWorks"};
+ _ ->
+ P = runner:start(?test_ei_decode_ulonglong),
+ send_integers2(P),
+ runner:recv_eot(P),
+ ok
end.
@@ -133,38 +103,36 @@ test_ei_decode_ulonglong(Config) when is_list(Config) ->
%% it is unsigned.
%% FIXME maybe the API should change to use "unsigned char" to be clear?!
-test_ei_decode_char(suite) -> [];
test_ei_decode_char(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_decode_char),
+ P = runner:start(?test_ei_decode_char),
- ?line send_term_as_binary(P,0),
- ?line send_term_as_binary(P,16#7f),
- ?line send_term_as_binary(P,16#ff),
+ send_term_as_binary(P,0),
+ send_term_as_binary(P,16#7f),
+ send_term_as_binary(P,16#ff),
- ?line send_term_as_binary(P, []), % illegal type
+ send_term_as_binary(P, []), % illegal type
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
-test_ei_decode_nonoptimal(suite) -> [];
test_ei_decode_nonoptimal(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_decode_nonoptimal),
+ P = runner:start(?test_ei_decode_nonoptimal),
send_non_optimal_pos(P), % decode_char
send_non_optimal(P), % decode_long
send_non_optimal_pos(P), % decode_ulong
case os:type() of
- vxworks ->
- ok;
- _ ->
- send_non_optimal(P), % decode_longlong
- send_non_optimal_pos(P) % decode_ulonglong
+ vxworks ->
+ ok;
+ _ ->
+ send_non_optimal(P), % decode_longlong
+ send_non_optimal_pos(P) % decode_ulonglong
end,
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
@@ -173,82 +141,81 @@ send_non_optimal(P) ->
send_non_optimal_neg(P).
send_non_optimal_pos(P) ->
- ?line send_raw(P, <<131,97,42>>),
- ?line send_raw(P, <<131,98,42:32>>),
- ?line send_raw(P, <<131,110,1,0,42>>),
- ?line send_raw(P, <<131,110,2,0,42,0>>),
- ?line send_raw(P, <<131,110,4,0,42,0,0,0>>),
- ?line send_raw(P, <<131,111,0,0,0,1,0,42>>),
- ?line send_raw(P, <<131,111,0,0,0,2,0,42,0>>),
- ?line send_raw(P, <<131,111,0,0,0,3,0,42,0,0>>),
- ?line send_raw(P, <<131,111,0,0,0,6,0,42,0,0,0,0,0>>),
+ send_raw(P, <<131,97,42>>),
+ send_raw(P, <<131,98,42:32>>),
+ send_raw(P, <<131,110,1,0,42>>),
+ send_raw(P, <<131,110,2,0,42,0>>),
+ send_raw(P, <<131,110,4,0,42,0,0,0>>),
+ send_raw(P, <<131,111,0,0,0,1,0,42>>),
+ send_raw(P, <<131,111,0,0,0,2,0,42,0>>),
+ send_raw(P, <<131,111,0,0,0,3,0,42,0,0>>),
+ send_raw(P, <<131,111,0,0,0,6,0,42,0,0,0,0,0>>),
ok.
send_non_optimal_neg(P) ->
-% ?line send_raw(P, <<131,97,-42>>),
- ?line send_raw(P, <<131,98,-42:32>>),
- ?line send_raw(P, <<131,110,1,1,42>>),
- ?line send_raw(P, <<131,110,2,1,42,0>>),
- ?line send_raw(P, <<131,110,4,1,42,0,0,0>>),
- ?line send_raw(P, <<131,111,0,0,0,1,1,42>>),
- ?line send_raw(P, <<131,111,0,0,0,2,1,42,0>>),
- ?line send_raw(P, <<131,111,0,0,0,3,1,42,0,0>>),
- ?line send_raw(P, <<131,111,0,0,0,6,1,42,0,0,0,0,0>>),
+ % send_raw(P, <<131,97,-42>>),
+ send_raw(P, <<131,98,-42:32>>),
+ send_raw(P, <<131,110,1,1,42>>),
+ send_raw(P, <<131,110,2,1,42,0>>),
+ send_raw(P, <<131,110,4,1,42,0,0,0>>),
+ send_raw(P, <<131,111,0,0,0,1,1,42>>),
+ send_raw(P, <<131,111,0,0,0,2,1,42,0>>),
+ send_raw(P, <<131,111,0,0,0,3,1,42,0,0>>),
+ send_raw(P, <<131,111,0,0,0,6,1,42,0,0,0,0,0>>),
ok.
%% ######################################################################## %%
-test_ei_decode_misc(suite) -> [];
test_ei_decode_misc(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_decode_misc),
+ P = runner:start(?test_ei_decode_misc),
- ?line send_term_as_binary(P,0.0),
- ?line send_term_as_binary(P,-1.0),
- ?line send_term_as_binary(P,1.0),
+ send_term_as_binary(P,0.0),
+ send_term_as_binary(P,-1.0),
+ send_term_as_binary(P,1.0),
- ?line send_term_as_binary(P,false),
- ?line send_term_as_binary(P,true),
+ send_term_as_binary(P,false),
+ send_term_as_binary(P,true),
- ?line send_term_as_binary(P,foo),
- ?line send_term_as_binary(P,''),
- ?line send_term_as_binary(P,'ÅÄÖåäö'),
+ send_term_as_binary(P,foo),
+ send_term_as_binary(P,''),
+ send_term_as_binary(P,'ÅÄÖåäö'),
- ?line send_term_as_binary(P,"foo"),
- ?line send_term_as_binary(P,""),
- ?line send_term_as_binary(P,"ÅÄÖåäö"),
+ send_term_as_binary(P,"foo"),
+ send_term_as_binary(P,""),
+ send_term_as_binary(P,"ÅÄÖåäö"),
- ?line send_term_as_binary(P,<<"foo">>),
- ?line send_term_as_binary(P,<<>>),
- ?line send_term_as_binary(P,<<"ÅÄÖåäö">>),
+ send_term_as_binary(P,<<"foo">>),
+ send_term_as_binary(P,<<>>),
+ send_term_as_binary(P,<<"ÅÄÖåäö">>),
-% ?line send_term_as_binary(P,{}),
-% ?line send_term_as_binary(P,[]),
+ % send_term_as_binary(P,{}),
+ % send_term_as_binary(P,[]),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
test_ei_decode_utf8_atom(Config) ->
- ?line P = runner:start(?test_ei_decode_utf8_atom),
+ P = runner:start(?test_ei_decode_utf8_atom),
send_utf8_atom_as_binary(P,"å"),
send_utf8_atom_as_binary(P,"ä"),
send_term_as_binary(P,'ö'),
send_term_as_binary(P,'õ'),
-
- ?line send_utf8_atom_as_binary(P,[1758]),
- ?line send_utf8_atom_as_binary(P,[1758,1758]),
- ?line send_utf8_atom_as_binary(P,[1758,1758,1758]),
- ?line send_utf8_atom_as_binary(P,[1758,1758,1758,1758]),
+
+ send_utf8_atom_as_binary(P,[1758]),
+ send_utf8_atom_as_binary(P,[1758,1758]),
+ send_utf8_atom_as_binary(P,[1758,1758,1758]),
+ send_utf8_atom_as_binary(P,[1758,1758,1758,1758]),
send_utf8_atom_as_binary(P,"a"),
send_utf8_atom_as_binary(P,"b"),
send_term_as_binary(P,'c'),
send_term_as_binary(P,'d'),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
@@ -264,77 +231,77 @@ send_utf8_atom_as_binary(Port, String) ->
Port ! {self(), {command, term_to_binary(uc_atup(String))}}.
send_integers(P) ->
- ?line send_term_as_binary(P,0), % SMALL_INTEGER_EXT smallest
- ?line send_term_as_binary(P,255), % SMALL_INTEGER_EXT largest
- ?line send_term_as_binary(P,256), % INTEGER_EXT smallest pos (*)
- ?line send_term_as_binary(P,-1), % INTEGER_EXT largest neg
-
- ?line send_term_as_binary(P, 16#07ffffff), % INTEGER_EXT old largest (28 bits)
- ?line send_term_as_binary(P,-16#08000000), % INTEGER_EXT old smallest
- ?line send_term_as_binary(P, 16#08000000), % SMALL_BIG_EXT old smallest pos(*)
- ?line send_term_as_binary(P,-16#08000001), % SMALL_BIG_EXT old largest neg (*)
-
- ?line send_term_as_binary(P, 16#7fffffff), % INTEGER_EXT new largest (32 bits)
- ?line send_term_as_binary(P,-16#80000000), % INTEGER_EXT new smallest (32 bis)
- ?line send_term_as_binary(P, 16#80000000), % SMALL_BIG_EXT new smallest pos(*)
- ?line send_term_as_binary(P,-16#80000001), % SMALL_BIG_EXT new largest neg (*)
-
+ send_term_as_binary(P,0), % SMALL_INTEGER_EXT smallest
+ send_term_as_binary(P,255), % SMALL_INTEGER_EXT largest
+ send_term_as_binary(P,256), % INTEGER_EXT smallest pos (*)
+ send_term_as_binary(P,-1), % INTEGER_EXT largest neg
+
+ send_term_as_binary(P, 16#07ffffff), % INTEGER_EXT old largest (28 bits)
+ send_term_as_binary(P,-16#08000000), % INTEGER_EXT old smallest
+ send_term_as_binary(P, 16#08000000), % SMALL_BIG_EXT old smallest pos(*)
+ send_term_as_binary(P,-16#08000001), % SMALL_BIG_EXT old largest neg (*)
+
+ send_term_as_binary(P, 16#7fffffff), % INTEGER_EXT new largest (32 bits)
+ send_term_as_binary(P,-16#80000000), % INTEGER_EXT new smallest (32 bis)
+ send_term_as_binary(P, 16#80000000), % SMALL_BIG_EXT new smallest pos(*)
+ send_term_as_binary(P,-16#80000001), % SMALL_BIG_EXT new largest neg (*)
+
case erlang:system_info({wordsize,external}) of
- 4 ->
- ?line send_term_as_binary(P, 16#80000000),% SMALL_BIG_EXT u32
- ?line send_term_as_binary(P, 16#ffffffff),% SMALL_BIG_EXT largest u32
-
- ?line send_term_as_binary(P, 16#7fffffffffff), % largest i48
- ?line send_term_as_binary(P,-16#800000000000), % smallest i48
- ?line send_term_as_binary(P, 16#ffffffffffff), % largest u48
- ?line send_term_as_binary(P, 16#7fffffffffffffff), % largest i64
- ?line send_term_as_binary(P,-16#8000000000000000), % smallest i64
- ?line send_term_as_binary(P, 16#ffffffffffffffff); % largest u64
- 8 ->
- ?line send_term_as_binary(P, 16#8000000000000000),% SMALL_BIG_EXT u64
- % SMALL_BIG_EXT largest u64
- ?line send_term_as_binary(P, 16#ffffffffffffffff),
- % largest i96
- ?line send_term_as_binary(P, 16#7fffffffffffffffffffffff),
- % smallest i96
- ?line send_term_as_binary(P,-16#800000000000000000000000),
- % largest u96
- ?line send_term_as_binary(P, 16#ffffffffffffffffffffffff),
- % largest i128
- ?line send_term_as_binary(P, 16#7fffffffffffffffffffffffffffffff),
- % smallest i128
- ?line send_term_as_binary(P,-16#80000000000000000000000000000000),
- % largest u128
- ?line send_term_as_binary(P, 16#ffffffffffffffffffffffffffffffff)
+ 4 ->
+ send_term_as_binary(P, 16#80000000),% SMALL_BIG_EXT u32
+ send_term_as_binary(P, 16#ffffffff),% SMALL_BIG_EXT largest u32
+
+ send_term_as_binary(P, 16#7fffffffffff), % largest i48
+ send_term_as_binary(P,-16#800000000000), % smallest i48
+ send_term_as_binary(P, 16#ffffffffffff), % largest u48
+ send_term_as_binary(P, 16#7fffffffffffffff), % largest i64
+ send_term_as_binary(P,-16#8000000000000000), % smallest i64
+ send_term_as_binary(P, 16#ffffffffffffffff); % largest u64
+ 8 ->
+ send_term_as_binary(P, 16#8000000000000000),% SMALL_BIG_EXT u64
+ % SMALL_BIG_EXT largest u64
+ send_term_as_binary(P, 16#ffffffffffffffff),
+ % largest i96
+ send_term_as_binary(P, 16#7fffffffffffffffffffffff),
+ % smallest i96
+ send_term_as_binary(P,-16#800000000000000000000000),
+ % largest u96
+ send_term_as_binary(P, 16#ffffffffffffffffffffffff),
+ % largest i128
+ send_term_as_binary(P, 16#7fffffffffffffffffffffffffffffff),
+ % smallest i128
+ send_term_as_binary(P,-16#80000000000000000000000000000000),
+ % largest u128
+ send_term_as_binary(P, 16#ffffffffffffffffffffffffffffffff)
end,
- ?line send_term_as_binary(P, []), % illegal type
+ send_term_as_binary(P, []), % illegal type
ok.
send_integers2(P) ->
- ?line send_term_as_binary(P,0), % SMALL_INTEGER_EXT smallest
- ?line send_term_as_binary(P,255), % SMALL_INTEGER_EXT largest
- ?line send_term_as_binary(P,256), % INTEGER_EXT smallest pos (*)
- ?line send_term_as_binary(P,-1), % INTEGER_EXT largest neg
-
- ?line send_term_as_binary(P, 16#07ffffff), % INTEGER_EXT old largest (28 bits)
- ?line send_term_as_binary(P,-16#08000000), % INTEGER_EXT old smallest
- ?line send_term_as_binary(P, 16#08000000), % SMALL_BIG_EXT old smallest pos(*)
- ?line send_term_as_binary(P,-16#08000001), % SMALL_BIG_EXT old largest neg (*)
-
- ?line send_term_as_binary(P, 16#7fffffff), % INTEGER_EXT new largest (32 bits)
- ?line send_term_as_binary(P,-16#80000000), % INTEGER_EXT new smallest
- ?line send_term_as_binary(P, 16#80000000), % SMALL_BIG_EXT new smallest pos(*)
- ?line send_term_as_binary(P,-16#80000001), % SMALL_BIG_EXT new largest neg (*)
-
- ?line send_term_as_binary(P, 16#ffffffff),% SMALL_BIG_EXT largest u32
-
- ?line send_term_as_binary(P, 16#7fffffffffff), % largest i48
- ?line send_term_as_binary(P,-16#800000000000), % smallest i48
- ?line send_term_as_binary(P, 16#ffffffffffff), % largest u48
- ?line send_term_as_binary(P, 16#7fffffffffffffff), % largest i64
- ?line send_term_as_binary(P,-16#8000000000000000), % smallest i64
- ?line send_term_as_binary(P, 16#ffffffffffffffff), % largest u64
- ?line send_term_as_binary(P, []), % illegal type
+ send_term_as_binary(P,0), % SMALL_INTEGER_EXT smallest
+ send_term_as_binary(P,255), % SMALL_INTEGER_EXT largest
+ send_term_as_binary(P,256), % INTEGER_EXT smallest pos (*)
+ send_term_as_binary(P,-1), % INTEGER_EXT largest neg
+
+ send_term_as_binary(P, 16#07ffffff), % INTEGER_EXT old largest (28 bits)
+ send_term_as_binary(P,-16#08000000), % INTEGER_EXT old smallest
+ send_term_as_binary(P, 16#08000000), % SMALL_BIG_EXT old smallest pos(*)
+ send_term_as_binary(P,-16#08000001), % SMALL_BIG_EXT old largest neg (*)
+
+ send_term_as_binary(P, 16#7fffffff), % INTEGER_EXT new largest (32 bits)
+ send_term_as_binary(P,-16#80000000), % INTEGER_EXT new smallest
+ send_term_as_binary(P, 16#80000000), % SMALL_BIG_EXT new smallest pos(*)
+ send_term_as_binary(P,-16#80000001), % SMALL_BIG_EXT new largest neg (*)
+
+ send_term_as_binary(P, 16#ffffffff), % SMALL_BIG_EXT largest u32
+
+ send_term_as_binary(P, 16#7fffffffffff), % largest i48
+ send_term_as_binary(P,-16#800000000000), % smallest i48
+ send_term_as_binary(P, 16#ffffffffffff), % largest u48
+ send_term_as_binary(P, 16#7fffffffffffffff), % largest i64
+ send_term_as_binary(P,-16#8000000000000000), % smallest i64
+ send_term_as_binary(P, 16#ffffffffffffffff), % largest u64
+ send_term_as_binary(P, []), % illegal type
ok.
uc_atup(ATxt) ->
@@ -344,35 +311,32 @@ string_to_atom(String) ->
Utf8List = string_to_utf8_list(String),
Len = length(Utf8List),
TagLen = case Len < 256 of
- true -> [119, Len];
- false -> [118, Len bsr 8, Len band 16#ff]
- end,
+ true -> [119, Len];
+ false -> [118, Len bsr 8, Len band 16#ff]
+ end,
binary_to_term(list_to_binary([131, TagLen, Utf8List])).
string_to_utf8_list([]) ->
[];
string_to_utf8_list([CP|CPs]) when is_integer(CP),
- 0 =< CP,
- CP =< 16#7F ->
+ 0 =< CP,
+ CP =< 16#7F ->
[CP | string_to_utf8_list(CPs)];
string_to_utf8_list([CP|CPs]) when is_integer(CP),
- 16#80 =< CP,
- CP =< 16#7FF ->
+ 16#80 =< CP,
+ CP =< 16#7FF ->
[16#C0 bor (CP bsr 6),
- 16#80 bor (16#3F band CP)
- | string_to_utf8_list(CPs)];
+ 16#80 bor (16#3F band CP) | string_to_utf8_list(CPs)];
string_to_utf8_list([CP|CPs]) when is_integer(CP),
- 16#800 =< CP,
- CP =< 16#FFFF ->
+ 16#800 =< CP,
+ CP =< 16#FFFF ->
[16#E0 bor (CP bsr 12),
16#80 bor (16#3F band (CP bsr 6)),
- 16#80 bor (16#3F band CP)
- | string_to_utf8_list(CPs)];
+ 16#80 bor (16#3F band CP) | string_to_utf8_list(CPs)];
string_to_utf8_list([CP|CPs]) when is_integer(CP),
- 16#10000 =< CP,
- CP =< 16#10FFFF ->
+ 16#10000 =< CP,
+ CP =< 16#10FFFF ->
[16#F0 bor (CP bsr 18),
16#80 bor (16#3F band (CP bsr 12)),
16#80 bor (16#3F band (CP bsr 6)),
- 16#80 bor (16#3F band CP)
- | string_to_utf8_list(CPs)].
+ 16#80 bor (16#3F band CP) | string_to_utf8_list(CPs)].
diff --git a/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first
index 74a49dbdab..6e4f0bc37e 100644
--- a/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src
index 54c40e52a4..e678914a40 100644
--- a/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c b/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c
index a0bafe543d..cfe9083065 100644
--- a/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c
+++ b/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -377,8 +377,14 @@ TESTCASE(test_ei_decode_ulong)
EI_DECODE_2 (decode_ulong, 11, unsigned long, ll(0x8000000000000000));
EI_DECODE_2 (decode_ulong, 11, unsigned long, ll(0xffffffffffffffff));
} else {
- EI_DECODE_2 (decode_ulong, 7, unsigned long, 0x80000000);
- EI_DECODE_2 (decode_ulong, 7, unsigned long, 0xffffffff);
+ if (sizeof(void*) > 4) {
+ /* Windows */
+ EI_DECODE_2_FAIL(decode_ulong, 11, unsigned long, ll(0x8000000000000000));
+ EI_DECODE_2_FAIL(decode_ulong, 11, unsigned long, ll(0xffffffffffffffff));
+ } else {
+ EI_DECODE_2 (decode_ulong, 7, unsigned long, 0x80000000);
+ EI_DECODE_2 (decode_ulong, 7, unsigned long, 0xffffffff);
+ }
}
EI_DECODE_2_FAIL(decode_ulong, 9, unsigned long, ll(0x7fffffffffff));
diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE.erl b/lib/erl_interface/test/ei_decode_encode_SUITE.erl
index 3c7e4bf70d..570a91e2da 100644
--- a/lib/erl_interface/test/ei_decode_encode_SUITE.erl
+++ b/lib/erl_interface/test/ei_decode_encode_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,37 +21,18 @@
%%
-module(ei_decode_encode_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("ei_decode_encode_SUITE_data/ei_decode_encode_test_cases.hrl").
--export(
- [
- all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- test_ei_decode_encode/1
- ]).
+-export([all/0, suite/0,
+ test_ei_decode_encode/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[test_ei_decode_encode].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%% ---------------------------------------------------------------------------
% NOTE: these types have no meaning on the C side so we pass them
@@ -60,20 +41,19 @@ end_per_group(_GroupName, Config) ->
%% ######################################################################## %%
-test_ei_decode_encode(suite) -> [];
test_ei_decode_encode(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_decode_encode),
+ P = runner:start(?test_ei_decode_encode),
Fun = fun (X) -> {X,true} end,
Pid = self(),
Port = case os:type() of
- {win32,_} ->
- open_port({spawn,"sort"},[]);
- {unix, darwin} ->
- open_port({spawn,"/usr/bin/true"},[]);
- _ ->
- open_port({spawn,"/bin/true"},[])
- end,
+ {win32,_} ->
+ open_port({spawn,"sort"},[]);
+ {unix, darwin} ->
+ open_port({spawn,"/usr/bin/true"},[]);
+ _ ->
+ open_port({spawn,"/bin/true"},[])
+ end,
Ref = make_ref(),
Trace = {1,2,3,self(),4}, % FIXME how to construct?!
@@ -86,47 +66,46 @@ test_ei_decode_encode(Config) when is_list(Config) ->
BigLargeB = 1 bsl 11112 + BigSmallB,
BigLargeC = BigSmallA * BigSmallB * BigSmallC * BigSmallA,
- ?line send_rec(P, Fun),
- ?line send_rec(P, Pid),
- ?line send_rec(P, Port),
- ?line send_rec(P, Ref),
- ?line send_rec(P, Trace),
+ send_rec(P, Fun),
+ send_rec(P, Pid),
+ send_rec(P, Port),
+ send_rec(P, Ref),
+ send_rec(P, Trace),
% bigs
- ?line send_rec(P, BigSmallA),
- ?line send_rec(P, BigSmallB),
- ?line send_rec(P, BigSmallC),
-
- ?line send_rec(P, BigLargeA),
- ?line send_rec(P, BigLargeB),
- ?line send_rec(P, BigLargeC),
+ send_rec(P, BigSmallA),
+ send_rec(P, BigSmallB),
+ send_rec(P, BigSmallC),
+
+ send_rec(P, BigLargeA),
+ send_rec(P, BigLargeB),
+ send_rec(P, BigLargeC),
%% Test large node containers...
- ?line ThisNode = {node(), erlang:system_info(creation)},
- ?line TXPid = mk_pid(ThisNode, 32767, 8191),
- ?line TXPort = mk_port(ThisNode, 268435455),
- ?line TXRef = mk_ref(ThisNode, [262143, 4294967295, 4294967295]),
+ ThisNode = {node(), erlang:system_info(creation)},
+ TXPid = mk_pid(ThisNode, 32767, 8191),
+ TXPort = mk_port(ThisNode, 268435455),
+ TXRef = mk_ref(ThisNode, [262143, 4294967295, 4294967295]),
- ?line OtherNode = {gurka@sallad, 2},
- ?line OXPid = mk_pid(OtherNode, 32767, 8191),
- ?line OXPort = mk_port(OtherNode, 268435455),
- ?line OXRef = mk_ref(OtherNode, [262143, 4294967295, 4294967295]),
+ send_rec(P, TXPid),
+ send_rec(P, TXPort),
+ send_rec(P, TXRef),
- ?line send_rec(P, TXPid),
- ?line send_rec(P, TXPort),
- ?line send_rec(P, TXRef),
- ?line send_rec(P, OXPid),
- ?line send_rec(P, OXPort),
- ?line send_rec(P, OXRef),
+ [begin OtherNode = {gurka@sallad, Creation},
+ send_rec(P, mk_pid(OtherNode, 32767, 8191)),
+ send_rec(P, mk_port(OtherNode, 268435455)),
+ send_rec(P, mk_ref(OtherNode, [262143, 4294967295, 4294967295])),
+ void
+ end || Creation <- [1, 2, 3, 4, 16#adec0ded]],
%% Unicode atoms
[begin send_rec(P, Atom),
- send_rec(P, mk_pid({Atom,1}, 23434, 3434)),
- send_rec(P, mk_port({Atom,1}, 2343434)),
- send_rec(P, mk_ref({Atom,1}, [262143, 8723648, 24097245])),
- void
+ send_rec(P, mk_pid({Atom,1}, 23434, 3434)),
+ send_rec(P, mk_port({Atom,1}, 2343434)),
+ send_rec(P, mk_ref({Atom,1}, [262143, 8723648, 24097245])),
+ void
end || Atom <- unicode_atom_data()],
send_rec(P, {}),
@@ -137,7 +116,7 @@ test_ei_decode_encode(Config) when is_list(Config) ->
send_rec(P, #{key => value}),
send_rec(P, maps:put(Port, Ref, #{key => value, key2 => Pid})),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
@@ -146,29 +125,27 @@ test_ei_decode_encode(Config) when is_list(Config) ->
% We read two packets for each test, the ei_decode_encode and ei_x_decode_encode version....
send_rec(P, Term) when is_port(P) ->
- %%?t:format("Testing: ~p~n", [Term]),
P ! {self(), {command, term_to_binary(Term)}},
{_B,Term} = get_buf_and_term(P).
-
get_buf_and_term(P) ->
B = get_binaries(P),
case B of
- <<131>> ->
- io:format("(got single magic, no content)\n",[]),
- {B,'$$magic$$'};
- <<131,_>> ->
- T = binary_to_term(B),
- io:format("~w\n~w\n(got magic)\n",[B,T]),
- {B,T};
- _ ->
- B1 = list_to_binary([131,B]), % No magic, add
- T = binary_to_term(B1),
- %io:format("~w\n~w\n(got no magic)\n",[B,T]),
- {B,T}
+ <<131>> ->
+ io:format("(got single magic, no content)\n",[]),
+ {B,'$$magic$$'};
+ <<131,_>> ->
+ T = binary_to_term(B),
+ io:format("~w\n~w\n(got magic)\n",[B,T]),
+ {B,T};
+ _ ->
+ B1 = list_to_binary([131,B]), % No magic, add
+ T = binary_to_term(B1),
+ %io:format("~w\n~w\n(got no magic)\n",[B,T]),
+ {B,T}
end.
-
+
get_binaries(P) ->
B1 = get_binary(P),
@@ -177,40 +154,17 @@ get_binaries(P) ->
get_binary(P) ->
case runner:get_term(P) of
- {bytes,L} ->
- B = list_to_binary(L),
- %%io:format("~w\n",[L]),
-% For strange reasons <<131>> show up as <>....
-% io:format("~w\n",[B]),
- B;
- Other ->
- Other
+ {bytes,L} ->
+ B = list_to_binary(L),
+ %%io:format("~w\n",[L]),
+ % For strange reasons <<131>> show up as <>....
+ % io:format("~w\n",[B]),
+ B;
+ Other ->
+ Other
end.
%%
-
-% We use our own get_term()
-
-get_term(P) ->
- case runner:get_term(P) of
- {bytes,[131]} ->
- io:format("(got single magic, no content)\n",[]),
- '$$magic$$';
- {bytes,[131,L]} ->
- B = list_to_binary(L),
- T = binary_to_term(B),
- io:format("~w\n~w\n(got magic)\n",[L,T]),
- T;
- {bytes,L} ->
- B = list_to_binary([131,L]),
- T = binary_to_term(B),
- io:format("~w\n~w\n(got no magic)\n",[L,T]),
- T;
- Other ->
- Other
- end.
-
-%%
%% Node container constructor functions
%%
@@ -221,6 +175,9 @@ get_term(P) ->
-define(PORT_EXT, 102).
-define(PID_EXT, 103).
-define(NEW_REFERENCE_EXT, 114).
+-define(NEW_PID_EXT, $X).
+-define(NEW_PORT_EXT, $Y).
+-define(NEWER_REFERENCE_EXT, $Z).
uint32_be(Uint) when is_integer(Uint), 0 =< Uint, Uint < 1 bsl 32 ->
[(Uint bsr 24) band 16#ff,
@@ -242,18 +199,22 @@ uint8(Uint) when is_integer(Uint), 0 =< Uint, Uint < 1 bsl 8 ->
uint8(Uint) ->
exit({badarg, uint8, [Uint]}).
+pid_tag(Creation) when Creation =< 3 -> ?PID_EXT;
+pid_tag(_Creation) -> ?NEW_PID_EXT.
+enc_creation(Creation) when Creation =< 3 -> uint8(Creation);
+enc_creation(Creation) -> uint32_be(Creation).
mk_pid({NodeName, Creation}, Number, Serial) when is_atom(NodeName) ->
<<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName),
mk_pid({NodeNameExt, Creation}, Number, Serial);
mk_pid({NodeNameExt, Creation}, Number, Serial) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PID_EXT,
- NodeNameExt,
- uint32_be(Number),
- uint32_be(Serial),
- uint8(Creation)])) of
+ pid_tag(Creation),
+ NodeNameExt,
+ uint32_be(Number),
+ uint32_be(Serial),
+ enc_creation(Creation)])) of
Pid when is_pid(Pid) ->
Pid;
{'EXIT', {badarg, _}} ->
@@ -262,15 +223,18 @@ mk_pid({NodeNameExt, Creation}, Number, Serial) ->
exit({unexpected_binary_to_term_result, Other})
end.
+port_tag(Creation) when Creation =< 3 -> ?PORT_EXT;
+port_tag(_Creation) -> ?NEW_PORT_EXT.
+
mk_port({NodeName, Creation}, Number) when is_atom(NodeName) ->
<<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName),
mk_port({NodeNameExt, Creation}, Number);
mk_port({NodeNameExt, Creation}, Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PORT_EXT,
+ port_tag(Creation),
NodeNameExt,
uint32_be(Number),
- uint8(Creation)])) of
+ enc_creation(Creation)])) of
Port when is_port(Port) ->
Port;
{'EXIT', {badarg, _}} ->
@@ -279,34 +243,38 @@ mk_port({NodeNameExt, Creation}, Number) ->
exit({unexpected_binary_to_term_result, Other})
end.
+ref_tag(Creation) when Creation =< 3 -> ?NEW_REFERENCE_EXT;
+ref_tag(_Creation) -> ?NEWER_REFERENCE_EXT.
+
mk_ref({NodeName, Creation}, Numbers) when is_atom(NodeName),
- is_integer(Creation),
- is_list(Numbers) ->
+ is_integer(Creation),
+ is_list(Numbers) ->
<<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName),
mk_ref({NodeNameExt, Creation}, Numbers);
mk_ref({NodeNameExt, Creation}, [Number]) when is_binary(NodeNameExt),
is_integer(Creation),
+ Creation =< 3,
is_integer(Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?REFERENCE_EXT,
- NodeNameExt,
- uint32_be(Number),
- uint8(Creation)])) of
- Ref when is_reference(Ref) ->
- Ref;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_ref, [{NodeNameExt, Creation}, [Number]]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?REFERENCE_EXT,
+ NodeNameExt,
+ uint32_be(Number),
+ uint8(Creation)])) of
+ Ref when is_reference(Ref) ->
+ Ref;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_ref, [{NodeNameExt, Creation}, [Number]]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end;
mk_ref({NodeNameExt, Creation}, Numbers) when is_binary(NodeNameExt),
- is_integer(Creation),
- is_list(Numbers) ->
+ is_integer(Creation),
+ is_list(Numbers) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?NEW_REFERENCE_EXT,
+ ref_tag(Creation),
uint16_be(length(Numbers)),
NodeNameExt,
- uint8(Creation),
+ enc_creation(Creation),
lists:map(fun (N) ->
uint32_be(N)
end,
@@ -333,10 +301,10 @@ unicode_atom_data() ->
uc_atup(lists:seq(65500, 65754)),
uc_atup(lists:seq(65500, 65563))
| lists:map(fun (N) ->
- Pow2 = (1 bsl N),
- uc_atup(lists:seq(Pow2 - 127, Pow2 + 127))
- end,
- lists:seq(7, 20))
+ Pow2 = (1 bsl N),
+ uc_atup(lists:seq(Pow2 - 127, Pow2 + 127))
+ end,
+ lists:seq(7, 20))
].
uc_atup(ATxt) ->
@@ -346,33 +314,33 @@ string_to_atom(String) ->
Utf8List = string_to_utf8_list(String),
Len = length(Utf8List),
TagLen = case Len < 256 of
- true -> [119, Len];
- false -> [118, Len bsr 8, Len band 16#ff]
- end,
+ true -> [119, Len];
+ false -> [118, Len bsr 8, Len band 16#ff]
+ end,
binary_to_term(list_to_binary([131, TagLen, Utf8List])).
string_to_utf8_list([]) ->
[];
string_to_utf8_list([CP|CPs]) when is_integer(CP),
- 0 =< CP,
- CP =< 16#7F ->
+ 0 =< CP,
+ CP =< 16#7F ->
[CP | string_to_utf8_list(CPs)];
string_to_utf8_list([CP|CPs]) when is_integer(CP),
- 16#80 =< CP,
- CP =< 16#7FF ->
+ 16#80 =< CP,
+ CP =< 16#7FF ->
[16#C0 bor (CP bsr 6),
16#80 bor (16#3F band CP)
| string_to_utf8_list(CPs)];
string_to_utf8_list([CP|CPs]) when is_integer(CP),
- 16#800 =< CP,
- CP =< 16#FFFF ->
+ 16#800 =< CP,
+ CP =< 16#FFFF ->
[16#E0 bor (CP bsr 12),
16#80 bor (16#3F band (CP bsr 6)),
16#80 bor (16#3F band CP)
| string_to_utf8_list(CPs)];
string_to_utf8_list([CP|CPs]) when is_integer(CP),
- 16#10000 =< CP,
- CP =< 16#10FFFF ->
+ 16#10000 =< CP,
+ CP =< 16#10FFFF ->
[16#F0 bor (CP bsr 18),
16#80 bor (16#3F band (CP bsr 12)),
16#80 bor (16#3F band (CP bsr 6)),
diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first
index 6edcc0c5ed..ee9e25adbc 100644
--- a/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src
index 03db2ae9f2..853fe9ddeb 100644
--- a/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c b/lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c
index 4b0201ca0b..467f789fdb 100644
--- a/lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c
+++ b/lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -240,7 +240,7 @@ void decode_encode(struct Type** tv, int nobj)
if (err != -1) {
fail("decode returned non zero but not -1");
} else {
- fail("decode returned non zero");
+ fail1("decode '%s' returned non zero", t->name);
}
return;
}
@@ -491,12 +491,11 @@ TESTCASE(test_ei_decode_encode)
decode_encode_big(&big_type);
/* Test large node containers... */
- decode_encode_one(&pid_type);
- decode_encode_one(&port_type);
- decode_encode_one(&ref_type);
- decode_encode_one(&pid_type);
- decode_encode_one(&port_type);
- decode_encode_one(&ref_type);
+ for (i=0; i<6; i++) {
+ decode_encode_one(&pid_type);
+ decode_encode_one(&port_type);
+ decode_encode_one(&ref_type);
+ }
/* Unicode atoms */
for (i=0; i<24; i++) {
diff --git a/lib/erl_interface/test/ei_encode_SUITE.erl b/lib/erl_interface/test/ei_encode_SUITE.erl
index 6213916314..ac6ec9cf4e 100644
--- a/lib/erl_interface/test/ei_encode_SUITE.erl
+++ b/lib/erl_interface/test/ei_encode_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,25 +21,22 @@
%%
-module(ei_encode_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("ei_encode_SUITE_data/ei_encode_test_cases.hrl").
--export(
- [
- all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- test_ei_encode_long/1,
- test_ei_encode_ulong/1,
- test_ei_encode_longlong/1,
- test_ei_encode_ulonglong/1,
- test_ei_encode_char/1,
- test_ei_encode_misc/1,
- test_ei_encode_fails/1,
- test_ei_encode_utf8_atom/1,
- test_ei_encode_utf8_atom_len/1
- ]).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+-export([all/0, suite/0,
+ test_ei_encode_long/1,
+ test_ei_encode_ulong/1,
+ test_ei_encode_longlong/1,
+ test_ei_encode_ulonglong/1,
+ test_ei_encode_char/1,
+ test_ei_encode_misc/1,
+ test_ei_encode_fails/1,
+ test_ei_encode_utf8_atom/1,
+ test_ei_encode_utf8_atom_len/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[test_ei_encode_long, test_ei_encode_ulong,
@@ -48,21 +45,6 @@ all() ->
test_ei_encode_fails, test_ei_encode_utf8_atom,
test_ei_encode_utf8_atom_len].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%% ---------------------------------------------------------------------------
@@ -72,105 +54,101 @@ end_per_group(_GroupName, Config) ->
%% ######################################################################## %%
-test_ei_encode_long(suite) -> [];
test_ei_encode_long(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_encode_long),
+ P = runner:start(?test_ei_encode_long),
- ?line {<<97,0>> ,0} = get_buf_and_term(P),
- ?line {<<97,255>> ,255} = get_buf_and_term(P),
- ?line {<<98,256:32/big-signed-integer>>,256} = get_buf_and_term(P),
- ?line {<<98,-1:32/big-signed-integer>> ,-1} = get_buf_and_term(P),
+ {<<97,0>> ,0} = get_buf_and_term(P),
+ {<<97,255>> ,255} = get_buf_and_term(P),
+ {<<98,256:32/big-signed-integer>>,256} = get_buf_and_term(P),
+ {<<98,-1:32/big-signed-integer>> ,-1} = get_buf_and_term(P),
- ?line {<<98, 16#07ffffff:32/big-signed-integer>>, 16#07ffffff} = get_buf_and_term(P),
- ?line {<<98,-16#08000000:32/big-signed-integer>>,-16#08000000} = get_buf_and_term(P),
- ?line {<<110,4,0, 0,0,0,8>> , 16#08000000} = get_buf_and_term(P),
- ?line {<<110,4,1, 1,0,0,8>> ,-16#08000001} = get_buf_and_term(P),
+ {<<98, 16#07ffffff:32/big-signed-integer>>, 16#07ffffff} = get_buf_and_term(P),
+ {<<98,-16#08000000:32/big-signed-integer>>,-16#08000000} = get_buf_and_term(P),
+ {<<110,4,0, 0,0,0,8>> , 16#08000000} = get_buf_and_term(P),
+ {<<110,4,1, 1,0,0,8>> ,-16#08000001} = get_buf_and_term(P),
- ?line {<<110,4,0, 255,255,255,127>> , 16#7fffffff} = get_buf_and_term(P),
- ?line {<<110,4,1, 0,0,0,128>> ,-16#80000000} = get_buf_and_term(P),
+ {<<110,4,0, 255,255,255,127>> , 16#7fffffff} = get_buf_and_term(P),
+ {<<110,4,1, 0,0,0,128>> ,-16#80000000} = get_buf_and_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
-test_ei_encode_ulong(suite) -> [];
test_ei_encode_ulong(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_encode_ulong),
+ P = runner:start(?test_ei_encode_ulong),
- ?line {<<97,0>> ,0} = get_buf_and_term(P),
- ?line {<<97,255>> ,255} = get_buf_and_term(P),
- ?line {<<98,256:32/big-unsigned-integer>>,256} = get_buf_and_term(P),
+ {<<97,0>> ,0} = get_buf_and_term(P),
+ {<<97,255>> ,255} = get_buf_and_term(P),
+ {<<98,256:32/big-unsigned-integer>>,256} = get_buf_and_term(P),
- ?line {<<98, 16#07ffffff:32/big-signed-integer>>,16#07ffffff} = get_buf_and_term(P),
- ?line {<<110,4,0, 0,0,0,8>> ,16#08000000} = get_buf_and_term(P),
+ {<<98, 16#07ffffff:32/big-signed-integer>>,16#07ffffff} = get_buf_and_term(P),
+ {<<110,4,0, 0,0,0,8>> ,16#08000000} = get_buf_and_term(P),
- ?line {<<110,4,0, 255,255,255,127>> ,16#7fffffff} = get_buf_and_term(P),
- ?line {<<110,4,0, 0,0,0,128>> ,16#80000000} = get_buf_and_term(P),
- ?line {<<110,4,0, 255,255,255,255>> ,16#ffffffff} = get_buf_and_term(P),
+ {<<110,4,0, 255,255,255,127>> ,16#7fffffff} = get_buf_and_term(P),
+ {<<110,4,0, 0,0,0,128>> ,16#80000000} = get_buf_and_term(P),
+ {<<110,4,0, 255,255,255,255>> ,16#ffffffff} = get_buf_and_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
-test_ei_encode_longlong(suite) -> [];
test_ei_encode_longlong(Config) when is_list(Config) ->
case os:type() of
- vxworks ->
- {skip,"Skipped on VxWorks"};
- _ ->
- ?line P = runner:start(?test_ei_encode_longlong),
-
- ?line {<<97,0>> ,0} = get_buf_and_term(P),
- ?line {<<97,255>> ,255} = get_buf_and_term(P),
- ?line {<<98,256:32/big-signed-integer>>,256} = get_buf_and_term(P),
- ?line {<<98,-1:32/big-signed-integer>> ,-1} = get_buf_and_term(P),
-
- ?line {<<98, 16#07ffffff:32/big-signed-integer>>, 16#07ffffff} = get_buf_and_term(P),
- ?line {<<98,-16#08000000:32/big-signed-integer>>,-16#08000000} = get_buf_and_term(P),
- ?line {<<110,4,0, 0,0,0,8>> , 16#08000000} = get_buf_and_term(P),
- ?line {<<110,4,1, 1,0,0,8>> ,-16#08000001} = get_buf_and_term(P),
-
- ?line {<<110,4,0, 255,255,255,127>> , 16#7fffffff} = get_buf_and_term(P),
- ?line {<<110,4,1, 0,0,0,128>> ,-16#80000000} = get_buf_and_term(P),
- ?line {<<110,6,0, 255,255,255,255,255,127>> , 16#7fffffffffff} = get_buf_and_term(P),
- ?line {<<110,6,1, 0,0,0,0,0,128>> ,-16#800000000000} = get_buf_and_term(P),
- ?line {<<110,8,0, 255,255,255,255,255,255,255,127>>,16#7fffffffffffffff} = get_buf_and_term(P),
- ?line {<<110,8,1, 0,0,0,0,0,0,0,128>> ,-16#8000000000000000} = get_buf_and_term(P),
-
- ?line runner:recv_eot(P),
- ok
+ vxworks ->
+ {skip,"Skipped on VxWorks"};
+ _ ->
+ P = runner:start(?test_ei_encode_longlong),
+
+ {<<97,0>> ,0} = get_buf_and_term(P),
+ {<<97,255>> ,255} = get_buf_and_term(P),
+ {<<98,256:32/big-signed-integer>>,256} = get_buf_and_term(P),
+ {<<98,-1:32/big-signed-integer>> ,-1} = get_buf_and_term(P),
+
+ {<<98, 16#07ffffff:32/big-signed-integer>>, 16#07ffffff} = get_buf_and_term(P),
+ {<<98,-16#08000000:32/big-signed-integer>>,-16#08000000} = get_buf_and_term(P),
+ {<<110,4,0, 0,0,0,8>> , 16#08000000} = get_buf_and_term(P),
+ {<<110,4,1, 1,0,0,8>> ,-16#08000001} = get_buf_and_term(P),
+
+ {<<110,4,0, 255,255,255,127>> , 16#7fffffff} = get_buf_and_term(P),
+ {<<110,4,1, 0,0,0,128>> ,-16#80000000} = get_buf_and_term(P),
+ {<<110,6,0, 255,255,255,255,255,127>> , 16#7fffffffffff} = get_buf_and_term(P),
+ {<<110,6,1, 0,0,0,0,0,128>> ,-16#800000000000} = get_buf_and_term(P),
+ {<<110,8,0, 255,255,255,255,255,255,255,127>>,16#7fffffffffffffff} = get_buf_and_term(P),
+ {<<110,8,1, 0,0,0,0,0,0,0,128>> ,-16#8000000000000000} = get_buf_and_term(P),
+
+ runner:recv_eot(P),
+ ok
end.
%% ######################################################################## %%
-test_ei_encode_ulonglong(suite) -> [];
test_ei_encode_ulonglong(Config) when is_list(Config) ->
case os:type() of
- vxworks ->
- {skip,"Skipped on VxWorks"};
- _ ->
- ?line P = runner:start(?test_ei_encode_ulonglong),
-
- ?line {<<97,0>> ,0} = get_buf_and_term(P),
- ?line {<<97,255>> ,255} = get_buf_and_term(P),
- ?line {<<98,256:32/big-unsigned-integer>>,256} = get_buf_and_term(P),
-
- ?line {<<98, 16#07ffffff:32/big-signed-integer>>,16#07ffffff} = get_buf_and_term(P),
- ?line {<<110,4,0, 0,0,0,8>> ,16#08000000} = get_buf_and_term(P),
-
- ?line {<<110,4,0, 255,255,255,127>> ,16#7fffffff} = get_buf_and_term(P),
- ?line {<<110,4,0, 0,0,0,128>> ,16#80000000} = get_buf_and_term(P),
- ?line {<<110,4,0, 255,255,255,255>> ,16#ffffffff} = get_buf_and_term(P),
- ?line {<<110,6,0, 255,255,255,255,255,255>>,16#ffffffffffff} = get_buf_and_term(P),
- ?line {<<110,8,0, 255,255,255,255,255,255,255,255>>,16#ffffffffffffffff} = get_buf_and_term(P),
-
- ?line runner:recv_eot(P),
- ok
+ vxworks ->
+ {skip,"Skipped on VxWorks"};
+ _ ->
+ P = runner:start(?test_ei_encode_ulonglong),
+
+ {<<97,0>> ,0} = get_buf_and_term(P),
+ {<<97,255>> ,255} = get_buf_and_term(P),
+ {<<98,256:32/big-unsigned-integer>>,256} = get_buf_and_term(P),
+
+ {<<98, 16#07ffffff:32/big-signed-integer>>,16#07ffffff} = get_buf_and_term(P),
+ {<<110,4,0, 0,0,0,8>> ,16#08000000} = get_buf_and_term(P),
+
+ {<<110,4,0, 255,255,255,127>> ,16#7fffffff} = get_buf_and_term(P),
+ {<<110,4,0, 0,0,0,128>> ,16#80000000} = get_buf_and_term(P),
+ {<<110,4,0, 255,255,255,255>> ,16#ffffffff} = get_buf_and_term(P),
+ {<<110,6,0, 255,255,255,255,255,255>>,16#ffffffffffff} = get_buf_and_term(P),
+ {<<110,8,0, 255,255,255,255,255,255,255,255>>,16#ffffffffffffffff} = get_buf_and_term(P),
+
+ runner:recv_eot(P),
+ ok
end.
@@ -179,115 +157,112 @@ test_ei_encode_ulonglong(Config) when is_list(Config) ->
%% it is unsigned.
%% FIXME maybe the API should change to use "unsigned char" to be clear?!
-test_ei_encode_char(suite) -> [];
test_ei_encode_char(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_encode_char),
+ P = runner:start(?test_ei_encode_char),
- ?line {<<97, 0>>,0} = get_buf_and_term(P),
- ?line {<<97,127>>,16#7f} = get_buf_and_term(P),
- ?line {<<97,255>>,16#ff} = get_buf_and_term(P),
+ {<<97, 0>>,0} = get_buf_and_term(P),
+ {<<97,127>>,16#7f} = get_buf_and_term(P),
+ {<<97,255>>,16#ff} = get_buf_and_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
-test_ei_encode_misc(suite) -> [];
test_ei_encode_misc(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_encode_misc),
+ P = runner:start(?test_ei_encode_misc),
- ?line <<131>> = get_binaries(P),
+ <<131>> = get_binaries(P),
- ?line {<<70,_:8/binary>>,F0} = get_buf_and_term(P),
- ?line true = match_float(F0, 0.0),
+ {<<70,_:8/binary>>,F0} = get_buf_and_term(P),
+ true = match_float(F0, 0.0),
- ?line {<<70,_:8/binary>>,Fn1} = get_buf_and_term(P),
- ?line true = match_float(Fn1, -1.0),
+ {<<70,_:8/binary>>,Fn1} = get_buf_and_term(P),
+ true = match_float(Fn1, -1.0),
- ?line {<<70,_:8/binary>>,Fp1} = get_buf_and_term(P),
- ?line true = match_float(Fp1, 1.0),
+ {<<70,_:8/binary>>,Fp1} = get_buf_and_term(P),
+ true = match_float(Fp1, 1.0),
- ?line {<<100,0,5,"false">>,false} = get_buf_and_term(P),
- ?line {<<100,0,4,"true">> ,true} = get_buf_and_term(P),
- ?line {<<100,0,4,"true">> ,true} = get_buf_and_term(P),
- ?line {<<100,0,4,"true">> ,true} = get_buf_and_term(P),
+ {<<100,0,5,"false">>,false} = get_buf_and_term(P),
+ {<<100,0,4,"true">> ,true} = get_buf_and_term(P),
+ {<<100,0,4,"true">> ,true} = get_buf_and_term(P),
+ {<<100,0,4,"true">> ,true} = get_buf_and_term(P),
- ?line {<<100,0,3,"foo">>,foo} = get_buf_and_term(P),
- ?line {<<100,0,3,"foo">>,foo} = get_buf_and_term(P),
- ?line {<<100,0,0,"">>,''} = get_buf_and_term(P),
- ?line {<<100,0,0,"">>,''} = get_buf_and_term(P),
- ?line {<<100,0,6,"ÅÄÖåäö">>,'ÅÄÖåäö'} = get_buf_and_term(P),
- ?line {<<100,0,6,"ÅÄÖåäö">>,'ÅÄÖåäö'} = get_buf_and_term(P),
+ {<<100,0,3,"foo">>,foo} = get_buf_and_term(P),
+ {<<100,0,3,"foo">>,foo} = get_buf_and_term(P),
+ {<<100,0,0,"">>,''} = get_buf_and_term(P),
+ {<<100,0,0,"">>,''} = get_buf_and_term(P),
+ {<<100,0,6,"ÅÄÖåäö">>,'ÅÄÖåäö'} = get_buf_and_term(P),
+ {<<100,0,6,"ÅÄÖåäö">>,'ÅÄÖåäö'} = get_buf_and_term(P),
- ?line {<<107,0,3,"foo">>,"foo"} = get_buf_and_term(P),
- ?line {<<107,0,3,"foo">>,"foo"} = get_buf_and_term(P),
- ?line {<<106>>,""} = get_buf_and_term(P),
- ?line {<<106>>,""} = get_buf_and_term(P),
- ?line {<<107,0,6,"ÅÄÖåäö">>,"ÅÄÖåäö"} = get_buf_and_term(P),
- ?line {<<107,0,6,"ÅÄÖåäö">>,"ÅÄÖåäö"} = get_buf_and_term(P),
+ {<<107,0,3,"foo">>,"foo"} = get_buf_and_term(P),
+ {<<107,0,3,"foo">>,"foo"} = get_buf_and_term(P),
+ {<<106>>,""} = get_buf_and_term(P),
+ {<<106>>,""} = get_buf_and_term(P),
+ {<<107,0,6,"ÅÄÖåäö">>,"ÅÄÖåäö"} = get_buf_and_term(P),
+ {<<107,0,6,"ÅÄÖåäö">>,"ÅÄÖåäö"} = get_buf_and_term(P),
- ?line {<<109,0,0,0,3,"foo">>,<<"foo">>} = get_buf_and_term(P),
- ?line {<<109,0,0,0,0,"">>,<<>>} = get_buf_and_term(P),
- ?line {<<109,0,0,0,6,"ÅÄÖåäö">>,<<"ÅÄÖåäö">>} = get_buf_and_term(P),
+ {<<109,0,0,0,3,"foo">>,<<"foo">>} = get_buf_and_term(P),
+ {<<109,0,0,0,0,"">>,<<>>} = get_buf_and_term(P),
+ {<<109,0,0,0,6,"ÅÄÖåäö">>,<<"ÅÄÖåäö">>} = get_buf_and_term(P),
- ?line {<<104,0>>,{}} = get_buf_and_term(P), % Tuple header for {}
- ?line {<<106>>,[]} = get_buf_and_term(P), % Empty list []
+ {<<104,0>>,{}} = get_buf_and_term(P), % Tuple header for {}
+ {<<106>>,[]} = get_buf_and_term(P), % Empty list []
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
-test_ei_encode_fails(suite) -> [];
test_ei_encode_fails(Config) when is_list(Config) ->
- ?line P = runner:start(?test_ei_encode_fails),
+ P = runner:start(?test_ei_encode_fails),
- ?line XAtom = list_to_atom(lists:duplicate(255, $x)),
- ?line YAtom = list_to_atom(lists:duplicate(255, $y)),
+ XAtom = list_to_atom(lists:duplicate(255, $x)),
+ YAtom = list_to_atom(lists:duplicate(255, $y)),
- ?line XAtom = get_term(P),
- ?line XAtom = get_term(P),
- ?line YAtom = get_term(P),
- ?line YAtom = get_term(P),
+ XAtom = get_term(P),
+ XAtom = get_term(P),
+ YAtom = get_term(P),
+ YAtom = get_term(P),
- ?line {{{{}}}} = get_term(P),
+ {{{{}}}} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
test_ei_encode_utf8_atom(Config) ->
- ?line P = runner:start(?test_ei_encode_utf8_atom),
-
- ?line {<<119,2,195,133>>,'Å'} = get_buf_and_term(P),
- ?line {<<100,0,1,197>>,'Å'} = get_buf_and_term(P),
- ?line {<<100,0,1,197>>,'Å'} = get_buf_and_term(P),
- ?line {<<119,2,195,133>>,'Å'} = get_buf_and_term(P),
+ P = runner:start(?test_ei_encode_utf8_atom),
- ?line {<<119,1,$A>>,'A'} = get_buf_and_term(P),
- ?line {<<100,0,1,$A>>,'A'} = get_buf_and_term(P),
+ {<<119,2,195,133>>,'Å'} = get_buf_and_term(P),
+ {<<100,0,1,197>>,'Å'} = get_buf_and_term(P),
+ {<<100,0,1,197>>,'Å'} = get_buf_and_term(P),
+ {<<119,2,195,133>>,'Å'} = get_buf_and_term(P),
- ?line runner:recv_eot(P),
+ {<<119,1,$A>>,'A'} = get_buf_and_term(P),
+ {<<100,0,1,$A>>,'A'} = get_buf_and_term(P),
+
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
test_ei_encode_utf8_atom_len(Config) ->
- ?line P = runner:start(?test_ei_encode_utf8_atom_len),
-
- ?line {<<119,2,195,133>>,'Å'} = get_buf_and_term(P),
- ?line {<<100,0,2,197,196>>,'ÅÄ'} = get_buf_and_term(P),
- ?line {<<100,0,1,197>>,'Å'} = get_buf_and_term(P),
- ?line {<<119,4,195,133,195,132>>,'ÅÄ'} = get_buf_and_term(P),
-
- ?line {<<119,1,$A>>,'A'} = get_buf_and_term(P),
- ?line {<<100,0,2,$A,$B>>,'AB'} = get_buf_and_term(P),
- ?line {<<100,0,255,_:(255*8)>>,_} = get_buf_and_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?test_ei_encode_utf8_atom_len),
+
+ {<<119,2,195,133>>,'Å'} = get_buf_and_term(P),
+ {<<100,0,2,197,196>>,'ÅÄ'} = get_buf_and_term(P),
+ {<<100,0,1,197>>,'Å'} = get_buf_and_term(P),
+ {<<119,4,195,133,195,132>>,'ÅÄ'} = get_buf_and_term(P),
+
+ {<<119,1,$A>>,'A'} = get_buf_and_term(P),
+ {<<100,0,2,$A,$B>>,'AB'} = get_buf_and_term(P),
+ {<<100,0,255,_:(255*8)>>,_} = get_buf_and_term(P),
+
+ runner:recv_eot(P),
ok.
%% ######################################################################## %%
@@ -297,20 +272,20 @@ test_ei_encode_utf8_atom_len(Config) ->
get_buf_and_term(P) ->
B = get_binaries(P),
case B of
- <<131>> ->
- io:format("(got single magic, no content)\n",[]),
- {B,'$$magic$$'};
- <<131,_>> ->
- T = binary_to_term(B),
- io:format("~w\n~w\n(got magic)\n",[B,T]),
- {B,T};
- _ ->
- B1 = list_to_binary([131,B]), % No magic, add
- T = binary_to_term(B1),
- io:format("~w\n~w\n(got no magic)\n",[B,T]),
- {B,T}
+ <<131>> ->
+ io:format("(got single magic, no content)\n",[]),
+ {B,'$$magic$$'};
+ <<131,_>> ->
+ T = binary_to_term(B),
+ io:format("~w\n~w\n(got magic)\n",[B,T]),
+ {B,T};
+ _ ->
+ B1 = list_to_binary([131,B]), % No magic, add
+ T = binary_to_term(B1),
+ io:format("~w\n~w\n(got no magic)\n",[B,T]),
+ {B,T}
end.
-
+
get_binaries(P) ->
B1 = get_binary(P),
@@ -319,14 +294,14 @@ get_binaries(P) ->
get_binary(P) ->
case runner:get_term(P) of
- {bytes,L} ->
- B = list_to_binary(L),
- io:format("~w\n",[L]),
-% For strange reasons <<131>> show up as <>....
-% io:format("~w\n",[B]),
- B;
- Other ->
- Other
+ {bytes,L} ->
+ B = list_to_binary(L),
+ io:format("~w\n",[L]),
+ % For strange reasons <<131>> show up as <>....
+ % io:format("~w\n",[B]),
+ B;
+ Other ->
+ Other
end.
%%
@@ -335,27 +310,26 @@ get_binary(P) ->
get_term(P) ->
case runner:get_term(P) of
- {bytes,[131]} ->
- io:format("(got single magic, no content)\n",[]),
- '$$magic$$';
- {bytes,[131,L]} ->
- B = list_to_binary(L),
- T = binary_to_term(B),
- io:format("~w\n~w\n(got magic)\n",[L,T]),
- T;
- {bytes,L} ->
- B = list_to_binary([131,L]),
- T = binary_to_term(B),
- io:format("~w\n~w\n(got no magic)\n",[L,T]),
- T;
- Other ->
- Other
+ {bytes,[131]} ->
+ io:format("(got single magic, no content)\n",[]),
+ '$$magic$$';
+ {bytes,[131,L]} ->
+ B = list_to_binary(L),
+ T = binary_to_term(B),
+ io:format("~w\n~w\n(got magic)\n",[L,T]),
+ T;
+ {bytes,L} ->
+ B = list_to_binary([131,L]),
+ T = binary_to_term(B),
+ io:format("~w\n~w\n(got no magic)\n",[L,T]),
+ T;
+ Other ->
+ Other
end.
-
+
%%
match_float(F, Match) when is_float(F), is_float(Match), F == Match ->
true;
match_float(F, Match) when is_float(F), F > Match*0.99, F < Match*1.01 ->
true.
-
diff --git a/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first
index 26ba7f475e..0d2d3510a7 100644
--- a/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src
index 753700d7e2..3b2cab7af4 100644
--- a/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c b/lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c
index ace368f8e6..32811fdf22 100644
--- a/lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c
+++ b/lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_format_SUITE.erl b/lib/erl_interface/test/ei_format_SUITE.erl
index 11cbae31db..07ee479b1f 100644
--- a/lib/erl_interface/test/ei_format_SUITE.erl
+++ b/lib/erl_interface/test/ei_format_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,158 +21,134 @@
%%
-module(ei_format_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("ei_format_SUITE_data/ei_format_test_cases.hrl").
--export([
- format_wo_ver/1,
- all/0, suite/0,groups/0,
- init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- atoms/1,
- tuples/1,
- lists/1
- ]).
+-export([format_wo_ver/1,
+ all/0, suite/0,
+ atoms/1,
+ tuples/1,
+ lists/1]).
-import(runner, [get_term/1]).
%% This test suite test the erl_format() function.
%% It uses the port program "ei_format_test".
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[format_wo_ver, atoms, tuples, lists].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%% Tests formatting various atoms.
-atoms(suite) -> [];
atoms(Config) when is_list(Config) ->
- ?line P = runner:start(?atoms),
-
- ?line {term, ''} = get_term(P),
- ?line {term, 'a'} = get_term(P),
- ?line {term, 'A'} = get_term(P),
- ?line {term, 'abc'} = get_term(P),
- ?line {term, 'Abc'} = get_term(P),
- ?line {term, 'ab@c'} = get_term(P),
- ?line {term, 'The rain in Spain stays mainly in the plains'} =
- get_term(P),
-
- ?line {term, a} = get_term(P),
- ?line {term, ab} = get_term(P),
- ?line {term, abc} = get_term(P),
- ?line {term, ab@c} = get_term(P),
- ?line {term, abcdefghijklmnopq} = get_term(P),
-
- ?line {term, ''} = get_term(P),
- ?line {term, 'a'} = get_term(P),
- ?line {term, 'A'} = get_term(P),
- ?line {term, 'abc'} = get_term(P),
- ?line {term, 'Abc'} = get_term(P),
- ?line {term, 'ab@c'} = get_term(P),
- ?line {term, 'The rain in Spain stays mainly in the plains'} =
- get_term(P),
-
- ?line {term, a} = get_term(P),
- ?line {term, ab} = get_term(P),
- ?line {term, abc} = get_term(P),
- ?line {term, ab@c} = get_term(P),
- ?line {term, ' abcdefghijklmnopq '} = get_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?atoms),
+
+ {term, ''} = get_term(P),
+ {term, 'a'} = get_term(P),
+ {term, 'A'} = get_term(P),
+ {term, 'abc'} = get_term(P),
+ {term, 'Abc'} = get_term(P),
+ {term, 'ab@c'} = get_term(P),
+ {term, 'The rain in Spain stays mainly in the plains'} =
+ get_term(P),
+
+ {term, a} = get_term(P),
+ {term, ab} = get_term(P),
+ {term, abc} = get_term(P),
+ {term, ab@c} = get_term(P),
+ {term, abcdefghijklmnopq} = get_term(P),
+
+ {term, ''} = get_term(P),
+ {term, 'a'} = get_term(P),
+ {term, 'A'} = get_term(P),
+ {term, 'abc'} = get_term(P),
+ {term, 'Abc'} = get_term(P),
+ {term, 'ab@c'} = get_term(P),
+ {term, 'The rain in Spain stays mainly in the plains'} =
+ get_term(P),
+
+ {term, a} = get_term(P),
+ {term, ab} = get_term(P),
+ {term, abc} = get_term(P),
+ {term, ab@c} = get_term(P),
+ {term, ' abcdefghijklmnopq '} = get_term(P),
+
+ runner:recv_eot(P),
ok.
%% Tests formatting various tuples
-tuples(suite) -> [];
tuples(Config) when is_list(Config) ->
- ?line P = runner:start(?tuples),
-
- ?line {term, {}} = get_term(P),
- ?line {term, {a}} = get_term(P),
- ?line {term, {a, b}} = get_term(P),
- ?line {term, {a, b, c}} = get_term(P),
- ?line {term, {1}} = get_term(P),
- ?line {term, {[]}} = get_term(P),
- ?line {term, {[], []}} = get_term(P),
- ?line {term, {[], a, b, c}} = get_term(P),
- ?line {term, {[], a, [], b, c}} = get_term(P),
- ?line {term, {[], a, '', b, c}} = get_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?tuples),
+
+ {term, {}} = get_term(P),
+ {term, {a}} = get_term(P),
+ {term, {a, b}} = get_term(P),
+ {term, {a, b, c}} = get_term(P),
+ {term, {1}} = get_term(P),
+ {term, {[]}} = get_term(P),
+ {term, {[], []}} = get_term(P),
+ {term, {[], a, b, c}} = get_term(P),
+ {term, {[], a, [], b, c}} = get_term(P),
+ {term, {[], a, '', b, c}} = get_term(P),
+
+ runner:recv_eot(P),
ok.
%% Tests formatting various lists
-lists(suite) -> [];
lists(Config) when is_list(Config) ->
- ?line P = runner:start(?lists),
-
- ?line {term, []} = get_term(P),
- ?line {term, [a]} = get_term(P),
- ?line {term, [a, b]} = get_term(P),
- ?line {term, [a, b, c]} = get_term(P),
- ?line {term, [1]} = get_term(P),
- ?line {term, [[]]} = get_term(P),
- ?line {term, [[], []]} = get_term(P),
- ?line {term, [[], a, b, c]} = get_term(P),
- ?line {term, [[], a, [], b, c]} = get_term(P),
- ?line {term, [[], a, '', b, c]} = get_term(P),
- ?line {term, [[x, 2], [y, 3], [z, 4]]}= get_term(P),
- ?line {term, [{a,b},{c,d}]}= get_term(P),
-%% ?line {term, [{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]} =
-%% get_term(P),
-
- ?line {term, [{pi, F1}, {'cos(70)', F2}]} = get_term(P),
+ P = runner:start(?lists),
+
+ {term, []} = get_term(P),
+ {term, [a]} = get_term(P),
+ {term, [a, b]} = get_term(P),
+ {term, [a, b, c]} = get_term(P),
+ {term, [1]} = get_term(P),
+ {term, [[]]} = get_term(P),
+ {term, [[], []]} = get_term(P),
+ {term, [[], a, b, c]} = get_term(P),
+ {term, [[], a, [], b, c]} = get_term(P),
+ {term, [[], a, '', b, c]} = get_term(P),
+ {term, [[x, 2], [y, 3], [z, 4]]}= get_term(P),
+ {term, [{a,b},{c,d}]} = get_term(P),
+ %% {term, [{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]} = get_term(P),
+
+ {term, [{pi, F1}, {'cos(70)', F2}]} = get_term(P),
%% don't match floats directly
true= abs(3.1415-F1) < 0.01,
true= abs(0.34202-F2) < 0.01,
- ?line {term, [[pi, F3], ['cos(70)', F4]]} = get_term(P),
+ {term, [[pi, F3], ['cos(70)', F4]]} = get_term(P),
true= abs(3.1415-F3) < 0.01,
true= abs(0.34202-F4) < 0.01,
-%% ?line {term, [[pi, 3.1415], [], ["cos(70)", 0.34202]]} = get_term(P),
- ?line {term, [-1]} = get_term(P),
- ?line {term, "hejsan"} = get_term(P),
+ %% {term, [[pi, 3.1415], [], ["cos(70)", 0.34202]]} = get_term(P),
+ {term, [-1]} = get_term(P),
+ {term, "hejsan"} = get_term(P),
- ?line Str1 = lists:duplicate(65535,$A),
- ?line Str2 = lists:duplicate(65536,$A),
- ?line {term,Str1} = get_term(P),
- ?line {term,Str2} = get_term(P),
+ Str1 = lists:duplicate(65535,$A),
+ Str2 = lists:duplicate(65536,$A),
+ {term,Str1} = get_term(P),
+ {term,Str2} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
-format_wo_ver(suite) -> [];
format_wo_ver(Config) when is_list(Config) ->
- ?line P = runner:start(?format_wo_ver),
+ P = runner:start(?format_wo_ver),
- ?line {term, [-1, 2, $c, {a, "b"}, {c, 10}]} = get_term(P),
+ {term, [-1, 2, $c, {a, "b"}, {c, 10}]} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
diff --git a/lib/erl_interface/test/ei_format_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_format_SUITE_data/Makefile.first
index d655cd13e6..7bf2d761ac 100644
--- a/lib/erl_interface/test/ei_format_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/ei_format_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_format_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_format_SUITE_data/Makefile.src
index bfcb8ae840..b89dcae45a 100644
--- a/lib/erl_interface/test/ei_format_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_format_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c b/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c
index d3ca91db5a..8450332b28 100644
--- a/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c
+++ b/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_print_SUITE.erl b/lib/erl_interface/test/ei_print_SUITE.erl
index 4309b883bb..6d5c341eae 100644
--- a/lib/erl_interface/test/ei_print_SUITE.erl
+++ b/lib/erl_interface/test/ei_print_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,144 +21,120 @@
%%
-module(ei_print_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("ei_print_SUITE_data/ei_print_test_cases.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- atoms/1, tuples/1, lists/1, strings/1]).
+-export([all/0, suite/0,
+ atoms/1, tuples/1, lists/1, strings/1]).
-import(runner, [get_term/1]).
%% This test suite test the ei_print() function.
%% It uses the port program "ei_format_test".
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[atoms, tuples, lists, strings].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%% Tests formatting various atoms.
-atoms(suite) -> [];
atoms(Config) when is_list(Config) ->
- ?line P = runner:start(?atoms),
-
- ?line {term, "''"} = get_term(P),
- ?line {term, "a"} = get_term(P),
- ?line {term, "'A'"} = get_term(P),
- ?line {term, "abc"} = get_term(P),
- ?line {term, "'Abc'"} = get_term(P),
- ?line {term, "ab@c"} = get_term(P),
- ?line {term, "'The rain in Spain stays mainly in the plains'"} =
- get_term(P),
-
- ?line {term, "a"} = get_term(P),
- ?line {term, "ab"} = get_term(P),
- ?line {term, "abc"} = get_term(P),
- ?line {term, "ab@c"} = get_term(P),
- ?line {term, "abcdefghijklmnopq"} = get_term(P),
-
- ?line {term, "''"} = get_term(P),
- ?line {term, "a"} = get_term(P),
- ?line {term, "'A'"} = get_term(P),
- ?line {term, "abc"} = get_term(P),
- ?line {term, "'Abc'"} = get_term(P),
- ?line {term, "ab@c"} = get_term(P),
- ?line {term, "'The rain in Spain stays mainly in the plains'"} =
- get_term(P),
-
- ?line {term, "a"} = get_term(P),
- ?line {term, "ab"} = get_term(P),
- ?line {term, "abc"} = get_term(P),
- ?line {term, "ab@c"} = get_term(P),
- ?line {term, "' abcdefghijklmnopq '"} = get_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?atoms),
+
+ {term, "''"} = get_term(P),
+ {term, "a"} = get_term(P),
+ {term, "'A'"} = get_term(P),
+ {term, "abc"} = get_term(P),
+ {term, "'Abc'"} = get_term(P),
+ {term, "ab@c"} = get_term(P),
+ {term, "'The rain in Spain stays mainly in the plains'"} = get_term(P),
+
+ {term, "a"} = get_term(P),
+ {term, "ab"} = get_term(P),
+ {term, "abc"} = get_term(P),
+ {term, "ab@c"} = get_term(P),
+ {term, "abcdefghijklmnopq"} = get_term(P),
+
+ {term, "''"} = get_term(P),
+ {term, "a"} = get_term(P),
+ {term, "'A'"} = get_term(P),
+ {term, "abc"} = get_term(P),
+ {term, "'Abc'"} = get_term(P),
+ {term, "ab@c"} = get_term(P),
+ {term, "'The rain in Spain stays mainly in the plains'"} = get_term(P),
+
+ {term, "a"} = get_term(P),
+ {term, "ab"} = get_term(P),
+ {term, "abc"} = get_term(P),
+ {term, "ab@c"} = get_term(P),
+ {term, "' abcdefghijklmnopq '"} = get_term(P),
+
+ runner:recv_eot(P),
ok.
%% Tests formatting various tuples
-tuples(suite) -> [];
tuples(Config) when is_list(Config) ->
- ?line P = runner:start(?tuples),
-
- ?line {term, "{}"} = get_term(P),
- ?line {term, "{a}"} = get_term(P),
- ?line {term, "{a, b}"} = get_term(P),
- ?line {term, "{a, b, c}"} = get_term(P),
- ?line {term, "{1}"} = get_term(P),
- ?line {term, "{[]}"} = get_term(P),
- ?line {term, "{[], []}"} = get_term(P),
- ?line {term, "{[], a, b, c}"} = get_term(P),
- ?line {term, "{[], a, [], b, c}"} = get_term(P),
- ?line {term, "{[], a, '', b, c}"} = get_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?tuples),
+
+ {term, "{}"} = get_term(P),
+ {term, "{a}"} = get_term(P),
+ {term, "{a, b}"} = get_term(P),
+ {term, "{a, b, c}"} = get_term(P),
+ {term, "{1}"} = get_term(P),
+ {term, "{[]}"} = get_term(P),
+ {term, "{[], []}"} = get_term(P),
+ {term, "{[], a, b, c}"} = get_term(P),
+ {term, "{[], a, [], b, c}"} = get_term(P),
+ {term, "{[], a, '', b, c}"} = get_term(P),
+
+ runner:recv_eot(P),
ok.
%% Tests formatting various lists
-lists(suite) -> [];
lists(Config) when is_list(Config) ->
- ?line P = runner:start(?lists),
-
- ?line {term, "[]"} = get_term(P),
- ?line {term, "[a]"} = get_term(P),
- ?line {term, "[a, b]"} = get_term(P),
- ?line {term, "[a, b, c]"} = get_term(P),
- ?line {term, "[1]"} = get_term(P),
- ?line {term, "[[]]"} = get_term(P),
- ?line {term, "[[], []]"} = get_term(P),
- ?line {term, "[[], a, b, c]"} = get_term(P),
- ?line {term, "[[], a, [], b, c]"} = get_term(P),
- ?line {term, "[[], a, '', b, c]"} = get_term(P),
- ?line {term, "[[x, 2], [y, 3], [z, 4]]"}= get_term(P),
-
-%% ?line {term, "[{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]"} =
-%% get_term(P),
+ P = runner:start(?lists),
+
+ {term, "[]"} = get_term(P),
+ {term, "[a]"} = get_term(P),
+ {term, "[a, b]"} = get_term(P),
+ {term, "[a, b, c]"} = get_term(P),
+ {term, "[1]"} = get_term(P),
+ {term, "[[]]"} = get_term(P),
+ {term, "[[], []]"} = get_term(P),
+ {term, "[[], a, b, c]"} = get_term(P),
+ {term, "[[], a, [], b, c]"} = get_term(P),
+ {term, "[[], a, '', b, c]"} = get_term(P),
+ {term, "[[x, 2], [y, 3], [z, 4]]"}= get_term(P),
+
+ %% {term, "[{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]"} = get_term(P),
%% maybe regexp instead?
- ?line {term, "[{pi, 3.141500}, {'cos(70)', 0.342020}]"} = get_term(P),
- ?line {term, "[[pi, 3.141500], ['cos(70)', 0.342020]]"} = get_term(P),
+ {term, "[{pi, 3.141500}, {'cos(70)', 0.342020}]"} = get_term(P),
+ {term, "[[pi, 3.141500], ['cos(70)', 0.342020]]"} = get_term(P),
- ?line {term, "[-1]"} = get_term(P),
+ {term, "[-1]"} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
-strings(suite) -> [];
strings(Config) when is_list(Config) ->
- ?line P = runner:start(?strings),
-
- ?line {term, "\"\\n\""} = get_term(P),
- ?line {term, "\"\\r\\n\""} = get_term(P),
- ?line {term, "\"a\""} = get_term(P),
- ?line {term, "\"A\""} = get_term(P),
- ?line {term, "\"0\""} = get_term(P),
- ?line {term, "\"9\""} = get_term(P),
- ?line {term, "\"The rain in Spain stays mainly in the plains\""} = get_term(P),
- ?line {term, "\" abcdefghijklmnopq \""} = get_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?strings),
+
+ {term, "\"\\n\""} = get_term(P),
+ {term, "\"\\r\\n\""} = get_term(P),
+ {term, "\"a\""} = get_term(P),
+ {term, "\"A\""} = get_term(P),
+ {term, "\"0\""} = get_term(P),
+ {term, "\"9\""} = get_term(P),
+ {term, "\"The rain in Spain stays mainly in the plains\""} = get_term(P),
+ {term, "\" abcdefghijklmnopq \""} = get_term(P),
+
+ runner:recv_eot(P),
ok.
-
diff --git a/lib/erl_interface/test/ei_print_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_print_SUITE_data/Makefile.first
index 987dbc27a9..3d2395a2c2 100644
--- a/lib/erl_interface/test/ei_print_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/ei_print_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_print_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_print_SUITE_data/Makefile.src
index 266fcfcb10..150c11b99c 100644
--- a/lib/erl_interface/test/ei_print_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_print_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c b/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c
index 2db5450b77..15cfbcae34 100644
--- a/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c
+++ b/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_tmo_SUITE.erl b/lib/erl_interface/test/ei_tmo_SUITE.erl
index 689499f42f..003fe20594 100644
--- a/lib/erl_interface/test/ei_tmo_SUITE.erl
+++ b/lib/erl_interface/test/ei_tmo_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,337 +21,304 @@
%%
-module(ei_tmo_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/inet.hrl").
-include("ei_tmo_SUITE_data/ei_tmo_test_cases.hrl").
--define(dummy_host,test01).
+-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2,
+ framework_check/1, ei_accept_tmo/1, ei_connect_tmo/1, ei_send_tmo/1,
+ ei_connect_tmo/0,
+ ei_recv_tmo/1]).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2,
- framework_check/1, ei_accept_tmo/1, ei_connect_tmo/1, ei_send_tmo/1,
- ei_recv_tmo/1]).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[framework_check, ei_accept_tmo, ei_connect_tmo,
ei_send_tmo, ei_recv_tmo].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:minutes(1)),
% test if platform is vxworks_simso
- ?line {_,Host} = split(node()),
+ {_,Host} = split(node()),
Bool = case atom_to_list(Host) of
- [$v,$x,$s,$i,$m | _] -> true;
- _ -> false
- end,
- [{vxsim,Bool},{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ [$v,$x,$s,$i,$m | _] -> true;
+ _ -> false
+ end,
+ [{vxsim,Bool}|Config].
+
+end_per_testcase(_Case, _Config) ->
ok.
-framework_check(doc) ->
- ["Check the framework."];
-framework_check(suite) ->
- [];
+%% Check the framework.
framework_check(Config) when is_list(Config) ->
%%dbg:tracer(),
%%dbg:p(self()),
- ?line P = runner:start(?framework_check),
- ?line runner:send_term(P,{hello,world}),
- ?line {term, {hello,world}} = runner:get_term(P),
- ?line runner:recv_eot(P),
+ P = runner:start(?framework_check),
+ runner:send_term(P,{hello,world}),
+ {term, {hello,world}} = runner:get_term(P),
+ runner:recv_eot(P),
ok.
-ei_recv_tmo(doc) ->
- ["Check recv with timeouts."];
-ei_recv_tmo(suite) ->
- [];
+%% Check recv with timeouts.
ei_recv_tmo(Config) when is_list(Config) ->
- ?line do_one_recv(Config,c_node_recv_tmo_1),
- ?line do_one_recv_failure(Config,c_node_recv_tmo_2),
+ do_one_recv(Config,c_node_recv_tmo_1),
+ do_one_recv_failure(Config,c_node_recv_tmo_2),
ok.
do_one_recv(Config,CNode) ->
- ?line {_,Host} = split(node()),
- ?line P1 = runner:start(?recv_tmo),
- ?line runner:send_term(P1,{CNode,
- erlang:get_cookie(),
- node()}),
- ?line {term, X} = runner:get_term(P1, 10000),
- ?line true = is_integer(X),
- ?line CNode1 = join(CNode,Host),
- ?line Term1 = {hej,[hopp,{i,[lingon,"skogen"]}]},
- ?line {test,CNode1} ! Term1,
- ?line {term, Term1} = runner:get_term(P1, 10000),
- ?line runner:recv_eot(P1).
-
+ {_,Host} = split(node()),
+ P1 = runner:start(?recv_tmo),
+ runner:send_term(P1,{CNode,
+ erlang:get_cookie(),
+ node()}),
+ {term, X} = runner:get_term(P1, 10000),
+ true = is_integer(X),
+ CNode1 = join(CNode,Host),
+ Term1 = {hej,[hopp,{i,[lingon,"skogen"]}]},
+ {test,CNode1} ! Term1,
+ {term, Term1} = runner:get_term(P1, 10000),
+ runner:recv_eot(P1).
+
do_one_recv_failure(Config,CNode) ->
- ?line P1 = runner:start(?recv_tmo),
- ?line runner:send_term(P1,{CNode,
- erlang:get_cookie(),
- node()}),
- ?line {term, X} = runner:get_term(P1, 10000),
- ?line true = is_integer(X),
- ?line {term, {Ret,ETimedout,ETimedout}} = runner:get_term(P1, 10000),
- ?line true = (Ret < 0),
- ?line runner:recv_eot(P1).
-
-
-ei_send_tmo(doc) ->
- ["Check send with timeouts."];
-ei_send_tmo(suite) ->
- [];
+ P1 = runner:start(?recv_tmo),
+ runner:send_term(P1,{CNode,
+ erlang:get_cookie(),
+ node()}),
+ {term, X} = runner:get_term(P1, 10000),
+ true = is_integer(X),
+ {term, {Ret,ETimedout,ETimedout}} = runner:get_term(P1, 10000),
+ true = (Ret < 0),
+ runner:recv_eot(P1).
+
+
+%% Check send with timeouts.
ei_send_tmo(Config) when is_list(Config) ->
%dbg:tracer(),
%dbg:p(self()),
- VxSim = ?config(vxsim, Config),
- ?line register(ei_send_tmo_1,self()),
- ?line do_one_send(Config,self(),c_node_send_tmo_1),
- ?line do_one_send(Config,ei_send_tmo_1,c_node_send_tmo_2),
- ?line do_one_send_failure(Config,self(),cccc1,c_nod_send_tmo_3,VxSim),
- ?line do_one_send_failure(Config,ei_send_tmo_1,cccc2,c_nod_send_tmo_4,VxSim),
+ VxSim = proplists:get_value(vxsim, Config),
+ register(ei_send_tmo_1,self()),
+ do_one_send(Config,self(),c_node_send_tmo_1),
+ do_one_send(Config,ei_send_tmo_1,c_node_send_tmo_2),
+ do_one_send_failure(Config,self(),cccc1,c_nod_send_tmo_3,VxSim),
+ do_one_send_failure(Config,ei_send_tmo_1,cccc2,c_nod_send_tmo_4,VxSim),
ok.
-
+
do_one_send(Config,From,CNode) ->
- ?line {_,Host} = split(node()),
- ?line P1 = runner:start(?send_tmo),
- ?line runner:send_term(P1,{CNode,
- erlang:get_cookie(),
- node()}),
- ?line {term, X} = runner:get_term(P1, 10000),
- ?line true = is_integer(X),
- ?line CNode1 = join(CNode,Host),
- ?line Term1 = {hej,[hopp,{i,[lingon,"skogen"]}]},
- ?line {test,CNode1} ! {From,1,Term1},
- ?line ok = receive
- Term1 ->
- ok
- after 2000 ->
- error
- end,
- ?line {term, 0} = runner:get_term(P1, 10000),
- ?line runner:recv_eot(P1).
+ {_,Host} = split(node()),
+ P1 = runner:start(?send_tmo),
+ runner:send_term(P1,{CNode,
+ erlang:get_cookie(),
+ node()}),
+ {term, X} = runner:get_term(P1, 10000),
+ true = is_integer(X),
+ CNode1 = join(CNode,Host),
+ Term1 = {hej,[hopp,{i,[lingon,"skogen"]}]},
+ {test,CNode1} ! {From,1,Term1},
+ ok = receive
+ Term1 ->
+ ok
+ after 2000 ->
+ error
+ end,
+ {term, 0} = runner:get_term(P1, 10000),
+ runner:recv_eot(P1).
do_one_send_failure(Config,From,FakeName,CName,VxSim) ->
- ?line {_,Host} = split(node()),
- ?line OurName = join(FakeName,Host),
- ?line Node = join(CName,Host),
- ?line LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
- {ok, Socket} ->
- ?line Socket;
- Else ->
- ?line exit(Else)
- end,
- ?line EpmdSocket = register(OurName, LSocket, 1, 5),
- ?line P3 = runner:start(?send_tmo),
- ?line Cookie = kaksmula_som_ingen_bryr_sig_om,
- ?line runner:send_term(P3,{CName,
- Cookie,
- OurName}),
- ?line SocketB = case gen_tcp:accept(LSocket) of
- {ok, Socket1} ->
- ?line Socket1;
- Else2 ->
- ?line exit(Else2)
- end,
- ?line {hidden,Node,5} = recv_name(SocketB), % See 1)
- ?line send_status(SocketB, ok),
- ?line MyChallengeB = gen_challenge(),
- ?line send_challenge(SocketB, OurName, MyChallengeB, 5),
- ?line HisChallengeB = recv_challenge_reply(
- SocketB,
- MyChallengeB,
- Cookie),
- ?line DigestB = gen_digest(HisChallengeB,Cookie),
- ?line send_challenge_ack(SocketB, DigestB),
- ?line inet:setopts(SocketB, [{active, false},
- {packet, 4}]),
- ?line {term, X} = runner:get_term(P3, 10000),
- ?line true = is_integer(X),
- ?line Message = [112,term_to_binary({6,self(),'',test}),
- term_to_binary({From,10000,
- {app,["lapp",{sa,["att",du,{slapp,
- sitta}]}]}})],
- ?line gen_tcp:send(SocketB,Message),
-
- %% At this point the test program starts sending messages (max 10000). Since
+ {_,Host} = split(node()),
+ OurName = join(FakeName,Host),
+ Node = join(CName,Host),
+ LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
+ {ok, Socket} ->
+ Socket;
+ Else ->
+ exit(Else)
+ end,
+ EpmdSocket = register(OurName, LSocket, 1, 5),
+ P3 = runner:start(?send_tmo),
+ Cookie = kaksmula_som_ingen_bryr_sig_om,
+ runner:send_term(P3,{CName,
+ Cookie,
+ OurName}),
+ SocketB = case gen_tcp:accept(LSocket) of
+ {ok, Socket1} ->
+ Socket1;
+ Else2 ->
+ exit(Else2)
+ end,
+ {hidden,Node,5} = recv_name(SocketB), % See 1)
+ send_status(SocketB, ok),
+ MyChallengeB = gen_challenge(),
+ send_challenge(SocketB, OurName, MyChallengeB, 5),
+ HisChallengeB = recv_challenge_reply(SocketB,
+ MyChallengeB,
+ Cookie),
+ DigestB = gen_digest(HisChallengeB,Cookie),
+ send_challenge_ack(SocketB, DigestB),
+ inet:setopts(SocketB, [{active, false},
+ {packet, 4}]),
+ {term, X} = runner:get_term(P3, 10000),
+ true = is_integer(X),
+ Message = [112,term_to_binary({6,self(),'',test}),
+ term_to_binary({From,50000,
+ {app,["lapp",{sa,["att",du,{slapp,
+ sitta}]}]}})],
+ gen_tcp:send(SocketB,Message),
+
+ %% At this point the test program starts sending messages (max 50000). Since
%% we're not receiving, eventually the send buffer fills up. Then no more
%% sending is possible and select() times out. The number of messages sent
%% before this happens is returned in Iters. The timeout value for get_term/2
%% must be large enough so there's time for the select() to time out and
%% the test program to return the error tuple (below).
- Res0 =
- if VxSim == false ->
- ?line {term,{Res,ETO,Iters,ETO}} = runner:get_term(P3, 20000),
- Res;
- true -> % relax the test for vxsim
- ?line case runner:get_term(P3, 20000) of
- {term,{Res,ETO,Iters,ETO}} ->
- Res;
- {term,{Res,_,Iters,ETO}} -> % EIO?
- Res
- end
- end,
- ?line runner:recv_eot(P3),
- ?line true = ((Res0 < 0) and (Iters > 0)),
- ?line gen_tcp:close(SocketB),
- ?line gen_tcp:close(EpmdSocket),
+
+ Res0 = if VxSim == false ->
+ {term,{Res,ETO,Iters,ETO}} = runner:get_term(P3, 20000),
+ Res;
+ true -> % relax the test for vxsim
+ case runner:get_term(P3, 20000) of
+ {term,{Res,ETO,Iters,ETO}} ->
+ Res;
+ {term,{Res,_,Iters,_ETO}} -> % EIO?
+ Res
+ end
+ end,
+ runner:recv_eot(P3),
+ true = ((Res0 < 0) and (Iters > 0)),
+ gen_tcp:close(SocketB),
+ gen_tcp:close(EpmdSocket),
ok.
-
-ei_connect_tmo(doc) ->
- ["Check accept with timeouts."];
-ei_connect_tmo(suite) ->
- [];
+
+%% Check accept with timeouts.
+ei_connect_tmo() -> [{require, test_host_not_reachable}].
+
ei_connect_tmo(Config) when is_list(Config) ->
%dbg:tracer(),
%dbg:p(self()),
- VxSim = ?config(vxsim, Config),
+ VxSim = proplists:get_value(vxsim, Config),
DummyNode = make_and_check_dummy(),
- ?line P = runner:start(?connect_tmo),
- ?line runner:send_term(P,{c_nod_connect_tmo_1,
- kaksmula_som_ingen_bryr_sig_om,
- DummyNode}),
+ P = runner:start(?connect_tmo),
+ runner:send_term(P,{c_nod_connect_tmo_1,
+ kaksmula_som_ingen_bryr_sig_om,
+ DummyNode}),
ETimedout =
- if VxSim == false ->
- ?line {term,{-3,ETO,ETO}} = runner:get_term(P, 10000),
- ?line ETO;
- true -> % relax the test for vxsim
- ?line case runner:get_term(P, 10000) of
- {term,{-3,ETO,ETO}} ->
- ?line ETO;
- {term,{-1,_,ETO}} -> % EHOSTUNREACH = ok
- ?line ETO
- end
- end,
- ?line runner:recv_eot(P),
- ?line P2 = runner:start(?connect_tmo),
- ?line runner:send_term(P2,{c_nod_connect_tmo_2,
- erlang:get_cookie(),
- node()}),
- ?line {term, X} = runner:get_term(P2, 10000),
- ?line runner:recv_eot(P2),
- ?line true = is_integer(X),
+ if VxSim == false ->
+ {term,{-3,ETO,ETO}} = runner:get_term(P, 10000),
+ ETO;
+ true -> % relax the test for vxsim
+ case runner:get_term(P, 10000) of
+ {term,{-3,ETO,ETO}} ->
+ ETO;
+ {term,{-1,_,ETO}} -> % EHOSTUNREACH = ok
+ ETO
+ end
+ end,
+ runner:recv_eot(P),
+ P2 = runner:start(?connect_tmo),
+ runner:send_term(P2,{c_nod_connect_tmo_2,
+ erlang:get_cookie(),
+ node()}),
+ {term, X} = runner:get_term(P2, 10000),
+ runner:recv_eot(P2),
+ true = is_integer(X),
%% Aborted handshake test...
- ?line {_,Host} = split(node()),
- ?line OurName = join(cccc,Host),
- ?line Node = join(c_nod_connect_tmo_3,Host),
- ?line LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
- {ok, Socket} ->
- ?line Socket;
- Else ->
- ?line exit(Else)
- end,
- ?line EpmdSocket = register(OurName, LSocket, 1, 5),
- ?line P3 = runner:start(?connect_tmo),
- ?line Cookie = kaksmula_som_ingen_bryr_sig_om,
- ?line runner:send_term(P3,{c_nod_connect_tmo_3,
- Cookie,
- OurName}),
- ?line SocketB = case gen_tcp:accept(LSocket) of
- {ok, Socket1} ->
- ?line Socket1;
- Else2 ->
- ?line exit(Else2)
- end,
- ?line {hidden,Node,5} = recv_name(SocketB), % See 1)
- ?line send_status(SocketB, ok),
- ?line MyChallengeB = gen_challenge(),
- ?line send_challenge(SocketB, OurName, MyChallengeB, 5),
- ?line HisChallengeB = recv_challenge_reply(
- SocketB,
- MyChallengeB,
- Cookie),
- ?line {term,{-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000),
- ?line runner:recv_eot(P3),
- ?line gen_tcp:close(SocketB),
- ?line gen_tcp:close(EpmdSocket),
+ {_,Host} = split(node()),
+ OurName = join(cccc,Host),
+ Node = join(c_nod_connect_tmo_3,Host),
+ LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
+ {ok, Socket} ->
+ Socket;
+ Else ->
+ exit(Else)
+ end,
+ EpmdSocket = register(OurName, LSocket, 1, 5),
+ P3 = runner:start(?connect_tmo),
+ Cookie = kaksmula_som_ingen_bryr_sig_om,
+ runner:send_term(P3,{c_nod_connect_tmo_3,
+ Cookie,
+ OurName}),
+ SocketB = case gen_tcp:accept(LSocket) of
+ {ok, Socket1} ->
+ Socket1;
+ Else2 ->
+ exit(Else2)
+ end,
+ {hidden,Node,5} = recv_name(SocketB), % See 1)
+ send_status(SocketB, ok),
+ MyChallengeB = gen_challenge(),
+ send_challenge(SocketB, OurName, MyChallengeB, 5),
+ _HisChallengeB = recv_challenge_reply(SocketB,
+ MyChallengeB,
+ Cookie),
+ {term,{-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000),
+ runner:recv_eot(P3),
+ gen_tcp:close(SocketB),
+ gen_tcp:close(EpmdSocket),
ok.
-
-ei_accept_tmo(doc) ->
- ["Check accept with timeouts."];
-ei_accept_tmo(suite) ->
- [];
+
+%% Check accept with timeouts.
ei_accept_tmo(Config) when is_list(Config) ->
%%dbg:tracer(),
%%dbg:p(self()),
- ?line P = runner:start(?accept_tmo),
- ?line runner:send_term(P,{c_nod_som_ingen_kontaktar_1,
- kaksmula_som_ingen_bryr_sig_om}),
- ?line {term,{-1,ETimedout,ETimedout}} = runner:get_term(P, 10000),
- ?line runner:recv_eot(P),
- ?line P2 = runner:start(?accept_tmo),
- ?line runner:send_term(P2,{c_nod_som_vi_kontaktar_1,
- erlang:get_cookie()}),
- ?line receive after 1000 -> ok end,
- ?line CNode1 = make_node(c_nod_som_vi_kontaktar_1),
- ?line {ignored,CNode1} ! tjenare,
- ?line {term, X} = runner:get_term(P2, 10000),
- ?line runner:recv_eot(P2),
- ?line true = is_integer(X),
- ?line P3 = runner:start(?accept_tmo),
- ?line runner:send_term(P3,{c_nod_som_vi_kontaktar_2,
- erlang:get_cookie()}),
- ?line receive after 1000 -> ok end,
- ?line CNode2 = make_node(c_nod_som_vi_kontaktar_2),
- ?line {NA,NB} = split(CNode2),
- ?line {_,Host} = split(node()),
- ?line OurName = join(ccc,Host),
- ?line {port,PortNo,_} = erl_epmd:port_please(NA,NB),
- ?line {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
- [{active,false},
- {packet,2}]),
- ?line send_name(SocketA,OurName,5),
- ?line ok = recv_status(SocketA),
- ?line {hidden,Node,5,HisChallengeA} = recv_challenge(SocketA), % See 1)
- ?line OurChallengeA = gen_challenge(),
- ?line OurDigestA = gen_digest(HisChallengeA, erlang:get_cookie()),
+ P = runner:start(?accept_tmo),
+ runner:send_term(P,{c_nod_som_ingen_kontaktar_1,
+ kaksmula_som_ingen_bryr_sig_om}),
+ {term,{-1,ETimedout,ETimedout}} = runner:get_term(P, 10000),
+ runner:recv_eot(P),
+ P2 = runner:start(?accept_tmo),
+ runner:send_term(P2,{c_nod_som_vi_kontaktar_1,
+ erlang:get_cookie()}),
+ receive after 1000 -> ok end,
+ CNode1 = make_node(c_nod_som_vi_kontaktar_1),
+ {ignored,CNode1} ! tjenare,
+ {term, X} = runner:get_term(P2, 10000),
+ runner:recv_eot(P2),
+ true = is_integer(X),
+ P3 = runner:start(?accept_tmo),
+ runner:send_term(P3,{c_nod_som_vi_kontaktar_2,
+ erlang:get_cookie()}),
+ receive after 1000 -> ok end,
+ CNode2 = make_node(c_nod_som_vi_kontaktar_2),
+ {NA,NB} = split(CNode2),
+ {_,Host} = split(node()),
+ OurName = join(ccc,Host),
+ {port,PortNo,_} = erl_epmd:port_please(NA,NB),
+ {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
+ [{active,false},
+ {packet,2}]),
+ send_name(SocketA,OurName,5),
+ ok = recv_status(SocketA),
+ {hidden,_Node,5,HisChallengeA} = recv_challenge(SocketA), % See 1)
+ _OurChallengeA = gen_challenge(),
+ _OurDigestA = gen_digest(HisChallengeA, erlang:get_cookie()),
%% Dont do the last two steps of the connection setup...
%% send_challenge_reply(SocketA, OurChallengeA, OurDigestA),
%% ok = recv_challenge_ack(SocketA, OurChallengeA, erlang:get_cookie()),
- ?line {term, {-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000),
- ?line runner:recv_eot(P3),
- ?line gen_tcp:close(SocketA),
+ {term, {-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000),
+ runner:recv_eot(P3),
+ gen_tcp:close(SocketA),
ok.
make_node(X) ->
list_to_atom(atom_to_list(X) ++ "@" ++
- hd(tl(string:tokens(atom_to_list(node()),"@")))).
+ hd(tl(string:tokens(atom_to_list(node()),"@")))).
make_and_check_dummy() ->
% First check that the host has an ip and is *not* reachable
- ?line case gen_tcp:connect(?dummy_host,23,[{active,false}],5000) of
- {error,timeout} -> ok;
- {error,ehostunreach} -> ok
- end,
+ HostNotReachable = ct:get_config(test_host_not_reachable),
+ case gen_tcp:connect(HostNotReachable, 23, [{active,false}],5000) of
+ {error,timeout} -> ok;
+ {error,ehostunreach} -> ok
+ end,
- list_to_atom("dummy@"++atom_to_list(?dummy_host)).
+ list_to_atom("dummy@"++HostNotReachable).
%%
%% Stolen from the erl_distribution_wb_test in kernel
@@ -359,12 +326,12 @@ make_and_check_dummy() ->
%%
-define(to_port(Socket, Data),
- case inet_tcp:send(Socket, Data) of
- {error, closed} ->
- self() ! {tcp_closed, Socket},
- {error, closed};
- R ->
- R
+ case inet_tcp:send(Socket, Data) of
+ {error, closed} ->
+ self() ! {tcp_closed, Socket},
+ {error, closed};
+ R ->
+ R
end).
-define(DFLAG_PUBLISHED,1).
@@ -382,8 +349,8 @@ make_and_check_dummy() ->
-define(int16(X), [((X) bsr 8) band 16#ff, (X) band 16#ff]).
-define(int32(X),
- [((X) bsr 24) band 16#ff, ((X) bsr 16) band 16#ff,
- ((X) bsr 8) band 16#ff, (X) band 16#ff]).
+ [((X) bsr 24) band 16#ff, ((X) bsr 16) band 16#ff,
+ ((X) bsr 8) band 16#ff, (X) band 16#ff]).
-define(i16(X1,X0),
(?u16(X1,X0) -
@@ -406,9 +373,9 @@ make_and_check_dummy() ->
%% This is no proper random number, but that is not really important in
%% this test
gen_challenge() ->
- {_,_,N} = erlang:now(),
+ {_,_,N} = os:timestamp(),
N.
-
+
%% Generate a message digest from Challenge number and Cookie
gen_digest(Challenge, Cookie) when is_integer(Challenge), is_atom(Cookie) ->
C0 = erlang:md5_init(),
@@ -423,95 +390,93 @@ gen_digest(Challenge, Cookie) when is_integer(Challenge), is_atom(Cookie) ->
send_status(Socket, Stat) ->
case gen_tcp:send(Socket, [$s | atom_to_list(Stat)]) of
- {error, _} ->
- ?shutdown(could_not_send_status);
- _ ->
- true
+ {error, _} -> ?shutdown(could_not_send_status);
+ _ -> true
end.
recv_status(Socket) ->
case gen_tcp:recv(Socket, 0) of
- {ok, [$s|StrStat]} ->
- list_to_atom(StrStat);
- Bad ->
- exit(Bad)
+ {ok, [$s|StrStat]} ->
+ list_to_atom(StrStat);
+ Bad ->
+ exit(Bad)
end.
send_challenge(Socket, Node, Challenge, Version) ->
send_challenge(Socket, Node, Challenge, Version, ?COMPULSORY_DFLAGS).
send_challenge(Socket, Node, Challenge, Version, Flags) ->
- {ok, {{Ip1,Ip2,Ip3,Ip4}, _}} = inet:sockname(Socket),
+ {ok, {{_Ip1,_Ip2,_Ip3,_Ip4}, _}} = inet:sockname(Socket),
?to_port(Socket, [$n,?int16(Version),?int32(Flags),
- ?int32(Challenge), atom_to_list(Node)]).
+ ?int32(Challenge), atom_to_list(Node)]).
recv_challenge(Socket) ->
case gen_tcp:recv(Socket, 0) of
- {ok,[$n,V1,V0,Fl1,Fl2,Fl3,Fl4,CA3,CA2,CA1,CA0 | Ns]} ->
- Flags = ?u32(Fl1,Fl2,Fl3,Fl4),
- Type = case Flags band ?DFLAG_PUBLISHED of
- 0 ->
- hidden;
- _ ->
- normal
- end,
- Node =list_to_atom(Ns),
- Version = ?u16(V1,V0),
- Challenge = ?u32(CA3,CA2,CA1,CA0),
- {Type,Node,Version,Challenge};
- _ ->
- ?shutdown(no_node)
+ {ok,[$n,V1,V0,Fl1,Fl2,Fl3,Fl4,CA3,CA2,CA1,CA0 | Ns]} ->
+ Flags = ?u32(Fl1,Fl2,Fl3,Fl4),
+ Type = case Flags band ?DFLAG_PUBLISHED of
+ 0 ->
+ hidden;
+ _ ->
+ normal
+ end,
+ Node =list_to_atom(Ns),
+ Version = ?u16(V1,V0),
+ Challenge = ?u32(CA3,CA2,CA1,CA0),
+ {Type,Node,Version,Challenge};
+ _ ->
+ ?shutdown(no_node)
end.
-send_challenge_reply(Socket, Challenge, Digest) ->
- ?to_port(Socket, [$r,?int32(Challenge),Digest]).
+%send_challenge_reply(Socket, Challenge, Digest) ->
+% ?to_port(Socket, [$r,?int32(Challenge),Digest]).
recv_challenge_reply(Socket, ChallengeA, Cookie) ->
case gen_tcp:recv(Socket, 0) of
- {ok,[$r,CB3,CB2,CB1,CB0 | SumB]} when length(SumB) == 16 ->
- SumA = gen_digest(ChallengeA, Cookie),
- ChallengeB = ?u32(CB3,CB2,CB1,CB0),
- if SumB == SumA ->
- ChallengeB;
- true ->
- ?shutdown(bad_challenge_reply)
- end;
- _ ->
- ?shutdown(no_node)
+ {ok,[$r,CB3,CB2,CB1,CB0 | SumB]} when length(SumB) == 16 ->
+ SumA = gen_digest(ChallengeA, Cookie),
+ ChallengeB = ?u32(CB3,CB2,CB1,CB0),
+ if SumB == SumA ->
+ ChallengeB;
+ true ->
+ ?shutdown(bad_challenge_reply)
+ end;
+ _ ->
+ ?shutdown(no_node)
end.
send_challenge_ack(Socket, Digest) ->
?to_port(Socket, [$a,Digest]).
-recv_challenge_ack(Socket, ChallengeB, CookieA) ->
- case gen_tcp:recv(Socket, 0) of
- {ok,[$a | SumB]} when length(SumB) == 16 ->
- SumA = gen_digest(ChallengeB, CookieA),
- if SumB == SumA ->
- ok;
- true ->
- ?shutdown(bad_challenge_ack)
- end;
- _ ->
- ?shutdown(bad_challenge_ack)
- end.
+%recv_challenge_ack(Socket, ChallengeB, CookieA) ->
+% case gen_tcp:recv(Socket, 0) of
+% {ok,[$a | SumB]} when length(SumB) == 16 ->
+% SumA = gen_digest(ChallengeB, CookieA),
+% if SumB == SumA ->
+% ok;
+% true ->
+% ?shutdown(bad_challenge_ack)
+% end;
+% _ ->
+% ?shutdown(bad_challenge_ack)
+% end.
send_name(Socket, MyNode0, Version) ->
send_name(Socket, MyNode0, Version, ?COMPULSORY_DFLAGS).
send_name(Socket, MyNode0, Version, Flags) ->
MyNode = atom_to_list(MyNode0),
?to_port(Socket, [$n,?int16(Version),?int32(Flags)] ++
- MyNode).
+ MyNode).
%%
%% recv_name is common for both old and new handshake.
%%
recv_name(Socket) ->
case gen_tcp:recv(Socket, 0) of
- {ok,Data} ->
- get_name(Data);
- Res ->
- ?shutdown({no_node,Res})
+ {ok,Data} ->
+ get_name(Data);
+ Res ->
+ ?shutdown({no_node,Res})
end.
get_name([$m,VersionA,VersionB,_Ip1,_Ip2,_Ip3,_Ip4|OtherNode]) ->
@@ -520,11 +485,9 @@ get_name([$h,VersionA,VersionB,_Ip1,_Ip2,_Ip3,_Ip4|OtherNode]) ->
{hidden, list_to_atom(OtherNode), ?u16(VersionA,VersionB)};
get_name([$n,VersionA, VersionB, Flag1, Flag2, Flag3, Flag4 | OtherNode]) ->
Type = case ?u32(Flag1, Flag2, Flag3, Flag4) band ?DFLAG_PUBLISHED of
- 0 ->
- hidden;
- _ ->
- normal
- end,
+ 0 -> hidden;
+ _ -> normal
+ end,
{Type, list_to_atom(OtherNode),
?u16(VersionA,VersionB)};
get_name(Data) ->
@@ -533,74 +496,73 @@ get_name(Data) ->
%%
%% tell_name is for old handshake
%%
-tell_name(Socket, MyNode0, Version) ->
- MyNode = atom_to_list(MyNode0),
- {ok, {{Ip1,Ip2,Ip3,Ip4}, _}} = inet:sockname(Socket),
- ?to_port(Socket, [$h,?int16(Version),Ip1,Ip2,Ip3,Ip4] ++
- MyNode).
+%tell_name(Socket, MyNode0, Version) ->
+% MyNode = atom_to_list(MyNode0),
+% {ok, {{Ip1,Ip2,Ip3,Ip4}, _}} = inet:sockname(Socket),
+% ?to_port(Socket, [$h,?int16(Version),Ip1,Ip2,Ip3,Ip4] ++ MyNode).
%%
%% The communication with EPMD follows
%%
do_register_node(NodeName, TcpPort, VLow, VHigh) ->
case gen_tcp:connect({127,0,0,1}, get_epmd_port(), []) of
- {ok, Socket} ->
- {N0,_} = split(NodeName),
- Name = atom_to_list(N0),
- Extra = "",
- Elen = length(Extra),
- Len = 1+2+1+1+2+2+2+length(Name)+2+Elen,
- gen_tcp:send(Socket, [?int16(Len), $x,
- ?int16(TcpPort),
- $M,
- 0,
- ?int16(VHigh),
- ?int16(VLow),
- ?int16(length(Name)),
- Name,
- ?int16(Elen),
- Extra]),
- case wait_for_reg_reply(Socket, []) of
- {error, epmd_close} ->
- exit(epmd_broken);
- Other ->
- Other
- end;
- Error ->
- Error
+ {ok, Socket} ->
+ {N0,_} = split(NodeName),
+ Name = atom_to_list(N0),
+ Extra = "",
+ Elen = length(Extra),
+ Len = 1+2+1+1+2+2+2+length(Name)+2+Elen,
+ gen_tcp:send(Socket, [?int16(Len), $x,
+ ?int16(TcpPort),
+ $M,
+ 0,
+ ?int16(VHigh),
+ ?int16(VLow),
+ ?int16(length(Name)),
+ Name,
+ ?int16(Elen),
+ Extra]),
+ case wait_for_reg_reply(Socket, []) of
+ {error, epmd_close} ->
+ exit(epmd_broken);
+ Other ->
+ Other
+ end;
+ Error ->
+ Error
end.
wait_for_reg_reply(Socket, SoFar) ->
receive
- {tcp, Socket, Data0} ->
- case SoFar ++ Data0 of
- [$y, Result, A, B] ->
- case Result of
- 0 ->
- {alive, Socket, ?u16(A, B)};
- _ ->
- {error, duplicate_name}
- end;
- Data when length(Data) < 4 ->
- wait_for_reg_reply(Socket, Data);
- Garbage ->
- {error, {garbage_from_epmd, Garbage}}
- end;
- {tcp_closed, Socket} ->
- {error, epmd_close}
+ {tcp, Socket, Data0} ->
+ case SoFar ++ Data0 of
+ [$y, Result, A, B] ->
+ case Result of
+ 0 ->
+ {alive, Socket, ?u16(A, B)};
+ _ ->
+ {error, duplicate_name}
+ end;
+ Data when length(Data) < 4 ->
+ wait_for_reg_reply(Socket, Data);
+ Garbage ->
+ {error, {garbage_from_epmd, Garbage}}
+ end;
+ {tcp_closed, Socket} ->
+ {error, epmd_close}
after 10000 ->
- gen_tcp:close(Socket),
- {error, no_reg_reply_from_epmd}
+ gen_tcp:close(Socket),
+ {error, no_reg_reply_from_epmd}
end.
register(NodeName, ListenSocket, VLow, VHigh) ->
{ok,{_,TcpPort}} = inet:sockname(ListenSocket),
case do_register_node(NodeName, TcpPort, VLow, VHigh) of
- {alive, Socket, Creation} ->
- Socket;
- Other ->
- exit(Other)
+ {alive, Socket, _Creation} ->
+ Socket;
+ Other ->
+ exit(Other)
end.
@@ -618,69 +580,10 @@ split(Atom) ->
{A,B} = split(atom_to_list(Atom),[]),
{list_to_atom(A),list_to_atom(B)}.
-%% Build a simple distribution message
-build_message(Cookie) ->
- [$?,term_to_binary({6,self(),Cookie,rex}),term_to_binary(plupp)].
-
-%% Build a distribution message that will make rex answer
-build_rex_message(Cookie,OurName) ->
- [$?,term_to_binary({6,self(),Cookie,rex}),
- term_to_binary({'$gen_cast',
- {cast,
- rpc,
- cast,
- [OurName, hello, world, []],
- self()} })].
-
-%% Receive a distribution message
-recv_message(Socket) ->
- case gen_tcp:recv(Socket, 0) of
- {ok,Data} ->
- B0 = list_to_binary(Data),
- {_,B1} = erlang:split_binary(B0,1),
- Header = erlang:binary_to_term(B1),
- Siz = size(term_to_binary(Header)),
- {_,B2} = erlang:split_binary(B1,Siz),
- Message = case (catch erlang:binary_to_term(B2)) of
- {'EXIT', _} ->
- could_not_digest_message;
- Other ->
- Other
- end,
- {Header, Message};
- Res ->
- exit({no_message,Res})
- end.
-
%% Build a nodename
join(Name,Host) ->
list_to_atom(atom_to_list(Name) ++ "@" ++ atom_to_list(Host)).
-%% start/stop slave.
-start_node(Name, Param) ->
- ?t:start_node(Name, slave, [{args, Param}]).
-
-stop_node(Node) ->
- ?t:stop_node(Node).
-
-
-get_nodenames(N, T) ->
- get_nodenames(N, T, []).
-
-get_nodenames(0, _, Acc) ->
- Acc;
-get_nodenames(N, T, Acc) ->
- {A, B, C} = now(),
- get_nodenames(N-1, T, [list_to_atom(atom_to_list(?MODULE)
- ++ "-"
- ++ atom_to_list(T)
- ++ "-"
- ++ integer_to_list(A)
- ++ "-"
- ++ integer_to_list(B)
- ++ "-"
- ++ integer_to_list(C)) | Acc]).
-
get_epmd_port() ->
case init:get_argument(epmd_port) of
{ok, [[PortStr|_]|_]} when is_list(PortStr) ->
diff --git a/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first
index a19eabb64a..884221d9d7 100644
--- a/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2009. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src
index c6798a6644..b4ee361939 100644
--- a/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2009. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c b/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
index 1104f642a2..0079ef8c86 100644
--- a/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
+++ b/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2003-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2003-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -512,18 +512,21 @@ TESTCASE(send_tmo)
for (i=0;i < iterations; ++i) {
res = ei_send_tmo(com_sock, &pid, send_buffer.buff,
send_buffer.index, 5000);
- DEBUGF(("Sent bindata (%d):\n",res));
+ if (res < 0) {
+ DEBUGF(("Sent bindata failed (%d) after %d iterations:\n", res, i));
+ break;
+ }
#ifdef DEBUG
+ if (i < 10 || (i % 100 == 0)) /* don't flood the log */
{
int ndx = 0;
int v;
+ DEBUGF(("%d: Sent bindata (%d): ", i, res));
ei_decode_version(send_buffer.buff,&ndx,&v);
ei_print_term(debugfile, send_buffer.buff, &ndx);
+ DEBUGF(("\n"));
}
#endif
- DEBUGF(("\n"));
- if (res < 0)
- break;
}
if (res < 0) {
DEBUGF(("ei_send_tmo failure at line %d\n",__LINE__));
diff --git a/lib/erl_interface/test/erl_connect_SUITE.erl b/lib/erl_interface/test/erl_connect_SUITE.erl
index f621310a1c..cd73f07b8f 100644
--- a/lib/erl_interface/test/erl_connect_SUITE.erl
+++ b/lib/erl_interface/test/erl_connect_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,90 +21,67 @@
%%
-module(erl_connect_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("erl_connect_SUITE_data/erl_connect_test_cases.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2,end_per_testcase/2,
- erl_send/1,erl_reg_send/1, erl_send_cookie_file/1]).
+-export([all/0, suite/0,
+ erl_send/1, erl_reg_send/1,
+ erl_send_cookie_file/1]).
-import(runner, [get_term/1,send_term/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
all() ->
[erl_send, erl_reg_send, erl_send_cookie_file].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:minutes(0.25)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
erl_send(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line 1 = erl_connect_init(P, 42, erlang:get_cookie(), 0),
- ?line {ok,Fd} = erl_connect(P, node()),
+ P = runner:start(?interpret),
+ 1 = erl_connect_init(P, 42, erlang:get_cookie(), 0),
+ {ok,Fd} = erl_connect(P, node()),
- ?line ok = erl_send(P, Fd, self(), AMsg={a,message}),
- ?line receive AMsg -> ok end,
+ ok = erl_send(P, Fd, self(), AMsg={a,message}),
+ receive AMsg -> ok end,
- ?line 0 = erl_close_connection(P,Fd),
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ 0 = erl_close_connection(P,Fd),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
erl_send_cookie_file(Config) when is_list(Config) ->
case os:type() of
- vxworks ->
- {skip,"Skipped on VxWorks"};
- _ ->
- ?line P = runner:start(?interpret),
- ?line 1 = erl_connect_init(P, 42, '', 0),
- ?line {ok,Fd} = erl_connect(P, node()),
-
- ?line ok = erl_send(P, Fd, self(), AMsg={a,message}),
- ?line receive AMsg -> ok end,
-
- ?line 0 = erl_close_connection(P,Fd),
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
- ok
+ vxworks ->
+ {skip,"Skipped on VxWorks"};
+ _ ->
+ P = runner:start(?interpret),
+ 1 = erl_connect_init(P, 42, '', 0),
+ {ok,Fd} = erl_connect(P, node()),
+
+ ok = erl_send(P, Fd, self(), AMsg={a,message}),
+ receive AMsg -> ok end,
+
+ 0 = erl_close_connection(P,Fd),
+ runner:send_eot(P),
+ runner:recv_eot(P),
+ ok
end.
erl_reg_send(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line 1 = erl_connect_init(P, 42, erlang:get_cookie(), 0),
- ?line {ok,Fd} = erl_connect(P, node()),
+ P = runner:start(?interpret),
+ 1 = erl_connect_init(P, 42, erlang:get_cookie(), 0),
+ {ok,Fd} = erl_connect(P, node()),
ARegName = a_strange_registred_name,
- ?line register(ARegName, self()),
- ?line ok = erl_reg_send(P, Fd, ARegName, AMsg={another,[strange],message}),
- ?line receive AMsg -> ok end,
+ register(ARegName, self()),
+ ok = erl_reg_send(P, Fd, ARegName, AMsg={another,[strange],message}),
+ receive AMsg -> ok end,
- ?line 0 = erl_close_connection(P,Fd),
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ 0 = erl_close_connection(P,Fd),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
@@ -113,20 +90,20 @@ erl_reg_send(Config) when is_list(Config) ->
erl_connect_init(P, Num, Cookie, Creation) ->
send_command(P, erl_connect_init, [Num,Cookie,Creation]),
case get_term(P) of
- {term,Int} when is_integer(Int) -> Int
+ {term,Int} when is_integer(Int) -> Int
end.
erl_connect(P, Node) ->
send_command(P, erl_connect, [Node]),
case get_term(P) of
- {term,{Fd,_}} when Fd >= 0 -> {ok,Fd};
- {term,{-1,Errno}} -> {error,Errno}
+ {term,{Fd,_}} when Fd >= 0 -> {ok,Fd};
+ {term,{-1,Errno}} -> {error,Errno}
end.
erl_close_connection(P, FD) ->
send_command(P, erl_close_connection, [FD]),
case get_term(P) of
- {term,Int} when is_integer(Int) -> Int
+ {term,Int} when is_integer(Int) -> Int
end.
erl_send(P, Fd, To, Msg) ->
@@ -139,17 +116,12 @@ erl_reg_send(P, Fd, To, Msg) ->
get_send_result(P) ->
case get_term(P) of
- {term,{1,_}} -> ok;
- {term,{-1,Errno}} -> {error,Errno};
- {term,{Res,Errno}}->
- io:format("Return value: ~p\nerl_errno: ~p", [Res,Errno]),
- ?t:fail(bad_return_value)
+ {term,{1,_}} -> ok;
+ {term,{-1,Errno}} -> {error,Errno};
+ {term,{Res,Errno}}->
+ io:format("Return value: ~p\nerl_errno: ~p", [Res,Errno]),
+ ct:fail(bad_return_value)
end.
send_command(P, Name, Args) ->
runner:send_term(P, {Name,list_to_tuple(Args)}).
-
-
-
-
-
diff --git a/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first
index f0b8eef6bd..21a7aac0b0 100644
--- a/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src
index 57db6f6024..ff4c382c97 100644
--- a/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c b/lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c
index 11c0daa4c5..0adaa79a33 100644
--- a/lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c
+++ b/lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_eterm_SUITE.erl b/lib/erl_interface/test/erl_eterm_SUITE.erl
index 8fbef35309..0e51a50c19 100644
--- a/lib/erl_interface/test/erl_eterm_SUITE.erl
+++ b/lib/erl_interface/test/erl_eterm_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
%%
-module(erl_eterm_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("erl_eterm_SUITE_data/eterm_test_cases.hrl").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -34,40 +34,39 @@
%%% 5. Miscellanous functions.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- build_terms/1, round_trip_conversion/1,
- decode_terms/1, decode_float/1,
- t_erl_mk_int/1, t_erl_mk_list/1,
- basic_copy/1,
- t_erl_cons/1,
- t_erl_mk_atom/1,
- t_erl_mk_binary/1,
- t_erl_mk_empty_list/1,
- t_erl_mk_float/1,
- t_erl_mk_pid/1,
- t_erl_mk_xpid/1,
- t_erl_mk_port/1,
- t_erl_mk_xport/1,
- t_erl_mk_ref/1,
- t_erl_mk_long_ref/1,
- t_erl_mk_string/1,
- t_erl_mk_estring/1,
- t_erl_mk_tuple/1,
- t_erl_mk_uint/1,
- t_erl_mk_var/1,
- t_erl_size/1,
- t_erl_var_content/1,
- t_erl_element/1,
- t_erl_length/1, t_erl_hd/1, t_erl_tl/1,
- type_checks/1, extractor_macros/1,
- t_erl_iolist_length/1, t_erl_iolist_to_binary/1,
- t_erl_iolist_to_string/1,
- erl_print_term/1, print_string/1,
- t_erl_free_compound/1,
- high_chaparal/1,
- broken_data/1,
- cnode_1/1]).
+-export([all/0, suite/0,
+ build_terms/1, round_trip_conversion/1,
+ decode_terms/1, decode_float/1,
+ t_erl_mk_int/1, t_erl_mk_list/1,
+ basic_copy/1,
+ t_erl_cons/1,
+ t_erl_mk_atom/1,
+ t_erl_mk_binary/1,
+ t_erl_mk_empty_list/1,
+ t_erl_mk_float/1,
+ t_erl_mk_pid/1,
+ t_erl_mk_xpid/1,
+ t_erl_mk_port/1,
+ t_erl_mk_xport/1,
+ t_erl_mk_ref/1,
+ t_erl_mk_long_ref/1,
+ t_erl_mk_string/1,
+ t_erl_mk_estring/1,
+ t_erl_mk_tuple/1,
+ t_erl_mk_uint/1,
+ t_erl_mk_var/1,
+ t_erl_size/1,
+ t_erl_var_content/1,
+ t_erl_element/1,
+ t_erl_length/1, t_erl_hd/1, t_erl_tl/1,
+ type_checks/1, extractor_macros/1,
+ t_erl_iolist_length/1, t_erl_iolist_to_binary/1,
+ t_erl_iolist_to_string/1,
+ erl_print_term/1, print_string/1,
+ t_erl_free_compound/1,
+ high_chaparal/1,
+ broken_data/1,
+ cnode_1/1]).
-export([start_cnode/1]).
@@ -76,7 +75,8 @@
%% This test suite controls the running of the C language functions
%% in eterm_test.c and print_term.c.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[build_terms, round_trip_conversion, decode_terms,
@@ -93,22 +93,6 @@ all() ->
erl_print_term, print_string, t_erl_free_compound,
high_chaparal, broken_data, cnode_1].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
@@ -119,82 +103,77 @@ end_per_group(_GroupName, Config) ->
%% This test asks the C function to construct all data types in
%% a list and verifies that the result is as expected.
-build_terms(suite) -> [];
build_terms(Config) when is_list(Config) ->
- ?line P = runner:start(?build_terms),
- ?line {term, Term} = get_term(P),
- ?line io:format("Received: ~p", [Term]),
- ?line [ARefLN, ARef, APortLN, APort, APidLN, APid,
- {element1, 42, 767}, "A string",
- 1, -1, 0, 3.0, ABin, 'I am an atom'] = Term,
- ?line "A binary" = binary_to_list(ABin),
- ?line case ARef of
- R when is_reference(R), node(R) == kalle@localhost -> ok
- end,
- ?line case ARefLN of
- R1 when is_reference(R1), node(R1) == abcdefghijabcdefghij@localhost -> ok
- end,
- ?line case APort of
- Port when is_port(Port), node(Port) == kalle@localhost -> ok
- end,
- ?line case APortLN of
- Port1 when is_port(Port1), node(Port1) == abcdefghijabcdefghij@localhost -> ok
- end,
- ?line case APid of
- Pid when is_pid(Pid), node(Pid) == kalle@localhost -> ok
- end,
- ?line case APidLN of
- Pid1 when is_pid(Pid1), node(Pid1) == abcdefghijabcdefghij@localhost -> ok
- end,
-
- ?line runner:recv_eot(P),
+ P = runner:start(?build_terms),
+ {term, Term} = get_term(P),
+ io:format("Received: ~p", [Term]),
+ [ARefLN, ARef, APortLN, APort, APidLN, APid,
+ {element1, 42, 767}, "A string",
+ 1, -1, 0, 3.0, ABin, 'I am an atom'] = Term,
+ "A binary" = binary_to_list(ABin),
+ case ARef of
+ R when is_reference(R), node(R) == kalle@localhost -> ok
+ end,
+ case ARefLN of
+ R1 when is_reference(R1), node(R1) == abcdefghijabcdefghij@localhost -> ok
+ end,
+ case APort of
+ Port when is_port(Port), node(Port) == kalle@localhost -> ok
+ end,
+ case APortLN of
+ Port1 when is_port(Port1), node(Port1) == abcdefghijabcdefghij@localhost -> ok
+ end,
+ case APid of
+ Pid when is_pid(Pid), node(Pid) == kalle@localhost -> ok
+ end,
+ case APidLN of
+ Pid1 when is_pid(Pid1), node(Pid1) == abcdefghijabcdefghij@localhost -> ok
+ end,
+
+ runner:recv_eot(P),
ok.
%% This test is run entirely in C code.
-round_trip_conversion(suite) -> [];
round_trip_conversion(Config) when is_list(Config) ->
- ?line runner:test(?round_trip_conversion),
+ runner:test(?round_trip_conversion),
ok.
%% This test sends a list of all data types to the C code function,
%% which decodes it and verifies it.
-decode_terms(suite) -> [];
decode_terms(Config) when is_list(Config) ->
- ?line Dummy1 = list_to_atom(filename:join(?config(priv_dir, Config),
- dummy_file1)),
- ?line Dummy2 = list_to_atom(filename:join(?config(priv_dir, Config),
- dummy_file2)),
- ?line Port1 = open_port(Dummy1, [out]),
- ?line Port2 = open_port(Dummy2, [out]),
- ?line ABinary = list_to_binary("A binary"),
- ?line Terms = [make_ref(), make_ref(),
- Port1, Port2,
- self(), self(),
- {element1, 42, 767}, "A string",
- 1, -1, 0, 3.0, ABinary, 'I am an atom'],
-
- ?line P = runner:start(?decode_terms),
- ?line runner:send_term(P, Terms),
- ?line runner:recv_eot(P),
+ Dummy1 = list_to_atom(filename:join(proplists:get_value(priv_dir, Config),
+ dummy_file1)),
+ Dummy2 = list_to_atom(filename:join(proplists:get_value(priv_dir, Config),
+ dummy_file2)),
+ Port1 = open_port(Dummy1, [out]),
+ Port2 = open_port(Dummy2, [out]),
+ ABinary = list_to_binary("A binary"),
+ Terms = [make_ref(), make_ref(),
+ Port1, Port2,
+ self(), self(),
+ {element1, 42, 767}, "A string",
+ 1, -1, 0, 3.0, ABinary, 'I am an atom'],
+
+ P = runner:start(?decode_terms),
+ runner:send_term(P, Terms),
+ runner:recv_eot(P),
ok.
%% Decodes the floating point number 3.1415.
-decode_float(suite) -> [];
decode_float(Config) when is_list(Config) ->
- ?line P = runner:start(?decode_float),
- ?line runner:send_term(P, 3.1415),
- ?line runner:recv_eot(P),
+ P = runner:start(?decode_float),
+ runner:send_term(P, 3.1415),
+ runner:recv_eot(P),
ok.
%% Tests the erl_free_compound() function.
-t_erl_free_compound(suite) -> [];
t_erl_free_compound(Config) when is_list(Config) ->
- ?line runner:test(?t_erl_free_compound),
+ runner:test(?t_erl_free_compound),
ok.
@@ -206,317 +185,296 @@ t_erl_free_compound(Config) when is_list(Config) ->
%% This tests the erl_mk_list() function.
-t_erl_mk_list(suite) -> [];
t_erl_mk_list(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_list),
+ P = runner:start(?t_erl_mk_list),
- ?line {term, []} = get_term(P),
- ?line {term, [abc]} = get_term(P),
- ?line {term, [abcdef, 42]} = get_term(P),
- ?line {term, [0.0, 23, [], 3.1415]} = get_term(P),
+ {term, []} = get_term(P),
+ {term, [abc]} = get_term(P),
+ {term, [abcdef, 42]} = get_term(P),
+ {term, [0.0, 23, [], 3.1415]} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_int() function.
-t_erl_mk_int(suite) -> [];
t_erl_mk_int(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_int),
-
- ?line {term, 0} = get_term(P),
- ?line {term, 127} = get_term(P),
- ?line {term, 128} = get_term(P),
- ?line {term, 255} = get_term(P),
- ?line {term, 256} = get_term(P),
-
- ?line {term, 16#FFFF} = get_term(P),
- ?line {term, 16#10000} = get_term(P),
-
- ?line {term, 16#07FFFFFF} = get_term(P),
- ?line {term, 16#0FFFFFFF} = get_term(P),
- ?line {term, 16#1FFFFFFF} = get_term(P),
- ?line {term, 16#3FFFFFFF} = get_term(P),
- ?line {term, 16#7FFFFFFF} = get_term(P),
-
- ?line {term, 16#08000000} = get_term(P),
- ?line {term, 16#10000000} = get_term(P),
- ?line {term, 16#20000000} = get_term(P),
- ?line {term, 16#40000000} = get_term(P),
-
-
- ?line {term, -16#07FFFFFF} = get_term(P),
- ?line {term, -16#0FFFFFFF} = get_term(P),
- ?line {term, -16#1FFFFFFF} = get_term(P),
- ?line {term, -16#3FFFFFFF} = get_term(P),
- ?line {term, -16#7FFFFFFF} = get_term(P),
-
- ?line {term, -16#08000000} = get_term(P),
- ?line {term, -16#10000000} = get_term(P),
- ?line {term, -16#20000000} = get_term(P),
- ?line {term, -16#40000000} = get_term(P),
-
- ?line {term, -16#08000001} = get_term(P),
- ?line {term, -16#10000001} = get_term(P),
- ?line {term, -16#20000001} = get_term(P),
- ?line {term, -16#40000001} = get_term(P),
-
- ?line {term, -16#08000002} = get_term(P),
- ?line {term, -16#10000002} = get_term(P),
- ?line {term, -16#20000002} = get_term(P),
- ?line {term, -16#40000002} = get_term(P),
-
- ?line {term, -1999999999} = get_term(P),
- ?line {term, -2000000000} = get_term(P),
- ?line {term, -2000000001} = get_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?t_erl_mk_int),
+
+ {term, 0} = get_term(P),
+ {term, 127} = get_term(P),
+ {term, 128} = get_term(P),
+ {term, 255} = get_term(P),
+ {term, 256} = get_term(P),
+
+ {term, 16#FFFF} = get_term(P),
+ {term, 16#10000} = get_term(P),
+
+ {term, 16#07FFFFFF} = get_term(P),
+ {term, 16#0FFFFFFF} = get_term(P),
+ {term, 16#1FFFFFFF} = get_term(P),
+ {term, 16#3FFFFFFF} = get_term(P),
+ {term, 16#7FFFFFFF} = get_term(P),
+
+ {term, 16#08000000} = get_term(P),
+ {term, 16#10000000} = get_term(P),
+ {term, 16#20000000} = get_term(P),
+ {term, 16#40000000} = get_term(P),
+
+
+ {term, -16#07FFFFFF} = get_term(P),
+ {term, -16#0FFFFFFF} = get_term(P),
+ {term, -16#1FFFFFFF} = get_term(P),
+ {term, -16#3FFFFFFF} = get_term(P),
+ {term, -16#7FFFFFFF} = get_term(P),
+
+ {term, -16#08000000} = get_term(P),
+ {term, -16#10000000} = get_term(P),
+ {term, -16#20000000} = get_term(P),
+ {term, -16#40000000} = get_term(P),
+
+ {term, -16#08000001} = get_term(P),
+ {term, -16#10000001} = get_term(P),
+ {term, -16#20000001} = get_term(P),
+ {term, -16#40000001} = get_term(P),
+
+ {term, -16#08000002} = get_term(P),
+ {term, -16#10000002} = get_term(P),
+ {term, -16#20000002} = get_term(P),
+ {term, -16#40000002} = get_term(P),
+
+ {term, -1999999999} = get_term(P),
+ {term, -2000000000} = get_term(P),
+ {term, -2000000001} = get_term(P),
+
+ runner:recv_eot(P),
ok.
%% Basic test of erl_copy_term().
-basic_copy(suite) -> [];
basic_copy(Config) when is_list(Config) ->
- ?line runner:test(?basic_copy),
+ runner:test(?basic_copy),
ok.
%% This tests the erl_mk_tuple() function.
-t_erl_mk_tuple(suite) -> [];
t_erl_mk_tuple(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_tuple),
+ P = runner:start(?t_erl_mk_tuple),
- ?line {term, {madonna, 21, 'mad donna', 12}} = get_term(P),
- ?line {term, {'Madonna',21,{children,{"Isabella",2}},
- {'home page',"http://www.madonna.com/"}}} = get_term(P),
+ {term, {madonna, 21, 'mad donna', 12}} = get_term(P),
+ {term, {'Madonna',21,{children,{"Isabella",2}},
+ {'home page',"http://www.madonna.com/"}}} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_atom() function.
-t_erl_mk_atom(suite) -> [];
t_erl_mk_atom(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_atom),
-
- ?line {term, madonna} = (get_term(P)),
- ?line {term, 'Madonna'} = (get_term(P)),
- ?line {term, 'mad donna'} = (get_term(P)),
- ?line {term, '_madonna_'} = (get_term(P)),
- ?line {term, '/home/madonna/tour_plan'} = (get_term(P)),
- ?line {term, 'http://www.madonna.com/tour_plan'} = (get_term(P)),
- ?line {term, '\'madonna\''} = (get_term(P)),
- ?line {term, '\"madonna\"'} = (get_term(P)),
- ?line {term, '\\madonna\\'} = (get_term(P)),
- ?line {term, '{madonna,21,\'mad donna\',12}'} = (get_term(P)),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?t_erl_mk_atom),
+
+ {term, madonna} = (get_term(P)),
+ {term, 'Madonna'} = (get_term(P)),
+ {term, 'mad donna'} = (get_term(P)),
+ {term, '_madonna_'} = (get_term(P)),
+ {term, '/home/madonna/tour_plan'} = (get_term(P)),
+ {term, 'http://www.madonna.com/tour_plan'} = (get_term(P)),
+ {term, '\'madonna\''} = (get_term(P)),
+ {term, '\"madonna\"'} = (get_term(P)),
+ {term, '\\madonna\\'} = (get_term(P)),
+ {term, '{madonna,21,\'mad donna\',12}'} = (get_term(P)),
+
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_binary() function.
-t_erl_mk_binary(suite) -> [];
t_erl_mk_binary(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_binary),
+ P = runner:start(?t_erl_mk_binary),
- ?line {term, Bin} = (get_term(P)),
- ?line "{madonna,21,'mad donna',1234.567.890, !#$%&/()=?+-@, \" \\}" =
- binary_to_list(Bin),
+ {term, Bin} = (get_term(P)),
+ "{madonna,21,'mad donna',1234.567.890, !#$%&/()=?+-@, \" \\}" = binary_to_list(Bin),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_empty_list() function.
-t_erl_mk_empty_list(suite) -> [];
t_erl_mk_empty_list(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_empty_list),
+ P = runner:start(?t_erl_mk_empty_list),
- ?line {term, []} = get_term(P),
+ {term, []} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_float() function.
-t_erl_mk_float(suite) -> [];
t_erl_mk_float(Config) when is_list(Config) ->
case os:type() of
- vxworks ->
- {skipped, "Floating point numbers never compare equal on PPC"};
- _ ->
- ?line P = runner:start(?t_erl_mk_float),
- ?line {term, {3.1415, 1.999999, 2.000000, 2.000001,
- 2.000002, 12345.67890}} =
- get_term(P),
- ?line runner:recv_eot(P),
- ok
+ vxworks ->
+ {skipped, "Floating point numbers never compare equal on PPC"};
+ _ ->
+ P = runner:start(?t_erl_mk_float),
+ {term, {3.1415, 1.999999, 2.000000, 2.000001,
+ 2.000002, 12345.67890}} = get_term(P),
+ runner:recv_eot(P),
+ ok
end.
%% This tests the erl_mk_pid() function.
-t_erl_mk_pid(suite) -> [];
t_erl_mk_pid(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_pid),
+ P = runner:start(?t_erl_mk_pid),
- ?line {term, A_pid} = (get_term(P)),
- ?line {pid, kalle@localhost, 3, 2} = nc2vinfo(A_pid),
+ {term, A_pid} = (get_term(P)),
+ {pid, kalle@localhost, 3, 2} = nc2vinfo(A_pid),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
-t_erl_mk_xpid(suite) -> [];
t_erl_mk_xpid(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_xpid),
+ P = runner:start(?t_erl_mk_xpid),
- ?line {term, A_pid} = (get_term(P)),
- ?line {pid, kalle@localhost, 32767, 8191} = nc2vinfo(A_pid),
+ {term, A_pid} = (get_term(P)),
+ {pid, kalle@localhost, 32767, 8191} = nc2vinfo(A_pid),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_port() function.
-t_erl_mk_port(suite) -> [];
t_erl_mk_port(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_port),
+ P = runner:start(?t_erl_mk_port),
- ?line {term, A_port} = (get_term(P)),
- ?line {port, kalle@localhost, 4} = nc2vinfo(A_port),
+ {term, A_port} = (get_term(P)),
+ {port, kalle@localhost, 4} = nc2vinfo(A_port),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
-t_erl_mk_xport(suite) -> [];
t_erl_mk_xport(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_xport),
+ P = runner:start(?t_erl_mk_xport),
- ?line {term, A_port} = (get_term(P)),
- ?line {port, kalle@localhost, 268435455} = nc2vinfo(A_port),
+ {term, A_port} = (get_term(P)),
+ {port, kalle@localhost, 268435455} = nc2vinfo(A_port),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_ref() function.
-t_erl_mk_ref(suite) -> [];
t_erl_mk_ref(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_ref),
+ P = runner:start(?t_erl_mk_ref),
- ?line {term, A_ref} = (get_term(P)),
- ?line {ref, kalle@localhost, _Length, [6]} = nc2vinfo(A_ref),
+ {term, A_ref} = (get_term(P)),
+ {ref, kalle@localhost, _Length, [6]} = nc2vinfo(A_ref),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
-t_erl_mk_long_ref(suite) -> [];
t_erl_mk_long_ref(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_long_ref),
+ P = runner:start(?t_erl_mk_long_ref),
- ?line {term, A_ref} = (get_term(P)),
- ?line {ref, kalle@localhost, _Length, [4294967295,4294967295,262143]}
- = nc2vinfo(A_ref),
+ {term, A_ref} = (get_term(P)),
+ {ref, kalle@localhost, _Length, [4294967295,4294967295,262143]}
+ = nc2vinfo(A_ref),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_string() function.
-t_erl_mk_string(suite) -> [];
t_erl_mk_string(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_string),
-
- ?line {term, "madonna"} = (get_term(P)),
- ?line {term, "Madonna"} = (get_term(P)),
- ?line {term, "mad donna"} = (get_term(P)),
- ?line {term, "_madonna_"} = (get_term(P)),
- ?line {term, "/home/madonna/tour_plan"} = (get_term(P)),
- ?line {term, "http://www.madonna.com/tour_plan"} = (get_term(P)),
- ?line {term, "\'madonna\'"} = (get_term(P)),
- ?line {term, "\"madonna\""} = (get_term(P)),
- ?line {term, "\\madonna\\"} = (get_term(P)),
- ?line {term, "{madonna,21,'mad donna',12}"} = (get_term(P)),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?t_erl_mk_string),
+
+ {term, "madonna"} = (get_term(P)),
+ {term, "Madonna"} = (get_term(P)),
+ {term, "mad donna"} = (get_term(P)),
+ {term, "_madonna_"} = (get_term(P)),
+ {term, "/home/madonna/tour_plan"} = (get_term(P)),
+ {term, "http://www.madonna.com/tour_plan"} = (get_term(P)),
+ {term, "\'madonna\'"} = (get_term(P)),
+ {term, "\"madonna\""} = (get_term(P)),
+ {term, "\\madonna\\"} = (get_term(P)),
+ {term, "{madonna,21,'mad donna',12}"} = (get_term(P)),
+
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_estring() function.
-t_erl_mk_estring(suite) -> [];
t_erl_mk_estring(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_estring),
-
- ?line {term, "madonna"} = (get_term(P)),
- ?line {term, "Madonna"} = (get_term(P)),
- ?line {term, "mad donna"} = (get_term(P)),
- ?line {term, "_madonna_"} = (get_term(P)),
- ?line {term, "/home/madonna/tour_plan"} = (get_term(P)),
- ?line {term, "http://www.madonna.com/tour_plan"} = (get_term(P)),
- ?line {term, "\'madonna\'"} = (get_term(P)),
- ?line {term, "\"madonna\""} = (get_term(P)),
- ?line {term, "\\madonna\\"} = (get_term(P)),
- ?line {term, "{madonna,21,'mad donna',12}"} = (get_term(P)),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?t_erl_mk_estring),
+
+ {term, "madonna"} = (get_term(P)),
+ {term, "Madonna"} = (get_term(P)),
+ {term, "mad donna"} = (get_term(P)),
+ {term, "_madonna_"} = (get_term(P)),
+ {term, "/home/madonna/tour_plan"} = (get_term(P)),
+ {term, "http://www.madonna.com/tour_plan"} = (get_term(P)),
+ {term, "\'madonna\'"} = (get_term(P)),
+ {term, "\"madonna\""} = (get_term(P)),
+ {term, "\\madonna\\"} = (get_term(P)),
+ {term, "{madonna,21,'mad donna',12}"} = (get_term(P)),
+
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_uint() function.
-t_erl_mk_uint(suite) -> [];
t_erl_mk_uint(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_uint),
+ P = runner:start(?t_erl_mk_uint),
- ?line {term, 54321} = (get_term(P)),
- ?line {term, 2147483647} = (get_term(P)),
- ?line {term, 2147483648} = (get_term(P)),
- ?line {term, 2147483649} = (get_term(P)),
- ?line {term, 2147483650} = (get_term(P)),
- ?line {term, 4294967295} = (get_term(P)),
+ {term, 54321} = (get_term(P)),
+ {term, 2147483647} = (get_term(P)),
+ {term, 2147483648} = (get_term(P)),
+ {term, 2147483649} = (get_term(P)),
+ {term, 2147483650} = (get_term(P)),
+ {term, 4294967295} = (get_term(P)),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_mk_var() function.
-t_erl_mk_var(suite) -> [];
t_erl_mk_var(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_mk_var),
+ P = runner:start(?t_erl_mk_var),
- ?line {term, 1} = (get_term(P)),
- ?line {term, 0} = (get_term(P)),
- ?line {term, 1} = (get_term(P)),
- ?line {term, 0} = (get_term(P)),
- ?line {term, 1} = (get_term(P)),
- ?line {term, 0} = (get_term(P)),
- ?line {term, 1} = (get_term(P)),
+ {term, 1} = (get_term(P)),
+ {term, 0} = (get_term(P)),
+ {term, 1} = (get_term(P)),
+ {term, 0} = (get_term(P)),
+ {term, 1} = (get_term(P)),
+ {term, 0} = (get_term(P)),
+ {term, 1} = (get_term(P)),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_cons() function.
-t_erl_cons(suite) -> [];
t_erl_cons(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_cons),
+ P = runner:start(?t_erl_cons),
- ?line {term, [madonna, 21]} = get_term(P),
+ {term, [madonna, 21]} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
@@ -531,21 +489,20 @@ t_erl_cons(Config) when is_list(Config) ->
%% Tests the erl_length() function.
-t_erl_length(suite) -> [];
t_erl_length(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_length),
+ P = runner:start(?t_erl_length),
- ?line 0 = erl_length(P, []),
- ?line 1 = erl_length(P, [a]),
- ?line 2 = erl_length(P, [a, b]),
- ?line 3 = erl_length(P, [a, b, c]),
+ 0 = erl_length(P, []),
+ 1 = erl_length(P, [a]),
+ 2 = erl_length(P, [a, b]),
+ 3 = erl_length(P, [a, b, c]),
- ?line 4 = erl_length(P, [a, [x, y], c, []]),
+ 4 = erl_length(P, [a, [x, y], c, []]),
- ?line -1 = erl_length(P, [a|b]),
- ?line -1 = erl_length(P, a),
+ -1 = erl_length(P, [a|b]),
+ -1 = erl_length(P, a),
- ?line runner:finish(P),
+ runner:finish(P),
ok.
%% Invokes the erl_length() function.
@@ -555,22 +512,21 @@ erl_length(Port, List) ->
%% Tests the erl_hd() function.
-t_erl_hd(suite) -> [];
t_erl_hd(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_hd),
-
- ?line 'NULL' = erl_hd(P, 42),
- ?line 'NULL' = erl_hd(P, abc),
- ?line 'NULL' = erl_hd(P, []),
-
- ?line [] = erl_hd(P, [[], a]),
- ?line a = erl_hd(P, [a]),
- ?line a = erl_hd(P, [a, b]),
- ?line a = erl_hd(P, [a, b, c]),
- ?line a = erl_hd(P, [a|b]),
-
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ P = runner:start(?t_erl_hd),
+
+ 'NULL' = erl_hd(P, 42),
+ 'NULL' = erl_hd(P, abc),
+ 'NULL' = erl_hd(P, []),
+
+ [] = erl_hd(P, [[], a]),
+ a = erl_hd(P, [a]),
+ a = erl_hd(P, [a, b]),
+ a = erl_hd(P, [a, b, c]),
+ a = erl_hd(P, [a|b]),
+
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
%% Invokes the erl_hd() function.
@@ -580,22 +536,21 @@ erl_hd(Port, List) ->
%% Tests the erl_tail() function.
-t_erl_tl(suite) -> [];
t_erl_tl(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_tl),
+ P = runner:start(?t_erl_tl),
- ?line 'NULL' = erl_tl(P, 42),
- ?line 'NULL' = erl_tl(P, abc),
- ?line 'NULL' = erl_tl(P, []),
+ 'NULL' = erl_tl(P, 42),
+ 'NULL' = erl_tl(P, abc),
+ 'NULL' = erl_tl(P, []),
- ?line [] = erl_tl(P, [a]),
- ?line [b] = erl_tl(P, [a, b]),
- ?line [b, c] = erl_tl(P, [a, b, c]),
+ [] = erl_tl(P, [a]),
+ [b] = erl_tl(P, [a, b]),
+ [b, c] = erl_tl(P, [a, b, c]),
- ?line b = erl_tl(P, [a|b]),
+ b = erl_tl(P, [a|b]),
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
%% Invokes the erl_tail() function in erl_interface.
@@ -605,68 +560,63 @@ erl_tl(Port, List) ->
%% Tests the type checking macros (done in the C program).
-type_checks(suite) -> [];
type_checks(Config) when is_list(Config) ->
- ?line runner:test(?type_checks),
+ runner:test(?type_checks),
ok.
%% Tests the extractor macros (done in the C program).
-extractor_macros(suite) -> [];
extractor_macros(Config) when is_list(Config) ->
- ?line runner:test(?extractor_macros),
+ runner:test(?extractor_macros),
ok.
%% This tests the erl_size() function.
-t_erl_size(suite) -> [];
t_erl_size(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_size),
+ P = runner:start(?t_erl_size),
- ?line {term, 0} = (get_term(P)),
- ?line {term, 4} = (get_term(P)),
+ {term, 0} = (get_term(P)),
+ {term, 4} = (get_term(P)),
- ?line {term, 0} = (get_term(P)),
- ?line {term, 27} = (get_term(P)),
+ {term, 0} = (get_term(P)),
+ {term, 27} = (get_term(P)),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_var_content() function.
-t_erl_var_content(suite) -> [];
t_erl_var_content(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_var_content),
+ P = runner:start(?t_erl_var_content),
- ?line {term, 17} = (get_term(P)),
- ?line {term, "http://www.madonna.com"} = (get_term(P)),
- ?line {term, 2} = (get_term(P)),
- ?line {term, "http://www.madonna.com"} = (get_term(P)),
- ?line {term, 2} = (get_term(P)),
+ {term, 17} = (get_term(P)),
+ {term, "http://www.madonna.com"} = (get_term(P)),
+ {term, 2} = (get_term(P)),
+ {term, "http://www.madonna.com"} = (get_term(P)),
+ {term, 2} = (get_term(P)),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
%% This tests the erl_element() function.
-t_erl_element(suite) -> [];
t_erl_element(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_element),
+ P = runner:start(?t_erl_element),
- ?line {term, madonna} = get_term(P),
- ?line {term, 21} = get_term(P),
- ?line {term, 'mad donna'} = get_term(P),
- ?line {term, 12} = get_term(P),
+ {term, madonna} = get_term(P),
+ {term, 21} = get_term(P),
+ {term, 'mad donna'} = get_term(P),
+ {term, 12} = get_term(P),
- ?line {term, 'Madonna'} = get_term(P),
- ?line {term, 21} = get_term(P),
- ?line {term, {children,{"Isabella",2}}} = get_term(P),
- ?line {term, {'home page',"http://www.madonna.com/"}} = get_term(P),
+ {term, 'Madonna'} = get_term(P),
+ {term, 21} = get_term(P),
+ {term, {children,{"Isabella",2}}} = get_term(P),
+ {term, {'home page',"http://www.madonna.com/"}} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
@@ -679,65 +629,64 @@ t_erl_element(Config) when is_list(Config) ->
%% Tests the erl_iolist_length() function.
-t_erl_iolist_length(suite) -> [];
t_erl_iolist_length(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_iolist_length),
+ P = runner:start(?t_erl_iolist_length),
%% Flat lists.
- ?line 0 = erl_iolist_length(P, []),
- ?line 1 = erl_iolist_length(P, [10]),
- ?line 2 = erl_iolist_length(P, [10, 20]),
- ?line 3 = erl_iolist_length(P, [10, 20, 30]),
- ?line 256 = erl_iolist_length(P, lists:seq(0, 255)),
+ 0 = erl_iolist_length(P, []),
+ 1 = erl_iolist_length(P, [10]),
+ 2 = erl_iolist_length(P, [10, 20]),
+ 3 = erl_iolist_length(P, [10, 20, 30]),
+ 256 = erl_iolist_length(P, lists:seq(0, 255)),
%% Deep lists.
- ?line 0 = erl_iolist_length(P, [[]]),
- ?line 1 = erl_iolist_length(P, [[], 42]),
- ?line 1 = erl_iolist_length(P, [42, []]),
- ?line 2 = erl_iolist_length(P, [42, [], 45]),
+ 0 = erl_iolist_length(P, [[]]),
+ 1 = erl_iolist_length(P, [[], 42]),
+ 1 = erl_iolist_length(P, [42, []]),
+ 2 = erl_iolist_length(P, [42, [], 45]),
- ?line 3 = erl_iolist_length(P, [42, [90], 45]),
- ?line 3 = erl_iolist_length(P, [[42, [90]], 45]),
- ?line 3 = erl_iolist_length(P, [[42, [90]], 45]),
+ 3 = erl_iolist_length(P, [42, [90], 45]),
+ 3 = erl_iolist_length(P, [[42, [90]], 45]),
+ 3 = erl_iolist_length(P, [[42, [90]], 45]),
%% List with binaries.
- ?line 0 = erl_iolist_length(P, [list_to_binary([])]),
- ?line 0 = erl_iolist_length(P, [[], list_to_binary([])]),
- ?line 1 = erl_iolist_length(P, [[1], list_to_binary([])]),
- ?line 1 = erl_iolist_length(P, [[], list_to_binary([2])]),
- ?line 2 = erl_iolist_length(P, [[42], list_to_binary([2])]),
- ?line 4 = erl_iolist_length(P, [[42], list_to_binary([2, 3, 4])]),
+ 0 = erl_iolist_length(P, [list_to_binary([])]),
+ 0 = erl_iolist_length(P, [[], list_to_binary([])]),
+ 1 = erl_iolist_length(P, [[1], list_to_binary([])]),
+ 1 = erl_iolist_length(P, [[], list_to_binary([2])]),
+ 2 = erl_iolist_length(P, [[42], list_to_binary([2])]),
+ 4 = erl_iolist_length(P, [[42], list_to_binary([2, 3, 4])]),
%% Binaries as tail.
- ?line 0 = erl_iolist_length(P, [[]| list_to_binary([])]),
- ?line 1 = erl_iolist_length(P, [[1]| list_to_binary([])]),
- ?line 1 = erl_iolist_length(P, [[]| list_to_binary([2])]),
- ?line 2 = erl_iolist_length(P, [[42]| list_to_binary([2])]),
+ 0 = erl_iolist_length(P, [[]| list_to_binary([])]),
+ 1 = erl_iolist_length(P, [[1]| list_to_binary([])]),
+ 1 = erl_iolist_length(P, [[]| list_to_binary([2])]),
+ 2 = erl_iolist_length(P, [[42]| list_to_binary([2])]),
%% Binaries only.
- ?line 0 = erl_iolist_length(P, list_to_binary("")),
- ?line 1 = erl_iolist_length(P, list_to_binary([1])),
- ?line 2 = erl_iolist_length(P, list_to_binary([1, 2])),
+ 0 = erl_iolist_length(P, list_to_binary("")),
+ 1 = erl_iolist_length(P, list_to_binary([1])),
+ 2 = erl_iolist_length(P, list_to_binary([1, 2])),
%% Illegal cases.
- ?line -1 = erl_iolist_length(P, [42|43]),
- ?line -1 = erl_iolist_length(P, a),
+ -1 = erl_iolist_length(P, [42|43]),
+ -1 = erl_iolist_length(P, a),
- ?line -1 = erl_iolist_length(P, [a]),
- ?line -1 = erl_iolist_length(P, [256]),
- ?line -1 = erl_iolist_length(P, [257]),
- ?line -1 = erl_iolist_length(P, [-1]),
- ?line -1 = erl_iolist_length(P, [-2]),
- ?line -1 = erl_iolist_length(P, [-127]),
- ?line -1 = erl_iolist_length(P, [-128]),
+ -1 = erl_iolist_length(P, [a]),
+ -1 = erl_iolist_length(P, [256]),
+ -1 = erl_iolist_length(P, [257]),
+ -1 = erl_iolist_length(P, [-1]),
+ -1 = erl_iolist_length(P, [-2]),
+ -1 = erl_iolist_length(P, [-127]),
+ -1 = erl_iolist_length(P, [-128]),
- ?line runner:finish(P),
+ runner:finish(P),
ok.
%% Invokes the erl_iolist_length() function.
@@ -747,143 +696,141 @@ erl_iolist_length(Port, List) ->
%% Tests the erl_iolist_to_binary() function.
-t_erl_iolist_to_binary(suite) -> [];
t_erl_iolist_to_binary(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_iolist_to_binary),
+ P = runner:start(?t_erl_iolist_to_binary),
%% Flat lists.
- ?line [] = iolist_to_list(P, []),
- ?line [10] = iolist_to_list(P, [10]),
- ?line [10, 20] = iolist_to_list(P, [10, 20]),
- ?line [10, 20, 30] = iolist_to_list(P, [10, 20, 30]),
- ?line AllBytes = lists:seq(0, 255),
- ?line AllBytes = iolist_to_list(P, AllBytes),
+ [] = iolist_to_list(P, []),
+ [10] = iolist_to_list(P, [10]),
+ [10, 20] = iolist_to_list(P, [10, 20]),
+ [10, 20, 30] = iolist_to_list(P, [10, 20, 30]),
+ AllBytes = lists:seq(0, 255),
+ AllBytes = iolist_to_list(P, AllBytes),
%% Deep lists.
- ?line [] = iolist_to_list(P, [[]]),
- ?line [42] = iolist_to_list(P, [[], 42]),
- ?line [42] = iolist_to_list(P, [42, []]),
- ?line [42, 45] = iolist_to_list(P, [42, [], 45]),
+ [] = iolist_to_list(P, [[]]),
+ [42] = iolist_to_list(P, [[], 42]),
+ [42] = iolist_to_list(P, [42, []]),
+ [42, 45] = iolist_to_list(P, [42, [], 45]),
- ?line [42, 90, 45] = iolist_to_list(P, [42, [90], 45]),
- ?line [42, 90, 45] = iolist_to_list(P, [[42, [90]], 45]),
- ?line [42, 90, 45] = iolist_to_list(P, [[42, [90]], 45]),
+ [42, 90, 45] = iolist_to_list(P, [42, [90], 45]),
+ [42, 90, 45] = iolist_to_list(P, [[42, [90]], 45]),
+ [42, 90, 45] = iolist_to_list(P, [[42, [90]], 45]),
%% List with binaries.
- ?line [] = iolist_to_list(P, [list_to_binary([])]),
- ?line [] = iolist_to_list(P, [[], list_to_binary([])]),
- ?line [1] = iolist_to_list(P, [[1], list_to_binary([])]),
- ?line [2] = iolist_to_list(P, [[], list_to_binary([2])]),
- ?line [42, 2] = iolist_to_list(P, [[42], list_to_binary([2])]),
- ?line [42, 2, 3, 4] = iolist_to_list(P, [[42], list_to_binary([2, 3, 4])]),
+ [] = iolist_to_list(P, [list_to_binary([])]),
+ [] = iolist_to_list(P, [[], list_to_binary([])]),
+ [1] = iolist_to_list(P, [[1], list_to_binary([])]),
+ [2] = iolist_to_list(P, [[], list_to_binary([2])]),
+ [42, 2] = iolist_to_list(P, [[42], list_to_binary([2])]),
+ [42, 2, 3, 4] = iolist_to_list(P, [[42], list_to_binary([2, 3, 4])]),
%% Binaries as tail.
- ?line [] = iolist_to_list(P, [[]| list_to_binary([])]),
- ?line [1] = iolist_to_list(P, [[1]| list_to_binary([])]),
- ?line [2] = iolist_to_list(P, [[]| list_to_binary([2])]),
- ?line [42, 2] = iolist_to_list(P, [[42]| list_to_binary([2])]),
+ [] = iolist_to_list(P, [[]| list_to_binary([])]),
+ [1] = iolist_to_list(P, [[1]| list_to_binary([])]),
+ [2] = iolist_to_list(P, [[]| list_to_binary([2])]),
+ [42, 2] = iolist_to_list(P, [[42]| list_to_binary([2])]),
%% Binaries only.
- ?line [] = iolist_to_list(P, list_to_binary("")),
- ?line [1] = iolist_to_list(P, list_to_binary([1])),
- ?line [1, 2] = iolist_to_list(P, list_to_binary([1, 2])),
+ [] = iolist_to_list(P, list_to_binary("")),
+ [1] = iolist_to_list(P, list_to_binary([1])),
+ [1, 2] = iolist_to_list(P, list_to_binary([1, 2])),
%% Illegal cases.
- ?line 'NULL' = iolist_to_list(P, [42|43]),
- ?line 'NULL' = iolist_to_list(P, a),
+ 'NULL' = iolist_to_list(P, [42|43]),
+ 'NULL' = iolist_to_list(P, a),
- ?line 'NULL' = iolist_to_list(P, [a]),
- ?line 'NULL' = iolist_to_list(P, [256]),
- ?line 'NULL' = iolist_to_list(P, [257]),
- ?line 'NULL' = iolist_to_list(P, [-1]),
- ?line 'NULL' = iolist_to_list(P, [-2]),
- ?line 'NULL' = iolist_to_list(P, [-127]),
- ?line 'NULL' = iolist_to_list(P, [-128]),
+ 'NULL' = iolist_to_list(P, [a]),
+ 'NULL' = iolist_to_list(P, [256]),
+ 'NULL' = iolist_to_list(P, [257]),
+ 'NULL' = iolist_to_list(P, [-1]),
+ 'NULL' = iolist_to_list(P, [-2]),
+ 'NULL' = iolist_to_list(P, [-127]),
+ 'NULL' = iolist_to_list(P, [-128]),
- ?line runner:finish(P),
+ runner:finish(P),
ok.
iolist_to_list(Port, Term) ->
case call_erl_function(Port, Term) of
- 'NULL' ->
- 'NULL';
- Bin when is_binary(Bin) ->
- binary_to_list(Bin)
+ 'NULL' ->
+ 'NULL';
+ Bin when is_binary(Bin) ->
+ binary_to_list(Bin)
end.
%% Tests the erl_iolist_to_string() function.
-t_erl_iolist_to_string(suite) -> [];
t_erl_iolist_to_string(Config) when is_list(Config) ->
- ?line P = runner:start(?t_erl_iolist_to_string),
+ P = runner:start(?t_erl_iolist_to_string),
%% Flat lists.
- ?line [0] = iolist_to_string(P, []),
- ?line [10, 0] = iolist_to_string(P, [10]),
- ?line [10, 20, 0] = iolist_to_string(P, [10, 20]),
- ?line [10, 20, 30, 0] = iolist_to_string(P, [10, 20, 30]),
- ?line AllBytes = lists:seq(1, 255)++[0],
- ?line AllBytes = iolist_to_string(P, lists:seq(1, 255)),
+ [0] = iolist_to_string(P, []),
+ [10, 0] = iolist_to_string(P, [10]),
+ [10, 20, 0] = iolist_to_string(P, [10, 20]),
+ [10, 20, 30, 0] = iolist_to_string(P, [10, 20, 30]),
+ AllBytes = lists:seq(1, 255)++[0],
+ AllBytes = iolist_to_string(P, lists:seq(1, 255)),
%% Deep lists.
- ?line [0] = iolist_to_string(P, [[]]),
- ?line [42, 0] = iolist_to_string(P, [[], 42]),
- ?line [42, 0] = iolist_to_string(P, [42, []]),
- ?line [42, 45, 0] = iolist_to_string(P, [42, [], 45]),
+ [0] = iolist_to_string(P, [[]]),
+ [42, 0] = iolist_to_string(P, [[], 42]),
+ [42, 0] = iolist_to_string(P, [42, []]),
+ [42, 45, 0] = iolist_to_string(P, [42, [], 45]),
- ?line [42, 90, 45, 0] = iolist_to_string(P, [42, [90], 45]),
- ?line [42, 90, 45, 0] = iolist_to_string(P, [[42, [90]], 45]),
- ?line [42, 90, 45, 0] = iolist_to_string(P, [[42, [90]], 45]),
+ [42, 90, 45, 0] = iolist_to_string(P, [42, [90], 45]),
+ [42, 90, 45, 0] = iolist_to_string(P, [[42, [90]], 45]),
+ [42, 90, 45, 0] = iolist_to_string(P, [[42, [90]], 45]),
%% List with binaries.
- ?line [0] = iolist_to_string(P, [list_to_binary([])]),
- ?line [0] = iolist_to_string(P, [[], list_to_binary([])]),
- ?line [1, 0] = iolist_to_string(P, [[1], list_to_binary([])]),
- ?line [2, 0] = iolist_to_string(P, [[], list_to_binary([2])]),
- ?line [42, 2, 0] = iolist_to_string(P, [[42], list_to_binary([2])]),
- ?line [42, 2, 3, 4, 0] = iolist_to_string(P, [[42],
- list_to_binary([2, 3, 4])]),
+ [0] = iolist_to_string(P, [list_to_binary([])]),
+ [0] = iolist_to_string(P, [[], list_to_binary([])]),
+ [1, 0] = iolist_to_string(P, [[1], list_to_binary([])]),
+ [2, 0] = iolist_to_string(P, [[], list_to_binary([2])]),
+ [42, 2, 0] = iolist_to_string(P, [[42], list_to_binary([2])]),
+ [42, 2, 3, 4, 0] = iolist_to_string(P, [[42],
+ list_to_binary([2, 3, 4])]),
%% Binaries as tail.
- ?line [0] = iolist_to_string(P, [[]| list_to_binary([])]),
- ?line [1, 0] = iolist_to_string(P, [[1]| list_to_binary([])]),
- ?line [2, 0] = iolist_to_string(P, [[]| list_to_binary([2])]),
- ?line [42, 2, 0] = iolist_to_string(P, [[42]| list_to_binary([2])]),
+ [0] = iolist_to_string(P, [[]| list_to_binary([])]),
+ [1, 0] = iolist_to_string(P, [[1]| list_to_binary([])]),
+ [2, 0] = iolist_to_string(P, [[]| list_to_binary([2])]),
+ [42, 2, 0] = iolist_to_string(P, [[42]| list_to_binary([2])]),
%% Binaries only.
- ?line [0] = iolist_to_string(P, list_to_binary("")),
- ?line [1, 0] = iolist_to_string(P, list_to_binary([1])),
- ?line [1, 2, 0] = iolist_to_string(P, list_to_binary([1, 2])),
+ [0] = iolist_to_string(P, list_to_binary("")),
+ [1, 0] = iolist_to_string(P, list_to_binary([1])),
+ [1, 2, 0] = iolist_to_string(P, list_to_binary([1, 2])),
%% Illegal cases.
- ?line 'NULL' = iolist_to_string(P, [0]),
- ?line 'NULL' = iolist_to_string(P, [65, 0, 66]),
- ?line 'NULL' = iolist_to_string(P, [65, 66, 67, 0]),
+ 'NULL' = iolist_to_string(P, [0]),
+ 'NULL' = iolist_to_string(P, [65, 0, 66]),
+ 'NULL' = iolist_to_string(P, [65, 66, 67, 0]),
- ?line 'NULL' = iolist_to_string(P, [42|43]),
- ?line 'NULL' = iolist_to_string(P, a),
+ 'NULL' = iolist_to_string(P, [42|43]),
+ 'NULL' = iolist_to_string(P, a),
- ?line 'NULL' = iolist_to_string(P, [a]),
- ?line 'NULL' = iolist_to_string(P, [256]),
- ?line 'NULL' = iolist_to_string(P, [257]),
- ?line 'NULL' = iolist_to_string(P, [-1]),
- ?line 'NULL' = iolist_to_string(P, [-2]),
- ?line 'NULL' = iolist_to_string(P, [-127]),
- ?line 'NULL' = iolist_to_string(P, [-128]),
+ 'NULL' = iolist_to_string(P, [a]),
+ 'NULL' = iolist_to_string(P, [256]),
+ 'NULL' = iolist_to_string(P, [257]),
+ 'NULL' = iolist_to_string(P, [-1]),
+ 'NULL' = iolist_to_string(P, [-2]),
+ 'NULL' = iolist_to_string(P, [-127]),
+ 'NULL' = iolist_to_string(P, [-128]),
- ?line runner:finish(P),
+ runner:finish(P),
ok.
%% Invokes the erl_iolist_to_string() function.
@@ -891,8 +838,8 @@ t_erl_iolist_to_string(Config) when is_list(Config) ->
iolist_to_string(Port, Term) ->
runner:send_term(Port, Term),
case get_term(Port) of
- {bytes, Result} -> Result;
- 'NULL' -> 'NULL'
+ {bytes, Result} -> Result;
+ 'NULL' -> 'NULL'
end.
@@ -902,38 +849,37 @@ iolist_to_string(Port, Term) ->
%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-erl_print_term(suite) -> [];
-erl_print_term(doc) -> "Tests the erl_print_term() function";
+%% Tests the erl_print_term() function
erl_print_term(Config) when is_list(Config) ->
- ?line PrintTerm = print_term(Config),
- ?line P = open_port({spawn, PrintTerm}, [stream]),
+ PrintTerm = print_term(Config),
+ P = open_port({spawn, PrintTerm}, [stream]),
%% Lists.
- ?line print(P, "[]", []),
- ?line print(P, "[a]", [a]),
- ?line print(P, "[[a]]", [[a]]),
- ?line print(P, "[[]]", [[]]),
- ?line print(P, "[a,b,c]", [a,b,c]),
- ?line print(P, "[a,b|c]", [a,b|c]),
- ?line print(P, "[a,[],c]", [a,[],c]),
- ?line print(P, "[a,[1000,1],c]", [a,[1000,1],c]),
+ print(P, "[]", []),
+ print(P, "[a]", [a]),
+ print(P, "[[a]]", [[a]]),
+ print(P, "[[]]", [[]]),
+ print(P, "[a,b,c]", [a,b,c]),
+ print(P, "[a,b|c]", [a,b|c]),
+ print(P, "[a,[],c]", [a,[],c]),
+ print(P, "[a,[1000,1],c]", [a,[1000,1],c]),
%% Tuples.
- ?line print(P, "{}", {}),
- ?line print(P, "{ok}", {ok}),
- ?line print(P, "{1,2,3}", {1, 2, 3}),
+ print(P, "{}", {}),
+ print(P, "{ok}", {ok}),
+ print(P, "{1,2,3}", {1, 2, 3}),
%% Pids.
- ?line {_X, Y, Z} = split_pid(self()),
- ?line PidString = lists:flatten(io_lib:format("<~s.~w.~w>",
- [node(), Y, Z])),
- ?line print(P, PidString, self()),
+ {_X, Y, Z} = split_pid(self()),
+ PidString = lists:flatten(io_lib:format("<~s.~w.~w>",
+ [node(), Y, Z])),
+ print(P, PidString, self()),
- ?line unlink(P),
- ?line exit(P, die),
+ unlink(P),
+ exit(P, die),
ok.
split_pid(Pid) when is_pid(Pid) ->
@@ -948,23 +894,22 @@ split_pid([$.|Rest], Cur, Result) ->
split_pid([$>], Cur, Result) ->
list_to_tuple(Result++[Cur]).
-print_string(suite) -> [];
-print_string(doc) -> "Test printing a string with erl_print_term()";
+%% Test printing a string with erl_print_term()
print_string(Config) when is_list(Config) ->
- ?line PrintTerm = print_term(Config),
- ?line P = open_port({spawn, PrintTerm}, [stream]),
+ PrintTerm = print_term(Config),
+ P = open_port({spawn, PrintTerm}, [stream]),
%% Strings.
- ?line print(P, "\"ABC\"", "ABC"),
- ?line {11, "\"\\tABC\\r\\n\""} = print(P, "\tABC\r\n"),
+ print(P, "\"ABC\"", "ABC"),
+ {11, "\"\\tABC\\r\\n\""} = print(P, "\tABC\r\n"),
%% Not strings.
- ?line print(P, "[65,66,67,0]", "ABC\000"),
+ print(P, "[65,66,67,0]", "ABC\000"),
- ?line unlink(P),
- ?line exit(P, die),
+ unlink(P),
+ exit(P, die),
ok.
print(Port, TermString, Term) ->
@@ -983,15 +928,15 @@ print(Port, Term) ->
collect_line(Port, Result) ->
receive
- {Port, {data, Data}} ->
- case lists:reverse(Data) of
- [$\n|Rest] ->
- collect_line1(Rest++Result, []);
- Chars ->
- collect_line(Port, Chars++Result)
- end
- after test_server:seconds(5) ->
- test_server:fail("No response from C program")
+ {Port, {data, Data}} ->
+ case lists:reverse(Data) of
+ [$\n|Rest] ->
+ collect_line1(Rest++Result, []);
+ Chars ->
+ collect_line(Port, Chars++Result)
+ end
+ after 5000 ->
+ ct:fail("No response from C program")
end.
collect_line1([$\r|Rest], Result) ->
@@ -1001,18 +946,16 @@ collect_line1([C|Rest], Result) ->
%% Test case submitted by Per Lundgren, ERV.
-high_chaparal(suite) -> [];
high_chaparal(Config) when is_list(Config) ->
- ?line P = runner:start(?high_chaparal),
- ?line {term, [hello, world]} = get_term(P),
- ?line runner:recv_eot(P),
+ P = runner:start(?high_chaparal),
+ {term, [hello, world]} = get_term(P),
+ runner:recv_eot(P),
ok.
%% OTP-7448
-broken_data(suite) -> [];
broken_data(Config) when is_list(Config) ->
- ?line P = runner:start(?broken_data),
- ?line runner:recv_eot(P),
+ P = runner:start(?broken_data),
+ runner:recv_eot(P),
ok.
%% This calls a C function with one parameter and returns the result.
@@ -1020,12 +963,12 @@ broken_data(Config) when is_list(Config) ->
call_erl_function(Port, Term) ->
runner:send_term(Port, Term),
case get_term(Port) of
- {term, Result} -> Result;
- 'NULL' -> 'NULL'
+ {term, Result} -> Result;
+ 'NULL' -> 'NULL'
end.
print_term(Config) when is_list(Config) ->
- filename:join(?config(data_dir, Config), "print_term").
+ filename:join(proplists:get_value(data_dir, Config), "print_term").
@@ -1034,57 +977,57 @@ print_term(Config) when is_list(Config) ->
%%% back, without having been mutated into short form. We must take
%%% care then to check the actual returned ref, and not the original
%%% one, which is equal to it.
-cnode_1(suite) -> [];
-cnode_1(doc) -> "Tests involving cnode: sends a long ref from a cnode to us";
+
+%% Tests involving cnode: sends a long ref from a cnode to us
cnode_1(Config) when is_list(Config) ->
- ?line Cnode = filename:join(?config(data_dir, Config), "cnode"),
- ?line register(mip, self()),
- ?line spawn_link(?MODULE, start_cnode, [Cnode]),
- ?line Ref1 = get_ref(),
+ Cnode = filename:join(proplists:get_value(data_dir, Config), "cnode"),
+ register(mip, self()),
+ spawn_link(?MODULE, start_cnode, [Cnode]),
+ Ref1 = get_ref(),
io:format("Ref1 ~p~n", [Ref1]),
- ?line check_ref(Ref1),
- ?line Ref2 = make_ref(),
- ?line receive
- Pid -> Pid
- end,
- ?line Fun1 = fun(X) -> {Pid, X} end, % sneak in a fun test here
- %?line Fun1 = {wait_with_funs, new_dist_format},
- ?line Term = {Ref2, Fun1, {1,2,3,4,5,6,7,8,9,10}},
+ check_ref(Ref1),
+ Ref2 = make_ref(),
+ Pid = receive
+ Msg -> Msg %% pid
+ end,
+ Fun1 = fun(X) -> {Pid, X} end, % sneak in a fun test here
+ %Fun1 = {wait_with_funs, new_dist_format},
+ Term = {Ref2, Fun1, {1,2,3,4,5,6,7,8,9,10}},
%% A term which will overflow the original buffer used in 'cnode'.
- ?line Pid ! Term,
- ?line receive
- Term2 ->
- io:format("received ~p~n", [Term2]),
- case Term2 of
- Term ->
- {Ref22,_,_} = Term2,
- ?line check_ref(Ref22);
- X ->
- test_server:fail({receive1,X})
- end
- after 5000 ->
- test_server:fail(receive1)
- end,
- ?line receive
- Pid ->
- ok;
- Y ->
- test_server:fail({receive1,Y})
- after 5000 ->
- test_server:fail(receive2)
- end,
- ?line io:format("ref = ~p~n", [Ref1]),
- ?line check_ref(Ref1),
+ Pid ! Term,
+ receive
+ Term2 ->
+ io:format("received ~p~n", [Term2]),
+ case Term2 of
+ Term ->
+ {Ref22,_,_} = Term2,
+ check_ref(Ref22);
+ X ->
+ ct:fail({receive1,X})
+ end
+ after 5000 ->
+ ct:fail(receive1)
+ end,
+ receive
+ Pid ->
+ ok;
+ Y ->
+ ct:fail({receive1,Y})
+ after 5000 ->
+ ct:fail(receive2)
+ end,
+ io:format("ref = ~p~n", [Ref1]),
+ check_ref(Ref1),
ok.
check_ref(Ref) ->
case bin_ext_type(Ref) of
- 101 ->
- test_server:fail(oldref);
- 114 ->
- ok;
- Type ->
- test_server:fail({type, Type})
+ 101 ->
+ ct:fail(oldref);
+ 114 ->
+ ok;
+ Type ->
+ ct:fail({type, Type})
end.
bin_ext_type(T) ->
@@ -1093,10 +1036,10 @@ bin_ext_type(T) ->
get_ref() ->
receive
- X when is_reference(X) ->
- X
+ X when is_reference(X) ->
+ X
after 5000 ->
- test_server:fail({cnode, timeout})
+ ct:fail({cnode, timeout})
end.
start_cnode(Cnode) ->
@@ -1105,35 +1048,33 @@ start_cnode(Cnode) ->
rec_cnode() ->
receive
- X ->
- io:format("from cnode: ~p~n", [X]),
- rec_cnode()
+ X ->
+ io:format("from cnode: ~p~n", [X]),
+ rec_cnode()
end.
nc2vinfo(Pid) when is_pid(Pid) ->
- ?line [_NodeStr, NumberStr, SerialStr]
- = string:tokens(pid_to_list(Pid), "<.>"),
- ?line Number = list_to_integer(NumberStr),
- ?line Serial = list_to_integer(SerialStr),
- ?line {pid, node(Pid), Number, Serial};
+ [_NodeStr, NumberStr, SerialStr]
+ = string:tokens(pid_to_list(Pid), "<.>"),
+ Number = list_to_integer(NumberStr),
+ Serial = list_to_integer(SerialStr),
+ {pid, node(Pid), Number, Serial};
nc2vinfo(Port) when is_port(Port) ->
- ?line ["#Port", _NodeStr, NumberStr]
- = string:tokens(erlang:port_to_list(Port), "<.>"),
- ?line Number = list_to_integer(NumberStr),
- ?line {port, node(Port), Number};
+ ["#Port", _NodeStr, NumberStr]
+ = string:tokens(erlang:port_to_list(Port), "<.>"),
+ Number = list_to_integer(NumberStr),
+ {port, node(Port), Number};
nc2vinfo(Ref) when is_reference(Ref) ->
- ?line ["#Ref", _NodeStr | NumStrList]
- = string:tokens(erlang:ref_to_list(Ref), "<.>"),
- ?line {Len, RevNumList} = lists:foldl(fun ("0", {N, []}) ->
- {N+1, []};
- (IStr, {N, Is}) ->
- {N+1,
- [list_to_integer(IStr)|Is]}
- end,
- {0, []},
- NumStrList),
- ?line {ref, node(Ref), Len, lists:reverse(RevNumList)};
+ ["#Ref", _NodeStr | NumStrList]
+ = string:tokens(erlang:ref_to_list(Ref), "<.>"),
+ {Len, RevNumList} = lists:foldl(fun ("0", {N, []}) ->
+ {N+1, []};
+ (IStr, {N, Is}) ->
+ {N+1,
+ [list_to_integer(IStr)|Is]}
+ end,
+ {0, []},
+ NumStrList),
+ {ref, node(Ref), Len, lists:reverse(RevNumList)};
nc2vinfo(Other) ->
- ?line {badarg, Other}.
-
-
+ {badarg, Other}.
diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first
index 4a8664429e..0ea872ef49 100644
--- a/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src
index 31584ff686..4b1ddf77b6 100644
--- a/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c b/lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c
index df40a4414e..bead0f8413 100644
--- a/lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c
+++ b/lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c b/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c
index 0a2ecf9dcc..d97f218a26 100644
--- a/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c
+++ b/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2010. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -149,7 +149,7 @@ TESTCASE(round_trip_conversion)
{
int v;
- for (v = 8; v; v <<= 1) {
+ for (v = 8, n = 0; n < (sizeof(v)*8-4-1); v <<= 1, n++) {
for (i=-4; i<4; i++) {
encode_decode(erl_mk_int(v+i), "INT");
encode_decode(erl_mk_int(-(v+i)), "NEG INT");
@@ -166,7 +166,7 @@ TESTCASE(round_trip_conversion)
}
{
long long v;
- for (v = 8; v; v <<= 1) {
+ for (v = 8, n = 0; n < (sizeof(v)*8-4-1); v <<= 1, n++) {
for (i=-4; i<4; i++) {
encode_decode(erl_mk_longlong(v+i), "LONGLONG");
encode_decode(erl_mk_longlong(-(v+i)), "NEG LONGLONG");
diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c b/lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c
index e474e8f7ab..5b7cb1aec8 100644
--- a/lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c
+++ b/lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_ext_SUITE.erl b/lib/erl_interface/test/erl_ext_SUITE.erl
index f73c15e15f..afaba1fd93 100644
--- a/lib/erl_interface/test/erl_ext_SUITE.erl
+++ b/lib/erl_interface/test/erl_ext_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,77 +21,47 @@
%%
-module(erl_ext_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("erl_ext_SUITE_data/ext_test_cases.hrl").
--export([
- all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- compare_tuple/1,
- compare_list/1,
- compare_string/1,
- compare_list_string/1,
- compare_nc_ext/1
- ]).
+-export([all/0, suite/0,
+ compare_tuple/1,
+ compare_list/1,
+ compare_string/1,
+ compare_list_string/1,
+ compare_nc_ext/1]).
-import(runner, [get_term/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[compare_tuple, compare_list, compare_string,
compare_list_string, compare_nc_ext].
-groups() ->
- [].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-compare_tuple(suite) -> [];
-compare_tuple(doc) -> [];
compare_tuple(Config) when is_list(Config) ->
- ?line P = runner:start(?compare_tuple),
- ?line runner:recv_eot(P),
+ P = runner:start(?compare_tuple),
+ runner:recv_eot(P),
ok.
-compare_list(suite) -> [];
-compare_list(doc) -> [];
compare_list(Config) when is_list(Config) ->
- ?line P = runner:start(?compare_list),
- ?line runner:recv_eot(P),
+ P = runner:start(?compare_list),
+ runner:recv_eot(P),
ok.
-compare_string(suite) -> [];
-compare_string(doc) -> [];
compare_string(Config) when is_list(Config) ->
- ?line P = runner:start(?compare_string),
- ?line runner:recv_eot(P),
+ P = runner:start(?compare_string),
+ runner:recv_eot(P),
ok.
-compare_list_string(suite) -> [];
-compare_list_string(doc) -> [];
compare_list_string(Config) when is_list(Config) ->
- ?line P = runner:start(?compare_list_string),
- ?line runner:recv_eot(P),
+ P = runner:start(?compare_list_string),
+ runner:recv_eot(P),
ok.
-compare_nc_ext(suite) -> [];
-compare_nc_ext(doc) -> [];
compare_nc_ext(Config) when is_list(Config) ->
- ?line P = runner:start(?compare_nc_ext),
- ?line runner:recv_eot(P),
+ P = runner:start(?compare_nc_ext),
+ runner:recv_eot(P),
ok.
-
-
-
diff --git a/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first
index ddff1ba13f..9ca8f7f8a3 100644
--- a/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2009. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src
index 6f3fdec8a4..fe8caebbd6 100644
--- a/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2009. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c b/lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c
index 65d5f0d2e0..36cf086ed2 100644
--- a/lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c
+++ b/lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_format_SUITE.erl b/lib/erl_interface/test/erl_format_SUITE.erl
index 8c01a9914f..c1a7d8377e 100644
--- a/lib/erl_interface/test/erl_format_SUITE.erl
+++ b/lib/erl_interface/test/erl_format_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,137 +21,111 @@
%%
-module(erl_format_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("erl_format_SUITE_data/format_test_cases.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, atoms/1, tuples/1, lists/1]).
+-export([all/0, suite/0,
+ atoms/1, tuples/1, lists/1]).
-import(runner, [get_term/1]).
%% This test suite test the erl_format() function.
%% It uses the port program "format_test".
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[atoms, tuples, lists].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%% Tests formatting various atoms.
-atoms(suite) -> [];
atoms(Config) when is_list(Config) ->
- ?line P = runner:start(?atoms),
-
- ?line {term, ''} = get_term(P),
- ?line {term, 'a'} = get_term(P),
- ?line {term, 'A'} = get_term(P),
- ?line {term, 'abc'} = get_term(P),
- ?line {term, 'Abc'} = get_term(P),
- ?line {term, 'ab@c'} = get_term(P),
- ?line {term, 'The rain in Spain stays mainly in the plains'} =
- get_term(P),
-
- ?line {term, a} = get_term(P),
- ?line {term, ab} = get_term(P),
- ?line {term, abc} = get_term(P),
- ?line {term, ab@c} = get_term(P),
- ?line {term, abcdefghijklmnopq} = get_term(P),
-
- ?line {term, ''} = get_term(P),
- ?line {term, 'a'} = get_term(P),
- ?line {term, 'A'} = get_term(P),
- ?line {term, 'abc'} = get_term(P),
- ?line {term, 'Abc'} = get_term(P),
- ?line {term, 'ab@c'} = get_term(P),
- ?line {term, 'The rain in Spain stays mainly in the plains'} =
- get_term(P),
-
- ?line {term, a} = get_term(P),
- ?line {term, ab} = get_term(P),
- ?line {term, abc} = get_term(P),
- ?line {term, ab@c} = get_term(P),
- ?line {term, ' abcdefghijklmnopq '} = get_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?atoms),
+
+ {term, ''} = get_term(P),
+ {term, 'a'} = get_term(P),
+ {term, 'A'} = get_term(P),
+ {term, 'abc'} = get_term(P),
+ {term, 'Abc'} = get_term(P),
+ {term, 'ab@c'} = get_term(P),
+ {term, 'The rain in Spain stays mainly in the plains'} = get_term(P),
+
+ {term, a} = get_term(P),
+ {term, ab} = get_term(P),
+ {term, abc} = get_term(P),
+ {term, ab@c} = get_term(P),
+ {term, abcdefghijklmnopq} = get_term(P),
+
+ {term, ''} = get_term(P),
+ {term, 'a'} = get_term(P),
+ {term, 'A'} = get_term(P),
+ {term, 'abc'} = get_term(P),
+ {term, 'Abc'} = get_term(P),
+ {term, 'ab@c'} = get_term(P),
+ {term, 'The rain in Spain stays mainly in the plains'} = get_term(P),
+
+ {term, a} = get_term(P),
+ {term, ab} = get_term(P),
+ {term, abc} = get_term(P),
+ {term, ab@c} = get_term(P),
+ {term, ' abcdefghijklmnopq '} = get_term(P),
+
+ runner:recv_eot(P),
ok.
%% Tests formatting various tuples
-tuples(suite) -> [];
tuples(Config) when is_list(Config) ->
- ?line P = runner:start(?tuples),
-
- ?line {term, {}} = get_term(P),
- ?line {term, {a}} = get_term(P),
- ?line {term, {a, b}} = get_term(P),
- ?line {term, {a, b, c}} = get_term(P),
- ?line {term, {1}} = get_term(P),
- ?line {term, {[]}} = get_term(P),
- ?line {term, {[], []}} = get_term(P),
- ?line {term, {[], a, b, c}} = get_term(P),
- ?line {term, {[], a, [], b, c}} = get_term(P),
- ?line {term, {[], a, '', b, c}} = get_term(P),
-
- ?line runner:recv_eot(P),
+ P = runner:start(?tuples),
+
+ {term, {}} = get_term(P),
+ {term, {a}} = get_term(P),
+ {term, {a, b}} = get_term(P),
+ {term, {a, b, c}} = get_term(P),
+ {term, {1}} = get_term(P),
+ {term, {[]}} = get_term(P),
+ {term, {[], []}} = get_term(P),
+ {term, {[], a, b, c}} = get_term(P),
+ {term, {[], a, [], b, c}} = get_term(P),
+ {term, {[], a, '', b, c}} = get_term(P),
+
+ runner:recv_eot(P),
ok.
%% Tests formatting various lists
-lists(suite) -> [];
lists(Config) when is_list(Config) ->
- ?line P = runner:start(?lists),
-
- ?line {term, []} = get_term(P),
- ?line {term, [a]} = get_term(P),
- ?line {term, [a, b]} = get_term(P),
- ?line {term, [a, b, c]} = get_term(P),
- ?line {term, [1]} = get_term(P),
- ?line {term, [[]]} = get_term(P),
- ?line {term, [[], []]} = get_term(P),
- ?line {term, [[], a, b, c]} = get_term(P),
- ?line {term, [[], a, [], b, c]} = get_term(P),
- ?line {term, [[], a, '', b, c]} = get_term(P),
-
- ?line {term, [{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]} =
- get_term(P),
+ P = runner:start(?lists),
+
+ {term, []} = get_term(P),
+ {term, [a]} = get_term(P),
+ {term, [a, b]} = get_term(P),
+ {term, [a, b, c]} = get_term(P),
+ {term, [1]} = get_term(P),
+ {term, [[]]} = get_term(P),
+ {term, [[], []]} = get_term(P),
+ {term, [[], a, b, c]} = get_term(P),
+ {term, [[], a, [], b, c]} = get_term(P),
+ {term, [[], a, '', b, c]} = get_term(P),
+
+ {term, [{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]} = get_term(P),
case os:type() of
- vxworks ->
- ?line {term, [{pi, _}, {'cos(70)', _}]} = get_term(P),
- ?line {term, [[pi, _], ['cos(70)', _]]} = get_term(P),
- ?line {term, [[pi, _], [], ["cos(70)", _]]} =
- get_term(P);
- _ ->
- ?line {term, [{pi, 3.1415}, {'cos(70)', 0.34202}]} = get_term(P),
- ?line {term, [[pi, 3.1415], ['cos(70)', 0.34202]]} = get_term(P),
- ?line {term, [[pi, 3.1415], [], ["cos(70)", 0.34202]]} =
- get_term(P)
+ vxworks ->
+ {term, [{pi, _}, {'cos(70)', _}]} = get_term(P),
+ {term, [[pi, _], ['cos(70)', _]]} = get_term(P),
+ {term, [[pi, _], [], ["cos(70)", _]]} = get_term(P);
+ _ ->
+ {term, [{pi, 3.1415}, {'cos(70)', 0.34202}]} = get_term(P),
+ {term, [[pi, 3.1415], ['cos(70)', 0.34202]]} = get_term(P),
+ {term, [[pi, 3.1415], [], ["cos(70)", 0.34202]]} = get_term(P)
end,
- ?line {term, [-1]} = get_term(P),
+ {term, [-1]} = get_term(P),
- ?line runner:recv_eot(P),
+ runner:recv_eot(P),
ok.
-
-
-
diff --git a/lib/erl_interface/test/erl_format_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_format_SUITE_data/Makefile.first
index 9fc4e742bd..acbb8c98bb 100644
--- a/lib/erl_interface/test/erl_format_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/erl_format_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_format_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_format_SUITE_data/Makefile.src
index 4f5f780f31..2ba59ab651 100644
--- a/lib/erl_interface/test/erl_format_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/erl_format_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_format_SUITE_data/format_test.c b/lib/erl_interface/test/erl_format_SUITE_data/format_test.c
index 179327ede0..258ae92e0f 100644
--- a/lib/erl_interface/test/erl_format_SUITE_data/format_test.c
+++ b/lib/erl_interface/test/erl_format_SUITE_data/format_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_global_SUITE.erl b/lib/erl_interface/test/erl_global_SUITE.erl
index b719ad5c6a..ecc6753c7f 100644
--- a/lib/erl_interface/test/erl_global_SUITE.erl
+++ b/lib/erl_interface/test/erl_global_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,12 +21,12 @@
%%
-module(erl_global_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("erl_global_SUITE_data/erl_global_test_cases.hrl").
--export([all/0,suite/0,init_per_suite/1,end_per_suite/1,
- init_per_testcase/2,end_per_testcase/2,
- erl_global_registration/1, erl_global_whereis/1, erl_global_names/1]).
+-export([all/0,suite/0,
+ erl_global_registration/1,
+ erl_global_whereis/1, erl_global_names/1]).
-import(runner, [get_term/1,send_term/2]).
@@ -35,62 +35,50 @@
all() ->
[erl_global_registration, erl_global_whereis, erl_global_names].
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:minutes(0.25)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
erl_global_registration(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0),
+ P = runner:start(?interpret),
+ {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0),
- ?line ok = erl_global_register(P, Fd, ?GLOBAL_NAME),
- ?line ok = erl_global_unregister(P, Fd, ?GLOBAL_NAME),
+ ok = erl_global_register(P, Fd, ?GLOBAL_NAME),
+ ok = erl_global_unregister(P, Fd, ?GLOBAL_NAME),
- ?line 0 = erl_close_connection(P,Fd),
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ 0 = erl_close_connection(P,Fd),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
erl_global_whereis(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0),
-
- ?line Self = self(),
- ?line yes = global:register_name(?GLOBAL_NAME, Self),
- ?line Self = erl_global_whereis(P, Fd, ?GLOBAL_NAME),
- ?line global:unregister_name(?GLOBAL_NAME),
- ?line 0 = erl_close_connection(P, Fd),
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ P = runner:start(?interpret),
+ {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0),
+
+ Self = self(),
+ yes = global:register_name(?GLOBAL_NAME, Self),
+ Self = erl_global_whereis(P, Fd, ?GLOBAL_NAME),
+ global:unregister_name(?GLOBAL_NAME),
+ 0 = erl_close_connection(P, Fd),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
erl_global_names(Config) when is_list(Config) ->
- ?line P = runner:start(?interpret),
- ?line {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0),
-
- ?line Self = self(),
- ?line global:register_name(?GLOBAL_NAME, Self),
- ?line {Names1, _N1} = erl_global_names(P, Fd),
- ?line true = lists:member(atom_to_list(?GLOBAL_NAME), Names1),
- ?line global:unregister_name(?GLOBAL_NAME),
- ?line {Names2, _N2} = erl_global_names(P, Fd),
- ?line false = lists:member(atom_to_list(?GLOBAL_NAME), Names2),
- ?line 0 = erl_close_connection(P, Fd),
- ?line runner:send_eot(P),
- ?line runner:recv_eot(P),
+ P = runner:start(?interpret),
+ {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0),
+
+ Self = self(),
+ global:register_name(?GLOBAL_NAME, Self),
+ {Names1, _N1} = erl_global_names(P, Fd),
+ true = lists:member(atom_to_list(?GLOBAL_NAME), Names1),
+ global:unregister_name(?GLOBAL_NAME),
+ {Names2, _N2} = erl_global_names(P, Fd),
+ false = lists:member(atom_to_list(?GLOBAL_NAME), Names2),
+ 0 = erl_close_connection(P, Fd),
+ runner:send_eot(P),
+ runner:recv_eot(P),
ok.
%%% Interface functions for erl_interface functions.
@@ -98,14 +86,14 @@ erl_global_names(Config) when is_list(Config) ->
erl_connect(P, Node, Num, Cookie, Creation) ->
send_command(P, erl_connect, [Num, Node, Cookie, Creation]),
case get_term(P) of
- {term,{Fd,_}} when Fd >= 0 -> {ok,Fd};
- {term,{-1,Errno}} -> {error,Errno}
+ {term,{Fd,_}} when Fd >= 0 -> {ok,Fd};
+ {term,{-1,Errno}} -> {error,Errno}
end.
erl_close_connection(P, FD) ->
send_command(P, erl_close_connection, [FD]),
case get_term(P) of
- {term,Int} when is_integer(Int) -> Int
+ {term,Int} when is_integer(Int) -> Int
end.
erl_global_register(P, Fd, Name) ->
@@ -115,15 +103,15 @@ erl_global_register(P, Fd, Name) ->
erl_global_whereis(P, Fd, Name) ->
send_command(P, erl_global_whereis, [Fd,Name]),
case get_term(P) of
- {term, What} ->
- What
+ {term, What} ->
+ What
end.
erl_global_names(P, Fd) ->
send_command(P, erl_global_names, [Fd]),
case get_term(P) of
- {term, What} ->
- What
+ {term, What} ->
+ What
end.
erl_global_unregister(P, Fd, Name) ->
@@ -132,11 +120,11 @@ erl_global_unregister(P, Fd, Name) ->
get_send_result(P) ->
case get_term(P) of
- {term,{1,_}} -> ok;
- {term,{0, 0}} -> ok;
- {term,{-1, Errno}} -> {error,Errno};
- {term,{_,_}}->
- ?t:fail(bad_return_value)
+ {term,{1,_}} -> ok;
+ {term,{0, 0}} -> ok;
+ {term,{-1, Errno}} -> {error,Errno};
+ {term,{_,_}}->
+ ct:fail(bad_return_value)
end.
send_command(P, Name, Args) ->
diff --git a/lib/erl_interface/test/erl_global_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_global_SUITE_data/Makefile.first
index ec77ef3dc2..b2c62be1f2 100644
--- a/lib/erl_interface/test/erl_global_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/erl_global_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2010. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_global_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_global_SUITE_data/Makefile.src
index 4cbf51713b..1c1530d1b6 100644
--- a/lib/erl_interface/test/erl_global_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/erl_global_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2010. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c b/lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c
index 5a17069751..0f08727225 100644
--- a/lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c
+++ b/lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_match_SUITE.erl b/lib/erl_interface/test/erl_match_SUITE.erl
index d8f7bd89b4..5566714092 100644
--- a/lib/erl_interface/test/erl_match_SUITE.erl
+++ b/lib/erl_interface/test/erl_match_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,249 +21,221 @@
%%
-module(erl_match_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("erl_match_SUITE_data/match_test_cases.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- atoms/1, lists/1, tuples/1, references/1, pids/1, ports/1,
- bind/1, integers/1, floats/1, binaries/1, strings/1]).
+-export([all/0, suite/0,
+ atoms/1, lists/1, tuples/1, references/1, pids/1, ports/1,
+ bind/1, integers/1, floats/1, binaries/1, strings/1]).
%% For interactive running of matcher.
-export([start_matcher/1, erl_match/3]).
%% This test suite tests the erl_match() function.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[atoms, lists, tuples, references, pids, ports, bind,
integers, floats, binaries, strings].
-groups() ->
- [].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-atoms(suite) -> [];
atoms(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
+ P = start_matcher(Config),
- ?line eq(P, '', ''),
- ?line eq(P, a, a),
- ?line ne(P, a, b),
- ?line ne(P, a, aa),
- ?line eq(P, kalle, kalle),
- ?line ne(P, kalle, arne),
+ eq(P, '', ''),
+ eq(P, a, a),
+ ne(P, a, b),
+ ne(P, a, aa),
+ eq(P, kalle, kalle),
+ ne(P, kalle, arne),
- ?line ne(P, kalle, 42),
- ?line ne(P, 42, kalle),
+ ne(P, kalle, 42),
+ ne(P, 42, kalle),
- ?line runner:finish(P),
+ runner:finish(P),
ok.
-lists(suite) -> [];
lists(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
- ?line eq(P, [], []),
+ P = start_matcher(Config),
+ eq(P, [], []),
- ?line ne(P, [], [a]),
- ?line ne(P, [a], []),
+ ne(P, [], [a]),
+ ne(P, [a], []),
- ?line eq(P, [a], [a]),
- ?line ne(P, [a], [b]),
+ eq(P, [a], [a]),
+ ne(P, [a], [b]),
- ?line eq(P, [a|b], [a|b]),
- ?line ne(P, [a|b], [a|x]),
+ eq(P, [a|b], [a|b]),
+ ne(P, [a|b], [a|x]),
- ?line eq(P, [a, b], [a, b]),
- ?line ne(P, [a, b], [a, x]),
+ eq(P, [a, b], [a, b]),
+ ne(P, [a, b], [a, x]),
- ?line eq(P, [a, b, c], [a, b, c]),
- ?line ne(P, [a, b|c], [a, b|x]),
- ?line ne(P, [a, b, c], [a, b, x]),
- ?line ne(P, [a, b|c], [a, b|x]),
- ?line ne(P, [a, x|c], [a, b|c]),
- ?line ne(P, [a, b, c], [a, x, c]),
+ eq(P, [a, b, c], [a, b, c]),
+ ne(P, [a, b|c], [a, b|x]),
+ ne(P, [a, b, c], [a, b, x]),
+ ne(P, [a, b|c], [a, b|x]),
+ ne(P, [a, x|c], [a, b|c]),
+ ne(P, [a, b, c], [a, x, c]),
- ?line runner:finish(P),
+ runner:finish(P),
ok.
-tuples(suite) -> [];
tuples(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
+ P = start_matcher(Config),
- ?line ne(P, {}, {a, b}),
- ?line ne(P, {a, b}, {}),
- ?line ne(P, {a}, {a, b}),
- ?line ne(P, {a, b}, {a}),
+ ne(P, {}, {a, b}),
+ ne(P, {a, b}, {}),
+ ne(P, {a}, {a, b}),
+ ne(P, {a, b}, {a}),
- ?line eq(P, {}, {}),
+ eq(P, {}, {}),
- ?line eq(P, {a}, {a}),
- ?line ne(P, {a}, {b}),
+ eq(P, {a}, {a}),
+ ne(P, {a}, {b}),
- ?line eq(P, {1}, {1}),
- ?line ne(P, {1}, {2}),
+ eq(P, {1}, {1}),
+ ne(P, {1}, {2}),
- ?line eq(P, {a, b}, {a, b}),
- ?line ne(P, {x, b}, {a, b}),
+ eq(P, {a, b}, {a, b}),
+ ne(P, {x, b}, {a, b}),
- ?line ne(P, {error, x}, {error, y}),
- ?line ne(P, {error, {undefined, {subscriber, last}}},
- {error, {undefined, {subscriber, name}}}),
+ ne(P, {error, x}, {error, y}),
+ ne(P, {error, {undefined, {subscriber, last}}},
+ {error, {undefined, {subscriber, name}}}),
- ?line runner:finish(P),
+ runner:finish(P),
ok.
-references(suite) -> [];
references(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
- ?line Ref1 = make_ref(),
- ?line Ref2 = make_ref(),
-
- ?line eq(P, Ref1, Ref1),
- ?line eq(P, Ref2, Ref2),
- ?line ne(P, Ref1, Ref2),
- ?line ne(P, Ref2, Ref1),
-
- ?line runner:finish(P),
+ P = start_matcher(Config),
+ Ref1 = make_ref(),
+ Ref2 = make_ref(),
+
+ eq(P, Ref1, Ref1),
+ eq(P, Ref2, Ref2),
+ ne(P, Ref1, Ref2),
+ ne(P, Ref2, Ref1),
+
+ runner:finish(P),
ok.
-pids(suite) -> [];
pids(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
- ?line Pid1 = c:pid(0,1,2),
- ?line Pid2 = c:pid(0,1,3),
-
- ?line eq(P, self(), self()),
- ?line eq(P, Pid1, Pid1),
- ?line ne(P, Pid1, self()),
- ?line ne(P, Pid2, Pid1),
-
- ?line runner:finish(P),
+ P = start_matcher(Config),
+ Pid1 = c:pid(0,1,2),
+ Pid2 = c:pid(0,1,3),
+
+ eq(P, self(), self()),
+ eq(P, Pid1, Pid1),
+ ne(P, Pid1, self()),
+ ne(P, Pid2, Pid1),
+
+ runner:finish(P),
ok.
-ports(suite) -> [];
ports(Config) when is_list(Config) ->
case os:type() of
- vxworks ->
- {skipped,"not on vxworks, pucko"};
- _ ->
- ?line P = start_matcher(Config),
- ?line P2 = start_matcher(Config),
-
- ?line eq(P, P, P),
- ?line ne(P, P, P2),
-
- ?line runner:finish(P),
- ?line runner:finish(P2),
- ok
+ vxworks ->
+ {skipped,"not on vxworks, pucko"};
+ _ ->
+ P = start_matcher(Config),
+ P2 = start_matcher(Config),
+
+ eq(P, P, P),
+ ne(P, P, P2),
+
+ runner:finish(P),
+ runner:finish(P2),
+ ok
end.
-integers(suite) -> [];
integers(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
- ?line I1 = 123,
- ?line I2 = 12345,
- ?line I3 = -123,
- ?line I4 = 2234,
-
- ?line eq(P, I1, I1),
- ?line eq(P, I2, I2),
- ?line ne(P, I1, I2),
- ?line ne(P, I1, I3),
- ?line eq(P, I4, I4),
-
- ?line runner:finish(P),
+ P = start_matcher(Config),
+ I1 = 123,
+ I2 = 12345,
+ I3 = -123,
+ I4 = 2234,
+
+ eq(P, I1, I1),
+ eq(P, I2, I2),
+ ne(P, I1, I2),
+ ne(P, I1, I3),
+ eq(P, I4, I4),
+
+ runner:finish(P),
ok.
-floats(suite) -> [];
floats(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
- ?line F1 = 3.1414,
- ?line F2 = 3.1415,
- ?line F3 = 3.1416,
-
- ?line S1 = "string",
- ?line S2 = "string2",
-
- ?line eq(P, F1, F1),
- ?line eq(P, F2, F2),
- ?line ne(P, F1, F2),
- ?line ne(P, F3, F2),
-
- ?line eq(P, S2, S2),
- ?line ne(P, S1, S2),
-
- ?line runner:finish(P),
+ P = start_matcher(Config),
+ F1 = 3.1414,
+ F2 = 3.1415,
+ F3 = 3.1416,
+
+ S1 = "string",
+ S2 = "string2",
+
+ eq(P, F1, F1),
+ eq(P, F2, F2),
+ ne(P, F1, F2),
+ ne(P, F3, F2),
+
+ eq(P, S2, S2),
+ ne(P, S1, S2),
+
+ runner:finish(P),
ok.
-binaries(suite) -> [];
binaries(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
- ?line Bin1 = term_to_binary({kalle, 146015, {kungsgatan, 23}}),
- ?line Bin2 = term_to_binary(sune),
- ?line Bin3 = list_to_binary("sune"),
-
- ?line eq(P, Bin1, Bin1),
- ?line eq(P, Bin2, Bin2),
- ?line eq(P, Bin3, Bin3),
- ?line ne(P, Bin1, Bin2),
- ?line ne(P, Bin1, Bin3),
- ?line ne(P, Bin2, Bin3),
-
- ?line runner:finish(P),
+ P = start_matcher(Config),
+ Bin1 = term_to_binary({kalle, 146015, {kungsgatan, 23}}),
+ Bin2 = term_to_binary(sune),
+ Bin3 = list_to_binary("sune"),
+
+ eq(P, Bin1, Bin1),
+ eq(P, Bin2, Bin2),
+ eq(P, Bin3, Bin3),
+ ne(P, Bin1, Bin2),
+ ne(P, Bin1, Bin3),
+ ne(P, Bin2, Bin3),
+
+ runner:finish(P),
ok.
-
-strings(suite) -> [];
strings(Config) when is_list(Config) ->
- ?line P = start_matcher(Config),
+ P = start_matcher(Config),
- ?line S1 = "string",
- ?line S2 = "streng",
- ?line S3 = "String",
-
- ?line eq(P, S1, S1),
- ?line ne(P, S1, S2),
- ?line ne(P, S1, S3),
+ S1 = "string",
+ S2 = "streng",
+ S3 = "String",
- ?line runner:finish(P),
- ok.
+ eq(P, S1, S1),
+ ne(P, S1, S2),
+ ne(P, S1, S3),
+ runner:finish(P),
+ ok.
-bind(suite) -> [];
bind(Config) when is_list(Config) ->
- ?line P = start_bind(Config),
- ?line S = "[X,Y,Z]",
- ?line L1 = [301,302,302],
- ?line L2 = [65,66,67],
-
- ?line bind_ok(P, S, L1),
- ?line bind_ok(P, S, L2),
-
- ?line runner:finish(P),
+ P = start_bind(Config),
+ S = "[X,Y,Z]",
+ L1 = [301,302,302],
+ L2 = [65,66,67],
+
+ bind_ok(P, S, L1),
+ bind_ok(P, S, L2),
+
+ runner:finish(P),
ok.
start_bind(Config) ->
@@ -279,15 +251,12 @@ erl_bind(Port, Pattern, Term) ->
Port ! {self(), {command, [$b, Pattern, 0]}},
runner:send_term(Port, Term),
case runner:get_term(Port) of
- {term, 0} -> false;
- {term, 1} -> true
+ {term, 0} -> false;
+ {term, 1} -> true
end.
-
-
-
start_matcher(Config) ->
runner:start(?erl_match_server).
@@ -303,8 +272,6 @@ erl_match(Port, Pattern, Term) ->
runner:send_term(Port, Pattern),
runner:send_term(Port, Term),
case runner:get_term(Port) of
- {term, 0} -> false;
- {term, 1} -> true
+ {term, 0} -> false;
+ {term, 1} -> true
end.
-
-
diff --git a/lib/erl_interface/test/erl_match_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_match_SUITE_data/Makefile.first
index 867c59802f..459b5c14c2 100644
--- a/lib/erl_interface/test/erl_match_SUITE_data/Makefile.first
+++ b/lib/erl_interface/test/erl_match_SUITE_data/Makefile.first
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_match_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_match_SUITE_data/Makefile.src
index 5753a417fb..156214a269 100644
--- a/lib/erl_interface/test/erl_match_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/erl_match_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/erl_match_SUITE_data/match_test.c b/lib/erl_interface/test/erl_match_SUITE_data/match_test.c
index c508786ba8..d577417f5b 100644
--- a/lib/erl_interface/test/erl_match_SUITE_data/match_test.c
+++ b/lib/erl_interface/test/erl_match_SUITE_data/match_test.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/port_call_SUITE.erl b/lib/erl_interface/test/port_call_SUITE.erl
index b0f5ed4fe9..fb10bd895f 100644
--- a/lib/erl_interface/test/port_call_SUITE.erl
+++ b/lib/erl_interface/test/port_call_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,96 +32,78 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2, basic/1]).
-% Private exports
--include_lib("test_server/include/test_server.hrl").
+-export([all/0, suite/0, basic/1]).
+% Private exports
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
all() ->
-[basic].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+ [basic].
-basic(suite) -> [];
basic(Config) when is_list(Config) ->
case os:type() of
- {unix, linux} ->
- do_basic(Config);
- {unix, sunos} ->
- do_basic(Config);
- {win32,_} ->
- do_basic(Config);
- _ ->
- {skipped, "Dynamic linking and erl_interface not fully examined"
- " on this platform..."}
+ {unix, linux} ->
+ do_basic(Config);
+ {unix, sunos} ->
+ do_basic(Config);
+ {win32,_} ->
+ do_basic(Config);
+ _ ->
+ {skipped, "Dynamic linking and erl_interface not fully examined"
+ " on this platform..."}
end.
do_basic(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
- ?line erl_ddll:start(),
+ erl_ddll:start(),
%% Load the echo driver and verify that it was loaded.
{ok,L1,L2}=load_port_call_driver(Path),
%% Verify that the driver works.
- ?line Port = open_port({spawn, port_call_drv}, [eof]),
- ?line {hej, "hopp",4711,123445567436543653} =
- erlang:port_call(Port,{hej, "hopp",4711,123445567436543653}),
- ?line {hej, "hopp",4711,123445567436543653} =
- erlang:port_call(Port,0,{hej, "hopp",4711,123445567436543653}),
- ?line {[], a, [], b, c} =
- erlang:port_call(Port,1,{hej, "hopp",4711,123445567436543653}),
- ?line {return, {[], a, [], b, c}} =
- erlang:port_call(Port,2,{[], a, [], b, c}),
- ?line List = lists:duplicate(200,5),
- ?line {return, List} = erlang:port_call(Port,2,List),
- ?line {'EXIT',{badarg,_}} = (catch erlang:port_call(Port,4711,[])),
- ?line {'EXIT',{badarg,_}} = (catch erlang:port_call(sune,2,[])),
- ?line register(gunnar,Port),
- ?line {return, List} = erlang:port_call(gunnar,2,List),
- ?line {return, a} = erlang:port_call(gunnar,2,a),
- ?line erlang:port_close(Port),
+ Port = open_port({spawn, port_call_drv}, [eof]),
+ {hej, "hopp",4711,123445567436543653} =
+ erlang:port_call(Port,{hej, "hopp",4711,123445567436543653}),
+ {hej, "hopp",4711,123445567436543653} =
+ erlang:port_call(Port,0,{hej, "hopp",4711,123445567436543653}),
+ {[], a, [], b, c} =
+ erlang:port_call(Port,1,{hej, "hopp",4711,123445567436543653}),
+ {return, {[], a, [], b, c}} =
+ erlang:port_call(Port,2,{[], a, [], b, c}),
+ List = lists:duplicate(200,5),
+ {return, List} = erlang:port_call(Port,2,List),
+ {'EXIT',{badarg,_}} = (catch erlang:port_call(Port,4711,[])),
+ {'EXIT',{badarg,_}} = (catch erlang:port_call(sune,2,[])),
+ register(gunnar,Port),
+ {return, List} = erlang:port_call(gunnar,2,List),
+ {return, a} = erlang:port_call(gunnar,2,a),
+ erlang:port_close(Port),
%% Unload the driver and verify that it was unloaded.
ok=unload_port_call_driver(L1,L2),
- ?line {error, {already_started, _}} = erl_ddll:start(),
- ?line ok = erl_ddll:stop(),
-
- ?line test_server:timetrap_cancel(Dog),
+ {error, {already_started, _}} = erl_ddll:start(),
+ ok = erl_ddll:stop(),
ok.
load_port_call_driver(Path) ->
- ?line {ok, L1} = erl_ddll:loaded_drivers(),
- ?line ok = erl_ddll:load_driver(Path, port_call_drv),
- ?line {ok, L2} = erl_ddll:loaded_drivers(),
- ?line ["port_call_drv"] = ordsets:to_list(ordsets:subtract(ordsets:from_list(L2),
- ordsets:from_list(L1))),
+ {ok, L1} = erl_ddll:loaded_drivers(),
+ ok = erl_ddll:load_driver(Path, port_call_drv),
+ {ok, L2} = erl_ddll:loaded_drivers(),
+ ["port_call_drv"] = ordsets:to_list(ordsets:subtract(ordsets:from_list(L2),
+ ordsets:from_list(L1))),
{ok,L1,L2}.
unload_port_call_driver(L1,L2) ->
- ?line {ok, L2} = erl_ddll:loaded_drivers(),
- ?line ok = erl_ddll:unload_driver(port_call_drv),
- ?line {ok, L3} = erl_ddll:loaded_drivers(),
- ?line [] = ordsets:to_list(ordsets:subtract(ordsets:from_list(L3),
- ordsets:from_list(L1))),
+ {ok, L2} = erl_ddll:loaded_drivers(),
+ ok = erl_ddll:unload_driver(port_call_drv),
+ {ok, L3} = erl_ddll:loaded_drivers(),
+ [] = ordsets:to_list(ordsets:subtract(ordsets:from_list(L3),
+ ordsets:from_list(L1))),
ok.
-
diff --git a/lib/erl_interface/test/port_call_SUITE_data/Makefile.src b/lib/erl_interface/test/port_call_SUITE_data/Makefile.src
index 12b9fcae76..0f97ce9f70 100644
--- a/lib/erl_interface/test/port_call_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/port_call_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2011. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c b/lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c
index ac23a650c1..4617cb0316 100644
--- a/lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c
+++ b/lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/erl_interface/test/runner.erl b/lib/erl_interface/test/runner.erl
index ae2598abf8..1084eec2a3 100644
--- a/lib/erl_interface/test/runner.erl
+++ b/lib/erl_interface/test/runner.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@
start/1, send_term/2, finish/1, send_eot/1, recv_eot/1,
get_term/1, get_term/2]).
--define(default_timeout, test_server:seconds(5)).
+-define(default_timeout, 5000).
%% Executes a test case in a C program.
%%
@@ -45,7 +45,7 @@ test(Tc, Timeout) ->
io:format("In this test case, a success/failure result was"),
io:format("expected from the C program.\n"),
io:format("Received: ~p", [Other]),
- test_server:fail()
+ ct:fail(badresult)
end.
%% Executes a test case in a C program. Returns the port.
@@ -55,7 +55,7 @@ test(Tc, Timeout) ->
%% Returns: {ok, Port}
start({Prog, Tc}) when is_list(Prog), is_integer(Tc) ->
- Port = open_port({spawn, Prog}, [{packet, 4}]),
+ Port = open_port({spawn, Prog}, [{packet, 4}, exit_status]),
Command = [Tc div 256, Tc rem 256],
Port ! {self(), {command, Command}},
Port.
@@ -80,7 +80,7 @@ send_eot(Port) when is_port(Port) ->
Port ! {self(), {command, [$e]}}.
%% Waits for an 'eot' indication from the C program.
-%% Either returns 'ok' or invokes test_server:fail().
+%% Either returns 'ok' or invokes ct:fail(badresult).
recv_eot(Port) when is_port(Port) ->
case get_term(Port) of
@@ -90,12 +90,12 @@ recv_eot(Port) when is_port(Port) ->
io:format("Error finishing test case. Expected eof from"),
io:format("C program, but got:"),
io:format("~p", [Other]),
- test_server:fail()
+ ct:fail(badresult)
end.
%% Reads a term from the C program.
%%
-%% Returns: {term, Term}|eot|'NULL' or calls test_server:fail/1,2.
+%% Returns: {term, Term}|eot|'NULL' or calls ct:fail/1,2.
get_term(Port) ->
get_term(Port, ?default_timeout).
@@ -105,9 +105,9 @@ get_term(Port, Timeout) ->
[$b|Bytes] ->
{bytes, Bytes};
[$f] ->
- test_server:fail();
+ ct:fail(failure);
[$f|Reason] ->
- test_server:fail(Reason);
+ ct:fail(Reason);
[$t|Term] ->
{term, binary_to_term(list_to_binary(Term))};
[$N] ->
@@ -119,13 +119,15 @@ get_term(Port, Timeout) ->
get_term(Port, Timeout);
Other ->
io:format("Garbage received from C program: ~p", [Other]),
- test_server:fail("Illegal response from C program")
+ ct:fail("Illegal response from C program")
end.
get_reply(Port, Timeout) when is_port(Port) ->
receive
{Port, {data, Reply}} ->
- Reply
+ Reply;
+ Fail when element(1, Fail) == Port ->
+ ct:fail("Got unexpected message from port: ~p",[Fail])
after Timeout ->
- test_server:fail("No response from C program")
+ ct:fail("No response from C program")
end.
diff --git a/lib/erl_interface/vsn.mk b/lib/erl_interface/vsn.mk
index 56dbdbac9f..33705d1e8b 100644
--- a/lib/erl_interface/vsn.mk
+++ b/lib/erl_interface/vsn.mk
@@ -1,2 +1,2 @@
-EI_VSN = 3.8.2
+EI_VSN = 3.9
ERL_INTERFACE_VSN = $(EI_VSN)
diff --git a/lib/et/Makefile b/lib/et/Makefile
index b93ebef902..f0bb7be211 100644
--- a/lib/et/Makefile
+++ b/lib/et/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2009. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/doc/src/Makefile b/lib/et/doc/src/Makefile
index 532e28f5d3..0257a8f817 100644
--- a/lib/et/doc/src/Makefile
+++ b/lib/et/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2012. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/doc/src/book.xml b/lib/et/doc/src/book.xml
index d3fef1752c..5dddb44454 100644
--- a/lib/et/doc/src/book.xml
+++ b/lib/et/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/et/doc/src/et.xml b/lib/et/doc/src/et.xml
index 0ba858cc08..3009b559e1 100644
--- a/lib/et/doc/src/et.xml
+++ b/lib/et/doc/src/et.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/et/doc/src/et_collector.xml b/lib/et/doc/src/et_collector.xml
index e879a119a5..6a85b81ec2 100644
--- a/lib/et/doc/src/et_collector.xml
+++ b/lib/et/doc/src/et_collector.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/et/doc/src/et_desc.xmlsrc b/lib/et/doc/src/et_desc.xmlsrc
index cbb41f700c..29e0ab1fe3 100644
--- a/lib/et/doc/src/et_desc.xmlsrc
+++ b/lib/et/doc/src/et_desc.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -55,13 +55,12 @@
<p></p>
<code type="none"><![CDATA[
- % erl -pa et/examples
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
+% erl -pa et/examples
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
- Eshell V5.7.4 (abort with ^G)
- 1> {ok, Viewer} = et_viewer:start([]).
- {ok,<0.40.0>}]]></code>
+Eshell V5.7.4 (abort with ^G)
+1> {ok, Viewer} = et_viewer:start([]).
+{ok,<0.40.0>}]]></code>
<p>A <c>Viewer</c> gets trace <c>Events</c> from its
<c>Collector</c> by polling it regularly for more <c>Events</c> to
@@ -69,40 +68,38 @@
<c>Collector</c> with <c>et_collector:report_event/6</c>:</p>
<code type="none"><![CDATA[
- 2> Collector = et_viewer:get_collector_pid(Viewer).
- <0.39.0>
- 3> et_collector:report_event(Collector, 60, my_shell, mnesia_tm, start_outer,
- 3> "Start outer transaction"),
- 3> et_collector:report_event(Collector, 40, mnesia_tm, my_shell, new_tid,
- 3> "New transaction id is 4711"),
- 3> et_collector:report_event(Collector, 20, my_shell, mnesia_locker, try_write_lock,
- 3> "Acquire write lock for {my_tab, key}"),
- 3> et_collector:report_event(Collector, 10, mnesia_locker, my_shell, granted,
- 3> "You got the write lock for {my_tab, key}"),
- 3> et_collector:report_event(Collector, 60, my_shell, do_commit,
- 3> "Perform transaction commit"),
- 3> et_collector:report_event(Collector, 40, my_shell, mnesia_locker, release_tid,
- 3> "Release all locks for transaction 4711"),
- 3> et_collector:report_event(Collector, 60, my_shell, mnesia_tm, delete_transaction,
- 3> "End of outer transaction"),
- 3> et_collector:report_event(Collector, 20, my_shell, end_outer,
- 3> "Transaction returned {atomic, ok}").
- {ok,{table_handle,<0.39.0>,16402,trace_ts,
- #Fun<et_collector.0.62831470>}}]]></code>
+2> Collector = et_viewer:get_collector_pid(Viewer).
+<0.39.0>
+3> et_collector:report_event(Collector, 60, my_shell, mnesia_tm, start_outer,
+3> "Start outer transaction"),
+3> et_collector:report_event(Collector, 40, mnesia_tm, my_shell, new_tid,
+3> "New transaction id is 4711"),
+3> et_collector:report_event(Collector, 20, my_shell, mnesia_locker, try_write_lock,
+3> "Acquire write lock for {my_tab, key}"),
+3> et_collector:report_event(Collector, 10, mnesia_locker, my_shell, granted,
+3> "You got the write lock for {my_tab, key}"),
+3> et_collector:report_event(Collector, 60, my_shell, do_commit,
+3> "Perform transaction commit"),
+3> et_collector:report_event(Collector, 40, my_shell, mnesia_locker, release_tid,
+3> "Release all locks for transaction 4711"),
+3> et_collector:report_event(Collector, 60, my_shell, mnesia_tm, delete_transaction,
+3> "End of outer transaction"),
+3> et_collector:report_event(Collector, 20, my_shell, end_outer,
+3> "Transaction returned {atomic, ok}").
+{ok,{table_handle,<0.39.0>,16402,trace_ts,
+ #Fun<et_collector.0.62831470>}}]]></code>
<p>This actually is a simulation of the process <c>Events</c>
caused by a <c>Mnesia</c> transaction that writes a record in a local
table:</p>
<code type="none"><![CDATA[
- mnesia:transaction(fun() -> mnesia:write({my_tab, key, val}) end).]]></code>
+mnesia:transaction(fun() -> mnesia:write({my_tab, key, val}) end).]]></code>
<p>At this stage when we have a couple of <c>Events</c>, it is time to
show how it looks like in the graphical interface of
<c>et_viewer</c>:</p>
- <p></p>
-
<image file="sim_trans.png">
<icaption>A simulated Mnesia transaction which writes one record</icaption>
</image>
@@ -144,11 +141,11 @@
<p></p>
<code type="none"><![CDATA[
- filter(TraceData) -> false | true | {true, NewEvent}
+filter(TraceData) -> false | true | {true, NewEvent}
- TraceData = Event | erlang_trace_data()
- Event = #event{}
- NewEvent = #event{}]]></code>
+TraceData = Event | erlang_trace_data()
+Event = #event{}
+NewEvent = #event{}]]></code>
<p>The interface of the filter function is the same as the the
filter functions for the good old <c>lists:filtermap/2</c>. If the filter
@@ -204,10 +201,10 @@
<p></p>
<code type="none"><![CDATA[
- 4> Fun = fun(E) -> et_demo:mgr_actors(E) end.
- #Fun<erl_eval.6.13229925>
- 5> et_collector:dict_insert(Collector, {filter, mgr_actors}, Fun).
- ok]]></code>
+4> Fun = fun(E) -> et_demo:mgr_actors(E) end.
+#Fun<erl_eval.6.13229925>
+5> et_collector:dict_insert(Collector, {filter, mgr_actors}, Fun).
+ok]]></code>
<p>you will see that the <c>Filter</c> menu in all viewers have
got a new entry called <c>mgr_actors</c>. Select it, and a new
@@ -228,21 +225,16 @@
<c>Contents Viewer</c> window to pop up, showing the <c>Event</c>
in the <c>mgr_actors</c> view:</p>
- <p></p>
-
<image file="sim_trans_contents_viewer_mgr_actors.png">
- <icaption>The trace <c>Event</c> in the mgr_actors view</icaption>
+ <icaption>The trace Event in the mgr_actors view</icaption>
</image>
<p>Select the <c>all</c> entry in the <c>Filters</c> menu
and a new <c>Contents Viewer window</c> will pop up showing the
same trace <c>Event</c> in the collectors view:</p>
- <p></p>
-
<image file="sim_trans_contents_viewer_collector.png">
- <icaption>The same trace <c>Event</c> in the collectors
- view</icaption>
+ <icaption>The same trace Event in the collectors view</icaption>
</image>
</section>
@@ -311,7 +303,7 @@
<c>et_collector</c> or <c>et_viewer</c> in order to activate the
global tracing. There is no restriction on how many concurrent
(anonymous) collectors you can have, but you can only have one
- <b>global</b> <c>Collector</c> as its name is registered in
+ <em>global</em> <c>Collector</c> as its name is registered in
<c>global</c>.</p>
<p>In order to further simplify the tracing, you can make use of
diff --git a/lib/et/doc/src/et_examples.xmlsrc b/lib/et/doc/src/et_examples.xmlsrc
index 42e484a241..f4d94f7cb0 100644
--- a/lib/et/doc/src/et_examples.xmlsrc
+++ b/lib/et/doc/src/et_examples.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -55,34 +55,32 @@
<p></p>
<code type="none"><![CDATA[
- mnesia:transaction(fun() -> mnesia:write({my_tab, key, val}) end).]]></code>
+mnesia:transaction(fun() -> mnesia:write({my_tab, key, val}) end).]]></code>
<p>And the viewer window will look like:</p>
<p></p>
<code type="none"><![CDATA[
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
- Eshell V5.7.4 (abort with ^G)
- 1> {ok, Viewer} = et_viewer:start([]).
- {ok,<0.40.0>;}
- 2> et_demo:sim_trans().
- {ok,{table_handle,<0.45.0>,24596,trace_ts,
- #Fun<et_collector.0.62831470>}}]]></code>
+Eshell V5.7.4 (abort with ^G)
+1> {ok, Viewer} = et_viewer:start([]).
+{ok,<0.40.0>;}
+2> et_demo:sim_trans().
+{ok,{table_handle,<0.45.0>,24596,trace_ts,
+ #Fun<et_collector.0.62831470>}}]]></code>
<p></p>
<image file="sim_trans.png">
- <icaption>A simulated <c>Mnesia</c> transaction which writes one
- record</icaption>
+ <icaption>A simulated Mnesia transaction which writes one record</icaption>
</image>
</section>
<section>
- <title>Some convenient functions used in the <c>Mnesia</c> transaction
+ <title>Some convenient functions used in the Mnesia transaction
example</title>
<p>The <c>module_as_actor</c> filter converts the <c>Event
@@ -173,21 +171,19 @@
<p></p>
<code type="none"><![CDATA[
- erl -pa ../examples
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
+erl -pa ../examples
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
+ [async-threads:0] [kernel-poll:false]
- Eshell V5.7.4 (abort with ^G)
- 1> et_demo:live_trans().
- {atomic,ok}]]></code>
+Eshell V5.7.4 (abort with ^G)
+1> et_demo:live_trans().
+{atomic,ok}]]></code>
<p>Please, explore the different filters in order to see how the traced
transaction can be seen from different point of views:</p>
- <p></p>
-
<image file="live_trans.png">
- <icaption>A real <c>Mnesia</c> transaction which writes one record</icaption>
+ <icaption>A real Mnesia transaction which writes one record</icaption>
</image>
</section>
@@ -215,20 +211,20 @@
<p></p>
<code type="none"><![CDATA[
- -module(megaco_filter).
- -export([start/0]).
-
- start() ->
- Options =
- [{event_order, event_ts},
- {scale, 3},
- {max_actors, infinity},
- {trace_pattern, {megaco, max}},
- {trace_global, true},
- {dict_insert, {filter, megaco_filter}, fun filter/1},
- {active_filter, megaco_filter},
- {title, "Megaco tracer - Erlang/OTP"}],
- et_viewer:start(Options).]]></code>
+-module(megaco_filter).
+-export([start/0]).
+
+start() ->
+ Options =
+ [{event_order, event_ts},
+ {scale, 3},
+ {max_actors, infinity},
+ {trace_pattern, {megaco, max}},
+ {trace_global, true},
+ {dict_insert, {filter, megaco_filter}, fun filter/1},
+ {active_filter, megaco_filter},
+ {title, "Megaco tracer - Erlang/OTP"}],
+ et_viewer:start(Options).]]></code>
<p>First we start an Erlang node with a global <c>Collector</c>
and its <c>Viewer</c>.</p>
@@ -236,13 +232,12 @@
<p></p>
<code type="none"><![CDATA[
- erl -sname observer
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
+erl -sname observer
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
- Eshell V5.7.4 (abort with ^G)
- (observer@falco)1> megaco_filter:start().
- {ok,<0.48.0>}]]></code>
+Eshell V5.7.4 (abort with ^G)
+(observer@falco)1> megaco_filter:start().
+{ok,<0.48.0>}]]></code>
<p>Secondly we start another Erlang node which we connect the
observer node, before we start the application that we want to
@@ -253,28 +248,27 @@
<p></p>
<code type="none"><![CDATA[
- erl -sname mgc -pa ../../megaco/examples/simple
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
-
- Eshell V5.7.4 (abort with ^G)
- (mgc@falco)1> net:ping(observer@falco).
- pong
- (mgc@falco)2> megaco:start().
- ok
- (mgc@falco)3> megaco_simple_mgc:start().
- {ok,[{ok,2944,
- {megaco_receive_handle,{deviceName,"controller"},
- megaco_pretty_text_encoder,[],megaco_tcp,dynamic}},
- {ok,2944,
- {megaco_receive_handle,{deviceName,"controller"},
- megaco_pretty_text_encoder,[],megaco_udp,dynamic}},
- {ok,2945,
- {megaco_receive_handle,{deviceName,"controller"},
- megaco_binary_encoder,[],megaco_tcp,dynamic}},
- {ok,2945,
- {megaco_receive_handle,{deviceName,"controller"},
- megaco_binary_encoder,[],megaco_udp,dynamic}}]}]]></code>
+erl -sname mgc -pa ../../megaco/examples/simple
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
+
+Eshell V5.7.4 (abort with ^G)
+(mgc@falco)1> net:ping(observer@falco).
+pong
+(mgc@falco)2> megaco:start().
+ok
+(mgc@falco)3> megaco_simple_mgc:start().
+{ok,[{ok,2944,
+ {megaco_receive_handle,{deviceName,"controller"},
+ megaco_pretty_text_encoder,[],megaco_tcp,dynamic}},
+ {ok,2944,
+ {megaco_receive_handle,{deviceName,"controller"},
+ megaco_pretty_text_encoder,[],megaco_udp,dynamic}},
+ {ok,2945,
+ {megaco_receive_handle,{deviceName,"controller"},
+ megaco_binary_encoder,[],megaco_tcp,dynamic}},
+ {ok,2945,
+ {megaco_receive_handle,{deviceName,"controller"},
+ megaco_binary_encoder,[],megaco_udp,dynamic}}]}]]></code>
<p>And finally we start an Erlang node for the Media Gateways and
connect to the observer node. Each Media Gateway connects to the
@@ -288,94 +282,87 @@
<p></p>
<code type="none"><![CDATA[
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
-
- Eshell V5.7.4 (abort with ^G)
- (mg@falco)1> net:ping(observer@falco).
- pong
- (mg@falco)2> megaco_simple_mg:start().
- [{{deviceName,"gateway_tt"},
- {error,{start_user,megaco_not_started}}},
- {{deviceName,"gateway_tb"},
- {error,{start_user,megaco_not_started}}},
- {{deviceName,"gateway_ut"},
- {error,{start_user,megaco_not_started}}},
- {{deviceName,"gateway_ub"},
- {error,{start_user,megaco_not_started}}}]
- (mg@falco)3> megaco:start().
- ok
- (mg@falco)4> megaco_simple_mg:start().
- [{{deviceName,"gateway_tt"},
- {1,
- {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
- [{serviceChangeReply,
- {'ServiceChangeReply',
- [{megaco_term_id,false,["root"]}],
- {serviceChangeResParms,
- {'ServiceChangeResParm',
- {deviceName,"controller"},
- asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
- asn1_NOVALUE}}}}]}]}}},
- {{deviceName,"gateway_tb"},
- {1,
- {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
- [{serviceChangeReply,
- {'ServiceChangeReply',
- [{megaco_term_id,false,["root"]}],
- {serviceChangeResParms,
- {'ServiceChangeResParm',
- {deviceName,"controller"},
- asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
- asn1_NOVALUE}}}}]}]}}},
- {{deviceName,"gateway_ut"},
- {1,
- {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
- [{serviceChangeReply,
- {'ServiceChangeReply',
- [{megaco_term_id,false,["root"]}],
- {serviceChangeResParms,
- {'ServiceChangeResParm',
- {deviceName,"controller"},
- asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
- asn1_NOVALUE}}}}]}]}}},
- {{deviceName,"gateway_ub"},
- {1,
- {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
- [{serviceChangeReply,
- {'ServiceChangeReply',
- [{megaco_term_id,false,["root"]}],
- {serviceChangeResParms,
- {'ServiceChangeResParm',
- {deviceName,"controller"},
- asn1_NOVALUE,asn1_NOVALUE,
- asn1_NOVALUE,...}}}}]}]}}}]]]></code>
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
+
+Eshell V5.7.4 (abort with ^G)
+(mg@falco)1> net:ping(observer@falco).
+pong
+(mg@falco)2> megaco_simple_mg:start().
+[{{deviceName,"gateway_tt"},
+ {error,{start_user,megaco_not_started}}},
+ {{deviceName,"gateway_tb"},
+ {error,{start_user,megaco_not_started}}},
+ {{deviceName,"gateway_ut"},
+ {error,{start_user,megaco_not_started}}},
+ {{deviceName,"gateway_ub"},
+ {error,{start_user,megaco_not_started}}}]
+(mg@falco)3> megaco:start().
+ok
+(mg@falco)4> megaco_simple_mg:start().
+[{{deviceName,"gateway_tt"},
+ {1,
+ {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
+ [{serviceChangeReply,
+ {'ServiceChangeReply',
+ [{megaco_term_id,false,["root"]}],
+ {serviceChangeResParms,
+ {'ServiceChangeResParm',
+ {deviceName,"controller"},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE}}}}]}]}}},
+ {{deviceName,"gateway_tb"},
+ {1,
+ {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
+ [{serviceChangeReply,
+ {'ServiceChangeReply',
+ [{megaco_term_id,false,["root"]}],
+ {serviceChangeResParms,
+ {'ServiceChangeResParm',
+ {deviceName,"controller"},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE}}}}]}]}}},
+ {{deviceName,"gateway_ut"},
+ {1,
+ {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
+ [{serviceChangeReply,
+ {'ServiceChangeReply',
+ [{megaco_term_id,false,["root"]}],
+ {serviceChangeResParms,
+ {'ServiceChangeResParm',
+ {deviceName,"controller"},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE}}}}]}]}}},
+ {{deviceName,"gateway_ub"},
+ {1,
+ {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
+ [{serviceChangeReply,
+ {'ServiceChangeReply',
+ [{megaco_term_id,false,["root"]}],
+ {serviceChangeResParms,
+ {'ServiceChangeResParm',
+ {deviceName,"controller"},
+ asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE,...}}}}]}]}}}]]]></code>
<p>The <c>Megaco</c> adopted viewer looks like this, when we have clicked
- on the <b>[gateway_tt]</b> actor name in order to only display the events
+ on the <em>[gateway_tt]</em> actor name in order to only display the events
regarding that actor:</p>
- <p></p>
-
<image file="megaco_tracer.png">
<icaption>The viewer adopted for Megaco</icaption>
</image>
<p>A pretty printed <c>Megaco</c> message looks like this:</p>
- <p></p>
-
<image file="megaco_filter.png">
- <icaption>A textual <c>Megaco</c> message</icaption>
+ <icaption>A textual Megaco message</icaption>
</image>
<p>And the corresponding internal form for the same <c>Megaco</c> message
looks like this:</p>
- <p></p>
-
<image file="megaco_collector.png">
- <icaption>The internal form of a <c>Megaco</c> message</icaption>
+ <icaption>The internal form of a Megaco message</icaption>
</image>
</section>
diff --git a/lib/et/doc/src/et_intro.xml b/lib/et/doc/src/et_intro.xml
index cfc879e43d..729f95647d 100644
--- a/lib/et/doc/src/et_intro.xml
+++ b/lib/et/doc/src/et_intro.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/et/doc/src/et_selector.xml b/lib/et/doc/src/et_selector.xml
index af62401287..441a4dd278 100644
--- a/lib/et/doc/src/et_selector.xml
+++ b/lib/et/doc/src/et_selector.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/et/doc/src/et_tutorial.xmlsrc b/lib/et/doc/src/et_tutorial.xmlsrc
index 6e3b327ee7..b6e1ca141c 100644
--- a/lib/et/doc/src/et_tutorial.xmlsrc
+++ b/lib/et/doc/src/et_tutorial.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2009</year><year>2013</year>
+ <year>2009</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -75,12 +75,10 @@
<codeinclude file="../../examples/et_display_demo.erl" tag="%module" type="erl"></codeinclude>
<p>When you run the <c>et_display_demo:test().</c> function in the
- example above, the <c>Viewer</c> window will look like this:</p>.
-
- <p></p>
+ example above, the <c>Viewer</c> window will look like this:</p>
<image file="coffee_order.png">
- <icaption>Screenshot of the <c>Viewer</c> window</icaption>
+ <icaption>Screenshot of the Viewer window</icaption>
</image>
</section>
@@ -262,14 +260,11 @@
</list>
<p>When you run the <c>et_trace_demo:test()</c> function above, the
- <c>Viewer</c> window will look like this screenshot:</p>.
+ <c>Viewer</c> window will look like this screenshot:</p>
- <p></p>
-
<image file="coffee_order.png">
- <icaption>Screenshot of the <c>Viewer</c> window</icaption>
+ <icaption>Screenshot of the Viewer window</icaption>
</image>
</section>
-
</chapter>
diff --git a/lib/et/doc/src/et_viewer.xml b/lib/et/doc/src/et_viewer.xml
index c7917b41ce..e0b39636e9 100644
--- a/lib/et/doc/src/et_viewer.xml
+++ b/lib/et/doc/src/et_viewer.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/et/doc/src/files.mk b/lib/et/doc/src/files.mk
index c8721c61fe..e0ea9b0b76 100644
--- a/lib/et/doc/src/files.mk
+++ b/lib/et/doc/src/files.mk
@@ -1,7 +1,7 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2010. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/doc/src/notes.xml b/lib/et/doc/src/notes.xml
index 6599025d52..5300d2e4ef 100644
--- a/lib/et/doc/src/notes.xml
+++ b/lib/et/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -37,6 +37,22 @@
one section in this document. The title of each section is the
version number of <c>Event Tracer (ET)</c>.</p>
+<section><title>ET 1.6</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Update selector to utilize new garbage collection trace
+ tags.</p>
+ <p>
+ Own Id: OTP-13545</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>ET 1.5.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/et/doc/src/part.xml b/lib/et/doc/src/part.xml
index d8e5e76685..a282dc2c16 100644
--- a/lib/et/doc/src/part.xml
+++ b/lib/et/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/et/doc/src/ref_man.xml b/lib/et/doc/src/ref_man.xml
index 68ed5a8756..bf131bef85 100644
--- a/lib/et/doc/src/ref_man.xml
+++ b/lib/et/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/et/examples/Makefile b/lib/et/examples/Makefile
index 215ce6e4cd..fe6811e45d 100644
--- a/lib/et/examples/Makefile
+++ b/lib/et/examples/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2012. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/examples/et_demo.erl b/lib/et/examples/et_demo.erl
index e2a604b451..b0fb29e7c6 100644
--- a/lib/et/examples/et_demo.erl
+++ b/lib/et/examples/et_demo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/include/et.hrl b/lib/et/include/et.hrl
index 450044df42..75e82a5c85 100644
--- a/lib/et/include/et.hrl
+++ b/lib/et/include/et.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/src/Makefile b/lib/et/src/Makefile
index 461a52d480..b6347d8b6d 100644
--- a/lib/et/src/Makefile
+++ b/lib/et/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2013. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/src/et.app.src b/lib/et/src/et.app.src
index ddf86beea3..7a5928d6ab 100644
--- a/lib/et/src/et.app.src
+++ b/lib/et/src/et.app.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -33,6 +33,6 @@
{registered, [et_collector]},
{applications, [stdlib, kernel]},
{env, []},
- {runtime_dependencies, ["wx-1.2","stdlib-2.0","runtime_tools-1.8.14",
- "kernel-3.0","erts-6.0"]}
+ {runtime_dependencies, ["wx-1.2","stdlib-2.0","runtime_tools-1.10",
+ "kernel-3.0","erts-8.0"]}
]}.
diff --git a/lib/et/src/et.appup.src b/lib/et/src/et.appup.src
index 0fbde99762..491c039ffe 100644
--- a/lib/et/src/et.appup.src
+++ b/lib/et/src/et.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/src/et.erl b/lib/et/src/et.erl
index d38fe917c8..91c17ffdc9 100644
--- a/lib/et/src/et.erl
+++ b/lib/et/src/et.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/src/et_collector.erl b/lib/et/src/et_collector.erl
index 56e59461b2..aba90b0be1 100644
--- a/lib/et/src/et_collector.erl
+++ b/lib/et/src/et_collector.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,8 +27,7 @@
-behaviour(gen_server).
%% External exports
--export([
- start_link/1,
+-export([start_link/1,
stop/1,
report/2,
@@ -55,8 +54,7 @@
dict_delete/2,
dict_lookup/2,
dict_match/2,
- multicast/2
- ]).
+ multicast/2]).
%% Internal export
-export([monitor_trace_port/2]).
@@ -258,7 +256,7 @@ parse_opt(BadList, _S, _Dict, _Clients) ->
{error, {bad_option_list, BadList}}.
start_clients(CollectorPid, [{Type, Parameters} | T]) ->
- start_trace_client(CollectorPid, Type, Parameters),
+ _ = start_trace_client(CollectorPid, Type, Parameters),
start_clients(CollectorPid, T);
start_clients(CollectorPid, []) ->
{ok, CollectorPid}.
@@ -892,7 +890,7 @@ init([InitialS, Dict]) ->
process_flag(trap_exit, true),
case InitialS#state.parent_pid of
undefined ->
- ignore;
+ ok;
Pid when is_pid(Pid) ->
link(Pid)
end,
@@ -914,7 +912,7 @@ init_global(S) ->
Spec = trace_spec_wrapper(EventFun, EndFun, {ok, self()}),
dbg:tracer(process, Spec),
et_selector:change_pattern(S#state.trace_pattern),
- net_kernel:monitor_nodes(true),
+ ok = net_kernel:monitor_nodes(true),
lists:foreach(fun(N) -> self() ! {nodeup, N} end, nodes()),
S#state{trace_nodes = [node()]};
false ->
@@ -1001,7 +999,7 @@ handle_call({save_event_file, FileName, Options}, _From, S) ->
%% insert() ->
%% case S2#state.file of
%% undefined ->
- %% ignore;
+ %% ok;
%% F ->
%% Fd = F#file.desc,
%% ok = disk_log:log(Fd, Event)
@@ -1010,7 +1008,7 @@ handle_call({save_event_file, FileName, Options}, _From, S) ->
Fun = fun({_, E}, A) -> ok = disk_log:log(Fd, E), A end,
Tab = S#state.event_tab,
Reply = tab_iterate(Fun, Tab, ets:first(Tab), ok),
- disk_log:close(Fd),
+ ok = disk_log:close(Fd),
{Reply, S}
%% all ->
%% Reply = tab_iterate(WriteFun, Tab, ok),
@@ -1033,7 +1031,7 @@ handle_call({save_event_file, FileName, Options}, _From, S) ->
handle_call({change_pattern, Pattern}, _From, S) ->
Ns = S#state.trace_nodes,
- rpc:multicall(Ns, et_selector, change_pattern, [Pattern]),
+ {_,[]} = rpc:multicall(Ns, et_selector, change_pattern, [Pattern]),
Reply = {old_pattern, S#state.trace_pattern},
S2 = S#state{trace_pattern = Pattern},
reply(Reply, S2);
@@ -1045,8 +1043,9 @@ handle_call(clear_table, _From, S) ->
handle_call(stop, _From, S) ->
do_multicast(S#state.subscribers, close),
case S#state.trace_global of
- true -> rpc:multicall(S#state.trace_nodes, dbg, stop_clear, []);
- false -> ignore
+ true -> {_,[]} = rpc:multicall(S#state.trace_nodes, dbg, stop_clear, []),
+ ok;
+ false -> ok
end,
{stop, shutdown, ok, S};
handle_call(Request, From, S) ->
@@ -1239,8 +1238,8 @@ tab_iterate(Fun, Tab, Key, Acc) ->
file_open(F) ->
Fd = make_ref(),
case F#file.file_opt of
- write -> file:rename(F#file.name, F#file.name ++ ".OLD");
- append -> ignore
+ write -> ok = file:rename(F#file.name, F#file.name ++ ".OLD");
+ append -> ok
end,
Args = [{file, F#file.name}, {name, Fd},
{repair, true}, {mode, read_write}],
@@ -1278,7 +1277,7 @@ do_multicast([], _Msg) ->
opt_unlink(Pid) ->
if
Pid =:= undefined ->
- ignore;
+ ok;
true ->
unlink(Pid)
end.
diff --git a/lib/et/src/et_internal.hrl b/lib/et/src/et_internal.hrl
index 01c7303d0b..fdcd6f3dcc 100644
--- a/lib/et/src/et_internal.hrl
+++ b/lib/et/src/et_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/src/et_selector.erl b/lib/et/src/et_selector.erl
index 708a0b4cd8..a0297c21d1 100644
--- a/lib/et/src/et_selector.erl
+++ b/lib/et/src/et_selector.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,11 +23,9 @@
-module(et_selector).
--export([
- make_pattern/1,
+-export([make_pattern/1,
change_pattern/1,
- parse_event/2
- ]).
+ parse_event/2]).
-compile([{nowarn_deprecated_function,[{erlang,now,0}]}]).
@@ -535,7 +533,7 @@ parse_event(Mod, Trace, ParsedTS, ReportedTS, From, Label, Contents) ->
{from, From},
{to, From},
{mfa, MFA}]}}; % MFA | 0
- gc_start ->
+ gc_minor_start ->
DetailLevel = 80,
[GcKeyValueList] = Contents,
{true, #event{detail_level = DetailLevel,
@@ -549,7 +547,7 @@ parse_event(Mod, Trace, ParsedTS, ReportedTS, From, Label, Contents) ->
{from, From},
{to, From},
{gc_items, GcKeyValueList}]}};
- gc_end ->
+ gc_minor_end ->
DetailLevel = 85,
[GcKeyValueList] = Contents,
{true, #event{detail_level = DetailLevel,
@@ -559,10 +557,38 @@ parse_event(Mod, Trace, ParsedTS, ReportedTS, From, Label, Contents) ->
to = From,
label = Label,
contents = [{label, Label},
- {detail_level, DetailLevel},
- {from, From},
- {to, From},
- {gc_items, GcKeyValueList}]}};
+ {detail_level, DetailLevel},
+ {from, From},
+ {to, From},
+ {gc_items, GcKeyValueList}]}};
+ gc_major_start ->
+ DetailLevel = 80,
+ [GcKeyValueList] = Contents,
+ {true, #event{detail_level = DetailLevel,
+ trace_ts = ReportedTS,
+ event_ts = ParsedTS,
+ from = From,
+ to = From,
+ label = Label,
+ contents = [{label, Label},
+ {detail_level, DetailLevel},
+ {from, From},
+ {to, From},
+ {gc_items, GcKeyValueList}]}};
+ gc_major_end ->
+ DetailLevel = 85,
+ [GcKeyValueList] = Contents,
+ {true, #event{detail_level = DetailLevel,
+ trace_ts = ReportedTS,
+ event_ts = ParsedTS,
+ from = From,
+ to = From,
+ label = Label,
+ contents = [{label, Label},
+ {detail_level, DetailLevel},
+ {from, From},
+ {to, From},
+ {gc_items, GcKeyValueList}]}};
_ ->
error_logger:format("~p(~p): Ignoring unknown trace type -> ~p~n~n",
[?MODULE, ?LINE, Trace]),
diff --git a/lib/et/src/et_viewer.erl b/lib/et/src/et_viewer.erl
index 1a962df147..3928764c7f 100644
--- a/lib/et/src/et_viewer.erl
+++ b/lib/et/src/et_viewer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/src/et_wx_contents_viewer.erl b/lib/et/src/et_wx_contents_viewer.erl
index 46898c6fbf..247dd4c7ba 100644
--- a/lib/et/src/et_wx_contents_viewer.erl
+++ b/lib/et/src/et_wx_contents_viewer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -89,7 +89,7 @@ start_link(Options) ->
S#state.parent_pid =/= self() ->
unlink(Pid);
true ->
- ignore
+ ok
end,
{ok, Pid}
catch
@@ -242,11 +242,12 @@ handle_event(#wx{id = Id,
S) ->
case proplists:get_value(Id, S#state.menu_data) of
undefined ->
- ignore;
+ ok;
Data when is_record(Data, filter) ->
F = Data,
- ChildState= S#state{active_filter = F#filter.name},
- wx_object:start_link(?MODULE, [ChildState], []);
+ ChildState = S#state{active_filter = F#filter.name},
+ _ = wx_object:start_link(?MODULE, [ChildState], []),
+ ok;
{hide, Actors} ->
send_viewer_event(S, {delete_actors, Actors});
{show, Actors} ->
@@ -267,7 +268,7 @@ handle_event(#wx{id = Id,
TimeStamp =
case S#state.event_order of
trace_ts -> Event#event.trace_ts;
- event_ts -> Event#event.event_ts
+ event_ts -> Event#event.event_ts
end,
FileName = lists:flatten(["et_contents_viewer_", now_to_string(TimeStamp), ".txt"]),
Style = ?wxFD_SAVE bor ?wxFD_OVERWRITE_PROMPT,
@@ -275,7 +276,7 @@ handle_event(#wx{id = Id,
case select_file(S#state.frame, Msg, filename:absname(FileName), Style) of
{ok, FileName2} ->
Bin = list_to_binary(event_to_string(Event, S#state.event_order)),
- file:write_file(FileName2, Bin);
+ ok = file:write_file(FileName2, Bin);
cancel ->
ok
end,
@@ -351,19 +352,21 @@ handle_event(#wx{event = #wxKey{rawCode = KeyCode}}, S) ->
$0 ->
case lists:keysearch(?DEFAULT_FILTER_NAME, #filter.name, S#state.filters) of
{value, F} when is_record(F, filter) ->
- ChildState= S#state{active_filter = F#filter.name},
- wx_object:start_link(?MODULE, [ChildState], []);
+ ChildState = S#state{active_filter = F#filter.name},
+ _ = wx_object:start_link(?MODULE, [ChildState], []),
+ ok;
false ->
- ignore
+ ok
end,
{noreply, S};
Int when is_integer(Int), Int > $0, Int =< $9 ->
case catch lists:nth(Int-$0, S#state.filters) of
F when is_record(F, filter) ->
- ChildState= S#state{active_filter = F#filter.name},
- wx_object:start_link(?MODULE, [ChildState], []);
+ ChildState = S#state{active_filter = F#filter.name},
+ _ = wx_object:start_link(?MODULE, [ChildState], []),
+ ok;
{'EXIT', _} ->
- ignore
+ ok
end,
{noreply, S};
@@ -443,11 +446,11 @@ create_window(S) ->
Title = lists:concat([?MODULE, " (filter: ", Name, ")"]),
WinOpt = [{size, {W,H}}],
Frame = wxFrame:new(wx:null(), ?wxID_ANY, Title, WinOpt),
- wxFrame:createStatusBar(Frame),
+ _ = wxFrame:createStatusBar(Frame),
Panel = wxPanel:new(Frame, []),
Bar = wxMenuBar:new(),
- wxFrame:setMenuBar(Frame,Bar),
+ _ = wxFrame:setMenuBar(Frame,Bar),
create_file_menu(Bar),
Editor = wxTextCtrl:new(Panel, ?wxID_ANY, [{style, 0
bor ?wxDEFAULT
@@ -457,21 +460,21 @@ create_window(S) ->
bor ?wxTE_DONTWRAP}]),
Font = wxFont:new(10, ?wxFONTFAMILY_TELETYPE, ?wxNORMAL, ?wxNORMAL,[]),
TextAttr = wxTextAttr:new(?wxBLACK, [{font, Font}]),
- wxTextCtrl:setDefaultStyle(Editor, TextAttr),
+ _ = wxTextCtrl:setDefaultStyle(Editor, TextAttr),
Sizer = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(Sizer, Editor, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ _ = wxSizer:add(Sizer, Editor, [{flag, ?wxEXPAND}, {proportion, 1}]),
FilteredEvent = config_editor(Editor, S),
S2 = S#state{win = Frame, panel = Panel, filtered_event = FilteredEvent},
HideData = create_hide_menu(Bar, S2),
SearchData = create_search_menu(Bar, S2),
FilterData = create_filter_menu(Bar, S#state.filters),
- wxFrame:connect(Frame, command_menu_selected, []),
- wxFrame:connect(Frame, key_up),
- wxFrame:connect(Frame, close_window, [{skip,true}]),
- wxFrame:setFocus(Frame),
- wxPanel:setSizer(Panel, Sizer),
- wxSizer:fit(Sizer, Panel),
- wxFrame:show(Frame),
+ _ = wxFrame:connect(Frame, command_menu_selected, []),
+ _ = wxFrame:connect(Frame, key_up),
+ _ = wxFrame:connect(Frame, close_window, [{skip,true}]),
+ _ = wxFrame:setFocus(Frame),
+ _ = wxPanel:setSizer(Panel, Sizer),
+ _ = wxSizer:fit(Sizer, Panel),
+ _ = wxFrame:show(Frame),
S2#state{menu_data = HideData++SearchData++FilterData, editor = Editor, frame = Frame}.
menuitem(Menu, Id, Text, UserData) ->
@@ -480,16 +483,17 @@ menuitem(Menu, Id, Text, UserData) ->
create_file_menu(Bar) ->
Menu = wxMenu:new([]),
- wxMenu:append(Menu, ?wxID_SAVE, "Save"),
- wxMenu:append(Menu, ?wxID_PRINT,"Print"),
- wxMenu:appendSeparator(Menu),
- wxMenu:append(Menu, ?wxID_EXIT, "Close"),
- wxMenuBar:append(Bar, Menu, "File").
+ _ = wxMenu:append(Menu, ?wxID_SAVE, "Save"),
+ _ = wxMenu:append(Menu, ?wxID_PRINT,"Print"),
+ _ = wxMenu:appendSeparator(Menu),
+ _ = wxMenu:append(Menu, ?wxID_EXIT, "Close"),
+ _ = wxMenuBar:append(Bar, Menu, "File"),
+ ok.
create_filter_menu(Bar, Filters) ->
Menu = wxMenu:new([]),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Select Filter"), [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Select Filter"), [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Item = fun(F, {N,Acc}) when F#filter.name =:= ?DEFAULT_FILTER_NAME->
Label = lists:concat([pad_string(F#filter.name, 20, $\ , right), "(0)"]),
MenuItem = menuitem(Menu, ?wxID_ANY, Label, F),
@@ -502,7 +506,7 @@ create_filter_menu(Bar, Filters) ->
end,
Filters2 = lists:keysort(#filter.name, Filters),
{_,MenuData} = lists:foldl(Item, {1, []}, Filters2),
- wxMenuBar:append(Bar, Menu, "Filters"),
+ _ = wxMenuBar:append(Bar, Menu, "Filters"),
MenuData.
create_hide_menu(Bar, S) ->
@@ -515,33 +519,33 @@ create_hide_menu(Bar, S) ->
S#state.viewer_pid =:= undefined ->
ignore;
From =:= To ->
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Hide actor in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Hide actor in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Hide = menuitem(Menu, ?wxID_ANY, "From=To (f|t|b)", {hide, [From]}),
- wxMenu:appendSeparator(Menu),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Show actor in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Show actor in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Show = menuitem(Menu, ?wxID_ANY, "From=To (F|T|B)", {show, [From]}),
[Show,Hide];
true ->
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Hide actor in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Hide actor in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Hide = [menuitem(Menu, ?wxID_ANY, "From (f)", {hide, [From]}),
menuitem(Menu, ?wxID_ANY, "To (t)", {hide, [To]}),
menuitem(Menu, ?wxID_ANY, "Both (b)", {hide, [From, To]})],
- wxMenu:appendSeparator(Menu),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Show actor in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Show actor in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Show = [menuitem(Menu, ?wxID_ANY, "From (F)", {show, [From]}),
menuitem(Menu, ?wxID_ANY, "To (T)", {show, [To]}),
menuitem(Menu, ?wxID_ANY, "Both (B)", {show, [From, To]})],
Show++Hide
end,
- wxMenuBar:append(Bar, Menu, "Hide"),
+ _ = wxMenuBar:append(Bar, Menu, "Hide"),
MenuData.
create_search_menu(Bar, S) ->
@@ -549,9 +553,9 @@ create_search_menu(Bar, S) ->
E = S#state.filtered_event,
From = E#event.from,
To = E#event.to,
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Search in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Search in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
MenuData =
if
S#state.viewer_pid =:= undefined ->
@@ -571,7 +575,7 @@ create_search_menu(Bar, S) ->
menuitem(Menu, ?wxID_ANY, "Reverse from this event (r)", {mode, ModeR}),
menuitem(Menu, ?wxID_ANY, "Abort search. Display all (a)", {mode, all})]
end,
- wxMenuBar:append(Bar, Menu, "Search"),
+ _ = wxMenuBar:append(Bar, Menu, "Search"),
MenuData.
config_editor(Editor, S) ->
@@ -668,9 +672,10 @@ pad_string(String, MinLen, Char, Dir) when is_integer(MinLen), MinLen >= 0 ->
send_viewer_event(S, Event) ->
case S#state.viewer_pid of
ViewerPid when is_pid(ViewerPid) ->
- ViewerPid ! {et, Event};
+ ViewerPid ! {et, Event},
+ ok;
undefined ->
- ignore
+ ok
end.
select_file(Frame, Message, DefaultFile, Style) ->
diff --git a/lib/et/src/et_wx_viewer.erl b/lib/et/src/et_wx_viewer.erl
index 1e71880b79..9613299e6b 100644
--- a/lib/et/src/et_wx_viewer.erl
+++ b/lib/et/src/et_wx_viewer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -320,8 +320,8 @@ init([S]) when is_record(S, state) ->
undefined -> ok;
ParentPid -> link(ParentPid)
end,
- wx:new(),
- wx:debug(S#state.wx_debug),
+ _ = wx:new(),
+ _ = wx:debug(S#state.wx_debug),
et_collector:dict_insert(S#state.collector_pid,
{subscriber, self()},
?MODULE),
@@ -532,26 +532,25 @@ handle_info(#wx{id=Id, event = #wxCommand{type = command_menu_selected}}, S=#sta
load_all ->
Style = ?wxFD_OPEN bor ?wxFD_OVERWRITE_PROMPT,
Msg = "Select a file to load events from",
- S2 =
- case select_file(S#state.frame, Msg, S#state.event_file, Style) of
- {ok, NewFile} ->
- et_collector:start_trace_client(CollectorPid, event_file, NewFile),
- S#state{event_file = NewFile};
- cancel ->
- S
- end,
+ S2 = case select_file(S#state.frame, Msg, S#state.event_file, Style) of
+ {ok, NewFile} ->
+ _ = et_collector:start_trace_client(CollectorPid, event_file, NewFile),
+ S#state{event_file = NewFile};
+ cancel ->
+ S
+ end,
noreply(S2);
save_all ->
Style = ?wxFD_SAVE bor ?wxFD_OVERWRITE_PROMPT,
Msg = "Select a file to save events to",
- S2 =
- case select_file(S#state.frame, Msg, S#state.event_file, Style) of
- {ok, NewFile} ->
- et_collector:save_event_file(CollectorPid, NewFile, [existing, write, keep]),
- S#state{event_file = NewFile};
- cancel ->
- S
- end,
+ S2 = case select_file(S#state.frame, Msg, S#state.event_file, Style) of
+ {ok, NewFile} ->
+ ok = et_collector:save_event_file(CollectorPid, NewFile,
+ [existing, write, keep]),
+ S#state{event_file = NewFile};
+ cancel ->
+ S
+ end,
noreply(S2);
print_setup ->
S2 = print_setup(S),
@@ -787,7 +786,7 @@ handle_info(#wx{event = #wxKey{keyCode = KeyCode, shiftDown = SD}}, S) ->
noreply(S)
end;
handle_info(#wx{event = #wxScroll{type = scroll_changed}} = Wx, S) ->
- get_latest_scroll(Wx),
+ _ = get_latest_scroll(Wx),
Pos = wxScrollBar:getThumbPosition(S#state.scroll_bar),
{_, LineTopY, LineBotY} = calc_y(S),
Range = LineBotY - LineTopY,
@@ -1107,7 +1106,7 @@ pick_n([Head | Tail], N, Acc) when N > 0 ->
pick_n(Tail, N - 1, [Head | Acc]).
close_all(S) ->
- close_all_others(S),
+ _ = close_all_others(S),
wxFrame:destroy(S#state.frame),
opt_unlink(S#state.parent_pid),
{stop, shutdown, S}.
@@ -1115,12 +1114,12 @@ close_all(S) ->
close_all_others(S) ->
Fun =
fun({{subscriber, Pid}, _}) ->
- if
- Pid =:= self() ->
- ignore;
+ if Pid =:= self() ->
+ ok;
true ->
unlink(Pid),
- Pid ! {et, close}
+ Pid ! {et, close},
+ ok
end
end,
All = et_collector:dict_match(S#state.collector_pid,
@@ -1208,9 +1207,9 @@ create_main_window(S) ->
CheckBoxData = [{wxCheckBox:getId(HideActions), hide_actions},
{wxCheckBox:getId(HideActors), hide_actors}],
wxPanel:connect(Panel, command_checkbox_clicked),
- wxSizer:add(CheckSizer, HideActions),
- wxSizer:add(CheckSizer,HideActors),
- wxSizer:add(OptSizer, CheckSizer, [{border, 10}, {flag, ?wxALL}]),
+ _ = wxSizer:add(CheckSizer, HideActions),
+ _ = wxSizer:add(CheckSizer,HideActors),
+ _ = wxSizer:add(OptSizer, CheckSizer, [{border, 10}, {flag, ?wxALL}]),
DetailLevelBox = wxStaticBoxSizer:new(?wxHORIZONTAL,
Panel,
[{label, "Detail level"}]),
@@ -1222,22 +1221,21 @@ create_main_window(S) ->
{size, {200,-1}}]),
wxStatusBar:setStatusText(StatusBar, where_text(S)),
wxFrame:connect(Frame, command_slider_updated),
- wxSizer:add(DetailLevelBox, DetailLevel),
- wxSizer:add(OptSizer, DetailLevelBox, [{border, 10}, {flag, ?wxALL}]),
- wxSizer:addStretchSpacer(OptSizer),
- wxSizer:add(MainSizer, OptSizer),
- wxSizer:add(MainSizer,
- wxStaticLine:new(Panel, [{style, ?wxLI_HORIZONTAL}]),
- [{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(DetailLevelBox, DetailLevel),
+ _ = wxSizer:add(OptSizer, DetailLevelBox, [{border, 10}, {flag, ?wxALL}]),
+ _ = wxSizer:addStretchSpacer(OptSizer),
+ _ = wxSizer:add(MainSizer, OptSizer),
+ _ = wxSizer:add(MainSizer, wxStaticLine:new(Panel, [{style, ?wxLI_HORIZONTAL}]),
+ [{flag, ?wxEXPAND}]),
CanvasSizer = wxBoxSizer:new(?wxHORIZONTAL),
Canvas = wxPanel:new(Panel, [{style, ?wxFULL_REPAINT_ON_RESIZE}]),
{CanvasW,CanvasH} = wxPanel:getSize(Canvas),
ScrollBar = wxScrollBar:new(Panel, ?wxID_ANY, [{style, ?wxSB_VERTICAL}]),
- wxSizer:add(CanvasSizer, Canvas, [{flag, ?wxEXPAND}, {proportion, 1}]),
- wxSizer:add(CanvasSizer, ScrollBar, [{flag, ?wxEXPAND}]),
- wxSizer:add(MainSizer, CanvasSizer, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ _ = wxSizer:add(CanvasSizer, Canvas, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ _ = wxSizer:add(CanvasSizer, ScrollBar, [{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(MainSizer, CanvasSizer, [{flag, ?wxEXPAND}, {proportion, 1}]),
wxPanel:connect(Canvas, left_down),
wxPanel:connect(Canvas, left_up),
wxPanel:connect(Canvas, right_up),
@@ -1337,8 +1335,7 @@ menuitem(Menu, Id, Text, UserData) ->
create_file_menu(Bar) ->
Menu = wxMenu:new([]),
- Data = [
- menuitem(Menu, ?wxID_ANY, "Clear all events in the Collector", clear_all),
+ Data = [menuitem(Menu, ?wxID_ANY, "Clear all events in the Collector", clear_all),
menuitem(Menu, ?wxID_ANY, "Load events to the Collector from file", load_all),
menuitem(Menu, ?wxID_ANY, "Save all events in the Collector to file", save_all),
@@ -1348,51 +1345,44 @@ create_file_menu(Bar) ->
menuitem(Menu, ?wxID_ANY, "Close this Viewer", close),
menuitem(Menu, ?wxID_ANY, "Close all other Viewers, but this (c)", close_all_others),
- menuitem(Menu, ?wxID_ANY, "Close all Viewers and the Collector) (C) ", close_all)
- ],
- wxMenu:insertSeparator(Menu, 3),
- wxMenu:insertSeparator(Menu, 7),
+ menuitem(Menu, ?wxID_ANY, "Close all Viewers and the Collector) (C) ", close_all)],
+ _ = wxMenu:insertSeparator(Menu, 3),
+ _ = wxMenu:insertSeparator(Menu, 7),
wxMenuBar:append(Bar, Menu, "File"),
Data.
create_viewer_menu(Bar) ->
Menu = wxMenu:new([]),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Scroll this Viewer"),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
- D1 = [
- menuitem(Menu, ?wxID_ANY, "First (f)", first),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Scroll this Viewer"),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
+ D1 = [menuitem(Menu, ?wxID_ANY, "First (f)", first),
menuitem(Menu, ?wxID_ANY, "Last (l)", last),
menuitem(Menu, ?wxID_ANY, "Prev (p)", prev),
menuitem(Menu, ?wxID_ANY, "Next (n)", next),
- menuitem(Menu, ?wxID_ANY, "Refresh (r)", refresh)
- ],
- wxMenu:appendSeparator(Menu),
- D2 = [
- menuitem(Menu, ?wxID_ANY, "Up 5 (Up)", up),
- menuitem(Menu, ?wxID_ANY, "Down 5 (Down)", down)
- ],
- wxMenu:appendSeparator(Menu),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Actor visibility in this Viewer"),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ menuitem(Menu, ?wxID_ANY, "Refresh (r)", refresh)],
+ _ = wxMenu:appendSeparator(Menu),
+ D2 = [menuitem(Menu, ?wxID_ANY, "Up 5 (Up)", up),
+ menuitem(Menu, ?wxID_ANY, "Down 5 (Down)", down)],
+ _ = wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Actor visibility in this Viewer"),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
D3 = [menuitem(Menu, ?wxID_ANY, "Display all actors (a)", display_all)],
- wxMenuBar:append(Bar, Menu, "Viewer"),
+ _ = wxMenuBar:append(Bar, Menu, "Viewer"),
[D1,D2,D3].
create_collector_menu(Bar) ->
Menu = wxMenu:new([]),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Scroll all Viewers"),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
- Data = [
- menuitem(Menu, ?wxID_ANY, "First (F)", first_all),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Scroll all Viewers"),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
+ Data = [menuitem(Menu, ?wxID_ANY, "First (F)", first_all),
menuitem(Menu, ?wxID_ANY, "Last (L)", last_all),
menuitem(Menu, ?wxID_ANY, "Prev (P)", prev_all),
menuitem(Menu, ?wxID_ANY, "Next (N)", next_all),
- menuitem(Menu, ?wxID_ANY, "Refresh (R)", refresh_all)
- ],
- wxMenuBar:append(Bar, Menu, "Collector"),
+ menuitem(Menu, ?wxID_ANY, "Refresh (R)", refresh_all)],
+ _ = wxMenuBar:append(Bar, Menu, "Collector"),
Data.
create_filter_menu(S=#state{filter_menu = {Menu,Data}}, ActiveFilterName, Filters) ->
@@ -1421,21 +1411,19 @@ create_filter_menu(S=#state{filter_menu = {Menu,Data}}, ActiveFilterName, Filter
Same = lists:concat([pad_string(ActiveFilterName, 20), "(=) same scale"]),
Larger = lists:concat([pad_string(ActiveFilterName, 20), "(+) bigger scale"]),
Smaller = lists:concat([pad_string(ActiveFilterName, 20), "(-) smaller scale"]),
- D2 = [
- menuitem(Menu, ?wxID_ANY, Same, {data, Filter, 0}),
+ D2 = [menuitem(Menu, ?wxID_ANY, Same, {data, Filter, 0}),
menuitem(Menu, ?wxID_ANY, Smaller, {data, Filter, -1}),
menuitem(Menu, ?wxID_ANY, Larger, {data, Filter, 1}),
wxMenu:appendSeparator(Menu),
I2 = wxMenu:append(Menu, ?wxID_ANY, "New Filter Same Scale"),
- wxMenu:appendSeparator(Menu)
- ],
- wxMenuItem:enable(I2, [{enable,false}]),
+ wxMenu:appendSeparator(Menu)],
+ _ = wxMenuItem:enable(I2, [{enable,false}]),
{_,D3} = lists:foldl(Item, {1,[]}, Filters),
S#state{filter_menu = {Menu, lists:flatten([D1,D2,D3])}}.
create_help_menu(Bar) ->
Menu = wxMenu:new([]),
- menuitem(Menu, ?wxID_HELP, "Info", help),
+ _ = menuitem(Menu, ?wxID_HELP, "Info", help),
wxMenuBar:append(Bar, Menu, "Help").
clear_canvas(S) ->
diff --git a/lib/et/src/modules.mk b/lib/et/src/modules.mk
index 0568306b65..4d538fae44 100644
--- a/lib/et/src/modules.mk
+++ b/lib/et/src/modules.mk
@@ -1,7 +1,7 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2013. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/subdirs.mk b/lib/et/subdirs.mk
index 6568459be1..fb7fb8dbc9 100644
--- a/lib/et/subdirs.mk
+++ b/lib/et/subdirs.mk
@@ -1,7 +1,7 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2009. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/test/Makefile b/lib/et/test/Makefile
index 0434d4ebfd..45ea2c2ce0 100644
--- a/lib/et/test/Makefile
+++ b/lib/et/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/test/et_SUITE.erl b/lib/et/test/et_SUITE.erl
index 4a26b46439..199aff43a8 100644
--- a/lib/et/test/et_SUITE.erl
+++ b/lib/et/test/et_SUITE.erl
@@ -16,7 +16,8 @@
%%
-module(et_SUITE).
--compile([export_all]).
+-export([suite/0, all/0]).
+-export([app/1, appup/1]).
-include_lib("common_test/include/ct.hrl").
suite() ->
@@ -25,27 +26,10 @@ suite() ->
all() ->
[app, appup].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-app() ->
- [{doc, "Test that the et app file is ok"}].
+%% Test that the et app file is ok
app(Config) when is_list(Config) ->
ok = ?t:app_test(et).
-appup() ->
- [{doc, "Test that the et appup file is ok"}].
+%% Test that the et appup file is ok
appup(Config) when is_list(Config) ->
ok = ?t:appup_test(et).
diff --git a/lib/et/test/et_test_lib.erl b/lib/et/test/et_test_lib.erl
index 6e252de4e5..df2c308b28 100644
--- a/lib/et/test/et_test_lib.erl
+++ b/lib/et/test/et_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/test/et_test_lib.hrl b/lib/et/test/et_test_lib.hrl
index 9f2a432e04..ee1a72d991 100644
--- a/lib/et/test/et_test_lib.hrl
+++ b/lib/et/test/et_test_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/test/et_wx_SUITE.erl b/lib/et/test/et_wx_SUITE.erl
index 165a2bca49..6475b6706b 100644
--- a/lib/et/test/et_wx_SUITE.erl
+++ b/lib/et/test/et_wx_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,11 +19,10 @@
-module(et_wx_SUITE).
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
- init_per_suite/1, end_per_suite/1,
- init_per_testcase/2, end_per_testcase/2]).
-
--compile(export_all).
+-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2,
+ init_per_suite/1, end_per_suite/1]).
+-export([start_all_windows/1]).
-include("et_test_lib.hrl").
@@ -40,21 +39,13 @@ end_per_testcase(Func,Config) ->
et_test_lib:end_per_testcase(Func,Config).
%% SUITE specification
-suite() -> [{ct_hooks,[ts_install_cth]}].
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[start_all_windows].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%% The test cases
%% Display all windows and see if something crashes
diff --git a/lib/et/test/ett b/lib/et/test/ett
index 53aaeada55..c5b89ea367 100755
--- a/lib/et/test/ett
+++ b/lib/et/test/ett
@@ -1,7 +1,7 @@
#! /bin/sh -f
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2010. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/et/test/ett.erl b/lib/et/test/ett.erl
index e78f6c392e..b1b769b7ac 100644
--- a/lib/et/test/ett.erl
+++ b/lib/et/test/ett.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/et/vsn.mk b/lib/et/vsn.mk
index 0af7bf75e1..a37fec083b 100644
--- a/lib/et/vsn.mk
+++ b/lib/et/vsn.mk
@@ -1 +1 @@
-ET_VSN = 1.5.1
+ET_VSN = 1.6
diff --git a/lib/eunit/doc/overview.edoc b/lib/eunit/doc/overview.edoc
index 12ea02f442..3a46e991cb 100644
--- a/lib/eunit/doc/overview.edoc
+++ b/lib/eunit/doc/overview.edoc
@@ -690,9 +690,12 @@ it like `debugMsg'. The result is always `ok'.</dd>
<dt>`debugVal(Expr)'</dt>
<dd>Prints both the source code for `Expr' and its current value. E.g.,
`?debugVal(f(X))' might be displayed as "`f(X) = 42'". (Large terms are
-shown truncated.) The result is always the value of `Expr', so this
-macro can be wrapped around any expression to display its value when
-the code is compiled with debugging enabled.</dd>
+truncated to the depth given by the macro `EUNIT_DEBUG_VAL_DEPTH', which
+defaults to 15 but can be overridden by the user.) The result is always the
+value of `Expr', so this macro can be wrapped around any expression to
+display its value when the code is compiled with debugging enabled.</dd>
+<dt>`debugVal(Expr, Depth)'</dt>
+<dd>Like `debugVal(Expr)', but prints terms truncated to the given depth.</dd>
<dt>`debugTime(Text,Expr)'</dt>
<dd>Prints `Text' and the wall clock time for evaluation of `Expr'. The
result is always the value of `Expr', so this macro can be wrapped
diff --git a/lib/eunit/doc/src/book.xml b/lib/eunit/doc/src/book.xml
index 6cd2b93c68..795fce2239 100644
--- a/lib/eunit/doc/src/book.xml
+++ b/lib/eunit/doc/src/book.xml
@@ -5,7 +5,7 @@
<header titlestyle="normal">
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/eunit/doc/src/notes.xml b/lib/eunit/doc/src/notes.xml
index 398729217b..88602e8222 100644
--- a/lib/eunit/doc/src/notes.xml
+++ b/lib/eunit/doc/src/notes.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -33,6 +33,21 @@
</header>
<p>This document describes the changes made to the EUnit application.</p>
+<section><title>Eunit 2.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>There is a new <c>debugVal/2</c> that gives control
+ over the truncation depth.</p>
+ <p>
+ Own Id: OTP-13612</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Eunit 2.2.13</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/eunit/doc/src/part.xml b/lib/eunit/doc/src/part.xml
index a4484c2c23..ac5db0e8d7 100644
--- a/lib/eunit/doc/src/part.xml
+++ b/lib/eunit/doc/src/part.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/eunit/doc/src/part_notes.xml b/lib/eunit/doc/src/part_notes.xml
index fbecfe3f11..7db65083e0 100644
--- a/lib/eunit/doc/src/part_notes.xml
+++ b/lib/eunit/doc/src/part_notes.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/eunit/doc/src/ref_man.xml b/lib/eunit/doc/src/ref_man.xml
index c573df2a4f..a02ccc69b7 100644
--- a/lib/eunit/doc/src/ref_man.xml
+++ b/lib/eunit/doc/src/ref_man.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/eunit/include/eunit.hrl b/lib/eunit/include/eunit.hrl
index 8f678b0290..7fd6c206a4 100644
--- a/lib/eunit/include/eunit.hrl
+++ b/lib/eunit/include/eunit.hrl
@@ -212,6 +212,7 @@
-define(debugHere, ok).
-define(debugFmt(S, As), ok).
-define(debugVal(E), (E)).
+-define(debugValAll(E), (E)).
-define(debugTime(S, E), (E)).
-else.
-define(debugMsg(S),
@@ -222,13 +223,18 @@
end).
-define(debugHere, (?debugMsg("<-"))).
-define(debugFmt(S, As), (?debugMsg(io_lib:format((S), (As))))).
--define(debugVal(E),
+-define(debugVal(E, D),
begin
((fun (__V) ->
- ?debugFmt(<<"~ts = ~tP">>, [(??E), __V, 15]),
+ ?debugFmt(<<"~ts = ~tP">>,
+ [(??E), __V, D]),
__V
end)(E))
end).
+-ifndef(EUNIT_DEBUG_VAL_DEPTH).
+-define(EUNIT_DEBUG_VAL_DEPTH, 15).
+-endif.
+-define(debugVal(E), ?debugVal(E, ?EUNIT_DEBUG_VAL_DEPTH)).
-define(debugTime(S, E),
begin
((fun () ->
diff --git a/lib/eunit/src/eunit.appup.src b/lib/eunit/src/eunit.appup.src
index 12dff80521..4f212084a2 100644
--- a/lib/eunit/src/eunit.appup.src
+++ b/lib/eunit/src/eunit.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/eunit/src/eunit_lib.erl b/lib/eunit/src/eunit_lib.erl
index 4dbe023257..9dbb4835f8 100644
--- a/lib/eunit/src/eunit_lib.erl
+++ b/lib/eunit/src/eunit_lib.erl
@@ -192,7 +192,6 @@ error_msg(Title, Fmt, Args) ->
io_lib:fwrite("*** ~ts ***\n~ts\n\n", [Title, Msg]).
-ifdef(TEST).
--dialyzer({no_match, format_exception_test_/0}).
format_exception_test_() ->
[?_assertMatch(
"\nymmud:rorre"++_,
@@ -274,7 +273,6 @@ dlist_next([], Xs) ->
-ifdef(TEST).
--dialyzer({no_match, dlist_test_/0}).
dlist_test_() ->
{"deep list traversal",
[{"non-list term -> singleton list",
@@ -340,7 +338,6 @@ is_nonempty_string([]) -> false;
is_nonempty_string(Cs) -> is_string(Cs).
-ifdef(TEST).
--dialyzer({no_match, is_string_test_/0}).
is_string_test_() ->
{"is_string",
[{"no non-lists", ?_assert(not is_string($A))},
@@ -402,7 +399,7 @@ uniq([X | Xs]) -> [X | uniq(Xs)];
uniq([]) -> [].
-ifdef(TEST).
--dialyzer({[no_match, no_fail_call, no_improper_lists], uniq_test_/0}).
+-dialyzer({[no_fail_call, no_improper_lists], uniq_test_/0}).
uniq_test_() ->
{"uniq",
[?_assertError(function_clause, uniq(ok)),
@@ -581,7 +578,6 @@ trie_match([], _T) ->
-ifdef(TEST).
--dialyzer({no_match, trie_test_/0}).
trie_test_() ->
[{"basic representation",
[?_assert(trie_new() =:= gb_trees:empty()),
diff --git a/lib/eunit/src/eunit_surefire.erl b/lib/eunit/src/eunit_surefire.erl
index f3e58a3d1c..1b468551d8 100644
--- a/lib/eunit/src/eunit_surefire.erl
+++ b/lib/eunit/src/eunit_surefire.erl
@@ -56,7 +56,11 @@
{
name :: chars(),
description :: chars(),
- result :: ok | {failed, tuple()} | {aborted, tuple()} | {skipped, term()},
+ result :: ok
+ | {failed, tuple()}
+ | {aborted, tuple()}
+ | {skipped, term()}
+ | undefined,
time :: integer(),
output :: binary()
}).
diff --git a/lib/eunit/test/Makefile b/lib/eunit/test/Makefile
index 8721bacf89..b6ece61b43 100644
--- a/lib/eunit/test/Makefile
+++ b/lib/eunit/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -41,8 +41,8 @@ RELSYSDIR = $(RELEASE_PATH)/eunit_test
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
-ERL_MAKE_FLAGS += -pa $(ERL_TOP)/lib/test_server/ebin
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_MAKE_FLAGS +=
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/eunit/test/eunit_SUITE.erl b/lib/eunit/test/eunit_SUITE.erl
index 9897d5ae2b..63bdc6c334 100644
--- a/lib/eunit/test/eunit_SUITE.erl
+++ b/lib/eunit/test/eunit_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/eunit/vsn.mk b/lib/eunit/vsn.mk
index dcb7fad699..b551ee6eb6 100644
--- a/lib/eunit/vsn.mk
+++ b/lib/eunit/vsn.mk
@@ -1 +1 @@
-EUNIT_VSN = 2.2.13
+EUNIT_VSN = 2.3
diff --git a/lib/gs/Makefile b/lib/gs/Makefile
index 02c8fc3467..22f935fd38 100644
--- a/lib/gs/Makefile
+++ b/lib/gs/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
# Macros
#
-SUB_DIRECTORIES = src tcl contribs examples doc/src
+SUB_DIRECTORIES = src tcl examples doc/src
include vsn.mk
VSN = $(GS_VSN)
diff --git a/lib/gs/contribs/Makefile b/lib/gs/contribs/Makefile
deleted file mode 100644
index 061fae86c1..0000000000
--- a/lib/gs/contribs/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-SUB_DIRECTORIES = bonk cols mandel othello
-SPECIAL_TARGETS =
-
-#
-# Default Subdir Targets
-#
-include $(ERL_TOP)/make/otp_subdir.mk
-
diff --git a/lib/gs/contribs/bonk/Makefile b/lib/gs/contribs/bonk/Makefile
deleted file mode 100644
index b7508a97c9..0000000000
--- a/lib/gs/contribs/bonk/Makefile
+++ /dev/null
@@ -1,109 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(GS_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/gs-$(VSN)/contribs
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- bonk \
- bonk_sound \
- bonk_square \
- sounder
-
-HRL_FILES=
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=../ebin/%.$(EMULATOR)) $(TARGET_TOOLBOX_FILES)
-
-BITMAPS= bitmaps/bonkbomb bitmaps/bonkface bitmaps/bonklogo bitmaps/bonkmiss \
- bitmaps/bonktom bitmaps/bonkx bitmaps/erl-e bitmaps/erl-text
-SOUNDS= sounds/bonk.au sounds/damn.au sounds/explosion.au sounds/gameover.au \
- sounds/hehee.au sounds/level.au sounds/missedme.au sounds/music.au \
- sounds/ouch!!!.au sounds/praisejesus.au sounds/trumpet.au sounds/yes.au
-
-TOOLNAME = bonk
-
-EXTRA_FILES= $(TOOLNAME).txt
-TOOLBOX_FILES= $(TOOLNAME).tool $(TOOLNAME).gif
-TARGET_TOOLBOX_FILES= $(TOOLBOX_FILES:%=$(EBIN)/%)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-docs:
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f core
-
-# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-
-$(EBIN)/$(TOOLNAME).gif: $(TOOLNAME).gif
- $(gen_verbose)rm -f $@
- $(V_at)cp $(TOOLNAME).gif $@
-
-$(EBIN)/$(TOOLNAME).tool: $(TOOLNAME).tool
- $(gen_verbose)rm -f $@
- $(V_at)cp $(TOOLNAME).tool $@
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
- $(INSTALL_DIR) "$(RELSYSDIR)/bonk/bitmaps"
- $(INSTALL_DATA) $(BITMAPS) $(TOOLBOX_FILES) "$(RELSYSDIR)/bonk/bitmaps"
- $(INSTALL_DIR) "$(RELSYSDIR)/bonk/sounds"
- $(INSTALL_DATA) $(SOUNDS) "$(RELSYSDIR)/bonk/sounds"
- $(INSTALL_DIR) "$(RELSYSDIR)/bonk"
- $(INSTALL_DATA) $(ERL_FILES) $(EXTRA_FILES) "$(RELSYSDIR)/bonk"
-
-
-release_docs_spec:
-
diff --git a/lib/gs/contribs/bonk/bitmaps/bonkbomb b/lib/gs/contribs/bonk/bitmaps/bonkbomb
deleted file mode 100644
index 8b121db9e8..0000000000
--- a/lib/gs/contribs/bonk/bitmaps/bonkbomb
+++ /dev/null
@@ -1,66 +0,0 @@
-#define bonkbomb_width 75
-#define bonkbomb_height 75
-static char bonkbomb_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x10, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x21,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x11, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x90, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x51, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
- 0x12, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x94, 0x18,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x41, 0x06, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xbb, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0x99, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x18, 0x19,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x62, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x84, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xc0, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0x3b, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1f, 0x40,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xb8, 0x0e, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x5c, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xff, 0xaf, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0xff, 0x57, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xaf,
- 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x5f, 0x1d, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xbf, 0x0e, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfe, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
- 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0xff, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0xff, 0xff, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x7f, 0xfc, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0x3f, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0x0f, 0xf0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xc0,
- 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0xf0, 0xff, 0xff,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xf8, 0xff, 0xff, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0xc0, 0xff, 0xfd, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
- 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/gs/contribs/bonk/bitmaps/bonkface b/lib/gs/contribs/bonk/bitmaps/bonkface
deleted file mode 100644
index 964fb93098..0000000000
--- a/lib/gs/contribs/bonk/bitmaps/bonkface
+++ /dev/null
@@ -1,66 +0,0 @@
-#define bonkface_width 75
-#define bonkface_height 75
-static char bonkface_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x3c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08,
- 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x00, 0x60,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x18, 0x00, 0x08,
- 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x03, 0x06, 0x00, 0x0f, 0x00, 0x00,
- 0x00, 0x40, 0xff, 0x00, 0x00, 0x00, 0xf8, 0x17, 0x00, 0x00, 0x00, 0x40,
- 0xfe, 0x1f, 0x00, 0xc0, 0xff, 0x13, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xff,
- 0x03, 0xfe, 0xff, 0x20, 0x00, 0x00, 0x00, 0x20, 0xf0, 0xff, 0xff, 0xff,
- 0x7f, 0x20, 0x00, 0x00, 0x00, 0x20, 0xc0, 0xff, 0xdf, 0xff, 0x1f, 0x20,
- 0x00, 0x00, 0x00, 0x20, 0x00, 0xff, 0xdf, 0xff, 0x07, 0x20, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0xfe, 0x8f, 0xff, 0x03, 0x40, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0xf8, 0x8f, 0xff, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0xf0,
- 0x07, 0x7f, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x07, 0x1f,
- 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x03, 0x06, 0x00, 0x40,
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0xe0,
- 0x00, 0x38, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x10, 0xf0, 0x01, 0x7c,
- 0x40, 0x40, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x06, 0x03, 0x40, 0x40,
- 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0xf8, 0x00, 0x40, 0x40, 0x00, 0x00,
- 0x00, 0x10, 0x30, 0x00, 0x00, 0x00, 0x60, 0x40, 0x00, 0x00, 0x00, 0x10,
- 0x70, 0x00, 0x00, 0x00, 0x70, 0x40, 0x00, 0x00, 0x00, 0x10, 0xf0, 0x01,
- 0x00, 0x00, 0x7c, 0x40, 0x00, 0x00, 0x00, 0x20, 0xf0, 0x0f, 0x00, 0x80,
- 0x7f, 0x20, 0x00, 0x00, 0x00, 0x20, 0xf0, 0xff, 0x03, 0xfe, 0x7f, 0x20,
- 0x00, 0x00, 0x00, 0x20, 0xf0, 0x7f, 0xfe, 0xff, 0x7f, 0x20, 0x00, 0x00,
- 0x00, 0x20, 0xe0, 0x7f, 0xfe, 0xff, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x40,
- 0xe0, 0x7f, 0xfe, 0xff, 0x3f, 0x10, 0x00, 0x00, 0x00, 0x40, 0xc0, 0xff,
- 0xff, 0xff, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xff, 0xff, 0xff,
- 0x1f, 0x08, 0x00, 0x00, 0x00, 0x80, 0x80, 0xff, 0xff, 0xff, 0x0f, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0x07, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0xfe, 0xff, 0xff, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0xfc, 0xff, 0xfc, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0,
- 0xff, 0x7c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0xff, 0x1c,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xff, 0x07, 0x40, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
- 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xc0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x3c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/gs/contribs/bonk/bitmaps/bonklogo b/lib/gs/contribs/bonk/bitmaps/bonklogo
deleted file mode 100644
index 3adc59984a..0000000000
--- a/lib/gs/contribs/bonk/bitmaps/bonklogo
+++ /dev/null
@@ -1,320 +0,0 @@
-#define bonklogo_width 300
-#define bonklogo_height 100
-static char bonklogo_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x3f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00,
- 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0x83, 0xff, 0x9f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3c, 0xf8, 0xff, 0x7f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x87, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0xf9, 0xff, 0xff, 0xff, 0x13, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x27,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
- 0xff, 0xff, 0xff, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f,
- 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
- 0xff, 0x2f, 0xf8, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xdf, 0xff, 0x2f, 0xf0, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0xc3, 0xff, 0x2f, 0xf0, 0xff, 0x09, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xff, 0x2f, 0xe0, 0xff, 0x0b, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x80, 0xff, 0x09,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x2f, 0xc0, 0xff,
- 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc0,
- 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x27,
- 0xc0, 0xff, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x01,
- 0x00, 0xc0, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0xff, 0x17, 0xc0, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0x7f, 0x01, 0x00, 0xe0, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0x17, 0xc0, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0x7f, 0x01, 0x00, 0xe0, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0x17, 0x80, 0xff, 0x17, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0x7f, 0xff, 0x3f, 0xe0, 0x7f, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x17, 0x80, 0xff, 0x17, 0xc0,
- 0xff, 0x7f, 0xe0, 0xff, 0x3f, 0xfc, 0x7f, 0x00, 0x20, 0xe0, 0x7f, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x17, 0x80, 0xff,
- 0x17, 0x00, 0x00, 0x80, 0x00, 0x00, 0x20, 0xfc, 0x7f, 0xfe, 0x2f, 0xf0,
- 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x17,
- 0x80, 0xff, 0x17, 0xe0, 0xff, 0x1f, 0xe1, 0xff, 0x2f, 0xfc, 0x7f, 0xfe,
- 0x2f, 0xf0, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0x17, 0x80, 0xff, 0x17, 0xf0, 0xff, 0x7f, 0xe6, 0xff, 0x4f, 0xfc,
- 0x7f, 0xfe, 0x2f, 0xf0, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0x17, 0x80, 0xff, 0x17, 0xf8, 0xff, 0xff, 0xe8, 0xff,
- 0x4f, 0xfc, 0x7f, 0xfe, 0x2f, 0xf8, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0x17, 0x80, 0xff, 0x17, 0xfe, 0xff, 0xff,
- 0xeb, 0xff, 0x5f, 0xfc, 0x7f, 0xfe, 0x2f, 0xf8, 0x9f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x17, 0x80, 0xff, 0x17, 0xfe,
- 0xff, 0xff, 0xe3, 0xff, 0x5f, 0xfc, 0x7f, 0xfe, 0x2f, 0xf8, 0x5f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x17, 0xc0, 0xff,
- 0x17, 0xff, 0xff, 0xff, 0xe7, 0xff, 0x5f, 0xfc, 0x7f, 0xfe, 0x2f, 0xfc,
- 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x17,
- 0xc0, 0xff, 0x93, 0xff, 0xff, 0xff, 0xe7, 0xff, 0x5f, 0xfc, 0x7f, 0xfe,
- 0x2f, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0x17, 0xc0, 0xff, 0x8b, 0xff, 0xff, 0xff, 0xe7, 0xff, 0x9f, 0xfc,
- 0x7f, 0xfe, 0x2f, 0xfc, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xe0, 0xff, 0x13, 0xe0, 0xff, 0x8b, 0xff, 0xff, 0xff, 0xcf, 0xff,
- 0xbf, 0xfc, 0x7f, 0xfe, 0x2f, 0xfc, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0b, 0xf2, 0xff, 0xcd, 0xff, 0xff, 0xff,
- 0xcf, 0xff, 0xbf, 0xfc, 0x7f, 0xfe, 0x2f, 0xfe, 0x17, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0b, 0xf9, 0xff, 0xd9, 0xff,
- 0xff, 0xff, 0x1f, 0xff, 0xbf, 0xfc, 0x7f, 0xfe, 0x2f, 0xfe, 0x13, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xcb, 0xfc, 0xff,
- 0xc0, 0xff, 0x8f, 0xff, 0x1f, 0xff, 0xbf, 0xfc, 0x7f, 0xfe, 0x2f, 0xfe,
- 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x2b,
- 0xfe, 0xff, 0x87, 0xff, 0x03, 0xff, 0x3f, 0xff, 0xbf, 0xfc, 0x7f, 0xfe,
- 0x2f, 0xff, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0xff, 0x9b, 0xff, 0xff, 0x3f, 0xff, 0x01, 0xfe, 0x3f, 0xff, 0x3f, 0xfd,
- 0x7f, 0xfe, 0x2f, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xc3, 0xff, 0xff, 0x7f, 0xfe, 0x05, 0xfc, 0x3f, 0xff,
- 0x7f, 0xfd, 0x7f, 0xfe, 0x2f, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfc, 0x04, 0xfc,
- 0x3f, 0xff, 0x7f, 0xfd, 0x7f, 0xfe, 0x2f, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x02, 0xf8, 0x3f, 0xff, 0x7f, 0xfd, 0x7f, 0xfe, 0xaf, 0xff, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x02, 0xf8, 0x3f, 0xff, 0x7f, 0xfc, 0x7f, 0xfe, 0xaf, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf9, 0x02, 0xf8, 0x3f, 0xff, 0x7f, 0xfc, 0x7f, 0xfe,
- 0x8f, 0x7f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xfc,
- 0x7f, 0xfe, 0xcf, 0x7f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x02, 0xf8, 0x3f, 0xff,
- 0xff, 0xfc, 0x7f, 0xfe, 0xcf, 0x7f, 0x01, 0x00, 0x00, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x02, 0xf8,
- 0x3f, 0xff, 0xff, 0xfc, 0x7f, 0xfe, 0xcf, 0x3f, 0x01, 0x00, 0x00, 0x38,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xf7,
- 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xfc, 0x7f, 0xfe, 0xef, 0x3f, 0x01, 0x00,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x80, 0xff,
- 0xff, 0xe7, 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xfc, 0x7f, 0xfe, 0xef, 0x9f,
- 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x01,
- 0x00, 0xff, 0xff, 0xe7, 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xfd, 0x7f, 0xfe,
- 0xef, 0xdf, 0x00, 0x00, 0x00, 0x30, 0xd8, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0x05, 0x00, 0xff, 0xff, 0xe7, 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xfd,
- 0x7f, 0xfe, 0xef, 0x9f, 0x00, 0x00, 0x00, 0x38, 0xfc, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0x05, 0x00, 0xff, 0xff, 0xef, 0x02, 0xf8, 0x3f, 0xff,
- 0xff, 0xfd, 0x7f, 0xfe, 0xff, 0xbf, 0x00, 0x00, 0x00, 0x38, 0x7c, 0x0e,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0x05, 0x00, 0xfe, 0xff, 0xef, 0x02, 0xf8,
- 0x3f, 0xff, 0xff, 0xfd, 0x7f, 0xfe, 0xff, 0x3f, 0x01, 0x00, 0x00, 0x38,
- 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x05, 0x00, 0xfe, 0xff, 0xef,
- 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xfd, 0x7f, 0xfe, 0xff, 0x7f, 0x02, 0x00,
- 0x00, 0x38, 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x05, 0x00, 0xfc,
- 0xff, 0xcf, 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xfd, 0x7f, 0xfe, 0xff, 0xff,
- 0x02, 0x00, 0x00, 0x38, 0x3b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x04,
- 0x00, 0xfc, 0xff, 0xcf, 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0x7f, 0xfe,
- 0xff, 0xff, 0x04, 0x00, 0x00, 0xb8, 0x39, 0x2e, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0x02, 0x00, 0xfc, 0xff, 0xcf, 0x02, 0xf8, 0x3f, 0xff, 0xff, 0xff,
- 0x7f, 0xfe, 0xff, 0xff, 0x05, 0x00, 0x00, 0xf0, 0x39, 0x3c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0x02, 0x00, 0xfc, 0xff, 0xcf, 0x04, 0xf8, 0x3f, 0xff,
- 0xfd, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x09, 0x00, 0x00, 0xf0, 0x38, 0x1c,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0x02, 0x00, 0xfc, 0xff, 0xcf, 0x05, 0xf8,
- 0x3f, 0xff, 0xfd, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x13, 0x00, 0x00, 0x60,
- 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x02, 0x00, 0xfc, 0xff, 0xcf,
- 0x0d, 0xf8, 0x3f, 0xff, 0xfd, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x17, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x02, 0x00, 0xfe,
- 0xff, 0xcf, 0x09, 0xfd, 0x3f, 0xff, 0xfd, 0xff, 0x7f, 0xfe, 0xff, 0xff,
- 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x02,
- 0x00, 0xfe, 0xff, 0xcf, 0xcb, 0xfc, 0x3f, 0xff, 0xfd, 0xff, 0x7f, 0xfe,
- 0xff, 0xff, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0xff, 0x02, 0x00, 0xfe, 0xff, 0xcf, 0x33, 0xfe, 0x3f, 0xff, 0xf9, 0xff,
- 0x7f, 0xfe, 0xff, 0xff, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0xff, 0x02, 0x00, 0xfe, 0xff, 0xcf, 0x07, 0xff, 0x3f, 0xff,
- 0xf9, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0x02, 0x00, 0xfe, 0xff, 0xcf, 0xcf, 0xff,
- 0x3f, 0xff, 0xf9, 0xff, 0x7f, 0xfe, 0x7f, 0xff, 0x3f, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x02, 0x40, 0xfe, 0xff, 0xcf,
- 0xff, 0xff, 0x3f, 0xff, 0xf9, 0xff, 0x7f, 0xfe, 0x7f, 0xfe, 0x3f, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x02, 0x3c, 0xff,
- 0xff, 0xc7, 0xff, 0xff, 0x3f, 0xff, 0xf9, 0xff, 0x7f, 0xfe, 0x7f, 0xfe,
- 0x7f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x82,
- 0x87, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x3f, 0xff, 0xf1, 0xff, 0x7f, 0xfe,
- 0x3f, 0xfc, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
- 0xff, 0x72, 0xf0, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x3f, 0xff, 0xf1, 0xff,
- 0x7f, 0xfe, 0xbf, 0xf8, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0xff, 0x0e, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x9f, 0xff,
- 0xf5, 0xff, 0x7f, 0xfe, 0xbf, 0xf8, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff,
- 0x9f, 0xff, 0xf5, 0xff, 0x7f, 0xfe, 0x9f, 0xf0, 0xff, 0x0b, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7,
- 0xff, 0xff, 0x9f, 0xff, 0xf5, 0xff, 0x7f, 0xfe, 0x5f, 0xf0, 0xff, 0x13,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf3, 0xff, 0xff, 0xdf, 0xff, 0xf5, 0xff, 0x7f, 0xfe, 0x4f, 0xe0,
- 0xff, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xe5, 0xff, 0x7f, 0xfe,
- 0x2f, 0xe0, 0xff, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xe5, 0xff,
- 0x7f, 0xfe, 0x2f, 0xc0, 0xff, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xe7, 0xff,
- 0xe5, 0xff, 0x7f, 0xfe, 0x2f, 0xc0, 0xff, 0x9f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, 0xff, 0xff,
- 0xe7, 0xff, 0xe5, 0xff, 0x7f, 0xfe, 0x2f, 0x80, 0xff, 0x9f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc,
- 0xff, 0xff, 0xf7, 0xff, 0xe5, 0xff, 0x7f, 0xfe, 0x2f, 0x00, 0xff, 0x3f,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x1f, 0xfe, 0xff, 0xff, 0xf3, 0xff, 0xc5, 0xff, 0x7f, 0xfe, 0x2f, 0x00,
- 0xff, 0x7f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xc5, 0xff, 0x7f, 0xfe,
- 0x2f, 0x00, 0xfe, 0x7f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x23, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xc5, 0xff,
- 0x7f, 0xfe, 0x2f, 0x00, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0xfe, 0xff, 0xff, 0xf5, 0xff,
- 0xc5, 0xff, 0x7f, 0xfe, 0x2f, 0x00, 0xfc, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x0c, 0xfc, 0xff, 0xff,
- 0xf4, 0xff, 0xc5, 0xff, 0x7f, 0xfe, 0x2f, 0x00, 0xfc, 0xff, 0x09, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x02, 0xfc,
- 0xff, 0x7f, 0xf2, 0xff, 0xc5, 0xff, 0x7f, 0xfe, 0x2f, 0x00, 0xf8, 0xff,
- 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x01,
- 0x00, 0xe0, 0xff, 0x3f, 0xf1, 0xff, 0x85, 0xff, 0x7f, 0xfe, 0x2f, 0x00,
- 0xf8, 0xff, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
- 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x85, 0xff, 0x7f, 0xfe,
- 0x2f, 0x00, 0xf0, 0xff, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
- 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x85, 0xff,
- 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/gs/contribs/bonk/bitmaps/bonkmiss b/lib/gs/contribs/bonk/bitmaps/bonkmiss
deleted file mode 100644
index 862e4839fc..0000000000
--- a/lib/gs/contribs/bonk/bitmaps/bonkmiss
+++ /dev/null
@@ -1,66 +0,0 @@
-#define bonkmiss_width 75
-#define bonkmiss_height 75
-static char bonkmiss_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x60, 0x80, 0x19, 0x3c, 0xc0, 0x83, 0xff, 0xf9, 0x01, 0x00, 0x60, 0x80,
- 0x19, 0x7e, 0xe0, 0x87, 0xff, 0xf9, 0x03, 0x00, 0xe0, 0xc0, 0x19, 0xe7,
- 0x70, 0x8e, 0x01, 0x18, 0x07, 0x00, 0xe0, 0xc0, 0x99, 0xc3, 0x39, 0x9c,
- 0x01, 0x18, 0x0e, 0x00, 0xe0, 0xe1, 0x99, 0x81, 0x19, 0x98, 0x01, 0x18,
- 0x0c, 0x00, 0xe0, 0xe1, 0x99, 0x81, 0x19, 0x98, 0x01, 0x18, 0x1c, 0x00,
- 0xe0, 0xf3, 0x99, 0x01, 0x18, 0x80, 0x01, 0x18, 0x18, 0x00, 0x60, 0xb3,
- 0x99, 0x01, 0x18, 0x80, 0x01, 0x18, 0x18, 0x00, 0x60, 0xb3, 0x99, 0x03,
- 0x38, 0x80, 0x01, 0x18, 0x18, 0x00, 0x60, 0x9e, 0x19, 0x07, 0x70, 0x80,
- 0x01, 0x18, 0x18, 0x00, 0x60, 0x9e, 0x19, 0x3e, 0xe0, 0x83, 0x1f, 0x18,
- 0x18, 0x00, 0x60, 0x8c, 0x19, 0x7c, 0xc0, 0x87, 0x1f, 0x18, 0x18, 0x00,
- 0x60, 0x80, 0x19, 0xe0, 0x00, 0x8e, 0x01, 0x18, 0x18, 0x00, 0x60, 0x80,
- 0x19, 0xc0, 0x01, 0x9c, 0x01, 0x18, 0x18, 0x00, 0x60, 0x80, 0x19, 0x80,
- 0x01, 0x98, 0x01, 0x18, 0x18, 0x00, 0x60, 0x80, 0x19, 0x80, 0x01, 0x98,
- 0x01, 0x18, 0x18, 0x00, 0x60, 0x80, 0x19, 0x80, 0x01, 0x98, 0x01, 0x18,
- 0x18, 0x00, 0x60, 0x80, 0x99, 0x81, 0x19, 0x98, 0x01, 0x18, 0x18, 0x00,
- 0x60, 0x80, 0x99, 0x81, 0x19, 0x98, 0x01, 0x18, 0x18, 0x00, 0x60, 0x80,
- 0x99, 0x81, 0x19, 0x98, 0x01, 0x18, 0x18, 0x00, 0x60, 0x80, 0x99, 0x81,
- 0x19, 0x98, 0x01, 0x18, 0x18, 0x00, 0x60, 0x80, 0x99, 0x81, 0x19, 0x98,
- 0x01, 0x18, 0x18, 0x00, 0x60, 0x80, 0x99, 0x81, 0x19, 0x98, 0x01, 0x18,
- 0x18, 0x00, 0x60, 0x80, 0x99, 0x81, 0x19, 0x98, 0x01, 0x18, 0x1c, 0x00,
- 0x60, 0x80, 0x99, 0x81, 0x19, 0x98, 0x01, 0x18, 0x0c, 0x00, 0x60, 0x80,
- 0x99, 0xc3, 0x39, 0x9c, 0x01, 0x18, 0x0e, 0x00, 0x60, 0x80, 0x19, 0xe7,
- 0x70, 0x8e, 0x01, 0x18, 0x07, 0x00, 0x60, 0x80, 0x19, 0x7e, 0xe0, 0x87,
- 0xff, 0xf9, 0x03, 0x00, 0x60, 0x80, 0x19, 0x3c, 0xc0, 0x83, 0xff, 0xf9,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0xff, 0x03, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0xff, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1c, 0x38, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1c, 0x38, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
- 0x3c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x36, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x6c, 0x36, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xcc, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc,
- 0x33, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x31, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
- 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
- 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x0c, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0c, 0x30, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
- 0x30, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/gs/contribs/bonk/bitmaps/bonktom b/lib/gs/contribs/bonk/bitmaps/bonktom
deleted file mode 100644
index defbc32cc9..0000000000
--- a/lib/gs/contribs/bonk/bitmaps/bonktom
+++ /dev/null
@@ -1,66 +0,0 @@
-#define bonktom_width 75
-#define bonktom_height 75
-static char bonktom_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/gs/contribs/bonk/bitmaps/bonkx b/lib/gs/contribs/bonk/bitmaps/bonkx
deleted file mode 100644
index 70cd89bdb7..0000000000
--- a/lib/gs/contribs/bonk/bitmaps/bonkx
+++ /dev/null
@@ -1,66 +0,0 @@
-#define bonkx_width 75
-#define bonkx_height 75
-static char bonkx_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x3e, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf0, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0x03, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01,
- 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xf0, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xe0, 0x0f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0xfe, 0x03,
- 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0xe0, 0x01, 0x3c, 0x00, 0xe0,
- 0x0f, 0x00, 0x00, 0x7f, 0x00, 0x18, 0x00, 0xc0, 0x00, 0xf0, 0x07, 0x00,
- 0x00, 0xfe, 0x00, 0x06, 0x00, 0x00, 0x03, 0xf8, 0x03, 0x00, 0x00, 0xfc,
- 0x81, 0x01, 0x00, 0x00, 0x0c, 0xfc, 0x01, 0x00, 0x00, 0xf8, 0x43, 0x00,
- 0x00, 0x00, 0x10, 0xfe, 0x00, 0x00, 0x00, 0xf0, 0x27, 0x00, 0x00, 0x00,
- 0x20, 0x7f, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0x3f,
- 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00,
- 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xff, 0x08,
- 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x31, 0x00, 0x60,
- 0xfc, 0x05, 0x00, 0x00, 0x00, 0x80, 0xf8, 0xc3, 0x00, 0x18, 0xfe, 0x08,
- 0x00, 0x00, 0x00, 0x80, 0xf7, 0x07, 0x03, 0x06, 0x7f, 0x0f, 0x00, 0x00,
- 0x00, 0x40, 0xff, 0x0f, 0x00, 0x80, 0xff, 0x17, 0x00, 0x00, 0x00, 0x40,
- 0xfe, 0x1f, 0x00, 0xc0, 0xff, 0x13, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xff,
- 0x03, 0xfe, 0xff, 0x20, 0x00, 0x00, 0x00, 0x20, 0xf0, 0xff, 0xff, 0xff,
- 0x7f, 0x20, 0x00, 0x00, 0x00, 0x20, 0xc0, 0xff, 0xdf, 0xff, 0x1f, 0x20,
- 0x00, 0x00, 0x00, 0x20, 0x00, 0xff, 0xdf, 0xff, 0x07, 0x20, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0xfe, 0x8f, 0xff, 0x03, 0x40, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0xf8, 0x8f, 0xff, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0xf0,
- 0x8f, 0x7f, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0xc0, 0xdf, 0x1f,
- 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0xff, 0x0f, 0x00, 0x40,
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xff, 0x07, 0x00, 0x40, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0x00, 0xfc, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0xe0,
- 0xfe, 0x3b, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x10, 0xf0, 0xff, 0x7f,
- 0x40, 0x40, 0x00, 0x00, 0x00, 0x10, 0x10, 0x80, 0xff, 0x0f, 0x40, 0x40,
- 0x00, 0x00, 0x00, 0x10, 0x10, 0xc0, 0xff, 0x1f, 0x40, 0x40, 0x00, 0x00,
- 0x00, 0x10, 0x30, 0xe0, 0x8f, 0x3f, 0x60, 0x40, 0x00, 0x00, 0x00, 0x10,
- 0x70, 0xf0, 0x07, 0x7f, 0x70, 0x40, 0x00, 0x00, 0x00, 0x10, 0xf0, 0xf9,
- 0x03, 0xfe, 0x7c, 0x40, 0x00, 0x00, 0x00, 0x20, 0xf0, 0xff, 0x01, 0xfc,
- 0x7f, 0x20, 0x00, 0x00, 0x00, 0x20, 0xf0, 0xff, 0x03, 0xfe, 0x7f, 0x20,
- 0x00, 0x00, 0x00, 0x20, 0xf0, 0x7f, 0xfe, 0xff, 0x7f, 0x20, 0x00, 0x00,
- 0x00, 0x20, 0xe0, 0x7f, 0xfe, 0xff, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x40,
- 0xe0, 0x7f, 0xfe, 0xff, 0x3f, 0x10, 0x00, 0x00, 0x00, 0x40, 0xe0, 0xff,
- 0xff, 0xff, 0x3f, 0x10, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xff, 0xff, 0xff,
- 0x7f, 0x08, 0x00, 0x00, 0x00, 0x80, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xfe, 0xff, 0xff, 0xfb, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0xfc, 0xff, 0xfc, 0xf1, 0x07, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xf0,
- 0xff, 0x7c, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0xc0, 0xff, 0x1c,
- 0xc0, 0x1f, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0xff, 0x07, 0xc0, 0x3f,
- 0x00, 0x00, 0x00, 0xf0, 0x27, 0x00, 0x00, 0x00, 0x20, 0x7f, 0x00, 0x00,
- 0x00, 0xf8, 0x43, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x00, 0x00, 0x00, 0xfc,
- 0x81, 0x01, 0x00, 0x00, 0x0c, 0xfc, 0x01, 0x00, 0x00, 0xfe, 0x00, 0x06,
- 0x00, 0x00, 0x03, 0xf8, 0x03, 0x00, 0x00, 0x7f, 0x00, 0x18, 0x00, 0xc0,
- 0x00, 0xf0, 0x07, 0x00, 0x80, 0x3f, 0x00, 0xe0, 0x01, 0x3c, 0x00, 0xe0,
- 0x0f, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0xfe, 0x03, 0x00, 0xc0, 0x1f, 0x00,
- 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0xf0, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xf8, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfc, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0x03, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03,
- 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x1e, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/gs/contribs/bonk/bitmaps/erl-e b/lib/gs/contribs/bonk/bitmaps/erl-e
deleted file mode 100644
index 41ad14f404..0000000000
--- a/lib/gs/contribs/bonk/bitmaps/erl-e
+++ /dev/null
@@ -1,106 +0,0 @@
-#define erl-e_width 108
-#define erl-e_height 88
-static char erl-e_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0xf7, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xf7, 0xfc, 0x7f, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x80, 0xff, 0xf7, 0xfc, 0x3f,
- 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf7,
- 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xf7, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xf7, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0xfe, 0xf7, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xfc, 0xf7, 0xfc, 0x0f, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xfc, 0xf7, 0xfc, 0x07,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xf8, 0xf7,
- 0xfc, 0x07, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00,
- 0xf8, 0xf7, 0xfc, 0x03, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0x00,
- 0x00, 0x00, 0xf8, 0xf7, 0xfc, 0x03, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0x0f, 0x00, 0x00, 0x00, 0xf0, 0xf7, 0xfc, 0x01, 0x00, 0x00, 0x00, 0xfc,
- 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0xf7, 0xfc, 0x01, 0x00, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0xf7, 0xfc, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0xf7,
- 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xf7, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xf7, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf7, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf7, 0x7c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf7, 0x7c, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf7,
- 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xe0, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf7, 0x3c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf7, 0x3c, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf7,
- 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf7, 0x3c, 0x00, 0x00, 0x00,
- 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x3c, 0x00,
- 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0x3c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x3c, 0x00, 0x00, 0x00,
- 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x3c, 0x00,
- 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0x3c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xfe,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x7c, 0x00, 0x00, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x7c, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
- 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0x7f, 0xfe, 0xff, 0xf7, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xf7, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xf7, 0xfc, 0x00, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xc0, 0xff, 0xf7, 0xfc, 0x01,
- 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xfe, 0xf7,
- 0xfc, 0x01, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
- 0xf8, 0xf7, 0xfc, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff,
- 0x03, 0x00, 0xe0, 0xf7, 0xfc, 0x03, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0x03, 0x00, 0xc0, 0xf7, 0xfc, 0x03, 0x00, 0x00, 0x00, 0xc0,
- 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x80, 0xf7, 0xfc, 0x07, 0x00, 0x00,
- 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x80, 0xf7, 0xfc, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x80, 0xf7,
- 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x1f, 0x00, 0x00,
- 0xc0, 0xf7, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x0f,
- 0x00, 0x00, 0xe0, 0xf7, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0xff, 0x07, 0x00, 0x00, 0xe0, 0xf7, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf0, 0xf7, 0xfc, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf8, 0xf7, 0xfc, 0x7f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0xfc, 0xf7,
- 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfc, 0xf7, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xfe, 0xf7, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xf7, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xf7, 0xfc, 0xff, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xf7, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0};
diff --git a/lib/gs/contribs/bonk/bitmaps/erl-text b/lib/gs/contribs/bonk/bitmaps/erl-text
deleted file mode 100644
index e20a9e5a28..0000000000
--- a/lib/gs/contribs/bonk/bitmaps/erl-text
+++ /dev/null
@@ -1,106 +0,0 @@
-#define erl-text_width 108
-#define erl-text_height 88
-static char erl-text_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0xfc, 0x03, 0xf8, 0x00, 0x70, 0x00, 0x80, 0x03, 0x80, 0x03, 0x07, 0x00,
- 0x3e, 0xf0, 0xfc, 0x03, 0xf8, 0x03, 0x70, 0x00, 0x80, 0x03, 0x80, 0x07,
- 0x07, 0x80, 0xff, 0xf0, 0xfc, 0x03, 0xf8, 0x07, 0x70, 0x00, 0xc0, 0x07,
- 0x80, 0x07, 0x07, 0xe0, 0xff, 0xf1, 0x1c, 0x00, 0x38, 0x07, 0x70, 0x00,
- 0xc0, 0x07, 0x80, 0x0f, 0x07, 0xe0, 0xc1, 0xf3, 0x1c, 0x00, 0x38, 0x0e,
- 0x70, 0x00, 0xe0, 0x0f, 0x80, 0x1f, 0x07, 0xf0, 0x80, 0xf3, 0x1c, 0x00,
- 0x38, 0x0f, 0x70, 0x00, 0xe0, 0x0e, 0x80, 0x1f, 0x07, 0x78, 0x00, 0xf0,
- 0xfc, 0x03, 0xf8, 0x07, 0x70, 0x00, 0xe0, 0x0e, 0x80, 0x3f, 0x07, 0x78,
- 0x00, 0xf0, 0xfc, 0x03, 0xf8, 0x03, 0x70, 0x00, 0x70, 0x1c, 0x80, 0x7b,
- 0x07, 0x38, 0x00, 0xf0, 0xfc, 0x03, 0xf8, 0x01, 0x70, 0x00, 0x70, 0x1c,
- 0x80, 0xf3, 0x07, 0x38, 0xf8, 0xf7, 0x1c, 0x00, 0xf8, 0x01, 0x70, 0x00,
- 0x70, 0x1c, 0x80, 0xe3, 0x07, 0x78, 0xf8, 0xf7, 0x1c, 0x00, 0xf8, 0x03,
- 0x70, 0x00, 0xf8, 0x3f, 0x80, 0xe3, 0x07, 0x70, 0x80, 0xf7, 0x1c, 0x00,
- 0xb8, 0x03, 0x70, 0x00, 0xf8, 0x3f, 0x80, 0xc3, 0x07, 0xf0, 0x80, 0xf3,
- 0xfc, 0x03, 0x38, 0x07, 0xf0, 0x07, 0x38, 0x38, 0x80, 0x83, 0x07, 0xe0,
- 0xe3, 0xf3, 0xfc, 0x03, 0x38, 0x07, 0xf0, 0x07, 0x1c, 0x70, 0x80, 0x83,
- 0x07, 0xc0, 0xff, 0xf1, 0xfc, 0x03, 0x38, 0x0e, 0xf0, 0x07, 0x1c, 0x70,
- 0x80, 0x03, 0x07, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0};
diff --git a/lib/gs/contribs/bonk/bonk.erl b/lib/gs/contribs/bonk/bonk.erl
deleted file mode 100644
index bbbc656b34..0000000000
--- a/lib/gs/contribs/bonk/bonk.erl
+++ /dev/null
@@ -1,584 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(bonk).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
--export([run/0, run/1,bonk_dir/0,start/0]).
-
--record(colors, {miss, x, bomb, face}).
--record(scores, {points, level, bombs, hits, showed, bonus}).
-
-start() ->
- spawn(bonk, run, []).
-
-run() ->
- run(color).
-
-run([ColorMode]) -> % This is for the start script...
- run(ColorMode);
-
-run(ColorMode) when is_atom(ColorMode) ->
- GS = gs:start(),
- SoundPid = spawn_link(bonk_sound,start,[]),
- {H,M,S} = time(),
- random:seed(H*13,M*7,S*3),
- {SqrPids, Bmps, Colors} = create_board(GS, ColorMode),
- {ScoreL,_File} = get_highscore(),
- display_highscore(ScoreL),
- put(colormode, ColorMode),
- SoundPid ! music,
- sleep(6500),
- gs:config(aboutButton, [{enable,true}]),
- gs:config(newButton, [{enable,true}]),
- gs:config(quitButton, [{enable,true}]),
- idle(SoundPid, SqrPids, Bmps, Colors).
-
-%% This is not an application so we don't have their way of knowing
-%% a private data directory where the GIF files are located (this directory).
-%% We can find GS and makes it relative from there /kgb
-%%
-%% Note the silly slash that is added. The rest of the code uses
-%% append to contruct file names and assumes that the directory ends
-%% in slash. If filename:join was used and the problem is gone.
-
--define(EbinFromGsPriv,"../contribs/bonk").
-
-bonk_dir() ->
- GsPrivDir = code:priv_dir(gs),
- filename:join(GsPrivDir,?EbinFromGsPriv) ++ "/".
-
-
-idle(SoundPid, SqrPids, Bmps, Colors) ->
- receive
- {gs, newButton, click, _Data, _Args} ->
- init(SoundPid, SqrPids, Bmps, Colors);
- {gs, aboutButton, click, _Data, _Args} ->
- display_about(),
- idle(SoundPid, SqrPids, Bmps, Colors);
- {gs, quitButton, click, _Data, _Args} ->
- SoundPid ! quit,
- send_to_all(SqrPids, quit);
- _Other ->
- %%io:format("Got ~w in idle~n", [_Other]),
- idle(SoundPid, SqrPids, Bmps, Colors)
- end.
-
-
-
-init(SoundPid, SqrPids, Bmps, Colors) ->
- clear_board(Bmps),
- SoundPid ! start,
- gs:config(newButton, [{enable,false}]),
- gs:config(endButton, [{enable,true}]),
- gs:config(aboutButton, [{enable,false}]),
- Scores = #scores{points=0, level=1, bombs=0, hits=0, showed=0, bonus=10},
- clear_scores(Scores),
- flush(),
- send_to_all(SqrPids, start),
- game(SoundPid, SqrPids, Bmps, Colors, Scores).
-
-
-game(SoundPid, SqrPids, Bmps, Colors, Scores) ->
- receive
- {gs, _Square, buttonpress, SqrPid, [1 | _Rest]} when is_pid(SqrPid) ->
- SqrPid ! bonk,
- game(SoundPid, SqrPids, Bmps, Colors, Scores);
- {gs, _Id, buttonpress, _Data, [Butt | _Rest]} when Butt =/= 1 ->
- NewScores = bomb(SoundPid, SqrPids, Scores),
- game(SoundPid, SqrPids, Bmps, Colors, NewScores);
- {show, Square, Rect} ->
- NewScores = show_face(Square, Rect, Colors, Scores),
- game(SoundPid, SqrPids, Bmps, Colors, NewScores);
- {hide, Square, Rect} ->
- NewScores = hide_face(Square, Rect, Colors, Scores),
- game(SoundPid, SqrPids, Bmps, Colors, NewScores);
- {missed, Square, Rect} ->
- case miss_face(SoundPid, Square, Rect, Colors, Scores) of
- {continue, NewScores} ->
- game(SoundPid, SqrPids, Bmps, Colors, NewScores);
- {game_over, NewScores} ->
- game_over(SoundPid, SqrPids, Bmps, Colors, NewScores)
- end;
- {bonked, Square, Rect} ->
- NewScores = bonked(SoundPid, SqrPids, Square, Rect, Scores, Colors),
- game(SoundPid, SqrPids, Bmps, Colors, NewScores);
- {bombed, Square, Rect} ->
- NewScores = bombed(SoundPid, SqrPids, Square, Rect, Scores, Colors),
- game(SoundPid, SqrPids, Bmps, Colors, NewScores);
- {gs, endButton, click, _Data, _Args} ->
- game_over(SoundPid, SqrPids, Bmps, Colors, Scores);
- {gs, quitButton, click, _Data, _Args} ->
- quit(SoundPid, SqrPids, Bmps, Colors, Scores);
- _Other ->
- game(SoundPid, SqrPids, Bmps, Colors, Scores)
- end.
-
-
-
-game_over(SoundPid, SqrPids, Bmps, Colors, Scores) ->
- SoundPid ! game_over,
- send_to_all(SqrPids, stop),
- flush(),
- sleep(2000),
- update_scorelist(SoundPid, Scores),
- gs:config(newButton, [{enable,true}]),
- gs:config(endButton, [{enable,false}]),
- gs:config(aboutButton, [{enable,true}]),
- idle(SoundPid, SqrPids, Bmps, Colors).
-
-
-quit(SoundPid, SqrPids, _Bmps, _Colors, _Scores) ->
- SoundPid ! quit,
- send_to_all(SqrPids, quit),
- true.
-
-
-
-bomb(SoundPid, SqrPids, Scores) ->
- case Scores#scores.bombs of
- Bombs when Bombs > 0 ->
- send_to_all(SqrPids, bomb),
- SoundPid ! bomb,
- gs:config(bombOut,[{text,integer_to_list(Bombs-1)}]),
- Scores#scores{bombs=Bombs-1};
- _Other ->
- Scores
- end.
-
-show_face(Square, Rect, Colors, Scores) ->
- Showed = Scores#scores.showed,
- if
- Showed == Scores#scores.level+1 ->
- Square ! sleep,
- Scores;
- true ->
- FaceColors = Colors#colors.face,
- FaceColor = lists:nth(random:uniform(length(FaceColors)), FaceColors),
- gs:config(Rect, [{bitmap,lists:append(bonk_dir(),"bitmaps/bonkface")},{fg, FaceColor}]),
- Scores#scores{showed=Showed+1}
- end.
-
-hide_face(_Square, Rect, _Colors, Scores) ->
- Showed = Scores#scores.showed,
- gs:config(Rect, [{bitmap,lists:append(bonk_dir(),"bitmaps/bonktom")}]),
- Scores#scores{showed=Showed-1}.
-
-
-miss_face(SoundPid, _Square, Rect, Colors, Scores) ->
- SoundPid ! missed,
- gs:config(Rect, [{bitmap,lists:append(bonk_dir(),"bitmaps/bonkmiss")}, {fg, Colors#colors.miss}]),
- Bonus = Scores#scores.bonus,
- if
- Bonus > 1 ->
- gs:config(bonusOut, [{text,integer_to_list(Bonus-1)}]),
- {continue, Scores#scores{bonus=Bonus-1}};
- true ->
- gs:config(bonusOut, [{text,"0"}]),
- {game_over, Scores}
- end.
-
-bonked(SoundPid, SqrPids, _Square, Rect, Scores, Colors) ->
- gs:config(Rect, [{bitmap,lists:append(bonk_dir(),"bitmaps/bonkx")}, {fg, Colors#colors.x}]),
- SoundPid ! bonk,
- update_score(SoundPid, SqrPids, Scores).
-
-bombed(SoundPid, SqrPids, _Square, Rect, Scores, Colors) ->
- gs:config(Rect, [{bitmap,lists:append(bonk_dir(),"bitmaps/bonkbomb")}, {fg, Colors#colors.bomb}]),
- update_score(SoundPid, SqrPids, Scores).
-
-
-update_score(SoundPid, SqrPids, Scores) ->
- Points = Scores#scores.points,
- Level = Scores#scores.level,
- NewPoints = Points+Level,
- gs:config(scoreOut,[{text,integer_to_list(NewPoints)}]),
- case Scores#scores.hits of
- 24 ->
- SoundPid ! new_level,
- NewLevel = Level+1,
- NewBombs = Scores#scores.bombs+1,
- send_to_all(SqrPids, {new_level, NewLevel}),
- gs:config(levelOut,[{text,integer_to_list(NewLevel)}]),
- gs:config(bombOut,[{text,integer_to_list(NewBombs)}]),
- Scores#scores{points=NewPoints, level=NewLevel, hits=0, bombs=NewBombs};
- Hits ->
- Scores#scores{points=NewPoints, hits=Hits+1}
- end.
-
-
-send_to_all([], _Msg) ->
- true;
-send_to_all([Pid|Rest],Msg) when is_pid(Pid) ->
- Pid ! Msg,
- send_to_all(Rest,Msg);
-send_to_all([_Else|Rest],Msg) ->
- send_to_all(Rest,Msg).
-
-
-create_board(GS, ColorMode) ->
- Colors =
- case ColorMode of
- bw -> #colors{miss=white, x=white, bomb=white, face=[white]};
- _Color -> #colors{miss=red, x=green, bomb=white,
- face=[lightblue, orange, magenta, peachpuff, pink]}
- end,
- BGCol = if ColorMode==bw -> black; true -> black end, % background color
- TextCol = if ColorMode==bw -> white; true -> pink end, % status texts
- NrCol = if ColorMode==bw -> white; true -> purple end, % status figures
- LogoCol = if ColorMode==bw -> white; true -> green end, % bonk logo
- BLineCol = if ColorMode==bw -> white; true -> grey end, % button line
- SLineCol = if ColorMode==bw -> white; true -> red end, % status line
- BTextCol = if ColorMode==bw -> white; true -> orange end, % button text
- HiHeadCol = if ColorMode==bw -> white; true -> red end, % high score label
- HiCol = if ColorMode==bw -> white; true -> cyan end, % high scores
- SquareCol = if ColorMode==bw -> white; true -> yellow end, % game squares
- ErlFgCol = if ColorMode==bw -> white; true -> red end, %
- ErlBGCol = if ColorMode==bw -> black; true -> white end, %
- ErlTxtCol = if ColorMode==bw -> white; true -> black end, %
-
- Width = 550, % width of bonk window
- Height = 550, % Height of bonk window
-
- BX = 0, % x-pos for first button
- DBX = 100, % space between buttons
- BY = 0, % y-pos for buttons
- BLineY = 30, % y-pos of button line
- LogoX = (Width-320) div 2, % x-pos of bonk logo (logo is 320 pix wide)
- LogoY = BLineY+2, % y-pos of bonk logo
- ErlLogoX = LogoX + 200, % x-pos of Erlang e
- ErlLogoY = LogoY + 10, % y-pos of Erlang e
- SLineY = Height-22, % status line position
- TextWidth = 50, % text width of status items
- SX = 2, % x-pos for first status item
- DSX = TextWidth+94, % pixels between status items
- SY = SLineY+2, % y-pos status items
- HiWidth = 100, % width of high score field
- _HiHeight = 180, % height of the same
- HiX = Width-HiWidth, % high score text position
- HiY = BLineY+10,
- DHY = 20, % space between title & scores
- SquareSize = 76, % size of each game square
- SquareSpace = 1, % space between game squares
- SquareX = 40,
- SquareY = 65,
-
- gs:create(window, bonkWin, GS, [{width, Width}, {height, Height},
- {bg, BGCol},
- {title, "Bonk the game"},
- {iconname, "Bonk!"},
- {map, false}]),
- gs:create(canvas, bonkCanvas, bonkWin, [{width, Width},
- {height, Height},
- {bg, BGCol}]),
- gs:create(image, bonkCanvas, [{bitmap,lists:append(bonk_dir(), "bitmaps/bonklogo")},
- {coords, [{LogoX, LogoY}]},
- {fg, LogoCol},
- {bg, BGCol}]),
- gs:create(image, bonkCanvas, [{bitmap,lists:append(bonk_dir(), "bitmaps/erl-e")},
- {coords, [{ErlLogoX, ErlLogoY}]},
- {fg, ErlFgCol},
- {bg, ErlBGCol}]),
- gs:create(image, bonkCanvas, [{bitmap,lists:append(bonk_dir(), "bitmaps/erl-text")},
- {coords, [{ErlLogoX, ErlLogoY}]},
- {fg, ErlTxtCol}]),
- gs:create(line, bLine, bonkCanvas, [{coords, [{0,BLineY}, {Width,BLineY}]},
- {fg, BLineCol},
- {width, 2}]),
- gs:create(line, bLine, bonkCanvas, [{coords, [{0,SLineY}, {Width, SLineY}]},
- {fg, SLineCol},
- {width, 2}]),
- gs:create(text, scoreText, bonkCanvas, [{coords, [{SX, SY}]},
- {fg, TextCol},
- {text, "Score:"}]),
- gs:create(text, scoreOut, bonkCanvas, [{coords, [{SX+TextWidth, SY}]},
- {fg, NrCol},
- {width, DSX-TextWidth},
- {text, ""}]),
- gs:create(text, bombText, bonkCanvas, [{coords, [{SX+DSX, SY}]},
- {fg, TextCol},
- {text, "Bombs:"}]),
- gs:create(text, bombOut, bonkCanvas, [{coords, [{SX+DSX+TextWidth, SY}]},
- {fg, NrCol},
- {width, DSX-TextWidth},
- {text, ""}]),
- gs:create(text, bonusText, bonkCanvas, [{coords, [{SX+2*DSX, SY}]},
- {fg, TextCol},
- {text, "Bonus:"}]),
- gs:create(text, bonusOut, bonkCanvas, [{coords, [{SX+2*DSX+TextWidth, SY}]},
- {fg, NrCol},
- {width, DSX-TextWidth},
- {text, ""}]),
- gs:create(text, levelText,bonkCanvas, [{coords, [{SX+3*DSX, SY}]},
- {fg, TextCol},
- {text, "Level:"}]),
- gs:create(text, levelOut, bonkCanvas, [{coords, [{SX+3*DSX+TextWidth, SY}]},
- {fg, NrCol},
- {width, DSX-TextWidth},
- {text, ""}]),
- gs:create(text, hiScoreText, bonkCanvas, [{coords, [{HiX, HiY}]},
- {fg, HiHeadCol},
- {text, "High Scores"}]),
- gs:create(text, hiScoreOut, bonkCanvas, [{coords, [{HiX, HiY+DHY}]},
- {fg, HiCol},
- {justify, left},
- {width, HiWidth}]),
- gs:create(button, newButton,bonkWin, [{x, BX},{y, BY},
- {enable,false},
- {label, {text, "New Game"}},
- {click, true},
- {fg, BTextCol},
- {bg, BGCol},
- {relief, flat},
- {activefg, BTextCol},
- {activebg, BGCol},
- {align, center}]),
- gs:create(button, endButton,bonkWin, [{x, BX+DBX},{y, BY},
- {enable,false},
- {label, {text, "End Game"}},
- {click, true},
- {fg, BTextCol},
- {bg, BGCol},
- {relief, flat},
- {activefg, BTextCol},
- {activebg, BGCol},
- {align, center}]),
- gs:create(button, aboutButton,bonkWin, [{x, BX+2*DBX},{y, BY},
- {enable,false},
- {label, {text, "About"}},
- {click, true},
- {fg, BTextCol},
- {bg, BGCol},
- {relief, flat},
- {activefg, BTextCol},
- {activebg, BGCol},
- {align, center}]),
- gs:create(button, quitButton, bonkWin, [{x, BX+3*DBX},{y, BY},
- {enable,false},
- {label, {text, "Quit"}},
- {click, true},
- {fg, BTextCol},
- {bg, BGCol},
- {relief, flat},
- {activefg, BTextCol},
- {activebg, BGCol},
- {align, center}]),
-
- {SqrPids, Bmps} =
- create_squares(SquareX, SquareY, SquareSize, SquareCol, SquareSpace),
- gs:config(bonkWin, [{map, true}]),
- {SqrPids, Bmps, Colors}.
-
-
-
-create_squares(X, Y, Size, Color, Spc) ->
- create_squares(X, Y, Size, Color, Spc, 1, 1, [], []).
-
-
-create_squares(_X, _Y, _Size, _Color, _Spc, 4, 5, Pids, Bmps) ->
- {Pids, Bmps};
-
-create_squares(X, Y, Size, Color, Spc, Row, 5, Pids, Bmps) ->
- create_squares(X, Y, Size, Color, Spc, Row+1, 1, Pids, Bmps);
-
-create_squares(X, Y, Size, Color, Spc, Row, Col, Pids, Bmps) ->
- Xpos = X+Col*Size+(Col-1)*Spc,
- Ypos = Y+Row*Size+(Row-1)*Spc,
- gs:create(rectangle, bonkCanvas,
- [{coords, [{Xpos,Ypos},{Xpos+Size, Ypos+Size}]},
- {bw, 2},{fg, Color},{buttonpress,true}]),
- Bmp = gs:create(image, bonkCanvas,
- [{coords, [{Xpos+1, Ypos+1}]},
- {bitmap,lists:append(bonk_dir(), "bitmaps/bonktom")},
- {buttonpress, true},{fg, Color}]),
- Pid = bonk_square:start(Bmp),
- gs:config(Bmp, [{data, Pid}]),
- create_squares(X, Y, Size, Color, Spc, Row, Col+1, [Pid|Pids], [Bmp|Bmps]).
-
-
-
-clear_board([]) ->
- true;
-clear_board([Square | Rest]) ->
- gs:config(Square, [{bitmap,lists:append(bonk_dir(), "bitmaps/bonktom")}]),
- clear_board(Rest).
-
-
-%% Prints the list on the screen.
-%% The list is on the form [[Score,Name],[Score,Name]..].
-
-display_highscore(ScoreList) ->
- display_highscore("",ScoreList,0).
-
-display_highscore(Scores,[],_N) ->
- gs:config(hiScoreOut,[{text,Scores}]);
-
-display_highscore(Scores,_ScoreList,10) -> % This is max number of items.
- display_highscore(Scores,[], 10);
-
-display_highscore(Scores,[[Score,Name]|Rest],N) ->
- NewScores = lists:append(Scores,lists:append(lists:append(Score, [32 | Name]), [10])),
- display_highscore(NewScores,Rest,N+1).
-
-
-%% Reads the highscorelist from the file "bonk.score".
-%% The list should be an sorted erlang-list.
-
-get_highscore() ->
- case file:consult("bonk.score") of
- {ok,[Score_list]} ->
- {Score_list,"./bonk.score"};
- {error,_} ->
- {[],"./bonk.score"}
- end.
-
-
-%% Prints out the highscorelist and places the new score in the
-%% list if it is high enough.
-
-update_scorelist(SoundPid, Scores) ->
- case Scores#scores.points of
- 0 -> true;
- Score ->
- {ScoreL,FileName} = get_highscore(),
- New_scorelist=update_scorelist_2(ScoreL, Score, 0, SoundPid),
- display_highscore(New_scorelist),
- case file:open(FileName, [write]) of
- {error,_} ->
- true;
- {ok,FD} ->
- io:format(FD,"~w~s~n",[New_scorelist,"."]),
- file:close(FD)
- end
- end.
-
-
-update_scorelist_2([], Score, N, _SoundPid) when N < 10 ->
- [[integer_to_list(Score),getuser()]];
-
-update_scorelist_2(_, _, N, _SoundPid) when N >= 10 ->
- [];
-
-update_scorelist_2([[Sc, Name] | Rest], Score, N, SoundPid) ->
- case list_to_integer(Sc) of
- Sc_int when Sc_int < Score ->
- if
- N == 0 -> SoundPid ! best_score;
- true -> SoundPid ! high_score
- end,
- lists:append([[integer_to_list(Score),getuser()]],
- update_scorelist_3([[Sc,Name]|Rest],N+1));
- _Other ->
- lists:append([[Sc,Name]],update_scorelist_2(Rest, Score, N+1, SoundPid))
- end.
-
-
-update_scorelist_3([],_) ->
- [];
-
-update_scorelist_3(_,N) when N >= 10 ->
- [];
-
-update_scorelist_3([Item|Rest],N) ->
- lists:append([Item],update_scorelist_3(Rest,N+1)).
-
-getuser() ->
- case os:type() of
- {unix,_} ->
- lists:delete(10,os:cmd("whoami"));
- _ ->
- "Unknown"
- end.
-
-%% Prints out the initial values of scores, bonus, level and bombs.
-
-clear_scores(Scores) ->
- Score = integer_to_list(Scores#scores.points),
- Bombs = integer_to_list(Scores#scores.bombs),
- Bonus = integer_to_list(Scores#scores.bonus),
- Level = integer_to_list(Scores#scores.level),
- gs:config(scoreOut,{text,Score}),
- gs:config(bombOut,{text,Bombs}),
- gs:config(bonusOut,{text,Bonus}),
- gs:config(levelOut,{text,Level}).
-
-
-%% Removes everything that is present in the message-que.
-
-flush() ->
- receive
- _X ->
- flush()
- after
- 0 ->
- true
- end.
-
-sleep(X) ->
- receive after X -> true end.
-
-%% Opens a window and shows the contents of the file: "bonk.txt".
-%% The window will be removed before the function ends.
-
-display_about() ->
- {BGColor,TextColor,Bfg} =
- case get(colormode) of
- bw -> {black, white, white};
- _Color -> {black, peachpuff1, orange}
- end,
- Wid = 500, Hei = 635,
- GS = gs:start(),
- gs:create(window, aboutWin, GS, [{width, Wid}, {height,Hei},
- {map, false},
- {bg, BGColor},
- {title, "About Bonk!"}]),
- gs:create(canvas, aboutCan, aboutWin, [{width, Wid},{height, Hei},
- {bg, black}]),
- gs:create(button, okButton, aboutWin, [{x, Wid div 2 - 50},{y, Hei - 40},
- {label,{text, "Ok"}}, {click, true},
- {fg, Bfg}, {bg, BGColor},
- {relief, flat},
- {activefg, Bfg},
- {activebg, BGColor}]),
- gs:create(text, aboutText, aboutCan, [{width, Wid-30}, {coords, [{15, 0}]},
- {fg, TextColor}, {justify, center}]),
- case file:open(lists:append(bonk_dir(),"bonk.txt"), [read]) of
- {ok, Fd} ->
- write_text(Fd, "", io:get_line(Fd, "")),
- file:close(Fd);
- {error, _Reason} ->
- gs:config(aboutText, {text, "Error: could not read the about file"})
- end,
-
- gs:config(aboutWin, [{map,true}]),
- receive
- {gs, okButton, click, _, _} ->
- gs:destroy(aboutWin)
- end.
-
-write_text(_Fd, Text, eof) ->
- gs:config(aboutText, {text, Text});
-write_text(Fd, Text, More) ->
- write_text(Fd, lists:append(Text, More), io:get_line(Fd, "")).
diff --git a/lib/gs/contribs/bonk/bonk.gif b/lib/gs/contribs/bonk/bonk.gif
deleted file mode 100644
index 3c2299686b..0000000000
--- a/lib/gs/contribs/bonk/bonk.gif
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/bonk.tool b/lib/gs/contribs/bonk/bonk.tool
deleted file mode 100644
index 79ad8f6701..0000000000
--- a/lib/gs/contribs/bonk/bonk.tool
+++ /dev/null
@@ -1,6 +0,0 @@
-{version,"0.1"}.
-{{tool,"Bonk"},
- {start,{bonk,start,[]}},
- {icon,"bonk.gif"},
- {message,"Bonk - The Game"},
- {html,"../bonk/bonk.txt"}}.
diff --git a/lib/gs/contribs/bonk/bonk.txt b/lib/gs/contribs/bonk/bonk.txt
deleted file mode 100644
index 69c912dbee..0000000000
--- a/lib/gs/contribs/bonk/bonk.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-BONK! In Erlang for You
-by
-LENNART OHMAN & MARCUS ARENDT
-
-After an idea of Mike Darweesh.
-Special thanks to Peter Jansson for creating the bitmaps.
-Ported to GS 1.1 by Markus Torpvret and Anders Dahlin.
-
-
-INSTRUCTIONS
-- Hit as many creatures as possible using the left mouse-button.
-- After every 25 hits You will advance one level. For each level You get one bomb.
-- Pushing the middle or right mouse-button, in any square, drops a bomb which
-wipes out everything.
-- The game ends when 10 creatures has escaped from beeing bonked.
-
-
-ABOUT ERLANG
-Erlang is a programming language for building robust concurrent systems. It is a single assignment, symbolic language with built in concurrency. It provides unique facilities for error handling and for reloading updated modules in running systems. Erlang was designed and implemented by Joe Armstrong, Robert Virding, and Mike Williams at Ellemtel (now Ericsson Utvecklings AB).
-
-Please make enquiries about Erlang to:
-
-Ericsson Software Technology AB
-Erlang Systems
-Torshamnsgatan 39B
-Box 1214
-164 28 Kista
-Sweden
-
-http://www.ericsson.se/erlang \ No newline at end of file
diff --git a/lib/gs/contribs/bonk/bonk_sound.erl b/lib/gs/contribs/bonk/bonk_sound.erl
deleted file mode 100644
index 9a0db80e5d..0000000000
--- a/lib/gs/contribs/bonk/bonk_sound.erl
+++ /dev/null
@@ -1,82 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(bonk_sound).
--export([start/0]).
-
-start() ->
- random:seed(),
- sounder:start(),
- {ok,Bonk}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/bonk.au")),
- {ok,Ouch}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/ouch!!!.au")),
- {ok,Damn}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/damn.au")),
- {ok,Bomb}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/explosion.au")),
- {ok,Missed}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/missedme.au")),
- {ok,Game_over}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/gameover.au")),
- {ok,New_level}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/level.au")),
- {ok,Music}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/trumpet.au")),
- {ok,Start}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/hehee.au")),
- {ok,BestS}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/praisejesus.au")),
- {ok,HighS}=sounder:new(lists:append(bonk:bonk_dir(),"sounds/yes.au")),
- loop(Bonk, Ouch, Damn, Bomb, Missed, Game_over, New_level,
- Music, Start, BestS, HighS).
-
-
-loop(Bonk, Ouch, Damn, Bomb, Missed, Game_over, New_level, Music, Start, BestS, HighS) ->
- R=random:uniform(1000),
- receive
- bonk ->
- if
- R < 75 -> play_sound(Damn);
- R < 275 -> play_sound(Ouch);
- true -> play_sound(Bonk)
- end;
- bomb -> play_sound(Bomb);
- missed -> play_sound(Missed);
- game_over -> play_sound(Game_over);
- new_level -> play_sound(New_level);
- music -> play_sound(Music);
- start -> play_sound(Start);
- best_score -> play_sound(BestS);
- high_score -> play_sound(HighS);
- quit ->
- sounder:stop(),
- exit(normal)
- end,
- loop(Bonk, Ouch, Damn, Bomb, Missed, Game_over, New_level, Music, Start, BestS, HighS).
-
-play_sound(Snd) ->
- case catch sounder:play(Snd) of
- {'EXIT', _Reason} ->
- io:format("Cannot use audio device!\n"),
- sounder:stop(),
- silent_loop();
- _Other ->
- true
- end.
-
-silent_loop() ->
- receive
- quit ->
- exit(normal);
- _Other ->
- silent_loop()
- end.
diff --git a/lib/gs/contribs/bonk/bonk_square.erl b/lib/gs/contribs/bonk/bonk_square.erl
deleted file mode 100644
index 98af91944b..0000000000
--- a/lib/gs/contribs/bonk/bonk_square.erl
+++ /dev/null
@@ -1,146 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(bonk_square).
--export([start/1,init/5,alarm/3]).
-
-
-
-start(Bmp) ->
- spawn_link(bonk_square, init, [Bmp, self(),
- random:uniform(10000),
- random:uniform(10000),
- random:uniform(10000)]).
-
-init(Bmp, BoardPid, Seed1, Seed2, Seed3) ->
- random:seed(Seed1,Seed2,Seed3),
- idle(Bmp, BoardPid).
-
-
-idle(Bmp, BoardPid) ->
- receive
- start ->
- Level = 1,
- sleep(Level, Bmp, BoardPid, alarm(sleep_time(Level), wake_up));
- quit ->
- exit(normal);
- _Other ->
- idle(Bmp, BoardPid)
- end.
-
-
-sleep(Level, Bmp, BoardPid, Alarm) ->
- receive
- stop ->
- Alarm ! quit,
- idle(Bmp, BoardPid);
- quit ->
- Alarm ! quit,
- exit(normal);
- {new_level, NewLevel} ->
- sleep(NewLevel, Bmp, BoardPid, Alarm);
- {Alarm, wake_up} ->
- show_me(BoardPid, Bmp),
- show(Level, Bmp, BoardPid, alarm(2500, missed));
- _Other ->
- sleep(Level, Bmp, BoardPid, Alarm)
- end.
-
-
-show(Level, Bmp, BoardPid, Alarm) ->
- receive
- stop ->
- Alarm ! quit,
- idle(Bmp, BoardPid);
- quit ->
- Alarm ! quit,
- exit(normal);
- {new_level, NewLevel} ->
- show(NewLevel, Bmp, BoardPid, Alarm);
- sleep -> % The board was too crowded.
- Alarm ! quit,
- sleep(Level, Bmp, BoardPid, alarm(sleep_time(Level), wake_up));
- bonk ->
- bonk_me(BoardPid, Bmp),
- Alarm ! quit,
- bbmed(Level, Bmp, BoardPid, alarm(1500, hide));
- bomb ->
- bomb_me(BoardPid, Bmp),
- Alarm ! quit,
- bbmed(Level, Bmp, BoardPid, alarm(1000, hide));
- {Alarm, missed} ->
- missed_me(BoardPid, Bmp),
- bbmed(Level, Bmp, BoardPid, alarm(1500, hide));
- _Other ->
- show(Level, Bmp, BoardPid, Alarm)
- end.
-
-%% bonked, bombed or missed
-bbmed(Level, Bmp, BoardPid, Alarm) ->
- receive
- stop ->
- Alarm ! quit,
- idle(Bmp, BoardPid);
- quit ->
- Alarm ! quit,
- exit(normal);
- {new_level, NewLevel} ->
- bbmed(NewLevel, Bmp, BoardPid, Alarm);
- {Alarm, hide} ->
- hide_me(BoardPid, Bmp),
- sleep(Level, Bmp, BoardPid, alarm(sleep_time(Level), wake_up));
- _Other ->
- bbmed(Level, Bmp, BoardPid, Alarm)
- end.
-
-
-show_me(BoardPid, Bmp) ->
- BoardPid ! {show, self(), Bmp}.
-
-hide_me(BoardPid, Bmp) ->
- BoardPid ! {hide, self(), Bmp}.
-
-bonk_me(BoardPid, Bmp) ->
- BoardPid ! {bonked, self(), Bmp}.
-
-bomb_me(BoardPid, Bmp) ->
- BoardPid ! {bombed, self(), Bmp}.
-
-missed_me(BoardPid, Bmp) ->
- BoardPid ! {missed, self(), Bmp}.
-
-
-%% Count sleep time
-
-sleep_time(Level) ->
- random:uniform((19000 div (Level+1))*2+1500).
-
-%% Set an alarm
-
-alarm(Time, Msg) ->
- spawn(bonk_square, alarm, [Time, Msg, self()]).
-
-alarm(Time, Msg, Pid) ->
- receive
- quit -> exit(normal)
- after
- Time -> Pid ! {self(), Msg}
- end.
diff --git a/lib/gs/contribs/bonk/sounder.erl b/lib/gs/contribs/bonk/sounder.erl
deleted file mode 100644
index aabcaa1950..0000000000
--- a/lib/gs/contribs/bonk/sounder.erl
+++ /dev/null
@@ -1,160 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(sounder).
--export([start/0,play/1,new/1,go/0,stop/0,nosound/0,silent/0]).
--include_lib("kernel/include/file.hrl").
-%%----------------------------------------------------------------------
-%% sounder.erl - An interface to /dev/audio
-%%
-%% Created by: {lennarto,mike}@erix.ericsson.se
-%% Modified by: EV,[email protected]
-%%
-%% Mod: 6 Jun 1996 by [email protected]
-%% The executable sounder will no be looked for in the
-%% same directory as from where sounder.jam is loaded.
-%%
-%%
-%% start() - Returns either: ok ,or: silent ,where silent means
-%% that no audio capabilities exists but the sounder
-%% will work "silently" in order to not break any code.
-%%
-%% stop() - Returns: ok
-%%
-%% new(File) - Tries to load the File. At success, a number refering
-%% to the File is returned that shall be used with send/1.
-%% Otherwise {error,Reason} is returned.
-%%
-%% play(No) - Tries to execute the sound registered with the number No
-%% Returns: ok , or: {error,Reason}
-%%
-%% silent() - Returns: true ,if no audio capabilities exists, else: false
-%%
-%% Note: It is also possible to receive: {error,sounder_not_started}
-%%
-%%----------------------------------------------------------------------
-
-start() ->
- case whereis(sounder) of
- undefined ->
- %% first we check if the workstation has audio capabilities
- case file:read_file_info('/dev/audio') of
- {ok, FI} when FI#file_info.access==read_write ->
- register(sounder, spawn(sounder,go,[])),
- ok;
- _Other ->
- register(sounder, spawn(sounder,nosound,[])),
- silent
- end;
- _Pid ->
- ok
- end.
-
-stop() ->
- catch begin check(),
- sounder ! {stop},
- ok end.
-
-new(File) when is_list(File) -> new(list_to_atom(File));
-new(File) when is_atom(File) ->
- catch begin check(),
- sounder ! {new,File,self()},
- wait_for_ack(sounder) end.
-
-play(No) when is_integer(No) ->
- catch begin check(),
- sounder ! {play, No, self()},
- wait_for_ack(sounder) end.
-
-silent() ->
- catch begin check(),
- sounder ! {play,silent,self()},
- receive {sounder,Answer} -> Answer end end.
-
-go() ->
- Port = open_port({spawn,lists:append(bonk:bonk_dir(), "sounder")},[{packet, 2}]),
- loop(Port).
-
-loop(Port) ->
- receive
- {new, File, From} when is_atom(File) ->
- Port ! {self(),{command,lists:append([0],atom_to_list(File))}},
- From ! {sounder,wait_for_ack(Port)},
- loop(Port);
- {play,silent,From} ->
- From ! {sounder,false},
- loop(Port);
- {play,No,From} when is_integer(No) ->
- Port ! {self(),{command,[No]}},
- From ! {sounder,wait_for_ack(Port)},
- loop(Port);
- {stop} ->
- Port ! {self(),close},
- exit(normal);
- _ ->
- loop(Port)
- end.
-
-%% The application using sounds can check on silence itself
-%% and refrain from playing sounds.
-%% Or it can try to play sounds that will be "consumed in silence"
-
-nosound() ->
- receive
- {new,File,From} when is_atom(File) ->
- From ! {sounder,{ok,silent}},
- nosound();
- {play,silent,From} ->
- From ! {sounder,true},
- nosound();
- {play,No,From} when is_integer(No) ->
- From ! {sounder,{error,no_audio_cap}},
- nosound();
- {stop} ->
- exit(normal);
- _ ->
- nosound()
- end.
-
-wait_for_ack(sounder) ->
- receive {sounder,Res} -> Res end;
-wait_for_ack(Port) when is_port(Port) ->
- receive
- {Port,{data,"ok"}} ->
- ok;
- {Port,{data,[No]}} ->
- {ok,No};
- {Port,{data,Msg}} ->
- {error,list_to_atom(Msg)};
- {'EXIT',Port,_} ->
- exit(port_exited)
- end.
-
-check() ->
- case whereis(sounder) of
- Pid when is_pid(Pid) ->
- ok;
- undefined ->
- throw({error,sounder_not_started})
- end.
-
-
-
diff --git a/lib/gs/contribs/bonk/sounds/bonk.au b/lib/gs/contribs/bonk/sounds/bonk.au
deleted file mode 100644
index 5e6518898b..0000000000
--- a/lib/gs/contribs/bonk/sounds/bonk.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/damn.au b/lib/gs/contribs/bonk/sounds/damn.au
deleted file mode 100644
index 6117506fb4..0000000000
--- a/lib/gs/contribs/bonk/sounds/damn.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/explosion.au b/lib/gs/contribs/bonk/sounds/explosion.au
deleted file mode 100644
index 78a6964f1a..0000000000
--- a/lib/gs/contribs/bonk/sounds/explosion.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/gameover.au b/lib/gs/contribs/bonk/sounds/gameover.au
deleted file mode 100644
index ca7628f3c6..0000000000
--- a/lib/gs/contribs/bonk/sounds/gameover.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/hehee.au b/lib/gs/contribs/bonk/sounds/hehee.au
deleted file mode 100644
index 10cd16b596..0000000000
--- a/lib/gs/contribs/bonk/sounds/hehee.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/level.au b/lib/gs/contribs/bonk/sounds/level.au
deleted file mode 100644
index 0508c2a6ae..0000000000
--- a/lib/gs/contribs/bonk/sounds/level.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/missedme.au b/lib/gs/contribs/bonk/sounds/missedme.au
deleted file mode 100644
index 4c07c9d428..0000000000
--- a/lib/gs/contribs/bonk/sounds/missedme.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/music.au b/lib/gs/contribs/bonk/sounds/music.au
deleted file mode 100644
index ead6ec79b2..0000000000
--- a/lib/gs/contribs/bonk/sounds/music.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/ouch!!!.au b/lib/gs/contribs/bonk/sounds/ouch!!!.au
deleted file mode 100644
index 78bcf48074..0000000000
--- a/lib/gs/contribs/bonk/sounds/ouch!!!.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/praisejesus.au b/lib/gs/contribs/bonk/sounds/praisejesus.au
deleted file mode 100644
index e299bf66d6..0000000000
--- a/lib/gs/contribs/bonk/sounds/praisejesus.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/trumpet.au b/lib/gs/contribs/bonk/sounds/trumpet.au
deleted file mode 100644
index 2f551b436a..0000000000
--- a/lib/gs/contribs/bonk/sounds/trumpet.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/bonk/sounds/yes.au b/lib/gs/contribs/bonk/sounds/yes.au
deleted file mode 100644
index c1ce7dfb69..0000000000
--- a/lib/gs/contribs/bonk/sounds/yes.au
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/cols/Makefile b/lib/gs/contribs/cols/Makefile
deleted file mode 100644
index 34a900e5ab..0000000000
--- a/lib/gs/contribs/cols/Makefile
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(GS_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/gs-$(VSN)/contribs
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- cols \
- highscore
-
-HRL_FILES=
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=../ebin/%.$(EMULATOR)) $(TARGET_TOOLBOX_FILES)
-
-TOOLNAME = cols
-
-EXTRA_FILES=
-TOOLBOX_FILES= $(TOOLNAME).tool $(TOOLNAME).gif help.gif
-TARGET_TOOLBOX_FILES= $(TOOLBOX_FILES:%=$(EBIN)/%)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-docs:
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f core
-
-# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-
-$(EBIN)/$(TOOLNAME).gif: $(TOOLNAME).gif
- $(gen_verbose)rm -f $@
- $(V_at)cp $(TOOLNAME).gif $@
-
-$(EBIN)/$(TOOLNAME).tool: $(TOOLNAME).tool
- $(gen_verbose)rm -f $@
- $(V_at)cp $(TOOLNAME).tool $@
-
-$(EBIN)/help.gif: help.gif
- $(gen_verbose)rm -f $@
- $(V_at)cp help.gif $@
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
- $(INSTALL_DIR) "$(RELSYSDIR)/cols/bitmaps"
- $(INSTALL_DATA) $(BITMAPS) $(TOOLBOX_FILES) "$(RELSYSDIR)/cols/bitmaps"
- $(INSTALL_DIR) "$(RELSYSDIR)/cols"
- $(INSTALL_DATA) $(ERL_FILES) $(EXTRA_FILES) "$(RELSYSDIR)/cols"
-
-release_docs_spec:
-
diff --git a/lib/gs/contribs/cols/cols.erl b/lib/gs/contribs/cols/cols.erl
deleted file mode 100644
index 265f2b6ee8..0000000000
--- a/lib/gs/contribs/cols/cols.erl
+++ /dev/null
@@ -1,625 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(cols).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
--export([start/0, init/0]).
-
-%% internal export.
--export([make_board_elem/3]).
-
-%%======================================================================
-%% Contents
-%%=====================
-%% 1. The actual program
-%% 2. Graphics
-%% 3. Data structures and stuff
-%% 4. Lambdas
-%%======================================================================
-
-
--define(COLORS, {red,green,blue,grey,yellow,{66,153,130}}).
--define(HIGHFILE, "./cols.high").
--define(HEIGHT, 17).
--define(LEFT, 50).
--define(SIZE, 15).
--define(VERSION, "v0.9").
--define(WIDTH, 8).
-
--record(state, {bit,board,nextbit,ticks, score=0}).
-%%----------------------------------------------------------------------
-%% Consists of three boxes.
-%%----------------------------------------------------------------------
--record(bit, {x,y,topColor, middleColor, bottomColor,
- top_gsobj,mid_gsobj,bot_gsobj}).
-
-%%======================================================================
-%% 1. The actual program
-%%======================================================================
-
-start() ->
- spawn_link(cols,init,[]).
-
-init() ->
- make_graphics(),
- {A,B,C} = erlang:now(),
- random:seed(A,B,C),
- NextBit = make_bit(),
- Board = make_screen_board(),
- S = #state{bit=make_bit(), board=Board, ticks=update_timer(1),
- score=make_score(), nextbit=new_bit_xy(NextBit, -2,5)},
- gs:config(win, [{map, true}]),
- loop(S).
-
-make_graphics() ->
- G = gs:start(),
- H = ?HEIGHT*?SIZE,
- W = ?WIDTH*?SIZE,
- BotMargin = 100,
- gs:create(window, win, G, [{destroy,true},{map, true},{title, "cols"},
- {height, H+BotMargin}, {width, W+?LEFT+10},
- {bg, grey},{keypress,true}]),
- gs:create(canvas, can, win, [{bg, black},
- {height, H+BotMargin},
- {width, W+?LEFT+20}]),
- gs:create(text, can, [{text, "Next"}, {coords, [{5, 45}]}, {fg, red}]),
- gs:create(image, help, can, [{coords,[{5,7}]},
- {load_gif, dir() ++ "/help.gif"},
- {buttonpress,true}]),
- draw_borders().
-
-loop(State) ->
- receive
- Event -> loop(update(Event, State))
- end.
-
-%%----------------------------------------------------------------------
-%% How fast speed should be doubled
-%%----------------------------------------------------------------------
--define(DBL_TICKS, 300).
-
-update_timer(Ticks) ->
- K = 0.001/?DBL_TICKS,
- M = 1.001-K,
- Q = K*Ticks+M,
- Timeout = round(1/math:log(Q)),
- timer:send_after(Timeout, self(), fall_timeout),
- Ticks+1.
-
-add_score({ScoreObj, NScore}, DScore) ->
- NScore2 = NScore + DScore,
- gs:config(ScoreObj, [{text, io_lib:format("Score: ~w", [NScore2])}]),
- {ScoreObj, NScore2}.
-
-
-update({gs,_Obj,keypress,_Data, ['Left'|_]}, State) ->
- #state{bit=Bit, board = Board} = State,
- #bit{x=X,y=Y} = Bit,
- if X > 0 ->
- case is_board_empty(Board, X-1,Y) of
- true ->
- State#state{bit=new_bit_xy(Bit, X-1, Y)};
- false ->
- State
- end;
- true -> State
- end;
-
-update({gs,_Obj,keypress,_Data, ['Right'|_]}, State) ->
- #state{bit=Bit, board = Board} = State,
- #bit{x=X,y=Y} = Bit,
- if X < ?WIDTH - 1 ->
- case is_board_empty(Board, X+1, Y) of
- true ->
- State#state{bit=new_bit_xy(Bit, X+1, Y)};
- false ->
- State
- end;
- true -> State
- end;
-
-update({gs,_Obj,keypress,_Data, ['Up'|_]}, State) ->
- State#state{bit=shift_bits(State#state.bit)};
-
-update({gs,_Obj,keypress,_Data, [Key|_]}, State) ->
- case drop_key(Key) of
- true ->
- #state{bit=Bit, board=Board, score=Score} = State,
- #bit{x=X,y=Y} = Bit,
- {NewX, NewY, NewScore} = drop(X,Y,Score,Board),
- fasten_bit(State#state{bit=new_bit_xy(Bit,NewX, NewY),
- score=NewScore});
- false -> State
- end;
-
-update(fall_timeout, State) ->
- #state{bit=Bit, board=Board, ticks = Ticks, score=Score} = State,
- NewY = Bit#bit.y+1,
- X = Bit#bit.x,
- case is_fall_ok(Board, X, NewY) of
- true ->
- State#state{bit=new_bit_xy(Bit, X, NewY),
- ticks=update_timer(Ticks), score=add_score(Score, 1)};
- false ->
- S1 = fasten_bit(State),
- S1#state{ticks=update_timer(Ticks)}
- end;
-
-update({gs,_,destroy,_,_}, _State) ->
- exit(normal);
-
-update({gs,help,buttonpress,_,_}, State) ->
- show_help(),
- State;
-
-update(OtherEvent, State) ->
- ok=io:format("got other! ~w~n", [OtherEvent]), State.
-
-drop_key('Down') -> true;
-drop_key(space) -> true;
-drop_key(_) -> false.
-
-is_board_empty(Board, X, Y) ->
- case {color_at(Board, X, Y),
- color_at(Board, X, Y + 1),
- color_at(Board, X, Y + 2)} of
- {black, black, black} -> true;
- _ -> false
- end.
-
-%%----------------------------------------------------------------------
-%% Returns: NewState
-%%----------------------------------------------------------------------
-fasten_bit(State) ->
- #state{board=Board, bit=Bit, nextbit=NextBit, score=Score} = State,
- #bit{x=X,y=Y,topColor=C1,middleColor=C2,bottomColor=C3} = Bit,
- B1 = update_screen_element(Board, X, Y, C1),
- B2 = update_screen_element(B1, X, Y+1, C2),
- B3 = update_screen_element(B2, X, Y+2, C3),
- destroy_bit(Bit),
- #bit{topColor=NC1,middleColor=NC2,bottomColor=NC3} = NextBit,
- {B4, ExtraScore} = erase_bits(B3, [{X,Y},{X,Y+1},{X,Y+2}], 0),
- NewBit = make_bit(NC1,NC2,NC3),
- case is_board_empty(B4, NewBit#bit.x, NewBit#bit.y) of
- true ->
- State#state{score=add_score(Score, ExtraScore),
- bit=NewBit, nextbit=new_colors(NextBit),board=B4};
- false ->
- {_GsObj,Score2}=State#state.score,
- highscore:run(Score2,?HIGHFILE),
- exit(normal)
- end.
-
-%%----------------------------------------------------------------------
-%% Args: Check: list of {X,Y} to check.
-%% Returns: {NewBoard, ExtraScore}
-%%----------------------------------------------------------------------
-erase_bits(Board, Checks, ExtraScore) ->
- ElemsToDelete = elems2del(Checks,Board,[]),
- NDel = length(ElemsToDelete),
- if
- NDel > 0 ->
- Board2 = delete_elems(Board, ElemsToDelete),
- {NewBoard, NewCheck} = fall_down(Board2, ElemsToDelete),
- if NDel > 3 ->
- {B,ES}=erase_bits(NewBoard,NewCheck,ExtraScore+2*NDel),
- {NewBoard2, NewCheck2} = bonus(B, NewCheck),
- erase_bits(NewBoard2, NewCheck2, ES);
- true ->
- erase_bits(NewBoard, NewCheck, 2*NDel)
- end;
- true -> {Board, ExtraScore}
- end.
-
-bonus(Board, Check) ->
- Cols = collect_bottom_bits(0,Board),
- NewBoard = randomize_columns(5, Board, Cols),
- NewCheck = update_check(Check, Cols),
- {NewBoard, NewCheck}.
-
-randomize_columns(0, Board, _) -> Board;
-randomize_columns(N, Board, Cols) ->
- NewBoard = randomize_columns(Cols,Board),
- randomize_columns(N-1, NewBoard, Cols).
-
-randomize_columns([],Board) -> Board;
-randomize_columns([X|Xs],Board) ->
- flush(),
- timer:sleep(50),
- randomize_columns(Xs,update_screen_element(Board,X,?HEIGHT-1,rndColor())).
-
-%%----------------------------------------------------------------------
-%% Returns: NewBoard
-%%----------------------------------------------------------------------
-delete_elems(Board, Elems2Del) ->
- OrgObjs = org_objs(Elems2Del,Board),
- visual_effect(?SIZE, OrgObjs),
- NewBoard = update_board(Elems2Del, Board),
- put_back(OrgObjs),
- NewBoard.
-
-visual_effect(0,_OrgObjs) -> done;
-visual_effect(Size,OrgObjs) ->
- set_size(OrgObjs,Size),
- flush(),
- timer:sleep(20),
- visual_effect(Size-1,OrgObjs).
-
-set_size([],_Size) -> done;
-set_size([{GsObj,[{X1,Y1},{_X2,_Y2}]}|T],Size) ->
- gs:config(GsObj, [{coords, [{X1,Y1},{X1+Size,Y1+Size}]}]),
- set_size(T,Size).
-
-%%----------------------------------------------------------------------
-%% Note: Loop over columns where something is removed only. (efficiency)
-%% Returns: {ReversedNewColumns (perhaps shorter), Checks}
-%% cols:fall_column([a,b,black,black,c,f,black,d,black], 3, 15, [], []).
-%% should return: {[a,b,c,f,d],[{3,11},{3,12},{3,13}]}
-%%----------------------------------------------------------------------
-fall_column([], _X, _Y, ColumnAcc, ChecksAcc) ->
- {ColumnAcc, ChecksAcc};
-fall_column([black|Colors], X, Y, ColumnAcc, ChecksAcc) ->
- case find_box(Colors) of
- false -> {ColumnAcc, ChecksAcc};
- NewColors when is_list(NewColors) ->
- fall_one_step(NewColors, X, Y, ColumnAcc, ChecksAcc)
- end;
-fall_column([Color|Colors], X, Y, ColumnAcc, ChecksAcc) ->
- fall_column(Colors, X, Y-1, [Color | ColumnAcc], ChecksAcc).
-
-find_box([]) -> false;
-find_box([black|Colors]) ->
- find_box(Colors);
-find_box([Color|Colors]) -> [Color|Colors].
-
-%%----------------------------------------------------------------------
-%% Enters: ([a,b, , ,c,d], 3, 8, Q)
-%% Leaves: ([b,a|Q], [ , , ,c,d], 10, [{3,8},{4,9}])
-%%----------------------------------------------------------------------
-fall_one_step([], X, Y, ColumnAcc, Checks) ->
- fall_column([], X, Y, ColumnAcc, Checks);
-fall_one_step([black|Colors], X, Y, ColumnAcc, Checks) ->
- fall_column([black|Colors], X, Y, ColumnAcc, Checks);
-fall_one_step([Color|Colors], X, Y, ColumnAcc, Checks) ->
- fall_one_step(Colors, X, Y-1, [Color|ColumnAcc],[{X,Y}|Checks]).
-
-%%----------------------------------------------------------------------
-%% Returns: {NewBoard, NewChecks}
-%%----------------------------------------------------------------------
-fall_down(Board1, Elems2Del) ->
- UpDatedCols = updated_cols(Elems2Del, []),
- fall_column(UpDatedCols, Board1, []).
-
-fall_column([], NewBoard, NewChecks) -> {NewBoard, NewChecks};
-fall_column([X|Xs], BoardAcc, ChecksAcc) ->
- OrgColumn = boardcolumn_to_tuple(BoardAcc, X),
- Column = columntuple_to_list(OrgColumn),
- {NewColumn, NewChecksAcc} = fall_column(Column, X,?HEIGHT-1,[],ChecksAcc),
- NewBoardAcc =
- set_board_column(BoardAcc,X,new_column_list(NewColumn,OrgColumn)),
- fall_column(Xs,NewBoardAcc,NewChecksAcc).
-
-new_column_list(NewColumn, ColumnTuple) ->
- Nempty = ?HEIGHT - length(NewColumn),
- L = make_list(black, Nempty) ++ NewColumn,
- new_column_list(L, 1, ColumnTuple).
-
-new_column_list([H|T], N, Tuple) ->
- {GsObj, Color} = element(N, Tuple),
- [update_screen_element({GsObj, Color},H) | new_column_list(T, N+1, Tuple)];
-new_column_list([], _, _) -> [].
-
-
-%%----------------------------------------------------------------------
-%% Returns: a reversed list of colors.
-%%----------------------------------------------------------------------
-columntuple_to_list(ColumnTuple) when is_tuple(ColumnTuple) ->
- columntuple_to_list(tuple_to_list(ColumnTuple),[]).
-
-columntuple_to_list([],Acc) -> Acc;
-columntuple_to_list([{_GsObj, Color}|T],Acc) ->
- columntuple_to_list(T,[Color|Acc]).
-
-%%======================================================================
-%% 2. Graphics
-%%======================================================================
-
-make_bit() ->
- make_bit(rndColor(),rndColor(),rndColor()).
-
-make_bit(Tc,Mc,Bc) ->
- X = ?WIDTH div 2,
- Y = 0,
- #bit{x=X,y=Y,topColor= Tc, middleColor=Mc, bottomColor=Bc,
- top_gsobj = make_box(X,Y,Tc), mid_gsobj=make_box(X,Y+1,Mc),
- bot_gsobj=make_box(X,Y+2,Bc)}.
-
-new_colors(Bit) ->
- #bit{top_gsobj=T,mid_gsobj=M,bot_gsobj=B} = Bit,
- Tc = rndColor(),
- Mc = rndColor(),
- Bc = rndColor(),
- gs:config(T, [{fill, Tc}]),
- gs:config(M, [{fill, Mc}]),
- gs:config(B, [{fill, Bc}]),
- Bit#bit{topColor= Tc, middleColor=Mc, bottomColor=Bc}.
-
-new_bit_xy(Bit, NewX, NewY) ->
- #bit{x=X,y=Y,top_gsobj=T,mid_gsobj=M,bot_gsobj=B} = Bit,
- Dx = (NewX - X) * ?SIZE,
- Dy = (NewY - Y) * ?SIZE,
- gs:config(T, [{move, {Dx, Dy}}]),
- gs:config(M, [{move, {Dx, Dy}}]),
- gs:config(B, [{move, {Dx, Dy}}]),
- Bit#bit{x=NewX, y=NewY}.
-
-destroy_bit(#bit{top_gsobj=T,mid_gsobj=M,bot_gsobj=B}) ->
- gs:destroy(T),
- gs:destroy(M),
- gs:destroy(B).
-
-shift_bits(Bit) ->
- #bit{topColor=C1,middleColor=C2,bottomColor=C3,
- top_gsobj=T,mid_gsobj=M,bot_gsobj=B} = Bit,
- gs:config(T, {fill,C2}),
- gs:config(M, {fill,C3}),
- gs:config(B, {fill,C1}),
- Bit#bit{topColor=C2, middleColor=C3, bottomColor=C1}.
-
-rndColor() ->
- Siz = size(?COLORS),
- element(random:uniform(Siz), ?COLORS).
-
-make_score() ->
- {gs:create(text, can, [{text, "Score: 0"}, {fg, red},
- {coords, [{5,?HEIGHT*?SIZE+10}]}]), 0}.
-
-make_screen_board() ->
- xy_loop({cols,make_board_elem}, make_board(), ?WIDTH, ?HEIGHT).
-
-make_board_elem(X,Y,Board) ->
- set_board_element(Board,X,Y,{make_box(X,Y,black),black}).
-
-flush() -> gs:read(can, bg).
-
-draw_borders() ->
- BotY = ?HEIGHT*?SIZE,
- RightX = ?LEFT + ?SIZE*?WIDTH,
- LeftX = ?LEFT - 1,
- gs:create(line,can,[{coords,[{LeftX,0},{LeftX,BotY}]},{fg,white}]),
- gs:create(line,can,[{coords,[{LeftX,BotY},{RightX,BotY}]},{fg,white}]),
- gs:create(line,can,[{coords,[{RightX,0},{RightX, BotY}]}, {fg,white}]).
-
-update_screen_element(ScrBoard, X, Y, Color) ->
- case board_element(ScrBoard,X,Y) of
- {_GsObj, Color} ->
- ScrBoard; % don't have to update screen
- {GsObj, _ScreenColor} ->
- gs:config(GsObj, color_args(Color)),
- set_board_element(ScrBoard, X, Y, {GsObj, Color})
- end.
-
-update_screen_element(ScrElem, Color) ->
- case ScrElem of
- {_GsObj, Color} ->
- ScrElem; % don't have to update screen
- {GsObj, _ScreenColor} ->
- gs:config(GsObj, color_args(Color)),
- {GsObj, Color}
- end.
-
-
-color_args(black) -> [{fg,black},{fill,black}];
-color_args(Color) -> [{fg,white},{fill,Color}].
-
-%%======================================================================
-%% 3. Data structures and stuff
-%%======================================================================
-
-xy_loop(Fun, Acc, XMax, YMax) ->
- xy_loop(Fun, Acc, 0, 0, XMax, YMax).
-
-xy_loop(_Fun, Acc, _X, YMax, _XMax, YMax) -> Acc;
-xy_loop(Fun, Acc, XMax, Y, XMax, YMax) ->
- xy_loop(Fun, Acc, 0, Y+1, XMax, YMax);
-xy_loop(Fun, Acc, X, Y, XMax, YMax) ->
- xy_loop(Fun, apply(Fun, [X, Y,Acc]), X+1,Y,XMax, YMax).
-
-%%----------------------------------------------------------------------
-%% Returns: a sorted list of {X,Y} to delete.
-%% Pre: PrevDelElems is sorted.
-%%----------------------------------------------------------------------
-erase_bits_at(Board, PrevDelElems, X,Y) ->
- C = color_at(Board, X, Y),
- erase_bits_at([vert, horiz, slash, backslash],X,Y,C,Board,PrevDelElems).
-
-erase_bits_at([], _X,_Y,_C,_Board, Elems2Del) -> Elems2Del;
-erase_bits_at([Dir|Ds],X,Y,C,Board, Elems2DelAcc) ->
- Dx = dx(Dir),
- Dy = dy(Dir),
- DelElems = lists:append(check_dir(Board, X-Dx,Y-Dy,-Dx,-Dy,C),
- check_dir(Board, X,Y,Dx,Dy,C)),
- N_in_a_row = length(DelElems),
- if N_in_a_row >= 3 ->
- erase_bits_at(Ds,X,Y,C,Board,
- ordsets:union(lists:sort(DelElems),Elems2DelAcc));
- true -> erase_bits_at(Ds,X,Y,C,Board,Elems2DelAcc)
- end.
-
-dx(vert) -> 0;
-dx(horiz) -> 1;
-dx(slash) -> 1;
-dx(backslash) -> -1.
-
-dy(vert) -> -1;
-dy(horiz) -> 0;
-dy(slash) -> -1;
-dy(backslash) -> -1.
-
-
-%%----------------------------------------------------------------------
-%% Returns: list of {X,Y} to delete.
-%%----------------------------------------------------------------------
-check_dir(Board, X, Y, Dx, Dy, Color)
- when X >= 0, X < ?WIDTH, Y >= 0, Y < ?HEIGHT ->
- case color_at(Board, X, Y) of
- Color ->
- [{X,Y} | check_dir(Board, X+Dx, Y+Dy, Dx, Dy, Color)];
- _OtherColor ->
- []
- end;
-check_dir(_Board, _X, _Y, _Dx, _Dy, _Color) -> [].
-
-make_box(X, Y, Color) ->
- make_box(X, Y, 1, 1, Color).
-
-%%----------------------------------------------------------------------
-%% Returns: GsObj
-%%----------------------------------------------------------------------
-make_box(X, Y, Height, Width, Color) ->
- Opts = if Color == black -> [{fg, black}, {fill, black}];
- true -> [{fill, Color}, {fg, white}] end,
- gs:create(rectangle, can, [{coords, [{?LEFT + X * ?SIZE, Y * ?SIZE},
- {?LEFT + X * ?SIZE + (?SIZE*Width)-1,
- Y * ?SIZE + (?SIZE*Height)-1}]}|Opts]).
-
-is_fall_ok(_Board, _NewX, NewY) when NewY+2 >= ?HEIGHT -> false;
-is_fall_ok(Board, NewX, NewY) ->
- case color_at(Board, NewX, NewY+2) of
- black ->
- true;
- _ -> false
- end.
-
-color_at(Board, X, Y) ->
- {_GsObj, Color} = board_element(Board, X, Y),
- Color.
-
-
-%%----------------------------------------------------------------------
-%% X:0..?WIDTH-1, Y:0..?HEIGHT
-%%----------------------------------------------------------------------
-make_board() ->
- list_to_tuple(make_list(make_column(), ?WIDTH)).
-
-board_element(Board, X, Y) ->
- element(Y+1, element(X+1, Board)).
-
-set_board_element(Board, X, Y, NewValue) ->
- Col = element(X+1, Board),
- NewCol=setelement(Y+1,Col, NewValue),
- setelement(X+1, Board, NewCol).
-
-make_column() ->
- list_to_tuple(make_list(black, ?HEIGHT)).
-
-make_list(_Elem, 0) -> [];
-make_list(Elem, N) -> [Elem|make_list(Elem,N-1)].
-
-boardcolumn_to_tuple(Board, X) ->
- element(X+1, Board).
-
-set_board_column(Board, X, NewCol) when length(NewCol) == ?HEIGHT ->
- setelement(X+1, Board, list_to_tuple(NewCol)).
-
-show_help() ->
- W = gs:create(window, win, [{title, "cols Help"}, {width, 300},
- {height,300}, {map, true}]),
- gs:create(label, W, [{x,0},{y,0},{height, 200},{width,300},{justify,center},
- {label, {text,
- "cols $Revision: 1.23 $"
- "\nby\n"
- "Klas Eriksson, [email protected]\n\n"
- "Help: Use arrows and space keys.\n"
- " Try to get 3 in-a-row.\n"
- " More than 3 gives bonus."}}]),
- B=gs:create(button, W, [{x,100},{y,250}, {label, {text, "Dismiss"}}]),
- receive
- {gs, B, click, _, _} -> ok
- end,
- gs:destroy(W).
-
-%%======================================================================
-%% 4. Lambdas
-%%======================================================================
-
-drop(X,Y,Score,Board) ->
- case is_fall_ok(Board, X, Y+1) of
- true -> drop(X,Y+1,add_score(Score, 1),Board);
- false -> {X,Y, Score}
- end.
-
-elems2del([], _Board,Elems2DelAcc) -> Elems2DelAcc;
-elems2del([{X,Y}|Checks],Board,Elems2DelAcc) ->
- NewElems2DelAcc = ordsets:union(erase_bits_at(Board,Elems2DelAcc,X,Y),
- Elems2DelAcc),
- elems2del(Checks,Board,NewElems2DelAcc).
-
-collect_bottom_bits(?WIDTH,_Board) -> [];
-collect_bottom_bits(X,Board) ->
- case color_at(Board, X, ?HEIGHT-1) of
- black -> collect_bottom_bits(X+1,Board);
- _AcolorHere -> [X|collect_bottom_bits(X+1,Board)]
- end.
-
-update_check(_Check,[]) -> [];
-update_check(Check,[X|Xs]) ->
- case lists:member({X, ?HEIGHT-1}, Check) of
- true -> update_check(Check,Xs);
- false -> [{X, ?HEIGHT-1}|update_check(Check,Xs)]
- end.
-
-org_objs([],_Board) -> [];
-org_objs([{X,Y}|XYs],Board) ->
- {GsObj, _Color} = board_element(Board, X, Y),
- [{GsObj, lists:sort(gs:read(GsObj, coords))}|org_objs(XYs,Board)].
-
-update_board([],Board) -> Board;
-update_board([{X,Y}|XYs], Board) ->
- update_board(XYs,update_screen_element(Board, X, Y, black)).
-
-put_back([]) -> done;
-put_back([{GsObj, Coords}|Objs]) ->
- gs:config(GsObj, [{coords, Coords}]),
- put_back(Objs).
-
-updated_cols([], UpdColsAcc) -> UpdColsAcc;
-updated_cols([{X,_Y}|XYs], UpdColsAcc) ->
- case lists:member(X,UpdColsAcc) of
- true -> updated_cols(XYs,UpdColsAcc);
- false -> updated_cols(XYs,[X|UpdColsAcc])
- end.
-
-%% This is not an application so we don't have their way of knowing
-%% a private data directory where the GIF files are located (this directory).
-%% We can find GS and makes it relative from there /kgb
-
--define(EbinFromGsPriv,"../contribs/ebin").
-
-dir()->
- GsPrivDir = code:priv_dir(gs),
- filename:join(GsPrivDir,?EbinFromGsPriv).
diff --git a/lib/gs/contribs/cols/cols.gif b/lib/gs/contribs/cols/cols.gif
deleted file mode 100644
index 96e7c1ed4a..0000000000
--- a/lib/gs/contribs/cols/cols.gif
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/cols/cols.tool b/lib/gs/contribs/cols/cols.tool
deleted file mode 100644
index 673c3d8efa..0000000000
--- a/lib/gs/contribs/cols/cols.tool
+++ /dev/null
@@ -1,5 +0,0 @@
-{version,"0.1"}.
-{{tool,"Cols"},
- {start,{cols,start,[]}},
- {icon,"cols.gif"},
- {message,"Cols - The Game"}}.
diff --git a/lib/gs/contribs/cols/help.gif b/lib/gs/contribs/cols/help.gif
deleted file mode 100644
index 59baef1fec..0000000000
--- a/lib/gs/contribs/cols/help.gif
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/cols/highscore.erl b/lib/gs/contribs/cols/highscore.erl
deleted file mode 100644
index 94f68a043a..0000000000
--- a/lib/gs/contribs/cols/highscore.erl
+++ /dev/null
@@ -1,103 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(highscore).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,grid,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
--export([run/2]).
-
-run(NScore, File) ->
- Scores = read_scores(File),
- case find_pos(NScore, 1, Scores) of
- false ->
- display(Scores);
- Pos ->
- NewScores = new_highscore(Scores, Pos, NScore),
- write_scores(NewScores,File),
- display(NewScores)
- end.
-
-
-new_highscore(Scores, Pos, NScore) ->
- Txt = io_lib:format("You entered position ~w", [Pos]),
- W = gs:create(window, gs:start(), [{width, 200},{height, 110},{map,true},
- {title, "New Highscore!!!"}]),
- gs:create(label, W, [{label, {text, Txt}}, {x, 0}, {y,0}, {align, center},
- {width, 190},{height, 30}]),
- Entry = gs:create(entry, W, [{x, 0}, {y, 40}, {height, 30}, {width, 200}]),
- Ok = gs:create(button, W, [{label, {text, "Ok"}}, {x, 40}, {y, 75}]),
- receive
- {gs, Ok, click, _,_} ->
- T = gs:read(Entry, text),
- gs:destroy(W),
- lists:sublist(lists:reverse(
- lists:keysort(1, [{NScore, T} | Scores])), 1, 10)
- end.
-
-
-
-read_scores(File) ->
- case file:read_file(File) of
- {ok, Bin} -> binary_to_term(Bin);
- {error, _Reason} ->
- mk_empty_high(10)
- end.
-
-mk_empty_high(0) -> [];
-mk_empty_high(N) -> [{N,"Erlang"}|mk_empty_high(N-1)].
-
-find_pos(_NScore, _N, []) -> false;
-find_pos(NScore, N, [{Score, _Name} | Scores]) when Score > NScore ->
- find_pos(NScore, N+1, Scores);
-find_pos(_NScore, N, _) -> N.
-
-write_scores(Scores,File) ->
- file:write_file(File, term_to_binary(Scores)).
-
-display(Scores) ->
- Win = gs:window(gs:start(), [{width, 300},{height, 250},{map,true},
- {title, "Highscores"}]),
- {W,H} = gs:read(Win,{font_wh,{{screen,12},"aaaaaaa"}}),
- G = gs:grid(Win,[{rows,{1,11}},{columnwidths,[W,4*W]},{hscroll,false},
- {width, 300},{height, 220},{vscroll,false},
- {cellheight,H+2},{font,{screen,12}}]),
- insert_scores(G,2,Scores),
- Ok = gs:button(Win, [{label, {text, "OK"}}, {x, 100}, {y, 220}]),
- receive
- {gs, Ok, click, _,_} -> gs:destroy(Win),
- ok
- end.
-
-insert_scores(Grid,_N,[]) ->
- gs:create(gridline,Grid,[{row,1},{font,{screen,bold,12}},
- {text,{1,"SCORE"}},{text,{2,"NAME"}}]);
-
-insert_scores(Grid,Row,[{Score,Name}|Ss]) ->
- gs:create(gridline,Grid,[{row,Row},{text,{1,io_lib:format("~w",[Score])}},
- {text,{2,Name}}]),
- insert_scores(Grid,Row+1,Ss).
-
diff --git a/lib/gs/contribs/mandel/Makefile b/lib/gs/contribs/mandel/Makefile
deleted file mode 100644
index b806cc7801..0000000000
--- a/lib/gs/contribs/mandel/Makefile
+++ /dev/null
@@ -1,101 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(GS_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/gs-$(VSN)/contribs
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- mandel
-
-HRL_FILES=
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=../ebin/%.$(EMULATOR)) $(TARGET_TOOLBOX_FILES)
-
-TOOLNAME = mandel
-
-EXTRA_FILES= $(TOOLNAME).html
-TOOLBOX_FILES= $(TOOLNAME).tool $(TOOLNAME).gif
-TARGET_TOOLBOX_FILES= $(TOOLBOX_FILES:%=$(EBIN)/%)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-docs:
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f core
-
-# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-
-$(EBIN)/$(TOOLNAME).gif: $(TOOLNAME).gif
- $(gen_verbose)rm -f $@
- $(V_at)cp $(TOOLNAME).gif $@
-
-$(EBIN)/$(TOOLNAME).tool: $(TOOLNAME).tool
- $(gen_verbose)rm -f $@
- $(V_at)cp $(TOOLNAME).tool $@
-
-$(EBIN)/help.gif: help.gif
- $(gen_verbose)rm -f $@
- $(V_at)cp help.gif $@
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
- $(INSTALL_DIR) "$(RELSYSDIR)/mandel/bitmaps"
- $(INSTALL_DATA) $(BITMAPS) $(TOOLBOX_FILES) "$(RELSYSDIR)/mandel/bitmaps"
- $(INSTALL_DIR) "$(RELSYSDIR)/mandel"
- $(INSTALL_DATA) $(ERL_FILES) $(EXTRA_FILES) "$(RELSYSDIR)/mandel"
-
-release_docs_spec:
diff --git a/lib/gs/contribs/mandel/mandel.erl b/lib/gs/contribs/mandel/mandel.erl
deleted file mode 100644
index e6061ba77d..0000000000
--- a/lib/gs/contribs/mandel/mandel.erl
+++ /dev/null
@@ -1,351 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(mandel).
--compile([{nowarn_deprecated_function,{gs,assq,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,image,2}},
- {nowarn_deprecated_function,{gs,start,0}}]).
--author('(mbj,eklas)@erlang.ericsson.se').
-
-%% User's interface
--export([start/0,start/1]).
-
-%% Internal exports:
--export([start_client/2,refresher/1,start_server/1,respond/2]).
-
-%%%-----------------------------------------------------------------
-%%% Distributed Mandelbrot program.
-%%% Originally written i C++/rpc/lwp/interviews by Klas Eriksson.(1200 lines)
-%%% Rewritten in Erlang by Klas Eriksson and Martin Björklund.
-%%%-----------------------------------------------------------------
-
-%% unix>erl -sname foo (all nodes will get the same name)
-%% (foo@data)1>mandel:start([{hosts,["computer1","computer2"]},{window,400}]).
-
-%% unix>erl
-%% 1> mandel:start().
-
--record(state,{image,width,height,xmax,ymax,range,
- maxiter,colortable,zoomstep}).
--record(job,{left,right,ymin,ymax,height,width,maxiter,data=[]}).
--define(JOBWIDTH,10).
-
-%%-----------------------------------------------------------------
-%% This is the client start function.
-%%-----------------------------------------------------------------
-start() ->
- start([]).
-
-%%----------------------------------------------------------------------
-%% Option is list of Option. Option is:
-%% {xmax,float()}|{ymax,float()}|{range,float()}|
-%% {maxiter,integer()}|{window,integer()}|{zoomstep,float()}|
-%% {hosts,(list of string())|all_found_nodes}
-%%----------------------------------------------------------------------
-start(Opts) ->
- Nodes1 = nodes(),
- Nodes = case get_option(hosts,Opts,all_found_nodes) of
- all_found_nodes when Nodes1 == [] ->
- N = [node()],
- spawn(mandel,start_server,[N]),
- N;
- all_found_nodes ->
- start_nodes(dir(),Nodes1),
- Nodes1;
- Hosts ->
- start_slaves(Hosts),
- start_nodes(dir(),Nodes1),
- Nodes1
- end,
- spawn(mandel,start_client,[Opts,Nodes]).
-
-%% This is not an application so we don't have their way of knowing
-%% a private data directory where the GIF files are located (this directory).
-%% We can find GS and makes it relative from there /kgb
-
--define(EbinFromGsPriv,"../contribs/ebin").
-
-dir()->
- GsPrivDir = code:priv_dir(gs),
- filename:join(GsPrivDir,?EbinFromGsPriv).
-
-
-start_slaves([]) -> ok;
-start_slaves([Host|Hs]) ->
- {ok,Name}=slave:start(Host),
- io:format("host ~p is up~n", [Name]),
- start_slaves(Hs).
-
-start_nodes(_Dir,[]) -> ok;
-start_nodes(Dir,[Node|Nodes]) ->
- rpc:call(Node,code,add_path,[Dir]), % hack? should be done in .erlang
- spawn_link(Node,mandel,start_server,[[node()]]),
- io:format("started mandelserver at node: ~p~n", [Node]),
- start_nodes(Dir,Nodes).
-
-start_client(Opts,Nodes) ->
- Wt = get_option(window,Opts,100) div ?JOBWIDTH * ?JOBWIDTH,
- Ht = get_option(window,Opts,100) div ?JOBWIDTH * ?JOBWIDTH,
- S=gs:start(),
- Win=gs:create(window,win1,S,[{title,"Mandel"},{width,Wt-1},{height,Ht-1},
- {configure,true}]),
- Canvas=gs:create(canvas,can1,Win,[{width,Wt},{height,Ht}]),
- Image=gs:image(Canvas,[{buttonpress,true}]),
- MaxIters = get_option(maxiter,Opts,100),
- timer:apply_after(8000,mandel,refresher,[Image]),
- CT = make_color_table(MaxIters),
- State2=#state{image=Image,width=Wt,height=Ht,
- xmax=try_random(get_option(xmax,Opts,2),-2,2),
- ymax=try_random(get_option(ymax,Opts,2),-2,2),
- range=try_random(get_option(range,Opts,4),0,4),
- maxiter=MaxIters,colortable=CT,
- zoomstep=get_option(zoomstep,Opts,1.7)},
- ToDo = make_jobs(State2),
- gs:config(Win,[{map,true}]),
- main(State2, [], Nodes, ToDo).
-
-try_random(random,Low,High) ->
- random:uniform()*(High-Low)+Low;
-try_random(Float,_Low,_High) when is_number(Float) -> Float.
-
-
-%%-----------------------------------------------------------------
-%% Distribute work to the nodes. When a node returns, that
-%% node is the first to be used if there's any job left.
-%%-----------------------------------------------------------------
-main(State, [], PassiveNodes, []) ->
- wait_event(State,[],PassiveNodes,[]);
-main(State, ActiveNodes, PassiveNodes, []) ->
- % No jobs left, but some nodes are still active.
- % Wait_Event for their results
- wait_event(State,ActiveNodes,PassiveNodes,[]);
-main(State, ActiveNodes, [Node|PassiveNodes], [Job|ToDo]) ->
- % We have work to do, and at least one passive node.
- % Let him do it.
- distribute_job(Node, Job),
- main(State, [Node|ActiveNodes], PassiveNodes, ToDo);
-main(State, ActiveNodes, [], ToDo) ->
- % We have work to do, but all nodes are active.
- _Node = wait_event(State,ActiveNodes,[],ToDo).
-
-wait_event(State,ActiveNodes,PassiveNodes,ToDo) ->
- receive
- {calculation_done, {Node, Job}} ->
- if % a small hack. we want to discard data for old pictures
- Job#job.ymax==State#state.ymax ->
- draw(State, Node, Job);
- true -> true
- end,
- main(State,lists:delete(Node,ActiveNodes),[Node|PassiveNodes],ToDo);
- {gs,_Img,buttonpress,_Data,[_Butt,X,Y|_]} ->
- #state{width=W,height=H,ymax=Ymax,xmax=Xmax,range=R,zoomstep=ZS} =
- State,
- RX = Xmax-R+(X/W)*R,
- RY = Ymax-R+(1-(Y/H))*R,
- R2 = R/ZS,
- Xmax2 = RX + R2/2,
- Ymax2 = RY + R2/2,
- State2 = State#state{xmax=Xmax2,ymax=Ymax2,range=R2},
- io:format("{xmax,~w},{ymax,~w},{range,~w}~n", [Xmax2,Ymax2,R2]),
- ToDo2=make_jobs(State2),
- main(State2,ActiveNodes,PassiveNodes,ToDo2);
- {gs,_Win,destroy,_,_} ->
- kill_nodes(lists:append(ActiveNodes,PassiveNodes));
- {gs,_Win,configure,_Data,[W,H|_]}
- when State#state.width==W+1, State#state.height==H+1->
- main(State,ActiveNodes,PassiveNodes,ToDo);
- {gs,_Win,configure,_Data,[W|_]} ->
- gs:config(can1,[{width,W},{height,W}]),
- gs:config(win1,{configure,false}),
- gs:config(win1,[{width,W-1},{height,W-1}]),
- gs:config(win1,{configure,true}),
- State2 = State#state{width=W,height=W},
- ToDo2=make_jobs(State2),
- main(State2,ActiveNodes,PassiveNodes,ToDo2)
- end.
-
-kill_nodes([]) ->
- done;
-kill_nodes([Node|Nodes]) ->
- exit(rpc:call(Node,erlang,whereis,[mandel_server]),kill),
- kill_nodes(Nodes).
-
-
-distribute_job(Node, Job) ->
- {mandel_server, Node} ! {mandel_job, {self(), Job}}.
-
-draw(#state{image=Image, width=Wt, height=Ht, xmax=Xmax,
- maxiter=MI,colortable=ColorTable,range=R}, Node, Job) ->
- #job{left=Left,data=Data}=Job,
- io:format("Got data from node ~30w~n", [Node]),
-%% PixelX = K * RealX + M
-%% 0 = K * Xmin + M
-%% Width-1= K * Xmax + M
- K=(1-Wt)/-R,
- M=Wt-1-K*Xmax,
- Xbegin = round(Left*K+M),
- draw_cols(Image, Xbegin, Ht, lists:reverse(Data),MI,ColorTable).
-
-draw_cols(Image, X, Ht, [H|T],MaxIter,ColorTable) ->
- draw_col(Image, X, 0, H,MaxIter,ColorTable),
- draw_cols(Image, X+1, Ht, T,MaxIter,ColorTable);
-draw_cols(_Image, _X, _, [],_MaxIter,_ColorTable) ->
- done.
-
-draw_col(_Image, _X,_Y,[{no_first_color,0}],_MaxIter,_ColorTable) ->
- done;
-draw_col(Image, X,Y,[{Color,1}|T],MaxIter,ColorTable) ->
- gs:config(Image,[{pix_val,{{X,Y},
- element(Color+1,ColorTable)}}]),
- draw_col(Image, X,Y+1,T,MaxIter,ColorTable);
-draw_col(Image, X,Y,[{Color,Height}|T],MaxIter,ColorTable) ->
- gs:config(Image,[{pix_val,{{{X,Y},{X+1,Y+Height}},
- element(Color+1,ColorTable)}}]),
- draw_col(Image, X,Y+Height,T,MaxIter,ColorTable).
-
-make_jobs(#state{width=W,height=H,range=R,
- xmax=Xmax,ymax=Ymax,maxiter=MI}) ->
- make_jobs(Xmax-R,Xmax,Ymax-R,Ymax,H,W,MI).
-
-make_jobs(Xmin,Xmax,Ymin,Ymax,Ht,Wt,MaxIter) ->
- NoJobs = Wt/?JOBWIDTH, % Each job is ?JOBWIDTH pixel-col
- DX = (Xmax - Xmin)/NoJobs,
- make_jobs(DX,Xmin,Xmax,#job{ymin=Ymin,ymax=Ymax,height=Ht,width=Wt/NoJobs,
- maxiter=MaxIter},[]).
-
-make_jobs(DX,Left,Xmax,JobSkel,Res) when Left =< Xmax ->
- Right = Left + DX,
- Job = JobSkel#job{left=Left,right=Right},
- make_jobs(DX,Right,Xmax,JobSkel,[Job | Res]);
-make_jobs(_DX,_Left,_Xmax,_JobSkel,Res) -> Res.
-
-%%----------------------------------------------------------------------
-%% A small process that refreshes the screen now and then.
-%%----------------------------------------------------------------------
-refresher(Image) ->
- gs:config(Image,flush),
- timer:apply_after(8000,mandel,refresher,[Image]).
-
-%%-----------------------------------------------------------------
-%% This is the server start function.
-%%-----------------------------------------------------------------
-start_server([ClientNode]) ->
- register(mandel_server, self()),
- erlang:monitor_node(ClientNode, true),
- server_loop().
-
-server_loop() ->
- receive
- {mandel_job, {Pid, Job}} ->
- spawn_link(mandel, respond, [Pid, Job]),
- server_loop()
- end.
-
-respond(Pid, Job) ->
- Data = do_job(Job),
- Pid ! {calculation_done, {node(), Data}}.
-
-do_job(Job) ->
- calculate_area(Job).
-
-calculate_area(Job) ->
- #job{ymin=Ymin,ymax=Ymax,height=Ht,width=Wt,left=Xmin,right=Xmax}=Job,
- Job#job{data=x_loop(0,[],Wt,(Xmax-Xmin)/Wt,(Ymax-Ymin)/Ht,Xmin,Job)}.
-
-x_loop(IX,Res,Wt,Dx,Dy,X,Job) when IX < Wt ->
- #job{ymin=Ymin,height=Ht,maxiter=MaxIter}=Job,
- Cols = y_loop(0,Ht,[],MaxIter,Dy,X,Ymin,no_first_color,0),
- x_loop(IX+1,[Cols|Res],Wt,Dx,Dy,X+Dx,Job);
-x_loop(_,Res,_,_,_,_,_) ->
- Res.
-
-y_loop(IY,Ht,Res,MaxIter,Dy,X,Y,PrevColor,NprevColor) when IY < Ht ->
- Color = color_loop(1,MaxIter,0,0,0,0,X,Y),
- if
- Color == PrevColor ->
- y_loop(IY+1,Ht,Res,MaxIter,Dy,X,Y+Dy,PrevColor,NprevColor+1);
- true ->
- y_loop(IY+1,Ht,[{PrevColor,NprevColor}|Res],MaxIter,
- Dy,X,Y+Dy,Color,1)
- end;
-
-y_loop(_,_,Res,_,_,_,_,PC,N) ->
- [{PC,N}|Res].
-
-color_loop(Color,MaxIter,Za,Zb,Za2,Zb2,X,Y)
- when Za2 + Zb2 < 4, Color < MaxIter->
- Ztmp = Za2 - Zb2 + X,
- ZbN = 2 * Za * Zb + Y,
- color_loop(Color+1,MaxIter,Ztmp,ZbN,Ztmp * Ztmp,ZbN * ZbN,X,Y);
-color_loop(MaxIter,MaxIter,_Za,_Zb,_Za2,_Zb2,_X,_Y) ->
- 0; % black
-color_loop(Color,_,_,_,_,_,_,_) ->
- Color.
-
-%%----------------------------------------------------------------------
-%% The "colormodel".
-%%----------------------------------------------------------------------
-make_color_table(MaxColors) ->
- list_to_tuple([{0,0,0}|colors(MaxColors)]).
-
-colors(Ncolors) ->
- {A,B,C}=erlang:now(),
- random:seed(A,B,C),
- Colors = random_colors(Ncolors),
- Colors2 = best_insert([hd(Colors)],tl(Colors)),
- Colors2.
-
-random_colors(0) -> [];
-random_colors(N) ->
- R = random:uniform(256)-1,
- G = random:uniform(256)-1,
- B = random:uniform(256)-1,
- [{R,G,B}|random_colors(N-1)].
-
-best_insert(Sorted,[RGB|Unsorted]) ->
- best_insert(insert_at(best_pos(RGB,Sorted),RGB,Sorted),Unsorted);
-best_insert(Sorted,[]) -> Sorted.
-
-insert_at(1,Elem,L) -> [Elem|L];
-insert_at(N,Elem,[H|T]) -> [H|insert_at(N-1,Elem,T)].
-
-best_pos(RGB, Sorted) ->
- D = distances(RGB,Sorted),
- pos_for_smallest_distance(D,1,1000,-1).
-
-pos_for_smallest_distance([],_CurPos,_SmallestDist,Pos) -> Pos;
-pos_for_smallest_distance([Dist|T],CurPos,SmallDist,_Pos)
- when Dist < SmallDist ->
- pos_for_smallest_distance(T,CurPos+1,Dist,CurPos);
-pos_for_smallest_distance([_|T],CurPos,Smallest,Pos) ->
- pos_for_smallest_distance(T,CurPos+1,Smallest,Pos).
-
-distances(_RGB,[]) ->
- [];
-distances({R,G,B},[{R2,G2,B2}|T]) ->
- [lists:max([abs(R-R2),abs(G-G2),abs(B-B2)])|distances({R,G,B},T)].
-
-get_option(Option, Options, Default) ->
- case gs:assq(Option, Options) of
- {value, Val} -> Val;
- false -> Default
- end.
diff --git a/lib/gs/contribs/mandel/mandel.gif b/lib/gs/contribs/mandel/mandel.gif
deleted file mode 100644
index 49ed1985cb..0000000000
--- a/lib/gs/contribs/mandel/mandel.gif
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/mandel/mandel.html b/lib/gs/contribs/mandel/mandel.html
deleted file mode 100644
index f69cfa3c6a..0000000000
--- a/lib/gs/contribs/mandel/mandel.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<!--
- ``Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- The Initial Developer of the Original Code is Ericsson Utvecklings AB.
- Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
- AB. All Rights Reserved.''
-
- $Id$
--->
-<HTML>
-<HEAD>
- <TITLE></TITLE>
- <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; SunOS 5.5.1 sun4m) [Netscape]">
-</HEAD>
-<BODY>
-
-<H1>Distributed Mandelbrot program</H1>
-
-<P>Originally written i C++/rpc/lwp/interviews by Klas Eriksson.(1200 lines)
-<BR>
-Rewritten in Erlang by Klas Eriksson and Martin Bj&ouml;rklund. </P>
-
-<P><A HREF="http://www.bush.edu/~nick/nick.html">What is the Mandelbrot
-function?</A> </P>
-
-<H2>A small manual</H2>
-
-<UL>
-<LI>Try starting erlang in distributed mode. The mandel program will use<BR>
-all connected nodes for mandel calculations!</LI>
-
-<LI>Resizing the window will restart the calculation.</LI>
-
-<LI>Press left mouse button to zoom.</LI>
-</UL>
-
-<P><TT>mandel:start(list of Option)</TT> can be used to give the program
-different options.</P>
-
-<P><BR>
-Available options are:</P>
-
-<UL>
-<LI>{xmax,float()}</LI>
-
-<LI>{ymax,float()}</LI>
-
-<LI>{range,float()}|</LI>
-
-<LI>{maxiter,integer()}</LI>
-
-<LI>{window,integer()}</LI>
-
-<LI>{zoomstep,float()}</LI>
-
-<LI>{hosts,(list of string())|all_found_nodes}</LI>
-</UL>
-
-<P><BR>
-</P>
-
-</BODY>
-</HTML>
diff --git a/lib/gs/contribs/mandel/mandel.tool b/lib/gs/contribs/mandel/mandel.tool
deleted file mode 100644
index b59941268e..0000000000
--- a/lib/gs/contribs/mandel/mandel.tool
+++ /dev/null
@@ -1,6 +0,0 @@
-{version,"0.1"}.
-{{tool,"Mandel"},
- {start,{mandel,start,[]}},
- {icon,"mandel.gif"},
- {message,"Mandelbrot"},
- {html,"../mandel/mandel.html"}}.
diff --git a/lib/gs/contribs/othello/Makefile b/lib/gs/contribs/othello/Makefile
deleted file mode 100644
index 8a66e17ec5..0000000000
--- a/lib/gs/contribs/othello/Makefile
+++ /dev/null
@@ -1,101 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(GS_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/gs-$(VSN)/contribs
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- othello \
- othello_adt \
- othello_board
-
-HRL_FILES=
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=../ebin/%.$(EMULATOR)) $(TARGET_TOOLBOX_FILES)
-
-TOOLNAME = othello
-
-EXTRA_FILES=
-TOOLBOX_FILES= $(TOOLNAME).tool $(TOOLNAME).gif
-TARGET_TOOLBOX_FILES= $(TOOLBOX_FILES:%=$(EBIN)/%)
-BITMAPS= priv/marker.bm priv/square.bm
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-docs:
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f core
-
-# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-
-$(EBIN)/$(TOOLNAME).gif: $(TOOLNAME).gif
- $(gen_verbose)rm -f $@
- $(V_at)cp $(TOOLNAME).gif $@
-
-$(EBIN)/$(TOOLNAME).tool: $(TOOLNAME).tool
- $(gen_verbose)rm -f $@
- $(V_at)cp $(TOOLNAME).tool $@
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
- $(INSTALL_DIR) "$(RELSYSDIR)/othello"
- $(INSTALL_DATA) $(ERL_FILES) $(EXTRA_FILES) "$(RELSYSDIR)/othello"
- $(INSTALL_DIR) "$(RELSYSDIR)/othello/priv"
- $(INSTALL_DATA) $(BITMAPS) $(TOOLBOX_FILES) "$(RELSYSDIR)/othello/priv"
-
-release_docs_spec:
-
diff --git a/lib/gs/contribs/othello/othello.erl b/lib/gs/contribs/othello/othello.erl
deleted file mode 100644
index c6ad0a76ec..0000000000
--- a/lib/gs/contribs/othello/othello.erl
+++ /dev/null
@@ -1,237 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(othello).
--export([start/0,new_game/4,start1/5]).
-
-
-
-%%----------------------------------------------------------------------
-%% The Othello program now uses the gs graphical package instead of the
-%% pxw package. See module othello_board for details
-%%
-%%----------------------------------------------------------------------
-
-
-start() -> othello_board:start().
-
-new_game(Computer,Player,Depth,Init) ->
- spawn_link(othello,start1,[self(),Computer,Player,Depth,Init]).
-
-start1(Win,Computer,Player,Depth,Init) ->
- Board = othello_adt:new(t),
- random:seed(),
- init_display(Board,Win,Init),
- play(Computer,Player,Board,Depth,Win,1).
-
-play(Computer,Player,Board,Depth,Win,NoDs) ->
- tell_win(Win,Computer,Player),
- case catch continue(Player,Board) of
- {game_over,Result} ->
- game_over(Board,Player,Result,Win);
- {omit_draw,Player} ->
- omit(Player,Win),
- play(Computer,swap(Player),Board,Depth,Win,NoDs);
- ok ->
- Draw = choose_draw(Computer,Player,Board,Depth,Win,NoDs),
- Win ! {self(),draw,Draw},
- Board1 = othello_adt:set(Draw,Player,Board),
- display(Board1,Board,Win),
- play(Computer,swap(Player),Board1,Depth,Win,NoDs+1)
- end.
-
-continue(Player,Board) ->
- Draws = game_over(Player,Board),
- not_allowed(Draws,Player),
- ok.
-
-choose_draw(Computer,Computer,Board,Depth,_Win,NoDs) -> % Depth > 0 !!
- {Draw,_Value} = alpha_beta(Depth,Board,-11000,11000,Computer,NoDs),
-% io:format('Choosen draw is {~w,~w} : (~w)~n',
-% [othello_adt:col(Draw),othello_adt:row(Draw),Value]),
-% io:format('=====================~n',[]),
- Draw;
-choose_draw(Computer,Player,Board,Depth,Win,NoDs) ->
- receive
- {Win,position,Draw} ->
- flush(Win),
- case othello_adt:is_draw(Draw,Player,Board) of
- false ->
- Win ! {self(),illegal_draw,Draw},
- choose_draw(Computer,Player,Board,Depth,Win,NoDs);
- true ->
- Draw
- end
- end.
-
-flush(Win) ->
- receive
- {Win,position,_} ->
- flush(Win)
- after 1 ->
- true
- end.
-
-tell_win(Win,Computer,Player) ->
- Win ! {self(),player,Computer,Player},
- receive
- {Win,go_on_play} -> true
- end.
-
-alpha_beta(0,Board,_,_,Player,_) ->
- {-1,othello_adt:evaluate_board(Player,Board)};
-alpha_beta(Depth,Board,Alpha,Beta,Player,NoDs) ->
- case compute(Player,Board,NoDs) of
- [] ->
- Player1 = swap(Player),
- case compute(Player1,Board,NoDs) of
- [] ->
- dead_lock(Board,Player);
- PosDraws1 ->
- choose(PosDraws1,Board,Depth-1,-Beta,-Alpha,-1,
- Player1,NoDs)
- end;
- PosDraws ->
- choose(PosDraws,Board,Depth-1,-Beta,-Alpha,-1,Player,NoDs)
-% A = choose(PosDraws,Board,Depth-1,-Beta,-Alpha,-1,Player,NoDs),
-% io:format('Alpha-Beta (~w) ==> ~w~n',[Depth,A]),
-% A
- end.
-
-choose([Draw|Draws],Board,Depth,Alpha,Beta,Record,Player,NoDs) ->
- Player1 = swap(Player),
- Board1 = othello_adt:set(Draw,Player,Board),
-% io:format('Alpha <~w> Beta <~w> ~n',[Alpha,Beta]),
- {_,Value} = alpha_beta(Depth,Board1,Alpha,Beta,Player1,NoDs+1),
- Value1 = -Value,
- cutoff(Draw,Value1,Depth,Alpha,Beta,Draws,Board,Record,Player,NoDs);
-choose([],_,_,Alpha,_,Draw,_,_) ->
- {Draw,Alpha}.
-
-cutoff(Draw,Value,_,_,Beta,_,_,_,_,_) when Value >= Beta ->
- {Draw,Value};
-cutoff(Draw,Value,Depth,Alpha,Beta,Draws,Board,_,Player,NoDs)
- when Alpha < Value, Value < Beta ->
- choose(Draws,Board,Depth,Value,Beta,Draw,Player,NoDs);
-cutoff(Draw,Value,Depth,Alpha,Beta,Draws,Board,Record,Player,NoDs)
- when Value == Alpha, NoDs < 13 ->
- choose(Draws,Board,Depth,Alpha,Beta,random_choice(Draw,Record),
- Player,NoDs);
-cutoff(_Draw,Value,Depth,Alpha,Beta,Draws,Board,Record,Player,NoDs)
- when Value =< Alpha ->
- choose(Draws,Board,Depth,Alpha,Beta,Record,Player,NoDs).
-
-compute(Player,Board,NoOfDraws) when NoOfDraws < 13 ->
- case othello_adt:possible_draws(Player,Board,begin_play) of
- [] ->
- othello_adt:possible_draws(Player,Board,playing);
- Draws ->
- Draws
- end;
-compute(Player,Board,_) ->
- othello_adt:possible_draws(Player,Board,playing).
-
-%%----------------------------------------------------------
-%% Randomly choose between two draws with the same value.
-%%----------------------------------------------------------
-
-random_choice(Draw,Draw1) ->
- case random:uniform(2) of
- 1 ->
- Draw;
- 2 ->
- Draw1
- end.
-
-dead_lock(Board,Player) ->
- case win_or_loose(Board,Player) of
- 0 -> {-1,0};
- Value when Value > 0 -> {-1,10000};
- _ -> {-1,-10000}
- end.
-
-win_or_loose(Board,Player) ->
- Player1 = swap(Player),
- othello_adt:pieces(Player,Board) - othello_adt:pieces(Player1,Board).
-
-game_over(Player,Board) ->
- case othello_adt:possible_draws(Player,Board,playing) of
- [] ->
- Player1 = swap(Player),
- case othello_adt:possible_draws(Player1,Board,playing) of
- [] ->
- throw({game_over,{{Player,othello_adt:pieces(Player,Board)},
- {Player1,othello_adt:pieces(Player1,Board)}}});
- _ ->
- [] % Player`s Draws !!
- end;
- Draws ->
- Draws
- end.
-
-game_over(_Board,_Player,Result,Win) ->
- Win ! {self(),game_over,white_res(Result),black_res(Result)}.
-
-white_res({{white,Res},_}) -> Res;
-white_res({_,{white,Res}}) -> Res.
-
-black_res({{black,Res},_}) -> Res;
-black_res({_,{black,Res}}) -> Res.
-
-not_allowed([],Player) ->
- throw({omit_draw, Player});
-not_allowed(_,_Player) ->
- ok.
-
-omit(Player,Win) ->
- Win ! {self(),omit_draw,Player},
- receive
- {Win,continue} ->
- ok
- end.
-
-init_display(_Board,_Win,first_time) ->
- true;
-init_display(Board,Win,_) ->
- display(Board,Win).
-
-display(Board,Win) ->
- All = othello_adt:all_pos(Board),
- display1(All,Win),
- Win ! {self(),score,othello_adt:pieces(white,Board),
- othello_adt:pieces(black,Board)}.
-
-display(Board,OldB,Win) ->
- Diff = othello_adt:diff(Board,OldB),
- display1(Diff,Win),
- Win ! {self(),score,othello_adt:pieces(white,Board),
- othello_adt:pieces(black,Board)}.
-
-display1([{Pos,Colour}|Diff],Win) ->
- Win ! {self(),new_mark,Pos,Colour},
- display1(Diff,Win);
-display1(_,_) ->
- true.
-
-swap(white) -> black;
-swap(black) -> white.
-
-
diff --git a/lib/gs/contribs/othello/othello.gif b/lib/gs/contribs/othello/othello.gif
deleted file mode 100644
index 5970c50209..0000000000
--- a/lib/gs/contribs/othello/othello.gif
+++ /dev/null
Binary files differ
diff --git a/lib/gs/contribs/othello/othello.tool b/lib/gs/contribs/othello/othello.tool
deleted file mode 100644
index 47550a581d..0000000000
--- a/lib/gs/contribs/othello/othello.tool
+++ /dev/null
@@ -1,6 +0,0 @@
-{version,"0.1"}.
-{{tool,"Othello"},
- {start,{othello,start,[]}},
- {icon,"othello.gif"},
- {message,"Othello - The Game"},
- {html,"http://www.armory.com/~iioa/othguide.html"}}.
diff --git a/lib/gs/contribs/othello/othello_adt.erl b/lib/gs/contribs/othello/othello_adt.erl
deleted file mode 100644
index e69c1c4d72..0000000000
--- a/lib/gs/contribs/othello/othello_adt.erl
+++ /dev/null
@@ -1,540 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(othello_adt).
--compile(export_all).
-%%-------------------------------------------------------
-%% Use three main states for the strategy:
-%%
-%% BeginPlay: Stay in the inner square as long as possible.
-%% Use the possible_draws/3.
-%%
-%% MiddlePlay: Try to choose stable markers (?)
-%% Use stable/3
-%%
-%% EndPlay: Try to flip as many markers as possible
-%%
-%% The transition from Begin to Middle is obvious. From Middle
-%% to End however, is can be discussed.
-%%-------------------------------------------------------
-
-test(N,B) ->
- X=new(B),
- statistics(wall_clock),
- test0(N,X),
- {_,T} = statistics(wall_clock),
- {time_was,T/N}.
-
-
-test0(0,_) -> true;
-test0(N,X) ->
- possible_draws(black,X,begin_play),
- test0(N-1,X).
-
-%%-------------------------------------------------------
-%% new/1 - returns a new board
-%%
-%% Uses a tuple for storing the board
-%%-------------------------------------------------------
-
-new(B) ->
- Board = mk_board(B),
- {ordsets:from_list([18,19,20,21,26,29,34,37,42,43,44,45]),Board}.
-
-mk_board(t) ->
- Tup = list_to_tuple(gen_list(64,grey)),
- Tup1 = setelement(28+1, Tup, white),
- Tup2 = setelement(35+1, Tup1, white),
- Tup3 = setelement(27+1, Tup2, black),
- gen_score_board(),
- setelement(36+1, Tup3, black).
-
-gen_list(0,_) -> [];
-gen_list(I,Def) -> [Def|gen_list(I-1,Def)].
-
-gen_score_board() -> put(score,list_to_tuple(gen_list(64,0))).
-
-%%-------------------------------------------------------
-%% pos(Col,Row) - returns a position describing column
-%% and row.
-%% Col and Row have the range 1 - 8.
-%%-------------------------------------------------------
-
-pos(Col,Row) -> ((Row - 1) bsl 3) + (Col - 1).
-
-%%-------------------------------------------------------
-%% col(Pos) - returns the column of the Pos position
-%%-------------------------------------------------------
-
-col(Pos) -> (Pos band 7) + 1.
-
-%%-------------------------------------------------------
-%% row(Pos) - returns the row of the Pos position
-%%-------------------------------------------------------
-
-row(Pos) -> (Pos bsr 3) + 1.
-
-%%-------------------------------------------------------
-%% is_draw(Pos,Colour,Board) - returns true if Pos is a
-%% correct draw.
-%%-------------------------------------------------------
-
-is_draw(Pos,Colour,{Bset,Board}) ->
- case ordsets:is_element(Pos,Bset) of
- true ->
- case catch is_good(Colour,Pos,Board) of
- true ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end.
-
-%%-------------------------------------------------------
-%% set(Pos,Colour,Board) - returns an updated board
-%%-------------------------------------------------------
-
-set(Pos,Colour,{Bset,Board}) ->
- case ordsets:is_element(Pos,Bset) of
- true ->
- NewBoard = setelement(Pos+1,Board,Colour),
- Empty = empty_neighbour(Pos,NewBoard),
- NewBset = ordsets:union(Empty,ordsets:del_element(Pos,Bset)),
- turn(Colour,Pos,{NewBset,NewBoard});
- _ ->
- {error,invalid_position}
- end.
-
-empty_neighbour(Pos,Board) ->
- ordsets:from_list(empty_neighbour(Pos,Board,deltas())).
-
-empty_neighbour(_,_,[]) -> [];
-empty_neighbour(Pos,Board,[H|T]) ->
- case is_empty(Pos+H,dir(Pos,H),Board) of
- true -> [Pos+H|empty_neighbour(Pos,Board,T)];
- _ -> empty_neighbour(Pos,Board,T)
- end.
-
-is_empty(_,false,_) -> false;
-is_empty(X,_,_Board) when X<0 -> false;
-is_empty(X,_,_Board) when X>63 -> false;
-is_empty(X,_,Board) ->
- case element(X+1,Board) of
- grey -> true; % Empty
- _ -> false
- end.
-
-%%-------------------------------------------------------
-%% get(Pos,Board) - returns the contents in Pos
-%%-------------------------------------------------------
-
-get(Pos,{_Bset,Board}) -> element(Pos+1,Board).
-
-%%-------------------------------------------------------
-%% pieces(Colour,Board) - returns the number of Colour
-%% pieces.
-%%-------------------------------------------------------
-
-pieces(Colour,{_Bset,Board}) ->
- pieces(Colour,Board,0,0).
-
-pieces(Colour,Board,Pos,Count) when Pos < 64 ->
- case element(Pos+1,Board) of
- Colour ->
- pieces(Colour,Board,Pos+1,Count+1);
- _ ->
- pieces(Colour,Board,Pos+1,Count)
- end;
-pieces(_,_,_,Count) ->
- Count.
-
-%%-------------------------------------------------------
-%% possible_draws(Colour, Board, State)
-%%
-%% Returns a list of possible draws regarding the current
-%% strategy state.
-%%-------------------------------------------------------
-
-possible_draws(Colour,{Bset,Board},begin_play) ->
- Dset = ordsets:intersection(Bset,inner_square()),
- possible_draws_0(Colour,Dset,Board);
-possible_draws(Colour,{Bset,Board},_) ->
- possible_draws_0(Colour,Bset,Board).
-
-possible_draws(Colour,{Bset,Board}) ->
- possible_draws_0(Colour,Bset,Board).
-
-possible_draws_0(_,[],_) -> [];
-possible_draws_0(Colour,[H|T],Board) ->
- case catch is_good(Colour,H,Board) of
- true -> [H|possible_draws_0(Colour,T,Board)];
- false -> possible_draws_0(Colour,T,Board)
- end.
-
-
-%%-------------------------------------------------------
-%% evaluate_board(Colour,Board) - returns the value of
-%% the board from Colours
-%% point of view.
-%%-------------------------------------------------------
-
-evaluate_board(Colour,{_Bset,Board}) ->
- Score = get(score), % Initialized (zeroed) score board !!
- Colour1 = swap(Colour),
- Score1 = eval_board(Colour,Colour1,Score,Board,0),
- Score2 = cnt_corner(0,Score1,Board,Colour,Colour1),
- Score3 = cnt_corner(7,Score2,Board,Colour,Colour1),
- Score4 = cnt_corner(56,Score3,Board,Colour,Colour1),
- Score5 = cnt_corner(63,Score4,Board,Colour,Colour1),
- count(Score5,0).
-% A = count(Score5,0),
-% io:format('Score = ~w~n',[A]),
-% A.
-
-eval_board(MyCol,OtCol,Score,Board,Pos) when Pos < 64 ->
- case element(Pos+1,Board) of
- MyCol ->
- Score1 = setelement(Pos+1,Score,score(Pos)),
- eval_board(MyCol,OtCol,Score1,Board,Pos+1);
- OtCol ->
- Score1 = setelement(Pos+1,Score,-score(Pos)),
- eval_board(MyCol,OtCol,Score1,Board,Pos+1);
- _ ->
- eval_board(MyCol,OtCol,Score,Board,Pos+1)
- end;
-eval_board(_,_,Score,_,_) ->
- Score.
-
-cnt_corner(Corner,Score,Board,MyCol,OtCol) ->
- case element(Corner+1,Board) of
- MyCol ->
- cnt_corn(Corner,setelement(Corner+1,Score,50),
- Board,50,MyCol);
- OtCol ->
- cnt_corn(Corner,setelement(Corner+1,Score,-50),
- Board,-50,OtCol);
- _ ->
- Score
- end.
-
-cnt_corn(0,Score,Board,Value,Colour) ->
- Score1 = cnt_corn(0,1,8,Score,Board,Value,Colour),
- cnt_corn(0,8,1,Score1,Board,Value,Colour);
-cnt_corn(7,Score,Board,Value,Colour) ->
- Score1 = cnt_corn(7,-1,8,Score,Board,Value,Colour),
- cnt_corn(7,8,-1,Score1,Board,Value,Colour);
-cnt_corn(56,Score,Board,Value,Colour) ->
- Score1 = cnt_corn(56,1,-8,Score,Board,Value,Colour),
- cnt_corn(56,-8,1,Score1,Board,Value,Colour);
-cnt_corn(63,Score,Board,Value,Colour) ->
- Score1 = cnt_corn(63,-1,-8,Score,Board,Value,Colour),
- cnt_corn(63,-8,-1,Score1,Board,Value,Colour).
-
-cnt_corn(Pos,Dir,LineDir,Score,Board,Value,Colour) ->
- case dir(Pos,Dir) of
- Dir ->
- NextEdge = Pos+Dir,
- case element(NextEdge+1,Board) of
- Colour ->
- Score1 = setelement(NextEdge+1,Score,Value),
- Score2 = cnt_line(NextEdge,LineDir,Score1,Board,
- Colour,Value),
- cnt_corn(NextEdge,Dir,LineDir,Score2,Board,Value,Colour);
- _ ->
- Score
- end;
- _ ->
- Score
- end.
-
-cnt_line(Pos,Dir,Score,Board,Colour,Value) ->
- case dir(Pos,Dir) of
- Dir ->
- OnLinePos = Pos+Dir,
- case element(OnLinePos+1,Board) of
- Colour ->
- Score1 = setelement(OnLinePos+1,Score,Value),
- cnt_line(OnLinePos,Dir,Score1,Board,Colour,Value);
- _ ->
- Score
- end;
- _ ->
- Score
- end.
-
-count(Score,Pos) when Pos < 64 ->
- element(Pos+1,Score) + count(Score,Pos+1);
-count(_,_) ->
- 0.
-
-swap(white) -> black;
-swap(black) -> white.
-
-%%-------------------------------------------------------
-%% stable(Colour,Pos,Board) - returns a value 0-8
-%%
-%% A high value is regarded as more stable than a lower one.
-%% The stability means how many "friendly" neighbours there
-%% are, i.e markers of the same colour. Neighbours positions
-%% outside the board are regarded as friendly.
-%%-------------------------------------------------------
-
-stable(Colour,Pos,{_,Board}) ->
- stable(deltas(),Colour,Pos,Board).
-
-stable([],_,_,_) -> 0;
-stable([H|T],Colour,Pos,Board) ->
- stable_val(Colour,Pos,H,Board) + stable(T,Colour,Pos,Board).
-
-stable_val(_,H,D,_) when H+D<0 -> 1;
-stable_val(_,H,D,_) when H+D>63 -> 1;
-stable_val(black,H,D,Board) ->
- case element((H+D)+1,Board) of
- black -> 1;
- _ -> 0
- end;
-stable_val(white,H,D,Board) ->
- case element((H+D)+1,Board) of
- white -> 1;
- _ -> 0
- end.
-
-%%-------------------------------------------------------
-%% diff(Board,OldBoard) - return a list of the positions
-%% with changed pieces.
-%% [{Pos1,Colour1},...]
-%%-------------------------------------------------------
-
-diff(Board,OldBoard) -> diff(0,Board,OldBoard).
-
-diff(Pos,Board,OldBoard) when Pos < 64 ->
- OldP = get(Pos,OldBoard),
- case get(Pos,Board) of
- OldP ->
- diff(Pos+1,Board,OldBoard);
- NewP ->
- [{Pos,NewP}|diff(Pos+1,Board,OldBoard)]
- end;
-diff(_,_,_) ->
- [].
-
-%%-------------------------------------------------------
-%% all_pos(Board) - return a list of the positions colour.
-%% [{Pos1,Colour1},...]
-%%-------------------------------------------------------
-
-all_pos(Board) -> all_pos(0,Board).
-
-all_pos(Pos,Board) when Pos < 64 ->
- [{Pos,get(Pos,Board)}|all_pos(Pos+1,Board)];
-all_pos(_,_) ->
- [].
-
-%%-------------------------------------------------------
-%% Internal stuff
-%%-------------------------------------------------------
-
-deltas() -> [9,8,7,1,-1,-7,-8,-9].
-
-inner_square() ->
- [18,19,20,21,26,27,28,29,34,35,36,37,42,43,44,45]. % Is already an ordset
- % Save list traversing.
-% ordsets:list_to_set([18,19,20,21,26,27,28,29,34,35,36,37,42,43,44,45]).
-
-inv(black) -> white;
-inv(white) -> black.
-
-is_good(Colour,H,Board) ->
- is_good_0(Colour,H,dir(H,-9),Board),
- is_good_0(Colour,H,dir(H,-8),Board),
- is_good_0(Colour,H,dir(H,-7),Board),
- is_good_0(Colour,H,dir(H,-1),Board),
- is_good_0(Colour,H,dir(H,1),Board),
- is_good_0(Colour,H,dir(H,7),Board),
- is_good_0(Colour,H,dir(H,8),Board),
- is_good_0(Colour,H,dir(H,9),Board),
- false.
-
-is_good_0(_,_,false,_) -> false;
-is_good_0(_,H,D,_) when is_integer(H), is_integer(D), H+D<0 -> false;
-is_good_0(_,H,D,_) when is_integer(H), is_integer(D), H+D>63 -> false;
-is_good_0(black,H,D,Board) when is_integer(H), is_integer(D) ->
- case element((H+D)+1,Board) of
- white -> is_good_1(black,H+D,dir(H+D,D),Board);
- _ -> false
- end;
-is_good_0(white,H,D,Board) when is_integer(H), is_integer(D) ->
- case element((H+D)+1,Board) of
- black -> is_good_1(white,H+D,dir(H+D,D),Board);
- _ -> false
- end.
-
-is_good_1(_,_,false,_) -> false;
-is_good_1(_,H,D,_) when is_integer(H), is_integer(D), H+D<0 -> false;
-is_good_1(_,H,D,_) when is_integer(H), is_integer(D), H+D>63 -> false;
-is_good_1(black,H,D,Board) when is_integer(H), is_integer(D) ->
- case element((H+D)+1,Board) of
- white -> is_good_1(black,H+D,dir(H+D,D),Board);
- black -> throw(true);
- _ -> false
- end;
-is_good_1(white,H,D,Board) when is_integer(H), is_integer(D) ->
- case element((H+D)+1,Board) of
- black -> is_good_1(white,H+D,dir(H+D,D),Board);
- white -> throw(true);
- _ -> false
- end.
-
-%%-------------------------------------------------------
-%% turn(Colour,Draw,Board) - returns an updated board
-%% turn all possible pieces
-%% on the board
-%% Neighbours are not changed !!
-%%-------------------------------------------------------
-
-turn(Colour,Draw,{Bset,Board}) ->
- {Bset,turn(Colour,Draw,-9,
- turn(Colour,Draw,-8,
- turn(Colour,Draw,-7,
- turn(Colour,Draw,-1,
- turn(Colour,Draw,1,
- turn(Colour,Draw,7,
- turn(Colour,Draw,8,
- turn(Colour,Draw,9,Board))))))))}.
-
-turn(Colour,H,D,Board) ->
- case catch is_good_0(Colour,H,dir(H,D),Board) of
- true ->
- turn_0(Colour,H,D,Board);
- false ->
- Board
- end.
-
-turn_0(_,H,D,B) when is_integer(H), is_integer(D), H+D<0 -> B;
-turn_0(_,H,D,B) when is_integer(H), is_integer(D), H+D>63 -> B;
-turn_0(black,H,D,Board) when is_integer(H), is_integer(D) ->
- E = H+D,
- case element(E+1,Board) of
- white -> turn_0(black,H+D,D,swap(black,E,Board));
- _ -> Board
- end;
-turn_0(white,H,D,Board) when is_integer(H), is_integer(D) ->
- E = H+D,
- case element(E+1,Board) of
- black -> turn_0(white,H+D,D,swap(white,E,Board));
- _ -> Board
- end.
-
-%%-------------------------------------------------------
-%% swap(Colour,Pos,Board) - returns an updated board
-%% turn a piece on the board
-%% Neighbours are not changed !!
-%%-------------------------------------------------------
-
-swap(Colour,Pos,Board) when is_integer(Pos) ->
- setelement(Pos+1,Board,Colour).
-
-score(Pos) -> score1({col(Pos),row(Pos)}).
-
-score1({Column,1}) when Column >= 3, Column =< 6 -> 20;
-score1({Column,8}) when Column >= 3, Column =< 6 -> 20;
-score1({1,Line}) when Line >= 3, Line =< 6 -> 20;
-score1({8,Line}) when Line >= 3, Line =< 6 -> 20;
-score1({Column,2}) when Column >= 3, Column =< 6 -> -7;
-score1({Column,7}) when Column >= 3, Column =< 6 -> -7;
-score1({2,Line}) when Line >= 3, Line =< 6 -> -7;
-score1({7,Line}) when Line >= 3, Line =< 6 -> -7;
-score1({Column,Line}) when Column >= 3, Column =< 6,
- Line >= 3, Line =< 6 -> 1;
-score1({1,1}) -> 100;
-score1({1,8}) -> 100;
-score1({8,1}) -> 100;
-score1({8,8}) -> 100;
-score1({2,1}) -> -30;
-score1({7,1}) -> -30;
-score1({1,2}) -> -30;
-score1({8,2}) -> -30;
-score1({1,7}) -> -30;
-score1({8,7}) -> -30;
-score1({2,8}) -> -30;
-score1({7,8}) -> -30;
-score1({2,2}) -> -50;
-score1({7,2}) -> -50;
-score1({2,7}) -> -50;
-score1({7,7}) -> -50.
-
-%%-------------------------------------------------------
-%% dir(Pos,Dir) - return Dir if allowed direction at Pos.
-%% else return false.
-%%-------------------------------------------------------
-
-dir(0,1) -> 1; % {1,1}
-dir(0,8) -> 8;
-dir(0,9) -> 9;
-dir(0,_) -> false;
-
-dir(7,-1) -> -1; % {8,1}
-dir(7,7) -> 7;
-dir(7,8) -> 8;
-dir(7,_) -> false;
-
-dir(56,-8) -> -8; % {1,8}
-dir(56,-7) -> -7;
-dir(56,1) -> 1;
-dir(56,_) -> false;
-
-dir(63,-9) -> -9; % {8,8}
-dir(63,-8) -> -8;
-dir(63,-1) -> -1;
-dir(63,_) -> false;
-
-dir(Pos,-1) when (Pos bsr 3) == 0 -> -1; % {_,1}
-dir(Pos,1) when (Pos bsr 3) == 0 -> 1;
-dir(Pos,7) when (Pos bsr 3) == 0 -> 7;
-dir(Pos,8) when (Pos bsr 3) == 0 -> 8;
-dir(Pos,9) when (Pos bsr 3) == 0 -> 9;
-dir(Pos,_) when (Pos bsr 3) == 0 -> false;
-
-dir(Pos,-9) when (Pos bsr 3) == 7 -> -9; % {_,8}
-dir(Pos,-8) when (Pos bsr 3) == 7 -> -8;
-dir(Pos,-7) when (Pos bsr 3) == 7 -> -7;
-dir(Pos,-1) when (Pos bsr 3) == 7 -> -1;
-dir(Pos,1) when (Pos bsr 3) == 7 -> 1;
-dir(Pos,_) when (Pos bsr 3) == 7 -> false;
-
-dir(Pos,-8) when (Pos band 7) == 0 -> -8; % {1,_}
-dir(Pos,-7) when (Pos band 7) == 0 -> -7;
-dir(Pos,1) when (Pos band 7) == 0 -> 1;
-dir(Pos,8) when (Pos band 7) == 0 -> 8;
-dir(Pos,9) when (Pos band 7) == 0 -> 9;
-dir(Pos,_) when (Pos band 7) == 0 -> false;
-
-dir(Pos,-9) when (Pos band 7) == 7 -> -9; % {8,_}
-dir(Pos,-8) when (Pos band 7) == 7 -> -8;
-dir(Pos,-1) when (Pos band 7) == 7 -> -1;
-dir(Pos,7) when (Pos band 7) == 7 -> 7;
-dir(Pos,8) when (Pos band 7) == 7 -> 8;
-dir(Pos,_) when (Pos band 7) == 7 -> false;
-
-dir(_Pos,Dir) -> Dir.
-
diff --git a/lib/gs/contribs/othello/othello_board.erl b/lib/gs/contribs/othello/othello_board.erl
deleted file mode 100644
index cc055b1fa1..0000000000
--- a/lib/gs/contribs/othello/othello_board.erl
+++ /dev/null
@@ -1,649 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(othello_board).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
--export([start/0,stop/0,init/0]).
-
-
-%%----------------------------------------------------------------------
-%% The Othello program now uses the gs graphical package instead of the
-%% pxw package.
-%%
-%% Differences are, explanation why and source of change in parenthesis:
-%%
-%% - Buttons looks different (gs feature)
-%% - The black box around "Black to draw" have been removed. (me)
-%% - The Colour and Level menues have been moved directly down to the
-%% 'Status' box. (usability update, my addition)
-%% - The mouse pointer does not change into a watch when the computer
-%% is thinking (not supported in gs)
-%% - Buttons does not flash when being beeped. (not supported in gs)
-%%
-%%
-%% /Peter
-%%
-%%----------------------------------------------------------------------
-
-
--define(BGCOL,forestgreen).
-
-start() ->
- spawn(othello_board,init,[]).
-
-stop() ->
- ok.
-
-%% This is not an application so we don't have their way of knowing
-%% a private data directory where the GIF files are located (this directory).
-%% We can find GS and makes it relative from there /kgb
-
--define(BitmapPath,"../contribs/othello/priv").
-
-setup_path() ->
- GsPrivDir = code:priv_dir(gs),
- Path = filename:join(GsPrivDir,?BitmapPath),
- put(path,Path).
-
-path() -> get(path).
-
-
-
-%%
-%% The button area are the Quit, Rules buttons at the top of the window.
-%% The Status area is the black and white scores level and colour etc
-%% inbetween the buttons and the othello board.
-%% The board is the 8x8 board where othello battles are fought.
-%%
-init() ->
- process_flag(trap_exit,true),
- setup_path(),
- S = gs:start(),
- put(windowroot,S), % Ugly global store
-
- %% Shell coordinates
- W = 496,
- H = 636,
-
- %% Fix top window
- Shell = gs:create(window, S, [{title,"Othello"},
- {width, W},{height, H}]),
-
-
- %% Setup window contents
-
- setup_buttons(Shell,0,0,W,40), % Fix Menubar
- setup_status_box(Shell,0,40,W,100), % Fix Status area
- setup_board(Shell,0,140,496,496), % Combat board
-
- GamePid = othello:new_game(white,black,1,first_time),
-
- %% Default settings
- Options = {white,black,1},
- %%Wids = {Status,B,W,Dr,Le,Co},
- Wids = {change,this,at,later,stage,ponto},
- write_options(Options,Wids),
-
- gs:config(Shell, {map, true}), %Make win visible
-
- loop(computer,GamePid,Shell,Wids,Options).
-
-
-
-
-
-
-loop(User,GamePid,Shell,Wids,Options) ->
- receive
- {gs,ButtId, click,_ButtId1,[Button]} ->
- GamePid1 = but_pressed(Button,ButtId,User,GamePid,Shell,
- Wids,Options),
- loop(User,GamePid1,Shell,Wids,Options);
-
- {gs,_, click,_,[MenuItem,_MenuIndex]} ->
- Ops = menu_selected(MenuItem,User,GamePid,Wids,Options),
- loop(User,GamePid,Shell,Wids,Ops);
-
- {'EXIT',GamePid,_} ->
- loop(User,null,Shell,Wids,Options);
-
- {'EXIT',_,_} ->
- loop(User,GamePid,Shell,Wids,Options);
-
- GameMsg ->
- game_msg(GameMsg,User,GamePid,Shell,Wids,Options)
- end.
-
-but_pressed("Quit",_ButtId,_User,_GamePid,_Shell,_Wids,_Op) ->
- stop(),
- exit(quit);
-but_pressed("Rules",_ButtId,_User,GamePid,_Shell,_Wids,_Op) ->
- io:format("No rules, do as you wish~n",[]),
- GamePid;
-but_pressed("Help",_ButtId,_User,GamePid,_Shell,_Wids,_Op) ->
- io:format("Othello game~n",[]),
- io:format("------------~n",[]),
- io:format(" Put markers by clicking in squares~n",[]),
- io:format(" Change level by clicking on it~n",[]),
- io:format(" Change colour by clicking on it~n",[]),
- io:format("~n",[]),
- GamePid;
-but_pressed("Newgame",_ButtId,_User,GamePid,_Shell,Wids,Options) ->
- new_game(GamePid,Wids,Options);
-but_pressed([],ButtId,User,GamePid,_Shell,_Wids,_Op)
- when is_pid(GamePid),User == player ->
- [C,R] = atom_to_list(ButtId),
- GamePid ! {self(),position,othello_adt:pos(C-96,translate(R-48))},
- GamePid;
-but_pressed([],ButtId,_User,GamePid,_Shell,_Wids,_Op) ->
- [C,R] = atom_to_list(ButtId),
- beep(othello_adt:pos(C-96,translate(R-48))),
- GamePid;
-but_pressed(Button,ButtId,_User,GamePid,_Shell,_Wids,_Op) ->
- io:format('Not implemented button pressed ~p, ~p!!!~n',[ButtId,Button]),
- GamePid.
-
-menu_selected("Black",_User,_GamePid,Wids,Options) ->
- Op0 = setelement(1,Options,white),
- Op1 = setelement(2,Op0,white),
- write_options(Op1,Wids),
- Op1;
-menu_selected("White",_User,_GamePid,Wids,Options) ->
- Op0 = setelement(1,Options,black),
- Op1 = setelement(2,Op0,black),
- write_options(Op1,Wids),
- Op1;
-menu_selected("Black (begin)",_User,_GamePid,Wids,Options) ->
- Op0 = setelement(1,Options,white),
- Op1 = setelement(2,Op0,black),
- write_options(Op1,Wids),
- Op1;
-menu_selected("White (begin)",_User,_GamePid,Wids,Options) ->
- Op0 = setelement(1,Options,black),
- Op1 = setelement(2,Op0,white),
- write_options(Op1,Wids),
- Op1;
-menu_selected("Beginner",_User,_GamePid,Wids,Options) ->
- Op1 = setelement(3,Options,1),
- write_options(Op1,Wids),
- Op1;
-menu_selected("Intermediate",_User,_GamePid,Wids,Options) ->
- Op1 = setelement(3,Options,2),
- write_options(Op1,Wids),
- Op1;
-menu_selected("Advanced",_User,_GamePid,Wids,Options) ->
- Op1 = setelement(3,Options,3),
- write_options(Op1,Wids),
- Op1;
-menu_selected("Expert",_User,_GamePid,Wids,Options) ->
- Op1 = setelement(3,Options,4),
- write_options(Op1,Wids),
- Op1;
-menu_selected(What,_User,_GamePid,_Wids,Options) ->
- io:format('Menu item not implemented <~s>~n',[What]),
- Options.
-
-game_msg(Msg,User,GamePid,Shell,Wids,Options) ->
- case Msg of
- {GamePid,new_mark,Pos,Colour} ->
- new_mark(Pos,Colour),
- loop(User,GamePid,Shell,Wids,Options);
-
- {GamePid,illegal_draw,Draw} ->
- beep(Draw),
- loop(User,GamePid,Shell,Wids,Options);
-
- {GamePid,player,Computer,Computer} ->
- show_player(element(1,Wids),Computer),
- cursor("watch"),
- GamePid ! {self(),go_on_play},
- loop(computer,GamePid,Shell,Wids,Options);
-
- {GamePid,player,_Computer,Player} ->
- show_player(element(1,Wids),Player),
- cursor("top_left_arrow"),
- GamePid ! {self(),go_on_play},
- loop(player,GamePid,Shell,Wids,Options);
-
- {GamePid,omit_draw,Player} ->
- omit_draw(GamePid,Player),
- loop(User,GamePid,Shell,Wids,Options);
-
- {GamePid,score,WhiteRes,BlackRes} ->
- write_score(Wids,WhiteRes,BlackRes),
- loop(User,GamePid,Shell,Wids,Options);
-
- {GamePid,draw,Draw} ->
- write_draw(Wids,Draw),
- loop(User,GamePid,Shell,Wids,Options);
-
- {GamePid,game_over,WhiteRes,BlackRes} ->
- game_over(WhiteRes,BlackRes),
- loop(User,GamePid,Shell,Wids,Options);
-
- What ->
- io:format('game_msg received: ~w~n',[What]),
- loop(User,GamePid,Shell,Wids,Options)
- end.
-
-
-new_game(GamePid,Wids,Options) when is_pid(GamePid) ->
- exit(GamePid,kill),
- new_game(Wids,Options);
-new_game(_,Wids,Options) ->
- new_game(Wids,Options).
-
-new_game(_Wids,Options) ->
- label("",lastdraw),
- Computer = element(1,Options),
- Start = element(2,Options),
- Depth = element(3,Options),
- othello:new_game(Computer,Start,Depth,restart).
-
-new_mark(Pos,Colour) ->
- Col = othello_adt:col(Pos),
- Row = othello_adt:row(Pos),
- Name = [Col+96,translate(Row)+48],
- Button = get(Name),
- butbit(Button,Colour).
-
-beep(Draw) ->
- Col = othello_adt:col(Draw),
- Row = othello_adt:row(Draw),
- Name = [Col+96,translate(Row)+48],
- Button = get(Name),
- bell(Button).
-
-show_player(_Status,white) ->
- label("White to draw",todraw);
-show_player(_Status,black) ->
- label("Black to draw",todraw).
-
-write_score(_Wids,WhiteRes,BlackRes) ->
- label(integer_to_list(BlackRes),bscore),
- label(integer_to_list(WhiteRes),wscore).
-
-write_draw(_Wids,Draw) ->
- Col = othello_adt:col(Draw),
- Row = othello_adt:row(Draw),
- label(lists:flatten(io_lib:format('{~w,~w}',[Col,Row])), lastdraw).
-
-write_options(Options,Wids) ->
- write_colour(Options,Wids),
- write_level(Options,Wids).
-
-write_colour(Options,Wids) ->
- write_colour(element(1,Options),element(2,Options),Wids).
-
-write_colour(black,white,_Wids) -> label("White (begin)",colour);
-write_colour(black,black,_Wids) -> label("White",colour);
-write_colour(white,black,_Wids) -> label("Black (begin)",colour);
-write_colour(white,white,_Wids) -> label("Black",colour).
-
-write_level(Options,_Wids) ->
- case element(3,Options) of
- 1 -> label("Beginner",level);
- 2 -> label("Intermediate",level);
- 3 -> label("Advanced",level);
- 4 -> label("Expert",level)
- end.
-
-cursor(_What) ->
- done.
-%cursor(What) -> cursor(get(),What).
-
-%cursor([{[C,R],Button}|Buts],What) ->
-% set_widget(Button,"cursor",What),
-% cursor(Buts,What);
-%cursor([_|Buts],What) ->
-% cursor(Buts,What);
-%cursor([],_) ->
-% true.
-
-translate(1) -> 8;
-translate(2) -> 7;
-translate(3) -> 6;
-translate(4) -> 5;
-translate(5) -> 4;
-translate(6) -> 3;
-translate(7) -> 2;
-translate(8) -> 1.
-
-bitmap(grey) -> bitmap_path("square.bm");
-bitmap(black) -> bitmap_path("marker.bm");
-bitmap(white) -> bitmap_path("marker.bm").
-
-bitmap_path(Bitmap) ->
- filename:join(path(),Bitmap).
-
-xy_position([[Letter,Digit],_,_]) ->
- LettPos = Letter - 97,
- X = LettPos*60 ,
- Y = (8 - list_to_integer([Digit])) * 60,
- {X+6,Y+6};
-xy_position(X) ->
- io:format("xy_position: ~w~n",[{error,X}]).
-
-
-board() ->
- [["a1",grey,nil],
- ["b1",grey,nil],
- ["c1",grey,nil],
- ["d1",grey,nil],
- ["e1",grey,nil],
- ["f1",grey,nil],
- ["g1",grey,nil],
- ["h1",grey,nil],
-
- ["a2",grey,nil],
- ["b2",grey,nil],
- ["c2",grey,nil],
- ["d2",grey,nil],
- ["e2",grey,nil],
- ["f2",grey,nil],
- ["g2",grey,nil],
- ["h2",grey,nil],
-
- ["a3",grey,nil],
- ["b3",grey,nil],
- ["c3",grey,nil],
- ["d3",grey,nil],
- ["e3",grey,nil],
- ["f3",grey,nil],
- ["g3",grey,nil],
- ["h3",grey,nil],
-
- ["a4",grey,nil],
- ["b4",grey,nil],
- ["c4",grey,nil],
- ["d4",white,nil],
- ["e4",black,nil],
- ["f4",grey,nil],
- ["g4",grey,nil],
- ["h4",grey,nil],
-
- ["a5",grey,nil],
- ["b5",grey,nil],
- ["c5",grey,nil],
- ["d5",black,nil],
- ["e5",white,nil],
- ["f5",grey,nil],
- ["g5",grey,nil],
- ["h5",grey,nil],
-
- ["a6",grey,nil],
- ["b6",grey,nil],
- ["c6",grey,nil],
- ["d6",grey,nil],
- ["e6",grey,nil],
- ["f6",grey,nil],
- ["g6",grey,nil],
- ["h6",grey,nil],
-
- ["a7",grey,nil],
- ["b7",grey,nil],
- ["c7",grey,nil],
- ["d7",grey,nil],
- ["e7",grey,nil],
- ["f7",grey,nil],
- ["g7",grey,nil],
- ["h7",grey,nil],
-
- ["a8",grey,nil],
- ["b8",grey,nil],
- ["c8",grey,nil],
- ["d8",grey,nil],
- ["e8",grey,nil],
- ["f8",grey,nil],
- ["g8",grey,nil],
- ["h8",grey,nil]].
-
-
-omit_draw(GamePid,Player) ->
-% %% Find mouse coords first
-% %% This was not possible in gs
-
- W = 200, H = 100, Root = get(windowroot),
- Box = gs:create(window, Root, [{title,"OMIT"}, {width, W},{height, H}]),
-
- mk_label_c(lists:flatten(io_lib:format('~w has to omit draw !',[Player])),
- Box, W, 10),
-
- mk_button_c("Ok", Box, W, H-40, 80, 30),
-
- gs:config(Box, {map, true}), %Make win visible
-
- receive
- {gs,_, click,_,["Ok"]} ->
- gs:destroy(Box),
- GamePid ! {self(),continue}
- end.
-
-game_over(WhiteRes,BlackRes) ->
-% %% Find mouse coords first
-% %% This was not possible in gs
-
- W = 200, H = 160,
- Root = get(windowroot),
- Box = gs:create(window, Root, [{title,"GAME OVER"},
- {width, W},{height, H}]),
-
- mk_label_c("GAME OVER", Box, W, 10),
-
- mk_label_c(lists:flatten(io_lib:format('White score: ~w',[WhiteRes])),
- Box,W,40),
- mk_label_c(lists:flatten(io_lib:format('Black score: ~w',[BlackRes])),
- Box,W,70),
-
- mk_button_c("Ok", Box, W, H-40, 80, 30),
-
- gs:config(Box, {map, true}), %Make win visible
-
- receive
- {gs,_, click,_,["Ok"]} ->
- gs:destroy(Box)
- end.
-
-
-
-%% ----------------------------------------------------------------
-%% Library functions.
-%% ----------------------------------------------------------------
-
-bell(Widget) ->
- %% gs does not support bells,
- Widget.
-
-label(Text,Label) ->
- gs:config(Label,[{label,{text,Text}}]).
-
-%% mk_label in centered version
-mk_label_c(Label,Parent,Width,Y) ->
- W = 8*length(Label),
- X = trunc((Width-W)/2),
- gs:create(label,Parent,[{width,W}, {height, 20}, {x,X}, {y,Y},
- {label, {text, Label}}]).
-
-
-
-
-setup_buttons(Shell,X,Y,W,H) ->
- ButBox = gs:create(frame, Shell,[{x,X}, {y,Y},{bg,white},
- {width,W}, {height,H}]),
- C = gs:create(canvas,ButBox,[{x,X}, {y,Y}, {width, W}, {height, H},
- {bg,white}]),
- gs:create(line, C, [{coords, [{0,H-1},{W,H-1}]}]),
-
-
- mk_button("Quit",ButBox, 10, 10, 70, 20),
- mk_button("Rules",ButBox, 80, 10, 70, 20),
- mk_button("Newgame",ButBox, 150, 10, 70, 20),
- mk_button("Help",ButBox, 220, 10, 70, 20),
-%% mk_button("Level",ButBox, 290, 10, 70, 20),
-
- done.
-
-
-
-
-
-%%----------------------------------------
-%% Sets up the middle window w. all the status info in.
-%% The labels are given names:
-%% bscore, wscore, lastdraw, todraw, level and colour to simplify
-%% their frequent setting
-%%
-setup_status_box(Shell,X,Y,W,H) ->
- F = gs:create(frame, Shell,[{x,X}, {y,Y},
- {width,W}, {height,H},{bg,white}]),
- C = gs:create(canvas,F,[{x,0}, {y,0}, {width, W}, {height, H},{bg,white}]),
- gs:create(line, C, [{coords, [{0,H-1},{W,H-1}]}]),
-
- %% Left side
- gs:create(label,F,[{align,w},{x,10}, {y,5}, {width, 100},
- {label,{text, "Black score:"}},{bg,white}]),
- gs:create(label,bscore,F,[{align,w},{x,110}, {y,5}, {width, 40},
- {label,{text, "2"}},{bg,white}]),
- gs:create(label,F,[{align,w},{x,10}, {y,35}, {width, 100},
- {label,{text, "White score:"}},{bg,white}]),
- gs:create(label,wscore,F,[{align,w},{x,110}, {y,35}, {width, 40},
- {label,{text, "2"}},{bg,white}]),
- gs:create(label,F,[{align,w},{x,10}, {y,65}, {width, 100},
- {label,{text, "Last draw:"}},{bg,white}]),
- gs:create(label,lastdraw,F,[{align,w},{x,110}, {y,65}, {width, 40},
- {label,{text, ""}},{bg,white}]),
-
-
- %% Right side
- X2 = trunc(W/2)+10,
- gs:create(label,todraw,F,[{align,w},{x,X2}, {y,5}, {width, 100},
- {label,{text, "Black to draw:"}},{bg,white}]),
-
- gs:create(label,F,[{align,w},{x,X2}, {y,35}, {width, 80},
- {label,{text, "Level:"}},{bg,white}]),
- setup_level_menu(F,X2+80,35),
-
-%% gs:create(label,level,F,[{align,w},{x,X2+80}, {y,35}, {width, 130},
-%% {label,{text, "Intermediate"}},{bg,white}]),
- gs:create(label,F,[{align,w},{x,X2}, {y,65}, {width, 80},
- {label,{text, "Colour:"}},{bg,white}]),
- setup_col_menu(F,X2+80,65),
-
-%% gs:create(label,colour,F,[{align,w},{x,X2+80}, {y,65}, {width, 120},
-%% {label,{text, "black (begin)"}},{bg,white}]),
-
- done.
-
-
-setup_col_menu(P,X,Y) ->
- MB = gs:create(menubutton,colour,P,
- [{x,X}, {y,Y}, {bw,3},
- %%{width,W}, {height,H},
- {align,w}, {bg,white},
- {relief, raised},
- {activefg,white}, {activebg,black},
- {label, {text,"Colours"}}]),
-
- M = gs:create(menu,MB,[]),
- gs:create(menuitem,M,[{label,{text,"Black (begin)"}}]),
- gs:create(menuitem,M,[{label,{text,"Black"}}]),
- gs:create(menuitem,M,[{label,{text,"White (begin)"}}]),
- gs:create(menuitem,M,[{label,{text,"White"}}]),
- done.
-
-setup_level_menu(P,X,Y) ->
- MB = gs:create(menubutton,level,P,
- [{x,X}, {y,Y},
- %%{width,W}, {height,H},
- {relief, raised},
- {activefg,white}, {activebg,black},
- {align,w}, {bg,white},
- {label, {text,"Colours"}}]),
-
- M = gs:create(menu,MB,[]),
- gs:create(menuitem,M,[{label,{text,"Beginner"}}]),
- gs:create(menuitem,M,[{label,{text,"Intermediate"}}]),
- gs:create(menuitem,M,[{label,{text,"Advanced"}}]),
- gs:create(menuitem,M,[{label,{text,"Expert"}}]),
- done.
-
-
-setup_board(Shell,X,Y,W,H) ->
- F = gs:create(frame, Shell,[{x,X}, {y,Y},
- {width,W}, {height,H},{bg,white}]),
- display_board(F).
-
-
-mk_button(Label, Parent, X, Y, W, H) ->
- gs:create(button,Parent,[{width,W}, {height, H}, {x,X}, {y,Y},
- {label, {text, Label}}, {bg,white},
- {activefg,white}, {activebg,black}]).
-
-%% Centers a button around Width
-mk_button_c(Label, Parent, Width, Y, W, H) ->
- X = trunc((Width-W)/2),
- gs:create(button,Parent,[{width,W}, {height, H}, {x,X}, {y,Y},
- {label, {text, Label}}, {bg,white}]).
-
-
-butbit(Button,Col) ->
- gs:config(Button,[
- {label,{image,bitmap(Col)}},
- {fg, Col},
- {activefg,Col},
- {label, {image, bitmap(Col)}}]),
- Button.
-
-mk_board_butt(Top,Name,X,Y,Col) ->
- B = gs:create(button,list_to_atom(Name), Top,
- [{x,X}, {y,Y}, {width,60}, {height,60},
- {padx,5},{pady,5},
- {relief,flat},
- {bg,?BGCOL}, {activebg,?BGCOL}]),
- butbit(B,Col),
- B.
-
-
-
-display_board(Top) ->
- Board = board(),
- display_board(Top,Board,1).
-
-display_board(_,_,65) -> true;
-display_board(Top,[H|T],Place) ->
- [Name,Colour,_] = H,
- {X,Y} = xy_position(H),
- Button = mk_board_butt(Top,Name,X,Y,Colour),
- %%Button = mk_button("",Name,Top,X,Y,60,60),
- put(Name,Button),
- %%Bitmap = bitmap(Colour),
- %%butbit(Button,Bitmap),
- %%set_widget(Button,"internalWidth","1"),
- %%set_widget(Button,"internalHeight","1"),
- %%borderWidth(2,Button),
- display_board(Top,T,Place+1).
-
-
diff --git a/lib/gs/contribs/othello/priv/marker.bm b/lib/gs/contribs/othello/priv/marker.bm
deleted file mode 100644
index fe7f3df820..0000000000
--- a/lib/gs/contribs/othello/priv/marker.bm
+++ /dev/null
@@ -1,43 +0,0 @@
-#define marker2_width 60
-#define marker2_height 60
-static unsigned char marker2_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
- 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xc0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
- 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x00, 0xc0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x00, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x3f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x3f, 0x00,
- 0x00, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0xff, 0xcf, 0x1f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xc7, 0x0f, 0x00,
- 0x00, 0xfc, 0xff, 0xff, 0xff, 0xe7, 0x07, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0x7f, 0xf1, 0x03, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xbf, 0xfc, 0x03, 0x00,
- 0x00, 0xf0, 0xff, 0xff, 0x59, 0xff, 0x01, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
- 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
- 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/gs/contribs/othello/priv/square.bm b/lib/gs/contribs/othello/priv/square.bm
deleted file mode 100644
index 4e6880b330..0000000000
--- a/lib/gs/contribs/othello/priv/square.bm
+++ /dev/null
@@ -1,43 +0,0 @@
-#define square_width 60
-#define square_height 60
-static unsigned char square_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/gs/doc/src/Makefile b/lib/gs/doc/src/Makefile
index 3f8c7cdc95..b270bc84fe 100644
--- a/lib/gs/doc/src/Makefile
+++ b/lib/gs/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/gs/doc/src/book.xml b/lib/gs/doc/src/book.xml
index 2e83697bdd..15d911072e 100644
--- a/lib/gs/doc/src/book.xml
+++ b/lib/gs/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs.xml b/lib/gs/doc/src/gs.xml
index 0927902f75..3cbb6dca62 100644
--- a/lib/gs/doc/src/gs.xml
+++ b/lib/gs/doc/src/gs.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2014</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs_chapter1.xml b/lib/gs/doc/src/gs_chapter1.xml
index fea29dccbc..65e0ee208a 100644
--- a/lib/gs/doc/src/gs_chapter1.xml
+++ b/lib/gs/doc/src/gs_chapter1.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs_chapter2.xmlsrc b/lib/gs/doc/src/gs_chapter2.xmlsrc
index 20c8a8bd81..f3ec878bc6 100644
--- a/lib/gs/doc/src/gs_chapter2.xmlsrc
+++ b/lib/gs/doc/src/gs_chapter2.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs_chapter3.xml b/lib/gs/doc/src/gs_chapter3.xml
index 47967d466a..f21e75d970 100644
--- a/lib/gs/doc/src/gs_chapter3.xml
+++ b/lib/gs/doc/src/gs_chapter3.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs_chapter4.xmlsrc b/lib/gs/doc/src/gs_chapter4.xmlsrc
index 99d4fcd124..9085bdbe24 100644
--- a/lib/gs/doc/src/gs_chapter4.xmlsrc
+++ b/lib/gs/doc/src/gs_chapter4.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs_chapter5.xmlsrc b/lib/gs/doc/src/gs_chapter5.xmlsrc
index 56e69bfb2e..1cad8d56bb 100644
--- a/lib/gs/doc/src/gs_chapter5.xmlsrc
+++ b/lib/gs/doc/src/gs_chapter5.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs_chapter6.xmlsrc b/lib/gs/doc/src/gs_chapter6.xmlsrc
index 74790ae6a3..ecb891ad6f 100644
--- a/lib/gs/doc/src/gs_chapter6.xmlsrc
+++ b/lib/gs/doc/src/gs_chapter6.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs_chapter7.xmlsrc b/lib/gs/doc/src/gs_chapter7.xmlsrc
index d27bd67673..d0b0859a8f 100644
--- a/lib/gs/doc/src/gs_chapter7.xmlsrc
+++ b/lib/gs/doc/src/gs_chapter7.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/gs_chapter8.xmlsrc b/lib/gs/doc/src/gs_chapter8.xmlsrc
index b5959d972b..5c74c63aef 100644
--- a/lib/gs/doc/src/gs_chapter8.xmlsrc
+++ b/lib/gs/doc/src/gs_chapter8.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/notes.xml b/lib/gs/doc/src/notes.xml
index 02d4f1cec3..20188c75e2 100644
--- a/lib/gs/doc/src/notes.xml
+++ b/lib/gs/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,7 +31,22 @@
</header>
<p>This document describes the changes made to the GS application.</p>
- <section><title>GS 1.6</title>
+ <section><title>GS 1.6.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>GS 1.6</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/gs/doc/src/part.xml b/lib/gs/doc/src/part.xml
index 6ae945a9db..99c3f20243 100644
--- a/lib/gs/doc/src/part.xml
+++ b/lib/gs/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/part_notes.xml b/lib/gs/doc/src/part_notes.xml
index a829534bfb..c8876a14d4 100644
--- a/lib/gs/doc/src/part_notes.xml
+++ b/lib/gs/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/doc/src/ref_man.xml b/lib/gs/doc/src/ref_man.xml
index 1c48ee1f31..1e701ab71b 100644
--- a/lib/gs/doc/src/ref_man.xml
+++ b/lib/gs/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/gs/examples/Makefile b/lib/gs/examples/Makefile
index eab10d125b..2612e67f88 100644
--- a/lib/gs/examples/Makefile
+++ b/lib/gs/examples/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/ball.erl b/lib/gs/examples/ball.erl
index ccd76619a9..c5d1e10db5 100644
--- a/lib/gs/examples/ball.erl
+++ b/lib/gs/examples/ball.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/browser.erl b/lib/gs/examples/browser.erl
index 2037b1bf0d..14aca11662 100644
--- a/lib/gs/examples/browser.erl
+++ b/lib/gs/examples/browser.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/calc.erl b/lib/gs/examples/calc.erl
index d3bcda4732..6a58475f13 100644
--- a/lib/gs/examples/calc.erl
+++ b/lib/gs/examples/calc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/calc2.erl b/lib/gs/examples/calc2.erl
index 89d1c00527..bf9f9b7bbd 100644
--- a/lib/gs/examples/calc2.erl
+++ b/lib/gs/examples/calc2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/color_demo.erl b/lib/gs/examples/color_demo.erl
index 8c9fd98753..5d2170a394 100644
--- a/lib/gs/examples/color_demo.erl
+++ b/lib/gs/examples/color_demo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/color_demo2.erl b/lib/gs/examples/color_demo2.erl
index 918d451f5d..3e0115c831 100644
--- a/lib/gs/examples/color_demo2.erl
+++ b/lib/gs/examples/color_demo2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/distrib_draw.erl b/lib/gs/examples/distrib_draw.erl
index 94177946a1..f704e2479e 100644
--- a/lib/gs/examples/distrib_draw.erl
+++ b/lib/gs/examples/distrib_draw.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/entry_demo.erl b/lib/gs/examples/entry_demo.erl
index 923784658c..f37780f352 100644
--- a/lib/gs/examples/entry_demo.erl
+++ b/lib/gs/examples/entry_demo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/event_test.erl b/lib/gs/examples/event_test.erl
index 03408a3ef6..ff2029ca01 100644
--- a/lib/gs/examples/event_test.erl
+++ b/lib/gs/examples/event_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/file_dialog.erl b/lib/gs/examples/file_dialog.erl
index b47c525592..1dffc5b009 100644
--- a/lib/gs/examples/file_dialog.erl
+++ b/lib/gs/examples/file_dialog.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/focus_demo.erl b/lib/gs/examples/focus_demo.erl
index ea4700e63b..1a69241a38 100644
--- a/lib/gs/examples/focus_demo.erl
+++ b/lib/gs/examples/focus_demo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/frac.erl b/lib/gs/examples/frac.erl
index 748837b6ce..33d25d34ec 100644
--- a/lib/gs/examples/frac.erl
+++ b/lib/gs/examples/frac.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/line_demo.erl b/lib/gs/examples/line_demo.erl
index da759a9684..25390d09b5 100644
--- a/lib/gs/examples/line_demo.erl
+++ b/lib/gs/examples/line_demo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/man.erl b/lib/gs/examples/man.erl
index 35c70838b6..97d897e191 100644
--- a/lib/gs/examples/man.erl
+++ b/lib/gs/examples/man.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/menu_demo.erl b/lib/gs/examples/menu_demo.erl
index 2fe96de132..c739e1dc87 100644
--- a/lib/gs/examples/menu_demo.erl
+++ b/lib/gs/examples/menu_demo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/examples/rubber.erl b/lib/gs/examples/rubber.erl
index 12622e5d94..129359dd03 100644
--- a/lib/gs/examples/rubber.erl
+++ b/lib/gs/examples/rubber.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/Makefile b/lib/gs/src/Makefile
index ff3080e20e..e19ce822b9 100644
--- a/lib/gs/src/Makefile
+++ b/lib/gs/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gs.appup.src b/lib/gs/src/gs.appup.src
index a2e87ee777..6cc21676e8 100644
--- a/lib/gs/src/gs.appup.src
+++ b/lib/gs/src/gs.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gs.erl b/lib/gs/src/gs.erl
index 7dd7eb60e3..23012da75d 100644
--- a/lib/gs/src/gs.erl
+++ b/lib/gs/src/gs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gs_frontend.erl b/lib/gs/src/gs_frontend.erl
index 2ebeb6c592..f46fdb36bb 100644
--- a/lib/gs/src/gs_frontend.erl
+++ b/lib/gs/src/gs_frontend.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gs_make.erl b/lib/gs/src/gs_make.erl
index 029bfc09ce..061b1944d1 100644
--- a/lib/gs/src/gs_make.erl
+++ b/lib/gs/src/gs_make.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gs_packer.erl b/lib/gs/src/gs_packer.erl
index cbbc003e7e..d16849e4e9 100644
--- a/lib/gs/src/gs_packer.erl
+++ b/lib/gs/src/gs_packer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gs_widgets.erl b/lib/gs/src/gs_widgets.erl
index 23cece9997..f0351049f9 100644
--- a/lib/gs/src/gs_widgets.erl
+++ b/lib/gs/src/gs_widgets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gse.erl b/lib/gs/src/gse.erl
index 03d7f4d81a..10fb341894 100644
--- a/lib/gs/src/gse.erl
+++ b/lib/gs/src/gse.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk.erl b/lib/gs/src/gstk.erl
index 3a3f3fa536..3119245db7 100644
--- a/lib/gs/src/gstk.erl
+++ b/lib/gs/src/gstk.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk.hrl b/lib/gs/src/gstk.hrl
index c3649867ce..931057573f 100644
--- a/lib/gs/src/gstk.hrl
+++ b/lib/gs/src/gstk.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_arc.erl b/lib/gs/src/gstk_arc.erl
index 91ca4353ef..c38bbf4756 100644
--- a/lib/gs/src/gstk_arc.erl
+++ b/lib/gs/src/gstk_arc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_button.erl b/lib/gs/src/gstk_button.erl
index 4885ee8a1c..2b466c30c3 100644
--- a/lib/gs/src/gstk_button.erl
+++ b/lib/gs/src/gstk_button.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_canvas.erl b/lib/gs/src/gstk_canvas.erl
index 90239455cd..102b81df7a 100644
--- a/lib/gs/src/gstk_canvas.erl
+++ b/lib/gs/src/gstk_canvas.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_checkbutton.erl b/lib/gs/src/gstk_checkbutton.erl
index 34246d67f8..ac8abaedf3 100644
--- a/lib/gs/src/gstk_checkbutton.erl
+++ b/lib/gs/src/gstk_checkbutton.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_db.erl b/lib/gs/src/gstk_db.erl
index f0eb6f55d4..d9379cb3c8 100644
--- a/lib/gs/src/gstk_db.erl
+++ b/lib/gs/src/gstk_db.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_editor.erl b/lib/gs/src/gstk_editor.erl
index 959e17a365..6376efc851 100644
--- a/lib/gs/src/gstk_editor.erl
+++ b/lib/gs/src/gstk_editor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_entry.erl b/lib/gs/src/gstk_entry.erl
index be72c6a1f2..a83bf2f896 100644
--- a/lib/gs/src/gstk_entry.erl
+++ b/lib/gs/src/gstk_entry.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_font.erl b/lib/gs/src/gstk_font.erl
index f108b2f765..80cc46d493 100644
--- a/lib/gs/src/gstk_font.erl
+++ b/lib/gs/src/gstk_font.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_frame.erl b/lib/gs/src/gstk_frame.erl
index a1ebb94407..2e9d160eef 100644
--- a/lib/gs/src/gstk_frame.erl
+++ b/lib/gs/src/gstk_frame.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_generic.erl b/lib/gs/src/gstk_generic.erl
index eb9adbdc05..db4e2fdff4 100644
--- a/lib/gs/src/gstk_generic.erl
+++ b/lib/gs/src/gstk_generic.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_grid.erl b/lib/gs/src/gstk_grid.erl
index 155aa071e4..4e8cffc018 100644
--- a/lib/gs/src/gstk_grid.erl
+++ b/lib/gs/src/gstk_grid.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_gridline.erl b/lib/gs/src/gstk_gridline.erl
index 6b22980835..d504ed5319 100644
--- a/lib/gs/src/gstk_gridline.erl
+++ b/lib/gs/src/gstk_gridline.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_gs.erl b/lib/gs/src/gstk_gs.erl
index 0f07c1da04..80be066626 100644
--- a/lib/gs/src/gstk_gs.erl
+++ b/lib/gs/src/gstk_gs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_image.erl b/lib/gs/src/gstk_image.erl
index 797489bcf8..124bda77a2 100644
--- a/lib/gs/src/gstk_image.erl
+++ b/lib/gs/src/gstk_image.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_label.erl b/lib/gs/src/gstk_label.erl
index 99c817aed8..2cdd36f331 100644
--- a/lib/gs/src/gstk_label.erl
+++ b/lib/gs/src/gstk_label.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_line.erl b/lib/gs/src/gstk_line.erl
index 4a9c02c53a..18c87b2011 100644
--- a/lib/gs/src/gstk_line.erl
+++ b/lib/gs/src/gstk_line.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_listbox.erl b/lib/gs/src/gstk_listbox.erl
index 351c1a12b2..50d0503629 100644
--- a/lib/gs/src/gstk_listbox.erl
+++ b/lib/gs/src/gstk_listbox.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_menu.erl b/lib/gs/src/gstk_menu.erl
index 4e372bda2a..2f12a20a7d 100644
--- a/lib/gs/src/gstk_menu.erl
+++ b/lib/gs/src/gstk_menu.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_menubar.erl b/lib/gs/src/gstk_menubar.erl
index 27c472e218..9916f64e00 100644
--- a/lib/gs/src/gstk_menubar.erl
+++ b/lib/gs/src/gstk_menubar.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_menubutton.erl b/lib/gs/src/gstk_menubutton.erl
index 7025d6b179..3f51a9df99 100644
--- a/lib/gs/src/gstk_menubutton.erl
+++ b/lib/gs/src/gstk_menubutton.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_menuitem.erl b/lib/gs/src/gstk_menuitem.erl
index ddc8dd64f7..968568a9a7 100644
--- a/lib/gs/src/gstk_menuitem.erl
+++ b/lib/gs/src/gstk_menuitem.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_oval.erl b/lib/gs/src/gstk_oval.erl
index 31174354e6..8e06378c0b 100644
--- a/lib/gs/src/gstk_oval.erl
+++ b/lib/gs/src/gstk_oval.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_polygon.erl b/lib/gs/src/gstk_polygon.erl
index 92ec18198e..013682d353 100644
--- a/lib/gs/src/gstk_polygon.erl
+++ b/lib/gs/src/gstk_polygon.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_port_handler.erl b/lib/gs/src/gstk_port_handler.erl
index 72297032c7..fee3dc7dac 100644
--- a/lib/gs/src/gstk_port_handler.erl
+++ b/lib/gs/src/gstk_port_handler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_radiobutton.erl b/lib/gs/src/gstk_radiobutton.erl
index d24c5a81ae..a778f46038 100644
--- a/lib/gs/src/gstk_radiobutton.erl
+++ b/lib/gs/src/gstk_radiobutton.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_rectangle.erl b/lib/gs/src/gstk_rectangle.erl
index fe16fa7c67..21e2a06cb4 100644
--- a/lib/gs/src/gstk_rectangle.erl
+++ b/lib/gs/src/gstk_rectangle.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_scale.erl b/lib/gs/src/gstk_scale.erl
index 4afd8f61ff..3512304867 100644
--- a/lib/gs/src/gstk_scale.erl
+++ b/lib/gs/src/gstk_scale.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_text.erl b/lib/gs/src/gstk_text.erl
index b8e6f53f00..b931030a3f 100644
--- a/lib/gs/src/gstk_text.erl
+++ b/lib/gs/src/gstk_text.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_widgets.erl b/lib/gs/src/gstk_widgets.erl
index b4e4b970d3..52c955af50 100644
--- a/lib/gs/src/gstk_widgets.erl
+++ b/lib/gs/src/gstk_widgets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/gstk_window.erl b/lib/gs/src/gstk_window.erl
index 8a9ef47100..c14cf2fd81 100644
--- a/lib/gs/src/gstk_window.erl
+++ b/lib/gs/src/gstk_window.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/tcl2erl.erl b/lib/gs/src/tcl2erl.erl
index f10d5b46b9..04229ccf49 100644
--- a/lib/gs/src/tcl2erl.erl
+++ b/lib/gs/src/tcl2erl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/tool_file_dialog.erl b/lib/gs/src/tool_file_dialog.erl
index c42f6af17c..a6d6f55f1f 100644
--- a/lib/gs/src/tool_file_dialog.erl
+++ b/lib/gs/src/tool_file_dialog.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/src/tool_utils.erl b/lib/gs/src/tool_utils.erl
index 9f2caa3eac..841aa926da 100644
--- a/lib/gs/src/tool_utils.erl
+++ b/lib/gs/src/tool_utils.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/gs/tcl/Makefile b/lib/gs/tcl/Makefile
index 9a8a00905d..2eb06cec61 100644
--- a/lib/gs/tcl/Makefile
+++ b/lib/gs/tcl/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2009. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/gs/tcl/Makefile.in b/lib/gs/tcl/Makefile.in
index f9e5a5db16..762973bd72 100644
--- a/lib/gs/tcl/Makefile.in
+++ b/lib/gs/tcl/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2012. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/gs/test/Makefile b/lib/gs/test/Makefile
index 493770745f..067e1adbb6 100644
--- a/lib/gs/test/Makefile
+++ b/lib/gs/test/Makefile
@@ -25,7 +25,7 @@ RELSYSDIR = $(RELEASE_PATH)/gs_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/gs/vsn.mk b/lib/gs/vsn.mk
index 345f0f37f2..c762507bab 100644
--- a/lib/gs/vsn.mk
+++ b/lib/gs/vsn.mk
@@ -1,2 +1,2 @@
-GS_VSN = 1.6
+GS_VSN = 1.6.1
diff --git a/lib/hipe/Makefile b/lib/hipe/Makefile
index f32faa9086..0676484fca 100644
--- a/lib/hipe/Makefile
+++ b/lib/hipe/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/Makefile b/lib/hipe/amd64/Makefile
index 29aabea17c..8dc2af2679 100644
--- a/lib/hipe/amd64/Makefile
+++ b/lib/hipe/amd64/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -73,7 +73,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += -DHIPE_AMD64 +warn_exported_vars
+ERL_COMPILE_FLAGS += -DHIPE_AMD64 -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/amd64/hipe_amd64_assemble.erl b/lib/hipe/amd64/hipe_amd64_assemble.erl
index 1bc2fd0c1f..a7b11f7c72 100644
--- a/lib/hipe/amd64/hipe_amd64_assemble.erl
+++ b/lib/hipe/amd64/hipe_amd64_assemble.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_defuse.erl b/lib/hipe/amd64/hipe_amd64_defuse.erl
index 7f3ba6a466..907f078f3f 100644
--- a/lib/hipe/amd64/hipe_amd64_defuse.erl
+++ b/lib/hipe/amd64/hipe_amd64_defuse.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_encode.erl b/lib/hipe/amd64/hipe_amd64_encode.erl
index c10e6b68a7..df15732cea 100644
--- a/lib/hipe/amd64/hipe_amd64_encode.erl
+++ b/lib/hipe/amd64/hipe_amd64_encode.erl
@@ -1,7 +1,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_frame.erl b/lib/hipe/amd64/hipe_amd64_frame.erl
index 412c021fec..f3bcdf302a 100644
--- a/lib/hipe/amd64/hipe_amd64_frame.erl
+++ b/lib/hipe/amd64/hipe_amd64_frame.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_liveness.erl b/lib/hipe/amd64/hipe_amd64_liveness.erl
index 9d8b80f337..5cfdbb0f3e 100644
--- a/lib/hipe/amd64/hipe_amd64_liveness.erl
+++ b/lib/hipe/amd64/hipe_amd64_liveness.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_main.erl b/lib/hipe/amd64/hipe_amd64_main.erl
index e95d6fec00..c22c6cd73b 100644
--- a/lib/hipe/amd64/hipe_amd64_main.erl
+++ b/lib/hipe/amd64/hipe_amd64_main.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_pp.erl b/lib/hipe/amd64/hipe_amd64_pp.erl
index bb10086865..7c3ee8458a 100644
--- a/lib/hipe/amd64/hipe_amd64_pp.erl
+++ b/lib/hipe/amd64/hipe_amd64_pp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_ra.erl b/lib/hipe/amd64/hipe_amd64_ra.erl
index 79e915fbe2..1d8453d54d 100644
--- a/lib/hipe/amd64/hipe_amd64_ra.erl
+++ b/lib/hipe/amd64/hipe_amd64_ra.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_ra_finalise.erl b/lib/hipe/amd64/hipe_amd64_ra_finalise.erl
index 721fe20a26..d835c3ec14 100644
--- a/lib/hipe/amd64/hipe_amd64_ra_finalise.erl
+++ b/lib/hipe/amd64/hipe_amd64_ra_finalise.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_ra_ls.erl b/lib/hipe/amd64/hipe_amd64_ra_ls.erl
index 6a8034305b..9361b91f04 100644
--- a/lib/hipe/amd64/hipe_amd64_ra_ls.erl
+++ b/lib/hipe/amd64/hipe_amd64_ra_ls.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_ra_naive.erl b/lib/hipe/amd64/hipe_amd64_ra_naive.erl
index f73c67f5c7..38218a65dc 100644
--- a/lib/hipe/amd64/hipe_amd64_ra_naive.erl
+++ b/lib/hipe/amd64/hipe_amd64_ra_naive.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_ra_postconditions.erl b/lib/hipe/amd64/hipe_amd64_ra_postconditions.erl
index 35244aa484..2d03239ea6 100644
--- a/lib/hipe/amd64/hipe_amd64_ra_postconditions.erl
+++ b/lib/hipe/amd64/hipe_amd64_ra_postconditions.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl b/lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl
index 0568a46942..5451f1fe7d 100644
--- a/lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl
+++ b/lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_ra_x87_ls.erl b/lib/hipe/amd64/hipe_amd64_ra_x87_ls.erl
index 89852ed3d8..6da3f44cd3 100644
--- a/lib/hipe/amd64/hipe_amd64_ra_x87_ls.erl
+++ b/lib/hipe/amd64/hipe_amd64_ra_x87_ls.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_registers.erl b/lib/hipe/amd64/hipe_amd64_registers.erl
index c2af44982c..780c2cc547 100644
--- a/lib/hipe/amd64/hipe_amd64_registers.erl
+++ b/lib/hipe/amd64/hipe_amd64_registers.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_spill_restore.erl b/lib/hipe/amd64/hipe_amd64_spill_restore.erl
index b5c4de2613..61e2dfa26d 100644
--- a/lib/hipe/amd64/hipe_amd64_spill_restore.erl
+++ b/lib/hipe/amd64/hipe_amd64_spill_restore.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_amd64_x87.erl b/lib/hipe/amd64/hipe_amd64_x87.erl
index f206205307..1f42e4749d 100644
--- a/lib/hipe/amd64/hipe_amd64_x87.erl
+++ b/lib/hipe/amd64/hipe_amd64_x87.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/amd64/hipe_rtl_to_amd64.erl b/lib/hipe/amd64/hipe_rtl_to_amd64.erl
index 5d09bdb877..d55b5b2c22 100644
--- a/lib/hipe/amd64/hipe_rtl_to_amd64.erl
+++ b/lib/hipe/amd64/hipe_rtl_to_amd64.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/Makefile b/lib/hipe/arm/Makefile
index 889c6a13e4..00b6732afa 100644
--- a/lib/hipe/arm/Makefile
+++ b/lib/hipe/arm/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2012. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -74,7 +74,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/arm/hipe_arm.erl b/lib/hipe/arm/hipe_arm.erl
index 2ac3ca81b4..f34525fa3b 100644
--- a/lib/hipe/arm/hipe_arm.erl
+++ b/lib/hipe/arm/hipe_arm.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm.hrl b/lib/hipe/arm/hipe_arm.hrl
index a15c366065..558174e3fc 100644
--- a/lib/hipe/arm/hipe_arm.hrl
+++ b/lib/hipe/arm/hipe_arm.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_assemble.erl b/lib/hipe/arm/hipe_arm_assemble.erl
index 5f98c6593e..4a245cd853 100644
--- a/lib/hipe/arm/hipe_arm_assemble.erl
+++ b/lib/hipe/arm/hipe_arm_assemble.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_cfg.erl b/lib/hipe/arm/hipe_arm_cfg.erl
index f30fa5a0b6..f2fa0a5164 100644
--- a/lib/hipe/arm/hipe_arm_cfg.erl
+++ b/lib/hipe/arm/hipe_arm_cfg.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_defuse.erl b/lib/hipe/arm/hipe_arm_defuse.erl
index 8f194c4b48..f57b0e601c 100644
--- a/lib/hipe/arm/hipe_arm_defuse.erl
+++ b/lib/hipe/arm/hipe_arm_defuse.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_encode.erl b/lib/hipe/arm/hipe_arm_encode.erl
index 05ded31657..9368cbf628 100644
--- a/lib/hipe/arm/hipe_arm_encode.erl
+++ b/lib/hipe/arm/hipe_arm_encode.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_finalise.erl b/lib/hipe/arm/hipe_arm_finalise.erl
index f4c8f8cfbc..a4b2f9c73c 100644
--- a/lib/hipe/arm/hipe_arm_finalise.erl
+++ b/lib/hipe/arm/hipe_arm_finalise.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_frame.erl b/lib/hipe/arm/hipe_arm_frame.erl
index 2f0d4c3c50..e1e441a967 100644
--- a/lib/hipe/arm/hipe_arm_frame.erl
+++ b/lib/hipe/arm/hipe_arm_frame.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_liveness_gpr.erl b/lib/hipe/arm/hipe_arm_liveness_gpr.erl
index 25265b25ea..82cc5a7a67 100644
--- a/lib/hipe/arm/hipe_arm_liveness_gpr.erl
+++ b/lib/hipe/arm/hipe_arm_liveness_gpr.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_main.erl b/lib/hipe/arm/hipe_arm_main.erl
index 46cd71d89f..dce1193b24 100644
--- a/lib/hipe/arm/hipe_arm_main.erl
+++ b/lib/hipe/arm/hipe_arm_main.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_pp.erl b/lib/hipe/arm/hipe_arm_pp.erl
index 744d06d16d..18aca1fc6b 100644
--- a/lib/hipe/arm/hipe_arm_pp.erl
+++ b/lib/hipe/arm/hipe_arm_pp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_ra.erl b/lib/hipe/arm/hipe_arm_ra.erl
index 5824fcb8d8..2f65e864fd 100644
--- a/lib/hipe/arm/hipe_arm_ra.erl
+++ b/lib/hipe/arm/hipe_arm_ra.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_ra_finalise.erl b/lib/hipe/arm/hipe_arm_ra_finalise.erl
index b67c7407a2..4faeadcd7f 100644
--- a/lib/hipe/arm/hipe_arm_ra_finalise.erl
+++ b/lib/hipe/arm/hipe_arm_ra_finalise.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_ra_ls.erl b/lib/hipe/arm/hipe_arm_ra_ls.erl
index 500256e0e3..d9a360d00c 100644
--- a/lib/hipe/arm/hipe_arm_ra_ls.erl
+++ b/lib/hipe/arm/hipe_arm_ra_ls.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_ra_naive.erl b/lib/hipe/arm/hipe_arm_ra_naive.erl
index b244acd3fe..6201269f44 100644
--- a/lib/hipe/arm/hipe_arm_ra_naive.erl
+++ b/lib/hipe/arm/hipe_arm_ra_naive.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_ra_postconditions.erl b/lib/hipe/arm/hipe_arm_ra_postconditions.erl
index 1ac2521928..40978e65f6 100644
--- a/lib/hipe/arm/hipe_arm_ra_postconditions.erl
+++ b/lib/hipe/arm/hipe_arm_ra_postconditions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_arm_registers.erl b/lib/hipe/arm/hipe_arm_registers.erl
index 31579c4ecb..24cd929d41 100644
--- a/lib/hipe/arm/hipe_arm_registers.erl
+++ b/lib/hipe/arm/hipe_arm_registers.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/arm/hipe_rtl_to_arm.erl b/lib/hipe/arm/hipe_rtl_to_arm.erl
index 3455c753d6..ad5a559995 100644
--- a/lib/hipe/arm/hipe_rtl_to_arm.erl
+++ b/lib/hipe/arm/hipe_rtl_to_arm.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/cerl/Makefile b/lib/hipe/cerl/Makefile
index 0938010577..9f50d6bf91 100644
--- a/lib/hipe/cerl/Makefile
+++ b/lib/hipe/cerl/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -66,7 +66,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += -Werror +inline +warn_exported_vars +warn_unused_import +warn_missing_spec #+warn_untyped_record
+ERL_COMPILE_FLAGS += +inline -Werror +warn_export_vars +warn_unused_import +warn_missing_spec #+warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/cerl/cerl_cconv.erl b/lib/hipe/cerl/cerl_cconv.erl
index 0fc28be5f3..ac9d01ab0e 100644
--- a/lib/hipe/cerl/cerl_cconv.erl
+++ b/lib/hipe/cerl/cerl_cconv.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -710,7 +710,7 @@ ren__new() ->
ren__add(Key, Value, Ren) ->
dict:store(Key, Value, Ren).
-ren__map(Key, Ren) ->
+ren__map(Key, Ren) ->
case dict:find(Key, Ren) of
{ok, Value} ->
Value;
@@ -722,11 +722,14 @@ ren__map(Key, Ren) ->
%% ---------------------------------------------------------------------
%% State
--record(state, {module :: module(), function :: {atom(), arity()},
- names, refs, defs = []}).
+-record(state, {module :: module(),
+ function :: {atom(), arity()} | 'undefined',
+ names = sets:new() :: sets:set(), %% XXX: refine
+ refs = dict:new() :: dict:dict(), %% XXX: refine
+ defs = []}).
s__new(Module) ->
- #state{module = Module, names = sets:new(), refs = dict:new()}.
+ #state{module = Module}.
s__add_function_name(Name, S) ->
S#state{names = sets:add_element(Name, S#state.names)}.
diff --git a/lib/hipe/cerl/cerl_closurean.erl b/lib/hipe/cerl/cerl_closurean.erl
index 7080ff4f3b..d37c91e5c6 100644
--- a/lib/hipe/cerl/cerl_closurean.erl
+++ b/lib/hipe/cerl/cerl_closurean.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/cerl/cerl_hipe_primops.hrl b/lib/hipe/cerl/cerl_hipe_primops.hrl
index 361227540a..3efb9a3bdd 100644
--- a/lib/hipe/cerl/cerl_hipe_primops.hrl
+++ b/lib/hipe/cerl/cerl_hipe_primops.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/cerl/cerl_hipeify.erl b/lib/hipe/cerl/cerl_hipeify.erl
index 8691e80cac..6611abd204 100644
--- a/lib/hipe/cerl/cerl_hipeify.erl
+++ b/lib/hipe/cerl/cerl_hipeify.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -623,12 +623,12 @@ ren__map(Key, Ren) ->
%% ---------------------------------------------------------------------
%% State
-%% pmatch = 'true' | 'false' | 'no_duplicates' | 'duplicate_all'
+-type pmatch() :: 'true' | 'false' | 'no_duplicates' | 'duplicate_all'.
--record(state, {module::atom(),
- function::{atom(), 0..256},
- pmatch=true,
- revisit = false}).
+-record(state, {module :: module(),
+ function :: {atom(), arity()} | 'undefined',
+ pmatch = true :: pmatch(),
+ revisit = false :: boolean()}).
s__new(Module) ->
#state{module = Module}.
diff --git a/lib/hipe/cerl/cerl_lib.erl b/lib/hipe/cerl/cerl_lib.erl
index 52a5c987e0..0bc77909d9 100644
--- a/lib/hipe/cerl/cerl_lib.erl
+++ b/lib/hipe/cerl/cerl_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/cerl/cerl_messagean.erl b/lib/hipe/cerl/cerl_messagean.erl
index 5e23015cbc..7df0a245fb 100644
--- a/lib/hipe/cerl/cerl_messagean.erl
+++ b/lib/hipe/cerl/cerl_messagean.erl
@@ -1,7 +1,7 @@
%% =====================================================================
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/cerl/cerl_pmatch.erl b/lib/hipe/cerl/cerl_pmatch.erl
index ce76d244b6..ca27fff1dd 100644
--- a/lib/hipe/cerl/cerl_pmatch.erl
+++ b/lib/hipe/cerl/cerl_pmatch.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -231,12 +231,9 @@ match_typegroup(T, V, Vs, Gs, Else, Env) ->
Else, Env),
typetest_clause(T, V, Body, Env).
-match_congroup({?binary_id, Segs}, Vs, Cs, _Else, Env) ->
- Ref = get_unique(),
- Guard = cerl:c_primop(cerl:c_atom(set_label), [cerl:c_int(Ref)]),
- NewElse = cerl:c_primop(cerl:c_atom(goto_label), [cerl:c_int(Ref)]),
- Body = match(Vs, Cs, NewElse, Env),
- cerl:c_clause([make_pat(?binary_id, Segs)], Guard, Body);
+match_congroup({?binary_id, Segs}, Vs, Cs, Else, Env) ->
+ Body = match(Vs, Cs, Else, Env),
+ cerl:c_clause([make_pat(?binary_id, Segs)], Body);
match_congroup({D, A}, Vs, Cs, Else, Env) ->
Vs1 = new_vars(A, Env),
@@ -415,6 +412,15 @@ make_let(Vs, A, B) ->
expr(E, Env) ->
case cerl:type(E) of
+ binary ->
+ Es = expr_list(cerl:binary_segments(E), Env),
+ cerl:update_c_binary(E, Es);
+ bitstr ->
+ V = expr(cerl:bitstr_val(E), Env),
+ Sz = expr(cerl:bitstr_size(E), Env),
+ Unit = expr(cerl:bitstr_unit(E), Env),
+ Type = expr(cerl:bitstr_type(E), Env),
+ cerl:update_c_bitstr(E, V, Sz, Unit, Type, cerl:bitstr_flags(E));
literal ->
E;
var ->
@@ -584,16 +590,6 @@ is_simple(E) ->
end.
-get_unique() ->
- case get(unique_label) of
- undefined ->
- put(unique_label, 1),
- 0;
- N ->
- put(unique_label, N+1),
- N
- end.
-
%% ---------------------------------------------------------------------
%% Abstract datatype: environment()
diff --git a/lib/hipe/cerl/cerl_prettypr.erl b/lib/hipe/cerl/cerl_prettypr.erl
index 1a6e6999fe..f0acab99e3 100644
--- a/lib/hipe/cerl/cerl_prettypr.erl
+++ b/lib/hipe/cerl/cerl_prettypr.erl
@@ -1,7 +1,7 @@
%% =====================================================================
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/cerl/cerl_typean.erl b/lib/hipe/cerl/cerl_typean.erl
index 13ee19c82a..ddc48c7915 100644
--- a/lib/hipe/cerl/cerl_typean.erl
+++ b/lib/hipe/cerl/cerl_typean.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/cerl/erl_bif_types.erl b/lib/hipe/cerl/erl_bif_types.erl
index 9f23b6a9b3..9453ca6c6f 100644
--- a/lib/hipe/cerl/erl_bif_types.erl
+++ b/lib/hipe/cerl/erl_bif_types.erl
@@ -46,7 +46,6 @@
t_bitstr/0,
t_boolean/0,
t_byte/0,
- t_char/0,
t_cons/0,
t_cons/2,
t_cons_hd/1,
@@ -87,7 +86,6 @@
t_is_port/2,
t_is_maybe_improper_list/2,
t_is_reference/2,
- t_is_string/1,
t_is_subtype/2,
t_is_tuple/2,
t_list/0,
@@ -117,7 +115,16 @@
t_tuple_size/2,
t_tuple_subtypes/2,
t_is_map/2,
- t_map/0
+ t_map/0,
+ t_map/3,
+ t_map_def_key/2,
+ t_map_def_val/2,
+ t_map_get/3,
+ t_map_is_key/3,
+ t_map_entries/2,
+ t_map_put/3,
+ t_map_update/3,
+ map_pairwise_merge/3
]).
-ifdef(DO_ERL_BIF_TYPES_TEST).
@@ -139,7 +146,7 @@ type(M, F, A) ->
type(M, F, A, Xs) ->
type(M, F, A, Xs, 'universe').
--type opaques() :: 'universe' | [erl_types:erl_type()].
+-type opaques() :: erl_types:opaques().
-type arg_types() :: [erl_types:erl_type()].
@@ -552,9 +559,6 @@ type(erlang, bit_size, 1, Xs, Opaques) ->
type(erlang, byte_size, 1, Xs, Opaques) ->
strict(erlang, byte_size, 1, Xs,
fun (_) -> t_non_neg_integer() end, Opaques);
-type(erlang, disconnect_node, 1, Xs, Opaques) ->
- strict(erlang, disconnect_node, 1, Xs,
- fun (_) -> t_sup([t_boolean(), t_atom('ignored')]) end, Opaques);
%% Guard bif, needs to be here.
%% Also much more expressive than anything you could write in a spec...
type(erlang, element, 2, Xs, Opaques) ->
@@ -583,16 +587,9 @@ type(erlang, element, 2, Xs, Opaques) ->
%% Guard bif, needs to be here.
type(erlang, float, 1, Xs, Opaques) ->
strict(erlang, float, 1, Xs, fun (_) -> t_float() end, Opaques);
-type(erlang, fun_info, 1, Xs, Opaques) ->
- strict(erlang, fun_info, 1, Xs,
- fun (_) -> t_list(t_tuple([t_atom(), t_any()])) end, Opaques);
-type(erlang, get_cookie, 0, _, _Opaques) -> t_atom(); % | t_atom('nocookie')
%% Guard bif, needs to be here.
type(erlang, hd, 1, Xs, Opaques) ->
strict(erlang, hd, 1, Xs, fun ([X]) -> t_cons_hd(X) end, Opaques);
-type(erlang, integer_to_list, 2, Xs, Opaques) ->
- strict(erlang, integer_to_list, 2, Xs,
- fun (_) -> t_string() end, Opaques);
type(erlang, info, 1, Xs, _) -> type(erlang, system_info, 1, Xs); % alias
%% All type tests are guard BIF's and may be implemented in ways that
%% cannot be expressed in a type spec, why they are kept in erl_bif_types.
@@ -767,7 +764,7 @@ type(erlang, length, 1, Xs, Opaques) ->
strict(erlang, length, 1, Xs, fun (_) -> t_non_neg_fixnum() end, Opaques);
%% Guard bif, needs to be here.
type(erlang, map_size, 1, Xs, Opaques) ->
- strict(erlang, map_size, 1, Xs, fun (_) -> t_non_neg_integer() end, Opaques);
+ type(maps, size, 1, Xs, Opaques);
type(erlang, make_fun, 3, Xs, Opaques) ->
strict(erlang, make_fun, 3, Xs,
fun ([_, _, Arity]) ->
@@ -796,8 +793,6 @@ type(erlang, make_tuple, 3, Xs, Opaques) ->
_Other -> t_tuple()
end
end, Opaques);
-type(erlang, memory, 0, _, _Opaques) ->
- t_list(t_tuple([t_atom(), t_non_neg_fixnum()]));
type(erlang, nif_error, 1, Xs, Opaques) ->
%% this BIF and the next one are stubs for NIFs and never return
strict(erlang, nif_error, 1, Xs, fun (_) -> t_any() end, Opaques);
@@ -813,8 +808,6 @@ type(erlang, round, 1, Xs, Opaques) ->
strict(erlang, round, 1, Xs, fun (_) -> t_integer() end, Opaques);
%% Guard bif, needs to be here.
type(erlang, self, 0, _, _Opaques) -> t_pid();
-type(erlang, set_cookie, 2, Xs, Opaques) ->
- strict(erlang, set_cookie, 2, Xs, fun (_) -> t_atom('true') end, Opaques);
type(erlang, setelement, 3, Xs, Opaques) ->
strict(erlang, setelement, 3, Xs,
fun ([X1, X2, X3]) ->
@@ -849,19 +842,7 @@ type(erlang, setelement, 3, Xs, Opaques) ->
%% Guard bif, needs to be here.
type(erlang, size, 1, Xs, Opaques) ->
strict(erlang, size, 1, Xs, fun (_) -> t_non_neg_integer() end, Opaques);
-type(erlang, spawn, 1, Xs, Opaques) ->
- strict(erlang, spawn, 1, Xs, fun (_) -> t_pid() end, Opaques);
-type(erlang, spawn, 2, Xs, Opaques) ->
- strict(erlang, spawn, 2, Xs, fun (_) -> t_pid() end, Opaques);
-type(erlang, spawn, 4, Xs, Opaques) ->
- strict(erlang, spawn, 4, Xs, fun (_) -> t_pid() end, Opaques);
-type(erlang, spawn_link, 1, Xs, _) -> type(erlang, spawn, 1, Xs); % same
-type(erlang, spawn_link, 2, Xs, _) -> type(erlang, spawn, 2, Xs); % same
-type(erlang, spawn_link, 4, Xs, _) -> type(erlang, spawn, 4, Xs); % same
type(erlang, subtract, 2, Xs, _Opaques) -> type(erlang, '--', 2, Xs); % alias
-type(erlang, suspend_process, 1, Xs, Opaques) ->
- strict(erlang, suspend_process, 1, Xs,
- fun (_) -> t_atom('true') end, Opaques);
type(erlang, system_info, 1, Xs, Opaques) ->
strict(erlang, system_info, 1, Xs,
fun ([Type]) ->
@@ -926,8 +907,7 @@ type(erlang, system_info, 1, Xs, Opaques) ->
t_list(t_pid());
['os_type'] ->
t_tuple([t_sup([t_atom('unix'),
- t_atom('win32'),
- t_atom('ose')]),
+ t_atom('win32')]),
t_atom()]);
['os_version'] ->
t_sup(t_tuple([t_non_neg_fixnum(),
@@ -1015,10 +995,6 @@ type(erlang, tuple_to_list, 1, Xs, Opaques) ->
end
end
end, Opaques);
-type(erlang, yield, 0, _, _Opaques) -> t_atom('true');
-%%-- ets ----------------------------------------------------------------------
-type(ets, rename, 2, Xs, Opaques) ->
- strict(ets, rename, 2, Xs, fun ([_, Name]) -> Name end, Opaques);
%%-- hipe_bifs ----------------------------------------------------------------
type(hipe_bifs, add_ref, 2, Xs, Opaques) ->
strict(hipe_bifs, add_ref, 2, Xs, fun (_) -> t_nil() end, Opaques);
@@ -1678,24 +1654,88 @@ type(lists, zipwith3, 4, Xs, Opaques) ->
fun ([F,_As,_Bs,_Cs]) -> t_sup(t_list(t_fun_range(F, Opaques)),
t_nil()) end, Opaques);
-%%-- string -------------------------------------------------------------------
-type(string, chars, 2, Xs, Opaques) -> % NOTE: added to avoid loss of info
- strict(string, chars, 2, Xs, fun (_) -> t_string() end, Opaques);
-type(string, chars, 3, Xs, Opaques) -> % NOTE: added to avoid loss of info
- strict(string, chars, 3, Xs,
- fun ([Char, N, Tail]) ->
- case t_is_nil(Tail) of
- true ->
- type(string, chars, 2, [Char, N]);
+%%-- maps ---------------------------------------------------------------------
+type(maps, from_list, 1, Xs, Opaques) ->
+ strict(maps, from_list, 1, Xs,
+ fun ([List]) ->
+ case t_is_nil(List, Opaques) of
+ true -> t_from_term(#{});
false ->
- case t_is_string(Tail) of
- true ->
- t_string();
- false ->
- t_sup(t_sup(t_string(), Tail), t_cons(Char, Tail))
+ T = t_list_elements(List, Opaques),
+ case t_tuple_subtypes(T, Opaques) of
+ unknown -> t_map();
+ Stypes when length(Stypes) >= 1 ->
+ t_sup([begin
+ [K, V] = t_tuple_args(Args, Opaques),
+ t_map([], K, V)
+ end || Args <- Stypes])
end
end
end, Opaques);
+type(maps, get, 2, Xs, Opaques) ->
+ strict(maps, get, 2, Xs,
+ fun ([Key, Map]) ->
+ t_map_get(Key, Map, Opaques)
+ end, Opaques);
+type(maps, is_key, 2, Xs, Opaques) ->
+ strict(maps, is_key, 2, Xs,
+ fun ([Key, Map]) ->
+ t_map_is_key(Key, Map, Opaques)
+ end, Opaques);
+type(maps, merge, 2, Xs, Opaques) ->
+ strict(maps, merge, 2, Xs,
+ fun ([MapA, MapB]) ->
+ ADefK = t_map_def_key(MapA, Opaques),
+ BDefK = t_map_def_key(MapB, Opaques),
+ ADefV = t_map_def_val(MapA, Opaques),
+ BDefV = t_map_def_val(MapB, Opaques),
+ t_map(map_pairwise_merge(
+ fun(K, _, _, mandatory, V) -> {K, mandatory, V};
+ (K, MNess, VA, optional, VB) -> {K, MNess, t_sup(VA,VB)}
+ end, MapA, MapB),
+ t_sup(ADefK, BDefK), t_sup(ADefV, BDefV))
+ end, Opaques);
+type(maps, put, 3, Xs, Opaques) ->
+ strict(maps, put, 3, Xs,
+ fun ([Key, Value, Map]) ->
+ t_map_put({Key, Value}, Map, Opaques)
+ end, Opaques);
+type(maps, size, 1, Xs, Opaques) ->
+ strict(maps, size, 1, Xs,
+ fun ([Map]) ->
+ Mand = [E || E={_,mandatory,_} <- t_map_entries(Map, Opaques)],
+ LowerBound = length(Mand),
+ case t_is_none(t_map_def_key(Map, Opaques)) of
+ false -> t_from_range(LowerBound, pos_inf);
+ true ->
+ Opt = [E || E={_,optional,_} <- t_map_entries(Map, Opaques)],
+ UpperBound = LowerBound + length(Opt),
+ t_from_range(LowerBound, UpperBound)
+ end
+ end, Opaques);
+type(maps, to_list, 1, Xs, Opaques) ->
+ strict(maps, to_list, 1, Xs,
+ fun ([Map]) ->
+ DefK = t_map_def_key(Map, Opaques),
+ DefV = t_map_def_val(Map, Opaques),
+ Pairs = t_map_entries(Map, Opaques),
+ EType = lists:foldl(
+ fun({K,_,V},EType0) ->
+ case t_is_none(V) of
+ true -> t_subtract(EType0, t_tuple([K,t_any()]));
+ false -> t_sup(EType0, t_tuple([K,V]))
+ end
+ end, t_tuple([DefK, DefV]), Pairs),
+ case t_is_none(EType) of
+ true -> t_nil();
+ false -> t_list(EType)
+ end
+ end, Opaques);
+type(maps, update, 3, Xs, Opaques) ->
+ strict(maps, update, 3, Xs,
+ fun ([Key, Value, Map]) ->
+ t_map_update({Key, Value}, Map, Opaques)
+ end, Opaques);
%%-----------------------------------------------------------------------------
type(M, F, A, Xs, _O) when is_atom(M), is_atom(F),
@@ -2301,8 +2341,6 @@ arg_types(erlang, bit_size, 1) ->
%% Guard bif, needs to be here.
arg_types(erlang, byte_size, 1) ->
[t_bitstr()];
-arg_types(erlang, disconnect_node, 1) ->
- [t_node()];
arg_types(erlang, halt, 0) ->
[];
arg_types(erlang, halt, 1) ->
@@ -2322,17 +2360,11 @@ arg_types(erlang, element, 2) ->
%% Guard bif, needs to be here.
arg_types(erlang, float, 1) ->
[t_number()];
-arg_types(erlang, fun_info, 1) ->
- [t_fun()];
-arg_types(erlang, get_cookie, 0) ->
- [];
%% Guard bif, needs to be here.
arg_types(erlang, hd, 1) ->
[t_cons()];
arg_types(erlang, info, 1) ->
arg_types(erlang, system_info, 1); % alias
-arg_types(erlang, integer_to_list, 2) ->
- [t_integer(), t_from_range(2, 36)];
arg_types(erlang, is_atom, 1) ->
[t_any()];
arg_types(erlang, is_binary, 1) ->
@@ -2379,8 +2411,6 @@ arg_types(erlang, make_tuple, 2) ->
[t_non_neg_fixnum(), t_any()]; % the value 0 is OK as first argument
arg_types(erlang, make_tuple, 3) ->
[t_non_neg_fixnum(), t_any(), t_list(t_tuple([t_pos_integer(), t_any()]))];
-arg_types(erlang, memory, 0) ->
- [];
arg_types(erlang, nif_error, 1) ->
[t_any()];
arg_types(erlang, nif_error, 2) ->
@@ -2397,29 +2427,13 @@ arg_types(erlang, round, 1) ->
%% Guard bif, needs to be here.
arg_types(erlang, self, 0) ->
[];
-arg_types(erlang, set_cookie, 2) ->
- [t_node(), t_atom()];
arg_types(erlang, setelement, 3) ->
[t_pos_integer(), t_tuple(), t_any()];
%% Guard bif, needs to be here.
arg_types(erlang, size, 1) ->
[t_sup(t_tuple(), t_binary())];
-arg_types(erlang, spawn, 1) -> %% TODO: Tuple?
- [t_fun()];
-arg_types(erlang, spawn, 2) -> %% TODO: Tuple?
- [t_node(), t_fun()];
-arg_types(erlang, spawn, 4) -> %% TODO: Tuple?
- [t_node(), t_atom(), t_atom(), t_list()];
-arg_types(erlang, spawn_link, 1) ->
- arg_types(erlang, spawn, 1); % same
-arg_types(erlang, spawn_link, 2) ->
- arg_types(erlang, spawn, 2); % same
-arg_types(erlang, spawn_link, 4) ->
- arg_types(erlang, spawn, 4); % same
arg_types(erlang, subtract, 2) ->
arg_types(erlang, '--', 2);
-arg_types(erlang, suspend_process, 1) ->
- [t_pid()];
arg_types(erlang, system_info, 1) ->
[t_sup([t_atom(), % documented
t_tuple([t_atom(), t_any()]), % documented
@@ -2438,11 +2452,6 @@ arg_types(erlang, tuple_size, 1) ->
[t_tuple()];
arg_types(erlang, tuple_to_list, 1) ->
[t_tuple()];
-arg_types(erlang, yield, 0) ->
- [];
-%%------- ets -----------------------------------------------------------------
-arg_types(ets, rename, 2) ->
- [t_atom(), t_atom()];
%%------- hipe_bifs -----------------------------------------------------------
arg_types(hipe_bifs, add_ref, 2) ->
[t_mfa(), t_tuple([t_mfa(),
@@ -2639,13 +2648,23 @@ arg_types(lists, zipwith, 3) ->
[t_fun([t_any(), t_any()], t_any()), t_list(), t_list()];
arg_types(lists, zipwith3, 4) ->
[t_fun([t_any(), t_any(), t_any()], t_any()), t_list(), t_list(), t_list()];
-
-%%------- string --------------------------------------------------------------
-arg_types(string, chars, 2) ->
- [t_char(), t_non_neg_integer()];
-arg_types(string, chars, 3) ->
- [t_char(), t_non_neg_integer(), t_any()];
-%%-----------------------------------------------------------------------------
+%%------- maps ----------------------------------------------------------------
+arg_types(maps, from_list, 1) ->
+ [t_list(t_tuple(2))];
+arg_types(maps, get, 2) ->
+ [t_any(), t_map()];
+arg_types(maps, is_key, 2) ->
+ [t_any(), t_map()];
+arg_types(maps, merge, 2) ->
+ [t_map(), t_map()];
+arg_types(maps, put, 3) ->
+ [t_any(), t_any(), t_map()];
+arg_types(maps, size, 1) ->
+ [t_map()];
+arg_types(maps, to_list, 1) ->
+ [t_map()];
+arg_types(maps, update, 3) ->
+ [t_any(), t_any(), t_map()];
arg_types(M, F, A) when is_atom(M), is_atom(F),
is_integer(A), 0 =< A, A =< 255 ->
unknown. % safe approximation for all functions.
diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl
index 7a2abc226f..243bb6e25d 100644
--- a/lib/hipe/cerl/erl_types.erl
+++ b/lib/hipe/cerl/erl_types.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -80,11 +80,9 @@
t_float/0,
t_var_names/1,
t_form_to_string/1,
- t_from_form/4,
- t_from_form/5,
+ t_from_form/6,
t_from_form_without_remote/3,
- t_check_record_fields/4,
- t_check_record_fields/5,
+ t_check_record_fields/6,
t_from_range/2,
t_from_range_unsafe/2,
t_from_term/1,
@@ -140,7 +138,8 @@
t_is_port/1, t_is_port/2,
t_is_maybe_improper_list/1, t_is_maybe_improper_list/2,
t_is_reference/1, t_is_reference/2,
- t_is_remote/1,
+ t_is_singleton/1,
+ t_is_singleton/2,
t_is_string/1,
t_is_subtype/2,
t_is_tuple/1, t_is_tuple/2,
@@ -153,6 +152,14 @@
t_list_termination/1, t_list_termination/2,
t_map/0,
t_map/1,
+ t_map/3,
+ t_map_entries/2, t_map_entries/1,
+ t_map_def_key/2, t_map_def_key/1,
+ t_map_def_val/2, t_map_def_val/1,
+ t_map_get/2, t_map_get/3,
+ t_map_is_key/2, t_map_is_key/3,
+ t_map_update/2, t_map_update/3,
+ t_map_put/2, t_map_put/3,
t_matchstate/0,
t_matchstate/2,
t_matchstate_present/1,
@@ -173,14 +180,13 @@
t_number_vals/1, t_number_vals/2,
t_opaque_from_records/1,
t_opaque_structure/1,
- %% t_parameterized_module/0,
t_pid/0,
t_port/0,
t_maybe_improper_list/0,
%% t_maybe_improper_list/2,
t_product/1,
t_reference/0,
- t_remote/3,
+ t_singleton_to_term/2,
t_string/0,
t_struct_from_opaque/2,
t_subst/2,
@@ -208,11 +214,13 @@
type_is_defined/4,
record_field_diffs_to_string/2,
subst_all_vars_to_any/1,
- subst_all_remote/2,
lift_list_to_pos_empty/1, lift_list_to_pos_empty/2,
is_opaque_type/2,
is_erl_type/1,
- atom_to_string/1
+ atom_to_string/1,
+ var_table__new/0,
+ cache__new/0,
+ map_pairwise_merge/3
]).
%%-define(DO_ERL_TYPES_TEST, true).
@@ -228,7 +236,7 @@
-export([t_is_identifier/1]).
-endif.
--export_type([erl_type/0, type_table/0, var_table/0]).
+-export_type([erl_type/0, opaques/0, type_table/0, var_table/0, cache/0]).
%%-define(DEBUG, true).
@@ -280,7 +288,6 @@
-define(number_tag, number).
-define(opaque_tag, opaque).
-define(product_tag, product).
--define(remote_tag, remote).
-define(tuple_set_tag, tuple_set).
-define(tuple_tag, tuple).
-define(union_tag, union).
@@ -288,7 +295,7 @@
-type tag() :: ?atom_tag | ?binary_tag | ?function_tag | ?identifier_tag
| ?list_tag | ?map_tag | ?matchstate_tag | ?nil_tag | ?number_tag
- | ?opaque_tag | ?product_tag | ?remote_tag
+ | ?opaque_tag | ?product_tag
| ?tuple_tag | ?tuple_set_tag | ?union_tag | ?var_tag.
-define(float_qual, float).
@@ -320,7 +327,7 @@
%% Auxiliary types and convenient macros
%%
--type parse_form() :: {atom(), _, _} | {atom(), _, _, _} | {'op', _, _, _, _}. %% XXX: Temporarily
+-type parse_form() :: erl_parse:abstract_type().
-type rng_elem() :: 'pos_inf' | 'neg_inf' | integer().
-record(int_set, {set :: [integer()]}).
@@ -330,7 +337,6 @@
%% was updated to 2.7 due to this change.
-record(opaque, {mod :: module(), name :: atom(),
args = [] :: [erl_type()], struct :: erl_type()}).
--record(remote, {mod:: module(), name :: atom(), args = [] :: [erl_type()]}).
-define(atom(Set), #c{tag=?atom_tag, elements=Set}).
-define(bitstr(Unit, Base), #c{tag=?binary_tag, elements=[Unit,Base]}).
@@ -347,10 +353,10 @@
-define(nonempty_list(Types, Term),?list(Types, Term, ?nonempty_qual)).
-define(number(Set, Qualifier), #c{tag=?number_tag, elements=Set,
qualifier=Qualifier}).
--define(map(Pairs), #c{tag=?map_tag, elements=Pairs}).
+-define(map(Pairs,DefKey,DefVal),
+ #c{tag=?map_tag, elements={Pairs,DefKey,DefVal}}).
-define(opaque(Optypes), #c{tag=?opaque_tag, elements=Optypes}).
-define(product(Types), #c{tag=?product_tag, elements=Types}).
--define(remote(RemTypes), #c{tag=?remote_tag, elements=RemTypes}).
-define(tuple(Types, Arity, Qual), #c{tag=?tuple_tag, elements=Types,
qualifier={Arity, Qual}}).
-define(tuple_set(Tuples), #c{tag=?tuple_set_tag, elements=Tuples}).
@@ -368,31 +374,32 @@
-type opaques() :: [erl_type()] | 'universe'.
-type record_key() :: {'record', atom()}.
--type type_key() :: {'type' | 'opaque', atom(), arity()}.
+-type type_key() :: {'type' | 'opaque', mfa()}.
-type record_value() :: [{atom(), erl_parse:abstract_expr(), erl_type()}].
--type type_value() :: {module(), erl_type(), atom()}.
--type type_table() :: dict:dict(record_key(), record_value())
- | dict:dict(type_key(), type_value()).
+-type type_value() :: {{module(), {file:name(), erl_anno:line()},
+ erl_parse:abstract_type(), ArgNames :: [atom()]},
+ erl_type()}.
+-type type_table() :: dict:dict(record_key() | type_key(),
+ record_value() | type_value()).
--type var_table() :: dict:dict(atom(), erl_type()).
+-opaque var_table() :: #{atom() => erl_type()}.
%%-----------------------------------------------------------------------------
%% Unions
%%
--define(union(List), #c{tag=?union_tag, elements=[_,_,_,_,_,_,_,_,_,_,_]=List}).
-
--define(atom_union(T), ?union([T,?none,?none,?none,?none,?none,?none,?none,?none,?none,?none])).
--define(bitstr_union(T), ?union([?none,T,?none,?none,?none,?none,?none,?none,?none,?none,?none])).
--define(function_union(T), ?union([?none,?none,T,?none,?none,?none,?none,?none,?none,?none,?none])).
--define(identifier_union(T), ?union([?none,?none,?none,T,?none,?none,?none,?none,?none,?none,?none])).
--define(list_union(T), ?union([?none,?none,?none,?none,T,?none,?none,?none,?none,?none,?none])).
--define(number_union(T), ?union([?none,?none,?none,?none,?none,T,?none,?none,?none,?none,?none])).
--define(tuple_union(T), ?union([?none,?none,?none,?none,?none,?none,T,?none,?none,?none,?none])).
--define(matchstate_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,T,?none,?none,?none])).
--define(opaque_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,T,?none,?none])).
--define(remote_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,?none,T,?none])).
--define(map_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,?none,?none,T])).
+-define(union(List), #c{tag=?union_tag, elements=[_,_,_,_,_,_,_,_,_,_]=List}).
+
+-define(atom_union(T), ?union([T,?none,?none,?none,?none,?none,?none,?none,?none,?none])).
+-define(bitstr_union(T), ?union([?none,T,?none,?none,?none,?none,?none,?none,?none,?none])).
+-define(function_union(T), ?union([?none,?none,T,?none,?none,?none,?none,?none,?none,?none])).
+-define(identifier_union(T), ?union([?none,?none,?none,T,?none,?none,?none,?none,?none,?none])).
+-define(list_union(T), ?union([?none,?none,?none,?none,T,?none,?none,?none,?none,?none])).
+-define(number_union(T), ?union([?none,?none,?none,?none,?none,T,?none,?none,?none,?none])).
+-define(tuple_union(T), ?union([?none,?none,?none,?none,?none,?none,T,?none,?none,?none])).
+-define(matchstate_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,T,?none,?none])).
+-define(opaque_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,T,?none])).
+-define(map_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,?none,T])).
-define(integer_union(T), ?number_union(T)).
-define(float_union(T), ?number_union(T)).
-define(nil_union(T), ?list_union(T)).
@@ -492,9 +499,8 @@ t_contains_opaque(?int_range(_From, _To), _Opaques) -> false;
t_contains_opaque(?int_set(_Set), _Opaques) -> false;
t_contains_opaque(?list(Type, Tail, _), Opaques) ->
t_contains_opaque(Type, Opaques) orelse t_contains_opaque(Tail, Opaques);
-t_contains_opaque(?map(_) = Map, Opaques) ->
- list_contains_opaque(map_values(Map), Opaques) orelse
- list_contains_opaque(map_keys(Map), Opaques);
+t_contains_opaque(?map(_, _, _) = Map, Opaques) ->
+ list_contains_opaque(map_all_types(Map), Opaques);
t_contains_opaque(?matchstate(_P, _Slots), _Opaques) -> false;
t_contains_opaque(?nil, _Opaques) -> false;
t_contains_opaque(?number(_Set, _Tag), _Opaques) -> false;
@@ -679,8 +685,8 @@ list_decorate(List, L, Opaques) ->
union_decorate(U1, U2, Opaques) ->
Union = union_decorate(U1, U2, Opaques, 0, []),
- [A,B,F,I,L,N,T,M,_,_R,Map] = U1,
- [_,_,_,_,_,_,_,_,Opaque,_,_] = U2,
+ [A,B,F,I,L,N,T,M,_,Map] = U1,
+ [_,_,_,_,_,_,_,_,Opaque,_] = U2,
List = [A,B,F,I,L,N,T,M,Map],
DecList = [Dec ||
E <- List,
@@ -752,8 +758,8 @@ t_opaque_from_records(RecDict) ->
{{Module, _FileLine, _Form, ArgNames}, _Type}) ->
%% Args = args_to_types(ArgNames),
%% List = lists:zip(ArgNames, Args),
- %% TmpVarDict = dict:from_list(List),
- %% Rep = t_from_form(Type, RecDict, TmpVarDict),
+ %% TmpVarTab = maps:to_list(List),
+ %% Rep = t_from_form(Type, RecDict, TmpVarTab),
Rep = t_any(), % not used for anything right now
Args = [t_any() || _ <- ArgNames],
t_opaque(Module, Name, Args, Rep)
@@ -792,21 +798,6 @@ list_struct_from_opaque(Types, Opaques) ->
[t_struct_from_opaque(Type, Opaques) || Type <- Types].
%%-----------------------------------------------------------------------------
-%% Remote types: these types are used for preprocessing;
-%% they should never reach the analysis stage.
-
--spec t_remote(atom(), atom(), [erl_type()]) -> erl_type().
-
-t_remote(Mod, Name, Args) ->
- ?remote(set_singleton(#remote{mod = Mod, name = Name, args = Args})).
-
--spec t_is_remote(erl_type()) -> boolean().
-
-t_is_remote(Type) ->
- do_opaque(Type, 'universe', fun is_remote/1).
-
-is_remote(?remote(_)) -> true;
-is_remote(_) -> false.
-type mod_records() :: dict:dict(module(), type_table()).
@@ -1604,16 +1595,112 @@ lift_list_to_pos_empty(?list(Content, Termination, _)) ->
%%-----------------------------------------------------------------------------
%% Maps
%%
+%% Representation:
+%% ?map(Pairs, DefaultKey, DefaultValue)
+%%
+%% Pairs is a sorted dictionary of types with a mandatoriness tag on each pair
+%% (t_map_dict()). DefaultKey and DefaultValue are plain types.
+%%
+%% A map M belongs to this type iff
+%% For each pair {KT, mandatory, VT} in Pairs, there exists a pair {K, V} in M
+%% such that K \in KT and V \in VT.
+%% For each pair {KT, optional, VT} in Pairs, either there exists no key K in
+%% M s.t. K in KT, or there exists a pair {K, V} in M such that K \in KT and
+%% V \in VT.
+%% For each remaining pair {K, V} in M (where remaining means that there is no
+%% key KT in Pairs s.t. K \in KT), K \in DefaultKey and V \in DefaultValue.
+%%
+%% Invariants:
+%% * The keys in Pairs are singleton types.
+%% * The values of Pairs must not be unit, and may only be none if the
+%% mandatoriness tag is 'optional'.
+%% * Optional must contain no pair {K,V} s.t. K is a subtype of DefaultKey and
+%% V is equal to DefaultKey.
+%% * DefaultKey must be the empty type iff DefaultValue is the empty type.
+%% * DefaultKey must not be a singleton type.
+%% * For every key K in Pairs, DefaultKey - K must not be representable; i.e.
+%% t_subtract(DefaultKey, K) must return DefaultKey.
+%% * For every pair {K, 'optional', ?none} in Pairs, K must be a subtype of
+%% DefaultKey.
+%% * Pairs must be sorted and not contain any duplicate keys.
+%%
+%% These invariants ensure that equal map types are represented by equal terms.
+
+-define(mand, mandatory).
+-define(opt, optional).
+
+-type t_map_mandatoriness() :: ?mand | ?opt.
+-type t_map_pair() :: {erl_type(), t_map_mandatoriness(), erl_type()}.
+-type t_map_dict() :: [t_map_pair()].
-spec t_map() -> erl_type().
t_map() ->
- ?map([]).
+ t_map([], t_any(), t_any()).
-spec t_map([{erl_type(), erl_type()}]) -> erl_type().
-t_map(_) ->
- ?map([]).
+t_map(L) ->
+ lists:foldl(fun t_map_put/2, t_map(), L).
+
+-spec t_map(t_map_dict(), erl_type(), erl_type()) -> erl_type().
+
+t_map(Pairs0, DefK0, DefV0) ->
+ DefK1 = lists:foldl(fun({K,_,_},Acc)->t_subtract(Acc,K)end, DefK0, Pairs0),
+ {DefK2, DefV1} =
+ case t_is_none_or_unit(DefK1) orelse t_is_none_or_unit(DefV0) of
+ true -> {?none, ?none};
+ false -> {DefK1, DefV0}
+ end,
+ {Pairs1, DefK, DefV}
+ = case is_singleton_type(DefK2) of
+ true -> {mapdict_insert({DefK2, ?opt, DefV1}, Pairs0), ?none, ?none};
+ false -> {Pairs0, DefK2, DefV1}
+ end,
+ Pairs = normalise_map_optionals(Pairs1, DefK, DefV),
+ %% Validate invariants of the map representation.
+ %% Since we needed to iterate over the arguments in order to normalise anyway,
+ %% we might as well save us some future pain and do this even without
+ %% define(DEBUG, true).
+ try
+ validate_map_elements(Pairs)
+ catch error:badarg -> error(badarg, [Pairs0,DefK0,DefV0])
+ end,
+ case map_pairs_are_none(Pairs) of
+ true -> ?none;
+ false -> ?map(Pairs, DefK, DefV)
+ end.
+
+normalise_map_optionals([], _, _) -> [];
+normalise_map_optionals([E={K,?opt,?none}|T], DefK, DefV) ->
+ Diff = t_subtract(DefK, K),
+ case t_is_subtype(K, DefK) andalso DefK =:= Diff of
+ true -> [E|normalise_map_optionals(T, DefK, DefV)];
+ false -> normalise_map_optionals(T, Diff, DefV)
+ end;
+normalise_map_optionals([E={K,?opt,V}|T], DefK, DefV) ->
+ case t_is_equal(V, DefV) andalso t_is_subtype(K, DefK) of
+ true -> normalise_map_optionals(T, DefK, DefV);
+ false -> [E|normalise_map_optionals(T, DefK, DefV)]
+ end;
+normalise_map_optionals([E|T], DefK, DefV) ->
+ [E|normalise_map_optionals(T, DefK, DefV)].
+
+validate_map_elements([{K1,_,_}|Rest=[{K2,_,_}|_]]) ->
+ case is_singleton_type(K1) andalso K1 < K2 of
+ false -> error(badarg);
+ true -> validate_map_elements(Rest)
+ end;
+validate_map_elements([{K,_,_}]) ->
+ case is_singleton_type(K) of
+ false -> error(badarg);
+ true -> true
+ end;
+validate_map_elements([]) -> true.
+
+map_pairs_are_none([]) -> false;
+map_pairs_are_none([{_,?mand,?none}|_]) -> true;
+map_pairs_are_none([_|Ps]) -> map_pairs_are_none(Ps).
-spec t_is_map(erl_type()) -> boolean().
@@ -1625,9 +1712,246 @@ t_is_map(Type) ->
t_is_map(Type, Opaques) ->
do_opaque(Type, Opaques, fun is_map1/1).
-is_map1(?map(_)) -> true;
+is_map1(?map(_, _, _)) -> true;
is_map1(_) -> false.
+-spec t_map_entries(erl_type()) -> t_map_dict().
+
+t_map_entries(M) ->
+ t_map_entries(M, 'universe').
+
+-spec t_map_entries(erl_type(), opaques()) -> t_map_dict().
+
+t_map_entries(M, Opaques) ->
+ do_opaque(M, Opaques, fun map_entries/1).
+
+map_entries(?map(Pairs,_,_)) ->
+ Pairs.
+
+-spec t_map_def_key(erl_type()) -> erl_type().
+
+t_map_def_key(M) ->
+ t_map_def_key(M, 'universe').
+
+-spec t_map_def_key(erl_type(), opaques()) -> erl_type().
+
+t_map_def_key(M, Opaques) ->
+ do_opaque(M, Opaques, fun map_def_key/1).
+
+map_def_key(?map(_,DefK,_)) ->
+ DefK.
+
+-spec t_map_def_val(erl_type()) -> erl_type().
+
+t_map_def_val(M) ->
+ t_map_def_val(M, 'universe').
+
+-spec t_map_def_val(erl_type(), opaques()) -> erl_type().
+
+t_map_def_val(M, Opaques) ->
+ do_opaque(M, Opaques, fun map_def_val/1).
+
+map_def_val(?map(_,_,DefV)) ->
+ DefV.
+
+-spec mapdict_store(t_map_pair(), t_map_dict()) -> t_map_dict().
+
+mapdict_store(E={K,_,_}, [{K,_,_}|T]) -> [E|T];
+mapdict_store(E1={K1,_,_}, [E2={K2,_,_}|T]) when K1 > K2 ->
+ [E2|mapdict_store(E1, T)];
+mapdict_store(E={_,_,_}, T) -> [E|T].
+
+-spec mapdict_insert(t_map_pair(), t_map_dict()) -> t_map_dict().
+
+mapdict_insert(E={K,_,_}, D=[{K,_,_}|_]) -> error(badarg, [E, D]);
+mapdict_insert(E1={K1,_,_}, [E2={K2,_,_}|T]) when K1 > K2 ->
+ [E2|mapdict_insert(E1, T)];
+mapdict_insert(E={_,_,_}, T) -> [E|T].
+
+%% Merges the pairs of two maps together. Missing pairs become (?opt, DefV) or
+%% (?opt, ?none), depending on whether K \in DefK.
+-spec map_pairwise_merge(fun((erl_type(),
+ t_map_mandatoriness(), erl_type(),
+ t_map_mandatoriness(), erl_type())
+ -> t_map_pair() | false),
+ erl_type(), erl_type()) -> t_map_dict().
+map_pairwise_merge(F, ?map(APairs, ADefK, ADefV),
+ ?map(BPairs, BDefK, BDefV)) ->
+ map_pairwise_merge(F, APairs, ADefK, ADefV, BPairs, BDefK, BDefV).
+
+map_pairwise_merge(_, [], _, _, [], _, _) -> [];
+map_pairwise_merge(F, As0, ADefK, ADefV, Bs0, BDefK, BDefV) ->
+ {K1, AMNess1, AV1, As1, BMNess1, BV1, Bs1} =
+ case {As0, Bs0} of
+ {[{K,AMNess,AV}|As], [{K, BMNess,BV}|Bs]} ->
+ {K, AMNess, AV, As, BMNess, BV, Bs};
+ {[{K,AMNess,AV}|As], [{BK,_, _ }|_]=Bs} when K < BK ->
+ {K, AMNess, AV, As, ?opt, mapmerge_otherv(K, BDefK, BDefV), Bs};
+ {As, [{K, BMNess,BV}|Bs]} ->
+ {K, ?opt, mapmerge_otherv(K, ADefK, ADefV), As, BMNess, BV, Bs};
+ {[{K,AMNess,AV}|As], []=Bs} ->
+ {K, AMNess, AV, As, ?opt, mapmerge_otherv(K, BDefK, BDefV), Bs}
+ end,
+ MK = K1, %% Rename to make clear that we are matching below
+ case F(K1, AMNess1, AV1, BMNess1, BV1) of
+ false -> map_pairwise_merge(F,As1,ADefK,ADefV,Bs1,BDefK,BDefV);
+ {MK,_,_}=M -> [M|map_pairwise_merge(F,As1,ADefK,ADefV,Bs1,BDefK,BDefV)]
+ end.
+
+%% Folds over the pairs in two maps simultaneously in reverse key order. Missing
+%% pairs become (?opt, DefV) or (?opt, ?none), depending on whether K \in DefK.
+-spec map_pairwise_merge_foldr(fun((erl_type(),
+ t_map_mandatoriness(), erl_type(),
+ t_map_mandatoriness(), erl_type(),
+ Acc) -> Acc),
+ Acc, erl_type(), erl_type()) -> Acc.
+
+map_pairwise_merge_foldr(F, AccIn, ?map(APairs, ADefK, ADefV),
+ ?map(BPairs, BDefK, BDefV)) ->
+ map_pairwise_merge_foldr(F, AccIn, APairs, ADefK, ADefV, BPairs, BDefK, BDefV).
+
+map_pairwise_merge_foldr(_, Acc, [], _, _, [], _, _) -> Acc;
+map_pairwise_merge_foldr(F, AccIn, As0, ADefK, ADefV, Bs0, BDefK, BDefV) ->
+ {K1, AMNess1, AV1, As1, BMNess1, BV1, Bs1} =
+ case {As0, Bs0} of
+ {[{K,AMNess,AV}|As], [{K,BMNess,BV}|Bs]} ->
+ {K, AMNess, AV, As, BMNess, BV, Bs};
+ {[{K,AMNess,AV}|As], [{BK,_, _ }|_]=Bs} when K < BK ->
+ {K, AMNess, AV, As, ?opt, mapmerge_otherv(K, BDefK, BDefV), Bs};
+ {As, [{K,BMNess,BV}|Bs]} ->
+ {K, ?opt, mapmerge_otherv(K, ADefK, ADefV), As, BMNess, BV, Bs};
+ {[{K,AMNess,AV}|As], []=Bs} ->
+ {K, AMNess, AV, As, ?opt, mapmerge_otherv(K, BDefK, BDefV), Bs}
+ end,
+ F(K1, AMNess1, AV1, BMNess1, BV1,
+ map_pairwise_merge_foldr(F,AccIn,As1,ADefK,ADefV,Bs1,BDefK,BDefV)).
+
+%% By observing that a missing pair in a map is equivalent to an optional pair,
+%% with ?none or DefV value, depending on whether K \in DefK, we can simplify
+%% merging by denormalising the map pairs temporarily, removing all 'false'
+%% cases, at the cost of the creation of more tuples:
+mapmerge_otherv(K, ODefK, ODefV) ->
+ case t_inf(K, ODefK) of
+ ?none -> ?none;
+ _KOrOpaque -> ODefV
+ end.
+
+-spec t_map_put({erl_type(), erl_type()}, erl_type()) -> erl_type().
+
+t_map_put(KV, Map) ->
+ t_map_put(KV, Map, 'universe').
+
+-spec t_map_put({erl_type(), erl_type()}, erl_type(), opaques()) -> erl_type().
+
+t_map_put(KV, Map, Opaques) ->
+ do_opaque(Map, Opaques, fun(UM) -> map_put(KV, UM, Opaques) end).
+
+%% Key and Value are *not* unopaqued, but the map is
+map_put(_, ?none, _) -> ?none;
+map_put({Key, Value}, ?map(Pairs,DefK,DefV), Opaques) ->
+ case t_is_none_or_unit(Key) orelse t_is_none_or_unit(Value) of
+ true -> ?none;
+ false ->
+ case is_singleton_type(Key) of
+ true ->
+ t_map(mapdict_store({Key, ?mand, Value}, Pairs), DefK, DefV);
+ false ->
+ t_map([{K, MNess, case t_is_none(t_inf(K, Key, Opaques)) of
+ true -> V;
+ false -> t_sup(V, Value)
+ end} || {K, MNess, V} <- Pairs],
+ t_sup(DefK, Key),
+ t_sup(DefV, Value))
+ end
+ end.
+
+-spec t_map_update({erl_type(), erl_type()}, erl_type()) -> erl_type().
+
+t_map_update(KV, Map) ->
+ t_map_update(KV, Map, 'universe').
+
+-spec t_map_update({erl_type(), erl_type()}, erl_type(), opaques()) -> erl_type().
+
+t_map_update(_, ?none, _) -> ?none;
+t_map_update(KV={Key, _}, M, Opaques) ->
+ case t_is_subtype(t_atom('true'), t_map_is_key(Key, M, Opaques)) of
+ false -> ?none;
+ true -> t_map_put(KV, M, Opaques)
+ end.
+
+-spec t_map_get(erl_type(), erl_type()) -> erl_type().
+
+t_map_get(Key, Map) ->
+ t_map_get(Key, Map, 'universe').
+
+-spec t_map_get(erl_type(), erl_type(), opaques()) -> erl_type().
+
+t_map_get(Key, Map, Opaques) ->
+ do_opaque(Map, Opaques,
+ fun(UM) ->
+ do_opaque(Key, Opaques, fun(UK) -> map_get(UK, UM) end)
+ end).
+
+map_get(_, ?none) -> ?none;
+map_get(Key, ?map(Pairs, DefK, DefV)) ->
+ DefRes =
+ case t_do_overlap(DefK, Key) of
+ false -> t_none();
+ true -> DefV
+ end,
+ case is_singleton_type(Key) of
+ false ->
+ lists:foldl(fun({K, _, V}, Res) ->
+ case t_do_overlap(K, Key) of
+ false -> Res;
+ true -> t_sup(Res, V)
+ end
+ end, DefRes, Pairs);
+ true ->
+ case lists:keyfind(Key, 1, Pairs) of
+ false -> DefRes;
+ {_, _, ValType} -> ValType
+ end
+ end.
+
+-spec t_map_is_key(erl_type(), erl_type()) -> erl_type().
+
+t_map_is_key(Key, Map) ->
+ t_map_is_key(Key, Map, 'universe').
+
+-spec t_map_is_key(erl_type(), erl_type(), opaques()) -> erl_type().
+
+t_map_is_key(Key, Map, Opaques) ->
+ do_opaque(Map, Opaques,
+ fun(UM) ->
+ do_opaque(Key, Opaques, fun(UK) -> map_is_key(UK, UM) end)
+ end).
+
+map_is_key(_, ?none) -> ?none;
+map_is_key(Key, ?map(Pairs, DefK, _DefV)) ->
+ case is_singleton_type(Key) of
+ true ->
+ case lists:keyfind(Key, 1, Pairs) of
+ {Key, ?mand, _} -> t_atom(true);
+ {Key, ?opt, ?none} -> t_atom(false);
+ {Key, ?opt, _} -> t_boolean();
+ false ->
+ case t_do_overlap(DefK, Key) of
+ false -> t_atom(false);
+ true -> t_boolean()
+ end
+ end;
+ false ->
+ case t_do_overlap(DefK, Key)
+ orelse lists:any(fun({_,_,?none}) -> false;
+ ({K,_,_}) -> t_do_overlap(K, Key)
+ end, Pairs)
+ of
+ true -> t_boolean();
+ false -> t_atom(false)
+ end
+ end.
+
%%-----------------------------------------------------------------------------
%% Tuples
%%
@@ -1807,7 +2131,7 @@ t_mfa() ->
-spec t_module() -> erl_type().
t_module() ->
- t_sup(t_atom(), t_parameterized_module()).
+ t_atom().
-spec t_node() -> erl_type().
@@ -1833,11 +2157,6 @@ t_iolist(N, T) when N > 0 ->
t_iolist(0, T) ->
t_maybe_improper_list(t_any(), t_sup(T, t_nil())).
--spec t_parameterized_module() -> erl_type().
-
-t_parameterized_module() ->
- t_tuple().
-
-spec t_timeout() -> erl_type().
t_timeout() ->
@@ -1890,8 +2209,9 @@ t_has_var(?tuple(Elements, _, _)) ->
t_has_var_list(Elements);
t_has_var(?tuple_set(_) = T) ->
t_has_var_list(t_tuple_subtypes(T));
-t_has_var(?map(_)= Map) ->
- t_has_var_list(map_keys(Map)) orelse t_has_var_list(map_values(Map));
+t_has_var(?map(_, DefK, _)= Map) ->
+ t_has_var_list(map_all_values(Map)) orelse
+ t_has_var(DefK);
t_has_var(?opaque(Set)) ->
%% Assume variables in 'args' are also present i 'struct'
t_has_var_list([O#opaque.struct || O <- set_to_list(Set)]);
@@ -1926,9 +2246,9 @@ t_collect_vars(?tuple(Types, _, _), Acc) ->
t_collect_vars_list(Types, Acc);
t_collect_vars(?tuple_set(_) = TS, Acc) ->
t_collect_vars_list(t_tuple_subtypes(TS), Acc);
-t_collect_vars(?map(_) = Map, Acc0) ->
- Acc = t_collect_vars_list(map_keys(Map), Acc0),
- t_collect_vars_list(map_values(Map), Acc);
+t_collect_vars(?map(_, DefK, _) = Map, Acc0) ->
+ Acc = t_collect_vars_list(map_all_values(Map), Acc0),
+ t_collect_vars(DefK, Acc);
t_collect_vars(?opaque(Set), Acc) ->
%% Assume variables in 'args' are also present i 'struct'
t_collect_vars_list([O#opaque.struct || O <- set_to_list(Set)], Acc);
@@ -1963,7 +2283,15 @@ t_from_term(T) when is_function(T) ->
{arity, Arity} = erlang:fun_info(T, arity),
t_fun(Arity, t_any());
t_from_term(T) when is_integer(T) -> t_integer(T);
-t_from_term(T) when is_map(T) -> t_map();
+t_from_term(T) when is_map(T) ->
+ Pairs = [{t_from_term(K), ?mand, t_from_term(V)}
+ || {K, V} <- maps:to_list(T)],
+ {Stons, Rest} = lists:partition(fun({K,_,_}) -> is_singleton_type(K) end,
+ Pairs),
+ {DefK, DefV}
+ = lists:foldl(fun({K,_,V},{AK,AV}) -> {t_sup(K,AK), t_sup(V,AV)} end,
+ {t_none(), t_none()}, Rest),
+ t_map(lists:keysort(1, Stons), DefK, DefV);
t_from_term(T) when is_pid(T) -> t_pid();
t_from_term(T) when is_port(T) -> t_port();
t_from_term(T) when is_reference(T) -> t_reference();
@@ -2178,8 +2506,6 @@ t_sup(?opaque(Set1), ?opaque(Set2)) ->
%% io:format("Debug: t_sup executed with args ~w and ~w~n",[T1, T2]), ?none;
%%t_sup(T1, T2=?opaque(_,_,_)) ->
%% io:format("Debug: t_sup executed with args ~w and ~w~n",[T1, T2]), ?none;
-t_sup(?remote(Set1), ?remote(Set2)) ->
- ?remote(set_union_no_limit(Set1, Set2));
t_sup(?matchstate(Pres1, Slots1), ?matchstate(Pres2, Slots2)) ->
?matchstate(t_sup(Pres1, Pres2), t_sup(Slots1, Slots2));
t_sup(?nil, ?nil) -> ?nil;
@@ -2255,6 +2581,13 @@ t_sup(?tuple_set(List1), T2 = ?tuple(_, Arity, _)) ->
sup_tuple_sets(List1, [{Arity, [T2]}]);
t_sup(?tuple(_, Arity, _) = T1, ?tuple_set(List2)) ->
sup_tuple_sets([{Arity, [T1]}], List2);
+t_sup(?map(_, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B) ->
+ Pairs =
+ map_pairwise_merge(
+ fun(K, MNess, V1, MNess, V2) -> {K, MNess, t_sup(V1, V2)};
+ (K, _, V1, _, V2) -> {K, ?opt, t_sup(V1, V2)}
+ end, A, B),
+ t_map(Pairs, t_sup(ADefK, BDefK), t_sup(ADefV, BDefV));
t_sup(T1, T2) ->
?union(U1) = force_union(T1),
?union(U2) = force_union(T2),
@@ -2373,8 +2706,7 @@ force_union(T = ?list(_, _, _)) -> ?list_union(T);
force_union(T = ?nil) -> ?list_union(T);
force_union(T = ?number(_, _)) -> ?number_union(T);
force_union(T = ?opaque(_)) -> ?opaque_union(T);
-force_union(T = ?remote(_)) -> ?remote_union(T);
-force_union(T = ?map(_)) -> ?map_union(T);
+force_union(T = ?map(_,_,_)) -> ?map_union(T);
force_union(T = ?tuple(_, _, _)) -> ?tuple_union(T);
force_union(T = ?tuple_set(_)) -> ?tuple_union(T);
force_union(T = ?matchstate(_, _)) -> ?matchstate_union(T);
@@ -2411,7 +2743,7 @@ t_elements(?number(_, _) = T) ->
end;
t_elements(?opaque(_) = T) ->
do_elements(T);
-t_elements(?map(_) = T) -> [T];
+t_elements(?map(_,_,_) = T) -> [T];
t_elements(?tuple(_, _, _) = T) -> [T];
t_elements(?tuple_set(_) = TS) ->
case t_tuple_subtypes(TS) of
@@ -2450,8 +2782,7 @@ t_inf(T1, T2) ->
t_inf(T1, T2, 'universe').
%% 'match' should be used from t_find_unknown_opaque() only
--type t_inf_opaques() :: 'universe'
- | [erl_type()] | {'match', [erl_type() | 'universe']}.
+-type t_inf_opaques() :: opaques() | {'match', [erl_type() | 'universe']}.
-spec t_inf(erl_type(), erl_type(), t_inf_opaques()) -> erl_type().
@@ -2494,6 +2825,20 @@ t_inf(?identifier(Set1), ?identifier(Set2), _Opaques) ->
?none -> ?none;
Set -> ?identifier(Set)
end;
+t_inf(?map(_, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B, _Opaques) ->
+ %% Because it simplifies the anonymous function, we allow Pairs to temporarily
+ %% contain mandatory pairs with none values, since all such cases should
+ %% result in a none result.
+ Pairs =
+ map_pairwise_merge(
+ %% For optional keys in both maps, when the infinimum is none, we have
+ %% essentially concluded that K must not be a key in the map.
+ fun(K, ?opt, V1, ?opt, V2) -> {K, ?opt, t_inf(V1, V2)};
+ %% When a key is optional in one map, but mandatory in another, it
+ %% becomes mandatory in the infinumum
+ (K, _, V1, _, V2) -> {K, ?mand, t_inf(V1, V2)}
+ end, A, B),
+ t_map(Pairs, t_inf(ADefK, BDefK), t_inf(ADefV, BDefV));
t_inf(?matchstate(Pres1, Slots1), ?matchstate(Pres2, Slots2), _Opaques) ->
?matchstate(t_inf(Pres1, Pres2), t_inf(Slots1, Slots2));
t_inf(?nil, ?nil, _Opaques) -> ?nil;
@@ -2886,8 +3231,8 @@ inf_tuples_in_sets2(_, [], Acc, _Opaques) -> lists:reverse(Acc).
inf_union(U1, U2, Opaques) ->
OpaqueFun =
fun(Union1, Union2, InfFun) ->
- [_,_,_,_,_,_,_,_,Opaque,_,_] = Union1,
- [A,B,F,I,L,N,T,M,_,_R,Map] = Union2,
+ [_,_,_,_,_,_,_,_,Opaque,_] = Union1,
+ [A,B,F,I,L,N,T,M,_,Map] = Union2,
List = [A,B,F,I,L,N,T,M,Map],
inf_union_collect(List, Opaque, InfFun, [], [])
end,
@@ -2956,87 +3301,33 @@ findfirst(N1, N2, U1, B1, U2, B2) ->
%%-----------------------------------------------------------------------------
%% Substitution of variables
%%
-%% Dialyzer versions prior to R15B used a dict data structure to map variables
-%% to types. Hans Bolinder suggested the use of lists of Key-Value pairs for
-%% this data structure and measurements showed a non-trivial speedup when using
-%% them for operations within this module (e.g. in t_unify/2). However, there
-%% is code outside erl_types that still passes a dict:dict() in the 2nd argument.
-%% So, for the time being, this module provides a t_subst/2 function for these
-%% external calls and a clone of it (t_subst_kv/2) which is used from all calls
-%% from within this module. This code duplication needs to be eliminated at
-%% some point.
-
--spec t_subst(erl_type(), dict:dict(atom(), erl_type())) -> erl_type().
-
-t_subst(T, Dict) ->
+
+-type subst_table() :: #{any() => erl_type()}.
+
+-spec t_subst(erl_type(), subst_table()) -> erl_type().
+
+t_subst(T, Map) ->
case t_has_var(T) of
- true -> t_subst_dict(T, Dict);
+ true -> t_subst_aux(T, Map);
false -> T
end.
-t_subst_dict(?var(Id), Dict) ->
- case dict:find(Id, Dict) of
- error -> ?any;
- {ok, Type} -> Type
- end;
-t_subst_dict(?list(Contents, Termination, Size), Dict) ->
- case t_subst_dict(Contents, Dict) of
- ?none -> ?none;
- NewContents ->
- %% Be careful here to make the termination collapse if necessary.
- case t_subst_dict(Termination, Dict) of
- ?nil -> ?list(NewContents, ?nil, Size);
- ?any -> ?list(NewContents, ?any, Size);
- Other ->
- ?list(NewContents2, NewTermination, _) = t_cons(NewContents, Other),
- ?list(NewContents2, NewTermination, Size)
- end
- end;
-t_subst_dict(?function(Domain, Range), Dict) ->
- ?function(t_subst_dict(Domain, Dict), t_subst_dict(Range, Dict));
-t_subst_dict(?product(Types), Dict) ->
- ?product([t_subst_dict(T, Dict) || T <- Types]);
-t_subst_dict(?tuple(?any, ?any, ?any) = T, _Dict) ->
- T;
-t_subst_dict(?tuple(Elements, _Arity, _Tag), Dict) ->
- t_tuple([t_subst_dict(E, Dict) || E <- Elements]);
-t_subst_dict(?tuple_set(_) = TS, Dict) ->
- t_sup([t_subst_dict(T, Dict) || T <- t_tuple_subtypes(TS)]);
-t_subst_dict(?map(Pairs), Dict) ->
- ?map([{t_subst_dict(K, Dict), t_subst_dict(V, Dict)} ||
- {K, V} <- Pairs]);
-t_subst_dict(?opaque(Es), Dict) ->
- List = [Opaque#opaque{args = [t_subst_dict(Arg, Dict) || Arg <- Args],
- struct = t_subst_dict(S, Dict)} ||
- Opaque = #opaque{args = Args, struct = S} <- set_to_list(Es)],
- ?opaque(ordsets:from_list(List));
-t_subst_dict(?union(List), Dict) ->
- ?union([t_subst_dict(E, Dict) || E <- List]);
-t_subst_dict(T, _Dict) ->
- T.
-
-spec subst_all_vars_to_any(erl_type()) -> erl_type().
subst_all_vars_to_any(T) ->
- t_subst_kv(T, []).
+ t_subst(T, #{}).
-t_subst_kv(T, KVMap) ->
- case t_has_var(T) of
- true -> t_subst_aux(T, KVMap);
- false -> T
- end.
-
-t_subst_aux(?var(Id), VarMap) ->
- case lists:keyfind(Id, 1, VarMap) of
- false -> ?any;
- {Id, Type} -> Type
+t_subst_aux(?var(Id), Map) ->
+ case maps:find(Id, Map) of
+ error -> ?any;
+ {ok, Type} -> Type
end;
-t_subst_aux(?list(Contents, Termination, Size), VarMap) ->
- case t_subst_aux(Contents, VarMap) of
+t_subst_aux(?list(Contents, Termination, Size), Map) ->
+ case t_subst_aux(Contents, Map) of
?none -> ?none;
NewContents ->
%% Be careful here to make the termination collapse if necessary.
- case t_subst_aux(Termination, VarMap) of
+ case t_subst_aux(Termination, Map) of
?nil -> ?list(NewContents, ?nil, Size);
?any -> ?list(NewContents, ?any, Size);
Other ->
@@ -3044,40 +3335,28 @@ t_subst_aux(?list(Contents, Termination, Size), VarMap) ->
?list(NewContents2, NewTermination, Size)
end
end;
-t_subst_aux(?function(Domain, Range), VarMap) ->
- ?function(t_subst_aux(Domain, VarMap), t_subst_aux(Range, VarMap));
-t_subst_aux(?product(Types), VarMap) ->
- ?product([t_subst_aux(T, VarMap) || T <- Types]);
-t_subst_aux(?tuple(?any, ?any, ?any) = T, _VarMap) ->
+t_subst_aux(?function(Domain, Range), Map) ->
+ ?function(t_subst_aux(Domain, Map), t_subst_aux(Range, Map));
+t_subst_aux(?product(Types), Map) ->
+ ?product([t_subst_aux(T, Map) || T <- Types]);
+t_subst_aux(?tuple(?any, ?any, ?any) = T, _Map) ->
T;
-t_subst_aux(?tuple(Elements, _Arity, _Tag), VarMap) ->
- t_tuple([t_subst_aux(E, VarMap) || E <- Elements]);
-t_subst_aux(?tuple_set(_) = TS, VarMap) ->
- t_sup([t_subst_aux(T, VarMap) || T <- t_tuple_subtypes(TS)]);
-t_subst_aux(?map(Pairs), VarMap) ->
- ?map([{t_subst_aux(K, VarMap), t_subst_aux(V, VarMap)} ||
- {K, V} <- Pairs]);
-t_subst_aux(?opaque(Es), VarMap) ->
- List = [Opaque#opaque{args = [t_subst_aux(Arg, VarMap) || Arg <- Args],
- struct = t_subst_aux(S, VarMap)} ||
- Opaque = #opaque{args = Args, struct = S} <- set_to_list(Es)],
- ?opaque(ordsets:from_list(List));
-t_subst_aux(?union(List), VarMap) ->
- ?union([t_subst_aux(E, VarMap) || E <- List]);
-t_subst_aux(T, _VarMap) ->
+t_subst_aux(?tuple(Elements, _Arity, _Tag), Map) ->
+ t_tuple([t_subst_aux(E, Map) || E <- Elements]);
+t_subst_aux(?tuple_set(_) = TS, Map) ->
+ t_sup([t_subst_aux(T, Map) || T <- t_tuple_subtypes(TS)]);
+t_subst_aux(?map(Pairs, DefK, DefV), Map) ->
+ t_map([{K, MNess, t_subst_aux(V, Map)} || {K, MNess, V} <- Pairs],
+ t_subst_aux(DefK, Map), t_subst_aux(DefV, Map));
+t_subst_aux(?opaque(Es), Map) ->
+ List = [Opaque#opaque{args = [t_subst_aux(Arg, Map) || Arg <- Args],
+ struct = t_subst_aux(S, Map)} ||
+ Opaque = #opaque{args = Args, struct = S} <- set_to_list(Es)],
+ ?opaque(ordsets:from_list(List));
+t_subst_aux(?union(List), Map) ->
+ ?union([t_subst_aux(E, Map) || E <- List]);
+t_subst_aux(T, _Map) ->
T.
-
--spec subst_all_remote(erl_type(), erl_type()) -> erl_type().
-
-subst_all_remote(Type0, Substitute) ->
- Map =
- fun(Type) ->
- case t_is_remote(Type) of
- true -> Substitute;
- false -> Type
- end
- end,
- t_map(Map, Type0).
%%-----------------------------------------------------------------------------
%% Unification
@@ -3088,33 +3367,33 @@ subst_all_remote(Type0, Substitute) ->
-spec t_unify(erl_type(), erl_type()) -> t_unify_ret().
t_unify(T1, T2) ->
- {T, VarMap} = t_unify(T1, T2, []),
- {t_subst_kv(T, VarMap), lists:keysort(1, VarMap)}.
+ {T, VarMap} = t_unify(T1, T2, #{}),
+ {t_subst(T, VarMap), lists:keysort(1, maps:to_list(VarMap))}.
t_unify(?var(Id) = T, ?var(Id), VarMap) ->
{T, VarMap};
t_unify(?var(Id1) = T, ?var(Id2), VarMap) ->
- case lists:keyfind(Id1, 1, VarMap) of
- false ->
- case lists:keyfind(Id2, 1, VarMap) of
- false -> {T, [{Id2, T} | VarMap]};
- {Id2, Type} -> t_unify(T, Type, VarMap)
+ case maps:find(Id1, VarMap) of
+ error ->
+ case maps:find(Id2, VarMap) of
+ error -> {T, VarMap#{Id2 => T}};
+ {ok, Type} -> t_unify(T, Type, VarMap)
end;
- {Id1, Type1} ->
- case lists:keyfind(Id2, 1, VarMap) of
- false -> {Type1, [{Id2, T} | VarMap]};
- {Id2, Type2} -> t_unify(Type1, Type2, VarMap)
+ {ok, Type1} ->
+ case maps:find(Id2, VarMap) of
+ error -> {Type1, VarMap#{Id2 => T}};
+ {ok, Type2} -> t_unify(Type1, Type2, VarMap)
end
end;
t_unify(?var(Id), Type, VarMap) ->
- case lists:keyfind(Id, 1, VarMap) of
- false -> {Type, [{Id, Type} | VarMap]};
- {Id, VarType} -> t_unify(VarType, Type, VarMap)
+ case maps:find(Id, VarMap) of
+ error -> {Type, VarMap#{Id => Type}};
+ {ok, VarType} -> t_unify(VarType, Type, VarMap)
end;
t_unify(Type, ?var(Id), VarMap) ->
- case lists:keyfind(Id, 1, VarMap) of
- false -> {Type, [{Id, Type} | VarMap]};
- {Id, VarType} -> t_unify(VarType, Type, VarMap)
+ case maps:find(Id, VarMap) of
+ error -> {Type, VarMap#{Id => Type}};
+ {ok, VarType} -> t_unify(VarType, Type, VarMap)
end;
t_unify(?function(Domain1, Range1), ?function(Domain2, Range2), VarMap) ->
{Domain, VarMap1} = t_unify(Domain1, Domain2, VarMap),
@@ -3148,6 +3427,23 @@ t_unify(?tuple_set(List1) = T1, ?tuple_set(List2) = T2, VarMap) ->
{Tuples, NewVarMap} -> {t_sup(Tuples), NewVarMap}
catch _:_ -> throw({mismatch, T1, T2})
end;
+t_unify(?map(_, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B, VarMap0) ->
+ {DefK, VarMap1} = t_unify(ADefK, BDefK, VarMap0),
+ {DefV, VarMap2} = t_unify(ADefV, BDefV, VarMap1),
+ {Pairs, VarMap} =
+ map_pairwise_merge_foldr(
+ fun(K, MNess, V1, MNess, V2, {Pairs0, VarMap3}) ->
+ %% We know that the keys unify and do not contain variables, or they
+ %% would not be singletons
+ %% TODO: Should V=?none (known missing keys) be handled special?
+ {V, VarMap4} = t_unify(V1, V2, VarMap3),
+ {[{K,MNess,V}|Pairs0], VarMap4};
+ (K, _, V1, _, V2, {Pairs0, VarMap3}) ->
+ %% One mandatory and one optional; what should be done in this case?
+ {V, VarMap4} = t_unify(V1, V2, VarMap3),
+ {[{K,?mand,V}|Pairs0], VarMap4}
+ end, {[], VarMap2}, A, B),
+ {t_map(Pairs, DefK, DefV), VarMap};
t_unify(?opaque(_) = T1, ?opaque(_) = T2, VarMap) ->
t_unify(t_opaque_structure(T1), t_opaque_structure(T2), VarMap);
t_unify(T1, ?opaque(_) = T2, VarMap) ->
@@ -3181,11 +3477,11 @@ unify_union1(?union(List), T1, T2) ->
end.
unify_union(List) ->
- [A,B,F,I,L,N,T,M,O,R,Map] = List,
+ [A,B,F,I,L,N,T,M,O,Map] = List,
if O =:= ?none -> no;
true ->
S = t_opaque_structure(O),
- {yes, t_sup([A,B,F,I,L,N,T,M,S,R,Map])}
+ {yes, t_sup([A,B,F,I,L,N,T,M,S,Map])}
end.
-spec is_opaque_type(erl_type(), [erl_type()]) -> boolean().
@@ -3351,7 +3647,7 @@ t_subtract_list(T, []) ->
-spec t_subtract(erl_type(), erl_type()) -> erl_type().
t_subtract(_, ?any) -> ?none;
-t_subtract(_, ?var(_)) -> ?none;
+t_subtract(T, ?var(_)) -> T;
t_subtract(?any, _) -> ?any;
t_subtract(?var(_) = T, _) -> T;
t_subtract(T, ?unit) -> T;
@@ -3504,8 +3800,50 @@ t_subtract(?product(Elements1) = T1, ?product(Elements2)) ->
_ -> T1
end
end;
-t_subtract(?map(_) = T, _) -> % XXX: very crude; will probably need refinement
- T;
+t_subtract(?map(APairs, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B) ->
+ case t_is_subtype(ADefK, BDefK) andalso t_is_subtype(ADefV, BDefV) of
+ false -> A;
+ true ->
+ %% We fold over the maps to produce a list of constraints, where
+ %% constraints are additional key-value pairs to put in Pairs. Only one
+ %% constraint need to be applied to produce a type that excludes the
+ %% right-hand-side type, so if more than one constraint is produced, we
+ %% just return the left-hand-side argument.
+ %%
+ %% Each case of the fold may either conclude that
+ %% * The arguments constrain A at least as much as B, i.e. that A so far
+ %% is a subtype of B. In that case they return false
+ %% * That for the particular arguments, A being a subtype of B does not
+ %% hold, but the infinimum of A and B is nonempty, and by narrowing a
+ %% pair in A, we can create a type that excludes some elements in the
+ %% infinumum. In that case, they will return that pair.
+ %% * That for the particular arguments, A being a subtype of B does not
+ %% hold, and either the infinumum of A and B is empty, or it is not
+ %% possible with the current representation to create a type that
+ %% excludes elements from B without also excluding elements that are
+ %% only in A. In that case, it will return the pair from A unchanged.
+ case
+ map_pairwise_merge(
+ %% If V1 is a subtype of V2, the case that K does not exist in A
+ %% remain.
+ fun(K, ?opt, V1, ?mand, V2) -> {K, ?opt, t_subtract(V1, V2)};
+ (K, _, V1, _, V2) ->
+ %% If we subtract an optional key, that leaves a mandatory key
+ case t_subtract(V1, V2) of
+ ?none -> false;
+ Partial -> {K, ?mand, Partial}
+ end
+ end, A, B)
+ of
+ %% We produce a list of keys that are constrained. As only one of
+ %% these should apply at a time, we can't represent the difference if
+ %% more than one constraint is produced. If we applied all of them,
+ %% that would make an underapproximation, which we must not do.
+ [] -> ?none; %% A is a subtype of B
+ [E] -> t_map(mapdict_store(E, APairs), ADefK, ADefV);
+ _ -> A
+ end
+ end;
t_subtract(?product(P1), _) ->
?product(P1);
t_subtract(T, ?product(_)) ->
@@ -3543,10 +3881,10 @@ t_subtract_lists([], [], Acc) ->
-spec subtract_union([erl_type(),...], [erl_type(),...]) -> erl_type().
subtract_union(U1, U2) ->
- [A1,B1,F1,I1,L1,N1,T1,M1,O1,R1,Map1] = U1,
- [A2,B2,F2,I2,L2,N2,T2,M2,O2,R2,Map2] = U2,
- List1 = [A1,B1,F1,I1,L1,N1,T1,M1,?none,R1,Map1],
- List2 = [A2,B2,F2,I2,L2,N2,T2,M2,?none,R2,Map2],
+ [A1,B1,F1,I1,L1,N1,T1,M1,O1,Map1] = U1,
+ [A2,B2,F2,I2,L2,N2,T2,M2,O2,Map2] = U2,
+ List1 = [A1,B1,F1,I1,L1,N1,T1,M1,?none,Map1],
+ List2 = [A2,B2,F2,I2,L2,N2,T2,M2,?none,Map2],
Sub1 = subtract_union(List1, List2, 0, []),
O = if O1 =:= ?none -> O1;
true -> t_subtract(O1, ?union(U2))
@@ -3636,12 +3974,17 @@ subtype_is_equal(T1, T2) ->
t_is_instance(ConcreteType, Type) ->
t_is_subtype(ConcreteType, t_unopaque(Type)).
+-spec t_do_overlap(erl_type(), erl_type()) -> boolean().
+
+t_do_overlap(TypeA, TypeB) ->
+ not (t_is_none_or_unit(t_inf(TypeA, TypeB))).
+
-spec t_unopaque(erl_type()) -> erl_type().
t_unopaque(T) ->
t_unopaque(T, 'universe').
--spec t_unopaque(erl_type(), 'universe' | [erl_type()]) -> erl_type().
+-spec t_unopaque(erl_type(), opaques()) -> erl_type().
t_unopaque(?opaque(_) = T, Opaques) ->
case Opaques =:= 'universe' orelse is_opaque_type(T, Opaques) of
@@ -3662,16 +4005,21 @@ t_unopaque(?product(Types), Opaques) ->
?product([t_unopaque(T, Opaques) || T <- Types]);
t_unopaque(?function(Domain, Range), Opaques) ->
?function(t_unopaque(Domain, Opaques), t_unopaque(Range, Opaques));
-t_unopaque(?union([A,B,F,I,L,N,T,M,O,R,Map]), Opaques) ->
+t_unopaque(?union([A,B,F,I,L,N,T,M,O,Map]), Opaques) ->
UL = t_unopaque(L, Opaques),
UT = t_unopaque(T, Opaques),
UF = t_unopaque(F, Opaques),
+ UM = t_unopaque(M, Opaques),
UMap = t_unopaque(Map, Opaques),
{OF,UO} = case t_unopaque(O, Opaques) of
?opaque(_) = O1 -> {O1, []};
Type -> {?none, [Type]}
end,
- t_sup([?union([A,B,UF,I,UL,N,UT,M,OF,R,UMap])|UO]);
+ t_sup([?union([A,B,UF,I,UL,N,UT,UM,OF,UMap])|UO]);
+t_unopaque(?map(Pairs,DefK,DefV), Opaques) ->
+ t_map([{K, MNess, t_unopaque(V, Opaques)} || {K, MNess, V} <- Pairs],
+ t_unopaque(DefK, Opaques),
+ t_unopaque(DefV, Opaques));
t_unopaque(T, _) ->
T.
@@ -3723,6 +4071,16 @@ t_limit_k(?opaque(Es), K) ->
Opaque#opaque{struct = NewS}
end || #opaque{struct = S} = Opaque <- set_to_list(Es)],
?opaque(ordsets:from_list(List));
+t_limit_k(?map(Pairs0, DefK0, DefV0), K) ->
+ Fun = fun({EK, MNess, EV}, {Exact, DefK1, DefV1}) ->
+ LV = t_limit_k(EV, K - 1),
+ case t_limit_k(EK, K - 1) of
+ EK -> {[{EK,MNess,LV}|Exact], DefK1, DefV1};
+ LK -> {Exact, t_sup(LK, DefK1), t_sup(LV, DefV1)}
+ end
+ end,
+ {Pairs, DefK2, DefV2} = lists:foldr(Fun, {[], DefK0, DefV0}, Pairs0),
+ t_map(Pairs, t_limit_k(DefK2, K - 1), t_limit_k(DefV2, K - 1));
t_limit_k(T, _K) -> T.
%%============================================================================
@@ -3797,6 +4155,9 @@ t_map(Fun, ?opaque(Set)) ->
[] -> ?none;
_ -> ?opaque(ordsets:from_list(L))
end);
+t_map(Fun, ?map(Pairs,DefK,DefV)) ->
+ %% TODO:
+ Fun(t_map(Pairs, Fun(DefK), Fun(DefV)));
t_map(Fun, T) ->
Fun(T).
@@ -3938,18 +4299,22 @@ t_to_string(?float, _RecDict) -> "float()";
t_to_string(?number(?any, ?unknown_qual), _RecDict) -> "number()";
t_to_string(?product(List), RecDict) ->
"<" ++ comma_sequence(List, RecDict) ++ ">";
-t_to_string(?remote(Set), RecDict) ->
- string:join([case Args =:= [] of
- true -> flat_format("~w:~w()", [Mod, Name]);
- false ->
- ArgString = comma_sequence(Args, RecDict),
- flat_format("~w:~w(~s)", [Mod, Name, ArgString])
- end
- || #remote{mod = Mod, name = Name, args = Args} <-
- set_to_list(Set)],
- " | ");
-t_to_string(?map(Pairs), RecDict) ->
- "#{" ++ map_pairs_to_string(Pairs,RecDict) ++ "}";
+t_to_string(?map([],?any,?any), _RecDict) -> "map()";
+t_to_string(?map(Pairs0,DefK,DefV), RecDict) ->
+ {Pairs, ExtraEl} =
+ case {DefK, DefV} of
+ {?none, ?none} -> {Pairs0, []};
+ _ -> {Pairs0 ++ [{DefK,?opt,DefV}], []}
+ end,
+ Tos = fun(T) -> case T of
+ ?any -> "_";
+ _ -> t_to_string(T, RecDict)
+ end end,
+ StrMand = [{Tos(K),Tos(V)}||{K,?mand,V}<-Pairs],
+ StrOpt = [{Tos(K),Tos(V)}||{K,?opt,V}<-Pairs],
+ "#{" ++ string:join([K ++ ":=" ++ V||{K,V}<-StrMand]
+ ++ [K ++ "=>" ++ V||{K,V}<-StrOpt]
+ ++ ExtraEl, ", ") ++ "}";
t_to_string(?tuple(?any, ?any, ?any), _RecDict) -> "tuple()";
t_to_string(?tuple(Elements, _Arity, ?any), RecDict) ->
"{" ++ comma_sequence(Elements, RecDict) ++ "}";
@@ -3970,28 +4335,21 @@ t_to_string(?var(Id), _RecDict) when is_integer(Id) ->
flat_format("var(~w)", [Id]).
-map_pairs_to_string([],_) -> [];
-map_pairs_to_string(Pairs,RecDict) ->
- StrPairs = [{t_to_string(K,RecDict),t_to_string(V,RecDict)}||{K,V}<-Pairs],
- string:join([K ++ "=>" ++ V||{K,V}<-StrPairs], ", ").
-
-
record_to_string(Tag, [_|Fields], FieldNames, RecDict) ->
FieldStrings = record_fields_to_string(Fields, FieldNames, RecDict, []),
"#" ++ atom_to_string(Tag) ++ "{" ++ string:join(FieldStrings, ",") ++ "}".
-record_fields_to_string([F|Fs], [{FName, _Abstr, _DefType}|FDefs],
+record_fields_to_string([F|Fs], [{FName, _Abstr, DefType}|FDefs],
RecDict, Acc) ->
NewAcc =
- case t_is_equal(F, t_any()) orelse t_is_any_atom('undefined', F) of
+ case
+ t_is_equal(F, t_any()) orelse
+ (t_is_any_atom('undefined', F) andalso
+ not t_is_none(t_inf(F, DefType)))
+ of
true -> Acc;
false ->
StrFV = atom_to_string(FName) ++ "::" ++ t_to_string(F, RecDict),
- %% ActualDefType = t_subtract(DefType, t_atom('undefined')),
- %% Str = case t_is_any(ActualDefType) of
- %% true -> StrFV;
- %% false -> StrFV ++ "::" ++ t_to_string(ActualDefType, RecDict)
- %% end,
[StrFV|Acc]
end,
record_fields_to_string(Fs, FDefs, RecDict, NewAcc);
@@ -4057,33 +4415,30 @@ mod_name(Mod, Name) ->
-type type_names() :: [type_key() | record_key()].
--type mta() :: {module(), atom(), arity()}.
--type mra() :: {module(), atom(), arity()}.
--type site() :: {'type', mta()} | {'spec', mfa()} | {'record', mra()}.
+-type mta() :: {module(), atom(), arity()}.
+-type mra() :: {module(), atom(), arity()}.
+-type site() :: {'type', mta()} | {'spec', mfa()} | {'record', mra()}.
+-type cache_key() :: {module(), atom(), expand_depth(),
+ [erl_type()], type_names()}.
+-opaque cache() :: #{cache_key() => {erl_type(), expand_limit()}}.
--spec t_from_form(parse_form(), sets:set(mfa()),
- site(), mod_records()) -> erl_type().
+-spec t_from_form(parse_form(), sets:set(mfa()), site(), mod_records(),
+ var_table(), cache()) -> {erl_type(), cache()}.
-t_from_form(Form, ExpTypes, Site, RecDict) ->
- t_from_form(Form, ExpTypes, Site, RecDict, dict:new()).
-
--spec t_from_form(parse_form(), sets:set(mfa()),
- site(), mod_records(), var_table()) -> erl_type().
-
-t_from_form(Form, ExpTypes, Site, RecDict, VarDict) ->
- {T, _} = t_from_form1(Form, ExpTypes, Site, RecDict, VarDict),
- T.
+t_from_form(Form, ExpTypes, Site, RecDict, VarTab, Cache) ->
+ t_from_form1(Form, ExpTypes, Site, RecDict, VarTab, Cache).
%% Replace external types with with none().
-spec t_from_form_without_remote(parse_form(), site(), type_table()) ->
- erl_type().
+ {erl_type(), cache()}.
t_from_form_without_remote(Form, Site, TypeTable) ->
Module = site_module(Site),
RecDict = dict:from_list([{Module, TypeTable}]),
ExpTypes = replace_by_none,
- {T, _} = t_from_form1(Form, ExpTypes, Site, RecDict, dict:new()),
- T.
+ VarTab = var_table__new(),
+ Cache = cache__new(),
+ t_from_form1(Form, ExpTypes, Site, RecDict, VarTab, Cache).
%% REC_TYPE_LIMIT is used for limiting the depth of recursive types.
%% EXPAND_LIMIT is used for limiting the size of types by
@@ -4096,34 +4451,53 @@ t_from_form_without_remote(Form, Site, TypeTable) ->
-type expand_depth() :: integer().
+-record(from_form, {site :: site(),
+ xtypes :: sets:set(mfa()) | 'replace_by_none',
+ mrecs :: mod_records(),
+ vtab :: var_table(),
+ tnames :: type_names()}).
+
-spec t_from_form1(parse_form(), sets:set(mfa()) | 'replace_by_none',
- site(), mod_records(), var_table()) ->
- {erl_type(), expand_limit()}.
+ site(), mod_records(), var_table(), cache()) ->
+ {erl_type(), cache()}.
-t_from_form1(Form, ET, Site, MR, V) ->
+t_from_form1(Form, ET, Site, MR, V, C) ->
TypeNames = initial_typenames(Site),
- t_from_form1(Form, TypeNames, ET, Site, MR, V, ?EXPAND_DEPTH).
+ State = #from_form{site = Site,
+ xtypes = ET,
+ mrecs = MR,
+ vtab = V,
+ tnames = TypeNames},
+ L = ?EXPAND_LIMIT,
+ {T1, L1, C1} = from_form(Form, State, ?EXPAND_DEPTH, L, C),
+ if
+ L1 =< 0 ->
+ from_form_loop(Form, State, 1, L, C1);
+ true ->
+ {T1, C1}
+ end.
initial_typenames({type, _MTA}=Site) -> [Site];
initial_typenames({spec, _MFA}) -> [];
initial_typenames({record, _MRA}) -> [].
-t_from_form1(Form, TypeNames, ET, Site, MR, V, D) ->
- L = ?EXPAND_LIMIT,
- {T, L1} = t_from_form(Form, TypeNames, ET, Site, MR, V, D, L),
+from_form_loop(Form, State, D, Limit, C) ->
+ {T1, L1, C1} = from_form(Form, State, D, Limit, C),
+ Delta = Limit - L1,
if
- L1 =< 0, D > 1 ->
- D1 = D div 2,
- t_from_form1(Form, TypeNames, ET, Site, MR, V, D1);
+ %% Save some time by assuming next depth will exceed the limit.
+ Delta * 8 > Limit ->
+ {T1, C1};
true ->
- {T, L1}
+ D1 = D + 1,
+ from_form_loop(Form, State, D1, Limit, C1)
end.
--spec t_from_form(parse_form(), type_names(),
- sets:set(mfa()) | 'replace_by_none',
- site(), mod_records(), var_table(),
- expand_depth(), expand_limit())
- -> {erl_type(), expand_limit()}.
+-spec from_form(parse_form(),
+ #from_form{},
+ expand_depth(),
+ expand_limit(),
+ cache()) -> {erl_type(), expand_limit(), cache()}.
%% If there is something wrong with parse_form()
%% throw({error, io_lib:chars()} is called;
@@ -4133,312 +4507,336 @@ t_from_form1(Form, TypeNames, ET, Site, MR, V, D) ->
%%
%% It is assumed that site_module(S) can be found in MR.
-t_from_form(_, _TypeNames, _ET, _S, _MR, _V, D, L) when D =< 0 ; L =< 0 ->
- {t_any(), L};
-t_from_form({var, _L, '_'}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_any(), L};
-t_from_form({var, _L, Name}, _TypeNames, _ET, _S, _MR, V, _D, L) ->
- case dict:find(Name, V) of
- error -> {t_var(Name), L};
- {ok, Val} -> {Val, L}
+from_form(_, _S, D, L, C) when D =< 0 ; L =< 0 ->
+ {t_any(), L, C};
+from_form({var, _L, '_'}, _S, _D, L, C) ->
+ {t_any(), L, C};
+from_form({var, _L, Name}, S, _D, L, C) ->
+ V = S#from_form.vtab,
+ case maps:find(Name, V) of
+ error -> {t_var(Name), L, C};
+ {ok, Val} -> {Val, L, C}
end;
-t_from_form({ann_type, _L, [_Var, Type]}, TypeNames, ET, S, MR, V, D, L) ->
- t_from_form(Type, TypeNames, ET, S, MR, V, D, L);
-t_from_form({paren_type, _L, [Type]}, TypeNames, ET, S, MR, V, D, L) ->
- t_from_form(Type, TypeNames, ET, S, MR, V, D, L);
-t_from_form({remote_type, _L, [{atom, _, Module}, {atom, _, Type}, Args]},
- TypeNames, ET, S, MR, V, D, L) ->
- remote_from_form(Module, Type, Args, TypeNames, ET, S, MR, V, D, L);
-t_from_form({atom, _L, Atom}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_atom(Atom), L};
-t_from_form({integer, _L, Int}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_integer(Int), L};
-t_from_form({op, _L, _Op, _Arg} = Op, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
+from_form({ann_type, _L, [_Var, Type]}, S, D, L, C) ->
+ from_form(Type, S, D, L, C);
+from_form({paren_type, _L, [Type]}, S, D, L, C) ->
+ from_form(Type, S, D, L, C);
+from_form({remote_type, _L, [{atom, _, Module}, {atom, _, Type}, Args]},
+ S, D, L, C) ->
+ remote_from_form(Module, Type, Args, S, D, L, C);
+from_form({atom, _L, Atom}, _S, _D, L, C) ->
+ {t_atom(Atom), L, C};
+from_form({integer, _L, Int}, _S, _D, L, C) ->
+ {t_integer(Int), L, C};
+from_form({op, _L, _Op, _Arg} = Op, _S, _D, L, C) ->
case erl_eval:partial_eval(Op) of
{integer, _, Val} ->
- {t_integer(Val), L};
+ {t_integer(Val), L, C};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Op])})
end;
-t_from_form({op, _L, _Op, _Arg1, _Arg2} = Op, _TypeNames,
- _ET, _S, _MR, _V, _D, L) ->
+from_form({op, _L, _Op, _Arg1, _Arg2} = Op, _S, _D, L, C) ->
case erl_eval:partial_eval(Op) of
{integer, _, Val} ->
- {t_integer(Val), L};
+ {t_integer(Val), L, C};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Op])})
end;
-t_from_form({type, _L, any, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_any(), L};
-t_from_form({type, _L, arity, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_arity(), L};
-t_from_form({type, _L, atom, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_atom(), L};
-t_from_form({type, _L, binary, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_binary(), L};
-t_from_form({type, _L, binary, [Base, Unit]} = Type,
- _TypeNames, _ET, _S, _MR, _V, _D, L) ->
+from_form({type, _L, any, []}, _S, _D, L, C) ->
+ {t_any(), L, C};
+from_form({type, _L, arity, []}, _S, _D, L, C) ->
+ {t_arity(), L, C};
+from_form({type, _L, atom, []}, _S, _D, L, C) ->
+ {t_atom(), L, C};
+from_form({type, _L, binary, []}, _S, _D, L, C) ->
+ {t_binary(), L, C};
+from_form({type, _L, binary, [Base, Unit]} = Type, _S, _D, L, C) ->
case {erl_eval:partial_eval(Base), erl_eval:partial_eval(Unit)} of
{{integer, _, B}, {integer, _, U}} when B >= 0, U >= 0 ->
- {t_bitstr(U, B), L};
+ {t_bitstr(U, B), L, C};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Type])})
end;
-t_from_form({type, _L, bitstring, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_bitstr(), L};
-t_from_form({type, _L, bool, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_boolean(), L}; % XXX: Temporarily
-t_from_form({type, _L, boolean, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_boolean(), L};
-t_from_form({type, _L, byte, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_byte(), L};
-t_from_form({type, _L, char, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_char(), L};
-t_from_form({type, _L, float, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_float(), L};
-t_from_form({type, _L, function, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_fun(), L};
-t_from_form({type, _L, 'fun', []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_fun(), L};
-t_from_form({type, _L, 'fun', [{type, _, any}, Range]}, TypeNames,
- ET, S, MR, V, D, L) ->
- {T, L1} = t_from_form(Range, TypeNames, ET, S, MR, V, D - 1, L - 1),
- {t_fun(T), L1};
-t_from_form({type, _L, 'fun', [{type, _, product, Domain}, Range]},
- TypeNames, ET, S, MR, V, D, L) ->
- {Dom1, L1} = list_from_form(Domain, TypeNames, ET, S, MR, V, D, L),
- {Ran1, L2} = t_from_form(Range, TypeNames, ET, S, MR, V, D - 1, L1),
- {t_fun(Dom1, Ran1), L2};
-t_from_form({type, _L, identifier, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_identifier(), L};
-t_from_form({type, _L, integer, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_integer(), L};
-t_from_form({type, _L, iodata, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_iodata(), L};
-t_from_form({type, _L, iolist, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_iolist(), L};
-t_from_form({type, _L, list, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_list(), L};
-t_from_form({type, _L, list, [Type]}, TypeNames, ET, S, MR, V, D, L) ->
- {T, L1} = t_from_form(Type, TypeNames, ET, S, MR, V, D - 1, L - 1),
- {t_list(T), L1};
-t_from_form({type, _L, map, _}, TypeNames, ET, S, MR, V, D, L) ->
- builtin_type(map, t_map([]), TypeNames, ET, S, MR, V, D, L);
-t_from_form({type, _L, mfa, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_mfa(), L};
-t_from_form({type, _L, module, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_module(), L};
-t_from_form({type, _L, nil, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_nil(), L};
-t_from_form({type, _L, neg_integer, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_neg_integer(), L};
-t_from_form({type, _L, non_neg_integer, []}, _TypeNames, _ET, _S, _MR,
- _V, _D, L) ->
- {t_non_neg_integer(), L};
-t_from_form({type, _L, no_return, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_unit(), L};
-t_from_form({type, _L, node, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_node(), L};
-t_from_form({type, _L, none, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_none(), L};
-t_from_form({type, _L, nonempty_list, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_nonempty_list(), L};
-t_from_form({type, _L, nonempty_list, [Type]}, TypeNames, ET, S, MR, V, D, L) ->
- {T, L1} = t_from_form(Type, TypeNames, ET, S, MR, V, D, L - 1),
- {t_nonempty_list(T), L1};
-t_from_form({type, _L, nonempty_improper_list, [Cont, Term]}, TypeNames,
- ET, S, MR, V, D, L) ->
- {T1, L1} = t_from_form(Cont, TypeNames, ET, S, MR, V, D, L - 1),
- {T2, L2} = t_from_form(Term, TypeNames, ET, S, MR, V, D, L1),
- {t_cons(T1, T2), L2};
-t_from_form({type, _L, nonempty_maybe_improper_list, []}, _TypeNames,
- _ET, _S, _MR, _V, _D, L) ->
- {t_cons(?any, ?any), L};
-t_from_form({type, _L, nonempty_maybe_improper_list, [Cont, Term]},
- TypeNames, ET, S, MR, V, D, L) ->
- {T1, L1} = t_from_form(Cont, TypeNames, ET, S, MR, V, D, L - 1),
- {T2, L2} = t_from_form(Term, TypeNames, ET, S, MR, V, D, L1),
- {t_cons(T1, T2), L2};
-t_from_form({type, _L, nonempty_string, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_nonempty_string(), L};
-t_from_form({type, _L, number, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_number(), L};
-t_from_form({type, _L, pid, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_pid(), L};
-t_from_form({type, _L, port, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_port(), L};
-t_from_form({type, _L, pos_integer, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_pos_integer(), L};
-t_from_form({type, _L, maybe_improper_list, []}, _TypeNames,
- _ET, _S, _MR, _V, _D, L) ->
- {t_maybe_improper_list(), L};
-t_from_form({type, _L, maybe_improper_list, [Content, Termination]},
- TypeNames, ET, S, MR, V, D, L) ->
- {T1, L1} = t_from_form(Content, TypeNames, ET, S, MR, V, D, L - 1),
- {T2, L2} = t_from_form(Termination, TypeNames, ET, S, MR, V, D, L1),
- {t_maybe_improper_list(T1, T2), L2};
-t_from_form({type, _L, product, Elements}, TypeNames, ET, S, MR, V, D, L) ->
- {Lst, L1} = list_from_form(Elements, TypeNames, ET, S, MR, V, D - 1, L),
- {t_product(Lst), L1};
-t_from_form({type, _L, range, [From, To]} = Type,
- _TypeNames, _ET, _S, _MR, _V, _D, L) ->
+from_form({type, _L, bitstring, []}, _S, _D, L, C) ->
+ {t_bitstr(), L, C};
+from_form({type, _L, bool, []}, _S, _D, L, C) ->
+ {t_boolean(), L, C}; % XXX: Temporarily
+from_form({type, _L, boolean, []}, _S, _D, L, C) ->
+ {t_boolean(), L, C};
+from_form({type, _L, byte, []}, _S, _D, L, C) ->
+ {t_byte(), L, C};
+from_form({type, _L, char, []}, _S, _D, L, C) ->
+ {t_char(), L, C};
+from_form({type, _L, float, []}, _S, _D, L, C) ->
+ {t_float(), L, C};
+from_form({type, _L, function, []}, _S, _D, L, C) ->
+ {t_fun(), L, C};
+from_form({type, _L, 'fun', []}, _S, _D, L, C) ->
+ {t_fun(), L, C};
+from_form({type, _L, 'fun', [{type, _, any}, Range]}, S, D, L, C) ->
+ {T, L1, C1} = from_form(Range, S, D - 1, L - 1, C),
+ {t_fun(T), L1, C1};
+from_form({type, _L, 'fun', [{type, _, product, Domain}, Range]},
+ S, D, L, C) ->
+ {Dom1, L1, C1} = list_from_form(Domain, S, D, L, C),
+ {Ran1, L2, C2} = from_form(Range, S, D, L1, C1),
+ {t_fun(Dom1, Ran1), L2, C2};
+from_form({type, _L, identifier, []}, _S, _D, L, C) ->
+ {t_identifier(), L, C};
+from_form({type, _L, integer, []}, _S, _D, L, C) ->
+ {t_integer(), L, C};
+from_form({type, _L, iodata, []}, _S, _D, L, C) ->
+ {t_iodata(), L, C};
+from_form({type, _L, iolist, []}, _S, _D, L, C) ->
+ {t_iolist(), L, C};
+from_form({type, _L, list, []}, _S, _D, L, C) ->
+ {t_list(), L, C};
+from_form({type, _L, list, [Type]}, S, D, L, C) ->
+ {T, L1, C1} = from_form(Type, S, D - 1, L - 1, C),
+ {t_list(T), L1, C1};
+from_form({type, _L, map, any}, S, D, L, C) ->
+ builtin_type(map, t_map(), S, D, L, C);
+from_form({type, _L, map, List}, S, D0, L, C) ->
+ {Pairs1, L5, C5} =
+ fun PairsFromForm(_, L1, C1) when L1 =< 0 -> {[{?any,?opt,?any}], L1, C1};
+ PairsFromForm([], L1, C1) -> {[], L1, C1};
+ PairsFromForm([{type, _, Oper, [KF, VF]}|T], L1, C1) ->
+ D = D0 - 1,
+ {Key, L2, C2} = from_form(KF, S, D, L1, C1),
+ {Val, L3, C3} = from_form(VF, S, D, L2, C2),
+ {Pairs0, L4, C4} = PairsFromForm(T, L3 - 1, C3),
+ case Oper of
+ map_field_assoc -> {[{Key,?opt, Val}|Pairs0], L4, C4};
+ map_field_exact -> {[{Key,?mand,Val}|Pairs0], L4, C4}
+ end
+ end(List, L, C),
+ try
+ {Pairs, DefK, DefV} = map_from_form(Pairs1, [], [], [], ?none, ?none),
+ {t_map(Pairs, DefK, DefV), L5, C5}
+ catch none -> {t_none(), L5, C5}
+ end;
+from_form({type, _L, mfa, []}, _S, _D, L, C) ->
+ {t_mfa(), L, C};
+from_form({type, _L, module, []}, _S, _D, L, C) ->
+ {t_module(), L, C};
+from_form({type, _L, nil, []}, _S, _D, L, C) ->
+ {t_nil(), L, C};
+from_form({type, _L, neg_integer, []}, _S, _D, L, C) ->
+ {t_neg_integer(), L, C};
+from_form({type, _L, non_neg_integer, []}, _S, _D, L, C) ->
+ {t_non_neg_integer(), L, C};
+from_form({type, _L, no_return, []}, _S, _D, L, C) ->
+ {t_unit(), L, C};
+from_form({type, _L, node, []}, _S, _D, L, C) ->
+ {t_node(), L, C};
+from_form({type, _L, none, []}, _S, _D, L, C) ->
+ {t_none(), L, C};
+from_form({type, _L, nonempty_list, []}, _S, _D, L, C) ->
+ {t_nonempty_list(), L, C};
+from_form({type, _L, nonempty_list, [Type]}, S, D, L, C) ->
+ {T, L1, C1} = from_form(Type, S, D, L - 1, C),
+ {t_nonempty_list(T), L1, C1};
+from_form({type, _L, nonempty_improper_list, [Cont, Term]}, S, D, L, C) ->
+ {T1, L1, C1} = from_form(Cont, S, D, L - 1, C),
+ {T2, L2, C2} = from_form(Term, S, D, L1, C1),
+ {t_cons(T1, T2), L2, C2};
+from_form({type, _L, nonempty_maybe_improper_list, []}, _S, _D, L, C) ->
+ {t_cons(?any, ?any), L, C};
+from_form({type, _L, nonempty_maybe_improper_list, [Cont, Term]},
+ S, D, L, C) ->
+ {T1, L1, C1} = from_form(Cont, S, D, L - 1, C),
+ {T2, L2, C2} = from_form(Term, S, D, L1, C1),
+ {t_cons(T1, T2), L2, C2};
+from_form({type, _L, nonempty_string, []}, _S, _D, L, C) ->
+ {t_nonempty_string(), L, C};
+from_form({type, _L, number, []}, _S, _D, L, C) ->
+ {t_number(), L, C};
+from_form({type, _L, pid, []}, _S, _D, L, C) ->
+ {t_pid(), L, C};
+from_form({type, _L, port, []}, _S, _D, L, C) ->
+ {t_port(), L, C};
+from_form({type, _L, pos_integer, []}, _S, _D, L, C) ->
+ {t_pos_integer(), L, C};
+from_form({type, _L, maybe_improper_list, []}, _S, _D, L, C) ->
+ {t_maybe_improper_list(), L, C};
+from_form({type, _L, maybe_improper_list, [Content, Termination]},
+ S, D, L, C) ->
+ {T1, L1, C1} = from_form(Content, S, D, L - 1, C),
+ {T2, L2, C2} = from_form(Termination, S, D, L1, C1),
+ {t_maybe_improper_list(T1, T2), L2, C2};
+from_form({type, _L, product, Elements}, S, D, L, C) ->
+ {Lst, L1, C1} = list_from_form(Elements, S, D - 1, L, C),
+ {t_product(Lst), L1, C1};
+from_form({type, _L, range, [From, To]} = Type, _S, _D, L, C) ->
case {erl_eval:partial_eval(From), erl_eval:partial_eval(To)} of
{{integer, _, FromVal}, {integer, _, ToVal}} ->
- {t_from_range(FromVal, ToVal), L};
+ {t_from_range(FromVal, ToVal), L, C};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Type])})
end;
-t_from_form({type, _L, record, [Name|Fields]}, TypeNames, ET, S, MR, V, D, L) ->
- record_from_form(Name, Fields, TypeNames, ET, S, MR, V, D, L);
-t_from_form({type, _L, reference, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_reference(), L};
-t_from_form({type, _L, string, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_string(), L};
-t_from_form({type, _L, term, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_any(), L};
-t_from_form({type, _L, timeout, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_timeout(), L};
-t_from_form({type, _L, tuple, any}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_tuple(), L};
-t_from_form({type, _L, tuple, Args}, TypeNames, ET, S, MR, V, D, L) ->
- {Lst, L1} = list_from_form(Args, TypeNames, ET, S, MR, V, D - 1, L),
- {t_tuple(Lst), L1};
-t_from_form({type, _L, union, Args}, TypeNames, ET, S, MR, V, D, L) ->
- {Lst, L1} = list_from_form(Args, TypeNames, ET, S, MR, V, D, L),
- {t_sup(Lst), L1};
-t_from_form({user_type, _L, Name, Args}, TypeNames, ET, S, MR, V, D, L) ->
- type_from_form(Name, Args, TypeNames, ET, S, MR, V, D, L);
-t_from_form({type, _L, Name, Args}, TypeNames, ET, S, MR, V, D, L) ->
+from_form({type, _L, record, [Name|Fields]}, S, D, L, C) ->
+ record_from_form(Name, Fields, S, D, L, C);
+from_form({type, _L, reference, []}, _S, _D, L, C) ->
+ {t_reference(), L, C};
+from_form({type, _L, string, []}, _S, _D, L, C) ->
+ {t_string(), L, C};
+from_form({type, _L, term, []}, _S, _D, L, C) ->
+ {t_any(), L, C};
+from_form({type, _L, timeout, []}, _S, _D, L, C) ->
+ {t_timeout(), L, C};
+from_form({type, _L, tuple, any}, _S, _D, L, C) ->
+ {t_tuple(), L, C};
+from_form({type, _L, tuple, Args}, S, D, L, C) ->
+ {Lst, L1, C1} = list_from_form(Args, S, D - 1, L, C),
+ {t_tuple(Lst), L1, C1};
+from_form({type, _L, union, Args}, S, D, L, C) ->
+ {Lst, L1, C1} = list_from_form(Args, S, D, L, C),
+ {t_sup(Lst), L1, C1};
+from_form({user_type, _L, Name, Args}, S, D, L, C) ->
+ type_from_form(Name, Args, S, D, L, C);
+from_form({type, _L, Name, Args}, S, D, L, C) ->
%% Compatibility: modules compiled before Erlang/OTP 18.0.
- type_from_form(Name, Args, TypeNames, ET, S, MR, V, D, L);
-t_from_form({opaque, _L, Name, {Mod, Args, Rep}}, _TypeNames,
- _ET, _S, _MR, _V, _D, L) ->
+ type_from_form(Name, Args, S, D, L, C);
+from_form({opaque, _L, Name, {Mod, Args, Rep}}, _S, _D, L, C) ->
%% XXX. To be removed.
- {t_opaque(Mod, Name, Args, Rep), L}.
+ {t_opaque(Mod, Name, Args, Rep), L, C}.
-builtin_type(Name, Type, TypeNames, ET, Site, MR, V, D, L) ->
+builtin_type(Name, Type, S, D, L, C) ->
+ #from_form{site = Site, mrecs = MR} = S,
M = site_module(Site),
case dict:find(M, MR) of
{ok, R} ->
case lookup_type(Name, 0, R) of
{_, {{_M, _FL, _F, _A}, _T}} ->
- type_from_form(Name, [], TypeNames, ET, Site, MR, V, D, L);
+ type_from_form(Name, [], S, D, L, C);
error ->
- {Type, L}
+ {Type, L, C}
end;
error ->
- {Type, L}
+ {Type, L, C}
end.
-type_from_form(Name, Args, TypeNames, ET, Site0, MR, V, D, L) ->
+type_from_form(Name, Args, S, D, L, C) ->
+ #from_form{site = Site, mrecs = MR, tnames = TypeNames} = S,
ArgsLen = length(Args),
- Module = site_module(Site0),
- {ok, R} = dict:find(Module, MR),
+ Module = site_module(Site),
TypeName = {type, {Module, Name, ArgsLen}},
+ case can_unfold_more(TypeName, TypeNames) of
+ true ->
+ {ok, R} = dict:find(Module, MR),
+ type_from_form1(Name, Args, ArgsLen, R, TypeName, TypeNames,
+ S, D, L, C);
+ false ->
+ {t_any(), L, C}
+ end.
+
+type_from_form1(Name, Args, ArgsLen, R, TypeName, TypeNames, S, D, L, C) ->
case lookup_type(Name, ArgsLen, R) of
- {type, {{Module, _FileName, Form, ArgNames}, _Type}} ->
- case can_unfold_more(TypeName, TypeNames) of
- true ->
- NewTypeNames = [TypeName|TypeNames],
- {ArgTypes, L1} =
- list_from_form(Args, TypeNames, ET, Site0, MR, V, D, L),
- List = lists:zip(ArgNames, ArgTypes),
- TmpV = dict:from_list(List),
- Site = TypeName,
- t_from_form(Form, NewTypeNames, ET, Site, MR, TmpV, D, L1);
- false ->
- {t_any(), L}
- end;
- {opaque, {{Module, _FileName, Form, ArgNames}, Type}} ->
- case can_unfold_more(TypeName, TypeNames) of
- true ->
- NewTypeNames = [TypeName|TypeNames],
- {ArgTypes, L1} =
- list_from_form(Args, NewTypeNames, ET, Site0, MR, V, D, L),
+ {Tag, {{Module, _FileName, Form, ArgNames}, Type}} ->
+ NewTypeNames = [TypeName|TypeNames],
+ S1 = S#from_form{tnames = NewTypeNames},
+ {ArgTypes, L1, C1} = list_from_form(Args, S1, D, L, C),
+ CKey = cache_key(Module, Name, ArgTypes, TypeNames, D),
+ case cache_find(CKey, C) of
+ {CachedType, DeltaL} ->
+ {CachedType, L1 - DeltaL, C};
+ error ->
List = lists:zip(ArgNames, ArgTypes),
- TmpV = dict:from_list(List),
- Site = TypeName,
- {Rep, L2} =
- t_from_form(Form, NewTypeNames, ET, Site, MR, TmpV, D, L1),
- Rep1 = choose_opaque_type(Rep, Type),
- Rep2 = case cannot_have_opaque(Rep1, TypeName, TypeNames) of
- true -> Rep1;
- false ->
- ArgTypes2 = subst_all_vars_to_any_list(ArgTypes),
- t_opaque(Module, Name, ArgTypes2, Rep1)
- end,
- {Rep2, L2};
- false -> {t_any(), L}
+ TmpV = maps:from_list(List),
+ S2 = S1#from_form{site = TypeName, vtab = TmpV},
+ Fun = fun(DD, LL) -> from_form(Form, S2, DD, LL, C1) end,
+ {NewType, L3, C3} =
+ case Tag of
+ type ->
+ recur_limit(Fun, D, L1, TypeName, TypeNames);
+ opaque ->
+ {Rep, L2, C2} = recur_limit(Fun, D, L1, TypeName, TypeNames),
+ Rep1 = choose_opaque_type(Rep, Type),
+ Rep2 = case cannot_have_opaque(Rep1, TypeName, TypeNames) of
+ true -> Rep1;
+ false ->
+ ArgTypes2 = subst_all_vars_to_any_list(ArgTypes),
+ t_opaque(Module, Name, ArgTypes2, Rep1)
+ end,
+ {Rep2, L2, C2}
+ end,
+ C4 = cache_put(CKey, NewType, L1 - L3, C3),
+ {NewType, L3, C4}
end;
error ->
- Msg = io_lib:format("Unable to find type ~w/~w\n", [Name, ArgsLen]),
+ Msg = io_lib:format("Unable to find type ~w/~w\n",
+ [Name, ArgsLen]),
throw({error, Msg})
end.
-remote_from_form(RemMod, Name, Args, TypeNames, ET, S, MR, V, D, L) ->
+remote_from_form(RemMod, Name, Args, S, D, L, C) ->
+ #from_form{xtypes = ET, mrecs = MR, tnames = TypeNames} = S,
if
ET =:= replace_by_none ->
- {t_none(), L};
+ {t_none(), L, C};
true ->
ArgsLen = length(Args),
MFA = {RemMod, Name, ArgsLen},
case dict:find(RemMod, MR) of
error ->
self() ! {self(), ext_types, MFA},
- {t_any(), L};
+ {t_any(), L, C};
{ok, RemDict} ->
- RemType = {type, MFA},
case sets:is_element(MFA, ET) of
true ->
- case lookup_type(Name, ArgsLen, RemDict) of
- {type, {{_Mod, _FileLine, Form, ArgNames}, _Type}} ->
- case can_unfold_more(RemType, TypeNames) of
- true ->
- NewTypeNames = [RemType|TypeNames],
- {ArgTypes, L1} = list_from_form(Args, TypeNames,
- ET, S, MR, V, D, L),
- List = lists:zip(ArgNames, ArgTypes),
- TmpVarDict = dict:from_list(List),
- Site = RemType,
- t_from_form(Form, NewTypeNames, ET,
- Site, MR, TmpVarDict, D, L1);
- false ->
- {t_any(), L}
- end;
- {opaque, {{Mod, _FileLine, Form, ArgNames}, Type}} ->
- case can_unfold_more(RemType, TypeNames) of
- true ->
- NewTypeNames = [RemType|TypeNames],
- {ArgTypes, L1} = list_from_form(Args, NewTypeNames,
- ET, S, MR, V, D, L),
- List = lists:zip(ArgNames, ArgTypes),
- TmpVarDict = dict:from_list(List),
- Site = RemType,
- {NewRep, L2} =
- t_from_form(Form, NewTypeNames, ET, Site, MR,
- TmpVarDict, D, L1),
- NewRep1 = choose_opaque_type(NewRep, Type),
- NewRep2 =
- case
- cannot_have_opaque(NewRep1, RemType, TypeNames)
- of
- true -> NewRep1;
- false ->
- ArgTypes2 = subst_all_vars_to_any_list(ArgTypes),
- t_opaque(Mod, Name, ArgTypes2, NewRep1)
- end,
- {NewRep2, L2};
- false ->
- {t_any(), L}
- end;
- error ->
- Msg = io_lib:format("Unable to find remote type ~w:~w()\n",
- [RemMod, Name]),
- throw({error, Msg})
+ RemType = {type, MFA},
+ case can_unfold_more(RemType, TypeNames) of
+ true ->
+ remote_from_form1(RemMod, Name, Args, ArgsLen, RemDict,
+ RemType, TypeNames, S, D, L, C);
+ false ->
+ {t_any(), L, C}
end;
false ->
self() ! {self(), ext_types, {RemMod, Name, ArgsLen}},
- {t_any(), L}
+ {t_any(), L, C}
end
end
end.
+remote_from_form1(RemMod, Name, Args, ArgsLen, RemDict, RemType, TypeNames,
+ S, D, L, C) ->
+ case lookup_type(Name, ArgsLen, RemDict) of
+ {Tag, {{Mod, _FileLine, Form, ArgNames}, Type}} ->
+ NewTypeNames = [RemType|TypeNames],
+ S1 = S#from_form{tnames = NewTypeNames},
+ {ArgTypes, L1, C1} = list_from_form(Args, S1, D, L, C),
+ CKey = cache_key(RemMod, Name, ArgTypes, TypeNames, D),
+ %% case error of
+ case cache_find(CKey, C) of
+ {CachedType, DeltaL} ->
+ {CachedType, L - DeltaL, C};
+ error ->
+ List = lists:zip(ArgNames, ArgTypes),
+ TmpVarTab = maps:from_list(List),
+ S2 = S1#from_form{site = RemType, vtab = TmpVarTab},
+ Fun = fun(DD, LL) -> from_form(Form, S2, DD, LL, C1) end,
+ {NewType, L3, C3} =
+ case Tag of
+ type ->
+ recur_limit(Fun, D, L1, RemType, TypeNames);
+ opaque ->
+ {NewRep, L2, C2} = recur_limit(Fun, D, L1, RemType, TypeNames),
+ NewRep1 = choose_opaque_type(NewRep, Type),
+ NewRep2 =
+ case cannot_have_opaque(NewRep1, RemType, TypeNames) of
+ true -> NewRep1;
+ false ->
+ ArgTypes2 = subst_all_vars_to_any_list(ArgTypes),
+ t_opaque(Mod, Name, ArgTypes2, NewRep1)
+ end,
+ {NewRep2, L2, C2}
+ end,
+ C4 = cache_put(CKey, NewType, L1 - L3, C3),
+ {NewType, L3, C4}
+ end;
+ error ->
+ Msg = io_lib:format("Unable to find remote type ~w:~w()\n",
+ [RemMod, Name]),
+ throw({error, Msg})
+ end.
+
subst_all_vars_to_any_list(Types) ->
[subst_all_vars_to_any(Type) || Type <- Types].
@@ -4461,63 +4859,67 @@ choose_opaque_type(Type, DeclType) ->
false -> DeclType
end.
-record_from_form({atom, _, Name}, ModFields, TypeNames, ET, S, MR, V, D, L) ->
- case can_unfold_more({record, Name}, TypeNames) of
+record_from_form({atom, _, Name}, ModFields, S, D0, L0, C) ->
+ #from_form{site = Site, mrecs = MR, tnames = TypeNames} = S,
+ RecordType = {record, Name},
+ case can_unfold_more(RecordType, TypeNames) of
true ->
- M = site_module(S),
+ M = site_module(Site),
{ok, R} = dict:find(M, MR),
case lookup_record(Name, R) of
{ok, DeclFields} ->
- NewTypeNames = [{record, Name}|TypeNames],
- S1 = {record, {M, Name, length(DeclFields)}},
- {GetModRec, L1} = get_mod_record(ModFields, DeclFields,
- NewTypeNames, ET, S1, MR, V, D, L),
- case GetModRec of
- {error, FieldName} ->
- throw({error, io_lib:format("Illegal declaration of #~w{~w}\n",
- [Name, FieldName])});
- {ok, NewFields} ->
- {NewFields1, L2} =
- fields_from_form(NewFields, NewTypeNames, ET, S1, MR,
- dict:new(), D, L1),
- Rec = t_tuple(
- [t_atom(Name)|[Type
- || {_FieldName, Type} <- NewFields1]]),
- {Rec, L2}
- end;
+ NewTypeNames = [RecordType|TypeNames],
+ Site1 = {record, {M, Name, length(DeclFields)}},
+ S1 = S#from_form{site = Site1, tnames = NewTypeNames},
+ Fun = fun(D, L) ->
+ {GetModRec, L1, C1} =
+ get_mod_record(ModFields, DeclFields, S1, D, L, C),
+ case GetModRec of
+ {error, FieldName} ->
+ throw({error,
+ io_lib:format("Illegal declaration of #~w{~w}\n",
+ [Name, FieldName])});
+ {ok, NewFields} ->
+ S2 = S1#from_form{vtab = var_table__new()},
+ {NewFields1, L2, C2} =
+ fields_from_form(NewFields, S2, D, L1, C1),
+ Rec = t_tuple(
+ [t_atom(Name)|[Type
+ || {_FieldName, Type} <- NewFields1]]),
+ {Rec, L2, C2}
+ end
+ end,
+ recur_limit(Fun, D0, L0, RecordType, TypeNames);
error ->
throw({error, io_lib:format("Unknown record #~w{}\n", [Name])})
end;
false ->
- {t_any(), L}
+ {t_any(), L0, C}
end.
-get_mod_record([], DeclFields, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {{ok, DeclFields}, L};
-get_mod_record(ModFields, DeclFields, TypeNames, ET, S, MR, V, D, L) ->
+get_mod_record([], DeclFields, _S, _D, L, C) ->
+ {{ok, DeclFields}, L, C};
+get_mod_record(ModFields, DeclFields, S, D, L, C) ->
DeclFieldsDict = lists:keysort(1, DeclFields),
- {ModFieldsDict, L1} =
- build_field_dict(ModFields, TypeNames, ET, S, MR, V, D, L),
+ {ModFieldsDict, L1, C1} = build_field_dict(ModFields, S, D, L, C),
case get_mod_record_types(DeclFieldsDict, ModFieldsDict, []) of
- {error, _FieldName} = Error -> {Error, L1};
+ {error, _FieldName} = Error -> {Error, L1, C1};
{ok, FinalKeyDict} ->
Fields = [lists:keyfind(FieldName, 1, FinalKeyDict)
|| {FieldName, _, _} <- DeclFields],
- {{ok, Fields}, L1}
+ {{ok, Fields}, L1, C1}
end.
-build_field_dict(FieldTypes, TypeNames, ET, S, MR, V, D, L) ->
- build_field_dict(FieldTypes, TypeNames, ET, S, MR, V, D, L, []).
+build_field_dict(FieldTypes, S, D, L, C) ->
+ build_field_dict(FieldTypes, S, D, L, C, []).
build_field_dict([{type, _, field_type, [{atom, _, Name}, Type]}|Left],
- TypeNames, ET, S, MR, V, D, L, Acc) ->
- {T, L1} = t_from_form(Type, TypeNames, ET, S, MR, V, D, L - 1),
+ S, D, L, C, Acc) ->
+ {T, L1, C1} = from_form(Type, S, D, L - 1, C),
NewAcc = [{Name, Type, T}|Acc],
- {Dict, L2} =
- build_field_dict(Left, TypeNames, ET, S, MR, V, D, L1, NewAcc),
- {Dict, L2};
-build_field_dict([], _TypeNames, _ET, _S, _MR, _V, _D, L, Acc) ->
- {lists:keysort(1, Acc), L}.
+ build_field_dict(Left, S, D, L1, C1, NewAcc);
+build_field_dict([], _S, _D, L, C, Acc) ->
+ {lists:keysort(1, Acc), L, C}.
get_mod_record_types([{FieldName, _Abstr, _DeclType}|Left1],
[{FieldName, TypeForm, ModType}|Left2],
@@ -4535,95 +4937,198 @@ get_mod_record_types(_, [{FieldName2, _FormType, _ModType}|_], _Acc) ->
%% It is important to create a limited version of the record type
%% since nested record types can otherwise easily result in huge
%% terms.
-fields_from_form([], _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {[], L};
-fields_from_form([{Name, Abstr, _Type}|Tail], TypeNames, ET, S, MR,
- V, D, L) ->
- {T, L1} = t_from_form(Abstr, TypeNames, ET, S, MR, V, D, L),
- {F, L2} = fields_from_form(Tail, TypeNames, ET, S, MR, V, D, L1),
- {[{Name, T}|F], L2}.
-
-list_from_form([], _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {[], L};
-list_from_form([H|Tail], TypeNames, ET, S, MR, V, D, L) ->
- {H1, L1} = t_from_form(H, TypeNames, ET, S, MR, V, D, L - 1),
- {T1, L2} = list_from_form(Tail, TypeNames, ET, S, MR, V, D, L1),
- {[H1|T1], L2}.
+fields_from_form([], _S, _D, L, C) ->
+ {[], L, C};
+fields_from_form([{Name, Abstr, _Type}|Tail], S, D, L, C) ->
+ {T, L1, C1} = from_form(Abstr, S, D, L, C),
+ {F, L2, C2} = fields_from_form(Tail, S, D, L1, C1),
+ {[{Name, T}|F], L2, C2}.
+
+list_from_form([], _S, _D, L, C) ->
+ {[], L, C};
+list_from_form([H|Tail], S, D, L, C) ->
+ {H1, L1, C1} = from_form(H, S, D, L - 1, C),
+ {T1, L2, C2} = list_from_form(Tail, S, D, L1, C1),
+ {[H1|T1], L2, C2}.
+
+%% Sorts, combines non-singleton pairs, and applies precendence and
+%% mandatoriness rules.
+map_from_form([], ShdwPs, MKs, Pairs, DefK, DefV) ->
+ verify_possible(MKs, ShdwPs),
+ {promote_to_mand(MKs, Pairs), DefK, DefV};
+map_from_form([{SKey,MNess,Val}|SPairs], ShdwPs0, MKs0, Pairs0, DefK0, DefV0) ->
+ Key = lists:foldl(fun({K,_},S)->t_subtract(S,K)end, SKey, ShdwPs0),
+ ShdwPs = case Key of ?none -> ShdwPs0; _ -> [{Key,Val}|ShdwPs0] end,
+ MKs = case MNess of ?mand -> [SKey|MKs0]; ?opt -> MKs0 end,
+ if MNess =:= ?mand, SKey =:= ?none -> throw(none);
+ true -> ok
+ end,
+ {Pairs, DefK, DefV} =
+ case is_singleton_type(Key) of
+ true ->
+ MNess1 = case Val =:= ?none of true -> ?opt; false -> MNess end,
+ {mapdict_insert({Key,MNess1,Val}, Pairs0), DefK0, DefV0};
+ false ->
+ case Key =:= ?none orelse Val =:= ?none of
+ true -> {Pairs0, DefK0, DefV0};
+ false -> {Pairs0, t_sup(DefK0, Key), t_sup(DefV0, Val)}
+ end
+ end,
+ map_from_form(SPairs, ShdwPs, MKs, Pairs, DefK, DefV).
--spec t_check_record_fields(parse_form(), sets:set(mfa()), site(),
- mod_records()) -> ok.
+%% Verifies that all mandatory keys are possible, throws 'none' otherwise
+verify_possible(MKs, ShdwPs) ->
+ lists:foreach(fun(M) -> verify_possible_1(M, ShdwPs) end, MKs).
+
+verify_possible_1(M, ShdwPs) ->
+ case lists:any(fun({K,_}) -> t_inf(M, K) =/= ?none end, ShdwPs) of
+ true -> ok;
+ false -> throw(none)
+ end.
+
+-spec promote_to_mand([erl_type()], t_map_dict()) -> t_map_dict().
-t_check_record_fields(Form, ExpTypes, Site, RecDict) ->
- t_check_record_fields(Form, ExpTypes, Site, RecDict, dict:new()).
+promote_to_mand(_, []) -> [];
+promote_to_mand(MKs, [E={K,_,V}|T]) ->
+ [case lists:any(fun(M) -> t_is_equal(K,M) end, MKs) of
+ true -> {K, ?mand, V};
+ false -> E
+ end|promote_to_mand(MKs, T)].
+
+-define(RECUR_EXPAND_LIMIT, 10).
+-define(RECUR_EXPAND_DEPTH, 2).
+
+%% If more of the limited resources is spent on the non-recursive
+%% forms, more warnings are found. And the analysis is also a bit
+%% faster.
+%%
+%% Setting REC_TYPE_LIMIT to 1 would work also work well.
+
+recur_limit(Fun, D, L, _, _) when L =< ?RECUR_EXPAND_DEPTH,
+ D =< ?RECUR_EXPAND_LIMIT ->
+ Fun(D, L);
+recur_limit(Fun, D, L, TypeName, TypeNames) ->
+ case is_recursive(TypeName, TypeNames) of
+ true ->
+ {T, L1, C1} = Fun(?RECUR_EXPAND_DEPTH, ?RECUR_EXPAND_LIMIT),
+ {T, L - L1, C1};
+ false ->
+ Fun(D, L)
+ end.
-spec t_check_record_fields(parse_form(), sets:set(mfa()), site(),
- mod_records(), var_table()) -> ok.
+ mod_records(), var_table(), cache()) -> cache().
+
+t_check_record_fields(Form, ExpTypes, Site, RecDict, VarTable, Cache) ->
+ State = #from_form{site = Site,
+ xtypes = ExpTypes,
+ mrecs = RecDict,
+ vtab = VarTable,
+ tnames = []},
+ check_record_fields(Form, State, Cache).
+
+-spec check_record_fields(parse_form(), #from_form{}, cache()) -> cache().
%% If there is something wrong with parse_form()
%% throw({error, io_lib:chars()} is called.
-t_check_record_fields({var, _L, _}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({ann_type, _L, [_Var, Type]}, ET, S, MR, V) ->
- t_check_record_fields(Type, ET, S, MR, V);
-t_check_record_fields({paren_type, _L, [Type]}, ET, S, MR, V) ->
- t_check_record_fields(Type, ET, S, MR, V);
-t_check_record_fields({remote_type, _L, [{atom, _, _}, {atom, _, _}, Args]},
- ET, S, MR, V) ->
- list_check_record_fields(Args, ET, S, MR, V);
-t_check_record_fields({atom, _L, _}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({integer, _L, _}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({op, _L, _Op, _Arg}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({op, _L, _Op, _Arg1, _Arg2}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({type, _L, tuple, any}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({type, _L, map, any}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({type, _L, binary, [_Base, _Unit]}, _ET, _S, _MR, _V) ->
- ok;
-t_check_record_fields({type, _L, 'fun', [{type, _, any}, Range]},
- ET, S, MR, V) ->
- t_check_record_fields(Range, ET, S, MR, V);
-t_check_record_fields({type, _L, range, [_From, _To]}, _ET, _S, _MR, _V) ->
- ok;
-t_check_record_fields({type, _L, record, [Name|Fields]}, ET, S, MR, V) ->
- check_record(Name, Fields, ET, S, MR, V);
-t_check_record_fields({type, _L, _, Args}, ET, S, MR, V) ->
- list_check_record_fields(Args, ET, S, MR, V);
-t_check_record_fields({user_type, _L, _Name, Args}, ET, S, MR, V) ->
- list_check_record_fields(Args, ET, S, MR, V).
-
-check_record({atom, _, Name}, ModFields, ET, Site, MR, V) ->
+check_record_fields({var, _L, _}, _S, C) -> C;
+check_record_fields({ann_type, _L, [_Var, Type]}, S, C) ->
+ check_record_fields(Type, S, C);
+check_record_fields({paren_type, _L, [Type]}, S, C) ->
+ check_record_fields(Type, S, C);
+check_record_fields({remote_type, _L, [{atom, _, _}, {atom, _, _}, Args]},
+ S, C) ->
+ list_check_record_fields(Args, S, C);
+check_record_fields({atom, _L, _}, _S, C) -> C;
+check_record_fields({integer, _L, _}, _S, C) -> C;
+check_record_fields({op, _L, _Op, _Arg}, _S, C) -> C;
+check_record_fields({op, _L, _Op, _Arg1, _Arg2}, _S, C) -> C;
+check_record_fields({type, _L, tuple, any}, _S, C) -> C;
+check_record_fields({type, _L, map, any}, _S, C) -> C;
+check_record_fields({type, _L, binary, [_Base, _Unit]}, _S, C) -> C;
+check_record_fields({type, _L, 'fun', [{type, _, any}, Range]}, S, C) ->
+ check_record_fields(Range, S, C);
+check_record_fields({type, _L, range, [_From, _To]}, _S, C) -> C;
+check_record_fields({type, _L, record, [Name|Fields]}, S, C) ->
+ check_record(Name, Fields, S, C);
+check_record_fields({type, _L, _, Args}, S, C) ->
+ list_check_record_fields(Args, S, C);
+check_record_fields({user_type, _L, _Name, Args}, S, C) ->
+ list_check_record_fields(Args, S, C).
+
+check_record({atom, _, Name}, ModFields, S, C) ->
+ #from_form{site = Site, mrecs = MR} = S,
M = site_module(Site),
{ok, R} = dict:find(M, MR),
{ok, DeclFields} = lookup_record(Name, R),
- case check_fields(Name, ModFields, DeclFields, ET, Site, MR, V) of
+ case check_fields(Name, ModFields, DeclFields, S, C) of
{error, FieldName} ->
throw({error, io_lib:format("Illegal declaration of #~w{~w}\n",
[Name, FieldName])});
- ok -> ok
+ C1 -> C1
end.
check_fields(RecName, [{type, _, field_type, [{atom, _, Name}, Abstr]}|Left],
- DeclFields, ET, Site0, MR, V) ->
+ DeclFields, S, C) ->
+ #from_form{site = Site0, xtypes = ET, mrecs = MR, vtab = V} = S,
M = site_module(Site0),
Site = {record, {M, RecName, length(DeclFields)}},
- Type = t_from_form(Abstr, ET, Site, MR, V),
+ {Type, C1} = t_from_form(Abstr, ET, Site, MR, V, C),
{Name, _, DeclType} = lists:keyfind(Name, 1, DeclFields),
TypeNoVars = subst_all_vars_to_any(Type),
case t_is_subtype(TypeNoVars, DeclType) of
false -> {error, Name};
- true -> check_fields(RecName, Left, DeclFields, ET, Site0, MR, V)
+ true -> check_fields(RecName, Left, DeclFields, S, C1)
end;
-check_fields(_RecName, [], _Decl, _ET, _Site, _MR, _V) ->
- ok.
+check_fields(_RecName, [], _Decl, _S, C) ->
+ C.
-list_check_record_fields([], _ET, _S, _MR, _V) ->
- ok;
-list_check_record_fields([H|Tail], ET, S, MR, V) ->
- ok = t_check_record_fields(H, ET, S, MR, V),
- list_check_record_fields(Tail, ET, S, MR, V).
+list_check_record_fields([], _S, C) ->
+ C;
+list_check_record_fields([H|Tail], S, C) ->
+ C1 = check_record_fields(H, S, C),
+ list_check_record_fields(Tail, S, C1).
site_module({_, {Module, _, _}}) ->
Module.
+-spec cache__new() -> cache().
+
+cache__new() ->
+ maps:new().
+
+-spec cache_key(module(), atom(), [erl_type()],
+ type_names(), expand_depth()) -> cache_key().
+
+%% If TypeNames is left out from the key, the cache is smaller, and
+%% the form-to-type translation is faster. But it would be a shame if,
+%% for example, any() is used, where a more complex type should be
+%% used. There is also a slight risk of creating unnecessarily big
+%% types.
+
+cache_key(Module, Name, ArgTypes, TypeNames, D) ->
+ {Module, Name, D, ArgTypes, TypeNames}.
+
+-spec cache_find(cache_key(), cache()) ->
+ {erl_type(), expand_limit()} | 'error'.
+
+cache_find(Key, Cache) ->
+ case maps:find(Key, Cache) of
+ {ok, Value} ->
+ Value;
+ error ->
+ error
+ end.
+
+-spec cache_put(cache_key(), erl_type(), expand_limit(), cache()) -> cache().
+
+cache_put(_Key, _Type, DeltaL, Cache) when DeltaL < 0 ->
+ %% The type is truncated; do not reuse it.
+ Cache;
+cache_put(Key, Type, DeltaL, Cache) ->
+ maps:put(Key, {Type, DeltaL}, Cache).
+
-spec t_var_names([erl_type()]) -> [atom()].
t_var_names([{var, _, Name}|L]) when L =/= '_' ->
@@ -4682,8 +5187,13 @@ t_form_to_string({type, _L, iodata, []}) -> "iodata()";
t_form_to_string({type, _L, iolist, []}) -> "iolist()";
t_form_to_string({type, _L, list, [Type]}) ->
"[" ++ t_form_to_string(Type) ++ "]";
-t_form_to_string({type, _L, map, _}) ->
- "#{}";
+t_form_to_string({type, _L, map, any}) -> "map()";
+t_form_to_string({type, _L, map, Args}) ->
+ "#{" ++ string:join(t_form_to_string_list(Args), ",") ++ "}";
+t_form_to_string({type, _L, map_field_assoc, [Key, Val]}) ->
+ t_form_to_string(Key) ++ "=>" ++ t_form_to_string(Val);
+t_form_to_string({type, _L, map_field_exact, [Key, Val]}) ->
+ t_form_to_string(Key) ++ ":=" ++ t_form_to_string(Val);
t_form_to_string({type, _L, mfa, []}) -> "mfa()";
t_form_to_string({type, _L, module, []}) -> "module()";
t_form_to_string({type, _L, node, []}) -> "node()";
@@ -4717,9 +5227,15 @@ t_form_to_string({type, _L, Name, []} = T) ->
M = mod,
D0 = dict:new(),
MR = dict:from_list([{M, D0}]),
- S = {type, {M,Name,0}},
- {T1, _} =
- t_from_form(T, [], sets:new(), S, MR, D0, _Deep=1000, _ALot=100000),
+ Site = {type, {M,Name,0}},
+ V = var_table__new(),
+ C = cache__new(),
+ State = #from_form{site = Site,
+ xtypes = sets:new(),
+ mrecs = MR,
+ vtab = V,
+ tnames = []},
+ {T1, _, _} = from_form(T, State, _Deep=1000, _ALot=1000000, C),
t_to_string(T1)
catch throw:{error, _} -> atom_to_string(Name) ++ "()"
end;
@@ -4795,6 +5311,7 @@ lookup_record(Tag, Arity, RecDict) when is_atom(Tag) ->
error -> error
end.
+-spec lookup_type(_, _, _) -> {'type' | 'opaque', type_value()} | 'error'.
lookup_type(Name, Arity, RecDict) ->
case dict:find({type, Name, Arity}, RecDict) of
error ->
@@ -4831,24 +5348,83 @@ do_opaque(?opaque(_) = Type, Opaques, Pred) ->
false -> Pred(Type)
end;
do_opaque(?union(List) = Type, Opaques, Pred) ->
- [A,B,F,I,L,N,T,M,O,R,Map] = List,
+ [A,B,F,I,L,N,T,M,O,Map] = List,
if O =:= ?none -> Pred(Type);
true ->
case Opaques =:= 'universe' orelse is_opaque_type(O, Opaques) of
true ->
S = t_opaque_structure(O),
- do_opaque(t_sup([A,B,F,I,L,N,T,M,S,R,Map]), Opaques, Pred);
+ do_opaque(t_sup([A,B,F,I,L,N,T,M,S,Map]), Opaques, Pred);
false -> Pred(Type)
end
end;
do_opaque(Type, _Opaques, Pred) ->
Pred(Type).
-map_keys(?map(Pairs)) ->
- [K || {K, _} <- Pairs].
+map_all_values(?map(Pairs,_,DefV)) ->
+ [DefV|[V || {V, _, _} <- Pairs]].
+
+map_all_keys(?map(Pairs,DefK,_)) ->
+ [DefK|[K || {_, _, K} <- Pairs]].
+
+map_all_types(M) ->
+ map_all_keys(M) ++ map_all_values(M).
+
+%% Tests if a type has exactly one possible value.
+-spec t_is_singleton(erl_type()) -> boolean().
+
+t_is_singleton(Type) ->
+ t_is_singleton(Type, 'universe').
+
+-spec t_is_singleton(erl_type(), opaques()) -> boolean().
+
+t_is_singleton(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_singleton_type/1).
+
+%% Incomplete; not all representable singleton types are included.
+is_singleton_type(?nil) -> true;
+is_singleton_type(?atom(?any)) -> false;
+is_singleton_type(?atom(Set)) ->
+ ordsets:size(Set) =:= 1;
+is_singleton_type(?int_range(V, V)) -> true;
+is_singleton_type(?int_set(Set)) ->
+ ordsets:size(Set) =:= 1;
+is_singleton_type(?tuple(Types, Arity, _)) when is_integer(Arity) ->
+ lists:all(fun is_singleton_type/1, Types);
+is_singleton_type(?tuple_set([{Arity, [OnlyTuple]}])) when is_integer(Arity) ->
+ is_singleton_type(OnlyTuple);
+is_singleton_type(?map(Pairs, ?none, ?none)) ->
+ lists:all(fun({_,MNess,V}) -> MNess =:= ?mand andalso is_singleton_type(V)
+ end, Pairs);
+is_singleton_type(_) ->
+ false.
+
+%% Returns the only possible value of a singleton type.
+-spec t_singleton_to_term(erl_type(), opaques()) -> term().
-map_values(?map(Pairs)) ->
- [V || {_, V} <- Pairs].
+t_singleton_to_term(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun singleton_type_to_term/1).
+
+singleton_type_to_term(?nil) -> [];
+singleton_type_to_term(?atom(Set)) when Set =/= ?any ->
+ case ordsets:size(Set) of
+ 1 -> hd(ordsets:to_list(Set));
+ _ -> error(badarg)
+ end;
+singleton_type_to_term(?int_range(V, V)) -> V;
+singleton_type_to_term(?int_set(Set)) ->
+ case ordsets:size(Set) of
+ 1 -> hd(ordsets:to_list(Set));
+ _ -> error(badarg)
+ end;
+singleton_type_to_term(?tuple(Types, Arity, _)) when is_integer(Arity) ->
+ lists:map(fun singleton_type_to_term/1, Types);
+singleton_type_to_term(?tuple_set([{Arity, [OnlyTuple]}]))
+ when is_integer(Arity) ->
+ singleton_type_to_term(OnlyTuple);
+singleton_type_to_term(?map(Pairs, ?none, ?none)) ->
+ maps:from_list([{singleton_type_to_term(K), singleton_type_to_term(V)}
+ || {K,?mand,V} <- Pairs]).
%% -----------------------------------
%% Set
@@ -4871,10 +5447,6 @@ set_union(S1, S2) ->
_ -> ?any
end.
-set_union_no_limit(?any, _) -> ?any;
-set_union_no_limit(_, ?any) -> ?any;
-set_union_no_limit(S1, S2) -> ordsets:union(S1, S2).
-
%% The intersection and subtraction can return ?none.
%% This should always be handled right away since ?none is not a valid set.
%% However, ?any is considered a valid set.
@@ -4988,6 +5560,17 @@ family(L) ->
sofs:to_external(F).
%%=============================================================================
+%%
+%% Interface functions for abstract data types defined in this module
+%%
+%%=============================================================================
+
+-spec var_table__new() -> var_table().
+
+var_table__new() ->
+ maps:new().
+
+%%=============================================================================
%% Consistency-testing function(s) below
%%=============================================================================
diff --git a/lib/hipe/doc/Makefile b/lib/hipe/doc/Makefile
index 822f8f5d03..1015ca78eb 100644
--- a/lib/hipe/doc/Makefile
+++ b/lib/hipe/doc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2012. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/hipe/doc/src/Makefile b/lib/hipe/doc/src/Makefile
index 25f80ebafb..a5edb80381 100644
--- a/lib/hipe/doc/src/Makefile
+++ b/lib/hipe/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2012. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/hipe/doc/src/book.xml b/lib/hipe/doc/src/book.xml
index bd912dd760..7c594f12ad 100644
--- a/lib/hipe/doc/src/book.xml
+++ b/lib/hipe/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/hipe/doc/src/hipe_app.xml b/lib/hipe/doc/src/hipe_app.xml
index bf4bdbb3b3..e489d155c3 100644
--- a/lib/hipe/doc/src/hipe_app.xml
+++ b/lib/hipe/doc/src/hipe_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/hipe/doc/src/notes.xml b/lib/hipe/doc/src/notes.xml
index 761b4d9f90..e2a1524be6 100644
--- a/lib/hipe/doc/src/notes.xml
+++ b/lib/hipe/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,46 @@
</header>
<p>This document describes the changes made to HiPE.</p>
+<section><title>Hipe 3.15.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ HiPE compiler crashed, during compilation, in some cases
+ that involved inlining of float operations on complicated
+ control flow graphs.</p>
+ <p>
+ Own Id: OTP-13407 Aux Id: PR-984 </p>
+ </item>
+ <item>
+ <p>
+ Various fixes and improvements to the HiPE LLVM backend.
+ <list> <item>Add support for LLVM 3.7 and 3.8 in the
+ HiPE/LLVM x86_64 backend</item> <item>Reinstate support
+ for the LLVM backend on x86 (works OK for LLVM 3.5 to 3.7
+ -- LLVM 3.8 has a bug that prevents it from generating
+ correct native code on x86)</item> </list></p>
+ <p>
+ Own Id: OTP-13626</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Elimination of <c>maps:is_key/2</c> calls to HiPE</p>
+ <p>
+ Own Id: OTP-13625 Aux Id: PR-1069 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Hipe 3.15</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/hipe/doc/src/part_notes.xml b/lib/hipe/doc/src/part_notes.xml
index f745a2dd42..828c304fb5 100644
--- a/lib/hipe/doc/src/part_notes.xml
+++ b/lib/hipe/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/hipe/doc/src/ref_man.xml b/lib/hipe/doc/src/ref_man.xml
index 76d5f0a22a..7938729227 100644
--- a/lib/hipe/doc/src/ref_man.xml
+++ b/lib/hipe/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/hipe/flow/Makefile b/lib/hipe/flow/Makefile
index f0af6ac166..d883eecf36 100644
--- a/lib/hipe/flow/Makefile
+++ b/lib/hipe/flow/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -66,7 +66,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec # +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/flow/cfg.hrl b/lib/hipe/flow/cfg.hrl
index f79fff4efe..2575b9e38a 100644
--- a/lib/hipe/flow/cfg.hrl
+++ b/lib/hipe/flow/cfg.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,11 +34,13 @@
%%
-record(cfg_info, {'fun' :: mfa(),
start_label :: cfg_lbl(),
+ %% TODO: merge is_closure and closure_arity into one field
is_closure :: boolean(),
- closure_arity :: arity(),
+ closure_arity = none :: 'none' | arity(),
is_leaf :: boolean(),
- params, % :: list()
- info = []}). %% this field seems not needed; take out??
+ params :: list(), %% XXX: refine
+ info = [] :: list()}). %% seems not needed; take out??
+-type cfg_info() :: #cfg_info{}.
%%
%% Data is a triple with a dict of constants, a list of labels and an integer
@@ -49,6 +51,6 @@
%% The following is to be used by other modules
%%
-record(cfg, {table = gb_trees:empty() :: gb_trees:tree(),
- info :: #cfg_info{},
+ info :: cfg_info(),
data :: cfg_data()}).
-type cfg() :: #cfg{}.
diff --git a/lib/hipe/flow/cfg.inc b/lib/hipe/flow/cfg.inc
index b39a89dbd4..0bad2a8dd7 100644
--- a/lib/hipe/flow/cfg.inc
+++ b/lib/hipe/flow/cfg.inc
@@ -4,7 +4,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/flow/ebb.inc b/lib/hipe/flow/ebb.inc
index a08528154a..529be72dc8 100644
--- a/lib/hipe/flow/ebb.inc
+++ b/lib/hipe/flow/ebb.inc
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/flow/hipe_bb.erl b/lib/hipe/flow/hipe_bb.erl
index 7a39d99e71..2da3a6dc99 100644
--- a/lib/hipe/flow/hipe_bb.erl
+++ b/lib/hipe/flow/hipe_bb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/flow/hipe_bb.hrl b/lib/hipe/flow/hipe_bb.hrl
index 13cad16174..cd4d788aef 100644
--- a/lib/hipe/flow/hipe_bb.hrl
+++ b/lib/hipe/flow/hipe_bb.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/flow/hipe_dominators.erl b/lib/hipe/flow/hipe_dominators.erl
index 2fb277b914..72c16b5688 100644
--- a/lib/hipe/flow/hipe_dominators.erl
+++ b/lib/hipe/flow/hipe_dominators.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -59,7 +59,7 @@
-record(domTree, {root :: cfg_lbl(),
size = 0 :: non_neg_integer(),
nodes = gb_trees:empty() :: gb_trees:tree()}).
--type domTree() :: #domTree{}.
+-opaque domTree() :: #domTree{}.
%%>----------------------------------------------------------------------<
%% Procedure : domTree_create/1
diff --git a/lib/hipe/flow/hipe_gen_cfg.erl b/lib/hipe/flow/hipe_gen_cfg.erl
index 99f33699bd..a6d053f505 100644
--- a/lib/hipe/flow/hipe_gen_cfg.erl
+++ b/lib/hipe/flow/hipe_gen_cfg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/flow/liveness.inc b/lib/hipe/flow/liveness.inc
index d420495f5a..a1caa3e0ad 100644
--- a/lib/hipe/flow/liveness.inc
+++ b/lib/hipe/flow/liveness.inc
@@ -3,7 +3,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/Makefile b/lib/hipe/icode/Makefile
index a82e28c7d9..b220bc16a0 100644
--- a/lib/hipe/icode/Makefile
+++ b/lib/hipe/icode/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2013. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -59,7 +59,7 @@ DOC_MODULES = hipe_beam_to_icode \
hipe_icode_pp hipe_icode_primops \
hipe_icode_range \
hipe_icode_split_arith \
- hipe_icode_ssa hipe_icode_ssa_const_prop \
+ hipe_icode_ssa hipe_icode_ssa_const_prop hipe_icode_call_elim \
hipe_icode_ssa_copy_prop hipe_icode_ssa_struct_reuse \
hipe_icode_type $(HIPE_MODULES)
@@ -84,7 +84,7 @@ DOC_FILES= $(DOC_MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_unused_import +warn_exported_vars +warn_missing_spec # +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_unused_import +warn_export_vars +warn_missing_spec # +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/icode/hipe_beam_to_icode.erl b/lib/hipe/icode/hipe_beam_to_icode.erl
index 37c6ba9c60..224aacd8d7 100644
--- a/lib/hipe/icode/hipe_beam_to_icode.erl
+++ b/lib/hipe/icode/hipe_beam_to_icode.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode.erl b/lib/hipe/icode/hipe_icode.erl
index 5c7003b0ed..78508dff22 100644
--- a/lib/hipe/icode/hipe_icode.erl
+++ b/lib/hipe/icode/hipe_icode.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -610,7 +610,9 @@
%% Exported types
%%
--export_type([icode/0]).
+-export_type([icode/0, params/0]).
+
+-type params() :: [icode_var()].
%%---------------------------------------------------------------------
%%
@@ -618,7 +620,7 @@
%%
%%---------------------------------------------------------------------
--spec mk_icode(mfa(), [icode_var()], boolean(), boolean(), [icode_instr()],
+-spec mk_icode(mfa(), params(), boolean(), boolean(), [icode_instr()],
{non_neg_integer(),non_neg_integer()},
{icode_lbl(),icode_lbl()}) -> icode().
mk_icode(Fun, Params, IsClosure, IsLeaf, Code, VarRange, LabelRange) ->
@@ -629,61 +631,61 @@ mk_icode(Fun, Params, IsClosure, IsLeaf, Code, VarRange, LabelRange) ->
var_range=VarRange,
label_range=LabelRange}.
--spec mk_icode(mfa(), [icode_var()], boolean(), boolean(), [icode_instr()],
+-spec mk_icode(mfa(), params(), boolean(), boolean(), [icode_instr()],
hipe_consttab(), {non_neg_integer(),non_neg_integer()},
- {icode_lbl(),icode_lbl()}) -> #icode{}.
+ {icode_lbl(),icode_lbl()}) -> icode().
mk_icode(Fun, Params, IsClosure, IsLeaf, Code, Data, VarRange, LabelRange) ->
#icode{'fun'=Fun, params=Params, code=Code,
data=Data, is_closure=IsClosure, is_leaf=IsLeaf,
var_range=VarRange, label_range=LabelRange}.
--spec icode_fun(#icode{}) -> mfa().
+-spec icode_fun(icode()) -> mfa().
icode_fun(#icode{'fun' = MFA}) -> MFA.
--spec icode_params(#icode{}) -> [icode_var()].
+-spec icode_params(icode()) -> params().
icode_params(#icode{params = Params}) -> Params.
--spec icode_params_update(#icode{}, [icode_var()]) -> #icode{}.
-icode_params_update(Icode, Params) ->
+-spec icode_params_update(icode(), params()) -> icode().
+icode_params_update(Icode, Params) ->
Icode#icode{params = Params}.
--spec icode_is_closure(#icode{}) -> boolean().
+-spec icode_is_closure(icode()) -> boolean().
icode_is_closure(#icode{is_closure = Closure}) -> Closure.
--spec icode_is_leaf(#icode{}) -> boolean().
+-spec icode_is_leaf(icode()) -> boolean().
icode_is_leaf(#icode{is_leaf = Leaf}) -> Leaf.
--spec icode_code(#icode{}) -> icode_instrs().
+-spec icode_code(icode()) -> icode_instrs().
icode_code(#icode{code = Code}) -> Code.
--spec icode_code_update(#icode{}, icode_instrs()) -> #icode{}.
+-spec icode_code_update(icode(), icode_instrs()) -> icode().
icode_code_update(Icode, NewCode) ->
Vmax = highest_var(NewCode),
Lmax = highest_label(NewCode),
Icode#icode{code = NewCode, var_range = {0,Vmax}, label_range = {0,Lmax}}.
--spec icode_data(#icode{}) -> hipe_consttab().
+-spec icode_data(icode()) -> hipe_consttab().
icode_data(#icode{data=Data}) -> Data.
-%% %% -spec icode_data_update(#icode{}, hipe_consttab()) -> #icode{}.
+%% %% -spec icode_data_update(icode(), hipe_consttab()) -> icode().
%% icode_data_update(Icode, NewData) -> Icode#icode{data=NewData}.
--spec icode_var_range(#icode{}) -> {non_neg_integer(), non_neg_integer()}.
+-spec icode_var_range(icode()) -> {non_neg_integer(), non_neg_integer()}.
icode_var_range(#icode{var_range = VarRange}) -> VarRange.
--spec icode_label_range(#icode{}) -> {non_neg_integer(), non_neg_integer()}.
+-spec icode_label_range(icode()) -> {non_neg_integer(), non_neg_integer()}.
icode_label_range(#icode{label_range = LabelRange}) -> LabelRange.
--spec icode_info(#icode{}) -> icode_info().
+-spec icode_info(icode()) -> icode_info().
icode_info(#icode{info = Info}) -> Info.
--spec icode_info_update(#icode{}, icode_info()) -> #icode{}.
+-spec icode_info_update(icode(), icode_info()) -> icode().
icode_info_update(Icode, Info) -> Icode#icode{info = Info}.
--spec icode_closure_arity(#icode{}) -> arity().
+-spec icode_closure_arity(icode()) -> arity().
icode_closure_arity(#icode{closure_arity = Arity}) -> Arity.
--spec icode_closure_arity_update(#icode{}, arity()) -> #icode{}.
+-spec icode_closure_arity_update(icode(), arity()) -> icode().
icode_closure_arity_update(Icode, Arity) -> Icode#icode{closure_arity = Arity}.
@@ -1376,12 +1378,12 @@ remove_constants(L) ->
%% Substitution: replace occurrences of X by Y if {X,Y} is in the
%% Subst_list.
--spec subst([{_,_}], I) -> I when is_subtype(I, icode_instr()).
+-spec subst([{_,_}], I) -> I when I :: icode_instr().
subst(Subst, I) ->
subst_defines(Subst, subst_uses(Subst, I)).
--spec subst_uses([{_,_}], I) -> I when is_subtype(I, icode_instr()).
+-spec subst_uses([{_,_}], I) -> I when I :: icode_instr().
subst_uses(Subst, I) ->
case I of
@@ -1405,7 +1407,7 @@ subst_uses(Subst, I) ->
#icode_label{} -> I
end.
--spec subst_defines([{_,_}], I) -> I when is_subtype(I, icode_instr()).
+-spec subst_defines([{_,_}], I) -> I when I :: icode_instr().
subst_defines(Subst, I) ->
case I of
@@ -1709,7 +1711,7 @@ mk_new_label() ->
%% @doc Removes comments from Icode.
%%
--spec strip_comments(#icode{}) -> #icode{}.
+-spec strip_comments(icode()) -> icode().
strip_comments(ICode) ->
icode_code_update(ICode, no_comments(icode_code(ICode))).
diff --git a/lib/hipe/icode/hipe_icode.hrl b/lib/hipe/icode/hipe_icode.hrl
index 9b24c4914e..b2e0d86b28 100644
--- a/lib/hipe/icode/hipe_icode.hrl
+++ b/lib/hipe/icode/hipe_icode.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -169,9 +169,10 @@
%%---------------------------------------------------------------------
-record(icode, {'fun' :: mfa(),
- params :: [icode_var()],
+ params :: hipe_icode:params(),
+ %% TODO: merge is_closure and closure_arity into one field
is_closure :: boolean(),
- closure_arity :: arity(),
+ closure_arity = none :: 'none' | arity(),
is_leaf :: boolean(),
code = [] :: icode_instrs(),
data :: hipe_consttab(),
diff --git a/lib/hipe/icode/hipe_icode_bincomp.erl b/lib/hipe/icode/hipe_icode_bincomp.erl
index c765f1926b..5a27519141 100644
--- a/lib/hipe/icode/hipe_icode_bincomp.erl
+++ b/lib/hipe/icode/hipe_icode_bincomp.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_call_elim.erl b/lib/hipe/icode/hipe_icode_call_elim.erl
new file mode 100644
index 0000000000..6a22133962
--- /dev/null
+++ b/lib/hipe/icode/hipe_icode_call_elim.erl
@@ -0,0 +1,78 @@
+%% -*- erlang-indent-level: 2 -*-
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%----------------------------------------------------------------------
+%% File : hipe_icode_call_elim.erl
+%% Authors : Daniel S. McCain <[email protected]>,
+%% Magnus Lång <[email protected]>
+%% Created : 14 Apr 2014 by Magnus Lång <[email protected]>
+%% Purpose : Eliminate calls to BIFs that are side-effect free only when
+%% executed on some argument types.
+%%----------------------------------------------------------------------
+-module(hipe_icode_call_elim).
+-export([cfg/1]).
+
+-include("hipe_icode.hrl").
+-include("../flow/cfg.hrl").
+
+-spec cfg(cfg()) -> cfg().
+
+cfg(IcodeSSA) ->
+ lists:foldl(fun (Lbl, CFG1) ->
+ BB1 = hipe_icode_cfg:bb(CFG1, Lbl),
+ Code1 = hipe_bb:code(BB1),
+ Code2 = lists:map(fun elim_insn/1, Code1),
+ BB2 = hipe_bb:code_update(BB1, Code2),
+ hipe_icode_cfg:bb_add(CFG1, Lbl, BB2)
+ end, IcodeSSA, hipe_icode_cfg:labels(IcodeSSA)).
+
+-spec elim_insn(icode_instr()) -> icode_instr().
+elim_insn(Insn=#icode_call{'fun'={_,_,_}=MFA, args=Args, type=remote,
+ dstlist=[Dst=#icode_variable{
+ annotation={type_anno, RetType, _}}]}) ->
+ Opaques = 'universe',
+ case erl_types:t_is_singleton(RetType, Opaques) of
+ true ->
+ ArgTypes = [case Arg of
+ #icode_variable{annotation={type_anno, Type, _}} -> Type;
+ #icode_const{} ->
+ erl_types:t_from_term(hipe_icode:const_value(Arg))
+ end || Arg <- Args],
+ case can_be_eliminated(MFA, ArgTypes) of
+ true ->
+ Const = hipe_icode:mk_const(
+ erl_types:t_singleton_to_term(RetType, Opaques)),
+ #icode_move{dst=Dst, src=Const};
+ false -> Insn
+ end;
+ false -> Insn
+ end;
+elim_insn(Insn) -> Insn.
+
+
+%% A function can be eliminated for some argument types if it has no side
+%% effects when run on arguments of those types.
+
+-spec can_be_eliminated(mfa(), [erl_types:erl_type()]) -> boolean().
+
+can_be_eliminated({maps, is_key, 2}, [_K, M]) ->
+ erl_types:t_is_map(M);
+can_be_eliminated(_, _) ->
+ false.
diff --git a/lib/hipe/icode/hipe_icode_callgraph.erl b/lib/hipe/icode/hipe_icode_callgraph.erl
index 27dc49a178..12c2cd2b44 100644
--- a/lib/hipe/icode/hipe_icode_callgraph.erl
+++ b/lib/hipe/icode/hipe_icode_callgraph.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_cfg.erl b/lib/hipe/icode/hipe_icode_cfg.erl
index dfc3f316b3..9a602c0283 100644
--- a/lib/hipe/icode/hipe_icode_cfg.erl
+++ b/lib/hipe/icode/hipe_icode_cfg.erl
@@ -3,7 +3,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -55,6 +55,9 @@
-spec postorder(cfg()) -> [icode_lbl()].
-spec reverse_postorder(cfg()) -> [icode_lbl()].
+-spec params(cfg()) -> hipe_icode:params().
+-spec params_update(cfg(), hipe_icode:params()) -> cfg().
+
-spec is_visited(icode_lbl(), gb_sets:set()) -> boolean().
-spec visit(icode_lbl(), gb_sets:set()) -> gb_sets:set().
diff --git a/lib/hipe/icode/hipe_icode_coordinator.erl b/lib/hipe/icode/hipe_icode_coordinator.erl
index 1150f31abf..d2f8748535 100644
--- a/lib/hipe/icode/hipe_icode_coordinator.erl
+++ b/lib/hipe/icode/hipe_icode_coordinator.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_ebb.erl b/lib/hipe/icode/hipe_icode_ebb.erl
index 8d0ea94d92..2aac9d2f42 100644
--- a/lib/hipe/icode/hipe_icode_ebb.erl
+++ b/lib/hipe/icode/hipe_icode_ebb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_exceptions.erl b/lib/hipe/icode/hipe_icode_exceptions.erl
index 41556ab80f..f03ce2faaa 100644
--- a/lib/hipe/icode/hipe_icode_exceptions.erl
+++ b/lib/hipe/icode/hipe_icode_exceptions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -85,7 +85,7 @@
%%----------------------------------------------------------------------------
--spec fix_catches(#cfg{}) -> #cfg{}.
+-spec fix_catches(cfg()) -> cfg().
fix_catches(CFG) ->
{Map, State} = build_mapping(find_catches(init_state(CFG))),
@@ -393,10 +393,10 @@ get_renaming(C, Map) ->
%%---------------------------------------------------------------------
%% State abstraction
--record(state, {cfg :: #cfg{},
+-record(state, {cfg :: cfg(),
changed = false :: boolean(),
- succ :: #cfg{},
- pred :: #cfg{},
+ succ :: cfg(),
+ pred :: cfg(),
start_labels :: [icode_lbl(),...],
visited = hipe_icode_cfg:none_visited() :: gb_sets:set(),
out = gb_trees:empty() :: gb_trees:tree(),
@@ -404,13 +404,8 @@ get_renaming(C, Map) ->
}).
init_state(CFG) ->
- State = #state{cfg = CFG},
- refresh_state_cache(State).
-
-refresh_state_cache(State) ->
- CFG = State#state.cfg,
SLs = [hipe_icode_cfg:start_label(CFG)],
- State#state{succ = CFG, pred = CFG, start_labels = SLs}.
+ #state{cfg = CFG, succ = CFG, pred = CFG, start_labels = SLs}.
get_cfg(State) ->
State#state.cfg.
@@ -466,7 +461,8 @@ get_bb_code(L, State) ->
set_bb_code(L, Code, State) ->
CFG = State#state.cfg,
CFG1 = hipe_icode_cfg:bb_add(CFG, L, hipe_bb:mk_bb(Code)),
- refresh_state_cache(State#state{cfg = CFG1}).
+ SLs = [hipe_icode_cfg:start_label(CFG1)],
+ State#state{cfg = CFG1, succ = CFG1, pred = CFG1, start_labels = SLs}.
get_new_catches_in(L, State) ->
Ps = get_pred(L, State),
diff --git a/lib/hipe/icode/hipe_icode_fp.erl b/lib/hipe/icode/hipe_icode_fp.erl
index 5ae0395b72..4a5877074c 100644
--- a/lib/hipe/icode/hipe_icode_fp.erl
+++ b/lib/hipe/icode/hipe_icode_fp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,13 +34,37 @@
-include("hipe_icode.hrl").
-include("../flow/cfg.hrl").
--record(state, {edge_map = gb_trees:empty() :: gb_trees:tree(),
- fp_ebb_map = gb_trees:empty() :: gb_trees:tree(),
- cfg :: #cfg{}}).
+-type mapped_fvar() :: icode_fvar() | {assigned, icode_fvar()} .
+-type incoming_fvars() :: [{icode_lbl(), mapped_fvar()}].
+-type initial_var_map() :: #{icode_var() => incoming_fvars()}.
+-type bb_phi_list() :: [{icode_fvar(), [{icode_lbl(), icode_fvar()}]}].
+-type var_map_phi() :: #{phi => bb_phi_list(),
+ icode_var() => mapped_fvar()}.
+-type var_map() :: #{icode_var() => mapped_fvar()}.
+
+-type edge() :: {icode_lbl(), icode_lbl()}.
+-type edge_map() :: #{edge() => var_map()}.
+
+-type worklist(Item) :: {[Item], [Item], gb_sets:set(Item)}.
+-type worklist() :: worklist(icode_lbl()).
+
+-type fail_lbl() :: [] | icode_lbl().
+-type in_block() :: {true, fail_lbl()} | false.
+-type fp_ebb_map() :: #{{inblock_in | inblock_out, icode_lbl()} | edge()
+ => in_block()}.
+
+-record(state, {edge_map = #{} :: edge_map(),
+ fp_ebb_map = #{} :: fp_ebb_map(),
+ cfg :: cfg()}).
+-type state() :: #state{}.
+
+-type icode_phi() :: #icode_phi{}.
+-type icode_variable() :: #icode_variable{}.
+-type icode_const() :: #icode_const{}.
%%--------------------------------------------------------------------
--spec cfg(#cfg{}) -> #cfg{}.
+-spec cfg(cfg()) -> cfg().
cfg(Cfg) ->
%%hipe_icode_cfg:pp(Cfg),
@@ -59,10 +83,14 @@ cfg(Cfg) ->
%% corresponding fcheckerror.
%%--------------------------------------------------------------------
+-spec annotate_fclearerror(cfg()) -> cfg().
+
annotate_fclearerror(Cfg) ->
Labels = hipe_icode_cfg:reverse_postorder(Cfg),
annotate_fclearerror(Labels, Cfg).
+-spec annotate_fclearerror([icode_lbl()], cfg()) -> cfg().
+
annotate_fclearerror([Label|Left], Cfg) ->
BB = hipe_icode_cfg:bb(Cfg, Label),
Code = hipe_bb:code(BB),
@@ -73,6 +101,9 @@ annotate_fclearerror([Label|Left], Cfg) ->
annotate_fclearerror([], Cfg) ->
Cfg.
+-spec annotate_fclearerror1(icode_instrs(), icode_lbl(), cfg(), icode_instrs())
+ -> icode_instrs().
+
annotate_fclearerror1([I|Left], Label, Cfg, Acc) ->
case I of
#icode_call{} ->
@@ -90,6 +121,9 @@ annotate_fclearerror1([I|Left], Label, Cfg, Acc) ->
annotate_fclearerror1([], _Label, _Cfg, Acc) ->
lists:reverse(Acc).
+-spec lookahead_for_fcheckerror(icode_instrs(), icode_lbl(), cfg()) ->
+ fail_lbl().
+
lookahead_for_fcheckerror([I|Left], Label, Cfg) ->
case I of
#icode_call{} ->
@@ -111,10 +145,14 @@ lookahead_for_fcheckerror([], Label, Cfg) ->
lookahead_for_fcheckerror(Code, Succ, Cfg)
end.
+-spec unannotate_fclearerror(cfg()) -> cfg().
+
unannotate_fclearerror(Cfg) ->
Labels = hipe_icode_cfg:reverse_postorder(Cfg),
unannotate_fclearerror(Labels, Cfg).
+-spec unannotate_fclearerror([icode_lbl()], cfg()) -> cfg().
+
unannotate_fclearerror([Label|Left], Cfg) ->
BB = hipe_icode_cfg:bb(Cfg, Label),
Code = hipe_bb:code(BB),
@@ -125,6 +163,9 @@ unannotate_fclearerror([Label|Left], Cfg) ->
unannotate_fclearerror([], Cfg) ->
Cfg.
+-spec unannotate_fclearerror1(icode_instrs(), icode_instrs()) ->
+ icode_instrs().
+
unannotate_fclearerror1([I|Left], Acc) ->
case I of
#icode_call{} ->
@@ -145,10 +186,14 @@ unannotate_fclearerror1([], Acc) ->
%% Make float EBBs
%%--------------------------------------------------------------------
+-spec place_fp_blocks(state()) -> state().
+
place_fp_blocks(State) ->
WorkList = new_worklist(State),
transform_block(WorkList, State).
+-spec transform_block(worklist(), state()) -> state().
+
transform_block(WorkList, State) ->
case get_work(WorkList) of
none ->
@@ -182,6 +227,10 @@ transform_block(WorkList, State) ->
end
end.
+-spec update_maps(state(), icode_lbl(), ordsets:ordset(icode_lbl()),
+ var_map(), ordsets:ordset(icode_lbl()), var_map())
+ -> fixpoint | {state(), [icode_lbl()]}.
+
update_maps(State, Label, SuccSet, SuccMap, FailSet, FailMap) ->
{NewState, Add1} = update_maps(State, Label, SuccSet, SuccMap, []),
case update_maps(NewState, Label, FailSet, FailMap, Add1) of
@@ -189,6 +238,10 @@ update_maps(State, Label, SuccSet, SuccMap, FailSet, FailMap) ->
{_NewState1, _Add} = Ret -> Ret
end.
+-spec update_maps(state(), icode_lbl(), ordsets:ordset(icode_lbl()),
+ var_map(), [icode_lbl()])
+ -> {state(), [icode_lbl()]}.
+
update_maps(State, From, [To|Left], Map, Acc) ->
case state__map_update(State, From, To, Map) of
fixpoint ->
@@ -199,10 +252,13 @@ update_maps(State, From, [To|Left], Map, Acc) ->
update_maps(State, _From, [], _Map, Acc) ->
{State, Acc}.
+-spec transform_instrs(icode_instrs(), edge_map(), var_map(), icode_instrs())
+ -> {var_map(), icode_instrs()}.
+
transform_instrs([I|Left], PhiMap, Map, Acc) ->
Defines = hipe_icode:defines(I),
- NewMap = delete_all(Defines, Map),
- NewPhiMap = delete_all(Defines, PhiMap),
+ NewMap = maps:without(Defines, Map),
+ NewPhiMap = maps:without(Defines, PhiMap),
case I of
#icode_phi{} ->
Uses = hipe_icode:uses(I),
@@ -214,7 +270,7 @@ transform_instrs([I|Left], PhiMap, Map, Acc) ->
%% All arguments are untagged. Let's untag the destination.
Dst = hipe_icode:phi_dst(I),
NewDst = hipe_icode:mk_new_fvar(),
- NewMap1 = gb_trees:enter(Dst, NewDst, NewMap),
+ NewMap1 = NewMap#{Dst => NewDst},
NewI = subst_phi_uncond(I, NewDst, PhiMap),
transform_instrs(Left, NewPhiMap, NewMap1, [NewI|Acc]);
_ ->
@@ -233,7 +289,7 @@ transform_instrs([I|Left], PhiMap, Map, Acc) ->
[Src] ->
case lookup(Src, Map) of
none ->
- NewMap1 = gb_trees:enter(Src, {assigned, Dst}, NewMap),
+ NewMap1 = NewMap#{Src => {assigned, Dst}},
transform_instrs(Left, NewPhiMap, NewMap1, [I|Acc]);
Dst ->
%% This is the instruction that untagged the variable.
@@ -256,7 +312,7 @@ transform_instrs([I|Left], PhiMap, Map, Acc) ->
unsafe_tag_float ->
[Dst] = hipe_icode:defines(I),
[Src] = hipe_icode:uses(I),
- NewMap1 = gb_trees:enter(Dst, {assigned, Src}, NewMap),
+ NewMap1 = NewMap#{Dst => {assigned, Src}},
transform_instrs(Left, NewPhiMap, NewMap1,[I|Acc]);
_ ->
{NewMap1, NewAcc} = check_for_fop_candidates(I, NewMap, Acc),
@@ -269,6 +325,9 @@ transform_instrs([I|Left], PhiMap, Map, Acc) ->
transform_instrs([], _PhiMap, Map, Acc) ->
{Map, lists:reverse(Acc)}.
+-spec check_for_fop_candidates(icode_instr(), var_map(), icode_instrs())
+ -> {var_map(), icode_instrs()}.
+
check_for_fop_candidates(I, Map, Acc) ->
case is_fop_cand(I) of
false ->
@@ -311,6 +370,8 @@ check_for_fop_candidates(I, Map, Acc) ->
end.
+-spec handle_untagged_arguments(icode_instr(), var_map()) -> icode_instrs().
+
%% If this is an instruction that needs to operate on tagged values,
%% which currently are untagged, we must tag the values and perhaps
%% end the fp ebb.
@@ -322,23 +383,24 @@ handle_untagged_arguments(I, Map) ->
Tag ->
TagIntrs =
[hipe_icode:mk_primop([Dst], unsafe_tag_float,
- [gb_trees:get(Dst, Map)]) || Dst <- Tag],
+ [maps:get(Dst, Map)]) || Dst <- Tag],
[I|TagIntrs]
end.
+-spec do_prelude(var_map_phi()) -> {[icode_phi()], var_map()}.
+
%% Add phi nodes for untagged fp values.
-do_prelude(Map) ->
- case gb_trees:lookup(phi, Map) of
- none ->
- {[], Map};
- {value, List} ->
- %%io:format("Adding phi: ~w\n", [List]),
- Fun = fun ({FVar, Bindings}, Acc) ->
- [hipe_icode:mk_phi(FVar, Bindings)|Acc]
- end,
- {lists:foldl(Fun, [], List), gb_trees:delete(phi, Map)}
- end.
+do_prelude(Map = #{phi := List}) ->
+ %%io:format("Adding phi: ~w\n", [List]),
+ Fun = fun ({FVar, Bindings}, Acc) ->
+ [hipe_icode:mk_phi(FVar, Bindings)|Acc]
+ end,
+ {lists:foldl(Fun, [], List), maps:remove(phi, Map)};
+do_prelude(Map) -> {[], Map}.
+
+-spec split_code([I]) -> {[I], I} when
+ I :: icode_instr().
split_code(Code) ->
split_code(Code, []).
@@ -349,6 +411,8 @@ split_code([I|Left], Acc) ->
split_code(Left, [I|Acc]).
+-spec finalize(state()) -> state().
+
%% When all code is mapped to fp instructions we must make sure that
%% the fp ebb information going into each block is the same as the
%% information coming out of each predecessor. Otherwise, we must add
@@ -360,17 +424,25 @@ finalize(State) ->
Edges = needs_fcheckerror(NewState),
finalize(Edges, NewState).
+-spec finalize([edge()], state()) -> state().
+
finalize([{From, To}|Left], State) ->
NewState = add_fp_ebb_fixup(From, To, State),
finalize(Left, NewState);
finalize([], State) ->
State.
+-spec needs_fcheckerror(state()) -> [{none | icode_lbl(), icode_lbl()}].
+
needs_fcheckerror(State) ->
Cfg = state__cfg(State),
Labels = hipe_icode_cfg:labels(Cfg),
needs_fcheckerror(Labels, State, []).
+-spec needs_fcheckerror([icode_lbl()], state(),
+ [{none | icode_lbl(), icode_lbl()}])
+ -> [{none | icode_lbl(), icode_lbl()}].
+
needs_fcheckerror([Label|Left], State, Acc) ->
case state__get_in_block_in(State, Label) of
{true, _} ->
@@ -395,6 +467,8 @@ needs_fcheckerror([Label|Left], State, Acc) ->
needs_fcheckerror([], _State, Acc) ->
Acc.
+-spec add_fp_ebb_fixup(none | icode_lbl(), icode_lbl(), state()) -> state().
+
add_fp_ebb_fixup('none', To, State) ->
%% Add the fcheckerror to the start of the block.
BB = state__bb(State, To),
@@ -416,9 +490,15 @@ add_fp_ebb_fixup(From, To, State) ->
NewToBB = hipe_bb:code_update(ToBB, NewToCode),
state__bb_add(NewState1, To, NewToBB).
+-spec redirect_phis(icode_instrs(), icode_lbl(), icode_lbl())
+ -> icode_instrs().
+
redirect_phis(Code, OldFrom, NewFrom) ->
redirect_phis(Code, OldFrom, NewFrom, []).
+-spec redirect_phis(icode_instrs(), icode_lbl(), icode_lbl(), icode_instrs())
+ -> icode_instrs().
+
redirect_phis([I|Is] = Code, OldFrom, NewFrom, Acc) ->
case I of
#icode_phi{} ->
@@ -430,13 +510,20 @@ redirect_phis([I|Is] = Code, OldFrom, NewFrom, Acc) ->
redirect_phis([], _OldFrom, _NewFrom, Acc) ->
lists:reverse(Acc).
+-spec subst_phi(icode_phi(), icode_variable(), edge_map())
+ -> icode_phi().
+
subst_phi(I, Dst, Map) ->
ArgList = subst_phi_uses0(hipe_icode:phi_arglist(I), Map, []),
hipe_icode:mk_phi(Dst, ArgList).
+-spec subst_phi_uses0([{icode_lbl(), icode_variable()}], edge_map(),
+ [{icode_lbl(), icode_variable()}])
+ -> [{icode_lbl(), icode_variable()}].
+
subst_phi_uses0([{Pred, Var}|Left], Map, Acc) ->
- case gb_trees:lookup(Var, Map) of
- {value, List} ->
+ case Map of
+ #{Var := List} ->
case lists:keyfind(Pred, 1, List) of
{Pred, {assigned, _NewVar}} ->
%% The variable is untagged, but it has been assigned. Keep it!
@@ -448,20 +535,27 @@ subst_phi_uses0([{Pred, Var}|Left], Map, Acc) ->
%% The variable is not untagged.
subst_phi_uses0(Left, Map, [{Pred, Var} | Acc])
end;
- none ->
+ #{} ->
%% The variable is not untagged.
subst_phi_uses0(Left, Map, [{Pred, Var} | Acc])
end;
subst_phi_uses0([], _Map, Acc) ->
Acc.
+-spec subst_phi_uncond(icode_phi(), icode_variable(), edge_map())
+ -> icode_phi().
+
subst_phi_uncond(I, Dst, Map) ->
ArgList = subst_phi_uses_uncond0(hipe_icode:phi_arglist(I), Map, []),
hipe_icode:mk_phi(Dst, ArgList).
+-spec subst_phi_uses_uncond0([{icode_lbl(), icode_variable()}], edge_map(),
+ [{icode_lbl(), icode_variable()}])
+ -> [{icode_lbl(), icode_variable()}].
+
subst_phi_uses_uncond0([{Pred, Var}|Left], Map, Acc) ->
- case gb_trees:lookup(Var, Map) of
- {value, List} ->
+ case Map of
+ #{Var := List} ->
case lists:keyfind(Pred, 1, List) of
{Pred, {assigned, NewVar}} ->
%% The variable is untagged!
@@ -473,13 +567,15 @@ subst_phi_uses_uncond0([{Pred, Var}|Left], Map, Acc) ->
%% The variable is not untagged.
subst_phi_uses_uncond0(Left, Map, [{Pred, Var} | Acc])
end;
- none ->
+ #{} ->
%% The variable is not untagged.
subst_phi_uses_uncond0(Left, Map, [{Pred, Var} | Acc])
end;
subst_phi_uses_uncond0([], _Map, Acc) ->
Acc.
+-spec place_error_handling(worklist(), state()) -> state().
+
place_error_handling(WorkList, State) ->
case get_work(WorkList) of
none ->
@@ -502,6 +598,9 @@ place_error_handling(WorkList, State) ->
end
end.
+-spec place_error(icode_instrs(), in_block(), icode_instrs())
+ -> {icode_instrs(), in_block()}.
+
place_error([I|Left], InBlock, Acc) ->
case I of
#icode_call{} ->
@@ -638,12 +737,10 @@ instr_allowed_in_fp_ebb(Instr) ->
%%=============================================================
%% ------------------------------------------------------------
-%% Handling the gb_tree
+%% Handling the variable map
-delete_all([Key|Left], Tree) ->
- delete_all(Left, gb_trees:delete_any(Key, Tree));
-delete_all([], Tree) ->
- Tree.
+-spec lookup_list([icode_var() | icode_const()], var_map())
+ -> [none | icode_fvar()].
lookup_list(List, Info) ->
lookup_list(List, fun lookup/2, Info, []).
@@ -653,33 +750,43 @@ lookup_list([H|T], Fun, Info, Acc) ->
lookup_list([], _, _, Acc) ->
lists:reverse(Acc).
+-spec lookup(icode_var() | icode_const(), var_map()) -> none | icode_fvar().
+
lookup(Key, Tree) ->
case hipe_icode:is_const(Key) of
%% This can be true if the same constant has been
%% untagged more than once
true -> none;
false ->
- case gb_trees:lookup(Key, Tree) of
- none -> none;
- {value, {assigned, Val}} -> Val;
- {value, Val} -> Val
+ case Tree of
+ #{Key := {assigned, Val}} -> Val;
+ #{Key := Val} -> Val;
+ #{} -> none
end
end.
+-spec lookup_list_keep_consts([icode_var() | icode_const()], var_map())
+ -> [none | icode_fvar() | icode_const()].
+
lookup_list_keep_consts(List, Info) ->
lookup_list(List, fun lookup_keep_consts/2, Info, []).
+-spec lookup_keep_consts(icode_var() | icode_const(), var_map())
+ -> none | icode_fvar() | icode_const().
+
lookup_keep_consts(Key, Tree) ->
case hipe_icode:is_const(Key) of
true -> Key;
false ->
- case gb_trees:lookup(Key, Tree) of
- none -> none;
- {value, {assigned, Val}} -> Val;
- {value, Val} -> Val
+ case Tree of
+ #{Key := {assigned, Val}} -> Val;
+ #{Key := Val} -> Val;
+ #{} -> none
end
end.
+-spec get_type(icode_argument()) -> erl_types:erl_type().
+
get_type(Var) ->
case hipe_icode:is_const(Var) of
true -> erl_types:t_from_term(hipe_icode:const_value(Var));
@@ -695,98 +802,108 @@ get_type(Var) ->
%% ------------------------------------------------------------
%% Handling the map from variables to fp-variables
+-spec join_maps([edge()], edge_map()) -> initial_var_map().
+
join_maps(Edges, EdgeMap) ->
- join_maps(Edges, EdgeMap, gb_trees:empty()).
+ join_maps(Edges, EdgeMap, #{}).
join_maps([Edge = {Pred, _}|Left], EdgeMap, Map) ->
- case gb_trees:lookup(Edge, EdgeMap) of
- none ->
+ case EdgeMap of
+ #{Edge := OldMap} ->
+ NewMap = join_maps0(maps:to_list(OldMap), Pred, Map),
+ join_maps(Left, EdgeMap, NewMap);
+ #{} ->
%% All predecessors have not been handled. Use empty map.
- gb_trees:empty();
- {value, OldMap} ->
- NewMap = join_maps0(gb_trees:to_list(OldMap), Pred, Map),
- join_maps(Left, EdgeMap, NewMap)
+ #{}
end;
join_maps([], _, Map) ->
Map.
-join_maps0([{phi, _}|Tail], Pred, Map) ->
- join_maps0(Tail, Pred, Map);
-join_maps0([{Var, FVar}|Tail], Pred, Map) ->
- case gb_trees:lookup(Var, Map) of
- none ->
- join_maps0(Tail, Pred, gb_trees:enter(Var, [{Pred, FVar}], Map));
- {value, List} ->
+-spec join_maps0(list(), icode_lbl(), initial_var_map()) -> initial_var_map().
+
+join_maps0([{Var=#icode_variable{kind=var}, FVar}|Tail], Pred, Map) ->
+ case Map of
+ #{Var := List} ->
case lists:keyfind(Pred, 1, List) of
false ->
- join_maps0(Tail, Pred, gb_trees:update(Var, [{Pred, FVar}|List], Map));
+ join_maps0(Tail, Pred, Map#{Var := [{Pred, FVar}|List]});
{Pred, FVar} ->
%% No problem.
join_maps0(Tail, Pred, Map);
_ ->
exit('New binding to same variable')
- end
+ end;
+ #{} ->
+ join_maps0(Tail, Pred, Map#{Var => [{Pred, FVar}]})
end;
join_maps0([], _, Map) ->
Map.
+-spec filter_map(initial_var_map(), pos_integer()) -> var_map_phi().
+
filter_map(Map, NofPreds) ->
- filter_map(gb_trees:to_list(Map), NofPreds, Map).
+ filter_map(maps:to_list(Map), NofPreds, Map).
+
+-spec filter_map([{icode_var(), incoming_fvars()}], pos_integer(),
+ var_map_phi()) -> var_map_phi().
filter_map([{Var, Bindings}|Left], NofPreds, Map) ->
case length(Bindings) =:= NofPreds of
true ->
+ BindingsAllAssigned = lists:all(fun({_, {assigned, _}}) -> true;
+ ({_, _}) -> false
+ end, Bindings),
case all_args_equal(Bindings) of
true ->
- {_, FVar} = hd(Bindings),
- filter_map(Left, NofPreds, gb_trees:update(Var, FVar, Map));
+ NewBinding =
+ case hd(Bindings) of
+ {Pred, {assigned, FVar0}} when is_integer(Pred) ->
+ case BindingsAllAssigned of
+ true -> {assigned, FVar0};
+ false -> FVar0
+ end;
+ {Pred, FVar0} when is_integer(Pred) -> FVar0
+ end,
+ filter_map(Left, NofPreds, Map#{Var := NewBinding});
false ->
PhiDst = hipe_icode:mk_new_fvar(),
PhiArgs = strip_of_assigned(Bindings),
NewMap =
- case gb_trees:lookup(phi, Map) of
- none ->
- gb_trees:insert(phi, [{PhiDst, PhiArgs}], Map);
- {value, Val} ->
- gb_trees:update(phi, [{PhiDst, PhiArgs}|Val], Map)
+ case Map of
+ #{phi := Val} ->
+ Map#{phi := [{PhiDst, PhiArgs}|Val]};
+ #{} ->
+ Map#{phi => [{PhiDst, PhiArgs}]}
end,
NewBinding =
- case bindings_are_assigned(Bindings) of
+ case BindingsAllAssigned of
true -> {assigned, PhiDst};
false -> PhiDst
end,
- filter_map(Left, NofPreds, gb_trees:update(Var, NewBinding, NewMap))
+ filter_map(Left, NofPreds, NewMap#{Var := NewBinding})
end;
false ->
- filter_map(Left, NofPreds, gb_trees:delete(Var, Map))
+ filter_map(Left, NofPreds, maps:remove(Var, Map))
end;
filter_map([], _NofPreds, Map) ->
Map.
-bindings_are_assigned([{_, {assigned, _}}|Left]) ->
- assert_assigned(Left),
- true;
-bindings_are_assigned(Bindings) ->
- assert_not_assigned(Bindings),
- false.
-
-assert_assigned([{_, {assigned, _}}|Left]) ->
- assert_assigned(Left);
-assert_assigned([]) ->
- ok.
-
-assert_not_assigned([{_, FVar}|Left]) ->
- true = hipe_icode:is_fvar(FVar),
- assert_not_assigned(Left);
-assert_not_assigned([]) ->
- ok.
+-spec all_args_equal(incoming_fvars()) -> boolean().
%% all_args_equal returns true if the mapping for a variable is the
%% same from all predecessors, i.e., we do not need a phi-node.
+%% During the fixpoint loop, a mapping might become assigned, without that
+%% information having propagated into all predecessors. We take care to answer
+%% true even if FVar is only assigned in some predecessors.
+
+all_args_equal([{_, {assigned, FVar}}|Left]) ->
+ all_args_equal(Left, FVar);
all_args_equal([{_, FVar}|Left]) ->
all_args_equal(Left, FVar).
+all_args_equal([{_, {assigned, FVar1}}|Left], FVar1) ->
+ all_args_equal(Left, FVar1);
all_args_equal([{_, FVar1}|Left], FVar1) ->
all_args_equal(Left, FVar1);
all_args_equal([], _) ->
@@ -795,20 +912,24 @@ all_args_equal(_, _) ->
false.
+-spec add_new_bindings_unassigned([icode_var()], var_map()) -> var_map().
+
%% We differentiate between values that have been assigned as
%% tagged variables and those that got a 'virtual' binding.
add_new_bindings_unassigned([Var|Left], Map) ->
FVar = hipe_icode:mk_new_fvar(),
- add_new_bindings_unassigned(Left, gb_trees:insert(Var, FVar, Map));
+ add_new_bindings_unassigned(Left, Map#{Var => FVar});
add_new_bindings_unassigned([], Map) ->
Map.
+-spec add_new_bindings_assigned([icode_var()], var_map()) -> var_map().
+
add_new_bindings_assigned([Var|Left], Map) ->
case lookup(Var, Map) of
none ->
FVar = hipe_icode:mk_new_fvar(),
- NewMap = gb_trees:insert(Var, {assigned, FVar}, Map),
+ NewMap = Map#{Var => {assigned, FVar}},
add_new_bindings_assigned(Left, NewMap);
_ ->
add_new_bindings_assigned(Left, Map)
@@ -816,6 +937,8 @@ add_new_bindings_assigned([Var|Left], Map) ->
add_new_bindings_assigned([], Map) ->
Map.
+-spec strip_of_assigned(incoming_fvars()) -> [{icode_lbl(), icode_fvar()}].
+
strip_of_assigned(List) ->
strip_of_assigned(List, []).
@@ -830,6 +953,8 @@ strip_of_assigned([], Acc) ->
%% Help functions for the transformation from ordinary instruction to
%% fp-instruction
+-spec is_fop_cand(icode_instr()) -> boolean().
+
is_fop_cand(I) ->
case hipe_icode:call_fun(I) of
'/' -> true;
@@ -840,6 +965,8 @@ is_fop_cand(I) ->
end
end.
+-spec any_is_float([icode_argument()]) -> boolean().
+
any_is_float(Vars) ->
lists:any(fun (V) -> erl_types:t_is_float(get_type(V)) end, Vars).
@@ -866,25 +993,32 @@ fun_to_fop(Fun) ->
end.
+-spec must_be_tagged(icode_var(), var_map()) -> boolean().
+
%% If there is a tagged version of this variable available we don't
%% have to tag the untagged version.
must_be_tagged(Var, Map) ->
- case gb_trees:lookup(Var, Map) of
- none -> false;
- {value, {assigned, _}} -> false;
- {value, Val} -> hipe_icode:is_fvar(Val)
+ case Map of
+ #{Var := {assigned, _}} -> false;
+ #{Var := Val} -> hipe_icode:is_fvar(Val);
+ #{} -> false
end.
+-spec get_conv_instrs([icode_argument()], var_map()) -> icode_instrs().
+
%% Converting to floating point variables
get_conv_instrs(Vars, Map) ->
get_conv_instrs(Vars, Map, []).
+-spec get_conv_instrs([icode_argument()], var_map(), icode_instrs())
+ -> icode_instrs().
+
get_conv_instrs([Var|Left], Map, Acc) ->
- {_, Dst} = gb_trees:get(Var, Map),
- NewI =
+ #{Var := {_, Dst}} = Map,
+ NewI =
case erl_types:t_is_float(get_type(Var)) of
true ->
[hipe_icode:mk_primop([Dst], unsafe_untag_float, [Var])];
@@ -896,6 +1030,8 @@ get_conv_instrs([], _, Acc) ->
Acc.
+-spec conv_consts([icode_const()], icode_instr()) -> icode_instr().
+
conv_consts(ConstArgs, I) ->
conv_consts(ConstArgs, I, []).
@@ -934,63 +1070,79 @@ state__bb_add(S = #state{cfg = Cfg}, Label, BB) ->
NewCfg = hipe_icode_cfg:bb_add(Cfg, Label, BB),
S#state{cfg = NewCfg}.
+-spec state__map(state(), icode_lbl()) -> initial_var_map().
+
state__map(S = #state{edge_map = EM}, To) ->
join_maps([{From, To} || From <- state__pred(S, To)], EM).
+-spec state__map_update(state(), icode_lbl(), icode_lbl(), var_map()) ->
+ fixpoint | state().
+
state__map_update(S = #state{edge_map = EM}, From, To, Map) ->
FromTo = {From, To},
MapChanged =
- case gb_trees:lookup(FromTo, EM) of
- {value, Map1} -> not match(Map1, Map);
- none -> true
+ case EM of
+ #{FromTo := Map1} -> not match(Map1, Map);
+ #{} -> true
end,
case MapChanged of
true ->
- NewEM = gb_trees:enter(FromTo, Map, EM),
+ NewEM = EM#{FromTo => Map},
S#state{edge_map = NewEM};
false ->
fixpoint
end.
+-spec state__join_in_block(state(), icode_lbl())
+ -> fixpoint | {state(), in_block()}.
+
state__join_in_block(S = #state{fp_ebb_map = Map}, Label) ->
Pred = state__pred(S, Label),
Edges = [{X, Label} || X <- Pred],
- NewInBlock = join_in_block([gb_trees:lookup(X, Map) || X <- Edges]),
+ NewInBlock = join_in_block([maps:find(X, Map) || X <- Edges]),
InBlockLabel = {inblock_in, Label},
- case gb_trees:lookup(InBlockLabel, Map) of
- none ->
- NewMap = gb_trees:insert(InBlockLabel, NewInBlock, Map),
- {S#state{fp_ebb_map = NewMap}, NewInBlock};
- {value, NewInBlock} ->
+ case Map of
+ #{InBlockLabel := NewInBlock} ->
fixpoint;
- _Other ->
- NewMap = gb_trees:update(InBlockLabel, NewInBlock, Map),
+ _ ->
+ NewMap = Map#{InBlockLabel => NewInBlock},
{S#state{fp_ebb_map = NewMap}, NewInBlock}
end.
+-spec state__in_block_out_update(state(), icode_lbl(), in_block())
+ -> state().
+
state__in_block_out_update(S = #state{fp_ebb_map = Map}, Label, NewInBlock) ->
Succ = state__succ(S, Label),
Edges = [{Label, X} || X <- Succ],
NewMap = update_edges(Edges, NewInBlock, Map),
- NewMap1 = gb_trees:enter({inblock_out, Label}, NewInBlock, NewMap),
+ NewMap1 = NewMap#{{inblock_out, Label} => NewInBlock},
S#state{fp_ebb_map = NewMap1}.
+-spec update_edges([edge()], in_block(), fp_ebb_map()) -> fp_ebb_map().
+
update_edges([Edge|Left], NewInBlock, Map) ->
- NewMap = gb_trees:enter(Edge, NewInBlock, Map),
+ NewMap = Map#{Edge => NewInBlock},
update_edges(Left, NewInBlock, NewMap);
update_edges([], _NewInBlock, NewMap) ->
NewMap.
+-spec join_in_block([error | {ok, in_block()}]) -> in_block().
+
join_in_block([]) ->
false;
-join_in_block([none|_]) ->
+join_in_block([error|_]) ->
false;
-join_in_block([{value, InBlock}|Left]) ->
+join_in_block([{ok, InBlock}|Left]) ->
join_in_block(Left, InBlock).
-join_in_block([none|_], _Current) ->
+-spec join_in_block([error | {ok, in_block()}], Current)
+ -> false | Current when
+ Current :: in_block().
+
+join_in_block([error|_], _Current) ->
false;
-join_in_block([{value, InBlock}|Left], Current) ->
+join_in_block([{ok, InBlock}|Left], Current) ->
if Current =:= InBlock -> join_in_block(Left, Current);
Current =:= false -> false;
InBlock =:= false -> false;
@@ -998,19 +1150,25 @@ join_in_block([{value, InBlock}|Left], Current) ->
end;
join_in_block([], Current) ->
Current.
-
+
+
+-spec state__get_in_block_in(state(), icode_lbl()) -> in_block().
state__get_in_block_in(#state{fp_ebb_map = Map}, Label) ->
- gb_trees:get({inblock_in, Label}, Map).
+ maps:get({inblock_in, Label}, Map).
state__get_in_block_out(#state{fp_ebb_map = Map}, Label) ->
- gb_trees:get({inblock_out, Label}, Map).
+ maps:get({inblock_out, Label}, Map).
+-spec new_worklist(state()) -> worklist().
+
new_worklist(#state{cfg = Cfg}) ->
Start = hipe_icode_cfg:start_label(Cfg),
{[Start], [], gb_sets:insert(Start, gb_sets:empty())}.
+-spec get_work(worklist()) -> none | {icode_lbl(), worklist()}.
+
get_work({[Label|Left], List, Set}) ->
{Label, {Left, List, gb_sets:delete(Label, Set)}};
get_work({[], [], _Set}) ->
@@ -1018,6 +1176,8 @@ get_work({[], [], _Set}) ->
get_work({[], List, Set}) ->
get_work({lists:reverse(List), [], Set}).
+-spec add_work(worklist(), [icode_lbl()]) -> worklist().
+
add_work({List1, List2, Set} = Work, [Label|Left]) ->
case gb_sets:is_member(Label, Set) of
true ->
@@ -1030,15 +1190,7 @@ add_work({List1, List2, Set} = Work, [Label|Left]) ->
add_work(WorkList, []) ->
WorkList.
-match(Tree1, Tree2) ->
- match_1(gb_trees:to_list(Tree1), Tree2) andalso
- match_1(gb_trees:to_list(Tree2), Tree1).
+-spec match(var_map(), var_map()) -> boolean().
-match_1([{Key, Val}|Left], Tree2) ->
- case gb_trees:lookup(Key, Tree2) of
- {value, Val} ->
- match_1(Left, Tree2);
- _ -> false
- end;
-match_1([], _) ->
- true.
+match(Tree1, Tree2) when is_map(Tree1), is_map(Tree2) ->
+ Tree1 =:= Tree2.
diff --git a/lib/hipe/icode/hipe_icode_heap_test.erl b/lib/hipe/icode/hipe_icode_heap_test.erl
index 72d3574122..ec754d5ee9 100644
--- a/lib/hipe/icode/hipe_icode_heap_test.erl
+++ b/lib/hipe/icode/hipe_icode_heap_test.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_inline_bifs.erl b/lib/hipe/icode/hipe_icode_inline_bifs.erl
index 4841b56f41..79f67c2db6 100644
--- a/lib/hipe/icode/hipe_icode_inline_bifs.erl
+++ b/lib/hipe/icode/hipe_icode_inline_bifs.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_instruction_counter.erl b/lib/hipe/icode/hipe_icode_instruction_counter.erl
index 183198e5eb..afa70e495b 100644
--- a/lib/hipe/icode/hipe_icode_instruction_counter.erl
+++ b/lib/hipe/icode/hipe_icode_instruction_counter.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_liveness.erl b/lib/hipe/icode/hipe_icode_liveness.erl
index 2d12bacc36..317d2e54c2 100644
--- a/lib/hipe/icode/hipe_icode_liveness.erl
+++ b/lib/hipe/icode/hipe_icode_liveness.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_mulret.erl b/lib/hipe/icode/hipe_icode_mulret.erl
index d0a0530ef5..d927a46222 100644
--- a/lib/hipe/icode/hipe_icode_mulret.erl
+++ b/lib/hipe/icode/hipe_icode_mulret.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_pp.erl b/lib/hipe/icode/hipe_icode_pp.erl
index 749f32e87c..a736b54c38 100644
--- a/lib/hipe/icode/hipe_icode_pp.erl
+++ b/lib/hipe/icode/hipe_icode_pp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_primops.erl b/lib/hipe/icode/hipe_icode_primops.erl
index a0deb31c42..cee37b6a57 100644
--- a/lib/hipe/icode/hipe_icode_primops.erl
+++ b/lib/hipe/icode/hipe_icode_primops.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_primops.hrl b/lib/hipe/icode/hipe_icode_primops.hrl
index 7cfc8389ff..a0aee165ba 100644
--- a/lib/hipe/icode/hipe_icode_primops.hrl
+++ b/lib/hipe/icode/hipe_icode_primops.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_range.erl b/lib/hipe/icode/hipe_icode_range.erl
index 9a20527a83..12ed796690 100644
--- a/lib/hipe/icode/hipe_icode_range.erl
+++ b/lib/hipe/icode/hipe_icode_range.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -89,6 +89,7 @@
ret_type :: range(),
lookup_fun :: call_fun(),
result_action :: final_fun()}).
+-type state() :: #state{}.
-define(WIDEN, 1).
@@ -172,7 +173,7 @@ analyse(Cfg, Data) ->
catch throw:no_input -> ok
end.
--spec safe_analyse(cfg(), data()) -> #state{}.
+-spec safe_analyse(cfg(), data()) -> state().
safe_analyse(CFG, Data={MFA,_,_,_}) ->
State = state__init(CFG, Data),
@@ -181,14 +182,14 @@ safe_analyse(CFG, Data={MFA,_,_,_}) ->
(state__result_action(NewState))(MFA, [state__ret_type(NewState)]),
NewState.
--spec rewrite_blocks(#state{}) -> #state{}.
+-spec rewrite_blocks(state()) -> state().
rewrite_blocks(State) ->
CFG = state__cfg(State),
Start = hipe_icode_cfg:start_label(CFG),
rewrite_blocks([Start], State, [Start]).
--spec rewrite_blocks([label()], #state{}, [label()]) -> #state{}.
+-spec rewrite_blocks([label()], state(), [label()]) -> state().
rewrite_blocks([Next|Rest], State, Visited) ->
Info = state__info_in(State, Next),
@@ -201,7 +202,7 @@ rewrite_blocks([Next|Rest], State, Visited) ->
rewrite_blocks([], State, _) ->
State.
--spec analyse_blocks(#state{}, work_list()) -> #state{}.
+-spec analyse_blocks(state(), work_list()) -> state().
analyse_blocks(State, Work) ->
case get_work(Work) of
@@ -218,7 +219,7 @@ analyse_blocks(State, Work) ->
analyse_blocks(NewState, NewWork2)
end.
--spec analyse_block(label(), info(), #state{}, boolean()) -> {#state{}, [label()]}.
+-spec analyse_block(label(), info(), state(), boolean()) -> {state(), [label()]}.
analyse_block(Label, Info, State, Rewrite) ->
BB = state__bb(State, Label),
@@ -612,36 +613,32 @@ analyse_if(If, Info, Rewrite) ->
{#icode_goto{} | #icode_if{}, [{label(), info()}]}.
analyse_sane_if(If, Info, [Arg1, Arg2], [Range1, Range2], Rewrite) ->
- case normalize_name(hipe_icode:if_op(If)) of
- '>' ->
- {TrueRange2, TrueRange1, FalseRange2, FalseRange1} =
- range_inequality_propagation(Range2, Range1);
- '<' ->
- {TrueRange1, TrueRange2, FalseRange1, FalseRange2} =
+ {TrueRange1, TrueRange2, FalseRange1, FalseRange2} =
+ case normalize_name(hipe_icode:if_op(If)) of
+ '>' ->
+ {TR2, TR1, FR2, FR1} = range_inequality_propagation(Range2, Range1),
+ {TR1, TR2, FR1, FR2};
+ '<' ->
range_inequality_propagation(Range1, Range2);
- '>=' ->
- {FalseRange1, FalseRange2, TrueRange1, TrueRange2} =
- range_inequality_propagation(Range1, Range2);
- '=<' ->
- {FalseRange2, FalseRange1, TrueRange2, TrueRange1} =
- range_inequality_propagation(Range2, Range1);
- '=:=' ->
- {TrueRange1, TrueRange2, FalseRange1, FalseRange2} =
- range_equality_propagation(Range1, Range2);
- '=/=' ->
- {FalseRange1, FalseRange2, TrueRange1, TrueRange2} =
- range_equality_propagation(Range1, Range2);
- '==' ->
- {TempTrueRange1, TempTrueRange2, FalseRange1, FalseRange2} =
- range_equality_propagation(Range1, Range2),
- TrueRange1 = set_other(TempTrueRange1, other(Range1)),
- TrueRange2 = set_other(TempTrueRange2, other(Range2));
- '/=' ->
- {TempFalseRange1, TempFalseRange2, TrueRange1, TrueRange2} =
- range_equality_propagation(Range1, Range2),
- FalseRange1 = set_other(TempFalseRange1, other(Range1)),
- FalseRange2 = set_other(TempFalseRange2, other(Range2))
- end,
+ '>=' ->
+ {FR1, FR2, TR1, TR2} = range_inequality_propagation(Range1, Range2),
+ {TR1, TR2, FR1, FR2};
+ '=<' ->
+ {FR2, FR1, TR2, TR1} = range_inequality_propagation(Range2, Range1),
+ {TR1, TR2, FR1, FR2};
+ '=:=' ->
+ {TR1, TR2, FR1, FR2} = range_equality_propagation(Range1, Range2),
+ {TR1, TR2, FR1, FR2};
+ '=/=' ->
+ {FR1, FR2, TR1, TR2} = range_equality_propagation(Range1, Range2),
+ {TR1, TR2, FR1, FR2};
+ '==' ->
+ {TR1, TR2, FR1, FR2} = range_equality_propagation(Range1, Range2),
+ {set_other(TR1,other(Range1)), set_other(TR2,other(Range2)), FR1, FR2};
+ '/=' ->
+ {FR1, FR2, TR1, TR2} = range_equality_propagation(Range1, Range2),
+ {TR1, TR2, set_other(FR1,other(Range1)), set_other(FR2,other(Range2))}
+ end,
%% io:format("TR1 = ~w\nTR2 = ~w\n", [TrueRange1, TrueRange2]),
True =
case lists:all(fun range__is_none/1, [TrueRange1, TrueRange2]) of
@@ -694,26 +691,24 @@ normalize_name(Name) ->
-spec range_equality_propagation(range(), range()) ->
{range(), range(), range(), range()}.
-range_equality_propagation(Range_1, Range_2) ->
- True_range = inf(Range_1, Range_2),
- case {range(Range_1), range(Range_2)} of
- {{N,N}, {N,N}} ->
- False_range_1 = none_range(),
- False_range_2 = none_range();
- {{N1,N1}, {N2,N2}} ->
- False_range_1 = Range_1,
- False_range_2 = Range_2;
- {{N,N}, _} ->
- False_range_1 = Range_1,
- {_,False_range_2} = compare_with_integer(N, Range_2);
- {_, {N,N}} ->
- False_range_2 = Range_2,
- {_,False_range_1} = compare_with_integer(N, Range_1);
- {_, _} ->
- False_range_1 = Range_1,
- False_range_2 = Range_2
- end,
- {True_range, True_range, False_range_1, False_range_2}.
+range_equality_propagation(Range1, Range2) ->
+ TrueRange = inf(Range1, Range2),
+ {FalseRange1, FalseRange2} =
+ case {range(Range1), range(Range2)} of
+ {{N,N}, {N,N}} ->
+ {none_range(), none_range()};
+ {{N1,N1}, {N2,N2}} ->
+ {Range1, Range2};
+ {{N,N}, _} ->
+ {_,FR2} = compare_with_integer(N, Range2),
+ {Range1, FR2};
+ {_, {N,N}} ->
+ {_,FR1} = compare_with_integer(N, Range1),
+ {FR1, Range2};
+ {_, _} ->
+ {Range1, Range2}
+ end,
+ {TrueRange, TrueRange, FalseRange1, FalseRange2}.
-spec range_inequality_propagation(range(), range()) ->
{range(), range(), range(), range()}.
@@ -779,18 +774,17 @@ analyse_type(Type, Info, Rewrite) ->
TypeTest = hipe_icode:type_test(Type),
[Arg|_] = hipe_icode:type_args(Type),
OldVarRange = get_range_from_arg(Arg),
- case TypeTest of
- {integer, N} ->
- {TrueRange,FalseRange} = compare_with_integer(N,OldVarRange);
- integer ->
- TrueRange = inf(any_range(), OldVarRange),
- FalseRange = inf(none_range(), OldVarRange);
- number ->
- TrueRange = FalseRange = OldVarRange;
- _ ->
- TrueRange = inf(none_range(), OldVarRange),
- FalseRange = OldVarRange
- end,
+ {TrueRange, FalseRange} =
+ case TypeTest of
+ {integer, N} ->
+ compare_with_integer(N, OldVarRange);
+ integer ->
+ {inf(any_range(), OldVarRange), inf(none_range(), OldVarRange)};
+ number ->
+ {OldVarRange, OldVarRange};
+ _ ->
+ {inf(none_range(), OldVarRange), OldVarRange}
+ end,
TrueLabel = hipe_icode:type_true_label(Type),
FalseLabel = hipe_icode:type_false_label(Type),
TrueInfo = enter_define({Arg, TrueRange}, Info),
@@ -1201,14 +1195,12 @@ basic_type(#unsafe_update_element{}) -> not_analysed.
analyse_bs_get_integer(Size, Flags, true) ->
Signed = Flags band 4,
- if Signed =:= 0 ->
- Max = inf_add(inf_bsl(1, Size), -1),
- Min = 0;
- true ->
- Max = inf_add(inf_bsl(1, Size-1), -1),
- Min = inf_inv(inf_bsl(1, Size-1))
- end,
- {Min, Max};
+ case Signed =:= 0 of
+ true ->
+ {0, inf_add(inf_bsl(1, Size), -1)}; % return {Min, Max}
+ false ->
+ {inf_inv(inf_bsl(1, Size-1)), inf_add(inf_bsl(1, Size-1), -1)}
+ end;
analyse_bs_get_integer(Size, Flags, false) when is_integer(Size),
is_integer(Flags) ->
any_r().
@@ -1653,7 +1645,7 @@ inf_bsl(Number1, Number2) when is_integer(Number1), is_integer(Number2) ->
%% State
--spec state__init(cfg(), data()) -> #state{}.
+-spec state__init(cfg(), data()) -> state().
state__init(Cfg, {MFA, ArgsFun, CallFun, FinalFun}) ->
Start = hipe_icode_cfg:start_label(Cfg),
@@ -1676,19 +1668,19 @@ state__init(Cfg, {MFA, ArgsFun, CallFun, FinalFun}) ->
lookup_fun=CallFun, result_action=FinalFun}
end.
--spec state__cfg(#state{}) -> cfg().
+-spec state__cfg(state()) -> cfg().
state__cfg(#state{cfg=Cfg}) ->
Cfg.
--spec state__bb(#state{}, label()) -> bb().
+-spec state__bb(state(), label()) -> bb().
state__bb(#state{cfg=Cfg}, Label) ->
BB = hipe_icode_cfg:bb(Cfg, Label),
true = hipe_bb:is_bb(BB), % Just an assert
BB.
--spec state__bb_add(#state{}, label(), bb()) -> #state{}.
+-spec state__bb_add(state(), label(), bb()) -> state().
state__bb_add(S=#state{cfg=Cfg}, Label, BB) ->
NewCfg = hipe_icode_cfg:bb_add(Cfg, Label, BB),
@@ -1774,14 +1766,12 @@ join_info_in([Var|Left], Info1, Info2, Acc, Changed) ->
NewTree = gb_trees:insert(Var, Val, Acc),
join_info_in(Left, Info1, Info2, NewTree, Changed);
{{value, Val1}, {value, Val2}} ->
- NewVal =
+ {NewChanged, NewVal} =
case sup(Val1, Val2) of
Val1 ->
- NewChanged = Changed,
- Val1;
+ {Changed, Val1};
Val ->
- NewChanged = true,
- Val
+ {true, Val}
end,
NewTree = gb_trees:insert(Var, NewVal, Acc),
join_info_in(Left, Info1, Info2, NewTree, NewChanged)
diff --git a/lib/hipe/icode/hipe_icode_split_arith.erl b/lib/hipe/icode/hipe_icode_split_arith.erl
index 4f6a79411b..e00a13f82e 100644
--- a/lib/hipe/icode/hipe_icode_split_arith.erl
+++ b/lib/hipe/icode/hipe_icode_split_arith.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_ssa.erl b/lib/hipe/icode/hipe_icode_ssa.erl
index 3d8f18867d..b222fbc7d2 100644
--- a/lib/hipe/icode/hipe_icode_ssa.erl
+++ b/lib/hipe/icode/hipe_icode_ssa.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_ssa_const_prop.erl b/lib/hipe/icode/hipe_icode_ssa_const_prop.erl
index bfa4c0fc61..4ab4d7e95d 100644
--- a/lib/hipe/icode/hipe_icode_ssa_const_prop.erl
+++ b/lib/hipe/icode/hipe_icode_ssa_const_prop.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_ssa_copy_prop.erl b/lib/hipe/icode/hipe_icode_ssa_copy_prop.erl
index ae2f32fd2c..5e5bd2a178 100644
--- a/lib/hipe/icode/hipe_icode_ssa_copy_prop.erl
+++ b/lib/hipe/icode/hipe_icode_ssa_copy_prop.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/icode/hipe_icode_ssa_struct_reuse.erl b/lib/hipe/icode/hipe_icode_ssa_struct_reuse.erl
index e350a6ff18..7613024787 100644
--- a/lib/hipe/icode/hipe_icode_ssa_struct_reuse.erl
+++ b/lib/hipe/icode/hipe_icode_ssa_struct_reuse.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -314,7 +314,7 @@ node_create(Label, Pred, Succ) ->
%% tree - the tree of nodes, with labels as keys and node records as values
-record(nodes, {
- domtree :: hipe_dominators:domTree(),
+ domtree = none :: 'none' | hipe_dominators:domTree(),
labels = none :: 'none' | [icode_lbl()],
postorder = none :: 'none' | [icode_lbl()],
start_label = none :: 'none' | icode_lbl(),
@@ -390,7 +390,7 @@ update_del_red_test_set(Update) ->
%%-----------------------------------------------------------------------------
%% Main function called from the hipe_main module
--spec struct_reuse(#cfg{}) -> #cfg{}.
+-spec struct_reuse(cfg()) -> cfg().
struct_reuse(CFG) ->
%% debug_init_case_count(?SR_INSTR_TYPE),
diff --git a/lib/hipe/icode/hipe_icode_type.erl b/lib/hipe/icode/hipe_icode_type.erl
index fd81915f9f..794c27ebcc 100644
--- a/lib/hipe/icode/hipe_icode_type.erl
+++ b/lib/hipe/icode/hipe_icode_type.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -105,6 +105,7 @@
ret_type = [t_none()] :: [erl_types:erl_type()],
lookupfun :: call_fun(),
resultaction :: final_fun()}).
+-type state() :: #state{}.
%%-----------------------------------------------------------------------
%% The main exported function
@@ -193,7 +194,7 @@ analyse(Cfg, Data) ->
catch throw:no_input -> ok % No need to do anything since we have no input
end.
--spec safe_analyse(cfg(), data()) -> #state{}.
+-spec safe_analyse(cfg(), data()) -> state().
safe_analyse(Cfg, {MFA,_,_,_}=Data) ->
State = new_state(Cfg, Data),
@@ -363,6 +364,7 @@ call_always_fails(#icode_call{} = I, Info) ->
%% These can actually be calls too.
{erlang, halt, 0} -> false;
{erlang, halt, 1} -> false;
+ {erlang, halt, 2} -> false;
{erlang, exit, 1} -> false;
{erlang, error, 1} -> false;
{erlang, error, 2} -> false;
@@ -460,24 +462,24 @@ integer_range_inequality_propagation(Op, A1, A2, TrueLab, FalseLab, Info) ->
NonIntArg1 = t_subtract(Arg1, t_integer()),
NonIntArg2 = t_subtract(Arg2, t_integer()),
?ineq_debug("nonintargs", [NonIntArg1,NonIntArg2]),
- case t_is_none(IntArg1) or t_is_none(IntArg2) of
+ case t_is_none(IntArg1) orelse t_is_none(IntArg2) of
true ->
?ineq_debug("one is none", [IntArg1,IntArg2]),
[{TrueLab, Info}, {FalseLab, Info}];
false ->
- case Op of
- '>=' ->
- {FalseArg1, FalseArg2, TrueArg1, TrueArg2} =
- integer_range_less_then_propagator(IntArg1, IntArg2);
- '>' ->
- {TrueArg2, TrueArg1, FalseArg2, FalseArg1} =
- integer_range_less_then_propagator(IntArg2, IntArg1);
- '<' ->
- {TrueArg1, TrueArg2, FalseArg1, FalseArg2} =
- integer_range_less_then_propagator(IntArg1, IntArg2);
- '=<' ->
- {FalseArg2, FalseArg1, TrueArg2, TrueArg1} =
- integer_range_less_then_propagator(IntArg2, IntArg1)
+ {TrueArg1, TrueArg2, FalseArg1, FalseArg2} =
+ case Op of
+ '>=' ->
+ {FA1, FA2, TA1, TA2} = int_range_lt_propagator(IntArg1, IntArg2),
+ {TA1, TA2, FA1, FA2};
+ '>' ->
+ {TA2, TA1, FA2, FA1} = int_range_lt_propagator(IntArg2, IntArg1),
+ {TA1, TA2, FA1, FA2};
+ '<' ->
+ int_range_lt_propagator(IntArg1, IntArg2);
+ '=<' ->
+ {FA2, FA1, TA2, TA1} = int_range_lt_propagator(IntArg2, IntArg1),
+ {TA1, TA2, FA1, FA2}
end,
?ineq_debug("int res", [TrueArg1, TrueArg2, FalseArg1, FalseArg2]),
False = {FalseLab, enter(A1, t_sup(FalseArg1, NonIntArg1),
@@ -487,7 +489,7 @@ integer_range_inequality_propagation(Op, A1, A2, TrueLab, FalseLab, Info) ->
[True, False]
end.
-integer_range_less_then_propagator(IntArg1, IntArg2) ->
+int_range_lt_propagator(IntArg1, IntArg2) ->
Min1 = number_min(IntArg1),
Max1 = number_max(IntArg1),
Min2 = number_min(IntArg2),
diff --git a/lib/hipe/icode/hipe_icode_type.hrl b/lib/hipe/icode/hipe_icode_type.hrl
index ba2b51e4f5..466e157646 100644
--- a/lib/hipe/icode/hipe_icode_type.hrl
+++ b/lib/hipe/icode/hipe_icode_type.hrl
@@ -1,7 +1,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/llvm/Makefile b/lib/hipe/llvm/Makefile
index f6f6f6be1c..88016a7d8b 100644
--- a/lib/hipe/llvm/Makefile
+++ b/lib/hipe/llvm/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2014. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -40,20 +40,19 @@ RELSYSDIR = $(RELEASE_PATH)/lib/hipe-$(VSN)
# Target Specs
# ----------------------------------------------------
ifdef HIPE_ENABLED
-HIPE_MODULES = hipe_rtl_to_llvm \
+HIPE_MODULES = elf_format \
hipe_llvm \
- elf_format \
+ hipe_llvm_liveness \
hipe_llvm_main \
hipe_llvm_merge \
- hipe_llvm_liveness
+ hipe_rtl_to_llvm
else
HIPE_MODULES =
endif
MODULES = $(HIPE_MODULES)
-HRL_FILES= elf_format.hrl elf32_format.hrl elf64_format.hrl \
- hipe_llvm_arch.hrl
+HRL_FILES= elf_format.hrl elf32_format.hrl elf64_format.hrl hipe_llvm_arch.hrl
ERL_FILES= $(MODULES:%=%.erl)
TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
@@ -71,7 +70,7 @@ TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
include ../native.mk
-ERL_COMPILE_FLAGS += +inline #+warn_missing_spec
+ERL_COMPILE_FLAGS += -Werror +inline +warn_export_vars #+warn_missing_spec
# if in 32 bit backend define BIT32 symbol
ARCH = $(shell echo $(TARGET) | sed 's/^\(x86_64\)-.*/64bit/')
@@ -108,3 +107,11 @@ release_spec: opt
$(INSTALL_DATA) $(TARGET_FILES) $(RELSYSDIR)/ebin
release_docs_spec:
+
+$(EBIN)/elf_format.beam: elf_format.hrl elf32_format.hrl elf64_format.hrl
+$(EBIN)/hipe_llvm_main.beam: ../../kernel/src/hipe_ext_format.hrl \
+ hipe_llvm_arch.hrl elf_format.hrl elf32_format.hrl elf64_format.hrl
+$(EBIN)/hipe_llvm_merge.beam: ../../kernel/src/hipe_ext_format.hrl \
+ hipe_llvm_arch.hrl ../rtl/hipe_literals.hrl ../main/hipe.hrl
+$(EBIN)/hipe_rtl_to_llvm.beam: ../rtl/hipe_rtl.hrl ../rtl/hipe_literals.hrl \
+ hipe_llvm_arch.hrl
diff --git a/lib/hipe/llvm/elf_format.erl b/lib/hipe/llvm/elf_format.erl
index 260da9b5e6..8cf6ea6250 100644
--- a/lib/hipe/llvm/elf_format.erl
+++ b/lib/hipe/llvm/elf_format.erl
@@ -13,21 +13,20 @@
-module(elf_format).
--export([get_tab_entries/1,
- %% Relocations
- get_rodata_relocs/1,
- get_text_relocs/1,
+-export([%% Relocations
extract_rela/2,
- get_rela_addends/1,
%% Note
extract_note/2,
%% Executable code
extract_text/1,
%% GCC Exception Table
- get_exn_handlers/1,
- %% Misc.
- set_architecture_flag/1,
- is64bit/0
+ get_exn_handlers/1,
+ %% Symbols
+ elf_symbols/1,
+ %% Sections
+ section_contents/2,
+ %% Main interface
+ read/1
]).
-include("elf_format.hrl").
@@ -36,27 +35,57 @@
%% Types
%%------------------------------------------------------------------------------
--type elf() :: binary().
-
--type lp() :: non_neg_integer(). % landing pad
--type num() :: non_neg_integer().
--type index() :: non_neg_integer().
--type offset() :: non_neg_integer().
--type size() :: non_neg_integer().
--type start() :: non_neg_integer().
-
--type info() :: index().
--type nameoff() :: offset().
--type valueoff() :: offset().
-
--type name() :: string().
--type name_size() :: {name(), size()}.
--type name_sizes() :: [name_size()].
+-export_type([elf/0
+ ,addend/0
+ ,bitflags/0
+ ,name/0
+ ,offset/0
+ ,reloc_type/0
+ ,shdr_type/0
+ ,size/0
+ ,sym_bind/0
+ ,sym_type/0
+ ,valueoff/0
+ ]).
+
+-type bitflags() :: non_neg_integer().
+-type index() :: non_neg_integer().
+-type lp() :: non_neg_integer(). % landing pad
+-type num() :: non_neg_integer().
+-type offset() :: non_neg_integer().
+-type size() :: non_neg_integer().
+-type start() :: non_neg_integer().
+
+-type addend() :: integer() | undefined.
+-type name() :: string().
+-type shdr_type() :: 'null' | 'progbits' | 'symtab' | 'strtab' | 'rela'
+ | 'hash' | 'dynamic' | 'note' | 'nobits' | 'rel' | 'shlib'
+ | 'dynsym' | {os, ?SHT_LOOS..?SHT_HIOS}
+ | {proc, ?SHT_LOPROC..?SHT_HIPROC}.
+-type sym_bind() :: 'local' | 'global' | 'weak' | {os, ?STB_LOOS..?STB_HIOS}
+ | {proc, ?STB_LOPROC..?STB_HIPROC}.
+-type sym_type() :: 'notype' | 'object' | 'func' | 'section' | 'file'
+ | {os, ?STT_LOOS..?STT_HIOS}
+ | {proc, ?STT_LOPROC..?STT_HIPROC}.
+-type valueoff() :: offset().
+
+-ifdef(BIT32). % 386
+-type reloc_type() :: '32' | 'pc32'.
+-else. % X86_64
+-type reloc_type() :: '64' | 'pc32' | '32'.
+-endif.
%%------------------------------------------------------------------------------
%% Abstract Data Types and Accessors for ELF Structures.
%%------------------------------------------------------------------------------
+-record(elf, {file :: binary()
+ ,sections :: [elf_shdr()]
+ ,sec_nam :: #{string() => elf_shdr()}
+ ,symbols :: undefined | [elf_sym()]
+ }).
+-opaque elf() :: #elf{}.
+
%% File header
-record(elf_ehdr, {ident, % ELF identification
type, % Object file type
@@ -85,42 +114,6 @@
}).
%% -type elf_ehdr_ident() :: #elf_ehdr_ident{}.
-%% Section header entries
--record(elf_shdr, {name, % Section name
- type, % Section type
- flags, % Section attributes
- addr, % Virtual address in memory
- offset :: offset(), % Offset in file
- size :: size(), % Size of section
- link, % Link to other section
- info, % Miscellaneous information
- addralign, % Address align boundary
- entsize % Size of entries, if section has table
- }).
-%% -type elf_shdr() :: #elf_shdr{}.
-
-%% Symbol table entries
--record(elf_sym, {name :: nameoff(), % Symbol name
- info, % Type and Binding attributes
- other, % Reserved
- shndx, % Section table index
- value :: valueoff(), % Symbol value
- size :: size() % Size of object
- }).
--type elf_sym() :: #elf_sym{}.
-
-%% Relocations
--record(elf_rel, {r_offset :: offset(), % Address of reference
- r_info :: info() % Symbol index and type of relocation
- }).
--type elf_rel() :: #elf_rel{}.
-
--record(elf_rela, {r_offset :: offset(), % Address of reference
- r_info :: info(), % Symbol index and type of relocation
- r_addend :: offset() % Constant part of expression
- }).
--type elf_rela() :: #elf_rela{}.
-
%% %% Program header table
%% -record(elf_phdr, {type, % Type of segment
%% flags, % Segment attributes
@@ -199,44 +192,19 @@ mk_shdr(Name, Type, Flags, Addr, Offset, Size, Link, Info, AddrAlign, EntSize) -
%%%-------------------------
%%% Symbol Table Entries
%%%-------------------------
-mk_sym(Name, Info, Other, Shndx, Value, Size) ->
- #elf_sym{name = Name, info = Info, other = Other,
- shndx = Shndx, value = Value, size = Size}.
-
--spec sym_name(elf_sym()) -> nameoff().
-sym_name(#elf_sym{name = Name}) -> Name.
+mk_sym(Name, Bind, Type, Section, Value, Size) ->
+ #elf_sym{name = Name, bind = Bind, type = Type,
+ section = Section, value = Value, size = Size}.
+%% -spec sym_name(elf_sym()) -> string().
+%% sym_name(#elf_sym{name = Name}) -> Name.
+%%
%% -spec sym_value(elf_sym()) -> valueoff().
%% sym_value(#elf_sym{value = Value}) -> Value.
%%
%% -spec sym_size(elf_sym()) -> size().
%% sym_size(#elf_sym{size = Size}) -> Size.
-%%%-------------------------
-%%% Relocations
-%%%-------------------------
--spec mk_rel(offset(), info()) -> elf_rel().
-mk_rel(Offset, Info) ->
- #elf_rel{r_offset = Offset, r_info = Info}.
-
-%% The following two functions capitalize on the fact that the two kinds of
-%% relocation records (for 32- and 64-bit architectures have similar structure.
-
--spec r_offset(elf_rel() | elf_rela()) -> offset().
-r_offset(#elf_rel{r_offset = Offset}) -> Offset;
-r_offset(#elf_rela{r_offset = Offset}) -> Offset.
-
--spec r_info(elf_rel() | elf_rela()) -> info().
-r_info(#elf_rel{r_info = Info}) -> Info;
-r_info(#elf_rela{r_info = Info}) -> Info.
-
--spec mk_rela(offset(), info(), offset()) -> elf_rela().
-mk_rela(Offset, Info, Addend) ->
- #elf_rela{r_offset = Offset, r_info = Info, r_addend = Addend}.
-
--spec rela_addend(elf_rela()) -> offset().
-rela_addend(#elf_rela{r_addend = Addend}) -> Addend.
-
%% %%%-------------------------
%% %%% GCC exception table
%% %%%-------------------------
@@ -263,15 +231,30 @@ mk_gccexntab_callsite(Start, Size, LP, Action) ->
%% gccexntab_callsite_lp(#elf_gccexntab_callsite{lp = LP}) -> LP.
%%------------------------------------------------------------------------------
+%% Main interface function
+%%------------------------------------------------------------------------------
+
+%% @doc Parses an ELF file.
+-spec read(binary()) -> elf().
+read(ElfBin) ->
+ Header = extract_header(ElfBin),
+ [_UndefinedSec|Sections] = extract_shdrtab(ElfBin, Header),
+ SecNam = maps:from_list(
+ [{Name, Sec} || Sec = #elf_shdr{name=Name} <- Sections]),
+ Elf0 = #elf{file=ElfBin, sections=Sections, sec_nam=SecNam},
+ [_UndefinedSym|Symbols] = extract_symtab(Elf0, extract_strtab(Elf0)),
+ Elf0#elf{symbols=Symbols}.
+
+%%------------------------------------------------------------------------------
%% Functions to manipulate the ELF File Header
%%------------------------------------------------------------------------------
%% @doc Extracts the File Header from an ELF formatted object file. Also sets
%% the ELF class variable in the process dictionary (used by many functions
%% in this and hipe_llvm_main modules).
--spec extract_header(elf()) -> elf_ehdr().
-extract_header(Elf) ->
- Ehdr_bin = get_binary_segment(Elf, 0, ?ELF_EHDR_SIZE),
+-spec extract_header(binary()) -> elf_ehdr().
+extract_header(ElfBin) ->
+ Ehdr_bin = get_binary_segment(ElfBin, 0, ?ELF_EHDR_SIZE),
<< %% Structural pattern matching on fields.
Ident_bin:?E_IDENT_SIZE/binary,
Type:?bits(?E_TYPE_SIZE)/integer-little,
@@ -300,19 +283,28 @@ extract_header(Elf) ->
%% Functions to manipulate Section Header Entries
%%------------------------------------------------------------------------------
+-type shdrtab() :: [elf_shdr()].
+
%% @doc Extracts the Section Header Table from an ELF formated Object File.
-extract_shdrtab(Elf) ->
- %% Extract File Header to get info about Section Header Offset (in bytes),
- %% Entry Size (in bytes) and Number of entries
- #elf_ehdr{shoff = ShOff, shentsize = ShEntsize, shnum = ShNum} =
- extract_header(Elf),
+-spec extract_shdrtab(binary(), elf_ehdr()) -> shdrtab().
+extract_shdrtab(ElfBin, #elf_ehdr{shoff=ShOff, shentsize=?ELF_SHDRENTRY_SIZE,
+ shnum=ShNum, shstrndx=ShStrNdx}) ->
%% Get actual Section header table (binary)
- ShdrBin = get_binary_segment(Elf, ShOff, ShNum * ShEntsize),
- get_shdrtab_entries(ShdrBin, []).
-
-get_shdrtab_entries(<<>>, Acc) ->
- lists:reverse(Acc);
-get_shdrtab_entries(ShdrBin, Acc) ->
+ ShdrBin = get_binary_segment(ElfBin, ShOff, ShNum * ?ELF_SHDRENTRY_SIZE),
+ %% We need to lookup the offset and size of the section header string table
+ %% before we can fully parse the section table. We compute its offset and
+ %% extract the fields we need here.
+ ShStrEntryOffset = ShStrNdx * ?ELF_SHDRENTRY_SIZE,
+ <<_:ShStrEntryOffset/binary, _:?SH_NAME_SIZE/binary,
+ _:?SH_TYPE_SIZE/binary, _:?SH_FLAGS_SIZE/binary, _:?SH_ADDR_SIZE/binary,
+ ShStrOffset:?bits(?SH_OFFSET_SIZE)/little,
+ ShStrSize:?bits(?SH_SIZE_SIZE)/little,
+ _/binary>> = ShdrBin,
+ ShStrTab = parse_strtab(get_binary_segment(ElfBin, ShStrOffset, ShStrSize)),
+ get_shdrtab_entries(ShdrBin, ShStrTab).
+
+get_shdrtab_entries(<<>>, _ShStrTab) -> [];
+get_shdrtab_entries(ShdrTab, ShStrTab) ->
<<%% Structural pattern matching on fields.
Name:?bits(?SH_NAME_SIZE)/integer-little,
Type:?bits(?SH_TYPE_SIZE)/integer-little,
@@ -324,205 +316,166 @@ get_shdrtab_entries(ShdrBin, Acc) ->
Info:?bits(?SH_INFO_SIZE)/integer-little,
Addralign:?bits(?SH_ADDRALIGN_SIZE)/integer-little,
Entsize:?bits(?SH_ENTSIZE_SIZE)/integer-little,
- MoreShdrE/binary
- >> = ShdrBin,
- ShdrE = mk_shdr(Name, Type, Flags, Addr, Offset,
- Size, Link, Info, Addralign, Entsize),
- get_shdrtab_entries(MoreShdrE, [ShdrE | Acc]).
-
-%% @doc Extracts a specific Entry of a Section Header Table. This function
-%% takes as argument the Section Header Table (`SHdrTab') and the entry's
-%% serial number (`EntryNum') and returns the entry (`shdr').
-get_shdrtab_entry(SHdrTab, EntryNum) ->
- lists:nth(EntryNum + 1, SHdrTab).
-
-%%------------------------------------------------------------------------------
-%% Functions to manipulate Section Header String Table
-%%------------------------------------------------------------------------------
-
-%% @doc Extracts the Section Header String Table. This section is not a known
-%% ELF Object File section. It is just a "hidden" table storing the
-%% names of all sections that exist in current object file.
--spec extract_shstrtab(elf()) -> [name()].
-extract_shstrtab(Elf) ->
- %% Extract Section Name String Table Index
- #elf_ehdr{shstrndx = ShStrNdx} = extract_header(Elf),
- ShHdrTab = extract_shdrtab(Elf),
- %% Extract Section header entry and get actual Section-header String Table
- #elf_shdr{offset = ShStrOffset, size = ShStrSize} =
- get_shdrtab_entry(ShHdrTab, ShStrNdx),
- case get_binary_segment(Elf, ShStrOffset, ShStrSize) of
- <<>> -> %% Segment empty
- [];
- ShStrTab -> %% Convert to string table
- [Name || {Name, _Size} <- get_names(ShStrTab)]
- end.
-
-%%------------------------------------------------------------------------------
-
--spec get_tab_entries(elf()) -> [{name(), valueoff(), size()}].
-get_tab_entries(Elf) ->
- SymTab = extract_symtab(Elf),
- Ts = [{Name, Value, Size div ?ELF_XWORD_SIZE}
- || #elf_sym{name = Name, value = Value, size = Size} <- SymTab,
- Name =/= 0],
- {NameIndices, ValueOffs, Sizes} = lists:unzip3(Ts),
- %% Find the names of the symbols.
- %% Get string table entries ([{Name, Offset in strtab section}]). Keep only
- %% relevant entries:
- StrTab = extract_strtab(Elf),
- Relevant = [get_strtab_entry(StrTab, Off) || Off <- NameIndices],
- %% Zip back to {Name, ValueOff, Size}
- lists:zip3(Relevant, ValueOffs, Sizes).
+ Rest/binary
+ >> = ShdrTab,
+ Entry = mk_shdr(get_strtab_entry(Name, ShStrTab), decode_shdr_type(Type),
+ Flags, Addr, Offset, Size, Link, Info, Addralign, Entsize),
+ [Entry | get_shdrtab_entries(Rest, ShStrTab)].
+
+decode_shdr_type(?SHT_NULL) -> 'null';
+decode_shdr_type(?SHT_PROGBITS) -> 'progbits';
+decode_shdr_type(?SHT_SYMTAB) -> 'symtab';
+decode_shdr_type(?SHT_STRTAB) -> 'strtab';
+decode_shdr_type(?SHT_RELA) -> 'rela';
+decode_shdr_type(?SHT_HASH) -> 'hash'; %unused
+decode_shdr_type(?SHT_DYNAMIC) -> 'dynamic'; %unused
+decode_shdr_type(?SHT_NOTE) -> 'note'; %unused
+decode_shdr_type(?SHT_NOBITS) -> 'nobits';
+decode_shdr_type(?SHT_REL) -> 'rel';
+decode_shdr_type(?SHT_SHLIB) -> 'shlib'; %unused
+decode_shdr_type(?SHT_DYNSYM) -> 'dynsym'; %unused
+decode_shdr_type(OS) when ?SHT_LOOS =< OS, OS =< ?SHT_HIOS -> {os, OS};
+decode_shdr_type(Proc) when ?SHT_LOPROC =< Proc, Proc =< ?SHT_HIPROC ->
+ {proc, Proc}.
+
+-spec elf_section(non_neg_integer(), elf()) -> undefined | abs | elf_shdr().
+elf_section(0, #elf{}) -> undefined;
+elf_section(?SHN_ABS, #elf{}) -> abs;
+elf_section(Index, #elf{sections=SecIdx}) ->
+ lists:nth(Index, SecIdx).
+
+%% Reads the contents of a section from an object
+-spec section_contents(elf_shdr(), elf()) -> binary().
+section_contents(#elf_shdr{offset=Offset, size=Size}, #elf{file=ElfBin}) ->
+ get_binary_segment(ElfBin, Offset, Size).
%%------------------------------------------------------------------------------
%% Functions to manipulate Symbol Table
%%------------------------------------------------------------------------------
%% @doc Function that extracts Symbol Table from an ELF Object file.
-extract_symtab(Elf) ->
- Symtab_bin = extract_segment_by_name(Elf, ?SYMTAB),
- get_symtab_entries(Symtab_bin, []).
-
-get_symtab_entries(<<>>, Acc) ->
- lists:reverse(Acc);
-get_symtab_entries(Symtab_bin, Acc) ->
- <<SymE_bin:?ELF_SYM_SIZE/binary, MoreSymE/binary>> = Symtab_bin,
- case is64bit() of
- true ->
- <<%% Structural pattern matching on fields.
- Name:?bits(?ST_NAME_SIZE)/integer-little,
- Info:?bits(?ST_INFO_SIZE)/integer-little,
- Other:?bits(?ST_OTHER_SIZE)/integer-little,
- Shndx:?bits(?ST_SHNDX_SIZE)/integer-little,
- Value:?bits(?ST_VALUE_SIZE)/integer-little,
- Size:?bits(?ST_SIZE_SIZE)/integer-little
- >> = SymE_bin;
- false ->
- << %% Same fields in different order:
- Name:?bits(?ST_NAME_SIZE)/integer-little,
- Value:?bits(?ST_VALUE_SIZE)/integer-little,
- Size:?bits(?ST_SIZE_SIZE)/integer-little,
- Info:?bits(?ST_INFO_SIZE)/integer-little,
- Other:?bits(?ST_OTHER_SIZE)/integer-little,
- Shndx:?bits(?ST_SHNDX_SIZE)/integer-little
- >> = SymE_bin
- end,
- SymE = mk_sym(Name, Info, Other, Shndx, Value, Size),
- get_symtab_entries(MoreSymE, [SymE | Acc]).
-
-%% @doc Extracts a specific entry from the Symbol Table (as binary).
-%% This function takes as arguments the Symbol Table (`SymTab')
-%% and the entry's serial number and returns that entry (`sym').
-get_symtab_entry(SymTab, EntryNum) ->
- lists:nth(EntryNum + 1, SymTab).
+extract_symtab(Elf, StrTab) ->
+ Symtab = extract_segment_by_name(Elf, ?SYMTAB),
+ [parse_sym(Sym, Elf, StrTab) || <<Sym:?ELF_SYM_SIZE/binary>> <= Symtab].
+
+-ifdef(BIT32).
+parse_sym(<<%% Structural pattern matching on fields.
+ Name:?bits(?ST_NAME_SIZE)/integer-little,
+ Value:?bits(?ST_VALUE_SIZE)/integer-little,
+ Size:?bits(?ST_SIZE_SIZE)/integer-little,
+ Info:?bits(?ST_INFO_SIZE)/integer-little,
+ _Other:?bits(?ST_OTHER_SIZE)/integer-little,
+ Shndx:?bits(?ST_SHNDX_SIZE)/integer-little>>,
+ Elf, StrTab) ->
+ mk_sym(get_strtab_entry(Name, StrTab), decode_symbol_bind(?ELF_ST_BIND(Info)),
+ decode_symbol_type(?ELF_ST_TYPE(Info)), elf_section(Shndx, Elf), Value,
+ Size).
+-else.
+parse_sym(<<%% Same fields in different order:
+ Name:?bits(?ST_NAME_SIZE)/integer-little,
+ Info:?bits(?ST_INFO_SIZE)/integer-little,
+ _Other:?bits(?ST_OTHER_SIZE)/integer-little,
+ Shndx:?bits(?ST_SHNDX_SIZE)/integer-little,
+ Value:?bits(?ST_VALUE_SIZE)/integer-little,
+ Size:?bits(?ST_SIZE_SIZE)/integer-little>>,
+ Elf, StrTab) ->
+ mk_sym(get_strtab_entry(Name, StrTab), decode_symbol_bind(?ELF_ST_BIND(Info)),
+ decode_symbol_type(?ELF_ST_TYPE(Info)), elf_section(Shndx, Elf), Value,
+ Size).
+-endif.
+
+decode_symbol_bind(?STB_LOCAL) -> 'local';
+decode_symbol_bind(?STB_GLOBAL) -> 'global';
+decode_symbol_bind(?STB_WEAK) -> 'weak'; %unused
+decode_symbol_bind(OS) when ?STB_LOOS =< OS, OS =< ?STB_HIOS -> {os, OS};
+decode_symbol_bind(Proc) when ?STB_LOPROC =< Proc, Proc =< ?STB_HIPROC ->
+ {proc, Proc}.
+
+decode_symbol_type(?STT_NOTYPE) -> 'notype';
+decode_symbol_type(?STT_OBJECT) -> 'object';
+decode_symbol_type(?STT_FUNC) -> 'func';
+decode_symbol_type(?STT_SECTION) -> 'section';
+decode_symbol_type(?STT_FILE) -> 'file';
+decode_symbol_type(OS) when ?STT_LOOS =< OS, OS =< ?STT_HIOS -> {os, OS};
+decode_symbol_type(Proc) when ?STT_LOPROC =< Proc, Proc =< ?STT_HIPROC ->
+ {proc, Proc}.
+
+%% @doc Extracts a specific entry from the Symbol Table.
+-spec elf_symbol(0, elf()) -> undefined;
+ (pos_integer(), elf()) -> elf_sym().
+elf_symbol(0, #elf{}) -> undefined;
+elf_symbol(Index, #elf{symbols=Symbols}) -> lists:nth(Index, Symbols).
+
+-spec elf_symbols(elf()) -> [elf_sym()].
+elf_symbols(#elf{symbols=Symbols}) -> Symbols.
%%------------------------------------------------------------------------------
%% Functions to manipulate String Table
%%------------------------------------------------------------------------------
+%% ADT: get_strtab_entry/1 must be used to consume this type.
+-type strtab() :: binary().
+
%% @doc Extracts String Table from an ELF formated Object File.
--spec extract_strtab(elf()) -> [{string(), offset()}].
+-spec extract_strtab(elf()) -> strtab().
extract_strtab(Elf) ->
- Strtab_bin = extract_segment_by_name(Elf, ?STRTAB),
- NamesSizes = get_names(Strtab_bin),
- make_offsets(NamesSizes).
-
-%% @doc Returns the name of the symbol at the given offset. The string table
-%% contains entries of the form {Name, Offset}. If no such offset exists
-%% returns the empty string (`""').
-%% XXX: There might be a bug here because of the "compact" saving the ELF
-%% format uses: e.g. only stores ".rela.text" for ".rela.text" and ".text".
-get_strtab_entry(Strtab, Offset) ->
- case lists:keyfind(Offset, 2, Strtab) of
- {Name, Offset} -> Name;
- false -> ""
- end.
+ parse_strtab(extract_segment_by_name(Elf, ?STRTAB)).
+
+-spec parse_strtab(binary()) -> strtab().
+parse_strtab(StrTabSectionBin) -> StrTabSectionBin.
+
+%% @doc Returns the name of the symbol at the given offset.
+-spec get_strtab_entry(non_neg_integer(), strtab()) -> string().
+get_strtab_entry(Offset, StrTab) ->
+ <<_:Offset/binary, StrBin/binary>> = StrTab,
+ bin_get_string(StrBin).
+
+%% @doc Extracts a null-terminated string from a binary.
+-spec bin_get_string(binary()) -> string().
+%% FIXME: No regard for encoding (just happens to work for ASCII and Latin-1)
+bin_get_string(<<0, _/binary>>) -> [];
+bin_get_string(<<Char, Rest/binary>>) -> [Char|bin_get_string(Rest)].
%%------------------------------------------------------------------------------
%% Functions to manipulate Relocations
%%------------------------------------------------------------------------------
-%% @doc This function gets as argument an ELF binary file and returns a list
-%% with all .rela.rodata labels (i.e. constants and literals in code)
-%% or an empty list if no ".rela.rodata" section exists in code.
--spec get_rodata_relocs(elf()) -> [offset()].
-get_rodata_relocs(Elf) ->
- case is64bit() of
- true ->
- %% Only care about the addends (== offsets):
- get_rela_addends(extract_rela(Elf, ?RODATA));
- false ->
- %% Find offsets hardcoded in ".rodata" entry
- %%XXX: Treat all 0s as padding and skip them!
- [SkipPadding || SkipPadding <- extract_rodata(Elf), SkipPadding =/= 0]
- end.
-
--spec get_rela_addends([elf_rela()]) -> [offset()].
-get_rela_addends(RelaEntries) ->
- [rela_addend(E) || E <- RelaEntries].
-
-%% @doc Extract a list of the form `[{SymbolName, Offset}]' with all relocatable
-%% symbols and their offsets in the code from the ".text" section.
--spec get_text_relocs(elf()) -> [{name(), offset()}].
-get_text_relocs(Elf) ->
- %% Only care about the symbol table index and the offset:
- NameOffsetTemp = [{?ELF_R_SYM(r_info(E)), r_offset(E)}
- || E <- extract_rela(Elf, ?TEXT)],
- {NameIndices, ActualOffsets} = lists:unzip(NameOffsetTemp),
- %% Find the names of the symbols:
- %%
- %% Get those symbol table entries that are related to Text relocs:
- Symtab = extract_symtab(Elf),
- SymtabEs = [get_symtab_entry(Symtab, Index) || Index <- NameIndices],
- %XXX: not zero-indexed!
- %% Symbol table entries contain the offset of the name of the symbol in
- %% String Table:
- SymtabEs2 = [sym_name(E) || E <- SymtabEs], %XXX: Do we need to sort SymtabE?
- %% Get string table entries ([{Name, Offset in strtab section}]). Keep only
- %% relevant entries:
- Strtab = extract_strtab(Elf),
- Relevant = [get_strtab_entry(Strtab, Off) || Off <- SymtabEs2],
- %% Zip back with actual offsets:
- lists:zip(Relevant, ActualOffsets).
-
%% @doc Extract the Relocations segment for section `Name' (that is passed
%% as second argument) from an ELF formated Object file binary.
--spec extract_rela(elf(), name()) -> [elf_rel() | elf_rela()].
+-spec extract_rela(elf(), name()) -> [elf_rel()].
+
+-ifdef(BIT32).
extract_rela(Elf, Name) ->
- SegName =
- case is64bit() of
- true -> ?RELA(Name); % ELF-64 uses ".rela"
- false -> ?REL(Name) % ...while ELF-32 uses ".rel"
- end,
- Rela_bin = extract_segment_by_name(Elf, SegName),
- get_rela_entries(Rela_bin, []).
-
-get_rela_entries(<<>>, Acc) ->
- lists:reverse(Acc);
-get_rela_entries(Bin, Acc) ->
- E = case is64bit() of
- true ->
- <<%% Structural pattern matching on fields of a Rela Entry.
- Offset:?bits(?R_OFFSET_SIZE)/integer-little,
- Info:?bits(?R_INFO_SIZE)/integer-little,
- Addend:?bits(?R_ADDEND_SIZE)/integer-little,
- Rest/binary
- >> = Bin,
- mk_rela(Offset, Info, Addend);
- false ->
- <<%% Structural pattern matching on fields of a Rel Entry.
- Offset:?bits(?R_OFFSET_SIZE)/integer-little,
- Info:?bits(?R_INFO_SIZE)/integer-little,
- Rest/binary
- >> = Bin,
- mk_rel(Offset, Info)
- end,
- get_rela_entries(Rest, [E | Acc]).
-
-%% %% @doc Extract the `EntryNum' (serial number) Relocation Entry.
-%% get_rela_entry(Rela, EntryNum) ->
-%% lists:nth(EntryNum + 1, Rela).
+ SecData = extract_segment_by_name(Elf, Name),
+ [#elf_rel{offset=Offset, symbol=elf_symbol(?ELF_R_SYM(Info), Elf),
+ type=decode_reloc_type(?ELF_R_TYPE(Info)),
+ addend=read_implicit_addend(Offset, SecData)}
+ || <<Offset:?bits(?R_OFFSET_SIZE)/little,
+ Info:?bits(?R_INFO_SIZE)/little % 386 uses ".rel"
+ >> <= extract_segment_by_name(Elf, ?REL(Name))].
+
+%% The only types HiPE knows how to patch
+decode_reloc_type(1) -> '32';
+decode_reloc_type(2) -> 'pc32'.
+
+read_implicit_addend(Offset, Section) ->
+ %% All x86 relocation types uses 'word32' relocation fields; i.e. 32-bit LE.
+ <<_:Offset/binary, Addend:32/signed-little, _/binary>> = Section,
+ Addend.
+
+-else. %% BIT32
+extract_rela(Elf, Name) ->
+ [#elf_rel{offset=Offset, symbol=elf_symbol(?ELF_R_SYM(Info), Elf),
+ type=decode_reloc_type(?ELF_R_TYPE(Info)), addend=Addend}
+ || <<Offset:?bits(?R_OFFSET_SIZE)/little,
+ Info:?bits(?R_INFO_SIZE)/little,
+ Addend:?bits(?R_ADDEND_SIZE)/signed-little % X86_64 uses ".rela"
+ >> <= extract_segment_by_name(Elf, ?RELA(Name))].
+
+decode_reloc_type(1) -> '64';
+decode_reloc_type(2) -> 'pc32';
+decode_reloc_type(10) -> '32'.
+-endif. %% BIT32
%%------------------------------------------------------------------------------
%% Functions to manipulate Executable Code segment
@@ -615,19 +568,6 @@ get_gccexntab_callsites(CSTab, Acc) ->
get_gccexntab_callsites(More, [GccCS | Acc]).
%%------------------------------------------------------------------------------
-%% Functions to manipulate Read-only Data (.rodata)
-%%------------------------------------------------------------------------------
-extract_rodata(Elf) ->
- Rodata_bin = extract_segment_by_name(Elf, ?RODATA),
- get_rodata_entries(Rodata_bin, []).
-
-get_rodata_entries(<<>>, Acc) ->
- lists:reverse(Acc);
-get_rodata_entries(Rodata_bin, Acc) ->
- <<Num:?bits(?ELF_ADDR_SIZE)/integer-little, More/binary>> = Rodata_bin,
- get_rodata_entries(More, [Num | Acc]).
-
-%%------------------------------------------------------------------------------
%% Helper functions
%%------------------------------------------------------------------------------
@@ -647,107 +587,15 @@ get_binary_segment(Bin, Offset, Size) ->
%% There are handy macros defined in elf_format.hrl for all Standard
%% Section Names.
-spec extract_segment_by_name(elf(), string()) -> binary().
-extract_segment_by_name(Elf, SectionName) ->
- %% Extract Section Header Table and Section Header String Table from binary
- SHdrTable = extract_shdrtab(Elf),
- Names = extract_shstrtab(Elf),
- %% Zip to a list of (Name,ShdrE)
- [_Zero | ShdrEs] = lists:keysort(2, SHdrTable), % Skip first entry (zeros).
- L = lists:zip(Names, ShdrEs),
+extract_segment_by_name(#elf{file=ElfBin, sec_nam=SecNam}, SectionName) ->
%% Find Section Header Table entry by name
- case lists:keyfind(SectionName, 1, L) of
- {SectionName, ShdrE} -> %% Note: Same name.
- #elf_shdr{offset = Offset, size = Size} = ShdrE,
- get_binary_segment(Elf, Offset, Size);
- false -> %% Not found.
+ case SecNam of
+ #{SectionName := #elf_shdr{offset=Offset, size=Size}} ->
+ get_binary_segment(ElfBin, Offset, Size);
+ #{} -> %% Not found.
<<>>
end.
-%% @doc Extracts a list of strings with (zero-separated) names from a binary.
-%% Returns tuples of `{Name, Size}'.
-%% XXX: Skip trailing 0.
--spec get_names(<<_:8,_:_*8>>) -> name_sizes().
-get_names(<<0, Bin/binary>>) ->
- NamesSizes = get_names(Bin, []),
- fix_names(NamesSizes, []).
-
-get_names(<<>>, Acc) ->
- lists:reverse(Acc);
-get_names(Bin, Acc) ->
- {Name, MoreNames} = bin_get_string(Bin),
- get_names(MoreNames, [{Name, length(Name)} | Acc]).
-
-%% @doc Fix names:
-%% e.g. If ".rela.text" exists, ".text" does not. Same goes for
-%% ".rel.text". In that way, the Section Header String Table is more
-%% compact. Add ".text" just *before* the corresponding rela-field,
-%% etc.
--spec fix_names(name_sizes(), name_sizes()) -> name_sizes().
-fix_names([], Acc) ->
- lists:reverse(Acc);
-fix_names([{Name, Size}=T | Names], Acc) ->
- case is64bit() of
- true ->
- case string:str(Name, ".rela") =:= 1 of
- true -> %% Name starts with ".rela":
- Section = string:substr(Name, 6),
- fix_names(Names, [{Section, Size - 5}
- | [T | Acc]]); % XXX: Is order ok? (".text"
- % always before ".rela.text")
- false -> %% Name does not start with ".rela":
- fix_names(Names, [T | Acc])
- end;
- false ->
- case string:str(Name, ".rel") =:= 1 of
- true -> %% Name starts with ".rel":
- Section = string:substr(Name, 5),
- fix_names(Names, [{Section, Size - 4}
- | [T | Acc]]); % XXX: Is order ok? (".text"
- % always before ".rela.text")
- false -> %% Name does not start with ".rel":
- fix_names(Names, [T | Acc])
- end
- end.
-
-
-%% @doc A function that byte-reverses a binary. This might be needed because of
-%% little (fucking!) endianess.
--spec bin_reverse(binary()) -> binary().
-bin_reverse(Bin) when is_binary(Bin) ->
- bin_reverse(Bin, <<>>).
-
--spec bin_reverse(binary(), binary()) -> binary().
-bin_reverse(<<>>, Acc) ->
- Acc;
-bin_reverse(<<Head, More/binary>>, Acc) ->
- bin_reverse(More, <<Head, Acc/binary>>).
-
-%% @doc A function that extracts a null-terminated string from a binary. It
-%% returns the found string along with the rest of the binary.
--spec bin_get_string(binary()) -> {string(), binary()}.
-bin_get_string(Bin) ->
- bin_get_string(Bin, <<>>).
-
-bin_get_string(<<>>, BinAcc) ->
- Bin = bin_reverse(BinAcc), % little endian!
- {binary_to_list(Bin), <<>>};
-bin_get_string(<<0, MoreBin/binary>>, BinAcc) ->
- Bin = bin_reverse(BinAcc), % little endian!
- {binary_to_list(Bin), MoreBin};
-bin_get_string(<<Letter, Tail/binary>>, BinAcc) ->
- bin_get_string(Tail, <<Letter, BinAcc/binary>>).
-
-%% @doc
-make_offsets(NamesSizes) ->
- {Names, Sizes} = lists:unzip(NamesSizes),
- Offsets = make_offsets_from_sizes(Sizes, 1, []),
- lists:zip(Names, Offsets).
-
-make_offsets_from_sizes([], _, Acc) ->
- lists:reverse(Acc);
-make_offsets_from_sizes([Size | Sizes], Cur, Acc) ->
- make_offsets_from_sizes(Sizes, Size+Cur+1, [Cur | Acc]). % For the "."!
-
%% @doc Little-Endian Base 128 (LEB128) Decoder
%% This function extracts the <b>first</b> LEB128-encoded integer in a
%% binary and returns that integer along with the remaining binary. This is
@@ -770,21 +618,3 @@ leb128_decode(LebNum, NoOfBits, Acc) ->
<<Num:Size/integer>> = <<NextBundle:7/bits, Acc/bits>>,
{Num, MoreLebNums}
end.
-
-%% @doc Extract ELF Class from ELF header and export symbol to process
-%% dictionary.
--spec set_architecture_flag(elf()) -> 'ok'.
-set_architecture_flag(Elf) ->
- %% Extract information about ELF Class from ELF Header
- <<16#7f, $E, $L, $F, EI_Class, _MoreHeader/binary>>
- = get_binary_segment(Elf, 0, ?ELF_EHDR_SIZE),
- put(elf_class, EI_Class),
- ok.
-
-%% @doc Read from object file header if the file class is ELF32 or ELF64.
--spec is64bit() -> boolean().
-is64bit() ->
- case get(elf_class) of
- ?ELFCLASS64 -> true;
- ?ELFCLASS32 -> false
- end.
diff --git a/lib/hipe/llvm/elf_format.hrl b/lib/hipe/llvm/elf_format.hrl
index 7a3cdfead6..57a36f0c3e 100644
--- a/lib/hipe/llvm/elf_format.hrl
+++ b/lib/hipe/llvm/elf_format.hrl
@@ -486,3 +486,43 @@
%% Misc.
%%------------------------------------------------------------------------------
-define(bits(Bytes), ((Bytes) bsl 3)).
+
+%%------------------------------------------------------------------------------
+%% Exported record and type declarations for 'elf_format' module
+%%------------------------------------------------------------------------------
+
+%% Section header entries
+-record(elf_shdr,
+ {name :: elf_format:name() % Section name
+ ,type :: elf_format:shdr_type() % Section type
+ ,flags :: elf_format:bitflags() % Section attributes
+ ,addr :: elf_format:offset() % Virtual address in memory
+ ,offset :: elf_format:offset() % Offset in file
+ ,size :: elf_format:size() % Size of section
+ ,link :: non_neg_integer() % Link to other section
+ ,info :: non_neg_integer() % Miscellaneous information
+ ,addralign :: elf_format:size() % Address align boundary
+ ,entsize :: elf_format:size() % Size of entries, if section has
+ % table
+ }).
+-type elf_shdr() :: #elf_shdr{}.
+
+%% Symbol table entries
+-record(elf_sym,
+ {name :: elf_format:name() % Symbol name
+ ,bind :: elf_format:sym_bind() % Symbol binding
+ ,type :: elf_format:sym_type() % Symbol type
+ ,value :: elf_format:valueoff() % Symbol value
+ ,size :: elf_format:size() % Size of object
+ ,section :: undefined | abs | elf_shdr()
+ }).
+-type elf_sym() :: #elf_sym{}.
+
+%% Relocations
+-record(elf_rel,
+ {offset :: elf_format:offset()
+ ,type :: elf_format:reloc_type()
+ ,addend :: elf_format:addend()
+ ,symbol :: elf_sym()
+ }).
+-type elf_rel() :: #elf_rel{}.
diff --git a/lib/hipe/llvm/hipe_llvm.erl b/lib/hipe/llvm/hipe_llvm.erl
index 5e33731a2b..b22f8fb320 100644
--- a/lib/hipe/llvm/hipe_llvm.erl
+++ b/lib/hipe/llvm/hipe_llvm.erl
@@ -199,10 +199,9 @@
adj_stack_register/1,
adj_stack_type/1,
- mk_branch_meta/3,
- branch_meta_id/1,
- branch_meta_true_weight/1,
- branch_meta_false_weight/1
+ mk_meta/2,
+ meta_id/1,
+ meta_operands/1
]).
-export([
@@ -234,7 +233,7 @@
function_arg_type_list/1
]).
--export([pp_ins_list/2, pp_ins/2]).
+-export([pp_ins_list/3, pp_ins/3]).
%%-----------------------------------------------------------------------------
@@ -343,8 +342,9 @@
-record(llvm_adj_stack, {offset, 'register', type}).
-type llvm_adj_stack() :: #llvm_adj_stack{}.
--record(llvm_branch_meta, {id, true_weight, false_weight}).
--type llvm_branch_meta() :: #llvm_branch_meta{}.
+-record(llvm_meta, {id :: string(),
+ operands :: [string() | integer() | llvm_meta()]}).
+-type llvm_meta() :: #llvm_meta{}.
%% A type for any LLVM instruction
-type llvm_instr() :: llvm_ret() | llvm_br() | llvm_br_cond()
@@ -357,7 +357,7 @@
| llvm_call() | llvm_fun_def() | llvm_fun_decl()
| llvm_landingpad() | llvm_comment() | llvm_label()
| llvm_const_decl() | llvm_asm() | llvm_adj_stack()
- | llvm_branch_meta().
+ | llvm_meta().
%% Types
-record(llvm_void, {}).
@@ -701,7 +701,7 @@ is_label(#llvm_comment{}) -> false;
is_label(#llvm_const_decl{}) -> false;
is_label(#llvm_asm{}) -> false;
is_label(#llvm_adj_stack{}) -> false;
-is_label(#llvm_branch_meta{}) -> false.
+is_label(#llvm_meta{}) -> false.
%% const_decl
mk_const_decl(Dst, Decl_type, Type, Value) ->
@@ -722,14 +722,11 @@ adj_stack_offset(#llvm_adj_stack{offset=Offset}) -> Offset.
adj_stack_register(#llvm_adj_stack{'register'=Register}) -> Register.
adj_stack_type(#llvm_adj_stack{type=Type}) -> Type.
-%% branch meta-data
-mk_branch_meta(Id, True_weight, False_weight) ->
- #llvm_branch_meta{id=Id, true_weight=True_weight, false_weight=False_weight}.
-branch_meta_id(#llvm_branch_meta{id=Id}) -> Id.
-branch_meta_true_weight(#llvm_branch_meta{true_weight=True_weight}) ->
- True_weight.
-branch_meta_false_weight(#llvm_branch_meta{false_weight=False_weight}) ->
- False_weight.
+%% meta-data
+mk_meta(Id, Operands) ->
+ #llvm_meta{id=Id, operands=Operands}.
+meta_id(#llvm_meta{id=Id}) -> Id.
+meta_operands(#llvm_meta{operands=Operands}) -> Operands.
%% types
mk_void() -> #llvm_void{}.
@@ -765,13 +762,17 @@ function_arg_type_list(#llvm_fun{arg_type_list=Arg_type_list}) ->
%% Pretty-printer Functions
%%----------------------------------------------------------------------------
-%% @doc Pretty-print a list of LLVM instructions to a Device.
-pp_ins_list(_Dev, []) -> ok;
-pp_ins_list(Dev, [I|Is]) ->
- pp_ins(Dev, I),
- pp_ins_list(Dev, Is).
+-type llvm_version() :: {Major :: integer(), Minor :: integer()}.
-pp_ins(Dev, I) ->
+%% @doc Pretty-print a list of LLVM instructions to a Device, using syntax
+%% compatible with LLVM v. Major.Minor
+-spec pp_ins_list(file:io_device(), llvm_version(), [llvm_instr()]) -> ok.
+pp_ins_list(_Dev, _Ver, []) -> ok;
+pp_ins_list(Dev, Ver={_,_}, [I|Is]) ->
+ pp_ins(Dev, Ver, I),
+ pp_ins_list(Dev, Ver, Is).
+
+pp_ins(Dev, Ver, I) ->
case indent(I) of
true -> write(Dev, " ");
false -> ok
@@ -861,7 +862,7 @@ pp_ins(Dev, I) ->
true -> write(Dev, "volatile ");
false -> ok
end,
- pp_type(Dev, load_p_type(I)),
+ pp_dereference_type(Dev, Ver, load_p_type(I)),
write(Dev, [" ", load_pointer(I), " "]),
case load_alignment(I) of
[] -> ok;
@@ -897,7 +898,7 @@ pp_ins(Dev, I) ->
true -> write(Dev, "inbounds ");
false -> ok
end,
- pp_type(Dev, getelementptr_p_type(I)),
+ pp_dereference_type(Dev, Ver, getelementptr_p_type(I)),
write(Dev, [" ", getelementptr_value(I)]),
pp_typed_idxs(Dev, getelementptr_typed_idxs(I)),
write(Dev, "\n");
@@ -958,12 +959,16 @@ pp_ins(Dev, I) ->
pp_args(Dev, fun_def_arglist(I)),
write(Dev, ") "),
pp_options(Dev, fun_def_fn_attrs(I)),
+ case Ver >= {3,7} of false -> ok; true ->
+ write(Dev, "personality i32 (i32, i64, i8*,i8*)* "
+ "@__gcc_personality_v0 ")
+ end,
case fun_def_align(I) of
[] -> ok;
N -> write(Dev, ["align ", N])
end,
write(Dev, "{\n"),
- pp_ins_list(Dev, fun_def_body(I)),
+ pp_ins_list(Dev, Ver, fun_def_body(I)),
write(Dev, "}\n");
#llvm_fun_decl{} ->
write(Dev, "declare "),
@@ -992,8 +997,12 @@ pp_ins(Dev, I) ->
pp_type(Dev, const_decl_type(I)),
write(Dev, [" ", const_decl_value(I), "\n"]);
#llvm_landingpad{} ->
- write(Dev, "landingpad { i8*, i32 } personality i32 (i32, i64, i8*,i8*)*
- @__gcc_personality_v0 cleanup\n");
+ write(Dev, "landingpad { i8*, i32 } "),
+ case Ver < {3,7} of false -> ok; true ->
+ write(Dev, "personality i32 (i32, i64, i8*,i8*)* "
+ "@__gcc_personality_v0 ")
+ end,
+ write(Dev, "cleanup\n");
#llvm_asm{} ->
write(Dev, [asm_instruction(I), "\n"]);
#llvm_adj_stack{} ->
@@ -1001,14 +1010,37 @@ pp_ins(Dev, I) ->
adj_stack_register(I), "\", \"r\"("]),
pp_type(Dev, adj_stack_type(I)),
write(Dev, [" ", adj_stack_offset(I),")\n"]);
- #llvm_branch_meta{} ->
- write(Dev, ["!", branch_meta_id(I), " = metadata !{metadata !\"branch_weights\",
- i32 ", branch_meta_true_weight(I), ", i32 ",
- branch_meta_false_weight(I), "}\n"]);
+ #llvm_meta{} ->
+ write(Dev, ["!", meta_id(I), " = "]),
+ Named = case string:to_integer(meta_id(I)) of
+ {_, ""} -> false;
+ _ -> true
+ end,
+ case Ver < {3,6} andalso not Named of
+ true -> write(Dev, "metadata !{metadata ");
+ false -> write(Dev, "!{ ")
+ end,
+ write(Dev, string:join([if is_list(Op) -> ["!\"", Op, "\""];
+ is_integer(Op) -> ["i32 ", integer_to_list(Op)];
+ is_record(Op, llvm_meta) ->
+ ["!", meta_id(Op)]
+ end || Op <- meta_operands(I)], ", ")),
+ write(Dev, " }\n");
Other ->
exit({?MODULE, pp_ins, {"Unknown LLVM instruction", Other}})
end.
+%% @doc Print the type of a dereference in an LLVM instruction using syntax
+%% parsable by the specified LLVM version.
+pp_dereference_type(Dev, Ver, Type) ->
+ case Ver >= {3,7} of
+ false -> ok;
+ true ->
+ pp_type(Dev, pointer_type(Type)),
+ write(Dev, ", ")
+ end,
+ pp_type(Dev, Type).
+
%% @doc Pretty-print a list of types
pp_type_list(_Dev, []) -> ok;
pp_type_list(Dev, [T]) ->
@@ -1114,7 +1146,7 @@ indent(I) ->
#llvm_fun_def{} -> false;
#llvm_fun_decl{} -> false;
#llvm_const_decl{} -> false;
- #llvm_branch_meta{} -> false;
+ #llvm_meta{} -> false;
_ -> true
end.
diff --git a/lib/hipe/llvm/hipe_llvm_main.erl b/lib/hipe/llvm/hipe_llvm_main.erl
index 3c24425828..476d6fb49c 100644
--- a/lib/hipe/llvm/hipe_llvm_main.erl
+++ b/lib/hipe/llvm/hipe_llvm_main.erl
@@ -13,7 +13,7 @@
%% chain is invoked in order to produce an object file.
rtl_to_native(MFA, RTL, Roots, Options) ->
%% Compile to LLVM and get Instruction List (along with infos)
- {LLVMCode, RelocsDict, ConstTab} =
+ {LLVMCode, RelocsDict0, ConstTab0} =
hipe_rtl_to_llvm:translate(RTL, Roots),
%% Fix function name to an acceptable LLVM identifier (needed for closures)
{_Module, Fun, Arity} = hipe_rtl_to_llvm:fix_mfa_name(MFA),
@@ -24,34 +24,33 @@ rtl_to_native(MFA, RTL, Roots, Options) ->
%% Extract information from object file
%%
ObjBin = open_object_file(ObjectFile),
- %% Read and set the ELF class
- elf_format:set_architecture_flag(ObjBin),
+ Obj = elf_format:read(ObjBin),
%% Get labels info (for switches and jump tables)
- Labels = elf_format:get_rodata_relocs(ObjBin),
- {Switches, Closures} = get_tables(ObjBin),
+ Labels = elf_format:extract_rela(Obj, ?RODATA),
+ Tables = get_tables(Obj),
%% Associate Labels with Switches and Closures with stack args
- {SwitchInfos, ExposedClosures} =
- correlate_labels(Switches ++ Closures, Labels),
+ {SwitchInfos, ExposedClosures} = correlate_labels(Tables, Labels),
%% SwitchInfos: [{"table_50", [Labels]}]
%% ExposedClosures: [{"table_closures", [Labels]}]
-
+
%% Labelmap contains the offsets of the labels in the code that are
%% used for switch's jump tables
- LabelMap = create_labelmap(MFA, SwitchInfos, RelocsDict),
+ LabelMap = create_labelmap(MFA, SwitchInfos, RelocsDict0),
+ {RelocsDict, ConstTab} = extract_constants(RelocsDict0, ConstTab0, Obj),
%% Get relocation info
- TextRelocs = elf_format:get_text_relocs(ObjBin),
+ TextRelocs = elf_format:extract_rela(Obj, ?TEXT),
%% AccRefs contains the offsets of all references to relocatable symbols in
%% the code:
AccRefs = fix_relocations(TextRelocs, RelocsDict, MFA),
%% Get stack descriptors
- SDescs = get_sdescs(ObjBin),
+ SDescs = get_sdescs(Obj),
%% FixedSDescs are the stack descriptors after correcting calls that have
%% arguments in the stack
FixedSDescs =
fix_stack_descriptors(RelocsDict, AccRefs, SDescs, ExposedClosures),
Refs = AccRefs ++ FixedSDescs,
%% Get binary code from object file
- BinCode = elf_format:extract_text(ObjBin),
+ BinCode = elf_format:extract_text(Obj),
%% Remove temp files (if needed)
ok = remove_temp_folder(Dir, Options),
%% Return the code together with information that will be used in the
@@ -78,7 +77,8 @@ compile_with_llvm(FunName, Arity, LLVMCode, Options, UseBuffer) ->
false -> []
end,
{ok, File_llvm} = file:open(Dir ++ Filename ++ ".ll", OpenOpts),
- hipe_llvm:pp_ins_list(File_llvm, LLVMCode),
+ Ver = hipe:get_llvm_version(), %% Should probably cache this
+ hipe_llvm:pp_ins_list(File_llvm, Ver, LLVMCode),
%% delayed_write can cause file:close not to do a close, hence the two calls
ok = file:close(File_llvm),
__ = file:close(File_llvm),
@@ -158,12 +158,10 @@ trans_optlev_flag(Tool, Options) ->
%%------------------------------------------------------------------------------
%% @doc Get switch table and closure table.
+-spec get_tables(elf_format:elf()) -> [elf_sym()].
get_tables(Elf) ->
- %% Search Symbol Table for an entry with name prefixed with "table_":
- Triples = elf_format:get_tab_entries(Elf),
- Switches = [T || T={"table_" ++ _, _, _} <- Triples],
- Closures = [T || T={"table_closures" ++ _, _, _} <- Switches],
- {Switches, Closures}.
+ %% Search Symbol Table for entries where name is prefixed with "table_":
+ [S || S=#elf_sym{name="table_" ++ _} <- elf_format:elf_symbols(Elf)].
%% @doc This function associates symbols who point to some table of labels with
%% the corresponding offsets of the labels in the code. These tables can
@@ -171,14 +169,12 @@ get_tables(Elf) ->
%% of blocks that contain closure calls with more than ?NR_ARG_REGS.
correlate_labels([], _L) -> {[], []};
correlate_labels(Tables, Labels) ->
- %% Sort "Tables" based on "ValueOffsets"
- OffsetSortedTb = lists:ukeysort(2, Tables),
- %% Unzip offset-sorted list of "Switches"
- {Names, _Offsets, TablesSizeList} = lists:unzip3(OffsetSortedTb),
- %% Associate switch names with labels
- L = split_list(Labels, TablesSizeList),
- %% Zip back! (to [{SwitchName, Values}])
- NamesValues = lists:zip(Names, L),
+ %% Assumes that the relocations are sorted
+ RelocTree = gb_trees:from_orddict(
+ [{Rel#elf_rel.offset, Rel#elf_rel.addend} || Rel <- Labels]),
+ %% Lookup all relocations pertaining to each symbol
+ NamesValues = [{Name, lookup_range(Value, Value+Size, RelocTree)}
+ || #elf_sym{name=Name, value=Value, size=Size} <- Tables],
case lists:keytake("table_closures", 1, NamesValues) of
false -> %% No closures in the code, no closure table
{NamesValues, []};
@@ -186,6 +182,17 @@ correlate_labels(Tables, Labels) ->
{SwitchesNV, ClosureTableNV}
end.
+%% Fetches all values with a key in [Low, Hi)
+-spec lookup_range(_::K, _::K, gb_trees:tree(K,V)) -> [_::V].
+lookup_range(Low, Hi, Tree) ->
+ lookup_range_1(Hi, gb_trees:iterator_from(Low, Tree)).
+
+lookup_range_1(Hi, Iter0) ->
+ case gb_trees:next(Iter0) of
+ {Key, Value, Iter} when Key < Hi -> [Value | lookup_range_1(Hi, Iter)];
+ _ -> []
+ end.
+
%% @doc Create a gb_tree which contains information about the labels that used
%% for switch's jump tables. The keys of the gb_tree are of the form
%% {MFA, Label} and the values are the actual Offsets.
@@ -213,40 +220,80 @@ insert_to_labelmap([{Key, Value}|Rest], LabelMap) ->
insert_to_labelmap(Rest, LabelMap)
end.
+%% Find any LLVM-generated constants and add them to the constant table
+extract_constants(RelocsDict0, ConstTab0, Obj) ->
+ TextRelocs = elf_format:extract_rela(Obj, ?TEXT),
+ AnonConstSections =
+ lists:usort([{Sec, Offset}
+ || #elf_rel{symbol=#elf_sym{type=section, section=Sec},
+ addend=Offset} <- TextRelocs]),
+ lists:foldl(
+ fun({#elf_shdr{name=Name, type=progbits, addralign=Align, entsize=EntSize,
+ size=Size} = Section, Offset}, {RelocsDict1, ConstTab1})
+ when EntSize > 0, 0 =:= Size rem EntSize, 0 =:= Offset rem EntSize ->
+ SectionBin = elf_format:section_contents(Section, Obj),
+ Constant = binary:part(SectionBin, Offset, EntSize),
+ {ConstTab, ConstLbl} =
+ hipe_consttab:insert_binary_const(ConstTab1, Align, Constant),
+ {dict:store({anon, Name, Offset}, {constant, ConstLbl}, RelocsDict1),
+ ConstTab}
+ end, {RelocsDict0, ConstTab0}, AnonConstSections).
+
%% @doc Correlate object file relocation symbols with info from translation to
%% llvm code.
fix_relocations(Relocs, RelocsDict, MFA) ->
- fix_relocs(Relocs, RelocsDict, MFA, []).
-
-fix_relocs([], _, _, RelocAcc) -> RelocAcc;
-fix_relocs([{Name, Offset}|Rs], RelocsDict, {ModName,_,_}=MFA, RelocAcc) ->
+ lists:map(fun(Reloc) -> fix_reloc(Reloc, RelocsDict, MFA) end, Relocs).
+
+%% Relocation types and expected addends for x86 and amd64
+-define(PCREL_T, 'pc32').
+-define(PCREL_A, -4). %% Hard-coded in hipe_x86.c and hipe_amd64.c
+-ifdef(BIT32).
+-define(ABS_T, '32').
+-define(ABS_A, _). %% We support any addend
+-else.
+-define(ABS_T, '64').
+-define(ABS_A, 0).
+-endif.
+
+fix_reloc(#elf_rel{symbol=#elf_sym{name=Name, section=undefined, type=notype},
+ offset=Offset, type=?PCREL_T, addend=?PCREL_A},
+ RelocsDict, {ModName,_,_}) when Name =/= "" ->
case dict:fetch(Name, RelocsDict) of
- {atom, AtomName} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?LOAD_ATOM, Offset, AtomName}|RelocAcc]);
- {constant, Label} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?LOAD_ADDRESS, Offset, {constant, Label}}|RelocAcc]);
- {switch, _, JTabLab} -> %% Treat switch exactly as constant
- fix_relocs(Rs, RelocsDict, MFA,
- [{?LOAD_ADDRESS, Offset, {constant, JTabLab}}|RelocAcc]);
- {closure, _}=Closure ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?LOAD_ADDRESS, Offset, Closure}|RelocAcc]);
- {call, {bif, BifName, _}} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?CALL_LOCAL, Offset, BifName}|RelocAcc]);
+ {call, {bif, BifName, _}} -> {?CALL_LOCAL, Offset, BifName};
%% MFA calls to functions in the same module are of type 3, while all
%% other MFA calls are of type 2.
- {call, {ModName,_F,_A}=CallMFA} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?CALL_LOCAL, Offset, CallMFA}|RelocAcc]);
- {call, CallMFA} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?CALL_REMOTE, Offset, CallMFA}|RelocAcc]);
- Other ->
- exit({?MODULE, fix_relocs,
- {"Relocation not in relocation dictionary", Other}})
+ %% XXX: Does this code break hot code loading (by transforming external
+ %% calls into local calls?)
+ {call, {ModName,_F,_A}=CallMFA} -> {?CALL_LOCAL, Offset, CallMFA};
+ {call, CallMFA} -> {?CALL_REMOTE, Offset, CallMFA}
+ end;
+fix_reloc(#elf_rel{symbol=#elf_sym{name=Name, section=undefined, type=notype},
+ offset=Offset, type=?ABS_T, addend=?ABS_A},
+ RelocsDict, _) when Name =/= "" ->
+ case dict:fetch(Name, RelocsDict) of
+ {atom, AtomName} -> {?LOAD_ATOM, Offset, AtomName};
+ {constant, Label} -> {?LOAD_ADDRESS, Offset, {constant, Label}};
+ {closure, _}=Closure -> {?LOAD_ADDRESS, Offset, Closure}
+ end;
+fix_reloc(#elf_rel{symbol=#elf_sym{name=Name, section=#elf_shdr{name=?TEXT},
+ type=func},
+ offset=Offset, type=?PCREL_T, addend=?PCREL_A},
+ RelocsDict, MFA) when Name =/= "" ->
+ case dict:fetch(Name, RelocsDict) of
+ {call, MFA} -> {?CALL_LOCAL, Offset, MFA}
+ end;
+fix_reloc(#elf_rel{symbol=#elf_sym{name=Name, section=#elf_shdr{name=?RODATA},
+ type=object},
+ offset=Offset, type=?ABS_T, addend=?ABS_A},
+ RelocsDict, _) when Name =/= "" ->
+ case dict:fetch(Name, RelocsDict) of
+ {switch, _, JTabLab} -> %% Treat switch exactly as constant
+ {?LOAD_ADDRESS, Offset, {constant, JTabLab}}
+ end;
+fix_reloc(#elf_rel{symbol=#elf_sym{type=section, section=#elf_shdr{name=Name}},
+ offset=Offset, type=?ABS_T, addend=Addend}, RelocsDict, _) ->
+ case dict:fetch({anon, Name, Addend}, RelocsDict) of
+ {constant, Label} -> {?LOAD_ADDRESS, Offset, {constant, Label}}
end.
%%------------------------------------------------------------------------------
@@ -271,20 +318,14 @@ get_sdescs(Elf) ->
T = SPCount * ?SP_ADDR_SIZE,
%% Pattern match fields of ".note.gc":
<<SPCount:(?bits(?SP_COUNT_SIZE))/integer-little, % Sanity check!
- SPAddrs:T/binary, % NOTE: In 64bit they are relocs!
+ _SPAddrs:T/binary, % NOTE: In 64bit they are relocs!
StkFrameSize:(?bits(?SP_STKFRAME_SIZE))/integer-little,
StkArity:(?bits(?SP_STKARITY_SIZE))/integer-little,
_LiveRootCount:(?bits(?SP_LIVEROOTCNT_SIZE))/integer-little, % Skip
Roots/binary>> = NoteGC_bin,
LiveRoots = get_liveroots(Roots, []),
- %% Extract information about the safe point addresses:
- SPOffs =
- case elf_format:is64bit() of
- true -> %% Find offsets in ".rela.note.gc":
- elf_format:get_rela_addends(RelaNoteGC);
- false -> %% Find offsets in SPAddrs (in ".note.gc"):
- get_spoffs(SPAddrs, [])
- end,
+ %% Extract the safe point offsets:
+ SPOffs = [A || #elf_rel{addend=A} <- RelaNoteGC],
%% Extract Exception Handler labels:
ExnHandlers = elf_format:get_exn_handlers(Elf),
%% Combine ExnHandlers and Safe point addresses (return addresses):
@@ -300,13 +341,6 @@ get_liveroots(<<Root:?bits(?LR_STKINDEX_SIZE)/integer-little,
MoreRoots/binary>>, Acc) ->
get_liveroots(MoreRoots, [Root | Acc]).
-%% @doc Extracts a bunch of integers (safepoint offsets) from a binary. Returns
-%% a tuple as need for stack descriptors.
-get_spoffs(<<>>, Acc) ->
- lists:reverse(Acc);
-get_spoffs(<<SPOff:?bits(?SP_ADDR_SIZE)/integer-little, More/binary>>, Acc) ->
- get_spoffs(More, [SPOff | Acc]).
-
combine_ras_and_exns(_, [], Acc) ->
lists:reverse(Acc);
combine_ras_and_exns(ExnHandlers, [RA | MoreRAs], Acc) ->
@@ -489,18 +523,3 @@ unique_folder(FunName, Arity, Options) ->
dir_exists(Filename) ->
{Flag, Info} = file:read_file_info(Filename),
(Flag =:= ok) andalso (element(3, Info) =:= directory).
-
-%% @doc Function that takes as arguments a list of integers and a list with
-%% numbers indicating how many items should each tuple have and splits
-%% the original list to a list of lists of integers (with the specified
-%% number of elements), i.e. [ [...], [...] ].
--spec split_list([integer()], [integer()]) -> [ [integer()] ].
-split_list(List, ElemsPerTuple) ->
- split_list(List, ElemsPerTuple, []).
-
--spec split_list([integer()], [integer()], [ [integer()] ]) -> [ [integer()] ].
-split_list([], [], Acc) ->
- lists:reverse(Acc);
-split_list(List, [NumOfElems | MoreNums], Acc) ->
- {L1, L2} = lists:split(NumOfElems, List),
- split_list(L2, MoreNums, [ L1 | Acc]).
diff --git a/lib/hipe/llvm/hipe_rtl_to_llvm.erl b/lib/hipe/llvm/hipe_rtl_to_llvm.erl
index d7d8d1b049..66b2e10fb8 100644
--- a/lib/hipe/llvm/hipe_rtl_to_llvm.erl
+++ b/lib/hipe/llvm/hipe_rtl_to_llvm.erl
@@ -13,6 +13,8 @@
-define(WORD_WIDTH, (?bytes_to_bits(hipe_rtl_arch:word_size()))).
-define(BRANCH_META_TAKEN, "0").
-define(BRANCH_META_NOT_TAKEN, "1").
+-define(FIRST_FREE_META_NO, 2).
+-define(HIPE_LITERALS_META, "hipe.literals").
%%------------------------------------------------------------------------------
%% @doc Main function for translating an RTL function to LLVM Assembly. Takes as
@@ -51,8 +53,9 @@ translate(RTL, Roots) ->
translate_instr_list(Code1, [], Relocs, Data),
%% Create LLVM code to declare relocation symbols as external symbols along
%% with local variables in order to use them as just any other variable
- {FinalRelocs, ExternalDecl, LocalVars} =
+ {FinalRelocs, ExternalDecl0, LocalVars} =
handle_relocations(Relocs1, Data, Fun),
+ ExternalDecl = add_literals_metadata(ExternalDecl0),
%% Pass on LLVM code in order to create Fail blocks and a landingpad
%% instruction to each one
LLVM_Code2 = add_landingpads(LLVM_Code1, FailLabels),
@@ -266,17 +269,18 @@ trans_alub_overflow(I, Sign, Relocs) ->
T2 = mk_temp(),
%% T1{1}: Boolean variable indicating overflow
I6 = hipe_llvm:mk_extractvalue(T2, ReturnType, T1, "1", []),
- case hipe_rtl:alub_cond(I) of
- Op when Op =:= overflow orelse Op =:= ltu ->
- True_label = mk_jump_label(hipe_rtl:alub_true_label(I)),
- False_label = mk_jump_label(hipe_rtl:alub_false_label(I)),
- MetaData = branch_metadata(hipe_rtl:alub_pred(I));
- not_overflow ->
- True_label = mk_jump_label(hipe_rtl:alub_false_label(I)),
- False_label = mk_jump_label(hipe_rtl:alub_true_label(I)),
- MetaData = branch_metadata(1 - hipe_rtl:alub_pred(I))
- end,
- I7 = hipe_llvm:mk_br_cond(T2, True_label, False_label, MetaData),
+ {TrueLabel, FalseLabel, MetaData} =
+ case hipe_rtl:alub_cond(I) of
+ Op when Op =:= overflow orelse Op =:= ltu ->
+ {mk_jump_label(hipe_rtl:alub_true_label(I)),
+ mk_jump_label(hipe_rtl:alub_false_label(I)),
+ branch_metadata(hipe_rtl:alub_pred(I))};
+ not_overflow ->
+ {mk_jump_label(hipe_rtl:alub_false_label(I)),
+ mk_jump_label(hipe_rtl:alub_true_label(I)),
+ branch_metadata(1 - hipe_rtl:alub_pred(I))}
+ end,
+ I7 = hipe_llvm:mk_br_cond(T2, TrueLabel, FalseLabel, MetaData),
{[I7, I6, I5, I4, I3, I2, I1], NewRelocs}.
trans_alub_op(I, Sign) ->
@@ -1457,8 +1461,8 @@ handle_relocations(Relocs, Data, Fun) ->
Relocs4 = dict:store("hipe_bifs.llvm_fix_pinned_regs.0",
{call, {hipe_bifs, llvm_fix_pinned_regs, 0}}, Relocs3),
BranchMetaData = [
- hipe_llvm:mk_branch_meta(?BRANCH_META_TAKEN, "99", "1")
- , hipe_llvm:mk_branch_meta(?BRANCH_META_NOT_TAKEN, "1", "99")
+ hipe_llvm:mk_meta(?BRANCH_META_TAKEN, ["branch_weights", 99, 1])
+ , hipe_llvm:mk_meta(?BRANCH_META_NOT_TAKEN, ["branch_weights", 1, 99])
],
ExternalDeclarations = AtomDecl ++ ClosureDecl ++ ConstDecl ++ FunDecl ++
ClosureLabelDecl ++ SwitchDecl ++ BranchMetaData,
@@ -1611,3 +1615,16 @@ load_constant(Label) ->
const_to_dict(Elem, Dict) ->
Name = "DL" ++ integer_to_list(Elem),
dict:store(Name, {'constant', Elem}, Dict).
+
+%% @doc Export the hipe literals that LLVM needs to generate the prologue as
+%% metadata.
+add_literals_metadata(ExternalDecls) ->
+ Pairs = [hipe_llvm:mk_meta(integer_to_list(?FIRST_FREE_META_NO),
+ ["P_NSP_LIMIT", ?P_NSP_LIMIT])
+ ,hipe_llvm:mk_meta(integer_to_list(?FIRST_FREE_META_NO + 1),
+ ["X86_LEAF_WORDS", ?X86_LEAF_WORDS])
+ ,hipe_llvm:mk_meta(integer_to_list(?FIRST_FREE_META_NO + 2),
+ ["AMD64_LEAF_WORDS", ?AMD64_LEAF_WORDS])
+ ],
+ [hipe_llvm:mk_meta(?HIPE_LITERALS_META, Pairs) |
+ Pairs ++ ExternalDecls].
diff --git a/lib/hipe/main/Makefile b/lib/hipe/main/Makefile
index d44be2d9fa..8ef31dbb46 100644
--- a/lib/hipe/main/Makefile
+++ b/lib/hipe/main/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -70,7 +70,7 @@ APPUP_TARGET= $(EBIN)/$(APPUP_FILE)
include ../native.mk
-ERL_COMPILE_FLAGS += +nowarn_shadow_vars +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +nowarn_shadow_vars +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/main/hipe.app.src b/lib/hipe/main/hipe.app.src
index aa86b6dc5b..f8487151d7 100644
--- a/lib/hipe/main/hipe.app.src
+++ b/lib/hipe/main/hipe.app.src
@@ -88,6 +88,7 @@
hipe_icode2rtl,
hipe_icode_bincomp,
hipe_icode_callgraph,
+ hipe_icode_call_elim,
hipe_icode_cfg,
hipe_icode_coordinator,
hipe_icode_ebb,
diff --git a/lib/hipe/main/hipe.appup.src b/lib/hipe/main/hipe.appup.src
index 599fd3179e..b297ba10db 100644
--- a/lib/hipe/main/hipe.appup.src
+++ b/lib/hipe/main/hipe.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/main/hipe.erl b/lib/hipe/main/hipe.erl
index 1a4bbf179f..6c525dd143 100644
--- a/lib/hipe/main/hipe.erl
+++ b/lib/hipe/main/hipe.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -200,8 +200,9 @@
compile/4,
compile_core/4,
file/1,
- file/2,
- llvm_support_available/0,
+ file/2,
+ get_llvm_version/0,
+ llvm_support_available/0,
load/1,
help/0,
help_hiper/0,
@@ -448,16 +449,16 @@ compile(Name, File, Opts0) when is_atom(Name) ->
true ->
case filename:find_src(filename:rootname(File, ".beam")) of
{error, _} ->
- ?error_msg("Cannot find source code for ~p.",[File]),
+ ?error_msg("Cannot find source code for ~p.", [File]),
?EXIT({cant_find_source_code});
{Source, CompOpts} ->
CoreOpts = [X || X = {core_transform, _} <- Opts],
- %%io:format("Using: ~w\n", [CoreOpts]),
+ %% io:format("Using: ~w\n", [CoreOpts]),
case compile:file(Source, CoreOpts ++ [to_core, binary|CompOpts]) of
{ok, _, Core} ->
compile_core(Name, Core, File, Opts);
Error ->
- ?error_msg("Error compiling ~p:\n~p.",[File, Error]),
+ ?error_msg("Error compiling ~p:\n~p.", [File, Error]),
?EXIT({cant_compile_source_code})
end
end;
@@ -469,7 +470,7 @@ compile(Name, File, Opts0) when is_atom(Name) ->
{ok, _, Core} ->
compile_core(Name, Core, File, Opts);
Error ->
- ?error_msg("Error compiling ~p:\n~p\n",[Source, Error]),
+ ?error_msg("Error compiling ~p:\n~p\n", [Source, Error]),
?EXIT({cant_compile_source_code, Error})
end;
Other when Other =:= false; Other =:= undefined ->
@@ -572,8 +573,7 @@ file(File, Options) when is_atom(File) ->
disasm(File) ->
case beam_disasm:file(File) of
#beam_file{labeled_exports = LabeledExports,
- compile_info = CompInfo,
- code = BeamCode} ->
+ compile_info = CompInfo, code = BeamCode} ->
CompOpts = proplists:get_value(options, CompInfo, []),
HCompOpts = case lists:keyfind(hipe, 1, CompOpts) of
{hipe, L} when is_list(L) -> L;
@@ -596,16 +596,16 @@ fix_beam_exports([], Exports) ->
Exports.
get_beam_icode(Mod, {BeamCode, Exports}, File, Options) ->
- ?option_time({ok, Icode} =
- (catch {ok, hipe_beam_to_icode:module(BeamCode, Options)}),
- "BEAM-to-Icode", Options),
+ {ok, Icode} =
+ ?option_time((catch {ok, hipe_beam_to_icode:module(BeamCode, Options)}),
+ "BEAM-to-Icode", Options),
BeamBin = get_beam_code(File),
{{Mod, Exports, Icode}, BeamBin}.
get_core_icode(Mod, Core, File, Options) ->
- ?option_time({ok, Icode} =
- (catch {ok, cerl_to_icode:module(Core, Options)}),
- "BEAM-to-Icode", Options),
+ {ok, Icode} =
+ ?option_time((catch {ok, cerl_to_icode:module(Core, Options)}),
+ "BEAM-to-Icode", Options),
NeedBeamCode = not proplists:get_bool(load, Options),
BeamBin =
case NeedBeamCode of
@@ -618,7 +618,7 @@ get_core_icode(Mod, Core, File, Options) ->
get_beam_code(Bin) when is_binary(Bin) -> Bin;
get_beam_code(FileName) ->
case erl_prim_loader:get_file(FileName) of
- {ok,Bin,_} ->
+ {ok, Bin, _} ->
Bin;
error ->
?EXIT(no_beam_file)
@@ -764,7 +764,8 @@ finalize(OrigList, Mod, Exports, WholeModule, Opts) ->
finalize_fun(MfaIcodeList, Exports, Opts) ->
case proplists:get_value(concurrent_comp, Opts) of
FalseVal when (FalseVal =:= undefined) orelse (FalseVal =:= false) ->
- [finalize_fun_sequential(MFAIcode, Opts, #comp_servers{})
+ NoServers = #comp_servers{pp_server = none, range = none, type = none},
+ [finalize_fun_sequential(MFAIcode, Opts, NoServers)
|| {_MFA, _Icode} = MFAIcode <- MfaIcodeList];
TrueVal when (TrueVal =:= true) orelse (TrueVal =:= debug) ->
finalize_fun_concurrent(MfaIcodeList, Exports, Opts)
@@ -1164,6 +1165,9 @@ option_text(caller_save_spill_restore) ->
"Activates caller save register spills and restores";
option_text(debug) ->
"Outputs internal debugging information during compilation";
+option_text(icode_call_elim) ->
+ "Performs call elimination of BIFs that are side-effect free\n" ++
+ "only on some argument types";
option_text(icode_range) ->
"Performs integer range analysis on the Icode level";
option_text(icode_ssa_check) ->
@@ -1317,6 +1321,7 @@ opt_keys() ->
get_called_modules,
split_arith,
split_arith_unsafe,
+ icode_call_elim,
icode_inline_bifs,
icode_ssa_check,
icode_ssa_copy_prop,
@@ -1398,7 +1403,7 @@ o1_opts(TargetArch) ->
o2_opts(TargetArch) ->
Common = [icode_ssa_const_prop, icode_ssa_copy_prop, % icode_ssa_struct_reuse,
- icode_type, icode_inline_bifs, rtl_lcm,
+ icode_type, icode_inline_bifs, icode_call_elim, rtl_lcm,
rtl_ssa, rtl_ssa_const_prop,
spillmin_color, use_indexing, remove_comments,
concurrent_comp, binary_opt | o1_opts(TargetArch)],
@@ -1428,6 +1433,7 @@ opt_negations() ->
{no_icode_inline_bifs, icode_inline_bifs},
{no_icode_range, icode_range},
{no_icode_split_arith, icode_split_arith},
+ {no_icode_call_elim, icode_call_elim},
{no_icode_ssa_check, icode_ssa_check},
{no_icode_ssa_copy_prop, icode_ssa_copy_prop},
{no_icode_ssa_const_prop, icode_ssa_const_prop},
@@ -1478,18 +1484,25 @@ opt_expansions(TargetArch) ->
[{o1, o1_opts(TargetArch)},
{o2, o2_opts(TargetArch)},
{o3, o3_opts(TargetArch)},
- {to_llvm, llvm_opts(o3)},
- {{to_llvm, o0}, llvm_opts(o0)},
- {{to_llvm, o1}, llvm_opts(o1)},
- {{to_llvm, o2}, llvm_opts(o2)},
- {{to_llvm, o3}, llvm_opts(o3)},
+ {to_llvm, llvm_opts(o3, TargetArch)},
+ {{to_llvm, o0}, llvm_opts(o0, TargetArch)},
+ {{to_llvm, o1}, llvm_opts(o1, TargetArch)},
+ {{to_llvm, o2}, llvm_opts(o2, TargetArch)},
+ {{to_llvm, o3}, llvm_opts(o3, TargetArch)},
{x87, [x87, inline_fp]},
{inline_fp, case TargetArch of %% XXX: Temporary until x86 has sse2
x86 -> [x87, inline_fp];
_ -> [inline_fp] end}].
-llvm_opts(O) ->
- [to_llvm, {llvm_opt, O}, {llvm_llc, O}].
+llvm_opts(O, TargetArch) ->
+ Base = [to_llvm, {llvm_opt, O}, {llvm_llc, O}],
+ case TargetArch of
+ %% A llvm bug present in 3.4 through (at least) 3.8 miscompiles x86
+ %% functions that have floats are spilled to stack by clobbering the process
+ %% pointer (ebp) trying to realign the stack pointer.
+ x86 -> [no_inline_fp | Base];
+ _ -> Base
+ end.
%% This expands "basic" options, which may be tested early and cannot be
%% in conflict with options found in the source code.
@@ -1519,7 +1532,8 @@ expand_options(Opts, TargetArch) ->
proplists:normalize(Opts, [{negations, opt_negations()},
{aliases, opt_aliases()},
{expand, opt_basic_expansions()},
- {expand, opt_expansions(TargetArch)}]).
+ {expand, opt_expansions(TargetArch)},
+ {negations, opt_negations()}]).
-spec check_options(comp_options()) -> 'ok'.
@@ -1537,18 +1551,27 @@ check_options(Opts) ->
-spec llvm_support_available() -> boolean().
llvm_support_available() ->
- get_llvm_version() >= 3.4.
+ get_llvm_version() >= {3,4}.
+
+-type llvm_version() :: {Major :: integer(), Minor :: integer()}.
+-spec get_llvm_version() -> llvm_version() | {0, 0}.
get_llvm_version() ->
OptStr = os:cmd("opt -version"),
SubStr = "LLVM version ", N = length(SubStr),
case string:str(OptStr, SubStr) of
0 -> % No opt available
- 0.0;
+ {0, 0};
S ->
- case string:to_float(string:sub_string(OptStr, S + N)) of
- {error, _} -> 0.0; %XXX: Assumes no revision numbers in versioning
- {Float, _} -> Float
+ case string:tokens(string:sub_string(OptStr, S + N), ".") of
+ [MajorS, MinorS | _] ->
+ case {string:to_integer(MajorS), string:to_integer(MinorS)} of
+ {{Major, ""}, {Minor, _}}
+ when is_integer(Major), is_integer(Minor) ->
+ {Major, Minor};
+ _ -> {0, 0}
+ end;
+ _ -> {0, 0} %XXX: Assumes no revision numbers in versioning
end
end.
diff --git a/lib/hipe/main/hipe.hrl.src b/lib/hipe/main/hipe.hrl.src
index ba27878a84..53b59f88f0 100644
--- a/lib/hipe/main/hipe.hrl.src
+++ b/lib/hipe/main/hipe.hrl.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -152,7 +152,7 @@
STMNT,
?untagged_msg(Msg ++ "~.2f s\n",[hipe_timing:stop_timer(Timer)/1000])).
-else.
--define(TIME_STMNT(STMNT,Msg,Timer),STMNT).
+-define(TIME_STMNT(STMNT,Msg,Timer), STMNT).
-endif.
-define(start_timer(Text), hipe_timing:start(Text, ?MODULE)).
@@ -162,22 +162,24 @@
-define(get_hipe_timer_val(Timer), get(Timer)).
-define(set_hipe_timer_val(Timer, Val), put(Timer, Val)).
-define(option_time(Stmnt, Text, Options),
- if true -> ?when_option(time, Options, ?start_timer(Text)),
- fun(R) ->
- ?when_option(time, Options, ?stop_timer(Text)),
- R
- end(Stmnt)end).
+ begin
+ ?when_option(time, Options, ?start_timer(Text)),
+ fun(R) ->
+ ?when_option(time, Options, ?stop_timer(Text)),
+ R
+ end(Stmnt)
+ end).
--define(option_start_time(Text,Options),
+-define(option_start_time(Text, Options),
?when_option(time, Options, ?start_timer(Text))).
--define(option_stop_time(Text,Options),
+-define(option_stop_time(Text, Options),
?when_option(time, Options, ?stop_timer(Text))).
-define(opt_start_timer(Text),
- hipe_timing:start_optional_timer(Text,?MODULE)).
+ hipe_timing:start_optional_timer(Text, ?MODULE)).
-define(opt_stop_timer(Text),
- hipe_timing:stop_optional_timer(Text,?MODULE)).
+ hipe_timing:stop_optional_timer(Text, ?MODULE)).
%%
%% Turn on instrumentation of the compiler.
@@ -187,15 +189,15 @@
-define(count_pre_ra_instructions(Options, NoInstrs),
?when_option(count_instrs, Options,
put(pre_ra_instrs,
- get(pre_ra_instrs)+ NoInstrs))).
+ get(pre_ra_instrs) + NoInstrs))).
-define(count_post_ra_instructions(Options, NoInstrs),
?when_option(count_instrs, Options,
put(post_ra_instrs,
- get(post_ra_instrs)+ NoInstrs))).
+ get(post_ra_instrs) + NoInstrs))).
-define(start_time_regalloc(Options),
?when_option(timeregalloc, Options,
- put(regalloctime1,erlang:statistics(runtime)))).
+ put(regalloctime1, erlang:statistics(runtime)))).
-define(stop_time_regalloc(Options),
?when_option(timeregalloc, Options,
put(regalloctime,
@@ -215,11 +217,11 @@
-define(count_pre_ra_temps(Options, NoTemps),
?when_option(count_temps, Options,
put(pre_ra_temps,
- get(pre_ra_temps)+ NoTemps))).
+ get(pre_ra_temps) + NoTemps))).
-define(count_post_ra_temps(Options, NoTemps),
?when_option(count_temps, Options,
put(post_ra_temps,
- get(post_ra_temps)+ NoTemps))).
+ get(post_ra_temps) + NoTemps))).
-define(inc_counter(Counter, Val),
case get(Counter) of
@@ -255,7 +257,7 @@
?count_post_ra_instructions(Options, NoInstrs),
?cons_counter(counter_mem_temps, get(counter_mfa_mem_temps)),
?cons_counter(ra_all_iterations_counter, get(ra_iteration_counter)),
- put(ra_iteration_counter,0),
+ put(ra_iteration_counter, 0),
?count_post_ra_temps(Options, NoTemps)
end).
@@ -264,12 +266,12 @@
put(spilledtemps, get(spilledtemps) + NoSpills))).
-define(optional_start_timer(Timer, Options),
- case lists:member(Timer, proplists:get_value(timers,Options++[{timers,[]}])) of
+ case lists:member(Timer, proplists:get_value(timers, Options++[{timers,[]}])) of
true -> ?start_hipe_timer(Timer);
false -> true
end).
-define(optional_stop_timer(Timer, Options),
- case lists:member(Timer, proplists:get_value(timers,Options++[{timers,[]}])) of
+ case lists:member(Timer, proplists:get_value(timers, Options++[{timers,[]}])) of
true -> ?stop_hipe_timer(Timer);
false -> true
end).
@@ -299,7 +301,8 @@
%% Records defined in the hipe module used in other parts of the compiler
%%----------------------------------------------------------------------------
--record(comp_servers, {pp_server :: pid(), range :: pid(), type :: pid()}).
+-type mpid() :: 'none' | pid().
+-record(comp_servers, {pp_server :: mpid(), range :: mpid(), type :: mpid()}).
%%----------------------------------------------------------------------------
%% Basic types of the 'hipe' application used in other parts of the system
@@ -315,4 +318,4 @@
'unknown' | {'reg' | 'fp_reg' | 'spill',
non_neg_integer()}}].
-type hipe_temp_map() :: tuple().
--type hipe_spill_map() :: [{non_neg_integer(), {'spill',non_neg_integer()}}].
+-type hipe_spill_map() :: [{non_neg_integer(), {'spill', non_neg_integer()}}].
diff --git a/lib/hipe/main/hipe_main.erl b/lib/hipe/main/hipe_main.erl
index 5753169961..4b89feb48a 100644
--- a/lib/hipe/main/hipe_main.erl
+++ b/lib/hipe/main/hipe_main.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -55,7 +55,7 @@
%%=====================================================================
%% @spec compile_icode(MFA::mfa(),
-%% LinearIcode::#icode{},
+%% LinearIcode::icode(),
%% CompilerOptions::comp_options(),
%% CompServers::#comp_servers()) ->
%% {native,Platform,{unprofiled,NativeCode}} | {rtl,RTLCode}
@@ -69,7 +69,7 @@
%% generated). The compiler options must have already been expanded
%% (cf. `<a href="hipe.html">hipe:expand_options</a>'). </p>
--spec compile_icode(mfa(), #icode{}, comp_options(), #comp_servers{}) ->
+-spec compile_icode(mfa(), icode(), comp_options(), #comp_servers{}) ->
comp_icode_ret().
compile_icode(MFA, LinearIcode, Options, Servers) ->
@@ -230,10 +230,12 @@ get_pp_module(icode_liveness) -> hipe_icode_liveness;
get_pp_module(rtl_liveness) -> hipe_rtl_liveness.
perform_io(no_fun, _) -> ok;
-perform_io(Fun,PPServer) when is_pid(PPServer) ->
- PPServer ! {print,Fun};
-perform_io(Fun, undefined) ->
- Fun().
+perform_io(Fun, PPServer) when is_pid(PPServer) ->
+ PPServer ! {print, Fun},
+ ok;
+perform_io(Fun, none) ->
+ Fun(),
+ ok.
%%--------------------------------------------------------------------
@@ -282,8 +284,9 @@ icode_ssa_type(IcodeSSA, MFA, Options, Servers) ->
false -> AnnIcode1
end,
AnnIcode3 = icode_range_analysis(AnnIcode2, MFA, Options, Servers),
- pp(AnnIcode3, MFA, icode, pp_range_icode, Options, Servers),
- hipe_icode_type:unannotate_cfg(AnnIcode3)
+ AnnIcode4 = icode_eliminate_safe_calls(AnnIcode3, Options),
+ pp(AnnIcode4, MFA, icode, pp_range_icode, Options, Servers),
+ hipe_icode_type:unannotate_cfg(AnnIcode4)
end.
icode_ssa_convert(IcodeCfg, Options) ->
@@ -293,7 +296,7 @@ icode_ssa_convert(IcodeCfg, Options) ->
icode_ssa_const_prop(IcodeSSA, Options) ->
case proplists:get_bool(icode_ssa_const_prop, Options) of
true ->
- ?option_time(Tmp=hipe_icode_ssa_const_prop:propagate(IcodeSSA),
+ Tmp = ?option_time(hipe_icode_ssa_const_prop:propagate(IcodeSSA),
"Icode SSA sparse conditional constant propagation", Options),
?option_time(hipe_icode_ssa:remove_dead_code(Tmp),
"Icode SSA dead code elimination pass 1", Options);
@@ -332,6 +335,15 @@ icode_range_analysis(IcodeSSA, MFA, Options, Servers) ->
IcodeSSA
end.
+icode_eliminate_safe_calls(IcodeSSA, Options) ->
+ case proplists:get_bool(icode_call_elim, Options) of
+ true ->
+ ?option_time(hipe_icode_call_elim:cfg(IcodeSSA),
+ "Icode SSA safe call elimination", Options);
+ false ->
+ IcodeSSA
+ end.
+
icode_ssa_dead_code_elimination(IcodeSSA, Options) ->
IcodeSSA1 = ?option_time(hipe_icode_ssa:remove_dead_code(IcodeSSA),
"Icode SSA dead code elimination pass 2",
diff --git a/lib/hipe/misc/Makefile b/lib/hipe/misc/Makefile
index be5c9bc2b6..72cfff21a8 100644
--- a/lib/hipe/misc/Makefile
+++ b/lib/hipe/misc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -69,7 +69,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/misc/hipe_consttab.erl b/lib/hipe/misc/hipe_consttab.erl
index fd4c2e2f27..226b20fa46 100644
--- a/lib/hipe/misc/hipe_consttab.erl
+++ b/lib/hipe/misc/hipe_consttab.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -87,7 +87,8 @@
% {NewTab, Lbl}
insert_sorted_block/4,
insert_block/3,
- %% insert_global_word/2,
+ insert_binary_const/3,
+ %% insert_global_word/2,
%% insert_global_block/4,
%% update_word/3, % update_word(ConstTab, Value) -> {NewTab, Lbl}
%% update_block/5,
@@ -196,6 +197,16 @@ insert_block({ConstTab, RefToLabels, NextLabel}, ElementType, InitList) ->
{ElementType,InitList}),
{insert_backrefs(NewTa, Id, ReferredLabels), Id}.
+%% @doc Inserts a binary constant literal into the const table.
+-spec insert_binary_const(hipe_consttab(), ct_alignment(), binary()) ->
+ {hipe_consttab(), hipe_constlbl()}.
+insert_binary_const(ConstTab, Alignment, Binary)
+ when (Alignment =:= 4 orelse Alignment =:= 8 orelse Alignment =:= 16
+ orelse Alignment =:= 32), is_binary(Binary),
+ size(Binary) rem Alignment =:= 0 ->
+ insert_const(ConstTab, block, Alignment, false,
+ {byte, binary_to_list(Binary)}).
+
%% @spec (ConstTab::hipe_consttab(), ElementType::element_type(),
%% InitList::block(), SortOrder) -> {hipe_consttab(), hipe_constlbl()}
diff --git a/lib/hipe/misc/hipe_consttab.hrl b/lib/hipe/misc/hipe_consttab.hrl
index 8f3bc8e337..550da0455c 100644
--- a/lib/hipe/misc/hipe_consttab.hrl
+++ b/lib/hipe/misc/hipe_consttab.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
%%
%%-----------------------------------------------------------------------------
--type ct_alignment() :: 4 | 8.
+-type ct_alignment() :: 4 | 8 | 16 | 32.
-type hipe_constlbl() :: non_neg_integer().
-type hipe_consttab() :: {dict:dict(), [hipe_constlbl()], hipe_constlbl()}.
diff --git a/lib/hipe/misc/hipe_data_pp.erl b/lib/hipe/misc/hipe_data_pp.erl
index fbb247fd96..6cdc6c5ad2 100644
--- a/lib/hipe/misc/hipe_data_pp.erl
+++ b/lib/hipe/misc/hipe_data_pp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/misc/hipe_gensym.erl b/lib/hipe/misc/hipe_gensym.erl
index aea53b137b..da7c4f9a5d 100644
--- a/lib/hipe/misc/hipe_gensym.erl
+++ b/lib/hipe/misc/hipe_gensym.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/misc/hipe_pack_constants.erl b/lib/hipe/misc/hipe_pack_constants.erl
index 6706b4b023..b54830dd57 100644
--- a/lib/hipe/misc/hipe_pack_constants.erl
+++ b/lib/hipe/misc/hipe_pack_constants.erl
@@ -3,7 +3,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/misc/hipe_sdi.erl b/lib/hipe/misc/hipe_sdi.erl
index 00d30e553b..fbb4b105f6 100644
--- a/lib/hipe/misc/hipe_sdi.erl
+++ b/lib/hipe/misc/hipe_sdi.erl
@@ -3,7 +3,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/misc/hipe_sdi.hrl b/lib/hipe/misc/hipe_sdi.hrl
index f697f9d9dd..a1e12f9df2 100644
--- a/lib/hipe/misc/hipe_sdi.hrl
+++ b/lib/hipe/misc/hipe_sdi.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/opt/Makefile b/lib/hipe/opt/Makefile
index 76191bc48d..684d6f45b4 100644
--- a/lib/hipe/opt/Makefile
+++ b/lib/hipe/opt/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -64,7 +64,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec # +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec # +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/opt/hipe_schedule.erl b/lib/hipe/opt/hipe_schedule.erl
index 59b3e4e5e9..00ad487620 100644
--- a/lib/hipe/opt/hipe_schedule.erl
+++ b/lib/hipe/opt/hipe_schedule.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/opt/hipe_schedule_prio.erl b/lib/hipe/opt/hipe_schedule_prio.erl
index 34e2c03950..3dcc0845e0 100644
--- a/lib/hipe/opt/hipe_schedule_prio.erl
+++ b/lib/hipe/opt/hipe_schedule_prio.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/opt/hipe_spillmin.erl b/lib/hipe/opt/hipe_spillmin.erl
index d338ea1b34..4eeb1d71db 100644
--- a/lib/hipe/opt/hipe_spillmin.erl
+++ b/lib/hipe/opt/hipe_spillmin.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/opt/hipe_spillmin_color.erl b/lib/hipe/opt/hipe_spillmin_color.erl
index 6c87bad142..7c23de44b4 100644
--- a/lib/hipe/opt/hipe_spillmin_color.erl
+++ b/lib/hipe/opt/hipe_spillmin_color.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/opt/hipe_spillmin_scan.erl b/lib/hipe/opt/hipe_spillmin_scan.erl
index c24dd6d394..06b68e1934 100644
--- a/lib/hipe/opt/hipe_spillmin_scan.erl
+++ b/lib/hipe/opt/hipe_spillmin_scan.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/opt/hipe_target_machine.erl b/lib/hipe/opt/hipe_target_machine.erl
index 6f5befb5e2..f64bb8b518 100644
--- a/lib/hipe/opt/hipe_target_machine.erl
+++ b/lib/hipe/opt/hipe_target_machine.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/opt/hipe_ultra_mod2.erl b/lib/hipe/opt/hipe_ultra_mod2.erl
index 5720e56bcb..f28c4e6939 100644
--- a/lib/hipe/opt/hipe_ultra_mod2.erl
+++ b/lib/hipe/opt/hipe_ultra_mod2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/opt/hipe_ultra_prio.erl b/lib/hipe/opt/hipe_ultra_prio.erl
index 67612a66f0..423dc0d6bf 100644
--- a/lib/hipe/opt/hipe_ultra_prio.erl
+++ b/lib/hipe/opt/hipe_ultra_prio.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/Makefile b/lib/hipe/ppc/Makefile
index 1687308bd2..1901dfa671 100644
--- a/lib/hipe/ppc/Makefile
+++ b/lib/hipe/ppc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -76,7 +76,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/ppc/hipe_ppc.erl b/lib/hipe/ppc/hipe_ppc.erl
index c7902b0688..0fa96162f6 100644
--- a/lib/hipe/ppc/hipe_ppc.erl
+++ b/lib/hipe/ppc/hipe_ppc.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc.hrl b/lib/hipe/ppc/hipe_ppc.hrl
index 343b90ea7f..aa8ff4a3f7 100644
--- a/lib/hipe/ppc/hipe_ppc.hrl
+++ b/lib/hipe/ppc/hipe_ppc.hrl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_assemble.erl b/lib/hipe/ppc/hipe_ppc_assemble.erl
index 00f28d60e4..ff9da01b11 100644
--- a/lib/hipe/ppc/hipe_ppc_assemble.erl
+++ b/lib/hipe/ppc/hipe_ppc_assemble.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_cfg.erl b/lib/hipe/ppc/hipe_ppc_cfg.erl
index 7e96654817..34d4bf54c5 100644
--- a/lib/hipe/ppc/hipe_ppc_cfg.erl
+++ b/lib/hipe/ppc/hipe_ppc_cfg.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_defuse.erl b/lib/hipe/ppc/hipe_ppc_defuse.erl
index 7cea60450a..77b84dc574 100644
--- a/lib/hipe/ppc/hipe_ppc_defuse.erl
+++ b/lib/hipe/ppc/hipe_ppc_defuse.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_encode.erl b/lib/hipe/ppc/hipe_ppc_encode.erl
index 52ad53f66c..793f6ccc02 100644
--- a/lib/hipe/ppc/hipe_ppc_encode.erl
+++ b/lib/hipe/ppc/hipe_ppc_encode.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_finalise.erl b/lib/hipe/ppc/hipe_ppc_finalise.erl
index cc83282e31..8bb9520f89 100644
--- a/lib/hipe/ppc/hipe_ppc_finalise.erl
+++ b/lib/hipe/ppc/hipe_ppc_finalise.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_frame.erl b/lib/hipe/ppc/hipe_ppc_frame.erl
index 2c2a09e3f6..ff0450270f 100644
--- a/lib/hipe/ppc/hipe_ppc_frame.erl
+++ b/lib/hipe/ppc/hipe_ppc_frame.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_liveness_all.erl b/lib/hipe/ppc/hipe_ppc_liveness_all.erl
index 6a86dd3433..cab7605967 100644
--- a/lib/hipe/ppc/hipe_ppc_liveness_all.erl
+++ b/lib/hipe/ppc/hipe_ppc_liveness_all.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_liveness_fpr.erl b/lib/hipe/ppc/hipe_ppc_liveness_fpr.erl
index 1b10227be9..1437e27508 100644
--- a/lib/hipe/ppc/hipe_ppc_liveness_fpr.erl
+++ b/lib/hipe/ppc/hipe_ppc_liveness_fpr.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_liveness_gpr.erl b/lib/hipe/ppc/hipe_ppc_liveness_gpr.erl
index ca420b9f12..074fada918 100644
--- a/lib/hipe/ppc/hipe_ppc_liveness_gpr.erl
+++ b/lib/hipe/ppc/hipe_ppc_liveness_gpr.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_main.erl b/lib/hipe/ppc/hipe_ppc_main.erl
index 2336fdeaef..fd5cc2befb 100644
--- a/lib/hipe/ppc/hipe_ppc_main.erl
+++ b/lib/hipe/ppc/hipe_ppc_main.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_pp.erl b/lib/hipe/ppc/hipe_ppc_pp.erl
index 9233c666e3..e69e6b64a2 100644
--- a/lib/hipe/ppc/hipe_ppc_pp.erl
+++ b/lib/hipe/ppc/hipe_ppc_pp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_ra.erl b/lib/hipe/ppc/hipe_ppc_ra.erl
index e3b9617d82..87c776f5d1 100644
--- a/lib/hipe/ppc/hipe_ppc_ra.erl
+++ b/lib/hipe/ppc/hipe_ppc_ra.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_ra_finalise.erl b/lib/hipe/ppc/hipe_ppc_ra_finalise.erl
index 168723d8a6..ea163221c2 100644
--- a/lib/hipe/ppc/hipe_ppc_ra_finalise.erl
+++ b/lib/hipe/ppc/hipe_ppc_ra_finalise.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_ra_ls.erl b/lib/hipe/ppc/hipe_ppc_ra_ls.erl
index f99c063655..6e8304467e 100644
--- a/lib/hipe/ppc/hipe_ppc_ra_ls.erl
+++ b/lib/hipe/ppc/hipe_ppc_ra_ls.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_ra_naive.erl b/lib/hipe/ppc/hipe_ppc_ra_naive.erl
index 7f66862d30..24995be252 100644
--- a/lib/hipe/ppc/hipe_ppc_ra_naive.erl
+++ b/lib/hipe/ppc/hipe_ppc_ra_naive.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_ra_postconditions.erl b/lib/hipe/ppc/hipe_ppc_ra_postconditions.erl
index 26e0bba682..0b16ec3891 100644
--- a/lib/hipe/ppc/hipe_ppc_ra_postconditions.erl
+++ b/lib/hipe/ppc/hipe_ppc_ra_postconditions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_ra_postconditions_fp.erl b/lib/hipe/ppc/hipe_ppc_ra_postconditions_fp.erl
index ad8a5320fb..821aa66c11 100644
--- a/lib/hipe/ppc/hipe_ppc_ra_postconditions_fp.erl
+++ b/lib/hipe/ppc/hipe_ppc_ra_postconditions_fp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_ppc_registers.erl b/lib/hipe/ppc/hipe_ppc_registers.erl
index e8301cb244..f4781d5ed7 100644
--- a/lib/hipe/ppc/hipe_ppc_registers.erl
+++ b/lib/hipe/ppc/hipe_ppc_registers.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ppc/hipe_rtl_to_ppc.erl b/lib/hipe/ppc/hipe_rtl_to_ppc.erl
index 998eefc922..a994659616 100644
--- a/lib/hipe/ppc/hipe_rtl_to_ppc.erl
+++ b/lib/hipe/ppc/hipe_rtl_to_ppc.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/Makefile b/lib/hipe/regalloc/Makefile
index 0442d1e07e..aaa4418f37 100644
--- a/lib/hipe/regalloc/Makefile
+++ b/lib/hipe/regalloc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -77,7 +77,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars# +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars #+warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/regalloc/hipe_adj_list.erl b/lib/hipe/regalloc/hipe_adj_list.erl
index c6c41f370f..de59da2410 100644
--- a/lib/hipe/regalloc/hipe_adj_list.erl
+++ b/lib/hipe/regalloc/hipe_adj_list.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_amd64_specific.erl b/lib/hipe/regalloc/hipe_amd64_specific.erl
index 5a3b52191a..6937e71ac7 100644
--- a/lib/hipe/regalloc/hipe_amd64_specific.erl
+++ b/lib/hipe/regalloc/hipe_amd64_specific.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_amd64_specific_sse2.erl b/lib/hipe/regalloc/hipe_amd64_specific_sse2.erl
index 656fc23a72..50e5869d45 100644
--- a/lib/hipe/regalloc/hipe_amd64_specific_sse2.erl
+++ b/lib/hipe/regalloc/hipe_amd64_specific_sse2.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_amd64_specific_x87.erl b/lib/hipe/regalloc/hipe_amd64_specific_x87.erl
index 0a06199909..2160e93d24 100644
--- a/lib/hipe/regalloc/hipe_amd64_specific_x87.erl
+++ b/lib/hipe/regalloc/hipe_amd64_specific_x87.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_arm_specific.erl b/lib/hipe/regalloc/hipe_arm_specific.erl
index f24171deab..4e34cb1d99 100644
--- a/lib/hipe/regalloc/hipe_arm_specific.erl
+++ b/lib/hipe/regalloc/hipe_arm_specific.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_coalescing_regalloc.erl b/lib/hipe/regalloc/hipe_coalescing_regalloc.erl
index dd4960f255..e2f817d369 100644
--- a/lib/hipe/regalloc/hipe_coalescing_regalloc.erl
+++ b/lib/hipe/regalloc/hipe_coalescing_regalloc.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_graph_coloring_regalloc.erl b/lib/hipe/regalloc/hipe_graph_coloring_regalloc.erl
index ddd4ab431d..bc6e442236 100644
--- a/lib/hipe/regalloc/hipe_graph_coloring_regalloc.erl
+++ b/lib/hipe/regalloc/hipe_graph_coloring_regalloc.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_ig.erl b/lib/hipe/regalloc/hipe_ig.erl
index 25d4cb0441..8fd5d0df1f 100644
--- a/lib/hipe/regalloc/hipe_ig.erl
+++ b/lib/hipe/regalloc/hipe_ig.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_ig_moves.erl b/lib/hipe/regalloc/hipe_ig_moves.erl
index c18eedbd16..b679453de0 100644
--- a/lib/hipe/regalloc/hipe_ig_moves.erl
+++ b/lib/hipe/regalloc/hipe_ig_moves.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_ls_regalloc.erl b/lib/hipe/regalloc/hipe_ls_regalloc.erl
index b3a2668a09..d24b803524 100644
--- a/lib/hipe/regalloc/hipe_ls_regalloc.erl
+++ b/lib/hipe/regalloc/hipe_ls_regalloc.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_moves.erl b/lib/hipe/regalloc/hipe_moves.erl
index 644d731861..39ccfb4a2f 100644
--- a/lib/hipe/regalloc/hipe_moves.erl
+++ b/lib/hipe/regalloc/hipe_moves.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_node_sets.erl b/lib/hipe/regalloc/hipe_node_sets.erl
index ca36f2d591..01922a34d4 100644
--- a/lib/hipe/regalloc/hipe_node_sets.erl
+++ b/lib/hipe/regalloc/hipe_node_sets.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_optimistic_regalloc.erl b/lib/hipe/regalloc/hipe_optimistic_regalloc.erl
index c996d9c285..2ed9ec3b45 100644
--- a/lib/hipe/regalloc/hipe_optimistic_regalloc.erl
+++ b/lib/hipe/regalloc/hipe_optimistic_regalloc.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_ppc_specific.erl b/lib/hipe/regalloc/hipe_ppc_specific.erl
index 9e9be64fb4..c49b1e510f 100644
--- a/lib/hipe/regalloc/hipe_ppc_specific.erl
+++ b/lib/hipe/regalloc/hipe_ppc_specific.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_ppc_specific_fp.erl b/lib/hipe/regalloc/hipe_ppc_specific_fp.erl
index b1e3440fb0..454aa4c686 100644
--- a/lib/hipe/regalloc/hipe_ppc_specific_fp.erl
+++ b/lib/hipe/regalloc/hipe_ppc_specific_fp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_reg_worklists.erl b/lib/hipe/regalloc/hipe_reg_worklists.erl
index 6e0770caa7..88585f9f38 100644
--- a/lib/hipe/regalloc/hipe_reg_worklists.erl
+++ b/lib/hipe/regalloc/hipe_reg_worklists.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_regalloc_loop.erl b/lib/hipe/regalloc/hipe_regalloc_loop.erl
index 4b01d714c3..d29615a3a0 100644
--- a/lib/hipe/regalloc/hipe_regalloc_loop.erl
+++ b/lib/hipe/regalloc/hipe_regalloc_loop.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_sparc_specific.erl b/lib/hipe/regalloc/hipe_sparc_specific.erl
index 460d89c342..8d34604f84 100644
--- a/lib/hipe/regalloc/hipe_sparc_specific.erl
+++ b/lib/hipe/regalloc/hipe_sparc_specific.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_sparc_specific_fp.erl b/lib/hipe/regalloc/hipe_sparc_specific_fp.erl
index df10b2ee73..2edd3cb47e 100644
--- a/lib/hipe/regalloc/hipe_sparc_specific_fp.erl
+++ b/lib/hipe/regalloc/hipe_sparc_specific_fp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_spillcost.erl b/lib/hipe/regalloc/hipe_spillcost.erl
index 27ce6515ef..b241e637d9 100644
--- a/lib/hipe/regalloc/hipe_spillcost.erl
+++ b/lib/hipe/regalloc/hipe_spillcost.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_spillcost.hrl b/lib/hipe/regalloc/hipe_spillcost.hrl
index c1a3cbb550..3cadcbe432 100644
--- a/lib/hipe/regalloc/hipe_spillcost.hrl
+++ b/lib/hipe/regalloc/hipe_spillcost.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_temp_map.erl b/lib/hipe/regalloc/hipe_temp_map.erl
index d9b9162e48..4085a0e1a7 100644
--- a/lib/hipe/regalloc/hipe_temp_map.erl
+++ b/lib/hipe/regalloc/hipe_temp_map.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_x86_specific.erl b/lib/hipe/regalloc/hipe_x86_specific.erl
index 7c76fcc796..4edf8674b7 100644
--- a/lib/hipe/regalloc/hipe_x86_specific.erl
+++ b/lib/hipe/regalloc/hipe_x86_specific.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/regalloc/hipe_x86_specific_x87.erl b/lib/hipe/regalloc/hipe_x86_specific_x87.erl
index c4ab1ecef0..ece07cb2f9 100644
--- a/lib/hipe/regalloc/hipe_x86_specific_x87.erl
+++ b/lib/hipe/regalloc/hipe_x86_specific_x87.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/Makefile b/lib/hipe/rtl/Makefile
index 1bf52fe312..b4cdf8b1f2 100644
--- a/lib/hipe/rtl/Makefile
+++ b/lib/hipe/rtl/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2013. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -75,7 +75,7 @@ TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
include ../native.mk
-ERL_COMPILE_FLAGS += -Werror +inline +warn_unused_import +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +inline +warn_unused_import +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/rtl/hipe_icode2rtl.erl b/lib/hipe/rtl/hipe_icode2rtl.erl
index d809f9ac20..22feca47cc 100644
--- a/lib/hipe/rtl/hipe_icode2rtl.erl
+++ b/lib/hipe/rtl/hipe_icode2rtl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl.erl b/lib/hipe/rtl/hipe_rtl.erl
index 6e27daeedf..0726827299 100644
--- a/lib/hipe/rtl/hipe_rtl.erl
+++ b/lib/hipe/rtl/hipe_rtl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -366,7 +366,7 @@
-export([subst_uses_llvm/2]).
--export_type([alub_cond/0]).
+-export_type([alub_cond/0, rtl/0]).
%%
%% RTL
@@ -384,6 +384,7 @@
label_range, %% {Min,Max} First and last name used for labels
info=[] %% A keylist with arbitrary information.
}).
+-opaque rtl() :: #rtl{}.
mk_rtl(Fun, ArgList, Closure, Leaf, Code, Data, VarRange, LabelRange) ->
#rtl{'fun'=Fun, arglist=ArgList, code=Code,
@@ -414,7 +415,9 @@ rtl_info_update(Rtl, Info) -> Rtl#rtl{info=Info}.
%% move
%%
-mk_move(Dst, Src) -> false = is_fpreg(Dst), false = is_fpreg(Src), #move{dst=Dst, src=Src}.
+mk_move(Dst, Src) ->
+ false = is_fpreg(Dst), false = is_fpreg(Src),
+ #move{dst=Dst, src=Src}.
move_dst(#move{dst=Dst}) -> Dst.
move_dst_update(M, NewDst) -> false = is_fpreg(NewDst), M#move{dst=NewDst}.
move_src(#move{src=Src}) -> Src.
diff --git a/lib/hipe/rtl/hipe_rtl.hrl b/lib/hipe/rtl/hipe_rtl.hrl
index eaa2d20ac8..cc76e7e5c4 100644
--- a/lib/hipe/rtl/hipe_rtl.hrl
+++ b/lib/hipe/rtl/hipe_rtl.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_arch.erl b/lib/hipe/rtl/hipe_rtl_arch.erl
index 4b4ce396c4..397b96120e 100644
--- a/lib/hipe/rtl/hipe_rtl_arch.erl
+++ b/lib/hipe/rtl/hipe_rtl_arch.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_arith.inc b/lib/hipe/rtl/hipe_rtl_arith.inc
index 1dff56b074..0c396c8e76 100644
--- a/lib/hipe/rtl/hipe_rtl_arith.inc
+++ b/lib/hipe/rtl/hipe_rtl_arith.inc
@@ -3,7 +3,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,73 +47,80 @@ eval_alu(Op, Arg1, Arg2)
Res = (Arg1 - Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
- V = (Sign1 and (not Sign2) and (not N))
+ V = (Sign1 andalso (not Sign2) andalso (not N))
or
- ((not Sign1) and Sign2 and N),
- C = ((not Sign1) and Sign2)
+ ((not Sign1) andalso Sign2 andalso N),
+ C = ((not Sign1) andalso Sign2)
or
- (N and ((not Sign1) or Sign2));
+ (N andalso ((not Sign1) orelse Sign2)),
+ {Res, N, Z, V, C};
'add' ->
Res = (Arg1 + Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
- V = (Sign1 and Sign2 and (not N))
+ V = (Sign1 andalso Sign2 andalso (not N))
or
- ((not Sign1) and (not Sign2) and N),
- C = (Sign1 and Sign2)
+ ((not Sign1) andalso (not Sign2) andalso N),
+ C = (Sign1 andalso Sign2)
or
- ((not N) and (Sign1 or Sign2));
+ ((not N) andalso (Sign1 orelse Sign2)),
+ {Res, N, Z, V, C};
'mul' ->
FullRes = Arg1 * Arg2,
Res = FullRes band ?WORDMASK,
ResHi = FullRes bsr ?BITS,
N = sign_bit(Res),
Z = zero(Res),
- V = (N and (ResHi =/= -1)) or ((not N) and (ResHi =/= 0)),
- C = V;
+ V = (N andalso (ResHi =/= -1)) orelse ((not N) andalso (ResHi =/= 0)),
+ C = V,
+ {Res, N, Z, V, C};
'sra' ->
Res = (Arg1 bsr Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'srl' ->
Res = (Arg1 bsr Arg2) band shiftmask(Arg2),
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'sll' ->
Res = (Arg1 bsl Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'or' ->
Res = (Arg1 bor Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'and' ->
Res = (Arg1 band Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'xor' ->
Res = (Arg1 bxor Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
Op ->
- Res = N = Z = V = C = 0,
?EXIT({"unknown alu op", Op})
- end,
- {Res, N, Z, V, C};
+ end;
eval_alu(Op, Arg1, Arg2) ->
- ?EXIT({argument_overflow,Op,Arg1,Arg2}).
+ ?EXIT({argument_overflow, Op, Arg1, Arg2}).
%% Björn & Bjarni:
%% We need to be able to do evaluations based only on the bits, since
@@ -130,9 +137,9 @@ eval_cond_bits(Cond, N, Z, V, C) ->
'ne' ->
not Z;
'gt' ->
- not (Z or (N xor V));
+ not (Z orelse (N xor V));
'gtu' ->
- not (C or Z);
+ not (C orelse Z);
'ge' ->
not (N xor V);
'geu'->
@@ -142,9 +149,9 @@ eval_cond_bits(Cond, N, Z, V, C) ->
'ltu'->
C;
'le' ->
- Z or (N xor V);
+ Z orelse (N xor V);
'leu'->
- C or Z;
+ C orelse Z;
'overflow' ->
V;
'not_overflow' ->
diff --git a/lib/hipe/rtl/hipe_rtl_arith_32.erl b/lib/hipe/rtl/hipe_rtl_arith_32.erl
index d790a8b981..12075ed609 100644
--- a/lib/hipe/rtl/hipe_rtl_arith_32.erl
+++ b/lib/hipe/rtl/hipe_rtl_arith_32.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_arith_64.erl b/lib/hipe/rtl/hipe_rtl_arith_64.erl
index d1566973ff..6dac8fb145 100644
--- a/lib/hipe/rtl/hipe_rtl_arith_64.erl
+++ b/lib/hipe/rtl/hipe_rtl_arith_64.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_binary.erl b/lib/hipe/rtl/hipe_rtl_binary.erl
index 9cbab08ee2..fb9c0c196d 100644
--- a/lib/hipe/rtl/hipe_rtl_binary.erl
+++ b/lib/hipe/rtl/hipe_rtl_binary.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_binary_construct.erl b/lib/hipe/rtl/hipe_rtl_binary_construct.erl
index 4403aa552f..367d76b24d 100644
--- a/lib/hipe/rtl/hipe_rtl_binary_construct.erl
+++ b/lib/hipe/rtl/hipe_rtl_binary_construct.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,25 +19,21 @@
%% %CopyrightEnd%
%%
%% ====================================================================
-%% Module : hipe_rtl_inline_bs_ops
+%% Module : hipe_rtl_binary_construct
%% Purpose :
%% Notes :
-%% History : * 2001-06-14 Erik Johansson ([email protected]): Created.
+%% History : Written mostly by Per Gustafsson
%% ====================================================================
%% Exports :
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-module(hipe_rtl_binary_construct).
+
-export([gen_rtl/7]).
--import(hipe_tagscheme, [set_field_from_term/3,
- get_field_from_term/3,
- set_field_from_pointer/3,
- get_field_from_pointer/3]).
-
--import(hipe_rtl_binary, [floorlog2/1,
- get_word_integer/4,
- make_size/4]).
+
+-import(hipe_rtl_binary, [get_word_integer/4]).
+
%%-------------------------------------------------------------------------
-include("../main/hipe.hrl").
@@ -50,7 +46,6 @@
-define(BYTE_SIZE, 8).
-define(MAX_BINSIZE, ((1 bsl ((hipe_rtl_arch:word_size()*?BYTE_SIZE)-3)) - 1)).
-
%% -------------------------------------------------------------------------
%% The code is generated as a list of lists, it will be flattened later.
%%
@@ -61,12 +56,12 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
{bs_put_string, String, SizeInBytes} ->
[NewOffset] = get_real(Dst),
[Base, Offset] = Args,
- put_string(NewOffset, ConstTab, String, SizeInBytes, Base, Offset,
+ put_string(NewOffset, ConstTab, String, SizeInBytes, Base, Offset,
TrueLblName);
- _ ->
- Code =
+ _ ->
+ Code =
case BsOP of
- {bs_init, Size, _Flags} ->
+ {bs_init, Size, _Flags} ->
[] = Args,
[Dst0, Base, Offset] = Dst,
case is_illegal_const(Size bsl 3) of
@@ -75,14 +70,14 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
false ->
const_init2(Size, Dst0, Base, Offset, TrueLblName)
end;
-
- {bs_init, _Flags} ->
+
+ {bs_init, _Flags} ->
[Size] = Args,
[Dst0, Base, Offset] = Dst,
- var_init2(Size, Dst0, Base, Offset, TrueLblName,
+ var_init2(Size, Dst0, Base, Offset, TrueLblName,
SystemLimitLblName, FalseLblName);
- {bs_init_bits, Size, _Flags} ->
+ {bs_init_bits, Size, _Flags} ->
[] = Args,
[Dst0, Base, Offset] = Dst,
case is_illegal_const(Size) of
@@ -91,19 +86,19 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
false ->
const_init_bits(Size, Dst0, Base, Offset, TrueLblName)
end;
-
- {bs_init_bits, _Flags} ->
+
+ {bs_init_bits, _Flags} ->
[Size] = Args,
[Dst0, Base, Offset] = Dst,
- var_init_bits(Size, Dst0, Base, Offset, TrueLblName,
+ var_init_bits(Size, Dst0, Base, Offset, TrueLblName,
SystemLimitLblName, FalseLblName);
-
+
{bs_put_binary_all, Unit, _Flags} ->
[Src, Base, Offset] = Args,
[NewOffset] = get_real(Dst),
put_binary_all(NewOffset, Src, Base, Offset, Unit,
TrueLblName, FalseLblName);
-
+
{bs_put_binary, Size, _Flags} ->
case is_illegal_const(Size) of
true ->
@@ -112,19 +107,19 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
[NewOffset] = get_real(Dst),
case Args of
[Src, Base, Offset] ->
- put_static_binary(NewOffset, Src, Size, Base, Offset,
+ put_static_binary(NewOffset, Src, Size, Base, Offset,
TrueLblName, FalseLblName);
[Src, Bits, Base, Offset] ->
- {SizeCode, SizeReg} = make_size(Size, Bits,
- SystemLimitLblName,
- FalseLblName),
- InCode = put_dynamic_binary(NewOffset, Src, SizeReg, Base,
+ {SizeCode, SizeReg} =
+ hipe_rtl_binary:make_size(Size, Bits, SystemLimitLblName,
+ FalseLblName),
+ InCode = put_dynamic_binary(NewOffset, Src, SizeReg, Base,
Offset, TrueLblName, FalseLblName),
SizeCode ++ InCode
end
end;
-
- {bs_put_float, Size, Flags, ConstInfo} ->
+
+ {bs_put_float, Size, Flags, ConstInfo} ->
[NewOffset] = get_real(Dst),
Aligned = aligned(Flags),
LittleEndian = littleendian(Flags),
@@ -134,106 +129,108 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
false ->
case Args of
[Src, Base, Offset] ->
- CCode = static_float_c_code(NewOffset, Src, Base, Offset, Size, Flags,
+ CCode = static_float_c_code(NewOffset, Src, Base, Offset, Size, Flags,
TrueLblName, FalseLblName),
- put_float(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
+ put_float(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
LittleEndian, ConstInfo, TrueLblName);
[Src, Bits, Base, Offset] ->
- {SizeCode, SizeReg} = make_size(Size, Bits,
- SystemLimitLblName,
- FalseLblName),
- InCode = float_c_code(NewOffset, Src, Base, Offset, SizeReg,
+ {SizeCode, SizeReg} =
+ hipe_rtl_binary:make_size(Size, Bits, SystemLimitLblName,
+ FalseLblName),
+ InCode = float_c_code(NewOffset, Src, Base, Offset, SizeReg,
Flags, TrueLblName, FalseLblName),
SizeCode ++ InCode
end
end;
- {bs_put_integer, Size, Flags, ConstInfo} ->
- Aligned = aligned(Flags),
+ {bs_put_integer, Size, Flags, ConstInfo} ->
+ Aligned = aligned(Flags),
LittleEndian = littleendian(Flags),
[NewOffset] = get_real(Dst),
case is_illegal_const(Size) of
true ->
[hipe_rtl:mk_goto(FalseLblName)];
false ->
- case ConstInfo of
+ case ConstInfo of
fail ->
[hipe_rtl:mk_goto(FalseLblName)];
- _ ->
- case Args of
- [Src, Base, Offset] ->
+ _ ->
+ case Args of
+ [Src, Base, Offset] ->
CCode = static_int_c_code(NewOffset, Src,
- Base, Offset, Size,
- Flags, TrueLblName,
+ Base, Offset, Size,
+ Flags, TrueLblName,
FalseLblName),
- put_static_int(NewOffset, Src, Base, Offset, Size,
- CCode, Aligned, LittleEndian, TrueLblName);
- [Src, Bits, Base, Offset] ->
- {SizeCode, SizeReg} = make_size(Size, Bits,
+ put_static_int(NewOffset, Src, Base, Offset, Size,
+ CCode, Aligned, LittleEndian, TrueLblName);
+ [Src, Bits, Base, Offset] ->
+ {SizeCode, SizeReg} =
+ hipe_rtl_binary:make_size(Size, Bits,
SystemLimitLblName,
FalseLblName),
CCode = int_c_code(NewOffset, Src, Base,
- Offset, SizeReg, Flags,
- TrueLblName, FalseLblName),
+ Offset, SizeReg, Flags,
+ TrueLblName, FalseLblName),
InCode =
- put_dynamic_int(NewOffset, Src, Base, Offset,
+ put_dynamic_int(NewOffset, Src, Base, Offset,
SizeReg, CCode, Aligned,
- LittleEndian, TrueLblName),
- SizeCode ++ InCode
- end
- end
+ LittleEndian, TrueLblName),
+ SizeCode ++ InCode
+ end
+ end
end;
-
- {unsafe_bs_put_integer, 0, _Flags, _ConstInfo} ->
- [NewOffset] = get_real(Dst),
+
+ {unsafe_bs_put_integer, 0, _Flags, _ConstInfo} ->
+ [NewOffset] = get_real(Dst),
case Args of
[_Src, _Base, Offset] ->
[hipe_rtl:mk_move(NewOffset,Offset),
- hipe_rtl:mk_goto(TrueLblName)];
- [_Src, _Bits, _Base, Offset] ->
+ hipe_rtl:mk_goto(TrueLblName)];
+ [_Src, _Bits, _Base, Offset] ->
[hipe_rtl:mk_move(NewOffset,Offset),
- hipe_rtl:mk_goto(TrueLblName)]
- end;
-
- {unsafe_bs_put_integer, Size, Flags, ConstInfo} ->
+ hipe_rtl:mk_goto(TrueLblName)]
+ end;
+
+ {unsafe_bs_put_integer, Size, Flags, ConstInfo} ->
case is_illegal_const(Size) of
true ->
[hipe_rtl:mk_goto(FalseLblName)];
false ->
Aligned = aligned(Flags),
- LittleEndian = littleendian(Flags),
- [NewOffset] = get_real(Dst),
- case ConstInfo of
+ LittleEndian = littleendian(Flags),
+ [NewOffset] = get_real(Dst),
+ case ConstInfo of
fail ->
- [hipe_rtl:mk_goto(FalseLblName)];
- _ ->
- case Args of
- [Src, Base, Offset] ->
+ [hipe_rtl:mk_goto(FalseLblName)];
+ _ ->
+ case Args of
+ [Src, Base, Offset] ->
CCode = static_int_c_code(NewOffset, Src,
- Base, Offset, Size,
- Flags, TrueLblName,
+ Base, Offset, Size,
+ Flags, TrueLblName,
FalseLblName),
- put_unsafe_static_int(NewOffset, Src, Base,
+ put_unsafe_static_int(NewOffset, Src, Base,
Offset, Size,
- CCode, Aligned, LittleEndian,
- TrueLblName);
- [Src, Bits, Base, Offset] ->
- {SizeCode, SizeReg} = make_size(Size, Bits,
- SystemLimitLblName,
- FalseLblName),
+ CCode, Aligned, LittleEndian,
+ TrueLblName);
+ [Src, Bits, Base, Offset] ->
+ {SizeCode, SizeReg} =
+ hipe_rtl_binary:make_size(Size, Bits,
+ SystemLimitLblName,
+ FalseLblName),
CCode = int_c_code(NewOffset, Src, Base,
- Offset, SizeReg, Flags,
- TrueLblName, FalseLblName),
+ Offset, SizeReg, Flags,
+ TrueLblName, FalseLblName),
InCode =
- put_unsafe_dynamic_int(NewOffset, Src, Base,
- Offset, SizeReg, CCode,
- Aligned, LittleEndian,
+ put_unsafe_dynamic_int(NewOffset, Src, Base,
+ Offset, SizeReg, CCode,
+ Aligned, LittleEndian,
TrueLblName),
- SizeCode ++ InCode
- end
+ SizeCode ++ InCode
+ end
end
- end;
-
+ end;
+
bs_utf8_size ->
case Dst of
[_DstVar] ->
@@ -276,13 +273,13 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
[hipe_rtl:mk_call([], bs_validate_unicode, Args,
TrueLblName, FalseLblName, not_remote)];
- bs_final ->
+ bs_final ->
Zero = hipe_rtl:mk_imm(0),
- [Src, Offset] = Args,
+ [Src, Offset] = Args,
[BitSize, ByteSize] = create_regs(2),
[ShortLbl, LongLbl] = create_lbls(2),
- case Dst of
- [DstVar] ->
+ case Dst of
+ [DstVar] ->
[hipe_rtl:mk_alub(BitSize, Offset, 'and', ?LOW_BITS, eq,
hipe_rtl:label_name(ShortLbl),
hipe_rtl:label_name(LongLbl)), ShortLbl,
@@ -292,11 +289,11 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
hipe_rtl:mk_alu(ByteSize, Offset, 'srl', ?BYTE_SHIFT),
hipe_tagscheme:mk_sub_binary(DstVar, ByteSize,
Zero, BitSize, Zero, Src),
- hipe_rtl:mk_goto(TrueLblName)];
+ hipe_rtl:mk_goto(TrueLblName)];
[] ->
- [hipe_rtl:mk_goto(TrueLblName)]
- end;
-
+ [hipe_rtl:mk_goto(TrueLblName)]
+ end;
+
bs_init_writable ->
Zero = hipe_rtl:mk_imm(0),
[Size] = Args,
@@ -306,29 +303,29 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
[hipe_rtl:mk_gctest(?PROC_BIN_WORDSIZE + ?SUB_BIN_WORDSIZE),
get_word_integer(Size, SizeReg, SystemLimitLblName, FalseLblName),
allocate_writable(DstVar, Base, SizeReg, Zero, Zero),
- hipe_rtl:mk_goto(TrueLblName)];
-
+ hipe_rtl:mk_goto(TrueLblName)];
+
{bs_private_append, _U, _F} ->
- [Size, Bin] = Args,
+ [Size, Bin] = Args,
[DstVar, Base, Offset] = Dst,
[ProcBin] = create_vars(1),
[SubSize, SizeReg, EndSubSize, EndSubBitSize] = create_regs(4),
SubBinSize = {sub_binary, binsize},
- [get_field_from_term({sub_binary, orig}, Bin, ProcBin),
- get_field_from_term(SubBinSize, Bin, SubSize),
+ [hipe_tagscheme:get_field_from_term({sub_binary, orig}, Bin, ProcBin),
+ hipe_tagscheme:get_field_from_term(SubBinSize, Bin, SubSize),
get_word_integer(Size, SizeReg, SystemLimitLblName, FalseLblName),
realloc_binary(SizeReg, ProcBin, Base),
calculate_sizes(Bin, SizeReg, Offset, EndSubSize, EndSubBitSize),
- set_field_from_term(SubBinSize, Bin, EndSubSize),
- set_field_from_term({sub_binary, bitsize}, Bin, EndSubBitSize),
+ hipe_tagscheme:set_field_from_term(SubBinSize, Bin, EndSubSize),
+ hipe_tagscheme:set_field_from_term({sub_binary, bitsize}, Bin, EndSubBitSize),
hipe_rtl:mk_move(DstVar, Bin),
hipe_rtl:mk_goto(TrueLblName)];
{bs_append, _U, _F, Unit, _Bla} ->
- [Size, Bin] = Args,
- [DstVar, Base, Offset] = Dst,
+ [Size, Bin] = Args,
+ [DstVar, Base, Offset] = Dst,
[ProcBin] = create_vars(1),
- [Flags, SizeReg, IsWritable, EndSubSize, EndSubBitSize] =
+ [Flags, SizeReg, IsWritable, EndSubSize, EndSubBitSize] =
create_regs(5),
[ContLbl,ContLbl2,ContLbl3,ContLbl4,WritableLbl,NotWritableLbl] =
Lbls = create_lbls(6),
@@ -339,24 +336,24 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
SubIsWritable = {sub_binary, is_writable},
[hipe_rtl:mk_gctest(?SUB_BIN_WORDSIZE + ?PROC_BIN_WORDSIZE),
get_word_integer(Size, SizeReg, SystemLimitLblName, FalseLblName),
- hipe_tagscheme:test_bitstr(Bin, ContLblName, FalseLblName, 0.99),
- ContLbl,
- hipe_tagscheme:test_subbinary(Bin,ContLbl2Name, NotWritable),
+ hipe_tagscheme:test_bitstr(Bin, ContLblName, FalseLblName, 0.99),
+ ContLbl,
+ hipe_tagscheme:test_subbinary(Bin,ContLbl2Name, NotWritable),
ContLbl2,
- get_field_from_term(SubIsWritable, Bin, IsWritable),
+ hipe_tagscheme:get_field_from_term(SubIsWritable, Bin, IsWritable),
hipe_rtl:mk_branch(IsWritable, 'ne', Zero,
ContLbl3Name, NotWritable),
ContLbl3,
- get_field_from_term({sub_binary, orig}, Bin, ProcBin),
- get_field_from_term({proc_bin, flags}, ProcBin, Flags),
+ hipe_tagscheme:get_field_from_term({sub_binary, orig}, Bin, ProcBin),
+ hipe_tagscheme:get_field_from_term({proc_bin, flags}, ProcBin, Flags),
hipe_rtl:mk_alub(Flags, Flags, 'and',
- hipe_rtl:mk_imm(?PB_IS_WRITABLE),
+ hipe_rtl:mk_imm(?PB_IS_WRITABLE),
eq, NotWritable, ContLbl4Name, 0.01),
ContLbl4,
calculate_sizes(Bin, SizeReg, Offset, EndSubSize, EndSubBitSize),
is_divisible(Offset, Unit, Writable, FalseLblName),
WritableLbl,
- set_field_from_term(SubIsWritable, Bin, Zero),
+ hipe_tagscheme:set_field_from_term(SubIsWritable, Bin, Zero),
realloc_binary(SizeReg, ProcBin, Base),
hipe_tagscheme:mk_sub_binary(DstVar, EndSubSize, Zero,
EndSubBitSize, Zero,
@@ -394,7 +391,7 @@ not_writable_code(Bin, SizeReg, Dst, Base, Offset, Unit,
allocate_writable(Dst, Base, UsedBytes, TotBytes, TotSize),
put_binary_all(Offset, Bin, Base, hipe_rtl:mk_imm(0), Unit,
TrueLblName, FalseLblName)].
-
+
allocate_writable(Dst, Base, UsedBytes, TotBytes, TotSize) ->
Zero = hipe_rtl:mk_imm(0),
[NextLbl] = create_lbls(1),
@@ -411,7 +408,7 @@ allocate_writable(Dst, Base, UsedBytes, TotBytes, TotSize) ->
hipe_tagscheme:mk_sub_binary(Dst, EndSubSize, Zero, EndSubBitSize,
Zero, hipe_rtl:mk_imm(1), ProcBin)].
-realloc_binary(SizeReg, ProcBin, Base) ->
+realloc_binary(SizeReg, ProcBin, Base) ->
[NoReallocLbl, ReallocLbl, NextLbl, ContLbl] = Lbls = create_lbls(4),
[NoReallocLblName, ReallocLblName, NextLblName, ContLblName] =
[hipe_rtl:label_name(Lbl) || Lbl <- Lbls],
@@ -422,36 +419,36 @@ realloc_binary(SizeReg, ProcBin, Base) ->
ProcBinValTag = {proc_bin, val},
ProcBinBytesTag = {proc_bin, bytes},
BinOrigSizeTag = {binary, orig_size},
- [get_field_from_term(ProcBinSizeTag, ProcBin, PBSize),
+ [hipe_tagscheme:get_field_from_term(ProcBinSizeTag, ProcBin, PBSize),
hipe_rtl:mk_alu(Tmp, SizeReg, 'add', ?LOW_BITS),
hipe_rtl:mk_alu(ByteSize, Tmp, 'srl', ?BYTE_SHIFT),
hipe_rtl:mk_alu(ResultingSize, ByteSize, 'add', PBSize),
- set_field_from_term(ProcBinSizeTag, ProcBin, ResultingSize),
- get_field_from_term(ProcBinFlagsTag, ProcBin, Flags),
+ hipe_tagscheme:set_field_from_term(ProcBinSizeTag, ProcBin, ResultingSize),
+ hipe_tagscheme:get_field_from_term(ProcBinFlagsTag, ProcBin, Flags),
hipe_rtl:mk_alu(Flags, Flags, 'or', hipe_rtl:mk_imm(?PB_ACTIVE_WRITER)),
- set_field_from_term(ProcBinFlagsTag, ProcBin, Flags),
- get_field_from_term(ProcBinValTag, ProcBin, BinPointer),
- get_field_from_pointer(BinOrigSizeTag, BinPointer, OrigSize),
+ hipe_tagscheme:set_field_from_term(ProcBinFlagsTag, ProcBin, Flags),
+ hipe_tagscheme:get_field_from_term(ProcBinValTag, ProcBin, BinPointer),
+ hipe_tagscheme:get_field_from_pointer(BinOrigSizeTag, BinPointer, OrigSize),
hipe_rtl:mk_branch(OrigSize, 'ltu', ResultingSize,
ReallocLblName, NoReallocLblName),
NoReallocLbl,
- get_field_from_term(ProcBinBytesTag, ProcBin, Base),
+ hipe_tagscheme:get_field_from_term(ProcBinBytesTag, ProcBin, Base),
hipe_rtl:mk_goto(ContLblName),
ReallocLbl,
hipe_rtl:mk_alu(NewSize, ResultingSize, 'sll', hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_call([BinPointer], bs_reallocate, [BinPointer, NewSize],
+ hipe_rtl:mk_call([BinPointer], bs_reallocate, [BinPointer, NewSize],
NextLblName, [], not_remote),
NextLbl,
- set_field_from_pointer(BinOrigSizeTag, BinPointer, NewSize),
- set_field_from_term(ProcBinValTag, ProcBin, BinPointer),
+ hipe_tagscheme:set_field_from_pointer(BinOrigSizeTag, BinPointer, NewSize),
+ hipe_tagscheme:set_field_from_term(ProcBinValTag, ProcBin, BinPointer),
hipe_tagscheme:extract_binary_bytes(BinPointer, Base),
- set_field_from_term(ProcBinBytesTag, ProcBin, Base),
+ hipe_tagscheme:set_field_from_term(ProcBinBytesTag, ProcBin, Base),
ContLbl].
calculate_sizes(Bin, SizeReg, Offset, EndSubSize, EndSubBitSize) ->
[SubSize, SubBitSize, EndSize] = create_regs(3),
- [get_field_from_term({sub_binary, binsize}, Bin, SubSize),
- get_field_from_term({sub_binary, bitsize}, Bin, SubBitSize),
+ [hipe_tagscheme:get_field_from_term({sub_binary, binsize}, Bin, SubSize),
+ hipe_tagscheme:get_field_from_term({sub_binary, bitsize}, Bin, SubBitSize),
hipe_rtl:mk_alu(Offset, SubSize, 'sll', ?BYTE_SHIFT),
hipe_rtl:mk_alu(Offset, Offset, 'add', SubBitSize),
hipe_rtl:mk_alu(EndSize, Offset, 'add', SizeReg),
@@ -492,7 +489,7 @@ static_int_c_code(NewOffset, Src, Base, Offset, Size, Flags,
int_c_code(NewOffset, Src, Base, Offset, SizeReg, Flags,
TrueLblName, FalseLblName) ->
- put_c_code(bs_put_big_integer, NewOffset, Src, Base, Offset, SizeReg,
+ put_c_code(bs_put_big_integer, NewOffset, Src, Base, Offset, SizeReg,
Flags, TrueLblName, FalseLblName).
binary_c_code(NewOffset, Src, Base, Offset, Size, TrueLblName) ->
@@ -500,8 +497,8 @@ binary_c_code(NewOffset, Src, Base, Offset, Size, TrueLblName) ->
[SizeReg, FlagsReg] = create_regs(2),
[hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(0)),
hipe_rtl:mk_move(SizeReg, Size),
- hipe_rtl:mk_call([], bs_put_bits, [Src, SizeReg, Base, Offset, FlagsReg],
- hipe_rtl:label_name(PassedLbl),[],not_remote),
+ hipe_rtl:mk_call([], bs_put_bits, [Src, SizeReg, Base, Offset, FlagsReg],
+ hipe_rtl:label_name(PassedLbl), [], not_remote),
PassedLbl,
hipe_rtl:mk_alu(NewOffset, Offset, add, SizeReg),
hipe_rtl:mk_goto(TrueLblName)].
@@ -511,7 +508,7 @@ put_c_code(Func, NewOffset, Src, Base, Offset, SizeReg, Flags,
PassedLbl = hipe_rtl:mk_new_label(),
[FlagsReg] = create_regs(1),
[hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
- gen_test_sideffect_bs_call(Func, [Src, SizeReg, Base, Offset, FlagsReg],
+ gen_test_sideffect_bs_call(Func, [Src, SizeReg, Base, Offset, FlagsReg],
hipe_rtl:label_name(PassedLbl), FalseLblName),
PassedLbl,
hipe_rtl:mk_alu(NewOffset, Offset, add, SizeReg),
@@ -523,7 +520,7 @@ gen_test_sideffect_bs_call(Name, Args, TrueLblName, FalseLblName) ->
[hipe_rtl:mk_call([Tmp1], Name, Args,
hipe_rtl:label_name(RetLbl), [], not_remote),
RetLbl,
- hipe_rtl:mk_branch(Tmp1, eq, hipe_rtl:mk_imm(0),
+ hipe_rtl:mk_branch(Tmp1, eq, hipe_rtl:mk_imm(0),
FalseLblName, TrueLblName, 0.01)].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -544,7 +541,7 @@ create_unsafe_regs(0) ->
create_vars(X) when X > 0 ->
[hipe_rtl:mk_new_var()|create_vars(X-1)];
-create_vars(0) ->
+create_vars(0) ->
[].
create_lbls(X) when X > 0 ->
@@ -582,7 +579,7 @@ get_real(Dst) ->
%% The following functions are called from the translation switch:
%%
%% - put_string/7 creates code to copy a string to a binary
-%% starting at base+offset and ending at base+newoffset
+%% starting at base+offset and ending at base+newoffset
%%
%% - const_init2/6 initializes the creation of a binary of constant size
%%
@@ -609,10 +606,9 @@ put_string(NewOffset, ConstTab, String, SizeInBytes, Base, Offset, TLName) ->
[StringBase] = create_regs(1),
{NewTab, Lbl} = hipe_consttab:insert_block(ConstTab, byte, String),
{[hipe_rtl:mk_load_address(StringBase, Lbl, constant)|
- copy_string(StringBase, SizeInBytes, Base, Offset,
- NewOffset, TLName)],
+ copy_string(StringBase, SizeInBytes, Base, Offset, NewOffset, TLName)],
NewTab}.
-
+
const_init2(Size, Dst, Base, Offset, TrueLblName) ->
Log2WordSize = hipe_rtl_arch:log2_word_size(),
WordSize = hipe_rtl_arch:word_size(),
@@ -642,27 +638,29 @@ const_init_bits(Size, Dst, Base, Offset, TrueLblName) ->
TmpDst = hipe_rtl:mk_new_var(),
Zero = hipe_rtl:mk_imm(0),
{ExtraSpace, SubBinCode} =
- if (Size rem ?BYTE_SIZE) =:= 0 ->
- {0,[hipe_rtl:mk_move(Dst, TmpDst)]};
- true ->
+ case (Size rem ?BYTE_SIZE) =:= 0 of
+ true ->
+ {0, [hipe_rtl:mk_move(Dst, TmpDst)]};
+ false ->
{?SUB_BIN_WORDSIZE,
- hipe_tagscheme:mk_sub_binary(Dst, hipe_rtl:mk_imm(Size bsr 3), Zero,
+ hipe_tagscheme:mk_sub_binary(Dst, hipe_rtl:mk_imm(Size bsr 3), Zero,
hipe_rtl:mk_imm(Size band ?LOW_BITS_INT),
Zero, TmpDst)}
end,
BaseBinCode =
- if Size =< (?MAX_HEAP_BIN_SIZE * 8) ->
- ByteSize = (Size + 7) div 8,
- [hipe_rtl:mk_gctest(((ByteSize+ 3*WordSize-1) bsr Log2WordSize)+ ExtraSpace),
+ case Size =< (?MAX_HEAP_BIN_SIZE * 8) of
+ true ->
+ ByteSize = (Size + 7) div 8,
+ [hipe_rtl:mk_gctest(((ByteSize + 3*WordSize-1) bsr Log2WordSize) + ExtraSpace),
hipe_tagscheme:create_heap_binary(Base, ByteSize, TmpDst),
hipe_rtl:mk_move(Offset, Zero)];
- true ->
+ false ->
ByteSize = hipe_rtl:mk_new_reg(),
[hipe_rtl:mk_gctest(?PROC_BIN_WORDSIZE+ExtraSpace),
hipe_rtl:mk_move(Offset, Zero),
hipe_rtl:mk_move(ByteSize, hipe_rtl:mk_imm((Size+7) bsr 3)),
hipe_rtl:mk_call([Base], bs_allocate, [ByteSize],
- hipe_rtl:label_name(NextLbl),[],not_remote),
+ hipe_rtl:label_name(NextLbl), [], not_remote),
NextLbl,
hipe_tagscheme:create_refc_binary(Base, ByteSize, TmpDst)]
end,
@@ -671,12 +669,12 @@ const_init_bits(Size, Dst, Base, Offset, TrueLblName) ->
var_init2(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLblName) ->
Log2WordSize = hipe_rtl_arch:log2_word_size(),
WordSize = hipe_rtl_arch:word_size(),
- [ContLbl,HeapLbl,REFCLbl,NextLbl] = create_lbls(4),
- [USize,Tmp] = create_unsafe_regs(2),
+ [ContLbl, HeapLbl, REFCLbl, NextLbl] = create_lbls(4),
+ [USize, Tmp] = create_unsafe_regs(2),
[get_word_integer(Size, USize, SystemLimitLblName, FalseLblName),
hipe_rtl:mk_branch(USize, leu, hipe_rtl:mk_imm(?MAX_BINSIZE),
- hipe_rtl:label_name(ContLbl),
- SystemLimitLblName),
+ hipe_rtl:label_name(ContLbl),
+ SystemLimitLblName),
ContLbl,
hipe_rtl:mk_move(Offset, hipe_rtl:mk_imm(0)),
hipe_rtl:mk_branch(USize, leu, hipe_rtl:mk_imm(?MAX_HEAP_BIN_SIZE),
@@ -698,20 +696,20 @@ var_init2(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLblName
hipe_rtl:mk_goto(TrueLblName)].
var_init_bits(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLblName) ->
- [HeapLbl,REFCLbl,NextLbl,NoSubLbl,SubLbl,
+ [HeapLbl, REFCLbl, NextLbl, NoSubLbl, SubLbl,
NoCreateSubBin, CreateSubBin, JoinLbl, JoinLbl2] = create_lbls(9),
- [USize,ByteSize,TotByteSize,OffsetBits] = create_regs(4),
+ [USize, ByteSize, TotByteSize, OffsetBits] = create_regs(4),
[TmpDst] = create_unsafe_regs(1),
Log2WordSize = hipe_rtl_arch:log2_word_size(),
WordSize = hipe_rtl_arch:word_size(),
- MaximumWords =
+ MaximumWords =
erlang:max((?MAX_HEAP_BIN_SIZE + 3*WordSize) bsr Log2WordSize,
?PROC_BIN_WORDSIZE) + ?SUB_BIN_WORDSIZE,
Zero = hipe_rtl:mk_imm(0),
[hipe_rtl:mk_gctest(MaximumWords),
get_word_integer(Size, USize, SystemLimitLblName, FalseLblName),
hipe_rtl:mk_alu(ByteSize, USize, srl, ?BYTE_SHIFT),
- hipe_rtl:mk_alub(OffsetBits, USize, 'and', ?LOW_BITS, eq,
+ hipe_rtl:mk_alub(OffsetBits, USize, 'and', ?LOW_BITS, eq,
hipe_rtl:label_name(NoSubLbl),
hipe_rtl:label_name(SubLbl)),
NoSubLbl,
@@ -721,20 +719,20 @@ var_init_bits(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLbl
hipe_rtl:mk_alu(TotByteSize, ByteSize, 'add', hipe_rtl:mk_imm(1)),
JoinLbl,
hipe_rtl:mk_branch(TotByteSize, 'leu', hipe_rtl:mk_imm(?MAX_HEAP_BIN_SIZE),
- hipe_rtl:label_name(HeapLbl),
+ hipe_rtl:label_name(HeapLbl),
hipe_rtl:label_name(REFCLbl)),
HeapLbl,
hipe_tagscheme:create_heap_binary(Base, TotByteSize, TmpDst),
hipe_rtl:mk_goto(hipe_rtl:label_name(JoinLbl2)),
REFCLbl,
hipe_rtl:mk_call([Base], bs_allocate, [TotByteSize],
- hipe_rtl:label_name(NextLbl),[],not_remote),
+ hipe_rtl:label_name(NextLbl), [], not_remote),
NextLbl,
hipe_tagscheme:create_refc_binary(Base, TotByteSize, TmpDst),
JoinLbl2,
hipe_rtl:mk_move(Offset, Zero),
hipe_rtl:mk_branch(OffsetBits, 'eq', Zero,
- hipe_rtl:label_name(NoCreateSubBin),
+ hipe_rtl:label_name(NoCreateSubBin),
hipe_rtl:label_name(CreateSubBin)),
CreateSubBin,
hipe_tagscheme:mk_sub_binary(Dst, ByteSize, Zero, OffsetBits, Zero, TmpDst),
@@ -744,10 +742,10 @@ var_init_bits(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLbl
hipe_rtl:mk_goto(TrueLblName)].
put_binary_all(NewOffset, Src, Base, Offset, Unit, TLName, FLName) ->
- [SrcBase,SrcOffset,NumBits] = create_regs(3),
+ [SrcBase, SrcOffset, NumBits] = create_regs(3),
[ContLbl] = create_lbls(1),
CCode = binary_c_code(NewOffset, Src, Base, Offset, NumBits, TLName),
- AlignedCode = copy_aligned_bytes(SrcBase, SrcOffset, NumBits, Base, Offset,
+ AlignedCode = copy_aligned_bytes(SrcBase, SrcOffset, NumBits, Base, Offset,
NewOffset, TLName),
[get_base_offset_size(Src, SrcBase, SrcOffset, NumBits,FLName),
is_divisible(NumBits, Unit, hipe_rtl:label_name(ContLbl), FLName),
@@ -755,11 +753,11 @@ put_binary_all(NewOffset, Src, Base, Offset, Unit, TLName, FLName) ->
|test_alignment(SrcOffset, NumBits, Offset, AlignedCode, CCode)].
test_alignment(SrcOffset, NumBits, Offset, AlignedCode, CCode) ->
- [Tmp] = create_regs(1),
- [AlignedLbl,CLbl] = create_lbls(2),
+ [Tmp] = create_regs(1),
+ [AlignedLbl, CLbl] = create_lbls(2),
[hipe_rtl:mk_alu(Tmp, SrcOffset, 'or', NumBits),
hipe_rtl:mk_alu(Tmp, Tmp, 'or', Offset),
- hipe_rtl:mk_alub(Tmp, Tmp, 'and', ?LOW_BITS, 'eq',
+ hipe_rtl:mk_alub(Tmp, Tmp, 'and', ?LOW_BITS, 'eq',
hipe_rtl:label_name(AlignedLbl),
hipe_rtl:label_name(CLbl)),
AlignedLbl,
@@ -768,12 +766,12 @@ test_alignment(SrcOffset, NumBits, Offset, AlignedCode, CCode) ->
CCode].
put_static_binary(NewOffset, Src, Size, Base, Offset, TLName, FLName) ->
- [SrcBase] = create_unsafe_regs(1),
+ [SrcBase] = create_unsafe_regs(1),
[SrcOffset, SrcSize] = create_regs(2),
case Size of
0 ->
get_base_offset_size(Src, SrcBase, SrcOffset, SrcSize, FLName) ++
- [hipe_rtl:mk_move(NewOffset, Offset),
+ [hipe_rtl:mk_move(NewOffset, Offset),
hipe_rtl:mk_goto(TLName)];
_ ->
SizeImm = hipe_rtl:mk_imm(Size),
@@ -789,13 +787,13 @@ put_dynamic_binary(NewOffset, Src, SizeReg, Base, Offset, TLName, FLName) ->
[SrcBase] = create_unsafe_regs(1),
[SrcOffset, SrcSize] = create_regs(2),
CCode = binary_c_code(NewOffset, Src, Base, Offset, SizeReg, TLName),
- AlignedCode = copy_aligned_bytes(SrcBase, SrcOffset, SizeReg, Base, Offset,
+ AlignedCode = copy_aligned_bytes(SrcBase, SrcOffset, SizeReg, Base, Offset,
NewOffset, TLName),
get_base_offset_size(Src, SrcBase, SrcOffset, SrcSize, FLName) ++
small_check(SizeReg, SrcSize, FLName) ++
test_alignment(SrcOffset, SizeReg, Offset, AlignedCode, CCode).
-put_float(NewOffset, Src, Base, Offset, 64, CCode, Aligned, LittleEndian,
+put_float(NewOffset, Src, Base, Offset, 64, CCode, Aligned, LittleEndian,
ConstInfo, TrueLblName) ->
[CLbl] = create_lbls(1),
case {Aligned, LittleEndian} of
@@ -829,12 +827,12 @@ put_static_int(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
{false, true} ->
CCode;
{false, false} ->
- Init ++
+ Init ++
copy_offset_int_big(Base, Offset, NewOffset, Size, UntaggedSrc) ++
End
end.
-put_unsafe_static_int(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
+put_unsafe_static_int(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
LittleEndian, TrueLblName) ->
{Init, End, UntaggedSrc} = make_init_end(Src, TrueLblName),
case {Aligned, LittleEndian} of
@@ -849,7 +847,7 @@ put_unsafe_static_int(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
{false, true} ->
CCode;
{false, false} ->
- Init ++
+ Init ++
copy_offset_int_big(Base, Offset, NewOffset, Size, UntaggedSrc) ++
End
end.
@@ -861,7 +859,7 @@ put_dynamic_int(NewOffset, Src, Base, Offset, SizeReg, CCode, Aligned,
true ->
case LittleEndian of
true ->
- Init ++
+ Init ++
copy_int_little(Base, Offset, NewOffset, SizeReg, UntaggedSrc) ++
End;
false ->
@@ -880,7 +878,7 @@ put_unsafe_dynamic_int(NewOffset, Src, Base, Offset, SizeReg, CCode, Aligned,
true ->
case LittleEndian of
true ->
- Init ++
+ Init ++
copy_int_little(Base, Offset, NewOffset, SizeReg, UntaggedSrc) ++
End;
false ->
@@ -891,7 +889,7 @@ put_unsafe_dynamic_int(NewOffset, Src, Base, Offset, SizeReg, CCode, Aligned,
false ->
CCode
end.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
@@ -902,7 +900,7 @@ put_unsafe_dynamic_int(NewOffset, Src, Base, Offset, SizeReg, CCode, Aligned,
make_init_end(Src, CCode, TrueLblName) ->
[CLbl, SuccessLbl] = create_lbls(2),
[UntaggedSrc] = create_regs(1),
- Init = [hipe_tagscheme:test_fixnum(Src, hipe_rtl:label_name(SuccessLbl),
+ Init = [hipe_tagscheme:test_fixnum(Src, hipe_rtl:label_name(SuccessLbl),
hipe_rtl:label_name(CLbl), 0.99),
SuccessLbl,
hipe_tagscheme:untag_fixnum(UntaggedSrc,Src)],
@@ -915,28 +913,28 @@ make_init_end(Src, TrueLblName) ->
End = [hipe_rtl:mk_goto(TrueLblName)],
{Init, End, UntaggedSrc}.
-get_base_offset_size(Binary, SrcBase, SrcOffset, SrcSize, FLName) ->
+get_base_offset_size(Binary, SrcBase, SrcOffset, SrcSize, FLName) ->
[JoinLbl, EndLbl, SuccessLbl, SubLbl, OtherLbl, HeapLbl, REFCLbl] =
Lbls = create_lbls(7),
- [JoinLblName, EndLblName, SuccessLblName, SubLblName,
+ [JoinLblName, EndLblName, SuccessLblName, SubLblName,
OtherLblName, HeapLblName, REFCLblName] = get_label_names(Lbls),
- [BitSize,BitOffset] = create_regs(2),
+ [BitSize, BitOffset] = create_regs(2),
[Orig] = create_vars(1),
[hipe_tagscheme:test_bitstr(Binary, SuccessLblName, FLName, 0.99),
SuccessLbl,
- get_field_from_term({sub_binary,binsize}, Binary, SrcSize),
+ hipe_tagscheme:get_field_from_term({sub_binary,binsize}, Binary, SrcSize),
hipe_rtl:mk_alu(SrcSize, SrcSize, sll, ?BYTE_SHIFT),
hipe_tagscheme:test_subbinary(Binary, SubLblName, OtherLblName),
SubLbl,
- get_field_from_term({sub_binary,bitsize}, Binary, BitSize),
- get_field_from_term({sub_binary,offset}, Binary, SrcOffset),
+ hipe_tagscheme:get_field_from_term({sub_binary,bitsize}, Binary, BitSize),
+ hipe_tagscheme:get_field_from_term({sub_binary,offset}, Binary, SrcOffset),
hipe_rtl:mk_alu(SrcSize, SrcSize, add, BitSize),
- get_field_from_term({sub_binary,bitoffset}, Binary, BitOffset),
+ hipe_tagscheme:get_field_from_term({sub_binary,bitoffset}, Binary, BitOffset),
hipe_rtl:mk_alu(SrcOffset, SrcOffset, sll, ?BYTE_SHIFT),
hipe_rtl:mk_alu(SrcOffset, SrcOffset, add, BitOffset),
- get_field_from_term({sub_binary,orig}, Binary, Orig),
+ hipe_tagscheme:get_field_from_term({sub_binary,orig}, Binary, Orig),
hipe_rtl:mk_goto(JoinLblName),
- OtherLbl,
+ OtherLbl,
hipe_rtl:mk_move(SrcOffset, hipe_rtl:mk_imm(0)),
hipe_rtl:mk_move(Orig, Binary),
JoinLbl,
@@ -945,29 +943,29 @@ get_base_offset_size(Binary, SrcBase, SrcOffset, SrcSize, FLName) ->
hipe_rtl:mk_alu(SrcBase, Orig, add, hipe_rtl:mk_imm(?HEAP_BIN_DATA-2)),
hipe_rtl:mk_goto(EndLblName),
REFCLbl,
- get_field_from_term({proc_bin,bytes}, Orig, SrcBase),
+ hipe_tagscheme:get_field_from_term({proc_bin,bytes}, Orig, SrcBase),
EndLbl].
copy_aligned_bytes(CopyBase, CopyOffset, Size, Base, Offset, NewOffset, TrueLblName) ->
[BaseDst, BaseSrc] = create_unsafe_regs(2),
[Iter, Extra, BothOffset] = create_regs(3),
initializations(BaseSrc, BaseDst, BothOffset, CopyOffset, Offset, CopyBase, Base) ++
- [hipe_rtl:mk_alu(Extra, Size, 'and', ?LOW_BITS),
- hipe_rtl:mk_alu(Iter, Size, srl, ?BYTE_SHIFT),
+ [hipe_rtl:mk_alu(Extra, Size, 'and', ?LOW_BITS),
+ hipe_rtl:mk_alu(Iter, Size, srl, ?BYTE_SHIFT),
hipe_rtl:mk_alu(NewOffset, Offset, 'add', Size)] ++
easy_loop(BaseSrc, BaseDst, BothOffset, Iter, Extra, TrueLblName).
copy_string(StringBase, StringSize, BinBase, BinOffset, NewOffset, TrueLblName) ->
[TmpOffset,BothOffset,InitOffs] = create_regs(3),
[NewBinBase] = create_unsafe_regs(1),
- [EasyLbl,HardLbl] = create_lbls(2),
+ [EasyLbl, HardLbl] = create_lbls(2),
[hipe_rtl:mk_alu(TmpOffset, BinOffset, srl, ?BYTE_SHIFT),
hipe_rtl:mk_alu(NewBinBase, BinBase, add, TmpOffset),
hipe_rtl:mk_move(BothOffset, hipe_rtl:mk_imm(0)),
hipe_rtl:mk_alub(InitOffs, BinOffset, 'and', ?LOW_BITS, eq,
hipe_rtl:label_name(EasyLbl), hipe_rtl:label_name(HardLbl)),
EasyLbl,
- hipe_rtl:mk_alu(NewOffset, BinOffset, add,
+ hipe_rtl:mk_alu(NewOffset, BinOffset, add,
hipe_rtl:mk_imm(?bytes_to_bits(StringSize)))] ++
easy_loop(StringBase, NewBinBase, BothOffset,
hipe_rtl:mk_imm(StringSize), hipe_rtl:mk_imm(0), TrueLblName) ++
@@ -983,9 +981,9 @@ small_check(SizeVar, CopySize, FalseLblName) ->
hipe_rtl:label_name(SuccessLbl), FalseLblName),
SuccessLbl].
-easy_loop(BaseSrc, BaseDst, BothOffset, Iterations, Extra, TrueLblName) ->
- [Tmp1,Shift] = create_regs(2),
- [LoopLbl,TopLbl,EndLbl,ExtraLbl] = create_lbls(4),
+easy_loop(BaseSrc, BaseDst, BothOffset, Iterations, Extra, TrueLblName) ->
+ [Tmp1, Shift] = create_regs(2),
+ [LoopLbl, TopLbl, EndLbl, ExtraLbl] = create_lbls(4),
[TopLbl,
hipe_rtl:mk_branch(BothOffset, ne, Iterations, hipe_rtl:label_name(LoopLbl),
hipe_rtl:label_name(EndLbl), 0.99),
@@ -1005,17 +1003,17 @@ easy_loop(BaseSrc, BaseDst, BothOffset, Iterations, Extra, TrueLblName) ->
hipe_rtl:mk_store(BaseDst, BothOffset, Tmp1, byte),
hipe_rtl:mk_goto(TrueLblName)].
-hard_loop(BaseSrc, BaseDst, BothOffset, Iterations,
+hard_loop(BaseSrc, BaseDst, BothOffset, Iterations,
InitOffset, TrueLblName) ->
[Tmp1, Tmp2, OldByte, NewByte, SaveByte] = create_regs(5),
- [LoopLbl,EndLbl,TopLbl] = create_lbls(3),
+ [LoopLbl, EndLbl, TopLbl] = create_lbls(3),
[hipe_rtl:mk_load(OldByte, BaseDst, BothOffset, byte, unsigned),
- hipe_rtl:mk_alu(Tmp1, hipe_rtl:mk_imm(?BYTE_SIZE), sub, InitOffset),
+ hipe_rtl:mk_alu(Tmp1, hipe_rtl:mk_imm(?BYTE_SIZE), sub, InitOffset),
TopLbl,
- hipe_rtl:mk_branch(BothOffset, ne, Iterations,
- hipe_rtl:label_name(LoopLbl),
+ hipe_rtl:mk_branch(BothOffset, ne, Iterations,
+ hipe_rtl:label_name(LoopLbl),
hipe_rtl:label_name(EndLbl)),
- LoopLbl,
+ LoopLbl,
hipe_rtl:mk_load(NewByte, BaseSrc, BothOffset, byte, unsigned),
hipe_rtl:mk_alu(Tmp2, NewByte, srl, InitOffset),
hipe_rtl:mk_alu(SaveByte, OldByte, 'or', Tmp2),
@@ -1037,12 +1035,12 @@ initializations(BaseTmp1, BaseTmp2, BothOffset, CopyOffset, Offset, CopyBase, Ba
copy_int_little(Base, Offset, NewOffset, Size, Tmp1) when is_integer(Size) ->
[Tmp2,TmpOffset] = create_regs(2),
- ByteSize = Size div ?BYTE_SIZE,
- [hipe_rtl:mk_alu(TmpOffset, Offset, srl, ?BYTE_SHIFT),
- hipe_rtl:mk_alu(Tmp2, hipe_rtl:mk_imm(ByteSize), 'add', TmpOffset)] ++
-
+ ByteSize = Size div ?BYTE_SIZE,
+ [hipe_rtl:mk_alu(TmpOffset, Offset, srl, ?BYTE_SHIFT),
+ hipe_rtl:mk_alu(Tmp2, hipe_rtl:mk_imm(ByteSize), 'add', TmpOffset)] ++
+
little_loop(Tmp1, Tmp2, TmpOffset, Base) ++
-
+
case Size band 7 of
0 ->
[hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(Size))];
@@ -1051,18 +1049,16 @@ copy_int_little(Base, Offset, NewOffset, Size, Tmp1) when is_integer(Size) ->
hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(Size))]
end;
-
copy_int_little(Base, Offset, NewOffset, Size, Tmp1) ->
[Tmp2, Tmp3, Tmp4, TmpOffset] = create_regs(4),
-
[hipe_rtl:mk_alu(Tmp2, Size, srl, ?BYTE_SHIFT),
hipe_rtl:mk_alu(TmpOffset, Offset, srl, ?BYTE_SHIFT),
hipe_rtl:mk_alu(Tmp3, Tmp2, 'add', TmpOffset)] ++
-
+
little_loop(Tmp1, Tmp3, TmpOffset, Base) ++
-
+
[hipe_rtl:mk_alu(Tmp4, Size, 'and', ?LOW_BITS),
- hipe_rtl:mk_alu(Tmp4, hipe_rtl:mk_imm(?BYTE_SIZE), 'sub', Tmp4),
+ hipe_rtl:mk_alu(Tmp4, hipe_rtl:mk_imm(?BYTE_SIZE), 'sub', Tmp4),
hipe_rtl:mk_alu(Tmp1, Tmp1, sll, Tmp4),
hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
hipe_rtl:mk_alu(NewOffset, Offset, 'add', Size)].
@@ -1097,37 +1093,37 @@ copy_int_big(_Base, Offset, NewOffset, 0, _Tmp1) ->
[hipe_rtl:mk_move(NewOffset, Offset)];
copy_int_big(Base, Offset, NewOffset, ?BYTE_SIZE, Tmp1) ->
TmpOffset = hipe_rtl:mk_new_reg(),
- [hipe_rtl:mk_alu(TmpOffset, Offset, 'srl', hipe_rtl:mk_imm(3)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(8))];
+ [hipe_rtl:mk_alu(TmpOffset, Offset, 'srl', hipe_rtl:mk_imm(3)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(8))];
copy_int_big(Base, Offset, NewOffset, 2*?BYTE_SIZE, Tmp1) ->
TmpOffset = hipe_rtl:mk_new_reg(),
- [hipe_rtl:mk_alu(TmpOffset, Offset, 'srl', hipe_rtl:mk_imm(3)),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, 'add', hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_alu(Tmp1, Tmp1, 'sra', hipe_rtl:mk_imm(8)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(16))];
+ [hipe_rtl:mk_alu(TmpOffset, Offset, 'srl', hipe_rtl:mk_imm(3)),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, 'add', hipe_rtl:mk_imm(1)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
+ hipe_rtl:mk_alu(Tmp1, Tmp1, 'sra', hipe_rtl:mk_imm(8)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(16))];
copy_int_big(Base, Offset, NewOffset, 3*?BYTE_SIZE, Tmp1) ->
- TmpOffset = hipe_rtl:mk_new_reg(),
- [hipe_rtl:mk_alu(TmpOffset, Offset, srl, hipe_rtl:mk_imm(3)),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, add, hipe_rtl:mk_imm(2)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(8)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(8)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(NewOffset, Offset, add, hipe_rtl:mk_imm(24))];
+ TmpOffset = hipe_rtl:mk_new_reg(),
+ [hipe_rtl:mk_alu(TmpOffset, Offset, srl, hipe_rtl:mk_imm(3)),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, add, hipe_rtl:mk_imm(2)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
+ hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(8)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
+ hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(8)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(NewOffset, Offset, add, hipe_rtl:mk_imm(24))];
copy_int_big(Base, Offset,NewOffset, 4*?BYTE_SIZE, Tmp1) ->
copy_big_word(Base, Offset, NewOffset, Tmp1);
copy_int_big(Base, Offset, NewOffset, Size, Tmp1) when is_integer(Size) ->
[OldOffset, TmpOffset, Bits] = create_regs(3),
ByteSize = (Size + 7) div ?BYTE_SIZE,
- case Size band 7 of
- 0 ->
+ case Size band 7 of
+ 0 ->
[hipe_rtl:mk_alu(OldOffset, Offset, sra, hipe_rtl:mk_imm(3)),
hipe_rtl:mk_alu(TmpOffset, OldOffset, add, hipe_rtl:mk_imm(ByteSize))];
Rest ->
@@ -1138,7 +1134,7 @@ copy_int_big(Base, Offset, NewOffset, Size, Tmp1) when is_integer(Size) ->
hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(Rest))]
end ++
big_loop(Tmp1, OldOffset, TmpOffset, Base) ++
- [hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(Size))];
+ [hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(Size))];
copy_int_big(Base, Offset, NewOffset, Size, Tmp1) ->
Tmp2 = hipe_rtl:mk_new_reg(),
Tmp3 = hipe_rtl:mk_new_reg(),
@@ -1151,7 +1147,7 @@ copy_int_big(Base, Offset, NewOffset, Size, Tmp1) ->
[hipe_rtl:mk_alu(Tmp2, Size, 'srl', hipe_rtl:mk_imm(3)),
hipe_rtl:mk_alu(Tmp3, Offset, 'srl', hipe_rtl:mk_imm(3)),
hipe_rtl:mk_alu(TmpOffset, Tmp2, 'add', Tmp3),
- hipe_rtl:mk_alub(Tmp4, Size, 'and', hipe_rtl:mk_imm(7), 'eq',
+ hipe_rtl:mk_alub(Tmp4, Size, 'and', hipe_rtl:mk_imm(7), 'eq',
hipe_rtl:label_name(EvenLbl), hipe_rtl:label_name(OddLbl)),
OddLbl,
hipe_rtl:mk_alu(Tmp6, hipe_rtl:mk_imm(8), 'sub', Tmp4),
@@ -1159,9 +1155,7 @@ copy_int_big(Base, Offset, NewOffset, Size, Tmp1) ->
hipe_rtl:mk_store(Base, TmpOffset, Tmp5, byte),
EvenLbl,
hipe_rtl:mk_alu(Tmp1, Tmp1, srl, Tmp4)] ++
-
big_loop(Tmp1, Tmp3, TmpOffset, Base) ++
-
[hipe_rtl:mk_alu(NewOffset, Offset, 'add', Size)].
copy_big_word(Base, Offset, NewOffset, Word) ->
@@ -1224,8 +1218,8 @@ copy_offset_int_big(Base, Offset, NewOffset, Size, Tmp1)
hipe_rtl:mk_alu(Tmp6, Tmp6, 'and', ?LOW_BITS),
hipe_rtl:mk_alu(Tmp4, hipe_rtl:mk_imm(?BYTE_SIZE), 'sub', Tmp6),
hipe_rtl:mk_move(Tmp5, Tmp1),
- hipe_rtl:mk_alu(Tmp1, Tmp1, 'sll', Tmp6),
- hipe_rtl:mk_branch(TmpOffset, 'ne', Tmp3, hipe_rtl:label_name(NextLbl),
+ hipe_rtl:mk_alu(Tmp1, Tmp1, 'sll', Tmp6),
+ hipe_rtl:mk_branch(TmpOffset, 'ne', Tmp3, hipe_rtl:label_name(NextLbl),
hipe_rtl:label_name(EndLbl)),
NextLbl,
hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
@@ -1272,7 +1266,7 @@ copy_float_big(_Base, _Offset, _NewOffset, _Src, FalseLblName, _TrueLblName, fai
copy_float_big(Base, Offset, NewOffset, Src, _FalseLblName, TrueLblName,pass) ->
FloatLo = hipe_rtl:mk_new_reg(),
FloatHi = hipe_rtl:mk_new_reg(),
- TmpOffset =hipe_rtl:mk_new_reg(),
+ TmpOffset = hipe_rtl:mk_new_reg(),
hipe_tagscheme:unsafe_load_float(FloatLo, FloatHi, Src) ++
copy_big_word(Base, Offset, TmpOffset, FloatHi) ++
copy_big_word(Base, TmpOffset, NewOffset, FloatLo) ++
@@ -1285,7 +1279,7 @@ copy_float_big(Base, Offset, NewOffset, Src, FalseLblName, TrueLblName, var) ->
is_divisible(_Dividend, 1, SuccLbl, _FailLbl) ->
[hipe_rtl:mk_goto(SuccLbl)];
is_divisible(Dividend, Divisor, SuccLbl, FailLbl) ->
- Log2 = floorlog2(Divisor),
+ Log2 = hipe_rtl_binary:floorlog2(Divisor),
case Divisor =:= 1 bsl Log2 of
true -> %% Divisor is a power of 2
%% Test that the Log2-1 lowest bits are clear
diff --git a/lib/hipe/rtl/hipe_rtl_binary_match.erl b/lib/hipe/rtl/hipe_rtl_binary_match.erl
index be4c35dae0..528672b893 100644
--- a/lib/hipe/rtl/hipe_rtl_binary_match.erl
+++ b/lib/hipe/rtl/hipe_rtl_binary_match.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_cfg.erl b/lib/hipe/rtl/hipe_rtl_cfg.erl
index 8b2bc93bc5..f49e8f815f 100644
--- a/lib/hipe/rtl/hipe_rtl_cfg.erl
+++ b/lib/hipe/rtl/hipe_rtl_cfg.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_cleanup_const.erl b/lib/hipe/rtl/hipe_rtl_cleanup_const.erl
index 579ba11f7d..0a1cdbacb8 100644
--- a/lib/hipe/rtl/hipe_rtl_cleanup_const.erl
+++ b/lib/hipe/rtl/hipe_rtl_cleanup_const.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_exceptions.erl b/lib/hipe/rtl/hipe_rtl_exceptions.erl
index 243e06c196..331719f344 100644
--- a/lib/hipe/rtl/hipe_rtl_exceptions.erl
+++ b/lib/hipe/rtl/hipe_rtl_exceptions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_lcm.erl b/lib/hipe/rtl/hipe_rtl_lcm.erl
index 1f65d870e4..71bd06c0df 100644
--- a/lib/hipe/rtl/hipe_rtl_lcm.erl
+++ b/lib/hipe/rtl/hipe_rtl_lcm.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -63,10 +63,10 @@ rtl_lcm(CFG, Options) ->
pp_debug("-------------------------------------------------~n",[]),
%% pp_debug( "~w~n", [MFA]),
-
+
%% A check if we should pretty print the result.
case proplists:get_bool(pp_rtl_lcm, Options) of
- true->
+ true ->
pp_debug("-------------------------------------------------~n",[]),
%% pp_debug("AllExpr: ~w~n", [AllExpr]),
pp_debug("AllExpr:~n", []),
@@ -76,21 +76,21 @@ rtl_lcm(CFG, Options) ->
_ ->
ok
end,
-
+
pp_debug("-------------------------------------------------~n",[]),
- ?option_time({CFG1, MoveSet} = perform_lcm(CFG, NodeInfo, EdgeInfo, ExprMap,
- IdMap, AllExpr, mk_edge_bb_map(),
+ {CFG1, MoveSet} = ?option_time(perform_lcm(CFG, NodeInfo, EdgeInfo, ExprMap,
+ IdMap, AllExpr, mk_edge_bb_map(),
?SETS:new(), Labels),
- "RTL LCM perform_lcm", Options),
+ "RTL LCM perform_lcm", Options),
%% Scan through list of moved expressions and replace their
%% assignments with the new temporary created for that expression
MoveList = ?SETS:to_list(MoveSet),
- ?option_time(CFG2 = moved_expr_replace_assignments(CFG1, ExprMap, IdMap,
+ CFG2 = ?option_time(moved_expr_replace_assignments(CFG1, ExprMap, IdMap,
MoveList),
- "RTL LCM moved_expr_replace_assignments", Options),
+ "RTL LCM moved_expr_replace_assignments", Options),
pp_debug("-------------------------------------------------~n~n",[]),
-
+
CFG2.
%%=============================================================================
@@ -466,10 +466,10 @@ expr_clear_dst(I) ->
%% easy access later.
lcm_precalc(CFG, Options) ->
%% Calculate use map and expression map.
- ?option_time({ExprMap, IdMap} = mk_expr_map(CFG),
- "RTL LCM mk_expr_map", Options),
- ?option_time(UseMap = mk_use_map(CFG, ExprMap),
- "RTL LCM mk_use_map", Options),
+ {ExprMap, IdMap} = ?option_time(mk_expr_map(CFG),
+ "RTL LCM mk_expr_map", Options),
+ UseMap = ?option_time(mk_use_map(CFG, ExprMap),
+ "RTL LCM mk_use_map", Options),
%% Labels = hipe_rtl_cfg:reverse_postorder(CFG),
Labels = hipe_rtl_cfg:labels(CFG),
%% StartLabel = hipe_rtl_cfg:start_label(CFG),
@@ -477,28 +477,28 @@ lcm_precalc(CFG, Options) ->
AllExpr = ?SETS:from_list(gb_trees:keys(IdMap)),
%% Calculate the data sets.
- ?option_time(NodeInfo0 = mk_node_info(Labels), "RTL LCM mk_node_info",
- Options),
+ NodeInfo0 = ?option_time(mk_node_info(Labels),
+ "RTL LCM mk_node_info", Options),
%% ?option_time(EdgeInfo0 = mk_edge_info(), "RTL LCM mk_edge_info",
%% Options),
EdgeInfo0 = mk_edge_info(),
- ?option_time(NodeInfo1 = calc_up_exp(CFG, ExprMap, NodeInfo0, Labels),
- "RTL LCM calc_up_exp", Options),
- ?option_time(NodeInfo2 = calc_down_exp(CFG, ExprMap, NodeInfo1, Labels),
- "RTL LCM calc_down_exp", Options),
- ?option_time(NodeInfo3 = calc_killed_expr(CFG, NodeInfo2, UseMap, AllExpr,
+ NodeInfo1 = ?option_time(calc_up_exp(CFG, ExprMap, NodeInfo0, Labels),
+ "RTL LCM calc_up_exp", Options),
+ NodeInfo2 = ?option_time(calc_down_exp(CFG, ExprMap, NodeInfo1, Labels),
+ "RTL LCM calc_down_exp", Options),
+ NodeInfo3 = ?option_time(calc_killed_expr(CFG, NodeInfo2, UseMap, AllExpr,
IdMap, Labels),
- "RTL LCM calc_killed_exp", Options),
- ?option_time(NodeInfo4 = calc_avail(CFG, NodeInfo3),
- "RTL LCM calc_avail", Options),
- ?option_time(NodeInfo5 = calc_antic(CFG, NodeInfo4, AllExpr),
- "RTL LCM calc_antic", Options),
- ?option_time(EdgeInfo1 = calc_earliest(CFG, NodeInfo5, EdgeInfo0, Labels),
- "RTL LCM calc_earliest", Options),
- ?option_time({NodeInfo6, EdgeInfo2} = calc_later(CFG, NodeInfo5, EdgeInfo1),
- "RTL LCM calc_later", Options),
- ?option_time(NodeInfo7 = calc_delete(CFG, NodeInfo6, Labels),
- "RTL LCM calc_delete", Options),
+ "RTL LCM calc_killed_exp", Options),
+ NodeInfo4 = ?option_time(calc_avail(CFG, NodeInfo3),
+ "RTL LCM calc_avail", Options),
+ NodeInfo5 = ?option_time(calc_antic(CFG, NodeInfo4, AllExpr),
+ "RTL LCM calc_antic", Options),
+ EdgeInfo1 = ?option_time(calc_earliest(CFG, NodeInfo5, EdgeInfo0, Labels),
+ "RTL LCM calc_earliest", Options),
+ {NodeInfo6, EdgeInfo2} = ?option_time(calc_later(CFG, NodeInfo5, EdgeInfo1),
+ "RTL LCM calc_later", Options),
+ NodeInfo7 = ?option_time(calc_delete(CFG, NodeInfo6, Labels),
+ "RTL LCM calc_delete", Options),
{NodeInfo7, EdgeInfo2, AllExpr, ExprMap, IdMap, Labels}.
%%%%%%%%%%%%%%%%%%% AVAILABLE IN/OUT FLOW ANALYSIS %%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -941,15 +941,16 @@ calc_insert_edge(NodeInfo, EdgeInfo, From, To) ->
calc_delete(_, NodeInfo, []) ->
NodeInfo;
calc_delete(CFG, NodeInfo, [Label|Labels]) ->
- case Label =:= hipe_rtl_cfg:start_label(CFG) of
- true ->
- NewNodeInfo = set_delete(NodeInfo, Label, ?SETS:new());
- false ->
- UpExp = up_exp(NodeInfo, Label),
- LaterIn = later_in(NodeInfo, Label),
- Delete = ?SETS:subtract(UpExp, LaterIn),
- NewNodeInfo = set_delete(NodeInfo, Label, Delete)
- end,
+ NewNodeInfo =
+ case Label =:= hipe_rtl_cfg:start_label(CFG) of
+ true ->
+ set_delete(NodeInfo, Label, ?SETS:new());
+ false ->
+ UpExp = up_exp(NodeInfo, Label),
+ LaterIn = later_in(NodeInfo, Label),
+ Delete = ?SETS:subtract(UpExp, LaterIn),
+ set_delete(NodeInfo, Label, Delete)
+ end,
calc_delete(CFG, NewNodeInfo, Labels).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/hipe/rtl/hipe_rtl_liveness.erl b/lib/hipe/rtl/hipe_rtl_liveness.erl
index 46c02506a2..674043ec3c 100644
--- a/lib/hipe/rtl/hipe_rtl_liveness.erl
+++ b/lib/hipe/rtl/hipe_rtl_liveness.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_mk_switch.erl b/lib/hipe/rtl/hipe_rtl_mk_switch.erl
index 0c13b9ffcb..5f9dffa8cf 100644
--- a/lib/hipe/rtl/hipe_rtl_mk_switch.erl
+++ b/lib/hipe/rtl/hipe_rtl_mk_switch.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_primops.erl b/lib/hipe/rtl/hipe_rtl_primops.erl
index b5a43b6b7e..062fab842f 100644
--- a/lib/hipe/rtl/hipe_rtl_primops.erl
+++ b/lib/hipe/rtl/hipe_rtl_primops.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_ssa.erl b/lib/hipe/rtl/hipe_rtl_ssa.erl
index b9be73d6ac..1e3b21d6be 100644
--- a/lib/hipe/rtl/hipe_rtl_ssa.erl
+++ b/lib/hipe/rtl/hipe_rtl_ssa.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_ssa_avail_expr.erl b/lib/hipe/rtl/hipe_rtl_ssa_avail_expr.erl
index ffb63c48e2..f08ff22ed9 100644
--- a/lib/hipe/rtl/hipe_rtl_ssa_avail_expr.erl
+++ b/lib/hipe/rtl/hipe_rtl_ssa_avail_expr.erl
@@ -1,7 +1,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_ssa_const_prop.erl b/lib/hipe/rtl/hipe_rtl_ssa_const_prop.erl
index f80f9bc7d2..7158383010 100644
--- a/lib/hipe/rtl/hipe_rtl_ssa_const_prop.erl
+++ b/lib/hipe/rtl/hipe_rtl_ssa_const_prop.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_ssapre.erl b/lib/hipe/rtl/hipe_rtl_ssapre.erl
index 94533e5bdd..df1a4b9376 100644
--- a/lib/hipe/rtl/hipe_rtl_ssapre.erl
+++ b/lib/hipe/rtl/hipe_rtl_ssapre.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -107,7 +107,7 @@ rtl_ssapre(RtlSSACfg, Options) ->
case XsiList of
[] ->
%% No Xsi
- ?option_time(?pp_debug("~n~n################ No Xsi Inserted ################~n",[]),"RTL A-SSAPRE No Xsi inserted (skip Downsafety and Will Be Available)",Options),
+ ?pp_debug("~n~n################ No Xsi Inserted ################~n",[]),
ok;
_ ->
?pp_debug("~n############ Downsafety ##########~n",[]),
@@ -126,7 +126,7 @@ rtl_ssapre(RtlSSACfg, Options) ->
?pp_debug("~n~n################ Xsi CFG ################~n",[]),pp_cfg(CFG2,XsiGraph),
init_redundancy_count(),
- ?option_time(FinalCFG=perform_code_motion(Labels,CFG2,XsiGraph),"RTL A-SSAPRE Code Motion",Options),
+ FinalCFG = ?option_time(perform_code_motion(Labels,CFG2,XsiGraph),"RTL A-SSAPRE Code Motion",Options),
?pp_debug("\n############ No more need for the Xsi Graph....Deleting...",[]),?GRAPH:delete(XsiGraph),
@@ -146,7 +146,7 @@ perform_Xsi_insertion(Cfg, Options) ->
init_counters(), %% Init counters for Bottoms and Temps
DigraphOpts = [cyclic, private],
XsiGraph = digraph:new(DigraphOpts),
- %% Be carefull, the digraph component is NOT garbage collected,
+ %% Be careful, the digraph component is NOT garbage collected,
%% so don't create 20 millions of instances!
%% finds the longest depth
%% Depth-first, preorder traversal over Basic Blocks.
@@ -154,13 +154,13 @@ perform_Xsi_insertion(Cfg, Options) ->
Labels = ?CFG:preorder(Cfg),
?pp_debug("~n~n############# Finding definitions for computation~n~n",[]),
- ?option_time({Cfg2,XsiGraph} = find_definition_for_computations(Labels,Cfg,XsiGraph),"RTL A-SSAPRE Xsi Insertion, searching from instructions",Options),
+ {Cfg2,XsiGraph} = ?option_time(find_definition_for_computations(Labels,Cfg,XsiGraph),"RTL A-SSAPRE Xsi Insertion, searching from instructions",Options),
%% Active List creation
GeneratorXsiList = lists:sort(?GRAPH:vertices(XsiGraph)),
?pp_debug("~n~n############# Inserted Xsis ~w",[GeneratorXsiList]),
?pp_debug("~n~n############# Finding operands~n",[]),
- ?option_time({Cfg3,XsiGraph} = find_operands(Cfg2,XsiGraph,GeneratorXsiList,0),"RTL A-SSAPRE Xsi Insertion, finding operands",Options),
+ {Cfg3,XsiGraph} = ?option_time(find_operands(Cfg2,XsiGraph,GeneratorXsiList,0),"RTL A-SSAPRE Xsi Insertion, finding operands",Options),
%% Creating the CFGGraph
?pp_debug("~n~n############# Creating CFG Graph",[]),
@@ -170,9 +170,9 @@ perform_Xsi_insertion(Cfg, Options) ->
?pp_debug("~nAdding a vertex for the start label: ~w",[StartLabel]),
?GRAPH:add_vertex(CFGGraph, StartLabel, #block{type = top}),
% Doing the others
- ?option_time(MPs=create_cfggraph(Others,Cfg3,CFGGraph,[],[],[],XsiGraph),"RTL A-SSAPRE Xsi Insertion, creating intermediate 'SSAPRE Graph'",Options),
+ MPs = ?option_time(create_cfggraph(Others,Cfg3,CFGGraph,[],[],[],XsiGraph),"RTL A-SSAPRE Xsi Insertion, creating intermediate 'SSAPRE Graph'",Options),
- %% Return the bloody collected information
+ %% Return the collected information
{Cfg3,XsiGraph,CFGGraph,MPs}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -221,22 +221,21 @@ find_definition_for_computations_in_block(BlockLabel,[Inst|Rest],Cfg,
?pp_debug(" Inserting Xsi: ",[]),pp_xsi(Xsi),
Label = Xsi#xsi.label,
- case BlockLabel =:= Label of
- false ->
- %% Insert the Xsi in the appropriate block
- Code = hipe_bb:code(?CFG:bb(Cfg,Label)),
- {BeforeCode,AfterCode} = split_for_xsi(lists:reverse(Code),[]),
- NewCode = BeforeCode++[XsiLink|AfterCode],
- NewBB = hipe_bb:mk_bb(NewCode),
- NewCfg = ?CFG:bb_add(Cfg,Label,NewBB),
- NewVisited = [NewInst|VisitedInstructions];
- _->
- {BeforeCode,AfterCode} = split_for_xsi(VisitedInstructions,[]),
- TempVisited = BeforeCode++[XsiLink|AfterCode],
- TempVisited2 = lists:reverse(TempVisited),
- NewVisited = [NewInst|TempVisited2],
- NewCfg = Cfg
- end,
+ {NewCfg, NewVisited} =
+ case BlockLabel =:= Label of
+ false ->
+ %% Insert the Xsi in the appropriate block
+ Code = hipe_bb:code(?CFG:bb(Cfg,Label)),
+ {BeforeCode,AfterCode} = split_for_xsi(lists:reverse(Code),[]),
+ NewCode = BeforeCode++[XsiLink|AfterCode],
+ NewBB = hipe_bb:mk_bb(NewCode),
+ {?CFG:bb_add(Cfg,Label,NewBB), [NewInst|VisitedInstructions]};
+ _->
+ {BeforeCode,AfterCode} = split_for_xsi(VisitedInstructions,[]),
+ TempVisited = BeforeCode++[XsiLink|AfterCode],
+ TempVisited2 = lists:reverse(TempVisited),
+ {Cfg, [NewInst|TempVisited2]}
+ end,
find_definition_for_computations_in_block(BlockLabel, Rest, NewCfg,
NewVisited, XsiGraph)
end;
@@ -787,14 +786,15 @@ create_cfggraph([Label|Ls],Cfg,CFGGraph,ToBeFactorizedAcc,MPAcc,LateEdges,XsiGra
Defs = get_defs_in_non_merge_block(Code, []),
?pp_debug("~nAdding a vertex for ~w", [Label]),
Succs = ?CFG:succ(Cfg, Label),
- case Succs of
- [] -> %% Exit point
- ?GRAPH:add_vertex(CFGGraph, Label, #block{type = exit}),
- NewToBeFactorizedAcc = ToBeFactorizedAcc;
- _ -> %% Split point
- ?GRAPH:add_vertex(CFGGraph,Label,#block{type=not_mp,attributes={P,Succs}}),
- NewToBeFactorizedAcc = [Label|ToBeFactorizedAcc]
- end,
+ NewToBeFactorizedAcc =
+ case Succs of
+ [] -> %% Exit point
+ ?GRAPH:add_vertex(CFGGraph, Label, #block{type = exit}),
+ ToBeFactorizedAcc;
+ _ -> %% Split point
+ ?GRAPH:add_vertex(CFGGraph,Label,#block{type=not_mp,attributes={P,Succs}}),
+ [Label|ToBeFactorizedAcc]
+ end,
?pp_debug("~nAdding an edge ~w -> ~w (~w)",[P,Label,Defs]),
case ?GRAPH:add_edge(CFGGraph,P,Label,Defs) of
{error,Reason} ->
@@ -862,56 +862,53 @@ add_edges_for_mp([P|Ps], Label, LateEdges) ->
%% Doesn't do anything so far
add_map_and_uses([], _Key, Maps, Uses) ->
- {Maps,Uses};
+ {Maps, Uses};
add_map_and_uses([XsiOp|Ops], Key, Maps, Uses) ->
- case XsiOp#xsi_op.op of
- #bottom{} ->
- Set = case gb_trees:lookup(XsiOp,Maps) of
- {value, V} ->
- ?SETS:add_element(Key,V);
- none ->
- ?SETS:from_list([Key])
- end,
- NewMaps = gb_trees:enter(XsiOp,Set,Maps),
- NewUses = Uses;
- #temp{} ->
- Set = case gb_trees:lookup(XsiOp,Maps) of
- {value, V} ->
- ?SETS:add_element(Key,V);
- none ->
- ?SETS:from_list([Key])
- end,
- NewMaps = gb_trees:enter(XsiOp,Set,Maps),
- Pred = XsiOp#xsi_op.pred,
- OOP = XsiOp#xsi_op.op,
- SSet = case gb_trees:lookup(Pred,Uses) of
- {value, VV} ->
- ?SETS:add_element(OOP#temp.key,VV);
- none ->
- ?SETS:from_list([OOP#temp.key])
- end,
- NewUses = gb_trees:enter(Pred,SSet,Uses);
- #eop{} ->
- Set = case gb_trees:lookup(XsiOp,Maps) of
- {value, V} ->
- ?SETS:add_element(Key,V);
- none ->
- ?SETS:from_list([Key])
- end,
- NewMaps = gb_trees:enter(XsiOp,Set,Maps),
- Pred = XsiOp#xsi_op.pred,
- Op = XsiOp#xsi_op.op,
- SSet = case gb_trees:lookup(Pred,Uses) of
- {value, VV} ->
- ?SETS:add_element(Op#eop.stopped_by,VV);
- none ->
- ?SETS:from_list([Op#eop.stopped_by])
- end,
- NewUses = gb_trees:enter(Pred,SSet,Uses);
- _->
- NewMaps = Maps,
- NewUses = Uses
- end,
+ {NewMaps, NewUses} =
+ case XsiOp#xsi_op.op of
+ #bottom{} ->
+ Set = case gb_trees:lookup(XsiOp, Maps) of
+ {value, V} ->
+ ?SETS:add_element(Key, V);
+ none ->
+ ?SETS:from_list([Key])
+ end,
+ {gb_trees:enter(XsiOp, Set, Maps), Uses};
+ #temp{} ->
+ Set = case gb_trees:lookup(XsiOp, Maps) of
+ {value, V} ->
+ ?SETS:add_element(Key, V);
+ none ->
+ ?SETS:from_list([Key])
+ end,
+ Pred = XsiOp#xsi_op.pred,
+ OOP = XsiOp#xsi_op.op,
+ SSet = case gb_trees:lookup(Pred, Uses) of
+ {value, VV} ->
+ ?SETS:add_element(OOP#temp.key, VV);
+ none ->
+ ?SETS:from_list([OOP#temp.key])
+ end,
+ {gb_trees:enter(XsiOp, Set, Maps), gb_trees:enter(Pred, SSet, Uses)};
+ #eop{} ->
+ Set = case gb_trees:lookup(XsiOp, Maps) of
+ {value, V} ->
+ ?SETS:add_element(Key, V);
+ none ->
+ ?SETS:from_list([Key])
+ end,
+ Pred = XsiOp#xsi_op.pred,
+ Op = XsiOp#xsi_op.op,
+ SSet = case gb_trees:lookup(Pred, Uses) of
+ {value, VV} ->
+ ?SETS:add_element(Op#eop.stopped_by, VV);
+ none ->
+ ?SETS:from_list([Op#eop.stopped_by])
+ end,
+ {gb_trees:enter(XsiOp, Set, Maps), gb_trees:enter(Pred, SSet, Uses)};
+ _->
+ {Maps, Uses}
+ end,
add_map_and_uses(Ops, Key, NewMaps, NewUses).
post_process([], _CFGGraph) -> ok;
@@ -1162,37 +1159,38 @@ code_motion_in_block(L,[Inst|Insts],Cfg,XsiG,Visited,InsertionsAcc) ->
#pre_candidate{} ->
Def = Inst#pre_candidate.def,
Alu = Inst#pre_candidate.alu,
- case Def of
- bottom ->
- InstToAdd = Alu;
- #temp{} ->
- Key = Def#temp.key,
- {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
- case Xsi#xsi.wba of
- true ->
- %% Turn into a move
- Dst = ?RTL:alu_dst(Alu),
- Move = ?RTL:mk_move(Dst,Def#temp.var),
- pp_instr(Inst#pre_candidate.alu,nil), ?pp_debug(" ==> ",[]), pp_instr(Move,nil),
- %% Counting redundancies
- redundancy_add(),
- InstToAdd = Move;
- _ ->
- InstToAdd = Alu
- end;
- _ -> %% Def is a real variable
- %% Turn into a move
- Dst = ?RTL:alu_dst(Alu),
- Move = ?RTL:mk_move(Dst,Def),
- pp_instr(Alu,nil), ?pp_debug(" ==> ",[]), pp_instr(Move,nil),
- %% Counting redundancies
- redundancy_add(),
- InstToAdd = Move
- end,
+ InstToAdd =
+ case Def of
+ bottom ->
+ Alu;
+ #temp{} ->
+ Key = Def#temp.key,
+ {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
+ case Xsi#xsi.wba of
+ true ->
+ %% Turn into a move
+ Dst = ?RTL:alu_dst(Alu),
+ Move = ?RTL:mk_move(Dst,Def#temp.var),
+ pp_instr(Inst#pre_candidate.alu,nil), ?pp_debug(" ==> ",[]), pp_instr(Move,nil),
+ %% Counting redundancies
+ redundancy_add(),
+ Move;
+ _ ->
+ Alu
+ end;
+ _ -> %% Def is a real variable
+ %% Turn into a move
+ Dst = ?RTL:alu_dst(Alu),
+ Move = ?RTL:mk_move(Dst,Def),
+ pp_instr(Alu,nil), ?pp_debug(" ==> ",[]), pp_instr(Move,nil),
+ %% Counting redundancies
+ redundancy_add(),
+ Move
+ end,
code_motion_in_block(L,Insts,Cfg,XsiG,[InstToAdd|Visited],InsertionsAcc);
#xsi_link{} ->
Key = Inst#xsi_link.num,
- {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
+ {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
case Xsi#xsi.wba of
true ->
%% Xsi is a WBA, it might trigger insertions
@@ -1235,139 +1233,133 @@ get_insertions([],OpAcc,InsertionsAcc,_Visited,_Expr,_XsiG) ->
get_insertions([XsiOp|Ops],OpAcc,InsertionsAcc,Visited,Expr,XsiG) ->
Pred = XsiOp#xsi_op.pred,
Op = XsiOp#xsi_op.op,
- case Op of
- #bottom{} ->
- case gb_trees:lookup(Pred,InsertionsAcc) of
- {value,Insertion} ->
- From = Insertion#insertion.from,
- case lists:keyfind(Op, 1, From) of
- false ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
- Dst = Op#bottom.var,
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- Code = Insertion#insertion.code,
- NewInsertion = Insertion#insertion{from=[{Op,Dst}|From],code=[Inst|Code]},
- NewInsertionsAcc = gb_trees:update(Pred,NewInsertion,InsertionsAcc);
- {_, Val} ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
- Dst = Val,
- NewInsertionsAcc = InsertionsAcc
- end;
- none ->
- ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
- Dst = Op#bottom.var,
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- NewInsertion = #insertion{from=[{Op,Dst}],code=[Inst]},
- NewInsertionsAcc = gb_trees:insert(Pred,NewInsertion,InsertionsAcc)
- end;
- #const_expr{} ->
- case gb_trees:lookup(Pred,InsertionsAcc) of
- {value,Insertion} ->
- From = Insertion#insertion.from,
- case lists:keyfind(Op, 1, From) of
- false ->
- ?pp_debug("~nThere have been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
- Dst = Op#const_expr.var,
- Val = Op#const_expr.value,
- Inst = ?RTL:mk_move(Dst,Val),
- Code = Insertion#insertion.code,
- NewInsertion = Insertion#insertion{from=[{Op,Dst}|From],code=[Inst|Code]},
- NewInsertionsAcc = gb_trees:update(Pred,NewInsertion,InsertionsAcc);
- {_, Val} ->
- ?pp_debug("~nThere have been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
- Dst = Val,
- NewInsertionsAcc = InsertionsAcc
- end;
- none ->
- ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
- Dst = Op#const_expr.var,
- Val = Op#const_expr.value,
- Inst = ?RTL:mk_move(Dst,Val),
- NewInsertion = #insertion{from=[{Op,Dst}],code=[Inst]},
- NewInsertionsAcc = gb_trees:insert(Pred,NewInsertion,InsertionsAcc)
- end;
- #eop{} ->
- %% We treat expressions like bottoms
- %% The value must be recomputed, and therefore not available...
- case gb_trees:lookup(Pred,InsertionsAcc) of
- {value,Insertion} ->
- From = Insertion#insertion.from,
- case lists:keyfind(Op, 1, From) of
- false ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
- Dst = Op#eop.var,
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- Code = Insertion#insertion.code,
- NewInsertion = Insertion#insertion{from=[{Op,Dst}|From],code=[Inst|Code]},
- NewInsertionsAcc = gb_trees:update(Pred,NewInsertion,InsertionsAcc);
- {_, Val} ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
- Dst = Val,
- NewInsertionsAcc = InsertionsAcc
- end;
- none ->
- ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
- Dst = Op#eop.var,
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- NewInsertion = #insertion{from=[{Op,Dst}],code=[Inst]},
- NewInsertionsAcc = gb_trees:insert(Pred,NewInsertion,InsertionsAcc)
- end;
- #temp{} ->
- case gb_trees:lookup(Pred,InsertionsAcc) of
- {value,Insertion} ->
- From = Insertion#insertion.from,
- case lists:keyfind(Op, 1, From) of
- false ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
- Key = Op#temp.key,
- {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
- case Xsi#xsi.wba of
- true ->
- ?pp_debug("~nBut the operand is a WBA Xsi: no need for insertion",[]),
- Dst = Op#temp.var,
- NewInsertionsAcc = InsertionsAcc;
- _ ->
- ?pp_debug("~nBut the operand is a NOT WBA Xsi: we must make an insertion",[]),
- Dst = ?RTL:mk_new_var(),
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- Code = Insertion#insertion.code,
- NewInsertion = Insertion#insertion{from=[{Op,Dst}|From],code=[Inst|Code]},
- NewInsertionsAcc = gb_trees:update(Pred,NewInsertion,InsertionsAcc)
- end;
- {_, Val} ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too (Op=~w)",[Pred,Op]),
- ?pp_debug("~nThis means, this temp is a WBA Xsi's definition",[]),
- Dst = Val,
- NewInsertionsAcc = InsertionsAcc
- end;
- none ->
- ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course | Op=",[Pred]),pp_arg(Op),
- Key = Op#temp.key,
- {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
- case Xsi#xsi.wba of
- true ->
- ?pp_debug("~nBut the operand is a WBA Xsi: no need for insertion",[]),
- Dst = Op#temp.var,
- NewInsertionsAcc = InsertionsAcc;
- _ ->
- ?pp_debug("~nBut the operand is a NOT WBA Xsi: we must make an insertion",[]),
- Dst = ?RTL:mk_new_var(),
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- NewInsertion = #insertion{from=[{Op,Dst}],code=[Inst]},
- NewInsertionsAcc = gb_trees:insert(Pred,NewInsertion,InsertionsAcc)
- end
- end;
- _ ->
- ?pp_debug("~nThe operand (Op=",[]),pp_arg(Op),?pp_debug(") is a real variable, no need for insertion along L~w",[Pred]),
- Dst = Op,
- NewInsertionsAcc = InsertionsAcc
- end,
+ {Dst, NewInsertionsAcc} =
+ case Op of
+ #bottom{} ->
+ case gb_trees:lookup(Pred,InsertionsAcc) of
+ {value,Insertion} ->
+ From = Insertion#insertion.from,
+ case lists:keyfind(Op, 1, From) of
+ false ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
+ D = Op#bottom.var,
+ Expr2 = ?RTL:alu_dst_update(Expr,D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ Code = Insertion#insertion.code,
+ NewInsertion = Insertion#insertion{from=[{Op,D}|From],code=[Inst|Code]},
+ {D, gb_trees:update(Pred, NewInsertion, InsertionsAcc)};
+ {_, Val} ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
+ {Val, InsertionsAcc}
+ end;
+ none ->
+ ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
+ D = Op#bottom.var,
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ NewInsertion = #insertion{from=[{Op,D}],code=[Inst]},
+ {D, gb_trees:insert(Pred,NewInsertion, InsertionsAcc)}
+ end;
+ #const_expr{} ->
+ case gb_trees:lookup(Pred,InsertionsAcc) of
+ {value,Insertion} ->
+ From = Insertion#insertion.from,
+ case lists:keyfind(Op, 1, From) of
+ false ->
+ ?pp_debug("~nThere have been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
+ D = Op#const_expr.var,
+ Val = Op#const_expr.value,
+ Inst = ?RTL:mk_move(D, Val),
+ Code = Insertion#insertion.code,
+ NewInsertion = Insertion#insertion{from=[{Op,D}|From],code=[Inst|Code]},
+ {D, gb_trees:update(Pred,NewInsertion,InsertionsAcc)};
+ {_, Val} ->
+ ?pp_debug("~nThere have been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
+ {Val, InsertionsAcc}
+ end;
+ none ->
+ ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
+ D = Op#const_expr.var,
+ Val = Op#const_expr.value,
+ Inst = ?RTL:mk_move(D, Val),
+ NewInsertion = #insertion{from=[{Op,D}],code=[Inst]},
+ {D, gb_trees:insert(Pred,NewInsertion, InsertionsAcc)}
+ end;
+ #eop{} ->
+ %% We treat expressions like bottoms
+ %% The value must be recomputed, and therefore not available...
+ case gb_trees:lookup(Pred,InsertionsAcc) of
+ {value,Insertion} ->
+ From = Insertion#insertion.from,
+ case lists:keyfind(Op, 1, From) of
+ false ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
+ D = Op#eop.var,
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ Code = Insertion#insertion.code,
+ NewInsertion = Insertion#insertion{from=[{Op,D}|From],code=[Inst|Code]},
+ {D, gb_trees:update(Pred,NewInsertion, InsertionsAcc)};
+ {_, Val} ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
+ {Val, InsertionsAcc}
+ end;
+ none ->
+ ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
+ D = Op#eop.var,
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ NewInsertion = #insertion{from=[{Op,D}],code=[Inst]},
+ {D, gb_trees:insert(Pred, NewInsertion, InsertionsAcc)}
+ end;
+ #temp{} ->
+ case gb_trees:lookup(Pred,InsertionsAcc) of
+ {value,Insertion} ->
+ From = Insertion#insertion.from,
+ case lists:keyfind(Op, 1, From) of
+ false ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
+ Key = Op#temp.key,
+ {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
+ case Xsi#xsi.wba of
+ true ->
+ ?pp_debug("~nBut the operand is a WBA Xsi: no need for insertion",[]),
+ {Op#temp.var, InsertionsAcc};
+ _ ->
+ ?pp_debug("~nBut the operand is a NOT WBA Xsi: we must make an insertion",[]),
+ D = ?RTL:mk_new_var(),
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ Code = Insertion#insertion.code,
+ NewInsertion = Insertion#insertion{from=[{Op,D}|From],code=[Inst|Code]},
+ {D, gb_trees:update(Pred, NewInsertion, InsertionsAcc)}
+ end;
+ {_, Val} ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too (Op=~w)",[Pred,Op]),
+ ?pp_debug("~nThis means, this temp is a WBA Xsi's definition",[]),
+ {Val, InsertionsAcc}
+ end;
+ none ->
+ ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course | Op=",[Pred]),pp_arg(Op),
+ Key = Op#temp.key,
+ {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
+ case Xsi#xsi.wba of
+ true ->
+ ?pp_debug("~nBut the operand is a WBA Xsi: no need for insertion",[]),
+ {Op#temp.var, InsertionsAcc};
+ _ ->
+ ?pp_debug("~nBut the operand is a NOT WBA Xsi: we must make an insertion",[]),
+ D = ?RTL:mk_new_var(),
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ NewInsertion = #insertion{from=[{Op,D}],code=[Inst]},
+ {D, gb_trees:insert(Pred, NewInsertion, InsertionsAcc)}
+ end
+ end;
+ _ ->
+ ?pp_debug("~nThe operand (Op=",[]),pp_arg(Op),?pp_debug(") is a real variable, no need for insertion along L~w",[Pred]),
+ {Op, InsertionsAcc}
+ end,
NewXsiOp = XsiOp#xsi_op{op=Dst},
get_insertions(Ops, [NewXsiOp|OpAcc], NewInsertionsAcc, Visited, Expr, XsiG).
diff --git a/lib/hipe/rtl/hipe_rtl_symbolic.erl b/lib/hipe/rtl/hipe_rtl_symbolic.erl
index d0055faece..1d7e0ec55e 100644
--- a/lib/hipe/rtl/hipe_rtl_symbolic.erl
+++ b/lib/hipe/rtl/hipe_rtl_symbolic.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/rtl/hipe_rtl_varmap.erl b/lib/hipe/rtl/hipe_rtl_varmap.erl
index cb6327af1a..31165d91a4 100644
--- a/lib/hipe/rtl/hipe_rtl_varmap.erl
+++ b/lib/hipe/rtl/hipe_rtl_varmap.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/Makefile b/lib/hipe/sparc/Makefile
index a193e6a853..0e36a43d8e 100644
--- a/lib/hipe/sparc/Makefile
+++ b/lib/hipe/sparc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -76,7 +76,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/sparc/hipe_rtl_to_sparc.erl b/lib/hipe/sparc/hipe_rtl_to_sparc.erl
index 297b693b42..eef5ba8d96 100644
--- a/lib/hipe/sparc/hipe_rtl_to_sparc.erl
+++ b/lib/hipe/sparc/hipe_rtl_to_sparc.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc.erl b/lib/hipe/sparc/hipe_sparc.erl
index b376a6da53..5ecb6aa8b9 100644
--- a/lib/hipe/sparc/hipe_sparc.erl
+++ b/lib/hipe/sparc/hipe_sparc.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc.hrl b/lib/hipe/sparc/hipe_sparc.hrl
index 5fb9dfc23f..01c8d07f22 100644
--- a/lib/hipe/sparc/hipe_sparc.hrl
+++ b/lib/hipe/sparc/hipe_sparc.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_assemble.erl b/lib/hipe/sparc/hipe_sparc_assemble.erl
index 0e27c78416..e92f024968 100644
--- a/lib/hipe/sparc/hipe_sparc_assemble.erl
+++ b/lib/hipe/sparc/hipe_sparc_assemble.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_cfg.erl b/lib/hipe/sparc/hipe_sparc_cfg.erl
index 65f7ce310c..0b2c77f27b 100644
--- a/lib/hipe/sparc/hipe_sparc_cfg.erl
+++ b/lib/hipe/sparc/hipe_sparc_cfg.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_defuse.erl b/lib/hipe/sparc/hipe_sparc_defuse.erl
index ae529bed31..4f66299f1d 100644
--- a/lib/hipe/sparc/hipe_sparc_defuse.erl
+++ b/lib/hipe/sparc/hipe_sparc_defuse.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_encode.erl b/lib/hipe/sparc/hipe_sparc_encode.erl
index 07d5d67fd5..6a7d502fd3 100644
--- a/lib/hipe/sparc/hipe_sparc_encode.erl
+++ b/lib/hipe/sparc/hipe_sparc_encode.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_finalise.erl b/lib/hipe/sparc/hipe_sparc_finalise.erl
index af234993b1..2b7125fb73 100644
--- a/lib/hipe/sparc/hipe_sparc_finalise.erl
+++ b/lib/hipe/sparc/hipe_sparc_finalise.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_frame.erl b/lib/hipe/sparc/hipe_sparc_frame.erl
index c86dfcc7a8..a42c1983f4 100644
--- a/lib/hipe/sparc/hipe_sparc_frame.erl
+++ b/lib/hipe/sparc/hipe_sparc_frame.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_liveness_all.erl b/lib/hipe/sparc/hipe_sparc_liveness_all.erl
index 0b1cb7d5ae..b7c3e1962a 100644
--- a/lib/hipe/sparc/hipe_sparc_liveness_all.erl
+++ b/lib/hipe/sparc/hipe_sparc_liveness_all.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_liveness_fpr.erl b/lib/hipe/sparc/hipe_sparc_liveness_fpr.erl
index 699a311f8c..497c554c3e 100644
--- a/lib/hipe/sparc/hipe_sparc_liveness_fpr.erl
+++ b/lib/hipe/sparc/hipe_sparc_liveness_fpr.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_liveness_gpr.erl b/lib/hipe/sparc/hipe_sparc_liveness_gpr.erl
index 8f2edd7239..55d639e3a2 100644
--- a/lib/hipe/sparc/hipe_sparc_liveness_gpr.erl
+++ b/lib/hipe/sparc/hipe_sparc_liveness_gpr.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_main.erl b/lib/hipe/sparc/hipe_sparc_main.erl
index e09a0bf661..c16751c7bd 100644
--- a/lib/hipe/sparc/hipe_sparc_main.erl
+++ b/lib/hipe/sparc/hipe_sparc_main.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_pp.erl b/lib/hipe/sparc/hipe_sparc_pp.erl
index bdc868a518..8fa0a9c788 100644
--- a/lib/hipe/sparc/hipe_sparc_pp.erl
+++ b/lib/hipe/sparc/hipe_sparc_pp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_ra.erl b/lib/hipe/sparc/hipe_sparc_ra.erl
index 7551b3b7bc..afea8c9b4c 100644
--- a/lib/hipe/sparc/hipe_sparc_ra.erl
+++ b/lib/hipe/sparc/hipe_sparc_ra.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_ra_finalise.erl b/lib/hipe/sparc/hipe_sparc_ra_finalise.erl
index 02e86794f6..dc1e69c101 100644
--- a/lib/hipe/sparc/hipe_sparc_ra_finalise.erl
+++ b/lib/hipe/sparc/hipe_sparc_ra_finalise.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_ra_ls.erl b/lib/hipe/sparc/hipe_sparc_ra_ls.erl
index c44fd495bf..19e7c92d2f 100644
--- a/lib/hipe/sparc/hipe_sparc_ra_ls.erl
+++ b/lib/hipe/sparc/hipe_sparc_ra_ls.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_ra_naive.erl b/lib/hipe/sparc/hipe_sparc_ra_naive.erl
index 0fcd8b0f0b..b6c33dec6c 100644
--- a/lib/hipe/sparc/hipe_sparc_ra_naive.erl
+++ b/lib/hipe/sparc/hipe_sparc_ra_naive.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_ra_postconditions.erl b/lib/hipe/sparc/hipe_sparc_ra_postconditions.erl
index d79d63eb2a..ab31b3c8d9 100644
--- a/lib/hipe/sparc/hipe_sparc_ra_postconditions.erl
+++ b/lib/hipe/sparc/hipe_sparc_ra_postconditions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_ra_postconditions_fp.erl b/lib/hipe/sparc/hipe_sparc_ra_postconditions_fp.erl
index a474e0ec6a..d893ac26e9 100644
--- a/lib/hipe/sparc/hipe_sparc_ra_postconditions_fp.erl
+++ b/lib/hipe/sparc/hipe_sparc_ra_postconditions_fp.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/sparc/hipe_sparc_registers.erl b/lib/hipe/sparc/hipe_sparc_registers.erl
index 59aef46bff..884215702b 100644
--- a/lib/hipe/sparc/hipe_sparc_registers.erl
+++ b/lib/hipe/sparc/hipe_sparc_registers.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ssa/hipe_ssa.inc b/lib/hipe/ssa/hipe_ssa.inc
index 86c036cd10..83ab320306 100644
--- a/lib/hipe/ssa/hipe_ssa.inc
+++ b/lib/hipe/ssa/hipe_ssa.inc
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ssa/hipe_ssa_const_prop.inc b/lib/hipe/ssa/hipe_ssa_const_prop.inc
index 664faf9737..648490f9a3 100644
--- a/lib/hipe/ssa/hipe_ssa_const_prop.inc
+++ b/lib/hipe/ssa/hipe_ssa_const_prop.inc
@@ -3,7 +3,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ssa/hipe_ssa_copy_prop.inc b/lib/hipe/ssa/hipe_ssa_copy_prop.inc
index f14abd869a..fd80d97b02 100644
--- a/lib/hipe/ssa/hipe_ssa_copy_prop.inc
+++ b/lib/hipe/ssa/hipe_ssa_copy_prop.inc
@@ -3,7 +3,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/ssa/hipe_ssa_liveness.inc b/lib/hipe/ssa/hipe_ssa_liveness.inc
index e454b71798..78488c65fc 100644
--- a/lib/hipe/ssa/hipe_ssa_liveness.inc
+++ b/lib/hipe/ssa/hipe_ssa_liveness.inc
@@ -3,7 +3,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/test/Makefile b/lib/hipe/test/Makefile
index d781e4f9be..544888719f 100644
--- a/lib/hipe/test/Makefile
+++ b/lib/hipe/test/Makefile
@@ -6,7 +6,8 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
# ----------------------------------------------------
MODULES= \
- hipe_SUITE
+ hipe_SUITE \
+ opt_verify_SUITE
# .erl files for these modules are automatically generated
GEN_MODULES= \
@@ -36,7 +37,7 @@ RELSYSDIR = $(RELEASE_PATH)/hipe_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
@@ -79,4 +80,4 @@ release_tests_spec: make_emakefile
@tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
cd "$(RELSYSDIR)";\
erlc hipe_testsuite_driver.erl;\
- erl -noshell -run hipe_testsuite_driver create_all_suites -s erlang halt
+ erl -noshell -run hipe_testsuite_driver create_all_suites $(GEN_MODULES) -s erlang halt
diff --git a/lib/hipe/test/basic_SUITE_data/basic_floats.erl b/lib/hipe/test/basic_SUITE_data/basic_floats.erl
index eec175075a..ce28f6e156 100644
--- a/lib/hipe/test/basic_SUITE_data/basic_floats.erl
+++ b/lib/hipe/test/basic_SUITE_data/basic_floats.erl
@@ -18,6 +18,8 @@ test() ->
ok = test_catch_fp_conv(),
ok = test_fp_with_fp_exceptions(),
%% ok = test_fmt_double_fpe_leak(), % this requires printing
+ ok = test_icode_type_crash(),
+ ok = test_icode_type_crash_2(),
ok.
%%--------------------------------------------------------------------
@@ -178,3 +180,71 @@ test_fmt_double_fpe_leak(X, Y) ->
math:log10(Y).
int_two() -> 2.
+
+%%--------------------------------------------------------------------
+%% Contains code which confuses the icode_type analysis and results
+%% in a compiler crash. Stipped down from code sent by Paul Guyot.
+%% Compiles alright with the option 'no_icode_type' but that defeats
+%% the purpose of the test.
+
+test_icode_type_crash() ->
+ Fun = f(1, 2, 3),
+ 42.0 = Fun(),
+ ok.
+
+f(A, B, C) ->
+ fun () ->
+ X = case A of
+ 0 -> 1 / B;
+ _ -> A / C
+ end,
+ Y = case B of
+ a -> 1.0;
+ b -> 2.0;
+ _ -> 6.0
+ end,
+ Z = case C of
+ c -> 0.1 * X;
+ _ -> 7.0
+ end,
+ Y * Z
+ end.
+
+%%--------------------------------------------------------------------
+%% Contains another case that crashed hipe_icode_fp. This sample was
+%% sent by Mattias Jansson (25 Nov 2015). It compiled alright with the
+%% option 'no_icode_type' but that defeats the purpose of the test.
+%% Unfortunately, the execution of this code goes into an infinite
+%% loop, even if the map in the second argument of eat_what/2 gets the
+%% appropriate key-value pairs. Still, it is retained as a test
+%% because it exposed a different crash than test_icode_type_crash/0.
+
+test_icode_type_crash_2() ->
+ {'EXIT', {function_clause, _}} = (catch eat()),
+ ok.
+
+eat() ->
+ eat_what(1.0, #{}).
+
+eat_what(Factor, #{rat_type := LT} = Rat) ->
+ #{cheese := Cheese} = Rat,
+ UnitCheese = Cheese / 2,
+ RetA = case eat() of
+ {full, RetA1} ->
+ CheeseB2 = min(RetA1, UnitCheese) * Factor,
+ case eat() of
+ full -> {win, RetA1};
+ hungry -> {partial, RetA1 - CheeseB2}
+ end;
+ AOther -> AOther
+ end,
+ RetB = case eat() of
+ {full, RetB1} ->
+ CheeseA2 = min(RetB1, UnitCheese) * Factor,
+ rat:init(single, LT, CheeseA2),
+ case eat() of
+ full -> {full, RetB1};
+ hungry -> {hungry, RetB1 - CheeseA2}
+ end
+ end,
+ {RetA, RetB}.
diff --git a/lib/hipe/test/bs_SUITE_data/bs_match_compiler.erl b/lib/hipe/test/bs_SUITE_data/bs_match_compiler.erl
new file mode 100644
index 0000000000..4cb48ff57e
--- /dev/null
+++ b/lib/hipe/test/bs_SUITE_data/bs_match_compiler.erl
@@ -0,0 +1,1235 @@
+%%% -*- erlang-indent-level: 2 -*-
+%%%-------------------------------------------------------------------
+%%% File : bs_match_compiler.erl
+%%%
+%%%-------------------------------------------------------------------
+-module(bs_match_compiler).
+-compile(nowarn_shadow_vars).
+
+-export([test/0]).
+-export([exported_id/1, exported_id/2]). %% needed by a test
+
+test() ->
+ Funs = [fun fun_shadow/0, fun int_float/0, fun otp_5269/0, fun null_fields/0,
+ fun wiger/0, fun bin_tail/0, fun save_restore/0,
+ fun partitioned_bs_match/0, fun function_clause/0, fun unit/0,
+ fun shared_sub_bins/0, fun bin_and_float/0, fun dec_subidentifiers/0,
+ fun skip_optional_tag/0, fun wfbm/0, fun degenerated_match/0,
+ fun bs_sum/0, fun coverage/0, fun multiple_uses/0, fun zero_label/0,
+ fun followed_by_catch/0, fun matching_meets_construction/0,
+ fun simon/0, fun matching_and_andalso/0,
+ fun otp_7188/0, fun otp_7233/0, fun otp_7240/0, fun otp_7498/0,
+ fun match_string/0, fun zero_width/0, fun bad_size/0, fun haystack/0,
+ fun cover_beam_bool/0, fun matched_out_size/0, fun follow_fail_br/0,
+ fun no_partition/0, fun calling_a_binary/0, fun binary_in_map/0,
+ fun match_string_opt/0, fun map_and_binary/0,
+ fun unsafe_branch_caching/0],
+ lists:foreach(fun (F) -> ok = F() end, Funs).
+
+
+%%--------------------------------------------------------------------
+%% OTP-5270
+
+fun_shadow() ->
+ 7 = fun_shadow_1(),
+ 7 = fun_shadow_2(8),
+ 7 = fun_shadow_3(),
+ no = fun_shadow_4(8),
+ ok.
+
+fun_shadow_1() ->
+ L = 8,
+ F = fun(<<L:L,B:L>>) -> B end,
+ F(<<16:8, 7:16>>).
+
+fun_shadow_2(L) ->
+ F = fun(<<L:L,B:L>>) -> B end,
+ F(<<16:8, 7:16>>).
+
+fun_shadow_3() ->
+ L = 8,
+ F = fun(<<L:L,B:L,L:L>>) -> B end,
+ F(<<16:8, 7:16,16:16>>).
+
+fun_shadow_4(L) ->
+ F = fun(<<L:L,B:L,L:L>>) -> B;
+ (_) -> no end,
+ F(<<16:8, 7:16,15:16>>).
+
+%%--------------------------------------------------------------------
+%% OTP-5323
+
+int_float() ->
+ <<103133.0:64/float>> = <<103133:64/float>>,
+ <<103133:64/float>> = <<103133:64/float>>,
+ ok.
+
+%%--------------------------------------------------------------------
+%% Stolen from erl_eval_SUITE and modified.
+%% OTP-5269. Bugs in the bit syntax.
+
+otp_5269() ->
+ check(fun() -> L = 8, F = fun(<<A:L,B:A>>) -> B end, F(<<16:8, 7:16>>) end, 7),
+ check(fun() -> L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end, 7),
+ check(fun() -> U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end, 32),
+ check(fun() -> U = 8, [U || <<U:U>> <- [<<32:8>>]] end, [32]),
+ check(fun() -> [X || <<A:8, B:A>> <- [<<16:8,19:16>>],
+ <<X:8>> <- [<<B:8>>]] end,
+ [19]),
+ check(fun() -> A = 4, B = 28, _ = bit_size(<<13:(A+(X=B))>>), X end, 28),
+ check(fun() ->
+ <<Size,B:Size/binary,Rest/binary>> = <<2,"AB","CD">>,
+ {Size,B,Rest}
+ end, {2,<<"AB">>,<<"CD">>}),
+ check(fun() -> X = 32, [X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end,
+ %% "binsize variable" ^
+ [1,2]),
+ check(fun() ->
+ (fun (<<A:1/binary, B:8/integer, _C:B/binary>>) ->
+ case A of
+ B -> wrong;
+ _ -> ok
+ end
+ end)(<<1,2,3,4>>) end,
+ ok),
+ ok.
+
+%%--------------------------------------------------------------------
+
+null_fields() ->
+ check(fun() ->
+ W = id(0),
+ F = fun(<<_:W>>) -> tail;
+ (<<>>) -> empty
+ end,
+ F(<<>>)
+ end, tail),
+ check(fun() ->
+ F = fun(<<_/binary>>) -> tail;
+ (<<>>) -> empty
+ end,
+ F(<<>>)
+ end, tail),
+ ok.
+
+%%--------------------------------------------------------------------
+
+wiger() ->
+ ok1 = wcheck(<<3>>),
+ ok2 = wcheck(<<1,2,3>>),
+ ok3 = wcheck(<<4>>),
+ {error,<<1,2,3,4>>} = wcheck(<<1,2,3,4>>),
+ {error,<<>>} = wcheck(<<>>),
+ ok.
+
+wcheck(<<A>>) when A==3->
+ ok1;
+wcheck(<<_,_:2/binary>>) ->
+ ok2;
+wcheck(<<_>>) ->
+ ok3;
+wcheck(Other) ->
+ {error,Other}.
+
+%%--------------------------------------------------------------------
+
+bin_tail() ->
+ S = <<"abcde">>,
+ $a = bin_tail_c(S, 0),
+ $c = bin_tail_c(S, 2),
+ $e = bin_tail_c(S, 4),
+ {'EXIT',_} = (catch bin_tail_c(S, 5)),
+ {'EXIT',_} = (catch bin_tail_c_var(S, 5)),
+
+ $a = bin_tail_d(S, 0),
+ $b = bin_tail_d(S, 8),
+ $d = bin_tail_d(S, 3*8),
+ {'EXIT',_} = (catch bin_tail_d_dead(S, 1)),
+ {'EXIT',_} = (catch bin_tail_d_dead(S, 9)),
+ {'EXIT',_} = (catch bin_tail_d_dead(S, 5*8)),
+ {'EXIT',_} = (catch bin_tail_d_var(S, 1)),
+
+ ok = bin_tail_e(<<2:2,0:1,1:5>>),
+ ok = bin_tail_e(<<2:2,1:1,1:5,42:64>>),
+ error = bin_tail_e(<<3:2,1:1,1:5,42:64>>),
+ error = bin_tail_e(<<>>),
+ ok.
+
+bin_tail_c(Bin, Offset) ->
+ Res = bin_tail_c_dead(Bin, Offset),
+ <<_:Offset/binary,_,Tail/binary>> = Bin,
+ {Res,Tail} = bin_tail_c_var(Bin, Offset),
+ Res.
+
+bin_tail_c_dead(Bin, Offset) ->
+ <<_:Offset/binary,C,_/binary>> = Bin,
+ C.
+
+bin_tail_c_var(Bin, Offset) ->
+ <<_:Offset/binary,C,Tail/binary>> = Bin,
+ {C,Tail}.
+
+bin_tail_d(Bin, BitOffset) ->
+ Res = bin_tail_d_dead(Bin, BitOffset),
+ <<_:BitOffset,_:8,Tail/binary>> = Bin,
+ {Res,Tail} = bin_tail_d_var(Bin, BitOffset),
+ Res.
+
+bin_tail_d_dead(Bin, BitOffset) ->
+ <<_:BitOffset,C,_/binary>> = Bin,
+ C.
+
+bin_tail_d_var(Bin, BitOffset) ->
+ <<_:BitOffset,C,Tail/binary>> = Bin,
+ {C,Tail}.
+
+bin_tail_e(Bin) ->
+ case bin_tail_e_dead(Bin) of
+ ok ->
+ <<_,Tail/binary>> = Bin,
+ Tail = bin_tail_e_var(Bin),
+ ok;
+ error ->
+ bin_tail_e_var(Bin)
+ end.
+
+bin_tail_e_dead(Bin) ->
+ case Bin of
+ %% The binary is aligned at the end; neither the bs_skip_bits2 nor
+ %% bs_test_tail2 instructions are needed.
+ <<2:2,_:1,1:5,_/binary>> -> ok;
+ _ -> error
+ end.
+
+bin_tail_e_var(Bin) ->
+ case Bin of
+ %% The binary is aligned at the end; neither the bs_skip_bits2 nor
+ %% bs_test_tail2 instructions are needed.
+ <<2:2,_:1,1:5,Tail/binary>> -> Tail;
+ _ -> error
+ end.
+
+%%--------------------------------------------------------------------
+
+save_restore() ->
+ 0 = save_restore_1(<<0:2,42:6>>),
+ {1,3456} = save_restore_1(<<1:2,3456:14>>),
+ {2,7981234} = save_restore_1(<<2:2,7981234:30>>),
+ {3,763967493838} = save_restore_1(<<0:2,763967493838:62>>),
+
+ A = <<" x">>,
+ B = <<".x">>,
+ C = <<"-x">>,
+
+ {" ",<<"x">>} = lll(A),
+ {" ",<<"x">>} = mmm(A),
+ {" ",<<"x">>} = nnn(A),
+ {" ",<<"x">>} = ooo(A),
+
+ {".",<<"x">>} = lll(B),
+ {".",<<"x">>} = mmm(B),
+ {".",<<"x">>} = nnn(B),
+ {".",<<"x">>} = ooo(B),
+
+ {"-",<<"x">>} = lll(C),
+ {"-",<<"x">>} = mmm(C),
+ {"-",<<"x">>} = nnn(C),
+ {"-",<<"x">>} = ooo(C),
+
+ Bin = <<-1:64>>,
+ case bad_float_unpack_match(Bin) of
+ -1 -> ok;
+ _Other -> bad_return_value_probably_NaN
+ end.
+
+save_restore_1(Bin) ->
+ case Bin of
+ <<0:2,_:6>> -> 0;
+ <<1:2,A:14>> -> {1,A};
+ <<2:2,A:30>> -> {2,A};
+ <<A:64>> -> {3,A}
+ end.
+
+lll(<<Char, Tail/binary>>) -> {[Char],Tail}.
+
+mmm(<<$.,$.,$., Tail/binary>>) -> Tail;
+mmm(<<$\s,$-,$\s, Tail/binary>>) -> Tail;
+mmm(<<Char, Tail/binary>>) -> {[Char],Tail}. %% Buggy Tail!
+
+nnn(<<"...", Tail/binary>>) -> Tail;
+nnn(<<" - ", Tail/binary>>) -> Tail;
+nnn(<<Char, Tail/binary>>) -> {[Char],Tail}. %% Buggy Tail!
+
+ooo(<<" - ", Tail/binary>>) -> Tail;
+ooo(<<Char, Tail/binary>>) -> {[Char],Tail}.
+
+bad_float_unpack_match(<<F:64/float>>) -> F;
+bad_float_unpack_match(<<I:64/integer-signed>>) -> I.
+
+%%--------------------------------------------------------------------
+
+partitioned_bs_match() ->
+ <<1,2,3>> = partitioned_bs_match(blurf, <<42,1,2,3>>),
+ error = partitioned_bs_match(10, <<7,8,15,13>>),
+ error = partitioned_bs_match(100, {a,tuple,is,'not',a,binary}),
+ ok = partitioned_bs_match(0, <<>>),
+ fc(partitioned_bs_match, [-1,blurf],
+ catch partitioned_bs_match(-1, blurf)),
+ fc(partitioned_bs_match, [-1,<<1,2,3>>],
+ catch partitioned_bs_match(-1, <<1,2,3>>)),
+ {17,<<1,2,3>>} = partitioned_bs_match_2(1, <<17,1,2,3>>),
+ {7,<<1,2,3>>} = partitioned_bs_match_2(7, <<17,1,2,3>>),
+
+ fc(partitioned_bs_match_2, [4,<<0:17>>],
+ catch partitioned_bs_match_2(4, <<0:17>>)),
+
+ anything = partitioned_bs_match_3(anything, <<42>>),
+ ok = partitioned_bs_match_3(1, 2),
+ ok.
+
+partitioned_bs_match(_, <<42:8,T/binary>>) -> T;
+partitioned_bs_match(N, _) when N > 0 -> error;
+partitioned_bs_match(_, <<>>) -> ok.
+
+partitioned_bs_match_2(1, <<B:8,T/binary>>) -> {B,T};
+partitioned_bs_match_2(Len, <<_:8,T/binary>>) -> {Len,T}.
+
+partitioned_bs_match_3(Var, <<_>>) -> Var;
+partitioned_bs_match_3(1, 2) -> ok.
+
+%%--------------------------------------------------------------------
+
+function_clause() ->
+ ok = function_clause_1(<<0,7,0,7,42>>),
+ fc(function_clause_1, [<<0,1,2,3>>],
+ catch function_clause_1(<<0,1,2,3>>)),
+ fc(function_clause_1, [<<0,1,2,3>>],
+ catch function_clause_1(<<0,7,0,1,2,3>>)),
+
+ ok = function_clause_2(<<0,7,0,7,42>>),
+ ok = function_clause_2(<<255>>),
+ ok = function_clause_2(<<13:4>>),
+ fc(function_clause_2, [<<0,1,2,3>>],
+ catch function_clause_2(<<0,1,2,3>>)),
+ fc(function_clause_2, [<<0,1,2,3>>],
+ catch function_clause_2(<<0,7,0,1,2,3>>)),
+ ok.
+
+function_clause_1(<<0:8,7:8,T/binary>>) ->
+ function_clause_1(T);
+function_clause_1(<<_:8>>) ->
+ ok.
+
+function_clause_2(<<0:8,7:8,T/binary>>) ->
+ function_clause_2(T);
+function_clause_2(<<_:8>>) ->
+ ok;
+function_clause_2(<<_:4>>) ->
+ ok.
+
+%%--------------------------------------------------------------------
+
+unit() ->
+ 42 = peek1(<<42>>),
+ 43 = peek1(<<43,1,2>>),
+ 43 = peek1(<<43,1,2,(-1):1>>),
+ 43 = peek1(<<43,1,2,(-1):2>>),
+ 43 = peek1(<<43,1,2,(-1):7>>),
+
+ 99 = peek8(<<99>>),
+ 100 = peek8(<<100,101>>),
+ fc(peek8, [<<100,101,0:1>>], catch peek8(<<100,101,0:1>>)),
+
+ 37484 = peek16(<<37484:16>>),
+ 37489 = peek16(<<37489:16,5566:16>>),
+ fc(peek16, [<<8>>], catch peek16(<<8>>)),
+ fc(peek16, [<<42:15>>], catch peek16(<<42:15>>)),
+ fc(peek16, [<<1,2,3,4,5>>], catch peek16(<<1,2,3,4,5>>)),
+
+ 127 = peek7(<<127:7>>),
+ 100 = peek7(<<100:7,19:7>>),
+ fc(peek7, [<<1,2>>], catch peek7(<<1,2>>)),
+ ok.
+
+peek1(<<B:8,_/bitstring>>) -> B.
+
+peek7(<<B:7,_/binary-unit:7>>) -> B.
+
+peek8(<<B:8,_/binary>>) -> B.
+
+peek16(<<B:16,_/binary-unit:16>>) -> B.
+
+%%--------------------------------------------------------------------
+
+shared_sub_bins() ->
+ {15,[<<>>,<<5>>,<<4,5>>,<<3,4,5>>,<<2,3,4,5>>]} = sum(<<1,2,3,4,5>>, [], 0),
+ ok.
+
+sum(<<B,T/binary>>, Acc, Sum) ->
+ sum(T, [T|Acc], Sum+B);
+sum(<<>>, Last, Sum) -> {Sum,Last}.
+
+%%--------------------------------------------------------------------
+
+bin_and_float() ->
+ 14.0 = bin_and_float(<<1.0/float,2.0/float,3.0/float>>, 0.0),
+ ok.
+
+bin_and_float(<<X/float,Y/float,Z/float,T/binary>>, Sum) when is_float(X),
+ is_float(Y),
+ is_float(Z) ->
+ bin_and_float(T, Sum+X*X+Y*Y+Z*Z);
+bin_and_float(<<>>, Sum) -> Sum.
+
+%%--------------------------------------------------------------------
+
+dec_subidentifiers() ->
+ {[],<<1,2,3>>} =
+ do_dec_subidentifiers(<<1:1,42:7,1:1,99:7,1,2,3>>, 0, [], 2),
+ {[5389],<<1,2,3>>} =
+ do_dec_subidentifiers(<<1:1,42:7,0:1,13:7,1,2,3>>, 0, [], 2),
+ {[3,2,1],not_a_binary} = dec_subidentifiers(not_a_binary, any, [1,2,3], 0),
+ ok.
+
+do_dec_subidentifiers(Buffer, Av, Al, Len) ->
+ Res = dec_subidentifiers(Buffer, Av, Al, Len),
+ Res = dec_subidentifiers2(Buffer, Av, Al, Len),
+ Res = dec_subidentifiers4(Buffer, Av, Al, Len),
+ Res = dec_subidentifiers3(Buffer, Av, Al, Len).
+
+dec_subidentifiers(Buffer, _Av, Al, 0) ->
+ {lists:reverse(Al),Buffer};
+dec_subidentifiers(<<1:1,H:7,T/binary>>, Av, Al, Len) ->
+ dec_subidentifiers(T, (Av bsl 7) bor H, Al, Len-1);
+dec_subidentifiers(<<H,T/binary>>, Av, Al, Len) ->
+ dec_subidentifiers(T, 0, [((Av bsl 7) bor H)|Al], Len-1).
+
+dec_subidentifiers2(<<Buffer/binary>>, _Av, Al, 0) ->
+ {lists:reverse(Al),Buffer};
+dec_subidentifiers2(<<1:1,H:7,T/binary>>, Av, Al, Len) ->
+ dec_subidentifiers2(T, (Av bsl 7) bor H, Al, Len-1);
+dec_subidentifiers2(<<H,T/binary>>, Av, Al, Len) ->
+ dec_subidentifiers2(T, 0, [((Av bsl 7) bor H)|Al], Len-1).
+
+dec_subidentifiers3(Buffer, _Av, Al, 0) when is_binary(Buffer) ->
+ {lists:reverse(Al),Buffer};
+dec_subidentifiers3(<<1:1,H:7,T/binary>>, Av, Al, Len) ->
+ dec_subidentifiers3(T, (Av bsl 7) bor H, Al, Len-1);
+dec_subidentifiers3(<<H,T/binary>>, Av, Al, Len) ->
+ dec_subidentifiers3(T, 0, [((Av bsl 7) bor H)|Al], Len-1).
+
+dec_subidentifiers4(<<1:1,H:7,T/binary>>, Av, Al, Len) when Len =/= 0 ->
+ dec_subidentifiers4(T, (Av bsl 7) bor H, Al, Len-1);
+dec_subidentifiers4(<<H,T/binary>>, Av, Al, Len) when Len =/= 0 ->
+ dec_subidentifiers4(T, 0, [((Av bsl 7) bor H)|Al], Len-1);
+dec_subidentifiers4(Buffer, _Av, Al, 0) ->
+ {lists:reverse(Al),Buffer}.
+
+%%--------------------------------------------------------------------
+
+skip_optional_tag() ->
+ {ok,<<>>} = skip_optional_tag(<<42>>, <<42>>),
+ {ok,<<>>} = skip_optional_tag(<<42,1>>, <<42,1>>),
+ {ok,<<1,2,3>>} = skip_optional_tag(<<42>>, <<42,1,2,3>>),
+ missing = skip_optional_tag(<<2:3>>, blurf),
+ ok.
+
+skip_optional_tag(<<>>, Binary) ->
+ {ok,Binary};
+skip_optional_tag(<<Tag,RestTag/binary>>, <<Tag,Rest/binary>>) ->
+ skip_optional_tag(RestTag, Rest);
+skip_optional_tag(_, _) -> missing.
+
+%%--------------------------------------------------------------------
+
+-define(DATELEN, 16).
+
+wfbm() ->
+ %% check_for_dot_or_space and get_tail is from wfbm4 by Steve Vinoski,
+ %% with modifications.
+ {nomatch,0} = check_for_dot_or_space(<<" ">>),
+ {nomatch,0} = check_for_dot_or_space(<<" abc">>),
+ {ok,<<"abcde">>} = check_for_dot_or_space(<<"abcde 34555">>),
+ {nomatch,0} = check_for_dot_or_space(<<".gurka">>),
+ {nomatch,1} = check_for_dot_or_space(<<"g.urka">>),
+ nomatch = get_tail(<<>>),
+ {ok,<<"2007/10/23/blurf">>} = get_tail(<<"200x/2007/10/23/blurf ">>),
+ {skip,?DATELEN+5} = get_tail(<<"200x/2007/10/23/blurf.">>),
+ nomatch = get_tail(<<"200y.2007.10.23.blurf ">>),
+ {'EXIT',_} = (catch get_tail({no,binary,at,all})),
+ {'EXIT',_} = (catch get_tail(no_binary)),
+ ok.
+
+check_for_dot_or_space(Bin) ->
+ check_for_dot_or_space(Bin, 0).
+
+check_for_dot_or_space(<<$\s, _/binary>>, 0) ->
+ {nomatch,0};
+check_for_dot_or_space(Bin, Len) ->
+ case Bin of
+ <<Front:Len/binary, $\s, _/binary>> ->
+ {ok,Front};
+ <<_:Len/binary, $., _/binary>> ->
+ {nomatch,Len};
+ _ ->
+ check_for_dot_or_space(Bin, Len+1)
+ end.
+
+get_tail(<<>>) ->
+ nomatch;
+get_tail(Bin) ->
+ <<Front:?DATELEN/binary, Tail/binary>> = Bin,
+ case Front of
+ <<_:3/binary,"x/",Y:4/binary,$/,M:2/binary,$/,D:2/binary,$/>> ->
+ case check_for_dot_or_space(Tail) of
+ {ok,Match} ->
+ {ok,<<Y/binary,$/,M/binary,$/,D/binary,$/, Match/binary>>};
+ {nomatch,Skip} -> {skip,?DATELEN + Skip}
+ end;
+ _ -> nomatch
+ end.
+
+%%--------------------------------------------------------------------
+
+degenerated_match() ->
+ error = degenerated_match_1(<<>>),
+ 1 = degenerated_match_1(<<1:1>>),
+ 2 = degenerated_match_1(<<42,43>>),
+
+ error = degenerated_match_2(<<>>),
+ no_split = degenerated_match_2(<<1,2>>),
+ {<<1,2,3,4>>,<<5>>} = degenerated_match_2(<<1,2,3,4,5>>),
+ ok.
+
+degenerated_match_1(<<>>) -> error;
+degenerated_match_1(Bin) -> byte_size(Bin).
+
+degenerated_match_2(<<>>) -> error;
+degenerated_match_2(Bin) ->
+ case byte_size(Bin) > 4 of
+ true -> split_binary(Bin, 4);
+ false -> no_split
+ end.
+
+%%--------------------------------------------------------------------
+
+bs_sum() ->
+ 0 = bs_sum_1([]),
+ 0 = bs_sum_1(<<>>),
+ 42 = bs_sum_1([42]),
+ 1 = bs_sum_1(<<1>>),
+ 10 = bs_sum_1([1,2,3,4]),
+ 15 = bs_sum_1(<<1,2,3,4,5>>),
+ 21 = bs_sum_1([1,2,3|<<4,5,6>>]),
+ 15 = bs_sum_1([1,2,3|{4,5}]),
+ 6 = bs_sum_1([1,2,3|zero]),
+ 6 = bs_sum_1([1,2,3|0]),
+ 7 = bs_sum_1([1,2,3|one]),
+
+ fc(catch bs_sum_1({too,big,tuple})),
+ fc(catch bs_sum_1([1,2,3|{too,big,tuple}])),
+
+ [] = sneaky_alias(<<>>),
+ [559,387655] = sneaky_alias(id(<<559:32,387655:32>>)),
+ fc(sneaky_alias, [<<1>>], catch sneaky_alias(id(<<1>>))),
+ fc(sneaky_alias, [[1,2,3,4]], catch sneaky_alias(lists:seq(1, 4))),
+ ok.
+
+bs_sum_1(<<H,T/binary>>) -> H+bs_sum_1(T);
+bs_sum_1([H|T]) -> H+bs_sum_1(T);
+bs_sum_1({A,B}=_Tuple=_AliasForNoGoodReason) -> A+B;
+bs_sum_1(0) -> 0;
+bs_sum_1(zero=_Zero) -> 0;
+bs_sum_1(one) -> 1;
+bs_sum_1([]) -> 0;
+bs_sum_1(<<>>) -> 0.
+
+sneaky_alias(<<>>=L) -> binary_to_list(L);
+sneaky_alias(<<From:32,L/binary>>) -> [From|sneaky_alias(L)].
+
+%%--------------------------------------------------------------------
+
+coverage() ->
+ 0 = coverage_fold(fun(B, A) -> A+B end, 0, <<>>),
+ 6 = coverage_fold(fun(B, A) -> A+B end, 0, <<1,2,3>>),
+ fc(catch coverage_fold(fun(B, A) -> A+B end, 0, [a,b,c])),
+
+ {<<42.0:64/float>>,float} = coverage_build(<<>>, <<42>>, float),
+ {<<>>,not_a_tuple} = coverage_build(<<>>, <<>>, not_a_tuple),
+ {<<16#76,"abc",16#A9,"abc">>,{x,42,43}} =
+ coverage_build(<<>>, <<16#7,16#A>>, {x,y,z}),
+
+ [<<2>>,<<1>>] = coverage_bc(<<1,2>>, []),
+
+ {x,<<"abc">>,z} = coverage_setelement(<<2,"abc">>, {x,y,z}),
+
+ [42] = coverage_apply(<<42>>, [exported_id]),
+ 42 = coverage_external(<<42>>),
+
+ do_coverage_bin_to_term_list([]),
+ do_coverage_bin_to_term_list([lists:seq(0, 10),{a,b,c},<<23:42>>]),
+ fc(coverage_bin_to_term_list, [<<0,0,0,7>>],
+ catch do_coverage_bin_to_term_list_1(<<7:32>>)),
+
+ <<>> = coverage_per_key(<<4:32>>),
+ <<$a,$b,$c>> = coverage_per_key(<<7:32,"abc">>),
+
+ ok.
+
+coverage_fold(Fun, Acc, <<H,T/binary>>) ->
+ IdFun = fun id/1,
+ coverage_fold(Fun, Fun(IdFun(H), IdFun(Acc)), T);
+coverage_fold(Fun, Acc, <<>>) when is_function(Fun, 2) -> Acc.
+
+coverage_build(Acc0, <<H,T/binary>>, float) ->
+ Float = id(<<H:64/float>>),
+ Acc = <<Acc0/binary,Float/binary>>,
+ coverage_build(Acc, T, float);
+coverage_build(Acc0, <<H,T/binary>>, Tuple0) ->
+ Str = id(<<H:(id(4)),(H-1):4,"abc">>),
+ Acc = id(<<Acc0/bitstring,Str/bitstring>>),
+ Tuple = setelement(2, setelement(3, Tuple0, 43), 42),
+ if
+ byte_size(Acc) > 0 ->
+ coverage_build(Acc, T, Tuple)
+ end;
+coverage_build(Acc, <<>>, Tuple) -> {Acc,Tuple}.
+
+coverage_bc(<<H,T/binary>>, Acc) ->
+ B = << <<C:8>> || C <- [H] >>,
+ coverage_bc(T, [B|Acc]);
+coverage_bc(<<>>, Acc) -> Acc.
+
+coverage_setelement(<<H,T1/binary>>, Tuple) when element(1, Tuple) =:= x ->
+ setelement(H, Tuple, T1).
+
+coverage_apply(<<H,T/binary>>, [F|Fs]) ->
+ [?MODULE:F(H)|coverage_apply(T, Fs)];
+coverage_apply(<<>>, []) -> [].
+
+coverage_external(<<H,T/binary>>) ->
+ ?MODULE:exported_id(T, T),
+ H.
+
+exported_id(I) -> id(I).
+
+exported_id(_, _) -> ok.
+
+do_coverage_bin_to_term_list(L) ->
+ Bin = << <<(begin BinTerm = term_to_binary(Term),
+ <<(byte_size(BinTerm)):32,BinTerm/binary>> end)/binary>> ||
+ Term <- L >>,
+ L = do_coverage_bin_to_term_list_1(Bin),
+ L = do_coverage_bin_to_term_list_1(<<Bin/binary,7:32,"garbage">>),
+ L = do_coverage_bin_to_term_list_1(<<7:32,"garbage",Bin/binary>>).
+
+do_coverage_bin_to_term_list_1(Bin) ->
+ Res = coverage_bin_to_term_list(Bin),
+ Res = coverage_bin_to_term_list(Bin, []),
+ Res = coverage_bin_to_term_list_catch(Bin),
+ Res = coverage_bin_to_term_list_catch(Bin, []).
+
+coverage_bin_to_term_list(<<Sz:32,BinTerm:Sz/binary,T/binary>>) ->
+ try binary_to_term(BinTerm) of
+ Term -> [Term|coverage_bin_to_term_list(T)]
+ catch
+ error:badarg -> coverage_bin_to_term_list(T)
+ end;
+coverage_bin_to_term_list(<<>>) -> [].
+
+coverage_bin_to_term_list(<<Sz:32,BinTerm:Sz/binary,T/binary>>, Acc) ->
+ try binary_to_term(BinTerm) of
+ Term -> coverage_bin_to_term_list(T, [Term|Acc])
+ catch
+ error:badarg -> coverage_bin_to_term_list(T, Acc)
+ end;
+coverage_bin_to_term_list(<<>>, Acc) -> lists:reverse(Acc).
+
+coverage_bin_to_term_list_catch(<<Sz:32,BinTerm:Sz/binary,T/binary>>) ->
+ case catch binary_to_term(BinTerm) of
+ {'EXIT',_} -> coverage_bin_to_term_list_catch(T);
+ Term -> [Term|coverage_bin_to_term_list_catch(T)]
+ end;
+coverage_bin_to_term_list_catch(<<>>) -> [].
+
+coverage_bin_to_term_list_catch(<<Sz:32,BinTerm:Sz/binary,T/binary>>, Acc) ->
+ case catch binary_to_term(BinTerm) of
+ {'EXIT',_} -> coverage_bin_to_term_list_catch(T, Acc);
+ Term -> coverage_bin_to_term_list_catch(T, [Term|Acc])
+ end;
+coverage_bin_to_term_list_catch(<<>>, Acc) -> lists:reverse(Acc).
+
+coverage_per_key(<<BinSize:32,Bin/binary>> = B) ->
+ true = (byte_size(B) =:= BinSize),
+ Bin.
+
+%%--------------------------------------------------------------------
+
+multiple_uses() ->
+ {344,62879,345,<<245,159,1,89>>} = multiple_uses_1(<<1,88,245,159,1,89>>),
+ true = multiple_uses_2(<<0,0,197,18>>),
+ <<42,43>> = multiple_uses_3(<<0,0,42,43>>, fun id/1),
+ ok.
+
+multiple_uses_1(<<X:16,Tail/binary>>) ->
+ %% NOT OPTIMIZED: sub binary is matched or used in more than one place
+ {Y,Z} = multiple_uses_match(Tail),
+ {X,Y,Z,Tail}.
+
+multiple_uses_2(<<_:16,Tail/binary>>) ->
+ %% NOT OPTIMIZED: sub binary is matched or used in more than one place
+ multiple_uses_cmp(Tail, Tail).
+
+multiple_uses_3(<<_:16,Tail/binary>>, Fun) ->
+ %% NOT OPTIMIZED: sub binary is used or returned
+ Fun(Tail).
+
+multiple_uses_match(<<Y:16,Z:16>>) -> {Y,Z}.
+
+multiple_uses_cmp(<<Y:16>>, <<Y:16>>) -> true;
+multiple_uses_cmp(<<_:16>>, <<_:16>>) -> false.
+
+%%--------------------------------------------------------------------
+
+zero_label() ->
+ <<"nosemouth">> = read_pols(<<"FACE","nose","mouth">>),
+ <<"CE">> = read_pols(<<"noFACE">>),
+ ok.
+
+read_pols(Data) ->
+ <<PolygonType:4/binary,Rest/binary>> = Data,
+ %% Intentional warning.
+ _ = (PolygonType == <<"FACE">>) or (PolygonType == <<"PTCH">>),
+ Rest.
+
+%%--------------------------------------------------------------------
+
+followed_by_catch() ->
+ ok = handle(<<0,1,2,3,4,5>>).
+
+-record(rec,{field}).
+handle(<<>>) -> ok;
+handle(Msg) ->
+ <<_DataLen:16, Rest/binary>> = Msg,
+ case catch fooX:func() of
+ [X] ->
+ X#rec.field;
+ _ ->
+ ok
+ end,
+ handle(Rest).
+
+%%--------------------------------------------------------------------
+
+matching_meets_construction() ->
+ Bin = id(<<"abc">>),
+ Len = id(2),
+ Tail0 = id(<<1,2,3,4,5>>),
+ <<_:Len/binary,Tail/binary>> = Tail0,
+ Res = <<Tail/binary,Bin/binary>>,
+ <<3,4,5,"abc">> = Res,
+ {'EXIT',{badarg,_}} = (catch matching_meets_construction_1(<<"Abc">>)),
+ {'EXIT',{badarg,_}} = (catch matching_meets_construction_2(<<"Abc">>)),
+ <<"Bbc">> = matching_meets_construction_3(<<"Abc">>),
+ <<1,2>> = encode_octet_string(<<1,2,3>>, 2),
+ ok.
+
+matching_meets_construction_1(<<"A",H/binary>>) -> <<"B",H>>.
+
+matching_meets_construction_2(<<"A",H/binary>>) -> <<"B",H/float>>.
+
+matching_meets_construction_3(<<"A",H/binary>>) -> <<"B",H/binary>>.
+
+encode_octet_string(<<OctetString/binary>>, Len) ->
+ <<OctetString:Len/binary-unit:8>>.
+
+%%--------------------------------------------------------------------
+
+simon() ->
+ one = simon(blurf, <<>>),
+ two = simon(0, <<42>>),
+ fc(simon, [17,<<1>>], catch simon(17, <<1>>)),
+ fc(simon, [0,<<1,2,3>>], catch simon(0, <<1,2,3>>)),
+
+ one = simon2(blurf, <<9>>),
+ two = simon2(0, <<9,1>>),
+ fc(simon2, [0,<<9,10,11>>], catch simon2(0, <<9,10,11>>)),
+ ok.
+
+simon(_, <<>>) -> one;
+simon(0, <<_>>) -> two.
+
+simon2(_, <<9>>) -> one;
+simon2(0, <<_:16>>) -> two.
+
+%%--------------------------------------------------------------------
+%% OTP-7113: Crash in v3_codegen.
+
+matching_and_andalso() ->
+ ok = matching_and_andalso_1(<<1,2,3>>, 3),
+ {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, -8)),
+ {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, blurf)),
+ {'EXIT',{function_clause,_}} = (catch matching_and_andalso_1(<<1,2,3>>, 19)),
+
+ {"abc",<<"xyz">>} = matching_and_andalso_2("abc", <<"-xyz">>),
+ {"abc",<<"">>} = matching_and_andalso_2("abc", <<($a-1)>>),
+ {"abc",<<"">>} = matching_and_andalso_2("abc", <<($z+1)>>),
+ {"abc",<<"">>} = matching_and_andalso_2("abc", <<($A-1)>>),
+ {"abc",<<"">>} = matching_and_andalso_2("abc", <<($Z+1)>>),
+ error = matching_and_andalso_2([], <<>>),
+ error = matching_and_andalso_2([], <<$A>>),
+ error = matching_and_andalso_2([], <<$Z>>),
+ error = matching_and_andalso_2([], <<$a>>),
+ error = matching_and_andalso_2([], <<$z>>),
+ ok.
+
+matching_and_andalso_1(<<Bitmap/binary>>, K)
+ when is_integer(K) andalso size(Bitmap) >= K andalso 0 < K -> ok.
+
+matching_and_andalso_2(Datetime, <<H,T/binary>>)
+ when not ((H >= $a) andalso (H =< $z)) andalso
+ not ((H >= $A) andalso (H =< $Z)) ->
+ {Datetime,T};
+matching_and_andalso_2(_, _) -> error.
+
+%%--------------------------------------------------------------------
+%% Thanks to Tomas Stejskal.
+
+otp_7188() ->
+ MP3 = <<84,65,71,68,117,154,105,232,107,121,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,68,97,110,105,101,108,32,76,
+ 97,110,100,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,
+ 101,115,116,32,79,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,50,48,48,48,50,48,48,48,32,45,32,66,101,115,
+ 116,32,79,102,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+ 32,32,12>>,
+ {ok,{"ID3v1",
+ [{title,<<68,117,154,105,232,107,121>>},
+ {artist,<<"Daniel Landa">>},
+ {album,<<"Best Of">>}]}} = parse_v1_or_v11_tag(MP3),
+ ok.
+
+parse_v1_or_v11_tag(<<"TAG", Title:30/binary,
+ Artist:30/binary, Album:30/binary,
+ _Year:4/binary, _Comment:28/binary,
+ 0:8, Track:8, _Genre:8>>) ->
+ {ok,
+ {"ID3v1.1",
+ [{track, Track}, {title, trim(Title)},
+ {artist, trim(Artist)}, {album, trim(Album)}]}};
+parse_v1_or_v11_tag(<<"TAG", Title:30/binary,
+ Artist:30/binary, Album:30/binary,
+ _Year:4/binary, _Comment:30/binary,
+ _Genre:8>>) ->
+ {ok,
+ {"ID3v1",
+ [{title, trim(Title)},
+ {artist, trim(Artist)},
+ {album, trim(Album)}]}};
+parse_v1_or_v11_tag(_) ->
+ error.
+
+trim(Bin) ->
+ list_to_binary(trim_blanks(binary_to_list(Bin))).
+
+trim_blanks(L) ->
+ lists:reverse(skip_blanks_and_zero(lists:reverse(L))).
+
+skip_blanks_and_zero([$\s|T]) ->
+ skip_blanks_and_zero(T);
+skip_blanks_and_zero([0|T]) ->
+ skip_blanks_and_zero(T);
+skip_blanks_and_zero(L) ->
+ L.
+
+%%--------------------------------------------------------------------
+%% OTP-7233. Record and binary matching optimizations clashed.
+%% Thanks to Vladimir Klebansky.
+
+-record(rec_otp_7233, {key, val}).
+
+otp_7233() ->
+ otp_7233_1(#rec_otp_7233{key = <<"XXabcde">>,val=[{"xxxxxxxx",42}]}),
+ [<<"XXabcde">>,{"xxxxxxxx",42}] = get(io_format),
+ erase(io_format),
+ otp_7233_1(#rec_otp_7233{key = <<"XXabcde">>,val=[]}),
+ undefined = get(io_format),
+ ok.
+
+otp_7233_1(Rec) ->
+ <<K:2/binary,_Rest:5/binary>> = Rec#rec_otp_7233.key,
+ case K of
+ <<"XX">> ->
+ Value = Rec#rec_otp_7233.val,
+ case lists:keysearch("xxxxxxxx", 1, Value) of
+ {value,T} -> put(io_format, [Rec#rec_otp_7233.key,T]);
+ false -> ok
+ end;
+ _ -> ok
+ end.
+
+%%--------------------------------------------------------------------
+
+otp_7240() ->
+ a = otp_7240_a(0, <<>>),
+ b = otp_7240_a(1, 2),
+
+ a = otp_7240_b(anything, <<>>),
+ b = otp_7240_b(1, {x,y}),
+
+ a = otp_7240_c(anything, <<>>),
+ b = otp_7240_c(1, <<2>>),
+
+ a = otp_7240_d(anything, <<>>),
+ b = otp_7240_d(again, <<2>>),
+
+ a = otp_7240_e(anything, <<>>),
+ b = otp_7240_e(1, 41),
+
+ a = otp_7240_f(anything, <<>>),
+ b = otp_7240_f(1, {}),
+
+ ok.
+
+otp_7240_a(_, <<>>) -> a;
+otp_7240_a(1, 2) -> b.
+
+otp_7240_b(_, <<>>) -> a;
+otp_7240_b(1, {_,_}) -> b.
+
+otp_7240_c(_, <<>>) -> a;
+otp_7240_c(1, <<2>>) -> b.
+
+otp_7240_d(_, <<>>) -> a;
+otp_7240_d(_, <<2>>) -> b.
+
+otp_7240_e(_, <<>>) -> a;
+otp_7240_e(1, B) when B < 42 -> b.
+
+otp_7240_f(_, <<>>) -> a;
+otp_7240_f(1, B) when is_tuple(B) -> b.
+
+%%--------------------------------------------------------------------
+
+otp_7498() ->
+ <<1,2,3>> = otp_7498_foo(<<1,2,3>>, 0),
+ <<2,3>> = otp_7498_foo(<<1,2,3>>, 1),
+ <<1,2,3>> = otp_7498_foo(<<1,2,3>>, 2),
+
+ <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 0),
+ <<2,3>> = otp_7498_bar(<<1,2,3>>, 1),
+ <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 2),
+ <<>> = otp_7498_bar(<<>>, 2),
+ <<1,2,3>> = otp_7498_bar(<<1,2,3>>, 3),
+ ok.
+
+otp_7498_foo(Bin, 0) ->
+ otp_7498_foo(Bin, 42);
+otp_7498_foo(<<_A, Rest/bitstring>>, 1) ->
+ otp_7498_foo(Rest, 43);
+otp_7498_foo(Bin, _I) ->
+ Bin.
+
+otp_7498_bar(Bin, 0) ->
+ otp_7498_bar(Bin, 42);
+otp_7498_bar(<<_A, Rest/bitstring>>, 1) ->
+ otp_7498_bar(Rest, 43);
+otp_7498_bar(<<>>, 2) ->
+ otp_7498_bar(<<>>, 44);
+otp_7498_bar(Bin, _I) ->
+ Bin.
+
+%%--------------------------------------------------------------------
+
+match_string() ->
+ %% To make sure that native endian really is handled correctly
+ %% (i.e. that the compiler does not attempt to use bs_match_string/4
+ %% instructions for native segments), running this test is not enough.
+ %% Either examine the generated for do_match_string_native/1 or
+ %% check the coverage for the v3_kernel module.
+ case erlang:system_info(endian) of
+ little ->
+ do_match_string_native(<<$a,0,$b,0>>);
+ big ->
+ do_match_string_native(<<0,$a,0,$b>>)
+ end,
+ do_match_string_big(<<0,$a,0,$b>>),
+ do_match_string_little(<<$a,0,$b,0>>),
+
+ do_match_string_big_signed(<<255,255>>),
+ do_match_string_little_signed(<<255,255>>),
+
+ plain = no_match_string_opt(<<"abc">>),
+ strange = no_match_string_opt(<<$a:9,$b:9,$c:9>>),
+ ok.
+
+do_match_string_native(<<$a:16/native,$b:16/native>>) -> ok.
+
+do_match_string_big(<<$a:16/big,$b:16/big>>) -> ok.
+
+do_match_string_little(<<$a:16/little,$b:16/little>>) -> ok.
+
+do_match_string_big_signed(<<(-1):16/signed>>) -> ok.
+
+do_match_string_little_signed(<<(-1):16/little-signed>>) -> ok.
+
+no_match_string_opt(<<"abc">>) -> plain;
+no_match_string_opt(<<$a:9,$b:9,$c:9>>) -> strange.
+
+%%--------------------------------------------------------------------
+%% OTP-7591: A zero-width segment in matching would crash the compiler.
+
+zero_width() ->
+ <<Len:16/little, Str:Len/binary, 0:0>> = <<2, 0, $h, $i, 0:0>>,
+ 2 = Len,
+ Str = <<"hi">>,
+ %% Match sure that values that cannot fit in a segment will not match.
+ case id(<<0:8>>) of
+ <<256:8>> -> error;
+ _ -> ok
+ end.
+
+%%--------------------------------------------------------------------
+%% OTP_7650: A invalid size for binary segments could crash the compiler.
+
+bad_size() ->
+ Tuple = {a,b,c},
+ {'EXIT',{{badmatch,<<>>},_}} = (catch <<32:Tuple>> = id(<<>>)),
+ Binary = <<1,2,3>>,
+ {'EXIT',{{badmatch,<<>>},_}} = (catch <<32:Binary>> = id(<<>>)),
+ ok.
+
+%%--------------------------------------------------------------------
+
+haystack() ->
+ <<0:10/unit:8>> = haystack_1(<<0:10/unit:8>>),
+ [<<0:10/unit:8>>,
+ <<0:20/unit:8>>] = haystack_2(<<1:8192>>),
+ ok.
+
+%% Used to crash the compiler.
+haystack_1(Haystack) ->
+ Subs = [10],
+ [begin
+ <<B:Y/binary>> = Haystack,
+ B
+ end || Y <- Subs],
+ Haystack.
+
+%% There would be an incorrect badmatch exception.
+haystack_2(Haystack) ->
+ Subs = [{687,10},{369,20}],
+ [begin
+ <<_:X/binary,B:Y/binary,_/binary>> = Haystack,
+ B
+ end || {X,Y} <- Subs].
+
+fc({'EXIT',{function_clause,_}}) -> ok.
+
+fc(Name, Args, {'EXIT',{function_clause,[{?MODULE,Name,Args,_}|_]}}) -> ok;
+fc(Name, Args, {'EXIT',{function_clause,[{?MODULE,Name,Arity,_}|_]}})
+ when length(Args) =:= Arity ->
+ true = test_server:is_native(?MODULE).
+
+%%--------------------------------------------------------------------
+%% Cover the clause handling bs_context to binary in
+%% beam_block:initialized_regs/2.
+cover_beam_bool() ->
+ ok = do_cover_beam_bool(<<>>, 3),
+ <<19>> = do_cover_beam_bool(<<19>>, 2),
+ <<42>> = do_cover_beam_bool(<<42>>, 1),
+ <<17>> = do_cover_beam_bool(<<13,17>>, 0),
+ ok.
+
+do_cover_beam_bool(Bin, X) when X > 0 ->
+ if
+ X =:= 1; X =:= 2 ->
+ Bin;
+ true ->
+ ok
+ end;
+do_cover_beam_bool(<<_,Bin/binary>>, X) ->
+ do_cover_beam_bool(Bin, X+1).
+
+%%--------------------------------------------------------------------
+
+matched_out_size() ->
+ {253,16#DEADBEEF} = mos_int(<<8,253,16#DEADBEEF:32>>),
+ {6,16#BEEFDEAD} = mos_int(<<3,6:3,16#BEEFDEAD:32>>),
+ {53,16#CAFEDEADBEEFCAFE} = mos_int(<<16,53:16,16#CAFEDEADBEEFCAFE:64>>),
+ {23,16#CAFEDEADBEEFCAFE} = mos_int(<<5,23:5,16#CAFEDEADBEEFCAFE:64>>),
+
+ {<<1,2,3>>,4} = mos_bin(<<3,1,2,3,4,3>>),
+ {<<1,2,3,7>>,19,42} = mos_bin(<<4,1,2,3,7,19,4,42>>),
+ <<1,2,3,7>> = mos_bin(<<4,1,2,3,7,"abcdefghij">>),
+ ok.
+
+mos_int(<<L,I:L,X:32>>) ->
+ {I,X};
+mos_int(<<L,I:L,X:64>>) ->
+ {I,X}.
+
+mos_bin(<<L,Bin:L/binary,X:8,L>>) ->
+ L = byte_size(Bin),
+ {Bin,X};
+mos_bin(<<L,Bin:L/binary,X:8,L,Y:8>>) ->
+ L = byte_size(Bin),
+ {Bin,X,Y};
+mos_bin(<<L,Bin:L/binary,"abcdefghij">>) ->
+ L = byte_size(Bin),
+ Bin.
+
+%%--------------------------------------------------------------------
+
+follow_fail_br() ->
+ 42 = ffb_1(<<0,1>>, <<0>>),
+ 8 = ffb_1(<<0,1>>, [a]),
+ 42 = ffb_2(<<0,1>>, <<0>>, 17),
+ 8 = ffb_2(<<0,1>>, [a], 0),
+ ok.
+
+ffb_1(<<_,T/bitstring>>, List) ->
+ case List of
+ <<_>> ->
+ 42;
+ [_|_] ->
+ %% The fail branch of the bs_start_match2 instruction pointing
+ %% to here would be ignored, making the compiler incorrectly
+ %% assume that the delayed sub-binary optimization was safe.
+ bit_size(T)
+ end.
+
+ffb_2(<<_,T/bitstring>>, List, A) ->
+ case List of
+ <<_>> when A =:= 17 -> 42;
+ [_|_] -> bit_size(T)
+ end.
+
+%%--------------------------------------------------------------------
+
+no_partition() ->
+ one = no_partition_1(<<"string">>, a1),
+ {two,<<"string">>} = no_partition_1(<<"string">>, a2),
+ {two,<<>>} = no_partition_1(<<>>, a2),
+ {two,a} = no_partition_1(a, a2),
+ three = no_partition_1(undefined, a3),
+ {four,a,[]} = no_partition_1([a], a4),
+ {five,a,b} = no_partition_1({a,b}, a5),
+
+ one = no_partition_2(<<"string">>, a1),
+ two = no_partition_2(<<"string">>, a2),
+ two = no_partition_2(<<>>, a2),
+ two = no_partition_2(a, a2),
+ three = no_partition_2(undefined, a3),
+ four = no_partition_2(42, a4),
+ five = no_partition_2([], a5),
+ six = no_partition_2(42.0, a6),
+ ok.
+
+no_partition_1(<<"string">>, a1) -> one;
+no_partition_1(V, a2) -> {two,V};
+no_partition_1(undefined, a3) -> three;
+no_partition_1([H|T], a4) -> {four,H,T};
+no_partition_1({A,B}, a5) -> {five,A,B}.
+
+no_partition_2(<<"string">>, a1) -> one;
+no_partition_2(_, a2) -> two;
+no_partition_2(undefined, a3) -> three;
+no_partition_2(42, a4) -> four;
+no_partition_2([], a5) -> five;
+no_partition_2(42.0, a6) -> six.
+
+%%--------------------------------------------------------------------
+
+calling_a_binary() ->
+ [] = call_binary(<<>>, []),
+ {'EXIT',{badarg,_}} = (catch call_binary(<<1>>, [])),
+ {'EXIT',{badarg,_}} = (catch call_binary(<<1,2,3>>, [])),
+ ok.
+
+call_binary(<<>>, Acc) ->
+ Acc;
+call_binary(<<H,T/bits>>, Acc) ->
+ T(<<Acc/binary,H>>).
+
+%%--------------------------------------------------------------------
+
+binary_in_map() ->
+ ok = match_binary_in_map(#{key => <<42:8>>}),
+ {'EXIT',{{badmatch,#{key := 1}},_}} =
+ (catch match_binary_in_map(#{key => 1})),
+ {'EXIT',{{badmatch,#{key := <<1023:16>>}},_}} =
+ (catch match_binary_in_map(#{key => <<1023:16>>})),
+ {'EXIT',{{badmatch,#{key := <<1:8>>}},_}} =
+ (catch match_binary_in_map(#{key => <<1:8>>})),
+ {'EXIT',{{badmatch,not_a_map},_}} =
+ (catch match_binary_in_map(not_a_map)),
+ ok.
+
+match_binary_in_map(Map) ->
+ case 8 of
+ N ->
+ #{key := <<42:N>>} = Map,
+ ok
+ end.
+
+%%--------------------------------------------------------------------
+
+match_string_opt() ->
+ {x,<<1,2,3>>,{<<1>>,{v,<<1,2,3>>}}} = match_string_opt({<<1>>,{v,<<1,2,3>>}}),
+ ok.
+
+match_string_opt({<<1>>,{v,V}}=T) ->
+ {x,V,T}.
+
+%%--------------------------------------------------------------------
+%% If 'bin_opt_info' was given the warning would lack filename and
+%% line number.
+
+map_and_binary() ->
+ {<<"10">>,<<"37">>,<<"am">>} = do_map_and_binary(<<"10:37am">>),
+ Map1 = #{time => "noon"},
+ {ok,Map1} = do_map_and_binary(Map1),
+ Map2 = #{hour => 8, min => 42},
+ {8,42,Map2} = do_map_and_binary(Map2),
+ ok.
+
+do_map_and_binary(<<Hour:2/bytes, $:, Min:2/bytes, Rest/binary>>) ->
+ {Hour, Min, Rest};
+do_map_and_binary(#{time := _} = T) ->
+ {ok, T};
+do_map_and_binary(#{hour := Hour, min := Min} = T) ->
+ {Hour, Min, T}.
+
+%%--------------------------------------------------------------------
+%% Unsafe caching of branch outcomes in beam_bsm would cause the
+%% delayed creation of sub-binaries optimization to be applied even
+%% when it was unsafe.
+
+unsafe_branch_caching() ->
+ <<>> = do_unsafe_branch_caching(<<42,1>>),
+ <<>> = do_unsafe_branch_caching(<<42,2>>),
+ <<>> = do_unsafe_branch_caching(<<42,3>>),
+ <<17,18>> = do_unsafe_branch_caching(<<42,3,17,18>>),
+ <<>> = do_unsafe_branch_caching(<<1,3,42,2>>),
+ ok.
+
+do_unsafe_branch_caching(<<Code/integer, Bin/binary>>) ->
+ <<C1/integer, B1/binary>> = Bin,
+ case C1 of
+ X when X =:= 1 orelse X =:= 2 ->
+ Bin2 = <<>>;
+ _ ->
+ Bin2 = B1
+ end,
+ case Code of
+ 1 -> do_unsafe_branch_caching(Bin2);
+ _ -> Bin2
+ end.
+
+%%--------------------------------------------------------------------
+
+check(F, R) ->
+ R = F().
+
+id(I) -> I.
diff --git a/lib/hipe/test/bs_SUITE_data/bs_utf.erl b/lib/hipe/test/bs_SUITE_data/bs_utf.erl
index 24526f574d..368ad0cd20 100644
--- a/lib/hipe/test/bs_SUITE_data/bs_utf.erl
+++ b/lib/hipe/test/bs_SUITE_data/bs_utf.erl
@@ -9,7 +9,7 @@
-export([test/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
test() ->
ok = utf8_cm65(),
diff --git a/lib/hipe/test/hipe_SUITE.erl b/lib/hipe/test/hipe_SUITE.erl
index 9319b710d9..a5b3924aa8 100644
--- a/lib/hipe/test/hipe_SUITE.erl
+++ b/lib/hipe/test/hipe_SUITE.erl
@@ -19,9 +19,6 @@
-compile([export_all]).
-include_lib("common_test/include/ct.hrl").
-suite() ->
- [{ct_hooks, [ts_install_cth]}].
-
all() ->
[app, appup].
diff --git a/lib/hipe/test/hipe_testsuite_driver.erl b/lib/hipe/test/hipe_testsuite_driver.erl
index 9f5d7421b4..03ec7adfd0 100644
--- a/lib/hipe/test/hipe_testsuite_driver.erl
+++ b/lib/hipe/test/hipe_testsuite_driver.erl
@@ -1,6 +1,6 @@
-module(hipe_testsuite_driver).
--export([create_all_suites/0, run/3]).
+-export([create_all_suites/1, run/3]).
-include_lib("kernel/include/file.hrl").
@@ -16,25 +16,17 @@
outputfile :: file:io_device(),
testcases :: [testcase()]}).
--spec create_all_suites() -> 'ok'.
+-spec create_all_suites([string()]) -> 'ok'.
-create_all_suites() ->
- {ok, Cwd} = file:get_cwd(),
- Suites = get_suites(Cwd),
+create_all_suites(SuitesWithSuiteSuffix) ->
+ Suites = get_suites(SuitesWithSuiteSuffix),
lists:foreach(fun create_suite/1, Suites).
--spec get_suites(file:filename()) -> [string()].
+-spec get_suites([string()]) -> [string()].
-get_suites(Dir) ->
- case file:list_dir(Dir) of
- {error, _} -> [];
- {ok, Filenames} ->
- FullFilenames = [filename:join(Dir, F) || F <- Filenames],
- Dirs = [suffix(filename:basename(F), ?suite_data) ||
- F <- FullFilenames,
- file_type(F) =:= {ok, 'directory'}],
- [S || {yes, S} <- Dirs]
- end.
+get_suites(SuitesWithSuiteSuffix) ->
+ Prefixes = [suffix(F, ?suite_suffix) || F <- SuitesWithSuiteSuffix],
+ [S || {yes, S} <- Prefixes].
suffix(String, Suffix) ->
case string:rstr(String, Suffix) of
@@ -107,7 +99,7 @@ write_suite(Suite) ->
write_header(#suite{suitename = SuiteName, outputfile = OutputFile,
testcases = TestCases}) ->
Exports = format_export(TestCases),
- TimeLimit = 2, %% with 1 it fails on some slow machines...
+ TimeLimit = 3, %% with 1 or 2 it fails on some slow machines...
io:format(OutputFile,
"%% ATTENTION!\n"
"%% This is an automatically generated file. Do not edit.\n\n"
diff --git a/lib/hipe/test/opt_verify_SUITE.erl b/lib/hipe/test/opt_verify_SUITE.erl
new file mode 100644
index 0000000000..61952e81d7
--- /dev/null
+++ b/lib/hipe/test/opt_verify_SUITE.erl
@@ -0,0 +1,62 @@
+-module(opt_verify_SUITE).
+
+-compile([export_all]).
+
+all() ->
+ [call_elim].
+
+groups() ->
+ [].
+
+init_per_suite(Config) ->
+ case erlang:system_info(hipe_architecture) of
+ undefined -> {skip, "HiPE not available or enabled"};
+ _ -> Config
+ end.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+call_elim_test_file(Config, FileName, Option) ->
+ PrivDir = test_server:lookup_config(priv_dir, Config),
+ TempOut = test_server:temp_name(filename:join(PrivDir, "call_elim_out")),
+ {ok, TestCase} = compile:file(FileName),
+ {ok, TestCase} = hipe:c(TestCase, [Option, {pp_range_icode, {file, TempOut}}]),
+ {ok, Icode} = file:read_file(TempOut),
+ ok = file:delete(TempOut),
+ Icode.
+
+substring_count(Icode, Substring) ->
+ substring_count(Icode, Substring, 0).
+substring_count(Icode, Substring, N) ->
+ case string:str(Icode, Substring) of
+ 0 -> N;
+ I -> substring_count(lists:nthtail(I, Icode), Substring, N+1)
+ end.
+
+call_elim() ->
+ [{doc, "Test that the call elimination optimization pass is ok"}].
+call_elim(Config) ->
+ DataDir = test_server:lookup_config(data_dir, Config),
+ F1 = filename:join(DataDir, "call_elim_test.erl"),
+ Icode1 = call_elim_test_file(Config, F1, icode_call_elim),
+ 0 = substring_count(binary:bin_to_list(Icode1), "is_key"),
+ Icode2 = call_elim_test_file(Config, F1, no_icode_call_elim),
+ true = (0 /= substring_count(binary:bin_to_list(Icode2), "is_key")),
+ F2 = filename:join(DataDir, "call_elim_test_branches_no_opt_poss.erl"),
+ Icode3 = call_elim_test_file(Config, F2, icode_call_elim),
+ 3 = substring_count(binary:bin_to_list(Icode3), "is_key"),
+ Icode4 = call_elim_test_file(Config, F2, no_icode_call_elim),
+ 3 = substring_count(binary:bin_to_list(Icode4), "is_key"),
+ F3 = filename:join(DataDir, "call_elim_test_branches_opt_poss.erl"),
+ Icode5 = call_elim_test_file(Config, F3, icode_call_elim),
+ 0 = substring_count(binary:bin_to_list(Icode5), "is_key"),
+ Icode6 = call_elim_test_file(Config, F3, no_icode_call_elim),
+ 3 = substring_count(binary:bin_to_list(Icode6), "is_key"),
+ ok.
diff --git a/lib/hipe/test/opt_verify_SUITE_data/call_elim_test.erl b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test.erl
new file mode 100644
index 0000000000..8b725f8ffe
--- /dev/null
+++ b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test.erl
@@ -0,0 +1,12 @@
+-module(call_elim_test).
+
+-export([test/0]).
+
+test() ->
+ true = has_1_field(#{1=>true}),
+ true = has_1_field(#{1=>"hej", b=>2}),
+ true = has_1_field(#{b=>3, 1=>4}),
+ ok.
+
+has_1_field(#{1:=_}) -> true;
+has_1_field(#{}) -> false.
diff --git a/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_no_opt_poss.erl b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_no_opt_poss.erl
new file mode 100644
index 0000000000..7ffae86797
--- /dev/null
+++ b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_no_opt_poss.erl
@@ -0,0 +1,32 @@
+-module(call_elim_test_branches_no_opt_poss).
+
+-export([test/1]).
+
+test(A) ->
+ if A > 0 ->
+ false = has_a_field(#{b=>true}),
+ true = has_a_field(#{b=>1, a=>"2"}),
+ false = has_a_field(#{b=>5, c=>4}),
+ false = has_tuple_field(#{{ab, 2}=><<"qq">>, 1 =>0}),
+ false = has_tuple_field(#{up =>down, {ab, 2}=>[]}),
+ false = has_tuple_field(#{{ab, 2}=>42});
+ A =< 0 ->
+ true = has_a_field(#{a=>q, 'A' =>nej}),
+ true = has_a_field(#{a=>"hej", false=>true}),
+ true = has_a_field(#{a=>3}),
+ true = has_tuple_field(#{{ab, 1}=>q, 'A' =>nej}),
+ true = has_tuple_field(#{{ab, 1}=>"hej", false=>true}),
+ true = has_tuple_field(#{{ab, 1}=>3})
+ end,
+ true = has_nil_field(#{[] =>3, b=>"seven"}),
+ true = has_nil_field(#{"seventeen"=>17}),
+ ok.
+
+has_tuple_field(#{{ab, 1}:=_}) -> true;
+has_tuple_field(#{}) -> false.
+
+has_a_field(#{a:=_}) -> true;
+has_a_field(#{}) -> false.
+
+has_nil_field(#{[]:=_}) -> true;
+has_nil_field(#{}) -> false.
diff --git a/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_opt_poss.erl b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_opt_poss.erl
new file mode 100644
index 0000000000..c8ddfa1e75
--- /dev/null
+++ b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_opt_poss.erl
@@ -0,0 +1,32 @@
+-module(call_elim_test_branches_opt_poss).
+
+-export([test/1]).
+
+test(A) ->
+ if A > 0 ->
+ true = has_a_field(#{a=>true}),
+ true = has_a_field(#{b=>1, a=>"2"}),
+ true = has_a_field(#{a=>5, c=>4}),
+ true = has_tuple_field(#{{ab, 1}=><<"qq">>, 1 =>0}),
+ true = has_tuple_field(#{up =>down, {ab, 1}=>[]}),
+ true = has_tuple_field(#{{ab, 1}=>42});
+ A =< 0 ->
+ true = has_a_field(#{a=>q, 'A' =>nej}),
+ true = has_a_field(#{a=>"hej", false=>true}),
+ true = has_a_field(#{a=>3}),
+ true = has_tuple_field(#{{ab, 1}=>q, 'A' =>nej}),
+ true = has_tuple_field(#{{ab, 1}=>"hej", false=>true}),
+ true = has_tuple_field(#{{ab, 1}=>3})
+ end,
+ true = has_nil_field(#{[] =>3, b =>"seven"}),
+ true = has_nil_field(#{"seventeen"=>17, []=>nil}),
+ ok.
+
+has_tuple_field(#{{ab, 1}:=_}) -> true;
+has_tuple_field(#{}) -> false.
+
+has_a_field(#{a:=_}) -> true;
+has_a_field(#{}) -> false.
+
+has_nil_field(#{[]:=_}) -> true;
+has_nil_field(#{}) -> false.
diff --git a/lib/hipe/tools/Makefile b/lib/hipe/tools/Makefile
index 095a210529..7a62896c31 100644
--- a/lib/hipe/tools/Makefile
+++ b/lib/hipe/tools/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2012. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -65,7 +65,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/tools/hipe_jit.erl b/lib/hipe/tools/hipe_jit.erl
index 20118cd523..ffe0e440e9 100644
--- a/lib/hipe/tools/hipe_jit.erl
+++ b/lib/hipe/tools/hipe_jit.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/tools/hipe_profile.erl b/lib/hipe/tools/hipe_profile.erl
index fea2d46101..9b9c0d6aad 100644
--- a/lib/hipe/tools/hipe_profile.erl
+++ b/lib/hipe/tools/hipe_profile.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/tools/hipe_timer.erl b/lib/hipe/tools/hipe_timer.erl
index 179060c149..72aa25d440 100644
--- a/lib/hipe/tools/hipe_timer.erl
+++ b/lib/hipe/tools/hipe_timer.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/util/Makefile b/lib/hipe/util/Makefile
index 4a78ad7a1b..66e9421c25 100644
--- a/lib/hipe/util/Makefile
+++ b/lib/hipe/util/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -69,7 +69,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/util/hipe_digraph.erl b/lib/hipe/util/hipe_digraph.erl
index c5f7d482e4..7446836926 100644
--- a/lib/hipe/util/hipe_digraph.erl
+++ b/lib/hipe/util/hipe_digraph.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/util/hipe_dot.erl b/lib/hipe/util/hipe_dot.erl
index 76af78d6a2..53e474db42 100644
--- a/lib/hipe/util/hipe_dot.erl
+++ b/lib/hipe/util/hipe_dot.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/util/hipe_timing.erl b/lib/hipe/util/hipe_timing.erl
index 9f423f29f1..bf8a08dee5 100644
--- a/lib/hipe/util/hipe_timing.erl
+++ b/lib/hipe/util/hipe_timing.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/util/hipe_vectors.erl b/lib/hipe/util/hipe_vectors.erl
index ceab52a7dc..7f6c8e91c2 100644
--- a/lib/hipe/util/hipe_vectors.erl
+++ b/lib/hipe/util/hipe_vectors.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/util/hipe_vectors.hrl b/lib/hipe/util/hipe_vectors.hrl
index 825074e2cf..d4556e9dc4 100644
--- a/lib/hipe/util/hipe_vectors.hrl
+++ b/lib/hipe/util/hipe_vectors.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/vsn.mk b/lib/hipe/vsn.mk
index 2edfd790ed..e61c1a042c 100644
--- a/lib/hipe/vsn.mk
+++ b/lib/hipe/vsn.mk
@@ -1 +1 @@
-HIPE_VSN = 3.15
+HIPE_VSN = 3.15.1
diff --git a/lib/hipe/x86/Makefile b/lib/hipe/x86/Makefile
index ddd704d054..93f8b955dd 100644
--- a/lib/hipe/x86/Makefile
+++ b/lib/hipe/x86/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -84,7 +84,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/x86/hipe_rtl_to_x86.erl b/lib/hipe/x86/hipe_rtl_to_x86.erl
index 54ecc468f8..d13f63b1d9 100644
--- a/lib/hipe/x86/hipe_rtl_to_x86.erl
+++ b/lib/hipe/x86/hipe_rtl_to_x86.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86.erl b/lib/hipe/x86/hipe_x86.erl
index 9348d88d25..33d7f77cf1 100644
--- a/lib/hipe/x86/hipe_x86.erl
+++ b/lib/hipe/x86/hipe_x86.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86.hrl b/lib/hipe/x86/hipe_x86.hrl
index 8a62480530..ef99bf90d9 100644
--- a/lib/hipe/x86/hipe_x86.hrl
+++ b/lib/hipe/x86/hipe_x86.hrl
@@ -1,7 +1,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_assemble.erl b/lib/hipe/x86/hipe_x86_assemble.erl
index 695ce16887..e21223a5b1 100644
--- a/lib/hipe/x86/hipe_x86_assemble.erl
+++ b/lib/hipe/x86/hipe_x86_assemble.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_cfg.erl b/lib/hipe/x86/hipe_x86_cfg.erl
index 374a0868b9..ab40b68580 100644
--- a/lib/hipe/x86/hipe_x86_cfg.erl
+++ b/lib/hipe/x86/hipe_x86_cfg.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_defuse.erl b/lib/hipe/x86/hipe_x86_defuse.erl
index 68e6a55942..9cba6cbe4b 100644
--- a/lib/hipe/x86/hipe_x86_defuse.erl
+++ b/lib/hipe/x86/hipe_x86_defuse.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_encode.erl b/lib/hipe/x86/hipe_x86_encode.erl
index 3b209dfe52..3b7be86608 100644
--- a/lib/hipe/x86/hipe_x86_encode.erl
+++ b/lib/hipe/x86/hipe_x86_encode.erl
@@ -1,7 +1,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_frame.erl b/lib/hipe/x86/hipe_x86_frame.erl
index 1b23f90809..8851ead250 100644
--- a/lib/hipe/x86/hipe_x86_frame.erl
+++ b/lib/hipe/x86/hipe_x86_frame.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_liveness.erl b/lib/hipe/x86/hipe_x86_liveness.erl
index e93faf64a8..ce46ec920e 100644
--- a/lib/hipe/x86/hipe_x86_liveness.erl
+++ b/lib/hipe/x86/hipe_x86_liveness.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_main.erl b/lib/hipe/x86/hipe_x86_main.erl
index 2b3ebf6f1b..13b0bb6b28 100644
--- a/lib/hipe/x86/hipe_x86_main.erl
+++ b/lib/hipe/x86/hipe_x86_main.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_postpass.erl b/lib/hipe/x86/hipe_x86_postpass.erl
index a0bbf29510..939baeccec 100644
--- a/lib/hipe/x86/hipe_x86_postpass.erl
+++ b/lib/hipe/x86/hipe_x86_postpass.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_pp.erl b/lib/hipe/x86/hipe_x86_pp.erl
index ab7ae5b703..9352cf5dbf 100644
--- a/lib/hipe/x86/hipe_x86_pp.erl
+++ b/lib/hipe/x86/hipe_x86_pp.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_ra.erl b/lib/hipe/x86/hipe_x86_ra.erl
index 117bd06ab7..f66961a7a7 100644
--- a/lib/hipe/x86/hipe_x86_ra.erl
+++ b/lib/hipe/x86/hipe_x86_ra.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_ra_finalise.erl b/lib/hipe/x86/hipe_x86_ra_finalise.erl
index bac3dab867..5dd75cb7ae 100644
--- a/lib/hipe/x86/hipe_x86_ra_finalise.erl
+++ b/lib/hipe/x86/hipe_x86_ra_finalise.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_ra_ls.erl b/lib/hipe/x86/hipe_x86_ra_ls.erl
index 09fce1f33b..3e34433111 100644
--- a/lib/hipe/x86/hipe_x86_ra_ls.erl
+++ b/lib/hipe/x86/hipe_x86_ra_ls.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_ra_naive.erl b/lib/hipe/x86/hipe_x86_ra_naive.erl
index 14eaf00860..0ef4ef0a04 100644
--- a/lib/hipe/x86/hipe_x86_ra_naive.erl
+++ b/lib/hipe/x86/hipe_x86_ra_naive.erl
@@ -2,7 +2,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_ra_postconditions.erl b/lib/hipe/x86/hipe_x86_ra_postconditions.erl
index de5a4f6a4d..0a70bd1d22 100644
--- a/lib/hipe/x86/hipe_x86_ra_postconditions.erl
+++ b/lib/hipe/x86/hipe_x86_ra_postconditions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_ra_x87_ls.erl b/lib/hipe/x86/hipe_x86_ra_x87_ls.erl
index e412ed262d..1ee76e5948 100644
--- a/lib/hipe/x86/hipe_x86_ra_x87_ls.erl
+++ b/lib/hipe/x86/hipe_x86_ra_x87_ls.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_registers.erl b/lib/hipe/x86/hipe_x86_registers.erl
index db9497b569..179d734501 100644
--- a/lib/hipe/x86/hipe_x86_registers.erl
+++ b/lib/hipe/x86/hipe_x86_registers.erl
@@ -1,7 +1,7 @@
%%%
%%% %CopyrightBegin%
%%%
-%%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_spill_restore.erl b/lib/hipe/x86/hipe_x86_spill_restore.erl
index 590ec43d23..f17b91f33b 100644
--- a/lib/hipe/x86/hipe_x86_spill_restore.erl
+++ b/lib/hipe/x86/hipe_x86_spill_restore.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/hipe/x86/hipe_x86_x87.erl b/lib/hipe/x86/hipe_x86_x87.erl
index dcab396483..e874490252 100644
--- a/lib/hipe/x86/hipe_x86_x87.erl
+++ b/lib/hipe/x86/hipe_x86_x87.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/Makefile b/lib/ic/Makefile
index 99207d3e57..624aa62a6e 100644
--- a/lib/ic/Makefile
+++ b/lib/ic/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2009. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/Makefile b/lib/ic/c_src/Makefile
index 89443e4327..35d6013279 100644
--- a/lib/ic/c_src/Makefile
+++ b/lib/ic/c_src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2009. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/Makefile.in b/lib/ic/c_src/Makefile.in
index b9f92a0925..c0dad59557 100644
--- a/lib/ic/c_src/Makefile.in
+++ b/lib/ic/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2012. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/Makefile.win32 b/lib/ic/c_src/Makefile.win32
index abd676ffb1..670a17f958 100644
--- a/lib/ic/c_src/Makefile.win32
+++ b/lib/ic/c_src/Makefile.win32
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/ic.c b/lib/ic/c_src/ic.c
index 0c8bb3479d..6e55a13f4f 100644
--- a/lib/ic/c_src/ic.c
+++ b/lib/ic/c_src/ic.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/ic_tmo.c b/lib/ic/c_src/ic_tmo.c
index d1a81210af..ef66f67d55 100644
--- a/lib/ic/c_src/ic_tmo.c
+++ b/lib/ic/c_src/ic_tmo.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_code_erlang_binary.c b/lib/ic/c_src/oe_ei_code_erlang_binary.c
index e1842b8dee..81610facbc 100644
--- a/lib/ic/c_src/oe_ei_code_erlang_binary.c
+++ b/lib/ic/c_src/oe_ei_code_erlang_binary.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_decode_longlong.c b/lib/ic/c_src/oe_ei_decode_longlong.c
index d685bc420b..7d872ce94f 100644
--- a/lib/ic/c_src/oe_ei_decode_longlong.c
+++ b/lib/ic/c_src/oe_ei_decode_longlong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_decode_ulonglong.c b/lib/ic/c_src/oe_ei_decode_ulonglong.c
index b1e022011b..d071d09a43 100644
--- a/lib/ic/c_src/oe_ei_decode_ulonglong.c
+++ b/lib/ic/c_src/oe_ei_decode_ulonglong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_decode_wchar.c b/lib/ic/c_src/oe_ei_decode_wchar.c
index adc99dfabc..bb6899b7b3 100644
--- a/lib/ic/c_src/oe_ei_decode_wchar.c
+++ b/lib/ic/c_src/oe_ei_decode_wchar.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_decode_wstring.c b/lib/ic/c_src/oe_ei_decode_wstring.c
index 32ab96ecf1..5b676fd579 100644
--- a/lib/ic/c_src/oe_ei_decode_wstring.c
+++ b/lib/ic/c_src/oe_ei_decode_wstring.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_atom.c b/lib/ic/c_src/oe_ei_encode_atom.c
index 09126e841c..758586d1d4 100644
--- a/lib/ic/c_src/oe_ei_encode_atom.c
+++ b/lib/ic/c_src/oe_ei_encode_atom.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_char.c b/lib/ic/c_src/oe_ei_encode_char.c
index 96b8d04170..9079cb4ecc 100644
--- a/lib/ic/c_src/oe_ei_encode_char.c
+++ b/lib/ic/c_src/oe_ei_encode_char.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_double.c b/lib/ic/c_src/oe_ei_encode_double.c
index c8db4d0771..95fed6ff25 100644
--- a/lib/ic/c_src/oe_ei_encode_double.c
+++ b/lib/ic/c_src/oe_ei_encode_double.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_list_header.c b/lib/ic/c_src/oe_ei_encode_list_header.c
index b7a362705a..57a0fc0d0f 100644
--- a/lib/ic/c_src/oe_ei_encode_list_header.c
+++ b/lib/ic/c_src/oe_ei_encode_list_header.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_long.c b/lib/ic/c_src/oe_ei_encode_long.c
index 67c6cbd3db..c0d8599b95 100644
--- a/lib/ic/c_src/oe_ei_encode_long.c
+++ b/lib/ic/c_src/oe_ei_encode_long.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_longlong.c b/lib/ic/c_src/oe_ei_encode_longlong.c
index f741e1872a..ac208f1982 100644
--- a/lib/ic/c_src/oe_ei_encode_longlong.c
+++ b/lib/ic/c_src/oe_ei_encode_longlong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_pid.c b/lib/ic/c_src/oe_ei_encode_pid.c
index d46d658fcb..ebd0d0b6ef 100644
--- a/lib/ic/c_src/oe_ei_encode_pid.c
+++ b/lib/ic/c_src/oe_ei_encode_pid.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_port.c b/lib/ic/c_src/oe_ei_encode_port.c
index 8de53fff1c..a4ecf846b7 100644
--- a/lib/ic/c_src/oe_ei_encode_port.c
+++ b/lib/ic/c_src/oe_ei_encode_port.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_ref.c b/lib/ic/c_src/oe_ei_encode_ref.c
index c28b507af7..8dcbc3aeb7 100644
--- a/lib/ic/c_src/oe_ei_encode_ref.c
+++ b/lib/ic/c_src/oe_ei_encode_ref.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_string.c b/lib/ic/c_src/oe_ei_encode_string.c
index 17e1a975a6..8612835e2b 100644
--- a/lib/ic/c_src/oe_ei_encode_string.c
+++ b/lib/ic/c_src/oe_ei_encode_string.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_term.c b/lib/ic/c_src/oe_ei_encode_term.c
index f4946ae875..c36edbf493 100644
--- a/lib/ic/c_src/oe_ei_encode_term.c
+++ b/lib/ic/c_src/oe_ei_encode_term.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_tuple_header.c b/lib/ic/c_src/oe_ei_encode_tuple_header.c
index 8ef6111f58..64f8b4b873 100644
--- a/lib/ic/c_src/oe_ei_encode_tuple_header.c
+++ b/lib/ic/c_src/oe_ei_encode_tuple_header.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_ulong.c b/lib/ic/c_src/oe_ei_encode_ulong.c
index eb47f96d0b..249235935e 100644
--- a/lib/ic/c_src/oe_ei_encode_ulong.c
+++ b/lib/ic/c_src/oe_ei_encode_ulong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_ulonglong.c b/lib/ic/c_src/oe_ei_encode_ulonglong.c
index d552d64b31..7997f4ea39 100644
--- a/lib/ic/c_src/oe_ei_encode_ulonglong.c
+++ b/lib/ic/c_src/oe_ei_encode_ulonglong.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_version.c b/lib/ic/c_src/oe_ei_encode_version.c
index 4d07777c67..4bc6256c32 100644
--- a/lib/ic/c_src/oe_ei_encode_version.c
+++ b/lib/ic/c_src/oe_ei_encode_version.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_wchar.c b/lib/ic/c_src/oe_ei_encode_wchar.c
index 3cc46bc1aa..0fd4027886 100644
--- a/lib/ic/c_src/oe_ei_encode_wchar.c
+++ b/lib/ic/c_src/oe_ei_encode_wchar.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/c_src/oe_ei_encode_wstring.c b/lib/ic/c_src/oe_ei_encode_wstring.c
index 4bf8fe7121..a799d475e7 100644
--- a/lib/ic/c_src/oe_ei_encode_wstring.c
+++ b/lib/ic/c_src/oe_ei_encode_wstring.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/doc/src/CORBA_Environment_alloc.xml b/lib/ic/doc/src/CORBA_Environment_alloc.xml
index b4778d5ae2..357d9c2e8a 100644
--- a/lib/ic/doc/src/CORBA_Environment_alloc.xml
+++ b/lib/ic/doc/src/CORBA_Environment_alloc.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/Makefile b/lib/ic/doc/src/Makefile
index e3ccbffbad..c9691df7af 100644
--- a/lib/ic/doc/src/Makefile
+++ b/lib/ic/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2012. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/doc/src/book.xml b/lib/ic/doc/src/book.xml
index 7508368b42..f6ef824f63 100644
--- a/lib/ic/doc/src/book.xml
+++ b/lib/ic/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/c-part.xml b/lib/ic/doc/src/c-part.xml
index 230ba5faa8..968dd3135f 100644
--- a/lib/ic/doc/src/c-part.xml
+++ b/lib/ic/doc/src/c-part.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_basic_idl.xml b/lib/ic/doc/src/ch_basic_idl.xml
index 433cc40224..485a0c44e5 100644
--- a/lib/ic/doc/src/ch_basic_idl.xml
+++ b/lib/ic/doc/src/ch_basic_idl.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_c_client.xml b/lib/ic/doc/src/ch_c_client.xml
index d6282d614c..e304c8acf4 100644
--- a/lib/ic/doc/src/ch_c_client.xml
+++ b/lib/ic/doc/src/ch_c_client.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_c_corba_env.xml b/lib/ic/doc/src/ch_c_corba_env.xml
index 3efe0645ab..1bd829307e 100644
--- a/lib/ic/doc/src/ch_c_corba_env.xml
+++ b/lib/ic/doc/src/ch_c_corba_env.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_c_mapping.xml b/lib/ic/doc/src/ch_c_mapping.xml
index bc18e62dfc..1ea0ace91f 100644
--- a/lib/ic/doc/src/ch_c_mapping.xml
+++ b/lib/ic/doc/src/ch_c_mapping.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_c_server.xml b/lib/ic/doc/src/ch_c_server.xml
index f58db0c071..df25927c90 100644
--- a/lib/ic/doc/src/ch_c_server.xml
+++ b/lib/ic/doc/src/ch_c_server.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_erl_genserv.xml b/lib/ic/doc/src/ch_erl_genserv.xml
index 228636bcd0..aa162b3652 100644
--- a/lib/ic/doc/src/ch_erl_genserv.xml
+++ b/lib/ic/doc/src/ch_erl_genserv.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_erl_plain.xml b/lib/ic/doc/src/ch_erl_plain.xml
index 4b36fde143..27387d1624 100644
--- a/lib/ic/doc/src/ch_erl_plain.xml
+++ b/lib/ic/doc/src/ch_erl_plain.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_ic_protocol.xml b/lib/ic/doc/src/ch_ic_protocol.xml
index e483cec298..cb64500f6e 100644
--- a/lib/ic/doc/src/ch_ic_protocol.xml
+++ b/lib/ic/doc/src/ch_ic_protocol.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_introduction.xml b/lib/ic/doc/src/ch_introduction.xml
index 595758d25f..9ac2f96a95 100644
--- a/lib/ic/doc/src/ch_introduction.xml
+++ b/lib/ic/doc/src/ch_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ch_java.xml b/lib/ic/doc/src/ch_java.xml
index a1e9f7a968..a733adaf65 100644
--- a/lib/ic/doc/src/ch_java.xml
+++ b/lib/ic/doc/src/ch_java.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/erl-part.xml b/lib/ic/doc/src/erl-part.xml
index f7a6ca68a3..9c9cb6a574 100644
--- a/lib/ic/doc/src/erl-part.xml
+++ b/lib/ic/doc/src/erl-part.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ic.xml b/lib/ic/doc/src/ic.xml
index 704a70595c..98e8414a4e 100644
--- a/lib/ic/doc/src/ic.xml
+++ b/lib/ic/doc/src/ic.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ic_c_protocol.xml b/lib/ic/doc/src/ic_c_protocol.xml
index 6107767fd4..ed4f21d661 100644
--- a/lib/ic/doc/src/ic_c_protocol.xml
+++ b/lib/ic/doc/src/ic_c_protocol.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ic_clib.xml b/lib/ic/doc/src/ic_clib.xml
index 2fbe766c9f..50b20d2ca8 100644
--- a/lib/ic/doc/src/ic_clib.xml
+++ b/lib/ic/doc/src/ic_clib.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/java-part.xml b/lib/ic/doc/src/java-part.xml
index b67b136ffd..14b58a1df5 100644
--- a/lib/ic/doc/src/java-part.xml
+++ b/lib/ic/doc/src/java-part.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/notes.xml b/lib/ic/doc/src/notes.xml
index 367f6397fc..08b02bc4a4 100644
--- a/lib/ic/doc/src/notes.xml
+++ b/lib/ic/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,7 +31,22 @@
<file>notes.xml</file>
</header>
- <section><title>IC 4.4</title>
+ <section><title>IC 4.4.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>IC 4.4</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/ic/doc/src/part.xml b/lib/ic/doc/src/part.xml
index 90673fd2b0..0bb7858745 100644
--- a/lib/ic/doc/src/part.xml
+++ b/lib/ic/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/part_notes.xml b/lib/ic/doc/src/part_notes.xml
index 881740f62c..305b2c558d 100644
--- a/lib/ic/doc/src/part_notes.xml
+++ b/lib/ic/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/doc/src/ref_man.xml b/lib/ic/doc/src/ref_man.xml
index a0fbd70e24..a6a4f187b3 100644
--- a/lib/ic/doc/src/ref_man.xml
+++ b/lib/ic/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ic/examples/all-against-all/Makefile b/lib/ic/examples/all-against-all/Makefile
index 8ce182c3e3..e772cab94e 100644
--- a/lib/ic/examples/all-against-all/Makefile
+++ b/lib/ic/examples/all-against-all/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/Makefile.win32 b/lib/ic/examples/all-against-all/Makefile.win32
index 6d79c8a094..a8e480fd1f 100644
--- a/lib/ic/examples/all-against-all/Makefile.win32
+++ b/lib/ic/examples/all-against-all/Makefile.win32
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/callbacks.c b/lib/ic/examples/all-against-all/callbacks.c
index 9ebba3422f..4e6edeb5e0 100644
--- a/lib/ic/examples/all-against-all/callbacks.c
+++ b/lib/ic/examples/all-against-all/callbacks.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/client.c b/lib/ic/examples/all-against-all/client.c
index 492651af99..4f2f7e3eff 100644
--- a/lib/ic/examples/all-against-all/client.c
+++ b/lib/ic/examples/all-against-all/client.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/client.erl b/lib/ic/examples/all-against-all/client.erl
index 656a84d56d..3c147037a0 100644
--- a/lib/ic/examples/all-against-all/client.erl
+++ b/lib/ic/examples/all-against-all/client.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/client.java b/lib/ic/examples/all-against-all/client.java
index f11b0388dc..48b5bc4f60 100644
--- a/lib/ic/examples/all-against-all/client.java
+++ b/lib/ic/examples/all-against-all/client.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/rmod_random_impl.erl b/lib/ic/examples/all-against-all/rmod_random_impl.erl
index b0171715b9..36b280c0b2 100644
--- a/lib/ic/examples/all-against-all/rmod_random_impl.erl
+++ b/lib/ic/examples/all-against-all/rmod_random_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/server.c b/lib/ic/examples/all-against-all/server.c
index 6e74d32ca9..6d46ea7673 100644
--- a/lib/ic/examples/all-against-all/server.c
+++ b/lib/ic/examples/all-against-all/server.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/server.erl b/lib/ic/examples/all-against-all/server.erl
index c086b53df4..c5fa2589ae 100644
--- a/lib/ic/examples/all-against-all/server.erl
+++ b/lib/ic/examples/all-against-all/server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/server.java b/lib/ic/examples/all-against-all/server.java
index 2b5355fff7..79618ba8be 100644
--- a/lib/ic/examples/all-against-all/server.java
+++ b/lib/ic/examples/all-against-all/server.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/all-against-all/serverImpl.java b/lib/ic/examples/all-against-all/serverImpl.java
index f5f345e93e..336bc7e327 100644
--- a/lib/ic/examples/all-against-all/serverImpl.java
+++ b/lib/ic/examples/all-against-all/serverImpl.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-client/Makefile b/lib/ic/examples/c-client/Makefile
index e31a36e6d2..1bfaaed477 100644
--- a/lib/ic/examples/c-client/Makefile
+++ b/lib/ic/examples/c-client/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2009. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-client/client.c b/lib/ic/examples/c-client/client.c
index d8502a638a..652d8376fd 100644
--- a/lib/ic/examples/c-client/client.c
+++ b/lib/ic/examples/c-client/client.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-client/rmod_random_impl.erl b/lib/ic/examples/c-client/rmod_random_impl.erl
index fb97fd0007..2948115f8d 100644
--- a/lib/ic/examples/c-client/rmod_random_impl.erl
+++ b/lib/ic/examples/c-client/rmod_random_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-client/test.erl b/lib/ic/examples/c-client/test.erl
index 2eda04234e..d1fa40ff44 100644
--- a/lib/ic/examples/c-client/test.erl
+++ b/lib/ic/examples/c-client/test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-server/Makefile b/lib/ic/examples/c-server/Makefile
index 205ede2d0c..be23d3ddf9 100644
--- a/lib/ic/examples/c-server/Makefile
+++ b/lib/ic/examples/c-server/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2009. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-server/callbacks.c b/lib/ic/examples/c-server/callbacks.c
index 630456b214..2deca145f4 100644
--- a/lib/ic/examples/c-server/callbacks.c
+++ b/lib/ic/examples/c-server/callbacks.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-server/client.c b/lib/ic/examples/c-server/client.c
index a729e2beb5..c1d7a1c5a7 100644
--- a/lib/ic/examples/c-server/client.c
+++ b/lib/ic/examples/c-server/client.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-server/client.erl b/lib/ic/examples/c-server/client.erl
index 7ff2c6de52..da28cd504b 100644
--- a/lib/ic/examples/c-server/client.erl
+++ b/lib/ic/examples/c-server/client.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/c-server/server.c b/lib/ic/examples/c-server/server.c
index b0a534fcbf..a04d60e9b1 100644
--- a/lib/ic/examples/c-server/server.c
+++ b/lib/ic/examples/c-server/server.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/erl-genserv/rmod_random_impl.erl b/lib/ic/examples/erl-genserv/rmod_random_impl.erl
index 83c1dad61f..9d9ca8afd4 100644
--- a/lib/ic/examples/erl-genserv/rmod_random_impl.erl
+++ b/lib/ic/examples/erl-genserv/rmod_random_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/erl-plain/rmod_random_impl.erl b/lib/ic/examples/erl-plain/rmod_random_impl.erl
index ebed98c327..ee8623f82d 100644
--- a/lib/ic/examples/erl-plain/rmod_random_impl.erl
+++ b/lib/ic/examples/erl-plain/rmod_random_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/java-client-server/client.java b/lib/ic/examples/java-client-server/client.java
index f11b0388dc..48b5bc4f60 100644
--- a/lib/ic/examples/java-client-server/client.java
+++ b/lib/ic/examples/java-client-server/client.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/java-client-server/server.java b/lib/ic/examples/java-client-server/server.java
index 2b5355fff7..79618ba8be 100644
--- a/lib/ic/examples/java-client-server/server.java
+++ b/lib/ic/examples/java-client-server/server.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/java-client-server/serverImpl.java b/lib/ic/examples/java-client-server/serverImpl.java
index f5f345e93e..336bc7e327 100644
--- a/lib/ic/examples/java-client-server/serverImpl.java
+++ b/lib/ic/examples/java-client-server/serverImpl.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/pre_post_condition/Makefile b/lib/ic/examples/pre_post_condition/Makefile
index e300c933c3..cd7e630724 100644
--- a/lib/ic/examples/pre_post_condition/Makefile
+++ b/lib/ic/examples/pre_post_condition/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/pre_post_condition/m_i_impl.erl b/lib/ic/examples/pre_post_condition/m_i_impl.erl
index 71ddb5fb41..fa6d9675a2 100644
--- a/lib/ic/examples/pre_post_condition/m_i_impl.erl
+++ b/lib/ic/examples/pre_post_condition/m_i_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/examples/pre_post_condition/tracer.erl b/lib/ic/examples/pre_post_condition/tracer.erl
index f51c9de28b..c64459f4fd 100644
--- a/lib/ic/examples/pre_post_condition/tracer.erl
+++ b/lib/ic/examples/pre_post_condition/tracer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/include/ic.h b/lib/ic/include/ic.h
index 8344f51226..3dc5dbd4b5 100644
--- a/lib/ic/include/ic.h
+++ b/lib/ic/include/ic.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/Makefile b/lib/ic/java_src/Makefile
index 6f965a5533..86d1e54fff 100644
--- a/lib/ic/java_src/Makefile
+++ b/lib/ic/java_src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/Any.java b/lib/ic/java_src/com/ericsson/otp/ic/Any.java
index b0e717bc59..d90b942877 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/Any.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/Any.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/AnyHelper.java b/lib/ic/java_src/com/ericsson/otp/ic/AnyHelper.java
index abcf9ef204..518087a1ed 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/AnyHelper.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/AnyHelper.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/AnyHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/AnyHolder.java
index 03c48061af..e22876f51e 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/AnyHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/AnyHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/BooleanHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/BooleanHolder.java
index b6ee1418dc..b71da196de 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/BooleanHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/BooleanHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/ByteHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/ByteHolder.java
index cc2f25579a..7c79e8f90d 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/ByteHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/ByteHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/CharHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/CharHolder.java
index 6d49e7fbbb..81d8c6ac73 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/CharHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/CharHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/DoubleHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/DoubleHolder.java
index bf52fb4d9c..6daaa25aa8 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/DoubleHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/DoubleHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/Environment.java b/lib/ic/java_src/com/ericsson/otp/ic/Environment.java
index 9393d61e40..bffa0e27e6 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/Environment.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/Environment.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/FloatHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/FloatHolder.java
index 6ee2a25305..c804973ad6 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/FloatHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/FloatHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/Holder.java b/lib/ic/java_src/com/ericsson/otp/ic/Holder.java
index 74515c262d..a2888539a9 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/Holder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/Holder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/IntHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/IntHolder.java
index c47f0ae01d..7327d03843 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/IntHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/IntHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/LongHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/LongHolder.java
index 8a4481be98..34af201b42 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/LongHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/LongHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/Makefile b/lib/ic/java_src/com/ericsson/otp/ic/Makefile
index d9100cf267..21c38e54b5 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/Makefile
+++ b/lib/ic/java_src/com/ericsson/otp/ic/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/Pid.java b/lib/ic/java_src/com/ericsson/otp/ic/Pid.java
index f2c8dafa0f..0f26c32aef 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/Pid.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/Pid.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/PidHelper.java b/lib/ic/java_src/com/ericsson/otp/ic/PidHelper.java
index 1d0a108233..4c51035738 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/PidHelper.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/PidHelper.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/PidHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/PidHolder.java
index afd42c8b91..f5dfd81576 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/PidHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/PidHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/Port.java b/lib/ic/java_src/com/ericsson/otp/ic/Port.java
index 5c36aee257..34edbea362 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/Port.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/Port.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/PortHelper.java b/lib/ic/java_src/com/ericsson/otp/ic/PortHelper.java
index 22dde64530..3e74758739 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/PortHelper.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/PortHelper.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/PortHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/PortHolder.java
index 0a0a7eadad..da0df3bbc7 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/PortHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/PortHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/Ref.java b/lib/ic/java_src/com/ericsson/otp/ic/Ref.java
index ff01bd7162..a55da87d0d 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/Ref.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/Ref.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/RefHelper.java b/lib/ic/java_src/com/ericsson/otp/ic/RefHelper.java
index a1b19b5fcb..cb145bbbb2 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/RefHelper.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/RefHelper.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/RefHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/RefHolder.java
index f853076339..9ef2eacea1 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/RefHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/RefHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/ShortHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/ShortHolder.java
index cc1f09be89..3b191dd633 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/ShortHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/ShortHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/StringHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/StringHolder.java
index 5c6ccbab5b..f4cd069148 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/StringHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/StringHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/TCKind.java b/lib/ic/java_src/com/ericsson/otp/ic/TCKind.java
index a6a3abace9..e6265ae586 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/TCKind.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/TCKind.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/Term.java b/lib/ic/java_src/com/ericsson/otp/ic/Term.java
index cb0c6ea78a..7a27905fcd 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/Term.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/Term.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/TermHelper.java b/lib/ic/java_src/com/ericsson/otp/ic/TermHelper.java
index 0739d41877..1a6271d9c0 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/TermHelper.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/TermHelper.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/TermHolder.java b/lib/ic/java_src/com/ericsson/otp/ic/TermHolder.java
index 414447bfa2..6a30bad5ea 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/TermHolder.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/TermHolder.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/java_src/com/ericsson/otp/ic/TypeCode.java b/lib/ic/java_src/com/ericsson/otp/ic/TypeCode.java
index b8508562b8..da036fea54 100644
--- a/lib/ic/java_src/com/ericsson/otp/ic/TypeCode.java
+++ b/lib/ic/java_src/com/ericsson/otp/ic/TypeCode.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/Makefile b/lib/ic/src/Makefile
index a6da81a03b..6ad2fbeeb7 100644
--- a/lib/ic/src/Makefile
+++ b/lib/ic/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2012. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic.erl b/lib/ic/src/ic.erl
index 6e64781785..062fbef435 100644
--- a/lib/ic/src/ic.erl
+++ b/lib/ic/src/ic.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic.hrl b/lib/ic/src/ic.hrl
index c38b7395b0..cf4b6a50d6 100644
--- a/lib/ic/src/ic.hrl
+++ b/lib/ic/src/ic.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_array_java.erl b/lib/ic/src/ic_array_java.erl
index 211815b171..64d1b8a9ba 100644
--- a/lib/ic/src/ic_array_java.erl
+++ b/lib/ic/src/ic_array_java.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_attribute_java.erl b/lib/ic/src/ic_attribute_java.erl
index 6663c62212..ddbc6d24f5 100644
--- a/lib/ic/src/ic_attribute_java.erl
+++ b/lib/ic/src/ic_attribute_java.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_cbe.erl b/lib/ic/src/ic_cbe.erl
index 63fffe49ee..f6e64d23a0 100644
--- a/lib/ic/src/ic_cbe.erl
+++ b/lib/ic/src/ic_cbe.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_cclient.erl b/lib/ic/src/ic_cclient.erl
index 919c8e6571..8591acf33f 100644
--- a/lib/ic/src/ic_cclient.erl
+++ b/lib/ic/src/ic_cclient.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_code.erl b/lib/ic/src/ic_code.erl
index 76b06396e5..98d57db93b 100644
--- a/lib/ic/src/ic_code.erl
+++ b/lib/ic/src/ic_code.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_codegen.erl b/lib/ic/src/ic_codegen.erl
index 993391f638..adad021da1 100644
--- a/lib/ic/src/ic_codegen.erl
+++ b/lib/ic/src/ic_codegen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_constant_java.erl b/lib/ic/src/ic_constant_java.erl
index 0bfd708ba5..49150f96ac 100644
--- a/lib/ic/src/ic_constant_java.erl
+++ b/lib/ic/src/ic_constant_java.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_cserver.erl b/lib/ic/src/ic_cserver.erl
index 4aabf2cd92..7c7506367e 100644
--- a/lib/ic/src/ic_cserver.erl
+++ b/lib/ic/src/ic_cserver.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_debug.hrl b/lib/ic/src/ic_debug.hrl
index 72524c573d..97a56743d8 100644
--- a/lib/ic/src/ic_debug.hrl
+++ b/lib/ic/src/ic_debug.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_enum_java.erl b/lib/ic/src/ic_enum_java.erl
index 22cd006e96..dbfa110089 100644
--- a/lib/ic/src/ic_enum_java.erl
+++ b/lib/ic/src/ic_enum_java.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_erl_template.erl b/lib/ic/src/ic_erl_template.erl
index 7a874e312e..0839577701 100644
--- a/lib/ic/src/ic_erl_template.erl
+++ b/lib/ic/src/ic_erl_template.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_erlbe.erl b/lib/ic/src/ic_erlbe.erl
index 2b618b63cf..d315a17e7c 100644
--- a/lib/ic/src/ic_erlbe.erl
+++ b/lib/ic/src/ic_erlbe.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_error.erl b/lib/ic/src/ic_error.erl
index c781400a80..790e1f0539 100644
--- a/lib/ic/src/ic_error.erl
+++ b/lib/ic/src/ic_error.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_fetch.erl b/lib/ic/src/ic_fetch.erl
index 208037aae9..59f21711ec 100644
--- a/lib/ic/src/ic_fetch.erl
+++ b/lib/ic/src/ic_fetch.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_file.erl b/lib/ic/src/ic_file.erl
index d8f21abf5c..688a777400 100644
--- a/lib/ic/src/ic_file.erl
+++ b/lib/ic/src/ic_file.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_forms.erl b/lib/ic/src/ic_forms.erl
index 10f9b8cea3..ed4b3e9a22 100644
--- a/lib/ic/src/ic_forms.erl
+++ b/lib/ic/src/ic_forms.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_genobj.erl b/lib/ic/src/ic_genobj.erl
index 250b883f7b..eb2c24c000 100644
--- a/lib/ic/src/ic_genobj.erl
+++ b/lib/ic/src/ic_genobj.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_java_type.erl b/lib/ic/src/ic_java_type.erl
index 2ea71817e5..931aa92a8e 100644
--- a/lib/ic/src/ic_java_type.erl
+++ b/lib/ic/src/ic_java_type.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_jbe.erl b/lib/ic/src/ic_jbe.erl
index 8227f5559d..56518a681b 100644
--- a/lib/ic/src/ic_jbe.erl
+++ b/lib/ic/src/ic_jbe.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_noc.erl b/lib/ic/src/ic_noc.erl
index e53c4a48ff..0e387b5e70 100644
--- a/lib/ic/src/ic_noc.erl
+++ b/lib/ic/src/ic_noc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_options.erl b/lib/ic/src/ic_options.erl
index 2f7e9e7ab2..d7f56c0d46 100644
--- a/lib/ic/src/ic_options.erl
+++ b/lib/ic/src/ic_options.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_plainbe.erl b/lib/ic/src/ic_plainbe.erl
index dc993224ed..6875c1314e 100644
--- a/lib/ic/src/ic_plainbe.erl
+++ b/lib/ic/src/ic_plainbe.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_pp.erl b/lib/ic/src/ic_pp.erl
index 8e6b5f3810..8c2e3a0ffe 100644
--- a/lib/ic/src/ic_pp.erl
+++ b/lib/ic/src/ic_pp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_pragma.erl b/lib/ic/src/ic_pragma.erl
index 01cf47265c..13c02cfcba 100644
--- a/lib/ic/src/ic_pragma.erl
+++ b/lib/ic/src/ic_pragma.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_sequence_java.erl b/lib/ic/src/ic_sequence_java.erl
index 537992c3e2..f4873a0691 100644
--- a/lib/ic/src/ic_sequence_java.erl
+++ b/lib/ic/src/ic_sequence_java.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_struct_java.erl b/lib/ic/src/ic_struct_java.erl
index 4efc976d62..94b98f6c52 100644
--- a/lib/ic/src/ic_struct_java.erl
+++ b/lib/ic/src/ic_struct_java.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_symtab.erl b/lib/ic/src/ic_symtab.erl
index 098932f9cd..037d004049 100644
--- a/lib/ic/src/ic_symtab.erl
+++ b/lib/ic/src/ic_symtab.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_union_java.erl b/lib/ic/src/ic_union_java.erl
index 168c2ffdae..14d585b0a4 100644
--- a/lib/ic/src/ic_union_java.erl
+++ b/lib/ic/src/ic_union_java.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ic_util.erl b/lib/ic/src/ic_util.erl
index e44ff3d4dd..b1263ae63d 100644
--- a/lib/ic/src/ic_util.erl
+++ b/lib/ic/src/ic_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/icenum.erl b/lib/ic/src/icenum.erl
index 0ed3e0dfa7..cab68d17fa 100644
--- a/lib/ic/src/icenum.erl
+++ b/lib/ic/src/icenum.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/iceval.erl b/lib/ic/src/iceval.erl
index 3921d66559..a93e60124c 100644
--- a/lib/ic/src/iceval.erl
+++ b/lib/ic/src/iceval.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/icforms.hrl b/lib/ic/src/icforms.hrl
index afa74b21ce..f71aee3664 100644
--- a/lib/ic/src/icforms.hrl
+++ b/lib/ic/src/icforms.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/icparse.yrl b/lib/ic/src/icparse.yrl
index fcea0383ef..27e949729c 100644
--- a/lib/ic/src/icparse.yrl
+++ b/lib/ic/src/icparse.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/icpreproc.erl b/lib/ic/src/icpreproc.erl
index 1f9b5d89f1..fc936c4bf3 100644
--- a/lib/ic/src/icpreproc.erl
+++ b/lib/ic/src/icpreproc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/icscan.erl b/lib/ic/src/icscan.erl
index 8df00432f3..123041495e 100644
--- a/lib/ic/src/icscan.erl
+++ b/lib/ic/src/icscan.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/icstruct.erl b/lib/ic/src/icstruct.erl
index 7828b8d8d7..713ac87287 100644
--- a/lib/ic/src/icstruct.erl
+++ b/lib/ic/src/icstruct.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ictk.erl b/lib/ic/src/ictk.erl
index a6e543ad7a..701d662776 100644
--- a/lib/ic/src/ictk.erl
+++ b/lib/ic/src/ictk.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/ictype.erl b/lib/ic/src/ictype.erl
index a00f50dbad..eb6f2088d7 100644
--- a/lib/ic/src/ictype.erl
+++ b/lib/ic/src/ictype.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/icunion.erl b/lib/ic/src/icunion.erl
index d4b7eb7134..c39a5177e7 100644
--- a/lib/ic/src/icunion.erl
+++ b/lib/ic/src/icunion.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/src/icyeccpre.hrl b/lib/ic/src/icyeccpre.hrl
index 2d793dd724..3a2fad185f 100644
--- a/lib/ic/src/icyeccpre.hrl
+++ b/lib/ic/src/icyeccpre.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/Makefile b/lib/ic/test/Makefile
index 576ffc4eff..55b8915875 100644
--- a/lib/ic/test/Makefile
+++ b/lib/ic/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2012. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -209,10 +209,8 @@ ERL_LOCAL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
ERL_COMPILE_FLAGS += \
$(ERL_LOCAL_FLAGS) \
- -pa $(ERL_TOP)/lib/test_server/ebin \
-pa $(ERL_TOP)/lib/orber/ebin \
- -I$(ERL_TOP)/lib/orber \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/orber
# ----------------------------------------------------
# Targets
diff --git a/lib/ic/test/c_client_erl_server_SUITE.erl b/lib/ic/test/c_client_erl_server_SUITE.erl
index 90e5808c0a..b6e100e102 100644
--- a/lib/ic/test/c_client_erl_server_SUITE.erl
+++ b/lib/ic/test/c_client_erl_server_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -49,7 +49,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -61,9 +61,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -95,173 +95,105 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-long_long_test(doc) -> "";
-long_long_test(suite) -> [];
long_long_test(Config) ->
do_test(long_long_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-unsigned_long_long_test(doc) -> "";
-unsigned_long_long_test(suite) -> [];
unsigned_long_long_test(Config) ->
do_test(unsigned_long_long_test, Config).
-unsigned_long_test(doc) -> "";
-unsigned_long_test(suite) -> [];
unsigned_long_test(Config) ->
do_test(unsigned_long_test, Config).
-unsigned_short_test(doc) -> "";
-unsigned_short_test(suite) -> [];
unsigned_short_test(Config) ->
do_test(unsigned_short_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -275,7 +207,7 @@ do_test(Case, Config) ->
%% Start the server
{ok, _Pid} = m_i:oe_create_link([], {local, ?ERLANG_SERVER_NAME}),
Node = atom_to_list(node()),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
%% Start C-client node as a port program.
diff --git a/lib/ic/test/c_client_erl_server_SUITE_data/Makefile.src b/lib/ic/test/c_client_erl_server_SUITE_data/Makefile.src
index d662c50f90..60ea8ea598 100644
--- a/lib/ic/test/c_client_erl_server_SUITE_data/Makefile.src
+++ b/lib/ic/test/c_client_erl_server_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_SUITE_data/c_client.c b/lib/ic/test/c_client_erl_server_SUITE_data/c_client.c
index 61274d161b..af189a74f7 100644
--- a/lib/ic/test/c_client_erl_server_SUITE_data/c_client.c
+++ b/lib/ic/test/c_client_erl_server_SUITE_data/c_client.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -854,7 +854,6 @@ static int array1_test(IC_Env *env)
print_arr1(alr);
fprintf(stdout, "\n");
}
- free(alo);
free(alr);
return -1;
}
diff --git a/lib/ic/test/c_client_erl_server_SUITE_data/c_erl_test.idl b/lib/ic/test/c_client_erl_server_SUITE_data/c_erl_test.idl
index cd06c6cbb1..126389b01d 100644
--- a/lib/ic/test/c_client_erl_server_SUITE_data/c_erl_test.idl
+++ b/lib/ic/test/c_client_erl_server_SUITE_data/c_erl_test.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2001-2010. All Rights Reserved.
+// Copyright Ericsson AB 2001-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_SUITE_data/erl_server.erl b/lib/ic/test/c_client_erl_server_SUITE_data/erl_server.erl
index 98693e3546..159d3b9b89 100644
--- a/lib/ic/test/c_client_erl_server_SUITE_data/erl_server.erl
+++ b/lib/ic/test/c_client_erl_server_SUITE_data/erl_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_SUITE_data/m_i_impl.erl b/lib/ic/test/c_client_erl_server_SUITE_data/m_i_impl.erl
index 179aaba944..c530991058 100644
--- a/lib/ic/test/c_client_erl_server_SUITE_data/m_i_impl.erl
+++ b/lib/ic/test/c_client_erl_server_SUITE_data/m_i_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_SUITE.erl b/lib/ic/test/c_client_erl_server_proto_SUITE.erl
index ab08a5d082..c15617ea3f 100644
--- a/lib/ic/test/c_client_erl_server_proto_SUITE.erl
+++ b/lib/ic/test/c_client_erl_server_proto_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -48,7 +48,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -60,9 +60,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -94,173 +94,105 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-long_long_test(doc) -> "";
-long_long_test(suite) -> [];
long_long_test(Config) ->
do_test(long_long_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-unsigned_long_long_test(doc) -> "";
-unsigned_long_long_test(suite) -> [];
unsigned_long_long_test(Config) ->
do_test(unsigned_long_long_test, Config).
-unsigned_long_test(doc) -> "";
-unsigned_long_test(suite) -> [];
unsigned_long_test(Config) ->
do_test(unsigned_long_test, Config).
-unsigned_short_test(doc) -> "";
-unsigned_short_test(suite) -> [];
unsigned_short_test(Config) ->
do_test(unsigned_short_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -275,7 +207,7 @@ do_test(Case, Config) ->
{ok, _Pid} = m_i:oe_create_link([], {local, ?ERLANG_SERVER_NAME}),
Node = atom_to_list(node()),
%% [NodeName, HostName] = string:tokens(Node, "@"),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
%% Start C-client node as a port program.
diff --git a/lib/ic/test/c_client_erl_server_proto_SUITE_data/Makefile.src b/lib/ic/test/c_client_erl_server_proto_SUITE_data/Makefile.src
index b5e892dd19..fc6d416316 100644
--- a/lib/ic/test/c_client_erl_server_proto_SUITE_data/Makefile.src
+++ b/lib/ic/test/c_client_erl_server_proto_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_SUITE_data/c_client.c b/lib/ic/test/c_client_erl_server_proto_SUITE_data/c_client.c
index 2fe44342ea..b7609d63e5 100644
--- a/lib/ic/test/c_client_erl_server_proto_SUITE_data/c_client.c
+++ b/lib/ic/test/c_client_erl_server_proto_SUITE_data/c_client.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2003-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2003-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_SUITE_data/c_erl_test.idl b/lib/ic/test/c_client_erl_server_proto_SUITE_data/c_erl_test.idl
index 0d5f6c3302..b6ba1583f3 100644
--- a/lib/ic/test/c_client_erl_server_proto_SUITE_data/c_erl_test.idl
+++ b/lib/ic/test/c_client_erl_server_proto_SUITE_data/c_erl_test.idl
@@ -1,7 +1,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2003-2010. All Rights Reserved.
+// Copyright Ericsson AB 2003-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_SUITE_data/erl_server.erl b/lib/ic/test/c_client_erl_server_proto_SUITE_data/erl_server.erl
index 317303fb93..2fe1dc2f79 100644
--- a/lib/ic/test/c_client_erl_server_proto_SUITE_data/erl_server.erl
+++ b/lib/ic/test/c_client_erl_server_proto_SUITE_data/erl_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_SUITE_data/m_i_impl.erl b/lib/ic/test/c_client_erl_server_proto_SUITE_data/m_i_impl.erl
index b0c1e60b06..92420eaeb4 100644
--- a/lib/ic/test/c_client_erl_server_proto_SUITE_data/m_i_impl.erl
+++ b/lib/ic/test/c_client_erl_server_proto_SUITE_data/m_i_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_SUITE_data/my.c b/lib/ic/test/c_client_erl_server_proto_SUITE_data/my.c
index 5c9355f4b5..46920ce05f 100644
--- a/lib/ic/test/c_client_erl_server_proto_SUITE_data/my.c
+++ b/lib/ic/test/c_client_erl_server_proto_SUITE_data/my.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl
index caac3c0a03..334db7c1da 100644
--- a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl
+++ b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -48,7 +48,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -60,9 +60,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -94,175 +94,105 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-
-
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-long_long_test(doc) -> "";
-long_long_test(suite) -> [];
long_long_test(Config) ->
do_test(long_long_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-unsigned_long_long_test(doc) -> "";
-unsigned_long_long_test(suite) -> [];
unsigned_long_long_test(Config) ->
do_test(unsigned_long_long_test, Config).
-unsigned_long_test(doc) -> "";
-unsigned_long_test(suite) -> [];
unsigned_long_test(Config) ->
do_test(unsigned_long_test, Config).
-unsigned_short_test(doc) -> "";
-unsigned_short_test(suite) -> [];
unsigned_short_test(Config) ->
do_test(unsigned_short_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -277,7 +207,7 @@ do_test(Case, Config) ->
{ok, _Pid} = m_i:oe_create_link([], {local, ?ERLANG_SERVER_NAME}),
Node = atom_to_list(node()),
%% [NodeName, HostName] = string:tokens(Node, "@"),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
%% Start C-client node as a port program.
diff --git a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/Makefile.src b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/Makefile.src
index 68c7ec5a51..6d6bd9baab 100644
--- a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/Makefile.src
+++ b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_client.c b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_client.c
index 33459d5917..23dc089555 100644
--- a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_client.c
+++ b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_client.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_erl_test.idl b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_erl_test.idl
index 2b791b4b87..ec74d36cea 100644
--- a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_erl_test.idl
+++ b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/c_erl_test.idl
@@ -1,7 +1,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2004-2010. All Rights Reserved.
+// Copyright Ericsson AB 2004-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/erl_server.erl b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/erl_server.erl
index 5f51d7263d..f2a6ed83fa 100644
--- a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/erl_server.erl
+++ b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/erl_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/m_i_impl.erl b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/m_i_impl.erl
index eeb3766605..ab62ee40c0 100644
--- a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/m_i_impl.erl
+++ b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/m_i_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/my.c b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/my.c
index 0bf0c7d304..6045034052 100644
--- a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/my.c
+++ b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE_data/my.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_SUITE.erl b/lib/ic/test/erl_client_c_server_SUITE.erl
index eccf9d1868..d592a611f7 100644
--- a/lib/ic/test/erl_client_c_server_SUITE.erl
+++ b/lib/ic/test/erl_client_c_server_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -59,9 +59,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -93,174 +93,105 @@ end_per_group(_GroupName, Config) ->
Config.
-
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-longlong_test(doc) -> "";
-longlong_test(suite) -> [];
longlong_test(Config) ->
do_test(longlong_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-ulonglong_test(doc) -> "";
-ulonglong_test(suite) -> [];
ulonglong_test(Config) ->
do_test(ulonglong_test, Config).
-ulong_test(doc) -> "";
-ulong_test(suite) -> [];
ulong_test(Config) ->
do_test(ulong_test, Config).
-ushort_test(doc) -> "";
-ushort_test(suite) -> [];
ushort_test(Config) ->
do_test(ushort_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -270,7 +201,7 @@ do_test(Case, Config) ->
process_flag(trap_exit, true),
Node = atom_to_list(node()),
[_NodeName, HostName] = string:tokens(Node, "@"),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
ServerNodeName = atom_to_list(?C_SERVER_NODE_NAME),
diff --git a/lib/ic/test/erl_client_c_server_SUITE_data/Makefile.src b/lib/ic/test/erl_client_c_server_SUITE_data/Makefile.src
index e66f6080f4..11eee8b7ac 100644
--- a/lib/ic/test/erl_client_c_server_SUITE_data/Makefile.src
+++ b/lib/ic/test/erl_client_c_server_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2012. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_SUITE_data/c_server.c b/lib/ic/test/erl_client_c_server_SUITE_data/c_server.c
index 362df0e3f3..53345d561b 100644
--- a/lib/ic/test/erl_client_c_server_SUITE_data/c_server.c
+++ b/lib/ic/test/erl_client_c_server_SUITE_data/c_server.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_SUITE_data/callbacks.c b/lib/ic/test/erl_client_c_server_SUITE_data/callbacks.c
index 84eb0f43db..2611e15f5a 100644
--- a/lib/ic/test/erl_client_c_server_SUITE_data/callbacks.c
+++ b/lib/ic/test/erl_client_c_server_SUITE_data/callbacks.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_SUITE_data/erl_c_test.idl b/lib/ic/test/erl_client_c_server_SUITE_data/erl_c_test.idl
index 02fcbc75ca..6ed28f0822 100644
--- a/lib/ic/test/erl_client_c_server_SUITE_data/erl_c_test.idl
+++ b/lib/ic/test/erl_client_c_server_SUITE_data/erl_c_test.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2002-2010. All Rights Reserved.
+// Copyright Ericsson AB 2002-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_SUITE_data/erl_client.erl b/lib/ic/test/erl_client_c_server_SUITE_data/erl_client.erl
index 61f2e843db..139e2d7661 100644
--- a/lib/ic/test/erl_client_c_server_SUITE_data/erl_client.erl
+++ b/lib/ic/test/erl_client_c_server_SUITE_data/erl_client.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_proto_SUITE.erl b/lib/ic/test/erl_client_c_server_proto_SUITE.erl
index a252089c69..99eeed01ad 100644
--- a/lib/ic/test/erl_client_c_server_proto_SUITE.erl
+++ b/lib/ic/test/erl_client_c_server_proto_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -59,9 +59,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -93,174 +93,105 @@ end_per_group(_GroupName, Config) ->
Config.
-
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-longlong_test(doc) -> "";
-longlong_test(suite) -> [];
longlong_test(Config) ->
do_test(longlong_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-ulonglong_test(doc) -> "";
-ulonglong_test(suite) -> [];
ulonglong_test(Config) ->
do_test(ulonglong_test, Config).
-ulong_test(doc) -> "";
-ulong_test(suite) -> [];
ulong_test(Config) ->
do_test(ulong_test, Config).
-ushort_test(doc) -> "";
-ushort_test(suite) -> [];
ushort_test(Config) ->
do_test(ushort_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -270,7 +201,7 @@ do_test(Case, Config) ->
process_flag(trap_exit, true),
Node = atom_to_list(node()),
[_NodeName, HostName] = string:tokens(Node, "@"),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
ServerNodeName = atom_to_list(?C_SERVER_NODE_NAME),
diff --git a/lib/ic/test/erl_client_c_server_proto_SUITE_data/Makefile.src b/lib/ic/test/erl_client_c_server_proto_SUITE_data/Makefile.src
index 42c4fda295..4ef7a74cde 100644
--- a/lib/ic/test/erl_client_c_server_proto_SUITE_data/Makefile.src
+++ b/lib/ic/test/erl_client_c_server_proto_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_proto_SUITE_data/c_server.c b/lib/ic/test/erl_client_c_server_proto_SUITE_data/c_server.c
index a7de4dd07a..a18f0e7ba9 100644
--- a/lib/ic/test/erl_client_c_server_proto_SUITE_data/c_server.c
+++ b/lib/ic/test/erl_client_c_server_proto_SUITE_data/c_server.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_proto_SUITE_data/callbacks.c b/lib/ic/test/erl_client_c_server_proto_SUITE_data/callbacks.c
index d559feed95..bed1dc2dd3 100644
--- a/lib/ic/test/erl_client_c_server_proto_SUITE_data/callbacks.c
+++ b/lib/ic/test/erl_client_c_server_proto_SUITE_data/callbacks.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_c_test.idl b/lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_c_test.idl
index 46c78c5d45..ef9556dd42 100644
--- a/lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_c_test.idl
+++ b/lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_c_test.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2004-2010. All Rights Reserved.
+// Copyright Ericsson AB 2004-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_client.erl b/lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_client.erl
index 2c233ce52b..5fe80cdd7a 100644
--- a/lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_client.erl
+++ b/lib/ic/test/erl_client_c_server_proto_SUITE_data/erl_client.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/erl_client_c_server_proto_SUITE_data/my.c b/lib/ic/test/erl_client_c_server_proto_SUITE_data/my.c
index da88d940f3..aff03253d6 100644
--- a/lib/ic/test/erl_client_c_server_proto_SUITE_data/my.c
+++ b/lib/ic/test/erl_client_c_server_proto_SUITE_data/my.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE.erl b/lib/ic/test/ic_SUITE.erl
index bca75b8349..42c1dbb415 100644
--- a/lib/ic/test/ic_SUITE.erl
+++ b/lib/ic/test/ic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
%%%----------------------------------------------------------------------
-module(ic_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
@@ -83,7 +83,7 @@
%% Standard options to the ic compiler, NOTE unholy use of OutDir
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
%% Top of cases
@@ -129,9 +129,6 @@ end_per_group(_GroupName, Config) ->
Config.
-
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(ic),
ok.
@@ -141,89 +138,72 @@ app_test(_Config) ->
%% Test of constant expressions.
%%
-
-
-const_norm(doc) ->
- ["Checks normal constant types and values"];
-const_norm(suite) -> [];
+%% Checks normal constant types and values
const_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(const_norm),
File = filename:join(DataDir, c_norm),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, const_norm_files()),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, const_norm_files()),
ok.
-const_bad_tk(doc) ->
- ["Checks when the constant value doesn't match the declared type"];
-const_bad_tk(suite) -> [];
+%% Checks when the constant value doesn't match the declared type
const_bad_tk(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, c_err1),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(18, bad_tk_match, R),
ok.
-const_bad_type(doc) ->
- ["Checks operands of ops are of correct type"];
-const_bad_type(suite) -> [];
+%% Checks operands of ops are of correct type
const_bad_type(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, c_err2),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(4, bad_type, R),
ok.
-const_bad_comb(doc) ->
- ["Checks operands of ops are of conflicting types"];
-const_bad_comb(suite) -> [];
+%% Checks operands of ops are of conflicting types
const_bad_comb(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, c_err3),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(3, bad_type_combination, R),
ok.
-
-
-
-union_norm(doc) ->
- ["Checks that normal union declarations works."];
-union_norm(suite) -> [];
+%% Checks that normal union declarations works.
union_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(union_norm),
File = filename:join(DataDir, u_norm),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, union_norm_files()),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, union_norm_files()),
ok.
%% Checks OTP-2007
-union_default(doc) ->
- ["Checks that default cases are correct in type code."];
-union_default(suite) -> [];
+%% Checks that default cases are correct in type code.
union_default(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(union_default),
File = filename:join(DataDir, u_default),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, union_default_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, union_default_files(), [load]),
TkList = i1:oe_get_interface(),
check_label("op0", 0, TkList),
check_label("op1", 1, TkList),
@@ -256,50 +236,41 @@ check_label(Id, N, List) ->
test_server:fail({'no_such_op!', Id, List})
end.
-union_type(doc) ->
- ["Checks that errors are detected. Check that mismatch between case ",
- "value and declared discriminator type is detected."];
-union_type(suite) -> [];
+%% Checks that errors are detected. Check that mismatch between case
+%% value and declared discriminator type is detected.
union_type(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, u_type),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(28, bad_case_type, R),
ok.
-union_mult_err(doc) ->
- ["Check that multiple declared declarators are caught.",
- "Also check that if the discriminator is an enum, then the enum name",
- "must not be used as a declarator in the union switch (declarator",
- "as opposed to label)."];
-union_mult_err(suite) -> [];
+%% Check that multiple declared declarators are caught.
+%% Also check that if the discriminator is an enum, then the enum name
+%% must not be used as a declarator in the union switch (declarator
+%% as opposed to label).
union_mult_err(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, u_mult),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(8, multiply_defined, R),
ok.
-%% Checking mult cases. Now check that other errors are found in the
-%% correct order XXXX
-
-
-union_case_mult(doc) ->
- ["Check that multiply defined case labels are found and reported."];
-union_case_mult(suite) -> [];
+%% Check that multiply defined case labels are found in the
+%% correct order
union_case_mult(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, u_case_mult),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(7, multiple_cases, R),
ok.
@@ -309,19 +280,15 @@ union_case_mult(Config) when is_list(Config) ->
%%
%% Enum cases
%%
-
-
-enum_norm(doc) ->
- ["Checks that normal enum declarations works."];
-enum_norm(suite) -> [];
+%%Checks that normal enum declarations works.
enum_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(enum_norm),
File = filename:join(DataDir, enum),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, enum_norm_files()),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, enum_norm_files()),
ok.
@@ -329,27 +296,23 @@ enum_norm(Config) when is_list(Config) ->
%%
%% Struct cases
%%
-
-
-struct_norm(doc) ->
- ["Checks that normal struct declarations works."];
-struct_norm(suite) -> [];
+%% Checks that normal struct declarations works.
struct_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(struct_norm),
File = filename:join(DataDir, struct),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, struct_norm_files()),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, struct_norm_files()),
Mod = ridiculous_name_to_avoid_clash_svenne,
TestFile = filename:join(OutDir, Mod),
- ?line ok = gen_struct_file(TestFile, Mod),
- ?line ok = compile(OutDir, [Mod], [load]),
-%% ?line {ok, Mod, []} = compile:file(TestFile,
+ ok = gen_struct_file(TestFile, Mod),
+ ok = compile(OutDir, [Mod], [load]),
+%% {ok, Mod, []} = compile:file(TestFile,
%% [{i, OutDir}, {outdir, OutDir},
%% return, load]),
- ?line ok = Mod:test(),
+ ok = Mod:test(),
ok.
@@ -359,36 +322,30 @@ struct_norm(Config) when is_list(Config) ->
%%
%% coss (add sometimes, takes 440 seconds!)
-
-typeid(doc) ->
- ["Check that type id's are generated correctly"];
-typeid(suite) -> [];
+%% Check that type id's are generated correctly
typeid(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(typeid),
File = filename:join(DataDir, typeid),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, typeid_files(), [load]),
- ?line "IDL:I1:1.0" = 'I1':'typeID'(),
- ?line "IDL:M1/I1:1.0" = 'M1_I1':'typeID'(),
- ?line "IDL:M2/M1/I1:1.0" = 'M2_M1_I1':'typeID'(),
- ?line "IDL:M3/M2/M1/I1:1.0" = 'M3_M2_M1_I1':'typeID'(),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, typeid_files(), [load]),
+ "IDL:I1:1.0" = 'I1':'typeID'(),
+ "IDL:M1/I1:1.0" = 'M1_I1':'typeID'(),
+ "IDL:M2/M1/I1:1.0" = 'M2_M1_I1':'typeID'(),
+ "IDL:M3/M2/M1/I1:1.0" = 'M3_M2_M1_I1':'typeID'(),
ok.
%%% This test case is removed because there's no way to test this from
%%% an automated test suite.
-dir(doc) ->
- ["Check that relative directories work, absolute is used in",
- "all other cases in the suite."];
-%%% xxxxxx
-dir(suite) -> [];
+%% Check that relative directories work, absolute is used in
+%% all other cases in the suite.
dir(Config) when is_list(Config) ->
-ok;
+ ok;
dir(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% Needs a unique directory (any better way?)
OutDir = mk_unique("oe_the_dir"),
@@ -402,94 +359,82 @@ dir(Config) ->
%% Generate a unique IDL file with a single constant
gen_file(File, Const),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, [load]),
- ?line 19955 = Mod:Func(),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, [load]),
- ?line 19955 = Mod:Func(),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, [load]),
+ 19955 = Mod:Func(),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, [load]),
+ 19955 = Mod:Func(),
- ?line ok = ic:gen(File),
-%%% ?line ok = compile(".", [load]),
+ ok = ic:gen(File),
+%%% ok = compile(".", [load]),
ok.
-undef_id(doc) ->
- ["Check that various undefied id's are detected correctly"];
-undef_id(suite) -> [];
+%% Check that various undefied id's are detected correctly
undef_id(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, undef_id),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(16, tk_not_found, R),
ok.
-mult_ids(doc) ->
- ["Check that multiply defined ids are caught."];
-mult_ids(suite) -> [];
+%% Check that multiply defined ids are caught.
mult_ids(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, mult_ids),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(22, multiply_defined, R),
ok.
-nasty_names(doc) ->
- ["Check that various nasty names can be generated.",
- "Try to provoke name clashes and name conflicts with",
- "Erlang and IDL"];
-nasty_names(suite) -> [];
+%% Check that various nasty names can be generated.
+%% Try to provoke name clashes and name conflicts with
+%% Erlang and IDL
nasty_names(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(nasty_names),
File = filename:join(DataDir, nasty),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, nasty_names_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, nasty_names_files(), [load]),
ok.
-coss(doc) ->
- ["Check that the Coss standard specification works."];
-coss(suite) -> [];
+%% Check that the Coss standard specification works.
coss(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(coss),
File = filename:join(DataDir, 'Coss'),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, [_W1]} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, []),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, [_W1]} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, []),
ok.
-forward(doc) ->
- ["Check that forward declaratios work."];
-forward(suite) -> [];
+%% Check that forward declaratios work.
forward(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(forward),
File = filename:join(DataDir, forward),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, forward_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, forward_files(), [load]),
ok.
-include(doc) ->
- ["Check that various undefied id's are detected correctly"];
-include(suite) -> [];
+%% Check that various undefied id's are detected correctly
include(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, include),
- ?line error = ic:gen(File, stdopts(OutDir)++[{preproc_flags,"-I" ++ DataDir}]),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)++[{preproc_flags,"-I" ++ DataDir}]),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[{preproc_flags,"-I" ++ DataDir},silent2]),
case lists:map(fun(D) ->
filename:rootname(filename:basename(element(3, D)))
@@ -513,228 +458,198 @@ include(Config) when is_list(Config) ->
%% Inhertit cases
%%
-
-inherit_norm(doc) ->
- ["Checks that normal inheritance works."];
-inherit_norm(suite) -> [];
+%% Checks that normal inheritance works.
inherit_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(inherit_norm),
File = filename:join(DataDir, inherit),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, _Ws} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, inherit_norm_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, _Ws} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, inherit_norm_files(), [load]),
%% Now check constant values:
- ?line 9 = m1_I1:c1(),
+ 9 = m1_I1:c1(),
- ?line 9 = m1_I2:c1(),
- ?line 14 = m1_I2:c2(),
- ?line 27 = m1_I2:c3(),
+ 9 = m1_I2:c1(),
+ 14 = m1_I2:c2(),
+ 27 = m1_I2:c3(),
- ?line 50 = m1_I3:c1(),
- ?line 14 = m1_I3:c2(),
- ?line 27 = m1_I3:c3(),
- ?line 91 = m1_I3:c4(),
- ?line 100 = m1_I3:c5(),
+ 50 = m1_I3:c1(),
+ 14 = m1_I3:c2(),
+ 27 = m1_I3:c3(),
+ 91 = m1_I3:c4(),
+ 100 = m1_I3:c5(),
ok.
-inherit_warn(doc) ->
- ["Check that various inheritance shadowing is detected"];
-inherit_warn(suite) -> [];
+%% Check that various inheritance shadowing is detected
inherit_warn(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, inherit_warn),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, R} =
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(7, inherit_name_shadow, R),
ok.
-inherit_err(doc) ->
- ["Check that various inheritance errors is detected"];
-inherit_err(suite) -> [];
+%% Check that various inheritance errors is detected
inherit_err(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, inherit_err),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, _Ws, R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, _Ws, R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(21, inherit_name_collision, R),
ok.
-
-oneway_norm(doc) ->
- ["Checks that normal oneway operations works."];
-oneway_norm(suite) -> [];
+%% Checks that normal oneway operations works.
oneway_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(oneway_norm),
File = filename:join(DataDir, one),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, oneway_norm_files(), [load]),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, oneway_norm_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, oneway_norm_files(), [load]),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, oneway_norm_files(), [load]),
ok.
-oneway_void(doc) ->
- ["Check that non-void oneways are detected."];
-oneway_void(suite) -> [];
+%% Check that non-void oneways are detected.
oneway_void(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, one_void),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(2, bad_oneway_type, R),
ok.
-oneway_raises(doc) ->
- ["Check that oneways cannot raise exceptions."];
-oneway_raises(suite) -> [];
+%% Check that oneways cannot raise exceptions.
oneway_raises(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, one_raises),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(3, oneway_raises, R),
ok.
-oneway_out(doc) ->
- ["Check that illegal out parameters are detected"];
-oneway_out(suite) -> [];
+%% Check that illegal out parameters are detected
oneway_out(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, one_out),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(2, oneway_outparams, R),
ok.
-oneway_followed(doc) ->
- ["Checks that normal oneways, followed by other operations."];
-oneway_followed(suite) -> [];
+%% Checks that normal oneways, followed by other operations.
oneway_followed(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(oneway_followed),
File = filename:join(DataDir, one_followed),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, oneway_followed_files(), [load]),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, oneway_followed_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, oneway_followed_files(), [load]),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, oneway_followed_files(), [load]),
ok.
-attr_norm(doc) ->
- ["Checks that normal attr operations works."];
-attr_norm(suite) -> [];
+%% Checks that normal attr operations works.
attr_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(attr_norm),
File = filename:join(DataDir, attr),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, attr_norm_files(), [load]),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, attr_norm_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, attr_norm_files(), [load]),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, attr_norm_files(), [load]),
ok.
-type_norm(doc) ->
- ["Checks all types are handled."];
-type_norm(suite) -> [];
+%% Checks all types are handled.
type_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(type_norm),
File = filename:join(DataDir, type),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, type_norm_files(), [load]),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, type_norm_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, type_norm_files(), [load]),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, type_norm_files(), [load]),
ok.
-
-
-syntax1(suite) -> [];
syntax1(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax1),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax2(suite) -> [];
syntax2(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax2),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax3(suite) -> [];
syntax3(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax3),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax4(suite) -> [];
syntax4(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax4),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax5(suite) -> [];
syntax5(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax5),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax6(suite) -> [];
syntax6(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax6),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
@@ -747,17 +662,15 @@ syntax6(Config) when is_list(Config) ->
%% ( OTP-2102 )
%%
-raises_reg(doc) ->
- ["Check that exceptions are really registered to operations."];
-raises_reg(suite) -> [];
+%% Check that exceptions are really registered to operations.
raises_reg(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(raises_reg_check),
File = filename:join(DataDir, raises_reg),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, raises_reg_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, raises_reg_files(), [load]),
set_up('oe_raises_reg'),
@@ -924,7 +837,7 @@ to_list(X) -> X.
%% File must be an atom
gen_struct_file(File, Mod) ->
- ?line {ok, Fd} = file:open(to_list(File)++".erl", [write]),
+ {ok, Fd} = file:open(to_list(File)++".erl", [write]),
io:format(Fd, "~n", []),
io:format(Fd, "-module(~p).~n", [Mod]),
io:format(Fd, "-export([test/0]).~n", []),
diff --git a/lib/ic/test/ic_SUITE_data/attr.idl b/lib/ic/test/ic_SUITE_data/attr.idl
index fb3914d1cc..0a1edc787c 100644
--- a/lib/ic/test/ic_SUITE_data/attr.idl
+++ b/lib/ic/test/ic_SUITE_data/attr.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/c_err1.idl b/lib/ic/test/ic_SUITE_data/c_err1.idl
index 8332bab825..d50c51c807 100644
--- a/lib/ic/test/ic_SUITE_data/c_err1.idl
+++ b/lib/ic/test/ic_SUITE_data/c_err1.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/c_err2.idl b/lib/ic/test/ic_SUITE_data/c_err2.idl
index c385a2e703..84c12421ef 100644
--- a/lib/ic/test/ic_SUITE_data/c_err2.idl
+++ b/lib/ic/test/ic_SUITE_data/c_err2.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/c_err3.idl b/lib/ic/test/ic_SUITE_data/c_err3.idl
index 83946eceae..910f7abcf1 100644
--- a/lib/ic/test/ic_SUITE_data/c_err3.idl
+++ b/lib/ic/test/ic_SUITE_data/c_err3.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/c_norm.idl b/lib/ic/test/ic_SUITE_data/c_norm.idl
index b340b6090a..b573ac3f3d 100644
--- a/lib/ic/test/ic_SUITE_data/c_norm.idl
+++ b/lib/ic/test/ic_SUITE_data/c_norm.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/enum.idl b/lib/ic/test/ic_SUITE_data/enum.idl
index 484647781a..397212baf8 100644
--- a/lib/ic/test/ic_SUITE_data/enum.idl
+++ b/lib/ic/test/ic_SUITE_data/enum.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/forward.idl b/lib/ic/test/ic_SUITE_data/forward.idl
index c55b00b992..e9e8edb89e 100644
--- a/lib/ic/test/ic_SUITE_data/forward.idl
+++ b/lib/ic/test/ic_SUITE_data/forward.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/include.idl b/lib/ic/test/ic_SUITE_data/include.idl
index 1f5185089d..292de177c2 100644
--- a/lib/ic/test/ic_SUITE_data/include.idl
+++ b/lib/ic/test/ic_SUITE_data/include.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/include2.idl b/lib/ic/test/ic_SUITE_data/include2.idl
index 4487663ca0..37caa0bf54 100644
--- a/lib/ic/test/ic_SUITE_data/include2.idl
+++ b/lib/ic/test/ic_SUITE_data/include2.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/include3.idl b/lib/ic/test/ic_SUITE_data/include3.idl
index 5cacc4aadd..18424b3318 100644
--- a/lib/ic/test/ic_SUITE_data/include3.idl
+++ b/lib/ic/test/ic_SUITE_data/include3.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/inherit.idl b/lib/ic/test/ic_SUITE_data/inherit.idl
index 1ce8b2b3b6..93fd4b42ba 100644
--- a/lib/ic/test/ic_SUITE_data/inherit.idl
+++ b/lib/ic/test/ic_SUITE_data/inherit.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/inherit_err.idl b/lib/ic/test/ic_SUITE_data/inherit_err.idl
index c3eac38d0f..3b4989dd8b 100644
--- a/lib/ic/test/ic_SUITE_data/inherit_err.idl
+++ b/lib/ic/test/ic_SUITE_data/inherit_err.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/inherit_warn.idl b/lib/ic/test/ic_SUITE_data/inherit_warn.idl
index 9a8f9039e5..07f57f1a7d 100644
--- a/lib/ic/test/ic_SUITE_data/inherit_warn.idl
+++ b/lib/ic/test/ic_SUITE_data/inherit_warn.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/mult_ids.idl b/lib/ic/test/ic_SUITE_data/mult_ids.idl
index 234383fcfd..577e1031fb 100644
--- a/lib/ic/test/ic_SUITE_data/mult_ids.idl
+++ b/lib/ic/test/ic_SUITE_data/mult_ids.idl
@@ -1,7 +1,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/nasty.idl b/lib/ic/test/ic_SUITE_data/nasty.idl
index d29674ab44..e55060f762 100644
--- a/lib/ic/test/ic_SUITE_data/nasty.idl
+++ b/lib/ic/test/ic_SUITE_data/nasty.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/one.idl b/lib/ic/test/ic_SUITE_data/one.idl
index 8b1f212989..7fb9808767 100644
--- a/lib/ic/test/ic_SUITE_data/one.idl
+++ b/lib/ic/test/ic_SUITE_data/one.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/one_followed.idl b/lib/ic/test/ic_SUITE_data/one_followed.idl
index fe92a78760..17074f7e55 100644
--- a/lib/ic/test/ic_SUITE_data/one_followed.idl
+++ b/lib/ic/test/ic_SUITE_data/one_followed.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/one_out.idl b/lib/ic/test/ic_SUITE_data/one_out.idl
index 51d0394485..1e75c2d962 100644
--- a/lib/ic/test/ic_SUITE_data/one_out.idl
+++ b/lib/ic/test/ic_SUITE_data/one_out.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/one_raises.idl b/lib/ic/test/ic_SUITE_data/one_raises.idl
index df8343ac8f..4cd7ae00bb 100644
--- a/lib/ic/test/ic_SUITE_data/one_raises.idl
+++ b/lib/ic/test/ic_SUITE_data/one_raises.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/one_void.idl b/lib/ic/test/ic_SUITE_data/one_void.idl
index d4f5ce6e16..6e8c39197c 100644
--- a/lib/ic/test/ic_SUITE_data/one_void.idl
+++ b/lib/ic/test/ic_SUITE_data/one_void.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/raises_reg.idl b/lib/ic/test/ic_SUITE_data/raises_reg.idl
index 342f20a116..52aba10b8d 100644
--- a/lib/ic/test/ic_SUITE_data/raises_reg.idl
+++ b/lib/ic/test/ic_SUITE_data/raises_reg.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/struct.idl b/lib/ic/test/ic_SUITE_data/struct.idl
index 22b2a16aaf..011c2404d9 100644
--- a/lib/ic/test/ic_SUITE_data/struct.idl
+++ b/lib/ic/test/ic_SUITE_data/struct.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/syntax1.idl b/lib/ic/test/ic_SUITE_data/syntax1.idl
index a805c846db..2de35a6ddf 100644
--- a/lib/ic/test/ic_SUITE_data/syntax1.idl
+++ b/lib/ic/test/ic_SUITE_data/syntax1.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/syntax2.idl b/lib/ic/test/ic_SUITE_data/syntax2.idl
index 9da0c51a1b..39f28392e6 100644
--- a/lib/ic/test/ic_SUITE_data/syntax2.idl
+++ b/lib/ic/test/ic_SUITE_data/syntax2.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/syntax3.idl b/lib/ic/test/ic_SUITE_data/syntax3.idl
index 7911ed4ecf..2bb9ac7229 100644
--- a/lib/ic/test/ic_SUITE_data/syntax3.idl
+++ b/lib/ic/test/ic_SUITE_data/syntax3.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/syntax4.idl b/lib/ic/test/ic_SUITE_data/syntax4.idl
index 0f09847449..e41ad60ed6 100644
--- a/lib/ic/test/ic_SUITE_data/syntax4.idl
+++ b/lib/ic/test/ic_SUITE_data/syntax4.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/syntax5.idl b/lib/ic/test/ic_SUITE_data/syntax5.idl
index 7c9b26f7b1..6468f0adc0 100644
--- a/lib/ic/test/ic_SUITE_data/syntax5.idl
+++ b/lib/ic/test/ic_SUITE_data/syntax5.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/syntax6.idl b/lib/ic/test/ic_SUITE_data/syntax6.idl
index 9ceac7729b..6012cc868c 100644
--- a/lib/ic/test/ic_SUITE_data/syntax6.idl
+++ b/lib/ic/test/ic_SUITE_data/syntax6.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/type.idl b/lib/ic/test/ic_SUITE_data/type.idl
index 65322bf78d..6109661c4f 100644
--- a/lib/ic/test/ic_SUITE_data/type.idl
+++ b/lib/ic/test/ic_SUITE_data/type.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/typeid.idl b/lib/ic/test/ic_SUITE_data/typeid.idl
index 0878283ed1..9a5ce28bdf 100644
--- a/lib/ic/test/ic_SUITE_data/typeid.idl
+++ b/lib/ic/test/ic_SUITE_data/typeid.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/u_case_mult.idl b/lib/ic/test/ic_SUITE_data/u_case_mult.idl
index 37d99f0e9b..3d1523b5f5 100644
--- a/lib/ic/test/ic_SUITE_data/u_case_mult.idl
+++ b/lib/ic/test/ic_SUITE_data/u_case_mult.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/u_default.idl b/lib/ic/test/ic_SUITE_data/u_default.idl
index 80a59b9bee..050b876aad 100644
--- a/lib/ic/test/ic_SUITE_data/u_default.idl
+++ b/lib/ic/test/ic_SUITE_data/u_default.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/u_mult.idl b/lib/ic/test/ic_SUITE_data/u_mult.idl
index 0bc6b64f08..3ab47c40a5 100644
--- a/lib/ic/test/ic_SUITE_data/u_mult.idl
+++ b/lib/ic/test/ic_SUITE_data/u_mult.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/u_norm.idl b/lib/ic/test/ic_SUITE_data/u_norm.idl
index 11ab4aeca5..b2f146f45a 100644
--- a/lib/ic/test/ic_SUITE_data/u_norm.idl
+++ b/lib/ic/test/ic_SUITE_data/u_norm.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/u_type.idl b/lib/ic/test/ic_SUITE_data/u_type.idl
index 49a59bfd57..8a46b9375f 100644
--- a/lib/ic/test/ic_SUITE_data/u_type.idl
+++ b/lib/ic/test/ic_SUITE_data/u_type.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_SUITE_data/undef_id.idl b/lib/ic/test/ic_SUITE_data/undef_id.idl
index 094a59637f..a09598f0a7 100644
--- a/lib/ic/test/ic_SUITE_data/undef_id.idl
+++ b/lib/ic/test/ic_SUITE_data/undef_id.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_be_SUITE.erl b/lib/ic/test/ic_be_SUITE.erl
index 42c30fc86e..d5d3038a6e 100644
--- a/lib/ic/test/ic_be_SUITE.erl
+++ b/lib/ic/test/ic_be_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,14 +23,14 @@
%%%----------------------------------------------------------------------
-module(ic_be_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,plain/1]).
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
%% Top of cases
@@ -56,35 +56,20 @@ end_per_group(_GroupName, Config) ->
Config.
-
-
-plain(doc) ->
- ["Checking code for the plain backend."];
-plain(suite) -> [];
+%% Checking code for the plain backend.
plain(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, plain),
-
- ?line ok = ic:gen(File,stdopts(OutDir)++[{be,erl_plain}]),
-
+ ok = ic:gen(File,stdopts(OutDir)++[{be,erl_plain}]),
ok.
-
-
-
%%--------------------------------------------------------------------
%%
%% Utilities
-
-
stdopts(OutDir) ->
[{outdir, OutDir}, {maxerrs, infinity}].
-
-
-
-
to_list(X) when is_atom(X) -> atom_to_list(X);
to_list(X) -> X.
diff --git a/lib/ic/test/ic_be_SUITE_data/plain.idl b/lib/ic/test/ic_be_SUITE_data/plain.idl
index ab55ba4987..1ee20eeb1f 100644
--- a/lib/ic/test/ic_be_SUITE_data/plain.idl
+++ b/lib/ic/test/ic_be_SUITE_data/plain.idl
@@ -1,7 +1,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE.erl b/lib/ic/test/ic_pp_SUITE.erl
index ab22d532a1..be37953126 100644
--- a/lib/ic/test/ic_pp_SUITE.erl
+++ b/lib/ic/test/ic_pp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,13 +23,13 @@
%%----------------------------------------------------------------------
-module(ic_pp_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Standard options to the ic compiler, NOTE unholy use of OutDir
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
-define(GCC, "g++").
-define(GCC_VER, "2.95.3").
@@ -146,121 +146,100 @@ cases() ->
%%--------------------------------------------------------------------
%% arg
%%--------------------------------------------------------------------
-
-
-arg_norm(doc) -> ["Checks arguments for #define."];
-arg_norm(suite) -> [];
+%% Checks arguments for #define.
arg_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(arg_norm),
File = filename:join(DataDir, arg),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% cascade
%%--------------------------------------------------------------------
-
-
-cascade_norm(doc) -> ["Check cascade #define."];
-cascade_norm(suite) -> [];
+%% Check cascade #define.
cascade_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(cascade_norm),
File = filename:join(DataDir, cascade),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% comment
%%--------------------------------------------------------------------
-
-
-comment_norm(doc) -> ["Check comments."];
-comment_norm(suite) -> [];
+%% Check comments.
comment_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(comment_norm),
File = filename:join(DataDir, comment),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% concat
%%--------------------------------------------------------------------
-
-
-concat_norm(doc) -> ["Check concatinations, i.e ## ."];
-concat_norm(suite) -> [];
+%% Check concatinations, i.e ## .
concat_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(concat_norm),
File = filename:join(DataDir, concat),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% define
%%--------------------------------------------------------------------
-
-
-define_norm(doc) -> ["Check misceleaneous #define."];
-define_norm(suite) -> [];
+%% Check misceleaneous #define.
define_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(define_norm),
File = filename:join(DataDir, define),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% if
%%--------------------------------------------------------------------
-
-if_norm(doc) -> ["Check #if, #elif, and #endif. ."];
-if_norm(suite) -> [];
+%% Check #if, #elif, and #endif.
if_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(if_norm),
File = filename:join(DataDir, 'if'),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
-if_zero(doc) -> ["Check #if 0"];
-if_zero(suite) -> [];
+%% Check #if 0
if_zero(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(if_zero),
File = filename:join(DataDir, if_zero),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% inc
%%--------------------------------------------------------------------
-
-
-inc_norm(doc) -> ["Check #include."];
-inc_norm(suite) -> [];
+%% Check #include.
inc_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(inc_norm),
File = filename:join(DataDir, inc),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
@@ -268,166 +247,133 @@ inc_norm(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%% improp_nest_constr
%%--------------------------------------------------------------------
-
-
-improp_nest_constr_norm(doc) -> ["Check improperly nested constructs."];
-improp_nest_constr_norm(suite) -> [];
+%% Check improperly nested constructs.
improp_nest_constr_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(improp_nest_constr_norm),
File = filename:join(DataDir, improp_nest_constr),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% misc
%%--------------------------------------------------------------------
-
-
-misc_norm(doc) -> ["Misceleaneous checks."];
-misc_norm(suite) -> [];
+%% Misceleaneous checks.
misc_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(misc_norm),
File = filename:join(DataDir, misc),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% line
%%--------------------------------------------------------------------
-
-
-line_norm(doc) -> ["Checks #line."];
-line_norm(suite) -> [];
+%% Checks #line.
line_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(line_norm),
File = filename:join(DataDir, line),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% nopara
%%--------------------------------------------------------------------
-
-
-nopara_norm(doc) -> ["Checks #define with no parameters."];
-nopara_norm(suite) -> [];
+%% Checks #define with no parameters.
nopara_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(nopara_norm),
File = filename:join(DataDir, nopara),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% predef
%%--------------------------------------------------------------------
-
-
-predef_norm(doc) -> ["Checks predefined macros. Note: not __TIME__ and __DATE__."];
-predef_norm(suite) -> [];
+%% Checks predefined macros. Note: not __TIME__ and __DATE__.
predef_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(predef_norm),
File = filename:join(DataDir, predef),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% predef_time
%%--------------------------------------------------------------------
-
-
-predef_time_norm(doc) -> ["Checks the predefined macros __TIME__ and __DATE__."];
-predef_time_norm(suite) -> [];
+%% Checks the predefined macros __TIME__ and __DATE__.
predef_time_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(predef_time_norm),
File = filename:join(DataDir, predef_time),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% self_ref
%%--------------------------------------------------------------------
-
-
-self_ref_norm(doc) -> ["Checks self referring macros."];
-self_ref_norm(suite) -> [];
+%% Checks self referring macros.
self_ref_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(self_ref_norm),
File = filename:join(DataDir, self_ref),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% separate
%%--------------------------------------------------------------------
-
-
-separate_norm(doc) -> ["Checks separete expansion of macro arguments."];
-separate_norm(suite) -> [];
+%% Checks separete expansion of macro arguments.
separate_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(separate_norm),
File = filename:join(DataDir, separate),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% swallow_sc
%%--------------------------------------------------------------------
-
-
-swallow_sc_norm(doc) -> ["Checks swallowing an undesirable semicolon."];
-swallow_sc_norm(suite) -> [];
+%% Checks swallowing an undesirable semicolon.
swallow_sc_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(swallow_sc_norm),
File = filename:join(DataDir, swallow_sc),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% unintended_grp
%%--------------------------------------------------------------------
-
-
-unintended_grp_norm(doc) -> ["Checks unintended grouping of arithmetic."];
-unintended_grp_norm(suite) -> [];
+%% Checks unintended grouping of arithmetic.
unintended_grp_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(unintended_grp_norm),
File = filename:join(DataDir, unintended_grp),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
-
-
-
test_file(FileT, DataDir) ->
case test_file_1(FileT, DataDir) of
ok -> ok;
@@ -441,39 +387,39 @@ test_file_1(FileT, DataDir) ->
FileName = lists:last(Tok),
File = FileT++".idl",
- ?line test_server:format("File ~p~n",[File]),
- ?line test_server:format("FileName ~p~n",[FileName]),
+ test_server:format("File ~p~n",[File]),
+ test_server:format("FileName ~p~n",[FileName]),
Flags = "-I"++DataDir,
- ?line test_server:format("Flags ~p~n",[Flags]),
+ test_server:format("Flags ~p~n",[Flags]),
- ?line Erl = pp_erl(File, Flags),
- ?line Gcc = pp_gcc(File, Flags),
+ Erl = pp_erl(File, Flags),
+ Gcc = pp_gcc(File, Flags),
- ?line case Erl of
+ case Erl of
{error,_ErlError} ->
- ?line test_server:format("Internal_pp Result ~n==================~n~p~n~n",[Erl]);
+ test_server:format("Internal_pp Result ~n==================~n~p~n~n",[Erl]);
{warning, _ErlWar} ->
- ?line test_server:format("Internal_pp Result ~n==================~n~p~n~n",[Erl]);
+ test_server:format("Internal_pp Result ~n==================~n~p~n~n",[Erl]);
_ ->
- ?line test_server:format("Internal_pp Result ~n==================~n~s~n~n",[Erl])
+ test_server:format("Internal_pp Result ~n==================~n~s~n~n",[Erl])
end,
- ?line case Gcc of
+ case Gcc of
{error,GccError} ->
Error = string:tokens(GccError, "\n"),
- ?line test_server:format(?GCC" Result ~n==========~n~p~n~n",
+ test_server:format(?GCC" Result ~n==========~n~p~n~n",
[Error]);
_ ->
- ?line test_server:format(?GCC" Result ~n==========~n~s~n~n",[Gcc])
+ test_server:format(?GCC" Result ~n==========~n~s~n~n",[Gcc])
end,
- ?line case {Erl,Gcc} of
+ case {Erl,Gcc} of
{{warning,W}, {error,X}} ->
- ?line case is_ok(W,X) of
+ case is_ok(W,X) of
yes ->
ok;
no ->
@@ -487,7 +433,7 @@ test_file_1(FileT, DataDir) ->
"Internal_pp found the following Warning = ~p~n",[W]);
{{error,E}, {error,X}} ->
- ?line case is_ok(E,X) of
+ case is_ok(E,X) of
yes ->
ok;
no ->
@@ -496,9 +442,9 @@ test_file_1(FileT, DataDir) ->
end;
{{error,E}, _} ->
- ?line case FileName of
+ case FileName of
"if" ->
- ?line case if_res(E) of
+ case if_res(E) of
ok ->
ok;
_ ->
@@ -516,18 +462,18 @@ test_file_1(FileT, DataDir) ->
_ ->
- ?line file:write_file("/tmp/Erl.pp",list_to_binary(Erl)),
- ?line file:write_file("/tmp/Gcc.pp",list_to_binary(Gcc)),
+ file:write_file("/tmp/Erl.pp",list_to_binary(Erl)),
+ file:write_file("/tmp/Gcc.pp",list_to_binary(Gcc)),
- ?line Res = os:cmd("diff -b -w /tmp/Erl.pp /tmp/Gcc.pp"),
- ?line test_server:format("///////////{error,E} E ~p FileName~p~n",[Res,FileName]),
- ?line case {Res, FileName} of
+ Res = os:cmd("diff -b -w /tmp/Erl.pp /tmp/Gcc.pp"),
+ test_server:format("///////////{error,E} E ~p FileName~p~n",[Res,FileName]),
+ case {Res, FileName} of
{[], _} ->
- ?line test_server:format("Diff = [] OK!!!!!!~n"),
+ test_server:format("Diff = [] OK!!!!!!~n"),
ok;
{_, "predef_time"} ->
Tokens = string:tokens(Res,"\n"),
- ?line test_server:format("///////////{error,E} Tokens~p~n",[Tokens]),
+ test_server:format("///////////{error,E} Tokens~p~n",[Tokens]),
case Tokens of
["3c3",_,"---",_,"5c5",_,"---",_,"9c9",_,"---",_] ->
ok;
diff --git a/lib/ic/test/ic_pp_SUITE_data/arg.idl b/lib/ic/test/ic_pp_SUITE_data/arg.idl
index f3b0c3a7d7..42d8457f2c 100644
--- a/lib/ic/test/ic_pp_SUITE_data/arg.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/arg.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/cascade.idl b/lib/ic/test/ic_pp_SUITE_data/cascade.idl
index 09608f4197..f96f2a0bd7 100644
--- a/lib/ic/test/ic_pp_SUITE_data/cascade.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/cascade.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/comment.idl b/lib/ic/test/ic_pp_SUITE_data/comment.idl
index e2005694fe..9b5e310e6c 100644
--- a/lib/ic/test/ic_pp_SUITE_data/comment.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/comment.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/concat.idl b/lib/ic/test/ic_pp_SUITE_data/concat.idl
index df7c408d2e..eb1f6aa1ad 100644
--- a/lib/ic/test/ic_pp_SUITE_data/concat.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/concat.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/define.idl b/lib/ic/test/ic_pp_SUITE_data/define.idl
index a398125d72..76a3b5ec22 100644
--- a/lib/ic/test/ic_pp_SUITE_data/define.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/define.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/if.idl b/lib/ic/test/ic_pp_SUITE_data/if.idl
index 6b6b101546..437ea7c2e1 100644
--- a/lib/ic/test/ic_pp_SUITE_data/if.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/if.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/if_zero.idl b/lib/ic/test/ic_pp_SUITE_data/if_zero.idl
index 50a9e85b4b..a0184f8bff 100644
--- a/lib/ic/test/ic_pp_SUITE_data/if_zero.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/if_zero.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/improp_nest_constr.idl b/lib/ic/test/ic_pp_SUITE_data/improp_nest_constr.idl
index 66e6be930f..b658811277 100644
--- a/lib/ic/test/ic_pp_SUITE_data/improp_nest_constr.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/improp_nest_constr.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/inc.idl b/lib/ic/test/ic_pp_SUITE_data/inc.idl
index 4b51591835..e13875b10c 100644
--- a/lib/ic/test/ic_pp_SUITE_data/inc.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/inc.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/included1.idl b/lib/ic/test/ic_pp_SUITE_data/included1.idl
index 57e8bc1b72..f3cc40f549 100644
--- a/lib/ic/test/ic_pp_SUITE_data/included1.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/included1.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2000-2010. All Rights Reserved.
+// Copyright Ericsson AB 2000-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/included2.idl b/lib/ic/test/ic_pp_SUITE_data/included2.idl
index 3f5bc32198..6a718ce021 100644
--- a/lib/ic/test/ic_pp_SUITE_data/included2.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/included2.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2000-2010. All Rights Reserved.
+// Copyright Ericsson AB 2000-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/includer.idl b/lib/ic/test/ic_pp_SUITE_data/includer.idl
index 3c6aab8114..d4fabd024a 100644
--- a/lib/ic/test/ic_pp_SUITE_data/includer.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/includer.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2000-2010. All Rights Reserved.
+// Copyright Ericsson AB 2000-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/line.idl b/lib/ic/test/ic_pp_SUITE_data/line.idl
index 679cbaa30e..83783dff03 100644
--- a/lib/ic/test/ic_pp_SUITE_data/line.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/line.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/misc.idl b/lib/ic/test/ic_pp_SUITE_data/misc.idl
index 5febf4b038..512ccb16b1 100644
--- a/lib/ic/test/ic_pp_SUITE_data/misc.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/misc.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/nopara.idl b/lib/ic/test/ic_pp_SUITE_data/nopara.idl
index 473be6a900..9d5253bf38 100644
--- a/lib/ic/test/ic_pp_SUITE_data/nopara.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/nopara.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/predef.idl b/lib/ic/test/ic_pp_SUITE_data/predef.idl
index f412583181..8805501d66 100644
--- a/lib/ic/test/ic_pp_SUITE_data/predef.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/predef.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/predef_time.idl b/lib/ic/test/ic_pp_SUITE_data/predef_time.idl
index 74d63a5c17..7ce8d2a313 100644
--- a/lib/ic/test/ic_pp_SUITE_data/predef_time.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/predef_time.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/self_ref.idl b/lib/ic/test/ic_pp_SUITE_data/self_ref.idl
index c3003ce325..50f8a04e69 100644
--- a/lib/ic/test/ic_pp_SUITE_data/self_ref.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/self_ref.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/separate.idl b/lib/ic/test/ic_pp_SUITE_data/separate.idl
index 8df955cb70..6151a41709 100644
--- a/lib/ic/test/ic_pp_SUITE_data/separate.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/separate.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/swallow_sc.idl b/lib/ic/test/ic_pp_SUITE_data/swallow_sc.idl
index d74c9d8e62..a42fcc6295 100644
--- a/lib/ic/test/ic_pp_SUITE_data/swallow_sc.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/swallow_sc.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pp_SUITE_data/unintended_grp.idl b/lib/ic/test/ic_pp_SUITE_data/unintended_grp.idl
index 0f563c2cc5..ba744ac938 100644
--- a/lib/ic/test/ic_pp_SUITE_data/unintended_grp.idl
+++ b/lib/ic/test/ic_pp_SUITE_data/unintended_grp.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE.erl b/lib/ic/test/ic_pragma_SUITE.erl
index e0ab43e178..bb95e59109 100644
--- a/lib/ic/test/ic_pragma_SUITE.erl
+++ b/lib/ic/test/ic_pragma_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
%%-----------------------------------------------------------------
-module(ic_pragma_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
%%-----------------------------------------------------------------
%% External exports
@@ -47,7 +47,7 @@
end).
%% Standard options to the ic compiler, NOTE unholy use of OutDir
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
%%-----------------------------------------------------------------
@@ -105,23 +105,21 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Test Case: IFR registration with pragmas
%%-----------------------------------------------------------------
-ifr_pragma_reg(doc) ->
- ["Checks that IFR object is correctly registered under pragma engagement."];
-ifr_pragma_reg(suite) -> [];
+%% Checks that IFR object is correctly registered under pragma engagement.
ifr_pragma_reg(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_pragma_reg_run(Config)).
ifr_pragma_reg_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_pragma_reg),
File0 = filename:join(DataDir, reg_m0),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_pragma_files()),
+ ok = compile(OutDir, ifr_pragma_files()),
code:add_pathz(OutDir),
%% OE_register for all files
- ?line ok = 'oe_reg_m0':'oe_register'(),
+ ok = 'oe_reg_m0':'oe_register'(),
%% Pragma registration test
OE_IFR = orber_ifr:find_repository(),
@@ -132,7 +130,7 @@ ifr_pragma_reg_run(Config) ->
check_pragma_effect(OE_IFR,"IDL:P1/M2/T4:2.4"),
%% OE_unregister for all files
- ?line ok = 'oe_reg_m0':'oe_unregister'(),
+ ok = 'oe_reg_m0':'oe_unregister'(),
code:del_path(OutDir),
ok.
@@ -157,14 +155,12 @@ check_pragma_effect(OE_IFR,ID) ->
%%-----------------------------------------------------------------
%% Test Case: Syntactical / Semantical error pragma definitions
%%-----------------------------------------------------------------
-pragma_error(doc) ->
- ["Finds errornous pragma definitions under compilation."];
-pragma_error(suite) -> [];
+%% Finds errornous pragma definitions under compilation.
pragma_error(Config) when is_list(Config) ->
?REMAP_EXCEPT(pragma_error_run(Config)).
pragma_error_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(pragma_error),
File1 = filename:join(DataDir, reg_m1),
File2 = filename:join(DataDir, reg_m2),
@@ -173,22 +169,22 @@ pragma_error_run(Config) ->
File5 = filename:join(DataDir, reg_m5),
File6 = filename:join(DataDir, reg_m6),
- ?line error = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line error = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line error = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line error = ic:gen(File5, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File5, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line error = ic:gen(File6, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File6, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
ok.
@@ -198,25 +194,23 @@ pragma_error_run(Config) ->
%%-----------------------------------------------------------------
%% Test Case: IFR registration with realy uggly placed pragmas
%%-----------------------------------------------------------------
-uggly_pragmas(doc) ->
- ["Checks that IFR object is correctly registered under really uggly pragma engagement."];
-uggly_pragmas(suite) -> [];
+%% Checks that IFR object is correctly registered under really uggly pragma engagement.
uggly_pragmas(Config) when is_list(Config) ->
?REMAP_EXCEPT(uggly_pragmas_run(Config)).
uggly_pragmas_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_pragma_reg),
File0 = filename:join(DataDir, uggly),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, uggly_pragma_files()),
+ ok = compile(OutDir, uggly_pragma_files()),
code:add_pathz(OutDir),
%% OE_register for all files
- ?line ok = 'oe_uggly':'oe_register'(),
+ ok = 'oe_uggly':'oe_register'(),
%% Pragma registration test
OE_IFR = orber_ifr:find_repository(),
@@ -234,7 +228,7 @@ uggly_pragmas_run(Config) ->
check_pragma_effect(OE_IFR, "LOCAL:SomeLocalId:23"),
%% OE_unregister for all files
- ?line ok = 'oe_uggly':'oe_unregister'(),
+ ok = 'oe_uggly':'oe_unregister'(),
code:del_path(OutDir),
ok.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/reg_m0.idl b/lib/ic/test/ic_pragma_SUITE_data/reg_m0.idl
index 6c5fbeb435..a7a90edc92 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/reg_m0.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/reg_m0.idl
@@ -1,7 +1,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/reg_m1.idl b/lib/ic/test/ic_pragma_SUITE_data/reg_m1.idl
index efec9c4371..e222dcddc7 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/reg_m1.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/reg_m1.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/reg_m2.idl b/lib/ic/test/ic_pragma_SUITE_data/reg_m2.idl
index 7154af7a90..351e662ac7 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/reg_m2.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/reg_m2.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/reg_m3.idl b/lib/ic/test/ic_pragma_SUITE_data/reg_m3.idl
index 4e806180c9..4f876da8bc 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/reg_m3.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/reg_m3.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/reg_m4.idl b/lib/ic/test/ic_pragma_SUITE_data/reg_m4.idl
index fd29d8bc81..9de19b645b 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/reg_m4.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/reg_m4.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/reg_m5.idl b/lib/ic/test/ic_pragma_SUITE_data/reg_m5.idl
index 54f738e797..85ff419689 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/reg_m5.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/reg_m5.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/reg_m6.idl b/lib/ic/test/ic_pragma_SUITE_data/reg_m6.idl
index 4e806180c9..4f876da8bc 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/reg_m6.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/reg_m6.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/reg_m7.idl b/lib/ic/test/ic_pragma_SUITE_data/reg_m7.idl
index 02f75216c6..038b670dd9 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/reg_m7.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/reg_m7.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_pragma_SUITE_data/uggly.idl b/lib/ic/test/ic_pragma_SUITE_data/uggly.idl
index 6c6b612309..d12909c00e 100644
--- a/lib/ic/test/ic_pragma_SUITE_data/uggly.idl
+++ b/lib/ic/test/ic_pragma_SUITE_data/uggly.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_register_SUITE.erl b/lib/ic/test/ic_register_SUITE.erl
index e402692940..69eb923f85 100644
--- a/lib/ic/test/ic_register_SUITE.erl
+++ b/lib/ic/test/ic_register_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
%%-----------------------------------------------------------------
-module(ic_register_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
%%-----------------------------------------------------------------
%% External exports
@@ -51,7 +51,7 @@
end).
%% Standard options to the ic compiler, NOTE unholy use of OutDir
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
%%-----------------------------------------------------------------
@@ -111,39 +111,37 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Test Case: IFR type registration
%%-----------------------------------------------------------------
-ifr_reg_unreg(doc) ->
- ["Checks that the generated register/unregister "
- "code for the IFR is correct."];
-ifr_reg_unreg(suite) -> [];
+%% Checks that the generated register/unregister
+%% code for the IFR is correct.
ifr_reg_unreg(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_reg_unregt_run(Config)).
ifr_reg_unregt_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_reg_unreg),
File0 = filename:join(DataDir, reg_m8),
File1 = filename:join(DataDir, reg_m9),
File2 = filename:join(DataDir, reg_m10),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_reg_unreg_files()),
+ ok = compile(OutDir, ifr_reg_unreg_files()),
code:add_pathz(OutDir),
- ?line ok = 'oe_reg_m8':'oe_register'(),
- ?line ok = 'oe_reg_m9':'oe_register'(),
- ?line ok = 'oe_reg_m10':'oe_register'(),
- ?line ok = 'oe_reg_m10':'oe_unregister'(),
- ?line ok = 'oe_reg_m9':'oe_unregister'(),
- ?line ok = 'oe_reg_m8':'oe_unregister'(),
+ ok = 'oe_reg_m8':'oe_register'(),
+ ok = 'oe_reg_m9':'oe_register'(),
+ ok = 'oe_reg_m10':'oe_register'(),
+ ok = 'oe_reg_m10':'oe_unregister'(),
+ ok = 'oe_reg_m9':'oe_unregister'(),
+ ok = 'oe_reg_m8':'oe_unregister'(),
code:del_path(OutDir),
ok.
@@ -155,58 +153,56 @@ ifr_reg_unreg_files() -> ['oe_reg_m8', 'oe_reg_m9', 'oe_reg_m10'].
%% Test Case: IFR registration when object inheritence
%% is applied and registered.
%%-----------------------------------------------------------------
-ifr_reg_unreg_with_inheritence(doc) ->
- ["Checks that the generated register/unregister "
- "code for the IFR is correct, and works even when"
- "the object inheritence is registered. This fixes"
- "two bugs in ifr that caused crash when trying to"
- "use OE_register/OE_unregister in a sequence of"
- "compiled files that contained interfaces who"
- "inherited others in sequence."];
-ifr_reg_unreg_with_inheritence(suite) -> [];
+%% Checks that the generated register/unregister
+%% code for the IFR is correct, and works even when
+%% the object inheritence is registered. This fixes
+%% two bugs in ifr that caused crash when trying to
+%% use OE_register/OE_unregister in a sequence of
+%% compiled files that contained interfaces who
+%% inherited others in sequence.
ifr_reg_unreg_with_inheritence(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_reg_unreg_with_inheritence_run(Config)).
ifr_reg_unreg_with_inheritence_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_reg_unreg),
File0 = filename:join(DataDir, reg_m8),
File1 = filename:join(DataDir, reg_m9),
File2 = filename:join(DataDir, reg_m10),
File3 = filename:join(DataDir, reg_m11),
File4 = filename:join(DataDir, reg_m12),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File3, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File3, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
+ ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
code:add_pathz(OutDir),
- ?line ok = 'oe_reg_m8':'oe_register'(),
- ?line ok = 'oe_reg_m9':'oe_register'(),
- ?line ok = 'oe_reg_m10':'oe_register'(),
- ?line ok = 'oe_reg_m11':'oe_register'(),
- ?line ok = 'oe_reg_m12':'oe_register'(),
- ?line ok = 'oe_reg_m8':'oe_unregister'(),
- ?line ok = 'oe_reg_m9':'oe_unregister'(),
- ?line ok = 'oe_reg_m10':'oe_unregister'(),
- ?line ok = 'oe_reg_m11':'oe_unregister'(),
- ?line ok = 'oe_reg_m12':'oe_unregister'(),
+ ok = 'oe_reg_m8':'oe_register'(),
+ ok = 'oe_reg_m9':'oe_register'(),
+ ok = 'oe_reg_m10':'oe_register'(),
+ ok = 'oe_reg_m11':'oe_register'(),
+ ok = 'oe_reg_m12':'oe_register'(),
+ ok = 'oe_reg_m8':'oe_unregister'(),
+ ok = 'oe_reg_m9':'oe_unregister'(),
+ ok = 'oe_reg_m10':'oe_unregister'(),
+ ok = 'oe_reg_m11':'oe_unregister'(),
+ ok = 'oe_reg_m12':'oe_unregister'(),
code:del_path(OutDir),
ok.
@@ -224,35 +220,28 @@ ifr_reg_unreg_with_inheritence_files() ->
%% are not allready registered when the current
%% object is getting registered.
%%-----------------------------------------------------------------
-ifr_reg_unreg_with_inheritence_bad_order(doc) ->
- ["This tests that ifr registration is done with
- the right write order."
- "Modules included and used from an ifr object"
- "are tested if allready registered when the "
- "current object is getting registered."];
-ifr_reg_unreg_with_inheritence_bad_order(suite) -> [];
ifr_reg_unreg_with_inheritence_bad_order(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_reg_unreg_with_inheritence_bad_order_run(Config)).
ifr_reg_unreg_with_inheritence_bad_order_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_reg_unreg),
File1 = filename:join(DataDir, reg_m9),
File2 = filename:join(DataDir, reg_m10),
File4 = filename:join(DataDir, reg_m12),
- ?line ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
+ ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
code:add_pathz(OutDir),
case catch 'oe_reg_m12':'oe_register'() of
{'EXIT',Reason1} ->
@@ -261,7 +250,7 @@ ifr_reg_unreg_with_inheritence_bad_order_run(Config) ->
_ ->
test_server:fail("Failed to detect object missing : IDL:M1:1.0~n")
end,
- ?line ok = 'oe_reg_m9':'oe_register'(),
+ ok = 'oe_reg_m9':'oe_register'(),
case catch 'oe_reg_m10':'oe_register'() of
{'EXIT',Reason2} ->
io:format("IFR object missing detected : ~p~n",[Reason2]),
@@ -269,75 +258,70 @@ ifr_reg_unreg_with_inheritence_bad_order_run(Config) ->
_ ->
test_server:fail("Failed to detect object missing : IDL:M0:1.0~n")
end,
- ?line ok = 'oe_reg_m9':'oe_unregister'(),
+ ok = 'oe_reg_m9':'oe_unregister'(),
code:del_path(OutDir),
ok.
-
-
%%-----------------------------------------------------------------
-%% Test Case: IFR registration with inheritence
+%% Test Case: IFR registration with inheritence is correctly registered
%%-----------------------------------------------------------------
-ifr_inheritence_reg(doc) ->
- ["Checks that IFR object inheritence is correctly registered."];
-ifr_inheritence_reg(suite) -> [];
ifr_inheritence_reg(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_inh_reg_run(Config)).
ifr_inh_reg_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_reg_unreg),
File0 = filename:join(DataDir, reg_m8),
File1 = filename:join(DataDir, reg_m9),
File2 = filename:join(DataDir, reg_m10),
File3 = filename:join(DataDir, reg_m11),
File4 = filename:join(DataDir, reg_m12),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File3, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File3, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
+ ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
code:add_pathz(OutDir),
%% OE_register for all files
- ?line ok = 'oe_reg_m8':'oe_register'(),
- ?line ok = 'oe_reg_m9':'oe_register'(),
- ?line ok = 'oe_reg_m10':'oe_register'(),
- ?line ok = 'oe_reg_m11':'oe_register'(),
- ?line ok = 'oe_reg_m12':'oe_register'(),
+ ok = 'oe_reg_m8':'oe_register'(),
+ ok = 'oe_reg_m9':'oe_register'(),
+ ok = 'oe_reg_m10':'oe_register'(),
+ ok = 'oe_reg_m11':'oe_register'(),
+ ok = 'oe_reg_m12':'oe_register'(),
%% Inheritence registration test
OE_IFR = orber_ifr:find_repository(),
%% Interfaces that not inherit from other interfaces
- ?line [] = get_inh(OE_IFR, "IDL:m0/i0:1.0"),
- ?line [] = get_inh(OE_IFR, "IDL:m1/i1:1.0"),
- ?line [] = get_inh(OE_IFR, "IDL:m3/i3:1.0"),
+ [] = get_inh(OE_IFR, "IDL:m0/i0:1.0"),
+ [] = get_inh(OE_IFR, "IDL:m1/i1:1.0"),
+ [] = get_inh(OE_IFR, "IDL:m3/i3:1.0"),
%% Interfaces that inherit from other interfaces
- ?line ["IDL:m1/i1:1.0"] = get_inh(OE_IFR, "IDL:m2/i2:1.0"),
- ?line ["IDL:m1/i1:1.0","IDL:m2/i2:1.0"] = get_inh(OE_IFR, "IDL:m4/i4:1.0"),
- ?line ["IDL:m3/i3:1.0"] = get_inh(OE_IFR, "IDL:m4/i5:1.0"),
+ ["IDL:m1/i1:1.0"] = get_inh(OE_IFR, "IDL:m2/i2:1.0"),
+ ["IDL:m1/i1:1.0","IDL:m2/i2:1.0"] = get_inh(OE_IFR, "IDL:m4/i4:1.0"),
+ ["IDL:m3/i3:1.0"] = get_inh(OE_IFR, "IDL:m4/i5:1.0"),
%% OE_unregister for all files
- ?line ok = 'oe_reg_m8':'oe_unregister'(),
- ?line ok = 'oe_reg_m9':'oe_unregister'(),
- ?line ok = 'oe_reg_m10':'oe_unregister'(),
- ?line ok = 'oe_reg_m11':'oe_unregister'(),
- ?line ok = 'oe_reg_m12':'oe_unregister'(),
+ ok = 'oe_reg_m8':'oe_unregister'(),
+ ok = 'oe_reg_m9':'oe_unregister'(),
+ ok = 'oe_reg_m10':'oe_unregister'(),
+ ok = 'oe_reg_m11':'oe_unregister'(),
+ ok = 'oe_reg_m12':'oe_unregister'(),
code:del_path(OutDir),
ok.
diff --git a/lib/ic/test/ic_register_SUITE_data/reg_m10.idl b/lib/ic/test/ic_register_SUITE_data/reg_m10.idl
index d673d8eba9..cc9156ae0c 100644
--- a/lib/ic/test/ic_register_SUITE_data/reg_m10.idl
+++ b/lib/ic/test/ic_register_SUITE_data/reg_m10.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_register_SUITE_data/reg_m11.idl b/lib/ic/test/ic_register_SUITE_data/reg_m11.idl
index 14ddaa9be1..6a6c49a48e 100644
--- a/lib/ic/test/ic_register_SUITE_data/reg_m11.idl
+++ b/lib/ic/test/ic_register_SUITE_data/reg_m11.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_register_SUITE_data/reg_m12.idl b/lib/ic/test/ic_register_SUITE_data/reg_m12.idl
index 7d81c18c25..0c5f8083b5 100644
--- a/lib/ic/test/ic_register_SUITE_data/reg_m12.idl
+++ b/lib/ic/test/ic_register_SUITE_data/reg_m12.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_register_SUITE_data/reg_m8.idl b/lib/ic/test/ic_register_SUITE_data/reg_m8.idl
index dc6d499cd0..5129b6b636 100644
--- a/lib/ic/test/ic_register_SUITE_data/reg_m8.idl
+++ b/lib/ic/test/ic_register_SUITE_data/reg_m8.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/ic_register_SUITE_data/reg_m9.idl b/lib/ic/test/ic_register_SUITE_data/reg_m9.idl
index 38fe06afcb..c077d289b6 100644
--- a/lib/ic/test/ic_register_SUITE_data/reg_m9.idl
+++ b/lib/ic/test/ic_register_SUITE_data/reg_m9.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1998-2010. All Rights Reserved.
+// Copyright Ericsson AB 1998-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/java_client_erl_server_SUITE.erl b/lib/ic/test/java_client_erl_server_SUITE.erl
index e95b3d5026..9fe52249ba 100644
--- a/lib/ic/test/java_client_erl_server_SUITE.erl
+++ b/lib/ic/test/java_client_erl_server_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
%%%----------------------------------------------------------------------
-module(java_client_erl_server_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
@@ -99,7 +99,7 @@ end_per_suite(Config) -> Config.
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i et,al, we have
@@ -115,9 +115,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
@@ -126,127 +126,104 @@ end_per_testcase(_Case, Config) ->
%%
%% Test cases
-marshal_ll(doc) ->
- ["Testing marshalling of IDL long long"];
-marshal_ll(suite) -> [];
+%% Testing marshalling of IDL long long
marshal_ll(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_ll}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_ll}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_ll]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_ull(doc) ->
- ["Testing marshalling of IDL unsigned long long"];
-marshal_ull(suite) -> [];
+%% Testing marshalling of IDL unsigned long long
marshal_ull(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_ull}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_ull}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_ull]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_l(doc) ->
- ["Testing marshalling of IDL long"];
-marshal_l(suite) -> [];
+%% Testing marshalling of IDL long
marshal_l(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_l}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_l}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_l]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_ul(doc) ->
- ["Testing marshalling of IDL unsigned long"];
-marshal_ul(suite) -> [];
+%% Testing marshalling of IDL unsigned long
marshal_ul(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_ul}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_ul}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_ul]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_s(doc) ->
- ["Testing marshalling of IDL short"];
-marshal_s(suite) -> [];
+%% Testing marshalling of IDL short
marshal_s(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_s}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_s}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_s]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_us(doc) ->
- ["Testing marshalling of IDL unsigned short"];
-marshal_us(suite) -> [];
+%% Testing marshalling of IDL unsigned short
marshal_us(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_us}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_us}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_us]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_c(doc) ->
- ["Testing marshalling of IDL char"];
-marshal_c(suite) -> [];
+%% Testing marshalling of IDL char
marshal_c(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_c}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_c}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_c]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_wc(doc) ->
- ["Testing marshalling of IDL char"];
-marshal_wc(suite) -> [];
+%% Testing marshalling of IDL char
marshal_wc(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_wc}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_wc}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_wc]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_str(doc) ->
- ["Testing marshalling of IDL string"];
-marshal_str(suite) -> [];
+%% Testing marshalling of IDL string
marshal_str(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_str}),
- ?line ok = java(?config(java, Config), DataDir,
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_str}),
+ ok = java(proplists:get_value(java, Config), DataDir,
%%% "-DOtpConnection.trace=4 "
"JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_str]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_any_3(doc) ->
- ["Testing marshalling of IDL any"];
-marshal_any_3(suite) -> [];
+%% Testing marshalling of IDL any
marshal_any_3(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_any_3}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_any_3}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_any_3]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_any_2(doc) ->
- ["Testing marshalling of IDL any"];
-marshal_any_2(suite) -> [];
marshal_any_2(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_any_2}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_any_2}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_any_2]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
%%--------------------------------------------------------------------
diff --git a/lib/ic/test/java_client_erl_server_SUITE_data/JavaClient.java b/lib/ic/test/java_client_erl_server_SUITE_data/JavaClient.java
index 586551dca8..8092d7c627 100644
--- a/lib/ic/test/java_client_erl_server_SUITE_data/JavaClient.java
+++ b/lib/ic/test/java_client_erl_server_SUITE_data/JavaClient.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2003-2011. All Rights Reserved.
+ * Copyright Ericsson AB 2003-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/java_client_erl_server_SUITE_data/Makefile.src b/lib/ic/test/java_client_erl_server_SUITE_data/Makefile.src
index 7d68e6c3ef..bcc59e87db 100644
--- a/lib/ic/test/java_client_erl_server_SUITE_data/Makefile.src
+++ b/lib/ic/test/java_client_erl_server_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2013. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/java_client_erl_server_SUITE_data/java_erl_test.idl b/lib/ic/test/java_client_erl_server_SUITE_data/java_erl_test.idl
index 57586d3735..55194cf911 100644
--- a/lib/ic/test/java_client_erl_server_SUITE_data/java_erl_test.idl
+++ b/lib/ic/test/java_client_erl_server_SUITE_data/java_erl_test.idl
@@ -2,7 +2,7 @@
// %CopyrightBegin%
//
-// Copyright Ericsson AB 2003-2010. All Rights Reserved.
+// Copyright Ericsson AB 2003-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/ic/test/java_client_erl_server_SUITE_data/m_i_impl.erl b/lib/ic/test/java_client_erl_server_SUITE_data/m_i_impl.erl
index 299f4f0a0f..31b4c1dd7a 100644
--- a/lib/ic/test/java_client_erl_server_SUITE_data/m_i_impl.erl
+++ b/lib/ic/test/java_client_erl_server_SUITE_data/m_i_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ic/vsn.mk b/lib/ic/vsn.mk
index 272c306799..7d00ae0170 100644
--- a/lib/ic/vsn.mk
+++ b/lib/ic/vsn.mk
@@ -1 +1 @@
-IC_VSN = 4.4
+IC_VSN = 4.4.1
diff --git a/lib/inets/Makefile b/lib/inets/Makefile
index 3fff719cf3..872df9d055 100644
--- a/lib/inets/Makefile
+++ b/lib/inets/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2011. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/doc/src/book.xml b/lib/inets/doc/src/book.xml
index 80db82ee45..29f0c6a6d8 100644
--- a/lib/inets/doc/src/book.xml
+++ b/lib/inets/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/ftp.xml b/lib/inets/doc/src/ftp.xml
index f64bc0e18b..42bece4d38 100644
--- a/lib/inets/doc/src/ftp.xml
+++ b/lib/inets/doc/src/ftp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/ftp_client.xml b/lib/inets/doc/src/ftp_client.xml
index 89e66db814..990dd68604 100644
--- a/lib/inets/doc/src/ftp_client.xml
+++ b/lib/inets/doc/src/ftp_client.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/http_client.xml b/lib/inets/doc/src/http_client.xml
index f4d7b751ac..212958f17f 100644
--- a/lib/inets/doc/src/http_client.xml
+++ b/lib/inets/doc/src/http_client.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/httpd_socket.xml b/lib/inets/doc/src/httpd_socket.xml
index f71dac90b2..d3aa82a540 100644
--- a/lib/inets/doc/src/httpd_socket.xml
+++ b/lib/inets/doc/src/httpd_socket.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/httpd_util.xml b/lib/inets/doc/src/httpd_util.xml
index 0f498ba2fc..220a2ede35 100644
--- a/lib/inets/doc/src/httpd_util.xml
+++ b/lib/inets/doc/src/httpd_util.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/inets.xml b/lib/inets/doc/src/inets.xml
index 5d071c9a48..137381cbe9 100644
--- a/lib/inets/doc/src/inets.xml
+++ b/lib/inets/doc/src/inets.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/inets_services.xml b/lib/inets/doc/src/inets_services.xml
index d100216ebb..da60c01aa2 100644
--- a/lib/inets/doc/src/inets_services.xml
+++ b/lib/inets/doc/src/inets_services.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/introduction.xml b/lib/inets/doc/src/introduction.xml
index 491835f852..1af2ef5dae 100644
--- a/lib/inets/doc/src/introduction.xml
+++ b/lib/inets/doc/src/introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/mod_alias.xml b/lib/inets/doc/src/mod_alias.xml
index 87c950cc6b..6ae19700a5 100644
--- a/lib/inets/doc/src/mod_alias.xml
+++ b/lib/inets/doc/src/mod_alias.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/mod_auth.xml b/lib/inets/doc/src/mod_auth.xml
index 2da2be37ed..4b7088b2c5 100644
--- a/lib/inets/doc/src/mod_auth.xml
+++ b/lib/inets/doc/src/mod_auth.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/mod_esi.xml b/lib/inets/doc/src/mod_esi.xml
index c2fb60c416..8279fdc824 100644
--- a/lib/inets/doc/src/mod_esi.xml
+++ b/lib/inets/doc/src/mod_esi.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -42,8 +42,7 @@
<taglist>
<tag><c>env() = </c></tag>
<item> <p><c>{EnvKey()::atom(), Value::term()}</c></p>
- </item>
-
+
<p>Currently supported key value pairs</p>
<taglist>
@@ -59,11 +58,12 @@
<tag><c>{server_protocol, string()}</c></tag>
<item><p> HTTP version, currently "HTTP/1.1"</p></item>
- <tag>{server_port, integer()}</tag>
+ <tag><c>{server_port, integer()}</c></tag>
<item><p>Servers port number.</p></item>
<tag><c>{request_method, "GET | "PUT" | "DELETE | "POST" | "PATCH"}</c></tag>
-
+ <item><p>HTTP request method.</p></item>
+
<tag><c>{remote_adress, inet:ip_address()} </c></tag>
<item><p>The clients ip address.</p></item>
@@ -81,94 +81,97 @@
<tag><c>{http_LowerCaseHTTPHeaderName, string()}</c></tag>
<item><p>example: {http_content_type, "text/html"}</p></item>
- </taglist>
-
+ </taglist>
+ </item>
</taglist>
+ </section>
- <funcs>
- <func>
- <name>deliver(SessionID, Data) -> ok | {error, Reason}</name>
- <fsummary>Sends <c>Data</c> back to client.</fsummary>
- <type>
+ <funcs>
+ <func>
+ <name>deliver(SessionID, Data) -> ok | {error, Reason}</name>
+ <fsummary>Sends <c>Data</c> back to client.</fsummary>
+ <type>
<v>SessionID = term()</v>
<v>Data = string() | io_list() | binary()</v>
<v>Reason = term()</v>
- </type>
- <desc>
- <marker id="deliver"></marker>
- <p>This function is <em>only</em> intended to be used from
- functions called by the Erl Scheme interface to deliver
- parts of the content to the user.</p>
- <p>Sends data from an Erl Scheme script back to the client.</p>
+ </type>
+ <desc>
+ <marker id="deliver"></marker>
+ <p>This function is <em>only</em> intended to be used from
+ functions called by the Erl Scheme interface to deliver
+ parts of the content to the user.</p>
+ <p>Sends data from an Erl Scheme script back to the client.</p>
- <note>
- <p>If any HTTP header fields are added by the
- script, they must be in the first call to <c>deliver/2</c>,
- and the data in the call must be a string. Calls after the headers
- are complete can contain binary data to reduce copying
- overhead. Do not assume anything about the data type of
- <c>SessionID</c>. <c>SessionID</c> must be the value given
- as input to the ESI callback function that you implemented.</p>
- </note>
- </desc>
- </func>
- </funcs>
- </section>
- <section>
- <title>ESI Callback Functions</title>
- </section>
- <funcs>
- <func>
- <name>Module:Function(SessionID, Env, Input)-> _ </name>
- <fsummary>Creates a dynamic web page and returns it chunk by chunk
- to the server process by calling <c>mod_esi:deliver/2</c>.</fsummary>
- <type>
- <v>SessionID = term()</v>
- <v>Env = env()</v>
- <v>Input = string()</v>
- </type>
+ <note>
+ <p>If any HTTP header fields are added by the
+ script, they must be in the first call to <c>deliver/2</c>,
+ and the data in the call must be a string. Calls after the headers
+ are complete can contain binary data to reduce copying
+ overhead. Do not assume anything about the data type of
+ <c>SessionID</c>. <c>SessionID</c> must be the value given
+ as input to the ESI callback function that you implemented.</p>
+ </note>
+ </desc>
+ </func>
+ </funcs>
+
+ <section>
+ <title>ESI Callback Functions</title>
+ </section>
+
+ <funcs>
+ <func>
+ <name>Module:Function(SessionID, Env, Input)-> _ </name>
+ <fsummary>Creates a dynamic web page and returns it chunk by chunk
+ to the server process by calling <c>mod_esi:deliver/2</c>.</fsummary>
+ <type>
+ <v>SessionID = term()</v>
+ <v>Env = env()</v>
+ <v>Input = string()</v>
+ </type>
<desc>
<p><c>Module</c> must be found in the code path and export
- <c>Function</c> with an arity of three. An <c>erlScriptAlias</c> must
- also be set up in the configuration file for the web server.</p>
+ <c>Function</c> with an arity of three. An <c>erlScriptAlias</c> must
+ also be set up in the configuration file for the web server.</p>
<p>If the HTTP request is a 'post' request and a body is sent,
- <c>content_length</c> is the length of the posted
- data. If 'get' is used, <c>query_string</c> is the data after
- <em>?</em> in the URL.</p>
+ <c>content_length</c> is the length of the posted
+ data. If 'get' is used, <c>query_string</c> is the data after
+ <em>?</em> in the URL.</p>
<p><c>ParsedHeader</c> is the HTTP request as a key-value tuple
- list. The keys in <c>ParsedHeader</c> are in lower case.</p>
+ list. The keys in <c>ParsedHeader</c> are in lower case.</p>
<p><c>SessionID</c> is an identifier
- the server uses when <c>deliver/2</c> is called. Do not
- assume anything about the datatype.</p>
+ the server uses when <c>deliver/2</c> is called. Do not
+ assume anything about the datatype.</p>
<p>Use this callback function to generate dynamic web
- content dynamically. When a part of the page is generated, send the
- data back to the client through <c>deliver/2</c>. Notice
- that the first chunk of data sent to the client must at
- least contain all HTTP header fields that the response
- will generate. If the first chunk does not contain the
- <em>end of HTTP header</em>, that is, <c>"\r\n\r\n",</c>
- the server assumes that no HTTP header fields will be generated.</p>
+ content dynamically. When a part of the page is generated, send the
+ data back to the client through <c>deliver/2</c>. Notice
+ that the first chunk of data sent to the client must at
+ least contain all HTTP header fields that the response
+ will generate. If the first chunk does not contain the
+ <em>end of HTTP header</em>, that is, <c>"\r\n\r\n",</c>
+ the server assumes that no HTTP header fields will be generated.</p>
</desc>
- </func>
- <func>
- <name>Module:Function(Env, Input)-> Response </name>
- <fsummary>Creates a dynamic web page and returns it as a list.
- This function is deprecated and is only kept for backwards compatibility.</fsummary>
- <type>
- <v>Env = env()</v>
- <v>Input = string()</v>
- <v>Response = string()</v>
- </type>
+ </func>
+
+ <func>
+ <name>Module:Function(Env, Input)-> Response </name>
+ <fsummary>Creates a dynamic web page and returns it as a list.
+ This function is deprecated and is only kept for backwards compatibility.</fsummary>
+ <type>
+ <v>Env = env()</v>
+ <v>Input = string()</v>
+ <v>Response = string()</v>
+ </type>
<desc>
<p>This callback format consumes much memory, as the
- whole response must be generated before it is sent to the
- user. This function is deprecated and is only kept for backwards
- compatibility.
- For new development, use <c>Module:Function/3</c>.</p>
+ whole response must be generated before it is sent to the
+ user. This function is deprecated and is only kept for backwards
+ compatibility.
+ For new development, use <c>Module:Function/3</c>.</p>
</desc>
- </func>
- </funcs>
-
+ </func>
+ </funcs>
+
</erlref>
diff --git a/lib/inets/doc/src/mod_security.xml b/lib/inets/doc/src/mod_security.xml
index 9dc32b971b..ec8d6ec42c 100644
--- a/lib/inets/doc/src/mod_security.xml
+++ b/lib/inets/doc/src/mod_security.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/notes.xml b/lib/inets/doc/src/notes.xml
index 6593be02dc..2f071f049f 100644
--- a/lib/inets/doc/src/notes.xml
+++ b/lib/inets/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2015</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,7 +33,75 @@
<file>notes.xml</file>
</header>
- <section><title>Inets 6.2.4</title>
+ <section><title>Inets 6.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A debug message was accidently left enabled in the ftp
+ client.</p>
+ <p>
+ Own Id: OTP-13712 Aux Id: seq13143 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 6.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Ftp client fixes: 1) Corrected a bug that the ftp client
+ gen_server crashed if the listening data socket was
+ closed.</p>
+ <p>
+ 2) Corrections of ftp client error codes so they are as
+ defined in the reference manual</p>
+ <p>
+ Own Id: OTP-13644</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Remove usage of erlang:now(). </p>
+ <p>
+ Own Id: OTP-12441</p>
+ </item>
+ <item>
+ <p> Add handling of DELETE Body to http client. </p>
+ <p>
+ Own Id: OTP-13383 Aux Id: PR-972 </p>
+ </item>
+ <item>
+ <p>
+ Removed references to mod_include and webtool from
+ examples and tests.</p>
+ <p>
+ Own Id: OTP-13445 Aux Id: PR-988 </p>
+ </item>
+ <item>
+ <p>
+ Remove module inets_regexp. Module re should be used
+ instead.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13561</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 6.2.4</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/inets/doc/src/notes_history.xml b/lib/inets/doc/src/notes_history.xml
index 411c62b7f1..c12899e614 100644
--- a/lib/inets/doc/src/notes_history.xml
+++ b/lib/inets/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/part.xml b/lib/inets/doc/src/part.xml
index 3b817eecf2..f777481b5c 100644
--- a/lib/inets/doc/src/part.xml
+++ b/lib/inets/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/part_notes.xml b/lib/inets/doc/src/part_notes.xml
index 702e3dc09c..d10c829f4a 100644
--- a/lib/inets/doc/src/part_notes.xml
+++ b/lib/inets/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/doc/src/part_notes_history.xml b/lib/inets/doc/src/part_notes_history.xml
index 56c44c9e9e..66e3307f69 100644
--- a/lib/inets/doc/src/part_notes_history.xml
+++ b/lib/inets/doc/src/part_notes_history.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/inets/examples/Makefile b/lib/inets/examples/Makefile
index 9a852cf023..7892185bd4 100644
--- a/lib/inets/examples/Makefile
+++ b/lib/inets/examples/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/Makefile b/lib/inets/examples/httpd_load_test/Makefile
index aab62e7305..8b1b654593 100644
--- a/lib/inets/examples/httpd_load_test/Makefile
+++ b/lib/inets/examples/httpd_load_test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2012. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/hdlt.erl b/lib/inets/examples/httpd_load_test/hdlt.erl
index ae12606bb2..f4b81c8102 100644
--- a/lib/inets/examples/httpd_load_test/hdlt.erl
+++ b/lib/inets/examples/httpd_load_test/hdlt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/hdlt.sh.skel b/lib/inets/examples/httpd_load_test/hdlt.sh.skel
index 537a555e50..1797a53d1d 100644
--- a/lib/inets/examples/httpd_load_test/hdlt.sh.skel
+++ b/lib/inets/examples/httpd_load_test/hdlt.sh.skel
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/hdlt_client.erl b/lib/inets/examples/httpd_load_test/hdlt_client.erl
index a6273a11b8..8e929fbf2b 100644
--- a/lib/inets/examples/httpd_load_test/hdlt_client.erl
+++ b/lib/inets/examples/httpd_load_test/hdlt_client.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/hdlt_ctrl.erl b/lib/inets/examples/httpd_load_test/hdlt_ctrl.erl
index 880ce99e72..fcf5b4505f 100644
--- a/lib/inets/examples/httpd_load_test/hdlt_ctrl.erl
+++ b/lib/inets/examples/httpd_load_test/hdlt_ctrl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/hdlt_logger.erl b/lib/inets/examples/httpd_load_test/hdlt_logger.erl
index e444030d7f..29fbaab3ae 100644
--- a/lib/inets/examples/httpd_load_test/hdlt_logger.erl
+++ b/lib/inets/examples/httpd_load_test/hdlt_logger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/hdlt_logger.hrl b/lib/inets/examples/httpd_load_test/hdlt_logger.hrl
index 240add0147..ac03df2e22 100644
--- a/lib/inets/examples/httpd_load_test/hdlt_logger.hrl
+++ b/lib/inets/examples/httpd_load_test/hdlt_logger.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/hdlt_server.erl b/lib/inets/examples/httpd_load_test/hdlt_server.erl
index dde09a46df..cd454c82cd 100644
--- a/lib/inets/examples/httpd_load_test/hdlt_server.erl
+++ b/lib/inets/examples/httpd_load_test/hdlt_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/hdlt_slave.erl b/lib/inets/examples/httpd_load_test/hdlt_slave.erl
index f05a1046d3..5ee005629d 100644
--- a/lib/inets/examples/httpd_load_test/hdlt_slave.erl
+++ b/lib/inets/examples/httpd_load_test/hdlt_slave.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/httpd_load_test/modules.mk b/lib/inets/examples/httpd_load_test/modules.mk
index 3349664230..80974819e9 100644
--- a/lib/inets/examples/httpd_load_test/modules.mk
+++ b/lib/inets/examples/httpd_load_test/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/server_root/Makefile b/lib/inets/examples/server_root/Makefile
index 45118aeae0..d11389f0a7 100644
--- a/lib/inets/examples/server_root/Makefile
+++ b/lib/inets/examples/server_root/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/examples/server_root/conf/8080.conf b/lib/inets/examples/server_root/conf/8080.conf
index 48e66f0114..7b1b4a15b2 100644
--- a/lib/inets/examples/server_root/conf/8080.conf
+++ b/lib/inets/examples/server_root/conf/8080.conf
@@ -1,7 +1,7 @@
Port 8080
#ServerName your.server.net
SocketType ip_comm
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8080
diff --git a/lib/inets/examples/server_root/conf/8888.conf b/lib/inets/examples/server_root/conf/8888.conf
index 79bb7fcca4..042779fcd0 100644
--- a/lib/inets/examples/server_root/conf/8888.conf
+++ b/lib/inets/examples/server_root/conf/8888.conf
@@ -1,7 +1,7 @@
Port 8888
#ServerName your.server.net
SocketType ip_comm
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8888
diff --git a/lib/inets/examples/server_root/conf/httpd.conf b/lib/inets/examples/server_root/conf/httpd.conf
index f99563d14b..3f9fde03b5 100644
--- a/lib/inets/examples/server_root/conf/httpd.conf
+++ b/lib/inets/examples/server_root/conf/httpd.conf
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -64,7 +64,7 @@ SocketType ip_comm
# WARNING! Do not tamper with this directive unless you are familiar with
# EWSAPI.
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_responsecontrol mod_trace mod_range mod_head mod_include mod_dir mod_get mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_responsecontrol mod_trace mod_range mod_head mod_dir mod_get mod_log mod_disk_log
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.
diff --git a/lib/inets/examples/server_root/conf/ssl.conf b/lib/inets/examples/server_root/conf/ssl.conf
index 8b8c57a98b..de49ceafd0 100644
--- a/lib/inets/examples/server_root/conf/ssl.conf
+++ b/lib/inets/examples/server_root/conf/ssl.conf
@@ -1,7 +1,7 @@
Port 8088
#ServerName your.server.net
SocketType ssl
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8088
diff --git a/lib/inets/include/httpd.hrl b/lib/inets/include/httpd.hrl
index 8d2803ad3b..fb338d5c68 100644
--- a/lib/inets/include/httpd.hrl
+++ b/lib/inets/include/httpd.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/include/mod_auth.hrl b/lib/inets/include/mod_auth.hrl
index bd3577b9ee..224b2edb5e 100644
--- a/lib/inets/include/mod_auth.hrl
+++ b/lib/inets/include/mod_auth.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/priv/Makefile b/lib/inets/priv/Makefile
index b0e65f8f9c..ddd35e8625 100644
--- a/lib/inets/priv/Makefile
+++ b/lib/inets/priv/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/Makefile b/lib/inets/src/Makefile
index a2a70a7b8f..281dd388cb 100644
--- a/lib/inets/src/Makefile
+++ b/lib/inets/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/ftp/Makefile b/lib/inets/src/ftp/Makefile
index f8daa2b894..6b99694ea7 100644
--- a/lib/inets/src/ftp/Makefile
+++ b/lib/inets/src/ftp/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2012. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/ftp/ftp.erl b/lib/inets/src/ftp/ftp.erl
index db6260c7af..8bad91bf98 100644
--- a/lib/inets/src/ftp/ftp.erl
+++ b/lib/inets/src/ftp/ftp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1383,12 +1383,18 @@ handle_call({_, {transfer_chunk, Bin}}, _, #state{chunk = true} = State) ->
send_data_message(State, Bin),
{reply, ok, State};
+handle_call({_, {transfer_chunk, _}}, _, #state{chunk = false} = State) ->
+ {reply, {error, echunk}, State};
+
handle_call({_, chunk_end}, From, #state{chunk = true} = State) ->
close_data_connection(State),
activate_ctrl_connection(State),
{noreply, State#state{client = From, dsock = undefined,
caller = end_chunk_transfer, chunk = false}};
+handle_call({_, chunk_end}, _, #state{chunk = false} = State) ->
+ {reply, {error, echunk}, State};
+
handle_call({_, {quote, Cmd}}, From, #state{chunk = false} = State) ->
send_ctrl_message(State, mk_cmd(Cmd, [])),
activate_ctrl_connection(State),
@@ -1769,12 +1775,12 @@ handle_ctrl_result({pos_compl, _Lines},
{LSock, Caller}}} = State) ->
handle_caller(State#state{caller = Caller, dsock = {lsock, LSock}});
-handle_ctrl_result({Status, Lines},
+handle_ctrl_result({Status, _Lines},
#state{mode = active,
caller = {setup_data_connection, {LSock, _}}}
= State) ->
- close_connection(LSock),
- ctrl_result_response(Status, State, {error, Lines});
+ close_connection({tcp,LSock}),
+ ctrl_result_response(Status, State, {error, Status});
%% Data connection setup passive mode
handle_ctrl_result({pos_compl, Lines},
@@ -1965,7 +1971,7 @@ handle_ctrl_result(_, #state{caller = {handle_dir_data_third_phase, DirData},
{noreply, State#state{client = undefined, caller = undefined}};
handle_ctrl_result({Status, _}, #state{caller = cd} = State) ->
- ctrl_result_response(Status, State, {error, epath});
+ ctrl_result_response(Status, State, {error, Status});
handle_ctrl_result(Status={epath, _}, #state{caller = {dir,_}} = State) ->
ctrl_result_response(Status, State, {error, epath});
@@ -1980,11 +1986,11 @@ handle_ctrl_result({pos_interm, _}, #state{caller = {rename, NewFile}}
handle_ctrl_result({Status, _},
#state{caller = {rename, _}} = State) ->
- ctrl_result_response(Status, State, {error, epath});
+ ctrl_result_response(Status, State, {error, Status});
handle_ctrl_result({Status, _},
#state{caller = rename_second_phase} = State) ->
- ctrl_result_response(Status, State, {error, epath});
+ ctrl_result_response(Status, State, {error, Status});
%%--------------------------------------------------------------------------
%% File handling - recv_bin
@@ -2093,9 +2099,9 @@ handle_ctrl_result({pos_prel, _}, #state{caller = {transfer_data, Bin}}
%%--------------------------------------------------------------------------
%% Default
-handle_ctrl_result({Status, Lines}, #state{client = From} = State)
+handle_ctrl_result({Status, _Lines}, #state{client = From} = State)
when From =/= undefined ->
- ctrl_result_response(Status, State, {error, Lines}).
+ ctrl_result_response(Status, State, {error, Status}).
%%--------------------------------------------------------------------------
%% Help functions to handle_ctrl_result
@@ -2113,7 +2119,6 @@ ctrl_result_response(Status, #state{client = From} = State, _)
(Status =:= epnospc) orelse
(Status =:= efnamena) orelse
(Status =:= econn) ->
-%Status == etnospc; Status == epnospc; Status == econn ->
gen_server:reply(From, {error, Status}),
%% {stop, normal, {error, Status}, State#state{client = undefined}};
{stop, normal, State#state{client = undefined}};
@@ -2177,7 +2182,7 @@ handle_caller(#state{caller = {transfer_data, {Cmd, Bin, RemoteFile}}} =
%% Connect to FTP server at Host (default is TCP port 21)
%% in order to establish a control connection.
setup_ctrl_connection(Host, Port, Timeout, State) ->
- MsTime = inets_time_compat:monotonic_time(),
+ MsTime = erlang:monotonic_time(),
case connect(Host, Port, Timeout, State) of
{ok, IpFam, CSock} ->
NewState = State#state{csock = {tcp, CSock}, ipfamily = IpFam},
@@ -2378,6 +2383,7 @@ close_ctrl_connection(#state{csock = Socket}) -> close_connection(Socket).
close_data_connection(#state{dsock = undefined}) -> ok;
close_data_connection(#state{dsock = Socket}) -> close_connection(Socket).
+close_connection({lsock,Socket}) -> gen_tcp:close(Socket);
close_connection({tcp, Socket}) -> gen_tcp:close(Socket);
close_connection({ssl, Socket}) -> ssl:close(Socket).
diff --git a/lib/inets/src/ftp/ftp_internal.hrl b/lib/inets/src/ftp/ftp_internal.hrl
index a6c9fa098a..f29bb4a099 100644
--- a/lib/inets/src/ftp/ftp_internal.hrl
+++ b/lib/inets/src/ftp/ftp_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/ftp/ftp_progress.erl b/lib/inets/src/ftp/ftp_progress.erl
index 9c42723a07..68185a222d 100644
--- a/lib/inets/src/ftp/ftp_progress.erl
+++ b/lib/inets/src/ftp/ftp_progress.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/ftp/ftp_response.erl b/lib/inets/src/ftp/ftp_response.erl
index 0aac15ef6c..7533bc4550 100644
--- a/lib/inets/src/ftp/ftp_response.erl
+++ b/lib/inets/src/ftp/ftp_response.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -194,5 +194,6 @@ interpret_status(?TRANS_NEG_COMPL,_,_) -> trans_neg_compl;
interpret_status(?PERM_NEG_COMPL,?FILE_SYSTEM,0) -> epath;
interpret_status(?PERM_NEG_COMPL,?FILE_SYSTEM,2) -> epnospc;
interpret_status(?PERM_NEG_COMPL,?FILE_SYSTEM,3) -> efnamena;
+interpret_status(?PERM_NEG_COMPL,?AUTH_ACC,0) -> elogin;
interpret_status(?PERM_NEG_COMPL,_,_) -> perm_neg_compl.
diff --git a/lib/inets/src/ftp/ftp_sup.erl b/lib/inets/src/ftp/ftp_sup.erl
index b5b3f6a105..21dcfb6ab2 100644
--- a/lib/inets/src/ftp/ftp_sup.erl
+++ b/lib/inets/src/ftp/ftp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/Makefile b/lib/inets/src/http_client/Makefile
index cb97b525f6..a1c1f36b70 100644
--- a/lib/inets/src/http_client/Makefile
+++ b/lib/inets/src/http_client/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2012. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/httpc.erl b/lib/inets/src/http_client/httpc.erl
index 4554881d79..91d87289a2 100644
--- a/lib/inets/src/http_client/httpc.erl
+++ b/lib/inets/src/http_client/httpc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/httpc_cookie.erl b/lib/inets/src/http_client/httpc_cookie.erl
index 0c4f44a575..cbf428ab3e 100644
--- a/lib/inets/src/http_client/httpc_cookie.erl
+++ b/lib/inets/src/http_client/httpc_cookie.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/httpc_handler_sup.erl b/lib/inets/src/http_client/httpc_handler_sup.erl
index 403512fc25..ad70afe2ae 100644
--- a/lib/inets/src/http_client/httpc_handler_sup.erl
+++ b/lib/inets/src/http_client/httpc_handler_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/httpc_internal.hrl b/lib/inets/src/http_client/httpc_internal.hrl
index bb8c0e20fa..f4e69cc1fa 100644
--- a/lib/inets/src/http_client/httpc_internal.hrl
+++ b/lib/inets/src/http_client/httpc_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/httpc_manager.erl b/lib/inets/src/http_client/httpc_manager.erl
index c7974836c2..4cb6f005ad 100644
--- a/lib/inets/src/http_client/httpc_manager.erl
+++ b/lib/inets/src/http_client/httpc_manager.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/httpc_profile_sup.erl b/lib/inets/src/http_client/httpc_profile_sup.erl
index b83aeaa4e0..334f2eb1c7 100644
--- a/lib/inets/src/http_client/httpc_profile_sup.erl
+++ b/lib/inets/src/http_client/httpc_profile_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/httpc_request.erl b/lib/inets/src/http_client/httpc_request.erl
index af4c3f75f2..e8d020c165 100644
--- a/lib/inets/src/http_client/httpc_request.erl
+++ b/lib/inets/src/http_client/httpc_request.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -186,16 +186,19 @@ is_client_closing(Headers) ->
%%%========================================================================
%%% Internal functions
%%%========================================================================
-post_data(Method, Headers, {ContentType, Body}, HeadersAsIs)
- when (Method =:= post) orelse (Method =:= put)
- orelse (Method =:= patch) ->
+post_data(Method, Headers, {ContentType, Body}, HeadersAsIs)
+ when (Method =:= post)
+ orelse (Method =:= put)
+ orelse (Method =:= patch)
+ orelse (Method =:= delete) ->
+
NewBody = case Headers#http_request_h.expect of
- "100-continue" ->
- "";
- _ ->
- Body
- end,
-
+ "100-continue" ->
+ "";
+ _ ->
+ Body
+ end,
+
NewHeaders = case HeadersAsIs of
[] ->
Headers#http_request_h{
@@ -213,7 +216,7 @@ post_data(Method, Headers, {ContentType, Body}, HeadersAsIs)
_ ->
HeadersAsIs
end,
-
+
{NewHeaders, NewBody};
post_data(_, Headers, _, []) ->
diff --git a/lib/inets/src/http_client/httpc_response.erl b/lib/inets/src/http_client/httpc_response.erl
index 4bf2ba2b9b..91256fa6a2 100644
--- a/lib/inets/src/http_client/httpc_response.erl
+++ b/lib/inets/src/http_client/httpc_response.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_client/httpc_sup.erl b/lib/inets/src/http_client/httpc_sup.erl
index 2b2ee0f34a..b2d944c834 100644
--- a/lib/inets/src/http_client/httpc_sup.erl
+++ b/lib/inets/src/http_client/httpc_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_lib/Makefile b/lib/inets/src/http_lib/Makefile
index 4a4eef9f24..8248e37c44 100644
--- a/lib/inets/src/http_lib/Makefile
+++ b/lib/inets/src/http_lib/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2012. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_lib/http_chunk.erl b/lib/inets/src/http_lib/http_chunk.erl
index 7325f24809..742d634577 100644
--- a/lib/inets/src/http_lib/http_chunk.erl
+++ b/lib/inets/src/http_lib/http_chunk.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_lib/http_response.erl b/lib/inets/src/http_lib/http_response.erl
index 42e5dd263d..cbdea82523 100644
--- a/lib/inets/src/http_lib/http_response.erl
+++ b/lib/inets/src/http_lib/http_response.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_lib/http_transport.erl b/lib/inets/src/http_lib/http_transport.erl
index ab6afe9c6c..2e3e099e5b 100644
--- a/lib/inets/src/http_lib/http_transport.erl
+++ b/lib/inets/src/http_lib/http_transport.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_lib/http_uri.erl b/lib/inets/src/http_lib/http_uri.erl
index 9940136f5a..cb3e107ccf 100644
--- a/lib/inets/src/http_lib/http_uri.erl
+++ b/lib/inets/src/http_lib/http_uri.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_lib/http_util.erl b/lib/inets/src/http_lib/http_util.erl
index aafa97afee..20c342dd66 100644
--- a/lib/inets/src/http_lib/http_util.erl
+++ b/lib/inets/src/http_lib/http_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd.erl b/lib/inets/src/http_server/httpd.erl
index e6377b4882..0b632d24e3 100644
--- a/lib/inets/src/http_server/httpd.erl
+++ b/lib/inets/src/http_server/httpd.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd.hrl b/lib/inets/src/http_server/httpd.hrl
index 29dc45f93a..751264ae0a 100644
--- a/lib/inets/src/http_server/httpd.hrl
+++ b/lib/inets/src/http_server/httpd.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_acceptor.erl b/lib/inets/src/http_server/httpd_acceptor.erl
index adccaf3b69..447faec12f 100644
--- a/lib/inets/src/http_server/httpd_acceptor.erl
+++ b/lib/inets/src/http_server/httpd_acceptor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_acceptor_sup.erl b/lib/inets/src/http_server/httpd_acceptor_sup.erl
index 172498df8b..09d81a66d0 100644
--- a/lib/inets/src/http_server/httpd_acceptor_sup.erl
+++ b/lib/inets/src/http_server/httpd_acceptor_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_cgi.erl b/lib/inets/src/http_server/httpd_cgi.erl
index fb5feb5fbe..583c0be985 100644
--- a/lib/inets/src/http_server/httpd_cgi.erl
+++ b/lib/inets/src/http_server/httpd_cgi.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_conf.erl b/lib/inets/src/http_server/httpd_conf.erl
index 132e1b5b7a..e5182ca23c 100644
--- a/lib/inets/src/http_server/httpd_conf.erl
+++ b/lib/inets/src/http_server/httpd_conf.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_connection_sup.erl b/lib/inets/src/http_server/httpd_connection_sup.erl
index 939aa5366b..f7b3bef245 100644
--- a/lib/inets/src/http_server/httpd_connection_sup.erl
+++ b/lib/inets/src/http_server/httpd_connection_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_esi.erl b/lib/inets/src/http_server/httpd_esi.erl
index a925fac217..9406b47802 100644
--- a/lib/inets/src/http_server/httpd_esi.erl
+++ b/lib/inets/src/http_server/httpd_esi.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_example.erl b/lib/inets/src/http_server/httpd_example.erl
index ad29b5b29a..424d269859 100644
--- a/lib/inets/src/http_server/httpd_example.erl
+++ b/lib/inets/src/http_server/httpd_example.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_file.erl b/lib/inets/src/http_server/httpd_file.erl
index 5ada71ad76..4d419172d0 100644
--- a/lib/inets/src/http_server/httpd_file.erl
+++ b/lib/inets/src/http_server/httpd_file.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_instance_sup.erl b/lib/inets/src/http_server/httpd_instance_sup.erl
index 079cc464ba..b77aa174ca 100644
--- a/lib/inets/src/http_server/httpd_instance_sup.erl
+++ b/lib/inets/src/http_server/httpd_instance_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_internal.hrl b/lib/inets/src/http_server/httpd_internal.hrl
index 79b53668ad..09d720ee85 100644
--- a/lib/inets/src/http_server/httpd_internal.hrl
+++ b/lib/inets/src/http_server/httpd_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_log.erl b/lib/inets/src/http_server/httpd_log.erl
index 0bad759774..56a08cd502 100644
--- a/lib/inets/src/http_server/httpd_log.erl
+++ b/lib/inets/src/http_server/httpd_log.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_manager.erl b/lib/inets/src/http_server/httpd_manager.erl
index 763ddae524..7cb39937e8 100644
--- a/lib/inets/src/http_server/httpd_manager.erl
+++ b/lib/inets/src/http_server/httpd_manager.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_misc_sup.erl b/lib/inets/src/http_server/httpd_misc_sup.erl
index 114a3c746f..cac9315c27 100644
--- a/lib/inets/src/http_server/httpd_misc_sup.erl
+++ b/lib/inets/src/http_server/httpd_misc_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_request_handler.erl b/lib/inets/src/http_server/httpd_request_handler.erl
index 8fae9ac46e..071fa94ef6 100644
--- a/lib/inets/src/http_server/httpd_request_handler.erl
+++ b/lib/inets/src/http_server/httpd_request_handler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_response.erl b/lib/inets/src/http_server/httpd_response.erl
index c0b5f09faf..1374b7e85e 100644
--- a/lib/inets/src/http_server/httpd_response.erl
+++ b/lib/inets/src/http_server/httpd_response.erl
@@ -390,8 +390,7 @@ send_response_old(#mod{socket_type = Type,
send_header(ModData, StatusCode, [{content_length,
content_length(NewResponse)}]),
httpd_socket:deliver(Type, Sock, NewResponse);
-
- {error, _Reason} ->
+ _ ->
send_status(ModData, 500, "Internal Server Error")
end.
diff --git a/lib/inets/src/http_server/httpd_script_env.erl b/lib/inets/src/http_server/httpd_script_env.erl
index 1c5d828b46..e15613273e 100644
--- a/lib/inets/src/http_server/httpd_script_env.erl
+++ b/lib/inets/src/http_server/httpd_script_env.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_socket.erl b/lib/inets/src/http_server/httpd_socket.erl
index b7b232a686..aa67c13621 100644
--- a/lib/inets/src/http_server/httpd_socket.erl
+++ b/lib/inets/src/http_server/httpd_socket.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_sup.erl b/lib/inets/src/http_server/httpd_sup.erl
index bf40cedd5c..d1216e01b0 100644
--- a/lib/inets/src/http_server/httpd_sup.erl
+++ b/lib/inets/src/http_server/httpd_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/httpd_util.erl b/lib/inets/src/http_server/httpd_util.erl
index 6dd6db6a0c..a647f04ddc 100644
--- a/lib/inets/src/http_server/httpd_util.erl
+++ b/lib/inets/src/http_server/httpd_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_actions.erl b/lib/inets/src/http_server/mod_actions.erl
index 154fde294e..b5449f20ee 100644
--- a/lib/inets/src/http_server/mod_actions.erl
+++ b/lib/inets/src/http_server/mod_actions.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_alias.erl b/lib/inets/src/http_server/mod_alias.erl
index 727f6e0ce3..0333076546 100644
--- a/lib/inets/src/http_server/mod_alias.erl
+++ b/lib/inets/src/http_server/mod_alias.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_auth.erl b/lib/inets/src/http_server/mod_auth.erl
index b03629cabe..fba94df176 100644
--- a/lib/inets/src/http_server/mod_auth.erl
+++ b/lib/inets/src/http_server/mod_auth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_auth.hrl b/lib/inets/src/http_server/mod_auth.hrl
index 88554a64ed..dd7794c78c 100644
--- a/lib/inets/src/http_server/mod_auth.hrl
+++ b/lib/inets/src/http_server/mod_auth.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_auth_dets.erl b/lib/inets/src/http_server/mod_auth_dets.erl
index 95a2cdd669..9f95b2ca2d 100644
--- a/lib/inets/src/http_server/mod_auth_dets.erl
+++ b/lib/inets/src/http_server/mod_auth_dets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_auth_mnesia.erl b/lib/inets/src/http_server/mod_auth_mnesia.erl
index 994f25a462..62acc554d4 100644
--- a/lib/inets/src/http_server/mod_auth_mnesia.erl
+++ b/lib/inets/src/http_server/mod_auth_mnesia.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_auth_plain.erl b/lib/inets/src/http_server/mod_auth_plain.erl
index 1a3120e03c..f2b0dfd71f 100644
--- a/lib/inets/src/http_server/mod_auth_plain.erl
+++ b/lib/inets/src/http_server/mod_auth_plain.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_auth_server.erl b/lib/inets/src/http_server/mod_auth_server.erl
index 7d1e1a3431..93d8145821 100644
--- a/lib/inets/src/http_server/mod_auth_server.erl
+++ b/lib/inets/src/http_server/mod_auth_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_browser.erl b/lib/inets/src/http_server/mod_browser.erl
index e3c41793ae..1e8f860746 100644
--- a/lib/inets/src/http_server/mod_browser.erl
+++ b/lib/inets/src/http_server/mod_browser.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_cgi.erl b/lib/inets/src/http_server/mod_cgi.erl
index ec8b9be32e..1454332895 100644
--- a/lib/inets/src/http_server/mod_cgi.erl
+++ b/lib/inets/src/http_server/mod_cgi.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_dir.erl b/lib/inets/src/http_server/mod_dir.erl
index 2d8f27af3c..ba93d0b271 100644
--- a/lib/inets/src/http_server/mod_dir.erl
+++ b/lib/inets/src/http_server/mod_dir.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_disk_log.erl b/lib/inets/src/http_server/mod_disk_log.erl
index 5e395a2118..3be5f2dd74 100644
--- a/lib/inets/src/http_server/mod_disk_log.erl
+++ b/lib/inets/src/http_server/mod_disk_log.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_esi.erl b/lib/inets/src/http_server/mod_esi.erl
index 2978ac9095..2800250727 100644
--- a/lib/inets/src/http_server/mod_esi.erl
+++ b/lib/inets/src/http_server/mod_esi.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_get.erl b/lib/inets/src/http_server/mod_get.erl
index e8b3896f89..58600f5e3e 100644
--- a/lib/inets/src/http_server/mod_get.erl
+++ b/lib/inets/src/http_server/mod_get.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_head.erl b/lib/inets/src/http_server/mod_head.erl
index 1b68c1c66b..25c11360eb 100644
--- a/lib/inets/src/http_server/mod_head.erl
+++ b/lib/inets/src/http_server/mod_head.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_htaccess.erl b/lib/inets/src/http_server/mod_htaccess.erl
index f229c96f2d..7b742bba24 100644
--- a/lib/inets/src/http_server/mod_htaccess.erl
+++ b/lib/inets/src/http_server/mod_htaccess.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -412,8 +412,8 @@ getAuthenticatingDataFromHeader(Info)->
case httpd_util:split(UnCodedString,":",2) of
{ok,[User,PassWord]}->
{user,User,PassWord};
- {error,Error}->
- {error,Error}
+ Other ->
+ {error, Other}
end
end;
BadCredentials ->
diff --git a/lib/inets/src/http_server/mod_log.erl b/lib/inets/src/http_server/mod_log.erl
index 4161f7059c..ad7e9713d9 100644
--- a/lib/inets/src/http_server/mod_log.erl
+++ b/lib/inets/src/http_server/mod_log.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_range.erl b/lib/inets/src/http_server/mod_range.erl
index 66d66c2809..1c6c6d927d 100644
--- a/lib/inets/src/http_server/mod_range.erl
+++ b/lib/inets/src/http_server/mod_range.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_responsecontrol.erl b/lib/inets/src/http_server/mod_responsecontrol.erl
index 9b410952f0..07129940a5 100644
--- a/lib/inets/src/http_server/mod_responsecontrol.erl
+++ b/lib/inets/src/http_server/mod_responsecontrol.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_security.erl b/lib/inets/src/http_server/mod_security.erl
index 1f936d598a..e7fc043217 100644
--- a/lib/inets/src/http_server/mod_security.erl
+++ b/lib/inets/src/http_server/mod_security.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_security_server.erl b/lib/inets/src/http_server/mod_security_server.erl
index f9281b0fdc..4f52357af3 100644
--- a/lib/inets/src/http_server/mod_security_server.erl
+++ b/lib/inets/src/http_server/mod_security_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/http_server/mod_trace.erl b/lib/inets/src/http_server/mod_trace.erl
index e1cb428264..f007426ae3 100644
--- a/lib/inets/src/http_server/mod_trace.erl
+++ b/lib/inets/src/http_server/mod_trace.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/inets_app/Makefile b/lib/inets/src/inets_app/Makefile
index 7f51676dc5..eb0098dbee 100644
--- a/lib/inets/src/inets_app/Makefile
+++ b/lib/inets/src/inets_app/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2015. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -48,9 +48,7 @@ MODULES = \
inets_app \
inets_sup \
inets_trace \
- inets_lib \
- inets_time_compat \
- inets_regexp
+ inets_lib
INTERNAL_HRL_FILES = inets_internal.hrl
EXTERNAL_HRL_FILES = ../../include/httpd.hrl \
diff --git a/lib/inets/src/inets_app/inets.app.src b/lib/inets/src/inets_app/inets.app.src
index c09139872f..eb4be932ac 100644
--- a/lib/inets/src/inets_app/inets.app.src
+++ b/lib/inets/src/inets_app/inets.app.src
@@ -1,7 +1,7 @@
%% This is an -*- erlang -*- file.
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,8 +28,6 @@
inets_service,
inets_trace,
inets_lib,
- inets_time_compat,
- inets_regexp,
%% FTP
ftp,
diff --git a/lib/inets/src/inets_app/inets.appup.src b/lib/inets/src/inets_app/inets.appup.src
index a9fbb1c3f7..3a31daeb20 100644
--- a/lib/inets/src/inets_app/inets.appup.src
+++ b/lib/inets/src/inets_app/inets.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/inets_app/inets.erl b/lib/inets/src/inets_app/inets.erl
index 2a40f73889..2d380012d7 100644
--- a/lib/inets/src/inets_app/inets.erl
+++ b/lib/inets/src/inets_app/inets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/inets_app/inets.mk b/lib/inets/src/inets_app/inets.mk
index 2c85173c68..1228514661 100644
--- a/lib/inets/src/inets_app/inets.mk
+++ b/lib/inets/src/inets_app/inets.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2012. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/inets_app/inets_app.erl b/lib/inets/src/inets_app/inets_app.erl
index 3e4718070c..da4e9ead25 100644
--- a/lib/inets/src/inets_app/inets_app.erl
+++ b/lib/inets/src/inets_app/inets_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/inets_app/inets_internal.hrl b/lib/inets/src/inets_app/inets_internal.hrl
index cc794d27c0..079b415b56 100644
--- a/lib/inets/src/inets_app/inets_internal.hrl
+++ b/lib/inets/src/inets_app/inets_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/inets_app/inets_lib.erl b/lib/inets/src/inets_app/inets_lib.erl
index 6e16f5ef6e..8993be29e4 100644
--- a/lib/inets/src/inets_app/inets_lib.erl
+++ b/lib/inets/src/inets_app/inets_lib.erl
@@ -27,7 +27,7 @@
%% Help function, elapsed milliseconds since T0
millisec_passed({_,_,_} = T0 ) ->
%% OTP 17 and earlier
- timer:now_diff(inets_time_compat:timestamp(), T0) div 1000;
+ timer:now_diff(erlang:timestamp(), T0) div 1000;
millisec_passed(T0) ->
%% OTP 18
diff --git a/lib/inets/src/inets_app/inets_regexp.erl b/lib/inets/src/inets_app/inets_regexp.erl
deleted file mode 100644
index fc1608bc5a..0000000000
--- a/lib/inets/src/inets_app/inets_regexp.erl
+++ /dev/null
@@ -1,414 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(inets_regexp).
-
--export([parse/1, match/2, first_match/2, split/2, sub/3, gsub/3]).
-
-
-%%%=========================================================================
-%%% API
-%%%=========================================================================
-
-%% parse(RegExp) -> {ok, RE} | {error, E}.
-%% Parse the regexp described in the string RegExp.
-
-parse(S) ->
- case (catch reg(S)) of
- {R, []} ->
- {ok, R};
- {_R, [C|_]} ->
- {error, {illegal, [C]}};
- {error, E} ->
- {error, E}
- end.
-
-
-%% Find the longest match of RegExp in String.
-
-match(S, RegExp) when is_list(RegExp) ->
- case parse(RegExp) of
- {ok,RE} -> match(S, RE);
- {error,E} -> {error,E}
- end;
-match(S, RE) ->
- case match(RE, S, 1, 0, -1) of
- {Start,Len} when Len >= 0 ->
- {match, Start, Len};
- {_Start,_Len} ->
- nomatch
- end.
-
-%% Find the first match of RegExp in String.
-
-first_match(S, RegExp) when is_list(RegExp) ->
- case parse(RegExp) of
- {ok, RE} ->
- first_match(S, RE);
- {error, E} ->
- {error, E}
- end;
-first_match(S, RE) ->
- case first_match(RE, S, 1) of
- {Start,Len} when Len >= 0 ->
- {match, Start,Len};
- nomatch ->
- nomatch
- end.
-
-first_match(RE, S, St) when S =/= [] ->
- case re_apply(S, St, RE) of
- {match, P, _Rest} ->
- {St, P-St};
- nomatch ->
- first_match(RE, tl(S), St+1)
- end;
-first_match(_RE, [], _St) ->
- nomatch.
-
-
-match(RE, S, St, Pos, L) ->
- case first_match(RE, S, St) of
- {St1, L1} ->
- Nst = St1 + 1,
- if L1 > L ->
- match(RE, lists:nthtail(Nst-St, S), Nst, St1, L1);
- true ->
- match(RE, lists:nthtail(Nst-St, S), Nst, Pos, L)
- end;
- nomatch ->
- {Pos, L}
- end.
-
-
-%% Split a string into substrings where the RegExp describes the
-%% field seperator. The RegExp " " is specially treated.
-
-split(String, " ") -> %This is really special
- {ok, RE} = parse("[ \t]+"),
- case split_apply(String, RE, true) of
- [[]|Ss] ->
- {ok,Ss};
- Ss ->
- {ok,Ss}
- end;
-split(String, RegExp) when is_list(RegExp) ->
- case parse(RegExp) of
- {ok, RE} ->
- {ok, split_apply(String, RE, false)};
- {error, E} ->
- {error,E}
- end;
-split(String, RE) ->
- {ok, split_apply(String, RE, false)}.
-
-
-%% Substitute the first match of the regular expression RegExp
-%% with the string Replace in String. Accept pre-parsed regular
-%% expressions.
-
-sub(String, RegExp, Rep) when is_list(RegExp) ->
- case parse(RegExp) of
- {ok, RE} ->
- sub(String, RE, Rep);
- {error, E} ->
- {error, E}
- end;
-sub(String, RE, Rep) ->
- Ss = sub_match(String, RE, 1),
- {ok, sub_repl(Ss, Rep, String, 1), length(Ss)}.
-
-
-%% Substitute every match of the regular expression RegExp with
-%% the string New in String. Accept pre-parsed regular expressions.
-
-gsub(String, RegExp, Rep) when is_list(RegExp) ->
- case parse(RegExp) of
- {ok, RE} ->
- gsub(String, RE, Rep);
- {error, E} ->
- {error, E}
- end;
-gsub(String, RE, Rep) ->
- Ss = matches(String, RE, 1),
- {ok, sub_repl(Ss, Rep, String, 1), length(Ss)}.
-
-
-%%%========================================================================
-%%% Internal functions
-%%%========================================================================
-
-%% This is the regular expression grammar used. It is equivalent to the
-%% one used in AWK, except that we allow ^ $ to be used anywhere and fail
-%% in the matching.
-%%
-%% reg -> reg1 : '$1'.
-%% reg1 -> reg1 "|" reg2 : {'or','$1','$2'}.
-%% reg1 -> reg2 : '$1'.
-%% reg2 -> reg2 reg3 : {concat,'$1','$2'}.
-%% reg2 -> reg3 : '$1'.
-%% reg3 -> reg3 "*" : {kclosure,'$1'}.
-%% reg3 -> reg3 "+" : {pclosure,'$1'}.
-%% reg3 -> reg3 "?" : {optional,'$1'}.
-%% reg3 -> reg4 : '$1'.
-%% reg4 -> "(" reg ")" : '$2'.
-%% reg4 -> "\\" char : '$2'.
-%% reg4 -> "^" : bos.
-%% reg4 -> "$" : eos.
-%% reg4 -> "." : char.
-%% reg4 -> "[" class "]" : {char_class,char_class('$2')}
-%% reg4 -> "[" "^" class "]" : {comp_class,char_class('$3')}
-%% reg4 -> "\"" chars "\"" : char_string('$2')
-%% reg4 -> char : '$1'.
-%% reg4 -> empty : epsilon.
-%% The grammar of the current regular expressions. The actual parser
-%% is a recursive descent implementation of the grammar.
-
-reg(S) -> reg1(S).
-
-%% reg1 -> reg2 reg1'
-%% reg1' -> "|" reg2
-%% reg1' -> empty
-
-reg1(S0) ->
- {L,S1} = reg2(S0),
- reg1p(S1, L).
-
-reg1p([$||S0], L) ->
- {R,S1} = reg2(S0),
- reg1p(S1, {'or',L,R});
-reg1p(S, L) -> {L,S}.
-
-%% reg2 -> reg3 reg2'
-%% reg2' -> reg3
-%% reg2' -> empty
-
-reg2(S0) ->
- {L,S1} = reg3(S0),
- reg2p(S1, L).
-
-reg2p([C|S0], L) when (C =/= $|) andalso (C =/= $)) ->
- {R,S1} = reg3([C|S0]),
- reg2p(S1, {concat,L,R});
-reg2p(S, L) -> {L,S}.
-
-%% reg3 -> reg4 reg3'
-%% reg3' -> "*" reg3'
-%% reg3' -> "+" reg3'
-%% reg3' -> "?" reg3'
-%% reg3' -> empty
-
-reg3(S0) ->
- {L,S1} = reg4(S0),
- reg3p(S1, L).
-
-reg3p([$*|S], L) -> reg3p(S, {kclosure,L});
-reg3p([$+|S], L) -> reg3p(S, {pclosure,L});
-reg3p([$?|S], L) -> reg3p(S, {optional,L});
-reg3p(S, L) -> {L,S}.
-
-reg4([$(|S0]) ->
- case reg(S0) of
- {R,[$)|S1]} -> {R,S1};
- {_R,_S} -> throw({error,{unterminated,"("}})
- end;
-reg4([$\\,O1,O2,O3|S])
- when ((O1 >= $0) andalso
- (O1 =< $7) andalso
- (O2 >= $0) andalso
- (O2 =< $7) andalso
- (O3 >= $0) andalso
- (O3 =< $7)) ->
- {(O1*8 + O2)*8 + O3 - 73*$0,S};
-reg4([$\\,C|S]) ->
- {escape_char(C),S};
-reg4([$\\]) ->
- throw({error, {unterminated,"\\"}});
-reg4([$^|S]) ->
- {bos,S};
-reg4([$$|S]) ->
- {eos,S};
-reg4([$.|S]) ->
- {{comp_class,"\n"},S};
-reg4("[^" ++ S0) ->
- case char_class(S0) of
- {Cc,[$]|S1]} -> {{comp_class,Cc},S1};
- {_Cc,_S} -> throw({error,{unterminated,"["}})
- end;
-reg4([$[|S0]) ->
- case char_class(S0) of
- {Cc,[$]|S1]} -> {{char_class,Cc},S1};
- {_Cc,_S1} -> throw({error,{unterminated,"["}})
- end;
-reg4([C|S])
- when (C =/= $*) andalso (C =/= $+) andalso (C =/= $?) andalso (C =/= $]) ->
- {C, S};
-reg4([C|_S]) ->
- throw({error,{illegal,[C]}});
-reg4([]) ->
- {epsilon,[]}.
-
-escape_char($n) -> $\n; %\n = LF
-escape_char($r) -> $\r; %\r = CR
-escape_char($t) -> $\t; %\t = TAB
-escape_char($v) -> $\v; %\v = VT
-escape_char($b) -> $\b; %\b = BS
-escape_char($f) -> $\f; %\f = FF
-escape_char($e) -> $\e; %\e = ESC
-escape_char($s) -> $\s; %\s = SPACE
-escape_char($d) -> $\d; %\d = DEL
-escape_char(C) -> C.
-
-char_class([$]|S]) -> char_class(S, [$]]);
-char_class(S) -> char_class(S, []).
-
-char($\\, [O1,O2,O3|S]) when
- O1 >= $0, O1 =< $7, O2 >= $0, O2 =< $7, O3 >= $0, O3 =< $7 ->
- {(O1*8 + O2)*8 + O3 - 73*$0,S};
-char($\\, [C|S]) -> {escape_char(C),S};
-char(C, S) -> {C,S}.
-
-char_class([C1|S0], Cc) when C1 =/= $] ->
- case char(C1, S0) of
- {Cf,[$-,C2|S1]} when C2 =/= $] ->
- case char(C2, S1) of
- {Cl,S2} when Cf < Cl -> char_class(S2, [{Cf,Cl}|Cc]);
- {Cl,_S2} -> throw({error,{char_class,[Cf,$-,Cl]}})
- end;
- {C,S1} -> char_class(S1, [C|Cc])
- end;
-char_class(S, Cc) -> {Cc,S}.
-
-
-%% re_apply(String, StartPos, RegExp) -> re_app_res().
-%%
-%% Apply the (parse of the) regular expression RegExp to String. If
-%% there is a match return the position of the remaining string and
-%% the string if else return 'nomatch'. BestMatch specifies if we want
-%% the longest match, or just a match.
-%%
-%% StartPos should be the real start position as it is used to decide
-%% if we ae at the beginning of the string.
-%%
-%% Pass two functions to re_apply_or so it can decide, on the basis
-%% of BestMatch, whether to just any take any match or try both to
-%% find the longest. This is slower but saves duplicatng code.
-
-re_apply(S, St, RE) -> re_apply(RE, [], S, St).
-
-re_apply(epsilon, More, S, P) -> %This always matches
- re_apply_more(More, S, P);
-re_apply({'or',RE1,RE2}, More, S, P) ->
- re_apply_or(re_apply(RE1, More, S, P),
- re_apply(RE2, More, S, P));
-re_apply({concat,RE1,RE2}, More, S0, P) ->
- re_apply(RE1, [RE2|More], S0, P);
-re_apply({kclosure,CE}, More, S, P) ->
- %% Be careful with the recursion, explicitly do one call before
- %% looping.
- re_apply_or(re_apply_more(More, S, P),
- re_apply(CE, [{kclosure,CE}|More], S, P));
-re_apply({pclosure,CE}, More, S, P) ->
- re_apply(CE, [{kclosure,CE}|More], S, P);
-re_apply({optional,CE}, More, S, P) ->
- re_apply_or(re_apply_more(More, S, P),
- re_apply(CE, More, S, P));
-re_apply(bos, More, S, 1) -> re_apply_more(More, S, 1);
-re_apply(eos, More, [$\n|S], P) -> re_apply_more(More, S, P);
-re_apply(eos, More, [], P) -> re_apply_more(More, [], P);
-re_apply({char_class,Cc}, More, [C|S], P) ->
- case in_char_class(C, Cc) of
- true -> re_apply_more(More, S, P+1);
- false -> nomatch
- end;
-re_apply({comp_class,Cc}, More, [C|S], P) ->
- case in_char_class(C, Cc) of
- true -> nomatch;
- false -> re_apply_more(More, S, P+1)
- end;
-re_apply(C, More, [C|S], P) when is_integer(C) ->
- re_apply_more(More, S, P+1);
-re_apply(_RE, _More, _S, _P) -> nomatch.
-
-%% re_apply_more([RegExp], String, Length) -> re_app_res().
-
-re_apply_more([RE|More], S, P) -> re_apply(RE, More, S, P);
-re_apply_more([], S, P) -> {match,P,S}.
-
-%% in_char_class(Char, Class) -> bool().
-
-in_char_class(C, [{C1,C2}|_Cc]) when C >= C1, C =< C2 -> true;
-in_char_class(C, [C|_Cc]) -> true;
-in_char_class(C, [_|Cc]) -> in_char_class(C, Cc);
-in_char_class(_C, []) -> false.
-
-%% re_apply_or(Match1, Match2) -> re_app_res().
-%% If we want the best match then choose the longest match, else just
-%% choose one by trying sequentially.
-
-re_apply_or({match,P1,S1}, {match,P2,_S2}) when P1 >= P2 -> {match,P1,S1};
-re_apply_or({match,_P1,_S1}, {match,P2,S2}) -> {match,P2,S2};
-re_apply_or(nomatch, R2) -> R2;
-re_apply_or(R1, nomatch) -> R1.
-
-
-matches(S, RE, St) ->
- case first_match(RE, S, St) of
- {St1,0} ->
- [{St1,0}|matches(string:substr(S, St1+2-St), RE, St1+1)];
- {St1,L1} ->
- [{St1,L1}|matches(string:substr(S, St1+L1+1-St), RE, St1+L1)];
- nomatch ->
- []
- end.
-
-sub_match(S, RE, St) ->
- case first_match(RE, S, St) of
- {St1,L1} -> [{St1,L1}];
- nomatch -> []
- end.
-
-sub_repl([{St,L}|Ss], Rep, S, Pos) ->
- Rs = sub_repl(Ss, Rep, S, St+L),
- string:substr(S, Pos, St-Pos) ++
- sub_repl(Rep, string:substr(S, St, L), Rs);
-sub_repl([], _Rep, S, Pos) ->
- string:substr(S, Pos).
-
-sub_repl([$&|Rep], M, Rest) -> M ++ sub_repl(Rep, M, Rest);
-sub_repl("\\&" ++ Rep, M, Rest) -> [$&|sub_repl(Rep, M, Rest)];
-sub_repl([C|Rep], M, Rest) -> [C|sub_repl(Rep, M, Rest)];
-sub_repl([], _M, Rest) -> Rest.
-
-split_apply(S, RE, Trim) -> split_apply(S, 1, RE, Trim, []).
-
-split_apply([], _P, _RE, true, []) ->
- [];
-split_apply([], _P, _RE, _T, Sub) ->
- [lists:reverse(Sub)];
-split_apply(S, P, RE, T, Sub) ->
- case re_apply(S, P, RE) of
- {match,P,_Rest} ->
- split_apply(tl(S), P+1, RE, T, [hd(S)|Sub]);
- {match,P1,Rest} ->
- [lists:reverse(Sub)|split_apply(Rest, P1, RE, T, [])];
- nomatch ->
- split_apply(tl(S), P+1, RE, T, [hd(S)|Sub])
- end.
diff --git a/lib/inets/src/inets_app/inets_service.erl b/lib/inets/src/inets_app/inets_service.erl
index 706915de92..3441d2a2e4 100644
--- a/lib/inets/src/inets_app/inets_service.erl
+++ b/lib/inets/src/inets_app/inets_service.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/inets_app/inets_sup.erl b/lib/inets/src/inets_app/inets_sup.erl
index a48a8db190..d8ae7eff26 100644
--- a/lib/inets/src/inets_app/inets_sup.erl
+++ b/lib/inets/src/inets_app/inets_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/inets_app/inets_time_compat.erl b/lib/inets/src/inets_app/inets_time_compat.erl
deleted file mode 100644
index 475f0685dc..0000000000
--- a/lib/inets/src/inets_app/inets_time_compat.erl
+++ /dev/null
@@ -1,72 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2015-2015. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%% This module is created to be able to execute on ERTS versions both
-%% earlier and later than 7.0.
-
--module(inets_time_compat).
-
-%% We don't want warnings about the use of erlang:now/0 in
-%% this module.
--compile(nowarn_deprecated_function).
-
--export([monotonic_time/0,
- timestamp/0,
- unique_integer/0,
- unique_integer/1]).
-
-monotonic_time() ->
- try
- erlang:monotonic_time()
- catch
- error:undef ->
- %% Use Erlang system time as monotonic time
- erlang_system_time_fallback()
- end.
-
-timestamp() ->
- try
- erlang:timestamp()
- catch
- error:undef ->
- erlang:now()
- end.
-
-unique_integer() ->
- try
- erlang:unique_integer()
- catch
- error:undef ->
- erlang_system_time_fallback()
- end.
-
-unique_integer(Modifiers) ->
- try
- erlang:unique_integer(Modifiers)
- catch
- error:badarg ->
- erlang:error(badarg, [Modifiers]);
- error:undef ->
- erlang_system_time_fallback()
- end.
-
-erlang_system_time_fallback() ->
- {MS, S, US} = erlang:now(),
- (MS*1000000+S)*1000000+US.
diff --git a/lib/inets/src/tftp/Makefile b/lib/inets/src/tftp/Makefile
index d5d94e1b78..4eaa959cce 100644
--- a/lib/inets/src/tftp/Makefile
+++ b/lib/inets/src/tftp/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2012. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/tftp/tftp.erl b/lib/inets/src/tftp/tftp.erl
index 45d7852863..c8804ea55f 100644
--- a/lib/inets/src/tftp/tftp.erl
+++ b/lib/inets/src/tftp/tftp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/tftp/tftp.hrl b/lib/inets/src/tftp/tftp.hrl
index 2cea18a7ea..25543e0b9e 100644
--- a/lib/inets/src/tftp/tftp.hrl
+++ b/lib/inets/src/tftp/tftp.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/tftp/tftp_binary.erl b/lib/inets/src/tftp/tftp_binary.erl
index 6981d741c6..09adcfc41f 100644
--- a/lib/inets/src/tftp/tftp_binary.erl
+++ b/lib/inets/src/tftp/tftp_binary.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/tftp/tftp_engine.erl b/lib/inets/src/tftp/tftp_engine.erl
index 493a29a68f..fb2c9749e5 100644
--- a/lib/inets/src/tftp/tftp_engine.erl
+++ b/lib/inets/src/tftp/tftp_engine.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -63,7 +63,8 @@
-record(file_info, {peer_req, pid}).
-record(sys_misc, {module, function, arguments}).
-record(error, {where, code, text, filename}).
--record(prepared, {status :: prep_status(), result, block_no, next_data, prev_data}).
+-record(prepared, {status :: prep_status() | 'undefined',
+ result, block_no, next_data, prev_data}).
-record(transfer_res, {status, decoded_msg, prepared}).
-define(ERROR(Where, Code, Text, Filename),
#error{where = Where, code = Code, text = Text, filename = Filename}).
diff --git a/lib/inets/src/tftp/tftp_file.erl b/lib/inets/src/tftp/tftp_file.erl
index 39382d6fd0..7664324808 100644
--- a/lib/inets/src/tftp/tftp_file.erl
+++ b/lib/inets/src/tftp/tftp_file.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/tftp/tftp_lib.erl b/lib/inets/src/tftp/tftp_lib.erl
index 01dea97d07..454754f0a3 100644
--- a/lib/inets/src/tftp/tftp_lib.erl
+++ b/lib/inets/src/tftp/tftp_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/src/tftp/tftp_logger.erl b/lib/inets/src/tftp/tftp_logger.erl
index 5e5d1d56c7..a869958484 100644
--- a/lib/inets/src/tftp/tftp_logger.erl
+++ b/lib/inets/src/tftp/tftp_logger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -85,7 +85,7 @@ info_msg(Format, Data) ->
%%-------------------------------------------------------------------
add_timestamp(Format, Data) ->
- Time = inets_time_compat:timestamp(),
+ Time = erlang:timestamp(),
{{_Y, _Mo, _D}, {H, Mi, S}} = calendar:now_to_universal_time(Time),
%% {"~p-~s-~sT~s:~s:~sZ,~6.6.0w tftp: " ++ Format ++ "\n",
%% [Y, t(Mo), t(D), t(H), t(Mi), t(S), MicroSecs | Data]}.
diff --git a/lib/inets/src/tftp/tftp_sup.erl b/lib/inets/src/tftp/tftp_sup.erl
index 98b92cc87c..40b67c499c 100644
--- a/lib/inets/src/tftp/tftp_sup.erl
+++ b/lib/inets/src/tftp/tftp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -94,7 +94,7 @@ unique_name(Options) ->
{value, {_, Port}} when is_integer(Port), Port > 0 ->
{tftpd, Port};
_ ->
- {tftpd, inets_time_compat:unique_integer([positive])}
+ {tftpd, erlang:unique_integer([positive])}
end.
default_kill_after() ->
diff --git a/lib/inets/test/Makefile b/lib/inets/test/Makefile
index 607ec7c182..ffc512050a 100644
--- a/lib/inets/test/Makefile
+++ b/lib/inets/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2014. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -42,7 +42,6 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# Target Specs
# ----------------------------------------------------
INCLUDES = -I. \
- -I$(ERL_TOP)/lib/test_server/include/ \
-I$(ERL_TOP)/lib/inets/src/inets_app \
-I$(ERL_TOP)/lib/inets/src/http_lib \
-I$(ERL_TOP)/lib/inets/src/http_client \
@@ -152,7 +151,6 @@ MODULES = \
inets_test_lib \
erl_make_certs \
ftp_SUITE \
- ftp_suite_lib \
ftp_format_SUITE \
http_format_SUITE \
httpc_SUITE \
@@ -170,8 +168,6 @@ MODULES = \
httpd_test_lib \
inets_sup_SUITE \
inets_SUITE \
- inets_app_test \
- inets_appup_test \
tftp_test_lib \
tftp_SUITE \
uri_SUITE \
@@ -238,7 +234,6 @@ RELTESTSYSBINDIR = $(RELTESTSYSALLDATADIR)/bin
# running the target "targets".
# ----------------------------------------------------
ERL_COMPILE_FLAGS += \
- -pa ../../../internal_tools/test_server/ebin \
$(INCLUDES) \
$(FTP_FLAGS) \
$(INETS_FLAGS)
diff --git a/lib/inets/test/erl_make_certs.erl b/lib/inets/test/erl_make_certs.erl
index f7666864ff..2db95825bc 100644
--- a/lib/inets/test/erl_make_certs.erl
+++ b/lib/inets/test/erl_make_certs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/ftp_SUITE.erl b/lib/inets/test/ftp_SUITE.erl
index 12c8185187..e2dec0c42a 100644
--- a/lib/inets/test/ftp_SUITE.erl
+++ b/lib/inets/test/ftp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,18 +42,25 @@
-define(BAD_USER, "baduser").
-define(BAD_DIR, "baddirectory").
-go() -> ct:run_test([{suite,"ftp_SUITE"}, {logdir,"LOG"}]).
-gos() -> ct:run_test([{suite,"ftp_SUITE"}, {group,ftps_passive}, {logdir,"LOG"}]).
+-record(progress, {
+ current = 0,
+ total
+ }).
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
+suite() ->
+ [{timetrap,{seconds,20}}].
+
all() ->
[
{group, ftp_passive},
{group, ftp_active},
{group, ftps_passive},
- {group, ftps_active}
+ {group, ftps_active},
+ error_ehost,
+ clean_shutdown
].
groups() ->
@@ -90,7 +97,13 @@ ftp_tests()->
recv_chunk,
type,
quote,
- ip_v6_disabled
+ error_elogin,
+ progress_report_send,
+ progress_report_recv,
+ not_owner,
+ unexpected_call,
+ unexpected_cast,
+ unexpected_bang
].
%%--------------------------------------------------------------------
@@ -101,6 +114,7 @@ ftp_tests()->
%%% ftpservers list of servers to check if they are available
%%% The element is:
%%% {Name, % string(). The os command name
+%%% Path, % string(). The os PATH syntax, e.g "/bin:/usr/bin"
%%% StartCommand, % fun()->{ok,start_result()} | {error,string()}.
%%% % The command to start the daemon with.
%%% ChkUp, % fun(start_result()) -> string(). Os command to check
@@ -116,12 +130,13 @@ ftp_tests()->
-define(default_ftp_servers,
[{"vsftpd",
- fun(__CONF__) ->
- DataDir = ?config(data_dir,__CONF__),
+ "/sbin:/usr/sbin:/usr/local/sbin",
+ fun(__CONF__, AbsName) ->
+ DataDir = proplists:get_value(data_dir,__CONF__),
ConfFile = filename:join(DataDir, "vsftpd.conf"),
- PrivDir = ?config(priv_dir,__CONF__),
+ PrivDir = proplists:get_value(priv_dir,__CONF__),
AnonRoot = PrivDir,
- Cmd = ["vsftpd "++filename:join(DataDir,"vsftpd.conf"),
+ Cmd = [AbsName ++" "++filename:join(DataDir,"vsftpd.conf"),
" -oftpd_banner=erlang_otp_testing",
" -oanon_root=\"",AnonRoot,"\"",
" -orsa_cert_file=\"",filename:join(DataDir,"server-cert.pem"),"\"",
@@ -145,7 +160,7 @@ ftp_tests()->
fun(_StartResult) -> os:cmd("kill `ps ax | grep erlang_otp_testing | awk '/vsftpd/{print $1}'`")
end,
fun(__CONF__) ->
- AnonRoot = ?config(priv_dir,__CONF__),
+ AnonRoot = proplists:get_value(priv_dir,__CONF__),
[{id2ftp, fun(Id) -> filename:join(AnonRoot,Id) end},
{id2ftp_result,fun(Id) -> filename:join(AnonRoot,Id) end} | __CONF__]
end,
@@ -161,9 +176,9 @@ init_per_suite(Config) ->
false ->
{skip, "No ftp server found"};
{ok,Data} ->
- TstDir = filename:join(?config(priv_dir,Config), "test"),
+ TstDir = filename:join(proplists:get_value(priv_dir,Config), "test"),
file:make_dir(TstDir),
- make_cert_files(dsa, rsa, "server-", ?config(data_dir,Config)),
+ make_cert_files(dsa, rsa, "server-", proplists:get_value(data_dir,Config)),
start_ftpd([{test_dir,TstDir},
{ftpd_data,Data}
| Config])
@@ -181,42 +196,49 @@ init_per_group(_Group, Config) -> Config.
end_per_group(_Group, Config) -> Config.
%%--------------------------------------------------------------------
-init_per_testcase(Case, Config0) ->
- Group = proplists:get_value(name,?config(tc_group_properties,Config0)),
- try ?MODULE:Case(doc) of
- Msg -> ct:comment(Msg)
- catch
- _:_-> ok
- end,
+init_per_testcase(Case, Config0) ->
+ Group = proplists:get_value(name, proplists:get_value(tc_group_properties,Config0)),
TLS = [{tls,[{reuse_sessions,true}]}],
ACTIVE = [{mode,active}],
PASSIVE = [{mode,passive}],
- ExtraOpts = [verbose],
+ CaseOpts = case Case of
+ progress_report_send -> [{progress, {?MODULE,progress,#progress{}}}];
+ progress_report_recv -> [{progress, {?MODULE,progress,#progress{}}}];
+ _ -> []
+ end,
+ ExtraOpts = [verbose | CaseOpts],
Config =
case Group of
- ftp_active -> ftp__open(Config0, ACTIVE ++ExtraOpts);
- ftps_active -> ftp__open(Config0, TLS++ ACTIVE ++ExtraOpts);
- ftp_passive -> ftp__open(Config0, PASSIVE ++ExtraOpts);
- ftps_passive -> ftp__open(Config0, TLS++PASSIVE ++ExtraOpts)
+ ftp_active -> ftp__open(Config0, ACTIVE ++ ExtraOpts);
+ ftps_active -> ftp__open(Config0, TLS++ ACTIVE ++ ExtraOpts);
+ ftp_passive -> ftp__open(Config0, PASSIVE ++ ExtraOpts);
+ ftps_passive -> ftp__open(Config0, TLS++PASSIVE ++ ExtraOpts);
+ undefined -> Config0
end,
case Case of
- user -> Config;
- bad_user -> Config;
+ user -> Config;
+ bad_user -> Config;
+ error_elogin -> Config;
+ error_ehost -> Config;
+ clean_shutdown -> Config;
_ ->
- Pid = ?config(ftp,Config),
+ Pid = proplists:get_value(ftp,Config),
ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS(atom_to_list(Group)++"-"++atom_to_list(Case)) ),
- ok = ftp:cd(Pid, ?config(priv_dir,Config)),
+ ok = ftp:cd(Pid, proplists:get_value(priv_dir,Config)),
Config
end.
end_per_testcase(user, _Config) -> ok;
end_per_testcase(bad_user, _Config) -> ok;
+end_per_testcase(error_elogin, _Config) -> ok;
+end_per_testcase(error_ehost, _Config) -> ok;
+end_per_testcase(clean_shutdown, _Config) -> ok;
end_per_testcase(_Case, Config) ->
- case ?config(tc_status,Config) of
+ case proplists:get_value(tc_status,Config) of
ok -> ok;
_ ->
- try ftp:latest_ctrl_response(?config(ftp,Config))
+ try ftp:latest_ctrl_response(proplists:get_value(ftp,Config))
of
{ok,S} -> ct:log("***~n*** Latest ctrl channel response:~n*** ~p~n***",[S])
catch
@@ -228,51 +250,57 @@ end_per_testcase(_Case, Config) ->
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
-user(doc) -> ["Open an ftp connection to a host, and logon as anonymous ftp, then logoff"];
+user() -> [
+ {doc, "Open an ftp connection to a host, and logon as anonymous ftp,"
+ " then logoff"}].
user(Config) ->
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS("")),% logon
ok = ftp:close(Pid), % logoff
{error,eclosed} = ftp:pwd(Pid), % check logoff result
ok.
%%-------------------------------------------------------------------------
-bad_user(doc) -> ["Open an ftp connection to a host, and logon with bad user."];
+bad_user() ->
+ [{doc, "Open an ftp connection to a host, and logon with bad user."}].
bad_user(Config) ->
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{error, euser} = ftp:user(Pid, ?BAD_USER, ?FTP_PASS("")),
ok.
%%-------------------------------------------------------------------------
-pwd(doc) -> ["Test ftp:pwd/1 & ftp:lpwd/1"];
+pwd() ->
+ [{doc, "Test ftp:pwd/1 & ftp:lpwd/1"}].
pwd(Config0) ->
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{ok, PWD} = ftp:pwd(Pid),
{ok, PathLpwd} = ftp:lpwd(Pid),
PWD = id2ftp_result("", Config),
PathLpwd = id2ftp_result("", Config).
%%-------------------------------------------------------------------------
-cd(doc) -> ["Open an ftp connection, log on as anonymous ftp, and cd to a"
- "directory and to a non-existent directory."];
+cd() ->
+ ["Open an ftp connection, log on as anonymous ftp, and cd to a"
+ "directory and to a non-existent directory."].
cd(Config0) ->
Dir = "test",
Config = set_state([reset,{mkdir,Dir}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:cd(Pid, id2ftp(Dir,Config)),
{ok, PWD} = ftp:pwd(Pid),
ExpectedPWD = id2ftp_result(Dir, Config),
PWD = ExpectedPWD,
- {error, epath} = ftp:cd(Pid, ?BAD_DIR).
+ {error, epath} = ftp:cd(Pid, ?BAD_DIR),
+ ok.
%%-------------------------------------------------------------------------
-lcd(doc) ->
- ["Test api function ftp:lcd/2"];
+lcd() ->
+ [{doc, "Test api function ftp:lcd/2"}].
lcd(Config0) ->
Dir = "test",
Config = set_state([reset,{mkdir,Dir}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:lcd(Pid, id2ftp(Dir,Config)),
{ok, PWD} = ftp:lpwd(Pid),
ExpectedPWD = id2ftp_result(Dir, Config),
@@ -280,19 +308,20 @@ lcd(Config0) ->
{error, epath} = ftp:lcd(Pid, ?BAD_DIR).
%%-------------------------------------------------------------------------
-ls(doc) -> ["Open an ftp connection; ls the current directory, and the "
- "\"test\" directory. We assume that ls never fails, since "
- "it's output is meant to be read by humans. "];
+ls() ->
+ [{doc, "Open an ftp connection; ls the current directory, and the "
+ "\"test\" directory. We assume that ls never fails, since "
+ "it's output is meant to be read by humans. "}].
ls(Config0) ->
Config = set_state([reset,{mkdir,"test"}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{ok, _R1} = ftp:ls(Pid),
{ok, _R2} = ftp:ls(Pid, id2ftp("test",Config)),
%% neither nlist nor ls operates on a directory
%% they operate on a pathname, which *can* be a
%% directory, but can also be a filename or a group
%% of files (including wildcards).
- case ?config(wildcard_support, Config) of
+ case proplists:get_value(wildcard_support, Config) of
true ->
{ok, _R3} = ftp:ls(Pid, id2ftp("te*",Config));
_ ->
@@ -300,20 +329,21 @@ ls(Config0) ->
end.
%%-------------------------------------------------------------------------
-nlist(doc) -> ["Open an ftp connection; nlist the current directory, and the "
+nlist() ->
+ [{doc,"Open an ftp connection; nlist the current directory, and the "
"\"test\" directory. Nlist does not behave consistenly over "
"operating systems. On some it is an error to have an empty "
- "directory."];
+ "directory."}].
nlist(Config0) ->
Config = set_state([reset,{mkdir,"test"}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{ok, _R1} = ftp:nlist(Pid),
{ok, _R2} = ftp:nlist(Pid, id2ftp("test",Config)),
%% neither nlist nor ls operates on a directory
%% they operate on a pathname, which *can* be a
%% directory, but can also be a filename or a group
%% of files (including wildcards).
- case ?config(wildcard_support, Config) of
+ case proplists:get_value(wildcard_support, Config) of
true ->
{ok, _R3} = ftp:nlist(Pid, id2ftp("te*",Config));
_ ->
@@ -321,141 +351,176 @@ nlist(Config0) ->
end.
%%-------------------------------------------------------------------------
-rename(doc) -> ["Rename a file."];
+rename() ->
+ [{doc, "Rename a file."}].
rename(Config0) ->
Contents = <<"ftp_SUITE test ...">>,
OldFile = "old.txt",
NewFile = "new.txt",
Config = set_state([reset,{mkfile,OldFile,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:rename(Pid,
id2ftp(OldFile,Config),
id2ftp(NewFile,Config)),
true = (chk_file(NewFile,Contents,Config)
- and chk_no_file([OldFile],Config)).
-
+ and chk_no_file([OldFile],Config)),
+ {error,epath} = ftp:rename(Pid,
+ id2ftp("non_existing_file",Config),
+ id2ftp(NewFile,Config)),
+ ok.
%%-------------------------------------------------------------------------
-send(doc) -> ["Transfer a file with ftp using send/2."];
+send() ->
+ [{doc, "Transfer a file with ftp using send/2."}].
send(Config0) ->
Contents = <<"ftp_SUITE test ...">>,
SrcDir = "data",
File = "file.txt",
Config = set_state([reset,{mkfile,[SrcDir,File],Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
-chk_no_file([File],Config),
-chk_file([SrcDir,File],Contents,Config),
+ chk_no_file([File],Config),
+ chk_file([SrcDir,File],Contents,Config),
ok = ftp:lcd(Pid, id2ftp(SrcDir,Config)),
ok = ftp:cd(Pid, id2ftp("",Config)),
ok = ftp:send(Pid, File),
+ chk_file(File, Contents, Config),
- chk_file(File, Contents, Config).
+ {error,epath} = ftp:send(Pid, "non_existing_file"),
+ ok.
%%-------------------------------------------------------------------------
-send_3(doc) -> ["Transfer a file with ftp using send/3."];
+send_3() ->
+ [{doc, "Transfer a file with ftp using send/3."}].
send_3(Config0) ->
Contents = <<"ftp_SUITE test ...">>,
Dir = "incoming",
File = "file.txt",
RemoteFile = "remfile.txt",
Config = set_state([reset,{mkfile,File,Contents},{mkdir,Dir}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:cd(Pid, id2ftp(Dir,Config)),
ok = ftp:lcd(Pid, id2ftp("",Config)),
ok = ftp:send(Pid, File, RemoteFile),
+ chk_file([Dir,RemoteFile], Contents, Config),
- chk_file([Dir,RemoteFile], Contents, Config).
+ {error,epath} = ftp:send(Pid, "non_existing_file", RemoteFile),
+ ok.
%%-------------------------------------------------------------------------
-send_bin(doc) -> ["Send a binary."];
+send_bin() ->
+ [{doc, "Send a binary."}].
send_bin(Config0) ->
BinContents = <<"ftp_SUITE test ...">>,
File = "file.txt",
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{error, enotbinary} = ftp:send_bin(Pid, "some string", id2ftp(File,Config)),
ok = ftp:send_bin(Pid, BinContents, id2ftp(File,Config)),
- chk_file(File, BinContents, Config).
+ chk_file(File, BinContents, Config),
+ {error, efnamena} = ftp:send_bin(Pid, BinContents, "/nothere"),
+ ok.
%%-------------------------------------------------------------------------
-send_chunk(doc) -> ["Send a binary using chunks."];
+send_chunk() ->
+ [{doc, "Send a binary using chunks."}].
send_chunk(Config0) ->
- Contents = <<"ftp_SUITE test ...">>,
+ Contents1 = <<"1: ftp_SUITE test ...">>,
+ Contents2 = <<"2: ftp_SUITE test ...">>,
File = "file.txt",
Config = set_state([reset,{mkdir,"incoming"}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:send_chunk_start(Pid, id2ftp(File,Config)),
+ {error, echunk} = ftp:send_chunk_start(Pid, id2ftp(File,Config)),
{error, echunk} = ftp:cd(Pid, "incoming"),
{error, enotbinary} = ftp:send_chunk(Pid, "some string"),
- ok = ftp:send_chunk(Pid, Contents),
- ok = ftp:send_chunk(Pid, Contents),
+ ok = ftp:send_chunk(Pid, Contents1),
+ ok = ftp:send_chunk(Pid, Contents2),
ok = ftp:send_chunk_end(Pid),
- chk_file(File, <<Contents/binary,Contents/binary>>, Config).
+ chk_file(File, <<Contents1/binary,Contents2/binary>>, Config),
+
+ {error, echunk} = ftp:send_chunk(Pid, Contents1),
+ {error, echunk} = ftp:send_chunk_end(Pid),
+ {error, efnamena} = ftp:send_chunk_start(Pid, "/"),
+ ok.
%%-------------------------------------------------------------------------
-delete(doc) -> ["Delete a file."];
+delete() ->
+ [{doc, "Delete a file."}].
delete(Config0) ->
Contents = <<"ftp_SUITE test ...">>,
File = "file.txt",
Config = set_state([reset,{mkfile,File,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:delete(Pid, id2ftp(File,Config)),
- chk_no_file([File], Config).
+ chk_no_file([File], Config),
+ {error,epath} = ftp:delete(Pid, id2ftp(File,Config)),
+ ok.
%%-------------------------------------------------------------------------
-mkdir(doc) -> ["Make a remote directory."];
+mkdir() ->
+ [{doc, "Make a remote directory."}].
mkdir(Config0) ->
NewDir = "new_dir",
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:mkdir(Pid, id2ftp(NewDir,Config)),
- chk_dir([NewDir], Config).
+ chk_dir([NewDir], Config),
+ {error,epath} = ftp:mkdir(Pid, id2ftp(NewDir,Config)),
+ ok.
%%-------------------------------------------------------------------------
-rmdir(doc) -> ["Remove a directory."];
+rmdir() ->
+ [{doc, "Remove a directory."}].
rmdir(Config0) ->
Dir = "dir",
Config = set_state([reset,{mkdir,Dir}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:rmdir(Pid, id2ftp(Dir,Config)),
- chk_no_dir([Dir], Config).
+ chk_no_dir([Dir], Config),
+ {error,epath} = ftp:rmdir(Pid, id2ftp(Dir,Config)),
+ ok.
%%-------------------------------------------------------------------------
-append(doc) -> ["Append a local file twice to a remote file"];
+append() ->
+ [{doc, "Append a local file twice to a remote file"}].
append(Config0) ->
SrcFile = "f_src.txt",
DstFile = "f_dst.txt",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset,{mkfile,SrcFile,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:append(Pid, id2ftp(SrcFile,Config), id2ftp(DstFile,Config)),
ok = ftp:append(Pid, id2ftp(SrcFile,Config), id2ftp(DstFile,Config)),
- chk_file(DstFile, <<Contents/binary,Contents/binary>>, Config).
+ chk_file(DstFile, <<Contents/binary,Contents/binary>>, Config),
+ {error,epath} = ftp:append(Pid, id2ftp("non_existing_file",Config), id2ftp(DstFile,Config)),
+ ok.
%%-------------------------------------------------------------------------
-append_bin(doc) -> ["Append a local file twice to a remote file using append_bin"];
+append_bin() ->
+ [{doc, "Append a local file twice to a remote file using append_bin"}].
append_bin(Config0) ->
DstFile = "f_dst.txt",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:append_bin(Pid, Contents, id2ftp(DstFile,Config)),
ok = ftp:append_bin(Pid, Contents, id2ftp(DstFile,Config)),
chk_file(DstFile, <<Contents/binary,Contents/binary>>, Config).
%%-------------------------------------------------------------------------
-append_chunk(doc) -> ["Append chunks."];
+append_chunk() ->
+ [{doc, "Append chunks."}].
append_chunk(Config0) ->
File = "f_dst.txt",
Contents = [<<"ER">>,<<"LE">>,<<"RL">>],
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:append_chunk_start(Pid, id2ftp(File,Config)),
{error, enotbinary} = ftp:append_chunk(Pid, binary_to_list(lists:nth(1,Contents))),
ok = ftp:append_chunk(Pid,lists:nth(1,Contents)),
@@ -465,53 +530,62 @@ append_chunk(Config0) ->
chk_file(File, <<"ERLERL">>, Config).
%%-------------------------------------------------------------------------
-recv(doc) -> ["Receive a file using recv/2"];
+recv() ->
+ [{doc, "Receive a file using recv/2"}].
recv(Config0) ->
File = "f_dst.txt",
SrcDir = "a_dir",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset, {mkfile,[SrcDir,File],Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:cd(Pid, id2ftp(SrcDir,Config)),
ok = ftp:lcd(Pid, id2ftp("",Config)),
ok = ftp:recv(Pid, File),
- chk_file(File, Contents, Config).
+ chk_file(File, Contents, Config),
+ {error,epath} = ftp:recv(Pid, "non_existing_file"),
+ ok.
%%-------------------------------------------------------------------------
-recv_3(doc) -> ["Receive a file using recv/3"];
+recv_3() ->
+ [{doc,"Receive a file using recv/3"}].
recv_3(Config0) ->
DstFile = "f_src.txt",
SrcFile = "f_dst.txt",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset, {mkfile,SrcFile,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:cd(Pid, id2ftp("",Config)),
ok = ftp:recv(Pid, SrcFile, id2abs(DstFile,Config)),
chk_file(DstFile, Contents, Config).
%%-------------------------------------------------------------------------
-recv_bin(doc) -> ["Receive a file as a binary."];
+recv_bin() ->
+ [{doc, "Receive a file as a binary."}].
recv_bin(Config0) ->
File = "f_dst.txt",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset, {mkfile,File,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{ok,Received} = ftp:recv_bin(Pid, id2ftp(File,Config)),
- find_diff(Received, Contents).
+ find_diff(Received, Contents),
+ {error,epath} = ftp:recv_bin(Pid, id2ftp("non_existing_file",Config)),
+ ok.
%%-------------------------------------------------------------------------
-recv_chunk(doc) -> ["Receive a file using chunk-wise."];
+recv_chunk() ->
+ [{doc, "Receive a file using chunk-wise."}].
recv_chunk(Config0) ->
File = "big_file.txt",
Contents = list_to_binary( lists:duplicate(1000, lists:seq(0,255)) ),
Config = set_state([reset, {mkfile,File,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{{error, "ftp:recv_chunk_start/2 not called"},_} = recv_chunk(Pid, <<>>),
ok = ftp:recv_chunk_start(Pid, id2ftp(File,Config)),
{ok, ReceivedContents, _Ncunks} = recv_chunk(Pid, <<>>),
find_diff(ReceivedContents, Contents).
-recv_chunk(Pid, Acc) -> recv_chunk(Pid, Acc, 0).
+recv_chunk(Pid, Acc) ->
+ recv_chunk(Pid, Acc, 0).
recv_chunk(Pid, Acc, N) ->
case ftp:recv_chunk(Pid) of
@@ -521,18 +595,18 @@ recv_chunk(Pid, Acc, N) ->
end.
%%-------------------------------------------------------------------------
-type(doc) -> ["Test that we can change btween ASCCI and binary transfer mode"];
+type() ->
+ [{doc,"Test that we can change btween ASCCI and binary transfer mode"}].
type(Config) ->
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:type(Pid, ascii),
ok = ftp:type(Pid, binary),
ok = ftp:type(Pid, ascii),
{error, etype} = ftp:type(Pid, foobar).
%%-------------------------------------------------------------------------
-quote(doc) -> [""];
quote(Config) ->
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
["257 \""++_Rest] = ftp:quote(Pid, "pwd"), %% 257
[_| _] = ftp:quote(Pid, "help"),
%% This negativ test causes some ftp servers to hang. This test
@@ -541,48 +615,154 @@ quote(Config) ->
%% = ftp:quote(Pid, "list"),
ok.
+%%-------------------------------------------------------------------------
+progress_report_send() ->
+ [{doc, "Test the option progress for ftp:send/[2,3]"}].
+progress_report_send(Config) when is_list(Config) ->
+ ReportPid =
+ spawn_link(?MODULE, progress_report_receiver_init, [self(), 1]),
+ send(Config),
+ receive
+ {ReportPid, ok} ->
+ ok
+ end.
%%-------------------------------------------------------------------------
-ip_v6_disabled(doc) -> ["Test ipv4 command PORT"];
-ip_v6_disabled(_Config) ->
- %%% FIXME!!!! What is this???
- ok.%% send(Config).
+progress_report_recv() ->
+ [{doc, "Test the option progress for ftp:recv/[2,3]"}].
+progress_report_recv(Config) when is_list(Config) ->
+ ReportPid =
+ spawn_link(?MODULE, progress_report_receiver_init, [self(), 3]),
+ recv(Config),
+ receive
+ {ReportPid, ok} ->
+ ok
+ end.
%%-------------------------------------------------------------------------
-%% big_one(doc) ->
-%% ["Create a local file and transfer it to the remote host into the "
-%% "the \"incoming\" directory, remove "
-%% "the local file. Then open a new connection; cd to \"incoming\", "
-%% "lcd to the private directory; receive the file; delete the "
-%% "remote file; close connection; check that received file is in "
-%% "the correct directory; cleanup." ];
-%% big_one(Config) ->
-%% Pid = ?config(ftp, Config),
-%% do_recv(Pid, Config).
+
+not_owner() ->
+ [{doc, "Test what happens if a process that not owns the connection tries "
+ "to use it"}].
+not_owner(Config) when is_list(Config) ->
+ Pid = proplists:get_value(ftp, Config),
+
+ Parent = self(),
+ OtherPid = spawn_link(
+ fun() ->
+ {error, not_connection_owner} = ftp:pwd(Pid),
+ ftp:close(Pid),
+ Parent ! {self(), ok}
+ end),
+ receive
+ {OtherPid, ok} ->
+ {ok, _} = ftp:pwd(Pid)
+ end.
+
+
+%%-------------------------------------------------------------------------
+
+
+unexpected_call()->
+ [{doc, "Test that behaviour of the ftp process if the api is abused"}].
+unexpected_call(Config) when is_list(Config) ->
+ Flag = process_flag(trap_exit, true),
+ Pid = proplists:get_value(ftp, Config),
+
+ %% Serious programming fault, connetion will be shut down
+ case (catch gen_server:call(Pid, {self(), foobar, 10}, infinity)) of
+ {error, {connection_terminated, 'API_violation'}} ->
+ ok;
+ Unexpected1 ->
+ exit({unexpected_result, Unexpected1})
+ end,
+ ct:sleep(500),
+ undefined = process_info(Pid, status),
+ process_flag(trap_exit, Flag).
+%%-------------------------------------------------------------------------
+
+unexpected_cast()->
+ [{doc, "Test that behaviour of the ftp process if the api is abused"}].
+unexpected_cast(Config) when is_list(Config) ->
+ Flag = process_flag(trap_exit, true),
+ Pid = proplists:get_value(ftp, Config),
+ %% Serious programming fault, connetion will be shut down
+ gen_server:cast(Pid, {self(), foobar, 10}),
+ ct:sleep(500),
+ undefined = process_info(Pid, status),
+ process_flag(trap_exit, Flag).
+%%-------------------------------------------------------------------------
-%% do_recv(Pid, Config) ->
-%% PrivDir = ?config(priv_dir, Config),
-%% File = ?config(file, Config),
-%% Newfile = ?config(new_file, Config),
-%% AbsFile = filename:absname(File, PrivDir),
-%% Contents = "ftp_SUITE:recv test ...",
-%% ok = file:write_file(AbsFile, list_to_binary(Contents)),
-%% ok = ftp:cd(Pid, "incoming"),
-%% ftp:delete(Pid, File), % reset
-%% ftp:lcd(Pid, PrivDir),
-%% ok = ftp:send(Pid, File),
-%% ok = file:delete(AbsFile), % cleanup
-%% test_server:sleep(100),
-%% ok = ftp:lcd(Pid, PrivDir),
-%% ok = ftp:recv(Pid, File),
-%% {ok, Files} = file:list_dir(PrivDir),
-%% true = lists:member(File, Files),
-%% ok = file:delete(AbsFile), % cleanup
-%% ok = ftp:recv(Pid, File, Newfile),
-%% ok = ftp:delete(Pid, File), % cleanup
-%% ok.
+unexpected_bang()->
+ [{doc, "Test that connection ignores unexpected bang"}].
+unexpected_bang(Config) when is_list(Config) ->
+ Flag = process_flag(trap_exit, true),
+ Pid = proplists:get_value(ftp, Config),
+ %% Could be an innocent misstake the connection lives.
+ Pid ! foobar,
+ ct:sleep(500),
+ {status, _} = process_info(Pid, status),
+ process_flag(trap_exit, Flag).
+
+%%-------------------------------------------------------------------------
+
+clean_shutdown() ->
+ [{doc, "Test that owning process that exits with reason "
+ "'shutdown' does not cause an error message. OTP 6035"}].
+
+clean_shutdown(Config) ->
+ Parent = self(),
+ HelperPid = spawn(
+ fun() ->
+ ftp__open(Config, [verbose]),
+ Parent ! ok,
+ receive
+ nothing -> ok
+ end
+ end),
+ receive
+ ok ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ LogFile = filename:join([PrivDir,"ticket_6035.log"]),
+ error_logger:logfile({open, LogFile}),
+ exit(HelperPid, shutdown),
+ timer:sleep(2000),
+ error_logger:logfile(close),
+ case is_error_report_6035(LogFile) of
+ true -> ok;
+ false -> {fail, "Bad logfile"}
+ end
+ end.
+
+%%%----------------------------------------------------------------
+%%% Error codes not tested elsewhere
+error_elogin(Config0) ->
+ Dir = "test",
+ OldFile = "old.txt",
+ NewFile = "new.txt",
+ SrcDir = "data",
+ File = "file.txt",
+ Config = set_state([reset,
+ {mkdir,Dir},
+ {mkfile,OldFile,<<"Contents..">>},
+ {mkfile,[SrcDir,File],<<"Contents..">>}], Config0),
+ Pid = proplists:get_value(ftp, Config),
+ ok = ftp:lcd(Pid, id2ftp(SrcDir,Config)),
+ {error,elogin} = ftp:send(Pid, File),
+ ok = ftp:lcd(Pid, id2ftp("",Config)),
+ {error,elogin} = ftp:pwd(Pid),
+ {error,elogin} = ftp:cd(Pid, id2ftp(Dir,Config)),
+ {error,elogin} = ftp:rename(Pid,
+ id2ftp(OldFile,Config),
+ id2ftp(NewFile,Config)),
+ ok.
+
+error_ehost(_Config) ->
+ {error, ehost} = ftp:open("nohost.nodomain"),
+ ok.
+
%%--------------------------------------------------------------------
%% Internal functions -----------------------------------------------
%%--------------------------------------------------------------------
@@ -676,71 +856,81 @@ chk_no_dir(PathList, Config) ->
ct:fail("Unexpected error for ~p: ~p",[Path,Error])
end.
-
-%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
-%% find a suitable ftpd
-%%
find_executable(Config) ->
- FTPservers = case ?config(ftpservers,Config) of
- undefined -> ?default_ftp_servers;
- L -> L
- end,
- case lists:dropwhile(fun not_available/1, FTPservers) of
- [] -> false;
- [FTPD_data|_] -> {ok, FTPD_data}
+ search_executable(proplists:get_value(ftpservers, Config, ?default_ftp_servers)).
+
+
+search_executable([{Name,Paths,_StartCmd,_ChkUp,_StopCommand,_ConfigUpd,_Host,_Port}|Srvrs]) ->
+ case os_find(Name,Paths) of
+ false ->
+ ct:log("~p not found",[Name]),
+ search_executable(Srvrs);
+ AbsName ->
+ ct:comment("Found ~p",[AbsName]),
+ {ok, {AbsName,_StartCmd,_ChkUp,_StopCommand,_ConfigUpd,_Host,_Port}}
+ end;
+search_executable([]) ->
+ false.
+
+
+os_find(Name, Paths) ->
+ case os:find_executable(Name, Paths) of
+ false -> os:find_executable(Name);
+ AbsName -> AbsName
end.
-not_available({Name,_StartCmd,_ChkUp,_StopCommand,_ConfigUpd,_Host,_Port}) ->
- os:find_executable(Name) == false.
-
-%%--------------------------------------------------------------------
-%% start/stop of ftpd
-%%
-start_ftpd(Config) ->
- {Name,StartCmd,_ChkUp,_StopCommand,ConfigRewrite,Host,Port} = ?config(ftpd_data, Config),
- case StartCmd(Config) of
+%%%----------------------------------------------------------------
+start_ftpd(Config0) ->
+ {AbsName,StartCmd,_ChkUp,_StopCommand,ConfigRewrite,Host,Port} =
+ proplists:get_value(ftpd_data, Config0),
+ case StartCmd(Config0, AbsName) of
{ok,StartResult} ->
- [{ftpd_host,Host},
- {ftpd_port,Port},
- {ftpd_start_result,StartResult} | ConfigRewrite(Config)];
+ Config = [{ftpd_host,Host},
+ {ftpd_port,Port},
+ {ftpd_start_result,StartResult} | ConfigRewrite(Config0)],
+ try
+ ftp__close(ftp__open(Config,[verbose]))
+ of
+ Config1 when is_list(Config1) ->
+ ct:log("Usuable ftp server ~p started on ~p:~p",[AbsName,Host,Port]),
+ Config
+ catch
+ Class:Exception ->
+ ct:log("Ftp server ~p started on ~p:~p but is unusable:~n~p:~p",
+ [AbsName,Host,Port,Class,Exception]),
+ {skip, [AbsName," started but unusuable"]}
+ end;
{error,Msg} ->
- {skip, [Name," not started: ",Msg]}
+ {skip, [AbsName," not started: ",Msg]}
end.
stop_ftpd(Config) ->
- {_Name,_StartCmd,_ChkUp,StopCommand,_ConfigUpd,_Host,_Port} = ?config(ftpd_data, Config),
- StopCommand(?config(ftpd_start_result,Config)).
+ {_Name,_StartCmd,_ChkUp,StopCommand,_ConfigUpd,_Host,_Port} = proplists:get_value(ftpd_data, Config),
+ StopCommand(proplists:get_value(ftpd_start_result,Config)).
ps_ftpd(Config) ->
- {_Name,_StartCmd,ChkUp,_StopCommand,_ConfigUpd,_Host,_Port} = ?config(ftpd_data, Config),
- ct:log( ChkUp(?config(ftpd_start_result,Config)) ).
+ {_Name,_StartCmd,ChkUp,_StopCommand,_ConfigUpd,_Host,_Port} = proplists:get_value(ftpd_data, Config),
+ ct:log( ChkUp(proplists:get_value(ftpd_start_result,Config)) ).
ftpd_running(Config) ->
- {_Name,_StartCmd,ChkUp,_StopCommand,_ConfigUpd,_Host,_Port} = ?config(ftpd_data, Config),
- ChkUp(?config(ftpd_start_result,Config)).
+ {_Name,_StartCmd,ChkUp,_StopCommand,_ConfigUpd,_Host,_Port} = proplists:get_value(ftpd_data, Config),
+ ChkUp(proplists:get_value(ftpd_start_result,Config)).
-%%--------------------------------------------------------------------
-%% start/stop of ftpc
-%%
ftp__open(Config, Options) ->
- Host = ?config(ftpd_host,Config),
- Port = ?config(ftpd_port,Config),
+ Host = proplists:get_value(ftpd_host,Config),
+ Port = proplists:get_value(ftpd_port,Config),
ct:log("Host=~p, Port=~p",[Host,Port]),
{ok,Pid} = ftp:open(Host, [{port,Port} | Options]),
[{ftp,Pid}|Config].
ftp__close(Config) ->
- ok = ftp:close(?config(ftp,Config)),
+ ok = ftp:close(proplists:get_value(ftp,Config)),
Config.
-%%--------------------------------------------------------------------
-%%
split(Cs) -> string:tokens(Cs, "\r\n").
-%%--------------------------------------------------------------------
-%%
find_diff(Bin1, Bin2) ->
case find_diff(Bin1, Bin2, 1) of
{error, {diff,Pos,RC,LC}} ->
@@ -753,15 +943,14 @@ find_diff(Bin1, Bin2) ->
find_diff(A, A, _) -> true;
find_diff(<<H,T1/binary>>, <<H,T2/binary>>, Pos) -> find_diff(T1, T2, Pos+1);
find_diff(RC, LC, Pos) -> {error, {diff, Pos, RC, LC}}.
-%%--------------------------------------------------------------------
-%%
+
set_state(Ops, Config) when is_list(Ops) -> lists:foldl(fun set_state/2, Config, Ops);
set_state(reset, Config) ->
rm('*', id2abs("",Config)),
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
file:set_cwd(PrivDir),
- ftp:lcd(?config(ftp,Config),PrivDir),
+ ftp:lcd(proplists:get_value(ftp,Config),PrivDir),
set_state({mkdir,""},Config);
set_state({mkdir,Id}, Config) ->
Abs = id2abs(Id, Config),
@@ -787,7 +976,6 @@ mk_path(F, Pfx) ->
AbsName
end.
-
rm('*', Pfx) ->
{ok,Fs} = file:list_dir(Pfx),
lists:foreach(fun(F) -> rm(F, Pfx) end, Fs);
@@ -805,17 +993,88 @@ rm(F, Pfx) ->
ok
end.
-%%--------------------------------------------------------------------
-%%
-
-id2abs(Id, Conf) -> filename:join(?config(priv_dir,Conf),ids(Id)).
-id2ftp(Id, Conf) -> (?config(id2ftp,Conf))(ids(Id)).
-id2ftp_result(Id, Conf) -> (?config(id2ftp_result,Conf))(ids(Id)).
+id2abs(Id, Conf) -> filename:join(proplists:get_value(priv_dir,Conf),ids(Id)).
+id2ftp(Id, Conf) -> (proplists:get_value(id2ftp,Conf))(ids(Id)).
+id2ftp_result(Id, Conf) -> (proplists:get_value(id2ftp_result,Conf))(ids(Id)).
ids([[_|_]|_]=Ids) -> filename:join(Ids);
ids(Id) -> Id.
-is_expected_absName(Id, File, Conf) -> File = (?config(id2abs,Conf))(Id).
-is_expected_ftpInName(Id, File, Conf) -> File = (?config(id2ftp,Conf))(Id).
-is_expected_ftpOutName(Id, File, Conf) -> File = (?config(id2ftp_result,Conf))(Id).
+is_expected_absName(Id, File, Conf) -> File = (proplists:get_value(id2abs,Conf))(Id).
+is_expected_ftpInName(Id, File, Conf) -> File = (proplists:get_value(id2ftp,Conf))(Id).
+is_expected_ftpOutName(Id, File, Conf) -> File = (proplists:get_value(id2ftp_result,Conf))(Id).
+
+
+%%%----------------------------------------------------------------
+%%% Help functions for the option '{progress,Progress}'
+%%%
+
+%%%----------------
+%%% Callback:
+
+progress(#progress{} = P, _File, {file_size, Total} = M) ->
+ ct:pal("Progress: ~p",[M]),
+ progress_report_receiver ! start,
+ P#progress{total = Total};
+
+progress(#progress{current = Current} = P, _File, {transfer_size, 0} = M) ->
+ ct:pal("Progress: ~p",[M]),
+ progress_report_receiver ! finish,
+ case P#progress.total of
+ unknown -> P;
+ Current -> P;
+ Total -> ct:fail({error, {progress, {total,Total}, {current,Current}}}),
+ P
+ end;
+
+progress(#progress{current = Current} = P, _File, {transfer_size, Size} = M) ->
+ ct:pal("Progress: ~p",[M]),
+ progress_report_receiver ! update,
+ P#progress{current = Current + Size};
+
+progress(P, _File, M) ->
+ ct:pal("Progress **** Strange: ~p",[M]),
+ P.
+
+
+%%%----------------
+%%% Help process that counts the files transferred:
+
+progress_report_receiver_init(Parent, N) ->
+ register(progress_report_receiver, self()),
+ progress_report_receiver_expect_N_files(Parent, N).
+
+progress_report_receiver_expect_N_files(_Parent, 0) ->
+ ct:pal("progress_report got all files!", []);
+progress_report_receiver_expect_N_files(Parent, N) ->
+ ct:pal("progress_report expects ~p more files",[N]),
+ receive
+ start -> ok
+ end,
+ progress_report_receiver_loop(Parent, N-1).
+
+
+progress_report_receiver_loop(Parent, N) ->
+ ct:pal("progress_report expect update | finish. N = ~p",[N]),
+ receive
+ update ->
+ ct:pal("progress_report got update",[]),
+ progress_report_receiver_loop(Parent, N);
+ finish ->
+ ct:pal("progress_report got finish, send ~p to ~p",[{self(),ok}, Parent]),
+ Parent ! {self(), ok},
+ progress_report_receiver_expect_N_files(Parent, N)
+ end.
+
+%%%----------------------------------------------------------------
+%%% Help functions for bug OTP-6035
+
+is_error_report_6035(LogFile) ->
+ case file:read_file(LogFile) of
+ {ok, Bin} ->
+ nomatch =/= binary:match(Bin, <<"=ERROR REPORT====">>);
+ _ ->
+ false
+ end.
+
diff --git a/lib/inets/test/ftp_format_SUITE.erl b/lib/inets/test/ftp_format_SUITE.erl
index 7ed94b9c61..a33b31f46f 100644
--- a/lib/inets/test/ftp_format_SUITE.erl
+++ b/lib/inets/test/ftp_format_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,21 +22,15 @@
-author('[email protected]').
-include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-include("ftp_internal.hrl").
-%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2]).
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
-%% Test cases must be exported.
--export([ ftp_150/1,
- ftp_200/1, ftp_220/1, ftp_226/1, ftp_257/1, ftp_331/1, ftp_425/1,
- ftp_other_status_codes/1, ftp_multiple_lines/1,
- ftp_multipel_ctrl_messages/1, format_error/1]).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,5}}
+ ].
all() ->
[{group, ftp_response}, format_error].
@@ -61,23 +55,16 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_, Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
-
-end_per_testcase(_, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+end_per_testcase(_, _) ->
ok.
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-ftp_150(doc) ->
- ["Especially check that respons can be devided in a random place."];
-ftp_150(suite) ->
- [];
+ftp_150() ->
+ [{doc, "Especially check that respons can be devided in a random place."}].
ftp_150(Config) when is_list(Config) ->
FtpResponse = ["150 ASCII data conn", "ection for /bin/ls ",
"(134.138.177", ".89,50434) (0 bytes).\r\n"],
@@ -85,14 +72,11 @@ ftp_150(Config) when is_list(Config) ->
"150 ASCII data connection for /bin/ls "
"(134.138.177.89,50434) (0 bytes).\r\n" = Msg =
parse(ftp_response, parse_lines, [[], start], FtpResponse),
- {pos_prel, _} = ftp_response:interpret(Msg),
- ok.
-
-ftp_200(doc) ->
- ["Especially check that respons can be devided after the first status "
- "code character and in the end delimiter."];
-ftp_200(suite) ->
- [];
+ {pos_prel, _} = ftp_response:interpret(Msg).
+
+ftp_200() ->
+ [{doc, "Especially check that respons can be devided after the first status "
+ "code character and in the end delimiter."}].
ftp_200(Config) when is_list(Config) ->
FtpResponse = ["2", "00 PORT command successful.", [?CR], [?LF]],
@@ -101,11 +85,9 @@ ftp_200(Config) when is_list(Config) ->
{pos_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_220(doc) ->
- ["Especially check that respons can be devided after the "
- "first with space "];
-ftp_220(suite) ->
- [];
+ftp_220() ->
+ [{doc, "Especially check that respons can be devided after the "
+ "first with space "}].
ftp_220(Config) when is_list(Config) ->
FtpResponse = ["220 ","fingon FTP server (SunOS 5.8) ready.\r\n"],
@@ -114,11 +96,9 @@ ftp_220(Config) when is_list(Config) ->
{pos_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_226(doc) ->
- ["Especially check that respons can be devided after second status code"
- " character and in the end delimiter."];
-ftp_226(suite) ->
- [];
+ftp_226() ->
+ [{doc, "Especially check that respons can be devided after second status code"
+ " character and in the end delimiter."}].
ftp_226(Config) when is_list(Config) ->
FtpResponse = ["22" "6 Transfer complete.\r", [?LF]],
@@ -127,10 +107,8 @@ ftp_226(Config) when is_list(Config) ->
{pos_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_257(doc) ->
- ["Especially check that quoted chars do not cause a problem."];
-ftp_257(suite) ->
- [];
+ftp_257() ->
+ [{doc, "Especially check that quoted chars do not cause a problem."}].
ftp_257(Config) when is_list(Config) ->
FtpResponse = ["257 \"/\" is current directory.\r\n"],
@@ -139,11 +117,9 @@ ftp_257(Config) when is_list(Config) ->
{pos_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_331(doc) ->
- ["Especially check that respons can be devided after the third status "
- " status code character."];
-ftp_331(suite) ->
- [];
+ftp_331() ->
+ [{doc, "Especially check that respons can be devided after the third status "
+ " status code character."}].
ftp_331(Config) when is_list(Config) ->
%% Brake before white space after code
FtpResponse =
@@ -154,10 +130,8 @@ ftp_331(Config) when is_list(Config) ->
{pos_interm, _} = ftp_response:interpret(Msg),
ok.
-ftp_425(doc) ->
- ["Especially check a message that was received in only one part."];
-ftp_425(suite) ->
- [];
+ftp_425() ->
+ [{doc, "Especially check a message that was received in only one part."}].
ftp_425(Config) when is_list(Config) ->
FtpResponse =
["425 Can't build data connection: Connection refused.\r\n"],
@@ -167,10 +141,8 @@ ftp_425(Config) when is_list(Config) ->
{trans_neg_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_multiple_lines(doc) ->
- ["Especially check multiple lines devided in significant places"];
-ftp_multiple_lines(suite) ->
- [];
+ftp_multiple_lines() ->
+ [{doc, "Especially check multiple lines devided in significant places"}].
ftp_multiple_lines(Config) when is_list(Config) ->
FtpResponse = ["21", "4","-The",
" following commands are recognized:\r\n"
@@ -248,13 +220,11 @@ ftp_multiple_lines(Config) when is_list(Config) ->
FtpResponse2),
ok.
-ftp_other_status_codes(doc) ->
- ["Check that other valid status codes, than the ones above, are handled"
+ftp_other_status_codes() ->
+ [{doc, "Check that other valid status codes, than the ones above, are handled"
"by ftp_response:interpret/1. Note there are som ftp status codes"
"that will not be received with the current ftp instruction support,"
- "they are not included here."];
-ftp_other_status_codes(suite) ->
- [];
+ "they are not included here."}].
ftp_other_status_codes(Config) when is_list(Config) ->
%% 1XX
@@ -283,18 +253,16 @@ ftp_other_status_codes(Config) when is_list(Config) ->
{perm_neg_compl, _ } = ftp_response:interpret("501 Foobar\r\n"),
{perm_neg_compl, _ } = ftp_response:interpret("503 Foobar\r\n"),
{perm_neg_compl, _ } = ftp_response:interpret("504 Foobar\r\n"),
- {perm_neg_compl, _ } = ftp_response:interpret("530 Foobar\r\n"),
+ {elogin, _ } = ftp_response:interpret("530 Foobar\r\n"),
{perm_neg_compl, _ } = ftp_response:interpret("532 Foobar\r\n"),
{epath, _ } = ftp_response:interpret("550 Foobar\r\n"),
{epnospc, _ } = ftp_response:interpret("552 Foobar\r\n"),
{efnamena, _ } = ftp_response:interpret("553 Foobar\r\n"),
ok.
-ftp_multipel_ctrl_messages(doc) ->
- ["The ftp server may send more than one control message as a reply,"
- "check that they are handled one at the time."];
-ftp_multipel_ctrl_messages(suite) ->
- [];
+ftp_multipel_ctrl_messages() ->
+ [{doc, "The ftp server may send more than one control message as a reply,"
+ "check that they are handled one at the time."}].
ftp_multipel_ctrl_messages(Config) when is_list(Config) ->
FtpResponse = ["200 PORT command successful.\r\n200 Foobar\r\n"],
@@ -307,10 +275,6 @@ ftp_multipel_ctrl_messages(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-format_error(doc) ->
- [""];
-format_error(suite) ->
- [];
format_error(Config) when is_list(Config) ->
"Synchronisation error during chunk sending." =
ftp:formaterror(echunk),
@@ -347,7 +311,7 @@ parse(Module, Function, [AccLines, StatusCode], [Data | Rest]) ->
{continue, {NewData, NewAccLines, NewStatusCode}} ->
case Rest of
[] ->
- test_server:fail({wrong_input, Data, Rest});
+ ct:fail({wrong_input, Data, Rest});
[_ | _] ->
parse(Module, Function, [NewAccLines, NewStatusCode],
[binary_to_list(NewData) ++ hd(Rest) | tl(Rest)])
diff --git a/lib/inets/test/ftp_property_test_SUITE.erl b/lib/inets/test/ftp_property_test_SUITE.erl
index 984fb58f16..b314882296 100644
--- a/lib/inets/test/ftp_property_test_SUITE.erl
+++ b/lib/inets/test/ftp_property_test_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/ftp_suite_lib.erl b/lib/inets/test/ftp_suite_lib.erl
deleted file mode 100644
index 6d30f3aa62..0000000000
--- a/lib/inets/test/ftp_suite_lib.erl
+++ /dev/null
@@ -1,1696 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2015. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
-
--module(ftp_suite_lib).
-
-
--include_lib("test_server/include/test_server.hrl").
--include_lib("test_server/include/test_server_line.hrl").
--include("inets_test_lib.hrl").
-
-%% Test server specific exports
-% -export([init_per_testcase/2, end_per_testcase/2]).
-
--compile(export_all).
-
-
--record(progress, {
- current = 0,
- total
- }).
-
-
-
--define(FTP_USER, "anonymous").
--define(FTP_PASS, passwd()).
--define(FTP_PORT, 21).
-
--define(BAD_HOST, "badhostname").
--define(BAD_USER, "baduser").
--define(BAD_DIR, "baddirectory").
-
--ifdef(ftp_debug_client).
--define(ftp_open(Host, Flags),
- do_ftp_open(Host, [{debug, debug},
- {timeout, timer:seconds(15)} | Flags])).
--else.
--ifdef(ftp_trace_client).
--define(ftp_open(Host, Flags),
- do_ftp_open(Host, [{debug, trace},
- {timeout, timer:seconds(15)} | Flags])).
--else.
--define(ftp_open(Host, Flags),
- do_ftp_open(Host, [{verbose, true},
- {timeout, timer:seconds(15)} | Flags])).
--endif.
--endif.
-
-%% -- Tickets --
-
-tickets(doc) ->
- "Test cases for reported bugs";
-tickets(suite) ->
- [ticket_6035].
-
-%% --
-
-ftpd_init(FtpdTag, Config) ->
- %% Get the host name(s) of FTP server
- Hosts =
- case ct:get_config(ftpd_hosts) of
- undefined ->
- ftpd_hosts(data_dir(Config));
- H ->
- H
- end,
- p("ftpd_init -> "
- "~n Hosts: ~p"
- "~n Config: ~p"
- "~n FtpdTag: ~p", [Hosts, Config, FtpdTag]),
- %% Get the first host that actually have a running FTP server
- case lists:keysearch(FtpdTag, 1, Hosts) of
- {value, {_, TagHosts}} when is_list(TagHosts) ->
- inets:start(),
- case (catch get_ftpd_host(TagHosts)) of
- {ok, Host} ->
- inets:stop(),
- [{ftp_remote_host, Host}|Config];
- _ ->
- inets:stop(),
- Reason = lists:flatten(
- io_lib:format("Could not find a valid "
- "FTP server for ~p (~p)",
- [FtpdTag, TagHosts])),
- {skip, Reason}
- end;
- _ ->
- Reason = lists:flatten(
- io_lib:format("No host(s) running FTPD server "
- "for ~p", [FtpdTag])),
- {skip, Reason}
- end.
-
-ftpd_fin(Config) ->
- lists:keydelete(ftp_remote_host, 1, Config).
-
-get_ftpd_host([]) ->
- {error, no_host};
-get_ftpd_host([Host|Hosts]) ->
- p("get_ftpd_host -> entry with"
- "~n Host: ~p"
- "~n", [Host]),
- case (catch ftp:open(Host, [{port, ?FTP_PORT}, {timeout, 20000}])) of
- {ok, Pid} ->
- (catch ftp:close(Pid)),
- {ok, Host};
- _ ->
- get_ftpd_host(Hosts)
- end.
-
-
-%%--------------------------------------------------------------------
-
-dirty_select_ftpd_host(Config) ->
- Hosts =
- case ct:get_config(ftpd_hosts) of
- undefined ->
- ftpd_hosts(data_dir(Config));
- H ->
- H
- end,
- dirty_select_ftpd_host2(Hosts).
-
-dirty_select_ftpd_host2([]) ->
- throw({error, not_found});
-dirty_select_ftpd_host2([{PlatformTag, Hosts} | PlatformHosts]) ->
- case dirty_select_ftpd_host3(Hosts) of
- none ->
- dirty_select_ftpd_host2(PlatformHosts);
- {ok, Host} ->
- {PlatformTag, Host}
- end.
-
-dirty_select_ftpd_host3([]) ->
- none;
-dirty_select_ftpd_host3([Host|Hosts]) when is_list(Host) ->
- case dirty_select_ftpd_host4(Host) of
- true ->
- {ok, Host};
- false ->
- dirty_select_ftpd_host3(Hosts)
- end;
-dirty_select_ftpd_host3([_|Hosts]) ->
- dirty_select_ftpd_host3(Hosts).
-
-%% This is a very simple and dirty test that there is a
-%% (FTP) deamon on the other end.
-dirty_select_ftpd_host4(Host) ->
- Port = 21,
- IpFam = inet,
- Opts = [IpFam, binary, {packet, 0}, {active, false}],
- Timeout = ?SECS(5),
- case gen_tcp:connect(Host, Port, Opts, Timeout) of
- {ok, Sock} ->
- gen_tcp:close(Sock),
- true;
- _Error ->
- false
- end.
-
-
-%%--------------------------------------------------------------------
-
-test_filenames() ->
- {ok, Host} = inet:gethostname(),
- File = Host ++ "_ftp_test.txt",
- NewFile = "new_" ++ File,
- {File, NewFile}.
-
-%%--------------------------------------------------------------------
-%% Function: init_per_testcase(Case, Config) -> Config
-%% Case - atom()
-%% Name of the test case that is about to be run.
-%% Config - [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Initiation before each test case
-%%
-%% Note: This function is free to add any key/value pairs to the Config
-%% variable, but should NOT alter/remove any existing entries.
-%%--------------------------------------------------------------------
-init_per_testcase(Case, Config)
- when (Case =:= open) orelse
- (Case =:= open_port) ->
- put(ftp_testcase, Case),
- io:format(user, "~n~n*** INIT ~w:~w ***~n~n", [?MODULE, Case]),
- inets:start(),
- NewConfig = data_dir(Config),
- watch_dog(NewConfig);
-
-init_per_testcase(Case, Config) ->
- put(ftp_testcase, Case),
- do_init_per_testcase(Case, Config).
-
-do_init_per_testcase(Case, Config)
- when (Case =:= passive_user) ->
- io:format(user, "~n~n*** INIT ~w:~w ***~n~n", [?MODULE,Case]),
- inets:start(),
- NewConfig = close_connection(watch_dog(Config)),
- Host = ftp_host(Config),
- case (catch ?ftp_open(Host, [{mode, passive}])) of
- {ok, Pid} ->
- [{ftp, Pid} | data_dir(NewConfig)];
- {skip, _} = SKIP ->
- SKIP
- end;
-
-do_init_per_testcase(Case, Config)
- when (Case =:= active_user) ->
- io:format(user, "~n~n*** INIT ~w:~w ***~n~n", [?MODULE, Case]),
- inets:start(),
- NewConfig = close_connection(watch_dog(Config)),
- Host = ftp_host(Config),
- case (catch ?ftp_open(Host, [{mode, active}])) of
- {ok, Pid} ->
- [{ftp, Pid} | data_dir(NewConfig)];
- {skip, _} = SKIP ->
- SKIP
- end;
-
-do_init_per_testcase(Case, Config)
- when (Case =:= progress_report_send) orelse
- (Case =:= progress_report_recv) ->
- inets:start(),
- io:format(user, "~n~n*** INIT ~w:~w ***~n~n", [?MODULE, Case]),
- NewConfig = close_connection(watch_dog(Config)),
- Host = ftp_host(Config),
- Opts = [{port, ?FTP_PORT},
- {verbose, true},
- {progress, {?MODULE, progress, #progress{}}}],
- case ftp:open(Host, Opts) of
- {ok, Pid} ->
- ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS),
- [{ftp, Pid} | data_dir(NewConfig)];
- {skip, _} = SKIP ->
- SKIP
- end;
-
-do_init_per_testcase(Case, Config) ->
- io:format(user,"~n~n*** INIT ~w:~w ***~n~n", [?MODULE, Case]),
- inets:start(),
- NewConfig = close_connection(watch_dog(Config)),
- Host = ftp_host(Config),
- Opts1 =
- if
- ((Case =:= passive_ip_v6_disabled) orelse
- (Case =:= active_ip_v6_disabled)) ->
- [{ipfamily, inet}];
- true ->
- []
- end,
- Opts2 =
- case string:tokens(atom_to_list(Case), [$_]) of
- ["active" | _] ->
- [{mode, active} | Opts1];
- _ ->
- [{mode, passive} | Opts1]
- end,
- case (catch ?ftp_open(Host, Opts2)) of
- {ok, Pid} ->
- ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS),
- [{ftp, Pid} | data_dir(NewConfig)];
- {skip, _} = SKIP ->
- SKIP
- end.
-
-
-%%--------------------------------------------------------------------
-%% Function: end_per_testcase(Case, Config) -> _
-%% Case - atom()
-%% Name of the test case that is about to be run.
-%% Config - [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%% Description: Cleanup after each test case
-%%--------------------------------------------------------------------
-end_per_testcase(_, Config) ->
- NewConfig = close_connection(Config),
- Dog = ?config(watchdog, NewConfig),
- inets:stop(),
- test_server:timetrap_cancel(Dog),
- ok.
-
-
-%%-------------------------------------------------------------------------
-%% Suites similar for all hosts.
-%%-------------------------------------------------------------------------
-
-passive(suite) ->
- [
- passive_user,
- passive_pwd,
- passive_cd,
- passive_lcd,
- passive_ls,
- passive_nlist,
- passive_rename,
- passive_delete,
- passive_mkdir,
- passive_send,
- passive_send_bin,
- passive_send_chunk,
- passive_append,
- passive_append_bin,
- passive_append_chunk,
- passive_recv,
- passive_recv_bin,
- passive_recv_chunk,
- passive_type,
- passive_quote,
- passive_ip_v6_disabled
- ].
-
-active(suite) ->
- [
- active_user,
- active_pwd,
- active_cd,
- active_lcd,
- active_ls,
- active_nlist,
- active_rename,
- active_delete,
- active_mkdir,
- active_send,
- active_send_bin,
- active_send_chunk,
- active_append,
- active_append_bin,
- active_append_chunk,
- active_recv,
- active_recv_bin,
- active_recv_chunk,
- active_type,
- active_quote,
- active_ip_v6_disabled
- ].
-
-
-
-%%-------------------------------------------------------------------------
-%% Test cases starts here.
-%%-------------------------------------------------------------------------
-
-open(doc) ->
- ["Open an ftp connection to a host and close the connection."
- "Also check that !-messages does not disturbe the connection"];
-open(suite) ->
- [];
-open(Config) when is_list(Config) ->
- Host = ftp_host(Config),
- (catch tc_open(Host)).
-
-
-tc_open(Host) ->
- p("tc_open -> entry with"
- "~n Host: ~p", [Host]),
- {ok, Pid} = ?ftp_open(Host, []),
- ok = ftp:close(Pid),
- p("tc_open -> try (ok) open 1"),
- {ok, Pid1} =
- ftp:open({option_list, [{host,Host},
- {port, ?FTP_PORT},
- {flags, [verbose]},
- {timeout, 30000}]}),
- ok = ftp:close(Pid1),
-
- p("tc_open -> try (fail) open 2"),
- {error, ehost} =
- ftp:open({option_list, [{port, ?FTP_PORT}, {flags, [verbose]}]}),
- {ok, Pid2} = ftp:open(Host),
- ok = ftp:close(Pid2),
-
- p("tc_open -> try (ok) open 3"),
- {ok, NewHost} = inet:getaddr(Host, inet),
- {ok, Pid3} = ftp:open(NewHost),
- ftp:user(Pid3, ?FTP_USER, ?FTP_PASS),
- Pid3 ! foobar,
- test_server:sleep(5000),
- {message_queue_len, 0} = process_info(self(), message_queue_len),
- ["200" ++ _] = ftp:quote(Pid3, "NOOP"),
- ok = ftp:close(Pid3),
-
- %% Bad input that has default values are ignored and the defult
- %% is used.
- p("tc_open -> try (ok) open 4"),
- {ok, Pid4} =
- ftp:open({option_list, [{host, Host},
- {port, badarg},
- {flags, [verbose]},
- {timeout, 30000}]}),
- test_server:sleep(100),
- ok = ftp:close(Pid4),
-
- p("tc_open -> try (ok) open 5"),
- {ok, Pid5} =
- ftp:open({option_list, [{host, Host},
- {port, ?FTP_PORT},
- {flags, [verbose]},
- {timeout, -42}]}),
- test_server:sleep(100),
- ok = ftp:close(Pid5),
-
- p("tc_open -> try (ok) open 6"),
- {ok, Pid6} =
- ftp:open({option_list, [{host, Host},
- {port, ?FTP_PORT},
- {flags, [verbose]},
- {mode, cool}]}),
- test_server:sleep(100),
- ok = ftp:close(Pid6),
-
- p("tc_open -> try (ok) open 7"),
- {ok, Pid7} =
- ftp:open(Host, [{port, ?FTP_PORT}, {verbose, true}, {timeout, 30000}]),
- ok = ftp:close(Pid7),
-
- p("tc_open -> try (ok) open 8"),
- {ok, Pid8} =
- ftp:open(Host, ?FTP_PORT),
- ok = ftp:close(Pid8),
-
- p("tc_open -> try (ok) open 9"),
- {ok, Pid9} =
- ftp:open(Host, [{port, ?FTP_PORT},
- {verbose, true},
- {timeout, 30000},
- {dtimeout, -99}]),
- ok = ftp:close(Pid9),
-
- p("tc_open -> try (ok) open 10"),
- {ok, Pid10} =
- ftp:open(Host, [{port, ?FTP_PORT},
- {verbose, true},
- {timeout, 30000},
- {dtimeout, "foobar"}]),
- ok = ftp:close(Pid10),
-
- p("tc_open -> try (ok) open 11"),
- {ok, Pid11} =
- ftp:open(Host, [{port, ?FTP_PORT},
- {verbose, true},
- {timeout, 30000},
- {dtimeout, 1}]),
- ok = ftp:close(Pid11),
-
- p("tc_open -> done"),
- ok.
-
-
-%%-------------------------------------------------------------------------
-
-open_port(doc) ->
- ["Open an ftp connection to a host with given port number "
- "and close the connection."]; % See also OTP-3892
-open_port(suite) ->
- [];
-open_port(Config) when is_list(Config) ->
- Host = ftp_host(Config),
- {ok, Pid} = ftp:open(Host, [{port, ?FTP_PORT}]),
- ok = ftp:close(Pid),
- {error, ehost} = ftp:open(?BAD_HOST, []),
- ok.
-
-
-%%-------------------------------------------------------------------------
-
-passive_user(doc) ->
- ["Open an ftp connection to a host, and logon as anonymous ftp."];
-passive_user(suite) ->
- [];
-passive_user(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- p("Pid: ~p",[Pid]),
- do_user(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_pwd(doc) ->
- ["Test ftp:pwd/1 & ftp:lpwd/1"];
-passive_pwd(suite) ->
- [];
-passive_pwd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_pwd(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_cd(doc) ->
- ["Open an ftp connection, log on as anonymous ftp, and cd to the"
- "directory \"/pub\" and the to the non-existent directory."];
-passive_cd(suite) ->
- [];
-passive_cd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_cd(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_lcd(doc) ->
- ["Test api function ftp:lcd/2"];
-passive_lcd(suite) ->
- [];
-passive_lcd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- PrivDir = ?config(priv_dir, Config),
- do_lcd(Pid, PrivDir).
-
-
-%%-------------------------------------------------------------------------
-
-passive_ls(doc) ->
- ["Open an ftp connection; ls the current directory, and the "
- "\"incoming\" directory. We assume that ls never fails, since "
- "it's output is meant to be read by humans. "];
-passive_ls(suite) ->
- [];
-passive_ls(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_ls(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_nlist(doc) ->
- ["Open an ftp connection; nlist the current directory, and the "
- "\"incoming\" directory. Nlist does not behave consistenly over "
- "operating systems. On some it is an error to have an empty "
- "directory."];
-passive_nlist(suite) ->
- [];
-passive_nlist(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- WildcardSupport = ?config(wildcard_support, Config),
- do_nlist(Pid, WildcardSupport).
-
-
-%%-------------------------------------------------------------------------
-
-passive_rename(doc) ->
- ["Transfer a file to the server, and rename it; then remove it."];
-passive_rename(suite) ->
- [];
-passive_rename(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_rename(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_delete(doc) ->
- ["Transfer a file to the server, and then delete it"];
-passive_delete(suite) ->
- [];
-passive_delete(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_delete(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_mkdir(doc) ->
- ["Make a remote directory, cd to it, go to parent directory, and "
- "remove the directory."];
-passive_mkdir(suite) ->
- [];
-passive_mkdir(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_mkdir(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_send(doc) ->
- ["Create a local file in priv_dir; open an ftp connection to a host; "
- "logon as anonymous ftp; cd to the directory \"incoming\"; lcd to "
- "priv_dir; send the file; get a directory listing and check that "
- "the file is on the list;, delete the remote file; get another listing "
- "and check that the file is not on the list; close the session; "
- "delete the local file."];
-passive_send(suite) ->
- [];
-passive_send(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_append(doc) ->
- ["Create a local file in priv_dir; open an ftp connection to a host; "
- "logon as anonymous ftp; cd to the directory \"incoming\"; lcd to "
- "priv_dir; append the file to a file at the remote side that not exits"
- "this will create the file at the remote side. Then it append the file "
- "again. When this is done it recive the remote file and control that"
- "the content is doubled in it.After that it will remove the files"];
-passive_append(suite) ->
- [];
-passive_append(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_send_bin(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "send a binary; remove file; close the connection."];
-passive_send_bin(suite) ->
- [];
-passive_send_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send_bin(Pid, Config).
-
-%%-------------------------------------------------------------------------
-
-passive_append_bin(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "append a binary twice; get the file and compare the content"
- "remove file; close the connection."];
-passive_append_bin(suite) ->
- [];
-passive_append_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_send_chunk(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "send chunks; remove file; close the connection."];
-passive_send_chunk(suite) ->
- [];
-passive_send_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_append_chunk(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "append chunks;control content remove file; close the connection."];
-passive_append_chunk(suite) ->
- [];
-passive_append_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_recv(doc) ->
- ["Create a local file and transfer it to the remote host into the "
- "the \"incoming\" directory, remove "
- "the local file. Then open a new connection; cd to \"incoming\", "
- "lcd to the private directory; receive the file; delete the "
- "remote file; close connection; check that received file is in "
- "the correct directory; cleanup." ];
-passive_recv(suite) ->
- [];
-passive_recv(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_recv_bin(doc) ->
- ["Send a binary to the remote host; and retreive "
- "the file; then remove the file."];
-passive_recv_bin(suite) ->
- [];
-passive_recv_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_recv_chunk(doc) ->
- ["Send a binary to the remote host; Connect again, and retreive "
- "the file; then remove the file."];
-passive_recv_chunk(suite) ->
- [];
-passive_recv_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_type(doc) ->
- ["Test that we can change btween ASCCI and binary transfer mode"];
-passive_type(suite) ->
- [];
-passive_type(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_type(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_quote(doc) ->
- [""];
-passive_quote(suite) ->
- [];
-passive_quote(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_quote(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_ip_v6_disabled(doc) ->
- ["Test ipv4 command PASV"];
-passive_ip_v6_disabled(suite) ->
- [];
-passive_ip_v6_disabled(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_user(doc) ->
- ["Open an ftp connection to a host, and logon as anonymous ftp."];
-active_user(suite) ->
- [];
-active_user(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_user(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_pwd(doc) ->
- ["Test ftp:pwd/1 & ftp:lpwd/1"];
-active_pwd(suite) ->
- [];
-active_pwd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_pwd(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_cd(doc) ->
- ["Open an ftp connection, log on as anonymous ftp, and cd to the"
- "directory \"/pub\" and to a non-existent directory."];
-active_cd(suite) ->
- [];
-active_cd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_cd(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_lcd(doc) ->
- ["Test api function ftp:lcd/2"];
-active_lcd(suite) ->
- [];
-active_lcd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- PrivDir = ?config(priv_dir, Config),
- do_lcd(Pid, PrivDir).
-
-
-%%-------------------------------------------------------------------------
-
-active_ls(doc) ->
- ["Open an ftp connection; ls the current directory, and the "
- "\"incoming\" directory. We assume that ls never fails, since "
- "it's output is meant to be read by humans. "];
-active_ls(suite) ->
- [];
-active_ls(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_ls(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_nlist(doc) ->
- ["Open an ftp connection; nlist the current directory, and the "
- "\"incoming\" directory. Nlist does not behave consistenly over "
- "operating systems. On some it is an error to have an empty "
- "directory."];
-active_nlist(suite) ->
- [];
-active_nlist(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- WildcardSupport = ?config(wildcard_support, Config),
- do_nlist(Pid, WildcardSupport).
-
-
-%%-------------------------------------------------------------------------
-
-active_rename(doc) ->
- ["Transfer a file to the server, and rename it; then remove it."];
-active_rename(suite) ->
- [];
-active_rename(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_rename(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_delete(doc) ->
- ["Transfer a file to the server, and then delete it"];
-active_delete(suite) ->
- [];
-active_delete(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_delete(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_mkdir(doc) ->
- ["Make a remote directory, cd to it, go to parent directory, and "
- "remove the directory."];
-active_mkdir(suite) ->
- [];
-active_mkdir(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_mkdir(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_send(doc) ->
- ["Create a local file in priv_dir; open an ftp connection to a host; "
- "logon as anonymous ftp; cd to the directory \"incoming\"; lcd to "
- "priv_dir; send the file; get a directory listing and check that "
- "the file is on the list;, delete the remote file; get another listing "
- "and check that the file is not on the list; close the session; "
- "delete the local file."];
-active_send(suite) ->
- [];
-active_send(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_append(doc) ->
- ["Create a local file in priv_dir; open an ftp connection to a host; "
- "logon as anonymous ftp; cd to the directory \"incoming\"; lcd to "
- "priv_dir; append the file to a file at the remote side that not exits"
- "this will create the file at the remote side. Then it append the file "
- "again. When this is done it recive the remote file and control that"
- "the content is doubled in it.After that it will remove the files"];
-active_append(suite) ->
- [];
-active_append(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_send_bin(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "send a binary; remove file; close the connection."];
-active_send_bin(suite) ->
- [];
-active_send_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_append_bin(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "append a binary twice; get the file and compare the content"
- "remove file; close the connection."];
-active_append_bin(suite) ->
- [];
-active_append_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_send_chunk(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "send chunks; remove file; close the connection."];
-active_send_chunk(suite) ->
- [];
-active_send_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_append_chunk(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "append chunks;control content remove file; close the connection."];
-active_append_chunk(suite) ->
- [];
-active_append_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_recv(doc) ->
- ["Create a local file and transfer it to the remote host into the "
- "the \"incoming\" directory, remove "
- "the local file. Then open a new connection; cd to \"incoming\", "
- "lcd to the private directory; receive the file; delete the "
- "remote file; close connection; check that received file is in "
- "the correct directory; cleanup." ];
-active_recv(suite) ->
- [];
-active_recv(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_recv_bin(doc) ->
- ["Send a binary to the remote host; and retreive "
- "the file; then remove the file."];
-active_recv_bin(suite) ->
- [];
-active_recv_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_recv_chunk(doc) ->
- ["Send a binary to the remote host; Connect again, and retreive "
- "the file; then remove the file."];
-active_recv_chunk(suite) ->
- [];
-active_recv_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_type(doc) ->
- ["Test that we can change btween ASCCI and binary transfer mode"];
-active_type(suite) ->
- [];
-active_type(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_type(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_quote(doc) ->
- [""];
-active_quote(suite) ->
- [];
-active_quote(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_quote(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_ip_v6_disabled(doc) ->
- ["Test ipv4 command PORT"];
-active_ip_v6_disabled(suite) ->
- [];
-active_ip_v6_disabled(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-api_missuse(doc)->
- ["Test that behaviour of the ftp process if the api is abused"];
-api_missuse(suite) -> [];
-api_missuse(Config) when is_list(Config) ->
- p("api_missuse -> entry"),
- Flag = process_flag(trap_exit, true),
- Pid = ?config(ftp, Config),
- Host = ftp_host(Config),
-
- %% Serious programming fault, connetion will be shut down
- p("api_missuse -> verify bad call termination (~p)", [Pid]),
- case (catch gen_server:call(Pid, {self(), foobar, 10}, infinity)) of
- {error, {connection_terminated, 'API_violation'}} ->
- ok;
- Unexpected1 ->
- exit({unexpected_result, Unexpected1})
- end,
- test_server:sleep(500),
- undefined = process_info(Pid, status),
-
- p("api_missuse -> start new client"),
- {ok, Pid2} = ?ftp_open(Host, []),
- %% Serious programming fault, connetion will be shut down
- p("api_missuse -> verify bad cast termination"),
- gen_server:cast(Pid2, {self(), foobar, 10}),
- test_server:sleep(500),
- undefined = process_info(Pid2, status),
-
- p("api_missuse -> start new client"),
- {ok, Pid3} = ?ftp_open(Host, []),
- %% Could be an innocent misstake the connection lives.
- p("api_missuse -> verify bad bang"),
- Pid3 ! foobar,
- test_server:sleep(500),
- {status, _} = process_info(Pid3, status),
- process_flag(trap_exit, Flag),
- p("api_missuse -> done"),
- ok.
-
-
-%%-------------------------------------------------------------------------
-
-not_owner(doc) ->
- ["Test what happens if a process that not owns the connection tries "
- "to use it"];
-not_owner(suite) ->
- [];
-not_owner(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- OtherPid = spawn_link(?MODULE, not_owner, [Pid, self()]),
-
- receive
- {OtherPid, ok} ->
- {ok, _} = ftp:pwd(Pid)
- end,
- ok.
-
-not_owner(FtpPid, Pid) ->
- {error, not_connection_owner} = ftp:pwd(FtpPid),
- ftp:close(FtpPid),
- test_server:sleep(100),
- Pid ! {self(), ok}.
-
-
-%%-------------------------------------------------------------------------
-
-
-progress_report(doc) ->
- ["Solaris 8 sparc test the option progress."];
-progress_report(suite) ->
- [progress_report_send, progress_report_recv].
-
-
-%% --
-
-progress_report_send(doc) ->
- ["Test the option progress for ftp:send/[2,3]"];
-progress_report_send(suite) ->
- [];
-progress_report_send(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- ReportPid =
- spawn_link(?MODULE, progress_report_receiver_init, [self(), 1]),
- do_send(Pid, Config),
- receive
- {ReportPid, ok} ->
- ok
- end.
-
-
-%% --
-
-progress_report_recv(doc) ->
- ["Test the option progress for ftp:recv/[2,3]"];
-progress_report_recv(suite) ->
- [];
-progress_report_recv(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- ReportPid =
- spawn_link(?MODULE, progress_report_receiver_init, [self(), 3]),
- do_recv(Pid, Config),
- receive
- {ReportPid, ok} ->
- ok
- end,
- ok.
-
-progress(#progress{} = Progress , _File, {file_size, Total}) ->
- progress_report_receiver ! start,
- Progress#progress{total = Total};
-progress(#progress{total = Total, current = Current}
- = Progress, _File, {transfer_size, 0}) ->
- progress_report_receiver ! finish,
- case Total of
- unknown ->
- ok;
- Current ->
- ok;
- _ ->
- test_server:fail({error, {progress, {total, Total},
- {current, Current}}})
- end,
- Progress;
-progress(#progress{current = Current} = Progress, _File,
- {transfer_size, Size}) ->
- progress_report_receiver ! update,
- Progress#progress{current = Current + Size}.
-
-progress_report_receiver_init(Pid, N) ->
- register(progress_report_receiver, self()),
- receive
- start ->
- ok
- end,
- progress_report_receiver_loop(Pid, N-1).
-
-progress_report_receiver_loop(Pid, N) ->
- receive
- update ->
- progress_report_receiver_loop(Pid, N);
- finish when N =:= 0 ->
- Pid ! {self(), ok};
- finish ->
- Pid ! {self(), ok},
- receive
- start ->
- ok
- end,
- progress_report_receiver_loop(Pid, N-1)
- end.
-
-
-%%-------------------------------------------------------------------------
-%% Ticket test cases
-%%-------------------------------------------------------------------------
-
-ticket_6035(doc) -> ["Test that owning process that exits with reason "
- "'shutdown' does not cause an error message."];
-ticket_6035(suite) -> [];
-ticket_6035(Config) ->
- p("ticket_6035 -> entry with"
- "~n Config: ~p", [Config]),
- PrivDir = ?config(priv_dir, Config),
- LogFile = filename:join([PrivDir,"ticket_6035.log"]),
- try
- begin
- p("ticket_6035 -> select ftpd host"),
- Host = dirty_select_ftpd_host(Config),
- p("ticket_6035 -> ftpd host selected (~p) => now spawn ftp owner", [Host]),
- Pid = spawn(?MODULE, open_wait_6035, [Host, self()]),
- p("ticket_6035 -> waiter spawned: ~p => now open error logfile (~p)",
- [Pid, LogFile]),
- error_logger:logfile({open, LogFile}),
- p("ticket_6035 -> error logfile open => now kill waiter process"),
- true = kill_ftp_proc_6035(Pid, LogFile),
- p("ticket_6035 -> waiter process killed => now close error logfile"),
- error_logger:logfile(close),
- p("ticket_6035 -> done", []),
- ok
- end
- catch
- throw:{error, not_found} ->
- {skip, "No available FTP servers"}
- end.
-
-kill_ftp_proc_6035(Pid, LogFile) ->
- p("kill_ftp_proc_6035 -> entry"),
- receive
- open ->
- p("kill_ftp_proc_6035 -> received open => now issue shutdown"),
- exit(Pid, shutdown),
- kill_ftp_proc_6035(Pid, LogFile);
- {open_failed, Reason} ->
- p("kill_ftp_proc_6035 -> received open_failed"
- "~n Reason: ~p", [Reason]),
- exit({skip, {failed_openening_server_connection, Reason}})
- after
- 5000 ->
- p("kill_ftp_proc_6035 -> timeout"),
- is_error_report_6035(LogFile)
- end.
-
-open_wait_6035({Tag, FtpServer}, From) ->
- p("open_wait_6035 -> try connect to [~p] ~s for ~p", [Tag, FtpServer, From]),
- case ftp:open(FtpServer, [{timeout, timer:seconds(15)}]) of
- {ok, Pid} ->
- p("open_wait_6035 -> connected (~p), now login", [Pid]),
- LoginResult = ftp:user(Pid,"anonymous","kldjf"),
- p("open_wait_6035 -> login result: ~p", [LoginResult]),
- From ! open,
- receive
- dummy ->
- p("open_wait_6035 -> received dummy"),
- ok
- after
- 10000 ->
- p("open_wait_6035 -> timeout"),
- ok
- end,
- p("open_wait_6035 -> done(ok)"),
- ok;
- {error, Reason} ->
- p("open_wait_6035 -> open failed"
- "~n Reason: ~p", [Reason]),
- From ! {open_failed, {Reason, FtpServer}},
- p("open_wait_6035 -> done(error)"),
- ok
- end.
-
-is_error_report_6035(LogFile) ->
- p("is_error_report_6035 -> entry"),
- Res =
- case file:read_file(LogFile) of
- {ok, Bin} ->
- Txt = binary_to_list(Bin),
- p("is_error_report_6035 -> logfile read: ~n~p", [Txt]),
- read_log_6035(Txt);
- _ ->
- false
- end,
- p("is_error_report_6035 -> logfile read result: "
- "~n ~p", [Res]),
- %% file:delete(LogFile),
- Res.
-
-read_log_6035("=ERROR REPORT===="++_Rest) ->
- p("read_log_6035 -> ERROR REPORT detected"),
- true;
-read_log_6035([H|T]) ->
- p("read_log_6035 -> OTHER: "
- "~p", [H]),
- read_log_6035(T);
-read_log_6035([]) ->
- p("read_log_6035 -> done"),
- false.
-
-
-%%--------------------------------------------------------------------
-%% Internal functions
-%%--------------------------------------------------------------------
-do_user(Pid) ->
- {error, euser} = ftp:user(Pid, ?BAD_USER, ?FTP_PASS),
- {error, euser} = ftp:user(Pid, ?FTP_USER++"\r\nPASS "++?FTP_PASS, ?FTP_PASS),
- {error, euser} = ftp:user(Pid, ?FTP_USER, ?FTP_PASS++"\r\nCWD ."),
- ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS),
- ok.
-
-do_pwd(Pid) ->
- {ok, "/"} = ftp:pwd(Pid),
- {ok, Path} = ftp:lpwd(Pid),
- {ok, Path} = file:get_cwd(),
- ok.
-
-do_cd(Pid) ->
- ok = ftp:cd(Pid, "/pub"),
- {error, epath} = ftp:cd(Pid, ?BAD_DIR),
- {error, efnamena} = ftp:cd(Pid, "/pub\r\nCWD ."),
- ok.
-
-do_lcd(Pid, Dir) ->
- ok = ftp:lcd(Pid, Dir),
- {error, epath} = ftp:lcd(Pid, ?BAD_DIR),
- ok.
-
-
-do_ls(Pid) ->
- {ok, _} = ftp:ls(Pid),
- {ok, _} = ftp:ls(Pid, "incoming"),
- %% neither nlist nor ls operates on a directory
- %% they operate on a pathname, which *can* be a
- %% directory, but can also be a filename or a group
- %% of files (including wildcards).
- {ok, _} = ftp:ls(Pid, "incom*"),
- %% but \r\n can't be in the wildcard
- {error, efnamena} = ftp:ls(Pid, "incoming\r\nCWD ."),
- ok.
-
-do_nlist(Pid, WildcardSupport) ->
- {ok, _} = ftp:nlist(Pid),
- {ok, _} = ftp:nlist(Pid, "incoming"),
- {error, efnamena} = ftp:ls(Pid, "incoming\r\nCWD ."),
- %% neither nlist nor ls operates on a directory
- %% they operate on a pathname, which *can* be a
- %% directory, but can also be a filename or a group
- %% of files (including wildcards).
- case WildcardSupport of
- true ->
- {ok, _} = ftp:nlist(Pid, "incom*"),
- ok;
- _ ->
- ok
- end.
-
-do_rename(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- LFile = ?config(file, Config),
- NewLFile = ?config(new_file, Config),
- AbsLFile = filename:absname(LFile, PrivDir),
- Contents = "ftp_SUITE test ...",
- ok = file:write_file(AbsLFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:lcd(Pid, PrivDir),
- ftp:delete(Pid, LFile), % reset
- ftp:delete(Pid, NewLFile), % reset
- ok = ftp:send(Pid, LFile),
- {error, epath} = ftp:rename(Pid, NewLFile, LFile),
- {error, efnamena} = ftp:rename(Pid, NewLFile++"\r\nRNTO "++LFile++"\r\nRNFR "++NewLFile, LFile),
- {error, efnamena} = ftp:rename(Pid, NewLFile, LFile++"\r\nCWD ."),
- ok = ftp:rename(Pid, LFile, NewLFile),
- ftp:delete(Pid, LFile), % cleanup
- ftp:delete(Pid, NewLFile), % cleanup
- ok.
-
-do_delete(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- LFile = ?config(file, Config),
- AbsLFile = filename:absname(LFile, PrivDir),
- Contents = "ftp_SUITE test ...",
- ok = file:write_file(AbsLFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:lcd(Pid, PrivDir),
- ftp:delete(Pid,LFile), % reset
- {error, efnamena} = ftp:delete(Pid,LFile++"\r\nCWD ."),
- ok = ftp:send(Pid, LFile),
- ok = ftp:delete(Pid,LFile),
- ok.
-
-do_mkdir(Pid) ->
- NewDir = "earl_" ++
- integer_to_list(inets_time_compat:unique_integer([positive])),
-
- ok = ftp:cd(Pid, "incoming"),
- {ok, CurrDir} = ftp:pwd(Pid),
- {error, efnamena} = ftp:mkdir(Pid, NewDir++"\r\nCWD ."),
- {error, efnamena} = ftp:rmdir(Pid, NewDir++"\r\nCWD ."),
- ok = ftp:mkdir(Pid, NewDir),
- ok = ftp:cd(Pid, NewDir),
- ok = ftp:cd(Pid, CurrDir),
- ok = ftp:rmdir(Pid, NewDir),
- ok.
-
-do_send(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- LFile = ?config(file, Config),
- RFile = LFile ++ ".remote",
- AbsLFile = filename:absname(LFile, PrivDir),
- Contents = "ftp_SUITE test ...",
- ok = file:write_file(AbsLFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:lcd(Pid, PrivDir),
- {error, efnamena} = ftp:send(Pid, LFile, RFile++"1\r\nCWD ."),
- ok = ftp:send(Pid, LFile, RFile),
- {ok, RFilesString} = ftp:nlist(Pid),
- RFiles = split(RFilesString),
- true = lists:member(RFile, RFiles),
- ok = ftp:delete(Pid, RFile),
- case ftp:nlist(Pid) of
- {error, epath} ->
- ok; % No files
- {ok, RFilesString1} ->
- RFiles1 = split(RFilesString1),
- false = lists:member(RFile, RFiles1)
- end,
- ok = file:delete(AbsLFile).
-
-do_append(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- LFile = ?config(file, Config),
- RFile = ?config(new_file, Config),
- AbsLFile = filename:absname(LFile, PrivDir),
- Contents = "ftp_SUITE test:appending\r\n",
-
- ok = file:write_file(AbsLFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:lcd(Pid, PrivDir),
-
- %% remove files from earlier failed test case
- ftp:delete(Pid, RFile),
- ftp:delete(Pid, LFile),
-
- {error, efnamena} = ftp:append(Pid, LFile, RFile++"1\r\nCWD ."),
- ok = ftp:append(Pid, LFile, RFile),
- ok = ftp:append(Pid, LFile, RFile),
- ok = ftp:append(Pid, LFile),
-
- %% Control the contents of the file
- {ok, Bin1} = ftp:recv_bin(Pid, RFile),
- ok = ftp:delete(Pid, RFile),
- ok = file:delete(AbsLFile),
- ok = check_content(binary_to_list(Bin1), Contents, double),
-
- {ok, Bin2} = ftp:recv_bin(Pid, LFile),
- ok = ftp:delete(Pid, LFile),
- ok = check_content(binary_to_list(Bin2), Contents, singel),
- ok.
-
-do_send_bin(Pid, Config) ->
- File = ?config(file, Config),
- Contents = "ftp_SUITE test ...",
- Bin = list_to_binary(Contents),
- ok = ftp:cd(Pid, "incoming"),
- {error, enotbinary} = ftp:send_bin(Pid, Contents, File),
- {error, efnamena} = ftp:send_bin(Pid, Bin, File++"1\r\nCWD ."),
- ok = ftp:send_bin(Pid, Bin, File),
- {ok, RFilesString} = ftp:nlist(Pid),
- RFiles = split(RFilesString),
- true = lists:member(File, RFiles),
- ok = ftp:delete(Pid, File),
- ok.
-
-do_append_bin(Pid, Config) ->
- File = ?config(file, Config),
- Contents = "ftp_SUITE test ...",
- Bin = list_to_binary(Contents),
- ok = ftp:cd(Pid, "incoming"),
- {error, enotbinary} = ftp:append_bin(Pid, Contents, File),
- {error, efnamena} = ftp:append_bin(Pid, Bin, File++"1\r\nCWD ."),
- ok = ftp:append_bin(Pid, Bin, File),
- ok = ftp:append_bin(Pid, Bin, File),
- %% Control the contents of the file
- {ok, Bin2} = ftp:recv_bin(Pid, File),
- ok = ftp:delete(Pid,File),
- ok = check_content(binary_to_list(Bin2),binary_to_list(Bin), double).
-
-do_send_chunk(Pid, Config) ->
- File = ?config(file, Config),
- Contents = "ftp_SUITE test ...",
- Bin = list_to_binary(Contents),
- ok = ftp:cd(Pid, "incoming"),
- {error, efnamena} = ftp:send_chunk_start(Pid, File++"1\r\nCWD ."),
- ok = ftp:send_chunk_start(Pid, File),
- {error, echunk} = ftp:cd(Pid, "incoming"),
- {error, enotbinary} = ftp:send_chunk(Pid, Contents),
- ok = ftp:send_chunk(Pid, Bin),
- ok = ftp:send_chunk(Pid, Bin),
- ok = ftp:send_chunk_end(Pid),
- {ok, RFilesString} = ftp:nlist(Pid),
- RFiles = split(RFilesString),
- true = lists:member(File, RFiles),
- ok = ftp:delete(Pid, File),
- ok.
-
-do_append_chunk(Pid, Config) ->
- File = ?config(file, Config),
- Contents = ["ER","LE","RL"],
- ok = ftp:cd(Pid, "incoming"),
- {error, efnamena} = ftp:append_chunk_start(Pid, File++"1\r\nCWD ."),
- ok = ftp:append_chunk_start(Pid, File),
- {error, enotbinary} = ftp:append_chunk(Pid, lists:nth(1,Contents)),
- ok = ftp:append_chunk(Pid,list_to_binary(lists:nth(1,Contents))),
- ok = ftp:append_chunk(Pid,list_to_binary(lists:nth(2,Contents))),
- ok = ftp:append_chunk(Pid,list_to_binary(lists:nth(3,Contents))),
- ok = ftp:append_chunk_end(Pid),
- %%Control the contents of the file
- {ok, Bin2} = ftp:recv_bin(Pid, File),
- ok = check_content(binary_to_list(Bin2),"ERL", double),
- ok = ftp:delete(Pid, File),
- ok.
-
-do_recv(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- File = ?config(file, Config),
- Newfile = ?config(new_file, Config),
- AbsFile = filename:absname(File, PrivDir),
- Contents = "ftp_SUITE:recv test ...",
- ok = file:write_file(AbsFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ftp:delete(Pid, File), % reset
- ftp:lcd(Pid, PrivDir),
- ok = ftp:send(Pid, File),
- ok = file:delete(AbsFile), % cleanup
- test_server:sleep(100),
- ok = ftp:lcd(Pid, PrivDir),
- {error, efnamena} = ftp:recv(Pid, File++"\r\nCWD ."),
- ok = ftp:recv(Pid, File),
- {ok, Files} = file:list_dir(PrivDir),
- true = lists:member(File, Files),
- ok = file:delete(AbsFile), % cleanup
- ok = ftp:recv(Pid, File, Newfile),
- ok = ftp:delete(Pid, File), % cleanup
- ok.
-
-do_recv_bin(Pid, Config) ->
- File = ?config(file, Config),
- Contents1 = "ftp_SUITE test ...",
- Bin1 = list_to_binary(Contents1),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:send_bin(Pid, Bin1, File),
- test_server:sleep(100),
- {error, efnamena} = ftp:recv_bin(Pid, File++"\r\nCWD ."),
- {ok, Bin2} = ftp:recv_bin(Pid, File),
- ok = ftp:delete(Pid, File), % cleanup
- Contents2 = binary_to_list(Bin2),
- Contents1 = Contents2,
- ok.
-
-do_recv_chunk(Pid, Config) ->
- File = ?config(file, Config),
- Data = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
- "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
- "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
- "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
- "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
- "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"
- "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH"
- "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-
- Contents1 = lists:flatten(lists:duplicate(10, Data)),
- Bin1 = list_to_binary(Contents1),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:type(Pid, binary),
- ok = ftp:send_bin(Pid, Bin1, File),
- test_server:sleep(100),
- {error, "ftp:recv_chunk_start/2 not called"} = recv_chunk(Pid, <<>>),
- {error, efnamena} = ftp:recv_chunk_start(Pid, File++"\r\nCWD ."),
- ok = ftp:recv_chunk_start(Pid, File),
- {ok, Contents2} = recv_chunk(Pid, <<>>),
- ok = ftp:delete(Pid, File), % cleanup
- ok = find_diff(Contents2, Contents1, 1),
- ok.
-
-do_type(Pid) ->
- ok = ftp:type(Pid, ascii),
- ok = ftp:type(Pid, binary),
- ok = ftp:type(Pid, ascii),
- {error, etype} = ftp:type(Pid, foobar),
- ok.
-
-do_quote(Pid) ->
- ["257 \"/\""++_Rest] = ftp:quote(Pid, "pwd"), %% 257
- [_| _] = ftp:quote(Pid, "help"),
- %% This negativ test causes some ftp servers to hang. This test
- %% is not important for the client, so we skip it for now.
- %%["425 Can't build data connection: Connection refused."]
- %% = ftp:quote(Pid, "list"),
- ok.
-
- watch_dog(Config) ->
- Dog = test_server:timetrap(inets_test_lib:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
-
- close_connection(Config) ->
- case ?config(ftp, Config) of
- Pid when is_pid(Pid) ->
- ok = ftp:close(Pid),
- lists:delete({ftp, Pid}, Config);
- _ ->
- Config
- end.
-
-ftp_host(Config) ->
- case ?config(ftp_remote_host, Config) of
- undefined ->
- exit({skip, "No host specified"});
- Host ->
- Host
- end.
-
-check_content(RContent, LContent, Amount) ->
- LContent2 = case Amount of
- double ->
- LContent ++ LContent;
- singel ->
- LContent
- end,
- case string:equal(RContent, LContent2) of
- true ->
- ok;
- false ->
- %% Find where the diff is
- Where = find_diff(RContent, LContent2, 1),
- Where
- end.
-
-find_diff(A, A, _) ->
- ok;
-find_diff([H|T1], [H|T2], Pos) ->
- find_diff(T1, T2, Pos+1);
-find_diff(RC, LC, Pos) ->
- {error, {diff, Pos, RC, LC}}.
-
-recv_chunk(Pid, Acc) ->
- case ftp:recv_chunk(Pid) of
- ok ->
- {ok, binary_to_list(Acc)};
- {ok, Bin} ->
- recv_chunk(Pid, <<Acc/binary, Bin/binary>>);
- Error ->
- Error
- end.
-
-split(Cs) ->
- split(Cs, [], []).
-
-split([$\r, $\n| Cs], I, Is) ->
- split(Cs, [], [lists:reverse(I)| Is]);
-split([C| Cs], I, Is) ->
- split(Cs, [C| I], Is);
-split([], I, Is) ->
- lists:reverse([lists:reverse(I)| Is]).
-
-do_ftp_open(Host, Opts) ->
- p("do_ftp_open -> entry with"
- "~n Host: ~p"
- "~n Opts: ~p", [Host, Opts]),
- case ftp:open(Host, Opts) of
- {ok, _} = OK ->
- OK;
- {error, Reason} ->
- Str =
- lists:flatten(
- io_lib:format("Unable to reach test FTP server ~p (~p)",
- [Host, Reason])),
- throw({skip, Str})
- end.
-
-
-passwd() ->
- Host =
- case inet:gethostname() of
- {ok, H} ->
- H;
- _ ->
- "localhost"
- end,
- "ftp_SUITE@" ++ Host.
-
-ftpd_hosts(Config) ->
- DataDir = ?config(data_dir, Config),
- FileName = filename:join([DataDir, "../ftp_SUITE_data/", ftpd_hosts]),
- p("FileName: ~p", [FileName]),
- case file:consult(FileName) of
- {ok, [Hosts]} when is_list(Hosts) ->
- Hosts;
- _ ->
- []
- end.
-
-wrapper(Prefix,doc,Func) ->
- Prefix++Func(doc);
-wrapper(_,X,Func) ->
- Func(X).
-
-data_dir(Config) ->
- case ?config(data_dir, Config) of
- List when (length(List) > 0) ->
- PathList = filename:split(List),
- {NewPathList,_} = lists:split((length(PathList)-1), PathList),
- DataDir = filename:join(NewPathList ++ [ftp_SUITE_data]),
- NewConfig =
- lists:keyreplace(data_dir,1,Config, {data_dir,DataDir}),
- NewConfig;
- _ -> Config
- end.
-
-
-
-p(F) ->
- p(F, []).
-
-p(F, A) ->
- case get(ftp_testcase) of
- undefined ->
- io:format("~w [~w] " ++ F ++ "~n", [?MODULE, self() | A]);
- TC when is_atom(TC) ->
- io:format("~w [~w] ~w:" ++ F ++ "~n", [?MODULE, self(), TC | A])
- end.
diff --git a/lib/inets/test/http_format_SUITE.erl b/lib/inets/test/http_format_SUITE.erl
index e977bd1b9b..a2b463e98c 100644
--- a/lib/inets/test/http_format_SUITE.erl
+++ b/lib/inets/test/http_format_SUITE.erl
@@ -55,13 +55,9 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_, Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
+ Config.
-end_per_testcase(_, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_, _) ->
ok.
%%-------------------------------------------------------------------------
diff --git a/lib/inets/test/httpc_SUITE.erl b/lib/inets/test/httpc_SUITE.erl
index 93b96e101f..932567ec55 100644
--- a/lib/inets/test/httpc_SUITE.erl
+++ b/lib/inets/test/httpc_SUITE.erl
@@ -42,7 +42,8 @@
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
suite() ->
- [{ct_hooks,[ts_install_cth]}].
+ [{ct_hooks,[ts_install_cth]}
+ ].
all() ->
[
@@ -67,6 +68,7 @@ real_requests()->
head,
get,
post,
+ delete,
post_stream,
patch,
async,
@@ -136,8 +138,9 @@ misc() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ ct:timetrap({seconds, 30}),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
inets_test_lib:start_apps([inets]),
ServerRoot = filename:join(PrivDir, "server_root"),
DocRoot = filename:join(ServerRoot, "htdocs"),
@@ -146,7 +149,7 @@ init_per_suite(Config) ->
end_per_suite(Config) ->
inets_test_lib:stop_apps([inets]),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
inets_test_lib:del_dirs(PrivDir),
ok.
@@ -158,6 +161,7 @@ init_per_group(misc = Group, Config) ->
Config;
init_per_group(Group, Config0) when Group =:= sim_https; Group =:= https->
+ ct:timetrap({seconds, 30}),
start_apps(Group),
StartSsl = try ssl:start()
catch
@@ -198,7 +202,15 @@ init_per_testcase(persistent_connection, Config) ->
{max_keep_alive_length, 3}], persistent_connection),
Config;
-
+init_per_testcase(wait_for_whole_response, Config) ->
+ ct:timetrap({seconds, 60*3}),
+ Config;
+init_per_testcase(Case, Config) when Case == post;
+ Case == delete;
+ Case == post_delete;
+ Case == post_stream ->
+ ct:timetrap({seconds, 30}),
+ Config;
init_per_testcase(_Case, Config) ->
Config.
@@ -256,6 +268,29 @@ post(Config) when is_list(Config) ->
{ok, {{_,504,_}, [_ | _], []}} =
httpc:request(post, {URL, [{"expect","100-continue"}],
"text/plain", "foobar"}, [], []).
+%%--------------------------------------------------------------------
+delete() ->
+ [{"Test http delete request against local server. We do in this case "
+ "only care about the client side of the the delete. The server "
+ "script will not actually use the delete data."}].
+delete(Config) when is_list(Config) ->
+ CGI = case test_server:os_type() of
+ {win32, _} ->
+ "/cgi-bin/cgi_echo.exe";
+ _ ->
+ "/cgi-bin/cgi_echo"
+ end,
+
+ URL = url(group_name(Config), CGI, Config),
+ Body = lists:duplicate(100, "1"),
+
+ {ok, {{_,200,_}, [_ | _], [_ | _]}} =
+ httpc:request(delete, {URL, [{"expect","100-continue"}],
+ "text/plain", Body}, [], []),
+
+ {ok, {{_,504,_}, [_ | _], []}} =
+ httpc:request(delete, {URL, [{"expect","100-continue"}],
+ "text/plain", "foobar"}, [], []).
%%--------------------------------------------------------------------
patch() ->
@@ -332,7 +367,7 @@ pipeline(Config) when is_list(Config) ->
{ok, _} = httpc:request(get, Request, [], [], pipeline),
%% Make sure pipeline session is registerd
- test_server:sleep(4000),
+ ct:sleep(4000),
keep_alive_requests(Request, pipeline).
%%--------------------------------------------------------------------
@@ -342,7 +377,7 @@ persistent_connection(Config) when is_list(Config) ->
{ok, _} = httpc:request(get, Request, [], [], persistent),
%% Make sure pipeline session is registerd
- test_server:sleep(4000),
+ ct:sleep(4000),
keep_alive_requests(Request, persistent).
%%-------------------------------------------------------------------------
@@ -370,7 +405,7 @@ async(Config) when is_list(Config) ->
save_to_file() ->
[{doc, "Test to save the http body to a file"}].
save_to_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FilePath = filename:join(PrivDir, "dummy.html"),
URL = url(group_name(Config), "/dummy.html", Config),
Request = {URL, []},
@@ -384,7 +419,7 @@ save_to_file(Config) when is_list(Config) ->
save_to_file_async() ->
[{doc,"Test to save the http body to a file"}].
save_to_file_async(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FilePath = filename:join(PrivDir, "dummy.html"),
URL = url(group_name(Config), "/dummy.html", Config),
Request = {URL, []},
@@ -844,7 +879,7 @@ headers() ->
headers(Config) when is_list(Config) ->
URL = url(group_name(Config), "/dummy.html", Config),
- DocRoot = ?config(doc_root, Config),
+ DocRoot = proplists:get_value(doc_root, Config),
{ok, FileInfo} =
file:read_file_info(filename:join([DocRoot,"dummy.html"])),
@@ -1188,11 +1223,11 @@ not_streamed_test(Request, To) ->
end.
url(http, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
{ok,Host} = inet:gethostname(),
?URL_START ++ Host ++ ":" ++ integer_to_list(Port) ++ End;
url(https, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
{ok,Host} = inet:gethostname(),
?TLS_URL_START ++ Host ++ ":" ++ integer_to_list(Port) ++ End;
url(sim_http, End, Config) ->
@@ -1200,10 +1235,10 @@ url(sim_http, End, Config) ->
url(sim_https, End, Config) ->
url(https, End, Config).
url(http, UserInfo, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
?URL_START ++ UserInfo ++ integer_to_list(Port) ++ End;
url(https, UserInfo, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
?TLS_URL_START ++ UserInfo ++ integer_to_list(Port) ++ End;
url(sim_http, UserInfo, End, Config) ->
url(http, UserInfo, End, Config);
@@ -1211,7 +1246,7 @@ url(sim_https, UserInfo, End, Config) ->
url(https, UserInfo, End, Config).
group_name(Config) ->
- GroupProp = ?config(tc_group_properties, Config),
+ GroupProp = proplists:get_value(tc_group_properties, Config),
proplists:get_value(name, GroupProp).
server_start(sim_http, _) ->
@@ -1233,11 +1268,11 @@ server_start(_, HttpdConfig) ->
proplists:get_value(port, Info).
server_config(http, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
[{port, 0},
{server_name,"httpc_test"},
{server_root, ServerRoot},
- {document_root, ?config(doc_root, Config)},
+ {document_root, proplists:get_value(doc_root, Config)},
{bind_address, any},
{ipfamily, inet_version()},
{mime_type, "text/plain"},
@@ -1259,7 +1294,7 @@ start_apps(_) ->
ok.
ssl_config(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
[{certfile, filename:join(DataDir, "ssl_server_cert.pem")},
{verify, verify_none}
].
@@ -1907,9 +1942,9 @@ handle_uri(_,"/once.html",_,_,Socket,_) ->
"Content-Length:32\r\n\r\n",
send(Socket, Head),
send(Socket, "<HTML><BODY>fo"),
- test_server:sleep(1000),
+ ct:sleep(1000),
send(Socket, "ob"),
- test_server:sleep(1000),
+ ct:sleep(1000),
send(Socket, "ar</BODY></HTML>");
handle_uri(_,"/invalid_http.html",_,_,_,_) ->
@@ -2045,7 +2080,7 @@ run_clients(NumClients, ServerPort, SeqNumServer) ->
end
end),
MRef = erlang:monitor(process, Pid),
- timer:sleep(10 + random:uniform(1334)),
+ timer:sleep(10 + rand:uniform(1334)),
{Id, Pid, MRef}
end,
lists:seq(1, NumClients)).
@@ -2053,7 +2088,7 @@ run_clients(NumClients, ServerPort, SeqNumServer) ->
wait4clients([], _Timeout) ->
ok;
wait4clients(Clients, Timeout) when Timeout > 0 ->
- Time = inets_time_compat:monotonic_time(),
+ Time = erlang:monotonic_time(),
receive
{'DOWN', _MRef, process, Pid, normal} ->
@@ -2134,7 +2169,7 @@ slowly_send_response(CSock, Answer) ->
[length(Answer), Answer])),
lists:foreach(
fun(Char) ->
- timer:sleep(random:uniform(500)),
+ timer:sleep(rand:uniform(500)),
gen_tcp:send(CSock, <<Char>>)
end,
Response).
@@ -2153,10 +2188,9 @@ parse_connection_type(Request) ->
end.
set_random_seed() ->
- Unique = inets_time_compat:unique_integer(),
-
+ Unique = erlang:unique_integer(),
A = erlang:phash2([make_ref(), self(), Unique]),
- random:seed(A, A, A).
+ rand:seed(exsplus, {A, A, A}).
otp_8739(doc) ->
diff --git a/lib/inets/test/httpc_cookie_SUITE.erl b/lib/inets/test/httpc_cookie_SUITE.erl
index 9a62bdb43f..8140967bca 100644
--- a/lib/inets/test/httpc_cookie_SUITE.erl
+++ b/lib/inets/test/httpc_cookie_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,17 +20,11 @@
%%
-module(httpc_cookie_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("stdlib/include/ms_transform.hrl").
-%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2, init_per_testcase/2, end_per_testcase/2]).
-
-%% Test cases must be exported.
--export([session_cookies_only/1, netscape_cookies/1,
- cookie_cancel/1, cookie_expires/1, persistent_cookie/1,
- domain_cookie/1, secure_cookie/1, update_cookie/1,
- update_cookie_session/1, cookie_attributes/1]).
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
-define(URL, "http://myhost.cookie.test.org").
-define(URL_DOMAIN, "http://myhost2.cookie.test.org").
@@ -38,86 +32,10 @@
%% Test server callback functions
-%%--------------------------------------------------------------------
-%% Function: init_per_testcase(TestCase, Config) -> Config
-%% Case - atom()
-%% Name of the test case that is about to be run.
-%% Config - [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Initiation before each test case
-%%
-%% Note: This function is free to add any key/value pairs to the Config
-%% variable, but should NOT alter/remove any existing entries.
-%% Description: Initiation before each test case
-%%--------------------------------------------------------------------
-init_per_testcase(session_cookies_only = Case, Config0) ->
- tsp("init_per_testcase(~p) -> entry with"
- "~n Config0: ~p", [Case, Config0]),
- Config = init_workdir(Case, Config0),
- application:start(inets),
- httpc:set_options([{cookies, verify}]),
- watch_dog(Config);
-
-init_per_testcase(Case, Config0) ->
- tsp("init_per_testcase(~p) -> entry with"
- "~n Config0: ~p", [Case, Config0]),
- Config = init_workdir(Case, Config0),
- CaseDir = ?config(case_top_dir, Config),
- application:load(inets),
- application:set_env(inets, services, [{httpc, {default, CaseDir}}]),
- application:start(inets),
- httpc:set_options([{cookies, verify}]),
- watch_dog(Config).
-
-watch_dog(Config) ->
- Dog = test_server:timetrap(inets_test_lib:minutes(10)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
-
-init_workdir(Case, Config) ->
- PrivDir = ?config(priv_dir, Config),
- SuiteTopDir = filename:join(PrivDir, ?MODULE),
- case file:make_dir(SuiteTopDir) of
- ok ->
- ok;
- {error, eexist} ->
- ok;
- Error ->
- tsf({failed_creating_subsuite_top_dir, Error})
- end,
-
- CaseTopDir = filename:join(SuiteTopDir, Case),
- ?line ok = file:make_dir(CaseTopDir),
- [{suite_top_dir, SuiteTopDir},
- {case_top_dir, CaseTopDir} | Config].
-
-
-%%--------------------------------------------------------------------
-%% Function: end_per_testcase(TestCase, Config) -> _
-%% Case - atom()
-%% Name of the test case that is about to be run.
-%% Config - [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%% Description: Cleanup after each test case
-%%--------------------------------------------------------------------
-end_per_testcase(Case, Config) ->
- tsp("end_per_testcase(~p) -> entry with"
- "~n Config: ~p", [Case, Config]),
- application:stop(inets),
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: all(Clause) -> TestCases
-%% Clause - atom() - suite | doc
-%% TestCases - [Case]
-%% Case - atom()
-%% Name of a test case.
-%% Description: Returns a list of all test cases in this test suite
-%%--------------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,15}}
+ ].
all() ->
[
@@ -148,17 +66,55 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
+init_per_testcase(session_cookies_only = Case, Config0) ->
+ Config = init_workdir(Case, Config0),
+ application:start(inets),
+ httpc:set_options([{cookies, verify}]),
+ Config;
+init_per_testcase(cookie_expires = Case, Config0) ->
+ Config = init_workdir(Case, Config0),
+ CaseDir = proplists:get_value(case_top_dir, Config),
+ application:start(inets),
+ application:set_env(inets, services, [{httpc, {default, CaseDir}}]),
+ application:start(inets),
+ httpc:set_options([{cookies, verify}]),
+ Config;
+init_per_testcase(Case, Config0) ->
+ Config = init_workdir(Case, Config0),
+ CaseDir = proplists:get_value(case_top_dir, Config),
+ application:load(inets),
+ application:set_env(inets, services, [{httpc, {default, CaseDir}}]),
+ application:start(inets),
+ httpc:set_options([{cookies, verify}]),
+ Config.
+
+init_workdir(Case, Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SuiteTopDir = filename:join(PrivDir, ?MODULE),
+ case file:make_dir(SuiteTopDir) of
+ ok ->
+ ok;
+ {error, eexist} ->
+ ok;
+ Error ->
+ ct:fail({failed_creating_subsuite_top_dir, Error})
+ end,
+
+ CaseTopDir = filename:join(SuiteTopDir, Case),
+ ok = file:make_dir(CaseTopDir),
+ [{suite_top_dir, SuiteTopDir},
+ {case_top_dir, CaseTopDir} | Config].
+
+end_per_testcase(_, _) ->
+ application:stop(inets).
+
%% Test cases starts here.
%%--------------------------------------------------------------------
-session_cookies_only(doc) ->
- ["Test that all cookies are handled as session cookies if there"
- "does not exist a directory to save presitent cookies in."];
-session_cookies_only(suite) ->
- [];
+session_cookies_only() ->
+ [{doc, "Test that all cookies are handled as session cookies if there"
+ "does not exist a directory to save presitent cookies in."}].
session_cookies_only(Config) when is_list(Config) ->
- tsp("session_cookies_only -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
";max-age=60000"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
@@ -166,36 +122,22 @@ session_cookies_only(Config) when is_list(Config) ->
httpc:cookie_header(?URL),
application:stop(inets),
application:start(inets),
- {"cookie", ""} = httpc:cookie_header(?URL),
-
- tsp("session_cookies_only -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
+ {"cookie", ""} = httpc:cookie_header(?URL).
-netscape_cookies(doc) ->
- ["Test that the old (original) format of cookies are accepted."];
-netscape_cookies(suite) ->
- [];
+netscape_cookies() ->
+ [{doc, "Test that the old (original) format of cookies are accepted."}].
netscape_cookies(Config) when is_list(Config) ->
- tsp("netscape_cookies -> Cookies 1: ~p", [httpc:which_cookies()]),
-
Expires = future_netscape_date(),
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/; "
"expires=" ++ Expires}],
httpc:store_cookies(SetCookieHeaders, ?URL),
{"cookie", "$Version=0; test_cookie=true; $Path=/"} =
- httpc:cookie_header(?URL),
+ httpc:cookie_header(?URL).
- tsp("netscape_cookies -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-cookie_cancel(doc) ->
- ["A cookie can be canceld by sending the same cookie with max-age=0 "
- "this test cheks that cookie is canceled."];
-cookie_cancel(suite) ->
- [];
+cookie_cancel() ->
+ [{doc, "A cookie can be canceld by sending the same cookie with max-age=0 "
+ "this test cheks that cookie is canceled."}].
cookie_cancel(Config) when is_list(Config) ->
- tsp("cookie_cancel -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
"max-age=60000"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
@@ -204,155 +146,60 @@ cookie_cancel(Config) when is_list(Config) ->
NewSetCookieHeaders =
[{"set-cookie", "test_cookie=true; path=/;max-age=0"}],
httpc:store_cookies(NewSetCookieHeaders, ?URL),
- {"cookie", ""} = httpc:cookie_header(?URL),
+ {"cookie", ""} = httpc:cookie_header(?URL).
- tsp("cookie_cancel -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-cookie_expires(doc) ->
- ["Test that a cookie is not used when it has expired"];
-cookie_expires(suite) ->
- [];
+cookie_expires() ->
+ [{doc, "Test that a cookie is not used when it has expired"}].
cookie_expires(Config) when is_list(Config) ->
- tsp("cookie_expires -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
"max-age=5"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
{"cookie", "$Version=0; test_cookie=true; $Path=/"} =
httpc:cookie_header(?URL),
- test_server:sleep(10000),
- {"cookie", ""} = httpc:cookie_header(?URL),
+ timer:sleep(10000),
+ {"cookie", ""} = httpc:cookie_header(?URL).
- tsp("cookie_expires -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-persistent_cookie(doc) ->
- ["Test domian cookie attribute"];
-persistent_cookie(suite) ->
- [];
+persistent_cookie() ->
+ [{doc, "Test domian cookie attribute"}].
persistent_cookie(Config) when is_list(Config)->
- tsp("persistent_cookie -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
"max-age=60000"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
{"cookie", "$Version=0; test_cookie=true; $Path=/"} =
httpc:cookie_header(?URL),
- CaseDir = ?config(case_top_dir, Config),
+ CaseDir = proplists:get_value(case_top_dir, Config),
application:stop(inets),
application:load(inets),
application:set_env(inets, services, [{httpc, {default, CaseDir}}]),
application:start(inets),
httpc:set_options([{cookies, enabled}]),
- {"cookie","$Version=0; test_cookie=true; $Path=/"} = httpc:cookie_header(?URL),
+ {"cookie","$Version=0; test_cookie=true; $Path=/"} = httpc:cookie_header(?URL).
- tsp("persistent_cookie -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-
-domain_cookie(doc) ->
- ["Test the domian cookie attribute"];
-domain_cookie(suite) ->
- [];
+domain_cookie() ->
+ [{doc, "Test the domian cookie attribute"}].
domain_cookie(Config) when is_list(Config) ->
- tsp("domain_cookie -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
"domain=.cookie.test.org"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
{"cookie","$Version=0; test_cookie=true; $Path=/; "
"$Domain=.cookie.test.org"} =
- httpc:cookie_header(?URL_DOMAIN),
+ httpc:cookie_header(?URL_DOMAIN).
- tsp("domain_cookie -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-
-secure_cookie(doc) ->
- ["Test the secure cookie attribute"];
-secure_cookie(suite) ->
- [];
+secure_cookie() ->
+ [{doc, "Test the secure cookie attribute"}].
secure_cookie(Config) when is_list(Config) ->
- tsp("secure_cookie -> entry with"
- "~n Config: ~p", [Config]),
-
- %% httpc:reset_cookies(),
-
- tsp("secure_cookie -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/; secure"}],
- tsp("secure_cookie -> store cookies (1)"),
ok = httpc:store_cookies(SetCookieHeaders, ?URL),
-
- tsp("secure_cookie -> Cookies 2: ~p", [httpc:which_cookies()]),
-
- tsp("secure_cookie -> check cookie (secure)"),
check_cookie("$Version=0; test_cookie=true; $Path=/", ?URL_SECURE),
-
- tsp("secure_cookie -> check cookie (plain)"),
check_cookie("", ?URL),
-
- tsp("secure_cookie -> store cookies (2)"),
SetCookieHeaders1 = [{"set-cookie", "test1_cookie=true; path=/; secure"}],
ok = httpc:store_cookies(SetCookieHeaders1, ?URL),
-
- tsp("secure_cookie -> Cookies 3: ~p", [httpc:which_cookies()]),
-
- tsp("secure_cookie -> cookie header (3)"),
check_cookie("$Version=0; test_cookie=true; $Path=/; "
"test1_cookie=true; $Path=/",
- ?URL_SECURE),
-%% {"cookie","$Version=0; test_cookie=true; $Path=/; "
-%% "test1_cookie=true; $Path=/"} = httpc:cookie_header(?URL_SECURE),
-
- tsp("secure_cookie -> Cookies 4: ~p", [httpc:which_cookies()]),
-
- tsp("secure_cookie -> done"),
- ok.
+ ?URL_SECURE).
-expect_cookie_header(No, ExpectedCookie) ->
- case httpc:cookie_header(?URL) of
- {"cookie", ExpectedCookie} ->
- ok;
- {"cookie", BadCookie} ->
- io:format("Bad Cookie ~w: "
- "~n Expected: ~s"
- "~n Received: ~s"
- "~n", [No, ExpectedCookie, BadCookie]),
- exit({bad_cookie_header, No, ExpectedCookie, BadCookie})
- end.
-
-print_cookies(Pre) ->
- io:format("~s: ", [Pre]),
- print_cookies2(httpc:which_cookies()).
-
-print_cookies2([]) ->
- ok;
-print_cookies2([{cookies, Cookies}|Rest]) ->
- print_cookies3("Cookies", Cookies),
- print_cookies2(Rest);
-print_cookies2([{session_cookies, Cookies}|Rest]) ->
- print_cookies3("Session Cookies", Cookies),
- print_cookies2(Rest);
-print_cookies2([_|Rest]) ->
- print_cookies2(Rest).
-
-print_cookies3(Header, []) ->
- io:format(" ~s: []", [Header]);
-print_cookies3(Header, Cookies) ->
- io:format(" ~s: ", [Header]),
- Prefix = " ",
- PrintCookie =
- fun(Cookie) ->
- io:format("~s", [httpc_cookie:image_of(Prefix, Cookie)])
- end,
- lists:foreach(PrintCookie, Cookies).
-
-update_cookie(doc)->
- ["Test that a (plain) cookie can be updated."];
-update_cookie(suite) ->
- [];
+update_cookie()->
+ [{doc, "Test that a (plain) cookie can be updated."}].
update_cookie(Config) when is_list(Config) ->
print_cookies("Cookies before store"),
@@ -377,10 +224,8 @@ update_cookie(Config) when is_list(Config) ->
"test_cookie=false; $Path=/",
expect_cookie_header(2, ExpectCookie2).
-update_cookie_session(doc)->
- ["Test that a session cookie can be updated."];
-update_cookie_session(suite) ->
- [];
+update_cookie_session()->
+ [{doc, "Test that a session cookie can be updated."}].
update_cookie_session(Config) when is_list(Config)->
print_cookies("Cookies before store"),
@@ -400,23 +245,57 @@ update_cookie_session(Config) when is_list(Config)->
expect_cookie_header(2, ExpectedCookie2).
-cookie_attributes(doc) ->
- ["Test attribute not covered by the other test cases"];
-cookie_attributes(suite) ->
- [];
+cookie_attributes() ->
+ [{doc, "Test attribute not covered by the other test cases"}].
cookie_attributes(Config) when is_list(Config) ->
SetCookieHeaders = [{"set-cookie", "test_cookie=true;version=1;"
"comment=foobar; "%% Comment
"foo=bar;" %% Nonsense should be ignored
"max-age=60000"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
- {"cookie","$Version=1; test_cookie=true"} = httpc:cookie_header(?URL),
- ok.
+ {"cookie","$Version=1; test_cookie=true"} = httpc:cookie_header(?URL).
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+print_cookies(Pre) ->
+ io:format("~s: ", [Pre]),
+ print_cookies2(httpc:which_cookies()).
+
+print_cookies2([]) ->
+ ok;
+print_cookies2([{cookies, Cookies}|Rest]) ->
+ print_cookies3("Cookies", Cookies),
+ print_cookies2(Rest);
+print_cookies2([{session_cookies, Cookies}|Rest]) ->
+ print_cookies3("Session Cookies", Cookies),
+ print_cookies2(Rest);
+print_cookies2([_|Rest]) ->
+ print_cookies2(Rest).
+
+print_cookies3(Header, []) ->
+ io:format(" ~s: []", [Header]);
+print_cookies3(Header, Cookies) ->
+ io:format(" ~s: ", [Header]),
+ Prefix = " ",
+ PrintCookie =
+ fun(Cookie) ->
+ io:format("~s", [httpc_cookie:image_of(Prefix, Cookie)])
+ end,
+ lists:foreach(PrintCookie, Cookies).
+
+expect_cookie_header(No, ExpectedCookie) ->
+ case httpc:cookie_header(?URL) of
+ {"cookie", ExpectedCookie} ->
+ ok;
+ {"cookie", BadCookie} ->
+ io:format("Bad Cookie ~w: "
+ "~n Expected: ~s"
+ "~n Received: ~s"
+ "~n", [No, ExpectedCookie, BadCookie]),
+ exit({bad_cookie_header, No, ExpectedCookie, BadCookie})
+ end.
check_cookie(Expect, URL) ->
case httpc:cookie_header(URL) of
@@ -426,12 +305,12 @@ check_cookie(Expect, URL) ->
case lists:prefix(Expect, Unexpected) of
true ->
Extra = Unexpected -- Expect,
- tsf({extra_cookie_info, Extra});
+ ct:fail({extra_cookie_info, Extra});
false ->
- tsf({unknown_cookie, Expect, Unexpected})
+ ct:fail({unknown_cookie, Expect, Unexpected})
end;
Bad ->
- tsf({bad_cookies, Bad})
+ ct:fail({bad_cookies, Bad})
end.
@@ -509,11 +388,3 @@ month_str(11) ->"Nov";
month_str(12) ->"Dec".
-tsp(F) ->
- tsp(F, []).
-tsp(F, A) ->
- test_server:format("~p ~p:" ++ F ++ "~n", [self(), ?MODULE | A]).
-
-tsf(Reason) ->
- test_server:fail(Reason).
-
diff --git a/lib/inets/test/httpc_proxy_SUITE.erl b/lib/inets/test/httpc_proxy_SUITE.erl
index 6d7af4ea5d..198b245399 100644
--- a/lib/inets/test/httpc_proxy_SUITE.erl
+++ b/lib/inets/test/httpc_proxy_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -141,7 +141,7 @@ end_per_testcase(_Case, Config) ->
%% internal functions
apps(_Case, Config) ->
- case ?config(protocol, Config) of
+ case proplists:get_value(protocol, Config) of
https ->
[ssl];
_ ->
@@ -438,7 +438,7 @@ header_value(Name, [{HeaderName,HeaderValue}|Headers]) ->
https_connect_error(doc) ->
["Error from CONNECT tunnel should be returned"];
https_connect_error(Config) when is_list(Config) ->
- {HttpServer,HttpPort} = ?config(http, Config),
+ {HttpServer,HttpPort} = proplists:get_value(http, Config),
Method = get,
%% using HTTPS scheme with HTTP port to trigger connection error
URL = "https://" ++ HttpServer ++ ":" ++
@@ -477,7 +477,7 @@ app_start(App, Config) ->
inets ->
application:stop(App),
ok = application:start(App),
- case ?config(proxy, Config) of
+ case proplists:get_value(proxy, Config) of
undefined -> ok;
{_,ProxySpec} ->
ok = httpc:set_options([{proxy,ProxySpec}])
@@ -495,7 +495,7 @@ app_stop(App) ->
application:stop(App).
make_cert_files(Alg, Prefix, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
CaInfo = {CaCert,_} = erl_make_certs:make_cert([{key,Alg}]),
{Cert,CertKey} = erl_make_certs:make_cert([{key,Alg},{issuer,CaInfo}]),
CaCertFile = filename:join(PrivDir, Prefix++"cacerts.pem"),
@@ -513,8 +513,8 @@ der_to_pem(File, Entries) ->
url(AbsPath, Config) ->
- Protocol = ?config(protocol, Config),
- {ServerName,ServerPort} = ?config(Protocol, Config),
+ Protocol = proplists:get_value(protocol, Config),
+ {ServerName,ServerPort} = proplists:get_value(Protocol, Config),
atom_to_list(Protocol) ++ "://" ++
ServerName ++ ":" ++ integer_to_list(ServerPort) ++
AbsPath.
@@ -548,8 +548,8 @@ init_local_proxy_string(String, Config) ->
|Config].
rcmd_local_proxy(Args, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Script = filename:join(DataDir, ?LOCAL_PROXY_SCRIPT),
rcmd(Script, Args, [{cd,PrivDir}]).
diff --git a/lib/inets/test/httpc_proxy_SUITE_data/apache2/apache2.conf b/lib/inets/test/httpc_proxy_SUITE_data/apache2/apache2.conf
index 03f80aaf6d..b139c4ca51 100644
--- a/lib/inets/test/httpc_proxy_SUITE_data/apache2/apache2.conf
+++ b/lib/inets/test/httpc_proxy_SUITE_data/apache2/apache2.conf
@@ -2,7 +2,7 @@
##
## %CopyrightBegin%
##
-## Copyright Ericsson AB 2012. All Rights Reserved.
+## Copyright Ericsson AB 2012-2016. All Rights Reserved.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/httpc_proxy_SUITE_data/server_proxy.sh b/lib/inets/test/httpc_proxy_SUITE_data/server_proxy.sh
index 473024ae63..e8b690a4a1 100755
--- a/lib/inets/test/httpc_proxy_SUITE_data/server_proxy.sh
+++ b/lib/inets/test/httpc_proxy_SUITE_data/server_proxy.sh
@@ -5,7 +5,7 @@
##
## %CopyrightBegin%
##
-## Copyright Ericsson AB 2012. All Rights Reserved.
+## Copyright Ericsson AB 2012-2016. All Rights Reserved.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/httpd_1_0.erl b/lib/inets/test/httpd_1_0.erl
index 7535b148ae..f61dc3c3fd 100644
--- a/lib/inets/test/httpd_1_0.erl
+++ b/lib/inets/test/httpd_1_0.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/httpd_1_1.erl b/lib/inets/test/httpd_1_1.erl
index d3a1e3672a..3755ed117b 100644
--- a/lib/inets/test/httpd_1_1.erl
+++ b/lib/inets/test/httpd_1_1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -233,14 +233,6 @@ trace(Type, Port, Host, Node)->
"Max-Forwards:2\r\n\r\n",
[{statuscode, 200}]).
head(Type, Port, Host, Node)->
- %% mod_include
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- "HEAD /fsize.shtml HTTP/1.0\r\n\r\n",
- [{statuscode, 200},
- {version, "HTTP/1.0"}]),
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- "HEAD /fsize.shtml HTTP/1.1\r\nhost:" ++
- Host ++ "\r\n\r\n", [{statuscode, 200}]),
%% mod_esi
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"HEAD /cgi-bin/erl/httpd_example/newformat"
diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl
index 87c504af74..3194b5ad3d 100644
--- a/lib/inets/test/httpd_SUITE.erl
+++ b/lib/inets/test/httpd_SUITE.erl
@@ -46,7 +46,9 @@
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
suite() ->
- [{ct_hooks,[ts_install_cth]}].
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds, 120}}
+ ].
all() ->
[
@@ -150,8 +152,8 @@ load() ->
].
init_per_suite(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
inets_test_lib:stop_apps([inets]),
ServerRoot = filename:join(PrivDir, "server_root"),
inets_test_lib:del_dirs(ServerRoot),
@@ -219,22 +221,22 @@ init_per_group(http_0_9, Config) ->
[{http_version, "HTTP/0.9"} | Config]
end;
init_per_group(http_htaccess = Group, Config) ->
- Path = ?config(doc_root, Config),
+ Path = proplists:get_value(doc_root, Config),
catch remove_htaccess(Path),
- create_htaccess_data(Path, ?config(address, Config)),
+ create_htaccess_data(Path, proplists:get_value(address, Config)),
ok = start_apps(Group),
init_httpd(Group, [{type, ip_comm} | Config]);
init_per_group(https_htaccess = Group, Config) ->
- Path = ?config(doc_root, Config),
+ Path = proplists:get_value(doc_root, Config),
catch remove_htaccess(Path),
- create_htaccess_data(Path, ?config(address, Config)),
+ create_htaccess_data(Path, proplists:get_value(address, Config)),
init_ssl(Group, Config);
init_per_group(auth_api, Config) ->
[{auth_prefix, ""} | Config];
init_per_group(auth_api_dets, Config) ->
[{auth_prefix, "dets_"} | Config];
init_per_group(auth_api_mnesia, Config) ->
- start_mnesia(?config(node, Config)),
+ start_mnesia(proplists:get_value(node, Config)),
[{auth_prefix, "mnesia_"} | Config];
init_per_group(_, Config) ->
Config.
@@ -272,7 +274,8 @@ end_per_group(_, _) ->
%%--------------------------------------------------------------------
init_per_testcase(Case, Config) when Case == host; Case == trace ->
- Prop = ?config(tc_group_properties, Config),
+ ct:timetrap({seconds, 20}),
+ Prop = proplists:get_value(tc_group_properties, Config),
Name = proplists:get_value(name, Prop),
Cb = case Name of
http_1_0 ->
@@ -283,11 +286,13 @@ init_per_testcase(Case, Config) when Case == host; Case == trace ->
[{version_cb, Cb} | proplists:delete(version_cb, Config)];
init_per_testcase(range, Config) ->
- DocRoot = ?config(doc_root, Config),
+ ct:timetrap({seconds, 20}),
+ DocRoot = proplists:get_value(doc_root, Config),
create_range_data(DocRoot),
Config;
init_per_testcase(_, Config) ->
+ ct:timetrap({seconds, 20}),
Config.
end_per_testcase(_Case, _Config) ->
@@ -301,10 +306,10 @@ head() ->
[{doc, "HTTP HEAD request for static page"}].
head(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), proplists:get_value(node, Config),
http_request("HEAD /index.html ", Version, Host),
[{statuscode, head_status(Version)},
{version, Version}]).
@@ -313,13 +318,13 @@ get() ->
[{doc, "HTTP GET request for static page"}].
get(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request("GET /index.html ", Version, Host),
[{statuscode, 200},
{header, "Content-Type", "text/html"},
@@ -340,8 +345,8 @@ basic_auth() ->
[{doc, "Test Basic authentication with WWW-Authenticate header"}].
basic_auth(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
basic_auth_requiered(Config),
%% Authentication OK! ["one:OnePassword" user first in user list]
ok = auth_status(auth_request("/open/dummy.html", "one", "onePassword", Version, Host), Config,
@@ -381,15 +386,15 @@ auth_api() ->
[{doc, "Test mod_auth API"}].
auth_api(Config) when is_list(Config) ->
- Prefix = ?config(auth_prefix, Config),
+ Prefix = proplists:get_value(auth_prefix, Config),
do_auth_api(Prefix, Config).
do_auth_api(AuthPrefix, Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
- ServerRoot = ?config(server_root, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Node = proplists:get_value(node, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
ok = http_status("GET / ", Config,
[{statuscode, 200}]),
ok = auth_status(auth_request("/", "one", "WrongPassword", Version, Host), Config,
@@ -551,12 +556,12 @@ ipv6(Config) when is_list(Config) ->
{ok, Hostname0} = inet:gethostname(),
case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
true ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
URI = http_request("GET / ", Version, Host),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), [inet6],
- ?config(code, Config),
+ httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), [inet6],
+ proplists:get_value(code, Config),
URI,
[{statuscode, 200}, {version, Version}]);
false ->
@@ -577,11 +582,11 @@ htaccess() ->
[{doc, "Test mod_auth API"}].
htaccess(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ Port = proplists:get_value(port, Config),
+ Node = proplists:get_value(node, Config),
%% Control that authentication required!
%% Control that the pages that shall be
%% authenticated really need authenticatin
@@ -692,23 +697,23 @@ host() ->
[{doc, "Test host header"}].
host(Config) when is_list(Config) ->
- Cb = ?config(version_cb, Config),
- Cb:host(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ Cb = proplists:get_value(version_cb, Config),
+ Cb:host(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
chunked() ->
[{doc, "Check that the server accepts chunked requests."}].
chunked(Config) when is_list(Config) ->
- httpd_1_1:chunked(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ httpd_1_1:chunked(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
expect() ->
["Check that the server handles request with the expect header "
"field appropiate"].
expect(Config) when is_list(Config) ->
- httpd_1_1:expect(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ httpd_1_1:expect(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
max_clients_1_1() ->
[{doc, "Test max clients limit"}].
@@ -763,10 +768,10 @@ esi(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
mod_esi_chunk_timeout(Config) when is_list(Config) ->
- ok = httpd_1_1:mod_esi_chunk_timeout(?config(type, Config),
- ?config(port, Config),
- ?config(host, Config),
- ?config(node, Config)).
+ ok = httpd_1_1:mod_esi_chunk_timeout(proplists:get_value(type, Config),
+ proplists:get_value(port, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
cgi() ->
@@ -847,7 +852,7 @@ cgi(Config) when is_list(Config) ->
cgi_chunked_encoding_test() ->
[{doc, "Test chunked encoding together with mod_cgi "}].
cgi_chunked_encoding_test(Config) when is_list(Config) ->
- Host = ?config(host, Config),
+ Host = proplists:get_value(host, Config),
Script =
case test_server:os_type() of
{win32, _} ->
@@ -859,9 +864,9 @@ cgi_chunked_encoding_test(Config) when is_list(Config) ->
["GET " ++ Script ++ " HTTP/1.1\r\nHost:"++ Host ++"\r\n\r\n",
"GET /cgi-bin/erl/httpd_example/newformat HTTP/1.1\r\nHost:"
++ Host ++"\r\n\r\n"],
- httpd_1_1:mod_cgi_chunked_encoding_test(?config(type, Config), ?config(port, Config),
+ httpd_1_1:mod_cgi_chunked_encoding_test(proplists:get_value(type, Config), proplists:get_value(port, Config),
Host,
- ?config(node, Config),
+ proplists:get_value(node, Config),
Requests).
%%-------------------------------------------------------------------------
alias_1_1() ->
@@ -921,52 +926,52 @@ range() ->
[{doc, "Test Range header"}].
range(Config) when is_list(Config) ->
- httpd_1_1:range(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ httpd_1_1:range(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
if_modified_since() ->
[{doc, "Test If-Modified-Since header"}].
if_modified_since(Config) when is_list(Config) ->
- httpd_1_1:if_test(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config),
- ?config(doc_root, Config)).
+ httpd_1_1:if_test(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config),
+ proplists:get_value(doc_root, Config)).
%%-------------------------------------------------------------------------
trace() ->
[{doc, "Test TRACE method"}].
trace(Config) when is_list(Config) ->
- Cb = ?config(version_cb, Config),
- Cb:trace(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ Cb = proplists:get_value(version_cb, Config),
+ Cb:trace(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
light() ->
["Test light load"].
light(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config), 10).
+ httpd_load:load_test(proplists:get_value(type, Config), proplists:get_value(port, Config), proplists:get_value(host, Config),
+ proplists:get_value(node, Config), 10).
%%-------------------------------------------------------------------------
medium() ->
["Test medium load"].
medium(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config), 100).
+ httpd_load:load_test(proplists:get_value(type, Config), proplists:get_value(port, Config), proplists:get_value(host, Config),
+ proplists:get_value(node, Config), 100).
%%-------------------------------------------------------------------------
heavy() ->
["Test heavy load"].
heavy(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config),
+ httpd_load:load_test(proplists:get_value(type, Config), proplists:get_value(port, Config), proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
1000).
%%-------------------------------------------------------------------------
content_length() ->
["Tests that content-length is correct OTP-5775"].
content_length(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), proplists:get_value(node, Config),
http_request("GET /cgi-bin/erl/httpd_example:get_bin ",
Version, Host),
[{statuscode, 200},
@@ -976,10 +981,10 @@ content_length(Config) ->
bad_hex() ->
["Tests that a URI with a bad hexadecimal code is handled OTP-6003"].
bad_hex(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), proplists:get_value(node, Config),
http_request("GET http://www.erlang.org/%skalle ",
Version, Host),
[{statuscode, 400},
@@ -988,10 +993,10 @@ bad_hex(Config) ->
missing_CR() ->
["Tests missing CR in delimiter OTP-7304"].
missing_CR(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), proplists:get_value(node, Config),
http_request_missing_CR("GET /index.html ", Version, Host),
[{statuscode, 200},
{version, Version}]).
@@ -1002,12 +1007,12 @@ customize() ->
customize(Config) when is_list(Config) ->
Version = "HTTP/1.1",
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request("GET /index.html ", Version, Host),
[{statuscode, 200},
{header, "Content-Type", "text/html"},
@@ -1020,12 +1025,12 @@ add_default() ->
add_default(Config) when is_list(Config) ->
Version = "HTTP/1.1",
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request("GET /index.html ", Version, Host),
[{statuscode, 200},
{header, "Content-Type", "text/html"},
@@ -1037,24 +1042,24 @@ add_default(Config) when is_list(Config) ->
max_header() ->
["Denial Of Service (DOS) attack, prevented by max_header"].
max_header(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
case Version of
"HTTP/0.9" ->
{skip, not_implemented};
_ ->
- dos_hostname(?config(type, Config), ?config(port, Config), Host,
- ?config(node, Config), Version, ?MAX_HEADER_SIZE)
+ dos_hostname(proplists:get_value(type, Config), proplists:get_value(port, Config), Host,
+ proplists:get_value(node, Config), Version, ?MAX_HEADER_SIZE)
end.
%%-------------------------------------------------------------------------
max_content_length() ->
["Denial Of Service (DOS) attack, prevented by max_content_length"].
max_content_length(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- garbage_content_length(?config(type, Config), ?config(port, Config), Host,
- ?config(node, Config), Version).
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ garbage_content_length(proplists:get_value(type, Config), proplists:get_value(port, Config), Host,
+ proplists:get_value(node, Config), Version).
%%-------------------------------------------------------------------------
security_1_1(Config) when is_list(Config) ->
@@ -1066,15 +1071,15 @@ security_1_0(Config) when is_list(Config) ->
security() ->
["Test mod_security"].
security(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
- ServerRoot = ?config(server_root, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Node = proplists:get_value(node, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
global:register_name(mod_security_test, self()), % Receive events
- test_server:sleep(5000),
+ ct:sleep(5000),
OpenDir = filename:join([ServerRoot, "htdocs", "open"]),
@@ -1172,7 +1177,7 @@ security(Config) ->
["one"] = list_auth_users(Node, Port, OpenDir),
%% Wait for successful auth to timeout.
- test_server:sleep(?AUTH_TIMEOUT*1001),
+ ct:sleep(?AUTH_TIMEOUT*1001),
[] = list_auth_users(Node, Port),
@@ -1201,11 +1206,11 @@ disturbing_reconfiger_dies(Config) when is_list(Config) ->
do_reconfiger_dies([{http_version, "HTTP/1.1"} | Config], disturbing).
do_reconfiger_dies(Config, DisturbingType) ->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
+ Server = proplists:get_value(server_pid, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(type, Config),
HttpdConfig = httpd:info(Server),
BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
@@ -1236,11 +1241,11 @@ disturbing_0_9(Config) when is_list(Config) ->
disturbing([{http_version, "HTTP/0.9"} | Config]).
disturbing(Config) when is_list(Config)->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
+ Server = proplists:get_value(server_pid, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(type, Config),
HttpdConfig = httpd:info(Server),
BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
{ok, Socket} = inets_test_lib:connect_bin(Type, Host, Port, transport_opts(Type, Config)),
@@ -1268,11 +1273,11 @@ non_disturbing_0_9(Config) when is_list(Config) ->
non_disturbing([{http_version, "HTTP/0.9"} | Config]).
non_disturbing(Config) when is_list(Config)->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
+ Server = proplists:get_value(server_pid, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(type, Config),
HttpdConfig = httpd:info(Server),
BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
@@ -1406,15 +1411,15 @@ mime_types_format(Config) when is_list(Config) ->
%% Internal functions -----------------------------------
%%--------------------------------------------------------------------
url(http, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
{ok,Host} = inet:gethostname(),
?URL_START ++ Host ++ ":" ++ integer_to_list(Port) ++ End.
do_max_clients(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(type, Config),
Request = http_request("GET /index.html ", Version, Host),
BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
@@ -1424,7 +1429,7 @@ do_max_clients(Config) ->
ok = httpd_test_lib:verify_request(Type, Host,
Port,
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
Request,
[{statuscode, 503},
{version, Version}]),
@@ -1437,7 +1442,7 @@ do_max_clients(Config) ->
ok = httpd_test_lib:verify_request(Type, Host,
Port,
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
Request,
[{statuscode, 200},
{version, Version}]).
@@ -1516,7 +1521,7 @@ server_start(_, HttpdConfig) ->
{Pid, proplists:get_value(port, Info)}.
init_ssl(Group, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
CaKey = {_Trusted,_} =
erl_make_certs:make_cert([{key, dsa},
{subject,
@@ -1567,54 +1572,54 @@ server_config(https_custom, Config) ->
server_config(https_limit, Config) ->
[{max_clients, 1}] ++ server_config(https, Config);
server_config(http_basic_auth, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_conf(ServerRoot) ++ server_config(http, Config);
server_config(https_basic_auth, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_conf(ServerRoot) ++ server_config(https, Config);
server_config(http_auth_api, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, plain) ++ server_config(http, Config);
server_config(https_auth_api, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, plain) ++ server_config(https, Config);
server_config(http_auth_api_dets, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, dets) ++ server_config(http, Config);
server_config(https_auth_api_dets, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, dets) ++ server_config(https, Config);
server_config(http_auth_api_mnesia, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, mnesia) ++ server_config(http, Config);
server_config(https_auth_api_mnesia, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, mnesia) ++ server_config(https, Config);
server_config(http_htaccess, Config) ->
auth_access_conf() ++ server_config(http, Config);
server_config(https_htaccess, Config) ->
auth_access_conf() ++ server_config(https, Config);
server_config(http_security, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
tl(auth_conf(ServerRoot)) ++ security_conf(ServerRoot) ++ server_config(http, Config);
server_config(https_security, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
tl(auth_conf(ServerRoot)) ++ security_conf(ServerRoot) ++ server_config(https, Config);
server_config(http_mime_types, Config0) ->
Config1 = basic_conf() ++ server_config(http, Config0),
- ServerRoot = ?config(server_root, Config0),
+ ServerRoot = proplists:get_value(server_root, Config0),
MimeTypesFile = filename:join([ServerRoot,"config", "mime.types"]),
[{mime_types, MimeTypesFile} | proplists:delete(mime_types, Config1)];
server_config(http, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
[{port, 0},
{socket_type, {ip_comm, [{nodelay, true}]}},
{server_name,"httpd_test"},
{server_root, ServerRoot},
- {document_root, ?config(doc_root, Config)},
+ {document_root, proplists:get_value(doc_root, Config)},
{bind_address, any},
- {ipfamily, ?config(ipfamily, Config)},
+ {ipfamily, proplists:get_value(ipfamily, Config)},
{max_header_size, 256},
{max_header_action, close},
{directory_index, ["index.html", "welcome.html"]},
@@ -1629,7 +1634,7 @@ server_config(http, Config) ->
];
server_config(https, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
[{socket_type, {essl,
[{nodelay, true},
{cacertfile,
@@ -1803,35 +1808,35 @@ mod_security_conf(SecFile, Dir) ->
http_status(Request, Config, Expected) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request(Request, Version, Host),
Expected ++ [{version, Version}]).
http_status(Request, HeadersAndBody, Config, Expected) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request(Request, Version, Host, HeadersAndBody),
Expected ++ [{version, Version}]).
auth_status(AuthRequest, Config, Expected) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
AuthRequest,
Expected ++ [{version, Version}]).
@@ -1883,11 +1888,11 @@ cleanup_mnesia() ->
ok.
transport_opts(ssl, Config) ->
- PrivDir = ?config(priv_dir, Config),
- [?config(ipfamily, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ [proplists:get_value(ipfamily, Config),
{cacertfile, filename:join(PrivDir, "public_key_cacert.pem")}];
transport_opts(_, Config) ->
- [?config(ipfamily, Config)].
+ [proplists:get_value(ipfamily, Config)].
%%% mod_range
@@ -2186,4 +2191,4 @@ peer(Config) ->
"true";
_ ->
"false"
- end. \ No newline at end of file
+ end.
diff --git a/lib/inets/test/httpd_basic_SUITE.erl b/lib/inets/test/httpd_basic_SUITE.erl
index db7f3c525d..f413248092 100644
--- a/lib/inets/test/httpd_basic_SUITE.erl
+++ b/lib/inets/test/httpd_basic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,8 @@
-define(URL_START, "http://localhost:").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() -> [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
all() ->
[uri_too_long_414,
@@ -66,8 +67,8 @@ end_per_group(_GroupName, Config) ->
init_per_suite(Config) ->
inets_test_lib:stop_apps([inets]),
inets_test_lib:start_apps([inets]),
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Dummy =
"<HTML>
@@ -152,7 +153,7 @@ end_per_testcase(_Case, Config) ->
uri_too_long_414() ->
[{doc, "Test that too long uri's get 414 HTTP code"}].
uri_too_long_414(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{max_uri_size, 10}
| HttpdConf]),
Info = httpd:info(Pid),
@@ -173,7 +174,7 @@ uri_too_long_414(Config) when is_list(Config) ->
header_too_long_413() ->
[{doc,"Test that too long headers's get 413 HTTP code"}].
header_too_long_413(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{max_header_size, 10}
| HttpdConf]),
Info = httpd:info(Pid),
@@ -192,7 +193,7 @@ header_too_long_413(Config) when is_list(Config) ->
entity_too_long() ->
[{doc, "Test that too long versions and method strings are rejected"}].
entity_too_long(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, HttpdConf),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -259,7 +260,7 @@ erl_script_nocache_opt(doc) ->
erl_script_nocache_opt(suite) ->
[];
erl_script_nocache_opt(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{port, 0}, {erl_script_nocache, true} | HttpdConf]),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -282,7 +283,7 @@ erl_script_nocache_opt(Config) when is_list(Config) ->
escaped_url_in_error_body() ->
[{doc, "Test Url-encoding see OTP-8940"}].
escaped_url_in_error_body(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{port, 0} | HttpdConf]),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -324,7 +325,7 @@ keep_alive_timeout(doc) ->
keep_alive_timeout(suite) ->
[];
keep_alive_timeout(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{port, 0}, {keep_alive, true}, {keep_alive_timeout, 2} | HttpdConf]),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -348,9 +349,9 @@ script_timeout(Config) when is_list(Config) ->
ok.
verify_script_timeout(Config, ScriptTimeout, StatusCode) ->
- HttpdConf = ?config(httpd_conf, Config),
- CgiScript = ?config(cgi_sleep, Config),
- CgiDir = ?config(cgi_dir, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
+ CgiScript = proplists:get_value(cgi_sleep, Config),
+ CgiDir = proplists:get_value(cgi_dir, Config),
{ok, Pid} = inets:start(httpd, [{port, 0},
{script_alias,
{"/cgi-bin/", CgiDir ++ "/"}},
@@ -371,7 +372,7 @@ verify_script_timeout(Config, ScriptTimeout, StatusCode) ->
slowdose() ->
[{doc, "Testing minimum bytes per second option"}].
slowdose(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{port, 0}, {minimum_bytes_per_second, 200}|HttpdConf]),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -386,9 +387,9 @@ slowdose(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
verify_script_nocache(Config, CgiNoCache, EsiNoCache, CgiOption, EsiOption) ->
- HttpdConf = ?config(httpd_conf, Config),
- CgiScript = ?config(cgi_printenv, Config),
- CgiDir = ?config(cgi_dir, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
+ CgiScript = proplists:get_value(cgi_printenv, Config),
+ CgiDir = proplists:get_value(cgi_dir, Config),
{ok, Pid} = inets:start(httpd, [{port, 0},
{script_alias,
{"/cgi-bin/", CgiDir ++ "/"}},
diff --git a/lib/inets/test/httpd_block.erl b/lib/inets/test/httpd_block.erl
index ca2ab517fb..45547e6d4e 100644
--- a/lib/inets/test/httpd_block.erl
+++ b/lib/inets/test/httpd_block.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -133,7 +133,7 @@ block_disturbing_active_timeout_released(Type, Port, Host, Node) ->
block_non_disturbing_active_timeout_not_released(Type, Port, Host, Node) ->
process_flag(trap_exit, true),
Poller = long_poll(Type, Host, Port, Node, 200, 60000),
- test_server:sleep(5000),
+ ct:sleep(5000),
ok = block_nd_server(Node, Host, Port, 40000),
await_normal_process_exit(Poller, "poller", 60000),
blocked = get_admin_state(Node, Host, Port),
diff --git a/lib/inets/test/httpd_load.erl b/lib/inets/test/httpd_load.erl
index 39c2280f23..7f4d16139f 100644
--- a/lib/inets/test/httpd_load.erl
+++ b/lib/inets/test/httpd_load.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,8 +21,7 @@
-module(httpd_load).
--include("test_server.hrl").
--include("test_server_line.hrl").
+-include_lib("common_test/include/ct.hrl").
%% General testcases bodies called from httpd_SUITE
-export([load_test/5]).
@@ -64,7 +63,7 @@ load_test(Fun, URIs, Type, Host, Port, Node, 0, List) ->
{'EXIT', Pid, Reason} ->
Str = lists:flatten(io_lib:format("client ~p exited: ~p",
[Pid,Reason])),
- test_server:fail(Str);
+ ct:fail(Str);
_ ->
load_test(Fun, URIs, Type, Host, Port, Node, 0, List)
end;
@@ -87,12 +86,11 @@ load_test_client(Fun, [URI|URIs], Type, Host, Port, Node, Boss, Timeout) ->
{'EXIT', {suite_failed, connection_closed, _, _}} ->
%% Some platforms seems to handle heavy load badly.
%% So, back off and see if this helps
- %%?LOG("load_test_client->requestfailed:connection_closed"[]),
2 * Timeout;
_ ->
Timeout
end,
- test_server:sleep(Timeout1),
+ ct:sleep(Timeout1),
load_test_client(Fun, URIs, Type, Host, Port, Node, Boss, Timeout1).
load_test_client_done(Boss) ->
diff --git a/lib/inets/test/httpd_mod.erl b/lib/inets/test/httpd_mod.erl
index 847586a903..d9118aa1a4 100644
--- a/lib/inets/test/httpd_mod.erl
+++ b/lib/inets/test/httpd_mod.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,8 +21,7 @@
-module(httpd_mod).
--include("test_server.hrl").
--include("test_server_line.hrl").
+-include_lib("common_test/include/ct.hrl").
%% General testcases bodies called from httpd_SUITE
-export([alias/4, actions/4, security/5, auth/4, auth_api/6,
@@ -87,240 +86,116 @@ actions(Type, Port, Host, Node) ->
security(ServerRoot, Type, Port, Host, Node) ->
global:register_name(mod_security_test, self()), % Receive events
-
- tsp("security -> "
- "sleep"),
- test_server:sleep(5000),
+
+ ct:sleep(5000),
OpenDir = filename:join([ServerRoot, "htdocs", "open"]),
%% Test blocking / unblocking of users.
%% /open, require user one Aladdin
- tsp("security -> "
- "blocking and unblocking of users - "
- "remove all existing users"),
+
remove_users(Node, ServerRoot, Host, Port, "open"),
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for nonex user 'one' - expect 401"),
auth_request(Type, Host, Port, Node, "/open/", "one", "onePassword",
[{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "one"}, {password, "onePassword"}]},
Node, Port),
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for nonex user 'two' - expect 401"),
auth_request(Type,Host,Port,Node,"/open/", "two", "twoPassword",
[{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "two"}, {password, "twoPassword"}]},
Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for nonex user 'Alladin' - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "Aladdin",
"AladdinPassword", [{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "Aladdin"},
{password, "AladdinPassword"}]},
Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "add user 'one'"),
add_user(Node, ServerRoot, Port, "open", "one", "onePassword", []),
- tsp("security -> "
- "blocking and unblocking of users - "
- "add user 'two'"),
add_user(Node, ServerRoot, Port, "open", "two", "twoPassword", []),
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request 1 for user 'one' with wrong password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "one", "WrongPassword",
[{statuscode, 401}]),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "one"}, {password, "WrongPassword"}]},
Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request 2 for user 'one' with wrong password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "one", "WrongPassword",
[{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "one"}, {password, "WrongPassword"}]},
Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "await block security event (two failed attempts)"),
- receive_security_event({event, user_block, Port, OpenDir,
+ receive_security_event({event, user_block, Port, OpenDir,
[{user, "one"}]}, Node, Port),
- tsp("security -> "
- "blocking and unblocking of users - "
- "unregister - no more security events"),
global:unregister_name(mod_security_test), % No more events.
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for user 'one' with wrong password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "one", "WrongPassword",
[{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for user 'one' with correct password - expect 403"),
auth_request(Type, Host, Port, Node,"/open/", "one", "onePassword",
[{statuscode, 403}]),
%% User "one" should be blocked now..
- tsp("security -> "
- "blocking and unblocking of users - "
- "list blocked users - 'one' should be the only one"),
case list_blocked_users(Node, Port) of
[{"one",_, Port, OpenDir,_}] ->
ok;
Blocked ->
- tsp(" *** unexpected blocked users ***"
- "~n Blocked: ~p", [Blocked]),
exit({unexpected_blocked, Blocked})
end,
- tsp("security -> "
- "blocking and unblocking of users - "
- "list users blocked for dir '~p' - "
- "user 'one' should be the only one", [OpenDir]),
[{"one",_, Port, OpenDir,_}] = list_blocked_users(Node, Port, OpenDir),
- tsp("security -> "
- "blocking and unblocking of users - "
- "unblock user 'one' for dir '~p'", [OpenDir]),
true = unblock_user(Node, "one", Port, OpenDir),
%% User "one" should not be blocked any more.
- tsp("security -> "
- "blocking and unblocking of users - "
- "ensure user 'one' is no longer blocked"),
[] = list_blocked_users(Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for user 'one' with correct password - expect 200"),
auth_request(Type, Host, Port, Node,"/open/", "one", "onePassword",
[{statuscode, 200}]),
%% Test list_auth_users & auth_timeout
-
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users - expect user 'one'"),
["one"] = list_auth_users(Node, Port),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "auth request for user 'two' with wrong password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "two", "onePassword",
[{statuscode, 401}]),
-
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users - expect user 'one'"),
["one"] = list_auth_users(Node, Port),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users for dir '~p' - expect user 'one'", [OpenDir]),
["one"] = list_auth_users(Node, Port, OpenDir),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "auth request for user 'two' with correct password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "two", "twoPassword",
[{statuscode, 401}]),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users - expect user 'one'"),
["one"] = list_auth_users(Node, Port),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users for dir '~p' - expect user 'one'", [OpenDir]),
["one"] = list_auth_users(Node, Port, OpenDir),
%% Wait for successful auth to timeout.
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "wait for successful auth to timeout"),
- test_server:sleep(?AUTH_TIMEOUT*1001),
-
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users - expect none"),
+ ct:sleep(?AUTH_TIMEOUT*1001),
+
[] = list_auth_users(Node, Port),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users for dir '~p'~n - expect none", [OpenDir]),
+
[] = list_auth_users(Node, Port, OpenDir),
%% "two" is blocked.
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "unblock user 'two' for dir '~p'", [OpenDir]),
true = unblock_user(Node, "two", Port, OpenDir),
-
-
%% Test explicit blocking. Block user 'two'.
- tsp("security -> "
- "explicit blocking - list blocked users - should be none"),
[] = list_blocked_users(Node,Port,OpenDir),
- tsp("security -> "
- "explicit blocking - "
- "block user 'two' for dir '~p'", [OpenDir]),
true = block_user(Node, "two", Port, OpenDir, 10),
-
- tsp("security -> "
- "explicit blocking - "
- "auth request for user 'two' with correct password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "two", "twoPassword",
- [{statuscode, 401}]),
- tsp("security -> "
- "done").
-
+ [{statuscode, 401}]).
%%-------------------------------------------------------------------------
auth(Type, Port, Host, Node) ->
@@ -744,7 +619,6 @@ cgi(Type, Port, Host, Node) ->
end,
%% The length (> 100) is intentional
-%% tsp("cgi -> request 01 with length > 100"),
ok = httpd_test_lib:
verify_request(Type, Host, Port, Node,
"POST /cgi-bin/" ++ Script3 ++
@@ -772,55 +646,51 @@ cgi(Type, Port, Host, Node) ->
{version, "HTTP/1.0"},
{header, "content-type", "text/plain"}]),
-%% tsp("cgi -> request 02"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /cgi-bin/"++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 03"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /cgi-bin/not_there "
"HTTP/1.0\r\n\r\n",
[{statuscode, 404},{statuscode, 500},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 04"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /cgi-bin/"++ Script ++
"?Nisse:kkk?sss/lll HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 04"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /cgi-bin/"++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 05"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /htbin/"++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 06"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /htbin/not_there "
"HTTP/1.0\r\n\r\n",
[{statuscode, 404},{statuscode, 500},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 07"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /htbin/"++ Script ++
"?Nisse:kkk?sss/lll HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 08"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /htbin/"++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 09"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /htbin/"++ Script ++
" HTTP/1.0\r\n\r\n",
@@ -828,31 +698,25 @@ cgi(Type, Port, Host, Node) ->
{version, "HTTP/1.0"}]),
%% Execute an existing, but bad CGI script..
-%% tsp("cgi -> request 10 - bad script"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /htbin/"++ Script2 ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 404},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 11 - bad script"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /cgi-bin/"++ Script2 ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 404},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> done"),
-
%% Check "ScriptNoCache" directive (default: false)
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /cgi-bin/" ++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{no_header, "cache-control"},
- {version, "HTTP/1.0"}]),
- ok.
-
+ {version, "HTTP/1.0"}]).
%%--------------------------------------------------------------------
esi(Type, Port, Host, Node) ->
@@ -1019,18 +883,15 @@ list_users(Node, Root, _Host, Port, Dir) ->
receive_security_event(Event, Node, Port) ->
- tsp("receive_security_event -> await ~w event", [element(2, Event)]),
receive
Event ->
- tsp("receive_security_event -> "
- "received expected ~w event", [element(2, Event)]),
ok;
{'EXIT', _, _} ->
receive_security_event(Event, Node, Port)
after 5000 ->
%% Flush the message queue, to see if we got something...
Msgs = inets_test_lib:flush(),
- tsf({expected_event_not_received, Msgs})
+ ct:fail({expected_event_not_received, Msgs})
end.
@@ -1046,10 +907,10 @@ receive_security_event(Event, Node, Port) ->
%% {'EXIT', _, _} ->
%% receive_security_event(Event, Node, Port);
%% Other ->
-%% test_server:fail({unexpected_event,
+%% ct:fail({unexpected_event,
%% {expected, Event}, {received, Other}})
%% after 5000 ->
-%% test_server:fail(no_event_recived)
+%% ct:fail(no_event_recived)
%% end.
@@ -1131,17 +992,4 @@ check_lists_members1(L1,L2) ->
{error,{lists_not_equal,L1,L2}}.
-%% p(F) ->
-%% p(F, []).
-
-%% p(F, A) ->
-%% io:format(user, "~w:" ++ F ++ "~n", [?MODULE|A]).
-
-tsp(F) ->
- inets_test_lib:tsp(F).
-tsp(F, A) ->
- inets_test_lib:tsp(F, A).
-
-tsf(Reason) ->
- test_server:fail(Reason).
diff --git a/lib/inets/test/httpd_mod_SUITE.erl b/lib/inets/test/httpd_mod_SUITE.erl
index 89b9e0a303..5ec4e0856d 100644
--- a/lib/inets/test/httpd_mod_SUITE.erl
+++ b/lib/inets/test/httpd_mod_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/httpd_poll.erl b/lib/inets/test/httpd_poll.erl
index 4a570fb512..f86e3a979b 100644
--- a/lib/inets/test/httpd_poll.erl
+++ b/lib/inets/test/httpd_poll.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/httpd_test_data/server_root/Makefile b/lib/inets/test/httpd_test_data/server_root/Makefile
index 4f23295401..ed4d63a3bb 100644
--- a/lib/inets/test/httpd_test_data/server_root/Makefile
+++ b/lib/inets/test/httpd_test_data/server_root/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2010. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/httpd_test_data/server_root/conf/8080.conf b/lib/inets/test/httpd_test_data/server_root/conf/8080.conf
index 48e66f0114..7b1b4a15b2 100644
--- a/lib/inets/test/httpd_test_data/server_root/conf/8080.conf
+++ b/lib/inets/test/httpd_test_data/server_root/conf/8080.conf
@@ -1,7 +1,7 @@
Port 8080
#ServerName your.server.net
SocketType ip_comm
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8080
diff --git a/lib/inets/test/httpd_test_data/server_root/conf/8888.conf b/lib/inets/test/httpd_test_data/server_root/conf/8888.conf
index 79bb7fcca4..042779fcd0 100644
--- a/lib/inets/test/httpd_test_data/server_root/conf/8888.conf
+++ b/lib/inets/test/httpd_test_data/server_root/conf/8888.conf
@@ -1,7 +1,7 @@
Port 8888
#ServerName your.server.net
SocketType ip_comm
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8888
diff --git a/lib/inets/test/httpd_test_data/server_root/conf/httpd.conf b/lib/inets/test/httpd_test_data/server_root/conf/httpd.conf
index 87c2973e5a..3f9fde03b5 100644
--- a/lib/inets/test/httpd_test_data/server_root/conf/httpd.conf
+++ b/lib/inets/test/httpd_test_data/server_root/conf/httpd.conf
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2011. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -64,7 +64,7 @@ SocketType ip_comm
# WARNING! Do not tamper with this directive unless you are familiar with
# EWSAPI.
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_responsecontrol mod_trace mod_range mod_head mod_include mod_dir mod_get mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_responsecontrol mod_trace mod_range mod_head mod_dir mod_get mod_log mod_disk_log
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.
diff --git a/lib/inets/test/httpd_test_data/server_root/conf/ssl.conf b/lib/inets/test/httpd_test_data/server_root/conf/ssl.conf
index 8b8c57a98b..de49ceafd0 100644
--- a/lib/inets/test/httpd_test_data/server_root/conf/ssl.conf
+++ b/lib/inets/test/httpd_test_data/server_root/conf/ssl.conf
@@ -1,7 +1,7 @@
Port 8088
#ServerName your.server.net
SocketType ssl
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8088
diff --git a/lib/inets/test/httpd_test_lib.erl b/lib/inets/test/httpd_test_lib.erl
index 71e201f826..1cecd2642c 100644
--- a/lib/inets/test/httpd_test_lib.erl
+++ b/lib/inets/test/httpd_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/httpd_time_test.erl b/lib/inets/test/httpd_time_test.erl
index 1b4d74b28e..e858ddf4f6 100644
--- a/lib/inets/test/httpd_time_test.erl
+++ b/lib/inets/test/httpd_time_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -117,7 +117,7 @@ main(N, SocketType, Host, Port, Time)
loop(Pollers, Timeout) ->
d("loop -> entry when"
"~n Timeout: ~p", [Timeout]),
- Start = inets_time_compat:monotonic_time(),
+ Start = erlang:monotonic_time(),
receive
{'EXIT', Pid, {poller_stat_failure, SocketType, Host, Port, Time, Reason}} ->
diff --git a/lib/inets/test/inets_SUITE.erl b/lib/inets/test/inets_SUITE.erl
index 928d9dc391..5eaf3a28a0 100644
--- a/lib/inets/test/inets_SUITE.erl
+++ b/lib/inets/test/inets_SUITE.erl
@@ -28,10 +28,13 @@
-define(NUM_DEFAULT_SERVICES, 1).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,5}}
+ ].
all() ->
- [{group, app_test}, {group, appup_test},
+ [{group, app_test},
{group, services_test}, httpd_reload].
groups() ->
@@ -42,8 +45,7 @@ groups() ->
start_ftpc,
start_tftpd
]},
- {app_test, [], [{inets_app_test, all}]},
- {appup_test, [], [{inets_appup_test, all}]}].
+ {app_test, [], [app, appup]}].
init_per_group(_GroupName, Config) ->
Config.
@@ -84,6 +86,10 @@ end_per_suite(_Config) ->
%% Note: This function is free to add any key/value pairs to the Config
%% variable, but should NOT alter/remove any existing entries.
%%--------------------------------------------------------------------
+init_per_testcase(httpd_reload, Config) ->
+ inets:stop(),
+ ct:timetrap({seconds, 40}),
+ Config;
init_per_testcase(_Case, Config) ->
inets:stop(),
Config.
@@ -102,6 +108,15 @@ end_per_testcase(_, Config) ->
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
+app() ->
+ [{doc, "Test that the inets app file is ok"}].
+app(Config) when is_list(Config) ->
+ ok = ?t:app_test(inets).
+%%--------------------------------------------------------------------
+appup() ->
+ [{doc, "Test that the inets appup file is ok"}].
+appup(Config) when is_list(Config) ->
+ ok = ?t:appup_test(inets).
start_inets() ->
[{doc, "Test inets API functions"}].
@@ -134,7 +149,7 @@ start_httpc() ->
[{doc, "Start/stop of httpc service"}].
start_httpc(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ok = inets:start(),
{ok, Pid0} = inets:start(httpc, [{profile, foo}]),
@@ -145,7 +160,7 @@ start_httpc(Config) when is_list(Config) ->
inets:stop(httpc, Pid0),
- test_server:sleep(100),
+ ct:sleep(100),
Pids1 = [ServicePid || {_, ServicePid} <- inets:services()],
false = lists:member(Pid0, Pids1),
@@ -188,7 +203,7 @@ start_httpd() ->
[{doc, "Start/stop of httpd service"}].
start_httpd(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
HttpdConf = [{server_name, "httpd_test"}, {server_root, PrivDir},
{document_root, PrivDir}, {bind_address, any}],
@@ -199,7 +214,7 @@ start_httpd(Config) when is_list(Config) ->
[_|_] = inets:services_info(),
inets:stop(httpd, Pid0),
- test_server:sleep(500),
+ ct:sleep(500),
Pids1 = [ServicePid || {_, ServicePid} <- inets:services()],
false = lists:member(Pid0, Pids1),
{ok, Pid1} =
@@ -212,7 +227,7 @@ start_httpd(Config) when is_list(Config) ->
{'EXIT', Pid1, shutdown} ->
ok
after 100 ->
- test_server:fail(stand_alone_not_shutdown)
+ ct:fail(stand_alone_not_shutdown)
end,
ok = inets:stop(),
File0 = filename:join(PrivDir, "httpd.conf"),
@@ -279,44 +294,38 @@ start_httpd(Config) when is_list(Config) ->
start_ftpc(doc) ->
[{doc, "Start/stop of ftpc service"}];
-start_ftpc(Config) when is_list(Config) ->
+start_ftpc(Config0) when is_list(Config0) ->
process_flag(trap_exit, true),
ok = inets:start(),
- try
- begin
- {_Tag, FtpdHost} = ftp_suite_lib:dirty_select_ftpd_host(Config),
- case inets:start(ftpc, [{host, FtpdHost}]) of
- {ok, Pid0} ->
- Pids0 = [ServicePid || {_, ServicePid} <-
- inets:services()],
- true = lists:member(Pid0, Pids0),
- [_|_] = inets:services_info(),
- inets:stop(ftpc, Pid0),
- test_server:sleep(100),
- Pids1 = [ServicePid || {_, ServicePid} <-
- inets:services()],
- false = lists:member(Pid0, Pids1),
- {ok, Pid1} =
- inets:start(ftpc, [{host, FtpdHost}], stand_alone),
- Pids2 = [ServicePid || {_, ServicePid} <-
- inets:services()],
- false = lists:member(Pid1, Pids2),
- ok = inets:stop(stand_alone, Pid1),
- receive
- {'EXIT', Pid1, shutdown} ->
- ok
- after 100 ->
- ct:fail(stand_alone_not_shutdown)
- end,
- ok = inets:stop(),
- ok;
- _ ->
- {skip, "Unable to reach selected FTP server " ++ FtpdHost}
- end
- end
- catch
- throw:{error, not_found} ->
- {skip, "No available FTP servers"}
+ case ftp_SUITE:init_per_suite(Config0) of
+ {skip, _} = Skip ->
+ Skip;
+ Config ->
+ FtpdHost = proplists:get_value(ftpd_host,Config),
+ {ok, Pid0} = inets:start(ftpc, [{host, FtpdHost}]),
+ Pids0 = [ServicePid || {_, ServicePid} <-
+ inets:services()],
+ true = lists:member(Pid0, Pids0),
+ [_|_] = inets:services_info(),
+ inets:stop(ftpc, Pid0),
+ ct:sleep(100),
+ Pids1 = [ServicePid || {_, ServicePid} <-
+ inets:services()],
+ false = lists:member(Pid0, Pids1),
+ {ok, Pid1} =
+ inets:start(ftpc, [{host, FtpdHost}], stand_alone),
+ Pids2 = [ServicePid || {_, ServicePid} <-
+ inets:services()],
+ false = lists:member(Pid1, Pids2),
+ ok = inets:stop(stand_alone, Pid1),
+ receive
+ {'EXIT', Pid1, shutdown} ->
+ ok
+ after 100 ->
+ ct:fail(stand_alone_not_shutdown)
+ end,
+ ok = inets:stop(),
+ catch ftp_SUITE:end_per_SUITE(Config)
end.
%%-------------------------------------------------------------------------
@@ -331,7 +340,7 @@ start_tftpd(Config) when is_list(Config) ->
true = lists:member(Pid0, Pids0),
[_|_] = inets:services_info(),
inets:stop(tftpd, Pid0),
- test_server:sleep(100),
+ ct:sleep(100),
Pids1 = [ServicePid || {_, ServicePid} <- inets:services()],
false = lists:member(Pid0, Pids1),
{ok, Pid1} =
@@ -343,7 +352,7 @@ start_tftpd(Config) when is_list(Config) ->
{'EXIT', Pid1, shutdown} ->
ok
after 100 ->
- test_server:fail(stand_alone_not_shutdown)
+ ct:fail(stand_alone_not_shutdown)
end,
ok = inets:stop(),
application:load(inets),
@@ -360,34 +369,34 @@ httpd_reload() ->
[{doc, "Reload httpd configuration without restarting service"}].
httpd_reload(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
HttpdConf = [{server_name, "httpd_test"},
{server_root, PrivDir},
{document_root, PrivDir},
{bind_address, "localhost"}],
ok = inets:start(),
- test_server:sleep(5000),
+ ct:sleep(5000),
{ok, Pid0} = inets:start(httpd, [{port, 0},
{ipfamily, inet} | HttpdConf]),
- test_server:sleep(5000),
+ ct:sleep(5000),
[{port, Port0}] = httpd:info(Pid0, [port]),
- test_server:sleep(5000),
+ ct:sleep(5000),
[{document_root, PrivDir}] = httpd:info(Pid0, [document_root]),
- test_server:sleep(5000),
+ ct:sleep(5000),
ok = httpd:reload_config([{port, Port0}, {ipfamily, inet},
{server_name, "httpd_test"},
{server_root, PrivDir},
{document_root, DataDir},
{bind_address, "localhost"}], non_disturbing),
- test_server:sleep(5000),
+ ct:sleep(5000),
[{document_root, DataDir}] = httpd:info(Pid0, [document_root]),
- test_server:sleep(5000),
+ ct:sleep(5000),
ok = httpd:reload_config([{port, Port0}, {ipfamily, inet},
{server_name, "httpd_test"},
diff --git a/lib/inets/test/inets_app_test.erl b/lib/inets/test/inets_app_test.erl
deleted file mode 100644
index c6d0715e1f..0000000000
--- a/lib/inets/test/inets_app_test.erl
+++ /dev/null
@@ -1,245 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2015. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Verify the application specifics of the inets application
-%%----------------------------------------------------------------------
--module(inets_app_test).
-
--compile(export_all).
-
--include("inets_test_lib.hrl").
-
-
-% t() -> megaco_test_lib:t(?MODULE).
-% t(Case) -> megaco_test_lib:t({?MODULE, Case}).
-
-
-%% Test server callbacks
-init_per_testcase(_, Config) ->
- Config.
-
-end_per_testcase(_Case, Config) ->
- Config.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-all() ->
- [fields, modules, exportall, app_depend].
-
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
-init_per_suite(Config) when is_list(Config) ->
- case is_app(inets) of
- {ok, AppFile} ->
- io:format("AppFile: ~n~p~n", [AppFile]),
- inets:print_version_info(),
- [{app_file, AppFile}|Config];
- {error, Reason} ->
- fail(Reason)
- end.
-
-is_app(App) ->
- LibDir = code:lib_dir(App),
- File = filename:join([LibDir, "ebin", atom_to_list(App) ++ ".app"]),
- case file:consult(File) of
- {ok, [{application, App, AppFile}]} ->
- {ok, AppFile};
- Error ->
- {error, {invalid_format, Error}}
- end.
-
-
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-fields(suite) ->
- [];
-fields(doc) ->
- [];
-fields(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Fields = [vsn, description, modules, registered, applications],
- case check_fields(Fields, AppFile, []) of
- [] ->
- ok;
- Missing ->
- fail({missing_fields, Missing})
- end.
-
-check_fields([], _AppFile, Missing) ->
- Missing;
-check_fields([Field|Fields], AppFile, Missing) ->
- check_fields(Fields, AppFile, check_field(Field, AppFile, Missing)).
-
-check_field(Name, AppFile, Missing) ->
- io:format("checking field: ~p~n", [Name]),
- case lists:keymember(Name, 1, AppFile) of
- true ->
- Missing;
- false ->
- [Name|Missing]
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-modules(suite) ->
- [];
-modules(doc) ->
- [];
-modules(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Mods = key1search(modules, AppFile),
- EbinList = get_ebin_mods(inets),
- case missing_modules(Mods, EbinList, []) of
- [] ->
- ok;
- Missing ->
- throw({error, {missing_modules, Missing}})
- end,
- case extra_modules(Mods, EbinList, []) of
- [] ->
- ok;
- Extra ->
- throw({error, {extra_modules, Extra}})
- end,
- {ok, Mods}.
-
-get_ebin_mods(App) ->
- LibDir = code:lib_dir(App),
- EbinDir = filename:join([LibDir,"ebin"]),
- {ok, Files0} = file:list_dir(EbinDir),
- Files1 = [lists:reverse(File) || File <- Files0],
- [list_to_atom(lists:reverse(Name)) || [$m,$a,$e,$b,$.|Name] <- Files1].
-
-
-missing_modules([], _Ebins, Missing) ->
- Missing;
-missing_modules([Mod|Mods], Ebins, Missing) ->
- case lists:member(Mod, Ebins) of
- true ->
- missing_modules(Mods, Ebins, Missing);
- false ->
- io:format("missing module: ~p~n", [Mod]),
- missing_modules(Mods, Ebins, [Mod|Missing])
- end.
-
-
-extra_modules(_Mods, [], Extra) ->
- Extra;
-extra_modules(Mods, [Mod|Ebins], Extra) ->
- case lists:member(Mod, Mods) of
- true ->
- extra_modules(Mods, Ebins, Extra);
- false ->
- io:format("supefluous module: ~p~n", [Mod]),
- extra_modules(Mods, Ebins, [Mod|Extra])
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-exportall(suite) ->
- [];
-exportall(doc) ->
- [];
-exportall(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Mods = key1search(modules, AppFile),
- check_export_all(Mods).
-
-
-check_export_all([]) ->
- ok;
-check_export_all([Mod|Mods]) ->
- case (catch apply(Mod, module_info, [compile])) of
- {'EXIT', {undef, _}} ->
- check_export_all(Mods);
- O ->
- case lists:keysearch(options, 1, O) of
- false ->
- check_export_all(Mods);
- {value, {options, List}} ->
- case lists:member(export_all, List) of
- true ->
- throw({error, {export_all, Mod}});
- false ->
- check_export_all(Mods)
- end
- end
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-app_depend(suite) ->
- [];
-app_depend(doc) ->
- [];
-app_depend(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Apps = key1search(applications, AppFile),
- check_apps(Apps).
-
-
-check_apps([]) ->
- ok;
-check_apps([App|Apps]) ->
- case is_app(App) of
- {ok, _} ->
- check_apps(Apps);
- Error ->
- throw({error, {missing_app, {App, Error}}})
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-fail(Reason) ->
- exit({suite_failed, Reason}).
-
-key1search(Key, L) ->
- case lists:keysearch(Key, 1, L) of
- undefined ->
- fail({not_found, Key, L});
- {value, {Key, Value}} ->
- Value
- end.
diff --git a/lib/inets/test/inets_appup_test.erl b/lib/inets/test/inets_appup_test.erl
deleted file mode 100644
index 999989b8b4..0000000000
--- a/lib/inets/test/inets_appup_test.erl
+++ /dev/null
@@ -1,71 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Verify the application specifics of the Inets application
-%%----------------------------------------------------------------------
--module(inets_appup_test).
-
--compile(export_all).
--include_lib("common_test/include/ct.hrl").
-
-
-%% Test server callbacks
-init_per_testcase(_Case, Config) ->
- Config.
-
-end_per_testcase(_Case, Config) ->
- Config.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-all() ->
- [appup].
-
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
-init_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-appup() ->
- [{doc, "Perform a simple check of the inets appup file"}].
-appup(Config) when is_list(Config) ->
- ok = ?t:appup_test(inets).
diff --git a/lib/inets/test/inets_socketwrap_SUITE.erl b/lib/inets/test/inets_socketwrap_SUITE.erl
index cfbda3ccf5..18df995215 100644
--- a/lib/inets/test/inets_socketwrap_SUITE.erl
+++ b/lib/inets/test/inets_socketwrap_SUITE.erl
@@ -61,8 +61,8 @@ end_per_testcase(_, Config) ->
start_httpd_fd() ->
[{doc, "Start/stop of httpd service with socket wrapper"}].
start_httpd_fd(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
HttpdConf = [{port, 80}, {ipfamily, inet},
{server_name, "httpd_fd_test"}, {server_root, PrivDir},
{document_root, PrivDir}, {bind_address, any}],
@@ -94,7 +94,7 @@ start_httpd_fd(Config) when is_list(Config) ->
start_tftpd_fd() ->
[{doc, "Start/stop of tfpd service with socket wrapper"}].
start_tftpd_fd(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
case setup_node_info(node()) of
{skip, _} = Skip ->
Skip;
diff --git a/lib/inets/test/inets_socketwrap_SUITE_data/setuid_socket_wrap.c b/lib/inets/test/inets_socketwrap_SUITE_data/setuid_socket_wrap.c
index b28f6b1c08..018d398956 100644
--- a/lib/inets/test/inets_socketwrap_SUITE_data/setuid_socket_wrap.c
+++ b/lib/inets/test/inets_socketwrap_SUITE_data/setuid_socket_wrap.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/inets_sup_SUITE.erl b/lib/inets/test/inets_sup_SUITE.erl
index 33ae3bd3f2..5b8b1463c8 100644
--- a/lib/inets/test/inets_sup_SUITE.erl
+++ b/lib/inets/test/inets_sup_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,10 @@
%% Note: This directive should only be used in test suites.
-compile(export_all).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds, 10}}
+ ].
all() ->
[default_tree, ftpc_worker, tftpd_worker,
@@ -50,9 +53,7 @@ end_per_suite(_) ->
ok.
init_per_testcase(httpd_subtree, Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, "root"),
ok = file:make_dir(Dir),
@@ -67,7 +68,7 @@ init_per_testcase(httpd_subtree, Config) ->
inets:stop(),
inets:start(),
inets:start(httpd, SimpleConfig),
- [{watchdog, Dog} | NewConfig]
+ Config
catch
_:Reason ->
inets:stop(),
@@ -75,9 +76,7 @@ init_per_testcase(httpd_subtree, Config) ->
end;
init_per_testcase(httpd_subtree_profile, Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, "root"),
ok = file:make_dir(Dir),
@@ -93,7 +92,7 @@ init_per_testcase(httpd_subtree_profile, Config) ->
inets:stop(),
inets:start(),
{ok, _} = inets:start(httpd, SimpleConfig),
- [{watchdog, Dog} | NewConfig]
+ Config
catch
_:Reason ->
inets:stop(),
@@ -102,24 +101,18 @@ init_per_testcase(httpd_subtree_profile, Config) ->
init_per_testcase(_Case, Config) ->
- Dog = test_server:timetrap(?t:minutes(5)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
inets:stop(),
ok = inets:start(),
- [{watchdog, Dog} | NewConfig].
+ Config.
end_per_testcase(Case, Config) when Case == httpd_subtree;
Case == httpd_subtree_profile ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, "root"),
inets_test_lib:del_dirs(Dir),
ok;
-end_per_testcase(_, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_, _) ->
inets:stop(),
ok.
@@ -164,29 +157,25 @@ default_tree(Config) when is_list(Config) ->
ftpc_worker() ->
[{doc, "Makes sure the ftp worker processes are added and removed "
"appropriatly to/from the supervison tree."}].
-ftpc_worker(Config) when is_list(Config) ->
+ftpc_worker(Config0) when is_list(Config0) ->
[] = supervisor:which_children(ftp_sup),
- try
- begin
- {_Tag, FtpdHost} = ftp_suite_lib:dirty_select_ftpd_host(Config),
- case inets:start(ftpc, [{host, FtpdHost}]) of
- {ok, Pid} ->
- case supervisor:which_children(ftp_sup) of
- [{_,_, worker, [ftp]}] ->
- inets:stop(ftpc, Pid),
- test_server:sleep(5000),
- [] = supervisor:which_children(ftp_sup),
- ok;
- Children ->
- exit({unexpected_children, Children})
- end;
- _ ->
- {skip, "Unable to reach test FTP server"}
+ case ftp_SUITE:init_per_suite(Config0) of
+ {skip, _} = Skip ->
+ Skip;
+ Config ->
+ FtpdHost = proplists:get_value(ftpd_host,Config),
+ {ok, Pid} = inets:start(ftpc, [{host, FtpdHost}]),
+ case supervisor:which_children(ftp_sup) of
+ [{_,_, worker, [ftp]}] ->
+ inets:stop(ftpc, Pid),
+ ct:sleep(5000),
+ [] = supervisor:which_children(ftp_sup),
+ catch ftp_SUITE:end_per_SUITE(Config),
+ ok;
+ Children ->
+ catch ftp_SUITE:end_per_SUITE(Config),
+ exit({unexpected_children, Children})
end
- end
- catch
- throw:{error, not_found} ->
- {skip, "No available FTP servers"}
end.
tftpd_worker() ->
@@ -200,7 +189,7 @@ tftpd_worker(Config) when is_list(Config) ->
[{_,Pid0, worker, _}] = supervisor:which_children(tftp_sup),
inets:stop(tftpd, Pid0),
- test_server:sleep(5000),
+ ct:sleep(5000),
[] = supervisor:which_children(tftp_sup),
ok.
diff --git a/lib/inets/test/inets_test_lib.hrl b/lib/inets/test/inets_test_lib.hrl
index b2989be08d..d436395290 100644
--- a/lib/inets/test/inets_test_lib.hrl
+++ b/lib/inets/test/inets_test_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,96 +21,8 @@
%%----------------------------------------------------------------------
%% Purpose: Define common macros for testing
%%----------------------------------------------------------------------
-
-%% - Print macros -
-
--ifdef(inets_debug).
--define(DEBUG(F,A), inets_test_lib:debug(F, A, ?MODULE, ?LINE)).
--else.
--define(DEBUG(F,A),ok).
--endif.
-
--ifdef(inets_log).
--define(LOG(F,A), inets_test_lib:log(F, A, ?MODULE, ?LINE)).
--else.
--define(LOG(F,A),ok).
--endif.
-
--define(INFO(F,A), inets_test_lib:info(F, A, ?MODULE, ?LINE)).
--define(PRINT(F,A), inets_test_lib:print(F, A, ?MODULE, ?LINE)).
-
-
-%% - Macros stolen from the test server -
-
--ifndef(line).
--define(line,put(test_server_loc,{?MODULE,?LINE}),).
--endif.
-
-
-%% - OS Command and stuff
-
--define(OSCMD(Cmd), inets_test_lib:oscmd(Cmd)).
-
--define(PRINT_SYSTEM_INFO(P), inets_test_lib:print_system_info(P)).
-
--define(RUN_ON_OS(OS, FUN), inets_test_lib:run_on_os(OS, FUN)).
--define(RUN_ON_WINDOWS(FUN), inets_test_lib:run_on_windows(FUN)).
-
-
-%% - Test case macros -
-
--define(EXPANDABLE(I, C, F), inets_test_lib:expandable(I, C, F)).
--define(OS_BASED_SKIP(Skippable),
- inets_test_lib:os_based_skip(Skippable)).
-
--define(NON_PC_TC_MAYBE_SKIP(Config, Condition),
- inets_test_lib:non_pc_tc_maybe_skip(Config, Condition, ?MODULE, ?LINE)).
-
-
-
%% - Misc macros -
-define(ENSURE_STARTED(A), inets_test_lib:ensure_started(A)).
--define(UPDATE(K,V,C), inets_test_lib:update_config(K,V,C)).
--define(CONFIG(K,C), inets_test_lib:get_config(K,C)).
--define(HOSTNAME(), inets_test_lib:hostname()).
--define(SZ(X), inets_test_lib:sz(X)).
-
-
-%% - Test case macros -
-
--define(SKIP(Reason), inets_test_lib:skip(Reason, ?MODULE, ?LINE)).
--define(FAIL(Reason), inets_test_lib:fail(Reason, ?MODULE, ?LINE)).
-
-
-%% - Socket macros -
-
--define(CONNECT(M,H,P), inets_test_lib:connect(M,H,P)).
--define(SEND(M,S,D), inets_test_lib:send(M,S,D)).
--define(CSEND(M,S,D,C,T), inets_test_lib:csend(M,S,D,C,T)).
--define(CLOSE(M,S), inets_test_lib:close(M,S)).
-
-
-%% - Time macros -
-
--define(HOURS(N), inets_test_lib:hours(N)).
--define(MINS(N), inets_test_lib:minutes(N)).
--define(SECS(N), inets_test_lib:seconds(N)).
-
--define(WD_START(T), inets_test_lib:watchdog_start(T)).
--define(WD_STOP(P), inets_test_lib:watchdog_stop(P)).
-
--define(SLEEP(MSEC), inets_test_lib:sleep(MSEC)).
--define(M(), inets_test_lib:millis()).
--define(MDIFF(A,B), inets_test_lib:millis_diff(A,B)).
-
-
-%% - Process utility macros -
-
--define(FLUSH(), inets_test_lib:flush_mqueue()).
--define(ETRAP_GET(), inets_test_lib:trap_exit()).
--define(ETRAP_SET(O), inets_test_lib:trap_exit(O)).
-
-
diff --git a/lib/inets/test/old_httpd_SUITE.erl b/lib/inets/test/old_httpd_SUITE.erl
index aaaf69fbec..172db53844 100644
--- a/lib/inets/test/old_httpd_SUITE.erl
+++ b/lib/inets/test/old_httpd_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,8 +21,7 @@
-module(old_httpd_SUITE).
--include_lib("test_server/include/test_server.hrl").
--include("test_server_line.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("inets_test_lib.hrl").
-include_lib("kernel/include/file.hrl").
@@ -287,9 +286,7 @@ init_per_suite(Config) ->
"~n Config: ~p"
"~n", [Config]),
- ?PRINT_SYSTEM_INFO([]),
-
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
SuiteTopDir = filename:join(PrivDir, ?MODULE),
case file:make_dir(SuiteTopDir) of
ok ->
@@ -315,7 +312,7 @@ init_per_suite(Config) ->
%%--------------------------------------------------------------------
end_per_suite(_Config) ->
- %% SuiteTopDir = ?config(suite_top_dir, Config),
+ %% SuiteTopDir = proplists:get_value(suite_top_dir, Config),
%% inets_test_lib:del_dirs(SuiteTopDir),
ok.
@@ -347,8 +344,8 @@ init_per_testcase2(Case, Config) ->
SslNormal = integer_to_list(?SSL_PORT) ++ ".conf",
SslHtaccess = integer_to_list(?SSL_PORT) ++ "htaccess.conf",
- DataDir = ?config(data_dir, Config),
- SuiteTopDir = ?config(suite_top_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ SuiteTopDir = proplists:get_value(suite_top_dir, Config),
%% tsp("init_per_testcase2 -> "
%% "~n SuiteDir: ~p"
@@ -500,7 +497,7 @@ init_per_testcase3(Case, Config) ->
Dog = test_server:timetrap(inets_test_lib:minutes(10)),
NewConfig = lists:keydelete(watchdog, 1, Config),
- TcTopDir = ?config(tc_top_dir, Config),
+ TcTopDir = proplists:get_value(tc_top_dir, Config),
CaseRest =
case atom_to_list(Case) of
@@ -582,16 +579,16 @@ init_per_testcase3(Case, Config) ->
{skip, _} = Skip ->
Skip;
"mod_auth_" ++ _ ->
- start_mnesia(?config(node, Config)),
+ start_mnesia(proplists:get_value(node, Config)),
[{watchdog, Dog} | NewConfig];
"mod_htaccess" ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
Path = filename:join([ServerRoot, "htdocs"]),
catch remove_htaccess(Path),
- create_htaccess_data(Path, ?config(address, Config)),
+ create_htaccess_data(Path, proplists:get_value(address, Config)),
[{watchdog, Dog} | NewConfig];
"range" ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
Path = filename:join([ServerRoot, "htdocs"]),
create_range_data(Path),
[{watchdog, Dog} | NewConfig];
@@ -614,7 +611,7 @@ init_per_testcase3(Case, Config) ->
%% Description: Cleanup after each test case
%%--------------------------------------------------------------------
end_per_testcase(Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
end_per_testcase2(Case, lists:keydelete(watchdog, 1, Config)),
ok.
@@ -642,7 +639,7 @@ ip_mod_alias(suite) ->
[];
ip_mod_alias(Config) when is_list(Config) ->
httpd_mod:alias(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -652,7 +649,7 @@ ip_mod_actions(suite) ->
[];
ip_mod_actions(Config) when is_list(Config) ->
httpd_mod:actions(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -661,9 +658,9 @@ ip_mod_security(doc) ->
ip_mod_security(suite) ->
[];
ip_mod_security(Config) when is_list(Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
httpd_mod:security(ServerRoot, ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -673,7 +670,7 @@ ip_mod_auth(suite) ->
[];
ip_mod_auth(Config) when is_list(Config) ->
httpd_mod:auth(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -682,9 +679,9 @@ ip_mod_auth_api(doc) ->
ip_mod_auth_api(suite) ->
[];
ip_mod_auth_api(Config) when is_list(Config) ->
- ServerRoot = ?config(server_root, Config),
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_mod:auth_api(ServerRoot, "", ip_comm, ?IP_PORT, Host, Node),
httpd_mod:auth_api(ServerRoot, "dets_", ip_comm, ?IP_PORT, Host, Node),
httpd_mod:auth_api(ServerRoot, "mnesia_", ip_comm, ?IP_PORT, Host, Node),
@@ -696,7 +693,7 @@ ip_mod_auth_mnesia_api(suite) ->
[];
ip_mod_auth_mnesia_api(Config) when is_list(Config) ->
httpd_mod:auth_mnesia_api(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_mod_htaccess(doc) ->
@@ -705,7 +702,7 @@ ip_mod_htaccess(suite) ->
[];
ip_mod_htaccess(Config) when is_list(Config) ->
httpd_mod:htaccess(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_mod_cgi(doc) ->
@@ -714,7 +711,7 @@ ip_mod_cgi(suite) ->
[];
ip_mod_cgi(Config) when is_list(Config) ->
httpd_mod:cgi(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_mod_esi(doc) ->
@@ -723,7 +720,7 @@ ip_mod_esi(suite) ->
[];
ip_mod_esi(Config) when is_list(Config) ->
httpd_mod:esi(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -733,7 +730,7 @@ ip_mod_get(suite) ->
[];
ip_mod_get(Config) when is_list(Config) ->
httpd_mod:get(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -743,7 +740,7 @@ ip_mod_head(suite) ->
[];
ip_mod_head(Config) when is_list(Config) ->
httpd_mod:head(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_mod_all(doc) ->
@@ -752,7 +749,7 @@ ip_mod_all(suite) ->
[];
ip_mod_all(Config) when is_list(Config) ->
httpd_mod:all(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_load_light(doc) ->
@@ -760,8 +757,8 @@ ip_load_light(doc) ->
ip_load_light(suite) ->
[];
ip_load_light(Config) when is_list(Config) ->
- httpd_load:load_test(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config),
+ httpd_load:load_test(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ip_comm, light)),
ok.
%%-------------------------------------------------------------------------
@@ -770,8 +767,8 @@ ip_load_medium(doc) ->
ip_load_medium(suite) ->
[];
ip_load_medium(Config) when is_list(Config) ->
- httpd_load:load_test(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config),
+ httpd_load:load_test(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ip_comm, medium)),
ok.
%%-------------------------------------------------------------------------
@@ -780,8 +777,8 @@ ip_load_heavy(doc) ->
ip_load_heavy(suite) ->
[];
ip_load_heavy(Config) when is_list(Config) ->
- httpd_load:load_test(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config),
+ httpd_load:load_test(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ip_comm, heavy)),
ok.
@@ -792,8 +789,8 @@ ip_dos_hostname(doc) ->
ip_dos_hostname(suite) ->
[];
ip_dos_hostname(Config) when is_list(Config) ->
- dos_hostname(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config), ?MAX_HEADER_SIZE),
+ dos_hostname(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config), ?MAX_HEADER_SIZE),
ok.
@@ -803,13 +800,7 @@ ip_time_test(doc) ->
ip_time_test(suite) ->
[];
ip_time_test(Config) when is_list(Config) ->
- %% <CONDITIONAL-SKIP>
- Skippable = [win32],
- Condition = fun() -> ?OS_BASED_SKIP(Skippable) end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
- httpd_time_test:t(ip_comm, ?config(host, Config), ?IP_PORT),
+ httpd_time_test:t(ip_comm, proplists:get_value(host, Config), ?IP_PORT),
ok.
%%-------------------------------------------------------------------------
@@ -819,8 +810,8 @@ ip_block_503(doc) ->
ip_block_503(suite) ->
[];
ip_block_503(Config) when is_list(Config) ->
- httpd_block:block_503(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_block:block_503(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_disturbing_idle(doc) ->
@@ -830,8 +821,8 @@ ip_block_disturbing_idle(suite) ->
[];
ip_block_disturbing_idle(Config) when is_list(Config) ->
httpd_block:block_disturbing_idle(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_non_disturbing_idle(doc) ->
@@ -841,8 +832,8 @@ ip_block_non_disturbing_idle(suite) ->
[];
ip_block_non_disturbing_idle(Config) when is_list(Config) ->
httpd_block:block_non_disturbing_idle(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_disturbing_active(doc) ->
@@ -852,8 +843,8 @@ ip_block_disturbing_active(suite) ->
[];
ip_block_disturbing_active(Config) when is_list(Config) ->
httpd_block:block_disturbing_active(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_non_disturbing_active(doc) ->
@@ -863,8 +854,8 @@ ip_block_non_disturbing_active(suite) ->
[];
ip_block_non_disturbing_active(Config) when is_list(Config) ->
httpd_block:block_non_disturbing_idle(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -878,9 +869,9 @@ ip_block_disturbing_active_timeout_not_released(Config)
when is_list(Config) ->
httpd_block:block_disturbing_active_timeout_not_released(ip_comm,
?IP_PORT,
- ?config(host,
+ proplists:get_value(host,
Config),
- ?config(node,
+ proplists:get_value(node,
Config)),
ok.
%%-------------------------------------------------------------------------
@@ -894,9 +885,9 @@ ip_block_disturbing_active_timeout_released(Config)
when is_list(Config) ->
httpd_block:block_disturbing_active_timeout_released(ip_comm,
?IP_PORT,
- ?config(host,
+ proplists:get_value(host,
Config),
- ?config(node,
+ proplists:get_value(node,
Config)),
ok.
@@ -911,9 +902,9 @@ ip_block_non_disturbing_active_timeout_not_released(Config)
httpd_block:
block_non_disturbing_active_timeout_not_released(ip_comm,
?IP_PORT,
- ?config(host,
+ proplists:get_value(host,
Config),
- ?config(node,
+ proplists:get_value(node,
Config)),
ok.
%%-------------------------------------------------------------------------
@@ -928,9 +919,9 @@ ip_block_non_disturbing_active_timeout_released(Config)
httpd_block:
block_non_disturbing_active_timeout_released(ip_comm,
?IP_PORT,
- ?config(host,
+ proplists:get_value(host,
Config),
- ?config(node,
+ proplists:get_value(node,
Config)),
ok.
%%-------------------------------------------------------------------------
@@ -940,8 +931,8 @@ ip_block_disturbing_blocker_dies(suite) ->
[];
ip_block_disturbing_blocker_dies(Config) when is_list(Config) ->
httpd_block:disturbing_blocker_dies(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_non_disturbing_blocker_dies(doc) ->
@@ -950,8 +941,8 @@ ip_block_non_disturbing_blocker_dies(suite) ->
[];
ip_block_non_disturbing_blocker_dies(Config) when is_list(Config) ->
httpd_block:non_disturbing_blocker_dies(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_restart_no_block(doc) ->
@@ -959,8 +950,8 @@ ip_restart_no_block(doc) ->
ip_restart_no_block(suite) ->
[];
ip_restart_no_block(Config) when is_list(Config) ->
- httpd_block:restart_no_block(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_block:restart_no_block(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_restart_disturbing_block(doc) ->
@@ -968,33 +959,9 @@ ip_restart_disturbing_block(doc) ->
ip_restart_disturbing_block(suite) ->
[];
ip_restart_disturbing_block(Config) when is_list(Config) ->
- %% <CONDITIONAL-SKIP>
- Condition =
- fun() ->
- case os:type() of
- {unix, linux} ->
- HW = string:strip(os:cmd("uname -m"), right, $\n),
- case HW of
- "ppc" ->
- case inet:gethostname() of
- {ok, "peach"} ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end
- end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_block:restart_disturbing_block(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -1003,33 +970,9 @@ ip_restart_non_disturbing_block(doc) ->
ip_restart_non_disturbing_block(suite) ->
[];
ip_restart_non_disturbing_block(Config) when is_list(Config) ->
- %% <CONDITIONAL-SKIP>
- Condition =
- fun() ->
- case os:type() of
- {unix, linux} ->
- HW = string:strip(os:cmd("uname -m"), right, $\n),
- case HW of
- "ppc" ->
- case inet:gethostname() of
- {ok, "peach"} ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end
- end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_block:restart_non_disturbing_block(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -1044,7 +987,7 @@ essl_mod_alias(Config) when is_list(Config) ->
ssl_mod_alias(Tag, Config) ->
httpd_mod:alias(Tag, ?SSL_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
@@ -1061,8 +1004,8 @@ essl_mod_actions(Config) when is_list(Config) ->
ssl_mod_actions(Tag, Config) ->
httpd_mod:actions(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1076,12 +1019,12 @@ essl_mod_security(Config) when is_list(Config) ->
ssl_mod_security(essl, Config).
ssl_mod_security(Tag, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
httpd_mod:security(ServerRoot,
Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1097,8 +1040,8 @@ essl_mod_auth(Config) when is_list(Config) ->
ssl_mod_auth(Tag, Config) ->
httpd_mod:auth(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1113,9 +1056,9 @@ essl_mod_auth_api(Config) when is_list(Config) ->
ssl_mod_auth_api(essl, Config).
ssl_mod_auth_api(Tag, Config) ->
- ServerRoot = ?config(server_root, Config),
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_mod:auth_api(ServerRoot, "", Tag, ?SSL_PORT, Host, Node),
httpd_mod:auth_api(ServerRoot, "dets_", Tag, ?SSL_PORT, Host, Node),
httpd_mod:auth_api(ServerRoot, "mnesia_", Tag, ?SSL_PORT, Host, Node),
@@ -1135,8 +1078,8 @@ essl_mod_auth_mnesia_api(Config) when is_list(Config) ->
ssl_mod_auth_mnesia_api(Tag, Config) ->
httpd_mod:auth_mnesia_api(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1152,8 +1095,8 @@ essl_mod_htaccess(Config) when is_list(Config) ->
ssl_mod_htaccess(Tag, Config) ->
httpd_mod:htaccess(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1169,8 +1112,8 @@ essl_mod_cgi(Config) when is_list(Config) ->
ssl_mod_cgi(Tag, Config) ->
httpd_mod:cgi(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1186,8 +1129,8 @@ essl_mod_esi(Config) when is_list(Config) ->
ssl_mod_esi(Tag, Config) ->
httpd_mod:esi(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1203,8 +1146,8 @@ essl_mod_get(Config) when is_list(Config) ->
ssl_mod_get(Tag, Config) ->
httpd_mod:get(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1220,8 +1163,8 @@ essl_mod_head(Config) when is_list(Config) ->
ssl_mod_head(Tag, Config) ->
httpd_mod:head(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1237,8 +1180,8 @@ essl_mod_all(Config) when is_list(Config) ->
ssl_mod_all(Tag, Config) ->
httpd_mod:all(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1254,8 +1197,8 @@ essl_load_light(Config) when is_list(Config) ->
ssl_load_light(Tag, Config) ->
httpd_load:load_test(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ssl, light)),
ok.
@@ -1270,16 +1213,10 @@ essl_load_medium(Config) when is_list(Config) ->
ssl_load_medium(essl, Config).
ssl_load_medium(Tag, Config) ->
- %% <CONDITIONAL-SKIP>
- Skippable = [win32],
- Condition = fun() -> ?OS_BASED_SKIP(Skippable) end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_load:load_test(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ssl, medium)),
ok.
@@ -1294,16 +1231,10 @@ essl_load_heavy(Config) when is_list(Config) ->
ssl_load_heavy(essl, Config).
ssl_load_heavy(Tag, Config) ->
- %% <CONDITIONAL-SKIP>
- Skippable = [win32],
- Condition = fun() -> ?OS_BASED_SKIP(Skippable) end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_load:load_test(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ssl, heavy)),
ok.
@@ -1321,8 +1252,8 @@ essl_dos_hostname(Config) when is_list(Config) ->
ssl_dos_hostname(Tag, Config) ->
dos_hostname(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
?MAX_HEADER_SIZE),
ok.
@@ -1338,23 +1269,8 @@ essl_time_test(Config) when is_list(Config) ->
ssl_time_test(essl, Config).
ssl_time_test(Tag, Config) when is_list(Config) ->
- %% <CONDITIONAL-SKIP>
- FreeBSDVersionVerify =
- fun() ->
- case os:version() of
- {7, 1, _} -> % We only have one such machine, so...
- true;
- _ ->
- false
- end
- end,
- Skippable = [win32, {unix, [{freebsd, FreeBSDVersionVerify}]}],
- Condition = fun() -> ?OS_BASED_SKIP(Skippable) end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_time_test:t(Tag,
- ?config(host, Config),
+ proplists:get_value(host, Config),
?SSL_PORT),
ok.
@@ -1373,8 +1289,8 @@ essl_block_503(Config) when is_list(Config) ->
ssl_block_503(Tag, Config) ->
httpd_block:block_503(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1392,8 +1308,8 @@ essl_block_disturbing_idle(Config) when is_list(Config) ->
ssl_block_disturbing_idle(Tag, Config) ->
httpd_block:block_disturbing_idle(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1411,8 +1327,8 @@ essl_block_non_disturbing_idle(Config) when is_list(Config) ->
ssl_block_non_disturbing_idle(Tag, Config) ->
httpd_block:block_non_disturbing_idle(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1430,8 +1346,8 @@ essl_block_disturbing_active(Config) when is_list(Config) ->
ssl_block_disturbing_active(Tag, Config) ->
httpd_block:block_disturbing_active(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1449,8 +1365,8 @@ essl_block_non_disturbing_active(Config) when is_list(Config) ->
ssl_block_non_disturbing_active(Tag, Config) ->
httpd_block:block_non_disturbing_idle(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1469,8 +1385,8 @@ essl_block_disturbing_active_timeout_not_released(Config)
ssl_block_disturbing_active_timeout_not_released(Tag, Config) ->
Port = ?SSL_PORT,
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_block:block_disturbing_active_timeout_not_released(Tag,
Port, Host, Node),
ok.
@@ -1491,8 +1407,8 @@ essl_block_disturbing_active_timeout_released(Config)
ssl_block_disturbing_active_timeout_released(Tag, Config) ->
Port = ?SSL_PORT,
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_block:block_disturbing_active_timeout_released(Tag,
Port,
Host,
@@ -1514,8 +1430,8 @@ essl_block_non_disturbing_active_timeout_not_released(Config)
ssl_block_non_disturbing_active_timeout_not_released(Tag, Config) ->
Port = ?SSL_PORT,
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_block:block_non_disturbing_active_timeout_not_released(Tag,
Port,
Host,
@@ -1540,8 +1456,8 @@ essl_block_non_disturbing_active_timeout_released(Config)
ssl_block_non_disturbing_active_timeout_released(Tag, Config)
when is_list(Config) ->
Port = ?SSL_PORT,
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_block:block_non_disturbing_active_timeout_released(Tag,
Port,
Host,
@@ -1563,8 +1479,8 @@ essl_block_disturbing_blocker_dies(Config) when is_list(Config) ->
ssl_block_disturbing_blocker_dies(Tag, Config) ->
httpd_block:disturbing_blocker_dies(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1580,8 +1496,8 @@ essl_block_non_disturbing_blocker_dies(Config) when is_list(Config) ->
ssl_block_non_disturbing_blocker_dies(Tag, Config) ->
httpd_block:non_disturbing_blocker_dies(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1598,8 +1514,8 @@ essl_restart_no_block(Config) when is_list(Config) ->
ssl_restart_no_block(Tag, Config) ->
httpd_block:restart_no_block(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1614,43 +1530,9 @@ essl_restart_disturbing_block(Config) when is_list(Config) ->
ssl_restart_disturbing_block(essl, Config).
ssl_restart_disturbing_block(Tag, Config) ->
- %% <CONDITIONAL-SKIP>
- Condition =
- fun() ->
- case os:type() of
- {unix, linux} ->
- case ?OSCMD("uname -m") of
- "ppc" ->
- case file:read_file_info("/etc/fedora-release") of
- {ok, _} ->
- case ?OSCMD("awk '{print $2}' /etc/fedora-release") of
- "release" ->
- %% Fedora 7 and later
- case ?OSCMD("awk '{print $3}' /etc/fedora-release") of
- "7" ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end
- end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_block:restart_disturbing_block(Tag, ?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1665,34 +1547,10 @@ essl_restart_non_disturbing_block(Config) when is_list(Config) ->
ssl_restart_non_disturbing_block(essl, Config).
ssl_restart_non_disturbing_block(Tag, Config) ->
- %% <CONDITIONAL-SKIP>
- Condition =
- fun() ->
- case os:type() of
- {unix, linux} ->
- HW = string:strip(os:cmd("uname -m"), right, $\n),
- case HW of
- "ppc" ->
- case inet:gethostname() of
- {ok, "peach"} ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end
- end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_block:restart_non_disturbing_block(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1702,8 +1560,8 @@ ip_host(doc) ->
ip_host(suite)->
[];
ip_host(Config) when is_list(Config) ->
- httpd_1_1:host(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:host(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_chunked(doc) ->
@@ -1711,8 +1569,8 @@ ip_chunked(doc) ->
ip_chunked(suite) ->
[];
ip_chunked(Config) when is_list(Config) ->
- httpd_1_1:chunked(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:chunked(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_expect(doc) ->
@@ -1721,8 +1579,8 @@ ip_expect(doc) ->
ip_expect(suite)->
[];
ip_expect(Config) when is_list(Config) ->
- httpd_1_1:expect(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:expect(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_range(doc) ->
@@ -1730,8 +1588,8 @@ ip_range(doc) ->
ip_range(suite)->
[];
ip_range(Config) when is_list(Config) ->
- httpd_1_1:range(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:range(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_if_test(doc) ->
@@ -1739,10 +1597,10 @@ ip_if_test(doc) ->
ip_if_test(suite) ->
[];
ip_if_test(Config) when is_list(Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
DocRoot = filename:join([ServerRoot, "htdocs"]),
- httpd_1_1:if_test(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config), DocRoot),
+ httpd_1_1:if_test(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config), DocRoot),
ok.
%%-------------------------------------------------------------------------
ip_http_trace(doc) ->
@@ -1750,8 +1608,8 @@ ip_http_trace(doc) ->
ip_http_trace(suite) ->
[];
ip_http_trace(Config) when is_list(Config) ->
- httpd_1_1:http_trace(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:http_trace(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_http1_1_head(doc) ->
@@ -1759,8 +1617,8 @@ ip_http1_1_head(doc) ->
ip_http1_1_head(suite)->
[];
ip_http1_1_head(Config) when is_list(Config) ->
- httpd_1_1:head(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:head(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -1769,8 +1627,8 @@ ip_get_0_9(doc) ->
ip_get_0_9(suite)->
[];
ip_get_0_9(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
ok = httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, Node,
"GET / \r\n\r\n",
[{statuscode, 200},
@@ -1792,8 +1650,8 @@ ip_head_1_0(doc) ->
ip_head_1_0(suite)->
[];
ip_head_1_0(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
ok = httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, Node,
"HEAD / HTTP/1.0\r\n\r\n", [{statuscode, 200},
{version, "HTTP/1.0"}]),
@@ -1805,8 +1663,8 @@ ip_get_1_0(doc) ->
ip_get_1_0(suite)->
[];
ip_get_1_0(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
ok = httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, Node,
"GET / HTTP/1.0\r\n\r\n", [{statuscode, 200},
{version, "HTTP/1.0"}]),
@@ -1818,8 +1676,8 @@ ip_post_1_0(doc) ->
ip_post_1_0(suite)->
[];
ip_post_1_0(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
%% Test the post message formatin 1.0! Real post are testes elsewhere
ok = httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, Node,
"POST / HTTP/1.0\r\n\r\n "
@@ -1833,7 +1691,7 @@ ip_mod_cgi_chunked_encoding_test(doc) ->
ip_mod_cgi_chunked_encoding_test(suite)->
[];
ip_mod_cgi_chunked_encoding_test(Config) when is_list(Config) ->
- Host = ?config(host, Config),
+ Host = proplists:get_value(host, Config),
Script =
case test_server:os_type() of
{win32, _} ->
@@ -1847,7 +1705,7 @@ ip_mod_cgi_chunked_encoding_test(Config) when is_list(Config) ->
++ Host ++"\r\n\r\n"],
httpd_1_1:mod_cgi_chunked_encoding_test(ip_comm, ?IP_PORT,
Host,
- ?config(node, Config),
+ proplists:get_value(node, Config),
Requests),
ok.
@@ -1876,7 +1734,7 @@ ipv6_hostname(SocketType, Port, Config) when is_list(Config) ->
"~n SocketType: ~p"
"~n Port: ~p"
"~n Config: ~p", [SocketType, Port, Config]),
- Host = ?config(host, Config),
+ Host = proplists:get_value(host, Config),
URI = "GET HTTP://" ++
Host ++ ":" ++ integer_to_list(Port) ++ "/ HTTP/1.1\r\n\r\n",
tsp("ipv6_hostname -> Host: ~p", [Host]),
@@ -1911,7 +1769,7 @@ ipv6_address(SocketType, Port, Config) when is_list(Config) ->
"~n SocketType: ~p"
"~n Port: ~p"
"~n Config: ~p", [SocketType, Port, Config]),
- Host = ?config(host, Config),
+ Host = proplists:get_value(host, Config),
tsp("ipv6_address -> Host: ~p", [Host]),
URI = "GET HTTP://" ++
Host ++ ":" ++ integer_to_list(Port) ++ "/ HTTP/1.1\r\n\r\n",
@@ -1928,8 +1786,8 @@ ticket_5775(doc) ->
ticket_5775(suite) ->
[];
ticket_5775(Config) ->
- ok=httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
- ?IP_PORT, ?config(node, Config),
+ ok=httpd_test_lib:verify_request(ip_comm, proplists:get_value(host, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET /cgi-bin/erl/httpd_example:get_bin "
"HTTP/1.0\r\n\r\n",
[{statuscode, 200},
@@ -1940,9 +1798,9 @@ ticket_5865(doc) ->
ticket_5865(suite) ->
[];
ticket_5865(Config) ->
- ?SKIP(as_of_r15_behaviour_of_calendar_has_changed),
- Host = ?config(host,Config),
- ServerRoot = ?config(server_root, Config),
+ ct:skip(as_of_r15_behaviour_of_calendar_has_changed),
+ Host = proplists:get_value(host,Config),
+ ServerRoot = proplists:get_value(server_root, Config),
DocRoot = filename:join([ServerRoot, "htdocs"]),
File = filename:join([DocRoot,"last_modified.html"]),
@@ -1958,7 +1816,7 @@ ticket_5865(Config) ->
case file:write_file_info(File,FI#file_info{mtime=Bad_mtime}) of
ok ->
ok = httpd_test_lib:verify_request(ip_comm, Host,
- ?IP_PORT, ?config(node, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET /last_modified.html"
" HTTP/1.1\r\nHost:"
++Host++"\r\n\r\n",
@@ -1978,8 +1836,8 @@ ticket_5913(doc) ->
["Tests that a header without last-modified is handled"];
ticket_5913(suite) -> [];
ticket_5913(Config) ->
- ok = httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
- ?IP_PORT, ?config(node, Config),
+ ok = httpd_test_lib:verify_request(ip_comm, proplists:get_value(host, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET /cgi-bin/erl/httpd_example:get_bin "
"HTTP/1.0\r\n\r\n",
[{statuscode, 200},
@@ -1990,8 +1848,8 @@ ticket_6003(doc) ->
["Tests that a URI with a bad hexadecimal code is handled"];
ticket_6003(suite) -> [];
ticket_6003(Config) ->
- ok = httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
- ?IP_PORT, ?config(node, Config),
+ ok = httpd_test_lib:verify_request(ip_comm, proplists:get_value(host, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET http://www.erlang.org/%skalle "
"HTTP/1.0\r\n\r\n",
[{statuscode, 400},
@@ -2003,8 +1861,8 @@ ticket_7304(doc) ->
ticket_7304(suite) ->
[];
ticket_7304(Config) ->
- ok = httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
- ?IP_PORT, ?config(node, Config),
+ ok = httpd_test_lib:verify_request(ip_comm, proplists:get_value(host, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET / HTTP/1.0\r\n\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
@@ -2031,11 +1889,11 @@ dos_hostname(Type, Port, Host, Node, Max) ->
%%--------------------------------------------------------------------
%% Other help functions
create_config(Config, Access, FileName) ->
- ServerRoot = ?config(server_root, Config),
- TcTopDir = ?config(tc_top_dir, Config),
- Port = ?config(port, Config),
- Type = ?config(sock_type, Config),
- Host = ?config(host, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
+ TcTopDir = proplists:get_value(tc_top_dir, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(sock_type, Config),
+ Host = proplists:get_value(host, Config),
Mods = io_lib:format("~p", [httpd_mod]),
Funcs = io_lib:format("~p", [ssl_password_cb]),
MaxHdrSz = io_lib:format("~p", [256]),
@@ -2425,13 +2283,13 @@ create_range_data(Path) ->
"12345678901234567890"])).
create_ipv6_config(Config, FileName, Ipv6Address) ->
- ServerRoot = ?config(server_root, Config),
- TcTopDir = ?config(tc_top_dir, Config),
- Port = ?config(port, Config),
- SockType = ?config(sock_type, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
+ TcTopDir = proplists:get_value(tc_top_dir, Config),
+ Port = proplists:get_value(port, Config),
+ SockType = proplists:get_value(sock_type, Config),
Mods = io_lib:format("~p", [httpd_mod]),
Funcs = io_lib:format("~p", [ssl_password_cb]),
- Host = ?config(ipv6_host, Config),
+ Host = proplists:get_value(ipv6_host, Config),
MaxHdrSz = io_lib:format("~p", [256]),
MaxHdrAct = io_lib:format("~p", [close]),
diff --git a/lib/inets/test/old_httpd_SUITE_data/server_root/Makefile b/lib/inets/test/old_httpd_SUITE_data/server_root/Makefile
index 4f23295401..ed4d63a3bb 100644
--- a/lib/inets/test/old_httpd_SUITE_data/server_root/Makefile
+++ b/lib/inets/test/old_httpd_SUITE_data/server_root/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2010. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/old_httpd_SUITE_data/server_root/conf/8080.conf b/lib/inets/test/old_httpd_SUITE_data/server_root/conf/8080.conf
index 48e66f0114..7b1b4a15b2 100644
--- a/lib/inets/test/old_httpd_SUITE_data/server_root/conf/8080.conf
+++ b/lib/inets/test/old_httpd_SUITE_data/server_root/conf/8080.conf
@@ -1,7 +1,7 @@
Port 8080
#ServerName your.server.net
SocketType ip_comm
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8080
diff --git a/lib/inets/test/old_httpd_SUITE_data/server_root/conf/8888.conf b/lib/inets/test/old_httpd_SUITE_data/server_root/conf/8888.conf
index 79bb7fcca4..042779fcd0 100644
--- a/lib/inets/test/old_httpd_SUITE_data/server_root/conf/8888.conf
+++ b/lib/inets/test/old_httpd_SUITE_data/server_root/conf/8888.conf
@@ -1,7 +1,7 @@
Port 8888
#ServerName your.server.net
SocketType ip_comm
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8888
diff --git a/lib/inets/test/old_httpd_SUITE_data/server_root/conf/httpd.conf b/lib/inets/test/old_httpd_SUITE_data/server_root/conf/httpd.conf
index 87c2973e5a..3f9fde03b5 100644
--- a/lib/inets/test/old_httpd_SUITE_data/server_root/conf/httpd.conf
+++ b/lib/inets/test/old_httpd_SUITE_data/server_root/conf/httpd.conf
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2011. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -64,7 +64,7 @@ SocketType ip_comm
# WARNING! Do not tamper with this directive unless you are familiar with
# EWSAPI.
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_responsecontrol mod_trace mod_range mod_head mod_include mod_dir mod_get mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_responsecontrol mod_trace mod_range mod_head mod_dir mod_get mod_log mod_disk_log
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.
diff --git a/lib/inets/test/old_httpd_SUITE_data/server_root/conf/ssl.conf b/lib/inets/test/old_httpd_SUITE_data/server_root/conf/ssl.conf
index 8b8c57a98b..de49ceafd0 100644
--- a/lib/inets/test/old_httpd_SUITE_data/server_root/conf/ssl.conf
+++ b/lib/inets/test/old_httpd_SUITE_data/server_root/conf/ssl.conf
@@ -1,7 +1,7 @@
Port 8088
#ServerName your.server.net
SocketType ssl
-Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_include mod_dir mod_get mod_head mod_log mod_disk_log
+Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_dir mod_get mod_head mod_log mod_disk_log
ServerAdmin [email protected]
ServerRoot /var/tmp/server_root
ErrorLog logs/error_log_8088
diff --git a/lib/inets/test/property_test/ftp_simple_client_server.erl b/lib/inets/test/property_test/ftp_simple_client_server.erl
index 8b6aff3c56..c98d87b514 100644
--- a/lib/inets/test/property_test/ftp_simple_client_server.erl
+++ b/lib/inets/test/property_test/ftp_simple_client_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/tftp_SUITE.erl b/lib/inets/test/tftp_SUITE.erl
index 497a50e654..09049e36af 100644
--- a/lib/inets/test/tftp_SUITE.erl
+++ b/lib/inets/test/tftp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/tftp_test_lib.erl b/lib/inets/test/tftp_test_lib.erl
index 406a49e863..f07795324f 100644
--- a/lib/inets/test/tftp_test_lib.erl
+++ b/lib/inets/test/tftp_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/tftp_test_lib.hrl b/lib/inets/test/tftp_test_lib.hrl
index 4e50f05d04..e7a5a37d2c 100644
--- a/lib/inets/test/tftp_test_lib.hrl
+++ b/lib/inets/test/tftp_test_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/test/uri_SUITE.erl b/lib/inets/test/uri_SUITE.erl
index 2642b8fd4e..b26c645821 100644
--- a/lib/inets/test/uri_SUITE.erl
+++ b/lib/inets/test/uri_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/inets/vsn.mk b/lib/inets/vsn.mk
index 12ac75a4b9..3408c3b128 100644
--- a/lib/inets/vsn.mk
+++ b/lib/inets/vsn.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2015. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -19,6 +19,6 @@
# %CopyrightEnd%
APPLICATION = inets
-INETS_VSN = 6.2.4
+INETS_VSN = 6.3.1
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(INETS_VSN)$(PRE_VSN)"
diff --git a/lib/jinterface/Makefile b/lib/jinterface/Makefile
index 9cb993c87e..9cf5f3e94c 100644
--- a/lib/jinterface/Makefile
+++ b/lib/jinterface/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/doc/src/Makefile b/lib/jinterface/doc/src/Makefile
index ef5a5fa657..cd1e61a795 100644
--- a/lib/jinterface/doc/src/Makefile
+++ b/lib/jinterface/doc/src/Makefile
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/doc/src/book.xml b/lib/jinterface/doc/src/book.xml
index 954ff3944b..4809995453 100644
--- a/lib/jinterface/doc/src/book.xml
+++ b/lib/jinterface/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/jinterface/doc/src/index.html.src b/lib/jinterface/doc/src/index.html.src
index b9b4555636..9276c5f89a 100644
--- a/lib/jinterface/doc/src/index.html.src
+++ b/lib/jinterface/doc/src/index.html.src
@@ -4,7 +4,7 @@
<!--
%CopyrightBegin%
- Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ Copyright Ericsson AB 2000-2016. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/doc/src/jinterface.xml b/lib/jinterface/doc/src/jinterface.xml
index 513ce36248..32de29eaee 100644
--- a/lib/jinterface/doc/src/jinterface.xml
+++ b/lib/jinterface/doc/src/jinterface.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/jinterface/doc/src/jinterface_users_guide.xml b/lib/jinterface/doc/src/jinterface_users_guide.xml
index 0be0f87b92..56f88124bf 100644
--- a/lib/jinterface/doc/src/jinterface_users_guide.xml
+++ b/lib/jinterface/doc/src/jinterface_users_guide.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/jinterface/doc/src/notes.xml b/lib/jinterface/doc/src/notes.xml
index e66bcda0c1..3151fc4b5e 100644
--- a/lib/jinterface/doc/src/notes.xml
+++ b/lib/jinterface/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,38 @@
</header>
<p>This document describes the changes made to the Jinterface application.</p>
+<section><title>Jinterface 1.7</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix Jinterface build on Maven</p>
+ <p>
+ Own Id: OTP-13482</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Handle terms (pids,ports and refs) from nodes with a
+ 'creation' value larger than 3. This is a preparation of
+ the distribution protocol to allow OTP 19 nodes to
+ correctly communicate with future nodes (20 or higher).
+ The 'creation' value differentiates different
+ incarnations of the same node (name).</p>
+ <p>
+ Own Id: OTP-13488</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Jinterface 1.6.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/jinterface/doc/src/notes_history.xml b/lib/jinterface/doc/src/notes_history.xml
index 31313e2e34..00fb5047c9 100644
--- a/lib/jinterface/doc/src/notes_history.xml
+++ b/lib/jinterface/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/jinterface/doc/src/part.xml b/lib/jinterface/doc/src/part.xml
index 8459bf5131..3b8eca297d 100644
--- a/lib/jinterface/doc/src/part.xml
+++ b/lib/jinterface/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/jinterface/doc/src/part_notes.xml b/lib/jinterface/doc/src/part_notes.xml
index 19047603c7..de6dd7d162 100644
--- a/lib/jinterface/doc/src/part_notes.xml
+++ b/lib/jinterface/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/jinterface/doc/src/part_notes_history.xml b/lib/jinterface/doc/src/part_notes_history.xml
index 2d058ff3ba..94bb996db5 100644
--- a/lib/jinterface/doc/src/part_notes_history.xml
+++ b/lib/jinterface/doc/src/part_notes_history.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/jinterface/doc/src/ref_man.xml b/lib/jinterface/doc/src/ref_man.xml
index 738eb1943d..f482466a8b 100644
--- a/lib/jinterface/doc/src/ref_man.xml
+++ b/lib/jinterface/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/jinterface/java_src/Makefile b/lib/jinterface/java_src/Makefile
index bb6844ead8..ab44ca2804 100644
--- a/lib/jinterface/java_src/Makefile
+++ b/lib/jinterface/java_src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2013. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
index e84a4296b5..7891871e76 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
index d7ba88288f..222330654a 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -95,6 +95,7 @@ public class AbstractNode implements OtpTransportFactory {
static final int dFlagUnicodeIo = 0x1000;
static final int dFlagUtf8Atoms = 0x10000;
static final int dFlagMapTag = 0x20000;
+ static final int dFlagBigCreation = 0x40000;
int ntype = NTYPE_R6;
int proto = 0; // tcp/ip
@@ -103,7 +104,8 @@ public class AbstractNode implements OtpTransportFactory {
int creation = 0;
int flags = dFlagExtendedReferences | dFlagExtendedPidsPorts
| dFlagBitBinaries | dFlagNewFloats | dFlagFunTags
- | dflagNewFunTags | dFlagUtf8Atoms | dFlagMapTag;
+ | dflagNewFunTags | dFlagUtf8Atoms | dFlagMapTag
+ | dFlagBigCreation;
/* initialize hostname and default cookie */
static {
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/GenericQueue.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/GenericQueue.java
index 193df527d5..e5004daa88 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/GenericQueue.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/GenericQueue.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java
index a5ac2bb663..18aa825759 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/Links.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/Links.java
index 3117b11149..5f1bd40e76 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/Links.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/Links.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile b/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile
index 1c8364e951..e55cfa62ea 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpAuthException.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpAuthException.java
index d0fdd9569e..008d749da2 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpAuthException.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpAuthException.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java
index 1a4627c62b..eb3eaa1f15 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java
index de9569aa27..011709beab 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java
index 82a701559d..363fdb950a 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java
index 4fbd580ff5..d73bad5e4f 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java
index fa460d7f9a..4b32352e50 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java
index ecf07c3cf0..5952e72c5a 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2007-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2007-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java
index 50ada048c2..0ae0995f00 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java
index ae4ecfae23..0ebc837989 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java
index 7f22918978..599726ee69 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java
index 850d43b35a..38a4101864 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java
index 3087ae1dbb..5084848562 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangException.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangException.java
index 7e80385308..094acb731f 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangException.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangException.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExit.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExit.java
index 6f31cc8ebd..87e1e64a48 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExit.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExit.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExternalFun.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExternalFun.java
index d4564293c6..24fee305b1 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExternalFun.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangExternalFun.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2009. All Rights Reserved.
+ * Copyright Ericsson AB 2009-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java
index d552d51cd7..8a93905a1f 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java
index c8c8d2221a..78929fab66 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2009. All Rights Reserved.
+ * Copyright Ericsson AB 2009-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java
index 48d8640a73..2a5e5b9bc3 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java
index 8afb118ff2..91d222aa84 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java
index 4bcae63519..a2b4e30e18 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java
index 30126db3fd..caac8c953a 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java
index 68e438cd27..981a7f8729 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java
index 20b7ff6a7f..9cbd735751 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,6 +27,7 @@ public class OtpErlangPid extends OtpErlangObject implements Comparable<Object>
// don't change this!
private static final long serialVersionUID = 1664394142301803659L;
+ private final int tag;
private final String node;
private final int id;
private final int serial;
@@ -44,6 +45,7 @@ public class OtpErlangPid extends OtpErlangObject implements Comparable<Object>
public OtpErlangPid(final OtpLocalNode self) {
final OtpErlangPid p = self.createPid();
+ tag = p.tag;
id = p.id;
serial = p.serial;
creation = p.creation;
@@ -65,6 +67,7 @@ public class OtpErlangPid extends OtpErlangObject implements Comparable<Object>
throws OtpErlangDecodeException {
final OtpErlangPid p = buf.read_pid();
+ tag = p.tag;
node = p.node();
id = p.id();
serial = p.serial();
@@ -85,15 +88,52 @@ public class OtpErlangPid extends OtpErlangObject implements Comparable<Object>
* used.
*
* @param creation
- * yet another arbitrary number. Only the low order 2 bits will
+ * yet another arbitrary number. Ony the low order 2 bits will
* be used.
*/
public OtpErlangPid(final String node, final int id, final int serial,
- final int creation) {
- this.node = node;
- this.id = id & 0x7fff; // 15 bits
- this.serial = serial & 0x1fff; // 13 bits
- this.creation = creation & 0x03; // 2 bits
+ final int creation) {
+ this(OtpExternal.pidTag, node, id, serial, creation);
+ }
+
+ /**
+ * Create an Erlang pid from its components.
+ *
+ * @param tag
+ * the external format to be compliant with
+ * OtpExternal.pidTag where only a subset of the bits are significant (see other constructor).
+ * OtpExternal.newPidTag where all 32 bits of id,serial and creation are significant.
+ * newPidTag can only be decoded by OTP-19 and newer.
+ * @param node
+ * the nodename.
+ *
+ * @param id
+ * an arbitrary number.
+ *
+ * @param serial
+ * another arbitrary number.
+ *
+ * @param creation
+ * yet another arbitrary number.
+ */
+ protected OtpErlangPid(final int tag, final String node, final int id,
+ final int serial, final int creation) {
+ this.tag = tag;
+ this.node = node;
+ if (tag == OtpExternal.pidTag) {
+ this.id = id & 0x7fff; // 15 bits
+ this.serial = serial & 0x1fff; // 13 bits
+ this.creation = creation & 0x03; // 2 bits
+ }
+ else { // allow all 32 bits for newPidTag
+ this.id = id;
+ this.serial = serial;
+ this.creation = creation;
+ }
+ }
+
+ protected int tag() {
+ return tag;
}
/**
@@ -151,7 +191,7 @@ public class OtpErlangPid extends OtpErlangObject implements Comparable<Object>
*/
@Override
public void encode(final OtpOutputStream buf) {
- buf.write_pid(node, id, serial, creation);
+ buf.write_pid(this);
}
/**
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java
index a6198d56cc..79b5d2736c 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,6 +26,7 @@ public class OtpErlangPort extends OtpErlangObject {
// don't change this!
private static final long serialVersionUID = 4037115468007644704L;
+ private final int tag;
private final String node;
private final int id;
private final int creation;
@@ -42,6 +43,7 @@ public class OtpErlangPort extends OtpErlangObject {
private OtpErlangPort(final OtpSelf self) {
final OtpErlangPort p = self.createPort();
+ tag = p.tag;
id = p.id;
creation = p.creation;
node = p.node;
@@ -62,6 +64,7 @@ public class OtpErlangPort extends OtpErlangObject {
throws OtpErlangDecodeException {
final OtpErlangPort p = buf.read_port();
+ tag = p.tag;
node = p.node();
id = p.id();
creation = p.creation();
@@ -77,13 +80,45 @@ public class OtpErlangPort extends OtpErlangObject {
* an arbitrary number. Only the low order 28 bits will be used.
*
* @param creation
- * another arbitrary number. Only the low order 2 bits will be
- * used.
+ * another arbitrary number. Only the low order 2 bits will be used.
*/
public OtpErlangPort(final String node, final int id, final int creation) {
- this.node = node;
- this.id = id & 0xfffffff; // 28 bits
- this.creation = creation & 0x03; // 2 bits
+ this(OtpExternal.portTag, node, id, creation);
+ }
+
+ /**
+ * Create an Erlang port from its components.
+ *
+ * @param tag
+ * the external format to be compliant with.
+ * OtpExternal.portTag where only a subset of the bits are used (see other constructor)
+ * OtpExternal.newPortTag where all 32 bits of id and creation are significant.
+ * newPortTag can only be decoded by OTP-19 and newer.
+ * @param node
+ * the nodename.
+ *
+ * @param id
+ * an arbitrary number. Only the low order 28 bits will be used.
+ *
+ * @param creation
+ * another arbitrary number.
+ */
+ public OtpErlangPort(final int tag, final String node, final int id,
+ final int creation) {
+ this.tag = tag;
+ this.node = node;
+ if (tag == OtpExternal.portTag) {
+ this.id = id & 0xfffffff; // 28 bits
+ this.creation = creation & 0x3; // 2 bits
+ }
+ else {
+ this.id = id;
+ this.creation = creation;
+ }
+ }
+
+ protected int tag() {
+ return tag;
}
/**
@@ -132,7 +167,7 @@ public class OtpErlangPort extends OtpErlangObject {
*/
@Override
public void encode(final OtpOutputStream buf) {
- buf.write_port(node, id, creation);
+ buf.write_port(this);
}
/**
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRangeException.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRangeException.java
index cbddea9f24..ce92c927d0 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRangeException.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRangeException.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java
index 8b57e7265b..2165397013 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,11 +28,13 @@ public class OtpErlangRef extends OtpErlangObject {
// don't change this!
private static final long serialVersionUID = -7022666480768586521L;
+ private final int tag;
private final String node;
private final int creation;
// old style refs have one 18-bit id
// r6 "new" refs have array of ids, first one is only 18 bits however
+ // 19 "newer" refs have full 32-bits for creation and for ids[0]
private int ids[] = null;
/**
@@ -47,6 +49,7 @@ public class OtpErlangRef extends OtpErlangObject {
public OtpErlangRef(final OtpLocalNode self) {
final OtpErlangRef r = self.createRef();
+ tag = r.tag;
ids = r.ids;
creation = r.creation;
node = r.node;
@@ -67,6 +70,7 @@ public class OtpErlangRef extends OtpErlangObject {
throws OtpErlangDecodeException {
final OtpErlangRef r = buf.read_ref();
+ tag = r.tag;
node = r.node();
creation = r.creation();
@@ -83,10 +87,10 @@ public class OtpErlangRef extends OtpErlangObject {
* an arbitrary number. Only the low order 18 bits will be used.
*
* @param creation
- * another arbitrary number. Only the low order 2 bits will be
- * used.
+ * another arbitrary number.
*/
public OtpErlangRef(final String node, final int id, final int creation) {
+ this.tag = OtpExternal.newRefTag;
this.node = node;
ids = new int[1];
ids[0] = id & 0x3ffff; // 18 bits
@@ -110,10 +114,34 @@ public class OtpErlangRef extends OtpErlangObject {
* used.
*/
public OtpErlangRef(final String node, final int[] ids, final int creation) {
+ this(OtpExternal.newRefTag, node, ids, creation);
+ }
+
+ /**
+ * Create a new(er) style Erlang ref from its components.
+ *
+ * @param tag
+ * the external format to be compliant with.
+ * OtpExternal.newRefTag where only a subset of the bits are used (see other constructor)
+ * OtpExternal.newerRefTag where all bits of ids and creation are used.
+ * newerPortTag can only be decoded by OTP-19 and newer.
+ *
+ * @param node
+ * the nodename.
+ *
+ * @param ids
+ * an array of arbitrary numbers. At most three numbers
+ * will be read from the array.
+ *
+ * @param creation
+ * another arbitrary number.
+ */
+ public OtpErlangRef(final int tag, final String node, final int[] ids,
+ final int creation) {
+ this.tag = tag;
this.node = node;
- this.creation = creation & 0x03; // 2 bits
- // use at most 82 bits (18 + 32 + 32)
+ // use at most 3 words
int len = ids.length;
this.ids = new int[3];
this.ids[0] = 0;
@@ -124,7 +152,17 @@ public class OtpErlangRef extends OtpErlangObject {
len = 3;
}
System.arraycopy(ids, 0, this.ids, 0, len);
- this.ids[0] &= 0x3ffff; // only 18 significant bits in first number
+ if (tag == OtpExternal.newRefTag) {
+ this.creation = creation & 0x3;
+ this.ids[0] &= 0x3ffff; // only 18 significant bits in first number
+ }
+ else {
+ this.creation = creation;
+ }
+ }
+
+ protected int tag() {
+ return tag;
}
/**
@@ -202,7 +240,7 @@ public class OtpErlangRef extends OtpErlangObject {
*/
@Override
public void encode(final OtpOutputStream buf) {
- buf.write_ref(node, ids, creation);
+ buf.write_ref(this);
}
/**
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java
index fcd417b4a7..9450605690 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java
index dab83f98a2..63307bb2eb 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java
index 477f5dff83..5d88cfa4dc 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java
index ea1060121a..93d4e475ed 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java
index b1391fddf9..337ed409d4 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java
index 6f44cecd32..660af1c874 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpExternal.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpExternal.java
index 4645f25590..da8ac3612f 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpExternal.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpExternal.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -46,9 +46,11 @@ public class OtpExternal {
/** The tag used for ports */
public static final int portTag = 102;
+ public static final int newPortTag = 89;
/** The tag used for PIDs */
public static final int pidTag = 103;
+ public static final int newPidTag = 88;
/** The tag used for small tuples */
public static final int smallTupleTag = 104;
@@ -85,6 +87,7 @@ public class OtpExternal {
/** The tag used for new style references */
public static final int newRefTag = 114;
+ public static final int newerRefTag = 90;
/** The tag used for maps */
public static final int mapTag = 116;
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java
index fa0815fbf0..ded8f6e1e5 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -954,18 +954,23 @@ public class OtpInputStream extends ByteArrayInputStream {
tag = read1skip_version();
- if (tag != OtpExternal.pidTag) {
+ if (tag != OtpExternal.pidTag &&
+ tag != OtpExternal.newPidTag) {
throw new OtpErlangDecodeException(
"Wrong tag encountered, expected " + OtpExternal.pidTag
+ + " or " + OtpExternal.newPidTag
+ ", got " + tag);
}
node = read_atom();
- id = read4BE() & 0x7fff; // 15 bits
- serial = read4BE() & 0x1fff; // 13 bits
- creation = read1() & 0x03; // 2 bits
-
- return new OtpErlangPid(node, id, serial, creation);
+ id = read4BE();
+ serial = read4BE();
+ if (tag == OtpExternal.pidTag)
+ creation = read1();
+ else
+ creation = read4BE();
+
+ return new OtpErlangPid(tag, node, id, serial, creation);
}
/**
@@ -984,17 +989,22 @@ public class OtpInputStream extends ByteArrayInputStream {
tag = read1skip_version();
- if (tag != OtpExternal.portTag) {
+ if (tag != OtpExternal.portTag &&
+ tag != OtpExternal.newPortTag) {
throw new OtpErlangDecodeException(
"Wrong tag encountered, expected " + OtpExternal.portTag
+ + " or " + OtpExternal.newPortTag
+ ", got " + tag);
}
node = read_atom();
- id = read4BE() & 0xfffffff; // 28 bits
- creation = read1() & 0x03; // 2 bits
+ id = read4BE();
+ if (tag == OtpExternal.portTag)
+ creation = read1();
+ else
+ creation = read4BE();
- return new OtpErlangPort(node, id, creation);
+ return new OtpErlangPort(tag, node, id, creation);
}
/**
@@ -1021,16 +1031,23 @@ public class OtpInputStream extends ByteArrayInputStream {
return new OtpErlangRef(node, id, creation);
case OtpExternal.newRefTag:
+ case OtpExternal.newerRefTag:
final int arity = read2BE();
+ if (arity > 3) {
+ throw new OtpErlangDecodeException(
+ "Ref arity " + arity + " too large ");
+ }
node = read_atom();
- creation = read1() & 0x03; // 2 bits
+ if (tag == OtpExternal.newRefTag)
+ creation = read1();
+ else
+ creation = read4BE();
final int[] ids = new int[arity];
for (int i = 0; i < arity; i++) {
ids[i] = read4BE();
}
- ids[0] &= 0x3ffff; // first id gets truncated to 18 bits
- return new OtpErlangRef(node, ids, creation);
+ return new OtpErlangRef(tag, node, ids, creation);
default:
throw new OtpErlangDecodeException(
@@ -1200,15 +1217,18 @@ public class OtpInputStream extends ByteArrayInputStream {
case OtpExternal.refTag:
case OtpExternal.newRefTag:
+ case OtpExternal.newerRefTag:
return new OtpErlangRef(this);
case OtpExternal.mapTag:
return new OtpErlangMap(this);
case OtpExternal.portTag:
+ case OtpExternal.newPortTag:
return new OtpErlangPort(this);
case OtpExternal.pidTag:
+ case OtpExternal.newPidTag:
return new OtpErlangPid(this);
case OtpExternal.stringTag:
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java
index 3d6b15ad64..6f896aab9f 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java
index 6d1a04d9f0..45f856f7cb 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java
index 29119dec5c..70c9e6db4a 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java
index 9597f2abd6..5bbcf2ab9e 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java
index b2598924e9..e48e6e8633 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNodeStatus.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNodeStatus.java
index 4c0cb257fe..f3f7bc9511 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNodeStatus.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNodeStatus.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java
index 4faae2a157..dca2eb7c51 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -728,14 +728,38 @@ public class OtpOutputStream extends ByteArrayOutputStream {
*/
public void write_pid(final String node, final int id, final int serial,
final int creation) {
- write1(OtpExternal.pidTag);
- write_atom(node);
- write4BE(id & 0x7fff); // 15 bits
- write4BE(serial & 0x1fff); // 13 bits
- write1(creation & 0x3); // 2 bits
+ write1(OtpExternal.pidTag);
+ write_atom(node);
+ write4BE(id & 0x7fff); // 15 bits
+ write4BE(serial & 0x1fff); // 13 bits
+ write1(creation & 0x3); // 2 bits
}
/**
+ * Write an Erlang PID to the stream.
+ *
+ * @param pid
+ * the pid
+ */
+ public void write_pid(OtpErlangPid pid) {
+ write1(pid.tag());
+ write_atom(pid.node());
+ write4BE(pid.id());
+ write4BE(pid.serial());
+ switch (pid.tag()) {
+ case OtpExternal.pidTag:
+ write1(pid.creation());
+ break;
+ case OtpExternal.newPidTag:
+ write4BE(pid.creation());
+ break;
+ default:
+ throw new AssertionError("Invalid pid tag " + pid.tag());
+ }
+ }
+
+
+ /**
* Write an Erlang port to the stream.
*
* @param node
@@ -745,15 +769,36 @@ public class OtpOutputStream extends ByteArrayOutputStream {
* an arbitrary number. Only the low order 28 bits will be used.
*
* @param creation
- * another arbitrary number. Only the low order 2 bits will be
- * used.
- *
+ * another arbitrary number. Only the low order 2 bits will
+ * be used.
*/
public void write_port(final String node, final int id, final int creation) {
- write1(OtpExternal.portTag);
- write_atom(node);
- write4BE(id & 0xfffffff); // 28 bits
- write1(creation & 0x3); // 2 bits
+ write1(OtpExternal.portTag);
+ write_atom(node);
+ write4BE(id & 0xfffffff); // 28 bits
+ write1(creation & 0x3); // 2 bits
+ }
+
+ /**
+ * Write an Erlang port to the stream.
+ *
+ * @param port
+ * the port.
+ */
+ public void write_port(OtpErlangPort port) {
+ write1(port.tag());
+ write_atom(port.node());
+ write4BE(port.id());
+ switch (port.tag()) {
+ case OtpExternal.portTag:
+ write1(port.creation());
+ break;
+ case OtpExternal.newPortTag:
+ write4BE(port.creation());
+ break;
+ default:
+ throw new AssertionError("Invalid port tag " + port.tag());
+ }
}
/**
@@ -766,32 +811,31 @@ public class OtpOutputStream extends ByteArrayOutputStream {
* an arbitrary number. Only the low order 18 bits will be used.
*
* @param creation
- * another arbitrary number. Only the low order 2 bits will be
- * used.
+ * another arbitrary number.
*
*/
public void write_ref(final String node, final int id, final int creation) {
- write1(OtpExternal.refTag);
- write_atom(node);
- write4BE(id & 0x3ffff); // 18 bits
- write1(creation & 0x3); // 2 bits
+ /* Always encode as an extended reference; all
+ participating parties are now expected to be
+ able to decode extended references. */
+ int ids[] = new int[1];
+ ids[0] = id;
+ write_ref(node, ids, creation);
}
/**
- * Write a new style (R6 and later) Erlang ref to the stream.
+ * Write an Erlang ref to the stream.
*
* @param node
* the nodename.
*
* @param ids
* an array of arbitrary numbers. Only the low order 18 bits of
- * the first number will be used. If the array contains only one
- * number, an old style ref will be written instead. At most
- * three numbers will be read from the array.
+ * the first number will be used. At most three numbers
+ * will be read from the array.
*
* @param creation
- * another arbitrary number. Only the low order 2 bits will be
- * used.
+ * another arbitrary number. Only the low order 2 bits will be used.
*
*/
public void write_ref(final String node, final int[] ids, final int creation) {
@@ -800,29 +844,54 @@ public class OtpOutputStream extends ByteArrayOutputStream {
arity = 3; // max 3 words in ref
}
- if (arity == 1) {
- // use old method
- this.write_ref(node, ids[0], creation);
- } else {
- // r6 ref
- write1(OtpExternal.newRefTag);
+ write1(OtpExternal.newRefTag);
- // how many id values
- write2BE(arity);
+ // how many id values
+ write2BE(arity);
- write_atom(node);
+ write_atom(node);
- // note: creation BEFORE id in r6 ref
- write1(creation & 0x3); // 2 bits
+ write1(creation & 0x3); // 2 bits
- // first int gets truncated to 18 bits
- write4BE(ids[0] & 0x3ffff);
+ // first int gets truncated to 18 bits
+ write4BE(ids[0] & 0x3ffff);
- // remaining ones are left as is
- for (int i = 1; i < arity; i++) {
- write4BE(ids[i]);
- }
- }
+ // remaining ones are left as is
+ for (int i = 1; i < arity; i++) {
+ write4BE(ids[i]);
+ }
+ }
+
+ /**
+ * Write an Erlang ref to the stream.
+ *
+ * @param ref
+ * the reference
+ */
+ public void write_ref(OtpErlangRef ref) {
+ int[] ids = ref.ids();
+ int arity = ids.length;
+
+ write1(ref.tag());
+ write2BE(arity);
+ write_atom(ref.node());
+
+ switch (ref.tag()) {
+ case OtpExternal.newRefTag:
+ write1(ref.creation());
+ write4BE(ids[0] & 0x3ffff); // first word gets truncated to 18 bits
+ break;
+ case OtpExternal.newerRefTag:
+ write4BE(ref.creation());
+ write4BE(ids[0]); // full first word
+ break;
+ default:
+ throw new AssertionError("Invalid ref tag " + ref.tag());
+ }
+
+ for (int i = 1; i < arity; i++) {
+ write4BE(ids[i]);
+ }
}
/**
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpPeer.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpPeer.java
index 1f06e2eb9f..e614b03a69 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpPeer.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpPeer.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSelf.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSelf.java
index 03154aa785..97f7f037e7 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSelf.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSelf.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpServer.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpServer.java
index d4831b948d..d6a143ca6a 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpServer.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpServer.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSystem.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSystem.java
index 0ff38d7026..3598423afa 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSystem.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpSystem.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/java_files b/lib/jinterface/java_src/com/ericsson/otp/erlang/java_files
index a039a75f34..cfabbe6271 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/java_files
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/java_files
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.app.src b/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.app.src
index bc8b99f2a1..dea62c3ae1 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.app.src
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.appup.src b/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.appup.src
index eee7be1540..eb9854d22d 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.appup.src
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/package.html b/lib/jinterface/java_src/com/ericsson/otp/erlang/package.html
index 70af29c041..f7b4884851 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/package.html
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/package.html
@@ -3,7 +3,7 @@
%CopyrightBegin%
- Copyright Ericsson AB 2000-2009. All Rights Reserved.
+ Copyright Ericsson AB 2000-2016. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/java_src/pom.xml.src b/lib/jinterface/java_src/pom.xml.src
index cef49b735a..98232db78c 100644
--- a/lib/jinterface/java_src/pom.xml.src
+++ b/lib/jinterface/java_src/pom.xml.src
@@ -7,14 +7,14 @@
<version>%VSN%</version>
<name>jinterface</name>
<description>
- Jinterface Java package contains java classes, which help you integrate programs written in Java with Erlang.
+ Jinterface Java package contains java classes, which help you integrate programs written in Java with Erlang.
Erlang is a programming language designed at the Ericsson Computer Science Laboratory.
- </description>
+ </description>
<url>http://erlang.org/</url>
<licenses>
<license>
- <name>ERLANG PUBLIC LICENSE 1.1</name>
- <url>http://www.erlang.org/EPLICENSE</url>
+ <name>Apache License 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
@@ -37,14 +37,16 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
+ <version>3.5.1</version>
<configuration>
- <source>1.5</source>
- <target>1.5</target>
+ <source>1.6</source>
+ <target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.10</version>
<executions>
<execution>
<phase>generate-sources</phase>
@@ -59,6 +61,32 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>3.0.0</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar-no-fork</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.10.3</version>
+ <executions>
+ <execution>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
<distributionManagement>
@@ -85,7 +113,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
- <version>1.0-alpha-4</version>
+ <version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
diff --git a/lib/jinterface/test/Makefile b/lib/jinterface/test/Makefile
index 40abcd18a0..3eff11e4f7 100644
--- a/lib/jinterface/test/Makefile
+++ b/lib/jinterface/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface.spec b/lib/jinterface/test/jinterface.spec
index b0d0fa9d8d..7c815d2b5b 100644
--- a/lib/jinterface/test/jinterface.spec
+++ b/lib/jinterface/test/jinterface.spec
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE.erl b/lib/jinterface/test/jinterface_SUITE.erl
index 6d34a21209..73851f47e0 100644
--- a/lib/jinterface/test/jinterface_SUITE.erl
+++ b/lib/jinterface/test/jinterface_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@
]).
-include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-define(debug,true).
-ifdef(debug).
diff --git a/lib/jinterface/test/jinterface_SUITE_data/BooleanAtom.java b/lib/jinterface/test/jinterface_SUITE_data/BooleanAtom.java
index 0d482f3fd2..849cfb1c72 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/BooleanAtom.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/BooleanAtom.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/FunEquals.java b/lib/jinterface/test/jinterface_SUITE_data/FunEquals.java
index e15ba30a52..3cb408994f 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/FunEquals.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/FunEquals.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/GetNames.java b/lib/jinterface/test/jinterface_SUITE_data/GetNames.java
index 87a27f71ab..a0b396947d 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/GetNames.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/GetNames.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/Makefile.src b/lib/jinterface/test/jinterface_SUITE_data/Makefile.src
index 94625da188..19c2157f7a 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/Makefile.src
+++ b/lib/jinterface/test/jinterface_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2010. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/Maps.java b/lib/jinterface/test/jinterface_SUITE_data/Maps.java
index e31b476e02..e8a05245da 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/Maps.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/Maps.java
@@ -11,7 +11,7 @@ import com.ericsson.otp.erlang.OtpOutputStream;
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java b/lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java
index 7042b6297d..8cb4aa2ed6 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/MboxPing.java b/lib/jinterface/test/jinterface_SUITE_data/MboxPing.java
index 13e2c8edc4..629fd49c93 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/MboxPing.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/MboxPing.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java b/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java
index 67ab6b13aa..8e25e0f8b5 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/NodePing.java b/lib/jinterface/test/jinterface_SUITE_data/NodePing.java
index 5938f2b335..fe5592ef7e 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/NodePing.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/NodePing.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java b/lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java
index bb21fa85ad..f27a49ce81 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/Nodename.java b/lib/jinterface/test/jinterface_SUITE_data/Nodename.java
index 770431a414..2a236b4bad 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/Nodename.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/Nodename.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jinterface_SUITE_data/RegisterAndWhereis.java b/lib/jinterface/test/jinterface_SUITE_data/RegisterAndWhereis.java
index 3612460cce..18c865fada 100644
--- a/lib/jinterface/test/jinterface_SUITE_data/RegisterAndWhereis.java
+++ b/lib/jinterface/test/jinterface_SUITE_data/RegisterAndWhereis.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/jitu.erl b/lib/jinterface/test/jitu.erl
index adcadac85e..961130585a 100644
--- a/lib/jinterface/test/jitu.erl
+++ b/lib/jinterface/test/jitu.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/nc_SUITE.erl b/lib/jinterface/test/nc_SUITE.erl
index c5f3198c21..81944f71d4 100644
--- a/lib/jinterface/test/nc_SUITE.erl
+++ b/lib/jinterface/test/nc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,6 @@
-include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-define(VERSION_MAGIC, 131).
@@ -32,6 +31,10 @@
-define(NEW_REFERENCE_EXT, 114).
-define(ATOM_UTF8_EXT, 118).
-define(SMALL_ATOM_UTF8_EXT, 119).
+-define(NEW_PID_EXT, $X).
+-define(NEW_PORT_EXT, $Y).
+-define(NEWER_REFERENCE_EXT, $Z).
+
-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
init_per_suite/1,
@@ -124,12 +127,13 @@ pid_roundtrip(doc) -> [];
pid_roundtrip(suite) -> [];
pid_roundtrip(Config) when is_list(Config)->
ThisNode = {node(), erlang:system_info(creation)},
- RemNode = {gurka@sallad, 2},
+ RemPids = [mk_pid({gurka@sallad, Cr}, Num, Ser)
+ || Cr <- [1,2,3,4,16#adec0ded],
+ {Num, Ser} <- [{4711,4711},{32767, 8191}]],
do_echo([self(),
mk_pid(ThisNode, 4711, 4711),
- mk_pid(ThisNode, 32767, 8191),
- mk_pid(RemNode, 4711, 4711),
- mk_pid(RemNode, 32767, 8191)],
+ mk_pid(ThisNode, 32767, 8191)
+ | RemPids],
Config).
fun_roundtrip(doc) -> [];
@@ -145,26 +149,29 @@ port_roundtrip(doc) -> [];
port_roundtrip(suite) -> [];
port_roundtrip(Config) when is_list(Config)->
ThisNode = {node(), erlang:system_info(creation)},
- RemNode = {gurka@sallad, 2},
+ RemPorts = [mk_port({gurka@sallad, Cr}, Num)
+ || Cr <- [1,2,3,4,16#adec0ded],
+ Num <- [4711, 268435455]],
do_echo([hd(erlang:ports()),
mk_port(ThisNode, 4711),
- mk_port(ThisNode, 268435455),
- mk_port(RemNode, 4711),
- mk_port(RemNode, 268435455)],
+ mk_port(ThisNode, 268435455)
+ | RemPorts],
Config).
ref_roundtrip(doc) -> [];
ref_roundtrip(suite) -> [];
ref_roundtrip(Config) when is_list(Config)->
ThisNode = {node(), erlang:system_info(creation)},
- RemNode = {gurka@sallad, 2},
+ RemRefs = [mk_ref({gurka@sallad, Cr}, Words)
+ || Cr <- [1,2,3,4,16#adec0ded],
+ Words <- [[4711],
+ [4711, 4711, 4711],
+ [262143, 4294967295, 4294967295]]],
do_echo([make_ref(),
mk_ref(ThisNode, [4711]),
mk_ref(ThisNode, [4711, 4711, 4711]),
- mk_ref(ThisNode, [262143, 4294967295, 4294967295]),
- mk_ref(RemNode, [4711]),
- mk_ref(RemNode, [4711, 4711, 4711]),
- mk_ref(RemNode, [262143, 4294967295, 4294967295])],
+ mk_ref(ThisNode, [262143, 4294967295, 4294967295])
+ | RemRefs],
Config).
new_float(doc) -> [];
@@ -760,17 +767,22 @@ uint8(Uint) ->
exit({badarg, uint8, [Uint]}).
+pid_tag(Creation) when Creation =< 3 -> ?PID_EXT;
+pid_tag(_Creation) -> ?NEW_PID_EXT.
+
+enc_creation(Creation) when Creation =< 3 -> uint8(Creation);
+enc_creation(Creation) -> uint32_be(Creation).
mk_pid({NodeName, Creation}, Number, Serial) when is_atom(NodeName) ->
<<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName),
mk_pid({NodeNameExt, Creation}, Number, Serial);
mk_pid({NodeNameExt, Creation}, Number, Serial) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PID_EXT,
+ pid_tag(Creation),
NodeNameExt,
uint32_be(Number),
uint32_be(Serial),
- uint8(Creation)])) of
+ enc_creation(Creation)])) of
Pid when is_pid(Pid) ->
Pid;
{'EXIT', {badarg, _}} ->
@@ -779,15 +791,18 @@ mk_pid({NodeNameExt, Creation}, Number, Serial) ->
exit({unexpected_binary_to_term_result, Other})
end.
+port_tag(Creation) when Creation =< 3 -> ?PORT_EXT;
+port_tag(_Creation) -> ?NEW_PORT_EXT.
+
mk_port({NodeName, Creation}, Number) when is_atom(NodeName) ->
<<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName),
mk_port({NodeNameExt, Creation}, Number);
mk_port({NodeNameExt, Creation}, Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PORT_EXT,
+ port_tag(Creation),
NodeNameExt,
uint32_be(Number),
- uint8(Creation)])) of
+ enc_creation(Creation)])) of
Port when is_port(Port) ->
Port;
{'EXIT', {badarg, _}} ->
@@ -796,12 +811,16 @@ mk_port({NodeNameExt, Creation}, Number) ->
exit({unexpected_binary_to_term_result, Other})
end.
+ref_tag(Creation) when Creation =< 3 -> ?NEW_REFERENCE_EXT;
+ref_tag(_Creation) -> ?NEWER_REFERENCE_EXT.
+
mk_ref({NodeName, Creation}, [Number] = NL) when is_atom(NodeName),
is_integer(Creation),
is_integer(Number) ->
<<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName),
mk_ref({NodeNameExt, Creation}, NL);
mk_ref({NodeNameExt, Creation}, [Number]) when is_integer(Creation),
+ Creation =< 3,
is_integer(Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
?REFERENCE_EXT,
@@ -823,10 +842,10 @@ mk_ref({NodeName, Creation}, Numbers) when is_atom(NodeName),
mk_ref({NodeNameExt, Creation}, Numbers) when is_integer(Creation),
is_list(Numbers) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?NEW_REFERENCE_EXT,
+ ref_tag(Creation),
uint16_be(length(Numbers)),
NodeNameExt,
- uint8(Creation),
+ enc_creation(Creation),
lists:map(fun (N) ->
uint32_be(N)
end,
diff --git a/lib/jinterface/test/nc_SUITE_data/Makefile.src b/lib/jinterface/test/nc_SUITE_data/Makefile.src
index 3d02389df8..94e2c1fa47 100644
--- a/lib/jinterface/test/nc_SUITE_data/Makefile.src
+++ b/lib/jinterface/test/nc_SUITE_data/Makefile.src
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2010. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/nc_SUITE_data/connection_server.java b/lib/jinterface/test/nc_SUITE_data/connection_server.java
index 36c5074031..97273f5306 100644
--- a/lib/jinterface/test/nc_SUITE_data/connection_server.java
+++ b/lib/jinterface/test/nc_SUITE_data/connection_server.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2010. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/test/nc_SUITE_data/echo_server.java b/lib/jinterface/test/nc_SUITE_data/echo_server.java
index 4caf0dedde..49846a6972 100644
--- a/lib/jinterface/test/nc_SUITE_data/echo_server.java
+++ b/lib/jinterface/test/nc_SUITE_data/echo_server.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2004-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/jinterface/vsn.mk b/lib/jinterface/vsn.mk
index 41e670528a..752b34e78c 100644
--- a/lib/jinterface/vsn.mk
+++ b/lib/jinterface/vsn.mk
@@ -1 +1 @@
-JINTERFACE_VSN = 1.6.1
+JINTERFACE_VSN = 1.7
diff --git a/lib/kernel/Makefile b/lib/kernel/Makefile
index 74f942b027..b956f5eaf5 100644
--- a/lib/kernel/Makefile
+++ b/lib/kernel/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/kernel/doc/src/Makefile b/lib/kernel/doc/src/Makefile
index 3c6414a620..8976a3b800 100644
--- a/lib/kernel/doc/src/Makefile
+++ b/lib/kernel/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/kernel/doc/src/app.xml b/lib/kernel/doc/src/app.xml
index 35feec144e..5e0da409a3 100644
--- a/lib/kernel/doc/src/app.xml
+++ b/lib/kernel/doc/src/app.xml
@@ -4,7 +4,7 @@
<fileref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -42,12 +42,12 @@
</description>
<section>
- <title>FILE SYNTAX</title>
- <p>The application resource file should be called
- <c>Application.app</c> where <c>Application</c> is the name of
- the application. The file should be located in the <c>ebin</c>
- directory for the application.</p>
- <p>It must contain one single Erlang term, which is called an
+ <title>File Syntax</title>
+ <p>The application resource file is to be called
+ <c>Application.app</c>, where <c>Application</c> is the
+ application name. The file is to be located in directory <c>ebin</c>
+ for the application.</p>
+ <p>The file must contain a single Erlang term, which is called an
<em>application specification</em>:</p>
<code type="none">
{application, Application,
@@ -80,19 +80,26 @@ Env [{Par,Val}] []
Start {Module,StartArgs} []
Phases [{Phase,PhaseArgs}] undefined
RTDeps [ApplicationVersion] []
- Module = Name = App = Par = Phase = atom()
- Val = StartArgs = PhaseArgs = term()
- ApplicationVersion = string()</code>
- <p><c>Application</c> is the name of the application.</p>
+
+Module = Name = App = Par = Phase = atom()
+Val = StartArgs = PhaseArgs = term()
+ApplicationVersion = string()</code>
+ <taglist>
+ <tag><c>Application</c></tag>
+ <item>Application name.</item>
+ </taglist>
<p>For the application controller, all keys are optional.
The respective default values are used for any omitted keys.</p>
<p>The functions in <c>systools</c> require more information. If
- they are used, the following keys are mandatory:
- <c>description</c>, <c>vsn</c>, <c>modules</c>, <c>registered</c>
- and <c>applications</c>. The other keys are ignored by
- <c>systools</c>.</p>
- <warning><p>The <c>RTDeps</c> type was introduced in OTP 17.0 and
- might be subject to changes during the OTP 17 release.</p></warning>
+ they are used, the following keys are mandatory:</p>
+ <list type="bulleted">
+ <item><c>description</c></item>
+ <item><c>vsn</c></item>
+ <item><c>modules</c></item>
+ <item><c>registered</c></item>
+ <item><c>applications</c></item>
+ </list>
+ <p>The other keys are ignored by <c>systools</c>.</p>
<taglist>
<tag><c>description</c></tag>
<item>
@@ -104,7 +111,7 @@ RTDeps [ApplicationVersion] []
</item>
<tag><c>vsn</c></tag>
<item>
- <p>The version of the application.</p>
+ <p>Version of the application.</p>
</item>
<tag><c>modules</c></tag>
<item>
@@ -114,15 +121,14 @@ RTDeps [ApplicationVersion] []
</item>
<tag><c>maxP</c></tag>
<item>
- <p><em>Deprecated - will be ignored</em> <br></br>
-
- The maximum number of processes allowed in the application.</p>
+ <p><em>Deprecated - is ignored</em></p>
+ <p>Maximum number of processes allowed in the application.</p>
</item>
<tag><c>maxT</c></tag>
<item>
- <p>The maximum time in milliseconds that the application is
- allowed to run. After the specified time the application will
- automatically terminate.</p>
+ <p>Maximum time, in milliseconds, that the application is
+ allowed to run. After the specified time, the application
+ terminates automatically.</p>
</item>
<tag><c>registered</c></tag>
<item>
@@ -132,20 +138,20 @@ RTDeps [ApplicationVersion] []
</item>
<tag><c>included_applications</c></tag>
<item>
- <p>All applications which are included by this application.
- When this application is started, all included application
- will automatically be loaded, but not started, by
- the application controller. It is assumed that the topmost
+ <p>All applications included by this application.
+ When this application is started, all included applications
+ are loaded automatically, but not started, by
+ the application controller. It is assumed that the top-most
supervisor of the included application is started by a
supervisor of this application.</p>
</item>
<tag><c>applications</c></tag>
<item>
- <p>All applications which must be started before this
+ <p>All applications that must be started before this
application is allowed to be started. <c>systools</c> uses
this list to generate correct start scripts. Defaults to
- the empty list, but note that all applications have
- dependencies to (at least) <c>kernel</c> and <c>stdlib</c>.</p>
+ the empty list, but notice that all applications have
+ dependencies to (at least) <c>Kernel</c> and <c>STDLIB</c>.</p>
</item>
<tag><c>env</c></tag>
<item>
@@ -153,78 +159,84 @@ RTDeps [ApplicationVersion] []
of a configuration parameter is retrieved by calling
<c>application:get_env/1,2</c>. The values in the application
resource file can be overridden by values in a configuration
- file (see <c>config(4)</c>) or by command line flags (see
- <c>erl(1)</c>).</p>
+ file (see <seealso marker="config"><c>config(4)</c></seealso>)
+ or by command-line flags (see
+ <seealso marker="erts:erl"><c>erts:erl(1)</c></seealso>).</p>
</item>
<tag><c>mod</c></tag>
<item>
- <p>Specifies the application callback module and a start
- argument, see <c>application(3)</c>.</p>
- <p>The <c>mod</c> key is necessary for an application
- implemented as a supervision tree, or the application
- controller will not know how to start it. The <c>mod</c> key
+ <p>Specifies the application callback module and a start argument, see
+ <seealso marker="application"><c>application(3)</c></seealso>.</p>
+ <p>Key <c>mod</c> is necessary for an application
+ implemented as a supervision tree, otherwise the application
+ controller does not know how to start it. <c>mod</c>
can be omitted for applications without processes, typically
- code libraries such as the application STDLIB.</p>
+ code libraries, for example, <c>STDLIB</c>.</p>
</item>
<tag><c>start_phases</c></tag>
<item>
<p>A list of start phases and corresponding start arguments for
the application. If this key is present, the application
- master will - in addition to the usual call to
- <c>Module:start/2</c> - also call
+ master, in addition to the usual call to
+ <c>Module:start/2</c>, also calls
<c>Module:start_phase(Phase,Type,PhaseArgs)</c> for each
- start phase defined by the <c>start_phases</c> key, and only
- after this extended start procedure will
- <c>application:start(Application)</c> return.</p>
- <p>Start phases may be used to synchronize startup of an
+ start phase defined by key <c>start_phases</c>. Only
+ after this extended start procedure,
+ <c>application:start(Application)</c> returns.</p>
+ <p>Start phases can be used to synchronize startup of an
application and its included applications. In this case,
- the <c>mod</c> key must be specified as:</p>
+ key <c>mod</c> must be specified as follows:</p>
<code type="none">
{mod, {application_starter,[Module,StartArgs]}}</code>
- <p>The application master will then call <c>Module:start/2</c>
+ <p>The application master then calls <c>Module:start/2</c>
for the primary application, followed by calls to
<c>Module:start_phase/3</c> for each start phase (as defined
- for the primary application) both for the primary application
- and for each of its included application, for which the start
+ for the primary application), both for the primary application
+ and for each of its included applications, for which the start
phase is defined.</p>
<p>This implies that for an included application, the set of
start phases must be a subset of the set of phases defined
- for the primary application. Refer to <em>OTP Design Principles</em> for more information.</p>
+ for the primary application. For more information, see
+ <seealso marker="doc/design_principles:applications">OTP Design Principles</seealso>.
+ </p>
</item>
- <tag><marker id="runtime_dependencies"></marker><c>runtime_dependencies</c></tag>
- <item><p>A list of application versions that the application
- depends on. An example of such an application version is
- <c>"kernel-3.0"</c>. Application versions specified as runtime
- dependencies are minimum requirements. That is, a larger
- application version than the one specified in the
- dependency satisfies the requirement. For information on
- how to compare application versions see
- <seealso marker="doc/system_principles:versions">the
- documentation of versions in the system principles
- guide</seealso>. Note that the application version
- specifies a source code version. An additional indirect
- requirement is that installed binary application of
- the specified version has been built so that it is
- compatible with the rest of the system.</p>
- <p>Some dependencies might only be required in specific runtime
- scenarios. In the case such optional dependencies exist, these are
- specified and documented in the corresponding "App" documentation
- of the specific application.</p>
- <warning><p>The <c>runtime_dependencies</c> key was introduced in
- OTP 17.0. The type of its value might be subject to changes during
- the OTP 17 release.</p></warning>
- <warning><p>All runtime dependencies specified in OTP applications
- during the OTP 17 release may not be completely correct. This
- is actively being worked on. Declared runtime dependencies in OTP
- applications are expected to be correct in OTP 18.</p></warning>
+ <tag>
+ <marker id="runtime_dependencies"></marker>
+ <c>runtime_dependencies</c></tag>
+ <item>
+ <p>A list of application versions that the application
+ depends on. An example of such an application version is
+ <c>"kernel-3.0"</c>. Application versions specified as runtime
+ dependencies are minimum requirements. That is, a larger
+ application version than the one specified in the
+ dependency satisfies the requirement. For information about
+ how to compare application versions, see section
+ <seealso marker="doc/system_principles:versions">Versions</seealso>
+ in the System Principles User's Guide.</p>
+ <p>Notice that the application version
+ specifies a source code version. One more, indirect,
+ requirement is that the installed binary application of
+ the specified version is built so that it is
+ compatible with the rest of the system.</p>
+ <p>Some dependencies can only be required in specific runtime
+ scenarios. When such optional dependencies exist, these are
+ specified and documented in the corresponding "App" documentation
+ of the specific application.</p>
+ <warning><p>The <c>runtime_dependencies</c> key was introduced in
+ OTP 17.0. The type of its value might be subject to changes during
+ the OTP 17 release.</p></warning>
+ <warning><p>All runtime dependencies specified in OTP applications
+ during the OTP 17 release may not be completely correct. This
+ is actively being worked on. Declared runtime dependencies in OTP
+ applications are expected to be correct in OTP 18.</p></warning>
</item>
</taglist>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="application">application(3)</seealso>,
- systools(3)</p>
+ <title>See Also</title>
+ <p><seealso marker="application"><c>application(3)</c></seealso>,
+ <seealso marker="sasl:systools"><c>sasl:systools(3)</c></seealso></p>
</section>
</fileref>
diff --git a/lib/kernel/doc/src/application.xml b/lib/kernel/doc/src/application.xml
index 4d8e6ce94b..8d33aa86e7 100644
--- a/lib/kernel/doc/src/application.xml
+++ b/lib/kernel/doc/src/application.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,23 +33,25 @@
<description>
<p>In OTP, <em>application</em> denotes a component implementing
some specific functionality, that can be started and stopped as a
- unit, and which can be re-used in other systems as well. This
- module interfaces the <em>application controller</em>, a process
- started at every Erlang runtime system, and contains functions
- for controlling applications (for example starting and stopping
+ unit, and that can be reused in other systems. This
+ module interacts with <em>application controller</em>, a process
+ started at every Erlang runtime system. This module contains functions
+ for controlling applications (for example, starting and stopping
applications), and functions to access information about
- applications (for example configuration parameters).</p>
- <p>An application is defined by an <em>application specification</em>. The specification is normally located in an
- <em>application resource file</em> called <c>Application.app</c>,
- where <c>Application</c> is the name of the application. Refer to
- <seealso marker="app">app(4)</seealso> for more information about
- the application specification.</p>
+ applications (for example, configuration parameters).</p>
+ <p>An application is defined by an <em>application specification</em>.
+ The specification is normally located in an
+ <em>application resource file</em> named <c>Application.app</c>,
+ where <c>Application</c> is the application name. For details
+ about the application specification, see
+ <seealso marker="app"><c>app(4)</c></seealso>.</p>
<p>This module can also be viewed as a behaviour for an application
implemented according to the OTP design principles as a
supervision tree. The definition of how to start and stop
- the tree should be located in an <em>application callback module</em> exporting a pre-defined set of functions.</p>
- <p>Refer to <seealso marker="doc/design_principles:des_princ">OTP Design Principles</seealso> for more information about
- applications and behaviours.</p>
+ the tree is to be located in an <em>application callback module</em>,
+ exporting a predefined set of functions.</p>
+ <p>For details about applications and behaviours, see
+ <seealso marker="doc/design_principles:des_princ">OTP Design Principles</seealso>.</p>
</description>
<datatypes>
<datatype>
@@ -59,17 +61,43 @@
<name name="restart_type"/>
</datatype>
<datatype>
- <!-- Parameterized opaque types are NYI: -->
<name>tuple_of(T)</name>
- <desc><p><marker id="type-tuple_of"/>
- A tuple where the elements are of type <c>T</c>.</p></desc>
+ <desc><p>A tuple where the elements are of type <c>T</c>.</p></desc>
</datatype>
</datatypes>
<funcs>
<func>
+ <name name="ensure_all_started" arity="1"/>
+ <name name="ensure_all_started" arity="2"/>
+ <fsummary>Load and start an application and its dependencies, recursively.</fsummary>
+ <desc>
+ <p>Equivalent to calling
+ <seealso marker="#start/1"><c>start/1,2</c></seealso>
+ repeatedly on all dependencies that are not yet started for an application.</p>
+ <p>Returns <c>{ok, AppNames}</c> for a successful start or for an already started
+ application (which is, however, omitted from the <c>AppNames</c> list).</p>
+ <p>The function reports <c>{error, {AppName,Reason}}</c> for errors, where
+ <c>Reason</c> is any possible reason returned by
+ <seealso marker="#start/1"><c>start/1,2</c></seealso>
+ when starting a specific dependency.</p>
+ <p>If an error occurs, the applications started by the function are stopped
+ to bring the set of running applications back to its initial state.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="ensure_started" arity="1"/>
+ <name name="ensure_started" arity="2"/>
+ <fsummary>Load and start an application.</fsummary>
+ <desc>
+ <p>Equivalent to
+ <seealso marker="#start/1"><c>start/1,2</c></seealso>
+ except it returns <c>ok</c> for already started applications.</p>
+ </desc>
+ </func>
+ <func>
<name name="get_all_env" arity="0"/>
<name name="get_all_env" arity="1"/>
- <fsummary>Get the configuration parameters for an application</fsummary>
+ <fsummary>Get the configuration parameters for an application.</fsummary>
<desc>
<p>Returns the configuration parameters and their values for
<c><anno>Application</anno></c>. If the argument is omitted, it defaults to
@@ -82,7 +110,7 @@
<func>
<name name="get_all_key" arity="0"/>
<name name="get_all_key" arity="1"/>
- <fsummary>Get the application specification keys</fsummary>
+ <fsummary>Get the application specification keys.</fsummary>
<desc>
<p>Returns the application specification keys and their values
for <c><anno>Application</anno></c>. If the argument is omitted, it
@@ -96,7 +124,7 @@
<func>
<name name="get_application" arity="0"/>
<name name="get_application" arity="1"/>
- <fsummary>Get the name of an application containing a certain process or module</fsummary>
+ <fsummary>Get the name of an application containing a certain process or module.</fsummary>
<desc>
<p>Returns the name of the application to which the process
<c><anno>Pid</anno></c> or the module <c><anno>Module</anno></c> belongs. Providing no
@@ -110,222 +138,212 @@
<func>
<name name="get_env" arity="1"/>
<name name="get_env" arity="2"/>
- <fsummary>Get the value of a configuration parameter</fsummary>
+ <fsummary>Get the value of a configuration parameter.</fsummary>
<desc>
- <p>Returns the value of the configuration parameter <c><anno>Par</anno></c>
+ <p>Returns the value of configuration parameter <c><anno>Par</anno></c>
for <c><anno>Application</anno></c>. If the application argument is
omitted, it defaults to the application of the calling
process.</p>
- <p>If the specified application is not loaded, or
- the configuration parameter does not exist, or if the process
- executing the call does not belong to any application,
- the function returns <c>undefined</c>.</p>
+ <p>Returns <c>undefined</c> if any of the following applies:</p>
+ <list type="bulleted">
+ <item>The specified application is not loaded.</item>
+ <item>The configuration parameter does not exist.</item>
+ <item>The process executing the call does not belong to any application.</item>
+ </list>
</desc>
</func>
<func>
<name name="get_env" arity="3"/>
- <fsummary>Get the value of a configuration parameter using a default</fsummary>
+ <fsummary>Get the value of a configuration parameter using a default.</fsummary>
<desc>
- <p>Works like <seealso marker="#get_env/2">get_env/2</seealso> but returns
- <c><anno>Def</anno></c> value when configuration parameter
+ <p>Works like <seealso marker="#get_env/2"><c>get_env/2</c></seealso> but returns
+ value <c><anno>Def</anno></c> when configuration parameter
<c><anno>Par</anno></c> does not exist.</p>
</desc>
</func>
<func>
<name name="get_key" arity="1"/>
<name name="get_key" arity="2"/>
- <fsummary>Get the value of an application specification key</fsummary>
+ <fsummary>Get the value of an application specification key.</fsummary>
<desc>
<p>Returns the value of the application specification key
<c><anno>Key</anno></c> for <c><anno>Application</anno></c>. If the application
argument is omitted, it defaults to the application of
the calling process.</p>
- <p>If the specified application is not loaded, or
- the specification key does not exist, or if the process
- executing the call does not belong to any application,
- the function returns <c>undefined</c>.</p>
+ <p>Returns <c>undefined</c> if any of the following applies:</p>
+ <list type="bulleted">
+ <item>The specified application is not loaded.</item>
+ <item>The specification key does not exist.</item>
+ <item>The process executing the call does not belong to any application.</item>
+ </list>
+
</desc>
</func>
<func>
<name name="load" arity="1"/>
<name name="load" arity="2"/>
- <fsummary>Load an application</fsummary>
+ <fsummary>Load an application.</fsummary>
<type name="application_spec"/>
<type name="application_opt"/>
<desc>
<p>Loads the application specification for an application into
- the application controller. It will also load the application
- specifications for any included applications. Note that
- the function does not load the actual Erlang object code.</p>
- <p>The application can be given by its name <c><anno>Application</anno></c>.
- In this case the application controller will search the code
+ the application controller. It also loads the application
+ specifications for any included applications. Notice that
+ the function does not load the Erlang object code.</p>
+ <p>The application can be specified by its name <c><anno>Application</anno></c>.
+ In this case, the application controller searches the code
path for the application resource file <c><anno>Application</anno>.app</c>
- and load the specification it contains.</p>
- <p>The application specification can also be given directly as a
- tuple <c><anno>AppSpec</anno></c>. This tuple should have the format and
- contents as described in <c>app(4)</c>.</p>
+ and loads the specification it contains.</p>
+ <p>The application specification can also be specified directly as a
+ tuple <c><anno>AppSpec</anno></c>, having the format and
+ contents as described in
+ <seealso marker="app"><c>app(4)</c></seealso>.</p>
<p>If <c><anno>Distributed</anno> == {<anno>Application</anno>,[<anno>Time</anno>,]<anno>Nodes</anno>}</c>,
- the application will be distributed. The argument overrides
- the value for the application in the Kernel configuration
+ the application becomes distributed. The argument overrides
+ the value for the application in the <c>Kernel</c> configuration
parameter <c>distributed</c>. <c><anno>Application</anno></c> must be
- the name of the application (same as in the first argument).
- If a node crashes and <c><anno>Time</anno></c> has been specified, then
- the application controller will wait for <c><anno>Time</anno></c>
+ the application name (same as in the first argument).
+ If a node crashes and <c><anno>Time</anno></c> is specified,
+ the application controller waits for <c><anno>Time</anno></c>
milliseconds before attempting to restart the application on
- another node. If <c><anno>Time</anno></c> is not specified, it will
- default to 0 and the application will be restarted
+ another node. If <c><anno>Time</anno></c> is not specified, it
+ defaults to <c>0</c> and the application is restarted
immediately.</p>
<p><c><anno>Nodes</anno></c> is a list of node names where the application
- may run, in priority from left to right. Node names can be
+ can run, in priority from left to right. Node names can be
grouped using tuples to indicate that they have the same
- priority. Example:</p>
+ priority.</p>
+ <p><em>Example:</em></p>
<code type="none">
Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
- <p>This means that the application should preferably be started
+ <p>This means that the application is preferably to be started
at <c>cp1@cave</c>. If <c>cp1@cave</c> is down,
- the application should be started at either <c>cp2@cave</c>
+ the application is to be started at <c>cp2@cave</c>
or <c>cp3@cave</c>.</p>
<p>If <c>Distributed == default</c>, the value for
- the application in the Kernel configuration parameter
- <c>distributed</c> will be used.</p>
+ the application in the <c>Kernel</c> configuration parameter
+ <c>distributed</c> is used.</p>
</desc>
</func>
<func>
<name name="loaded_applications" arity="0"/>
- <fsummary>Get the currently loaded applications</fsummary>
+ <fsummary>Get the currently loaded applications.</fsummary>
<desc>
- <p>Returns a list with information about the applications which
- have been loaded using <c>load/1,2</c>, also included
- applications. <c><anno>Application</anno></c> is the application name.
- <c><anno>Description</anno></c> and <c><anno>Vsn</anno></c> are the values of its
- <c>description</c> and <c>vsn</c> application specification
+ <p>Returns a list with information about the applications, and included
+ applications, which are loaded using <c>load/1,2</c>.
+ <c><anno>Application</anno></c> is the application name.
+ <c><anno>Description</anno></c> and <c><anno>Vsn</anno></c> are the values
+ of their <c>description</c> and <c>vsn</c> application specification
keys, respectively.</p>
</desc>
</func>
<func>
<name name="permit" arity="2"/>
- <fsummary>Change an application's permission to run on a node.</fsummary>
+ <fsummary>Change the permission for an application to run at a node.</fsummary>
<desc>
<p>Changes the permission for <c><anno>Application</anno></c> to run at
- the current node. The application must have been loaded using
+ the current node. The application must be loaded using
<c>load/1,2</c> for the function to have effect.</p>
<p>If the permission of a loaded, but not started, application
- is set to <c>false</c>, <c>start</c> will return <c>ok</c> but
- the application will not be started until the permission is
+ is set to <c>false</c>, <c>start</c> returns <c>ok</c> but
+ the application is not started until the permission is
set to <c>true</c>.</p>
<p>If the permission of a running application is set to
- <c>false</c>, the application will be stopped. If
- the permission later is set to <c>true</c>, it will be
+ <c>false</c>, the application is stopped. If
+ the permission later is set to <c>true</c>, it is
restarted.</p>
<p>If the application is distributed, setting the permission to
<c>false</c> means that the application will be started at, or
moved to, another node according to how its distribution is
- configured (see <c>load/2</c> above).</p>
+ configured
+ (see <seealso marker="#load/2"><c>load/2</c></seealso>).</p>
<p>The function does not return until the application is
- started, stopped or successfully moved to another node.
- However, in some cases where permission is set to <c>true</c>
- the function may return <c>ok</c> even though the application
- itself has not started. This is true when an application
- cannot start because it has dependencies to other
- applications which have not yet been started. When they have
- been started, <c>Application</c> will be started as well.</p>
+ started, stopped, or successfully moved to another node.
+ However, in some cases where permission is set to <c>true</c>,
+ the function returns <c>ok</c> even though the application
+ is not started. This is true when an application
+ cannot start because of dependencies to other
+ applications that are not yet started. When they are
+ started, <c>Application</c> is started as well.</p>
<p>By default, all applications are loaded with permission
- <c>true</c> on all nodes. The permission is configurable by
- using the Kernel configuration parameter <c>permissions</c>.</p>
+ <c>true</c> on all nodes. The permission can be configured
+ using the <c>Kernel</c> configuration parameter <c>permissions</c>.</p>
</desc>
</func>
<func>
<name name="set_env" arity="3"/>
<name name="set_env" arity="4"/>
- <fsummary>Set the value of a configuration parameter</fsummary>
+ <fsummary>Set the value of a configuration parameter.</fsummary>
<desc>
- <p>Sets the value of the configuration parameter <c><anno>Par</anno></c> for
+ <p>Sets the value of configuration parameter <c><anno>Par</anno></c> for
<c><anno>Application</anno></c>.</p>
- <p><c>set_env/4</c> uses the standard <c>gen_server</c> timeout
- value (5000 ms). The <c>timeout</c> option can be provided
- if another timeout value is useful, for example, in situations
+ <p><c>set_env/4</c> uses the standard <c>gen_server</c> time-out
+ value (5000 ms). Option <c>timeout</c> can be specified
+ if another time-out value is useful, for example, in situations
where the application controller is heavily loaded.</p>
<p>If <c>set_env/4</c> is called before the application is loaded,
- the application environment values specified in the <c>Application.app</c>
- file will override the ones previously set. This is also true for application
+ the application environment values specified in file <c>Application.app</c>
+ override the ones previously set. This is also true for application
reloads.</p>
- <p>The <c>persistent</c> option can be set to <c>true</c>
- when there is a need to guarantee parameters set with <c>set_env/4</c>
- will not be overridden by the ones defined in the application resource
- file on load. This means persistent values will stick after the application
+ <p>Option <c>persistent</c> can be set to <c>true</c>
+ to guarantee that parameters set with <c>set_env/4</c>
+ are not overridden by those defined in the application resource
+ file on load. This means that persistent values will stick after the application
is loaded and also on application reload.</p>
<warning>
- <p>Use this function only if you know what you are doing,
- that is, on your own applications. It is very application
- and configuration parameter dependent when and how often
- the value is read by the application, and careless use
- of this function may put the application in a
- weird, inconsistent, and malfunctioning state. </p>
+ <p>Use this function only if you know what you are doing,
+ that is, on your own applications. It is very
+ application-dependent and
+ configuration parameter-dependent when and how often
+ the value is read by the application. Careless use
+ of this function can put the application in a
+ weird, inconsistent, and malfunctioning state.</p>
</warning>
</desc>
</func>
<func>
- <name name="ensure_started" arity="1"/>
- <name name="ensure_started" arity="2"/>
- <fsummary>Load and start an application</fsummary>
- <desc>
- <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except
- it returns <c>ok</c> for already started applications.</p>
- </desc>
- </func>
- <func>
- <name name="ensure_all_started" arity="1"/>
- <name name="ensure_all_started" arity="2"/>
- <fsummary>Load and start an application and its dependencies, recursively</fsummary>
- <desc>
- <p>Equivalent to calling <seealso marker="#start/2"><c>application:start/1,2</c></seealso>
- repeatedly on all dependencies that have not yet been started for an application.
- The function returns <c>{ok, AppNames}</c> for a successful start or for an already started
- application (which are however omitted from the <c>AppNames</c> list), and reports
- <c>{error, {AppName,Reason}}</c> for errors, where <c>Reason</c> is any possible reason
- returned by <seealso marker="#start/2"><c>application:start/1,2</c></seealso> when starting a
- specific dependency. In case of an error, the applications that were started by the
- function are stopped to bring the set of running applications back to its initial state.</p>
- </desc>
- </func>
- <func>
<name name="start" arity="1"/>
<name name="start" arity="2"/>
- <fsummary>Load and start an application</fsummary>
- <desc>
+ <fsummary>Load and start an application.</fsummary>
+ <desc>
<p>Starts <c><anno>Application</anno></c>. If it is not loaded,
- the application controller will first load it using
- <c>load/1</c>. It will make sure any included applications
- are loaded, but will not start them. That is assumed to be
+ the application controller first loads it using
+ <c>load/1</c>. It ensures that any included applications
+ are loaded, but does not start them. That is assumed to be
taken care of in the code for <c><anno>Application</anno></c>.</p>
<p>The application controller checks the value of
the application specification key <c>applications</c>, to
- ensure that all applications that should be started before
- this application are running. If not,
+ ensure that all applications needed to be started before
+ this application are running. Otherwise,
<c>{error,{not_started,App}}</c> is returned, where <c>App</c>
is the name of the missing application.</p>
- <p>The application controller then creates an <em>application master</em> for the application. The application master is
+ <p>The application controller then creates an <em>application master</em>
+ for the application. The application master is
the group leader of all the processes in the application.
The application master starts the application by calling
the application callback function <c>Module:start/2</c> as
defined by the application specification key <c>mod</c>.</p>
- <p>The <c><anno>Type</anno></c> argument specifies the type of
+ <p>Argument <c><anno>Type</anno></c> specifies the type of
the application. If omitted, it defaults to <c>temporary</c>.</p>
<list type="bulleted">
<item>If a permanent application terminates, all other
applications and the entire Erlang node are also terminated.</item>
- <item>If a transient application terminates with <c>Reason == normal</c>, this is reported but no other applications are
- terminated. If a transient application terminates
- abnormally, all other applications and the entire Erlang
- node are also terminated.</item>
+ <item>
+ <list type="bulleted">
+ <item>If a transient application terminates with <c>Reason == normal</c>,
+ this is reported but no other applications are terminated.</item>
+ <item>If a transient application terminates abnormally, all other
+ applications and the entire Erlang node are also terminated.</item>
+ </list>
+ </item>
<item>If a temporary application terminates, this is reported
but no other applications are terminated.</item>
</list>
- <p>Note that it is always possible to stop an application
+ <p>Notice that an application can always be stopped
explicitly by calling <c>stop/1</c>. Regardless of the type of
- the application, no other applications will be affected.</p>
- <p>Note also that the transient type is of little practical use,
- since when a supervision tree terminates, the reason is set to
+ the application, no other applications are affected.</p>
+ <p>Notice also that the transient type is of little practical use,
+ because when a supervision tree terminates, the reason is set to
<c>shutdown</c>, not <c>normal</c>.</p>
</desc>
</func>
@@ -334,13 +352,13 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
<fsummary>Get the start type of an ongoing application startup.</fsummary>
<desc>
<p>This function is intended to be called by a process belonging
- to an application, when the application is being started, to
- determine the start type which is either <c><anno>StartType</anno></c> or
+ to an application, when the application is started, to
+ determine the start type, which is <c><anno>StartType</anno></c> or
<c>local</c>.</p>
- <p>See <seealso marker="#start_type"><c>Module:start/2</c></seealso> for a description of
- <c><anno>StartType</anno></c>.</p>
- <p><c>local</c> is returned if only parts of the application is
- being restarted (by a supervisor), or if the function is
+ <p>For a description of <c><anno>StartType</anno></c>, see
+ <seealso marker="#start_type"><c>Module:start/2</c></seealso>.</p>
+ <p><c>local</c> is returned if only parts of the application are
+ restarted (by a supervisor), or if the function is
called outside a startup.</p>
<p>If the process executing the call does not belong to any
application, the function returns <c>undefined</c>.</p>
@@ -348,103 +366,106 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
</func>
<func>
<name name="stop" arity="1"/>
- <fsummary>Stop an application</fsummary>
+ <fsummary>Stop an application.</fsummary>
<desc>
<p>Stops <c><anno>Application</anno></c>. The application master calls
<c>Module:prep_stop/1</c>, if such a function is defined, and
- then tells the top supervisor of the application to shutdown
- (see <c>supervisor(3)</c>). This means that the entire
+ then tells the top supervisor of the application to shut down
+ (see <seealso marker="stdlib:supervisor"><c>supervisor(3)</c></seealso>).
+ This means that the entire
supervision tree, including included applications, is
terminated in reversed start order. After the shutdown,
the application master calls <c>Module:stop/1</c>.
<c>Module</c> is the callback module as defined by
the application specification key <c>mod</c>.</p>
- <p>Last, the application master itself terminates. Note that all
- processes with the application master as group leader, i.e.
+ <p>Last, the application master terminates. Notice that all
+ processes with the application master as group leader, that is,
processes spawned from a process belonging to the application,
- thus are terminated as well.</p>
+ are also terminated.</p>
<p>When stopped, the application is still loaded.</p>
- <p>In order to stop a distributed application, <c>stop/1</c>
- has to be called on all nodes where it can execute (that is,
+ <p>To stop a distributed application, <c>stop/1</c>
+ must be called on all nodes where it can execute (that is,
on all nodes where it has been started). The call to
<c>stop/1</c> on the node where the application currently
- executes will stop its execution. The application will not be
- moved between nodes due to <c>stop/1</c> being called on
+ executes stops its execution. The application is not
+ moved between nodes, as <c>stop/1</c> is called on
the node where the application currently executes before
<c>stop/1</c> is called on the other nodes.</p>
</desc>
</func>
<func>
<name name="takeover" arity="2"/>
- <fsummary>Take over a distributed application</fsummary>
+ <fsummary>Take over a distributed application.</fsummary>
<desc>
- <p>Performs a takeover of the distributed application
+ <p>Takes over the distributed application
<c><anno>Application</anno></c>, which executes at another node
<c>Node</c>. At the current node, the application is
restarted by calling
<c>Module:start({takeover,Node},StartArgs)</c>. <c>Module</c>
and <c>StartArgs</c> are retrieved from the loaded application
specification. The application at the other node is not
- stopped until the startup is completed, i.e. when
+ stopped until the startup is completed, that is, when
<c>Module:start/2</c> and any calls to
<c>Module:start_phase/3</c> have returned.</p>
- <p>Thus two instances of the application will run simultaneously
- during the takeover, which makes it possible to transfer data
- from the old to the new instance. If this is not acceptable
- behavior, parts of the old instance may be shut down when
- the new instance is started. Note that the application may
- not be stopped entirely however, at least the top supervisor
+ <p>Thus, two instances of the application run simultaneously
+ during the takeover, so that data can be transferred
+ from the old to the new instance. If this is not an acceptable
+ behavior, parts of the old instance can be shut down when
+ the new instance is started. However, the application cannot
+ be stopped entirely, at least the top supervisor
must remain alive.</p>
- <p>See <c>start/1,2</c> for a description of <c>Type</c>.</p>
+ <p>For a description of <c>Type</c>, see
+ <seealso marker="#start/1"><c>start/1,2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="unload" arity="1"/>
- <fsummary>Unload an application</fsummary>
+ <fsummary>Unload an application.</fsummary>
<desc>
<p>Unloads the application specification for <c><anno>Application</anno></c>
- from the application controller. It will also unload
+ from the application controller. It also unloads
the application specifications for any included applications.
- Note that the function does not purge the actual Erlang
+ Notice that the function does not purge the Erlang
object code.</p>
</desc>
</func>
<func>
<name name="unset_env" arity="2"/>
<name name="unset_env" arity="3"/>
- <fsummary>Unset the value of a configuration parameter</fsummary>
+ <fsummary>Unset the value of a configuration parameter.</fsummary>
<desc>
<p>Removes the configuration parameter <c><anno>Par</anno></c> and its value
for <c><anno>Application</anno></c>.</p>
<p><c>unset_env/2</c> uses the standard <c>gen_server</c>
- timeout value (5000 ms). The <c>timeout</c> option can be
- provided if another timeout value is useful, for example, in
+ time-out value (5000 ms). Option <c>timeout</c> can be
+ specified if another time-out value is useful, for example, in
situations where the application controller is heavily loaded.</p>
<p><c>unset_env/3</c> also allows the persistent option to be passed
- (see <c>set_env/4</c> above).</p>
- <warning>
- <p>Use this function only if you know what you are doing,
- that is, on your own applications. It is very application
- and configuration parameter dependent when and how often
- the value is read by the application, and careless use
- of this function may put the application in a
- weird, inconsistent, and malfunctioning state. </p>
+ (see <seealso marker="#set_env/4"><c>set_env/4</c></seealso>).</p>
+ <warning>
+ <p>Use this function only if you know what you are doing,
+ that is, on your own applications. It is very
+ application-dependent and configuration
+ parameter-dependent when and how often
+ the value is read by the application. Careless use
+ of this function can put the application in a
+ weird, inconsistent, and malfunctioning state.</p>
</warning>
</desc>
</func>
<func>
<name name="which_applications" arity="0"/>
<name name="which_applications" arity="1"/>
- <fsummary>Get the currently running applications</fsummary>
+ <fsummary>Get the currently running applications.</fsummary>
<desc>
- <p>Returns a list with information about the applications which
+ <p>Returns a list with information about the applications that
are currently running. <c><anno>Application</anno></c> is the application
- name. <c><anno>Description</anno></c> and <c><anno>Vsn</anno></c> are the values of its
- <c>description</c> and <c>vsn</c> application specification
+ name. <c><anno>Description</anno></c> and <c><anno>Vsn</anno></c> are the
+ values of their <c>description</c> and <c>vsn</c> application specification
keys, respectively.</p>
<p><c>which_applications/0</c> uses the standard
- <c>gen_server</c> timeout value (5000 ms). A <c><anno>Timeout</anno></c>
- argument can be provided if another timeout value is useful,
+ <c>gen_server</c> time-out value (5000 ms). A <c><anno>Timeout</anno></c>
+ argument can be specified if another time-out value is useful,
for example, in situations where the application controller
is heavily loaded.</p>
</desc>
@@ -452,81 +473,81 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
</funcs>
<section>
- <title>CALLBACK MODULE</title>
- <p>The following functions should be exported from an
+ <title>Callback Module</title>
+ <p>The following functions are to be exported from an
<c>application</c> callback module.</p>
</section>
<funcs>
<func>
<name>Module:start(StartType, StartArgs) -> {ok, Pid} | {ok, Pid, State} | {error, Reason}</name>
- <fsummary>Start an application</fsummary>
+ <fsummary>Start an application.</fsummary>
<type>
- <v>StartType = <seealso marker="#type-start_type">start_type()</seealso></v>
+ <v>StartType = <seealso marker="#type-start_type"><c>start_type()</c></seealso></v>
<v>StartArgs = term()</v>
<v>Pid = pid()</v>
<v>State = term()</v>
</type>
<desc>
<p>This function is called whenever an application is started
- using <c>application:start/1,2</c>, and should start
+ using <c>start/1,2</c>, and is to start
the processes of the application. If the application is
structured according to the OTP design principles as a
supervision tree, this means starting the top supervisor of
the tree.</p>
<p><marker id="start_type"/><c>StartType</c> defines the type of start:</p>
<list type="bulleted">
- <item><c>normal</c> if it's a normal startup.</item>
+ <item><c>normal</c> if it is a normal startup.</item>
<item><c>normal</c> also if the application is distributed and
- started at the current node due to a failover from another
+ started at the current node because of a failover from another
node, and the application specification key <c>start_phases == undefined</c>.</item>
<item><c>{takeover,Node}</c> if the application is
- distributed and started at the current node due to a
+ distributed and started at the current node because of a
takeover from <c>Node</c>, either because
- <c>application:takeover/2</c> has been called or because
+ <c>takeover/2</c> has been called or because
the current node has higher priority than <c>Node</c>.</item>
<item><c>{failover,Node}</c> if the application is
- distributed and started at the current node due to a
+ distributed and started at the current node because of a
failover from <c>Node</c>, and the application
specification key <c>start_phases /= undefined</c>.</item>
</list>
<p><c>StartArgs</c> is the <c>StartArgs</c> argument defined by
the application specification key <c>mod</c>.</p>
- <p>The function should return <c>{ok,Pid}</c> or
- <c>{ok,Pid,State}</c> where <c>Pid</c> is the pid of the top
+ <p>The function is to return <c>{ok,Pid}</c> or
+ <c>{ok,Pid,State}</c>, where <c>Pid</c> is the pid of the top
supervisor and <c>State</c> is any term. If omitted,
- <c>State</c> defaults to <c>[]</c>. If later the application
- is stopped, <c>State</c> is passed to
+ <c>State</c> defaults to <c>[]</c>. If the application
+ is stopped later, <c>State</c> is passed to
<c>Module:prep_stop/1</c>.</p>
</desc>
</func>
<func>
<name>Module:start_phase(Phase, StartType, PhaseArgs) -> ok | {error, Reason}</name>
- <fsummary>Extended start of an application</fsummary>
+ <fsummary>Extended start of an application.</fsummary>
<type>
<v>Phase = atom()</v>
- <v>StartType = <seealso marker="#type-start_type">start_type()</seealso></v>
+ <v>StartType = <seealso marker="#type-start_type"><c>start_type()</c></seealso></v>
<v>PhaseArgs = term()</v>
<v>Pid = pid()</v>
<v>State = state()</v>
</type>
<desc>
- <p>This function is used to start an application with included
- applications, when there is a need for synchronization between
+ <p>Starts an application with included
+ applications, when synchronization is needed between
processes in the different applications during startup.</p>
- <p>The start phases is defined by the application specification
+ <p>The start phases are defined by the application specification
key <c>start_phases == [{Phase,PhaseArgs}]</c>. For included
applications, the set of phases must be a subset of the set of
phases defined for the including application.</p>
<p>The function is called for each start phase (as defined for
the primary application) for the primary application and all
included applications, for which the start phase is defined.</p>
- <p>See <c>Module:start/2</c> for a description of
- <c>StartType</c>.</p>
+ <p>For a description of <c>StartType</c>, see
+ <seealso marker="Module:start/2"><c>Module:start/2</c></seealso>.</p>
</desc>
</func>
<func>
<name>Module:prep_stop(State) -> NewState</name>
- <fsummary>Prepare an application for termination</fsummary>
+ <fsummary>Prepare an application for termination.</fsummary>
<type>
<v>State = NewState = term()</v>
</type>
@@ -536,28 +557,26 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
the application.</p>
<p><c>State</c> is the state returned from
<c>Module:start/2</c>, or <c>[]</c> if no state was returned.
- <c>NewState</c> is any term and will be passed to
+ <c>NewState</c> is any term and is passed to
<c>Module:stop/1</c>.</p>
<p>The function is optional. If it is not defined, the processes
- will be terminated and then <c>Module:stop(State)</c> is
- called.</p>
+ are terminated and then <c>Module:stop(State)</c> is called.</p>
</desc>
</func>
<func>
<name>Module:stop(State)</name>
- <fsummary>Clean up after termination of an application</fsummary>
+ <fsummary>Clean up after termination of an application.</fsummary>
<type>
<v>State = term()</v>
</type>
<desc>
<p>This function is called whenever an application has stopped.
It is intended to be the opposite of <c>Module:start/2</c>
- and should do any necessary cleaning up. The return value is
+ and is to do any necessary cleaning up. The return value is
ignored.</p>
- <p><c>State</c> is the return value of
- <c>Module:prep_stop/1</c>, if such a function exists.
- Otherwise <c>State</c> is taken from the return value of
- <c>Module:start/2</c>.</p>
+ <p><c>State</c> is the return value of <c>Module:prep_stop/1</c>,
+ if such a function exists. Otherwise <c>State</c> is taken from
+ the return value of <c>Module:start/2</c>.</p>
</desc>
</func>
<func>
@@ -572,19 +591,18 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
</type>
<desc>
<p>This function is called by an application after a code
- replacement, if there are any changes to the configuration
- parameters.</p>
- <p><c>Changed</c> is a list of parameter-value tuples with all
- configuration parameters with changed values, <c>New</c> is
- a list of parameter-value tuples with all configuration
- parameters that have been added, and <c>Removed</c> is a list
- of all parameters that have been removed.</p>
+ replacement, if the configuration parameters have changed.</p>
+ <p><c>Changed</c> is a list of parameter-value tuples including all
+ configuration parameters with changed values.</p>
+ <p><c>New</c> is a list of parameter-value tuples including all
+ added configuration parameters.</p>
+ <p><c>Removed</c> is a list of all removed parameters.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
+ <title>See Also</title>
<p><seealso marker="doc/design_principles:des_princ">OTP Design Principles</seealso>,
<seealso marker="kernel_app">kernel(6)</seealso>,
<seealso marker="app">app(4)</seealso></p>
diff --git a/lib/kernel/doc/src/auth.xml b/lib/kernel/doc/src/auth.xml
index 71b1863e96..03f983b96d 100644
--- a/lib/kernel/doc/src/auth.xml
+++ b/lib/kernel/doc/src/auth.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,7 +29,7 @@
<rev></rev>
</header>
<module>auth</module>
- <modulesummary>Erlang Network Authentication Server</modulesummary>
+ <modulesummary>Erlang network authentication server.</modulesummary>
<description>
<p>This module is deprecated. For a description of the Magic
Cookie system, refer to
@@ -42,60 +42,60 @@
</datatypes>
<funcs>
<func>
- <name name="is_auth" arity="1"/>
- <fsummary>Status of communication authorization (deprecated)</fsummary>
- <desc>
- <p>Returns <c>yes</c> if communication with <c><anno>Node</anno></c> is
- authorized. Note that a connection to <c><anno>Node</anno></c> will
- be established in this case. Returns <c>no</c> if <c><anno>Node</anno></c>
- does not exist or communication is not authorized (it has
- another cookie than <c>auth</c> thinks it has).</p>
- <p>Use <seealso marker="net_adm#ping/1">net_adm:ping(<c><anno>Node</anno></c>)</seealso>
- instead.</p>
- </desc>
- </func>
- <func>
<name name="cookie" arity="0"/>
- <fsummary>Magic cookie for local node (deprecated)</fsummary>
+ <fsummary>Magic cookie for local node (deprecated).</fsummary>
<desc>
<p>Use
- <seealso marker="erts:erlang#erlang:get_cookie/0">erlang:get_cookie()</seealso>
- instead.</p>
+ <seealso marker="erts:erlang#erlang:get_cookie/0"><c>erlang:get_cookie()</c></seealso>
+ in <c>ERTS</c> instead.</p>
</desc>
</func>
<func>
<name name="cookie" arity="1"/>
- <fsummary>Set the magic for the local node (deprecated)</fsummary>
+ <fsummary>Set the magic for the local node (deprecated).</fsummary>
<type_desc variable="TheCookie">
- The cookie may also be given as a list with a single atom element.
+ The cookie can also be specified as a list with a single atom element.
</type_desc>
<desc>
<p>Use
- <seealso marker="erts:erlang#erlang:set_cookie/2">erlang:set_cookie(node(), <c><anno>Cookie</anno></c>)</seealso>
+ <seealso marker="erts:erlang#erlang:set_cookie/2"><c>erlang:set_cookie(node(), <anno>Cookie</anno>)</c>
+ in <c>ERTS</c></seealso> instead.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="is_auth" arity="1"/>
+ <fsummary>Status of communication authorization (deprecated).</fsummary>
+ <desc>
+ <p>Returns <c>yes</c> if communication with <c><anno>Node</anno></c> is
+ authorized. Notice that a connection to <c><anno>Node</anno></c>
+ is established in this case. Returns <c>no</c> if <c><anno>Node</anno></c>
+ does not exist or communication is not authorized (it has
+ another cookie than <c>auth</c> thinks it has).</p>
+ <p>Use <seealso marker="net_adm#ping/1"><c>net_adm:ping(<anno>Node</anno>)</c></seealso>
instead.</p>
</desc>
</func>
<func>
<name>node_cookie([Node, Cookie]) -> yes | no</name>
- <fsummary>Set the magic cookie for a node and verify authorization (deprecated)</fsummary>
+ <fsummary>Set the magic cookie for a node and verify authorization (deprecated).</fsummary>
<type>
<v>Node = node()</v>
- <v>Cookie = <seealso marker="#type-cookie">cookie()</seealso></v>
+ <v>Cookie = <seealso marker="#type-cookie"><c>cookie()</c></seealso></v>
</type>
<desc>
<p>Equivalent to
- <seealso marker="#node_cookie/2">node_cookie(Node, Cookie)</seealso>.</p>
+ <seealso marker="#node_cookie/2"><c>node_cookie(Node, Cookie)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="node_cookie" arity="2"/>
- <fsummary>Set the magic cookie for a node and verify authorization (deprecated)</fsummary>
+ <fsummary>Set the magic cookie for a node and verify authorization (deprecated).</fsummary>
<desc>
- <p>Sets the magic cookie of <c><anno>Node</anno></c> to <c><anno>Cookie</anno></c>, and
- verifies the status of the authorization.
+ <p>Sets the magic cookie of <c><anno>Node</anno></c> to
+ <c><anno>Cookie</anno></c> and verifies the status of the authorization.
Equivalent to calling
- <seealso marker="erts:erlang#erlang:set_cookie/2">erlang:set_cookie(<c><anno>Node</anno></c>, <c><anno>Cookie</anno>)</c></seealso>, followed by
- <seealso marker="#is_auth/1">auth:is_auth(<c><anno>Node</anno></c>)</seealso>.</p>
+ <seealso marker="erts:erlang#erlang:set_cookie/2"><c>erlang:set_cookie(<anno>Node</anno>, <anno>Cookie</anno>)</c></seealso>, followed by
+ <seealso marker="#is_auth/1"><c>auth:is_auth(<anno>Node</anno>)</c></seealso>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/kernel/doc/src/book.xml b/lib/kernel/doc/src/book.xml
index 8eaff39dc5..81a87d126d 100644
--- a/lib/kernel/doc/src/book.xml
+++ b/lib/kernel/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/kernel/doc/src/code.xml b/lib/kernel/doc/src/code.xml
index 1bd52040a0..d3611d6a03 100644
--- a/lib/kernel/doc/src/code.xml
+++ b/lib/kernel/doc/src/code.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,262 +29,240 @@
<rev></rev>
</header>
<module>code</module>
- <modulesummary>Erlang Code Server</modulesummary>
+ <modulesummary>Erlang code server.</modulesummary>
<description>
<p>This module contains the interface to the Erlang
<em>code server</em>, which deals with the loading of compiled
code into a running Erlang runtime system.</p>
- <p>The runtime system can be started in either <em>embedded</em> or
- <em>interactive</em> mode. Which one is decided by the command
- line flag <c>-mode</c>.</p>
+ <p>The runtime system can be started in <em>embedded</em> or
+ <em>interactive</em> mode. Which one is decided by command-line
+ flag <c>-mode</c>:</p>
<pre>
% <input>erl -mode interactive</input></pre>
- <p>Default mode is <c>interactive</c>.</p>
+ <p>The modes are as follows:</p>
<list type="bulleted">
<item>
- <p>In embedded mode, all code is loaded during system start-up
+ <p>In embedded mode, all code is loaded during system startup
according to the boot script. (Code can also be loaded later
by explicitly ordering the code server to do so).</p>
</item>
<item>
- <p>In interactive mode, only some code is loaded during system
- startup-up, basically the modules needed by the runtime
- system itself. Other code is dynamically loaded when first
+ <p>In interactive mode, which is default, only some code is loaded
+ during system startup, basically the modules needed by the runtime
+ system. Other code is dynamically loaded when first
referenced. When a call to a function in a certain module is
made, and the module is not loaded, the code server searches
for and tries to load the module.</p>
</item>
</list>
- <p>To prevent accidentally reloading modules affecting the Erlang
- runtime system itself, the <c>kernel</c>, <c>stdlib</c> and
- <c>compiler</c> directories are considered <em>sticky</em>. This
+ <p>To prevent accidentally reloading of modules affecting the Erlang
+ runtime system, directories <c>kernel</c>, <c>stdlib</c>,
+ and <c>compiler</c> are considered <em>sticky</em>. This
means that the system issues a warning and rejects the request if
a user tries to reload a module residing in any of them.
- The feature can be disabled by using the command line flag
+ The feature can be disabled by using command-line flag
<c>-nostick</c>.</p>
</description>
<section>
<title>Code Path</title>
- <p>In interactive mode, the code server maintains a search path --
- usually called the <em>code path</em> -- consisting of a list of
+ <p>In interactive mode, the code server maintains a search path,
+ usually called the <em>code path</em>, consisting of a list of
directories, which it searches sequentially when trying to load a
module.</p>
<p>Initially, the code path consists of the current working
- directory and all Erlang object code directories under the library
+ directory and all Erlang object code directories under library
directory <c>$OTPROOT/lib</c>, where <c>$OTPROOT</c> is
the installation directory of Erlang/OTP, <c>code:root_dir()</c>.
Directories can be named <c>Name[-Vsn]</c> and the code server,
by default, chooses the directory with the highest version number
- among those which have the same <c>Name</c>. The <c>-Vsn</c>
- suffix is optional. If an <c>ebin</c> directory exists under
- <c>Name[-Vsn]</c>, it is this directory which is added to
- the code path.</p>
- <p>The environment variable <c>ERL_LIBS</c> (defined in the operating
- system) can be used to define additional library directories that
- will be handled in the same way as the standard OTP library
- directory described above, except that directories that do not
- have an <c>ebin</c> directory will be ignored.</p>
+ among those having the same <c>Name</c>. Suffix <c>-Vsn</c>
+ is optional. If an <c>ebin</c> directory exists under
+ <c>Name[-Vsn]</c>, this directory is added to the code path.</p>
+ <p>Environment variable <c>ERL_LIBS</c> (defined in the operating
+ system) can be used to define more library directories to
+ be handled in the same way as the standard OTP library
+ directory described above, except that directories without
+ an <c>ebin</c> directory are ignored.</p>
<p>All application directories found in the additional directories
- will appear before the standard OTP applications, except for the
- Kernel and STDLIB applications, which will be placed before any
- additional applications. In other words, modules found in any
- of the additional library directories will override modules with
- the same name in OTP, except for modules in Kernel and
- STDLIB.</p>
- <p>The environment variable <c>ERL_LIBS</c> (if defined) should contain
+ appears before the standard OTP applications, except for the
+ <c>Kernel</c> and <c>STDLIB</c> applications, which are placed before
+ any additional applications. In other words, modules found in any
+ of the additional library directories override modules with
+ the same name in OTP, except for modules in <c>Kernel</c> and
+ <c>STDLIB</c>.</p>
+ <p>Environment variable <c>ERL_LIBS</c> (if defined) is to contain
a colon-separated (for Unix-like systems) or semicolon-separated
(for Windows) list of additional libraries.</p>
- <p>Example: On an Unix-like system, <c>ERL_LIBS</c> could be set to
- <c>/usr/local/jungerl:/home/some_user/my_erlang_lib</c>. (On Windows,
- use semi-colon as separator.)</p>
- </section>
-
- <section>
- <title>Code Path Cache</title>
- <p>The code server incorporates a code path cache. The cache
- functionality is disabled by default. To activate it, start
- the emulator with the command line flag <c>-code_path_cache</c>
- or call <c>code:rehash()</c>. When the cache is created (or
- updated), the code server searches for modules in the code path
- directories. This may take some time if the the code path is long.
- After the cache creation, the time for loading modules in a large
- system (one with a large directory structure) is significantly
- reduced compared to having the cache disabled. The code server
- is able to look up the location of a module from the cache in
- constant time instead of having to search through the code path
- directories.</p>
- <p>Application resource files (<c>.app</c> files) are also stored
- in the code path cache. This feature is used by the application
- controller (see
- <seealso marker="application">application(3)</seealso>) to load
- applications efficiently in large systems.</p>
- <p>Note that when the code path cache is created (or updated), any
- relative directory names in the code path are converted to
- absolute.</p>
+ <p><em>Example:</em></p>
+ <p>On a Unix-like system, <c>ERL_LIBS</c> can be set to the following</p>
+ <code>
+/usr/local/jungerl:/home/some_user/my_erlang_lib</code>
+ <p>On Windows, use semi-colon as separator.</p>
</section>
<section>
<title>Loading of Code From Archive Files</title>
- <warning><p>The support for loading of code from archive files is
- experimental. The sole purpose of releasing it before it is ready
+ <warning><p>The support for loading code from archive files is
+ experimental. The purpose of releasing it before it is ready
is to obtain early feedback. The file format, semantics,
- interfaces etc. may be changed in a future release. The function
- <c>lib_dir/2</c> and the flag <c>-code_path_choice</c> are also
+ interfaces, and so on, can be changed in a future release. The function
+ <seealso marker="#lib_dir/2"><c>lib_dir/2</c></seealso>
+ and flag <c>-code_path_choice</c> are also
experimental.</p></warning>
- <p>In the current implementation, Erlang archives are <c>ZIP</c>
- files with <c>.ez</c> extension. Erlang archives may also be
+ <p>The Erlang archives are <c>ZIP</c>
+ files with extension <c>.ez</c>. Erlang archives can also be
enclosed in <c>escript</c> files whose file extension is arbitrary.</p>
- <p>Erlang archive files may contain entire Erlang applications or
+ <p>Erlang archive files can contain entire Erlang applications or
parts of applications. The structure in an archive file is the
- same as the directory structure for an application. If you for
- example would create an archive of <c>mnesia-4.4.7</c>, the
+ same as the directory structure for an application. If you, for
+ example, create an archive of <c>mnesia-4.4.7</c>, the
archive file must be named <c>mnesia-4.4.7.ez</c> and it must
- contain a top directory with the name <c>mnesia-4.4.7</c>. If the
+ contain a top directory named <c>mnesia-4.4.7</c>. If the
version part of the name is omitted, it must also be omitted in
the archive. That is, a <c>mnesia.ez</c> archive must contain a
<c>mnesia</c> top directory.</p>
- <p>An archive file for an application may for example be
+ <p>An archive file for an application can, for example, be
created like this:</p>
<pre>
- zip:create("mnesia-4.4.7.ez",
- ["mnesia-4.4.7"],
- [{cwd, code:lib_dir()},
- {compress, all},
- {uncompress,[".beam",".app"]}]).</pre>
-
- <p>Any file in the archive may be compressed, but in order to
- speed up the access of frequently read files, it may be a good
+zip:create("mnesia-4.4.7.ez",
+ ["mnesia-4.4.7"],
+ [{cwd, code:lib_dir()},
+ {compress, all},
+ {uncompress,[".beam",".app"]}]).</pre>
+
+ <p>Any file in the archive can be compressed, but to
+ speed up the access of frequently read files, it can be a good
idea to store <c>beam</c> and <c>app</c> files uncompressed in
the archive.</p>
- <p>Normally the top directory of an application is located either
- in the library directory <c>$OTPROOT/lib</c> or in a directory
- referred to by the environment variable <c>ERL_LIBS</c>. At
- startup when the initial code path is computed, the code server
- will also look for archive files in these directories and
- possibly add <c>ebin</c> directories in archives to the code path. The
- code path will then contain paths to directories that looks like
+ <p>Normally the top directory of an application is located
+ in library directory <c>$OTPROOT/lib</c> or in a directory
+ referred to by environment variable <c>ERL_LIBS</c>. At
+ startup, when the initial code path is computed, the code server
+ also looks for archive files in these directories and
+ possibly adds <c>ebin</c> directories in archives to the code path. The
+ code path then contains paths to directories that look like
<c>$OTPROOT/lib/mnesia.ez/mnesia/ebin</c> or
<c>$OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin</c>.</p>
- <p>The code server uses the module <c>erl_prim_loader</c>
- (possibly via the <c>erl_boot_server</c>) to read code files from
- archives. But the functions in <c>erl_prim_loader</c> may also be
+ <p>The code server uses module <c>erl_prim_loader</c> in <c>ERTS</c>
+ (possibly through <c>erl_boot_server</c>) to read code files from
+ archives. However, the functions in <c>erl_prim_loader</c> can also be
used by other applications to read files from archives. For
example, the call
<c>erl_prim_loader:list_dir( "/otp/root/lib/mnesia-4.4.7.ez/mnesia-4.4.7/examples/bench)"</c>
would list the contents of a directory inside an archive.
- See <seealso marker="erts:erl_prim_loader">erl_prim_loader(3)</seealso>.</p>
+ See <seealso marker="erts:erl_prim_loader"><c>erl_prim_loader(3)</c></seealso>.</p>
<p>An application archive file and a regular application directory
- may coexist. This may be useful when there is a need of having
+ can coexist. This can be useful when it is needed to have
parts of the application as regular files. A typical case is the
- <c>priv</c> directory which must reside as a regular directory in
- order to be able to dynamically link in drivers and start port
- programs. For other applications that do not have this need, the
- <c>priv</c> directory may reside in the archive and the files
- under the <c>priv</c> directory may be read via the
+ <c>priv</c> directory, which must reside as a regular directory
+ to link in drivers dynamically and start port programs.
+ For other applications that do not need this, directory
+ <c>priv</c> can reside in the archive and the files
+ under the directory <c>priv</c> can be read through
<c>erl_prim_loader</c>.</p>
- <p>At the time point when a directory is added to the code path as
- well as when the entire code path is (re)set, the code server
- will decide which subdirectories in an application that shall be
- read from the archive and which that shall be read as regular
+ <p>When a directory is added to the code path and
+ when the entire code path is (re)set, the code server
+ decides which subdirectories in an application that are to be
+ read from the archive and which that are to be read as regular
files. If directories are added or removed afterwards, the file
- access may fail if the code path is not updated (possibly to the
- same path as before in order to trigger the directory resolution
- update). For each directory on the second level (ebin, priv, src
- etc.) in the application archive, the code server will firstly
- choose the regular directory if it exists and secondly from the
- archive. The function
- <c>code:lib_dir/2</c> returns the path to the subdirectory. For
- example <c>code:lib_dir(megaco,ebin)</c> may return
+ access can fail if the code path is not updated (possibly to the
+ same path as before, to trigger the directory resolution
+ update).</p>
+
+ <p>For each directory on the second level in the application archive
+ (<c>ebin</c>, <c>priv</c>, <c>src</c>, and so on), the code server first
+ chooses the regular directory if it exists and second from the
+ archive. Function <c>code:lib_dir/2</c> returns the path to the
+ subdirectory. For example, <c>code:lib_dir(megaco,ebin)</c> can return
<c>/otp/root/lib/megaco-3.9.1.1.ez/megaco-3.9.1.1/ebin</c> while
- <c>code:lib_dir(megaco,priv)</c> may return
+ <c>code:lib_dir(megaco,priv)</c> can return
<c>/otp/root/lib/megaco-3.9.1.1/priv</c>.</p>
<p>When an <c>escript</c> file contains an archive, there are
- neither restrictions on the name of the <c>escript</c> nor on how
- many applications that may be stored in the embedded
- archive. Single <c>beam</c> files may also reside on the top
- level in the archive. At startup, both the top directory in the
- embedded archive as well as all (second level) <c>ebin</c>
+ no restrictions on the name of the <c>escript</c> and no restrictions
+ on how many applications that can be stored in the embedded
+ archive. Single Beam files can also reside on the top
+ level in the archive. At startup, the top directory in the
+ embedded archive and all (second level) <c>ebin</c>
directories in the embedded archive are added to the code path.
- See <seealso marker="erts:escript">escript(1)</seealso></p>
+ See <seealso marker="erts:escript"><c>erts:escript(1)</c></seealso>.</p>
<p>When the choice of directories in the code path is
- <c>strict</c>, the directory that ends up in the code path will
- be exactly the stated one. This means that if for example the
+ <c>strict</c>, the directory that ends up in the code path is
+ exactly the stated one. This means that if, for example, the
directory <c>$OTPROOT/lib/mnesia-4.4.7/ebin</c> is explicitly
- added to the code path, the code server will not load files from
- <c>$OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin</c> and vice
- versa. </p>
+ added to the code path, the code server does not load files from
+ <c>$OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin</c>.</p>
- <p>This behavior can be controlled via the command line flag
+ <p>This behavior can be controlled through command-line flag
<c>-code_path_choice Choice</c>. If the flag is set to <c>relaxed</c>,
- the code server will instead choose a suitable directory
- depending on the actual file structure. If there exists a regular
- application ebin directory, it will be chosen. But if it does
- not exist, the ebin directory in the archive is chosen if it
- exists. If neither of them exists the original directory will be
+ the code server instead chooses a suitable directory
+ depending on the actual file structure. If a regular
+ application <c>ebin</c> directory exists, it is chosen. Otherwise,
+ the directory <c>ebin</c> in the archive is chosen if it
+ exists. If neither of them exists, the original directory is
chosen.</p>
- <p>The command line flag <c>-code_path_choice Choice</c> does also
- affect how <c>init</c> interprets the <c>boot script</c>. The
- interpretation of the explicit code paths in the <c>boot
- script</c> may be <c>strict</c> or <c>relaxed</c>. It is
- particular useful to set the flag to <c>relaxed</c> when you want
- to elaborate with code loading from archives without editing the
+ <p>Command-line flag <c>-code_path_choice Choice</c> also
+ affects how module <c>init</c> interprets the <c>boot script</c>.
+ The interpretation of the explicit code paths in the <c>boot
+ script</c> can be <c>strict</c> or <c>relaxed</c>. It is
+ particularly useful to set the flag to <c>relaxed</c> when
+ elaborating with code loading from archives without editing the
<c>boot script</c>. The default is <c>relaxed</c>. See <seealso
- marker="erts:init">init(3)</seealso></p></section>
+ marker="erts:init"><c>erts:init(3)</c></seealso>.</p></section>
<section>
<title>Current and Old Code</title>
- <p>The code of a module can exists in two variants in a system:
+ <p>The code for a module can exist in two variants in a system:
<em>current code</em> and <em>old code</em>. When a module is
- loaded into the system for the first time, the code of the module
+ loaded into the system for the first time, the module code
becomes 'current' and the global <em>export table</em> is updated
with references to all functions exported from the module.</p>
- <p>If then a new instance of the module is loaded (perhaps because
- of the correction of an error), then the code of the previous
+ <p>If then a new instance of the module is loaded (for example, because of
+ error correction), the code of the previous
instance becomes 'old', and all export entries referring to
- the previous instance are removed. After that the new instance is
- loaded as if it was loaded for the first time, as described above,
- and becomes 'current'.</p>
- <p>Both old and current code for a module are valid, and may even be
+ the previous instance are removed. After that, the new instance is
+ loaded as for the first time, and becomes 'current'.</p>
+ <p>Both old and current code for a module are valid, and can even be
evaluated concurrently. The difference is that exported functions
- in old code are unavailable. Hence there is no way to make a
- global call to an exported function in old code, but old code may
+ in old code are unavailable. Hence, a global call cannot be made
+ to an exported function in old code, but old code can
still be evaluated because of processes lingering in it.</p>
- <p>If a third instance of the module is loaded, the code server will
- remove (purge) the old code and any processes lingering in it will
- be terminated. Then the third instance becomes 'current' and
+ <p>If a third instance of the module is loaded, the code server
+ removes (purges) the old code and any processes lingering in it
+ are terminated. Then the third instance becomes 'current' and
the previously current code becomes 'old'.</p>
<p>For more information about old and current code, and how to
- make a process switch from old to current code, refer to
+ make a process switch from old to current code, see section
+ Compilation and Code Loading in the
<seealso marker="doc/reference_manual:code_loading">Erlang Reference Manual</seealso>.</p>
</section>
<section>
<title>Argument Types and Invalid Arguments</title>
- <p>Generally, module and application names are atoms, while file and directory
+ <p>Module and application names are atoms, while file and directory
names are strings. For backward compatibility reasons, some functions accept
both strings and atoms, but a future release will probably only allow
the arguments that are documented.</p>
- <p>From the R12B release, functions in this module will generally fail with an
- exception if they are passed an incorrect type (for instance, an integer or a tuple
- where an atom was expected). An error tuple will be returned if the type of the argument
- was correct, but there was some other error (for instance, a non-existing directory
- was given to <c>set_path/1</c>).</p>
+ <p>As from Erlang/OTP R12B, functions in this module generally fail with an
+ exception if they are passed an incorrect type (for example, an integer or a tuple
+ where an atom is expected). An error tuple is returned if the argument type
+ is correct, but there are some other errors (for example, a non-existing directory
+ is specified to <c>set_path/1</c>).</p>
</section>
<section>
@@ -334,31 +312,38 @@
<datatype>
<name name="load_error_rsn"/>
</datatype>
+ <datatype>
+ <name name="prepared_code"/>
+ <desc><p>An opaque term holding prepared code.</p></desc>
+ </datatype>
</datatypes>
<funcs>
<func>
<name name="set_path" arity="1"/>
- <fsummary>Set the code server search path</fsummary>
+ <fsummary>Set the code server search path.</fsummary>
<desc>
<p>Sets the code path to the list of directories <c><anno>Path</anno></c>.</p>
- <p>Returns <c>true</c> if successful, or
- <c>{error, bad_directory}</c> if any <c><anno>Dir</anno></c> is not
- the name of a directory, or <c>{error, bad_path}</c> if
- the argument is invalid.</p>
+ <p>Returns:</p>
+ <taglist>
+ <tag><c>true</c></tag>
+ <item><p>If successful</p></item>
+ <tag><c>{error, bad_directory}</c></tag>
+ <item><p>If any <c><anno>Dir</anno></c> is not a directory name</p></item>
+ </taglist>
</desc>
</func>
<func>
<name name="get_path" arity="0"/>
- <fsummary>Return the code server search path</fsummary>
+ <fsummary>Return the code server search path.</fsummary>
<desc>
- <p>Returns the code path</p>
+ <p>Returns the code path.</p>
</desc>
</func>
<func>
<name name="add_path" arity="1"/>
<name name="add_pathz" arity="1"/>
- <fsummary>Add a directory to the end of the code path</fsummary>
+ <fsummary>Add a directory to the end of the code path.</fsummary>
<type name="add_path_ret"/>
<desc>
<p>Adds <c><anno>Dir</anno></c> to the code path. The directory is added as
@@ -371,11 +356,11 @@
</func>
<func>
<name name="add_patha" arity="1"/>
- <fsummary>Add a directory to the beginning of the code path</fsummary>
+ <fsummary>Add a directory to the beginning of the code path.</fsummary>
<type name="add_path_ret"/>
<desc>
<p>Adds <c><anno>Dir</anno></c> to the beginning of the code path. If
- <c><anno>Dir</anno></c> already exists, it is removed from the old
+ <c><anno>Dir</anno></c> exists, it is removed from the old
position in the code path.</p>
<p>Returns <c>true</c> if successful, or
<c>{error, bad_directory}</c> if <c><anno>Dir</anno></c> is not the name
@@ -385,69 +370,81 @@
<func>
<name name="add_paths" arity="1"/>
<name name="add_pathsz" arity="1"/>
- <fsummary>Add directories to the end of the code path</fsummary>
+ <fsummary>Add directories to the end of the code path.</fsummary>
<desc>
<p>Adds the directories in <c><anno>Dirs</anno></c> to the end of the code
- path. If a <c><anno>Dir</anno></c> already exists, it is not added. This
- function always returns <c>ok</c>, regardless of the validity
+ path. If a <c><anno>Dir</anno></c> exists, it is not added.</p>
+ <p>Always returns <c>ok</c>, regardless of the validity
of each individual <c><anno>Dir</anno></c>.</p>
</desc>
</func>
<func>
<name name="add_pathsa" arity="1"/>
- <fsummary>Add directories to the beginning of the code path</fsummary>
+ <fsummary>Add directories to the beginning of the code path.</fsummary>
<desc>
<p>Adds the directories in <c><anno>Dirs</anno></c> to the beginning of
- the code path. If a <c><anno>Dir</anno></c> already exists, it is removed
- from the old position in the code path. This function always
- returns <c>ok</c>, regardless of the validity of each
+ the code path. If a <c><anno>Dir</anno></c> exists, it is removed
+ from the old position in the code path.</p>
+ <p>Always returns <c>ok</c>, regardless of the validity of each
individual <c><anno>Dir</anno></c>.</p>
</desc>
</func>
<func>
<name name="del_path" arity="1"/>
- <fsummary>Delete a directory from the code path</fsummary>
+ <fsummary>Delete a directory from the code path.</fsummary>
<desc>
<p>Deletes a directory from the code path. The argument can be
an atom <c><anno>Name</anno></c>, in which case the directory with
the name <c>.../<anno>Name</anno>[-Vsn][/ebin]</c> is deleted from the code
- path. It is also possible to give the complete directory name
- <c><anno>Dir</anno></c> as argument.</p>
- <p>Returns <c>true</c> if successful, or <c>false</c> if
- the directory is not found, or <c>{error, bad_name}</c> if
- the argument is invalid.</p>
+ path. Also, the complete directory name <c><anno>Dir</anno></c> can be
+ specified as argument.</p>
+ <p>Returns:</p>
+ <taglist>
+ <tag><c>true</c></tag>
+ <item><p>If successful</p></item>
+ <tag><c>false</c></tag>
+ <item><p>If the directory is not found</p></item>
+ <tag><c>{error, bad_name}</c></tag>
+ <item><p>If the argument is invalid</p></item>
+ </taglist>
</desc>
</func>
<func>
<name name="replace_path" arity="2"/>
- <fsummary>Replace a directory with another in the code path</fsummary>
- <desc>
- <p>This function replaces an old occurrence of a directory
- named <c>.../<anno>Name</anno>[-Vsn][/ebin]</c>, in the code path, with
- <c><anno>Dir</anno></c>. If <c><anno>Name</anno></c> does not exist, it adds the new
- directory <c><anno>Dir</anno></c> last in the code path. The new directory
- must also be named <c>.../<anno>Name</anno>[-Vsn][/ebin]</c>. This function
- should be used if a new version of the directory (library) is
+ <fsummary>Replace a directory with another in the code path.</fsummary>
+ <desc>
+ <p>Replaces an old occurrence of a directory
+ named <c>.../<anno>Name</anno>[-Vsn][/ebin]</c> in the code path, with
+ <c><anno>Dir</anno></c>. If <c><anno>Name</anno></c> does not exist, it adds
+ the new directory <c><anno>Dir</anno></c> last in the code path. The new
+ directory must also be named <c>.../<anno>Name</anno>[-Vsn][/ebin]</c>.
+ This function is to be used if a new version of the directory (library) is
added to a running system.</p>
- <p>Returns <c>true</c> if successful, or
- <c>{error, bad_name}</c> if <c><anno>Name</anno></c> is not found, or
- <c>{error, bad_directory}</c> if <c><anno>Dir</anno></c> does not exist, or
- <c>{error, {badarg, [<anno>Name</anno>, <anno>Dir</anno>]}}</c> if <c><anno>Name</anno></c> or
- <c><anno>Dir</anno></c> is invalid.</p>
+ <p>Returns:</p>
+ <taglist>
+ <tag><c>true</c></tag>
+ <item><p>If successful</p></item>
+ <tag><c>{error, bad_name}</c></tag>
+ <item><p>If <c><anno>Name</anno></c> is not found</p></item>
+ <tag><c>{error, bad_directory}</c></tag>
+ <item><p>If <c><anno>Dir</anno></c> does not exist</p></item>
+ <tag><c>{error, {badarg, [<anno>Name</anno>, <anno>Dir</anno>]}}</c></tag>
+ <item><p>If <c><anno>Name</anno></c> or <c><anno>Dir</anno></c> is invalid</p></item>
+ </taglist>
</desc>
</func>
<func>
<name name="load_file" arity="1"/>
- <fsummary>Load a module</fsummary>
+ <fsummary>Load a module.</fsummary>
<type name="load_ret"/>
<desc>
<p>Tries to load the Erlang module <c><anno>Module</anno></c>, using
the code path. It looks for the object code file with an
- extension that corresponds to the Erlang machine used, for
- example <c><anno>Module</anno>.beam</c>. The loading fails if the module
+ extension corresponding to the Erlang machine used, for
+ example, <c><anno>Module</anno>.beam</c>. The loading fails if the module
name found in the object code differs from the name
<c><anno>Module</anno></c>.
- <seealso marker="#load_binary/3">load_binary/3</seealso> must
+ <seealso marker="#load_binary/3"><c>load_binary/3</c></seealso> must
be used to load object code with a module name that is
different from the file name.</p>
<p>Returns <c>{module, <anno>Module</anno>}</c> if successful, or
@@ -457,45 +454,45 @@
</func>
<func>
<name name="load_abs" arity="1"/>
- <fsummary>Load a module, residing in a given file</fsummary>
+ <fsummary>Load a module, residing in a specified file.</fsummary>
<type name="load_ret"/>
<type name="loaded_filename"/>
<type name="loaded_ret_atoms"/>
<desc>
- <p>Does the same as <c>load_file(<anno>Module</anno>)</c>, but
- <c><anno>Filename</anno></c> is either an absolute file name, or a
- relative file name. The code path is not searched. It returns
+ <p>Same as <c>load_file(<anno>Module</anno>)</c>, but
+ <c><anno>Filename</anno></c> is an absolute or
+ relative filename. The code path is not searched. It returns
a value in the same way as
- <seealso marker="#load_file/1">load_file/1</seealso>. Note
- that <c><anno>Filename</anno></c> should not contain the extension (for
- example <c>".beam"</c>); <c>load_abs/1</c> adds the correct
- extension itself.</p>
+ <seealso marker="#load_file/1"><c>load_file/1</c></seealso>. Notice
+ that <c><anno>Filename</anno></c> must not contain the extension (for
+ example, <c>.beam</c>) because <c>load_abs/1</c> adds the correct
+ extension.</p>
</desc>
</func>
<func>
<name name="ensure_loaded" arity="1"/>
- <fsummary>Ensure that a module is loaded</fsummary>
+ <fsummary>Ensure that a module is loaded.</fsummary>
<desc>
- <p>Tries to to load a module in the same way as
- <seealso marker="#load_file/1">load_file/1</seealso>,
+ <p>Tries to load a module in the same way as
+ <seealso marker="#load_file/1"><c>load_file/1</c></seealso>,
unless the module is already loaded.
- In embedded mode, however, it does not load a module which is not
+ However, in embedded mode it does not load a module that is not
already loaded, but returns <c>{error, embedded}</c> instead.
See <seealso marker="#error_reasons">Error Reasons for Code-Loading Functions</seealso> for a description of other possible error reasons.</p>
</desc>
</func>
<func>
<name name="load_binary" arity="3"/>
- <fsummary>Load object code for a module</fsummary>
+ <fsummary>Load object code for a module.</fsummary>
<type name="loaded_filename"/>
<type name="loaded_ret_atoms"/>
<desc>
<p>This function can be used to load object code on remote
- Erlang nodes. The argument <c><anno>Binary</anno></c> must contain
+ Erlang nodes. Argument <c><anno>Binary</anno></c> must contain
object code for <c><anno>Module</anno></c>.
<c><anno>Filename</anno></c> is only used by the code server to keep a
record of from which file the object code for <c><anno>Module</anno></c>
- comes. Accordingly, <c><anno>Filename</anno></c> is not opened and read by
+ comes. Thus, <c><anno>Filename</anno></c> is not opened and read by
the code server.</p>
<p>Returns <c>{module, <anno>Module</anno>}</c> if successful, or
<c>{error, Reason}</c> if loading fails.
@@ -503,93 +500,227 @@
</desc>
</func>
<func>
+ <name name="atomic_load" arity="1"/>
+ <fsummary>Load a list of modules atomically</fsummary>
+ <desc>
+ <p>Tries to load all of the modules in the list
+ <c><anno>Modules</anno></c> atomically. That means that
+ either all modules are loaded at the same time, or
+ none of the modules are loaded if there is a problem with any
+ of the modules.</p>
+ <p>Loading can fail for one the following reasons:</p>
+ <taglist>
+ <tag><c>badfile</c></tag>
+ <item>
+ <p>The object code has an incorrect format or the module
+ name in the object code is not the expected module name.</p>
+ </item>
+ <tag><c>nofile</c></tag>
+ <item>
+ <p>No file with object code exists.</p>
+ </item>
+ <tag><c>on_load_not_allowed</c></tag>
+ <item>
+ <p>A module contains an
+ <seealso marker="doc/reference_manual:code_loading#on_load">-on_load function</seealso>.</p>
+ </item>
+ <tag><c>duplicated</c></tag>
+ <item>
+ <p>A module is included more than once in
+ <c><anno>Modules</anno></c>.</p>
+ </item>
+ <tag><c>not_purged</c></tag>
+ <item>
+ <p>The object code can not be loaded because an old version
+ of the code already exists.</p>
+ </item>
+ <tag><c>sticky_directory</c></tag>
+ <item>
+ <p>The object code resides in a sticky directory.</p>
+ </item>
+ <tag><c>pending_on_load</c></tag>
+ <item>
+ <p>A previously loaded module contains an
+ <c>-on_load</c> function that never finished.</p>
+ </item>
+ </taglist>
+ <p>If it is important to minimize the time that an application
+ is inactive while changing code, use
+ <seealso marker="#prepare_loading/1">prepare_loading/1</seealso>
+ and
+ <seealso marker="#finish_loading/1">finish_loading/1</seealso>
+ instead of <c>atomic_load/1</c>. Here is an example:</p>
+<pre>
+{ok,Prepared} = code:prepare_loading(Modules),
+%% Put the application into an inactive state or do any
+%% other preparation needed before changing the code.
+ok = code:finish_loading(Prepared),
+%% Resume the application.</pre>
+ </desc>
+ </func>
+ <func>
+ <name name="prepare_loading" arity="1"/>
+ <fsummary>Prepare a list of modules atomically</fsummary>
+ <desc>
+ <p>Prepares to load the modules in the list
+ <c><anno>Modules</anno></c>.
+ Finish the loading by calling
+ <seealso marker="#finish_loading/1">finish_loading(Prepared)</seealso>.</p>
+ <p>This function can fail with one of the following error reasons:</p>
+ <taglist>
+ <tag><c>badfile</c></tag>
+ <item>
+ <p>The object code has an incorrect format or the module
+ name in the object code is not the expected module name.</p>
+ </item>
+ <tag><c>nofile</c></tag>
+ <item>
+ <p>No file with object code exists.</p>
+ </item>
+ <tag><c>on_load_not_allowed</c></tag>
+ <item>
+ <p>A module contains an
+ <seealso marker="doc/reference_manual:code_loading#on_load">-on_load function</seealso>.</p>
+ </item>
+ <tag><c>duplicated</c></tag>
+ <item>
+ <p>A module is included more than once in
+ <c><anno>Modules</anno></c>.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+ <func>
+ <name name="finish_loading" arity="1"/>
+ <fsummary>Finish loading a list of prepared modules atomically</fsummary>
+ <desc>
+ <p>Tries to load code for all modules that have been previously
+ prepared by
+ <seealso marker="#prepare_loading/1">prepare_loading/1</seealso>.
+ The loading occurs atomically, meaning that
+ either all modules are loaded at the same time, or
+ none of the modules are loaded.</p>
+ <p>This function can fail with one of the following error reasons:</p>
+ <taglist>
+ <tag><c>not_purged</c></tag>
+ <item>
+ <p>The object code can not be loaded because an old version
+ of the code already exists.</p>
+ </item>
+ <tag><c>sticky_directory</c></tag>
+ <item>
+ <p>The object code resides in a sticky directory.</p>
+ </item>
+ <tag><c>pending_on_load</c></tag>
+ <item>
+ <p>A previously loaded module contains an
+ <c>-on_load</c> function that never finished.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+ <func>
+ <name name="ensure_modules_loaded" arity="1"/>
+ <fsummary>Ensure that a list of modules is loaded</fsummary>
+ <desc>
+ <p>Tries to load any modules not already loaded in the list
+ <c><anno>Modules</anno></c> in the same way as
+ <seealso marker="#load_file/1">load_file/1</seealso>.</p>
+ <p>Returns <c>ok</c> if successful, or
+ <c>{error,[{Module,Reason}]}</c> if loading of some modules fails.
+ See <seealso marker="#error_reasons">Error Reasons for Code-Loading Functions</seealso> for a description of other possible error reasons.</p>
+ </desc>
+ </func>
+ <func>
<name name="delete" arity="1"/>
- <fsummary>Removes current code for a module</fsummary>
+ <fsummary>Remove current code for a module.</fsummary>
<desc>
<p>Removes the current code for <c><anno>Module</anno></c>, that is,
the current code for <c><anno>Module</anno></c> is made old. This means
that processes can continue to execute the code in the module,
- but that no external function calls can be made to it.</p>
+ but no external function calls can be made to it.</p>
<p>Returns <c>true</c> if successful, or <c>false</c> if there
- is old code for <c><anno>Module</anno></c> which must be purged first, or
+ is old code for <c><anno>Module</anno></c> that must be purged first, or
if <c><anno>Module</anno></c> is not a (loaded) module.</p>
</desc>
</func>
<func>
<name name="purge" arity="1"/>
- <fsummary>Removes old code for a module</fsummary>
+ <fsummary>Remove old code for a module.</fsummary>
<desc>
<p>Purges the code for <c><anno>Module</anno></c>, that is, removes code
marked as old. If some processes still linger in the old code,
these processes are killed before the code is removed.</p>
- <p>Returns <c>true</c> if successful and any process needed to
+ <p>Returns <c>true</c> if successful and any process is needed to
be killed, otherwise <c>false</c>.</p>
</desc>
</func>
<func>
<name name="soft_purge" arity="1"/>
- <fsummary>Removes old code for a module, unless no process uses it</fsummary>
+ <fsummary>Remove old code for a module, unless no process uses it.</fsummary>
<desc>
<p>Purges the code for <c><anno>Module</anno></c>, that is, removes code
marked as old, but only if no processes linger in it.</p>
- <p>Returns <c>false</c> if the module could not be purged due
- to processes lingering in old code, otherwise <c>true</c>.</p>
+ <p>Returns <c>false</c> if the module cannot be purged because
+ of processes lingering in old code, otherwise <c>true</c>.</p>
</desc>
</func>
<func>
<name name="is_loaded" arity="1"/>
- <fsummary>Check if a module is loaded</fsummary>
+ <fsummary>Check if a module is loaded.</fsummary>
<type name="loaded_filename"/>
<type name="loaded_ret_atoms"/>
- <type_desc name="loaded_filename"><c><anno>Filename</anno></c> is an absolute filename</type_desc>
+ <type_desc name="loaded_filename"><c><anno>Filename</anno></c> is an absolute
+ filename.</type_desc>
<desc>
<p>Checks if <c><anno>Module</anno></c> is loaded. If it is,
<c>{file, <anno>Loaded</anno>}</c> is returned, otherwise <c>false</c>.</p>
- <p>Normally, <c><anno>Loaded</anno></c> is the absolute file name
- <c>Filename</c> from which the code was obtained. If the module
+ <p>Normally, <c><anno>Loaded</anno></c> is the absolute filename
+ <c>Filename</c> from which the code is obtained. If the module
is preloaded (see
- <seealso marker="sasl:script">script(4)</seealso>),
- <c>Loaded==preloaded</c>. If the module is Cover compiled (see
- <seealso marker="tools:cover">cover(3)</seealso>),
+ <seealso marker="sasl:script"><c>sasl:script(4)</c></seealso>),
+ <c>Loaded==preloaded</c>. If the module is Cover-compiled (see
+ <seealso marker="tools:cover"><c>tools:cover(3)</c></seealso>),
<c>Loaded==cover_compiled</c>.</p>
</desc>
</func>
<func>
<name name="all_loaded" arity="0"/>
- <fsummary>Get all loaded modules</fsummary>
+ <fsummary>Get all loaded modules.</fsummary>
<type name="loaded_filename"/>
<type name="loaded_ret_atoms"/>
- <type_desc name="loaded_filename"><c><anno>Filename</anno></c> is an absolute filename</type_desc>
+ <type_desc name="loaded_filename"><c><anno>Filename</anno></c> is an absolute
+ filename.</type_desc>
<desc>
<p>Returns a list of tuples <c>{<anno>Module</anno>, <anno>Loaded</anno>}</c> for all
- loaded modules. <c><anno>Loaded</anno></c> is normally the absolute file
- name, as described for
- <seealso marker="#is_loaded/1">is_loaded/1</seealso>.</p>
+ loaded modules. <c><anno>Loaded</anno></c> is normally the absolute filename,
+ as described for
+ <seealso marker="#is_loaded/1"><c>is_loaded/1</c></seealso>.</p>
</desc>
</func>
<func>
<name name="which" arity="1"/>
- <fsummary>The object code file of a module</fsummary>
+ <fsummary>The object code file of a module.</fsummary>
<type name="loaded_ret_atoms"/>
<desc>
<p>If the module is not loaded, this function searches the code
- path for the first file which contains object code for
- <c><anno>Module</anno></c> and returns the absolute file name. If
- the module is loaded, it returns the name of the file which
- contained the loaded object code. If the module is pre-loaded,
- <c>preloaded</c> is returned. If the module is Cover compiled,
- <c>cover_compiled</c> is returned. <c>non_existing</c> is
- returned if the module cannot be found.</p>
+ path for the first file containing object code for
+ <c><anno>Module</anno></c> and returns the absolute filename.</p>
+ <p>If the module is loaded, it returns the name of the file
+ containing the loaded object code.</p>
+ <p>If the module is preloaded, <c>preloaded</c> is returned.</p>
+ <p>If the module is Cover-compiled, <c>cover_compiled</c> is returned.</p>
+ <p>If the module cannot be found, <c>non_existing</c> is returned.</p>
</desc>
</func>
<func>
<name name="get_object_code" arity="1"/>
- <fsummary>Get the object code for a module</fsummary>
+ <fsummary>Gets the object code for a module.</fsummary>
<desc>
- <p>Searches the code path for the object code of the module
- <c><anno>Module</anno></c>. It returns <c>{<anno>Module</anno>, <anno>Binary</anno>, <anno>Filename</anno>}</c>
- if successful, and <c>error</c> if not. <c><anno>Binary</anno></c> is a
- binary data object which contains the object code for
+ <p>Searches the code path for the object code of module
+ <c><anno>Module</anno></c>. Returns <c>{<anno>Module</anno>, <anno>Binary</anno>, <anno>Filename</anno>}</c>
+ if successful, otherwise <c>error</c>. <c><anno>Binary</anno></c> is a
+ binary data object, which contains the object code for
the module. This can be useful if code is to be loaded on a
remote node in a distributed system. For example, loading
module <c><anno>Module</anno></c> on a node <c>Node</c> is done as
@@ -603,10 +734,11 @@ rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
</func>
<func>
<name name="root_dir" arity="0"/>
- <fsummary>Root directory of Erlang/OTP</fsummary>
+ <fsummary>Root directory of Erlang/OTP.</fsummary>
<desc>
<p>Returns the root directory of Erlang/OTP, which is
the directory where it is installed.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>code:root_dir().</input>
"/usr/local/otp"</pre>
@@ -614,10 +746,11 @@ rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
</func>
<func>
<name name="lib_dir" arity="0"/>
- <fsummary>Library directory of Erlang/OTP</fsummary>
+ <fsummary>Library directory of Erlang/OTP.</fsummary>
<desc>
<p>Returns the library directory, <c>$OTPROOT/lib</c>, where
<c>$OTPROOT</c> is the root directory of Erlang/OTP.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>code:lib_dir().</input>
"/usr/local/otp/lib"</pre>
@@ -625,50 +758,49 @@ rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
</func>
<func>
<name name="lib_dir" arity="1"/>
- <fsummary>Library directory for an application</fsummary>
+ <fsummary>Library directory for an application.</fsummary>
<desc>
- <p>This function is mainly intended for finding out the path
+ <p>Returns the path
for the "library directory", the top directory, for an
application <c><anno>Name</anno></c> located under <c>$OTPROOT/lib</c> or
- on a directory referred to via the <c>ERL_LIBS</c>
- environment variable.</p>
- <p>If there is a regular directory called <c><anno>Name</anno></c> or
- <c><anno>Name</anno>-Vsn</c> in the code path with an <c>ebin</c>
+ on a directory referred to with environment variable <c>ERL_LIBS</c>.</p>
+ <p>If a regular directory called <c><anno>Name</anno></c> or
+ <c><anno>Name</anno>-Vsn</c> exists in the code path with an <c>ebin</c>
subdirectory, the path to this directory is returned (not
- the <c>ebin</c> directory). If the directory refers to a
- directory in an archive, the archive name is stripped away
- before the path is returned. For example, if the directory
+ the <c>ebin</c> directory).</p>
+ <p>If the directory refers to a directory in an archive, the
+ archive name is stripped away before the path is returned.
+ For example, if directory
<c>/usr/local/otp/lib/mnesia-4.2.2.ez/mnesia-4.2.2/ebin</c>
is in the path, <c>/usr/local/otp/lib/mnesia-4.2.2/ebin</c>
- will be returned. This means that the library directory for
- an application is the same, regardless of whether the
+ is returned. This means that the library directory for
+ an application is the same, regardless if the
application resides in an archive or not.</p>
-
+ <p><em>Example:</em></p>
<pre>
> <input>code:lib_dir(mnesia).</input>
"/usr/local/otp/lib/mnesia-4.2.2"</pre>
<p>Returns <c>{error, bad_name}</c> if <c><anno>Name</anno></c>
is not the name of an application under <c>$OTPROOT/lib</c> or
- on a directory referred to via the <c>ERL_LIBS</c>
- environment variable. Fails with an exception if <c>Name</c>
- has the wrong type.</p>
+ on a directory referred to through environment variable <c>ERL_LIBS</c>.
+ Fails with an exception if <c>Name</c> has the wrong type.</p>
- <warning><p>For backward compatibility, <c><anno>Name</anno></c> is also allowed to
- be a string. That will probably change in a future release.</p></warning>
+ <warning><p>For backward compatibility, <c><anno>Name</anno></c> is also
+ allowed to be a string. That will probably change in a future release.</p></warning>
</desc>
</func>
<func>
<name name="lib_dir" arity="2"/>
- <fsummary>subdirectory for an application</fsummary>
+ <fsummary>Subdirectory for an application.</fsummary>
<desc>
<p>Returns the path to a subdirectory directly under the top
directory of an application. Normally the subdirectories
- resides under the top directory for the application, but when
- applications at least partly resides in an archive the
- situation is different. Some of the subdirectories may reside
- as regular directories while other resides in an archive
- file. It is not checked if this directory really exists.</p>
-
+ reside under the top directory for the application, but when
+ applications at least partly resides in an archive, the
+ situation is different. Some of the subdirectories can reside
+ as regular directories while other reside in an archive
+ file. It is not checked whether this directory exists.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>code:lib_dir(megaco, priv).</input>
"/usr/local/otp/lib/megaco-3.9.1.1/priv"</pre>
@@ -679,7 +811,7 @@ rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
</func>
<func>
<name name="compiler_dir" arity="0"/>
- <fsummary>Library directory for the compiler</fsummary>
+ <fsummary>Library directory for the compiler.</fsummary>
<desc>
<p>Returns the compiler library directory. Equivalent to
<c>code:lib_dir(compiler)</c>.</p>
@@ -687,10 +819,10 @@ rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
</func>
<func>
<name name="priv_dir" arity="1"/>
- <fsummary>Priv directory for an application</fsummary>
+ <fsummary>Priv directory for an application.</fsummary>
<desc>
<p>Returns the path to the <c>priv</c> directory in an
- application. Equivalent to <c>code:lib_dir(<anno>Name</anno>, priv).</c>.</p>
+ application. Equivalent to <c>code:lib_dir(<anno>Name</anno>, priv)</c>.</p>
<warning><p>For backward compatibility, <c><anno>Name</anno></c> is also allowed to
be a string. That will probably change in a future release.</p></warning>
@@ -698,91 +830,88 @@ rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
</func>
<func>
<name name="objfile_extension" arity="0"/>
- <fsummary>Object code file extension</fsummary>
+ <fsummary>Object code file extension.</fsummary>
<desc>
- <p>Returns the object code file extension that corresponds to
- the Erlang machine used, namely <c>".beam"</c>.</p>
+ <p>Returns the object code file extension corresponding to
+ the Erlang machine used, namely <c>.beam</c>.</p>
</desc>
</func>
<func>
<name name="stick_dir" arity="1"/>
- <fsummary>Mark a directory as sticky</fsummary>
+ <fsummary>Mark a directory as sticky.</fsummary>
<desc>
- <p>This function marks <c><anno>Dir</anno></c> as sticky.</p>
- <p>Returns <c>ok</c> if successful or <c>error</c> if not.</p>
+ <p>Marks <c><anno>Dir</anno></c> as sticky.</p>
+ <p>Returns <c>ok</c> if successful, otherwise <c>error</c>.</p>
</desc>
</func>
<func>
<name name="unstick_dir" arity="1"/>
- <fsummary>Remove a sticky directory mark</fsummary>
+ <fsummary>Remove a sticky directory mark.</fsummary>
<desc>
- <p>This function unsticks a directory which has been marked as
+ <p>Unsticks a directory that is marked as
sticky.</p>
- <p>Returns <c>ok</c> if successful or <c>error</c> if not.</p>
+ <p>Returns <c>ok</c> if successful, otherwise <c>error</c>.</p>
</desc>
</func>
<func>
<name name="is_sticky" arity="1"/>
- <fsummary>Test whether a module is sticky</fsummary>
+ <fsummary>Test if a module is sticky.</fsummary>
<desc>
- <p>This function returns <c>true</c> if <c><anno>Module</anno></c> is the
+ <p>Returns <c>true</c> if <c><anno>Module</anno></c> is the
name of a module that has been loaded from a sticky directory
- (or in other words: an attempt to reload the module will fail),
+ (in other words: an attempt to reload the module will fail),
or <c>false</c> if <c><anno>Module</anno></c> is not a loaded module or is
not sticky.</p>
</desc>
</func>
<func>
- <name name="rehash" arity="0"/>
- <fsummary>Rehash or create code path cache</fsummary>
- <desc>
- <p>This function creates or rehashes the code path cache.</p>
- </desc>
- </func>
- <func>
<name name="where_is_file" arity="1"/>
- <fsummary>Full name of a file located in the code path</fsummary>
+ <fsummary>Full name of a file located in the code path.</fsummary>
<desc>
<p>Searches the code path for <c><anno>Filename</anno></c>, a file of
arbitrary type. If found, the full name is returned.
<c>non_existing</c> is returned if the file cannot be found.
The function can be useful, for example, to locate
- application resource files. If the code path cache is used,
- the code server will efficiently read the full name from
- the cache, provided that <c><anno>Filename</anno></c> is an object code
- file or an <c>.app</c> file.</p>
+ application resource files.</p>
</desc>
</func>
<func>
<name name="clash" arity="0"/>
<fsummary>Search for modules with identical names.</fsummary>
<desc>
- <p>Searches the entire code space for module names with
+ <p>Searches all directories in the code path for module names with
identical names and writes a report to <c>stdout</c>.</p>
</desc>
</func>
<func>
<name name="is_module_native" arity="1"/>
- <fsummary>Test whether a module has native code</fsummary>
+ <fsummary>Test if a module has native code.</fsummary>
<desc>
- <p>This function returns <c>true</c> if <c><anno>Module</anno></c> is
- name of a loaded module that has native code loaded, and
- <c>false</c> if <c><anno>Module</anno></c> is loaded but does not have
- native. If <c><anno>Module</anno></c> is not loaded, this function returns
- <c>undefined</c>.</p>
+ <p>Returns:</p>
+ <taglist>
+ <tag><c>true</c></tag>
+ <item><p>If <c><anno>Module</anno></c> is the
+ name of a loaded module that has native code loaded</p></item>
+ <tag><c>false</c></tag>
+ <item><p>If <c><anno>Module</anno></c> is loaded but does not have
+ native code</p></item>
+ <tag><c>undefined</c></tag>
+ <item><p>If <c><anno>Module</anno></c> is not loaded</p></item>
+ </taglist>
</desc>
</func>
<func>
<name name="get_mode" arity="0"/>
- <fsummary>The code_server's mode.</fsummary>
+ <fsummary>The mode of the code server.</fsummary>
<desc>
- <p>This function returns an atom describing the code_server's mode:
- <c>interactive</c> or <c>embedded</c>. </p>
+ <p>Returns an atom describing the mode of the code server:
+ <c>interactive</c> or <c>embedded</c>.</p>
<p>This information is useful when an external entity (for example,
- an IDE) provides additional code for a running node. If in interactive
- mode, it only needs to add to the code path. If in embedded mode,
- the code has to be loaded with <c>load_binary/3</c></p>
+ an IDE) provides additional code for a running node. If the code server is
+ in interactive mode, it only has to add the path to the code. If the code server
+ is in embedded mode, the code must be loaded with
+ <seealso marker="#load_binary/3"><c>load_binary/3</c></seealso>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/kernel/doc/src/config.xml b/lib/kernel/doc/src/config.xml
index 0e34549482..c5f37fd036 100644
--- a/lib/kernel/doc/src/config.xml
+++ b/lib/kernel/doc/src/config.xml
@@ -4,14 +4,14 @@
<fileref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
@@ -19,7 +19,7 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-
+
</legalnotice>
<title>config</title>
@@ -33,94 +33,93 @@
<description>
<p>A <em>configuration file</em> contains values for configuration
parameters for the applications in the system. The <c>erl</c>
- command line argument <c>-config Name</c> tells the system to use
+ command-line argument <c>-config Name</c> tells the system to use
data in the system configuration file <c>Name.config</c>.</p>
- <p>Configuration parameter values in the configuration file will
+ <p>Configuration parameter values in the configuration file
override the values in the application resource files (see
- <c>app(4)</c>). The values in the configuration file can be
- overridden by command line flags (see <c>erl(1)</c>).</p>
+ <seealso marker="app"><c>app(4)</c></seealso>.
+ The values in the configuration file can be
+ overridden by command-line flags (see
+ <seealso marker="erts:erl"><c>erts:erl(1)</c></seealso>.</p>
<p>The value of a configuration parameter is retrieved by calling
<c>application:get_env/1,2</c>.</p>
</description>
<section>
- <title>FILE SYNTAX</title>
- <p>The configuration file should be called <c>Name.config</c> where
- <c>Name</c> is an arbitrary name.</p>
- <p>The <c>.config</c> file contains one single Erlang term.
- The file has the following syntax:</p>
+ <title>File Syntax</title>
+ <p>The configuration file is to be called <c>Name.config</c>, where
+ <c>Name</c> is any name.</p>
+ <p>File <c>.config</c> contains a single Erlang term and
+ has the following syntax:</p>
<code type="none">
-[{Application1, [{Par11, Val11}, ..]},
- ..
- {ApplicationN, [{ParN1, ValN1}, ..]}].</code>
- <list type="bulleted">
- <item>
- <p><c>Application = atom()</c> is the name of the application.</p>
- </item>
- <item>
- <p><c>Par = atom()</c> is the name of a configuration parameter.</p>
- </item>
- <item>
- <p><c>Val = term()</c> is the value of a configuration
- parameter.</p>
- </item>
- </list>
+[{Application1, [{Par11, Val11}, ...]},
+ ...
+ {ApplicationN, [{ParN1, ValN1}, ...]}].</code>
+ <taglist>
+ <tag><c>Application = atom()</c></tag>
+ <item><p>Application name.</p></item>
+ <tag><c>Par = atom()</c></tag>
+ <item><p>Name of a configuration parameter.</p></item>
+ <tag><c>Val = term()</c></tag>
+ <item><p>Value of a configuration parameter.</p></item>
+ </taglist>
</section>
<section>
<title>sys.config</title>
<p>When starting Erlang in embedded mode, it is assumed that
exactly one system configuration file is used, named
- <c>sys.config</c>. This file should be located in
+ <c>sys.config</c>. This file is to be located in
<c>$ROOT/releases/Vsn</c>, where <c>$ROOT</c> is the Erlang/OTP
root installation directory and <c>Vsn</c> is the release version.</p>
<p>Release handling relies on this assumption. When installing a
new release version, the new <c>sys.config</c> is read and used
to update the application configurations.</p>
- <p>This means that specifying another, or additional, <c>.config</c>
- files would lead to inconsistent update of application
+ <p>This means that specifying another <c>.config</c> file, or more
+ <c>.config</c> files, leads to inconsistent update of application
configurations. Therefore, in Erlang 5.4/OTP R10B, the syntax of
<c>sys.config</c> was extended to allow pointing out other
<c>.config</c> files:</p>
<code type="none">
[{Application, [{Par, Val}]} | File].</code>
- <list type="bulleted">
- <item>
- <p><c>File = string()</c> is the name of another <c>.config</c>
- file. The extension <c>.config</c> may be omitted. It is
- recommended to use absolute paths. A relative path is
- relative the current working directory of the emulator.</p>
- </item>
- </list>
+ <taglist>
+ <tag><c>File = string()</c></tag>
+ <item>Name of another <c>.config</c> file.
+ Extension <c>.config</c> can be omitted. It is
+ recommended to use absolute paths. A relative path is
+ relative the current working directory of the emulator.</item>
+ </taglist>
<p>When traversing the contents of <c>sys.config</c> and a filename
is encountered, its contents are read and merged with the result
so far. When an application configuration tuple
<c>{Application, Env}</c> is found, it is merged with the result
so far. Merging means that new parameters are added and existing
- parameter values overwritten. Example:</p>
+ parameter values overwritten.</p>
+ <p><em>Example:</em></p>
<code type="none">
sys.config:
[{myapp,[{par1,val1},{par2,val2}]},
"/home/user/myconfig"].
-
myconfig.config:
[{myapp,[{par2,val3},{par3,val4}]}].</code>
- <p>This will yield the following environment for <c>myapp</c>:</p>
+ <p>This yields the following environment for <c>myapp</c>:</p>
<code type="none">
[{par1,val1},{par2,val3},{par3,val4}]</code>
- <p>The behaviour if a file specified in <c>sys.config</c> does not
- exist or is erroneous in some other way, is backwards compatible.
+ <p>The behavior if a file specified in <c>sys.config</c> does not
+ exist, or is erroneous, is backwards compatible.
Starting the runtime system will fail. Installing a new release
- version will not fail, but an error message is given and
+ version will not fail, but an error message is returned and
the erroneous file is ignored.</p>
</section>
<section>
- <title>SEE ALSO</title>
- <p><c>app(4)</c>, <c>erl(1)</c>, <em>OTP Design Principles</em></p>
+ <title>See Also</title>
+ <p><seealso marker="app"><c>app(4)</c></seealso>,
+ <seealso marker="erts:erl"><c>erts:erl(1)</c></seealso>,
+ <seealso marker="doc/design_principles:des_princ">OTP Design Principles</seealso></p>
</section>
</fileref>
diff --git a/lib/kernel/doc/src/disk_log.xml b/lib/kernel/doc/src/disk_log.xml
index 7d4a9687ea..0b6ee1e6a5 100644
--- a/lib/kernel/doc/src/disk_log.xml
+++ b/lib/kernel/doc/src/disk_log.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -35,149 +35,174 @@
<file>disk_log.sgml</file>
</header>
<module>disk_log</module>
- <modulesummary>A disk based term logging facility</modulesummary>
+ <modulesummary>A disk-based term logging facility.</modulesummary>
<description>
- <p><c>disk_log</c> is a disk based term logger which makes
- it possible to efficiently log items on files.
- Two types of logs are supported,
- <em>halt logs</em> and <em>wrap logs</em>. A halt log
- appends items to a single file, the size of which may or may
- not be limited by the disk log module, whereas a wrap log utilizes
- a sequence of wrap log files of limited size. As a wrap log file
- has been filled up, further items are logged onto to the next
- file in the sequence, starting all over with the first file when
- the last file has been filled up. For the sake of efficiency,
- items are always written to files as binaries.
- </p>
- <p>Two formats of the log files are supported, the <em>internal format</em> and the <em>external format</em>. The internal
- format supports automatic repair of log files that have not been
- properly closed, and makes it possible to efficiently read
- logged items in <em>chunks</em> using a set of functions defined
- in this module. In fact, this is the only way to read internally
- formatted logs. The external format leaves it up to the user to
- read the logged deep byte lists. The disk log module cannot
- repair externally formatted logs. An item logged to an
- internally formatted log must not occupy more than 4 GB of disk
- space (the size must fit in 4 bytes).
- </p>
- <p>For each open disk log there is one process that handles requests
- made to the disk log; the disk log process is created when <c>open/1</c>
+ <p><c>disk_log</c> is a disk-based term logger that enables
+ efficient logging of items on files.</p>
+ <p>Two types of logs are supported:</p>
+ <taglist>
+ <tag>halt logs</tag>
+ <item><p>Appends items to a single file, which size can
+ be limited by the disk log module.</p></item>
+ <tag>wrap logs</tag>
+ <item><p>Uses a sequence of wrap log files of limited size. As a
+ wrap log file is filled up, further items are logged on to the next
+ file in the sequence, starting all over with the first file when
+ the last file is filled up.</p></item>
+ </taglist>
+ <p>For efficiency reasons, items are always written to files as binaries.</p>
+
+ <p>Two formats of the log files are supported:</p>
+ <taglist>
+ <tag>internal format</tag>
+ <item><p>Supports automatic repair of log files that are not
+ properly closed and enables efficient reading of logged items in
+ <em>chunks</em> using a set of functions defined in this module.
+ This is the only way to read internally formatted logs.
+ An item logged to an internally formatted log must not occupy more
+ than 4 GB of disk space (the size must fit in 4 bytes).</p></item>
+ <tag>external format</tag>
+ <item><p>Leaves it up to the user to read the logged deep byte lists.
+ The disk log module cannot repair externally formatted logs.</p></item>
+ </taglist>
+
+ <p>For each open disk log, one process handles requests
+ made to the disk log. This process is created when
+ <seealso marker="#open/1"><c>open/1</c></seealso>
is called, provided there exists no process handling the disk log.
- A process that opens a disk log can either be an <em>owner</em>
+ A process that opens a disk log can be an <em>owner</em>
or an anonymous <em>user</em> of the disk log. Each owner is
- linked to the disk log
- process, and the disk log is closed by the owner should the
- owner terminate. Owners can subscribe to <em>notifications</em>,
- messages of the form <c>{disk_log, Node, Log, Info}</c> that are sent
+ linked to the disk log process, and an owner can close the disk log
+ either explicitly (by calling <c>close/1</c> or <c>lclose/1,2</c>)
+ or by terminating.</p>
+ <p>Owners can subscribe to <em>notifications</em>,
+ messages of the form <c>{disk_log, Node, Log, Info}</c>, which are sent
from the disk log process when certain events occur, see
- the commands below and in particular the <c>open/1</c> option
- <seealso marker="#notify">notify</seealso>.
- There can be several owners of a log, but a process cannot own a
- log more than once. One and the same process may, however,
- open the log
- as a user more than once. For a disk log process to properly close
- its file and terminate, it must be closed by its owners and once by
- some non-owner process for each time the log was used anonymously;
- the users are counted, and there must not be any users left when the
- disk log process terminates.
+ the functions and in particular the <c>open/1</c> option
+ <seealso marker="#notify"><c>notify</c></seealso>.
+ A log can have many owners, but a process cannot own a
+ log more than once. However, the same process can open the log
+ as a user more than once.</p>
+ <p>For a disk log process to close its file properly and terminate,
+ it must be closed by its owners and once by some non-owner process
+ for each time the log was used anonymously. The users are counted
+ and there must not be any users left when the disk log process terminates.
</p>
- <p>Items can be logged <em>synchronously</em> by using the functions
- <c>log/2</c>, <c>blog/2</c>, <c>log_terms/2</c> and
- <c>blog_terms/2</c>. For each of these functions, the caller is put
- on hold until the items have been logged (but not necessarily
+ <p>Items can be logged <em>synchronously</em> by using functions
+ <seealso marker="#log/2"><c>log/2</c></seealso>,
+ <seealso marker="#blog/2"><c>blog/2</c></seealso>,
+ <seealso marker="#log_terms/2"><c>log_terms/2</c></seealso>, and
+ <seealso marker="#blog_terms/2"><c>blog_terms/2</c></seealso>.
+ For each of these functions, the caller is put
+ on hold until the items are logged (but not necessarily
written, use <c>sync/1</c> to ensure that). By adding an <c>a</c>
- to each of the mentioned function names we get functions that log
+ to each of the mentioned function names, we get functions that log
items <em>asynchronously</em>. Asynchronous functions do not wait for
- the disk log process to actually write the items to the file, but
+ the disk log process to write the items to the file, but
return the control to the caller more or less immediately.
</p>
- <p>When using the internal format for logs, the functions
- <c>log/2</c>, <c>log_terms/2</c>, <c>alog/2</c>, and
- <c>alog_terms/2</c> should be used. These functions log one or
- more Erlang terms. By prefixing each of the functions with
- a <c>b</c> (for "binary") we get the corresponding <c>blog</c>
- functions for the external format. These functions log one or
- more deep lists of bytes or, alternatively, binaries of deep lists
- of bytes.
- For example, to log the string <c>"hello"</c> in ASCII format, we
+ <p>When using the internal format for logs, use functions
+ <seealso marker="#log/2"><c>log/2</c></seealso>,
+ <seealso marker="#log_terms/2"><c>log_terms/2</c></seealso>,
+ <seealso marker="#alog/2"><c>alog/2</c></seealso>, and
+ <seealso marker="#alog_terms/2"><c>alog_terms/2</c></seealso>.
+ These functions log one or more Erlang terms.
+ By prefixing each of the functions with a <c>b</c> (for "binary"),
+ we get the corresponding <c>blog()</c> functions for the external format.
+ These functions log one or more deep lists of bytes or, alternatively,
+ binaries of deep lists of bytes.
+ For example, to log the string <c>"hello"</c> in ASCII format, you
can use <c>disk_log:blog(Log, "hello")</c>, or
<c>disk_log:blog(Log, list_to_binary("hello"))</c>. The two
- alternatives are equally efficient. The <c>blog</c> functions
- can be used for internally formatted logs as well, but in
- this case they must be called with binaries constructed with
- calls to <c>term_to_binary/1</c>. There is no check to ensure
+ alternatives are equally efficient.</p>
+ <p>The <c>blog()</c> functions can also be used for internally formatted
+ logs, but in this case they must be called with binaries constructed
+ with calls to
+ <seealso marker="erts:erlang#term_to_binary/1"><c>term_to_binary/1</c></seealso>.
+ There is no check to ensure
this, it is entirely the responsibility of the caller. If these
functions are called with binaries that do not correspond to
- Erlang terms, the <c>chunk/2,3</c> and automatic repair
- functions will fail. The corresponding terms (not the binaries)
- will be returned when <c>chunk/2,3</c> is called.
+ Erlang terms, the
+ <seealso marker="#chunk/2"><c>chunk/2,3</c></seealso>
+ and automatic repair
+ functions fail. The corresponding terms (not the binaries)
+ are returned when <c>chunk/2,3</c> is called.
</p>
<p>A collection of open disk logs with the same name running on
- different nodes is said to be a <em>a distributed disk log</em>
- if requests made to any one of the logs are automatically made to
- the other logs as well. The members of such a collection will be
+ different nodes is said to be a <em>distributed disk log</em>
+ if requests made to any of the logs are automatically made to
+ the other logs as well. The members of such a collection are
called individual distributed disk logs, or just distributed
disk logs if there is no risk of confusion. There is no order
- between the members of such a collection. For instance, logged
- terms are not necessarily written onto the node where the
- request was made before written onto the other nodes. One could
- note here that there are a few functions that do not make
- requests to all members of distributed disk logs, namely
- <c>info</c>, <c>chunk</c>, <c>bchunk</c>, <c>chunk_step</c> and
- <c>lclose</c>. An open disk log that is not a distributed disk
+ between the members of such a collection. For example, logged
+ terms are not necessarily written to the node where the
+ request was made before written to the other nodes. However,
+ a few functions do not make requests to all
+ members of distributed disk logs, namely
+ <seealso marker="#info/1"><c>info/1</c></seealso>,
+ <seealso marker="#chunk/2"><c>chunk/2,3</c></seealso>,
+ <seealso marker="#bchunk/2"><c>bchunk/2,3</c></seealso>,
+ <seealso marker="#chunk_step/3"><c>chunk_step/3</c></seealso>, and
+ <seealso marker="#lclose/1"><c>lclose/1,2</c></seealso>.</p>
+ <p>An open disk log that is not a distributed disk
log is said to be a <em>local disk log</em>. A local disk log is
- accessible only from the node where the disk log process runs,
+ only accessible from the node where the disk log process runs,
whereas a distributed disk log is accessible from all nodes in
- the Erlang system, with exception for those nodes where a local
+ the Erlang system, except for those nodes where a local
disk log with the same name as the distributed disk log exists.
All processes on nodes that have access to a local or
- distributed disk log can log items or otherwise change, inspect
+ distributed disk log can log items or otherwise change, inspect,
or close the log.
</p>
<p>It is not guaranteed that all log files of a distributed disk log
- contain the same log items; there is no attempt made to synchronize
+ contain the same log items. No attempt is made to synchronize
the contents of the files. However, as long as at least one of
- the involved nodes is alive at each time, all items will be logged.
+ the involved nodes is alive at each time, all items are logged.
When logging items to a distributed log, or otherwise trying to
change the log, the replies from individual logs are
ignored. If all nodes are down, the disk log functions
reply with a <c>nonode</c> error.
</p>
<note>
- <p>In some applications it may not be acceptable that
+ <p>In some applications, it can be unacceptable that
replies from individual logs are ignored. An alternative in such
- situations is to use several local disk logs instead of one
+ situations is to use many local disk logs instead of one
distributed disk log, and implement the distribution without use
- of the disk log module.</p>
+ of the <c>disk_log</c> module.</p>
</note>
<p>Errors are reported differently for asynchronous log attempts
- and other uses of the disk log module. When used synchronously
- the disk log module replies with an error message, but when called
- asynchronously, the disk log module does not know where to send
- the error message. Instead owners subscribing to notifications will
+ and other uses of the <c>disk_log</c> module. When used synchronously,
+ this module replies with an error message, but when called
+ asynchronously, this module does not know where to send
+ the error message. Instead, owners subscribing to notifications
receive an <c>error_status</c> message.
</p>
- <p>The disk log module itself does not report errors to the
- <c>error_logger</c> module; it is up to the caller to decide
- whether the error logger should be employed or not. The function
- <c>format_error/1</c> can be used to produce readable messages
- from error replies. Information events are however sent to the
- error logger in two situations, namely when a log is repaired,
- or when a file is missing while reading chunks.
+ <p>The <c>disk_log</c> module does not report errors to the
+ <seealso marker="error_logger"><c>error_logger</c></seealso>
+ module. It is up to the caller to decide
+ whether to employ the error logger. Function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>
+ can be used to produce readable messages from error replies.
+ However, information events are sent to the error logger in two
+ situations, namely when a log is repaired, or when a file is missing
+ while reading chunks.
</p>
- <p>The error message <c>no_such_log</c> means that the given
- disk log is not currently open. Nothing is said about
- whether the disk log files exist or not.
+ <p>Error message <c>no_such_log</c> means that the specified
+ disk log is not open. Nothing is said about whether the disk log
+ files exist or not.
</p>
<note>
<p>If an attempt to reopen or truncate a log fails (see
- <c>reopen</c> and <c>truncate</c>) the disk log process
- immediately terminates. Before the process terminates links to
- to owners and blocking processes (see <c>block</c>) are removed.
- The effect is that the links work in one direction only; any
- process using a disk log has to check for the error message
- <c>no_such_log</c> if some other process might truncate or
- reopen the log simultaneously.</p>
+ <seealso marker="#reopen/2"><c>reopen/2,3</c></seealso>
+ and
+ <seealso marker ="#truncate/1"><c>truncate/1,2</c></seealso>)
+ the disk log process terminates immediately. Before the process
+ terminates, links to owners and blocking processes (see
+ <seealso marker="#block/1"><c>block/1,2</c></seealso>) are removed.
+ The effect is that the links work in one direction only. Any
+ process using a disk log must check for error message
+ <c>no_such_log</c> if some other process truncates or
+ reopens the log simultaneously.</p>
</note>
</description>
<datatypes>
@@ -221,11 +246,10 @@
<funcs>
<func>
<name name="accessible_logs" arity="0"/>
- <fsummary>Return the accessible disk logs on the current node.</fsummary>
+ <fsummary>Return the accessible disk logs on the current node.</fsummary>
<desc>
- <p>The <c>accessible_logs/0</c> function returns
- the names of the disk logs accessible on the current node.
- The first list contains local disk logs, and the
+ <p>Returns the names of the disk logs accessible on the current node.
+ The first list contains local disk logs and the
second list contains distributed disk logs.
</p>
</desc>
@@ -233,55 +257,55 @@
<func>
<name name="alog" arity="2"/>
<name name="balog" arity="2"/>
- <fsummary>Asynchronously log an item onto a disk log.</fsummary>
+ <fsummary>Asynchronously log an item on to a disk log.</fsummary>
<type variable="Log"/>
<type variable="Term" name_i="1"/>
<type variable="Bytes"/>
<type name="notify_ret"/>
<desc>
- <p>The <c>alog/2</c> and <c>balog/2</c> functions asynchronously
- append an item to a disk log. The function <c>alog/2</c> is
- used for internally formatted logs, and the function <c>balog/2</c>
- for externally formatted logs. <c>balog/2</c> can be used
- for internally formatted logs as well provided the binary was
- constructed with a call to <c>term_to_binary/1</c>.
+ <p>Asynchronously append an item to a disk log. <c>alog/2</c> is
+ used for internally formatted logs and <c>balog/2</c>
+ for externally formatted logs. <c>balog/2</c> can also be used
+ for internally formatted logs if the binary is
+ constructed with a call to
+ <seealso marker="erts:erlang#term_to_binary/1"><c>term_to_binary/1</c></seealso>.
</p>
- <p>The owners that subscribe to notifications will receive the
- message <c>read_only</c>, <c>blocked_log</c>
- or <c>format_external</c> in case the item cannot be written
+ <p>Owners subscribing to notifications receive
+ message <c>read_only</c>, <c>blocked_log</c>,
+ or <c>format_external</c> if the item cannot be written
on the log, and possibly one of the messages <c>wrap</c>,
- <c>full</c> and <c>error_status</c> if an item was written
- on the log. The message <c>error_status</c> is sent if there
- is something wrong with the header function or a file error
- occurred.
+ <c>full</c>, or <c>error_status</c> if an item is written
+ on the log. Message <c>error_status</c> is sent if
+ something is wrong with the header function or if a file error
+ occurs.
</p>
</desc>
</func>
<func>
<name name="alog_terms" arity="2"/>
<name name="balog_terms" arity="2"/>
- <fsummary>Asynchronously log several items onto a disk log.</fsummary>
+ <fsummary>Asynchronously log many items on to a disk log.</fsummary>
<type variable="Log"/>
<type variable="TermList" name_i="1"/>
<type variable="ByteList"/>
<type name="notify_ret"/>
<desc>
- <p>The <c>alog_terms/2</c> and <c>balog_terms/2</c> functions
- asynchronously append a list of items to a disk log.
- The function <c>alog_terms/2</c> is used for internally
- formatted logs, and the function <c>balog_terms/2</c>
- for externally formatted logs. <c>balog_terms/2</c> can be used
- for internally formatted logs as well provided the binaries were
- constructed with calls to <c>term_to_binary/1</c>.
+ <p>Asynchronously append a list of items to a disk log.
+ <c>alog_terms/2</c> is used for internally
+ formatted logs and <c>balog_terms/2</c>
+ for externally formatted logs. <c>balog_terms/2</c> can also be used
+ for internally formatted logs if the binaries are
+ constructed with calls to
+ <seealso marker="erts:erlang#term_to_binary/1"><c>term_to_binary/1</c></seealso>.
</p>
- <p>The owners that subscribe to notifications will receive the
- message <c>read_only</c>, <c>blocked_log</c>
- or <c>format_external</c> in case the items cannot be written
+ <p>Owners subscribing to notifications receive
+ message <c>read_only</c>, <c>blocked_log</c>,
+ or <c>format_external</c> if the items cannot be written
on the log, and possibly one or more of the messages <c>wrap</c>,
- <c>full</c> and <c>error_status</c> if items were written
- on the log. The message <c>error_status</c> is sent if there
- is something wrong with the header function or a file error
- occurred.
+ <c>full</c>, and <c>error_status</c> if items are written
+ on the log. Message <c>error_status</c> is sent if
+ something is wrong with the header function or if a file error
+ occurs.
</p>
</desc>
</func>
@@ -294,76 +318,75 @@
<p>With a call to <c>block/1,2</c> a process can block a log.
If the blocking process is not an owner of the log, a temporary
link is created between the disk log process and the blocking
- process. The link is used to ensure that the disk log is
- unblocked should the blocking process terminate without
+ process. The link ensures that the disk log is
+ unblocked if the blocking process terminates without
first closing or unblocking the log.
</p>
<p>Any process can probe a blocked log with <c>info/1</c> or
close it with <c>close/1</c>. The blocking process can also
- use the functions <c>chunk/2,3</c>, <c>bchunk/2,3</c>,
+ use functions <c>chunk/2,3</c>, <c>bchunk/2,3</c>,
<c>chunk_step/3</c>, and <c>unblock/1</c> without being
- affected by the block. Any other attempt than those hitherto
- mentioned to update or read a blocked log suspends the
- calling process until the log is unblocked or returns an
+ affected by the block. Any other attempt than those
+ mentioned so far to update or read a blocked log suspends the
+ calling process until the log is unblocked or returns
error message <c>{blocked_log, <anno>Log</anno>}</c>, depending on
whether the value of <c><anno>QueueLogRecords</anno></c> is <c>true</c>
- or <c>false</c>. The default value of <c><anno>QueueLogRecords</anno></c>
- is <c>true</c>, which is used by <c>block/1</c>.
+ or <c>false</c>. <c><anno>QueueLogRecords</anno></c> defaults to
+ <c>true</c>, which is used by <c>block/1</c>.
</p>
</desc>
</func>
<func>
<name name="change_header" arity="2"/>
- <fsummary>Change the head or head_func option for an owner of a disk log.</fsummary>
+ <fsummary>Change option head or head_func for an owner of a disk log.</fsummary>
<desc>
- <p>The <c>change_header/2</c> function changes the value of
- the <c>head</c> or <c>head_func</c> option of a disk log.</p>
+ <p>Changes the value of option <c>head</c> or <c>head_func</c> for an owner of a disk log.</p>
</desc>
</func>
<func>
<name name="change_notify" arity="3"/>
- <fsummary>Change the notify option for an owner of a disk log.</fsummary>
+ <fsummary>Change option notify for an owner of a disk log.</fsummary>
<desc>
- <p>The <c>change_notify/3</c> function changes the value of the
- <c>notify</c> option for an owner of a disk log. </p>
+ <p>Changes the value of option <c>notify</c> for an owner of a disk log. </p>
</desc>
</func>
<func>
<name name="change_size" arity="2"/>
<fsummary>Change the size of an open disk log.</fsummary>
<desc>
- <p>The <c>change_size/2</c> function changes the size of an open log.
- For a halt log it is always possible to increase the size,
- but it is not possible to decrease the size to something less than
- the current size of the file.
+ <p>Changes the size of an open log.
+ For a halt log, the size can always be increased,
+ but it cannot be decreased to something less than
+ the current file size.
</p>
- <p>For a wrap log it is always possible to increase both the
- size and number of files, as long as the number of files does not
+ <p>For a wrap log, both the size and the number of files can always
+ be increased, as long as the number of files does not
exceed 65000. If the maximum number of files is decreased, the
- change will not be valid until the current file is full and the
+ change is not valid until the current file is full and the
log wraps to the next file.
- The redundant files will be removed next time the log wraps around,
- i.e. starts to log to file number 1.
+ The redundant files are removed the next time the log wraps around,
+ that is, starts to log to file number 1.
</p>
<p>As an example, assume that the old maximum number of files
is 10 and that the new maximum number of files is 6. If
the current file number is not greater than the new maximum number
- of files, the files 7 to 10 will be removed when file number 6
+ of files, files 7-10 are removed when file 6
is full and the log starts to write to file number 1 again.
- Otherwise the files greater than the current
- file will be removed when the current file is full (e.g. if
- the current file is 8, the files 9 and 10); the files between
- new maximum number of files and the current
- file (i.e. files 7 and 8) will be removed next time file number 6
+ Otherwise, the files greater than the current
+ file are removed when the current file is full (for example, if
+ the current file is 8, files 9 and 10 are removed). The files between
+ the new maximum number of files and the current
+ file (that is, files 7 and 8) are removed the next time file 6
is full.
</p>
- <p>If the size of the files is decreased the change will immediately
- affect the current log. It will not of course change the
- size of log files already full until next time they are used.
+ <p>If the size of the files is decreased, the change immediately
+ affects the current log. It does not change the
+ size of log files already full until the next time they are used.
</p>
- <p>If the log size is decreased for instance to save space,
- the function <c>inc_wrap_file/1</c> can be used to force the log
- to wrap.
+ <p>If the log size is decreased, for example, to save space,
+ function
+ <seealso marker="#inc_wrap_file/1"><c>inc_wrap_file/1</c></seealso>
+ can be used to force the log to wrap.
</p>
</desc>
</func>
@@ -380,93 +403,85 @@
<type name="bchunk_ret"/>
<type name="chunk_error_rsn"/>
<desc>
- <p>The <c>chunk/2,3</c> and <c>bchunk/2,3</c> functions make
- it possible to efficiently read the terms which have been
- appended to an internally formatted log. It minimizes disk
- I/O by reading 64 kilobyte chunks from the file. The
- <c>bchunk/2,3</c> functions return the binaries read from
- the file; they do not call <c>binary_to_term</c>. Otherwise
- the work just like <c>chunk/2,3</c>.
+ <p>Efficiently reads the terms that are appended
+ to an internally formatted log. It minimizes disk
+ I/O by reading 64 kilobyte chunks from the file. Functions
+ <c>bchunk/2,3</c> return the binaries read from
+ the file, they do not call <c>binary_to_term()</c>. Apart from that,
+ they work just like <c>chunk/2,3</c>.
</p>
- <p>The first time <c>chunk</c> (or <c>bchunk</c>) is called,
+ <p>The first time <c>chunk()</c> (or <c>bchunk()</c>) is called,
an initial continuation, the atom <c>start</c>, must be
- provided. If there is a disk log process running on the
- current node, terms are read from that log, otherwise an
+ provided. If a disk log process is running on the
+ current node, terms are read from that log. Otherwise, an
individual distributed log on some other node is chosen, if
such a log exists.
</p>
<p>When <c>chunk/3</c> is called, <c><anno>N</anno></c> controls the
maximum number of terms that are read from the log in each
- chunk. Default is <c>infinity</c>, which means that all the
+ chunk. Defaults to <c>infinity</c>, which means that all the
terms contained in the 64 kilobyte chunk are read. If less than
<c><anno>N</anno></c> terms are returned, this does not necessarily mean
- that the end of the file has been reached.
+ that the end of the file is reached.
</p>
- <p>The <c>chunk</c> function returns a tuple
- <c>{<anno>Continuation2</anno>, <anno>Terms</anno>}</c>, where <c><anno>Terms</anno></c> is a list
+ <p><c>chunk()</c> returns a tuple
+ <c>{<anno>Continuation2</anno>, <anno>Terms</anno>}</c>, where
+ <c><anno>Terms</anno></c> is a list
of terms found in the log. <c><anno>Continuation2</anno></c> is yet
- another continuation which must be passed on to any
- subsequent calls to <c>chunk</c>. With a series of calls to
- <c>chunk</c> it is possible to extract all terms from a log.
+ another continuation, which must be passed on to any
+ subsequent calls to <c>chunk()</c>. With a series of calls to
+ <c>chunk()</c>, all terms from a log can be extracted.
</p>
- <p>The <c>chunk</c> function returns a tuple
- <c>{<anno>Continuation2</anno>, <anno>Terms</anno>, <anno>Badbytes</anno>}</c> if the log is opened
- in read-only mode and the read chunk is corrupt. <c><anno>Badbytes</anno></c>
- is the number of bytes in the file which were found not to be
- Erlang terms in the chunk. Note also that the log is not repaired.
+ <p><c>chunk()</c> returns a tuple
+ <c>{<anno>Continuation2</anno>, <anno>Terms</anno>, <anno>Badbytes</anno>}</c>
+ if the log is opened in read-only mode and the read chunk is corrupt.
+ <c><anno>Badbytes</anno></c> is the number of bytes in the file found not to be
+ Erlang terms in the chunk. Notice that the log is not repaired.
When trying to read chunks from a log opened in read-write mode,
- the tuple <c>{corrupt_log_file, <anno>FileName</anno>}</c> is returned if the
+ tuple <c>{corrupt_log_file, <anno>FileName</anno>}</c> is returned if the
read chunk is corrupt.
</p>
- <p><c>chunk</c> returns <c>eof</c> when the end of the log is
- reached, or <c>{error, <anno>Reason</anno>}</c> if an error occurs. Should
- a wrap log file be missing, a message is output on the error log.
+ <p><c>chunk()</c> returns <c>eof</c> when the end of the log is
+ reached, or <c>{error, <anno>Reason</anno>}</c> if an error occurs. If
+ a wrap log file is missing, a message is output on the error log.
</p>
<p>When <c>chunk/2,3</c> is used with wrap logs, the returned
- continuation may or may not be valid in the next call to
- <c>chunk</c>. This is because the log may wrap and delete
- the file into which the continuation points. To make sure
- this does not happen, the log can be blocked during the
- search.
+ continuation might not be valid in the next call to
+ <c>chunk()</c>. This is because the log can wrap and delete
+ the file into which the continuation points. To prevent this,
+ the log can be blocked during the search.
</p>
</desc>
</func>
<func>
<name name="chunk_info" arity="1"/>
- <fsummary>Return information about a chunk continuation of a disk log.</fsummary>
+ <fsummary>Return information about a chunk continuation of a disk log.</fsummary>
<desc>
- <p>The <c>chunk_info/1</c> function returns the following pair
+ <p>Returns the pair <c>{node, <anno>Node</anno>}</c>,
describing the chunk continuation returned by
- <c>chunk/2,3</c>, <c>bchunk/2,3</c>, or <c>chunk_step/3</c>:
- </p>
- <list type="bulleted">
- <item>
- <p><c>{node, <anno>Node</anno>}</c>. Terms are read from
- the disk log running on <c><anno>Node</anno></c>.</p>
- </item>
- </list>
+ <c>chunk/2,3</c>, <c>bchunk/2,3</c>, or <c>chunk_step/3</c>.</p>
+ <p>Terms are read from the disk log running on <c><anno>Node</anno></c>.</p>
</desc>
</func>
<func>
<name name="chunk_step" arity="3"/>
- <fsummary>Step forward or backward among the wrap log files of a disk log.</fsummary>
+ <fsummary>Step forward or backward among the wrap log files of a disk log.</fsummary>
<desc>
- <p>The function <c>chunk_step</c> can be used in conjunction
- with <c>chunk/2,3</c> and <c>bchunk/2,3</c> to search
- through an internally formatted wrap log. It takes as
+ <p>Can be used with <c>chunk/2,3</c> and <c>bchunk/2,3</c>
+ to search through an internally formatted wrap log. It takes as
argument a continuation as returned by <c>chunk/2,3</c>,
<c>bchunk/2,3</c>, or <c>chunk_step/3</c>, and steps forward
(or backward) <c><anno>Step</anno></c> files in the wrap log. The
- continuation returned points to the first log item in the
+ continuation returned, points to the first log item in the
new current file.
</p>
- <p>If the atom <c>start</c> is given as continuation, a disk log
+ <p>If atom <c>start</c> is specified as continuation, a disk log
to read terms from is chosen. A local or distributed disk log
on the current node is preferred to an
individual distributed log on some other node.
</p>
- <p>If the wrap log is not full because all files have not been
- used yet, <c>{error, end_of_log}</c> is returned if trying to
+ <p>If the wrap log is not full because all files are not yet
+ used, <c>{error, end_of_log}</c> is returned if trying to
step outside the log.
</p>
</desc>
@@ -476,21 +491,20 @@
<fsummary>Close a disk log.</fsummary>
<type name="close_error_rsn"/>
<desc>
- <p><marker id="close_1"></marker>The function <c>close/1</c> closes a
+ <p><marker id="close_1"></marker>Closes a
local or distributed disk log properly. An internally
formatted log must be closed before the Erlang system is
- stopped, otherwise the log is regarded as unclosed and the
- automatic repair procedure will be activated next time the
+ stopped. Otherwise, the log is regarded as unclosed and the
+ automatic repair procedure is activated next time the
log is opened.
</p>
- <p>The disk log process in not terminated as long as there are
- owners or users of the log. It should be stressed that each
- and every owner must close the log, possibly by terminating,
- and that any other process - not only the processes that have
- opened the log anonymously - can decrement the <c>users</c>
+ <p>The disk log process is not terminated as long as there are
+ owners or users of the log. All owners must close the log,
+ possibly by terminating. Also, any other process, not only the processes
+ that have opened the log anonymously, can decrement the <c>users</c>
counter by closing the log.
Attempts to close a log by a process that is
- not an owner are simply ignored if there are no users.
+ not an owner are ignored if there are no users.
</p>
<p>If the log is blocked by the closing process, the log is also
unblocked.
@@ -499,12 +513,14 @@
</func>
<func>
<name name="format_error" arity="1"/>
- <fsummary>Return an English description of a disk log error reply.</fsummary>
+ <fsummary>Return an English description of a disk log error reply.</fsummary>
<desc>
<p>Given the error returned by any function in this module,
- the function <c>format_error</c> returns a descriptive string
- of the error in English. For file errors, the function
- <c>format_error/1</c> in the <c>file</c> module is called.</p>
+ this function returns a descriptive string
+ of the error in English. For file errors, function
+ <c>format_error/1</c> in module
+ <seealso marker="file#format_error/1"><c>file</c></seealso>
+ is called.</p>
</desc>
</func>
<func>
@@ -513,16 +529,15 @@
<type name="inc_wrap_error_rsn"/>
<type name="invalid_header"/>
<desc>
- <p>The <c>inc_wrap_file/1</c> function forces the internally formatted
- disk log to start logging to the
- next log file. It can be used, for instance, in conjunction with
+ <p>Forces the internally formatted disk log to start logging to the
+ next log file. It can be used, for example, with
<c>change_size/2</c> to reduce the amount of disk space allocated
by the disk log.
</p>
- <p>The owners that subscribe to notifications will normally
- receive a <c>wrap</c> message, but in case of
- an error with a reason tag of <c>invalid_header</c> or
- <c>file_error</c> an <c>error_status</c> message will be sent.</p>
+ <p>Owners subscribing to notifications normally
+ receive a <c>wrap</c> message, but if
+ an error occurs with a reason tag of <c>invalid_header</c> or
+ <c>file_error</c>, an <c>error_status</c> message is sent.</p>
</desc>
</func>
<func>
@@ -530,132 +545,148 @@
<fsummary>Return information about a disk log.</fsummary>
<type name="dlog_info"/>
<desc>
- <p>The <c>info/1</c> function returns a list of <c>{Tag, Value}</c>
- pairs describing the log. If there is a disk log process running
- on the current node, that log is used as source of information,
- otherwise an individual distributed log on
- some other node is chosen, if such a log exists.
+ <p>Returns a list of <c>{Tag, Value}</c> pairs describing the log.
+ If a disk log process is running on the current node,
+ that log is used as source of information, otherwise an individual
+ distributed log on some other node is chosen, if such a log exists.
</p>
<p>The following pairs are returned for all logs:
</p>
- <list type="bulleted">
+ <taglist>
+ <tag><c>{name, <anno>Log</anno>}</c></tag>
<item>
- <p><c>{name, <anno>Log</anno>}</c>, where <c><anno>Log</anno></c> is the name of
- the log as given by the <c>open/1</c> option <c>name</c>.</p>
+ <p><c><anno>Log</anno></c> is the log name
+ as specified by the <c>open/1</c> option <c>name</c>.</p>
</item>
+ <tag><c>{file, <anno>File</anno>}</c></tag>
<item>
- <p><c>{file, <anno>File</anno>}</c>. For halt logs <c><anno>File</anno></c> is the
+ <p>For halt logs <c><anno>File</anno></c> is the
filename, and for wrap logs <c><anno>File</anno></c> is the base name.</p>
</item>
+ <tag><c>{type, <anno>Type</anno>}</c></tag>
<item>
- <p><c>{type, <anno>Type</anno>}</c>, where <c><anno>Type</anno></c> is the type of
- the log as given by the <c>open/1</c> option <c>type</c>.</p>
+ <p><c><anno>Type</anno></c> is the log type
+ as specified by the <c>open/1</c> option <c>type</c>.</p>
</item>
+ <tag><c>{format, <anno>Format</anno>}</c></tag>
<item>
- <p><c>{format, <anno>Format</anno>}</c>, where <c><anno>Format</anno></c> is the format
- of the log as given by the <c>open/1</c> option <c>format</c>.</p>
+ <p><c><anno>Format</anno></c> is the log format
+ as specified by the <c>open/1</c> option <c>format</c>.</p>
</item>
+ <tag><c>{size, <anno>Size</anno>}</c></tag>
<item>
- <p><c>{size, <anno>Size</anno>}</c>, where <c><anno>Size</anno></c> is the size
- of the log as given by the <c>open/1</c> option <c>size</c>,
+ <p><c><anno>Size</anno></c> is the log size
+ as specified by the <c>open/1</c> option <c>size</c>,
or the size set by <c>change_size/2</c>. The value set by
<c>change_size/2</c> is reflected immediately.</p>
</item>
+ <tag><c>{mode, <anno>Mode</anno>}</c></tag>
<item>
- <p><c>{mode, <anno>Mode</anno>}</c>, where <c><anno>Mode</anno></c> is the mode
- of the log as given by the <c>open/1</c> option <c>mode</c>.</p>
+ <p><c><anno>Mode</anno></c> is the log mode
+ as specified by the <c>open/1</c> option <c>mode</c>.</p>
</item>
+ <tag><c>{owners, [{pid(), <anno>Notify</anno>}]}</c></tag>
<item>
- <p><c>{owners, [{pid(), <anno>Notify</anno>}]}</c> where <c><anno>Notify</anno></c>
+ <p><c><anno>Notify</anno></c>
is the value set by the <c>open/1</c> option <c>notify</c>
- or the function <c>change_notify/3</c> for the owners of
+ or function <c>change_notify/3</c> for the owners of
the log.</p>
</item>
+ <tag><c>{users, <anno>Users</anno>}</c></tag>
<item>
- <p><c>{users, <anno>Users</anno>}</c> where <c><anno>Users</anno></c> is the number
+ <p><c><anno>Users</anno></c> is the number
of anonymous users of the log, see the <c>open/1</c> option
- <seealso marker="#linkto">linkto</seealso>.</p>
+ <seealso marker="#linkto"><c>linkto</c></seealso>.</p>
</item>
+ <tag><c>{status, <anno>Status</anno>}</c></tag>
<item>
- <p><c>{status, <anno>Status</anno>}</c>, where <c><anno>Status</anno></c> is <c>ok</c>
- or <c>{blocked, <anno>QueueLogRecords</anno>}</c> as set by the functions
+ <p><c><anno>Status</anno></c> is <c>ok</c>
+ or <c>{blocked, <anno>QueueLogRecords</anno>}</c> as set by functions
<c>block/1,2</c> and <c>unblock/1</c>.</p>
</item>
+ <tag><c>{node, <anno>Node</anno>}</c></tag>
<item>
- <p><c>{node, <anno>Node</anno>}</c>. The information returned by the
- current invocation of the <c>info/1</c> function has been
+ <p>The information returned by the
+ current invocation of function <c>info/1</c> is
gathered from the disk log process running on <c><anno>Node</anno></c>.</p>
</item>
+ <tag><c>{distributed, <anno>Dist</anno>}</c></tag>
<item>
- <p><c>{distributed, <anno>Dist</anno>}</c>. If the log is local on
- the current node, then <c><anno>Dist</anno></c> has the value <c>local</c>,
+ <p>If the log is local on
+ the current node, <c><anno>Dist</anno></c> has the value <c>local</c>,
otherwise all nodes where the log is distributed
are returned as a list.</p>
</item>
- </list>
+ </taglist>
<p>The following pairs are returned for all logs opened in
<c>read_write</c> mode:
</p>
- <list type="bulleted">
+ <taglist>
+ <tag><c>{head, <anno>Head</anno>}</c></tag>
<item>
- <p><c>{head, <anno>Head</anno>}</c>. Depending of the value of
- the <c>open/1</c> options <c>head</c> and <c>head_func</c>
- or set by the function <c>change_header/2</c>, the value
+ <p>Depending on the value of
+ the <c>open/1</c> options <c>head</c> and <c>head_func</c>,
+ or set by function <c>change_header/2</c>, the value
of <c><anno>Head</anno></c> is <c>none</c> (default),
- <c>{head, H}</c> (<c>head</c> option) or <c>{M,F,A}</c>
+ <c>{head, H}</c> (<c>head</c> option), or <c>{M,F,A}</c>
(<c>head_func</c> option).</p>
</item>
+ <tag><c>{no_written_items, <anno>NoWrittenItems</anno>}</c></tag>
<item>
- <p><c>{no_written_items, <anno>NoWrittenItems</anno>}</c>, where
- <c><anno>NoWrittenItems</anno></c> is the number of items
+ <p><c><anno>NoWrittenItems</anno></c> is the number of items
written to the log since the disk log process was created.</p>
</item>
- </list>
+ </taglist>
<p>The following pair is returned for halt logs opened in
<c>read_write</c> mode:
</p>
- <list type="bulleted">
+ <taglist>
+ <tag><c>{full, <anno>Full</anno>}</c></tag>
<item>
- <p><c>{full, <anno>Full</anno>}</c>, where <c><anno>Full</anno></c> is <c>true</c> or
+ <p><c><anno>Full</anno></c> is <c>true</c> or
<c>false</c> depending on whether the halt log is full or not.</p>
</item>
- </list>
+ </taglist>
<p>The following pairs are returned for wrap logs opened in
<c>read_write</c> mode:
</p>
- <list type="bulleted">
+ <taglist>
+ <tag><c>{no_current_bytes, integer() >= 0}</c></tag>
<item>
- <p><c>{no_current_bytes, integer() >= 0}</c> is the number
+ <p>The number
of bytes written to the current wrap log file.</p>
</item>
+ <tag><c>{no_current_items, integer() >= 0}</c></tag>
<item>
- <p><c>{no_current_items, integer() >= 0}</c> is the number
+ <p>The number
of items written to the current wrap log file, header
inclusive.</p>
</item>
+ <tag><c>{no_items, integer() >= 0}</c></tag>
<item>
- <p><c>{no_items, integer() >= 0}</c> is the total number
+ <p>The total number
of items in all wrap log files.</p>
</item>
+ <tag><c>{current_file, integer()}</c></tag>
<item>
- <p><c>{current_file, integer()}</c> is the ordinal for
+ <p>The ordinal for
the current wrap log file in the range <c>1..MaxNoFiles</c>,
- where <c>MaxNoFiles</c> is given by the <c>open/1</c> option
+ where <c>MaxNoFiles</c> is specified by the <c>open/1</c> option
<c>size</c> or set by <c>change_size/2</c>.</p>
</item>
+ <tag><c>{no_overflows, {<anno>SinceLogWasOpened</anno>, <anno>SinceLastInfo</anno>}}</c></tag>
<item>
- <p><c>{no_overflows, {<anno>SinceLogWasOpened</anno>, <anno>SinceLastInfo</anno>}}</c>,
- where <c><anno>SinceLogWasOpened</anno></c> (<c><anno>SinceLastInfo</anno></c>) is
- the number of times a wrap log file has been filled up and a
- new one opened or <c>inc_wrap_file/1</c> has been called since
+ <p><c><anno>SinceLogWasOpened</anno></c> (<c><anno>SinceLastInfo</anno></c>)
+ is the number of times a wrap log file has been filled up and a
+ new one is opened or <c>inc_wrap_file/1</c> has been called since
the disk log was last opened (<c>info/1</c>
was last called). The first time <c>info/2</c> is called
after a log was (re)opened or truncated, the two values
are equal.</p>
</item>
- </list>
- <p>Note that the <c>chunk/2,3</c>, <c>bchunk/2,3</c>, and
- <c>chunk_step/3</c> functions do not affect any value
+ </taglist>
+ <p>Notice that functions <c>chunk/2,3</c>, <c>bchunk/2,3</c>, and
+ <c>chunk_step/3</c> do not affect any value
returned by <c>info/1</c>.
</p>
</desc>
@@ -666,17 +697,16 @@
<fsummary>Close a disk log on one node.</fsummary>
<type name="lclose_error_rsn"/>
<desc>
- <p>The function <c>lclose/1</c> closes a local log or an
- individual distributed log on the current node.
- The function <c>lclose/2</c> closes an individual
- distributed log on the specified node if the node
- is not the current one.
- <c>lclose(<anno>Log</anno>)</c> is equivalent to
+ <p><c>lclose/1</c> closes a local log or an individual distributed
+ log on the current node.</p>
+ <p><c>lclose/2</c> closes an individual distributed log on the
+ specified node if the node is not the current one.</p>
+ <p><c>lclose(<anno>Log</anno>)</c> is equivalent to
<c>lclose(<anno>Log</anno>,&nbsp;node())</c>.
- See also <seealso marker="#close_1">close/1</seealso>.
+ See also <seealso marker="#close_1"><c>close/1</c></seealso>.
</p>
- <p>If there is no log with the given name
- on the specified node, <c>no_such_log</c> is returned.
+ <p>If no log with the specified name exist on the specified node,
+ <c>no_such_log</c> is returned.
</p>
</desc>
</func>
@@ -689,25 +719,27 @@
<type variable="Bytes"/>
<type name="log_error_rsn"/>
<desc>
- <p>The <c>log/2</c> and <c>blog/2</c> functions synchronously
- append a term to a disk log. They return <c>ok</c> or
- <c>{error, <anno>Reason</anno>}</c> when the term has been written to
- disk. If the log is distributed, <c>ok</c> is always
- returned, unless all nodes are down. Terms are written by
- means of the ordinary <c>write()</c> function of the
- operating system. Hence, there is no guarantee that the term
- has actually been written to the disk, it might linger in
- the operating system kernel for a while. To make sure the
- item is actually written to disk, the <c>sync/1</c> function
+ <p>Synchronously
+ appends a term to a disk log. Returns <c>ok</c> or
+ <c>{error, <anno>Reason</anno>}</c> when the term is written to
+ disk. If the log is distributed, <c>ok</c> is returned,
+ unless all nodes are down. Terms are written by
+ the ordinary <c>write()</c> function of the
+ operating system. Hence, it is not guaranteed that the term
+ is written to disk, it can linger in
+ the operating system kernel for a while. To ensure that the
+ item is written to disk, function
+ <seealso marker="#sync/1"><c>sync/1</c></seealso>
must be called.
</p>
- <p>The <c>log/2</c> function is used for internally formatted logs,
+ <p><c>log/2</c> is used for internally formatted logs,
and <c>blog/2</c> for externally formatted logs.
- <c>blog/2</c> can be used
- for internally formatted logs as well provided the binary was
- constructed with a call to <c>term_to_binary/1</c>.
- </p>
- <p>The owners that subscribe to notifications will be notified
+ <c>blog/2</c> can also be used
+ for internally formatted logs if the binary is
+ constructed with a call to
+ <seealso marker="erts:erlang#term_to_binary/1">
+ <c>term_to_binary/1</c></seealso>.</p>
+ <p>Owners subscribing to notifications are notified
of an error with an <c>error_status</c> message if the error
reason tag is <c>invalid_header</c> or <c>file_error</c>.
</p>
@@ -716,27 +748,27 @@
<func>
<name name="log_terms" arity="2"/>
<name name="blog_terms" arity="2"/>
- <fsummary>Log several items onto a disk log.</fsummary>
+ <fsummary>Log many items onto a disk log.</fsummary>
<type variable="Log"/>
<type variable="TermList" name_i="1"/>
<type variable="BytesList"/>
<type name="log_error_rsn"/>
<desc>
- <p>The <c>log_terms/2</c> and <c>blog_terms/2</c> functions
- synchronously append a list of items to the log. The benefit
- of using these functions rather than the <c>log/2</c> and
- <c>blog/2</c> functions is that of efficiency: the given
- list is split into as large sublists as possible (limited by
- the size of wrap log files), and each sublist is logged as
- one single item, which reduces the overhead.
+ <p>Synchronously appends a list of items to the log. It is more
+ efficient to use these functions instead of functions <c>log/2</c>
+ and <c>blog/2</c>. The specified list is split into as large
+ sublists as possible (limited by the size of wrap log files),
+ and each sublist is logged as one single item, which reduces
+ the overhead.
</p>
- <p>The <c>log_terms/2</c> function is used for internally formatted
+ <p><c>log_terms/2</c> is used for internally formatted
logs, and <c>blog_terms/2</c> for externally formatted logs.
- <c>blog_terms/2</c> can be used
- for internally formatted logs as well provided the binaries were
- constructed with calls to <c>term_to_binary/1</c>.
- </p>
- <p>The owners that subscribe to notifications will be notified
+ <c>blog_terms/2</c> can also be used
+ for internally formatted logs if the binaries are
+ constructed with calls to
+ <seealso marker="erts:erlang#term_to_binary/1">
+ <c>term_to_binary/1</c></seealso>.</p>
+ <p>Owners subscribing to notifications are notified
of an error with an <c>error_status</c> message if the error
reason tag is <c>invalid_header</c> or <c>file_error</c>.
</p>
@@ -755,110 +787,119 @@
<type name="dlog_optattr"/>
<type name="dlog_size"/>
<desc>
- <p>The <c><anno>ArgL</anno></c> parameter is a list of options which have
- the following meanings:</p>
- <list type="bulleted">
+ <p>Parameter <c><anno>ArgL</anno></c> is a list of the following
+ options:</p>
+ <taglist>
+ <tag><c>{name, <anno>Log</anno>}</c></tag>
<item>
- <p><c>{name, <anno>Log</anno>}</c> specifies the name of the log.
- This is the name which must be passed on as a parameter in
+ <p>Specifies the log name.
+ This name must be passed on as a parameter in
all subsequent logging operations. A name must always
be supplied.
</p>
</item>
+ <tag><c>{file, <anno>FileName</anno>}</c></tag>
<item>
- <p><c>{file, <anno>FileName</anno>}</c> specifies the name of the
- file which will be used for logged terms. If this value is
- omitted and the name of the log is either an atom or a string,
- the file name will default to <c>lists:concat([<anno>Log</anno>, ".LOG"])</c> for halt logs. For wrap logs, this will be
- the base name of the files. Each file in a wrap log
- will be called <c><![CDATA[<base_name>.N]]></c>, where <c>N</c> is an
- integer. Each wrap log will also have two files called
+ <p>Specifies the name of the
+ file to be used for logged terms. If this value is
+ omitted and the log name is an atom or a string,
+ the filename defaults to <c>lists:concat([<anno>Log</anno>, ".LOG"])</c>
+ for halt logs.</p>
+ <p>For wrap logs, this is the base name of the files. Each file in
+ a wrap log is called <c><![CDATA[<base_name>.N]]></c>, where <c>N</c>
+ is an integer. Each wrap log also has two files called
<c><![CDATA[<base_name>.idx]]></c> and <c><![CDATA[<base_name>.siz]]></c>.
</p>
</item>
+ <tag><c>{linkto, <anno>LinkTo</anno>}</c><marker id="linkto"></marker></tag>
<item>
- <p><c>{linkto, <anno>LinkTo</anno>}</c>. <marker id="linkto"></marker>
-If
- <c><anno>LinkTo</anno></c> is a pid, that pid becomes an owner of the
- log. If <c><anno>LinkTo</anno></c> is <c>none</c> the log records
+ <p>If <c><anno>LinkTo</anno></c> is a pid, it becomes an owner of the
+ log. If <c><anno>LinkTo</anno></c> is <c>none</c>, the log records
that it is used anonymously by some process by
incrementing the <c>users</c> counter. By default, the
- process which calls <c>open/1</c> owns the log.
+ process that calls <c>open/1</c> owns the log.
</p>
</item>
+ <tag><c>{repair, <anno>Repair</anno>}</c></tag>
<item>
- <p><c>{repair, <anno>Repair</anno>}</c>. If <c><anno>Repair</anno></c> is <c>true</c>,
- the current log file will be repaired, if needed. As the
+ <p>If <c><anno>Repair</anno></c> is <c>true</c>,
+ the current log file is repaired, if needed. As the
restoration is initiated, a message is output on the error log.
- If <c>false</c> is given,
- no automatic repair will be attempted. Instead, the
+ If <c>false</c> is specified,
+ no automatic repair is attempted. Instead, the
tuple <c>{error, {need_repair, <anno>Log</anno>}}</c> is returned if an
attempt is made to open a corrupt log file.
- If <c>truncate</c> is given, the log file will
- be truncated, creating an empty log. Default is
+ If <c>truncate</c> is specified, the log file becomes
+ truncated, creating an empty log. Defaults to
<c>true</c>, which has no effect on logs opened in
read-only mode.
</p>
</item>
+ <tag><c>{type, <anno>Type</anno>}</c></tag>
<item>
- <p><c>{type, <anno>Type</anno>}</c> is the type of the log. Default
- is <c>halt</c>.
+ <p>The log type. Defaults to <c>halt</c>.
</p>
</item>
+ <tag><c>{format, <anno>Format</anno>}</c></tag>
<item>
- <p><c>{format, <anno>Format</anno>}</c> specifies the format of the
- disk log. Default is <c>internal</c>.
+ <p>Disk log format. Defaults to <c>internal</c>.
</p>
</item>
+ <tag><c>{size, <anno>Size</anno>}</c></tag>
<item>
- <p><c>{size, <anno>Size</anno>}</c> specifies the size of the log.
- When a halt log has reached its maximum size, all attempts to
- log more items are rejected. The default size is
+ <p>Log size.</p>
+ <p>When a halt log has reached its maximum size, all attempts to
+ log more items are rejected. Defaults to
<c>infinity</c>, which for halt implies that there is no
- maximum size. For wrap logs, the <c><anno>Size</anno></c> parameter
- may be either a pair
- <c>{<anno>MaxNoBytes</anno>, <anno>MaxNoFiles</anno>}</c> or <c>infinity</c>. In the
- latter case, if the files of an already existing wrap log
+ maximum size.</p>
+ <p>For wrap logs, parameter <c><anno>Size</anno></c>
+ can be a pair
+ <c>{<anno>MaxNoBytes</anno>, <anno>MaxNoFiles</anno>}</c> or
+ <c>infinity</c>.
+ In the latter case, if the files of an existing wrap log
with the same name can be found, the size is read
- from the existing wrap log, otherwise an error is returned.
- Wrap logs write at most <c><anno>MaxNoBytes</anno></c> bytes on each file
- and use <c><anno>MaxNoFiles</anno></c> files before starting all over with
- the first wrap log file. Regardless of <c><anno>MaxNoBytes</anno></c>,
+ from the existing wrap log, otherwise an error is returned.</p>
+ <p>Wrap logs write at most <c><anno>MaxNoBytes</anno></c>
+ bytes on each file and use <c><anno>MaxNoFiles</anno></c>
+ files before starting all over with the first wrap log
+ file. Regardless of <c><anno>MaxNoBytes</anno></c>,
at least the header (if there is one) and one
- item is written on each wrap log file before
- wrapping to the next file.
- When opening an existing wrap log, it is not
- necessary to supply a value for the option <c>Size</c>, but any
- supplied value must equal the current size of the log, otherwise
- the tuple <c>{error, {size_mismatch, <anno>CurrentSize</anno>, <anno>NewSize</anno>}}</c>
- is returned.
- </p>
+ item are written on each wrap log file before
+ wrapping to the next file.</p>
+ <p>When opening an existing wrap log, it is not
+ necessary to supply a value for option <c>Size</c>, but any
+ supplied value must equal the current log size, otherwise
+ the tuple <c>{error, {size_mismatch, <anno>CurrentSize</anno>,
+ <anno>NewSize</anno>}}</c> is returned.</p>
</item>
+ <tag><c>{distributed, <anno>Nodes</anno>}</c></tag>
<item>
- <p><c>{distributed, <anno>Nodes</anno>}</c>. This option can be used for
- adding members to a distributed disk log. The
- default value is <c>[]</c>, which means that
+ <p>This option can be used for
+ adding members to a distributed disk log.
+ Defaults to <c>[]</c>, which means that
the log is local on the current node.
</p>
</item>
+ <tag><c>{notify, boolean()}</c><marker id="notify"></marker></tag>
<item>
- <marker id="notify"></marker>
- <p><c>{notify, bool()}</c>. If <c>true</c>, the owners of the
- log are notified when certain events occur in the log.
- Default is <c>false</c>. The owners are sent one of the
+ <p>If <c>true</c>, the log owners
+ are notified when certain log events occur.
+ Defaults to <c>false</c>. The owners are sent one of the
following messages when an event occurs:
</p>
- <list type="bulleted">
+ <taglist>
+ <tag><c>{disk_log, Node, Log, {wrap, NoLostItems}}</c></tag>
<item>
- <p><c>{disk_log, Node, Log, {wrap, NoLostItems}}</c> is sent when a wrap log has
+ <p>Sent when a wrap log has
filled up one of its files and a new file is
opened. <c>NoLostItems</c> is the number of
- previously logged items that have been lost when
+ previously logged items that were lost when
truncating existing files.
</p>
</item>
+ <tag><c>{disk_log, Node, Log, {truncated, NoLostItems}}</c></tag>
<item>
- <p><c>{disk_log, Node, Log, {truncated, NoLostItems}}</c> is sent when a log has been
+ <p>Sent when a log is
truncated or reopened. For halt logs <c>NoLostItems</c>
is the number of items written on the log since the
disk log process was created. For wrap logs
@@ -866,127 +907,132 @@ If
wrap log files.
</p>
</item>
+ <tag><c>{disk_log, Node, Log, {read_only, Items}}</c></tag>
<item>
- <p><c>{disk_log, Node, Log, {read_only, Items}}</c>
- is sent when an asynchronous log attempt is made to
+ <p>Sent when an asynchronous log attempt is made to
a log file opened in read-only mode.
<c>Items</c> is the items from the log attempt.
</p>
</item>
+ <tag><c>{disk_log, Node, Log, {blocked_log, Items}}</c></tag>
<item>
- <p><c>{disk_log, Node, Log, {blocked_log, Items}}</c>
- is sent when an asynchronous log attempt is made to
+ <p>Sent when an asynchronous log attempt is made to
a blocked log that does not queue log attempts.
<c>Items</c> is the items from the log attempt.
</p>
</item>
+ <tag><c>{disk_log, Node, Log, {format_external, Items}}</c></tag>
<item>
- <p><c>{disk_log, Node, Log, {format_external, Items}}</c>
- is sent when <c>alog/2</c> or <c>alog_terms/2</c> is
+ <p>Sent when function <c>alog/2</c> or <c>alog_terms/2</c> is
used for internally formatted logs. <c>Items</c> is the
items from the log attempt.
</p>
</item>
+ <tag><c>{disk_log, Node, Log, full}</c></tag>
<item>
- <p><c>{disk_log, Node, Log, full}</c> is sent when
+ <p>Sent when
an attempt to log items to a wrap log would write more
- bytes than the limit set by the <c>size</c> option.
+ bytes than the limit set by option <c>size</c>.
</p>
</item>
+ <tag><c>{disk_log, Node, Log, {error_status, Status}}</c></tag>
<item>
- <p><c>{disk_log, Node, Log, {error_status, Status}}</c>
- is sent when the error status changes. The error status
+ <p>Sent when the error status changes. The error status
is defined by the outcome of the last attempt to log
- items to a the log or to truncate the log or the last
- use of <c>sync/1</c>, <c>inc_wrap_file/1</c> or
- <c>change_size/2</c>. <c>Status</c> is one of <c>ok</c> and
- <c>{error, Error}</c>, the former being the initial value.
+ items to the log, or to truncate the log, or the last
+ use of function <c>sync/1</c>, <c>inc_wrap_file/1</c>, or
+ <c>change_size/2</c>. <c>Status</c> is either <c>ok</c> or
+ <c>{error, Error}</c>, the former is the initial value.
</p>
</item>
- </list>
+ </taglist>
</item>
+ <tag><c>{head, <anno>Head</anno>}</c></tag>
<item>
- <p><c>{head, <anno>Head</anno>}</c> specifies a header to be
+ <p>Specifies a header to be
written first on the log file. If the log is a wrap
log, the item <c><anno>Head</anno></c> is written first in each new file.
- <c><anno>Head</anno></c> should be a term if the format is
- <c>internal</c>, and a deep list of bytes (or a binary)
- otherwise. Default is <c>none</c>, which means that
+ <c><anno>Head</anno></c> is to be a term if the format is
+ <c>internal</c>, otherwise a deep list of bytes (or a binary).
+ Defaults to <c>none</c>, which means that
no header is written first on the file.
</p>
</item>
+ <tag><c>{head_func, {M,F,A}}</c></tag>
<item>
- <p><c>{head_func, {M,F,A}}</c> specifies a function
+ <p>Specifies a function
to be called each time a new log file is opened.
The call <c>M:F(A)</c> is assumed to return <c>{ok, Head}</c>.
The item <c>Head</c> is written first in each file.
- <c>Head</c> should be a term if the format is
- <c>internal</c>, and a deep list of bytes (or a binary)
- otherwise.
+ <c>Head</c> is to be a term if the format is
+ <c>internal</c>, otherwise a deep list of bytes (or a binary).
</p>
</item>
+ <tag><c>{mode, <anno>Mode</anno>}</c></tag>
<item>
- <p><c>{mode, <anno>Mode</anno>}</c> specifies if the log is to be
- opened in read-only or read-write mode. It defaults to
+ <p>Specifies if the log is to be
+ opened in read-only or read-write mode. Defaults to
<c>read_write</c>.
</p>
</item>
- </list>
- <p>The <c>open/1</c> function returns <c>{ok, <anno>Log</anno>}</c> if the
- log file was successfully opened. If the file was
- successfully repaired, the tuple <c>{repaired, <anno>Log</anno>, {recovered, <anno>Rec</anno>}, {badbytes, <anno>Bad</anno>}}</c> is returned, where
- <c><anno>Rec</anno></c> is the number of whole Erlang terms found in the
- file and <c><anno>Bad</anno></c> is the number of bytes in the file which
- were non-Erlang terms. If the <c>distributed</c> parameter
- was given, <c>open/1</c> returns a list of
+ </taglist>
+ <p><c>open/1</c> returns <c>{ok, <anno>Log</anno>}</c> if the
+ log file is successfully opened. If the file is
+ successfully repaired, the tuple <c>{repaired, <anno>Log</anno>,
+ {recovered, <anno>Rec</anno>}, {badbytes, <anno>Bad</anno>}}</c>
+ is returned, where <c><anno>Rec</anno></c> is the number of
+ whole Erlang terms found in the file and <c><anno>Bad</anno></c>
+ is the number of bytes in the file that
+ are non-Erlang terms. If the parameter <c>distributed</c>
+ is specified, <c>open/1</c> returns a list of
successful replies and a list of erroneous replies. Each
reply is tagged with the node name.
</p>
<p>When a disk log is opened in read-write mode, any existing
- log file is checked for. If there is none a new empty
+ log file is checked for. If there is none, a new empty
log is created, otherwise the existing file is opened at the
position after the last logged item, and the logging of items
- will commence from there. If the format is <c>internal</c>
+ starts from there. If the format is <c>internal</c>
and the existing file is not recognized as an internally
- formatted log, a tuple <c>{error, {not_a_log_file, <anno>FileName</anno>}}</c>
+ formatted log, a tuple
+ <c>{error, {not_a_log_file, <anno>FileName</anno>}}</c>
is returned.
</p>
- <p>The <c>open/1</c> function cannot be used for changing the
- values of options of an already open log; when there are prior
+ <p><c>open/1</c> cannot be used for changing the
+ values of options of an open log. When there are prior
owners or users of a log, all option values except <c>name</c>,
- <c>linkto</c> and <c>notify</c> are just checked against
- the values that have been supplied before as option values
- to <c>open/1</c>, <c>change_header/2</c>, <c>change_notify/3</c>
- or <c>change_size/2</c>. As a consequence,
+ <c>linkto</c>, and <c>notify</c> are only checked against
+ the values supplied before as option values
+ to function <c>open/1</c>, <c>change_header/2</c>, <c>change_notify/3</c>,
+ or <c>change_size/2</c>. Thus,
none of the options except <c>name</c> is mandatory. If some
- given value differs from the current value, a tuple
+ specified value differs from the current value, a tuple
<c>{error, {arg_mismatch, <anno>OptionName</anno>, <anno>CurrentValue</anno>, <anno>Value</anno>}}</c>
- is returned. Caution: an owner's attempt to open a log
- as owner once again is acknowledged with the return value
+ is returned.</p>
+ <note><p>If an owner attempts to open a log
+ as owner once again, it is acknowledged with the return value
<c>{ok, <anno>Log</anno>}</c>, but the state of the disk log is not
- affected in any way.
- </p>
- <p>If a log with a given name is local on some node,
+ affected.</p></note>
+ <p>If a log with a specified name is local on some node,
and one tries to open the log distributed on the same node,
- then the tuple <c>{error, {node_already_open, <anno>Log</anno>}}</c> is
+ the tuple <c>{error, {node_already_open, <anno>Log</anno>}}</c> is
returned. The same tuple is returned if the log is distributed on
some node, and one tries to open the log locally on the same node.
Opening individual distributed disk logs for the first time
adds those logs to a (possibly empty) distributed disk log.
- The option values supplied are used
- on all nodes mentioned by the <c>distributed</c> option.
+ The supplied option values are used
+ on all nodes mentioned by option <c>distributed</c>.
Individual distributed logs know nothing
about each other's option values, so each node can be
given unique option values by creating a distributed
- log with several calls to <c>open/1</c>.
+ log with many calls to <c>open/1</c>.
</p>
- <p>It is possible to open a log file more than once by giving
- different values to the option <c>name</c> or by using the
+ <p>A log file can be opened more than once by giving
+ different values to option <c>name</c> or by using the
same file when distributing a log on different nodes.
- It is up to the user of the <c>disk_log</c>
- module to ensure that no more than one
- disk log process has write access to any file, or the
- the file may be corrupted.
+ It is up to the user of module <c>disk_log</c>
+ to ensure that not more than one disk log process has write
+ access to any file, otherwise the file can be corrupted.
</p>
<p>If an attempt to open a log file for the first time fails,
the disk log process terminates with the EXIT message
@@ -999,9 +1045,9 @@ If
<name name="pid2name" arity="1"/>
<fsummary>Return the name of the disk log handled by a pid.</fsummary>
<desc>
- <p>The <c>pid2name/1</c> function returns the name of the log
+ <p>Returns the log name
given the pid of a disk log process on the current node, or
- <c>undefined</c> if the given pid is not a disk log process.
+ <c>undefined</c> if the specified pid is not a disk log process.
</p>
<p>This function is meant to be used for debugging only.
</p>
@@ -1018,25 +1064,25 @@ If
<type variable="BHead"/>
<type name="reopen_error_rsn"/>
<desc>
- <p>The <c>reopen</c> functions first rename the log file
- to <c><anno>File</anno></c> and then re-create a new log file.
- In case of a wrap log, <c><anno>File</anno></c> is used as the base name
+ <p>Renames the log file
+ to <c><anno>File</anno></c> and then recreates a new log file.
+ If a wrap log exists, <c><anno>File</anno></c> is used as the base name
of the renamed files.
By default the header given to <c>open/1</c> is written first in
- the newly opened log file, but if the <c><anno>Head</anno></c> or the
- <c><anno>BHead</anno></c> argument is given, this item is used instead.
- The header argument is used once only; next time a wrap log file
+ the newly opened log file, but if argument <c><anno>Head</anno></c> or
+ <c><anno>BHead</anno></c> is specified, this item is used instead.
+ The header argument is used only once. Next time a wrap log file
is opened, the header given to <c>open/1</c> is used.
</p>
- <p>The <c>reopen/2,3</c> functions are used for internally formatted
+ <p><c>reopen/2,3</c> are used for internally formatted
logs, and <c>breopen/3</c> for externally formatted logs.
</p>
- <p>The owners that subscribe to notifications will receive
+ <p>Owners subscribing to notifications receive
a <c>truncate</c> message.
</p>
<p>Upon failure to reopen the log, the disk log process terminates
- with the EXIT message <c>{{failed,Error},[{disk_log,Fun,Arity}]}</c>,
- and other processes that have requests queued receive the message
+ with the EXIT message <c>{{failed,Error},[{disk_log,Fun,Arity}]}</c>.
+ Other processes having requests queued receive the message
<c>{disk_log, Node, {error, disk_log_stopped}}</c>.
</p>
</desc>
@@ -1046,8 +1092,7 @@ If
<fsummary>Flush the contents of a disk log to the disk.</fsummary>
<type name="sync_error_rsn"/>
<desc>
- <p>The <c>sync/1</c> function ensures that the contents of the
- log are actually written to the disk.
+ <p>Ensures that the contents of the log are written to the disk.
This is usually a rather expensive operation.
</p>
</desc>
@@ -1062,24 +1107,24 @@ If
<type variable="BHead"/>
<type name="trunc_error_rsn"/>
<desc>
- <p>The <c>truncate</c> functions remove all items from a disk log.
- If the <c><anno>Head</anno></c> or the <c><anno>BHead</anno></c> argument is
- given, this item is written first in the newly truncated
+ <p>Removes all items from a disk log.
+ If argument <c><anno>Head</anno></c> or <c><anno>BHead</anno></c> is
+ specified, this item is written first in the newly truncated
log, otherwise the header given to <c>open/1</c> is used.
- The header argument is only used once; next time a wrap log file
+ The header argument is used only once. Next time a wrap log file
is opened, the header given to <c>open/1</c> is used.
</p>
- <p>The <c>truncate/1,2</c> functions are used for internally
+ <p><c>truncate/1,2</c> are used for internally
formatted logs, and <c>btruncate/2</c> for externally formatted
logs.
</p>
- <p>The owners that subscribe to notifications will receive
+ <p>Owners subscribing to notifications receive
a <c>truncate</c> message.
</p>
<p>If the attempt to truncate the log fails, the disk log process
terminates with the EXIT message
- <c>{{failed,Reason},[{disk_log,Fun,Arity}]}</c>, and
- other processes that have requests queued receive the message
+ <c>{{failed,Reason},[{disk_log,Fun,Arity}]}</c>.
+ Other processes having requests queued receive the message
<c>{disk_log, Node, {error, disk_log_stopped}}</c>.
</p>
</desc>
@@ -1089,7 +1134,7 @@ If
<fsummary>Unblock a disk log.</fsummary>
<type name="unblock_error_rsn"/>
<desc>
- <p>The <c>unblock/1</c> function unblocks a log.
+ <p>Unblocks a log.
A log can only be unblocked by the blocking process.
</p>
</desc>
@@ -1098,8 +1143,8 @@ If
<section>
<title>See Also</title>
- <p><seealso marker="file">file(3)</seealso>,
- <seealso marker="pg2">pg2(3)</seealso>,
- <seealso marker="wrap_log_reader">wrap_log_reader(3)</seealso></p>
+ <p><seealso marker="file"><c>file(3)</c></seealso>,
+ <seealso marker="pg2"><c>pg2(3)</c></seealso>,
+ <seealso marker="wrap_log_reader"><c>wrap_log_reader(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/erl_boot_server.xml b/lib/kernel/doc/src/erl_boot_server.xml
index a8015fa453..897365f9b9 100644
--- a/lib/kernel/doc/src/erl_boot_server.xml
+++ b/lib/kernel/doc/src/erl_boot_server.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,72 +29,73 @@
<rev></rev>
</header>
<module>erl_boot_server</module>
- <modulesummary>Boot Server for Other Erlang Machines</modulesummary>
+ <modulesummary>Boot server for other Erlang machines.</modulesummary>
<description>
- <p>This server is used to assist diskless Erlang nodes which fetch
+ <p>This server is used to assist diskless Erlang nodes that fetch
all Erlang code from another machine.</p>
<p>This server is used to fetch all code, including the start
script, if an Erlang runtime system is started with
- the <c>-loader inet</c> command line flag. All hosts specified
- with the <c>-hosts Host</c> command line flag must have one
+ command-line flag <c>-loader inet</c>. All hosts specified
+ with command-line flag <c>-hosts Host</c> must have one
instance of this server running.</p>
- <p>This server can be started with the <c>kernel</c> configuration
+ <p>This server can be started with the <c>Kernel</c> configuration
parameter <c>start_boot_server</c>.</p>
- <p>The <c>erl_boot_server</c> can both read regular files as well as
- files in archives. See <seealso marker="code">code(3)</seealso>
- and <seealso marker="erts:erl_prim_loader">erl_prim_loader(3)</seealso>.</p>
- <warning><p>The support for loading of code from archive files is
- experimental. The sole purpose of releasing it before it is ready
- is to obtain early feedback. The file format, semantics,
- interfaces etc. may be changed in a future release.</p></warning>
+ <p>The <c>erl_boot_server</c> can read regular files and
+ files in archives. See <seealso marker="code"><c>code(3)</c></seealso>
+ and
+ <seealso marker="erts:erl_prim_loader"><c>erl_prim_loader(3)</c></seealso>
+ in <c>ERTS</c>.</p>
+ <warning><p>The support for loading code from archive files is
+ experimental. It is released before it is ready
+ to obtain early feedback. The file format, semantics,
+ interfaces, and so on, can be changed in a future release.</p></warning>
</description>
<funcs>
<func>
- <name name="start" arity="1"/>
- <fsummary>Start the boot server</fsummary>
+ <name name="add_slave" arity="1"/>
+ <fsummary>Add a slave to the list of allowed slaves.</fsummary>
<desc>
- <p>Starts the boot server. <c><anno>Slaves</anno></c> is a list of IP
- addresses for hosts which are allowed to use this server as a
- boot server.</p>
+ <p>Adds a <c><anno>Slave</anno></c> node to the list of allowed slave hosts.</p>
</desc>
</func>
<func>
- <name name="start_link" arity="1"/>
- <fsummary>Start the boot server and links the caller</fsummary>
+ <name name="delete_slave" arity="1"/>
+ <fsummary>Delete a slave from the list of allowed slaves.</fsummary>
<desc>
- <p>Starts the boot server and links to the caller. This function
- is used to start the server if it is included in a supervision
- tree.</p>
+ <p>Deletes a <c><anno>Slave</anno></c> node from the list of allowed slave
+ hosts.</p>
</desc>
</func>
<func>
- <name name="add_slave" arity="1"/>
- <fsummary>Add a slave to the list of allowed slaves</fsummary>
+ <name name="start" arity="1"/>
+ <fsummary>Start the boot server.</fsummary>
<desc>
- <p>Adds a <c><anno>Slave</anno></c> node to the list of allowed slave hosts.</p>
+ <p>Starts the boot server. <c><anno>Slaves</anno></c> is a list of
+ IP addresses for hosts, which are allowed to use this server as a
+ boot server.</p>
</desc>
</func>
<func>
- <name name="delete_slave" arity="1"/>
- <fsummary>Delete a slave from the list of allowed slaves</fsummary>
+ <name name="start_link" arity="1"/>
+ <fsummary>Start the boot server and link to the the caller.</fsummary>
<desc>
- <p>Deletes a <c><anno>Slave</anno></c> node from the list of allowed slave
- hosts.</p>
+ <p>Starts the boot server and links to the caller. This function
+ is used to start the server if it is included in a supervision
+ tree.</p>
</desc>
</func>
<func>
<name name="which_slaves" arity="0"/>
- <fsummary>Return the current list of allowed slave hosts</fsummary>
+ <fsummary>Return the current list of allowed slave hosts.</fsummary>
<desc>
<p>Returns the current list of allowed slave hosts.</p>
</desc>
</func>
</funcs>
-
<section>
<title>SEE ALSO</title>
- <p><seealso marker="erts:init">init(3)</seealso>,
- <seealso marker="erts:erl_prim_loader">erl_prim_loader(3)</seealso></p>
+ <p><seealso marker="erts:init"><c>erts:init(3)</c></seealso>,
+ <seealso marker="erts:erl_prim_loader"><c>erts:erl_prim_loader(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/erl_ddll.xml b/lib/kernel/doc/src/erl_ddll.xml
index 8d71883cf4..a5ce58ef3e 100644
--- a/lib/kernel/doc/src/erl_ddll.xml
+++ b/lib/kernel/doc/src/erl_ddll.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,84 +29,91 @@
<rev></rev>
</header>
<module>erl_ddll</module>
- <modulesummary>Dynamic Driver Loader and Linker</modulesummary>
+ <modulesummary>Dynamic driver loader and linker.</modulesummary>
<description>
- <p>The <c>erl_ddll</c> module provides an interface for loading
- and unloading <em>erlang linked in drivers</em> in runtime.</p>
+ <p>This module provides an interface for loading
+ and unloading <em>Erlang linked-in drivers</em> in runtime.</p>
<note>
- <p>This is a large reference document. For casual use of the
- module, as well as for most real world applications, the
- descriptions of the functions <seealso marker="#load/2">load/2</seealso> and <seealso marker="#unload/1">unload/1</seealso> are enough to get
- going. </p>
+ <p>This is a large reference document. For casual use of this
+ module, and for most real world applications, the
+ descriptions of functions
+ <seealso marker="#load/2"><c>load/2</c></seealso> and
+ <seealso marker="#unload/1"><c>unload/1</c></seealso>
+ are enough to getting started.</p>
</note>
- <p>The driver should be provided as a dynamically linked library
- in a object code format specific for the platform in use,
- i. e. <c>.so</c> files on most Unix systems and <c>.ddl</c>
- files on windows. An erlang linked in driver has to provide
+ <p>The driver is to be provided as a dynamically linked library
+ in an object code format specific for the platform in use,
+ that is, <c>.so</c> files on most Unix systems and <c>.ddl</c>
+ files on Windows. An Erlang linked-in driver must provide
specific interfaces to the emulator, so this module is not
- designed for loading arbitrary dynamic libraries. For further
- information about erlang drivers, refer to the ERTS reference
- manual section <seealso marker="erts:erl_driver">erl_driver</seealso>.</p>
+ designed for loading arbitrary dynamic libraries. For more
+ information about Erlang drivers, see
+ <seealso marker="erts:erl_driver"><c>erts:erl_driver</c></seealso>
+ .</p>
<marker id="users"></marker>
- <p>When describing a set of functions, (i.e. a module, a part of a
- module or an application) executing in a process and wanting to
- use a ddll-driver, we use the term <em>user</em>. There can be
- several users in one process (different modules needing the same
- driver) and several processes running the same code, making up
- several <em>users</em> of a driver. In the basic scenario, each
- user loads the driver before starting to use it and unloads the
- driver when done. The reference counting keeps track of
- processes as well as the number of loads by each process, so that
- the driver will only be unloaded when no one wants it
- (it has no user). The driver also keeps track of ports that are
- opened towards it, so that one can delay unloading until all
- ports are closed or kill all ports using the driver when it is
- unloaded. </p>
+ <p>When describing a set of functions (that is, a module, a part of a
+ module, or an application), executing in a process and wanting to
+ use a ddll-driver, we use the term <em>user</em>. A process can
+ have many users (different modules needing the same
+ driver) and many processes running the same code, making up
+ many <em>users</em> of a driver.</p>
+ <p>In the basic scenario, each user loads the driver before
+ starting to use it and unloads the driver when done.
+ The reference counting keeps track of
+ processes and the number of loads by each process. This way
+ the driver is only unloaded when no one wants it (it has no user).
+ The driver also keeps track of ports that are
+ opened to it. This enables delay of unloading until all
+ ports are closed, or killing of all ports that use the driver when
+ it is unloaded.</p>
<marker id="scenarios"></marker>
<p>The interface supports two basic scenarios of loading and
unloading. Each scenario can also have the option of either
killing ports when the driver is unloading, or waiting for the
- ports to close themselves. The scenarios are:</p>
+ ports to close themselves. The scenarios are as follows:</p>
<taglist>
- <tag><em>Load and unload on a "when needed basis"</em></tag>
+ <tag><em>Load and Unload on a "When Needed Basis"</em></tag>
<item>
<p>This (most common) scenario simply supports that each
<seealso marker="#users">user</seealso> of the driver loads
- it when it is needed and unloads it when the <seealso marker="#users">user</seealso> no longer have any use for
- it. The driver is always reference counted and as long as a
+ it when needed and unloads it when no longer needed.
+ The driver is always reference counted and as long as a
process keeping the driver loaded is still alive, the driver
is present in the system.</p>
<p>Each <seealso marker="#users">user</seealso> of the driver
use <em>literally</em> the same pathname for the driver when
- demanding load, but the <seealso marker="#users">users</seealso> are not really concerned
- with if the driver is already loaded from the filesystem or
- if the object code has to be loaded from filesystem.</p>
- <p>Two pairs of functions support this scenario:</p>
+ demanding load, but the
+ <seealso marker="#users">users</seealso> are not concerned
+ with if the driver is already loaded from the file system or
+ if the object code must be loaded from file system.</p>
+ <p>The following two pairs of functions support this scenario:</p>
<taglist>
<tag><em>load/2 and unload/1</em></tag>
<item>
<p>When using the <c>load/unload</c> interfaces, the
- driver will not <em>actually</em> get unloaded until the
- <em>last port</em> using the driver is closed. The function
- <c>unload/1</c> can return immediately, as the <seealso marker="#users">users</seealso> are not really concerned
- with when the actual unloading occurs. The
- driver will actually get unloaded when no one needs it any longer.</p>
- <p>If a process having the driver loaded dies, it will have
- the same effect as if unloading was done. </p>
- <p>When loading, the function <c>load/2</c> returns
- <c>ok</c> as soon as there is any instance of the driver
- present, so that if a driver is waiting to get unloaded
- (due to open ports), it will simply change state to no
+ driver is not unloaded until the
+ <em>last port</em> using the driver is closed. Function
+ <c>unload/1</c> can return immediately, as the
+ <seealso marker="#users">users</seealso>
+ have no interrest in when the unloading occurs. The
+ driver is unloaded when no one needs it any longer.</p>
+ <p>If a process having the driver loaded dies, it has
+ the same effect as if unloading is done.</p>
+ <p>When loading, function <c>load/2</c> returns
+ <c>ok</c> when any instance of the driver is
+ present. Thus, if a driver is waiting to get unloaded
+ (because of open ports), it simply changes state to no
longer need unloading.</p>
</item>
<tag><em>load_driver/2 and unload_driver/1</em></tag>
<item>
- <p>These interfaces is intended to be used when it is considered an
- error that ports are open towards a driver that no <seealso marker="#users">user</seealso>
- has loaded. The ports still open when the
+ <p>These interfaces are intended to be used when it is considered an
+ error that ports are open to a driver that no
+ <seealso marker="#users">user</seealso>
+ has loaded. The ports that are still open when the
last <seealso marker="#users">user</seealso> calls
<c>unload_driver/1</c> or when the last process having the
- driver loaded dies, will get killed with reason
+ driver loaded dies, are killed with reason
<c>driver_unloaded</c>.</p>
<p>The function names <c>load_driver</c> and
<c>unload_driver</c> are kept for backward
@@ -114,60 +121,66 @@
</item>
</taglist>
</item>
- <tag><em>Loading and reloading for code replacement</em></tag>
+ <tag><em>Loading and Reloading for Code Replacement</em></tag>
<item>
- <p>This scenario occurs when the driver code might need
+ <p>This scenario can occur if the driver code needs
replacement during operation of the Erlang
- emulator. Implementing driver code replacement is somewhat
- more tedious than beam code replacement, as one driver
- cannot be loaded as both "old" and "new" code. All <seealso marker="#users">users</seealso> of a driver must have it
+ emulator. Implementing driver code replacement is a little
+ more tedious than Beam code replacement, as one driver
+ cannot be loaded as both "old" and "new" code. All
+ <seealso marker="#users">users</seealso> of a driver must have it
closed (no open ports) before the old code can be unloaded
and the new code can be loaded.</p>
- <p>The actual unloading/loading is done as one atomic
+ <p>The unloading/loading is done as one atomic
operation, blocking all processes in the system from using
- the driver concerned while in progress.</p>
+ the driver in question while in progress.</p>
<p>The preferred way to do driver code replacement is to let
<em>one single process</em> keep track of the driver. When
- the process start, the driver is loaded. When replacement
+ the process starts, the driver is loaded. When replacement
is required, the driver is reloaded. Unload is probably never
- done, or done when the process exits. If more than one <seealso marker="#users">user</seealso> has a driver loaded when code
- replacement is demanded, the replacement cannot occur until
- the last "other" <seealso marker="#users">user</seealso> has
+ done, or done when the process exits. If more than one
+ <seealso marker="#users">user</seealso> has a driver
+ loaded when code replacement is demanded, the replacement cannot
+ occur until the last "other"
+ <seealso marker="#users">user</seealso> has
unloaded the driver.</p>
<p>Demanding reload when a reload is already in progress is
- always an error. Using the high level functions, it is also
- an error to demand reloading when more than one <seealso marker="#users">user</seealso> has the driver loaded. To
- simplify driver replacement, avoid designing your system so
- that more than than one <seealso marker="#users">user</seealso> has the driver loaded.</p>
- <p>The two functions for reloading drivers should be used
- together with corresponding load functions, to support the two
+ always an error. Using the high-level functions, it is also
+ an error to demand reloading when more than one
+ <seealso marker="#users">user</seealso> has the driver loaded.</p>
+ <p>To simplify driver replacement, avoid designing your system so
+ that more than one
+ <seealso marker="#users">user</seealso> has the driver loaded.</p>
+ <p>The two functions for reloading drivers are to be used
+ together with corresponding load functions to support the two
different behaviors concerning open ports:</p>
<taglist>
<tag><em>load/2 and reload/2</em></tag>
<item>
- <p>This pair of functions is used when reloading should be
- done after the last open port towards the driver is
+ <p>This pair of functions is used when reloading is to be
+ done after the last open port to the driver is
closed.</p>
- <p>As <c>reload/2</c> actually waits for the reloading to
- occur, a misbehaving process keeping open ports towards
- the driver (or keeping the driver loaded) might cause
- infinite waiting for reload. Timeouts has to be provided
+ <p>As <c>reload/2</c> waits for the reloading to
+ occur, a misbehaving process keeping open ports to
+ the driver (or keeping the driver loaded) can cause
+ infinite waiting for reload. Time-outs must be provided
outside of the process demanding the reload or by using
- the low-level interface <seealso marker="#try_load/3">try_load/3</seealso> in combination
- with driver monitors (see below).</p>
+ the low-level interface
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso>
+ in combination with driver monitors.</p>
</item>
<tag><em>load_driver/2 and reload_driver/2</em></tag>
<item>
- <p>This pair of functions are used when open ports towards
- the driver should be killed with reason
+ <p>This pair of functions are used when open ports to
+ the driver are to be killed with reason
<c>driver_unloaded</c> to allow for new driver code to
get loaded.</p>
- <p>If, however, another process has the driver loaded,
- calling <c>reload_driver</c> returns the error code
+ <p>However, if another process has the driver loaded,
+ calling <c>reload_driver</c> returns error code
<c>pending_process</c>. As stated earlier,
- the recommended design is to not allow other <seealso marker="#users">users</seealso> than the "driver
- reloader" to actually demand loading of the concerned
- driver.</p>
+ the recommended design is to not allow other
+ <seealso marker="#users">users</seealso> than the "driver
+ reloader" to demand loading of the driver in question.</p>
</item>
</taglist>
</item>
@@ -184,903 +197,982 @@
<funcs>
<func>
<name name="demonitor" arity="1"/>
- <fsummary>Remove a monitor for a driver</fsummary>
+ <fsummary>Remove a monitor for a driver.</fsummary>
<desc>
<p>Removes a driver monitor in much the same way as
- <seealso marker="erts:erlang#erlang:demonitor/1">erlang:demonitor/1</seealso> does with process
- monitors. See <seealso marker="#monitor/2">monitor/2</seealso>, <seealso marker="#try_load/3">try_load/3</seealso> and <seealso marker="#try_unload/2">try_unload/2</seealso> for details
- about how to create driver monitors.</p>
+ <seealso marker="erts:erlang#erlang:demonitor/1"><c>erlang:demonitor/1</c></seealso>
+ in <c>ERTS</c>
+ does with process monitors. For details about how to create
+ driver monitors, see
+ <seealso marker="#monitor/2"><c>monitor/2</c></seealso>,
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso>, and
+ <seealso marker="#try_unload/2"><c>try_unload/2</c></seealso>.</p>
<p>The function throws a <c>badarg</c> exception if the
- parameter is not a reference(). </p>
+ parameter is not a <c>reference()</c>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="format_error" arity="1"/>
+ <fsummary>Format an error descriptor.</fsummary>
+ <desc>
+ <p>Takes an <c><anno>ErrorDesc</anno></c> returned by load, unload, or
+ reload functions and returns a string that
+ describes the error or warning.</p>
+ <note>
+ <p>Because of peculiarities in the dynamic loading interfaces on
+ different platforms, the returned string is only guaranteed
+ to describe the correct error <em>if format_error/1 is called
+ in the same instance of the Erlang virtual machine as the error
+ appeared in</em> (meaning the same operating
+ system process).</p>
+ </note>
</desc>
</func>
<func>
<name name="info" arity="0"/>
- <fsummary>Retrieve information about all drivers</fsummary>
+ <fsummary>Retrieve information about all drivers.</fsummary>
<desc>
- <p>Returns a list of tuples <c>{<anno>DriverName</anno>, <anno>InfoList</anno>}</c>, where
- <c><anno>InfoList</anno></c> is the result of calling <seealso marker="#info/1">info/1</seealso> for that
- <c><anno>DriverName</anno></c>. Only dynamically linked in drivers are
+ <p>Returns a list of tuples <c>{<anno>DriverName</anno>, <anno>InfoList</anno>}</c>,
+ where <c><anno>InfoList</anno></c> is the result of calling
+ <seealso marker="#info/1"><c>info/1</c></seealso> for that
+ <c><anno>DriverName</anno></c>. Only dynamically linked-in drivers are
included in the list.</p>
</desc>
</func>
<func>
<name name="info" arity="1"/>
- <fsummary>Retrieve information about one driver</fsummary>
+ <fsummary>Retrieve information about one driver.</fsummary>
<desc>
- <p>Returns a list of tuples <c>{<anno>Tag</anno>, <anno>Value</anno>}</c>, where
- <c><anno>Tag</anno></c> is the information item and <c><anno>Value</anno></c> is the result
- of calling <seealso marker="#info/2">info/2</seealso> with this driver name and
- this tag. The result being a tuple list containing all
- information available about a driver. </p>
- <p>The different tags that will appear in the list are:</p>
+ <p>Returns a list of tuples <c>{<anno>Tag</anno>, <anno>Value</anno>}</c>,
+ where <c><anno>Tag</anno></c> is the information item and
+ <c><anno>Value</anno></c> is the result of calling
+ <seealso marker="#info/2"><c>info/2</c></seealso> with this driver
+ name and this tag. The result is a tuple list containing all information
+ available about a driver.</p>
+ <p>The following tags appears in the list:</p>
<list type="bulleted">
- <item>processes</item>
- <item>driver_options</item>
- <item>port_count</item>
- <item>linked_in_driver</item>
- <item>permanent</item>
- <item>awaiting_load</item>
- <item>awaiting_unload</item>
+ <item><c>processes</c></item>
+ <item><c>driver_options</c></item>
+ <item><c>port_count</c></item>
+ <item><c>linked_in_driver</c></item>
+ <item><c>permanent</c></item>
+ <item><c>awaiting_load</c></item>
+ <item><c>awaiting_unload</c></item>
</list>
- <p>For a detailed description of each value, please read the
- description of <seealso marker="#info/2">info/2</seealso> below.</p>
+ <p>For a detailed description of each value, see
+ <seealso marker="#info/2"><c>info/2</c></seealso>.</p>
<p>The function throws a <c>badarg</c> exception if the driver
is not present in the system.</p>
</desc>
</func>
<func>
<name name="info" arity="2"/>
- <fsummary>Retrieve specific information about one driver</fsummary>
+ <fsummary>Retrieve specific information about one driver.</fsummary>
<desc>
- <p>This function returns specific information about one aspect
- of a driver. The <c><anno>Tag</anno></c> parameter specifies which aspect
- to get information about. The <c><anno>Value</anno></c> return differs
+ <p>Returns specific information about one aspect of a driver.
+ Parameter <c><anno>Tag</anno></c> specifies which aspect
+ to get information about. The return <c><anno>Value</anno></c> differs
between different tags:</p>
<taglist>
- <tag><em>processes</em></tag>
+ <tag><c>processes</c></tag>
<item>
- <p>Return all processes containing <seealso marker="#users">users</seealso> of the specific drivers
- as a list of tuples <c>{pid(),integer() >= 0}</c>, where the
- <c>integer()</c> denotes the number of users in the process
+ <p>Returns all processes containing
+ <seealso marker="#users">users</seealso> of the specific drivers
+ as a list of tuples <c>{pid(),integer() >= 0}</c>, where
+ <c>integer()</c> denotes the number of users in process
<c>pid()</c>.</p>
</item>
- <tag><em>driver_options</em></tag>
+ <tag><c>driver_options</c></tag>
<item>
- <p>Return a list of the driver options provided when
- loading, as well as any options set by the driver itself
- during initialization. The currently only valid option
- being <c>kill_ports</c>.</p>
+ <p>Returns a list of the driver options provided when
+ loading, and any options set by the driver
+ during initialization. The only valid option
+ is <c>kill_ports</c>.</p>
</item>
- <tag><em>port_count</em></tag>
+ <tag><c>port_count</c></tag>
<item>
- <p>Return the number of ports (an <c>integer >= 0()</c>) using the driver.</p>
+ <p>Returns the number of ports (an <c>integer() >= 0</c>)
+ using the driver.</p>
</item>
- <tag><em>linked_in_driver</em></tag>
+ <tag><c>linked_in_driver</c></tag>
<item>
- <p>Return a <c>boolean()</c>, being <c>true</c> if the driver is a
- statically linked in one and <c>false</c> otherwise.</p>
+ <p>Returns a <c>boolean()</c>, which is <c>true</c> if the driver is a
+ statically linked-in one, otherwise <c>false</c>.</p>
</item>
- <tag><em>permanent</em></tag>
+ <tag><c>permanent</c></tag>
<item>
- <p>Return a <c>boolean()</c>, being <c>true</c> if the driver has made
- itself permanent (and is <em>not</em> a statically
- linked in driver). <c>false</c> otherwise.</p>
+ <p>Returns a <c>boolean()</c>, which is <c>true</c> if the driver has
+ made itself permanent (and is <em>not</em> a statically
+ linked-in driver), otherwise <c>false</c>.</p>
</item>
- <tag><em>awaiting_load</em></tag>
+ <tag><c>awaiting_load</c></tag>
<item>
- <p>Return a list of all processes having monitors for
- <c>loading</c> active, each process returned as
- <c>{pid(),integer() >= 0}</c>, where the <c>integer()</c> is the
- number of monitors held by the process <c>pid()</c>.</p>
+ <p>Returns a list of all processes having monitors for
+ <c>loading</c> active. Each process is returned as
+ <c>{pid(),integer() >= 0}</c>, where <c>integer()</c> is the
+ number of monitors held by process <c>pid()</c>.</p>
</item>
- <tag><em>awaiting_unload</em></tag>
+ <tag><c>awaiting_unload</c></tag>
<item>
- <p>Return a list of all processes having monitors for
- <c>unloading</c> active, each process returned as
- <c>{pid(),integer() >= 0}</c>, where the <c>integer()</c> is the
- number of monitors held by the process <c>pid()</c>.</p>
+ <p>Returns a list of all processes having monitors for
+ <c>unloading</c> active. Each process is returned as
+ <c>{pid(),integer() >= 0}</c>, where <c>integer()</c> is the
+ number of monitors held by process <c>pid()</c>.</p>
</item>
</taglist>
- <p>If the options <c>linked_in_driver</c> or <c>permanent</c>
- return true, all other options will return the value
- <c>linked_in_driver</c> or <c>permanent</c> respectively.</p>
+ <p>If option <c>linked_in_driver</c> or <c>permanent</c>
+ returns <c>true</c>, all other options return
+ <c>linked_in_driver</c> or <c>permanent</c>, respectively.</p>
<p>The function throws a <c>badarg</c> exception if the driver
- is not present in the system or the tag is not supported.</p>
+ is not present in the system or if the tag is not supported.</p>
</desc>
</func>
<func>
<name name="load" arity="2"/>
- <fsummary>Load a driver</fsummary>
+ <fsummary>Load a driver.</fsummary>
<desc>
- <p>Loads and links the dynamic driver <c><anno>Name</anno></c>. <c><anno>Path</anno></c>
+ <p>Loads and links the dynamic driver <c><anno>Name</anno></c>.
+ <c><anno>Path</anno></c>
is a file path to the directory containing the driver.
<c><anno>Name</anno></c> must be a sharable object/dynamic library. Two
drivers with different <c><anno>Path</anno></c> parameters cannot be
- loaded under the same name. The <c><anno>Name</anno></c> is a string or
+ loaded under the same name. <c><anno>Name</anno></c> is a string or
atom containing at least one character.</p>
- <p>The <c><anno>Name</anno></c> given should correspond to the filename
- of the actual dynamically loadable object file residing in
- the directory given as <c><anno>Path</anno></c>, but <em>without</em> the
- extension (i.e. <c>.so</c>). The driver name provided in
+ <p>The <c><anno>Name</anno></c> specified is to correspond to the filename
+ of the dynamically loadable object file residing in
+ the directory specified as <c><anno>Path</anno></c>, but <em>without</em> the
+ extension (that is, <c>.so</c>). The driver name provided in
the driver initialization routine must correspond with the
- filename, in much the same way as erlang module names
+ filename, in much the same way as Erlang module names
correspond to the names of the <c>.beam</c> files.</p>
- <p>If the driver has been previously unloaded, but is still
- present due to open ports against it, a call to
- <c>load/2</c> will stop the unloading and keep the driver
- (as long as the <c><anno>Path</anno></c> is the same) and <c>ok</c> is
- returned. If one actually wants the object code to be
- reloaded, one uses <seealso marker="#reload/2">reload/2</seealso> or the low-level
- interface <seealso marker="#try_load/3">try_load/3</seealso>
- instead. Please refer to the description of <seealso marker="#scenarios">different scenarios</seealso> for
+ <p>If the driver was previously unloaded, but is still
+ present because of open ports to it, a call to
+ <c>load/2</c> stops the unloading and keeps the driver
+ (as long as <c><anno>Path</anno></c> is the same), and <c>ok</c> is
+ returned. If you really want the object code to be
+ reloaded, use <seealso marker="#reload/2"><c>reload/2</c></seealso>
+ or the low-level interface
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso> instead.
+ See also the description of
+ <seealso marker="#scenarios"><c>different scenarios</c></seealso> for
loading/unloading in the introduction.</p>
<p>If more than one process tries to load an already loaded
- driver withe the same <c><anno>Path</anno></c>, or if the same process
- tries to load it several times, the function will return
- <c>ok</c>. The emulator will keep track of the
+ driver with the same <c><anno>Path</anno></c>, or if the same process
+ tries to load it many times, the function returns
+ <c>ok</c>. The emulator keeps track of the
<c>load/2</c> calls, so that a corresponding number of
- <c>unload/2</c> calls will have to be done from the same
- process before the driver will actually get unloaded. It is
+ <c>unload/2</c> calls must be done from the same
+ process before the driver gets unloaded. It is
therefore safe for an application to load a driver that is
shared between processes or applications when needed. It can
safely be unloaded without causing trouble for other
- parts of the system. </p>
- <p>It is not allowed to load
- several drivers with the same name but with different
- <c>Path</c> parameters.</p>
+ parts of the system.</p>
+ <p>It is not allowed to load multiple drivers with
+ the same name but with different <c>Path</c> parameters.</p>
<note>
- <p>Note especially that the <c><anno>Path</anno></c> is interpreted
- literally, so that all loaders of the same driver needs to
- give the same <em>literal</em><c><anno>Path</anno></c> string, even
- though different paths might point out the same directory
- in the filesystem (due to use of relative paths and
+ <p><c><anno>Path</anno></c> is interpreted
+ literally, so that all loaders of the same driver must
+ specify the same <em>literal</em> <c><anno>Path</anno></c> string,
+ although different paths can point out the same directory
+ in the file system (because of use of relative paths and
links).</p>
</note>
<p>On success, the function returns <c>ok</c>. On
failure, the return value is <c>{error,<anno>ErrorDesc</anno>}</c>,
where <c><anno>ErrorDesc</anno></c> is an opaque term to be
- translated into human readable form by the <seealso marker="#format_error/1">format_error/1</seealso>
- function.</p>
- <p>For more control over the error handling, again use the
- <seealso marker="#try_load/3">try_load/3</seealso>
+ translated into human readable form by function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.</p>
+ <p>For more control over the error handling, use the
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso>
interface instead.</p>
<p>The function throws a <c>badarg</c> exception if the
- parameters are not given as described above. </p>
+ parameters are not specified as described here.</p>
</desc>
</func>
<func>
<name name="load_driver" arity="2"/>
- <fsummary>Load a driver</fsummary>
+ <fsummary>Load a driver.</fsummary>
<desc>
- <p>Works essentially as <c>load/2</c>, but will load the driver
- with other options. All ports that are using the
- driver will get killed with the reason
- <c>driver_unloaded</c> when the driver is to be unloaded.</p>
- <p>The number of loads and unloads by different <seealso marker="#users">users</seealso> influence the actual loading
- and unloading of a driver file. The port killing will
- therefore only happen when the <em>last</em> <seealso marker="#users">user</seealso> unloads the driver, or the
- last process having loaded the driver exits.</p>
+ <p>Works essentially as <c>load/2</c>, but loads the driver
+ with other options. All ports using the
+ driver are killed with reason <c>driver_unloaded</c>
+ when the driver is to be unloaded.</p>
+ <p>The number of loads and unloads by different
+ <seealso marker="#users">users</seealso> influences the loading
+ and unloading of a driver file. The port killing
+ therefore only occurs when the <em>last</em>
+ <seealso marker="#users">user</seealso> unloads the driver,
+ or when the last process having loaded the driver exits.</p>
<p>This interface (or at least the name of the functions) is
- kept for backward compatibility. Using <seealso marker="#try_load/3">try_load/3</seealso> with
- <c>{driver_options,[kill_ports]} </c> in the option list will
- give the same effect regarding the port killing.</p>
+ kept for backward compatibility.
+ Using <seealso marker="#try_load/3"><c>try_load/3</c></seealso> with
+ <c>{driver_options,[kill_ports]}</c> in the option list
+ gives the same effect regarding the port killing.</p>
<p>The function throws a <c>badarg</c> exception if the
- parameters are not given as described above. </p>
+ parameters are not specified as described here.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="loaded_drivers" arity="0"/>
+ <fsummary>List loaded drivers.</fsummary>
+ <desc>
+ <p>Returns a list of all the available drivers, both
+ (statically) linked-in and dynamically loaded ones.</p>
+ <p>The driver names are returned as a list of strings rather
+ than a list of atoms for historical reasons.</p>
+ <p>For more information about drivers, see
+ <seealso marker="#info/0"><c>info</c></seealso>.</p>
</desc>
</func>
<func>
<name name="monitor" arity="2"/>
- <fsummary>Create a monitor for a driver</fsummary>
+ <fsummary>Create a monitor for a driver.</fsummary>
<desc>
- <p>This function creates a driver monitor and works in many
- ways as the function <seealso marker="erts:erlang#erlang:monitor/2">erlang:monitor/2</seealso>,
+ <p>Creates a driver monitor and works in many
+ ways as
+ <seealso marker="erts:erlang#erlang:monitor/2"><c>erlang:monitor/2</c></seealso>
+ in <c>ERTS</c>,
does for processes. When a driver changes state, the monitor
- results in a monitor-message being sent to the calling
- process. The <c><anno>MonitorRef</anno></c> returned by this function is
+ results in a monitor message that is sent to the calling
+ process. <c><anno>MonitorRef</anno></c> returned by this function is
included in the message sent.</p>
- <p>As with process monitors, each driver monitor set will only
- generate <em>one single message</em>. The monitor is
- "destroyed" after the message is sent and there is then no
- need to call <seealso marker="#demonitor/1">demonitor/1</seealso>.</p>
- <p>The <c><anno>MonitorRef</anno></c> can also be used in subsequent calls
- to <seealso marker="#demonitor/1">demonitor/1</seealso> to
+ <p>As with process monitors, each driver monitor set only
+ generates <em>one single message</em>. The monitor is
+ "destroyed" after the message is sent, so it is then not
+ needed to call
+ <seealso marker="#demonitor/1"><c>demonitor/1</c></seealso>.</p>
+ <p><c><anno>MonitorRef</anno></c> can also be used in subsequent calls
+ to <seealso marker="#demonitor/1"><c>demonitor/1</c></seealso> to
remove a monitor.</p>
<p>The function accepts the following parameters:</p>
<taglist>
- <tag><em><c><anno>Tag</anno></c></em></tag>
+ <tag><c><anno>Tag</anno></c></tag>
<item>
- <p>The monitor tag is always <c>driver</c> as this function
+ <p>The monitor tag is always <c>driver</c>, as this function
can only be used to create driver monitors. In the future,
driver monitors will be integrated with process monitors,
- why this parameter has to be given for consistence.</p>
+ why this parameter has to be specified for consistence.</p>
</item>
- <tag><em><c><anno>Item</anno></c></em></tag>
+ <tag><c><anno>Item</anno></c></tag>
<item>
- <p>The <c><anno>Item</anno></c> parameter specifies which driver one
- wants to monitor (the name of the driver) as well as
- which state change one wants to monitor. The parameter
+ <p>Parameter <c><anno>Item</anno></c> specifies
+ which driver to monitor (the driver name) and
+ which state change to monitor. The parameter
is a tuple of arity two whose first element is the
- driver name and second element is either of:</p>
+ driver name and second element is one of the following:</p>
<taglist>
- <tag><em>loaded</em></tag>
+ <tag><c>loaded</c></tag>
<item>
- <p>Notify me when the driver is reloaded (or loaded if
+ <p>Notifies when the driver is reloaded (or loaded if
loading is underway). It only makes sense to monitor
drivers that are in the process of being loaded or
- reloaded. One cannot monitor a future-to-be driver
- name for loading, that will only result in a
- <c>'DOWN'</c> message being immediately sent.
+ reloaded. A future driver name for loading cannot be
+ monitored. That only results in a
+ <c>DOWN</c> message sent immediately.
Monitoring for loading is therefore most useful when
- triggered by the <seealso marker="#try_load/3">try_load/3</seealso> function,
+ triggered by function
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso>,
where the monitor is created <em>because</em> the
driver is in such a pending state.</p>
- <p>Setting a driver monitor for <c>loading</c> will
- eventually lead to one of the following messages
+ <p>Setting a driver monitor for <c>loading</c>
+ eventually leads to one of the following messages
being sent:</p>
<taglist>
- <tag><em>{'UP', reference(), driver, Name, loaded}</em></tag>
+ <tag><c>{'UP', reference(), driver, Name, loaded}</c></tag>
<item>
- <p>This message is sent, either immediately if the
+ <p>This message is sent either immediately if the
driver is already loaded and no reloading is
pending, or when reloading is executed if
reloading is pending. </p>
<p>The <seealso marker="#users">user</seealso> is
- expected to know if reloading is demanded prior
- to creating a monitor for loading.</p>
+ expected to know if reloading is demanded before
+ creating a monitor for loading.</p>
</item>
- <tag><em>{'UP', reference(), driver, Name, permanent}</em></tag>
+ <tag><c>{'UP', reference(), driver, Name, permanent}</c></tag>
<item>
- <p>This message will be sent if reloading was
+ <p>This message is sent if reloading was
expected, but the (old) driver made itself
- permanent prior to reloading. It will also be
+ permanent before reloading. It is also
sent if the driver was permanent or statically
- linked in when trying to create the monitor.</p>
+ linked-in when trying to create the monitor.</p>
</item>
- <tag><em>{'DOWN', reference(), driver, Name, load_cancelled}</em></tag>
+ <tag><c>{'DOWN', reference(), driver, Name, load_cancelled}</c></tag>
<item>
- <p>This message will arrive if reloading was
- underway, but the <seealso marker="#users">user</seealso> having requested
- reload cancelled it by either dying or calling
- <seealso marker="#try_unload/2">try_unload/2</seealso>
+ <p>This message arrives if reloading was
+ underway, but the requesting
+ <seealso marker="#users">user</seealso>
+ cancelled it by dying or calling
+ <seealso marker="#try_unload/2"><c>try_unload/2</c></seealso>
(or <c>unload/1</c>/<c>unload_driver/1</c>)
again before it was reloaded.</p>
</item>
- <tag><em>{'DOWN', reference(), driver, Name, {load_failure, Failure}}</em></tag>
+ <tag><c>{'DOWN', reference(), driver, Name, {load_failure, Failure}}</c></tag>
<item>
- <p>This message will arrive if reloading was
+ <p>This message arrives if reloading was
underway but the loading for some reason
failed. The <c>Failure</c> term is one of the
- errors that can be returned from <seealso marker="#try_load/3">try_load/3</seealso>. The
- error term can be passed to <seealso marker="#format_error/1">format_error/1</seealso>
- for translation into human readable form. Note
- that the translation has to be done in the same
- running erlang virtual machine as the error
+ errors that can be returned from
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso>.
+ The error term can be passed to
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>
+ for translation into human readable form. Notice
+ that the translation must be done in the same
+ running Erlang virtual machine as the error
was detected in.</p>
</item>
</taglist>
</item>
- <tag><em>unloaded</em></tag>
+ <tag><c>unloaded</c></tag>
<item>
- <p>Monitor when a driver gets unloaded. If one
+ <p>Monitors when a driver gets unloaded. If one
monitors a driver that is not present in the system,
- one will immediately get notified that the driver got
+ one immediately gets notified that the driver got
unloaded. There is no guarantee that the driver was
- actually ever loaded.</p>
- <p>A driver monitor for unload will eventually result
+ ever loaded.</p>
+ <p>A driver monitor for unload eventually results
in one of the following messages being sent:</p>
<taglist>
- <tag><em>{'DOWN', reference(), driver, Name, unloaded}</em></tag>
+ <tag><c>{'DOWN', reference(), driver, Name, unloaded}</c></tag>
<item>
- <p>The driver instance monitored is now
- unloaded. As the unload might have been due to a
- <c>reload/2</c> request, the driver might once
+ <p>The monitored driver instance is now
+ unloaded. As the unload can be a result of a
+ <c>reload/2</c> request, the driver can once
again have been loaded when this message
arrives.</p>
</item>
- <tag><em>{'UP', reference(), driver, Name, unload_cancelled}</em></tag>
+ <tag><c>{'UP', reference(), driver, Name, unload_cancelled}</c></tag>
<item>
- <p>This message will be sent if unloading was
+ <p>This message is sent if unloading was
expected, but while the driver was waiting for
- all ports to get closed, a new <seealso marker="#users">user</seealso> of the driver
- appeared and the unloading was cancelled.</p>
- <p>This message appears when an <c>{ok, pending_driver}</c>) was returned from <seealso marker="#try_unload/2">try_unload/2</seealso>)
- for the last <seealso marker="#users">user</seealso> of the driver and
- then a <c>{ok, already_loaded}</c> is returned
- from a call to <seealso marker="#try_load/3">try_load/3</seealso>.</p>
- <p>If one wants to <em>really</em> monitor when the
- driver gets unloaded, this message will distort
- the picture, no unloading was really done.
- The <c>unloaded_only</c> option creates a monitor
- similar to an <c>unloaded</c> monitor, but does
- never result in this message.</p>
+ all ports to get closed, a new
+ <seealso marker="#users">user</seealso> of the driver
+ appeared, and the unloading was cancelled.</p>
+ <p>This message appears if <c>{ok, pending_driver}</c>
+ was returned from
+ <seealso marker="#try_unload/2"><c>try_unload/2</c></seealso>
+ for the last <seealso marker="#users">user</seealso>
+ of the driver, and then <c>{ok, already_loaded}</c> is returned
+ from a call to
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso>.</p>
+ <p>If one <em>really</em> wants to monitor when the
+ driver gets unloaded, this message distorts
+ the picture, because no unloading was done.
+ Option <c>unloaded_only</c> creates a monitor
+ similar to an <c>unloaded</c> monitor, but
+ never results in this message.</p>
</item>
- <tag><em>{'UP', reference(), driver, Name, permanent}</em></tag>
+ <tag><c>{'UP', reference(), driver, Name, permanent}</c></tag>
<item>
- <p>This message will be sent if unloading was
+ <p>This message is sent if unloading was
expected, but the driver made itself
- permanent prior to unloading. It will also be
+ permanent before unloading. It is also
sent if trying to monitor a permanent or
- statically linked in driver.</p>
+ statically linked-in driver.</p>
</item>
</taglist>
</item>
- <tag><em>unloaded_only</em></tag>
+ <tag><c>unloaded_only</c></tag>
<item>
<p>A monitor created as <c>unloaded_only</c> behaves
- exactly as one created as <c>unloaded</c> with the
- exception that the <c>{'UP', reference(), driver, Name, unload_cancelled}</c> message will never be
- sent, but the monitor instead persists until the
- driver <em>really</em> gets unloaded.</p>
+ exactly as one created as <c>unloaded</c>
+ except that the
+ <c>{'UP', reference(), driver, Name, unload_cancelled}</c>
+ message is never sent, but the monitor instead persists until
+ the driver <em>really</em> gets unloaded.</p>
</item>
</taglist>
</item>
</taglist>
<p>The function throws a <c>badarg</c> exception if the
- parameters are not given as described above. </p>
+ parameters are not specified as described here.</p>
</desc>
</func>
<func>
<name name="reload" arity="2"/>
- <fsummary>Replace a driver</fsummary>
+ <fsummary>Replace a driver.</fsummary>
<desc>
<p>Reloads the driver named <c><anno>Name</anno></c> from a possibly
- different <c><anno>Path</anno></c> than was previously used. This
- function is used in the code change <seealso marker="#scenarios">scenario</seealso> described in the
+ different <c><anno>Path</anno></c> than previously used. This
+ function is used in the code change
+ <seealso marker="#scenarios"><c>scenario</c></seealso> described in the
introduction.</p>
<p>If there are other <seealso marker="#users">users</seealso>
- of this driver, the function will return <c>{error, pending_process}</c>, but if there are no more users, the
- function call will hang until all open ports are closed.</p>
+ of this driver, the function returns <c>{error, pending_process}</c>,
+ but if there are no other users, the function call hangs until all
+ open ports are closed.</p>
<note>
- <p>Avoid mixing
- several <seealso marker="#users">users</seealso>
- with driver reload requests.</p>
- </note>
- <p>If one wants to avoid hanging on open ports, one should use
- the <seealso marker="#try_load/3">try_load/3</seealso>
- function instead.</p>
- <p>The <c><anno>Name</anno></c> and <c><anno>Path</anno></c> parameters have exactly the
- same meaning as when calling the plain <seealso marker="#load/2">load/2</seealso> function.</p>
- <note>
- <p>Avoid mixing
- several <seealso marker="#users">users</seealso>
- with driver reload requests.</p>
+ <p>Avoid mixing multiple
+ <seealso marker="#users">users</seealso>
+ with driver reload requests.</p>
</note>
+ <p>To avoid hanging on open ports, use function
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso>
+ instead.</p>
+ <p>The <c><anno>Name</anno></c> and <c><anno>Path</anno></c> parameters
+ have exactly the same meaning as when calling the plain function
+ <seealso marker="#load/2"><c>load/2</c></seealso>.</p>
+
<p>On success, the function returns <c>ok</c>. On
- failure, the function returns an opaque error, with the
- exception of the <c>pending_process</c> error described
- above. The opaque errors are to be translated into human
- readable form by the <seealso marker="#format_error/1">format_error/1</seealso> function.</p>
- <p>For more control over the error handling, again use the
- <seealso marker="#try_load/3">try_load/3</seealso>
+ failure, the function returns an opaque error,
+ except the <c>pending_process</c> error described
+ earlier. The opaque errors are to be translated into human
+ readable form by function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.</p>
+ <p>For more control over the error handling, use the
+ <seealso marker="#try_load/3"><c>try_load/3</c></seealso>
interface instead.</p>
<p>The function throws a <c>badarg</c> exception if the
- parameters are not given as described above. </p>
+ parameters are not specified as described here.</p>
</desc>
</func>
<func>
<name name="reload_driver" arity="2"/>
- <fsummary>Replace a driver</fsummary>
+ <fsummary>Replace a driver.</fsummary>
<desc>
- <p>Works exactly as <seealso marker="#reload/2">reload/2</seealso>, but for drivers
- loaded with the <seealso marker="#load_driver/2">load_driver/2</seealso> interface. </p>
- <p>As this interface implies that ports are being killed when
- the last user disappears, the function wont hang waiting for
+ <p>Works exactly as <seealso marker="#reload/2"><c>reload/2</c></seealso>,
+ but for drivers loaded with the
+ <seealso marker="#load_driver/2"><c>load_driver/2</c></seealso> interface.</p>
+ <p>As this interface implies that ports are killed when
+ the last user disappears, the function does not hang waiting for
ports to get closed.</p>
- <p>For further details, see the <seealso marker="#scenarios">scenarios</seealso> in the module
- description and refer to the <seealso marker="#reload/2">reload/2</seealso> function description.</p>
+ <p>For more details, see
+ <seealso marker="#scenarios"><c>scenarios</c></seealso> in this module
+ description and the function description for
+ <seealso marker="#reload/2"><c>reload/2</c></seealso>.</p>
<p>The function throws a <c>badarg</c> exception if the
- parameters are not given as described above. </p>
+ parameters are not specified as described here.</p>
</desc>
</func>
<func>
<name name="try_load" arity="3"/>
- <fsummary>Load a driver</fsummary>
+ <fsummary>Load a driver.</fsummary>
<desc>
- <p>This function provides more control than the
+ <p>Provides more control than the
<c>load/2</c>/<c>reload/2</c> and
<c>load_driver/2</c>/<c>reload_driver/2</c> interfaces. It
- will never wait for completion of other operations related
- to the driver, but immediately return the status of the
- driver as either:</p>
+ never waits for completion of other operations related
+ to the driver, but immediately returns the status of the
+ driver as one of the following:</p>
<taglist>
- <tag><em>{ok, loaded}</em></tag>
+ <tag><c>{ok, loaded}</c></tag>
<item>
- <p>The driver was actually loaded and is immediately
- usable.</p>
+ <p>The driver was loaded and is immediately usable.</p>
</item>
- <tag><em>{ok, already_loaded}</em></tag>
+ <tag><c>{ok, already_loaded}</c></tag>
<item>
<p>The driver was already loaded by another process
- and/or is in use by a living port. The load by you is
+ or is in use by a living port, or both. The load by you is
registered and a corresponding <c>try_unload</c> is
expected sometime in the future.</p>
</item>
- <tag><em>{ok, pending_driver}</em>or <em>{ok, pending_driver, reference()}</em></tag>
+ <tag><c>{ok, pending_driver}</c>or <c>{ok, pending_driver, reference()}</c></tag>
<item>
<p>The load request is registered, but the loading is
- delayed due to the fact that an earlier instance of the
- driver is still waiting to get unloaded (there are open
- ports using it). Still, unload is expected when you are
- done with the driver. This return value will
- <em>mostly</em> happen when the
+ delayed because an earlier instance of the
+ driver is still waiting to get unloaded (open
+ ports use it). Still, unload is expected when you are
+ done with the driver. This return value
+ <em>mostly</em> occurs when options
<c>{reload,pending_driver}</c> or
- <c>{reload,pending}</c> options are used, but
- <em>can</em> happen when another <seealso marker="#users">user</seealso> is unloading a driver in
- parallel and the <c>kill_ports</c> driver option is
- set. In other words, this return value will always need
- to be handled!</p>
+ <c>{reload,pending}</c> are used, but
+ <em>can</em> occur when another
+ <seealso marker="#users">user</seealso> is unloading a
+ driver in parallel and driver option <c>kill_ports</c> is set.
+ In other words, this return value always needs
+ to be handled.</p>
</item>
- <tag><em>{ok, pending_process}</em>or <em>{ok, pending_process, reference()}</em></tag>
+ <tag><c>{ok, pending_process}</c>or <c>{ok, pending_process, reference()}</c></tag>
<item>
<p>The load request is registered, but the loading is
- delayed due to the fact that an earlier instance of the
+ delayed because an earlier instance of the
driver is still waiting to get unloaded by another
<seealso marker="#users">user</seealso> (not only by a
port, in which case <c>{ok,pending_driver}</c> would
have been returned). Still, unload is expected when you
- are done with the driver. This return value will
- <em>only</em> happen when the <c>{reload,pending}</c>
- option is used.</p>
+ are done with the driver. This return value
+ <em>only</em> occurs when option <c>{reload,pending}</c>
+ is used.</p>
</item>
</taglist>
<p>When the function returns <c>{ok, pending_driver}</c> or
- <c>{ok, pending_process}</c>, one might want to get information
- about when the driver is <em>actually</em> loaded. This can
- be achieved by using the <c>{monitor, <anno>MonitorOption</anno>}</c> option.</p>
- <p>When monitoring is requested, and a corresponding <c>{ok, pending_driver}</c> or <c>{ok, pending_process}</c> would be
- returned, the function will instead return a tuple <c>{ok, <anno>PendingStatus</anno>, reference()}</c> and the process will, at a later
- time when the driver actually gets loaded, get a monitor
- message. The monitor message one can expect is described in
- the <seealso marker="#monitor/2">monitor/2</seealso>
- function description. </p>
+ <c>{ok, pending_process}</c>, one can get information
+ about when the driver is <em>actually</em> loaded by using
+ option <c>{monitor, <anno>MonitorOption</anno>}</c>.</p>
+ <p>When monitoring is requested, and a corresponding
+ <c>{ok, pending_driver}</c> or <c>{ok, pending_process}</c> would
+ be returned, the function instead returns a tuple
+ <c>{ok, <anno>PendingStatus</anno>, reference()}</c>
+ and the process then gets a monitor message later, when the
+ driver gets loaded. The monitor message to expect is described in
+ the function description of
+ <seealso marker="#monitor/2"><c>monitor/2</c></seealso>.</p>
<note>
- <p>Note that in case of loading, monitoring can
- <em>not</em> only get triggered by using the <c>{reload, <anno>ReloadOption</anno>}</c> option, but also in special cases where
- the load-error is transient, why <c>{monitor, pending_driver}</c> should be used under basically
- <em>all</em> real world circumstances!</p>
+ <p>In case of loading, monitoring can <em>not</em> only get
+ triggered by using option <c>{reload, <anno>ReloadOption</anno>}</c>,
+ but also in special cases where the load error is transient. Thus,
+ <c>{monitor, pending_driver}</c> is to be used under basically
+ <em>all</em> real world circumstances.</p>
</note>
<p>The function accepts the following parameters:</p>
<taglist>
- <tag><em><c><anno>Path</anno></c></em></tag>
+ <tag><c><anno>Path</anno></c></tag>
<item>
- <p>The filesystem path to the directory where the driver
- object file is situated. The filename of the object file
+ <p>The file system path to the directory where the driver
+ object file is located. The filename of the object file
(minus extension) must correspond to the driver name
- (used in the name parameter) and the driver must
- identify itself with the very same name. The
- <c><anno>Path</anno></c> might be provided as an <em>iolist()</em>,
+ (used in parameter <c><anno>Name</anno></c>) and the driver must
+ identify itself with the same name.
+ <c><anno>Path</anno></c> can be provided as an <em>iolist()</em>,
meaning it can be a list of other <c>iolist()</c>s, characters
- (eight bit integers) or binaries, all to be flattened
+ (8-bit integers), or binaries, all to be flattened
into a sequence of characters.</p>
<p>The (possibly flattened) <c><anno>Path</anno></c> parameter must be
- consistent throughout the system, a driver should, by
+ consistent throughout the system. A driver is to, by
all <seealso marker="#users">users</seealso>, be loaded
- using the same <em>literal</em><c><anno>Path</anno></c>. The
- exception is when <em>reloading</em> is requested, in
- which case the <c><anno>Path</anno></c> may be specified
- differently. Note that all <seealso marker="#users">users</seealso> trying to load the
- driver at a later time will need to use the <em>new</em><c><anno>Path</anno></c> if the <c><anno>Path</anno></c> is changed using a
- <c>reload</c> option. This is yet another reason
+ using the same <em>literal</em> <c><anno>Path</anno></c>.
+ The exception is when <em>reloading</em> is requested,
+ in which case <c><anno>Path</anno></c> can be specified
+ differently. Notice that all
+ <seealso marker="#users">users</seealso> trying to load the
+ driver later need to use the
+ <em>new</em> <c><anno>Path</anno></c> if <c><anno>Path</anno></c>
+ is changed using a <c>reload</c> option. This is yet another reason
to have <em>only one loader</em> of a driver one wants to
- upgrade in a running system! </p>
+ upgrade in a running system.</p>
</item>
- <tag><em><c><anno>Name</anno></c></em></tag>
+ <tag><c><anno>Name</anno></c></tag>
<item>
- <p>The name parameter is the name of the driver to be used
- in subsequent calls to <seealso marker="erts:erlang#open_port/2">open_port</seealso>. The
- name can be specified either as an <c>iolist()</c> or
- as an <c>atom()</c>. The name given when loading is used
- to find the actual object file (with the
- help of the <c><anno>Path</anno></c> and the system implied
- extension suffix, i.e. <c>.so</c>). The name by which
- the driver identifies itself must also be consistent
- with this <c><anno>Name</anno></c> parameter, much as a beam-file's
- module name much correspond to its filename.</p>
+ <p>This parameter is the name of the driver
+ to be used in subsequent calls to function
+ <seealso marker="erts:erlang#open_port/2"><c>erlang:open_port</c></seealso>
+ in <c>ERTS</c>.
+ The name can be specified as an <c>iolist()</c> or
+ an <c>atom()</c>. The name specified when loading is used
+ to find the object file (with the help of <c><anno>Path</anno></c>
+ and the system-implied extension suffix, that is, <c>.so</c>).
+ The name by which the driver identifies itself must also be consistent
+ with this <c><anno>Name</anno></c> parameter, much as
+ the module name of a Beam file much corresponds to its filename.</p>
</item>
- <tag><em><c><anno>OptionList</anno></c></em></tag>
+ <tag><c><anno>OptionList</anno></c></tag>
<item>
- <p>A number of options can be specified to control the
- loading operation. The options are given as a list of
- two-tuples, the tuples having the following values and
+ <p>Some options can be specified to control the
+ loading operation. The options are specified as a list of
+ two-tuples. The tuples have the following values and
meanings:</p>
<taglist>
- <tag><em>{driver_options, <c><anno>DriverOptionList</anno></c>}</em></tag>
+ <tag><c>{driver_options, <anno>DriverOptionList</anno>}</c></tag>
<item>
- <p>This option is to provide options that will change
- its general behavior and will "stick" to the driver
+ <p>This is to provide options that changes
+ its general behavior and "sticks" to the driver
throughout its lifespan.</p>
- <p>The driver options for a given driver name need
- always to be consistent, <em>even when the driver is reloaded</em>, meaning that they are as much a part
- of the driver as the actual name.</p>
- <p>Currently the only allowed driver option is
+ <p>The driver options for a specified driver name need
+ always to be consistent, <em>even when the driver is reloaded</em>,
+ meaning that they are as much a part of the driver as the name.</p>
+ <p>The only allowed driver option is
<c>kill_ports</c>, which means that all ports opened
- towards the driver are killed with the exit-reason
+ to the driver are killed with exit reason
<c>driver_unloaded</c> when no process any longer
has the driver loaded. This situation arises either
- when the last <seealso marker="#users">user</seealso> calls <seealso marker="#try_unload/2">try_unload/2</seealso>, or
- the last process having loaded the driver exits.</p>
+ when the last <seealso marker="#users">user</seealso> calls
+ <seealso marker="#try_unload/2"><c>try_unload/2</c></seealso>, or
+ when the last process having loaded the driver exits.</p>
</item>
- <tag><em>{monitor, <c><anno>MonitorOption</anno></c>}</em></tag>
+ <tag><c>{monitor, <anno>MonitorOption</anno>}</c></tag>
<item>
<p>A <c><anno>MonitorOption</anno></c> tells <c>try_load/3</c> to
trigger a driver monitor under certain
conditions. When the monitor is triggered, the
- function will return a three-tuple <c>{ok, <anno>PendingStatus</anno>, reference()}</c>, where the <c>reference()</c> is
- the monitor ref for the driver monitor.</p>
- <p>Only one <c><anno>MonitorOption</anno></c> can be specified and
- it is either the atom <c>pending</c>, which means
- that a monitor should be created whenever a load
- operation is delayed, and the atom
- <c>pending_driver</c>, in which a monitor is
- created whenever the operation is delayed due to
- open ports towards an otherwise unused driver. The
- <c>pending_driver</c> option is of little use, but
- is present for completeness, it is very well defined
- which reload-options might give rise to which
- delays. It might, however, be a good idea to use the
- same <c><anno>MonitorOption</anno></c> as the <c><anno>ReloadOption</anno></c>
- if present.</p>
- <p>If reloading is not requested, it might still be
- useful to specify the <c>monitor</c> option, as
- forced unloads (<c>kill_ports</c> driver option or
- the <c>kill_ports</c> option to <seealso marker="#try_unload/2">try_unload/2</seealso>) will
- trigger a transient state where driver loading
+ function returns a three-tuple
+ <c>{ok, <anno>PendingStatus</anno>, reference()}</c>, where
+ <c>reference()</c> is the monitor reference for the driver monitor.</p>
+ <p>Only one <c><anno>MonitorOption</anno></c> can be specified.
+ It is one of the following:</p>
+ <list type="bulleted">
+ <item>
+ <p>The atom <c>pending</c>, which means
+ that a monitor is to be created whenever a load
+ operation is delayed,</p>
+ </item>
+ <item>
+ <p>The atom <c>pending_driver</c>, in which a monitor
+ is created whenever the operation is delayed because
+ of open ports to an otherwise unused driver.</p>
+ </item>
+ </list>
+ <p>Option <c>pending_driver</c> is of little use, but
+ is present for completeness, as it is well defined which
+ reload options that can give rise to which delays.
+ However, it can be a good idea to use the same
+ <c><anno>MonitorOption</anno></c> as the
+ <c><anno>ReloadOption</anno></c>, if present.</p>
+ <p>If reloading is not requested, it can still be
+ useful to specify option <c>monitor</c>, as
+ forced unloads (driver option <c>kill_ports</c> or
+ option <c>kill_ports</c> to
+ <seealso marker="#try_unload/2"><c>try_unload/2</c></seealso>)
+ trigger a transient state where driver loading
cannot be performed until all closing ports are
- actually closed. So, as <c>try_unload</c> can, in
- almost all situations, return <c>{ok, pending_driver}</c>, one should always specify at least
- <c>{monitor, pending_driver}</c> in production
- code (see the monitor discussion above). </p>
+ closed. Thus, as <c>try_unload</c> can, in
+ almost all situations, return <c>{ok, pending_driver}</c>,
+ always specify at least <c>{monitor, pending_driver}</c>
+ in production code (see the monitor discussion earlier).</p>
</item>
- <tag><em>{reload, <c><anno>ReloadOption</anno></c>}</em></tag>
+ <tag><c>{reload, <anno>ReloadOption</anno>}</c></tag>
<item>
- <p>This option is used when one wants to
+ <p>This option is used to
<em>reload</em> a driver from disk, most often in a
code upgrade scenario. Having a <c>reload</c> option
- also implies that the <c><anno>Path</anno></c> parameter need
- <em>not</em> be consistent with earlier loads of
+ also implies that parameter <c><anno>Path</anno></c> does
+ <em>not</em> need to be consistent with earlier loads of
the driver.</p>
- <p>To reload a driver, the process needs to have previously
- loaded the driver, i.e there has to be an active <seealso marker="#users">user</seealso> of the driver in the process. </p>
- <p>The <c>reload</c> option can be either the atom
- <c>pending</c>, in which reloading is requested for
- any driver and will be effectuated when <em>all</em>
- ports opened against the driver are closed. The
- replacement of the driver will in this case take
- place regardless of if there are still
- pending <seealso marker="#users">users</seealso>
- having the driver loaded!
- The option also triggers port-killing (if the
- <c>kill_ports</c> driver option is used) even though
- there are pending users, making it usable for forced
- driver replacement, but laying a lot of
- responsibility on the driver <seealso marker="#users">users</seealso>. The pending option is
- seldom used as one does not want other <seealso marker="#users">users</seealso> to have loaded the
- driver when code change is underway. </p>
- <p>The more useful option is <c>pending_driver</c>,
- which means that reloading will be queued if the
- driver is <em>not</em> loaded by any other <seealso marker="#users">users</seealso>, but the driver has
- opened ports, in which case <c>{ok, pending_driver}</c> will be returned (a
- <c>monitor</c> option is of course recommended).</p>
- <p>If the driver is unloaded (not present in the
- system), the error code
- <c>not_loaded</c> will be returned. The
- <c>reload</c> option is intended for when the user
+ <p>To reload a driver, the process must have loaded the driver
+ before, that is, there must be an active
+ <seealso marker="#users">user</seealso> of the driver
+ in the process.</p>
+ <p>The <c>reload</c> option can be either of the following:</p>
+ <taglist>
+ <tag><c>pending</c></tag>
+ <item>
+ <p>With the atom <c>pending</c>, reloading is requested
+ for any driver and is effectuated when <em>all</em>
+ ports opened to the driver are closed. The driver
+ replacement in this case takes
+ place regardless if there are still
+ pending <seealso marker="#users">users</seealso>
+ having the driver loaded.</p>
+ <p>The option also triggers port-killing (if driver
+ option <c>kill_ports</c> is used) although
+ there are pending users, making it usable for forced
+ driver replacement, but laying much
+ responsibility on the driver
+ <seealso marker="#users">users</seealso>.
+ The pending option is seldom used as one does not want other
+ <seealso marker="#users">users</seealso> to have loaded
+ the driver when code change is underway.</p></item>
+ <tag><c>pending_driver</c></tag>
+ <item>
+ <p>This option is more useful. Here, reloading is queued
+ if the driver is <em>not</em> loaded by any other
+ <seealso marker="#users">users</seealso>, but the
+ driver has opened ports, in which case
+ <c>{ok, pending_driver}</c> is returned
+ (a <c>monitor</c> option is recommended).</p></item>
+ </taglist>
+ <p>If the driver is unloaded (not present in the system),
+ error code <c>not_loaded</c> is returned. Option
+ <c>reload</c> is intended for when the user
has already loaded the driver in advance.</p>
</item>
</taglist>
</item>
</taglist>
- <p>The function might return numerous errors, of which some
- only can be returned given a certain combination of options.</p>
- <p>A number of errors are opaque and can only be interpreted by
- passing them to the <seealso marker="#format_error/1">format_error/1</seealso> function,
+ <p>The function can return numerous errors, some
+ can only be returned given a certain combination of options.</p>
+ <p>Some errors are opaque and can only be interpreted by
+ passing them to function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>,
but some can be interpreted directly:</p>
<taglist>
- <tag><em>{error,linked_in_driver}</em></tag>
+ <tag><c>{error,linked_in_driver}</c></tag>
<item>
- <p>The driver with the specified name is an erlang
- statically linked in driver, which cannot be manipulated
+ <p>The driver with the specified name is an Erlang
+ statically linked-in driver, which cannot be manipulated
with this API.</p>
</item>
- <tag><em>{error,inconsistent}</em></tag>
+ <tag><c>{error,inconsistent}</c></tag>
<item>
- <p>The driver has already been loaded with either other
- <c><anno>DriverOptionList</anno></c> or a different <em>literal</em><c>Path</c> argument.</p>
- <p>This can happen even if a <c>reload</c> option is given,
- if the <c>DriverOptionList</c> differ from the current.</p>
+ <p>The driver is already loaded with other
+ <c><anno>DriverOptionList</anno></c> or a different
+ <em>literal</em> <c>Path</c> argument.</p>
+ <p>This can occur even if a <c>reload</c> option is specified,
+ if <c>DriverOptionList</c> differs from the current.</p>
</item>
- <tag><em>{error, permanent}</em></tag>
+ <tag><c>{error, permanent}</c></tag>
<item>
<p>The driver has requested itself to be permanent, making
- it behave like an erlang linked in driver and it can no
+ it behave like an Erlang linked-in driver and can no
longer be manipulated with this API.</p>
</item>
- <tag><em>{error, pending_process}</em></tag>
+ <tag><c>{error, pending_process}</c></tag>
<item>
- <p>The driver is loaded by other <seealso marker="#users">users</seealso> when the <c>{reload, pending_driver}</c> option was given.</p>
+ <p>The driver is loaded by other
+ <seealso marker="#users">users</seealso> when
+ option <c>{reload, pending_driver}</c> was specified.</p>
</item>
- <tag><em>{error, pending_reload}</em></tag>
+ <tag><c>{error, pending_reload}</c></tag>
<item>
- <p>Driver reload is already requested by another <seealso marker="#users">user</seealso> when the <c>{reload, <anno>ReloadOption</anno>}</c> option was given.</p>
+ <p>Driver reload is already requested by another
+ <seealso marker="#users">user</seealso> when option
+ <c>{reload, <anno>ReloadOption</anno>}</c> was specified.</p>
</item>
- <tag><em>{error, not_loaded_by_this_process}</em></tag>
+ <tag><c>{error, not_loaded_by_this_process}</c></tag>
<item>
- <p>Appears when the <c>reload</c> option is given. The
- driver <c><anno>Name</anno></c> is present in the system, but there is no
- <seealso marker="#users">user</seealso> of it in this
+ <p>Appears when option <c>reload</c> is specified. The
+ driver <c><anno>Name</anno></c> is present in the system, but there
+ is no <seealso marker="#users">user</seealso> of it in this
process.</p>
</item>
- <tag><em>{error, not_loaded}</em></tag>
+ <tag><c>{error, not_loaded}</c></tag>
<item>
- <p>Appears when the <c>reload</c> option is given. The
+ <p>Appears when option <c>reload</c> is specified. The
driver <c><anno>Name</anno></c> is not in the system. Only drivers
loaded by this process can be reloaded.</p>
</item>
</taglist>
- <p>All other error codes are to be translated by the <seealso marker="#format_error/1">format_error/1</seealso>
- function. Note that calls to <c>format_error</c> should be
- performed from the same running instance of the erlang
- virtual machine as the error was detected in, due to system
- dependent behavior concerning error values.</p>
- <p>If the arguments or options are malformed, the function will
- throw a <c>badarg</c> exception.</p>
+ <p>All other error codes are to be translated by function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.
+ Notice that calls to <c>format_error</c> are to be
+ performed from the same running instance of the Erlang
+ virtual machine as the error is detected in, because of
+ system-dependent behavior concerning error values.</p>
+ <p>If the arguments or options are malformed, the function
+ throws a <c>badarg</c> exception.</p>
</desc>
</func>
<func>
<name name="try_unload" arity="2"/>
- <fsummary>Unload a driver</fsummary>
+ <fsummary>Unload a driver.</fsummary>
<desc>
- <p>This is the low level function to unload (or decrement
+ <p>This is the low-level function to unload (or decrement
reference counts of) a driver. It can be used to force port
killing, in much the same way as the driver option
- <c>kill_ports</c> implicitly does, and it can trigger a
- monitor either due to other <seealso marker="#users">users</seealso> still having the driver
- loaded or that there are open ports using the driver.</p>
+ <c>kill_ports</c> implicitly does. Also, it can trigger a
+ monitor either because other
+ <seealso marker="#users">users</seealso> still have the driver
+ loaded or because open ports use the driver.</p>
<p>Unloading can be described as the process of telling the
emulator that this particular part of the code in this
- particular process (i.e. this <seealso marker="#users">user</seealso>) no longer needs the
- driver. That can, if there are no other users, trigger
- actual unloading of the driver, in which case the driver
- name disappears from the system and (if possible) the memory
- occupied by the driver executable code is reclaimed. If the
- driver has the <c>kill_ports</c> option set, or if
- <c>kill_ports</c> was specified as an option to this
- function, all pending ports using this driver will get
- killed when unloading is done by the last <seealso marker="#users">user</seealso>. If no port-killing is
- involved and there are open ports, the actual unloading
- is delayed until there are no more open ports using the
- driver. If, in this case, another <seealso marker="#users">user</seealso> (or even this user) loads the
- driver again before the driver is actually unloaded, the
- unloading will never take place.</p>
- <p>To allow the <seealso marker="#users">user</seealso> that
- <em>requests unloading</em> to wait for <em>actual unloading</em> to
- take place, <c>monitor</c> triggers can be specified in much
- the same way as when loading. As <seealso marker="#users">users</seealso> of this function however
- seldom are interested in more than decrementing the
- reference counts, monitoring is more seldom needed. If the
- <c>kill_ports</c> option is used however, monitor trigging is
- crucial, as the ports are not guaranteed to have been killed
- until the driver is unloaded, why a monitor should be
- triggered for at least the <c>pending_driver</c> case.</p>
- <p>The possible monitor messages that can be expected are the
- same as when using the <c>unloaded</c> option to the
- <seealso marker="#monitor/2">monitor/2</seealso> function.</p>
- <p>The function will return one of the following statuses upon
+ particular process (that is, this
+ <seealso marker="#users">user</seealso>) no longer needs
+ the driver. That can, if there are no other users, trigger
+ unloading of the driver, in which case the driver name
+ disappears from the system and (if possible) the memory
+ occupied by the driver executable code is reclaimed.</p>
+ <p>If the driver has option <c>kill_ports</c> set, or if
+ <c>kill_ports</c> is specified as an option to this
+ function, all pending ports using this driver are
+ killed when unloading is done by the last
+ <seealso marker="#users">user</seealso>. If no port-killing
+ is involved and there are open ports, the unloading
+ is delayed until no more open ports use the
+ driver. If, in this case, another
+ <seealso marker="#users">user</seealso> (or even this user)
+ loads the driver again before the driver is unloaded, the
+ unloading never takes place.</p>
+ <p>To allow the <seealso marker="#users">user</seealso> to
+ <em>request unloading</em> to wait for <em>actual unloading</em>,
+ <c>monitor</c> triggers can be specified in much the same way as
+ when loading. However, as <seealso marker="#users">users</seealso>
+ of this function seldom are interested in more than decrementing the
+ reference counts, monitoring is seldom needed.</p>
+ <note><p> If option <c>kill_ports</c> is used, monitor trigging is crucial,
+ as the ports are not guaranteed to be killed until the driver is unloaded.
+ Thus, a monitor must be triggered for at least the <c>pending_driver</c>
+ case.</p></note>
+ <p>The possible monitor messages to expect are the
+ same as when using option <c>unloaded</c> to function
+ <seealso marker="#monitor/2"><c>monitor/2</c></seealso>.</p>
+ <p>The function returns one of the following statuses upon
success:</p>
<taglist>
- <tag><em>{ok, unloaded}</em></tag>
+ <tag><c>{ok, unloaded}</c></tag>
<item>
<p>The driver was immediately unloaded, meaning that the
driver name is now free to use by other drivers and, if
the underlying OS permits it, the memory occupied by the
driver object code is now reclaimed.</p>
<p>The driver can only be unloaded when there are no open
- ports using it and there are no more <seealso marker="#users">users</seealso> requiring it to be
+ ports using it and no more
+ <seealso marker="#users">users</seealso> require it to be
loaded.</p>
</item>
- <tag><em>{ok, pending_driver}</em>or <em>{ok, pending_driver, reference()}</em></tag>
+ <tag><c>{ok, pending_driver}</c>or
+ <c>{ok, pending_driver, reference()}</c></tag>
<item>
- <p>This return value indicates that this call removed the
- last <seealso marker="#users">user</seealso> from the
+ <p>Indicates that this call removed the last
+ <seealso marker="#users">user</seealso> from the
driver, but there are still open ports using it.
- When all ports are closed and no new <seealso marker="#users">users</seealso> have arrived, the driver
- will actually be reloaded and the name and memory
+ When all ports are closed and no new
+ <seealso marker="#users">users</seealso> have arrived,
+ the driver is reloaded and the name and memory
reclaimed.</p>
- <p>This return value is valid even when the option
- <c>kill_ports</c> was used, as killing ports may not be
- a process that completes immediately. The condition is,
- in that case, however transient. Monitors are as always
- useful to detect when the driver is really unloaded.</p>
+ <p>This return value is valid even if option <c>kill_ports</c>
+ was used, as killing ports can be a process that does not
+ complete immediately. However, the condition is in that case
+ transient. Monitors are always useful to detect when the driver
+ is really unloaded.</p>
</item>
- <tag><em>{ok, pending_process}</em>or <em>{ok, pending_process, reference()}</em></tag>
+ <tag><c>{ok, pending_process}</c>or
+ <c>{ok, pending_process, reference()}</c></tag>
<item>
- <p>The unload request is registered, but there are still
- other <seealso marker="#users">users</seealso> holding
- the driver. Note that the term <c>pending_process</c>
- might refer to the running process, there might be more
+ <p>The unload request is registered, but
+ other <seealso marker="#users">users</seealso> still hold
+ the driver. Notice that the term <c>pending_process</c>
+ can refer to the running process; there can be more
than one <seealso marker="#users">user</seealso> in the
same process.</p>
- <p>This is a normal, healthy return value if the call was
+ <p>This is a normal, healthy, return value if the call was
just placed to inform the emulator that you have no
- further use of the driver. It is actually the most
- common return value in the most common <seealso marker="#scenarios">scenario</seealso>
+ further use of the driver. It is the most
+ common return value in the most common
+ <seealso marker="#scenarios"><c>scenario</c></seealso>
described in the introduction.</p>
</item>
</taglist>
<p>The function accepts the following parameters:</p>
<taglist>
- <tag><em><c><anno>Name</anno></c></em></tag>
+ <tag><c><anno>Name</anno></c></tag>
<item>
- <p>The name parameter is the name of the driver to be
- unloaded. The name can be specified either as an
- <c>iolist()</c> or as an <c>atom()</c>. </p>
+ <p><c><anno>Name</anno></c> is the name of the
+ driver to be unloaded. The name can be specified as an
+ <c>iolist()</c> or as an <c>atom()</c>.</p>
</item>
- <tag><em><c><anno>OptionList</anno></c></em></tag>
+ <tag><c><anno>OptionList</anno></c></tag>
<item>
- <p>The <c><anno>OptionList</anno></c> argument can be used to specify
- certain behavior regarding ports as well as triggering
+ <p>Argument <c><anno>OptionList</anno></c> can be used to specify
+ certain behavior regarding ports and triggering
monitors under certain conditions:</p>
<taglist>
- <tag><em>kill_ports</em></tag>
+ <tag><c>kill_ports</c></tag>
<item>
- <p>Force killing of all ports opened using this driver,
- with the exit reason <c>driver_unloaded</c>, if you are
- the <em>last</em><seealso marker="#users">user</seealso> of the driver.</p>
- <p>If there are other <seealso marker="#users">users</seealso> having the driver
- loaded, this option will have no effect.</p>
- <p>If one wants the consistent behavior of killing ports
+ <p>Forces killing of all ports opened using this driver,
+ with exit reason <c>driver_unloaded</c>, if you are
+ the <em>last</em> <seealso marker="#users">user</seealso>
+ of the driver.</p>
+ <p>If other <seealso marker="#users">users</seealso>
+ have the driver loaded, this option has no effect.</p>
+ <p>To get the consistent behavior of killing ports
when the last <seealso marker="#users">user</seealso>
- unloads, one should use the driver option
+ unloads, use driver option
<c>kill_ports</c> when loading the driver instead.</p>
</item>
- <tag><em>{monitor, <c><anno>MonitorOption</anno></c>}</em></tag>
+ <tag><c>{monitor, <anno>MonitorOption</anno>}</c></tag>
<item>
- <p>This option creates a driver monitor if the condition
- given in <c><anno>MonitorOption</anno></c> is true. The valid
+ <p>Creates a driver monitor if the condition
+ specified in <c><anno>MonitorOption</anno></c> is true. The valid
options are:</p>
<taglist>
- <tag><em>pending_driver</em></tag>
+ <tag><c>pending_driver</c></tag>
<item>
- <p>Create a driver monitor if the return value is to
+ <p>Creates a driver monitor if the return value is to
be <c>{ok, pending_driver}</c>.</p>
</item>
- <tag><em>pending</em></tag>
+ <tag><c>pending</c></tag>
<item>
- <p>Create a monitor if the return value will be either
+ <p>Creates a monitor if the return value is
<c>{ok, pending_driver}</c> or <c>{ok, pending_process}</c>.</p>
</item>
</taglist>
- <p>The <c>pending_driver</c> <c><anno>MonitorOption</anno></c> is by far
- the most useful and it has to be used to ensure that the
- driver has really been unloaded and the ports closed
- whenever the <c>kill_ports</c> option is used or the
- driver may have been loaded with the <c>kill_ports</c>
- driver option.</p>
- <p>By using the monitor-triggers in the call to
- <c>try_unload</c> one can be sure that the monitor is
- actually added before the unloading is executed, meaning
- that the monitor will always get properly triggered,
- which would not be the case if one called
- <c>erl_ddll:monitor/2</c> separately.</p>
+ <p>The <c>pending_driver</c> <c><anno>MonitorOption</anno></c> is
+ by far the most useful. It must be used to ensure that the
+ driver really is unloaded and the ports closed
+ whenever option <c>kill_ports</c> is used, or the
+ driver can have been loaded with driver option
+ <c>kill_ports</c>.</p>
+ <p>Using the monitor triggers in the call to
+ <c>try_unload</c> ensures that the monitor is
+ added before the unloading is executed, meaning
+ that the monitor is always properly triggered,
+ which is not the case if <c>monitor/2</c> is called
+ separately.</p>
</item>
</taglist>
</item>
</taglist>
- <p>The function may return several error conditions, of which
- all are well specified (no opaque values):</p>
+ <p>The function can return the following error conditions,
+ all well specified (no opaque values):</p>
<taglist>
- <tag><em>{error, linked_in_driver}</em></tag>
+ <tag><c>{error, linked_in_driver}</c></tag>
<item>
- <p>You were trying to unload an erlang statically linked in
+ <p>You were trying to unload an Erlang statically linked-in
driver, which cannot be manipulated with this interface
(and cannot be unloaded at all).</p>
</item>
- <tag><em>{error, not_loaded}</em></tag>
+ <tag><c>{error, not_loaded}</c></tag>
<item>
<p>The driver <c><anno>Name</anno></c> is not present in the system.</p>
</item>
- <tag><em>{error, not_loaded_by_this_process}</em></tag>
+ <tag><c>{error, not_loaded_by_this_process}</c></tag>
<item>
<p>The driver <c><anno>Name</anno></c> is present in the system, but
there is no <seealso marker="#users">user</seealso> of
it in this process. </p>
<p>As a special case, drivers can be unloaded from
- processes that has done no corresponding call to
- <c>try_load/3</c> if, and only if, there are <em>no users of the driver at all</em>, which may happen if the
+ processes that have done no corresponding call to
+ <c>try_load/3</c> if, and only if, there are
+ <em>no users of the driver at all</em>, which can occur if the
process containing the last user dies.</p>
</item>
- <tag><em>{error, permanent}</em></tag>
+ <tag><c>{error, permanent}</c></tag>
<item>
<p>The driver has made itself permanent, in which case it
can no longer be manipulated by this interface (much
- like a statically linked in driver).</p>
+ like a statically linked-in driver).</p>
</item>
</taglist>
<p>The function throws a <c>badarg</c> exception if the
- parameters are not given as described above. </p>
+ parameters are not specified as described here.</p>
</desc>
</func>
<func>
<name name="unload" arity="1"/>
- <fsummary>Unload a driver</fsummary>
+ <fsummary>Unload a driver.</fsummary>
<desc>
<p>Unloads, or at least dereferences the driver named
- <c><anno>Name</anno></c>. If the caller is the last <seealso marker="#users">user</seealso> of the driver, and there
- are no more open ports using the driver, the driver will
- actually get unloaded. In all other cases, actual unloading
- will be delayed until all ports are closed and there are no
- remaining <seealso marker="#users">users</seealso>.</p>
- <p>If there are other <seealso marker="#users">users</seealso> of the driver, the reference
- counts of the driver is merely decreased, so that the caller
- is no longer considered a user of the driver. For usage
- scenarios, see the <seealso marker="#scenarios">description</seealso> in the beginning
- of this document. </p>
+ <c><anno>Name</anno></c>. If the caller is the last
+ <seealso marker="#users">user</seealso> of the driver,
+ and no more open ports use the driver, the driver
+ gets unloaded. Otherwise, unloading
+ is delayed until all ports are closed and no
+ <seealso marker="#users">users</seealso> remain.</p>
+ <p>If there are other <seealso marker="#users">users</seealso>
+ of the driver, the reference counts of the driver is merely decreased,
+ so that the caller is no longer considered a
+ <seealso marker="#users">user</seealso> of the driver. For use
+ scenarios, see the <seealso marker="#scenarios"><c>description</c></seealso>
+ in the beginning of this module.</p>
<p>The <c><anno>ErrorDesc</anno></c> returned is an opaque value to be
- passed further on to the <seealso marker="#format_error/1">format_error/1</seealso>
- function. For more control over the operation, use the
- <seealso marker="#try_unload/2">try_unload/2</seealso>
+ passed further on to function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.
+ For more control over the operation, use the
+ <seealso marker="#try_unload/2"><c>try_unload/2</c></seealso>
interface.</p>
<p>The function throws a <c>badarg</c> exception if the
- parameters are not given as described above. </p>
+ parameters are not specified as described here.</p>
</desc>
</func>
<func>
<name name="unload_driver" arity="1"/>
- <fsummary>Unload a driver</fsummary>
+ <fsummary>Unload a driver.</fsummary>
<desc>
<p>Unloads, or at least dereferences the driver named
- <c><anno>Name</anno></c>. If the caller is the last <seealso marker="#users">user</seealso> of the driver, all
- remaining open ports using the driver will get killed with
- the reason <c>driver_unloaded</c> and the driver will
- eventually get unloaded.</p>
+ <c><anno>Name</anno></c>. If the caller is the last
+ <seealso marker="#users">user</seealso> of the driver, all
+ remaining open ports using the driver are killed with
+ reason <c>driver_unloaded</c> and the driver
+ eventually gets unloaded.</p>
<p>If there are other <seealso marker="#users">users</seealso>
of the driver, the reference counts of the driver is merely
decreased, so that the caller is no longer considered a
<seealso marker="#users">user</seealso>. For
- usage scenarios, see the <seealso marker="#scenarios">description</seealso> in the beginning
- of this document.</p>
+ use scenarios, see the
+ <seealso marker="#scenarios"><c>description</c></seealso> in the
+ beginning of this module.</p>
<p>The <c><anno>ErrorDesc</anno></c> returned is an opaque value to be
- passed further on to the <seealso marker="#format_error/1">format_error/1</seealso>
- function. For more control over the operation, use the
- <seealso marker="#try_unload/2">try_unload/2</seealso>
+ passed further on to function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.
+ For more control over the operation, use the
+ <seealso marker="#try_unload/2"><c>try_unload/2</c></seealso>
interface.</p>
<p>The function throws a <c>badarg</c> exception if the
- parameters are not given as described above. </p>
- </desc>
- </func>
- <func>
- <name name="loaded_drivers" arity="0"/>
- <fsummary>List loaded drivers</fsummary>
- <desc>
- <p>Returns a list of all the available drivers, both
- (statically) linked-in and dynamically loaded ones.</p>
- <p>The driver names are returned as a list of strings rather
- than a list of atoms for historical reasons.</p>
- <p>More information about drivers can be obtained using one of
- the <seealso marker="#info/0">info</seealso> functions.</p>
- </desc>
- </func>
- <func>
- <name name="format_error" arity="1"/>
- <fsummary>Format an error descriptor</fsummary>
- <desc>
- <p>Takes an <c><anno>ErrorDesc</anno></c> returned by load, unload or
- reload functions and returns a string which
- describes the error or warning.</p>
- <note>
- <p>Due to peculiarities in the dynamic loading interfaces on
- different platform, the returned string is only guaranteed
- to describe the correct error <em>if format_error/1 is called in the same instance of the erlang virtual machine as the error appeared in</em> (meaning the same operating
- system process)!</p>
- </note>
+ parameters are not specified as described here.</p>
</desc>
</func>
</funcs>
-
<section>
- <title>SEE ALSO</title>
- <p>erl_driver(4), driver_entry(4)</p>
+ <title>See Also</title>
+ <p><seealso marker="erts:erl_driver"><c>erts:erl_driver(4)</c></seealso>,
+ <seealso marker="erts:driver_entry"><c>erts:driver_entry(4)</c></seealso></p>
</section>
</erlref>
-
diff --git a/lib/kernel/doc/src/erl_prim_loader_stub.xml b/lib/kernel/doc/src/erl_prim_loader_stub.xml
index 8d5f58dc3a..f3189e2a66 100644
--- a/lib/kernel/doc/src/erl_prim_loader_stub.xml
+++ b/lib/kernel/doc/src/erl_prim_loader_stub.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -37,7 +37,7 @@
The module erl_prim_loader is moved to the runtime system
application. Please see <seealso
marker="erts:erl_prim_loader">erl_prim_loader(3)</seealso> in the
- erts reference manual instead.
+ ERTS reference manual instead.
</p></description>
</erlref>
diff --git a/lib/kernel/doc/src/erlang_stub.xml b/lib/kernel/doc/src/erlang_stub.xml
index b9867806bd..afd353e438 100644
--- a/lib/kernel/doc/src/erlang_stub.xml
+++ b/lib/kernel/doc/src/erlang_stub.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -37,7 +37,7 @@
The module erlang is moved to the runtime system
application. Please see <seealso
marker="erts:erlang">erlang(3)</seealso> in the
- erts reference manual instead.
+ ERTS reference manual instead.
</p></description>
</erlref>
diff --git a/lib/kernel/doc/src/error_handler.xml b/lib/kernel/doc/src/error_handler.xml
index 6aec5c77d5..e5639487dc 100644
--- a/lib/kernel/doc/src/error_handler.xml
+++ b/lib/kernel/doc/src/error_handler.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -31,35 +31,48 @@
<rev></rev>
</header>
<module>error_handler</module>
- <modulesummary>Default System Error Handler</modulesummary>
+ <modulesummary>Default system error handler.</modulesummary>
<description>
- <p>The error handler module defines what happens when certain types
+ <p>This module defines what happens when certain types
of errors occur.</p>
</description>
<funcs>
<func>
+ <name name="raise_undef_exception" arity="3"/>
+ <fsummary>Raise an undef exception.</fsummary>
+ <type_desc variable="Args">
+ A (possibly empty) list of arguments <c>Arg1,..,ArgN</c>
+ </type_desc>
+ <desc>
+ <p>Raises an <c>undef</c> exception with a stacktrace, indicating
+ that <c><anno>Module</anno>:<anno>Function</anno>/N</c> is
+ undefined.
+ </p>
+ </desc>
+ </func>
+ <func>
<name name="undefined_function" arity="3"/>
- <fsummary>Called when an undefined function is encountered</fsummary>
+ <fsummary>Called when an undefined function is encountered.</fsummary>
<type_desc variable="Args">
A (possibly empty) list of arguments <c>Arg1,..,ArgN</c>
</type_desc>
<desc>
- <p>This function is called by the run-time system if a call is made to
+ <p>This function is called by the runtime system if a call is made to
<c><anno>Module</anno>:<anno>Function</anno>(Arg1,.., ArgN)</c> and
- <c><anno>Module</anno>:<anno>Function</anno>/N</c> is undefined. Note that
- <c>undefined_function/3</c> is evaluated inside the process
+ <c><anno>Module</anno>:<anno>Function</anno>/N</c> is undefined.
+ Notice that this function is evaluated inside the process
making the original call.</p>
- <p>This function will first attempt to autoload
+ <p>This function first attempts to autoload
<c><anno>Module</anno></c>. If that is not possible,
- an <c>undef</c> exception will be raised.</p>
+ an <c>undef</c> exception is raised.</p>
- <p>If it was possible to load <c><anno>Module</anno></c>
- and the function <c><anno>Function</anno>/N</c> is exported,
- it will be called.</p>
+ <p>If it is possible to load <c><anno>Module</anno></c>
+ and function <c><anno>Function</anno>/N</c> is exported,
+ it is called.</p>
- <p>Otherwise, if the function <c>'$handle_undefined_function'/2</c>
- is exported, it will be called as
+ <p>Otherwise, if function <c>'$handle_undefined_function'/2</c>
+ is exported, it is called as
<c>'$handle_undefined_function'(</c><anno>Function</anno>,
<anno>Args</anno>).
</p>
@@ -67,61 +80,48 @@
<p>Defining <c>'$handle_undefined_function'/2</c> in
ordinary application code is highly discouraged. It is very
easy to make subtle errors that can take a long time to
- debug. Furthermore, none of the tools for static code
+ debug. Furthermore, none of the tools for static code
analysis (such as Dialyzer and Xref) supports the use of
<c>'$handle_undefined_function'/2</c> and no such support
will be added. Only use this function after having carefully
- considered other, less dangerous, solutions. One example of
+ considered other, less dangerous, solutions. One example of
potential legitimate use is creating stubs for other
sub-systems during testing and debugging.
</p>
</warning>
- <p>Otherwise an <c>undef</c> exception will be raised.</p>
- </desc>
- </func>
- <func>
- <name name="raise_undef_exception" arity="3"/>
- <fsummary>Raise an undef exception</fsummary>
- <type_desc variable="Args">
- A (possibly empty) list of arguments <c>Arg1,..,ArgN</c>
- </type_desc>
- <desc>
- <p>Raise an <c>undef</c> exception with a stacktrace indicating
- that <c><anno>Module</anno>:<anno>Function</anno>/N</c> is
- undefined.
- </p>
+ <p>Otherwise an <c>undef</c> exception is raised.</p>
</desc>
</func>
<func>
<name name="undefined_lambda" arity="3"/>
- <fsummary>Called when an undefined lambda (fun) is encountered</fsummary>
+ <fsummary>Called when an undefined lambda (fun) is encountered.</fsummary>
<type_desc variable="Args">
A (possibly empty) list of arguments <c>Arg1,..,ArgN</c>
</type_desc>
<desc>
<p>This function is evaluated if a call is made to
- <c><anno>Fun</anno>(Arg1,.., ArgN)</c> when the module defining the fun is
- not loaded. The function is evaluated inside the process
+ <c><anno>Fun</anno>(Arg1,.., ArgN)</c> when the module defining
+ the fun is not loaded. The function is evaluated inside the process
making the original call.</p>
<p>If <c><anno>Module</anno></c> is interpreted, the interpreter is invoked
and the return value of the interpreted
<c><anno>Fun</anno>(Arg1,.., ArgN)</c> call is returned.</p>
<p>Otherwise, it returns, if possible, the value of
- <c>apply(<anno>Fun</anno>, <anno>Args</anno>)</c> after an attempt has been made to
- autoload <c><anno>Module</anno></c>. If this is not possible, the call
- fails with exit reason <c>undef</c>.</p>
+ <c>apply(<anno>Fun</anno>, <anno>Args</anno>)</c> after an attempt
+ is made to autoload <c><anno>Module</anno></c>. If this is not possible,
+ the call fails with exit reason <c>undef</c>.</p>
</desc>
</func>
</funcs>
<section>
<title>Notes</title>
- <p>The code in <c>error_handler</c> is complex and should not be
- changed without fully understanding the interaction between
+ <p>The code in <c>error_handler</c> is complex. Do not
+ change it without fully understanding the interaction between
the error handler, the <c>init</c> process of the code server,
and the I/O mechanism of the code.</p>
- <p>Changes in the code which may seem small can cause a deadlock
- as unforeseen consequences may occur. The use of <c>input</c> is
+ <p>Code changes that seem small can cause a deadlock,
+ as unforeseen consequences can occur. The use of <c>input</c> is
dangerous in this type of code.</p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/error_logger.xml b/lib/kernel/doc/src/error_logger.xml
index 92e14c2bef..a8273e59e2 100644
--- a/lib/kernel/doc/src/error_logger.xml
+++ b/lib/kernel/doc/src/error_logger.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,41 +29,44 @@
<rev></rev>
</header>
<module>error_logger</module>
- <modulesummary>Erlang Error Logger</modulesummary>
+ <modulesummary>Erlang error logger.</modulesummary>
<description>
<p>The Erlang <em>error logger</em> is an event manager (see
<seealso marker="doc/design_principles:des_princ">OTP Design Principles</seealso> and
- <seealso marker="stdlib:gen_event">gen_event(3)</seealso>),
- registered as <c>error_logger</c>. Error, warning and info events
+ <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>),
+ registered as <c>error_logger</c>. Errors, warnings, and info events
are sent to the error logger from the Erlang runtime system and
the different Erlang/OTP applications. The events are, by default,
- logged to tty. Note that an event from a process <c>P</c> is
+ logged to the terminal. Notice that an event from a process <c>P</c> is
logged at the node of the group leader of <c>P</c>. This means
that log output is directed to the node from which a process was
created, which not necessarily is the same node as where it is
executing.</p>
- <p>Initially, <c>error_logger</c> only has a primitive event
+ <p>Initially, <c>error_logger</c> has only a primitive event
handler, which buffers and prints the raw event messages. During
- system startup, the application Kernel replaces this with a
- <em>standard event handler</em>, by default one which writes
- nicely formatted output to tty. Kernel can also be configured so
- that events are logged to file instead, or not logged at all, see
- <seealso marker="kernel_app">kernel(6)</seealso>.</p>
- <p>Also the SASL application, if started, adds its own event
- handler, which by default writes supervisor, crash and progress
- reports to tty. See
- <seealso marker="sasl:sasl_app">sasl(6)</seealso>.</p>
- <p>It is recommended that user defined applications should report
- errors through the error logger, in order to get uniform reports.
- User defined event handlers can be added to handle application
- specific events. (<c>add_report_handler/1,2</c>). Also, there is
- a useful event handler in STDLIB for multi-file logging of events,
- see <c>log_mf_h(3)</c>.</p>
+ system startup, the <c>Kernel</c> application replaces this with a
+ <em>standard event handler</em>, by default one that writes
+ nicely formatted output to the terminal. <c>Kernel</c> can also be
+ configured so that events are logged to a file instead, or not logged at all,
+ see <seealso marker="kernel_app"><c>kernel(6)</c></seealso>.</p>
+ <p>Also the <c>SASL</c> application, if started, adds its own event
+ handler, which by default writes supervisor, crash, and progress
+ reports to the terminal. See
+ <seealso marker="sasl:sasl_app"><c>sasl(6)</c></seealso>.</p>
+ <p>It is recommended that user-defined applications report
+ errors through the error logger to get uniform reports.
+ User-defined event handlers can be added to handle application-specific
+ events, see
+ <seealso marker="#add_report_handler/1"><c>add_report_handler/1,2</c></seealso>.
+ Also, a useful event handler is provided in <c>STDLIB</c> for multi-file
+ logging of events, see
+ <seealso marker="stdlib:log_mf_h"><c>stdlib:log_mf_h(3)</c></seealso>.</p>
<p>Warning events were introduced in Erlang/OTP R9C and are enabled
- by default as of 18.0. To retain backwards compatibility with existing
- user defined event handlers, these may be tagged as errors or info
- using the command line flag <c><![CDATA[+W <e | i | w>]]></c>, thus
- showing up as error or info reports in the logs.</p>
+ by default as from Erlang/OTP 18.0. To retain backwards compatibility
+ with existing user-defined event handlers, the warning events can be
+ tagged as <c>errors</c> or <c>info</c> using command-line flag
+ <c><![CDATA[+W <e | i | w>]]></c>, thus showing up as
+ <c>ERROR REPORT</c> or <c>INFO REPORT</c> in the logs.</p>
</description>
<datatypes>
<datatype>
@@ -72,15 +75,44 @@
</datatypes>
<funcs>
<func>
+ <name name="add_report_handler" arity="1"/>
+ <name name="add_report_handler" arity="2"/>
+ <fsummary>Add an event handler to the error logger.</fsummary>
+ <desc>
+ <p>Adds a new event handler to the error logger. The event
+ handler must be implemented as a <c>gen_event</c> callback
+ module, see
+ <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>.</p>
+ <p><c><anno>Handler</anno></c> is typically the name of the callback module
+ and <c><anno>Args</anno></c> is an optional term (defaults to []) passed
+ to the initialization callback function <c><anno>Handler</anno>:init/1</c>.
+ The function returns <c>ok</c> if successful.</p>
+ <p>The event handler must be able to handle the events in this module, see
+ section <seealso marker="#events">Events</seealso>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="delete_report_handler" arity="1"/>
+ <fsummary>Delete an event handler from the error logger.</fsummary>
+ <desc>
+ <p>Deletes an event handler from the error logger by calling
+ <c>gen_event:delete_handler(error_logger, <anno>Handler</anno>, [])</c>,
+ see <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>.</p>
+ </desc>
+ </func>
+ <func>
<name name="error_msg" arity="1"/>
<name name="error_msg" arity="2"/>
<name name="format" arity="2"/>
- <fsummary>Send an standard error event to the error logger</fsummary>
+ <fsummary>Send a standard error event to the error logger.</fsummary>
<desc>
<p>Sends a standard error event to the error logger.
- The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments are the same as
- the arguments of <c>io:format/2</c>. The event is handled by
- the standard event handler.</p>
+ The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments
+ are the same as the arguments of
+ <seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>
+ in <c>STDLIB</c>.
+ The event is handled by the standard event handler.</p>
+ <p><em>Example:</em></p>
<pre>
1> <input>error_logger:error_msg("An error occurred in ~p~n", [a_module]).</input>
@@ -90,16 +122,19 @@ ok</pre>
<warning>
<p>If called with bad arguments, this function can crash
the standard event handler, meaning no further events are
- logged. When in doubt, use <c>error_report/1</c> instead.</p>
+ logged. When in doubt, use
+ <seealso marker="#error_report/1"><c>error_report/1</c></seealso>
+ instead.</p>
</warning>
</desc>
</func>
<func>
<name name="error_report" arity="1"/>
- <fsummary>Send a standard error report event to the error logger</fsummary>
+ <fsummary>Send a standard error report event to the error logger.</fsummary>
<desc>
<p>Sends a standard error report event to the error logger.
The event is handled by the standard event handler.</p>
+ <p><em>Example:</em></p>
<pre>
2> <input>error_logger:error_report([{tag1,data1},a_term,{tag2,data}]).</input>
@@ -117,100 +152,27 @@ ok</pre>
</func>
<func>
<name name="error_report" arity="2"/>
- <fsummary>Send a user defined error report event to the error logger</fsummary>
+ <fsummary>Send a user-defined error report event to the error logger.</fsummary>
<desc>
- <p>Sends a user defined error report event to the error logger.
+ <p>Sends a user-defined error report event to the error logger.
An event handler to handle the event is supposed to have been
added. The event is ignored by the standard event handler.</p>
<p>It is recommended that <c><anno>Report</anno></c> follows the same
- structure as for <c>error_report/1</c>.</p>
- </desc>
- </func>
- <func>
- <name name="warning_map" arity="0"/>
- <fsummary>Return the current mapping for warning events</fsummary>
- <desc>
- <p>Returns the current mapping for warning events. Events sent
- using <c>warning_msg/1,2</c> or <c>warning_report/1,2</c>
- are tagged as errors, warnings (default) or info, depending
- on the value of the command line flag <c>+W</c>.</p>
- <pre>
-os$ <input>erl</input>
-Erlang (BEAM) emulator version 5.4.8 [hipe] [threads:0] [kernel-poll]
-
-Eshell V5.4.8 (abort with ^G)
-1> <input>error_logger:warning_map().</input>
-warning
-2> <input>error_logger:warning_msg("Warnings tagged as: ~p~n", [warning]).</input>
-
-=WARNING REPORT==== 11-Aug-2005::15:31:55 ===
-Warnings tagged as: warning
-ok
-3>
-User switch command
- --> q
-os$ <input>erl +W e</input>
-Erlang (BEAM) emulator version 5.4.8 [hipe] [threads:0] [kernel-poll]
-
-Eshell V5.4.8 (abort with ^G)
-1> <input>error_logger:warning_map().</input>
-error
-2> <input>error_logger:warning_msg("Warnings tagged as: ~p~n", [error]).</input>
-
-=ERROR REPORT==== 11-Aug-2005::15:31:23 ===
-Warnings tagged as: error
-ok</pre>
- </desc>
- </func>
- <func>
- <name name="warning_msg" arity="1"/>
- <name name="warning_msg" arity="2"/>
- <fsummary>Send a standard warning event to the error logger</fsummary>
- <desc>
- <p>Sends a standard warning event to the error logger.
- The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments are the same as
- the arguments of <c>io:format/2</c>. The event is handled by
- the standard event handler. It is tagged either as an error,
- warning or info, see
- <seealso marker="#warning_map/0">warning_map/0</seealso>.</p>
- <warning>
- <p>If called with bad arguments, this function can crash
- the standard event handler, meaning no further events are
- logged. When in doubt, use <c>warning_report/1</c> instead.</p>
- </warning>
- </desc>
- </func>
- <func>
- <name name="warning_report" arity="1"/>
- <fsummary>Send a standard warning report event to the error logger</fsummary>
- <desc>
- <p>Sends a standard warning report event to the error logger.
- The event is handled by the standard event handler. It is
- tagged either as an error, warning or info, see
- <seealso marker="#warning_map/0">warning_map/0</seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="warning_report" arity="2"/>
- <fsummary>Send a user defined warning report event to the error logger</fsummary>
- <desc>
- <p>Sends a user defined warning report event to the error
- logger. An event handler to handle the event is supposed to
- have been added. The event is ignored by the standard event
- handler. It is tagged either as an error, warning or info,
- depending on the value of
- <seealso marker="#warning_map/0">warning_map/0</seealso>.</p>
+ structure as for
+ <seealso marker="#error_report/1"><c>error_report/1</c></seealso>.</p>
</desc>
</func>
<func>
<name name="info_msg" arity="1"/>
<name name="info_msg" arity="2"/>
- <fsummary>Send a standard information event to the error logger</fsummary>
+ <fsummary>Send a standard information event to the error logger.</fsummary>
<desc>
<p>Sends a standard information event to the error logger.
- The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments are the same as
- the arguments of <c>io:format/2</c>. The event is handled by
- the standard event handler.</p>
+ The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments
+ are the same as the arguments of
+ <seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>
+ in <c>STDLIB</c>. The event is handled by the standard event handler.</p>
+ <p><em>Example:</em></p>
<pre>
1> <input>error_logger:info_msg("Something happened in ~p~n", [a_module]).</input>
@@ -226,10 +188,11 @@ ok</pre>
</func>
<func>
<name name="info_report" arity="1"/>
- <fsummary>Send a standard information report event to the error logger</fsummary>
+ <fsummary>Send a standard information report event to the error logger.</fsummary>
<desc>
<p>Sends a standard information report event to the error
logger. The event is handled by the standard event handler.</p>
+ <p><em>Example:</em></p>
<pre>
2> <input>error_logger:info_report([{tag1,data1},a_term,{tag2,data}]).</input>
@@ -247,59 +210,22 @@ ok</pre>
</func>
<func>
<name name="info_report" arity="2"/>
- <fsummary>Send a user defined information report event to the error logger</fsummary>
+ <fsummary>Send a user-defined information report event to the error logger.</fsummary>
<desc>
- <p>Sends a user defined information report event to the error
+ <p>Sends a user-defined information report event to the error
logger. An event handler to handle the event is supposed to
have been added. The event is ignored by the standard event
handler.</p>
<p>It is recommended that <c><anno>Report</anno></c> follows the same
- structure as for <c>info_report/1</c>.</p>
- </desc>
- </func>
- <func>
- <name name="add_report_handler" arity="1"/>
- <name name="add_report_handler" arity="2"/>
- <fsummary>Add an event handler to the error logger</fsummary>
- <desc>
- <p>Adds a new event handler to the error logger. The event
- handler must be implemented as a <c>gen_event</c> callback
- module, see
- <seealso marker="stdlib:gen_event">gen_event(3)</seealso>.</p>
- <p><c><anno>Handler</anno></c> is typically the name of the callback module
- and <c><anno>Args</anno></c> is an optional term (defaults to []) passed
- to the initialization callback function <c><anno>Handler</anno>:init/1</c>.
- The function returns <c>ok</c> if successful.</p>
- <p>The event handler must be able to handle the
- <seealso marker="#events">events</seealso> described below.</p>
- </desc>
- </func>
- <func>
- <name name="delete_report_handler" arity="1"/>
- <fsummary>Delete an event handler from the error logger</fsummary>
- <desc>
- <p>Deletes an event handler from the error logger by calling
- <c>gen_event:delete_handler(error_logger, <anno>Handler</anno>, [])</c>,
- see <seealso marker="stdlib:gen_event">gen_event(3)</seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="tty" arity="1"/>
- <fsummary>Enable or disable printouts to the tty</fsummary>
- <desc>
- <p>Enables (<c><anno>Flag</anno> == true</c>) or disables
- (<c><anno>Flag</anno> == false</c>) printout of standard events to the tty.</p>
- <p>This is done by adding or deleting the standard event handler
- for output to tty, thus calling this function overrides
- the value of the Kernel <c>error_logger</c> configuration
- parameter.</p>
+ structure as for
+ <seealso marker="#info_report/1"><c>info_report/1</c></seealso>.</p>
</desc>
</func>
<func>
<name name="logfile" arity="1" clause_i="1"/>
<name name="logfile" arity="1" clause_i="2"/>
<name name="logfile" arity="1" clause_i="3"/>
- <fsummary>Enable or disable error printouts to a file</fsummary>
+ <fsummary>Enable or disable error printouts to a file.</fsummary>
<type variable="Filename"/>
<type variable="OpenReason" name_i="1"/>
<type variable="CloseReason" name_i="2"/>
@@ -308,22 +234,22 @@ ok</pre>
<desc>
<p>Enables or disables printout of standard events to a file.</p>
<p>This is done by adding or deleting the standard event handler
- for output to file, thus calling this function overrides
- the value of the Kernel <c>error_logger</c> configuration
+ for output to file. Thus, calling this function overrides
+ the value of the <c>Kernel</c> <c>error_logger</c> configuration
parameter.</p>
- <p>Enabling file logging can be used in combination with calling
- <c>tty(false)</c>, in order to have a silent system, where
+ <p>Enabling file logging can be used together with calling
+ <c>tty(false)</c>, to have a silent system where
all standard events are logged to a file only.
- There can only be one active log file at a time.</p>
- <p><c>Request</c> is one of:</p>
+ Only one log file can be active at a time.</p>
+ <p><c>Request</c> is one of the following:</p>
<taglist>
<tag><c>{open, <anno>Filename</anno>}</c></tag>
<item>
- <p>Opens the log file <c><anno>Filename</anno></c>. Returns <c>ok</c> if
+ <p>Opens log file <c><anno>Filename</anno></c>. Returns <c>ok</c> if
successful, or <c>{error, allready_have_logfile}</c> if
logging to file is already enabled, or an error tuple if
- another error occurred. For example, if <c><anno>Filename</anno></c>
- could not be opened.</p>
+ another error occurred (for example, if <c><anno>Filename</anno></c>
+ cannot be opened).</p>
</item>
<tag><c>close</c></tag>
<item>
@@ -339,6 +265,97 @@ ok</pre>
</taglist>
</desc>
</func>
+ <func>
+ <name name="tty" arity="1"/>
+ <fsummary>Enable or disable printouts to the terminal.</fsummary>
+ <desc>
+ <p>Enables (<c><anno>Flag</anno> == true</c>) or disables
+ (<c><anno>Flag</anno> == false</c>) printout of standard events
+ to the terminal.</p>
+ <p>This is done by adding or deleting the standard event handler
+ for output to the terminal. Thus, calling this function overrides
+ the value of the <c>Kernel</c> <c>error_logger</c> configuration parameter.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="warning_map" arity="0"/>
+ <fsummary>Return the current mapping for warning events.</fsummary>
+ <desc>
+ <p>Returns the current mapping for warning events. Events sent
+ using <c>warning_msg/1,2</c> or <c>warning_report/1,2</c>
+ are tagged as errors, warnings (default), or info, depending
+ on the value of command-line flag <c>+W</c>.</p>
+ <p><em>Example:</em></p>
+ <pre>
+os$ <input>erl</input>
+Erlang (BEAM) emulator version 5.4.8 [hipe] [threads:0] [kernel-poll]
+
+Eshell V5.4.8 (abort with ^G)
+1> <input>error_logger:warning_map().</input>
+warning
+2> <input>error_logger:warning_msg("Warnings tagged as: ~p~n", [warning]).</input>
+
+=WARNING REPORT==== 11-Aug-2005::15:31:55 ===
+Warnings tagged as: warning
+ok
+3>
+User switch command
+ --> q
+os$ <input>erl +W e</input>
+Erlang (BEAM) emulator version 5.4.8 [hipe] [threads:0] [kernel-poll]
+
+Eshell V5.4.8 (abort with ^G)
+1> <input>error_logger:warning_map().</input>
+error
+2> <input>error_logger:warning_msg("Warnings tagged as: ~p~n", [error]).</input>
+
+=ERROR REPORT==== 11-Aug-2005::15:31:23 ===
+Warnings tagged as: error
+ok</pre>
+ </desc>
+ </func>
+ <func>
+ <name name="warning_msg" arity="1"/>
+ <name name="warning_msg" arity="2"/>
+ <fsummary>Send a standard warning event to the error logger.</fsummary>
+ <desc>
+ <p>Sends a standard warning event to the error logger.
+ The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments
+ are the same as the arguments of
+ <seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>
+ in <c>STDLIB</c>.
+ The event is handled by the standard event handler. It is tagged
+ as an error, warning, or info, see
+ <seealso marker="#warning_map/0"><c>warning_map/0</c></seealso>.</p>
+ <warning>
+ <p>If called with bad arguments, this function can crash
+ the standard event handler, meaning no further events are
+ logged. When in doubt, use <c>warning_report/1</c> instead.</p>
+ </warning>
+ </desc>
+ </func>
+ <func>
+ <name name="warning_report" arity="1"/>
+ <fsummary>Send a standard warning report event to the error logger.</fsummary>
+ <desc>
+ <p>Sends a standard warning report event to the error logger.
+ The event is handled by the standard event handler. It is
+ tagged as an error, warning, or info, see
+ <seealso marker="#warning_map/0"><c>warning_map/0</c></seealso>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="warning_report" arity="2"/>
+ <fsummary>Send a user-defined warning report event to the error logger.</fsummary>
+ <desc>
+ <p>Sends a user-defined warning report event to the error
+ logger. An event handler to handle the event is supposed to
+ have been added. The event is ignored by the standard event
+ handler. It is tagged as an error, warning, or info,
+ depending on the value of
+ <seealso marker="#warning_map/0"><c>warning_map/0</c></seealso>.</p>
+ </desc>
+ </func>
</funcs>
<section>
@@ -346,8 +363,8 @@ ok</pre>
<title>Events</title>
<p>All event handlers added to the error logger must handle
the following events. <c>Gleader</c> is the group leader pid of
- the process which sent the event, and <c>Pid</c> is the process
- which sent the event.</p>
+ the process that sent the event, and <c>Pid</c> is the process
+ that sent the event.</p>
<taglist>
<tag><c>{error, Gleader, {Pid, Format, Data}}</c></tag>
<item>
@@ -364,18 +381,18 @@ ok</pre>
</item>
<tag><c>{warning_msg, Gleader, {Pid, Format, Data}}</c></tag>
<item>
- <p>Generated when <c>warning_msg/1,2</c> is called, provided
- that warnings are set to be tagged as warnings.</p>
+ <p>Generated when <c>warning_msg/1,2</c> is called
+ if warnings are set to be tagged as warnings.</p>
</item>
<tag><c>{warning_report, Gleader, {Pid, std_warning, Report}}</c></tag>
<item>
- <p>Generated when <c>warning_report/1</c> is called, provided
- that warnings are set to be tagged as warnings.</p>
+ <p>Generated when <c>warning_report/1</c> is called
+ if warnings are set to be tagged as warnings.</p>
</item>
<tag><c>{warning_report, Gleader, {Pid, Type, Report}}</c></tag>
<item>
- <p>Generated when <c>warning_report/2</c> is called, provided
- that warnings are set to be tagged as warnings.</p>
+ <p>Generated when <c>warning_report/2</c> is called
+ if warnings are set to be tagged as warnings.</p>
</item>
<tag><c>{info_msg, Gleader, {Pid, Format, Data}}</c></tag>
<item>
@@ -390,17 +407,19 @@ ok</pre>
<p>Generated when <c>info_report/2</c> is called.</p>
</item>
</taglist>
- <p>Note that also a number of system internal events may be
- received, a catch-all clause last in the definition of
+ <p>Notice that some system-internal events can also be
+ received. Therefore a catch-all clause last in the definition of
the event handler callback function <c>Module:handle_event/2</c>
- is necessary. This also holds true for
- <c>Module:handle_info/2</c>, as there are a number of system
- internal messages the event handler must take care of as well.</p>
+ is necessary. This also applies for
+ <c>Module:handle_info/2</c>, as the event handler must also take care of
+ some system-internal messages.</p>
</section>
-
<section>
- <title>SEE ALSO</title>
- <p>gen_event(3), log_mf_h(3), kernel(6), sasl(6)</p>
+ <title>See Also</title>
+ <p><seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>,
+ <seealso marker="stdlib:log_mf_h"><c>stdlib:log_mf_h(3)</c></seealso>
+ <seealso marker="kernel_app"><c>kernel(6)</c></seealso>
+ <seealso marker="sasl:sasl_app"><c>sasl(6)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/file.xml b/lib/kernel/doc/src/file.xml
index 831ef1c22a..7d86c3ebcb 100644
--- a/lib/kernel/doc/src/file.xml
+++ b/lib/kernel/doc/src/file.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,56 +29,57 @@
<rev></rev>
</header>
<module>file</module>
- <modulesummary>File Interface Module</modulesummary>
+ <modulesummary>File interface module.</modulesummary>
<description>
- <p>The module <c>file</c> provides an interface to the file system.</p>
- <p>On operating systems with thread support, it is possible to let
- file operations be performed in threads of their own, allowing
+ <p>This module provides an interface to the file system.</p>
+
+ <p>On operating systems with thread support,
+ file operations can be performed in threads of their own, allowing
other Erlang processes to continue executing in parallel with
- the file operations. See the command line flag
- <c>+A</c> in <seealso marker="erts:erl">erl(1)</seealso>.</p>
+ the file operations. See command-line flag
+ <c>+A</c> in <seealso marker="erts:erl"><c>erl(1)</c></seealso>.</p>
- <p>With regard to file name encoding, the Erlang VM can operate in
- two modes. The current mode can be queried using the <seealso
- marker="#native_name_encoding">native_name_encoding/0</seealso>
- function. It returns either <c>latin1</c> or <c>utf8</c>.</p>
+ <p>Regarding filename encoding, the Erlang VM can operate in
+ two modes. The current mode can be queried using function
+ <seealso marker="#native_name_encoding"><c>native_name_encoding/0</c></seealso>.
+ It returns <c>latin1</c> or <c>utf8</c>.</p>
- <p>In the <c>latin1</c> mode, the Erlang VM does not change the
- encoding of file names. In the <c>utf8</c> mode, file names can
- contain Unicode characters greater than 255 and the VM will
- convert file names back and forth to the native file name encoding
+ <p>In <c>latin1</c> mode, the Erlang VM does not change the
+ encoding of filenames. In <c>utf8</c> mode, filenames can
+ contain Unicode characters greater than 255 and the VM
+ converts filenames back and forth to the native filename encoding
(usually UTF-8, but UTF-16 on Windows).</p>
<p>The default mode depends on the operating system. Windows and
- MacOS X enforce consistent file name encoding and therefore the
- VM uses the <c>utf8</c> mode.</p>
+ MacOS X enforce consistent filename encoding and therefore the
+ VM uses <c>utf8</c> mode.</p>
- <p>On operating systems with transparent naming (i.e. all Unix
- systems except MacOS X), the default will be <c>utf8</c> if the
- terminal supports UTF-8, otherwise <c>latin1</c>. The default may
- be overridden using the <c>+fnl</c> (to force <c>latin1</c> mode)
- or <c>+fnu</c> (to force <c>utf8</c> mode) when starting <seealso
- marker="erts:erl">erl</seealso>.</p>
+ <p>On operating systems with transparent naming (for example, all Unix
+ systems except MacOS X), default is <c>utf8</c> if the
+ terminal supports UTF-8, otherwise <c>latin1</c>. The default can
+ be overridden using <c>+fnl</c> (to force <c>latin1</c> mode)
+ or <c>+fnu</c> (to force <c>utf8</c> mode) when starting
+ <seealso marker="erts:erl"><c>erts:erl</c></seealso>.</p>
- <p>On operating systems with transparent naming, files could be
- inconsistently named, i.e. some files are encoded in UTF-8 while
- others are encoded in (for example) iso-latin1. To be able to
- handle file systems with inconsistent naming when running in the
- <c>utf8</c> mode, the concept of "raw file names" has been
- introduced.</p>
+ <p>On operating systems with transparent naming, files can be
+ inconsistently named, for example, some files are encoded in UTF-8 while
+ others are encoded in ISO Latin-1. The concept of <em>raw filenames</em> is
+ introduced to handle file systems with inconsistent naming when running in
+ <c>utf8</c> mode.</p>
- <p>A raw file name is a file name given as a binary. The Erlang VM
- will perform no translation of a file name given as a binary on
+ <p>A <em>raw filename</em> is a filename specified as a binary. The Erlang VM
+ does not translate a filename specified as a binary on
systems with transparent naming.</p>
- <p>When running in the <c>utf8</c> mode, the
- <c>file:list_dir/1</c> and <c>file:read_link/1</c> functions will
- never return raw file names. Use the <seealso
- marker="#list_dir_all">list_dir_all/1</seealso> and <seealso
- marker="#read_link_all">read_link_all/1</seealso> functions to
- return all file names including raw file names.</p>
+ <p>When running in <c>utf8</c> mode, functions
+ <seealso marker="#list_dir/1"><c>list_dir/1</c></seealso> and
+ <seealso marker="#read_link/1"><c>read_link/1</c></seealso>
+ never return raw filenames. To return all filenames including raw filenames,
+ use functions
+ <seealso marker="#list_dir_all"><c>list_dir_all/1</c></seealso> and
+ <seealso marker="#read_link_all"><c>read_link_all/1</c></seealso>.</p>
- <p>Also see <seealso marker="stdlib:unicode_usage#notes-about-raw-filenames">Notes about raw file names</seealso>.</p>
+ <p>See also section <seealso marker="stdlib:unicode_usage#notes-about-raw-filenames">Notes About Raw Filenames</seealso> in the <c>STDLIB</c> User´s Giude.</p>
</description>
@@ -89,9 +90,8 @@
<datatype>
<name>fd()</name>
<desc>
- <p><marker id="type-fd"/>
- A file descriptor representing a file opened in <seealso
- marker="#raw">raw</seealso> mode.</p>
+ <p>A file descriptor representing a file opened in
+ <seealso marker="#raw"><c>raw</c></seealso> mode.</p>
</desc>
</datatype>
<datatype>
@@ -104,7 +104,7 @@
<name name="io_device"/>
<desc>
<p>As returned by
- <seealso marker="#open/2">file:open/2</seealso>;
+ <seealso marker="#open/2"><c>open/2</c></seealso>;
<c>pid()</c> is a process handling I/O-protocols.</p>
</desc>
</datatype>
@@ -112,7 +112,7 @@
<name name="name"/>
<desc>
<p>If VM is in Unicode filename mode, <c>string()</c> and <c>char()</c>
- are allowed to be > 255.
+ are allowed to be &gt; 255.
</p>
</desc>
</datatype>
@@ -120,12 +120,12 @@
<name name="name_all"/>
<desc>
<p>If VM is in Unicode filename mode, <c>string()</c> and <c>char()</c>
- are allowed to be > 255.
+ are allowed to be &gt; 255.
<c><anno>RawFilename</anno></c> is a filename not subject to
Unicode translation,
meaning that it can contain characters not conforming to
- the Unicode encoding expected from the filesystem
- (i.e. non-UTF-8 characters although the VM is started
+ the Unicode encoding expected from the file system
+ (that is, non-UTF-8 characters although the VM is started
in Unicode filename mode).
</p>
</desc>
@@ -133,7 +133,7 @@
<datatype>
<name name="posix"/>
<desc>
- <p>An atom which is named from the POSIX error codes used in
+ <p>An atom that is named from the POSIX error codes used in
Unix, and in the runtime libraries of most C compilers.</p>
</desc>
</datatype>
@@ -160,7 +160,7 @@
<funcs>
<func>
<name name="advise" arity="4"/>
- <fsummary>Predeclare an access pattern for file data</fsummary>
+ <fsummary>Predeclare an access pattern for file data.</fsummary>
<type name="posix_file_advise"/>
<desc>
<p><c>advise/4</c> can be used to announce an intention to access file
@@ -171,80 +171,80 @@
</func>
<func>
<name name="allocate" arity="3"/>
- <fsummary>Allocate file space</fsummary>
+ <fsummary>Allocate file space.</fsummary>
<desc>
<p><c>allocate/3</c> can be used to preallocate space for a file.</p>
- <p>This function only succeeds in platforms that implement this
+ <p>This function only succeeds in platforms that provide this
feature. When it succeeds, space is preallocated for the file but
the file size might not be updated. This behaviour depends on the
- preallocation implementation. To guarantee the file size is updated
- one must truncate the file to the new size.</p>
+ preallocation implementation. To guarantee that the file size is updated,
+ truncate the file to the new size.</p>
</desc>
</func>
<func>
<name name="change_group" arity="2"/>
- <fsummary>Change group of a file</fsummary>
+ <fsummary>Change group of a file.</fsummary>
<desc>
<p>Changes group of a file. See
- <seealso marker="#write_file_info/2">write_file_info/2</seealso>.</p>
+ <seealso marker="#write_file_info/2"><c>write_file_info/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="change_mode" arity="2"/>
- <fsummary>Change permissions of a file</fsummary>
+ <fsummary>Change permissions of a file.</fsummary>
<desc>
<p>Changes permissions of a file. See
- <seealso marker="#write_file_info/2">write_file_info/2</seealso>.</p>
+ <seealso marker="#write_file_info/2"><c>write_file_info/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="change_owner" arity="2"/>
- <fsummary>Change owner of a file</fsummary>
+ <fsummary>Change owner of a file.</fsummary>
<desc>
<p>Changes owner of a file. See
- <seealso marker="#write_file_info/2">write_file_info/2</seealso>.</p>
+ <seealso marker="#write_file_info/2"><c>write_file_info/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="change_owner" arity="3"/>
- <fsummary>Change owner and group of a file</fsummary>
+ <fsummary>Change owner and group of a file.</fsummary>
<desc>
<p>Changes owner and group of a file. See
- <seealso marker="#write_file_info/2">write_file_info/2</seealso>.</p>
+ <seealso marker="#write_file_info/2"><c>write_file_info/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="change_time" arity="2"/>
- <fsummary>Change the modification time of a file</fsummary>
+ <fsummary>Change the modification time of a file.</fsummary>
<desc>
<p>Changes the modification and access times of a file. See
- <seealso marker="#write_file_info/2">write_file_info/2</seealso>.</p>
+ <seealso marker="#write_file_info/2"><c>write_file_info/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="change_time" arity="3"/>
- <fsummary>Change the modification and last access time of a file</fsummary>
+ <fsummary>Change the modification and last access time of a file.</fsummary>
<desc>
<p>Changes the modification and last access times of a file. See
- <seealso marker="#write_file_info/2">write_file_info/2</seealso>.</p>
+ <seealso marker="#write_file_info/2"><c>write_file_info/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="close" arity="1"/>
- <fsummary>Close a file</fsummary>
+ <fsummary>Close a file.</fsummary>
<desc>
<p>Closes the file referenced by <c><anno>IoDevice</anno></c>. It mostly
- returns <c>ok</c>, expect for some severe errors such as out
+ returns <c>ok</c>, except for some severe errors such as out
of memory.</p>
- <p>Note that if the option <c>delayed_write</c> was
- used when opening the file, <c>close/1</c> might return an
+ <p>Notice that if option <c>delayed_write</c> was
+ used when opening the file, <c>close/1</c> can return an
old write error and not even try to close the file. See
- <seealso marker="#open/2">open/2</seealso>.</p>
+ <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="consult" arity="1"/>
- <fsummary>Read Erlang terms from a file</fsummary>
+ <fsummary>Read Erlang terms from a file.</fsummary>
<desc>
<p>Reads Erlang terms, separated by '.', from
<c><anno>Filename</anno></c>. Returns one of the following:</p>
@@ -256,42 +256,44 @@
<tag><c>{error, atom()}</c></tag>
<item>
<p>An error occurred when opening the file or reading it.
- See <seealso marker="#open/2">open/2</seealso> for a list
- of typical error codes.</p>
+ For a list of typical error codes, see
+ <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</item>
<tag><c>{error, {<anno>Line</anno>, <anno>Mod</anno>,
<anno>Term</anno>}}</c></tag>
<item>
<p>An error occurred when interpreting the Erlang terms in
- the file. Use <c>format_error/1</c> to convert
- the three-element tuple to an English description of
- the error.</p>
+ the file. To convert the three-element tuple to an English
+ description of the error, use
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.</p>
</item>
</taglist>
- <p>Example:</p>
-<code type="none">f.txt: {person, "kalle", 25}.
+ <p><em>Example:</em></p>
+<code type="none">
+f.txt: {person, "kalle", 25}.
{person, "pelle", 30}.</code>
-<pre>1> <input>file:consult("f.txt").</input>
+<pre>
+1> <input>file:consult("f.txt").</input>
{ok,[{person,"kalle",25},{person,"pelle",30}]}</pre>
- <p>The encoding of of <c><anno>Filename</anno></c> can be set
- by a comment as described in <seealso
- marker="stdlib:epp#encoding">epp(3)</seealso>.</p>
+ <p>The encoding of <c><anno>Filename</anno></c> can be set
+ by a comment, as described in
+ <seealso marker="stdlib:epp#encoding"><c>stdlib:epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="copy" arity="2"/>
<name name="copy" arity="3"/>
- <fsummary>Copy file contents</fsummary>
+ <fsummary>Copy file contents.</fsummary>
<desc>
<p>Copies <c><anno>ByteCount</anno></c> bytes from
<c><anno>Source</anno></c> to <c><anno>Destination</anno></c>.
<c><anno>Source</anno></c> and <c><anno>Destination</anno></c> refer
- to either filenames or IO devices from e.g. <c>open/2</c>.
+ to either filenames or IO devices from, for example, <c>open/2</c>.
<c><anno>ByteCount</anno></c> defaults to <c>infinity</c>, denoting an
infinite number of bytes.</p>
- <p>The argument <c><anno>Modes</anno></c> is a list of possible modes,
- see <seealso marker="#open/2">open/2</seealso>, and defaults to
- [].</p>
+ <p>Argument <c><anno>Modes</anno></c> is a list of possible modes,
+ see <seealso marker="#open/2"><c>open/2</c></seealso>, and defaults to
+ <c>[]</c>.</p>
<p>If both <c><anno>Source</anno></c> and
<c><anno>Destination</anno></c> refer to
filenames, the files are opened with <c>[read, binary]</c>
@@ -303,25 +305,51 @@
<p>If <c><anno>Destination</anno></c> refers to a filename, it is opened
with <c>write</c> mode prepended to the mode list before
the copy, and closed when done.</p>
- <p>Returns <c>{ok, <anno>BytesCopied</anno>}</c> where
+ <p>Returns <c>{ok, <anno>BytesCopied</anno>}</c>, where
<c><anno>BytesCopied</anno></c> is
- the number of bytes that actually was copied, which may be
+ the number of bytes that was copied, which can be
less than <c><anno>ByteCount</anno></c> if end of file was
encountered on the source. If the operation fails,
<c>{error, <anno>Reason</anno>}</c> is returned.</p>
- <p>Typical error reasons: As for <c>open/2</c> if a file had to
- be opened, and as for <c>read/2</c> and <c>write/2</c>.</p>
+ <p>Typical error reasons: as for
+ <seealso marker="#open/2"><c>open/2</c></seealso> if a file
+ had to be opened, and as for
+ <seealso marker="#read/2"><c>read/2</c></seealso> and
+ <seealso marker="#write/2"><c>write/2</c></seealso>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="datasync" arity="1"/>
+ <fsummary>Synchronize the in-memory data of a file, ignoring most of its metadata, with that on the physical medium.</fsummary>
+ <desc>
+ <p>Ensures that any buffers kept by the operating system
+ (not by the Erlang runtime system) are written to disk. In
+ many ways it resembles <c>fsync</c> but it does not update
+ some of the metadata of the file, such as the access time. On
+ some platforms this function has no effect.</p>
+ <p>Applications that access databases or log files often write
+ a tiny data fragment (for example, one line in a log file) and then
+ call <c>fsync()</c> immediately to ensure that the written
+ data is physically stored on the hard disk. Unfortunately, <c>fsync()</c>
+ always initiates two write operations: one for the newly
+ written data and another one to update the modification
+ time stored in the <c>inode</c>. If the modification time is not a part
+ of the transaction concept, <c>fdatasync()</c> can be used to avoid
+ unnecessary <c>inode</c> disk write operations.</p>
+ <p>Available only in some POSIX systems, this call results in a
+ call to <c>fsync()</c>, or has no effect in systems not providing
+ the <c>fdatasync()</c> syscall.</p>
</desc>
</func>
<func>
<name name="del_dir" arity="1"/>
- <fsummary>Delete a directory</fsummary>
+ <fsummary>Delete a directory.</fsummary>
<desc>
- <p>Tries to delete the directory <c><anno>Dir</anno></c>.
+ <p>Tries to delete directory <c><anno>Dir</anno></c>.
The directory must
be empty before it can be deleted. Returns <c>ok</c> if
successful.</p>
- <p>Typical error reasons are:</p>
+ <p>Typical error reasons:</p>
<taglist>
<tag><c>eacces</c></tag>
<item>
@@ -351,11 +379,11 @@
</func>
<func>
<name name="delete" arity="1"/>
- <fsummary>Delete a file</fsummary>
+ <fsummary>Delete a file.</fsummary>
<desc>
- <p>Tries to delete the file <c><anno>Filename</anno></c>.
+ <p>Tries to delete file <c><anno>Filename</anno></c>.
Returns <c>ok</c> if successful.</p>
- <p>Typical error reasons are:</p>
+ <p>Typical error reasons:</p>
<taglist>
<tag><c>enoent</c></tag>
<item>
@@ -367,32 +395,32 @@
</item>
<tag><c>eperm</c></tag>
<item>
- <p>The file is a directory and the user is not super-user.</p>
+ <p>The file is a directory and the user is not superuser.</p>
</item>
<tag><c>enotdir</c></tag>
<item>
- <p>A component of the file name is not a directory. On some
+ <p>A component of the filename is not a directory. On some
platforms, <c>enoent</c> is returned instead.</p>
</item>
<tag><c>einval</c></tag>
<item>
- <p><c><anno>Filename</anno></c> had an improper type, such as tuple.</p>
+ <p><c><anno>Filename</anno></c> has an improper type, such as tuple.</p>
</item>
</taglist>
<warning>
- <p>In a future release, a bad type for the
- <c><anno>Filename</anno></c> argument will probably generate
+ <p>In a future release, a bad type for argument
+ <c><anno>Filename</anno></c> will probably generate
an exception.</p>
</warning>
</desc>
</func>
<func>
<name name="eval" arity="1"/>
- <fsummary>Evaluate Erlang expressions in a file</fsummary>
+ <fsummary>Evaluate Erlang expressions in a file.</fsummary>
<desc>
<p>Reads and evaluates Erlang expressions, separated by '.' (or
- ',', a sequence of expressions is also an expression), from
- <c><anno>Filename</anno></c>. The actual result of the evaluation
+ ',', a sequence of expressions is also an expression) from
+ <c><anno>Filename</anno></c>. The result of the evaluation
is not returned; any expression sequence in the file must be there
for its side effect. Returns one of the following:</p>
<taglist>
@@ -403,35 +431,36 @@
<tag><c>{error, atom()}</c></tag>
<item>
<p>An error occurred when opening the file or reading it.
- See <c>open/2</c> for a list of typical error codes.</p>
+ For a list of typical error codes, see
+ <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</item>
<tag><c>{error, {<anno>Line</anno>, <anno>Mod</anno>,
<anno>Term</anno>}}</c></tag>
<item>
<p>An error occurred when interpreting the Erlang
- expressions in the file. Use <c>format_error/1</c> to
- convert the three-element tuple to an English description
- of the error.</p>
+ expressions in the file. To convert the three-element tuple
+ to an English description of the error, use
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.</p>
</item>
</taglist>
- <p>The encoding of of <c><anno>Filename</anno></c> can be set
- by a comment as described in <seealso
- marker="stdlib:epp#encoding">epp(3)</seealso>.</p>
+ <p>The encoding of <c><anno>Filename</anno></c> can be set
+ by a comment, as described in
+ <seealso marker="stdlib:epp#encoding"><c>stdlib:epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="eval" arity="2"/>
- <fsummary>Evaluate Erlang expressions in a file</fsummary>
+ <fsummary>Evaluate Erlang expressions in a file.</fsummary>
<desc>
- <p>The same as <c>eval/1</c> but the variable bindings
- <c><anno>Bindings</anno></c> are used in the evaluation. See
- <seealso marker="stdlib:erl_eval">erl_eval(3)</seealso> about
- variable bindings.</p>
+ <p>The same as <c>eval/1</c>, but the variable bindings
+ <c><anno>Bindings</anno></c> are used in the evaluation. For information
+ about the variable bindings, see
+ <seealso marker="stdlib:erl_eval"><c>stdlib:erl_eval(3)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="format_error" arity="1"/>
- <fsummary>Return a descriptive string for an error reason</fsummary>
+ <fsummary>Return a descriptive string for an error reason.</fsummary>
<desc>
<p>Given the error reason returned by any function in this
module, returns a descriptive string of the error in English.</p>
@@ -439,17 +468,17 @@
</func>
<func>
<name name="get_cwd" arity="0"/>
- <fsummary>Get the current working directory</fsummary>
+ <fsummary>Get the current working directory.</fsummary>
<desc>
<p>Returns <c>{ok, <anno>Dir</anno>}</c>, where <c><anno>Dir</anno></c>
is the current
working directory of the file server.</p>
<note>
<p>In rare circumstances, this function can fail on Unix.
- It may happen if read permission does not exist for
+ It can occur if read permission does not exist for
the parent directories of the current directory.</p>
</note>
- <p>Typical error reasons are:</p>
+ <p>A typical error reason:</p>
<taglist>
<tag><c>eacces</c></tag>
<item>
@@ -461,17 +490,19 @@
</func>
<func>
<name name="get_cwd" arity="1"/>
- <fsummary>Get the current working directory for the drive specified</fsummary>
+ <fsummary>Get the current working directory for the specified drive.</fsummary>
<desc>
- <p><c><anno>Drive</anno></c> should be of the form
- "<c>Letter</c><c>:</c>",
- for example "c:". Returns <c>{ok, <anno>Dir</anno>}</c> or
+ <p>Returns <c>{ok, <anno>Dir</anno>}</c> or
<c>{error, <anno>Reason</anno>}</c>, where <c><anno>Dir</anno></c>
- is the current
- working directory of the drive specified.</p>
- <p>This function returns <c>{error, enotsup}</c> on platforms
- which have no concept of current drive (Unix, for example).</p>
- <p>Typical error reasons are:</p>
+ is the current working directory of the specified drive.</p>
+
+ <p><c><anno>Drive</anno></c> is to be of the form
+ "<c>Letter</c><c>:</c>", for example, "c:".</p>
+
+ <p>Returns <c>{error, enotsup}</c> on platforms
+ that have no concept of current drive (Unix, for example).</p>
+
+ <p>Typical error reasons:</p>
<taglist>
<tag><c>enotsup</c></tag>
<item>
@@ -490,16 +521,16 @@
</func>
<func>
<name name="list_dir" arity="1"/>
- <fsummary>List files in a directory</fsummary>
+ <fsummary>List files in a directory.</fsummary>
<desc>
<p>Lists all files in a directory, <em>except</em> files
- with "raw" names. Returns
- <c>{ok, <anno>Filenames</anno>}</c> if successful.
- Otherwise, it returns <c>{error, <anno>Reason</anno>}</c>.
+ with raw filenames. Returns
+ <c>{ok, <anno>Filenames</anno>}</c> if successful,
+ otherwise <c>{error, <anno>Reason</anno>}</c>.
<c><anno>Filenames</anno></c> is a list of
the names of all the files in the directory. The names are
not sorted.</p>
- <p>Typical error reasons are:</p>
+ <p>Typical error reasons:</p>
<taglist>
<tag><c>eacces</c></tag>
<item>
@@ -513,24 +544,24 @@
<tag><c>{no_translation, <anno>Filename</anno>}</c></tag>
<item>
<p><c><anno>Filename</anno></c> is a <c>binary()</c> with
- characters coded in ISO-latin-1 and the VM was started
- with the parameter <c>+fnue</c>.</p>
+ characters coded in ISO Latin-1 and the VM was started
+ with parameter <c>+fnue</c>.</p>
</item>
</taglist>
</desc>
</func>
<func>
<name name="list_dir_all" arity="1"/>
- <fsummary>List all files in a directory</fsummary>
+ <fsummary>List all files in a directory.</fsummary>
<desc>
<p><marker id="list_dir_all"/>Lists all the files in a directory,
- including files with "raw" names.
- Returns <c>{ok, <anno>Filenames</anno>}</c> if successful.
- Otherwise, it returns <c>{error, <anno>Reason</anno>}</c>.
+ including files with raw filenames.
+ Returns <c>{ok, <anno>Filenames</anno>}</c> if successful,
+ otherwise <c>{error, <anno>Reason</anno>}</c>.
<c><anno>Filenames</anno></c> is a list of
the names of all the files in the directory. The names are
not sorted.</p>
- <p>Typical error reasons are:</p>
+ <p>Typical error reasons:</p>
<taglist>
<tag><c>eacces</c></tag>
<item>
@@ -546,12 +577,12 @@
</func>
<func>
<name name="make_dir" arity="1"/>
- <fsummary>Make a directory</fsummary>
+ <fsummary>Make a directory.</fsummary>
<desc>
- <p>Tries to create the directory <c><anno>Dir</anno></c>. Missing parent
+ <p>Tries to create directory <c><anno>Dir</anno></c>. Missing parent
directories are <em>not</em> created. Returns <c>ok</c> if
successful.</p>
- <p>Typical error reasons are:</p>
+ <p>Typical error reasons:</p>
<taglist>
<tag><c>eacces</c></tag>
<item>
@@ -560,7 +591,7 @@
</item>
<tag><c>eexist</c></tag>
<item>
- <p>There is already a file or directory named <c><anno>Dir</anno></c>.</p>
+ <p>A file or directory named <c><anno>Dir</anno></c> exists already.</p>
</item>
<tag><c>enoent</c></tag>
<item>
@@ -568,7 +599,7 @@
</item>
<tag><c>enospc</c></tag>
<item>
- <p>There is a no space left on the device.</p>
+ <p>No space is left on the device.</p>
</item>
<tag><c>enotdir</c></tag>
<item>
@@ -580,13 +611,13 @@
</func>
<func>
<name name="make_link" arity="2"/>
- <fsummary>Make a hard link to a file</fsummary>
+ <fsummary>Make a hard link to a file.</fsummary>
<desc>
<p>Makes a hard link from <c><anno>Existing</anno></c> to
- <c><anno>New</anno></c>, on
- platforms that support links (Unix and Windows). This function returns
- <c>ok</c> if the link was successfully created, or
- <c>{error, <anno>Reason</anno>}</c>. On platforms that do not support
+ <c><anno>New</anno></c> on
+ platforms supporting links (Unix and Windows). This function returns
+ <c>ok</c> if the link was successfully created, otherwise
+ <c>{error, <anno>Reason</anno>}</c>. On platforms not supporting
links, <c>{error,enotsup}</c> is returned.</p>
<p>Typical error reasons:</p>
<taglist>
@@ -609,17 +640,16 @@
</func>
<func>
<name name="make_symlink" arity="2"/>
- <fsummary>Make a symbolic link to a file or directory</fsummary>
+ <fsummary>Make a symbolic link to a file or directory.</fsummary>
<desc>
- <p>This function creates a symbolic link <c><anno>New</anno></c> to
- the file or directory <c><anno>Existing</anno></c>, on platforms that
- support symbolic links (most Unix systems and Windows beginning with
+ <p>Creates a symbolic link <c><anno>New</anno></c> to
+ the file or directory <c><anno>Existing</anno></c> on platforms
+ supporting symbolic links (most Unix systems and Windows, beginning with
Vista).
- <c><anno>Existing</anno></c> need not exist.
- This function returns <c>ok</c> if the link was
- successfully created, or <c>{error, <anno>Reason</anno>}</c>.
- On platforms
- that do not support symbolic links, <c>{error, enotsup}</c>
+ <c><anno>Existing</anno></c> does not need to exist.
+ Returns <c>ok</c> if the link is
+ successfully created, otherwise <c>{error, <anno>Reason</anno>}</c>.
+ On platforms not supporting symbolic links, <c>{error, enotsup}</c>
is returned.</p>
<p>Typical error reasons:</p>
<taglist>
@@ -646,23 +676,23 @@
</func>
<func>
<name name="native_name_encoding" arity="0"/>
- <fsummary>Return the VM's configured filename encoding</fsummary>
+ <fsummary>Return the configured filename encoding of the VM.</fsummary>
<desc>
- <p><marker id="native_name_encoding"/>This function returns
- the file name encoding mode. If it is <c>latin1</c>, the
- system does no translation of file names. If it is
- <c>utf8</c>, file names will be converted back and forth to
- the native file name encoding (usually UTF-8, but UTF-16 on
+ <p><marker id="native_name_encoding"/>Returns
+ the filename encoding mode. If it is <c>latin1</c>, the
+ system translates no filenames. If it is
+ <c>utf8</c>, filenames are converted back and forth to
+ the native filename encoding (usually UTF-8, but UTF-16 on
Windows).</p>
</desc>
</func>
<func>
<name name="open" arity="2"/>
- <fsummary>Open a file</fsummary>
+ <fsummary>Open a file.</fsummary>
<desc>
- <p>Opens the file <c><anno>File</anno></c> in the mode determined
- by <c><anno>Modes</anno></c>, which may contain one or more of the
- following items:</p>
+ <p>Opens file <c><anno>File</anno></c> in the mode determined
+ by <c><anno>Modes</anno></c>, which can contain one or more of the
+ following options:</p>
<taglist>
<tag><c>read</c></tag>
<item>
@@ -671,98 +701,100 @@
<tag><c>write</c></tag>
<item>
<p>The file is opened for writing. It is created if it does
- not exist. If the file exists, and if <c>write</c> is not
- combined with <c>read</c>, the file will be truncated.</p>
+ not exist. If the file exists and <c>write</c> is not
+ combined with <c>read</c>, the file is truncated.</p>
</item>
<tag><c>append</c></tag>
<item>
- <p>The file will be opened for writing, and it will be
- created if it does not exist. Every write operation to a
- file opened with <c>append</c> will take place at
- the end of the file.</p>
+ <p>The file is opened for writing. It is created if it does
+ not exist. Every write operation to a file opened with
+ <c>append</c> takes place at the end of the file.</p>
</item>
<tag><c>exclusive</c></tag>
<item>
- <p>The file, when opened for writing, is created if it
- does not exist. If the file exists, open will return
- <c>{error, eexist}</c>.</p>
+ <p>The file is opened for writing. It is created if it does
+ not exist. If the file exists, <c>{error, eexist}</c>
+ is returned.</p>
<warning><p>This option does not guarantee exclusiveness on
- file systems that do not support O_EXCL properly,
+ file systems not supporting <c>O_EXCL</c> properly,
such as NFS. Do not depend on this option unless you
know that the file system supports it (in general, local
- file systems should be safe).</p></warning>
+ file systems are safe).</p></warning>
</item>
<tag><c>raw</c></tag>
<item>
<p><marker id="raw"/>
- The <c>raw</c> option allows faster access to a file,
- because no Erlang process is needed to handle the file.
+ Allows faster access to a file,
+ as no Erlang process is needed to handle the file.
However, a file opened in this way has the following
limitations:</p>
<list type="bulleted">
- <item>The functions in the <c>io</c> module cannot be used,
- because they can only talk to an Erlang process.
- Instead, use the <c>read/2</c>, <c>read_line/1</c> and
- <c>write/2</c>
- functions.</item>
- <item>Especially if <c>read_line/1</c> is to be used on a <c>raw</c> file, it is recommended to combine this option with the <c>{read_ahead, Size}</c> option as line oriented I/O is inefficient without buffering.</item>
- <item>Only the Erlang process which opened the file can use
- it.</item>
- <item>A remote Erlang file server cannot be used;
- the computer on which the Erlang node is running must
+ <item><p>The functions in the <c>io</c> module cannot be used,
+ as they can only talk to an Erlang process.
+ Instead, use functions
+ <seealso marker="#read/2"><c>read/2</c></seealso>,
+ <seealso marker="#read_line/1"><c>read_line/1</c></seealso>, and
+ <seealso marker="#write/2"><c>write/2</c></seealso>.</p></item>
+ <item><p>Especially if <c>read_line/1</c> is to be used on a <c>raw</c>
+ file, it is recommended to combine this option with option
+ <c>{read_ahead, Size}</c> as line-oriented I/O is inefficient
+ without buffering.</p></item>
+ <item><p>Only the Erlang process that opened the file can use
+ it.</p></item>
+ <item><p>A remote Erlang file server cannot be used.
+ The computer on which the Erlang node is running must
have access to the file system (directly or through
- NFS).</item>
+ NFS).</p></item>
</list>
</item>
<tag><c>binary</c></tag>
<item>
- <p>When this option has been given, read operations on the file
- will return binaries rather than lists.</p>
+ <p>Read operations on the file return binaries rather than lists.</p>
</item>
<tag><c>{delayed_write, Size, Delay}</c></tag>
<item>
- <p>If this option is used, the data in subsequent
- <c>write/2</c> calls is buffered until there are at least
- <c>Size</c> bytes buffered, or until the oldest buffered
+ <p>Data in subsequent
+ <c>write/2</c> calls is buffered until at least
+ <c>Size</c> bytes are buffered, or until the oldest buffered
data is <c>Delay</c> milliseconds old. Then all buffered
data is written in one operating system call.
The buffered data is also flushed before some other file
operation than <c>write/2</c> is executed.</p>
<p>The purpose of this option is to increase performance
- by reducing the number of operating system calls, so the
- <c>write/2</c> calls should be for sizes significantly
- less than <c>Size</c>, and not interspersed by to many
- other file operations, for this to happen.</p>
+ by reducing the number of operating system calls. Thus, the
+ <c>write/2</c> calls must be for sizes significantly
+ less than <c>Size</c>, and not interspersed by too many
+ other file operations.</p>
<p>When this option is used, the result of <c>write/2</c>
- calls may prematurely be reported as successful, and if
- a write error should actually occur the error is
- reported as the result of the next file operation, which
- is not executed.</p>
+ calls can prematurely be reported as successful, and if
+ a write error occurs, the error is reported as the result
+ of the next file operation, which is not executed.</p>
<p>For example, when <c>delayed_write</c> is used, after a
- number of <c>write/2</c> calls, <c>close/1</c> might
- return <c>{error, enospc}</c> because there was not enough
- space on the disc for previously written data, and
- <c>close/1</c> should probably be called again since the
+ number of <c>write/2</c> calls, <c>close/1</c> can
+ return <c>{error, enospc}</c>, as there is not enough
+ space on the disc for previously written data.
+ <c>close/1</c> must probably be called again, as the
file is still open.</p>
</item>
<tag><c>delayed_write</c></tag>
<item>
<p>The same as <c>{delayed_write, Size, Delay}</c> with
reasonable default values for <c>Size</c> and
- <c>Delay</c>. (Roughly some 64 KBytes, 2 seconds)</p>
+ <c>Delay</c> (roughly some 64 KB, 2 seconds).</p>
</item>
<tag><c>{read_ahead, Size}</c></tag>
<item>
- <p>This option activates read data buffering. If
+ <p>Activates read data buffering. If
<c>read/2</c> calls are for significantly less than
- <c>Size</c> bytes, read operations towards the operating
+ <c>Size</c> bytes, read operations to the operating
system are still performed for blocks of <c>Size</c>
bytes. The extra data is buffered and returned in
subsequent <c>read/2</c> calls, giving a performance gain
- since the number of operating system calls is reduced.</p>
- <p>The <c>read_ahead</c> buffer is also highly utilized
- by the <c>read_line/1</c> function in <c>raw</c> mode,
- why this option is recommended (for performance reasons)
+ as the number of operating system calls is reduced.</p>
+ <p>The <c>read_ahead</c> buffer is also highly used
+ by function <c>read_line/1</c> in <c>raw</c> mode,
+ therefore this option is recommended
+ (for performance reasons)
when accessing raw files using that function.</p>
<p>If <c>read/2</c> calls are for sizes not significantly
less than, or even greater than <c>Size</c> bytes, no
@@ -771,93 +803,141 @@
<tag><c>read_ahead</c></tag>
<item>
<p>The same as <c>{read_ahead, Size}</c> with a reasonable
- default value for <c>Size</c>. (Roughly some 64 KBytes)</p>
+ default value for <c>Size</c> (roughly some 64 KB).</p>
</item>
<tag><c>compressed</c></tag>
<item>
<p>Makes it possible to read or write gzip compressed
- files. The <c>compressed</c> option must be combined
- with either <c>read</c> or <c>write</c>, but not both.
- Note that the file size obtained with
- <c>read_file_info/1</c> will most probably not match the
- number of bytes that can be read from a compressed file.</p>
+ files. Option <c>compressed</c> must be combined
+ with <c>read</c> or <c>write</c>, but not both.
+ Notice that the file size obtained with
+ <seealso marker="#read_file_info/1"><c>read_file_info/1</c></seealso>
+ does probably not match the number of bytes that can be
+ read from a compressed file.</p>
</item>
<tag><c>{encoding, Encoding}</c></tag>
<item>
- <p>Makes the file perform automatic translation of characters to and from a specific (Unicode) encoding. Note that the data supplied to file:write or returned by file:read still is byte oriented, this option only denotes how data is actually stored in the disk file.</p>
- <p>Depending on the encoding, different methods of reading and writing data is preferred. The default encoding of <c>latin1</c> implies using this (the file) module for reading and writing data, as the interfaces provided here work with byte-oriented data, while using other (Unicode) encodings makes the <seealso marker="stdlib:io">io(3)</seealso> module's <c>get_chars</c>, <c>get_line</c> and <c>put_chars</c> functions more suitable, as they can work with the full Unicode range.</p>
- <p>If data is sent to an <c>io_device()</c> in a format that cannot be converted to the specified encoding, or if data is read by a function that returns data in a format that cannot cope with the character range of the data, an error occurs and the file will be closed.</p>
- <p>The allowed values for <c>Encoding</c> are:</p>
+ <p>Makes the file perform automatic translation of characters to
+ and from a specific (Unicode) encoding. Notice that the data supplied
+ to
+ <seealso marker="#write/2"><c>write/2</c></seealso>
+ or returned by
+ <seealso marker="#read/2"><c>read/2</c></seealso>
+ still is byte-oriented; this option
+ denotes only how data is stored in the disk file.</p>
+ <p>Depending on the encoding, different methods of reading and writing
+ data is preferred. The default encoding of <c>latin1</c> implies using
+ this module (<c>file</c>) for reading and writing data as the interfaces
+ provided here work with byte-oriented data. Using other (Unicode)
+ encodings makes the
+ <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso> functions
+ <c>get_chars</c>, <c>get_line</c>, and <c>put_chars</c> more suitable,
+ as they can work with the full Unicode range.</p>
+ <p>If data is sent to an <c>io_device()</c> in a format that cannot be
+ converted to the specified encoding, or if data is read by a function
+ that returns data in a format that cannot cope with the character range
+ of the data, an error occurs and the file is closed.</p>
+ <p>Allowed values for <c>Encoding</c>:</p>
<taglist>
<tag><c>latin1</c></tag>
<item>
- <p>The default encoding. Bytes supplied to i.e. file:write are written as is on the file, likewise bytes read from the file are returned to i.e. file:read as is. If the <seealso marker="stdlib:io">io(3)</seealso> module is used for writing, the file can only cope with Unicode characters up to codepoint 255 (the ISO-latin-1 range).</p>
+ <p>The default encoding. Bytes supplied to the file, that is,
+ <seealso marker="#write/2"><c>write/2</c></seealso>
+ are written "as is" on the file. Likewise, bytes read from the file,
+ that is,
+ <seealso marker="#read/2"><c>read/2</c></seealso> are
+ returned "as is". If module
+ <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso> is used for
+ writing, the file can only cope with Unicode characters up to code point
+ 255 (the ISO Latin-1 range).</p>
</item>
- <tag><c>unicode</c> or <c>utf8</c></tag>
+ <tag><c>unicode or utf8</c></tag>
<item>
- <p>Characters are translated to and from the UTF-8 encoding before being written to or read from the file. A file opened in this way might be readable using the file:read function, as long as no data stored on the file lies beyond the ISO-latin-1 range (0..255), but failure will occur if the data contains Unicode codepoints beyond that range. The file is best read with the functions in the Unicode aware <seealso marker="stdlib:io">io(3)</seealso> module.</p>
- <p>Bytes written to the file by any means are translated to UTF-8 encoding before actually being stored on the disk file.</p>
+ <p>Characters are translated to and from UTF-8 encoding before they are
+ written to or read from the file. A file opened in this way can be
+ readable using function
+ <seealso marker="#read/2"><c>read/2</c></seealso>,
+ as long as no data stored on
+ the file lies beyond the ISO Latin-1 range (0..255), but failure occurs
+ if the data contains Unicode code points beyond that range. The file is
+ best read with the functions in the Unicode aware module
+ <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso>.</p>
+ <p>Bytes written to the file by any means are translated to UTF-8 encoding
+ before being stored on the disk file.</p>
</item>
- <tag><c>utf16</c> or <c>{utf16,big}</c></tag>
+ <tag><c>utf16 or {utf16,big}</c></tag>
<item>
- <p>Works like <c>unicode</c>, but translation is done to and from big endian UTF-16 instead of UTF-8.</p>
+ <p>Works like <c>unicode</c>, but translation is done to and from big
+ endian UTF-16 instead of UTF-8.</p>
</item>
<tag><c>{utf16,little}</c></tag>
<item>
- <p>Works like <c>unicode</c>, but translation is done to and from little endian UTF-16 instead of UTF-8.</p>
+ <p>Works like <c>unicode</c>, but translation is done to and from little
+ endian UTF-16 instead of UTF-8.</p>
</item>
- <tag><c>utf32</c> or <c>{utf32,big}</c></tag>
+ <tag><c>utf32 or {utf32,big}</c></tag>
<item>
- <p>Works like <c>unicode</c>, but translation is done to and from big endian UTF-32 instead of UTF-8.</p>
+ <p>Works like <c>unicode</c>, but translation is done to and from big
+ endian UTF-32 instead of UTF-8.</p>
</item>
<tag><c>{utf32,little}</c></tag>
<item>
- <p>Works like <c>unicode</c>, but translation is done to and from little endian UTF-32 instead of UTF-8.</p>
+ <p>Works like <c>unicode</c>, but translation is done to and from little
+ endian UTF-32 instead of UTF-8.</p>
</item>
</taglist>
- <p>The Encoding can be changed for a file "on the fly" by using the <seealso marker="stdlib:io#setopts/2">io:setopts/2</seealso> function, why a file can be analyzed in latin1 encoding for i.e. a BOM, positioned beyond the BOM and then be set for the right encoding before further reading.See the <seealso marker="stdlib:unicode">unicode(3)</seealso> module for functions identifying BOM's.</p>
+ <p>The Encoding can be changed for a file "on the fly" by using function
+ <seealso marker="stdlib:io#setopts/2"><c>io:setopts/2</c></seealso>.
+ So a file can be analyzed in latin1 encoding for, for example, a BOM,
+ positioned beyond the BOM and then be set for the right encoding before
+ further reading. For functions identifying BOMs, see module
+ <seealso marker="stdlib:unicode"><c>stdlib:unicode(3)</c></seealso>. </p>
<p>This option is not allowed on <c>raw</c> files.</p>
</item>
<tag><c>ram</c></tag>
<item>
- <p><c>File</c> must be <c>iodata()</c>. Returns an <c>fd()</c> which lets the <c>file</c> module operate on the data in-memory as if it is a file.</p>
+ <p><c>File</c> must be <c>iodata()</c>. Returns an <c>fd()</c>, which lets
+ module <c>file</c> operate on the data in-memory as if it is a file.</p>
</item>
<tag><c>sync</c></tag>
<item>
- <p>On platforms that support it, enables the POSIX <c>O_SYNC</c> synchronous I/O flag or its platform-dependent
- equivalent (e.g., <c>FILE_FLAG_WRITE_THROUGH</c> on Windows) so that writes to the file block until the data has
- been physically written to disk. Be aware, though, that the exact semantics of this flag differ from platform to
- platform; for example, neither Linux nor Windows guarantees that all file metadata are also written before the call
- returns. For precise semantics, check the details of your platform's documentation. On platforms with no
- support for POSIX <c>O_SYNC</c> or equivalent, use of the <c>sync</c> flag causes <c>open</c> to return
- <c>{error, enotsup}</c>.</p>
+ <p>On platforms supporting it, enables the POSIX <c>O_SYNC</c> synchronous
+ I/O flag or its platform-dependent equivalent (for example,
+ <c>FILE_FLAG_WRITE_THROUGH</c> on Windows) so that writes to the file
+ block until the data is physically written to disk. However, be aware
+ that the exact semantics of this flag differ from platform to
+ platform. For example, none of Linux or Windows guarantees that all file
+ metadata are also written before the call returns. For precise semantics,
+ check the details of your platform documentation. On platforms with no
+ support for POSIX <c>O_SYNC</c> or equivalent, use of the <c>sync</c>
+ flag causes <c>open</c> to return <c>{error, enotsup}</c>.</p>
</item>
</taglist>
<p>Returns:</p>
<taglist>
<tag><c>{ok, <anno>IoDevice</anno>}</c></tag>
<item>
- <p>The file has been opened in the requested mode.
+ <p>The file is opened in the requested mode.
<c><anno>IoDevice</anno></c> is a reference to the file.</p>
</item>
<tag><c>{error, <anno>Reason</anno>}</c></tag>
<item>
- <p>The file could not be opened.</p>
+ <p>The file cannot be opened.</p>
</item>
</taglist>
- <p><c><anno>IoDevice</anno></c> is really the pid of the process which
+ <p><c><anno>IoDevice</anno></c> is really the pid of the process that
handles the file. This process is linked to the process
- which originally opened the file. If any process to which
- the <c><anno>IoDevice</anno></c> is linked terminates, the file will
- be closed and the process itself will be terminated.
+ that originally opened the file. If any process to which
+ the <c><anno>IoDevice</anno></c> is linked terminates, the file is
+ closed and the process itself is terminated.
An <c><anno>IoDevice</anno></c> returned from this call can be used
- as an argument to the IO functions (see
- <seealso marker="stdlib:io">io(3)</seealso>).</p>
+ as an argument to the I/O functions (see
+ <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso>).</p>
<note>
- <p>In previous versions of <c>file</c>, modes were given
+ <p>In previous versions of <c>file</c>, modes were specified
as one of the atoms <c>read</c>, <c>write</c>, or
<c>read_write</c> instead of a list. This is still allowed
- for reasons of backwards compatibility, but should not be
+ for reasons of backwards compatibility, but is not to be
used for new code. Also note that <c>read_write</c> is not
allowed in a mode list.</p>
</note>
@@ -874,17 +954,17 @@
</item>
<tag><c>eisdir</c></tag>
<item>
- <p>The named file is not a regular file. It may be a
- directory, a fifo, or a device.</p>
+ <p>The named file is not a regular file. It can be a
+ directory, a FIFO, or a device.</p>
</item>
<tag><c>enotdir</c></tag>
<item>
- <p>A component of the file name is not a directory. On some
+ <p>A component of the filename is not a directory. On some
platforms, <c>enoent</c> is returned instead.</p>
</item>
<tag><c>enospc</c></tag>
<item>
- <p>There is a no space left on the device (if <c>write</c>
+ <p>There is no space left on the device (if <c>write</c>
access was specified).</p>
</item>
</taglist>
@@ -892,182 +972,186 @@
</func>
<func>
<name name="path_consult" arity="2"/>
- <fsummary>Read Erlang terms from a file</fsummary>
+ <fsummary>Read Erlang terms from a file.</fsummary>
<desc>
<p>Searches the path <c><anno>Path</anno></c> (a list of directory
names) until the file <c><anno>Filename</anno></c> is found.
If <c><anno>Filename</anno></c>
is an absolute filename, <c><anno>Path</anno></c> is ignored.
- Then reads Erlang terms, separated by '.', from the file.
- Returns one of the following:</p>
+ Then reads Erlang terms, separated by '.', from the file.</p>
+ <p>Returns one of the following:</p>
<taglist>
<tag><c>{ok, <anno>Terms</anno>, <anno>FullName</anno>}</c></tag>
<item>
- <p>The file was successfully read. <c><anno>FullName</anno></c> is
+ <p>The file is successfully read. <c><anno>FullName</anno></c> is
the full name of the file.</p>
</item>
<tag><c>{error, enoent}</c></tag>
<item>
- <p>The file could not be found in any of the directories in
+ <p>The file cannot be found in any of the directories in
<c><anno>Path</anno></c>.</p>
</item>
<tag><c>{error, atom()}</c></tag>
<item>
<p>An error occurred when opening the file or reading it.
- See <seealso marker="#open/2">open/2</seealso> for a list
- of typical error codes.</p>
+ For a list of typical error codes, see
+ <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</item>
<tag><c>{error, {<anno>Line</anno>, <anno>Mod</anno>,
<anno>Term</anno>}}</c></tag>
<item>
<p>An error occurred when interpreting the Erlang terms in
- the file. Use <c>format_error/1</c> to convert
- the three-element tuple to an English description of
+ the file. Use
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>
+ to convert the three-element tuple to an English description of
the error.</p>
</item>
</taglist>
- <p>The encoding of of <c><anno>Filename</anno></c> can be set
- by a comment as described in <seealso
- marker="stdlib:epp#encoding">epp(3)</seealso>.</p>
+ <p>The encoding of <c><anno>Filename</anno></c> can be set
+ by a comment as described in
+ <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="path_eval" arity="2"/>
- <fsummary>Evaluate Erlang expressions in a file</fsummary>
+ <fsummary>Evaluate Erlang expressions in a file.</fsummary>
<desc>
<p>Searches the path <c><anno>Path</anno></c> (a list of directory
names) until the file <c><anno>Filename</anno></c> is found.
- If <c><anno>Filename</anno></c> is an absolute file name,
+ If <c><anno>Filename</anno></c> is an absolute filename,
<c><anno>Path</anno></c> is ignored. Then reads
and evaluates Erlang expressions, separated by '.' (or ',', a
sequence of expressions is also an expression), from the file.
- The actual result of evaluation is not returned; any
+ The result of evaluation is not returned; any
expression sequence in the file must be there for its side
- effect. Returns one of the following:</p>
+ effect.</p>
+ <p>Returns one of the following:</p>
<taglist>
<tag><c>{ok, <anno>FullName</anno>}</c></tag>
<item>
- <p>The file was read and evaluated. <c><anno>FullName</anno></c> is
+ <p>The file is read and evaluated. <c><anno>FullName</anno></c> is
the full name of the file.</p>
</item>
<tag><c>{error, enoent}</c></tag>
<item>
- <p>The file could not be found in any of the directories in
+ <p>The file cannot be found in any of the directories in
<c><anno>Path</anno></c>.</p>
</item>
<tag><c>{error, atom()}</c></tag>
<item>
<p>An error occurred when opening the file or reading it.
- See <seealso marker="#open/2">open/2</seealso> for a list
- of typical error codes.</p>
+ For a list of typical error codes, see
+ <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</item>
<tag><c>{error, {<anno>Line</anno>, <anno>Mod</anno>,
<anno>Term</anno>}}</c></tag>
<item>
<p>An error occurred when interpreting the Erlang
- expressions in the file. Use <c>format_error/1</c> to
- convert the three-element tuple to an English description
+ expressions in the file. Use
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>
+ to convert the three-element tuple to an English description
of the error.</p>
</item>
</taglist>
- <p>The encoding of of <c><anno>Filename</anno></c> can be set
- by a comment as described in <seealso
- marker="stdlib:epp#encoding">epp(3)</seealso>.</p>
+ <p>The encoding of <c><anno>Filename</anno></c> can be set
+ by a comment as described in
+ <seealso marker="stdlib:epp#encoding"><c>stdlib:epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="path_open" arity="3"/>
- <fsummary>Open a file</fsummary>
+ <fsummary>Open a file.</fsummary>
<desc>
<p>Searches the path <c><anno>Path</anno></c> (a list of directory
names) until the file <c><anno>Filename</anno></c> is found.
If <c><anno>Filename</anno></c>
- is an absolute file name, <c><anno>Path</anno></c> is ignored.
- Then opens the file in the mode determined by <c><anno>Modes</anno></c>.
- Returns one of the following:</p>
+ is an absolute filename, <c><anno>Path</anno></c> is ignored.
+ Then opens the file in the mode determined by <c><anno>Modes</anno></c>.</p>
+ <p>Returns one of the following:</p>
<taglist>
<tag><c>{ok, <anno>IoDevice</anno>, <anno>FullName</anno>}</c></tag>
<item>
- <p>The file has been opened in the requested mode.
+ <p>The file is opened in the requested mode.
<c><anno>IoDevice</anno></c> is a reference to the file and
<c><anno>FullName</anno></c> is the full name of the file.</p>
</item>
<tag><c>{error, enoent}</c></tag>
<item>
- <p>The file could not be found in any of the directories in
+ <p>The file cannot be found in any of the directories in
<c><anno>Path</anno></c>.</p>
</item>
<tag><c>{error, atom()}</c></tag>
<item>
- <p>The file could not be opened.</p>
+ <p>The file cannot be opened.</p>
</item>
</taglist>
</desc>
</func>
<func>
<name name="path_script" arity="2"/>
- <fsummary>Evaluate and return the value of Erlang expressions in a file</fsummary>
+ <fsummary>Evaluate and return the value of Erlang expressions in a file.</fsummary>
<desc>
<p>Searches the path <c><anno>Path</anno></c> (a list of directory
names) until the file <c><anno>Filename</anno></c> is found.
- If <c><anno>Filename</anno></c> is an absolute file name,
+ If <c><anno>Filename</anno></c> is an absolute filename,
<c><anno>Path</anno></c> is ignored. Then reads
and evaluates Erlang expressions, separated by '.' (or ',', a
- sequence of expressions is also an expression), from the file.
- Returns one of the following:</p>
+ sequence of expressions is also an expression), from the file.</p>
+ <p>Returns one of the following:</p>
<taglist>
<tag><c>{ok, <anno>Value</anno>, <anno>FullName</anno>}</c></tag>
<item>
- <p>The file was read and evaluated. <c><anno>FullName</anno></c> is
+ <p>The file is read and evaluated. <c><anno>FullName</anno></c> is
the full name of the file and <c><anno>Value</anno></c> the value of
the last expression.</p>
</item>
<tag><c>{error, enoent}</c></tag>
<item>
- <p>The file could not be found in any of the directories in
+ <p>The file cannot be found in any of the directories in
<c><anno>Path</anno></c>.</p>
</item>
<tag><c>{error, atom()}</c></tag>
<item>
<p>An error occurred when opening the file or reading it.
- See <seealso marker="#open/2">open/2</seealso> for a list
- of typical error codes.</p>
+ For a list of typical error codes, see
+ <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</item>
<tag><c>{error, {<anno>Line</anno>, <anno>Mod</anno>,
<anno>Term</anno>}}</c></tag>
<item>
<p>An error occurred when interpreting the Erlang
- expressions in the file. Use <c>format_error/1</c> to
- convert the three-element tuple to an English description
+ expressions in the file. Use
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>
+ to convert the three-element tuple to an English description
of the error.</p>
</item>
</taglist>
- <p>The encoding of of <c><anno>Filename</anno></c> can be set
- by a comment as described in <seealso
- marker="stdlib:epp#encoding">epp(3)</seealso>.</p>
+ <p>The encoding of <c><anno>Filename</anno></c> can be set
+ by a comment as described in
+ <seealso marker="stdlib:epp#encoding"><c>stdlib:epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="path_script" arity="3"/>
- <fsummary>Evaluate and return the value of Erlang expressions in a file</fsummary>
+ <fsummary>Evaluate and return the value of Erlang expressions in a file.</fsummary>
<desc>
<p>The same as <c>path_script/2</c> but the variable bindings
<c><anno>Bindings</anno></c> are used in the evaluation. See
- <seealso marker="stdlib:erl_eval">erl_eval(3)</seealso> about
+ <seealso marker="stdlib:erl_eval"><c>erl_eval(3)</c></seealso> about
variable bindings.</p>
</desc>
</func>
<func>
<name name="pid2name" arity="1"/>
- <fsummary>Return the name of the file handled by a pid</fsummary>
+ <fsummary>Return the name of the file handled by a pid.</fsummary>
<desc>
- <p>If <c><anno>Pid</anno></c> is an IO device, that is, a pid returned from
+ <p>If <c><anno>Pid</anno></c> is an I/O device, that is, a pid returned from
<c>open/2</c>, this function returns the filename, or rather:</p>
<taglist>
<tag><c>{ok, <anno>Filename</anno>}</c></tag>
<item>
- <p>If this node's file server is not a slave, the file was
- opened by this node's file server, (this implies that
+ <p>If the file server of this node is not a slave, the file was
+ opened by the file server of this node (this implies that
<c><anno>Pid</anno></c> must be a local pid) and the file is not
closed. <c><anno>Filename</anno></c> is the filename in flat string
format.</p>
@@ -1084,13 +1168,12 @@
</func>
<func>
<name name="position" arity="2"/>
- <fsummary>Set position in a file</fsummary>
+ <fsummary>Set position in a file.</fsummary>
<desc>
<p>Sets the position of the file referenced by <c><anno>IoDevice</anno></c>
- to <c><anno>Location</anno></c>. Returns
- <c>{ok, <anno>NewPosition</anno>}</c> (as
- absolute offset) if successful, otherwise
- <c>{error, <anno>Reason</anno>}</c>. <c><anno>Location</anno></c> is
+ to <c><anno>Location</anno></c>. Returns <c>{ok, <anno>NewPosition</anno>}</c>
+ (as absolute offset) if successful, otherwise
+ <c>{error, <anno>Reason</anno>}</c>. <c><anno>Location</anno></c> is
one of the following:</p>
<taglist>
<tag><c>Offset</c></tag>
@@ -1114,14 +1197,21 @@
<p>The same as above with <c>Offset</c> 0.</p>
</item>
</taglist>
- <p>Note that offsets are counted in bytes, not in characters. If the file is opened using some other <c>encoding</c> than <c>latin1</c>, one byte does not correspond to one character. Positioning in such a file can only be done to known character boundaries, i.e. to a position earlier retrieved by getting a current position, to the beginning/end of the file or to some other position <em>known</em> to be on a correct character boundary by some other means (typically beyond a byte order mark in the file, which has a known byte-size).</p>
- <p>Typical error reasons are:</p>
+ <p>Notice that offsets are counted in bytes, not in characters. If the file
+ is opened using some other <c>encoding</c> than <c>latin1</c>, one byte
+ does not correspond to one character. Positioning in such a file can only
+ be done to known character boundaries. That is, to a position earlier retrieved
+ by getting a current position, to the beginning/end of the file or to some
+ other position <em>known</em> to be on a correct character boundary by some
+ other means (typically beyond a byte order mark in the file, which has a
+ known byte-size).</p>
+ <p>A typical error reason is:</p>
<taglist>
<tag><c>einval</c></tag>
<item>
- <p>Either <c><anno>Location</anno></c> was illegal, or it
+ <p>Either <c><anno>Location</anno></c> is illegal, or it is
evaluated to a
- negative offset in the file. Note that if the resulting
+ negative offset in the file. Notice that if the resulting
position is a negative value, the result is an error, and
after the call the file position is undefined.</p>
</item>
@@ -1130,7 +1220,7 @@
</func>
<func>
<name name="pread" arity="2"/>
- <fsummary>Read from a file at certain positions</fsummary>
+ <fsummary>Read from a file at certain positions.</fsummary>
<desc>
<p>Performs a sequence of <c>pread/3</c> in one operation,
which is more efficient than calling them one at a time.
@@ -1139,70 +1229,94 @@
where each <c><anno>Data</anno></c>, the result of the corresponding
<c>pread</c>, is either a list or a binary depending on
the mode of the file, or <c>eof</c> if the requested position
- was beyond end of file.</p>
- <p>As the position is given as a byte-offset, special caution has to be taken when working with files where <c>encoding</c> is set to something else than <c>latin1</c>, as not every byte position will be a valid character boundary on such a file.</p>
+ is beyond end of file.</p>
+ <p>As the position is specified as a byte-offset, take special caution
+ when working with files where <c>encoding</c> is set to something else
+ than <c>latin1</c>, as not every byte position is a valid character
+ boundary on such a file.</p>
</desc>
</func>
<func>
<name name="pread" arity="3"/>
- <fsummary>Read from a file at a certain position</fsummary>
+ <fsummary>Read from a file at a certain position.</fsummary>
<desc>
<p>Combines <c>position/2</c> and <c>read/2</c> in one
operation, which is more efficient than calling them one at a
- time. If <c><anno>IoDevice</anno></c> has been opened in raw mode,
- some restrictions apply: <c><anno>Location</anno></c> is only allowed
- to be an
- integer; and the current position of the file is undefined
- after the operation.</p>
- <p>As the position is given as a byte-offset, special caution has to be taken when working with files where <c>encoding</c> is set to something else than <c>latin1</c>, as not every byte position will be a valid character boundary on such a file.</p>
+ time. If <c><anno>IoDevice</anno></c> is opened in <c>raw</c> mode,
+ some restrictions apply:</p>
+ <list type="bulleted">
+ <item><c><anno>Location</anno></c> is only allowed to be an
+ integer.</item>
+ <item>The current position of the file is undefined after the
+ operation.</item>
+ </list>
+ <p>As the position is specified as a byte-offset, take special caution
+ when working with files where <c>encoding</c> is set to something else
+ than <c>latin1</c>, as not every byte position is a valid character
+ boundary on such a file.</p>
</desc>
</func>
<func>
<name name="pwrite" arity="2"/>
- <fsummary>Write to a file at certain positions</fsummary>
+ <fsummary>Write to a file at certain positions.</fsummary>
<desc>
<p>Performs a sequence of <c>pwrite/3</c> in one operation,
which is more efficient than calling them one at a time.
Returns <c>ok</c> or <c>{error, {<anno>N</anno>,
<anno>Reason</anno>}}</c>, where
- <c><anno>N</anno></c> is the number of successful writes that was done
+ <c><anno>N</anno></c> is the number of successful writes done
before the failure.</p>
- <p>When positioning in a file with other <c>encoding</c> than <c>latin1</c>, caution must be taken to set the position on a correct character boundary, see <seealso marker="#position/2">position/2</seealso> for details.</p>
+ <p>When positioning in a file with other <c>encoding</c> than <c>latin1</c>,
+ caution must be taken to set the position on a correct character boundary.
+ For details, see <seealso marker="#position/2"><c>position/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="pwrite" arity="3"/>
- <fsummary>Write to a file at a certain position</fsummary>
+ <fsummary>Write to a file at a certain position.</fsummary>
<desc>
<p>Combines <c>position/2</c> and <c>write/2</c> in one
operation, which is more efficient than calling them one at a
- time. If <c><anno>IoDevice</anno></c> has been opened in raw mode,
- some restrictions apply: <c><anno>Location</anno></c> is only allowed
- to be an
- integer; and the current position of the file is undefined
- after the operation.</p>
- <p>When positioning in a file with other <c>encoding</c> than <c>latin1</c>, caution must be taken to set the position on a correct character boundary, see <seealso marker="#position/2">position/2</seealso> for details.</p>
+ time. If <c><anno>IoDevice</anno></c> has been opened in <c>raw</c> mode,
+ some restrictions apply:</p>
+ <list type="bulleted">
+ <item><c><anno>Location</anno></c> is only allowed to be an
+ integer.</item>
+ <item>The current position of the file is undefined after the
+ operation.</item>
+ </list>
+ <p>When positioning in a file with other <c>encoding</c> than <c>latin1</c>,
+ caution must be taken to set the position on a correct character boundary.
+ For details, see <seealso marker="#position/2"><c>position/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="read" arity="2"/>
- <fsummary>Read from a file</fsummary>
+ <fsummary>Read from a file.</fsummary>
<desc>
<p>Reads <c><anno>Number</anno></c> bytes/characters from the file
referenced by <c><anno>IoDevice</anno></c>. The functions
- <c>read/2</c>, <c>pread/3</c>
- and <c>read_line/1</c> are the only ways to read from a file
- opened in raw mode (although they work for normally opened
- files, too).</p>
- <p>For files where <c>encoding</c> is set to something else than <c>latin1</c>, one character might be represented by more than one byte on the file. The parameter <c>Number</c> always denotes the number of <em>characters</em> read from the file, while the position in the file might be moved much more than this number when reading a Unicode file.</p>
- <p>Also, if <c>encoding</c> is set to something else than <c>latin1</c>, the <c>read/3</c> call will fail if the data contains characters larger than 255, which is why the <seealso marker="stdlib:io">io(3)</seealso> module is to be preferred when reading such a file.</p>
+ <seealso marker="#read/2"><c>read/2</c></seealso>,
+ <seealso marker="#pread/3"><c>pread/3</c></seealso>, and
+ <seealso marker="#read_line/1"><c>read_line/1</c></seealso>
+ are the only ways to read from a file opened in <c>raw</c> mode
+ (although they work for normally opened files, too).</p>
+ <p>For files where <c>encoding</c> is set to something else than <c>latin1</c>,
+ one character can be represented by more than one byte on the file.
+ The parameter <c>Number</c> always denotes the number of <em>characters</em>
+ read from the file, while the position in the file can be moved much more than
+ this number when reading a Unicode file.</p>
+ <p>Also, if <c>encoding</c> is set to something else than <c>latin1</c>,
+ the <c>read/3</c> call fails if the data contains characters larger than 255,
+ which is why module <seealso marker="stdlib:io"><c>io(3)</c></seealso>
+ is to be preferred when reading such a file.</p>
<p>The function returns:</p>
<taglist>
<tag><c>{ok, <anno>Data</anno>}</c></tag>
<item>
<p>If the file was opened in binary mode, the read bytes are
returned in a binary, otherwise in a list. The list or
- binary will be shorter than the number of bytes requested
+ binary is shorter than the number of bytes requested
if end of file was reached.</p>
</item>
<tag><c>eof</c></tag>
@@ -1223,14 +1337,16 @@
</item>
<tag><c>{no_translation, unicode, latin1}</c></tag>
<item>
- <p>The file was opened with another <c>encoding</c> than <c>latin1</c> and the data in the file can not be translated to the byte-oriented data that this function returns.</p>
+ <p>The file is opened with another <c>encoding</c> than <c>latin1</c> and
+ the data in the file cannot be translated to the byte-oriented data that
+ this function returns.</p>
</item>
</taglist>
</desc>
</func>
<func>
<name name="read_file" arity="1"/>
- <fsummary>Read a file</fsummary>
+ <fsummary>Read a file.</fsummary>
<desc>
<p>Returns <c>{ok, <anno>Binary</anno>}</c>, where
<c><anno>Binary</anno></c> is a binary
@@ -1254,7 +1370,7 @@
</item>
<tag><c>enotdir</c></tag>
<item>
- <p>A component of the file name is not a directory. On some
+ <p>A component of the filename is not a directory. On some
platforms, <c>enoent</c> is returned instead.</p>
</item>
<tag><c>enomem</c></tag>
@@ -1267,34 +1383,38 @@
<func>
<name name="read_file_info" arity="1"/>
<name name="read_file_info" arity="2"/>
- <fsummary>Get information about a file</fsummary>
+ <fsummary>Retrieve information about a file.</fsummary>
<desc>
<p>Retrieves information about a file. Returns
<c>{ok, <anno>FileInfo</anno>}</c> if successful, otherwise
<c>{error, <anno>Reason</anno>}</c>. <c><anno>FileInfo</anno></c>
is a record
- <c>file_info</c>, defined in the Kernel include file
+ <c>file_info</c>, defined in the <c>Kernel</c> include file
<c>file.hrl</c>. Include the following directive in the module
from which the function is called:</p>
<code type="none">
--include_lib("kernel/include/file.hrl").</code>
- <p>The time type returned in <c>atime</c>, <c>mtime</c> and <c>ctime</c>
- is dependent on the time type set in <c>Opts :: {time, Type}</c>.
- Type <c>local</c> will return local time, <c>universal</c> will
- return universal time and <c>posix</c> will return seconds since
- or before unix time epoch which is 1970-01-01 00:00 UTC.
- Default is <c>{time, local}</c>.
- </p>
- <p>If the <c>raw</c> option is set, the file server will not be called
- and only informations about local files will be returned.</p>
- <note>
- <p>
- Since file times is stored in posix time on most OS it is
- faster to query file information with the <c>posix</c> option.
- </p>
- </note>
+ -include_lib("kernel/include/file.hrl").</code>
+ <p>The time type returned in <c>atime</c>, <c>mtime</c>, and <c>ctime</c>
+ is dependent on the time type set in <c>Opts :: {time, Type}</c> as
+ follows:</p>
+ <taglist>
+ <tag><c>local</c></tag>
+ <item><p>Returns local time.</p></item>
+ <tag><c>universal</c></tag>
+ <item><p>Returns universal time.</p></item>
+ <tag><c>posix</c></tag>
+ <item><p>Returns seconds since or before Unix time epoch,
+ which is 1970-01-01 00:00 UTC.</p></item>
+ </taglist>
+ <p>Default is <c>{time, local}</c>.</p>
+ <p>If the option <c>raw</c> is set, the file server is not called
+ and only information about local files is returned.</p>
+ <note>
+ <p>As file times are stored in POSIX time on most OS, it is faster to
+ query file information with option <c>posix</c>.</p>
+ </note>
- <p>The record <c>file_info</c> contains the following fields.</p>
+ <p>The record <c>file_info</c> contains the following fields:</p>
<taglist>
<tag><c>size = integer() >= 0</c></tag>
<item>
@@ -1308,19 +1428,25 @@
<item>
<p>The current system access to the file.</p>
</item>
- <tag><c>atime = </c><seealso marker="#type-date_time">date_time()</seealso><c> | integer() >= 0</c></tag>
+ <tag><c>atime = </c>
+ <seealso marker="#type-date_time"><c>date_time()</c></seealso><c> |
+ integer() >= 0</c></tag>
<item>
<p>The last time the file was read.</p>
</item>
- <tag><c>mtime = </c><seealso marker="#type-date_time">date_time()</seealso><c> | integer() >= 0</c></tag>
+ <tag><c>mtime = </c>
+ <seealso marker="#type-date_time"><c>date_time()</c></seealso><c> |
+ integer() >= 0</c></tag>
<item>
<p>The last time the file was written.</p>
</item>
- <tag><c>ctime = </c><seealso marker="#type-date_time">date_time()</seealso><c> | integer() >=0</c></tag>
+ <tag><c>ctime = </c>
+ <seealso marker="#type-date_time"><c>date_time()</c></seealso><c> |
+ integer() >=0</c></tag>
<item>
<p>The interpretation of this time field depends on
the operating system. On Unix, it is the last time
- the file or the inode was changed. In Windows, it is
+ the file or the <c>inode</c> was changed. In Windows, it is
the create time.</p>
</item>
<tag><c>mode = integer() >= 0</c></tag>
@@ -1328,36 +1454,36 @@
<p>The file permissions as the sum of the following bit
values:</p>
<taglist>
- <tag>8#00400</tag>
- <item>read permission: owner</item>
- <tag>8#00200</tag>
- <item>write permission: owner</item>
- <tag>8#00100</tag>
- <item>execute permission: owner</item>
- <tag>8#00040</tag>
- <item>read permission: group</item>
- <tag>8#00020</tag>
- <item>write permission: group</item>
- <tag>8#00010</tag>
- <item>execute permission: group</item>
- <tag>8#00004</tag>
- <item>read permission: other</item>
- <tag>8#00002</tag>
- <item>write permission: other</item>
- <tag>8#00001</tag>
- <item>execute permission: other</item>
- <tag>16#800</tag>
- <item>set user id on execution</item>
- <tag>16#400</tag>
- <item>set group id on execution</item>
+ <tag><c>8#00400</c></tag>
+ <item><p>read permission: owner</p></item>
+ <tag><c>8#00200</c></tag>
+ <item><p>write permission: owner</p></item>
+ <tag><c>8#00100</c></tag>
+ <item><p>execute permission: owner</p></item>
+ <tag><c>8#00040</c></tag>
+ <item><p>read permission: group</p></item>
+ <tag><c>8#00020</c></tag>
+ <item><p>write permission: group</p></item>
+ <tag><c>8#00010</c></tag>
+ <item><p>execute permission: group</p></item>
+ <tag><c>8#00004</c></tag>
+ <item><p>read permission: other</p></item>
+ <tag><c>8#00002</c></tag>
+ <item><p>write permission: other</p></item>
+ <tag><c>8#00001</c></tag>
+ <item><p>execute permission: other</p></item>
+ <tag><c>16#800</c></tag>
+ <item><p>set user id on execution</p></item>
+ <tag><c>16#400</c></tag>
+ <item><p>set group id on execution</p></item>
</taglist>
- <p>On Unix platforms, other bits than those listed above
- may be set.</p>
+ <p>On Unix platforms, the following bits
+ can also be set:</p>
</item>
<tag><c>links = integer() >= 0</c></tag>
<item>
- <p>Number of links to the file (this will always be 1 for
- file systems which have no concept of links).</p>
+ <p>Number of links to the file (this is always 1 for
+ file systems that have no concept of links).</p>
</item>
<tag><c>major_device = integer() >= 0</c></tag>
<item>
@@ -1373,17 +1499,17 @@
<tag><c>inode = integer() >= 0</c></tag>
<item>
<p>Gives the <c>inode</c> number. On non-Unix file systems,
- this field will be zero.</p>
+ this field is zero.</p>
</item>
<tag><c>uid = integer() >= 0</c></tag>
<item>
- <p>Indicates the owner of the file. Will be zero for
- non-Unix file systems.</p>
+ <p>Indicates the owner of the file. On non-Unix file systems,
+ this field is zero.</p>
</item>
<tag><c>gid = integer() >= 0</c></tag>
<item>
<p>Gives the group that the owner of the file belongs to.
- Will be zero for non-Unix file systems.</p>
+ On non-Unix file systems, this field is zero.</p>
</item>
</taglist>
<p>Typical error reasons:</p>
@@ -1399,7 +1525,7 @@
</item>
<tag><c>enotdir</c></tag>
<item>
- <p>A component of the file name is not a directory. On some
+ <p>A component of the filename is not a directory. On some
platforms, <c>enoent</c> is returned instead.</p>
</item>
</taglist>
@@ -1407,18 +1533,34 @@
</func>
<func>
<name name="read_line" arity="1"/>
- <fsummary>Read a line from a file</fsummary>
+ <fsummary>Read a line from a file.</fsummary>
<desc>
<p>Reads a line of bytes/characters from the file referenced by
- <c><anno>IoDevice</anno></c>. Lines are defined to be delimited by the linefeed (LF, <c>\n</c>) character, but any carriage return (CR, <c>\r</c>) followed by a newline is also treated as a single LF character (the carriage return is silently ignored). The line is returned <em>including</em> the LF, but excluding any CR immediately followed by a LF. This behaviour is consistent with the behaviour of <seealso marker="stdlib:io#get_line/2">io:get_line/2</seealso>. If end of file is reached without any LF ending the last line, a line with no trailing LF is returned.</p>
- <p>The function can be used on files opened in <c>raw</c> mode. It is however inefficient to use it on <c>raw</c> files if the file is not opened with the option <c>{read_ahead, Size}</c> specified, why combining <c>raw</c> and <c>{read_ahead, Size}</c> is highly recommended when opening a text file for raw line oriented reading.</p>
- <p>If <c>encoding</c> is set to something else than <c>latin1</c>, the <c>read_line/1</c> call will fail if the data contains characters larger than 255, why the <seealso marker="stdlib:io">io(3)</seealso> module is to be preferred when reading such a file.</p>
+ <c><anno>IoDevice</anno></c>. Lines are defined to be delimited by the
+ linefeed (LF, <c>\n</c>) character, but any carriage return (CR, <c>\r</c>)
+ followed by a newline is also treated as a single LF character (the carriage
+ return is silently ignored). The line is returned <em>including</em> the LF,
+ but excluding any CR immediately followed by an LF. This behaviour is
+ consistent with the behaviour of
+ <seealso marker="stdlib:io#get_line/2"><c>io:get_line/2</c></seealso>.
+ If end of file is reached without any LF ending the last line, a line with no
+ trailing LF is returned.</p>
+ <p>The function can be used on files opened in <c>raw</c> mode. However, it is
+ inefficient to use it on <c>raw</c> files if the file is not opened with
+ option <c>{read_ahead, Size}</c> specified. Thus, combining <c>raw</c> and
+ <c>{read_ahead, Size}</c> is highly recommended when opening a text file for
+ raw line-oriented reading.</p>
+ <p>If <c>encoding</c> is set to something else than <c>latin1</c>, the
+ <c>read_line/1</c> call fails if the data contains characters larger than 255,
+ why module <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso> is to be
+ preferred when reading such a file.</p>
<p>The function returns:</p>
<taglist>
<tag><c>{ok, <anno>Data</anno>}</c></tag>
<item>
- <p>One line from the file is returned, including the trailing LF, but with CRLF sequences replaced by a single LF (see above).</p>
- <p>If the file was opened in binary mode, the read bytes are
+ <p>One line from the file is returned, including the trailing LF,
+ but with CRLF sequences replaced by a single LF (see above).</p>
+ <p>If the file is opened in binary mode, the read bytes are
returned in a binary, otherwise in a list.</p>
</item>
<tag><c>eof</c></tag>
@@ -1439,22 +1581,24 @@
</item>
<tag><c>{no_translation, unicode, latin1}</c></tag>
<item>
- <p>The file is was opened with another <c>encoding</c> than <c>latin1</c> and the data on the file can not be translated to the byte-oriented data that this function returns.</p>
+ <p>The file is opened with another <c>encoding</c> than <c>latin1</c> and
+ the data on the file cannot be translated to the byte-oriented data that
+ this function returns.</p>
</item>
</taglist>
</desc>
</func>
<func>
<name name="read_link" arity="1"/>
- <fsummary>See what a link is pointing to</fsummary>
+ <fsummary>See what a link is pointing to.</fsummary>
<desc>
- <p><marker id="read_link_all"/>This function returns
+ <p><marker id="read_link_all"/>Returns
<c>{ok, <anno>Filename</anno>}</c> if
<c><anno>Name</anno></c> refers to a symbolic link that is
- not a "raw" file name, or <c>{error, <anno>Reason</anno>}</c>
+ not a raw filename, or <c>{error, <anno>Reason</anno>}</c>
otherwise.
On platforms that do not support symbolic links, the return
- value will be <c>{error,enotsup}</c>.</p>
+ value is <c>{error,enotsup}</c>.</p>
<p>Typical error reasons:</p>
<taglist>
<tag><c>einval</c></tag>
@@ -1476,14 +1620,14 @@
</func>
<func>
<name name="read_link_all" arity="1"/>
- <fsummary>See what a link is pointing to</fsummary>
+ <fsummary>See what a link is pointing to.</fsummary>
<desc>
- <p>This function returns <c>{ok, <anno>Filename</anno>}</c> if
+ <p>Returns <c>{ok, <anno>Filename</anno>}</c> if
<c><anno>Name</anno></c> refers to a symbolic link or
<c>{error, <anno>Reason</anno>}</c> otherwise.
On platforms that do not support symbolic links, the return
- value will be <c>{error,enotsup}</c>.</p>
- <p>Note that <c><anno>Filename</anno></c> can be either a list
+ value is <c>{error,enotsup}</c>.</p>
+ <p>Notice that <c><anno>Filename</anno></c> can be either a list
or a binary.</p>
<p>Typical error reasons:</p>
<taglist>
@@ -1505,31 +1649,30 @@
<func>
<name name="read_link_info" arity="1"/>
<name name="read_link_info" arity="2"/>
- <fsummary>Get information about a link or file</fsummary>
+ <fsummary>Retrieve information about a link or file.</fsummary>
<desc>
- <p>This function works like
- <seealso marker="#read_file_info/2">read_file_info/1,2</seealso> except that
- if <c><anno>Name</anno></c> is a symbolic link, information about
- the link will be returned in the <c>file_info</c> record and
- the <c>type</c> field of the record will be set to
- <c>symlink</c>.</p>
- <p>If the <c>raw</c> option is set, the file server will not be called
- and only informations about local files will be returned.</p>
+ <p>Works like
+ <seealso marker="#read_file_info/2"><c>read_file_info/1,2</c></seealso>
+ except that if <c><anno>Name</anno></c> is a symbolic link, information
+ about the link is returned in the <c>file_info</c> record and
+ the <c>type</c> field of the record is set to <c>symlink</c>.</p>
+ <p>If the option <c>raw</c> is set, the file server is not called
+ and only information about local files is returned.</p>
<p>If <c><anno>Name</anno></c> is not a symbolic link, this function returns
- exactly the same result as <c>read_file_info/1</c>.
+ the same result as <c>read_file_info/1</c>.
On platforms that do not support symbolic links, this function
is always equivalent to <c>read_file_info/1</c>.</p>
</desc>
</func>
<func>
<name name="rename" arity="2"/>
- <fsummary>Rename a file</fsummary>
+ <fsummary>Rename a file.</fsummary>
<desc>
<p>Tries to rename the file <c><anno>Source</anno></c> to
<c><anno>Destination</anno></c>.
It can be used to move files (and directories) between
directories, but it is not sufficient to specify
- the destination only. The destination file name must also be
+ the destination only. The destination filename must also be
specified. For example, if <c>bar</c> is a normal file and
<c>foo</c> and <c>baz</c> are directories,
<c>rename("foo/bar", "baz")</c> returns an error, but
@@ -1560,7 +1703,7 @@
<item>
<p><c><anno>Source</anno></c> is a root directory, or
<c><anno>Destination</anno></c>
- is a sub-directory of <c><anno>Source</anno></c>.</p>
+ is a subdirectory of <c><anno>Source</anno></c>.</p>
</item>
<tag><c>eisdir</c></tag>
<item>
@@ -1586,58 +1729,105 @@
</func>
<func>
<name name="script" arity="1"/>
- <fsummary>Evaluate and return the value of Erlang expressions in a file</fsummary>
+ <fsummary>Evaluate and return the value of Erlang expressions in a file.</fsummary>
<desc>
<p>Reads and evaluates Erlang expressions, separated by '.' (or
',', a sequence of expressions is also an expression), from
- the file. Returns one of the following:</p>
+ the file.</p>
+ <p>Returns one of the following:</p>
<taglist>
<tag><c>{ok, <anno>Value</anno>}</c></tag>
<item>
- <p>The file was read and evaluated. <c><anno>Value</anno></c> is
+ <p>The file is read and evaluated. <c><anno>Value</anno></c> is
the value of the last expression.</p>
</item>
<tag><c>{error, atom()}</c></tag>
<item>
<p>An error occurred when opening the file or reading it.
- See <seealso marker="#open/2">open/2</seealso> for a list
- of typical error codes.</p>
+ For a list of typical error codes, see
+ <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</item>
<tag><c>{error, {<anno>Line</anno>, <anno>Mod</anno>,
<anno>Term</anno>}}</c></tag>
<item>
<p>An error occurred when interpreting the Erlang
- expressions in the file. Use <c>format_error/1</c> to
- convert the three-element tuple to an English description
+ expressions in the file. Use
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>
+ to convert the three-element tuple to an English description
of the error.</p>
</item>
</taglist>
- <p>The encoding of of <c><anno>Filename</anno></c> can be set
- by a comment as described in <seealso
- marker="stdlib:epp#encoding">epp(3)</seealso>.</p>
+ <p>The encoding of <c><anno>Filename</anno></c> can be set
+ by a comment as described in
+ <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="script" arity="2"/>
- <fsummary>Evaluate and return the value of Erlang expressions in a file</fsummary>
+ <fsummary>Evaluate and return the value of Erlang expressions in a file.</fsummary>
<desc>
<p>The same as <c>script/1</c> but the variable bindings
<c><anno>Bindings</anno></c> are used in the evaluation. See
- <seealso marker="stdlib:erl_eval">erl_eval(3)</seealso> about
+ <seealso marker="stdlib:erl_eval"><c>erl_eval(3)</c></seealso> about
variable bindings.</p>
</desc>
</func>
<func>
+ <name name="sendfile" arity="2"/>
+ <fsummary>Send a file to a socket.</fsummary>
+ <desc>
+ <p>Sends the file <c>Filename</c> to <c>Socket</c>.
+ Returns <c>{ok, BytesSent}</c> if successful,
+ otherwise <c>{error, Reason}</c>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="sendfile" arity="5"/>
+ <fsummary>Send a file to a socket.</fsummary>
+ <type name="sendfile_option"/>
+ <desc>
+ <p>Sends <c>Bytes</c> from the file
+ referenced by <c>RawFile</c> beginning at <c>Offset</c> to
+ <c>Socket</c>.
+ Returns <c>{ok, BytesSent}</c> if successful,
+ otherwise <c>{error, Reason}</c>. If <c>Bytes</c> is set to
+ <c>0</c> all data after the specified <c>Offset</c> is sent.</p>
+ <p>The file used must be opened using the <c>raw</c> flag, and the process
+ calling <c>sendfile</c> must be the controlling process of the socket.
+ See <seealso marker="gen_tcp#controlling_process-2"><c>gen_tcp:controlling_process/2</c></seealso>.</p>
+ <p>If the OS used does not support <c>sendfile</c>, an Erlang fallback
+ using
+ <seealso marker="#read/2"><c>read/2</c></seealso> and
+ <seealso marker="gen_tcp#send/2"><c>gen_tcp:send/2</c></seealso> is used.</p>
+ <p>The option list can contain the following options:</p>
+ <taglist>
+ <tag><c>chunk_size</c></tag>
+ <item><p>The chunk size used by the Erlang fallback to send
+ data. If using the fallback, set this to a value
+ that comfortably fits in the systems memory. Default is 20 MB.</p></item>
+ <tag><c>use_threads</c></tag>
+ <item><p>Instructs the emulator to use the <c>async</c> thread pool for the
+ <c>sendfile</c> system call. This can be useful if the OS you are running
+ on does not properly support non-blocking <c>sendfile</c> calls. Notice that
+ using <c>async</c> threads potentially makes your system vulnerable to slow
+ client attacks. If set to <c>true</c> and no <c>async</c> threads are available,
+ the <c>sendfile</c> call returns <c>{error,einval}</c>.
+ Introduced in Erlang/OTP 17.0. Default is <c>false</c>.</p></item>
+ </taglist>
+ </desc>
+ </func>
+ <func>
<name name="set_cwd" arity="1"/>
- <fsummary>Set the current working directory</fsummary>
+ <fsummary>Set the current working directory.</fsummary>
<desc>
<p>Sets the current working directory of the file server to
<c><anno>Dir</anno></c>. Returns <c>ok</c> if successful.</p>
- <p>The functions in the <c>file</c> module usually treat binaries
- as raw filenames, i.e. they are passed as is even when the encoding
- of the binary does not agree with <c>file:native_name_encoding()</c>.
- This function however expects binaries to be encoded according to the
- value returned by <c>file:native_name_encoding()</c>.</p>
+ <p>The functions in the module <c>file</c> usually treat binaries
+ as raw filenames, that is, they are passed "as is" even when the
+ encoding of the binary does not agree with
+ <seealso marker="#native_name_encoding"><c>native_name_encoding()</c></seealso>.
+ However, this function expects binaries to be encoded according to the
+ value returned by <c>native_name_encoding()</c>.</p>
<p>Typical error reasons are:</p>
<taglist>
<tag><c>enoent</c></tag>
@@ -1656,31 +1846,31 @@
</item>
<tag><c>badarg</c></tag>
<item>
- <p><c><anno>Dir</anno></c> had an improper type,
+ <p><c><anno>Dir</anno></c> has an improper type,
such as tuple.</p>
</item>
<tag><c>no_translation</c></tag>
<item>
<p><c><anno>Dir</anno></c> is a <c>binary()</c> with
characters coded in ISO-latin-1 and the VM is operating
- with unicode file name encoding.</p>
+ with unicode filename encoding.</p>
</item>
</taglist>
<warning>
- <p>In a future release, a bad type for the
+ <p>In a future release, a bad type for argument
<c><anno>Dir</anno></c>
- argument will probably generate an exception.</p>
+ will probably generate an exception.</p>
</warning>
</desc>
</func>
<func>
<name name="sync" arity="1"/>
- <fsummary>Synchronizes the in-memory state of a file with that on the physical medium</fsummary>
+ <fsummary>Synchronize the in-memory state of a file with that on the physical medium.</fsummary>
<desc>
- <p>Makes sure that any buffers kept by the operating system
+ <p>Ensures that any buffers kept by the operating system
(not by the Erlang runtime system) are written to disk. On
some platforms, this function might have no effect.</p>
- <p>Typical error reasons are:</p>
+ <p>A typical error reason is:</p>
<taglist>
<tag><c>enospc</c></tag>
<item>
@@ -1690,90 +1880,28 @@
</desc>
</func>
<func>
- <name name="datasync" arity="1"/>
- <fsummary>Synchronizes the in-memory data of a file, ignoring most of its metadata, with that on the physical medium</fsummary>
- <desc>
- <p>Makes sure that any buffers kept by the operating system
- (not by the Erlang runtime system) are written to disk. In
- many ways it resembles fsync but it does not update
- some of the file's metadata such as the access time. On
- some platforms this function has no effect.</p>
- <p>Applications that access databases or log files often write
- a tiny data fragment (e.g., one line in a log file) and then
- call fsync() immediately in order to ensure that the written
- data is physically stored on the harddisk. Unfortunately, fsync()
- will always initiate two write operations: one for the newly
- written data and another one in order to update the modification
- time stored in the inode. If the modification time is not a part
- of the transaction concept, fdatasync() can be used to avoid
- unnecessary inode disk write operations.</p>
- <p>Available only in some POSIX systems, this call results in a
- call to fsync(), or has no effect in systems not implementing
- the fdatasync() syscall.</p>
- </desc>
- </func>
- <func>
<name name="truncate" arity="1"/>
- <fsummary>Truncate a file</fsummary>
+ <fsummary>Truncate a file.</fsummary>
<desc>
<p>Truncates the file referenced by <c><anno>IoDevice</anno></c> at
- the current position. Returns <c>ok</c> if successful,
+ the current position. Returns <c>ok</c> if successful,
otherwise <c>{error, <anno>Reason</anno>}</c>.</p>
</desc>
</func>
<func>
- <name name="sendfile" arity="2"/>
- <fsummary>send a file to a socket</fsummary>
- <desc>
- <p>Sends the file <c>Filename</c> to <c>Socket</c>.
- Returns <c>{ok, BytesSent}</c> if successful,
- otherwise <c>{error, Reason}</c>.</p>
- </desc>
- </func>
- <func>
- <name name="sendfile" arity="5"/>
- <fsummary>send a file to a socket</fsummary>
- <type name="sendfile_option"/>
- <desc>
- <p>Sends <c>Bytes</c> from the file
- referenced by <c>RawFile</c> beginning at <c>Offset</c> to
- <c>Socket</c>.
- Returns <c>{ok, BytesSent}</c> if successful,
- otherwise <c>{error, Reason}</c>. If <c>Bytes</c> is set to
- 0 all data after the given <c>Offset</c> is sent.</p>
- <p>The file used must be opened using the raw flag, and the process
- calling sendfile must be the controlling process of the socket.
- See <seealso marker="gen_tcp#controlling_process-2">gen_tcp:controlling_process/2</seealso></p>
- <p>If the OS used does not support sendfile, an Erlang fallback
- using file:read and gen_tcp:send is used.</p>
- <p>The option list can contain the following options:</p>
- <taglist>
- <tag><c>chunk_size</c></tag>
- <item>The chunk size used by the erlang fallback to send
- data. If using the fallback, this should be set to a value
- which comfortably fits in the systems memory. Default is 20 MB.</item>
- <tag><c>use_threads</c></tag>
- <item>Instruct the emulator to use the async thread pool for the
- sendfile system call. This could be usefull if the OS you are running
- on does not properly support non-blocking sendfile calls. Do note that
- using async threads potentially makes your system volnerable to slow
- client attacks. If set to true and no async threads are available,
- the sendfile call will return <c>{error,einval}</c>.
- Introduced in Erlang/OTP 17.0. Default is false.</item>
- </taglist>
- </desc>
- </func>
- <func>
<name name="write" arity="2"/>
- <fsummary>Write to a file</fsummary>
+ <fsummary>Write to a file.</fsummary>
<desc>
<p>Writes <c><anno>Bytes</anno></c> to the file referenced by
<c><anno>IoDevice</anno></c>. This function is the only way to write to a
- file opened in raw mode (although it works for normally
- opened files, too). Returns <c>ok</c> if successful, and
+ file opened in <c>raw</c> mode (although it works for normally opened
+ files too). Returns <c>ok</c> if successful, and
<c>{error, <anno>Reason</anno>}</c> otherwise.</p>
- <p>If the file is opened with <c>encoding</c> set to something else than <c>latin1</c>, each byte written might result in several bytes actually being written to the file, as the byte range 0..255 might represent anything between one and four bytes depending on value and UTF encoding type.</p>
- <p>Typical error reasons are:</p>
+ <p>If the file is opened with <c>encoding</c> set to something else than
+ <c>latin1</c>, each byte written can result in many bytes being written to
+ the file, as the byte range 0..255 can represent anything between one and
+ four bytes depending on value and UTF encoding type.</p>
+ <p>Typical error reasons:</p>
<taglist>
<tag><c>ebadf</c></tag>
<item>
@@ -1781,34 +1909,35 @@
</item>
<tag><c>enospc</c></tag>
<item>
- <p>There is a no space left on the device.</p>
+ <p>No space is left on the device.</p>
</item>
</taglist>
</desc>
</func>
<func>
<name name="write_file" arity="2"/>
- <fsummary>Write a file</fsummary>
+ <fsummary>Write a file.</fsummary>
<desc>
- <p>Writes the contents of the iodata term <c><anno>Bytes</anno></c>
- to the file <c><anno>Filename</anno></c>.
- The file is created if it does not
- exist. If it exists, the previous contents are
- overwritten. Returns <c>ok</c>, or <c>{error, <anno>Reason</anno>}</c>.</p>
- <p>Typical error reasons are:</p>
+ <p>Writes the contents of the <c>iodata</c> term <c><anno>Bytes</anno></c>
+ to file <c><anno>Filename</anno></c>.
+ The file is created if it does not exist.
+ If it exists, the previous contents are overwritten.
+ Returns <c>ok</c> if successful, otherwise
+ <c>{error, <anno>Reason</anno>}</c>.</p>
+ <p>Typical error reasons:</p>
<taglist>
<tag><c>enoent</c></tag>
<item>
- <p>A component of the file name does not exist.</p>
+ <p>A component of the filename does not exist.</p>
</item>
<tag><c>enotdir</c></tag>
<item>
- <p>A component of the file name is not a directory. On some
+ <p>A component of the filename is not a directory. On some
platforms, <c>enoent</c> is returned instead.</p>
</item>
<tag><c>enospc</c></tag>
<item>
- <p>There is a no space left on the device.</p>
+ <p>No space is left on the device.</p>
</item>
<tag><c>eacces</c></tag>
<item>
@@ -1824,51 +1953,64 @@
</func>
<func>
<name name="write_file" arity="3"/>
- <fsummary>Write a file</fsummary>
+ <fsummary>Write a file.</fsummary>
<desc>
<p>Same as <c>write_file/2</c>, but takes a third argument
<c><anno>Modes</anno></c>, a list of possible modes, see
- <seealso marker="#open/2">open/2</seealso>. The mode flags
- <c>binary</c> and <c>write</c> are implicit, so they should
- not be used.</p>
+ <seealso marker="#open/2"><c>open/2</c></seealso>. The mode flags
+ <c>binary</c> and <c>write</c> are implicit, so they are
+ not to be used.</p>
</desc>
</func>
<func>
<name name="write_file_info" arity="2"/>
<name name="write_file_info" arity="3"/>
- <fsummary>Change information about a file</fsummary>
+ <fsummary>Change file information.</fsummary>
<desc>
- <p>Change file information. Returns <c>ok</c> if successful,
+ <p>Changes file information. Returns <c>ok</c> if successful,
otherwise <c>{error, <anno>Reason</anno>}</c>.
<c><anno>FileInfo</anno></c> is a record
- <c>file_info</c>, defined in the Kernel include file
+ <c>file_info</c>, defined in the <c>Kernel</c> include file
<c>file.hrl</c>. Include the following directive in the module
from which the function is called:</p>
<code type="none">
--include_lib("kernel/include/file.hrl").</code>
- <p>The time type set in <c>atime</c>, <c>mtime</c> and <c>ctime</c>
- is dependent on the time type set in <c>Opts :: {time, Type}</c>.
- Type <c>local</c> will interpret the time set as local, <c>universal</c> will
- interpret it as universal time and <c>posix</c> must be seconds since
- or before unix time epoch which is 1970-01-01 00:00 UTC.
- Default is <c>{time, local}</c>.</p>
- <p>If the <c>raw</c> option is set, the file server will not be called
- and only informations about local files will be returned.</p>
+ -include_lib("kernel/include/file.hrl").</code>
+ <p>The time type set in <c>atime</c>, <c>mtime</c>, and <c>ctime</c>
+ depends on the time type set in <c>Opts :: {time, Type}</c> as
+ follows:</p>
+ <taglist>
+ <tag><c>local</c></tag>
+ <item><p>Interprets the time set as local.</p></item>
+ <tag><c>universal</c></tag>
+ <item><p>Interprets it as universal time.</p></item>
+ <tag><c>posix</c></tag>
+ <item><p>Must be seconds since or before Unix time epoch,
+ which is 1970-01-01 00:00 UTC.</p></item>
+ </taglist>
+ <p>Default is <c>{time, local}</c>.</p>
+ <p>If the option <c>raw</c> is set, the file server is not called
+ and only information about local files is returned.</p>
<p>The following fields are used from the record, if they are
- given.</p>
+ specified:</p>
<taglist>
- <tag><c>atime = </c><seealso marker="#type-date_time">date_time()</seealso><c> | integer() >= 0</c></tag>
+ <tag><c>atime = </c>
+ <seealso marker="#type-date_time"><c>date_time()</c></seealso><c> |
+ integer() >= 0</c></tag>
<item>
<p>The last time the file was read.</p>
</item>
- <tag><c>mtime = </c><seealso marker="#type-date_time">date_time()</seealso><c> | integer() >= 0</c></tag>
+ <tag><c>mtime = </c>
+ <seealso marker="#type-date_time"><c>date_time()</c></seealso><c> |
+ integer() >= 0</c></tag>
<item>
<p>The last time the file was written.</p>
</item>
- <tag><c>ctime = </c><seealso marker="#type-date_time">date_time()</seealso><c> | integer() >= 0</c></tag>
+ <tag><c>ctime = </c>
+ <seealso marker="#type-date_time"><c>date_time()</c></seealso><c> |
+ integer() >= 0</c></tag>
<item>
- <p>On Unix, any value give for this field will be ignored
- (the "ctime" for the file will be set to the current
+ <p>On Unix, any value specified for this field is ignored
+ (the "ctime" for the file is set to the current
time). On Windows, this field is the new creation time to
set for the file.</p>
</item>
@@ -1877,40 +2019,40 @@
<p>The file permissions as the sum of the following bit
values:</p>
<taglist>
- <tag>8#00400</tag>
- <item>read permission: owner</item>
- <tag>8#00200</tag>
- <item>write permission: owner</item>
- <tag>8#00100</tag>
- <item>execute permission: owner</item>
- <tag>8#00040</tag>
- <item>read permission: group</item>
- <tag>8#00020</tag>
- <item>write permission: group</item>
- <tag>8#00010</tag>
- <item>execute permission: group</item>
- <tag>8#00004</tag>
- <item>read permission: other</item>
- <tag>8#00002</tag>
- <item>write permission: other</item>
- <tag>8#00001</tag>
- <item>execute permission: other</item>
- <tag>16#800</tag>
- <item>set user id on execution</item>
- <tag>16#400</tag>
- <item>set group id on execution</item>
+ <tag><c>8#00400</c></tag>
+ <item><p>Read permission: owner</p></item>
+ <tag><c>8#00200</c></tag>
+ <item><p>Write permission: owner</p></item>
+ <tag><c>8#00100</c></tag>
+ <item><p>Execute permission: owner</p></item>
+ <tag><c>8#00040</c></tag>
+ <item><p>Read permission: group</p></item>
+ <tag><c>8#00020</c></tag>
+ <item><p>Write permission: group</p></item>
+ <tag><c>8#00010</c></tag>
+ <item><p>Execute permission: group</p></item>
+ <tag><c>8#00004</c></tag>
+ <item><p>Read permission: other</p></item>
+ <tag><c>8#00002</c></tag>
+ <item><p>Write permission: other</p></item>
+ <tag><c>8#00001</c></tag>
+ <item><p>Execute permission: other</p></item>
+ <tag><c>16#800</c></tag>
+ <item><p>Set user id on execution</p></item>
+ <tag><c>16#400</c></tag>
+ <item><p>Set group id on execution</p></item>
</taglist>
- <p>On Unix platforms, other bits than those listed above
- may be set.</p>
+ <p>On Unix platforms, the following bits
+ can also be set.</p>
</item>
<tag><c>uid = integer() >= 0</c></tag>
<item>
- <p>Indicates the owner of the file. Ignored for non-Unix
+ <p>Indicates the file owner. Ignored for non-Unix
file systems.</p>
</item>
<tag><c>gid = integer() >= 0</c></tag>
<item>
- <p>Gives the group that the owner of the file belongs to.
+ <p>Gives the group that the file owner belongs to.
Ignored for non-Unix file systems.</p>
</item>
</taglist>
@@ -1927,7 +2069,7 @@
</item>
<tag><c>enotdir</c></tag>
<item>
- <p>A component of the file name is not a directory. On some
+ <p>A component of the filename is not a directory. On some
platforms, <c>enoent</c> is returned instead.</p>
</item>
</taglist>
@@ -1938,77 +2080,82 @@
<section>
<title>POSIX Error Codes</title>
<list type="bulleted">
- <item><c>eacces</c> - permission denied</item>
- <item><c>eagain</c> - resource temporarily unavailable</item>
- <item><c>ebadf</c> - bad file number</item>
- <item><c>ebusy</c> - file busy</item>
- <item><c>edquot</c> - disk quota exceeded</item>
- <item><c>eexist</c> - file already exists</item>
- <item><c>efault</c> - bad address in system call argument</item>
- <item><c>efbig</c> - file too large</item>
- <item><c>eintr</c> - interrupted system call</item>
- <item><c>einval</c> - invalid argument</item>
- <item><c>eio</c> - IO error</item>
- <item><c>eisdir</c> - illegal operation on a directory</item>
- <item><c>eloop</c> - too many levels of symbolic links</item>
- <item><c>emfile</c> - too many open files</item>
- <item><c>emlink</c> - too many links</item>
- <item><c>enametoolong</c> - file name too long</item>
- <item><c>enfile</c> - file table overflow</item>
- <item><c>enodev</c> - no such device</item>
- <item><c>enoent</c> - no such file or directory</item>
- <item><c>enomem</c> - not enough memory</item>
- <item><c>enospc</c> - no space left on device</item>
- <item><c>enotblk</c> - block device required</item>
- <item><c>enotdir</c> - not a directory</item>
- <item><c>enotsup</c> - operation not supported</item>
- <item><c>enxio</c> - no such device or address</item>
- <item><c>eperm</c> - not owner</item>
- <item><c>epipe</c> - broken pipe</item>
- <item><c>erofs</c> - read-only file system</item>
- <item><c>espipe</c> - invalid seek</item>
- <item><c>esrch</c> - no such process</item>
- <item><c>estale</c> - stale remote file handle</item>
- <item><c>exdev</c> - cross-domain link</item>
+ <item><c>eacces</c> - Permission denied</item>
+ <item><c>eagain</c> - Resource temporarily unavailable</item>
+ <item><c>ebadf</c> - Bad file number</item>
+ <item><c>ebusy</c> - File busy</item>
+ <item><c>edquot</c> - Disk quota exceeded</item>
+ <item><c>eexist</c> - File already exists</item>
+ <item><c>efault</c> - Bad address in system call argument</item>
+ <item><c>efbig</c> - File too large</item>
+ <item><c>eintr</c> - Interrupted system call</item>
+ <item><c>einval</c> - Invalid argument</item>
+ <item><c>eio</c> - I/O error</item>
+ <item><c>eisdir</c> - Illegal operation on a directory</item>
+ <item><c>eloop</c> - Too many levels of symbolic links</item>
+ <item><c>emfile</c> - Too many open files</item>
+ <item><c>emlink</c> - Too many links</item>
+ <item><c>enametoolong</c> - Filename too long</item>
+ <item><c>enfile</c> - File table overflow</item>
+ <item><c>enodev</c> - No such device</item>
+ <item><c>enoent</c> - No such file or directory</item>
+ <item><c>enomem</c> - Not enough memory</item>
+ <item><c>enospc</c> - No space left on device</item>
+ <item><c>enotblk</c> - Block device required</item>
+ <item><c>enotdir</c> - Not a directory</item>
+ <item><c>enotsup</c> - Operation not supported</item>
+ <item><c>enxio</c> - No such device or address</item>
+ <item><c>eperm</c> - Not owner</item>
+ <item><c>epipe</c> - Broken pipe</item>
+ <item><c>erofs</c> - Read-only file system</item>
+ <item><c>espipe</c> - Invalid seek</item>
+ <item><c>esrch</c> - No such process</item>
+ <item><c>estale</c> - Stale remote file handle</item>
+ <item><c>exdev</c> - Cross-domain link</item>
</list>
</section>
<section>
<title>Performance</title>
- <p>Some operating system file operations, for example a
- <c>sync/1</c> or <c>close/1</c> on a huge file, may block their
- calling thread for seconds. If this befalls the emulator main
+ <p>Some operating system file operations, for example, a
+ <c>sync/1</c> or <c>close/1</c> on a huge file, can block their
+ calling thread for seconds. If this affects the emulator main
thread, the response time is no longer in the order of
milliseconds, depending on the definition of "soft" in soft
real-time system.</p>
<p>If the device driver thread pool is active, file operations are
done through those threads instead, so the emulator can go on
executing Erlang processes. Unfortunately, the time for serving a
- file operation increases due to the extra scheduling required
+ file operation increases because of the extra scheduling required
from the operating system.</p>
<p>If the device driver thread pool is disabled or of size 0, large
- file reads and writes are segmented into several smaller, which
- enables the emulator so server other processes during the file
- operation. This gives the same effect as when using the thread
+ file reads and writes are segmented into many smaller, which
+ enable the emulator to serve other processes during the file
+ operation. This has the same effect as when using the thread
pool, but with larger overhead. Other file operations, for
- example <c>sync/1</c> or <c>close/1</c> on a huge file, still are
+ example, <c>sync/1</c> or <c>close/1</c> on a huge file, still are
a problem.</p>
<p>For increased performance, raw files are recommended. Raw files
- uses the file system of the node's host machine. For normal files
- (non-raw), the file server is used to find the files, and if
- the node is running its file server as slave to another node's,
- and the other node runs on some other host machine, they may have
- different file systems. This is seldom a problem, but you have
- now been warned.</p>
- <p>A normal file is really a process so it can be used as an IO
- device (see <c>io</c>). Therefore when data is written to a
+ use the file system of the host machine of the node.</p>
+ <note>
+ <p>
+ For normal files (non-raw), the file server is used to find the files,
+ and if the node is running its file server as slave to the file server
+ of another node, and the other node runs on some other host machine,
+ they can have different file systems.
+ However, this is seldom a problem.</p>
+ </note>
+ <p>A normal file is really a process so it can be used as an I/O
+ device (see
+ <seealso marker="stdlib:io"><c>io</c></seealso>).
+ Therefore, when data is written to a
normal file, the sending of the data to the file process, copies
all data that are not binaries. Opening the file in binary mode
and writing binaries is therefore recommended. If the file is
opened on another node, or if the file server runs as slave to
- another node's, also binaries are copied.</p>
+ the file server of another node, also binaries are copied.</p>
<p>Caching data to reduce the number of file operations, or rather
- the number of calls to the file driver, will generally increase
+ the number of calls to the file driver, generally increases
performance. The following function writes 4 MBytes in 23
seconds when tested:</p>
<code type="none"><![CDATA[
@@ -2023,10 +2170,12 @@ create_file_slow(FD, M, M) ->
create_file_slow(FD, M, N) ->
ok = file:write(FD, <<M:32/unsigned>>),
create_file_slow(FD, M+1, N).]]></code>
+
<p>The following, functionally equivalent, function collects 1024
entries into a list of 128 32-byte binaries before each call to
- <c>file:write/2</c> and so does the same work in 0.52 seconds,
- which is 44 times faster.</p>
+ <seealso marker="#write/2"><c>write/2</c></seealso> and so
+ does the same work in 0.52 seconds,
+ which is 44 times faster:</p>
<code type="none"><![CDATA[
create_file(Name, N) when integer(N), N >= 0 ->
{ok, FD} = file:open(Name, [raw, write, delayed_write, binary]),
@@ -2055,61 +2204,62 @@ create_file(FD, M, N0, R) when M + 8 =&lt; N0 ->
create_file(FD, M, N0, R) ->
N1 = N0-1,
create_file(FD, M, N1, [<<N1:32/unsigned>> | R]).]]></code>
+
<note>
<p>Trust only your own benchmarks. If the list length in
- <c>create_file/2</c> above is increased, it will run slightly
- faster, but consume more memory and cause more memory
+ <c>create_file/2</c> above is increased, it runs slightly
+ faster, but consumes more memory and causes more memory
fragmentation. How much this affects your application is
- something that this simple benchmark can not predict.</p>
- <p>If the size of each binary is increased to 64 bytes, it will
- also run slightly faster, but the code will be twice as clumsy.
- In the current implementation are binaries larger than 64 bytes
+ something that this simple benchmark cannot predict.</p>
+ <p>If the size of each binary is increased to 64 bytes, it
+ also runs slightly faster, but the code is then twice as clumsy.
+ In the current implementation, binaries larger than 64 bytes are
stored in memory common to all processes and not copied when
sent between processes, while these smaller binaries are stored
on the process heap and copied when sent like any other term.</p>
- <p>So, with a binary size of 68 bytes <c>create_file/2</c> runs
- 30 percent slower then with 64 bytes, and will cause much more
- memory fragmentation. Note that if the binaries were to be sent
- between processes (for example a non-raw file) the results
+ <p>So, with a binary size of 68 bytes, <c>create_file/2</c> runs
+ 30 percent slower than with 64 bytes, and causes much more
+ memory fragmentation. Notice that if the binaries were to be sent
+ between processes (for example, a non-raw file), the results
would probably be completely different.</p>
</note>
<p>A raw file is really a port. When writing data to a port, it is
- efficient to write a list of binaries. There is no need to
+ efficient to write a list of binaries. It is not needed to
flatten a deep list before writing. On Unix hosts, scatter output,
which writes a set of buffers in one operation, is used when
- possible. In this way <c>file:write(FD, [Bin1, Bin2 | Bin3])</c>
- will write the contents of the binaries without copying the data
- at all except for perhaps deep down in the operating system
+ possible. In this way <c>write(FD, [Bin1, Bin2 | Bin3])</c>
+ writes the contents of the binaries without copying the data
+ at all, except for perhaps deep down in the operating system
kernel.</p>
<p>For raw files, <c>pwrite/2</c> and <c>pread/2</c> are
efficiently implemented. The file driver is called only once for
the whole operation, and the list iteration is done in the file
driver.</p>
<p>The options <c>delayed_write</c> and <c>read_ahead</c> to
- <c>file:open/2</c> makes the file driver cache data to reduce
+ <seealso marker="#open/2"><c>open/2</c></seealso>
+ make the file driver cache data to reduce
the number of operating system calls. The function
- <c>create_file/2</c> in the example above takes 60 seconds
- seconds without the <c>delayed_write</c> option, which is 2.6
+ <c>create_file/2</c> in the recent example takes 60 seconds
+ without option <c>delayed_write</c>, which is 2.6
times slower.</p>
- <p>And, as a really bad example, <c>create_file_slow/2</c> above
- without the <c>raw</c>, <c>binary</c> and <c>delayed_write</c>
- options, that is it calls <c>file:open(Name, [write])</c>, needs
+ <p>As a bad example, <c>create_file_slow/2</c>
+ without options <c>raw</c>, <c>binary</c>, and <c>delayed_write</c>,
+ meaning it calls <c>open(Name, [write])</c>, needs
1 min 20 seconds for the job, which is 3.5 times slower than
the first example, and 150 times slower than the optimized
- <c>create_file/2</c>. </p>
- </section>
-
- <section>
- <title>Warnings</title>
- <p>If an error occurs when accessing an open file with the <c>io</c>
- module, the process which handles the file will exit. The dead
- file process might hang if a process tries to access it later.
+ <c>create_file/2</c>.</p>
+ <warning>
+ <p>If an error occurs when accessing an open file with module
+ <seealso marker="stdlib:io"><c>io</c></seealso>,
+ the process handling the file exits. The dead
+ file process can hang if a process tries to access it later.
This will be fixed in a future release.</p>
+ </warning>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="stdlib:filename">filename(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="stdlib:filename"><c>filename(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/gen_sctp.xml b/lib/kernel/doc/src/gen_sctp.xml
index 456108a2fe..737800c6b1 100644
--- a/lib/kernel/doc/src/gen_sctp.xml
+++ b/lib/kernel/doc/src/gen_sctp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,79 +30,69 @@
<checked></checked>
<date>2007-03-21</date>
<rev>A</rev>
- <file>gen_sctp.sgml</file>
+ <file>gen_sctp.xml</file>
</header>
<module>gen_sctp</module>
- <modulesummary>The gen_sctp module provides functions for communicating with sockets using the SCTP protocol.</modulesummary>
+ <modulesummary>Functions for communicating with sockets using the SCTP
+ protocol.</modulesummary>
<description>
- <p>The <c>gen_sctp</c> module provides functions for communicating with
+ <p>This module provides functions for communicating with
sockets using the SCTP protocol. The implementation assumes that
the OS kernel supports SCTP
- <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">(RFC2960)</url> through the user-level
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions.</url>
- During development this implementation was tested on
- Linux Fedora Core 5.0 (kernel 2.6.15-2054 or later is needed),
- and on Solaris 10, 11. During OTP adaptation it was tested on
- SUSE Linux Enterprise Server 10 (x86_64) kernel 2.6.16.27-0.6-smp,
- with lksctp-tools-1.0.6, briefly on Solaris 10, and later on
- SUSE Linux Enterprise Server 10 Service Pack 1 (x86_64)
- kernel 2.6.16.54-0.2.3-smp with lksctp-tools-1.0.7,
- and later also on FreeBSD 8.2.
- </p>
- <p>
- This module was written for one-to-many style sockets
+ <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">(RFC 2960)</url>
+ through the user-level
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions</url>.</p>
+ <p>During development, this implementation was tested on:</p>
+ <list type="bulleted">
+ <item>Linux Fedora Core 5.0 (kernel 2.6.15-2054 or later is needed)</item>
+ <item>Solaris 10, 11</item>
+ </list>
+ <p>During OTP adaptation it was tested on:</p>
+ <list type="bulleted">
+ <item>SUSE Linux Enterprise Server 10 (x86_64) kernel 2.6.16.27-0.6-smp,
+ with lksctp-tools-1.0.6</item>
+ <item>Briefly on Solaris 10</item>
+ <item>SUSE Linux Enterprise Server 10 Service Pack 1 (x86_64)
+ kernel 2.6.16.54-0.2.3-smp with lksctp-tools-1.0.7</item>
+ <item>FreeBSD 8.2</item>
+ </list>
+ <p>This module was written for one-to-many style sockets
(type <c>seqpacket</c>). With the addition of
- <seealso marker="#peeloff/2">peeloff/2</seealso>, one-to-one style
- sockets (type <c>stream</c>) were introduced.
- </p>
- <p>Record definitions for the <c>gen_sctp</c> module can be found using:</p>
-<pre> -include_lib("kernel/include/inet_sctp.hrl"). </pre>
+ <seealso marker="#peeloff/2"><c>peeloff/2</c></seealso>,
+ one-to-one style sockets (type <c>stream</c>) were introduced.</p>
+ <p>Record definitions for this module can be found using:</p>
+ <pre>
+-include_lib("kernel/include/inet_sctp.hrl").</pre>
<p>These record definitions use the "new" spelling 'adaptation',
not the deprecated 'adaption', regardless of which
spelling the underlying C API uses.</p>
</description>
- <section>
- <marker id="contents"></marker>
- <title>CONTENTS</title>
- <list type="bulleted">
- <item><seealso marker="#types">DATA TYPES</seealso></item>
- <item><seealso marker="#exports">EXPORTS</seealso></item>
- <item><seealso marker="#options">SCTP SOCKET OPTIONS</seealso></item>
- <item><seealso marker="#examples">SCTP EXAMPLES</seealso></item>
- <item><seealso marker="#seealso">SEE ALSO</seealso></item>
- </list>
- <marker id="types"></marker>
- </section>
-
<datatypes>
<datatype>
<name>assoc_id()</name>
<desc>
- <p><marker id="type-assoc_id"/>
- An opaque term returned in for example #sctp_paddr_change{}
- that identifies an association for an SCTP socket. The term
- is opaque except for the special value <c>0</c> that has a
- meaning such as "the whole endpoint" or "all future associations".
- </p>
+ <p>An opaque term returned in, for example, <c>#sctp_paddr_change{}</c>,
+ which identifies an association for an SCTP socket. The term
+ is opaque except for the special value <c>0</c>, which has a
+ meaning such as "the whole endpoint" or "all future associations".</p>
</desc>
</datatype>
<datatype>
<name name="option"/>
<desc>
- <p>One of the
- <seealso marker="#options">SCTP Socket Options.</seealso></p>
+ <p>One of the
+ <seealso marker="#options">SCTP Socket Options</seealso>.</p>
</desc>
</datatype>
<datatype>
<name name="option_name"/>
- <desc><marker id="type-sctp_socket"></marker></desc>
</datatype>
<datatype>
<name>sctp_socket()</name>
<desc>
- <p><marker id="type-sctp_socket"/>
- Socket identifier returned from <c>open/*</c>.</p>
+ <p>Socket identifier returned from
+ <seealso marker="#open/0"><c>open/*</c></seealso>.</p>
<marker id="exports"></marker>
</desc>
</datatype>
@@ -111,405 +101,438 @@
<funcs>
<func>
<name name="abort" arity="2"/>
- <fsummary>Abnormally terminate the association given by Assoc, without flushing of unsent data</fsummary>
+ <fsummary>Abnormally terminate the association specified by
+ <c>Assoc</c>, without flushing of unsent data.</fsummary>
<desc>
- <p>Abnormally terminates the association given by <c><anno>Assoc</anno></c>, without
+ <p>Abnormally terminates the association specified by
+ <c><anno>Assoc</anno></c>, without
flushing of unsent data. The socket itself remains open. Other
- associations opened on this socket are still valid, and it can be
- used in new associations.</p>
+ associations opened on this socket are still valid, and the socket
+ can be used in new associations.</p>
</desc>
</func>
+
<func>
<name name="close" arity="1"/>
- <fsummary>Completely close the socket and all associations on it</fsummary>
+ <fsummary>Close the socket and all associations on it.</fsummary>
<desc>
- <p>Completely closes the socket and all associations on it. The unsent
- data is flushed as in <c>eof/2</c>. The <c>close/1</c> call
+ <p>Closes the socket and all associations on it. The unsent
+ data is flushed as in <seealso marker="#eof/2"><c>eof/2</c></seealso>.
+ The <c>close/1</c> call
is blocking or otherwise depending of the value of
- the <seealso marker="inet#option-linger">linger</seealso> socket
- <seealso marker="#options">option</seealso>.
- If <c>close</c> does not linger or linger timeout expires,
+ the <seealso marker="inet#option-linger"><c>linger</c></seealso>
+ socket <seealso marker="#options">option</seealso>.
+ If <c>close</c> does not linger or linger time-out expires,
the call returns and the data is flushed in the background.</p>
</desc>
</func>
+
<func>
<name name="connect" arity="4"/>
<fsummary>Same as <c>connect(Socket, Addr, Port, Opts, infinity)</c>.</fsummary>
<desc>
- <p>Same as <c>connect(<anno>Socket</anno>, <anno>Addr</anno>, <anno>Port</anno>, <anno>Opts</anno>, infinity)</c>.</p>
+ <p>Same as <c>connect(<anno>Socket</anno>, <anno>Addr</anno>,
+ <anno>Port</anno>, <anno>Opts</anno>, infinity)</c>.</p>
</desc>
</func>
+
<func>
<name name="connect" arity="5"/>
- <fsummary>Establish a new association for the socket <c>Socket</c>, with a peer (SCTP server socket)</fsummary>
+ <fsummary>Establish a new association for socket <c>Socket</c>, with a
+ peer (SCTP server socket).</fsummary>
<desc>
- <p>Establishes a new association for the socket <c><anno>Socket</anno></c>,
- with the peer (SCTP server socket) given by
- <c><anno>Addr</anno></c> and <c><anno>Port</anno></c>. The <c><anno>Timeout</anno></c>,
- is expressed in milliseconds. A socket can be associated with multiple peers.</p>
-
- <p><em>WARNING:</em>Using a value of <c><anno>Timeout</anno></c> less than
- the maximum time taken by the OS to establish an association (around 4.5 minutes
- if the default values from RFC 4960 are used) can result in
- inconsistent or incorrect return values. This is especially
- relevant for associations sharing the same <c><anno>Socket</anno></c>
- (i.e. source address and port) since the controlling process
- blocks until <c>connect/*</c> returns.
- <seealso marker="#connect_init/4">connect_init/*</seealso>
- provides an alternative not subject to this limitation.</p>
-
+ <p>Establishes a new association for socket <c><anno>Socket</anno></c>,
+ with the peer (SCTP server socket) specified by
+ <c><anno>Addr</anno></c> and <c><anno>Port</anno></c>.
+ <c><anno>Timeout</anno></c>, is expressed in milliseconds.
+ A socket can be associated with multiple peers.</p>
+ <warning><p>Using a value of <c><anno>Timeout</anno></c> less than
+ the maximum time taken by the OS to establish an association (around
+ 4.5 minutes if the default values from
+ <url href="https://tools.ietf.org/html/rfc4960">RFC 4960</url>
+ are used), can result
+ in inconsistent or incorrect return values. This is especially
+ relevant for associations sharing the same <c><anno>Socket</anno></c>
+ (that is, source address and port), as the controlling process
+ blocks until <c>connect/*</c> returns.
+ <seealso marker="#connect_init/4"><c>connect_init/*</c></seealso>
+ provides an alternative without this limitation.</p>
+ </warning>
<p><marker id="record-sctp_assoc_change"></marker>
The result of <c>connect/*</c> is an <c>#sctp_assoc_change{}</c>
- event which contains, in particular, the new
- <seealso marker="#type-assoc_id">Association ID</seealso>.</p>
-<pre> #sctp_assoc_change{
- state = atom(),
- error = atom(),
- outbound_streams = integer(),
- inbound_streams = integer(),
- assoc_id = assoc_id()
- } </pre>
+ event that contains, in particular, the new
+ <seealso marker="#type-assoc_id">Association ID</seealso>:</p>
+ <pre>
+#sctp_assoc_change{
+ state = atom(),
+ error = atom(),
+ outbound_streams = integer(),
+ inbound_streams = integer(),
+ assoc_id = assoc_id()
+}</pre>
<p>The number of outbound and inbound streams can be set by
- giving an <c>sctp_initmsg</c> option to <c>connect</c>
- as in:</p>
-<pre> connect(Socket, Ip, Port>,
- [{sctp_initmsg,#sctp_initmsg{num_ostreams=OutStreams,
- max_instreams=MaxInStreams}}]) </pre>
+ giving an <c>sctp_initmsg</c> option to <c>connect</c> as in:</p>
+ <pre>
+connect(Socket, Ip, Port>,
+ [{sctp_initmsg,#sctp_initmsg{num_ostreams=OutStreams,
+ max_instreams=MaxInStreams}}])</pre>
<p>All options <c><anno>Opt</anno></c> are set on the socket before the
- association is attempted. If an option record has got undefined
+ association is attempted. If an option record has undefined
field values, the options record is first read from the socket
- for those values. In effect, <c><anno>Opt</anno></c> option records only
- define field values to change before connecting.</p>
+ for those values. In effect, <c><anno>Opt</anno></c> option records
+ only define field values to change before connecting.</p>
<p>The returned <c>outbound_streams</c> and <c>inbound_streams</c>
- are the actual stream numbers on the socket, which may be different
- from the requested values (<c>OutStreams</c> and <c>MaxInStreams</c>
+ are the stream numbers on the socket. These can be different
+ from the requested values (<c>OutStreams</c> and <c>MaxInStreams</c>,
respectively) if the peer requires lower values.</p>
- <p>The following values of <c>state</c> are possible:</p>
- <list type="bulleted">
- <item>
- <p><c>comm_up</c>: association successfully established. This
- indicates a successful completion of <c>connect</c>.</p>
- </item>
- <item>
- <p><c>cant_assoc</c>: association cannot be established
- (<c>connect/*</c> failure).</p>
- </item>
- </list>
- <p>All other states do not normally occur in the output from
- <c>connect/*</c>. Rather, they may occur in
+ <p><c>state</c> can have the following values:</p>
+ <taglist>
+ <tag><c>comm_up</c></tag>
+ <item><p>Association is successfully established. This
+ indicates a successful completion of <c>connect</c>.</p></item>
+ <tag><c>cant_assoc</c></tag>
+ <item><p>The association cannot be established
+ (<c>connect/*</c> failure).</p></item>
+ </taglist>
+ <p>Other states do not normally occur in the output from
+ <c>connect/*</c>. Rather, they can occur in
<c>#sctp_assoc_change{}</c> events received instead of data in
- <seealso marker="#recv/1">recv/*</seealso> calls.
- All of them indicate losing the association due to various
- error conditions, and are listed here for the sake of completeness.
- The <c>error</c> field may provide more detailed diagnostics.</p>
- <list type="bulleted">
- <item>
- <p><c>comm_lost</c>;</p>
- </item>
- <item>
- <p><c>restart</c>;</p>
- </item>
- <item>
- <p><c>shutdown_comp</c>.</p>
- </item>
- </list>
+ <seealso marker="#recv/1"><c>recv/*</c></seealso> calls.
+ All of them indicate losing the association because of various error
+ conditions, and are listed here for the sake of completeness:</p>
+ <taglist>
+ <tag><c>comm_lost</c></tag>
+ <item></item>
+ <tag><c>restart</c></tag>
+ <item></item>
+ <tag><c>shutdown_comp</c></tag>
+ <item></item>
+ </taglist>
+ <p>Field <c>error</c> can provide more detailed diagnostics.</p>
</desc>
</func>
+
<func>
<name name="connect_init" arity="4"/>
- <fsummary>Same as <c>connect_init(Socket, Addr, Port, Opts, infinity)</c>.</fsummary>
+ <fsummary>Same as <c>connect_init(Socket, Addr, Port, Opts, infinity)</c>..</fsummary>
<desc>
- <p>Same as <c>connect_init(<anno>Socket</anno>, <anno>Addr</anno>, <anno>Port</anno>, <anno>Opts</anno>, infinity)</c>.</p>
+ <p>Same as <c>connect_init(<anno>Socket</anno>, <anno>Addr</anno>,
+ <anno>Port</anno>, <anno>Opts</anno>, infinity)</c>.</p>
</desc>
</func>
+
<func>
<name name="connect_init" arity="5"/>
- <fsummary>Initiate a new association for the socket <c>Socket</c>, with a peer (SCTP server socket)</fsummary>
+ <fsummary>Initiate a new association for socket <c>Socket</c>, with a
+ peer (SCTP server socket).</fsummary>
<desc>
- <p>Initiates a new association for the socket <c><anno>Socket</anno></c>,
- with the peer (SCTP server socket) given by
+ <p>Initiates a new association for socket <c><anno>Socket</anno></c>,
+ with the peer (SCTP server socket) specified by
<c><anno>Addr</anno></c> and <c><anno>Port</anno></c>.</p>
- <p>The fundamental difference between this API
- and <c>connect/*</c> is that the return value is that of the
- underlying OS connect(2) system call. If <c>ok</c> is returned
- then the result of the association establishement is received
- by the calling process as
- an <seealso marker="#record-sctp_assoc_change">
- #sctp_assoc_change{}</seealso>
- event. The calling process must be prepared to receive this, or
- poll for it using <c>recv/*</c> depending on the value of the
- active option.</p>
- <p>The parameters are as described
- in <seealso marker="#connect/5">connect/*</seealso>, with the
- exception of the <c><anno>Timeout</anno></c> value.</p>
- <p>The timer associated with <c><anno>Timeout</anno></c> only supervises
- IP resolution of <c><anno>Addr</anno></c></p>
+ <p>The fundamental difference between this API
+ and <c>connect/*</c> is that the return value is that of the
+ underlying OS <c>connect(2)</c> system call. If <c>ok</c> is returned,
+ the result of the association establishment is received
+ by the calling process as an
+ <seealso marker="#record-sctp_assoc_change"><c>#sctp_assoc_change{}</c></seealso>
+ event. The calling process must be prepared to receive this, or
+ poll for it using
+ <seealso marker="#recv/1"><c>recv/*</c></seealso>,
+ depending on the value of the active option.</p>
+ <p>The parameters are as described in
+ <seealso marker="#connect/5"><c>connect/*</c></seealso>,
+ except the <c><anno>Timeout</anno></c> value.</p>
+ <p>The timer associated with <c><anno>Timeout</anno></c> only supervises
+ IP resolution of <c><anno>Addr</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="controlling_process" arity="2"/>
- <fsummary>Assign a new controlling process pid to the socket</fsummary>
+ <fsummary>Assign a new controlling process pid to the socket.</fsummary>
<desc>
- <p>Assigns a new controlling process <c><anno>Pid</anno></c> to <c><anno>Socket</anno></c>. Same implementation
- as <c>gen_udp:controlling_process/2</c>.</p>
+ <p>Assigns a new controlling process <c><anno>Pid</anno></c> to
+ <c><anno>Socket</anno></c>. Same implementation as
+ <seealso marker="gen_udp:controlling_process/2"><c>gen_udp:controlling_process/2</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="eof" arity="2"/>
- <fsummary>Gracefully terminate the association given by Assoc, with flushing of all unsent data</fsummary>
+ <fsummary>Gracefully terminate the association specified by <c>Assoc</c>,
+ with flushing of all unsent data.</fsummary>
<desc>
- <p>Gracefully terminates the association given by <c><anno>Assoc</anno></c>, with
+ <p>Gracefully terminates the association specified by
+ <c><anno>Assoc</anno></c>, with
flushing of all unsent data. The socket itself remains open. Other
- associations opened on this socket are still valid, and it can be
- used in new associations.</p>
+ associations opened on this socket are still valid. The socket can
+ be used in new associations.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="error_string" arity="1"/>
+ <fsummary>Translate an SCTP error number into a string.</fsummary>
+ <desc>
+ <p>Translates an SCTP error number from, for example,
+ <c>#sctp_remote_error{}</c> or <c>#sctp_send_failed{}</c> into
+ an explanatory string, or one of the atoms <c>ok</c> for no
+ error or <c>undefined</c> for an unrecognized error.</p>
</desc>
</func>
+
<func>
<name name="listen" arity="2" clause_i="1"/>
<name name="listen" arity="2" clause_i="2"/>
<fsummary>Set up a socket to listen.</fsummary>
<desc>
<p>Sets up a socket to listen on the IP address and port number
- it is bound to.</p>
- <p>For type <c>seqpacket</c> sockets (the default)
- <c><anno>IsServer</anno></c> must be <c>true</c> or <c>false</c>.
- In contrast to TCP, in SCTP there is no listening queue length.
- If <c><anno>IsServer</anno></c> is <c>true</c> the socket accepts new associations, i.e.
- it will become an SCTP server socket.</p>
- <p>For type <c>stream</c> sockets <anno>Backlog</anno> defines
- the backlog queue length just like in TCP.</p>
+ it is bound to.</p>
+ <p>For type <c>seqpacket</c>, sockets (the default)
+ <c><anno>IsServer</anno></c> must be <c>true</c> or <c>false</c>.
+ In contrast to TCP, there is no listening queue length in SCTP.
+ If <c><anno>IsServer</anno></c> is <c>true</c>, the socket accepts
+ new associations, that is, it becomes an SCTP server socket.</p>
+ <p>For type <c>stream</c>, sockets <anno>Backlog</anno> define
+ the backlog queue length just like in TCP.</p>
</desc>
</func>
+
<func>
<name name="open" arity="0"/>
<name name="open" arity="1" clause_i="1"/>
<name name="open" arity="1" clause_i="2"/>
<name name="open" arity="2"/>
- <fsummary>Create an SCTP socket and bind it to local addresses</fsummary>
+ <fsummary>Create an SCTP socket and binds it to local addresses.</fsummary>
<desc>
- <p>Creates an SCTP socket and binds it to the local addresses
- specified by all <c>{ip,<anno>IP</anno>}</c> (or synonymously <c>{ifaddr,<anno>IP</anno>}</c>)
- options (this feature is called SCTP multi-homing).
- The default <c><anno>IP</anno></c> and <c><anno>Port</anno></c> are <c>any</c>
+ <p>Creates an SCTP socket and binds it to the local addresses
+ specified by all <c>{ip,<anno>IP</anno>}</c> (or synonymously
+ <c>{ifaddr,<anno>IP</anno>}</c>)
+ options (this feature is called SCTP multi-homing). The default
+ <c><anno>IP</anno></c> and <c><anno>Port</anno></c> are <c>any</c>
and <c>0</c>, meaning bind to all local addresses on any
- one free port.</p>
-
- <p>Other options are:</p>
+ free port.</p>
+ <p>Other options:</p>
<taglist>
<tag><c>inet6</c></tag>
<item>
- <p>Set up the socket for IPv6.</p>
+ <p>Sets up the socket for IPv6.</p>
</item>
<tag><c>inet</c></tag>
<item>
- <p>Set up the socket for IPv4. This is the default.</p>
+ <p>Sets up the socket for IPv4. This is the default.</p>
</item>
</taglist>
-
<p>A default set of socket <seealso marker="#options">options</seealso>
- is used. In particular, the socket is opened in
+ is used. In particular, the socket is opened in
<seealso marker="#option-binary">binary</seealso> and
<seealso marker="#option-active">passive</seealso> mode,
- with <anno>SockType</anno> <c>seqpacket</c>,
- and with reasonably large
+ with <anno>SockType</anno> <c>seqpacket</c>, and with reasonably large
<seealso marker="inet#option-sndbuf">kernel</seealso> and driver
- <seealso marker="inet#option-buffer">buffers.</seealso></p>
+ <seealso marker="inet#option-buffer">buffers</seealso>.</p>
</desc>
</func>
+
<func>
<name name="peeloff" arity="2"/>
- <fsummary>
- Peel off a type <c>stream</c> socket from a type <c>seqpacket</c> one
- </fsummary>
+ <fsummary>Peel off a type <c>stream</c> socket from a type
+ <c>seqpacket</c> one.</fsummary>
<desc>
- <p>
- Branch off an existing association <anno>Assoc</anno>
- in a socket <anno>Socket</anno> of type <c>seqpacket</c>
- (one-to-many style) into
- a new socket <anno>NewSocket</anno> of type <c>stream</c>
- (one-to-one style).
- </p>
- <p>
- The existing association argument <anno>Assoc</anno>
- can be either a
- <seealso marker="#record-sctp_assoc_change">
- #sctp_assoc_change{}
- </seealso>
- record as returned from e.g
- <seealso marker="#recv-2">recv/*</seealso>,
- <seealso marker="#connect-5">connect/*</seealso> or
- from a listening socket in active mode. Or it can be just
- the field <c>assoc_id</c> integer from such a record.
- </p>
+ <p>Branches off an existing association <c><anno>Assoc</anno></c>
+ in a socket <c><anno>Socket</anno></c> of type <c>seqpacket</c>
+ (one-to-many style) into
+ a new socket <c><anno>NewSocket</anno></c> of type <c>stream</c>
+ (one-to-one style).</p>
+ <p>The existing association argument <c><anno>Assoc</anno></c>
+ can be either a
+ <seealso marker="#record-sctp_assoc_change"><c>#sctp_assoc_change{}</c></seealso>
+ record as returned from, for example,
+ <seealso marker="#recv-2"><c>recv/*</c></seealso>,
+ <seealso marker="#connect-5"><c>connect/*</c></seealso>, or
+ from a listening socket in active mode. It can also be just
+ the field <c>assoc_id</c> integer from such a record.</p>
</desc>
</func>
+
<func>
<name name="recv" arity="1"/>
<name name="recv" arity="2"/>
- <fsummary>Receive a message from a socket</fsummary>
+ <fsummary>Receive a message from a socket.</fsummary>
<desc>
- <p>Receives the <c><anno>Data</anno></c> message from any association of the socket.
- If the receive times out <c>{error,timeout</c> is returned.
- The default timeout is <c>infinity</c>.
- <c><anno>FromIP</anno></c> and <c><anno>FromPort</anno></c> indicate the sender's address.</p>
- <p><c><anno>AncData</anno></c> is a list of Ancillary Data items which
- may be received along with the main <c><anno>Data</anno></c>.
+ <p>Receives the <c><anno>Data</anno></c> message from any association
+ of the socket.
+ If the receive times out, <c>{error,timeout}</c> is returned.
+ The default time-out is <c>infinity</c>. <c><anno>FromIP</anno></c>
+ and <c><anno>FromPort</anno></c> indicate the address of the
+ sender.</p>
+ <p><c><anno>AncData</anno></c> is a list of ancillary data items that
+ can be received along with the main <c><anno>Data</anno></c>.
This list can be empty, or contain a single
- <seealso marker="#record-sctp_sndrcvinfo">#sctp_sndrcvinfo{}</seealso>
- record, if receiving of such ancillary data is enabled
- (see option
- <seealso marker="#option-sctp_events">sctp_events</seealso>).
- It is enabled by default, since such ancillary data
- provide an easy way of determining the association and stream
- over which the message has been received.
- (An alternative way would be to get the Association ID from the
- <c><anno>FromIP</anno></c> and <c><anno>FromPort</anno></c> using the
- <seealso marker="#option-sctp_get_peer_addr_info">sctp_get_peer_addr_info</seealso> socket option,
- but this would still not produce the Stream number).</p>
- <p>The actual <c><anno>Data</anno></c> received may be a <c>binary()</c>,
- or <c>list()</c> of bytes (integers in the range 0 through 255)
- depending on the socket mode, or an SCTP Event.
- <marker id="sctp_events"></marker>
-
- The following SCTP Events are possible:</p>
+ <seealso marker="#record-sctp_sndrcvinfo"><c>#sctp_sndrcvinfo{}</c></seealso>
+ record if receiving of such ancillary data is enabled (see option
+ <seealso marker="#option-sctp_events"><c>sctp_events</c></seealso>).
+ It is enabled by default, as such ancillary data
+ provides an easy way of determining the association and stream
+ over which the message is received.
+ (An alternative way is to get the association ID from
+ <c><anno>FromIP</anno></c> and <c><anno>FromPort</anno></c> using
+ socket option
+ <seealso marker="#option-sctp_get_peer_addr_info"><c>sctp_get_peer_addr_info</c></seealso>,
+ but this does still not produce the stream number).</p>
+ <p>The <c><anno>Data</anno></c> received can be a <c>binary()</c>
+ or a <c>list()</c> of bytes (integers in the range 0 through 255)
+ depending on the socket mode, or an SCTP event.</p>
+ <marker id="sctp_events"></marker>
+ <p>Possible SCTP events:</p>
<list type="bulleted">
<item>
- <p><seealso marker="#record-sctp_sndrcvinfo">#sctp_sndrcvinfo{}</seealso></p>
+ <seealso marker="#record-sctp_sndrcvinfo"><c>#sctp_sndrcvinfo{}</c></seealso>
</item>
<item>
- <p><seealso marker="#record-sctp_assoc_change">#sctp_assoc_change{}</seealso>;</p>
+ <seealso marker="#record-sctp_assoc_change"><c>#sctp_assoc_change{}</c></seealso>
</item>
<item>
-<pre> #sctp_paddr_change{
- addr = {ip_address(),port()},
- state = atom(),
- error = integer(),
- assoc_id = assoc_id()
- } </pre>
- <p>Indicates change of the status of the peer's IP address given by
- <c>addr</c> within the association <c>assoc_id</c>.
- Possible values of <c>state</c> (mostly self-explanatory) include:</p>
- <list type="bulleted">
- <item>
- <p><c>addr_unreachable</c>;</p>
- </item>
- <item>
- <p><c>addr_available</c>;</p>
- </item>
- <item>
- <p><c>addr_removed</c>;</p>
- </item>
- <item>
- <p><c>addr_added</c>;</p>
+ <pre>
+#sctp_paddr_change{
+ addr = {ip_address(),port()},
+ state = atom(),
+ error = integer(),
+ assoc_id = assoc_id()
+}</pre>
+ <p>Indicates change of the status of the IP address of the peer
+ specified by
+ <c>addr</c> within association <c>assoc_id</c>. Possible
+ values of <c>state</c> (mostly self-explanatory) include:</p>
+ <taglist>
+ <tag><c>addr_unreachable</c></tag>
+ <item></item>
+ <tag><c>addr_available</c></tag>
+ <item></item>
+ <tag><c>addr_removed</c></tag>
+ <item></item>
+ <tag><c>addr_added</c></tag>
+ <item></item>
+ <tag><c>addr_made_prim</c></tag>
+ <item></item>
+ <tag><c>addr_confirmed</c></tag>
+ <item></item>
+ </taglist>
+ <p>In case of an error (for example, <c>addr_unreachable</c>),
+ field <c>error</c> provides more diagnostics. In such cases,
+ event <c>#sctp_paddr_change{}</c> is automatically
+ converted into an <c>error</c> term returned by
+ <seealso marker="#recv/1"><c>recv</c></seealso>.
+ The <c>error</c> field value can be converted into a string using
+ <seealso marker="#error_string/1"><c>error_string/1</c></seealso>.
+ </p>
+ </item>
+ <item>
+ <pre>
+#sctp_send_failed{
+ flags = true | false,
+ error = integer(),
+ info = #sctp_sndrcvinfo{},
+ assoc_id = assoc_id()
+ data = binary()
+}</pre>
+ <p>The sender can receive this event if a send operation fails.</p>
+ <taglist>
+ <tag><c>flags</c></tag>
+ <item><p>A Boolean specifying if the data has been transmitted
+ over the wire.</p></item>
+ <tag><c>error</c></tag>
+ <item><p>Provides extended diagnostics, use
+ <seealso marker="#error_string/1"><c>error_string/1</c>.</seealso></p>
</item>
- <item>
- <p><c>addr_made_prim</c>.</p>
+ <tag><c>info</c></tag>
+ <item><p>The original
+ <seealso marker="#record-sctp_sndrcvinfo"><c>#sctp_sndrcvinfo{}</c></seealso>
+ record used in the failed
+ <seealso marker="#send/3"><c>send/*</c>.</seealso></p>
</item>
- <item>
- <p><c>addr_confirmed</c>.</p>
+ <tag><c>data</c></tag>
+ <item><p>The whole original data chunk attempted to be sent.</p>
</item>
- </list>
- <p>In case of an error (e.g. <c>addr_unreachable</c>), the
- <c>error</c> field provides additional diagnostics. In such cases,
- the <c>#sctp_paddr_change{}</c> Event is automatically
- converted into an <c>error</c> term returned by
- <c>gen_sctp:recv</c>. The <c>error</c> field value can be
- converted into a string using <c>error_string/1</c>.</p>
- </item>
- <item>
-<pre> #sctp_send_failed{
- flags = true | false,
- error = integer(),
- info = #sctp_sndrcvinfo{},
- assoc_id = assoc_id()
- data = binary()
- } </pre>
- <p>The sender may receive this event if a send operation fails.
- The <c>flags</c> is a Boolean specifying whether the data have
- actually been transmitted over the wire; <c>error</c> provides
- extended diagnostics, use <c>error_string/1</c>;
- <c>info</c> is the original
- <seealso marker="#record-sctp_sndrcvinfo">#sctp_sndrcvinfo{}</seealso> record used in the failed
- <seealso marker="#send/3">send/*,</seealso> and <c>data</c>
- is the whole original data chunk attempted to be sent.</p>
+ </taglist>
<p>In the current implementation of the Erlang/SCTP binding,
- this Event is internally converted into an <c>error</c> term
- returned by <c>recv/*</c>.</p>
+ this event is internally converted into an <c>error</c> term
+ returned by
+ <seealso marker="#recv/1"><c>recv/*</c></seealso>.</p>
</item>
<item>
-<pre> #sctp_adaptation_event{
- adaptation_ind = integer(),
- assoc_id = assoc_id()
- } </pre>
- <p>Delivered when a peer sends an Adaptation Layer Indication
- parameter (configured through the option
- <seealso marker="#option-sctp_adaptation_layer">sctp_adaptation_layer</seealso>).
- Note that with the current implementation of
+ <pre>
+#sctp_adaptation_event{
+ adaptation_ind = integer(),
+ assoc_id = assoc_id()
+}</pre>
+ <p>Delivered when a peer sends an adaptation layer indication
+ parameter (configured through option
+ <seealso marker="#option-sctp_adaptation_layer"><c>sctp_adaptation_layer</c></seealso>).
+ Notice that with the current implementation of
the Erlang/SCTP binding, this event is disabled by default.</p>
</item>
<item>
-<pre> #sctp_pdapi_event{
- indication = sctp_partial_delivery_aborted,
- assoc_id = assoc_id()
- } </pre>
+ <pre>
+#sctp_pdapi_event{
+ indication = sctp_partial_delivery_aborted,
+ assoc_id = assoc_id()
+}</pre>
<p>A partial delivery failure. In the current implementation of
- the Erlang/SCTP binding, this Event is internally converted
- into an <c>error</c> term returned by <c>recv/*</c>.</p>
+ the Erlang/SCTP binding, this event is internally converted
+ into an <c>error</c> term returned by
+ <seealso marker="#recv/1"><c>recv/*</c></seealso>.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="send" arity="3"/>
- <fsummary>Send a message using an <c>#sctp_sndrcvinfo{}</c>record</fsummary>
+ <fsummary>Send a message using an <c>#sctp_sndrcvinfo{}</c>record.</fsummary>
<desc>
- <p>Sends the <c><anno>Data</anno></c> message with all sending parameters from a
- <seealso marker="#record-sctp_sndrcvinfo">#sctp_sndrcvinfo{}</seealso> record.
- This way, the user can specify the PPID (passed to the remote end)
- and Context (passed to the local SCTP layer) which can be used
- for example for error identification.
+ <p>Sends the <c><anno>Data</anno></c> message with all sending
+ parameters from a
+ <seealso marker="#record-sctp_sndrcvinfo"><c>#sctp_sndrcvinfo{}</c></seealso>
+ record. This way, the user can specify the PPID (passed to the remote
+ end) and context (passed to the local SCTP layer), which can be used,
+ for example, for error identification.
However, such a fine level of user control is rarely required.
- The send/4 function is sufficient for most applications.</p>
+ The function <c>send/4</c> is sufficient for most applications.</p>
</desc>
</func>
+
<func>
<name name="send" arity="4"/>
- <fsummary>Send a message over an existing association and given stream</fsummary>
+ <fsummary>Send a message over an existing association and specified
+ stream.</fsummary>
<desc>
- <p>Sends <c><anno>Data</anno></c> message over an existing association and given
- stream.</p>
- </desc>
- </func>
- <func>
- <name name="error_string" arity="1"/>
- <fsummary>Translate an SCTP error number into a string</fsummary>
- <desc>
- <p>Translates an SCTP error number from for example
- <c>#sctp_remote_error{}</c> or <c>#sctp_send_failed{}</c> into
- an explanatory string, or one of the atoms <c>ok</c> for no
- error and <c>undefined</c> for an unrecognized error.</p>
+ <p>Sends a <c><anno>Data</anno></c> message over an existing association
+ and specified stream.</p>
</desc>
</func>
</funcs>
<section>
<marker id="options"></marker>
- <title>SCTP SOCKET OPTIONS</title>
+ <title>SCTP Socket Options</title>
<p>The set of admissible SCTP socket options is by construction
- orthogonal to the sets of TCP, UDP and generic INET options:
- only those options which are explicitly listed below are allowed
+ orthogonal to the sets of TCP, UDP, and generic <c>inet</c> options.
+ Only options listed here are allowed
for SCTP sockets. Options can be set on the socket using
- <seealso marker="#open/1"><c>gen_sctp:open/1,2</c></seealso>
- or <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>,
- retrieved using <seealso marker="inet#getopts/2"><c>inet:getopts/2</c></seealso>,
- and when calling <seealso marker="#connect/4"><c>gen_sctp:connect/4,5</c></seealso>
- options can be changed.</p>
+ <seealso marker="#open/1"><c>open/1,2</c></seealso> or
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>,
+ retrieved using
+ <seealso marker="inet#getopts/2"><c>inet:getopts/2</c></seealso>.
+ Options can be changed when calling
+ <seealso marker="#connect/4"><c>connect/4,5</c></seealso>.</p>
<marker id="option-binary"></marker>
<marker id="option-list"></marker>
<taglist>
<tag><c>{mode, list|binary}</c> or just <c>list</c> or <c>binary</c></tag>
<item>
- <p>Determines the type of data returned from <c>gen_sctp:recv/1,2</c>.</p>
+ <p>Determines the type of data returned from
+ <seealso marker="#recv/1"><c>recv/1,2</c></seealso>.</p>
<marker id="option-active"></marker>
</item>
<tag><c>{active, true|false|once|N}</c></tag>
@@ -517,176 +540,177 @@
<list type="bulleted">
<item>
<p>If <c>false</c> (passive mode, the default),
- the caller needs to do an explicit <c>gen_sctp:recv</c> call
- in order to retrieve the available data from the socket.</p>
+ the caller must do an explicit
+ <seealso marker="#recv/1"><c>recv</c></seealso> call
+ to retrieve the available data from the socket.</p>
</item>
<item>
<p>If <c>true</c> (full active mode), the pending data or events are
sent to the owning process.</p>
- <p><em>NB:</em> This can cause the message queue to overflow,
+ <p>Notice that this can cause the message queue to overflow,
as there is no way to throttle the sender in this case
- (no flow control!).</p>
+ (no flow control).</p>
</item>
<item>
<p>If <c>once</c>, only one message is automatically placed
in the message queue, and after that the mode is automatically
- reset to passive. This provides flow control as well as
+ reset to passive. This provides flow control and
the possibility for the receiver to listen for its incoming
SCTP data interleaved with other inter-process messages.</p>
</item>
<item>
<p>If <c>active</c> is specified as an integer <c>N</c> in the
- range -32768 to 32767 (inclusive), then that number is added to
- the socket's count of the number of data messages to be
+ range -32768 to 32767 (inclusive), that number is added to
+ the socket's counting of data messages to be
delivered to the controlling process. If the result of the
- addition would be negative, the count is set to 0. Once the
- count reaches 0, either through the delivery of messages or by
- being explicitly set with <seealso
- marker="inet#setopts/2">inet:setopts/2</seealso>, the socket's
- mode is automatically reset to passive (<c>{active,
- false}</c>) mode. When a socket in this active mode transitions to
+ addition is negative, the count is set to <c>0</c>. Once the
+ count reaches <c>0</c>, either through the delivery of messages
+ or by being explicitly set with
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>,
+ the socket mode is automatically reset to passive (<c>{active,
+ false}</c>). When a socket in this active mode transitions to
passive mode, the message <c>{sctp_passive, Socket}</c> is sent
to the controlling process to notify it that if it wants to
receive more data messages from the socket, it must call
- <seealso marker="inet#setopts/2">inet:setopts/2</seealso> to set
- the socket back into an active mode.</p>
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>
+ to set the socket back into an active mode.</p>
</item>
</list>
</item>
- <tag><c>{tos, integer()}</c></tag>
+ <tag><c>{tos, integer()}</c></tag>
<item>
- <p>Sets the Type-Of-Service field on the IP datagrams being sent,
- to the given value, which effectively determines a prioritization
+ <p>Sets the Type-Of-Service field on the IP datagrams that are sent,
+ to the specified value. This effectively determines a prioritization
policy for the outbound packets. The acceptable values
- are system-dependent. TODO: we do not provide
- symbolic names for these values yet.</p>
+ are system-dependent.</p>
</item>
<tag><c>{priority, integer()}</c></tag>
<item>
<p>A protocol-independent equivalent of <c>tos</c> above. Setting
- priority implies setting tos as well.</p>
+ priority implies setting <c>tos</c> as well.</p>
</item>
<tag><c>{dontroute, true|false}</c></tag>
<item>
- <p>By default <c>false</c>. If <c>true</c>, the kernel does not
- send packets via any gateway, only sends them to directly
+ <p>Defaults to <c>false</c>. If <c>true</c>, the kernel does not
+ send packets through any gateway, only sends them to directly
connected hosts.</p>
</item>
<tag><c>{reuseaddr, true|false}</c></tag>
<item>
- <p>By default <c>false</c>. If true, the local binding address
- <c>{IP,Port}</c> of the socket can be re-used immediately:
- no waiting in the CLOSE_WAIT state is performed (may be
+ <p>Defaults to <c>false</c>. If true, the local binding address
+ <c>{IP,Port}</c> of the socket can be reused immediately.
+ No waiting in state <c>CLOSE_WAIT</c> is performed (can be
required for high-throughput servers).</p>
</item>
- <tag><c>{sndbuf, integer()}</c></tag>
+ <tag><c>{sndbuf, integer()}</c></tag>
<item>
- <p>The size, in bytes, of the *kernel* send buffer for this socket.
+ <p>The size, in bytes, of the OS kernel send buffer for this socket.
Sending errors would occur for datagrams larger than
<c>val(sndbuf)</c>. Setting this option also adjusts
the size of the driver buffer (see <c>buffer</c> above).</p>
</item>
<tag><c>{recbuf, integer()}</c></tag>
<item>
- <p>The size, in bytes, of the *kernel* recv buffer for this socket.
+ <p>The size, in bytes, of the OS kernel receive buffer for this socket.
Sending errors would occur for datagrams larger than
- <c>val(sndbuf)</c>. Setting this option also adjusts
+ <c>val(recbuf)</c>. Setting this option also adjusts
the size of the driver buffer (see <c>buffer</c> above).</p>
</item>
-
- <tag><c>{sctp_module, module()}</c></tag>
- <item> <p>
- Override which callback module is used. Defaults to
- <c>inet_sctp</c> for IPv4 and <c>inet6_sctp</c> for IPv6.
- </p>
- </item>
-
-
+ <tag><c>{sctp_module, module()}</c></tag>
+ <item>
+ <p>Overrides which callback module is used. Defaults to
+ <c>inet_sctp</c> for IPv4 and <c>inet6_sctp</c> for IPv6.</p>
+ </item>
<tag><c>{sctp_rtoinfo, #sctp_rtoinfo{}}</c></tag>
<item>
-<pre> #sctp_rtoinfo{
- assoc_id = assoc_id(),
- initial = integer(),
- max = integer(),
- min = integer()
- } </pre>
- <p>Determines re-transmission time-out parameters, in milliseconds,
- for the association(s) given by <c>assoc_id</c>.
- If <c>assoc_id = 0</c> (default) indicates the whole endpoint. See
- <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC2960</url> and
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions for SCTP</url> for the exact semantics of the fields values.</p>
+ <pre>
+#sctp_rtoinfo{
+ assoc_id = assoc_id(),
+ initial = integer(),
+ max = integer(),
+ min = integer()
+}</pre>
+ <p>Determines retransmission time-out parameters, in milliseconds,
+ for the association(s) specified by <c>assoc_id</c>.</p>
+ <p><c>assoc_id = 0</c> (default) indicates the whole endpoint. See
+ <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC
+ 2960</url> and
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets
+ API Extensions for SCTP</url>
+ for the exact semantics of the field values.</p>
</item>
<tag><c>{sctp_associnfo, #sctp_assocparams{}}</c></tag>
<item>
-<pre> #sctp_assocparams{
- assoc_id = assoc_id(),
- asocmaxrxt = integer(),
- number_peer_destinations = integer(),
- peer_rwnd = integer(),
- local_rwnd = integer(),
- cookie_life = integer()
- } </pre>
- <p>Determines association parameters for the association(s) given by
- <c>assoc_id</c>. <c>assoc_id = 0</c> (default) indicates
- the whole endpoint. See
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions for SCTP</url> for the discussion of their semantics. Rarely used.</p>
+ <pre>
+#sctp_assocparams{
+ assoc_id = assoc_id(),
+ asocmaxrxt = integer(),
+ number_peer_destinations = integer(),
+ peer_rwnd = integer(),
+ local_rwnd = integer(),
+ cookie_life = integer()
+}</pre>
+ <p>Determines association parameters for the association(s) specified by
+ <c>assoc_id</c>.</p>
+ <p><c>assoc_id = 0</c> (default) indicates the whole endpoint. See
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions for SCTP</url>
+ for the discussion of their semantics. Rarely used.</p>
</item>
<tag><c>{sctp_initmsg, #sctp_initmsg{}}</c></tag>
<item>
-<pre> #sctp_initmsg{
- num_ostreams = integer(),
- max_instreams = integer(),
- max_attempts = integer(),
- max_init_timeo = integer()
- } </pre>
- <p>Determines the default parameters which this socket attempts
+ <pre>
+#sctp_initmsg{
+ num_ostreams = integer(),
+ max_instreams = integer(),
+ max_attempts = integer(),
+ max_init_timeo = integer()
+}</pre>
+ <p>Determines the default parameters that this socket tries
to negotiate with its peer while establishing an association with it.
- Should be set after <c>open/*</c> but before the first
- <c>connect/*</c>. <c>#sctp_initmsg{}</c> can also be used
- as ancillary data with the first call of <c>send/*</c> to
+ Is to be set after
+ <seealso marker="#open/1"><c>open/*</c></seealso>
+ but before the first
+ <seealso marker="#connect/4"><c>connect/*</c></seealso>.
+ <c>#sctp_initmsg{}</c> can also be used
+ as ancillary data with the first call of
+ <seealso marker="#send/3"><c>send/*</c></seealso> to
a new peer (when a new association is created).</p>
- <list type="bulleted">
- <item>
- <p><c>num_ostreams</c>: number of outbound streams;</p>
- </item>
- <item>
- <p><c>max_instreams</c>: max number of in-bound streams;</p>
- </item>
- <item>
- <p><c>max_attempts</c>: max re-transmissions while
- establishing an association;</p>
- </item>
- <item>
- <p><c>max_init_timeo</c>: time-out in milliseconds
- for establishing an association.</p>
- </item>
- </list>
+ <taglist>
+ <tag><c>num_ostreams</c></tag>
+ <item>Number of outbound streams</item>
+ <tag><c>max_instreams</c></tag>
+ <item>Maximum number of inbound streams</item>
+ <tag><c>max_attempts</c></tag>
+ <item>Maximum retransmissions while establishing an association</item>
+ <tag><c>max_init_timeo</c></tag>
+ <item>Time-out, in milliseconds, for establishing an association</item>
+ </taglist>
</item>
<tag><c>{sctp_autoclose, integer() >= 0}</c></tag>
<item>
- <p>Determines the time (in seconds) after which an idle association is
+ <p>Determines the time, in seconds, after which an idle association is
automatically closed. <c>0</c> means that the association is
never automatically closed.</p>
</item>
<tag><c>{sctp_nodelay, true|false}</c></tag>
<item>
<p>Turns on|off the Nagle algorithm for merging small packets
- into larger ones (which improves throughput at the expense
- of latency).</p>
+ into larger ones. This improves throughput at the expense
+ of latency.</p>
</item>
<tag><c>{sctp_disable_fragments, true|false}</c></tag>
<item>
<p>If <c>true</c>, induces an error on an attempt to send
- a message which is larger than the current PMTU size
- (which would require fragmentation/re-assembling).
- Note that message fragmentation does not affect
+ a message larger than the current PMTU size
+ (which would require fragmentation/reassembling).
+ Notice that message fragmentation does not affect
the logical atomicity of its delivery; this option
is provided for performance reasons only.</p>
</item>
<tag><c>{sctp_i_want_mapped_v4_addr, true|false}</c></tag>
<item>
<p>Turns on|off automatic mapping of IPv4 addresses into IPv6 ones
- (if the socket address family is AF_INET6).</p>
+ (if the socket address family is <c>AF_INET6</c>).</p>
</item>
<tag><c>{sctp_maxseg, integer()}</c></tag>
<item>
@@ -695,176 +719,171 @@
</item>
<tag><c>{sctp_primary_addr, #sctp_prim{}}</c></tag>
<item>
-<pre> #sctp_prim{
- assoc_id = assoc_id(),
- addr = {IP, Port}
- }
- IP = ip_address()
- Port = port_number() </pre>
- <p>For the association given by <c>assoc_id</c>,
- <c>{IP,Port}</c> must be one of the peer's addresses.
- This option determines that the given address is
- treated by the local SCTP stack as the peer's primary address.</p>
+ <pre>
+#sctp_prim{
+ assoc_id = assoc_id(),
+ addr = {IP, Port}
+}
+ IP = ip_address()
+ Port = port_number()</pre>
+ <p>For the association specified by <c>assoc_id</c>,
+ <c>{IP,Port}</c> must be one of the peer addresses.
+ This option determines that the specified address is treated by
+ the local SCTP stack as the primary address of the peer.</p>
</item>
<tag><c>{sctp_set_peer_primary_addr, #sctp_setpeerprim{}}</c></tag>
<item>
-<pre> #sctp_setpeerprim{
- assoc_id = assoc_id(),
- addr = {IP, Port}
- }
- IP = ip_address()
- Port = port_number() </pre>
- <p>When set, informs the peer that it should use <c>{IP, Port}</c>
+ <pre>
+#sctp_setpeerprim{
+ assoc_id = assoc_id(),
+ addr = {IP, Port}
+}
+ IP = ip_address()
+ Port = port_number()</pre>
+ <p>When set, informs the peer to use <c>{IP, Port}</c>
as the primary address of the local endpoint for the association
- given by <c>assoc_id</c>.</p>
+ specified by <c>assoc_id</c>.</p>
<marker id="option-sctp_adaptation_layer"></marker>
</item>
<tag><c>{sctp_adaptation_layer, #sctp_setadaptation{}}</c></tag>
<item>
<marker id="record-sctp_setadaptation"></marker>
-<pre> #sctp_setadaptation{
- adaptation_ind = integer()
- } </pre>
- <p>When set, requests that the local endpoint uses the value given by
- <c>adaptation_ind</c> as the Adaptation Indication parameter for
- establishing new associations. See
- <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC2960</url> and
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extenstions for SCTP</url> for more details.</p>
+ <pre>
+#sctp_setadaptation{
+ adaptation_ind = integer()
+}</pre>
+ <p>When set, requests that the local endpoint uses the value specified
+ by <c>adaptation_ind</c> as the Adaptation Indication parameter for
+ establishing new associations. For details, see
+ <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC 2960</url>
+ and
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets
+ API Extenstions for SCTP</url>.</p>
</item>
<tag><c>{sctp_peer_addr_params, #sctp_paddrparams{}}</c></tag>
<item>
-<pre> #sctp_paddrparams{
- assoc_id = assoc_id(),
- address = {IP, Port},
- hbinterval = integer(),
- pathmaxrxt = integer(),
- pathmtu = integer(),
- sackdelay = integer(),
- flags = list()
- }
- IP = ip_address()
- Port = port_number() </pre>
- <p>This option determines various per-address parameters for
- the association given by <c>assoc_id</c> and the peer address
- <c>address</c> (the SCTP protocol supports multi-homing,
- so more than 1 address can correspond to a given association).</p>
- <list type="bulleted">
- <item>
- <p><c>hbinterval</c>: heartbeat interval, in milliseconds;</p>
- </item>
- <item>
- <p><c>pathmaxrxt</c>: max number of retransmissions
- before this address is considered unreachable (and an
- alternative address is selected);</p>
- </item>
- <item>
- <p><c>pathmtu</c>: fixed Path MTU, if automatic discovery is
- disabled (see <c>flags</c> below);</p>
- </item>
- <item>
- <p><c>sackdelay</c>: delay in milliseconds for SAC messages
- (if the delay is enabled, see <c>flags</c> below);</p>
- </item>
- <item>
- <p><c>flags</c>: the following flags are available:</p>
- <list type="bulleted">
- <item>
- <p><c>hb_enable</c>: enable heartbeat; </p>
- </item>
- <item>
- <p><c>hb_disable</c>: disable heartbeat;</p>
- </item>
- <item>
- <p><c>hb_demand</c>: initiate heartbeat immediately;</p>
- </item>
- <item>
- <p><c>pmtud_enable</c>: enable automatic Path MTU discovery;</p>
- </item>
- <item>
- <p><c>pmtud_disable</c>: disable automatic Path MTU discovery;</p>
- </item>
- <item>
- <p><c>sackdelay_enable</c>: enable SAC delay;</p>
- </item>
- <item>
- <p><c>sackdelay_disable</c>: disable SAC delay.</p>
- </item>
- </list>
+ <pre>
+#sctp_paddrparams{
+ assoc_id = assoc_id(),
+ address = {IP, Port},
+ hbinterval = integer(),
+ pathmaxrxt = integer(),
+ pathmtu = integer(),
+ sackdelay = integer(),
+ flags = list()
+}
+IP = ip_address()
+Port = port_number()</pre>
+ <p>Determines various per-address parameters for
+ the association specified by <c>assoc_id</c> and the peer address
+ <c>address</c> (the SCTP protocol supports multi-homing, so
+ more than one address can correspond to a specified association).</p>
+ <taglist>
+ <tag><c>hbinterval</c></tag>
+ <item><p>Heartbeat interval, in milliseconds</p></item>
+ <tag><c>pathmaxrxt</c></tag>
+ <item><p>Maximum number of retransmissions before this address is
+ considered unreachable (and an alternative address is selected)</p>
</item>
- </list>
+ <tag><c>pathmtu</c></tag>
+ <item><p>Fixed Path MTU, if automatic discovery is disabled (see
+ <c>flags</c> below)</p></item>
+ <tag><c>sackdelay</c></tag>
+ <item><p>Delay, in milliseconds, for SAC messages (if the delay is
+ enabled, see <c>flags</c> below)</p></item>
+ <tag><c>flags</c></tag>
+ <item><p>The following flags are available:</p>
+ <taglist>
+ <tag><c>hb_enable</c></tag>
+ <item>Enables heartbeat</item>
+ <tag><c>hb_disable</c></tag>
+ <item>Disables heartbeat</item>
+ <tag><c>hb_demand</c></tag>
+ <item>Initiates heartbeat immediately</item>
+ <tag><c>pmtud_enable</c></tag>
+ <item>Enables automatic Path MTU discovery</item>
+ <tag><c>pmtud_disable</c></tag>
+ <item>Disables automatic Path MTU discovery</item>
+ <tag><c>sackdelay_enable</c></tag>
+ <item>Enables SAC delay</item>
+ <tag><c>sackdelay_disable</c></tag>
+ <item>Disables SAC delay</item>
+ </taglist></item>
+ </taglist>
</item>
<tag><c>{sctp_default_send_param, #sctp_sndrcvinfo{}}</c></tag>
<item>
<marker id="record-sctp_sndrcvinfo"></marker>
-<pre> #sctp_sndrcvinfo{
- stream = integer(),
- ssn = integer(),
- flags = list(),
- ppid = integer(),
- context = integer(),
- timetolive = integer(),
- tsn = integer(),
- cumtsn = integer(),
- assoc_id = assoc_id()
- } </pre>
+ <pre>
+#sctp_sndrcvinfo{
+ stream = integer(),
+ ssn = integer(),
+ flags = list(),
+ ppid = integer(),
+ context = integer(),
+ timetolive = integer(),
+ tsn = integer(),
+ cumtsn = integer(),
+ assoc_id = assoc_id()
+}</pre>
<p><c>#sctp_sndrcvinfo{}</c> is used both in this socket option, and as
ancillary data while sending or receiving SCTP messages. When
- set as an option, it provides a default values for subsequent
- <c>gen_sctp:send</c>calls on the association given by
- <c>assoc_id</c>. <c>assoc_id = 0</c> (default) indicates
- the whole endpoint. The following fields typically need
- to be specified by the sender:</p>
- <list type="bulleted">
- <item>
- <p><c>sinfo_stream</c>: stream number (0-base) within the association
- to send the messages through;</p>
- </item>
- <item>
- <p><c>sinfo_flags</c>: the following flags are recognised:</p>
- <list type="bulleted">
- <item>
- <p><c>unordered</c>: the message is to be sent unordered;</p>
- </item>
- <item>
- <p><c>addr_over</c>: the address specified in
- <c>gen_sctp:send</c> overwrites the primary peer address;</p>
- </item>
- <item>
- <p><c>abort</c>: abort the current association without
- flushing any unsent data;</p>
- </item>
- <item>
- <p><c>eof</c>: gracefully shut down the current
- association, with flushing of unsent data.</p>
- </item>
- </list>
- <p>Other fields are rarely used. See
- <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC2960</url> and
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions for SCTP</url> for full information.</p>
- </item>
- </list>
+ set as an option, it provides default values for subsequent
+ <seealso marker="#send/3"><c>send</c></seealso>
+ calls on the association specified by
+ <c>assoc_id</c>.</p>
+ <p><c>assoc_id = 0</c> (default) indicates
+ the whole endpoint.</p>
+ <p>The following fields typically must be specified by the sender:</p>
+ <taglist>
+ <tag><c>sinfo_stream</c></tag>
+ <item><p>Stream number (0-base) within the association
+ to send the messages through;</p></item>
+ <tag><c>sinfo_flags</c></tag>
+ <item><p>The following flags are recognised:</p>
+ <taglist>
+ <tag><c>unordered</c></tag>
+ <item>The message is to be sent unordered</item>
+ <tag><c>addr_over</c></tag>
+ <item>The address specified in
+ <seealso marker="#send/3"><c>send</c></seealso>
+ overwrites the primary peer address</item>
+ <tag><c>abort</c></tag>
+ <item>Aborts the current association without flushing any unsent
+ data</item>
+ <tag><c>eof</c></tag>
+ <item>Gracefully shuts down the current association, with
+ flushing of unsent data</item>
+ </taglist>
+ <p>Other fields are rarely used. For complete information, see
+ <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC 2960</url>
+ and
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets
+ API Extensions for SCTP</url>.</p></item>
+ </taglist>
<marker id="option-sctp_events"></marker>
</item>
<tag><c>{sctp_events, #sctp_event_subscribe{}}</c></tag>
<item>
<marker id="record-sctp_event_subscribe"></marker>
-<pre> #sctp_event_subscribe{
- data_io_event = true | false,
- association_event = true | false,
- address_event = true | false,
- send_failure_event = true | false,
- peer_error_event = true | false,
- shutdown_event = true | false,
- partial_delivery_event = true | false,
- adaptation_layer_event = true | false
- } </pre>
+ <pre>
+#sctp_event_subscribe{
+ data_io_event = true | false,
+ association_event = true | false,
+ address_event = true | false,
+ send_failure_event = true | false,
+ peer_error_event = true | false,
+ shutdown_event = true | false,
+ partial_delivery_event = true | false,
+ adaptation_layer_event = true | false
+}</pre>
<p>This option determines which
<seealso marker="#sctp_events">SCTP Events</seealso> are to be
- received (via <seealso marker="#recv/1">recv/*</seealso>)
- along with the data. The only
- exception is <c>data_io_event</c> which enables or disables
- receiving of
- <seealso marker="#record-sctp_sndrcvinfo">#sctp_sndrcvinfo{}</seealso>
+ received (through
+ <seealso marker="#recv/1"><c>recv/*</c></seealso>)
+ along with the data. The only exception is <c>data_io_event</c>,
+ which enables or disables receiving of
+ <seealso marker="#record-sctp_sndrcvinfo"><c>#sctp_sndrcvinfo{}</c></seealso>
ancillary data, not events.
By default, all flags except <c>adaptation_layer_event</c> are
enabled, although <c>sctp_data_io_event</c> and
@@ -873,201 +892,185 @@
</item>
<tag><c>{sctp_delayed_ack_time, #sctp_assoc_value{}}</c></tag>
<item>
-<pre> #sctp_assoc_value{
- assoc_id = assoc_id(),
- assoc_value = integer()
- } </pre>
+ <pre>
+#sctp_assoc_value{
+ assoc_id = assoc_id(),
+ assoc_value = integer()
+}</pre>
<p>Rarely used. Determines the ACK time
- (given by <c>assoc_value</c> in milliseconds) for
- the given association or the whole endpoint
+ (specified by <c>assoc_value</c>, in milliseconds) for
+ the specified association or the whole endpoint
if <c>assoc_value = 0</c> (default).</p>
</item>
<tag><c>{sctp_status, #sctp_status{}}</c></tag>
<item>
-<pre> #sctp_status{
- assoc_id = assoc_id(),
- state = atom(),
- rwnd = integer(),
- unackdata = integer(),
- penddata = integer(),
- instrms = integer(),
- outstrms = integer(),
- fragmentation_point = integer(),
- primary = #sctp_paddrinfo{}
- } </pre>
+ <pre>
+#sctp_status{
+ assoc_id = assoc_id(),
+ state = atom(),
+ rwnd = integer(),
+ unackdata = integer(),
+ penddata = integer(),
+ instrms = integer(),
+ outstrms = integer(),
+ fragmentation_point = integer(),
+ primary = #sctp_paddrinfo{}
+}</pre>
<p>This option is read-only. It determines the status of
- the SCTP association given by <c>assoc_id</c>. Possible values of
- <c>state</c> follows. The state designations are mostly
- self-explanatory. <c>state_empty</c> is the default which means
- that no other state is active:</p>
- <list type="bulleted">
- <item>
- <p><c>sctp_state_empty</c></p>
- </item>
- <item>
- <p><c>sctp_state_closed</c></p>
- </item>
- <item>
- <p><c>sctp_state_cookie_wait</c></p>
- </item>
- <item>
- <p><c>sctp_state_cookie_echoed</c></p>
- </item>
- <item>
- <p><c>sctp_state_established</c></p>
- </item>
- <item>
- <p><c>sctp_state_shutdown_pending</c></p>
- </item>
- <item>
- <p><c>sctp_state_shutdown_sent</c></p>
- </item>
- <item>
- <p><c>sctp_state_shutdown_received</c></p>
- </item>
- <item>
- <p><c>sctp_state_shutdown_ack_sent</c></p>
- </item>
- </list>
- <p>The semantics of other fields is the following:</p>
- <list type="bulleted">
- <item>
- <p><c>sstat_rwnd</c>: the association peer's current receiver
- window size;</p>
- </item>
- <item>
- <p><c>sstat_unackdata</c>: number of unacked data chunks;</p>
- </item>
- <item>
- <p><c>sstat_penddata</c>: number of data chunks pending receipt;</p>
- </item>
- <item>
- <p><c>sstat_instrms</c>: number of inbound streams;</p>
- </item>
- <item>
- <p><c>sstat_outstrms</c>: number of outbound streams;</p>
- </item>
- <item>
- <p><c>sstat_fragmentation_point</c>: message size at which SCTP
- fragmentation will occur;</p>
- </item>
- <item>
- <p><c>sstat_primary</c>: information on the current primary peer
- address (see below for the format of <c>#sctp_paddrinfo{}</c>).</p>
- </item>
- </list>
+ the SCTP association specified by <c>assoc_id</c>.
+ The following are the
+ possible values of <c>state</c> (the state designations are mostly
+ self-explanatory):</p>
+ <taglist>
+ <tag><c>sctp_state_empty</c></tag>
+ <item>Default. Means that no other state is active.</item>
+ <tag><c>sctp_state_closed</c></tag>
+ <item></item>
+ <tag><c>sctp_state_cookie_wait</c></tag>
+ <item></item>
+ <tag><c>sctp_state_cookie_echoed</c></tag>
+ <item></item>
+ <tag><c>sctp_state_established</c></tag>
+ <item></item>
+ <tag><c>sctp_state_shutdown_pending</c></tag>
+ <item></item>
+ <tag><c>sctp_state_shutdown_sent</c></tag>
+ <item></item>
+ <tag><c>sctp_state_shutdown_received</c></tag>
+ <item></item>
+ <tag><c>sctp_state_shutdown_ack_sent</c></tag>
+ <item></item>
+ </taglist>
+ <p>Semantics of the other fields:</p>
+ <taglist>
+ <tag><c>sstat_rwnd</c></tag>
+ <item>Current receiver window size of the association</item>
+ <tag><c>sstat_unackdata</c></tag>
+ <item>Number of unacked data chunks</item>
+ <tag><c>sstat_penddata</c></tag>
+ <item>Number of data chunks pending receipt</item>
+ <tag><c>sstat_instrms</c></tag>
+ <item>Number of inbound streams</item>
+ <tag><c>sstat_outstrms</c></tag>
+ <item>Number of outbound streams</item>
+ <tag><c>sstat_fragmentation_point</c></tag>
+ <item>Message size at which SCTP fragmentation occurs</item>
+ <tag><c>sstat_primary</c></tag>
+ <item>Information on the current primary peer address (see below for
+ the format of <c>#sctp_paddrinfo{}</c>)</item>
+ </taglist>
<marker id="option-sctp_get_peer_addr_info"></marker>
</item>
<tag><c>{sctp_get_peer_addr_info, #sctp_paddrinfo{}}</c></tag>
<item>
<marker id="record-sctp_paddrinfo"></marker>
-<pre> #sctp_paddrinfo{
- assoc_id = assoc_id(),
- address = {IP, Port},
- state = inactive | active | unconfirmed,
- cwnd = integer(),
- srtt = integer(),
- rto = integer(),
- mtu = integer()
- }
- IP = ip_address()
- Port = port_number() </pre>
+ <pre>
+#sctp_paddrinfo{
+ assoc_id = assoc_id(),
+ address = {IP, Port},
+ state = inactive | active | unconfirmed,
+ cwnd = integer(),
+ srtt = integer(),
+ rto = integer(),
+ mtu = integer()
+}
+IP = ip_address()
+Port = port_number()</pre>
<p>This option is read-only. It determines the parameters specific to
- the peer's address given by <c>address</c> within the association
- given by <c>assoc_id</c>. The <c>address</c> field must be set by the
+ the peer address specified by <c>address</c> within the association
+ specified by <c>assoc_id</c>. Field <c>address</c> fmust be set by the
caller; all other fields are filled in on return.
If <c>assoc_id = 0</c> (default), the <c>address</c>
is automatically translated into the corresponding
- association ID. This option is rarely used; see
- <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC2960</url> and
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions for SCTP</url> for the semantics of all fields.</p>
+ association ID. This option is rarely used.
+ For the semantics of all fields, see
+ <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC 2960</url>
+ and
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets
+ API Extensions for SCTP</url>.</p>
</item>
</taglist>
</section>
<section>
<marker id="examples"></marker>
- <title>SCTP EXAMPLES</title>
- <list type="bulleted">
- <item>
- <p>Example of an Erlang SCTP Server which receives SCTP messages and
- prints them on the standard output:</p>
-<pre> -module(sctp_server).
-
- -export([server/0,server/1,server/2]).
- -include_lib("kernel/include/inet.hrl").
- -include_lib("kernel/include/inet_sctp.hrl").
-
- server() -&gt;
- server(any, 2006).
-
- server([Host,Port]) when is_list(Host), is_list(Port) -&gt;
- {ok, #hostent{h_addr_list = [IP|_]}} = inet:gethostbyname(Host),
- io:format("~w -&gt; ~w~n", [Host, IP]),
- server([IP, list_to_integer(Port)]).
-
- server(IP, Port) when is_tuple(IP) orelse IP == any orelse IP == loopback,
- is_integer(Port) -&gt;
- {ok,S} = gen_sctp:open(Port, [{recbuf,65536}, {ip,IP}]),
- io:format("Listening on ~w:~w. ~w~n", [IP,Port,S]),
- ok = gen_sctp:listen(S, true),
- server_loop(S).
-
- server_loop(S) -&gt;
- case gen_sctp:recv(S) of
- {error, Error} -&gt;
- io:format("SCTP RECV ERROR: ~p~n", [Error]);
- Data -&gt;
- io:format("Received: ~p~n", [Data])
- end,
- server_loop(S). </pre>
- </item>
- <item>
- <p>Example of an Erlang SCTP Client which interacts with the above Server.
- Note that in this example, the Client creates an association with
- the Server with 5 outbound streams. For this reason, sending of
- "Test 0" over Stream 0 succeeds, but sending of "Test 5"
- over Stream 5 fails. The client then <c>abort</c>s the association,
- which results in the corresponding Event being received on
- the Server side.</p>
-<pre> -module(sctp_client).
-
- -export([client/0, client/1, client/2]).
- -include_lib("kernel/include/inet.hrl").
- -include_lib("kernel/include/inet_sctp.hrl").
+ <title>SCTP Examples</title>
+ <p>Example of an Erlang SCTP server that receives SCTP messages and
+ prints them on the standard output:</p>
+ <pre>
+-module(sctp_server).
+
+-export([server/0,server/1,server/2]).
+-include_lib("kernel/include/inet.hrl").
+-include_lib("kernel/include/inet_sctp.hrl").
+
+server() -&gt;
+ server(any, 2006).
+
+server([Host,Port]) when is_list(Host), is_list(Port) -&gt;
+ {ok, #hostent{h_addr_list = [IP|_]}} = inet:gethostbyname(Host),
+ io:format("~w -&gt; ~w~n", [Host, IP]),
+ server([IP, list_to_integer(Port)]).
+
+server(IP, Port) when is_tuple(IP) orelse IP == any orelse IP == loopback,
+ is_integer(Port) -&gt;
+ {ok,S} = gen_sctp:open(Port, [{recbuf,65536}, {ip,IP}]),
+ io:format("Listening on ~w:~w. ~w~n", [IP,Port,S]),
+ ok = gen_sctp:listen(S, true),
+ server_loop(S).
+
+server_loop(S) -&gt;
+ case gen_sctp:recv(S) of
+ {error, Error} -&gt;
+ io:format("SCTP RECV ERROR: ~p~n", [Error]);
+ Data -&gt;
+ io:format("Received: ~p~n", [Data])
+ end,
+ server_loop(S).</pre>
+ <p>Example of an Erlang SCTP client interacting with the above server.
+ Notice that in this example the client creates an association with
+ the server with 5 outbound streams. Therefore, sending of
+ <c>"Test 0"</c> over stream 0 succeeds, but sending of <c>"Test 5"</c>
+ over stream 5 fails. The client then <c>abort</c>s the association,
+ which results in that the corresponding event is received on
+ the server side.</p>
+ <pre>
+-module(sctp_client).
+
+-export([client/0, client/1, client/2]).
+-include_lib("kernel/include/inet.hrl").
+-include_lib("kernel/include/inet_sctp.hrl").
+
+client() -&gt;
+ client([localhost]).
+
+client([Host]) -&gt;
+ client(Host, 2006);
- client() -&gt;
- client([localhost]).
-
- client([Host]) -&gt;
- client(Host, 2006);
-
- client([Host, Port]) when is_list(Host), is_list(Port) -&gt;
- client(Host,list_to_integer(Port)),
- init:stop().
-
- client(Host, Port) when is_integer(Port) -&gt;
- {ok,S} = gen_sctp:open(),
- {ok,Assoc} = gen_sctp:connect
- (S, Host, Port, [{sctp_initmsg,#sctp_initmsg{num_ostreams=5}}]),
- io:format("Connection Successful, Assoc=~p~n", [Assoc]),
-
- io:write(gen_sctp:send(S, Assoc, 0, &lt;&lt;"Test 0"&gt;&gt;)),
- io:nl(),
- timer:sleep(10000),
- io:write(gen_sctp:send(S, Assoc, 5, &lt;&lt;"Test 5"&gt;&gt;)),
- io:nl(),
- timer:sleep(10000),
- io:write(gen_sctp:abort(S, Assoc)),
- io:nl(),
-
- timer:sleep(1000),
- gen_sctp:close(S). </pre>
- </item>
- <item>
- <p>A very simple Erlang SCTP Client which uses the
- connect_init API.</p>
-<pre>-module(ex3).
+client([Host, Port]) when is_list(Host), is_list(Port) -&gt;
+ client(Host,list_to_integer(Port)),
+ init:stop().
+
+client(Host, Port) when is_integer(Port) -&gt;
+ {ok,S} = gen_sctp:open(),
+ {ok,Assoc} = gen_sctp:connect
+ (S, Host, Port, [{sctp_initmsg,#sctp_initmsg{num_ostreams=5}}]),
+ io:format("Connection Successful, Assoc=~p~n", [Assoc]),
+
+ io:write(gen_sctp:send(S, Assoc, 0, &lt;&lt;"Test 0"&gt;&gt;)),
+ io:nl(),
+ timer:sleep(10000),
+ io:write(gen_sctp:send(S, Assoc, 5, &lt;&lt;"Test 5"&gt;&gt;)),
+ io:nl(),
+ timer:sleep(10000),
+ io:write(gen_sctp:abort(S, Assoc)),
+ io:nl(),
+
+ timer:sleep(1000),
+ gen_sctp:close(S).</pre>
+ <p>A simple Erlang SCTP client that uses the <c>connect_init</c> API:</p>
+ <pre>
+-module(ex3).
-export([client/4]).
-include_lib("kernel/include/inet.hrl").
@@ -1099,7 +1102,7 @@ client_loop(S, Peer1, Port1, AssocId1, Peer2, Port2, AssocId2) -&gt;
io:format("Association 2 connect result: ~p. AssocId: ~p~n",
[SAC#sctp_assoc_change.state, SAC#sctp_assoc_change.assoc_id]),
client_loop(S, Peer1, Port1, AssocId1, Peer2, Port2,
- SAC#sctp_assoc_change.assoc_id);
+ SAC#sctp_assoc_change.assoc_id);
{sctp, S, Peer1, Port1, Data} -&gt;
io:format("Association 1: received ~p~n", [Data]),
@@ -1118,20 +1121,19 @@ client_loop(S, Peer1, Port1, AssocId1, Peer2, Port2, AssocId2) -&gt;
after 5000 -&gt;
ok
- end.
-</pre>
- </item>
- </list>
+ end.</pre>
</section>
<section>
<marker id="seealso"></marker>
- <title>SEE ALSO</title>
- <p><seealso marker="inet">inet(3)</seealso>,
- <seealso marker="gen_tcp">gen_tcp(3)</seealso>,
- <seealso marker="gen_udp">gen_udp(3)</seealso>,
- <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC2960</url> (Stream Control Transmission Protocol),
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions for SCTP.</url></p>
+ <title>See Also</title>
+ <p><seealso marker="gen_tcp"><c>gen_tcp(3)</c></seealso>,
+ <seealso marker="gen_udp"><c>gen_udp(3)</c></seealso>,
+ <seealso marker="inet"><c>inet(3)</c></seealso>,
+ <url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC 2960</url>
+ (Stream Control Transmission Protocol),
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets
+ API Extensions for SCTP</url></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/gen_tcp.xml b/lib/kernel/doc/src/gen_tcp.xml
index 6a19e76c4f..83242c2df8 100644
--- a/lib/kernel/doc/src/gen_tcp.xml
+++ b/lib/kernel/doc/src/gen_tcp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -21,7 +21,6 @@
limitations under the License.
</legalnotice>
-
<title>gen_tcp</title>
<prepared>[email protected]</prepared>
<docno></docno>
@@ -29,13 +28,13 @@
<rev>A</rev>
</header>
<module>gen_tcp</module>
- <modulesummary>Interface to TCP/IP sockets</modulesummary>
+ <modulesummary>Interface to TCP/IP sockets.</modulesummary>
<description>
- <p>The <c>gen_tcp</c> module provides functions for communicating
+ <p>This module provides functions for communicating
with sockets using the TCP/IP protocol.</p>
- <p>The following code fragment provides a simple example of
+ <p>The following code fragment is a simple example of
a client connecting to a server at port 5678, transferring a
- binary and closing the connection:</p>
+ binary, and closing the connection:</p>
<code type="none">
client() ->
SomeHostInNet = "localhost", % to make it runnable on one machine
@@ -43,8 +42,8 @@ client() ->
[binary, {packet, 0}]),
ok = gen_tcp:send(Sock, "Some Data"),
ok = gen_tcp:close(Sock).</code>
- <p>At the other end a server is listening on port 5678, accepts
- the connection and receives the binary:</p>
+ <p>At the other end, a server is listening on port 5678, accepts
+ the connection, and receives the binary:</p>
<code type="none">
server() ->
{ok, LSock} = gen_tcp:listen(5678, [binary, {packet, 0},
@@ -61,7 +60,8 @@ do_recv(Sock, Bs) ->
{error, closed} ->
{ok, list_to_binary(Bs)}
end.</code>
- <p>For more examples, see the <seealso marker="#examples">examples</seealso> section.</p>
+ <p>For more examples, see section
+ <seealso marker="#examples">Examples</seealso>.</p>
</description>
<datatypes>
@@ -79,9 +79,9 @@ do_recv(Sock, Bs) ->
</datatype>
<datatype>
<name>socket()</name>
- <desc>
- <p><marker id="type-socket"/>
- As returned by accept/1,2 and connect/3,4.</p>
+ <desc><p>As returned by
+ <seealso marker="#accept/1"><c>accept/1,2</c></seealso> and
+ <seealso marker="#connect/3"><c>connect/3,4</c></seealso>.</p>
<marker id="connect"></marker>
</desc>
</datatype>
@@ -89,285 +89,273 @@ do_recv(Sock, Bs) ->
<funcs>
<func>
+ <name name="accept" arity="1"/>
+ <name name="accept" arity="2"/>
+ <fsummary>Accept an incoming connection request on a listening socket.</fsummary>
+ <type_desc variable="ListenSocket">Returned by
+ <seealso marker="#listen/2"><c>listen/2</c></seealso>.
+ </type_desc>
+ <desc>
+ <p>Accepts an incoming connection request on a listening socket.
+ <c><anno>Socket</anno></c> must be a socket returned from
+ <seealso marker="#listen/2"><c>listen/2</c></seealso>.
+ <c><anno>Timeout</anno></c> specifies a time-out value in
+ milliseconds. Defaults to <c>infinity</c>.</p>
+ <p>Returns:</p>
+ <list type="bulleted">
+ <item><p><c>{ok, <anno>Socket</anno>}</c> if a connection is
+ established</p></item>
+ <item><p><c>{error, closed}</c> if <c><anno>ListenSocket</anno></c>
+ is closed</p></item>
+ <item><p><c>{error, timeout}</c> if no connection is established
+ within the specified time</p></item>
+ <item><p><c>{error, system_limit}</c> if all available ports in the
+ Erlang emulator are in use</p></item>
+ <item><p>A POSIX error value if something else goes wrong, see
+ <seealso marker="inet"><c>inet(3)</c></seealso> for possible
+ error values</p></item>
+ </list>
+ <p>Packets can be sent to the returned socket <c><anno>Socket</anno></c>
+ using
+ <seealso marker="#send/2"><c>send/2</c></seealso>.
+ Packets sent from the peer are delivered as messages (unless
+ <c>{active, false}</c> is specified in the option list for the
+ listening socket, in which case packets are retrieved by calling
+ <seealso marker="#recv/2"><c>recv/2</c></seealso>):</p>
+ <code type="none">
+{tcp, Socket, Data}</code>
+ <note>
+ <p>The <c>accept</c> call does
+ <em>not</em> have to be issued from the socket owner
+ process. Using version 5.5.3 and higher of the emulator,
+ multiple simultaneous accept calls can be issued from
+ different processes, which allows for a pool of acceptor
+ processes handling incoming connections.</p>
+ </note>
+ </desc>
+ </func>
+
+ <func>
+ <name name="close" arity="1"/>
+ <fsummary>Close a TCP socket.</fsummary>
+ <desc>
+ <p>Closes a TCP socket.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="connect" arity="3"/>
<name name="connect" arity="4"/>
- <fsummary>Connect to a TCP port</fsummary>
+ <fsummary>Connect to a TCP port.</fsummary>
<desc>
<p>Connects to a server on TCP port <c><anno>Port</anno></c> on the host
- with IP address <c><anno>Address</anno></c>. The <c><anno>Address</anno></c> argument
- can be either a hostname, or an IP address.</p>
- <p>The available options are:</p>
+ with IP address <c><anno>Address</anno></c>. Argument
+ <c><anno>Address</anno></c> can be a hostname or an IP address.</p>
+ <p>The following options are available:</p>
<taglist>
- <tag><c>{ip, ip_address()}</c></tag>
- <item>
- <p>If the host has several network interfaces, this option
- specifies which one to use.</p>
+ <tag><c>{ip, Address}</c></tag>
+ <item><p>If the host has many network interfaces, this option
+ specifies which one to use.</p></item>
+ <tag><c>{ifaddr, Address}</c></tag>
+ <item><p>Same as <c>{ip, Address}</c>. If the host has many
+ network interfaces, this option specifies which one to use.</p>
</item>
-
- <tag><c>{ifaddr, ip_address()}</c></tag>
- <item>
- <p>Same as <c>{ip, ip_address()}</c>. If the host has several network interfaces, this option
- specifies which one to use.</p>
- </item>
-
<tag><c>{fd, integer() >= 0}</c></tag>
- <item>
- <p>If a socket has somehow been connected without using
- <c>gen_tcp</c>, use this option to pass the file
- descriptor for it. If <c>{ip, ip_address()}</c>
- and/or <c>{port, port_number()}</c> is combined with
- this option the fd will be bound to the given interface
- and port before connecting. If these options are not given
- it is assumed that the fd is already bound appropriately.
- </p>
- </item>
-
+ <item><p>If a socket has somehow been connected without using
+ <c>gen_tcp</c>, use this option to pass the file descriptor
+ for it. If <c>{ip, Address}</c> and/or
+ <c>{port, port_number()}</c> is combined with this option, the
+ <c>fd</c> is bound to the specified interface and port before
+ connecting. If these options are not specified, it is assumed that
+ the <c>fd</c> is already bound appropriately.</p></item>
<tag><c>inet</c></tag>
- <item>
- <p>Set up the socket for IPv4.</p>
- </item>
-
- <tag><c>inet6</c></tag>
- <item>
- <p>Set up the socket for IPv6.</p>
+ <item><p>Sets up the socket for IPv4.</p></item>
+ <tag><c>inet6</c></tag>
+ <item><p>Sets up the socket for IPv6.</p></item>
+ <tag><c>local</c></tag>
+ <item>
+ <p>
+ Sets up a Unix Domain Socket. See
+ <seealso marker="inet#type-local_address">
+ <c>inet:local_address()</c>
+ </seealso>
+ </p>
</item>
-
<tag><c>{port, Port}</c></tag>
- <item>
- <p>Specify which local port number to use.</p>
- </item>
-
- <tag><c>{tcp_module, module()}</c></tag>
- <item> <p>
- Override which callback module is used. Defaults to
- <c>inet_tcp</c> for IPv4 and <c>inet6_tcp</c> for IPv6.
- </p>
- </item>
-
+ <item><p>Specifies which local port number to use.</p></item>
+ <tag><c>{tcp_module, module()}</c></tag>
+ <item><p>Overrides which callback module is used. Defaults to
+ <c>inet_tcp</c> for IPv4 and <c>inet6_tcp</c> for IPv6.</p></item>
<tag><c>Opt</c></tag>
- <item>
- <p>See
- <seealso marker="inet#setopts/2">inet:setopts/2</seealso>.</p>
+ <item><p>See
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>.</p>
</item>
</taglist>
<p>Packets can be sent to the returned socket <c><anno>Socket</anno></c>
- using <c>send/2</c>. Packets sent from the peer are delivered
- as messages:</p>
+ using <seealso marker="#send/2"><c>send/2</c></seealso>.
+ Packets sent from the peer are delivered as messages:</p>
<code type="none">
{tcp, Socket, Data}</code>
- <p>If the socket is in <c>{active, N}</c> mode (see <seealso marker="inet#setopts/2">
- inet:setopts/2</seealso> for details) and its message counter
- drops to 0, the following message is delivered to indicate that the
+ <p>If the socket is in <c>{active, N}</c> mode (see
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>
+ for details) and its message counter drops to <c>0</c>, the following
+ message is delivered to indicate that the
socket has transitioned to passive (<c>{active, false}</c>) mode:</p>
<code type="none">
{tcp_passive, Socket}</code>
<p>If the socket is closed, the following message is delivered:</p>
<code type="none">
{tcp_closed, Socket}</code>
- <p>If an error occurs on the socket, the following message is
- delivered:</p>
+ <p>If an error occurs on the socket, the following message is delivered
+ (unless <c>{active, false}</c> is specified in the option list for
+ the socket, in which case packets are retrieved by calling
+ <seealso marker="#recv/2"><c>recv/2</c></seealso>):</p>
<code type="none">
{tcp_error, Socket, Reason}</code>
- <p>unless <c>{active, false}</c> is specified in the option list
- for the socket, in which case packets are retrieved by
- calling <c>recv/2</c>.</p>
- <p>The optional <c><anno>Timeout</anno></c> parameter specifies a timeout in
- milliseconds. The default value is <c>infinity</c>.</p>
+ <p>The optional <c><anno>Timeout</anno></c> parameter specifies a
+ time-out in milliseconds. Defaults to <c>infinity</c>.</p>
<note>
- <p>The default values for options given to <c>connect</c> can
- be affected by the Kernel configuration parameter
- <c>inet_default_connect_options</c>. See
- <seealso marker="inet">inet(3)</seealso> for details.</p>
+ <p>The default values for options specified to <c>connect</c> can
+ be affected by the <c>Kernel</c> configuration parameter
+ <c>inet_default_connect_options</c>. For details, see
+ <seealso marker="inet"><c>inet(3)</c></seealso>.</p>
</note>
</desc>
</func>
+
+ <func>
+ <name name="controlling_process" arity="2"/>
+ <fsummary>Change controlling process of a socket.</fsummary>
+ <desc>
+ <p>Assigns a new controlling process <c><anno>Pid</anno></c> to
+ <c><anno>Socket</anno></c>. The controlling process is the process
+ that receives messages from the socket. If called by any other
+ process than the current controlling process,
+ <c>{error, not_owner}</c> is returned.</p>
+ <p>If the socket is set in active mode, this function
+ will transfer any messages in the mailbox of the caller
+ to the new controlling process.
+ If any other process is interacting with the socket while
+ the transfer is happening, the transfer may not work correctly
+ and messages may remain in the caller's mailbox. For instance
+ changing the sockets active mode before the transfere is complete
+ may cause this.</p>
+ </desc>
+ </func>
+
<func>
<name name="listen" arity="2"/>
- <fsummary>Set up a socket to listen on a port</fsummary>
+ <fsummary>Set up a socket to listen on a port.</fsummary>
<desc>
- <p>Sets up a socket to listen on the port <c><anno>Port</anno></c> on
+ <p>Sets up a socket to listen on port <c><anno>Port</anno></c> on
the local host.</p>
- <p>If <c><anno>Port</anno> == 0</c>, the underlying OS assigns an available
- port number, use <c>inet:port/1</c> to retrieve it.</p>
- <p>The available options are:</p>
+ <p>If <c><anno>Port</anno> == 0</c>, the underlying OS assigns an
+ available port number, use
+ <seealso marker="inet#port/1"><c>inet:port/1</c></seealso>
+ to retrieve it.</p>
+ <p>The following options are available:</p>
<taglist>
<tag><c>list</c></tag>
- <item>
- <p>Received <c>Packet</c> is delivered as a list.</p>
- </item>
+ <item><p>Received <c>Packet</c> is delivered as a list.</p></item>
<tag><c>binary</c></tag>
- <item>
- <p>Received <c>Packet</c> is delivered as a binary.</p>
- </item>
+ <item><p>Received <c>Packet</c> is delivered as a binary.</p></item>
<tag><c>{backlog, B}</c></tag>
- <item>
- <p><c>B</c> is an integer &gt;= 0. The backlog value defaults
- to 5. The backlog value defines the maximum length that
- the queue of pending connections may grow to.</p>
- </item>
- <tag><c>{ip, ip_address()}</c></tag>
- <item>
- <p>If the host has several network interfaces, this option
- specifies which one to listen on.</p>
- </item>
+ <item><p><c>B</c> is an integer &gt;= <c>0</c>. The backlog value
+ defines the maximum length that the queue of pending connections
+ can grow to. Defaults to <c>5</c>.</p></item>
+ <tag><c>{ip, Address}</c></tag>
+ <item><p>If the host has many network interfaces, this option
+ specifies which one to listen on.</p></item>
<tag><c>{port, Port}</c></tag>
- <item>
- <p>Specify which local port number to use.</p>
- </item>
+ <item><p>Specifies which local port number to use.</p></item>
<tag><c>{fd, Fd}</c></tag>
- <item>
- <p>If a socket has somehow been connected without using
- <c>gen_tcp</c>, use this option to pass the file
- descriptor for it.</p>
+ <item><p>If a socket has somehow been connected without using
+ <c>gen_tcp</c>, use this option to pass the file
+ descriptor for it.</p></item>
+ <tag><c>{ifaddr, Address}</c></tag>
+ <item><p>Same as <c>{ip, Address}</c>. If the host has many
+ network interfaces, this option specifies which one to use.</p>
</item>
-
- <tag><c>{ifaddr, ip_address()}</c></tag>
- <item>
- <p>Same as <c>{ip, ip_address()}</c>. If the host has several network interfaces, this option
- specifies which one to use.</p>
- </item>
-
<tag><c>inet6</c></tag>
- <item>
- <p>Set up the socket for IPv6.</p>
- </item>
+ <item><p>Sets up the socket for IPv6.</p></item>
<tag><c>inet</c></tag>
- <item>
- <p>Set up the socket for IPv4.</p>
- </item>
-
- <tag><c>{tcp_module, module()}</c></tag>
- <item> <p>
- Override which callback module is used. Defaults to
- <c>inet_tcp</c> for IPv4 and <c>inet6_tcp</c> for IPv6.
- </p>
- </item>
-
+ <item><p>Sets up the socket for IPv4.</p></item>
+ <tag><c>{tcp_module, module()}</c></tag>
+ <item><p>Overrides which callback module is used. Defaults to
+ <c>inet_tcp</c> for IPv4 and <c>inet6_tcp</c> for IPv6.</p></item>
<tag><c>Opt</c></tag>
- <item>
- <p>See
- <seealso marker="inet#setopts/2">inet:setopts/2</seealso>.</p>
- </item>
+ <item><p>See
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>.
+ </p></item>
</taglist>
- <p>The returned socket <c><anno>ListenSocket</anno></c> can only be used in
- calls to <c>accept/1,2</c>.</p>
- <note>
- <p>The default values for options given to <c>listen</c> can
- be affected by the Kernel configuration parameter
- <c>inet_default_listen_options</c>. See
- <seealso marker="inet">inet(3)</seealso> for details.</p>
- </note>
- </desc>
- </func>
- <func>
- <name name="accept" arity="1"/>
- <name name="accept" arity="2"/>
- <fsummary>Accept an incoming connection request on a listen socket</fsummary>
- <type_desc variable="ListenSocket">Returned by <c>listen/2</c>.
- </type_desc>
- <desc>
- <p>Accepts an incoming connection request on a listen socket.
- <c><anno>Socket</anno></c> must be a socket returned from <c>listen/2</c>.
- <c><anno>Timeout</anno></c> specifies a timeout value in ms, defaults to
- <c>infinity</c>.</p>
- <p>Returns <c>{ok, <anno>Socket</anno>}</c> if a connection is established,
- or <c>{error, closed}</c> if <c><anno>ListenSocket</anno></c> is closed,
- or <c>{error, timeout}</c> if no connection is established
- within the specified time,
- or <c>{error, system_limit}</c> if all available ports in the
- Erlang emulator are in use. May also return a POSIX error
- value if something else goes wrong, see inet(3) for possible
- error values.</p>
- <p>Packets can be sent to the returned socket <c><anno>Socket</anno></c>
- using <c>send/2</c>. Packets sent from the peer are delivered
- as messages:</p>
- <code type="none">
-{tcp, Socket, Data}</code>
- <p>unless <c>{active, false}</c> was specified in the option
- list for the listen socket, in which case packets are
- retrieved by calling <c>recv/2</c>.</p>
+ <p>The returned socket <c><anno>ListenSocket</anno></c> can only be
+ used in calls to
+ <seealso marker="#accept/1"><c>accept/1,2</c></seealso>.</p>
<note>
- <p>It is worth noting that the <c>accept</c> call does
- <em>not</em> have to be issued from the socket owner
- process. Using version 5.5.3 and higher of the emulator,
- multiple simultaneous accept calls can be issued from
- different processes, which allows for a pool of acceptor
- processes handling incoming connections.</p>
+ <p>The default values for options specified to <c>listen</c> can
+ be affected by the <c>Kernel</c> configuration parameter
+ <c>inet_default_listen_options</c>. For details, see
+ <seealso marker="inet"><c>inet(3)</c></seealso>.</p>
</note>
</desc>
</func>
- <func>
- <name name="send" arity="2"/>
- <fsummary>Send a packet</fsummary>
- <desc>
- <p>Sends a packet on a socket. </p>
- <p>There is no <c>send</c> call with timeout option, you use the
- <c>send_timeout</c> socket option if timeouts are
- desired. See the <seealso marker="#examples">examples</seealso> section.</p>
- </desc>
- </func>
+
<func>
<name name="recv" arity="2"/>
<name name="recv" arity="3"/>
- <fsummary>Receive a packet from a passive socket</fsummary>
+ <fsummary>Receive a packet from a passive socket.</fsummary>
<type_desc variable="HttpPacket">See the description of
- <c>HttpPacket</c> in <seealso marker="erts:erlang#decode_packet/3">
- erlang:decode_packet/3</seealso>.
+ <c>HttpPacket</c> in
+ <seealso marker="erts:erlang#decode_packet/3"><c>erlang:decode_packet/3</c></seealso>
+ in <c>ERTS</c>.
</type_desc>
<desc>
- <p>This function receives a packet from a socket in passive
- mode. A closed socket is indicated by a return value
+ <p>Receives a packet from a socket in passive
+ mode. A closed socket is indicated by return value
<c>{error, closed}</c>.</p>
- <p>The <c><anno>Length</anno></c> argument is only meaningful when
+ <p>Argument <c><anno>Length</anno></c> is only meaningful when
the socket is in <c>raw</c> mode and denotes the number of
- bytes to read. If <c><anno>Length</anno></c> = 0, all available bytes are
- returned. If <c><anno>Length</anno></c> &gt; 0, exactly <c><anno>Length</anno></c>
- bytes are returned, or an error; possibly discarding less
- than <c><anno>Length</anno></c> bytes of data when the socket gets closed
- from the other side.</p>
- <p>The optional <c><anno>Timeout</anno></c> parameter specifies a timeout in
- milliseconds. The default value is <c>infinity</c>.</p>
- </desc>
- </func>
- <func>
- <name name="controlling_process" arity="2"/>
- <fsummary>Change controlling process of a socket</fsummary>
- <desc>
- <p>Assigns a new controlling process <c><anno>Pid</anno></c> to
- <c><anno>Socket</anno></c>. The controlling process is the process which
- receives messages from the socket. If called by any other
- process than the current controlling process,
- <c>{error, not_owner}</c> is returned.</p>
+ bytes to read. If <c><anno>Length</anno></c> is <c>0</c>, all
+ available bytes are returned.
+ If <c><anno>Length</anno></c> &gt; <c>0</c>, exactly
+ <c><anno>Length</anno></c> bytes are returned, or an error;
+ possibly discarding less than <c><anno>Length</anno></c> bytes of
+ data when the socket is closed from the other side.</p>
+ <p>The optional <c><anno>Timeout</anno></c> parameter specifies a
+ time-out in milliseconds. Defaults to <c>infinity</c>.</p>
</desc>
</func>
+
<func>
- <name name="close" arity="1"/>
- <fsummary>Close a TCP socket</fsummary>
+ <name name="send" arity="2"/>
+ <fsummary>Send a packet.</fsummary>
<desc>
- <p>Closes a TCP socket.</p>
+ <p>Sends a packet on a socket.</p>
+ <p>There is no <c>send</c> call with a time-out option, use socket
+ option <c>send_timeout</c> if time-outs are desired. See section
+ <seealso marker="#examples">Examples</seealso>.</p>
</desc>
</func>
+
<func>
<name name="shutdown" arity="2"/>
- <fsummary>Asynchronously close a socket</fsummary>
+ <fsummary>Asynchronously close a socket.</fsummary>
<desc>
- <p>Close a socket in one or two directions.</p>
- <p><c><anno>How</anno> == write</c> means closing the socket for writing,
- reading from it is still possible.</p>
- <p>If <c><anno>How</anno> == read</c>, or there is no outgoing
+ <p>Closes a socket in one or two directions.</p>
+ <p><c><anno>How</anno> == write</c> means closing the socket for
+ writing, reading from it is still possible.</p>
+ <p>If <c><anno>How</anno> == read</c> or there is no outgoing
data buffered in the <c><anno>Socket</anno></c> port,
- then the socket is shutdown immediately and any error encountered
+ the socket is shut down immediately and any error encountered
is returned in <c><anno>Reason</anno></c>.</p>
- <p>If there is data buffered in the socket port, then the attempt
+ <p>If there is data buffered in the socket port, the attempt
to shutdown the socket is postponed until that data is written to the
- kernel socket send buffer. Any errors encountered will result
- in the socket being closed and <c>{error, closed}</c> being returned
- on the next
- <seealso marker="gen_tcp#recv/2">recv/2</seealso> or
- <seealso marker="gen_tcp#send/2">send/2</seealso>.</p>
- <p>To be able to handle that the peer has done a shutdown on
- the write side, the <c>{exit_on_close, false}</c> option
- is useful.</p>
+ kernel socket send buffer. If any errors are encountered, the socket
+ is closed and <c>{error, closed}</c> is returned on the next
+ <seealso marker="#recv/2"><c>recv/2</c></seealso> or
+ <seealso marker="#send/2"><c>send/2</c></seealso>.</p>
+ <p>Option <c>{exit_on_close, false}</c> is useful if the peer has done
+ a shutdown on the write side.</p>
</desc>
</func>
</funcs>
@@ -375,14 +363,14 @@ do_recv(Sock, Bs) ->
<section>
<title>Examples</title>
<marker id="examples"></marker>
- <p>The following example illustrates usage of the {active,once}
- option and multiple accepts by implementing a server as a
- number of worker processes doing accept on one single listen
- socket. The start/2 function takes the number of worker
- processes as well as a port number to listen for incoming
- connections on. If <c>LPort</c> is specified as <c>0</c>, an
- ephemeral portnumber is used, why the start function returns
- the actual portnumber allocated:</p>
+ <p>The following example illustrates use of option
+ <c>{active,once}</c> and multiple accepts by implementing a server
+ as a number of worker processes doing accept on a single listening
+ socket. Function <c>start/2</c> takes the number of worker
+ processes and the port number on which to listen for incoming
+ connections. If <c>LPort</c> is specified as <c>0</c>, an
+ ephemeral port number is used, which is why the start function
+ returns the actual port number allocated:</p>
<code type="none">
start(Num,LPort) ->
case gen_tcp:listen(LPort,[{active, false},{packet,2}]) of
@@ -421,7 +409,7 @@ loop(S) ->
io:format("Socket ~w closed [~w]~n",[S,self()]),
ok
end.</code>
- <p>A simple client could look like this:</p>
+ <p>Example of a simple client:</p>
<code type="none">
client(PortNo,Message) ->
{ok,Sock} = gen_tcp:connect("localhost",PortNo,[{active,false},
@@ -430,30 +418,29 @@ client(PortNo,Message) ->
A = gen_tcp:recv(Sock,0),
gen_tcp:close(Sock),
A.</code>
- <p>The fact that the <c>send</c> call does not accept a timeout
- option, is because timeouts on send is handled through the socket
+ <p>The <c>send</c> call does not accept a time-out
+ option because time-outs on send is handled through socket
option <c>send_timeout</c>. The behavior of a send operation with
- no receiver is in a very high degree defined by the underlying TCP
- stack, as well as the network infrastructure. If one wants to write
- code that handles a hanging receiver that might eventually cause
- the sender to hang on a <c>send</c> call, one writes code like
- the following.</p>
- <p>Consider a process that receives data from a client process that
- is to be forwarded to a server on the network. The process has
- connected to the server via TCP/IP and does not get any acknowledge
- for each message it sends, but has to rely on the send timeout
- option to detect that the other end is unresponsive. We could use
- the <c>send_timeout</c> option when connecting:</p>
+ no receiver is mainly defined by the underlying TCP
+ stack and the network infrastructure. To write
+ code that handles a hanging receiver that can eventually cause
+ the sender to hang on a <c>send</c> do like the following.</p>
+ <p>Consider a process that receives data from a client process
+ to be forwarded to a server on the network. The process is
+ connected to the server through TCP/IP and does not get any acknowledge
+ for each message it sends, but has to rely on the send time-out
+ option to detect that the other end is unresponsive. Option
+ <c>send_timeout</c> can be used when connecting:</p>
<code type="none">
- ...
- {ok,Sock} = gen_tcp:connect(HostAddress, Port,
- [{active,false},
- {send_timeout, 5000},
- {packet,2}]),
- loop(Sock), % See below
- ... </code>
- <p>In the loop where requests are handled, we can now detect send
- timeouts:</p>
+...
+{ok,Sock} = gen_tcp:connect(HostAddress, Port,
+ [{active,false},
+ {send_timeout, 5000},
+ {packet,2}]),
+ loop(Sock), % See below
+...</code>
+ <p>In the loop where requests are handled, send time-outs can now be
+ detected:</p>
<code type="none">
loop(Sock) ->
receive
@@ -477,11 +464,11 @@ loop(Sock) ->
Client ! {self(), data_sent},
loop(Sock)
end
- end. </code>
- <p>Usually it would suffice to detect timeouts on receive, as most
+ end.</code>
+ <p>Usually it suffices to detect time-outs on receive, as most
protocols include some sort of acknowledgment from the server,
- but if the protocol is strictly one way, the <c>send_timeout</c>
- option comes in handy!</p>
+ but if the protocol is strictly one way, option <c>send_timeout</c>
+ comes in handy.</p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/gen_udp.xml b/lib/kernel/doc/src/gen_udp.xml
index 79cd87dcef..3f88a0272d 100644
--- a/lib/kernel/doc/src/gen_udp.xml
+++ b/lib/kernel/doc/src/gen_udp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,9 +29,9 @@
<rev>A</rev>
</header>
<module>gen_udp</module>
- <modulesummary>Interface to UDP sockets</modulesummary>
+ <modulesummary>Interface to UDP sockets.</modulesummary>
<description>
- <p>The <c>gen_udp</c> module provides functions for communicating
+ <p>This module provides functions for communicating
with sockets using the UDP protocol.</p>
</description>
@@ -45,175 +45,150 @@
<datatype>
<name>socket()</name>
<desc>
- <p><marker id="type-socket"/>As returned by open/1,2.</p>
+ <p>As returned by
+ <seealso marker="#open/1"><c>open/1,2</c></seealso>.</p>
</desc>
</datatype>
</datatypes>
<funcs>
<func>
+ <name name="close" arity="1"/>
+ <fsummary>Close a UDP socket.</fsummary>
+ <desc>
+ <p>Closes a UDP socket.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="controlling_process" arity="2"/>
+ <fsummary>Change controlling process of a socket.</fsummary>
+ <desc>
+ <p>Assigns a new controlling process <c><anno>Pid</anno></c> to
+ <c><anno>Socket</anno></c>. The controlling process is the process
+ that receives messages from the socket. If called by any other
+ process than the current controlling process,
+ <c>{error, not_owner}</c> is returned.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="open" arity="1"/>
<name name="open" arity="2"/>
- <fsummary>Associate a UDP port number with the process calling it</fsummary>
+ <fsummary>Associate a UDP port number with the process calling it.</fsummary>
<desc>
- <p>Associates a UDP port number (<c><anno>Port</anno></c>) with the calling
- process.</p>
- <p>The available options are:</p>
+ <p>Associates a UDP port number (<c><anno>Port</anno></c>) with the
+ calling process.</p>
+ <p>The following options are available:</p>
<taglist>
<tag><c>list</c></tag>
- <item>
- <p>Received <c>Packet</c> is delivered as a list.</p>
- </item>
+ <item><p>Received <c>Packet</c> is delivered as a list.</p></item>
<tag><c>binary</c></tag>
- <item>
- <p>Received <c>Packet</c> is delivered as a binary.</p>
- </item>
- <tag><c>{ip, ip_address()}</c></tag>
- <item>
- <p>If the host has several network interfaces, this option
- specifies which one to use.</p>
- </item>
-
- <tag><c>{ifaddr, ip_address()}</c></tag>
- <item>
- <p>Same as <c>{ip, ip_address()}</c>. If the host has several network interfaces, this option
- specifies which one to use.</p>
- </item>
-
-
+ <item><p>Received <c>Packet</c> is delivered as a binary.</p></item>
+ <tag><c>{ip, Address}</c></tag>
+ <item><p>If the host has many network interfaces, this option
+ specifies which one to use.</p></item>
+ <tag><c>{ifaddr, Address}</c></tag>
+ <item><p>Same as <c>{ip, Address}</c>. If the host has many
+ network interfaces, this option specifies which one to
+ use.</p></item>
<tag><c>{fd, integer() >= 0}</c></tag>
- <item>
- <p>If a socket has somehow been opened without using
- <c>gen_udp</c>, use this option to pass the file
- descriptor for it. If <c><anno>Port</anno></c> is not set to 0
- and/or <c>{ip, ip_address()}</c> is combined with this option
- the fd will be bound to the given interface and port after being
- opened. If these options are not given it is assumed that the fd
- is already bound appropriately.
- </p>
- </item>
+ <item><p>If a socket has somehow been opened without using
+ <c>gen_udp</c>, use this option to pass the file descriptor
+ for it. If <c><anno>Port</anno></c> is not set to <c>0</c> and/or
+ <c>{ip, ip_address()}</c> is combined with this option, the
+ <c>fd</c> is bound to the specified interface and port after it is
+ being opened. If these options are not specified, it is assumed that
+ the <c>fd</c> is already bound appropriately.</p></item>
<tag><c>inet6</c></tag>
- <item>
- <p>Set up the socket for IPv6.</p>
- </item>
+ <item><p>Sets up the socket for IPv6.</p></item>
<tag><c>inet</c></tag>
- <item>
- <p>Set up the socket for IPv4.</p>
+ <item><p>Sets up the socket for IPv4.</p></item>
+ <tag><c>local</c></tag>
+ <item>
+ <p>
+ Sets up a Unix Domain Socket. See
+ <seealso marker="inet#type-local_address">
+ <c>inet:local_address()</c>
+ </seealso>
+ </p>
</item>
-
- <tag><c>{udp_module, module()}</c></tag>
- <item> <p>
- Override which callback module is used. Defaults to
- <c>inet_udp</c> for IPv4 and <c>inet6_udp</c> for IPv6.
- </p>
- </item>
-
+ <tag><c>{udp_module, module()}</c></tag>
+ <item><p>Overrides which callback module is used. Defaults to
+ <c>inet_udp</c> for IPv4 and <c>inet6_udp</c> for IPv6.</p></item>
<tag><c>{multicast_if, Address}</c></tag>
- <item>
- <p>Set the local device for a multicast socket.</p>
- </item>
-
+ <item><p>Sets the local device for a multicast socket.</p></item>
<tag><c>{multicast_loop, true | false}</c></tag>
- <item>
- <p>
- When <c>true</c> sent multicast packets will be looped back to the local
- sockets.
- </p>
- </item>
-
+ <item><p>When <c>true</c>, sent multicast packets are looped back to
+ the local sockets.</p></item>
<tag><c>{multicast_ttl, Integer}</c></tag>
- <item>
- <p>
- The <c>multicast_ttl</c> option changes the time-to-live (TTL) for
- outgoing multicast datagrams in order to control the scope of the
- multicasts.
- </p>
- <p>
- Datagrams with a TTL of 1 are not forwarded beyond the local
- network.
- <br />Default: 1
- </p>
- </item>
-
- <tag><c>{add_membership, {MultiAddress, InterfaceAddress}}</c></tag>
- <item>
- <p>Join a multicast group. </p>
- </item>
-
- <tag><c>{drop_membership, {MultiAddress, InterfaceAddress}}</c></tag>
- <item>
- <p>Leave multicast group.</p>
- </item>
-
+ <item><p>Option <c>multicast_ttl</c> changes the time-to-live (TTL)
+ for outgoing multicast datagrams to control the scope of the
+ multicasts.</p>
+ <p>Datagrams with a TTL of 1 are not forwarded beyond the local
+ network. Defaults to <c>1</c>.</p></item>
+ <tag><c>{add_membership, {MultiAddress, InterfaceAddress}}</c></tag>
+ <item><p>Joins a multicast group.</p></item>
+ <tag><c>{drop_membership, {MultiAddress, InterfaceAddress}}</c></tag>
+ <item><p>Leaves a multicast group.</p></item>
<tag><c>Opt</c></tag>
- <item>
- <p>See
- <seealso marker="inet#setopts/2">inet:setopts/2</seealso>.</p>
- </item>
+ <item><p>See
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>.
+ </p></item>
</taglist>
<p>The returned socket <c><anno>Socket</anno></c> is used to send
- packets from this port with <c>send/4</c>. When UDP packets arrive
- at the opened port, if the socket is in an active mode the packets
+ packets from this port with
+ <seealso marker="#send/4"><c>send/4</c></seealso>.
+ When UDP packets arrive
+ at the opened port, if the socket is in an active mode, the packets
are delivered as messages to the controlling process:</p>
<code type="none">
{udp, Socket, IP, InPortNo, Packet}</code>
<p>If the socket is not in an active mode, data can be
- retrieved via the <seealso marker="#recv/2">recv/2,3</seealso> calls.
- Note that arriving UDP packets that are longer than
- the receive buffer option specifies, might be truncated
+ retrieved through the
+ <seealso marker="#recv/2"><c>recv/2,3</c></seealso> calls.
+ Notice that arriving UDP packets that are longer than
+ the receive buffer option specifies can be truncated
without warning.</p>
- <p>When a socket in <c>{active, N}</c> mode (see <seealso marker="inet#setopts/2">
- inet:setopts/2</seealso> for details) transitions to passive
- (<c>{active, false}</c>) mode, the controlling process is notified by a
- message of the following form:</p>
+ <p>When a socket in <c>{active, N}</c> mode (see
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>
+ for details), transitions to passive (<c>{active, false}</c>) mode,
+ the controlling process is notified by a message of the following
+ form:</p>
<code type="none">
{udp_passive, Socket}</code>
<p><c>IP</c> and <c>InPortNo</c> define the address from which
- <c>Packet</c> came. <c>Packet</c> is a list of bytes if
- the option <c>list</c> was specified. <c>Packet</c> is a
- binary if the option <c>binary</c> was specified.</p>
+ <c>Packet</c> comes. <c>Packet</c> is a list of bytes if
+ option <c>list</c> is specified. <c>Packet</c> is a
+ binary if option <c>binary</c> is specified.</p>
<p>Default value for the receive buffer option is
<c>{recbuf, 8192}</c>.</p>
- <p>If <c><anno>Port</anno> == 0</c>, the underlying OS assigns a free UDP
- port, use <c>inet:port/1</c> to retrieve it.</p>
- </desc>
- </func>
- <func>
- <name name="send" arity="4"/>
- <fsummary>Send a packet</fsummary>
- <desc>
- <p>Sends a packet to the specified address and port.
- The <c><anno>Address</anno></c> argument can be either a hostname, or an
- IP address.</p>
+ <p>If <c><anno>Port</anno> == 0</c>, the underlying OS assigns a free
+ UDP port, use
+ <seealso marker="inet#port/1"><c>inet:port/1</c></seealso>
+ to retrieve it.</p>
</desc>
</func>
+
<func>
<name name="recv" arity="2"/>
<name name="recv" arity="3"/>
- <fsummary>Receive a packet from a passive socket</fsummary>
+ <fsummary>Receive a packet from a passive socket.</fsummary>
<desc>
- <p>This function receives a packet from a socket in passive
- mode.</p>
- <p>The optional <c><anno>Timeout</anno></c> parameter specifies a timeout in
- milliseconds. The default value is <c>infinity</c>.</p>
- </desc>
- </func>
- <func>
- <name name="controlling_process" arity="2"/>
- <fsummary>Change controlling process of a socket</fsummary>
- <desc>
- <p>Assigns a new controlling process <c><anno>Pid</anno></c> to
- <c><anno>Socket</anno></c>. The controlling process is the process which
- receives messages from the socket. If called by any other
- process than the current controlling process,
- <c>{error, not_owner}</c> is returned.</p>
+ <p>Receives a packet from a socket in passive mode. Optional parameter
+ <c><anno>Timeout</anno></c> specifies a time-out in milliseconds.
+ Defaults to <c>infinity</c>.</p>
</desc>
</func>
+
<func>
- <name name="close" arity="1"/>
- <fsummary>Close a UDP socket</fsummary>
+ <name name="send" arity="4"/>
+ <fsummary>Send a packet.</fsummary>
<desc>
- <p>Closes a UDP socket.</p>
+ <p>
+ Sends a packet to the specified address and port. Argument
+ <c><anno>Address</anno></c> can be a hostname or a socket address.
+ </p>
</desc>
</func>
</funcs>
diff --git a/lib/kernel/doc/src/global.xml b/lib/kernel/doc/src/global.xml
index bd75945115..4442741f54 100644
--- a/lib/kernel/doc/src/global.xml
+++ b/lib/kernel/doc/src/global.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,82 +29,67 @@
<rev></rev>
</header>
<module>global</module>
- <modulesummary>A Global Name Registration Facility</modulesummary>
+ <modulesummary>A global name registration facility.</modulesummary>
<description>
- <p>This documentation describes the Global module which consists
- of the following functionalities:</p>
-
+ <p>This module consists of the following services:</p>
<list type="bulleted">
- <item>registration of global names;</item>
- <item>global locks;</item>
- <item>maintenance of the fully connected network.</item>
+ <item>Registration of global names</item>
+ <item>Global locks</item>
+ <item>Maintenance of the fully connected network</item>
</list>
-
- <p>These services are controlled via the process
- <c>global_name_server</c> which exists on every node. The global
- name server is started automatically when a node is started.
+ <p>These services are controlled through the process
+ <c>global_name_server</c> that exists on every node. The global
+ name server starts automatically when a node is started.
With the term <em>global</em> is meant over a system consisting
- of several Erlang nodes.</p>
-
+ of many Erlang nodes.</p>
<p>The ability to globally register names is a central concept in
the programming of distributed Erlang systems. In this module,
the equivalent of the <c>register/2</c> and <c>whereis/1</c>
- BIFs (for local name registration) are implemented, but for a
+ BIFs (for local name registration) are provided, but for a
network of Erlang nodes. A registered name is an alias for a
process identifier (pid). The global name server monitors
- globally registered pids. If a process terminates, the name will
- also be globally unregistered.</p>
-
+ globally registered pids. If a process terminates, the name is
+ also globally unregistered.</p>
<p>The registered names are stored in replica global name tables on
every node. There is no central storage point. Thus,
the translation of a name to a pid is fast, as it is always done
- locally. When any action in taken which results in a change to
- the global name table, all tables on other nodes are automatically
- updated.</p>
-
+ locally. For any action resulting in a change to the global name table,
+ all tables on other nodes are automatically updated.</p>
<p>Global locks have lock identities and are set on a specific
- resource. For instance, the specified resource could be a pid.
+ resource. For example, the specified resource can be a pid.
When a global lock is set, access to the locked resource is
- denied for all other resources other than the lock requester.</p>
-
- <p>Both the registration and lock functionalities are atomic. All
- nodes involved in these actions will have the same view of
+ denied for all resources other than the lock requester.</p>
+ <p>Both the registration and lock services are atomic.
+ All nodes involved in these actions have the same view of
the information.</p>
-
<p>The global name server also performs the critical task of
- continuously monitoring changes in node configuration: if a node
- which runs a globally registered process goes down, the name
- will be globally unregistered. To this end the global name
+ continuously monitoring changes in node configuration. If a node
+ that runs a globally registered process goes down, the name
+ is globally unregistered. To this end, the global name
server subscribes to <c>nodeup</c> and <c>nodedown</c> messages
- sent from the <c>net_kernel</c> module. Relevant Kernel
+ sent from module <c>net_kernel</c>. Relevant Kernel
application variables in this context are <c>net_setuptime</c>,
<c>net_ticktime</c>, and <c>dist_auto_connect</c>. See also
- <seealso marker="kernel_app#net_setuptime">kernel(6)</seealso>.</p>
-
- <p>The name server will also maintain a fully connected network. For
+ <seealso marker="kernel_app#net_setuptime"><c>kernel(6)</c></seealso>.</p>
+ <p>The name server also maintains a fully connected network. For
example, if node <c>N1</c> connects to node <c>N2</c> (which is
already connected to <c>N3</c>), the global name servers on the
- nodes <c>N1</c> and <c>N3</c> will make sure that also <c>N1</c>
- and <c>N3</c> are connected. If this is not desired, the command
- line flag <c>-connect_all false</c> can be used (see also
- <seealso marker="erts:erl#connect_all">erl(1)</seealso>). In
- this case the name registration facility cannot be used, but the
- lock mechanism will still work.</p>
-
+ nodes <c>N1</c> and <c>N3</c> ensure that also <c>N1</c>
+ and <c>N3</c> are connected. If this is not desired,
+ command-line flag <c>-connect_all false</c> can be used (see also
+ <seealso marker="erts:erl#connect_all"><c>erl(1)</c></seealso>).
+ In this case, the name registration service cannot be used, but the
+ lock mechanism still works.</p>
<p>If the global name server fails to connect nodes (<c>N1</c> and
- <c>N3</c> in the example above) a warning event is sent to the
+ <c>N3</c> in the example), a warning event is sent to the
error logger. The presence of such an event does not exclude the
- possibility that the nodes will later connect--one can for
- example try the command <c>rpc:call(N1, net_adm, ping, [N2])</c> in
- the Erlang shell--but it indicates some kind of problem with
- the network.</p>
-
+ nodes to connect later (you can, for
+ example, try command <c>rpc:call(N1, net_adm, ping, [N2])</c> in
+ the Erlang shell), but it indicates a network problem.</p>
<note>
- <p>If the fully connected network is not set up properly, the
- first thing to try is to increase the value of
- <c>net_setuptime</c>.</p>
+ <p>If the fully connected network is not set up properly, try
+ first to increase the value of <c>net_setuptime</c>.</p>
</note>
-
</description>
<datatypes>
@@ -117,7 +102,7 @@
<func>
<name name="del_lock" arity="1"/>
<name name="del_lock" arity="2"/>
- <fsummary>Delete a lock</fsummary>
+ <fsummary>Delete a lock.</fsummary>
<desc>
<p>Deletes the lock <c><anno>Id</anno></c> synchronously.</p>
</desc>
@@ -125,11 +110,13 @@
<func>
<name name="notify_all_name" arity="3"/>
- <fsummary>Name resolving function that notifies both pids</fsummary>
+ <fsummary>Name resolving function that notifies both pids.</fsummary>
<desc>
- <p>This function can be used as a name resolving function for
- <c>register_name/3</c> and <c>re_register_name/3</c>. It
- unregisters both pids, and sends the message
+ <p>Can be used as a name resolving function for
+ <seealso marker="#register_name/3"><c>register_name/3</c></seealso>
+ and
+ <seealso marker="#re_register_name/3"><c>re_register_name/3</c></seealso>.</p>
+ <p>The function unregisters both pids and sends the message
<c>{global_name_conflict, <anno>Name</anno>, OtherPid}</c> to both
processes.</p>
</desc>
@@ -137,85 +124,97 @@
<func>
<name name="random_exit_name" arity="3"/>
- <fsummary>Name resolving function that kills one pid</fsummary>
+ <fsummary>Name resolving function that kills one pid.</fsummary>
<desc>
- <p>This function can be used as a name resolving function for
- <c>register_name/3</c> and <c>re_register_name/3</c>. It
- randomly chooses one of the pids for registration and kills
- the other one.</p>
+ <p>Can be used as a name resolving function for
+ <seealso marker="#register_name/3"><c>register_name/3</c></seealso>
+ and
+ <seealso marker="#re_register_name/3"><c>re_register_name/3</c></seealso>.</p>
+ <p>The function randomly selects one of the pids for registration and
+ kills the other one.</p>
</desc>
</func>
<func>
<name name="random_notify_name" arity="3"/>
- <fsummary>Name resolving function that notifies one pid</fsummary>
+ <fsummary>Name resolving function that notifies one pid.</fsummary>
<desc>
- <p>This function can be used as a name resolving function for
- <c>register_name/3</c> and <c>re_register_name/3</c>. It
- randomly chooses one of the pids for registration, and sends
- the message <c>{global_name_conflict, <anno>Name</anno>}</c> to the other
- pid.</p>
+ <p>Can be used as a name resolving function for
+ <seealso marker="#register_name/3"><c>register_name/3</c></seealso>
+ and
+ <seealso marker="#re_register_name/3"><c>re_register_name/3</c></seealso>.</p>
+ <p>The function randomly selects one of the pids for registration, and
+ sends the message <c>{global_name_conflict, <anno>Name</anno>}</c> to
+ the other pid.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="re_register_name" arity="2"/>
+ <name name="re_register_name" arity="3"/>
+ <fsummary>Atomically re-register a name.</fsummary>
+ <type name="method"/>
+ <type_desc name="method">{<c>Module</c>, <c>Function</c>}
+ is also allowed.
+ </type_desc>
+ <desc>
+ <p>Atomically changes the registered name <c><anno>Name</anno></c> on
+ all nodes to refer to <c><anno>Pid</anno></c>.</p>
+ <p>Function <c><anno>Resolve</anno></c> has the same behavior as in
+ <seealso marker="#register_name/2"><c>register_name/2,3</c></seealso>.
+ </p>
</desc>
</func>
<func>
<name name="register_name" arity="2"/>
<name name="register_name" arity="3"/>
- <fsummary>Globally register a name for a pid</fsummary>
+ <fsummary>Globally register a name for a pid.</fsummary>
<type name="method"/>
- <type_desc name="method">{<c>Module</c>, <c>Function</c>}
- is currently also allowed for backward compatibility, but its use is
- deprecated
+ <type_desc name="method">{<c>Module</c>, <c>Function</c>} is also
+ allowed for backward compatibility, but its use is deprecated.
</type_desc>
<desc>
- <p>Globally associates the name <c><anno>Name</anno></c> with a pid, that is,
- Globally notifies all nodes of a new global name in a network
+ <p>Globally associates name <c><anno>Name</anno></c> with a pid, that
+ is, globally notifies all nodes of a new global name in a network
of Erlang nodes.</p>
-
<p>When new nodes are added to the network, they are informed
of the globally registered names that already exist.
The network is also informed of any global names in newly
connected nodes. If any name clashes are discovered,
- the <c><anno>Resolve</anno></c> function is called. Its purpose is to
+ function <c><anno>Resolve</anno></c> is called. Its purpose is to
decide which pid is correct. If the function crashes, or
returns anything other than one of the pids, the name is
unregistered. This function is called once for each name
clash.</p>
-
<warning>
<p>If you plan to change code without restarting your system,
you must use an external fun (<c>fun Module:Function/Arity</c>)
- as the <c><anno>Resolve</anno></c> function; if you use a
- local fun you can never replace the code for the module that
- the fun belongs to.
- </p>
+ as function <c><anno>Resolve</anno></c>. If you use a
+ local fun, you can never replace the code for the module that
+ the fun belongs to.</p>
</warning>
-
- <p>There are three pre-defined resolve functions:
+ <p>Three predefined resolve functions exist:
<c>random_exit_name/3</c>, <c>random_notify_name/3</c>, and
- <c>notify_all_name/3</c>. If no <c><anno>Resolve</anno></c> function is
- defined, <c>random_exit_name</c> is used. This means that one
- of the two registered processes will be selected as correct
+ <c>notify_all_name/3</c>. If no <c><anno>Resolve</anno></c> function
+ is defined, <c>random_exit_name</c> is used. This means that one
+ of the two registered processes is selected as correct
while the other is killed.</p>
-
- <p>This function is completely synchronous. This means that
+ <p>This function is completely synchronous, that is,
when this function returns, the name is either registered on
all nodes or none.</p>
-
<p>The function returns <c>yes</c> if successful, <c>no</c> if
it fails. For example, <c>no</c> is returned if an attempt
is made to register an already registered process or to
register a process with a name that is already in use.</p>
-
<note>
- <p>Releases up to and including OTP R10 did not check if the
- process was already registered. As a consequence the
- global name table could become inconsistent. The old
+ <p>Releases up to and including Erlang/OTP R10 did not check if the
+ process was already registered. The global name table could
+ therefore become inconsistent. The old
(buggy) behavior can be chosen by giving the Kernel
application variable <c>global_multi_name_action</c> the
value <c>allow</c>.</p>
</note>
-
<p>If a process with a registered name dies, or the node goes
down, the name is unregistered on all nodes.</p>
</desc>
@@ -223,38 +222,20 @@
<func>
<name name="registered_names" arity="0"/>
- <fsummary>All globally registered names</fsummary>
- <desc>
- <p>Returns a lists of all globally registered names.</p>
- </desc>
- </func>
-
- <func>
- <name name="re_register_name" arity="2"/>
- <name name="re_register_name" arity="3"/>
- <fsummary>Atomically re-register a name</fsummary>
- <type name="method"/>
- <type_desc name="method">{<c>Module</c>, <c>Function</c>}
- is also allowed
- </type_desc>
+ <fsummary>All globally registered names.</fsummary>
<desc>
- <p>Atomically changes the registered name <c><anno>Name</anno></c> on all
- nodes to refer to <c><anno>Pid</anno></c>.</p>
-
- <p>The <c><anno>Resolve</anno></c> function has the same behavior as in
- <c>register_name/2,3</c>.</p>
+ <p>Returns a list of all globally registered names.</p>
</desc>
</func>
<func>
<name name="send" arity="2"/>
- <fsummary>Send a message to a globally registered pid</fsummary>
+ <fsummary>Send a message to a globally registered pid.</fsummary>
<desc>
- <p>Sends the message <c><anno>Msg</anno></c> to the pid globally registered
+ <p>Sends message <c><anno>Msg</anno></c> to the pid globally registered
as <c><anno>Name</anno></c>.</p>
-
- <p>Failure: If <c><anno>Name</anno></c> is not a globally registered
- name, the calling function will exit with reason
+ <p>If <c><anno>Name</anno></c> is not a globally registered
+ name, the calling function exits with reason
<c>{badarg, {<anno>Name</anno>, <anno>Msg</anno>}}</c>.</p>
</desc>
</func>
@@ -263,7 +244,7 @@
<name name="set_lock" arity="1"/>
<name name="set_lock" arity="2"/>
<name name="set_lock" arity="3"/>
- <fsummary>Set a lock on the specified nodes</fsummary>
+ <fsummary>Set a lock on the specified nodes.</fsummary>
<type name="id"/>
<type name="retries"/>
<desc>
@@ -271,50 +252,48 @@
are specified) on <c><anno>ResourceId</anno></c> for
<c><anno>LockRequesterId</anno></c>. If a lock already exists on
<c><anno>ResourceId</anno></c> for another requester than
- <c><anno>LockRequesterId</anno></c>, and <c><anno>Retries</anno></c> is not equal to 0,
- the process sleeps for a while and will try to execute
- the action later. When <c><anno>Retries</anno></c> attempts have been made,
- <c>false</c> is returned, otherwise <c>true</c>. If
- <c><anno>Retries</anno></c> is <c>infinity</c>, <c>true</c> is eventually
- returned (unless the lock is never released).</p>
-
- <p>If no value for <c><anno>Retries</anno></c> is given, <c>infinity</c> is
- used.</p>
-
+ <c><anno>LockRequesterId</anno></c>, and <c><anno>Retries</anno></c>
+ is not equal to <c>0</c>, the process sleeps for a while and tries
+ to execute the action later. When <c><anno>Retries</anno></c>
+ attempts have been made, <c>false</c> is returned, otherwise
+ <c>true</c>. If <c><anno>Retries</anno></c> is <c>infinity</c>,
+ <c>true</c> is eventually returned (unless the lock is never
+ released).</p>
+ <p>If no value for <c><anno>Retries</anno></c> is specified,
+ <c>infinity</c> is used.</p>
<p>This function is completely synchronous.</p>
-
- <p>If a process which holds a lock dies, or the node goes
+ <p>If a process that holds a lock dies, or the node goes
down, the locks held by the process are deleted.</p>
-
<p>The global name server keeps track of all processes sharing
the same lock, that is, if two processes set the same lock,
both processes must delete the lock.</p>
-
<p>This function does not address the problem of a deadlock. A
deadlock can never occur as long as processes only lock one
- resource at a time. But if some processes try to lock two or
- more resources, a deadlock may occur. It is up to the
+ resource at a time. A deadlock can occur if some processes
+ try to lock two or more resources. It is up to the
application to detect and rectify a deadlock.</p>
-
<note>
- <p>Some values of <c><anno>ResourceId</anno></c> should be avoided or
- Erlang/OTP will not work properly. A list of resources to
- avoid: <c>global</c>, <c>dist_ac</c>,
- <c>mnesia_table_lock</c>, <c>mnesia_adjust_log_writes</c>,
- <c>pg2</c>.</p>
+ <p>Avoid the following values of <c><anno>ResourceId</anno></c>,
+ otherwise Erlang/OTP does not work properly:</p>
+ <list type="bulleted">
+ <item><c>dist_ac</c></item>
+ <item><c>global</c></item>
+ <item><c>mnesia_adjust_log_writes</c></item>
+ <item><c>mnesia_table_lock</c></item>
+ <item><c>pg2</c></item>
+ </list>
</note>
-
</desc>
</func>
<func>
<name name="sync" arity="0"/>
- <fsummary>Synchronize the global name server</fsummary>
+ <fsummary>Synchronize the global name server.</fsummary>
<desc>
<p>Synchronizes the global name server with all nodes known to
- this node. These are the nodes which are returned from
+ this node. These are the nodes that are returned from
<c>erlang:nodes()</c>. When this function returns,
- the global name server will receive global information from
+ the global name server receives global information from
all nodes. This function can be called when new nodes are
added to the network.</p>
<p>The only possible error reason <c>Reason</c> is
@@ -326,24 +305,25 @@
<name name="trans" arity="2"/>
<name name="trans" arity="3"/>
<name name="trans" arity="4"/>
- <fsummary>Micro transaction facility</fsummary>
+ <fsummary>Micro transaction facility.</fsummary>
<type name="retries"/>
<type name="trans_fun"/>
<desc>
- <p>Sets a lock on <c><anno>Id</anno></c> (using <c>set_lock/3</c>). If this
- succeeds, <c><anno>Fun</anno>()</c> is evaluated and the result <c><anno>Res</anno></c>
- is returned. Returns <c>aborted</c> if the lock attempt
- failed. If <c><anno>Retries</anno></c> is set to <c>infinity</c>,
- the transaction will not abort.</p>
-
- <p><c>infinity</c> is the default setting and will be used if
- no value is given for <c><anno>Retries</anno></c>.</p>
+ <p>Sets a lock on <c><anno>Id</anno></c> (using
+ <seealso marker="#set_lock/3"><c>set_lock/3</c></seealso>).
+ If this succeeds, <c><anno>Fun</anno>()</c> is evaluated and the
+ result <c><anno>Res</anno></c>
+ is returned. Returns <c>aborted</c> if the lock attempt fails.
+ If <c><anno>Retries</anno></c> is set to <c>infinity</c>,
+ the transaction does not abort.</p>
+ <p><c>infinity</c> is the default setting and is used if
+ no value is specified for <c><anno>Retries</anno></c>.</p>
</desc>
</func>
<func>
<name name="unregister_name" arity="1"/>
- <fsummary>Remove a globally registered name for a pid</fsummary>
+ <fsummary>Remove a globally registered name for a pid.</fsummary>
<desc>
<p>Removes the globally registered name <c><anno>Name</anno></c> from
the network of Erlang nodes.</p>
@@ -352,7 +332,7 @@
<func>
<name name="whereis_name" arity="1"/>
- <fsummary>Get the pid with a given globally registered name</fsummary>
+ <fsummary>Get the pid with a specified globally registered name.</fsummary>
<desc>
<p>Returns the pid with the globally registered name
<c><anno>Name</anno></c>. Returns <c>undefined</c> if the name is not
@@ -363,8 +343,8 @@
<section>
<title>See Also</title>
- <p><seealso marker="global_group">global_group(3)</seealso>,
- <seealso marker="net_kernel">net_kernel(3)</seealso></p>
+ <p><seealso marker="global_group"><c>global_group(3)</c></seealso>,
+ <seealso marker="net_kernel"><c>net_kernel(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/global_group.xml b/lib/kernel/doc/src/global_group.xml
index 4b21b0a14a..8f947b9adf 100644
--- a/lib/kernel/doc/src/global_group.xml
+++ b/lib/kernel/doc/src/global_group.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -26,22 +26,22 @@
<prepared>Esko Vierum&auml;ki</prepared>
<docno></docno>
<date>1998-12-18</date>
- <rev>b</rev>
+ <rev>B</rev>
</header>
<module>global_group</module>
- <modulesummary>Grouping Nodes to Global Name Registration Groups</modulesummary>
+ <modulesummary>Grouping nodes to global name registration groups.</modulesummary>
<description>
- <p>The global group function makes it possible to group the nodes
- in a system into partitions, each partition having its own global
- name space, refer to <c>global(3)</c>. These partitions are
- called global groups.</p>
- <p>The main advantage of dividing systems to global groups is that
+ <p>This module makes it possible to partition the nodes of a
+ system into <em>global groups</em>. Each global group has its own
+ global namespace, see <seealso marker="global">
+ <c>global(3)</c></seealso>.</p>
+ <p>The main advantage of dividing systems into global groups is that
the background load decreases while the number of nodes to be
updated is reduced when manipulating globally registered names.</p>
<p>The Kernel configuration parameter <c>global_groups</c> defines
the global groups (see also
- <seealso marker="kernel_app">kernel(6)</seealso>,
- <seealso marker="config">config(4)</seealso>:</p>
+ <seealso marker="kernel_app#global_groups"><c>kernel(6)</c></seealso>
+ and <seealso marker="config"><c>config(4)</c></seealso>):</p>
<code type="none">
{global_groups, [GroupTuple :: group_tuple()]}</code>
<p>For the processes and nodes to run smoothly using the global
@@ -54,22 +54,24 @@
</item>
<item>
<p>All involved nodes must agree on the global group definition,
- or the behavior of the system is undefined.</p>
+ otherwise the behavior of the system is undefined.</p>
</item>
<item>
- <p><em>All</em> nodes in the system should belong to exactly
+ <p><em>All</em> nodes in the system must belong to exactly
one global group.</p>
</item>
</list>
- <p>In the following description, a <em>group node</em> is a node
+ <p>In the following descriptions, a <em>group node</em> is a node
belonging to the same global group as the local node.</p>
</description>
- <datatypes>
+
+ <datatypes>
<datatype>
<name name="group_tuple"/>
<desc>
<p>A <c>GroupTuple</c> without <c>PublishType</c> is the same as a
- <c>GroupTuple</c> with <c>PublishType == normal</c>.</p>
+ <c>GroupTuple</c> with <c>PublishType</c> equal to <c>normal</c>.
+ </p>
</desc>
</datatype>
<datatype>
@@ -78,52 +80,57 @@
<datatype>
<name name="publish_type"/>
<desc>
- <p>A node started with the command line flag <c>-hidden</c>, see
- <seealso marker="erts:erl">erl(1)</seealso>, is said to be a
- <em>hidden</em> node. A hidden node will establish hidden
+ <p>A node started with command-line flag <c>-hidden</c> (see
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso>) is said
+ to be a <em>hidden</em> node. A hidden node establishes hidden
connections to nodes not part of the same global group, but
normal (visible) connections to nodes part of the same global
group.</p>
- <p>A global group defined with <c>PublishType == hidden</c>, is
- said to be a hidden global group. All nodes in a hidden global
- group are hidden nodes, regardless if they are started with
- the <c>-hidden</c> command line flag or not.</p>
+ <p>A global group defined with <c>PublishType</c> equal to
+ <c>hidden</c> is said to be a hidden global group.
+ All nodes in a hidden global
+ group are hidden nodes, whether they are started with
+ command-line flag <c>-hidden</c> or not.</p>
</desc>
</datatype>
<datatype>
<name name="name"/>
<desc><p>A registered name.</p></desc>
</datatype>
+
<datatype>
<name name="where"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="global_groups" arity="0"/>
- <fsummary>Return the global group names</fsummary>
+ <fsummary>Return the global group names.</fsummary>
<desc>
- <p>Returns a tuple containing the name of the global group
+ <p>Returns a tuple containing the name of the global group that
the local node belongs to, and the list of all other known
group names. Returns <c>undefined</c> if no global groups are
defined.</p>
</desc>
</func>
+
<func>
<name name="info" arity="0"/>
- <fsummary>Information about global groups</fsummary>
+ <fsummary>Information about global groups.</fsummary>
<type name="info_item"/>
<type name="sync_state"/>
<desc>
<p>Returns a list containing information about the global
- groups. Each element of the list is a tuple. The order of
- the tuples is not defined.</p>
+ groups. Each list element is a tuple. The order of
+ the tuples is undefined.</p>
<taglist>
<tag><c>{state, <anno>State</anno>}</c></tag>
<item>
<p>If the local node is part of a global group,
- <c><anno>State</anno> == synced</c>. If no global groups are defined,
- <c><anno>State</anno> == no_conf</c>.</p>
+ <c><anno>State</anno></c> is equal to <c>synced</c>.
+ If no global groups are defined,
+ <c><anno>State</anno></c> is equal to <c>no_conf</c>.</p>
</item>
<tag><c>{own_group_name, <anno>GroupName</anno>}</c></tag>
<item>
@@ -152,117 +159,131 @@
<tag><c>{other_groups, <anno>Groups</anno>}</c></tag>
<item>
<p><c><anno>Groups</anno></c> is a list of tuples
- <c>{<anno>GroupName</anno>, <anno>Nodes</anno>}</c>, specifying the name and nodes
+ <c>{<anno>GroupName</anno>, <anno>Nodes</anno>}</c>,
+ specifying the name and nodes
of the other global groups.</p>
</item>
<tag><c>{monitoring, <anno>Pids</anno>}</c></tag>
<item>
- <p>A list of pids, specifying the processes which have
+ <p>A list of pids, specifying the processes that have
subscribed to <c>nodeup</c> and <c>nodedown</c> messages.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name name="monitor_nodes" arity="1"/>
- <fsummary>Subscribe to node status changes</fsummary>
+ <fsummary>Subscribe to node status changes.</fsummary>
<desc>
- <p>Depending on <c><anno>Flag</anno></c>, the calling process starts
- subscribing (<c><anno>Flag</anno> == true</c>) or stops subscribing
- (<c><anno>Flag</anno> == false</c>) to node status change messages.</p>
- <p>A process which has subscribed will receive the messages
+ <p>Depending on <c><anno>Flag</anno></c>, the calling process
+ starts subscribing (<c><anno>Flag</anno></c> equal to
+ <c>true</c>) or stops subscribing (<c><anno>Flag</anno></c>
+ equal to <c>false</c>) to node status change messages.</p>
+ <p>A process that has subscribed receives the messages
<c>{nodeup, Node}</c> and <c>{nodedown, Node}</c> when a
group node connects or disconnects, respectively.</p>
</desc>
</func>
+
<func>
<name name="own_nodes" arity="0"/>
- <fsummary>Return the group nodes</fsummary>
+ <fsummary>Return the group nodes.</fsummary>
<desc>
<p>Returns the names of all group nodes, regardless of their
current status.</p>
</desc>
</func>
+
<func>
<name name="registered_names" arity="1"/>
- <fsummary>Return globally registered names</fsummary>
+ <fsummary>Return globally registered names.</fsummary>
<desc>
- <p>Returns a list of all names which are globally registered
+ <p>Returns a list of all names that are globally registered
on the specified node or in the specified global group.</p>
</desc>
</func>
+
<func>
<name name="send" arity="2"/>
<name name="send" arity="3"/>
- <fsummary>Send a message to a globally registered pid</fsummary>
+ <fsummary>Send a message to a globally registered pid.</fsummary>
<desc>
<p>Searches for <c><anno>Name</anno></c>, globally registered on
- the specified node or in the specified global group, or --
- if the <c><anno>Where</anno></c> argument is not provided -- in any global
- group. The global groups are searched in the order in which
- they appear in the value of the <c>global_groups</c>
- configuration parameter.</p>
- <p>If <c><anno>Name</anno></c> is found, the message <c><anno>Msg</anno></c> is sent to
+ the specified node or in the specified global group, or
+ (if argument <c><anno>Where</anno></c> is not provided) in any
+ global group. The global groups are searched in the order that
+ they appear in the value of configuration parameter
+ <c>global_groups</c>.</p>
+ <p>If <c><anno>Name</anno></c> is found, message
+ <c><anno>Msg</anno></c> is sent to
the corresponding pid. The pid is also the return value of
the function. If the name is not found, the function returns
<c>{badarg, {<anno>Name</anno>, <anno>Msg</anno>}}</c>.</p>
</desc>
</func>
+
<func>
<name name="sync" arity="0"/>
- <fsummary>Synchronize the group nodes</fsummary>
+ <fsummary>Synchronize the group nodes.</fsummary>
<desc>
<p>Synchronizes the group nodes, that is, the global name
- servers on the group nodes. Also check the names globally
+ servers on the group nodes. Also checks the names globally
registered in the current global group and unregisters them
on any known node not part of the group.</p>
<p>If synchronization is not possible, an error report is sent
- to the error logger (see also <c>error_logger(3)</c>).</p>
- <p>Failure:
- <c>{error, {'invalid global_groups definition', Bad}}</c> if
- the <c>global_groups</c> configuration parameter has an
+ to the error logger (see also
+ <seealso marker="error_logger"><c>error_logger(3)</c></seealso>.
+ </p>
+ <p>Returns <c>{error, {'invalid global_groups definition', Bad}}</c>
+ if configuration parameter <c>global_groups</c> has an
invalid value <c>Bad</c>.</p>
</desc>
</func>
+
<func>
<name name="whereis_name" arity="1"/>
<name name="whereis_name" arity="2"/>
- <fsummary>Get the pid with a given globally registered name</fsummary>
+ <fsummary>Get the pid with a specified globally registered name.</fsummary>
<desc>
<p>Searches for <c><anno>Name</anno></c>, globally registered on
- the specified node or in the specified global group, or -- if
- the <c><anno>Where</anno></c> argument is not provided -- in any global
- group. The global groups are searched in the order in which
- they appear in the value of the <c>global_groups</c>
- configuration parameter.</p>
- <p>If <c><anno>Name</anno></c> is found, the corresponding pid is returned.
- If the name is not found, the function returns
+ the specified node or in the specified global group, or
+ (if argument <c><anno>Where</anno></c> is not provided) in any global
+ group. The global groups are searched in the order that
+ they appear in the value of configuration parameter
+ <c>global_groups</c>.</p>
+ <p>If <c><anno>Name</anno></c> is found, the corresponding pid is
+ returned. If the name is not found, the function returns
<c>undefined</c>.</p>
</desc>
</func>
</funcs>
<section>
- <title>NOTE</title>
- <p>In the situation where a node has lost its connections to other
- nodes in its global group, but has connections to nodes in other
- global groups, a request from another global group may produce an
- incorrect or misleading result. For example, the isolated node may
- not have accurate information about registered names in its
- global group.</p>
- <p>Note also that the <c>send/2,3</c> function is not secure.</p>
- <p>Distribution of applications is highly dependent of the global
- group definitions. It is not recommended that an application is
- distributed over several global groups of the obvious reason that
- the registered names may be moved to another global group at
- failover/takeover. There is nothing preventing doing this, but
- the application code must in such case handle the situation.</p>
+ <title>Notes</title>
+ <list type="bulleted">
+ <item><p>In the situation where a node has lost its connections to other
+ nodes in its global group, but has connections to nodes in other
+ global groups, a request from another global group can produce an
+ incorrect or misleading result. For example, the isolated node can
+ have inaccurate information about registered names in its
+ global group.</p></item>
+ <item><p>Function
+ <seealso marker="#send/2"><c>send/2,3</c></seealso>
+ is not secure.</p></item>
+ <item><p>Distribution of applications is highly dependent of the global
+ group definitions. It is not recommended that an application is
+ distributed over many global groups, as
+ the registered names can be moved to another global group at
+ failover/takeover. Nothing prevents this to be done, but
+ the application code must then handle the situation.</p></item>
+ </list>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="erts:erl">erl(1)</seealso>,
- <seealso marker="global">global(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="global"><c>global(3)</c></seealso>,
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/heart.xml b/lib/kernel/doc/src/heart.xml
index 9da4773f2d..864f8facac 100644
--- a/lib/kernel/doc/src/heart.xml
+++ b/lib/kernel/doc/src/heart.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,93 +29,91 @@
<rev>A</rev>
</header>
<module>heart</module>
- <modulesummary>Heartbeat Monitoring of an Erlang Runtime System</modulesummary>
+ <modulesummary>Heartbeat monitoring of an Erlang runtime system.</modulesummary>
<description>
<p>This modules contains the interface to the <c>heart</c> process.
<c>heart</c> sends periodic heartbeats to an external port
program, which is also named <c>heart</c>. The purpose of
- the heart port program is to check that the Erlang runtime system
+ the <c>heart</c> port program is to check that the Erlang runtime system
it is supervising is still running. If the port program has not
received any heartbeats within <c>HEART_BEAT_TIMEOUT</c> seconds
- (default is 60 seconds), the system can be rebooted. Also, if
+ (defaults to 60 seconds), the system can be rebooted. Also, if
the system is equipped with a hardware watchdog timer and is
running Solaris, the watchdog can be used to supervise the entire
system.</p>
- <p>An Erlang runtime system to be monitored by a heart program,
- should be started with the command line flag <c>-heart</c> (see
- also <seealso marker="erts:erl">erl(1)</seealso>). The <c>heart</c>
- process is then started automatically:</p>
+ <p>An Erlang runtime system to be monitored by a heart program
+ is to be started with command-line flag <c>-heart</c> (see
+ also <seealso marker="erts:erl"><c>erl(1)</c></seealso>).
+ The <c>heart</c> process is then started automatically:</p>
<pre>
% <input>erl -heart ...</input></pre>
- <p>If the system should be rebooted because of missing heart-beats,
- or a terminated Erlang runtime system, the environment variable
- <c>HEART_COMMAND</c> has to be set before the system is started.
- If this variable is not set, a warning text will be printed but
- the system will not reboot. However, if the hardware watchdog is
- used, it will trigger a reboot <c>HEART_BEAT_BOOT_DELAY</c>
- seconds later nevertheless (default is 60).</p>
- <p>To reboot on the WINDOWS platform <c>HEART_COMMAND</c> can be
+ <p>If the system is to be rebooted because of missing heartbeats,
+ or a terminated Erlang runtime system, environment variable
+ <c>HEART_COMMAND</c> must be set before the system is started.
+ If this variable is not set, a warning text is printed but
+ the system does not reboot. However, if the hardware watchdog is
+ used, it still triggers a reboot <c>HEART_BEAT_BOOT_DELAY</c>
+ seconds later (defaults to 60 seconds).</p>
+ <p>To reboot on Windows, <c>HEART_COMMAND</c> can be
set to <c>heart -shutdown</c> (included in the Erlang delivery)
- or of course to any other suitable program which can activate a
- reboot.</p>
- <p>The hardware watchdog will not be started under Solaris if
- the environment variable <c>HW_WD_DISABLE</c> is set.</p>
- <p>The <c>HEART_BEAT_TIMEOUT</c> and <c>HEART_BEAT_BOOT_DELAY</c>
- environment variables can be used to configure the heart timeouts,
- they can be set in the operating system shell before Erlang is
- started or be specified at the command line:</p>
+ or to any other suitable program that can activate a reboot.</p>
+ <p>The hardware watchdog is not started under Solaris if
+ environment variable <c>HW_WD_DISABLE</c> is set.</p>
+ <p>The environment variables <c>HEART_BEAT_TIMEOUT</c> and
+ <c>HEART_BEAT_BOOT_DELAY</c> can be used to configure the heart
+ time-outs; they can be set in the operating system shell before Erlang
+ is started or be specified at the command line:</p>
<pre>
% <input>erl -heart -env HEART_BEAT_TIMEOUT 30 ...</input></pre>
<p>The value (in seconds) must be in the range 10 &lt; X &lt;= 65535.</p>
- <p>It should be noted that if the system clock is adjusted with
- more than <c>HEART_BEAT_TIMEOUT</c> seconds, <c>heart</c> will
- timeout and try to reboot the system. This can happen, for
- example, if the system clock is adjusted automatically by use of
- NTP (Network Time Protocol).</p>
-
- <p> If a crash occurs, an <c><![CDATA[erl_crash.dump]]></c> will <em>not</em> be written
- unless the environment variable <c><![CDATA[ERL_CRASH_DUMP_SECONDS]]></c> is set.
- </p>
-
+ <p>Notice that if the system clock is adjusted with
+ more than <c>HEART_BEAT_TIMEOUT</c> seconds, <c>heart</c>
+ times out and tries to reboot the system. This can occur, for
+ example, if the system clock is adjusted automatically by use of the
+ Network Time Protocol (NTP).</p>
+ <p>If a crash occurs, an <c><![CDATA[erl_crash.dump]]></c> is <em>not</em>
+ written unless environment variable
+ <c><![CDATA[ERL_CRASH_DUMP_SECONDS]]></c> is set:</p>
<pre>
% <input>erl -heart -env ERL_CRASH_DUMP_SECONDS 10 ...</input></pre>
-
- <p> If a regular core dump is wanted, let heart know by setting the kill signal to abort
- using the environment variable <c><![CDATA[HEART_KILL_SIGNAL=SIGABRT]]></c>.
- If unset, or not set to <c><![CDATA[SIGABRT]]></c>, the default behaviour will be a kill
- signal using <c><![CDATA[SIGKILL]]></c>.
- </p>
-
+ <p>If a regular core dump is wanted, let <c>heart</c> know by setting
+ the kill signal to abort using environment variable
+ <c><![CDATA[HEART_KILL_SIGNAL=SIGABRT]]></c>. If unset, or not set to
+ <c><![CDATA[SIGABRT]]></c>, the default behavior is a kill signal using
+ <c><![CDATA[SIGKILL]]></c>:</p>
<pre>
% <input>erl -heart -env HEART_KILL_SIGNAL SIGABRT ...</input></pre>
-
- <p>
- Furthermore, <c><![CDATA[ERL_CRASH_DUMP_SECONDS]]></c> has the following behaviour on
- <c>heart</c>:
+ <p> If heart should <b>not</b> kill the Erlang runtime system, this can be indicated
+ using the environment variable <c><![CDATA[HEART_NO_KILL=TRUE]]></c>.
+ This can be useful if the command executed by heart takes care of this,
+ for example as part of a specific cleanup sequence.
+ If unset, or not set to <c><![CDATA[TRUE]]></c>, the default behaviour
+ will be to kill as described above.
</p>
- <taglist>
- <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=0]]></c></tag>
- <item><p>
- Suppresses the writing a crash dump file entirely,
- thus rebooting the runtime system immediately.
- This is the same as not setting the environment variable.
- </p>
- </item>
- <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=-1]]></c></tag>
- <item><p> Setting the environment variable to a negative value will not reboot
- the runtime system until the crash dump file has been completly written.
- </p>
- </item>
- <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=S]]></c></tag>
- <item><p>
- Heart will wait for <c>S</c> seconds to let the crash dump file be written.
- After <c>S</c> seconds <c>heart</c> will reboot the runtime system regardless of
- the crash dump file has been written or not.
- </p>
- </item>
- </taglist>
- <p>In the following descriptions, all function fails with reason
+ <pre>
+% <input>erl -heart -env HEART_NO_KILL 1 ...</input></pre>
+
+ <p>Furthermore, <c><![CDATA[ERL_CRASH_DUMP_SECONDS]]></c> has the
+ following behavior on <c>heart</c>:</p>
+ <taglist>
+ <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=0]]></c></tag>
+ <item><p>Suppresses the writing of a crash dump file entirely,
+ thus rebooting the runtime system immediately.
+ This is the same as not setting the environment variable.</p>
+ </item>
+ <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=-1]]></c></tag>
+ <item><p>Setting the environment variable to a negative value does not
+ reboot the runtime system until the crash dump file is completly
+ written.</p>
+ </item>
+ <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=S]]></c></tag>
+ <item><p><c>heart</c> waits for <c>S</c> seconds to let the crash dump
+ file be written. After <c>S</c> seconds, <c>heart</c> reboots the
+ runtime system, whether the crash dump file is written or not.</p>
+ </item>
+ </taglist>
+ <p>In the following descriptions, all functions fail with reason
<c>badarg</c> if <c>heart</c> is not started.</p>
</description>
@@ -128,37 +126,36 @@
<funcs>
<func>
<name name="set_cmd" arity="1"/>
- <fsummary>Set a temporary reboot command</fsummary>
+ <fsummary>Set a temporary reboot command.</fsummary>
<desc>
- <p>Sets a temporary reboot command. This command is used if
+ <p>Sets a temporary reboot command. This command is used if
a <c>HEART_COMMAND</c> other than the one specified with
- the environment variable should be used in order to reboot
- the system. The new Erlang runtime system will (if it
- misbehaves) use the environment variable
- <c>HEART_COMMAND</c> to reboot.</p>
-
- <p>Limitations: The <c><anno>Cmd</anno></c> command string
- will be sent to the heart program as a ISO-latin-1 or UTF-8
- encoded binary depending on the file name encoding mode of the
- emulator (see
- <seealso marker="kernel:file#native_name_encoding/0"><c>file:native_name_encoding/0</c></seealso>).
- The size of the encoded binary must be less than 2047 bytes.</p>
+ the environment variable is to be used to reboot
+ the system. The new Erlang runtime system uses (if it misbehaves)
+ environment variable <c>HEART_COMMAND</c> to reboot.</p>
+ <p>Limitations: Command string <c><anno>Cmd</anno></c> is sent to the
+ <c>heart</c> program as an ISO Latin-1 or UTF-8 encoded binary,
+ depending on the filename encoding mode of the emulator (see
+ <seealso marker="kernel:file#native_name_encoding/0"><c>file:native_name_encoding/0</c></seealso>).
+ The size of the encoded binary must be less than 2047 bytes.</p>
</desc>
</func>
+
<func>
<name name="clear_cmd" arity="0"/>
- <fsummary>Clear the temporary boot command</fsummary>
+ <fsummary>Clear the temporary boot command.</fsummary>
<desc>
<p>Clears the temporary boot command. If the system terminates,
the normal <c>HEART_COMMAND</c> is used to reboot.</p>
</desc>
</func>
+
<func>
<name name="get_cmd" arity="0"/>
- <fsummary>Get the temporary reboot command</fsummary>
+ <fsummary>Get the temporary reboot command.</fsummary>
<desc>
- <p>Get the temporary reboot command. If the command is cleared,
- the empty string will be returned.</p>
+ <p>Gets the temporary reboot command. If the command is cleared,
+ the empty string is returned.</p>
</desc>
</func>
@@ -166,12 +163,12 @@
<name name="set_callback" arity="2"/>
<fsummary>Set a validation callback</fsummary>
<desc>
- <p> This validation callback will be executed before any heartbeat sent
- to the port program. For the validation to succeed it needs to return
- with the value <c>ok</c>.
+ <p> This validation callback will be executed before any
+ heartbeat is sent to the port program. For the validation to
+ succeed it needs to return with the value <c>ok</c>.
</p>
- <p> An exception within the callback will be treated as a validation failure. </p>
- <p> The callback will be removed if the system reboots. </p>
+ <p>An exception within the callback will be treated as a validation failure.</p>
+ <p>The callback will be removed if the system reboots.</p>
</desc>
</func>
<func>
diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml
index 088d78c1d6..c0dce2f50c 100644
--- a/lib/kernel/doc/src/inet.xml
+++ b/lib/kernel/doc/src/inet.xml
@@ -4,14 +4,14 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2015</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
@@ -29,43 +29,47 @@
<rev>A</rev>
</header>
<module>inet</module>
- <modulesummary>Access to TCP/IP Protocols</modulesummary>
+ <modulesummary>Access to TCP/IP protocols.</modulesummary>
<description>
- <p>Provides access to TCP/IP protocols.</p>
- <p>See also <em>ERTS User's Guide, Inet configuration</em> for more
- information on how to configure an Erlang runtime system for IP
- communication.</p>
- <p>Two Kernel configuration parameters affect the behaviour of all
- sockets opened on an Erlang node:
- <c>inet_default_connect_options</c> can contain a list of default
- options used for all sockets returned when doing <c>connect</c>,
- and <c>inet_default_listen_options</c> can contain a list of
- default options used when issuing a <c>listen</c> call. When
- <c>accept</c> is issued, the values of the listensocket options
- are inherited, why no such application variable is needed for
+ <p>This module provides access to TCP/IP protocols.</p>
+ <p>See also
+ <seealso marker="erts:inet_cfg">ERTS User's Guide:
+ Inet Configuration</seealso> for more information about how to
+ configure an Erlang runtime system for IP communication.</p>
+ <p>The following two <c>Kernel</c> configuration parameters affect the
+ behavior of all sockets opened on an Erlang node:</p>
+ <list type="bulleted">
+ <item><p><c>inet_default_connect_options</c> can contain a list of
+ default options used for all sockets returned when doing
+ <c>connect</c>.</p></item>
+ <item><p><c>inet_default_listen_options</c> can contain a list of
+ default options used when issuing a <c>listen</c> call.</p></item>
+ </list>
+ <p>When <c>accept</c> is issued, the values of the listening socket options
+ are inherited. No such application variable is therefore needed for
<c>accept</c>.</p>
- <p>Using the Kernel configuration parameters mentioned above, one
- can set default options for all TCP sockets on a node. This should
- be used with care, but options like <c>{delay_send,true}</c>
- might be specified in this way. An example of starting an Erlang
- node with all sockets using delayed send could look like this:</p>
+ <p>Using the <c>Kernel</c> configuration parameters above, one
+ can set default options for all TCP sockets on a node, but use this
+ with care. Options such as <c>{delay_send,true}</c> can be
+ specified in this way. The following is an example of starting an Erlang
+ node with all sockets using delayed send:</p>
<pre>
$ <input>erl -sname test -kernel \</input>
<input>inet_default_connect_options '[{delay_send,true}]' \</input>
<input>inet_default_listen_options '[{delay_send,true}]'</input></pre>
- <p>Note that the default option <c>{active, true}</c> currently
+ <p>Notice that default option <c>{active, true}</c>
cannot be changed, for internal reasons.</p>
<p>Addresses as inputs to functions can be either a string or a
- tuple. For instance, the IP address 150.236.20.73 can be passed to
- <c>gethostbyaddr/1</c> either as the string "150.236.20.73"
- or as the tuple <c>{150, 236, 20, 73}</c>.</p>
- <p>IPv4 address examples:</p>
+ tuple. For example, the IP address 150.236.20.73 can be passed to
+ <c>gethostbyaddr/1</c>, either as string <c>"150.236.20.73"</c>
+ or as tuple <c>{150, 236, 20, 73}</c>.</p>
+ <p><em>IPv4 address examples:</em></p>
<code type="none">
Address ip_address()
------- ------------
127.0.0.1 {127,0,0,1}
192.168.42.2 {192,168,42,2}</code>
- <p>IPv6 address examples:</p>
+ <p><em>IPv6 address examples:</em></p>
<code type="none">
Address ip_address()
------- ------------
@@ -77,7 +81,9 @@ FFFF::192.168.42.2
{16#3ffe,16#b80,16#1f8d,16#2,16#204,16#acff,16#fe17,16#bf38}
fe80::204:acff:fe17:bf38
{16#fe80,0,0,0,0,16#204,16#acff,16#fe17,16#bf38}</code>
- <p>A function that may be useful is <seealso marker="#parse_address/1">parse_address/1</seealso>:</p>
+ <p>Function
+ <seealso marker="#parse_address/1"><c>parse_address/1</c></seealso>
+ can be useful:</p>
<pre>
1> <input>inet:parse_address("192.168.42.2").</input>
{ok,{192,168,42,2}}
@@ -89,9 +95,12 @@ fe80::204:acff:fe17:bf38
<datatype>
<name name="hostent"/>
<desc>
- <p>The record is defined in the Kernel include file "inet.hrl".
- Add the following directive to the module:</p>
-<code>-include_lib("kernel/include/inet.hrl").</code></desc>
+ <p>The record is defined in the <c>Kernel</c> include file
+ <c>"inet.hrl"</c>.</p>
+ <p>Add the following directive to the module:</p>
+ <code>
+-include_lib("kernel/include/inet.hrl").</code>
+ </desc>
</datatype>
<datatype>
<name name="hostname"/>
@@ -109,18 +118,74 @@ fe80::204:acff:fe17:bf38
<name name="port_number"/>
</datatype>
<datatype>
+ <name name="local_address"/>
+ <desc>
+ <p>
+ This address family only works on Unix-like systems.
+ </p>
+ <p>
+ <c><anno>File</anno></c> is normally a file pathname
+ in a local filesystem. It is limited in length by the
+ operating system, traditionally to 108 bytes.
+ </p>
+ <p>
+ A <c>binary()</c> is passed as is to the operating system,
+ but a <c>string()</c> is encoded according to the
+ <seealso marker="file#native_name_encoding/0">
+ system filename encoding mode.
+ </seealso>
+ </p>
+ <p>
+ Other addresses are possible, for example Linux implements
+ "Abstract Addresses". See the documentation for
+ Unix Domain Sockets on your system,
+ normally <c>unix</c> in manual section 7.
+ </p>
+ <p>
+ In most API functions where you can use
+ this address family the port number must be <c>0</c>.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="socket_address"/>
+ </datatype>
+ <datatype>
+ <name name="returned_non_ip_address"/>
+ <desc>
+ <p>
+ Addresses besides
+ <seealso marker="#type-ip_address">
+ <c>ip_address()</c>
+ </seealso>
+ ones that are returned from socket API functions.
+ See in particular
+ <seealso marker="#type-local_address">
+ <c>local_address()</c>.
+ </seealso>
+ The <c>unspec</c> family corresponds to AF_UNSPEC and can
+ occur if the other side has no socket address.
+ The <c>undefined</c> family can only occur in the unlikely
+ event of an address family that the VM does not recognize.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
<name name="posix"/>
- <desc><p>An atom which is named from the Posix error codes
- used in Unix, and in the runtime libraries of most
- C compilers. See
+ <desc>
+ <p>An atom that is named from the POSIX error codes used in Unix,
+ and in the runtime libraries of most C compilers. See section
<seealso marker="#error_codes">POSIX Error Codes</seealso>.</p>
</desc>
</datatype>
<datatype>
<name>socket()</name>
- <desc><p><marker id="type-socket"></marker>
- See <seealso marker="gen_tcp#type-socket">gen_tcp(3)</seealso>
- and <seealso marker="gen_udp#type-socket">gen_udp(3)</seealso>.</p>
+ <desc>
+ <p>See
+ <seealso marker="gen_tcp#type-socket"><c>gen_tcp:type-socket</c></seealso>
+ and
+ <seealso marker="gen_udp#type-socket"><c>gen_udp:type-socket</c></seealso>.
+ </p>
</desc>
</datatype>
<datatype>
@@ -131,443 +196,419 @@ fe80::204:acff:fe17:bf38
<funcs>
<func>
<name name="close" arity="1"/>
- <fsummary>Close a socket of any type</fsummary>
+ <fsummary>Close a socket of any type.</fsummary>
<desc>
<p>Closes a socket of any type.</p>
</desc>
</func>
+
<func>
- <name name="get_rc" arity="0"/>
- <fsummary>Return a list of IP configuration parameters</fsummary>
+ <name name="format_error" arity="1"/>
+ <fsummary>Return a descriptive string for an error reason.</fsummary>
<desc>
- <p>Returns the state of the Inet configuration database in
- form of a list of recorded configuration parameters. (See the
- ERTS User's Guide, Inet configuration, for more information).
- Only parameters with other than default values are returned.</p>
+ <p>Returns a diagnostic error string. For possible POSIX values and
+ corresponding strings, see section
+ <seealso marker="#error_codes">POSIX Error Codes</seealso>.</p>
</desc>
</func>
+
<func>
- <name name="format_error" arity="1"/>
- <fsummary>Return a descriptive string for an error reason</fsummary>
+ <name name="get_rc" arity="0"/>
+ <fsummary>Return a list of IP configuration parameters.</fsummary>
<desc>
- <p>Returns a diagnostic error string. See the section below
- for possible Posix values and the corresponding
- strings.</p>
+ <p>Returns the state of the <c>Inet</c> configuration database in
+ form of a list of recorded configuration parameters. For more
+ information, see <seealso marker="erts:inet_cfg">ERTS User's Guide:
+ Inet Configuration</seealso>.
+ Only parameters with other than default values are returned.</p>
</desc>
</func>
+
<func>
<name name="getaddr" arity="2"/>
- <fsummary>Return the IP-address for a host</fsummary>
+ <fsummary>Return the IP address for a host.</fsummary>
<desc>
- <p>Returns the IP-address for <c><anno>Host</anno></c> as a tuple of
- integers. <c><anno>Host</anno></c> can be an IP-address, a single hostname
- or a fully qualified hostname.</p>
+ <p>Returns the IP address for <c><anno>Host</anno></c> as a tuple of
+ integers. <c><anno>Host</anno></c> can be an IP address, a single
+ hostname, or a fully qualified hostname.</p>
</desc>
</func>
+
<func>
<name name="getaddrs" arity="2"/>
- <fsummary>Return the IP-addresses for a host</fsummary>
+ <fsummary>Return the IP addresses for a host.</fsummary>
<desc>
- <p>Returns a list of all IP-addresses for <c><anno>Host</anno></c>.
- <c><anno>Host</anno></c> can be an IP-address, a single hostname or a fully
- qualified hostname.</p>
+ <p>Returns a list of all IP addresses for <c><anno>Host</anno></c>.
+ <c><anno>Host</anno></c> can be an IP address, a single hostname, or
+ a fully qualified hostname.</p>
</desc>
</func>
+
<func>
<name name="gethostbyaddr" arity="1"/>
- <fsummary>Return a hostent record for the host with the given address</fsummary>
+ <fsummary>Return a hostent record for the host with the specified
+ address.</fsummary>
<desc>
- <p>Returns a <c>hostent</c> record given an address.</p>
- </desc>
+ <p>Returns a <c>hostent</c> record for the host with the specified
+ address.</p></desc>
</func>
+
<func>
<name name="gethostbyname" arity="1"/>
- <fsummary>Return a hostent record for the host with the given name</fsummary>
+ <fsummary>Return a hostent record for the host with the specified name.
+ </fsummary>
<desc>
- <p>Returns a <c>hostent</c> record given a hostname.</p>
+ <p>Returns a <c>hostent</c> record for the host with the specified
+ hostname.</p>
+ <p>If resolver option <c>inet6</c> is <c>true</c>,
+ an IPv6 address is looked up. If that fails,
+ the IPv4 address is looked up and returned on
+ IPv6-mapped IPv4 format.</p>
</desc>
</func>
+
<func>
<name name="gethostbyname" arity="2"/>
- <fsummary>Return a hostent record for the host with the given name</fsummary>
+ <fsummary>Return a hostent record for the host with the specified name.
+ </fsummary>
<desc>
- <p>Returns a <c>hostent</c> record given a hostname, restricted
- to the given address family.</p>
+ <p>Returns a <c>hostent</c> record for the host with the specified
+ name, restricted to the specified address family.</p>
</desc>
</func>
+
<func>
<name name="gethostname" arity="0"/>
- <fsummary>Return the local hostname</fsummary>
+ <fsummary>Return the local hostname.</fsummary>
<desc>
- <p>Returns the local hostname. Will never fail.</p>
+ <p>Returns the local hostname. Never fails.</p>
</desc>
</func>
<func>
<name name="getifaddrs" arity="0"/>
- <fsummary>Return a list of interfaces and their addresses</fsummary>
- <desc>
- <p>
- Returns a list of 2-tuples containing interface names and the
- interface's addresses. <c><anno>Ifname</anno></c> is a Unicode string.
- <c><anno>Hwaddr</anno></c> is hardware dependent, e.g on Ethernet interfaces
- it is the 6-byte Ethernet address (MAC address (EUI-48 address)).
- </p>
- <p>
- The <c>{addr,<anno>Addr</anno>}</c>, <c>{netmask,_}</c> and <c>{broadaddr,_}</c>
- tuples are repeated in the result list iff the interface has multiple
- addresses. If you come across an interface that has
- multiple <c>{flag,_}</c> or <c>{hwaddr,_}</c> tuples you have
- a really strange interface or possibly a bug in this function.
- The <c>{flag,_}</c> tuple is mandatory, all other optional.
- </p>
- <p>
- Do not rely too much on the order of <c><anno>Flag</anno></c> atoms or
- <c><anno>Ifopt</anno></c> tuples. There are some rules, though:</p>
- <list>
- <item>
- Immediately after <c>{addr,_}</c> follows <c>{netmask,_}</c>
- </item>
- <item>
- Immediately thereafter follows <c>{broadaddr,_}</c> if
- the <c>broadcast</c> flag is <em>not</em> set and the
- <c>pointtopoint</c> flag <em>is</em> set.
- </item>
- <item>
- Any <c>{netmask,_}</c>, <c>{broadaddr,_}</c> or
- <c>{dstaddr,_}</c> tuples that follow an <c>{addr,_}</c>
- tuple concerns that address.
- </item>
- </list>
- <p>
- The <c>{hwaddr,_}</c> tuple is not returned on Solaris since the
- hardware address historically belongs to the link layer and only
- the superuser can read such addresses.
- </p>
- <p>
- On Windows, the data is fetched from quite different OS API
- functions, so the <c><anno>Netmask</anno></c> and <c><anno>Broadaddr</anno></c>
- values may be calculated, just as some <c><anno>Flag</anno></c> values.
- You have been warned. Report flagrant bugs.
- </p>
- </desc>
+ <fsummary>Return a list of interfaces and their addresses.</fsummary>
+ <desc>
+ <p>Returns a list of 2-tuples containing interface names and the
+ interface addresses. <c><anno>Ifname</anno></c> is a Unicode string.
+ <c><anno>Hwaddr</anno></c> is hardware dependent, for example, on
+ Ethernet interfaces
+ it is the 6-byte Ethernet address (MAC address (EUI-48 address)).</p>
+ <p>The tuples <c>{addr,<anno>Addr</anno>}</c>, <c>{netmask,_}</c>, and
+ <c>{broadaddr,_}</c> are repeated in the result list if the interface
+ has multiple addresses. If you come across an interface with
+ multiple <c>{flag,_}</c> or <c>{hwaddr,_}</c> tuples, you have
+ a strange interface or possibly a bug in this function. The tuple
+ <c>{flag,_}</c> is mandatory, all others are optional.</p>
+ <p>Do not rely too much on the order of <c><anno>Flag</anno></c> atoms
+ or <c><anno>Ifopt</anno></c> tuples. There are however some rules:</p>
+ <list type="bulleted">
+ <item><p>Immediately after
+ <c>{addr,_}</c> follows <c>{netmask,_}</c>.</p></item>
+ <item><p>Immediately thereafter follows <c>{broadaddr,_}</c> if flag
+ <c>broadcast</c> is <em>not</em> set and flag
+ <c>pointtopoint</c> <em>is</em> set.</p></item>
+ <item><p>Any <c>{netmask,_}</c>, <c>{broadaddr,_}</c>, or
+ <c>{dstaddr,_}</c> tuples that follow an <c>{addr,_}</c>
+ tuple concerns that address.</p></item>
+ </list>
+ <p>The tuple <c>{hwaddr,_}</c> is not returned on Solaris, as the
+ hardware address historically belongs to the link layer and only
+ the superuser can read such addresses.</p>
+ <warning>
+ <p>On Windows, the data is fetched from different OS API functions,
+ so the <c><anno>Netmask</anno></c> and <c><anno>Broadaddr</anno></c>
+ values can be calculated, just as some <c><anno>Flag</anno></c>
+ values. Report flagrant bugs.</p>
+ </warning>
+ </desc>
</func>
<func>
<name name="getopts" arity="2"/>
- <fsummary>Get one or more options for a socket</fsummary>
+ <fsummary>Get one or more options for a socket.</fsummary>
<type name="socket_getopt"/>
<type name="socket_setopt"/>
<desc>
- <p>Gets one or more options for a socket.
- See <seealso marker="#setopts/2">setopts/2</seealso>
- for a list of available options.</p>
- <p>The number of elements in the returned <c><anno>OptionValues</anno></c>
+ <p>Gets one or more options for a socket. For a list of available
+ options, see
+ <seealso marker="#setopts/2"><c>setopts/2</c></seealso>.</p>
+ <p>The number of elements in the returned
+ <c><anno>OptionValues</anno></c>
list does not necessarily correspond to the number of options
asked for. If the operating system fails to support an option,
- it is simply left out in the returned list. An error tuple is only
- returned when getting options for the socket is impossible
- (i.e. the socket is closed or the buffer size in a raw request
+ it is left out in the returned list. An error tuple is returned
+ only when getting options for the socket is impossible (that is,
+ the socket is closed or the buffer size in a raw request
is too large). This behavior is kept for backward
compatibility reasons.</p>
- <p>A raw option request <c>RawOptReq = {raw, Protocol, OptionNum, ValueSpec}</c> can be used to get information about
+ <p>A raw option request
+ <c>RawOptReq = {raw, Protocol, OptionNum, ValueSpec}</c>
+ can be used to get information about
socket options not (explicitly) supported by the emulator. The
- use of raw socket options makes the code non portable, but
+ use of raw socket options makes the code non-portable, but
allows the Erlang programmer to take advantage of unusual features
present on the current platform.</p>
- <p>The <c>RawOptReq</c> consists of the tag <c>raw</c> followed
- by the protocol level, the option number and either a binary
+ <p><c>RawOptReq</c> consists of tag <c>raw</c> followed
+ by the protocol level, the option number, and either a binary
or the size, in bytes, of the
- buffer in which the option value is to be stored. A binary
- should be used when the underlying <c>getsockopt</c> requires
- <em>input</em>
- in the argument field, in which case the size of the binary
- should correspond to the required buffer
+ buffer in which the option value is to be stored. A binary is to be
+ used when the underlying <c>getsockopt</c> requires <em>input</em>
+ in the argument field. In this case, the binary size
+ is to correspond to the required buffer
size of the return value. The supplied values in a <c>RawOptReq</c>
- correspond to the second, third and fourth/fifth parameters to the
+ correspond to the second, third, and fourth/fifth parameters to the
<c>getsockopt</c> call in the C socket API. The value stored
- in the buffer is returned as a binary <c>ValueBin</c>
+ in the buffer is returned as a binary <c>ValueBin</c>,
where all values are coded in the native endianess.</p>
- <p>Asking for and inspecting raw socket options require low
- level information about the current operating system and TCP
- stack.</p>
- <p>As an example, consider a Linux machine where the
- <c>TCP_INFO</c> option could be used to collect TCP statistics
- for a socket. Lets say we're interested in the
- <c>tcpi_sacked</c> field of the <c>struct tcp_info</c>
- filled in when asking for <c>TCP_INFO</c>. To
- be able to access this information, we need to know both the
- numeric value of the protocol level <c>IPPROTO_TCP</c>, the
- numeric value of the option <c>TCP_INFO</c>, the size of the
- <c>struct tcp_info</c> and the size and offset of
- the specific field. By inspecting the headers or writing a small C
- program, we found <c>IPPROTO_TCP</c> to be 6,
- <c>TCP_INFO</c> to be 11, the structure size to be 92 (bytes),
- the offset of <c>tcpi_sacked</c> to be 28 bytes and the actual
- value to be a 32 bit integer. We could use the following
- code to retrieve the value:</p>
+ <p>Asking for and inspecting raw socket options require low-level
+ information about the current operating system and TCP stack.</p>
+ <p><em>Example:</em></p>
+ <p>Consider a Linux machine where option
+ <c>TCP_INFO</c> can be used to collect TCP statistics
+ for a socket. Assume you are interested in field
+ <c>tcpi_sacked</c> of <c>struct tcp_info</c>
+ filled in when asking for <c>TCP_INFO</c>. To be able to access
+ this information, you need to know the following:</p>
+ <list type="bulleted">
+ <item>The numeric value of protocol level <c>IPPROTO_TCP</c></item>
+ <item>The numeric value of option <c>TCP_INFO</c></item>
+ <item>The size of <c>struct tcp_info</c></item>
+ <item>The size and offset of the specific field</item>
+ </list>
+ <p>By inspecting the headers or writing a small C program, it is found
+ that <c>IPPROTO_TCP</c> is 6, <c>TCP_INFO</c> is 11, the structure
+ size is 92 (bytes), the offset of <c>tcpi_sacked</c> is 28 bytes,
+ and the value is a 32-bit integer. The following code can be used
+ to retrieve the value:</p>
<code type="none"><![CDATA[
- get_tcpi_sacked(Sock) ->
- {ok,[{raw,_,_,Info}]} = inet:getopts(Sock,[{raw,6,11,92}]),
- <<_:28/binary,TcpiSacked:32/native,_/binary>> = Info,
- TcpiSacked.]]></code>
- <p>Preferably, you would check the machine type, the OS
- and the kernel version prior to executing anything similar to the
- code above.</p>
+get_tcpi_sacked(Sock) ->
+ {ok,[{raw,_,_,Info}]} = inet:getopts(Sock,[{raw,6,11,92}]),
+ <<_:28/binary,TcpiSacked:32/native,_/binary>> = Info,
+ TcpiSacked.]]></code>
+ <p>Preferably, you would check the machine type, the operating system,
+ and the <c>Kernel</c> version before executing anything similar to
+ this code.</p>
</desc>
</func>
<func>
<name name="getstat" arity="1"/>
<name name="getstat" arity="2"/>
- <fsummary>Get one or more statistic options for a socket</fsummary>
+ <fsummary>Get one or more statistic options for a socket.</fsummary>
<type name="stat_option"/>
<desc>
<p>Gets one or more statistic options for a socket.</p>
-
- <p><c>getstat(<anno>Socket</anno>)</c> is equivalent to
- <c>getstat(<anno>Socket</anno>, [recv_avg, recv_cnt, recv_dvi,
- recv_max, recv_oct, send_avg, send_cnt, send_dvi, send_max,
- send_oct])</c>.</p>
- <p>The following options are available:</p>
+ <p><c>getstat(<anno>Socket</anno>)</c> is equivalent to
+ <c>getstat(<anno>Socket</anno>, [recv_avg, recv_cnt, recv_dvi,
+ recv_max, recv_oct, send_avg, send_cnt, send_dvi, send_max,
+ send_oct])</c>.</p>
+ <p>The following options are available:</p>
<taglist>
- <tag><c>recv_avg</c></tag>
- <item>
- <p>Average size of packets in bytes received by the socket.</p>
- </item>
- <tag><c>recv_cnt</c></tag>
- <item>
+ <tag><c>recv_avg</c></tag>
+ <item>
+ <p>Average size of packets, in bytes, received by the socket.</p>
+ </item>
+ <tag><c>recv_cnt</c></tag>
+ <item>
<p>Number of packets received by the socket.</p>
- </item>
- <tag><c>recv_dvi</c></tag>
- <item>
- <p>Average packet size deviation in bytes received by the socket.</p>
- </item>
- <tag><c>recv_max</c></tag>
- <item>
- <p>The size of the largest packet in bytes received by the socket.</p>
- </item>
- <tag><c>recv_oct</c></tag>
- <item>
+ </item>
+ <tag><c>recv_dvi</c></tag>
+ <item>
+ <p>Average packet size deviation, in bytes, received by the socket.</p>
+ </item>
+ <tag><c>recv_max</c></tag>
+ <item>
+ <p>Size of the largest packet, in bytes, received by the socket.</p>
+ </item>
+ <tag><c>recv_oct</c></tag>
+ <item>
<p>Number of bytes received by the socket.</p>
- </item>
-
- <tag><c>send_avg</c></tag>
- <item>
- <p>Average size of packets in bytes sent from the socket.</p>
- </item>
- <tag><c>send_cnt</c></tag>
- <item>
+ </item>
+ <tag><c>send_avg</c></tag>
+ <item>
+ <p>Average size of packets, in bytes, sent from the socket.</p>
+ </item>
+ <tag><c>send_cnt</c></tag>
+ <item>
<p>Number of packets sent from the socket.</p>
- </item>
- <tag><c>send_dvi</c></tag>
- <item>
- <p>Average packet size deviation in bytes sent from the socket.</p>
- </item>
- <tag><c>send_max</c></tag>
- <item>
- <p>The size of the largest packet in bytes sent from the socket.</p>
- </item>
- <tag><c>send_oct</c></tag>
- <item>
+ </item>
+ <tag><c>send_dvi</c></tag>
+ <item>
+ <p>Average packet size deviation, in bytes, sent from the socket.</p>
+ </item>
+ <tag><c>send_max</c></tag>
+ <item>
+ <p>Size of the largest packet, in bytes, sent from the socket.</p>
+ </item>
+ <tag><c>send_oct</c></tag>
+ <item>
<p>Number of bytes sent from the socket.</p>
- </item>
+ </item>
</taglist>
</desc>
</func>
+
<func>
<name name="ntoa" arity="1" />
- <fsummary>Convert IPv6 / IPV4 adress to ascii</fsummary>
+ <fsummary>Convert IPv6/IPV4 address to ASCII.</fsummary>
<desc>
- <p>Parses an <seealso marker="#type-ip_address">ip_address()</seealso> and returns an IPv4 or IPv6 address string.</p>
+ <p>Parses an
+ <seealso marker="#type-ip_address"><c>ip_address()</c></seealso>
+ and returns an IPv4 or IPv6 address string.</p>
</desc>
</func>
+
+ <func>
+ <name name="parse_address" arity="1" />
+ <fsummary>Parse an IPv4 or IPv6 address.</fsummary>
+ <desc>
+ <p>Parses an IPv4 or IPv6 address string and returns an
+ <seealso marker="#type-ip4_address"><c>ip4_address()</c></seealso> or
+ <seealso marker="#type-ip6_address"><c>ip6_address()</c></seealso>.
+ Accepts a shortened IPv4 address string.</p>
+ </desc>
+ </func>
+
<func>
<name name="parse_ipv4_address" arity="1" />
- <fsummary>Parse an IPv4 address</fsummary>
+ <fsummary>Parse an IPv4 address.</fsummary>
<desc>
- <p>Parses an IPv4 address string and returns an <seealso marker="#type-ip4_address">ip4_address()</seealso>.
- Accepts a shortened IPv4 shortened address string.</p>
+ <p>Parses an IPv4 address string and returns an
+ <seealso marker="#type-ip4_address"><c>ip4_address()</c></seealso>.
+ Accepts a shortened IPv4 address string.</p>
</desc>
</func>
+
<func>
<name name="parse_ipv4strict_address" arity="1" />
<fsummary>Parse an IPv4 address strict.</fsummary>
<desc>
- <p>Parses an IPv4 address string containing four fields, i.e <em>not</em> shortened, and returns an <seealso marker="#type-ip4_address">ip4_address()</seealso>.</p>
+ <p>Parses an IPv4 address string containing four fields, that is,
+ <em>not</em> shortened, and returns an
+ <seealso marker="#type-ip4_address"><c>ip4_address()</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="parse_ipv6_address" arity="1" />
- <fsummary>Parse an IPv6 address</fsummary>
+ <fsummary>Parse an IPv6 address.</fsummary>
<desc>
- <p>Parses an IPv6 address string and returns an <seealso marker="#type-ip6_address">ip6_address()</seealso>.
- If an IPv4 address string is passed, an IPv4-mapped IPv6 address is returned.</p>
+ <p>Parses an IPv6 address string and returns an
+ <seealso marker="#type-ip6_address"><c>ip6_address()</c></seealso>.
+ If an IPv4 address string is specified, an IPv4-mapped IPv6 address
+ is returned.</p>
</desc>
</func>
+
<func>
<name name="parse_ipv6strict_address" arity="1" />
<fsummary>Parse an IPv6 address strict.</fsummary>
<desc>
- <p>Parses an IPv6 address string and returns an <seealso marker="#type-ip6_address">ip6_address()</seealso>.
- Does <em>not</em> accept IPv4 adresses.</p>
- </desc>
- </func>
- <func>
- <name name="parse_address" arity="1" />
- <fsummary>Parse an IPv4 or IPv6 address.</fsummary>
- <desc>
- <p>Parses an IPv4 or IPv6 address string and returns an <seealso marker="#type-ip4_address">ip4_address()</seealso> or <seealso marker="#type-ip6_address">ip6_address()</seealso>. Accepts a shortened IPv4 address string.</p>
+ <p>Parses an IPv6 address string and returns an
+ <seealso marker="#type-ip6_address"><c>ip6_address()</c></seealso>.
+ Does <em>not</em> accept IPv4 addresses.</p>
</desc>
</func>
+
<func>
<name name="parse_strict_address" arity="1" />
<fsummary>Parse an IPv4 or IPv6 address strict.</fsummary>
<desc>
- <p>Parses an IPv4 or IPv6 address string and returns an <seealso marker="#type-ip4_address">ip4_address()</seealso> or <seealso marker="#type-ip6_address">ip6_address()</seealso>. Does <em>not</em> accept a shortened IPv4 address string.</p>
+ <p>Parses an IPv4 or IPv6 address string and returns an
+ <seealso marker="#type-ip4_address"><c>ip4_address()</c></seealso> or
+ <seealso marker="#type-ip6_address"><c>ip6_address()</c></seealso>.
+ Does <em>not</em> accept a shortened IPv4 address string.</p>
</desc>
</func>
+
<func>
<name name="peername" arity="1"/>
- <fsummary>Return the address and port for the other end of a connection</fsummary>
+ <fsummary>Return the address and port for the other end of a connection.
+ </fsummary>
<desc>
- <p>
- Returns the address and port for the other end of a
- connection.
- </p>
- <p>
- Note that for SCTP sockets this function only returns
- one of the socket's peer addresses. The function
- <seealso marker="#peernames/1">peernames/1,2</seealso>
- returns all.
- </p>
+ <p>Returns the address and port for the other end of a connection.</p>
+ <p>Notice that for SCTP sockets, this function returns only
+ one of the peer addresses of the socket. Function
+ <seealso marker="#peernames/1"><c>peernames/1,2</c></seealso>
+ returns all.</p>
</desc>
</func>
+
<func>
<name name="peernames" arity="1"/>
- <fsummary>
- Return all address/port numbers for the other end of a connection
- </fsummary>
+ <fsummary>Return all address/port numbers for the other end of a
+ connection.</fsummary>
<desc>
- <p>
- Equivalent to
+ <p>Equivalent to
<seealso marker="#peernames/2"><c>peernames(<anno>Socket</anno>, 0)</c></seealso>.
- Note that this function's behaviour for an SCTP
+ </p>
+ <p>Notice that the behavior of this function for an SCTP
one-to-many style socket is not defined by the
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">SCTP Sockets API Extensions</url>.
- </p>
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">SCTP Sockets API Extensions</url>.</p>
</desc>
</func>
+
<func>
<name name="peernames" arity="2"/>
- <fsummary>
- Return all address/port numbers for the other end of a connection
- </fsummary>
+ <fsummary>Return all address/port numbers for the other end of a
+ connection.</fsummary>
<desc>
- <p>
- Returns a list of all address/port number pairs for the other end
- of a socket's association <c><anno>Assoc</anno></c>.
- </p>
- <p>
- This function can return multiple addresses for multihomed
- sockets such as SCTP sockets. For other sockets it
- returns a one element list.
- </p>
- <p>
- Note that the <c><anno>Assoc</anno></c> parameter is by the
+ <p>Returns a list of all address/port number pairs for the other end
+ of an association <c><anno>Assoc</anno></c> of a socket.</p>
+ <p>This function can return multiple addresses for multihomed
+ sockets, such as SCTP sockets. For other sockets it
+ returns a one-element list.</p>
+ <p>Notice that parameter <c><anno>Assoc</anno></c> is by the
<url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">SCTP Sockets API Extensions</url>
defined to be ignored for
- one-to-one style sockets. What the special value <c>0</c>
- means hence its behaviour for one-to-many style sockets
- is unfortunately not defined.
- </p>
+ one-to-one style sockets. What the special value <c>0</c>
+ means, hence its behavior for one-to-many style sockets,
+ is unfortunately undefined.</p>
</desc>
</func>
+
<func>
<name name="port" arity="1"/>
- <fsummary>Return the local port number for a socket</fsummary>
+ <fsummary>Return the local port number for a socket.</fsummary>
<desc>
<p>Returns the local port number for a socket.</p>
</desc>
</func>
- <func>
- <name name="sockname" arity="1"/>
- <fsummary>Return the local address and port number for a socket</fsummary>
- <desc>
- <p>Returns the local address and port number for a socket.</p>
- <p>
- Note that for SCTP sockets this function only returns
- one of the socket addresses. The function
- <seealso marker="#socknames/1">socknames/1,2</seealso>
- returns all.
- </p>
- </desc>
- </func>
- <func>
- <name name="socknames" arity="1"/>
- <fsummary>Return all local address/port numbers for a socket</fsummary>
- <desc>
- <p>
- Equivalent to
- <seealso marker="#socknames/2"><c>socknames(<anno>Socket</anno>, 0)</c></seealso>.
- </p>
- </desc>
- </func>
- <func>
- <name name="socknames" arity="2"/>
- <fsummary>Return all local address/port numbers for a socket</fsummary>
- <desc>
- <p>
- Returns a list of all local address/port number pairs for a socket
- for the given association <c><anno>Assoc</anno></c>.
- </p>
- <p>
- This function can return multiple addresses for multihomed
- sockets such as SCTP sockets. For other sockets it
- returns a one element list.
- </p>
- <p>
- Note that the <c><anno>Assoc</anno></c> parameter is by the
- <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">SCTP Sockets API Extensions</url>
- defined to be ignored for one-to-one style sockets.
- For one-to-many style sockets the special value <c>0</c>
- is defined to mean that the returned addresses shall be
- without regard to any particular association.
- How different SCTP implementations interprets this varies somewhat.
- </p>
- </desc>
- </func>
+
<func>
<name name="setopts" arity="2"/>
- <fsummary>Set one or more options for a socket</fsummary>
+ <fsummary>Set one or more options for a socket.</fsummary>
<type name="socket_setopt"/>
<desc>
- <p>Sets one or more options for a socket. The following options
- are available:</p>
+ <p>Sets one or more options for a socket.</p>
+ <p>The following options are available:</p>
<taglist>
<tag><c>{active, true | false | once | N}</c></tag>
<item>
<p>If the value is <c>true</c>, which is the default,
- everything received from the socket will be sent as
- messages to the receiving process. If the value is
- <c>false</c> (passive mode), the process must explicitly
- receive incoming data by calling
+ everything received from the socket is sent as
+ messages to the receiving process.</p>
+ <p>If the value is <c>false</c> (passive mode), the process must
+ explicitly receive incoming data by calling
<seealso marker="gen_tcp#recv/2"><c>gen_tcp:recv/2,3</c></seealso>,
- <seealso marker="gen_udp#recv/2"><c>gen_udp:recv/2,3</c></seealso>
+ <seealso marker="gen_udp#recv/2"><c>gen_udp:recv/2,3</c></seealso>,
or <seealso marker="gen_sctp#recv/1"><c>gen_sctp:recv/1,2</c></seealso>
(depending on the type of socket).</p>
<p>If the value is <c>once</c> (<c>{active, once}</c>),
- <em>one</em> data message from the socket will be sent
- to the process. To receive one more message,
- <c>setopts/2</c> must be called again with the
- <c>{active, once}</c> option.</p>
+ <em>one</em> data message from the socket is sent
+ to the process. To receive one more message,
+ <c>setopts/2</c> must be called again with option
+ <c>{active, once}</c>.</p>
<p>If the value is an integer <c>N</c> in the range -32768 to 32767
(inclusive), the value is added to the socket's count of data
messages sent to the controlling process. A socket's default
- message count is 0. If a negative value is specified and its
- magnitude is equal to or greater than the socket's current
- message count, the socket's message count is set to 0. Once
- the socket's message count reaches 0, either due to sending
+ message count is <c>0</c>. If a negative value is specified, and
+ its magnitude is equal to or greater than the socket's current
+ message count, the socket's message count is set to <c>0</c>.
+ Once the socket's message count reaches <c>0</c>, either because
+ of sending
received data messages to the process or by being explicitly set,
the process is then notified by a special message, specific to
the type of socket, that the socket has entered passive
@@ -575,339 +616,298 @@ fe80::204:acff:fe17:bf38
messages <c>setopts/2</c> must be called again to set the
socket back into an active mode.</p>
<p>When using <c>{active, once}</c> or <c>{active, N}</c>, the
- socket changes behaviour automatically when data is received.
- This can sometimes be confusing in combination with
- connection-oriented sockets (i.e. <c>gen_tcp</c>) as a socket
- with <c>{active, false}</c> behaviour reports closing
+ socket changes behavior automatically when data is received.
+ This can be confusing in combination with connection-oriented
+ sockets (that is, <c>gen_tcp</c>), as a socket
+ with <c>{active, false}</c> behavior reports closing
differently than a socket with <c>{active, true}</c>
- behaviour. To make programming easier, a socket where
- the peer closed and this was detected while in
- <c>{active, false}</c> mode, will still generate the
- message
+ behavior. To simplify programming, a socket where
+ the peer closed, and this is detected while in
+ <c>{active, false}</c> mode, still generates message
<c>{tcp_closed,Socket}</c> when set to <c>{active, once}</c>,
- <c>{active, true}</c> or <c>{active, N}</c> mode. It is therefore
- safe to assume that the message
- <c>{tcp_closed,Socket}</c>, possibly followed by socket
- port termination (depending on the <c>exit_on_close</c>
- option) will eventually appear when a socket changes
+ <c>{active, true}</c>, or <c>{active, N}</c> mode.
+ It is therefore safe to assume that message
+ <c>{tcp_closed,Socket}</c>, possibly followed by socket port
+ termination (depending on option <c>exit_on_close</c>)
+ eventually appears when a socket changes
back and forth between <c>{active, true}</c> and
<c>{active, false}</c> mode. However,
- <em>when</em> peer closing is detected is all up to the
+ <em>when</em> peer closing is detected it is all up to the
underlying TCP/IP stack and protocol.</p>
- <p>Note that <c>{active, true}</c> mode provides no flow
- control; a fast sender could easily overflow the
- receiver with incoming messages. The same is true of
- <c>{active, N}</c> mode while the message count is greater
- than zero. Use active mode only if
+ <p>Notice that <c>{active, true}</c> mode provides no flow
+ control; a fast sender can easily overflow the
+ receiver with incoming messages. The same is true for
+ <c>{active, N}</c> mode, while the message count is greater
+ than zero.</p>
+ <p>Use active mode only if
your high-level protocol provides its own flow control
- (for instance, acknowledging received messages) or the
+ (for example, acknowledging received messages) or the
amount of data exchanged is small. <c>{active, false}</c>
- mode, use of the <c>{active, once}</c> mode or <c>{active, N}</c>
+ mode, use of the <c>{active, once}</c> mode, or <c>{active, N}</c>
mode with values of <c>N</c> appropriate for the application
- provides flow control; the other side will not be able send
+ provides flow control. The other side cannot send
faster than the receiver can read.</p>
</item>
-
- <tag><c>{broadcast, Boolean}</c>(UDP sockets)</tag>
+ <tag><c>{broadcast, Boolean}</c> (UDP sockets)</tag>
<item>
- <p>Enable/disable permission to send broadcasts.</p>
- <marker id="option-buffer"></marker>
+ <p>Enables/disables permission to send broadcasts.</p>
+ <marker id="option-buffer"></marker>
+ </item>
+ <tag><c>{buffer, Size}</c></tag>
+ <item>
+ <p>The size of the user-level software buffer used by
+ the driver. Not to be confused with options <c>sndbuf</c>
+ and <c>recbuf</c>, which correspond to the
+ <c>Kernel</c> socket buffers. It is recommended
+ to have <c>val(buffer) &gt;= max(val(sndbuf),val(recbuf))</c> to
+ avoid performance issues because of unnecessary copying.
+ <c>val(buffer)</c> is automatically set to the above
+ maximum when values <c>sndbuf</c> or <c>recbuf</c> are set.
+ However, as the sizes set for <c>sndbuf</c> and <c>recbuf</c>
+ usually become larger, you are encouraged to use
+ <seealso marker="#getopts/2"><c>getopts/2</c></seealso>
+ to analyze the behavior of your operating system.</p>
</item>
-
- <tag><c>{buffer, Size}</c></tag>
- <item>
- <p>The size of the user-level software buffer used by
- the driver. Not to be confused with <c>sndbuf</c>
- and <c>recbuf</c> options which correspond to
- the kernel socket buffers. It is recommended
- to have <c>val(buffer) &gt;= max(val(sndbuf),val(recbuf))</c> to
- avoid performance issues due to unnecessary copying.
- In fact, the <c>val(buffer)</c> is automatically set to
- the above maximum when <c>sndbuf</c> or <c>recbuf</c> values are set.
- However, since the actual sizes set for <c>sndbuf</c> and <c>recbuf</c>
- usually becomes larger, you are encouraged to use
- <seealso marker="inet#getopts/2"><c>inet:getopts/2</c></seealso>
- to analyze the behavior of your operating system.</p>
- </item>
-
<tag><c>{delay_send, Boolean}</c></tag>
<item>
<p>Normally, when an Erlang process sends to a socket,
- the driver will try to immediately send the data. If that
- fails, the driver will use any means available to queue
+ the driver tries to send the data immediately. If that
+ fails, the driver uses any means available to queue
up the message to be sent whenever the operating system
says it can handle it. Setting <c>{delay_send, true}</c>
- will make <em>all</em> messages queue up. This makes
- the messages actually sent onto the network be larger but
- fewer. The option actually affects the scheduling of send
+ makes <em>all</em> messages queue up. The messages sent
+ to the network are then larger but fewer.
+ The option affects the scheduling of send
requests versus Erlang processes instead of changing any
- real property of the socket. Needless to say it is an
- implementation specific option. Default is <c>false</c>.</p>
+ real property of the socket. The option is
+ implementation-specific. Defaults to <c>false</c>.</p>
+ </item>
+ <tag><c>{deliver, port | term}</c></tag>
+ <item>
+ <p>When <c>{active, true}</c>, data is delivered on the form
+ <c>port</c> : <c>{S, {data, [H1,..Hsz | Data]}}</c> or
+ <c>term</c> : <c>{tcp, S, [H1..Hsz | Data]}</c>.</p>
</item>
-
- <tag><c>{deliver, port | term}</c></tag>
- <item> <p> When <c>{active, true}</c> delivers data on the forms
- <c>port</c> : <c>{S, {data, [H1,..Hsz | Data]}}</c> or
- <c>term</c> : <c>{tcp, S, [H1..Hsz | Data]}</c>.
- </p>
- </item>
-
<tag><c>{dontroute, Boolean}</c></tag>
<item>
- <p>Enable/disable routing bypass for outgoing messages.</p>
+ <p>Enables/disables routing bypass for outgoing messages.</p>
</item>
-
<tag><c>{exit_on_close, Boolean}</c></tag>
<item>
- <p>By default this option is set to <c>true</c>.</p>
+ <p>This option is set to <c>true</c> by default.</p>
<p>The only reason to set it to <c>false</c> is if you want
- to continue sending data to the socket after a close has
- been detected, for instance if the peer has used
- <seealso marker="gen_tcp#shutdown/2">gen_tcp:shutdown/2</seealso>
- to shutdown the write side.</p>
+ to continue sending data to the socket after a close is
+ detected, for example, if the peer uses
+ <seealso marker="gen_tcp#shutdown/2"><c>gen_tcp:shutdown/2</c></seealso>
+ to shut down the write side.</p>
</item>
-
<tag><c>{header, Size}</c></tag>
<item>
- <p>This option is only meaningful if the <c>binary</c>
- option was specified when the socket was created. If
- the <c>header</c> option is specified, the first
+ <p>This option is only meaningful if option <c>binary</c>
+ was specified when the socket was created. If option
+ <c>header</c> is specified, the first
<c>Size</c> number bytes of data received from the socket
- will be elements of a list, and the rest of the data will
- be a binary given as the tail of the same list. If for
- example <c>Size == 2</c>, the data received will match
+ are elements of a list, and the remaining data is
+ a binary specified as the tail of the same list. For example,
+ if <c>Size == 2</c>, the data received matches
<c>[Byte1,Byte2|Binary]</c>.</p>
</item>
-
<tag><c>{high_msgq_watermark, Size}</c></tag>
<item>
- <p>The socket message queue will be set into a busy
- state when the amount of data queued on the message
- queue reaches this limit. Note that this limit only
- concerns data that have not yet reached the ERTS internal
- socket implementation. Default value used is 8 kB.</p>
- <p>Senders of data to the socket will be suspended if
- either the socket message queue is busy, or the socket
- itself is busy.</p>
- <p>For more information see the <c>low_msgq_watermark</c>,
- <c>high_watermark</c>, and <c>low_watermark</c> options.</p>
- <p>Note that distribution sockets will disable the use of
- <c>high_msgq_watermark</c> and <c>low_msgq_watermark</c>,
- and will instead use the
- <seealso marker="erts:erlang#system_info_dist_buf_busy_limit">distribution
- buffer busy limit</seealso> which is a similar feature.</p>
+ <p>The socket message queue is set to a busy
+ state when the amount of data on the message
+ queue reaches this limit. Notice that this limit only
+ concerns data that has not yet reached the <c>ERTS</c> internal
+ socket implementation. Defaults to 8 kB.</p>
+ <p>Senders of data to the socket are suspended if
+ either the socket message queue is busy or the socket
+ itself is busy.</p>
+ <p>For more information, see options <c>low_msgq_watermark</c>,
+ <c>high_watermark</c>, and <c>low_watermark</c>.</p>
+ <p>Notice that distribution sockets disable the use of
+ <c>high_msgq_watermark</c> and <c>low_msgq_watermark</c>.
+ Instead use the
+ <seealso marker="erts:erlang#system_info_dist_buf_busy_limit">distribution buffer busy limit</seealso>,
+ which is a similar feature.</p>
</item>
-
<tag><c>{high_watermark, Size}</c> (TCP/IP sockets)</tag>
<item>
- <p>The socket will be set into a busy state when the amount
- of data queued internally by the ERTS socket implementation
- reaches this limit. Default value used is 8 kB.</p>
- <p>Senders of data to the socket will be suspended if
- either the socket message queue is busy, or the socket
- itself is busy.</p>
- <p>For more information see the <c>low_watermark</c>,
- <c>high_msgq_watermark</c>, and <c>low_msqg_watermark</c>
- options.</p>
+ <p>The socket is set to a busy state when the amount
+ of data queued internally by the <c>ERTS</c> socket implementation
+ reaches this limit. Defaults to 8 kB.</p>
+ <p>Senders of data to the socket are suspended if
+ either the socket message queue is busy or the socket
+ itself is busy.</p>
+ <p>For more information, see options <c>low_watermark</c>,
+ <c>high_msgq_watermark</c>, and <c>low_msqg_watermark</c>.</p>
</item>
-
<tag><c>{ipv6_v6only, Boolean}</c></tag>
<item>
- <p>
- Restricts the socket to only use IPv6, prohibiting any
+ <p>Restricts the socket to use only IPv6, prohibiting any
IPv4 connections. This is only applicable for
- IPv6 sockets (option <c>inet6</c>).
- </p>
- <p>
- On most platforms this option has to be set on the socket
- before associating it to an address. Therefore it is only
- reasonable to give it when creating the socket and not
- to use it when calling the function
- (<seealso marker="#setopts/2">setopts/2</seealso>)
- containing this description.
- </p>
- <p>
- The behaviour of a socket with this socket option set to
- <c>true</c> is becoming the only portable one. The original
+ IPv6 sockets (option <c>inet6</c>).</p>
+ <p>On most platforms this option must be set on the socket
+ before associating it to an address. It is therefore only
+ reasonable to specify it when creating the socket and not
+ to use it when calling function
+ (<seealso marker="#setopts/2"><c>setopts/2</c></seealso>)
+ containing this description.</p>
+ <p>The behavior of a socket with this option set to
+ <c>true</c> is the only portable one. The original
idea when IPv6 was new of using IPv6 for all traffic
is now not recommended by FreeBSD (you can use
<c>{ipv6_v6only,false}</c> to override the recommended
system default value),
- forbidden by OpenBSD (the supported GENERIC kernel)
- and impossible on Windows (that has separate
+ forbidden by OpenBSD (the supported GENERIC kernel),
+ and impossible on Windows (which has separate
IPv4 and IPv6 protocol stacks). Most Linux distros
still have a system default value of <c>false</c>.
- This policy shift among operating systems towards
- separating IPv6 from IPv4 traffic has evolved since
+ This policy shift among operating systems to
+ separate IPv6 from IPv4 traffic has evolved, as
it gradually proved hard and complicated to get
- a dual stack implementation correct and secure.
- </p>
- <p>
- On some platforms the only allowed value for this option
- is <c>true</c>, e.g. OpenBSD and Windows. Trying to set
- this option to <c>false</c> when creating the socket
- will in this case fail.
- </p>
- <p>
- Setting this option on platforms where it does not exist
- is ignored and getting this option with
- <seealso marker="#getopts/2">getopts/2</seealso>
- returns no value i.e the returned list will not contain an
- <c>{ipv6_v6only,_}</c> tuple. On Windows the option acually
- does not exist, but it is emulated as being a
- read-only option with the value <c>true</c>.
- </p>
- <p>
- So it boils down to that setting this option to <c>true</c>
- when creating a socket will never fail except possibly
- (at the time of this writing) on a platform where you
+ a dual stack implementation correct and secure.</p>
+ <p>On some platforms, the only allowed value for this option
+ is <c>true</c>, for example, OpenBSD and Windows. Trying to set
+ this option to <c>false</c>, when creating the socket, fails
+ in this case.</p>
+ <p>Setting this option on platforms where it does not exist
+ is ignored. Getting this option with
+ <seealso marker="#getopts/2"><c>getopts/2</c></seealso>
+ returns no value, that is, the returned list does not contain an
+ <c>{ipv6_v6only,_}</c> tuple. On Windows, the option
+ does not exist, but it is emulated as a
+ read-only option with value <c>true</c>.</p>
+ <p>Therefore, setting this option to <c>true</c>
+ when creating a socket never fails, except possibly on a
+ platform where you
have customized the kernel to only allow <c>false</c>,
- which might be doable (but weird) on e.g. OpenBSD.
- </p>
- <p>
- If you read back the option value using
- <seealso marker="#getopts/2">getopts/2</seealso>
- and get no value the option does not exist in the host OS
- and all bets are off regarding the behaviour of both
- an IPv6 and an IPv4 socket listening on the same port
- as well as for an IPv6 socket getting IPv4 traffic.
- </p>
+ which can be doable (but awkward) on, for example, OpenBSD.</p>
+ <p>If you read back the option value using
+ <seealso marker="#getopts/2"><c>getopts/2</c></seealso>
+ and get no value, the option does not exist in the host
+ operating system. The behavior of both an IPv6 and an IPv4
+ socket listening on the same port, and for an IPv6 socket
+ getting IPv4 traffic is then no longer predictable.</p>
</item>
-
<tag><c>{keepalive, Boolean}</c>(TCP/IP sockets)</tag>
<item>
<p>Enables/disables periodic transmission on a connected
- socket, when no other data is being exchanged. If
+ socket when no other data is exchanged. If
the other end does not respond, the connection is
- considered broken and an error message will be sent to
- the controlling process. Default disabled.</p>
- <marker id="option-linger"></marker>
+ considered broken and an error message is sent to
+ the controlling process. Defaults to <c>disabled</c>.</p>
+ <marker id="option-linger"></marker>
+ </item>
+ <tag><c>{linger, {true|false, Seconds}}</c></tag>
+ <item>
+ <p>Determines the time-out, in seconds, for flushing unsent data
+ in the <c>close/1</c> socket call. If the first component of
+ the value tuple is <c>false</c>, the second is ignored. This
+ means that <c>close/1</c> returns immediately, not waiting
+ for data to be flushed. Otherwise, the second component is
+ the flushing time-out, in seconds.</p>
</item>
-
- <tag><c>{linger, {true|false, Seconds}}</c></tag>
- <item>
- <p>Determines the timeout in seconds for flushing unsent data in the
- <c>close/1</c> socket call. If the 1st component of the value
- tuple is <c>false</c>, the 2nd one is ignored, which means that
- <c>close/1</c> returns immediately not waiting
- for data to be flushed. Otherwise, the 2nd component is
- the flushing time-out in seconds.</p>
- </item>
-
<tag><c>{low_msgq_watermark, Size}</c></tag>
<item>
<p>If the socket message queue is in a busy state, the
- socket message queue will be set in a not busy state when
- the amount of data queued in the message queue falls
- below this limit. Note that this limit only concerns data
- that have not yet reached the ERTS internal socket
- implementation. Default value used is 4 kB.</p>
- <p>Senders that have been suspended due to either a
- busy message queue or a busy socket, will be resumed
- when neither the socket message queue, nor the socket
- are busy.</p>
- <p>For more information see the <c>high_msgq_watermark</c>,
- <c>high_watermark</c>, and <c>low_watermark</c> options.</p>
- <p>Note that distribution sockets will disable the use of
- <c>high_msgq_watermark</c> and <c>low_msgq_watermark</c>,
- and will instead use the
- <seealso marker="erts:erlang#system_info_dist_buf_busy_limit">distribution
- buffer busy limit</seealso> which is a similar feature.</p>
+ socket message queue is set in a not busy state when
+ the amount of data queued in the message queue falls
+ below this limit. Notice that this limit only concerns data
+ that has not yet reached the <c>ERTS</c> internal socket
+ implementation. Defaults to 4 kB.</p>
+ <p>Senders that are suspended because of either a
+ busy message queue or a busy socket are resumed
+ when the socket message queue and the socket
+ are not busy.</p>
+ <p>For more information, see options <c>high_msgq_watermark</c>,
+ <c>high_watermark</c>, and <c>low_watermark</c>.</p>
+ <p>Notice that distribution sockets disable the use of
+ <c>high_msgq_watermark</c> and <c>low_msgq_watermark</c>.
+ Instead they use the
+ <seealso marker="erts:erlang#system_info_dist_buf_busy_limit">distribution
+ buffer busy limit</seealso>, which is a similar feature.</p>
</item>
-
<tag><c>{low_watermark, Size}</c> (TCP/IP sockets)</tag>
<item>
- <p>If the socket is in a busy state, the socket will
- be set in a not busy state when the amount of data
- queued internally by the ERTS socket implementation
- falls below this limit. Default value used is 4 kB.</p>
- <p>Senders that have been suspended due to either a
- busy message queue or a busy socket, will be resumed
- when neither the socket message queue, nor the socket
- are busy.</p>
- <p>For more information see the <c>high_watermark</c>,
- <c>high_msgq_watermark</c>, and <c>low_msgq_watermark</c>
- options.</p>
+ <p>If the socket is in a busy state, the socket is
+ set in a not busy state when the amount of data
+ queued internally by the <c>ERTS</c> socket implementation
+ falls below this limit. Defaults to 4 kB.</p>
+ <p>Senders that are suspended because of a
+ busy message queue or a busy socket are resumed
+ when the socket message queue and the socket are not busy.</p>
+ <p>For more information, see options <c>high_watermark</c>,
+ <c>high_msgq_watermark</c>, and <c>low_msgq_watermark</c>.</p>
</item>
-
- <tag><c>{mode, Mode :: binary | list}</c></tag>
+ <tag><c>{mode, Mode :: binary | list}</c></tag>
<item>
- <p>Received <c>Packet</c> is delivered as defined by Mode.</p>
- </item>
-
+ <p>Received <c>Packet</c> is delivered as defined by <c>Mode</c>.
+ </p>
+ </item>
<tag><c>{netns, Namespace :: file:filename_all()}</c></tag>
<item>
- <p>Set a network namespace for the socket. The <c>Namespace</c>
- parameter is a filename defining the namespace for example
- <c>"/var/run/netns/example"</c> typically created by the command
- <c>ip netns add example</c>. This option must be used in a
- function call that creates a socket i.e
- <seealso marker="gen_tcp#connect/3">
- gen_tcp:connect/3,4</seealso>,
- <seealso marker="gen_tcp#listen/2">
- gen_tcp:listen/2</seealso>,
- <seealso marker="gen_udp#open/1">
- gen_udp:open/1,2</seealso> or
- <seealso marker="gen_sctp#open/0">
- gen_sctp:open/0-2</seealso>.
- </p>
- <p>This option uses the Linux specific syscall
- <c>setns()</c> such as in Linux kernel 3.0 or later
- and therefore only exists when the runtime system
- has been compiled for such an operating system.
- </p>
- <p>
- The virtual machine also needs elevated privileges either
- running as superuser or (for Linux) having the capability
- <c>CAP_SYS_ADMIN</c> according to the documentation for setns(2).
- However, during testing also <c>CAP_SYS_PTRACE</c>
- and <c>CAP_DAC_READ_SEARCH</c> has proven to be necessary.
- Example:</p><code>
-setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp
-</code>
- <p>Note also that the filesystem containing the virtual machine
- executable (<c>beam.smp</c> in the example above) has to be local,
- mounted without the <c>nosetuid</c> flag,
- support extended attributes and that
- the kernel has to support file capabilities.
- All this runs out of the box on at least Ubuntu 12.04 LTS,
- except that SCTP sockets appears to not support
- network namespaces.
- </p>
- <p>The <c>Namespace</c> is a file name and is encoded
- and decoded as discussed in
- <seealso marker="file">file</seealso>
- except that the emulator flag <c>+fnu</c> is ignored and
- <seealso marker="#getopts/2">getopts/2</seealso>
- for this option will return a binary for the filename
- if the stored filename can not be decoded,
- which should only happen if you set the option using a binary
- that can not be decoded with the emulator's filename encoding:
- <seealso marker="file#native_name_encoding/0">
- file:native_name_encoding/0</seealso>.
- </p>
- </item>
-
- <tag><c>list</c></tag>
+ <p>Sets a network namespace for the socket. Parameter
+ <c>Namespace</c> is a filename defining the namespace, for
+ example, <c>"/var/run/netns/example"</c>, typically created by
+ command <c>ip netns add example</c>. This option must be used in
+ a function call that creates a socket, that is,
+ <seealso marker="gen_tcp#connect/3"><c>gen_tcp:connect/3,4</c></seealso>,
+ <seealso marker="gen_tcp#listen/2"><c>gen_tcp:listen/2</c></seealso>,
+ <seealso marker="gen_udp#open/1"><c>gen_udp:open/1,2</c></seealso>, or
+ <seealso marker="gen_sctp#open/0"><c>gen_sctp:open/0,1,2</c></seealso>.</p>
+ <p>This option uses the Linux-specific syscall
+ <c>setns()</c>, such as in Linux kernel 3.0 or later,
+ and therefore only exists when the runtime system
+ is compiled for such an operating system.</p>
+ <p>The virtual machine also needs elevated privileges, either
+ running as superuser or (for Linux) having capability
+ <c>CAP_SYS_ADMIN</c> according to the documentation for
+ <c>setns(2)</c>.
+ However, during testing also <c>CAP_SYS_PTRACE</c>
+ and <c>CAP_DAC_READ_SEARCH</c> have proven to be necessary.</p>
+ <p><em>Example:</em></p>
+ <code>
+setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp</code>
+ <p>Notice that the filesystem containing the virtual machine
+ executable (<c>beam.smp</c> in the example) must be local,
+ mounted without flag <c>nosetuid</c>,
+ support extended attributes, and
+ the kernel must support file capabilities.
+ All this runs out of the box on at least Ubuntu 12.04 LTS,
+ except that SCTP sockets appear to not support
+ network namespaces.</p>
+ <p><c>Namespace</c> is a filename and is encoded
+ and decoded as discussed in module
+ <seealso marker="file">file</seealso>, with the
+ following exceptions:</p>
+ <list type="bulleted">
+ <item><p>Emulator flag <c>+fnu</c> is ignored.</p></item>
+ <item><p><seealso marker="#getopts/2"><c>getopts/2</c></seealso>
+ for this option returns a binary for the filename if the stored
+ filename cannot be decoded. This is only to occur if you set the
+ option using a binary that cannot be decoded with the emulator's
+ filename encoding:
+ <seealso marker="file#native_name_encoding/0"><c>file:native_name_encoding/0</c></seealso>.</p></item>
+ </list>
+ </item>
+ <tag><c>list</c></tag>
<item>
- <p>Received <c>Packet</c> is delivered as a list.</p>
- </item>
-
- <tag><c>binary</c></tag>
+ <p>Received <c>Packet</c> is delivered as a list.</p>
+ </item>
+ <tag><c>binary</c></tag>
<item>
- <p>Received <c>Packet</c> is delivered as a binary.</p>
- </item>
-
+ <p>Received <c>Packet</c> is delivered as a binary.</p>
+ </item>
<tag><c>{nodelay, Boolean}</c>(TCP/IP sockets)</tag>
<item>
- <p>If <c>Boolean == true</c>, the <c>TCP_NODELAY</c> option
- is turned on for the socket, which means that even small
- amounts of data will be sent immediately.</p>
+ <p>If <c>Boolean == true</c>, option <c>TCP_NODELAY</c>
+ is turned on for the socket, which means that also small
+ amounts of data are sent immediately.</p>
</item>
<tag><c>{packet, PacketType}</c>(TCP/IP sockets)</tag>
<item>
<p>Defines the type of packets to use for a socket.
- The following values are valid:</p>
+ Possible values:</p>
<taglist>
<tag><c>raw | 0</c></tag>
<item>
@@ -917,104 +917,99 @@ setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp
<item>
<p>Packets consist of a header specifying the number of
bytes in the packet, followed by that number of bytes.
- The length of header can be one, two, or four bytes;
+ The header length can be one, two, or four bytes, and
containing an unsigned integer in big-endian byte order.
- Each send operation will generate the header, and the header
- will be stripped off on each receive operation.</p>
- <p>In current implementation the 4-byte header is limited to 2Gb.</p>
+ Each send operation generates the header, and the header
+ is stripped off on each receive operation.</p>
+ <p>The 4-byte header is limited to 2Gb.</p>
</item>
<tag><c>asn1 | cdr | sunrm | fcgi | tpkt | line</c></tag>
<item>
<p>These packet types only have effect on receiving.
When sending a packet, it is the responsibility of
the application to supply a correct header. On
- receiving, however, there will be one message sent to
+ receiving, however, one message is sent to
the controlling process for each complete packet
received, and, similarly, each call to
<c>gen_tcp:recv/2,3</c> returns one complete packet.
The header is <em>not</em> stripped off.</p>
- <p>The meanings of the packet types are as follows:
- <br></br>
-<c>asn1</c> - ASN.1 BER,
- <br></br>
-<c>sunrm</c> - Sun's RPC encoding,
- <br></br>
-<c>cdr</c> - CORBA (GIOP 1.1),
- <br></br>
-<c>fcgi</c> - Fast CGI,
- <br></br>
-<c>tpkt</c> - TPKT format [RFC1006],
- <br></br>
-<c>line</c> - Line mode, a packet is a line
- terminated with newline, lines longer than
- the receive buffer are truncated.</p>
- </item>
+ <p>The meanings of the packet types are as follows:</p>
+ <list type="bulleted">
+ <item><c>asn1</c> - ASN.1 BER</item>
+ <item><c>sunrm</c> - Sun's RPC encoding</item>
+ <item><c>cdr</c> - CORBA (GIOP 1.1)</item>
+ <item><c>fcgi</c> - Fast CGI</item>
+ <item><c>tpkt</c> - TPKT format [RFC1006]</item>
+ <item><c>line</c> - Line mode, a packet is a line-terminated
+ with newline, lines longer than the receive buffer are
+ truncated</item>
+ </list>
+ </item>
<tag><c>http | http_bin</c></tag>
<item>
<p>The Hypertext Transfer Protocol. The packets
are returned with the format according to <c>HttpPacket</c>
- described in <seealso marker="erts:erlang#decode_packet/3">
- erlang:decode_packet/3</seealso>. A socket in passive
- mode will return <c>{ok, HttpPacket}</c> from <c>gen_tcp:recv</c>
- while an active socket will send messages like <c>{http,
- Socket, HttpPacket}</c>.</p>
+ described in
+ <seealso marker="erts:erlang#decode_packet/3">
+ <c>erlang:decode_packet/3</c></seealso> in <c>ERTS</c>.
+ A socket in passive
+ mode returns <c>{ok, HttpPacket}</c> from <c>gen_tcp:recv</c>
+ while an active socket sends messages like
+ <c>{http, Socket, HttpPacket}</c>.</p>
</item>
<tag><c>httph | httph_bin</c></tag>
<item>
- <p>These two types are often not needed as the socket will
- automatically switch from <c>http</c>/<c>http_bin</c> to
+ <p>These two types are often not needed, as the socket
+ automatically switches from <c>http</c>/<c>http_bin</c> to
<c>httph</c>/<c>httph_bin</c> internally after the first line
- has been read. There might be occasions however when they are
+ is read. However, there can be occasions when they are
useful, such as parsing trailers from chunked encoding.</p>
</item>
</taglist>
</item>
<tag><c>{packet_size, Integer}</c>(TCP/IP sockets)</tag>
<item>
- <p>Sets the max allowed length of the packet body. If
+ <p>Sets the maximum allowed length of the packet body. If
the packet header indicates that the length of the packet
- is longer than the max allowed length, the packet is
- considered invalid. The same happens if the packet header
- is too big for the socket receive buffer.</p>
- <p>For line oriented protocols (<c>line</c>,<c>http*</c>),
- option <c>packet_size</c> also guarantees that lines up to the
- indicated length are accepted and not considered invalid due
- to internal buffer limitations.</p>
+ is longer than the maximum allowed length, the packet is
+ considered invalid. The same occurs if the packet header
+ is too large for the socket receive buffer.</p>
+ <p>For line-oriented protocols (<c>line</c>, <c>http*</c>),
+ option <c>packet_size</c> also guarantees that lines up to the
+ indicated length are accepted and not considered invalid
+ because of internal buffer limitations.</p>
</item>
<tag><c>{line_delimiter, Char}</c>(TCP/IP sockets)</tag>
<item>
- <p>Sets the line delimiting character for line oriented protocols
- (<c>line</c>). Default value is <c>$\n</c>.</p>
+ <p>Sets the line delimiting character for line-oriented protocols
+ (<c>line</c>). Defaults to <c>$\n</c>.</p>
+ </item>
+ <tag><c>{priority, Priority}</c></tag>
+ <item>
+ <p>Sets the protocol-defined priority for all packets to be sent
+ on this socket.</p>
+ </item>
+ <tag><c>{raw, Protocol, OptionNum, ValueBin}</c></tag>
+ <item>
+ <p>See below.</p>
</item>
-
- <tag><c>{priority, Priority}</c></tag>
- <item> <p>Set the protocol-defined priority for all packets to be sent
- on this socket.</p>
- </item>
-
- <tag><c>{raw, Protocol, OptionNum, ValueBin}</c></tag>
- <item> <p>See below.</p>
- </item>
-
<tag><c>{read_packets, Integer}</c>(UDP sockets)</tag>
<item>
- <p>Sets the max number of UDP packets to read without
+ <p>Sets the maximum number of UDP packets to read without
intervention from the socket when data is available.
When this many packets have been read and delivered
to the destination process, new packets are not read
until a new notification of available data has arrived.
- The default is 5, and if this parameter is set too
- high the system can become unresponsive due to
+ Defaults to <c>5</c>. If this parameter is set too
+ high, the system can become unresponsive because of
UDP packet flooding.</p>
</item>
<tag><c>{recbuf, Size}</c></tag>
<item>
<p>The minimum size of the receive buffer to use for
the socket. You are encouraged to use
- <seealso marker="inet#getopts/2"><c>inet:getopts/2</c></seealso>,
- to retrieve the actual size set by your operating system.
-
- </p>
+ <seealso marker="#getopts/2"><c>getopts/2</c></seealso>
+ to retrieve the size set by your operating system.</p>
</item>
<tag><c>{reuseaddr, Boolean}</c></tag>
<item>
@@ -1023,118 +1018,160 @@ setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp
</item>
<tag><c>{send_timeout, Integer}</c></tag>
<item>
- <p>Only allowed for connection oriented sockets.</p>
+ <p>Only allowed for connection-oriented sockets.</p>
<p>Specifies a longest time to wait for a send operation to
be accepted by the underlying TCP stack. When the limit is
- exceeded, the send operation will return
- <c>{error,timeout}</c>. How much of a packet that actually
- got sent is unknown, why the socket should be closed
- whenever a timeout has occurred (see <c>send_timeout_close</c>).
- Default is <c>infinity</c>.</p>
+ exceeded, the send operation returns
+ <c>{error,timeout}</c>. How much of a packet that
+ got sent is unknown; the socket is therefore to be closed
+ whenever a time-out has occurred (see <c>send_timeout_close</c>
+ below). Defaults to <c>infinity</c>.</p>
</item>
<tag><c>{send_timeout_close, Boolean}</c></tag>
<item>
- <p>Only allowed for connection oriented sockets.</p>
+ <p>Only allowed for connection-oriented sockets.</p>
<p>Used together with <c>send_timeout</c> to specify whether
- the socket will be automatically closed when the send operation
+ the socket is to be automatically closed when the send operation
returns <c>{error,timeout}</c>. The recommended setting is
- <c>true</c> which will automatically close the socket.
- Default is <c>false</c> due to backward compatibility.</p>
- <marker id="option-sndbuf"></marker>
+ <c>true</c>, which automatically closes the socket.
+ Defaults to <c>false</c> because of backward compatibility.</p>
+ <marker id="option-sndbuf"></marker>
</item>
-
<tag><c>{show_econnreset, Boolean}</c>(TCP/IP sockets)</tag>
<item>
- <p>When this option is set to <c>false</c>, as it is by
- default, an RST that is received from the TCP peer is treated
- as a normal close (as though a FIN was sent). A caller
- to <seealso marker="gen_tcp#recv/2">gen_tcp:recv/2</seealso>
- will get <c>{error, closed}</c>. In active
- mode the controlling process will receive a
+ <p>When this option is set to <c>false</c>, which is
+ default, an RST received from the TCP peer is treated
+ as a normal close (as though an FIN was sent). A caller to
+ <seealso marker="gen_tcp#recv/2"><c>gen_tcp:recv/2</c></seealso>
+ gets <c>{error, closed}</c>. In active
+ mode, the controlling process receives a
<c>{tcp_close, Socket}</c> message, indicating that the
peer has closed the connection.</p>
- <p>Setting this option to <c>true</c> will allow you to
+ <p>Setting this option to <c>true</c> allows you to
distinguish between a connection that was closed normally,
- and one which was aborted (intentionally or unintentionally)
+ and one that was aborted (intentionally or unintentionally)
by the TCP peer. A call to
- <seealso marker="gen_tcp#recv/2">gen_tcp:recv/2</seealso>
- will return <c>{error, econnreset}</c>. In
- active mode, the controlling process will receive a
+ <seealso marker="gen_tcp#recv/2"><c>gen_tcp:recv/2</c></seealso>
+ returns <c>{error, econnreset}</c>. In
+ active mode, the controlling process receives a
<c>{tcp_error, Socket, econnreset}</c> message
before the usual <c>{tcp_closed, Socket}</c>, as is
the case for any other socket error. Calls to
- <seealso marker="gen_tcp#send/2">gen_tcp:send/2</seealso>
- will also return <c>{error, econnreset}</c> when it
+ <seealso marker="gen_tcp#send/2"><c>gen_tcp:send/2</c></seealso>
+ also returns <c>{error, econnreset}</c> when it
is detected that a TCP peer has sent an RST.</p>
<p>A connected socket returned from
- <seealso marker="gen_tcp#accept/1">gen_tcp:accept/1</seealso>
- will inherit the <c>show_econnreset</c> setting from the
+ <seealso marker="gen_tcp#accept/1"><c>gen_tcp:accept/1</c></seealso>
+ inherits the <c>show_econnreset</c> setting from the
listening socket.</p>
- <marker id="option-show_econnreset"></marker>
+ <marker id="option-show_econnreset"></marker>
</item>
-
<tag><c>{sndbuf, Size}</c></tag>
<item>
<p>The minimum size of the send buffer to use for the socket.
- You are encouraged to use
- <seealso marker="inet#getopts/2"><c>inet:getopts/2</c></seealso>,
- to retrieve the actual size set by your operating system.
- </p>
+ You are encouraged to use
+ <seealso marker="#getopts/2"><c>getopts/2</c></seealso>,
+ to retrieve the size set by your operating system.</p>
</item>
<tag><c>{priority, Integer}</c></tag>
<item>
- <p>Sets the SO_PRIORITY socket level option on platforms where
- this is implemented. The behaviour and allowed range varies on
- different systems. The option is ignored on platforms where the
- option is not implemented. Use with caution.</p>
+ <p>Sets the <c>SO_PRIORITY</c> socket level option on platforms
+ where this is implemented. The behavior and allowed range varies
+ between different systems.
+ The option is ignored on platforms where it
+ is not implemented. Use with caution.</p>
</item>
<tag><c>{tos, Integer}</c></tag>
<item>
- <p>Sets IP_TOS IP level options on platforms where this is
- implemented. The behaviour and allowed range varies on different
- systems. The option is ignored on platforms where the option is
- not implemented. Use with caution.</p>
+ <p>Sets <c>IP_TOS IP</c> level options on platforms where this is
+ implemented. The behavior and allowed range varies between
+ different systems.
+ The option is ignored on platforms where it is not
+ implemented. Use with caution.</p>
</item>
</taglist>
-
- <p>In addition to the options mentioned above, <em>raw</em>
+ <p>In addition to these options, <em>raw</em>
option specifications can be used. The raw options are
- specified as a tuple of arity four, beginning with the tag
- <c>raw</c>, followed by the protocol level, the option number
- and the actual option value specified as a binary. This
- corresponds to the second, third and fourth argument to the
+ specified as a tuple of arity four, beginning with tag
+ <c>raw</c>, followed by the protocol level, the option number,
+ and the option value specified as a binary. This
+ corresponds to the second, third, and fourth arguments to the
<c>setsockopt</c> call in the C socket API. The option value
- needs to be coded in the native endianess of the platform and,
- if a structure is required, needs to follow the struct
+ must be coded in the native endianess of the platform and,
+ if a structure is required, must follow the structure
alignment conventions on the specific platform.</p>
- <p>Using raw socket options require detailed knowledge about
+ <p>Using raw socket options requires detailed knowledge about
the current operating system and TCP stack.</p>
- <p>As an example of the usage of raw options, consider a Linux
- system where you want to set the <c>TCP_LINGER2</c> option on
- the <c>IPPROTO_TCP</c> protocol level in the stack. You know
+ <p><em>Example:</em></p>
+ <p>This example concerns the use of raw options. Consider a Linux
+ system where you want to set option <c>TCP_LINGER2</c> on
+ protocol level <c>IPPROTO_TCP</c> in the stack. You know
that on this particular system it defaults to 60 (seconds),
- but you would like to lower it to 30 for a particular
- socket. The <c>TCP_LINGER2</c> option is not explicitly
- supported by inet, but you know that the protocol level
- translates to the number 6, the option number to the number 8
- and the value is to be given as a 32 bit integer. You can use
- this line of code to set the option for the socket named
+ but you want to lower it to 30 for a particular
+ socket. Option <c>TCP_LINGER2</c> is not explicitly
+ supported by <c>inet</c>, but you know that the protocol level
+ translates to number 6, the option number to number 8,
+ and the value is to be specified as a 32-bit integer. You can use
+ this code line to set the option for the socket named
<c>Sock</c>:</p>
<code type="none"><![CDATA[
- inet:setopts(Sock,[{raw,6,8,<<30:32/native>>}]),]]></code>
+inet:setopts(Sock,[{raw,6,8,<<30:32/native>>}]),]]></code>
<p>As many options are silently discarded by the stack if they
- are given out of range, it could be a good idea to check that
- a raw option really got accepted. This code places the value
- in the variable TcpLinger2:</p>
+ are specified out of range; it can be a good idea to check that
+ a raw option is accepted. The following code places the value
+ in variable <c>TcpLinger2:</c></p>
<code type="none"><![CDATA[
- {ok,[{raw,6,8,<<TcpLinger2:32/native>>}]}=inet:getopts(Sock,[{raw,6,8,4}]),]]></code>
- <p>Code such as the examples above is inherently non portable,
- even different versions of the same OS on the same platform
- may respond differently to this kind of option
+{ok,[{raw,6,8,<<TcpLinger2:32/native>>}]}=inet:getopts(Sock,[{raw,6,8,4}]),]]></code>
+ <p>Code such as these examples is inherently non-portable,
+ even different versions of the same OS on the same platform
+ can respond differently to this kind of option
manipulation. Use with care.</p>
- <p>Note that the default options for TCP/IP sockets can be
- changed with the Kernel configuration parameters mentioned in
- the beginning of this document.</p>
+ <p>Notice that the default options for TCP/IP sockets can be
+ changed with the <c>Kernel</c> configuration parameters mentioned in
+ the beginning of this manual page.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sockname" arity="1"/>
+ <fsummary>Return the local address and port number for a socket.
+ </fsummary>
+ <desc>
+ <p>Returns the local address and port number for a socket.</p>
+ <p>Notice that for SCTP sockets this function returns only
+ one of the socket addresses. Function
+ <seealso marker="#socknames/1"><c>socknames/1,2</c></seealso>
+ returns all.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="socknames" arity="1"/>
+ <fsummary>Return all local address/port numbers for a socket.</fsummary>
+ <desc>
+ <p>Equivalent to
+ <seealso marker="#socknames/2"><c>socknames(<anno>Socket</anno>, 0)</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="socknames" arity="2"/>
+ <fsummary>Return all local address/port numbers for a socket.</fsummary>
+ <desc>
+ <p>Returns a list of all local address/port number pairs for a socket
+ for the specified association <c><anno>Assoc</anno></c>.</p>
+ <p>This function can return multiple addresses for multihomed
+ sockets, such as SCTP sockets. For other sockets it
+ returns a one-element list.</p>
+ <p>Notice that parameter <c><anno>Assoc</anno></c> is by the
+ <url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">SCTP Sockets API Extensions</url>
+ defined to be ignored for one-to-one style sockets.
+ For one-to-many style sockets, the special value <c>0</c>
+ is defined to mean that the returned addresses must be
+ without any particular association.
+ How different SCTP implementations interprets this varies somewhat.
+ </p>
</desc>
</func>
</funcs>
@@ -1143,149 +1180,147 @@ setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp
<marker id="error_codes"></marker>
<title>POSIX Error Codes</title>
<list type="bulleted">
- <item><c>e2big</c> - argument list too long</item>
- <item><c>eacces</c> - permission denied</item>
- <item><c>eaddrinuse</c> - address already in use</item>
- <item><c>eaddrnotavail</c> - cannot assign requested address</item>
- <item><c>eadv</c> - advertise error</item>
- <item><c>eafnosupport</c> - address family not supported by
- protocol family</item>
- <item><c>eagain</c> - resource temporarily unavailable</item>
+ <item><c>e2big</c> - Too long argument list</item>
+ <item><c>eacces</c> - Permission denied</item>
+ <item><c>eaddrinuse</c> - Address already in use</item>
+ <item><c>eaddrnotavail</c> - Cannot assign requested address</item>
+ <item><c>eadv</c> - Advertise error</item>
+ <item><c>eafnosupport</c> - Address family not supported by
+ protocol family</item>
+ <item><c>eagain</c> - Resource temporarily unavailable</item>
<item><c>ealign</c> - EALIGN</item>
- <item><c>ealready</c> - operation already in progress</item>
- <item><c>ebade</c> - bad exchange descriptor</item>
- <item><c>ebadf</c> - bad file number</item>
- <item><c>ebadfd</c> - file descriptor in bad state</item>
- <item><c>ebadmsg</c> - not a data message</item>
- <item><c>ebadr</c> - bad request descriptor</item>
- <item><c>ebadrpc</c> - RPC structure is bad</item>
- <item><c>ebadrqc</c> - bad request code</item>
- <item><c>ebadslt</c> - invalid slot</item>
- <item><c>ebfont</c> - bad font file format</item>
- <item><c>ebusy</c> - file busy</item>
- <item><c>echild</c> - no children</item>
- <item><c>echrng</c> - channel number out of range</item>
- <item><c>ecomm</c> - communication error on send</item>
- <item><c>econnaborted</c> - software caused connection abort</item>
- <item><c>econnrefused</c> - connection refused</item>
- <item><c>econnreset</c> - connection reset by peer</item>
- <item><c>edeadlk</c> - resource deadlock avoided</item>
- <item><c>edeadlock</c> - resource deadlock avoided</item>
- <item><c>edestaddrreq</c> - destination address required</item>
- <item><c>edirty</c> - mounting a dirty fs w/o force</item>
- <item><c>edom</c> - math argument out of range</item>
- <item><c>edotdot</c> - cross mount point</item>
- <item><c>edquot</c> - disk quota exceeded</item>
- <item><c>eduppkg</c> - duplicate package name</item>
- <item><c>eexist</c> - file already exists</item>
- <item><c>efault</c> - bad address in system call argument</item>
- <item><c>efbig</c> - file too large</item>
- <item><c>ehostdown</c> - host is down</item>
- <item><c>ehostunreach</c> - host is unreachable</item>
- <item><c>eidrm</c> - identifier removed</item>
- <item><c>einit</c> - initialization error</item>
- <item><c>einprogress</c> - operation now in progress</item>
- <item><c>eintr</c> - interrupted system call</item>
- <item><c>einval</c> - invalid argument</item>
+ <item><c>ealready</c> - Operation already in progress</item>
+ <item><c>ebade</c> - Bad exchange descriptor</item>
+ <item><c>ebadf</c> - Bad file number</item>
+ <item><c>ebadfd</c> - File descriptor in bad state</item>
+ <item><c>ebadmsg</c> - Not a data message</item>
+ <item><c>ebadr</c> - Bad request descriptor</item>
+ <item><c>ebadrpc</c> - Bad RPC structure</item>
+ <item><c>ebadrqc</c> - Bad request code</item>
+ <item><c>ebadslt</c> - Invalid slot</item>
+ <item><c>ebfont</c> - Bad font file format</item>
+ <item><c>ebusy</c> - File busy</item>
+ <item><c>echild</c> - No children</item>
+ <item><c>echrng</c> - Channel number out of range</item>
+ <item><c>ecomm</c> - Communication error on send</item>
+ <item><c>econnaborted</c> - Software caused connection abort</item>
+ <item><c>econnrefused</c> - Connection refused</item>
+ <item><c>econnreset</c> - Connection reset by peer</item>
+ <item><c>edeadlk</c> - Resource deadlock avoided</item>
+ <item><c>edeadlock</c> - Resource deadlock avoided</item>
+ <item><c>edestaddrreq</c> - Destination address required</item>
+ <item><c>edirty</c> - Mounting a dirty fs without force</item>
+ <item><c>edom</c> - Math argument out of range</item>
+ <item><c>edotdot</c> - Cross mount point</item>
+ <item><c>edquot</c> - Disk quota exceeded</item>
+ <item><c>eduppkg</c> - Duplicate package name</item>
+ <item><c>eexist</c> - File already exists</item>
+ <item><c>efault</c> - Bad address in system call argument</item>
+ <item><c>efbig</c> - File too large</item>
+ <item><c>ehostdown</c> - Host is down</item>
+ <item><c>ehostunreach</c> - Host is unreachable</item>
+ <item><c>eidrm</c> - Identifier removed</item>
+ <item><c>einit</c> - Initialization error</item>
+ <item><c>einprogress</c> - Operation now in progress</item>
+ <item><c>eintr</c> - Interrupted system call</item>
+ <item><c>einval</c> - Invalid argument</item>
<item><c>eio</c> - I/O error</item>
- <item><c>eisconn</c> - socket is already connected</item>
- <item><c>eisdir</c> - illegal operation on a directory</item>
- <item><c>eisnam</c> - is a named file</item>
- <item><c>el2hlt</c> - level 2 halted</item>
- <item><c>el2nsync</c> - level 2 not synchronized</item>
- <item><c>el3hlt</c> - level 3 halted</item>
- <item><c>el3rst</c> - level 3 reset</item>
+ <item><c>eisconn</c> - Socket is already connected</item>
+ <item><c>eisdir</c> - Illegal operation on a directory</item>
+ <item><c>eisnam</c> - Is a named file</item>
+ <item><c>el2hlt</c> - Level 2 halted</item>
+ <item><c>el2nsync</c> - Level 2 not synchronized</item>
+ <item><c>el3hlt</c> - Level 3 halted</item>
+ <item><c>el3rst</c> - Level 3 reset</item>
<item><c>elbin</c> - ELBIN</item>
- <item><c>elibacc</c> - cannot access a needed shared library</item>
- <item><c>elibbad</c> - accessing a corrupted shared library</item>
- <item><c>elibexec</c> - cannot exec a shared library directly</item>
- <item><c>elibmax</c> - attempting to link in more shared
- libraries than system limit</item>
- <item><c>elibscn</c> - .lib section in a.out corrupted</item>
- <item><c>elnrng</c> - link number out of range</item>
- <item><c>eloop</c> - too many levels of symbolic links</item>
- <item><c>emfile</c> - too many open files</item>
- <item><c>emlink</c> - too many links</item>
- <item><c>emsgsize</c> - message too long</item>
- <item><c>emultihop</c> - multihop attempted</item>
- <item><c>enametoolong</c> - file name too long</item>
- <item><c>enavail</c> - not available</item>
+ <item><c>elibacc</c> - Cannot access a needed shared library</item>
+ <item><c>elibbad</c> - Accessing a corrupted shared library</item>
+ <item><c>elibexec</c> - Cannot exec a shared library directly</item>
+ <item><c>elibmax</c> - Attempting to link in more shared
+ libraries than system limit</item>
+ <item><c>elibscn</c> - <c>.lib</c> section in <c>a.out</c>
+ corrupted</item>
+ <item><c>elnrng</c> - Link number out of range</item>
+ <item><c>eloop</c> - Too many levels of symbolic links</item>
+ <item><c>emfile</c> - Too many open files</item>
+ <item><c>emlink</c> - Too many links</item>
+ <item><c>emsgsize</c> - Message too long</item>
+ <item><c>emultihop</c> - Multihop attempted</item>
+ <item><c>enametoolong</c> - Filename too long</item>
+ <item><c>enavail</c> - Unavailable</item>
<item><c>enet</c> - ENET</item>
- <item><c>enetdown</c> - network is down</item>
- <item><c>enetreset</c> - network dropped connection on reset</item>
- <item><c>enetunreach</c> - network is unreachable</item>
- <item><c>enfile</c> - file table overflow</item>
- <item><c>enoano</c> - anode table overflow</item>
- <item><c>enobufs</c> - no buffer space available</item>
- <item><c>enocsi</c> - no CSI structure available</item>
- <item><c>enodata</c> - no data available</item>
- <item><c>enodev</c> - no such device</item>
- <item><c>enoent</c> - no such file or directory</item>
- <item><c>enoexec</c> - exec format error</item>
- <item><c>enolck</c> - no locks available</item>
- <item><c>enolink</c> - link has be severed</item>
- <item><c>enomem</c> - not enough memory</item>
- <item><c>enomsg</c> - no message of desired type</item>
- <item><c>enonet</c> - machine is not on the network</item>
- <item><c>enopkg</c> - package not installed</item>
- <item><c>enoprotoopt</c> - bad protocol option</item>
- <item><c>enospc</c> - no space left on device</item>
- <item><c>enosr</c> - out of stream resources or not a stream
- device</item>
- <item><c>enosym</c> - unresolved symbol name</item>
- <item><c>enosys</c> - function not implemented</item>
- <item><c>enotblk</c> - block device required</item>
- <item><c>enotconn</c> - socket is not connected</item>
- <item><c>enotdir</c> - not a directory</item>
- <item><c>enotempty</c> - directory not empty</item>
- <item><c>enotnam</c> - not a named file</item>
- <item><c>enotsock</c> - socket operation on non-socket</item>
- <item><c>enotsup</c> - operation not supported</item>
- <item><c>enotty</c> - inappropriate device for ioctl</item>
- <item><c>enotuniq</c> - name not unique on network</item>
- <item><c>enxio</c> - no such device or address</item>
- <item><c>eopnotsupp</c> - operation not supported on socket</item>
- <item><c>eperm</c> - not owner</item>
- <item><c>epfnosupport</c> - protocol family not supported</item>
- <item><c>epipe</c> - broken pipe</item>
- <item><c>eproclim</c> - too many processes</item>
- <item><c>eprocunavail</c> - bad procedure for program</item>
- <item><c>eprogmismatch</c> - program version wrong</item>
- <item><c>eprogunavail</c> - RPC program not available</item>
- <item><c>eproto</c> - protocol error</item>
- <item><c>eprotonosupport</c> - protocol not supported</item>
- <item><c>eprototype</c> - protocol wrong type for socket</item>
- <item><c>erange</c> - math result unrepresentable</item>
+ <item><c>enetdown</c> - Network is down</item>
+ <item><c>enetreset</c> - Network dropped connection on reset</item>
+ <item><c>enetunreach</c> - Network is unreachable</item>
+ <item><c>enfile</c> - File table overflow</item>
+ <item><c>enoano</c> - Anode table overflow</item>
+ <item><c>enobufs</c> - No buffer space available</item>
+ <item><c>enocsi</c> - No CSI structure available</item>
+ <item><c>enodata</c> - No data available</item>
+ <item><c>enodev</c> - No such device</item>
+ <item><c>enoent</c> - No such file or directory</item>
+ <item><c>enoexec</c> - Exec format error</item>
+ <item><c>enolck</c> - No locks available</item>
+ <item><c>enolink</c> - Link has been severed</item>
+ <item><c>enomem</c> - Not enough memory</item>
+ <item><c>enomsg</c> - No message of desired type</item>
+ <item><c>enonet</c> - Machine is not on the network</item>
+ <item><c>enopkg</c> - Package not installed</item>
+ <item><c>enoprotoopt</c> - Bad protocol option</item>
+ <item><c>enospc</c> - No space left on device</item>
+ <item><c>enosr</c> - Out of stream resources or not a stream device</item>
+ <item><c>enosym</c> - Unresolved symbol name</item>
+ <item><c>enosys</c> - Function not implemented</item>
+ <item><c>enotblk</c> - Block device required</item>
+ <item><c>enotconn</c> - Socket is not connected</item>
+ <item><c>enotdir</c> - Not a directory</item>
+ <item><c>enotempty</c> - Directory not empty</item>
+ <item><c>enotnam</c> - Not a named file</item>
+ <item><c>enotsock</c> - Socket operation on non-socket</item>
+ <item><c>enotsup</c> - Operation not supported</item>
+ <item><c>enotty</c> - Inappropriate device for <c>ioctl</c></item>
+ <item><c>enotuniq</c> - Name not unique on network</item>
+ <item><c>enxio</c> - No such device or address</item>
+ <item><c>eopnotsupp</c> - Operation not supported on socket</item>
+ <item><c>eperm</c> - Not owner</item>
+ <item><c>epfnosupport</c> - Protocol family not supported</item>
+ <item><c>epipe</c> - Broken pipe</item>
+ <item><c>eproclim</c> - Too many processes</item>
+ <item><c>eprocunavail</c> - Bad procedure for program</item>
+ <item><c>eprogmismatch</c> - Wrong program version</item>
+ <item><c>eprogunavail</c> - RPC program unavailable</item>
+ <item><c>eproto</c> - Protocol error</item>
+ <item><c>eprotonosupport</c> - Protocol not supported</item>
+ <item><c>eprototype</c> - Wrong protocol type for socket</item>
+ <item><c>erange</c> - Math result unrepresentable</item>
<item><c>erefused</c> - EREFUSED</item>
- <item><c>eremchg</c> - remote address changed</item>
- <item><c>eremdev</c> - remote device</item>
- <item><c>eremote</c> - pathname hit remote file system</item>
- <item><c>eremoteio</c> - remote i/o error</item>
+ <item><c>eremchg</c> - Remote address changed</item>
+ <item><c>eremdev</c> - Remote device</item>
+ <item><c>eremote</c> - Pathname hit remote filesystem</item>
+ <item><c>eremoteio</c> - Remote I/O error</item>
<item><c>eremoterelease</c> - EREMOTERELEASE</item>
- <item><c>erofs</c> - read-only file system</item>
- <item><c>erpcmismatch</c> - RPC version is wrong</item>
- <item><c>erremote</c> - object is remote</item>
- <item><c>eshutdown</c> - cannot send after socket shutdown</item>
- <item><c>esocktnosupport</c> - socket type not supported</item>
- <item><c>espipe</c> - invalid seek</item>
- <item><c>esrch</c> - no such process</item>
- <item><c>esrmnt</c> - srmount error</item>
- <item><c>estale</c> - stale remote file handle</item>
+ <item><c>erofs</c> - Read-only filesystem</item>
+ <item><c>erpcmismatch</c> - Wrong RPC version</item>
+ <item><c>erremote</c> - Object is remote</item>
+ <item><c>eshutdown</c> - Cannot send after socket shutdown</item>
+ <item><c>esocktnosupport</c> - Socket type not supported</item>
+ <item><c>espipe</c> - Invalid seek</item>
+ <item><c>esrch</c> - No such process</item>
+ <item><c>esrmnt</c> - Srmount error</item>
+ <item><c>estale</c> - Stale remote file handle</item>
<item><c>esuccess</c> - Error 0</item>
- <item><c>etime</c> - timer expired</item>
- <item><c>etimedout</c> - connection timed out</item>
- <item><c>etoomanyrefs</c> - too many references</item>
- <item><c>etxtbsy</c> - text file or pseudo-device busy</item>
- <item><c>euclean</c> - structure needs cleaning</item>
- <item><c>eunatch</c> - protocol driver not attached</item>
- <item><c>eusers</c> - too many users</item>
- <item><c>eversion</c> - version mismatch</item>
- <item><c>ewouldblock</c> - operation would block</item>
- <item><c>exdev</c> - cross-domain link</item>
- <item><c>exfull</c> - message tables full</item>
- <item><c>nxdomain</c> - the hostname or domain name could not be
- found</item>
+ <item><c>etime</c> - Timer expired</item>
+ <item><c>etimedout</c> - Connection timed out</item>
+ <item><c>etoomanyrefs</c> - Too many references</item>
+ <item><c>etxtbsy</c> - Text file or pseudo-device busy</item>
+ <item><c>euclean</c> - Structure needs cleaning</item>
+ <item><c>eunatch</c> - Protocol driver not attached</item>
+ <item><c>eusers</c> - Too many users</item>
+ <item><c>eversion</c> - Version mismatch</item>
+ <item><c>ewouldblock</c> - Operation would block</item>
+ <item><c>exdev</c> - Cross-domain link</item>
+ <item><c>exfull</c> - Message tables full</item>
+ <item><c>nxdomain</c> - Hostname or domain name cannot be found</item>
</list>
</section>
</erlref>
-
diff --git a/lib/kernel/doc/src/inet_res.xml b/lib/kernel/doc/src/inet_res.xml
index 851a36aba9..4ada4203c0 100644
--- a/lib/kernel/doc/src/inet_res.xml
+++ b/lib/kernel/doc/src/inet_res.xml
@@ -11,7 +11,7 @@
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
@@ -19,7 +19,7 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-
+
</legalnotice>
<title>inet_res</title>
@@ -29,52 +29,50 @@
<rev>A</rev>
</header>
<module>inet_res</module>
- <modulesummary>A Rudimentary DNS Client</modulesummary>
+ <modulesummary>A rudimentary DNS client.</modulesummary>
<description>
- <p>Performs DNS name resolving towards recursive name servers</p>
- <p>See also
- <seealso marker="erts:inet_cfg">
- ERTS User's Guide: Inet configuration
- </seealso> for more
- information on how to configure an Erlang runtime system for IP
- communication and how to enable this DNS client by defining
- <c><![CDATA['dns']]></c> as a lookup method. It then acts
- as a backend for the resolving functions in
- <seealso marker="kernel:inet">inet</seealso>.</p>
+ <p>This module performs DNS name resolving to recursive name servers.</p>
+ <p>See also
+ <seealso marker="erts:inet_cfg">ERTS User's Guide: Inet Configuration</seealso>
+ for more information about how to configure an Erlang runtime system
+ for IP communication, and how to enable this DNS client by defining
+ <c><![CDATA['dns']]></c> as a lookup method.
+ The DNS client then acts as a backend for the resolving functions in
+ <seealso marker="kernel:inet"><c>inet</c></seealso>.</p>
<p>This DNS client can resolve DNS records even if it
is not used for normal name resolving in the node.</p>
- <p>This is not a full-fledged resolver. It is just a
- DNS client that relies on asking trusted recursive nameservers.</p>
+ <p>This is not a full-fledged resolver, only a
+ DNS client that relies on asking trusted recursive name servers.</p>
</description>
<section>
<title>Name Resolving</title>
<p>UDP queries are used unless resolver option
<c>usevc</c> is <c>true</c>, which forces TCP queries.
- If the query is to large for UDP, TCP is used instead.
- For regular DNS queries 512 bytes is the size limit.
- When EDNS is enabled (resolver option
- <c>edns</c> is set to the EDNS version i.e <c>0</c>
+ If the query is too large for UDP, TCP is used instead.
+ For regular DNS queries, 512 bytes is the size limit.</p>
+ <p>When EDNS is enabled (resolver option
+ <c>edns</c> is set to the EDNS version (that is, <c>0</c>
instead of <c>false</c>), resolver option
- <c>udp_payload_size</c> sets the limit. If a nameserver
- replies with the TC bit set (truncation), indicating
+ <c>udp_payload_size</c> sets the limit. If a name server
+ replies with the TC bit set (truncation), indicating that
the answer is incomplete, the query is retried
- to that nameserver using TCP. The resolver option
+ to that name server using TCP. Resolver option
<c>udp_payload_size</c> also sets the advertised
- size for the max allowed reply size, if EDNS is
- enabled, otherwise the nameserver uses the limit
- 512 byte. If the reply is larger it gets truncated,
- forcing a TCP re-query.</p>
- <p>For UDP queries, the resolver options <c>timeout</c>
+ size for the maximum allowed reply size, if EDNS is
+ enabled, otherwise the name server uses the limit
+ 512 bytes. If the reply is larger, it gets truncated,
+ forcing a TCP requery.</p>
+ <p>For UDP queries, resolver options <c>timeout</c>
and <c>retry</c> control retransmission.
- Each nameserver in the <c>nameservers</c> list is
- tried with a timeout of <c>timeout</c> / <c>retry</c>.
- Then all nameservers are tried again doubling the
- timeout, for a total of <c>retry</c> times.</p>
- <p>For queries that not use the <c>search</c> list,
+ Each name server in the <c>nameservers</c> list is
+ tried with a time-out of <c>timeout</c>/<c>retry</c>.
+ Then all name servers are tried again, doubling the
+ time-out, for a total of <c>retry</c> times.</p>
+ <p>For queries not using the <c>search</c> list,
if the query to all <c>nameservers</c> results in
- <c>{error,nxdomain}</c>or an empty answer, the same
- query is tried for the <c>alt_nameservers</c>.</p>
+ <c>{error,nxdomain}</c> or an empty answer, the same
+ query is tried for <c>alt_nameservers</c>.</p>
</section>
<section>
@@ -92,11 +90,13 @@
<name name="res_error"/>
</datatype>
</datatypes>
+
<section>
<title>DNS Types</title>
<p><marker id="dns_types"/>
The following data types concern the DNS client:</p>
</section>
+
<datatypes>
<datatype>
<name name="dns_name"/>
@@ -112,10 +112,10 @@
<name name="dns_msg"/>
<desc>
<p>This is the start of a hiearchy of opaque data structures
- that can be examined with access functions in inet_dns that
- return lists of {Field,Value} tuples. The arity 2 functions
- just return the value for a given field.</p>
-<pre>
+ that can be examined with access functions in <c>inet_dns</c>, which
+ return lists of <c>{Field,Value}</c> tuples. The arity 2 functions
+ only return the value for a specified field.</p>
+ <pre>
dns_msg() = DnsMsg
inet_dns:msg(DnsMsg) ->
[ {header, dns_header()}
@@ -163,63 +163,55 @@ dns_rr() = DnsRr
| {z, integer()}
| {data, dns_data()} ]
inet_dns:rr(DnsRr, Field) -> Value</pre>
-
-<p>There is an info function for the types above:</p>
-
-<pre>
+ <p>There is an information function for the types above:</p>
+ <pre>
inet_dns:record_type(dns_msg()) -> msg;
inet_dns:record_type(dns_header()) -> header;
inet_dns:record_type(dns_query()) -> dns_query;
inet_dns:record_type(dns_rr()) -> rr;
inet_dns:record_type(_) -> undefined.</pre>
-
-<p>So; inet_dns:(inet_dns:record_type(X))(X) will convert
-any of these data structures into a {Field,Value} list.</p>
+ <p>So, <c>inet_dns:(inet_dns:record_type(X))(X)</c> converts
+ any of these data structures into a <c>{Field,Value}</c> list.</p>
</desc>
</datatype>
<datatype>
<name name="dns_data"/>
- <desc><p><c><anno>Regexp</anno></c> is a string with characters encoded in the
- UTF-8 coding standard.</p>
+ <desc>
+ <p><c><anno>Regexp</anno></c> is a string with characters encoded
+ in the UTF-8 coding standard.</p>
</desc>
</datatype>
</datatypes>
-
<funcs>
-
<func>
<name name="getbyname" arity="2"/>
<name name="getbyname" arity="3"/>
- <fsummary>Resolve a DNS record of the given type for the given host
- </fsummary>
+ <fsummary>Resolve a DNS record of the specified type for the specified
+ host.</fsummary>
<desc>
- <p>Resolve a DNS record of the given type for the given host,
- of class <c>in</c>. On success returns a <c>hostent()</c> record with
- <c>dns_data()</c> elements in the address list field.
- </p><p>
- This function uses the resolver option <c>search</c> that
+ <p>Resolves a DNS record of the specified type for the specified host,
+ of class <c>in</c>. Returns, on success, a <c>hostent()</c> record
+ with <c>dns_data()</c> elements in the address list field.</p>
+ <p>This function uses resolver option <c>search</c> that
is a list of domain names. If the name to resolve contains
no dots, it is prepended to each domain name in the
search list, and they are tried in order. If the name
contains dots, it is first tried as an absolute name
- and if that fails the search list is used. If the name
- has a trailing dot it is simply supposed to be
- an absolute name and the search list is not used.
- </p>
+ and if that fails, the search list is used. If the name
+ has a trailing dot, it is supposed to be
+ an absolute name and the search list is not used.</p>
</desc>
</func>
<func>
<name name="gethostbyaddr" arity="1"/>
<name name="gethostbyaddr" arity="2"/>
- <fsummary>Return a hostent record for the host with the given address
- </fsummary>
+ <fsummary>Return a hostent record for the host with the specified
+ address.</fsummary>
<desc>
<p>Backend functions used by
- <seealso marker="kernel:inet#gethostbyaddr/1">
- inet:gethostbyaddr/1
- </seealso>.
+ <seealso marker="kernel:inet#gethostbyaddr/1"><c>inet:gethostbyaddr/1</c></seealso>.
</p>
</desc>
</func>
@@ -228,22 +220,19 @@ any of these data structures into a {Field,Value} list.</p>
<name name="gethostbyname" arity="1"/>
<name name="gethostbyname" arity="2"/>
<name name="gethostbyname" arity="3"/>
- <fsummary>Return a hostent record for the host with the given name
+ <fsummary>Return a hostent record for the host with the specified name.
</fsummary>
<desc>
<p>Backend functions used by
- <seealso marker="kernel:inet#gethostbyname/1">
- inet:gethostbyname/1,2
- </seealso>.
- </p><p>
- This function uses the resolver option <c>search</c> just like
- <seealso marker="#getbyname/2">getbyname/2,3</seealso>.
- </p><p>
- If the resolver option <c>inet6</c> is <c>true</c>,
- an IPv6 address is looked up, and if that fails
- the IPv4 address is looked up and returned on
- IPv6 mapped IPv4 format.
+ <seealso marker="kernel:inet#gethostbyname/1"><c>inet:gethostbyname/1,2</c></seealso>.
</p>
+ <p>This function uses resolver option <c>search</c> just like
+ <seealso marker="#getbyname/2"><c>getbyname/2,3</c></seealso>.
+ </p>
+ <p>If resolver option <c>inet6</c> is <c>true</c>,
+ an IPv6 address is looked up. If that fails,
+ the IPv4 address is looked up and returned on
+ IPv6-mapped IPv4 format.</p>
</desc>
</func>
@@ -251,22 +240,21 @@ any of these data structures into a {Field,Value} list.</p>
<name name="lookup" arity="3"/>
<name name="lookup" arity="4"/>
<name name="lookup" arity="5"/>
- <fsummary>Resolve the DNS data for the record of the given type and class
- for the given name
- </fsummary>
+ <fsummary>Resolve the DNS data for the record of the specified type
+ and class for the specified name.</fsummary>
<desc>
- <p>Resolve the DNS data for the record of the given type and class
- for the given name. On success filters out the answer records
- with the correct <c><anno>Class</anno></c> and <c><anno>Type</anno></c> and returns
- a list of their data fields. So a lookup for type <c>any</c>
- will give an empty answer since the answer records have
+ <p>Resolves the DNS data for the record of the specified type and class
+ for the specified name. On success, filters out the answer records
+ with the correct <c><anno>Class</anno></c> and
+ <c><anno>Type</anno></c>, and returns
+ a list of their data fields. So, a lookup for type <c>any</c>
+ gives an empty answer, as the answer records have
specific types that are not <c>any</c>. An empty answer
- as well as a failed lookup returns an empty list.
- </p><p>
- Calls <seealso marker="#resolve/3">resolve/2..4</seealso>
+ or a failed lookup returns an empty list.</p>
+ <p>Calls
+ <seealso marker="#resolve/3"><c>resolve/*</c></seealso>
with the same arguments and filters the result, so
- <c><anno>Opts</anno></c> is explained there.
- </p>
+ <c><anno>Opts</anno></c> is described for those functions.</p>
</desc>
</func>
@@ -274,90 +262,77 @@ any of these data structures into a {Field,Value} list.</p>
<name name="resolve" arity="3"/>
<name name="resolve" arity="4"/>
<name name="resolve" arity="5"/>
- <fsummary>Resolve a DNS record of the given type and class
- for the given name
- </fsummary>
+ <fsummary>Resolve a DNS record of the specified type and class
+ for the specified name.</fsummary>
<desc>
- <p>Resolve a DNS record of the given type and class for the given name.
- The returned <c>dns_msg()</c> can be examined using
- access functions in <c>inet_db</c> as described
- in <seealso marker="#dns_types">DNS Types</seealso>.
- </p><p>
- If <c><anno>Name</anno></c> is an <c>ip_address()</c>, the domain name
- to query for is generated as the standard reverse
- ".IN-ADDR.ARPA." name for an IPv4 address, or the
- ".IP6.ARPA." name for an IPv6 address.
- In this case you most probably want to use
- <c><anno>Class</anno> = in</c> and <c><anno>Type</anno> = ptr</c> but it
- is not done automatically.
- </p><p>
- <c><anno>Opts</anno></c> override the corresponding resolver options.
- If the option <c>nameservers</c> is given, it is
- also assumed that it is the complete list of nameserves,
- so the resolver option <c>alt_nameserves</c> is ignored.
- Of course, if that option is also given to this function,
- it is used.
- </p><p>
- The <c>verbose</c> option (or rather <c>{verbose,true}</c>),
+ <p>Resolves a DNS record of the specified type and class for the
+ specified name. The returned <c>dns_msg()</c> can be examined using
+ access functions in <c>inet_db</c>, as described in section
+ in <seealso marker="#dns_types">DNS Types</seealso>.</p>
+ <p>If <c><anno>Name</anno></c> is an <c>ip_address()</c>, the domain
+ name to query for is generated as the standard reverse
+ <c>".IN-ADDR.ARPA."</c> name for an IPv4 address, or the
+ <c>".IP6.ARPA."</c> name for an IPv6 address.
+ In this case, you most probably want to use
+ <c><anno>Class</anno> = in</c> and <c><anno>Type</anno> = ptr</c>,
+ but it is not done automatically.</p>
+ <p><c><anno>Opts</anno></c> overrides the corresponding resolver
+ options. If option <c>nameservers</c> is specified, it is
+ assumed that it is the complete list of name serves,
+ so resolver option <c>alt_nameserves</c> is ignored.
+ However, if option <c>alt_nameserves</c> is also specified to this
+ function, it is used.</p>
+ <p>Option <c>verbose</c> (or rather <c>{verbose,true}</c>)
causes diagnostics printout through
- <seealso marker="stdlib:io#format/3">io:format/2</seealso>
- of queries, replies retransmissions, etc, similar
- to from utilities like <c>dig</c>, <c>nslookup</c> et.al.
- </p><p>
- If <c><anno>Opt</anno></c> is an arbitrary atom it is interpreted
+ <seealso marker="stdlib:io#format/3"><c>io:format/2</c></seealso>
+ of queries, replies retransmissions, and so on, similar
+ to from utilities, such as <c>dig</c> and <c>nslookup</c>.</p>
+ <p>If <c><anno>Opt</anno></c> is any atom, it is interpreted
as <c>{<anno>Opt</anno>,true}</c> unless the atom string starts with
- <c>"no"</c> making the interpretation <c>{<anno>Opt</anno>,false}</c>.
- For example: <c>usevc</c> is an alias for <c>{usevc,true}</c>,
- and <c>nousevc</c> an alias for <c>{usevc,false}</c>.
- </p><p>
- The <c>inet6</c> option currently has no effect on this function.
- You probably want to use <c><anno>Type</anno> = a | aaaa</c> instead.
- </p>
+ <c>"no"</c>, making the
+ interpretation <c>{<anno>Opt</anno>,false}</c>.
+ For example, <c>usevc</c> is an alias for <c>{usevc,true}</c>
+ and <c>nousevc</c> is an alias for <c>{usevc,false}</c>.</p>
+ <p>Option <c>inet6</c> has no effect on this function. You
+ probably want to use <c><anno>Type</anno> = a | aaaa</c> instead.</p>
</desc>
</func>
-
</funcs>
-
-
<section>
- <title>Examples</title>
- <p>Access functions example: how
- <seealso marker="#lookup/3">lookup/3</seealso>
- could have been implemented using
- <seealso marker="#resolve/3">resolve/3</seealso>
- from outside the module.
- </p><code type="none">
- example_lookup(Name, Class, Type) ->
- case inet_res:resolve(Name, Class, Type) of
- {ok,Msg} ->
- [inet_dns:rr(RR, data)
- || RR &lt;- inet_dns:msg(Msg, anlist),
- inet_dns:rr(RR, type) =:= Type,
- inet_dns:rr(RR, class) =:= Class];
- {error,_} ->
- []
- end.</code>
+ <title>Example</title>
+ <p>This access functions example shows how
+ <seealso marker="#lookup/3"><c>lookup/3</c></seealso>
+ can be implemented using
+ <seealso marker="#resolve/3"><c>resolve/3</c></seealso>
+ from outside the module:</p>
+ <code type="none">
+example_lookup(Name, Class, Type) ->
+ case inet_res:resolve(Name, Class, Type) of
+ {ok,Msg} ->
+ [inet_dns:rr(RR, data)
+ || RR &lt;- inet_dns:msg(Msg, anlist),
+ inet_dns:rr(RR, type) =:= Type,
+ inet_dns:rr(RR, class) =:= Class];
+ {error,_} ->
+ []
+ end.</code>
</section>
-
-
<section>
<title>Legacy Functions</title>
- <p>These have been deprecated due to the annoying double
- meaning of the nameservers/timeout argument, and
- because they had no decent place for a resolver options list.</p>
+ <p>These are deprecated because the annoying double
+ meaning of the name servers/time-out argument, and
+ because they have no decent place for a resolver options list.</p>
</section>
<funcs>
-
<func>
<name name="nslookup" arity="3"/>
<name name="nslookup" arity="4" clause_i="1"/>
<name name="nslookup" arity="4" clause_i="2"/>
- <fsummary>Resolve a DNS record of the given type and class
- for the given name
- </fsummary>
+ <fsummary>Resolve a DNS record of the specified type and class for the
+ specified name.</fsummary>
<type variable="Name"/>
<type variable="Class"/>
<type variable="Type"/>
@@ -365,23 +340,20 @@ any of these data structures into a {Field,Value} list.</p>
<type variable="Nameservers"/>
<type variable="Reason"/>
<desc>
- <p>Resolve a DNS record of the given type and class for the given name.
- </p>
+ <p>Resolves a DNS record of the specified type and class for the
+ specified name.</p>
</desc>
</func>
<func>
<name name="nnslookup" arity="4"/>
<name name="nnslookup" arity="5"/>
- <fsummary>Resolve a DNS record of the given type and class
- for the given name
- </fsummary>
+ <fsummary>Resolve a DNS record of the specified type and class
+ for the specified name.</fsummary>
<desc>
- <p>Resolve a DNS record of the given type and class for the given name.
- </p>
+ <p>Resolves a DNS record of the specified type and class for the
+ specified name.</p>
</desc>
</func>
-
</funcs>
-
</erlref>
diff --git a/lib/kernel/doc/src/init_stub.xml b/lib/kernel/doc/src/init_stub.xml
index eae2cbea95..df89b174ca 100644
--- a/lib/kernel/doc/src/init_stub.xml
+++ b/lib/kernel/doc/src/init_stub.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -31,13 +31,9 @@
<rev>A</rev>
</header>
<module>init</module>
- <modulesummary>Coordination of System Startup</modulesummary>
- <description><p>
-
- The module init is moved to the runtime system
- application. Please see <seealso
- marker="erts:init">init(3)</seealso> in the
- erts reference manual instead.
-
- </p></description>
+ <modulesummary>Coordination of system startup.</modulesummary>
+ <description>
+ <p>This module is moved to the
+ <seealso marker="erts:init"><c>ERTS</c></seealso> application.</p>
+ </description>
</erlref>
diff --git a/lib/kernel/doc/src/kernel_app.xml b/lib/kernel/doc/src/kernel_app.xml
index 956c57f7c1..9e6fb60bb7 100644
--- a/lib/kernel/doc/src/kernel_app.xml
+++ b/lib/kernel/doc/src/kernel_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>1996</year><year>2015</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,66 +29,59 @@
<rev></rev>
</header>
<app>kernel</app>
- <appsummary>The Kernel Application</appsummary>
+ <appsummary>The Kernel application.</appsummary>
<description>
- <p>The Kernel application is the first application started. It is
+ <p>The <c>Kernel</c> application has all the code necessary to run
+ the Erlang runtime system: file servers, code servers,
+ and so on.</p>
+ <p>The <c>Kernel</c> application is the first application started. It is
mandatory in the sense that the minimal system based on
- Erlang/OTP consists of Kernel and STDLIB. The Kernel application
- contains the following services:</p>
+ Erlang/OTP consists of <c>Kernel</c> and <c>STDLIB</c>. <c>Kernel</c>
+ contains the following functional areas:</p>
<list type="bulleted">
- <item>application controller, see <seealso marker="application">application(3)</seealso></item>
- <item><c>code</c></item>
- <item><c>disk_log</c></item>
- <item><c>dist_ac</c>, distributed application controller</item>
- <item><c>erl_boot_server</c></item>
- <item><c>erl_ddll</c></item>
- <item><c>error_logger</c></item>
- <item><c>error_logger_format_depth</c></item>
- <item><c>file</c></item>
- <item><c>global</c></item>
- <item><c>global_group</c></item>
- <item><c>heart</c></item>
- <item><c>inet</c></item>
- <item><c>net_kernel</c></item>
- <item><c>os</c></item>
- <item><c>pg2</c></item>
- <item><c>rpc</c></item>
- <item><c>seq_trace</c></item>
- <item><c>user</c></item>
+ <item>Start, stop, supervision, configuration, and distribution of applications</item>
+ <item>Code loading</item>
+ <item>Logging</item>
+ <item>Error logging</item>
+ <item>Global name service</item>
+ <item>Supervision of Erlang/OTP</item>
+ <item>Communication with sockets</item>
+ <item>Operating system interface</item>
</list>
</description>
<section>
<title>Error Logger Event Handlers</title>
<p>Two standard error logger event handlers are defined in
- the Kernel application. These are described in
- <seealso marker="error_logger">error_logger(3)</seealso>.</p>
+ the <c>Kernel</c> application. These are described in
+ <seealso marker="error_logger"><c>error_logger(3)</c></seealso>.</p>
</section>
<section>
<title>Configuration</title>
- <p>The following configuration parameters are defined for the Kernel
- application. See <seealso marker="app">app(4)</seealso> for more
- information about configuration parameters.</p>
+ <p>The following configuration parameters are defined for the <c>Kernel</c>
+ application. For more information about configuration parameters,
+ see file <seealso marker="app"><c>app(4)</c></seealso>.</p>
<taglist>
<tag><c>browser_cmd = string() | {M,F,A}</c></tag>
<item>
- <p>When pressing the Help button in a tool such as Debugger or
- TV, the help text (an HTML file <c>File</c>) is by default
- displayed in a Netscape browser which is required to be up and
- running. This parameter can be used to change the command for
+ <p>When pressing the <em>Help</em> button in a tool such as Debugger,
+ the help text (an HTML file <c>File</c>) is by default
+ displayed in a Netscape browser, which is required to be
+ operational. This parameter can be used to change the command for
how to display the help text if another browser than Netscape
- is preferred, or another platform than Unix or Windows is
+ is preferred, or if another platform than Unix or Windows is
used.</p>
<p>If set to a string <c>Command</c>, the command
- <c>"Command File"</c> will be evaluated using <c>os:cmd/1</c>.</p>
- <p>If set to a module-function-args tuple <c>{M,F,A}</c>,
- the call <c>apply(M,F,[File|A])</c> will be evaluated.</p>
+ <c>"Command File"</c> is evaluated using
+ <seealso marker="os#cmd/1"><c>os:cmd/1</c></seealso>.</p>
+ <p>If set to a module-function-args tuple, <c>{M,F,A}</c>,
+ the call <c>apply(M,F,[File|A])</c> is evaluated.</p>
</item>
<tag><c>distributed = [Distrib]</c></tag>
<item>
- <p>Specifies which applications are distributed and on which
- nodes they may execute. In this parameter:</p>
+ <p>Specifies which applications that are distributed and on which
+ nodes they are allowed to execute. In this parameter:</p>
<list type="bulleted">
<item><c>Distrib = {App,Nodes} | {App,Time,Nodes}</c></item>
<item><c>App = atom()</c></item>
@@ -96,25 +89,24 @@
<item><c>Nodes = [node() | {node(),...,node()}]</c></item>
</list>
<p>The parameter is described in
- <seealso marker="application">application(3)</seealso>, function
- <c>load/2</c>.</p>
+ <seealso marker="application#load/2"><c>application:load/2</c></seealso>.</p>
</item>
<tag><c>dist_auto_connect = Value</c></tag>
<item>
- <p>Specifies when nodes will be automatically connected. If
+ <p>Specifies when nodes are automatically connected. If
this parameter is not specified, a node is always
- automatically connected, e.g when a message is to be sent to
+ automatically connected, for example, when a message is to be sent to
that node. <c>Value</c> is one of:</p>
<taglist>
<tag><c>never</c></tag>
- <item>Connections are never automatically established, they
+ <item><p>Connections are never automatically established, they
must be explicitly connected. See
- <seealso marker="net_kernel">net_kernel(3)</seealso>.</item>
+ <seealso marker="net_kernel"><c>net_kernel(3)</c></seealso>.</p></item>
<tag><c>once</c></tag>
- <item>Connections will be established automatically, but only
+ <item><p>Connections are established automatically, but only
once per node. If a node goes down, it must thereafter be
explicitly connected. See
- <seealso marker="net_kernel">net_kernel(3)</seealso>.</item>
+ <seealso marker="net_kernel"><c>net_kernel(3)</c></seealso>.</p></item>
</taglist>
</item>
<tag><c>permissions = [Perm]</c></tag>
@@ -127,25 +119,24 @@
<item><c>Bool = boolean()</c></item>
</list>
<p>Permissions are described in
- <seealso marker="application">application(3)</seealso>, function
- <c>permit/2</c>.</p>
+ <seealso marker="application#permit/2"><c>application:permit/2</c></seealso>.</p>
</item>
<tag><c>error_logger = Value</c></tag>
<item>
<p><c>Value</c> is one of:</p>
<taglist>
<tag><c>tty</c></tag>
- <item>Installs the standard event handler which prints error
- reports to <c>stdio</c>. This is the default option.</item>
+ <item><p>Installs the standard event handler, which prints error
+ reports to <c>stdio</c>. This is the default option.</p></item>
<tag><c>{file, FileName}</c></tag>
- <item>Installs the standard event handler which prints error
- reports to the file <c>FileName</c>, where <c>FileName</c>
- is a string.</item>
+ <item><p>Installs the standard event handler, which prints error
+ reports to file <c>FileName</c>, where <c>FileName</c>
+ is a string.</p></item>
<tag><c>false</c></tag>
<item>
<p>No standard event handler is installed, but
the initial, primitive event handler is kept, printing
- raw event messages to tty.</p>
+ raw event messages to <c>tty</c>.</p>
</item>
<tag><c>silent</c></tag>
<item>
@@ -156,111 +147,110 @@
<tag><c>error_logger_format_depth = Depth</c></tag>
<item>
<marker id="error_logger_format_depth"></marker>
- <p>This parameter can be used to limit the size of the
+ <p>Can be used to limit the size of the
formatted output from the error logger event handlers.</p>
- <note><p>This configuration parameter was introduced in OTP 18.1.
- It is currently experimental. Based on user feedback it
- may be changed or improved in future releases, for example
+ <note><p>This configuration parameter was introduced in OTP 18.1
+ and is experimental. Based on user feedback, it
+ can be changed or improved in future releases, for example,
to gain better control over how to limit the size of the
- formatted output. We have no plans to entirely remove this
- new feature, unless it turns out to be completely
- useless. In OTP 19, the default may be changed to limit the
- formatted output.</p></note>
+ formatted output. We have no plans to remove this
+ new feature entirely, unless it turns out to be
+ useless.</p></note>
- <p><c>Depth</c> is a positive integer that is the maximum
+ <p><c>Depth</c> is a positive integer representing the maximum
depth to which terms are printed by the error logger event
- handlers included in OTP. Specifically, the two event handlers
+ handlers included in OTP. This
+ configuration parameter is used by the two event handlers
defined by the <c>Kernel</c> application and the two event
- handlers in the <c>SASL</c> application will use this
- configuration parameter. (If you have implemented you own
- error handlers, this configuration parameter will have no
- effect on them.)</p>
+ handlers in the <c>SASL</c> application.
+ (If you have implemented your own error handlers, this configuration
+ parameter has no effect on them.)</p>
- <p>The way <c>Depth</c> is used, is that format strings
- string passed to the event handlers will be rewritten.
- The "~p" and "~w" format controls will be replaced with
- "~P" and "~W", respectively, and <c>Depth</c> will be
- used as the depth parameter. See
- <seealso marker="stdlib:io#format/2">io:format/2</seealso>.</p>
+ <p><c>Depth</c> is used as follows: Format strings
+ passed to the event handlers are rewritten.
+ The format controls <c>~p</c> and <c>~w</c> are replaced with
+ <c>~P</c> and <c>~W</c>, respectively, and <c>Depth</c> is
+ used as the depth parameter. For details, see
+ <seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>
+ in <c>STDLIB</c>.</p>
<note><p>A reasonable starting value for <c>Depth</c> is
- <c>30</c>. You should test crashing various processes in your
- application and examine the logs from the crashes, and then
- either increase or decrease the value.</p></note>
+ <c>30</c>. We recommend to test crashing various processes in your
+ application, examine the logs from the crashes, and then
+ increase or decrease the value.</p></note>
</item>
<tag><c>global_groups = [GroupTuple]</c></tag>
<item>
+ <marker id="global_groups"></marker>
<p>Defines global groups, see
- <seealso marker="global_group">global_group(3)</seealso>.</p>
+ <seealso marker="global_group"><c>global_group(3)</c></seealso>.
+ In this parameter:</p>
<list type="bulleted">
- <item><c>GroupTuple = {GroupName, [Node]} | {GroupName, PublishType, [Node]}</c></item>
- <item><c>GroupName = atom()</c></item>
- <item><c>PublishType = normal | hidden</c></item>
- <item><c>Node = node()</c></item>
+ <item><p><c>GroupTuple = {GroupName, [Node]} | {GroupName, PublishType, [Node]}</c></p></item>
+ <item><p><c>GroupName = atom()</c></p></item>
+ <item><p><c>PublishType = normal | hidden</c></p></item>
+ <item><p><c>Node = node()</c></p></item>
</list>
</item>
<tag><c>inet_default_connect_options = [{Opt, Val}]</c></tag>
<item>
<p>Specifies default options for <c>connect</c> sockets,
- see <seealso marker="inet">inet(3)</seealso>.</p>
+ see <seealso marker="inet"><c>inet(3)</c></seealso>.</p>
</item>
<tag><c>inet_default_listen_options = [{Opt, Val}]</c></tag>
<item>
<p>Specifies default options for <c>listen</c> (and
- <c>accept</c>) sockets, see <seealso marker="inet">inet(3)</seealso>.</p>
+ <c>accept</c>) sockets, see <seealso marker="inet"><c>inet(3)</c></seealso>.</p>
</item>
<tag><c>{inet_dist_use_interface, ip_address()}</c></tag>
<item>
- <p>If the host of an Erlang node has several network interfaces,
- this parameter specifies which one to listen on. See
- <seealso marker="inet">inet(3)</seealso> for the type definition
- of <c>ip_address()</c>.</p>
+ <p>If the host of an Erlang node has many network interfaces,
+ this parameter specifies which one to listen on. For the type definition
+ of <c>ip_address()</c>,
+ see <seealso marker="inet"><c>inet(3)</c></seealso>.</p>
</item>
- <tag><c>{inet_dist_listen_min, First}</c></tag>
+ <tag><c>{inet_dist_listen_min, First}</c> and <c>{inet_dist_listen_max, Last}</c></tag>
<item>
- <p>See below.</p>
- </item>
- <tag><c>{inet_dist_listen_max, Last}</c></tag>
- <item>
- <p>Define the <c>First..Last</c> port range for the listener
+ <p>Defines the <c>First..Last</c> port range for the listener
socket of a distributed Erlang node.</p>
</item>
<tag><c>{inet_dist_listen_options, Opts}</c></tag>
<item>
- <p>Define a list of extra socket options to be used when opening the
+ <p>Defines a list of extra socket options to be used when opening the
listening socket for a distributed Erlang node.
- See <seealso marker="gen_tcp#listen/2">gen_tcp:listen/2</seealso></p>
+ See <seealso marker="gen_tcp#listen/2"><c>gen_tcp:listen/2</c></seealso>.</p>
</item>
<tag><c>{inet_dist_connect_options, Opts}</c></tag>
<item>
- <p>Define a list of extra socket options to be used when connecting to
+ <p>Defines a list of extra socket options to be used when connecting to
other distributed Erlang nodes.
- See <seealso marker="gen_tcp#connect/4">gen_tcp:connect/4</seealso></p>
+ See <seealso marker="gen_tcp#connect/4"><c>gen_tcp:connect/4</c></seealso>.</p>
</item>
<tag><c>inet_parse_error_log = silent</c></tag>
<item>
- <p>If this configuration parameter is set, no
+ <p>If set, no
<c>error_logger</c> messages are generated when erroneous
lines are found and skipped in the various Inet configuration
files.</p>
</item>
<tag><c>inetrc = Filename</c></tag>
<item>
- <p>The name (string) of an Inet user configuration file. See
- ERTS User's Guide, Inet configuration.</p>
+ <p>The name (string) of an Inet user configuration file. For details,
+ see section
+ <seealso marker="erts:inet_cfg"><c>Inet Configuration</c></seealso>
+ in the <c>ERTS</c> User's Guide.</p>
</item>
<tag><c>net_setuptime = SetupTime</c></tag>
<item>
<marker id="net_setuptime"></marker>
<p><c>SetupTime</c> must be a positive integer or floating point
- number, and will be interpreted as the maximally allowed time
+ number, and is interpreted as the maximum allowed time
for each network operation during connection setup to another
- Erlang node. The maximum allowed value is 120; if higher values
- are given, 120 will be used. The default value if the variable
- is not given, or if the value is incorrect (e.g. not a number),
- is 7 seconds.</p>
- <p>Note that this value does not limit the total connection
+ Erlang node. The maximum allowed value is <c>120</c>. If higher values
+ are specified, <c>120</c> is used. Default is 7 seconds if the variable
+ is not specified, or if the value is incorrect (for example, not a number).</p>
+ <p>Notice that this value does not limit the total connection
setup time, but rather each individual network operation during
the connection setup and handshake.</p>
</item>
@@ -268,45 +258,44 @@
<item>
<marker id="net_ticktime"></marker>
<p>Specifies the <c>net_kernel</c> tick time. <c>TickTime</c>
- is given in seconds. Once every <c>TickTime/4</c> second, all
- connected nodes are ticked (if anything else has been written
- to a node) and if nothing has been received from another node
- within the last four (4) tick times that node is considered
- to be down. This ensures that nodes which are not responding,
+ is specified in seconds. Once every <c>TickTime/4</c> second, all
+ connected nodes are ticked (if anything else is written
+ to a node). If nothing is received from another node
+ within the last four tick times, that node is considered
+ to be down. This ensures that nodes that are not responding,
for reasons such as hardware errors, are considered to be
down.</p>
<p>The time <c>T</c>, in which a node that is not responding is
- detected, is calculated as: <c><![CDATA[MinT < T < MaxT]]></c> where:</p>
+ detected, is calculated as <c><![CDATA[MinT < T < MaxT]]></c>, where:</p>
<code type="none">
MinT = TickTime - TickTime / 4
MaxT = TickTime + TickTime / 4</code>
- <p><c>TickTime</c> is by default 60 (seconds). Thus,
+ <p><c>TickTime</c> defaults to <c>60</c> (seconds). Thus,
<c><![CDATA[45 < T < 75]]></c> seconds.</p>
- <p><em>Note:</em> All communicating nodes should have the same
+ <p>Notice that <em>all</em> communicating nodes are to have the <em>same</em>
<c>TickTime</c> value specified.</p>
- <p><em>Note:</em> Normally, a terminating node is detected
- immediately.</p>
+ <p>Normally, a terminating node is detected immediately.</p>
</item>
<tag><c>shutdown_timeout = integer() | infinity</c></tag>
<item>
- <p>Specifies the time <c>application_controller</c> will wait
+ <p>Specifies the time <c>application_controller</c> waits
for an application to terminate during node shutdown. If the
- timer expires, <c>application_controller</c> will brutally
- kill <c>application_master</c> of the hanging
+ timer expires, <c>application_controller</c> brutally
+ kills <c>application_master</c> of the hanging
application. If this parameter is undefined, it defaults
to <c>infinity</c>.</p>
</item>
<tag><c>sync_nodes_mandatory = [NodeName]</c></tag>
<item>
- <p>Specifies which other nodes <em>must</em> be alive in order
+ <p>Specifies which other nodes that <em>must</em> be alive
for this node to start properly. If some node in the list
- does not start within the specified time, this node will not
+ does not start within the specified time, this node does not
start either. If this parameter is undefined, it defaults to
- [].</p>
+ <c>[]</c>.</p>
</item>
<tag><c>sync_nodes_optional = [NodeName]</c></tag>
<item>
- <p>Specifies which other nodes <em>can</em> be alive in order
+ <p>Specifies which other nodes that <em>can</em> be alive
for this node to start properly. If some node in this list
does not start within the specified time, this node starts
anyway. If this parameter is undefined, it defaults to
@@ -314,66 +303,65 @@ MaxT = TickTime + TickTime / 4</code>
</item>
<tag><c>sync_nodes_timeout = integer() | infinity</c></tag>
<item>
- <p>Specifies the amount of time (in milliseconds) this node
- will wait for the mandatory and optional nodes to start. If
+ <p>Specifies the time (in milliseconds) that this node
+ waits for the mandatory and optional nodes to start. If
this parameter is undefined, no node synchronization is
- performed. This option also makes sure that <c>global</c> is
+ performed. This option ensures that <c>global</c> is
synchronized.</p>
</item>
<tag><c>start_dist_ac = true | false</c></tag>
<item>
<p>Starts the <c>dist_ac</c> server if the parameter is
- <c>true</c>. This parameter should be set to <c>true</c> for
- systems that use distributed applications.</p>
- <p>The default value is <c>false</c>. If this parameter is
- undefined, the server is started if the parameter
+ <c>true</c>. This parameter is to be set to <c>true</c> for
+ systems using distributed applications.</p>
+ <p>Defaults to <c>false</c>. If this parameter is
+ undefined, the server is started if parameter
<c>distributed</c> is set.</p>
</item>
<tag><c>start_boot_server = true | false</c></tag>
<item>
<p>Starts the <c>boot_server</c> if the parameter is <c>true</c>
- (see <seealso marker="erl_boot_server">erl_boot_server(3)</seealso>).
- This parameter should be
- set to <c>true</c> in an embedded system which uses this
- service.</p>
- <p>The default value is <c>false</c>.</p>
+ (see <seealso marker="erl_boot_server"><c>erl_boot_server(3)</c></seealso>).
+ This parameter is to be set to <c>true</c> in an embedded system
+ using this service.</p>
+ <p>Defaults to <c>false</c>.</p>
</item>
<tag><c>boot_server_slaves = [SlaveIP]</c></tag>
<item>
- <p>If the <c>start_boot_server</c> configuration parameter is
+ <p>If configuration parameter <c>start_boot_server</c> is
<c>true</c>, this parameter can be used to initialize
- <c>boot_server</c> with a list of slave IP addresses.
- <c>SlaveIP = string() | atom | {integer(),integer(),integer(),integer()}</c></p>
+ <c>boot_server</c> with a list of slave IP addresses:</p>
+ <p>
+ <c>SlaveIP = string() | atom | {integer(),integer(),integer(),integer()}</c>,</p>
<p>where <c><![CDATA[0 <= integer() <=255]]></c>.</p>
- <p>Examples of <c>SlaveIP</c> in atom, string and tuple form
- are: <br></br>
-<c>'150.236.16.70', "150,236,16,70", {150,236,16,70}</c>.</p>
- <p>The default value is <c>[]</c>.</p>
+ <p>Examples of <c>SlaveIP</c> in atom, string, and tuple form:</p>
+ <p><c>'150.236.16.70', "150,236,16,70", {150,236,16,70}</c>.</p>
+ <p>Defaults to <c>[]</c>.</p>
</item>
<tag><c>start_disk_log = true | false</c></tag>
<item>
<p>Starts the <c>disk_log_server</c> if the parameter is
- <c>true</c> (see <seealso marker="disk_log">disk_log(3)</seealso>).
- This parameter should be
- set to true in an embedded system which uses this service.</p>
- <p>The default value is <c>false</c>.</p>
+ <c>true</c> (see <seealso marker="disk_log"><c>disk_log(3)</c></seealso>).
+ This parameter is to be set to <c>true</c> in an embedded system
+ using this service.</p>
+ <p>Defaults to <c>false</c>.</p>
</item>
<tag><c>start_pg2 = true | false</c></tag>
<item>
+ <marker id="start_pg2"></marker>
<p>Starts the <c>pg2</c> server (see
- <seealso marker="pg2">pg2(3)</seealso>) if
- the parameter is <c>true</c>. This parameter should be set to
- <c>true</c> in an embedded system which uses this service.</p>
- <p>The default value is <c>false</c>.</p>
+ <seealso marker="pg2"><c>pg2(3)</c></seealso>) if
+ the parameter is <c>true</c>. This parameter is to be set to
+ <c>true</c> in an embedded system that uses this service.</p>
+ <p>Defaults to <c>false</c>.</p>
</item>
<tag><c>start_timer = true | false</c></tag>
<item>
<p>Starts the <c>timer_server</c> if the parameter is
- <c>true</c> (see <seealso marker="stdlib:timer">timer(3)</seealso>).
- This parameter should be
- set to <c>true</c> in an embedded system which uses this
- service.</p>
- <p>The default value is <c>false</c>.</p>
+ <c>true</c> (see <seealso marker="stdlib:timer"><c>stdlib:timer(3)</c></seealso>).
+ This parameter is to be set to <c>true</c> in an embedded system
+ using this service.</p>
+ <p>Defaults to <c>false</c>.</p>
</item>
<tag><c>shutdown_func = {Mod, Func}</c></tag>
<item>
@@ -383,7 +371,7 @@ MaxT = TickTime + TickTime / 4</code>
<item><c>Func = atom()</c></item>
</list>
<p>Sets a function that <c>application_controller</c> calls
- when it starts to terminate. The function is called as:
+ when it starts to terminate. The function is called as
<c>Mod:Func(Reason)</c>, where <c>Reason</c> is the terminate
reason for <c>application_controller</c>, and it must
return as soon as possible for <c>application_controller</c>
@@ -394,25 +382,25 @@ MaxT = TickTime + TickTime / 4</code>
<section>
<title>See Also</title>
- <p><seealso marker="app">app(4)</seealso>,
- <seealso marker="application">application(3)</seealso>,
- <seealso marker="code">code(3)</seealso>,
- <seealso marker="disk_log">disk_log(3)</seealso>,
- <seealso marker="erl_boot_server">erl_boot_server(3)</seealso>,
- <seealso marker="erl_ddll">erl_ddll(3)</seealso>,
- <seealso marker="error_logger">error_logger(3)</seealso>,
- <seealso marker="file">file(3)</seealso>,
- <seealso marker="global">global(3)</seealso>,
- <seealso marker="global_group">global_group(3)</seealso>,
- <seealso marker="heart">heart(3)</seealso>,
- <seealso marker="inet">inet(3)</seealso>,
- <seealso marker="net_kernel">net_kernel(3)</seealso>,
- <seealso marker="os">os(3)</seealso>,
- <seealso marker="pg2">pg2(3)</seealso>,
- <seealso marker="rpc">rpc(3)</seealso>,
- <seealso marker="seq_trace">seq_trace(3)</seealso>,
- <seealso marker="stdlib:timer">timer(3)</seealso>,
- <seealso marker="user">user(3)</seealso></p>
+ <p><seealso marker="app"><c>app(4)</c></seealso>,
+ <seealso marker="application"><c>application(3)</c></seealso>,
+ <seealso marker="code"><c>code(3)</c></seealso>,
+ <seealso marker="disk_log"><c>disk_log(3)</c></seealso>,
+ <seealso marker="erl_boot_server"><c>erl_boot_server(3)</c></seealso>,
+ <seealso marker="erl_ddll"><c>erl_ddll(3)</c></seealso>,
+ <seealso marker="error_logger"><c>error_logger(3)</c></seealso>,
+ <seealso marker="file"><c>file(3)</c></seealso>,
+ <seealso marker="global"><c>global(3)</c></seealso>,
+ <seealso marker="global_group"><c>global_group(3)</c></seealso>,
+ <seealso marker="heart"><c>heart(3)</c></seealso>,
+ <seealso marker="inet"><c>inet(3)</c></seealso>,
+ <seealso marker="net_kernel"><c>net_kernel(3)</c></seealso>,
+ <seealso marker="os"><c>os(3)</c></seealso>,
+ <seealso marker="pg2"><c>pg2(3)</c></seealso>,
+ <seealso marker="rpc"><c>rpc(3)</c></seealso>,
+ <seealso marker="seq_trace"><c>seq_trace(3)</c></seealso>,
+ <seealso marker="user"><c>user(3)</c></seealso>,
+ <seealso marker="stdlib:timer"><c>timer(3)</c></seealso></p>
</section>
</appref>
diff --git a/lib/kernel/doc/src/net_adm.xml b/lib/kernel/doc/src/net_adm.xml
index 4ef9d361f6..6957a3b5e4 100644
--- a/lib/kernel/doc/src/net_adm.xml
+++ b/lib/kernel/doc/src/net_adm.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -25,95 +25,105 @@
<title>net_adm</title>
<prepared>Claes Wikstrom</prepared>
<docno>1</docno>
- <date>96-09-10</date>
+ <date>1996-09-10</date>
<rev>A</rev>
</header>
<module>net_adm</module>
- <modulesummary>Various Erlang Net Administration Routines</modulesummary>
+ <modulesummary>Various Erlang net administration routines.</modulesummary>
<description>
<p>This module contains various network utility functions.</p>
</description>
+
<funcs>
<func>
<name name="dns_hostname" arity="1"/>
- <fsummary>Official name of a host</fsummary>
+ <fsummary>Official name of a host.</fsummary>
<desc>
<p>Returns the official name of <c><anno>Host</anno></c>, or
<c>{error, <anno>Host</anno>}</c> if no such name is found. See also
- <c>inet(3)</c>.</p>
+ <seealso marker="inet"><c>inet(3)</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="host_file" arity="0"/>
- <fsummary>Read the <c>.hosts.erlang</c>file</fsummary>
+ <fsummary>Read file <c>.hosts.erlang</c>.</fsummary>
<desc>
- <p>Reads the <c>.hosts.erlang</c> file, see the section
- <em>Files</em> below. Returns the hosts in this file as a
- list, or returns <c>{error, <anno>Reason</anno>}</c> if the file could not
- be read or the Erlang terms on the file could not be interpreted.</p>
+ <p>Reads file <c>.hosts.erlang</c>, see section
+ <seealso marker="#files">Files</seealso>. Returns the hosts in this
+ file as a list. Returns <c>{error, <anno>Reason</anno>}</c> if the
+ file cannot be read or the Erlang terms on the file cannot be
+ interpreted.</p>
</desc>
</func>
+
<func>
<name name="localhost" arity="0"/>
- <fsummary>Name of the local host</fsummary>
+ <fsummary>Name of the local host.</fsummary>
<desc>
<p>Returns the name of the local host. If Erlang was started
- with the <c>-name</c> command line flag, <c><anno>Name</anno></c> is
+ with command-line flag <c>-name</c>, <c><anno>Name</anno></c> is
the fully qualified name.</p>
</desc>
</func>
+
<func>
<name name="names" arity="0"/>
<name name="names" arity="1"/>
- <fsummary>Names of Erlang nodes at a host</fsummary>
+ <fsummary>Names of Erlang nodes at a host.</fsummary>
<desc>
- <p>Similar to <c>epmd -names</c>, see <c>epmd(1)</c>.
- <c><anno>Host</anno></c> defaults to the local host. Returns the names and
- associated port numbers of the Erlang nodes that <c>epmd</c>
- at the specified host has registered.</p>
- <p>Returns <c>{error, address}</c> if <c>epmd</c> is not
- running.</p>
+ <p>Similar to <c>epmd -names</c>, see
+ <seealso marker="erts:epmd"><c>erts:epmd(1)</c></seealso>.
+ <c><anno>Host</anno></c> defaults to the local host. Returns the
+ names and associated port numbers of the Erlang nodes that
+ <c>epmd</c> registered at the specified host. Returns
+ <c>{error, address}</c> if <c>epmd</c> is not operational.</p>
+ <p><em>Example:</em></p>
<pre>
(arne@dunn)1> <input>net_adm:names().</input>
{ok,[{"arne",40262}]}</pre>
</desc>
</func>
+
<func>
<name name="ping" arity="1"/>
- <fsummary>Set up a connection to a node</fsummary>
+ <fsummary>Set up a connection to a node.</fsummary>
<desc>
- <p>Tries to set up a connection to <c><anno>Node</anno></c>. Returns
- <c>pang</c> if it fails, or <c>pong</c> if it is successful.</p>
+ <p>Sets up a connection to <c><anno>Node</anno></c>. Returns
+ <c>pong</c> if it is successful, otherwise <c>pang</c>.</p>
</desc>
</func>
+
<func>
<name name="world" arity="0"/>
<name name="world" arity="1"/>
- <fsummary>Lookup and connect to all nodes at all hosts in <c>.hosts.erlang</c></fsummary>
+ <fsummary>Lookup and connect to all nodes at all hosts in
+ <c>.hosts.erlang</c>.</fsummary>
<type name="verbosity"/>
<desc>
- <p>This function calls <c>names(Host)</c> for all hosts which
+ <p>Calls <c>names(Host)</c> for all hosts that
are specified in the Erlang host file <c>.hosts.erlang</c>,
- collects the replies and then evaluates <c>ping(Node)</c> on
- all those nodes. Returns the list of all nodes that were,
- successfully pinged.</p>
+ collects the replies, and then evaluates <c>ping(Node)</c> on
+ all those nodes. Returns the list of all nodes that are
+ successfully pinged.</p>
<p><c><anno>Arg</anno></c> defaults to <c>silent</c>.
- If <c><anno>Arg</anno> == verbose</c>, the function writes information about which
- nodes it is pinging to stdout.</p>
+ If <c><anno>Arg</anno> == verbose</c>, the function writes
+ information about which nodes it is pinging to <c>stdout</c>.</p>
<p>This function can be useful when a node is started, and
- the names of the other nodes in the network are not initially
- known.</p>
- <p>Failure: <c>{error, Reason}</c> if <c>host_file()</c>
+ the names of the other network nodes are not initially known.</p>
+ <p>Returns <c>{error, Reason}</c> if <c>host_file()</c>
returns <c>{error, Reason}</c>.</p>
</desc>
</func>
+
<func>
<name name="world_list" arity="1"/>
<name name="world_list" arity="2"/>
- <fsummary>Lookup and connect to all nodes at specified hosts</fsummary>
+ <fsummary>Lookup and connect to all nodes at specified hosts.</fsummary>
<type name="verbosity"/>
<desc>
- <p>As <c>world/0,1</c>, but the hosts are given as argument
+ <p>Same as <seealso marker="#world/1"><c>world/0,1</c></seealso>,
+ but the hosts are specified as argument
instead of being read from <c>.hosts.erlang</c>.</p>
</desc>
</func>
@@ -121,13 +131,14 @@
<section>
<title>Files</title>
- <p>The <c>.hosts.erlang</c> file consists of a number of host names
+ <marker id="files"/>
+ <p>File <c>.hosts.erlang</c> consists of a number of host names
written as Erlang terms. It is looked for in the current work
directory, the user's home directory, and <c>$OTP_ROOT</c>
(the root directory of Erlang/OTP), in that order.</p>
- <p>The format of the <c>.hosts.erlang</c> file must be one host
- name per line. The host names must be within quotes as shown in
- the following example:</p>
+ <p>The format of file <c>.hosts.erlang</c> must be one host
+ name per line. The host names must be within quotes.</p>
+ <p><em>Example:</em></p>
<pre>
'super.eua.ericsson.se'.
'renat.eua.ericsson.se'.
diff --git a/lib/kernel/doc/src/net_kernel.xml b/lib/kernel/doc/src/net_kernel.xml
index 311e0d8ea4..f48a534d4f 100644
--- a/lib/kernel/doc/src/net_kernel.xml
+++ b/lib/kernel/doc/src/net_kernel.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -25,41 +25,47 @@
<title>net_kernel</title>
<prepared>Claes Wikstrom</prepared>
<docno>1</docno>
- <date>96-09-10</date>
+ <date>1996-09-10</date>
<rev>A</rev>
</header>
<module>net_kernel</module>
- <modulesummary>Erlang Networking Kernel</modulesummary>
+ <modulesummary>Erlang networking kernel.</modulesummary>
<description>
<p>The net kernel is a system process, registered as
- <c>net_kernel</c>, which must be running for distributed Erlang
+ <c>net_kernel</c>, which must be operational for distributed Erlang
to work. The purpose of this process is to implement parts of
the BIFs <c>spawn/4</c> and <c>spawn_link/4</c>, and to provide
monitoring of the network.</p>
- <p>An Erlang node is started using the command line flag
+ <p>An Erlang node is started using command-line flag
<c>-name</c> or <c>-sname</c>:</p>
-<pre>$ <input>erl -sname foobar</input></pre>
+ <pre>
+$ <input>erl -sname foobar</input></pre>
<p>It is also possible to call <c>net_kernel:start([foobar])</c>
directly from the normal Erlang shell prompt:</p>
-<pre>1> <input>net_kernel:start([foobar, shortnames]).</input>
+ <pre>
+1> <input>net_kernel:start([foobar, shortnames]).</input>
{ok,&lt;0.64.0>}
(foobar@gringotts)2></pre>
- <p>If the node is started with the command line flag <c>-sname</c>,
- the node name will be <c>foobar@Host</c>, where <c>Host</c> is
+ <p>If the node is started with command-line flag <c>-sname</c>,
+ the node name is <c>foobar@Host</c>, where <c>Host</c> is
the short name of the host (not the fully qualified domain name).
- If started with the <c>-name</c> flag, <c>Host</c> is the fully
- qualified domain name. See <c>erl(1)</c>.</p>
+ If started with flag <c>-name</c>, the node name is <c>foobar@Host</c>,
+ where <c>Host</c> is the fully qualified domain name.
+ For more information, see
+ <seealso marker="erts:erl"><c>erl</c></seealso>.</p>
<p>Normally, connections are established automatically when
another node is referenced. This functionality can be disabled
- by setting the Kernel configuration parameter
+ by setting <c>Kernel</c> configuration parameter
<c>dist_auto_connect</c> to <c>false</c>, see
- <seealso marker="kernel_app">kernel(6)</seealso>. In this case,
+ <seealso marker="kernel_app"><c>kernel(6)</c></seealso>. In this case,
connections must be established explicitly by calling
- <c>net_kernel:connect_node/1</c>.</p>
- <p>Which nodes are allowed to communicate with each other is handled
- by the magic cookie system, see
- <seealso marker="doc/reference_manual:distributed">Distributed Erlang</seealso> in the Erlang Reference Manual.</p>
+ <seealso marker="#connect_node/1"><c>connect_node/1</c></seealso>.</p>
+ <p>Which nodes that are allowed to communicate with each other is handled
+ by the magic cookie system, see section
+ <seealso marker="doc/reference_manual:distributed">Distributed Erlang</seealso>
+ in the Erlang Reference Manual.</p>
</description>
+
<funcs>
<func>
<name name="allow" arity="1"/>
@@ -77,237 +83,240 @@
an atom.</p>
</desc>
</func>
+
<func>
<name name="connect_node" arity="1"/>
- <fsummary>Establish a connection to a node</fsummary>
+ <fsummary>Establish a connection to a node.</fsummary>
<desc>
- <p>Establishes a connection to <c><anno>Node</anno></c>. Returns <c>true</c>
- if successful, <c>false</c> if not, and <c>ignored</c> if
- the local node is not alive.</p>
+ <p>Establishes a connection to <c><anno>Node</anno></c>. Returns
+ <c>true</c> if successful, <c>false</c> if not, and <c>ignored</c>
+ if the local node is not alive.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="get_net_ticktime" arity="0"/>
+ <fsummary>Get <c>net_ticktime</c>.</fsummary>
+ <desc>
+ <p>Gets <c>net_ticktime</c> (see
+ <seealso marker="kernel_app"><c>kernel(6)</c></seealso>).</p>
+ <p>Defined return values (<c><anno>Res</anno></c>):</p>
+ <taglist>
+ <tag><c><anno>NetTicktime</anno></c></tag>
+ <item><p><c>net_ticktime</c> is <c><anno>NetTicktime</anno></c>
+ seconds.</p></item>
+ <tag><c>{ongoing_change_to, <anno>NetTicktime</anno>}</c></tag>
+ <item><p><c>net_kernel</c> is currently changing
+ <c>net_ticktime</c> to <c><anno>NetTicktime</anno></c>
+ seconds.</p></item>
+ <tag><c>ignored</c></tag>
+ <item><p>The local node is not alive.</p></item>
+ </taglist>
</desc>
</func>
+
<func>
<name name="monitor_nodes" arity="1"/>
<name name="monitor_nodes" arity="2"/>
- <fsummary>Subscribe to node status change messages</fsummary>
+ <fsummary>Subscribe to node status change messages.</fsummary>
<desc>
<p>The calling process subscribes or unsubscribes to node
status change messages. A <c>nodeup</c> message is delivered
- to all subscribing process when a new node is connected, and
+ to all subscribing processes when a new node is connected, and
a <c>nodedown</c> message is delivered when a node is
disconnected.</p>
- <p>If <c><anno>Flag</anno></c> is <c>true</c>, a new subscription is started.
- If <c><anno>Flag</anno></c> is <c>false</c>, all previous subscriptions --
- started with the same <c><anno>Options</anno></c> -- are stopped. Two
+ <p>If <c><anno>Flag</anno></c> is <c>true</c>, a new subscription is
+ started. If <c><anno>Flag</anno></c> is <c>false</c>, all previous
+ subscriptions started with the same <c><anno>Options</anno></c>
+ are stopped. Two
option lists are considered the same if they contain the same
set of options.</p>
- <p>As of <c>kernel</c> version 2.11.4, and <c>erts</c> version
+ <p>As from <c>Kernel</c> version 2.11.4, and <c>ERTS</c> version
5.5.4, the following is guaranteed:</p>
<list type="bulleted">
- <item><c>nodeup</c> messages will be delivered before delivery
- of any message from the remote node passed through the
- newly established connection.</item>
- <item><c>nodedown</c> messages will not be delivered until all
- messages from the remote node that have been passed
- through the connection have been delivered.</item>
+ <item><p><c>nodeup</c> messages are delivered before delivery
+ of any message from the remote node passed through the
+ newly established connection.</p></item>
+ <item><p><c>nodedown</c> messages are not delivered until all
+ messages from the remote node that have been passed
+ through the connection have been delivered.</p></item>
</list>
- <p>Note, that this is <em>not</em> guaranteed for <c>kernel</c>
+ <p>Notice that this is <em>not</em> guaranteed for <c>Kernel</c>
versions before 2.11.4.</p>
- <p>As of <c>kernel</c> version 2.11.4 subscriptions can also be
- made before the <c>net_kernel</c> server has been started,
- i.e., <c>net_kernel:monitor_nodes/[1,2]</c> does not return
+ <p>As from <c>Kernel</c> version 2.11.4, subscriptions can also be
+ made before the <c>net_kernel</c> server is started, that is,
+ <c>net_kernel:monitor_nodes/[1,2]</c> does not return
<c>ignored</c>.</p>
- <p>As of <c>kernel</c> version 2.13, and <c>erts</c> version
+ <p>As from <c>Kernel</c> version 2.13, and <c>ERTS</c> version
5.7, the following is guaranteed:</p>
<list type="bulleted">
- <item><c>nodeup</c> messages will be delivered after the
- corresponding node appears in results from
- <c>erlang:nodes/X</c>.</item>
- <item><c>nodedown</c> messages will be delivered after the
- corresponding node has disappeared in results from
- <c>erlang:nodes/X</c>.</item>
+ <item><p><c>nodeup</c> messages are delivered after the
+ corresponding node appears in results from
+ <c>erlang:nodes/X</c>.</p></item>
+ <item><p><c>nodedown</c> messages are delivered after the
+ corresponding node has disappeared in results from
+ <c>erlang:nodes/X</c>.</p></item>
</list>
- <p>Note, that this is <em>not</em> guaranteed for <c>kernel</c>
+ <p>Notice that this is <em>not</em> guaranteed for <c>Kernel</c>
versions before 2.13.</p>
<p>The format of the node status change messages depends on
- <c><anno>Options</anno></c>. If <c><anno>Options</anno></c> is [], which is the default,
- the format is:</p>
+ <c><anno>Options</anno></c>. If <c><anno>Options</anno></c> is
+ <c>[]</c>, which is the default, the format is as follows:</p>
<code type="none">
{nodeup, Node} | {nodedown, Node}
Node = node()</code>
- <p>If <c><anno>Options</anno> /= []</c>, the format is:</p>
+ <p>If <c><anno>Options</anno></c> is not <c>[]</c>, the format is
+ as follows:</p>
<code type="none">
{nodeup, Node, InfoList} | {nodedown, Node, InfoList}
Node = node()
InfoList = [{Tag, Val}]</code>
<p><c>InfoList</c> is a list of tuples. Its contents depends on
<c><anno>Options</anno></c>, see below.</p>
- <p>Also, when <c>OptionList == []</c> only visible nodes, that
+ <p>Also, when <c>OptionList == []</c>, only visible nodes, that
is, nodes that appear in the result of
- <seealso marker="erts:erlang#nodes/0">nodes/0</seealso>, are
- monitored.</p>
+ <seealso marker="erts:erlang#nodes/0"><c>erlang:nodes/0</c></seealso>,
+ are monitored.</p>
<p><c><anno>Option</anno></c> can be any of the following:</p>
<taglist>
<tag><c>{node_type, NodeType}</c></tag>
<item>
- <p>Currently valid values for <c>NodeType</c> are:</p>
+ <p>Valid values for <c>NodeType</c>:</p>
<taglist>
<tag><c>visible</c></tag>
- <item>Subscribe to node status change messages for visible
+ <item><p>Subscribe to node status change messages for visible
nodes only. The tuple <c>{node_type, visible}</c> is
- included in <c>InfoList</c>.</item>
+ included in <c>InfoList</c>.</p></item>
<tag><c>hidden</c></tag>
- <item>Subscribe to node status change messages for hidden
+ <item><p>Subscribe to node status change messages for hidden
nodes only. The tuple <c>{node_type, hidden}</c> is
- included in <c>InfoList</c>.</item>
+ included in <c>InfoList</c>.</p></item>
<tag><c>all</c></tag>
- <item>Subscribe to node status change messages for both
+ <item><p>Subscribe to node status change messages for both
visible and hidden nodes. The tuple
- <c>{node_type, visible | hidden}</c> is included in
- <c>InfoList</c>.</item>
+ <c>{node_type, visible | hidden}</c> is included in
+ <c>InfoList</c>.</p></item>
</taglist>
</item>
<tag><c>nodedown_reason</c></tag>
<item>
<p>The tuple <c>{nodedown_reason, Reason}</c> is included in
- <c>InfoList</c> in <c>nodedown</c> messages. <c>Reason</c>
- can be:</p>
+ <c>InfoList</c> in <c>nodedown</c> messages.</p>
+ <p><c>Reason</c> can be any of the following:</p>
<taglist>
<tag><c>connection_setup_failed</c></tag>
- <item>The connection setup failed (after <c>nodeup</c>
- messages had been sent).</item>
+ <item><p>The connection setup failed (after <c>nodeup</c>
+ messages were sent).</p></item>
<tag><c>no_network</c></tag>
- <item>No network available.</item>
+ <item><p>No network is available.</p></item>
<tag><c>net_kernel_terminated</c></tag>
- <item>The <c>net_kernel</c> process terminated.</item>
+ <item><p>The <c>net_kernel</c> process terminated.</p></item>
<tag><c>shutdown</c></tag>
- <item>Unspecified connection shutdown.</item>
+ <item><p>Unspecified connection shutdown.</p></item>
<tag><c>connection_closed</c></tag>
- <item>The connection was closed.</item>
+ <item><p>The connection was closed.</p></item>
<tag><c>disconnect</c></tag>
- <item>The connection was disconnected (forced from the
- current node).</item>
+ <item><p>The connection was disconnected (forced from the
+ current node).</p></item>
<tag><c>net_tick_timeout</c></tag>
- <item>Net tick timeout.</item>
+ <item><p>Net tick time-out.</p></item>
<tag><c>send_net_tick_failed</c></tag>
- <item>Failed to send net tick over the connection.</item>
+ <item><p>Failed to send net tick over the connection.</p></item>
<tag><c>get_status_failed</c></tag>
- <item>Status information retrieval from the <c>Port</c>
- holding the connection failed.</item>
+ <item><p>Status information retrieval from the <c>Port</c>
+ holding the connection failed.</p></item>
</taglist>
</item>
</taglist>
</desc>
</func>
- <func>
- <name name="get_net_ticktime" arity="0"/>
- <fsummary>Get <c>net_ticktime</c></fsummary>
- <desc>
- <p>Gets <c>net_ticktime</c> (see
- <seealso marker="kernel_app">kernel(6)</seealso>).</p>
- <p>Currently defined return values (<c><anno>Res</anno></c>):</p>
- <taglist>
- <tag><c><anno>NetTicktime</anno></c></tag>
- <item>
- <p><c>net_ticktime</c> is <c><anno>NetTicktime</anno></c> seconds.</p>
- </item>
- <tag><c>{ongoing_change_to, <anno>NetTicktime</anno>}</c></tag>
- <item>
- <p><c>net_kernel</c> is currently changing
- <c>net_ticktime</c> to <c><anno>NetTicktime</anno></c> seconds.</p>
- </item>
- <tag><c>ignored</c></tag>
- <item>
- <p>The local node is not alive.</p>
- </item>
- </taglist>
- </desc>
- </func>
+
<func>
<name name="set_net_ticktime" arity="1"/>
<name name="set_net_ticktime" arity="2"/>
- <fsummary>Set <c>net_ticktime</c></fsummary>
+ <fsummary>Set <c>net_ticktime</c>.</fsummary>
<desc>
<p>Sets <c>net_ticktime</c> (see
- <seealso marker="kernel_app">kernel(6)</seealso>) to
- <c><anno>NetTicktime</anno></c> seconds. <c><anno>TransitionPeriod</anno></c> defaults
- to 60.</p>
+ <seealso marker="kernel_app"><c>kernel(6)</c></seealso>) to
+ <c><anno>NetTicktime</anno></c> seconds.
+ <c><anno>TransitionPeriod</anno></c> defaults to <c>60</c>.</p>
<p>Some definitions:</p>
<taglist>
- <tag>The minimum transition traffic interval (<c>MTTI</c>)</tag>
- <item>
- <p><c>minimum(<anno>NetTicktime</anno>, PreviousNetTicktime)*1000 div 4</c> milliseconds.</p>
- </item>
- <tag>The transition period</tag>
- <item>
- <p>The time of the least number of consecutive <c>MTTI</c>s
- to cover <c><anno>TransitionPeriod</anno></c> seconds following
- the call to <c>set_net_ticktime/2</c> (i.e.
- ((<c><anno>TransitionPeriod</anno>*1000 - 1) div MTTI + 1)*MTTI</c>
- milliseconds).</p>
- </item>
+ <tag>Minimum transition traffic interval (<c>MTTI</c>)</tag>
+ <item><p><c>minimum(<anno>NetTicktime</anno>,
+ PreviousNetTicktime)*1000 div 4</c> milliseconds.</p></item>
+ <tag>Transition period</tag>
+ <item><p>The time of the least number of consecutive <c>MTTI</c>s
+ to cover <c><anno>TransitionPeriod</anno></c> seconds following
+ the call to <c>set_net_ticktime/2</c> (that is,
+ ((<c><anno>TransitionPeriod</anno>*1000 - 1) div MTTI + 1)*MTTI</c>
+ milliseconds).</p></item>
</taglist>
- <p>If <c><![CDATA[<anno>NetTicktime</anno> < PreviousNetTicktime]]></c>, the actual
- <c>net_ticktime</c> change will be done at the end of
- the transition period; otherwise, at the beginning. During
- the transition period, <c>net_kernel</c> will ensure that
- there will be outgoing traffic on all connections at least
+ <p>If
+ <c><![CDATA[NetTicktime < PreviousNetTicktime]]></c>,
+ the <c>net_ticktime</c> change is done at the end of
+ the transition period; otherwise at the beginning. During
+ the transition period, <c>net_kernel</c> ensures that
+ there is outgoing traffic on all connections at least
every <c>MTTI</c> millisecond.</p>
<note>
- <p>The <c>net_ticktime</c> changes have to be initiated on all
+ <p>The <c>net_ticktime</c> changes must be initiated on all
nodes in the network (with the same <c><anno>NetTicktime</anno></c>)
before the end of any transition period on any node;
- otherwise, connections may erroneously be disconnected.</p>
+ otherwise connections can erroneously be disconnected.</p>
</note>
<p>Returns one of the following:</p>
<taglist>
<tag><c>unchanged</c></tag>
<item>
- <p><c>net_ticktime</c> already had the value of
- <c><anno>NetTicktime</anno></c> and was left unchanged.</p>
+ <p><c>net_ticktime</c> already has the value of
+ <c><anno>NetTicktime</anno></c> and is left unchanged.</p>
</item>
<tag><c>change_initiated</c></tag>
<item>
- <p><c>net_kernel</c> has initiated the change of
- <c>net_ticktime</c> to <c><anno>NetTicktime</anno></c> seconds.</p>
+ <p><c>net_kernel</c> initiated the change of
+ <c>net_ticktime</c> to <c><anno>NetTicktime</anno></c>
+ seconds.</p>
</item>
<tag><c>{ongoing_change_to, <anno>NewNetTicktime</anno>}</c></tag>
<item>
- <p>The request was <em>ignored</em>; because,
- <c>net_kernel</c> was busy changing <c>net_ticktime</c> to
+ <p>The request is <em>ignored</em> because
+ <c>net_kernel</c> is busy changing <c>net_ticktime</c> to
<c><anno>NewNetTicktime</anno></c> seconds.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name>start([Name]) -> {ok, pid()} | {error, Reason}</name>
<name>start([Name, NameType]) -> {ok, pid()} | {error, Reason}</name>
<name>start([Name, NameType, Ticktime]) -> {ok, pid()} | {error, Reason}</name>
- <fsummary>Turn an Erlang runtime system into a distributed node</fsummary>
+ <fsummary>Turn an Erlang runtime system into a distributed node.</fsummary>
<type>
<v>Name = atom()</v>
<v>NameType = shortnames | longnames</v>
<v>Reason = {already_started, pid()} | term()</v>
</type>
<desc>
- <p>Note that the argument is a list with exactly one, two or
- three arguments. <c>NameType</c> defaults to <c>longnames</c>
- and <c>Ticktime</c> to 15000.</p>
<p>Turns a non-distributed node into a distributed node by
starting <c>net_kernel</c> and other necessary processes.</p>
+ <p>Notice that the argument is a list with exactly one, two, or
+ three arguments. <c>NameType</c> defaults to <c>longnames</c>
+ and <c>Ticktime</c> to <c>15000</c>.</p>
</desc>
</func>
+
<func>
<name name="stop" arity="0"/>
- <fsummary>Turn a node into a non-distributed Erlang runtime system</fsummary>
+ <fsummary>Turn a node into a non-distributed Erlang runtime system.</fsummary>
<desc>
<p>Turns a distributed node into a non-distributed node. For
other nodes in the network, this is the same as the node
- going down. Only possible when the net kernel was started
- using <c>start/1</c>, otherwise returns
- <c>{error, not_allowed}</c>. Returns <c>{error, not_found}</c>
- if the local node is not alive.</p>
+ going down. Only possible when the net kernel was started using
+ <seealso marker="#start/1"><c>start/1</c></seealso>,
+ otherwise <c>{error, not_allowed}</c> is returned. Returns
+ <c>{error, not_found}</c> if the local node is not alive.</p>
</desc>
</func>
</funcs>
diff --git a/lib/kernel/doc/src/notes.xml b/lib/kernel/doc/src/notes.xml
index cf5777d4be..f37433110c 100644
--- a/lib/kernel/doc/src/notes.xml
+++ b/lib/kernel/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,203 @@
</header>
<p>This document describes the changes made to the Kernel application.</p>
+<section><title>Kernel 5.0</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>The handling of <c>on_load</c> functions has been
+ improved. The major improvement is that if a code upgrade
+ fails because the <c>on_load</c> function fails, the
+ previous version of the module will now be retained.</p>
+ <p>
+ Own Id: OTP-12593</p>
+ </item>
+ <item>
+ <p><c>rpc:call()</c> and <c>rpc:block_call()</c> would
+ sometimes cause an exception (which was not mentioned in
+ the documentation). This has been corrected so that
+ <c>{badrpc,Reason}</c> will be returned instead.</p>
+ <p>
+ Own Id: OTP-13409</p>
+ </item>
+ <item>
+ <p>On Windows, for modules that were loaded early (such
+ as the <c>lists</c> module), <c>code:which/1</c> would
+ return the path with mixed slashes and backslashes, for
+ example: <c>"C:\\Program
+ Files\\erl8.0/lib/stdlib-2.7/ebin/lists.beam"</c>. This
+ has been corrected.</p>
+ <p>
+ Own Id: OTP-13410</p>
+ </item>
+ <item>
+ <p>
+ Make file:datasync use fsync instead of fdatasync on Mac
+ OSX.</p>
+ <p>
+ Own Id: OTP-13411</p>
+ </item>
+ <item>
+ <p>
+ The default chunk size for the fallback sendfile
+ implementation, used on platforms that do not have a
+ native sendfile, has been decreased in order to reduce
+ connectivity issues.</p>
+ <p>
+ Own Id: OTP-13444</p>
+ </item>
+ <item>
+ <p>
+ Large file writes (2Gb or more) could fail on some Unix
+ platforms (for example, OS X and FreeBSD).</p>
+ <p>
+ Own Id: OTP-13461</p>
+ </item>
+ <item>
+ <p>
+ A bug has been fixed where the DNS resolver inet_res did
+ not refresh its view of the contents of for example
+ resolv.conf immediately after start and hence then failed
+ name resolution. Reported and fix suggested by Michal
+ Ptaszek in GitHUB pull req #949.</p>
+ <p>
+ Own Id: OTP-13470 Aux Id: Pull #969 </p>
+ </item>
+ <item>
+ <p>
+ Fix process leak from global_group.</p>
+ <p>
+ Own Id: OTP-13516 Aux Id: PR-1008 </p>
+ </item>
+ <item>
+ <p>
+ The function <c>inet:gethostbyname/1</c> now honors the
+ resolver option <c>inet6</c> instead of always looking up
+ IPv4 addresses.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13622 Aux Id: PR-1065 </p>
+ </item>
+ <item>
+ <p>
+ The <c>Status</c> argument to <c>init:stop/1</c> is now
+ sanity checked to make sure <c>erlang:halt</c> does not
+ fail.</p>
+ <p>
+ Own Id: OTP-13631 Aux Id: PR-911 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Add {line_delim, byte()} option to inet:setopts/2 and
+ decode_packet/3</p>
+ <p>
+ Own Id: OTP-12837</p>
+ </item>
+ <item>
+ <p>
+ Added <seealso
+ marker="kernel:os#perf_counter/1">os:perf_counter/1</seealso>.</p>
+ <p>
+ The perf_counter is a very very cheap and high resolution
+ timer that can be used to timestamp system events. It
+ does not have monoticity guarantees, but should on most
+ OS's expose a monotonous time.</p>
+ <p>
+ Own Id: OTP-12908</p>
+ </item>
+ <item>
+ <p>
+ The os:cmd call has been optimized on unix platforms to
+ be scale better with the number of schedulers.</p>
+ <p>
+ Own Id: OTP-13089</p>
+ </item>
+ <item>
+ <p>New functions that can load multiple modules at once
+ have been added to the '<c>code</c>' module. The
+ functions are <c>code:atomic_load/1</c>,
+ <c>code:prepare_loading/1</c>,
+ <c>code:finish_loading/1</c>, and
+ <c>code:ensure_modules_loaded/1</c>.</p>
+ <p>
+ Own Id: OTP-13111</p>
+ </item>
+ <item>
+ <p>
+ The code path cache feature turned out not to be very
+ useful in practice and has been removed. If an attempt is
+ made to enable the code path cache, there will be a
+ warning report informing the user that the feature has
+ been removed.</p>
+ <p>
+ Own Id: OTP-13191</p>
+ </item>
+ <item>
+ <p>When an attempt is made to start a distributed Erlang
+ node with the same name as an existing node, the error
+ message will be much shorter and easier to read than
+ before. Example:</p>
+ <p><c>Protocol 'inet_tcp': the name somename@somehost
+ seems to be in use by another Erlang node</c></p>
+ <p>
+ Own Id: OTP-13294</p>
+ </item>
+ <item>
+ <p>
+ The output of the default error logger is somewhat
+ prettier and easier to read. The default error logger is
+ used during start-up of the OTP system. If the start-up
+ fails, the output will be easier to read.</p>
+ <p>
+ Own Id: OTP-13325</p>
+ </item>
+ <item>
+ <p>The functions <c>rpc:safe_multi_server_call/2,3</c>
+ that were deprecated in R12B have been removed.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13449</p>
+ </item>
+ <item>
+ <p>
+ Update the error reasons in dist_util, and show them in
+ the logs if net_kernel:verbose(1) has been called.</p>
+ <p>
+ Own Id: OTP-13458</p>
+ </item>
+ <item>
+ <p>
+ Experimental support for Unix Domain Sockets has been
+ implemented. Read the sources if you want to try it out.
+ Example: <c>gen_udp:open(0,
+ [{ifaddr,{local,"/tmp/socket"}}])</c>. Documentation will
+ be written after user feedback on the experimental API.</p>
+ <p>
+ Own Id: OTP-13572 Aux Id: PR-612 </p>
+ </item>
+ <item>
+ <p>
+ Allow heart to be configured to not kill the previous
+ emulator before calling the HEART_COMMAND. This is done
+ by setting the environment variable HEART_NO_KILL to
+ TRUE.</p>
+ <p>
+ Own Id: OTP-13650</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Kernel 4.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -623,8 +820,7 @@
Erlang/OTP has been ported to the realtime operating
system OSE. The port supports both smp and non-smp
emulator. For details around the port and how to started
- see the User's Guide in the <seealso
- marker="ose:ose_intro">ose</seealso> application. </p>
+ see the User's Guide in the ose application. </p>
<p>
Note that not all parts of Erlang/OTP has been ported. </p>
<p>
diff --git a/lib/kernel/doc/src/notes_history.xml b/lib/kernel/doc/src/notes_history.xml
index 97ff3e7400..a6de349311 100644
--- a/lib/kernel/doc/src/notes_history.xml
+++ b/lib/kernel/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/kernel/doc/src/os.xml b/lib/kernel/doc/src/os.xml
index 682d4a2eac..739ac35d2a 100644
--- a/lib/kernel/doc/src/os.xml
+++ b/lib/kernel/doc/src/os.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,97 +29,107 @@
<rev></rev>
</header>
<module>os</module>
- <modulesummary>Operating System Specific Functions</modulesummary>
+ <modulesummary>Operating system-specific functions.</modulesummary>
<description>
- <p>The functions in this module are operating system specific.
- Careless use of these functions will result in programs that will
+ <p>The functions in this module are operating system-specific.
+ Careless use of these functions results in programs that will
only run on a specific platform. On the other hand, with careful
- use these functions can be of help in enabling a program to run on
+ use, these functions can be of help in enabling a program to run on
most platforms.</p>
</description>
+
<funcs>
<func>
<name name="cmd" arity="1"/>
- <fsummary>Execute a command in a shell of the target OS</fsummary>
+ <fsummary>Execute a command in a shell of the target OS.</fsummary>
<desc>
- <p>Executes <c><anno>Command</anno></c> in a command shell of the target OS,
- captures the standard output of the command and returns this
+ <p>Executes <c><anno>Command</anno></c> in a command shell of the
+ target OS,
+ captures the standard output of the command, and returns this
result as a string. This function is a replacement of
- the previous <c>unix:cmd/1</c>; on a Unix platform they are
- equivalent.</p>
- <p>Examples:</p>
+ the previous function <c>unix:cmd/1</c>; they are equivalent on a
+ Unix platform.</p>
+ <p><em>Examples:</em></p>
<code type="none">
LsOut = os:cmd("ls"), % on unix platform
DirOut = os:cmd("dir"), % on Win32 platform</code>
- <p>Note that in some cases, standard output of a command when
+ <p>Notice that in some cases, standard output of a command when
called from another program (for example, <c>os:cmd/1</c>)
- may differ, compared to the standard output of the command
+ can differ, compared with the standard output of the command
when called directly from an OS command shell.</p>
</desc>
</func>
+
<func>
<name name="find_executable" arity="1"/>
<name name="find_executable" arity="2"/>
- <fsummary>Absolute filename of a program</fsummary>
+ <fsummary>Absolute filename of a program.</fsummary>
<desc>
- <p>These two functions look up an executable program given its
- name and a search path, in the same way as the underlying
- operating system. <c>find_executable/1</c> uses the current
- execution path (that is, the environment variable PATH on
+ <p>These two functions look up an executable program, with the
+ specified name and a search path, in the same way as the underlying
+ OS. <c>find_executable/1</c> uses the current
+ execution path (that is, the environment variable <c>PATH</c> on
Unix and Windows).</p>
- <p><c><anno>Path</anno></c>, if given, should conform to the syntax of
- execution paths on the operating system. The absolute
- filename of the executable program <c><anno>Name</anno></c> is returned,
- or <c>false</c> if the program was not found.</p>
+ <p><c><anno>Path</anno></c>, if specified, is to conform to the syntax
+ of execution paths on the OS. Returns the absolute filename of the
+ executable program <c><anno>Name</anno></c>,
+ or <c>false</c> if the program is not found.</p>
</desc>
</func>
+
<func>
<name name="getenv" arity="0"/>
- <fsummary>List all environment variables</fsummary>
+ <fsummary>List all environment variables.</fsummary>
<desc>
<p>Returns a list of all environment variables.
- Each environment variable is given as a single string on
+ Each environment variable is expressed as a single string on
the format <c>"VarName=Value"</c>, where <c>VarName</c> is
the name of the variable and <c>Value</c> its value.</p>
- <p>If Unicode file name encoding is in effect (see the <seealso
- marker="erts:erl#file_name_encoding">erl manual
- page</seealso>), the strings may contain characters with
- codepoints > 255.</p>
+ <p>If Unicode filename encoding is in effect (see the
+ <seealso marker="erts:erl#file_name_encoding"><c>erl</c> manual
+ page</seealso>), the strings can contain characters with
+ codepoints &gt; 255.</p>
</desc>
</func>
+
<func>
<name name="getenv" arity="1"/>
- <fsummary>Get the value of an environment variable</fsummary>
+ <fsummary>Get the value of an environment variable.</fsummary>
<desc>
<p>Returns the <c><anno>Value</anno></c> of the environment variable
- <c><anno>VarName</anno></c>, or <c>false</c> if the environment variable
- is undefined.</p>
- <p>If Unicode file name encoding is in effect (see the <seealso
- marker="erts:erl#file_name_encoding">erl manual
- page</seealso>), the strings (both <c><anno>VarName</anno></c> and
- <c><anno>Value</anno></c>) may contain characters with codepoints > 255.</p>
+ <c><anno>VarName</anno></c>, or <c>false</c> if the environment
+ variable is undefined.</p>
+ <p>If Unicode filename encoding is in effect (see the
+ <seealso marker="erts:erl#file_name_encoding"><c>erl</c> manual
+ page</seealso>), the strings <c><anno>VarName</anno></c> and
+ <c><anno>Value</anno></c> can contain characters with
+ codepoints &gt; 255.</p>
</desc>
</func>
+
<func>
<name name="getenv" arity="2"/>
- <fsummary>Get the value of an environment variable</fsummary>
+ <fsummary>Get the value of an environment variable.</fsummary>
<desc>
<p>Returns the <c><anno>Value</anno></c> of the environment variable
- <c><anno>VarName</anno></c>, or <c>DefaultValue</c> if the environment variable
- is undefined.</p>
- <p>If Unicode file name encoding is in effect (see the <seealso
- marker="erts:erl#file_name_encoding">erl manual
- page</seealso>), the strings (both <c><anno>VarName</anno></c> and
- <c><anno>Value</anno></c>) may contain characters with codepoints > 255.</p>
+ <c><anno>VarName</anno></c>, or <c>DefaultValue</c> if the
+ environment variable is undefined.</p>
+ <p>If Unicode filename encoding is in effect (see the
+ <seealso marker="erts:erl#file_name_encoding"><c>erl</c> manual
+ page</seealso>), the strings <c><anno>VarName</anno></c> and
+ <c><anno>Value</anno></c> can contain characters with
+ codepoints &gt; 255.</p>
</desc>
</func>
+
<func>
<name name="getpid" arity="0"/>
- <fsummary>Return the process identifier of the emulator process</fsummary>
+ <fsummary>Return the process identifier of the emulator
+ process.</fsummary>
<desc>
<p>Returns the process identifier of the current Erlang emulator
- in the format most commonly used by the operating system
- environment. <c><anno>Value</anno></c> is returned as a string containing
+ in the format most commonly used by the OS environment.
+ Returns <c><anno>Value</anno></c> as a string containing
the (usually) numerical identifier for a process. On Unix,
this is typically the return value of the <c>getpid()</c>
system call. On Windows,
@@ -127,125 +137,156 @@ DirOut = os:cmd("dir"), % on Win32 platform</code>
system call is used.</p>
</desc>
</func>
+
<func>
<name name="putenv" arity="2"/>
- <fsummary>Set a new value for an environment variable</fsummary>
+ <fsummary>Set a new value for an environment variable.</fsummary>
<desc>
- <p>Sets a new <c><anno>Value</anno></c> for the environment variable
+ <p>Sets a new <c><anno>Value</anno></c> for environment variable
<c><anno>VarName</anno></c>.</p>
- <p>If Unicode filename encoding is in effect (see the <seealso
- marker="erts:erl#file_name_encoding">erl manual
- page</seealso>), the strings (both <c><anno>VarName</anno></c> and
- <c><anno>Value</anno></c>) may contain characters with codepoints > 255.</p>
- <p>On Unix platforms, the environment will be set using UTF-8 encoding
- if Unicode file name translation is in effect. On Windows the
- environment is set using wide character interfaces.</p>
+ <p>If Unicode filename encoding is in effect (see the
+ <seealso marker="erts:erl#file_name_encoding"><c>erl</c> manual
+ page</seealso>), the strings <c><anno>VarName</anno></c> and
+ <c><anno>Value</anno></c> can contain characters with
+ codepoints &gt; 255.</p>
+ <p>On Unix platforms, the environment is set using UTF-8 encoding
+ if Unicode filename translation is in effect. On Windows, the
+ environment is set using wide character interfaces.</p>
</desc>
</func>
+
<func>
<name name="system_time" arity="0"/>
- <fsummary>Current OS system time</fsummary>
+ <fsummary>Current OS system time.</fsummary>
<desc>
- <p>Returns current
+ <p>Returns the current
<seealso marker="erts:time_correction#OS_System_Time">OS system time</seealso>
in <c>native</c>
<seealso marker="erts:erlang#type_time_unit">time unit</seealso>.</p>
-
- <note><p>This time is <em>not</em> a monotonically increasing time.</p></note>
+ <note><p>This time is <em>not</em> a monotonically increasing time.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="system_time" arity="1"/>
- <fsummary>Current OS system time</fsummary>
+ <fsummary>Current OS system time.</fsummary>
<desc>
- <p>Returns current
+ <p>Returns the current
<seealso marker="erts:time_correction#OS_System_Time">OS system time</seealso>
converted into the <c><anno>Unit</anno></c> passed as argument.</p>
-
- <p>Calling <c>os:system_time(<anno>Unit</anno>)</c> is equivalent to:
- <seealso marker="erts:erlang#convert_time_unit/3"><c>erlang:convert_time_unit</c></seealso><c>(</c><seealso marker="#system_time/0"><c>os:system_time()</c></seealso><c>,
+ <p>Calling <c>os:system_time(<anno>Unit</anno>)</c> is equivalent to
+ <seealso marker="erts:erlang#convert_time_unit/3"><c>erlang:convert_time_unit</c></seealso>(<seealso marker="#system_time/0"><c>os:system_time()</c></seealso><c>,
native, <anno>Unit</anno>)</c>.</p>
-
- <note><p>This time is <em>not</em> a monotonically increasing time.</p></note>
+ <note><p>This time is <em>not</em> a monotonically increasing time.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="timestamp" arity="0"/>
- <fsummary>Current OS system time on the erlang:timestamp/0 format</fsummary>
+ <fsummary>Current OS system time on the <c>erlang:timestamp/0</c> format.</fsummary>
<type_desc variable="Timestamp">Timestamp = {MegaSecs, Secs, MicroSecs}</type_desc>
<desc>
- <p>Returns current
+ <p>Returns the current
<seealso marker="erts:time_correction#OS_System_Time">OS system time</seealso>
- in the same format as <seealso marker="erts:erlang#timestamp/0">erlang:timestamp/0</seealso>.
- The tuple can be used together with the function
- <seealso marker="stdlib:calendar#now_to_universal_time/1">calendar:now_to_universal_time/1</seealso>
- or <seealso marker="stdlib:calendar#now_to_local_time/1">calendar:now_to_local_time/1</seealso> to
- get calendar time. Using the calendar time together with the <c>MicroSecs</c> part of the return
- tuple from this function allows you to log timestamps in high resolution and consistent with the
- time in the rest of the operating system.</p>
- <p>Example of code formatting a string in the format &quot;DD Mon YYYY HH:MM:SS.mmmmmm&quot;, where
- DD is the day of month, Mon is the textual month name, YYYY is the year, HH:MM:SS is the time and
- mmmmmm is the microseconds in six positions:</p>
-<code>
+ in the same format as
+ <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.
+ The tuple can be used together with function
+ <seealso marker="stdlib:calendar#now_to_universal_time/1"><c>calendar:now_to_universal_time/1</c></seealso>
+ or <seealso marker="stdlib:calendar#now_to_local_time/1"><c>calendar:now_to_local_time/1</c></seealso>
+ to get calendar time. Using the calendar time, together with the
+ <c>MicroSecs</c> part of the return tuple from this function, allows
+ you to log time stamps in high resolution and consistent with the
+ time in the rest of the OS.</p>
+ <p>Example of code formatting a string in format
+ &quot;DD Mon YYYY HH:MM:SS.mmmmmm&quot;, where DD is the day of month,
+ Mon is the textual month name, YYYY is the year, HH:MM:SS is the time,
+ and mmmmmm is the microseconds in six positions:</p>
+ <code>
-module(print_time).
-export([format_utc_timestamp/0]).
format_utc_timestamp() ->
TS = {_,_,Micro} = os:timestamp(),
- {{Year,Month,Day},{Hour,Minute,Second}} =
- calendar:now_to_universal_time(TS),
+ {{Year,Month,Day},{Hour,Minute,Second}} =
+calendar:now_to_universal_time(TS),
Mstr = element(Month,{"Jan","Feb","Mar","Apr","May","Jun","Jul",
- "Aug","Sep","Oct","Nov","Dec"}),
+ "Aug","Sep","Oct","Nov","Dec"}),
io_lib:format("~2w ~s ~4w ~2w:~2..0w:~2..0w.~6..0w",
- [Day,Mstr,Year,Hour,Minute,Second,Micro]).
-</code>
-
- <p>The module above could be used in the following way:</p>
-<pre>
+ [Day,Mstr,Year,Hour,Minute,Second,Micro]).</code>
+ <p>This module can be used as follows:</p>
+ <pre>
1> <input>io:format("~s~n",[print_time:format_utc_timestamp()]).</input>
-29 Apr 2009 9:55:30.051711
-</pre>
+29 Apr 2009 9:55:30.051711</pre>
<p>OS system time can also be retreived by
- <seealso marker="#system_time/0"><c>os:system_time/0</c></seealso>,
- and <seealso marker="#system_time/1"><c>os:system_time/1</c></seealso>.</p>
+ <seealso marker="#system_time/0"><c>system_time/0</c></seealso> and
+ <seealso marker="#system_time/1"><c>system_time/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="perf_counter" arity="0"/>
+ <fsummary>Returns a performance counter</fsummary>
+ <desc>
+ <p>Returns the current performance counter value in <c>perf_counter</c>
+ <seealso marker="erts:erlang#type_time_unit">time unit</seealso>.
+ This is a highly optimized call that might not be traceable.
+ </p>
+ </desc>
+ </func>
+ <func>
+ <name name="perf_counter" arity="1"/>
+ <fsummary>Returns a performance counter</fsummary>
+ <desc><p>Returns a performance counter that can be used as a very fast and
+ high resolution timestamp. This counter is read directly from the hardware or operating
+ system with the same guarantees. This means that two consecutive calls
+ to the function are not guaranteed to be monotonic, though it most likely will be.
+ The performance counter will be converted to the resolution passed as an argument.</p>
+ <pre>1> <input>T1 = os:perf_counter(1000),receive after 10000 -> ok end,T2 = os:perf_counter(1000).</input>
+176525861
+2> <input>T2 - T1.</input>
+10004</pre>
</desc>
</func>
<func>
<name name="type" arity="0"/>
- <fsummary>Return the OS family and, in some cases, OS name of the current operating system</fsummary>
+ <fsummary>Return the OS family and, in some cases, the OS name of the
+ current OS.</fsummary>
<desc>
- <p>Returns the <c><anno>Osfamily</anno></c> and, in some cases, <c><anno>Osname</anno></c>
- of the current operating system.</p>
- <p>On Unix, <c><anno>Osname</anno></c> will have same value as
+ <p>Returns the <c><anno>Osfamily</anno></c> and, in some cases, the
+ <c><anno>Osname</anno></c> of the current OS.</p>
+ <p>On Unix, <c><anno>Osname</anno></c> has the same value as
<c>uname -s</c> returns, but in lower case. For example, on
- Solaris 1 and 2, it will be <c>sunos</c>.</p>
- <p>In Windows, <c><anno>Osname</anno></c> will be either <c>nt</c> (on
- Windows NT), or <c>windows</c> (on Windows 95).</p>
+ Solaris 1 and 2, it is <c>sunos</c>.</p>
+ <p>On Windows, <c><anno>Osname</anno></c> is <c>nt</c>.</p>
<note>
- <p>Think twice before using this function. Use the
- <c>filename</c> module if you want to inspect or build
- file names in a portable way.
- Avoid matching on the <c><anno>Osname</anno></c> atom.</p>
+ <p>Think twice before using this function. Use module
+ <seealso marker="stdlib:filename"><c>filename</c></seealso>
+ if you want to inspect or build filenames in a portable way.
+ Avoid matching on atom <c><anno>Osname</anno></c>.</p>
</note>
</desc>
</func>
+
<func>
<name name="unsetenv" arity="1"/>
- <fsummary>Delete an environment variable</fsummary>
+ <fsummary>Delete an environment variable.</fsummary>
<desc>
<p>Deletes the environment variable <c><anno>VarName</anno></c>.</p>
- <p>If Unicode filename encoding is in effect (see the <seealso
- marker="erts:erl#file_name_encoding">erl manual
- page</seealso>), the string (<c><anno>VarName</anno></c>) may
- contain characters with codepoints > 255.</p>
+ <p>If Unicode filename encoding is in effect (see the
+ <seealso marker="erts:erl#file_name_encoding"><c>erl</c> manual
+ page</seealso>), the string <c><anno>VarName</anno></c> can
+ contain characters with codepoints &gt; 255.</p>
</desc>
</func>
+
<func>
<name name="version" arity="0"/>
- <fsummary>Return the Operating System version</fsummary>
+ <fsummary>Return the OS versions.</fsummary>
<desc>
- <p>Returns the operating system version.
+ <p>Returns the OS version.
On most systems, this function returns a tuple, but a string
- will be returned instead if the system has versions which
+ is returned instead if the system has versions that
cannot be expressed as three numbers.</p>
<note>
<p>Think twice before using this function. If you still need
diff --git a/lib/kernel/doc/src/part_notes.xml b/lib/kernel/doc/src/part_notes.xml
index ec19cfa80d..5e849039ee 100644
--- a/lib/kernel/doc/src/part_notes.xml
+++ b/lib/kernel/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/kernel/doc/src/part_notes_history.xml b/lib/kernel/doc/src/part_notes_history.xml
index 87c32c3fba..0cf7b793da 100644
--- a/lib/kernel/doc/src/part_notes_history.xml
+++ b/lib/kernel/doc/src/part_notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/kernel/doc/src/pg2.xml b/lib/kernel/doc/src/pg2.xml
index 8c2fdb4cd3..0631b317b4 100644
--- a/lib/kernel/doc/src/pg2.xml
+++ b/lib/kernel/doc/src/pg2.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,135 +30,136 @@
<checked>[email protected]</checked>
<date>1997-08-18</date>
<rev>A2</rev>
- <file>pg2.sgml</file>
+ <file>pg2.xml</file>
</header>
<module>pg2</module>
- <modulesummary>Distributed Named Process Groups</modulesummary>
+ <modulesummary>Distributed named process groups.</modulesummary>
<description>
- <p>This module implements process groups. Each message may be sent
- to one, some, or all members of the group.
- </p>
+ <p>This module implements process groups. Each message can be sent
+ to one, some, or all group members.</p>
<p>A group of processes can be accessed by a common name. For
example, if there is a group named <c>foobar</c>, there can be a
- set of processes (which can be located on different nodes) which
+ set of processes (which can be located on different nodes) that
are all members of the group <c>foobar</c>. There are no special
functions for sending a message to the group. Instead, client
- functions should be written with the functions
- <c>get_members/1</c> and <c>get_local_members/1</c> to find out
- which processes are members of the group. Then the message can be
- sent to one or more members of the group.
- </p>
- <p>If a member terminates, it is automatically removed from the
- group.
- </p>
+ functions are to be written with the functions
+ <seealso marker="#get_members/1"><c>get_members/1</c></seealso> and
+ <seealso marker="#get_local_members/1"><c>get_local_members/1</c></seealso>
+ to determine which processes are members of the group.
+ Then the message can be sent to one or more group members.</p>
+ <p>If a member terminates, it is automatically removed from the group.</p>
<warning>
- <p>This module is used by the <c>disk_log</c> module for
+ <p>This module is used by module
+ <seealso marker="disk_log"><c>disk_log</c></seealso> for
managing distributed disk logs. The disk log names are used as
- group names, which means that some action may need to be taken
+ group names, which means that some action can be needed
to avoid name clashes.</p>
</warning>
</description>
+
<datatypes>
<datatype>
<name name="name"/>
<desc><p>The name of a process group.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="create" arity="1"/>
- <fsummary>Create a new, empty process group</fsummary>
+ <fsummary>Create a new, empty process group.</fsummary>
<desc>
<p>Creates a new, empty process group. The group is globally
- visible on all nodes. If the group exists, nothing happens.
- </p>
+ visible on all nodes. If the group exists, nothing happens.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="1"/>
- <fsummary>Delete a process group</fsummary>
+ <fsummary>Delete a process group.</fsummary>
<desc>
- <p>Deletes a process group.
- </p>
+ <p>Deletes a process group.</p>
</desc>
</func>
+
<func>
<name name="get_closest_pid" arity="1"/>
- <fsummary>Common dispatch function</fsummary>
+ <fsummary>Common dispatch function.</fsummary>
<desc>
- <p>This is a useful dispatch function which can be used from
+ <p>A useful dispatch function that can be used from
client functions. It returns a process on the local node, if
- such a process exist. Otherwise, it chooses one randomly.
- </p>
+ such a process exists. Otherwise, it selects one randomly.</p>
</desc>
</func>
+
<func>
- <name name="get_members" arity="1"/>
- <fsummary>Return all processes in a group</fsummary>
+ <name name="get_local_members" arity="1"/>
+ <fsummary>Return all local processes in a group.</fsummary>
<desc>
- <p>Returns all processes in the group <c>Name</c>. This
- function should be used from within a client function that
- accesses the group. It is therefore optimized for speed.
- </p>
+ <p>Returns all processes running on the local node in the
+ group <c>Name</c>. This function is to be used from
+ within a client function that accesses the group. It is therefore
+ optimized for speed.</p>
</desc>
</func>
+
<func>
- <name name="get_local_members" arity="1"/>
- <fsummary>Return all local processes in a group</fsummary>
+ <name name="get_members" arity="1"/>
+ <fsummary>Return all processes in a group.</fsummary>
<desc>
- <p>Returns all processes running on the local node in the
- group <c>Name</c>. This function should to be used from
- within a client function that accesses the group. It is therefore
- optimized for speed.
- </p>
+ <p>Returns all processes in the group <c>Name</c>. This
+ function is to be used from within a client function that
+ accesses the group. It is therefore optimized for speed.</p>
</desc>
</func>
+
<func>
<name name="join" arity="2"/>
- <fsummary>Join a process to a group</fsummary>
+ <fsummary>Join a process to a group.</fsummary>
<desc>
<p>Joins the process <c>Pid</c> to the group <c>Name</c>.
- A process can join a group several times; it must then
- leave the group the same number of times.
- </p>
+ A process can join a group many times and must then
+ leave the group the same number of times.</p>
</desc>
</func>
+
<func>
<name name="leave" arity="2"/>
- <fsummary>Make a process leave a group</fsummary>
+ <fsummary>Make a process leave a group.</fsummary>
<desc>
<p>Makes the process <c>Pid</c> leave the group <c>Name</c>.
If the process is not a member of the group, <c>ok</c> is
- returned.
- </p>
- </desc>
- </func>
- <func>
- <name name="which_groups" arity="0"/>
- <fsummary>Return a list of all known groups</fsummary>
- <desc>
- <p>Returns a list of all known groups.
- </p>
+ returned.</p>
</desc>
</func>
+
<func>
<name name="start" arity="0"/>
<name name="start_link" arity="0"/>
- <fsummary>Start the pg2 server</fsummary>
+ <fsummary>Start the <c>pg2</c> server.</fsummary>
<desc>
- <p>Starts the pg2 server. Normally, the server does not need
+ <p>Starts the <c>pg2</c> server. Normally, the server does not need
to be started explicitly, as it is started dynamically if it
is needed. This is useful during development, but in a
- target system the server should be started explicitly. Use
- configuration parameters for <c>kernel</c> for this.
- </p>
+ target system the server is to be started explicitly. Use the
+ configuration parameters for
+ <seealso marker="kernel_app#start_pg2"><c>kernel(6)</c></seealso>
+ for this.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="which_groups" arity="0"/>
+ <fsummary>Return a list of all known groups.</fsummary>
+ <desc>
+ <p>Returns a list of all known groups.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="kernel_app">kernel(6)</seealso></p>
+ <p><seealso marker="kernel_app"><c>kernel(6)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/ref_man.xml b/lib/kernel/doc/src/ref_man.xml
index 7eb48a5f1d..5cd77e0f6f 100644
--- a/lib/kernel/doc/src/ref_man.xml
+++ b/lib/kernel/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,9 +29,7 @@
<rev></rev>
</header>
<description>
- <p>The <em>Kernel</em> application has all the code necessary to run
- the Erlang runtime system itself: file servers and code servers
- and so on.</p>
+
</description>
<xi:include href="kernel_app.xml"/>
<xi:include href="application.xml"/>
@@ -45,9 +43,9 @@
<xi:include href="error_handler.xml"/>
<xi:include href="error_logger.xml"/>
<xi:include href="file.xml"/>
+ <xi:include href="gen_sctp.xml"/>
<xi:include href="gen_tcp.xml"/>
<xi:include href="gen_udp.xml"/>
- <xi:include href="gen_sctp.xml"/>
<xi:include href="global.xml"/>
<xi:include href="global_group.xml"/>
<xi:include href="heart.xml"/>
diff --git a/lib/kernel/doc/src/ref_man.xml.src b/lib/kernel/doc/src/ref_man.xml.src
deleted file mode 100644
index 7eb48a5f1d..0000000000
--- a/lib/kernel/doc/src/ref_man.xml.src
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Kernel Reference Manual</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The <em>Kernel</em> application has all the code necessary to run
- the Erlang runtime system itself: file servers and code servers
- and so on.</p>
- </description>
- <xi:include href="kernel_app.xml"/>
- <xi:include href="application.xml"/>
- <xi:include href="auth.xml"/>
- <xi:include href="code.xml"/>
- <xi:include href="disk_log.xml"/>
- <xi:include href="erl_boot_server.xml"/>
- <xi:include href="erl_ddll.xml"/>
- <xi:include href="erl_prim_loader_stub.xml"/>
- <xi:include href="erlang_stub.xml"/>
- <xi:include href="error_handler.xml"/>
- <xi:include href="error_logger.xml"/>
- <xi:include href="file.xml"/>
- <xi:include href="gen_tcp.xml"/>
- <xi:include href="gen_udp.xml"/>
- <xi:include href="gen_sctp.xml"/>
- <xi:include href="global.xml"/>
- <xi:include href="global_group.xml"/>
- <xi:include href="heart.xml"/>
- <xi:include href="inet.xml"/>
- <xi:include href="inet_res.xml"/>
- <xi:include href="init_stub.xml"/>
- <xi:include href="net_adm.xml"/>
- <xi:include href="net_kernel.xml"/>
- <xi:include href="os.xml"/>
- <xi:include href="pg2.xml"/>
- <xi:include href="rpc.xml"/>
- <xi:include href="seq_trace.xml"/>
- <xi:include href="user.xml"/>
- <xi:include href="wrap_log_reader.xml"/>
- <xi:include href="zlib_stub.xml"/>
- <xi:include href="app.xml"/>
- <xi:include href="config.xml"/>
-</application>
diff --git a/lib/kernel/doc/src/rpc.xml b/lib/kernel/doc/src/rpc.xml
index c323a84e50..8cad9fe4fc 100644
--- a/lib/kernel/doc/src/rpc.xml
+++ b/lib/kernel/doc/src/rpc.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -25,328 +25,388 @@
<title>rpc</title>
<prepared>Claes Wikstrom</prepared>
<docno>1</docno>
- <date>96-09-10</date>
+ <date>1996-09-10</date>
<rev>A</rev>
</header>
<module>rpc</module>
- <modulesummary>Remote Procedure Call Services</modulesummary>
+ <modulesummary>Remote Procedure Call services.</modulesummary>
<description>
- <p>This module contains services which are similar to remote
- procedure calls. It also contains broadcast facilities and
+ <p>This module contains services similar to Remote
+ Procedure Calls. It also contains broadcast facilities and
parallel evaluators. A remote procedure call is a method to call
a function on a remote node and collect the answer. It is used
for collecting information on a remote node, or for running a
function with some specific side effects on the remote node.</p>
</description>
+
<datatypes>
<datatype>
<name name="key"/>
<desc>
- <p>As returned by <seealso marker="#async_call/4">
- <c>async_call/4</c>.</seealso></p>
+ <p>As returned by
+ <seealso marker="#async_call/4"><c>async_call/4</c></seealso>.</p>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="call" arity="4"/>
- <fsummary>Evaluate a function call on a node</fsummary>
+ <name name="abcast" arity="2"/>
+ <fsummary>Broadcast a message asynchronously to a registered process on
+ all nodes.</fsummary>
<desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c> on the node
- <c><anno>Node</anno></c> and returns the corresponding value <c><anno>Res</anno></c>, or
- <c>{badrpc, <anno>Reason</anno>}</c> if the call fails.</p>
+ <p>Equivalent to <c>abcast([node()|nodes()], <anno>Name</anno>,
+ <anno>Msg</anno>)</c>.</p>
</desc>
</func>
+
<func>
- <name name="call" arity="5"/>
- <fsummary>Evaluate a function call on a node</fsummary>
+ <name name="abcast" arity="3"/>
+ <fsummary>Broadcast a message asynchronously to a registered process on
+ specific nodes.</fsummary>
<desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c> on the node
- <c><anno>Node</anno></c> and returns the corresponding value <c><anno>Res</anno></c>, or
- <c>{badrpc, <anno>Reason</anno>}</c> if the call fails. <c><anno>Timeout</anno></c> is
- a timeout value in milliseconds. If the call times out,
- <c><anno>Reason</anno></c> is <c>timeout</c>.</p>
- <p>If the reply arrives after the call times out, no message
- will contaminate the caller's message queue, since this
- function spawns off a middleman process to act as (a void)
- destination for such an orphan reply. This feature also makes
- this function more expensive than <c>call/4</c> at
- the caller's end.</p>
+ <p>Broadcasts the message <c><anno>Msg</anno></c> asynchronously to
+ the registered process <c><anno>Name</anno></c> on the specified
+ nodes.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="async_call" arity="4"/>
+ <fsummary>Evaluate a function call on a node, asynchronous
+ version.</fsummary>
+ <desc>
+ <p>Implements <em>call streams with promises</em>, a type of
+ RPC that does not suspend the caller until the result is
+ finished. Instead, a key is returned, which can be used
+ later to collect the value. The key can be viewed as a
+ promise to deliver the answer.</p>
+ <p>In this case, the key <c><anno>Key</anno></c> is returned, which
+ can be used in a subsequent call to
+ <seealso marker="#yield/1"><c>yield/1</c></seealso> or
+ <seealso marker="#nb_yield/1"><c>nb_yield/1,2</c></seealso>
+ to retrieve the value of evaluating <c>apply(<anno>Module</anno>,
+ <anno>Function</anno>, <anno>Args</anno>)</c> on node
+ <c><anno>Node</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="block_call" arity="4"/>
- <fsummary>Evaluate a function call on a node in the RPC server's context</fsummary>
+ <fsummary>Evaluate a function call on a node in the RPC server's
+ context.</fsummary>
<desc>
- <p>Like <c>call/4</c>, but the RPC server at <c><anno>Node</anno></c> does
+ <p>Same as <seealso marker="#call/4"><c>call/4</c></seealso>,
+ but the RPC server at <c><anno>Node</anno></c> does
not create a separate process to handle the call. Thus,
this function can be used if the intention of the call is to
block the RPC server from any other incoming requests until
- the request has been handled. The function can also be used
+ the request has been handled. The function can also be used
for efficiency reasons when very small fast functions are
- evaluated, for example BIFs that are guaranteed not to
+ evaluated, for example, BIFs that are guaranteed not to
suspend.</p>
</desc>
</func>
+
<func>
<name name="block_call" arity="5"/>
- <fsummary>Evaluate a function call on a node in the RPC server's context</fsummary>
+ <fsummary>Evaluate a function call on a node in the RPC server's
+ context.</fsummary>
<desc>
- <p>Like <c>block_call/4</c>, but with a timeout value in
- the same manner as <c>call/5</c>.</p>
+ <p>Same as
+ <seealso marker="#block_call/4"><c>block_call/4</c></seealso>,
+ but with a time-out value in the same manner as
+ <seealso marker="#call/5"><c>call/5</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="async_call" arity="4"/>
- <fsummary>Evaluate a function call on a node, asynchronous version</fsummary>
+ <name name="call" arity="4"/>
+ <fsummary>Evaluate a function call on a node.</fsummary>
<desc>
- <p>Implements <em>call streams with promises</em>, a type of
- RPC which does not suspend the caller until the result is
- finished. Instead, a key is returned which can be used at a
- later stage to collect the value. The key can be viewed as a
- promise to deliver the answer.</p>
- <p>In this case, the key <c><anno>Key</anno></c> is returned, which can be
- used in a subsequent call to <c>yield/1</c> or
- <c>nb_yield/1,2</c> to retrieve the value of evaluating
- <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c> on the node <c><anno>Node</anno></c>.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Args</anno>)</c> on node <c><anno>Node</anno></c> and returns
+ the corresponding value <c><anno>Res</anno></c>, or
+ <c>{badrpc, <anno>Reason</anno>}</c> if the call fails.</p>
</desc>
</func>
+
<func>
- <name name="yield" arity="1"/>
- <fsummary>Deliver the result of evaluating a function call on a node (blocking)</fsummary>
+ <name name="call" arity="5"/>
+ <fsummary>Evaluate a function call on a node.</fsummary>
<desc>
- <p>Returns the promised answer from a previous
- <c>async_call/4</c>. If the answer is available, it is
- returned immediately. Otherwise, the calling process is
- suspended until the answer arrives from <c>Node</c>.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Args</anno>)</c> on node <c><anno>Node</anno></c> and returns
+ the corresponding value <c><anno>Res</anno></c>, or
+ <c>{badrpc, <anno>Reason</anno>}</c> if the call fails.
+ <c><anno>Timeout</anno></c> is
+ a time-out value in milliseconds. If the call times out,
+ <c><anno>Reason</anno></c> is <c>timeout</c>.</p>
+ <p>If the reply arrives after the call times out, no message
+ contaminates the caller's message queue, as this
+ function spawns off a middleman process to act as (a void)
+ destination for such an orphan reply. This feature also makes
+ this function more expensive than <c>call/4</c> at
+ the caller's end.</p>
</desc>
</func>
+
<func>
- <name name="nb_yield" arity="1"/>
- <fsummary>Deliver the result of evaluating a function call on a node (non-blocking)</fsummary>
+ <name name="cast" arity="4"/>
+ <fsummary>Run a function on a node ignoring the result.</fsummary>
<desc>
- <p>Equivalent to <c>nb_yield(<anno>Key</anno>, 0)</c>.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Args</anno>)</c> on node
+ <c><anno>Node</anno></c>. No response is delivered and the calling
+ process is not suspended until the evaluation is complete, as
+ is the case with
+ <seealso marker="#call/4"><c>call/4,5</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="nb_yield" arity="2"/>
- <fsummary>Deliver the result of evaluating a function call on a node (non-blocking)</fsummary>
+ <name name="eval_everywhere" arity="3"/>
+ <fsummary>Run a function on all nodes, ignoring the result.</fsummary>
<desc>
- <p>This is a non-blocking version of <c>yield/1</c>. It returns
- the tuple <c>{value, <anno>Val</anno>}</c> when the computation has
- finished, or <c>timeout</c> when <c><anno>Timeout</anno></c> milliseconds
- has elapsed.</p>
+ <p>Equivalent to <c>eval_everywhere([node()|nodes()],
+ <anno>Module</anno>, <anno>Function</anno>,
+ <anno>Args</anno>)</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="eval_everywhere" arity="4"/>
+ <fsummary>Run a function on specific nodes, ignoring the
+ result.</fsummary>
+ <desc>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Args</anno>)</c> on
+ the specified nodes. No answers are collected.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="multi_server_call" arity="2"/>
+ <fsummary>Interact with the servers on a number of nodes.</fsummary>
+ <desc>
+ <p>Equivalent to <c>multi_server_call([node()|nodes()],
+ <anno>Name</anno>, <anno>Msg</anno>)</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="multi_server_call" arity="3"/>
+ <fsummary>Interact with the servers on a number of nodes.</fsummary>
+ <desc>
+ <p>Can be used when interacting with servers called
+ <c><anno>Name</anno></c> on the specified nodes. It is assumed that
+ the servers receive messages in the format
+ <c>{From, <anno>Msg</anno>}</c> and reply using
+ <c>From ! {<anno>Name</anno>, Node, <anno>Reply</anno>}</c>, where
+ <c>Node</c> is the name of the node where the server is located.
+ The function returns <c>{<anno>Replies</anno>,
+ <anno>BadNodes</anno>}</c>, where <c><anno>Replies</anno></c> is a
+ list of all <c><anno>Reply</anno></c> values, and
+ <c><anno>BadNodes</anno></c> is one of the following:</p>
+ <list type="bulleted">
+ <item>A list of the nodes that do not exist</item>
+ <item>A list of the nodes where the server does not exist</item>
+ <item>A list of the nodes where the server terminatd before sending
+ any reply.</item>
+ </list>
+ </desc>
+ </func>
+
<func>
<name name="multicall" arity="3"/>
- <fsummary>Evaluate a function call on a number of nodes</fsummary>
+ <fsummary>Evaluate a function call on a number of nodes.</fsummary>
<desc>
- <p>Equivalent to <c>multicall([node()|nodes()], <anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>, infinity)</c>.</p>
+ <p>Equivalent to <c>multicall([node()|nodes()], <anno>Module</anno>,
+ <anno>Function</anno>, <anno>Args</anno>, infinity)</c>.</p>
</desc>
</func>
+
<func>
<name name="multicall" arity="4" clause_i="1"/>
- <fsummary>Evaluate a function call on a number of nodes</fsummary>
+ <fsummary>Evaluate a function call on a number of nodes.</fsummary>
<desc>
- <p>Equivalent to <c>multicall(<anno>Nodes</anno>, <anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>, infinity)</c>.</p>
+ <p>Equivalent to <c>multicall(<anno>Nodes</anno>, <anno>Module</anno>,
+ <anno>Function</anno>, <anno>Args</anno>, infinity)</c>.</p>
</desc>
</func>
+
<func>
<name name="multicall" arity="4" clause_i="2"/>
- <fsummary>Evaluate a function call on a number of nodes</fsummary>
+ <fsummary>Evaluate a function call on a number of nodes.</fsummary>
<desc>
- <p>Equivalent to <c>multicall([node()|nodes()], <anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>, <anno>Timeout</anno>)</c>.</p>
+ <p>Equivalent to <c>multicall([node()|nodes()], <anno>Module</anno>,
+ <anno>Function</anno>, <anno>Args</anno>,
+ <anno>Timeout</anno>)</c>.</p>
</desc>
</func>
+
<func>
<name name="multicall" arity="5"/>
- <fsummary>Evaluate a function call on a number of nodes</fsummary>
+ <fsummary>Evaluate a function call on a number of nodes.</fsummary>
<desc>
- <p>In contrast to an RPC, a multicall is an RPC which is sent
+ <p>In contrast to an RPC, a multicall is an RPC that is sent
concurrently from one client to multiple servers. This is
- useful for collecting some information from a set of nodes,
+ useful for collecting information from a set of nodes,
or for calling a function on a set of nodes to achieve some
side effects. It is semantically the same as iteratively
making a series of RPCs on all the nodes, but the multicall
- is faster as all the requests are sent at the same time
+ is faster, as all the requests are sent at the same time
and are collected one by one as they come back.</p>
- <p>The function evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c>
- on the specified nodes and collects the answers. It returns
- <c>{<anno>ResL</anno>, <anno>BadNodes</anno>}</c>, where <c><anno>BadNodes</anno></c> is a list
+ <p>The function evaluates <c>apply(<anno>Module</anno>,
+ <anno>Function</anno>, <anno>Args</anno>)</c>
+ on the specified nodes and collects the answers. It returns
+ <c>{<anno>ResL</anno>, <anno>BadNodes</anno>}</c>, where
+ <c><anno>BadNodes</anno></c> is a list
of the nodes that terminated or timed out during computation,
and <c><anno>ResL</anno></c> is a list of the return values.
<c><anno>Timeout</anno></c> is a time (integer) in milliseconds, or
<c>infinity</c>.</p>
<p>The following example is useful when new object code is to
- be loaded on all nodes in the network, and also indicates
- some side effects RPCs may produce:</p>
+ be loaded on all nodes in the network, and indicates
+ some side effects that RPCs can produce:</p>
<code type="none">
-%% Find object code for module Mod
-{Mod, Bin, File} = code:get_object_code(Mod),
+%% Find object code for module Mod
+{Mod, Bin, File} = code:get_object_code(Mod),
-%% and load it on all nodes including this one
+%% and load it on all nodes including this one
{ResL, _} = rpc:multicall(code, load_binary, [Mod, File, Bin]),
%% and then maybe check the ResL list.</code>
</desc>
</func>
+
<func>
- <name name="cast" arity="4"/>
- <fsummary>Run a function on a node ignoring the result</fsummary>
+ <name name="nb_yield" arity="1"/>
+ <fsummary>Deliver the result of evaluating a function call on a node
+ (non-blocking).</fsummary>
<desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c> on the node
- <c><anno>Node</anno></c>. No response is delivered and the calling
- process is not suspended until the evaluation is complete, as
- is the case with <c>call/4,5</c>.</p>
+ <p>Equivalent to <c>nb_yield(<anno>Key</anno>, 0)</c>.</p>
</desc>
</func>
+
<func>
- <name name="eval_everywhere" arity="3"/>
- <fsummary>Run a function on all nodes, ignoring the result</fsummary>
+ <name name="nb_yield" arity="2"/>
+ <fsummary>Deliver the result of evaluating a function call on a node
+ (non-blocking).</fsummary>
<desc>
- <p>Equivalent to <c>eval_everywhere([node()|nodes()], <anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c>.</p>
+ <p>Non-blocking version of
+ <seealso marker="#yield/1"><c>yield/1</c></seealso>. It returns
+ the tuple <c>{value, <anno>Val</anno>}</c> when the computation is
+ finished, or <c>timeout</c> when <c><anno>Timeout</anno></c>
+ milliseconds has elapsed.</p>
</desc>
</func>
+
<func>
- <name name="eval_everywhere" arity="4"/>
- <fsummary>Run a function on specific nodes, ignoring the result</fsummary>
+ <name name="parallel_eval" arity="1"/>
+ <fsummary>Evaluate many function calls on all nodes in
+ parallel.</fsummary>
<desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c> on
- the specified nodes. No answers are collected.</p>
+ <p>Evaluates, for every tuple in <c><anno>FuncCalls</anno></c>,
+ <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Args</anno>)</c> on some node in
+ the network. Returns the list of return values, in the same
+ order as in <c><anno>FuncCalls</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="abcast" arity="2"/>
- <fsummary>Broadcast a message asynchronously to a registered process on all nodes</fsummary>
+ <name name="pinfo" arity="1"/>
+ <fsummary>Information about a process.</fsummary>
<desc>
- <p>Equivalent to <c>abcast([node()|nodes()], <anno>Name</anno>, <anno>Msg</anno>)</c>.</p>
+ <p>Location transparent version of the BIF
+ <seealso marker="erts:erlang#process_info/1"><c>erlang:process_info/1</c></seealso> in <c>ERTS</c>.</p>
</desc>
</func>
+
<func>
- <name name="abcast" arity="3"/>
- <fsummary>Broadcast a message asynchronously to a registered process on specific nodes</fsummary>
+ <name name="pinfo" arity="2" clause_i="1"/>
+ <name name="pinfo" arity="2" clause_i="2"/>
+ <fsummary>Information about a process.</fsummary>
<desc>
- <p>Broadcasts the message <c><anno>Msg</anno></c> asynchronously to
- the registered process <c><anno>Name</anno></c> on the specified nodes.</p>
+ <p>Location transparent version of the BIF
+ <seealso marker="erts:erlang#process_info/2"><c>erlang:process_info/2</c></seealso> in <c>ERTS</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="pmap" arity="3"/>
+ <fsummary>Parallell evaluation of mapping a function over a
+ list.</fsummary>
+ <desc>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ [<anno>Elem</anno>|<anno>ExtraArgs</anno>])</c> for every element
+ <c><anno>Elem</anno></c> in <c><anno>List1</anno></c>, in parallel.
+ Returns the list of return values, in the same order as in
+ <c><anno>List1</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="sbcast" arity="2"/>
- <fsummary>Broadcast a message synchronously to a registered process on all nodes</fsummary>
+ <fsummary>Broadcast a message synchronously to a registered process on
+ all nodes.</fsummary>
<desc>
- <p>Equivalent to <c>sbcast([node()|nodes()], <anno>Name</anno>, <anno>Msg</anno>)</c>.</p>
+ <p>Equivalent to <c>sbcast([node()|nodes()], <anno>Name</anno>,
+ <anno>Msg</anno>)</c>.</p>
</desc>
</func>
+
<func>
<name name="sbcast" arity="3"/>
- <fsummary>Broadcast a message synchronously to a registered process on specific nodes</fsummary>
+ <fsummary>Broadcast a message synchronously to a registered process on
+ specific nodes.</fsummary>
<desc>
<p>Broadcasts the message <c><anno>Msg</anno></c> synchronously to
- the registered process <c><anno>Name</anno></c> on the specified nodes.</p>
- <p>Returns <c>{<anno>GoodNodes</anno>, <anno>BadNodes</anno>}</c>, where <c><anno>GoodNodes</anno></c>
- is the list of nodes which have <c><anno>Name</anno></c> as a registered
- process.</p>
+ the registered process <c><anno>Name</anno></c> on the specified
+ nodes.</p>
+ <p>Returns <c>{<anno>GoodNodes</anno>, <anno>BadNodes</anno>}</c>,
+ where <c><anno>GoodNodes</anno></c> is the list of nodes that have
+ <c><anno>Name</anno></c> as a registered process.</p>
<p>The function is synchronous in the sense that it is known
that all servers have received the message when the call
returns. It is not possible to know that the servers have
- actually processed the message.</p>
+ processed the message.</p>
<p>Any further messages sent to the servers, after this
- function has returned, will be received by all servers after
+ function has returned, are received by all servers after
this message.</p>
</desc>
</func>
+
<func>
<name name="server_call" arity="4"/>
- <fsummary>Interact with a server on a node</fsummary>
+ <fsummary>Interact with a server on a node.</fsummary>
<desc>
- <p>This function can be used when interacting with a server
- called <c><anno>Name</anno></c> at node <c><anno>Node</anno></c>. It is assumed that
- the server receives messages in the format
- <c>{From, <anno>Msg</anno>}</c> and replies using <c>From ! {<anno>ReplyWrapper</anno>, <anno>Node</anno>, <anno>Reply</anno>}</c>. This function makes such
+ <p>Can be used when interacting with a server called
+ <c><anno>Name</anno></c> on node <c><anno>Node</anno></c>. It is
+ assumed that the server receives messages in the format
+ <c>{From, <anno>Msg</anno>}</c> and replies using
+ <c>From ! {<anno>ReplyWrapper</anno>, <anno>Node</anno>,
+ <anno>Reply</anno>}</c>. This function makes such
a server call and ensures that the entire call is packed into
- an atomic transaction which either succeeds or fails. It
+ an atomic transaction, which either succeeds or fails. It
never hangs, unless the server itself hangs.</p>
- <p>The function returns the answer <c><anno>Reply</anno></c> as produced by
- the server <c><anno>Name</anno></c>, or <c>{error, <anno>Reason</anno>}</c>.</p>
- </desc>
- </func>
- <func>
- <name name="multi_server_call" arity="2"/>
- <fsummary>Interact with the servers on a number of nodes</fsummary>
- <desc>
- <p>Equivalent to <c>multi_server_call([node()|nodes()], <anno>Name</anno>, <anno>Msg</anno>)</c>.</p>
- </desc>
- </func>
- <func>
- <name name="multi_server_call" arity="3"/>
- <fsummary>Interact with the servers on a number of nodes</fsummary>
- <desc>
- <p>This function can be used when interacting with servers
- called <c><anno>Name</anno></c> on the specified nodes. It is assumed that
- the servers receive messages in the format <c>{From, <anno>Msg</anno>}</c>
- and reply using <c>From ! {<anno>Name</anno>, Node, <anno>Reply</anno>}</c>, where
- <c>Node</c> is the name of the node where the server is
- located. The function returns <c>{<anno>Replies</anno>, <anno>BadNodes</anno>}</c>,
- where <c><anno>Replies</anno></c> is a list of all <c><anno>Reply</anno></c> values and
- <c><anno>BadNodes</anno></c> is a list of the nodes which did not exist, or
- where the server did not exist, or where the server terminated
- before sending any reply.</p>
- </desc>
- </func>
- <func>
- <name name="safe_multi_server_call" arity="2"/>
- <name name="safe_multi_server_call" arity="3"/>
- <fsummary>Interact with the servers on a number of nodes (deprecated)</fsummary>
- <desc>
- <warning>
- <p>This function is deprecated. Use
- <c>multi_server_call/2,3</c> instead.</p>
- </warning>
- <p>In Erlang/OTP R6B and earlier releases,
- <c>multi_server_call/2,3</c> could not handle the case
- where the remote node exists, but there is no server called
- <c><anno>Name</anno></c>. Instead this function had to be used. In
- Erlang/OTP R7B and later releases, however, the functions are
- equivalent, except for this function being slightly slower.</p>
- </desc>
- </func>
- <func>
- <name name="parallel_eval" arity="1"/>
- <fsummary>Evaluate several function calls on all nodes in parallel</fsummary>
- <desc>
- <p>For every tuple in <c><anno>FuncCalls</anno></c>, evaluates
- <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c> on some node in
- the network. Returns the list of return values, in the same
- order as in <c><anno>FuncCalls</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="pmap" arity="3"/>
- <fsummary>Parallell evaluation of mapping a function over a list </fsummary>
- <desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, [<anno>Elem</anno>|<anno>ExtraArgs</anno>])</c>,
- for every element <c><anno>Elem</anno></c> in <c><anno>List1</anno></c>, in parallel.
- Returns the list of return values, in the same order as in
- <c><anno>List1</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="pinfo" arity="1"/>
- <fsummary>Information about a process</fsummary>
- <desc>
- <p>Location transparent version of the BIF
- <seealso marker="erts:erlang#process_info/1">
- <c>process_info/1</c></seealso>.</p>
+ <p>The function returns the answer <c><anno>Reply</anno></c> as
+ produced by the server <c><anno>Name</anno></c>, or
+ <c>{error, <anno>Reason</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="pinfo" arity="2"/>
- <fsummary>Information about a process</fsummary>
+ <name name="yield" arity="1"/>
+ <fsummary>Deliver the result of evaluating a function call on a node
+ (blocking).</fsummary>
<desc>
- <p>Location transparent version of the BIF
- <seealso marker="erts:erlang#process_info/2">
- <c>process_info/2</c></seealso>.</p>
+ <p>Returns the promised answer from a previous
+ <seealso marker="#async_call/4"><c>async_call/4</c></seealso>.
+ If the answer is available, it is
+ returned immediately. Otherwise, the calling process is
+ suspended until the answer arrives from <c>Node</c>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/kernel/doc/src/seq_trace.xml b/lib/kernel/doc/src/seq_trace.xml
index f4fcd222ec..5ac199b6a7 100644
--- a/lib/kernel/doc/src/seq_trace.xml
+++ b/lib/kernel/doc/src/seq_trace.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,24 +29,17 @@
<rev>A</rev>
</header>
<module>seq_trace</module>
- <modulesummary>Sequential Tracing of Messages</modulesummary>
+ <modulesummary>Sequential tracing of messages.</modulesummary>
<description>
<p>Sequential tracing makes it possible to trace all messages
resulting from one initial message. Sequential tracing is
- completely independent of the ordinary tracing in Erlang, which
- is controlled by the <c>erlang:trace/3</c> BIF. See the chapter
- <seealso marker="#whatis">What is Sequential Tracing</seealso>
- below for more information about what sequential tracing is and
- how it can be used.</p>
- <p><c>seq_trace</c> provides functions which control all aspects of
+ independent of the ordinary tracing in Erlang, which
+ is controlled by the <c>erlang:trace/3</c> BIF. For more information
+ about what sequential tracing is and how it can be used, see section
+ <seealso marker="#whatis">Sequential Tracing</seealso>.</p>
+ <p><c>seq_trace</c> provides functions that control all aspects of
sequential tracing. There are functions for activation,
- deactivation, inspection and for collection of the trace output.</p>
- <note>
- <p>The implementation of sequential tracing is in beta status.
- This means that the programming interface still might undergo
- minor adjustments (possibly incompatible) based on feedback
- from users.</p>
- </note>
+ deactivation, inspection, and for collection of the trace output.</p>
</description>
<datatypes>
<datatype>
@@ -150,13 +143,13 @@ seq_trace:set_token(OldToken), % activate the trace token again
format and value as produced by
<c>erlang:monotonic_time(nano_seconds)</c>.</p>
</item>
+ </taglist>
<p>If multiple timestamp flags are passed, <c>timestamp</c> has
precedence over <c>strict_monotonic_timestamp</c> which
in turn has precedence over <c>monotonic_timestamp</c>. All
timestamp flags are remembered, so if two are passed
and the one with highest precedence later is disabled
the other one will become active.</p>
- </taglist>
</desc>
</func>
<func>
@@ -220,9 +213,10 @@ seq_trace:set_token(OldToken), % activate the trace token again
<type name="tracer"/>
<desc>
<p>Sets the system tracer. The system tracer can be either a
- process or port denoted by <c><anno>Tracer</anno></c>. Returns the previous
- value (which can be <c>false</c> if no system tracer is
- active).</p>
+ process, port or <seealso marker="erts:erl_tracer">tracer module</seealso>
+ denoted by <c><anno>Tracer</anno></c>.
+ Returns the previous value (which can be <c>false</c> if no system
+ tracer is active).</p>
<p>Failure: <c>{badarg, Info}}</c> if <c><anno>Pid</anno></c> is not an
existing local pid.</p>
</desc>
@@ -232,27 +226,28 @@ seq_trace:set_token(OldToken), % activate the trace token again
<fsummary>Return the pid() or port() of the current system tracer.</fsummary>
<type name="tracer"/>
<desc>
- <p>Returns the pid or port identifier of the current system
+ <p>Returns the pid, port identifier or tracer module of the current system
tracer or <c>false</c> if no system tracer is activated.</p>
</desc>
</func>
</funcs>
<section>
- <title>Trace Messages Sent To the System Tracer</title>
- <p>The format of the messages are:</p>
+ <title>Trace Messages Sent to the System Tracer</title>
+ <p>The format of the messages is one of the following, depending on if
+ flag <c>timestamp</c> of the trace token is set to <c>true</c> or
+ <c>false</c>:</p>
<code type="none">
{seq_trace, Label, SeqTraceInfo, TimeStamp}</code>
<p>or</p>
<code type="none">
{seq_trace, Label, SeqTraceInfo}</code>
- <p>depending on whether the <c>timestamp</c> flag of the trace
- token is set to <c>true</c> or <c>false</c>. Where:</p>
+ <p>Where:</p>
<code type="none">
Label = int()
TimeStamp = {Seconds, Milliseconds, Microseconds}
Seconds = Milliseconds = Microseconds = int()</code>
- <p>The <c>SeqTraceInfo</c> can have the following formats:</p>
+ <p><c>SeqTraceInfo</c> can have the following formats:</p>
<taglist>
<tag><c>{send, Serial, From, To, Message}</c></tag>
<item>
@@ -262,141 +257,151 @@ TimeStamp = {Seconds, Milliseconds, Microseconds}
<tag><c>{'receive', Serial, From, To, Message}</c></tag>
<item>
<p>Used when a process <c>To</c> receives a message with a
- trace token that has the <c>'receive'</c> flag set to
- <c>true</c>.</p>
+ trace token that has flag <c>'receive'</c> set to <c>true</c>.</p>
</item>
<tag><c>{print, Serial, From, _, Info}</c></tag>
<item>
- <p>Used when a process <c>From</c> has called
+ <p>Used when a process <c>From</c> has called
<c>seq_trace:print(Label, TraceInfo)</c> and has a trace
- token with the <c>print</c> flag set to <c>true</c> and
+ token with flag <c>print</c> set to <c>true</c>, and
<c>label</c> set to <c>Label</c>.</p>
</item>
</taglist>
<p><c>Serial</c> is a tuple <c>{PreviousSerial, ThisSerial}</c>,
- where the first integer <c>PreviousSerial</c> denotes the serial
- counter passed in the last received message which carried a trace
- token. If the process is the first one in a new sequential trace,
- <c>PreviousSerial</c> is set to the value of the process internal
- "trace clock". The second integer <c>ThisSerial</c> is the serial
- counter that a process sets on outgoing messages and it is based
- on the process internal "trace clock" which is incremented by one
- before it is attached to the trace token in the message.</p>
+ where:</p>
+ <list type="bulleted">
+ <item><p>Integer <c>PreviousSerial</c> denotes the serial
+ counter passed in the last received message that carried a trace
+ token. If the process is the first in a new sequential trace,
+ <c>PreviousSerial</c> is set to the value of the process internal
+ "trace clock".</p></item>
+ <item><p>Integer <c>ThisSerial</c> is the serial
+ counter that a process sets on outgoing messages. It is based
+ on the process internal "trace clock", which is incremented by one
+ before it is attached to the trace token in the message.</p></item>
+ </list>
</section>
<section>
<marker id="whatis"></marker>
- <title>What is Sequential Tracing</title>
+ <title>Sequential Tracing</title>
<p>Sequential tracing is a way to trace a sequence of messages sent
between different local or remote processes, where the sequence
- is initiated by one single message. In short it works like this:</p>
+ is initiated by a single message. In short, it works as follows:</p>
<p>Each process has a <em>trace token</em>, which can be empty or
- not empty. When not empty the trace token can be seen as
+ not empty. When not empty, the trace token can be seen as
the tuple <c>{Label, Flags, Serial, From}</c>. The trace token is
passed invisibly with each message.</p>
- <p>In order to start a sequential trace the user must explicitly set
+ <p>To start a sequential trace, the user must explicitly set
the trace token in the process that will send the first message
in a sequence.</p>
<p>The trace token of a process is set each time the process
matches a message in a receive statement, according to the trace
token carried by the received message, empty or not.</p>
- <p>On each Erlang node a process can be set as the <em>system tracer</em>. This process will receive trace messages each time
+ <p>On each Erlang node, a process can be set as the <em>system tracer</em>.
+ This process will receive trace messages each time
a message with a trace token is sent or received (if the trace
token flag <c>send</c> or <c>'receive'</c> is set). The system
- tracer can then print each trace event, write it to a file or
+ tracer can then print each trace event, write it to a file, or
whatever suitable.</p>
<note>
- <p>The system tracer will only receive those trace events that
+ <p>The system tracer only receives those trace events that
occur locally within the Erlang node. To get the whole picture
- of a sequential trace that involves processes on several Erlang
+ of a sequential trace, involving processes on many Erlang
nodes, the output from the system tracer on each involved node
- must be merged (off line).</p>
+ must be merged (offline).</p>
</note>
- <p>In the following sections Sequential Tracing and its most
- fundamental concepts are described.</p>
+ <p>The following sections describe sequential tracing and its most
+ fundamental concepts.</p>
</section>
<section>
<title>Trace Token</title>
- <p>Each process has a current trace token. Initially the token is
+ <p>Each process has a current trace token. Initially, the token is
empty. When the process sends a message to another process, a
- copy of the current token will be sent "invisibly" along with
+ copy of the current token is sent "invisibly" along with
the message.</p>
- <p>The current token of a process is set in two ways, either</p>
- <list type="ordered">
+ <p>The current token of a process is set in one of the following two
+ ways:</p>
+ <list type="bulleted">
<item>
- <p>explicitly by the process itself, through a call to
- <c>seq_trace:set_token</c>, or</p>
+ <p>Explicitly by the process itself, through a call to
+ <c>seq_trace:set_token/1,2</c></p>
</item>
<item>
- <p>when a message is received.</p>
+ <p>When a message is received</p>
</item>
</list>
- <p>In both cases the current token will be set. In particular, if
- the token of a message received is empty, the current token of
+ <p>In both cases, the current token is set. In particular, if
+ the token of a received message is empty, the current token of
the process is set to empty.</p>
- <p>A trace token contains a label, and a set of flags. Both
- the label and the flags are set in 1 and 2 above.</p>
+ <p>A trace token contains a label and a set of flags. Both
+ the label and the flags are set in both alternatives above.</p>
</section>
<section>
<title>Serial</title>
- <p>The trace token contains a component which is called
- <c>serial</c>. It consists of two integers <c>Previous</c> and
+ <p>The trace token contains a component called
+ <c>serial</c>. It consists of two integers, <c>Previous</c> and
<c>Current</c>. The purpose is to uniquely identify each traced
- event within a trace sequence and to order the messages
- chronologically and in the different branches if any.</p>
+ event within a trace sequence, as well as to order the messages
+ chronologically and in the different branches, if any.</p>
<p>The algorithm for updating <c>Serial</c> can be described as
follows:</p>
- <p>Let each process have two counters <c>prev_cnt</c> and
- <c>curr_cnt</c> which both are set to 0 when a process is created.
+ <p>Let each process have two counters, <c>prev_cnt</c> and
+ <c>curr_cnt</c>, both are set to <c>0</c> when a process is created.
The counters are updated at the following occasions:</p>
<list type="bulleted">
<item>
- <p><em>When the process is about to send a message and the trace token is not empty.</em></p>
+ <p><em>When the process is about to send a message and the trace token
+ is not empty.</em></p>
<p>Let the serial of the trace token be <c>tprev</c> and
- <c>tcurr</c>. <br></br>
-<c>curr_cnt := curr_cnt + 1</c> <br></br>
-<c>tprev := prev_cnt</c> <br></br>
-<c>tcurr := curr_cnt</c></p>
+ <c>tcurr</c>.</p>
+ <pre>
+curr_cnt := curr_cnt + 1
+tprev := prev_cnt
+tcurr := curr_cnt</pre>
<p>The trace token with <c>tprev</c> and <c>tcurr</c> is then
passed along with the message.</p>
</item>
<item>
- <p><em>When the process calls</em><c>seq_trace:print(Label, Info)</c>, <em>Label matches the label part of the trace token and the trace token print flag is true.</em></p>
- <p>The same algorithm as for send above.</p>
+ <p><em>When the process calls</em> <c>seq_trace:print(Label, Info)</c>,
+ <c>Label</c> <em>matches the label part of the trace token and the
+ trace token print flag is <c>true</c>.</em></p>
+ <p>The algorithm is the same as for send above.</p>
</item>
<item>
- <p><em>When a message is received and contains a nonempty trace token.</em></p>
+ <p><em>When a message is received and contains a non-empty trace
+ token.</em></p>
<p>The process trace token is set to the trace token from
the message.</p>
<p>Let the serial of the trace token be <c>tprev</c> and
- <c>tcurr</c>. <br></br>
-<c><![CDATA[if (curr_cnt < tcurr )]]></c> <br></br>
-
- &nbsp; &nbsp; &nbsp; &nbsp;<c>curr_cnt := tcurr</c> <br></br>
-<c>prev_cnt := tcurr</c></p>
+ <c>tcurr</c>.</p>
+ <code>
+<![CDATA[if (curr_cnt < tcurr )]]>
+ curr_cnt := tcurr
+prev_cnt := tcurr</code>
</item>
</list>
- <p>The <c>curr_cnt</c> of a process is incremented each time
+ <p><c>curr_cnt</c> of a process is incremented each time
the process is involved in a sequential trace. The counter can
reach its limit (27 bits) if a process is very long-lived and is
- involved in much sequential tracing. If the counter overflows it
- will not be possible to use the serial for ordering of the trace
- events. To prevent the counter from overflowing in the middle of
- a sequential trace the function <c>seq_trace:reset_trace/0</c>
- can be called to reset the <c>prev_cnt</c> and <c>curr_cnt</c> of
- all processes in the Erlang node. This function will also set all
- trace tokens in processes and their message queues to empty and
- will thus stop all ongoing sequential tracing.</p>
+ involved in much sequential tracing. If the counter overflows, the
+ serial for ordering of the trace events cannot be used. To prevent
+ the counter from overflowing in the middle of
+ a sequential trace, function <c>seq_trace:reset_trace/0</c>
+ can be called to reset <c>prev_cnt</c> and <c>curr_cnt</c> of
+ all processes in the Erlang node. This function also sets all
+ trace tokens in processes and their message queues to empty, and
+ thus stops all ongoing sequential tracing.</p>
</section>
<section>
- <title>Performance considerations</title>
- <p>The performance degradation for a system which is enabled for
- Sequential Tracing is negligible as long as no tracing is
- activated. When tracing is activated there will of course be an
- extra cost for each traced message but all other messages will be
+ <title>Performance Considerations</title>
+ <p>The performance degradation for a system that is enabled for
+ sequential tracing is negligible as long as no tracing is
+ activated. When tracing is activated, there is an
+ extra cost for each traced message, but all other messages are
unaffected.</p>
</section>
@@ -404,13 +409,13 @@ TimeStamp = {Seconds, Milliseconds, Microseconds}
<title>Ports</title>
<p>Sequential tracing is not performed across ports.</p>
<p>If the user for some reason wants to pass the trace token to a
- port this has to be done manually in the code of the port
+ port, this must be done manually in the code of the port
controlling process. The port controlling processes have to check
the appropriate sequential trace settings (as obtained from
- <c>seq_trace:get_token/1</c> and include trace information in
+ <c>seq_trace:get_token/1</c>) and include trace information in
the message data sent to their respective ports.</p>
<p>Similarly, for messages received from a port, a port controller
- has to retrieve trace specific information, and set appropriate
+ has to retrieve trace-specific information, and set appropriate
sequential trace flags through calls to
<c>seq_trace:set_token/2</c>.</p>
</section>
@@ -418,23 +423,23 @@ TimeStamp = {Seconds, Milliseconds, Microseconds}
<section>
<title>Distribution</title>
<p>Sequential tracing between nodes is performed transparently.
- This applies to C-nodes built with Erl_Interface too. A C-node
- built with Erl_Interface only maintains one trace token, which
- means that the C-node will appear as one process from
+ This applies to C-nodes built with <c>Erl_Interface</c> too. A C-node
+ built with <c>Erl_Interface</c> only maintains one trace token, which
+ means that the C-node appears as one process from
the sequential tracing point of view.</p>
- <p>In order to be able to perform sequential tracing between
+ <p>To be able to perform sequential tracing between
distributed Erlang nodes, the distribution protocol has been
- extended (in a backward compatible way). An Erlang node which
- supports sequential tracing can communicate with an older
- (OTP R3B) node but messages passed within that node can of course
+ extended (in a backward compatible way). An Erlang node
+ supporting sequential tracing can communicate with an older
+ (Erlang/OTP R3B) node but messages passed within that node can
not be traced.</p>
</section>
<section>
- <title>Example of Usage</title>
- <p>The example shown here will give rough idea of how the new
- primitives can be used and what kind of output it will produce.</p>
- <p>Assume that we have an initiating process with
+ <title>Example of Use</title>
+ <p>This example gives a rough idea of how the new
+ primitives can be used and what kind of output it produces.</p>
+ <p>Assume that you have an initiating process with
<c><![CDATA[Pid == <0.30.0>]]></c> like this:</p>
<code type="none">
-module(seqex).
@@ -463,8 +468,8 @@ loop() ->
PortController ! {ack,Ack}
end,
loop().</code>
- <p>A possible output from the system's sequential_tracer (inspired
- by AXE-10 and MD-110) could look like:</p>
+ <p>A possible output from the system's <c>sequential_tracer</c> can be
+ like this:</p>
<pre>
17:&lt;0.30.0> Info {0,1} WITH
"**** Trace Started ****"
@@ -475,7 +480,7 @@ loop() ->
17:&lt;0.30.0> Received {2,4} FROM &lt;0.31.0> WITH
{ack,{received,the_message}}</pre>
<p>The implementation of a system tracer process that produces
- the printout above could look like this:</p>
+ this printout can look like this:</p>
<code type="none">
tracer() ->
receive
@@ -502,16 +507,15 @@ print_trace({'receive',Serial,From,To,Message}) ->
print_trace({send,Serial,From,To,Message}) ->
io:format("~p Sent ~p TO ~p WITH~n~p~n",
[From,Serial,To,Message]).</code>
- <p>The code that creates a process that runs the tracer function
- above and sets that process as the system tracer could look like
- this:</p>
+ <p>The code that creates a process that runs this tracer function
+ and sets that process as the system tracer can look like this:</p>
<code type="none">
start() ->
Pid = spawn(?MODULE,tracer,[]),
seq_trace:set_system_tracer(Pid), % set Pid as the system tracer
ok.</code>
- <p>With a function like <c>test/0</c> below the whole example can be
- started.</p>
+ <p>With a function like <c>test/0</c>, the whole example can be
+ started:</p>
<code type="none">
test() ->
P = spawn(?MODULE, loop, [port]),
diff --git a/lib/kernel/doc/src/user.xml b/lib/kernel/doc/src/user.xml
index 24119bea82..38eac1c221 100644
--- a/lib/kernel/doc/src/user.xml
+++ b/lib/kernel/doc/src/user.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -27,13 +27,13 @@
<title>user</title>
<prepared>Robert Virding</prepared>
<docno>1</docno>
- <date>96-10-10</date>
+ <date>1996-10-10</date>
<rev>A</rev>
</header>
<module>user</module>
- <modulesummary>Standard I/O Server</modulesummary>
+ <modulesummary>Standard I/O server.</modulesummary>
<description>
- <p><c>user</c> is a server which responds to all the messages
+ <p><c>user</c> is a server that responds to all messages
defined in the I/O interface. The code in <c>user.erl</c> can be
used as a model for building alternative I/O servers.</p>
</description>
diff --git a/lib/kernel/doc/src/wrap_log_reader.xml b/lib/kernel/doc/src/wrap_log_reader.xml
index c021f42cac..7fb9c1c023 100644
--- a/lib/kernel/doc/src/wrap_log_reader.xml
+++ b/lib/kernel/doc/src/wrap_log_reader.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -26,39 +26,43 @@
<prepared>Esko Vierum&auml;ki</prepared>
<responsible>Esko Vierum&auml;ki</responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
- <date>98-09-21</date>
+ <approved></approved>
+ <checked></checked>
+ <date>1998-09-21</date>
<rev>A</rev>
<file>wrap_log_reader.sgml</file>
</header>
<module>wrap_log_reader</module>
- <modulesummary>A function to read internally formatted wrap disk logs</modulesummary>
+ <modulesummary>A service to read internally formatted wrap disk logs.
+ </modulesummary>
<description>
- <p><c>wrap_log_reader</c> is a function to read internally formatted
- wrap disk logs, refer to disk_log(3). <c>wrap_log_reader</c> does not
- interfere with disk_log activities; there is however a known bug in this
- version of the <c>wrap_log_reader</c>, see chapter <c>bugs</c> below.
- </p>
- <p>A wrap disk log file consists of several files, called index files.
- A log file can be opened and closed. It is also possible to open just one index file
- separately. If an non-existent or a non-internally formatted file is opened,
- an error message is returned. If the file is corrupt, no attempt to repair it
- will be done but an error message is returned.
- </p>
- <p>If a log is configured to be distributed, there is a possibility that all items
- are not loggen on all nodes. <c>wrap_log_reader</c> does only read the log on
- the called node, it is entirely up to the user to be sure that all items are read.
- </p>
+ <p>This module makes it possible to read internally formatted
+ wrap disk logs, see
+ <seealso marker="disk_log"><c>disk_log(3)</c></seealso>.
+ <c>wrap_log_reader</c> does not
+ interfere with <c>disk_log</c> activities; there is however a bug in this
+ version of the <c>wrap_log_reader</c>, see section
+ <seealso marker="#bugs">Known Limitations</seealso>.</p>
+ <p>A wrap disk log file consists of many files, called index files. A log
+ file can be opened and closed. Also, a single index file can be opened
+ separately. If a non-existent or non-internally formatted file is opened,
+ an error message is returned. If the file is corrupt, no attempt is made
+ to repair it, but an error message is returned.</p>
+ <p>If a log is configured to be distributed, it is possible that all items
+ are not logged on all nodes. <c>wrap_log_reader</c> only reads the log on
+ the called node; it is up to the user to be sure that all items
+ are read.</p>
</description>
+
<datatypes>
<datatype>
<name name="continuation"/>
- <desc><p>Continuation returned by
- <c>open/1,2</c> or <c>chunk/1,2</c>.</p>
+ <desc>
+ <p>Continuation returned by <c>open/1,2</c> or <c>chunk/1,2</c>.</p>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="chunk" arity="1"/>
@@ -66,87 +70,83 @@
<fsummary>Read a chunk of objects written to a wrap log.</fsummary>
<type name="chunk_ret"/>
<desc>
- <p>This function makes it possible to efficiently read the
- terms which have been appended to a log. It minimises disk
- I/O by reading large 8K chunks from the file.
- </p>
- <p>The first time <c>chunk</c> is called an initial
- continuation returned from the <c>open/1</c>, <c>open/2</c> must be provided.
- </p>
+ <p>Enables to efficiently read the
+ terms that are appended to a log. Minimises disk
+ I/O by reading 64 kilobyte chunks from the file.</p>
+ <p>The first time <c>chunk()</c> is called, an initial
+ continuation returned from <c>open/1</c> or <c>open/2</c> must be
+ provided.</p>
<p>When <c>chunk/3</c> is called, <c><anno>N</anno></c> controls the
maximum number of terms that are read from the log in each
- chunk. Default is <c>infinity</c>, which means that all the
+ chunk. Defaults to <c>infinity</c>, which means that all the
terms contained in the 8K chunk are read. If less than
- <c><anno>N</anno></c> terms are returned, this does not necessarily mean
- that end of file is reached.
- </p>
- <p>The <c>chunk</c> function returns a tuple
- <c>{<anno>Continuation2</anno>, <anno>Terms</anno>}</c>, where <c><anno>Terms</anno></c> is a list
+ <c><anno>N</anno></c> terms are returned, this does not necessarily
+ mean that end of file is reached.</p>
+ <p>Returns a tuple <c>{<anno>Continuation2</anno>,
+ <anno>Terms</anno>}</c>, where <c><anno>Terms</anno></c> is a list
of terms found in the log. <c><anno>Continuation2</anno></c> is yet
- another continuation which must be passed on into any
- subsequent calls to <c>chunk</c>. With a series of calls to
- <c>chunk</c> it is then possible to extract all terms from a
- log.
- </p>
- <p>The <c>chunk</c> function returns a tuple
- <c>{<anno>Continuation2</anno>, <anno>Terms</anno>, <anno>Badbytes</anno>}</c> if the log is opened
- in read only mode and the read chunk is corrupt. <c><anno>Badbytes</anno></c>
+ another continuation that must be passed on to any
+ subsequent calls to <c>chunk()</c>. With a series of calls to
+ <c>chunk()</c>, it is then possible to extract all terms from a log.</p>
+ <p>Returns a tuple <c>{<anno>Continuation2</anno>,
+ <anno>Terms</anno>, <anno>Badbytes</anno>}</c> if the log is opened
+ in read only mode and the read chunk is corrupt.
+ <c><anno>Badbytes</anno></c>
indicates the number of non-Erlang terms found in the chunk.
- Note also that the log is not repaired.
- </p>
- <p><c>chunk</c> returns <c>{<anno>Continuation2</anno>, eof}</c> when the end of the log is
- reached, and <c>{error, <anno>Reason</anno>}</c> if an error occurs.
- </p>
- <p>The returned continuation may or may not be valid in the next call to
- <c>chunk</c>. This is because the log may wrap and delete
- the file into which the continuation points. To make sure
- this does not happen, the log can be blocked during the
- search.
- </p>
+ Notice that the log is not repaired.</p>
+ <p>Returns <c>{<anno>Continuation2</anno>, eof}</c> when
+ the end of the log is reached, and <c>{error, <anno>Reason</anno>}</c>
+ if an error occurs.</p>
+ <p>The returned continuation either is or is not valid in the next call
+ to this function. This is because the log can wrap and delete
+ the file into which the continuation points. To ensure
+ this does not occur, the log can be blocked during the search.</p>
</desc>
</func>
+
<func>
<name name="close" arity="1"/>
- <fsummary>Close a log</fsummary>
+ <fsummary>Close a log.</fsummary>
<desc>
- <p>This function closes a log file properly.
- </p>
+ <p>Closes a log file properly.</p>
</desc>
</func>
+
<func>
<name name="open" arity="1"/>
<name name="open" arity="2"/>
- <fsummary>Open a log file</fsummary>
+ <fsummary>Open a log file.</fsummary>
<type name="open_ret"/>
<desc>
- <p><c><anno>Filename</anno></c> specifies the name of the file which is to be read. </p>
- <p><c><anno>N</anno></c> specifies the index of the file which is to be read.
- If <c><anno>N</anno></c> is omitted the whole wrap log file will be read; if it
- is specified only the specified index file will be read.
- </p>
- <p>The <c>open</c> function returns <c>{ok, <anno>Continuation</anno>}</c> if the
- log/index file was successfully opened. The <c><anno>Continuation</anno></c>
- is to be used when chunking or closing the file.
- </p>
- <p>The function returns <c>{error, <anno>Reason</anno>}</c> for all errors.
- </p>
+ <p><c><anno>Filename</anno></c> specifies the name of the file to be
+ read.</p>
+ <p><c><anno>N</anno></c> specifies the index of the file to be read.
+ If <c><anno>N</anno></c> is omitted, the whole wrap log file is read;
+ if it is specified, only the specified index file is read.</p>
+ <p>Returns <c>{ok, <anno>Continuation</anno>}</c> if the
+ log/index file is opened successfully.
+ <c><anno>Continuation</anno></c>
+ is to be used when chunking or closing the file.</p>
+ <p>Returns <c>{error, <anno>Reason</anno>}</c> for all errors.</p>
</desc>
</func>
</funcs>
<section>
- <title>Bugs</title>
- <p>This version of the <c>wrap_log_reader</c> does not detect if the <c>disk_log</c>
- wraps to a new index file between a <c>wrap_log_reader:open</c> and the first
- <c>wrap_log_reader:chunk</c>.
- In this case the chuck will actually read the last logged items in the log file,
- because the opened index file was truncated by the <c>disk_log</c>.
- </p>
+ <title>Known Limitations</title>
+ <marker id="bugs"/>
+ <p>This version of <c>wrap_log_reader</c> does not detect if
+ <c>disk_log</c> wraps to a new index file between a call to
+ <c>wrap_log_reader:open()</c> and the first call to
+ <c>wrap_log_reader:chunk()</c>.
+ If this occurs, the call to <c>chunk()</c> reads the last logged
+ items in the log file, as the opened index file was truncated by
+ <c>disk_log</c>.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="disk_log">disk_log(3)</seealso></p>
+ <p><seealso marker="disk_log"><c>disk_log(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/kernel/doc/src/zlib_stub.xml b/lib/kernel/doc/src/zlib_stub.xml
index d1823b01aa..b111581b10 100644
--- a/lib/kernel/doc/src/zlib_stub.xml
+++ b/lib/kernel/doc/src/zlib_stub.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -31,13 +31,9 @@
<rev>A</rev>
</header>
<module>zlib</module>
- <modulesummary>Zlib Compression interface.</modulesummary>
- <description><p>
-
- The module zlib is moved to the runtime system
- application. Please see <seealso
- marker="erts:zlib">zlib(3)</seealso> in the
- erts reference manual instead.
-
- </p></description>
+ <modulesummary>Zlib compression interface.</modulesummary>
+ <description>
+ <p>This module is moved to the
+ <seealso marker="erts:zlib"><c>ERTS</c></seealso> application.</p>
+ </description>
</erlref>
diff --git a/lib/kernel/include/dist.hrl b/lib/kernel/include/dist.hrl
index 47d9459a19..d6bccdf474 100644
--- a/lib/kernel/include/dist.hrl
+++ b/lib/kernel/include/dist.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -39,3 +39,4 @@
-define(DFLAG_SMALL_ATOM_TAGS, 16#4000).
-define(DFLAG_UTF8_ATOMS, 16#10000).
-define(DFLAG_MAP_TAG, 16#20000).
+-define(DFLAG_BIG_CREATION, 16#40000).
diff --git a/lib/kernel/include/dist_util.hrl b/lib/kernel/include/dist_util.hrl
index d5df2be4ec..43e50d4325 100644
--- a/lib/kernel/include/dist_util.hrl
+++ b/lib/kernel/include/dist_util.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/include/file.hrl b/lib/kernel/include/file.hrl
index 7cf033f7f5..36112bb040 100644
--- a/lib/kernel/include/file.hrl
+++ b/lib/kernel/include/file.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,37 +23,40 @@
%%--------------------------------------------------------------------------
-record(file_info,
- {size :: non_neg_integer(), % Size of file in bytes.
- type :: 'device' | 'directory' | 'other' | 'regular' | 'symlink',
- access :: 'read' | 'write' | 'read_write' | 'none',
- atime :: file:date_time() | non_neg_integer(),
+ {size :: non_neg_integer() | 'undefined', % Size of file in bytes.
+ type :: 'device' | 'directory' | 'other' | 'regular' | 'symlink'
+ | 'undefined',
+ access :: 'read' | 'write' | 'read_write' | 'none' | 'undefined',
+ atime :: file:date_time() | non_neg_integer() | 'undefined',
% The local time the file was last read:
% {{Year, Mon, Day}, {Hour, Min, Sec}}.
% atime, ctime, mtime may also be unix epochs()
- mtime :: file:date_time() | non_neg_integer(),
+ mtime :: file:date_time() | non_neg_integer() | 'undefined',
% The local time the file was last written.
- ctime :: file:date_time() | non_neg_integer(),
+ ctime :: file:date_time() | non_neg_integer() | 'undefined',
% The interpretation of this time field
% is dependent on operating system.
% On Unix it is the last time the file
% or the inode was changed. On Windows,
% it is the creation time.
- mode :: non_neg_integer(), % File permissions. On Windows,
+ mode :: non_neg_integer() | 'undefined',
+ % File permissions. On Windows,
% the owner permissions will be
% duplicated for group and user.
- links :: non_neg_integer(),
+ links :: non_neg_integer() | 'undefined',
% Number of links to the file (1 if the
% filesystem doesn't support links).
- major_device :: non_neg_integer(),
+ major_device :: non_neg_integer() | 'undefined',
% Identifies the file system (Unix),
% or the drive number (A: = 0, B: = 1)
% (Windows).
%% The following are Unix specific.
%% They are set to zero on other operating systems.
- minor_device :: non_neg_integer(), % Only valid for devices.
- inode :: non_neg_integer(), % Inode number for file.
- uid :: non_neg_integer(), % User id for owner.
- gid :: non_neg_integer()}). % Group id for owner.
+ minor_device :: non_neg_integer() | 'undefined',
+ % Only valid for devices.
+ inode :: non_neg_integer() | 'undefined', % Inode number for file.
+ uid :: non_neg_integer() | 'undefined', % User id for owner.
+ gid :: non_neg_integer() | 'undefined'}). % Group id for owner.
-record(file_descriptor,
diff --git a/lib/kernel/include/inet.hrl b/lib/kernel/include/inet.hrl
index d983fa9e72..b39df8c3f2 100644
--- a/lib/kernel/include/inet.hrl
+++ b/lib/kernel/include/inet.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/include/inet_sctp.hrl b/lib/kernel/include/inet_sctp.hrl
index d6376e452e..ddb3cdc26c 100644
--- a/lib/kernel/include/inet_sctp.hrl
+++ b/lib/kernel/include/inet_sctp.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/include/net_address.hrl b/lib/kernel/include/net_address.hrl
index 9dd4b78cd4..4988175593 100644
--- a/lib/kernel/include/net_address.hrl
+++ b/lib/kernel/include/net_address.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/Makefile b/lib/kernel/src/Makefile
index 57dacebde3..2b72f78dcf 100644
--- a/lib/kernel/src/Makefile
+++ b/lib/kernel/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -104,6 +104,8 @@ MODULES = \
inet_sctp \
kernel \
kernel_config \
+ local_udp \
+ local_tcp \
net \
net_adm \
net_kernel \
@@ -244,6 +246,8 @@ $(EBIN)/inet_tcp.beam: inet_int.hrl
$(EBIN)/inet_udp_dist.beam: ../include/net_address.hrl ../include/dist.hrl ../include/dist_util.hrl
$(EBIN)/inet_udp.beam: inet_int.hrl
$(EBIN)/inet_sctp.beam: inet_int.hrl ../include/inet_sctp.hrl
+$(EBIN)/local_udp.beam: inet_int.hrl
+$(EBIN)/local_tcp.beam: inet_int.hrl
$(EBIN)/net_kernel.beam: ../include/net_address.hrl
$(EBIN)/os.beam: ../include/file.hrl
$(EBIN)/ram_file.beam: ../include/file.hrl
diff --git a/lib/kernel/src/application.erl b/lib/kernel/src/application.erl
index 1abfbfb9ec..bc6be2f8f5 100644
--- a/lib/kernel/src/application.erl
+++ b/lib/kernel/src/application.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/application_controller.erl b/lib/kernel/src/application_controller.erl
index b1ca2ea64f..0e61153613 100644
--- a/lib/kernel/src/application_controller.erl
+++ b/lib/kernel/src/application_controller.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/application_master.erl b/lib/kernel/src/application_master.erl
index 85b7efc402..5da2b0b06c 100644
--- a/lib/kernel/src/application_master.erl
+++ b/lib/kernel/src/application_master.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/application_master.hrl b/lib/kernel/src/application_master.hrl
index f252ce8f16..b03074dbce 100644
--- a/lib/kernel/src/application_master.hrl
+++ b/lib/kernel/src/application_master.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/application_starter.erl b/lib/kernel/src/application_starter.erl
index 692681b515..f51f9bbc45 100644
--- a/lib/kernel/src/application_starter.erl
+++ b/lib/kernel/src/application_starter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/auth.erl b/lib/kernel/src/auth.erl
index 78cf1e77be..40feee6bf0 100644
--- a/lib/kernel/src/auth.erl
+++ b/lib/kernel/src/auth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/code.erl b/lib/kernel/src/code.erl
index 7237550786..8d0a2fbf66 100644
--- a/lib/kernel/src/code.erl
+++ b/lib/kernel/src/code.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,11 +28,15 @@
get_path/0,
load_file/1,
ensure_loaded/1,
+ ensure_modules_loaded/1,
load_abs/1,
load_abs/2,
load_binary/3,
load_native_partial/2,
load_native_sticky/3,
+ atomic_load/1,
+ prepare_loading/1,
+ finish_loading/1,
delete/1,
purge/1,
soft_purge/1,
@@ -60,7 +64,7 @@
del_path/1,
replace_path/2,
rehash/0,
- start_link/0, start_link/1,
+ start_link/0,
which/1,
where_is_file/1,
where_is_file/2,
@@ -68,7 +72,10 @@
clash/0,
get_mode/0]).
+-deprecated({rehash,0,next_major_release}).
+
-export_type([load_error_rsn/0, load_ret/0]).
+-export_type([prepared_code/0]).
-include_lib("kernel/include/file.hrl").
@@ -86,6 +93,11 @@
-type loaded_ret_atoms() :: 'cover_compiled' | 'preloaded'.
-type loaded_filename() :: (Filename :: file:filename()) | loaded_ret_atoms().
+-define(PREPARED, '$prepared$').
+-opaque prepared_code() ::
+ {?PREPARED,[{module(),{binary(),string(),_}}]}.
+
+
%%% BIFs
-export([get_chunk/2, is_module_native/1, make_stub_module/3, module_md5/1]).
@@ -246,7 +258,7 @@ is_sticky(Mod) when is_atom(Mod) -> call({is_sticky,Mod}).
-spec set_path(Path) -> 'true' | {'error', What} when
Path :: [Dir :: file:filename()],
- What :: 'bad_directory' | 'bad_path'.
+ What :: 'bad_directory'.
set_path(PathList) when is_list(PathList) -> call({set_path,PathList}).
-spec get_path() -> Path when
@@ -294,23 +306,328 @@ replace_path(Name, Dir) when (is_atom(Name) orelse is_list(Name)),
call({replace_path,Name,Dir}).
-spec rehash() -> 'ok'.
-rehash() -> call(rehash).
+rehash() ->
+ cache_warning(),
+ ok.
-spec get_mode() -> 'embedded' | 'interactive'.
get_mode() -> call(get_mode).
+%%%
+%%% Loading of several modules in parallel.
+%%%
+
+-spec ensure_modules_loaded([Module]) ->
+ 'ok' | {'error',[{Module,What}]} when
+ Module :: module(),
+ What :: badfile | nofile | on_load_failure.
+
+ensure_modules_loaded(Modules) when is_list(Modules) ->
+ case prepare_ensure(Modules, []) of
+ Ms when is_list(Ms) ->
+ ensure_modules_loaded_1(Ms);
+ error ->
+ error(function_clause, [Modules])
+ end.
+
+ensure_modules_loaded_1(Ms0) ->
+ Ms = lists:usort(Ms0),
+ {Prep,Error0} = load_mods(Ms),
+ {OnLoad,Normal} = partition_on_load(Prep),
+ Error1 = case finish_loading(Normal, true) of
+ ok -> Error0;
+ {error,Err} -> Err ++ Error0
+ end,
+ ensure_modules_loaded_2(OnLoad, Error1).
+
+ensure_modules_loaded_2([{M,_}|Ms], Errors) ->
+ case ensure_loaded(M) of
+ {module,M} ->
+ ensure_modules_loaded_2(Ms, Errors);
+ {error,Err} ->
+ ensure_modules_loaded_2(Ms, [{M,Err}|Errors])
+ end;
+ensure_modules_loaded_2([], []) ->
+ ok;
+ensure_modules_loaded_2([], [_|_]=Errors) ->
+ {error,Errors}.
+
+prepare_ensure([M|Ms], Acc) when is_atom(M) ->
+ case erlang:module_loaded(M) of
+ true ->
+ prepare_ensure(Ms, Acc);
+ false ->
+ prepare_ensure(Ms, [M|Acc])
+ end;
+prepare_ensure([], Acc) ->
+ Acc;
+prepare_ensure(_, _) ->
+ error.
+
+-spec atomic_load(Modules) -> 'ok' | {'error',[{Module,What}]} when
+ Modules :: [Module | {Module, Filename, Binary}],
+ Module :: module(),
+ Filename :: file:filename(),
+ Binary :: binary(),
+ What :: 'badfile' | 'nofile' | 'on_load_not_allowed' | 'duplicated' |
+ 'not_purged' | 'sticky_directory' | 'pending_on_load'.
+
+atomic_load(Modules) ->
+ case do_prepare_loading(Modules) of
+ {ok,Prep} ->
+ finish_loading(Prep, false);
+ {error,_}=Error ->
+ Error;
+ badarg ->
+ error(function_clause, [Modules])
+ end.
+
+-spec prepare_loading(Modules) ->
+ {'ok',Prepared} | {'error',[{Module,What}]} when
+ Modules :: [Module | {Module, Filename, Binary}],
+ Module :: module(),
+ Filename :: file:filename(),
+ Binary :: binary(),
+ Prepared :: prepared_code(),
+ What :: 'badfile' | 'nofile' | 'on_load_not_allowed' | 'duplicated'.
+
+prepare_loading(Modules) ->
+ case do_prepare_loading(Modules) of
+ {ok,Prep} ->
+ {ok,{?PREPARED,Prep}};
+ {error,_}=Error ->
+ Error;
+ badarg ->
+ error(function_clause, [Modules])
+ end.
+
+-spec finish_loading(Prepared) -> 'ok' | {'error',[{Module,What}]} when
+ Prepared :: prepared_code(),
+ Module :: module(),
+ What :: 'not_purged' | 'sticky_directory' | 'pending_on_load'.
+
+finish_loading({?PREPARED,Prepared}=Arg) when is_list(Prepared) ->
+ case verify_prepared(Prepared) of
+ ok ->
+ finish_loading(Prepared, false);
+ error ->
+ error(function_clause, [Arg])
+ end.
+
+partition_load([Item|T], Bs, Ms) ->
+ case Item of
+ {M,File,Bin} when is_atom(M) andalso
+ is_list(File) andalso
+ is_binary(Bin) ->
+ partition_load(T, [Item|Bs], Ms);
+ M when is_atom(M) ->
+ partition_load(T, Bs, [Item|Ms]);
+ _ ->
+ error
+ end;
+partition_load([], Bs, Ms) ->
+ {Bs,Ms}.
+
+do_prepare_loading(Modules) ->
+ case partition_load(Modules, [], []) of
+ {ModBins,Ms} ->
+ case prepare_loading_1(ModBins, Ms) of
+ {error,_}=Error ->
+ Error;
+ Prep when is_list(Prep) ->
+ {ok,Prep}
+ end;
+ error ->
+ badarg
+ end.
+
+prepare_loading_1(ModBins, Ms) ->
+ %% erlang:finish_loading/1 *will* detect duplicates.
+ %% However, we want to detect all errors that can be detected
+ %% by only examining the input data before call the LastAction
+ %% fun.
+ case prepare_check_uniq(ModBins, Ms) of
+ ok ->
+ prepare_loading_2(ModBins, Ms);
+ Error ->
+ Error
+ end.
+
+prepare_loading_2(ModBins, Ms) ->
+ {Prep0,Error0} = load_bins(ModBins),
+ {Prep1,Error1} = load_mods(Ms),
+ case Error0 ++ Error1 of
+ [] ->
+ prepare_loading_3(Prep0 ++ Prep1);
+ [_|_]=Error ->
+ {error,Error}
+ end.
+
+prepare_loading_3(Prep) ->
+ case partition_on_load(Prep) of
+ {[_|_]=OnLoad,_} ->
+ Error = [{M,on_load_not_allowed} || {M,_} <- OnLoad],
+ {error,Error};
+ {[],_} ->
+ Prep
+ end.
+
+prepare_check_uniq([{M,_,_}|T], Ms) ->
+ prepare_check_uniq(T, [M|Ms]);
+prepare_check_uniq([], Ms) ->
+ prepare_check_uniq_1(lists:sort(Ms), []).
+
+prepare_check_uniq_1([M|[M|_]=Ms], Acc) ->
+ prepare_check_uniq_1(Ms, [{M,duplicated}|Acc]);
+prepare_check_uniq_1([_|Ms], Acc) ->
+ prepare_check_uniq_1(Ms, Acc);
+prepare_check_uniq_1([], []) ->
+ ok;
+prepare_check_uniq_1([], [_|_]=Errors) ->
+ {error,Errors}.
+
+partition_on_load(Prep) ->
+ P = fun({_,{Bin,_,_}}) ->
+ erlang:has_prepared_code_on_load(Bin)
+ end,
+ lists:partition(P, Prep).
+
+verify_prepared([{M,{Prep,Name,_Native}}|T])
+ when is_atom(M), is_binary(Prep), is_list(Name) ->
+ try erlang:has_prepared_code_on_load(Prep) of
+ false ->
+ verify_prepared(T);
+ _ ->
+ error
+ catch
+ error:_ ->
+ error
+ end;
+verify_prepared([]) ->
+ ok;
+verify_prepared(_) ->
+ error.
+
+finish_loading(Prepared0, EnsureLoaded) ->
+ Prepared = [{M,{Bin,File}} || {M,{Bin,File,_}} <- Prepared0],
+ Native0 = [{M,Code} || {M,{_,_,Code}} <- Prepared0,
+ Code =/= undefined],
+ case call({finish_loading,Prepared,EnsureLoaded}) of
+ ok ->
+ finish_loading_native(Native0);
+ {error,Errors}=E when EnsureLoaded ->
+ S0 = sofs:relation(Errors),
+ S1 = sofs:domain(S0),
+ R0 = sofs:relation(Native0),
+ R1 = sofs:drestriction(R0, S1),
+ Native = sofs:to_external(R1),
+ finish_loading_native(Native),
+ E;
+ {error,_}=E ->
+ E
+ end.
+
+finish_loading_native([{Mod,Code}|Ms]) ->
+ _ = load_native_partial(Mod, Code),
+ finish_loading_native(Ms);
+finish_loading_native([]) ->
+ ok.
+
+load_mods([]) ->
+ {[],[]};
+load_mods(Mods) ->
+ Path = get_path(),
+ F = prepare_loading_fun(),
+ {ok,{Succ,Error0}} = erl_prim_loader:get_modules(Mods, F, Path),
+ Error = [case E of
+ badfile -> {M,E};
+ _ -> {M,nofile}
+ end || {M,E} <- Error0],
+ {Succ,Error}.
+
+load_bins([]) ->
+ {[],[]};
+load_bins(BinItems) ->
+ F = prepare_loading_fun(),
+ do_par(F, BinItems).
+
+-type prep_fun_type() :: fun((module(), file:filename(), binary()) ->
+ {ok,_} | {error,_}).
+
+-spec prepare_loading_fun() -> prep_fun_type().
+
+prepare_loading_fun() ->
+ GetNative = get_native_fun(),
+ fun(Mod, FullName, Beam) ->
+ case erlang:prepare_loading(Mod, Beam) of
+ Prepared when is_binary(Prepared) ->
+ {ok,{Prepared,FullName,GetNative(Beam)}};
+ {error,_}=Error ->
+ Error
+ end
+ end.
+
+get_native_fun() ->
+ Architecture = erlang:system_info(hipe_architecture),
+ try hipe_unified_loader:chunk_name(Architecture) of
+ ChunkTag ->
+ fun(Beam) -> code:get_chunk(Beam, ChunkTag) end
+ catch _:_ ->
+ fun(_) -> undefined end
+ end.
+
+do_par(Fun, L) ->
+ {_,Ref} = spawn_monitor(do_par_fun(Fun, L)),
+ receive
+ {'DOWN',Ref,process,_,Res} ->
+ Res
+ end.
+
+-spec do_par_fun(prep_fun_type(), list()) -> fun(() -> no_return()).
+
+do_par_fun(Fun, L) ->
+ fun() ->
+ _ = [spawn_monitor(do_par_fun_2(Fun, Item)) ||
+ Item <- L],
+ exit(do_par_recv(length(L), [], []))
+ end.
+
+-spec do_par_fun_2(prep_fun_type(),
+ {module(),file:filename(),binary()}) ->
+ fun(() -> no_return()).
+
+do_par_fun_2(Fun, Item) ->
+ fun() ->
+ {Mod,Filename,Bin} = Item,
+ try Fun(Mod, Filename, Bin) of
+ {ok,Res} ->
+ exit({good,{Mod,Res}});
+ {error,Error} ->
+ exit({bad,{Mod,Error}})
+ catch
+ _:Error ->
+ exit({bad,{Mod,Error}})
+ end
+ end.
+
+do_par_recv(0, Good, Bad) ->
+ {Good,Bad};
+do_par_recv(N, Good, Bad) ->
+ receive
+ {'DOWN',_,process,_,{good,Res}} ->
+ do_par_recv(N-1, [Res|Good], Bad);
+ {'DOWN',_,process,_,{bad,Res}} ->
+ do_par_recv(N-1, Good, [Res|Bad])
+ end.
+
%%-----------------------------------------------------------------
call(Req) ->
- code_server:call(code_server, Req).
+ code_server:call(Req).
-spec start_link() -> {'ok', pid()} | {'error', 'crash'}.
start_link() ->
- start_link([stick]).
-
--spec start_link(Flags :: [atom()]) -> {'ok', pid()} | {'error', 'crash'}.
-start_link(Flags) ->
- do_start(Flags).
+ do_start().
%%-----------------------------------------------------------------
%% In the init phase, code must not use any modules not yet loaded,
@@ -322,35 +639,21 @@ start_link(Flags) ->
%% us, so the module is loaded.
%%-----------------------------------------------------------------
-do_start(Flags) ->
+do_start() ->
+ maybe_warn_for_cache(),
load_code_server_prerequisites(),
- Mode = get_mode(Flags),
- case init:get_argument(root) of
- {ok,[[Root0]]} ->
- Root = filename:join([Root0]), % Normalize. Use filename
- case code_server:start_link([Root,Mode]) of
- {ok,_Pid} = Ok2 ->
- if
- Mode =:= interactive ->
- case lists:member(stick, Flags) of
- true -> do_stick_dirs();
- _ -> ok
- end;
- true ->
- ok
- end,
- %% Quietly load native code for all modules loaded so far
- Architecture = erlang:system_info(hipe_architecture),
- load_native_code_for_all_loaded(Architecture),
- Ok2;
- Other ->
- Other
- end;
- Other ->
- error_logger:error_msg("Can not start code server ~w ~n", [Other]),
- {error, crash}
- end.
+ {ok,[[Root0]]} = init:get_argument(root),
+ Mode = start_get_mode(),
+ Root = filename:join([Root0]), % Normalize.
+ Res = code_server:start_link([Root,Mode]),
+
+ maybe_stick_dirs(Mode),
+
+ %% Quietly load native code for all modules loaded so far.
+ Architecture = erlang:system_info(hipe_architecture),
+ load_native_code_for_all_loaded(Architecture),
+ Res.
%% Make sure that all modules that the code_server process calls
%% (directly or indirectly) are loaded. Otherwise the code_server
@@ -370,6 +673,16 @@ load_code_server_prerequisites() ->
_ = [M = M:module_info(module) || M <- Needed],
ok.
+maybe_stick_dirs(interactive) ->
+ case init:get_argument(nostick) of
+ {ok,[[]]} ->
+ ok;
+ _ ->
+ do_stick_dirs()
+ end;
+maybe_stick_dirs(_) ->
+ ok.
+
do_stick_dirs() ->
do_s(compiler),
do_s(stdlib),
@@ -387,19 +700,12 @@ do_s(Lib) ->
ok
end.
-get_mode(Flags) ->
- case lists:member(embedded, Flags) of
- true ->
+start_get_mode() ->
+ case init:get_argument(mode) of
+ {ok,[["embedded"]]} ->
embedded;
- _Otherwise ->
- case init:get_argument(mode) of
- {ok,[["embedded"]]} ->
- embedded;
- {ok,[["minimal"]]} ->
- minimal;
- _Else ->
- interactive
- end
+ _ ->
+ interactive
end.
%% Find out which version of a particular module we would
@@ -453,30 +759,14 @@ which(File, Base, [Directory|Tail]) ->
Filename :: file:filename(),
Absname :: file:filename().
where_is_file(File) when is_list(File) ->
- case call({is_cached,File}) of
- no ->
- Path = get_path(),
- which(File, ".", Path);
- Dir ->
- filename:join(Dir, File)
- end.
+ Path = get_path(),
+ which(File, ".", Path).
-spec where_is_file(Path :: file:filename(), Filename :: file:filename()) ->
file:filename() | 'non_existing'.
where_is_file(Path, File) when is_list(Path), is_list(File) ->
- CodePath = get_path(),
- if
- Path =:= CodePath ->
- case call({is_cached, File}) of
- no ->
- which(File, ".", Path);
- Dir ->
- filename:join(Dir, File)
- end;
- true ->
- which(File, ".", Path)
- end.
+ which(File, ".", Path).
-spec set_primary_archive(ArchiveFile :: file:filename(),
ArchiveBin :: binary(),
@@ -554,6 +844,22 @@ has_ext(Ext, Extlen, File) ->
end.
%%%
+%%% Warning for deprecated code path cache.
+%%%
+
+maybe_warn_for_cache() ->
+ case init:get_argument(code_path_cache) of
+ {ok, _} ->
+ cache_warning();
+ error ->
+ ok
+ end.
+
+cache_warning() ->
+ W = "The code path cache functionality has been removed",
+ error_logger:warning_report(W).
+
+%%%
%%% Silently load native code for all modules loaded so far.
%%%
diff --git a/lib/kernel/src/code_server.erl b/lib/kernel/src/code_server.erl
index 614219794c..1792f9e908 100644
--- a/lib/kernel/src/code_server.erl
+++ b/lib/kernel/src/code_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,29 +22,33 @@
%% This file holds the server part of the code_server.
-export([start_link/1,
- call/2,
- system_continue/3,
- system_terminate/4,
+ call/1,
system_code_change/4,
error_msg/2, info_msg/2
]).
-include_lib("kernel/include/file.hrl").
+-include_lib("stdlib/include/ms_transform.hrl").
-import(lists, [foreach/2]).
--define(ANY_NATIVE_CODE_LOADED, any_native_code_loaded).
+-type on_load_action() ::
+ fun((term(), state()) -> {'reply',term(),state()} |
+ {'noreply',state()}).
--record(state, {supervisor,
- root,
- path,
- moddb,
- namedb,
- cache = no_cache,
- mode = interactive,
- on_load = []}).
+-type on_load_item() :: {{pid(),reference()},module(),
+ [{pid(),on_load_action()}]}.
+
+-record(state, {supervisor :: pid(),
+ root :: file:name_all(),
+ path :: [file:name_all()],
+ moddb :: ets:tab(),
+ namedb :: ets:tab(),
+ mode = interactive :: 'interactive' | 'embedded',
+ on_load = [] :: [on_load_item()]}).
-type state() :: #state{}.
+-spec start_link([term()]) -> {'ok', pid()}.
start_link(Args) ->
Ref = make_ref(),
Parent = self(),
@@ -59,7 +63,7 @@ start_link(Args) ->
%% Init the code_server process.
%% -----------------------------------------------------------
-init(Ref, Parent, [Root,Mode0]) ->
+init(Ref, Parent, [Root,Mode]) ->
register(?MODULE, self()),
process_flag(trap_exit, true),
@@ -68,20 +72,16 @@ init(Ref, Parent, [Root,Mode0]) ->
%% Pre-loaded modules are always sticky.
ets:insert(Db, [{M,preloaded},{{sticky,M},true}])
end, erlang:pre_loaded()),
- ets:insert(Db, init:fetch_loaded()),
-
- Mode =
- case Mode0 of
- minimal -> interactive;
- _ -> Mode0
- end,
+ Loaded0 = init:fetch_loaded(),
+ Loaded = [{M,filename:join([P])} || {M,P} <- Loaded0], %Normalize.
+ ets:insert(Db, Loaded),
IPath =
case Mode of
interactive ->
LibDir = filename:append(Root, "lib"),
{ok,Dirs} = erl_prim_loader:list_dir(LibDir),
- {Paths,_Libs} = make_path(LibDir, Dirs),
+ Paths = make_path(LibDir, Dirs),
UserLibPaths = get_user_lib_dirs(),
["."] ++ UserLibPaths ++ Paths;
_ ->
@@ -89,24 +89,15 @@ init(Ref, Parent, [Root,Mode0]) ->
end,
Path = add_loader_path(IPath, Mode),
- State0 = #state{root = Root,
- path = Path,
- moddb = Db,
- namedb = init_namedb(Path),
- mode = Mode},
-
- State =
- case init:get_argument(code_path_cache) of
- {ok, _} ->
- create_cache(State0);
- error ->
- State0
- end,
-
- put(?ANY_NATIVE_CODE_LOADED, false),
+ State = #state{supervisor = Parent,
+ root = Root,
+ path = Path,
+ moddb = Db,
+ namedb = init_namedb(Path),
+ mode = Mode},
Parent ! {Ref,{ok,self()}},
- loop(State#state{supervisor = Parent}).
+ loop(State).
get_user_lib_dirs() ->
case os:getenv("ERL_LIBS") of
@@ -125,7 +116,7 @@ get_user_lib_dirs() ->
get_user_lib_dirs_1([Dir|DirList]) ->
case erl_prim_loader:list_dir(Dir) of
{ok, Dirs} ->
- {Paths,_Libs} = make_path(Dir, Dirs),
+ Paths = make_path(Dir, Dirs),
%% Only add paths trailing with ./ebin.
[P || P <- Paths, filename:basename(P) =:= "ebin"] ++
get_user_lib_dirs_1(DirList);
@@ -142,8 +133,9 @@ split_paths([C|T], S, Path, Paths) ->
split_paths([], _S, Path, Paths) ->
lists:reverse(Paths, [lists:reverse(Path)]).
-call(Name, Req) ->
- Name ! {code_call, self(), Req},
+-spec call(term()) -> term().
+call(Req) ->
+ ?MODULE ! {code_call, self(), Req},
receive
{?MODULE, Reply} ->
Reply
@@ -155,7 +147,7 @@ reply(Pid, Res) ->
loop(#state{supervisor=Supervisor}=State0) ->
receive
{code_call, Pid, Req} ->
- case handle_call(Req, {Pid, call}, State0) of
+ case handle_call(Req, Pid, State0) of
{reply, Res, State} ->
_ = reply(Pid, Res),
loop(State);
@@ -168,8 +160,8 @@ loop(#state{supervisor=Supervisor}=State0) ->
system_terminate(Reason, Supervisor, [], State0);
{system, From, Msg} ->
handle_system_msg(running,Msg, From, Supervisor, State0);
- {'DOWN',Ref,process,_,Res} ->
- State = finish_on_load(Ref, Res, State0),
+ {'DOWN',Ref,process,Pid,Res} ->
+ State = finish_on_load({Pid,Ref}, Res, State0),
loop(State);
_Msg ->
loop(State0)
@@ -238,278 +230,145 @@ system_code_change(State, _Module, _OldVsn, _Extra) ->
%% The gen_server call back functions.
%%
-handle_call({stick_dir,Dir}, {_From,_Tag}, S) ->
+handle_call({stick_dir,Dir}, _From, S) ->
{reply,stick_dir(Dir, true, S),S};
-handle_call({unstick_dir,Dir}, {_From,_Tag}, S) ->
+handle_call({unstick_dir,Dir}, _From, S) ->
{reply,stick_dir(Dir, false, S),S};
-handle_call({stick_mod,Mod}, {_From,_Tag}, S) ->
+handle_call({stick_mod,Mod}, _From, S) ->
{reply,stick_mod(Mod, true, S),S};
-handle_call({unstick_mod,Mod}, {_From,_Tag}, S) ->
+handle_call({unstick_mod,Mod}, _From, S) ->
{reply,stick_mod(Mod, false, S),S};
-handle_call({dir,Dir}, {_From,_Tag}, S) ->
+handle_call({dir,Dir}, _From, S) ->
Root = S#state.root,
Resp = do_dir(Root,Dir,S#state.namedb),
{reply,Resp,S};
-handle_call({load_file,Mod}, Caller, St) ->
- case modp(Mod) of
- false ->
- {reply,{error,badarg},St};
- true ->
- load_file(Mod, Caller, St)
- end;
+handle_call({load_file,Mod}, From, St) when is_atom(Mod) ->
+ load_file(Mod, From, St);
-handle_call({add_path,Where,Dir0}, {_From,_Tag},
- #state{cache=Cache0,namedb=Namedb,path=Path0}=S) ->
- case Cache0 of
- no_cache ->
- {Resp,Path} = add_path(Where, Dir0, Path0, Namedb),
- {reply,Resp,S#state{path=Path}};
- _ ->
- Dir = absname(Dir0), %% Cache always expands the path
- {Resp,Path} = add_path(Where, Dir, Path0, Namedb),
- Cache = update_cache([Dir], Where, Cache0),
- {reply,Resp,S#state{path=Path,cache=Cache}}
- end;
+handle_call({add_path,Where,Dir0}, _From,
+ #state{namedb=Namedb,path=Path0}=S) ->
+ {Resp,Path} = add_path(Where, Dir0, Path0, Namedb),
+ {reply,Resp,S#state{path=Path}};
-handle_call({add_paths,Where,Dirs0}, {_From,_Tag},
- #state{cache=Cache0,namedb=Namedb,path=Path0}=S) ->
- case Cache0 of
- no_cache ->
- {Resp,Path} = add_paths(Where, Dirs0, Path0, Namedb),
- {reply,Resp,S#state{path=Path}};
- _ ->
- %% Cache always expands the path
- Dirs = [absname(Dir) || Dir <- Dirs0],
- {Resp,Path} = add_paths(Where, Dirs, Path0, Namedb),
- Cache=update_cache(Dirs,Where,Cache0),
- {reply,Resp,S#state{cache=Cache,path=Path}}
- end;
+handle_call({add_paths,Where,Dirs0}, _From,
+ #state{namedb=Namedb,path=Path0}=S) ->
+ {Resp,Path} = add_paths(Where, Dirs0, Path0, Namedb),
+ {reply,Resp,S#state{path=Path}};
-handle_call({set_path,PathList}, {_From,_Tag},
+handle_call({set_path,PathList}, _From,
#state{path=Path0,namedb=Namedb}=S) ->
{Resp,Path,NewDb} = set_path(PathList, Path0, Namedb),
- {reply,Resp,rehash_cache(S#state{path=Path,namedb=NewDb})};
+ {reply,Resp,S#state{path=Path,namedb=NewDb}};
-handle_call({del_path,Name}, {_From,_Tag},
+handle_call({del_path,Name}, _From,
#state{path=Path0,namedb=Namedb}=S) ->
{Resp,Path} = del_path(Name, Path0, Namedb),
- {reply,Resp,rehash_cache(S#state{path=Path})};
+ {reply,Resp,S#state{path=Path}};
-handle_call({replace_path,Name,Dir}, {_From,_Tag},
+handle_call({replace_path,Name,Dir}, _From,
#state{path=Path0,namedb=Namedb}=S) ->
{Resp,Path} = replace_path(Name, Dir, Path0, Namedb),
- {reply,Resp,rehash_cache(S#state{path=Path})};
+ {reply,Resp,S#state{path=Path}};
-handle_call(rehash, {_From,_Tag}, S0) ->
- S = create_cache(S0),
- {reply,ok,S};
-
-handle_call(get_path, {_From,_Tag}, S) ->
+handle_call(get_path, _From, S) ->
{reply,S#state.path,S};
%% Messages to load, delete and purge modules/files.
-handle_call({load_abs,File,Mod}, Caller, S) when is_atom(Mod) ->
+handle_call({load_abs,File,Mod}, From, S) when is_atom(Mod) ->
case modp(File) of
false ->
{reply,{error,badarg},S};
true ->
- load_abs(File, Mod, Caller, S)
+ load_abs(File, Mod, From, S)
end;
-handle_call({load_binary,Mod,File,Bin}, Caller, S) ->
- do_load_binary(Mod, File, Bin, Caller, S);
+handle_call({load_binary,Mod,File,Bin}, From, S) when is_atom(Mod) ->
+ do_load_binary(Mod, File, Bin, From, S);
-handle_call({load_native_partial,Mod,Bin}, {_From,_Tag}, S) ->
+handle_call({load_native_partial,Mod,Bin}, _From, S) ->
Architecture = erlang:system_info(hipe_architecture),
Result = (catch hipe_unified_loader:load(Mod, Bin, Architecture)),
- Status = hipe_result_to_status(Result),
+ Status = hipe_result_to_status(Result, S),
{reply,Status,S};
-handle_call({load_native_sticky,Mod,Bin,WholeModule}, {_From,_Tag}, S) ->
+handle_call({load_native_sticky,Mod,Bin,WholeModule}, _From, S) ->
Architecture = erlang:system_info(hipe_architecture),
Result = (catch hipe_unified_loader:load_module(Mod, Bin, WholeModule,
Architecture)),
- Status = hipe_result_to_status(Result),
+ Status = hipe_result_to_status(Result, S),
{reply,Status,S};
-handle_call({ensure_loaded,Mod0}, Caller, St0) ->
- Fun = fun (M, St) ->
- case erlang:module_loaded(M) of
- true ->
- {reply,{module,M},St};
- false when St#state.mode =:= interactive ->
- load_file(M, Caller, St);
- false ->
- {reply,{error,embedded},St}
- end
- end,
- do_mod_call(Fun, Mod0, {error,badarg}, St0);
-
-handle_call({delete,Mod0}, {_From,_Tag}, S) ->
- Fun = fun (M, St) ->
- case catch erlang:delete_module(M) of
- true ->
- ets:delete(St#state.moddb, M),
- {reply,true,St};
- _ ->
- {reply,false,St}
- end
- end,
- do_mod_call(Fun, Mod0, false, S);
+handle_call({ensure_loaded,Mod}, From, St) when is_atom(Mod) ->
+ case erlang:module_loaded(Mod) of
+ true ->
+ {reply,{module,Mod},St};
+ false when St#state.mode =:= interactive ->
+ ensure_loaded(Mod, From, St);
+ false ->
+ {reply,{error,embedded},St}
+ end;
-handle_call({purge,Mod0}, {_From,_Tag}, St0) ->
- do_mod_call(fun (M, St) ->
- {reply,do_purge(M),St}
- end, Mod0, false, St0);
+handle_call({delete,Mod}, _From, St) when is_atom(Mod) ->
+ case catch erlang:delete_module(Mod) of
+ true ->
+ ets:delete(St#state.moddb, Mod),
+ {reply,true,St};
+ _ ->
+ {reply,false,St}
+ end;
-handle_call({soft_purge,Mod0}, {_From,_Tag}, St0) ->
- do_mod_call(fun (M, St) ->
- {reply,do_soft_purge(M),St}
- end, Mod0, true, St0);
+handle_call({purge,Mod}, _From, St) when is_atom(Mod) ->
+ {reply,do_purge(Mod),St};
-handle_call({is_loaded,Mod0}, {_From,_Tag}, St0) ->
- do_mod_call(fun (M, St) ->
- {reply,is_loaded(M, St#state.moddb),St}
- end, Mod0, false, St0);
+handle_call({soft_purge,Mod}, _From, St) when is_atom(Mod) ->
+ {reply,do_soft_purge(Mod),St};
-handle_call(all_loaded, {_From,_Tag}, S) ->
+handle_call({is_loaded,Mod}, _From, St) when is_atom(Mod) ->
+ {reply,is_loaded(Mod, St#state.moddb),St};
+
+handle_call(all_loaded, _From, S) ->
Db = S#state.moddb,
{reply,all_loaded(Db),S};
-handle_call({get_object_code,Mod0}, {_From,_Tag}, St0) ->
- Fun = fun(M, St) ->
- Path = St#state.path,
- case mod_to_bin(Path, atom_to_list(M)) of
- {_,Bin,FName} -> {reply,{M,Bin,FName},St};
- Error -> {reply,Error,St}
- end
- end,
- do_mod_call(Fun, Mod0, error, St0);
+handle_call({get_object_code,Mod}, _From, St) when is_atom(Mod) ->
+ Path = St#state.path,
+ case mod_to_bin(Path, Mod) of
+ {_,Bin,FName} -> {reply,{Mod,Bin,FName},St};
+ Error -> {reply,Error,St}
+ end;
-handle_call({is_sticky, Mod}, {_From,_Tag}, S) ->
+handle_call({is_sticky, Mod}, _From, S) ->
Db = S#state.moddb,
{reply, is_sticky(Mod,Db), S};
-handle_call(stop,{_From,_Tag}, S) ->
+handle_call(stop,_From, S) ->
{stop,normal,stopped,S};
-handle_call({is_cached,_File}, {_From,_Tag}, S=#state{cache=no_cache}) ->
- {reply, no, S};
-
-handle_call({set_primary_archive, File, ArchiveBin, FileInfo, ParserFun}, {_From,_Tag}, S=#state{mode=Mode}) ->
- case erl_prim_loader:set_primary_archive(File, ArchiveBin, FileInfo, ParserFun) of
+handle_call({set_primary_archive, File, ArchiveBin, FileInfo, ParserFun},
+ _From, S=#state{mode=Mode}) ->
+ case erl_prim_loader:set_primary_archive(File, ArchiveBin, FileInfo,
+ ParserFun) of
{ok, Files} ->
{reply, {ok, Mode, Files}, S};
{error, _Reason} = Error ->
{reply, Error, S}
end;
-handle_call({is_cached,File}, {_From,_Tag}, S=#state{cache=Cache}) ->
- ObjExt = objfile_extension(),
- Ext = filename:extension(File),
- Type = case Ext of
- ObjExt -> obj;
- ".app" -> app;
- _ -> undef
- end,
- if Type =:= undef ->
- {reply, no, S};
- true ->
- Key = {Type,list_to_atom(filename:rootname(File, Ext))},
- case ets:lookup(Cache, Key) of
- [] ->
- {reply, no, S};
- [{Key,Dir}] ->
- {reply, Dir, S}
- end
- end;
-
-handle_call(get_mode, {_From,_Tag}, S=#state{mode=Mode}) ->
+handle_call(get_mode, _From, S=#state{mode=Mode}) ->
{reply, Mode, S};
-handle_call(Other,{_From,_Tag}, S) ->
+handle_call({finish_loading,Prepared,EnsureLoaded}, _From, S) ->
+ {reply,finish_loading(Prepared, EnsureLoaded, S),S};
+
+handle_call(Other,_From, S) ->
error_msg(" ** Codeserver*** ignoring ~w~n ",[Other]),
{noreply,S}.
-do_mod_call(Action, Module, _Error, St) when is_atom(Module) ->
- Action(Module, St);
-do_mod_call(Action, Module, Error, St) ->
- try list_to_atom(Module) of
- Atom when is_atom(Atom) ->
- Action(Atom, St)
- catch
- error:badarg ->
- {reply,Error,St}
- end.
-
-%% --------------------------------------------------------------
-%% Cache functions
-%% --------------------------------------------------------------
-
-create_cache(St = #state{cache = no_cache}) ->
- Cache = ets:new(code_cache, [protected]),
- rehash_cache(Cache, St);
-create_cache(St) ->
- rehash_cache(St).
-
-rehash_cache(St = #state{cache = no_cache}) ->
- St;
-rehash_cache(St = #state{cache = OldCache}) ->
- ets:delete(OldCache),
- Cache = ets:new(code_cache, [protected]),
- rehash_cache(Cache, St).
-
-rehash_cache(Cache, St = #state{path = Path}) ->
- Exts = [{obj,objfile_extension()}, {app,".app"}],
- {Cache,NewPath} = locate_mods(lists:reverse(Path), first, Exts, Cache, []),
- St#state{cache = Cache, path=NewPath}.
-
-update_cache(Dirs, Where, Cache0) ->
- Exts = [{obj,objfile_extension()}, {app,".app"}],
- {Cache, _} = locate_mods(Dirs, Where, Exts, Cache0, []),
- Cache.
-
-locate_mods([Dir0|Path], Where, Exts, Cache, Acc) ->
- Dir = absname(Dir0), %% Cache always expands the path
- case erl_prim_loader:list_dir(Dir) of
- {ok, Files} ->
- Cache = filter_mods(Files, Where, Exts, Dir, Cache),
- locate_mods(Path, Where, Exts, Cache, [Dir|Acc]);
- error ->
- locate_mods(Path, Where, Exts, Cache, Acc)
- end;
-locate_mods([], _, _, Cache, Path) ->
- {Cache,Path}.
-
-filter_mods([File|Rest], Where, Exts, Dir, Cache) ->
- Ext = filename:extension(File),
- Root = list_to_atom(filename:rootname(File, Ext)),
- case lists:keyfind(Ext, 2, Exts) of
- {Type, _} ->
- Key = {Type,Root},
- case Where of
- first ->
- true = ets:insert(Cache, {Key,Dir});
- last ->
- case ets:lookup(Cache, Key) of
- [] ->
- true = ets:insert(Cache, {Key,Dir});
- _ ->
- ignore
- end
- end;
- false ->
- ok
- end,
- filter_mods(Rest, Where, Exts, Dir, Cache);
-filter_mods([], _, _, _, Cache) ->
- Cache.
-
%% --------------------------------------------------------------
%% Path handling functions.
%% --------------------------------------------------------------
@@ -519,7 +378,7 @@ filter_mods([], _, _, _, Cache) ->
%%
make_path(BundleDir, Bundles0) ->
Bundles = choose_bundles(Bundles0),
- make_path(BundleDir, Bundles, [], []).
+ make_path(BundleDir, Bundles, []).
choose_bundles(Bundles) ->
ArchiveExt = archive_extension(),
@@ -529,12 +388,10 @@ choose_bundles(Bundles) ->
create_bundle(FullName, ArchiveExt) ->
BaseName = filename:basename(FullName, ArchiveExt),
- case split(BaseName, "-") of
- [_, _|_] = Toks ->
- VsnStr = lists:last(Toks),
+ case split_base(BaseName) of
+ {Name, VsnStr} ->
case vsn_to_num(VsnStr) of
{ok, VsnNum} ->
- Name = join(lists:sublist(Toks, length(Toks)-1),"-"),
{Name,VsnNum,FullName};
false ->
{FullName,[0],FullName}
@@ -605,41 +462,44 @@ choose([{Name,NumVsn,NewFullName}=New|Bs], Acc, ArchiveExt) ->
choose([],Acc, _ArchiveExt) ->
Acc.
-make_path(_,[],Res,Bs) ->
- {Res,Bs};
-make_path(BundleDir,[Bundle|Tail],Res,Bs) ->
- Dir = filename:append(BundleDir,Bundle),
- Ebin = filename:append(Dir,"ebin"),
+make_path(_, [], Res) ->
+ Res;
+make_path(BundleDir, [Bundle|Tail], Res) ->
+ Dir = filename:append(BundleDir, Bundle),
+ Ebin = filename:append(Dir, "ebin"),
%% First try with /ebin
- case erl_prim_loader:read_file_info(Ebin) of
- {ok,#file_info{type=directory}} ->
- make_path(BundleDir,Tail,[Ebin|Res],[Bundle|Bs]);
- _ ->
+ case is_dir(Ebin) of
+ true ->
+ make_path(BundleDir, Tail, [Ebin|Res]);
+ false ->
%% Second try with archive
Ext = archive_extension(),
- Base = filename:basename(Dir, Ext),
- Ebin2 = filename:join([filename:dirname(Dir), Base ++ Ext, Base, "ebin"]),
+ Base = filename:basename(Bundle, Ext),
+ Ebin2 = filename:join([BundleDir, Base ++ Ext, Base, "ebin"]),
Ebins =
- case split(Base, "-") of
- [_, _|_] = Toks ->
- AppName = join(lists:sublist(Toks, length(Toks)-1),"-"),
- Ebin3 = filename:join([filename:dirname(Dir), Base ++ Ext, AppName, "ebin"]),
+ case split_base(Base) of
+ {AppName,_} ->
+ Ebin3 = filename:join([BundleDir, Base ++ Ext,
+ AppName, "ebin"]),
[Ebin3, Ebin2, Dir];
_ ->
[Ebin2, Dir]
end,
- try_ebin_dirs(Ebins,BundleDir,Tail,Res,Bundle, Bs)
+ case try_ebin_dirs(Ebins) of
+ {ok,FoundEbin} ->
+ make_path(BundleDir, Tail, [FoundEbin|Res]);
+ error ->
+ make_path(BundleDir, Tail, Res)
+ end
end.
-try_ebin_dirs([Ebin | Ebins],BundleDir,Tail,Res,Bundle,Bs) ->
- case erl_prim_loader:read_file_info(Ebin) of
- {ok,#file_info{type=directory}} ->
- make_path(BundleDir,Tail,[Ebin|Res],[Bundle|Bs]);
- _ ->
- try_ebin_dirs(Ebins,BundleDir,Tail,Res,Bundle,Bs)
+try_ebin_dirs([Ebin|Ebins]) ->
+ case is_dir(Ebin) of
+ true -> {ok,Ebin};
+ false -> try_ebin_dirs(Ebins)
end;
-try_ebin_dirs([],BundleDir,Tail,Res,_Bundle,Bs) ->
- make_path(BundleDir,Tail,Res,Bs).
+try_ebin_dirs([]) ->
+ error.
%%
@@ -757,19 +617,34 @@ exclude(Dir,Path) ->
%%
%%
get_name(Dir) ->
- get_name2(get_name1(Dir), []).
+ get_name_from_splitted(filename:split(Dir)).
+
+get_name_from_splitted([DirName,"ebin"]) ->
+ discard_after_hyphen(DirName);
+get_name_from_splitted([DirName]) ->
+ discard_after_hyphen(DirName);
+get_name_from_splitted([_|T]) ->
+ get_name_from_splitted(T);
+get_name_from_splitted([]) ->
+ "". %No name.
+
+discard_after_hyphen("-"++_) ->
+ [];
+discard_after_hyphen([H|T]) ->
+ [H|discard_after_hyphen(T)];
+discard_after_hyphen([]) ->
+ [].
-get_name1(Dir) ->
- case lists:reverse(filename:split(Dir)) of
- ["ebin",DirName|_] -> DirName;
- [DirName|_] -> DirName;
- _ -> "" % No name !
+split_base(BaseName) ->
+ case split(BaseName, "-") of
+ [_, _|_] = Toks ->
+ Vsn = lists:last(Toks),
+ AllButLast = lists:droplast(Toks),
+ {join(AllButLast, "-"),Vsn};
+ [_|_] ->
+ BaseName
end.
-get_name2([$-|_],Acc) -> lists:reverse(Acc);
-get_name2([H|T],Acc) -> get_name2(T,[H|Acc]);
-get_name2(_,Acc) -> lists:reverse(Acc).
-
check_path(Path) ->
PathChoice = init:code_path_choice(),
ArchiveExt = archive_extension(),
@@ -778,23 +653,23 @@ check_path(Path) ->
do_check_path([], _PathChoice, _ArchiveExt, Acc) ->
{ok, lists:reverse(Acc)};
do_check_path([Dir | Tail], PathChoice, ArchiveExt, Acc) ->
- case catch erl_prim_loader:read_file_info(Dir) of
- {ok, #file_info{type=directory}} ->
+ case is_dir(Dir) of
+ true ->
do_check_path(Tail, PathChoice, ArchiveExt, [Dir | Acc]);
- _ when PathChoice =:= strict ->
+ false when PathChoice =:= strict ->
%% Be strict. Only use dir as explicitly stated
{error, bad_directory};
- _ when PathChoice =:= relaxed ->
+ false when PathChoice =:= relaxed ->
%% Be relaxed
case catch lists:reverse(filename:split(Dir)) of
{'EXIT', _} ->
{error, bad_directory};
["ebin", App] ->
Dir2 = filename:join([App ++ ArchiveExt, App, "ebin"]),
- case erl_prim_loader:read_file_info(Dir2) of
- {ok, #file_info{type = directory}} ->
+ case is_dir(Dir2) of
+ true ->
do_check_path(Tail, PathChoice, ArchiveExt, [Dir2 | Acc]);
- _ ->
+ false ->
{error, bad_directory}
end;
["ebin", App, OptArchive | RevTop] ->
@@ -814,10 +689,10 @@ do_check_path([Dir | Tail], PathChoice, ArchiveExt, Acc) ->
Top = lists:reverse([OptArchive | RevTop]),
filename:join(Top ++ [App ++ ArchiveExt, App, "ebin"])
end,
- case erl_prim_loader:read_file_info(Dir2) of
- {ok, #file_info{type = directory}} ->
+ case is_dir(Dir2) of
+ true ->
do_check_path(Tail, PathChoice, ArchiveExt, [Dir2 | Acc]);
- _ ->
+ false ->
{error, bad_directory}
end;
_ ->
@@ -916,7 +791,7 @@ init_namedb(Path) ->
Db.
init_namedb([P|Path], Db) ->
- insert_name(P, Db),
+ insert_dir(P, Db),
init_namedb(Path, Db);
init_namedb([], _) ->
ok.
@@ -929,59 +804,39 @@ clear_namedb([], _) ->
ok.
-endif.
-insert_name(Dir, Db) ->
- case get_name(Dir) of
- Dir -> false;
- Name -> insert_name(Name, Dir, Db)
- end.
+%% Dir must be a complete pathname (not only a name).
+insert_dir(Dir, Db) ->
+ Splitted = filename:split(Dir),
+ Name = get_name_from_splitted(Splitted),
+ AppDir = filename:join(del_ebin_1(Splitted)),
+ do_insert_name(Name, AppDir, Db).
insert_name(Name, Dir, Db) ->
AppDir = del_ebin(Dir),
+ do_insert_name(Name, AppDir, Db).
+
+do_insert_name(Name, AppDir, Db) ->
{Base, SubDirs} = archive_subdirs(AppDir),
ets:insert(Db, {Name, AppDir, Base, SubDirs}),
true.
archive_subdirs(AppDir) ->
- IsDir =
- fun(RelFile) ->
- File = filename:join([AppDir, RelFile]),
- case erl_prim_loader:read_file_info(File) of
- {ok, #file_info{type = directory}} ->
- false;
- _ ->
- true
- end
- end,
- {Base, ArchiveDirs} = all_archive_subdirs(AppDir),
- {Base, lists:filter(IsDir, ArchiveDirs)}.
-
-all_archive_subdirs(AppDir) ->
- Ext = archive_extension(),
Base = filename:basename(AppDir),
- Dirs =
- case split(Base, "-") of
- [_, _|_] = Toks ->
- Base2 = join(lists:sublist(Toks, length(Toks)-1), "-"),
- [Base2, Base];
- _ ->
- [Base]
+ Dirs = case split_base(Base) of
+ {Name, _} -> [Name, Base];
+ _ -> [Base]
end,
+ Ext = archive_extension(),
try_archive_subdirs(AppDir ++ Ext, Base, Dirs).
try_archive_subdirs(Archive, Base, [Dir | Dirs]) ->
- ArchiveDir = filename:join([Archive, Dir]),
+ ArchiveDir = filename:append(Archive, Dir),
case erl_prim_loader:list_dir(ArchiveDir) of
{ok, Files} ->
- IsDir =
- fun(RelFile) ->
- File = filename:join([ArchiveDir, RelFile]),
- case erl_prim_loader:read_file_info(File) of
- {ok, #file_info{type = directory}} ->
- true;
- _ ->
- false
- end
- end,
+ IsDir = fun(RelFile) ->
+ File = filename:append(ArchiveDir, RelFile),
+ is_dir(File)
+ end,
{Dir, lists:filter(IsDir, Files)};
_ ->
try_archive_subdirs(Archive, Base, Dirs)
@@ -1075,22 +930,28 @@ check_pars(Name,Dir) ->
end.
del_ebin(Dir) ->
- case filename:basename(Dir) of
- "ebin" ->
- Dir2 = filename:dirname(Dir),
- Dir3 = filename:dirname(Dir2),
- Ext = archive_extension(),
- case filename:extension(Dir3) of
- E when E =:= Ext ->
- %% Strip archive extension
- filename:join([filename:dirname(Dir3),
- filename:basename(Dir3, Ext)]);
- _ ->
- Dir2
- end;
+ filename:join(del_ebin_1(filename:split(Dir))).
+
+del_ebin_1([Parent,App,"ebin"]) ->
+ case filename:basename(Parent) of
+ [] ->
+ %% Parent is the root directory
+ [Parent,App];
_ ->
- Dir
- end.
+ Ext = archive_extension(),
+ case filename:basename(Parent, Ext) of
+ Parent ->
+ %% Plain directory.
+ [Parent,App];
+ Archive ->
+ %% Archive.
+ [Archive]
+ end
+ end;
+del_ebin_1([H|T]) ->
+ [H|del_ebin_1(T)];
+del_ebin_1([]) ->
+ [].
replace_name(Dir, Db) ->
case get_name(Dir) of
@@ -1206,14 +1067,14 @@ add_paths(Where,[Dir|Tail],Path,NameDb) ->
add_paths(_,_,Path,_) ->
{ok,Path}.
-do_load_binary(Module, File, Binary, Caller, St) ->
- case modp(Module) andalso modp(File) andalso is_binary(Binary) of
+do_load_binary(Module, File, Binary, From, St) ->
+ case modp(File) andalso is_binary(Binary) of
true ->
- case erlang:module_loaded(to_atom(Module)) of
+ case erlang:module_loaded(Module) of
true -> do_purge(Module);
false -> ok
end,
- try_load_module(File, Module, Binary, Caller, St);
+ try_load_module(File, Module, Binary, From, St);
false ->
{reply,{error,badarg},St}
end.
@@ -1222,153 +1083,122 @@ modp(Atom) when is_atom(Atom) -> true;
modp(List) when is_list(List) -> int_list(List);
modp(_) -> false.
-load_abs(File, Mod, Caller, St) ->
+load_abs(File, Mod, From, St) ->
Ext = objfile_extension(),
FileName0 = lists:concat([File, Ext]),
FileName = absname(FileName0),
case erl_prim_loader:get_file(FileName) of
{ok,Bin,_} ->
- try_load_module(FileName, Mod, Bin, Caller, St);
+ try_load_module(FileName, Mod, Bin, From, St);
error ->
{reply,{error,nofile},St}
end.
-try_load_module(Mod, Dir, Caller, St) ->
- File = filename:append(Dir, to_list(Mod) ++
- objfile_extension()),
- case erl_prim_loader:get_file(File) of
- error ->
- {reply,error,St};
- {ok,Binary,FName} ->
- try_load_module(absname(FName), Mod, Binary, Caller, St)
- end.
-
-try_load_module(File, Mod, Bin, {From,_}=Caller, St0) ->
- M = to_atom(Mod),
- case pending_on_load(M, From, St0) of
- no ->
- try_load_module_1(File, M, Bin, Caller, St0);
- {yes,St} ->
- {noreply,St}
- end.
+try_load_module(File, Mod, Bin, From, St) ->
+ Action = fun(_, S) ->
+ try_load_module_1(File, Mod, Bin, From, S)
+ end,
+ handle_pending_on_load(Action, Mod, From, St).
-try_load_module_1(File, Mod, Bin, Caller, #state{moddb=Db}=St) ->
+try_load_module_1(File, Mod, Bin, From, #state{moddb=Db}=St) ->
case is_sticky(Mod, Db) of
true -> %% Sticky file reject the load
error_msg("Can't load module '~w' that resides in sticky dir\n",[Mod]),
{reply,{error,sticky_directory},St};
false ->
Architecture = erlang:system_info(hipe_architecture),
- try_load_module_2(File, Mod, Bin, Caller, Architecture, St)
+ try_load_module_2(File, Mod, Bin, From, Architecture, St)
end.
-try_load_module_2(File, Mod, Bin, Caller, undefined, St) ->
- try_load_module_3(File, Mod, Bin, Caller, undefined, St);
-try_load_module_2(File, Mod, Bin, Caller, Architecture,
+try_load_module_2(File, Mod, Bin, From, undefined, St) ->
+ try_load_module_3(File, Mod, Bin, From, undefined, St);
+try_load_module_2(File, Mod, Bin, From, Architecture,
#state{moddb=Db}=St) ->
- case catch load_native_code(Mod, Bin, Architecture) of
+ case catch hipe_unified_loader:load_native_code(Mod, Bin, Architecture) of
{module,Mod} = Module ->
- ets:insert(Db, {Mod,File}),
+ ets:insert(Db, [{{native,Mod},true},{Mod,File}]),
{reply,Module,St};
no_native ->
- try_load_module_3(File, Mod, Bin, Caller, Architecture, St);
+ try_load_module_3(File, Mod, Bin, From, Architecture, St);
Error ->
error_msg("Native loading of ~ts failed: ~p\n", [File,Error]),
{reply,ok,St}
end.
-try_load_module_3(File, Mod, Bin, Caller, Architecture,
- #state{moddb=Db}=St) ->
- case erlang:load_module(Mod, Bin) of
- {module,Mod} = Module ->
- ets:insert(Db, {Mod,File}),
- post_beam_load(Mod, Architecture),
- {reply,Module,St};
- {error,on_load} ->
- handle_on_load(Mod, File, Caller, St);
- {error,What} = Error ->
- error_msg("Loading of ~ts failed: ~p\n", [File, What]),
- {reply,Error,St}
- end.
-
-load_native_code(Mod, Bin, Architecture) ->
- %% During bootstrapping of Open Source Erlang, we don't have any hipe
- %% loader modules, but the Erlang emulator might be hipe enabled.
- %% Therefore we must test for that the loader modules are available
- %% before trying to to load native code.
- case erlang:module_loaded(hipe_unified_loader) of
- false ->
- no_native;
- true ->
- Result = hipe_unified_loader:load_native_code(Mod, Bin,
- Architecture),
- case Result of
- {module,_} ->
- put(?ANY_NATIVE_CODE_LOADED, true);
- _ ->
- ok
- end,
- Result
- end.
-
-hipe_result_to_status(Result) ->
+try_load_module_3(File, Mod, Bin, From, Architecture, St0) ->
+ Action = fun({module,_}=Module, #state{moddb=Db}=S) ->
+ ets:insert(Db, {Mod,File}),
+ post_beam_load([Mod], Architecture, S),
+ {reply,Module,S};
+ ({error,on_load_failure}=Error, S) ->
+ {reply,Error,S};
+ ({error,What}=Error, S) ->
+ error_msg("Loading of ~ts failed: ~p\n", [File, What]),
+ {reply,Error,S}
+ end,
+ Res = erlang:load_module(Mod, Bin),
+ handle_on_load(Res, Action, Mod, From, St0).
+
+hipe_result_to_status(Result, #state{moddb=Db}) ->
case Result of
- {module,_} ->
- put(?ANY_NATIVE_CODE_LOADED, true),
+ {module,Mod} ->
+ ets:insert(Db, [{{native,Mod},true}]),
Result;
_ ->
{error,Result}
end.
-post_beam_load(Mod, Architecture) ->
+post_beam_load(_, undefined, _) ->
+ %% HiPE is disabled.
+ ok;
+post_beam_load(Mods0, _Architecture, #state{moddb=Db}) ->
%% post_beam_load/2 can potentially be very expensive because it
- %% blocks multi-scheduling; thus we want to avoid the call if we
- %% know that it is not needed.
- case get(?ANY_NATIVE_CODE_LOADED) of
- true -> hipe_unified_loader:post_beam_load(Mod, Architecture);
- false -> ok
- end.
+ %% blocks multi-scheduling. Therefore, we only want to call
+ %% it with modules that are known to have native code loaded.
+ Mods = [M || M <- Mods0, ets:member(Db, {native,M})],
+ hipe_unified_loader:post_beam_load(Mods).
int_list([H|T]) when is_integer(H) -> int_list(T);
int_list([_|_]) -> false;
int_list([]) -> true.
-load_file(Mod0, {From,_}=Caller, St0) ->
- Mod = to_atom(Mod0),
- case pending_on_load(Mod, From, St0) of
- no -> load_file_1(Mod, Caller, St0);
- {yes,St} -> {noreply,St}
- end.
-
-load_file_1(Mod, Caller, #state{path=Path,cache=no_cache}=St) ->
+ensure_loaded(Mod, From, St0) ->
+ Action = fun(_, S) ->
+ case erlang:module_loaded(Mod) of
+ true ->
+ {reply,{module,Mod},S};
+ false ->
+ load_file_1(Mod, From, S)
+ end
+ end,
+ handle_pending_on_load(Action, Mod, From, St0).
+
+load_file(Mod, From, St0) ->
+ Action = fun(_, S) ->
+ load_file_1(Mod, From, S)
+ end,
+ handle_pending_on_load(Action, Mod, From, St0).
+
+load_file_1(Mod, From, #state{path=Path}=St) ->
case mod_to_bin(Path, Mod) of
error ->
{reply,{error,nofile},St};
{Mod,Binary,File} ->
- try_load_module(File, Mod, Binary, Caller, St)
- end;
-load_file_1(Mod, Caller, #state{cache=Cache}=St0) ->
- Key = {obj,Mod},
- case ets:lookup(Cache, Key) of
- [] ->
- St = rehash_cache(St0),
- case ets:lookup(St#state.cache, Key) of
- [] ->
- {reply,{error,nofile},St};
- [{Key,Dir}] ->
- try_load_module(Mod, Dir, Caller, St)
- end;
- [{Key,Dir}] ->
- try_load_module(Mod, Dir, Caller, St0)
+ try_load_module_1(File, Mod, Binary, From, St)
end.
mod_to_bin([Dir|Tail], Mod) ->
- File = filename:append(Dir, to_list(Mod) ++ objfile_extension()),
+ File = filename:append(Dir, atom_to_list(Mod) ++ objfile_extension()),
case erl_prim_loader:get_file(File) of
error ->
mod_to_bin(Tail, Mod);
- {ok,Bin,FName} ->
- {Mod,Bin,absname(FName)}
+ {ok,Bin,_} ->
+ case filename:pathtype(File) of
+ absolute ->
+ {Mod,Bin,File};
+ _ ->
+ {Mod,Bin,absname(File)}
+ end
end;
mod_to_bin([], Mod) ->
%% At last, try also erl_prim_loader's own method
@@ -1416,307 +1246,159 @@ absname_vr([[X, $:]|Name], _, _AbsBase) ->
absname(filename:join(Name), Dcwd).
-%% do_purge(Module)
-%% Kill all processes running code from *old* Module, and then purge the
-%% module. Return true if any processes killed, else false.
-
-do_purge(Mod0) ->
- Mod = to_atom(Mod0),
- case erlang:check_old_code(Mod) of
- false ->
- false;
- true ->
- Res = check_proc_code(erlang:processes(), Mod, true),
- try
- erlang:purge_module(Mod)
- catch
- _:_ -> ignore
- end,
- Res
+is_loaded(M, Db) ->
+ case ets:lookup(Db, M) of
+ [{M,File}] -> {file,File};
+ [] -> false
end.
-%% do_soft_purge(Module)
-%% Purge old code only if no procs remain that run old code.
-%% Return true in that case, false if procs remain (in this
-%% case old code is not purged)
+do_purge(Mod) ->
+ {_WasOld, DidKill} = erts_code_purger:purge(Mod),
+ DidKill.
-do_soft_purge(Mod0) ->
- Mod = to_atom(Mod0),
- case erlang:check_old_code(Mod) of
- false ->
- true;
- true ->
- case check_proc_code(erlang:processes(), Mod, false) of
- false ->
- false;
- true ->
- try
- erlang:purge_module(Mod)
- catch
- _:_ -> ignore
- end,
- true
- end
- end.
+do_soft_purge(Mod) ->
+ erts_code_purger:soft_purge(Mod).
-%%
-%% check_proc_code(Pids, Mod, Hard) - Send asynchronous
-%% requests to all processes to perform a check_process_code
-%% operation. Each process will check their own state and
-%% reply with the result. If 'Hard' equals
-%% - true, processes that refer 'Mod' will be killed. If
-%% any processes were killed true is returned; otherwise,
-%% false.
-%% - false, and any processes refer 'Mod', false will
-%% returned; otherwise, true.
-%%
-%% Requests will be sent to all processes identified by
-%% Pids at once, but without allowing GC to be performed.
-%% Check process code operations that are aborted due to
-%% GC need, will be restarted allowing GC. However, only
-%% ?MAX_CPC_GC_PROCS outstanding operation allowing GC at
-%% a time will be allowed. This in order not to blow up
-%% memory wise.
-%%
-%% We also only allow ?MAX_CPC_NO_OUTSTANDING_KILLS
-%% outstanding kills. This both in order to avoid flooding
-%% our message queue with 'DOWN' messages and limiting the
-%% amount of memory used to keep references to all
-%% outstanding kills.
-%%
+is_dir(Path) ->
+ case erl_prim_loader:read_file_info(Path) of
+ {ok,#file_info{type=directory}} -> true;
+ _ -> false
+ end.
-%% We maybe should allow more than two outstanding
-%% GC requests, but for now we play it safe...
--define(MAX_CPC_GC_PROCS, 2).
--define(MAX_CPC_NO_OUTSTANDING_KILLS, 10).
-
--record(cpc_static, {hard, module, tag}).
-
--record(cpc_kill, {outstanding = [],
- no_outstanding = 0,
- waiting = [],
- killed = false}).
-
-check_proc_code(Pids, Mod, Hard) ->
- Tag = erlang:make_ref(),
- CpcS = #cpc_static{hard = Hard,
- module = Mod,
- tag = Tag},
- check_proc_code(CpcS, cpc_init(CpcS, Pids, 0), 0, [], #cpc_kill{}, true).
-
-check_proc_code(#cpc_static{hard = true}, 0, 0, [],
- #cpc_kill{outstanding = [], waiting = [], killed = Killed},
- true) ->
- %% No outstanding requests. We did a hard check, so result is whether or
- %% not we killed any processes...
- Killed;
-check_proc_code(#cpc_static{hard = false}, 0, 0, [], _KillState, Success) ->
- %% No outstanding requests and we did a soft check...
- Success;
-check_proc_code(#cpc_static{hard = false, tag = Tag} = CpcS, NoReq0, NoGcReq0,
- [], _KillState, false) ->
- %% Failed soft check; just cleanup the remaining replies corresponding
- %% to the requests we've sent...
- {NoReq1, NoGcReq1} = receive
- {check_process_code, {Tag, _P, GC}, _Res} ->
- case GC of
- false -> {NoReq0-1, NoGcReq0};
- true -> {NoReq0, NoGcReq0-1}
- end
- end,
- check_proc_code(CpcS, NoReq1, NoGcReq1, [], _KillState, false);
-check_proc_code(#cpc_static{tag = Tag} = CpcS, NoReq0, NoGcReq0, NeedGC0,
- KillState0, Success) ->
-
- %% Check if we should request a GC operation
- {NoGcReq1, NeedGC1} = case NoGcReq0 < ?MAX_CPC_GC_PROCS of
- GcOpAllowed when GcOpAllowed == false;
- NeedGC0 == [] ->
- {NoGcReq0, NeedGC0};
- _ ->
- {NoGcReq0+1, cpc_request_gc(CpcS,NeedGC0)}
- end,
-
- %% Wait for a cpc reply or 'DOWN' message
- {NoReq1, NoGcReq2, Pid, Result, KillState1} = cpc_recv(Tag,
- NoReq0,
- NoGcReq1,
- KillState0),
-
- %% Check the result of the reply
- case Result of
- aborted ->
- %% Operation aborted due to the need to GC in order to
- %% determine if the process is referring the module.
- %% Schedule the operation for restart allowing GC...
- check_proc_code(CpcS, NoReq1, NoGcReq2, [Pid|NeedGC1], KillState1,
- Success);
- false ->
- %% Process not referring the module; done with this process...
- check_proc_code(CpcS, NoReq1, NoGcReq2, NeedGC1, KillState1,
- Success);
- true ->
- %% Process referring the module...
- case CpcS#cpc_static.hard of
- false ->
- %% ... and soft check. The whole operation failed so
- %% no point continuing; clean up and fail...
- check_proc_code(CpcS, NoReq1, NoGcReq2, [], KillState1,
- false);
- true ->
- %% ... and hard check; schedule kill of it...
- check_proc_code(CpcS, NoReq1, NoGcReq2, NeedGC1,
- cpc_sched_kill(Pid, KillState1), Success)
- end;
- 'DOWN' ->
- %% Handled 'DOWN' message
- check_proc_code(CpcS, NoReq1, NoGcReq2, NeedGC1,
- KillState1, Success)
+%%%
+%%% Loading of multiple modules in parallel.
+%%%
+
+finish_loading(Prepared, EnsureLoaded, #state{moddb=Db}=St) ->
+ Ps = [fun(L) -> finish_loading_ensure(L, EnsureLoaded) end,
+ fun(L) -> abort_if_pending_on_load(L, St) end,
+ fun(L) -> abort_if_sticky(L, Db) end,
+ fun(L) -> do_finish_loading(L, St) end],
+ run(Ps, Prepared).
+
+finish_loading_ensure(Prepared, true) ->
+ {ok,[P || {M,_}=P <- Prepared, not erlang:module_loaded(M)]};
+finish_loading_ensure(Prepared, false) ->
+ {ok,Prepared}.
+
+abort_if_pending_on_load(L, #state{on_load=[]}) ->
+ {ok,L};
+abort_if_pending_on_load(L, #state{on_load=OnLoad}) ->
+ Pending = [{M,pending_on_load} ||
+ {M,_} <- L,
+ lists:keymember(M, 2, OnLoad)],
+ case Pending of
+ [] -> {ok,L};
+ [_|_] -> {error,Pending}
end.
-cpc_recv(Tag, NoReq, NoGcReq, #cpc_kill{outstanding = []} = KillState) ->
- receive
- {check_process_code, {Tag, Pid, GC}, Res} ->
- cpc_handle_cpc(NoReq, NoGcReq, GC, Pid, Res, KillState)
- end;
-cpc_recv(Tag, NoReq, NoGcReq,
- #cpc_kill{outstanding = [R0, R1, R2, R3, R4 | _]} = KillState) ->
- receive
- {'DOWN', R, process, _, _} when R == R0;
- R == R1;
- R == R2;
- R == R3;
- R == R4 ->
- cpc_handle_down(NoReq, NoGcReq, R, KillState);
- {check_process_code, {Tag, Pid, GC}, Res} ->
- cpc_handle_cpc(NoReq, NoGcReq, GC, Pid, Res, KillState)
- end;
-cpc_recv(Tag, NoReq, NoGcReq, #cpc_kill{outstanding = [R|_]} = KillState) ->
- receive
- {'DOWN', R, process, _, _} ->
- cpc_handle_down(NoReq, NoGcReq, R, KillState);
- {check_process_code, {Tag, Pid, GC}, Res} ->
- cpc_handle_cpc(NoReq, NoGcReq, GC, Pid, Res, KillState)
+abort_if_sticky(L, Db) ->
+ Sticky = [{M,sticky_directory} || {M,_} <- L, is_sticky(M, Db)],
+ case Sticky of
+ [] -> {ok,L};
+ [_|_] -> {error,Sticky}
end.
-cpc_handle_down(NoReq, NoGcReq, R, #cpc_kill{outstanding = Rs,
- no_outstanding = N} = KillState) ->
- {NoReq, NoGcReq, undefined, 'DOWN',
- cpc_sched_kill_waiting(KillState#cpc_kill{outstanding = cpc_list_rm(R, Rs),
- no_outstanding = N-1})}.
-
-cpc_list_rm(R, [R|Rs]) ->
- Rs;
-cpc_list_rm(R0, [R1|Rs]) ->
- [R1|cpc_list_rm(R0, Rs)].
-
-cpc_handle_cpc(NoReq, NoGcReq, false, Pid, Res, KillState) ->
- {NoReq-1, NoGcReq, Pid, Res, KillState};
-cpc_handle_cpc(NoReq, NoGcReq, true, Pid, Res, KillState) ->
- {NoReq, NoGcReq-1, Pid, Res, KillState}.
-
-cpc_sched_kill_waiting(#cpc_kill{waiting = []} = KillState) ->
- KillState;
-cpc_sched_kill_waiting(#cpc_kill{outstanding = Rs,
- no_outstanding = N,
- waiting = [P|Ps]} = KillState) ->
- R = erlang:monitor(process, P),
- exit(P, kill),
- KillState#cpc_kill{outstanding = [R|Rs],
- no_outstanding = N+1,
- waiting = Ps,
- killed = true}.
-
-cpc_sched_kill(Pid, #cpc_kill{no_outstanding = N, waiting = Pids} = KillState)
- when N >= ?MAX_CPC_NO_OUTSTANDING_KILLS ->
- KillState#cpc_kill{waiting = [Pid|Pids]};
-cpc_sched_kill(Pid,
- #cpc_kill{outstanding = Rs, no_outstanding = N} = KillState) ->
- R = erlang:monitor(process, Pid),
- exit(Pid, kill),
- KillState#cpc_kill{outstanding = [R|Rs],
- no_outstanding = N+1,
- killed = true}.
-
-cpc_request(#cpc_static{tag = Tag, module = Mod}, Pid, AllowGc) ->
- erlang:check_process_code(Pid, Mod, [{async, {Tag, Pid, AllowGc}},
- {allow_gc, AllowGc}]).
-
-cpc_request_gc(CpcS, [Pid|Pids]) ->
- cpc_request(CpcS, Pid, true),
- Pids.
-
-cpc_init(_CpcS, [], NoReqs) ->
- NoReqs;
-cpc_init(CpcS, [Pid|Pids], NoReqs) ->
- cpc_request(CpcS, Pid, false),
- cpc_init(CpcS, Pids, NoReqs+1).
-
-% end of check_proc_code() implementation.
+do_finish_loading(Prepared, #state{moddb=Db}=St) ->
+ MagicBins = [B || {_,{B,_}} <- Prepared],
+ case erlang:finish_loading(MagicBins) of
+ ok ->
+ MFs = [{M,F} || {M,{_,F}} <- Prepared],
+ true = ets:insert(Db, MFs),
+ Ms = [M || {M,_} <- MFs],
+ Architecture = erlang:system_info(hipe_architecture),
+ post_beam_load(Ms, Architecture, St),
+ ok;
+ {Reason,Ms} ->
+ {error,[{M,Reason} || M <- Ms]}
+ end.
-is_loaded(M, Db) ->
- case ets:lookup(Db, M) of
- [{M,File}] -> {file,File};
- [] -> false
+run([F], Data) ->
+ F(Data);
+run([F|Fs], Data0) ->
+ case F(Data0) of
+ {ok,Data} ->
+ run(Fs, Data);
+ {error,_}=Error ->
+ Error
end.
%% -------------------------------------------------------
%% The on_load functionality.
%% -------------------------------------------------------
-handle_on_load(Mod, File, {From,_}, #state{on_load=OnLoad0}=St0) ->
+handle_on_load({error,on_load}, Action, Mod, From, St0) ->
+ #state{on_load=OnLoad0} = St0,
Fun = fun() ->
Res = erlang:call_on_load_function(Mod),
exit(Res)
end,
- {_,Ref} = spawn_monitor(Fun),
- OnLoad = [{Ref,Mod,File,[From]}|OnLoad0],
+ PidRef = spawn_monitor(Fun),
+ PidAction = {From,Action},
+ OnLoad = [{PidRef,Mod,[PidAction]}|OnLoad0],
St = St0#state{on_load=OnLoad},
- {noreply,St}.
+ {noreply,St};
+handle_on_load(Res, Action, _, _, St) ->
+ Action(Res, St).
-pending_on_load(_, _, #state{on_load=[]}) ->
- no;
-pending_on_load(Mod, From, #state{on_load=OnLoad0}=St) ->
- case lists:keymember(Mod, 2, OnLoad0) of
+handle_pending_on_load(Action, Mod, From, #state{on_load=OnLoad0}=St) ->
+ case lists:keyfind(Mod, 2, OnLoad0) of
false ->
- no;
- true ->
- OnLoad = pending_on_load_1(Mod, From, OnLoad0),
- {yes,St#state{on_load=OnLoad}}
+ Action(ok, St);
+ {{From,_Ref},Mod,_Pids} ->
+ %% The on_load function tried to make an external
+ %% call to its own module. That would be a deadlock.
+ %% Fail the call. (The call is probably from error_handler,
+ %% and it will ignore the actual error reason and cause
+ %% an undef execption.)
+ {reply,{error,deadlock},St};
+ {_,_,_} ->
+ OnLoad = handle_pending_on_load_1(Mod, {From,Action}, OnLoad0),
+ {noreply,St#state{on_load=OnLoad}}
end.
-pending_on_load_1(Mod, From, [{Ref,Mod,File,Pids}|T]) ->
- [{Ref,Mod,File,[From|Pids]}|T];
-pending_on_load_1(Mod, From, [H|T]) ->
- [H|pending_on_load_1(Mod, From, T)];
-pending_on_load_1(_, _, []) -> [].
+handle_pending_on_load_1(Mod, From, [{PidRef,Mod,Pids}|T]) ->
+ [{PidRef,Mod,[From|Pids]}|T];
+handle_pending_on_load_1(Mod, From, [H|T]) ->
+ [H|handle_pending_on_load_1(Mod, From, T)];
+handle_pending_on_load_1(_, _, []) -> [].
-finish_on_load(Ref, OnLoadRes, #state{on_load=OnLoad0,moddb=Db}=State) ->
- case lists:keyfind(Ref, 1, OnLoad0) of
+finish_on_load(PidRef, OnLoadRes, #state{on_load=OnLoad0}=St0) ->
+ case lists:keyfind(PidRef, 1, OnLoad0) of
false ->
%% Since this process in general silently ignores messages
%% it doesn't understand, it should also ignore a 'DOWN'
%% message with an unknown reference.
- State;
- {Ref,Mod,File,WaitingPids} ->
- finish_on_load_1(Mod, File, OnLoadRes, WaitingPids, Db),
- OnLoad = [E || {R,_,_,_}=E <- OnLoad0, R =/= Ref],
- State#state{on_load=OnLoad}
+ St0;
+ {PidRef,Mod,Waiting} ->
+ St = finish_on_load_1(Mod, OnLoadRes, Waiting, St0),
+ OnLoad = [E || {R,_,_}=E <- OnLoad0, R =/= PidRef],
+ St#state{on_load=OnLoad}
end.
-finish_on_load_1(Mod, File, OnLoadRes, WaitingPids, Db) ->
+finish_on_load_1(Mod, OnLoadRes, Waiting, St) ->
Keep = OnLoadRes =:= ok,
erlang:finish_after_on_load(Mod, Keep),
Res = case Keep of
false ->
_ = finish_on_load_report(Mod, OnLoadRes),
+ _ = erts_code_purger:purge(Mod),
{error,on_load_failure};
true ->
- ets:insert(Db, {Mod,File}),
{module,Mod}
end,
- _ = [reply(Pid, Res) || Pid <- WaitingPids],
- ok.
+ finish_on_load_2(Waiting, Res, St).
+
+finish_on_load_2([{Pid,Action}|T], Res, St0) ->
+ case Action(Res, St0) of
+ {reply,Rep,St} ->
+ _ = reply(Pid, Rep),
+ finish_on_load_2(T, Res, St);
+ {noreply,St} ->
+ finish_on_load_2(T, Res, St)
+ end;
+finish_on_load_2([], _, St) ->
+ St.
finish_on_load_report(_Mod, Atom) when is_atom(Atom) ->
%% No error reports for atoms.
@@ -1741,26 +1423,16 @@ finish_on_load_report(Mod, Term) ->
%% -------------------------------------------------------
all_loaded(Db) ->
- all_l(Db, ets:slot(Db, 0), 1, []).
+ Ms = ets:fun2ms(fun({M,_}=T) when is_atom(M) -> T end),
+ ets:select(Db, Ms).
-all_l(_Db, '$end_of_table', _, Acc) ->
- Acc;
-all_l(Db, ModInfo, N, Acc) ->
- NewAcc = strip_mod_info(ModInfo,Acc),
- all_l(Db, ets:slot(Db, N), N + 1, NewAcc).
-
-
-strip_mod_info([{{sticky,_},_}|T], Acc) -> strip_mod_info(T, Acc);
-strip_mod_info([H|T], Acc) -> strip_mod_info(T, [H|Acc]);
-strip_mod_info([], Acc) -> Acc.
-
-% error_msg(Format) ->
-% error_msg(Format,[]).
+-spec error_msg(io:format(), [term()]) -> 'ok'.
error_msg(Format, Args) ->
Msg = {notify,{error, group_leader(), {self(), Format, Args}}},
error_logger ! Msg,
ok.
+-spec info_msg(io:format(), [term()]) -> 'ok'.
info_msg(Format, Args) ->
Msg = {notify,{info_msg, group_leader(), {self(), Format, Args}}},
error_logger ! Msg,
@@ -1774,6 +1446,3 @@ archive_extension() ->
to_list(X) when is_list(X) -> X;
to_list(X) when is_atom(X) -> atom_to_list(X).
-
-to_atom(X) when is_atom(X) -> X;
-to_atom(X) when is_list(X) -> list_to_atom(X).
diff --git a/lib/kernel/src/disk_log.erl b/lib/kernel/src/disk_log.erl
index f5450f30af..9b44021872 100644
--- a/lib/kernel/src/disk_log.erl
+++ b/lib/kernel/src/disk_log.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1310,13 +1310,20 @@ compare_arg(_Attr, _Val, _A) ->
%% -> {ok, Res, log(), Cnt} | Error
do_open(A) ->
- L = #log{name = A#arg.name,
- filename = A#arg.file,
- size = A#arg.size,
- head = mk_head(A#arg.head, A#arg.format),
- mode = A#arg.mode,
- version = A#arg.version},
- do_open2(L, A).
+ #arg{type = Type, format = Format, name = Name, head = Head0,
+ file = FName, repair = Repair, size = Size, mode = Mode,
+ version = V} = A,
+ Head = mk_head(Head0, Format),
+ case do_open2(Type, Format, Name, FName, Repair, Size, Mode, Head, V) of
+ {ok, Ret, Extra, FormatType, NoItems} ->
+ L = #log{name = Name, type = Type, format = Format,
+ filename = FName, size = Size,
+ format_type = FormatType, head = Head, mode = Mode,
+ version = V, extra = Extra},
+ {ok, Ret, L, NoItems};
+ Error ->
+ Error
+ end.
mk_head({head, Term}, internal) -> {ok, term_to_binary(Term)};
mk_head({head, Bytes}, external) -> {ok, check_bytes(Bytes)};
@@ -1432,57 +1439,44 @@ do_inc_wrap_file(L) ->
%%-----------------------------------------------------------------
%% -> {ok, Reply, log(), Cnt} | Error
%% Note: the header is always written, even if the log size is too small.
-do_open2(L, #arg{type = halt, format = internal, name = Name,
- file = FName, repair = Repair, size = Size, mode = Mode}) ->
- case catch disk_log_1:int_open(FName, Repair, Mode, L#log.head) of
+do_open2(halt, internal, Name, FName, Repair, Size, Mode, Head, _V) ->
+ case catch disk_log_1:int_open(FName, Repair, Mode, Head) of
{ok, {_Alloc, FdC, {NoItems, _NoBytes}, FileSize}} ->
Halt = #halt{fdc = FdC, curB = FileSize, size = Size},
- {ok, {ok, Name}, L#log{format_type = halt_int, extra = Halt},
- NoItems};
+ {ok, {ok, Name}, Halt, halt_int, NoItems};
{repaired, FdC, Rec, Bad, FileSize} ->
Halt = #halt{fdc = FdC, curB = FileSize, size = Size},
{ok, {repaired, Name, {recovered, Rec}, {badbytes, Bad}},
- L#log{format_type = halt_int, extra = Halt},
- Rec};
+ Halt, halt_int, Rec};
Error ->
Error
end;
-do_open2(L, #arg{type = wrap, format = internal, size = {MaxB, MaxF},
- name = Name, repair = Repair, file = FName, mode = Mode,
- version = V}) ->
+do_open2(wrap, internal, Name, FName, Repair, Size, Mode, Head, V) ->
+ {MaxB, MaxF} = Size,
case catch
- disk_log_1:mf_int_open(FName, MaxB, MaxF, Repair, Mode, L#log.head, V) of
+ disk_log_1:mf_int_open(FName, MaxB, MaxF, Repair, Mode, Head, V) of
{ok, Handle, Cnt} ->
- {ok, {ok, Name}, L#log{type = wrap,
- format_type = wrap_int,
- extra = Handle}, Cnt};
+ {ok, {ok, Name}, Handle, wrap_int, Cnt};
{repaired, Handle, Rec, Bad, Cnt} ->
{ok, {repaired, Name, {recovered, Rec}, {badbytes, Bad}},
- L#log{type = wrap, format_type = wrap_int, extra = Handle}, Cnt};
+ Handle, wrap_int, Cnt};
Error ->
Error
end;
-do_open2(L, #arg{type = halt, format = external, file = FName, name = Name,
- size = Size, repair = Repair, mode = Mode}) ->
- case catch disk_log_1:ext_open(FName, Repair, Mode, L#log.head) of
+do_open2(halt, external, Name, FName, Repair, Size, Mode, Head, _V) ->
+ case catch disk_log_1:ext_open(FName, Repair, Mode, Head) of
{ok, {_Alloc, FdC, {NoItems, _NoBytes}, FileSize}} ->
Halt = #halt{fdc = FdC, curB = FileSize, size = Size},
- {ok, {ok, Name},
- L#log{format_type = halt_ext, format = external, extra = Halt},
- NoItems};
+ {ok, {ok, Name}, Halt, halt_ext, NoItems};
Error ->
Error
end;
-do_open2(L, #arg{type = wrap, format = external, size = {MaxB, MaxF},
- name = Name, file = FName, repair = Repair, mode = Mode,
- version = V}) ->
+do_open2(wrap, external, Name, FName, Repair, Size, Mode, Head, V) ->
+ {MaxB, MaxF} = Size,
case catch
- disk_log_1:mf_ext_open(FName, MaxB, MaxF, Repair, Mode, L#log.head, V) of
+ disk_log_1:mf_ext_open(FName, MaxB, MaxF, Repair, Mode, Head, V) of
{ok, Handle, Cnt} ->
- {ok, {ok, Name}, L#log{type = wrap,
- format_type = wrap_ext,
- extra = Handle,
- format = external}, Cnt};
+ {ok, {ok, Name}, Handle, wrap_ext, Cnt};
Error ->
Error
end.
diff --git a/lib/kernel/src/disk_log.hrl b/lib/kernel/src/disk_log.hrl
index 6c0aea070f..3262d979ee 100644
--- a/lib/kernel/src/disk_log.hrl
+++ b/lib/kernel/src/disk_log.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -152,8 +152,8 @@
users = 0 :: non_neg_integer(), %% non-linked users
filename :: file:filename(), %% real name of the file
owners = [] :: [{pid(), boolean()}],%% [{pid, notify}]
- type = halt :: dlog_type(),
- format = internal :: dlog_format(),
+ type :: dlog_type(),
+ format :: dlog_format(),
format_type :: dlog_format_type(),
head = none, %% none | {head, H} | {M,F,A}
%% called when wraplog wraps
diff --git a/lib/kernel/src/disk_log_server.erl b/lib/kernel/src/disk_log_server.erl
index 735f1e5ceb..78c15d0ad8 100644
--- a/lib/kernel/src/disk_log_server.erl
+++ b/lib/kernel/src/disk_log_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/disk_log_sup.erl b/lib/kernel/src/disk_log_sup.erl
index c09b3f94d1..db5e3ecb3a 100644
--- a/lib/kernel/src/disk_log_sup.erl
+++ b/lib/kernel/src/disk_log_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/dist_ac.erl b/lib/kernel/src/dist_ac.erl
index f649f33a53..6c2fa0b6b1 100644
--- a/lib/kernel/src/dist_ac.erl
+++ b/lib/kernel/src/dist_ac.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/dist_util.erl b/lib/kernel/src/dist_util.erl
index c9fc26d62c..47d0c1b861 100644
--- a/lib/kernel/src/dist_util.erl
+++ b/lib/kernel/src/dist_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -118,7 +118,8 @@ make_this_flags(RequestType, OtherNode) ->
?DFLAG_DIST_HDR_ATOM_CACHE bor
?DFLAG_SMALL_ATOM_TAGS bor
?DFLAG_UTF8_ATOMS bor
- ?DFLAG_MAP_TAG).
+ ?DFLAG_MAP_TAG bor
+ ?DFLAG_BIG_CREATION).
handshake_other_started(#hs_data{request_type=ReqType}=HSData0) ->
{PreOtherFlags,Node,Version} = recv_name(HSData0),
@@ -155,7 +156,7 @@ is_allowed(#hs_data{other_node = Node,
send_status(HSData, not_allowed),
error_msg("** Connection attempt from "
"disallowed node ~w ** ~n", [Node]),
- ?shutdown(Node);
+ ?shutdown2(Node, {is_allowed, not_allowed});
_ -> true
end.
@@ -196,7 +197,7 @@ check_dflag_xnc(#hs_data{other_node = Node,
error_msg("** ~w: Connection attempt ~s node ~w ~s "
"since it cannot handle extended ~s. "
"**~n", [node(), Dir, Node, How, What]),
- ?shutdown(Node)
+ ?shutdown2(Node, {check_dflag_xnc_failed, What})
end.
@@ -576,13 +577,13 @@ recv_challenge(#hs_data{socket=Socket,other_node=Node,
[Node, Challenge,Version]),
{Flags,Challenge};
_ ->
- ?shutdown(no_node)
+ ?shutdown2(no_node, {recv_challenge_failed, no_node, Ns})
catch
error:badarg ->
- ?shutdown(no_node)
+ ?shutdown2(no_node, {recv_challenge_failed, no_node, Ns})
end;
- _ ->
- ?shutdown(no_node)
+ Other ->
+ ?shutdown2(no_node, {recv_challenge_failed, Other})
end.
@@ -606,10 +607,10 @@ recv_challenge_reply(#hs_data{socket = Socket,
_ ->
error_msg("** Connection attempt from "
"disallowed node ~w ** ~n", [NodeB]),
- ?shutdown(NodeB)
+ ?shutdown2(NodeB, {recv_challenge_reply_failed, bad_cookie})
end;
- _ ->
- ?shutdown(no_node)
+ Other ->
+ ?shutdown2(no_node, {recv_challenge_reply_failed, Other})
end.
recv_challenge_ack(#hs_data{socket = Socket, f_recv = FRecv,
@@ -626,10 +627,10 @@ recv_challenge_ack(#hs_data{socket = Socket, f_recv = FRecv,
_ ->
error_msg("** Connection attempt to "
"disallowed node ~w ** ~n", [NodeB]),
- ?shutdown(NodeB)
+ ?shutdown2(NodeB, {recv_challenge_ack_failed, bad_cookie})
end;
- _ ->
- ?shutdown(NodeB)
+ Other ->
+ ?shutdown2(NodeB, {recv_challenge_ack_failed, Other})
end.
recv_status(#hs_data{kernel_pid = Kernel, socket = Socket,
@@ -639,7 +640,7 @@ recv_status(#hs_data{kernel_pid = Kernel, socket = Socket,
Stat = list_to_atom(StrStat),
?debug({dist_util,self(),recv_status, Node, Stat}),
case Stat of
- not_allowed -> ?shutdown(Node);
+ not_allowed -> ?shutdown2(Node, {recv_status_failed, not_allowed});
nok ->
%% wait to be killed by net_kernel
receive
@@ -656,10 +657,10 @@ recv_status(#hs_data{kernel_pid = Kernel, socket = Socket,
end;
_ -> Stat
end;
- _Error ->
+ Error ->
?debug({dist_util,self(),recv_status_error,
- Node, _Error}),
- ?shutdown(Node)
+ Node, Error}),
+ ?shutdown2(Node, {recv_status_failed, Error})
end.
@@ -758,7 +759,7 @@ setup_timer(Pid, Timeout) ->
setup_timer(Pid, Timeout)
after Timeout ->
?trace("Timer expires ~p, ~p~n",[Pid, Timeout]),
- ?shutdown(timer)
+ ?shutdown2(timer, setup_timer_timeout)
end.
reset_timer(Timer) ->
diff --git a/lib/kernel/src/erl_boot_server.erl b/lib/kernel/src/erl_boot_server.erl
index 4076fab86d..ac81cc9689 100644
--- a/lib/kernel/src/erl_boot_server.erl
+++ b/lib/kernel/src/erl_boot_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/erl_ddll.erl b/lib/kernel/src/erl_ddll.erl
index 6180510bdd..89a02cc762 100644
--- a/lib/kernel/src/erl_ddll.erl
+++ b/lib/kernel/src/erl_ddll.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/erl_distribution.erl b/lib/kernel/src/erl_distribution.erl
index 99db7a8bf0..0bec78e938 100644
--- a/lib/kernel/src/erl_distribution.erl
+++ b/lib/kernel/src/erl_distribution.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,20 +21,47 @@
-behaviour(supervisor).
--export([start_link/0,start_link/1,init/1,start/1,stop/0]).
+-export([start_link/0,start_link/2,init/1,start/1,stop/0]).
-define(DBG,erlang:display([?MODULE,?LINE])).
+%% Called during system start-up.
+
start_link() ->
- case catch start_p() of
- {ok,Args} ->
- start_link(Args);
- _ ->
- ignore
+ do_start_link([{sname,shortnames},{name,longnames}]).
+
+%% Called from net_kernel:start/1 to start distribution after the
+%% system has already started.
+
+start(Args) ->
+ C = {net_sup_dynamic, {?MODULE,start_link,[Args,false]}, permanent,
+ 1000, supervisor, [erl_distribution]},
+ supervisor:start_child(kernel_sup, C).
+
+%% Stop distribution.
+
+stop() ->
+ case supervisor:terminate_child(kernel_sup, net_sup_dynamic) of
+ ok ->
+ supervisor:delete_child(kernel_sup, net_sup_dynamic);
+ Error ->
+ case whereis(net_sup) of
+ Pid when is_pid(Pid) ->
+ %% Dist. started through -sname | -name flags
+ {error, not_allowed};
+ _ ->
+ Error
+ end
end.
-start_link(Args) ->
- supervisor:start_link({local,net_sup},erl_distribution,Args).
+%%%
+%%% Internal helper functions.
+%%%
+
+%% Helper start function.
+
+start_link(Args, CleanHalt) ->
+ supervisor:start_link({local,net_sup}, ?MODULE, [Args,CleanHalt]).
init(NetArgs) ->
Epmd =
@@ -47,31 +74,20 @@ init(NetArgs) ->
permanent,2000,worker,[EpmdMod]}]
end,
Auth = {auth,{auth,start_link,[]},permanent,2000,worker,[auth]},
- Kernel = {net_kernel,{net_kernel,start_link,[NetArgs]},
+ Kernel = {net_kernel,{net_kernel,start_link,NetArgs},
permanent,2000,worker,[net_kernel]},
EarlySpecs = net_kernel:protocol_childspecs(),
{ok,{{one_for_all,0,1}, EarlySpecs ++ Epmd ++ [Auth,Kernel]}}.
-start_p() ->
- sname(),
- lname(),
- false.
-
-sname() ->
- case init:get_argument(sname) of
+do_start_link([{Arg,Flag}|T]) ->
+ case init:get_argument(Arg) of
{ok,[[Name]]} ->
- throw({ok,[list_to_atom(Name),shortnames|ticktime()]});
+ start_link([list_to_atom(Name),Flag|ticktime()], true);
_ ->
- false
- end.
-
-lname() ->
- case init:get_argument(name) of
- {ok,[[Name]]} ->
- throw({ok,[list_to_atom(Name),longnames|ticktime()]});
- _ ->
- false
- end.
+ do_start_link(T)
+ end;
+do_start_link([]) ->
+ ignore.
ticktime() ->
%% catch, in case the system was started with boot file start_old,
@@ -84,23 +100,3 @@ ticktime() ->
_ ->
[]
end.
-
-start(Args) ->
- C = {net_sup_dynamic, {erl_distribution, start_link, [Args]}, permanent,
- 1000, supervisor, [erl_distribution]},
- supervisor:start_child(kernel_sup, C).
-
-stop() ->
- case supervisor:terminate_child(kernel_sup, net_sup_dynamic) of
- ok ->
- supervisor:delete_child(kernel_sup, net_sup_dynamic);
- Error ->
- case whereis(net_sup) of
- Pid when is_pid(Pid) ->
- %% Dist. started through -sname | -name flags
- {error, not_allowed};
- _ ->
- Error
- end
- end.
-
diff --git a/lib/kernel/src/erl_epmd.erl b/lib/kernel/src/erl_epmd.erl
index c6202dd796..f8ef4a475d 100644
--- a/lib/kernel/src/erl_epmd.erl
+++ b/lib/kernel/src/erl_epmd.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/erl_epmd.hrl b/lib/kernel/src/erl_epmd.hrl
index f3585fea5e..3efcc81b55 100644
--- a/lib/kernel/src/erl_epmd.hrl
+++ b/lib/kernel/src/erl_epmd.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/erl_reply.erl b/lib/kernel/src/erl_reply.erl
index ba046980f6..e1e046cbb4 100644
--- a/lib/kernel/src/erl_reply.erl
+++ b/lib/kernel/src/erl_reply.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/error_handler.erl b/lib/kernel/src/error_handler.erl
index 095e1163f7..59ca8e690d 100644
--- a/lib/kernel/src/error_handler.erl
+++ b/lib/kernel/src/error_handler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/error_logger.erl b/lib/kernel/src/error_logger.erl
index eb231fd155..3523f680a3 100644
--- a/lib/kernel/src/error_logger.erl
+++ b/lib/kernel/src/error_logger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -435,5 +435,82 @@ add_node(X, Pid) ->
%% Can't do io_lib:format
-display2(Tag,F,A) ->
- erlang:display({error_logger,Tag,F,A}).
+display2({{_Y,_Mo,_D},{_H,_Mi,_S}} = Date, F, A) ->
+ display_date(Date),
+ display3(string_p(F), F, A).
+
+display_date({{Y,Mo,D},{H,Mi,S}}) ->
+ erlang:display_string(
+ integer_to_list(Y) ++ "-" ++
+ two_digits(Mo) ++ "-" ++
+ two_digits(D) ++ " " ++
+ two_digits(H) ++ ":" ++
+ two_digits(Mi) ++ ":" ++
+ two_digits(S) ++ " ").
+
+two_digits(N) when 0 =< N, N =< 9 ->
+ [$0, $0 + N];
+two_digits(N) ->
+ integer_to_list(N).
+
+display3(true, F, A) ->
+ %% Format string with arguments
+ erlang:display_string(F ++ "\n"),
+ [begin
+ erlang:display_string("\t"),
+ erlang:display(Arg)
+ end || Arg <- A],
+ ok;
+display3(false, Atom, A) when is_atom(Atom) ->
+ %% The widest atom seems to be 'supervisor_report' at 17.
+ ColumnWidth = 20,
+ AtomString = atom_to_list(Atom),
+ AtomLength = length(AtomString),
+ Padding = lists:duplicate(ColumnWidth - AtomLength, $\s),
+ erlang:display_string(AtomString ++ Padding),
+ display4(A);
+display3(_, F, A) ->
+ erlang:display({F, A}).
+
+display4([A, []]) ->
+ %% Not sure why crash reports look like this.
+ display4(A);
+display4(A = [_|_]) ->
+ case lists:all(fun({Key,_Value}) -> is_atom(Key); (_) -> false end, A) of
+ true ->
+ erlang:display_string("\n"),
+ lists:foreach(
+ fun({Key, Value}) ->
+ erlang:display_string(
+ " " ++
+ atom_to_list(Key) ++
+ ": "),
+ erlang:display(Value)
+ end, A);
+ false ->
+ erlang:display(A)
+ end;
+display4(A) ->
+ erlang:display(A).
+
+string_p([]) ->
+ false;
+string_p(Term) ->
+ string_p1(Term).
+
+string_p1([H|T]) when is_integer(H), H >= $\s, H < 255 ->
+ string_p1(T);
+string_p1([$\n|T]) -> string_p1(T);
+string_p1([$\r|T]) -> string_p1(T);
+string_p1([$\t|T]) -> string_p1(T);
+string_p1([$\v|T]) -> string_p1(T);
+string_p1([$\b|T]) -> string_p1(T);
+string_p1([$\f|T]) -> string_p1(T);
+string_p1([$\e|T]) -> string_p1(T);
+string_p1([H|T]) when is_list(H) ->
+ case string_p1(H) of
+ true -> string_p1(T);
+ _ -> false
+ end;
+string_p1([]) -> true;
+string_p1(_) -> false.
diff --git a/lib/kernel/src/erts_debug.erl b/lib/kernel/src/erts_debug.erl
index 39308c0043..7b3f1e313a 100644
--- a/lib/kernel/src/erts_debug.erl
+++ b/lib/kernel/src/erts_debug.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,7 +34,8 @@
-export([breakpoint/2, disassemble/1, display/1, dist_ext_to_term/2,
dump_monitors/1, dump_links/1, flat_size/1,
get_internal_state/1, instructions/0, lock_counters/1,
- map_info/1, same/2, set_internal_state/2]).
+ map_info/1, same/2, set_internal_state/2,
+ size_shared/1, copy_shared/1]).
-spec breakpoint(MFA, Flag) -> non_neg_integer() when
MFA :: {Module :: module(),
@@ -86,6 +87,18 @@ dump_links(_) ->
flat_size(_) ->
erlang:nif_error(undef).
+-spec size_shared(Term) -> non_neg_integer() when
+ Term :: term().
+
+size_shared(_) ->
+ erlang:nif_error(undef).
+
+-spec copy_shared(Term) -> term() when
+ Term :: term().
+
+copy_shared(_) ->
+ erlang:nif_error(undef).
+
-spec get_internal_state(W) -> term() when
W :: reds_left | node_and_dist_references | monitoring_nodes
| next_pid | 'DbTable_words' | check_io_debug
@@ -230,7 +243,7 @@ map_size(Map,Seen0,Sum0) ->
%% is not allowed to leak anywhere. They are only allowed in
%% containers (cons cells and tuples, not maps), in gc and
%% in erts_debug:same/2
- case erts_internal:map_type(Map) of
+ case erts_internal:term_type(Map) of
flatmap ->
Kt = erts_internal:map_to_tuple_keys(Map),
Vs = maps:values(Map),
diff --git a/lib/kernel/src/file.erl b/lib/kernel/src/file.erl
index 1007f04413..58b601e456 100644
--- a/lib/kernel/src/file.erl
+++ b/lib/kernel/src/file.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1227,7 +1227,8 @@ change_time(Name, {{AY, AM, AD}, {AH, AMin, ASec}}=Atime,
%% Send data using sendfile
%%
--define(MAX_CHUNK_SIZE, (1 bsl 20)*20). %% 20 MB, has to fit in primary memory
+%% 1 MB, Windows seems to behave badly if it is much larger then this
+-define(MAX_CHUNK_SIZE, (1 bsl 20)).
-spec sendfile(RawFile, Socket, Offset, Bytes, Opts) ->
{'ok', non_neg_integer()} | {'error', inet:posix() |
diff --git a/lib/kernel/src/file_server.erl b/lib/kernel/src/file_server.erl
index 6df6be7d06..6504174cbc 100644
--- a/lib/kernel/src/file_server.erl
+++ b/lib/kernel/src/file_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/gen_sctp.erl b/lib/kernel/src/gen_sctp.erl
index a47535b2f8..b133e6fed4 100644
--- a/lib/kernel/src/gen_sctp.erl
+++ b/lib/kernel/src/gen_sctp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -124,8 +124,8 @@ open() ->
SockType :: seqpacket | stream,
Socket :: sctp_socket().
-open(Opts) when is_list(Opts) ->
- Mod = mod(Opts, undefined),
+open(Opts0) when is_list(Opts0) ->
+ {Mod, Opts} = inet:sctp_module(Opts0),
case Mod:open(Opts) of
{error,badarg} ->
erlang:error(badarg, [Opts]);
@@ -445,32 +445,3 @@ controlling_process(S, Pid) when is_port(S), is_pid(Pid) ->
inet:udp_controlling_process(S, Pid);
controlling_process(S, Pid) ->
erlang:error(badarg, [S,Pid]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Utilites
-%%
-
-%% Get the SCTP module, but IPv6 address overrides default IPv4
-mod(Address) ->
- case inet_db:sctp_module() of
- inet_sctp when tuple_size(Address) =:= 8 ->
- inet6_sctp;
- Mod ->
- Mod
- end.
-
-%% Get the SCTP module, but option sctp_module|inet|inet6 overrides
-mod([{sctp_module,Mod}|_], _Address) ->
- Mod;
-mod([inet|_], _Address) ->
- inet_sctp;
-mod([inet6|_], _Address) ->
- inet6_sctp;
-mod([{ip, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([{ifaddr, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([_|Opts], Address) ->
- mod(Opts, Address);
-mod([], Address) ->
- mod(Address).
diff --git a/lib/kernel/src/gen_tcp.erl b/lib/kernel/src/gen_tcp.erl
index 8cb2a725e8..1a21541b7c 100644
--- a/lib/kernel/src/gen_tcp.erl
+++ b/lib/kernel/src/gen_tcp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -96,17 +96,17 @@
tos |
ipv6_v6only.
-type connect_option() ::
- {ip, inet:ip_address()} |
+ {ip, inet:socket_address()} |
{fd, Fd :: non_neg_integer()} |
- {ifaddr, inet:ip_address()} |
+ {ifaddr, inet:socket_address()} |
inet:address_family() |
{port, inet:port_number()} |
{tcp_module, module()} |
option().
-type listen_option() ::
- {ip, inet:ip_address()} |
+ {ip, inet:socket_address()} |
{fd, Fd :: non_neg_integer()} |
- {ifaddr, inet:ip_address()} |
+ {ifaddr, inet:socket_address()} |
inet:address_family() |
{port, inet:port_number()} |
{backlog, B :: non_neg_integer()} |
@@ -122,7 +122,7 @@
%%
-spec connect(Address, Port, Options) -> {ok, Socket} | {error, Reason} when
- Address :: inet:ip_address() | inet:hostname(),
+ Address :: inet:socket_address() | inet:hostname(),
Port :: inet:port_number(),
Options :: [connect_option()],
Socket :: socket(),
@@ -133,7 +133,7 @@ connect(Address, Port, Opts) ->
-spec connect(Address, Port, Options, Timeout) ->
{ok, Socket} | {error, Reason} when
- Address :: inet:ip_address() | inet:hostname(),
+ Address :: inet:socket_address() | inet:hostname(),
Port :: inet:port_number(),
Options :: [connect_option()],
Timeout :: timeout(),
@@ -151,8 +151,8 @@ connect(Address, Port, Opts, Time) ->
Error -> Error
end.
-connect1(Address,Port,Opts,Timer) ->
- Mod = mod(Opts, Address),
+connect1(Address, Port, Opts0, Timer) ->
+ {Mod, Opts} = inet:tcp_module(Opts0, Address),
case Mod:getaddrs(Address,Timer) of
{ok,IPs} ->
case Mod:getserv(Port) of
@@ -185,8 +185,8 @@ try_connect([], _Port, _Opts, _Timer, _Mod, Err) ->
ListenSocket :: socket(),
Reason :: system_limit | inet:posix().
-listen(Port, Opts) ->
- Mod = mod(Opts, undefined),
+listen(Port, Opts0) ->
+ {Mod, Opts} = inet:tcp_module(Opts0),
case Mod:getserv(Port) of
{ok,TP} ->
Mod:listen(TP, Opts);
@@ -335,32 +335,6 @@ controlling_process(S, NewOwner) ->
%%
%% Create a port/socket from a file descriptor
%%
-fdopen(Fd, Opts) ->
- Mod = mod(Opts, undefined),
+fdopen(Fd, Opts0) ->
+ {Mod, Opts} = inet:tcp_module(Opts0),
Mod:fdopen(Fd, Opts).
-
-%% Get the tcp_module, but IPv6 address overrides default IPv4
-mod(Address) ->
- case inet_db:tcp_module() of
- inet_tcp when tuple_size(Address) =:= 8 ->
- inet6_tcp;
- Mod ->
- Mod
- end.
-
-%% Get the tcp_module, but option tcp_module|inet|inet6 overrides
-mod([{tcp_module,Mod}|_], _Address) ->
- Mod;
-mod([inet|_], _Address) ->
- inet_tcp;
-mod([inet6|_], _Address) ->
- inet6_tcp;
-mod([{ip, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([{ifaddr, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([_|Opts], Address) ->
- mod(Opts, Address);
-mod([], Address) ->
- mod(Address).
-
diff --git a/lib/kernel/src/gen_udp.erl b/lib/kernel/src/gen_udp.erl
index 6698d5f0fa..98d2f0bcfb 100644
--- a/lib/kernel/src/gen_udp.erl
+++ b/lib/kernel/src/gen_udp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -92,18 +92,18 @@ open(Port) ->
-spec open(Port, Opts) -> {ok, Socket} | {error, Reason} when
Port :: inet:port_number(),
Opts :: [Option],
- Option :: {ip, inet:ip_address()}
+ Option :: {ip, inet:socket_address()}
| {fd, non_neg_integer()}
- | {ifaddr, inet:ip_address()}
+ | {ifaddr, inet:socket_address()}
| inet:address_family()
| {port, inet:port_number()}
| option(),
Socket :: socket(),
Reason :: inet:posix().
-open(Port, Opts) ->
- Mod = mod(Opts, undefined),
- {ok,UP} = Mod:getserv(Port),
+open(Port, Opts0) ->
+ {Mod, Opts} = inet:udp_module(Opts0),
+ {ok, UP} = Mod:getserv(Port),
Mod:open(UP, Opts).
-spec close(Socket) -> ok when
@@ -114,7 +114,7 @@ close(S) ->
-spec send(Socket, Address, Port, Packet) -> ok | {error, Reason} when
Socket :: socket(),
- Address :: inet:ip_address() | inet:hostname(),
+ Address :: inet:socket_address() | inet:hostname(),
Port :: inet:port_number(),
Packet :: iodata(),
Reason :: not_owner | inet:posix().
@@ -148,7 +148,7 @@ send(S, Packet) when is_port(S) ->
{ok, {Address, Port, Packet}} | {error, Reason} when
Socket :: socket(),
Length :: non_neg_integer(),
- Address :: inet:ip_address(),
+ Address :: inet:ip_address() | inet:returned_non_ip_address(),
Port :: inet:port_number(),
Packet :: string() | binary(),
Reason :: not_owner | inet:posix().
@@ -166,7 +166,7 @@ recv(S,Len) when is_port(S), is_integer(Len) ->
Socket :: socket(),
Length :: non_neg_integer(),
Timeout :: timeout(),
- Address :: inet:ip_address(),
+ Address :: inet:ip_address() | inet:returned_non_ip_address(),
Port :: inet:port_number(),
Packet :: string() | binary(),
Reason :: not_owner | inet:posix().
@@ -203,32 +203,6 @@ controlling_process(S, NewOwner) ->
%%
%% Create a port/socket from a file descriptor
%%
-fdopen(Fd, Opts) ->
- Mod = mod(Opts, undefined),
+fdopen(Fd, Opts0) ->
+ {Mod,Opts} = inet:udp_module(Opts0),
Mod:fdopen(Fd, Opts).
-
-
-%% Get the udp_module, but IPv6 address overrides default IPv4
-mod(Address) ->
- case inet_db:udp_module() of
- inet_udp when tuple_size(Address) =:= 8 ->
- inet6_udp;
- Mod ->
- Mod
- end.
-
-%% Get the udp_module, but option udp_module|inet|inet6 overrides
-mod([{udp_module,Mod}|_], _Address) ->
- Mod;
-mod([inet|_], _Address) ->
- inet_udp;
-mod([inet6|_], _Address) ->
- inet6_udp;
-mod([{ip, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([{ifaddr, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([_|Opts], Address) ->
- mod(Opts, Address);
-mod([], Address) ->
- mod(Address).
diff --git a/lib/kernel/src/global.erl b/lib/kernel/src/global.erl
index 2be1efaf24..0c73ead7c5 100644
--- a/lib/kernel/src/global.erl
+++ b/lib/kernel/src/global.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -459,17 +459,17 @@ init([]) ->
no_trace
end,
+ Ca = case init:get_argument(connect_all) of
+ {ok, [["false"]]} ->
+ false;
+ _ ->
+ true
+ end,
S = #state{the_locker = start_the_locker(DoTrace),
trace = T0,
- the_registrar = start_the_registrar()},
- S1 = trace_message(S, {init, node()}, []),
-
- case init:get_argument(connect_all) of
- {ok, [["false"]]} ->
- {ok, S1#state{connect_all = false}};
- _ ->
- {ok, S1#state{connect_all = true}}
- end.
+ the_registrar = start_the_registrar(),
+ connect_all = Ca},
+ {ok, trace_message(S, {init, node()}, [])}.
%%-----------------------------------------------------------------
%% Connection algorithm
@@ -2068,23 +2068,17 @@ get_known() ->
gen_server:call(global_name_server, get_known, infinity).
random_sleep(Times) ->
- case (Times rem 10) of
- 0 -> erase(random_seed);
- _ -> ok
- end,
- case get(random_seed) of
- undefined ->
- _ = random:seed(erlang:phash2([erlang:node()]),
- erlang:monotonic_time(),
- erlang:unique_integer()),
- ok;
- _ -> ok
- end,
+ _ = case Times rem 10 of
+ 0 ->
+ _ = rand:seed(exsplus);
+ _ ->
+ ok
+ end,
%% First time 1/4 seconds, then doubling each time up to 8 seconds max.
Tmax = if Times > 5 -> 8000;
true -> ((1 bsl Times) * 1000) div 8
end,
- T = random:uniform(Tmax),
+ T = rand:uniform(Tmax),
?trace({random_sleep, {me,self()}, {times,Times}, {t,T}, {tmax,Tmax}}),
receive after T -> ok end.
diff --git a/lib/kernel/src/global_group.erl b/lib/kernel/src/global_group.erl
index 848df13c39..8ac0bd9551 100644
--- a/lib/kernel/src/global_group.erl
+++ b/lib/kernel/src/global_group.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -273,7 +273,7 @@ init([]) ->
{ok, #state{publish_type = PT, group_publish_type = PubTpGrp,
sync_state = synced, group_name = DefGroupName,
no_contact = lists:sort(DefNodes),
- other_grps = DefOther}}
+ other_grps = DefOther, connect_all = Ca}}
end.
@@ -692,7 +692,7 @@ handle_cast({registered_names, User}, S) ->
handle_cast({registered_names_res, Result, Pid, From}, S) ->
% io:format(">>>>> registered_names_res Result ~p~n",[Result]),
unlink(Pid),
- exit(Pid, normal),
+ Pid ! kill,
Wait = get(registered_names),
NewWait = lists:delete({Pid, From},Wait),
put(registered_names, NewWait),
@@ -718,7 +718,7 @@ handle_cast({send_res, Result, Name, Msg, Pid, From}, S) ->
ToPid ! Msg
end,
unlink(Pid),
- exit(Pid, normal),
+ Pid ! kill,
Wait = get(send),
NewWait = lists:delete({Pid, From, Name, Msg},Wait),
put(send, NewWait),
@@ -748,7 +748,7 @@ handle_cast({find_name_res, Result, Pid, From}, S) ->
% io:format(">>>>> find_name_res Result ~p~n",[Result]),
% io:format(">>>>> find_name_res get() ~p~n",[get()]),
unlink(Pid),
- exit(Pid, normal),
+ Pid ! kill,
Wait = get(whereis_name),
NewWait = lists:delete({Pid, From},Wait),
put(whereis_name, NewWait),
diff --git a/lib/kernel/src/global_search.erl b/lib/kernel/src/global_search.erl
index 9429295bdb..11b70113e2 100644
--- a/lib/kernel/src/global_search.erl
+++ b/lib/kernel/src/global_search.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/group.erl b/lib/kernel/src/group.erl
index ea0734e0c9..b5e73117dd 100644
--- a/lib/kernel/src/group.erl
+++ b/lib/kernel/src/group.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/hipe_unified_loader.erl b/lib/kernel/src/hipe_unified_loader.erl
index ddbbc548dd..087cceb5d8 100644
--- a/lib/kernel/src/hipe_unified_loader.erl
+++ b/lib/kernel/src/hipe_unified_loader.erl
@@ -44,7 +44,7 @@
-export([chunk_name/1,
%% Only the code and code_server modules may call the entries below!
load_native_code/3,
- post_beam_load/2,
+ post_beam_load/1,
load_module/4,
load/3]).
@@ -105,7 +105,7 @@ load_native_code(Mod, Bin, Architecture) when is_atom(Mod), is_binary(Bin) ->
case code:get_chunk(Bin, chunk_name(Architecture)) of
undefined -> no_native;
NativeCode when is_binary(NativeCode) ->
- erlang:system_flag(multi_scheduling, block),
+ erlang:system_flag(multi_scheduling, block_normal),
try
OldReferencesToPatch = patch_to_emu_step1(Mod),
case load_module(Mod, NativeCode, Bin, OldReferencesToPatch,
@@ -114,23 +114,23 @@ load_native_code(Mod, Bin, Architecture) when is_atom(Mod), is_binary(Bin) ->
Result -> Result
end
after
- erlang:system_flag(multi_scheduling, unblock)
+ erlang:system_flag(multi_scheduling, unblock_normal)
end
end.
%%========================================================================
--spec post_beam_load(atom(), hipe_architecture()) -> 'ok'.
+-spec post_beam_load([module()]) -> 'ok'.
-%% does nothing on a hipe-disabled system
-post_beam_load(_Mod, undefined) ->
+post_beam_load([])->
ok;
-post_beam_load(Mod, _) when is_atom(Mod) ->
- erlang:system_flag(multi_scheduling, block),
+post_beam_load([_|_]=Mods) ->
+ erlang:system_flag(multi_scheduling, block_normal),
try
- patch_to_emu(Mod)
+ _ = [patch_to_emu(Mod) || Mod <- Mods],
+ ok
after
- erlang:system_flag(multi_scheduling, unblock)
+ erlang:system_flag(multi_scheduling, unblock_normal)
end,
ok.
@@ -151,11 +151,11 @@ version_check(Version, Mod) when is_atom(Mod) ->
'bad_crc' | {'module', Mod} when Mod :: atom().
load_module(Mod, Bin, Beam, Architecture) ->
- erlang:system_flag(multi_scheduling, block),
+ erlang:system_flag(multi_scheduling, block_normal),
try
load_module_nosmp(Mod, Bin, Beam, Architecture)
after
- erlang:system_flag(multi_scheduling, unblock)
+ erlang:system_flag(multi_scheduling, unblock_normal)
end.
load_module_nosmp(Mod, Bin, Beam, Architecture) ->
@@ -173,11 +173,11 @@ load_module(Mod, Bin, Beam, OldReferencesToPatch, Architecture) ->
'bad_crc' | {'module', Mod} when Mod :: atom().
load(Mod, Bin, Architecture) ->
- erlang:system_flag(multi_scheduling, block),
+ erlang:system_flag(multi_scheduling, block_normal),
try
load_nosmp(Mod, Bin, Architecture)
after
- erlang:system_flag(multi_scheduling, unblock)
+ erlang:system_flag(multi_scheduling, unblock_normal)
end.
load_nosmp(Mod, Bin, Architecture) ->
diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl
index c1ae99ea24..a91a6ed517 100644
--- a/lib/kernel/src/inet.erl
+++ b/lib/kernel/src/inet.erl
@@ -37,6 +37,7 @@
parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1, ntoa/1]).
-export([connect_options/2, listen_options/2, udp_options/2, sctp_options/2]).
+-export([udp_module/1, tcp_module/1, tcp_module/2, sctp_module/1]).
-export([i/0, i/1, i/2]).
@@ -72,9 +73,9 @@
-export([start_timer/1, timeout/1, timeout/2, stop_timer/1]).
-export_type([address_family/0, hostent/0, hostname/0, ip4_address/0,
- ip6_address/0, ip_address/0, posix/0, socket/0,
- port_number/0]).
-
+ ip6_address/0, ip_address/0, port_number/0,
+ local_address/0, socket_address/0, returned_non_ip_address/0,
+ posix/0, socket/0, stat_option/0]).
%% imports
-import(lists, [append/1, duplicate/2, filter/2, foldl/3]).
@@ -97,6 +98,11 @@
0..65535,0..65535,0..65535,0..65535}.
-type ip_address() :: ip4_address() | ip6_address().
-type port_number() :: 0..65535.
+-type local_address() :: {local, File :: binary() | string()}.
+-type returned_non_ip_address() ::
+ {local, binary()} |
+ {unspec, <<>>} |
+ {undefined, any()}.
-type posix() :: exbadport | exbadseq | file:posix().
-type socket() :: port().
@@ -133,9 +139,11 @@
'running' | 'multicast' | 'loopback']} |
{'hwaddr', ether_address()}.
--type address_family() :: 'inet' | 'inet6'.
+-type address_family() :: 'inet' | 'inet6' | 'local'.
-type socket_protocol() :: 'tcp' | 'udp' | 'sctp'.
-type socket_type() :: 'stream' | 'dgram' | 'seqpacket'.
+-type socket_address() ::
+ ip_address() | 'any' | 'loopback' | local_address().
-type stat_option() ::
'recv_cnt' | 'recv_max' | 'recv_avg' | 'recv_oct' | 'recv_dvi' |
'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'.
@@ -160,26 +168,33 @@ close(Socket) ->
end.
--spec peername(Socket) -> {ok, {Address, Port}} | {error, posix()} when
- Socket :: socket(),
- Address :: ip_address(),
- Port :: non_neg_integer().
+-spec peername(Socket :: socket()) ->
+ {ok,
+ {ip_address(), port_number()} |
+ returned_non_ip_address()} |
+ {error, posix()}.
peername(Socket) ->
prim_inet:peername(Socket).
--spec setpeername(Socket :: socket(), Address :: {ip_address(), port_number()}) ->
- 'ok' | {'error', any()}.
+-spec setpeername(
+ Socket :: socket(),
+ Address ::
+ {ip_address() | 'any' | 'loopback',
+ port_number()} |
+ socket_address()) ->
+ 'ok' | {'error', any()}.
setpeername(Socket, {IP,Port}) ->
prim_inet:setpeername(Socket, {IP,Port});
setpeername(Socket, undefined) ->
prim_inet:setpeername(Socket, undefined).
--spec peernames(Socket) -> {ok, [{Address, Port}]} | {error, posix()} when
- Socket :: socket(),
- Address :: ip_address(),
- Port :: non_neg_integer().
+-spec peernames(Socket :: socket()) ->
+ {ok,
+ [{ip_address(), port_number()} |
+ returned_non_ip_address()]} |
+ {error, posix()}.
peernames(Socket) ->
prim_inet:peernames(Socket).
@@ -195,15 +210,21 @@ peernames(Socket, Assoc) ->
prim_inet:peernames(Socket, Assoc).
--spec sockname(Socket) -> {ok, {Address, Port}} | {error, posix()} when
- Socket :: socket(),
- Address :: ip_address(),
- Port :: non_neg_integer().
+-spec sockname(Socket :: socket()) ->
+ {ok,
+ {ip_address(), port_number()} |
+ returned_non_ip_address()} |
+ {error, posix()}.
sockname(Socket) ->
prim_inet:sockname(Socket).
--spec setsockname(Socket :: socket(), Address :: {ip_address(), port_number()}) ->
+-spec setsockname(
+ Socket :: socket(),
+ Address ::
+ {ip_address() | 'any' | 'loopback',
+ port_number()} |
+ socket_address()) ->
'ok' | {'error', any()}.
setsockname(Socket, {IP,Port}) ->
@@ -211,10 +232,11 @@ setsockname(Socket, {IP,Port}) ->
setsockname(Socket, undefined) ->
prim_inet:setsockname(Socket, undefined).
--spec socknames(Socket) -> {ok, [{Address, Port}]} | {error, posix()} when
- Socket :: socket(),
- Address :: ip_address(),
- Port :: non_neg_integer().
+-spec socknames(Socket :: socket()) ->
+ {ok,
+ [{ip_address(), port_number()} |
+ returned_non_ip_address()]} |
+ {error, posix()}.
socknames(Socket) ->
prim_inet:socknames(Socket).
@@ -439,7 +461,12 @@ getstat(Socket,What) ->
Hostent :: hostent().
gethostbyname(Name) ->
- gethostbyname_tm(Name, inet, false).
+ case inet_db:res_option(inet6) of
+ true ->
+ gethostbyname_tm(Name, inet6, false);
+ false ->
+ gethostbyname_tm(Name, inet, false)
+ end.
-spec gethostbyname(Hostname, Family) ->
{ok, Hostent} | {error, posix()} when
@@ -676,7 +703,7 @@ connect_options() ->
low_msgq_watermark, send_timeout, send_timeout_close, delay_send, raw,
show_econnreset].
-connect_options(Opts, Family) ->
+connect_options(Opts, Mod) ->
BaseOpts =
case application:get_env(kernel, inet_default_connect_options) of
{ok,List} when is_list(List) ->
@@ -693,7 +720,7 @@ connect_options(Opts, Family) ->
{ok, R} ->
{ok, R#connect_opts {
opts = lists:reverse(R#connect_opts.opts),
- ifaddr = translate_ip(R#connect_opts.ifaddr, Family)
+ ifaddr = Mod:translate_ip(R#connect_opts.ifaddr)
}};
Error -> Error
end.
@@ -708,9 +735,6 @@ con_opt([Opt | Opts], #connect_opts{} = R, As) ->
{fd,Fd} -> con_opt(Opts, R#connect_opts { fd = Fd }, As);
binary -> con_add(mode, binary, R, Opts, As);
list -> con_add(mode, list, R, Opts, As);
- {tcp_module,_} -> con_opt(Opts, R, As);
- inet -> con_opt(Opts, R, As);
- inet6 -> con_opt(Opts, R, As);
{netns,NS} ->
BinNS = filename2binary(NS),
case prim_inet:is_sockopt_val(netns, BinNS) of
@@ -747,7 +771,7 @@ listen_options() ->
low_msgq_watermark, send_timeout, send_timeout_close, delay_send,
packet_size, raw, show_econnreset].
-listen_options(Opts, Family) ->
+listen_options(Opts, Mod) ->
BaseOpts =
case application:get_env(kernel, inet_default_listen_options) of
{ok,List} when is_list(List) ->
@@ -764,7 +788,7 @@ listen_options(Opts, Family) ->
{ok, R} ->
{ok, R#listen_opts {
opts = lists:reverse(R#listen_opts.opts),
- ifaddr = translate_ip(R#listen_opts.ifaddr, Family)
+ ifaddr = Mod:translate_ip(R#listen_opts.ifaddr)
}};
Error -> Error
end.
@@ -780,9 +804,6 @@ list_opt([Opt | Opts], #listen_opts{} = R, As) ->
{backlog,BL} -> list_opt(Opts, R#listen_opts { backlog = BL }, As);
binary -> list_add(mode, binary, R, Opts, As);
list -> list_add(mode, list, R, Opts, As);
- {tcp_module,_} -> list_opt(Opts, R, As);
- inet -> list_opt(Opts, R, As);
- inet6 -> list_opt(Opts, R, As);
{netns,NS} ->
BinNS = filename2binary(NS),
case prim_inet:is_sockopt_val(netns, BinNS) of
@@ -807,6 +828,19 @@ list_add(Name, Val, #listen_opts{} = R, Opts, As) ->
Error -> Error
end.
+tcp_module(Opts) ->
+ tcp_module_1(Opts, undefined).
+
+tcp_module(Opts, Addr) ->
+ Address = {undefined,Addr},
+ %% Address has to be a 2-tuple but the first element is ignored
+ tcp_module_1(Opts, Address).
+
+tcp_module_1(Opts, Address) ->
+ mod(
+ Opts, tcp_module, Address,
+ #{inet => inet_tcp, inet6 => inet6_tcp, local => local_tcp}).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Available options for udp:open
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -818,12 +852,12 @@ udp_options() ->
high_msgq_watermark, low_msgq_watermark].
-udp_options(Opts, Family) ->
+udp_options(Opts, Mod) ->
case udp_opt(Opts, #udp_opts { }, udp_options()) of
{ok, R} ->
{ok, R#udp_opts {
opts = lists:reverse(R#udp_opts.opts),
- ifaddr = translate_ip(R#udp_opts.ifaddr, Family)
+ ifaddr = Mod:translate_ip(R#udp_opts.ifaddr)
}};
Error -> Error
end.
@@ -838,9 +872,6 @@ udp_opt([Opt | Opts], #udp_opts{} = R, As) ->
{fd,Fd} -> udp_opt(Opts, R#udp_opts { fd = Fd }, As);
binary -> udp_add(mode, binary, R, Opts, As);
list -> udp_add(mode, list, R, Opts, As);
- {udp_module,_} -> udp_opt(Opts, R, As);
- inet -> udp_opt(Opts, R, As);
- inet6 -> udp_opt(Opts, R, As);
{netns,NS} ->
BinNS = filename2binary(NS),
case prim_inet:is_sockopt_val(netns, BinNS) of
@@ -865,6 +896,11 @@ udp_add(Name, Val, #udp_opts{} = R, Opts, As) ->
Error -> Error
end.
+udp_module(Opts) ->
+ mod(
+ Opts, udp_module, undefined,
+ #{inet => inet_udp, inet6 => inet6_udp, local => local_udp}).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Available options for sctp:open
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -921,9 +957,6 @@ sctp_opt([Opt|Opts], Mod, #sctp_opts{} = R, As) ->
sctp_opt(Opts, Mod, R#sctp_opts{type=Type}, As);
binary -> sctp_opt (Opts, Mod, R, As, mode, binary);
list -> sctp_opt (Opts, Mod, R, As, mode, list);
- {sctp_module,_} -> sctp_opt (Opts, Mod, R, As); % Done with
- inet -> sctp_opt (Opts, Mod, R, As); % Done with
- inet6 -> sctp_opt (Opts, Mod, R, As); % Done with
{netns,NS} ->
BinNS = filename2binary(NS),
case prim_inet:is_sockopt_val(netns, BinNS) of
@@ -965,6 +998,11 @@ sctp_opt_ifaddr(Opts, Mod, #sctp_opts{ifaddr=IfAddr}=R, As, Addr) ->
_ -> [IP,IfAddr]
end}, As).
+sctp_module(Opts) ->
+ mod(
+ Opts, sctp_module, undefined,
+ #{inet => inet_sctp, inet6 => inet6_sctp}).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Util to check and insert option in option list
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1023,6 +1061,53 @@ translate_ip(any, inet6) -> {0,0,0,0,0,0,0,0};
translate_ip(loopback, inet6) -> {0,0,0,0,0,0,0,1};
translate_ip(IP, _) -> IP.
+mod(Opts, Tag, Address, Map) ->
+ mod(Opts, Tag, Address, Map, undefined, []).
+%%
+mod([{Tag, M}|Opts], Tag, Address, Map, Mod, Acc) ->
+ mod(Opts, Tag, Address, Map, Mod, Acc, M);
+mod([{T, _} = Opt|Opts], Tag, _Address, Map, Mod, Acc)
+ when T =:= ip; T =:= ifaddr->
+ mod(Opts, Tag, Opt, Map, Mod, [Opt|Acc]);
+mod([Family|Opts], Tag, Address, Map, Mod, Acc) when is_atom(Family) ->
+ case Map of
+ #{Family := M} ->
+ mod(Opts, Tag, Address, Map, Mod, Acc, M);
+ #{} ->
+ mod(Opts, Tag, Address, Map, Mod, [Family|Acc])
+ end;
+mod([Opt|Opts], Tag, Address, Map, Mod, Acc) ->
+ mod(Opts, Tag, Address, Map, Mod, [Opt|Acc]);
+mod([], Tag, Address, Map, undefined, Acc) ->
+ {case Address of
+ {_, {local, _}} ->
+ case Map of
+ #{local := Mod} ->
+ Mod;
+ #{} ->
+ inet_db:Tag()
+ end;
+ {_, IP} when tuple_size(IP) =:= 8 ->
+ #{inet := IPv4Mod} = Map,
+ %% Get the mod, but IPv6 address overrides default IPv4
+ case inet_db:Tag() of
+ IPv4Mod ->
+ #{inet6 := IPv6Mod} = Map,
+ IPv6Mod;
+ Mod ->
+ Mod
+ end;
+ _ ->
+ inet_db:Tag()
+ end, lists:reverse(Acc)};
+mod([], _Tag, _Address, _Map, Mod, Acc) ->
+ {Mod, lists:reverse(Acc)}.
+%%
+mod(Opts, Tag, Address, Map, undefined, Acc, M) ->
+ mod(Opts, Tag, Address, Map, M, Acc);
+mod(Opts, Tag, Address, Map, Mod, Acc, _M) ->
+ mod(Opts, Tag, Address, Map, Mod, Acc).
+
getaddrs_tm({A,B,C,D} = IP, Fam, _) ->
%% Only "syntactic" validation and check of family.
@@ -1230,7 +1315,17 @@ gethostbyaddr_tm_native(Addr, Timer, Opts) ->
end.
-spec open(Fd_or_OpenOpts :: integer() | list(),
- Addr :: ip_address(),
+ Addr ::
+ socket_address() |
+ {ip_address() | 'any' | 'loopback', % Unofficial
+ port_number()} |
+ {inet, % Unofficial
+ {ip4_address() | 'any' | 'loopback',
+ port_number()}} |
+ {inet6, % Unofficial
+ {ip6_address() | 'any' | 'loopback',
+ port_number()}} |
+ undefined, % Internal - no bind()
Port :: port_number(),
Opts :: [socket_setopt()],
Protocol :: socket_protocol(),
@@ -1249,13 +1344,12 @@ open(FdO, Addr, Port, Opts, Protocol, Family, Type, Module)
case prim_inet:open(Protocol, Family, Type, OpenOpts) of
{ok,S} ->
case prim_inet:setopts(S, Opts) of
+ ok when Addr =:= undefined ->
+ inet_db:register_socket(S, Module),
+ {ok,S};
ok ->
- case if is_list(Addr) ->
- bindx(S, Addr, Port);
- true ->
- prim_inet:bind(S, Addr, Port)
- end of
- {ok, _} ->
+ case bind(S, Addr, Port) of
+ {ok, _} ->
inet_db:register_socket(S, Module),
{ok,S};
Error ->
@@ -1273,6 +1367,11 @@ open(Fd, Addr, Port, Opts, Protocol, Family, Type, Module)
when is_integer(Fd) ->
fdopen(Fd, Addr, Port, Opts, Protocol, Family, Type, Module).
+bind(S, Addr, Port) when is_list(Addr) ->
+ bindx(S, Addr, Port);
+bind(S, Addr, Port) ->
+ prim_inet:bind(S, Addr, Port).
+
bindx(S, [Addr], Port0) ->
{IP, Port} = set_bindx_port(Addr, Port0),
prim_inet:bind(S, IP, Port);
@@ -1313,34 +1412,36 @@ fdopen(Fd, Opts, Protocol, Family, Type, Module) ->
fdopen(Fd, any, 0, Opts, Protocol, Family, Type, Module).
fdopen(Fd, Addr, Port, Opts, Protocol, Family, Type, Module) ->
- IsAnyAddr = (Addr == {0,0,0,0} orelse Addr == {0,0,0,0,0,0,0,0}
- orelse Addr == any),
- Bound = Port == 0 andalso IsAnyAddr,
+ Bound =
+ %% We do not do any binding if default port+addr options
+ %% were given, in order to keep backwards compatability
+ %% with pre Erlang/OTP 17
+ case Addr of
+ {0,0,0,0} when Port =:= 0 -> true;
+ {0,0,0,0,0,0,0,0} when Port =:= 0 -> true;
+ any when Port =:= 0 -> true;
+ _ -> false
+ end,
case prim_inet:fdopen(Protocol, Family, Type, Fd, Bound) of
{ok, S} ->
case prim_inet:setopts(S, Opts) of
+ ok
+ when Addr =:= undefined;
+ Bound ->
+ inet_db:register_socket(S, Module),
+ {ok, S};
ok ->
- case if
- Bound ->
- %% We do not do any binding if default
- %% port+addr options where given in order
- %% to keep backwards compatability with
- %% pre Erlang/TOP 17
- {ok, ok};
- is_list(Addr) ->
- bindx(S, Addr, Port);
- true ->
- prim_inet:bind(S, Addr, Port)
- end of
- {ok, _} ->
- inet_db:register_socket(S, Module),
- {ok, S};
- Error ->
- prim_inet:close(S),
- Error
+ case bind(S, Addr, Port) of
+ {ok, _} ->
+ inet_db:register_socket(S, Module),
+ {ok, S};
+ Error ->
+ prim_inet:close(S),
+ Error
end;
Error ->
- prim_inet:close(S), Error
+ prim_inet:close(S),
+ Error
end;
Error -> Error
end.
diff --git a/lib/kernel/src/inet6_sctp.erl b/lib/kernel/src/inet6_sctp.erl
index 5934c269fa..a5503f6f54 100644
--- a/lib/kernel/src/inet6_sctp.erl
+++ b/lib/kernel/src/inet6_sctp.erl
@@ -1,8 +1,8 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
+%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
@@ -14,13 +14,12 @@
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
-%%
+%%
%% %CopyrightEnd%
%%
%% SCTP protocol contribution by Leonid Timochouk and Serge Aleynikov.
%% See also: $ERL_TOP/lib/kernel/AUTHORS
%%
-%%
-module(inet6_sctp).
%% This module provides functions for communicating with
@@ -31,6 +30,7 @@
-include("inet_sctp.hrl").
-include("inet_int.hrl").
+-define(PROTO, sctp).
-define(FAMILY, inet6).
-export([getserv/1,getaddr/1,getaddr/2,translate_ip/1]).
-export([open/1,close/1,listen/2,peeloff/2,connect/5]).
@@ -39,25 +39,19 @@
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) ->
- inet:getservbyname(Name, sctp);
-getserv(_) ->
- {error,einval}.
-
-getaddr(Address) ->
- inet:getaddr(Address, ?FAMILY).
-getaddr(Address, Timer) ->
- inet:getaddr_tm(Address, ?FAMILY, Timer).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO);
+getserv(_) -> {error,einval}.
-translate_ip(IP) ->
- inet:translate_ip(IP, ?FAMILY).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr_tm(Address, ?FAMILY, Timer).
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
open(Opts) ->
case inet:sctp_options(Opts, ?MODULE) of
{ok,#sctp_opts{fd=Fd,ifaddr=Addr,port=Port,type=Type,opts=SOs}} ->
- inet:open(Fd, Addr, Port, SOs, sctp, ?FAMILY, Type, ?MODULE);
+ inet:open(Fd, Addr, Port, SOs, ?PROTO, ?FAMILY, Type, ?MODULE);
Error -> Error
end.
diff --git a/lib/kernel/src/inet6_tcp.erl b/lib/kernel/src/inet6_tcp.erl
index 1978307b3c..a0d5d3df70 100644
--- a/lib/kernel/src/inet6_tcp.erl
+++ b/lib/kernel/src/inet6_tcp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,13 +25,18 @@
-export([controlling_process/2]).
-export([fdopen/2]).
--export([family/0, mask/2, parse_address/1]).
+-export([family/0, mask/2, parse_address/1]). % inet_tcp_dist
-export([getserv/1, getaddr/1, getaddr/2, getaddrs/1, getaddrs/2]).
+-export([translate_ip/1]).
-include("inet_int.hrl").
+-define(FAMILY, inet6).
+-define(PROTO, tcp).
+-define(TYPE, stream).
+
%% my address family
-family() -> inet6.
+family() -> ?FAMILY.
%% Apply netmask on address
mask({M1,M2,M3,M4,M5,M6,M7,M8}, {IP1,IP2,IP3,IP4,IP5,IP6,IP7,IP8}) ->
@@ -50,15 +55,18 @@ parse_address(Host) ->
%% inet_tcp port lookup
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) -> inet:getservbyname(Name,tcp).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO).
%% inet_tcp address lookup
-getaddr(Address) -> inet:getaddr(Address, inet6).
-getaddr(Address,Timer) -> inet:getaddr_tm(Address, inet6, Timer).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr_tm(Address, ?FAMILY, Timer).
%% inet_tcp address lookup
-getaddrs(Address) -> inet:getaddrs(Address, inet6).
-getaddrs(Address,Timer) -> inet:getaddrs_tm(Address,inet6,Timer).
+getaddrs(Address) -> inet:getaddrs(Address, ?FAMILY).
+getaddrs(Address, Timer) -> inet:getaddrs_tm(Address, ?FAMILY, Timer).
+
+%% inet_udp special this side addresses
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
%%
%% Send data on a socket
@@ -73,11 +81,6 @@ recv(Socket, Length) -> prim_inet:recv(Socket, Length).
recv(Socket, Length, Timeout) -> prim_inet:recv(Socket, Length, Timeout).
unrecv(Socket, Data) -> prim_inet:unrecv(Socket, Data).
-%%
-%% Close a socket (async)
-%%
-close(Socket) ->
- inet:tcp_close(Socket).
%%
%% Shutdown one end of a socket
@@ -86,6 +89,12 @@ shutdown(Socket, How) ->
prim_inet:shutdown(Socket, How).
%%
+%% Close a socket (async)
+%%
+close(Socket) ->
+ inet:tcp_close(Socket).
+
+%%
%% Set controlling process
%% FIXME: move messages to new owner!!!
%%
@@ -100,24 +109,28 @@ connect(Address, Port, Opts) ->
connect(Address, Port, Opts, infinity) ->
do_connect(Address, Port, Opts, infinity);
-connect(Address, Port, Opts, Timeout) when is_integer(Timeout),
- Timeout >= 0 ->
+connect(Address, Port, Opts, Timeout)
+ when is_integer(Timeout), Timeout >= 0 ->
do_connect(Address, Port, Opts, Timeout).
-do_connect(Addr = {A,B,C,D,E,F,G,H}, Port, Opts, Time) when
- ?ip6(A,B,C,D,E,F,G,H), ?port(Port) ->
- case inet:connect_options(Opts, inet6) of
+do_connect(Addr = {A,B,C,D,E,F,G,H}, Port, Opts, Time)
+ when ?ip6(A,B,C,D,E,F,G,H), ?port(Port) ->
+ case inet:connect_options(Opts, ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #connect_opts{fd=Fd,
- ifaddr=BAddr={Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb},
- port=BPort,
- opts=SockOpts}}
+ {ok,
+ #connect_opts{
+ fd = Fd,
+ ifaddr = BAddr = {Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb},
+ port = BPort,
+ opts = SockOpts}}
when ?ip6(Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb), ?port(BPort) ->
- case inet:open(Fd,BAddr,BPort,SockOpts,tcp,inet6,stream,?MODULE) of
+ case inet:open(
+ Fd, BAddr, BPort, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
{ok, S} ->
case prim_inet:connect(S, Addr, Port, Time) of
- ok -> {ok,S};
- Error -> prim_inet:close(S), Error
+ ok -> {ok,S};
+ Error -> prim_inet:close(S), Error
end;
Error -> Error
end;
@@ -128,14 +141,18 @@ do_connect(Addr = {A,B,C,D,E,F,G,H}, Port, Opts, Time) when
%% Listen
%%
listen(Port, Opts) ->
- case inet:listen_options([{port,Port} | Opts], inet6) of
+ case inet:listen_options([{port,Port} | Opts], ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #listen_opts{fd=Fd,
- ifaddr=BAddr={A,B,C,D,E,F,G,H},
- port=BPort,
- opts=SockOpts}=R}
+ {ok,
+ #listen_opts{
+ fd = Fd,
+ ifaddr = BAddr = {A,B,C,D,E,F,G,H},
+ port = BPort,
+ opts = SockOpts} = R}
when ?ip6(A,B,C,D,E,F,G,H), ?port(BPort) ->
- case inet:open(Fd,BAddr,BPort,SockOpts,tcp,inet6,stream,?MODULE) of
+ case inet:open(
+ Fd, BAddr, BPort, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
{ok, S} ->
case prim_inet:listen(S, R#listen_opts.backlog) of
ok -> {ok, S};
@@ -156,18 +173,17 @@ accept(L) ->
{ok,S};
Error -> Error
end.
-
-accept(L,Timeout) ->
- case prim_inet:accept(L,Timeout) of
+
+accept(L, Timeout) ->
+ case prim_inet:accept(L, Timeout) of
{ok, S} ->
inet_db:register_socket(S, ?MODULE),
{ok,S};
Error -> Error
end.
-
+
%%
%% Create a port/socket from a file descriptor
%%
fdopen(Fd, Opts) ->
- inet:fdopen(Fd, Opts, tcp, inet6, stream, ?MODULE).
-
+ inet:fdopen(Fd, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/inet6_tcp_dist.erl b/lib/kernel/src/inet6_tcp_dist.erl
index 3ab7f269bb..3aa61973af 100644
--- a/lib/kernel/src/inet6_tcp_dist.erl
+++ b/lib/kernel/src/inet6_tcp_dist.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet6_udp.erl b/lib/kernel/src/inet6_udp.erl
index 61c74bf14f..71db0357cd 100644
--- a/lib/kernel/src/inet6_udp.erl
+++ b/lib/kernel/src/inet6_udp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,29 +24,44 @@
-export([controlling_process/2]).
-export([fdopen/2]).
--export([getserv/1, getaddr/1, getaddr/2]).
+-export([getserv/1, getaddr/1, getaddr/2, translate_ip/1]).
-include("inet_int.hrl").
+-define(FAMILY, inet6).
+-define(PROTO, udp).
+-define(TYPE, dgram).
+
+
%% inet_udp port lookup
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) -> inet:getservbyname(Name,udp).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO).
%% inet_udp address lookup
-getaddr(Address) -> inet:getaddr(Address, inet6).
-getaddr(Address,Timer) -> inet:getaddr(Address, inet6, Timer).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr(Address, ?FAMILY, Timer).
+
+%% inet_udp special this side addresses
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
+-spec open(_) -> {ok, inet:socket()} | {error, atom()}.
open(Port) -> open(Port, []).
+-spec open(_, _) -> {ok, inet:socket()} | {error, atom()}.
open(Port, Opts) ->
- case inet:udp_options([{port,Port} | Opts], inet6) of
+ case inet:udp_options(
+ [{port,Port} | Opts],
+ ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #udp_opts{fd=Fd,
- ifaddr=BAddr={A,B,C,D,E,F,G,H},
- port=BPort,
- opts=SockOpts}}
+ {ok,
+ #udp_opts{
+ fd = Fd,
+ ifaddr = BAddr = {A,B,C,D,E,F,G,H},
+ port = BPort,
+ opts = SockOpts}}
when ?ip6(A,B,C,D,E,F,G,H), ?port(BPort) ->
- inet:open(Fd,BAddr,BPort,SockOpts,udp,inet6,dgram,?MODULE);
+ inet:open(
+ Fd, BAddr, BPort, SockOpts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE);
{ok, _} -> exit(badarg)
end.
@@ -61,12 +76,13 @@ connect(S, Addr = {A,B,C,D,E,F,G,H}, P)
when ?ip6(A,B,C,D,E,F,G,H), ?port(P) ->
prim_inet:connect(S, Addr, P).
-recv(S,Len) ->
+recv(S, Len) ->
prim_inet:recvfrom(S, Len).
-recv(S,Len,Time) ->
+recv(S, Len, Time) ->
prim_inet:recvfrom(S, Len, Time).
+-spec close(inet:socket()) -> ok.
close(S) ->
inet:udp_close(S).
@@ -85,4 +101,4 @@ controlling_process(Socket, NewOwner) ->
%% Create a port/socket from a file descriptor
%%
fdopen(Fd, Opts) ->
- inet:fdopen(Fd, Opts, udp, inet6, dgram, ?MODULE).
+ inet:fdopen(Fd, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/inet_boot.hrl b/lib/kernel/src/inet_boot.hrl
index ec0d4064e5..adeda604e6 100644
--- a/lib/kernel/src/inet_boot.hrl
+++ b/lib/kernel/src/inet_boot.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_config.erl b/lib/kernel/src/inet_config.erl
index 803fae846e..4bbc520449 100644
--- a/lib/kernel/src/inet_config.erl
+++ b/lib/kernel/src/inet_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -188,9 +188,6 @@ do_load_resolv({win32,Type}, longnames) ->
win32_load_from_registry(Type),
inet_db:set_lookup([native]);
-do_load_resolv({ose,_}, _) ->
- inet_db:set_lookup([file]);
-
do_load_resolv(_, _) ->
inet_db:set_lookup([native]).
diff --git a/lib/kernel/src/inet_config.hrl b/lib/kernel/src/inet_config.hrl
index 7faae8d127..b22ee0f598 100644
--- a/lib/kernel/src/inet_config.hrl
+++ b/lib/kernel/src/inet_config.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_db.erl b/lib/kernel/src/inet_db.erl
index 108a803610..465cec1b45 100644
--- a/lib/kernel/src/inet_db.erl
+++ b/lib/kernel/src/inet_db.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1206,7 +1206,8 @@ handle_set_file(Option, Fname, TagTm, TagInfo, ParseFun, From,
File = filename:flatten(Fname),
ets:insert(Db, {res_optname(Option), File}),
ets:insert(Db, {TagInfo, undefined}),
- ets:insert(Db, {TagTm, 0}),
+ TimeZero = - (?RES_FILE_UPDATE_TM + 1), % Early enough
+ ets:insert(Db, {TagTm, TimeZero}),
{reply,ok,State};
true ->
File = filename:flatten(Fname),
diff --git a/lib/kernel/src/inet_dns.erl b/lib/kernel/src/inet_dns.erl
index f344b26228..d5f982cc51 100644
--- a/lib/kernel/src/inet_dns.erl
+++ b/lib/kernel/src/inet_dns.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_dns.hrl b/lib/kernel/src/inet_dns.hrl
index d1b01bb9c4..07226bbf5c 100644
--- a/lib/kernel/src/inet_dns.hrl
+++ b/lib/kernel/src/inet_dns.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_dns_record_adts.pl b/lib/kernel/src/inet_dns_record_adts.pl
index 6d719d836e..c89d837098 100644
--- a/lib/kernel/src/inet_dns_record_adts.pl
+++ b/lib/kernel/src/inet_dns_record_adts.pl
@@ -2,7 +2,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2011. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_gethost_native.erl b/lib/kernel/src/inet_gethost_native.erl
index 53294810af..9e76c08365 100644
--- a/lib/kernel/src/inet_gethost_native.erl
+++ b/lib/kernel/src/inet_gethost_native.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_hosts.erl b/lib/kernel/src/inet_hosts.erl
index e8457fd9d6..0bdf00ac30 100644
--- a/lib/kernel/src/inet_hosts.erl
+++ b/lib/kernel/src/inet_hosts.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_int.hrl b/lib/kernel/src/inet_int.hrl
index e7c6cf8ae2..c8a8962e78 100644
--- a/lib/kernel/src/inet_int.hrl
+++ b/lib/kernel/src/inet_int.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,10 +25,13 @@
%%
%% family codes to open
+-define(INET_AF_UNSPEC, 0).
-define(INET_AF_INET, 1).
-define(INET_AF_INET6, 2).
-define(INET_AF_ANY, 3). % Fake for ANY in any address family
-define(INET_AF_LOOPBACK, 4). % Fake for LOOPBACK in any address family
+-define(INET_AF_LOCAL, 5). % For Unix Domain address family
+-define(INET_AF_UNDEFINED, 6). % For any unknown address family
%% type codes to open and gettype - INET_REQ_GETTYPE
-define(INET_TYPE_STREAM, 1).
@@ -378,7 +381,7 @@
{
ifaddr = any, %% bind to interface address
port = 0, %% bind to port (default is dynamic port)
- fd = -1, %% fd >= 0 => already bound
+ fd = -1, %% fd >= 0 => already bound
opts = [] %% [{active,true}] added in inet:connect_options
}).
diff --git a/lib/kernel/src/inet_parse.erl b/lib/kernel/src/inet_parse.erl
index 877745ed55..b0a3ee3008 100644
--- a/lib/kernel/src/inet_parse.erl
+++ b/lib/kernel/src/inet_parse.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_res.erl b/lib/kernel/src/inet_res.erl
index e6988ac79b..90e49ddfdf 100644
--- a/lib/kernel/src/inet_res.erl
+++ b/lib/kernel/src/inet_res.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_res.hrl b/lib/kernel/src/inet_res.hrl
index c77fe30e7a..774b4074a5 100644
--- a/lib/kernel/src/inet_res.hrl
+++ b/lib/kernel/src/inet_res.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/inet_sctp.erl b/lib/kernel/src/inet_sctp.erl
index 88c8d24143..8569cacb29 100644
--- a/lib/kernel/src/inet_sctp.erl
+++ b/lib/kernel/src/inet_sctp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@
-include("inet_sctp.hrl").
-include("inet_int.hrl").
+-define(PROTO, sctp).
-define(FAMILY, inet).
-export([getserv/1,getaddr/1,getaddr/2,translate_ip/1]).
-export([open/1,close/1,listen/2,peeloff/2,connect/5]).
@@ -38,25 +39,19 @@
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) ->
- inet:getservbyname(Name, sctp);
-getserv(_) ->
- {error,einval}.
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO);
+getserv(_) -> {error,einval}.
-getaddr(Address) ->
- inet:getaddr(Address, ?FAMILY).
-getaddr(Address, Timer) ->
- inet:getaddr_tm(Address, ?FAMILY, Timer).
-
-translate_ip(IP) ->
- inet:translate_ip(IP, ?FAMILY).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr_tm(Address, ?FAMILY, Timer).
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
open(Opts) ->
case inet:sctp_options(Opts, ?MODULE) of
{ok,#sctp_opts{fd=Fd,ifaddr=Addr,port=Port,type=Type,opts=SOs}} ->
- inet:open(Fd, Addr, Port, SOs, sctp, ?FAMILY, Type, ?MODULE);
+ inet:open(Fd, Addr, Port, SOs, ?PROTO, ?FAMILY, Type, ?MODULE);
Error -> Error
end.
diff --git a/lib/kernel/src/inet_tcp.erl b/lib/kernel/src/inet_tcp.erl
index f551af9709..dac6b3119d 100644
--- a/lib/kernel/src/inet_tcp.erl
+++ b/lib/kernel/src/inet_tcp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,13 +27,18 @@
-export([controlling_process/2]).
-export([fdopen/2]).
--export([family/0, mask/2, parse_address/1]).
+-export([family/0, mask/2, parse_address/1]). % inet_tcp_dist
-export([getserv/1, getaddr/1, getaddr/2, getaddrs/1, getaddrs/2]).
+-export([translate_ip/1]).
-include("inet_int.hrl").
+-define(FAMILY, inet).
+-define(PROTO, tcp).
+-define(TYPE, stream).
+
%% my address family
-family() -> inet.
+family() -> ?FAMILY.
%% Apply netmask on address
mask({M1,M2,M3,M4}, {IP1,IP2,IP3,IP4}) ->
@@ -48,16 +53,19 @@ parse_address(Host) ->
%% inet_tcp port lookup
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) -> inet:getservbyname(Name,tcp).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO).
%% inet_tcp address lookup
-getaddr(Address) -> inet:getaddr(Address, inet).
-getaddr(Address,Timer) -> inet:getaddr_tm(Address, inet, Timer).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr_tm(Address, ?FAMILY, Timer).
%% inet_tcp address lookup
-getaddrs(Address) -> inet:getaddrs(Address, inet).
-getaddrs(Address,Timer) -> inet:getaddrs_tm(Address,inet,Timer).
-
+getaddrs(Address) -> inet:getaddrs(Address, ?FAMILY).
+getaddrs(Address, Timer) -> inet:getaddrs_tm(Address, ?FAMILY, Timer).
+
+%% inet_udp special this side addresses
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
+
%%
%% Send data on a socket
%%
@@ -77,7 +85,7 @@ unrecv(Socket, Data) -> prim_inet:unrecv(Socket, Data).
%%
shutdown(Socket, How) ->
prim_inet:shutdown(Socket, How).
-
+
%%
%% Close a socket (async)
%%
@@ -88,7 +96,7 @@ close(Socket) ->
%% Set controlling process
%%
controlling_process(Socket, NewOwner) ->
- inet:tcp_controlling_process(Socket, NewOwner).
+ inet:tcp_controlling_process(Socket, NewOwner).
%%
%% Connect
@@ -98,23 +106,28 @@ connect(Address, Port, Opts) ->
connect(Address, Port, Opts, infinity) ->
do_connect(Address, Port, Opts, infinity);
-connect(Address, Port, Opts, Timeout) when is_integer(Timeout),
- Timeout >= 0 ->
+connect(Address, Port, Opts, Timeout)
+ when is_integer(Timeout), Timeout >= 0 ->
do_connect(Address, Port, Opts, Timeout).
-do_connect({A,B,C,D}, Port, Opts, Time) when ?ip(A,B,C,D), ?port(Port) ->
- case inet:connect_options(Opts, inet) of
+do_connect(Addr = {A,B,C,D}, Port, Opts, Time)
+ when ?ip(A,B,C,D), ?port(Port) ->
+ case inet:connect_options(Opts, ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #connect_opts{fd=Fd,
- ifaddr=BAddr={Ab,Bb,Cb,Db},
- port=BPort,
- opts=SockOpts}}
+ {ok,
+ #connect_opts{
+ fd = Fd,
+ ifaddr = BAddr = {Ab,Bb,Cb,Db},
+ port = BPort,
+ opts = SockOpts}}
when ?ip(Ab,Bb,Cb,Db), ?port(BPort) ->
- case inet:open(Fd,BAddr,BPort,SockOpts,tcp,inet,stream,?MODULE) of
+ case inet:open(
+ Fd, BAddr, BPort, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
{ok, S} ->
- case prim_inet:connect(S, {A,B,C,D}, Port, Time) of
- ok -> {ok,S};
- Error -> prim_inet:close(S), Error
+ case prim_inet:connect(S, Addr, Port, Time) of
+ ok -> {ok,S};
+ Error -> prim_inet:close(S), Error
end;
Error -> Error
end;
@@ -125,14 +138,18 @@ do_connect({A,B,C,D}, Port, Opts, Time) when ?ip(A,B,C,D), ?port(Port) ->
%% Listen
%%
listen(Port, Opts) ->
- case inet:listen_options([{port,Port} | Opts], inet) of
- {error,Reason} -> exit(Reason);
- {ok, #listen_opts{fd=Fd,
- ifaddr=BAddr={A,B,C,D},
- port=BPort,
- opts=SockOpts}=R}
+ case inet:listen_options([{port,Port} | Opts], ?MODULE) of
+ {error, Reason} -> exit(Reason);
+ {ok,
+ #listen_opts{
+ fd = Fd,
+ ifaddr = BAddr = {A,B,C,D},
+ port = BPort,
+ opts = SockOpts} = R}
when ?ip(A,B,C,D), ?port(BPort) ->
- case inet:open(Fd,BAddr,BPort,SockOpts,tcp,inet,stream,?MODULE) of
+ case inet:open(
+ Fd, BAddr, BPort, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
{ok, S} ->
case prim_inet:listen(S, R#listen_opts.backlog) of
ok -> {ok, S};
@@ -146,23 +163,24 @@ listen(Port, Opts) ->
%%
%% Accept
%%
-accept(L) ->
+accept(L) ->
case prim_inet:accept(L) of
{ok, S} ->
inet_db:register_socket(S, ?MODULE),
{ok,S};
Error -> Error
end.
-
-accept(L,Timeout) ->
- case prim_inet:accept(L,Timeout) of
+
+accept(L, Timeout) ->
+ case prim_inet:accept(L, Timeout) of
{ok, S} ->
inet_db:register_socket(S, ?MODULE),
{ok,S};
Error -> Error
end.
+
%%
%% Create a port/socket from a file descriptor
%%
fdopen(Fd, Opts) ->
- inet:fdopen(Fd, Opts, tcp, inet, stream, ?MODULE).
+ inet:fdopen(Fd, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/inet_tcp_dist.erl b/lib/kernel/src/inet_tcp_dist.erl
index 64b28bb49b..f91d7ef7c3 100644
--- a/lib/kernel/src/inet_tcp_dist.erl
+++ b/lib/kernel/src/inet_tcp_dist.erl
@@ -73,7 +73,8 @@ gen_listen(Driver, Name) ->
{ok, Socket} ->
TcpAddress = get_tcp_address(Driver, Socket),
{_,Port} = TcpAddress#net_address.address,
- case erl_epmd:register_node(Name, Port) of
+ ErlEpmd = net_kernel:epmd_module(),
+ case ErlEpmd:register_node(Name, Port) of
{ok, Creation} ->
{ok, {Socket, TcpAddress, Creation}};
Error ->
@@ -280,7 +281,8 @@ do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
case inet:getaddr(Address, AddressFamily) of
{ok, Ip} ->
Timer = dist_util:start_timer(SetupTime),
- case erl_epmd:port_please(Name, Ip) of
+ ErlEpmd = net_kernel:epmd_module(),
+ case ErlEpmd:port_please(Name, Ip) of
{port, TcpPort, Version} ->
?trace("port_please(~p) -> version ~p~n",
[Node,Version]),
diff --git a/lib/kernel/src/inet_udp.erl b/lib/kernel/src/inet_udp.erl
index 5b2e5120c9..8a8aa8ecca 100644
--- a/lib/kernel/src/inet_udp.erl
+++ b/lib/kernel/src/inet_udp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,21 +24,26 @@
-export([controlling_process/2]).
-export([fdopen/2]).
--export([getserv/1, getaddr/1, getaddr/2]).
+-export([getserv/1, getaddr/1, getaddr/2, translate_ip/1]).
-include("inet_int.hrl").
+-define(FAMILY, inet).
+-define(PROTO, udp).
+-define(TYPE, dgram).
-define(RECBUF, (8*1024)).
-
%% inet_udp port lookup
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) -> inet:getservbyname(Name,udp).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO).
%% inet_udp address lookup
-getaddr(Address) -> inet:getaddr(Address, inet).
-getaddr(Address,Timer) -> inet:getaddr_tm(Address, inet, Timer).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr(Address, ?FAMILY, Timer).
+
+%% inet_udp special this side addresses
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
-spec open(_) -> {ok, inet:socket()} | {error, atom()}.
open(Port) -> open(Port, []).
@@ -47,33 +52,38 @@ open(Port) -> open(Port, []).
open(Port, Opts) ->
case inet:udp_options(
[{port,Port}, {recbuf, ?RECBUF} | Opts],
- inet) of
+ ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #udp_opts{fd=Fd,
- ifaddr=BAddr={A,B,C,D},
- port=BPort,
- opts=SockOpts}} when ?ip(A,B,C,D), ?port(BPort) ->
- inet:open(Fd,BAddr,BPort,SockOpts,udp,inet,dgram,?MODULE);
+ {ok,
+ #udp_opts{
+ fd = Fd,
+ ifaddr = BAddr = {A,B,C,D},
+ port = BPort,
+ opts = SockOpts}}
+ when ?ip(A,B,C,D), ?port(BPort) ->
+ inet:open(
+ Fd, BAddr, BPort, SockOpts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE);
{ok, _} -> exit(badarg)
end.
-send(S,{A,B,C,D},P,Data) when ?ip(A,B,C,D), ?port(P) ->
- prim_inet:sendto(S, {A,B,C,D}, P, Data).
+send(S, {A,B,C,D} = Addr, P, Data)
+ when ?ip(A,B,C,D), ?port(P) ->
+ prim_inet:sendto(S, Addr, P, Data).
send(S, Data) ->
prim_inet:sendto(S, {0,0,0,0}, 0, Data).
-connect(S, {A,B,C,D}, P) when ?ip(A,B,C,D), ?port(P) ->
- prim_inet:connect(S, {A,B,C,D}, P).
+connect(S, Addr = {A,B,C,D}, P)
+ when ?ip(A,B,C,D), ?port(P) ->
+ prim_inet:connect(S, Addr, P).
-recv(S,Len) ->
+recv(S, Len) ->
prim_inet:recvfrom(S, Len).
-recv(S,Len,Time) ->
+recv(S, Len, Time) ->
prim_inet:recvfrom(S, Len, Time).
-spec close(inet:socket()) -> ok.
-
close(S) ->
inet:udp_close(S).
@@ -92,9 +102,9 @@ controlling_process(Socket, NewOwner) ->
%% Create a port/socket from a file descriptor
%%
fdopen(Fd, Opts) ->
- inet:fdopen(Fd,
- optuniquify([{recbuf, ?RECBUF} | Opts]),
- udp, inet, dgram, ?MODULE).
+ inet:fdopen(
+ Fd, optuniquify([{recbuf, ?RECBUF} | Opts]),
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
%% Remove all duplicate options from an option list.
diff --git a/lib/kernel/src/kernel.app.src b/lib/kernel/src/kernel.app.src
index 419dc0a2fc..56d1699656 100644
--- a/lib/kernel/src/kernel.app.src
+++ b/lib/kernel/src/kernel.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -55,6 +55,8 @@
inet_tcp_dist,
kernel,
kernel_config,
+ local_tcp,
+ local_udp,
net,
net_adm,
net_kernel,
@@ -116,6 +118,6 @@
{applications, []},
{env, [{error_logger, tty}]},
{mod, {kernel, []}},
- {runtime_dependencies, ["erts-7.3", "stdlib-2.6", "sasl-2.6"]}
+ {runtime_dependencies, ["erts-8.0", "stdlib-3.0", "sasl-3.0"]}
]
}.
diff --git a/lib/kernel/src/kernel.appup.src b/lib/kernel/src/kernel.appup.src
index cc9e6f771a..d16e200cb3 100644
--- a/lib/kernel/src/kernel.appup.src
+++ b/lib/kernel/src/kernel.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,9 +18,9 @@
%% %CopyrightEnd%
{"%VSN%",
%% Up from - max one major revision back
- [{<<"4\\.[0-2](\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-18.*
- {<<"3\\.[0-2](\\.[0-9]+)*">>,[restart_new_emulator]}], % OTP-17
+ [{<<"5\\.0(\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-19.*
+ {<<"4\\.[0-2](\\.[0-9]+)*">>,[restart_new_emulator]}], % OTP-18.*
%% Down to - max one major revision back
- [{<<"4\\.[0-2](\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-18.*
- {<<"3\\.[0-2](\\.[0-9]+)*">>,[restart_new_emulator]}] % OTP-17
+ [{<<"5\\.0(\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-19.*
+ {<<"4\\.[0-2](\\.[0-9]+)*">>,[restart_new_emulator]}] % OTP-18.*
}.
diff --git a/lib/kernel/src/kernel.erl b/lib/kernel/src/kernel.erl
index 5f33f25a0d..3d0ef81318 100644
--- a/lib/kernel/src/kernel.erl
+++ b/lib/kernel/src/kernel.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -98,7 +98,7 @@ init([]) ->
{kernel_config, start_link, []},
permanent, 2000, worker, [kernel_config]},
Code = {code_server,
- {code, start_link, get_code_args()},
+ {code, start_link, []},
permanent, 2000, worker, [code]},
File = {file_server_2,
{file_server, start_link, []},
@@ -158,12 +158,6 @@ init(safe) ->
{ok, {SupFlags, Boot ++ DiskLog ++ Pg2}}.
-get_code_args() ->
- case init:get_argument(nostick) of
- {ok, [[]]} -> [[nostick]];
- _ -> []
- end.
-
start_dist_ac() ->
Spec = [{dist_ac,{dist_ac,start_link,[]},permanent,2000,worker,[dist_ac]}],
case application:get_env(kernel, start_dist_ac) of
diff --git a/lib/kernel/src/kernel_config.erl b/lib/kernel/src/kernel_config.erl
index c65728aa53..535083ef27 100644
--- a/lib/kernel/src/kernel_config.erl
+++ b/lib/kernel/src/kernel_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/local_tcp.erl b/lib/kernel/src/local_tcp.erl
new file mode 100644
index 0000000000..90e0fa2162
--- /dev/null
+++ b/lib/kernel/src/local_tcp.erl
@@ -0,0 +1,178 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(local_tcp).
+
+%% Socket server for TCP/IP
+
+-export([connect/3, connect/4, listen/2, accept/1, accept/2, close/1]).
+-export([send/2, send/3, recv/2, recv/3, unrecv/2]).
+-export([shutdown/2]).
+-export([controlling_process/2]).
+-export([fdopen/2]).
+
+-export([getserv/1, getaddr/1, getaddr/2, getaddrs/1, getaddrs/2]).
+-export([translate_ip/1]).
+
+-include("inet_int.hrl").
+
+-define(FAMILY, local).
+-define(PROTO, tcp).
+-define(TYPE, stream).
+
+%% port lookup
+getserv(0) -> {ok, 0}.
+
+%% no address lookup
+getaddr({?FAMILY, _} = Address) -> {ok, Address}.
+getaddr({?FAMILY, _} = Address, _Timer) -> {ok, Address}.
+
+%% no address lookup
+getaddrs({?FAMILY, _} = Address) -> {ok, [Address]}.
+getaddrs({?FAMILY, _} = Address, _Timer) -> {ok, [Address]}.
+
+%% special this side addresses
+translate_ip(IP) -> IP.
+
+%%
+%% Send data on a socket
+%%
+send(Socket, Packet, Opts) -> prim_inet:send(Socket, Packet, Opts).
+send(Socket, Packet) -> prim_inet:send(Socket, Packet, []).
+
+%%
+%% Receive data from a socket (inactive only)
+%%
+recv(Socket, Length) -> prim_inet:recv(Socket, Length).
+recv(Socket, Length, Timeout) -> prim_inet:recv(Socket, Length, Timeout).
+
+unrecv(Socket, Data) -> prim_inet:unrecv(Socket, Data).
+
+%%
+%% Shutdown one end of a socket
+%%
+shutdown(Socket, How) ->
+ prim_inet:shutdown(Socket, How).
+
+%%
+%% Close a socket (async)
+%%
+close(Socket) ->
+ inet:tcp_close(Socket).
+
+%%
+%% Set controlling process
+%% FIXME: move messages to new owner!!!
+%%
+controlling_process(Socket, NewOwner) ->
+ inet:tcp_controlling_process(Socket, NewOwner).
+
+%%
+%% Connect
+%%
+connect(Address, Port, Opts) ->
+ do_connect(Address, Port, Opts, infinity).
+%%
+connect(Address, Port, Opts, infinity) ->
+ do_connect(Address, Port, Opts, infinity);
+connect(Address, Port, Opts, Timeout)
+ when is_integer(Timeout), Timeout >= 0 ->
+ do_connect(Address, Port, Opts, Timeout).
+
+do_connect(Addr = {?FAMILY, _}, 0, Opts, Time) ->
+ case inet:connect_options(Opts, ?MODULE) of
+ {error, Reason} -> exit(Reason);
+ {ok,
+ #connect_opts{
+ fd = Fd,
+ ifaddr = BAddr,
+ port = 0,
+ opts = SockOpts}}
+ when tuple_size(BAddr) =:= 2, element(1, BAddr) =:= ?FAMILY;
+ BAddr =:= any ->
+ case inet:open(
+ Fd,
+ case BAddr of
+ any ->
+ undefined;
+ _ ->
+ BAddr
+ end,
+ 0, SockOpts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
+ {ok, S} ->
+ case prim_inet:connect(S, Addr, 0, Time) of
+ ok -> {ok,S};
+ Error -> prim_inet:close(S), Error
+ end;
+ Error -> Error
+ end;
+ {ok, _} -> exit(badarg)
+ end.
+
+%%
+%% Listen
+%%
+listen(0, Opts) ->
+ case inet:listen_options([{port,0} | Opts], ?MODULE) of
+ {error, Reason} -> exit(Reason);
+ {ok,
+ #listen_opts{
+ fd = Fd,
+ ifaddr = BAddr,
+ port = 0,
+ opts = SockOpts} = R}
+ when tuple_size(BAddr) =:= 2, element(1, BAddr) =:= ?FAMILY;
+ BAddr =:= any ->
+ case inet:open(
+ Fd, BAddr, 0, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
+ {ok, S} ->
+ case prim_inet:listen(S, R#listen_opts.backlog) of
+ ok -> {ok, S};
+ Error -> prim_inet:close(S), Error
+ end;
+ Error -> Error
+ end;
+ {ok, _} -> exit(badarg)
+ end.
+
+%%
+%% Accept
+%%
+accept(L) ->
+ case prim_inet:accept(L) of
+ {ok, S} ->
+ inet_db:register_socket(S, ?MODULE),
+ {ok,S};
+ Error -> Error
+ end.
+%%
+accept(L, Timeout) ->
+ case prim_inet:accept(L, Timeout) of
+ {ok, S} ->
+ inet_db:register_socket(S, ?MODULE),
+ {ok,S};
+ Error -> Error
+ end.
+
+%%
+%% Create a port/socket from a file descriptor
+%%
+fdopen(Fd, Opts) ->
+ inet:open(Fd, undefined, 0, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/local_udp.erl b/lib/kernel/src/local_udp.erl
new file mode 100644
index 0000000000..481a8c4910
--- /dev/null
+++ b/lib/kernel/src/local_udp.erl
@@ -0,0 +1,106 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(local_udp).
+
+-export([open/1, open/2, close/1]).
+-export([send/2, send/4, recv/2, recv/3, connect/3]).
+-export([controlling_process/2]).
+-export([fdopen/2]).
+
+-export([getserv/1, getaddr/1, getaddr/2, translate_ip/1]).
+
+-include("inet_int.hrl").
+
+-define(FAMILY, local).
+-define(PROTO, udp).
+-define(TYPE, dgram).
+
+
+%% port lookup
+getserv(0) -> {ok, 0}.
+
+%% no address lookup
+getaddr({?FAMILY, _} = Address) -> {ok, Address}.
+getaddr({?FAMILY, _} = Address, _Timer) -> {ok, Address}.
+
+%% special this side addresses
+translate_ip(IP) -> IP.
+
+open(0) -> open(0, []).
+%%
+open(0, Opts) ->
+ case inet:udp_options(
+ [{port,0} | Opts],
+ ?MODULE) of
+ {error, Reason} -> exit(Reason);
+ {ok,
+ #udp_opts{
+ fd = Fd,
+ ifaddr = BAddr,
+ port = 0,
+ opts = SockOpts}}
+ when tuple_size(BAddr) =:= 2, element(1, BAddr) =:= ?FAMILY;
+ BAddr =:= any ->
+ inet:open(
+ Fd,
+ case BAddr of
+ any ->
+ undefined;
+ _ ->
+ BAddr
+ end,
+ 0, SockOpts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE);
+ {ok, _} -> exit(badarg)
+ end.
+
+send(S, Addr = {?FAMILY,_}, 0, Data) ->
+ prim_inet:sendto(S, Addr, 0, Data).
+%%
+send(S, Data) ->
+ prim_inet:sendto(S, {?FAMILY,<<>>}, 0, Data).
+
+connect(S, Addr = {?FAMILY,_}, 0) ->
+ prim_inet:connect(S, Addr, 0).
+
+recv(S, Len) ->
+ prim_inet:recvfrom(S, Len).
+%%
+recv(S, Len, Time) ->
+ prim_inet:recvfrom(S, Len, Time).
+
+close(S) ->
+ inet:udp_close(S).
+
+%%
+%% Set controlling process:
+%% 1) First sync socket into a known state
+%% 2) Move all messages onto the new owners message queue
+%% 3) Commit the owner
+%% 4) Wait for ack of new Owner (since socket does some link and unlink)
+%%
+
+controlling_process(Socket, NewOwner) ->
+ inet:udp_controlling_process(Socket, NewOwner).
+
+%%
+%% Create a port/socket from a file descriptor
+%%
+fdopen(Fd, Opts) ->
+ inet:fdopen(Fd, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/net.erl b/lib/kernel/src/net.erl
index f058042bdd..2d0ae2ed0c 100644
--- a/lib/kernel/src/net.erl
+++ b/lib/kernel/src/net.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/net_adm.erl b/lib/kernel/src/net_adm.erl
index e6a81126c2..8ec275b88b 100644
--- a/lib/kernel/src/net_adm.erl
+++ b/lib/kernel/src/net_adm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -96,7 +96,8 @@ names() ->
Reason :: address | file:posix().
names(Hostname) ->
- erl_epmd:names(Hostname).
+ ErlEpmd = net_kernel:epmd_module(),
+ ErlEpmd:names(Hostname).
-spec dns_hostname(Host) -> {ok, Name} | {error, Host} when
Host :: atom() | string(),
diff --git a/lib/kernel/src/net_kernel.erl b/lib/kernel/src/net_kernel.erl
index 35a54f591e..ac19f4935b 100644
--- a/lib/kernel/src/net_kernel.erl
+++ b/lib/kernel/src/net_kernel.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -53,18 +53,25 @@
-define(tckr_dbg(X), ok).
-endif.
-%% User Interface Exports
--export([start/1, start_link/1, stop/0,
- kernel_apply/3,
+%% Documented API functions.
+
+-export([allow/1,
+ connect_node/1,
monitor_nodes/1,
monitor_nodes/2,
+ start/1,
+ stop/0]).
+
+%% Exports for internal use.
+
+-export([start_link/2,
+ kernel_apply/3,
longnames/0,
- allow/1,
protocol_childspecs/0,
epmd_module/0]).
-export([connect/1, disconnect/1, hidden_connect/1, passive_cnct/1]).
--export([connect_node/1, hidden_connect_node/1]). %% explicit connect
+-export([hidden_connect_node/1]). %% explicit connect
-export([set_net_ticktime/1, set_net_ticktime/2, get_net_ticktime/0]).
-export([node_info/1, node_info/2, nodes_info/0,
@@ -73,7 +80,8 @@
-export([publish_on_node/1, update_publish_nodes/1]).
-%% Internal Exports
+%% Internal exports for spawning processes.
+
-export([do_spawn/3,
spawn_func/6,
ticker/2,
@@ -341,18 +349,18 @@ request(Req) ->
start(Args) ->
erl_distribution:start(Args).
-%% This is the main startup routine for net_kernel
-%% The defaults are longnames and a ticktime of 15 secs to the tcp_drv.
+%% This is the main startup routine for net_kernel (only for internal
+%% use by the Kernel application.
-start_link([Name]) ->
- start_link([Name, longnames]);
+start_link([Name], CleanHalt) ->
+ start_link([Name, longnames], CleanHalt);
+start_link([Name, LongOrShortNames], CleanHalt) ->
+ start_link([Name, LongOrShortNames, 15000], CleanHalt);
-start_link([Name, LongOrShortNames]) ->
- start_link([Name, LongOrShortNames, 15000]);
-
-start_link([Name, LongOrShortNames, Ticktime]) ->
- case gen_server:start_link({local, net_kernel}, net_kernel,
- {Name, LongOrShortNames, Ticktime}, []) of
+start_link([Name, LongOrShortNames, Ticktime], CleanHalt) ->
+ Args = {Name, LongOrShortNames, Ticktime, CleanHalt},
+ case gen_server:start_link({local, net_kernel}, ?MODULE,
+ Args, []) of
{ok, Pid} ->
{ok, Pid};
{error, {already_started, Pid}} ->
@@ -361,12 +369,9 @@ start_link([Name, LongOrShortNames, Ticktime]) ->
exit(nodistribution)
end.
-%% auth:get_cookie should only be able to return an atom
-%% tuple cookies are unknowns
-
-init({Name, LongOrShortNames, TickT}) ->
+init({Name, LongOrShortNames, TickT, CleanHalt}) ->
process_flag(trap_exit,true),
- case init_node(Name, LongOrShortNames) of
+ case init_node(Name, LongOrShortNames, CleanHalt) of
{ok, Node, Listeners} ->
process_flag(priority, max),
Ticktime = to_integer(TickT),
@@ -1201,12 +1206,12 @@ get_proto_mod(_Family, _Protocol, []) ->
%% -------- Initialisation functions ------------------------
-init_node(Name, LongOrShortNames) ->
- {NameWithoutHost,_Host} = lists:splitwith(fun($@)->false;(_)->true end,
- atom_to_list(Name)),
+init_node(Name, LongOrShortNames, CleanHalt) ->
+ {NameWithoutHost0,_Host} = split_node(Name),
case create_name(Name, LongOrShortNames, 1) of
{ok,Node} ->
- case start_protos(list_to_atom(NameWithoutHost),Node) of
+ NameWithoutHost = list_to_atom(NameWithoutHost0),
+ case start_protos(NameWithoutHost, Node, CleanHalt) of
{ok, Ls} ->
{ok, Node, Ls};
Error ->
@@ -1240,8 +1245,7 @@ create_name(Name, LongOrShortNames, Try) ->
end.
create_hostpart(Name, LongOrShortNames) ->
- {Head,Host} = lists:splitwith(fun($@)->false;(_)->true end,
- atom_to_list(Name)),
+ {Head,Host} = split_node(Name),
Host1 = case {Host,LongOrShortNames} of
{[$@,_|_],longnames} ->
{ok,Host};
@@ -1268,6 +1272,9 @@ create_hostpart(Name, LongOrShortNames) ->
end,
{Head,Host1}.
+split_node(Name) ->
+ lists:splitwith(fun(C) -> C =/= $@ end, atom_to_list(Name)).
+
%%
%%
%%
@@ -1307,21 +1314,26 @@ epmd_module() ->
%% Start all protocols
%%
-start_protos(Name,Node) ->
+start_protos(Name, Node, CleanHalt) ->
case init:get_argument(proto_dist) of
{ok, [Protos]} ->
- start_protos(Name,Protos, Node);
+ start_protos(Name, Protos, Node, CleanHalt);
_ ->
- start_protos(Name,["inet_tcp"], Node)
+ start_protos(Name, ["inet_tcp"], Node, CleanHalt)
end.
-start_protos(Name,Ps, Node) ->
- case start_protos(Name, Ps, Node, []) of
- [] -> {error, badarg};
- Ls -> {ok, Ls}
+start_protos(Name, Ps, Node, CleanHalt) ->
+ case start_protos(Name, Ps, Node, [], CleanHalt) of
+ [] ->
+ case CleanHalt of
+ true -> halt(1);
+ false -> {error, badarg}
+ end;
+ Ls ->
+ {ok, Ls}
end.
-start_protos(Name, [Proto | Ps], Node, Ls) ->
+start_protos(Name, [Proto | Ps], Node, Ls, CleanHalt) ->
Mod = list_to_atom(Proto ++ "_dist"),
case catch Mod:listen(Name) of
{ok, {Socket, Address, Creation}} ->
@@ -1334,33 +1346,48 @@ start_protos(Name, [Proto | Ps], Node, Ls) ->
address = Address,
accept = AcceptPid,
module = Mod },
- start_protos(Name,Ps, Node, [L|Ls]);
+ start_protos(Name,Ps, Node, [L|Ls], CleanHalt);
_ ->
Mod:close(Socket),
- error_logger:info_msg("Invalid node name: ~p~n", [Node]),
- start_protos(Name, Ps, Node, Ls)
+ S = "invalid node name: " ++ atom_to_list(Node),
+ proto_error(CleanHalt, Proto, S),
+ start_protos(Name, Ps, Node, Ls, CleanHalt)
end;
{'EXIT', {undef,_}} ->
- error_logger:info_msg("Protocol: ~tp: not supported~n", [Proto]),
- start_protos(Name,Ps, Node, Ls);
+ proto_error(CleanHalt, Proto, "not supported"),
+ start_protos(Name, Ps, Node, Ls, CleanHalt);
{'EXIT', Reason} ->
- error_logger:info_msg("Protocol: ~tp: register error: ~tp~n",
- [Proto, Reason]),
- start_protos(Name,Ps, Node, Ls);
+ register_error(CleanHalt, Proto, Reason),
+ start_protos(Name, Ps, Node, Ls, CleanHalt);
{error, duplicate_name} ->
- error_logger:info_msg("Protocol: ~tp: the name " ++
- atom_to_list(Node) ++
- " seems to be in use by another Erlang node",
- [Proto]),
- start_protos(Name,Ps, Node, Ls);
+ S = "the name " ++ atom_to_list(Node) ++
+ " seems to be in use by another Erlang node",
+ proto_error(CleanHalt, Proto, S),
+ start_protos(Name, Ps, Node, Ls, CleanHalt);
{error, Reason} ->
- error_logger:info_msg("Protocol: ~tp: register/listen error: ~tp~n",
- [Proto, Reason]),
- start_protos(Name,Ps, Node, Ls)
+ register_error(CleanHalt, Proto, Reason),
+ start_protos(Name, Ps, Node, Ls, CleanHalt)
end;
-start_protos(_,[], _Node, Ls) ->
+start_protos(_, [], _Node, Ls, _CleanHalt) ->
Ls.
+register_error(false, Proto, Reason) ->
+ S = io_lib:format("register/listen error: ~p", [Reason]),
+ proto_error(false, Proto, lists:flatten(S));
+register_error(true, Proto, Reason) ->
+ S = "Protocol '" ++ Proto ++ "': register/listen error: ",
+ erlang:display_string(S),
+ erlang:display(Reason).
+
+proto_error(CleanHalt, Proto, String) ->
+ S = "Protocol '" ++ Proto ++ "': " ++ String ++ "\n",
+ case CleanHalt of
+ false ->
+ error_logger:info_msg(S);
+ true ->
+ erlang:display_string(S)
+ end.
+
set_node(Node, Creation) when node() =:= nonode@nohost ->
case catch erlang:setnode(Node, Creation) of
true ->
diff --git a/lib/kernel/src/os.erl b/lib/kernel/src/os.erl
index 3330b38d84..f0ad26b1f2 100644
--- a/lib/kernel/src/os.erl
+++ b/lib/kernel/src/os.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,9 @@
%%% BIFs
--export([getenv/0, getenv/1, getenv/2, getpid/0, putenv/2, system_time/0, system_time/1,
+-export([getenv/0, getenv/1, getenv/2, getpid/0,
+ perf_counter/0, perf_counter/1,
+ putenv/2, system_time/0, system_time/1,
timestamp/0, unsetenv/1]).
-spec getenv() -> [string()].
@@ -60,6 +62,18 @@ getenv(VarName, DefaultValue) ->
getpid() ->
erlang:nif_error(undef).
+-spec perf_counter() -> Counter when
+ Counter :: integer().
+
+perf_counter() ->
+ erlang:nif_error(undef).
+
+-spec perf_counter(Unit) -> integer() when
+ Unit :: erlang:time_unit().
+
+perf_counter(Unit) ->
+ erlang:convert_time_unit(os:perf_counter(), perf_counter, Unit).
+
-spec putenv(VarName, Value) -> true when
VarName :: string(),
Value :: string().
@@ -93,7 +107,7 @@ unsetenv(_) ->
%%% End of BIFs
-spec type() -> {Osfamily, Osname} when
- Osfamily :: unix | win32 | ose,
+ Osfamily :: unix | win32,
Osname :: atom().
type() ->
@@ -212,174 +226,33 @@ extensions() ->
Command :: atom() | io_lib:chars().
cmd(Cmd) ->
validate(Cmd),
- Bytes = case type() of
- {unix, _} ->
- unix_cmd(Cmd);
- {win32, Wtype} ->
- Command0 = case {os:getenv("COMSPEC"),Wtype} of
- {false,windows} -> lists:concat(["command.com /c", Cmd]);
- {false,_} -> lists:concat(["cmd /c", Cmd]);
- {Cspec,_} -> lists:concat([Cspec," /c",Cmd])
- end,
- %% open_port/2 awaits string() in Command, but io_lib:chars() can be
- %% deep lists according to io_lib module description.
- Command = lists:flatten(Command0),
- Port = open_port({spawn, Command}, [stream, in, eof, hide]),
- get_data(Port, [])
- end,
- String = unicode:characters_to_list(list_to_binary(Bytes)),
+ {SpawnCmd, SpawnOpts, SpawnInput} = mk_cmd(os:type(), Cmd),
+ Port = open_port({spawn, SpawnCmd}, [binary, stderr_to_stdout,
+ stream, in, eof, hide | SpawnOpts]),
+ true = port_command(Port, SpawnInput),
+ Bytes = get_data(Port, []),
+ String = unicode:characters_to_list(Bytes),
if %% Convert to unicode list if possible otherwise return bytes
is_list(String) -> String;
- true -> Bytes
- end.
-
-unix_cmd(Cmd) ->
- Tag = make_ref(),
- {Pid,Mref} = erlang:spawn_monitor(
- fun() ->
- process_flag(trap_exit, true),
- Port = start_port(),
- erlang:port_command(Port, mk_cmd(Cmd)),
- exit({Tag,unix_get_data(Port)})
- end),
- receive
- {'DOWN',Mref,_,Pid,{Tag,Result}} ->
- Result;
- {'DOWN',Mref,_,Pid,Reason} ->
- exit(Reason)
+ true -> binary_to_list(Bytes)
end.
-%% The -s flag implies that only the positional parameters are set,
-%% and the commands are read from standard input. We set the
-%% $1 parameter for easy identification of the resident shell.
-%%
--define(ROOT, "/").
--define(ROOT_ANDROID, "/system").
--define(SHELL, "bin/sh -s unix:cmd 2>&1").
--define(PORT_CREATOR_NAME, os_cmd_port_creator).
-
-%%
-%% Serializing open_port through a process to avoid smp lock contention
-%% when many concurrent os:cmd() want to do vfork (OTP-7890).
-%%
--spec start_port() -> port().
-start_port() ->
- Ref = make_ref(),
- Request = {Ref,self()},
- {Pid, Mon} = case whereis(?PORT_CREATOR_NAME) of
- undefined ->
- spawn_monitor(fun() ->
- start_port_srv(Request)
- end);
- P ->
- P ! Request,
- M = erlang:monitor(process, P),
- {P, M}
- end,
- receive
- {Ref, Port} when is_port(Port) ->
- erlang:demonitor(Mon, [flush]),
- Port;
- {Ref, Error} ->
- erlang:demonitor(Mon, [flush]),
- exit(Error);
- {'DOWN', Mon, process, Pid, _Reason} ->
- start_port()
- end.
-
-start_port_srv(Request) ->
- %% We don't want a group leader of some random application. Use
- %% kernel_sup's group leader.
- {group_leader, GL} = process_info(whereis(kernel_sup),
- group_leader),
- true = group_leader(GL, self()),
- process_flag(trap_exit, true),
- StayAlive = try register(?PORT_CREATOR_NAME, self())
- catch
- error:_ -> false
- end,
- start_port_srv_handle(Request),
- case StayAlive of
- true -> start_port_srv_loop();
- false -> exiting
- end.
-
-start_port_srv_handle({Ref,Client}) ->
- Path = case lists:reverse(erlang:system_info(system_architecture)) of
- % androideabi
- "ibaediordna" ++ _ -> filename:join([?ROOT_ANDROID, ?SHELL]);
- _ -> filename:join([?ROOT, ?SHELL])
- end,
- Reply = try open_port({spawn, Path},[stream]) of
- Port when is_port(Port) ->
- (catch port_connect(Port, Client)),
- unlink(Port),
- Port
- catch
- error:Reason ->
- {Reason,erlang:get_stacktrace()}
- end,
- Client ! {Ref,Reply},
- ok.
-
-start_port_srv_loop() ->
- receive
- {Ref, Client} = Request when is_reference(Ref),
- is_pid(Client) ->
- start_port_srv_handle(Request);
- _Junk ->
- ok
- end,
- start_port_srv_loop().
-
-%%
-%% unix_get_data(Port) -> Result
-%%
-unix_get_data(Port) ->
- unix_get_data(Port, []).
-
-unix_get_data(Port, Sofar) ->
- receive
- {Port,{data, Bytes}} ->
- case eot(Bytes) of
- {done, Last} ->
- lists:flatten([Sofar|Last]);
- more ->
- unix_get_data(Port, [Sofar|Bytes])
- end;
- {'EXIT', Port, _} ->
- lists:flatten(Sofar)
- end.
-
-%%
-%% eot(String) -> more | {done, Result}
-%%
-eot(Bs) ->
- eot(Bs, []).
-
-eot([4| _Bs], As) ->
- {done, lists:reverse(As)};
-eot([B| Bs], As) ->
- eot(Bs, [B| As]);
-eot([], _As) ->
- more.
-
-%%
-%% mk_cmd(Cmd) -> {ok, ShellCommandString} | {error, ErrorString}
-%%
-%% We do not allow any input to Cmd (hence commands that want
-%% to read from standard input will return immediately).
-%% Standard error is redirected to standard output.
-%%
-%% We use ^D (= EOT = 4) to mark the end of the stream.
-%%
-mk_cmd(Cmd) when is_atom(Cmd) -> % backward comp.
- mk_cmd(atom_to_list(Cmd));
-mk_cmd(Cmd) ->
- %% We insert a new line after the command, in case the command
- %% contains a comment character.
- [$(, unicode:characters_to_binary(Cmd), "\n) </dev/null; echo \"\^D\"\n"].
-
+mk_cmd({win32,Wtype}, Cmd) ->
+ Command = case {os:getenv("COMSPEC"),Wtype} of
+ {false,windows} -> lists:concat(["command.com /c", Cmd]);
+ {false,_} -> lists:concat(["cmd /c", Cmd]);
+ {Cspec,_} -> lists:concat([Cspec," /c",Cmd])
+ end,
+ {Command, [], []};
+mk_cmd(OsType,Cmd) when is_atom(Cmd) ->
+ mk_cmd(OsType, atom_to_list(Cmd));
+mk_cmd(_,Cmd) ->
+ %% Have to send command in like this in order to make sh commands like
+ %% cd and ulimit available
+ {"/bin/sh -s unix:cmd", [out],
+ %% We insert a new line after the command, in case the command
+ %% contains a comment character.
+ ["(", unicode:characters_to_binary(Cmd), "\n); exit\n"]}.
validate(Atom) when is_atom(Atom) ->
ok;
@@ -397,7 +270,7 @@ validate1([]) ->
get_data(Port, Sofar) ->
receive
{Port, {data, Bytes}} ->
- get_data(Port, [Sofar|Bytes]);
+ get_data(Port, [Sofar,Bytes]);
{Port, eof} ->
Port ! {self(), close},
receive
@@ -410,5 +283,5 @@ get_data(Port, Sofar) ->
after 1 -> % force context switch
ok
end,
- lists:flatten(Sofar)
+ iolist_to_binary(Sofar)
end.
diff --git a/lib/kernel/src/pg2.erl b/lib/kernel/src/pg2.erl
index ab98181b2a..edf4aedde2 100644
--- a/lib/kernel/src/pg2.erl
+++ b/lib/kernel/src/pg2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/ram_file.erl b/lib/kernel/src/ram_file.erl
index df335f7a8e..e427d130b7 100644
--- a/lib/kernel/src/ram_file.erl
+++ b/lib/kernel/src/ram_file.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/rpc.erl b/lib/kernel/src/rpc.erl
index d3db8eb80a..21bff02214 100644
--- a/lib/kernel/src/rpc.erl
+++ b/lib/kernel/src/rpc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,10 +52,6 @@
parallel_eval/1,
pmap/3, pinfo/1, pinfo/2]).
-%% Deprecated calls.
--deprecated([{safe_multi_server_call,2},{safe_multi_server_call,3}]).
--export([safe_multi_server_call/2,safe_multi_server_call/3]).
-
%% gen_server exports
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
@@ -67,7 +63,7 @@
%%------------------------------------------------------------------------
--type state() :: gb_trees:tree(pid(), {pid(), reference()}).
+-type state() :: map().
%%------------------------------------------------------------------------
@@ -95,7 +91,7 @@ stop(Rpc) ->
init([]) ->
process_flag(trap_exit, true),
- {ok, gb_trees:empty()}.
+ {ok, maps:new()}.
-spec handle_call(term(), term(), state()) ->
{'noreply', state()} |
@@ -134,29 +130,15 @@ handle_cast(_, S) ->
-spec handle_info(term(), state()) -> {'noreply', state()}.
+handle_info({'DOWN', _, process, Caller, normal}, S) ->
+ {noreply, maps:remove(Caller, S)};
handle_info({'DOWN', _, process, Caller, Reason}, S) ->
- case gb_trees:lookup(Caller, S) of
- {value, To} ->
- receive
- {Caller, {reply, Reply}} ->
- gen_server:reply(To, Reply)
- after 0 ->
- gen_server:reply(To, {badrpc, {'EXIT', Reason}})
- end,
- {noreply, gb_trees:delete(Caller, S)};
- none ->
- {noreply, S}
- end;
-handle_info({Caller, {reply, Reply}}, S) ->
- case gb_trees:lookup(Caller, S) of
- {value, To} ->
- receive
- {'DOWN', _, process, Caller, _} ->
- gen_server:reply(To, Reply),
- {noreply, gb_trees:delete(Caller, S)}
- end;
- none ->
- {noreply, S}
+ case maps:get(Caller, S, undefined) of
+ undefined ->
+ {noreply, S};
+ {_, _} = To ->
+ gen_server:reply(To, {badrpc, {'EXIT', Reason}}),
+ {noreply, maps:remove(Caller, S)}
end;
handle_info({From, {sbcast, Name, Msg}}, S) ->
_ = case catch Name ! Msg of %% use catch to get the printout
@@ -194,7 +176,6 @@ code_change(_, S, _) ->
%% Auxiliary function to avoid a false dialyzer warning -- do not inline
%%
handle_call_call(Mod, Fun, Args, Gleader, To, S) ->
- RpcServer = self(),
%% Spawn not to block the rpc server.
{Caller,_} =
erlang:spawn_monitor(
@@ -209,9 +190,9 @@ handle_call_call(Mod, Fun, Args, Gleader, To, S) ->
Result ->
Result
end,
- RpcServer ! {self(), {reply, Reply}}
+ gen_server:reply(To, Reply)
end),
- {noreply, gb_trees:insert(Caller, To, S)}.
+ {noreply, maps:put(Caller, To, S)}.
%% RPC aid functions ....
@@ -357,8 +338,12 @@ do_call(Node, Request, Timeout) ->
rpc_check_t({'EXIT', {timeout,_}}) -> {badrpc, timeout};
rpc_check_t(X) -> rpc_check(X).
-rpc_check({'EXIT', {{nodedown,_},_}}) -> {badrpc, nodedown};
-rpc_check({'EXIT', X}) -> exit(X);
+rpc_check({'EXIT', {{nodedown,_},_}}) ->
+ {badrpc, nodedown};
+rpc_check({'EXIT', _}=Exit) ->
+ %% Should only happen if the rex process on the other node
+ %% died.
+ {badrpc, Exit};
rpc_check(X) -> X.
@@ -587,27 +572,6 @@ multi_server_call(Nodes, Name, Msg)
Monitors = send_nodes(Nodes, Name, Msg, []),
rec_nodes(Name, Monitors).
-%% Deprecated functions. Were only needed when communicating with R6 nodes.
-
--spec safe_multi_server_call(Name, Msg) -> {Replies, BadNodes} when
- Name :: atom(),
- Msg :: term(),
- Replies :: [Reply :: term()],
- BadNodes :: [node()].
-
-safe_multi_server_call(Name, Msg) ->
- multi_server_call(Name, Msg).
-
--spec safe_multi_server_call(Nodes, Name, Msg) -> {Replies, BadNodes} when
- Nodes :: [node()],
- Name :: atom(),
- Msg :: term(),
- Replies :: [Reply :: term()],
- BadNodes :: [node()].
-
-safe_multi_server_call(Nodes, Name, Msg) ->
- multi_server_call(Nodes, Name, Msg).
-
rec_nodes(Name, Nodes) ->
rec_nodes(Name, Nodes, [], []).
@@ -748,6 +712,11 @@ pinfo(Pid) ->
-spec pinfo(Pid, Item) -> {Item, Info} | undefined | [] when
Pid :: pid(),
Item :: atom(),
+ Info :: term();
+ (Pid, ItemList) -> [{Item, Info}] | undefined | [] when
+ Pid :: pid(),
+ Item :: atom(),
+ ItemList :: [Item],
Info :: term().
pinfo(Pid, Item) when node(Pid) =:= node() ->
diff --git a/lib/kernel/src/seq_trace.erl b/lib/kernel/src/seq_trace.erl
index a7a782c29c..cc0c10909b 100644
--- a/lib/kernel/src/seq_trace.erl
+++ b/lib/kernel/src/seq_trace.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -106,14 +106,24 @@ reset_trace() ->
%% reset_trace(Pid) -> % this might be a useful function too
--type tracer() :: (Pid :: pid()) | port() | 'false'.
+-type tracer() :: (Pid :: pid()) | port() |
+ (TracerModule :: {module(), term()}) |
+ 'false'.
-spec set_system_tracer(Tracer) -> OldTracer when
Tracer :: tracer(),
OldTracer :: tracer().
-set_system_tracer(Pid) ->
- erlang:system_flag(sequential_tracer, Pid).
+set_system_tracer({Module, State} = Tracer) ->
+ case erlang:module_loaded(Module) of
+ false ->
+ Module:enabled(trace_status, erlang:self(), State);
+ true ->
+ ok
+ end,
+ erlang:system_flag(sequential_tracer, Tracer);
+set_system_tracer(Tracer) ->
+ erlang:system_flag(sequential_tracer, Tracer).
-spec get_system_tracer() -> Tracer when
Tracer :: tracer().
diff --git a/lib/kernel/src/standard_error.erl b/lib/kernel/src/standard_error.erl
index 74dd004fa6..5d649e5f94 100644
--- a/lib/kernel/src/standard_error.erl
+++ b/lib/kernel/src/standard_error.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/user.erl b/lib/kernel/src/user.erl
index 77781e0251..a5cc7b0ec1 100644
--- a/lib/kernel/src/user.erl
+++ b/lib/kernel/src/user.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/user_sup.erl b/lib/kernel/src/user_sup.erl
index 72c3fad3a9..c1fb1b1a48 100644
--- a/lib/kernel/src/user_sup.erl
+++ b/lib/kernel/src/user_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/src/wrap_log_reader.erl b/lib/kernel/src/wrap_log_reader.erl
index 6622405d85..3a984e56c7 100644
--- a/lib/kernel/src/wrap_log_reader.erl
+++ b/lib/kernel/src/wrap_log_reader.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/Makefile b/lib/kernel/test/Makefile
index 9e972b4f95..b9942e899f 100644
--- a/lib/kernel/test/Makefile
+++ b/lib/kernel/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -79,7 +79,8 @@ MODULES= \
zlib_SUITE \
loose_node \
sendfile_SUITE \
- standard_error_SUITE
+ standard_error_SUITE \
+ multi_load_SUITE
APP_FILES = \
appinc.app \
@@ -112,7 +113,7 @@ RELSYSDIR = $(RELEASE_PATH)/kernel_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/kernel/test/appinc1.erl b/lib/kernel/test/appinc1.erl
index fc9180b35a..b571208834 100644
--- a/lib/kernel/test/appinc1.erl
+++ b/lib/kernel/test/appinc1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/appinc1x.erl b/lib/kernel/test/appinc1x.erl
index b05cd55b43..3aa6f3dcb9 100644
--- a/lib/kernel/test/appinc1x.erl
+++ b/lib/kernel/test/appinc1x.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/appinc2.erl b/lib/kernel/test/appinc2.erl
index 7e92e7e092..a665e628a2 100644
--- a/lib/kernel/test/appinc2.erl
+++ b/lib/kernel/test/appinc2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/appinc2A.erl b/lib/kernel/test/appinc2A.erl
index f0e2cd4277..378eb179f2 100644
--- a/lib/kernel/test/appinc2A.erl
+++ b/lib/kernel/test/appinc2A.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/appinc2B.erl b/lib/kernel/test/appinc2B.erl
index 17623621bb..35b7016906 100644
--- a/lib/kernel/test/appinc2B.erl
+++ b/lib/kernel/test/appinc2B.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/appinc2top.erl b/lib/kernel/test/appinc2top.erl
index f3d9715a2a..3b6dc4ea31 100644
--- a/lib/kernel/test/appinc2top.erl
+++ b/lib/kernel/test/appinc2top.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/application_SUITE.erl b/lib/kernel/test/application_SUITE.erl
index 0c198b90ae..81407e9d96 100644
--- a/lib/kernel/test/application_SUITE.erl
+++ b/lib/kernel/test/application_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(application_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2
@@ -40,14 +40,14 @@
shutdown_func/1, do_shutdown/1, shutdown_timeout/1, shutdown_deadlock/1]).
-define(TESTCASE, testcase_name).
--define(testcase, ?config(?TESTCASE, Config)).
+-define(testcase, proplists:get_value(?TESTCASE, Config)).
-export([init_per_testcase/2, end_per_testcase/2, start_type/0,
start_phase/0, conf_change/0]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(2)).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[failover, failover_comp, permissions, load,
@@ -81,21 +81,15 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(otp_2973=Case, Config) ->
- code:add_path(?config(data_dir,Config)),
- Dog = test_server:timetrap(?default_timeout),
- [{?TESTCASE, Case}, {watchdog, Dog}|Config];
+ code:add_path(proplists:get_value(data_dir,Config)),
+ [{?TESTCASE, Case}|Config];
init_per_testcase(Case, Config) ->
- Dog = test_server:timetrap(?default_timeout),
- [{?TESTCASE, Case}, {watchdog, Dog}|Config].
+ [{?TESTCASE, Case}|Config].
end_per_testcase(otp_2973, Config) ->
- code:del_path(?config(data_dir,Config)),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ code:del_path(proplists:get_value(data_dir,Config)),
ok;
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-define(UNTIL(Seq), loop_until_true(fun() -> Seq end)).
@@ -120,10 +114,8 @@ loop_until_true(Fun) ->
%% Should be started in a CC view with:
%% erl -sname XXX -rsh ctrsh where XX not in [cp1, cp2, cp3]
%%-----------------------------------------------------------------
-failover(suite) -> [];
-failover(doc) ->
- ["Tests failover and takeover for distributed applications. Tests",
- "start, load etc implicitly."];
+%% Tests failover and takeover for distributed applications. Tests
+%% start, load etc implicitly.
failover(Conf) when is_list(Conf) ->
%% start a help process to check the start type
StPid = spawn_link(?MODULE, start_type, []),
@@ -133,14 +125,14 @@ failover(Conf) when is_list(Conf) ->
NoSyncTime = config_fun_fast(config_fo(NodeNames)),
WithSyncTime = config_fun(config_fo(NodeNames)),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_config(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_config(Ncp2, NoSyncTime, Conf),
{ok, Cp3} = start_node_config(Ncp3, WithSyncTime, Conf),
Cps = [Cp1, Cp2, Cp3],
wait_for_ready_net(),
- % Start app1 and make sure cp1 starts it
+ %% Start app1 and make sure cp1 starts it
{[ok,ok,ok],[]} =
rpc:multicall(Cps, application, load, [app1()]),
?UNTIL(is_loaded(app1, Cps)),
@@ -150,12 +142,12 @@ failover(Conf) when is_list(Conf) ->
false = is_started(app1, Cp2),
ok = get_start_type(#st{normal = 3}),
- % Stop cp1 and make sure cp2 starts app1
+ %% Stop cp1 and make sure cp2 starts app1
stop_node_nice(Cp1),
?UNTIL(is_started(app1, Cp2)),
ok = get_start_type(#st{normal = 3}),
- % Restart cp1 and make sure it restarts app1
+ %% Restart cp1 and make sure it restarts app1
{ok, Cp1_2} = start_node_config(Ncp1, NoSyncTime, Conf),
global:sync(),
ok = rpc:call(Cp1_2, application, load, [app1()]),
@@ -164,8 +156,8 @@ failover(Conf) when is_list(Conf) ->
?UNTIL(not is_started(app1, Cp2)),
ok = get_start_type(#st{takeover = 3}),
- % Test [{cp1, cp2}, cp3]
- % Start app_sp and make sure cp2 starts it (cp1 has more apps started)
+ %% Test [{cp1, cp2}, cp3]
+ %% Start app_sp and make sure cp2 starts it (cp1 has more apps started)
{[ok,ok,ok],[]} =
rpc:multicall([Cp1_2, Cp2, Cp3], application, load, [app_sp()]),
{[ok,ok,ok],[]} =
@@ -175,17 +167,17 @@ failover(Conf) when is_list(Conf) ->
false = is_started(app_sp, Cp3),
ok = get_start_type(#st{normal = 3}),
- % Stop cp2 and make sure cp1 starts app_sp
+ %% Stop cp2 and make sure cp1 starts app_sp
stop_node_nice(Cp2),
?UNTIL(is_started(app_sp, Cp1_2)),
ok = get_start_type(#st{failover = 3}),
- % Stop cp1 and make sure cp3 starts app_sp
+ %% Stop cp1 and make sure cp3 starts app_sp
stop_node_nice(Cp1_2),
?UNTIL(is_started(app_sp, Cp3)),
ok = get_start_type(#st{normal = 3, failover = 3}),
- % Restart cp2 and make sure it restarts app_sp
+ %% Restart cp2 and make sure it restarts app_sp
{ok, Cp2_2} = start_node_config(Ncp2, NoSyncTime, Conf),
global:sync(),
ok = rpc:call(Cp2_2, application, load, [app_sp()]),
@@ -194,16 +186,16 @@ failover(Conf) when is_list(Conf) ->
?UNTIL(not is_started(app_sp, Cp3)),
ok = get_start_type(#st{takeover = 3}),
- % Restart cp1 and make sure it doesn't restart app_sp
+ %% Restart cp1 and make sure it doesn't restart app_sp
{ok, Cp1_3} = start_node_config(Ncp1, NoSyncTime, Conf),
global:sync(),
ok = rpc:call(Cp1_3, application, load, [app_sp()]),
ok = rpc:call(Cp1_3, application, start, [app_sp, permanent]),
- test_server:sleep(500),
+ ct:sleep(500),
false = is_started(app_sp, Cp1_3),
true = is_started(app_sp, Cp2_2),
- % Force takeover to cp1
+ %% Force takeover to cp1
ok = rpc:call(Cp1_3, application, takeover, [app_sp, permanent]),
?UNTIL(is_started(app_sp, Cp1_3)),
?UNTIL(not is_started(app_sp, Cp2_2)),
@@ -225,11 +217,9 @@ failover(Conf) when is_list(Conf) ->
%% Should be started in a CC view with:
%% erl -sname XXX -rsh ctrsh where XX not in [cp1, cp2, cp3]
%%-----------------------------------------------------------------
-failover_comp(suite) -> [];
-failover_comp(doc) ->
- ["Tests failover and takeover for distributed applications. Tests",
- "start, load etc implicitly. The applications do not use start_phases,"
- "i.e the failover should be trasfered to normal start type."];
+%% Tests failover and takeover for distributed applications. Tests
+%% start, load etc implicitly. The applications do not use start_phases
+%% i.e. the failover should be transfered to normal start type.
failover_comp(Conf) when is_list(Conf) ->
%% start a help process to check the start type
StPid = spawn_link(?MODULE, start_type, []),
@@ -239,14 +229,14 @@ failover_comp(Conf) when is_list(Conf) ->
NoSyncTime = config_fun_fast(config(NodeNames)),
WithSyncTime = config_fun(config(NodeNames)),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_config(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_config(Ncp2, NoSyncTime, Conf),
{ok, Cp3} = start_node_config(Ncp3, WithSyncTime, Conf),
Cps = [Cp1, Cp2, Cp3],
wait_for_ready_net(),
- % Start app1 and make sure cp1 starts it
+ %% Start app1 and make sure cp1 starts it
{[ok,ok,ok],[]} =
rpc:multicall(Cps, application, load, [app1()]),
?UNTIL(is_loaded(app1, Cps)),
@@ -256,12 +246,12 @@ failover_comp(Conf) when is_list(Conf) ->
false = is_started(app1, Cp2),
ok = get_start_type(#st{normal = 3}),
- % Stop cp1 and make sure cp2 starts app1
+ %% Stop cp1 and make sure cp2 starts app1
stop_node_nice(Cp1),
?UNTIL(is_started(app1, Cp2)),
ok = get_start_type(#st{normal = 3}),
- % Restart cp1 and make sure it restarts app1
+ %% Restart cp1 and make sure it restarts app1
{ok, Cp1_2} = start_node_config(Ncp1, NoSyncTime, Conf),
global:sync(),
ok = rpc:call(Cp1_2, application, load, [app1()]),
@@ -271,8 +261,8 @@ failover_comp(Conf) when is_list(Conf) ->
?UNTIL(not is_started(app1, Cp2)),
ok = get_start_type(#st{takeover = 3}),
- % Test [{cp1, cp2}, cp3]
- % Start app3 and make sure cp2 starts it (cp1 has more apps started)
+ %% Test [{cp1, cp2}, cp3]
+ %% Start app3 and make sure cp2 starts it (cp1 has more apps started)
{[ok,ok,ok],[]} =
rpc:multicall([Cp1_2, Cp2, Cp3], application, load, [app3()]),
?UNTIL(is_loaded(app3, [Cp1_2, Cp2, Cp3])),
@@ -283,17 +273,17 @@ failover_comp(Conf) when is_list(Conf) ->
false = is_started(app3, Cp3),
ok = get_start_type(#st{normal = 3}),
- % Stop cp2 and make sure cp1 starts app3
+ %% Stop cp2 and make sure cp1 starts app3
stop_node_nice(Cp2),
?UNTIL(is_started(app3, Cp1_2)),
ok = get_start_type(#st{normal = 3}),
- % Stop cp1 and make sure cp3 starts app3
+ %% Stop cp1 and make sure cp3 starts app3
stop_node_nice(Cp1_2),
?UNTIL(is_started(app3, Cp3)),
ok = get_start_type(#st{normal = 6}),
- % Restart cp2 and make sure it restarts app3
+ %% Restart cp2 and make sure it restarts app3
{ok, Cp2_2} = start_node_config(Ncp2, NoSyncTime, Conf),
global:sync(),
ok = rpc:call(Cp2_2, application, load, [app3()]),
@@ -303,17 +293,17 @@ failover_comp(Conf) when is_list(Conf) ->
?UNTIL(not is_started(app3, Cp3)),
ok = get_start_type(#st{takeover = 3}),
- % Restart cp1 and make sure it doesn't restart app3
+ %% Restart cp1 and make sure it doesn't restart app3
{ok, Cp1_3} = start_node_config(Ncp1, NoSyncTime, Conf),
global:sync(),
ok = rpc:call(Cp1_3, application, load, [app3()]),
true = is_loaded(app3, Cp1_3),
ok = rpc:call(Cp1_3, application, start, [app3, permanent]),
- test_server:sleep(5000),
+ ct:sleep(5000),
false = is_started(app3, Cp1_3),
true = is_started(app3, Cp2_2),
- % Force takeover to cp1
+ %% Force takeover to cp1
ok = rpc:call(Cp1_3, application, takeover, [app3, permanent]),
?UNTIL(is_started(app3, Cp1_3)),
?UNTIL(not is_started(app3, Cp2_2)),
@@ -335,23 +325,21 @@ failover_comp(Conf) when is_list(Conf) ->
%% Should be started in a CC view with:
%% erl -sname XXX -rsh ctrsh where XX not in [cp1, cp2, cp3]
%%-----------------------------------------------------------------
-permissions(suite) -> [];
-permissions(doc) ->
- ["Tests permissions for distributed applications."];
+%% Tests permissions for distributed applications.
permissions(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, Ncp2, Ncp3] = node_names([cp1, cp2, cp3], Conf),
NoSyncTime = config_fun_fast(config2(NodeNames)),
WithSyncTime = config_fun(config2(NodeNames)),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_config(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_config(Ncp2, NoSyncTime, Conf),
{ok, Cp3} = start_node_config(Ncp3, WithSyncTime, Conf),
Cps = [Cp1, Cp2, Cp3],
wait_for_ready_net(),
- % Start app1 and make sure cp1 starts it
+ %% Start app1 and make sure cp1 starts it
{[ok,ok,ok],[]} =
rpc:multicall(Cps, application, load, [app1()]),
?UNTIL(is_loaded(app1, Cps)),
@@ -360,50 +348,50 @@ permissions(Conf) when is_list(Conf) ->
?UNTIL(is_started(app1, Cp1)),
false = is_started(app1, Cp2),
- % Unpermit app1 on cp1, make sure cp2 starts it
+ %% Unpermit app1 on cp1, make sure cp2 starts it
ok = rpc:call(Cp1, application, permit, [app1, false]),
false = is_started(app1, Cp1),
true = is_started(app1, Cp2),
- % Unpermit app1 on cp2, make sure cp3 starts it
+ %% Unpermit app1 on cp2, make sure cp3 starts it
ok = rpc:call(Cp2, application, permit, [app1, false]),
false = is_started(app1, Cp1),
false = is_started(app1, Cp2),
true = is_started(app1, Cp3),
- % Permit cp2 again
+ %% Permit cp2 again
ok = rpc:call(Cp2, application, permit, [app1, true]),
false = is_started(app1, Cp1),
false = is_started(app1, Cp3),
true = is_started(app1, Cp2),
- % Start app3, make sure noone starts it
+ %% Start app3, make sure noone starts it
{[ok,ok,ok],[]} =
rpc:multicall(Cps, application, load, [app3()]),
?UNTIL(is_loaded(app3, Cps)),
{[ok,ok,ok],[]} =
rpc:multicall(Cps, application, start, [app3, permanent]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app3, Cp1),
false = is_started(app3, Cp2),
false = is_started(app3, Cp3),
- % Permit app3 on Cp3
+ %% Permit app3 on Cp3
ok = rpc:call(Cp3, application, permit, [app3, true]),
true = is_started(app3, Cp3),
- % Permit app3 on Cp2, make sure it starts it
+ %% Permit app3 on Cp2, make sure it starts it
ok = rpc:call(Cp2, application, permit, [app3, true]),
true = is_started(app3, Cp2),
false = is_started(app3, Cp3),
- % Permit app3 on Cp1, make sure it doesn't start it
+ %% Permit app3 on Cp1, make sure it doesn't start it
ok = rpc:call(Cp1, application, permit, [app3, true]),
false = is_started(app3, Cp1),
true = is_started(app3, Cp2),
false = is_started(app3, Cp3),
- % Stop Cp2, make sure Cp1 starts app3
+ %% Stop Cp2, make sure Cp1 starts app3
stop_node_nice(Cp2),
?UNTIL(is_started(app3, Cp1)),
@@ -415,15 +403,13 @@ permissions(Conf) when is_list(Conf) ->
%% Should be started in a CC view with:
%% erl -sname XXX -rsh ctrsh where XX not in [cp1, cp2, cp3]
%%-----------------------------------------------------------------
-load(suite) -> [];
-load(doc) ->
- ["Tests loading of distributed applications."];
+%% Tests loading of distributed applications.
load(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, Ncp2, Ncp3] = node_names([cp1, cp2, cp3], Conf),
NoSyncTime = config_fun_fast(config3(NodeNames)),
WithSyncTime = config_fun(config3(NodeNames)),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_config(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_config(Ncp2, NoSyncTime, Conf),
{ok, Cp3} = start_node_config(Ncp3, WithSyncTime, Conf),
@@ -439,7 +425,7 @@ load(Conf) when is_list(Conf) ->
false = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Load app1 with different specs and make sure we get an error
+ %% Load app1 with different specs and make sure we get an error
{[{error,_},{error,_}],[]} =
rpc:multicall([Cp1, Cp2], application, load, [app1(), d1(NodeNames)]),
{error, _} = rpc:call(Cp3, application, load, [app1(), d2(NodeNames)]),
@@ -452,15 +438,13 @@ load(Conf) when is_list(Conf) ->
%%-----------------------------------------------------------------
%% Same test as load/1, only with code path cache enabled.
%%-----------------------------------------------------------------
-load_use_cache(suite) -> [];
-load_use_cache(doc) ->
- ["Tests loading of distributed applications. Code path cache enabled."];
+%% Tests loading of distributed applications. Code path cache enabled.
load_use_cache(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, Ncp2, Ncp3] = node_names([cp1, cp2, cp3], Conf),
NoSyncTime = config_fun_fast(config3(NodeNames)),
WithSyncTime = config_fun(config3(NodeNames)),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_with_cache(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_with_cache(Ncp2, NoSyncTime, Conf),
{ok, Cp3} = start_node_with_cache(Ncp3, WithSyncTime, Conf),
@@ -475,7 +459,7 @@ load_use_cache(Conf) when is_list(Conf) ->
?UNTIL(is_started(app1, Cp1)),
false = is_started(app1, Cp2),
- % Load app1 with different specs and make sure we get an error
+ %% Load app1 with different specs and make sure we get an error
{[{error,_},{error,_}],[]} =
rpc:multicall([Cp1, Cp2], application, load, [app1(), d1(NodeNames)]),
{error, _} = rpc:call(Cp3, application, load, [app1(), d2(NodeNames)]),
@@ -489,9 +473,7 @@ load_use_cache(Conf) when is_list(Conf) ->
%% Should be started in a CC view with:
%% erl -sname XXX -rsh ctrsh where XX not in [cp1, cp2, cp3]
%%-----------------------------------------------------------------
-start_phases(suite) -> [];
-start_phases(doc) ->
- ["Tests new start phases and failover."];
+%% Tests new start phases and failover.
start_phases(Conf) when is_list(Conf) ->
%% start a help process to check the start type
SpPid = spawn_link(?MODULE, start_phase, []),
@@ -553,17 +535,15 @@ start_phases(Conf) when is_list(Conf) ->
ok.
-script_start(doc) ->
- ["Start distributed applications from within a boot script. Test ",
- "same as failover."];
-script_start(suite) -> [];
+%% Start distributed applications from within a boot script. Test
+%% same as failover.
script_start(Conf) when is_list(Conf) ->
%% start a help process to check the start type
StPid = spawn_link(?MODULE, start_type, []),
yes = global:register_name(st_type, StPid),
- % Create the .app files and the boot script
+ %% Create the .app files and the boot script
ok = create_app(),
{{KernelVer,StdlibVer}, _} = create_script("latest"),
case is_real_system(KernelVer, StdlibVer) of
@@ -578,7 +558,7 @@ script_start(Conf) when is_list(Conf) ->
NoSyncTime = config_fun_fast(config_fo(NodeNames)),
WithSyncTime = config_fun(config_fo(NodeNames)),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_boot_config(Ncp1, NoSyncTime, Conf, latest),
{ok, Cp2} = start_node_boot_config(Ncp2, NoSyncTime, Conf, latest),
{ok, Cp3} = start_node_boot_config(Ncp3, WithSyncTime, Conf, latest),
@@ -590,16 +570,16 @@ script_start(Conf) when is_list(Conf) ->
false = is_started(app1, Cp2),
ok = get_start_type(#st{normal = 9}),
- % Stop cp1 and make sure cp2 starts app1, app2 normally (no
- % start_phases defined) and app_sp as failover (start_phases
- % defined)
+ %% Stop cp1 and make sure cp2 starts app1, app2 normally (no
+ %% start_phases defined) and app_sp as failover (start_phases
+ %% defined)
stop_node_nice(Cp1),
?UNTIL(is_started(app1, Cp2)),
?UNTIL(is_started(app2, Cp2)),
?UNTIL(is_started(app_sp, Cp2)),
ok = get_start_type(#st{normal = 6, failover = 3}),
- % Restart cp1, Cp1 takesover app1 and app2
+ %% Restart cp1, Cp1 takesover app1 and app2
{ok, Cp1_2} = start_node_boot_config(Ncp1, NoSyncTime, Conf, latest),
global:sync(),
?UNTIL(is_started(app1, Cp1_2)),
@@ -610,20 +590,20 @@ script_start(Conf) when is_list(Conf) ->
?UNTIL(not is_started(app2, Cp2)),
ok = get_start_type(#st{takeover = 6}),
- % Stop cp2 and make sure cp1 starts app_sp.
+ %% Stop cp2 and make sure cp1 starts app_sp.
false = is_started(app_sp, Cp1_2),
stop_node_nice(Cp2),
?UNTIL(is_started(app_sp, Cp1_2)),
ok = get_start_type(#st{failover = 3}),
- % Stop cp1 and make sure cp3 starts app1, app2 and app_sp
+ %% Stop cp1 and make sure cp3 starts app1, app2 and app_sp
stop_node_nice(Cp1_2),
?UNTIL(is_started(app_sp, Cp3)),
?UNTIL(is_started(app1, Cp3)),
?UNTIL(is_started(app2, Cp3)),
ok = get_start_type(#st{normal = 6, failover = 3}),
- % Restart cp2 and make sure it takesover app1, app2 and app_sp
+ %% Restart cp2 and make sure it takesover app1, app2 and app_sp
{ok, Cp2_2} = start_node_boot_config(Ncp2, NoSyncTime, Conf, latest),
global:sync(),
?UNTIL(is_started(app_sp, Cp2_2)),
@@ -634,7 +614,7 @@ script_start(Conf) when is_list(Conf) ->
?UNTIL(not is_started(app2, Cp3)),
ok = get_start_type(#st{takeover = 9}),
- % Restart cp1 and make sure it takesover app1, app2
+ %% Restart cp1 and make sure it takesover app1, app2
{ok, Cp1_3} = start_node_boot_config(Ncp1, NoSyncTime, Conf, latest),
global:sync(),
?UNTIL(is_started(app1, Cp1_3)),
@@ -645,7 +625,7 @@ script_start(Conf) when is_list(Conf) ->
?UNTIL(not is_started(app2, Cp2_2)),
ok = get_start_type(#st{takeover = 6}),
- % Force takeover to cp1
+ %% Force takeover to cp1
ok = rpc:call(Cp1_3, application, takeover, [app_sp, permanent]),
?UNTIL(is_started(app_sp, Cp1_3)),
?UNTIL(not is_started(app_sp, Cp2_2)),
@@ -668,15 +648,13 @@ script_start(Conf) when is_list(Conf) ->
ok.
-permit_false_start_local(doc) ->
- ["Start local applications with permission false. Set",
- "permit true on different nodes."];
-permit_false_start_local(suite) -> [];
+%% Start local applications with permission false. Set
+%% permit true on different nodes.
permit_false_start_local(Conf) when is_list(Conf) ->
%% This configuration does not start dist_ac.
Config = write_config_file(fun config_perm/1, Conf),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
[Ncp1, Ncp2, Ncp3] = node_names([cp1, cp2, cp3], Conf),
{ok, Cp1} = start_node(Ncp1, Config),
{ok, Cp2} = start_node(Ncp2, Config),
@@ -694,99 +672,99 @@ permit_false_start_local(Conf) when is_list(Conf) ->
{[ok,ok,ok],[]} =
rpc:multicall([Cp1, Cp2, Cp3], application, load, [app3()]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app1, Cp1),
false = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- %Permit a not started application
+ %% Permit a not started application
ok = rpc:call(Cp1, application, permit, [app3, true]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app3, Cp1),
false = is_started(app3, Cp2),
false = is_started(app3, Cp3),
- %Permit a not loaded application
+ %% Permit a not loaded application
{error,{not_loaded,app_notloaded}} =
rpc:call(Cp1, application, permit, [app_notloaded, true]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app_notloaded, Cp1),
false = is_started(app_notloaded, Cp2),
false = is_started(app_notloaded, Cp3),
- %Unpermit a not started application
+ %% Unpermit a not started application
ok = rpc:call(Cp1, application, permit, [app3, false]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app3, Cp1),
false = is_started(app3, Cp2),
false = is_started(app3, Cp3),
- %Unpermit a not loaded application
+ %% Unpermit a not loaded application
{error,{not_loaded,app_notloaded}} =
rpc:call(Cp1, application, permit, [app_notloaded, false]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app_notloaded, Cp1),
false = is_started(app_notloaded, Cp2),
false = is_started(app_notloaded, Cp3),
- % Permit app1 on CP1 and make sure it is started
+ %% Permit app1 on CP1 and make sure it is started
ok = rpc:call(Cp1, application, permit, [app1, true]),
?UNTIL(is_started(app1, Cp1)),
false = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Permit it again
+ %% Permit it again
ok = rpc:call(Cp1, application, permit, [app1, true]),
- test_server:sleep(1000),
+ ct:sleep(1000),
true = is_started(app1, Cp1),
false = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Permit app2 on CP1 and make sure it is started
+ %% Permit app2 on CP1 and make sure it is started
ok = rpc:call(Cp1, application, permit, [app2, true]),
?UNTIL(is_started(app2, Cp1)),
false = is_started(app2, Cp2),
false = is_started(app2, Cp3),
- % Permit app1 on CP2 and make sure it is started
+ %% Permit app1 on CP2 and make sure it is started
ok = rpc:call(Cp2, application, permit, [app1, true]),
?UNTIL(is_started(app1, Cp2)),
true = is_started(app1, Cp1),
false = is_started(app1, Cp3),
- % Unpermit app1 on CP1 and make sure it is stopped
+ %% Unpermit app1 on CP1 and make sure it is stopped
ok = rpc:call(Cp1, application, permit, [app1, false]),
?UNTIL(false =:= is_started(app1, Cp1)),
true = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Unpermit it agin
+ %% Unpermit it agin
ok = rpc:call(Cp1, application, permit, [app1, false]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app1, Cp1),
true = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Permit app1 on CP1 and make sure it is started
+ %% Permit app1 on CP1 and make sure it is started
ok = rpc:call(Cp1, application, permit, [app1, true]),
?UNTIL(is_started(app1, Cp1)),
true = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Unpermit app1 on CP1 and make sure it is stopped
+ %% Unpermit app1 on CP1 and make sure it is stopped
ok = rpc:call(Cp1, application, permit, [app1, false]),
?UNTIL(false =:= is_started(app1, Cp1)),
true = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Unpermit app1 on CP2 and make sure it is stopped
+ %% Unpermit app1 on CP2 and make sure it is stopped
ok = rpc:call(Cp2, application, permit, [app1, false]),
- test_server:sleep(1000),
+ ct:sleep(1000),
?UNTIL(false =:= is_started(app1, Cp2)),
false = is_started(app1, Cp1),
false = is_started(app1, Cp3),
- % Unpermit app2 on CP1 and make sure it is stopped
+ %% Unpermit app2 on CP1 and make sure it is stopped
ok = rpc:call(Cp1, application, permit, [app2, false]),
?UNTIL(false =:= is_started(app2, Cp2)),
false = is_started(app2, Cp1),
@@ -798,16 +776,14 @@ permit_false_start_local(Conf) when is_list(Conf) ->
ok.
-permit_false_start_dist(doc) ->
- ["Start distributed applications with permission false. Set",
- "permit true on different nodes."];
-permit_false_start_dist(suite) -> [];
+%% Start distributed applications with permission false. Set
+%% permit true on different nodes.
permit_false_start_dist(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, Ncp2, Ncp3] = node_names([cp1, cp2, cp3], Conf),
NoSyncTime = config_fun_fast(config_perm2(NodeNames)),
WithSyncTime = config_fun(config_perm2(NodeNames)),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_config(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_config(Ncp2, NoSyncTime, Conf),
{ok, Cp3} = start_node_config(Ncp3, WithSyncTime, Conf),
@@ -822,36 +798,36 @@ permit_false_start_dist(Conf) when is_list(Conf) ->
{[ok,ok,ok],[]} =
rpc:multicall(Cps, application, load, [app2()]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app1, Cp1),
false = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- %Permit a not started application
+ %% Permit a not started application
ok = rpc:call(Cp1, application, permit, [app2, true]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app2, Cp1),
false = is_started(app2, Cp2),
false = is_started(app2, Cp3),
- %Permit a not loaded application
+ %% Permit a not loaded application
{error,{not_loaded,app3}} =
rpc:call(Cp1, application, permit, [app3, true]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app3, Cp1),
false = is_started(app3, Cp2),
false = is_started(app3, Cp3),
- %Unpermit a not started application
+ %% Unpermit a not started application
ok = rpc:call(Cp1, application, permit, [app2, false]),
{[ok,ok,ok],[]} =
rpc:multicall([Cp1, Cp2, Cp3], application, start, [app2, permanent]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app2, Cp1),
false = is_started(app2, Cp2),
false = is_started(app2, Cp3),
- %Unpermit a not loaded application
+ %% Unpermit a not loaded application
{error,{not_loaded,app3}} =
rpc:call(Cp1, application, permit, [app3, false]),
{[ok,ok,ok],[]} =
@@ -859,42 +835,42 @@ permit_false_start_dist(Conf) when is_list(Conf) ->
?UNTIL(is_loaded(app3, Cps)),
{[ok,ok,ok],[]} =
rpc:multicall(Cps, application, start, [app3, permanent]),
- test_server:sleep(1000),
+ ct:sleep(1000),
false = is_started(app3, Cp1),
false = is_started(app3, Cp2),
false = is_started(app3, Cp3),
- % Permit app1 on CP1 and make sure it is started
+ %% Permit app1 on CP1 and make sure it is started
ok = rpc:call(Cp1, application, permit, [app1, true]),
?UNTIL(is_started(app1, Cp1)),
false = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Permit it again
+ %% Permit it again
ok = rpc:call(Cp1, application, permit, [app1, true]),
?UNTIL(is_started(app1, Cp1)),
false = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Permit app2 on CP1 and make sure it is started
+ %% Permit app2 on CP1 and make sure it is started
ok = rpc:call(Cp1, application, permit, [app2, true]),
?UNTIL(is_started(app2, Cp1)),
false = is_started(app2, Cp2),
false = is_started(app2, Cp3),
- % Permit app1 on CP2 and make sure it is not started
+ %% Permit app1 on CP2 and make sure it is not started
ok = rpc:call(Cp2, application, permit, [app1, true]),
- test_server:sleep(1000),
+ ct:sleep(1000),
true = is_started(app1, Cp1),
false = is_started(app1, Cp2),
false = is_started(app1, Cp3),
- % Crash CP1 and make sure app1, but not app2, is started on CP2
+ %% Crash CP1 and make sure app1, but not app2, is started on CP2
stop_node_nice(Cp1),
?UNTIL(is_started(app1, Cp2)),
false = is_started(app2, Cp2),
- % Restart CP1 again, check nothing is running on it
+ %% Restart CP1 again, check nothing is running on it
{ok, Cp1_2} = start_node_config(Ncp1, NoSyncTime, Conf),
global:sync(),
ok = rpc:call(Cp1_2, application, load, [app1()]),
@@ -909,19 +885,19 @@ permit_false_start_dist(Conf) when is_list(Conf) ->
false = is_started(app1, Cp1_2),
false = is_started(app2, Cp1_2),
- % Permit app3 on CP3 and make sure it is started
+ %% Permit app3 on CP3 and make sure it is started
ok = rpc:call(Cp3, application, permit, [app3, true]),
?UNTIL(is_started(app3, Cp3)),
false = is_started(app3, Cp1_2),
false = is_started(app3, Cp2),
- % Permit app3 on CP1 and make sure it is moved there from CP3
+ %% Permit app3 on CP1 and make sure it is moved there from CP3
ok = rpc:call(Cp1_2, application, permit, [app3, true]),
?UNTIL(is_started(app3, Cp1_2)),
false = is_started(app3, Cp2),
false = is_started(app3, Cp3),
- % Unpermit app3 on CP3 and CP1 and make sure it is stopped
+ %% Unpermit app3 on CP3 and CP1 and make sure it is stopped
ok = rpc:call(Cp3, application, permit, [app3, false]),
ok = rpc:call(Cp1_2, application, permit, [app3, false]),
?UNTIL(false =:= is_started(app3, Cp1_2)),
@@ -933,27 +909,25 @@ permit_false_start_dist(Conf) when is_list(Conf) ->
stop_node_nice(Cp3),
ok.
-nodedown_start(doc) ->
- ["app1 distributed as [cp1, cp2]. Call application:start(app1) on",
- "cp2, but not on cp1. Kill cp1. Make sure app1 is started on cp2."];
-nodedown_start(suite) -> [];
+%% app1 distributed as [cp1, cp2]. Call application:start(app1) on
+%% cp2, but not on cp1. Kill cp1. Make sure app1 is started on cp2.
nodedown_start(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, Ncp2] = node_names([cp1, cp2], Conf),
NoSyncTime = config_fun_fast(config4(NodeNames)),
WithSyncTime = config_fun(config4(NodeNames)),
- % Test [cp1, cp2]
+ %% Test [cp1, cp2]
{ok, Cp1} = start_node_config(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_config(Ncp2, WithSyncTime, Conf),
wait_for_ready_net(),
- % Start app1 and make sure cp1 starts it
+ %% Start app1 and make sure cp1 starts it
{[ok,ok],[]} =
rpc:multicall([Cp1, Cp2], application, load, [app1()]),
_ = rpc:cast(Cp2, application, start, [app1, permanent]),
- test_server:sleep(1000),
+ ct:sleep(1000),
- % Crash CP1 and make sure app1 is started on CP2
+ %% Crash CP1 and make sure app1 is started on CP2
stop_node_nice(Cp1),
?UNTIL(is_started(app1, Cp2)),
@@ -961,8 +935,7 @@ nodedown_start(Conf) when is_list(Conf) ->
ok.
-ensure_started(suite) -> [];
-ensure_started(doc) -> ["Test application:ensure_started/1."];
+%% Test application:ensure_started/1.
ensure_started(_Conf) ->
{ok, Fd} = file:open("app1.app", [write]),
@@ -981,8 +954,7 @@ ensure_started(_Conf) ->
ok = application:unload(app1),
ok.
-ensure_all_started(suite) -> [];
-ensure_all_started(doc) -> ["Test application:ensure_all_started/1-2."];
+%% Test application:ensure_all_started/1-2.
ensure_all_started(_Conf) ->
{ok, Fd1} = file:open("app1.app", [write]),
@@ -1069,11 +1041,9 @@ ensure_all_started(_Conf) ->
%% Ticket: OTP-1586
%% Slogan: recursive load of applications fails
%%-----------------------------------------------------------------
-otp_1586(suite) -> [];
-otp_1586(doc) ->
- ["Test recursive load of applications."];
+%% Test recursive load of applications.
otp_1586(Conf) when is_list(Conf) ->
- Dir = ?config(priv_dir,Conf),
+ Dir = proplists:get_value(priv_dir,Conf),
{ok, Fd} = file:open(filename:join(Dir, "app5.app"), [write]),
w_app5(Fd),
file:close(Fd),
@@ -1090,21 +1060,19 @@ otp_1586(Conf) when is_list(Conf) ->
%% Slogan: start of distrib apps fails when the nodes start
%% simultaneously
%%-----------------------------------------------------------------
-otp_2078(suite) -> [];
-otp_2078(doc) ->
- ["Test start of distrib apps fails when the nodes start simultaneously."];
+%% Test start of distrib apps fails when the nodes start simultaneously.
otp_2078(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, Ncp2] = node_names([cp1, cp2], Conf),
NoSyncTime = config_fun_fast(config4(NodeNames)),
WithSyncTime = config_fun(config4(NodeNames)),
- % Test [cp1, cp2]
+ %% Test [cp1, cp2]
{ok, Cp1} = start_node_config(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_config(Ncp2, WithSyncTime, Conf),
Cps = [Cp1, Cp2],
wait_for_ready_net(),
- % Start app1 and make sure cp1 starts it
+ %% Start app1 and make sure cp1 starts it
{[ok,ok],[]} =
rpc:multicall(Cps, application, load, [app1()]),
?UNTIL(is_loaded(app1, Cps)),
@@ -1112,8 +1080,8 @@ otp_2078(Conf) when is_list(Conf) ->
?UNTIL(is_started(app1, Cp1)),
false = is_started(app1, Cp2),
- % Start app1 on cp2; make sure it works (the bug was that this start
- % returned error)
+ %% Start app1 on cp2; make sure it works (the bug was that this start
+ %% returned error)
ok = rpc:call(Cp2, application, start, [app1, permanent]),
true = is_started(app1, Cp1),
false = is_started(app1, Cp2),
@@ -1122,15 +1090,13 @@ otp_2078(Conf) when is_list(Conf) ->
stop_node_nice(Cp2),
ok.
-otp_2012(suite) -> [];
-otp_2012(doc) ->
- ["Test change of configuration parameters without changing code."];
+%% Test change of configuration parameters without changing code.
otp_2012(Conf) when is_list(Conf) ->
%% start a help process to check the config change
CcPid = spawn_link(?MODULE, conf_change, []),
yes = global:register_name(conf_change, CcPid),
- % Write a .app file
+ %% Write a .app file
{ok, Fd} = file:open("app1.app", [write]),
w_app1(Fd),
file:close(Fd),
@@ -1138,7 +1104,7 @@ otp_2012(Conf) when is_list(Conf) ->
w_app1(Fd2),
file:close(Fd2),
- % Start app1
+ %% Start app1
ok = application:load(app1()),
ok = application:start(app1, permanent),
@@ -1149,7 +1115,7 @@ otp_2012(Conf) when is_list(Conf) ->
ok = application_controller:config_change(EnvBefore),
ok = get_conf_change([{[], [{new1, hi}, {new2, moi}], []}]),
- % Start app2
+ %% Start app2
ok = application:load(app2()),
ok = application:start(app2, permanent),
@@ -1173,11 +1139,9 @@ otp_2012(Conf) when is_list(Conf) ->
%% Ticket: OTP-2718
%% Slogan: transient app which fails during start is ignored
%%-----------------------------------------------------------------
-otp_2718(suite) -> [];
-otp_2718(doc) ->
- ["Test fail of transient app at start."];
+%% Test fail of transient app at start.
otp_2718(Conf) when is_list(Conf) ->
- {ok, Cp1} = start_node_args(cp1, "-pa " ++ ?config(data_dir,Conf)),
+ {ok, Cp1} = start_node_args(cp1, "-pa " ++ proplists:get_value(data_dir,Conf)),
wait_for_ready_net(),
%% normal exit from the application
@@ -1185,7 +1149,7 @@ otp_2718(Conf) when is_list(Conf) ->
?UNTIL(is_loaded(trans_normal, Cp1)),
{error, {{'EXIT',normal},_}} =
rpc:call(Cp1, application, start, [trans_normal, transient]),
- test_server:sleep(2000),
+ ct:sleep(2000),
false = is_started(trans_normal, Cp1),
%% abnormal exit from the application
@@ -1193,7 +1157,7 @@ otp_2718(Conf) when is_list(Conf) ->
{error, {bad_return,{{trans_abnormal_sup,start,[normal,[]]},
{'EXIT',abnormal}}}} =
rpc:call(Cp1, application, start, [trans_abnormal, transient]),
- test_server:sleep(3000),
+ ct:sleep(3000),
{badrpc,nodedown} = which_applications(Cp1),
ok.
@@ -1201,11 +1165,9 @@ otp_2718(Conf) when is_list(Conf) ->
%% Ticket: OTP-2973
%% Slogan: application:start does not test if an appl is already starting...
%%-----------------------------------------------------------------
-otp_2973(suite) -> [];
-otp_2973(doc) ->
- ["Test of two processes simultanously starting the same application."];
+%% Test of two processes simultanously starting the same application.
otp_2973(Conf) when is_list(Conf) ->
- % Write a .app file
+ %% Write a .app file
{ok, Fd} = file:open("app0.app", [write]),
w_app(Fd, app0()),
file:close(Fd),
@@ -1222,14 +1184,14 @@ otp_2973(Conf) when is_list(Conf) ->
{Pid2, res, Res2x} ->
{Res1x, Res2x}
after 2000 ->
- test_server:fail(timeout_pid2)
+ ct:fail(timeout_pid2)
end;
{Pid2, res, Res2x} ->
receive
{Pid1, res, Res1x} ->
{Res1x, Res2x}
after 2000 ->
- test_server:fail(timeout_pid1)
+ ct:fail(timeout_pid1)
end
end,
@@ -1243,11 +1205,11 @@ otp_2973(Conf) when is_list(Conf) ->
_ ->
Txt = io_lib:format("Illegal results from start: ~p ~p ",
[Res1, Res2]),
- test_server:fail(lists:flatten(Txt))
+ ct:fail(lists:flatten(Txt))
end,
- % Write a .app file
+ %% Write a .app file
{ok, Fda} = file:open("app_start_error.app", [write]),
w_app_start_error(Fda),
file:close(Fda),
@@ -1261,14 +1223,14 @@ otp_2973(Conf) when is_list(Conf) ->
{Pid2, res, Res2y} ->
{Res1y, Res2y}
after 2000 ->
- test_server:fail(timeout_pid2)
+ ct:fail(timeout_pid2)
end;
{Pid2, res, Res2y} ->
receive
{Pid1, res, Res1y} ->
{Res1y, Res2y}
after 2000 ->
- test_server:fail(timeout_pid1)
+ ct:fail(timeout_pid1)
end
end,
@@ -1278,7 +1240,7 @@ otp_2973(Conf) when is_list(Conf) ->
ok;
_ ->
Txta = io_lib:format("Illegal results from start ~p ~p ",[Res1a, Res2a]),
- test_server:fail(lists:flatten(Txta))
+ ct:fail(lists:flatten(Txta))
end,
ok.
@@ -1289,36 +1251,34 @@ otp_2973(Conf) when is_list(Conf) ->
%% Ticket: OTP-3184
%% Slogan: crash the node if permanent appl has illegal env parameter values
%%-----------------------------------------------------------------
-otp_3184(suite) -> [];
-otp_3184(doc) ->
- ["When a distributed application is started the permit flag is checked "
- "that the permit flag is not changed during the start. "
- "Te check must only be made if the application is started on the own node"];
+%% When a distributed application is started the permit flag is checked
+%% that the permit flag is not changed during the start.
+%% The check must only be made if the application is started on the own node.
otp_3184(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, Ncp2] = node_names([cp1, cp2], Conf),
NoSyncTime = config_fun_fast(config3184(NodeNames)),
WithSyncTime = config_fun(config3184(NodeNames)),
- % Test [cp1, cp2]
+ %% Test [cp1, cp2]
{ok, Cp1} = start_node_config(Ncp1, NoSyncTime, Conf),
{ok, Cp2} = start_node_config(Ncp2, WithSyncTime, Conf),
wait_for_ready_net(),
- % Start app1 and make sure it is not started
+ %% Start app1 and make sure it is not started
{[ok,ok],[]} =
rpc:multicall([Cp1, Cp2], application, load, [app1()]),
- test_server:sleep(3000),
+ ct:sleep(3000),
false = is_started(app1, Cp1),
false = is_started(app1, Cp2),
- % Start app1 on cp1
+ %% Start app1 on cp1
ok = rpc:call(Cp1, application, permit, [app1, true]),
ok = rpc:call(Cp1, application, start, [app1, permanent]),
ok = rpc:call(Cp2, application, start, [app1, permanent]),
?UNTIL(is_started(app1, Cp1)),
false = is_started(app1, Cp2),
- % Check that the application is marked as running in application_controller
+ %% Check that the application is marked as running in application_controller
X = rpc:call(Cp1, application_controller, info, []),
{value, {running, Xrunning}} = lists:keysearch(running, 1, X),
{value, Xapp1} = lists:keysearch(app1, 1, Xrunning),
@@ -1337,15 +1297,13 @@ otp_3184(Conf) when is_list(Conf) ->
%% Ticket: OTP-3002
%% Slogan: crash the node if permanent appl has illegal env parameter values
%%-----------------------------------------------------------------
-otp_3002(suite) -> [];
-otp_3002(doc) ->
- ["crash the node if permanent appl has illegal env parameter values."];
+%% crash the node if permanent appl has illegal env parameter values.
otp_3002(Conf) when is_list(Conf) ->
- % Create the boot script
+ %% Create the boot script
{{KernelVer,StdlibVer}, {LatestDir, LatestName}} =
create_script_3002("script_3002"),
- ?t:format(0, "LatestDir = ~p~n", [LatestDir]),
- ?t:format(0, "LatestName = ~p~n", [LatestName]),
+ ct:pal(?HI_VERBOSITY, "LatestDir = ~p~n", [LatestDir]),
+ ct:pal(?HI_VERBOSITY, "LatestName = ~p~n", [LatestName]),
case is_real_system(KernelVer, StdlibVer) of
true ->
@@ -1371,10 +1329,9 @@ otp_3002(Conf) when is_list(Conf) ->
%% when it received dist_ac_app_stopped).
%%-----------------------------------------------------------------
-otp_4066(suite) -> [];
-otp_4066(doc) -> ["Check that application stop don't cause dist_ac crash"];
+%% Check that application stop don't cause dist_ac crash.
otp_4066(Conf) when is_list(Conf) ->
- % Write config files
+ %% Write config files
[Ncp1, Ncp2] = node_names([cp1, cp2], Conf),
Host = from($@, atom_to_list(node())),
Cp1 = list_to_atom(Ncp1 ++ "@" ++ Host),
@@ -1382,12 +1339,12 @@ otp_4066(Conf) when is_list(Conf) ->
AllNodes = [Cp1, Cp2],
App1Nodes = {app1, AllNodes},
- Dir = ?config(priv_dir,Conf),
+ Dir = proplists:get_value(priv_dir,Conf),
{ok, FdC} = file:open(filename:join(Dir, "otp_4066.config"), [write]),
write_config(FdC, config_4066(AllNodes, 5000, [App1Nodes])),
file:close(FdC),
- % Write the app1.app file
+ %% Write the app1.app file
{ok, FdA12} = file:open(filename:join(Dir, "app1.app"), [write]),
w_app1(FdA12),
file:close(FdA12),
@@ -1402,29 +1359,29 @@ otp_4066(Conf) when is_list(Conf) ->
ok = rpc:call(Cp1, application, start, [app1]),
wait_until_started(app1, [Cp1]),
- test_server:format("--- App1 started at Cp1 ---~n", []),
+ io:format("--- App1 started at Cp1 ---~n", []),
print_dac_state(AllNodes),
- % Cp2 previously crashed on this stop
+ %% Cp2 previously crashed on this stop
ok = rpc:call(Cp1, application, stop, [app1]),
wait_until_stopped(app1, [Cp1]),
- test_server:format("--- App1 stopped at Cp1 ---~n", []),
+ io:format("--- App1 stopped at Cp1 ---~n", []),
print_dac_state(AllNodes),
ok = rpc:call(Cp1, application, start, [app1]),
wait_until_started(app1, [Cp1]),
- test_server:format("--- App1 started at Cp1 ---~n", []),
+ io:format("--- App1 started at Cp1 ---~n", []),
print_dac_state(AllNodes),
ok = rpc:call(Cp2, application, load, [app1, App1Nodes]),
ok = rpc:call(Cp2, application, start, [app1]),
- test_server:format("--- App1 started at Cp2 ---~n", []),
+ io:format("--- App1 started at Cp2 ---~n", []),
print_dac_state(AllNodes),
stop_node_nice(Cp1),
wait_until_started(app1, [Cp2]),
- test_server:format("--- Cp1 crashed; failover to Cp2 ---~n", []),
+ io:format("--- Cp1 crashed; failover to Cp2 ---~n", []),
print_dac_state(Cp2),
stop_node_nice(Cp2),
@@ -1440,7 +1397,7 @@ write_config(Fd, Config) ->
print_dac_state(Node) when is_atom(Node) ->
State = gen_server:call({dist_ac, Node}, info),
- test_server:format(" * dist_ac state on node ~p:~n ~p~n",
+ io:format(" * dist_ac state on node ~p:~n ~p~n",
[Node, State]);
print_dac_state(Nodes) when is_list(Nodes) ->
lists:foreach(fun (N) -> print_dac_state(N) end, Nodes).
@@ -1450,9 +1407,7 @@ print_dac_state(Nodes) when is_list(Nodes) ->
%% Ticket: OTP-4227
%% Slogan: Bad return value from application.
%%-----------------------------------------------------------------
-otp_4227(suite) -> [];
-otp_4227(doc) ->
- ["Test start of depending app when required app crashed."];
+%% Test start of depending app when required app crashed.
otp_4227(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, Ncp2] = node_names([cp1, cp2], Conf),
NoSyncTime = config_fun_fast(config_4227(NodeNames)),
@@ -1475,11 +1430,11 @@ otp_4227(Conf) when is_list(Conf) ->
%% Start app9 and brutally kill it, then try to start app10
ok = rpc:call(Cp1, application, start, [app9]),
- test_server:sleep(1000),
+ ct:sleep(1000),
Pid9 = rpc:call(Cp1, erlang, whereis, [ch_sup19]),
true = erlang:is_pid(Pid9),
true = erlang:exit(Pid9, kill),
- test_server:sleep(1000),
+ ct:sleep(1000),
%% This gave {error, no_report} before the patch
{error, {not_running, app9}} =
@@ -1518,7 +1473,7 @@ otp_5363(Conf) when is_list(Conf) ->
%% the code, but only that the correct processes ARE killed.
OldPath = code:get_path(),
- code:add_patha(?config(data_dir,Conf)),
+ code:add_patha(proplists:get_value(data_dir,Conf)),
try
ok = application:load(app_group_leader()),
ok = application:start(group_leader),
@@ -1532,7 +1487,7 @@ otp_5363(Conf) when is_list(Conf) ->
undefined = whereis(nisse);
Bad ->
io:format("~p\n", [Bad]),
- ?t:fail()
+ ct:fail(failed)
end
after
code:set_path(OldPath)
@@ -1543,14 +1498,12 @@ otp_5363(Conf) when is_list(Conf) ->
%% Ticket: OTP-5606
%% Slogan: Problems with starting a distributed application
%%-----------------------------------------------------------------
-otp_5606(suite) -> [];
-otp_5606(doc) ->
- ["Test of several processes simultanously starting the same "
- "distributed application."];
+%% Test of several processes simultanously starting the same
+%% distributed application.
otp_5606(Conf) when is_list(Conf) ->
%% Write a config file
- Dir = ?config(priv_dir, Conf),
+ Dir = proplists:get_value(priv_dir, Conf),
{ok, Fd} = file:open(filename:join(Dir, "sys.config"), [write]),
NodeNames = [Ncp1, Ncp2] = node_names([cp1, cp2], Conf),
(config4(NodeNames))(Fd, 10000),
@@ -1586,7 +1539,7 @@ otp_5606(Conf) when is_list(Conf) ->
[Res1, Res2, Res3, Res4] ->
Txt = io_lib:format("Illegal results from start ~p ~p ~p ~p",
[Res1, Res2, Res3, Res4]),
- test_server:fail(lists:flatten(Txt))
+ ct:fail(lists:flatten(Txt))
end,
{error, {already_started, app1}} =
@@ -1601,7 +1554,7 @@ otp_5606_loop(ResL) when length(ResL)<4 ->
{_Pid, Res} ->
otp_5606_loop([Res|ResL])
after 5000 ->
- test_server:fail(timeout_waiting_for_res)
+ ct:fail(timeout_waiting_for_res)
end;
otp_5606_loop(ResL) ->
ResL.
@@ -1613,9 +1566,7 @@ loop5606(Pid) ->
Pid ! {self(), Res}
end.
-get_env(suite) -> [];
-get_env(doc) ->
- ["Tests get_env/* functions"];
+%% Tests get_env/* functions.
get_env(Conf) when is_list(Conf) ->
{ok, _} = application:get_env(kernel, error_logger),
undefined = application:get_env(undefined_app, a),
@@ -1627,14 +1578,12 @@ get_env(Conf) when is_list(Conf) ->
%% Should be started in a CC view with:
%% erl -sname XXX -rsh ctrsh where XX not in [cp1, cp2, cp3]
%%-----------------------------------------------------------------
-get_key(suite) -> [];
-get_key(doc) ->
- ["Tests read the .app keys."];
+%% Tests read the .app keys.
get_key(Conf) when is_list(Conf) ->
NodeNames = [Ncp1, _Ncp2, _Ncp3] = node_names([cp1, cp2, cp3], Conf),
WithSyncTime = config_fun(config_inc(NodeNames)),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_config(Ncp1, WithSyncTime, Conf),
ok = rpc:call(Cp1, application, load, [appinc(), d3(NodeNames)]),
@@ -1731,8 +1680,7 @@ get_key(Conf) when is_list(Conf) ->
%%% Testing of change of distributed parameter.
%%%-----------------------------------------------------------------
-distr_changed_tc1(suite) -> [];
-distr_changed_tc1(doc) -> ["Test change of distributed parameter."];
+%% Test change of distributed parameter.
distr_changed_tc1(Conf) when is_list(Conf) ->
{OldKernel, OldEnv, {Cp1, Cp2, Cp3}, {_Ncp1, _Ncp2, _Ncp3}, _Config2} =
@@ -1757,7 +1705,7 @@ distr_changed_tc1(Conf) when is_list(Conf) ->
rpc:multicall([Cp1, Cp2, Cp3],
application_controller, config_change, [OldEnv]),
- test_server:sleep(7000),
+ ct:sleep(7000),
DcInfo1 = rpc:call(Cp1, dist_ac, info, []),
DcInfo2 = rpc:call(Cp2, dist_ac, info, []),
@@ -1778,7 +1726,7 @@ distr_changed_tc1(Conf) when is_list(Conf) ->
ok;
EWa1 ->
X1 = io_lib:format("distribution error: Cp1 ~p ",[EWa1]),
- test_server:fail(lists:flatten(X1))
+ ct:fail(lists:flatten(X1))
end,
case lists:sort(Wa2) of
@@ -1786,7 +1734,7 @@ distr_changed_tc1(Conf) when is_list(Conf) ->
ok;
EWa2 ->
X2 = io_lib:format("distribution error: Cp2 ~p ",[EWa2]),
- test_server:fail(lists:flatten(X2))
+ ct:fail(lists:flatten(X2))
end,
case lists:sort(Wa3) of
@@ -1794,7 +1742,7 @@ distr_changed_tc1(Conf) when is_list(Conf) ->
ok;
EWa3 ->
X3 = io_lib:format("distribution error: Cp3 ~p ",[EWa3]),
- test_server:fail(lists:flatten(X3))
+ ct:fail(lists:flatten(X3))
end,
DcInfo1n = rpc:call(Cp1, dist_ac, info, []),
@@ -1816,9 +1764,7 @@ distr_changed_tc1(Conf) when is_list(Conf) ->
ok.
-distr_changed_tc2(suite) -> [];
-distr_changed_tc2(doc) -> ["Test change of distributed parameter, "
- "move appls by crashing a node."];
+%% Test change of distributed parameter, move appls by crashing a node.
distr_changed_tc2(Conf) when is_list(Conf) ->
{OldKernel, OldEnv, {Cp1, Cp2, Cp3}, {Ncp1, _Ncp2, _Ncp3}, Config2} =
@@ -1843,21 +1789,16 @@ distr_changed_tc2(Conf) when is_list(Conf) ->
rpc:multicall([Cp1, Cp2, Cp3],
application_controller, config_change, [OldEnv]),
- test_server:sleep(4000),
+ ct:sleep(4000),
stop_node_nice(Cp1),
- test_server:sleep(10000),
+ ct:sleep(10000),
-% _DcInfo1 = rpc:call(Cp1, dist_ac, info, []),
_DcInfo2 = rpc:call(Cp2, dist_ac, info, []),
_DcInfo3 = rpc:call(Cp3, dist_ac, info, []),
-% ?t:format(0,"#### DcInfo1 ~n~p~n",[_DcInfo1]),
-% DcWa1 = which_applications(Cp1),
DcWa2 = which_applications(Cp2),
DcWa3 = which_applications(Cp3),
-% Wa1 = lists:foldl(fun({A1, _N1, _V1}, AccIn) -> [A1 | AccIn] end,
-% [], DcWa1),
Wa2 = lists:foldl(fun({A2, _N2, _V2}, AccIn) -> [A2 | AccIn] end,
[], DcWa2),
Wa3 = lists:foldl(fun({A3, _N3, _V3}, AccIn) -> [A3 | AccIn] end,
@@ -1869,7 +1810,7 @@ distr_changed_tc2(Conf) when is_list(Conf) ->
ok;
EWa2 ->
X2 = io_lib:format("distribution error: Cp2 ~p ",[EWa2]),
- test_server:fail(lists:flatten(X2))
+ ct:fail(lists:flatten(X2))
end,
case lists:sort(Wa3) of
@@ -1877,12 +1818,12 @@ distr_changed_tc2(Conf) when is_list(Conf) ->
ok;
EWa3 ->
X3 = io_lib:format("distribution error: Cp3 ~p ",[EWa3]),
- test_server:fail(lists:flatten(X3))
+ ct:fail(lists:flatten(X3))
end,
{ok, Cp1} = start_node_boot(Ncp1, Config2, dc),
- test_server:sleep(10000),
+ ct:sleep(10000),
_DcInfo1rs = rpc:call(Cp1, dist_ac, info, []),
_DcInfo2rs = rpc:call(Cp2, dist_ac, info, []),
@@ -1904,7 +1845,7 @@ distr_changed_tc2(Conf) when is_list(Conf) ->
ok;
EWa1rs ->
X1rs = io_lib:format("distribution error: Cp1 ~p ",[EWa1rs]),
- test_server:fail(lists:flatten(X1rs))
+ ct:fail(lists:flatten(X1rs))
end,
case lists:sort(Wa2rs) of
@@ -1912,7 +1853,7 @@ distr_changed_tc2(Conf) when is_list(Conf) ->
ok;
EWa2rs ->
X2rs = io_lib:format("distribution error: Cp2 ~p ",[EWa2rs]),
- test_server:fail(lists:flatten(X2rs))
+ ct:fail(lists:flatten(X2rs))
end,
case lists:sort(Wa3rs) of
@@ -1920,7 +1861,7 @@ distr_changed_tc2(Conf) when is_list(Conf) ->
ok;
EWa3rs ->
X3rs = io_lib:format("distribution error: Cp3 ~p ",[EWa3rs]),
- test_server:fail(lists:flatten(X3rs))
+ ct:fail(lists:flatten(X3rs))
end,
@@ -1939,15 +1880,12 @@ distr_changed_tc2(Conf) when is_list(Conf) ->
%%%-----------------------------------------------------------------
%%% Testing of application configuration change
%%%-----------------------------------------------------------------
-config_change(suite) ->
- [];
-config_change(doc) ->
- ["Test change of application configuration"];
+%% Test change of application configuration.
config_change(Conf) when is_list(Conf) ->
%% Change to data_dir
{ok, CWD} = file:get_cwd(),
- DataDir = ?config(data_dir, Conf),
+ DataDir = proplists:get_value(data_dir, Conf),
ok = file:set_cwd(DataDir),
%% Find out application data from boot script
@@ -2009,10 +1947,7 @@ get_appls([], Res) ->
Res.
-persistent_env(suite) ->
- [];
-persistent_env(doc) ->
- ["Test set_env/4 and unset_env/3 with persistent true"];
+%% Test set_env/4 and unset_env/3 with persistent true.
persistent_env(Conf) when is_list(Conf) ->
ok = application:set_env(appinc, own2, persist, [{persistent, true}]),
ok = application:set_env(appinc, key1, persist, [{persistent, true}]),
@@ -2056,10 +1991,7 @@ persistent_env(Conf) when is_list(Conf) ->
%%%-----------------------------------------------------------------
%%% Tests the 'shutdown_func' kernel config parameter
%%%-----------------------------------------------------------------
-shutdown_func(suite) ->
- [];
-shutdown_func(doc) ->
- ["Tests the 'shutdown_func' kernel config parameter"];
+%% Tests the 'shutdown_func' kernel config parameter.
shutdown_func(Config) when is_list(Config) ->
{ok,Cp1} = start_node(?MODULE_STRING++"_shutdown_func"),
wait_for_ready_net(),
@@ -2077,10 +2009,10 @@ shutdown_func(Config) when is_list(Config) ->
{'DOWN', Mref, _, Pid, noconnection} ->
ok
after 10000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end
after 10000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end.
@@ -2098,7 +2030,7 @@ do_shutdown(Reason) ->
%%% Tests the 'shutdown_timeout' kernel config parameter
%%%-----------------------------------------------------------------
shutdown_timeout(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
{ok,Cp1} = start_node(?MODULE_STRING++"_shutdown_timeout"),
wait_for_ready_net(),
ok = rpc:call(Cp1, application, set_env, [kernel, shutdown_timeout, 1000]),
@@ -2121,7 +2053,7 @@ shutdown_timeout(Config) when is_list(Config) ->
%%% Provokes a (previous) application shutdown deadlock
%%%-----------------------------------------------------------------
shutdown_deadlock(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
code:add_path(filename:join([DataDir,deadlock])),
%% ok = rpc:call(Cp1, application, start, [sasl]),
ok = application:start(deadlock),
@@ -2596,7 +2528,7 @@ is_started(Name, Node) ->
false -> false
end.
-% Waits until application Name is started on at least one node.
+%% Waits until application Name is started on at least one node.
wait_until_started(Name, Nodes) ->
case lists:member(true,
lists:map(fun (N) ->
@@ -2606,11 +2538,11 @@ wait_until_started(Name, Nodes) ->
true ->
true;
false ->
- test_server:sleep(500),
+ ct:sleep(500),
wait_until_started(Name, Nodes)
end.
-% Waits until application Name is stopped on all nodes.
+%% Waits until application Name is stopped on all nodes.
wait_until_stopped(Name, Nodes) ->
case lists:member(true,
lists:map(fun (N) ->
@@ -2620,7 +2552,7 @@ wait_until_stopped(Name, Nodes) ->
false ->
true;
true ->
- test_server:sleep(500),
+ ct:sleep(500),
wait_until_stopped(Name, Nodes)
end.
@@ -2662,13 +2594,13 @@ start_node_args(Name, Args) ->
start_node_boot_3002(Name, Boot) ->
Pa = filename:dirname(code:which(?MODULE)),
- ?t:format(0, "start_node_boot ~p~n",
- [" -pa " ++ Pa ++ " -env ERL_CRASH_DUMP erl_crash_dump." ++
- atom_to_list(Name) ++ " -boot " ++ Boot ++
- " -sasl dummy \"missing "]),
+ ct:pal(?HI_VERBOSITY, "start_node_boot ~p~n",
+ [" -pa " ++ Pa ++ " -env ERL_CRASH_DUMP erl_crash_dump." ++
+ atom_to_list(Name) ++ " -boot " ++ Boot ++
+ " -sasl dummy \"missing "]),
test_server:start_node(Name, slave,
[{args, " -pa " ++ Pa ++
- " -env ERL_CRASH_DUMP erl_crash_dump." ++
+ " -env ERL_CRASH_DUMP erl_crash_dump." ++
atom_to_list(Name) ++ " -boot " ++ Boot ++
" -sasl dummy \"missing "}]).
@@ -2678,18 +2610,20 @@ start_node_boot_config(Name, SysConfigFun, Conf, Boot) ->
start_node_boot(Name, Config, Boot) ->
Pa = filename:dirname(code:which(?MODULE)),
- ?t:format(0, "start_node_boot ~p~n",[" -pa " ++ Pa ++ " -config " ++ Config ++
- " -boot " ++ atom_to_list(Boot)]),
- test_server:start_node(Name, slave, [{args, " -pa " ++ Pa ++ " -config " ++ Config ++
- " -boot " ++ atom_to_list(Boot)}]).
+ ct:pal(?HI_VERBOSITY,
+ "start_node_boot ~p~n",[" -pa " ++ Pa ++ " -config " ++ Config ++
+ " -boot " ++ atom_to_list(Boot)]),
+ test_server:start_node(Name, slave,
+ [{args, " -pa " ++ Pa ++ " -config " ++ Config ++
+ " -boot " ++ atom_to_list(Boot)}]).
start_node_config_sf(Name, SysConfigFun, Conf) ->
ConfigFile = write_config_file(SysConfigFun, Conf),
- DataDir = ?config(data_dir, Conf), % is it used?
+ DataDir = proplists:get_value(data_dir, Conf), % is it used?
start_node(Name, ConfigFile, " -pa " ++ DataDir).
write_config_file(SysConfigFun, Conf) ->
- Dir = ?config(priv_dir, Conf),
+ Dir = proplists:get_value(priv_dir, Conf),
{ok, Fd} = file:open(filename:join(Dir, "sys.config"), [write]),
SysConfigFun(Fd),
file:close(Fd),
@@ -2713,8 +2647,8 @@ get_start_type(Expected) ->
get_start_type(Expected, 30*5, #st{}).
get_start_type(_Expected, 0, Ack) ->
- test_server:format("====== ~p ======~n", [Ack]),
- test_server:fail(not_valid_start_type);
+ io:format("====== ~p ======~n", [Ack]),
+ ct:fail(not_valid_start_type);
get_start_type(Expected, Times, Ack0) ->
#st{normal = N0, local = L0, takeover = T0, failover = F0} = Ack0,
global:send(st_type, {st, read, self()}),
@@ -2760,13 +2694,13 @@ get_start_phase(Expected) ->
Expected ->
ok;
{sp, T1, I1, So1, Sp1, G1} ->
- test_server:format("=============== {sp,T,I,So,Sp,G} ~p ~n",[" "]),
- test_server:format("=========== got ~p ~n",
+ io:format("=============== {sp,T,I,So,Sp,G} ~p ~n",[" "]),
+ io:format("=========== got ~p ~n",
[{sp, T1, I1, So1, Sp1, G1}]),
- test_server:format("====== expected ~p ~n", [Expected]),
- test_server:fail(not_valid_start_phase)
+ io:format("====== expected ~p ~n", [Expected]),
+ ct:fail(not_valid_start_phase)
after 5000 ->
- test_server:fail(not_valid_start_phase)
+ ct:fail(not_valid_start_phase)
end.
start_phase() ->
@@ -2797,10 +2731,10 @@ get_conf_change(Expected) ->
{cc, Expected} ->
ok;
{cc, List} ->
- test_server:format("====== ~p ======~n",[{cc, List}]),
- test_server:fail(not_valid_conf_change)
+ io:format("====== ~p ======~n",[{cc, List}]),
+ ct:fail(not_valid_conf_change)
after 5000 ->
- test_server:fail(not_valid_conf_change_to)
+ ct:fail(not_valid_conf_change_to)
end.
conf_change() ->
@@ -2896,7 +2830,7 @@ create_script_3002(ScriptName) ->
distr_changed_prep(Conf) when is_list(Conf) ->
- % Write .app files
+ %% Write .app files
{ok, Fd1} = file:open("app1.app", [write]),
w_app1(Fd1),
file:close(Fd1),
@@ -2917,7 +2851,7 @@ distr_changed_prep(Conf) when is_list(Conf) ->
file:close(Fd6),
- % Create the .app files and the boot script
+ %% Create the .app files and the boot script
{{KernelVer,StdlibVer}, _} = create_script_dc("dc"),
case is_real_system(KernelVer, StdlibVer) of
@@ -2933,13 +2867,13 @@ distr_changed_prep(Conf) when is_list(Conf) ->
NoSyncTime = config_fun_fast(config_dc(NodeNames)),
WithSyncTime = config_fun(config_dc(NodeNames)),
- Dir = ?config(priv_dir,Conf),
+ Dir = proplists:get_value(priv_dir,Conf),
{ok, Fd_dc2} = file:open(filename:join(Dir, "sys2.config"), [write]),
(config_dc2(NodeNames))(Fd_dc2),
file:close(Fd_dc2),
Config2 = filename:join(Dir, "sys2"),
- % Test [cp1, cp2, cp3]
+ %% Test [cp1, cp2, cp3]
{ok, Cp1} = start_node_boot_config(Ncp1, NoSyncTime, Conf, dc),
{ok, Cp2} = start_node_boot_config(Ncp2, NoSyncTime, Conf, dc),
{ok, Cp3} = start_node_boot_config(Ncp3, WithSyncTime, Conf, dc),
diff --git a/lib/kernel/test/application_SUITE_data/app_start_error.erl b/lib/kernel/test/application_SUITE_data/app_start_error.erl
index 531a10d442..aedcb537d8 100644
--- a/lib/kernel/test/application_SUITE_data/app_start_error.erl
+++ b/lib/kernel/test/application_SUITE_data/app_start_error.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/application_SUITE_data/group_leader.erl b/lib/kernel/test/application_SUITE_data/group_leader.erl
index e791437272..f18cef179b 100644
--- a/lib/kernel/test/application_SUITE_data/group_leader.erl
+++ b/lib/kernel/test/application_SUITE_data/group_leader.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/application_SUITE_data/group_leader_sup.erl b/lib/kernel/test/application_SUITE_data/group_leader_sup.erl
index ade8de8470..6e0df632c3 100644
--- a/lib/kernel/test/application_SUITE_data/group_leader_sup.erl
+++ b/lib/kernel/test/application_SUITE_data/group_leader_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/application_SUITE_data/trans_abnormal_sup.erl b/lib/kernel/test/application_SUITE_data/trans_abnormal_sup.erl
index 98d7e90235..bc2bf84089 100644
--- a/lib/kernel/test/application_SUITE_data/trans_abnormal_sup.erl
+++ b/lib/kernel/test/application_SUITE_data/trans_abnormal_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/application_SUITE_data/trans_normal_sup.erl b/lib/kernel/test/application_SUITE_data/trans_normal_sup.erl
index 233a79d8c3..c839888e39 100644
--- a/lib/kernel/test/application_SUITE_data/trans_normal_sup.erl
+++ b/lib/kernel/test/application_SUITE_data/trans_normal_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/application_SUITE_data/transient.erl b/lib/kernel/test/application_SUITE_data/transient.erl
index a58bc4600e..83cdacf673 100644
--- a/lib/kernel/test/application_SUITE_data/transient.erl
+++ b/lib/kernel/test/application_SUITE_data/transient.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/bif_SUITE.erl b/lib/kernel/test/bif_SUITE.erl
index dd3010567a..2369dd8b71 100644
--- a/lib/kernel/test/bif_SUITE.erl
+++ b/lib/kernel/test/bif_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,36 +22,33 @@
init_per_group/2,end_per_group/2]).
-export([
- spawn1/1, spawn2/1, spawn3/1, spawn4/1,
+ spawn1/1, spawn2/1, spawn3/1, spawn4/1,
-
- spawn_link1/1, spawn_link2/1, spawn_link3/1, spawn_link4/1,
-
- spawn_opt2/1, spawn_opt3/1, spawn_opt4/1, spawn_opt5/1,
+ spawn_link1/1, spawn_link2/1, spawn_link3/1, spawn_link4/1,
- spawn_failures/1,
- run_fun/1,
- decode_packet_delim/1,
- wilderness/1]).
+ spawn_opt2/1, spawn_opt3/1, spawn_opt4/1, spawn_opt5/1,
--export([init_per_testcase/2, end_per_testcase/2]).
+ spawn_failures/1,
+
+ run_fun/1,
+ decode_packet_delim/1,
+ wilderness/1]).
--include_lib("test_server/include/test_server.hrl").
+-export([init_per_testcase/2, end_per_testcase/2]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
+-include_lib("common_test/include/ct.hrl").
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[{group, spawn_tests}, {group, spawn_link_tests},
@@ -77,360 +74,333 @@ end_per_group(_GroupName, Config) ->
Config.
-spawn1(doc) -> ["Test spawn/1"];
-spawn1(suite) ->
- [];
+%% Test spawn/1.
spawn1(Config) when is_list(Config) ->
- ?line Node = node(),
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
-
- % spawn
- ?line P = spawn(fun() -> Parent ! {self(), fetch_proc_vals(self())} end),
- ?line receive
- {P, PV} ->
- ?line Node = node(P),
- ?line check_proc_vals(false, normal, FA, 0, PV)
- end,
+ Node = node(),
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+
+ %% spawn
+ P = spawn(fun() -> Parent ! {self(), fetch_proc_vals(self())} end),
+ receive
+ {P, PV} ->
+ Node = node(P),
+ check_proc_vals(false, normal, FA, 0, PV)
+ end,
ok.
-spawn2(doc) -> ["Test spawn/2"];
-spawn2(suite) ->
- [];
+%% Test spawn/2.
spawn2(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(spawn2),
+ {ok, Node} = start_node(spawn2),
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
- % spawn_link
- ?line P = spawn(Node,
- fun() -> Parent ! {self(), fetch_proc_vals(self())} end),
- ?line receive
- {P, PV} ->
- ?line Node = node(P),
- ?line check_proc_vals(false, normal, FA, 0, PV)
- end,
+ %% spawn_link
+ P = spawn(Node,
+ fun() -> Parent ! {self(), fetch_proc_vals(self())} end),
+ receive
+ {P, PV} ->
+ Node = node(P),
+ check_proc_vals(false, normal, FA, 0, PV)
+ end,
- ?line true = stop_node(Node),
+ true = stop_node(Node),
ok.
-spawn3(doc) -> ["Test spawn/3"];
-spawn3(suite) ->
- [];
+%% Test spawn/3.
spawn3(Config) when is_list(Config) ->
- ?line Node = node(),
-
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
-
- % spawn_link
- ?line P = spawn(?MODULE,
- run_fun,
- [fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end]),
- ?line receive
- {P, PV} ->
- ?line Node = node(P),
- ?line check_proc_vals(false, normal, FA, 0, PV)
- end,
+ Node = node(),
+
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+
+ %% spawn_link
+ P = spawn(?MODULE,
+ run_fun,
+ [fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end]),
+ receive
+ {P, PV} ->
+ Node = node(P),
+ check_proc_vals(false, normal, FA, 0, PV)
+ end,
ok.
-spawn4(doc) -> ["Test spawn/4"];
-spawn4(suite) ->
- [];
+%% Test spawn/4.
spawn4(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(spawn4),
-
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
-
- % spawn_link
- ?line P = spawn(Node,
- ?MODULE,
- run_fun,
- [fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end]),
- ?line receive
- {P, PV} ->
- ?line Node = node(P),
- ?line check_proc_vals(false, normal, FA, 0, PV)
- end,
-
- ?line true = stop_node(Node),
+ {ok, Node} = start_node(spawn4),
+
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+
+ %% spawn_link
+ P = spawn(Node,
+ ?MODULE,
+ run_fun,
+ [fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end]),
+ receive
+ {P, PV} ->
+ Node = node(P),
+ check_proc_vals(false, normal, FA, 0, PV)
+ end,
+
+ true = stop_node(Node),
ok.
-spawn_link1(doc) -> ["Test spawn_link/1"];
-spawn_link1(suite) ->
- [];
+%% Test spawn_link/1.
spawn_link1(Config) when is_list(Config) ->
- ?line Node = node(),
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
-
- % spawn_link
- ?line P = spawn_link(fun() -> Parent ! {self(), fetch_proc_vals(self())} end),
- ?line receive
- {P, PV} ->
- ?line Node = node(P),
- ?line check_proc_vals(true, normal, FA, 0, PV)
- end,
+ Node = node(),
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+
+ %% spawn_link
+ P = spawn_link(fun() -> Parent ! {self(), fetch_proc_vals(self())} end),
+ receive
+ {P, PV} ->
+ Node = node(P),
+ check_proc_vals(true, normal, FA, 0, PV)
+ end,
ok.
-spawn_link2(doc) -> ["Test spawn_link/2"];
-spawn_link2(suite) ->
- [];
+%% Test spawn_link/2.
spawn_link2(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(spawn_link2),
+ {ok, Node} = start_node(spawn_link2),
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
- % spawn_link
- ?line P = spawn_link(Node,
- fun() -> Parent ! {self(), fetch_proc_vals(self())} end),
- ?line receive
- {P, PV} ->
- ?line Node = node(P),
- ?line check_proc_vals(true, normal, FA, 0, PV)
- end,
+ %% spawn_link
+ P = spawn_link(Node,
+ fun() -> Parent ! {self(), fetch_proc_vals(self())} end),
+ receive
+ {P, PV} ->
+ Node = node(P),
+ check_proc_vals(true, normal, FA, 0, PV)
+ end,
- ?line true = stop_node(Node),
+ true = stop_node(Node),
ok.
-spawn_link3(doc) -> ["Test spawn_link/3"];
-spawn_link3(suite) ->
- [];
+%% Test spawn_link/3.
spawn_link3(Config) when is_list(Config) ->
- ?line Node = node(),
-
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
-
- % spawn_link
- ?line P = spawn_link(?MODULE,
- run_fun,
- [fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end]),
- ?line receive
- {P, PV} ->
- ?line Node = node(P),
- ?line check_proc_vals(true, normal, FA, 0, PV)
- end,
+ Node = node(),
+
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+
+ %% spawn_link
+ P = spawn_link(?MODULE,
+ run_fun,
+ [fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end]),
+ receive
+ {P, PV} ->
+ Node = node(P),
+ check_proc_vals(true, normal, FA, 0, PV)
+ end,
ok.
-spawn_link4(doc) -> ["Test spawn_link/4"];
-spawn_link4(suite) ->
- [];
+%% Test spawn_link/4.
spawn_link4(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(spawn_link4),
-
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
-
- % spawn_link
- ?line P = spawn_link(Node,
- ?MODULE,
- run_fun,
- [fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end]),
- ?line receive
- {P, PV} ->
- ?line Node = node(P),
- ?line check_proc_vals(true, normal, FA, 0, PV)
- end,
-
- ?line true = stop_node(Node),
+ {ok, Node} = start_node(spawn_link4),
+
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+
+ %% spawn_link
+ P = spawn_link(Node,
+ ?MODULE,
+ run_fun,
+ [fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end]),
+ receive
+ {P, PV} ->
+ Node = node(P),
+ check_proc_vals(true, normal, FA, 0, PV)
+ end,
+
+ true = stop_node(Node),
ok.
-spawn_opt2(doc) -> ["Test spawn_opt/2"];
-spawn_opt2(suite) ->
- [];
+%% Test spawn_opt/2.
spawn_opt2(Config) when is_list(Config) ->
- ?line Node = node(),
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
-
- ?line P1 = spawn_opt(fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end,
- [{fullsweep_after, 0},{min_heap_size, 1000},
- link, {priority, max}]),
- ?line receive
- {P1, PV1} ->
- ?line Node = node(P1),
- ?line check_proc_vals(true, max, 0, 1000, PV1)
- end,
- ?line P2 = spawn_opt(fun() -> Parent ! {self(), fetch_proc_vals(self())} end,
- [{min_heap_size, 10}]),
- ?line receive
- {P2, PV2} ->
- ?line Node = node(P2),
- ?line check_proc_vals(false, normal, FA, 10, PV2)
- end,
+ Node = node(),
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+
+ P1 = spawn_opt(fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end,
+ [{fullsweep_after, 0},{min_heap_size, 1000},
+ link, {priority, max}]),
+ receive
+ {P1, PV1} ->
+ Node = node(P1),
+ check_proc_vals(true, max, 0, 1000, PV1)
+ end,
+ P2 = spawn_opt(fun() -> Parent ! {self(), fetch_proc_vals(self())} end,
+ [{min_heap_size, 10}]),
+ receive
+ {P2, PV2} ->
+ Node = node(P2),
+ check_proc_vals(false, normal, FA, 10, PV2)
+ end,
ok.
-spawn_opt3(doc) -> ["Test spawn_opt/3"];
-spawn_opt3(suite) ->
- [];
+%% Test spawn_opt/3.
spawn_opt3(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(spawn_opt3),
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
- ?line P1 = spawn_opt(Node,
- fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end,
- [{fullsweep_after,0}, {min_heap_size,1000},
- link, {priority, max}]),
- ?line receive
- {P1, PV1} ->
- ?line Node = node(P1),
- ?line check_proc_vals(true, max, 0, 1000, PV1)
- end,
- ?line P2 = spawn_opt(Node,
- fun() -> Parent ! {self(), fetch_proc_vals(self())} end,
- [{min_heap_size, 10}]),
- ?line receive
- {P2, PV2} ->
- ?line Node = node(P2),
- ?line check_proc_vals(false, normal, FA, 10, PV2)
- end,
- ?line true = stop_node(Node),
+ {ok, Node} = start_node(spawn_opt3),
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+ P1 = spawn_opt(Node,
+ fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end,
+ [{fullsweep_after,0}, {min_heap_size,1000},
+ link, {priority, max}]),
+ receive
+ {P1, PV1} ->
+ Node = node(P1),
+ check_proc_vals(true, max, 0, 1000, PV1)
+ end,
+ P2 = spawn_opt(Node,
+ fun() -> Parent ! {self(), fetch_proc_vals(self())} end,
+ [{min_heap_size, 10}]),
+ receive
+ {P2, PV2} ->
+ Node = node(P2),
+ check_proc_vals(false, normal, FA, 10, PV2)
+ end,
+ true = stop_node(Node),
ok.
-spawn_opt4(doc) -> ["Test spawn_opt/4"];
-spawn_opt4(suite) ->
- [];
+%% Test spawn_opt/4.
spawn_opt4(Config) when is_list(Config) ->
- ?line Node = node(),
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
- ?line P1 = spawn_opt(?MODULE,
- run_fun,
- [fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end],
- [{fullsweep_after,0}, {min_heap_size,1000},
- link, {priority, max}]),
- ?line receive
- {P1, PV1} ->
- ?line Node = node(P1),
- ?line check_proc_vals(true, max, 0, 1000, PV1)
- end,
- ?line P2 = spawn_opt(?MODULE,
- run_fun,
- [fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end],
- [{min_heap_size, 10}]),
- ?line receive
- {P2, PV2} ->
- ?line Node = node(P2),
- ?line check_proc_vals(false, normal, FA, 10, PV2)
- end,
+ Node = node(),
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+ P1 = spawn_opt(?MODULE,
+ run_fun,
+ [fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end],
+ [{fullsweep_after,0}, {min_heap_size,1000},
+ link, {priority, max}]),
+ receive
+ {P1, PV1} ->
+ Node = node(P1),
+ check_proc_vals(true, max, 0, 1000, PV1)
+ end,
+ P2 = spawn_opt(?MODULE,
+ run_fun,
+ [fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end],
+ [{min_heap_size, 10}]),
+ receive
+ {P2, PV2} ->
+ Node = node(P2),
+ check_proc_vals(false, normal, FA, 10, PV2)
+ end,
ok.
-spawn_opt5(doc) -> ["Test spawn_opt/5"];
-spawn_opt5(suite) ->
- [];
+%% Test spawn_opt/5.
spawn_opt5(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(spawn_opt5),
- ?line Parent = self(),
- ?line {_, _, FA, _} = fetch_proc_vals(self()),
- ?line P1 = spawn_opt(Node,
- ?MODULE,
- run_fun,
- [fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end],
- [{fullsweep_after,0}, {min_heap_size,1000},
- link, {priority, max}]),
- ?line receive
- {P1, PV1} ->
- ?line Node = node(P1),
- ?line check_proc_vals(true, max, 0, 1000, PV1)
- end,
- ?line P2 = spawn_opt(Node,
- ?MODULE,
- run_fun,
- [fun() ->
- Parent ! {self(), fetch_proc_vals(self())}
- end],
- [{min_heap_size, 10}]),
- ?line receive
- {P2, PV2} ->
- ?line Node = node(P2),
- ?line check_proc_vals(false, normal, FA, 10, PV2)
- end,
- ?line true = stop_node(Node),
+ {ok, Node} = start_node(spawn_opt5),
+ Parent = self(),
+ {_, _, FA, _} = fetch_proc_vals(self()),
+ P1 = spawn_opt(Node,
+ ?MODULE,
+ run_fun,
+ [fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end],
+ [{fullsweep_after,0}, {min_heap_size,1000},
+ link, {priority, max}]),
+ receive
+ {P1, PV1} ->
+ Node = node(P1),
+ check_proc_vals(true, max, 0, 1000, PV1)
+ end,
+ P2 = spawn_opt(Node,
+ ?MODULE,
+ run_fun,
+ [fun() ->
+ Parent ! {self(), fetch_proc_vals(self())}
+ end],
+ [{min_heap_size, 10}]),
+ receive
+ {P2, PV2} ->
+ Node = node(P2),
+ check_proc_vals(false, normal, FA, 10, PV2)
+ end,
+ true = stop_node(Node),
ok.
-spawn_failures(doc) ->
- ["Test failure behavior of spawn bifs"];
-spawn_failures(suite) ->
- [];
+%% Test failure behavior of spawn bifs.
spawn_failures(Config) when is_list(Config) ->
- ?line ThisNode = node(),
- ?line {ok, Node} = start_node(spawn_remote_failure),
-
- % unknown nodes
- test_server:format("Testing unknown nodes~n", []),
- ?line CrashPid1 = (catch spawn_opt('unknown@node',
- erlang,
- nodes,
- [],
- [])),
- ?line true = is_pid(CrashPid1),
- ?line ThisNode = node(CrashPid1),
- ?line CrashPid2 = (catch spawn_opt('unknown@node',
- fun () -> erlang:nodes() end,
- [])),
- ?line true = is_pid(CrashPid2),
- ?line ThisNode = node(CrashPid2),
-
- ?line CrashPid3 = (catch spawn('unknown@node',
- erlang,
- nodes,
- [])),
- ?line true = is_pid(CrashPid3),
- ?line ThisNode = node(CrashPid3),
- ?line CrashPid4 = (catch spawn('unknown@node',
- fun () -> erlang:nodes() end)),
- ?line true = is_pid(CrashPid4),
- ?line ThisNode = node(CrashPid4),
-
- ?line OTE = process_flag(trap_exit,true),
- ?line CrashPid5 = (catch spawn_link('unknown@node',
- erlang,
- nodes,
- [])),
+ ThisNode = node(),
+ {ok, Node} = start_node(spawn_remote_failure),
+
+ %% unknown nodes
+ io:format("Testing unknown nodes~n", []),
+ CrashPid1 = (catch spawn_opt('unknown@node',
+ erlang,
+ nodes,
+ [],
+ [])),
+ true = is_pid(CrashPid1),
+ ThisNode = node(CrashPid1),
+ CrashPid2 = (catch spawn_opt('unknown@node',
+ fun () -> erlang:nodes() end,
+ [])),
+ true = is_pid(CrashPid2),
+ ThisNode = node(CrashPid2),
+
+ CrashPid3 = (catch spawn('unknown@node',
+ erlang,
+ nodes,
+ [])),
+ true = is_pid(CrashPid3),
+ ThisNode = node(CrashPid3),
+ CrashPid4 = (catch spawn('unknown@node',
+ fun () -> erlang:nodes() end)),
+ true = is_pid(CrashPid4),
+ ThisNode = node(CrashPid4),
+
+ OTE = process_flag(trap_exit,true),
+ CrashPid5 = (catch spawn_link('unknown@node',
+ erlang,
+ nodes,
+ [])),
receive
{'EXIT', CrashPid5, noconnection} ->
- ?line true = is_pid(CrashPid5),
- ?line ThisNode = node(CrashPid5)
+ true = is_pid(CrashPid5),
+ ThisNode = node(CrashPid5)
end,
- ?line CrashPid6 = (catch spawn_link('unknown@node',
- fun () -> erlang:nodes() end)),
+ CrashPid6 = (catch spawn_link('unknown@node',
+ fun () -> erlang:nodes() end)),
receive
{'EXIT', CrashPid6, noconnection} ->
- ?line true = is_pid(CrashPid6),
- ?line ThisNode = node(CrashPid6)
+ true = is_pid(CrashPid6),
+ ThisNode = node(CrashPid6)
end,
process_flag(trap_exit,OTE),
case OTE of
false ->
receive
{'EXIT', P, R} ->
- ?line test_server:fail({'EXIT', P, R})
+ ct:fail({'EXIT', P, R})
after 0 ->
ok
end;
@@ -438,132 +408,125 @@ spawn_failures(Config) when is_list(Config) ->
ok
end,
- % bad node
- test_server:format("Testing bad nodes~n", []),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt("Node",erlang,nodes,[],[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt("Node",
- fun () ->
- erlang:nodes()
- end,
- [])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link("Node",
- fun () ->
- erlang:nodes()
- end)),
- ?line {'EXIT', {badarg, _}} = (catch spawn("Node",erlang,nodes,[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn("Node",
- fun () ->
- erlang:nodes()
- end)),
-
- % bad module
- test_server:format("Testing bad modules~n", []),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(Node,"erlang",nodes,[],[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt("erlang",nodes,[],[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link(Node,"erlang",nodes,[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link("erlang",nodes,[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn(Node,"erlang",nodes,[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn("erlang",nodes,[])),
-
- % bad function
- test_server:format("Testing bad functions~n", []),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(Node,erlang,"nodes",[],[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(Node,not_a_fun,[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(erlang,"nodes",[],[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(not_a_fun,[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link(Node,erlang,"nodes",[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link(Node,not_a_fun)),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link(erlang,"nodes",[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link(not_a_fun)),
- ?line {'EXIT', {badarg, _}} = (catch spawn(Node,erlang,"nodes",[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn(Node,not_a_fun)),
- ?line {'EXIT', {badarg, _}} = (catch spawn(erlang,"nodes",[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn(not_a_fun)),
-
-
- % bad argument
- test_server:format("Testing bad arguments~n", []),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(Node,erlang,nodes,[a|b],[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(erlang,nodes,[a|b],[])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link(Node,erlang,nodes,[a|b])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_link(erlang,nodes,[a|b])),
- ?line {'EXIT', {badarg, _}} = (catch spawn(Node,erlang,nodes,[a|b])),
- ?line {'EXIT', {badarg, _}} = (catch spawn(erlang,nodes,[a|b])),
-
- % bad option
- test_server:format("Testing bad options~n", []),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(Node,erlang,nodes,[],[a|b])),
- ?line {'EXIT', {badarg, _}} = (catch spawn_opt(erlang,nodes,[],[a|b])),
-
-
- ?line true = stop_node(Node),
+ %% bad node
+ io:format("Testing bad nodes~n", []),
+ {'EXIT', {badarg, _}} = (catch spawn_opt("Node",erlang,nodes,[],[])),
+ {'EXIT', {badarg, _}} = (catch spawn_opt("Node",
+ fun () ->
+ erlang:nodes()
+ end,
+ [])),
+ {'EXIT', {badarg, _}} = (catch spawn_link("Node",
+ fun () ->
+ erlang:nodes()
+ end)),
+ {'EXIT', {badarg, _}} = (catch spawn("Node",erlang,nodes,[])),
+ {'EXIT', {badarg, _}} = (catch spawn("Node",
+ fun () ->
+ erlang:nodes()
+ end)),
+
+ %% bad module
+ io:format("Testing bad modules~n", []),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(Node,"erlang",nodes,[],[])),
+ {'EXIT', {badarg, _}} = (catch spawn_opt("erlang",nodes,[],[])),
+ {'EXIT', {badarg, _}} = (catch spawn_link(Node,"erlang",nodes,[])),
+ {'EXIT', {badarg, _}} = (catch spawn_link("erlang",nodes,[])),
+ {'EXIT', {badarg, _}} = (catch spawn(Node,"erlang",nodes,[])),
+ {'EXIT', {badarg, _}} = (catch spawn("erlang",nodes,[])),
+
+ %% bad function
+ io:format("Testing bad functions~n", []),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(Node,erlang,"nodes",[],[])),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(Node,not_a_fun,[])),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(erlang,"nodes",[],[])),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(not_a_fun,[])),
+ {'EXIT', {badarg, _}} = (catch spawn_link(Node,erlang,"nodes",[])),
+ {'EXIT', {badarg, _}} = (catch spawn_link(Node,not_a_fun)),
+ {'EXIT', {badarg, _}} = (catch spawn_link(erlang,"nodes",[])),
+ {'EXIT', {badarg, _}} = (catch spawn_link(not_a_fun)),
+ {'EXIT', {badarg, _}} = (catch spawn(Node,erlang,"nodes",[])),
+ {'EXIT', {badarg, _}} = (catch spawn(Node,not_a_fun)),
+ {'EXIT', {badarg, _}} = (catch spawn(erlang,"nodes",[])),
+ {'EXIT', {badarg, _}} = (catch spawn(not_a_fun)),
+
+
+ %% bad argument
+ io:format("Testing bad arguments~n", []),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(Node,erlang,nodes,[a|b],[])),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(erlang,nodes,[a|b],[])),
+ {'EXIT', {badarg, _}} = (catch spawn_link(Node,erlang,nodes,[a|b])),
+ {'EXIT', {badarg, _}} = (catch spawn_link(erlang,nodes,[a|b])),
+ {'EXIT', {badarg, _}} = (catch spawn(Node,erlang,nodes,[a|b])),
+ {'EXIT', {badarg, _}} = (catch spawn(erlang,nodes,[a|b])),
+
+ %% bad option
+ io:format("Testing bad options~n", []),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(Node,erlang,nodes,[],[a|b])),
+ {'EXIT', {badarg, _}} = (catch spawn_opt(erlang,nodes,[],[a|b])),
+
+
+ true = stop_node(Node),
ok.
check_proc_vals(Link, Priority, FullsweepAfter, MinHeapSize, {Ls, P, FA, HS}) ->
- ?line Link = lists:member(self(), Ls),
- ?line Priority = P,
+ Link = lists:member(self(), Ls),
+ Priority = P,
FullsweepAfter = FA,
true = (HS >= MinHeapSize),
- ?line ok.
+ ok.
fetch_proc_vals(Pid) ->
- ?line PI = process_info(Pid),
- ?line {value,{links, Ls}} = lists:keysearch(links, 1, PI),
- ?line {value,{priority,P}} = lists:keysearch(priority, 1, PI),
+ PI = process_info(Pid),
+ {value,{links, Ls}} = lists:keysearch(links, 1, PI),
+ {value,{priority,P}} = lists:keysearch(priority, 1, PI),
{value,{garbage_collection,Gs}} =
lists:keysearch(garbage_collection, 1, PI),
{value,{fullsweep_after,FA}} =
lists:keysearch(fullsweep_after, 1, Gs),
{value,{heap_size,HS}} = lists:keysearch(heap_size, 1, PI),
- ?line {Ls, P, FA, HS}.
-
-decode_packet_delim(doc) ->
- ["Test erlang:packet_delim/3 with {line_delimiter,0} option"];
-decode_packet_delim(suite) ->
- [];
+ {Ls, P, FA, HS}.
+
+%% Test erlang:packet_delim/3 with {line_delimiter,0} option.
decode_packet_delim(Config) when is_list(Config) ->
{ok,<<"abc",0>>,<<"efg",0>>} =
erlang:decode_packet(line, <<"abc",0,"efg",0>>, [{line_delimiter, 0}]),
{more, undefined} = erlang:decode_packet(line, <<"abc",0,"efg",0>>, []).
-% This testcase should probably be moved somewhere else
-wilderness(doc) ->
- ["Test that memory allocation command line options affecting the"
- "wilderness of the heap are interpreted correct by the emulator "];
-wilderness(suite) ->
- [];
+%% This testcase should probably be moved somewhere else
+
+%% Test that memory allocation command line options affecting the
+%% wilderness of the heap are interpreted correct by the emulator.
wilderness(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- ?line OKParams = {512, 8},
- ?line Alloc = erlang:system_info(allocator),
- ?line test_server:format("Test server allocator info:~n~p", [Alloc]),
+ OKParams = {512, 8},
+ Alloc = erlang:system_info(allocator),
+ io:format("Test server allocator info:~n~p", [Alloc]),
Result = case Alloc of
{Allocator, _, _, _} when Allocator == glibc;
Allocator == dlmalloc ->
- ?line run_wilderness_test(OKParams, OKParams),
- ?line {comment,
- "Allocator used: " ++ atom_to_list(Allocator)};
+ run_wilderness_test(OKParams, OKParams),
+ {comment,
+ "Allocator used: " ++ atom_to_list(Allocator)};
{OtherAllocator, _, _, _} ->
- ?line {skipped,
- "Only run when glibc is used. "
- "Allocator used: "
- ++ atom_to_list(OtherAllocator)}
+ {skipped,
+ "Only run when glibc is used. "
+ "Allocator used: "
+ ++ atom_to_list(OtherAllocator)}
end,
- ?line test_server:timetrap_cancel(Dog),
Result.
-
+
run_wilderness_test({Set_tt, Set_tp}, {Exp_tt, Exp_tp}) ->
Self = self(),
Ref = make_ref(),
SuiteDir = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node} = test_server:start_node(allocator_test,
- slave,
- [{args,
- " -pa "
- ++ SuiteDir
- ++" +MYtt "++to_string(Set_tt)
- ++" +MYtp "++to_string(Set_tp)},
- {linked, false}]),
+ {ok, Node} = test_server:start_node(allocator_test,
+ slave,
+ [{args,
+ " -pa "
+ ++ SuiteDir
+ ++" +MYtt "++to_string(Set_tt)
+ ++" +MYtp "++to_string(Set_tp)},
+ {linked, false}]),
spawn(Node, fun () ->
Self ! {Ref, erlang:system_info(allocator)}
end),
@@ -571,15 +534,15 @@ run_wilderness_test({Set_tt, Set_tp}, {Exp_tt, Exp_tp}) ->
{Ref, {A, V, F, S}} ->
Ett = Exp_tt*1024,
Etp = Exp_tp*1024,
- ?line test_server:format("Test allocator info:~n~p",
- [{A, V, F, S}]),
- ?line {value, {sys_alloc, SA_Opts}}
+ io:format("Test allocator info:~n~p",
+ [{A, V, F, S}]),
+ {value, {sys_alloc, SA_Opts}}
= lists:keysearch(sys_alloc, 1, S),
- ?line {value, {tt, Ett}} = lists:keysearch(tt, 1, SA_Opts),
- ?line {value, {tp, Etp}} = lists:keysearch(tp, 1, SA_Opts)
+ {value, {tt, Ett}} = lists:keysearch(tt, 1, SA_Opts),
+ {value, {tp, Etp}} = lists:keysearch(tp, 1, SA_Opts)
end,
stop_node(Node).
-
+
to_string(X) when is_integer(X) ->
integer_to_list(X);
to_string(X) when is_atom(X) ->
@@ -605,12 +568,12 @@ get_nodenames(N, T, Acc) ->
++ integer_to_list(C)) | Acc]).
start_node(TestCase) ->
- ?line [Name] = get_nodenames(1, TestCase),
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line test_server:start_node(Name, slave, [{args, "-pa " ++ Pa}]).
+ [Name] = get_nodenames(1, TestCase),
+ Pa = filename:dirname(code:which(?MODULE)),
+ test_server:start_node(Name, slave, [{args, "-pa " ++ Pa}]).
stop_node(Node) ->
- ?line true = test_server:stop_node(Node).
+ true = test_server:stop_node(Node).
run_fun(Fun) ->
Fun().
diff --git a/lib/kernel/test/ch.erl b/lib/kernel/test/ch.erl
index ba8aa9f05a..c9f378e387 100644
--- a/lib/kernel/test/ch.erl
+++ b/lib/kernel/test/ch.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/ch_sup.erl b/lib/kernel/test/ch_sup.erl
index a297b60200..1d7f17fc95 100644
--- a/lib/kernel/test/ch_sup.erl
+++ b/lib/kernel/test/ch_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/cleanup.erl b/lib/kernel/test/cleanup.erl
index 7eb0a9e140..db738c167e 100644
--- a/lib/kernel/test/cleanup.erl
+++ b/lib/kernel/test/cleanup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-export([all/0,groups/0,init_per_group/2,end_per_group/2, cleanup/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
all() ->
[cleanup].
@@ -36,15 +36,14 @@ end_per_group(_GroupName, Config) ->
Config.
-cleanup(suite) -> [];
cleanup(_) ->
- ?line Localhost = list_to_atom(net_adm:localhost()),
- ?line net_adm:world_list([Localhost]),
- ?line case nodes() of
- [] ->
- ok;
- Nodes when is_list(Nodes) ->
- Kill = fun(Node) -> spawn(Node, erlang, halt, []) end,
- ?line lists:foreach(Kill, Nodes),
- ?line test_server:fail({nodes_left, Nodes})
- end.
+ Localhost = list_to_atom(net_adm:localhost()),
+ net_adm:world_list([Localhost]),
+ case nodes() of
+ [] ->
+ ok;
+ Nodes when is_list(Nodes) ->
+ Kill = fun(Node) -> spawn(Node, erlang, halt, []) end,
+ lists:foreach(Kill, Nodes),
+ ct:fail({nodes_left, Nodes})
+ end.
diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl
index 73ade14fa1..8da67c89f8 100644
--- a/lib/kernel/test/code_SUITE.erl
+++ b/lib/kernel/test/code_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,8 @@
%%
-module(code_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
+-include_lib("syntax_tools/include/merl.hrl").
-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
-export([set_path/1, get_path/1, add_path/1, add_paths/1, del_path/1,
@@ -30,12 +31,14 @@
upgrade/1,
sticky_dir/1, pa_pz_option/1, add_del_path/1,
dir_disappeared/1, ext_mod_dep/1, clash/1,
- load_cached/1, start_node_with_cache/1, add_and_rehash/1,
- where_is_file_cached/1, where_is_file_no_cache/1,
+ where_is_file/1,
purge_stacktrace/1, mult_lib_roots/1, bad_erl_libs/1,
code_archive/1, code_archive2/1, on_load/1, on_load_binary/1,
- on_load_embedded/1, on_load_errors/1, big_boot_embedded/1,
- native_early_modules/1, get_mode/1]).
+ on_load_embedded/1, on_load_errors/1, on_load_update/1,
+ on_load_purge/1, on_load_self_call/1, on_load_pending/1,
+ big_boot_embedded/1,
+ native_early_modules/1, get_mode/1,
+ normalized_paths/1]).
-export([init_per_testcase/2, end_per_testcase/2,
init_per_suite/1, end_per_suite/1]).
@@ -47,7 +50,9 @@
-export([compile_load/4]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[set_path, get_path, add_path, add_paths, del_path,
@@ -56,12 +61,12 @@ all() ->
load_binary, dir_req, object_code, set_path_file,
upgrade,
sticky_dir, pa_pz_option, add_del_path, dir_disappeared,
- ext_mod_dep, clash, load_cached, start_node_with_cache,
- add_and_rehash, where_is_file_no_cache,
- where_is_file_cached, purge_stacktrace, mult_lib_roots,
+ ext_mod_dep, clash, where_is_file,
+ purge_stacktrace, mult_lib_roots,
bad_erl_libs, code_archive, code_archive2, on_load,
- on_load_binary, on_load_embedded, on_load_errors,
- big_boot_embedded, native_early_modules, get_mode].
+ on_load_binary, on_load_embedded, on_load_errors, on_load_update,
+ on_load_purge, on_load_self_call, on_load_pending,
+ big_boot_embedded, native_early_modules, get_mode, normalized_paths].
groups() ->
[].
@@ -94,34 +99,28 @@ init_per_testcase(big_boot_embedded, Config) ->
{skip, "Needs crypto!"}
end;
init_per_testcase(_Func, Config) ->
- Dog=?t:timetrap(?t:minutes(5)),
- P=code:get_path(),
- P=code:get_path(),
- [{watchdog, Dog}, {code_path, P}|Config].
+ P = code:get_path(),
+ [{code_path, P}|Config].
end_per_testcase(TC, Config) when TC == mult_lib_roots;
TC == big_boot_embedded ->
{ok, HostName} = inet:gethostname(),
NodeName = list_to_atom(atom_to_list(TC)++"@"++HostName),
- ?t:stop_node(NodeName),
+ test_server:stop_node(NodeName),
end_per_testcase(Config);
end_per_testcase(_Func, Config) ->
end_per_testcase(Config).
end_per_testcase(Config) ->
code:purge(code_b_test),
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- P=?config(code_path, Config),
+ P=proplists:get_value(code_path, Config),
true=code:set_path(P),
P=code:get_path(),
ok.
-set_path(suite) -> [];
-set_path(doc) -> [];
set_path(Config) when is_list(Config) ->
P = code:get_path(),
- NonExDir = filename:join(?config(priv_dir, Config), ?t:temp_name("hej")),
+ NonExDir = filename:join(proplists:get_value(priv_dir, Config), test_server:temp_name("hej")),
{'EXIT',_} = (catch code:set_path({a})),
{error, bad_directory} = (catch code:set_path([{a}])),
{error, bad_directory} = code:set_path(NonExDir),
@@ -135,19 +134,15 @@ set_path(Config) when is_list(Config) ->
[LibDir] = code:get_path(),
ok.
-get_path(suite) -> [];
-get_path(doc) -> [];
get_path(Config) when is_list(Config) ->
P = code:get_path(),
- % test that all directories are strings (lists).
+ %% test that all directories are strings (lists).
[] = lists:filter(fun
(Dir) when is_list(Dir) -> false;
(_) -> true
end, P),
ok.
-add_path(suite) -> [];
-add_path(doc) -> [];
add_path(Config) when is_list(Config) ->
P = code:get_path(),
{'EXIT',_} = (catch code:add_path({})),
@@ -168,8 +163,6 @@ add_path(Config) when is_list(Config) ->
code:set_path(P),
ok.
-add_paths(suite) -> [];
-add_paths(doc) -> [];
add_paths(Config) when is_list(Config) ->
P = code:get_path(),
ok = code:add_paths([{}]),
@@ -215,8 +208,6 @@ add_paths(Config) when is_list(Config) ->
code:set_path(P),
ok.
-del_path(suite) -> [];
-del_path(doc) -> [];
del_path(Config) when is_list(Config) ->
P = code:get_path(),
try
@@ -226,18 +217,18 @@ del_path(Config) when is_list(Config) ->
end.
del_path_1(P) ->
- test_server:format("Initial code:get_path()=~p~n",[P]),
+ io:format("Initial code:get_path()=~p~n",[P]),
{'EXIT',_} = (catch code:del_path(3)),
false = code:del_path(my_dummy_name),
false = code:del_path("/kdlk/my_dummy_dir"),
Dir = filename:join([code:lib_dir(kernel),"ebin"]),
- test_server:format("kernel dir: ~p~n",[Dir]),
+ io:format("kernel dir: ~p~n",[Dir]),
true = code:del_path(kernel),
NewP = code:get_path(),
- test_server:format("Path after removing 'kernel':~p~n",[NewP]),
+ io:format("Path after removing 'kernel':~p~n",[NewP]),
ReferenceP = lists:delete(Dir,P),
- test_server:format("Reference path:~p~n",[ReferenceP]),
+ io:format("Reference path:~p~n",[ReferenceP]),
NewP = ReferenceP, % check that dir is deleted
code:set_path(P),
@@ -251,10 +242,8 @@ del_path_1(P) ->
NewP1 = lists:delete(Dir,P), % check that dir is deleted
ok.
-replace_path(suite) -> [];
-replace_path(doc) -> [];
replace_path(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
P = code:get_path(),
{'EXIT',_} = (catch code:replace_path(3,"")),
{error, bad_name} = code:replace_path(dummy_name,""),
@@ -289,10 +278,9 @@ replace_path(Config) when is_list(Config) ->
ok.
-dir_disappeared(suite) -> [];
-dir_disappeared(doc) -> ["OTP-3977"];
+%% OTP-3977.
dir_disappeared(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, "temp"),
ok = file:make_dir(Dir),
true = code:add_path(Dir),
@@ -300,8 +288,6 @@ dir_disappeared(Config) when is_list(Config) ->
non_existing = code:which(bubbelskrammel),
ok.
-load_file(suite) -> [];
-load_file(doc) -> [];
load_file(Config) when is_list(Config) ->
{error, nofile} = code:load_file(duuuumy_mod),
{error, badfile} = code:load_file(code_a_test),
@@ -316,8 +302,6 @@ load_file(Config) when is_list(Config) ->
test_dir() ->
filename:dirname(code:which(?MODULE)).
-load_abs(suite) -> [];
-load_abs(doc) -> [];
load_abs(Config) when is_list(Config) ->
TestDir = test_dir(),
{error, nofile} = code:load_abs(TestDir ++ "/duuuumy_mod"),
@@ -330,8 +314,6 @@ load_abs(Config) when is_list(Config) ->
code:unstick_dir(TestDir),
ok.
-ensure_loaded(suite) -> [];
-ensure_loaded(doc) -> [];
ensure_loaded(Config) when is_list(Config) ->
{module, lists} = code:ensure_loaded(lists),
case init:get_argument(mode) of
@@ -348,8 +330,6 @@ ensure_loaded(Config) when is_list(Config) ->
ok
end.
-delete(suite) -> [];
-delete(doc) -> [];
delete(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
code:purge(code_b_test),
@@ -366,8 +346,6 @@ delete(Config) when is_list(Config) ->
process_flag(trap_exit, OldFlag),
ok.
-purge(suite) -> [];
-purge(doc) -> [];
purge(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
code:purge(code_b_test),
@@ -383,8 +361,23 @@ purge(Config) when is_list(Config) ->
purge_many_exits(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
+
code:purge(code_b_test),
{'EXIT',_} = (catch code:purge({})),
+
+ CodePurgeF = fun(M, Exp) -> Exp = code:purge(M) end,
+ purge_many_exits_do(CodePurgeF),
+
+ %% Let's repeat test for erlang:purge_module as it does the same thing
+ %% now in erts-8.0 (except for return value).
+ ErlangPurgeF = fun(M, _Exp) -> erlang:purge_module(M) end,
+ purge_many_exits_do(ErlangPurgeF),
+
+ process_flag(trap_exit, OldFlag),
+ ok.
+
+
+purge_many_exits_do(PurgeF) ->
false = code:purge(code_b_test),
TPids = lists:map(fun (_) ->
{code_b_test:do_spawn(),
@@ -395,7 +388,7 @@ purge_many_exits(Config) when is_list(Config) ->
end)}
end,
lists:seq(1, 1000)),
- % Give them time to start...
+ %% Give them time to start...
receive after 1000 -> ok end,
true = code:delete(code_b_test),
lists:foreach(fun ({Pid1, Pid2}) ->
@@ -403,7 +396,7 @@ purge_many_exits(Config) when is_list(Config) ->
false = code_b_test:check_exit(Pid1),
true = erlang:is_process_alive(Pid2)
end, TPids),
- true = code:purge(code_b_test),
+ PurgeF(code_b_test, true),
lists:foreach(fun ({Pid1, Pid2}) ->
false = erlang:is_process_alive(Pid1),
true = code_b_test:check_exit(Pid1),
@@ -412,13 +405,9 @@ purge_many_exits(Config) when is_list(Config) ->
end, TPids),
lists:foreach(fun ({_Pid1, Pid2}) ->
receive {'EXIT', Pid2, _} -> ok end
- end, TPids),
- process_flag(trap_exit, OldFlag),
- ok.
+ end, TPids).
-soft_purge(suite) -> [];
-soft_purge(doc) -> [];
soft_purge(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
code:purge(code_b_test),
@@ -435,8 +424,6 @@ soft_purge(Config) when is_list(Config) ->
process_flag(trap_exit, OldFlag),
ok.
-is_loaded(suite) -> [];
-is_loaded(doc) -> [];
is_loaded(Config) when is_list(Config) ->
code:purge(code_b_test),
code:delete(code_b_test),
@@ -450,10 +437,8 @@ is_loaded(Config) when is_list(Config) ->
code:delete(code_b_test),
ok.
-all_loaded(suite) -> [];
-all_loaded(doc) -> [];
all_loaded(Config) when is_list(Config) ->
- case ?t:is_cover() of
+ case test_server:is_cover() of
true -> {skip,"Cover is running"};
false -> all_loaded_1()
end.
@@ -481,8 +466,6 @@ all_unique([]) -> ok;
all_unique([_]) -> ok;
all_unique([{X,_}|[{Y,_}|_]=T]) when X < Y -> all_unique(T).
-load_binary(suite) -> [];
-load_binary(doc) -> [];
load_binary(Config) when is_list(Config) ->
TestDir = test_dir(),
File = TestDir ++ "/code_b_test" ++ code:objfile_extension(),
@@ -499,7 +482,7 @@ load_binary(Config) when is_list(Config) ->
ok.
upgrade(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%%T = [beam, hipe],
T = [beam],
@@ -531,15 +514,11 @@ compile_load(Mod, Dir, Ver, CodeType) ->
CompOpts = [binary, report] ++ Target ++ Version,
Src = filename:join(Dir, atom_to_list(Mod) ++ ".erl"),
- %io:format("compile:file(~p,~p)\n", [Src, CompOpts]),
{ok,Mod,Code} = compile:file(Src, CompOpts),
ObjFile = filename:basename(Src,".erl") ++ ".beam",
{module,Mod} = code:load_binary(Mod, ObjFile, Code),
- %IsNative = code:is_module_native(Mod),
ok.
-dir_req(suite) -> [];
-dir_req(doc) -> [];
dir_req(Config) when is_list(Config) ->
{ok,[[Root0]]} = init:get_argument(root),
Root = filename:join([Root0]), % Normalised form.
@@ -554,8 +533,6 @@ dir_req(Config) when is_list(Config) ->
{error, bad_name} = code:priv_dir(duuumy),
ok.
-object_code(suite) -> [];
-object_code(doc) -> [];
object_code(Config) when is_list(Config) ->
TestDir = test_dir(),
P = code:get_path(),
@@ -576,22 +553,20 @@ object_code(Config) when is_list(Config) ->
P=code:get_path(),
ok.
-set_path_file(suite) -> [];
-set_path_file(doc) -> ["Test that set_path does not accept ",
- "files as pathnames (known previous bug)"];
+%% Test that set_path does not accept
+%% files as pathnames (known previous bug)
set_path_file(Config) when is_list(Config) ->
- File=filename:join(?config(priv_dir, Config), "testfil"),
+ File=filename:join(proplists:get_value(priv_dir, Config), "testfil"),
ok=file:write_file(File, list_to_binary("lite data")),
{error, bad_directory}=code:set_path([File]).
-sticky_dir(suite) -> [];
-sticky_dir(doc) -> ["Test that a module with the same name as a module in ",
- "a sticky directory cannot be loaded."];
+%% Test that a module with the same name as a module in
+%% a sticky directory cannot be loaded.
sticky_dir(Config) when is_list(Config) ->
Pa = filename:dirname(code:which(?MODULE)),
- {ok,Node} = ?t:start_node(sticky_dir, slave, [{args,"-pa "++Pa}]),
+ {ok,Node} = test_server:start_node(sticky_dir, slave, [{args,"-pa "++Pa}]),
Mods = [code,lists,erlang,init],
- OutDir = filename:join(?config(priv_dir, Config), sticky_dir),
+ OutDir = filename:join(proplists:get_value(priv_dir, Config), sticky_dir),
_ = file:make_dir(OutDir),
Ret = rpc:call(Node, erlang, apply,
[fun sticky_compiler/2,[Mods,OutDir]]),
@@ -600,9 +575,9 @@ sticky_dir(Config) when is_list(Config) ->
ok;
Other ->
io:format("~p\n", [Other]),
- ?t:fail()
+ ct:fail(failed)
end,
- ?t:stop_node(Node),
+ test_server:stop_node(Node),
ok.
sticky_compiler(Files, PrivDir) ->
@@ -627,34 +602,31 @@ do_sticky_compile(Mod, Dir) ->
ok
end.
-pa_pz_option(suite) -> [];
-pa_pz_option(doc) -> ["Test that the -pa and -pz options work as expected"];
+%% Test that the -pa and -pz options work as expected.
pa_pz_option(Config) when is_list(Config) ->
- DDir = ?config(data_dir,Config),
+ DDir = proplists:get_value(data_dir,Config),
PaDir = filename:join(DDir,"pa"),
PzDir = filename:join(DDir,"pz"),
- {ok, Node}=?t:start_node(pa_pz1, slave,
+ {ok, Node}=test_server:start_node(pa_pz1, slave,
[{args,
"-pa " ++ PaDir
++ " -pz " ++ PzDir}]),
Ret=rpc:call(Node, code, get_path, []),
[PaDir|Paths] = Ret,
[PzDir|_] = lists:reverse(Paths),
- ?t:stop_node(Node),
- {ok, Node2}=?t:start_node(pa_pz2, slave,
+ test_server:stop_node(Node),
+ {ok, Node2}=test_server:start_node(pa_pz2, slave,
[{args,
"-mode embedded " ++ "-pa "
++ PaDir ++ " -pz " ++ PzDir}]),
Ret2=rpc:call(Node2, code, get_path, []),
[PaDir|Paths2] = Ret2,
[PzDir|_] = lists:reverse(Paths2),
- ?t:stop_node(Node2).
+ test_server:stop_node(Node2).
-add_del_path(suite) ->
- [];
-add_del_path(doc) -> ["add_path, del_path should not cause priv_dir(App) to fail"];
+%% add_path, del_path should not cause priv_dir(App) to fail.
add_del_path(Config) when is_list(Config) ->
- DDir = ?config(data_dir,Config),
+ DDir = proplists:get_value(data_dir,Config),
Dir1 = filename:join(DDir,"dummy_app-1.0/ebin"),
Dir2 = filename:join(DDir,"dummy_app-2.0/ebin"),
code:add_patha(Dir1),
@@ -668,43 +640,35 @@ add_del_path(Config) when is_list(Config) ->
clash(Config) when is_list(Config) ->
- DDir = ?config(data_dir,Config)++"clash/",
+ DDir = proplists:get_value(data_dir,Config)++"clash/",
P = code:get_path(),
- [TestServerPath|_] = [Path || Path <- code:get_path(),
- re:run(Path,"test_server/?$",[unicode]) /= nomatch],
%% test non-clashing entries
- %% remove TestServerPath to prevent clash with test-server path
- true = code:del_path(TestServerPath),
true = code:add_path(DDir++"foobar-0.1/ebin"),
true = code:add_path(DDir++"zork-0.8/ebin"),
- test_server:capture_start(),
+ ct:capture_start(),
ok = code:clash(),
- test_server:capture_stop(),
- [OKMsg|_] = test_server:capture_get(),
+ ct:capture_stop(),
+ [OKMsg|_] = ct:capture_get(),
true = lists:prefix("** Found 0 name clashes", OKMsg),
true = code:set_path(P),
%% test clashing entries
- %% remove TestServerPath to prevent clash with test-server path
- true = code:del_path(TestServerPath),
true = code:add_path(DDir++"foobar-0.1/ebin"),
true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"),
- test_server:capture_start(),
+ ct:capture_start(),
ok = code:clash(),
- test_server:capture_stop(),
- [ClashMsg|_] = test_server:capture_get(),
+ ct:capture_stop(),
+ [ClashMsg|_] = ct:capture_get(),
{match, [" hides "]} = re:run(ClashMsg, "\\*\\* .*( hides ).*",
[{capture,all_but_first,list}]),
true = code:set_path(P),
%% test "Bad path can't read"
- %% remove TestServerPath to prevent clash with test-server path
- Priv = ?config(priv_dir, Config),
- true = code:del_path(TestServerPath),
+ Priv = proplists:get_value(priv_dir, Config),
TmpEzFile = Priv++"foobar-0.tmp.ez",
{ok, _} = file:copy(DDir++"foobar-0.1.ez", TmpEzFile),
true = code:add_path(TmpEzFile++"/foobar-0.1/ebin"),
@@ -716,20 +680,17 @@ clash(Config) when is_list(Config) ->
_ ->
ok = file:delete(TmpEzFile)
end,
- test_server:capture_start(),
+ ct:capture_start(),
ok = code:clash(),
- test_server:capture_stop(),
- [BadPathMsg|_] = test_server:capture_get(),
+ ct:capture_stop(),
+ [BadPathMsg|_] = ct:capture_get(),
true = lists:prefix("** Bad path can't read", BadPathMsg),
true = code:set_path(P),
file:delete(TmpEzFile++".moved"), %% Only effect on windows
ok.
-ext_mod_dep(suite) ->
- [];
-ext_mod_dep(doc) ->
- ["Every module that the code_server uses should be preloaded, "
- "this test case verifies that"];
+%% Every module that the code_server uses should be preloaded,
+%% this test case verifies that.
ext_mod_dep(Config) when is_list(Config) ->
xref:start(s),
xref:set_default(s, [{verbose,false},{warnings,false},
@@ -745,7 +706,7 @@ ext_mod_dep(Config) when is_list(Config) ->
xref:stop(s),
case Else of
ok -> ok;
- _ -> test_server:fail(Else)
+ _ -> ct:fail(Else)
end
end.
@@ -769,6 +730,7 @@ analyse([], [This={M,F,A}|Path], Visited, ErrCnt0) ->
OK = [erlang, os, prim_file, erl_prim_loader, init, ets,
code_server, lists, lists_sort, unicode, binary, filename,
gb_sets, gb_trees, hipe_unified_loader, hipe_bifs,
+ erts_code_purger,
prim_zip, zlib],
ErrCnt1 =
case lists:member(M, OK) or erlang:is_builtin(M,F,A) of
@@ -794,7 +756,7 @@ analyse2(MFA={_,_,_}, Path, Visited0) ->
analyse(FL, [MFA|Path], my_usort([MFA|Visited0]), 0).
%%%% We need to check these manually...
-% fun's are ok as long as they are defined locally.
+%% fun's are ok as long as they are defined locally.
check_funs({'$M_EXPR','$F_EXPR',_},
[{unicode,characters_to_binary_int,3},
{unicode,characters_to_binary,3},
@@ -839,18 +801,7 @@ check_funs({'$M_EXPR','$F_EXPR',1},
{code_server,start_link,1}]) -> 0;
check_funs({'$M_EXPR','$F_EXPR',1},
[{lists,filter,2},
- {code_server,try_archive_subdirs,3},
- {code_server,all_archive_subdirs,1},
- {code_server,archive_subdirs,1},
- {code_server,insert_name,3},
- {code_server,replace_name,2},
- {code_server,update,2},
- {code_server,maybe_update,2},
- {code_server,do_add,4},
- {code_server,add_path,4},
- {code_server,handle_call,3},
- {code_server,loop,1},
- {code_server,system_continue,3}]) -> 0;
+ {code_server,try_archive_subdirs,3}|_]) -> 0;
check_funs({'$M_EXPR','$F_EXPR',_},
[{erlang,apply,2},
{erlang,spawn_link,1},
@@ -877,19 +828,27 @@ check_funs({'$M_EXPR','$F_EXPR',1},
{hipe_unified_loader,get_refs_from,2}| _]) -> 0;
check_funs({'$M_EXPR',warning_msg,2},
[{code_server,finish_on_load_report,2} | _]) -> 0;
+check_funs({'$M_EXPR','$F_EXPR',1},
+ [{code_server,run,2}|_]) -> 0;
+check_funs({'$M_EXPR','$F_EXPR',2},
+ [{code_server,handle_on_load,5}|_]) -> 0;
+check_funs({'$M_EXPR','$F_EXPR',2},
+ [{code_server,handle_pending_on_load,4}|_]) -> 0;
+check_funs({'$M_EXPR','$F_EXPR',2},
+ [{code_server,finish_on_load_2,3}|_]) -> 0;
%% This is cheating! /raimo
%%
%% check_funs(This = {M,_,_}, Path) ->
%% case catch atom_to_list(M) of
%% [$h,$i,$p,$e | _] ->
-%% test_server:format("hipe_module_ignored(~p, ~p)~n", [This, Path]),
+%% io:format("hipe_module_ignored(~p, ~p)~n", [This, Path]),
%% 0;
%% _ ->
-%% test_server:format("not_verified(~p, ~p)~n", [This, Path]),
+%% io:format("not_verified(~p, ~p)~n", [This, Path]),
%% 1
%% end;
check_funs(This, Path) ->
- test_server:format("not_verified(~p, ~p)~n", [This, Path]),
+ io:format("not_verified(~p, ~p)~n", [This, Path]),
1.
my_usort(List) ->
@@ -905,140 +864,7 @@ uniq([H|T],A) ->
uniq(T,[H|A]).
-load_cached(suite) ->
- [];
-load_cached(doc) ->
- [];
-load_cached(Config) when is_list(Config) ->
- Priv = ?config(priv_dir, Config),
- WD = filename:dirname(code:which(?MODULE)),
- {ok,Node} =
- ?t:start_node(code_cache_node, peer, [{args,
- "-pa \"" ++ WD ++ "\""},
- {erl, [this]}]),
- CCTabCreated = fun(Tab) ->
- case ets:info(Tab, name) of
- code_cache -> true;
- _ -> false
- end
- end,
- Tabs = rpc:call(Node, ets, all, []),
- case rpc:call(Node, lists, any, [CCTabCreated,Tabs]) of
- true ->
- ?t:stop_node(Node),
- ?t:fail("Code cache should not be active!");
- false ->
- ok
- end,
- rpc:call(Node, code, del_path, [Priv]),
- rpc:call(Node, code, add_pathz, [Priv]),
-
- FullModName = Priv ++ "/code_cache_test",
- {ok,Dev} = file:open(FullModName ++ ".erl", [write]),
- io:format(Dev, "-module(code_cache_test). -export([a/0]). a() -> ok.~n", []),
- ok = file:close(Dev),
- {ok,code_cache_test} = compile:file(FullModName, [{outdir,Priv}]),
-
- F = fun load_loop/2,
- N = 1000,
- {T0,T1} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]),
- TNoCache = now_diff(T1, T0),
- rpc:call(Node, code, rehash, []),
- {T2,T3} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]),
- TCache = now_diff(T3, T2),
- AvgNoCache = TNoCache/N,
- AvgCache = TCache/N,
- io:format("Avg. load time (no_cache/cache): ~w/~w~n", [AvgNoCache,AvgCache]),
- ?t:stop_node(Node),
- if AvgNoCache =< AvgCache ->
- ?t:fail("Cache not working properly.");
- true ->
- ok
- end.
-
-load_loop(N, M) ->
- load_loop(N, M, now()).
-load_loop(0, _M, T0) ->
- {T0,now()};
-load_loop(N, M, T0) ->
- code:load_file(M),
- code:delete(M),
- code:purge(M),
- load_loop(N-1, M, T0).
-
-now_diff({A2, B2, C2}, {A1, B1, C1}) ->
- ((A2-A1)*1000000 + B2-B1)*1000000 + C2-C1.
-
-start_node_with_cache(suite) ->
- [];
-start_node_with_cache(doc) ->
- [];
-start_node_with_cache(Config) when is_list(Config) ->
- {ok,Node} =
- ?t:start_node(code_cache_node, peer, [{args,
- "-code_path_cache"},
- {erl, [this]}]),
- Tabs = rpc:call(Node, ets, all, []),
- io:format("Tabs: ~w~n", [Tabs]),
- CCTabCreated = fun(Tab) ->
- case rpc:call(Node, ets, info, [Tab,name]) of
- code_cache -> true;
- _ -> false
- end
- end,
- true = lists:any(CCTabCreated, Tabs),
- ?t:stop_node(Node),
- ok.
-
-add_and_rehash(suite) ->
- [];
-add_and_rehash(doc) ->
- [];
-add_and_rehash(Config) when is_list(Config) ->
- Priv = ?config(priv_dir, Config),
- WD = filename:dirname(code:which(?MODULE)),
- {ok,Node} =
- ?t:start_node(code_cache_node, peer, [{args,
- "-pa \"" ++ WD ++ "\""},
- {erl, [this]}]),
- CCTabCreated = fun(Tab) ->
- case ets:info(Tab, name) of
- code_cache -> true;
- _ -> false
- end
- end,
- Tabs0 = rpc:call(Node, ets, all, []),
- case rpc:call(Node, lists, any, [CCTabCreated,Tabs0]) of
- true ->
- ?t:stop_node(Node),
- ?t:fail("Code cache should not be active!");
- false ->
- ok
- end,
- ok = rpc:call(Node, code, rehash, []), % create cache
- Tabs1 = rpc:call(Node, ets, all, []),
- true = rpc:call(Node, lists, any, [CCTabCreated,Tabs1]), % cache table created
- ok = rpc:call(Node, code, rehash, []),
- OkDir = filename:join(Priv, ""),
- BadDir = filename:join(Priv, "guggemuffsussiputt"),
- CP = [OkDir | rpc:call(Node, code, get_path, [])],
- true = rpc:call(Node, code, set_path, [CP]),
- CP1 = [BadDir | CP],
- {error,_} = rpc:call(Node, code, set_path, [CP1]),
- true = rpc:call(Node, code, del_path, [OkDir]),
- true = rpc:call(Node, code, add_path, [OkDir]),
- true = rpc:call(Node, code, add_path, [OkDir]),
- {error,_} = rpc:call(Node, code, add_path, [BadDir]),
- ok = rpc:call(Node, code, rehash, []),
-
- ?t:stop_node(Node),
- ok.
-
-where_is_file_no_cache(suite) ->
- [];
-where_is_file_no_cache(doc) ->
- [];
-where_is_file_no_cache(Config) when is_list(Config) ->
+where_is_file(Config) when is_list(Config) ->
{T,KernelBeamFile} = timer:tc(code, where_is_file, ["kernel.beam"]),
io:format("Load time: ~w ms~n", [T]),
KernelEbinDir = filename:dirname(KernelBeamFile),
@@ -1047,39 +873,7 @@ where_is_file_no_cache(Config) when is_list(Config) ->
non_existing = code:where_is_file("kernel"), % no such file
ok.
-where_is_file_cached(suite) ->
- [];
-where_is_file_cached(doc) ->
- [];
-where_is_file_cached(Config) when is_list(Config) ->
- {ok,Node} =
- ?t:start_node(code_cache_node, peer, [{args,
- "-code_path_cache"},
- {erl, [this]}]),
- Tabs = rpc:call(Node, ets, all, []),
- io:format("Tabs: ~w~n", [Tabs]),
- CCTabCreated = fun(Tab) ->
- case rpc:call(Node, ets, info, [Tab,name]) of
- code_cache -> true;
- _ -> false
- end
- end,
- true = lists:any(CCTabCreated, Tabs),
- KernelBeamFile = rpc:call(Node, code, where_is_file, ["kernel.beam"]),
- {T,KernelBeamFile} = rpc:call(Node, timer, tc, [code,where_is_file,["kernel.beam"]]),
- io:format("Load time: ~w ms~n", [T]),
- KernelEbinDir = rpc:call(Node, filename, dirname, [KernelBeamFile]),
- AppFile = rpc:call(Node, filename, join, [KernelEbinDir,"kernel.app"]),
- AppFile = rpc:call(Node, code, where_is_file, ["kernel.app"]),
- non_existing = rpc:call(Node, code, where_is_file, ["kernel"]), % no such file
- ?t:stop_node(Node),
- ok.
-
-
-purge_stacktrace(suite) ->
- [];
-purge_stacktrace(doc) ->
- ["Test that stacktrace is deleted when purging a referred module"];
+%% Test that stacktrace is deleted when purging a referred module.
purge_stacktrace(Config) when is_list(Config) ->
code:purge(code_b_test),
try code_b_test:call(fun(b) -> ok end, a)
@@ -1120,7 +914,7 @@ purge_stacktrace(Config) when is_list(Config) ->
ok.
mult_lib_roots(Config) when is_list(Config) ->
- DataDir = filename:join(?config(data_dir, Config), "mult_lib_roots"),
+ DataDir = filename:join(proplists:get_value(data_dir, Config), "mult_lib_roots"),
mult_lib_compile(DataDir, "my_dummy_app-b/ebin/lists"),
mult_lib_compile(DataDir,
"my_dummy_app-c/ebin/code_SUITE_mult_root_module"),
@@ -1130,7 +924,7 @@ mult_lib_roots(Config) when is_list(Config) ->
filename:join(DataDir, "second_root"),
{ok,Node} =
- ?t:start_node(mult_lib_roots, slave,
+ test_server:start_node(mult_lib_roots, slave,
[{args,"-env ERL_LIBS "++ErlLibs}]),
Path0 = rpc:call(Node, code, get_path, []),
@@ -1178,15 +972,15 @@ mult_lib_remove_prefix([$/|T], []) -> T.
bad_erl_libs(Config) when is_list(Config) ->
{ok,Node} =
- ?t:start_node(bad_erl_libs, slave, []),
+ test_server:start_node(bad_erl_libs, slave, []),
Code = rpc:call(Node,code,get_path,[]),
- ?t:stop_node(Node),
+ test_server:stop_node(Node),
{ok,Node2} =
- ?t:start_node(bad_erl_libs, slave,
- [{args,"-env ERL_LIBS /no/such/dir"}]),
+ test_server:start_node(bad_erl_libs, slave,
+ [{args,"-env ERL_LIBS /no/such/dir"}]),
Code2 = rpc:call(Node,code,get_path,[]),
- ?t:stop_node(Node2),
+ test_server:stop_node(Node2),
%% Test that code path is not affected by the faulty ERL_LIBS
Code = Code2,
@@ -1205,8 +999,8 @@ code_archive2(Config) when is_list(Config) ->
do_code_archive(Config, Root, StripVsn) when is_list(Config) ->
%% Copy the orig files to priv_dir
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
App = code_archive_dict,
VsnBase = atom_to_list(App) ++ "-1.0",
Base =
@@ -1239,9 +1033,15 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) ->
{ok, _} = zip:create(Archive, [Base],
[{compress, []}, {cwd, PrivDir}]),
+ %% Create a directory and a file outside of the archive.
+ OtherFile = filename:join([RootDir,VsnBase,"other","other.txt"]),
+ OtherContents = ?MODULE:module_info(md5),
+ filelib:ensure_dir(OtherFile),
+ ok = file:write_file(OtherFile, OtherContents),
+
%% Set up ERL_LIBS and start a slave node.
{ok, Node} =
- ?t:start_node(code_archive, slave,
+ test_server:start_node(code_archive, slave,
[{args,"-env ERL_LIBS " ++ RootDir}]),
CodePath = rpc:call(Node, code, get_path, []),
AppEbin = filename:join([Archive, Base, "ebin"]),
@@ -1253,13 +1053,25 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) ->
%% Start the app
ok = rpc:call(Node, application, start, [App]),
+ %% Get the lib dir for the app.
+ AppLibDir = rpc:call(Node, code, lib_dir, [App]),
+ io:format("AppLibDir: ~p\n", [AppLibDir]),
+ AppLibDir = filename:join(RootDir, VsnBase),
+
%% Access the app priv dir
AppPrivDir = rpc:call(Node, code, priv_dir, [App]),
AppPrivFile = filename:join([AppPrivDir, "code_archive.txt"]),
io:format("AppPrivFile: ~p\n", [AppPrivFile]),
- {ok, _Bin, _Path} =
+ {ok, _Bin, _} =
rpc:call(Node, erl_prim_loader, get_file, [AppPrivFile]),
+ %% Read back the other text file.
+ OtherDirPath = rpc:call(Node, code, lib_dir, [App,other]),
+ OtherFilePath = filename:join(OtherDirPath, "other.txt"),
+ io:format("OtherFilePath: ~p\n", [OtherFilePath]),
+ {ok, OtherContents, _} =
+ rpc:call(Node, erl_prim_loader, get_file, [OtherFilePath]),
+
%% Use the app
Tab = code_archive_tab,
Key = foo,
@@ -1272,7 +1084,7 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) ->
error = rpc:call(Node, App, find, [Tab, Key]),
ok = rpc:call(Node, App, erase, [Tab]),
- ?t:stop_node(Node),
+ test_server:stop_node(Node),
ok.
compile_app(TopDir, AppName) ->
@@ -1298,15 +1110,12 @@ compile_files([File | Files], SrcDir, OutDir) ->
compile_files([], _, _) ->
ok.
-big_boot_embedded(suite) ->
- [];
-big_boot_embedded(doc) ->
- ["Test that a boot file with (almost) all of OTP can be used to start an"
- " embeddedd system."];
+%% Test that a boot file with (almost) all of OTP can be used to start an
+%% embeddedd system.
big_boot_embedded(Config) when is_list(Config) ->
{BootArg,AppsInBoot} = create_big_boot(Config),
{ok, Node} =
- ?t:start_node(big_boot_embedded, slave,
+ test_server:start_node(big_boot_embedded, slave,
[{args,"-boot "++BootArg++" -mode embedded"}]),
RemoteNodeApps =
[ {X,Y} || {X,_,Y} <-
@@ -1317,7 +1126,7 @@ big_boot_embedded(Config) when is_list(Config) ->
on_load(Config) when is_list(Config) ->
Master = on_load_test_case_process,
- Data = filename:join([?config(data_dir, Config),"on_load"]),
+ Data = filename:join([proplists:get_value(data_dir, Config),"on_load"]),
ok = file:set_cwd(Data),
up_to_date = make:all([{d,'MASTER',Master}]),
@@ -1361,7 +1170,7 @@ on_load(Config) when is_list(Config) ->
on_load_wait_for_all(Refs),
receive
Any ->
- ?t:fail({unexpected,Any})
+ ct:fail({unexpected,Any})
after 10 ->
ok
end.
@@ -1385,22 +1194,17 @@ on_load_binary(_) ->
register(Master, self()),
%% Construct, compile and pretty-print.
- Mod = on_load_binary,
+ Mod = ?FUNCTION_NAME,
File = atom_to_list(Mod) ++ ".erl",
- Forms = [{attribute,1,file,{File,1}},
- {attribute,1,module,Mod},
- {attribute,2,export,[{ok,0}]},
- {attribute,3,on_load,{init,0}},
- {function,5,init,0,
- [{clause,5,[],[],
- [{op,6,'!',
- {atom,6,Master},
- {tuple,6,[{atom,6,Mod},{call,6,{atom,6,self},[]}]}},
- {'receive',7,[{clause,8,[{atom,8,go}],[],[{atom,8,ok}]}]}]}]},
- {function,11,ok,0,[{clause,11,[],[],[{atom,11,true}]}]}],
- Forms1 = erl_parse:new_anno(Forms),
- {ok,Mod,Bin} = compile:forms(Forms1, [report]),
- [io:put_chars(erl_pp:form(F)) || F <- Forms1],
+ Tree = ?Q(["-module('@Mod@').\n",
+ "-export([ok/0]).\n",
+ "-on_load({init,0}).\n",
+ "init() ->\n",
+ " '@Master@' ! {on_load_binary,self()},\n",
+ " receive go -> ok end.\n",
+ "ok() -> true.\n"]),
+ {ok,Mod,Bin} = merl:compile(Tree),
+ merl:print(Tree),
{Pid1,Ref1} = spawn_monitor(fun() ->
code:load_binary(Mod, File, Bin),
@@ -1429,7 +1233,7 @@ on_load_embedded(Config) when is_list(Config) ->
end.
on_load_embedded_1(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% Link the on_load_app application into the lib directory.
LibRoot = code:lib_dir(),
@@ -1440,6 +1244,9 @@ on_load_embedded_1(Config) ->
case file:make_symlink(OnLoadApp, LinkName) of
{error,enotsup} ->
throw({skip,"Support for symlinks required"});
+ {error,eperm} ->
+ %% On Windows, we may not have permissions to create symlinks.
+ throw({skip,"Support for symlinks required"});
ok -> ok
end,
@@ -1484,7 +1291,7 @@ create_boot(Config, Options) ->
filename:join(LatestDir, LatestName).
create_script(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Name = PrivDir ++ "on_load_test",
Apps = application_controller:which_applications(),
{value,{_,_,KernelVer}} = lists:keysearch(kernel, 1, Apps),
@@ -1511,33 +1318,46 @@ create_big_boot(Config) ->
ok = file:set_cwd(OldDir),
{filename:join(LatestDir, LatestName),Apps}.
-% The following apps cannot be loaded
-% hipe .app references (or can reference) files that have no
-% corresponding beam file (if hipe is not enabled)
+%% The following apps cannot be loaded.
+%% hipe .app references (or can reference) files that have no
+%% corresponding beam file (if hipe is not enabled).
filter_app("hipe",_) -> false;
-% Dialyzer and typer depends on hipe
+
+%% Dialyzer and typer depends on hipe
filter_app("dialyzer",_) -> false;
filter_app("typer",_) -> false;
-% Orber requires explicit configuration
+
+%% Orber requires explicit configuration
filter_app("orber",_) -> false;
-% cos* depends on orber
+
+%% cos* depends on orber
filter_app("cos"++_,_) -> false;
-% ic has a mod instruction in the app file but no corresponding start function
+
+%% ic has a mod instruction in the app file but no corresponding start
+%% function
filter_app("ic",_) -> false;
-% Netconf has some dependency that I really do not understand (maybe like orber)
+
+%% Netconf has some dependency that I really do not understand (maybe
+%% like orber)
filter_app("netconf",_) -> false;
-% Safe has the same kind of error in the .app file as ic
+
+%% Safe has the same kind of error in the .app file as ic
filter_app("safe",_) -> false;
-% Comte cannot be started in the "usual" way
+
+%% Comte cannot be started in the "usual" way
filter_app("comte",_) -> false;
-% OS_mon does not find it's port program when running cerl
+
+%% OS_mon does not find its port program when running cerl
filter_app("os_mon",true) -> false;
-% erts is not a "real" app either =/
+
+%% erts is not a "real" app either =/
filter_app("erts",_) -> false;
-% Other apps should be OK.
+
+%% Other apps should be OK.
filter_app(_,_) -> true.
+
create_big_script(Config,Local) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Name = filename:join(PrivDir,"full_script_test"),
InitialApplications=application:loaded_applications(),
%% Applications left loaded by the application suite, unload them!
@@ -1571,7 +1391,7 @@ on_load_errors(Config) when is_list(Config) ->
Master = on_load_error_test_case_process,
register(Master, self()),
- Data = filename:join([?config(data_dir, Config),"on_load_errors"]),
+ Data = filename:join([proplists:get_value(data_dir, Config),"on_load_errors"]),
ok = file:set_cwd(Data),
up_to_date = make:all([{d,'MASTER',Master}]),
@@ -1597,7 +1417,7 @@ on_load_errors(Config) when is_list(Config) ->
%% There should be no more messages.
receive
Unexpected ->
- ?t:fail({unexpected,Unexpected})
+ ct:fail({unexpected,Unexpected})
after 10 ->
ok
end,
@@ -1626,8 +1446,164 @@ do_on_load_error(ReturnValue) ->
{undef,[{on_load_error,main,[],_}|_]} = Exit
end.
-native_early_modules(suite) -> [];
-native_early_modules(doc) -> ["Test that the native code of early loaded modules is loaded"];
+on_load_update(_Config) ->
+ {Mod,Code1} = on_load_update_code(1),
+ {module,Mod} = code:load_binary(Mod, "", Code1),
+ 42 = Mod:a(),
+ 100 = Mod:b(99),
+ 4 = erlang:trace_pattern({Mod,'_','_'}, true),
+
+ {Mod,Code2} = on_load_update_code(2),
+ {error,on_load_failure} = code:load_binary(Mod, "", Code2),
+ 42 = Mod:a(),
+ 100 = Mod:b(99),
+ {'EXIT',{undef,_}} = (catch Mod:never()),
+ 4 = erlang:trace_pattern({Mod,'_','_'}, false),
+
+ {Mod,Code3} = on_load_update_code(3),
+ {module,Mod} = code:load_binary(Mod, "", Code3),
+ 100 = Mod:c(),
+ {'EXIT',{undef,_}} = (catch Mod:a()),
+ {'EXIT',{undef,_}} = (catch Mod:b(10)),
+ {'EXIT',{undef,_}} = (catch Mod:never()),
+
+ ok.
+
+on_load_update_code(Version) ->
+ Mod = ?FUNCTION_NAME,
+ Tree = on_load_update_code_1(Version, Mod),
+ io:format("Version ~p", [Version]),
+ {ok,Mod,Code} = merl:compile(Tree),
+ merl:print(Tree),
+ io:nl(),
+ {Mod,Code}.
+
+on_load_update_code_1(1, Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-export([a/0,b/1]).\n"
+ "-on_load(f/0).\n",
+ "f() -> ok.\n",
+ "a() -> 42.\n"
+ "b(I) -> I+1.\n"]);
+on_load_update_code_1(2, Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-export([never/0]).\n"
+ "-on_load(f/0).\n",
+ "f() -> 42 = '@Mod@':a(), 1 = '@Mod@':b(0), fail.\n",
+ "never() -> never.\n"]);
+on_load_update_code_1(3, Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-export([c/0]).\n"
+ "-on_load(f/0).\n",
+ "f() -> ok.\n",
+ "c() -> 100.\n"]).
+
+on_load_purge(_Config) ->
+ Mod = ?FUNCTION_NAME,
+ register(Mod, self()),
+ Tree = ?Q(["-module('@Mod@').\n",
+ "-on_load(f/0).\n",
+ "loop() -> loop().\n",
+ "f() ->\n",
+ "'@Mod@' ! {self(),spawn(fun loop/0)},\n",
+ "receive Ack -> Ack end.\n"]),
+ merl:print(Tree),
+ {ok,Mod,Code} = merl:compile(Tree),
+ P = spawn(fun() ->
+ exit(code:load_binary(Mod, "", Code))
+ end),
+ monitor(process, P),
+ receive
+ {Pid1,Pid2} ->
+ monitor(process, Pid2),
+ Pid1 ! ack_and_failure,
+ receive
+ {'DOWN',_,process,P,Exit1} ->
+ {error,on_load_failure} = Exit1
+ end,
+ receive
+ {'DOWN',_,process,Pid2,Exit2} ->
+ io:format("~p\n", [Exit2])
+ after 10000 ->
+ ct:fail(no_down_message)
+ end
+ end.
+
+on_load_self_call(_Config) ->
+ Mod = ?FUNCTION_NAME,
+ register(Mod, self()),
+ Tree = ?Q(["-module('@Mod@').\n",
+ "-export([ext/0]).\n",
+ "-on_load(f/0).\n",
+ "f() ->\n",
+ " '@Mod@' ! (catch '@Mod@':ext()),\n",
+ " ok.\n",
+ "ext() -> good_work.\n"]),
+ merl:print(Tree),
+ {ok,Mod,Code} = merl:compile(Tree),
+
+ {'EXIT',{undef,_}} = on_load_do_load(Mod, Code),
+ good_work = on_load_do_load(Mod, Code),
+
+ ok.
+
+on_load_do_load(Mod, Code) ->
+ spawn(fun() ->
+ {module,Mod} = code:load_binary(Mod, "", Code)
+ end),
+ receive
+ Any -> Any
+ end.
+
+on_load_pending(_Config) ->
+ Mod = ?FUNCTION_NAME,
+ Tree1 = ?Q(["-module('@Mod@').\n",
+ "-on_load(f/0).\n",
+ "f() ->\n",
+ " register('@Mod@', self()),\n",
+ " receive _ -> ok end.\n"]),
+ merl:print(Tree1),
+ {ok,Mod,Code1} = merl:compile(Tree1),
+
+ Tree2 = ?Q(["-module('@Mod@').\n",
+ "-export([t/0]).\n",
+ "t() -> ok.\n"]),
+ merl:print(Tree2),
+ {ok,Mod,Code2} = merl:compile(Tree2),
+
+ Self = self(),
+ {_,Ref1} =
+ spawn_monitor(fun() ->
+ Self ! started1,
+ {module,Mod} = code:load_binary(Mod, "", Code1)
+ end),
+ receive started1 -> ok end,
+ timer:sleep(10),
+ {_,Ref2} =
+ spawn_monitor(fun() ->
+ Self ! started2,
+ {module,Mod} = code:load_binary(Mod, "", Code2),
+ ok = Mod:t()
+ end),
+ receive started2 -> ok end,
+ receive
+ Unexpected ->
+ ct:fail({unexpected,Unexpected})
+ after 100 ->
+ ok
+ end,
+ Mod ! go,
+ receive
+ {'DOWN',Ref1,process,_,normal} -> ok
+ end,
+ receive
+ {'DOWN',Ref2,process,_,normal} -> ok
+ end,
+ ok = Mod:t(),
+ ok.
+
+
+%% Test that the native code of early loaded modules is loaded.
native_early_modules(Config) when is_list(Config) ->
case erlang:system_info(hipe_architecture) of
undefined ->
@@ -1655,11 +1631,26 @@ native_early_modules_1(Architecture) ->
ok
end.
-get_mode(suite) -> [];
-get_mode(doc) -> ["Test that the mode of the code server is properly retrieved"];
+%% Test that the mode of the code server is properly retrieved.
get_mode(Config) when is_list(Config) ->
interactive = code:get_mode().
+%% Make sure that the paths for all loaded modules have been normalized.
+normalized_paths(_Config) ->
+ do_normalized_paths(erlang:loaded()).
+
+do_normalized_paths([M|Ms]) ->
+ case code:which(M) of
+ Special when is_atom(Special) ->
+ do_normalized_paths(Ms);
+ File when is_list(File) ->
+ File = filename:join([File]),
+ do_normalized_paths(Ms)
+ end;
+do_normalized_paths([]) ->
+ ok.
+
+
%%-----------------------------------------------------------------
%% error_logger handler.
%% (Copied from stdlib/test/proc_lib_SUITE.erl.)
@@ -1686,7 +1677,7 @@ terminate(_Reason, State) ->
%%%
start_node(Name, Param) ->
- ?t:start_node(Name, slave, [{args, Param}]).
+ test_server:start_node(Name, slave, [{args, Param}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
diff --git a/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict.erl b/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict.erl
index 9fb5a31358..1fcf05a0a1 100644
--- a/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict.erl
+++ b/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_app.erl b/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_app.erl
index 8012ddafb4..d164db9794 100644
--- a/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_app.erl
+++ b/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_sup.erl b/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_sup.erl
index 8c7b49644a..e659202e08 100644
--- a/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_sup.erl
+++ b/lib/kernel/test/code_SUITE_data/code_archive_dict-1.0/src/code_archive_dict_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-b/ebin/lists.erl b/lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-b/ebin/lists.erl
index 07a4ffc8b6..6accd00191 100644
--- a/lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-b/ebin/lists.erl
+++ b/lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-b/ebin/lists.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-c/ebin/code_SUITE_mult_root_module.erl b/lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-c/ebin/code_SUITE_mult_root_module.erl
index 15ff5d4896..f45e5b2dba 100644
--- a/lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-c/ebin/code_SUITE_mult_root_module.erl
+++ b/lib/kernel/test/code_SUITE_data/mult_lib_roots/first_root/my_dummy_app-c/ebin/code_SUITE_mult_root_module.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/code_a_test.erl b/lib/kernel/test/code_a_test.erl
index fa33c6f57a..bb5d814f04 100644
--- a/lib/kernel/test/code_a_test.erl
+++ b/lib/kernel/test/code_a_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/code_b_test.erl b/lib/kernel/test/code_b_test.erl
index 559698dd8e..9c362eb0d0 100644
--- a/lib/kernel/test/code_b_test.erl
+++ b/lib/kernel/test/code_b_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/disk_log_SUITE.erl b/lib/kernel/test/disk_log_SUITE.erl
index 9988347581..f7ad9c0c04 100644
--- a/lib/kernel/test/disk_log_SUITE.erl
+++ b/lib/kernel/test/disk_log_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(disk_log_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -29,10 +29,10 @@
-define(config(X,Y), foo).
-define(t,test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
--define(privdir(Conf), ?config(priv_dir, Conf)).
--define(datadir(Conf), ?config(data_dir, Conf)).
+-define(privdir(Conf), proplists:get_value(priv_dir, Conf)).
+-define(datadir(Conf), proplists:get_value(data_dir, Conf)).
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -102,8 +102,6 @@
-export([client/4]).
--define(default_timeout, ?t:minutes(1)).
-
%% error_logger
-export([init/1,
handle_event/2, handle_call/2, handle_info/2,
@@ -139,7 +137,9 @@
change_size_after, default_size]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[{group, halt_int}, {group, wrap_int},
@@ -194,259 +194,229 @@ end_per_group(_GroupName, Config) ->
-init_per_testcase(Case, Config) ->
- case should_skip(Case,Config) of
- true ->
- CS = check_nfs(Config),
- {skipped, lists:flatten
- (io_lib:format
- ("The test does not work "
- "with current NFS cache size (~w),"
- " to get this test to run, "
- "~s the NFS cache size~n",
- [CS, case CS of
- 0 ->
- "enlarge";
- _ ->
- "zero"
- end]))};
- _ ->
- Dog=?t:timetrap(?t:minutes(2)),
- [{watchdog, Dog}|Config]
- end.
+init_per_testcase(_Case, Config) ->
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-halt_int_inf(suite) -> [];
-halt_int_inf(doc) -> ["Test simple halt disk log, size infinity"];
+%% Test simple halt disk log, size infinity.
halt_int_inf(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line ok = disk_log:start(),
+ ok = disk_log:start(),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal},
- {file, File}]),
- ?line simple_log(a),
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal},
+ {file, File}]),
+ simple_log(a),
+ ok = disk_log:close(a),
+ ok = file:delete(File).
-halt_int_sz_1(suite) -> [];
-halt_int_sz_1(doc) -> ["Test simple halt disk log, size defined"];
+%% Test simple halt disk log, size defined.
halt_int_sz_1(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,18000},
- {format,internal},
- {file, File}]),
- ?line simple_log(a),
- ?line ok = disk_log:truncate(a),
- ?line [] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,18000},
+ {format,internal},
+ {file, File}]),
+ simple_log(a),
+ ok = disk_log:truncate(a),
+ [] = get_all_terms(a),
T1 = mk_bytes(10000),
T2 = mk_bytes(5000),
- ?line ok = disk_log:log(a, T1),
- ?line case get_all_terms(a) of
- [T1] ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1, [T1]})
- end,
- ?line ok = disk_log:log(a, T2),
- ?line {error, {full, a}} = disk_log:log(a, T1),
- ?line ok = disk_log:alog(a, T1),
- ?line case get_all_terms(a) of
- [T1, T2] ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2, [T1, T2]})
- end,
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ ok = disk_log:log(a, T1),
+ case get_all_terms(a) of
+ [T1] ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1, [T1]})
+ end,
+ ok = disk_log:log(a, T2),
+ {error, {full, a}} = disk_log:log(a, T1),
+ ok = disk_log:alog(a, T1),
+ case get_all_terms(a) of
+ [T1, T2] ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2, [T1, T2]})
+ end,
+ ok = disk_log:close(a),
+ ok = file:delete(File).
-halt_int_sz_2(suite) -> [];
-halt_int_sz_2(doc) -> ["Test simple halt disk log, size ~8192"];
+%% Test simple halt disk log, size ~8192.
halt_int_sz_2(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File1 = filename:join(Dir, "a.LOG"),
File2 = filename:join(Dir, "b.LOG"),
File3 = filename:join(Dir, "c.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,8191},
- {format,internal},
- {file, File1}]),
- ?line {ok, b} = disk_log:open([{name,b}, {type,halt}, {size,8192},
- {format,internal},
- {file, File2}]),
- ?line {ok, c} = disk_log:open([{name,c}, {type,halt}, {size,8193},
- {format,internal},
- {file, File3}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,8191},
+ {format,internal},
+ {file, File1}]),
+ {ok, b} = disk_log:open([{name,b}, {type,halt}, {size,8192},
+ {format,internal},
+ {file, File2}]),
+ {ok, c} = disk_log:open([{name,c}, {type,halt}, {size,8193},
+ {format,internal},
+ {file, File3}]),
T1 = mk_bytes(8191-16), % 16 is size of header + magics for 1 item
T2 = mk_bytes(8192-16),
T3 = mk_bytes(8193-16),
- ?line ok = disk_log:log(a, T1),
- ?line ok = disk_log:log(b, T2),
- ?line ok = disk_log:log(c, T3),
- ?line case get_all_terms(a) of
- [T1] ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1, [T1]})
- end,
- ?line case get_all_terms(b) of
- [T2] ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2, [T2]})
- end,
- ?line case get_all_terms(c) of
- [T3] ->
- ok;
- E3 ->
- test_server_fail({bad_terms, E3, [T3]})
- end,
- ?line ok = disk_log:truncate(a),
- ?line ok = disk_log:truncate(b),
- ?line {error, {full, a}} = disk_log:log(a, T2),
- ?line {error, {full, b}} = disk_log:log(b, T3),
- ?line [] = get_all_terms(a),
- ?line [] = get_all_terms(b),
- ?line ok = disk_log:close(a),
- ?line ok = disk_log:close(b),
- ?line ok = disk_log:close(c),
- ?line ok = file:delete(File1),
- ?line ok = file:delete(File2),
- ?line ok = file:delete(File3),
+ ok = disk_log:log(a, T1),
+ ok = disk_log:log(b, T2),
+ ok = disk_log:log(c, T3),
+ case get_all_terms(a) of
+ [T1] ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1, [T1]})
+ end,
+ case get_all_terms(b) of
+ [T2] ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2, [T2]})
+ end,
+ case get_all_terms(c) of
+ [T3] ->
+ ok;
+ E3 ->
+ test_server_fail({bad_terms, E3, [T3]})
+ end,
+ ok = disk_log:truncate(a),
+ ok = disk_log:truncate(b),
+ {error, {full, a}} = disk_log:log(a, T2),
+ {error, {full, b}} = disk_log:log(b, T3),
+ [] = get_all_terms(a),
+ [] = get_all_terms(b),
+ ok = disk_log:close(a),
+ ok = disk_log:close(b),
+ ok = disk_log:close(c),
+ ok = file:delete(File1),
+ ok = file:delete(File2),
+ ok = file:delete(File3),
ok.
-halt_int_ro(suite) -> [];
-halt_int_ro(doc) -> ["Test simple halt disk log, read only, internal"];
+%% Test simple halt disk log, read only, internal.
halt_int_ro(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal}, {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal}, {file, File}]),
simple_log(a),
- ?line ok = disk_log:close(a),
+ ok = disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal}, {file, File},
- {mode,read_only}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal}, {file, File},
+ {mode,read_only}]),
T1 = "not allowed to write",
- ?line {error, {read_only_mode, a}} = disk_log:log(a, T1),
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ {error, {read_only_mode, a}} = disk_log:log(a, T1),
+ ok = disk_log:close(a),
+ ok = file:delete(File).
-halt_ext_ro(suite) -> [];
-halt_ext_ro(doc) -> ["Test simple halt disk log, read only, external"];
+%% Test simple halt disk log, read only, external.
halt_ext_ro(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,external}, {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,external}, {file, File}]),
xsimple_log(File, a),
- ?line ok = disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,external}, {file, File},
- {mode,read_only}]),
+ ok = disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,external}, {file, File},
+ {mode,read_only}]),
T1 = "not allowed to write",
- ?line {error, {read_only_mode, a}} = disk_log:blog(a, T1),
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ {error, {read_only_mode, a}} = disk_log:blog(a, T1),
+ ok = disk_log:close(a),
+ ok = file:delete(File).
-wrap_int_ro(suite) -> [];
-wrap_int_ro(doc) -> ["Test simple wrap disk log, read only, internal"];
+%% Test simple wrap disk log, read only, internal.
wrap_int_ro(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
- {format,internal}, {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
+ {format,internal}, {file, File}]),
simple_log(a),
- ?line ok = disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
- {format,internal}, {file, File}, {mode,read_only}]),
+ ok = disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
+ {format,internal}, {file, File}, {mode,read_only}]),
T1 = "not allowed to write",
- ?line {error, {read_only_mode, a}} = disk_log:log(a, T1),
- ?line ok = disk_log:close(a),
- ?line del(File, 4).
+ {error, {read_only_mode, a}} = disk_log:log(a, T1),
+ ok = disk_log:close(a),
+ del(File, 4).
-wrap_ext_ro(suite) -> [];
-wrap_ext_ro(doc) -> ["Test simple wrap disk log, read only, external"];
+%% Test simple wrap disk log, read only, external.
wrap_ext_ro(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
- {format,external}, {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
+ {format,external}, {file, File}]),
x2simple_log(File ++ ".1", a),
- ?line ok = disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
- {format,external}, {file, File},
- {mode,read_only}]),
+ ok = disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
+ {format,external}, {file, File},
+ {mode,read_only}]),
T1 = "not allowed to write",
- ?line {error, {read_only_mode, a}} = disk_log:blog(a, T1),
- ?line {error, {read_only_mode, a}} = disk_log:inc_wrap_file(a),
- ?line ok = disk_log:close(a),
+ {error, {read_only_mode, a}} = disk_log:blog(a, T1),
+ {error, {read_only_mode, a}} = disk_log:inc_wrap_file(a),
+ ok = disk_log:close(a),
del(File, 4).
-halt_trunc(suite) -> [];
-halt_trunc(doc) -> ["Test truncation of halt disk log"];
+%% Test truncation of halt disk log.
halt_trunc(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal}, {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal}, {file, File}]),
simple_log(a),
- ?line ok = disk_log:close(a),
- ?line {error,{badarg,repair_read_only}} =
+ ok = disk_log:close(a),
+ {error,{badarg,repair_read_only}} =
disk_log:open([{name,a}, {type,halt}, {size,infinity},
{repair, truncate}, {format,internal},
{file, File}, {mode,read_only}]),
- ?line ok = file:delete(File).
+ ok = file:delete(File).
-halt_misc(suite) -> [];
-halt_misc(doc) -> ["Test truncation of halt disk log"];
+%% Test truncation of halt disk log.
halt_misc(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal}, {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal}, {file, File}]),
simple_log(a),
- ?line ok = disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal}, {file, File},
- {mode,read_only}]),
+ ok = disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal}, {file, File},
+ {mode,read_only}]),
T1 = "not allowed to write",
- ?line {error, {read_only_mode, a}} = disk_log:log(a, T1),
- ?line {error, {read_only_mode, a}} = disk_log:sync(a),
- ?line {error, {read_only_mode, a}} = disk_log:reopen(a, "b.LOG"),
- ?line {error, {read_only_mode, a}} =
+ {error, {read_only_mode, a}} = disk_log:log(a, T1),
+ {error, {read_only_mode, a}} = disk_log:sync(a),
+ {error, {read_only_mode, a}} = disk_log:reopen(a, "b.LOG"),
+ {error, {read_only_mode, a}} =
disk_log:change_header(a, {head,header}),
- ?line {error, {read_only_mode, a}} =
+ {error, {read_only_mode, a}} =
disk_log:change_size(a, infinity),
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ ok = disk_log:close(a),
+ ok = file:delete(File).
-halt_ro_alog(suite) -> [];
-halt_ro_alog(doc) -> ["Test truncation of halt disk log, read only"];
+%% Test truncation of halt disk log, read only.
halt_ro_alog(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal}, {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal}, {file, File}]),
simple_log(a),
- ?line ok = disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {notify,true}, {format,internal},
- {file, File}, {mode,read_only}]),
+ ok = disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {notify,true}, {format,internal},
+ {file, File}, {mode,read_only}]),
T1 = "not allowed to write",
- ?line ok = disk_log:alog(a, T1),
- ?line ok = halt_ro_alog_wait_notify(a, T1),
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ ok = disk_log:alog(a, T1),
+ ok = halt_ro_alog_wait_notify(a, T1),
+ ok = disk_log:close(a),
+ ok = file:delete(File).
halt_ro_alog_wait_notify(Log, T) ->
Term = term_to_binary(T),
@@ -459,23 +429,22 @@ halt_ro_alog_wait_notify(Log, T) ->
failed
end.
-halt_ro_balog(suite) -> [];
-halt_ro_balog(doc) -> ["Test truncation of halt disk log, read only"];
+%% Test truncation of halt disk log, read only.
halt_ro_balog(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal}, {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal}, {file, File}]),
simple_log(a),
- ?line ok = disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {notify,true}, {format,external},
- {file, File}, {mode,read_only}]),
+ ok = disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {notify,true}, {format,external},
+ {file, File}, {mode,read_only}]),
T1 = "not allowed to write",
- ?line ok = disk_log:balog(a, T1),
- ?line ok = halt_ro_balog_wait_notify(a, T1),
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ ok = disk_log:balog(a, T1),
+ ok = halt_ro_balog_wait_notify(a, T1),
+ ok = disk_log:close(a),
+ ok = file:delete(File).
halt_ro_balog_wait_notify(Log, T) ->
Term = list_to_binary(T),
@@ -488,127 +457,123 @@ halt_ro_balog_wait_notify(Log, T) ->
failed
end.
-halt_ro_crash(suite) -> [];
-halt_ro_crash(doc) -> ["Test truncation of halt disk log, read only, repair"];
+%% Test truncation of halt disk log, read only, repair.
halt_ro_crash(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line file:delete(File),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,internal},{file, File}]),
+ file:delete(File),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,internal},{file, File}]),
simple_log(a),
- ?line ok = disk_log:close(a),
+ ok = disk_log:close(a),
crash(File, 10),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {notify,true}, {format,internal},
- {file, File}, {mode,read_only}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {notify,true}, {format,internal},
+ {file, File}, {mode,read_only}]),
- ?line Error1 = {error, {read_only_mode, a}} = disk_log:truncate(a),
- ?line "The disk log" ++ _ = format_error(Error1),
+ Error1 = {error, {read_only_mode, a}} = disk_log:truncate(a),
+ "The disk log" ++ _ = format_error(Error1),
%% crash/1 sets the length of the first item to something big (2.5 kb).
%% In R6B, binary_to_term accepts garbage at the end of the binary,
%% which means that the first item is recognized!
%% This is how it was before R6B:
- %% ?line {C1,T1,15} = disk_log:chunk(a,start),
- %% ?line {C2,T2} = disk_log:chunk(a,C1),
+ %% {C1,T1,15} = disk_log:chunk(a,start),
+ %% {C2,T2} = disk_log:chunk(a,C1),
{C1,_OneItem,7478} = disk_log:chunk(a,start),
{C2, [], 7} = disk_log:chunk(a,C1),
- ?line eof = disk_log:chunk(a,C2),
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ eof = disk_log:chunk(a,C2),
+ ok = disk_log:close(a),
+ ok = file:delete(File).
-wrap_int_1(suite) -> [];
-wrap_int_1(doc) -> ["Test wrap disk log, internal"];
+%% Test wrap disk log, internal.
wrap_int_1(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
- {format,internal},
- {file, File}]),
- ?line [_] =
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
+ {format,internal},
+ {file, File}]),
+ [_] =
lists:filter(fun(P) -> disk_log:pid2name(P) =/= undefined end,
erlang:processes()),
simple_log(a),
- ?line ok = disk_log:close(a),
+ ok = disk_log:close(a),
del(File, 4),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
- {format,internal},
- {file, File}]),
- ?line [] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
+ {format,internal},
+ {file, File}]),
+ [] = get_all_terms(a),
T1 = mk_bytes(10000), % file 2
T2 = mk_bytes(5000), % file 3
T3 = mk_bytes(4000), % file 4
T4 = mk_bytes(2000), % file 4
T5 = mk_bytes(5000), % file 1
T6 = mk_bytes(5000), % file 2
- ?line ok = disk_log:log(a, T1),
- ?line ok = disk_log:log(a, T2),
- ?line ok = disk_log:log(a, T3),
- ?line ok = disk_log:log_terms(a, [T4, T5, T6]),
- ?line case get_all_terms(a) of
- [T2,T3,T4,T5,T6] ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1, [T2,T3,T4,T5,T6]})
- end,
- ?line ok = disk_log:close(a),
+ ok = disk_log:log(a, T1),
+ ok = disk_log:log(a, T2),
+ ok = disk_log:log(a, T3),
+ ok = disk_log:log_terms(a, [T4, T5, T6]),
+ case get_all_terms(a) of
+ [T2,T3,T4,T5,T6] ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1, [T2,T3,T4,T5,T6]})
+ end,
+ ok = disk_log:close(a),
del(File, 4).
-wrap_int_2(suite) -> [];
-wrap_int_2(doc) -> ["Test wrap disk log, internal"];
+%% Test wrap disk log, internal.
wrap_int_2(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File1 = filename:join(Dir, "a.LOG"),
File2 = filename:join(Dir, "b.LOG"),
File3 = filename:join(Dir, "c.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8191,3}},
- {format,internal},
- {file, File1}]),
- ?line {ok, b} = disk_log:open([{name,b}, {type,wrap}, {size,{8192,3}},
- {format,internal},
- {file, File2}]),
- ?line {ok, c} = disk_log:open([{name,c}, {type,wrap}, {size,{8193,3}},
- {format,internal},
- {file, File3}]),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8191,3}},
+ {format,internal},
+ {file, File1}]),
+ {ok, b} = disk_log:open([{name,b}, {type,wrap}, {size,{8192,3}},
+ {format,internal},
+ {file, File2}]),
+ {ok, c} = disk_log:open([{name,c}, {type,wrap}, {size,{8193,3}},
+ {format,internal},
+ {file, File3}]),
T1 = mk_bytes(8191-16), % 16 is size of header + magics for 1 item
T2 = mk_bytes(8192-16),
T3 = mk_bytes(8193-16),
- ?line ok = disk_log:log(a, T1),
- ?line ok = disk_log:log(b, T2),
- ?line ok = disk_log:log(c, T3),
- ?line case get_all_terms(a) of
- [T1] ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1, [T1]})
- end,
- ?line case get_all_terms(b) of
- [T2] ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2, [T2]})
- end,
- ?line case get_all_terms(c) of
- [T3] ->
- ok;
- E3 ->
- test_server_fail({bad_terms, E3, [T3]})
- end,
- ?line ok = disk_log:close(a),
- ?line ok = disk_log:close(b),
- ?line ok = disk_log:close(c),
+ ok = disk_log:log(a, T1),
+ ok = disk_log:log(b, T2),
+ ok = disk_log:log(c, T3),
+ case get_all_terms(a) of
+ [T1] ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1, [T1]})
+ end,
+ case get_all_terms(b) of
+ [T2] ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2, [T2]})
+ end,
+ case get_all_terms(c) of
+ [T3] ->
+ ok;
+ E3 ->
+ test_server_fail({bad_terms, E3, [T3]})
+ end,
+ ok = disk_log:close(a),
+ ok = disk_log:close(b),
+ ok = disk_log:close(c),
del(File1, 3),
del(File2, 3),
del(File3, 3).
-inc_wrap_file(suite) -> [];
-inc_wrap_file(doc) -> ["Test disk log, force a change to next file"];
+%% Test disk log, force a change to next file.
inc_wrap_file(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File1 = filename:join(Dir, "a.LOG"),
@@ -616,262 +581,257 @@ inc_wrap_file(Conf) when is_list(Conf) ->
File3 = filename:join(Dir, "c.LOG"),
%% Test that halt logs gets an error message
- ?line {ok, a} = disk_log:open([{name, a}, {type, halt},
- {format, internal},
- {file, File1}]),
- ?line ok = disk_log:log(a, "message one"),
- ?line {error, {halt_log, a}} = disk_log:inc_wrap_file(a),
+ {ok, a} = disk_log:open([{name, a}, {type, halt},
+ {format, internal},
+ {file, File1}]),
+ ok = disk_log:log(a, "message one"),
+ {error, {halt_log, a}} = disk_log:inc_wrap_file(a),
%% test an internally formatted wrap log file
- ?line {ok, b} = disk_log:open([{name, b}, {type, wrap}, {size, {100,3}},
- {format, internal}, {head, 'thisisahead'},
- {file, File2}]),
- ?line ok = disk_log:log(b, "message one"),
- ?line ok = disk_log:inc_wrap_file(b),
- ?line ok = disk_log:log(b, "message two"),
- ?line ok = disk_log:inc_wrap_file(b),
- ?line ok = disk_log:log(b, "message three"),
- ?line ok = disk_log:inc_wrap_file(b),
- ?line ok = disk_log:log(b, "message four"),
- ?line T1 = get_all_terms(b),
- ?line ['thisisahead', "message two",
- 'thisisahead', "message three",
- 'thisisahead', "message four"] = T1,
+ {ok, b} = disk_log:open([{name, b}, {type, wrap}, {size, {100,3}},
+ {format, internal}, {head, 'thisisahead'},
+ {file, File2}]),
+ ok = disk_log:log(b, "message one"),
+ ok = disk_log:inc_wrap_file(b),
+ ok = disk_log:log(b, "message two"),
+ ok = disk_log:inc_wrap_file(b),
+ ok = disk_log:log(b, "message three"),
+ ok = disk_log:inc_wrap_file(b),
+ ok = disk_log:log(b, "message four"),
+ T1 = get_all_terms(b),
+ ['thisisahead', "message two",
+ 'thisisahead', "message three",
+ 'thisisahead', "message four"] = T1,
%% test an externally formatted wrap log file
- ?line {ok, c} = disk_log:open([{name, c}, {type, wrap}, {size, {100,3}},
- {format,external}, {head,"this is a head "},
- {file, File3}]),
- ?line ok = disk_log:blog(c, "message one"),
- ?line ok = disk_log:inc_wrap_file(c),
- ?line ok = disk_log:blog(c, "message two"),
- ?line ok = disk_log:inc_wrap_file(c),
- ?line ok = disk_log:blog(c, "message three"),
- ?line ok = disk_log:inc_wrap_file(c),
- ?line ok = disk_log:blog(c, "message four"),
- ?line ok = disk_log:sync(c),
- ?line {ok, Fd31} = file:open(File3 ++ ".1", [read]),
- ?line {ok,"this is a head message four"} = file:read(Fd31, 200),
- ?line {ok, Fd32} = file:open(File3 ++ ".2", [read]),
- ?line {ok,"this is a head message two"} = file:read(Fd32, 200),
- ?line {ok, Fd33} = file:open(File3 ++ ".3", [read]),
- ?line {ok,"this is a head message three"} = file:read(Fd33, 200),
- ?line ok = file:close(Fd31),
- ?line ok = file:close(Fd32),
- ?line ok = file:close(Fd33),
-
- ?line ok = disk_log:close(a),
- ?line ok = disk_log:close(b),
- ?line ok = disk_log:close(c),
- ?line ok = file:delete(File1),
+ {ok, c} = disk_log:open([{name, c}, {type, wrap}, {size, {100,3}},
+ {format,external}, {head,"this is a head "},
+ {file, File3}]),
+ ok = disk_log:blog(c, "message one"),
+ ok = disk_log:inc_wrap_file(c),
+ ok = disk_log:blog(c, "message two"),
+ ok = disk_log:inc_wrap_file(c),
+ ok = disk_log:blog(c, "message three"),
+ ok = disk_log:inc_wrap_file(c),
+ ok = disk_log:blog(c, "message four"),
+ ok = disk_log:sync(c),
+ {ok, Fd31} = file:open(File3 ++ ".1", [read]),
+ {ok,"this is a head message four"} = file:read(Fd31, 200),
+ {ok, Fd32} = file:open(File3 ++ ".2", [read]),
+ {ok,"this is a head message two"} = file:read(Fd32, 200),
+ {ok, Fd33} = file:open(File3 ++ ".3", [read]),
+ {ok,"this is a head message three"} = file:read(Fd33, 200),
+ ok = file:close(Fd31),
+ ok = file:close(Fd32),
+ ok = file:close(Fd33),
+
+ ok = disk_log:close(a),
+ ok = disk_log:close(b),
+ ok = disk_log:close(c),
+ ok = file:delete(File1),
del(File2, 3),
del(File3, 3).
-halt_ext_inf(suite) -> [];
-halt_ext_inf(doc) -> ["Test halt disk log, external, infinity"];
+%% Test halt disk log, external, infinity.
halt_ext_inf(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
- {format,external},
- {file, File}]),
- ?line xsimple_log(File, a),
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,infinity},
+ {format,external},
+ {file, File}]),
+ xsimple_log(File, a),
+ ok = disk_log:close(a),
+ ok = file:delete(File).
-halt_ext_sz_1(suite) -> [];
-halt_ext_sz_1(doc) -> ["Test halt disk log, external, size defined"];
+%% Test halt disk log, external, size defined.
halt_ext_sz_1(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,18000},
- {format,external},
- {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,18000},
+ {format,external},
+ {file, File}]),
xsimple_log(File, a),
- ?line ok = disk_log:truncate(a),
- ?line [] = get_list(File, a),
+ ok = disk_log:truncate(a),
+ [] = get_list(File, a),
{B1, T1} = x_mk_bytes(10000),
{B2, T2} = x_mk_bytes(5000),
{B3, T3} = x_mk_bytes(1000),
- ?line ok = disk_log:blog(a, B1),
- ?line case get_list(File, a) of
- T1 ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1, T1})
- end,
- ?line ok = disk_log:blog(a, B2),
- ?line {error, {full, a}} = disk_log:blog_terms(a, [B3,B3,B1]),
- ?line ok = disk_log:balog(a, B1),
- ?line Tmp = T1 ++ T2 ++ T3 ++ T3,
- ?line case get_list(File, a) of
- Tmp ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2, Tmp})
- end,
- ?line ok = disk_log:close(a),
- ?line ok = file:delete(File).
+ ok = disk_log:blog(a, B1),
+ case get_list(File, a) of
+ T1 ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1, T1})
+ end,
+ ok = disk_log:blog(a, B2),
+ {error, {full, a}} = disk_log:blog_terms(a, [B3,B3,B1]),
+ ok = disk_log:balog(a, B1),
+ Tmp = T1 ++ T2 ++ T3 ++ T3,
+ case get_list(File, a) of
+ Tmp ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2, Tmp})
+ end,
+ ok = disk_log:close(a),
+ ok = file:delete(File).
-halt_ext_sz_2(suite) -> [];
-halt_ext_sz_2(doc) -> ["Test halt disk log, external, size defined"];
+%% Test halt disk log, external, size defined.
halt_ext_sz_2(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File1 = filename:join(Dir, "a.LOG"),
File2 = filename:join(Dir, "b.LOG"),
File3 = filename:join(Dir, "c.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,8191},
- {format,external},
- {file, File1}]),
- ?line {ok, b} = disk_log:open([{name,b}, {type,halt}, {size,8192},
- {format,external},
- {file, File2}]),
- ?line {ok, c} = disk_log:open([{name,c}, {type,halt}, {size,8193},
- {format,external},
- {file, File3}]),
+ {ok, a} = disk_log:open([{name,a}, {type,halt}, {size,8191},
+ {format,external},
+ {file, File1}]),
+ {ok, b} = disk_log:open([{name,b}, {type,halt}, {size,8192},
+ {format,external},
+ {file, File2}]),
+ {ok, c} = disk_log:open([{name,c}, {type,halt}, {size,8193},
+ {format,external},
+ {file, File3}]),
{B1, T1} = x_mk_bytes(8191),
{B2, T2} = x_mk_bytes(8192),
{B3, T3} = x_mk_bytes(8193),
- ?line ok = disk_log:blog(a, B1),
- ?line ok = disk_log:blog(b, B2),
- ?line ok = disk_log:blog(c, B3),
- ?line case get_list(File1, a) of
- T1 ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1, T1})
- end,
- ?line case get_list(File2, b) of
- T2 ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2, T2})
- end,
- ?line case get_list(File3, c) of
- T3 ->
- ok;
- E3 ->
- test_server_fail({bad_terms, E3, T3})
- end,
- ?line ok = disk_log:truncate(a),
- ?line ok = disk_log:truncate(b),
- ?line {error, {full, a}} = disk_log:blog(a, B2),
- ?line Error1 = {error, {full, b}} = disk_log:blog(b, B3),
- ?line "The halt log" ++ _ = format_error(Error1),
- ?line true = info(b, full, false),
- ?line [] = get_list(File1, a),
- ?line [] = get_list(File2, b),
- ?line ok = disk_log:close(a),
- ?line ok = disk_log:close(b),
- ?line ok = disk_log:close(c),
- ?line ok = file:delete(File1),
- ?line ok = file:delete(File2),
- ?line ok = file:delete(File3),
+ ok = disk_log:blog(a, B1),
+ ok = disk_log:blog(b, B2),
+ ok = disk_log:blog(c, B3),
+ case get_list(File1, a) of
+ T1 ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1, T1})
+ end,
+ case get_list(File2, b) of
+ T2 ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2, T2})
+ end,
+ case get_list(File3, c) of
+ T3 ->
+ ok;
+ E3 ->
+ test_server_fail({bad_terms, E3, T3})
+ end,
+ ok = disk_log:truncate(a),
+ ok = disk_log:truncate(b),
+ {error, {full, a}} = disk_log:blog(a, B2),
+ Error1 = {error, {full, b}} = disk_log:blog(b, B3),
+ "The halt log" ++ _ = format_error(Error1),
+ true = info(b, full, false),
+ [] = get_list(File1, a),
+ [] = get_list(File2, b),
+ ok = disk_log:close(a),
+ ok = disk_log:close(b),
+ ok = disk_log:close(c),
+ ok = file:delete(File1),
+ ok = file:delete(File2),
+ ok = file:delete(File3),
ok.
-wrap_ext_1(suite) -> [];
-wrap_ext_1(doc) -> ["Test wrap disk log, external, size defined"];
+%% Test wrap disk log, external, size defined.
wrap_ext_1(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
- {format,external},
- {file, File}]),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
+ {format,external},
+ {file, File}]),
x2simple_log(File ++ ".1", a),
- ?line ok = disk_log:close(a),
-% del(File, 4),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
- {format,external},
- {file, File}]),
+ ok = disk_log:close(a),
+ %% del(File, 4),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8000, 4}},
+ {format,external},
+ {file, File}]),
{B1, _T1} = x_mk_bytes(10000), % file 2
{B2, T2} = x_mk_bytes(5000), % file 3
{B3, T3} = x_mk_bytes(4000), % file 4
{B4, T4} = x_mk_bytes(2000), % file 4
{B5, T5} = x_mk_bytes(5000), % file 1
{B6, T6} = x_mk_bytes(5000), % file 2
- ?line ok = disk_log:blog(a, B1),
- ?line ok = disk_log:blog(a, B2),
- ?line ok = disk_log:blog(a, B3),
- ?line ok = disk_log:blog_terms(a, [B4, B5, B6]),
- ?line case get_list(File ++ ".3", a) of
- T2 ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2, T2})
- end,
- ?line T34 = T3 ++ T4,
- ?line case get_list(File ++ ".4", a) of
- T34 ->
- ok;
- E34 ->
- test_server_fail({bad_terms, E34, T34})
- end,
- ?line case get_list(File ++ ".1", a) of
- T5 ->
- ok;
- E5 ->
- test_server_fail({bad_terms, E5, T5})
- end,
- ?line case get_list(File ++ ".2", a) of
- T6 ->
- ok;
- E6 ->
- test_server_fail({bad_terms, E6, T6})
- end,
- ?line ok = disk_log:close(a),
+ ok = disk_log:blog(a, B1),
+ ok = disk_log:blog(a, B2),
+ ok = disk_log:blog(a, B3),
+ ok = disk_log:blog_terms(a, [B4, B5, B6]),
+ case get_list(File ++ ".3", a) of
+ T2 ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2, T2})
+ end,
+ T34 = T3 ++ T4,
+ case get_list(File ++ ".4", a) of
+ T34 ->
+ ok;
+ E34 ->
+ test_server_fail({bad_terms, E34, T34})
+ end,
+ case get_list(File ++ ".1", a) of
+ T5 ->
+ ok;
+ E5 ->
+ test_server_fail({bad_terms, E5, T5})
+ end,
+ case get_list(File ++ ".2", a) of
+ T6 ->
+ ok;
+ E6 ->
+ test_server_fail({bad_terms, E6, T6})
+ end,
+ ok = disk_log:close(a),
del(File, 4).
-wrap_ext_2(suite) -> [];
-wrap_ext_2(doc) -> ["Test wrap disk log, external, size defined"];
+%% Test wrap disk log, external, size defined.
wrap_ext_2(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File1 = filename:join(Dir, "a.LOG"),
File2 = filename:join(Dir, "b.LOG"),
File3 = filename:join(Dir, "c.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8191,3}},
- {format,external},
- {file, File1}]),
- ?line {ok, b} = disk_log:open([{name,b}, {type,wrap}, {size,{8192,3}},
- {format,external},
- {file, File2}]),
- ?line {ok, c} = disk_log:open([{name,c}, {type,wrap}, {size,{8193,3}},
- {format,external},
- {file, File3}]),
+ {ok, a} = disk_log:open([{name,a}, {type,wrap}, {size,{8191,3}},
+ {format,external},
+ {file, File1}]),
+ {ok, b} = disk_log:open([{name,b}, {type,wrap}, {size,{8192,3}},
+ {format,external},
+ {file, File2}]),
+ {ok, c} = disk_log:open([{name,c}, {type,wrap}, {size,{8193,3}},
+ {format,external},
+ {file, File3}]),
{B1, T1} = x_mk_bytes(8191),
{B2, T2} = x_mk_bytes(8192),
{B3, T3} = x_mk_bytes(8193),
- ?line ok = disk_log:blog(a, B1),
- ?line ok = disk_log:blog(b, B2),
- ?line ok = disk_log:blog(c, B3),
- ?line case get_list(File1 ++ ".1", a) of
- T1 ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1, T1})
- end,
- ?line case get_list(File2 ++ ".1", b) of
- T2 ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2, T2})
- end,
- ?line case get_list(File3 ++ ".1", c) of
- T3 ->
- ok;
- E3 ->
- test_server_fail({bad_terms, E3, T3})
- end,
- ?line ok = disk_log:close(a),
- ?line ok = disk_log:close(b),
- ?line ok = disk_log:close(c),
- ?line del(File1, 3),
- ?line del(File2, 3),
- ?line del(File3, 3),
+ ok = disk_log:blog(a, B1),
+ ok = disk_log:blog(b, B2),
+ ok = disk_log:blog(c, B3),
+ case get_list(File1 ++ ".1", a) of
+ T1 ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1, T1})
+ end,
+ case get_list(File2 ++ ".1", b) of
+ T2 ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2, T2})
+ end,
+ case get_list(File3 ++ ".1", c) of
+ T3 ->
+ ok;
+ E3 ->
+ test_server_fail({bad_terms, E3, T3})
+ end,
+ ok = disk_log:close(a),
+ ok = disk_log:close(b),
+ ok = disk_log:close(c),
+ del(File1, 3),
+ del(File2, 3),
+ del(File3, 3),
ok.
simple_log(Log) ->
@@ -879,61 +839,61 @@ simple_log(Log) ->
T2 = hopp,
T3 = {tjena, 12},
T4 = mk_bytes(10000),
- ?line ok = disk_log:log(Log, T1),
- ?line ok = disk_log:log_terms(Log, [T2, T3]),
- ?line case get_all_terms(Log) of
- [T1, T2, T3] ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1, [T1, T2, T3]})
- end,
- ?line ok = disk_log:log(a, T4),
- ?line case get_all_terms(Log) of
- [T1, T2, T3, T4] ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2, [T1, T2, T3, T4]})
- end.
+ ok = disk_log:log(Log, T1),
+ ok = disk_log:log_terms(Log, [T2, T3]),
+ case get_all_terms(Log) of
+ [T1, T2, T3] ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1, [T1, T2, T3]})
+ end,
+ ok = disk_log:log(a, T4),
+ case get_all_terms(Log) of
+ [T1, T2, T3, T4] ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2, [T1, T2, T3, T4]})
+ end.
xsimple_log(File, Log) ->
T1 = "hej",
T2 = list_to_binary("hopp"),
T3 = list_to_binary(["sena", list_to_binary("sejer")]),
T4 = list_to_binary(By = mk_bytes(10000)),
- ?line ok = disk_log:blog(Log, T1),
- ?line ok = disk_log:blog_terms(Log, [T2, T3]),
- ?line X = "hejhoppsenasejer",
- ?line X2 = get_list(File, Log),
- ?line case X2 of
- X -> ok;
- Z1 -> test_server_fail({bad_terms, Z1, X2})
- end,
- ?line ok = disk_log:blog(Log, T4),
- ?line Tmp = get_list(File, Log),
- ?line case X ++ By of
- Tmp -> ok;
- Z2 -> test_server_fail({bad_terms, Z2, X ++ By})
- end.
+ ok = disk_log:blog(Log, T1),
+ ok = disk_log:blog_terms(Log, [T2, T3]),
+ X = "hejhoppsenasejer",
+ X2 = get_list(File, Log),
+ case X2 of
+ X -> ok;
+ Z1 -> test_server_fail({bad_terms, Z1, X2})
+ end,
+ ok = disk_log:blog(Log, T4),
+ Tmp = get_list(File, Log),
+ case X ++ By of
+ Tmp -> ok;
+ Z2 -> test_server_fail({bad_terms, Z2, X ++ By})
+ end.
x2simple_log(File, Log) ->
T1 = "hej",
T2 = list_to_binary("hopp"),
T3 = list_to_binary(["sena", list_to_binary("sejer")]),
T4 = list_to_binary(By = mk_bytes(1000)),
- ?line ok = disk_log:blog(Log, T1),
- ?line ok = disk_log:blog_terms(Log, [T2, T3]),
- ?line X = "hejhoppsenasejer",
- ?line X2 = get_list(File, Log),
- ?line case X2 of
- X -> ok;
- Z1 -> test_server_fail({bad_terms, Z1, X2})
- end,
- ?line ok = disk_log:blog(Log, T4),
- ?line Tmp = get_list(File, Log),
- ?line case X ++ By of
- Tmp -> ok;
- Z2 -> test_server_fail({bad_terms, Z2, X ++ By})
- end.
+ ok = disk_log:blog(Log, T1),
+ ok = disk_log:blog_terms(Log, [T2, T3]),
+ X = "hejhoppsenasejer",
+ X2 = get_list(File, Log),
+ case X2 of
+ X -> ok;
+ Z1 -> test_server_fail({bad_terms, Z1, X2})
+ end,
+ ok = disk_log:blog(Log, T4),
+ Tmp = get_list(File, Log),
+ case X ++ By of
+ Tmp -> ok;
+ Z2 -> test_server_fail({bad_terms, Z2, X ++ By})
+ end.
x_mk_bytes(N) ->
X = lists:duplicate(N, $a),
@@ -947,7 +907,7 @@ mk_bytes(N) when N > 4 ->
end.
get_list(File, Log) ->
- ?t:format(0, "File ~p~n",[File]),
+ ct:pal(?HI_VERBOSITY, "File ~p~n", [File]),
ok = disk_log:sync(Log),
{ok, B} = file:read_file(File),
binary_to_list(B).
@@ -955,7 +915,7 @@ get_list(File, Log) ->
get_all_terms(Log, File, Type) ->
{ok, _Log} = disk_log:open([{name,Log}, {type,Type}, {size,infinity},
- {format,internal}, {file, File},
+ {format,internal}, {file, File},
{mode, read_only}]),
Ts = get_all_terms(Log),
ok = disk_log:close(Log),
@@ -976,14 +936,14 @@ get_all_terms1(Log, Cont, Res) ->
get_all_terms_and_bad(Log, File, Type) ->
{ok, _Log} = disk_log:open([{name,Log}, {type,Type}, {size,infinity},
- {format,internal}, {file, File},
+ {format,internal}, {file, File},
{mode, read_only}]),
Ts = get_all_terms_and_bad(Log),
ok = disk_log:close(Log),
Ts.
get_all_terms_and_bad(Log) ->
- ?line read_only = info(Log, mode, foo),
+ read_only = info(Log, mode, foo),
get_all_terms_and_bad1(Log, start, [], 0).
%%
@@ -999,7 +959,7 @@ get_all_terms_and_bad1(Log, Cont, Res, Bad0) ->
get_all_binary_terms_and_bad(Log, File, Type) ->
{ok, _Log} = disk_log:open([{name,Log}, {type,Type}, {size,infinity},
- {format,internal}, {file, File},
+ {format,internal}, {file, File},
{mode, read_only}]),
Ts = get_all_binary_terms_and_bad(Log),
ok = disk_log:close(Log),
@@ -1037,7 +997,7 @@ xx() ->
{format,internal}, {file, File}]),
W = xwr(a, 400),
disk_log:close(a),
-% file:delete(File),
+ %% file:delete(File),
W.
%% old: 6150
@@ -1186,73 +1146,72 @@ end_times({T1,W1}) ->
{T2-T1, W2-W1}.
-head_func(suite) -> [];
-head_func(doc) -> ["Test head parameter"];
+%% Test head parameter.
head_func(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
ets:new(xxx, [named_table, set, public]),
ets:insert(xxx, {wrapc, 0}),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,4}},
- {head_func, {?MODULE, hf, []}}]),
- ?line B = mk_bytes(60),
- ?line disk_log:log(a, B),
- ?line disk_log:alog(a, B),
- ?line disk_log:alog(a, B),
- ?line disk_log:log(a, B),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,4}},
+ {head_func, {?MODULE, hf, []}}]),
+ B = mk_bytes(60),
+ disk_log:log(a, B),
+ disk_log:alog(a, B),
+ disk_log:alog(a, B),
+ disk_log:log(a, B),
H = [1,2,3],
- ?line [{wrapc, 4}] = ets:lookup(xxx, wrapc),
+ [{wrapc, 4}] = ets:lookup(xxx, wrapc),
ets:delete(xxx),
- ?line case get_all_terms(a) of
- [H,B,H,B,H,B,H,B] ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1,
- [H,B,H,B,H,B,H,B]})
- end,
- ?line 8 = no_written_items(a),
+ case get_all_terms(a) of
+ [H,B,H,B,H,B,H,B] ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1,
+ [H,B,H,B,H,B,H,B]})
+ end,
+ 8 = no_written_items(a),
disk_log:close(a),
del(File, 4),
- % invalid header function
- ?line {error, {invalid_header, {_, {term}}}} =
+ %% invalid header function
+ {error, {invalid_header, {_, {term}}}} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{format, external},
{head_func, {?MODULE, head_fun, [{term}]}}]),
file:delete(File),
- ?line {error, {invalid_header, _}} =
+ {error, {invalid_header, _}} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{format, external},
{head_func, {?MODULE, head_fun, [{ok,{term}}]}}]),
file:delete(File),
- ?line {ok,n} =
+ {ok,n} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{format, external},
{head_func, {?MODULE, head_fun, [{ok,<<"head">>}]}}]),
- ?line ok = disk_log:close(n),
- ?line {ok,<<"head">>} = file:read_file(File),
+ ok = disk_log:close(n),
+ {ok,<<"head">>} = file:read_file(File),
file:delete(File),
- ?line {ok,n} =
+ {ok,n} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{format, external},
{head_func, {?MODULE, head_fun, [{ok,"head"}]}}]),
- ?line ok = disk_log:close(n),
- ?line {ok,<<"head">>} = file:read_file(File),
+ ok = disk_log:close(n),
+ {ok,<<"head">>} = file:read_file(File),
file:delete(File),
- ?line Error1 = {error, {badarg, _}} =
+ Error1 = {error, {badarg, _}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{head_func, {tjo,hej,san}},{size, {100, 4}}]),
- ?line "The argument " ++ _ = format_error(Error1),
-
- ?line Error2 = {error, {invalid_header, _}} =
+ "The argument " ++ _ = format_error(Error1),
+
+ Error2 = {error, {invalid_header, _}} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{head_func, {tjo,hej,[san]}}]),
- ?line "The disk log header" ++ _ = format_error(Error2),
+ "The disk log header" ++ _ = format_error(Error2),
file:delete(File).
@@ -1263,194 +1222,186 @@ hf() ->
ets:update_counter(xxx, wrapc, 1),
{ok, [1,2,3]}.
-plain_head(suite) -> [];
-plain_head(doc) -> ["Test head parameter"];
+%% Test head parameter.
plain_head(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
H = [1,2,3],
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,4}}, {head, H}]),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,4}}, {head, H}]),
%% This one is not "counted".
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,4}}, {head, H}]),
- ?line B = mk_bytes(60),
- ?line disk_log:log(a, B),
- ?line disk_log:alog(a, B),
- ?line disk_log:alog(a, B),
- ?line disk_log:log(a, B),
- ?line case get_all_terms(a) of
- [H,B,H,B,H,B,H,B] ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1,
- [H,B,H,B,H,B,H,B]})
- end,
- ?line 8 = no_written_items(a),
- ?line ok = disk_log:close(a),
- ?line {error, no_such_log} = disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,4}}, {head, H}]),
+ B = mk_bytes(60),
+ disk_log:log(a, B),
+ disk_log:alog(a, B),
+ disk_log:alog(a, B),
+ disk_log:log(a, B),
+ case get_all_terms(a) of
+ [H,B,H,B,H,B,H,B] ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1,
+ [H,B,H,B,H,B,H,B]})
+ end,
+ 8 = no_written_items(a),
+ ok = disk_log:close(a),
+ {error, no_such_log} = disk_log:close(a),
del(File, 4).
-one_header(suite) -> [];
-one_header(doc) -> ["Test that a header is just printed once in a log file"];
+%% Test that a header is just printed once in a log file.
one_header(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
H = [1,2,3],
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,4}}, {head, H}]),
- ?line B = mk_bytes(60),
- ?line ok = disk_log:log(a, B),
- ?line ok = disk_log:alog(a, B),
- ?line ok = disk_log:alog(a, B),
- ?line ok = disk_log:log(a, B),
- ?line case get_all_terms(a) of
- [H,B,H,B,H,B,H,B] ->
- ok;
- E1 ->
- test_server_fail({bad_terms, E1,
- [H,B,H,B,H,B,H,B]})
- end,
- ?line 8 = no_written_items(a),
- ?line ok = disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,4}}, {head, H}]),
+ B = mk_bytes(60),
+ ok = disk_log:log(a, B),
+ ok = disk_log:alog(a, B),
+ ok = disk_log:alog(a, B),
+ ok = disk_log:log(a, B),
+ case get_all_terms(a) of
+ [H,B,H,B,H,B,H,B] ->
+ ok;
+ E1 ->
+ test_server_fail({bad_terms, E1,
+ [H,B,H,B,H,B,H,B]})
+ end,
+ 8 = no_written_items(a),
+ ok = disk_log:close(a),
del(File, 4),
Fileb = filename:join(Dir, "b.LOG"),
- ?line {ok, b} = disk_log:open([{name,b}, {file, Fileb}, {head, H}]),
- ?line ok = disk_log:close(b),
- ?line {ok, b} = disk_log:open([{name,b}, {file, Fileb}, {head, H}]),
- ?line ok = disk_log:log(b, "first log"),
- ?line ok = disk_log:alog(b, "second log"),
- ?line ok = disk_log:close(b),
- ?line {ok, b} = disk_log:open([{name,b}, {file, Fileb}, {head, H}]),
- ?line ok = disk_log:alog(b, "3rd log"),
- ?line ok = disk_log:log(b, "4th log"),
- ?line case get_all_terms(b) of
- [H, "first log", "second log", "3rd log", "4th log"] ->
- ok;
- E2 ->
- test_server_fail({bad_terms, E2,
- [H, "first log", "second log",
- "3rd log", "4th log"]})
- end,
- ?line 2 = no_written_items(b),
- ?line ok = disk_log:close(b),
- ?line ok = file:delete(Fileb),
+ {ok, b} = disk_log:open([{name,b}, {file, Fileb}, {head, H}]),
+ ok = disk_log:close(b),
+ {ok, b} = disk_log:open([{name,b}, {file, Fileb}, {head, H}]),
+ ok = disk_log:log(b, "first log"),
+ ok = disk_log:alog(b, "second log"),
+ ok = disk_log:close(b),
+ {ok, b} = disk_log:open([{name,b}, {file, Fileb}, {head, H}]),
+ ok = disk_log:alog(b, "3rd log"),
+ ok = disk_log:log(b, "4th log"),
+ case get_all_terms(b) of
+ [H, "first log", "second log", "3rd log", "4th log"] ->
+ ok;
+ E2 ->
+ test_server_fail({bad_terms, E2,
+ [H, "first log", "second log",
+ "3rd log", "4th log"]})
+ end,
+ 2 = no_written_items(b),
+ ok = disk_log:close(b),
+ ok = file:delete(Fileb),
Filec = filename:join(Dir, "c.LOG"),
H2 = "this is a header ",
- ?line {ok, c} = disk_log:open([{name,c}, {format, external},
- {file, Filec}, {head, H2}]),
- ?line ok = disk_log:close(c),
- ?line {ok, c} = disk_log:open([{name,c}, {format, external},
- {file, Filec}, {head, H2}]),
- ?line ok = disk_log:blog(c, "first log"),
- ?line ok = disk_log:balog(c, "second log"),
- ?line ok = disk_log:close(c),
- ?line {ok, c} = disk_log:open([{name,c}, {format, external},
- {file, Filec}, {head, H2}]),
- ?line ok = disk_log:balog(c, "3rd log"),
- ?line ok = disk_log:blog(c, "4th log"),
- ?line ok = disk_log:sync(c),
- ?line {ok, Fdc} = file:open(Filec, [read]),
- ?line {ok,"this is a header first logsecond log3rd log4th log"} =
+ {ok, c} = disk_log:open([{name,c}, {format, external},
+ {file, Filec}, {head, H2}]),
+ ok = disk_log:close(c),
+ {ok, c} = disk_log:open([{name,c}, {format, external},
+ {file, Filec}, {head, H2}]),
+ ok = disk_log:blog(c, "first log"),
+ ok = disk_log:balog(c, "second log"),
+ ok = disk_log:close(c),
+ {ok, c} = disk_log:open([{name,c}, {format, external},
+ {file, Filec}, {head, H2}]),
+ ok = disk_log:balog(c, "3rd log"),
+ ok = disk_log:blog(c, "4th log"),
+ ok = disk_log:sync(c),
+ {ok, Fdc} = file:open(Filec, [read]),
+ {ok,"this is a header first logsecond log3rd log4th log"} =
file:read(Fdc, 200),
- ?line ok = file:close(Fdc),
- ?line 2 = no_written_items(c),
- ?line disk_log:close(c),
- ?line ok = file:delete(Filec),
+ ok = file:close(Fdc),
+ 2 = no_written_items(c),
+ disk_log:close(c),
+ ok = file:delete(Filec),
ok.
-wrap_notif(suite) -> [];
-wrap_notif(doc) -> ["Test notify parameter, wrap"];
+%% Test notify parameter, wrap.
wrap_notif(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,4}}, {notify, true}]),
- ?line B = mk_bytes(60),
- ?line disk_log:log(a, B),
- ?line disk_log:alog(a, B),
- ?line disk_log:alog(a, B),
- ?line disk_log:log(a, B),
- ?line disk_log:log(a, B),
- ?line rec(3, {disk_log, node(), a, {wrap, 0}}),
- ?line rec(1, {disk_log, node(), a, {wrap, 1}}),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,4}}, {notify, true}]),
+ B = mk_bytes(60),
+ disk_log:log(a, B),
+ disk_log:alog(a, B),
+ disk_log:alog(a, B),
+ disk_log:log(a, B),
+ disk_log:log(a, B),
+ rec(3, {disk_log, node(), a, {wrap, 0}}),
+ rec(1, {disk_log, node(), a, {wrap, 1}}),
disk_log:close(a),
del(File, 4).
-full_notif(suite) -> [];
-full_notif(doc) -> ["Test notify parameter, wrap, filled file"];
+%% Test notify parameter, wrap, filled file.
full_notif(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
file:delete(File),
- ?line {ok, a} = disk_log:open([{name, a}, {file, File}, {type, halt},
- {size, 100}, {notify, true}]),
- ?line B = mk_bytes(60),
- ?line disk_log:log(a, B),
- ?line disk_log:alog(a, B),
- ?line rec(1, {disk_log, node(), a, full}),
+ {ok, a} = disk_log:open([{name, a}, {file, File}, {type, halt},
+ {size, 100}, {notify, true}]),
+ B = mk_bytes(60),
+ disk_log:log(a, B),
+ disk_log:alog(a, B),
+ rec(1, {disk_log, node(), a, full}),
disk_log:close(a),
file:delete(File).
-trunc_notif(suite) -> [];
-trunc_notif(doc) -> ["Test notify parameter, wrap, truncated file"];
+%% Test notify parameter, wrap, truncated file.
trunc_notif(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
File2 = filename:join(Dir, "a.DUMP"),
- ?line {ok, a} = disk_log:open([{name, a}, {file, File}, {type, halt},
- {size, 100}, {notify, true}]),
- ?line B = mk_bytes(60),
- ?line disk_log:log(a, B),
- ?line disk_log:truncate(a),
- ?line rec(1, {disk_log, node(), a, {truncated, 1}}),
- ?line disk_log:log(a, B),
- ?line ok = disk_log:reopen(a, File2),
- ?line rec(1, {disk_log, node(), a, {truncated, 1}}),
+ {ok, a} = disk_log:open([{name, a}, {file, File}, {type, halt},
+ {size, 100}, {notify, true}]),
+ B = mk_bytes(60),
+ disk_log:log(a, B),
+ disk_log:truncate(a),
+ rec(1, {disk_log, node(), a, {truncated, 1}}),
+ disk_log:log(a, B),
+ ok = disk_log:reopen(a, File2),
+ rec(1, {disk_log, node(), a, {truncated, 1}}),
disk_log:close(a),
file:delete(File),
file:delete(File2).
-blocked_notif(suite) -> [];
-blocked_notif(doc) ->
- ["Test notify parameters 'format_external' and 'blocked_log"];
+%% Test notify parameters 'format_external' and 'blocked_log.
blocked_notif(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "n.LOG"),
No = 4,
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {size, {100,No}}, {notify, true},
- {format, external}]),
- ?line B = mk_bytes(60),
- ?line Error1 = {error,{format_external,n}} = disk_log:log(n, B),
- ?line "The requested operation" ++ _ = format_error(Error1),
- ?line ok = disk_log:blog(n, B),
- ?line ok = disk_log:alog(n, B),
- ?line rec(1, {disk_log, node(), n, {format_external, term_to_binary(B)}}),
- ?line ok = disk_log:alog_terms(n, [B,B,B,B]),
- ?line rec(1, {disk_log, node(), n, {format_external,
- lists:map(fun term_to_binary/1, [B,B,B,B])}}),
- ?line ok = disk_log:block(n, false),
- ?line ok = disk_log:alog(n, B),
- ?line rec(1, {disk_log, node(), n, {blocked_log, term_to_binary(B)}}),
- ?line ok = disk_log:balog(n, B),
- ?line rec(1, {disk_log, node(), n, {blocked_log, list_to_binary(B)}}),
- ?line ok = disk_log:balog_terms(n, [B,B,B,B]),
- ?line disk_log:close(n),
- ?line rec(1, {disk_log, node(), n, {blocked_log,
- lists:map(fun list_to_binary/1, [B,B,B,B])}}),
- ?line del(File, No).
-
-
-new_idx_vsn(suite) -> [];
-new_idx_vsn(doc) -> ["Test the new version of the .idx file"];
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {size, {100,No}}, {notify, true},
+ {format, external}]),
+ B = mk_bytes(60),
+ Error1 = {error,{format_external,n}} = disk_log:log(n, B),
+ "The requested operation" ++ _ = format_error(Error1),
+ ok = disk_log:blog(n, B),
+ ok = disk_log:alog(n, B),
+ rec(1, {disk_log, node(), n, {format_external, term_to_binary(B)}}),
+ ok = disk_log:alog_terms(n, [B,B,B,B]),
+ rec(1, {disk_log, node(), n, {format_external,
+ lists:map(fun term_to_binary/1, [B,B,B,B])}}),
+ ok = disk_log:block(n, false),
+ ok = disk_log:alog(n, B),
+ rec(1, {disk_log, node(), n, {blocked_log, term_to_binary(B)}}),
+ ok = disk_log:balog(n, B),
+ rec(1, {disk_log, node(), n, {blocked_log, list_to_binary(B)}}),
+ ok = disk_log:balog_terms(n, [B,B,B,B]),
+ disk_log:close(n),
+ rec(1, {disk_log, node(), n, {blocked_log,
+ lists:map(fun list_to_binary/1, [B,B,B,B])}}),
+ del(File, No).
+
+
+%% Test the new version of the .idx file.
new_idx_vsn(Conf) when is_list(Conf) ->
DataDir = ?datadir(Conf),
PrivDir = ?privdir(Conf),
@@ -1459,201 +1410,197 @@ new_idx_vsn(Conf) when is_list(Conf) ->
Kurt2 = filename:join(PrivDir, "kurt2.LOG"),
%% Test that a wrap log file can have more than 255 files
- ?line {ok, new_vsn} = disk_log:open([{file, File}, {name, new_vsn},
- {type, wrap}, {size, {40, 270}}]),
- ?line ok = log(new_vsn, 280),
- ?line {ok, Bin} = file:read_file(add_ext(File, "idx")),
- ?line <<0,0:32,2,10:32,1:64,1:64,_/binary>> = Bin,
- ?line disk_log:close(new_vsn),
- ?line del(File, 270),
+ {ok, new_vsn} = disk_log:open([{file, File}, {name, new_vsn},
+ {type, wrap}, {size, {40, 270}}]),
+ ok = log(new_vsn, 280),
+ {ok, Bin} = file:read_file(add_ext(File, "idx")),
+ <<0,0:32,2,10:32,1:64,1:64,_/binary>> = Bin,
+ disk_log:close(new_vsn),
+ del(File, 270),
%% convert a very old version (0) of wrap log file to the new format (2)
copy_wrap_log("kurt.LOG", 4, DataDir, PrivDir),
- ?line {repaired, kurt, {recovered, 1}, {badbytes, 0}} =
+ {repaired, kurt, {recovered, 1}, {badbytes, 0}} =
disk_log:open([{file, Kurt}, {name, kurt},
{type, wrap}, {size, {40, 4}}]),
- ?line ok = disk_log:log(kurt, "this is a logged message number X"),
- ?line ok = disk_log:log(kurt, "this is a logged message number Y"),
- ?line {ok, BinK} = file:read_file(add_ext(Kurt, "idx")),
- ?line <<0,0:32,2,2:32,1:64,1:64,1:64,1:64>> = BinK,
- ?line {{40,4}, 2} = disk_log_1:read_size_file_version(Kurt),
+ ok = disk_log:log(kurt, "this is a logged message number X"),
+ ok = disk_log:log(kurt, "this is a logged message number Y"),
+ {ok, BinK} = file:read_file(add_ext(Kurt, "idx")),
+ <<0,0:32,2,2:32,1:64,1:64,1:64,1:64>> = BinK,
+ {{40,4}, 2} = disk_log_1:read_size_file_version(Kurt),
disk_log:close(kurt),
- ?line del(Kurt, 4),
+ del(Kurt, 4),
%% keep the old format (1)
copy_wrap_log("kurt2.LOG", 4, DataDir, PrivDir),
- ?line {repaired, kurt2, {recovered, 1}, {badbytes, 0}} =
+ {repaired, kurt2, {recovered, 1}, {badbytes, 0}} =
disk_log:open([{file, Kurt2}, {name, kurt2},
{type, wrap}, {size, {40, 4}}]),
- ?line ok = disk_log:log(kurt2, "this is a logged message number X"),
- ?line ok = disk_log:log(kurt2, "this is a logged message number Y"),
- ?line {ok, BinK2} = file:read_file(add_ext(Kurt2, "idx")),
- ?line <<0,2:32,1:32,1:32,1:32,1:32>> = BinK2,
- ?line {{40,4}, 1} = disk_log_1:read_size_file_version(Kurt2),
+ ok = disk_log:log(kurt2, "this is a logged message number X"),
+ ok = disk_log:log(kurt2, "this is a logged message number Y"),
+ {ok, BinK2} = file:read_file(add_ext(Kurt2, "idx")),
+ <<0,2:32,1:32,1:32,1:32,1:32>> = BinK2,
+ {{40,4}, 1} = disk_log_1:read_size_file_version(Kurt2),
disk_log:close(kurt2),
- ?line del(Kurt2, 4),
+ del(Kurt2, 4),
ok.
-reopen(suite) -> [];
-reopen(doc) ->
- ["Test reopen/1 on halt and wrap logs."];
+%% Test reopen/1 on halt and wrap logs.
reopen(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line NewFile = filename:join(Dir, "nn.LOG"),
- ?line B = mk_bytes(60),
-
- ?line file:delete(File), % cleanup
- ?line file:delete(NewFile), % cleanup
- ?line Q = qlen(),
+ File = filename:join(Dir, "n.LOG"),
+ NewFile = filename:join(Dir, "nn.LOG"),
+ B = mk_bytes(60),
+
+ file:delete(File), % cleanup
+ file:delete(NewFile), % cleanup
+ Q = qlen(),
%% External halt log.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {notify, true}, {head, "header"},
- {size, infinity},{format, external}]),
- ?line ok = disk_log:blog(n, B),
- ?line ok = disk_log:breopen(n, NewFile, "head"),
- ?line rec(1, {disk_log, node(), n, {truncated, 2}}),
- ?line ok = disk_log:blog(n, B),
- ?line ok = disk_log:blog(n, B),
- ?line ok = disk_log:breopen(n, NewFile, "head"),
- ?line rec(1, {disk_log, node(), n, {truncated, 3}}),
- ?line ok = disk_log:close(n),
- ?line {ok,BinaryFile} = file:read_file(File),
- ?line "head" = binary_to_list(BinaryFile),
- ?line file:delete(File),
- ?line file:delete(NewFile),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {notify, true}, {head, "header"},
+ {size, infinity},{format, external}]),
+ ok = disk_log:blog(n, B),
+ ok = disk_log:breopen(n, NewFile, "head"),
+ rec(1, {disk_log, node(), n, {truncated, 2}}),
+ ok = disk_log:blog(n, B),
+ ok = disk_log:blog(n, B),
+ ok = disk_log:breopen(n, NewFile, "head"),
+ rec(1, {disk_log, node(), n, {truncated, 3}}),
+ ok = disk_log:close(n),
+ {ok,BinaryFile} = file:read_file(File),
+ "head" = binary_to_list(BinaryFile),
+ file:delete(File),
+ file:delete(NewFile),
%% Internal halt log.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {notify, true}, {head, header},
- {size, infinity}]),
- ?line ok = disk_log:log(n, B),
- ?line Error1 = {error, {same_file_name, n}} = disk_log:reopen(n, File),
- ?line "Current and new" ++ _ = format_error(Error1),
- ?line ok = disk_log:reopen(n, NewFile),
- ?line rec(1, {disk_log, node(), n, {truncated, 2}}),
- ?line ok = disk_log:log(n, B),
- ?line ok = disk_log:log(n, B),
- ?line ok = disk_log:reopen(n, NewFile),
- ?line rec(1, {disk_log, node(), n, {truncated, 3}}),
- ?line ok = disk_log:close(n),
- ?line [header, _B, _B] = get_all_terms(nn, NewFile, halt),
- ?line file:delete(File),
- ?line file:delete(NewFile),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {notify, true}, {head, header},
+ {size, infinity}]),
+ ok = disk_log:log(n, B),
+ Error1 = {error, {same_file_name, n}} = disk_log:reopen(n, File),
+ "Current and new" ++ _ = format_error(Error1),
+ ok = disk_log:reopen(n, NewFile),
+ rec(1, {disk_log, node(), n, {truncated, 2}}),
+ ok = disk_log:log(n, B),
+ ok = disk_log:log(n, B),
+ ok = disk_log:reopen(n, NewFile),
+ rec(1, {disk_log, node(), n, {truncated, 3}}),
+ ok = disk_log:close(n),
+ [header, _B, _B] = get_all_terms(nn, NewFile, halt),
+ file:delete(File),
+ file:delete(NewFile),
%% Internal wrap log.
- ?line No = 4,
- ?line del(File, No), % cleanup
- ?line del(NewFile, No), % cleanup
-
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {notify, true},
- {head, header}, {size, {100, No}}]),
- ?line ok = disk_log:log(n, B),
- ?line ok = disk_log:log_terms(n, [B,B,B]),
+ No = 4,
+ del(File, No), % cleanup
+ del(NewFile, No), % cleanup
+
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {notify, true},
+ {head, header}, {size, {100, No}}]),
+ ok = disk_log:log(n, B),
+ ok = disk_log:log_terms(n, [B,B,B]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(3, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:log_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line ok = disk_log:log_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line ok = disk_log:reopen(n, NewFile, new_header),
- ?line rec(1, {disk_log, node(), n, {truncated, 8}}),
- ?line ok = disk_log:log_terms(n, [B,B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:log_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:close(n),
- ?line [header, _, header, _, header, _, header, _] =
+ rec(3, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:log_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ ok = disk_log:log_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ ok = disk_log:reopen(n, NewFile, new_header),
+ rec(1, {disk_log, node(), n, {truncated, 8}}),
+ ok = disk_log:log_terms(n, [B,B]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:log_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:close(n),
+ [header, _, header, _, header, _, header, _] =
get_all_terms(nn, NewFile, wrap),
- ?line [new_header, _, header, _, header, _] = get_all_terms(n, File, wrap),
+ [new_header, _, header, _, header, _] = get_all_terms(n, File, wrap),
- ?line del(NewFile, No),
- ?line file:delete(File ++ ".2"),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {notify, true},
- {head, header}, {size, {100, No}}]),
+ del(NewFile, No),
+ file:delete(File ++ ".2"),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {notify, true},
+ {head, header}, {size, {100, No}}]),
%% One file is missing...
- ?line ok = disk_log:reopen(n, NewFile),
- ?line rec(1, {disk_log, node(), n, {truncated, 6}}),
- ?line ok = disk_log:close(n),
+ ok = disk_log:reopen(n, NewFile),
+ rec(1, {disk_log, node(), n, {truncated, 6}}),
+ ok = disk_log:close(n),
- ?line del(File, No),
- ?line del(NewFile, No),
- ?line Q = qlen(),
+ del(File, No),
+ del(NewFile, No),
+ Q = qlen(),
ok.
-block_blocked(suite) -> [];
-block_blocked(doc) ->
- ["Test block/1 on external and internal logs."];
+%% Test block/1 on external and internal logs.
block_blocked(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line B = mk_bytes(60),
+ B = mk_bytes(60),
Halt = join(Dir, "halt.LOG"),
- % External logs.
- ?line file:delete(Halt), % cleanup
- ?line {ok, halt} = disk_log:open([{name, halt}, {type, halt},
- {format, external}, {file, Halt}]),
- ?line ok = disk_log:sync(halt),
- ?line ok = disk_log:block(halt, false),
- ?line Error1 = {error, {blocked_log, halt}} = disk_log:block(halt),
- ?line "The blocked disk" ++ _ = format_error(Error1),
- ?line {error, {blocked_log, halt}} = disk_log:sync(halt),
- ?line {error, {blocked_log, halt}} = disk_log:truncate(halt),
- ?line {error, {blocked_log, halt}} = disk_log:change_size(halt, infinity),
- ?line {error, {blocked_log, halt}} =
+ %% External logs.
+ file:delete(Halt), % cleanup
+ {ok, halt} = disk_log:open([{name, halt}, {type, halt},
+ {format, external}, {file, Halt}]),
+ ok = disk_log:sync(halt),
+ ok = disk_log:block(halt, false),
+ Error1 = {error, {blocked_log, halt}} = disk_log:block(halt),
+ "The blocked disk" ++ _ = format_error(Error1),
+ {error, {blocked_log, halt}} = disk_log:sync(halt),
+ {error, {blocked_log, halt}} = disk_log:truncate(halt),
+ {error, {blocked_log, halt}} = disk_log:change_size(halt, infinity),
+ {error, {blocked_log, halt}} =
disk_log:change_notify(halt, self(), false),
- ?line {error, {blocked_log, halt}} =
+ {error, {blocked_log, halt}} =
disk_log:change_header(halt, {head, header}),
- ?line {error, {blocked_log, halt}} = disk_log:reopen(halt, "foo"),
- ?line ok = disk_log:close(halt),
-
- ?line {ok, halt} = disk_log:open([{name, halt}, {type, halt},
- {format, external}]),
- ?line ok = disk_log:sync(halt),
- ?line ok = disk_log:block(halt, true),
- ?line {error, {blocked_log, halt}} = disk_log:blog(halt, B),
- ?line {error, {blocked_log, halt}} = disk_log:blog(halt, B),
- ?line {error, {blocked_log, halt}} = disk_log:block(halt),
- ?line {error, {blocked_log, halt}} = disk_log:sync(halt),
- ?line {error, {blocked_log, halt}} = disk_log:truncate(halt),
- ?line {error, {blocked_log, halt}} = disk_log:change_size(halt, infinity),
- ?line {error, {blocked_log, halt}} =
+ {error, {blocked_log, halt}} = disk_log:reopen(halt, "foo"),
+ ok = disk_log:close(halt),
+
+ {ok, halt} = disk_log:open([{name, halt}, {type, halt},
+ {format, external}]),
+ ok = disk_log:sync(halt),
+ ok = disk_log:block(halt, true),
+ {error, {blocked_log, halt}} = disk_log:blog(halt, B),
+ {error, {blocked_log, halt}} = disk_log:blog(halt, B),
+ {error, {blocked_log, halt}} = disk_log:block(halt),
+ {error, {blocked_log, halt}} = disk_log:sync(halt),
+ {error, {blocked_log, halt}} = disk_log:truncate(halt),
+ {error, {blocked_log, halt}} = disk_log:change_size(halt, infinity),
+ {error, {blocked_log, halt}} =
disk_log:change_notify(halt, self(), false),
- ?line {error, {blocked_log, halt}} =
+ {error, {blocked_log, halt}} =
disk_log:change_header(halt, {head, header}),
- ?line {error, {blocked_log, halt}} = disk_log:reopen(halt, "foo"),
-
- ?line ok = disk_log:unblock(halt),
- ?line ok = disk_log:close(halt),
- ?line file:delete(Halt),
-
- % Internal logs.
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line del(File, No), % cleanup
- ?line {ok, halt} = disk_log:open([{name, halt}, {file, File}, {type, wrap},
- {size, {100, No}}]),
- ?line ok = disk_log:block(halt, true),
- ?line eof = disk_log:chunk(halt, start),
- ?line Error2 = {error, end_of_log} = disk_log:chunk_step(halt, start, 1),
- ?line "An attempt" ++ _ = format_error(Error2),
- ?line {error, {blocked_log, halt}} = disk_log:log(halt, B),
- ?line {error, {blocked_log, halt}} = disk_log:inc_wrap_file(halt),
- ?line ok = disk_log:unblock(halt),
- ?line ok = disk_log:block(halt, false),
- ?line {error, {blocked_log, halt}} = disk_log:log(halt, B),
- ?line {error, {blocked_log, halt}} = disk_log:inc_wrap_file(halt),
- ?line Parent = self(),
- ?line Pid =
+ {error, {blocked_log, halt}} = disk_log:reopen(halt, "foo"),
+
+ ok = disk_log:unblock(halt),
+ ok = disk_log:close(halt),
+ file:delete(Halt),
+
+ %% Internal logs.
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ del(File, No), % cleanup
+ {ok, halt} = disk_log:open([{name, halt}, {file, File}, {type, wrap},
+ {size, {100, No}}]),
+ ok = disk_log:block(halt, true),
+ eof = disk_log:chunk(halt, start),
+ Error2 = {error, end_of_log} = disk_log:chunk_step(halt, start, 1),
+ "An attempt" ++ _ = format_error(Error2),
+ {error, {blocked_log, halt}} = disk_log:log(halt, B),
+ {error, {blocked_log, halt}} = disk_log:inc_wrap_file(halt),
+ ok = disk_log:unblock(halt),
+ ok = disk_log:block(halt, false),
+ {error, {blocked_log, halt}} = disk_log:log(halt, B),
+ {error, {blocked_log, halt}} = disk_log:inc_wrap_file(halt),
+ Parent = self(),
+ Pid =
spawn_link(fun() ->
{error, {blocked_log, halt}} =
disk_log:chunk(halt, start),
@@ -1661,109 +1608,107 @@ block_blocked(Conf) when is_list(Conf) ->
disk_log:chunk_step(halt, start, 1),
Parent ! {self(), stopped}
end),
- ?line receive {Pid,stopped} -> ok end,
- ?line ok = disk_log:close(halt),
- ?line del(File, No).
+ receive {Pid,stopped} -> ok end,
+ ok = disk_log:close(halt),
+ del(File, No).
-block_queue(suite) -> [];
-block_queue(doc) ->
- ["Run commands from the queue by unblocking."];
+%% Run commands from the queue by unblocking.
block_queue(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line Q = qlen(),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line del(File, No), % cleanup
- ?line B = mk_bytes(60),
-
- ?line Pid = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid, {open, File}),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {blog, B}),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
- ?line 1 = no_written_items(n),
- ?line Error1 = {error,{not_blocked,n}} = disk_log:unblock(n),
- ?line "The disk log" ++ _ = format_error(Error1),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {balog, "one string"}),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
- ?line 2 = no_written_items(n),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, sync),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, truncate),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
- ?line 0 = no_items(n),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {block, false}),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
- ?line {error, {blocked_log, _}} = disk_log:blog(n, B),
- ?line ok = sync_do(Pid, unblock),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {change_notify, Pid, true}),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
- ?line [{_, true}] = owners(n),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {change_notify, Pid, false}),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
- ?line [{_, false}] = owners(n),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {change_header, {head, header}}),
- ?line ok = disk_log:unblock(n),
- ?line {error, {badarg, head}} = get_reply(),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {change_size, 17}),
- ?line ok = disk_log:unblock(n),
- ?line {error, {badarg, size}} = get_reply(),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, inc_wrap_file),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
-
- ?line ok = sync_do(Pid, close),
- ?line del(File, No),
-
- ?line _Pid2 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid, {int_open, File}),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {chunk, start}),
- ?line ok = disk_log:unblock(n),
- ?line eof = get_reply(),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {chunk_step, start, 100}),
- ?line ok = disk_log:unblock(n),
- ?line {ok, _Cont} = get_reply(),
-
- ?line ok = disk_log:block(n, true),
- ?line async_do(Pid, {log,a_term}),
- ?line ok = disk_log:unblock(n),
- ?line ok = get_reply(),
- ?line 1 = no_written_items(n),
-
- ?line ok = sync_do(Pid, close),
- ?line sync_do(Pid, terminate),
- ?line del(File, No),
+ Q = qlen(),
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ del(File, No), % cleanup
+ B = mk_bytes(60),
+
+ Pid = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid, {open, File}),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {blog, B}),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+ 1 = no_written_items(n),
+ Error1 = {error,{not_blocked,n}} = disk_log:unblock(n),
+ "The disk log" ++ _ = format_error(Error1),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {balog, "one string"}),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+ 2 = no_written_items(n),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, sync),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, truncate),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+ 0 = no_items(n),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {block, false}),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+ {error, {blocked_log, _}} = disk_log:blog(n, B),
+ ok = sync_do(Pid, unblock),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {change_notify, Pid, true}),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+ [{_, true}] = owners(n),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {change_notify, Pid, false}),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+ [{_, false}] = owners(n),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {change_header, {head, header}}),
+ ok = disk_log:unblock(n),
+ {error, {badarg, head}} = get_reply(),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {change_size, 17}),
+ ok = disk_log:unblock(n),
+ {error, {badarg, size}} = get_reply(),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, inc_wrap_file),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+
+ ok = sync_do(Pid, close),
+ del(File, No),
+
+ _Pid2 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid, {int_open, File}),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {chunk, start}),
+ ok = disk_log:unblock(n),
+ eof = get_reply(),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {chunk_step, start, 100}),
+ ok = disk_log:unblock(n),
+ {ok, _Cont} = get_reply(),
+
+ ok = disk_log:block(n, true),
+ async_do(Pid, {log,a_term}),
+ ok = disk_log:unblock(n),
+ ok = get_reply(),
+ 1 = no_written_items(n),
+
+ ok = sync_do(Pid, close),
+ sync_do(Pid, terminate),
+ del(File, No),
%% Test of the queue. Three processes involved here. Pid1's block
%% request is queued. Pid2's log requests are put in the queue.
@@ -1771,171 +1716,165 @@ block_queue(Conf) when is_list(Conf) ->
%% Pid2's log requests are executed when Pid1 unblocks.
%% (This example should show that the pair 'queue' and 'messages'
%% in State does the trick - one does not need a "real" queue.)
- ?line P0 = pps(),
+ P0 = pps(),
Name = n,
- ?line Pid1 = spawn_link(?MODULE, lserv, [Name]),
- ?line {ok, Name} = sync_do(Pid1, {int_open, File, {1000,2}}),
- ?line Pid2 = spawn_link(?MODULE, lserv, [Name]),
- ?line {ok, Name} = sync_do(Pid2, {int_open, File, {1000,2}}),
- ?line ok = disk_log:block(Name),
- ?line async_do(Pid1, {alog,{1,a}}),
- ?line ok = get_reply(),
- ?line async_do(Pid1, {alog,{2,b}}),
- ?line ok = get_reply(),
- ?line async_do(Pid1, {alog,{3,c}}),
- ?line ok = get_reply(),
- ?line async_do(Pid1, {alog,{4,d}}),
- ?line ok = get_reply(),
- ?line async_do(Pid1, block),
- ?line async_do(Pid2, {alog,{5,e}}),
- ?line ok = get_reply(),
- ?line async_do(Pid2, {alog,{6,f}}),
- ?line ok = get_reply(),
- ?line ok = disk_log:unblock(Name),
- ?line ok = get_reply(),
- ?line async_do(Pid2, {alog,{7,g}}),
- ?line ok = get_reply(),
- ?line async_do(Pid2, {alog,{8,h}}),
- ?line ok = get_reply(),
- ?line async_do(Pid1, unblock),
- ?line ok = get_reply(),
- ?line ok = sync_do(Pid1, close),
- ?line ok = sync_do(Pid2, close),
- ?line sync_do(Pid1, terminate),
- ?line sync_do(Pid2, terminate),
+ Pid1 = spawn_link(?MODULE, lserv, [Name]),
+ {ok, Name} = sync_do(Pid1, {int_open, File, {1000,2}}),
+ Pid2 = spawn_link(?MODULE, lserv, [Name]),
+ {ok, Name} = sync_do(Pid2, {int_open, File, {1000,2}}),
+ ok = disk_log:block(Name),
+ async_do(Pid1, {alog,{1,a}}),
+ ok = get_reply(),
+ async_do(Pid1, {alog,{2,b}}),
+ ok = get_reply(),
+ async_do(Pid1, {alog,{3,c}}),
+ ok = get_reply(),
+ async_do(Pid1, {alog,{4,d}}),
+ ok = get_reply(),
+ async_do(Pid1, block),
+ async_do(Pid2, {alog,{5,e}}),
+ ok = get_reply(),
+ async_do(Pid2, {alog,{6,f}}),
+ ok = get_reply(),
+ ok = disk_log:unblock(Name),
+ ok = get_reply(),
+ async_do(Pid2, {alog,{7,g}}),
+ ok = get_reply(),
+ async_do(Pid2, {alog,{8,h}}),
+ ok = get_reply(),
+ async_do(Pid1, unblock),
+ ok = get_reply(),
+ ok = sync_do(Pid1, close),
+ ok = sync_do(Pid2, close),
+ sync_do(Pid1, terminate),
+ sync_do(Pid2, terminate),
Terms = get_all_terms(Name, File, wrap),
- ?line true = [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g},{8,h}] == Terms,
+ true = [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g},{8,h}] == Terms,
del(File, 2),
- ?line Q = qlen(),
- ?line true = (P0 == pps()),
+ Q = qlen(),
+ true = (P0 == pps()),
ok.
-block_queue2(suite) -> [];
-block_queue2(doc) ->
- ["OTP-4880. Blocked processes did not get disk_log_stopped message."];
+%% OTP-4880. Blocked processes did not get disk_log_stopped message.
block_queue2(Conf) when is_list(Conf) ->
- ?line Q = qlen(),
- ?line P0 = pps(),
+ Q = qlen(),
+ P0 = pps(),
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
%% log requests are queued, and processed when the log is closed
- ?line Pid = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid, {open, File}),
- ?line ok = sync_do(Pid, block),
+ Pid = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid, {open, File}),
+ ok = sync_do(Pid, block),
%% Asynchronous stuff is ignored.
- ?line ok = disk_log:balog_terms(n, [<<"foo">>,<<"bar">>]),
- ?line ok = disk_log:balog_terms(n, [<<"more">>,<<"terms">>]),
+ ok = disk_log:balog_terms(n, [<<"foo">>,<<"bar">>]),
+ ok = disk_log:balog_terms(n, [<<"more">>,<<"terms">>]),
Parent = self(),
- ?line Fun =
+ Fun =
fun() ->
{error,no_such_log} = disk_log:sync(n),
receive {disk_log, _, {error, disk_log_stopped}} -> ok end,
Parent ! disk_log_stopped_ok
end,
- ?line spawn(Fun),
- ?line ok = sync_do(Pid, close),
- ?line receive disk_log_stopped_ok -> ok end,
- ?line sync_do(Pid, terminate),
- ?line {ok,<<>>} = file:read_file(File ++ ".1"),
- ?line del(File, No),
- ?line Q = qlen(),
- ?line true = (P0 == pps()),
+ spawn(Fun),
+ ok = sync_do(Pid, close),
+ receive disk_log_stopped_ok -> ok end,
+ sync_do(Pid, terminate),
+ {ok,<<>>} = file:read_file(File ++ ".1"),
+ del(File, No),
+ Q = qlen(),
+ true = (P0 == pps()),
ok.
-unblock(suite) -> [];
-unblock(doc) ->
- ["Test unblock/1."];
+%% Test unblock/1.
unblock(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "n.LOG"),
No = 1,
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {size, {100,No}}, {notify, true},
- {format, external}]),
- ?line ok = disk_log:block(n),
- ?line spawn_link(?MODULE, try_unblock, [n]),
- ?line timer:sleep(100),
- ?line disk_log:close(n),
- ?line del(File, No).
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {size, {100,No}}, {notify, true},
+ {format, external}]),
+ ok = disk_log:block(n),
+ spawn_link(?MODULE, try_unblock, [n]),
+ timer:sleep(100),
+ disk_log:close(n),
+ del(File, No).
try_unblock(Log) ->
- ?line Error = {error, {not_blocked_by_pid, n}} = disk_log:unblock(Log),
- ?line "The disk log" ++ _ = format_error(Error).
+ Error = {error, {not_blocked_by_pid, n}} = disk_log:unblock(Log),
+ "The disk log" ++ _ = format_error(Error).
-open_overwrite(suite) -> [];
-open_overwrite(doc) ->
- ["Test open/1 when old files exist."];
+%% Test open/1 when old files exist.
open_overwrite(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line del(File, No), % cleanup
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ del(File, No), % cleanup
- % read write
- ?line First = "n.LOG.1",
- ?line make_file(Dir, First, 8),
+ %% read write
+ First = "n.LOG.1",
+ make_file(Dir, First, 8),
- ?line Error1 = {error, {not_a_log_file, _}} =
+ Error1 = {error, {not_a_log_file, _}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, internal}, {size, {100, No}}]),
- ?line "The file" ++ _ = format_error(Error1),
- ?line del(File, No),
+ "The file" ++ _ = format_error(Error1),
+ del(File, No),
- ?line make_file(Dir, First, 4),
+ make_file(Dir, First, 4),
- ?line {error, {not_a_log_file, _}} =
+ {error, {not_a_log_file, _}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, internal}, {size, {100, No}}]),
- ?line del(File, No),
+ del(File, No),
- ?line make_file(Dir, First, 0),
+ make_file(Dir, First, 0),
- ?line {error, {not_a_log_file, _}} =
+ {error, {not_a_log_file, _}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, internal}, {size, {100, No}}]),
- % read only
- ?line make_file(Dir, First, 6),
+ %% read only
+ make_file(Dir, First, 6),
- ?line {error, {not_a_log_file, _}} =
+ {error, {not_a_log_file, _}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},{mode, read_only},
{format, internal}, {size, {100, No}}]),
- ?line del(File, No),
+ del(File, No),
- ?line make_file(Dir, First, 0),
+ make_file(Dir, First, 0),
- ?line {error, {not_a_log_file, _}} =
+ {error, {not_a_log_file, _}} =
disk_log:open([{name, n}, {file, File},{type, wrap},
{mode, read_only}, {format, internal},
{size, {100, No}}]),
- ?line del(File, No),
-
- ?line {error, _} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {mode, read_only},
- {format, internal},{size, {100, No}}]),
+ del(File, No),
+
+ {error, _} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {mode, read_only},
+ {format, internal},{size, {100, No}}]),
file:delete(File),
- ?line {ok,n} = disk_log:open([{name,n},{file,File},
- {mode,read_write},{type,halt}]),
- ?line ok = disk_log:close(n),
- ?line ok = unwritable(File),
- ?line {error, {file_error, File, _}} =
- disk_log:open([{name,n},{file,File},{mode,read_write},{type,halt}]),
- ?line ok = writable(File),
+ {ok,n} = disk_log:open([{name,n},{file,File},
+ {mode,read_write},{type,halt}]),
+ ok = disk_log:close(n),
+ ok = unwritable(File),
+ {error, {file_error, File, _}} =
+ disk_log:open([{name,n},{file,File},{mode,read_write},{type,halt}]),
+ ok = writable(File),
file:delete(File),
- ?line {ok,n} = disk_log:open([{name,n},{file,File},{format,external},
- {mode,read_write},{type,halt}]),
- ?line ok = disk_log:close(n),
- ?line ok = unwritable(File),
- ?line {error, {file_error, File, _}} =
+ {ok,n} = disk_log:open([{name,n},{file,File},{format,external},
+ {mode,read_write},{type,halt}]),
+ ok = disk_log:close(n),
+ ok = unwritable(File),
+ {error, {file_error, File, _}} =
disk_log:open([{name,n},{file,File},{format,external},
{mode,read_write},{type,halt}]),
- ?line ok = writable(File),
+ ok = writable(File),
file:delete(File),
ok.
@@ -1953,424 +1892,412 @@ make_file(Dir, File, N) ->
end,
ok = file:close(F).
-open_size(suite) -> [];
-open_size(doc) ->
- ["Test open/1 option size."];
+%% Test open/1 option size.
open_size(Conf) when is_list(Conf) ->
- ?line Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
+ Dir = ?privdir(Conf),
+ File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line file:delete(File),
- ?line del(File, No), % cleanup
+ No = 4,
+ file:delete(File),
+ del(File, No), % cleanup
%% missing size option
- ?line {error, {badarg, size}} =
+ {error, {badarg, size}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, internal}]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, internal},{size, {100, No}}]),
- ?line B = mk_bytes(60),
- ?line ok = disk_log:log_terms(n, [B, B, B, B]),
- ?line ok = disk_log:sync(n),
- ?line ok = disk_log:block(n),
+ B = mk_bytes(60),
+ ok = disk_log:log_terms(n, [B, B, B, B]),
+ ok = disk_log:sync(n),
+ ok = disk_log:block(n),
%% size option does not match existing size file, read_only
- ?line Error1 = {error, {size_mismatch, _, _}} =
+ Error1 = {error, {size_mismatch, _, _}} =
disk_log:open([{name, nn}, {file, File}, {type, wrap},
{mode, read_only}, {format, internal},
{size, {100, No + 1}}]),
- ?line "The given size" ++ _ = format_error(Error1),
- ?line {ok, nn} = disk_log:open([{name, nn}, {file, File}, {type, wrap},
+ "The given size" ++ _ = format_error(Error1),
+ {ok, nn} = disk_log:open([{name, nn}, {file, File}, {type, wrap},
{mode, read_only},
{format, internal},{size, {100, No}}]),
- ?line [_, _, _, _] = get_all_terms1(nn, start, []),
- ?line disk_log:close(nn),
+ [_, _, _, _] = get_all_terms1(nn, start, []),
+ disk_log:close(nn),
- ?line ok = disk_log:unblock(n),
- ?line ok = disk_log:close(n),
+ ok = disk_log:unblock(n),
+ ok = disk_log:close(n),
%% size option does not match existing size file, read_write
- ?line {error, {size_mismatch, _, _}} =
+ {error, {size_mismatch, _, _}} =
disk_log:open([{name, nn}, {file, File}, {type, wrap},
{format, internal}, {size, {100, No + 1}}]),
%% size option does not match existing size file, truncating
- ?line {ok, nn} =
+ {ok, nn} =
disk_log:open([{name, nn}, {file, File}, {type, wrap},
{repair, truncate}, {format, internal},
{size, {100, No + 1}}]),
- ?line ok = disk_log:close(nn),
+ ok = disk_log:close(nn),
- ?line del(File, No),
+ del(File, No),
ok.
-open_truncate(suite) -> [];
-open_truncate(doc) ->
- ["Test open/1 with {repair, truncate}."];
+%% Test open/1 with {repair, truncate}.
open_truncate(Conf) when is_list(Conf) ->
- ?line Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line del(File, No), % cleanup
-
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal},{size, {100, No}}]),
- ?line B = mk_bytes(60),
- ?line ok = disk_log:log_terms(n, [B, B, B, B]),
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {repair,truncate},
- {format, internal},{size, {100, No}}]),
- ?line ok = disk_log:close(n),
- ?line [] = get_all_terms(n, File, wrap),
- ?line del(File, No),
+ Dir = ?privdir(Conf),
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ del(File, No), % cleanup
+
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal},{size, {100, No}}]),
+ B = mk_bytes(60),
+ ok = disk_log:log_terms(n, [B, B, B, B]),
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {repair,truncate},
+ {format, internal},{size, {100, No}}]),
+ ok = disk_log:close(n),
+ [] = get_all_terms(n, File, wrap),
+ del(File, No),
ok.
-
-open_error(suite) -> [];
-open_error(doc) ->
- ["Try some invalid open/1 options."];
+
+%% Try some invalid open/1 options.
open_error(Conf) when is_list(Conf) ->
- ?line Dir = ?privdir(Conf),
+ Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line del(File, No), % cleanup
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ del(File, No), % cleanup
- ?line {error, {badarg, name}} = disk_log:open([{file, File}]),
- ?line {error, {badarg, file}} = disk_log:open([{name,{foo,bar}}]),
- ?line {error, {badarg, [{foo,bar}]}} = disk_log:open([{foo,bar}]),
+ {error, {badarg, name}} = disk_log:open([{file, File}]),
+ {error, {badarg, file}} = disk_log:open([{name,{foo,bar}}]),
+ {error, {badarg, [{foo,bar}]}} = disk_log:open([{foo,bar}]),
%% external logs, read_only.
- ?line {error, {file_error, _, enoent}} =
+ {error, {file_error, _, enoent}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{size, {100,No}},
{format, external}, {mode, read_only}]),
- ?line Error5 = {error, {file_error, _, enoent}} =
+ Error5 = {error, {file_error, _, enoent}} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{size, 100},
{format, external}, {mode, read_only}]),
- ?line true = lists:prefix("\"" ++ File, format_error(Error5)),
+ true = lists:prefix("\"" ++ File, format_error(Error5)),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, external},{size, {100, No}}]),
%% Already owner, ignored.
- ?line {ok, n} =
+ {ok, n} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, external}, {size, {100, No}}]),
- ?line Error2 = {error, {name_already_open, n}} =
+ Error2 = {error, {name_already_open, n}} =
disk_log:open([{name, n}, {file, another_file}, {type, wrap},
{format, external}, {size, {100, No}}]),
- ?line "The disk log" ++ _ = format_error(Error2),
- ?line Error1 = {error, {arg_mismatch, notify, false, true}} =
+ "The disk log" ++ _ = format_error(Error2),
+ Error1 = {error, {arg_mismatch, notify, false, true}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, external}, {size, {100, No}}, {notify, true}]),
- ?line "The value" ++ _ = format_error(Error1),
- ?line Error3 = {error, {open_read_write, n}} =
+ "The value" ++ _ = format_error(Error1),
+ Error3 = {error, {open_read_write, n}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{mode, read_only},
{format, external}, {size, {100, No}}]),
- ?line "The disk log" ++ _ = format_error(Error3),
- ?line {error, {badarg, size}} =
+ "The disk log" ++ _ = format_error(Error3),
+ {error, {badarg, size}} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{format, external}, {size, {100, No}}]),
- ?line {error, {arg_mismatch, type, wrap, halt}} =
+ {error, {arg_mismatch, type, wrap, halt}} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{format, external}]),
- ?line {error, {arg_mismatch, format, external, internal}} =
+ {error, {arg_mismatch, format, external, internal}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, internal}, {size, {100, No}}]),
- ?line {error, {arg_mismatch, repair, true, false}} =
+ {error, {arg_mismatch, repair, true, false}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, external}, {repair, false}]),
- ?line {error, {size_mismatch, {100,4}, {1000,4}}} =
+ {error, {size_mismatch, {100,4}, {1000,4}}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, external}, {size, {1000, No}}]),
- ?line {error, {arg_mismatch, head, none, _}} =
+ {error, {arg_mismatch, head, none, _}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{head, "header"},
{format, external}, {size, {100, No}}]),
- ?line {error, {badarg, size}} =
+ {error, {badarg, size}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, external}, {size, 100}]),
- ?line ok = disk_log:close(n),
+ ok = disk_log:close(n),
- ?line {ok, n} =
+ {ok, n} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{mode, read_only},
{format, external}, {size, {100, No}}]),
- ?line Error4 = {error, {open_read_only, n}} =
+ Error4 = {error, {open_read_only, n}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{mode, read_write},
{format, external}, {size, {100, No}}]),
- ?line "The disk log" ++ _ = format_error(Error4),
- ?line ok = disk_log:close(n),
+ "The disk log" ++ _ = format_error(Error4),
+ ok = disk_log:close(n),
- ?line del(File, No).
+ del(File, No).
-close_race(suite) -> [];
-close_race(doc) ->
- ["Do something quickly after close/1"];
+%% Do something quickly after close/1.
close_race(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 1,
- ?line del(File, No), % cleanup
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {size, {100,No}}, {notify, true},
- {format, internal}]),
- ?line ok = disk_log:close(n),
- ?line Error1 = {error, no_such_log} = disk_log:close(n),
- ?line "There is no disk" ++ _ = format_error(Error1),
-
- % Pid1 blocks, Pid2 closes without being suspended.
- ?line Pid1 = spawn_link(?MODULE, lserv, [n]),
- ?line Pid2 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid1, {open, File}),
- ?line {ok, n} = sync_do(Pid2, {open, File}),
- ?line ok = sync_do(Pid1, block),
- ?line [{_, false}, {_, false}] = sync_do(Pid1, owners),
- ?line ok = sync_do(Pid2, close),
- ?line [{_, false}] = sync_do(Pid1, owners),
- ?line ok = sync_do(Pid1, close),
- ?line sync_do(Pid1, terminate),
- ?line sync_do(Pid2, terminate),
- ?line {error, no_such_log} = disk_log:info(n),
-
- % Pid3 blocks, Pid3 closes. Pid4 should still be ablo to use log.
- ?line Pid3 = spawn_link(?MODULE, lserv, [n]),
- ?line Pid4 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid3, {open, File}),
- ?line {ok, n} = sync_do(Pid4, {open, File}),
- ?line ok = sync_do(Pid3, block),
- ?line ok = sync_do(Pid3, close),
- ?line [{_Pid4, false}] = sync_do(Pid4, owners),
- ?line sync_do(Pid3, terminate),
- ?line sync_do(Pid4, terminate),
- ?line {error, no_such_log} = disk_log:info(n),
-
- % Pid5 blocks, Pid5 terminates. Pid6 should still be ablo to use log.
- ?line Pid5 = spawn_link(?MODULE, lserv, [n]),
- ?line Pid6 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid5, {open, File}),
- ?line {ok, n} = sync_do(Pid6, {open, File}),
- ?line ok = sync_do(Pid5, block),
- ?line sync_do(Pid5, terminate),
- ?line [{_Pid6, false}] = sync_do(Pid6, owners),
- ?line sync_do(Pid6, terminate),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line del(File, No), % cleanup
+ File = filename:join(Dir, "n.LOG"),
+ No = 1,
+ del(File, No), % cleanup
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {size, {100,No}}, {notify, true},
+ {format, internal}]),
+ ok = disk_log:close(n),
+ Error1 = {error, no_such_log} = disk_log:close(n),
+ "There is no disk" ++ _ = format_error(Error1),
+
+ %% Pid1 blocks, Pid2 closes without being suspended.
+ Pid1 = spawn_link(?MODULE, lserv, [n]),
+ Pid2 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid1, {open, File}),
+ {ok, n} = sync_do(Pid2, {open, File}),
+ ok = sync_do(Pid1, block),
+ [{_, false}, {_, false}] = sync_do(Pid1, owners),
+ ok = sync_do(Pid2, close),
+ [{_, false}] = sync_do(Pid1, owners),
+ ok = sync_do(Pid1, close),
+ sync_do(Pid1, terminate),
+ sync_do(Pid2, terminate),
+ {error, no_such_log} = disk_log:info(n),
+
+ %% Pid3 blocks, Pid3 closes. Pid4 should still be ablo to use log.
+ Pid3 = spawn_link(?MODULE, lserv, [n]),
+ Pid4 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid3, {open, File}),
+ {ok, n} = sync_do(Pid4, {open, File}),
+ ok = sync_do(Pid3, block),
+ ok = sync_do(Pid3, close),
+ [{_Pid4, false}] = sync_do(Pid4, owners),
+ sync_do(Pid3, terminate),
+ sync_do(Pid4, terminate),
+ {error, no_such_log} = disk_log:info(n),
+
+ %% Pid5 blocks, Pid5 terminates. Pid6 should still be ablo to use log.
+ Pid5 = spawn_link(?MODULE, lserv, [n]),
+ Pid6 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid5, {open, File}),
+ {ok, n} = sync_do(Pid6, {open, File}),
+ ok = sync_do(Pid5, block),
+ sync_do(Pid5, terminate),
+ [{_Pid6, false}] = sync_do(Pid6, owners),
+ sync_do(Pid6, terminate),
+ {error, no_such_log} = disk_log:info(n),
+ del(File, No), % cleanup
ok.
-close_block(suite) -> [];
-close_block(doc) ->
- ["Block, unblock, close, terminate."];
+%% Block, unblock, close, terminate.
close_block(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
+ File = filename:join(Dir, "n.LOG"),
No = 1,
del(File, No), % cleanup
P0 = pps(),
%% One of two owners terminates.
- ?line Pid1 = spawn_link(?MODULE, lserv, [n]),
- ?line Pid2 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid1, {open, File}),
- ?line {ok, n} = sync_do(Pid2, {open, File}),
- ?line [_, _] = sync_do(Pid1, owners),
- ?line [_, _] = sync_do(Pid2, owners),
- ?line 0 = sync_do(Pid1, users),
- ?line 0 = sync_do(Pid2, users),
- ?line sync_do(Pid1, terminate),
- ?line [_] = sync_do(Pid2, owners),
- ?line 0 = sync_do(Pid2, users),
- ?line sync_do(Pid2, terminate),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line true = (P0 == pps()),
+ Pid1 = spawn_link(?MODULE, lserv, [n]),
+ Pid2 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid1, {open, File}),
+ {ok, n} = sync_do(Pid2, {open, File}),
+ [_, _] = sync_do(Pid1, owners),
+ [_, _] = sync_do(Pid2, owners),
+ 0 = sync_do(Pid1, users),
+ 0 = sync_do(Pid2, users),
+ sync_do(Pid1, terminate),
+ [_] = sync_do(Pid2, owners),
+ 0 = sync_do(Pid2, users),
+ sync_do(Pid2, terminate),
+ {error, no_such_log} = disk_log:info(n),
+ true = (P0 == pps()),
%% Users terminate (no link...).
- ?line Pid3 = spawn_link(?MODULE, lserv, [n]),
- ?line Pid4 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid3, {open, File, none}),
- ?line {ok, n} = sync_do(Pid4, {open, File, none}),
- ?line [] = sync_do(Pid3, owners),
- ?line [] = sync_do(Pid4, owners),
- ?line 2 = sync_do(Pid3, users),
- ?line 2 = sync_do(Pid4, users),
- ?line sync_do(Pid3, terminate),
- ?line [] = sync_do(Pid4, owners),
- ?line 2 = sync_do(Pid4, users),
- ?line sync_do(Pid4, terminate),
- ?line disk_log:close(n),
- ?line disk_log:close(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line true = (P0 == pps()),
-
- % Blocking owner terminates.
- ?line Pid5 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {linkto, none},{size, {100,No}},
- {format, external}]),
- ?line {ok, n} = sync_do(Pid5, {open, File}),
- ?line ok = sync_do(Pid5, block),
- ?line {blocked, true} = status(n),
- ?line [_] = owners(n),
- ?line sync_do(Pid5, terminate),
- ?line ok = status(n),
- ?line [] = owners(n),
- ?line 1 = users(n),
- ?line ok = disk_log:close(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line true = (P0 == pps()),
-
- % Blocking user terminates.
- ?line Pid6 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {size, {100,No}}, {format, external}]),
- ?line {ok, n} = sync_do(Pid6, {open, File, none}),
- ?line ok = sync_do(Pid6, block),
- ?line {blocked, true} = status(n),
- ?line [_] = owners(n),
- ?line 1 = users(n),
- ?line sync_do(Pid6, terminate), % very silently...
- ?line ok = status(n),
- ?line [_] = owners(n),
- ?line 1 = users(n),
- ?line ok = disk_log:close(n),
- ?line [] = owners(n),
- ?line 1 = users(n),
- ?line ok = disk_log:close(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line true = (P0 == pps()),
-
- % Blocking owner terminates.
- ?line Pid7 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {linkto, none},
- {size, {100,No}}, {format, external}]),
- ?line {ok, n} = sync_do(Pid7, {open, File}),
- ?line ok = sync_do(Pid7, block),
- ?line {blocked, true} = status(n),
- ?line [_] = owners(n),
- ?line 1 = users(n),
- ?line sync_do(Pid7, terminate),
- ?line ok = status(n),
- ?line [] = owners(n),
- ?line 1 = users(n),
- ?line ok = disk_log:close(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line true = (P0 == pps()),
+ Pid3 = spawn_link(?MODULE, lserv, [n]),
+ Pid4 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid3, {open, File, none}),
+ {ok, n} = sync_do(Pid4, {open, File, none}),
+ [] = sync_do(Pid3, owners),
+ [] = sync_do(Pid4, owners),
+ 2 = sync_do(Pid3, users),
+ 2 = sync_do(Pid4, users),
+ sync_do(Pid3, terminate),
+ [] = sync_do(Pid4, owners),
+ 2 = sync_do(Pid4, users),
+ sync_do(Pid4, terminate),
+ disk_log:close(n),
+ disk_log:close(n),
+ {error, no_such_log} = disk_log:info(n),
+ true = (P0 == pps()),
+
+ %% Blocking owner terminates.
+ Pid5 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {linkto, none},{size, {100,No}},
+ {format, external}]),
+ {ok, n} = sync_do(Pid5, {open, File}),
+ ok = sync_do(Pid5, block),
+ {blocked, true} = status(n),
+ [_] = owners(n),
+ sync_do(Pid5, terminate),
+ ok = status(n),
+ [] = owners(n),
+ 1 = users(n),
+ ok = disk_log:close(n),
+ {error, no_such_log} = disk_log:info(n),
+ true = (P0 == pps()),
+
+ %% Blocking user terminates.
+ Pid6 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {size, {100,No}}, {format, external}]),
+ {ok, n} = sync_do(Pid6, {open, File, none}),
+ ok = sync_do(Pid6, block),
+ {blocked, true} = status(n),
+ [_] = owners(n),
+ 1 = users(n),
+ sync_do(Pid6, terminate), % very silently...
+ ok = status(n),
+ [_] = owners(n),
+ 1 = users(n),
+ ok = disk_log:close(n),
+ [] = owners(n),
+ 1 = users(n),
+ ok = disk_log:close(n),
+ {error, no_such_log} = disk_log:info(n),
+ true = (P0 == pps()),
+
+ %% Blocking owner terminates.
+ Pid7 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {linkto, none},
+ {size, {100,No}}, {format, external}]),
+ {ok, n} = sync_do(Pid7, {open, File}),
+ ok = sync_do(Pid7, block),
+ {blocked, true} = status(n),
+ [_] = owners(n),
+ 1 = users(n),
+ sync_do(Pid7, terminate),
+ ok = status(n),
+ [] = owners(n),
+ 1 = users(n),
+ ok = disk_log:close(n),
+ {error, no_such_log} = disk_log:info(n),
+ true = (P0 == pps()),
%% Two owners, the blocking one terminates.
- ?line Pid8 = spawn_link(?MODULE, lserv, [n]),
- ?line Pid9 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = sync_do(Pid8, {open, File}),
- ?line {ok, n} = sync_do(Pid9, {open, File}),
- ?line ok = sync_do(Pid8, block),
- ?line {blocked, true} = status(n),
- ?line sync_do(Pid8, terminate),
- ?line ok = status(n),
- ?line [_] = sync_do(Pid9, owners),
- ?line 0 = sync_do(Pid9, users),
- ?line sync_do(Pid9, terminate),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line true = (P0 == pps()),
-
- % Blocking user closes.
- ?line Pid10 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {size, {100,No}}, {format, external}]),
- ?line {ok, n} = sync_do(Pid10, {open, File, none}),
- ?line ok = sync_do(Pid10, block),
- ?line {blocked, true} = status(n),
- ?line [_] = owners(n),
- ?line 1 = users(n),
- ?line ok = sync_do(Pid10, close),
- ?line ok = status(n),
- ?line [_] = owners(n),
- ?line 0 = users(n),
- ?line ok = disk_log:close(n),
- ?line sync_do(Pid10, terminate),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line true = (P0 == pps()),
-
- % Blocking user unblocks and closes.
- ?line Pid11 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {size, {100,No}}, {format, external}]),
- ?line {ok, n} = sync_do(Pid11, {open, File, none}),
- ?line ok = sync_do(Pid11, block),
- ?line {blocked, true} = status(n),
- ?line [_] = owners(n),
- ?line 1 = users(n),
- ?line ok = sync_do(Pid11, unblock),
- ?line ok = sync_do(Pid11, close),
- ?line ok = status(n),
- ?line [_] = owners(n),
- ?line 0 = users(n),
- ?line ok = disk_log:close(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line sync_do(Pid11, terminate),
- ?line true = (P0 == pps()),
-
- % Blocking owner closes.
- ?line Pid12 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {linkto, none},
- {size, {100,No}}, {format, external}]),
- ?line {ok, n} = sync_do(Pid12, {open, File}),
- ?line ok = sync_do(Pid12, block),
- ?line {blocked, true} = status(n),
- ?line [_] = owners(n),
- ?line 1 = users(n),
- ?line ok = sync_do(Pid12, close),
- ?line ok = status(n),
- ?line [] = owners(n),
- ?line 1 = users(n),
- ?line ok = disk_log:close(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line sync_do(Pid12, terminate),
- ?line true = (P0 == pps()),
-
- % Blocking owner unblocks and closes.
- ?line Pid13 = spawn_link(?MODULE, lserv, [n]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {linkto, none},
- {size, {100,No}}, {format, external}]),
- ?line {ok, n} = sync_do(Pid13, {open, File}),
- ?line ok = sync_do(Pid13, block),
- ?line {blocked, true} = status(n),
- ?line [_] = owners(n),
- ?line 1 = users(n),
- ?line ok = sync_do(Pid13, unblock),
- ?line ok = sync_do(Pid13, close),
- ?line ok = status(n),
- ?line [] = owners(n),
- ?line 1 = users(n),
- ?line ok = disk_log:close(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line sync_do(Pid13, terminate),
- ?line true = (P0 == pps()),
+ Pid8 = spawn_link(?MODULE, lserv, [n]),
+ Pid9 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = sync_do(Pid8, {open, File}),
+ {ok, n} = sync_do(Pid9, {open, File}),
+ ok = sync_do(Pid8, block),
+ {blocked, true} = status(n),
+ sync_do(Pid8, terminate),
+ ok = status(n),
+ [_] = sync_do(Pid9, owners),
+ 0 = sync_do(Pid9, users),
+ sync_do(Pid9, terminate),
+ {error, no_such_log} = disk_log:info(n),
+ true = (P0 == pps()),
+
+ %% Blocking user closes.
+ Pid10 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {size, {100,No}}, {format, external}]),
+ {ok, n} = sync_do(Pid10, {open, File, none}),
+ ok = sync_do(Pid10, block),
+ {blocked, true} = status(n),
+ [_] = owners(n),
+ 1 = users(n),
+ ok = sync_do(Pid10, close),
+ ok = status(n),
+ [_] = owners(n),
+ 0 = users(n),
+ ok = disk_log:close(n),
+ sync_do(Pid10, terminate),
+ {error, no_such_log} = disk_log:info(n),
+ true = (P0 == pps()),
+
+ %% Blocking user unblocks and closes.
+ Pid11 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {size, {100,No}}, {format, external}]),
+ {ok, n} = sync_do(Pid11, {open, File, none}),
+ ok = sync_do(Pid11, block),
+ {blocked, true} = status(n),
+ [_] = owners(n),
+ 1 = users(n),
+ ok = sync_do(Pid11, unblock),
+ ok = sync_do(Pid11, close),
+ ok = status(n),
+ [_] = owners(n),
+ 0 = users(n),
+ ok = disk_log:close(n),
+ {error, no_such_log} = disk_log:info(n),
+ sync_do(Pid11, terminate),
+ true = (P0 == pps()),
+
+ %% Blocking owner closes.
+ Pid12 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {linkto, none},
+ {size, {100,No}}, {format, external}]),
+ {ok, n} = sync_do(Pid12, {open, File}),
+ ok = sync_do(Pid12, block),
+ {blocked, true} = status(n),
+ [_] = owners(n),
+ 1 = users(n),
+ ok = sync_do(Pid12, close),
+ ok = status(n),
+ [] = owners(n),
+ 1 = users(n),
+ ok = disk_log:close(n),
+ {error, no_such_log} = disk_log:info(n),
+ sync_do(Pid12, terminate),
+ true = (P0 == pps()),
+
+ %% Blocking owner unblocks and closes.
+ Pid13 = spawn_link(?MODULE, lserv, [n]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {linkto, none},
+ {size, {100,No}}, {format, external}]),
+ {ok, n} = sync_do(Pid13, {open, File}),
+ ok = sync_do(Pid13, block),
+ {blocked, true} = status(n),
+ [_] = owners(n),
+ 1 = users(n),
+ ok = sync_do(Pid13, unblock),
+ ok = sync_do(Pid13, close),
+ ok = status(n),
+ [] = owners(n),
+ 1 = users(n),
+ ok = disk_log:close(n),
+ {error, no_such_log} = disk_log:info(n),
+ sync_do(Pid13, terminate),
+ true = (P0 == pps()),
del(File, No), % cleanup
ok.
-close_deadlock(suite) -> [];
-close_deadlock(doc) ->
- ["OTP-4745. Deadlock with just an ordinary log could happen."];
+%% OTP-4745. Deadlock with just an ordinary log could happen.
close_deadlock(Conf) when is_list(Conf) ->
- ?line true = is_alive(),
+ true = is_alive(),
- ?line PrivDir = ?privdir(Conf),
+ PrivDir = ?privdir(Conf),
- ?line F1 = filename:join(PrivDir, "a.LOG"),
- ?line file:delete(F1),
+ F1 = filename:join(PrivDir, "a.LOG"),
+ file:delete(F1),
Self = self(),
%% One process opens the log at the same time as another process
@@ -2378,11 +2305,11 @@ close_deadlock(Conf) when is_list(Conf) ->
Name = a,
Fun = fun() -> open_close(Self, Name, F1) end,
P = spawn(Fun),
- ?line receive {P, Name} -> ok end,
- ?line {ok, L} = disk_log:open([{name,Name},{file,F1}]),
- ?line ok = disk_log:close(L),
- ?line receive {P, done} -> ok end,
- ?line file:delete(F1),
+ receive {P, Name} -> ok end,
+ {ok, L} = disk_log:open([{name,Name},{file,F1}]),
+ ok = disk_log:close(L),
+ receive {P, done} -> ok end,
+ file:delete(F1),
%% One process opens the log at the same time as another process
%% closes the log due to file error while truncating.
@@ -2390,38 +2317,38 @@ close_deadlock(Conf) when is_list(Conf) ->
%% "work". When it works, as it seems to do right now :), the
%% disk_log_server gets {error, no_such_log}, receives the EXIT
%% message caused by truncate, and tries to open the log again.
- ?line No = 4,
- ?line LDir = F1 ++ ".2",
- ?line file:del_dir(LDir),
- ?line del(F1, No),
- ?line ok = file:make_dir(LDir),
+ No = 4,
+ LDir = F1 ++ ".2",
+ file:del_dir(LDir),
+ del(F1, No),
+ ok = file:make_dir(LDir),
Fun2 = fun() -> open_truncate(Self, Name, F1, No) end,
P2 = spawn(Fun2),
- ?line receive {P2, Name} -> ok end,
- ?line {ok, L} = disk_log:open([{name, Name}, {file, F1}, {type, wrap},
- {format, external}]),
+ receive {P2, Name} -> ok end,
+ {ok, L} = disk_log:open([{name, Name}, {file, F1}, {type, wrap},
+ {format, external}]),
%% Note: truncate causes the disk log process to terminate. One
%% cannot say if open above happened before, after, or during the
%% termination. The link to the owner is removed before termination.
- ?line case disk_log:close(L) of
- ok -> ok;
- {error,no_such_log} ->
- ok
- end,
- ?line receive {P2, done} -> ok end,
- ?line del(F1, No),
- ?line file:del_dir(LDir),
+ case disk_log:close(L) of
+ ok -> ok;
+ {error,no_such_log} ->
+ ok
+ end,
+ receive {P2, done} -> ok end,
+ del(F1, No),
+ file:del_dir(LDir),
%% To the same thing, this time using distributed logs.
%% (Does not seem to work very well, unfortunately.)
FunD = fun() -> open_close_dist(Self, Name, F1) end,
PD = spawn(FunD),
receive {PD, Name} -> ok end,
- ?line {[_], []} = disk_log:open([{name,Name},{file,F1},
- {distributed,[node()]}]),
- ?line ok = disk_log:close(L),
+ {[_], []} = disk_log:open([{name,Name},{file,F1},
+ {distributed,[node()]}]),
+ ok = disk_log:close(L),
receive {PD, done} -> ok end,
- ?line file:delete(F1),
+ file:delete(F1),
ok.
@@ -2467,7 +2394,7 @@ sync_do(Pid, Req) ->
end.
lserv(Log) ->
- ?line receive
+ receive
{From, {open, File}} ->
From ! disk_log:open([{name, Log}, {file, File}, {type, wrap},
{size, {100,1}}, {format, external}]);
@@ -2534,664 +2461,652 @@ lserv(Log) ->
lserv(Log).
-error_repair(suite) -> [];
-error_repair(doc) ->
- ["Error while repairing."];
+%% Error while repairing.
error_repair(Conf) when is_list(Conf) ->
- % not all error situations are covered by this test
+ %% not all error situations are covered by this test
DataDir = ?datadir(Conf),
PrivDir = ?privdir(Conf),
- ?line File = filename:join(PrivDir, "n.LOG"),
- ?line No = 4,
- ?line file:delete(File),
- ?line del(File, No), % cleanup
+ File = filename:join(PrivDir, "n.LOG"),
+ No = 4,
+ file:delete(File),
+ del(File, No), % cleanup
- % kurt.LOG is not closed and has four logged items, one is recovered
- ?line copy_wrap_log("kurt.LOG", "n.LOG", No, DataDir, PrivDir),
- ?line {repaired,n,{recovered,1},{badbytes,0}} =
+ %% kurt.LOG is not closed and has four logged items, one is recovered
+ copy_wrap_log("kurt.LOG", "n.LOG", No, DataDir, PrivDir),
+ {repaired,n,{recovered,1},{badbytes,0}} =
disk_log:open([{name, n}, {file, File}, {type, wrap}, {size,{40,No}}]),
- ?line 1 = cur_cnt(n),
- ?line 53 = curb(n),
- ?line 4 = no_items(n),
- ?line ok = disk_log:close(n),
-
- % temporary repair file cannot be created
- ?line copy_wrap_log("kurt.LOG", "n.LOG", No, DataDir, PrivDir),
- ?line Dir = File ++ ".4" ++ ".TMP",
- ?line ok = file:make_dir(Dir),
- ?line P0 = pps(),
- ?line {error, {file_error, _, _}} =
+ 1 = cur_cnt(n),
+ 53 = curb(n),
+ 4 = no_items(n),
+ ok = disk_log:close(n),
+
+ %% temporary repair file cannot be created
+ copy_wrap_log("kurt.LOG", "n.LOG", No, DataDir, PrivDir),
+ Dir = File ++ ".4" ++ ".TMP",
+ ok = file:make_dir(Dir),
+ P0 = pps(),
+ {error, {file_error, _, _}} =
disk_log:open([{name, n}, {file, File}, {type, wrap}, {size,{40,4}}]),
- ?line true = (P0 == pps()),
- ?line del(File, No),
- ?line ok = file:del_dir(Dir),
+ true = (P0 == pps()),
+ del(File, No),
+ ok = file:del_dir(Dir),
%% repair a file
- ?line P1 = pps(),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {40,No}}]),
- ?line ok = disk_log:log_terms(n, [{this,is}]), % first file full
- ?line ok = disk_log:log_terms(n, [{some,terms}]), % second file full
- ?line ok = disk_log:close(n),
- ?line BadFile = add_ext(File, 2), % current file
- ?line set_opened(BadFile),
- ?line crash(BadFile, 28), % the binary is now invalid
- ?line {repaired,n,{recovered,0},{badbytes,26}} =
- disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {40,No}}]),
- ?line ok = disk_log:close(n),
- ?line true = (P1 == pps()),
- ?line del(File, No),
+ P1 = pps(),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {40,No}}]),
+ ok = disk_log:log_terms(n, [{this,is}]), % first file full
+ ok = disk_log:log_terms(n, [{some,terms}]), % second file full
+ ok = disk_log:close(n),
+ BadFile = add_ext(File, 2), % current file
+ set_opened(BadFile),
+ crash(BadFile, 28), % the binary is now invalid
+ {repaired,n,{recovered,0},{badbytes,26}} =
+ disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {40,No}}]),
+ ok = disk_log:close(n),
+ true = (P1 == pps()),
+ del(File, No),
%% yet another repair
- ?line P2 = pps(),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {4000,No}}]),
- ?line ok = disk_log:log_terms(n, [{this,is},{some,terms}]),
- ?line ok = disk_log:close(n),
- ?line BadFile2 = add_ext(File, 1), % current file
- ?line set_opened(BadFile2),
- ?line crash(BadFile2, 51), % the second binary is now invalid
- ?line {repaired,n,{recovered,1},{badbytes,26}} =
+ P2 = pps(),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {4000,No}}]),
+ ok = disk_log:log_terms(n, [{this,is},{some,terms}]),
+ ok = disk_log:close(n),
+ BadFile2 = add_ext(File, 1), % current file
+ set_opened(BadFile2),
+ crash(BadFile2, 51), % the second binary is now invalid
+ {repaired,n,{recovered,1},{badbytes,26}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, internal}, {size, {4000,No}}]),
- ?line ok = disk_log:close(n),
- ?line true = (P2 == pps()),
- ?line del(File, No),
+ ok = disk_log:close(n),
+ true = (P2 == pps()),
+ del(File, No),
%% Repair, large term
- ?line Big = term_to_binary(lists:duplicate(66000,$a)),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {40,No}}]),
- ?line ok = disk_log:log_terms(n, [Big]),
- ?line ok = disk_log:close(n),
- ?line set_opened(add_ext(File, 1)),
- ?line {repaired,n,{recovered,1},{badbytes,0}} =
+ Big = term_to_binary(lists:duplicate(66000,$a)),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {40,No}}]),
+ ok = disk_log:log_terms(n, [Big]),
+ ok = disk_log:close(n),
+ set_opened(add_ext(File, 1)),
+ {repaired,n,{recovered,1},{badbytes,0}} =
disk_log:open([{name, n}, {file, File}, {type, wrap},
{format, internal}, {size, {40,No}}]),
- ?line {_, [Got]} = disk_log:chunk(n, start),
- ?line ok = disk_log:close(n),
- ?line Got = Big,
- ?line del(File, No),
+ {_, [Got]} = disk_log:chunk(n, start),
+ ok = disk_log:close(n),
+ Got = Big,
+ del(File, No),
%% A term a little smaller than a chunk, then big terms.
- ?line BigSmall = mk_bytes(1024*64-8-12),
- ?line file:delete(File),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line ok = disk_log:log_terms(n, [BigSmall, Big, Big]),
- ?line ok = disk_log:close(n),
- ?line set_opened(File),
- ?line FileSize = file_size(File),
- ?line crash(File, FileSize-byte_size(Big)-4),
- ?line Error1 = {error, {need_repair, _}} =
+ BigSmall = mk_bytes(1024*64-8-12),
+ file:delete(File),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ ok = disk_log:log_terms(n, [BigSmall, Big, Big]),
+ ok = disk_log:close(n),
+ set_opened(File),
+ FileSize = file_size(File),
+ crash(File, FileSize-byte_size(Big)-4),
+ Error1 = {error, {need_repair, _}} =
disk_log:open([{name, n}, {file, File}, {repair, false},
{type, halt}, {format, internal}]),
- ?line "The disk log" ++ _ = format_error(Error1),
- ?line {repaired,n,{recovered,2},{badbytes,132013}} =
+ "The disk log" ++ _ = format_error(Error1),
+ {repaired,n,{recovered,2},{badbytes,132013}} =
disk_log:open([{name, n}, {file, File}, {repair, true},
{type, halt}, {format, internal}]),
- ?line ok = disk_log:close(n),
- ?line file:delete(File),
+ ok = disk_log:close(n),
+ file:delete(File),
%% The header is recovered.
- ?line {ok,n} =
+ {ok,n} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{format, internal},
{head_func, {?MODULE, head_fun, [{ok,"head"}]}}]),
- ?line ok = disk_log:log_terms(n, [list,'of',terms]),
- ?line ["head",list,'of',terms] = get_all_terms(n),
- ?line ok = disk_log:close(n),
- ?line set_opened(File),
- ?line crash(File, 30),
- ?line {repaired,n,{recovered,3},{badbytes,16}} =
+ ok = disk_log:log_terms(n, [list,'of',terms]),
+ ["head",list,'of',terms] = get_all_terms(n),
+ ok = disk_log:close(n),
+ set_opened(File),
+ crash(File, 30),
+ {repaired,n,{recovered,3},{badbytes,16}} =
disk_log:open([{name, n}, {file, File}, {type, halt},
{format, internal},{repair,true},
{head_func, {?MODULE, head_fun, [{ok,"head"}]}}]),
- ?line ["head",'of',terms] = get_all_terms(n),
- ?line ok = disk_log:close(n),
+ ["head",'of',terms] = get_all_terms(n),
+ ok = disk_log:close(n),
file:delete(File),
ok.
-
+
set_opened(File) ->
{ok, Fd} = file:open(File, [raw, binary, read, write]),
ok = file:write(Fd, [?LOGMAGIC, ?OPENED]),
ok = file:close(Fd).
-error_log(suite) -> [];
-error_log(doc) ->
- ["Error while repairing."];
+%% Error while repairing.
error_log(Conf) when is_list(Conf) ->
- ?line Dir = ?privdir(Conf),
-
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line file:delete(File),
- ?line del(File, No), % cleanup
- ?line LDir = File ++ ".2",
-
- ?line Q = qlen(),
- % dummy just to get all processes "above" disk_log going
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, external},{size, {100, No}}]),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
-
- % inc_wrap_file fails, the external log is not terminated
- ?line P0 = pps(),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, external},{size, {100, No}}]),
- ?line ok = file:make_dir(LDir),
- ?line {error, {file_error, _, _}} = disk_log:inc_wrap_file(n),
- ?line timer:sleep(500),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
-
- % inc_wrap_file fails, the internal log is not terminated, ./File.2/ exists
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal},{size, {100, No}}]),
- ?line {error, {file_error, _, _}} = disk_log:inc_wrap_file(n),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
-
- % truncate fails, the log is terminated, ./File.2/ exists
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, external},{size, {100, No}}]),
- ?line {error, {file_error, _, _}} = disk_log:truncate(n),
- ?line true = (P0 == pps()),
- ?line del(File, No),
+ Dir = ?privdir(Conf),
+
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ file:delete(File),
+ del(File, No), % cleanup
+ LDir = File ++ ".2",
+
+ Q = qlen(),
+ %% dummy just to get all processes "above" disk_log going
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, external},{size, {100, No}}]),
+ ok = disk_log:close(n),
+ del(File, No),
+
+ %% inc_wrap_file fails, the external log is not terminated
+ P0 = pps(),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, external},{size, {100, No}}]),
+ ok = file:make_dir(LDir),
+ {error, {file_error, _, _}} = disk_log:inc_wrap_file(n),
+ timer:sleep(500),
+ ok = disk_log:close(n),
+ del(File, No),
+
+ %% inc_wrap_file fails, the internal log is not terminated, ./File.2/ exists
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal},{size, {100, No}}]),
+ {error, {file_error, _, _}} = disk_log:inc_wrap_file(n),
+ ok = disk_log:close(n),
+ del(File, No),
+
+ %% truncate fails, the log is terminated, ./File.2/ exists
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, external},{size, {100, No}}]),
+ {error, {file_error, _, _}} = disk_log:truncate(n),
+ true = (P0 == pps()),
+ del(File, No),
%% OTP-4880.
- % reopen (rename) fails, the log is terminated, ./File.2/ exists
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, external},{size, 100000}]),
- ?line {error, {file_error, _, eisdir}} = disk_log:reopen(n, LDir),
- ?line true = (P0 == pps()),
- ?line file:delete(File),
+ %% reopen (rename) fails, the log is terminated, ./File.2/ exists
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, external},{size, 100000}]),
+ {error, {file_error, _, eisdir}} = disk_log:reopen(n, LDir),
+ true = (P0 == pps()),
+ file:delete(File),
- ?line B = mk_bytes(60),
+ B = mk_bytes(60),
%% OTP-4880. reopen a wrap log, rename fails
- ?line File2 = filename:join(Dir, "n.LOG2"),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File2}, {type, wrap},
- {format, external},{size, {100, No}}]),
- ?line ok = disk_log:blog_terms(n, [B,B,B]),
- ?line {error, {file_error, _, eisdir}} = disk_log:reopen(n, File),
- ?line {error, no_such_log} = disk_log:close(n),
- ?line del(File2, No),
- ?line del(File, No),
-
- % log, external wrap log, ./File.2/ exists
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, external},{size, {100, No}}]),
- ?line {error, {file_error, _, _}} = disk_log:blog_terms(n, [B,B,B]),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
-
- % log, internal wrap log, ./File.2/ exists
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal},{size, {100, No}}]),
- ?line {error, {file_error, _, _}} = disk_log:log_terms(n, [B,B,B]),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
-
- ?line ok = file:del_dir(LDir),
-
- % can't remove file when changing size
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal},{size, {100, No}}]),
- ?line ok = disk_log:log_terms(n, [B,B,B,B]),
- ?line ok = disk_log:change_size(n, {100, No-2}),
- ?line Three = File ++ ".3",
- ?line ok = file:delete(Three),
- ?line ok = file:make_dir(Three),
- ?line {error, {file_error, _, _}} = disk_log:log_terms(n, [B,B,B]),
- ?line timer:sleep(500),
- ?line ok = disk_log:close(n),
- ?line ok = file:del_dir(Three),
- ?line del(File, No),
- ?line Q = qlen(),
+ File2 = filename:join(Dir, "n.LOG2"),
+ {ok, n} = disk_log:open([{name, n}, {file, File2}, {type, wrap},
+ {format, external},{size, {100, No}}]),
+ ok = disk_log:blog_terms(n, [B,B,B]),
+ {error, {file_error, _, eisdir}} = disk_log:reopen(n, File),
+ {error, no_such_log} = disk_log:close(n),
+ del(File2, No),
+ del(File, No),
+
+ %% log, external wrap log, ./File.2/ exists
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, external},{size, {100, No}}]),
+ {error, {file_error, _, _}} = disk_log:blog_terms(n, [B,B,B]),
+ ok = disk_log:close(n),
+ del(File, No),
+
+ %% log, internal wrap log, ./File.2/ exists
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal},{size, {100, No}}]),
+ {error, {file_error, _, _}} = disk_log:log_terms(n, [B,B,B]),
+ ok = disk_log:close(n),
+ del(File, No),
+
+ ok = file:del_dir(LDir),
+
+ %% can't remove file when changing size
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal},{size, {100, No}}]),
+ ok = disk_log:log_terms(n, [B,B,B,B]),
+ ok = disk_log:change_size(n, {100, No-2}),
+ Three = File ++ ".3",
+ ok = file:delete(Three),
+ ok = file:make_dir(Three),
+ {error, {file_error, _, _}} = disk_log:log_terms(n, [B,B,B]),
+ timer:sleep(500),
+ ok = disk_log:close(n),
+ ok = file:del_dir(Three),
+ del(File, No),
+ Q = qlen(),
ok.
-
-chunk(suite) -> [];
-chunk(doc) ->
- ["Test chunk and chunk_step."];
+
+%% Test chunk and chunk_step.
chunk(Conf) when is_list(Conf) ->
%% See also halt_ro_crash/1 above.
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
+ File = filename:join(Dir, "n.LOG"),
No = 4,
- ?line B = mk_bytes(60),
- ?line BB = mk_bytes(64000), % 64 kB chunks
- ?line del(File, No),% cleanup
+ B = mk_bytes(60),
+ BB = mk_bytes(64000), % 64 kB chunks
+ del(File, No),% cleanup
%% Make sure chunk_step skips the rest of the binary.
%% OTP-3716. This was a bug...
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {50,No}}]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {50,No}}]),
%% 1, 2 and 3 on file one, 4 on file two.
- ?line ok = disk_log:log_terms(n, [1,2,3,4]),
- ?line {I1, [1]} = disk_log:chunk(n, start, 1),
- ?line [{node,Node}] = disk_log:chunk_info(I1),
- ?line Node = node(),
- ?line Error1 = {error, {no_continuation, foobar}} =
+ ok = disk_log:log_terms(n, [1,2,3,4]),
+ {I1, [1]} = disk_log:chunk(n, start, 1),
+ [{node,Node}] = disk_log:chunk_info(I1),
+ Node = node(),
+ Error1 = {error, {no_continuation, foobar}} =
disk_log:chunk_info(foobar),
- ?line "The term" ++ _ = format_error(Error1),
- ?line {ok, I2} = disk_log:chunk_step(n, I1, 1),
- ?line {error, {badarg, continuation}} = disk_log:chunk_step(n, foobar, 1),
- ?line {I3, [4]} = disk_log:chunk(n, I2, 1),
- ?line {ok, I4} = disk_log:chunk_step(n, I3, -1),
- ?line {_, [1]} = disk_log:chunk(n, I4, 1),
- ?line {error, {badarg, continuation}} = disk_log:bchunk(n, 'begin'),
- ?line {Ib1, [Bin1,Bin2]} = disk_log:bchunk(n, start, 2),
- ?line 1 = binary_to_term(Bin1),
- ?line 2 = binary_to_term(Bin2),
- ?line {ok, Ib2} = disk_log:chunk_step(n, Ib1, 1),
- ?line {Ib3, [Bin3]} = disk_log:bchunk(n, Ib2, 1),
- ?line 4 = binary_to_term(Bin3),
- ?line {ok, Ib4} = disk_log:chunk_step(n, Ib3, -1),
- ?line {_, [Bin4]} = disk_log:bchunk(n, Ib4, 1),
- ?line 1 = binary_to_term(Bin4),
- ?line {Ib5, [Bin1, Bin2, Bin17]} = disk_log:bchunk(n, start),
- ?line 3 = binary_to_term(Bin17),
- ?line {Ib6, [Bin3]} = disk_log:bchunk(n, Ib5, infinity),
- ?line eof = disk_log:bchunk(n, Ib6, infinity),
- ?line ok = disk_log:close(n),
- ?line del(File, No), % cleanup
+ "The term" ++ _ = format_error(Error1),
+ {ok, I2} = disk_log:chunk_step(n, I1, 1),
+ {error, {badarg, continuation}} = disk_log:chunk_step(n, foobar, 1),
+ {I3, [4]} = disk_log:chunk(n, I2, 1),
+ {ok, I4} = disk_log:chunk_step(n, I3, -1),
+ {_, [1]} = disk_log:chunk(n, I4, 1),
+ {error, {badarg, continuation}} = disk_log:bchunk(n, 'begin'),
+ {Ib1, [Bin1,Bin2]} = disk_log:bchunk(n, start, 2),
+ 1 = binary_to_term(Bin1),
+ 2 = binary_to_term(Bin2),
+ {ok, Ib2} = disk_log:chunk_step(n, Ib1, 1),
+ {Ib3, [Bin3]} = disk_log:bchunk(n, Ib2, 1),
+ 4 = binary_to_term(Bin3),
+ {ok, Ib4} = disk_log:chunk_step(n, Ib3, -1),
+ {_, [Bin4]} = disk_log:bchunk(n, Ib4, 1),
+ 1 = binary_to_term(Bin4),
+ {Ib5, [Bin1, Bin2, Bin17]} = disk_log:bchunk(n, start),
+ 3 = binary_to_term(Bin17),
+ {Ib6, [Bin3]} = disk_log:bchunk(n, Ib5, infinity),
+ eof = disk_log:bchunk(n, Ib6, infinity),
+ ok = disk_log:close(n),
+ del(File, No), % cleanup
%% external log, cannot read chunks
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, external}, {size, {100,No}}]),
- ?line {error, {badarg, continuation}} = disk_log:chunk(n, 'begin'),
- ?line {error, {format_external, n}} = disk_log:chunk(n, start),
- ?line Error2 = {error, {not_internal_wrap, n}} =
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, external}, {size, {100,No}}]),
+ {error, {badarg, continuation}} = disk_log:chunk(n, 'begin'),
+ {error, {format_external, n}} = disk_log:chunk(n, start),
+ Error2 = {error, {not_internal_wrap, n}} =
disk_log:chunk_step(n, start, 1),
- ?line "The requested" ++ _ = format_error(Error2),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
+ "The requested" ++ _ = format_error(Error2),
+ ok = disk_log:close(n),
+ del(File, No),
%% wrap, read_write
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {100,No}}]),
- ?line ok = disk_log:log_terms(n, [B,B,B,B]),
- ?line {C1, [_]} = disk_log:chunk(n, start),
- ?line {C2, [_]} = disk_log:chunk(n, C1),
- ?line {C3, [_]} = disk_log:chunk(n, C2),
- ?line {C4, [_]} = disk_log:chunk(n, C3, 1),
- ?line eof = disk_log:chunk(n, C4),
- ?line {C5, [_]} = disk_log:chunk(n, start),
- ?line {ok, C6} = disk_log:chunk_step(n, C5, 1),
- ?line {C7, [_]} = disk_log:chunk(n, C6),
- ?line {ok, C8} = disk_log:chunk_step(n, C7, 1),
- ?line {_, [_]} = disk_log:chunk(n, C8),
- ?line ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {100,No}}]),
+ ok = disk_log:log_terms(n, [B,B,B,B]),
+ {C1, [_]} = disk_log:chunk(n, start),
+ {C2, [_]} = disk_log:chunk(n, C1),
+ {C3, [_]} = disk_log:chunk(n, C2),
+ {C4, [_]} = disk_log:chunk(n, C3, 1),
+ eof = disk_log:chunk(n, C4),
+ {C5, [_]} = disk_log:chunk(n, start),
+ {ok, C6} = disk_log:chunk_step(n, C5, 1),
+ {C7, [_]} = disk_log:chunk(n, C6),
+ {ok, C8} = disk_log:chunk_step(n, C7, 1),
+ {_, [_]} = disk_log:chunk(n, C8),
+ ok = disk_log:close(n),
%% wrap, read_only
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {mode, read_only},
- {format, internal}, {size, {100,No}}]),
- ?line {CC1, [_]} = disk_log:chunk(n, start),
- ?line {CC2, [_]} = disk_log:chunk(n, CC1),
- ?line {CC3, [_]} = disk_log:chunk(n, CC2),
- ?line {CC4, [_]} = disk_log:chunk(n, CC3, 1),
- ?line eof = disk_log:chunk(n, CC4),
- ?line {CC5, [_]} = disk_log:chunk(n, start),
- ?line {ok, CC6} = disk_log:chunk_step(n, CC5, 1),
- ?line {CC7, [_]} = disk_log:chunk(n, CC6),
- ?line {ok, CC8} = disk_log:chunk_step(n, CC7, 1),
- ?line {_, [_]} = disk_log:chunk(n, CC8),
- ?line ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {mode, read_only},
+ {format, internal}, {size, {100,No}}]),
+ {CC1, [_]} = disk_log:chunk(n, start),
+ {CC2, [_]} = disk_log:chunk(n, CC1),
+ {CC3, [_]} = disk_log:chunk(n, CC2),
+ {CC4, [_]} = disk_log:chunk(n, CC3, 1),
+ eof = disk_log:chunk(n, CC4),
+ {CC5, [_]} = disk_log:chunk(n, start),
+ {ok, CC6} = disk_log:chunk_step(n, CC5, 1),
+ {CC7, [_]} = disk_log:chunk(n, CC6),
+ {ok, CC8} = disk_log:chunk_step(n, CC7, 1),
+ {_, [_]} = disk_log:chunk(n, CC8),
+ ok = disk_log:close(n),
%% OTP-3716. A bug: {Error, List} and {Error, List, Bad} could be
%% returned from chunk/2.
%% Magic bytes not OK.
%% File header (8 bytes) OK, item header not OK.
- ?line InvalidFile = add_ext(File, 1),
- ?line crash(InvalidFile, 15),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {mode, read_only},
- {format, internal}, {size, {100,No}}]),
- ?line {_, [], 61} = disk_log:chunk(n, start),
- ?line ok = disk_log:close(n),
+ InvalidFile = add_ext(File, 1),
+ crash(InvalidFile, 15),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {mode, read_only},
+ {format, internal}, {size, {100,No}}]),
+ {_, [], 61} = disk_log:chunk(n, start),
+ ok = disk_log:close(n),
%% read_write...
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {100,No}}]),
- ?line Error3 = {error, {corrupt_log_file, Culprit}} =
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {100,No}}]),
+ Error3 = {error, {corrupt_log_file, Culprit}} =
disk_log:chunk(n, start),
- ?line "The disk log file" ++ _ = format_error(Error3),
- ?line Culprit = InvalidFile,
- ?line ok = disk_log:close(n),
- ?line del(File, No),
+ "The disk log file" ++ _ = format_error(Error3),
+ Culprit = InvalidFile,
+ ok = disk_log:close(n),
+ del(File, No),
%% Two wrap log files, writing the second one, then reading the first
%% one, where a bogus term resides.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {40,No}}]),
- ?line ok = disk_log:log_terms(n, [{this,is}]), % first file full
- ?line ok = disk_log:log_terms(n, [{some,terms}]), % second file full
- ?line 2 = curf(n),
- ?line BadFile = add_ext(File, 1),
- ?line crash(BadFile, 28), % the _binary_ is now invalid
- ?line {error, {corrupt_log_file, BFile}} = disk_log:chunk(n, start, 1),
- ?line BadFile = BFile,
- ?line ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {40,No}}]),
+ ok = disk_log:log_terms(n, [{this,is}]), % first file full
+ ok = disk_log:log_terms(n, [{some,terms}]), % second file full
+ 2 = curf(n),
+ BadFile = add_ext(File, 1),
+ crash(BadFile, 28), % the _binary_ is now invalid
+ {error, {corrupt_log_file, BFile}} = disk_log:chunk(n, start, 1),
+ BadFile = BFile,
+ ok = disk_log:close(n),
%% The same, with a halt log.
- ?line file:delete(File), % cleanup
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line ok = disk_log:log_terms(n, [{this,is}]),
- ?line ok = disk_log:sync(n),
- ?line crash(File, 28), % the _binary_ is now invalid
- ?line {error, {corrupt_log_file, File2}} = disk_log:chunk(n, start, 1),
- ?line crash(File, 10),
- ?line {error,{corrupt_log_file,_}} = disk_log:bchunk(n, start, 1),
- ?line true = File == File2,
- ?line ok = disk_log:close(n),
- ?line del(File, No),
+ file:delete(File), % cleanup
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ ok = disk_log:log_terms(n, [{this,is}]),
+ ok = disk_log:sync(n),
+ crash(File, 28), % the _binary_ is now invalid
+ {error, {corrupt_log_file, File2}} = disk_log:chunk(n, start, 1),
+ crash(File, 10),
+ {error,{corrupt_log_file,_}} = disk_log:bchunk(n, start, 1),
+ true = File == File2,
+ ok = disk_log:close(n),
+ del(File, No),
%% halt, read_write
- ?line file:delete(File), % cleanup
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line ok = disk_log:log_terms(n, [BB,BB,BB,BB]),
- ?line {D1, [Ch1]} = disk_log:chunk(n, start, 1),
- ?line Ch1 = BB,
- ?line {D2, [Ch2]} = disk_log:chunk(n, D1, 1),
- ?line Ch2 = BB,
- ?line {D3, [Ch3]} = disk_log:chunk(n, D2, 1),
- ?line Ch3 = BB,
- ?line {D4, [Ch4]} = disk_log:chunk(n, D3, 1),
- ?line Ch4 = BB,
- ?line eof = disk_log:chunk(n, D4),
- ?line ok = disk_log:close(n),
+ file:delete(File), % cleanup
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ ok = disk_log:log_terms(n, [BB,BB,BB,BB]),
+ {D1, [Ch1]} = disk_log:chunk(n, start, 1),
+ Ch1 = BB,
+ {D2, [Ch2]} = disk_log:chunk(n, D1, 1),
+ Ch2 = BB,
+ {D3, [Ch3]} = disk_log:chunk(n, D2, 1),
+ Ch3 = BB,
+ {D4, [Ch4]} = disk_log:chunk(n, D3, 1),
+ Ch4 = BB,
+ eof = disk_log:chunk(n, D4),
+ ok = disk_log:close(n),
%% halt, read_only
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal},{mode,read_only}]),
- ?line {E1, [Ch5]} = disk_log:chunk(n, start, 1),
- ?line Ch5 = BB,
- ?line {E2, [Ch6]} = disk_log:chunk(n, E1, 1),
- ?line Ch6 = BB,
- ?line {E3, [Ch7]} = disk_log:chunk(n, E2, 1),
- ?line Ch7 = BB,
- ?line {E4, [Ch8]} = disk_log:chunk(n, E3, 1),
- ?line Ch8 = BB,
- ?line eof = disk_log:chunk(n, E4),
- ?line ok = disk_log:close(n),
- ?line file:delete(File), % cleanup
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal},{mode,read_only}]),
+ {E1, [Ch5]} = disk_log:chunk(n, start, 1),
+ Ch5 = BB,
+ {E2, [Ch6]} = disk_log:chunk(n, E1, 1),
+ Ch6 = BB,
+ {E3, [Ch7]} = disk_log:chunk(n, E2, 1),
+ Ch7 = BB,
+ {E4, [Ch8]} = disk_log:chunk(n, E3, 1),
+ Ch8 = BB,
+ eof = disk_log:chunk(n, E4),
+ ok = disk_log:close(n),
+ file:delete(File), % cleanup
%% More than 64 kB term.
- ?line BBB = term_to_binary(lists:duplicate(66000,$a)),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line ok = disk_log:log_terms(n, [BBB]),
- ?line {F1, [BBB1]} = disk_log:chunk(n, start),
- ?line BBB1 = BBB,
- ?line eof = disk_log:chunk(n, F1),
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}, {mode, read_only}]),
- ?line {F1r, [BBB2]} = disk_log:chunk(n, start),
- ?line BBB2 = BBB,
- ?line eof = disk_log:chunk(n, F1r),
- ?line ok = disk_log:close(n),
-
- ?line truncate(File, 8192),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line {error, {corrupt_log_file, _}} = disk_log:chunk(n, start),
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}, {mode, read_only}]),
- ?line {K1, [], 8176} = disk_log:chunk(n, start),
- ?line eof = disk_log:chunk(n, K1),
- ?line ok = disk_log:close(n),
- ?line file:delete(File), % cleanup
+ BBB = term_to_binary(lists:duplicate(66000,$a)),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ ok = disk_log:log_terms(n, [BBB]),
+ {F1, [BBB1]} = disk_log:chunk(n, start),
+ BBB1 = BBB,
+ eof = disk_log:chunk(n, F1),
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}, {mode, read_only}]),
+ {F1r, [BBB2]} = disk_log:chunk(n, start),
+ BBB2 = BBB,
+ eof = disk_log:chunk(n, F1r),
+ ok = disk_log:close(n),
+
+ truncate(File, 8192),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ {error, {corrupt_log_file, _}} = disk_log:chunk(n, start),
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}, {mode, read_only}]),
+ {K1, [], 8176} = disk_log:chunk(n, start),
+ eof = disk_log:chunk(n, K1),
+ ok = disk_log:close(n),
+ file:delete(File), % cleanup
%% OTP-3716. A bug: eof in the middle of the last element is not ok.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line ok = disk_log:log_terms(n, [B,BB]),
- ?line ok = disk_log:close(n),
- ?line truncate(File, 80),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line {G1, [_]} = disk_log:chunk(n, start, 1),
- ?line {error, {corrupt_log_file, _}} = disk_log:chunk(n, G1, 1),
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}, {mode, read_only}]),
- ?line {G1r, [_]} = disk_log:chunk(n, start, 1),
- ?line {_, [], 4} = disk_log:chunk(n, G1r, 1),
- ?line ok = disk_log:close(n),
- ?line file:delete(File), % cleanup
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ ok = disk_log:log_terms(n, [B,BB]),
+ ok = disk_log:close(n),
+ truncate(File, 80),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ {G1, [_]} = disk_log:chunk(n, start, 1),
+ {error, {corrupt_log_file, _}} = disk_log:chunk(n, G1, 1),
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}, {mode, read_only}]),
+ {G1r, [_]} = disk_log:chunk(n, start, 1),
+ {_, [], 4} = disk_log:chunk(n, G1r, 1),
+ ok = disk_log:close(n),
+ file:delete(File), % cleanup
%% Opening a wrap log read-only. The second of four terms is destroyed.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {size, {4000,No}}]),
- ?line ok = disk_log:log_terms(n,
- [{this,is},{some,terms},{on,a},{wrap,file}]),
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, internal}, {mode, read_only}]),
- ?line CrashFile = add_ext(File, 1),
- ?line crash(CrashFile, 51), % the binary term {some,terms} is now bad
- ?line {H1, [{this,is}], 18} = disk_log:chunk(n, start, 10),
- ?line {H2, [{on,a},{wrap,file}]} = disk_log:chunk(n, H1),
- ?line eof = disk_log:chunk(n, H2),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {size, {4000,No}}]),
+ ok = disk_log:log_terms(n,
+ [{this,is},{some,terms},{on,a},{wrap,file}]),
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, internal}, {mode, read_only}]),
+ CrashFile = add_ext(File, 1),
+ crash(CrashFile, 51), % the binary term {some,terms} is now bad
+ {H1, [{this,is}], 18} = disk_log:chunk(n, start, 10),
+ {H2, [{on,a},{wrap,file}]} = disk_log:chunk(n, H1),
+ eof = disk_log:chunk(n, H2),
+ ok = disk_log:close(n),
+ del(File, No),
%% The same as last, but with a halt log.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}, {mode, read_write}]),
- ?line ok = disk_log:alog_terms(n, [{this,is},{some,terms}]),
- ?line ok = disk_log:log_terms(n, [{on,a},{halt,file}]),
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}, {mode, read_only}]),
- ?line crash(File, 51), % the binary term {some,terms} is now bad
- ?line {J1, [{this,is}], 18} = disk_log:chunk(n, start, 10),
- ?line {J2, [{on,a},{halt,file}]} = disk_log:chunk(n, J1),
- ?line eof = disk_log:chunk(n, J2),
- ?line ok = disk_log:close(n),
- ?line file:delete(File),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}, {mode, read_write}]),
+ ok = disk_log:alog_terms(n, [{this,is},{some,terms}]),
+ ok = disk_log:log_terms(n, [{on,a},{halt,file}]),
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}, {mode, read_only}]),
+ crash(File, 51), % the binary term {some,terms} is now bad
+ {J1, [{this,is}], 18} = disk_log:chunk(n, start, 10),
+ {J2, [{on,a},{halt,file}]} = disk_log:chunk(n, J1),
+ eof = disk_log:chunk(n, J2),
+ ok = disk_log:close(n),
+ file:delete(File),
%% OTP-7641. Same as last one, but the size of the bad term is
%% less than ?HEADERSz (8) bytes.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}, {mode, read_write}]),
- ?line ok = disk_log:alog_terms(n, [{this,is},{s}]),
- ?line ok = disk_log:log_terms(n, [{on,a},{halt,file}]),
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}, {mode, read_only}]),
- ?line crash(File, 44), % the binary term {s} is now bad
- ?line {J11, [{this,is}], 7} = disk_log:chunk(n, start, 10),
- ?line {J21, [{on,a},{halt,file}]} = disk_log:chunk(n, J11),
- ?line eof = disk_log:chunk(n, J21),
- ?line ok = disk_log:close(n),
- ?line file:delete(File),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}, {mode, read_write}]),
+ ok = disk_log:alog_terms(n, [{this,is},{s}]),
+ ok = disk_log:log_terms(n, [{on,a},{halt,file}]),
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}, {mode, read_only}]),
+ crash(File, 44), % the binary term {s} is now bad
+ {J11, [{this,is}], 7} = disk_log:chunk(n, start, 10),
+ {J21, [{on,a},{halt,file}]} = disk_log:chunk(n, J11),
+ eof = disk_log:chunk(n, J21),
+ ok = disk_log:close(n),
+ file:delete(File),
%% Minimal MD5-proctected term, and maximal unprotected term.
%% A chunk ends in the middle of the MD5-sum.
- ?line MD5term = mk_bytes(64*1024-8),
- ?line NotMD5term = mk_bytes((64*1024-8)-1),
- ?line Term2 = mk_bytes((64*1024-8)-16),
- ?line MD5L = [MD5term,NotMD5term,Term2,MD5term,MD5term,NotMD5term],
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line ok = disk_log:log_terms(n, MD5L),
- ?line true = MD5L == get_all_terms(n),
- ?line ok = disk_log:close(n),
- ?line true = MD5L == get_all_terms(n, File, halt),
- ?line crash(File, 21), % the MD5-sum of the first term is now bad
- ?line true = {tl(MD5L),64*1024-8} == get_all_terms_and_bad(n, File, halt),
- ?line {_,64*1024-8} = get_all_binary_terms_and_bad(n, File, halt),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
- {format, internal}]),
- ?line {error, {corrupt_log_file, _}} = disk_log:chunk(n, start),
- ?line ok = disk_log:close(n),
- ?line file:delete(File),
+ MD5term = mk_bytes(64*1024-8),
+ NotMD5term = mk_bytes((64*1024-8)-1),
+ Term2 = mk_bytes((64*1024-8)-16),
+ MD5L = [MD5term,NotMD5term,Term2,MD5term,MD5term,NotMD5term],
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ ok = disk_log:log_terms(n, MD5L),
+ true = MD5L == get_all_terms(n),
+ ok = disk_log:close(n),
+ true = MD5L == get_all_terms(n, File, halt),
+ crash(File, 21), % the MD5-sum of the first term is now bad
+ true = {tl(MD5L),64*1024-8} == get_all_terms_and_bad(n, File, halt),
+ {_,64*1024-8} = get_all_binary_terms_and_bad(n, File, halt),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {format, internal}]),
+ {error, {corrupt_log_file, _}} = disk_log:chunk(n, start),
+ ok = disk_log:close(n),
+ file:delete(File),
%% A file with "old" terms (magic word is MAGICINT).
DataDir = ?datadir(Conf),
OldTermsFileOrig = filename:join(DataDir, "old_terms.LOG"),
OldTermsFile = filename:join(Dir, "old_terms.LOG"),
- ?line copy_file(OldTermsFileOrig, OldTermsFile),
- ?line {[_,_,_,_],0} = get_all_terms_and_bad(n, OldTermsFile, halt),
- ?line {ok, n} = disk_log:open([{name, n}, {file, OldTermsFile},
- {type, halt}, {format, internal}]),
- ?line [_,_,_,_] = get_all_terms(n),
- ?line ok = disk_log:close(n),
- ?line file:delete(OldTermsFile),
+ copy_file(OldTermsFileOrig, OldTermsFile),
+ {[_,_,_,_],0} = get_all_terms_and_bad(n, OldTermsFile, halt),
+ {ok, n} = disk_log:open([{name, n}, {file, OldTermsFile},
+ {type, halt}, {format, internal}]),
+ [_,_,_,_] = get_all_terms(n),
+ ok = disk_log:close(n),
+ file:delete(OldTermsFile),
ok.
-error_index(suite) -> [];
-error_index(doc) ->
- ["OTP-5558. Keep the contents of index files after disk crash."];
+%% OTP-5558. Keep the contents of index files after disk crash.
error_index(Conf) when is_list(Conf) ->
- ?line Dir = ?privdir(Conf),
+ Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line IdxFile = File ++ ".idx",
- ?line No = 4,
- ?line file:delete(File),
- ?line del(File, No), % cleanup
+ File = filename:join(Dir, "n.LOG"),
+ IdxFile = File ++ ".idx",
+ No = 4,
+ file:delete(File),
+ del(File, No), % cleanup
Args = [{name,n},{type,wrap},{size,{100,No}},{file,File}],
- ?line {ok, n} = disk_log:open(Args),
- ?line ok = disk_log:close(n),
- ?line Q = qlen(),
+ {ok, n} = disk_log:open(Args),
+ ok = disk_log:close(n),
+ Q = qlen(),
P0 = pps(),
- ?line ok = file:write_file(IdxFile, <<"abc">>),
- ?line {error, {invalid_index_file, _}} = disk_log:open(Args),
- ?line {error, {invalid_index_file, _}} = disk_log:open(Args),
- ?line {error, {invalid_index_file, _}} = disk_log:open(Args),
-
- ?line del(File, No),
- ?line true = (P0 == pps()),
- ?line true = (Q == qlen()),
+ ok = file:write_file(IdxFile, <<"abc">>),
+ {error, {invalid_index_file, _}} = disk_log:open(Args),
+ {error, {invalid_index_file, _}} = disk_log:open(Args),
+ {error, {invalid_index_file, _}} = disk_log:open(Args),
+
+ del(File, No),
+ true = (P0 == pps()),
+ true = (Q == qlen()),
ok.
-
-truncate(suite) -> [];
-truncate(doc) ->
- ["Test truncate/1 on halt and wrap logs."];
+
+%% Test truncate/1 on halt and wrap logs.
truncate(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line Q = qlen(),
+ Q = qlen(),
Halt = join(Dir, "halt.LOG"),
- % Halt logs.
-
- ?line file:delete(Halt), % cleanup
- ?line {ok, halt} = disk_log:open([{name, halt}, {type, halt}, {file, Halt},
- {head, header}, {notify, true}]),
- ?line infinity = sz(halt),
- ?line ok = disk_log:truncate(halt, tjohej),
- ?line rec(1, {disk_log, node(), halt, {truncated, 1}}),
- ?line ok = disk_log:change_size(halt, 10000),
- ?line 10000 = sz(halt),
- ?line disk_log:close(halt),
- ?line [tjohej] = get_all_terms(halt, Halt, halt),
- ?line file:delete(Halt),
-
- ?line {ok, halt} = disk_log:open([{name, halt}, {type, halt}, {file, Halt},
- {head, header}, {notify, true}]),
- ?line ok = disk_log:truncate(halt),
- ?line rec(1, {disk_log, node(), halt, {truncated, 1}}),
- ?line disk_log:close(halt),
- ?line [header] = get_all_terms(halt, Halt, halt),
- ?line file:delete(Halt),
-
- ?line {ok, halt} = disk_log:open([{name, halt}, {type, halt},
- {file, Halt}, {format, external},
- {head, "header"}, {notify, false}]),
- ?line ok = disk_log:btruncate(halt, "apa"),
- ?line disk_log:close(halt),
- ?line 3 = file_size(Halt),
- ?line file:delete(Halt),
-
+ %% Halt logs.
+
+ file:delete(Halt), % cleanup
+ {ok, halt} = disk_log:open([{name, halt}, {type, halt}, {file, Halt},
+ {head, header}, {notify, true}]),
+ infinity = sz(halt),
+ ok = disk_log:truncate(halt, tjohej),
+ rec(1, {disk_log, node(), halt, {truncated, 1}}),
+ ok = disk_log:change_size(halt, 10000),
+ 10000 = sz(halt),
+ disk_log:close(halt),
+ [tjohej] = get_all_terms(halt, Halt, halt),
+ file:delete(Halt),
+
+ {ok, halt} = disk_log:open([{name, halt}, {type, halt}, {file, Halt},
+ {head, header}, {notify, true}]),
+ ok = disk_log:truncate(halt),
+ rec(1, {disk_log, node(), halt, {truncated, 1}}),
+ disk_log:close(halt),
+ [header] = get_all_terms(halt, Halt, halt),
+ file:delete(Halt),
+
+ {ok, halt} = disk_log:open([{name, halt}, {type, halt},
+ {file, Halt}, {format, external},
+ {head, "header"}, {notify, false}]),
+ ok = disk_log:btruncate(halt, "apa"),
+ disk_log:close(halt),
+ 3 = file_size(Halt),
+ file:delete(Halt),
+
%% Wrap logs.
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line B = mk_bytes(60),
- ?line del(File, No), % cleanup
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ B = mk_bytes(60),
+ del(File, No), % cleanup
%% Internal with header.
- ?line Size = {100, No},
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {head, header}, {notify, true},
- {size, Size}]),
- ?line ok = disk_log:log_terms(n, [B,B,B]),
+ Size = {100, No},
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {head, header}, {notify, true},
+ {size, Size}]),
+ ok = disk_log:log_terms(n, [B,B,B]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(2, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:truncate(n, apa),
- ?line rec(1, {disk_log, node(), n, {truncated, 6}}),
- ?line {0, 0} = no_overflows(n),
- ?line 23 = curb(n),
- ?line 1 = curf(n),
- ?line 1 = cur_cnt(n),
- ?line true = (Size == sz(n)),
-
- ?line ok = disk_log:log_terms(n, [B, B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:close(n),
- ?line [apa, _, header, _] = get_all_terms(n, File, wrap),
- ?line del(File, No),
-
+ rec(2, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:truncate(n, apa),
+ rec(1, {disk_log, node(), n, {truncated, 6}}),
+ {0, 0} = no_overflows(n),
+ 23 = curb(n),
+ 1 = curf(n),
+ 1 = cur_cnt(n),
+ true = (Size == sz(n)),
+
+ ok = disk_log:log_terms(n, [B, B]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:close(n),
+ [apa, _, header, _] = get_all_terms(n, File, wrap),
+ del(File, No),
+
%% Internal without general header.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {notify, true},
- {size, {100, No}}]),
- ?line ok = disk_log:log_terms(n, [B,B,B]),
- ?line rec(2, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:truncate(n, apa),
- ?line rec(1, {disk_log, node(), n, {truncated, 3}}),
- ?line {0, 0} = no_overflows(n),
- ?line 23 = curb(n),
- ?line 1 = curf(n),
- ?line 1 = cur_cnt(n),
- ?line true = (Size == sz(n)),
-
- ?line ok = disk_log:log_terms(n, [B, B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:close(n),
- ?line [apa, _, _] = get_all_terms(n, File, wrap),
- ?line del(File, No),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {notify, true},
+ {size, {100, No}}]),
+ ok = disk_log:log_terms(n, [B,B,B]),
+ rec(2, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:truncate(n, apa),
+ rec(1, {disk_log, node(), n, {truncated, 3}}),
+ {0, 0} = no_overflows(n),
+ 23 = curb(n),
+ 1 = curf(n),
+ 1 = cur_cnt(n),
+ true = (Size == sz(n)),
+
+ ok = disk_log:log_terms(n, [B, B]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:close(n),
+ [apa, _, _] = get_all_terms(n, File, wrap),
+ del(File, No),
%% Internal without any header.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {notify, true},
- {size, {100, No}}]),
- ?line ok = disk_log:log_terms(n, [B,B,B]),
- ?line rec(2, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:truncate(n),
- ?line rec(1, {disk_log, node(), n, {truncated, 3}}),
- ?line {0, 0} = no_overflows(n),
- ?line 8 = curb(n),
- ?line 1 = curf(n),
- ?line 0 = cur_cnt(n),
- ?line true = (Size == sz(n)),
-
- ?line ok = disk_log:log_terms(n, [B, B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:close(n),
- ?line [_, _] = get_all_terms(n, File, wrap),
- ?line del(File, No),
- ?line Q = qlen(),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {notify, true},
+ {size, {100, No}}]),
+ ok = disk_log:log_terms(n, [B,B,B]),
+ rec(2, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:truncate(n),
+ rec(1, {disk_log, node(), n, {truncated, 3}}),
+ {0, 0} = no_overflows(n),
+ 8 = curb(n),
+ 1 = curf(n),
+ 0 = cur_cnt(n),
+ true = (Size == sz(n)),
+
+ ok = disk_log:log_terms(n, [B, B]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:close(n),
+ [_, _] = get_all_terms(n, File, wrap),
+ del(File, No),
+ Q = qlen(),
ok.
-many_users(suite) -> [];
-many_users(doc) ->
- ["Test many users logging and sync:ing at the same time."];
+%% Test many users logging and sync:ing at the same time.
many_users(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
N = 100,
@@ -3199,32 +3114,32 @@ many_users(Conf) when is_list(Conf) ->
Fun1 = fun(Name, Pid, I) -> disk_log:log(Name, {Pid, I}) end,
Fun2 = fun(Name, Pid, I) -> ok = disk_log:log(Name, {Pid, I}),
disk_log:sync(Name) end,
- ?line {C1, T1} = many(Fun2, NoClients, N, halt, internal, infinity, Dir),
- ?line true = lists:duplicate(NoClients, ok) == C1,
- ?line true = length(T1) == N*NoClients,
- ?line {C2, T2} = many(Fun1, NoClients, N, halt, internal, 1000, Dir),
- ?line true = lists:duplicate(NoClients, {error, {full,"log.LOG"}}) == C2,
- ?line true = length(T2) > 0,
- ?line {C3, T3} = many(Fun2, NoClients, N, wrap, internal,
- {300*NoClients,200}, Dir),
- ?line true = lists:duplicate(NoClients, ok) == C3,
- ?line true = length(T3) == N*NoClients,
+ {C1, T1} = many(Fun2, NoClients, N, halt, internal, infinity, Dir),
+ true = lists:duplicate(NoClients, ok) == C1,
+ true = length(T1) == N*NoClients,
+ {C2, T2} = many(Fun1, NoClients, N, halt, internal, 1000, Dir),
+ true = lists:duplicate(NoClients, {error, {full,"log.LOG"}}) == C2,
+ true = length(T2) > 0,
+ {C3, T3} = many(Fun2, NoClients, N, wrap, internal,
+ {300*NoClients,200}, Dir),
+ true = lists:duplicate(NoClients, ok) == C3,
+ true = length(T3) == N*NoClients,
ok.
many(Fun, NoClients, N, Type, Format, Size, Dir) ->
Name = "log.LOG",
File = filename:join(Dir, Name),
del_files(Size, File),
- ?line Q = qlen(),
- ?line {ok, _} = disk_log:open([{name,Name}, {type,Type}, {size,Size},
- {format,Format}, {file,File}]),
- ?line Pids = spawn_clients(NoClients, client, [self(), Name, N, Fun]),
- ?line Checked = check_clients(Pids),
- ?line ok = disk_log:close(Name),
- ?line Terms = get_all_terms(Name, File, Type),
- ?line del_files(Size, File),
- ?line Q = qlen(),
- ?line {Checked, Terms}.
+ Q = qlen(),
+ {ok, _} = disk_log:open([{name,Name}, {type,Type}, {size,Size},
+ {format,Format}, {file,File}]),
+ Pids = spawn_clients(NoClients, client, [self(), Name, N, Fun]),
+ Checked = check_clients(Pids),
+ ok = disk_log:close(Name),
+ Terms = get_all_terms(Name, File, Type),
+ del_files(Size, File),
+ Q = qlen(),
+ {Checked, Terms}.
spawn_clients(0, _F, _A) ->
[];
@@ -3251,211 +3166,208 @@ del_files(_Size, File) ->
-info_current(suite) -> [];
-info_current(doc) ->
- ["Test no_current_{bytes, items} as returned by info/0."];
+%% Test no_current_{bytes, items} as returned by info/0.
info_current(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
+ File = filename:join(Dir, "n.LOG"),
No = 4,
B = mk_bytes(60),
BB = mk_bytes(160), % bigger than a single wrap log file
SB = mk_bytes(10), % much smaller than a single wrap log file
- ?line del(File, No),% cleanup
+ del(File, No),% cleanup
- ?line Q = qlen(),
+ Q = qlen(),
%% Internal with header.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {head, header}, {size, {100,No}}]),
- ?line {26, 1} = {curb(n), cur_cnt(n)},
- ?line {1, 1} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log(n, B),
- ?line {94, 2} = {curb(n), cur_cnt(n)},
- ?line {2, 2} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {notify, true},
- {head, header}, {size, {100,No}}]),
- ?line {94, 2} = {curb(n), cur_cnt(n)},
- ?line {0, 2} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log(n, B),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line {94, 2} = {curb(n), cur_cnt(n)},
- ?line {2, 4} = {no_written_items(n), no_items(n)},
- ?line disk_log:inc_wrap_file(n),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line {26, 1} = {curb(n), cur_cnt(n)},
- ?line {3, 4} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log_terms(n, [B,B,B]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {head, header}, {size, {100,No}}]),
+ {26, 1} = {curb(n), cur_cnt(n)},
+ {1, 1} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log(n, B),
+ {94, 2} = {curb(n), cur_cnt(n)},
+ {2, 2} = {no_written_items(n), no_items(n)},
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {notify, true},
+ {head, header}, {size, {100,No}}]),
+ {94, 2} = {curb(n), cur_cnt(n)},
+ {0, 2} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log(n, B),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ {94, 2} = {curb(n), cur_cnt(n)},
+ {2, 4} = {no_written_items(n), no_items(n)},
+ disk_log:inc_wrap_file(n),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ {26, 1} = {curb(n), cur_cnt(n)},
+ {3, 4} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log_terms(n, [B,B,B]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line {94, 2} = {curb(n), cur_cnt(n)},
- ?line {8, 7} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line ok = disk_log:log_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line {94, 2} = {curb(n), cur_cnt(n)},
- ?line {12, 7} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log_terms(n, [BB,BB]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ {94, 2} = {curb(n), cur_cnt(n)},
+ {8, 7} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ ok = disk_log:log_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ {94, 2} = {curb(n), cur_cnt(n)},
+ {12, 7} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log_terms(n, [BB,BB]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(2, {disk_log, node(), n, {wrap, 2}}),
- ?line {194, 2} = {curb(n), cur_cnt(n)},
- ?line {16, 7} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log_terms(n, [SB,SB,SB]),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line {80, 4} = {curb(n), cur_cnt(n)},
- ?line {20, 9} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:close(n),
- ?line del(File, No),
+ rec(2, {disk_log, node(), n, {wrap, 2}}),
+ {194, 2} = {curb(n), cur_cnt(n)},
+ {16, 7} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log_terms(n, [SB,SB,SB]),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ {80, 4} = {curb(n), cur_cnt(n)},
+ {20, 9} = {no_written_items(n), no_items(n)},
+ ok = disk_log:close(n),
+ del(File, No),
%% Internal without header.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {size, {100,No}}]),
- ?line {8, 0} = {curb(n), cur_cnt(n)},
- ?line {0, 0} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log(n, B),
- ?line {76, 1} = {curb(n), cur_cnt(n)},
- ?line {1, 1} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {notify, true}, {size, {100,No}}]),
- ?line {76, 1} = {curb(n), cur_cnt(n)},
- ?line {0, 1} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log(n, B),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line {76, 1} = {curb(n), cur_cnt(n)},
- ?line {1, 2} = {no_written_items(n), no_items(n)},
- ?line disk_log:inc_wrap_file(n),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line {8, 0} = {curb(n), cur_cnt(n)},
- ?line {1, 2} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log_terms(n, [B,B,B]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {size, {100,No}}]),
+ {8, 0} = {curb(n), cur_cnt(n)},
+ {0, 0} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log(n, B),
+ {76, 1} = {curb(n), cur_cnt(n)},
+ {1, 1} = {no_written_items(n), no_items(n)},
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {notify, true}, {size, {100,No}}]),
+ {76, 1} = {curb(n), cur_cnt(n)},
+ {0, 1} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log(n, B),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ {76, 1} = {curb(n), cur_cnt(n)},
+ {1, 2} = {no_written_items(n), no_items(n)},
+ disk_log:inc_wrap_file(n),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ {8, 0} = {curb(n), cur_cnt(n)},
+ {1, 2} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log_terms(n, [B,B,B]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line {76, 1} = {curb(n), cur_cnt(n)},
- ?line {4, 4} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line ok = disk_log:log_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line {76, 1} = {curb(n), cur_cnt(n)},
- ?line {6, 4} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log_terms(n, [BB,BB]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ {76, 1} = {curb(n), cur_cnt(n)},
+ {4, 4} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ ok = disk_log:log_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ {76, 1} = {curb(n), cur_cnt(n)},
+ {6, 4} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log_terms(n, [BB,BB]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(2, {disk_log, node(), n, {wrap, 1}}),
- ?line {176, 1} = {curb(n), cur_cnt(n)},
- ?line {8, 4} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:log_terms(n, [SB,SB,SB]),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line {62, 3} = {curb(n), cur_cnt(n)},
- ?line {11, 6} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:close(n),
- ?line del(File, No),
+ rec(2, {disk_log, node(), n, {wrap, 1}}),
+ {176, 1} = {curb(n), cur_cnt(n)},
+ {8, 4} = {no_written_items(n), no_items(n)},
+ ok = disk_log:log_terms(n, [SB,SB,SB]),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ {62, 3} = {curb(n), cur_cnt(n)},
+ {11, 6} = {no_written_items(n), no_items(n)},
+ ok = disk_log:close(n),
+ del(File, No),
%% External with header.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, external}, {head, "header"},
- {size, {100,No}}]),
- ?line {6, 1} = {curb(n), cur_cnt(n)},
- ?line {1, 1} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog(n, B),
- ?line {62, 2} = {curb(n), cur_cnt(n)},
- ?line {2, 2} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, external}, {head, "header"},
- {notify, true}, {size, {100,No}}]),
- ?line {62, 2} = {curb(n), cur_cnt(n)},
- ?line {0, 2} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog(n, B),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line {62, 2} = {curb(n), cur_cnt(n)},
- ?line {2, 4} = {no_written_items(n), no_items(n)},
- ?line disk_log:inc_wrap_file(n),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line {6, 1} = {curb(n), cur_cnt(n)},
- ?line {3, 4} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog_terms(n, [B,B,B]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, external}, {head, "header"},
+ {size, {100,No}}]),
+ {6, 1} = {curb(n), cur_cnt(n)},
+ {1, 1} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog(n, B),
+ {62, 2} = {curb(n), cur_cnt(n)},
+ {2, 2} = {no_written_items(n), no_items(n)},
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, external}, {head, "header"},
+ {notify, true}, {size, {100,No}}]),
+ {62, 2} = {curb(n), cur_cnt(n)},
+ {0, 2} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog(n, B),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ {62, 2} = {curb(n), cur_cnt(n)},
+ {2, 4} = {no_written_items(n), no_items(n)},
+ disk_log:inc_wrap_file(n),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ {6, 1} = {curb(n), cur_cnt(n)},
+ {3, 4} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog_terms(n, [B,B,B]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line {62, 2} = {curb(n), cur_cnt(n)},
- ?line {8, 7} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line ok = disk_log:blog_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line {62, 2} = {curb(n), cur_cnt(n)},
- ?line {12, 7} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog_terms(n, [BB,BB]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ {62, 2} = {curb(n), cur_cnt(n)},
+ {8, 7} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ ok = disk_log:blog_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ {62, 2} = {curb(n), cur_cnt(n)},
+ {12, 7} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog_terms(n, [BB,BB]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(2, {disk_log, node(), n, {wrap, 2}}),
- ?line {162, 2} = {curb(n), cur_cnt(n)},
- ?line {16, 7} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog_terms(n, [SB,SB,SB]),
-
- ?line rec(1, {disk_log, node(), n, {wrap, 2}}),
- ?line {24, 4} = {curb(n), cur_cnt(n)},
- ?line {20, 9} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:close(n),
- ?line del(File, No),
+ rec(2, {disk_log, node(), n, {wrap, 2}}),
+ {162, 2} = {curb(n), cur_cnt(n)},
+ {16, 7} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog_terms(n, [SB,SB,SB]),
+
+ rec(1, {disk_log, node(), n, {wrap, 2}}),
+ {24, 4} = {curb(n), cur_cnt(n)},
+ {20, 9} = {no_written_items(n), no_items(n)},
+ ok = disk_log:close(n),
+ del(File, No),
%% External without header.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {format, external}, {size, {100,No}}]),
- ?line {0, 0} = {curb(n), cur_cnt(n)},
- ?line {0, 0} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog(n, B),
- ?line {56, 1} = {curb(n), cur_cnt(n)},
- ?line {1, 1} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:close(n),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
- {notify, true},
- {format, external}, {size, {100,No}}]),
- ?line {56, 1} = {curb(n), cur_cnt(n)},
- ?line {0, 1} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog(n, B),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line {56, 1} = {curb(n), cur_cnt(n)},
- ?line {1, 2} = {no_written_items(n), no_items(n)},
- ?line disk_log:inc_wrap_file(n),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line {0, 0} = {curb(n), cur_cnt(n)},
- ?line {1, 2} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog_terms(n, [B,B,B]),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {format, external}, {size, {100,No}}]),
+ {0, 0} = {curb(n), cur_cnt(n)},
+ {0, 0} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog(n, B),
+ {56, 1} = {curb(n), cur_cnt(n)},
+ {1, 1} = {no_written_items(n), no_items(n)},
+ ok = disk_log:close(n),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {notify, true},
+ {format, external}, {size, {100,No}}]),
+ {56, 1} = {curb(n), cur_cnt(n)},
+ {0, 1} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog(n, B),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ {56, 1} = {curb(n), cur_cnt(n)},
+ {1, 2} = {no_written_items(n), no_items(n)},
+ disk_log:inc_wrap_file(n),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ {0, 0} = {curb(n), cur_cnt(n)},
+ {1, 2} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog_terms(n, [B,B,B]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line {56, 1} = {curb(n), cur_cnt(n)},
- ?line {4, 4} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line ok = disk_log:blog_terms(n, [B]),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line {56, 1} = {curb(n), cur_cnt(n)},
- ?line {6, 4} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog_terms(n, [BB,BB]),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ {56, 1} = {curb(n), cur_cnt(n)},
+ {4, 4} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ ok = disk_log:blog_terms(n, [B]),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ {56, 1} = {curb(n), cur_cnt(n)},
+ {6, 4} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog_terms(n, [BB,BB]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(2, {disk_log, node(), n, {wrap, 1}}),
- ?line {156, 1} = {curb(n), cur_cnt(n)},
- ?line {8, 4} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:blog_terms(n, [SB,SB,SB]),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line {18, 3} = {curb(n), cur_cnt(n)},
- ?line {11, 6} = {no_written_items(n), no_items(n)},
- ?line ok = disk_log:close(n),
- ?line del(File, No),
-
- ?line Q = qlen(),
+ rec(2, {disk_log, node(), n, {wrap, 1}}),
+ {156, 1} = {curb(n), cur_cnt(n)},
+ {8, 4} = {no_written_items(n), no_items(n)},
+ ok = disk_log:blog_terms(n, [SB,SB,SB]),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ {18, 3} = {curb(n), cur_cnt(n)},
+ {11, 6} = {no_written_items(n), no_items(n)},
+ ok = disk_log:close(n),
+ del(File, No),
+
+ Q = qlen(),
ok.
-change_size_before(suite) -> [];
change_size_before(doc) ->
["Change size of a wrap log file before we have reached "
"to the file index corresponding to the new size"];
@@ -3478,138 +3390,136 @@ change_size_before(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
del(File, 5),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File},
- {type, wrap}, {size, {100,5}}]),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:change_size(a, {100, 3}),
- ?line [Log_1_1, Log_1_2,
- Log_2_1, Log_2_2] = get_all_terms(a),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_1_2_1),
- ?line disk_log:log(a, Log_1_2_2),
- ?line [Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_1_2_1, Log_1_2_2] = get_all_terms(a),
-
- ?line disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,3}}]),
- ?line [Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_1_2_1, Log_1_2_2] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File},
+ {type, wrap}, {size, {100,5}}]),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:change_size(a, {100, 3}),
+ [Log_1_1, Log_1_2,
+ Log_2_1, Log_2_2] = get_all_terms(a),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_1_2_1),
+ disk_log:log(a, Log_1_2_2),
+ [Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_1_2_1, Log_1_2_2] = get_all_terms(a),
+
+ disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,3}}]),
+ [Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_1_2_1, Log_1_2_2] = get_all_terms(a),
disk_log:close(a),
del(File, 5),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {60,5}}, {format, external}]),
- ?line disk_log:blog(a, Log_1_1),
- ?line disk_log:blog(a, Log_1_2),
- ?line disk_log:blog(a, Log_2_1),
- ?line disk_log:blog(a, Log_2_2),
- ?line disk_log:change_size(a, {60, 3}),
- ?line ok = disk_log:sync(a),
- ?line {ok, Fd1} = file:open(File ++ ".1", [read]),
- ?line Log11_12 = Log_1_1 ++ Log_1_2,
- ?line {ok,Log11_12} = file:read(Fd1, 200),
- ?line ok = file:close(Fd1),
- ?line {ok, Fd2} = file:open(File ++ ".2", [read]),
-% ?t:format(0, "~p~n",[file:read(Fd2, 200)]),
- ?line Log21_22 = Log_2_1 ++ Log_2_2,
- ?line {ok,Log21_22} = file:read(Fd2, 200),
- ?line ok = file:close(Fd2),
- ?line disk_log:blog(a, Log_3_1),
- ?line disk_log:blog(a, Log_3_2),
- ?line disk_log:blog(a, Log_1_2_1),
- ?line disk_log:blog(a, Log_1_2_2),
- ?line ok = disk_log:sync(a),
- ?line {ok, Fd2a} = file:open(File ++ ".2", [read]),
- ?line {ok,Log21_22} = file:read(Fd2a, 200),
- ?line ok = file:close(Fd2a),
- ?line {ok, Fd3a} = file:open(File ++ ".3", [read]),
- ?line Log31_32 = Log_3_1 ++ Log_3_2,
- ?line {ok,Log31_32} = file:read(Fd3a, 200),
- ?line ok = file:close(Fd3a),
- ?line {ok, Fd1a} = file:open(File ++ ".1", [read]),
- ?line Log121_122 = Log_1_2_1 ++ Log_1_2_2,
- ?line {ok,Log121_122} = file:read(Fd1a, 200),
- ?line ok = file:close(Fd1a),
-
- ?line disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {60,3}}, {format, external}]),
- ?line {ok, Fd2b} = file:open(File ++ ".2", [read]),
- ?line {ok,Log21_22} = file:read(Fd2b, 200),
- ?line ok = file:close(Fd2b),
- ?line {ok, Fd3b} = file:open(File ++ ".3", [read]),
- ?line {ok,Log31_32} = file:read(Fd3b, 200),
- ?line ok = file:close(Fd3b),
- ?line {ok, Fd1b} = file:open(File ++ ".1", [read]),
- ?line {ok,Log121_122} = file:read(Fd1b, 200),
- ?line ok = file:close(Fd1b),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {60,5}}, {format, external}]),
+ disk_log:blog(a, Log_1_1),
+ disk_log:blog(a, Log_1_2),
+ disk_log:blog(a, Log_2_1),
+ disk_log:blog(a, Log_2_2),
+ disk_log:change_size(a, {60, 3}),
+ ok = disk_log:sync(a),
+ {ok, Fd1} = file:open(File ++ ".1", [read]),
+ Log11_12 = Log_1_1 ++ Log_1_2,
+ {ok,Log11_12} = file:read(Fd1, 200),
+ ok = file:close(Fd1),
+ {ok, Fd2} = file:open(File ++ ".2", [read]),
+ Log21_22 = Log_2_1 ++ Log_2_2,
+ {ok,Log21_22} = file:read(Fd2, 200),
+ ok = file:close(Fd2),
+ disk_log:blog(a, Log_3_1),
+ disk_log:blog(a, Log_3_2),
+ disk_log:blog(a, Log_1_2_1),
+ disk_log:blog(a, Log_1_2_2),
+ ok = disk_log:sync(a),
+ {ok, Fd2a} = file:open(File ++ ".2", [read]),
+ {ok,Log21_22} = file:read(Fd2a, 200),
+ ok = file:close(Fd2a),
+ {ok, Fd3a} = file:open(File ++ ".3", [read]),
+ Log31_32 = Log_3_1 ++ Log_3_2,
+ {ok,Log31_32} = file:read(Fd3a, 200),
+ ok = file:close(Fd3a),
+ {ok, Fd1a} = file:open(File ++ ".1", [read]),
+ Log121_122 = Log_1_2_1 ++ Log_1_2_2,
+ {ok,Log121_122} = file:read(Fd1a, 200),
+ ok = file:close(Fd1a),
+
+ disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {60,3}}, {format, external}]),
+ {ok, Fd2b} = file:open(File ++ ".2", [read]),
+ {ok,Log21_22} = file:read(Fd2b, 200),
+ ok = file:close(Fd2b),
+ {ok, Fd3b} = file:open(File ++ ".3", [read]),
+ {ok,Log31_32} = file:read(Fd3b, 200),
+ ok = file:close(Fd3b),
+ {ok, Fd1b} = file:open(File ++ ".1", [read]),
+ {ok,Log121_122} = file:read(Fd1b, 200),
+ ok = file:close(Fd1b),
disk_log:close(a),
del(File, 5),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,5}}]),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:change_size(a, {60, 3}),
- ?line [Log_1_1, Log_1_2,
- Log_2_1, Log_2_2] = get_all_terms(a),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_1_2_1),
- ?line [Log_2_1, Log_2_2,
- Log_3_1,
- Log_1_2_1] = get_all_terms(a),
-
- ?line disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {60,3}}]),
- ?line [Log_2_1, Log_2_2,
- Log_3_1,
- Log_1_2_1] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,5}}]),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:change_size(a, {60, 3}),
+ [Log_1_1, Log_1_2,
+ Log_2_1, Log_2_2] = get_all_terms(a),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_1_2_1),
+ [Log_2_1, Log_2_2,
+ Log_3_1,
+ Log_1_2_1] = get_all_terms(a),
+
+ disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {60,3}}]),
+ [Log_2_1, Log_2_2,
+ Log_3_1,
+ Log_1_2_1] = get_all_terms(a),
disk_log:close(a),
del(File, 5),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {60, 3}}]),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:change_size(a, {100, 5}),
- ?line [Log_1_1,
- Log_2_1] = get_all_terms(a),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_4_1),
- ?line disk_log:log(a, Log_4_2),
- ?line disk_log:log(a, Log_5_1),
- ?line disk_log:log(a, Log_5_2),
- ?line disk_log:log(a, Log_1_2_1),
- ?line [Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_4_1, Log_4_2,
- Log_5_1, Log_5_2,
- Log_1_2_1] = get_all_terms(a),
-
- ?line disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100, 5}}]),
- ?line [Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_4_1, Log_4_2,
- Log_5_1, Log_5_2,
- Log_1_2_1] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {60, 3}}]),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_2_1),
+ disk_log:change_size(a, {100, 5}),
+ [Log_1_1,
+ Log_2_1] = get_all_terms(a),
+ disk_log:log(a, Log_2_2),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_4_1),
+ disk_log:log(a, Log_4_2),
+ disk_log:log(a, Log_5_1),
+ disk_log:log(a, Log_5_2),
+ disk_log:log(a, Log_1_2_1),
+ [Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_4_1, Log_4_2,
+ Log_5_1, Log_5_2,
+ Log_1_2_1] = get_all_terms(a),
+
+ disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100, 5}}]),
+ [Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_4_1, Log_4_2,
+ Log_5_1, Log_5_2,
+ Log_1_2_1] = get_all_terms(a),
disk_log:close(a),
del(File, 5).
-change_size_during(suite) -> [];
-change_size_during(doc) -> ["Change size of a wrap log file while logging "
- "to a file index between the old and the new size"];
+%% Change size of a wrap log file while logging to a file index
+%% between the old and the new size.
change_size_during(Conf) when is_list(Conf) ->
Log_1_1 = "first log first message",
@@ -3633,114 +3543,111 @@ change_size_during(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,5}}]),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_4_1),
- ?line disk_log:log(a, Log_4_2),
- ?line disk_log:log(a, Log_5_1),
- ?line disk_log:log(a, Log_5_2),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_4_1),
- ?line disk_log:log(a, Log_4_2),
- ?line disk_log:change_size(a, {100, 3}),
- ?line [Log_5_1, Log_5_2,
- Log_1_1, Log_1_2,
- Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_4_1, Log_4_2] = get_all_terms(a),
- ?line disk_log:log(a, Log_1_2_1),
- ?line disk_log:log(a, Log_1_2_2),
- ?line [Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_4_1, Log_4_2,
- Log_1_2_1, Log_1_2_2] = get_all_terms(a),
-
- ?line disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,3}}]),
- ?line [Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_4_1, Log_4_2,
- Log_1_2_1, Log_1_2_2] = get_all_terms(a),
- ?line disk_log:log(a, Log_2_2_1),
- ?line disk_log:log(a, Log_2_2_2),
- ?line disk_log:log(a, Log_3_2_1),
- ?line disk_log:log(a, Log_3_2_2),
- ?line disk_log:log(a, Log_1_3_1),
- ?line disk_log:log(a, Log_1_3_2),
- ?line [Log_2_2_1, Log_2_2_2,
- Log_3_2_1, Log_3_2_2,
- Log_1_3_1, Log_1_3_2] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,5}}]),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_4_1),
+ disk_log:log(a, Log_4_2),
+ disk_log:log(a, Log_5_1),
+ disk_log:log(a, Log_5_2),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_4_1),
+ disk_log:log(a, Log_4_2),
+ disk_log:change_size(a, {100, 3}),
+ [Log_5_1, Log_5_2,
+ Log_1_1, Log_1_2,
+ Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_4_1, Log_4_2] = get_all_terms(a),
+ disk_log:log(a, Log_1_2_1),
+ disk_log:log(a, Log_1_2_2),
+ [Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_4_1, Log_4_2,
+ Log_1_2_1, Log_1_2_2] = get_all_terms(a),
+
disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,3}}]),
- ?line [Log_2_2_1, Log_2_2_2,
- Log_3_2_1, Log_3_2_2,
- Log_1_3_1, Log_1_3_2] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,3}}]),
+ [Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_4_1, Log_4_2,
+ Log_1_2_1, Log_1_2_2] = get_all_terms(a),
+ disk_log:log(a, Log_2_2_1),
+ disk_log:log(a, Log_2_2_2),
+ disk_log:log(a, Log_3_2_1),
+ disk_log:log(a, Log_3_2_2),
+ disk_log:log(a, Log_1_3_1),
+ disk_log:log(a, Log_1_3_2),
+ [Log_2_2_1, Log_2_2_2,
+ Log_3_2_1, Log_3_2_2,
+ Log_1_3_1, Log_1_3_2] = get_all_terms(a),
+ disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,3}}]),
+ [Log_2_2_1, Log_2_2_2,
+ Log_3_2_1, Log_3_2_2,
+ Log_1_3_1, Log_1_3_2] = get_all_terms(a),
disk_log:close(a),
del(File, 5),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,5}}]),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_4_1),
- ?line disk_log:log(a, Log_4_2),
- ?line disk_log:log(a, Log_5_1),
- ?line disk_log:log(a, Log_5_2),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_4_1),
- ?line disk_log:log(a, Log_4_2),
- ?line disk_log:log(a, Log_5_1),
- ?line disk_log:log(a, Log_5_2),
- ?line disk_log:change_size(a, {100, 3}),
- ?line [Log_1_1, Log_1_2,
- Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_4_1, Log_4_2,
- Log_5_1, Log_5_2] = get_all_terms(a),
- ?line disk_log:log(a, Log_1_2_1),
- ?line disk_log:log(a, Log_1_2_2),
- ?line disk_log:log(a, Log_2_2_1),
- ?line disk_log:log(a, Log_2_2_2),
- ?line disk_log:log(a, Log_3_2_1),
- ?line disk_log:log(a, Log_3_2_2),
- ?line disk_log:log(a, Log_1_3_1),
- ?line disk_log:log(a, Log_1_3_2),
- ?line [Log_2_2_1, Log_2_2_2,
- Log_3_2_1, Log_3_2_2,
- Log_1_3_1, Log_1_3_2] = get_all_terms(a),
-
- ?line disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,3}}]),
- ?line [Log_2_2_1, Log_2_2_2,
- Log_3_2_1, Log_3_2_2,
- Log_1_3_1, Log_1_3_2] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,5}}]),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_4_1),
+ disk_log:log(a, Log_4_2),
+ disk_log:log(a, Log_5_1),
+ disk_log:log(a, Log_5_2),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_4_1),
+ disk_log:log(a, Log_4_2),
+ disk_log:log(a, Log_5_1),
+ disk_log:log(a, Log_5_2),
+ disk_log:change_size(a, {100, 3}),
+ [Log_1_1, Log_1_2,
+ Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_4_1, Log_4_2,
+ Log_5_1, Log_5_2] = get_all_terms(a),
+ disk_log:log(a, Log_1_2_1),
+ disk_log:log(a, Log_1_2_2),
+ disk_log:log(a, Log_2_2_1),
+ disk_log:log(a, Log_2_2_2),
+ disk_log:log(a, Log_3_2_1),
+ disk_log:log(a, Log_3_2_2),
+ disk_log:log(a, Log_1_3_1),
+ disk_log:log(a, Log_1_3_2),
+ [Log_2_2_1, Log_2_2_2,
+ Log_3_2_1, Log_3_2_2,
+ Log_1_3_1, Log_1_3_2] = get_all_terms(a),
+
+ disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}, {size, {100,3}}]),
+ [Log_2_2_1, Log_2_2_2,
+ Log_3_2_1, Log_3_2_2,
+ Log_1_3_1, Log_1_3_2] = get_all_terms(a),
disk_log:close(a),
del(File, 5).
-change_size_after(suite) -> [];
-change_size_after(doc) ->
- ["Change size of a wrap log file before we have reached "
- "(on the second round) "
- "to the file index corresponding to the new size"];
+%% Change size of a wrap log file before we have reached (on the
+%% second round) to the file index corresponding to the new size.
change_size_after(Conf) when is_list(Conf) ->
Log_1_1 = "first log first message",
@@ -3758,172 +3665,169 @@ change_size_after(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "a.LOG"),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,5}}]),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_4_1),
- ?line disk_log:log(a, Log_4_2),
- ?line disk_log:log(a, Log_5_1),
- ?line disk_log:log(a, Log_5_2),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:change_size(a, {100, 3}),
- ?line [Log_3_1,Log_3_2,
- Log_4_1, Log_4_2,
- Log_5_1, Log_5_2,
- Log_1_1, Log_1_2,
- Log_2_1, Log_2_2] = get_all_terms(a),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_1_2_1),
- ?line disk_log:log(a, Log_1_2_2),
- ?line [Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_1_2_1, Log_1_2_2] = get_all_terms(a),
-
- ?line disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,3}}]),
- ?line [Log_2_1, Log_2_2,
- Log_3_1, Log_3_2,
- Log_1_2_1, Log_1_2_2] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,5}}]),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_4_1),
+ disk_log:log(a, Log_4_2),
+ disk_log:log(a, Log_5_1),
+ disk_log:log(a, Log_5_2),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:change_size(a, {100, 3}),
+ [Log_3_1,Log_3_2,
+ Log_4_1, Log_4_2,
+ Log_5_1, Log_5_2,
+ Log_1_1, Log_1_2,
+ Log_2_1, Log_2_2] = get_all_terms(a),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_1_2_1),
+ disk_log:log(a, Log_1_2_2),
+ [Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_1_2_1, Log_1_2_2] = get_all_terms(a),
+
+ disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,3}}]),
+ [Log_2_1, Log_2_2,
+ Log_3_1, Log_3_2,
+ Log_1_2_1, Log_1_2_2] = get_all_terms(a),
disk_log:close(a),
del(File, 5),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {100,5}}]),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_3_2),
- ?line disk_log:log(a, Log_4_1),
- ?line disk_log:log(a, Log_4_2),
- ?line disk_log:log(a, Log_5_1),
- ?line disk_log:log(a, Log_5_2),
- ?line disk_log:log(a, Log_1_1),
- ?line disk_log:log(a, Log_1_2),
- ?line disk_log:log(a, Log_2_1),
- ?line disk_log:log(a, Log_2_2),
- ?line disk_log:change_size(a, {60, 3}),
- ?line [Log_3_1,Log_3_2,
- Log_4_1, Log_4_2,
- Log_5_1, Log_5_2,
- Log_1_1, Log_1_2,
- Log_2_1, Log_2_2] = get_all_terms(a),
- ?line disk_log:log(a, Log_3_1),
- ?line disk_log:log(a, Log_1_2_1),
- ?line [Log_2_1, Log_2_2,
- Log_3_1,
- Log_1_2_1] = get_all_terms(a),
-
- ?line disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
- {size, {60,3}}]),
- ?line [Log_2_1, Log_2_2,
- Log_3_1,
- Log_1_2_1] = get_all_terms(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {100,5}}]),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_3_2),
+ disk_log:log(a, Log_4_1),
+ disk_log:log(a, Log_4_2),
+ disk_log:log(a, Log_5_1),
+ disk_log:log(a, Log_5_2),
+ disk_log:log(a, Log_1_1),
+ disk_log:log(a, Log_1_2),
+ disk_log:log(a, Log_2_1),
+ disk_log:log(a, Log_2_2),
+ disk_log:change_size(a, {60, 3}),
+ [Log_3_1,Log_3_2,
+ Log_4_1, Log_4_2,
+ Log_5_1, Log_5_2,
+ Log_1_1, Log_1_2,
+ Log_2_1, Log_2_2] = get_all_terms(a),
+ disk_log:log(a, Log_3_1),
+ disk_log:log(a, Log_1_2_1),
+ [Log_2_1, Log_2_2,
+ Log_3_1,
+ Log_1_2_1] = get_all_terms(a),
+
+ disk_log:close(a),
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {size, {60,3}}]),
+ [Log_2_1, Log_2_2,
+ Log_3_1,
+ Log_1_2_1] = get_all_terms(a),
disk_log:close(a),
del(File, 5).
-default_size(suite) -> [];
-default_size(doc) -> ["Open an existing wrap log without size option "];
+%% Open an existing wrap log without size option .
default_size(Conf) when is_list(Conf) ->
- ?line Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "a.LOG"),
- ?line {error, {badarg, size}} = disk_log:open([{name,a}, {file, File},
+ Dir = ?privdir(Conf),
+ File = filename:join(Dir, "a.LOG"),
+ {error, {badarg, size}} = disk_log:open([{name,a}, {file, File},
{type, wrap}]),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap},
{size, {100,5}}]),
- ?line disk_log:close(a),
+ disk_log:close(a),
- ?line {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}]),
- ?line {100, 5} = disk_log_1:read_size_file(File),
- ?line ok = disk_log:close(a),
- ?line del(File, 5).
+ {ok, a} = disk_log:open([{name,a}, {file, File}, {type, wrap}]),
+ {100, 5} = disk_log_1:read_size_file(File),
+ ok = disk_log:close(a),
+ del(File, 5).
-change_size2(suite) -> [];
-change_size2(doc) -> ["Testing change_size/2 a bit more..."];
+%% Testing change_size/2 a bit more...
change_size2(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line del(File, No), % cleanup
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ del(File, No), % cleanup
%% External halt.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {size, 100000},
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {size, 100000},
{format, external}, {type, halt}]),
- ?line B = mk_bytes(60), % 56 actually...
- ?line ok = disk_log:blog_terms(n, [B,list_to_binary(B),B]),
- ?line Error1 = {error, {new_size_too_small,n,168}} =
+ B = mk_bytes(60), % 56 actually...
+ ok = disk_log:blog_terms(n, [B,list_to_binary(B),B]),
+ Error1 = {error, {new_size_too_small,n,168}} =
disk_log:change_size(n, 167),
- ?line "The current size" ++ _ = format_error(Error1),
- ?line ok = disk_log:change_size(n, infinity),
- ?line ok = disk_log:change_size(n, 168),
- ?line ok = disk_log:close(n),
- ?line file:delete(File), % cleanup
+ "The current size" ++ _ = format_error(Error1),
+ ok = disk_log:change_size(n, infinity),
+ ok = disk_log:change_size(n, 168),
+ ok = disk_log:close(n),
+ file:delete(File), % cleanup
%% External wrap.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
{size, {100,No}}, {notify, true},
{format, external}]),
- ?line BB = mk_bytes(160),
- ?line ok = disk_log:blog_terms(n, [BB, BB, BB, BB]), % create all files
+ BB = mk_bytes(160),
+ ok = disk_log:blog_terms(n, [BB, BB, BB, BB]), % create all files
%% Used to be one message, but now one per wrapped file.
- ?line rec(3, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:blog_terms(n, [BB, BB]),
+ rec(3, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:blog_terms(n, [BB, BB]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(2, {disk_log, node(), n, {wrap, 1}}),
- ?line ok = disk_log:change_size(n, {100, 2}),
- ?line ok = disk_log:change_size(n, {100, 2}),
- ?line {100, 2} = sz(n),
- ?line ok = disk_log:balog_terms(n, [BB, BB]),
- ?line ok = disk_log:balog_terms(n, [BB]),
- ?line ok = disk_log:blog_terms(n, [BB]),
+ rec(2, {disk_log, node(), n, {wrap, 1}}),
+ ok = disk_log:change_size(n, {100, 2}),
+ ok = disk_log:change_size(n, {100, 2}),
+ {100, 2} = sz(n),
+ ok = disk_log:balog_terms(n, [BB, BB]),
+ ok = disk_log:balog_terms(n, [BB]),
+ ok = disk_log:blog_terms(n, [BB]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(4, {disk_log, node(), n, {wrap, 1}}),
- ?line ok = disk_log:change_size(n, {100, 4}),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
+ rec(4, {disk_log, node(), n, {wrap, 1}}),
+ ok = disk_log:change_size(n, {100, 4}),
+ ok = disk_log:close(n),
+ del(File, No),
%% Internal wrap.
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
{size, {100,No}}, {notify, true},
{format, internal}]),
- ?line ok = disk_log:blog_terms(n, [BB, BB, BB, BB]), % create all files
+ ok = disk_log:blog_terms(n, [BB, BB, BB, BB]), % create all files
%% Used to be one message, but now one per wrapped file.
- ?line rec(3, {disk_log, node(), n, {wrap, 0}}),
- ?line ok = disk_log:blog_terms(n, [BB, BB]),
+ rec(3, {disk_log, node(), n, {wrap, 0}}),
+ ok = disk_log:blog_terms(n, [BB, BB]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(2, {disk_log, node(), n, {wrap, 1}}),
- ?line ok = disk_log:change_size(n, {100, 2}),
- ?line {100, 2} = sz(n),
- ?line ok = disk_log:blog_terms(n, [BB, BB, BB, BB]),
+ rec(2, {disk_log, node(), n, {wrap, 1}}),
+ ok = disk_log:change_size(n, {100, 2}),
+ {100, 2} = sz(n),
+ ok = disk_log:blog_terms(n, [BB, BB, BB, BB]),
%% Used to be one message, but now one per wrapped file.
- ?line rec(4, {disk_log, node(), n, {wrap, 1}}),
- ?line ok = disk_log:close(n),
- ?line del(File, No).
+ rec(4, {disk_log, node(), n, {wrap, 1}}),
+ ok = disk_log:close(n),
+ del(File, No).
-change_size_truncate(suite) -> [];
-change_size_truncate(doc) -> ["OTP-3484: truncating index file"];
+%% OTP-3484: truncating index file.
change_size_truncate(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "bert.LOG"),
- ?line No = 3,
- ?line B = mk_bytes(60),
+ File = filename:join(Dir, "bert.LOG"),
+ No = 3,
+ B = mk_bytes(60),
%% The problem here is truncation of the index file. One cannot easily
%% check that the index file is correctly updated, but print_index_file()
@@ -3933,541 +3837,527 @@ change_size_truncate(Conf) when is_list(Conf) ->
%% Change the size immediately after creating the log, while there
%% are no log files. This used to write stuff a negative offset
%% from the beginning of the file.
- ?line del(File, No+1),
- ?line {ok, bert} = disk_log:open([{name,bert}, {type,wrap}, {file, File},
+ del(File, No+1),
+ {ok, bert} = disk_log:open([{name,bert}, {type,wrap}, {file, File},
{notify, true}, {size,{1000,255}}]),
- ?line ok = disk_log:change_size(bert,{100,No}),
- ?line ok = disk_log:blog(bert, B),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 0}}),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 0}}),
- ?line 3 = curf(bert),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- ?line 1 = curf(bert),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
-
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
-
- % Three items expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
- ?line 3 = curf(bert),
- ?line ok = disk_log:change_size(bert,{100,1}),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- % Three items expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- % One item expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
-
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- ?line ok = disk_log:close(bert),
- ?line del(File, No),
+ ok = disk_log:change_size(bert,{100,No}),
+ ok = disk_log:blog(bert, B),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 0}}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 0}}),
+ 3 = curf(bert),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ 1 = curf(bert),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+
+ %% Three items expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
+ 3 = curf(bert),
+ ok = disk_log:change_size(bert,{100,1}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ %% Three items expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ %% One item expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
+
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ ok = disk_log:close(bert),
+ del(File, No),
%% Part 2.
%% Change the size twice, the second time while the the effects of
%% the first changed have not yet been handled. Finally close before
%% the index file has been truncated.
- ?line del(File, No),
- ?line {ok, bert} = disk_log:open([{name,bert}, {type,wrap}, {file, File},
+ del(File, No),
+ {ok, bert} = disk_log:open([{name,bert}, {type,wrap}, {file, File},
{notify, true}, {size,{100,No}}]),
- ?line ok = disk_log:blog(bert, B),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 0}}),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 0}}),
+ ok = disk_log:blog(bert, B),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 0}}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 0}}),
- ?line 3 = curf(bert),
- ?line ok = disk_log:change_size(bert,{100,No-1}),
+ 3 = curf(bert),
+ ok = disk_log:change_size(bert,{100,No-1}),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
- ?line 1 = curf(bert),
- ?line ok = disk_log:change_size(bert,{100,No+1}),
+ 1 = curf(bert),
+ ok = disk_log:change_size(bert,{100,No+1}),
- % Three items expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
+ %% Three items expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
- % Three items expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
+ %% Three items expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
- ?line 2 = curf(bert),
- ?line ok = disk_log:change_size(bert,{100,1}),
+ 2 = curf(bert),
+ ok = disk_log:change_size(bert,{100,1}),
- % Three items expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
+ %% Three items expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
- ?line ok = disk_log:close(bert),
+ ok = disk_log:close(bert),
- % State: .siz is 1, current file is 2, index file size is 3...
+ %% State: .siz is 1, current file is 2, index file size is 3...
- ?line {ok, bert} = disk_log:open([{name,bert}, {file, File},
+ {ok, bert} = disk_log:open([{name,bert}, {file, File},
{type,wrap}, {notify, true}]),
- % Three items expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
+ %% Three items expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
- ?line 2 = curf(bert),
- ?line ok = disk_log:blog(bert, B),
- ?line rec(1, {disk_log, node(), bert, {wrap, 1}}),
- ?line ok = disk_log:close(bert),
+ 2 = curf(bert),
+ ok = disk_log:blog(bert, B),
+ rec(1, {disk_log, node(), bert, {wrap, 1}}),
+ ok = disk_log:close(bert),
- ?line {ok, bert} = disk_log:open([{name,bert}, {file, File},
+ {ok, bert} = disk_log:open([{name,bert}, {file, File},
{type,wrap}, {notify, true}]),
- % Two items expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
+ %% Two items expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
- ?line 1 = curf(bert),
- ?line ok = disk_log:blog(bert, B),
+ 1 = curf(bert),
+ ok = disk_log:blog(bert, B),
%% Expect {wrap 0}. Nothing lost now, last wrap notification
%% reported one lost item.
- ?line rec(1, {disk_log, node(), bert, {wrap, 0}}),
+ rec(1, {disk_log, node(), bert, {wrap, 0}}),
- % One item expected.
- % disk_log_1:print_index_file("bert.LOG.idx"),
- ?line ok = disk_log:close(bert),
+ %% One item expected.
+ %% disk_log_1:print_index_file("bert.LOG.idx"),
+ ok = disk_log:close(bert),
- ?line del(File, No),
+ del(File, No),
ok.
-change_attribute(suite) -> [];
-change_attribute(doc) ->
- ["Change notify and head"];
+%% Change notify and head.
change_attribute(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line No = 4,
- ?line del(File, No), % cleanup
- ?line B = mk_bytes(60),
+ File = filename:join(Dir, "n.LOG"),
+ No = 4,
+ del(File, No), % cleanup
+ B = mk_bytes(60),
- ?line Q = qlen(),
+ Q = qlen(),
- % test change_notify
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ %% test change_notify
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
{size, {100,No}}]),
- ?line {ok, n} = disk_log:open([{name, n}]), % ignored...
- ?line ok = disk_log:log_terms(n, [B,B]),
- ?line {error, {badarg, notify}} = disk_log:change_notify(n, self(), wrong),
- ?line ok = disk_log:change_notify(n, self(), false),
- ?line ok = disk_log:change_notify(n, self(), true),
- ?line Error1 = {error, {not_owner, _}} =
+ {ok, n} = disk_log:open([{name, n}]), % ignored...
+ ok = disk_log:log_terms(n, [B,B]),
+ {error, {badarg, notify}} = disk_log:change_notify(n, self(), wrong),
+ ok = disk_log:change_notify(n, self(), false),
+ ok = disk_log:change_notify(n, self(), true),
+ Error1 = {error, {not_owner, _}} =
disk_log:change_notify(n, none, true),
- ?line "The pid" ++ _ = format_error(Error1),
- ?line 2 = no_written_items(n),
- ?line 0 = users(n),
- ?line Parent = self(),
- ?line Pid = spawn(fun() -> disk_log:close(n), Parent ! {self(),done} end),
- ?line receive {Pid, done} -> ok end,
- ?line 0 = users(n),
- ?line 1 = length(owners(n)),
-
- % test change_header
- ?line {error, {badarg, head}} = disk_log:change_header(n, none),
- ?line {error, {badarg, head}} =
+ "The pid" ++ _ = format_error(Error1),
+ 2 = no_written_items(n),
+ 0 = users(n),
+ Parent = self(),
+ Pid = spawn(fun() -> disk_log:close(n), Parent ! {self(),done} end),
+ receive {Pid, done} -> ok end,
+ 0 = users(n),
+ 1 = length(owners(n)),
+
+ %% test change_header
+ {error, {badarg, head}} = disk_log:change_header(n, none),
+ {error, {badarg, head}} =
disk_log:change_header(n, {head_func, {1,2,3}}),
- ?line ok = disk_log:change_header(n, {head, header}),
- ?line ok = disk_log:log(n, B),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line 4 = no_written_items(n),
- ?line ok = disk_log:change_header(n, {head, none}),
- ?line ok = disk_log:log(n, B),
- ?line rec(1, {disk_log, node(), n, {wrap, 0}}),
- ?line 5 = no_written_items(n),
- ?line ok = disk_log:change_header(n,
+ ok = disk_log:change_header(n, {head, header}),
+ ok = disk_log:log(n, B),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ 4 = no_written_items(n),
+ ok = disk_log:change_header(n, {head, none}),
+ ok = disk_log:log(n, B),
+ rec(1, {disk_log, node(), n, {wrap, 0}}),
+ 5 = no_written_items(n),
+ ok = disk_log:change_header(n,
{head_func, {?MODULE, head_fun, [{ok,header}]}}),
- ?line ok = disk_log:log(n, B),
- ?line rec(1, {disk_log, node(), n, {wrap, 1}}),
- ?line 7 = no_written_items(n),
- ?line ok = disk_log:close(n),
- ?line {error, no_such_log} = disk_log:close(n),
- ?line del(File, No),
- ?line file:delete(File), % cleanup
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {format, external},
+ ok = disk_log:log(n, B),
+ rec(1, {disk_log, node(), n, {wrap, 1}}),
+ 7 = no_written_items(n),
+ ok = disk_log:close(n),
+ {error, no_such_log} = disk_log:close(n),
+ del(File, No),
+ file:delete(File), % cleanup
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {format, external},
{type, halt}]),
- ?line {error, {badarg, head}} = disk_log:change_header(n, {head, header}),
- ?line ok = disk_log:change_header(n, {head, "header"}),
- ?line ok = disk_log:close(n),
- ?line file:delete(File),
+ {error, {badarg, head}} = disk_log:change_header(n, {head, header}),
+ ok = disk_log:change_header(n, {head, "header"}),
+ ok = disk_log:close(n),
+ file:delete(File),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
{size, {100,No}}]),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
{size, {100,No}}]),
- ?line ok = disk_log:change_notify(n, self(), true),
- ?line ok = disk_log:change_header(n, {head, tjolahopp}),
- ?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
+ ok = disk_log:change_notify(n, self(), true),
+ ok = disk_log:change_header(n, {head, tjolahopp}),
+ {ok, n} = disk_log:open([{name, n}, {file, File}, {type, wrap},
{size, {100,No}}, {notify, true}]),
- ?line ok = disk_log:close(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line Q = qlen(),
- ?line del(File, No).
+ ok = disk_log:close(n),
+ {error, no_such_log} = disk_log:info(n),
+ Q = qlen(),
+ del(File, No).
-dist_open(suite) -> [];
-dist_open(doc) ->
- ["Open a distributed log"];
+%% Open a distributed log.
dist_open(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir(Conf),
- ?line true = is_alive(),
-
- ?line Q = qlen(),
- ?line File = filename:join(PrivDir, "n.LOG"),
- ?line File1 = filename:join(PrivDir, "n1.LOG"),
- ?line No = 3,
- ?line file:delete(File),
- ?line del(File, No), % cleanup
- ?line del(File1, No), % cleanup
- ?line B = mk_bytes(60),
-
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node} = start_node(disk_log, "-pa " ++ PA),
- ?line wait_for_ready_net(),
+ PrivDir = ?privdir(Conf),
+ true = is_alive(),
+
+ Q = qlen(),
+ File = filename:join(PrivDir, "n.LOG"),
+ File1 = filename:join(PrivDir, "n1.LOG"),
+ No = 3,
+ file:delete(File),
+ del(File, No), % cleanup
+ del(File1, No), % cleanup
+ B = mk_bytes(60),
+
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, Node} = start_node(disk_log, "-pa " ++ PA),
+ wait_for_ready_net(),
%% open non-distributed on this node:
- ?line {ok,n} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {ok,n} = disk_log:open([{name, n}, {file, File}, {type, halt},
{distributed, []}]),
- ?line Error1 = {error, {halt_log, n}} = disk_log:inc_wrap_file(n),
- ?line "The halt log" ++ _ = format_error(Error1),
- ?line ok = disk_log:lclose(n),
- ?line file:delete(File),
+ Error1 = {error, {halt_log, n}} = disk_log:inc_wrap_file(n),
+ "The halt log" ++ _ = format_error(Error1),
+ ok = disk_log:lclose(n),
+ file:delete(File),
%% open distributed on this node:
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {[_],[]} = disk_log:open([{name, n}, {file, File}, {type, halt},
{distributed, [node()]}]),
%% the error message is ignored:
- ?line ok = disk_log:inc_wrap_file(n),
- ?line ok = disk_log:close(n),
- ?line file:delete(File),
+ ok = disk_log:inc_wrap_file(n),
+ ok = disk_log:close(n),
+ file:delete(File),
%% open a wrap log on this node, write something on this node
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File},
+ {[_],[]} = disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}},
{distributed, [node()]}]),
- ?line ok = disk_log:log(n, B),
- ?line ok = disk_log:close(n),
+ ok = disk_log:log(n, B),
+ ok = disk_log:close(n),
%% open a wrap log on this node and aother node, write something
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File},
+ {[_],[]} = disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}},
{distributed, [node()]}]),
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File1},
+ {[_],[]} = disk_log:open([{name, n}, {file, File1},
{type, wrap}, {size, {50, No}},
{distributed, [Node]}]),
- ?line ok = disk_log:log(n, B),
- ?line ok = rpc:call(Node, disk_log, log, [n, B]),
- ?line ok = disk_log:close(n),
- ?line del(File, No),
- ?line del(File1, No),
- ?line file:delete(File),
+ ok = disk_log:log(n, B),
+ ok = rpc:call(Node, disk_log, log, [n, B]),
+ ok = disk_log:close(n),
+ del(File, No),
+ del(File1, No),
+ file:delete(File),
%% open a wrap log on this node and another node, use lclose
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File},
+ {[_],[]} = disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}},
{distributed, [node()]}]),
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File},
+ {[_],[]} = disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}},
{distributed, [node()]},
{linkto,none}]),
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File1},
+ {[_],[]} = disk_log:open([{name, n}, {file, File1},
{type, wrap}, {size, {50, No}},
{distributed, [Node]}]),
- ?line [_, _] = distributed(n),
- ?line ok = disk_log:lclose(n, Node),
- ?line [_] = distributed(n),
- ?line ok = disk_log:lclose(n),
- ?line ok = disk_log:lclose(n),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line del(File, No),
- ?line del(File1, No),
- ?line file:delete(File),
-
- % open an invalid log file, and see how error are handled
- ?line First = "n.LOG.1",
- ?line make_file(PrivDir, First, 8),
-
- ?line {[], [_,_]} = disk_log:open([{name, n}, {file, File},
+ [_, _] = distributed(n),
+ ok = disk_log:lclose(n, Node),
+ [_] = distributed(n),
+ ok = disk_log:lclose(n),
+ ok = disk_log:lclose(n),
+ {error, no_such_log} = disk_log:info(n),
+ del(File, No),
+ del(File1, No),
+ file:delete(File),
+
+ %% open an invalid log file, and see how error are handled
+ First = "n.LOG.1",
+ make_file(PrivDir, First, 8),
+
+ {[], [_,_]} = disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}},
{distributed, [Node,node()]}]),
- ?line del(File, No),
- ?line file:delete(File),
+ del(File, No),
+ file:delete(File),
- % open a wrap on one other node (not on this node)
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File},
+ %% open a wrap on one other node (not on this node)
+ {[_],[]} = disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}},
{distributed, [Node]}]),
- ?line ok = rpc:call(Node, disk_log, log, [n, B]),
- ?line {error, no_such_log} = disk_log:lclose(n),
- ?line ok = disk_log:close(n),
+ ok = rpc:call(Node, disk_log, log, [n, B]),
+ {error, no_such_log} = disk_log:lclose(n),
+ ok = disk_log:close(n),
- ?line Q = qlen(),
+ Q = qlen(),
- ?line {error, no_such_log} = disk_log:info(n),
- ?line del(File, No),
- ?line file:delete(File),
- ?line stop_node(Node),
+ {error, no_such_log} = disk_log:info(n),
+ del(File, No),
+ file:delete(File),
+ stop_node(Node),
ok.
-dist_error_open(suite) -> [];
-dist_error_open(doc) ->
- ["Open a log distributed and not distributed"];
+%% Open a log distributed and not distributed.
dist_error_open(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir(Conf),
- ?line true = is_alive(),
-
- ?line Q = qlen(),
- ?line File = filename:join(PrivDir, "bert.LOG"),
- ?line File1 = filename:join(PrivDir, "bert1.LOG"),
- ?line No = 3,
- ?line file:delete(File),
- ?line del(File, No), % cleanup
- ?line del(File1, No), % cleanup
-
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node} = start_node(disk_log, "-pa " ++ PA),
- ?line wait_for_ready_net(),
-
- % open non-distributed on this node:
- ?line {ok,n} = disk_log:open([{name, n}, {file, File},
+ PrivDir = ?privdir(Conf),
+ true = is_alive(),
+
+ Q = qlen(),
+ File = filename:join(PrivDir, "bert.LOG"),
+ File1 = filename:join(PrivDir, "bert1.LOG"),
+ No = 3,
+ file:delete(File),
+ del(File, No), % cleanup
+ del(File1, No), % cleanup
+
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, Node} = start_node(disk_log, "-pa " ++ PA),
+ wait_for_ready_net(),
+
+ %% open non-distributed on this node:
+ {ok,n} = disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}}]),
- % trying to open distributed on this node (error):
- ?line {[],[Error1={ENode,{error,{node_already_open,n}}}]} =
+ %% trying to open distributed on this node (error):
+ {[],[Error1={ENode,{error,{node_already_open,n}}}]} =
disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}},
{distributed, [node()]}]),
- ?line true =
+ true =
lists:prefix(lists:flatten(io_lib:format("~p: The distribution",
[ENode])),
format_error(Error1)),
- ?line ok = disk_log:lclose(n),
+ ok = disk_log:lclose(n),
- % open distributed on this node:
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File},
+ %% open distributed on this node:
+ {[_],[]} = disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}},
{distributed, [node()]}]),
- % trying to open non-distributed on this node (error):
- ?line {_,{node_already_open,n}} =
+ %% trying to open non-distributed on this node (error):
+ {_,{node_already_open,n}} =
disk_log:open([{name, n}, {file, File},
{type, wrap}, {size, {50, No}}]),
- ?line ok = disk_log:close(n),
- ?line Q = qlen(),
+ ok = disk_log:close(n),
+ Q = qlen(),
- ?line del(File, No),
- ?line del(File1, No),
- ?line file:delete(File),
- ?line stop_node(Node),
+ del(File, No),
+ del(File1, No),
+ file:delete(File),
+ stop_node(Node),
ok.
-dist_notify(suite) -> [];
-dist_notify(doc) ->
- ["Notification from other node"];
+%% Notification from other node.
dist_notify(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir(Conf),
- ?line true = is_alive(),
+ PrivDir = ?privdir(Conf),
+ true = is_alive(),
- ?line File = filename:join(PrivDir, "bert.LOG"),
- ?line File1 = filename:join(PrivDir, "bert1.LOG"),
- ?line No = 3,
- ?line B = mk_bytes(60),
- ?line file:delete(File),
- ?line file:delete(File1),
- ?line del(File, No), % cleanup
- ?line del(File1, No),
-
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node} = start_node(disk_log, "-pa " ++ PA),
- ?line wait_for_ready_net(),
-
- % opening distributed on this node:
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File}, {notify, false},
+ File = filename:join(PrivDir, "bert.LOG"),
+ File1 = filename:join(PrivDir, "bert1.LOG"),
+ No = 3,
+ B = mk_bytes(60),
+ file:delete(File),
+ file:delete(File1),
+ del(File, No), % cleanup
+ del(File1, No),
+
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, Node} = start_node(disk_log, "-pa " ++ PA),
+ wait_for_ready_net(),
+
+ %% opening distributed on this node:
+ {[_],[]} = disk_log:open([{name, n}, {file, File}, {notify, false},
{type, wrap}, {size, {50, No}},
{distributed, [node()]}]),
- % opening distributed on other node:
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File1},
+ %% opening distributed on other node:
+ {[_],[]} = disk_log:open([{name, n}, {file, File1},
{notify, true}, {linkto, self()},
{type, wrap}, {size, {50, No}},
{distributed, [Node]}]),
- ?line disk_log:alog(n, B),
- ?line disk_log:alog(n, B),
- ?line ok = disk_log:sync(n),
- ?line rec(1, {disk_log, Node, n, {wrap, 0}}),
- ?line ok = disk_log:close(n),
-
- ?line del(File, No),
- ?line del(File1, No),
- ?line file:delete(File),
- ?line stop_node(Node),
+ disk_log:alog(n, B),
+ disk_log:alog(n, B),
+ ok = disk_log:sync(n),
+ rec(1, {disk_log, Node, n, {wrap, 0}}),
+ ok = disk_log:close(n),
+
+ del(File, No),
+ del(File1, No),
+ file:delete(File),
+ stop_node(Node),
ok.
-dist_terminate(suite) -> [];
-dist_terminate(doc) ->
- ["Terminating nodes with distributed logs"];
+%% Terminating nodes with distributed logs.
dist_terminate(Conf) when is_list(Conf) ->
- ?line Dir = ?privdir(Conf),
- ?line true = is_alive(),
+ Dir = ?privdir(Conf),
+ true = is_alive(),
- ?line File = filename:join(Dir, "n.LOG"),
- ?line File1 = filename:join(Dir, "n1.LOG"),
+ File = filename:join(Dir, "n.LOG"),
+ File1 = filename:join(Dir, "n1.LOG"),
No = 1,
del(File, No), % cleanup
del(File1, No), % cleanup
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node} = start_node(disk_log, "-pa " ++ PA),
- ?line wait_for_ready_net(),
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, Node} = start_node(disk_log, "-pa " ++ PA),
+ wait_for_ready_net(),
%% Distributed versions of two of the situations in close_block(/1.
%% One of two owners terminates.
- ?line Pid1 = spawn_link(?MODULE, lserv, [n]),
- ?line Pid2 = spawn_link(?MODULE, lserv, [n]),
- ?line {[{_, {ok, n}}], []} = sync_do(Pid1, {dist_open, File, node()}),
- ?line {[{_, {ok, n}}], []} = sync_do(Pid2, {dist_open, File1, Node}),
- ?line [_] = sync_do(Pid1, owners),
- ?line [_] = sync_do(Pid2, owners),
- ?line 0 = sync_do(Pid1, users),
- ?line 0 = sync_do(Pid2, users),
- ?line sync_do(Pid1, terminate),
- ?line [_] = sync_do(Pid2, owners),
- ?line 0 = sync_do(Pid2, users),
- ?line sync_do(Pid2, terminate),
- ?line {error, no_such_log} = disk_log:info(n),
+ Pid1 = spawn_link(?MODULE, lserv, [n]),
+ Pid2 = spawn_link(?MODULE, lserv, [n]),
+ {[{_, {ok, n}}], []} = sync_do(Pid1, {dist_open, File, node()}),
+ {[{_, {ok, n}}], []} = sync_do(Pid2, {dist_open, File1, Node}),
+ [_] = sync_do(Pid1, owners),
+ [_] = sync_do(Pid2, owners),
+ 0 = sync_do(Pid1, users),
+ 0 = sync_do(Pid2, users),
+ sync_do(Pid1, terminate),
+ [_] = sync_do(Pid2, owners),
+ 0 = sync_do(Pid2, users),
+ sync_do(Pid2, terminate),
+ {error, no_such_log} = disk_log:info(n),
%% Users terminate (no link...).
- ?line Pid3 = spawn_link(?MODULE, lserv, [n]),
- ?line Pid4 = spawn_link(?MODULE, lserv, [n]),
- ?line {[{_, {ok, n}}], []} =
+ Pid3 = spawn_link(?MODULE, lserv, [n]),
+ Pid4 = spawn_link(?MODULE, lserv, [n]),
+ {[{_, {ok, n}}], []} =
sync_do(Pid3, {dist_open, File, none, node()}),
- ?line {[{_, {ok, n}}], []} =
+ {[{_, {ok, n}}], []} =
sync_do(Pid4, {dist_open, File1, none, Node}),
- ?line [] = sync_do(Pid3, owners),
- ?line [] = sync_do(Pid4, owners),
- ?line 1 = sync_do(Pid3, users),
- ?line 1 = sync_do(Pid4, users),
- ?line sync_do(Pid3, terminate),
- ?line [] = sync_do(Pid4, owners),
- ?line 1 = sync_do(Pid4, users),
- ?line sync_do(Pid4, terminate),
- ?line ok = disk_log:close(n), % closing all nodes
- ?line {error, no_such_log} = disk_log:info(n),
+ [] = sync_do(Pid3, owners),
+ [] = sync_do(Pid4, owners),
+ 1 = sync_do(Pid3, users),
+ 1 = sync_do(Pid4, users),
+ sync_do(Pid3, terminate),
+ [] = sync_do(Pid4, owners),
+ 1 = sync_do(Pid4, users),
+ sync_do(Pid4, terminate),
+ ok = disk_log:close(n), % closing all nodes
+ {error, no_such_log} = disk_log:info(n),
- ?line del(File, No),
- ?line del(File1, No),
- ?line stop_node(Node),
+ del(File, No),
+ del(File1, No),
+ stop_node(Node),
ok.
-dist_accessible(suite) -> [];
-dist_accessible(doc) ->
- ["Accessible logs on nodes"];
+%% Accessible logs on nodes.
dist_accessible(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir(Conf),
-
- ?line true = is_alive(),
-
- ?line F1 = filename:join(PrivDir, "a.LOG"),
- ?line file:delete(F1),
- ?line F2 = filename:join(PrivDir, "b.LOG"),
- ?line file:delete(F2),
- ?line F3 = filename:join(PrivDir, "c.LOG"),
- ?line file:delete(F3),
- ?line F4 = filename:join(PrivDir, "d.LOG"),
- ?line file:delete(F1),
- ?line F5 = filename:join(PrivDir, "e.LOG"),
- ?line file:delete(F2),
- ?line F6 = filename:join(PrivDir, "f.LOG"),
- ?line file:delete(F3),
-
- ?line {[],[]} = disk_log:accessible_logs(),
- ?line {ok, a} = disk_log:open([{name, a}, {type, halt}, {file, F1}]),
- ?line {[a],[]} = disk_log:accessible_logs(),
- ?line {ok, b} = disk_log:open([{name, b}, {type, halt}, {file, F2}]),
- ?line {[a,b],[]} = disk_log:accessible_logs(),
- ?line {ok, c} = disk_log:open([{name, c}, {type, halt}, {file, F3}]),
- ?line {[a,b,c],[]} = disk_log:accessible_logs(),
-
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node} = start_node(disk_log, "-pa " ++ PA),
- ?line wait_for_ready_net(),
-
- ?line {[_],[]} = disk_log:open([{name, a}, {file, F4}, {type, halt},
+ PrivDir = ?privdir(Conf),
+
+ true = is_alive(),
+
+ F1 = filename:join(PrivDir, "a.LOG"),
+ file:delete(F1),
+ F2 = filename:join(PrivDir, "b.LOG"),
+ file:delete(F2),
+ F3 = filename:join(PrivDir, "c.LOG"),
+ file:delete(F3),
+ F4 = filename:join(PrivDir, "d.LOG"),
+ file:delete(F1),
+ F5 = filename:join(PrivDir, "e.LOG"),
+ file:delete(F2),
+ F6 = filename:join(PrivDir, "f.LOG"),
+ file:delete(F3),
+
+ {[],[]} = disk_log:accessible_logs(),
+ {ok, a} = disk_log:open([{name, a}, {type, halt}, {file, F1}]),
+ {[a],[]} = disk_log:accessible_logs(),
+ {ok, b} = disk_log:open([{name, b}, {type, halt}, {file, F2}]),
+ {[a,b],[]} = disk_log:accessible_logs(),
+ {ok, c} = disk_log:open([{name, c}, {type, halt}, {file, F3}]),
+ {[a,b,c],[]} = disk_log:accessible_logs(),
+
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, Node} = start_node(disk_log, "-pa " ++ PA),
+ wait_for_ready_net(),
+
+ {[_],[]} = disk_log:open([{name, a}, {file, F4}, {type, halt},
{distributed, [Node]}]),
- ?line {[a,b,c],[]} = disk_log:accessible_logs(),
- ?line {[],[a]} = rpc:call(Node, disk_log, accessible_logs, []),
- ?line {[_],[]} = disk_log:open([{name, b}, {file, F5}, {type, halt},
+ {[a,b,c],[]} = disk_log:accessible_logs(),
+ {[],[a]} = rpc:call(Node, disk_log, accessible_logs, []),
+ {[_],[]} = disk_log:open([{name, b}, {file, F5}, {type, halt},
{distributed, [Node]}]),
- ?line {[],[a,b]} = rpc:call(Node, disk_log, accessible_logs, []),
- ?line {[_],[]} = disk_log:open([{name, c}, {file, F6}, {type, halt},
+ {[],[a,b]} = rpc:call(Node, disk_log, accessible_logs, []),
+ {[_],[]} = disk_log:open([{name, c}, {file, F6}, {type, halt},
{distributed, [Node]}]),
- ?line {[],[a,b,c]} = rpc:call(Node, disk_log, accessible_logs, []),
- ?line {[a,b,c],[]} = disk_log:accessible_logs(),
- ?line ok = disk_log:close(a),
- ?line {[b,c],[a]} = disk_log:accessible_logs(),
- ?line ok = disk_log:close(b),
- ?line {[c],[a,b]} = disk_log:accessible_logs(),
- ?line ok = disk_log:close(b),
- ?line {[c],[a]} = disk_log:accessible_logs(),
- ?line {[],[a,c]} = rpc:call(Node, disk_log, accessible_logs, []),
- ?line ok = disk_log:close(c),
- ?line {[],[a,c]} = disk_log:accessible_logs(),
- ?line ok = disk_log:close(c),
- ?line {[],[a]} = disk_log:accessible_logs(),
- ?line {[],[a]} = rpc:call(Node, disk_log, accessible_logs, []),
- ?line ok = disk_log:close(a),
- ?line {[],[]} = disk_log:accessible_logs(),
- ?line {[],[]} = rpc:call(Node, disk_log, accessible_logs, []),
-
- ?line file:delete(F1),
- ?line file:delete(F2),
- ?line file:delete(F3),
- ?line file:delete(F4),
- ?line file:delete(F5),
- ?line file:delete(F6),
-
- ?line stop_node(Node),
+ {[],[a,b,c]} = rpc:call(Node, disk_log, accessible_logs, []),
+ {[a,b,c],[]} = disk_log:accessible_logs(),
+ ok = disk_log:close(a),
+ {[b,c],[a]} = disk_log:accessible_logs(),
+ ok = disk_log:close(b),
+ {[c],[a,b]} = disk_log:accessible_logs(),
+ ok = disk_log:close(b),
+ {[c],[a]} = disk_log:accessible_logs(),
+ {[],[a,c]} = rpc:call(Node, disk_log, accessible_logs, []),
+ ok = disk_log:close(c),
+ {[],[a,c]} = disk_log:accessible_logs(),
+ ok = disk_log:close(c),
+ {[],[a]} = disk_log:accessible_logs(),
+ {[],[a]} = rpc:call(Node, disk_log, accessible_logs, []),
+ ok = disk_log:close(a),
+ {[],[]} = disk_log:accessible_logs(),
+ {[],[]} = rpc:call(Node, disk_log, accessible_logs, []),
+
+ file:delete(F1),
+ file:delete(F2),
+ file:delete(F3),
+ file:delete(F4),
+ file:delete(F5),
+ file:delete(F6),
+
+ stop_node(Node),
ok.
-dist_deadlock(suite) -> [];
-dist_deadlock(doc) ->
- ["OTP-4405. Deadlock between two nodes could happen."];
+%% OTP-4405. Deadlock between two nodes could happen.
dist_deadlock(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir(Conf),
+ PrivDir = ?privdir(Conf),
- ?line true = is_alive(),
+ true = is_alive(),
- ?line F1 = filename:join(PrivDir, "a.LOG"),
- ?line file:delete(F1),
- ?line F2 = filename:join(PrivDir, "b.LOG"),
- ?line file:delete(F2),
+ F1 = filename:join(PrivDir, "a.LOG"),
+ file:delete(F1),
+ F2 = filename:join(PrivDir, "b.LOG"),
+ file:delete(F2),
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node1} = start_node(disk_log_node1, "-pa " ++ PA),
- ?line {ok, Node2} = start_node(disk_log_node2, "-pa " ++ PA),
- ?line wait_for_ready_net(),
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, Node1} = start_node(disk_log_node1, "-pa " ++ PA),
+ {ok, Node2} = start_node(disk_log_node2, "-pa " ++ PA),
+ wait_for_ready_net(),
Self = self(),
Fun1 = fun() -> dist_dl(Node2, a, F1, Self) end,
@@ -4477,11 +4367,11 @@ dist_deadlock(Conf) when is_list(Conf) ->
receive {P1, a} -> ok end,
receive {P2, b} -> ok end,
- ?line stop_node(Node1),
- ?line stop_node(Node2),
+ stop_node(Node1),
+ stop_node(Node2),
- ?line file:delete(F1),
- ?line file:delete(F2),
+ file:delete(F1),
+ file:delete(F2),
ok.
dist_dl(Node, Name, File, Pid) ->
@@ -4492,12 +4382,10 @@ dist_dl(Node, Name, File, Pid) ->
Pid ! {self(), Name},
ok.
-dist_open2(suite) -> [];
-dist_open2(doc) ->
- ["OTP-4480. Opening several logs simultaneously."];
+%% OTP-4480. Opening several logs simultaneously.
dist_open2(Conf) when is_list(Conf) ->
- ?line true = is_alive(),
- ?line {ok, _Pg2} = pg2:start(),
+ true = is_alive(),
+ {ok, _Pg2} = pg2:start(),
dist_open2_1(Conf, 0),
dist_open2_1(Conf, 100),
@@ -4513,9 +4401,9 @@ dist_open2(Conf) when is_list(Conf) ->
%% to open the log. The second one succeeds, and the third one is
%% attached.
P0 = pps(),
- ?line File0 = "n.LOG",
- ?line File = filename:join(PrivDir, File0),
- ?line make_file(PrivDir, File0, 8),
+ File0 = "n.LOG",
+ File = filename:join(PrivDir, File0),
+ make_file(PrivDir, File0, 8),
Parent = self(),
F1 = fun() -> R = disk_log:open([{name, Log}, {file, File},
@@ -4529,18 +4417,18 @@ dist_open2(Conf) when is_list(Conf) ->
Parent ! {self(), R},
timer:sleep(300)
end,
- ?line Pid1 = spawn(F1),
+ Pid1 = spawn(F1),
timer:sleep(10),
- ?line Pid2 = spawn(F2),
- ?line Pid3 = spawn(F2),
+ Pid2 = spawn(F2),
+ Pid3 = spawn(F2),
- ?line receive {Pid1,R1} -> {[],[_]} = R1 end,
- ?line receive {Pid2,R2} -> {[_],[]} = R2 end,
- ?line receive {Pid3,R3} -> {[_],[]} = R3 end,
+ receive {Pid1,R1} -> {[],[_]} = R1 end,
+ receive {Pid2,R2} -> {[_],[]} = R2 end,
+ receive {Pid3,R3} -> {[_],[]} = R3 end,
timer:sleep(500),
- ?line file:delete(File),
- ?line true = (P0 == pps()),
+ file:delete(File),
+ true = (P0 == pps()),
%% This time the first process has a naughty head_func. This test
%% does not add very much. Perhaps it should be removed. However,
@@ -4561,15 +4449,15 @@ dist_open2(Conf) when is_list(Conf) ->
{type,halt}]),
Parent ! {self(), R}
end,
- ?line Pid4 = spawn(F3),
+ Pid4 = spawn(F3),
timer:sleep(10),
- ?line Pid5 = spawn(F4),
- ?line Pid6 = spawn(F4),
+ Pid5 = spawn(F4),
+ Pid6 = spawn(F4),
%% The timing is crucial here.
- ?line R = case receive {Pid4,R4} -> R4 end of
+ R = case receive {Pid4,R4} -> R4 end of
{error, no_such_log} ->
- ?line R5 = receive {Pid5, R5a} -> R5a end,
- ?line R6 = receive {Pid6, R6a} -> R6a end,
+ R5 = receive {Pid5, R5a} -> R5a end,
+ R6 = receive {Pid6, R6a} -> R6a end,
case {R5, R6} of
{{repaired, _, _, _}, {ok, Log}} -> ok;
{{ok, Log}, {repaired, _, _, _}} -> ok;
@@ -4577,16 +4465,16 @@ dist_open2(Conf) when is_list(Conf) ->
end,
ok;
{ok, Log} -> % uninteresting case
- ?line receive {Pid5,_R5} -> ok end,
- ?line receive {Pid6,_R6} -> ok end,
+ receive {Pid5,_R5} -> ok end,
+ receive {Pid6,_R6} -> ok end,
{comment,
"Timing dependent test did not check anything."}
end,
timer:sleep(100),
- ?line {error, no_such_log} = disk_log:close(Log),
+ {error, no_such_log} = disk_log:close(Log),
file:delete(File),
- ?line true = (P0 == pps()),
+ true = (P0 == pps()),
No = 2,
Log2 = n2,
@@ -4598,7 +4486,7 @@ dist_open2(Conf) when is_list(Conf) ->
%% processes should be able to attach to other log without having to
%% wait.
- ?line {ok,Log} =
+ {ok,Log} =
disk_log:open([{name,Log},{file,File},{type,wrap},{size,{100,No}}]),
Pid = spawn(fun() ->
receive {HeadPid, start} -> ok end,
@@ -4607,15 +4495,15 @@ dist_open2(Conf) when is_list(Conf) ->
HeadPid ! {self(), done}
end),
HeadFunc = {?MODULE, slow_header, [Pid]},
- ?line ok = disk_log:change_header(Log, {head_func, HeadFunc}),
- ?line ok = disk_log:inc_wrap_file(Log), % header is written
+ ok = disk_log:change_header(Log, {head_func, HeadFunc}),
+ ok = disk_log:inc_wrap_file(Log), % header is written
timer:sleep(100),
- ?line ok = disk_log:close(Log),
+ ok = disk_log:close(Log),
file:delete(File2),
del(File, No),
- ?line true = (P0 == pps()),
+ true = (P0 == pps()),
R.
@@ -4625,13 +4513,13 @@ dist_open2_1(Conf, Delay) ->
Log = n,
A0 = [{name,Log},{file,File},{type,halt}],
- ?line create_opened_log(File, A0),
+ create_opened_log(File, A0),
P0 = pps(),
Log2 = log2,
File2 = "log2.LOG",
- ?line file:delete(File2),
- ?line {ok,Log2} = disk_log:open([{name,Log2},{file,File2},{type,halt}]),
+ file:delete(File2),
+ {ok,Log2} = disk_log:open([{name,Log2},{file,File2},{type,halt}]),
Parent = self(),
F = fun() ->
@@ -4639,28 +4527,28 @@ dist_open2_1(Conf, Delay) ->
timer:sleep(Delay),
Parent ! {self(), R}
end,
- ?line Pid1 = spawn(F),
+ Pid1 = spawn(F),
timer:sleep(10),
- ?line Pid2 = spawn(F),
- ?line Pid3 = spawn(F),
- ?line {error, no_such_log} = disk_log:log(Log, term), % is repairing now
- ?line 0 = qlen(),
+ Pid2 = spawn(F),
+ Pid3 = spawn(F),
+ {error, no_such_log} = disk_log:log(Log, term), % is repairing now
+ 0 = qlen(),
%% The file is already open, so this will not take long.
- ?line {ok,Log2} = disk_log:open([{name,Log2},{file,File2},{type,halt}]),
- ?line 0 = qlen(), % still repairing
- ?line ok = disk_log:close(Log2),
- ?line {error, no_such_log} = disk_log:close(Log2),
- ?line file:delete(File2),
-
- ?line receive {Pid1,R1} -> {repaired,_,_,_} = R1 end,
- ?line receive {Pid2,R2} -> {ok,_} = R2 end,
- ?line receive {Pid3,R3} -> {ok,_} = R3 end,
+ {ok,Log2} = disk_log:open([{name,Log2},{file,File2},{type,halt}]),
+ 0 = qlen(), % still repairing
+ ok = disk_log:close(Log2),
+ {error, no_such_log} = disk_log:close(Log2),
+ file:delete(File2),
+
+ receive {Pid1,R1} -> {repaired,_,_,_} = R1 end,
+ receive {Pid2,R2} -> {ok,_} = R2 end,
+ receive {Pid3,R3} -> {ok,_} = R3 end,
timer:sleep(500),
- ?line {error, no_such_log} = disk_log:info(Log),
+ {error, no_such_log} = disk_log:info(Log),
file:delete(File),
- ?line true = (P0 == pps()),
+ true = (P0 == pps()),
ok.
@@ -4669,18 +4557,18 @@ dist_open2_2(Conf, Delay) ->
File = filename:join(Dir, "n.LOG"),
Log = n,
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node1} = start_node(disk_log_node2, "-pa " ++ PA),
- ?line wait_for_ready_net(),
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, Node1} = start_node(disk_log_node2, "-pa " ++ PA),
+ wait_for_ready_net(),
P0 = pps(),
A0 = [{name,Log},{file,File},{type,halt}],
- ?line create_opened_log(File, A0),
+ create_opened_log(File, A0),
Log2 = log2,
File2 = "log2.LOG",
- ?line file:delete(File2),
- ?line {[{Node1,{ok,Log2}}],[]} =
+ file:delete(File2),
+ {[{Node1,{ok,Log2}}],[]} =
disk_log:open([{name,Log2},{file,File2},{type,halt},
{distributed,[Node1]}]),
@@ -4693,32 +4581,32 @@ dist_open2_2(Conf, Delay) ->
Parent ! {self(), R}
end,
%% And {priority, ...} probably has no effect either.
- ?line Pid1 = spawn_opt(F, [{priority, low}]),
- % timer:sleep(1), % no guarantee that Pid1 will return {repaired, ...}
- ?line Pid2 = spawn_opt(F, [{priority, low}]),
- ?line {error, no_such_log} =
+ Pid1 = spawn_opt(F, [{priority, low}]),
+ %% timer:sleep(1), % no guarantee that Pid1 will return {repaired, ...}
+ Pid2 = spawn_opt(F, [{priority, low}]),
+ {error, no_such_log} =
disk_log:log(Log, term), % maybe repairing now
- ?line 0 = qlen(),
+ 0 = qlen(),
%% The file is already open, so this will not take long.
- ?line {[{Node1,{ok,Log2}}],[]} =
+ {[{Node1,{ok,Log2}}],[]} =
disk_log:open([{name,Log2},{file,File2},{type,halt},
{distributed,[Node1]}]),
- ?line 0 = qlen(), % probably still repairing
- ?line ok = disk_log:close(Log2),
- ?line file:delete(File2),
+ 0 = qlen(), % probably still repairing
+ ok = disk_log:close(Log2),
+ file:delete(File2),
- ?line receive {Pid1,R1} -> R1 end,
- ?line receive {Pid2,R2} -> R2 end,
- ?line case {R1, R2} of
+ receive {Pid1,R1} -> R1 end,
+ receive {Pid2,R2} -> R2 end,
+ case {R1, R2} of
{{[{Node1,{repaired,_,_,_}}],[]},
{[{Node1,{ok,Log}}],[]}} -> ok;
{{[{Node1,{ok,Log}}],[]},
{[{Node1,{repaired,_,_,_}}],[]}} -> ok
end,
- ?line true = (P0 == pps()),
- ?line stop_node(Node1),
+ true = (P0 == pps()),
+ stop_node(Node1),
file:delete(File),
ok.
@@ -4751,38 +4639,35 @@ log_terms(Log, N) ->
ok = disk_log:log(Log, {term, N}),
log_terms(Log, N-1).
-other_groups(suite) -> [];
-other_groups(doc) ->
- ["OTP-5810. Cope with pg2 groups that are not disk logs."];
+%% OTP-5810. Cope with pg2 groups that are not disk logs.
other_groups(Conf) when is_list(Conf) ->
- ?line true = is_alive(),
- ?line PrivDir = ?privdir(Conf),
+ true = is_alive(),
+ PrivDir = ?privdir(Conf),
- ?line File = filename:join(PrivDir, "n.LOG"),
- ?line file:delete(File),
+ File = filename:join(PrivDir, "n.LOG"),
+ file:delete(File),
- ?line {[],[]} = disk_log:accessible_logs(),
- ?line {[_],[]} = disk_log:open([{name, n}, {file, File}, {type, halt},
+ {[],[]} = disk_log:accessible_logs(),
+ {[_],[]} = disk_log:open([{name, n}, {file, File}, {type, halt},
{distributed, [node()]}]),
- ?line {[],[n]} = disk_log:accessible_logs(),
+ {[],[n]} = disk_log:accessible_logs(),
Group = grupp,
- ?line pg2:create(Group),
- ?line ok = pg2:join(Group, self()),
- ?line {[],[n]} = disk_log:accessible_logs(),
- ?line [_] =
+ pg2:create(Group),
+ ok = pg2:join(Group, self()),
+ {[],[n]} = disk_log:accessible_logs(),
+ [_] =
lists:filter(fun(P) -> disk_log:pid2name(P) =/= undefined end,
erlang:processes()),
- ?line pg2:delete(Group),
- ?line {[],[n]} = disk_log:accessible_logs(),
- ?line ok = disk_log:close(n),
- ?line {[],[]} = disk_log:accessible_logs(),
- ?line file:delete(File),
+ pg2:delete(Group),
+ {[],[n]} = disk_log:accessible_logs(),
+ ok = disk_log:close(n),
+ {[],[]} = disk_log:accessible_logs(),
+ file:delete(File),
ok.
-define(MAX, 16384). % MAX in disk_log_1.erl
-evil(suite) -> [];
-evil(doc) -> ["Evil cases such as closed file descriptor port."];
+%% Evil cases such as closed file descriptor port.
evil(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "n.LOG"),
@@ -4790,62 +4675,62 @@ evil(Conf) when is_list(Conf) ->
%% Not a very thorough test.
- ?line ok = setup_evil_filled_cache_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:log(Log, apa),
- ?line ok = disk_log:close(Log),
+ ok = setup_evil_filled_cache_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:log(Log, apa),
+ ok = disk_log:close(Log),
- ?line ok = setup_evil_filled_cache_halt(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:truncate(Log, apa),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_filled_cache_halt(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:truncate(Log, apa),
+ ok = stop_evil(Log),
%% White box test.
file:delete(File),
- ?line Ports0 = erlang:ports(),
- ?line {ok, Log} = disk_log:open([{name,Log},{file,File},{type,halt},
+ Ports0 = erlang:ports(),
+ {ok, Log} = disk_log:open([{name,Log},{file,File},{type,halt},
{size,?MAX+50},{format,external}]),
- ?line [Fd] = erlang:ports() -- Ports0,
- ?line {B,_} = x_mk_bytes(30),
- ?line ok = disk_log:blog(Log, <<0:(?MAX+1)/unit:8>>),
- ?line exit(Fd, kill),
- ?line {error, {file_error,_,einval}} = disk_log:blog_terms(Log, [B,B]),
- ?line ok= disk_log:close(Log),
+ [Fd] = erlang:ports() -- Ports0,
+ {B,_} = x_mk_bytes(30),
+ ok = disk_log:blog(Log, <<0:(?MAX+1)/unit:8>>),
+ exit(Fd, kill),
+ {error, {file_error,_,einval}} = disk_log:blog_terms(Log, [B,B]),
+ ok= disk_log:close(Log),
file:delete(File),
- ?line ok = setup_evil_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:close(Log),
+ ok = setup_evil_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:close(Log),
- ?line ok = setup_evil_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:log(Log, apa),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:log(Log, apa),
+ ok = stop_evil(Log),
- ?line ok = setup_evil_halt(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:log(Log, apa),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_halt(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:log(Log, apa),
+ ok = stop_evil(Log),
- ?line ok = setup_evil_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:reopen(Log, apa),
- ?line {error, {file_error,_,einval}} = disk_log:reopen(Log, apa),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:reopen(Log, apa),
+ {error, {file_error,_,einval}} = disk_log:reopen(Log, apa),
+ ok = stop_evil(Log),
- ?line ok = setup_evil_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:reopen(Log, apa),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:reopen(Log, apa),
+ ok = stop_evil(Log),
- ?line ok = setup_evil_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:inc_wrap_file(Log),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:inc_wrap_file(Log),
+ ok = stop_evil(Log),
- ?line ok = setup_evil_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:chunk(Log, start),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:chunk(Log, start),
+ ok = stop_evil(Log),
- ?line ok = setup_evil_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:truncate(Log),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:truncate(Log),
+ ok = stop_evil(Log),
- ?line ok = setup_evil_wrap(Log, Dir),
- ?line {error, {file_error,_,einval}} = disk_log:chunk_step(Log, start, 1),
- ?line ok = stop_evil(Log),
+ ok = setup_evil_wrap(Log, Dir),
+ {error, {file_error,_,einval}} = disk_log:chunk_step(Log, start, 1),
+ ok = stop_evil(Log),
io:format("messages: ~p~n", [erlang:process_info(self(), messages)]),
del(File, 2),
@@ -4894,25 +4779,23 @@ setup_evil_filled_cache(Log, Args, Dir) ->
exit(Fd, kill),
ok.
-otp_6278(suite) -> [];
-otp_6278(doc) -> ["OTP-6278. open/1 creates no status or crash report."];
+%% OTP-6278. open/1 creates no status or crash report.
otp_6278(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = filename:join(Dir, "no_such_dir/no_such_file"),
- ?line error_logger:add_report_handler(?MODULE, self()),
- ?line {error, {file_error, _, _}} =
+ error_logger:add_report_handler(?MODULE, self()),
+ {error, {file_error, _, _}} =
disk_log:open([{name,n},{file,File}]),
receive
{crash_report,_Pid,Report} ->
- ?line io:format("Unexpected: ~p\n", [Report]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p\n", [Report]),
+ ct:fail(failed)
after 1000 ->
ok
end,
- ?line error_logger:delete_report_handler(?MODULE).
+ error_logger:delete_report_handler(?MODULE).
-otp_10131(suite) -> [];
-otp_10131(doc) -> ["OTP-10131. head_func type."];
+%% OTP-10131. head_func type.
otp_10131(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
Log = otp_10131,
@@ -4979,7 +4862,7 @@ copy_wrap_log(FromName, ToName, N, FromDir, ToDir) ->
-define(BUFSIZE, 8192).
copy_file(Src, Dest) ->
- % ?t:format("copying from ~p to ~p~n", [Src, Dest]),
+ %% io:format("copying from ~p to ~p~n", [Src, Dest]),
{ok, InFd} = file:open(Src, [raw, binary, read]),
{ok, OutFd} = file:open(Dest, [raw, binary, write]),
ok = copy_file1(InFd, OutFd),
@@ -5104,50 +4987,15 @@ get_known(Node) ->
%% Copied from erl_distribution_SUITE.erl:
start_node(Name, Param) ->
- ?t:start_node(Name, slave, [{args, Param}]).
+ test_server:start_node(Name, slave, [{args, Param}]).
stop_node(Node) ->
- ?t:stop_node(Node).
-
-%from(H, [H | T]) -> T;
-%from(H, [_ | T]) -> from(H, T);
-%from(_H, []) -> [].
-
-
-%% Check for NFS cache size, this is called from init_per_testcase() and
-%% makes different tests run depending on the size of the NFS cache on
-%% VxWorks. Possibly this could be adopted to Windows too, but we seldom use
-%% NFS when testing on windows, so I can find better things to do.
-%% The port program used simply reads the nfsCacheSize variable on the board.
-%% If the board is configured without NFS, the port program will fail to load
-%% and this will return 0, which may or may not be the wrong thing to do.
-
-check_nfs(_Config) ->
- 0.
+ test_server:stop_node(Node).
-skip_expand([]) ->
- [];
-skip_expand([Case | T]) ->
- case (catch apply(?MODULE, Case, [suite])) of
- {'EXIT', _} ->
- [Case | skip_expand(T)];
- [] ->
- [Case | skip_expand(T)];
- Res ->
- skip_expand(Res) ++ skip_expand(T)
- end.
-
-
-skip_list(Config) ->
- case check_nfs(Config) of
- 0 ->
- skip_expand(?SKIP_NO_CACHE);
- _ ->
- skip_expand(?SKIP_LARGE_CACHE)
- end.
+%% from(H, [H | T]) -> T;
+%% from(H, [_ | T]) -> from(H, T);
+%% from(_H, []) -> [].
-should_skip(_Test,_Config) ->
- false.
%%-----------------------------------------------------------------
%% The error_logger handler used.
diff --git a/lib/kernel/test/disk_log_SUITE_data/wrap_log_test.erl b/lib/kernel/test/disk_log_SUITE_data/wrap_log_test.erl
index 1cd1a4b0a4..38449b6bb3 100644
--- a/lib/kernel/test/disk_log_SUITE_data/wrap_log_test.erl
+++ b/lib/kernel/test/disk_log_SUITE_data/wrap_log_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/erl_boot_server_SUITE.erl b/lib/kernel/test/erl_boot_server_SUITE.erl
index 954880e252..1eaa2cf500 100644
--- a/lib/kernel/test/erl_boot_server_SUITE.erl
+++ b/lib/kernel/test/erl_boot_server_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(erl_boot_server_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2]).
@@ -34,7 +34,9 @@
%% Changed for the new erl_boot_server for R3A by Bjorn Gustavsson.
%%-----------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[start, start_link, stop, add, delete, responses].
@@ -57,274 +59,262 @@ end_per_group(_GroupName, Config) ->
-define(all_ones, {255, 255, 255, 255}).
-start(doc) -> "Tests the erl_boot_server:start/1 function.";
+%% Tests the erl_boot_server:start/1 function.
start(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(50)),
- ?line [Host1, Host2|_] = good_hosts(Config),
+ [Host1, Host2|_] = good_hosts(Config),
%% Bad arguments.
BadHost = "bad__host",
- ?line {error, {badarg, {}}} = erl_boot_server:start({}),
- ?line {error, {badarg, atom}} = erl_boot_server:start(atom),
- ?line {error, {badarg, [atom, BadHost]}} =
+ {error, {badarg, {}}} = erl_boot_server:start({}),
+ {error, {badarg, atom}} = erl_boot_server:start(atom),
+ {error, {badarg, [atom, BadHost]}} =
erl_boot_server:start([atom, BadHost]),
- ?line {error, {badarg, [Host1, BadHost]}} =
+ {error, {badarg, [Host1, BadHost]}} =
erl_boot_server:start([Host1, BadHost]),
%% Test once.
- ?line {ok, Pid1} = erl_boot_server:start([Host1]),
- ?line {error, {already_started, Pid1}} =
+ {ok, Pid1} = erl_boot_server:start([Host1]),
+ {error, {already_started, Pid1}} =
erl_boot_server:start([Host1]),
- ?line exit(Pid1, kill),
+ exit(Pid1, kill),
%% Test again.
- test_server:sleep(1),
- ?line {ok, Pid2} = erl_boot_server:start([Host1, Host2]),
- ?line {error, {already_started, Pid2}} =
+ ct:sleep(1),
+ {ok, Pid2} = erl_boot_server:start([Host1, Host2]),
+ {error, {already_started, Pid2}} =
erl_boot_server:start([Host1, Host2]),
- ?line exit(Pid2, kill),
- test_server:sleep(1),
+ exit(Pid2, kill),
+ ct:sleep(1),
- ?line test_server:timetrap_cancel(Dog),
ok.
-start_link(doc) -> "Tests the erl_boot_server:start_link/1 function.";
+%% Tests the erl_boot_server:start_link/1 function.
start_link(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line [Host1, Host2|_] = good_hosts(Config),
+ [Host1, Host2|_] = good_hosts(Config),
OldFlag = process_flag(trap_exit, true),
- ?line {error, {badarg, {}}} = erl_boot_server:start_link({}),
- ?line {error, {badarg, atom}} = erl_boot_server:start_link(atom),
- ?line BadHost = "bad__host",
- ?line {error, {badarg, [atom, BadHost]}} =
+ {error, {badarg, {}}} = erl_boot_server:start_link({}),
+ {error, {badarg, atom}} = erl_boot_server:start_link(atom),
+ BadHost = "bad__host",
+ {error, {badarg, [atom, BadHost]}} =
erl_boot_server:start_link([atom, BadHost]),
- ?line {ok, Pid1} = erl_boot_server:start_link([Host1]),
- ?line {error, {already_started, Pid1}} =
+ {ok, Pid1} = erl_boot_server:start_link([Host1]),
+ {error, {already_started, Pid1}} =
erl_boot_server:start_link([Host1]),
- ?line shutdown(Pid1),
+ shutdown(Pid1),
- ?line {ok, Pid2} = erl_boot_server:start_link([Host1, Host2]),
- ?line {error, {already_started, Pid2}} =
+ {ok, Pid2} = erl_boot_server:start_link([Host1, Host2]),
+ {error, {already_started, Pid2}} =
erl_boot_server:start_link([Host1, Host2]),
- ?line shutdown(Pid2),
+ shutdown(Pid2),
process_flag(trap_exit, OldFlag),
- ?line test_server:timetrap_cancel(Dog),
ok.
-stop(doc) -> "Tests that no processes are left if a boot server is killed.";
+%% Tests that no processes are left if a boot server is killed.
stop(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(50)),
- ?line [Host1|_] = good_hosts(Config),
+ [Host1|_] = good_hosts(Config),
%% Start a boot server and kill it. Make sure that any helper processes
%% dies.
- % Make sure the inet_gethost_native server is already started,
- % otherwise it will make this test fail:
- ?line inet:getaddr(localhost, inet),
- ?line Before = processes(),
- ?line {ok, Pid} = erl_boot_server:start([Host1]),
- ?line New = processes() -- [Pid|Before],
- ?line exit(Pid, kill),
- ?line receive after 100 -> ok end,
- ?line case [P || P <- New, is_process_alive(P)] of
- [] ->
- ok;
- NotKilled ->
- test_server:fail({not_killed, NotKilled})
- end,
- ?line test_server:timetrap_cancel(Dog),
+ %% Make sure the inet_gethost_native server is already started,
+ %% otherwise it will make this test fail:
+ inet:getaddr(localhost, inet),
+ Before = processes(),
+ {ok, Pid} = erl_boot_server:start([Host1]),
+ New = processes() -- [Pid|Before],
+ exit(Pid, kill),
+ receive after 100 -> ok end,
+ case [P || P <- New, is_process_alive(P)] of
+ [] ->
+ ok;
+ NotKilled ->
+ ct:fail({not_killed, NotKilled})
+ end,
ok.
-add(doc) -> "Tests the erl_boot_server:add/1 function.";
+%% Tests the erl_boot_server:add/1 function.
add(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line OldFlag = process_flag(trap_exit, true),
- ?line {ok, Pid1} = erl_boot_server:start_link([]),
- ?line [] = erl_boot_server:which_slaves(),
- ?line [Host1, Host2, Host3|_] = good_hosts(Config),
+ OldFlag = process_flag(trap_exit, true),
+ {ok, Pid1} = erl_boot_server:start_link([]),
+ [] = erl_boot_server:which_slaves(),
+ [Host1, Host2, Host3|_] = good_hosts(Config),
%% Try bad values.
- ?line {error, {badarg, {}}} = erl_boot_server:add_slave({}),
- ?line {error, {badarg, [atom]}} = erl_boot_server:add_slave([atom]),
- ?line BadHost = "bad__host",
- ?line {error, {badarg, BadHost}} = erl_boot_server:add_slave(BadHost),
- ?line [] = erl_boot_server:which_slaves(),
+ {error, {badarg, {}}} = erl_boot_server:add_slave({}),
+ {error, {badarg, [atom]}} = erl_boot_server:add_slave([atom]),
+ BadHost = "bad__host",
+ {error, {badarg, BadHost}} = erl_boot_server:add_slave(BadHost),
+ [] = erl_boot_server:which_slaves(),
%% Add good host names.
- ?line {ok, Ip1} = inet:getaddr(Host1, inet),
- ?line {ok, Ip2} = inet:getaddr(Host2, inet),
- ?line {ok, Ip3} = inet:getaddr(Host3, inet),
- ?line MIp1 = {?all_ones, Ip1},
- ?line MIp2 = {?all_ones, Ip2},
- ?line MIp3 = {?all_ones, Ip3},
- ?line ok = erl_boot_server:add_slave(Host1),
- ?line [MIp1] = erl_boot_server:which_slaves(),
- ?line ok = erl_boot_server:add_slave(Host2),
- ?line M_Ip1_Ip2 = lists:sort([MIp1, MIp2]),
- ?line M_Ip1_Ip2 = lists:sort(erl_boot_server:which_slaves()),
- ?line ok = erl_boot_server:add_slave(Host3),
- ?line M_Ip1_Ip2_Ip3 = lists:sort([MIp3|M_Ip1_Ip2]),
- ?line M_Ip1_Ip2_Ip3 = erl_boot_server:which_slaves(),
+ {ok, Ip1} = inet:getaddr(Host1, inet),
+ {ok, Ip2} = inet:getaddr(Host2, inet),
+ {ok, Ip3} = inet:getaddr(Host3, inet),
+ MIp1 = {?all_ones, Ip1},
+ MIp2 = {?all_ones, Ip2},
+ MIp3 = {?all_ones, Ip3},
+ ok = erl_boot_server:add_slave(Host1),
+ [MIp1] = erl_boot_server:which_slaves(),
+ ok = erl_boot_server:add_slave(Host2),
+ M_Ip1_Ip2 = lists:sort([MIp1, MIp2]),
+ M_Ip1_Ip2 = lists:sort(erl_boot_server:which_slaves()),
+ ok = erl_boot_server:add_slave(Host3),
+ M_Ip1_Ip2_Ip3 = lists:sort([MIp3|M_Ip1_Ip2]),
+ M_Ip1_Ip2_Ip3 = erl_boot_server:which_slaves(),
%% Add duplicate names.
- ?line ok = erl_boot_server:add_slave(Host3),
- ?line M_Ip1_Ip2_Ip3 = erl_boot_server:which_slaves(),
+ ok = erl_boot_server:add_slave(Host3),
+ M_Ip1_Ip2_Ip3 = erl_boot_server:which_slaves(),
%% More bad names.
- ?line {error, {badarg, BadHost}} = erl_boot_server:add_slave(BadHost),
- ?line M_Ip1_Ip2_Ip3 = erl_boot_server:which_slaves(),
+ {error, {badarg, BadHost}} = erl_boot_server:add_slave(BadHost),
+ M_Ip1_Ip2_Ip3 = erl_boot_server:which_slaves(),
%% Cleanup.
- ?line shutdown(Pid1),
- ?line process_flag(trap_exit, OldFlag),
- ?line test_server:timetrap_cancel(Dog),
+ shutdown(Pid1),
+ process_flag(trap_exit, OldFlag),
ok.
-delete(doc) -> "Tests the erl_boot_server:delete/1 function.";
+%% Tests the erl_boot_server:delete/1 function.
delete(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line OldFlag = process_flag(trap_exit, true),
+ OldFlag = process_flag(trap_exit, true),
- ?line [Host1, Host2, Host3|_] = good_hosts(Config),
- ?line {ok, Ip1} = inet:getaddr(Host1, inet),
- ?line {ok, Ip2} = inet:getaddr(Host2, inet),
- ?line {ok, Ip3} = inet:getaddr(Host3, inet),
- ?line MIp1 = {?all_ones, Ip1},
- ?line MIp2 = {?all_ones, Ip2},
- ?line MIp3 = {?all_ones, Ip3},
+ [Host1, Host2, Host3|_] = good_hosts(Config),
+ {ok, Ip1} = inet:getaddr(Host1, inet),
+ {ok, Ip2} = inet:getaddr(Host2, inet),
+ {ok, Ip3} = inet:getaddr(Host3, inet),
+ MIp1 = {?all_ones, Ip1},
+ MIp2 = {?all_ones, Ip2},
+ MIp3 = {?all_ones, Ip3},
- ?line {ok, Pid1} = erl_boot_server:start_link([Host1, Host2, Host3]),
- ?line M_Ip123 = lists:sort([MIp1, MIp2, MIp3]),
- ?line M_Ip123 = erl_boot_server:which_slaves(),
+ {ok, Pid1} = erl_boot_server:start_link([Host1, Host2, Host3]),
+ M_Ip123 = lists:sort([MIp1, MIp2, MIp3]),
+ M_Ip123 = erl_boot_server:which_slaves(),
%% Do some bad attempts and check that the list of slaves is intact.
- ?line {error, {badarg, {}}} = erl_boot_server:delete_slave({}),
- ?line {error, {badarg, [atom]}} = erl_boot_server:delete_slave([atom]),
- ?line BadHost = "bad__host",
- ?line {error, {badarg, BadHost}} = erl_boot_server:delete_slave(BadHost),
- ?line M_Ip123 = erl_boot_server:which_slaves(),
+ {error, {badarg, {}}} = erl_boot_server:delete_slave({}),
+ {error, {badarg, [atom]}} = erl_boot_server:delete_slave([atom]),
+ BadHost = "bad__host",
+ {error, {badarg, BadHost}} = erl_boot_server:delete_slave(BadHost),
+ M_Ip123 = erl_boot_server:which_slaves(),
%% Delete Host2 and make sure it's gone.
- ?line ok = erl_boot_server:delete_slave(Host2),
- ?line M_Ip13 = lists:sort([MIp1, MIp3]),
- ?line M_Ip13 = erl_boot_server:which_slaves(),
-
- ?line ok = erl_boot_server:delete_slave(Host1),
- ?line [MIp3] = erl_boot_server:which_slaves(),
- ?line ok = erl_boot_server:delete_slave(Host1),
- ?line [MIp3] = erl_boot_server:which_slaves(),
-
- ?line {error, {badarg, BadHost}} = erl_boot_server:delete_slave(BadHost),
- ?line [MIp3] = erl_boot_server:which_slaves(),
-
- ?line ok = erl_boot_server:delete_slave(Ip3),
- ?line [] = erl_boot_server:which_slaves(),
- ?line ok = erl_boot_server:delete_slave(Ip3),
- ?line [] = erl_boot_server:which_slaves(),
-
- ?line shutdown(Pid1),
- ?line process_flag(trap_exit, OldFlag),
- ?line test_server:timetrap_cancel(Dog),
+ ok = erl_boot_server:delete_slave(Host2),
+ M_Ip13 = lists:sort([MIp1, MIp3]),
+ M_Ip13 = erl_boot_server:which_slaves(),
+
+ ok = erl_boot_server:delete_slave(Host1),
+ [MIp3] = erl_boot_server:which_slaves(),
+ ok = erl_boot_server:delete_slave(Host1),
+ [MIp3] = erl_boot_server:which_slaves(),
+
+ {error, {badarg, BadHost}} = erl_boot_server:delete_slave(BadHost),
+ [MIp3] = erl_boot_server:which_slaves(),
+
+ ok = erl_boot_server:delete_slave(Ip3),
+ [] = erl_boot_server:which_slaves(),
+ ok = erl_boot_server:delete_slave(Ip3),
+ [] = erl_boot_server:which_slaves(),
+
+ shutdown(Pid1),
+ process_flag(trap_exit, OldFlag),
ok.
-responses(doc) -> "Tests erl_boot_server responses to slave requests.";
+%% Tests erl_boot_server responses to slave requests.
responses(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(30)),
- ?line process_flag(trap_exit, true),
+ process_flag(trap_exit, true),
%% Copy from inet_boot.hrl
EBOOT_PORT = 4368,
EBOOT_REQUEST = "EBOOTQ",
EBOOT_REPLY = "EBOOTR",
- ?line {ok,Host} = inet:gethostname(),
- ?line {ok,Ip} = inet:getaddr(Host, inet),
+ {ok,Host} = inet:gethostname(),
+ {ok,Ip} = inet:getaddr(Host, inet),
ThisVer = erlang:system_info(version),
- ?line {ok,BootPid} = erl_boot_server:start_link([Host]),
+ {ok,BootPid} = erl_boot_server:start_link([Host]),
%% Send junk
- ?line S1 = open_udp(),
- ?line prim_inet:sendto(S1, Ip, EBOOT_PORT, ["0"]),
+ S1 = open_udp(),
+ prim_inet:sendto(S1, Ip, EBOOT_PORT, ["0"]),
receive
What ->
- ?line close_udp(S1),
- ?line ?t:fail({"got unexpected response",What})
+ close_udp(S1),
+ ct:fail({"got unexpected response",What})
after 100 ->
ok
end,
%% Req from a slave with same erlang vsn.
- ?line S2 = open_udp(),
- ?line prim_inet:sendto(S2, Ip, EBOOT_PORT, [EBOOT_REQUEST,ThisVer]),
+ S2 = open_udp(),
+ prim_inet:sendto(S2, Ip, EBOOT_PORT, [EBOOT_REQUEST,ThisVer]),
receive
{udp,S2,Ip,_Port1,Resp1} ->
- ?line close_udp(S2),
- ?line EBOOT_REPLY = string:substr(Resp1, 1, length(EBOOT_REPLY)),
- ?line Rest1 = string:substr(Resp1, length(EBOOT_REPLY)+1, length(Resp1)),
- ?line [_,_,_ | ThisVer] = Rest1
+ close_udp(S2),
+ EBOOT_REPLY = string:substr(Resp1, 1, length(EBOOT_REPLY)),
+ Rest1 = string:substr(Resp1, length(EBOOT_REPLY)+1, length(Resp1)),
+ [_,_,_ | ThisVer] = Rest1
after 2000 ->
- ?line close_udp(S2),
- ?line ?t:fail("no boot server response; same vsn")
+ close_udp(S2),
+ ct:fail("no boot server response; same vsn")
end,
-
+
%% Req from a slave with other erlang vsn.
- ?line S3 = open_udp(),
- ?line prim_inet:sendto(S3, Ip, EBOOT_PORT, [EBOOT_REQUEST,"1.0"]),
+ S3 = open_udp(),
+ prim_inet:sendto(S3, Ip, EBOOT_PORT, [EBOOT_REQUEST,"1.0"]),
receive
Anything ->
- ?line close_udp(S3),
- ?line ?t:fail({"got unexpected response",Anything})
+ close_udp(S3),
+ ct:fail({"got unexpected response",Anything})
after 100 ->
ok
end,
%% Kill the boot server and wait for it to disappear.
- ?line unlink(BootPid),
- ?line BootPidMref = erlang:monitor(process, BootPid),
- ?line exit(BootPid, kill),
+ unlink(BootPid),
+ BootPidMref = erlang:monitor(process, BootPid),
+ exit(BootPid, kill),
receive
{'DOWN',BootPidMref,_,_,_} -> ok
end,
- ?line {ok,BootPid2} = erl_boot_server:start_link(["127.0.0.1"]),
+ {ok,BootPid2} = erl_boot_server:start_link(["127.0.0.1"]),
%% Req from slave with invalid ip address.
- ?line S4 = open_udp(),
+ S4 = open_udp(),
Ret =
case Ip of
{127,0,0,1} ->
{comment,"IP address for this host is 127.0.0.1"};
_ ->
- ?line prim_inet:sendto(S4, Ip, EBOOT_PORT,
- [EBOOT_REQUEST,ThisVer]),
+ prim_inet:sendto(S4, Ip, EBOOT_PORT,
+ [EBOOT_REQUEST,ThisVer]),
receive
Huh ->
- ?line close_udp(S4),
- ?line ?t:fail({"got unexpected response",Huh})
+ close_udp(S4),
+ ct:fail({"got unexpected response",Huh})
after 100 ->
ok
end
end,
- ?line unlink(BootPid2),
- ?line exit(BootPid2, kill),
+ unlink(BootPid2),
+ exit(BootPid2, kill),
%% Now wait for any late unexpected messages.
receive
Whatever ->
- ?line ?t:fail({unexpected_message,Whatever})
+ ct:fail({unexpected_message,Whatever})
after 4000 ->
- ?line close_udp(S1),
- ?line close_udp(S3),
- ?line close_udp(S4),
+ close_udp(S1),
+ close_udp(S3),
+ close_udp(S4),
ok
end,
- ?line test_server:timetrap_cancel(Dog),
Ret.
shutdown(Pid) ->
@@ -335,7 +325,7 @@ shutdown(Pid) ->
after 1000 ->
%% The timeout used to be 1 ms, which could be too short time for the
%% SMP emulator on a slow computer with one CPU.
- test_server:fail(shutdown)
+ ct:fail(shutdown)
end.
good_hosts(_Config) ->
@@ -347,10 +337,10 @@ good_hosts(_Config) ->
[GoodHost1, GoodHost2, GoodHost3].
open_udp() ->
- ?line {ok, S} = prim_inet:open(udp, inet, dgram),
- ?line ok = prim_inet:setopts(S, [{mode,list},{active,true},
- {deliver,term},{broadcast,true}]),
- ?line {ok,_} = prim_inet:bind(S, {0,0,0,0}, 0),
+ {ok, S} = prim_inet:open(udp, inet, dgram),
+ ok = prim_inet:setopts(S, [{mode,list},{active,true},
+ {deliver,term},{broadcast,true}]),
+ {ok,_} = prim_inet:bind(S, {0,0,0,0}, 0),
S.
close_udp(S) ->
diff --git a/lib/kernel/test/erl_distribution_SUITE.erl b/lib/kernel/test/erl_distribution_SUITE.erl
index 2f73ab170a..eb58e92224 100644
--- a/lib/kernel/test/erl_distribution_SUITE.erl
+++ b/lib/kernel/test/erl_distribution_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,8 +19,7 @@
%%
-module(erl_distribution_SUITE).
-%-define(line_trace, 1).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
@@ -61,7 +60,9 @@
%% erl -sname master -rsh ctrsh
%%-----------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,4}}].
all() ->
[tick, tick_change, illegal_nodenames, hidden_node,
@@ -91,27 +92,22 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(4)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
+end_per_testcase(_Func, _Config) ->
+ ok.
-tick(suite) -> [];
-tick(doc) -> [];
tick(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(120)),
PaDir = filename:dirname(code:which(erl_distribution_SUITE)),
-
+
%% First check that the normal case is OK!
- ?line {ok, Node} = start_node(dist_test, "-pa " ++ PaDir),
+ {ok, Node} = start_node(dist_test, "-pa " ++ PaDir),
rpc:call(Node, erl_distribution_SUITE, tick_cli_test, [node()]),
-
+
erlang:monitor_node(Node, true),
receive
{nodedown, Node} ->
- test_server:fail("nodedown from other node")
+ ct:fail("nodedown from other node")
after 30000 ->
erlang:monitor_node(Node, false),
stop_node(Node)
@@ -129,20 +125,20 @@ tick(Config) when is_list(Config) ->
%% Set the ticktime on the server node to 100 secs so the server
%% node doesn't tick the client node within the interval ...
- ?line {ok, ServNode} = start_node(dist_test_server,
- "-kernel net_ticktime 100 "
- "-pa " ++ PaDir),
+ {ok, ServNode} = start_node(dist_test_server,
+ "-kernel net_ticktime 100 "
+ "-pa " ++ PaDir),
rpc:call(ServNode, erl_distribution_SUITE, tick_serv_test, [Node, node()]),
- ?line {ok, _} = start_node(dist_test,
- "-kernel net_ticktime 12 "
- "-pa " ++ PaDir),
+ {ok, _} = start_node(dist_test,
+ "-kernel net_ticktime 12 "
+ "-pa " ++ PaDir),
rpc:call(Node, erl_distribution_SUITE, tick_cli_test, [ServNode]),
-
+
spawn_link(erl_distribution_SUITE, keep_conn, [Node]),
{tick_serv, ServNode} ! {i_want_the_result, self()},
-
+
monitor_node(ServNode, true),
monitor_node(Node, true),
@@ -154,56 +150,47 @@ tick(Config) when is_list(Config) ->
{tick_test, Error} ->
stop_node(ServNode),
stop_node(Node),
- test_server:fail(Error);
+ ct:fail(Error);
{nodedown, Node} ->
stop_node(ServNode),
- test_server:fail("client node died");
+ ct:fail("client node died");
{nodedown, ServNode} ->
stop_node(Node),
- test_server:fail("server node died")
+ ct:fail("server node died")
end,
- ?line test_server:timetrap_cancel(Dog),
ok.
-table_waste(doc) ->
- ["Checks that pinging nonexistyent nodes does not waste space in distribution table"];
-table_waste(suite) ->
- [];
+%% Checks that pinging nonexistyent nodes does not waste space in distribution table.
table_waste(Config) when is_list(Config) ->
- ?line {ok, HName} = inet:gethostname(),
+ {ok, HName} = inet:gethostname(),
F = fun(0,_F) -> [];
(N,F) ->
- ?line Name = list_to_atom("erl_distribution_"++integer_to_list(N)++
- "@"++HName),
- ?line pang = net_adm:ping(Name),
- ?line F(N-1,F)
+ Name = list_to_atom("erl_distribution_"++integer_to_list(N)++
+ "@"++HName),
+ pang = net_adm:ping(Name),
+ F(N-1,F)
end,
- ?line F(256,F),
- ?line {ok, N} = start_node(erl_distribution_300,""),
- ?line stop_node(N),
+ F(256,F),
+ {ok, N} = start_node(erl_distribution_300,""),
+ stop_node(N),
ok.
-
-
-illegal_nodenames(doc) ->
- ["Test that pinging an illegal nodename does not kill the node"];
-illegal_nodenames(suite) ->
- [];
+
+
+%% Test that pinging an illegal nodename does not kill the node.
illegal_nodenames(Config) when is_list(Config) ->
- ?line Dog=?t:timetrap(?t:minutes(2)),
PaDir = filename:dirname(code:which(erl_distribution_SUITE)),
- ?line {ok, Node}=start_node(illegal_nodenames, "-pa " ++ PaDir),
+ {ok, Node}=start_node(illegal_nodenames, "-pa " ++ PaDir),
monitor_node(Node, true),
- ?line RPid=rpc:call(Node, erlang, spawn,
- [?MODULE, pinger, [self()]]),
+ RPid=rpc:call(Node, erlang, spawn,
+ [?MODULE, pinger, [self()]]),
receive
{RPid, pinged} ->
ok;
{nodedown, Node} ->
- ?t:fail("Remote node died.")
+ ct:fail("Remote node died.")
end,
stop_node(Node),
- ?t:timetrap_cancel(Dog),
ok.
pinger(Starter) ->
@@ -213,7 +200,7 @@ pinger(Starter) ->
ok.
-net_setuptime(doc) -> ["Test that you can set the net_setuptime properly"];
+%% Test that you can set the net_setuptime properly.
net_setuptime(Config) when is_list(Config) ->
%% In this test case, we reluctantly accept shorter times than the given
%% setup time, because the connection attempt can end in a
@@ -221,18 +208,18 @@ net_setuptime(Config) when is_list(Config) ->
Res0 = do_test_setuptime("2"),
io:format("Res0 = ~p", [Res0]),
- ?line true = (Res0 =< 4000),
+ true = (Res0 =< 4000),
Res1 = do_test_setuptime("0.3"),
io:format("Res1 = ~p", [Res1]),
- ?line true = (Res1 =< 500),
+ true = (Res1 =< 500),
ok.
do_test_setuptime(Setuptime) when is_list(Setuptime) ->
- ?line PaDir = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node} = start_node(dist_setuptime_test, "-pa " ++ PaDir ++
- " -kernel net_setuptime " ++ Setuptime),
- ?line Res = rpc:call(Node,?MODULE,time_ping,[?DUMMY_NODE]),
- ?line stop_node(Node),
+ PaDir = filename:dirname(code:which(?MODULE)),
+ {ok, Node} = start_node(dist_setuptime_test, "-pa " ++ PaDir ++
+ " -kernel net_setuptime " ++ Setuptime),
+ Res = rpc:call(Node,?MODULE,time_ping,[?DUMMY_NODE]),
+ stop_node(Node),
Res.
time_ping(Node) ->
@@ -296,160 +283,159 @@ tick_cli_test1(Node) ->
end.
-tick_change(doc) -> ["OTP-4255"];
-tick_change(suite) -> [];
+%% OTP-4255.
tick_change(Config) when is_list(Config) ->
- ?line PaDir = filename:dirname(code:which(?MODULE)),
- ?line [BN, CN] = get_nodenames(2, tick_change),
- ?line DefaultTT = net_kernel:get_net_ticktime(),
- ?line unchanged = net_kernel:set_net_ticktime(DefaultTT, 60),
- ?line case DefaultTT of
- I when is_integer(I) -> ?line ok;
- _ -> ?line ?t:fail(DefaultTT)
- end,
-
- % In case other nodes are connected
+ PaDir = filename:dirname(code:which(?MODULE)),
+ [BN, CN] = get_nodenames(2, tick_change),
+ DefaultTT = net_kernel:get_net_ticktime(),
+ unchanged = net_kernel:set_net_ticktime(DefaultTT, 60),
+ case DefaultTT of
+ I when is_integer(I) -> ok;
+ _ -> ct:fail(DefaultTT)
+ end,
+
+ %% In case other nodes are connected
case nodes(connected) of
- [] -> ?line net_kernel:set_net_ticktime(10, 0);
- _ -> ?line rpc:multicall(nodes([this, connected]), net_kernel,
- set_net_ticktime, [10, 5])
+ [] -> net_kernel:set_net_ticktime(10, 0);
+ _ -> rpc:multicall(nodes([this, connected]), net_kernel,
+ set_net_ticktime, [10, 5])
end,
- ?line wait_until(fun () -> 10 == net_kernel:get_net_ticktime() end),
- ?line {ok, B} = start_node(BN, "-kernel net_ticktime 10 -pa " ++ PaDir),
- ?line {ok, C} = start_node(CN, "-kernel net_ticktime 10 -hidden -pa "
- ++ PaDir),
+ wait_until(fun () -> 10 == net_kernel:get_net_ticktime() end),
+ {ok, B} = start_node(BN, "-kernel net_ticktime 10 -pa " ++ PaDir),
+ {ok, C} = start_node(CN, "-kernel net_ticktime 10 -hidden -pa "
+ ++ PaDir),
- ?line OTE = process_flag(trap_exit, true),
+ OTE = process_flag(trap_exit, true),
case catch begin
- ?line run_tick_change_test(B, C, 10, 1, PaDir),
- ?line run_tick_change_test(B, C, 1, 10, PaDir)
+ run_tick_change_test(B, C, 10, 1, PaDir),
+ run_tick_change_test(B, C, 1, 10, PaDir)
end of
{'EXIT', Reason} ->
- ?line stop_node(B),
- ?line stop_node(C),
+ stop_node(B),
+ stop_node(C),
%% In case other nodes are connected
case nodes(connected) of
- [] -> ?line net_kernel:set_net_ticktime(DefaultTT, 0);
- _ -> ?line rpc:multicall(nodes([this, connected]), net_kernel,
- set_net_ticktime, [DefaultTT, 10])
+ [] -> net_kernel:set_net_ticktime(DefaultTT, 0);
+ _ -> rpc:multicall(nodes([this, connected]), net_kernel,
+ set_net_ticktime, [DefaultTT, 10])
end,
- ?line wait_until(fun () ->
- DefaultTT == net_kernel:get_net_ticktime()
- end),
- ?line process_flag(trap_exit, OTE),
- ?t:fail(Reason);
+ wait_until(fun () ->
+ DefaultTT == net_kernel:get_net_ticktime()
+ end),
+ process_flag(trap_exit, OTE),
+ ct:fail(Reason);
_ ->
ok
end,
- ?line process_flag(trap_exit, OTE),
- ?line stop_node(B),
- ?line stop_node(C),
+ process_flag(trap_exit, OTE),
+ stop_node(B),
+ stop_node(C),
- % In case other nodes are connected
+ %% In case other nodes are connected
case nodes(connected) of
- [] -> ?line net_kernel:set_net_ticktime(DefaultTT, 0);
- _ -> ?line rpc:multicall(nodes([this, connected]), net_kernel,
- set_net_ticktime, [DefaultTT, 5])
+ [] -> net_kernel:set_net_ticktime(DefaultTT, 0);
+ _ -> rpc:multicall(nodes([this, connected]), net_kernel,
+ set_net_ticktime, [DefaultTT, 5])
end,
- ?line wait_until(fun () -> DefaultTT == net_kernel:get_net_ticktime() end),
- ?line ok.
+ wait_until(fun () -> DefaultTT == net_kernel:get_net_ticktime() end),
+ ok.
wait_for_nodedowns(Tester, Ref) ->
receive
{nodedown, Node} ->
- ?t:format("~p~n", [{node(), {nodedown, Node}}]),
- ?line Tester ! {Ref, {node(), {nodedown, Node}}}
+ io:format("~p~n", [{node(), {nodedown, Node}}]),
+ Tester ! {Ref, {node(), {nodedown, Node}}}
end,
wait_for_nodedowns(Tester, Ref).
run_tick_change_test(B, C, PrevTT, TT, PaDir) ->
- ?line [DN, EN] = get_nodenames(2, tick_change),
-
- ?line Tester = self(),
- ?line Ref = make_ref(),
- ?line MonitorNodes = fun (Nodes) ->
- ?line lists:foreach(
- fun (N) ->
- ?line monitor_node(N,true)
- end,
- Nodes),
- wait_for_nodedowns(Tester, Ref)
- end,
-
- ?line {ok, D} = start_node(DN, "-kernel net_ticktime "
- ++ integer_to_list(PrevTT) ++ " -pa " ++ PaDir),
-
- ?line NMA = spawn_link(fun () -> MonitorNodes([B, C, D]) end),
- ?line NMB = spawn_link(B, fun () -> MonitorNodes([node(), C, D]) end),
- ?line NMC = spawn_link(C, fun () -> MonitorNodes([node(), B, D]) end),
-
- ?line MaxTT = case PrevTT > TT of
- true -> ?line PrevTT;
- false -> ?line TT
- end,
+ [DN, EN] = get_nodenames(2, tick_change),
- ?line CheckResult = make_ref(),
- ?line spawn_link(fun () ->
- receive
- after (25 + MaxTT)*1000 ->
- Tester ! CheckResult
- end
- end),
+ Tester = self(),
+ Ref = make_ref(),
+ MonitorNodes = fun (Nodes) ->
+ lists:foreach(
+ fun (N) ->
+ monitor_node(N,true)
+ end,
+ Nodes),
+ wait_for_nodedowns(Tester, Ref)
+ end,
+
+ {ok, D} = start_node(DN, "-kernel net_ticktime "
+ ++ integer_to_list(PrevTT) ++ " -pa " ++ PaDir),
+
+ NMA = spawn_link(fun () -> MonitorNodes([B, C, D]) end),
+ NMB = spawn_link(B, fun () -> MonitorNodes([node(), C, D]) end),
+ NMC = spawn_link(C, fun () -> MonitorNodes([node(), B, D]) end),
+
+ MaxTT = case PrevTT > TT of
+ true -> PrevTT;
+ false -> TT
+ end,
- % In case other nodes than these are connected
+ CheckResult = make_ref(),
+ spawn_link(fun () ->
+ receive
+ after (25 + MaxTT)*1000 ->
+ Tester ! CheckResult
+ end
+ end),
+
+ %% In case other nodes than these are connected
case nodes(connected) -- [B, C, D] of
- [] -> ?line ok;
- OtherNodes -> ?line rpc:multicall(OtherNodes, net_kernel,
- set_net_ticktime, [TT, 20])
+ [] -> ok;
+ OtherNodes -> rpc:multicall(OtherNodes, net_kernel,
+ set_net_ticktime, [TT, 20])
end,
- ?line change_initiated = net_kernel:set_net_ticktime(TT,20),
- ?line {ongoing_change_to,_} = net_kernel:set_net_ticktime(TT,20),
- ?line sleep(3),
- ?line change_initiated = rpc:call(B,net_kernel,set_net_ticktime,[TT,15]),
- ?line sleep(7),
- ?line change_initiated = rpc:call(C,net_kernel,set_net_ticktime,[TT,10]),
-
- ?line {ok, E} = start_node(EN, "-kernel net_ticktime "
- ++ integer_to_list(TT) ++ " -pa " ++ PaDir),
- ?line NME = spawn_link(E, fun () -> MonitorNodes([node(), B, C, D]) end),
- ?line NMA2 = spawn_link(fun () -> MonitorNodes([E]) end),
- ?line NMB2 = spawn_link(B, fun () -> MonitorNodes([E]) end),
- ?line NMC2 = spawn_link(C, fun () -> MonitorNodes([E]) end),
-
- receive CheckResult -> ?line ok end,
-
- ?line unlink(NMA), exit(NMA, kill),
- ?line unlink(NMB), exit(NMB, kill),
- ?line unlink(NMC), exit(NMC, kill),
- ?line unlink(NME), exit(NME, kill),
- ?line unlink(NMA2), exit(NMA2, kill),
- ?line unlink(NMB2), exit(NMB2, kill),
- ?line unlink(NMC2), exit(NMC2, kill),
+ change_initiated = net_kernel:set_net_ticktime(TT,20),
+ {ongoing_change_to,_} = net_kernel:set_net_ticktime(TT,20),
+ sleep(3),
+ change_initiated = rpc:call(B,net_kernel,set_net_ticktime,[TT,15]),
+ sleep(7),
+ change_initiated = rpc:call(C,net_kernel,set_net_ticktime,[TT,10]),
+
+ {ok, E} = start_node(EN, "-kernel net_ticktime "
+ ++ integer_to_list(TT) ++ " -pa " ++ PaDir),
+ NME = spawn_link(E, fun () -> MonitorNodes([node(), B, C, D]) end),
+ NMA2 = spawn_link(fun () -> MonitorNodes([E]) end),
+ NMB2 = spawn_link(B, fun () -> MonitorNodes([E]) end),
+ NMC2 = spawn_link(C, fun () -> MonitorNodes([E]) end),
+
+ receive CheckResult -> ok end,
+
+ unlink(NMA), exit(NMA, kill),
+ unlink(NMB), exit(NMB, kill),
+ unlink(NMC), exit(NMC, kill),
+ unlink(NME), exit(NME, kill),
+ unlink(NMA2), exit(NMA2, kill),
+ unlink(NMB2), exit(NMB2, kill),
+ unlink(NMC2), exit(NMC2, kill),
%% The node not changing ticktime should have been disconnected from the
%% other nodes
- receive {Ref, {Node, {nodedown, D}}} when Node == node() -> ?line ok
- after 0 -> ?line exit({?LINE, no_nodedown})
+ receive {Ref, {Node, {nodedown, D}}} when Node == node() -> ok
+ after 0 -> exit({?LINE, no_nodedown})
end,
- receive {Ref, {B, {nodedown, D}}} -> ?line ok
- after 0 -> ?line exit({?LINE, no_nodedown})
+ receive {Ref, {B, {nodedown, D}}} -> ok
+ after 0 -> exit({?LINE, no_nodedown})
end,
- receive {Ref, {C, {nodedown, D}}} -> ?line ok
- after 0 -> ?line exit({?LINE, no_nodedown})
+ receive {Ref, {C, {nodedown, D}}} -> ok
+ after 0 -> exit({?LINE, no_nodedown})
end,
- receive {Ref, {E, {nodedown, D}}} -> ?line ok
- after 0 -> ?line exit({?LINE, no_nodedown})
+ receive {Ref, {E, {nodedown, D}}} -> ok
+ after 0 -> exit({?LINE, no_nodedown})
end,
%% No other connections should have been broken
receive
{Ref, Reason} ->
- ?line stop_node(E),
- ?line exit({?LINE, Reason});
+ stop_node(E),
+ exit({?LINE, Reason});
{'EXIT', Pid, Reason} when Pid == NMA;
Pid == NMB;
Pid == NMC;
@@ -457,70 +443,65 @@ run_tick_change_test(B, C, PrevTT, TT, PaDir) ->
Pid == NMA2;
Pid == NMB2;
Pid == NMC2 ->
- ?line stop_node(E),
+ stop_node(E),
- ?line exit({?LINE, {node(Pid), Reason}})
+ exit({?LINE, {node(Pid), Reason}})
after 0 ->
- ?line TT = net_kernel:get_net_ticktime(),
- ?line TT = rpc:call(B, net_kernel, get_net_ticktime, []),
- ?line TT = rpc:call(C, net_kernel, get_net_ticktime, []),
- ?line TT = rpc:call(E, net_kernel, get_net_ticktime, []),
- ?line stop_node(E),
- ?line ok
+ TT = net_kernel:get_net_ticktime(),
+ TT = rpc:call(B, net_kernel, get_net_ticktime, []),
+ TT = rpc:call(C, net_kernel, get_net_ticktime, []),
+ TT = rpc:call(E, net_kernel, get_net_ticktime, []),
+ stop_node(E),
+ ok
end.
%%
%% Basic tests of hidden node.
%%
-hidden_node(doc) ->
- ["Basic test of hidden node"];
-hidden_node(suite) ->
- [];
+%% Basic test of hidden node.
hidden_node(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(40)),
PaDir = filename:dirname(code:which(?MODULE)),
VArgs = "-pa " ++ PaDir,
HArgs = "-hidden -pa " ++ PaDir,
- ?line {ok, V} = start_node(visible_node, VArgs),
+ {ok, V} = start_node(visible_node, VArgs),
VMN = start_monitor_nodes_proc(V),
- ?line {ok, H} = start_node(hidden_node, HArgs),
- % Connect visible_node -> hidden_node
+ {ok, H} = start_node(hidden_node, HArgs),
+ %% Connect visible_node -> hidden_node
connect_nodes(V, H),
test_nodes(V, H),
stop_node(H),
sleep(5),
check_monitor_nodes_res(VMN, H),
stop_node(V),
- ?line {ok, H} = start_node(hidden_node, HArgs),
+ {ok, H} = start_node(hidden_node, HArgs),
HMN = start_monitor_nodes_proc(H),
- ?line {ok, V} = start_node(visible_node, VArgs),
- % Connect hidden_node -> visible_node
+ {ok, V} = start_node(visible_node, VArgs),
+ %% Connect hidden_node -> visible_node
connect_nodes(H, V),
test_nodes(V, H),
stop_node(V),
sleep(5),
check_monitor_nodes_res(HMN, V),
stop_node(H),
- ?line ?t:timetrap_cancel(Dog),
ok.
connect_nodes(A, B) ->
- % Check that they haven't already connected.
- ?line false = lists:member(A, rpc:call(B, erlang, nodes, [connected])),
- ?line false = lists:member(B, rpc:call(A, erlang, nodes, [connected])),
- % Connect them.
- ?line pong = rpc:call(A, net_adm, ping, [B]).
-
+ %% Check that they haven't already connected.
+ false = lists:member(A, rpc:call(B, erlang, nodes, [connected])),
+ false = lists:member(B, rpc:call(A, erlang, nodes, [connected])),
+ %% Connect them.
+ pong = rpc:call(A, net_adm, ping, [B]).
+
test_nodes(V, H) ->
- % No nodes should be visible on hidden_node
- ?line [] = rpc:call(H, erlang, nodes, []),
- % visible_node should be hidden on hidden_node
- ?line true = lists:member(V, rpc:call(H, erlang, nodes, [hidden])),
- % hidden_node node shouldn't be visible on visible_node
- ?line false = lists:member(H, rpc:call(V, erlang, nodes, [])),
- % hidden_node should be hidden on visible_node
- ?line true = lists:member(H, rpc:call(V, erlang, nodes, [hidden])).
+ %% No nodes should be visible on hidden_node
+ [] = rpc:call(H, erlang, nodes, []),
+ %% visible_node should be hidden on hidden_node
+ true = lists:member(V, rpc:call(H, erlang, nodes, [hidden])),
+ %% hidden_node node shouldn't be visible on visible_node
+ false = lists:member(H, rpc:call(V, erlang, nodes, [])),
+ %% hidden_node should be hidden on visible_node
+ true = lists:member(H, rpc:call(V, erlang, nodes, [hidden])).
mn_loop(MNs) ->
receive
@@ -548,21 +529,19 @@ start_monitor_nodes_proc(Node) ->
ok
end,
Pid.
-
+
check_monitor_nodes_res(Pid, Node) ->
Ref = make_ref(),
Pid ! {monitor_nodes_result, Ref, self()},
receive
{Ref, MNs} ->
- ?line false = lists:keysearch(Node, 2, MNs)
+ false = lists:keysearch(Node, 2, MNs)
end.
-inet_dist_options_options(suite) -> [];
-inet_dist_options_options(doc) ->
- ["Check the kernel inet_dist_{listen,connect}_options options"];
+%% Check the kernel inet_dist_{listen,connect}_options options.
inet_dist_options_options(Config) when is_list(Config) ->
Prio = 1,
case gen_udp:open(0, [{priority,Prio}]) of
@@ -571,7 +550,7 @@ inet_dist_options_options(Config) when is_list(Config) ->
{ok,[{priority,Prio}]} ->
ok = gen_udp:close(Socket),
do_inet_dist_options_options(Prio);
- _ ->
+ _ ->
ok = gen_udp:close(Socket),
{skip,
"Can not set priority "++integer_to_list(Prio)++
@@ -595,25 +574,25 @@ do_inet_dist_options_options(Prio) ->
"-hidden "
"-kernel inet_dist_connect_options "++PriorityString++" "
"-kernel inet_dist_listen_options "++PriorityString,
- ?line {ok,Node1} =
+ {ok,Node1} =
start_node(inet_dist_options_1, InetDistOptions),
- ?line {ok,Node2} =
+ {ok,Node2} =
start_node(inet_dist_options_2, InetDistOptions),
%%
- ?line pong =
+ pong =
rpc:call(Node1, net_adm, ping, [Node2]),
- ?line PrioritiesNode1 =
+ PrioritiesNode1 =
rpc:call(Node1, ?MODULE, get_socket_priorities, []),
- ?line PrioritiesNode2 =
+ PrioritiesNode2 =
rpc:call(Node2, ?MODULE, get_socket_priorities, []),
- ?line ?t:format("PrioritiesNode1 = ~p", [PrioritiesNode1]),
- ?line ?t:format("PrioritiesNode2 = ~p", [PrioritiesNode2]),
- ?line Elevated = [P || P <- PrioritiesNode1, P =:= Prio],
- ?line Elevated = [P || P <- PrioritiesNode2, P =:= Prio],
- ?line [_|_] = Elevated,
+ io:format("PrioritiesNode1 = ~p", [PrioritiesNode1]),
+ io:format("PrioritiesNode2 = ~p", [PrioritiesNode2]),
+ Elevated = [P || P <- PrioritiesNode1, P =:= Prio],
+ Elevated = [P || P <- PrioritiesNode2, P =:= Prio],
+ [_|_] = Elevated,
%%
- ?line stop_node(Node2),
- ?line stop_node(Node1),
+ stop_node(Node2),
+ stop_node(Node1),
ok.
get_socket_priorities() ->
@@ -624,185 +603,178 @@ get_socket_priorities() ->
element(2, erlang:port_info(Port, name)) =:= "tcp_inet"]].
-
+
%%
%% Testcase:
%% monitor_nodes_nodedown_reason
%%
-monitor_nodes_nodedown_reason(doc) -> [];
-monitor_nodes_nodedown_reason(suite) -> [];
monitor_nodes_nodedown_reason(Config) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line ok = net_kernel:monitor_nodes(true),
- ?line ok = net_kernel:monitor_nodes(true, [nodedown_reason]),
-
- ?line Names = get_numbered_nodenames(5, node),
- ?line [NN1, NN2, NN3, NN4, NN5] = Names,
-
- ?line {ok, N1} = start_node(NN1),
- ?line {ok, N2} = start_node(NN2),
- ?line {ok, N3} = start_node(NN3),
- ?line {ok, N4} = start_node(NN4, "-hidden"),
-
- ?line receive {nodeup, N1} -> ok end,
- ?line receive {nodeup, N2} -> ok end,
- ?line receive {nodeup, N3} -> ok end,
-
- ?line receive {nodeup, N1, []} -> ok end,
- ?line receive {nodeup, N2, []} -> ok end,
- ?line receive {nodeup, N3, []} -> ok end,
-
- ?line stop_node(N1),
- ?line stop_node(N4),
- ?line true = net_kernel:disconnect(N2),
- ?line TickTime = net_kernel:get_net_ticktime(),
- ?line SleepTime = TickTime + (TickTime div 4),
- ?line spawn(N3, fun () ->
- block_emu(SleepTime*1000),
- halt()
- end),
-
- ?line receive {nodedown, N1} -> ok end,
- ?line receive {nodedown, N2} -> ok end,
- ?line receive {nodedown, N3} -> ok end,
-
- ?line receive {nodedown, N1, [{nodedown_reason, R1}]} -> connection_closed = R1 end,
- ?line receive {nodedown, N2, [{nodedown_reason, R2}]} -> disconnect = R2 end,
- ?line receive {nodedown, N3, [{nodedown_reason, R3}]} -> net_tick_timeout = R3 end,
-
- ?line ok = net_kernel:monitor_nodes(false, [nodedown_reason]),
-
- ?line {ok, N5} = start_node(NN5),
- ?line stop_node(N5),
-
- ?line receive {nodeup, N5} -> ok end,
- ?line receive {nodedown, N5} -> ok end,
- ?line print_my_messages(),
- ?line ok = check_no_nodedown_nodeup(1000),
- ?line ok = net_kernel:monitor_nodes(false),
- ?line MonNodeState = monitor_node_state(),
- ?line ok.
-
-
-monitor_nodes_complex_nodedown_reason(doc) -> [];
-monitor_nodes_complex_nodedown_reason(suite) -> [];
+ MonNodeState = monitor_node_state(),
+ ok = net_kernel:monitor_nodes(true),
+ ok = net_kernel:monitor_nodes(true, [nodedown_reason]),
+
+ Names = get_numbered_nodenames(5, node),
+ [NN1, NN2, NN3, NN4, NN5] = Names,
+
+ {ok, N1} = start_node(NN1),
+ {ok, N2} = start_node(NN2),
+ {ok, N3} = start_node(NN3),
+ {ok, N4} = start_node(NN4, "-hidden"),
+
+ receive {nodeup, N1} -> ok end,
+ receive {nodeup, N2} -> ok end,
+ receive {nodeup, N3} -> ok end,
+
+ receive {nodeup, N1, []} -> ok end,
+ receive {nodeup, N2, []} -> ok end,
+ receive {nodeup, N3, []} -> ok end,
+
+ stop_node(N1),
+ stop_node(N4),
+ true = net_kernel:disconnect(N2),
+ TickTime = net_kernel:get_net_ticktime(),
+ SleepTime = TickTime + (TickTime div 2),
+ spawn(N3, fun () ->
+ block_emu(SleepTime*1000),
+ halt()
+ end),
+
+ receive {nodedown, N1} -> ok end,
+ receive {nodedown, N2} -> ok end,
+ receive {nodedown, N3} -> ok end,
+
+ receive {nodedown, N1, [{nodedown_reason, R1}]} -> connection_closed = R1 end,
+ receive {nodedown, N2, [{nodedown_reason, R2}]} -> disconnect = R2 end,
+ receive {nodedown, N3, [{nodedown_reason, R3}]} -> net_tick_timeout = R3 end,
+
+ ok = net_kernel:monitor_nodes(false, [nodedown_reason]),
+
+ {ok, N5} = start_node(NN5),
+ stop_node(N5),
+
+ receive {nodeup, N5} -> ok end,
+ receive {nodedown, N5} -> ok end,
+ print_my_messages(),
+ ok = check_no_nodedown_nodeup(1000),
+ ok = net_kernel:monitor_nodes(false),
+ MonNodeState = monitor_node_state(),
+ ok.
+
+
monitor_nodes_complex_nodedown_reason(Config) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line Me = self(),
- ?line ok = net_kernel:monitor_nodes(true, [nodedown_reason]),
- ?line [Name] = get_nodenames(1, monitor_nodes_complex_nodedown_reason),
- ?line {ok, Node} = start_node(Name, ""),
- ?line Pid = spawn(Node,
- fun() ->
- Me ! {stuff,
- self(),
- [make_ref(),
- {processes(), erlang:ports()}]}
- end),
- ?line receive {nodeup, Node, []} -> ok end,
- ?line {ok, NodeInfo} = net_kernel:node_info(Node),
- ?line {value,{owner, Owner}} = lists:keysearch(owner, 1, NodeInfo),
- ?line ComplexTerm = receive {stuff, Pid, _} = Msg ->
- {Msg, term_to_binary(Msg)}
- end,
- ?line exit(Owner, ComplexTerm),
- ?line receive
- {nodedown, Node, [{nodedown_reason, NodeDownReason}]} ->
- ?line ok
- end,
+ MonNodeState = monitor_node_state(),
+ Me = self(),
+ ok = net_kernel:monitor_nodes(true, [nodedown_reason]),
+ [Name] = get_nodenames(1, monitor_nodes_complex_nodedown_reason),
+ {ok, Node} = start_node(Name, ""),
+ Pid = spawn(Node,
+ fun() ->
+ Me ! {stuff,
+ self(),
+ [make_ref(),
+ {processes(), erlang:ports()}]}
+ end),
+ receive {nodeup, Node, []} -> ok end,
+ {ok, NodeInfo} = net_kernel:node_info(Node),
+ {value,{owner, Owner}} = lists:keysearch(owner, 1, NodeInfo),
+ ComplexTerm = receive {stuff, Pid, _} = Msg ->
+ {Msg, term_to_binary(Msg)}
+ end,
+ exit(Owner, ComplexTerm),
+ receive
+ {nodedown, Node, [{nodedown_reason, NodeDownReason}]} ->
+ ok
+ end,
%% If the complex nodedown_reason messed something up garbage collections
%% are likely to dump core
- ?line garbage_collect(),
- ?line garbage_collect(),
- ?line garbage_collect(),
- ?line ComplexTerm = NodeDownReason,
- ?line ok = net_kernel:monitor_nodes(false, [nodedown_reason]),
- ?line no_msgs(),
- ?line MonNodeState = monitor_node_state(),
- ?line ok.
-
-
-
+ garbage_collect(),
+ garbage_collect(),
+ garbage_collect(),
+ ComplexTerm = NodeDownReason,
+ ok = net_kernel:monitor_nodes(false, [nodedown_reason]),
+ no_msgs(),
+ MonNodeState = monitor_node_state(),
+ ok.
+
+
+
%%
%% Testcase:
%% monitor_nodes_node_type
%%
-monitor_nodes_node_type(doc) -> [];
-monitor_nodes_node_type(suite) -> [];
monitor_nodes_node_type(Config) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line ok = net_kernel:monitor_nodes(true),
- ?line ok = net_kernel:monitor_nodes(true, [{node_type, all}]),
- ?line Names = get_numbered_nodenames(9, node),
-% ?line ?t:format("Names: ~p~n", [Names]),
- ?line [NN1, NN2, NN3, NN4, NN5, NN6, NN7, NN8, NN9] = Names,
-
- ?line {ok, N1} = start_node(NN1),
- ?line {ok, N2} = start_node(NN2),
- ?line {ok, N3} = start_node(NN3, "-hidden"),
- ?line {ok, N4} = start_node(NN4, "-hidden"),
-
- ?line receive {nodeup, N1} -> ok end,
- ?line receive {nodeup, N2} -> ok end,
-
- ?line receive {nodeup, N1, [{node_type, visible}]} -> ok end,
- ?line receive {nodeup, N2, [{node_type, visible}]} -> ok end,
- ?line receive {nodeup, N3, [{node_type, hidden}]} -> ok end,
- ?line receive {nodeup, N4, [{node_type, hidden}]} -> ok end,
-
- ?line stop_node(N1),
- ?line stop_node(N2),
- ?line stop_node(N3),
- ?line stop_node(N4),
-
- ?line receive {nodedown, N1} -> ok end,
- ?line receive {nodedown, N2} -> ok end,
-
- ?line receive {nodedown, N1, [{node_type, visible}]} -> ok end,
- ?line receive {nodedown, N2, [{node_type, visible}]} -> ok end,
- ?line receive {nodedown, N3, [{node_type, hidden}]} -> ok end,
- ?line receive {nodedown, N4, [{node_type, hidden}]} -> ok end,
-
- ?line ok = net_kernel:monitor_nodes(false, [{node_type, all}]),
- ?line {ok, N5} = start_node(NN5),
-
- ?line receive {nodeup, N5} -> ok end,
- ?line stop_node(N5),
- ?line receive {nodedown, N5} -> ok end,
-
- ?line ok = net_kernel:monitor_nodes(true, [{node_type, hidden}]),
- ?line {ok, N6} = start_node(NN6),
- ?line {ok, N7} = start_node(NN7, "-hidden"),
-
-
- ?line receive {nodeup, N6} -> ok end,
- ?line receive {nodeup, N7, [{node_type, hidden}]} -> ok end,
- ?line stop_node(N6),
- ?line stop_node(N7),
-
- ?line receive {nodedown, N6} -> ok end,
- ?line receive {nodedown, N7, [{node_type, hidden}]} -> ok end,
-
- ?line ok = net_kernel:monitor_nodes(true, [{node_type, visible}]),
- ?line ok = net_kernel:monitor_nodes(false, [{node_type, hidden}]),
- ?line ok = net_kernel:monitor_nodes(false),
-
- ?line {ok, N8} = start_node(NN8),
- ?line {ok, N9} = start_node(NN9, "-hidden"),
-
- ?line receive {nodeup, N8, [{node_type, visible}]} -> ok end,
- ?line stop_node(N8),
- ?line stop_node(N9),
-
- ?line receive {nodedown, N8, [{node_type, visible}]} -> ok end,
- ?line print_my_messages(),
- ?line ok = check_no_nodedown_nodeup(1000),
- ?line ok = net_kernel:monitor_nodes(false, [{node_type, visible}]),
- ?line MonNodeState = monitor_node_state(),
- ?line ok.
+ MonNodeState = monitor_node_state(),
+ ok = net_kernel:monitor_nodes(true),
+ ok = net_kernel:monitor_nodes(true, [{node_type, all}]),
+ Names = get_numbered_nodenames(9, node),
+ [NN1, NN2, NN3, NN4, NN5, NN6, NN7, NN8, NN9] = Names,
+
+ {ok, N1} = start_node(NN1),
+ {ok, N2} = start_node(NN2),
+ {ok, N3} = start_node(NN3, "-hidden"),
+ {ok, N4} = start_node(NN4, "-hidden"),
+
+ receive {nodeup, N1} -> ok end,
+ receive {nodeup, N2} -> ok end,
+
+ receive {nodeup, N1, [{node_type, visible}]} -> ok end,
+ receive {nodeup, N2, [{node_type, visible}]} -> ok end,
+ receive {nodeup, N3, [{node_type, hidden}]} -> ok end,
+ receive {nodeup, N4, [{node_type, hidden}]} -> ok end,
+
+ stop_node(N1),
+ stop_node(N2),
+ stop_node(N3),
+ stop_node(N4),
+
+ receive {nodedown, N1} -> ok end,
+ receive {nodedown, N2} -> ok end,
+
+ receive {nodedown, N1, [{node_type, visible}]} -> ok end,
+ receive {nodedown, N2, [{node_type, visible}]} -> ok end,
+ receive {nodedown, N3, [{node_type, hidden}]} -> ok end,
+ receive {nodedown, N4, [{node_type, hidden}]} -> ok end,
+
+ ok = net_kernel:monitor_nodes(false, [{node_type, all}]),
+ {ok, N5} = start_node(NN5),
+
+ receive {nodeup, N5} -> ok end,
+ stop_node(N5),
+ receive {nodedown, N5} -> ok end,
+
+ ok = net_kernel:monitor_nodes(true, [{node_type, hidden}]),
+ {ok, N6} = start_node(NN6),
+ {ok, N7} = start_node(NN7, "-hidden"),
+
+
+ receive {nodeup, N6} -> ok end,
+ receive {nodeup, N7, [{node_type, hidden}]} -> ok end,
+ stop_node(N6),
+ stop_node(N7),
+
+ receive {nodedown, N6} -> ok end,
+ receive {nodedown, N7, [{node_type, hidden}]} -> ok end,
+
+ ok = net_kernel:monitor_nodes(true, [{node_type, visible}]),
+ ok = net_kernel:monitor_nodes(false, [{node_type, hidden}]),
+ ok = net_kernel:monitor_nodes(false),
+
+ {ok, N8} = start_node(NN8),
+ {ok, N9} = start_node(NN9, "-hidden"),
+
+ receive {nodeup, N8, [{node_type, visible}]} -> ok end,
+ stop_node(N8),
+ stop_node(N9),
+
+ receive {nodedown, N8, [{node_type, visible}]} -> ok end,
+ print_my_messages(),
+ ok = check_no_nodedown_nodeup(1000),
+ ok = net_kernel:monitor_nodes(false, [{node_type, visible}]),
+ MonNodeState = monitor_node_state(),
+ ok.
%%
@@ -810,95 +782,89 @@ monitor_nodes_node_type(Config) when is_list(Config) ->
%% monitor_nodes
%%
-monitor_nodes_misc(doc) -> [];
-monitor_nodes_misc(suite) -> [];
monitor_nodes_misc(Config) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line ok = net_kernel:monitor_nodes(true),
- ?line ok = net_kernel:monitor_nodes(true, [{node_type, all}, nodedown_reason]),
- ?line ok = net_kernel:monitor_nodes(true, [nodedown_reason, {node_type, all}]),
- ?line Names = get_numbered_nodenames(3, node),
-% ?line ?t:format("Names: ~p~n", [Names]),
- ?line [NN1, NN2, NN3] = Names,
-
- ?line {ok, N1} = start_node(NN1),
- ?line {ok, N2} = start_node(NN2, "-hidden"),
-
- ?line receive {nodeup, N1} -> ok end,
-
- ?line receive {nodeup, N1, [{node_type, visible}]} -> ok end,
- ?line receive {nodeup, N1, [{node_type, visible}]} -> ok end,
- ?line receive {nodeup, N2, [{node_type, hidden}]} -> ok end,
- ?line receive {nodeup, N2, [{node_type, hidden}]} -> ok end,
-
- ?line stop_node(N1),
- ?line stop_node(N2),
-
- ?line VisbleDownInfo = lists:sort([{node_type, visible},
- {nodedown_reason, connection_closed}]),
- ?line HiddenDownInfo = lists:sort([{node_type, hidden},
- {nodedown_reason, connection_closed}]),
-
- ?line receive {nodedown, N1} -> ok end,
-
- ?line receive {nodedown, N1, Info1A} -> VisbleDownInfo = lists:sort(Info1A) end,
- ?line receive {nodedown, N1, Info1B} -> VisbleDownInfo = lists:sort(Info1B) end,
- ?line receive {nodedown, N2, Info2A} -> HiddenDownInfo = lists:sort(Info2A) end,
- ?line receive {nodedown, N2, Info2B} -> HiddenDownInfo = lists:sort(Info2B) end,
-
- ?line ok = net_kernel:monitor_nodes(false, [{node_type, all}, nodedown_reason]),
-
- ?line {ok, N3} = start_node(NN3),
- ?line receive {nodeup, N3} -> ok end,
- ?line stop_node(N3),
- ?line receive {nodedown, N3} -> ok end,
- ?line print_my_messages(),
- ?line ok = check_no_nodedown_nodeup(1000),
- ?line ok = net_kernel:monitor_nodes(false),
- ?line MonNodeState = monitor_node_state(),
- ?line ok.
-
-
-monitor_nodes_otp_6481(doc) ->
- ["Tests that {nodeup, Node} messages are received before "
- "messages from Node and that {nodedown, Node} messages are"
- "received after messages from Node"];
-monitor_nodes_otp_6481(suite) ->
- [];
+ MonNodeState = monitor_node_state(),
+ ok = net_kernel:monitor_nodes(true),
+ ok = net_kernel:monitor_nodes(true, [{node_type, all}, nodedown_reason]),
+ ok = net_kernel:monitor_nodes(true, [nodedown_reason, {node_type, all}]),
+ Names = get_numbered_nodenames(3, node),
+ [NN1, NN2, NN3] = Names,
+
+ {ok, N1} = start_node(NN1),
+ {ok, N2} = start_node(NN2, "-hidden"),
+
+ receive {nodeup, N1} -> ok end,
+
+ receive {nodeup, N1, [{node_type, visible}]} -> ok end,
+ receive {nodeup, N1, [{node_type, visible}]} -> ok end,
+ receive {nodeup, N2, [{node_type, hidden}]} -> ok end,
+ receive {nodeup, N2, [{node_type, hidden}]} -> ok end,
+
+ stop_node(N1),
+ stop_node(N2),
+
+ VisbleDownInfo = lists:sort([{node_type, visible},
+ {nodedown_reason, connection_closed}]),
+ HiddenDownInfo = lists:sort([{node_type, hidden},
+ {nodedown_reason, connection_closed}]),
+
+ receive {nodedown, N1} -> ok end,
+
+ receive {nodedown, N1, Info1A} -> VisbleDownInfo = lists:sort(Info1A) end,
+ receive {nodedown, N1, Info1B} -> VisbleDownInfo = lists:sort(Info1B) end,
+ receive {nodedown, N2, Info2A} -> HiddenDownInfo = lists:sort(Info2A) end,
+ receive {nodedown, N2, Info2B} -> HiddenDownInfo = lists:sort(Info2B) end,
+
+ ok = net_kernel:monitor_nodes(false, [{node_type, all}, nodedown_reason]),
+
+ {ok, N3} = start_node(NN3),
+ receive {nodeup, N3} -> ok end,
+ stop_node(N3),
+ receive {nodedown, N3} -> ok end,
+ print_my_messages(),
+ ok = check_no_nodedown_nodeup(1000),
+ ok = net_kernel:monitor_nodes(false),
+ MonNodeState = monitor_node_state(),
+ ok.
+
+
+%% Tests that {nodeup, Node} messages are received before
+%% messages from Node and that {nodedown, Node} messages are
+%% received after messages from Node.
monitor_nodes_otp_6481(Config) when is_list(Config) ->
- ?line ?t:format("Testing nodedown...~n"),
- ?line monitor_nodes_otp_6481_test(Config, nodedown),
- ?line ?t:format("ok~n"),
- ?line ?t:format("Testing nodeup...~n"),
- ?line monitor_nodes_otp_6481_test(Config, nodeup),
- ?line ?t:format("ok~n"),
- ?line ok.
+ io:format("Testing nodedown...~n"),
+ monitor_nodes_otp_6481_test(Config, nodedown),
+ io:format("ok~n"),
+ io:format("Testing nodeup...~n"),
+ monitor_nodes_otp_6481_test(Config, nodeup),
+ io:format("ok~n"),
+ ok.
monitor_nodes_otp_6481_test(Config, TestType) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line NodeMsg = make_ref(),
- ?line Me = self(),
- ?line [Name] = get_nodenames(1, monitor_nodes_otp_6481),
- ?line case TestType of
- nodedown -> ?line ok = net_kernel:monitor_nodes(true);
- nodeup -> ?line ok
- end,
- ?line Seq = lists:seq(1,10000),
- ?line MN = spawn_link(
- fun () ->
- ?line lists:foreach(
- fun (_) ->
- ?line ok = net_kernel:monitor_nodes(true)
- end,
- Seq),
- ?line Me ! {mon_set, self()},
- ?line receive after infinity -> ok end
- end),
- ?line receive {mon_set, MN} -> ok end,
- ?line case TestType of
- nodedown -> ?line ok;
- nodeup -> ?line ok = net_kernel:monitor_nodes(true)
- end,
+ MonNodeState = monitor_node_state(),
+ NodeMsg = make_ref(),
+ Me = self(),
+ [Name] = get_nodenames(1, monitor_nodes_otp_6481),
+ case TestType of
+ nodedown -> ok = net_kernel:monitor_nodes(true);
+ nodeup -> ok
+ end,
+ Seq = lists:seq(1,10000),
+ MN = spawn_link(
+ fun () ->
+ lists:foreach(
+ fun (_) ->
+ ok = net_kernel:monitor_nodes(true)
+ end,
+ Seq),
+ Me ! {mon_set, self()},
+ receive after infinity -> ok end
+ end),
+ receive {mon_set, MN} -> ok end,
+ case TestType of
+ nodedown -> ok;
+ nodeup -> ok = net_kernel:monitor_nodes(true)
+ end,
%% Whitebox:
%% nodedown test: Since this process was the first one monitoring
@@ -909,170 +875,163 @@ monitor_nodes_otp_6481_test(Config, TestType) when is_list(Config) ->
%% on nodeup
%% Verify the monitor_nodes order expected
- ?line TestMonNodeState = monitor_node_state(),
- %?line ?t:format("~p~n", [TestMonNodeState]),
- ?line TestMonNodeState =
+ TestMonNodeState = monitor_node_state(),
+ %% io:format("~p~n", [TestMonNodeState]),
+ TestMonNodeState =
MonNodeState
++ case TestType of
- nodedown -> [{self(), []}];
- nodeup -> []
+ nodedown -> [{self(), []}];
+ nodeup -> []
end
++ lists:map(fun (_) -> {MN, []} end, Seq)
++ case TestType of
- nodedown -> [];
- nodeup -> [{self(), []}]
+ nodedown -> [];
+ nodeup -> [{self(), []}]
end,
- ?line {ok, Node} = start_node(Name, "", this),
- ?line receive {nodeup, Node} -> ok end,
-
- ?line RemotePid = spawn(Node,
- fun () ->
- receive after 1500 -> ok end,
- % infinit loop of msgs
- % we want an endless stream of messages and the kill
- % the node mercilessly.
- % We then want to ensure that the nodedown message arrives
- % last ... without garbage after it.
- _ = spawn(fun() -> node_loop_send(Me, NodeMsg, 1) end),
- receive {Me, kill_it} -> ok end,
- halt()
- end),
+ {ok, Node} = start_node(Name, "", this),
+ receive {nodeup, Node} -> ok end,
+
+ RemotePid = spawn(Node,
+ fun () ->
+ receive after 1500 -> ok end,
+ %% infinit loop of msgs
+ %% we want an endless stream of messages and the kill
+ %% the node mercilessly.
+ %% We then want to ensure that the nodedown message arrives
+ %% last ... without garbage after it.
+ _ = spawn(fun() -> node_loop_send(Me, NodeMsg, 1) end),
+ receive {Me, kill_it} -> ok end,
+ halt()
+ end),
- ?line net_kernel:disconnect(Node),
- ?line receive {nodedown, Node} -> ok end,
+ net_kernel:disconnect(Node),
+ receive {nodedown, Node} -> ok end,
%% Verify that '{nodeup, Node}' comes before '{NodeMsg, 1}' (the message
%% bringing up the connection).
- ?line no_msgs(500),
- ?line {nodeup, Node} = receive Msg1 -> Msg1 end,
- ?line {NodeMsg, 1} = receive Msg2 -> Msg2 end,
- % msg stream has begun, kill the node
- ?line RemotePid ! {self(), kill_it},
+ {nodeup, Node} = receive Msg1 -> Msg1 end,
+ {NodeMsg, N} = receive Msg2 -> Msg2 end,
+ %% msg stream has begun, kill the node
+ RemotePid ! {self(), kill_it},
%% Verify that '{nodedown, Node}' comes after the last '{NodeMsg, N}'
%% message.
- ?line {nodedown, Node} = flush_node_msgs(NodeMsg, 2),
- ?line no_msgs(500),
-
- ?line Mon = erlang:monitor(process, MN),
- ?line unlink(MN),
- ?line exit(MN, bang),
- ?line receive {'DOWN', Mon, process, MN, bang} -> ok end,
- ?line ok = net_kernel:monitor_nodes(false),
- ?line MonNodeState = monitor_node_state(),
- ?line ok.
+ {nodedown, Node} = flush_node_msgs(NodeMsg, N+1),
+ no_msgs(500),
+
+ Mon = erlang:monitor(process, MN),
+ unlink(MN),
+ exit(MN, bang),
+ receive {'DOWN', Mon, process, MN, bang} -> ok end,
+ ok = net_kernel:monitor_nodes(false),
+ MonNodeState = monitor_node_state(),
+ ok.
flush_node_msgs(NodeMsg, No) ->
case receive Msg -> Msg end of
- {NodeMsg, No} -> flush_node_msgs(NodeMsg, No+1);
- OtherMsg -> OtherMsg
+ {NodeMsg, N} when N >= No ->
+ flush_node_msgs(NodeMsg, N+1);
+ OtherMsg ->
+ OtherMsg
end.
node_loop_send(Pid, Msg, No) ->
Pid ! {Msg, No},
node_loop_send(Pid, Msg, No + 1).
-monitor_nodes_errors(doc) ->
- [];
-monitor_nodes_errors(suite) ->
- [];
monitor_nodes_errors(Config) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line error = net_kernel:monitor_nodes(asdf),
- ?line {error,
- {unknown_options,
- [gurka]}} = net_kernel:monitor_nodes(true,
- [gurka]),
- ?line {error,
- {options_not_a_list,
- gurka}} = net_kernel:monitor_nodes(true,
- gurka),
- ?line {error,
- {option_value_mismatch,
- [{node_type,visible},
- {node_type,hidden}]}}
+ MonNodeState = monitor_node_state(),
+ error = net_kernel:monitor_nodes(asdf),
+ {error,
+ {unknown_options,
+ [gurka]}} = net_kernel:monitor_nodes(true,
+ [gurka]),
+ {error,
+ {options_not_a_list,
+ gurka}} = net_kernel:monitor_nodes(true,
+ gurka),
+ {error,
+ {option_value_mismatch,
+ [{node_type,visible},
+ {node_type,hidden}]}}
= net_kernel:monitor_nodes(true,
[{node_type,hidden},
{node_type,visible}]),
- ?line {error,
- {option_value_mismatch,
- [{node_type,visible},
- {node_type,all}]}}
+ {error,
+ {option_value_mismatch,
+ [{node_type,visible},
+ {node_type,all}]}}
= net_kernel:monitor_nodes(true,
[{node_type,all},
{node_type,visible}]),
- ?line {error,
- {bad_option_value,
- {node_type,
- blaha}}}
+ {error,
+ {bad_option_value,
+ {node_type,
+ blaha}}}
= net_kernel:monitor_nodes(true, [{node_type, blaha}]),
- ?line MonNodeState = monitor_node_state(),
- ?line ok.
+ MonNodeState = monitor_node_state(),
+ ok.
-monitor_nodes_combinations(doc) ->
- [];
-monitor_nodes_combinations(suite) ->
- [];
monitor_nodes_combinations(Config) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line monitor_nodes_all_comb(true),
- ?line [VisibleName, HiddenName] = get_nodenames(2,
- monitor_nodes_combinations),
- ?line {ok, Visible} = start_node(VisibleName, ""),
- ?line receive_all_comb_nodeup_msgs(visible, Visible),
- ?line no_msgs(),
- ?line stop_node(Visible),
- ?line receive_all_comb_nodedown_msgs(visible, Visible, connection_closed),
- ?line no_msgs(),
- ?line {ok, Hidden} = start_node(HiddenName, "-hidden"),
- ?line receive_all_comb_nodeup_msgs(hidden, Hidden),
- ?line no_msgs(),
- ?line stop_node(Hidden),
- ?line receive_all_comb_nodedown_msgs(hidden, Hidden, connection_closed),
- ?line no_msgs(),
- ?line monitor_nodes_all_comb(false),
- ?line MonNodeState = monitor_node_state(),
- ?line no_msgs(),
- ?line ok.
+ MonNodeState = monitor_node_state(),
+ monitor_nodes_all_comb(true),
+ [VisibleName, HiddenName] = get_nodenames(2,
+ monitor_nodes_combinations),
+ {ok, Visible} = start_node(VisibleName, ""),
+ receive_all_comb_nodeup_msgs(visible, Visible),
+ no_msgs(),
+ stop_node(Visible),
+ receive_all_comb_nodedown_msgs(visible, Visible, connection_closed),
+ no_msgs(),
+ {ok, Hidden} = start_node(HiddenName, "-hidden"),
+ receive_all_comb_nodeup_msgs(hidden, Hidden),
+ no_msgs(),
+ stop_node(Hidden),
+ receive_all_comb_nodedown_msgs(hidden, Hidden, connection_closed),
+ no_msgs(),
+ monitor_nodes_all_comb(false),
+ MonNodeState = monitor_node_state(),
+ no_msgs(),
+ ok.
monitor_nodes_all_comb(Flag) ->
- ?line ok = net_kernel:monitor_nodes(Flag),
- ?line ok = net_kernel:monitor_nodes(Flag,
- [nodedown_reason]),
- ?line ok = net_kernel:monitor_nodes(Flag,
- [{node_type, hidden}]),
- ?line ok = net_kernel:monitor_nodes(Flag,
- [{node_type, visible}]),
- ?line ok = net_kernel:monitor_nodes(Flag,
- [{node_type, all}]),
- ?line ok = net_kernel:monitor_nodes(Flag,
- [nodedown_reason,
- {node_type, hidden}]),
- ?line ok = net_kernel:monitor_nodes(Flag,
- [nodedown_reason,
- {node_type, visible}]),
- ?line ok = net_kernel:monitor_nodes(Flag,
- [nodedown_reason,
- {node_type, all}]),
+ ok = net_kernel:monitor_nodes(Flag),
+ ok = net_kernel:monitor_nodes(Flag,
+ [nodedown_reason]),
+ ok = net_kernel:monitor_nodes(Flag,
+ [{node_type, hidden}]),
+ ok = net_kernel:monitor_nodes(Flag,
+ [{node_type, visible}]),
+ ok = net_kernel:monitor_nodes(Flag,
+ [{node_type, all}]),
+ ok = net_kernel:monitor_nodes(Flag,
+ [nodedown_reason,
+ {node_type, hidden}]),
+ ok = net_kernel:monitor_nodes(Flag,
+ [nodedown_reason,
+ {node_type, visible}]),
+ ok = net_kernel:monitor_nodes(Flag,
+ [nodedown_reason,
+ {node_type, all}]),
%% There currently are 8 different combinations
- ?line 8.
+ 8.
receive_all_comb_nodeup_msgs(visible, Node) ->
- ?t:format("Receive nodeup visible...~n"),
+ io:format("Receive nodeup visible...~n"),
Exp = [{nodeup, Node},
{nodeup, Node, []}]
++ mk_exp_mn_all_comb_nodeup_msgs_common(visible, Node),
receive_mn_msgs(Exp),
- ?t:format("ok~n"),
+ io:format("ok~n"),
ok;
receive_all_comb_nodeup_msgs(hidden, Node) ->
- ?t:format("Receive nodeup hidden...~n"),
+ io:format("Receive nodeup hidden...~n"),
Exp = mk_exp_mn_all_comb_nodeup_msgs_common(hidden, Node),
receive_mn_msgs(Exp),
- ?t:format("ok~n"),
+ io:format("ok~n"),
ok.
mk_exp_mn_all_comb_nodeup_msgs_common(Type, Node) ->
@@ -1083,20 +1042,20 @@ mk_exp_mn_all_comb_nodeup_msgs_common(Type, Node) ->
{nodeup, Node, InfoNt}].
receive_all_comb_nodedown_msgs(visible, Node, Reason) ->
- ?t:format("Receive nodedown visible...~n"),
+ io:format("Receive nodedown visible...~n"),
Exp = [{nodedown, Node},
{nodedown, Node, [{nodedown_reason, Reason}]}]
++ mk_exp_mn_all_comb_nodedown_msgs_common(visible,
Node,
Reason),
receive_mn_msgs(Exp),
- ?t:format("ok~n"),
+ io:format("ok~n"),
ok;
receive_all_comb_nodedown_msgs(hidden, Node, Reason) ->
- ?t:format("Receive nodedown hidden...~n"),
+ io:format("Receive nodedown hidden...~n"),
Exp = mk_exp_mn_all_comb_nodedown_msgs_common(hidden, Node, Reason),
receive_mn_msgs(Exp),
- ?t:format("ok~n"),
+ io:format("ok~n"),
ok.
mk_exp_mn_all_comb_nodedown_msgs_common(Type, Node, Reason) ->
@@ -1110,81 +1069,73 @@ mk_exp_mn_all_comb_nodedown_msgs_common(Type, Node, Reason) ->
receive_mn_msgs([]) ->
ok;
receive_mn_msgs(Msgs) ->
- ?t:format("Expecting msgs: ~p~n", [Msgs]),
+ io:format("Expecting msgs: ~p~n", [Msgs]),
receive
{_Dir, _Node} = Msg ->
- ?t:format("received ~p~n", [Msg]),
+ io:format("received ~p~n", [Msg]),
case lists:member(Msg, Msgs) of
true -> receive_mn_msgs(lists:delete(Msg, Msgs));
- false -> ?t:fail({unexpected_message, Msg,
+ false -> ct:fail({unexpected_message, Msg,
expected_messages, Msgs})
end;
{Dir, Node, Info} ->
Msg = {Dir, Node, lists:sort(Info)},
- ?t:format("received ~p~n", [Msg]),
+ io:format("received ~p~n", [Msg]),
case lists:member(Msg, Msgs) of
true -> receive_mn_msgs(lists:delete(Msg, Msgs));
- false -> ?t:fail({unexpected_message, Msg,
+ false -> ct:fail({unexpected_message, Msg,
expected_messages, Msgs})
end;
Msg ->
- ?t:format("received ~p~n", [Msg]),
- ?t:fail({unexpected_message, Msg,
+ io:format("received ~p~n", [Msg]),
+ ct:fail({unexpected_message, Msg,
expected_messages, Msgs})
end.
-monitor_nodes_cleanup(doc) ->
- [];
-monitor_nodes_cleanup(suite) ->
- [];
monitor_nodes_cleanup(Config) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line Me = self(),
- ?line No = monitor_nodes_all_comb(true),
- ?line Inf = spawn(fun () ->
- monitor_nodes_all_comb(true),
- Me ! {mons_set, self()},
- receive after infinity -> ok end
- end),
- ?line TO = spawn(fun () ->
- monitor_nodes_all_comb(true),
- Me ! {mons_set, self()},
- receive after 500 -> ok end
- end),
- ?line receive {mons_set, Inf} -> ok end,
- ?line receive {mons_set, TO} -> ok end,
- ?line MNLen = length(MonNodeState) + No*3,
- ?line MNLen = length(monitor_node_state()),
- ?line MonInf = erlang:monitor(process, Inf),
- ?line MonTO = erlang:monitor(process, TO),
- ?line exit(Inf, bang),
- ?line No = monitor_nodes_all_comb(false),
- ?line receive {'DOWN', MonInf, process, Inf, bang} -> ok end,
- ?line receive {'DOWN', MonTO, process, TO, normal} -> ok end,
- ?line MonNodeState = monitor_node_state(),
- ?line no_msgs(),
- ?line ok.
-
-monitor_nodes_many(doc) ->
- [];
-monitor_nodes_many(suite) ->
- [];
+ MonNodeState = monitor_node_state(),
+ Me = self(),
+ No = monitor_nodes_all_comb(true),
+ Inf = spawn(fun () ->
+ monitor_nodes_all_comb(true),
+ Me ! {mons_set, self()},
+ receive after infinity -> ok end
+ end),
+ TO = spawn(fun () ->
+ monitor_nodes_all_comb(true),
+ Me ! {mons_set, self()},
+ receive after 500 -> ok end
+ end),
+ receive {mons_set, Inf} -> ok end,
+ receive {mons_set, TO} -> ok end,
+ MNLen = length(MonNodeState) + No*3,
+ MNLen = length(monitor_node_state()),
+ MonInf = erlang:monitor(process, Inf),
+ MonTO = erlang:monitor(process, TO),
+ exit(Inf, bang),
+ No = monitor_nodes_all_comb(false),
+ receive {'DOWN', MonInf, process, Inf, bang} -> ok end,
+ receive {'DOWN', MonTO, process, TO, normal} -> ok end,
+ MonNodeState = monitor_node_state(),
+ no_msgs(),
+ ok.
+
monitor_nodes_many(Config) when is_list(Config) ->
- ?line MonNodeState = monitor_node_state(),
- ?line [Name] = get_nodenames(1, monitor_nodes_many),
+ MonNodeState = monitor_node_state(),
+ [Name] = get_nodenames(1, monitor_nodes_many),
%% We want to perform more than 2^16 net_kernel:monitor_nodes
%% since this will wrap an internal counter
- ?line No = (1 bsl 16) + 17,
- ?line repeat(fun () -> ok = net_kernel:monitor_nodes(true) end, No),
- ?line No = length(monitor_node_state()) - length(MonNodeState),
- ?line {ok, Node} = start_node(Name),
- ?line repeat(fun () -> receive {nodeup, Node} -> ok end end, No),
- ?line stop_node(Node),
- ?line repeat(fun () -> receive {nodedown, Node} -> ok end end, No),
- ?line ok = net_kernel:monitor_nodes(false),
- ?line no_msgs(10),
- ?line MonNodeState = monitor_node_state(),
- ?line ok.
+ No = (1 bsl 16) + 17,
+ repeat(fun () -> ok = net_kernel:monitor_nodes(true) end, No),
+ No = length(monitor_node_state()) - length(MonNodeState),
+ {ok, Node} = start_node(Name),
+ repeat(fun () -> receive {nodeup, Node} -> ok end end, No),
+ stop_node(Node),
+ repeat(fun () -> receive {nodedown, Node} -> ok end end, No),
+ ok = net_kernel:monitor_nodes(false),
+ no_msgs(10),
+ MonNodeState = monitor_node_state(),
+ ok.
%% Misc. functions
@@ -1196,59 +1147,45 @@ monitor_node_state() ->
check_no_nodedown_nodeup(TimeOut) ->
- ?line receive
- {nodeup, _, _} = Msg -> ?line ?t:fail({unexpected_nodeup, Msg});
- {nodeup, _} = Msg -> ?line ?t:fail({unexpected_nodeup, Msg});
- {nodedown, _, _} = Msg -> ?line ?t:fail({unexpected_nodedown, Msg});
- {nodedown, _} = Msg -> ?line ?t:fail({unexpected_nodedown, Msg})
- after TimeOut ->
- ok
- end.
+ receive
+ {nodeup, _, _} = Msg -> ct:fail({unexpected_nodeup, Msg});
+ {nodeup, _} = Msg -> ct:fail({unexpected_nodeup, Msg});
+ {nodedown, _, _} = Msg -> ct:fail({unexpected_nodedown, Msg});
+ {nodedown, _} = Msg -> ct:fail({unexpected_nodedown, Msg})
+ after TimeOut ->
+ ok
+ end.
print_my_messages() ->
- ?line {messages, Messages} = process_info(self(), messages),
- ?line ?t:format("Messages: ~p~n", [Messages]),
- ?line ok.
+ {messages, Messages} = process_info(self(), messages),
+ io:format("Messages: ~p~n", [Messages]),
+ ok.
sleep(T) -> receive after T * 1000 -> ok end.
start_node(Name, Param, this) ->
NewParam = Param ++ " -pa " ++ filename:dirname(code:which(?MODULE)),
- ?t:start_node(Name, peer, [{args, NewParam}, {erl, [this]}]);
+ test_server:start_node(Name, peer, [{args, NewParam}, {erl, [this]}]);
start_node(Name, Param, "this") ->
NewParam = Param ++ " -pa " ++ filename:dirname(code:which(?MODULE)),
- ?t:start_node(Name, peer, [{args, NewParam}, {erl, [this]}]);
+ test_server:start_node(Name, peer, [{args, NewParam}, {erl, [this]}]);
start_node(Name, Param, Rel) when is_atom(Rel) ->
NewParam = Param ++ " -pa " ++ filename:dirname(code:which(?MODULE)),
- ?t:start_node(Name, peer, [{args, NewParam}, {erl, [{release, atom_to_list(Rel)}]}]);
+ test_server:start_node(Name, peer, [{args, NewParam}, {erl, [{release, atom_to_list(Rel)}]}]);
start_node(Name, Param, Rel) when is_list(Rel) ->
NewParam = Param ++ " -pa " ++ filename:dirname(code:which(?MODULE)),
- ?t:start_node(Name, peer, [{args, NewParam}, {erl, [{release, Rel}]}]).
+ test_server:start_node(Name, peer, [{args, NewParam}, {erl, [{release, Rel}]}]).
start_node(Name, Param) ->
NewParam = Param ++ " -pa " ++ filename:dirname(code:which(?MODULE)),
- ?t:start_node(Name, slave, [{args, NewParam}]).
-% M = list_to_atom(from($@, atom_to_list(node()))),
-% slave:start_link(M, Name, Param).
+ test_server:start_node(Name, slave, [{args, NewParam}]).
start_node(Name) ->
start_node(Name, "").
stop_node(Node) ->
- ?t:stop_node(Node).
-% erlang:monitor_node(Node, true),
-% rpc:cast(Node, init, stop, []),
-% receive
-% {nodedown, Node} ->
-% ok
-% after 10000 ->
-% test_server:fail({stop_node, Node})
-% end.
-
-% from(H, [H | T]) -> T;
-% from(H, [_ | T]) -> from(H, T);
-% from(H, []) -> [].
+ test_server:stop_node(Node).
get_nodenames(N, T) ->
get_nodenames(N, T, []).
diff --git a/lib/kernel/test/erl_distribution_wb_SUITE.erl b/lib/kernel/test/erl_distribution_wb_SUITE.erl
index c107e92fae..6a23ad0d11 100644
--- a/lib/kernel/test/erl_distribution_wb_SUITE.erl
+++ b/lib/kernel/test/erl_distribution_wb_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(erl_distribution_wb_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/inet.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -71,7 +71,7 @@
-define(i16(X1,X0),
(?u16(X1,X0) -
- (if (X1) > 127 -> 16#10000; true -> 0 end))).
+ (if (X1) > 127 -> 16#10000; true -> 0 end))).
-define(u16(X1,X0),
(((X1) bsl 8) bor (X0))).
@@ -79,7 +79,9 @@
-define(u32(X3,X2,X1,X0),
(((X3) bsl 24) bor ((X2) bsl 16) bor ((X1) bsl 8) bor (X0))).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[whitebox, switch_options, missing_compulsory_dflags].
@@ -101,39 +103,33 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(1)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-switch_options(doc) ->
- ["Tests switching of options for the tcp port, as this is done"
- " when the distribution port is to be shortcut into the emulator."
- " Maybe this should be in the inet test suite, but only the distribution"
- " does such horrible things..."];
+ Config.
+
+end_per_testcase(_Func, _Config) ->
+ ok.
+
+%% Tests switching of options for the tcp port, as this is done
+%% when the distribution port is to be shortcut into the emulator.
+%% Maybe this should be in the inet test suite, but only the distribution
+%% does such horrible things...
switch_options(Config) when is_list(Config) ->
ok = test_switch_active(),
ok = test_switch_active_partial() ,
ok = test_switch_active_and_packet(),
ok.
-
-whitebox(doc) ->
- ["Whitebox testing of distribution handshakes. Tests both BC with R5 and "
- "the md5 version. Note that after R6B, this should be revised to "
- "remove BC code."];
+
+%% Whitebox testing of distribution handshakes.
whitebox(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(?MODULE,""),
- ?line Cookie = erlang:get_cookie(),
- ?line {_,Host} = split(node()),
- ?line ok = pending_up_md5(Node, join(ccc,Host), Cookie),
- ?line ok = simultaneous_md5(Node, join('A',Host), Cookie),
- ?line ok = simultaneous_md5(Node, join(zzzzzzzzzzzzzz,Host), Cookie),
- ?line stop_node(Node),
+ {ok, Node} = start_node(?MODULE,""),
+ Cookie = erlang:get_cookie(),
+ {_,Host} = split(node()),
+ ok = pending_up_md5(Node, join(ccc,Host), Cookie),
+ ok = simultaneous_md5(Node, join('A',Host), Cookie),
+ ok = simultaneous_md5(Node, join(zzzzzzzzzzzzzz,Host), Cookie),
+ stop_node(Node),
ok.
-
+
%%
%% The actual tests
%%
@@ -143,56 +139,56 @@ whitebox(Config) when is_list(Config) ->
%%
test_switch_active() ->
- ?line {Client, Server} = socket_pair(0, 4),
- ?line ok = write_packets_32(Client, 1, 5),
+ {Client, Server} = socket_pair(0, 4),
+ ok = write_packets_32(Client, 1, 5),
receive after 2000 -> ok end,
- ?line ok = read_packets(Server, 1, 1),
+ ok = read_packets(Server, 1, 1),
receive after 2000 -> ok end,
- ?line ok = read_packets(Server, 2, 2),
- ?line inet:setopts(Server, [{active, true}]),
- ?line ok = receive_packets(Server, 3, 5),
+ ok = read_packets(Server, 2, 2),
+ inet:setopts(Server, [{active, true}]),
+ ok = receive_packets(Server, 3, 5),
close_pair({Client, Server}),
ok.
-
+
test_switch_active_partial() ->
- ?line {Client, Server} = socket_pair(0, 4),
- ?line ok = write_packets_32(Client, 1, 2),
- ?line ok = gen_tcp:send(Client,[?int32(4), [0,0,0]]),
+ {Client, Server} = socket_pair(0, 4),
+ ok = write_packets_32(Client, 1, 2),
+ ok = gen_tcp:send(Client,[?int32(4), [0,0,0]]),
receive after 2000 -> ok end,
- ?line ok = read_packets(Server, 1, 1),
+ ok = read_packets(Server, 1, 1),
receive after 2000 -> ok end,
- ?line ok = read_packets(Server, 2, 2),
- ?line inet:setopts(Server, [{active, true}]),
- ?line ok = gen_tcp:send(Client,[3]),
- ?line ok = write_packets_32(Client, 4, 5),
- ?line ok = receive_packets(Server, 3, 5),
+ ok = read_packets(Server, 2, 2),
+ inet:setopts(Server, [{active, true}]),
+ ok = gen_tcp:send(Client,[3]),
+ ok = write_packets_32(Client, 4, 5),
+ ok = receive_packets(Server, 3, 5),
close_pair({Client, Server}),
ok.
-
+
do_test_switch_active_and_packet(SendBefore, SendAfter) ->
- ?line {Client, Server} = socket_pair(0, 2),
- ?line ok = write_packets_16(Client, 1, 2),
- ?line ok = gen_tcp:send(Client,SendBefore),
+ {Client, Server} = socket_pair(0, 2),
+ ok = write_packets_16(Client, 1, 2),
+ ok = gen_tcp:send(Client,SendBefore),
receive after 2000 -> ok end,
- ?line ok = read_packets(Server, 1, 1),
+ ok = read_packets(Server, 1, 1),
receive after 2000 -> ok end,
- ?line ok = read_packets(Server, 2, 2),
- ?line inet:setopts(Server, [{packet,4}, {active, true}]),
- ?line ok = gen_tcp:send(Client,SendAfter),
- ?line ok = write_packets_32(Client, 4, 5),
- ?line ok = receive_packets(Server, 3, 5),
+ ok = read_packets(Server, 2, 2),
+ inet:setopts(Server, [{packet,4}, {active, true}]),
+ ok = gen_tcp:send(Client,SendAfter),
+ ok = write_packets_32(Client, 4, 5),
+ ok = receive_packets(Server, 3, 5),
close_pair({Client, Server}),
ok.
test_switch_active_and_packet() ->
- ?line ok = do_test_switch_active_and_packet([0],[0,0,4,0,0,0,3]),
- ?line ok = do_test_switch_active_and_packet([0,0],[0,4,0,0,0,3]),
- ?line ok = do_test_switch_active_and_packet([0,0,0],[4,0,0,0,3]),
- ?line ok = do_test_switch_active_and_packet([0,0,0,4],[0,0,0,3]),
- ?line ok = do_test_switch_active_and_packet([0,0,0,4,0],[0,0,3]),
- ?line ok = do_test_switch_active_and_packet([0,0,0,4,0,0],[0,3]),
- ?line ok = do_test_switch_active_and_packet([0,0,0,4,0,0,0],[3]),
- ?line ok = do_test_switch_active_and_packet([0,0,0,4,0,0,0,3],[]),
+ ok = do_test_switch_active_and_packet([0],[0,0,4,0,0,0,3]),
+ ok = do_test_switch_active_and_packet([0,0],[0,4,0,0,0,3]),
+ ok = do_test_switch_active_and_packet([0,0,0],[4,0,0,0,3]),
+ ok = do_test_switch_active_and_packet([0,0,0,4],[0,0,0,3]),
+ ok = do_test_switch_active_and_packet([0,0,0,4,0],[0,0,3]),
+ ok = do_test_switch_active_and_packet([0,0,0,4,0,0],[0,3]),
+ ok = do_test_switch_active_and_packet([0,0,0,4,0,0,0],[3]),
+ ok = do_test_switch_active_and_packet([0,0,0,4,0,0,0,3],[]),
ok.
@@ -200,181 +196,180 @@ test_switch_active_and_packet() ->
%% Handshake tests
%%
pending_up_md5(Node,OurName,Cookie) ->
- ?line {NA,NB} = split(Node),
- ?line {port,PortNo,_} = erl_epmd:port_please(NA,NB),
- ?line {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
- [{active,false},
- {packet,2}]),
- ?line send_name(SocketA,OurName,5),
- ?line ok = recv_status(SocketA),
- ?line {hidden,Node,5,HisChallengeA} = recv_challenge(SocketA), % See 1)
- ?line OurChallengeA = gen_challenge(),
- ?line OurDigestA = gen_digest(HisChallengeA, Cookie),
- ?line send_challenge_reply(SocketA, OurChallengeA, OurDigestA),
- ?line ok = recv_challenge_ack(SocketA, OurChallengeA, Cookie),
- %%%
- %%% OK, one connection is up, now lets be nasty and try another up:
- %%%
- %%% But wait for a while, the other node might not have done setnode
- %%% just yet...
- ?line receive after 1000 -> ok end,
- ?line {ok, SocketB} = gen_tcp:connect(atom_to_list(NB),PortNo,
- [{active,false},
- {packet,2}]),
- ?line send_name(SocketB,OurName,5),
- ?line alive = recv_status(SocketB),
- ?line send_status(SocketB, true),
- ?line gen_tcp:close(SocketA),
- ?line {hidden,Node,5,HisChallengeB} = recv_challenge(SocketB), % See 1)
- ?line OurChallengeB = gen_challenge(),
- ?line OurDigestB = gen_digest(HisChallengeB, Cookie),
- ?line send_challenge_reply(SocketB, OurChallengeB, OurDigestB),
- ?line ok = recv_challenge_ack(SocketB, OurChallengeB, Cookie),
- %%%
- %%% Well, are we happy?
- %%%
-
- ?line inet:setopts(SocketB, [{active, false},
- {packet, 4}]),
- ?line gen_tcp:send(SocketB,build_rex_message('',OurName)),
- ?line {Header, Message} = recv_message(SocketB),
- ?line io:format("Received header ~p, data ~p.~n",
+ {NA,NB} = split(Node),
+ {port,PortNo,_} = erl_epmd:port_please(NA,NB),
+ {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
+ [{active,false},
+ {packet,2}]),
+ send_name(SocketA,OurName,5),
+ ok = recv_status(SocketA),
+ {hidden,Node,5,HisChallengeA} = recv_challenge(SocketA), % See 1)
+ OurChallengeA = gen_challenge(),
+ OurDigestA = gen_digest(HisChallengeA, Cookie),
+ send_challenge_reply(SocketA, OurChallengeA, OurDigestA),
+ ok = recv_challenge_ack(SocketA, OurChallengeA, Cookie),
+%%%
+%%% OK, one connection is up, now lets be nasty and try another up:
+%%%
+%%% But wait for a while, the other node might not have done setnode
+%%% just yet...
+ receive after 1000 -> ok end,
+ {ok, SocketB} = gen_tcp:connect(atom_to_list(NB),PortNo,
+ [{active,false},
+ {packet,2}]),
+ send_name(SocketB,OurName,5),
+ alive = recv_status(SocketB),
+ send_status(SocketB, true),
+ gen_tcp:close(SocketA),
+ {hidden,Node,5,HisChallengeB} = recv_challenge(SocketB), % See 1)
+ OurChallengeB = gen_challenge(),
+ OurDigestB = gen_digest(HisChallengeB, Cookie),
+ send_challenge_reply(SocketB, OurChallengeB, OurDigestB),
+ ok = recv_challenge_ack(SocketB, OurChallengeB, Cookie),
+%%%
+%%% Well, are we happy?
+%%%
+
+ inet:setopts(SocketB, [{active, false},
+ {packet, 4}]),
+ gen_tcp:send(SocketB,build_rex_message('',OurName)),
+ {Header, Message} = recv_message(SocketB),
+ io:format("Received header ~p, data ~p.~n",
[Header, Message]),
- ?line gen_tcp:close(SocketB),
+ gen_tcp:close(SocketB),
ok.
simultaneous_md5(Node, OurName, Cookie) when OurName < Node ->
- ?line pong = net_adm:ping(Node),
- ?line LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
+ pong = net_adm:ping(Node),
+ LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
{ok, Socket} ->
Socket;
Else ->
exit(Else)
end,
- ?line EpmdSocket = register(OurName, LSocket, 1, 5),
- ?line {NA, NB} = split(Node),
- ?line rpc:cast(Node, net_adm, ping, [OurName]),
- ?line receive after 1000 -> ok end,
- ?line {port, PortNo, _} = erl_epmd:port_please(NA,NB),
- ?line {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
- [{active,false},
- {packet,2}]),
- ?line send_name(SocketA,OurName,5),
+ EpmdSocket = register(OurName, LSocket, 1, 5),
+ {NA, NB} = split(Node),
+ rpc:cast(Node, net_adm, ping, [OurName]),
+ receive after 1000 -> ok end,
+ {port, PortNo, _} = erl_epmd:port_please(NA,NB),
+ {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
+ [{active,false},
+ {packet,2}]),
+ send_name(SocketA,OurName,5),
%% We are still not marked up on the other side, as our first message
%% is not sent.
- ?line SocketB = case gen_tcp:accept(LSocket) of
+ SocketB = case gen_tcp:accept(LSocket) of
{ok, Socket1} ->
- ?line Socket1;
+ Socket1;
Else2 ->
- ?line exit(Else2)
+ exit(Else2)
end,
- ?line nok = recv_status(SocketA),
- % Now we are expected to close A
- ?line gen_tcp:close(SocketA),
- % But still Socket B will continue
- ?line {normal,Node,5} = recv_name(SocketB), % See 1)
- ?line send_status(SocketB, ok_simultaneous),
- ?line MyChallengeB = gen_challenge(),
- ?line send_challenge(SocketB, OurName, MyChallengeB,5),
- ?line HisChallengeB = recv_challenge_reply(SocketB, MyChallengeB, Cookie),
- ?line DigestB = gen_digest(HisChallengeB,Cookie),
- ?line send_challenge_ack(SocketB, DigestB),
- ?line inet:setopts(SocketB, [{active, false},
- {packet, 4}]),
- % This should be the ping message.
- ?line {Header, Message} = recv_message(SocketB),
- ?line io:format("Received header ~p, data ~p.~n",
+ nok = recv_status(SocketA),
+ %% Now we are expected to close A
+ gen_tcp:close(SocketA),
+ %% But still Socket B will continue
+ {normal,Node,5} = recv_name(SocketB), % See 1)
+ send_status(SocketB, ok_simultaneous),
+ MyChallengeB = gen_challenge(),
+ send_challenge(SocketB, OurName, MyChallengeB,5),
+ HisChallengeB = recv_challenge_reply(SocketB, MyChallengeB, Cookie),
+ DigestB = gen_digest(HisChallengeB,Cookie),
+ send_challenge_ack(SocketB, DigestB),
+ inet:setopts(SocketB, [{active, false},
+ {packet, 4}]),
+ %% This should be the ping message.
+ {Header, Message} = recv_message(SocketB),
+ io:format("Received header ~p, data ~p.~n",
[Header, Message]),
- ?line gen_tcp:close(SocketB),
- ?line gen_tcp:close(LSocket),
- ?line gen_tcp:close(EpmdSocket),
+ gen_tcp:close(SocketB),
+ gen_tcp:close(LSocket),
+ gen_tcp:close(EpmdSocket),
ok;
-
+
simultaneous_md5(Node, OurName, Cookie) when OurName > Node ->
- ?line pong = net_adm:ping(Node),
- ?line LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
- {ok, Socket} ->
- ?line Socket;
- Else ->
- ?line exit(Else)
- end,
- ?line EpmdSocket = register(OurName, LSocket, 1, 5),
- ?line {NA, NB} = split(Node),
- ?line rpc:cast(Node, net_adm, ping, [OurName]),
- ?line receive after 1000 -> ok end,
- ?line {port, PortNo, _} = erl_epmd:port_please(NA,NB),
- ?line {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
- [{active,false},
- {packet,2}]),
- ?line SocketB = case gen_tcp:accept(LSocket) of
+ pong = net_adm:ping(Node),
+ LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of
+ {ok, Socket} ->
+ Socket;
+ Else ->
+ exit(Else)
+ end,
+ EpmdSocket = register(OurName, LSocket, 1, 5),
+ {NA, NB} = split(Node),
+ rpc:cast(Node, net_adm, ping, [OurName]),
+ receive after 1000 -> ok end,
+ {port, PortNo, _} = erl_epmd:port_please(NA,NB),
+ {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
+ [{active,false},
+ {packet,2}]),
+ SocketB = case gen_tcp:accept(LSocket) of
{ok, Socket1} ->
- ?line Socket1;
+ Socket1;
Else2 ->
- ?line exit(Else2)
+ exit(Else2)
end,
- ?line send_name(SocketA,OurName,5),
- ?line ok_simultaneous = recv_status(SocketA),
+ send_name(SocketA,OurName,5),
+ ok_simultaneous = recv_status(SocketA),
%% Socket B should die during this
- ?line case catch begin
- ?line {normal,Node,5} = recv_name(SocketB), % See 1)
- ?line send_status(SocketB, ok_simultaneous),
- ?line MyChallengeB = gen_challenge(),
- ?line send_challenge(SocketB, OurName, MyChallengeB,
- 5),
- ?line HisChallengeB = recv_challenge_reply(
- SocketB,
- MyChallengeB,
- Cookie),
- ?line DigestB = gen_digest(HisChallengeB,Cookie),
- ?line send_challenge_ack(SocketB, DigestB),
- ?line inet:setopts(SocketB, [{active, false},
- {packet, 4}]),
- ?line {HeaderB, MessageB} = recv_message(SocketB),
- ?line io:format("Received header ~p, data ~p.~n",
- [HeaderB, MessageB])
- end of
- {'EXIT', Exitcode} ->
- ?line io:format("Expected exitsignal caught: ~p.~n",
- [Exitcode]);
- Success ->
- ?line io:format("Unexpected success: ~p~n",
- [Success]),
- ?line exit(unexpected_success)
- end,
- ?line gen_tcp:close(SocketB),
+ case catch begin
+ {normal,Node,5} = recv_name(SocketB), % See 1)
+ send_status(SocketB, ok_simultaneous),
+ MyChallengeB = gen_challenge(),
+ send_challenge(SocketB, OurName, MyChallengeB,
+ 5),
+ HisChallengeB = recv_challenge_reply(
+ SocketB,
+ MyChallengeB,
+ Cookie),
+ DigestB = gen_digest(HisChallengeB,Cookie),
+ send_challenge_ack(SocketB, DigestB),
+ inet:setopts(SocketB, [{active, false},
+ {packet, 4}]),
+ {HeaderB, MessageB} = recv_message(SocketB),
+ io:format("Received header ~p, data ~p.~n",
+ [HeaderB, MessageB])
+ end of
+ {'EXIT', Exitcode} ->
+ io:format("Expected exitsignal caught: ~p.~n",
+ [Exitcode]);
+ Success ->
+ io:format("Unexpected success: ~p~n",
+ [Success]),
+ exit(unexpected_success)
+ end,
+ gen_tcp:close(SocketB),
%% But still Socket A will continue
- ?line {hidden,Node,5,HisChallengeA} = recv_challenge(SocketA), % See 1)
- ?line OurChallengeA = gen_challenge(),
- ?line OurDigestA = gen_digest(HisChallengeA, Cookie),
- ?line send_challenge_reply(SocketA, OurChallengeA, OurDigestA),
- ?line ok = recv_challenge_ack(SocketA, OurChallengeA, Cookie),
-
- ?line inet:setopts(SocketA, [{active, false},
- {packet, 4}]),
- ?line gen_tcp:send(SocketA,build_rex_message('',OurName)),
- ?line {Header, Message} = recv_message(SocketA),
- ?line io:format("Received header ~p, data ~p.~n",
+ {hidden,Node,5,HisChallengeA} = recv_challenge(SocketA), % See 1)
+ OurChallengeA = gen_challenge(),
+ OurDigestA = gen_digest(HisChallengeA, Cookie),
+ send_challenge_reply(SocketA, OurChallengeA, OurDigestA),
+ ok = recv_challenge_ack(SocketA, OurChallengeA, Cookie),
+
+ inet:setopts(SocketA, [{active, false},
+ {packet, 4}]),
+ gen_tcp:send(SocketA,build_rex_message('',OurName)),
+ {Header, Message} = recv_message(SocketA),
+ io:format("Received header ~p, data ~p.~n",
[Header, Message]),
- ?line gen_tcp:close(SocketA),
- ?line gen_tcp:close(LSocket),
- ?line gen_tcp:close(EpmdSocket),
+ gen_tcp:close(SocketA),
+ gen_tcp:close(LSocket),
+ gen_tcp:close(EpmdSocket),
ok.
-missing_compulsory_dflags(doc) -> [];
missing_compulsory_dflags(Config) when is_list(Config) ->
- ?line [Name1, Name2] = get_nodenames(2, missing_compulsory_dflags),
- ?line {ok, Node} = start_node(Name1,""),
- ?line {NA,NB} = split(Node),
- ?line {port,PortNo,_} = erl_epmd:port_please(NA,NB),
- ?line {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
- [{active,false},
- {packet,2}]),
- ?line BadNode = list_to_atom(atom_to_list(Name2)++"@"++atom_to_list(NB)),
- ?line send_name(SocketA,BadNode,5,0),
- ?line not_allowed = recv_status(SocketA),
- ?line gen_tcp:close(SocketA),
- ?line stop_node(Node),
- ?line ok.
+ [Name1, Name2] = get_nodenames(2, missing_compulsory_dflags),
+ {ok, Node} = start_node(Name1,""),
+ {NA,NB} = split(Node),
+ {port,PortNo,_} = erl_epmd:port_please(NA,NB),
+ {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo,
+ [{active,false},
+ {packet,2}]),
+ BadNode = list_to_atom(atom_to_list(Name2)++"@"++atom_to_list(NB)),
+ send_name(SocketA,BadNode,5,0),
+ not_allowed = recv_status(SocketA),
+ gen_tcp:close(SocketA),
+ stop_node(Node),
+ ok.
%%
%% Here comes the utilities
@@ -437,7 +432,7 @@ socket_pair(ClientPack, ServerPack) ->
{ok, Server} = gen_tcp:accept(Listen),
gen_tcp:close(Listen),
{Client, Server}.
-
+
close_pair({Client, Server}) ->
gen_tcp:close(Client),
gen_tcp:close(Server),
@@ -454,7 +449,7 @@ close_pair({Client, Server}) ->
gen_challenge() ->
rand:uniform(1000000).
-
+
%% Generate a message digest from Challenge number and Cookie
gen_digest(Challenge, Cookie) when is_integer(Challenge), is_atom(Cookie) ->
C0 = erlang:md5_init(),
@@ -595,15 +590,15 @@ do_register_node(NodeName, TcpPort, VLow, VHigh) ->
Elen = length(Extra),
Len = 1+2+1+1+2+2+2+length(Name)+2+Elen,
gen_tcp:send(Socket, [?int16(Len), $x,
- ?int16(TcpPort),
- $M,
- 0,
- ?int16(VHigh),
- ?int16(VLow),
- ?int16(length(Name)),
- Name,
- ?int16(Elen),
- Extra]),
+ ?int16(TcpPort),
+ $M,
+ 0,
+ ?int16(VHigh),
+ ?int16(VLow),
+ ?int16(length(Name)),
+ Name,
+ ?int16(Elen),
+ Extra]),
case wait_for_reg_reply(Socket, []) of
{error, epmd_close} ->
exit(epmd_broken);
@@ -666,11 +661,11 @@ split(Atom) ->
build_rex_message(Cookie,OurName) ->
[$?,term_to_binary({6,self(),Cookie,rex}),
term_to_binary({'$gen_cast',
- {cast,
- rpc,
- cast,
- [OurName, hello, world, []],
- self()} })].
+ {cast,
+ rpc,
+ cast,
+ [OurName, hello, world, []],
+ self()} })].
%% Receive a distribution message
recv_message(Socket) ->
@@ -698,10 +693,10 @@ join(Name,Host) ->
%% start/stop slave.
start_node(Name, Param) ->
- ?t:start_node(Name, slave, [{args, Param}]).
+ test_server:start_node(Name, slave, [{args, Param}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
get_nodenames(N, T) ->
diff --git a/lib/kernel/test/erl_prim_loader_SUITE.erl b/lib/kernel/test/erl_prim_loader_SUITE.erl
index 0803cf428f..b6417210b9 100644
--- a/lib/kernel/test/erl_prim_loader_SUITE.erl
+++ b/lib/kernel/test/erl_prim_loader_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,31 +20,35 @@
-module(erl_prim_loader_SUITE).
-include_lib("kernel/include/file.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2,end_per_testcase/2,
init_per_group/2,end_per_group/2]).
-export([get_path/1, set_path/1, get_file/1, normalize_and_backslash/1,
inet_existing/1, inet_coming_up/1, inet_disconnects/1,
multiple_slaves/1, file_requests/1,
local_archive/1, remote_archive/1,
- primary_archive/1, virtual_dir_in_archive/1]).
+ primary_archive/1, virtual_dir_in_archive/1,
+ get_modules/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
%%-----------------------------------------------------------------
%% Test suite for erl_prim_loader. (Most code is run during system start/stop.)
%%-----------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,3}}].
all() ->
[get_path, set_path, get_file,
normalize_and_backslash, inet_existing,
inet_coming_up, inet_disconnects, multiple_slaves,
file_requests, local_archive, remote_archive,
- primary_archive, virtual_dir_in_archive].
+ primary_archive, virtual_dir_in_archive,
+ get_modules].
groups() ->
[].
@@ -62,53 +66,102 @@ end_per_group(_GroupName, Config) ->
Config.
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(3)),
- [{watchdog, Dog}|Config].
+init_per_testcase(_Func, Config) ->
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
+end_per_testcase(_Func, _Config) ->
+ ok.
-get_path(doc) -> [];
get_path(Config) when is_list(Config) ->
- ?line case erl_prim_loader:get_path() of
- {ok, Path} when is_list(Path) ->
- ok;
- _ ->
- test_server:fail(get_path)
- end,
+ case erl_prim_loader:get_path() of
+ {ok, Path} when is_list(Path) ->
+ ok;
+ _ ->
+ ct:fail(get_path)
+ end,
ok.
-set_path(doc) -> [];
set_path(Config) when is_list(Config) ->
- ?line {ok, Path} = erl_prim_loader:get_path(),
- ?line ok = erl_prim_loader:set_path(Path),
- ?line {ok, Path} = erl_prim_loader:get_path(),
+ {ok, Path} = erl_prim_loader:get_path(),
+ ok = erl_prim_loader:set_path(Path),
+ {ok, Path} = erl_prim_loader:get_path(),
NewPath = Path ++ ["dummy_dir","/dummy_dir/dummy_dir"],
- ?line ok = erl_prim_loader:set_path(NewPath),
- ?line {ok, NewPath} = erl_prim_loader:get_path(),
+ ok = erl_prim_loader:set_path(NewPath),
+ {ok, NewPath} = erl_prim_loader:get_path(),
- ?line ok = erl_prim_loader:set_path(Path), % Reset path.
- ?line {ok, Path} = erl_prim_loader:get_path(),
+ ok = erl_prim_loader:set_path(Path), % Reset path.
+ {ok, Path} = erl_prim_loader:get_path(),
- ?line {'EXIT',_} = (catch erl_prim_loader:set_path(not_a_list)),
- ?line {ok, Path} = erl_prim_loader:get_path(),
+ {'EXIT',_} = (catch erl_prim_loader:set_path(not_a_list)),
+ {ok, Path} = erl_prim_loader:get_path(),
ok.
-get_file(doc) -> [];
get_file(Config) when is_list(Config) ->
- ?line case erl_prim_loader:get_file("lists" ++ code:objfile_extension()) of
- {ok,Bin,File} when is_binary(Bin), is_list(File) ->
- ok;
- _ ->
- test_server:fail(get_valid_file)
- end,
- ?line error = erl_prim_loader:get_file("duuuuuuummmy_file"),
- ?line error = erl_prim_loader:get_file(duuuuuuummmy_file),
- ?line error = erl_prim_loader:get_file({dummy}),
+ case erl_prim_loader:get_file("lists" ++ code:objfile_extension()) of
+ {ok,Bin,File} when is_binary(Bin), is_list(File) ->
+ ok;
+ _ ->
+ ct:fail(get_valid_file)
+ end,
+ error = erl_prim_loader:get_file("duuuuuuummmy_file"),
+ error = erl_prim_loader:get_file(duuuuuuummmy_file),
+ error = erl_prim_loader:get_file({dummy}),
+ ok.
+
+get_modules(Config) ->
+ case test_server:is_cover() of
+ false -> do_get_modules(Config);
+ true -> {skip,"Cover"}
+ end.
+
+do_get_modules(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ NotADir = atom_to_list(?FUNCTION_NAME) ++ "_not_a_dir",
+ ok = file:write_file(filename:join(PrivDir, NotADir), <<>>),
+ ok = file:set_cwd(PrivDir),
+
+ MsGood = lists:sort([lists,gen_server,gb_trees,code_server]),
+ Ms = [certainly_not_existing|MsGood],
+ SuccExp = [begin
+ F = code:which(M),
+ {ok,Code} = file:read_file(F),
+ {M,{F,erlang:md5(Code)}}
+ end || M <- MsGood],
+ FailExp = [{certainly_not_existing,enoent}],
+
+ io:format("SuccExp = ~p\n", [SuccExp]),
+ io:format("FailExp = ~p\n", [FailExp]),
+
+ Path = code:get_path(),
+ Process = fun(_, F, Code) -> {ok,{F,erlang:md5(Code)}} end,
+ {ok,{SuccExp,FailExp}} = get_modules_sorted(Ms, Process, Path),
+
+ %% Test that an 'enotdir' error can be handled.
+ {ok,{SuccExp,FailExp}} = get_modules_sorted(Ms, Process, [NotADir|Path]),
+
+ Name = inet_get_modules,
+ {ok, Node, BootPid} = complete_start_node(Name),
+ ThisDir = filename:dirname(code:which(?MODULE)),
+ true = rpc:call(Node, code, add_patha, [ThisDir]),
+ _ = rpc:call(Node, code, ensure_loaded, [?MODULE]),
+ {ok,{InetSucc,FailExp}} = rpc:call(Node, erl_prim_loader,
+ get_modules, [Ms,Process,Path]),
+ SuccExp = lists:sort(InetSucc),
+
+ stop_node(Node),
+ unlink(BootPid),
+ exit(BootPid, kill),
+
ok.
+get_modules_sorted(Ms, Process, Path) ->
+ case erl_prim_loader:get_modules(Ms, Process, Path) of
+ {ok,{Succ,FailExp}} ->
+ {ok,{lists:sort(Succ),lists:sort(FailExp)}};
+ Other ->
+ Other
+ end.
+
normalize_and_backslash(Config) ->
%% Test OTP-11170
case os:type() of
@@ -118,7 +171,7 @@ normalize_and_backslash(Config) ->
test_normalize_and_backslash(Config)
end.
test_normalize_and_backslash(Config) ->
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
Dir = filename:join(PrivDir,"\\"),
File = filename:join(Dir,"file-OTP-11170"),
ok = file:make_dir(Dir),
@@ -129,41 +182,27 @@ test_normalize_and_backslash(Config) ->
ok = file:del_dir(Dir),
ok.
-inet_existing(doc) -> ["Start a node using the 'inet' loading method, ",
- "from an already started boot server."];
+%% Start a node using the 'inet' loading method,
+%% from an already started boot server.
inet_existing(Config) when is_list(Config) ->
Name = erl_prim_test_inet_existing,
- Host = host(),
- Cookie = atom_to_list(erlang:get_cookie()),
- IpStr = ip_str(Host),
- LFlag = get_loader_flag(os:type()),
- Args = LFlag ++ " -hosts " ++ IpStr ++
- " -setcookie " ++ Cookie,
- {ok, BootPid} = erl_boot_server:start_link([Host]),
- {ok, Node} = start_node(Name, Args),
+ BootPid = start_boot_server(),
+ Node = start_node_using_inet(Name),
{ok,[["inet"]]} = rpc:call(Node, init, get_argument, [loader]),
stop_node(Node),
unlink(BootPid),
exit(BootPid, kill),
ok.
-inet_coming_up(doc) -> ["Start a node using the 'inet' loading method, ",
- "but start the boot server afterwards."];
+%% Start a node using the 'inet' loading method,
+%% but start the boot server afterwards.
inet_coming_up(Config) when is_list(Config) ->
Name = erl_prim_test_inet_coming_up,
- Cookie = atom_to_list(erlang:get_cookie()),
- Host = host(),
- IpStr = ip_str(Host),
- LFlag = get_loader_flag(os:type()),
- Args = LFlag ++
- " -hosts " ++ IpStr ++
- " -setcookie " ++ Cookie,
- {ok, Node} = start_node(Name, Args, [{wait, false}]),
+ Node = start_node_using_inet(Name, [{wait,false}]),
%% Wait a while, then start boot server, and wait for node to start.
- test_server:sleep(test_server:seconds(6)),
- io:format("erl_boot_server:start_link([~p]).", [Host]),
- {ok, BootPid} = erl_boot_server:start_link([Host]),
+ ct:sleep({seconds,6}),
+ BootPid = start_boot_server(),
wait_really_started(Node, 25),
%% Check loader argument, then cleanup.
@@ -174,41 +213,36 @@ inet_coming_up(Config) when is_list(Config) ->
ok.
wait_really_started(Node, 0) ->
- test_server:fail({not_booted,Node});
+ ct:fail({not_booted,Node});
wait_really_started(Node, N) ->
case rpc:call(Node, init, get_status, []) of
{started, _} ->
ok;
_ ->
- test_server:sleep(1000),
+ ct:sleep(1000),
wait_really_started(Node, N - 1)
end.
-inet_disconnects(doc) -> ["Start a node using the 'inet' loading method, ",
- "then lose the connection."];
+%% Start a node using the 'inet' loading method,
+%% then lose the connection.
inet_disconnects(Config) when is_list(Config) ->
case test_server:is_native(erl_boot_server) of
true ->
{skip,"erl_boot_server is native"};
false ->
- ?line Name = erl_prim_test_inet_disconnects,
- ?line Host = host(),
- ?line Cookie = atom_to_list(erlang:get_cookie()),
- ?line IpStr = ip_str(Host),
- ?line LFlag = get_loader_flag(os:type()),
- ?line Args = LFlag ++ " -hosts " ++ IpStr ++
- " -setcookie " ++ Cookie,
-
- ?line {ok, BootPid} = erl_boot_server:start([Host]),
+ Name = erl_prim_test_inet_disconnects,
+
+ BootPid = start_boot_server(),
+ unlink(BootPid),
Self = self(),
%% This process shuts down the boot server during loading.
- ?line Stopper = spawn_link(fun() -> stop_boot(BootPid, Self) end),
- ?line receive
- {Stopper,ready} -> ok
- end,
+ Stopper = spawn_link(fun() -> stop_boot(BootPid, Self) end),
+ receive
+ {Stopper,ready} -> ok
+ end,
%% Let the loading begin...
- ?line {ok, Node} = start_node(Name, Args, [{wait, false}]),
+ Node = start_node_using_inet(Name, [{wait,false}]),
%% When the stopper is ready, the slave node should be
%% looking for a boot server again.
@@ -216,18 +250,18 @@ inet_disconnects(Config) when is_list(Config) ->
{Stopper,ok} ->
ok;
{Stopper,{error,Reason}} ->
- ?line ?t:fail(Reason)
+ ct:fail(Reason)
after 60000 ->
- ?line ?t:fail(stopper_died)
+ ct:fail(stopper_died)
end,
%% Start new boot server to see that loading is continued.
- ?line {ok, BootPid2} = erl_boot_server:start_link([Host]),
- ?line wait_really_started(Node, 25),
- ?line {ok,[["inet"]]} = rpc:call(Node, init, get_argument, [loader]),
- ?line stop_node(Node),
- ?line unlink(BootPid2),
- ?line exit(BootPid2, kill),
+ BootPid2 = start_boot_server(),
+ wait_really_started(Node, 25),
+ {ok,[["inet"]]} = rpc:call(Node, init, get_argument, [loader]),
+ stop_node(Node),
+ unlink(BootPid2),
+ exit(BootPid2, kill),
ok
end.
@@ -256,81 +290,72 @@ get_calls(Count, Pid) ->
{error,{trace_msg_timeout,Count}}
end.
-multiple_slaves(doc) ->
- ["Start nodes in parallell, all using the 'inet' loading method, ",
- "verify that the boot server manages"];
+%% Start nodes in parallel, all using the 'inet' loading method;
+%% verify that the boot server manages.
multiple_slaves(Config) when is_list(Config) ->
- case os:type() of
- {ose,_} ->
- {comment, "OSE: multiple nodes not supported"};
- _ ->
- ?line Name = erl_prim_test_multiple_slaves,
- ?line Host = host(),
- ?line Cookie = atom_to_list(erlang:get_cookie()),
- ?line IpStr = ip_str(Host),
- ?line LFlag = get_loader_flag(os:type()),
- ?line Args = LFlag ++ " -hosts " ++ IpStr ++
- " -setcookie " ++ Cookie,
-
- NoOfNodes = 10, % no of slave nodes to be started
-
- NamesAndNodes =
- lists:map(fun(N) ->
- NameN = atom_to_list(Name) ++
- integer_to_list(N),
- NodeN = NameN ++ "@" ++ Host,
- {list_to_atom(NameN),list_to_atom(NodeN)}
- end, lists:seq(1, NoOfNodes)),
-
- ?line Nodes = start_multiple_nodes(NamesAndNodes, Args, []),
-
- %% "queue up" the nodes to wait for the boot server to respond
- %% (note: test_server supervises each node start by accept()
- %% on a socket, the timeout value for the accept has to be quite
- %% long for this test to work).
- ?line test_server:sleep(test_server:seconds(5)),
- %% start the code loading circus!
- ?line {ok,BootPid} = erl_boot_server:start_link([Host]),
- %% give the nodes a chance to boot up before attempting to stop them
- ?line test_server:sleep(test_server:seconds(10)),
-
- ?line wait_and_shutdown(lists:reverse(Nodes), 30),
-
- ?line unlink(BootPid),
- ?line exit(BootPid, kill),
- ok
- end.
+ Name = erl_prim_test_multiple_slaves,
+ Host = host(),
+ IpStr = ip_str(Host),
+ Args = " -loader inet -hosts " ++ IpStr,
+
+ NoOfNodes = 10, % no of slave nodes to be started
+
+ NamesAndNodes =
+ lists:map(fun(N) ->
+ NameN = atom_to_list(Name) ++
+ integer_to_list(N),
+ NodeN = NameN ++ "@" ++ Host,
+ {list_to_atom(NameN),list_to_atom(NodeN)}
+ end, lists:seq(1, NoOfNodes)),
+
+ Nodes = start_multiple_nodes(NamesAndNodes, Args, []),
+
+ %% "queue up" the nodes to wait for the boot server to respond
+ %% (note: test_server supervises each node start by accept()
+ %% on a socket, the timeout value for the accept has to be quite
+ %% long for this test to work).
+ ct:sleep({seconds,5}),
+ %% start the code loading circus!
+ BootPid = start_boot_server(),
+ %% give the nodes a chance to boot up before attempting to stop them
+ ct:sleep({seconds,10}),
+
+ wait_and_shutdown(lists:reverse(Nodes), 30),
+
+ unlink(BootPid),
+ exit(BootPid, kill),
+ ok.
start_multiple_nodes([{Name,Node} | NNs], Args, Started) ->
- ?line {ok,Node} = start_node(Name, Args, [{wait, false}]),
+ {ok,Node} = start_node(Name, Args, [{wait, false}]),
start_multiple_nodes(NNs, Args, [Node | Started]);
start_multiple_nodes([], _, Nodes) ->
Nodes.
wait_and_shutdown([Node | Nodes], Tries) ->
- ?line wait_really_started(Node, Tries),
- ?line {ok,[["inet"]]} = rpc:call(Node, init, get_argument, [loader]),
- ?line stop_node(Node),
+ wait_really_started(Node, Tries),
+ {ok,[["inet"]]} = rpc:call(Node, init, get_argument, [loader]),
+ stop_node(Node),
wait_and_shutdown(Nodes, Tries);
wait_and_shutdown([], _) ->
ok.
-file_requests(doc) -> ["Start a node using the 'inet' loading method, ",
- "verify that the boot server responds to file requests."];
+%% Start a node using the 'inet' loading method,
+%% verify that the boot server responds to file requests.
file_requests(Config) when is_list(Config) ->
- ?line {ok, Node, BootPid} = complete_start_node(erl_prim_test_file_req),
+ {ok, Node, BootPid} = complete_start_node(erl_prim_test_file_req),
%% compare with results from file server calls (the
%% boot server uses the same file sys and cwd)
{ok,Files} = file:list_dir("."),
io:format("Files: ~p~n",[Files]),
- ?line {ok,Files} = rpc:call(Node, erl_prim_loader, list_dir, ["."]),
+ {ok,Files} = rpc:call(Node, erl_prim_loader, list_dir, ["."]),
{ok,Info} = file:read_file_info(code:which(test_server)),
- ?line {ok,Info} = rpc:call(Node, erl_prim_loader, read_file_info,
- [code:which(test_server)]),
+ {ok,Info} = rpc:call(Node, erl_prim_loader, read_file_info,
+ [code:which(test_server)]),
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
Dir = filename:join(PrivDir,?MODULE_STRING++"_file_requests"),
ok = file:make_dir(Dir),
Alias = filename:join(Dir,"symlink"),
@@ -354,163 +379,140 @@ file_requests(Config) when is_list(Config) ->
end,
{ok,Cwd} = file:get_cwd(),
- ?line {ok,Cwd} = rpc:call(Node, erl_prim_loader, get_cwd, []),
+ {ok,Cwd} = rpc:call(Node, erl_prim_loader, get_cwd, []),
case file:get_cwd("C:") of
{error,enotsup} ->
ok;
{ok,DCwd} ->
- ?line {ok,DCwd} = rpc:call(Node, erl_prim_loader, get_cwd, ["C:"])
+ {ok,DCwd} = rpc:call(Node, erl_prim_loader, get_cwd, ["C:"])
end,
- ?line stop_node(Node),
- ?line unlink(BootPid),
- ?line exit(BootPid, kill),
+ stop_node(Node),
+ unlink(BootPid),
+ exit(BootPid, kill),
ok.
-complete_start_node(Name) ->
- ?line Host = host(),
- ?line Cookie = atom_to_list(erlang:get_cookie()),
- ?line IpStr = ip_str(Host),
- ?line LFlag = get_loader_flag(os:type()),
- ?line Args = LFlag ++ " -hosts " ++ IpStr ++
- " -setcookie " ++ Cookie,
-
- ?line {ok,BootPid} = erl_boot_server:start_link([Host]),
-
- ?line {ok,Node} = start_node(Name, Args),
- ?line wait_really_started(Node, 25),
- {ok, Node, BootPid}.
-
-local_archive(suite) ->
- [];
-local_archive(doc) ->
- ["Read files from local archive."];
+%% Read files from local archive.
local_archive(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KernelDir = filename:basename(code:lib_dir(kernel)),
Archive = filename:join([PrivDir, KernelDir ++ init:archive_extension()]),
file:delete(Archive),
- ?line {ok, Archive} = create_archive(Archive, [KernelDir]),
+ {ok, Archive} = create_archive(Archive, [KernelDir]),
Node = node(),
BeamName = "inet.beam",
- ?line ok = test_archive(Node, Archive, KernelDir, BeamName),
+ ok = test_archive(Node, Archive, KernelDir, BeamName),
%% Cleanup
- ?line ok = rpc:call(Node, erl_prim_loader, release_archives, []),
- ?line ok = file:delete(Archive),
+ ok = rpc:call(Node, erl_prim_loader, purge_archive_cache, []),
+ ok = file:delete(Archive),
ok.
-remote_archive(suite) ->
- {req, [{local_slave_nodes, 1}, {time, 10}]};
-remote_archive(doc) ->
- ["Read files from remote archive."];
+%% Read files from remote archive.
remote_archive(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KernelDir = filename:basename(code:lib_dir(kernel)),
Archive = filename:join([PrivDir, KernelDir ++ init:archive_extension()]),
file:delete(Archive),
- ?line {ok, Archive} = create_archive(Archive, [KernelDir]),
+ {ok, Archive} = create_archive(Archive, [KernelDir]),
- ?line {ok, Node, BootPid} = complete_start_node(remote_archive),
+ {ok, Node, BootPid} = complete_start_node(remote_archive),
BeamName = "inet.beam",
- ?line ok = test_archive(Node, Archive, KernelDir, BeamName),
+ ok = test_archive(Node, Archive, KernelDir, BeamName),
%% Cleanup
- ?line stop_node(Node),
- ?line unlink(BootPid),
- ?line exit(BootPid, kill),
+ stop_node(Node),
+ unlink(BootPid),
+ exit(BootPid, kill),
ok.
-primary_archive(suite) ->
- {req, [{local_slave_nodes, 1}, {time, 10}]};
-primary_archive(doc) ->
- ["Read files from primary archive."];
+%% Read files from primary archive.
primary_archive(Config) when is_list(Config) ->
%% Copy the orig files to priv_dir
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Archive = filename:join([PrivDir, "primary_archive.zip"]),
file:delete(Archive),
- DataDir = ?config(data_dir, Config),
- ?line {ok, _} = zip:create(Archive, ["primary_archive"],
- [{compress, []}, {cwd, DataDir}]),
- ?line {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]),
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok, _} = zip:create(Archive, ["primary_archive"],
+ [{compress, []}, {cwd, DataDir}]),
+ {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]),
TopDir = filename:join([PrivDir, "primary_archive"]),
%% Compile the code
DictDir = "primary_archive_dict-1.0",
DummyDir = "primary_archive_dummy",
- ?line ok = compile_app(TopDir, DictDir),
- ?line ok = compile_app(TopDir, DummyDir),
-
+ ok = compile_app(TopDir, DictDir),
+ ok = compile_app(TopDir, DummyDir),
+
%% Create the archive
{ok, TopFiles} = file:list_dir(TopDir),
- ?line {ok, {_, ArchiveBin}} = zip:create(Archive, TopFiles,
- [memory, {compress, []}, {cwd, TopDir}]),
-
+ {ok, {_, ArchiveBin}} = zip:create(Archive, TopFiles,
+ [memory, {compress, []}, {cwd, TopDir}]),
+
%% Use temporary node to simplify cleanup
- ?line Cookie = atom_to_list(erlang:get_cookie()),
- ?line Args = " -setcookie " ++ Cookie,
- ?line {ok,Node} = start_node(primary_archive, Args),
- ?line wait_really_started(Node, 25),
- ?line {_,_,_} = rpc:call(Node, erlang, date, []),
+ Cookie = atom_to_list(erlang:get_cookie()),
+ Args = " -setcookie " ++ Cookie,
+ {ok,Node} = start_node(primary_archive, Args),
+ wait_really_started(Node, 25),
+ {_,_,_} = rpc:call(Node, erlang, date, []),
%% Set primary archive
ExpectedEbins = [Archive, DictDir ++ "/ebin", DummyDir ++ "/ebin"],
io:format("ExpectedEbins: ~p\n", [ExpectedEbins]),
- ?line {ok, FileInfo} = prim_file:read_file_info(Archive),
- ?line {ok, Ebins} = rpc:call(Node, erl_prim_loader, set_primary_archive,
- [Archive, ArchiveBin, FileInfo,
- fun escript:parse_file/1]),
- ?line ExpectedEbins = lists:sort(Ebins), % assert
-
- ?line {ok, TopFiles2} = rpc:call(Node, erl_prim_loader, list_dir, [Archive]),
- ?line [DictDir, DummyDir] = lists:sort(TopFiles2),
+ {ok, FileInfo} = prim_file:read_file_info(Archive),
+ {ok, Ebins} = rpc:call(Node, erl_prim_loader, set_primary_archive,
+ [Archive, ArchiveBin, FileInfo,
+ fun escript:parse_file/1]),
+ ExpectedEbins = lists:sort(Ebins), % assert
+
+ {ok, TopFiles2} = rpc:call(Node, erl_prim_loader, list_dir, [Archive]),
+ [DictDir, DummyDir] = lists:sort(TopFiles2),
BeamName = "primary_archive_dict_app.beam",
- ?line ok = test_archive(Node, Archive, DictDir, BeamName),
-
+ ok = test_archive(Node, Archive, DictDir, BeamName),
+
%% Cleanup
- ?line {ok, []} = rpc:call(Node, erl_prim_loader, set_primary_archive,
- [undefined, undefined, undefined,
- fun escript:parse_file/1]),
- ?line stop_node(Node),
- ?line ok = file:delete(Archive),
+ {ok, []} = rpc:call(Node, erl_prim_loader, set_primary_archive,
+ [undefined, undefined, undefined,
+ fun escript:parse_file/1]),
+ stop_node(Node),
+ ok = file:delete(Archive),
ok.
test_archive(Node, TopDir, AppDir, BeamName) ->
%% List dir
io:format("test_archive: ~p\n", [rpc:call(Node, erl_prim_loader, list_dir, [TopDir])]),
- ?line {ok, TopFiles} = rpc:call(Node, erl_prim_loader, list_dir, [TopDir]),
- ?line true = lists:member(AppDir, TopFiles),
+ {ok, TopFiles} = rpc:call(Node, erl_prim_loader, list_dir, [TopDir]),
+ true = lists:member(AppDir, TopFiles),
AbsAppDir = TopDir ++ "/" ++ AppDir,
- ?line {ok, AppFiles} = rpc:call(Node, erl_prim_loader, list_dir, [AbsAppDir]),
- ?line true = lists:member("ebin", AppFiles),
+ {ok, AppFiles} = rpc:call(Node, erl_prim_loader, list_dir, [AbsAppDir]),
+ true = lists:member("ebin", AppFiles),
Ebin = AbsAppDir ++ "/ebin",
- ?line {ok, EbinFiles} = rpc:call(Node, erl_prim_loader, list_dir, [Ebin]),
+ {ok, EbinFiles} = rpc:call(Node, erl_prim_loader, list_dir, [Ebin]),
Beam = Ebin ++ "/" ++ BeamName,
- ?line true = lists:member(BeamName, EbinFiles),
- ?line error = rpc:call(Node, erl_prim_loader, list_dir, [TopDir ++ "/no_such_file"]),
- ?line error = rpc:call(Node, erl_prim_loader, list_dir, [TopDir ++ "/ebin/no_such_file"]),
-
+ true = lists:member(BeamName, EbinFiles),
+ error = rpc:call(Node, erl_prim_loader, list_dir, [TopDir ++ "/no_such_file"]),
+ error = rpc:call(Node, erl_prim_loader, list_dir, [TopDir ++ "/ebin/no_such_file"]),
+
%% File info
- ?line {ok, #file_info{type = directory}} =
+ {ok, #file_info{type = directory}} =
rpc:call(Node, erl_prim_loader, read_file_info, [TopDir]),
- ?line {ok, #file_info{type = directory}} =
+ {ok, #file_info{type = directory}} =
rpc:call(Node, erl_prim_loader, read_file_info, [Ebin]),
- ?line {ok, #file_info{type = regular} = FI} =
+ {ok, #file_info{type = regular} = FI} =
rpc:call(Node, erl_prim_loader, read_file_info, [Beam]),
- ?line error = rpc:call(Node, erl_prim_loader, read_file_info, [TopDir ++ "/no_such_file"]),
- ?line error = rpc:call(Node, erl_prim_loader, read_file_info, [TopDir ++ "/ebin/no_such_file"]),
-
+ error = rpc:call(Node, erl_prim_loader, read_file_info, [TopDir ++ "/no_such_file"]),
+ error = rpc:call(Node, erl_prim_loader, read_file_info, [TopDir ++ "/ebin/no_such_file"]),
+
%% Get file
- ?line {ok, Bin, Beam} = rpc:call(Node, erl_prim_loader, get_file, [Beam]),
- ?line if
- FI#file_info.size =:= byte_size(Bin) -> ok;
- true -> exit({FI#file_info.size, byte_size(Bin)})
- end,
- ?line error = rpc:call(Node, erl_prim_loader, get_file, ["/no_such_file"]),
- ?line error = rpc:call(Node, erl_prim_loader, get_file, ["/ebin/no_such_file"]),
+ {ok, Bin, Beam} = rpc:call(Node, erl_prim_loader, get_file, [Beam]),
+ if
+ FI#file_info.size =:= byte_size(Bin) -> ok;
+ true -> exit({FI#file_info.size, byte_size(Bin)})
+ end,
+ error = rpc:call(Node, erl_prim_loader, get_file, ["/no_such_file"]),
+ error = rpc:call(Node, erl_prim_loader, get_file, ["/ebin/no_such_file"]),
ok.
create_archive(Archive, AppDirs) ->
@@ -520,12 +522,9 @@ create_archive(Archive, AppDirs) ->
zip:create(Archive, AppDirs, Opts).
-virtual_dir_in_archive(suite) ->
- [];
-virtual_dir_in_archive(doc) ->
- ["Read virtual directories from archive."];
+%% Read virtual directories from archive.
virtual_dir_in_archive(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Data = <<"A little piece of data.">>,
ArchiveBase = "archive_with_virtual_dirs",
Archive = filename:join([PrivDir, ArchiveBase ++ init:archive_extension()]),
@@ -534,32 +533,62 @@ virtual_dir_in_archive(Config) when is_list(Config) ->
FileInArchive = filename:join([ArchiveBase, EbinBase, FileBase]),
BinFiles = [{FileInArchive, Data}],
Opts = [{compress, []}],
- ?line file:delete(Archive),
+ file:delete(Archive),
io:format("zip:create(~p,\n\t~p,\n\t~p).\n", [Archive, BinFiles, Opts]),
- ?line {ok, Archive} = zip:create(Archive, BinFiles, Opts),
+ {ok, Archive} = zip:create(Archive, BinFiles, Opts),
%% Verify that there is no directories
- ?line {ok, BinFiles} = zip:unzip(Archive, [memory]),
+ {ok, BinFiles} = zip:unzip(Archive, [memory]),
FullPath = filename:join([Archive, FileInArchive]),
- ?line {ok, _} = erl_prim_loader:read_file_info(FullPath),
+ {ok, _} = erl_prim_loader:read_file_info(FullPath),
%% Read one virtual dir
EbinDir = filename:dirname(FullPath),
- ?line {ok, _} = erl_prim_loader:read_file_info(EbinDir),
- ?line {ok, [FileBase]} = erl_prim_loader:list_dir(EbinDir),
+ {ok, _} = erl_prim_loader:read_file_info(EbinDir),
+ {ok, [FileBase]} = erl_prim_loader:list_dir(EbinDir),
%% Read another virtual dir
AppDir = filename:dirname(EbinDir),
- ?line {ok, _} = erl_prim_loader:read_file_info(AppDir),
- ?line {ok, [EbinBase]} = erl_prim_loader:list_dir(AppDir),
-
+ {ok, _} = erl_prim_loader:read_file_info(AppDir),
+ {ok, [EbinBase]} = erl_prim_loader:list_dir(AppDir),
+
%% Cleanup
- ?line ok = erl_prim_loader:release_archives(),
- ?line ok = file:delete(Archive),
+ ok = erl_prim_loader:purge_archive_cache(),
+ ok = file:delete(Archive),
ok.
-%% Misc. functions
+%%%
+%%% Helper functions.
+%%%
+
+complete_start_node(Name) ->
+ BootPid = start_boot_server(),
+ Node = start_node_using_inet(Name),
+ wait_really_started(Node, 25),
+ {ok, Node, BootPid}.
+
+start_boot_server() ->
+ %% Many linux systems define:
+ %% 127.0.0.1 localhost
+ %% 127.0.1.1 somehostname
+ %% Therefore, to allow the tests to work on those kind of systems,
+ %% also include "localhost" in the list of allowed hosts.
+
+ Hosts = [host(),ip_str("localhost")],
+ {ok,BootPid} = erl_boot_server:start_link(Hosts),
+ BootPid.
+
+start_node_using_inet(Name) ->
+ start_node_using_inet(Name, []).
+
+start_node_using_inet(Name, Opts) ->
+ Host = host(),
+ IpStr = ip_str(Host),
+ Args = " -loader inet -hosts " ++ IpStr,
+ {ok,Node} = start_node(Name, Args, Opts),
+ Node.
+
ip_str({A, B, C, D}) ->
lists:concat([A, ".", B, ".", C, ".", D]);
@@ -585,14 +614,11 @@ host() ->
stop_node(Node) ->
test_server:stop_node(Node).
-get_loader_flag(_) ->
- " -loader inet ".
-
compile_app(TopDir, AppName) ->
AppDir = filename:join([TopDir, AppName]),
SrcDir = filename:join([AppDir, "src"]),
OutDir = filename:join([AppDir, "ebin"]),
- ?line {ok, Files} = file:list_dir(SrcDir),
+ {ok, Files} = file:list_dir(SrcDir),
compile_files(Files, SrcDir, OutDir).
compile_files([File | Files], SrcDir, OutDir) ->
diff --git a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict.erl b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict.erl
index 7d8167f575..57aeb7fd64 100644
--- a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict.erl
+++ b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_app.erl b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_app.erl
index bf66179e00..78e4f61579 100644
--- a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_app.erl
+++ b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_sup.erl b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_sup.erl
index e57d8c5a00..e63e958daf 100644
--- a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_sup.erl
+++ b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dict-1.0/src/primary_archive_dict_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy.erl b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy.erl
index e1c7655331..4adbec3c81 100644
--- a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy.erl
+++ b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_app.erl b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_app.erl
index e9db18c47e..e90776ce73 100644
--- a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_app.erl
+++ b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_sup.erl b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_sup.erl
index 7bab86be68..145de8167f 100644
--- a/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_sup.erl
+++ b/lib/kernel/test/erl_prim_loader_SUITE_data/primary_archive/primary_archive_dummy/src/primary_archive_dummy_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/error_handler_SUITE.erl b/lib/kernel/test/error_handler_SUITE.erl
index d93ec643ce..c6d457f314 100644
--- a/lib/kernel/test/error_handler_SUITE.erl
+++ b/lib/kernel/test/error_handler_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,9 @@
%% Callback from error_handler.
-export(['$handle_undefined_function'/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[undefined_function_handler].
diff --git a/lib/kernel/test/error_logger_SUITE.erl b/lib/kernel/test/error_logger_SUITE.erl
index f1988b68d9..b6e7551741 100644
--- a/lib/kernel/test/error_logger_SUITE.erl
+++ b/lib/kernel/test/error_logger_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(error_logger_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%-----------------------------------------------------------------
%% We don't have to test the normal behaviour here, i.e. the tty
@@ -40,7 +40,9 @@
terminate/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[error_report, info_report, error, info, emulator, tty,
@@ -64,159 +66,149 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
-error_report(suite) -> [];
-error_report(doc) -> [];
error_report(Config) when is_list(Config) ->
- ?line error_logger:add_report_handler(?MODULE, self()),
+ error_logger:add_report_handler(?MODULE, self()),
Rep1 = [{tag1,"data1"},{tag2,data2},{tag3,3}],
Rep2 = [testing,"testing",{tag1,"tag1"}],
Rep3 = "This is a string !",
Rep4 = {this,is,a,tuple},
- ?line ok = error_logger:error_report(Rep1),
+ ok = error_logger:error_report(Rep1),
reported(error_report, std_error, Rep1),
- ?line ok = error_logger:error_report(Rep2),
+ ok = error_logger:error_report(Rep2),
reported(error_report, std_error, Rep2),
- ?line ok = error_logger:error_report(Rep3),
+ ok = error_logger:error_report(Rep3),
reported(error_report, std_error, Rep3),
- ?line ok = error_logger:error_report(Rep4),
+ ok = error_logger:error_report(Rep4),
reported(error_report, std_error, Rep4),
- ?line ok = error_logger:error_report(test_type, Rep1),
+ ok = error_logger:error_report(test_type, Rep1),
reported(error_report, test_type, Rep1),
- ?line ok = error_logger:error_report(test_type, Rep2),
+ ok = error_logger:error_report(test_type, Rep2),
reported(error_report, test_type, Rep2),
- ?line ok = error_logger:error_report(test_type, Rep3),
+ ok = error_logger:error_report(test_type, Rep3),
reported(error_report, test_type, Rep3),
- ?line ok = error_logger:error_report(test_type, Rep4),
+ ok = error_logger:error_report(test_type, Rep4),
reported(error_report, test_type, Rep4),
- ?line ok = error_logger:error_report("test_type", Rep1),
+ ok = error_logger:error_report("test_type", Rep1),
reported(error_report, "test_type", Rep1),
- ?line ok = error_logger:error_report({test,type}, Rep2),
+ ok = error_logger:error_report({test,type}, Rep2),
reported(error_report, {test,type}, Rep2),
- ?line ok = error_logger:error_report([test,type], Rep3),
+ ok = error_logger:error_report([test,type], Rep3),
reported(error_report, [test,type], Rep3),
- ?line ok = error_logger:error_report(1, Rep4),
+ ok = error_logger:error_report(1, Rep4),
reported(error_report, 1, Rep4),
- ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ my_yes = error_logger:delete_report_handler(?MODULE),
ok.
%%-----------------------------------------------------------------
-info_report(suite) -> [];
-info_report(doc) -> [];
info_report(Config) when is_list(Config) ->
- ?line error_logger:add_report_handler(?MODULE, self()),
+ error_logger:add_report_handler(?MODULE, self()),
Rep1 = [{tag1,"data1"},{tag2,data2},{tag3,3}],
Rep2 = [testing,"testing",{tag1,"tag1"}],
Rep3 = "This is a string !",
Rep4 = {this,is,a,tuple},
- ?line ok = error_logger:info_report(Rep1),
+ ok = error_logger:info_report(Rep1),
reported(info_report, std_info, Rep1),
- ?line ok = error_logger:info_report(Rep2),
+ ok = error_logger:info_report(Rep2),
reported(info_report, std_info, Rep2),
- ?line ok = error_logger:info_report(Rep3),
+ ok = error_logger:info_report(Rep3),
reported(info_report, std_info, Rep3),
- ?line ok = error_logger:info_report(Rep4),
+ ok = error_logger:info_report(Rep4),
reported(info_report, std_info, Rep4),
- ?line ok = error_logger:info_report(test_type, Rep1),
+ ok = error_logger:info_report(test_type, Rep1),
reported(info_report, test_type, Rep1),
- ?line ok = error_logger:info_report(test_type, Rep2),
+ ok = error_logger:info_report(test_type, Rep2),
reported(info_report, test_type, Rep2),
- ?line ok = error_logger:info_report(test_type, Rep3),
+ ok = error_logger:info_report(test_type, Rep3),
reported(info_report, test_type, Rep3),
- ?line ok = error_logger:info_report(test_type, Rep4),
+ ok = error_logger:info_report(test_type, Rep4),
reported(info_report, test_type, Rep4),
- ?line ok = error_logger:info_report("test_type", Rep1),
+ ok = error_logger:info_report("test_type", Rep1),
reported(info_report, "test_type", Rep1),
- ?line ok = error_logger:info_report({test,type}, Rep2),
+ ok = error_logger:info_report({test,type}, Rep2),
reported(info_report, {test,type}, Rep2),
- ?line ok = error_logger:info_report([test,type], Rep3),
+ ok = error_logger:info_report([test,type], Rep3),
reported(info_report, [test,type], Rep3),
- ?line ok = error_logger:info_report(1, Rep4),
+ ok = error_logger:info_report(1, Rep4),
reported(info_report, 1, Rep4),
- ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ my_yes = error_logger:delete_report_handler(?MODULE),
ok.
%%-----------------------------------------------------------------
-error(suite) -> [];
-error(doc) -> [];
error(Config) when is_list(Config) ->
- ?line error_logger:add_report_handler(?MODULE, self()),
+ error_logger:add_report_handler(?MODULE, self()),
Msg1 = "This is a plain text string~n",
Msg2 = "This is a text with arguments ~p~n",
Arg2 = "This is the argument",
Msg3 = {erroneous,msg},
- ?line ok = error_logger:error_msg(Msg1),
+ ok = error_logger:error_msg(Msg1),
reported(error, Msg1, []),
- ?line ok = error_logger:error_msg(Msg2, Arg2),
+ ok = error_logger:error_msg(Msg2, Arg2),
reported(error, Msg2, Arg2),
- ?line ok = error_logger:error_msg(Msg3),
+ ok = error_logger:error_msg(Msg3),
reported(error, Msg3, []),
- ?line ok = error_logger:error_msg(Msg1, []),
+ ok = error_logger:error_msg(Msg1, []),
reported(error, Msg1, []),
- ?line ok = error_logger:error_msg(Msg2, Arg2),
+ ok = error_logger:error_msg(Msg2, Arg2),
reported(error, Msg2, Arg2),
- ?line ok = error_logger:error_msg(Msg3, []),
+ ok = error_logger:error_msg(Msg3, []),
reported(error, Msg3, []),
- ?line ok = error_logger:format(Msg1, []),
+ ok = error_logger:format(Msg1, []),
reported(error, Msg1, []),
- ?line ok = error_logger:format(Msg2, Arg2),
+ ok = error_logger:format(Msg2, Arg2),
reported(error, Msg2, Arg2),
- ?line ok = error_logger:format(Msg3, []),
+ ok = error_logger:format(Msg3, []),
reported(error, Msg3, []),
- ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ my_yes = error_logger:delete_report_handler(?MODULE),
ok.
%%-----------------------------------------------------------------
-info(suite) -> [];
-info(doc) -> [];
info(Config) when is_list(Config) ->
- ?line error_logger:add_report_handler(?MODULE, self()),
+ error_logger:add_report_handler(?MODULE, self()),
Msg1 = "This is a plain text string~n",
Msg2 = "This is a text with arguments ~p~n",
Arg2 = "This is the argument",
Msg3 = {erroneous,msg},
- ?line ok = error_logger:info_msg(Msg1),
+ ok = error_logger:info_msg(Msg1),
reported(info_msg, Msg1, []),
- ?line ok = error_logger:info_msg(Msg2, Arg2),
+ ok = error_logger:info_msg(Msg2, Arg2),
reported(info_msg, Msg2, Arg2),
- ?line ok = error_logger:info_msg(Msg3),
+ ok = error_logger:info_msg(Msg3),
reported(info_msg, Msg3, []),
- ?line ok = error_logger:info_msg(Msg1, []),
+ ok = error_logger:info_msg(Msg1, []),
reported(info_msg, Msg1, []),
- ?line ok = error_logger:info_msg(Msg2, Arg2),
+ ok = error_logger:info_msg(Msg2, Arg2),
reported(info_msg, Msg2, Arg2),
- ?line ok = error_logger:info_msg(Msg3, []),
+ ok = error_logger:info_msg(Msg3, []),
reported(info_msg, Msg3, []),
- ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ my_yes = error_logger:delete_report_handler(?MODULE),
ok.
%%-----------------------------------------------------------------
-emulator(suite) -> [];
-emulator(doc) -> [];
emulator(Config) when is_list(Config) ->
- ?line error_logger:add_report_handler(?MODULE, self()),
+ error_logger:add_report_handler(?MODULE, self()),
Msg = "Error in process ~p on node ~p with exit value:~n~p~n",
Error = {badmatch,4},
Stack = [{module, function, 2, []}],
Pid = spawn(?MODULE, generate_error, [Error, Stack]),
reported(error, Msg, [Pid, node(), {Error, Stack}]),
- ?line my_yes = error_logger:delete_report_handler(?MODULE),
+ my_yes = error_logger:delete_report_handler(?MODULE),
ok.
generate_error(Error, Stack) ->
@@ -227,52 +219,44 @@ generate_error(Error, Stack) ->
%% want to interact with the test run.
%%-----------------------------------------------------------------
-tty(suite) -> [];
-tty(doc) -> [];
tty(Config) when is_list(Config) ->
- ?line {'EXIT', _Reason} = (catch error_logger:tty(dummy)),
+ {'EXIT', _Reason} = (catch error_logger:tty(dummy)),
ok.
%%-----------------------------------------------------------------
%% If where already exists a logfile we skip this test case !!
%%-----------------------------------------------------------------
-logfile(suite) -> [];
-logfile(doc) -> [];
logfile(Config) when is_list(Config) ->
- ?line case error_logger:logfile(filename) of
- {error, no_log_file} -> % Ok, we continues.
- do_logfile();
- _ ->
- ok
- end.
+ case error_logger:logfile(filename) of
+ {error, no_log_file} -> % Ok, we continues.
+ do_logfile();
+ _ ->
+ ok
+ end.
do_logfile() ->
- ?line {error, _} = error_logger:logfile(close),
- ?line {error, _} = error_logger:logfile({open,{error}}),
- ?line ok = error_logger:logfile({open, "dummy_logfile.log"}),
- ?line "dummy_logfile.log" = error_logger:logfile(filename),
- ?line ok = error_logger:logfile(close),
- ?line {'EXIT',_} = (catch error_logger:logfile(dummy)),
+ {error, _} = error_logger:logfile(close),
+ {error, _} = error_logger:logfile({open,{error}}),
+ ok = error_logger:logfile({open, "dummy_logfile.log"}),
+ "dummy_logfile.log" = error_logger:logfile(filename),
+ ok = error_logger:logfile(close),
+ {'EXIT',_} = (catch error_logger:logfile(dummy)),
ok.
%%-----------------------------------------------------------------
-add(suite) -> [];
-add(doc) -> [];
add(Config) when is_list(Config) ->
- ?line {'EXIT',_} = (catch error_logger:add_report_handler("dummy")),
- ?line {'EXIT',_} = error_logger:add_report_handler(non_existing),
- ?line my_error = error_logger:add_report_handler(?MODULE, [error]),
+ {'EXIT',_} = (catch error_logger:add_report_handler("dummy")),
+ {'EXIT',_} = error_logger:add_report_handler(non_existing),
+ my_error = error_logger:add_report_handler(?MODULE, [error]),
ok.
%%-----------------------------------------------------------------
-delete(suite) -> [];
-delete(doc) -> [];
delete(Config) when is_list(Config) ->
- ?line {'EXIT',_} = (catch error_logger:delete_report_handler("dummy")),
- ?line {error,_} = error_logger:delete_report_handler(non_existing),
+ {'EXIT',_} = (catch error_logger:delete_report_handler("dummy")),
+ {error,_} = error_logger:delete_report_handler(non_existing),
ok.
%%-----------------------------------------------------------------
@@ -284,7 +268,7 @@ reported(Tag, Type, Report) ->
test_server:messages_get(),
ok
after 1000 ->
- test_server:fail(no_report_received)
+ ct:fail(no_report_received)
end.
%%-----------------------------------------------------------------
diff --git a/lib/kernel/test/error_logger_warn_SUITE.erl b/lib/kernel/test/error_logger_warn_SUITE.erl
index a3a3b2f8c6..a8087e11f9 100644
--- a/lib/kernel/test/error_logger_warn_SUITE.erl
+++ b/lib/kernel/test/error_logger_warn_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
%% Internal exports.
-export([init/1,handle_event/2,handle_info/2,handle_call/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(EXPECT(Pattern),
(fun() ->
@@ -42,11 +42,10 @@
end
end)()).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[basic, warnings_info, warnings_errors, rb_basic,
@@ -70,69 +69,58 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-basic(doc) ->
- ["Tests basic error logger functionality"];
+%% Tests basic error logger functionality.
basic(Config) when is_list(Config) ->
put(elw_config,Config),
basic().
-warnings_info(doc) ->
- ["Tests mapping warnings to info functionality"];
+%% Tests mapping warnings to info functionality.
warnings_info(Config) when is_list(Config) ->
put(elw_config,Config),
warnings_info().
-warnings_errors(doc) ->
- ["Tests mapping warnings to errors functionality"];
+%% Tests mapping warnings to errors functionality.
warnings_errors(Config) when is_list(Config) ->
put(elw_config,Config),
warnings_errors().
-rb_basic(doc) ->
- ["Tests basic rb functionality"];
+%% Tests basic rb functionality.
rb_basic(Config) when is_list(Config) ->
put(elw_config,Config),
rb_basic().
-rb_warnings_info(doc) ->
- ["Tests warnings as info rb functionality"];
+%% Tests warnings as info rb functionality.
rb_warnings_info(Config) when is_list(Config) ->
put(elw_config,Config),
rb_warnings_info().
-rb_warnings_errors(doc) ->
- ["Tests warnings as errors rb functionality"];
+%% Tests warnings as errors rb functionality.
rb_warnings_errors(Config) when is_list(Config) ->
put(elw_config,Config),
rb_warnings_errors().
-rb_trunc(doc) ->
- ["Tests rb functionality on truncated data"];
+%% Tests rb functionality on truncated data.
rb_trunc(Config) when is_list(Config) ->
put(elw_config,Config),
rb_trunc().
-rb_utc(doc) ->
- ["Tests UTC mapping in rb (-sasl utc_log true)"];
+%% Tests UTC mapping in rb (-sasl utc_log true).
rb_utc(Config) when is_list(Config) ->
put(elw_config,Config),
rb_utc().
-file_utc(doc) ->
- ["Tests UTC mapping in file logger (-stdlib utc_log true)"];
+%% Tests UTC mapping in file logger (-stdlib utc_log true).
file_utc(Config) when is_list(Config) ->
put(elw_config,Config),
file_utc().
-% a small gen_event
+%% a small gen_event
init([Pid]) ->
{ok, Pid}.
@@ -236,7 +224,7 @@ warnings_errors() ->
stop_node(Node),
ok.
-% RB...
+%% RB...
quote(String) ->
case os:type() of
@@ -283,7 +271,7 @@ findstrc(String,File) ->
0
end.
-% Doesn't count empty lines
+%% Doesn't count empty lines
lines(File) ->
length(
string:tokens(
@@ -291,17 +279,17 @@ lines(File) ->
element(2,file:read_file(File))),
"\n")).
-%directories anf filenames
+%% Directories and filenames
ld() ->
Config = get(elw_config),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
filename:absname(PrivDir).
lf() ->
filename:join([ld(),"logfile.txt"]).
rd() ->
Config = get(elw_config),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
LogDir = filename:join(PrivDir,"log"),
file:make_dir(LogDir),
filename:absname(LogDir).
@@ -315,7 +303,7 @@ nice_stop_node(Name) ->
{nodedown,Name} -> ok
end.
-%clean out rd() before each report test in order to get only one file...
+%% Clean out rd() before each report test in order to get only one file...
clean_rd() ->
{ok,L} = file:list_dir(rd()),
lists:foreach(fun(F) ->
@@ -352,10 +340,10 @@ one_rb_findstr(Param,String) ->
rb:stop_log(),
findstr(String,lf()).
-% Tests
+%% Tests
rb_basic() ->
clean_rd(),
- % Behold, the magic parameters to activate rb logging...
+ %% Behold, the magic parameters to activate rb logging...
Node = start_node(nn(),"-boot start_sasl -sasl error_logger_mf_dir "++
quote(rd())++" error_logger_mf_maxbytes 5000 "
"error_logger_mf_maxfiles 5"),
@@ -378,7 +366,7 @@ rb_basic() ->
0 = one_rb_findstr([info_msg],pid_to_list(Self)),
0 = one_rb_findstr([info_report],pid_to_list(Self)),
2 = one_rb_findstr([],pid_to_list(Self)),
- true = (one_rb_findstr([progress],"===") > 4),
+ true = (one_rb_findstr([progress],"===") > 3),
rb:stop(),
application:stop(sasl),
stop_node(Node),
@@ -408,7 +396,7 @@ rb_warnings_info() ->
1 = one_rb_findstr([info_msg],pid_to_list(Self)),
1 = one_rb_findstr([info_report],pid_to_list(Self)),
2 = one_rb_findstr([],pid_to_list(Self)),
- true = (one_rb_findstr([progress],"===") > 4),
+ true = (one_rb_findstr([progress],"===") > 3),
rb:stop(),
application:stop(sasl),
stop_node(Node),
@@ -438,7 +426,7 @@ rb_warnings_errors() ->
0 = one_rb_findstr([info_msg],pid_to_list(Self)),
0 = one_rb_findstr([info_report],pid_to_list(Self)),
2 = one_rb_findstr([],pid_to_list(Self)),
- true = (one_rb_findstr([progress],"===") > 4),
+ true = (one_rb_findstr([progress],"===") > 3),
rb:stop(),
application:stop(sasl),
stop_node(Node),
@@ -471,7 +459,7 @@ rb_trunc() ->
0 = one_rb_findstr([info_msg],pid_to_list(Self)),
0 = one_rb_findstr([info_report],pid_to_list(Self)),
1 = one_rb_findstr([],pid_to_list(Self)),
- true = (one_rb_findstr([progress],"===") > 4),
+ true = (one_rb_findstr([progress],"===") > 3),
rb:stop(),
application:stop(sasl),
stop_node(Node),
@@ -513,9 +501,7 @@ rb_utc() ->
file_utc() ->
file:delete(lf()),
SS="-stdlib utc_log true -kernel error_logger "++ oquote("{file,"++iquote(lf())++"}"),
- %erlang:display(SS),
Node = start_node(nn(),SS),
- %erlang:display(rpc:call(Node,application,get_env,[kernel,error_logger])),
Self = self(),
GL = group_leader(),
fake_gl(Node,error_msg,"~p~n",[Self]),
diff --git a/lib/kernel/test/file_SUITE.erl b/lib/kernel/test/file_SUITE.erl
index 09d9a45197..5f049c6f99 100644
--- a/lib/kernel/test/file_SUITE.erl
+++ b/lib/kernel/test/file_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -51,20 +51,20 @@
pos1/1, pos2/1, pos3/1]).
-export([close/1, consult1/1, path_consult/1, delete/1]).
-export([ eval1/1, path_eval/1, script1/1, path_script/1,
- open1/1,
- old_modes/1, new_modes/1, path_open/1, open_errors/1]).
+ open1/1,
+ old_modes/1, new_modes/1, path_open/1, open_errors/1]).
-export([ file_info_basic_file/1, file_info_basic_directory/1,
- file_info_bad/1, file_info_times/1, file_write_file_info/1]).
+ file_info_bad/1, file_info_times/1, file_write_file_info/1]).
-export([rename/1, access/1, truncate/1, datasync/1, sync/1,
read_write/1, pread_write/1, append/1, exclusive/1]).
-export([ e_delete/1, e_rename/1, e_make_dir/1, e_del_dir/1]).
-export([otp_5814/1, otp_10852/1]).
-export([ read_not_really_compressed/1,
- read_compressed_cooked/1, read_compressed_cooked_binary/1,
- read_cooked_tar_problem/1,
- write_compressed/1, compress_errors/1, catenated_gzips/1,
- compress_async_crash/1]).
+ read_compressed_cooked/1, read_compressed_cooked_binary/1,
+ read_cooked_tar_problem/1,
+ write_compressed/1, compress_errors/1, catenated_gzips/1,
+ compress_async_crash/1]).
-export([ make_link/1, read_link_info_for_non_link/1, symlinks/1]).
@@ -83,7 +83,7 @@
-export([unicode/1]).
-export([altname/1]).
--export([large_file/1, large_write/1]).
+-export([large_file/0, large_file/1, large_write/0, large_write/1]).
-export([read_line_1/1, read_line_2/1, read_line_3/1,read_line_4/1]).
@@ -106,13 +106,15 @@
%% System probe functions that might be handy to check from the shell
-export([disc_free/1, memsize/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-define(THROW_ERROR(RES), throw({fail, ?LINE, RES})).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[unicode, altname, read_write_file, {group, dirs},
@@ -168,16 +170,11 @@ init_per_suite(Config) when is_list(Config) ->
ok ->
[{sasl,started}]
end,
- ok = case os:type() of
- {ose,_} ->
- ok;
- _ ->
- application:start(os_mon)
- end,
+ application:start(os_mon),
case os:type() of
{win32, _} ->
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
HasAccessTime =
case ?FILE_MODULE:read_file_info(Priv) of
{ok, #file_info{atime={_, {0, 0, 0}}}} ->
@@ -199,12 +196,7 @@ end_per_suite(Config) when is_list(Config) ->
ok
end,
- case os:type() of
- {ose,_} ->
- ok;
- _ ->
- application:stop(os_mon)
- end,
+ application:stop(os_mon),
case proplists:get_value(sasl, Config) of
started ->
application:stop(sasl);
@@ -271,73 +263,66 @@ mini_server(Parent) ->
mini_server(Parent)
end.
-standard_io(suite) ->
- [];
-standard_io(doc) ->
- ["Test that standard i/o-servers work with file module"];
+%% Test that standard i/o-servers work with file module.
standard_io(Config) when is_list(Config) ->
%% Really just a smoke test
- ?line Pid = spawn(?MODULE,mini_server,[self()]),
- ?line register(mini_server,Pid),
- ?line ok = file:write(mini_server,<<"hej\n">>),
- ?line receive
- {io_request,_,_,{put_chars,<<"hej\n">>}} ->
- ok
- after 1000 ->
- exit(noreply)
- end,
- ?line {ok,"aaaaa"} = file:read(mini_server,5),
- ?line receive
- {io_request,_,_,{get_chars,'',5}} ->
- ok
- after 1000 ->
- exit(noreply)
- end,
- ?line {ok,"hej\n"} = file:read_line(mini_server),
- ?line receive
- {io_request,_,_,{get_line,''}} ->
- ok
- after 1000 ->
- exit(noreply)
- end,
- ?line OldGL = group_leader(),
- ?line group_leader(Pid,self()),
- ?line ok = file:write(standard_io,<<"hej\n">>),
- ?line group_leader(OldGL,self()),
- ?line receive
- {io_request,_,_,{put_chars,<<"hej\n">>}} ->
- ok
- after 1000 ->
- exit(noreply)
- end,
- ?line group_leader(Pid,self()),
- ?line {ok,"aaaaa"} = file:read(standard_io,5),
- ?line group_leader(OldGL,self()),
- ?line receive
- {io_request,_,_,{get_chars,'',5}} ->
- ok
- after 1000 ->
- exit(noreply)
- end,
- ?line group_leader(Pid,self()),
- ?line {ok,"hej\n"} = file:read_line(standard_io),
- ?line group_leader(OldGL,self()),
- ?line receive
- {io_request,_,_,{get_line,''}} ->
- ok
- after 1000 ->
- exit(noreply)
- end,
+ Pid = spawn(?MODULE,mini_server,[self()]),
+ register(mini_server,Pid),
+ ok = file:write(mini_server,<<"hej\n">>),
+ receive
+ {io_request,_,_,{put_chars,<<"hej\n">>}} ->
+ ok
+ after 1000 ->
+ exit(noreply)
+ end,
+ {ok,"aaaaa"} = file:read(mini_server,5),
+ receive
+ {io_request,_,_,{get_chars,'',5}} ->
+ ok
+ after 1000 ->
+ exit(noreply)
+ end,
+ {ok,"hej\n"} = file:read_line(mini_server),
+ receive
+ {io_request,_,_,{get_line,''}} ->
+ ok
+ after 1000 ->
+ exit(noreply)
+ end,
+ OldGL = group_leader(),
+ group_leader(Pid,self()),
+ ok = file:write(standard_io,<<"hej\n">>),
+ group_leader(OldGL,self()),
+ receive
+ {io_request,_,_,{put_chars,<<"hej\n">>}} ->
+ ok
+ after 1000 ->
+ exit(noreply)
+ end,
+ group_leader(Pid,self()),
+ {ok,"aaaaa"} = file:read(standard_io,5),
+ group_leader(OldGL,self()),
+ receive
+ {io_request,_,_,{get_chars,'',5}} ->
+ ok
+ after 1000 ->
+ exit(noreply)
+ end,
+ group_leader(Pid,self()),
+ {ok,"hej\n"} = file:read_line(standard_io),
+ group_leader(OldGL,self()),
+ receive
+ {io_request,_,_,{get_line,''}} ->
+ ok
+ after 1000 ->
+ exit(noreply)
+ end,
Pid ! die,
receive after 1000 -> ok end.
-old_io_protocol(suite) ->
- [];
-old_io_protocol(doc) ->
- ["Test that the old file IO protocol =< R16B still works"];
+%% Test that the old file IO protocol =< R16B still works.
old_io_protocol(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(5)),
- RootDir = ?config(priv_dir,Config),
+ RootDir = proplists:get_value(priv_dir,Config),
Name = filename:join(RootDir,
atom_to_list(?MODULE)
++"old_io_protocol.fil"),
@@ -350,14 +335,11 @@ old_io_protocol(Config) when is_list(Config) ->
end,
ok = ?FILE_MODULE:close(Fd),
{ok, <<>>} = ?FILE_MODULE:read_file(Name),
- test_server:timetrap_cancel(Dog),
[] = flush(),
ok.
-unicode_mode(suite) -> [];
-unicode_mode(doc) -> [""];
unicode_mode(Config) ->
- Dir = {dir, ?config(priv_dir,Config)},
+ Dir = {dir, proplists:get_value(priv_dir,Config)},
OptVariants = [[Dir],
[Dir, {encoding, utf8}],
[Dir, binary],
@@ -503,105 +485,98 @@ um_filename(Str = [_|_], Dir, Options) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-read_write_file(suite) -> [];
-read_write_file(doc) -> [];
read_write_file(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_read_write_file"),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_read_write_file"),
%% Try writing and reading back some term
- ?line SomeTerm = {"This term",{will,be},[written,$t,$o],1,file,[]},
- ?line ok = ?FILE_MODULE:write_file(Name,term_to_binary(SomeTerm)),
- ?line {ok,Bin1} = ?FILE_MODULE:read_file(Name),
- ?line SomeTerm = binary_to_term(Bin1),
-
+ SomeTerm = {"This term",{will,be},[written,$t,$o],1,file,[]},
+ ok = ?FILE_MODULE:write_file(Name,term_to_binary(SomeTerm)),
+ {ok,Bin1} = ?FILE_MODULE:read_file(Name),
+ SomeTerm = binary_to_term(Bin1),
+
%% Try a "null" term
- ?line NullTerm = [],
- ?line ok = ?FILE_MODULE:write_file(Name,term_to_binary(NullTerm)),
- ?line {ok,Bin2} = ?FILE_MODULE:read_file(Name),
- ?line NullTerm = binary_to_term(Bin2),
+ NullTerm = [],
+ ok = ?FILE_MODULE:write_file(Name,term_to_binary(NullTerm)),
+ {ok,Bin2} = ?FILE_MODULE:read_file(Name),
+ NullTerm = binary_to_term(Bin2),
%% Try some "complicated" types
- ?line BigNum = 123456789012345678901234567890,
- ?line ComplTerm = {self(),make_ref(),BigNum,3.14159},
- ?line ok = ?FILE_MODULE:write_file(Name,term_to_binary(ComplTerm)),
- ?line {ok,Bin3} = ?FILE_MODULE:read_file(Name),
- ?line ComplTerm = binary_to_term(Bin3),
+ BigNum = 123456789012345678901234567890,
+ ComplTerm = {self(),make_ref(),BigNum,3.14159},
+ ok = ?FILE_MODULE:write_file(Name,term_to_binary(ComplTerm)),
+ {ok,Bin3} = ?FILE_MODULE:read_file(Name),
+ ComplTerm = binary_to_term(Bin3),
%% Try reading a nonexistent file
- ?line Name2 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_nonexistent_file"),
- ?line {error, enoent} = ?FILE_MODULE:read_file(Name2),
- ?line {error, enoent} = ?FILE_MODULE:read_file(""),
- ?line {error, enoent} = ?FILE_MODULE:read_file(''),
-
- % Try writing to a bad filename
- ?line {error, enoent} =
+ Name2 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_nonexistent_file"),
+ {error, enoent} = ?FILE_MODULE:read_file(Name2),
+ {error, enoent} = ?FILE_MODULE:read_file(""),
+ {error, enoent} = ?FILE_MODULE:read_file(''),
+
+ %% Try writing to a bad filename
+ {error, enoent} =
?FILE_MODULE:write_file("",term_to_binary(NullTerm)),
- % Try writing something else than a binary
- ?line {error, badarg} = ?FILE_MODULE:write_file(Name,{1,2,3}),
- ?line {error, badarg} = ?FILE_MODULE:write_file(Name,self()),
+ %% Try writing something else than a binary
+ {error, badarg} = ?FILE_MODULE:write_file(Name,{1,2,3}),
+ {error, badarg} = ?FILE_MODULE:write_file(Name,self()),
%% Some non-term binaries
- ?line ok = ?FILE_MODULE:write_file(Name,[]),
- ?line {ok,Bin4} = ?FILE_MODULE:read_file(Name),
- ?line 0 = byte_size(Bin4),
+ ok = ?FILE_MODULE:write_file(Name,[]),
+ {ok,Bin4} = ?FILE_MODULE:read_file(Name),
+ 0 = byte_size(Bin4),
- ?line ok = ?FILE_MODULE:write_file(Name,[Bin1,[],[[Bin2]]]),
- ?line {ok,Bin5} = ?FILE_MODULE:read_file(Name),
- ?line {Bin1,Bin2} = split_binary(Bin5,byte_size(Bin1)),
+ ok = ?FILE_MODULE:write_file(Name,[Bin1,[],[[Bin2]]]),
+ {ok,Bin5} = ?FILE_MODULE:read_file(Name),
+ {Bin1,Bin2} = split_binary(Bin5,byte_size(Bin1)),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-make_del_dir(suite) -> [];
-make_del_dir(doc) -> [];
make_del_dir(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_mk-dir"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line {error, eexist} = ?FILE_MODULE:make_dir(NewDir),
- ?line ok = ?FILE_MODULE:del_dir(NewDir),
- ?line {error, enoent} = ?FILE_MODULE:del_dir(NewDir),
- % Make sure we are not in a directory directly under test_server
- % as that would result in eacces errors when trying to delete '..',
- % because there are processes having that directory as current.
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line {ok,CurrentDir} = file:get_cwd(),
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_mk-dir"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ {error, eexist} = ?FILE_MODULE:make_dir(NewDir),
+ ok = ?FILE_MODULE:del_dir(NewDir),
+ {error, enoent} = ?FILE_MODULE:del_dir(NewDir),
+ %% Make sure we are not in a directory directly under test_server
+ %% as that would result in eacces errors when trying to delete '..',
+ %% because there are processes having that directory as current.
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ {ok,CurrentDir} = file:get_cwd(),
case {os:type(), length(NewDir) >= 260 } of
{{win32,_}, true} ->
io:format("Skip set_cwd for windows path longer than 260 (MAX_PATH)\n", []),
io:format("\nNewDir = ~p\n", [NewDir]);
_ ->
- ?line ok = ?FILE_MODULE:set_cwd(NewDir)
+ ok = ?FILE_MODULE:set_cwd(NewDir)
end,
try
%% Check that we get an error when trying to create...
%% a deep directory
- ?line NewDir2 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_mk-dir-noexist/foo"),
- ?line {error, enoent} = ?FILE_MODULE:make_dir(NewDir2),
+ NewDir2 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_mk-dir-noexist/foo"),
+ {error, enoent} = ?FILE_MODULE:make_dir(NewDir2),
%% a nameless directory
- ?line {error, enoent} = ?FILE_MODULE:make_dir(""),
+ {error, enoent} = ?FILE_MODULE:make_dir(""),
%% a directory with illegal name
- ?line {error, badarg} = ?FILE_MODULE:make_dir({1,2,3}),
-
+ {error, badarg} = ?FILE_MODULE:make_dir({1,2,3}),
+
%% a directory with illegal name, even if it's a (bad) list
- ?line {error, badarg} = ?FILE_MODULE:make_dir([1,2,3,{}]),
-
+ {error, badarg} = ?FILE_MODULE:make_dir([1,2,3,{}]),
+
%% Maybe this isn't an error, exactly, but worth mentioning anyway:
%% ok = ?FILE_MODULE:make_dir([$f,$o,$o,0,$b,$a,$r])),
%% The above line works, and created a directory "./foo"
@@ -609,40 +584,36 @@ make_del_dir(Config) when is_list(Config) ->
%% a directory, but with a name that incorporates the "bar" part of
%% the list, so that [$f,$o,$o,0,$f,$o,$o] wouldn't refer to the same
%% dir. But this would slow it down.
-
+
%% Try deleting some bad directories
%% Deleting the parent directory to the current, sounds dangerous, huh?
%% Don't worry ;-) the parent directory should never be empty, right?
- ?line case ?FILE_MODULE:del_dir('..') of
- {error, eexist} -> ok;
- {error, eacces} -> ok; %OpenBSD
- {error, einval} -> ok %FreeBSD
- end,
- ?line {error, enoent} = ?FILE_MODULE:del_dir(""),
- ?line {error, badarg} = ?FILE_MODULE:del_dir([3,2,1,{}]),
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog)
+ case ?FILE_MODULE:del_dir('..') of
+ {error, eexist} -> ok;
+ {error, eacces} -> ok; %OpenBSD
+ {error, einval} -> ok %FreeBSD
+ end,
+ {error, enoent} = ?FILE_MODULE:del_dir(""),
+ {error, badarg} = ?FILE_MODULE:del_dir([3,2,1,{}]),
+
+ [] = flush()
after
- ?FILE_MODULE:set_cwd(CurrentDir)
+ ?FILE_MODULE:set_cwd(CurrentDir)
end,
ok.
-cur_dir_0(suite) -> [];
-cur_dir_0(doc) -> [];
cur_dir_0(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
%% Find out the current dir, and cd to it ;-)
- ?line {ok,BaseDir} = ?FILE_MODULE:get_cwd(),
- ?line Dir1 = BaseDir ++ "", %% Check that it's a string
- ?line ok = ?FILE_MODULE:set_cwd(Dir1),
+ {ok,BaseDir} = ?FILE_MODULE:get_cwd(),
+ Dir1 = BaseDir ++ "", %% Check that it's a string
+ ok = ?FILE_MODULE:set_cwd(Dir1),
%% Make a new dir, and cd to that
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_curdir"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_curdir"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
case {os:type(), length(NewDir) >= 260} of
{{win32,_}, true} ->
io:format("Skip set_cwd for windows path longer than 260 (MAX_PATH):\n"),
@@ -675,50 +646,44 @@ cur_dir_0(Config) when is_list(Config) ->
{ok,OldDirFiles} = ?FILE_MODULE:list_dir("."),
false = lists:member(UncommonName,OldDirFiles)
end,
-
+
%% Try doing some bad things
- ?line {error, badarg} = ?FILE_MODULE:set_cwd({foo,bar}),
- ?line {error, enoent} = ?FILE_MODULE:set_cwd(""),
- ?line {error, enoent} = ?FILE_MODULE:set_cwd(".......a......"),
- ?line {ok,BaseDir} = ?FILE_MODULE:get_cwd(), %% Still there?
+ {error, badarg} = ?FILE_MODULE:set_cwd({foo,bar}),
+ {error, enoent} = ?FILE_MODULE:set_cwd(""),
+ {error, enoent} = ?FILE_MODULE:set_cwd(".......a......"),
+ {ok,BaseDir} = ?FILE_MODULE:get_cwd(), %% Still there?
%% On Windows, there should only be slashes, no backslashes,
%% in the return value of get_cwd().
%% (The test is harmless on Unix, because filenames usually
%% don't contain backslashes.)
- ?line {ok, BaseDir} = ?FILE_MODULE:get_cwd(),
- ?line false = lists:member($\\, BaseDir),
+ {ok, BaseDir} = ?FILE_MODULE:get_cwd(),
+ false = lists:member($\\, BaseDir),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%% Tests ?FILE_MODULE:get_cwd/1.
-cur_dir_1(suite) -> [];
-cur_dir_1(doc) -> [];
cur_dir_1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
-
- ?line case os:type() of
- {win32, _} ->
- win_cur_dir_1(Config);
- _ ->
- ?line {error, enotsup} = ?FILE_MODULE:get_cwd("d:")
- end,
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ case os:type() of
+ {win32, _} ->
+ win_cur_dir_1(Config);
+ _ ->
+ {error, enotsup} = ?FILE_MODULE:get_cwd("d:")
+ end,
+ [] = flush(),
ok.
-
+
win_cur_dir_1(_Config) ->
- ?line {ok,BaseDir} = ?FILE_MODULE:get_cwd(),
+ {ok,BaseDir} = ?FILE_MODULE:get_cwd(),
%% Get the drive letter from the current directory,
%% and try to get current directory for that drive.
- ?line [Drive,$:|_] = BaseDir,
- ?line {ok,BaseDir} = ?FILE_MODULE:get_cwd([Drive,$:]),
+ [Drive,$:|_] = BaseDir,
+ {ok,BaseDir} = ?FILE_MODULE:get_cwd([Drive,$:]),
io:format("BaseDir = ~s\n", [BaseDir]),
%% Unfortunately, there is no way to move away from the
@@ -733,7 +698,7 @@ win_cur_dir_1(_Config) ->
%%%
list_dir_error(Config) ->
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
NonExisting = filename:join(Priv, "non-existing-dir"),
{error,enoent} = ?FILE_MODULE:list_dir(NonExisting),
ok.
@@ -743,7 +708,7 @@ list_dir_error(Config) ->
%%%
list_dir(Config) ->
- RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
TestDir = filename:join(RootDir, ?MODULE_STRING++"_list_dir"),
?FILE_MODULE:make_dir(TestDir),
list_dir_1(TestDir, 42, []).
@@ -773,7 +738,7 @@ untranslatable_names(Config) ->
untranslatable_names_1(Config) ->
{ok,OldCwd} = file:get_cwd(),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, "untranslatable_names"),
ok = file:make_dir(Dir),
Node = start_node(untranslatable_names, "+fnu"),
@@ -814,7 +779,7 @@ untranslatable_names_error(Config) ->
untranslatable_names_error_1(Config) ->
{ok,OldCwd} = file:get_cwd(),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, "untranslatable_names_error"),
ok = file:make_dir(Dir),
Node = start_node(untranslatable_names, "+fnue"),
@@ -862,7 +827,7 @@ start_node(Name, Args) ->
ct:log("Trying to start ~w@~s~n", [Name,Host]),
case test_server:start_node(Name, peer, [{args,Args}]) of
{error,Reason} ->
- test_server:fail(Reason);
+ ct:fail(Reason);
{ok,Node} ->
ct:log("Node ~p started~n", [Node]),
Node
@@ -873,568 +838,504 @@ start_node(Name, Args) ->
-open1(suite) -> [];
-open1(doc) -> [];
open1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_files"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line Name = filename:join(NewDir, "foo1.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,read_write),
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,read),
- ?line Str = "{a,tuple}.\n",
- ?line io:format(Fd1,Str,[]),
- ?line {ok,0} = ?FILE_MODULE:position(Fd1,bof),
- ?line Str = io:get_line(Fd1,''),
- ?line case io:get_line(Fd2,'') of
- Str -> Str;
- eof -> Str
- end,
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line {ok,0} = ?FILE_MODULE:position(Fd1,bof),
- ?line ok = ?FILE_MODULE:truncate(Fd1),
- ?line eof = io:get_line(Fd1,''),
- ?line ok = ?FILE_MODULE:close(Fd1),
- ?line {ok,Fd3} = ?FILE_MODULE:open(Name,read),
- ?line eof = io:get_line(Fd3,''),
- ?line ok = ?FILE_MODULE:close(Fd3),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_files"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ Name = filename:join(NewDir, "foo1.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,read_write),
+ {ok,Fd2} = ?FILE_MODULE:open(Name,read),
+ Str = "{a,tuple}.\n",
+ io:format(Fd1,Str,[]),
+ {ok,0} = ?FILE_MODULE:position(Fd1,bof),
+ Str = io:get_line(Fd1,''),
+ Str = io:get_line(Fd2,''),
+ ok = ?FILE_MODULE:close(Fd2),
+ {ok,0} = ?FILE_MODULE:position(Fd1,bof),
+ ok = ?FILE_MODULE:truncate(Fd1),
+ eof = io:get_line(Fd1,''),
+ ok = ?FILE_MODULE:close(Fd1),
+ {ok,Fd3} = ?FILE_MODULE:open(Name,read),
+ eof = io:get_line(Fd3,''),
+ ok = ?FILE_MODULE:close(Fd3),
+ [] = flush(),
ok.
%% Tests all open modes.
-old_modes(suite) -> [];
-old_modes(doc) -> [];
old_modes(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_old_open_modes"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line Name1 = filename:join(NewDir, "foo1.fil"),
- ?line Marker = "hello, world",
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_old_open_modes"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ Name1 = filename:join(NewDir, "foo1.fil"),
+ Marker = "hello, world",
%% write
- ?line {ok, Fd1} = ?FILE_MODULE:open(Name1, write),
- ?line ok = io:write(Fd1, Marker),
- ?line ok = io:put_chars(Fd1, ".\n"),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ {ok, Fd1} = ?FILE_MODULE:open(Name1, write),
+ ok = io:write(Fd1, Marker),
+ ok = io:put_chars(Fd1, ".\n"),
+ ok = ?FILE_MODULE:close(Fd1),
%% read
- ?line {ok, Fd2} = ?FILE_MODULE:open(Name1, read),
- ?line {ok, Marker} = io:read(Fd2, prompt),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ {ok, Fd2} = ?FILE_MODULE:open(Name1, read),
+ {ok, Marker} = io:read(Fd2, prompt),
+ ok = ?FILE_MODULE:close(Fd2),
%% read_write
- ?line {ok, Fd3} = ?FILE_MODULE:open(Name1, read_write),
- ?line {ok, Marker} = io:read(Fd3, prompt),
- ?line ok = io:write(Fd3, Marker),
- ?line ok = ?FILE_MODULE:close(Fd3),
+ {ok, Fd3} = ?FILE_MODULE:open(Name1, read_write),
+ {ok, Marker} = io:read(Fd3, prompt),
+ ok = io:write(Fd3, Marker),
+ ok = ?FILE_MODULE:close(Fd3),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-new_modes(suite) -> [];
-new_modes(doc) -> [];
new_modes(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_new_open_modes"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line Name1 = filename:join(NewDir, "foo1.fil"),
- ?line Marker = "hello, world",
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_new_open_modes"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ Name1 = filename:join(NewDir, "foo1.fil"),
+ Marker = "hello, world",
%% write
- ?line {ok, Fd1} = ?FILE_MODULE:open(Name1, [write]),
- ?line ok = io:write(Fd1, Marker),
- ?line ok = io:put_chars(Fd1, ".\n"),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ {ok, Fd1} = ?FILE_MODULE:open(Name1, [write]),
+ ok = io:write(Fd1, Marker),
+ ok = io:put_chars(Fd1, ".\n"),
+ ok = ?FILE_MODULE:close(Fd1),
%% read
- ?line {ok, Fd2} = ?FILE_MODULE:open(Name1, [read]),
- ?line {ok, Marker} = io:read(Fd2, prompt),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ {ok, Fd2} = ?FILE_MODULE:open(Name1, [read]),
+ {ok, Marker} = io:read(Fd2, prompt),
+ ok = ?FILE_MODULE:close(Fd2),
%% read and write
- ?line {ok, Fd3} = ?FILE_MODULE:open(Name1, [read, write]),
- ?line {ok, Marker} = io:read(Fd3, prompt),
- ?line ok = io:write(Fd3, Marker),
- ?line ok = ?FILE_MODULE:close(Fd3),
+ {ok, Fd3} = ?FILE_MODULE:open(Name1, [read, write]),
+ {ok, Marker} = io:read(Fd3, prompt),
+ ok = io:write(Fd3, Marker),
+ ok = ?FILE_MODULE:close(Fd3),
%% read by default
- ?line {ok, Fd4} = ?FILE_MODULE:open(Name1, []),
- ?line {ok, Marker} = io:read(Fd4, prompt),
- ?line ok = ?FILE_MODULE:close(Fd4),
+ {ok, Fd4} = ?FILE_MODULE:open(Name1, []),
+ {ok, Marker} = io:read(Fd4, prompt),
+ ok = ?FILE_MODULE:close(Fd4),
%% read and binary
- ?line {ok, Fd5} = ?FILE_MODULE:open(Name1, [read, binary]),
- ?line {ok, Marker} = io:read(Fd5, prompt),
- ?line ok = ?FILE_MODULE:close(Fd5),
+ {ok, Fd5} = ?FILE_MODULE:open(Name1, [read, binary]),
+ {ok, Marker} = io:read(Fd5, prompt),
+ ok = ?FILE_MODULE:close(Fd5),
%% read, raw
- ?line {ok, Fd6} = ?FILE_MODULE:open(Name1, [read, raw]),
- ?line {ok, [$\[]} = ?FILE_MODULE:read(Fd6, 1),
- ?line ok = ?FILE_MODULE:close(Fd6),
-
- %% write and sync
- case ?FILE_MODULE:open(Name1, [write, sync]) of
- {ok, Fd7} ->
- ok = io:write(Fd7, Marker),
- ok = io:put_chars(Fd7, ".\n"),
- ok = ?FILE_MODULE:close(Fd7),
- {ok, Fd8} = ?FILE_MODULE:open(Name1, [read]),
- {ok, Marker} = io:read(Fd8, prompt),
- ok = ?FILE_MODULE:close(Fd8);
- {error, enotsup} ->
- %% for platforms that don't support the sync option
- ok
- end,
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
- ok.
+ {ok, Fd6} = ?FILE_MODULE:open(Name1, [read, raw]),
+ {ok, [$\[]} = ?FILE_MODULE:read(Fd6, 1),
+ ok = ?FILE_MODULE:close(Fd6),
+
+ %% write and sync
+ case ?FILE_MODULE:open(Name1, [write, sync]) of
+ {ok, Fd7} ->
+ ok = io:write(Fd7, Marker),
+ ok = io:put_chars(Fd7, ".\n"),
+ ok = ?FILE_MODULE:close(Fd7),
+ {ok, Fd8} = ?FILE_MODULE:open(Name1, [read]),
+ {ok, Marker} = io:read(Fd8, prompt),
+ ok = ?FILE_MODULE:close(Fd8);
+ {error, enotsup} ->
+ %% for platforms that don't support the sync option
+ ok
+ end,
+
+ [] = flush(),
+ ok.
-path_open(suite) -> [];
-path_open(doc) -> [];
path_open(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_path_open"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line FileName = "path_open.fil",
- ?line Name = filename:join(RootDir, FileName),
- ?line {ok,Fd1,_FullName1} =
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_path_open"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ FileName = "path_open.fil",
+ Name = filename:join(RootDir, FileName),
+ {ok,Fd1,_FullName1} =
?FILE_MODULE:path_open(
- [RootDir,
- "nosuch1",
- NewDir],FileName,write),
- ?line io:format(Fd1,"ABCDEFGH",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ [RootDir,
+ "nosuch1",
+ NewDir],FileName,write),
+ io:format(Fd1,"ABCDEFGH",[]),
+ ok = ?FILE_MODULE:close(Fd1),
%% locate it in the last dir
- ?line {ok,Fd2,_FullName2} =
+ {ok,Fd2,_FullName2} =
?FILE_MODULE:path_open(
- ["nosuch1",
- NewDir,
- RootDir],FileName,read),
- ?line {ok,2} =
+ ["nosuch1",
+ NewDir,
+ RootDir],FileName,read),
+ {ok,2} =
?FILE_MODULE:position(Fd2,2), "C" = io:get_chars(Fd2,'',1),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ ok = ?FILE_MODULE:close(Fd2),
%% Try a failing path
- ?line {error, enoent} = ?FILE_MODULE:path_open(
- ["nosuch1",
- NewDir],FileName,read),
+ {error, enoent} = ?FILE_MODULE:path_open(
+ ["nosuch1",
+ NewDir],FileName,read),
%% Check that it's found regardless of path, if an absolute name given
- ?line {ok,Fd3,_FullPath3} =
+ {ok,Fd3,_FullPath3} =
?FILE_MODULE:path_open(
- ["nosuch1",
- NewDir],Name,read),
- ?line {ok,2} =
+ ["nosuch1",
+ NewDir],Name,read),
+ {ok,2} =
?FILE_MODULE:position(Fd3,2), "C" = io:get_chars(Fd3,'',1),
- ?line ok = ?FILE_MODULE:close(Fd3),
+ ok = ?FILE_MODULE:close(Fd3),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-close(suite) -> [];
-close(doc) -> [];
close(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_close.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,read_write),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_close.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,read_write),
%% Just closing it is no fun, we did that a million times already
%% This is a common error, for code written before Erlang 4.3
%% bacause then ?FILE_MODULE:open just returned a Pid, and not everyone
%% really checked what they got.
- ?line {'EXIT',_Msg} = (catch ok = ?FILE_MODULE:close({ok,Fd1})),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ {'EXIT',_Msg} = (catch ok = ?FILE_MODULE:close({ok,Fd1})),
+ ok = ?FILE_MODULE:close(Fd1),
%% Try closing one more time
- ?line Val = ?FILE_MODULE:close(Fd1),
- ?line io:format("Second close gave: ~p",[Val]),
+ Val = ?FILE_MODULE:close(Fd1),
+ io:format("Second close gave: ~p",[Val]),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-access(suite) -> [];
-access(doc) -> [];
access(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_access.fil"),
- ?line Str = "ABCDEFGH",
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd1,Str,[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_access.fil"),
+ Str = "ABCDEFGH",
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd1,Str,[]),
+ ok = ?FILE_MODULE:close(Fd1),
%% Check that we can't write when in read only mode
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,read),
- ?line case catch io:format(Fd2,"XXXX",[]) of
- ok ->
- test_server:fail({format,write});
- _ ->
- ok
- end,
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line {ok,Fd3} = ?FILE_MODULE:open(Name,read),
- ?line Str = io:get_line(Fd3,''),
- ?line ok = ?FILE_MODULE:close(Fd3),
+ {ok,Fd2} = ?FILE_MODULE:open(Name,read),
+ case catch io:format(Fd2,"XXXX",[]) of
+ ok ->
+ ct:fail({format,write});
+ _ ->
+ ok
+ end,
+ ok = ?FILE_MODULE:close(Fd2),
+ {ok,Fd3} = ?FILE_MODULE:open(Name,read),
+ Str = io:get_line(Fd3,''),
+ ok = ?FILE_MODULE:close(Fd3),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%% Tests ?FILE_MODULE:read/2 and ?FILE_MODULE:write/2.
-read_write(suite) -> [];
-read_write(doc) -> [];
read_write(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_read_write"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line Marker = "hello, world",
- ?line MarkerB = list_to_binary(Marker),
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_read_write"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ Marker = "hello, world",
+ MarkerB = list_to_binary(Marker),
%% Plain file.
- ?line Name1 = filename:join(NewDir, "plain.fil"),
- ?line {ok, Fd1} = ?FILE_MODULE:open(Name1, [read, write]),
- ?line read_write_test(Fd1, Marker, []),
+ Name1 = filename:join(NewDir, "plain.fil"),
+ {ok, Fd1} = ?FILE_MODULE:open(Name1, [read, write]),
+ read_write_test(Fd1, Marker, []),
%% Raw file.
- ?line Name2 = filename:join(NewDir, "raw.fil"),
- ?line {ok, Fd2} = ?FILE_MODULE:open(Name2, [read, write, raw]),
- ?line read_write_test(Fd2, Marker, []),
+ Name2 = filename:join(NewDir, "raw.fil"),
+ {ok, Fd2} = ?FILE_MODULE:open(Name2, [read, write, raw]),
+ read_write_test(Fd2, Marker, []),
%% Plain binary file.
- ?line Name3 = filename:join(NewDir, "plain-b.fil"),
- ?line {ok, Fd3} = ?FILE_MODULE:open(Name3, [read, write, binary]),
- ?line read_write_test(Fd3, MarkerB, <<>>),
+ Name3 = filename:join(NewDir, "plain-b.fil"),
+ {ok, Fd3} = ?FILE_MODULE:open(Name3, [read, write, binary]),
+ read_write_test(Fd3, MarkerB, <<>>),
%% Raw binary file.
- ?line Name4 = filename:join(NewDir, "raw-b.fil"),
- ?line {ok, Fd4} = ?FILE_MODULE:open(Name4, [read, write, raw, binary]),
- ?line read_write_test(Fd4, MarkerB, <<>>),
+ Name4 = filename:join(NewDir, "raw-b.fil"),
+ {ok, Fd4} = ?FILE_MODULE:open(Name4, [read, write, raw, binary]),
+ read_write_test(Fd4, MarkerB, <<>>),
- ?line test_server:timetrap_cancel(Dog),
ok.
read_write_test(File, Marker, Empty) ->
- ?line ok = ?FILE_MODULE:write(File, Marker),
- ?line {ok, 0} = ?FILE_MODULE:position(File, 0),
- ?line {ok, Empty} = ?FILE_MODULE:read(File, 0),
- ?line {ok, Marker} = ?FILE_MODULE:read(File, 100),
- ?line eof = ?FILE_MODULE:read(File, 100),
- ?line {ok, Empty} = ?FILE_MODULE:read(File, 0),
- ?line ok = ?FILE_MODULE:close(File),
- ?line [] = flush(),
+ ok = ?FILE_MODULE:write(File, Marker),
+ {ok, 0} = ?FILE_MODULE:position(File, 0),
+ {ok, Empty} = ?FILE_MODULE:read(File, 0),
+ {ok, Marker} = ?FILE_MODULE:read(File, 100),
+ eof = ?FILE_MODULE:read(File, 100),
+ {ok, Empty} = ?FILE_MODULE:read(File, 0),
+ ok = ?FILE_MODULE:close(File),
+ [] = flush(),
ok.
%% Tests ?FILE_MODULE:pread/2 and ?FILE_MODULE:pwrite/2.
-pread_write(suite) -> [];
-pread_write(doc) -> [];
pread_write(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_pread_write"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line List = "hello, world",
- ?line Bin = list_to_binary(List),
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_pread_write"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ List = "hello, world",
+ Bin = list_to_binary(List),
%% Plain file.
- ?line Name1 = filename:join(NewDir, "plain.fil"),
- ?line {ok, Fd1} = ?FILE_MODULE:open(Name1, [read, write]),
- ?line pread_write_test(Fd1, List),
+ Name1 = filename:join(NewDir, "plain.fil"),
+ {ok, Fd1} = ?FILE_MODULE:open(Name1, [read, write]),
+ pread_write_test(Fd1, List),
%% Raw file.
- ?line Name2 = filename:join(NewDir, "raw.fil"),
- ?line {ok, Fd2} = ?FILE_MODULE:open(Name2, [read, write, raw]),
- ?line pread_write_test(Fd2, List),
+ Name2 = filename:join(NewDir, "raw.fil"),
+ {ok, Fd2} = ?FILE_MODULE:open(Name2, [read, write, raw]),
+ pread_write_test(Fd2, List),
%% Plain file. Binary mode.
- ?line Name3 = filename:join(NewDir, "plain-binary.fil"),
- ?line {ok, Fd3} = ?FILE_MODULE:open(Name3, [binary, read, write]),
- ?line pread_write_test(Fd3, Bin),
+ Name3 = filename:join(NewDir, "plain-binary.fil"),
+ {ok, Fd3} = ?FILE_MODULE:open(Name3, [binary, read, write]),
+ pread_write_test(Fd3, Bin),
%% Raw file. Binary mode.
- ?line Name4 = filename:join(NewDir, "raw-binary.fil"),
- ?line {ok, Fd4} = ?FILE_MODULE:open(Name4, [binary, read, write, raw]),
- ?line pread_write_test(Fd4, Bin),
+ Name4 = filename:join(NewDir, "raw-binary.fil"),
+ {ok, Fd4} = ?FILE_MODULE:open(Name4, [binary, read, write, raw]),
+ pread_write_test(Fd4, Bin),
- ?line test_server:timetrap_cancel(Dog),
ok.
pread_write_test(File, Data) ->
- ?line io:format("~p:pread_write_test(~p,~p)~n", [?MODULE, File, Data]),
- ?line Size = if is_binary(Data) -> byte_size(Data);
- is_list(Data) -> length(Data)
- end,
- ?line I = Size + 17,
- ?line ok = ?FILE_MODULE:pwrite(File, 0, Data),
+ io:format("~p:pread_write_test(~p,~p)~n", [?MODULE, File, Data]),
+ Size = if is_binary(Data) -> byte_size(Data);
+ is_list(Data) -> length(Data)
+ end,
+ I = Size + 17,
+ ok = ?FILE_MODULE:pwrite(File, 0, Data),
Res = ?FILE_MODULE:pread(File, 0, I),
- ?line {ok, Data} = Res,
- ?line eof = ?FILE_MODULE:pread(File, I, 1),
- ?line ok = ?FILE_MODULE:pwrite(File, [{0, Data}, {I, Data}]),
- ?line {ok, [Data, eof, Data]} =
+ {ok, Data} = Res,
+ eof = ?FILE_MODULE:pread(File, I, 1),
+ ok = ?FILE_MODULE:pwrite(File, [{0, Data}, {I, Data}]),
+ {ok, [Data, eof, Data]} =
?FILE_MODULE:pread(File, [{0, Size}, {2*I, 1}, {I, Size}]),
- ?line Plist = lists:seq(21*I, 0, -I),
- ?line Pwrite = lists:map(fun(P)->{P,Data}end, Plist),
- ?line Pread = [{22*I,Size} | lists:map(fun(P)->{P,Size}end, Plist)],
- ?line Presult = [eof | lists:map(fun(_)->Data end, Plist)],
- ?line ok = ?FILE_MODULE:pwrite(File, Pwrite),
- ?line {ok, Presult} = ?FILE_MODULE:pread(File, Pread),
- ?line ok = ?FILE_MODULE:close(File),
- ?line [] = flush(),
+ Plist = lists:seq(21*I, 0, -I),
+ Pwrite = lists:map(fun(P)->{P,Data}end, Plist),
+ Pread = [{22*I,Size} | lists:map(fun(P)->{P,Size}end, Plist)],
+ Presult = [eof | lists:map(fun(_)->Data end, Plist)],
+ ok = ?FILE_MODULE:pwrite(File, Pwrite),
+ {ok, Presult} = ?FILE_MODULE:pread(File, Pread),
+ ok = ?FILE_MODULE:close(File),
+ [] = flush(),
ok.
-append(doc) -> "Test appending to a file.";
-append(suite) -> [];
+%% Test appending to a file.
append(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_append"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_append"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
- ?line First = "First line\n",
- ?line Second = "Seond lines comes here\n",
- ?line Third = "And here is the third line\n",
+ First = "First line\n",
+ Second = "Seond lines comes here\n",
+ Third = "And here is the third line\n",
%% Write a small text file.
- ?line Name1 = filename:join(NewDir, "a_file.txt"),
- ?line {ok, Fd1} = ?FILE_MODULE:open(Name1, [write]),
- ?line ok = io:format(Fd1, First, []),
- ?line ok = io:format(Fd1, Second, []),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ Name1 = filename:join(NewDir, "a_file.txt"),
+ {ok, Fd1} = ?FILE_MODULE:open(Name1, [write]),
+ ok = io:format(Fd1, First, []),
+ ok = io:format(Fd1, Second, []),
+ ok = ?FILE_MODULE:close(Fd1),
%% Open it a again and a append a line to it.
- ?line {ok, Fd2} = ?FILE_MODULE:open(Name1, [append]),
- ?line ok = io:format(Fd2, Third, []),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ {ok, Fd2} = ?FILE_MODULE:open(Name1, [append]),
+ ok = io:format(Fd2, Third, []),
+ ok = ?FILE_MODULE:close(Fd2),
%% Read it back and verify.
- ?line Expected = list_to_binary([First, Second, Third]),
- ?line {ok, Expected} = ?FILE_MODULE:read_file(Name1),
+ Expected = list_to_binary([First, Second, Third]),
+ {ok, Expected} = ?FILE_MODULE:read_file(Name1),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-open_errors(suite) -> [];
-open_errors(doc) -> [];
open_errors(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line DataDir =
+ DataDir =
filename:dirname(
- filename:join(?config(data_dir, Config), "x")),
- ?line DataDirSlash = DataDir++"/",
- ?line {error, E1} = ?FILE_MODULE:open(DataDir, [read]),
- ?line {error, E2} = ?FILE_MODULE:open(DataDirSlash, [read]),
- ?line {error, E3} = ?FILE_MODULE:open(DataDir, [write]),
- ?line {error, E4} = ?FILE_MODULE:open(DataDirSlash, [write]),
- ?line {eisdir,eisdir,eisdir,eisdir} = {E1,E2,E3,E4},
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ filename:join(proplists:get_value(data_dir, Config), "x")),
+ DataDirSlash = DataDir++"/",
+ {error, E1} = ?FILE_MODULE:open(DataDir, [read]),
+ {error, E2} = ?FILE_MODULE:open(DataDirSlash, [read]),
+ {error, E3} = ?FILE_MODULE:open(DataDir, [write]),
+ {error, E4} = ?FILE_MODULE:open(DataDirSlash, [write]),
+ {eisdir,eisdir,eisdir,eisdir} = {E1,E2,E3,E4},
+
+ [] = flush(),
ok.
-exclusive(suite) -> [];
-exclusive(doc) -> "Test exclusive access to a file.";
+%% Test exclusive access to a file.
exclusive(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_exclusive"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line Name = filename:join(NewDir, "ex_file.txt"),
- ?line {ok, Fd} = ?FILE_MODULE:open(Name, [write, exclusive]),
- ?line {error, eexist} = ?FILE_MODULE:open(Name, [write, exclusive]),
- ?line ok = ?FILE_MODULE:close(Fd),
- ?line test_server:timetrap_cancel(Dog),
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_exclusive"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ Name = filename:join(NewDir, "ex_file.txt"),
+ {ok, Fd} = ?FILE_MODULE:open(Name, [write, exclusive]),
+ {error, eexist} = ?FILE_MODULE:open(Name, [write, exclusive]),
+ ok = ?FILE_MODULE:close(Fd),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-pos1(suite) -> [];
-pos1(doc) -> [];
pos1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_pos1.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd1,"ABCDEFGH",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,read),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_pos1.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd1,"ABCDEFGH",[]),
+ ok = ?FILE_MODULE:close(Fd1),
+ {ok,Fd2} = ?FILE_MODULE:open(Name,read),
%% Start pos is first char
- ?line io:format("Relative positions"),
- ?line "A" = io:get_chars(Fd2,'',1),
- ?line {ok,2} = ?FILE_MODULE:position(Fd2,{cur,1}),
- ?line "C" = io:get_chars(Fd2,'',1),
- ?line {ok,0} = ?FILE_MODULE:position(Fd2,{cur,-3}),
- ?line "A" = io:get_chars(Fd2,'',1),
+ io:format("Relative positions"),
+ "A" = io:get_chars(Fd2,'',1),
+ {ok,2} = ?FILE_MODULE:position(Fd2,{cur,1}),
+ "C" = io:get_chars(Fd2,'',1),
+ {ok,0} = ?FILE_MODULE:position(Fd2,{cur,-3}),
+ "A" = io:get_chars(Fd2,'',1),
%% Backwards from first char should be an error
- ?line {ok,0} = ?FILE_MODULE:position(Fd2,{cur,-1}),
- ?line {error, einval} = ?FILE_MODULE:position(Fd2,{cur,-1}),
+ {ok,0} = ?FILE_MODULE:position(Fd2,{cur,-1}),
+ {error, einval} = ?FILE_MODULE:position(Fd2,{cur,-1}),
%% Reset position and move again
- ?line {ok,0} = ?FILE_MODULE:position(Fd2,0),
- ?line {ok,2} = ?FILE_MODULE:position(Fd2,{cur,2}),
- ?line "C" = io:get_chars(Fd2,'',1),
+ {ok,0} = ?FILE_MODULE:position(Fd2,0),
+ {ok,2} = ?FILE_MODULE:position(Fd2,{cur,2}),
+ "C" = io:get_chars(Fd2,'',1),
%% Go a lot forwards
- ?line {ok,13} = ?FILE_MODULE:position(Fd2,{cur,10}),
- ?line eof = io:get_chars(Fd2,'',1),
+ {ok,13} = ?FILE_MODULE:position(Fd2,{cur,10}),
+ eof = io:get_chars(Fd2,'',1),
%% Try some fixed positions
- ?line io:format("Fixed positions"),
- ?line {ok,8} =
+ io:format("Fixed positions"),
+ {ok,8} =
?FILE_MODULE:position(Fd2,8), eof = io:get_chars(Fd2,'',1),
- ?line {ok,8} =
+ {ok,8} =
?FILE_MODULE:position(Fd2,cur), eof = io:get_chars(Fd2,'',1),
- ?line {ok,7} =
+ {ok,7} =
?FILE_MODULE:position(Fd2,7), "H" = io:get_chars(Fd2,'',1),
- ?line {ok,0} =
+ {ok,0} =
?FILE_MODULE:position(Fd2,0), "A" = io:get_chars(Fd2,'',1),
- ?line {ok,3} =
+ {ok,3} =
?FILE_MODULE:position(Fd2,3), "D" = io:get_chars(Fd2,'',1),
- ?line {ok,12} =
+ {ok,12} =
?FILE_MODULE:position(Fd2,12), eof = io:get_chars(Fd2,'',1),
- ?line {ok,3} =
+ {ok,3} =
?FILE_MODULE:position(Fd2,3), "D" = io:get_chars(Fd2,'',1),
%% Try the {bof,X} notation
- ?line {ok,3} = ?FILE_MODULE:position(Fd2,{bof,3}),
- ?line "D" = io:get_chars(Fd2,'',1),
+ {ok,3} = ?FILE_MODULE:position(Fd2,{bof,3}),
+ "D" = io:get_chars(Fd2,'',1),
%% Try eof positions
- ?line io:format("EOF positions"),
- ?line {ok,8} =
+ io:format("EOF positions"),
+ {ok,8} =
?FILE_MODULE:position(Fd2,{eof,0}), eof=io:get_chars(Fd2,'',1),
- ?line {ok,7} =
+ {ok,7} =
?FILE_MODULE:position(Fd2,{eof,-1}),
- ?line "H" = io:get_chars(Fd2,'',1),
- ?line {ok,0} =
+ "H" = io:get_chars(Fd2,'',1),
+ {ok,0} =
?FILE_MODULE:position(Fd2,{eof,-8}), "A"=io:get_chars(Fd2,'',1),
- ?line {error, einval} = ?FILE_MODULE:position(Fd2,{eof,-9}),
+ {error, einval} = ?FILE_MODULE:position(Fd2,{eof,-9}),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-pos2(suite) -> [];
-pos2(doc) -> [];
pos2(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_pos2.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd1,"ABCDEFGH",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,read),
- ?line {error, einval} = ?FILE_MODULE:position(Fd2,-1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_pos2.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd1,"ABCDEFGH",[]),
+ ok = ?FILE_MODULE:close(Fd1),
+ {ok,Fd2} = ?FILE_MODULE:open(Name,read),
+ {error, einval} = ?FILE_MODULE:position(Fd2,-1),
%% Make sure that we still can search after an error.
- ?line {ok,0} = ?FILE_MODULE:position(Fd2, 0),
- ?line {ok,3} = ?FILE_MODULE:position(Fd2, {bof,3}),
- ?line "D" = io:get_chars(Fd2,'',1),
+ {ok,0} = ?FILE_MODULE:position(Fd2, 0),
+ {ok,3} = ?FILE_MODULE:position(Fd2, {bof,3}),
+ "D" = io:get_chars(Fd2,'',1),
- ?line [] = flush(),
- ?line io:format("DONE"),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
+ io:format("DONE"),
ok.
-pos3(suite) -> [];
-pos3(doc) -> ["When it does not use raw mode, file:position had a bug."];
+%% When it does not use raw mode, file:position had a bug.
pos3(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(data_dir, Config),
- ?line Name = filename:join(RootDir, "realmen.html.gz"),
+ RootDir = proplists:get_value(data_dir, Config),
+ Name = filename:join(RootDir, "realmen.html.gz"),
- ?line {ok, Fd} = ?FILE_MODULE:open(Name, [read, binary]),
- ?line {ok, _} = ?FILE_MODULE:read(Fd, 5),
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {bof, -1}),
+ {ok, Fd} = ?FILE_MODULE:open(Name, [read, binary]),
+ {ok, _} = ?FILE_MODULE:read(Fd, 5),
+ {error, einval} = ?FILE_MODULE:position(Fd, {bof, -1}),
%% Here ok had returned =(
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {cur, -10}),
+ {error, einval} = ?FILE_MODULE:position(Fd, {cur, -10}),
%% That test is actually questionable since file:position/2
%% is documented to leave the file position undefined after
%% it has returned an error. But on Posix systems the position
%% is guaranteed to be unchanged after an error return. On e.g
%% Windows there is nothing stated about this in the documentation.
- ?line test_server:timetrap_cancel(Dog),
ok.
-file_info_basic_file(suite) -> [];
-file_info_basic_file(doc) -> [];
file_info_basic_file(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
%% Create a short file.
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_basic_test.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name, write),
- ?line io:put_chars(Fd1, "foo bar"),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_basic_test.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name, write),
+ io:put_chars(Fd1, "foo bar"),
+ ok = ?FILE_MODULE:close(Fd1),
%% Test that the file has the expected attributes.
%% The times are tricky, so we will save them to a separate test case.
{ok,FileInfo} = ?FILE_MODULE:read_file_info(Name),
{ok,FileInfo} = ?FILE_MODULE:read_file_info(Name, [raw]),
#file_info{size=Size,type=Type,access=Access,
- atime=AccessTime,mtime=ModifyTime} = FileInfo,
- ?line io:format("Access ~p, Modify ~p", [AccessTime, ModifyTime]),
- ?line Size = 7,
- ?line Type = regular,
- ?line read_write = Access,
- ?line true = abs(time_dist(filter_atime(AccessTime, Config),
- filter_atime(ModifyTime,
- Config))) < 2,
- ?line all_integers(tuple_to_list(AccessTime) ++ tuple_to_list(ModifyTime)),
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ atime=AccessTime,mtime=ModifyTime} = FileInfo,
+ io:format("Access ~p, Modify ~p", [AccessTime, ModifyTime]),
+ Size = 7,
+ Type = regular,
+ read_write = Access,
+ true = abs(time_dist(filter_atime(AccessTime, Config),
+ filter_atime(ModifyTime,
+ Config))) < 2,
+ all_integers(tuple_to_list(AccessTime) ++ tuple_to_list(ModifyTime)),
+
+ [] = flush(),
ok.
-file_info_basic_directory(suite) -> [];
-file_info_basic_directory(doc) -> [];
file_info_basic_directory(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(5)),
-
%% Note: filename:join/1 removes any trailing slash,
%% which is essential for ?FILE_MODULE:file_info/1 to work on
%% platforms such as Windows95.
- RootDir = filename:join([?config(priv_dir, Config)]),
+ RootDir = filename:join([proplists:get_value(priv_dir, Config)]),
%% Test that the RootDir directory has the expected attributes.
test_directory(RootDir, read_write),
@@ -1445,65 +1346,57 @@ file_info_basic_directory(Config) when is_list(Config) ->
%% directories.
case os:type() of
{win32, _} ->
- ?line test_directory("/", read_write),
- ?line test_directory("c:/", read_write),
- ?line test_directory("c:\\", read_write);
+ test_directory("/", read_write),
+ test_directory("c:/", read_write),
+ test_directory("c:\\", read_write);
_ ->
- ?line test_directory("/", read)
+ test_directory("/", read)
end,
- test_server:timetrap_cancel(Dog).
+ ok.
test_directory(Name, ExpectedAccess) ->
{ok,FileInfo} = ?FILE_MODULE:read_file_info(Name),
{ok,FileInfo} = ?FILE_MODULE:read_file_info(Name, [raw]),
#file_info{size=Size,type=Type,access=Access,
atime=AccessTime,mtime=ModifyTime} = FileInfo,
- ?line io:format("Testing directory ~s", [Name]),
- ?line io:format("Directory size is ~p", [Size]),
- ?line io:format("Access ~p", [Access]),
- ?line io:format("Access time ~p; Modify time~p",
- [AccessTime, ModifyTime]),
- ?line Type = directory,
- ?line Access = ExpectedAccess,
- ?line all_integers(tuple_to_list(AccessTime) ++ tuple_to_list(ModifyTime)),
- ?line [] = flush(),
+ io:format("Testing directory ~s", [Name]),
+ io:format("Directory size is ~p", [Size]),
+ io:format("Access ~p", [Access]),
+ io:format("Access time ~p; Modify time~p",
+ [AccessTime, ModifyTime]),
+ Type = directory,
+ Access = ExpectedAccess,
+ all_integers(tuple_to_list(AccessTime) ++ tuple_to_list(ModifyTime)),
+ [] = flush(),
ok.
all_integers([{A,B,C}|T]) ->
all_integers([A,B,C|T]);
all_integers([Int|Rest]) when is_integer(Int) ->
- ?line all_integers(Rest);
+ all_integers(Rest);
all_integers([]) -> ok.
%% Try something nonexistent.
-file_info_bad(suite) -> [];
-file_info_bad(doc) -> [];
file_info_bad(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = filename:join([?config(priv_dir, Config)]),
+ RootDir = filename:join([proplists:get_value(priv_dir, Config)]),
FileName = filename:join(RootDir, atom_to_list(?MODULE) ++ "_nonexistent"),
{error,enoent} = ?FILE_MODULE:read_file_info(FileName),
{error,enoent} = ?FILE_MODULE:read_file_info(FileName, [raw]),
- ?line {error, enoent} = ?FILE_MODULE:read_file_info(""),
+ {error, enoent} = ?FILE_MODULE:read_file_info(""),
{error, enoent} = ?FILE_MODULE:read_file_info("", [raw]),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%% Test that the file times behave as they should.
-file_info_times(suite) -> [];
-file_info_times(doc) -> [];
file_info_times(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
%% We have to try this twice, since if the test runs across the change
%% of a month the time diff calculations will fail. But it won't happen
%% if you run it twice in succession.
- ?line test_server:m_out_of_n(
- 1,2,
- fun() -> ?line file_info_int(Config) end),
- ?line test_server:timetrap_cancel(Dog),
+ test_server:m_out_of_n(
+ 1,2,
+ fun() -> file_info_int(Config) end),
ok.
file_info_int(Config) ->
@@ -1511,14 +1404,14 @@ file_info_int(Config) ->
%% which is essential for ?FILE_MODULE:file_info/1 to work on
%% platforms such as Windows95.
- ?line RootDir = filename:join([?config(priv_dir, Config)]),
- ?line test_server:format("RootDir = ~p", [RootDir]),
+ RootDir = filename:join([proplists:get_value(priv_dir, Config)]),
+ io:format("RootDir = ~p", [RootDir]),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_file_info.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
- ?line io:put_chars(Fd1,"foo"),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_file_info.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ io:put_chars(Fd1,"foo"),
%% check that the file got a modify date max a few seconds away from now
{ok,FileInfo1} = ?FILE_MODULE:read_file_info(Name),
@@ -1531,31 +1424,31 @@ file_info_int(Config) ->
#file_info{type=regular,atime=AccTime1,mtime=ModTime1} = FileInfo1,
- ?line Now = erlang:localtime(), %???
- ?line io:format("Now ~p",[Now]),
- ?line io:format("Open file Acc ~p Mod ~p",[AccTime1,ModTime1]),
- ?line true = abs(time_dist(filter_atime(Now, Config),
- filter_atime(AccTime1,
- Config))) < 8,
- ?line true = abs(time_dist(Now,ModTime1)) < 8,
+ Now = erlang:localtime(), %???
+ io:format("Now ~p",[Now]),
+ io:format("Open file Acc ~p Mod ~p",[AccTime1,ModTime1]),
+ true = abs(time_dist(filter_atime(Now, Config),
+ filter_atime(AccTime1,
+ Config))) < 8,
+ true = abs(time_dist(Now,ModTime1)) < 8,
%% Sleep until we can be sure the seconds value has changed.
%% Note: FAT-based filesystem (like on Windows 95) have
%% a resolution of 2 seconds.
- ?line test_server:sleep(test_server:seconds(2.2)),
+ timer:sleep(2200),
%% close the file, and watch the modify date change
- ?line ok = ?FILE_MODULE:close(Fd1),
+ ok = ?FILE_MODULE:close(Fd1),
{ok,FileInfo2} = ?FILE_MODULE:read_file_info(Name),
{ok,FileInfo2} = ?FILE_MODULE:read_file_info(Name, [raw]),
#file_info{size=Size,type=regular,access=Access,
atime=AccTime2,mtime=ModTime2} = FileInfo2,
- ?line io:format("Closed file Acc ~p Mod ~p",[AccTime2,ModTime2]),
- ?line true = time_dist(ModTime1,ModTime2) >= 0,
+ io:format("Closed file Acc ~p Mod ~p",[AccTime2,ModTime2]),
+ true = time_dist(ModTime1,ModTime2) >= 0,
%% this file is supposed to be binary, so it'd better keep it's size
- ?line Size = 3,
- ?line Access = read_write,
+ Size = 3,
+ Access = read_write,
%% Do some directory checking
{ok,FileInfo3} = ?FILE_MODULE:read_file_info(RootDir),
@@ -1563,12 +1456,12 @@ file_info_int(Config) ->
#file_info{size=DSize,type=directory,access=DAccess,
atime=AccTime3,mtime=ModTime3} = FileInfo3,
%% this dir was modified only a few secs ago
- ?line io:format("Dir Acc ~p; Mod ~p; Now ~p", [AccTime3, ModTime3, Now]),
- ?line true = abs(time_dist(Now,ModTime3)) < 5,
- ?line DAccess = read_write,
- ?line io:format("Dir size is ~p",[DSize]),
+ io:format("Dir Acc ~p; Mod ~p; Now ~p", [AccTime3, ModTime3, Now]),
+ true = abs(time_dist(Now,ModTime3)) < 5,
+ DAccess = read_write,
+ io:format("Dir size is ~p",[DSize]),
- ?line [] = flush(),
+ [] = flush(),
ok.
%% Filter access times, to copy with a deficiency of FAT file systems
@@ -1579,9 +1472,9 @@ filter_atime(Atime, Config) ->
true ->
case Atime of
{Date, _} ->
- {Date, {0, 0, 0}};
+ {Date, {0, 0, 0}};
{Y, M, D, _, _, _} ->
- {Y, M, D, 0, 0, 0}
+ {Y, M, D, 0, 0, 0}
end;
false ->
Atime
@@ -1589,50 +1482,47 @@ filter_atime(Atime, Config) ->
%% Test the write_file_info/2 function.
-file_write_file_info(suite) -> [];
-file_write_file_info(doc) -> [];
file_write_file_info(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = get_good_directory(Config),
- ?line test_server:format("RootDir = ~p", [RootDir]),
+ RootDir = get_good_directory(Config),
+ io:format("RootDir = ~p", [RootDir]),
%% Set the file to read only AND update the file times at the same time.
%% (This used to fail on Windows NT/95 for a local filesystem.)
%% Note: Seconds must be even; see note in file_info_times/1.
- ?line Name1 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_write_file_info_ro"),
- ?line ok = ?FILE_MODULE:write_file(Name1, "hello"),
- ?line Time = {{1997, 01, 02}, {12, 35, 42}},
- ?line Info = #file_info{mode=8#400, atime=Time, mtime=Time, ctime=Time},
- ?line ok = ?FILE_MODULE:write_file_info(Name1, Info),
+ Name1 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_write_file_info_ro"),
+ ok = ?FILE_MODULE:write_file(Name1, "hello"),
+ Time = {{1997, 01, 02}, {12, 35, 42}},
+ Info = #file_info{mode=8#400, atime=Time, mtime=Time, ctime=Time},
+ ok = ?FILE_MODULE:write_file_info(Name1, Info),
%% Read back the times.
- ?line {ok, ActualInfo} = ?FILE_MODULE:read_file_info(Name1),
- ?line #file_info{mode=_Mode, atime=ActAtime, mtime=Time,
- ctime=ActCtime} = ActualInfo,
- ?line FilteredAtime = filter_atime(Time, Config),
- ?line FilteredAtime = filter_atime(ActAtime, Config),
- ?line case os:type() of
- {win32, _} ->
- %% On Windows, "ctime" means creation time and it can
- %% be set.
- ActCtime = Time;
- _ ->
- ok
- end,
- ?line {error, eacces} = ?FILE_MODULE:write_file(Name1, "hello again"),
+ {ok, ActualInfo} = ?FILE_MODULE:read_file_info(Name1),
+ #file_info{mode=_Mode, atime=ActAtime, mtime=Time,
+ ctime=ActCtime} = ActualInfo,
+ FilteredAtime = filter_atime(Time, Config),
+ FilteredAtime = filter_atime(ActAtime, Config),
+ case os:type() of
+ {win32, _} ->
+ %% On Windows, "ctime" means creation time and it can
+ %% be set.
+ ActCtime = Time;
+ _ ->
+ ok
+ end,
+ {error, eacces} = ?FILE_MODULE:write_file(Name1, "hello again"),
%% Make the file writable again.
- ?line ?FILE_MODULE:write_file_info(Name1, #file_info{mode=8#600}),
- ?line ok = ?FILE_MODULE:write_file(Name1, "hello again"),
+ ?FILE_MODULE:write_file_info(Name1, #file_info{mode=8#600}),
+ ok = ?FILE_MODULE:write_file(Name1, "hello again"),
%% And unwritable.
- ?line ?FILE_MODULE:write_file_info(Name1, #file_info{mode=8#400}),
- ?line {error, eacces} = ?FILE_MODULE:write_file(Name1, "hello again"),
+ ?FILE_MODULE:write_file_info(Name1, #file_info{mode=8#400}),
+ {error, eacces} = ?FILE_MODULE:write_file(Name1, "hello again"),
%% Same with raw.
?FILE_MODULE:write_file_info(Name1, #file_info{mode=8#600}, [raw]),
@@ -1643,634 +1533,577 @@ file_write_file_info(Config) when is_list(Config) ->
%% Write the times again.
%% Note: Seconds must be even; see note in file_info_times/1.
- ?line NewTime = {{1997, 02, 15}, {13, 18, 20}},
- ?line NewInfo = #file_info{atime=NewTime, mtime=NewTime, ctime=NewTime},
- ?line ok = ?FILE_MODULE:write_file_info(Name1, NewInfo),
- ?line {ok, ActualInfo2} = ?FILE_MODULE:read_file_info(Name1),
- ?line #file_info{atime=NewActAtime, mtime=NewTime,
- ctime=NewActCtime} = ActualInfo2,
- ?line NewFilteredAtime = filter_atime(NewTime, Config),
- ?line NewFilteredAtime = filter_atime(NewActAtime, Config),
- ?line case os:type() of
- {win32, _} -> NewActCtime = NewTime;
- _ -> ok
- end,
+ NewTime = {{1997, 02, 15}, {13, 18, 20}},
+ NewInfo = #file_info{atime=NewTime, mtime=NewTime, ctime=NewTime},
+ ok = ?FILE_MODULE:write_file_info(Name1, NewInfo),
+ {ok, ActualInfo2} = ?FILE_MODULE:read_file_info(Name1),
+ #file_info{atime=NewActAtime, mtime=NewTime,
+ ctime=NewActCtime} = ActualInfo2,
+ NewFilteredAtime = filter_atime(NewTime, Config),
+ NewFilteredAtime = filter_atime(NewActAtime, Config),
+ case os:type() of
+ {win32, _} -> NewActCtime = NewTime;
+ _ -> ok
+ end,
%% The file should still be unwritable.
- ?line {error, eacces} = ?FILE_MODULE:write_file(Name1, "hello again"),
+ {error, eacces} = ?FILE_MODULE:write_file(Name1, "hello again"),
%% Make the file writeable again, so that we can remove the
%% test suites ... :-)
- ?line ?FILE_MODULE:write_file_info(Name1, #file_info{mode=8#600}),
+ ?FILE_MODULE:write_file_info(Name1, #file_info{mode=8#600}),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%% Returns a directory on a file system that has correct file times.
get_good_directory(Config) ->
- ?line ?config(priv_dir, Config).
+ proplists:get_value(priv_dir, Config).
-consult1(suite) -> [];
-consult1(doc) -> [];
consult1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_consult.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_consult.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
%% note that there is no final \n (only a space)
- ?line io:format(Fd1,
- "{this,[is,1.0],'journey'}.\n\"into\". (sound). ",
- []),
- ?line ok = ?FILE_MODULE:close(Fd1),
- ?line {ok,[{this,[is,1.0],journey},"into",sound]} =
+ io:format(Fd1,
+ "{this,[is,1.0],'journey'}.\n\"into\". (sound). ",
+ []),
+ ok = ?FILE_MODULE:close(Fd1),
+ {ok,[{this,[is,1.0],journey},"into",sound]} =
?FILE_MODULE:consult(Name),
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,write),
+ {ok,Fd2} = ?FILE_MODULE:open(Name,write),
%% note the missing double quote
- ?line io:format(
- Fd2,"{this,[is,1.0],'journey'}.\n \"into. (sound). ",[]),
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line {error, {_, _, _} = Msg} = ?FILE_MODULE:consult(Name),
- ?line io:format("Errmsg: ~p",[Msg]),
+ io:format(
+ Fd2,"{this,[is,1.0],'journey'}.\n \"into. (sound). ",[]),
+ ok = ?FILE_MODULE:close(Fd2),
+ {error, {_, _, _} = Msg} = ?FILE_MODULE:consult(Name),
+ io:format("Errmsg: ~p",[Msg]),
- ?line {error, enoent} = ?FILE_MODULE:consult(Name ++ ".nonexistent"),
+ {error, enoent} = ?FILE_MODULE:consult(Name ++ ".nonexistent"),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-path_consult(suite) -> [];
-path_consult(doc) -> [];
path_consult(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line FileName = atom_to_list(?MODULE)++"_path_consult.fil",
- ?line Name = filename:join(RootDir, FileName),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd1,"{this,is,a,journey,into,sound}.\n",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ FileName = atom_to_list(?MODULE)++"_path_consult.fil",
+ Name = filename:join(RootDir, FileName),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd1,"{this,is,a,journey,into,sound}.\n",[]),
+ ok = ?FILE_MODULE:close(Fd1),
%% File last in path
- ?line {ok,[{this,is,a,journey,into,sound}],Dir} =
+ {ok,[{this,is,a,journey,into,sound}],Dir} =
?FILE_MODULE:path_consult(
- [filename:join(RootDir, "dir1"),
- filename:join(RootDir, ".."),
- filename:join(RootDir, "dir2"),
- RootDir], FileName),
- ?line true = lists:prefix(RootDir,Dir),
+ [filename:join(RootDir, "dir1"),
+ filename:join(RootDir, ".."),
+ filename:join(RootDir, "dir2"),
+ RootDir], FileName),
+ true = lists:prefix(RootDir,Dir),
%% While maybe not an error, it may be worth noting that
%% when the full path to a file is given, it's always found
%% regardless of the contents of the path
- ?line {ok,_,_} = ?FILE_MODULE:path_consult(["nosuch1","nosuch2"],Name),
+ {ok,_,_} = ?FILE_MODULE:path_consult(["nosuch1","nosuch2"],Name),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-eval1(suite) -> [];
-eval1(doc) -> [];
eval1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)++"_eval.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_eval.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
%% note that there is no final \n (only a space)
- ?line io:format(Fd1,"put(evaluated_ok,\ntrue). ",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
- ?line ok = ?FILE_MODULE:eval(Name),
- ?line true = get(evaluated_ok),
-
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd1,"put(evaluated_ok,\ntrue). ",[]),
+ ok = ?FILE_MODULE:close(Fd1),
+ ok = ?FILE_MODULE:eval(Name),
+ true = get(evaluated_ok),
+
+ {ok,Fd2} = ?FILE_MODULE:open(Name,write),
%% note that there is no final \n (only a space)
- ?line io:format(Fd2,"put(evaluated_ok,\nR). ",[]),
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line ok = ?FILE_MODULE:eval(
- Name,
- erl_eval:add_binding('R', true, erl_eval:new_bindings())),
- ?line true = get(evaluated_ok),
-
- ?line {ok,Fd3} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd2,"put(evaluated_ok,\nR). ",[]),
+ ok = ?FILE_MODULE:close(Fd2),
+ ok = ?FILE_MODULE:eval(
+ Name,
+ erl_eval:add_binding('R', true, erl_eval:new_bindings())),
+ true = get(evaluated_ok),
+
+ {ok,Fd3} = ?FILE_MODULE:open(Name,write),
%% garbled
- ?line io:format(Fd3,"puGARBLED-GARBLED\ntrue). ",[]),
- ?line ok = ?FILE_MODULE:close(Fd3),
- ?line {error, {_, _, _} = Msg} = ?FILE_MODULE:eval(Name),
- ?line io:format("Errmsg1: ~p",[Msg]),
-
- ?line {error, enoent} = ?FILE_MODULE:eval(Name ++ ".nonexistent"),
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ io:format(Fd3,"puGARBLED-GARBLED\ntrue). ",[]),
+ ok = ?FILE_MODULE:close(Fd3),
+ {error, {_, _, _} = Msg} = ?FILE_MODULE:eval(Name),
+ io:format("Errmsg1: ~p",[Msg]),
+
+ {error, enoent} = ?FILE_MODULE:eval(Name ++ ".nonexistent"),
+
+ [] = flush(),
ok.
-path_eval(suite) -> [];
-path_eval(doc) -> [];
path_eval(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line FileName = atom_to_list(?MODULE)++"_path_eval.fil",
- ?line Name = filename:join(RootDir, FileName),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd1,"put(evaluated_ok,true).\n",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ FileName = atom_to_list(?MODULE)++"_path_eval.fil",
+ Name = filename:join(RootDir, FileName),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd1,"put(evaluated_ok,true).\n",[]),
+ ok = ?FILE_MODULE:close(Fd1),
%% File last in path
- ?line {ok,Dir} =
+ {ok,Dir} =
?FILE_MODULE:path_eval(
- [filename:join(RootDir, "dir1"),
- filename:join(RootDir, ".."),
- filename:join(RootDir, "dir2"),
- RootDir],FileName),
- ?line true = get(evaluated_ok),
- ?line true = lists:prefix(RootDir,Dir),
-
+ [filename:join(RootDir, "dir1"),
+ filename:join(RootDir, ".."),
+ filename:join(RootDir, "dir2"),
+ RootDir],FileName),
+ true = get(evaluated_ok),
+ true = lists:prefix(RootDir,Dir),
+
%% While maybe not an error, it may be worth noting that
%% when the full path to a file is given, it's always found
%% regardless of the contents of the path
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd2,"put(evaluated_ok,R).\n",[]),
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line {ok,_} = ?FILE_MODULE:path_eval(
- ["nosuch1","nosuch2"],
- Name,
- erl_eval:add_binding('R', true, erl_eval:new_bindings())),
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ {ok,Fd2} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd2,"put(evaluated_ok,R).\n",[]),
+ ok = ?FILE_MODULE:close(Fd2),
+ {ok,_} = ?FILE_MODULE:path_eval(
+ ["nosuch1","nosuch2"],
+ Name,
+ erl_eval:add_binding('R', true, erl_eval:new_bindings())),
+
+ [] = flush(),
ok.
-script1(suite) -> [];
-script1(doc) -> "";
script1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)++"_script.fil"),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_script.fil"),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
%% note that there is no final \n (only a space)
- ?line io:format(Fd1,"A = 11,\nB = 6,\nA+B. ",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
- ?line {ok,17} = ?FILE_MODULE:script(Name),
-
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd1,"A = 11,\nB = 6,\nA+B. ",[]),
+ ok = ?FILE_MODULE:close(Fd1),
+ {ok,17} = ?FILE_MODULE:script(Name),
+
+ {ok,Fd2} = ?FILE_MODULE:open(Name,write),
%% note that there is no final \n (only a space)
- ?line io:format(Fd2,"A = 11,\nA+B. ",[]),
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line {ok,17} = ?FILE_MODULE:script(
- Name,
- erl_eval:add_binding('B', 6, erl_eval:new_bindings())),
-
- ?line {ok,Fd3} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd3,"A = 11,\nB = six,\nA+B. ",[]),
- ?line ok = ?FILE_MODULE:close(Fd3),
- ?line {error, {_, _, _} = Msg} = ?FILE_MODULE:script(Name),
- ?line io:format("Errmsg1: ~p",[Msg]),
-
- ?line {error, enoent} = ?FILE_MODULE:script(Name ++ ".nonexistent"),
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ io:format(Fd2,"A = 11,\nA+B. ",[]),
+ ok = ?FILE_MODULE:close(Fd2),
+ {ok,17} = ?FILE_MODULE:script(
+ Name,
+ erl_eval:add_binding('B', 6, erl_eval:new_bindings())),
+
+ {ok,Fd3} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd3,"A = 11,\nB = six,\nA+B. ",[]),
+ ok = ?FILE_MODULE:close(Fd3),
+ {error, {_, _, _} = Msg} = ?FILE_MODULE:script(Name),
+ io:format("Errmsg1: ~p",[Msg]),
+
+ {error, enoent} = ?FILE_MODULE:script(Name ++ ".nonexistent"),
+
+ [] = flush(),
ok.
-
-path_script(suite) -> [];
-path_script(doc) -> [];
+
path_script(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line FileName = atom_to_list(?MODULE)++"_path_script.fil",
- ?line Name = filename:join(RootDir, FileName),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd1,"A = 11,\nB = 6,\nA+B.\n",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ FileName = atom_to_list(?MODULE)++"_path_script.fil",
+ Name = filename:join(RootDir, FileName),
+ {ok,Fd1} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd1,"A = 11,\nB = 6,\nA+B.\n",[]),
+ ok = ?FILE_MODULE:close(Fd1),
%% File last in path
- ?line {ok, 17, Dir} =
+ {ok, 17, Dir} =
?FILE_MODULE:path_script(
[filename:join(RootDir, "dir1"),
filename:join(RootDir, ".."),
filename:join(RootDir, "dir2"),
RootDir],FileName),
- ?line true = lists:prefix(RootDir,Dir),
-
+ true = lists:prefix(RootDir,Dir),
+
%% While maybe not an error, it may be worth noting that
%% when the full path to a file is given, it's always found
%% regardless of the contents of the path
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name,write),
- ?line io:format(Fd2,"A = 11,\nA+B.",[]),
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line {ok, 17, Dir} =
+ {ok,Fd2} = ?FILE_MODULE:open(Name,write),
+ io:format(Fd2,"A = 11,\nA+B.",[]),
+ ok = ?FILE_MODULE:close(Fd2),
+ {ok, 17, Dir} =
?FILE_MODULE:path_script(
["nosuch1","nosuch2"],
Name,
erl_eval:add_binding('B', 6, erl_eval:new_bindings())),
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+
+ [] = flush(),
ok.
-
-truncate(suite) -> [];
-truncate(doc) -> [];
+
truncate(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_truncate.fil"),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_truncate.fil"),
%% Create a file with some data.
- ?line MyData = "0123456789abcdefghijklmnopqrstuvxyz",
- ?line ok = ?FILE_MODULE:write_file(Name, MyData),
+ MyData = "0123456789abcdefghijklmnopqrstuvxyz",
+ ok = ?FILE_MODULE:write_file(Name, MyData),
%% Truncate the file to 10 characters.
- ?line {ok, Fd} = ?FILE_MODULE:open(Name, read_write),
- ?line {ok, 10} = ?FILE_MODULE:position(Fd, 10),
- ?line ok = ?FILE_MODULE:truncate(Fd),
- ?line ok = ?FILE_MODULE:close(Fd),
+ {ok, Fd} = ?FILE_MODULE:open(Name, read_write),
+ {ok, 10} = ?FILE_MODULE:position(Fd, 10),
+ ok = ?FILE_MODULE:truncate(Fd),
+ ok = ?FILE_MODULE:close(Fd),
%% Read back the file and check that it has been truncated.
- ?line Expected = list_to_binary("0123456789"),
- ?line {ok, Expected} = ?FILE_MODULE:read_file(Name),
+ Expected = list_to_binary("0123456789"),
+ {ok, Expected} = ?FILE_MODULE:read_file(Name),
%% Open the file read only and verify that it is not possible to
%% truncate it, OTP-1960
- ?line {ok, Fd2} = ?FILE_MODULE:open(Name, read),
- ?line {ok, 5} = ?FILE_MODULE:position(Fd2, 5),
- ?line {error, _} = ?FILE_MODULE:truncate(Fd2),
+ {ok, Fd2} = ?FILE_MODULE:open(Name, read),
+ {ok, 5} = ?FILE_MODULE:position(Fd2, 5),
+ {error, _} = ?FILE_MODULE:truncate(Fd2),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-datasync(suite) -> [];
-datasync(doc) -> "Tests that ?FILE_MODULE:datasync/1 at least doesn't crash.";
+%% Tests that ?FILE_MODULE:datasync/1 at least doesn't crash.
datasync(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Sync = filename:join(PrivDir,
- atom_to_list(?MODULE)
- ++"_sync.fil"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Sync = filename:join(PrivDir,
+ atom_to_list(?MODULE)
+ ++"_sync.fil"),
%% Raw open.
- ?line {ok, Fd} = ?FILE_MODULE:open(Sync, [write, raw]),
- ?line ok = ?FILE_MODULE:datasync(Fd),
- ?line ok = ?FILE_MODULE:close(Fd),
+ {ok, Fd} = ?FILE_MODULE:open(Sync, [write, raw]),
+ ok = ?FILE_MODULE:datasync(Fd),
+ ok = ?FILE_MODULE:close(Fd),
%% Ordinary open.
- ?line {ok, Fd2} = ?FILE_MODULE:open(Sync, [write]),
- ?line ok = ?FILE_MODULE:datasync(Fd2),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ {ok, Fd2} = ?FILE_MODULE:open(Sync, [write]),
+ ok = ?FILE_MODULE:datasync(Fd2),
+ ok = ?FILE_MODULE:close(Fd2),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-sync(suite) -> [];
-sync(doc) -> "Tests that ?FILE_MODULE:sync/1 at least doesn't crash.";
+%% Tests that ?FILE_MODULE:sync/1 at least doesn't crash.
sync(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Sync = filename:join(PrivDir,
- atom_to_list(?MODULE)
- ++"_sync.fil"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Sync = filename:join(PrivDir,
+ atom_to_list(?MODULE)
+ ++"_sync.fil"),
%% Raw open.
- ?line {ok, Fd} = ?FILE_MODULE:open(Sync, [write, raw]),
- ?line ok = ?FILE_MODULE:sync(Fd),
- ?line ok = ?FILE_MODULE:close(Fd),
+ {ok, Fd} = ?FILE_MODULE:open(Sync, [write, raw]),
+ ok = ?FILE_MODULE:sync(Fd),
+ ok = ?FILE_MODULE:close(Fd),
%% Ordinary open.
- ?line {ok, Fd2} = ?FILE_MODULE:open(Sync, [write]),
- ?line ok = ?FILE_MODULE:sync(Fd2),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ {ok, Fd2} = ?FILE_MODULE:open(Sync, [write]),
+ ok = ?FILE_MODULE:sync(Fd2),
+ ok = ?FILE_MODULE:close(Fd2),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
-advise(suite) -> [];
-advise(doc) -> "Tests that ?FILE_MODULE:advise/4 at least doesn't crash.";
+%% Tests that ?FILE_MODULE:advise/4 at least doesn't crash.
advise(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Advise = filename:join(PrivDir,
- atom_to_list(?MODULE)
- ++"_advise.fil"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Advise = filename:join(PrivDir,
+ atom_to_list(?MODULE)
+ ++"_advise.fil"),
Line1 = "Hello\n",
Line2 = "World!\n",
- ?line {ok, Fd} = ?FILE_MODULE:open(Advise, [write]),
- ?line ok = ?FILE_MODULE:advise(Fd, 0, 0, normal),
- ?line ok = io:format(Fd, "~s", [Line1]),
- ?line ok = io:format(Fd, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd),
-
- ?line {ok, Fd2} = ?FILE_MODULE:open(Advise, [write]),
- ?line ok = ?FILE_MODULE:advise(Fd2, 0, 0, random),
- ?line ok = io:format(Fd2, "~s", [Line1]),
- ?line ok = io:format(Fd2, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd2),
-
- ?line {ok, Fd3} = ?FILE_MODULE:open(Advise, [write]),
- ?line ok = ?FILE_MODULE:advise(Fd3, 0, 0, sequential),
- ?line ok = io:format(Fd3, "~s", [Line1]),
- ?line ok = io:format(Fd3, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd3),
-
- ?line {ok, Fd4} = ?FILE_MODULE:open(Advise, [write]),
- ?line ok = ?FILE_MODULE:advise(Fd4, 0, 0, will_need),
- ?line ok = io:format(Fd4, "~s", [Line1]),
- ?line ok = io:format(Fd4, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd4),
-
- ?line {ok, Fd5} = ?FILE_MODULE:open(Advise, [write]),
- ?line ok = ?FILE_MODULE:advise(Fd5, 0, 0, dont_need),
- ?line ok = io:format(Fd5, "~s", [Line1]),
- ?line ok = io:format(Fd5, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd5),
-
- ?line {ok, Fd6} = ?FILE_MODULE:open(Advise, [write]),
- ?line ok = ?FILE_MODULE:advise(Fd6, 0, 0, no_reuse),
- ?line ok = io:format(Fd6, "~s", [Line1]),
- ?line ok = io:format(Fd6, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd6),
-
- ?line {ok, Fd7} = ?FILE_MODULE:open(Advise, [write]),
- ?line {error, einval} = ?FILE_MODULE:advise(Fd7, 0, 0, bad_advise),
- ?line ok = ?FILE_MODULE:close(Fd7),
+ {ok, Fd} = ?FILE_MODULE:open(Advise, [write]),
+ ok = ?FILE_MODULE:advise(Fd, 0, 0, normal),
+ ok = io:format(Fd, "~s", [Line1]),
+ ok = io:format(Fd, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd),
+
+ {ok, Fd2} = ?FILE_MODULE:open(Advise, [write]),
+ ok = ?FILE_MODULE:advise(Fd2, 0, 0, random),
+ ok = io:format(Fd2, "~s", [Line1]),
+ ok = io:format(Fd2, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd2),
+
+ {ok, Fd3} = ?FILE_MODULE:open(Advise, [write]),
+ ok = ?FILE_MODULE:advise(Fd3, 0, 0, sequential),
+ ok = io:format(Fd3, "~s", [Line1]),
+ ok = io:format(Fd3, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd3),
+
+ {ok, Fd4} = ?FILE_MODULE:open(Advise, [write]),
+ ok = ?FILE_MODULE:advise(Fd4, 0, 0, will_need),
+ ok = io:format(Fd4, "~s", [Line1]),
+ ok = io:format(Fd4, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd4),
+
+ {ok, Fd5} = ?FILE_MODULE:open(Advise, [write]),
+ ok = ?FILE_MODULE:advise(Fd5, 0, 0, dont_need),
+ ok = io:format(Fd5, "~s", [Line1]),
+ ok = io:format(Fd5, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd5),
+
+ {ok, Fd6} = ?FILE_MODULE:open(Advise, [write]),
+ ok = ?FILE_MODULE:advise(Fd6, 0, 0, no_reuse),
+ ok = io:format(Fd6, "~s", [Line1]),
+ ok = io:format(Fd6, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd6),
+
+ {ok, Fd7} = ?FILE_MODULE:open(Advise, [write]),
+ {error, einval} = ?FILE_MODULE:advise(Fd7, 0, 0, bad_advise),
+ ok = ?FILE_MODULE:close(Fd7),
%% test write without advise, then a read after an advise
- ?line {ok, Fd8} = ?FILE_MODULE:open(Advise, [write]),
- ?line ok = io:format(Fd8, "~s", [Line1]),
- ?line ok = io:format(Fd8, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd8),
- ?line {ok, Fd9} = ?FILE_MODULE:open(Advise, [read]),
+ {ok, Fd8} = ?FILE_MODULE:open(Advise, [write]),
+ ok = io:format(Fd8, "~s", [Line1]),
+ ok = io:format(Fd8, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd8),
+ {ok, Fd9} = ?FILE_MODULE:open(Advise, [read]),
Offset = 0,
%% same as a 0 length in some implementations
Length = length(Line1) + length(Line2),
- ?line ok = ?FILE_MODULE:advise(Fd9, Offset, Length, sequential),
- ?line {ok, Line1} = ?FILE_MODULE:read_line(Fd9),
- ?line {ok, Line2} = ?FILE_MODULE:read_line(Fd9),
- ?line eof = ?FILE_MODULE:read_line(Fd9),
- ?line ok = ?FILE_MODULE:close(Fd9),
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ ok = ?FILE_MODULE:advise(Fd9, Offset, Length, sequential),
+ {ok, Line1} = ?FILE_MODULE:read_line(Fd9),
+ {ok, Line2} = ?FILE_MODULE:read_line(Fd9),
+ eof = ?FILE_MODULE:read_line(Fd9),
+ ok = ?FILE_MODULE:close(Fd9),
+
+ [] = flush(),
ok.
-allocate(suite) -> [];
-allocate(doc) -> "Tests that ?FILE_MODULE:allocate/3 at least doesn't crash.";
+%% Tests that ?FILE_MODULE:allocate/3 at least doesn't crash.
allocate(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Allocate = filename:join(PrivDir,
- atom_to_list(?MODULE)
- ++"_allocate.fil"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Allocate = filename:join(PrivDir,
+ atom_to_list(?MODULE)
+ ++"_allocate.fil"),
Line1 = "Hello\n",
Line2 = "World!\n",
- ?line {ok, Fd} = ?FILE_MODULE:open(Allocate, [write, binary]),
+ {ok, Fd} = ?FILE_MODULE:open(Allocate, [write, binary]),
allocate_and_assert(Fd, 1, iolist_size([Line1, Line2])),
- ?line ok = io:format(Fd, "~s", [Line1]),
- ?line ok = io:format(Fd, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd),
+ ok = io:format(Fd, "~s", [Line1]),
+ ok = io:format(Fd, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd),
- ?line {ok, Fd2} = ?FILE_MODULE:open(Allocate, [write, binary]),
+ {ok, Fd2} = ?FILE_MODULE:open(Allocate, [write, binary]),
allocate_and_assert(Fd2, 1, iolist_size(Line1)),
- ?line ok = io:format(Fd2, "~s", [Line1]),
- ?line ok = io:format(Fd2, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ ok = io:format(Fd2, "~s", [Line1]),
+ ok = io:format(Fd2, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd2),
- ?line {ok, Fd3} = ?FILE_MODULE:open(Allocate, [write, binary]),
+ {ok, Fd3} = ?FILE_MODULE:open(Allocate, [write, binary]),
allocate_and_assert(Fd3, 1, iolist_size(Line1) + 1),
- ?line ok = io:format(Fd3, "~s", [Line1]),
- ?line ok = io:format(Fd3, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd3),
+ ok = io:format(Fd3, "~s", [Line1]),
+ ok = io:format(Fd3, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd3),
- ?line {ok, Fd4} = ?FILE_MODULE:open(Allocate, [write, binary]),
+ {ok, Fd4} = ?FILE_MODULE:open(Allocate, [write, binary]),
allocate_and_assert(Fd4, 1, 4 * iolist_size([Line1, Line2])),
- ?line ok = io:format(Fd4, "~s", [Line1]),
- ?line ok = io:format(Fd4, "~s", [Line2]),
- ?line ok = ?FILE_MODULE:close(Fd4),
+ ok = io:format(Fd4, "~s", [Line1]),
+ ok = io:format(Fd4, "~s", [Line2]),
+ ok = ?FILE_MODULE:close(Fd4),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
allocate_and_assert(Fd, Offset, Length) ->
- % Just verify that calls to ?PRIM_FILE:allocate/3 don't crash or have
- % any other negative side effect. We can't really asssert against a
- % specific return value, because support for file space pre-allocation
- % depends on the OS, OS version and underlying filesystem.
- %
- % The Linux kernel added support for fallocate() in version 2.6.23,
- % which currently works only for the ext4, ocfs2, xfs and btrfs file
- % systems. posix_fallocate() is available in glibc as of version
- % 2.1.94, but it was buggy until glibc version 2.7.
- %
- % Mac OS X, as of version 10.3, supports the fcntl operation F_PREALLOCATE.
- %
- % Solaris supports posix_fallocate() but only for the UFS file system
- % apparently (not supported for ZFS).
- %
- % FreeBSD 9.0 is the first FreeBSD release supporting posix_fallocate().
- %
- % For Windows there's apparently no way to pre-allocate file space, at
- % least with same semantics as posix_fallocate(), fallocate() and
- % fcntl F_PREALLOCATE.
+ %% Just verify that calls to ?PRIM_FILE:allocate/3 don't crash or have
+ %% any other negative side effect. We can't really asssert against a
+ %% specific return value, because support for file space pre-allocation
+ %% depends on the OS, OS version and underlying filesystem.
+ %%
+ %% The Linux kernel added support for fallocate() in version 2.6.23,
+ %% which currently works only for the ext4, ocfs2, xfs and btrfs file
+ %% systems. posix_fallocate() is available in glibc as of version
+ %% 2.1.94, but it was buggy until glibc version 2.7.
+ %%
+ %% Mac OS X, as of version 10.3, supports the fcntl operation F_PREALLOCATE.
+ %%
+ %% Solaris supports posix_fallocate() but only for the UFS file system
+ %% apparently (not supported for ZFS).
+ %%
+ %% FreeBSD 9.0 is the first FreeBSD release supporting posix_fallocate().
+ %%
+ %% For Windows there's apparently no way to pre-allocate file space, at
+ %% least with same semantics as posix_fallocate(), fallocate() and
+ %% fcntl F_PREALLOCATE.
Result = ?FILE_MODULE:allocate(Fd, Offset, Length),
case os:type() of
{win32, _} ->
- ?line {error, enotsup} = Result;
+ {error, enotsup} = Result;
_ ->
- ?line _ = Result
+ _ = Result
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-delete(suite) -> [];
-delete(doc) -> [];
delete(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_delete.fil"),
- ?line {ok, Fd1} = ?FILE_MODULE:open(Name, write),
- ?line io:format(Fd1,"ok.\n",[]),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_delete.fil"),
+ {ok, Fd1} = ?FILE_MODULE:open(Name, write),
+ io:format(Fd1,"ok.\n",[]),
+ ok = ?FILE_MODULE:close(Fd1),
%% Check that the file is readable
- ?line {ok, Fd2} = ?FILE_MODULE:open(Name, read),
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line ok = ?FILE_MODULE:delete(Name),
+ {ok, Fd2} = ?FILE_MODULE:open(Name, read),
+ ok = ?FILE_MODULE:close(Fd2),
+ ok = ?FILE_MODULE:delete(Name),
%% Check that the file is not readable anymore
- ?line {error, _} = ?FILE_MODULE:open(Name, read),
+ {error, _} = ?FILE_MODULE:open(Name, read),
%% Try deleting a nonexistent file
- ?line {error, enoent} = ?FILE_MODULE:delete(Name),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ {error, enoent} = ?FILE_MODULE:delete(Name),
+ [] = flush(),
ok.
-rename(suite) ->[];
-rename(doc) ->[];
rename(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line FileName1 = atom_to_list(?MODULE)++"_rename.fil",
- ?line FileName2 = atom_to_list(?MODULE)++"_rename.ful",
- ?line Name1 = filename:join(RootDir, FileName1),
- ?line Name2 = filename:join(RootDir, FileName2),
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name1,write),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ FileName1 = atom_to_list(?MODULE)++"_rename.fil",
+ FileName2 = atom_to_list(?MODULE)++"_rename.ful",
+ Name1 = filename:join(RootDir, FileName1),
+ Name2 = filename:join(RootDir, FileName2),
+ {ok,Fd1} = ?FILE_MODULE:open(Name1,write),
+ ok = ?FILE_MODULE:close(Fd1),
%% Rename, and check that id really changed name
- ?line ok = ?FILE_MODULE:rename(Name1,Name2),
- ?line {error, _} = ?FILE_MODULE:open(Name1,read),
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name2,read),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ ok = ?FILE_MODULE:rename(Name1,Name2),
+ {error, _} = ?FILE_MODULE:open(Name1,read),
+ {ok,Fd2} = ?FILE_MODULE:open(Name2,read),
+ ok = ?FILE_MODULE:close(Fd2),
%% Try renaming something to itself
- ?line ok = ?FILE_MODULE:rename(Name2,Name2),
+ ok = ?FILE_MODULE:rename(Name2,Name2),
%% Try renaming something that doesn't exist
- ?line {error, enoent} = ?FILE_MODULE:rename(Name1,Name2),
+ {error, enoent} = ?FILE_MODULE:rename(Name1,Name2),
%% Try renaming to something else than a string
- ?line {error, badarg} = ?FILE_MODULE:rename(Name1,{foo,bar}),
-
+ {error, badarg} = ?FILE_MODULE:rename(Name1,{foo,bar}),
+
%% Move between directories
- ?line DirName1 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_rename_dir"),
- ?line DirName2 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_second_rename_dir"),
- ?line Name1foo = filename:join(DirName1, "foo.fil"),
- ?line Name2foo = filename:join(DirName2, "foo.fil"),
- ?line Name2bar = filename:join(DirName2, "bar.dir"),
- ?line ok = ?FILE_MODULE:make_dir(DirName1),
+ DirName1 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_rename_dir"),
+ DirName2 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_second_rename_dir"),
+ Name1foo = filename:join(DirName1, "foo.fil"),
+ Name2foo = filename:join(DirName2, "foo.fil"),
+ Name2bar = filename:join(DirName2, "bar.dir"),
+ ok = ?FILE_MODULE:make_dir(DirName1),
%% The name has to include the full file name, path in not enough
- ?line expect({error, eisdir}, {error, eexist},
- ?FILE_MODULE:rename(Name2,DirName1)),
- ?line ok = ?FILE_MODULE:rename(Name2, Name1foo),
+ expect({error, eisdir}, {error, eexist},
+ ?FILE_MODULE:rename(Name2,DirName1)),
+ ok = ?FILE_MODULE:rename(Name2, Name1foo),
%% Now rename the directory
- ?line ok = ?FILE_MODULE:rename(DirName1,DirName2),
+ ok = ?FILE_MODULE:rename(DirName1,DirName2),
%% And check that the file is there now
- ?line {ok,Fd3} = ?FILE_MODULE:open(Name2foo, read),
- ?line ok = ?FILE_MODULE:close(Fd3),
+ {ok,Fd3} = ?FILE_MODULE:open(Name2foo, read),
+ ok = ?FILE_MODULE:close(Fd3),
%% Try some dirty things now: move the directory into itself
- ?line {error, Msg1} = ?FILE_MODULE:rename(DirName2, Name2bar),
- ?line io:format("Errmsg1: ~p",[Msg1]),
+ {error, Msg1} = ?FILE_MODULE:rename(DirName2, Name2bar),
+ io:format("Errmsg1: ~p",[Msg1]),
%% move dir into a file in itself
- ?line {error, Msg2} = ?FILE_MODULE:rename(DirName2, Name2foo),
- ?line io:format("Errmsg2: ~p",[Msg2]),
+ {error, Msg2} = ?FILE_MODULE:rename(DirName2, Name2foo),
+ io:format("Errmsg2: ~p",[Msg2]),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-names(suite) -> [];
-names(doc) -> [];
names(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line RootDir = ?config(priv_dir,Config),
- ?line FileName = "foo1.fil",
- ?line Name1 = filename:join(RootDir, FileName),
- ?line Name2 = [RootDir,"/","foo1",".","fil"],
- ?line Name3 = [RootDir,"/",foo,$1,[[[],[],'.']],"f",il],
- ?line {ok,Fd0} = ?FILE_MODULE:open(Name1,write),
- ?line ok = ?FILE_MODULE:close(Fd0),
+ RootDir = proplists:get_value(priv_dir,Config),
+ FileName = "foo1.fil",
+ Name1 = filename:join(RootDir, FileName),
+ Name2 = [RootDir,"/","foo1",".","fil"],
+ Name3 = [RootDir,"/",foo,$1,[[[],[],'.']],"f",il],
+ {ok,Fd0} = ?FILE_MODULE:open(Name1,write),
+ ok = ?FILE_MODULE:close(Fd0),
%% Try some file names
- ?line {ok,Fd1} = ?FILE_MODULE:open(Name1,read),
- ?line ok = ?FILE_MODULE:close(Fd1),
- ?line {ok,Fd2f} = ?FILE_MODULE:open(lists:flatten(Name2),read),
- ?line ok = ?FILE_MODULE:close(Fd2f),
- ?line {ok,Fd2} = ?FILE_MODULE:open(Name2,read),
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line {ok,Fd3} = ?FILE_MODULE:open(Name3,read),
- ?line ok = ?FILE_MODULE:close(Fd3),
- case length(Name1) > 255 of
- true ->
- io:format("Path too long for an atom:\n\n~p\n", [Name1]);
- false ->
- Name4 = list_to_atom(Name1),
- {ok,Fd4} = ?FILE_MODULE:open(Name4,read),
- ok = ?FILE_MODULE:close(Fd4)
- end,
+ {ok,Fd1} = ?FILE_MODULE:open(Name1,read),
+ ok = ?FILE_MODULE:close(Fd1),
+ {ok,Fd2f} = ?FILE_MODULE:open(lists:flatten(Name2),read),
+ ok = ?FILE_MODULE:close(Fd2f),
+ {ok,Fd2} = ?FILE_MODULE:open(Name2,read),
+ ok = ?FILE_MODULE:close(Fd2),
+ {ok,Fd3} = ?FILE_MODULE:open(Name3,read),
+ ok = ?FILE_MODULE:close(Fd3),
+ case length(Name1) > 255 of
+ true ->
+ io:format("Path too long for an atom:\n\n~p\n", [Name1]);
+ false ->
+ Name4 = list_to_atom(Name1),
+ {ok,Fd4} = ?FILE_MODULE:open(Name4,read),
+ ok = ?FILE_MODULE:close(Fd4)
+ end,
%% Try some path names
- ?line Path1 = RootDir,
- ?line Path2 = [RootDir],
- ?line Path3 = ['',[],[RootDir,[[]]]],
- ?line {ok,Fd11,_} = ?FILE_MODULE:path_open([Path1],FileName,read),
- ?line ok = ?FILE_MODULE:close(Fd11),
- ?line {ok,Fd12,_} = ?FILE_MODULE:path_open([Path2],FileName,read),
- ?line ok = ?FILE_MODULE:close(Fd12),
- ?line {ok,Fd13,_} = ?FILE_MODULE:path_open([Path3],FileName,read),
- ?line ok = ?FILE_MODULE:close(Fd13),
- case length(Path1) > 255 of
- true->
- io:format("Path too long for an atom:\n\n~p\n", [Path1]);
- false ->
- Path4 = list_to_atom(Path1),
- {ok,Fd14,_} = ?FILE_MODULE:path_open([Path4],FileName,read),
- ok = ?FILE_MODULE:close(Fd14)
- end,
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ Path1 = RootDir,
+ Path2 = [RootDir],
+ Path3 = ['',[],[RootDir,[[]]]],
+ {ok,Fd11,_} = ?FILE_MODULE:path_open([Path1],FileName,read),
+ ok = ?FILE_MODULE:close(Fd11),
+ {ok,Fd12,_} = ?FILE_MODULE:path_open([Path2],FileName,read),
+ ok = ?FILE_MODULE:close(Fd12),
+ {ok,Fd13,_} = ?FILE_MODULE:path_open([Path3],FileName,read),
+ ok = ?FILE_MODULE:close(Fd13),
+ case length(Path1) > 255 of
+ true->
+ io:format("Path too long for an atom:\n\n~p\n", [Path1]);
+ false ->
+ Path4 = list_to_atom(Path1),
+ {ok,Fd14,_} = ?FILE_MODULE:path_open([Path4],FileName,read),
+ ok = ?FILE_MODULE:close(Fd14)
+ end,
+ [] = flush(),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-e_delete(suite) -> [];
-e_delete(doc) -> [];
e_delete(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line Base = filename:join(RootDir,
- atom_to_list(?MODULE)++"_e_delete"),
- ?line ok = ?FILE_MODULE:make_dir(Base),
+ RootDir = proplists:get_value(priv_dir, Config),
+ Base = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_e_delete"),
+ ok = ?FILE_MODULE:make_dir(Base),
%% Delete a non-existing file.
- ?line {error, enoent} =
+ {error, enoent} =
?FILE_MODULE:delete(filename:join(Base, "non_existing")),
%% Delete a directory.
- ?line {error, eperm} = ?FILE_MODULE:delete(Base),
+ {error, eperm} = ?FILE_MODULE:delete(Base),
%% Use a path-name with a non-directory component.
- ?line Afile = filename:join(Base, "a_file"),
- ?line ok = ?FILE_MODULE:write_file(Afile, "hello\n"),
- ?line {error, E} =
+ Afile = filename:join(Base, "a_file"),
+ ok = ?FILE_MODULE:write_file(Afile, "hello\n"),
+ {error, E} =
expect({error, enotdir}, {error, enoent},
?FILE_MODULE:delete(filename:join(Afile, "another_file"))),
- ?line io:format("Result: ~p~n", [E]),
+ io:format("Result: ~p~n", [E]),
%% No permission.
- ?line case os:type() of
- {win32, _} ->
- %% Remove a character device.
- ?line {error, eacces} = ?FILE_MODULE:delete("nul");
- _ ->
- ?line ?FILE_MODULE:write_file_info(
- Base, #file_info {mode=0}),
- ?line {error, eacces} = ?FILE_MODULE:delete(Afile),
- ?line ?FILE_MODULE:write_file_info(
- Base, #file_info {mode=8#600})
- end,
+ case os:type() of
+ {win32, _} ->
+ %% Remove a character device.
+ {error, eacces} = ?FILE_MODULE:delete("nul");
+ _ ->
+ ?FILE_MODULE:write_file_info(
+ Base, #file_info {mode=0}),
+ {error, eacces} = ?FILE_MODULE:delete(Afile),
+ ?FILE_MODULE:write_file_info(
+ Base, #file_info {mode=8#600})
+ end,
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%%% FreeBSD gives EEXIST when renaming a file to an empty dir, although the
@@ -2278,13 +2111,10 @@ e_delete(Config) when is_list(Config) ->
%%% (What about FreeBSD? We store our nightly build results on a FreeBSD
%%% file system, that's what.)
-e_rename(suite) -> [];
-e_rename(doc) -> [];
e_rename(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
Base = filename:join(RootDir,
- atom_to_list(?MODULE)++"_e_rename"),
+ atom_to_list(?MODULE)++"_e_rename"),
ok = ?FILE_MODULE:make_dir(Base),
%% Create an empty directory.
@@ -2295,15 +2125,15 @@ e_rename(Config) when is_list(Config) ->
NonEmptyDir = filename:join(Base, "non_empty_dir"),
ok = ?FILE_MODULE:make_dir(NonEmptyDir),
ok = ?FILE_MODULE:write_file(
- filename:join(NonEmptyDir, "a_file"),
- "hello\n"),
+ filename:join(NonEmptyDir, "a_file"),
+ "hello\n"),
%% Create another non-empty directory.
ADirectory = filename:join(Base, "a_directory"),
ok = ?FILE_MODULE:make_dir(ADirectory),
ok = ?FILE_MODULE:write_file(
- filename:join(ADirectory, "a_file"),
- "howdy\n\n"),
+ filename:join(ADirectory, "a_file"),
+ "howdy\n\n"),
%% Create a data file.
File = filename:join(Base, "just_a_file"),
@@ -2317,15 +2147,15 @@ e_rename(Config) when is_list(Config) ->
%% Move Base into Base/new_name.
{error, einval} =
- ?FILE_MODULE:rename(Base, filename:join(Base, "new_name")),
+ ?FILE_MODULE:rename(Base, filename:join(Base, "new_name")),
%% Overwrite a directory with a file.
expect({error, eexist}, %FreeBSD (?)
- {error, eisdir},
- ?FILE_MODULE:rename(File, EmptyDir)),
+ {error, eisdir},
+ ?FILE_MODULE:rename(File, EmptyDir)),
expect({error, eexist}, %FreeBSD (?)
- {error, eisdir},
- ?FILE_MODULE:rename(File, NonEmptyDir)),
+ {error, eisdir},
+ ?FILE_MODULE:rename(File, NonEmptyDir)),
%% Move a non-existing file.
NonExistingFile = filename:join(Base, "non_existing_file"),
@@ -2333,8 +2163,8 @@ e_rename(Config) when is_list(Config) ->
%% Overwrite a file with a directory.
expect({error, eexist}, %FreeBSD (?)
- {error, enotdir},
- ?FILE_MODULE:rename(ADirectory, File)),
+ {error, enotdir},
+ ?FILE_MODULE:rename(ADirectory, File)),
%% Move a file to another filesystem.
%% XXX - This test case is bogus. We cannot be guaranteed that
@@ -2343,49 +2173,42 @@ e_rename(Config) when is_list(Config) ->
%%
%% XXX - Gross hack!
Comment = case os:type() of
- {unix, _} ->
- OtherFs = "/tmp",
- NameOnOtherFs = filename:join(OtherFs, filename:basename(File)),
- {ok, Com} = case ?FILE_MODULE:rename(File, NameOnOtherFs) of
- {error, exdev} ->
- %% The file could be in
- %% the same filesystem!
- {ok, ok};
- ok ->
- {ok, {comment,
- "Moving between filesystems "
- "suceeded, files are probably "
- "in the same filesystem!"}};
- {error, eperm} ->
- {ok, {comment, "SBS! You don't "
- "have the permission to do "
- "this test!"}};
- Else ->
- Else
- end,
- Com;
- {win32, _} ->
- %% At least Windows NT can
- %% successfully move a file to
- %% another drive.
- ok;
- {ose, _} ->
- %% disabled for now
- ok
- end,
+ {unix, _} ->
+ OtherFs = "/tmp",
+ NameOnOtherFs = filename:join(OtherFs, filename:basename(File)),
+ {ok, Com} = case ?FILE_MODULE:rename(File, NameOnOtherFs) of
+ {error, exdev} ->
+ %% The file could be in
+ %% the same filesystem!
+ {ok, ok};
+ ok ->
+ {ok, {comment,
+ "Moving between filesystems "
+ "suceeded, files are probably "
+ "in the same filesystem!"}};
+ {error, eperm} ->
+ {ok, {comment, "SBS! You don't "
+ "have the permission to do "
+ "this test!"}};
+ Else ->
+ Else
+ end,
+ Com;
+ {win32, _} ->
+ %% At least Windows NT can
+ %% successfully move a file to
+ %% another drive.
+ ok
+ end,
[] = flush(),
- test_server:timetrap_cancel(Dog),
Comment.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-e_make_dir(suite) -> [];
-e_make_dir(doc) -> [];
e_make_dir(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
Base = filename:join(RootDir,
- atom_to_list(?MODULE)++"_e_make_dir"),
+ atom_to_list(?MODULE)++"_e_make_dir"),
ok = ?FILE_MODULE:make_dir(Base),
%% A component of the path does not exist.
@@ -2408,18 +2231,14 @@ e_make_dir(Config) when is_list(Config) ->
?FILE_MODULE:write_file_info(Base, #file_info {mode=0}),
{error, eacces} = ?FILE_MODULE:make_dir(filename:join(Base, "xxxx")),
?FILE_MODULE:write_file_info(
- Base, #file_info {mode=8#600})
+ Base, #file_info {mode=8#600})
end,
- test_server:timetrap_cancel(Dog),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-e_del_dir(suite) -> [];
-e_del_dir(doc) -> [];
e_del_dir(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
Base = test_server:temp_name(filename:join(RootDir, "e_del_dir")),
io:format("Base: ~p", [Base]),
ok = ?FILE_MODULE:make_dir(Base),
@@ -2432,21 +2251,21 @@ e_del_dir(Config) when is_list(Config) ->
Afile = filename:join(Base, "a_directory"),
ok = ?FILE_MODULE:write_file(Afile, "hello\n"),
{error, E1} = expect({error, enotdir}, {error, enoent},
- ?FILE_MODULE:del_dir(
- filename:join(Afile, "another_directory"))),
+ ?FILE_MODULE:del_dir(
+ filename:join(Afile, "another_directory"))),
io:format("Result: ~p", [E1]),
%% Delete a non-empty directory.
{error, E2} = expect({error, enotempty}, {error, eexist}, {error, eacces},
- ?FILE_MODULE:del_dir(Base)),
+ ?FILE_MODULE:del_dir(Base)),
io:format("Result: ~p", [E2]),
%% Remove the current directory.
{error, E3} = expect({error, einval},
- {error, eperm}, % Linux and DUX
- {error, eacces},
- {error, ebusy},
- ?FILE_MODULE:del_dir(".")),
+ {error, eperm}, % Linux and DUX
+ {error, eacces},
+ {error, ebusy},
+ ?FILE_MODULE:del_dir(".")),
io:format("Result: ~p", [E3]),
%% No permission.
@@ -2461,7 +2280,6 @@ e_del_dir(Config) when is_list(Config) ->
?FILE_MODULE:write_file_info( Base, #file_info {mode=8#600})
end,
[] = flush(),
- test_server:timetrap_cancel(Dog),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2470,35 +2288,35 @@ e_del_dir(Config) when is_list(Config) ->
%% Trying reading and positioning from a compressed file.
read_compressed_cooked(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line Real = filename:join(Data, "realmen.html.gz"),
- ?line {ok, Fd} = ?FILE_MODULE:open(Real, [read,compressed]),
- ?line try_read_file_list(Fd).
+ Data = proplists:get_value(data_dir, Config),
+ Real = filename:join(Data, "realmen.html.gz"),
+ {ok, Fd} = ?FILE_MODULE:open(Real, [read,compressed]),
+ try_read_file_list(Fd).
read_compressed_cooked_binary(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line Real = filename:join(Data, "realmen.html.gz"),
- ?line {ok, Fd} = ?FILE_MODULE:open(Real, [read,compressed,binary]),
- ?line try_read_file_binary(Fd).
+ Data = proplists:get_value(data_dir, Config),
+ Real = filename:join(Data, "realmen.html.gz"),
+ {ok, Fd} = ?FILE_MODULE:open(Real, [read,compressed,binary]),
+ try_read_file_binary(Fd).
%% Trying reading and positioning from an uncompressed file,
%% but with the compressed flag given.
read_not_really_compressed(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line Priv = ?config(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
%% The file realmen.html might have got CRs added (by WinZip).
%% Remove them, or the file positions will not be correct.
- ?line Real = filename:join(Data, "realmen.html"),
- ?line RealPriv = filename:join(Priv,
- atom_to_list(?MODULE)++"_realmen.html"),
- ?line {ok, RealDataBin} = ?FILE_MODULE:read_file(Real),
- ?line RealData = remove_crs(binary_to_list(RealDataBin), []),
- ?line ok = ?FILE_MODULE:write_file(RealPriv, RealData),
- ?line {ok, Fd} = ?FILE_MODULE:open(RealPriv, [read, compressed]),
- ?line try_read_file_list(Fd).
+ Real = filename:join(Data, "realmen.html"),
+ RealPriv = filename:join(Priv,
+ atom_to_list(?MODULE)++"_realmen.html"),
+ {ok, RealDataBin} = ?FILE_MODULE:read_file(Real),
+ RealData = remove_crs(binary_to_list(RealDataBin), []),
+ ok = ?FILE_MODULE:write_file(RealPriv, RealData),
+ {ok, Fd} = ?FILE_MODULE:open(RealPriv, [read, compressed]),
+ try_read_file_list(Fd).
remove_crs([$\r|Rest], Result) ->
remove_crs(Rest, Result);
@@ -2508,146 +2326,134 @@ remove_crs([], Result) ->
lists:reverse(Result).
try_read_file_list(Fd) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
-
%% Seek to the current position (nothing should happen).
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, 0),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, {cur, 0}),
+ {ok, 0} = ?FILE_MODULE:position(Fd, 0),
+ {ok, 0} = ?FILE_MODULE:position(Fd, {cur, 0}),
%% Read a few lines from a compressed file.
- ?line ShouldBe = "<TITLE>Real Programmers Don't Use PASCAL</TITLE>\n",
- ?line ShouldBe = io:get_line(Fd, ''),
+ ShouldBe = "<TITLE>Real Programmers Don't Use PASCAL</TITLE>\n",
+ ShouldBe = io:get_line(Fd, ''),
%% Now seek forward.
- ?line {ok, 381} = ?FILE_MODULE:position(Fd, 381),
- ?line Back = "Back in the good old days -- the \"Golden Era\" " ++
+ {ok, 381} = ?FILE_MODULE:position(Fd, 381),
+ Back = "Back in the good old days -- the \"Golden Era\" " ++
"of computers, it was\n",
- ?line Back = io:get_line(Fd, ''),
+ Back = io:get_line(Fd, ''),
%% Try to search forward relative to the current position.
- ?line {ok, CurPos} = ?FILE_MODULE:position(Fd, {cur, 0}),
- ?line RealPos = 4273,
- ?line {ok, RealPos} = ?FILE_MODULE:position(Fd, {cur, RealPos-CurPos}),
- ?line RealProg = "<LI> Real Programmers aren't afraid to use GOTOs.\n",
- ?line RealProg = io:get_line(Fd, ''),
+ {ok, CurPos} = ?FILE_MODULE:position(Fd, {cur, 0}),
+ RealPos = 4273,
+ {ok, RealPos} = ?FILE_MODULE:position(Fd, {cur, RealPos-CurPos}),
+ RealProg = "<LI> Real Programmers aren't afraid to use GOTOs.\n",
+ RealProg = io:get_line(Fd, ''),
%% Seek backward.
- ?line AfterTitle = length("<TITLE>"),
- ?line {ok, AfterTitle} = ?FILE_MODULE:position(Fd, AfterTitle),
- ?line Title = "Real Programmers Don't Use PASCAL</TITLE>\n",
- ?line Title = io:get_line(Fd, ''),
+ AfterTitle = length("<TITLE>"),
+ {ok, AfterTitle} = ?FILE_MODULE:position(Fd, AfterTitle),
+ Title = "Real Programmers Don't Use PASCAL</TITLE>\n",
+ Title = io:get_line(Fd, ''),
%% Seek past the end of the file.
- ?line {ok, _} = ?FILE_MODULE:position(Fd, 25000),
+ {ok, _} = ?FILE_MODULE:position(Fd, 25000),
%% Done.
- ?line ?FILE_MODULE:close(Fd),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ ?FILE_MODULE:close(Fd),
+ [] = flush(),
ok.
try_read_file_binary(Fd) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
-
%% Seek to the current position (nothing should happen).
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, 0),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, {cur, 0}),
+ {ok, 0} = ?FILE_MODULE:position(Fd, 0),
+ {ok, 0} = ?FILE_MODULE:position(Fd, {cur, 0}),
%% Read a few lines from a compressed file.
- ?line ShouldBe = <<"<TITLE>Real Programmers Don't Use PASCAL</TITLE>\n">>,
- ?line ShouldBe = io:get_line(Fd, ''),
+ ShouldBe = <<"<TITLE>Real Programmers Don't Use PASCAL</TITLE>\n">>,
+ ShouldBe = io:get_line(Fd, ''),
%% Now seek forward.
- ?line {ok, 381} = ?FILE_MODULE:position(Fd, 381),
- ?line Back = <<"Back in the good old days -- the \"Golden Era\" "
- "of computers, it was\n">>,
- ?line Back = io:get_line(Fd, ''),
+ {ok, 381} = ?FILE_MODULE:position(Fd, 381),
+ Back = <<"Back in the good old days -- the \"Golden Era\" "
+ "of computers, it was\n">>,
+ Back = io:get_line(Fd, ''),
%% Try to search forward relative to the current position.
- ?line {ok, CurPos} = ?FILE_MODULE:position(Fd, {cur, 0}),
- ?line RealPos = 4273,
- ?line {ok, RealPos} = ?FILE_MODULE:position(Fd, {cur, RealPos-CurPos}),
- ?line RealProg = <<"<LI> Real Programmers aren't afraid to use GOTOs.\n">>,
- ?line RealProg = io:get_line(Fd, ''),
+ {ok, CurPos} = ?FILE_MODULE:position(Fd, {cur, 0}),
+ RealPos = 4273,
+ {ok, RealPos} = ?FILE_MODULE:position(Fd, {cur, RealPos-CurPos}),
+ RealProg = <<"<LI> Real Programmers aren't afraid to use GOTOs.\n">>,
+ RealProg = io:get_line(Fd, ''),
%% Seek backward.
- ?line AfterTitle = length("<TITLE>"),
- ?line {ok, AfterTitle} = ?FILE_MODULE:position(Fd, AfterTitle),
- ?line Title = <<"Real Programmers Don't Use PASCAL</TITLE>\n">>,
- ?line Title = io:get_line(Fd, ''),
+ AfterTitle = length("<TITLE>"),
+ {ok, AfterTitle} = ?FILE_MODULE:position(Fd, AfterTitle),
+ Title = <<"Real Programmers Don't Use PASCAL</TITLE>\n">>,
+ Title = io:get_line(Fd, ''),
%% Done.
- ?line ?FILE_MODULE:close(Fd),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ ?FILE_MODULE:close(Fd),
+ [] = flush(),
ok.
read_cooked_tar_problem(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
+ Data = proplists:get_value(data_dir, Config),
+ ProblemFile = filename:join(Data, "cooked_tar_problem.tar.gz"),
+ {ok,Fd} = ?FILE_MODULE:open(ProblemFile, [read,compressed,binary]),
+
+ {ok,34304} = file:position(Fd, 34304),
+ {ok,Bin} = file:read(Fd, 512),
+ 512 = byte_size(Bin),
- ?line Data = ?config(data_dir, Config),
- ?line ProblemFile = filename:join(Data, "cooked_tar_problem.tar.gz"),
- ?line {ok,Fd} = ?FILE_MODULE:open(ProblemFile, [read,compressed,binary]),
+ {ok,34304+512+1024} = file:position(Fd, {cur,1024}),
- ?line {ok,34304} = file:position(Fd, 34304),
- ?line {ok,Bin} = file:read(Fd, 512),
- ?line 512 = byte_size(Bin),
-
- ?line {ok,34304+512+1024} = file:position(Fd, {cur,1024}),
-
- ?line ok = file:close(Fd),
+ ok = file:close(Fd),
- ?line test_server:timetrap_cancel(Dog),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-write_compressed(suite) -> [];
-write_compressed(doc) -> [];
write_compressed(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Priv = ?config(priv_dir, Config),
- ?line MyFile = filename:join(Priv,
- atom_to_list(?MODULE)++"_test.gz"),
+ Priv = proplists:get_value(priv_dir, Config),
+ MyFile = filename:join(Priv,
+ atom_to_list(?MODULE)++"_test.gz"),
%% Write a file.
- ?line {ok, Fd} = ?FILE_MODULE:open(MyFile, [write, compressed]),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, 0),
- ?line Prefix = "hello\n",
- ?line End = "end\n",
- ?line ok = io:put_chars(Fd, Prefix),
- ?line {ok, 143} = ?FILE_MODULE:position(Fd, 143),
- ?line ok = io:put_chars(Fd, End),
- ?line ok = ?FILE_MODULE:close(Fd),
+ {ok, Fd} = ?FILE_MODULE:open(MyFile, [write, compressed]),
+ {ok, 0} = ?FILE_MODULE:position(Fd, 0),
+ Prefix = "hello\n",
+ End = "end\n",
+ ok = io:put_chars(Fd, Prefix),
+ {ok, 143} = ?FILE_MODULE:position(Fd, 143),
+ ok = io:put_chars(Fd, End),
+ ok = ?FILE_MODULE:close(Fd),
%% Read the file and verify the contents.
- ?line {ok, Fd1} = ?FILE_MODULE:open(MyFile, [read, compressed]),
- ?line Prefix = io:get_line(Fd1, ''),
- ?line Second = lists:duplicate(143-length(Prefix), 0) ++ End,
- ?line Second = io:get_line(Fd1, ''),
- ?line ok = ?FILE_MODULE:close(Fd1),
+ {ok, Fd1} = ?FILE_MODULE:open(MyFile, [read, compressed]),
+ Prefix = io:get_line(Fd1, ''),
+ Second = lists:duplicate(143-length(Prefix), 0) ++ End,
+ Second = io:get_line(Fd1, ''),
+ ok = ?FILE_MODULE:close(Fd1),
%% Verify successful compression by uncompressing the file
%% using zlib:gunzip/1.
- ?line {ok,Contents} = file:read_file(MyFile),
- ?line <<"hello\n",0:137/unit:8,"end\n">> = zlib:gunzip(Contents),
+ {ok,Contents} = file:read_file(MyFile),
+ <<"hello\n",0:137/unit:8,"end\n">> = zlib:gunzip(Contents),
%% Ensure that the file is compressed.
@@ -2656,99 +2462,92 @@ write_compressed(Config) when is_list(Config) ->
{ok, #file_info{size=Size}} when Size < TotalSize ->
ok;
{ok, #file_info{size=Size}} when Size == TotalSize ->
- test_server:fail(file_not_compressed)
+ ct:fail(file_not_compressed)
end,
%% Write again to ensure that the file is truncated.
- ?line {ok, Fd2} = ?FILE_MODULE:open(MyFile, [write, compressed]),
- ?line NewString = "aaaaaaaaaaa",
- ?line ok = io:put_chars(Fd2, NewString),
- ?line ok = ?FILE_MODULE:close(Fd2),
- ?line {ok, Fd3} = ?FILE_MODULE:open(MyFile, [read, compressed]),
- ?line {ok, NewString} = ?FILE_MODULE:read(Fd3, 1024),
- ?line ok = ?FILE_MODULE:close(Fd3),
+ {ok, Fd2} = ?FILE_MODULE:open(MyFile, [write, compressed]),
+ NewString = "aaaaaaaaaaa",
+ ok = io:put_chars(Fd2, NewString),
+ ok = ?FILE_MODULE:close(Fd2),
+ {ok, Fd3} = ?FILE_MODULE:open(MyFile, [read, compressed]),
+ {ok, NewString} = ?FILE_MODULE:read(Fd3, 1024),
+ ok = ?FILE_MODULE:close(Fd3),
%% Done.
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
catenated_gzips(Config) when is_list(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line MyFile = filename:join(Priv, ?MODULE_STRING++"_test.gz"),
+ Priv = proplists:get_value(priv_dir, Config),
+ MyFile = filename:join(Priv, ?MODULE_STRING++"_test.gz"),
First = "Hello, all good men going to search parties. ",
Second = "Now I really need your help.",
All = iolist_to_binary([First|Second]),
- ?line Cat = [zlib:gzip(First),zlib:gzip(Second)],
-
- ?line ok = file:write_file(MyFile, Cat),
+ Cat = [zlib:gzip(First),zlib:gzip(Second)],
- ?line {ok,Fd} = file:open(MyFile, [read,compressed,binary]),
- ?line {ok,All} = file:read(Fd, 100000),
- ?line ok = file:close(Fd),
+ ok = file:write_file(MyFile, Cat),
+
+ {ok,Fd} = file:open(MyFile, [read,compressed,binary]),
+ {ok,All} = file:read(Fd, 100000),
+ ok = file:close(Fd),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-compress_errors(suite) -> [];
-compress_errors(doc) -> [];
compress_errors(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line DataDir =
+ DataDir =
filename:dirname(
- filename:join(?config(data_dir, Config), "x")),
- ?line DataDirSlash = DataDir++"/",
- ?line {error, enoent} = ?FILE_MODULE:open("non_existing__",
- [compressed, read]),
- ?line {error, einval} = ?FILE_MODULE:open("non_existing__",
- [compressed, read, write]),
- ?line {error, einval} = ?FILE_MODULE:open("non_existing__",
- [compressed, read, append]),
- ?line {error, einval} = ?FILE_MODULE:open("non_existing__",
- [compressed, write, append]),
- ?line {error, E1} = ?FILE_MODULE:open(DataDir, [compressed, read]),
- ?line {error, E2} = ?FILE_MODULE:open(DataDirSlash, [compressed, read]),
- ?line {error, E3} = ?FILE_MODULE:open(DataDir, [compressed, write]),
- ?line {error, E4} = ?FILE_MODULE:open(DataDirSlash, [compressed, write]),
- ?line {eisdir,eisdir,eisdir,eisdir} = {E1,E2,E3,E4},
+ filename:join(proplists:get_value(data_dir, Config), "x")),
+ DataDirSlash = DataDir++"/",
+ {error, enoent} = ?FILE_MODULE:open("non_existing__",
+ [compressed, read]),
+ {error, einval} = ?FILE_MODULE:open("non_existing__",
+ [compressed, read, write]),
+ {error, einval} = ?FILE_MODULE:open("non_existing__",
+ [compressed, read, append]),
+ {error, einval} = ?FILE_MODULE:open("non_existing__",
+ [compressed, write, append]),
+ {error, E1} = ?FILE_MODULE:open(DataDir, [compressed, read]),
+ {error, E2} = ?FILE_MODULE:open(DataDirSlash, [compressed, read]),
+ {error, E3} = ?FILE_MODULE:open(DataDir, [compressed, write]),
+ {error, E4} = ?FILE_MODULE:open(DataDirSlash, [compressed, write]),
+ {eisdir,eisdir,eisdir,eisdir} = {E1,E2,E3,E4},
%% Read a corrupted .gz file.
- ?line Corrupted = filename:join(DataDir, "corrupted.gz"),
- ?line {ok, Fd} = ?FILE_MODULE:open(Corrupted, [read, compressed]),
- ?line {error, eio} = ?FILE_MODULE:read(Fd, 100),
- ?line ?FILE_MODULE:close(Fd),
+ Corrupted = filename:join(DataDir, "corrupted.gz"),
+ {ok, Fd} = ?FILE_MODULE:open(Corrupted, [read, compressed]),
+ {error, eio} = ?FILE_MODULE:read(Fd, 100),
+ ?FILE_MODULE:close(Fd),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-compress_async_crash(suite) -> [];
-compress_async_crash(doc) -> [];
compress_async_crash(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line Path = filename:join(DataDir, "test.gz"),
+ DataDir = proplists:get_value(data_dir, Config),
+ Path = filename:join(DataDir, "test.gz"),
ExpectedData = <<"qwerty">>,
- ?line _ = ?FILE_MODULE:delete(Path),
- ?line {ok, Fd} = ?FILE_MODULE:open(Path, [write, binary, compressed]),
- ?line ok = ?FILE_MODULE:write(Fd, ExpectedData),
- ?line ok = ?FILE_MODULE:close(Fd),
+ _ = ?FILE_MODULE:delete(Path),
+ {ok, Fd} = ?FILE_MODULE:open(Path, [write, binary, compressed]),
+ ok = ?FILE_MODULE:write(Fd, ExpectedData),
+ ok = ?FILE_MODULE:close(Fd),
- % Test that when using async thread pool, the emulator doesn't crash
- % when the efile port driver is stopped while a compressed file operation
- % is in progress (being carried by an async thread).
- ?line ok = compress_async_crash_loop(10000, Path, ExpectedData),
- ?line ok = ?FILE_MODULE:delete(Path),
+ %% Test that when using async thread pool, the emulator doesn't crash
+ %% when the efile port driver is stopped while a compressed file operation
+ %% is in progress (being carried by an async thread).
+ ok = compress_async_crash_loop(10000, Path, ExpectedData),
+ ok = ?FILE_MODULE:delete(Path),
ok.
compress_async_crash_loop(0, _Path, _ExpectedData) ->
@@ -2756,35 +2555,35 @@ compress_async_crash_loop(0, _Path, _ExpectedData) ->
compress_async_crash_loop(N, Path, ExpectedData) ->
Parent = self(),
{Pid, Ref} = spawn_monitor(
- fun() ->
- ?line {ok, Fd} = ?FILE_MODULE:open(
- Path, [read, compressed, raw, binary]),
- Len = byte_size(ExpectedData),
- Parent ! {self(), continue},
- ?line {ok, ExpectedData} = ?FILE_MODULE:read(Fd, Len),
- ?line ok = ?FILE_MODULE:close(Fd),
- receive foobar -> ok end
- end),
+ fun() ->
+ {ok, Fd} = ?FILE_MODULE:open(
+ Path, [read, compressed, raw, binary]),
+ Len = byte_size(ExpectedData),
+ Parent ! {self(), continue},
+ {ok, ExpectedData} = ?FILE_MODULE:read(Fd, Len),
+ ok = ?FILE_MODULE:close(Fd),
+ receive foobar -> ok end
+ end),
receive
{Pid, continue} ->
exit(Pid, shutdown),
receive
{'DOWN', Ref, _, _, Reason} ->
- ?line shutdown = Reason
+ shutdown = Reason
end;
{'DOWN', Ref, _, _, Reason2} ->
- test_server:fail({worker_exited, Reason2})
+ ct:fail({worker_exited, Reason2})
after 60000 ->
exit(Pid, shutdown),
erlang:demonitor(Ref, [flush]),
- test_server:fail(worker_timeout)
+ ct:fail(worker_timeout)
end,
compress_async_crash_loop(N - 1, Path, ExpectedData).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
unicode(Config) when is_list(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
Name = filename:join(Dir, "data-utf8.txt"),
Txt = lists:seq(128, 255),
D = unicode:characters_to_binary(Txt, latin1, latin1),
@@ -2817,53 +2616,46 @@ unicode(Config) when is_list(Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-altname(doc) ->
- "Test the file:altname/1 function";
-altname(suite) ->
- [];
+%% Test the file:altname/1 function.
altname(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- "long alternative path name with spaces"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
- ?line Name = filename:join(NewDir, "a_file_with_long_name"),
- ?line ShortName = filename:join(NewDir, "short"),
- ?line NonexName = filename:join(NewDir, "nonexistent"),
- ?line ok = ?FILE_MODULE:write_file(Name, "some contents\n"),
- ?line ok = ?FILE_MODULE:write_file(ShortName, "some contents\n"),
- ?line Result =
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ "long alternative path name with spaces"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+ Name = filename:join(NewDir, "a_file_with_long_name"),
+ ShortName = filename:join(NewDir, "short"),
+ NonexName = filename:join(NewDir, "nonexistent"),
+ ok = ?FILE_MODULE:write_file(Name, "some contents\n"),
+ ok = ?FILE_MODULE:write_file(ShortName, "some contents\n"),
+ Result =
case ?FILE_MODULE:altname(NewDir) of
{error, enotsup} ->
{skipped, "Altname not supported on this platform"};
{ok, "LONGAL~1"} ->
- ?line {ok, "A_FILE~1"} = ?FILE_MODULE:altname(Name),
- ?line {ok, "C:/"} = ?FILE_MODULE:altname("C:/"),
- ?line {ok, "C:\\"} = ?FILE_MODULE:altname("C:\\"),
- ?line {error,enoent} = ?FILE_MODULE:altname(NonexName),
- ?line {ok, "short"} = ?FILE_MODULE:altname(ShortName),
+ {ok, "A_FILE~1"} = ?FILE_MODULE:altname(Name),
+ {ok, "C:/"} = ?FILE_MODULE:altname("C:/"),
+ {ok, "C:\\"} = ?FILE_MODULE:altname("C:\\"),
+ {error,enoent} = ?FILE_MODULE:altname(NonexName),
+ {ok, "short"} = ?FILE_MODULE:altname(ShortName),
ok
end,
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ [] = flush(),
Result.
-make_link(doc) -> "Test creating a hard link.";
-make_link(suite) -> [];
+%% Test creating a hard link.
make_link(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_make_link"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
-
- ?line Name = filename:join(NewDir, "a_file"),
- ?line ok = ?FILE_MODULE:write_file(Name, "some contents\n"),
-
- ?line Alias = filename:join(NewDir, "an_alias"),
- ?line Result =
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_make_link"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+
+ Name = filename:join(NewDir, "a_file"),
+ ok = ?FILE_MODULE:write_file(Name, "some contents\n"),
+
+ Alias = filename:join(NewDir, "an_alias"),
+ Result =
case ?FILE_MODULE:make_link(Name, Alias) of
{error, enotsup} ->
{skipped, "Links not supported on this platform"};
@@ -2873,53 +2665,45 @@ make_link(Config) when is_list(Config) ->
%% which should in behave exactly as
%% ?FILE_MODULE:read_file_info/1
%% since they are not used on symbolic links.
-
- ?line {ok, Info} = ?FILE_MODULE:read_link_info(Name),
+
+ {ok, Info} = ?FILE_MODULE:read_link_info(Name),
{ok,Info} = ?FILE_MODULE:read_link_info(Name, [raw]),
- ?line {ok, Info} = ?FILE_MODULE:read_link_info(Alias),
+ {ok, Info} = ?FILE_MODULE:read_link_info(Alias),
{ok,Info} = ?FILE_MODULE:read_link_info(Alias, [raw]),
- ?line #file_info{links = 2, type = regular} = Info,
- ?line {error, eexist} =
+ #file_info{links = 2, type = regular} = Info,
+ {error, eexist} =
?FILE_MODULE:make_link(Name, Alias),
ok
end,
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+
+ [] = flush(),
Result.
-read_link_info_for_non_link(doc) ->
- "Test that reading link info for an ordinary file or directory works "
- "(on all platforms).";
-read_link_info_for_non_link(suite) -> [];
+%% Test that reading link info for an ordinary file or directory works
+%% (on all platforms).
read_link_info_for_non_link(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
-
- ?line {ok, #file_info{type=directory}} =
+ {ok, #file_info{type=directory}} =
?FILE_MODULE:read_link_info("."),
{ok, #file_info{type=directory}} = ?FILE_MODULE:read_link_info(".", [raw]),
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+
+ [] = flush(),
ok.
-symlinks(doc) -> "Test operations on symbolic links (for Unix).";
-symlinks(suite) -> [];
+%% Test operations on symbolic links (for Unix).
symlinks(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line {error, _} = ?FILE_MODULE:read_link(lists:duplicate(10000,$a)),
+ {error, _} = ?FILE_MODULE:read_link(lists:duplicate(10000,$a)),
{error, _} = ?FILE_MODULE:read_link_all(lists:duplicate(10000,$a)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_symlinks"),
- ?line ok = ?FILE_MODULE:make_dir(NewDir),
-
- ?line Name = filename:join(NewDir, "a_plain_file"),
- ?line ok = ?FILE_MODULE:write_file(Name, "some stupid content\n"),
-
- ?line Alias = filename:join(NewDir, "a_symlink_alias"),
- ?line Result =
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_symlinks"),
+ ok = ?FILE_MODULE:make_dir(NewDir),
+
+ Name = filename:join(NewDir, "a_plain_file"),
+ ok = ?FILE_MODULE:write_file(Name, "some stupid content\n"),
+
+ Alias = filename:join(NewDir, "a_symlink_alias"),
+ Result =
case ?FILE_MODULE:make_symlink(Name, Alias) of
{error, enotsup} ->
{skipped, "Links not supported on this platform"};
@@ -2927,41 +2711,37 @@ symlinks(Config) when is_list(Config) ->
{win32,_} = os:type(),
{skipped, "Windows user not privileged to create symlinks"};
ok ->
- ?line {ok, Info1} = ?FILE_MODULE:read_file_info(Name),
+ {ok, Info1} = ?FILE_MODULE:read_file_info(Name),
{ok,Info1} = ?FILE_MODULE:read_file_info(Name, [raw]),
- ?line {ok, Info1} = ?FILE_MODULE:read_file_info(Alias),
+ {ok, Info1} = ?FILE_MODULE:read_file_info(Alias),
{ok,Info1} = ?FILE_MODULE:read_file_info(Alias, [raw]),
- ?line {ok, Info1} = ?FILE_MODULE:read_link_info(Name),
+ {ok, Info1} = ?FILE_MODULE:read_link_info(Name),
{ok,Info1} = ?FILE_MODULE:read_link_info(Name, [raw]),
- ?line #file_info{links = 1, type = regular} = Info1,
-
- ?line {ok, Info2} = ?FILE_MODULE:read_link_info(Alias),
+ #file_info{links = 1, type = regular} = Info1,
+
+ {ok, Info2} = ?FILE_MODULE:read_link_info(Alias),
{ok,Info2} = ?FILE_MODULE:read_link_info(Alias, [raw]),
- ?line #file_info{links=1, type=symlink} = Info2,
- ?line {ok, Name} = ?FILE_MODULE:read_link(Alias),
+ #file_info{links=1, type=symlink} = Info2,
+ {ok, Name} = ?FILE_MODULE:read_link(Alias),
{ok, Name} = ?FILE_MODULE:read_link_all(Alias),
%% If all is good, delete dir again (avoid hanging dir on windows)
rm_rf(?FILE_MODULE,NewDir),
ok
- end,
-
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ end,
+
+ [] = flush(),
Result.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-copy(doc) -> [];
-copy(suite) -> [];
copy(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
%% Create a text file.
- ?line Name1 = filename:join(RootDir, atom_to_list(?MODULE)++"_copy_1.txt"),
- ?line Line = "The quick brown fox jumps over a lazy dog. 0123456789\n",
- ?line Len = length(Line),
- ?line {ok, Handle1} = ?FILE_MODULE:open(Name1, [write]),
- ?line {_, Size1} =
+ Name1 = filename:join(RootDir, atom_to_list(?MODULE)++"_copy_1.txt"),
+ Line = "The quick brown fox jumps over a lazy dog. 0123456789\n",
+ Len = length(Line),
+ {ok, Handle1} = ?FILE_MODULE:open(Name1, [write]),
+ {_, Size1} =
iterate({0, 0},
done,
fun({_, S}) when S >= 128*1024 ->
@@ -2971,45 +2751,44 @@ copy(Config) when is_list(Config) ->
ok = ?FILE_MODULE:write(Handle1, [H, " ", Line]),
{N + 1, S + length(H) + 1 + Len}
end),
- ?line ?FILE_MODULE:close(Handle1),
+ ?FILE_MODULE:close(Handle1),
%% Make a copy
- ?line Name2 = filename:join(RootDir, atom_to_list(?MODULE)++"_copy_2.txt"),
- ?line {ok, Size1} = ?FILE_MODULE:copy(Name1, Name2),
+ Name2 = filename:join(RootDir, atom_to_list(?MODULE)++"_copy_2.txt"),
+ {ok, Size1} = ?FILE_MODULE:copy(Name1, Name2),
%% Concatenate 1
- ?line Name3 = filename:join(RootDir, atom_to_list(?MODULE)++"_copy_3.txt"),
- ?line {ok, Handle3} = ?FILE_MODULE:open(Name3, [raw, write, binary]),
- ?line {ok, Size1} = ?FILE_MODULE:copy(Name1, Handle3),
- ?line {ok, Handle2} = ?FILE_MODULE:open(Name2, [read, binary]),
- ?line {ok, Size1} = ?FILE_MODULE:copy(Handle2, Handle3),
- ?line ok = ?FILE_MODULE:close(Handle3),
- ?line ok = ?FILE_MODULE:close(Handle2),
+ Name3 = filename:join(RootDir, atom_to_list(?MODULE)++"_copy_3.txt"),
+ {ok, Handle3} = ?FILE_MODULE:open(Name3, [raw, write, binary]),
+ {ok, Size1} = ?FILE_MODULE:copy(Name1, Handle3),
+ {ok, Handle2} = ?FILE_MODULE:open(Name2, [read, binary]),
+ {ok, Size1} = ?FILE_MODULE:copy(Handle2, Handle3),
+ ok = ?FILE_MODULE:close(Handle3),
+ ok = ?FILE_MODULE:close(Handle2),
%% Concatenate 2
- ?line Name4 = filename:join(RootDir, atom_to_list(?MODULE)++"_copy_4.txt"),
- ?line {ok, Handle4} = ?FILE_MODULE:open(Name4, [write, binary]),
- ?line {ok, Size1} = ?FILE_MODULE:copy(Name1, Handle4),
- ?line {ok, Handle5} = ?FILE_MODULE:open(Name2, [raw, read, binary]),
- ?line {ok, Size1} = ?FILE_MODULE:copy(Handle5, Handle4),
- ?line ok = ?FILE_MODULE:close(Handle5),
- ?line ok = ?FILE_MODULE:close(Handle4),
+ Name4 = filename:join(RootDir, atom_to_list(?MODULE)++"_copy_4.txt"),
+ {ok, Handle4} = ?FILE_MODULE:open(Name4, [write, binary]),
+ {ok, Size1} = ?FILE_MODULE:copy(Name1, Handle4),
+ {ok, Handle5} = ?FILE_MODULE:open(Name2, [raw, read, binary]),
+ {ok, Size1} = ?FILE_MODULE:copy(Handle5, Handle4),
+ ok = ?FILE_MODULE:close(Handle5),
+ ok = ?FILE_MODULE:close(Handle4),
%% %% Just for test of the test
- %% ?line {ok, Handle2q} = ?FILE_MODULE:open(Name2, [write, append]),
- %% ?line ok = ?FILE_MODULE:write(Handle2q, "q"),
- %% ?line ok = ?FILE_MODULE:close(Handle2q),
+ %% {ok, Handle2q} = ?FILE_MODULE:open(Name2, [write, append]),
+ %% ok = ?FILE_MODULE:write(Handle2q, "q"),
+ %% ok = ?FILE_MODULE:close(Handle2q),
%% Compare the files
- ?line {ok, Handle1a} = ?FILE_MODULE:open(Name1, [raw, read]),
- ?line {ok, Handle2a} = ?FILE_MODULE:open(Name2, [raw, read]),
- ?line true = stream_cmp(fd_stream_factory([Handle1a]),
- fd_stream_factory([Handle2a])),
- ?line {ok, 0} = ?FILE_MODULE:position(Handle1a, 0),
- ?line {ok, 0} = ?FILE_MODULE:position(Handle2a, 0),
- ?line {ok, Handle3a} = ?FILE_MODULE:open(Name3, [raw, read]),
- ?line true = stream_cmp(fd_stream_factory([Handle1a, Handle2a]),
- fd_stream_factory([Handle2a])),
- ?line ok = ?FILE_MODULE:close(Handle1a),
- ?line ok = ?FILE_MODULE:close(Handle2a),
- ?line ok = ?FILE_MODULE:close(Handle3a),
- ?line [] = flush(),
- ?line test_server:timetrap_cancel(Dog),
+ {ok, Handle1a} = ?FILE_MODULE:open(Name1, [raw, read]),
+ {ok, Handle2a} = ?FILE_MODULE:open(Name2, [raw, read]),
+ true = stream_cmp(fd_stream_factory([Handle1a]),
+ fd_stream_factory([Handle2a])),
+ {ok, 0} = ?FILE_MODULE:position(Handle1a, 0),
+ {ok, 0} = ?FILE_MODULE:position(Handle2a, 0),
+ {ok, Handle3a} = ?FILE_MODULE:open(Name3, [raw, read]),
+ true = stream_cmp(fd_stream_factory([Handle1a, Handle2a]),
+ fd_stream_factory([Handle2a])),
+ ok = ?FILE_MODULE:close(Handle1a),
+ ok = ?FILE_MODULE:close(Handle2a),
+ ok = ?FILE_MODULE:close(Handle3a),
+ [] = flush(),
ok.
@@ -3030,7 +2809,7 @@ fd_stream_factory([Fd | T] = L) ->
end
end.
-
+
stream_cmp(F1, F2) when is_function(F1), is_function(F2) ->
stream_cmp(F1(), F2());
@@ -3055,80 +2834,75 @@ stream_cmp([H | T1], [H | T2]) ->
%% Test the get_cwd(), open(), and copy() file server calls.
new_slave(_RootDir, Cwd) ->
- ?line L = "qwertyuiopasdfghjklzxcvbnm",
- ?line N = length(L),
- ?line {ok, Cwd} = ?FILE_MODULE:get_cwd(),
- ?line {error, enotsup} = ?FILE_MODULE:get_cwd("C:"), % Unix only testcase
- ?line {ok, FD1} = ?FILE_MODULE:open("file1.txt", write),
- ?line ok = ?FILE_MODULE:close(FD1),
- ?line {ok, FD2} = ?FILE_MODULE:open("file1.txt",
- [write, append,
- binary, compressed,
- delayed_write,
- {delayed_write, 0, 0},
- read_ahead,
- {read_ahead, 0}]),
- ?line ok = ?FILE_MODULE:write(FD2, L),
- ?line ok = ?FILE_MODULE:close(FD2),
- ?line {ok, N2} = ?FILE_MODULE:copy("file1.txt", "file2.txt"),
- ?line io:format("Size ~p, compressed ~p.~n", [N, N2]),
- ?line {ok, FD3} = ?FILE_MODULE:open("file2.txt",
- [binary, compressed]),
+ L = "qwertyuiopasdfghjklzxcvbnm",
+ N = length(L),
+ {ok, Cwd} = ?FILE_MODULE:get_cwd(),
+ {error, enotsup} = ?FILE_MODULE:get_cwd("C:"), % Unix only testcase
+ {ok, FD1} = ?FILE_MODULE:open("file1.txt", write),
+ ok = ?FILE_MODULE:close(FD1),
+ {ok, FD2} = ?FILE_MODULE:open("file1.txt",
+ [write, append,
+ binary, compressed,
+ delayed_write,
+ {delayed_write, 0, 0},
+ read_ahead,
+ {read_ahead, 0}]),
+ ok = ?FILE_MODULE:write(FD2, L),
+ ok = ?FILE_MODULE:close(FD2),
+ {ok, N2} = ?FILE_MODULE:copy("file1.txt", "file2.txt"),
+ io:format("Size ~p, compressed ~p.~n", [N, N2]),
+ {ok, FD3} = ?FILE_MODULE:open("file2.txt",
+ [binary, compressed]),
%% The file_io_server will translate the binary into a list
- ?line {ok, L} = ?FILE_MODULE:read(FD3, N+1),
- ?line ok = ?FILE_MODULE:close(FD3),
+ {ok, L} = ?FILE_MODULE:read(FD3, N+1),
+ ok = ?FILE_MODULE:close(FD3),
%%
- ?line ok = ?FILE_MODULE:delete("file1.txt"),
- ?line ok = ?FILE_MODULE:delete("file2.txt"),
- ?line [] = flush(),
+ ok = ?FILE_MODULE:delete("file1.txt"),
+ ok = ?FILE_MODULE:delete("file2.txt"),
+ [] = flush(),
ok.
%% Test the get_cwd() and open() file server calls.
old_slave(_RootDir, Cwd) ->
- ?line L = "qwertyuiopasdfghjklzxcvbnm",
- ?line N = length(L),
- ?line {ok, Cwd} = ?FILE_MODULE:get_cwd(),
- ?line {error, enotsup} = ?FILE_MODULE:get_cwd("C:"), % Unix only testcase
- ?line {ok, FD1} = ?FILE_MODULE:open("file1.txt", write),
- ?line ok = ?FILE_MODULE:close(FD1),
- ?line {ok, FD2} = ?FILE_MODULE:open("file1.txt",
- [write, binary, compressed]),
- ?line ok = ?FILE_MODULE:write(FD2, L),
- ?line ok = ?FILE_MODULE:close(FD2),
- ?line {ok, FD3} = ?FILE_MODULE:open("file1.txt", [write, append]),
- ?line ok = ?FILE_MODULE:close(FD3),
- ?line {ok, FD4} = ?FILE_MODULE:open("file1.txt",
- [binary, compressed]),
+ L = "qwertyuiopasdfghjklzxcvbnm",
+ N = length(L),
+ {ok, Cwd} = ?FILE_MODULE:get_cwd(),
+ {error, enotsup} = ?FILE_MODULE:get_cwd("C:"), % Unix only testcase
+ {ok, FD1} = ?FILE_MODULE:open("file1.txt", write),
+ ok = ?FILE_MODULE:close(FD1),
+ {ok, FD2} = ?FILE_MODULE:open("file1.txt",
+ [write, binary, compressed]),
+ ok = ?FILE_MODULE:write(FD2, L),
+ ok = ?FILE_MODULE:close(FD2),
+ {ok, FD3} = ?FILE_MODULE:open("file1.txt", [write, append]),
+ ok = ?FILE_MODULE:close(FD3),
+ {ok, FD4} = ?FILE_MODULE:open("file1.txt",
+ [binary, compressed]),
%% The file_io_server will translate the binary into a list
- ?line {ok, L} = ?FILE_MODULE:read(FD4, N+1),
- ?line ok = ?FILE_MODULE:close(FD4),
+ {ok, L} = ?FILE_MODULE:read(FD4, N+1),
+ ok = ?FILE_MODULE:close(FD4),
%%
- ?line ok = ?FILE_MODULE:delete("file1.txt"),
- ?line [] = flush(),
+ ok = ?FILE_MODULE:delete("file1.txt"),
+ [] = flush(),
ok.
run_test(Test, Args) ->
- ?line case (catch apply(?MODULE, Test, Args)) of
- {'EXIT', _} = Exit ->
- {done, Exit, get(test_server_loc)};
- Result ->
- {done, Result}
- end.
+ case (catch apply(?MODULE, Test, Args)) of
+ {'EXIT', _} = Exit ->
+ {done, Exit, get(test_server_loc)};
+ Result ->
+ {done, Result}
+ end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-delayed_write(suite) ->
- [];
-delayed_write(doc) ->
- ["Tests the file open option {delayed_write, Size, Delay}"];
+%% Tests the file open option {delayed_write, Size, Delay}.
delayed_write(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:seconds(20)),
-
- RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
File = filename:join(RootDir,
- atom_to_list(?MODULE)++"_delayed_write.txt"),
+ atom_to_list(?MODULE)++"_delayed_write.txt"),
Data1 = "asdfghjkl",
Data2 = "qwertyuio",
Data3 = "zxcvbnm,.",
@@ -3143,18 +2917,18 @@ delayed_write(Config) when is_list(Config) ->
{ok, Fd1} =
?FILE_MODULE:open(File, [write, {delayed_write, Size+1, 2000}]),
ok = ?FILE_MODULE:write(Fd1, Data1),
- ?t:sleep(1000), % Just in case the file system is slow
+ timer:sleep(1000), % Just in case the file system is slow
{ok, Fd2} = ?FILE_MODULE:open(File, [read]),
eof = ?FILE_MODULE:read(Fd2, 1),
ok = ?FILE_MODULE:write(Fd1, Data1), % Data flush on size
- ?t:sleep(1000), % Just in case the file system is slow
+ timer:sleep(1000), % Just in case the file system is slow
{ok, Data1Data1} = ?FILE_MODULE:pread(Fd2, bof, 2*Size+1),
ok = ?FILE_MODULE:write(Fd1, Data1),
- ?t:sleep(3000), % Wait until data flush on timeout
+ timer:sleep(3000), % Wait until data flush on timeout
{ok, Data1Data1Data1} = ?FILE_MODULE:pread(Fd2, bof, 3*Size+1),
ok = ?FILE_MODULE:write(Fd1, Data1),
ok = ?FILE_MODULE:close(Fd1), % Data flush on close
- ?t:sleep(1000), % Just in case the file system is slow
+ timer:sleep(1000), % Just in case the file system is slow
{ok, Data1Data1Data1Data1} = ?FILE_MODULE:pread(Fd2, bof, 4*Size+1),
ok = ?FILE_MODULE:close(Fd2),
%%
@@ -3162,33 +2936,33 @@ delayed_write(Config) when is_list(Config) ->
%% raw file, default parameters.
Parent = self(),
Fun = fun() ->
- Child = self(),
- Test =
- fun () ->
- {ok, Fd} = ?FILE_MODULE:open(File,
- [raw, write, delayed_write]),
- ok = ?FILE_MODULE:write(Fd, Data1),
- Parent ! {Child, wrote},
- receive
- {Parent, continue, Reason} ->
- {ok, Reason}
- end
- end,
- case (catch Test()) of
- {ok, Reason} -> exit(Reason);
- Unknown ->
- exit({Unknown, get(test_server_loc)})
- end
- end,
+ Child = self(),
+ Test =
+ fun () ->
+ {ok, Fd} = ?FILE_MODULE:open(File,
+ [raw, write, delayed_write]),
+ ok = ?FILE_MODULE:write(Fd, Data1),
+ Parent ! {Child, wrote},
+ receive
+ {Parent, continue, Reason} ->
+ {ok, Reason}
+ end
+ end,
+ case (catch Test()) of
+ {ok, Reason} -> exit(Reason);
+ Unknown ->
+ exit({Unknown, get(test_server_loc)})
+ end
+ end,
Child1 = spawn(Fun),
Mref1 = erlang:monitor(process, Child1),
receive
{Child1, wrote} ->
ok;
{'DOWN', Mref1, _, _, _} = Down1a ->
- ?t:fail(Down1a)
+ ct:fail(Down1a)
end,
- ?t:sleep(1000), % Just in case the file system is slow
+ timer:sleep(1000), % Just in case the file system is slow
{ok, Fd3} = ?FILE_MODULE:open(File, [read]),
eof = ?FILE_MODULE:read(Fd3, 1),
Child1 ! {Parent, continue, normal},
@@ -3196,9 +2970,9 @@ delayed_write(Config) when is_list(Config) ->
{'DOWN', Mref1, process, Child1, normal} ->
ok;
{'DOWN', Mref1, _, _, _} = Down1b ->
- ?t:fail(Down1b)
+ ct:fail(Down1b)
end,
- ?t:sleep(1000), % Just in case the file system is slow
+ timer:sleep(1000), % Just in case the file system is slow
{ok, Data1} = ?FILE_MODULE:pread(Fd3, bof, Size+1),
ok = ?FILE_MODULE:close(Fd3),
%%
@@ -3209,9 +2983,9 @@ delayed_write(Config) when is_list(Config) ->
{Child2, wrote} ->
ok;
{'DOWN', Mref2, _, _, _} = Down2a ->
- ?t:fail(Down2a)
+ ct:fail(Down2a)
end,
- ?t:sleep(1000), % Just in case the file system is slow
+ timer:sleep(1000), % Just in case the file system is slow
{ok, Fd4} = ?FILE_MODULE:open(File, [read]),
eof = ?FILE_MODULE:read(Fd4, 1),
Child2 ! {Parent, continue, kill},
@@ -3219,15 +2993,15 @@ delayed_write(Config) when is_list(Config) ->
{'DOWN', Mref2, process, Child2, kill} ->
ok;
{'DOWN', Mref2, _, _, _} = Down2b ->
- ?t:fail(Down2b)
+ ct:fail(Down2b)
end,
- ?t:sleep(1000), % Just in case the file system is slow
+ timer:sleep(1000), % Just in case the file system is slow
eof = ?FILE_MODULE:pread(Fd4, bof, 1),
ok = ?FILE_MODULE:close(Fd4),
%%
%% Test if file position works with delayed_write
{ok, Fd5} = ?FILE_MODULE:open(File, [raw, read, write,
- delayed_write]),
+ delayed_write]),
ok = ?FILE_MODULE:truncate(Fd5),
ok = ?FILE_MODULE:write(Fd5, [Data1|Data2]),
{ok, 0} = ?FILE_MODULE:position(Fd5, bof),
@@ -3239,93 +3013,82 @@ delayed_write(Config) when is_list(Config) ->
ok = ?FILE_MODULE:close(Fd5),
%%
[] = flush(),
- ?t:timetrap_cancel(Dog),
ok.
-pid2name(doc) -> "Tests file:pid2name/1.";
-pid2name(suite) -> [];
+%% Tests file:pid2name/1.
pid2name(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line Base = test_server:temp_name(
- filename:join(RootDir, "pid2name_")),
- ?line Name1 = [Base, '.txt'],
- ?line Name2 = Base ++ ".txt",
+ RootDir = proplists:get_value(priv_dir, Config),
+ Base = test_server:temp_name(
+ filename:join(RootDir, "pid2name_")),
+ Name1 = [Base, '.txt'],
+ Name2 = Base ++ ".txt",
%%
- ?line {ok, Pid} = file:open(Name1, [write]),
- ?line {ok, Name2} = file:pid2name(Pid),
- ?line undefined = file:pid2name(self()),
- ?line ok = file:close(Pid),
- ?line test_server:sleep(1000),
- ?line false = is_process_alive(Pid),
- ?line undefined = file:pid2name(Pid),
- %%
- ?line test_server:timetrap_cancel(Dog),
+ {ok, Pid} = file:open(Name1, [write]),
+ {ok, Name2} = file:pid2name(Pid),
+ undefined = file:pid2name(self()),
+ ok = file:close(Pid),
+ ct:sleep(1000),
+ false = is_process_alive(Pid),
+ undefined = file:pid2name(Pid),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-read_ahead(suite) ->
- [];
-read_ahead(doc) ->
- ["Tests the file open option {read_ahead, Size}"];
+%% Tests the file open option {read_ahead, Size}.
read_ahead(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(20)),
- %%
- ?line RootDir = ?config(priv_dir, Config),
- ?line File = filename:join(RootDir,
- atom_to_list(?MODULE)++"_read_ahead.txt"),
- ?line Data1 = "asdfghjkl", % Must be
- ?line Data2 = "qwertyuio", % same
- ?line Data3 = "zxcvbnm,.", % length
- ?line Size = length(Data1),
- ?line Size = length(Data2),
- ?line Size = length(Data3),
+ RootDir = proplists:get_value(priv_dir, Config),
+ File = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_read_ahead.txt"),
+ Data1 = "asdfghjkl", % Must be
+ Data2 = "qwertyuio", % same
+ Data3 = "zxcvbnm,.", % length
+ Size = length(Data1),
+ Size = length(Data2),
+ Size = length(Data3),
%%
%% Test caching of normal non-raw file
- ?line {ok, Fd1} = ?FILE_MODULE:open(File, [write]),
- ?line ok = ?FILE_MODULE:write(Fd1, [Data1|Data1]),
- ?line ?t:sleep(1000), % Just in case the file system is slow
- ?line {ok, Fd2} = ?FILE_MODULE:open(File, [read, {read_ahead, 2*Size}]),
- ?line {ok, Data1} = ?FILE_MODULE:read(Fd2, Size),
- ?line ok = ?FILE_MODULE:pwrite(Fd1, Size, Data2),
- ?line ?t:sleep(1000), % Just in case the file system is slow
- ?line {ok, Data1} = ?FILE_MODULE:read(Fd2, Size), % Will read cached data
- ?line Data2Data2Data2 = Data2++Data2++Data2,
- ?line ok = ?FILE_MODULE:pwrite(Fd1, eof, Data2Data2Data2),
- ?line ?t:sleep(1000), % Just in case the file system is slow
- ?line {ok, Data2Data2Data2} =
+ {ok, Fd1} = ?FILE_MODULE:open(File, [write]),
+ ok = ?FILE_MODULE:write(Fd1, [Data1|Data1]),
+ timer:sleep(1000), % Just in case the file system is slow
+ {ok, Fd2} = ?FILE_MODULE:open(File, [read, {read_ahead, 2*Size}]),
+ {ok, Data1} = ?FILE_MODULE:read(Fd2, Size),
+ ok = ?FILE_MODULE:pwrite(Fd1, Size, Data2),
+ timer:sleep(1000), % Just in case the file system is slow
+ {ok, Data1} = ?FILE_MODULE:read(Fd2, Size), % Will read cached data
+ Data2Data2Data2 = Data2++Data2++Data2,
+ ok = ?FILE_MODULE:pwrite(Fd1, eof, Data2Data2Data2),
+ timer:sleep(1000), % Just in case the file system is slow
+ {ok, Data2Data2Data2} =
?FILE_MODULE:read(Fd2, 3*Size), % Read more than cache buffer
- ?line ok = ?FILE_MODULE:close(Fd1),
- ?line ok = ?FILE_MODULE:close(Fd2),
+ ok = ?FILE_MODULE:close(Fd1),
+ ok = ?FILE_MODULE:close(Fd2),
%% Test caching of raw file and default parameters
- ?line {ok, Fd3} = ?FILE_MODULE:open(File, [raw, write]),
- ?line ok = ?FILE_MODULE:write(Fd3, [Data1|Data1]),
- ?line ?t:sleep(1000), % Just in case the file system is slow
- ?line {ok, Fd4} = ?FILE_MODULE:open(File, [raw, read, read_ahead]),
- ?line {ok, Data1} = ?FILE_MODULE:read(Fd4, Size),
- ?line ok = ?FILE_MODULE:pwrite(Fd3, Size, Data2),
- ?line ?t:sleep(1000), % Just in case the file system is slow
- ?line {ok, Data1} = ?FILE_MODULE:read(Fd4, Size), % Will read cached data
- ?line ok = ?FILE_MODULE:close(Fd3),
- ?line ok = ?FILE_MODULE:close(Fd4),
+ {ok, Fd3} = ?FILE_MODULE:open(File, [raw, write]),
+ ok = ?FILE_MODULE:write(Fd3, [Data1|Data1]),
+ timer:sleep(1000), % Just in case the file system is slow
+ {ok, Fd4} = ?FILE_MODULE:open(File, [raw, read, read_ahead]),
+ {ok, Data1} = ?FILE_MODULE:read(Fd4, Size),
+ ok = ?FILE_MODULE:pwrite(Fd3, Size, Data2),
+ timer:sleep(1000), % Just in case the file system is slow
+ {ok, Data1} = ?FILE_MODULE:read(Fd4, Size), % Will read cached data
+ ok = ?FILE_MODULE:close(Fd3),
+ ok = ?FILE_MODULE:close(Fd4),
%% Test if the file position works in combination with read_ahead
- ?line {ok, Fd5} = ?FILE_MODULE:open(File, [raw, read, write, read_ahead]),
- ?line ok = ?FILE_MODULE:truncate(Fd5),
- ?line ok = ?FILE_MODULE:write(Fd5, [Data1,Data1|Data3]),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd5, bof),
- ?line {ok, Data1} = ?FILE_MODULE:read(Fd5, Size),
- ?line ok = ?FILE_MODULE:write(Fd5, Data2),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd5, bof),
- ?line Data1Data2Data3 = Data1++Data2++Data3,
- ?line {ok, Data1Data2Data3} = ?FILE_MODULE:read(Fd5, 3*Size+1),
- ?line ok = ?FILE_MODULE:close(Fd5),
+ {ok, Fd5} = ?FILE_MODULE:open(File, [raw, read, write, read_ahead]),
+ ok = ?FILE_MODULE:truncate(Fd5),
+ ok = ?FILE_MODULE:write(Fd5, [Data1,Data1|Data3]),
+ {ok, 0} = ?FILE_MODULE:position(Fd5, bof),
+ {ok, Data1} = ?FILE_MODULE:read(Fd5, Size),
+ ok = ?FILE_MODULE:write(Fd5, Data2),
+ {ok, 0} = ?FILE_MODULE:position(Fd5, bof),
+ Data1Data2Data3 = Data1++Data2++Data3,
+ {ok, Data1Data2Data3} = ?FILE_MODULE:read(Fd5, 3*Size+1),
+ ok = ?FILE_MODULE:close(Fd5),
%%
- ?line [] = flush(),
- ?line ?t:timetrap_cancel(Dog),
+ [] = flush(),
ok.
@@ -3334,137 +3097,131 @@ read_ahead(Config) when is_list(Config) ->
-segment_read(suite) ->
- [];
-segment_read(doc) ->
- ["Tests the segmenting of large reads"];
+%% Tests the segmenting of large reads.
segment_read(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(60)),
- %%
- ?line Name = filename:join(?config(priv_dir, Config),
- ?MODULE_STRING ++ "_segment_read"),
- ?line SegSize = 256*1024,
- ?line SegCnt = SegSize div 4,
- ?line Cnt = 4 * SegCnt,
- ?line ok = create_file(Name, Cnt),
+ Name = filename:join(proplists:get_value(priv_dir, Config),
+ ?MODULE_STRING ++ "_segment_read"),
+ SegSize = 256*1024,
+ SegCnt = SegSize div 4,
+ Cnt = 4 * SegCnt,
+ ok = create_file(Name, Cnt),
%%
%% read_file/1
%%
- ?line {ok, Bin} = ?FILE_MODULE:read_file(Name),
- ?line true = verify_bin(Bin, 0, Cnt),
+ {ok, Bin} = ?FILE_MODULE:read_file(Name),
+ true = verify_bin(Bin, 0, Cnt),
%%
%% read/2
%%
%% Not segmented
- ?line {ok, FD1} = ?FILE_MODULE:open(Name, [read, raw, binary]),
- ?line {ok, B1a} = ?FILE_MODULE:read(FD1, SegSize),
- ?line {ok, B1b} = ?FILE_MODULE:read(FD1, SegSize),
- ?line {ok, B1c} = ?FILE_MODULE:read(FD1, SegSize),
- ?line {ok, B1d} = ?FILE_MODULE:read(FD1, SegSize),
- ?line ok = ?FILE_MODULE:close(FD1),
- ?line true = verify_bin(B1a, 0*SegCnt, SegCnt),
- ?line true = verify_bin(B1b, 1*SegCnt, SegCnt),
- ?line true = verify_bin(B1c, 2*SegCnt, SegCnt),
- ?line true = verify_bin(B1d, 3*SegCnt, SegCnt),
+ {ok, FD1} = ?FILE_MODULE:open(Name, [read, raw, binary]),
+ {ok, B1a} = ?FILE_MODULE:read(FD1, SegSize),
+ {ok, B1b} = ?FILE_MODULE:read(FD1, SegSize),
+ {ok, B1c} = ?FILE_MODULE:read(FD1, SegSize),
+ {ok, B1d} = ?FILE_MODULE:read(FD1, SegSize),
+ ok = ?FILE_MODULE:close(FD1),
+ true = verify_bin(B1a, 0*SegCnt, SegCnt),
+ true = verify_bin(B1b, 1*SegCnt, SegCnt),
+ true = verify_bin(B1c, 2*SegCnt, SegCnt),
+ true = verify_bin(B1d, 3*SegCnt, SegCnt),
%%
%% Segmented
- ?line {ok, FD2} = ?FILE_MODULE:open(Name, [read, raw, binary]),
- ?line {ok, B2a} = ?FILE_MODULE:read(FD2, 1*SegSize),
- ?line {ok, B2b} = ?FILE_MODULE:read(FD2, 2*SegSize),
- ?line {ok, B2c} = ?FILE_MODULE:read(FD2, 2*SegSize),
- ?line ok = ?FILE_MODULE:close(FD2),
- ?line true = verify_bin(B2a, 0*SegCnt, 1*SegCnt),
- ?line true = verify_bin(B2b, 1*SegCnt, 2*SegCnt),
- ?line true = verify_bin(B2c, 3*SegCnt, 1*SegCnt),
+ {ok, FD2} = ?FILE_MODULE:open(Name, [read, raw, binary]),
+ {ok, B2a} = ?FILE_MODULE:read(FD2, 1*SegSize),
+ {ok, B2b} = ?FILE_MODULE:read(FD2, 2*SegSize),
+ {ok, B2c} = ?FILE_MODULE:read(FD2, 2*SegSize),
+ ok = ?FILE_MODULE:close(FD2),
+ true = verify_bin(B2a, 0*SegCnt, 1*SegCnt),
+ true = verify_bin(B2b, 1*SegCnt, 2*SegCnt),
+ true = verify_bin(B2c, 3*SegCnt, 1*SegCnt),
%%
%% pread/3
%%
- ?line {ok, FD3} = ?FILE_MODULE:open(Name, [read, raw, binary]),
+ {ok, FD3} = ?FILE_MODULE:open(Name, [read, raw, binary]),
%%
%% Not segmented
- ?line {ok, B3d} = ?FILE_MODULE:pread(FD3, 3*SegSize, SegSize),
- ?line {ok, B3c} = ?FILE_MODULE:pread(FD3, 2*SegSize, SegSize),
- ?line {ok, B3b} = ?FILE_MODULE:pread(FD3, 1*SegSize, SegSize),
- ?line {ok, B3a} = ?FILE_MODULE:pread(FD3, 0*SegSize, SegSize),
- ?line true = verify_bin(B3a, 0*SegCnt, SegCnt),
- ?line true = verify_bin(B3b, 1*SegCnt, SegCnt),
- ?line true = verify_bin(B3c, 2*SegCnt, SegCnt),
- ?line true = verify_bin(B3d, 3*SegCnt, SegCnt),
+ {ok, B3d} = ?FILE_MODULE:pread(FD3, 3*SegSize, SegSize),
+ {ok, B3c} = ?FILE_MODULE:pread(FD3, 2*SegSize, SegSize),
+ {ok, B3b} = ?FILE_MODULE:pread(FD3, 1*SegSize, SegSize),
+ {ok, B3a} = ?FILE_MODULE:pread(FD3, 0*SegSize, SegSize),
+ true = verify_bin(B3a, 0*SegCnt, SegCnt),
+ true = verify_bin(B3b, 1*SegCnt, SegCnt),
+ true = verify_bin(B3c, 2*SegCnt, SegCnt),
+ true = verify_bin(B3d, 3*SegCnt, SegCnt),
%%
%% Segmented
- ?line {ok, B3g} = ?FILE_MODULE:pread(FD3, 3*SegSize, 2*SegSize),
- ?line {ok, B3f} = ?FILE_MODULE:pread(FD3, 1*SegSize, 2*SegSize),
- ?line {ok, B3e} = ?FILE_MODULE:pread(FD3, 0*SegSize, 1*SegSize),
- ?line true = verify_bin(B3e, 0*SegCnt, 1*SegCnt),
- ?line true = verify_bin(B3f, 1*SegCnt, 2*SegCnt),
- ?line true = verify_bin(B3g, 3*SegCnt, 1*SegCnt),
+ {ok, B3g} = ?FILE_MODULE:pread(FD3, 3*SegSize, 2*SegSize),
+ {ok, B3f} = ?FILE_MODULE:pread(FD3, 1*SegSize, 2*SegSize),
+ {ok, B3e} = ?FILE_MODULE:pread(FD3, 0*SegSize, 1*SegSize),
+ true = verify_bin(B3e, 0*SegCnt, 1*SegCnt),
+ true = verify_bin(B3f, 1*SegCnt, 2*SegCnt),
+ true = verify_bin(B3g, 3*SegCnt, 1*SegCnt),
%%
- ?line ok = ?FILE_MODULE:close(FD3),
+ ok = ?FILE_MODULE:close(FD3),
%%
%% pread/2
%%
- ?line {ok, FD5} = ?FILE_MODULE:open(Name, [read, raw, binary]),
+ {ok, FD5} = ?FILE_MODULE:open(Name, [read, raw, binary]),
%%
%% +---+---+---+---+
%% | 4 | 3 | 2 | 1 |
%% +---+---+---+---+
%% < ^ >
- ?line {ok, [B5d, B5c, B5b, B5a]} =
+ {ok, [B5d, B5c, B5b, B5a]} =
?FILE_MODULE:pread(FD5, [{3*SegSize, SegSize},
{2*SegSize, SegSize},
{1*SegSize, SegSize},
{0*SegSize, SegSize}]),
- ?line true = verify_bin(B5a, 0*SegCnt, SegCnt),
- ?line true = verify_bin(B5b, 1*SegCnt, SegCnt),
- ?line true = verify_bin(B5c, 2*SegCnt, SegCnt),
- ?line true = verify_bin(B5d, 3*SegCnt, SegCnt),
+ true = verify_bin(B5a, 0*SegCnt, SegCnt),
+ true = verify_bin(B5b, 1*SegCnt, SegCnt),
+ true = verify_bin(B5c, 2*SegCnt, SegCnt),
+ true = verify_bin(B5d, 3*SegCnt, SegCnt),
%%
%% +---+-------+-------+
%% | 3 | 2 | 1 |
%% +---+-------+-------+
%% < ^ ^ >
- ?line {ok, [B5g, B5f, B5e]} =
+ {ok, [B5g, B5f, B5e]} =
?FILE_MODULE:pread(FD5, [{3*SegSize, 2*SegSize},
{1*SegSize, 2*SegSize},
{0*SegSize, 1*SegSize}]),
- ?line true = verify_bin(B5e, 0*SegCnt, 1*SegCnt),
- ?line true = verify_bin(B5f, 1*SegCnt, 2*SegCnt),
- ?line true = verify_bin(B5g, 3*SegCnt, 1*SegCnt),
+ true = verify_bin(B5e, 0*SegCnt, 1*SegCnt),
+ true = verify_bin(B5f, 1*SegCnt, 2*SegCnt),
+ true = verify_bin(B5g, 3*SegCnt, 1*SegCnt),
%%
%%
%% +-------+-----------+
%% | 2 | 1 |
%% +-------+-----------+
%% < ^ ^ >
- ?line {ok, [B5i, B5h]} =
+ {ok, [B5i, B5h]} =
?FILE_MODULE:pread(FD5, [{2*SegSize, 3*SegSize},
{0*SegSize, 2*SegSize}]),
- ?line true = verify_bin(B5h, 0*SegCnt, 2*SegCnt),
- ?line true = verify_bin(B5i, 2*SegCnt, 2*SegCnt),
+ true = verify_bin(B5h, 0*SegCnt, 2*SegCnt),
+ true = verify_bin(B5i, 2*SegCnt, 2*SegCnt),
%%
%% +-------+---+---+
%% | 3 | 2 | 1 |
%% +-------+---+---+
%% < ^ ^ >
- ?line {ok, [B5l, B5k, B5j]} =
+ {ok, [B5l, B5k, B5j]} =
?FILE_MODULE:pread(FD5, [{3*SegSize, 1*SegSize},
{2*SegSize, 1*SegSize},
{0*SegSize, 2*SegSize}]),
- ?line true = verify_bin(B5j, 0*SegCnt, 2*SegCnt),
- ?line true = verify_bin(B5k, 2*SegCnt, 1*SegCnt),
- ?line true = verify_bin(B5l, 3*SegCnt, 1*SegCnt),
+ true = verify_bin(B5j, 0*SegCnt, 2*SegCnt),
+ true = verify_bin(B5k, 2*SegCnt, 1*SegCnt),
+ true = verify_bin(B5l, 3*SegCnt, 1*SegCnt),
%%
%% Real time response time test.
%%
Req = lists:flatten(lists:duplicate(17,
[{2*SegSize, 2*SegSize},
{0*SegSize, 2*SegSize}])),
- ?line {{ok, _}, Comment} =
+ {{ok, _}, Comment} =
response_analysis(?FILE_MODULE, pread, [FD5, Req]),
- ?line ok = ?FILE_MODULE:close(FD5),
+ ok = ?FILE_MODULE:close(FD5),
%%
- ?line [] = flush(),
- ?line ?t:timetrap_cancel(Dog),
+ [] = flush(),
{comment, Comment}.
@@ -3473,100 +3230,95 @@ segment_read(Config) when is_list(Config) ->
-segment_write(suite) ->
- [];
-segment_write(doc) ->
- ["Tests the segmenting of large writes"];
+%% Tests the segmenting of large writes.
segment_write(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(60)),
- %%
- ?line Name = filename:join(?config(priv_dir, Config),
- ?MODULE_STRING ++ "_segment_write"),
- ?line SegSize = 256*1024,
- ?line SegCnt = SegSize div 4,
- ?line Cnt = 4 * SegCnt,
- ?line Bin = create_bin(0, Cnt),
+ Name = filename:join(proplists:get_value(priv_dir, Config),
+ ?MODULE_STRING ++ "_segment_write"),
+ SegSize = 256*1024,
+ SegCnt = SegSize div 4,
+ Cnt = 4 * SegCnt,
+ Bin = create_bin(0, Cnt),
%%
%% write/2
%%
%% Not segmented
- ?line {ok, FD1} = ?FILE_MODULE:open(Name, [write, raw, binary]),
- ?line ok = ?FILE_MODULE:write(FD1, subbin(Bin, 0*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:write(FD1, subbin(Bin, 1*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:write(FD1, subbin(Bin, 2*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:write(FD1, subbin(Bin, 3*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:close(FD1),
- ?line true = verify_file(Name, Cnt),
+ {ok, FD1} = ?FILE_MODULE:open(Name, [write, raw, binary]),
+ ok = ?FILE_MODULE:write(FD1, subbin(Bin, 0*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:write(FD1, subbin(Bin, 1*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:write(FD1, subbin(Bin, 2*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:write(FD1, subbin(Bin, 3*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:close(FD1),
+ true = verify_file(Name, Cnt),
%%
%% Segmented
- ?line {ok, FD2} = ?FILE_MODULE:open(Name, [write, raw, binary]),
- ?line ok = ?FILE_MODULE:write(FD2, subbin(Bin, 0*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:write(FD2, subbin(Bin, 1*SegSize, 2*SegSize)),
- ?line ok = ?FILE_MODULE:write(FD2, subbin(Bin, 3*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:close(FD2),
- ?line true = verify_file(Name, Cnt),
+ {ok, FD2} = ?FILE_MODULE:open(Name, [write, raw, binary]),
+ ok = ?FILE_MODULE:write(FD2, subbin(Bin, 0*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:write(FD2, subbin(Bin, 1*SegSize, 2*SegSize)),
+ ok = ?FILE_MODULE:write(FD2, subbin(Bin, 3*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:close(FD2),
+ true = verify_file(Name, Cnt),
%%
%% +---+---+---+---+
%% | | | | |
%% +---+---+---+---+
%% < ^ >
- ?line ok = write_file(Name, [subbin(Bin, 0*SegSize, 1*SegSize),
- subbin(Bin, 1*SegSize, 1*SegSize),
- subbin(Bin, 2*SegSize, 1*SegSize),
- subbin(Bin, 3*SegSize, 1*SegSize)]),
- ?line true = verify_file(Name, Cnt),
+ ok = write_file(Name, [subbin(Bin, 0*SegSize, 1*SegSize),
+ subbin(Bin, 1*SegSize, 1*SegSize),
+ subbin(Bin, 2*SegSize, 1*SegSize),
+ subbin(Bin, 3*SegSize, 1*SegSize)]),
+ true = verify_file(Name, Cnt),
%%
%% +---+-------+---+
%% | | | |
%% +---+-------+---+
%% < ^ ^ >
- ?line ok = write_file(Name, [subbin(Bin, 0*SegSize, 1*SegSize),
- subbin(Bin, 1*SegSize, 2*SegSize),
- subbin(Bin, 3*SegSize, 1*SegSize)]),
- ?line true = verify_file(Name, Cnt),
+ ok = write_file(Name, [subbin(Bin, 0*SegSize, 1*SegSize),
+ subbin(Bin, 1*SegSize, 2*SegSize),
+ subbin(Bin, 3*SegSize, 1*SegSize)]),
+ true = verify_file(Name, Cnt),
%%
%% +-------+-------+
%% | | |
%% +-------+-------+
%% < ^ ^ >
- ?line ok = write_file(Name, [subbin(Bin, 0*SegSize, 2*SegSize),
- subbin(Bin, 2*SegSize, 2*SegSize)]),
- ?line true = verify_file(Name, Cnt),
+ ok = write_file(Name, [subbin(Bin, 0*SegSize, 2*SegSize),
+ subbin(Bin, 2*SegSize, 2*SegSize)]),
+ true = verify_file(Name, Cnt),
%%
%% +-------+---+---+
%% | | | |
%% +-------+---+---+
%% < ^ ^ >
- ?line ok = write_file(Name, [subbin(Bin, 0*SegSize, 2*SegSize),
- subbin(Bin, 2*SegSize, 1*SegSize),
- subbin(Bin, 3*SegSize, 1*SegSize)]),
- ?line true = verify_file(Name, Cnt),
+ ok = write_file(Name, [subbin(Bin, 0*SegSize, 2*SegSize),
+ subbin(Bin, 2*SegSize, 1*SegSize),
+ subbin(Bin, 3*SegSize, 1*SegSize)]),
+ true = verify_file(Name, Cnt),
%%
%% pwrite/3
%%
%% Not segmented
- ?line {ok, FD3} = ?FILE_MODULE:open(Name, [write, raw, binary]),
- ?line ok = ?FILE_MODULE:pwrite(FD3, 3*SegSize,
- subbin(Bin, 3*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:pwrite(FD3, 2*SegSize,
- subbin(Bin, 2*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:pwrite(FD3, 1*SegSize,
- subbin(Bin, 1*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:pwrite(FD3, 0*SegSize,
- subbin(Bin, 0*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:close(FD3),
- ?line true = verify_file(Name, Cnt),
+ {ok, FD3} = ?FILE_MODULE:open(Name, [write, raw, binary]),
+ ok = ?FILE_MODULE:pwrite(FD3, 3*SegSize,
+ subbin(Bin, 3*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:pwrite(FD3, 2*SegSize,
+ subbin(Bin, 2*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:pwrite(FD3, 1*SegSize,
+ subbin(Bin, 1*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:pwrite(FD3, 0*SegSize,
+ subbin(Bin, 0*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:close(FD3),
+ true = verify_file(Name, Cnt),
%%
%% Segmented
- ?line {ok, FD4} = ?FILE_MODULE:open(Name, [write, raw, binary]),
- ?line ok = ?FILE_MODULE:pwrite(FD4, 3*SegSize,
- subbin(Bin, 3*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:pwrite(FD4, 1*SegSize,
- subbin(Bin, 1*SegSize, 2*SegSize)),
- ?line ok = ?FILE_MODULE:pwrite(FD4, 0*SegSize,
- subbin(Bin, 0*SegSize, 1*SegSize)),
- ?line ok = ?FILE_MODULE:close(FD4),
- ?line true = verify_file(Name, Cnt),
+ {ok, FD4} = ?FILE_MODULE:open(Name, [write, raw, binary]),
+ ok = ?FILE_MODULE:pwrite(FD4, 3*SegSize,
+ subbin(Bin, 3*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:pwrite(FD4, 1*SegSize,
+ subbin(Bin, 1*SegSize, 2*SegSize)),
+ ok = ?FILE_MODULE:pwrite(FD4, 0*SegSize,
+ subbin(Bin, 0*SegSize, 1*SegSize)),
+ ok = ?FILE_MODULE:close(FD4),
+ true = verify_file(Name, Cnt),
@@ -3574,125 +3326,118 @@ segment_write(Config) when is_list(Config) ->
%% pwrite/2
%%
%% Not segmented
- ?line {ok, FD5} = ?FILE_MODULE:open(Name, [write, raw, binary]),
- ?line ok = ?FILE_MODULE:pwrite(FD5, [{3*SegSize,
- subbin(Bin, 3*SegSize, 1*SegSize)}]),
- ?line ok = ?FILE_MODULE:pwrite(FD5, [{2*SegSize,
- subbin(Bin, 2*SegSize, 1*SegSize)}]),
- ?line ok = ?FILE_MODULE:pwrite(FD5, [{1*SegSize,
- subbin(Bin, 1*SegSize, 1*SegSize)}]),
- ?line ok = ?FILE_MODULE:pwrite(FD5, [{0*SegSize,
- subbin(Bin, 0*SegSize, 1*SegSize)}]),
- ?line ok = ?FILE_MODULE:close(FD5),
- ?line true = verify_file(Name, Cnt),
+ {ok, FD5} = ?FILE_MODULE:open(Name, [write, raw, binary]),
+ ok = ?FILE_MODULE:pwrite(FD5, [{3*SegSize,
+ subbin(Bin, 3*SegSize, 1*SegSize)}]),
+ ok = ?FILE_MODULE:pwrite(FD5, [{2*SegSize,
+ subbin(Bin, 2*SegSize, 1*SegSize)}]),
+ ok = ?FILE_MODULE:pwrite(FD5, [{1*SegSize,
+ subbin(Bin, 1*SegSize, 1*SegSize)}]),
+ ok = ?FILE_MODULE:pwrite(FD5, [{0*SegSize,
+ subbin(Bin, 0*SegSize, 1*SegSize)}]),
+ ok = ?FILE_MODULE:close(FD5),
+ true = verify_file(Name, Cnt),
%%
%% Segmented
- ?line {ok, FD6} = ?FILE_MODULE:open(Name, [write, raw, binary]),
- ?line ok = ?FILE_MODULE:pwrite(FD6, [{3*SegSize,
- subbin(Bin, 3*SegSize, 1*SegSize)}]),
- ?line ok = ?FILE_MODULE:pwrite(FD6, [{1*SegSize,
- subbin(Bin, 1*SegSize, 2*SegSize)}]),
- ?line ok = ?FILE_MODULE:pwrite(FD6, [{0*SegSize,
- subbin(Bin, 0*SegSize, 1*SegSize)}]),
- ?line ok = ?FILE_MODULE:close(FD6),
- ?line true = verify_file(Name, Cnt),
+ {ok, FD6} = ?FILE_MODULE:open(Name, [write, raw, binary]),
+ ok = ?FILE_MODULE:pwrite(FD6, [{3*SegSize,
+ subbin(Bin, 3*SegSize, 1*SegSize)}]),
+ ok = ?FILE_MODULE:pwrite(FD6, [{1*SegSize,
+ subbin(Bin, 1*SegSize, 2*SegSize)}]),
+ ok = ?FILE_MODULE:pwrite(FD6, [{0*SegSize,
+ subbin(Bin, 0*SegSize, 1*SegSize)}]),
+ ok = ?FILE_MODULE:close(FD6),
+ true = verify_file(Name, Cnt),
%%
%% +---+---+---+---+
%% | 4 | 3 | 2 | 1 |
%% +---+---+---+---+
%% < ^ >
- ?line ok = pwrite_file(Name, [{3*SegSize,
- subbin(Bin, 3*SegSize, 1*SegSize)},
- {2*SegSize,
- subbin(Bin, 2*SegSize, 1*SegSize)},
- {1*SegSize,
- subbin(Bin, 1*SegSize, 1*SegSize)},
- {0*SegSize,
- subbin(Bin, 0*SegSize, 1*SegSize)}]),
- ?line true = verify_file(Name, Cnt),
+ ok = pwrite_file(Name, [{3*SegSize,
+ subbin(Bin, 3*SegSize, 1*SegSize)},
+ {2*SegSize,
+ subbin(Bin, 2*SegSize, 1*SegSize)},
+ {1*SegSize,
+ subbin(Bin, 1*SegSize, 1*SegSize)},
+ {0*SegSize,
+ subbin(Bin, 0*SegSize, 1*SegSize)}]),
+ true = verify_file(Name, Cnt),
%%
%% +---+-------+---+
%% | 3 | 2 | 1 |
%% +---+-------+---+
%% < ^ ^ >
- ?line ok = pwrite_file(Name, [{3*SegSize,
- subbin(Bin, 3*SegSize, 1*SegSize)},
- {1*SegSize,
- subbin(Bin, 1*SegSize, 2*SegSize)},
- {0*SegSize,
- subbin(Bin, 0*SegSize, 1*SegSize)}]),
- ?line true = verify_file(Name, Cnt),
+ ok = pwrite_file(Name, [{3*SegSize,
+ subbin(Bin, 3*SegSize, 1*SegSize)},
+ {1*SegSize,
+ subbin(Bin, 1*SegSize, 2*SegSize)},
+ {0*SegSize,
+ subbin(Bin, 0*SegSize, 1*SegSize)}]),
+ true = verify_file(Name, Cnt),
%%
%% +-------+-------+
%% | 2 | 1 |
%% +-------+-------+
%% < ^ ^ >
- ?line ok = pwrite_file(Name, [{2*SegSize,
- subbin(Bin, 2*SegSize, 2*SegSize)},
- {0*SegSize,
- subbin(Bin, 0*SegSize, 2*SegSize)}]),
- ?line true = verify_file(Name, Cnt),
+ ok = pwrite_file(Name, [{2*SegSize,
+ subbin(Bin, 2*SegSize, 2*SegSize)},
+ {0*SegSize,
+ subbin(Bin, 0*SegSize, 2*SegSize)}]),
+ true = verify_file(Name, Cnt),
%%
%% +-------+---+---+
%% | 3 | 2 | 1 |
%% +-------+---+---+
%% < ^ ^ >
- ?line ok = pwrite_file(Name, [{3*SegSize,
- subbin(Bin, 3*SegSize, 1*SegSize)},
- {2*SegSize,
- subbin(Bin, 2*SegSize, 1*SegSize)},
- {0*SegSize,
- subbin(Bin, 0*SegSize, 2*SegSize)}]),
- ?line true = verify_file(Name, Cnt),
+ ok = pwrite_file(Name, [{3*SegSize,
+ subbin(Bin, 3*SegSize, 1*SegSize)},
+ {2*SegSize,
+ subbin(Bin, 2*SegSize, 1*SegSize)},
+ {0*SegSize,
+ subbin(Bin, 0*SegSize, 2*SegSize)}]),
+ true = verify_file(Name, Cnt),
%%
%% Real time response time test.
%%
- ?line {ok, FD7} = ?FILE_MODULE:open(Name, [write, raw, binary]),
+ {ok, FD7} = ?FILE_MODULE:open(Name, [write, raw, binary]),
Req = lists:flatten(lists:duplicate(17,
[{2*SegSize,
subbin(Bin, 2*SegSize, 2*SegSize)},
- {0*SegSize,
- subbin(Bin, 0*SegSize, 2*SegSize)}])),
- ?line {ok, Comment} =
+ {0*SegSize,
+ subbin(Bin, 0*SegSize, 2*SegSize)}])),
+ {ok, Comment} =
response_analysis(?FILE_MODULE, pwrite, [FD7, Req]),
- ?line ok = ?FILE_MODULE:close(FD7),
+ ok = ?FILE_MODULE:close(FD7),
%%
- ?line [] = flush(),
- ?line ?t:timetrap_cancel(Dog),
+ [] = flush(),
{comment, Comment}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-ipread(suite) ->
- [];
-ipread(doc) ->
- ["Test Dets special indirect pread"];
+%% Test Dets special indirect pread.
ipread(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(30)),
+ Dir = proplists:get_value(priv_dir, Config),
+ ok = ipread_int(Dir, [raw, binary]),
+ ok = ipread_int(Dir, [raw]),
+ ok = ipread_int(Dir, [binary]),
+ ok = ipread_int(Dir, []),
+ ok = ipread_int(Dir, [ram, binary]),
+ ok = ipread_int(Dir, [ram]),
%%
- ?line Dir = ?config(priv_dir, Config),
- ?line ok = ipread_int(Dir, [raw, binary]),
- ?line ok = ipread_int(Dir, [raw]),
- ?line ok = ipread_int(Dir, [binary]),
- ?line ok = ipread_int(Dir, []),
- ?line ok = ipread_int(Dir, [ram, binary]),
- ?line ok = ipread_int(Dir, [ram]),
- %%
- ?line [] = flush(),
- ?line ?t:timetrap_cancel(Dog),
+ [] = flush(),
ok.
ipread_int(Dir, ModeList) ->
- ?line Name =
+ Name =
filename:join(Dir,
lists:flatten([?MODULE_STRING, "_ipread",
- lists:map(fun (X) ->
- ["_", atom_to_list(X)]
- end,
- ModeList)])),
- ?line io:format("ipread_int<~p, ~p>~n", [Name, ModeList]),
- ?line {Conv, Sizeof} =
+ lists:map(fun (X) ->
+ ["_", atom_to_list(X)]
+ end,
+ ModeList)])),
+ io:format("ipread_int<~p, ~p>~n", [Name, ModeList]),
+ {Conv, Sizeof} =
case lists:member(binary, ModeList) of
true ->
{fun (Bin) when is_binary(Bin) -> Bin;
@@ -3705,144 +3450,130 @@ ipread_int(Dir, ModeList) ->
end,
fun erlang:length/1}
end,
- ?line Pos = 4711,
- ?line Data = Conv("THE QUICK BROWN FOX JUMPS OVER A LAZY DOG"),
- ?line Size = Sizeof(Data),
- ?line Init = Conv(" "),
- ?line SizeInit = Sizeof(Init),
- ?line Head = Conv(<<Size:32/big-unsigned, Pos:32/big-unsigned>>),
- ?line Filler = Conv(bytes($ , Pos-SizeInit-Sizeof(Head))),
- ?line Size1 = Size+1,
- ?line SizePos = Size+Pos,
+ Pos = 4711,
+ Data = Conv("THE QUICK BROWN FOX JUMPS OVER A LAZY DOG"),
+ Size = Sizeof(Data),
+ Init = Conv(" "),
+ SizeInit = Sizeof(Init),
+ Head = Conv(<<Size:32/big-unsigned, Pos:32/big-unsigned>>),
+ Filler = Conv(bytes($ , Pos-SizeInit-Sizeof(Head))),
+ Size1 = Size+1,
+ SizePos = Size+Pos,
%%
- ?line {ok, FD} = ?FILE_MODULE:open(Name, [write, read | ModeList]),
- ?line ok = ?FILE_MODULE:truncate(FD),
- ?line ok = ?FILE_MODULE:write(FD, Init),
- ?line ok = ?FILE_MODULE:write(FD, Head),
- ?line ok = ?FILE_MODULE:write(FD, Filler),
- ?line ok = ?FILE_MODULE:write(FD, Data),
+ {ok, FD} = ?FILE_MODULE:open(Name, [write, read | ModeList]),
+ ok = ?FILE_MODULE:truncate(FD),
+ ok = ?FILE_MODULE:write(FD, Init),
+ ok = ?FILE_MODULE:write(FD, Head),
+ ok = ?FILE_MODULE:write(FD, Filler),
+ ok = ?FILE_MODULE:write(FD, Data),
%% Correct read
- ?line {ok, {Size, Pos, Data}} =
+ {ok, {Size, Pos, Data}} =
?FILE_MODULE:ipread_s32bu_p32bu(FD, SizeInit, infinity),
%% Invalid header - size > max
- ?line eof =
+ eof =
?FILE_MODULE:ipread_s32bu_p32bu(FD, SizeInit, Size-1),
%% Data block protudes over eof
- ?line ok =
+ ok =
?FILE_MODULE:pwrite(FD, SizeInit,
<<Size1:32/big-unsigned,
- Pos:32/big-unsigned>>),
- ?line {ok, {Size1, Pos, Data}} =
+ Pos:32/big-unsigned>>),
+ {ok, {Size1, Pos, Data}} =
?FILE_MODULE:ipread_s32bu_p32bu(FD, SizeInit, Size1),
%% Data block outside file
- ?line ok =
+ ok =
?FILE_MODULE:pwrite(FD, SizeInit,
<<Size:32/big-unsigned,
- SizePos:32/big-unsigned>>),
- ?line {ok, {Size, SizePos, eof}} =
+ SizePos:32/big-unsigned>>),
+ {ok, {Size, SizePos, eof}} =
?FILE_MODULE:ipread_s32bu_p32bu(FD, SizeInit, Size),
%% Zero size
- ?line ok =
+ ok =
?FILE_MODULE:pwrite(FD, SizeInit,
<<0:32/big-unsigned,
- Pos:32/big-unsigned>>),
- ?line {ok, {0, Pos, eof}} =
+ Pos:32/big-unsigned>>),
+ {ok, {0, Pos, eof}} =
?FILE_MODULE:ipread_s32bu_p32bu(FD, SizeInit, Size),
%% Invalid header - protudes over eof
- ?line eof =
+ eof =
?FILE_MODULE:ipread_s32bu_p32bu(FD,
Pos+Size-(Sizeof(Head)-1),
infinity),
%% Header not even in file
- ?line eof =
+ eof =
?FILE_MODULE:ipread_s32bu_p32bu(FD, Pos+Size, infinity),
%%
- ?line ok = ?FILE_MODULE:close(FD),
+ ok = ?FILE_MODULE:close(FD),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-interleaved_read_write(suite) ->
- [];
-interleaved_read_write(doc) ->
- ["Tests interleaved read and writes"];
+%% Tests interleaved read and writes.
interleaved_read_write(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(30)),
- %%
- ?line Dir = ?config(priv_dir, Config),
- ?line File =
+ Dir = proplists:get_value(priv_dir, Config),
+ File =
filename:join(Dir, ?MODULE_STRING++"interleaved_read_write.txt"),
- ?line {ok,F1} = ?FILE_MODULE:open(File, [write]),
- ?line ok = ?FILE_MODULE:write(F1, "data---r1."), % 10 chars each
- ?line ok = ?FILE_MODULE:write(F1, "data---r2."),
- ?line ok = ?FILE_MODULE:write(F1, "data---r3."),
- ?line ok = ?FILE_MODULE:close(F1),
- ?line {ok,F2} = ?FILE_MODULE:open(File, [read, write]),
- ?line {ok, "data---r1."} = ?FILE_MODULE:read(F2, 10),
- ?line ok = ?FILE_MODULE:write(F2, "data---w2."),
- ?line ok = ?FILE_MODULE:close(F2),
- ?line {ok,F3} = ?FILE_MODULE:open(File, [read]),
- ?line {ok, "data---r1."} = ?FILE_MODULE:read(F3, 10),
- ?line {ok, "data---w2."} = ?FILE_MODULE:read(F3, 10),
- ?line {ok, "data---r3."} = ?FILE_MODULE:read(F3, 10),
- ?line eof = ?FILE_MODULE:read(F3, 1),
- ?line ok = ?FILE_MODULE:close(F2),
+ {ok,F1} = ?FILE_MODULE:open(File, [write]),
+ ok = ?FILE_MODULE:write(F1, "data---r1."), % 10 chars each
+ ok = ?FILE_MODULE:write(F1, "data---r2."),
+ ok = ?FILE_MODULE:write(F1, "data---r3."),
+ ok = ?FILE_MODULE:close(F1),
+ {ok,F2} = ?FILE_MODULE:open(File, [read, write]),
+ {ok, "data---r1."} = ?FILE_MODULE:read(F2, 10),
+ ok = ?FILE_MODULE:write(F2, "data---w2."),
+ ok = ?FILE_MODULE:close(F2),
+ {ok,F3} = ?FILE_MODULE:open(File, [read]),
+ {ok, "data---r1."} = ?FILE_MODULE:read(F3, 10),
+ {ok, "data---w2."} = ?FILE_MODULE:read(F3, 10),
+ {ok, "data---r3."} = ?FILE_MODULE:read(F3, 10),
+ eof = ?FILE_MODULE:read(F3, 1),
+ ok = ?FILE_MODULE:close(F2),
%%
- ?line [] = flush(),
- ?line ?t:timetrap_cancel(Dog),
+ [] = flush(),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-otp_5814(suite) ->
- [];
-otp_5814(doc) ->
- ["OTP-5814. eval/consult/script return correct line numbers"];
+%% OTP-5814. eval/consult/script return correct line numbers.
otp_5814(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(10)),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
File = filename:join(PrivDir, "otp_5814"),
Path = [PrivDir],
- ?line ok = file:write_file(File, <<"{a,b,c}.
+ ok = file:write_file(File, <<"{a,b,c}.
a.
- b.
- c.
- {d,e,
- [}.">>),
- ?line {error, {6,erl_parse,_}} = file:eval(File),
- ?line {error, {6,erl_parse,_}} = file:consult(File),
- ?line {error, {6,erl_parse,_}} = file:path_consult(Path, File),
- ?line {error, {6,erl_parse,_}} = file:path_eval(Path, File),
- ?line {error, {6,erl_parse,_}} = file:script(File),
- ?line {error, {6,erl_parse,_}} = file:path_script(Path, File),
-
- ?line ok = file:write_file(File, <<>>),
- ?line {error, {1,file,undefined_script}} = file:path_script(Path, File),
+b.
+c.
+{d,e,
+ [}.">>),
+ {error, {6,erl_parse,_}} = file:eval(File),
+ {error, {6,erl_parse,_}} = file:consult(File),
+ {error, {6,erl_parse,_}} = file:path_consult(Path, File),
+ {error, {6,erl_parse,_}} = file:path_eval(Path, File),
+ {error, {6,erl_parse,_}} = file:script(File),
+ {error, {6,erl_parse,_}} = file:path_script(Path, File),
+
+ ok = file:write_file(File, <<>>),
+ {error, {1,file,undefined_script}} = file:path_script(Path, File),
%% The error is not propagated...
- ?line ok = file:write_file(File, <<"a.
+ ok = file:write_file(File, <<"a.
b.
- 1/0.">>),
- ?line {error, {3, file, {error, badarith, _}}} = file:eval(File),
-
- ?line ok = file:write_file(File, <<"erlang:raise(throw, apa, []).">>),
- ?line {error, {1, file, {throw, apa, _}}} = file:eval(File),
+1/0.">>),
+ {error, {3, file, {error, badarith, _}}} = file:eval(File),
- file:delete(File),
- ?line ?t:timetrap_cancel(Dog),
- ok.
+ok = file:write_file(File, <<"erlang:raise(throw, apa, []).">>),
+{error, {1, file, {throw, apa, _}}} = file:eval(File),
+
+file:delete(File),
+ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-otp_10852(suite) ->
- [];
-otp_10852(doc) ->
- ["OTP-10852. +fnu and latin1 filenames"];
+%% OTP-10852. +fnu and latin1 filenames.
otp_10852(Config) when is_list(Config) ->
Node = start_node(erl_pp_helper, "+fnu"),
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
B = filename:join(Dir, <<"\xE4">>),
ok = rpc_call(Node, get_cwd, [B]),
{error, no_translation} = rpc_call(Node, set_cwd, [B]),
@@ -3857,10 +3588,10 @@ otp_10852(Config) when is_list(Config) ->
ok = rpc_call(Node, read_file, [B]),
ok = rpc_call(Node, make_link, [B,B]),
case rpc_call(Node, make_symlink, [B,B]) of
- ok -> ok;
- {error, E} when (E =:= enotsup) or (E =:= eperm) ->
- {win32,_} = os:type()
- end,
+ ok -> ok;
+ {error, E} when (E =:= enotsup) or (E =:= eperm) ->
+ {win32,_} = os:type()
+ end,
ok = rpc_call(Node, delete, [B]),
ok = rpc_call(Node, make_dir, [B]),
ok = rpc_call(Node, del_dir, [B]),
@@ -3883,58 +3614,58 @@ rpc_call(N, F, As) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-large_file(suite) ->
- [];
-large_file(doc) ->
- ["Tests positioning in large files (> 4G)"];
+large_file() ->
+ [{timetrap,{minutes,20}}].
+
+%% Tests positioning in large files (> 4G).
large_file(Config) when is_list(Config) ->
run_large_file_test(Config,
fun(Name) -> do_large_file(Name) end,
"_large_file").
do_large_file(Name) ->
- ?line Watchdog = ?t:timetrap(?t:minutes(20)),
-
- ?line S = "1234567890",
+ S = "1234567890",
L = length(S),
R = lists:reverse(S),
P = 1 bsl 32,
Ss = lists:sort(S),
Rs = lists:reverse(Ss),
- ?line {ok,F} = ?FILE_MODULE:open(Name, [raw,read,write]),
- ?line ok = ?FILE_MODULE:write(F, S),
- ?line {ok,P} = ?FILE_MODULE:position(F, P),
- ?line ok = ?FILE_MODULE:write(F, R),
- ?line {ok,0} = ?FILE_MODULE:position(F, bof),
- ?line {ok,S} = ?FILE_MODULE:read(F, L),
- ?line {ok,P} = ?FILE_MODULE:position(F, {eof,-L}),
- ?line {ok,R} = ?FILE_MODULE:read(F, L+1),
- ?line {ok,S} = ?FILE_MODULE:pread(F, 0, L),
- ?line {ok,R} = ?FILE_MODULE:pread(F, P, L+1),
- ?line ok = ?FILE_MODULE:pwrite(F, 0, Ss),
- ?line ok = ?FILE_MODULE:pwrite(F, P, Rs),
- ?line {ok,0} = ?FILE_MODULE:position(F, bof),
- ?line {ok,Ss} = ?FILE_MODULE:read(F, L),
- ?line {ok,P} = ?FILE_MODULE:position(F, {eof,-L}),
- ?line {ok,Rs} = ?FILE_MODULE:read(F, L+1),
- ?line ok = ?FILE_MODULE:close(F),
+ {ok,F} = ?FILE_MODULE:open(Name, [raw,read,write]),
+ ok = ?FILE_MODULE:write(F, S),
+ {ok,P} = ?FILE_MODULE:position(F, P),
+ ok = ?FILE_MODULE:write(F, R),
+ {ok,0} = ?FILE_MODULE:position(F, bof),
+ {ok,S} = ?FILE_MODULE:read(F, L),
+ {ok,P} = ?FILE_MODULE:position(F, {eof,-L}),
+ {ok,R} = ?FILE_MODULE:read(F, L+1),
+ {ok,S} = ?FILE_MODULE:pread(F, 0, L),
+ {ok,R} = ?FILE_MODULE:pread(F, P, L+1),
+ ok = ?FILE_MODULE:pwrite(F, 0, Ss),
+ ok = ?FILE_MODULE:pwrite(F, P, Rs),
+ {ok,0} = ?FILE_MODULE:position(F, bof),
+ {ok,Ss} = ?FILE_MODULE:read(F, L),
+ {ok,P} = ?FILE_MODULE:position(F, {eof,-L}),
+ {ok,Rs} = ?FILE_MODULE:read(F, L+1),
+ ok = ?FILE_MODULE:close(F),
%% Reopen the file with 'append'; used to fail on Windows causing
%% writes to go to the beginning of the file for files > 4GB.
- ?line PL = P + L,
- ?line PLL = PL + L,
- ?line {ok,F1} = ?FILE_MODULE:open(Name, [raw,read,write,append]),
- ?line ok = ?FILE_MODULE:write(F1, R),
- ?line {ok,PLL} = ?FILE_MODULE:position(F1, {cur,0}),
- ?line {ok,Rs} = ?FILE_MODULE:pread(F1, P, L),
- ?line {ok,PL} = ?FILE_MODULE:position(F1, {eof,-L}),
- ?line {ok,R} = ?FILE_MODULE:read(F1, L+1),
- ?line ok = ?FILE_MODULE:close(F1),
- %%
- ?line ?t:timetrap_cancel(Watchdog),
+ PL = P + L,
+ PLL = PL + L,
+ {ok,F1} = ?FILE_MODULE:open(Name, [raw,read,write,append]),
+ ok = ?FILE_MODULE:write(F1, R),
+ {ok,PLL} = ?FILE_MODULE:position(F1, {cur,0}),
+ {ok,Rs} = ?FILE_MODULE:pread(F1, P, L),
+ {ok,PL} = ?FILE_MODULE:position(F1, {eof,-L}),
+ {ok,R} = ?FILE_MODULE:read(F1, L+1),
+ ok = ?FILE_MODULE:close(F1),
+
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+large_write() ->
+ [{timetrap,{minutes,20}}].
+
large_write(Config) when is_list(Config) ->
run_large_file_test(Config,
fun(Name) -> do_large_write(Name) end,
@@ -3964,8 +3695,8 @@ do_large_write(Name) ->
response_analysis(Module, Function, Arguments) ->
Parent = self(),
- ?line erlang:yield(), % Schedule out before test
- ?line Child =
+ erlang:yield(), % Schedule out before test
+ Child =
spawn_link(
fun () ->
receive {Parent, start, Ts} -> ok end,
@@ -3985,19 +3716,19 @@ response_analysis(Module, Function, Arguments) ->
Parent ! {self(), stopped, response_stat(Stat, micro_ts())}
end),
Child ! {Parent, start, micro_ts()},
- ?line Result = apply(Module, Function, Arguments),
- ?line Child ! {Parent, stop},
- ?line {N, Sum, _, M, Max} = receive {Child, stopped, X} -> X end,
- ?line Mean_ms = (0.001*Sum) / (N-1),
- ?line Max_ms = 0.001 * Max,
- ?line Comment =
+ Result = apply(Module, Function, Arguments),
+ Child ! {Parent, stop},
+ {N, Sum, _, M, Max} = receive {Child, stopped, X} -> X end,
+ Mean_ms = (0.001*Sum) / (N-1),
+ Max_ms = 0.001 * Max,
+ Comment =
lists:flatten(
io_lib:format(
"Scheduling interval: Mean = ~.3f ms, "
++"Max = ~.3f ms for no ~p of ~p.~n",
[Mean_ms, Max_ms, M, (N-1)])),
- ?line {Result, Comment}.
-
+ {Result, Comment}.
+
micro_ts() ->
erlang:monotonic_time(micro_seconds).
@@ -4021,10 +3752,10 @@ response_stat({N, Sum, Ts0, M, Max}, Ts) ->
%% create_file/2 below is some 44 times faster.
create_file_slow(Name, N) when is_integer(N), N >= 0 ->
- ?line {ok, FD} =
+ {ok, FD} =
?FILE_MODULE:open(Name, [raw, write, delayed_write, binary]),
- ?line ok = create_file_slow(FD, 0, N),
- ?line ok = ?FILE_MODULE:close(FD),
+ ok = create_file_slow(FD, 0, N),
+ ok = ?FILE_MODULE:close(FD),
ok.
create_file_slow(_FD, M, M) ->
@@ -4039,10 +3770,10 @@ create_file_slow(FD, M, N) ->
%% from 0 to N-1.
create_file(Name, N) when is_integer(N), N >= 0 ->
- ?line {ok, FD} =
+ {ok, FD} =
?FILE_MODULE:open(Name, [raw, write, delayed_write, binary]),
- ?line ok = create_file(FD, 0, N),
- ?line ok = ?FILE_MODULE:close(FD),
+ ok = create_file(FD, 0, N),
+ ok = ?FILE_MODULE:close(FD),
ok.
create_file(_FD, M, M) ->
@@ -4059,10 +3790,10 @@ create_file(FD, M, N0, R) when M + 8 =< N0 ->
N1 = N0-1, N2 = N0-2, N3 = N0-3, N4 = N0-4,
N5 = N0-5, N6 = N0-6, N7 = N0-7, N8 = N0-8,
create_file(FD, M, N8,
- [<<N8:32/unsigned, N7:32/unsigned,
- N6:32/unsigned, N5:32/unsigned,
- N4:32/unsigned, N3:32/unsigned,
- N2:32/unsigned, N1:32/unsigned>> | R]);
+ [<<N8:32/unsigned, N7:32/unsigned,
+ N6:32/unsigned, N5:32/unsigned,
+ N4:32/unsigned, N3:32/unsigned,
+ N2:32/unsigned, N1:32/unsigned>> | R]);
create_file(FD, M, N0, R) ->
N1 = N0-1,
create_file(FD, M, N1, [<<N1:32/unsigned>> | R]).
@@ -4079,14 +3810,14 @@ create_bin(M, N0, R) when M+8 =< N0 ->
N5 = N0-5, N6 = N0-6, N7 = N0-7, N8 = N0-8,
create_bin(M, N8,
[<<N8:32/unsigned, N7:32/unsigned,
- N6:32/unsigned, N5:32/unsigned,
- N4:32/unsigned, N3:32/unsigned,
- N2:32/unsigned, N1:32/unsigned>> | R]);
+ N6:32/unsigned, N5:32/unsigned,
+ N4:32/unsigned, N3:32/unsigned,
+ N2:32/unsigned, N1:32/unsigned>> | R]);
create_bin(M, N0, R) ->
N1 = N0-1,
create_bin(M, N1, [<<N1:32/unsigned>> | R]).
-
-
+
+
verify_bin(<<>>, _, 0) ->
@@ -4098,8 +3829,8 @@ verify_bin(Bin, N, Cnt) ->
N4 = N + 4, N5 = N + 5, N6 = N + 6, N7 = N + 7,
case Bin of
<<N0:32/unsigned, N1:32/unsigned, N2:32/unsigned, N3:32/unsigned,
- N4:32/unsigned, N5:32/unsigned, N6:32/unsigned, N7:32/unsigned,
- B/binary>> ->
+ N4:32/unsigned, N5:32/unsigned, N6:32/unsigned, N7:32/unsigned,
+ B/binary>> ->
verify_bin(B, N+8, Cnt-8);
<<N:32/unsigned, B/binary>> ->
verify_bin(B, N+1, Cnt-1);
@@ -4180,13 +3911,13 @@ pwrite_file(Name, Data) ->
read_line_testdata(PrivDir) ->
All0 = [{fun read_line_create0/1,"Testdata1.txt",5,10},
- {fun read_line_create1/1,"Testdata2.txt",401,802},
- {fun read_line_create2/1,"Testdata3.txt",1,2},
- {fun read_line_create3/1,"Testdata4.txt",601,fail},
- {fun read_line_create4/1,"Testdata5.txt",601,1002},
- {fun read_line_create5/1,"Testdata6.txt",601,1202},
- {fun read_line_create6/1,"Testdata7.txt",601,1202},
- {fun read_line_create7/1,"Testdata8.txt",4001,8002}],
+ {fun read_line_create1/1,"Testdata2.txt",401,802},
+ {fun read_line_create2/1,"Testdata3.txt",1,2},
+ {fun read_line_create3/1,"Testdata4.txt",601,fail},
+ {fun read_line_create4/1,"Testdata5.txt",601,1002},
+ {fun read_line_create5/1,"Testdata6.txt",601,1202},
+ {fun read_line_create6/1,"Testdata7.txt",601,1202},
+ {fun read_line_create7/1,"Testdata8.txt",4001,8002}],
[ {A,filename:join([PrivDir,B]),C,D} || {A,B,C,D} <- All0 ].
read_line_create_files(TestData) ->
@@ -4195,105 +3926,93 @@ read_line_create_files(TestData) ->
read_line_remove_files(TestData) ->
[ file:delete(File) || {_Function,File,_,_} <- TestData ].
-read_line_1(suite) ->
- [];
-read_line_1(doc) ->
- ["read_line with prim_file"];
+%% read_line with prim_file.
read_line_1(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line All = read_line_testdata(PrivDir),
- ?line read_line_create_files(All),
- ?line [ begin
- io:format("read_line_all: ~s~n",[File]),
- {X,_} = read_line_all(File),
- true
- end || {_,File,X,_} <- All ],
- ?line [ begin
- io:format("read_line_all_alternating: ~s~n",[File]),
- {Y,_} = read_line_all_alternating(File),
- true
- end || {_,File,_,Y} <- All , Y =/= fail],
- ?line [ begin
- io:format("read_line_all_alternating (failing as should): ~s~n",[File]),
- {'EXIT',_} = (catch read_line_all_alternating(File)),
- true
- end || {_,File,_,Y} <- All , Y =:= fail],
- ?line read_line_remove_files(All),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ All = read_line_testdata(PrivDir),
+ read_line_create_files(All),
+ [ begin
+ io:format("read_line_all: ~s~n",[File]),
+ {X,_} = read_line_all(File),
+ true
+ end || {_,File,X,_} <- All ],
+ [ begin
+ io:format("read_line_all_alternating: ~s~n",[File]),
+ {Y,_} = read_line_all_alternating(File),
+ true
+ end || {_,File,_,Y} <- All , Y =/= fail],
+ [ begin
+ io:format("read_line_all_alternating (failing as should): ~s~n",[File]),
+ {'EXIT',_} = (catch read_line_all_alternating(File)),
+ true
+ end || {_,File,_,Y} <- All , Y =:= fail],
+ read_line_remove_files(All),
ok.
-read_line_2(suite) ->
- [];
-read_line_2(doc) ->
- ["read_line with file"];
+%% read_line with file.
read_line_2(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line All = read_line_testdata(PrivDir),
- ?line read_line_create_files(All),
- ?line [ begin
- io:format("read_line_all: ~s~n",[File]),
- {X,_} = read_line_all2(File),
- true
- end || {_,File,X,_} <- All ],
- ?line [ begin
- io:format("read_line_all_alternating: ~s~n",[File]),
- {Y,_} = read_line_all_alternating2(File),
- true
- end || {_,File,_,Y} <- All , Y =/= fail],
- ?line [ begin
- io:format("read_line_all_alternating (failing as should): ~s~n",[File]),
- {'EXIT',_} = (catch read_line_all_alternating2(File)),
- true
- end || {_,File,_,Y} <- All , Y =:= fail],
- ?line read_line_remove_files(All),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ All = read_line_testdata(PrivDir),
+ read_line_create_files(All),
+ [ begin
+ io:format("read_line_all: ~s~n",[File]),
+ {X,_} = read_line_all2(File),
+ true
+ end || {_,File,X,_} <- All ],
+ [ begin
+ io:format("read_line_all_alternating: ~s~n",[File]),
+ {Y,_} = read_line_all_alternating2(File),
+ true
+ end || {_,File,_,Y} <- All , Y =/= fail],
+ [ begin
+ io:format("read_line_all_alternating (failing as should): ~s~n",[File]),
+ {'EXIT',_} = (catch read_line_all_alternating2(File)),
+ true
+ end || {_,File,_,Y} <- All , Y =:= fail],
+ read_line_remove_files(All),
ok.
-read_line_3(suite) ->
- [];
-read_line_3(doc) ->
- ["read_line with raw file"];
+%% read_line with raw file.
read_line_3(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line All = read_line_testdata(PrivDir),
- ?line read_line_create_files(All),
- ?line [ begin
- io:format("read_line_all: ~s~n",[File]),
- {X,_} = read_line_all3(File),
- true
- end || {_,File,X,_} <- All ],
- ?line [ begin
- io:format("read_line_all_alternating: ~s~n",[File]),
- {Y,_} = read_line_all_alternating3(File),
- true
- end || {_,File,_,Y} <- All , Y =/= fail],
- ?line [ begin
- io:format("read_line_all_alternating (failing as should): ~s~n",[File]),
- {'EXIT',_} = (catch read_line_all_alternating3(File)),
- true
- end || {_,File,_,Y} <- All , Y =:= fail],
- ?line read_line_remove_files(All),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ All = read_line_testdata(PrivDir),
+ read_line_create_files(All),
+ [ begin
+ io:format("read_line_all: ~s~n",[File]),
+ {X,_} = read_line_all3(File),
+ true
+ end || {_,File,X,_} <- All ],
+ [ begin
+ io:format("read_line_all_alternating: ~s~n",[File]),
+ {Y,_} = read_line_all_alternating3(File),
+ true
+ end || {_,File,_,Y} <- All , Y =/= fail],
+ [ begin
+ io:format("read_line_all_alternating (failing as should): ~s~n",[File]),
+ {'EXIT',_} = (catch read_line_all_alternating3(File)),
+ true
+ end || {_,File,_,Y} <- All , Y =:= fail],
+ read_line_remove_files(All),
ok.
-read_line_4(suite) ->
- [];
-read_line_4(doc) ->
- ["read_line with raw buffered file"];
+%% read_line with raw buffered file.
read_line_4(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line All = read_line_testdata(PrivDir),
- ?line read_line_create_files(All),
- ?line [ begin
- io:format("read_line_all: ~s~n",[File]),
- {X,_} = read_line_all4(File),
- true
- end || {_,File,X,_} <- All ],
- ?line [ begin
- io:format("read_line_all_alternating: ~s~n",[File]),
- {Y,_} = read_line_all_alternating4(File),
- true
- end || {_,File,_,Y} <- All , Y =/= fail],
- ?line [ begin
- io:format("read_line_all_alternating (failing as should): ~s~n",[File]),
- {'EXIT',_} = (catch read_line_all_alternating4(File)),
- true
- end || {_,File,_,Y} <- All , Y =:= fail],
- ?line read_line_remove_files(All),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ All = read_line_testdata(PrivDir),
+ read_line_create_files(All),
+ [ begin
+ io:format("read_line_all: ~s~n",[File]),
+ {X,_} = read_line_all4(File),
+ true
+ end || {_,File,X,_} <- All ],
+ [ begin
+ io:format("read_line_all_alternating: ~s~n",[File]),
+ {Y,_} = read_line_all_alternating4(File),
+ true
+ end || {_,File,_,Y} <- All , Y =/= fail],
+ [ begin
+ io:format("read_line_all_alternating (failing as should): ~s~n",[File]),
+ {'EXIT',_} = (catch read_line_all_alternating4(File)),
+ true
+ end || {_,File,_,Y} <- All , Y =:= fail],
+ read_line_remove_files(All),
ok.
rl_lines() ->
@@ -4548,7 +4267,7 @@ run_large_file_test(Config, Run, Name) ->
{{unix,sunos},OsVersion} when OsVersion < {5,5,1} ->
{skip,"Only supported on Win32, Unix or SunOS >= 5.5.1"};
{{unix,_},_} ->
- N = disc_free(?config(priv_dir, Config)),
+ N = disc_free(proplists:get_value(priv_dir, Config)),
io:format("Free disk: ~w KByte~n", [N]),
if N < 5 * (1 bsl 20) ->
%% Less than 5 GByte free
@@ -4562,9 +4281,9 @@ run_large_file_test(Config, Run, Name) ->
do_run_large_file_test(Config, Run, Name0) ->
- Name = filename:join(?config(priv_dir, Config),
+ Name = filename:join(proplists:get_value(priv_dir, Config),
?MODULE_STRING ++ Name0),
-
+
%% Set up a process that will delete this file.
Tester = self(),
Deleter =
@@ -4577,7 +4296,7 @@ do_run_large_file_test(Config, Run, Name0) ->
end,
?FILE_MODULE:delete(Name)
end),
-
+
%% Run the test case.
Res = Run(Name),
diff --git a/lib/kernel/test/file_name_SUITE.erl b/lib/kernel/test/file_name_SUITE.erl
index 32006d893e..10b6b105d0 100644
--- a/lib/kernel/test/file_name_SUITE.erl
+++ b/lib/kernel/test/file_name_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%% %CopyrightEnd%
%%
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
%%
@@ -79,14 +79,14 @@
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+end_per_testcase(_Func, _Config) ->
+ ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[normal, icky, very_icky, normalize, home_dir].
@@ -101,19 +101,16 @@ end_per_suite(_Config) ->
ok.
init_per_group(_GroupName, Config) ->
- Config.
+ Config.
end_per_group(_GroupName, Config) ->
- Config.
+ Config.
-home_dir(suite) ->
- [];
-home_dir(doc) ->
- ["Check that Erlang can be started with unicode named home directory"];
+%% Check that Erlang can be started with unicode named home directory.
home_dir(Config) when is_list(Config) ->
try
Name=[960,945,964,961,953,954],
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
UniMode = file:native_name_encoding() =/= latin1,
if
not UniMode ->
@@ -142,7 +139,12 @@ home_dir(Config) when is_list(Config) ->
test_server:stop_node(Node),
ok
after
- os:putenv(SaveOldName,SaveOldValue),
+ case SaveOldValue of
+ false ->
+ os:unsetenv(SaveOldName);
+ _ ->
+ os:putenv(SaveOldName,SaveOldValue)
+ end,
rm_rf(prim_file,NewHome)
end
catch
@@ -154,49 +156,41 @@ home_dir(Config) when is_list(Config) ->
{skipped,"Runs only on Unix/Windows"}
end.
-normalize(suite) ->
- [];
-normalize(doc) ->
- ["Check that filename normalization works"];
+%% Check that filename normalization works.
normalize(Config) when is_list(Config) ->
- random:seed({1290,431421,830412}),
+ rand:seed(exsplus, {1290,431421,830412}),
try
- ?line UniMode = file:native_name_encoding() =/= latin1,
+ UniMode = file:native_name_encoding() =/= latin1,
if
not UniMode ->
throw(need_unicode_mode);
true ->
ok
end,
- ?line Pairs = [rand_comp_decomp(200) || _ <- lists:seq(1,1000)],
+ Pairs = [rand_comp_decomp(200) || _ <- lists:seq(1,1000)],
case os:type() of
{unix,darwin} ->
- ?line [ true = (A =:= prim_file:internal_native2name(B)) ||
+ [ true = (A =:= prim_file:internal_native2name(B)) ||
{A,B} <- Pairs ];
_ ->
ok
end,
- ?line [ true = (A =:= prim_file:internal_normalize_utf8(B)) ||
- {A,B} <- Pairs ]
-
+ [ true = (A =:= prim_file:internal_normalize_utf8(B)) ||
+ {A,B} <- Pairs ]
+
catch
throw:need_unicode_mode ->
io:format("Sorry, can only run in unicode mode.~n"),
{skipped,"VM needs to be started in Unicode filename mode"}
end.
-
-normal(suite) ->
- [];
-normal(doc) ->
- "Check file operations on normal file names regardless of unicode mode";
+
+%% Check file operations on normal file names regardless of unicode mode.
normal(Config) when is_list(Config) ->
{ok,Dir} = file:get_cwd(),
try
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
file:set_cwd(Priv),
- put(file_module,prim_file),
ok = check_normal(prim_file),
- put(file_module,file),
ok = check_normal(file),
%% If all is good, delete dir again (avoid hanging dir on windows)
rm_rf(file,"normal_dir"),
@@ -204,12 +198,9 @@ normal(Config) when is_list(Config) ->
after
file:set_cwd(Dir)
end.
-
-icky(suite) ->
- [];
-icky(doc) ->
- "Check file operations on normal file names regardless of unicode mode";
+
+%% Check file operations on normal file names regardless of unicode mode.
icky(Config) when is_list(Config) ->
case hopeless_darwin() of
true ->
@@ -217,11 +208,9 @@ icky(Config) when is_list(Config) ->
false ->
{ok,Dir} = file:get_cwd(),
try
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
file:set_cwd(Priv),
- put(file_module,prim_file),
ok = check_icky(prim_file),
- put(file_module,file),
ok = check_icky(file),
%% If all is good, delete dir again (avoid hanging dir on windows)
rm_rf(file,"icky_dir"),
@@ -230,10 +219,7 @@ icky(Config) when is_list(Config) ->
file:set_cwd(Dir)
end
end.
-very_icky(suite) ->
- [];
-very_icky(doc) ->
- "Check file operations on normal file names regardless of unicode mode";
+%% Check file operations on normal file names regardless of unicode mode.
very_icky(Config) when is_list(Config) ->
case hopeless_darwin() of
true ->
@@ -241,14 +227,12 @@ very_icky(Config) when is_list(Config) ->
false ->
{ok,Dir} = file:get_cwd(),
try
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
file:set_cwd(Priv),
- put(file_module,prim_file),
case check_very_icky(prim_file) of
need_unicode_mode ->
{skipped,"VM needs to be started in Unicode filename mode"};
ok ->
- put(file_module,file),
ok = check_very_icky(file),
%% If all is good, delete dir again
%% (avoid hanging dir on windows)
@@ -259,78 +243,79 @@ very_icky(Config) when is_list(Config) ->
file:set_cwd(Dir)
end
end.
-
+
check_normal(Mod) ->
{ok,Dir} = Mod:get_cwd(),
try
- ?line make_normal_dir(Mod),
- ?line {ok, L0} = Mod:list_dir("."),
- ?line L1 = lists:sort(L0),
- %erlang:display(L1),
- ?line L1 = lists:sort(list(normal_dir())),
- ?line {ok,D2} = Mod:get_cwd(),
- ?line true = is_list(D2),
- ?line case Mod:altname("fil1") of
+ NormalDir = make_normal_dir(Mod, "normal_dir"),
+ io:format("Normaldir = ~p\n", [NormalDir]),
+ L1 = lists:sort(list(NormalDir)),
+ {ok, L0} = Mod:list_dir("."),
+ io:format("L0 = ~p\n", [L0]),
+ L1 = lists:sort(L0),
+ {ok,D2} = Mod:get_cwd(),
+ true = is_list(D2),
+ case Mod:altname("fil1") of
{error,enotsup} ->
ok;
{ok,LLL} when is_list(LLL) ->
ok
end,
- ?line [ true = is_list(El) || El <- L1],
- ?line Syms = [ {S,Targ,list_to_binary(get_data(Targ,normal_dir()))}
- || {T,S,Targ} <- normal_dir(), T =:= symlink ],
- ?line [ {ok, Cont} = Mod:read_file(SymL) || {SymL,_,Cont} <- Syms ],
- ?line [ {ok, Targ} = fixlink(Mod:read_link(SymL)) || {SymL,Targ,_} <- Syms ],
- ?line chk_cre_dir(Mod,[{directory,"temp_dir",normal_dir()}]),
- ?line {ok,BeginAt} = Mod:get_cwd(),
- ?line true = is_list(BeginAt),
- ?line {error,enoent} = Mod:set_cwd("tmp_dir"),
- ?line ok = Mod:set_cwd("temp_dir"),
- ?line {ok, NowAt} = Mod:get_cwd(),
- ?line true = BeginAt =/= NowAt,
- ?line ok = Mod:set_cwd(".."),
- ?line {ok,BeginAt} = Mod:get_cwd(),
- ?line rm_r(Mod,"temp_dir"),
- ?line true = is_list(Dir),
- ?line [ true = is_list(FN) || FN <- L0 ],
- case has_links() of
- true ->
- ?line ok = Mod:make_link("fil1","nisse"),
- ?line {ok, <<"fil1">>} = Mod:read_file("nisse"),
- ?line {ok, #file_info{type = regular}} = Mod:read_link_info("nisse"),
- ?line ok = Mod:delete("nisse"),
- ?line {ok, <<"fil1">>} = Mod:read_file("fil1"),
- ?line {error,enoent} = Mod:read_file("nisse"),
- ?line {error,enoent} = Mod:read_link_info("nisse");
- false ->
+ [ true = is_list(El) || El <- L1],
+ Syms = [ {S,Targ,list_to_binary(get_data(Targ, NormalDir))}
+ || {T,S,Targ} <- NormalDir, T =:= symlink ],
+ [ {ok, Cont} = Mod:read_file(SymL) || {SymL,_,Cont} <- Syms ],
+ [ {ok, Targ} = fixlink(Mod:read_link(SymL)) || {SymL,Targ,_} <- Syms ],
+
+ {ok,BeginAt} = Mod:get_cwd(),
+ true = is_list(BeginAt),
+ TempDir = "temp_dir",
+ make_normal_dir(Mod, TempDir),
+ {error,enoent} = Mod:set_cwd("tmp_dir"),
+ {ok, NowAt} = Mod:get_cwd(),
+ true = BeginAt =/= NowAt,
+ ok = Mod:set_cwd(".."),
+ {ok,BeginAt} = Mod:get_cwd(),
+ rm_r(Mod, TempDir),
+ true = is_list(Dir),
+ [ true = is_list(FN) || FN <- L0 ],
+ case Mod:make_link("fil1","nisse") of
+ ok ->
+ {ok, <<"fil1">>} = Mod:read_file("nisse"),
+ {ok, #file_info{type = regular}} = Mod:read_link_info("nisse"),
+ ok = Mod:delete("nisse"),
+ {ok, <<"fil1">>} = Mod:read_file("fil1"),
+ {error,enoent} = Mod:read_file("nisse"),
+ {error,enoent} = Mod:read_link_info("nisse");
+ {error,enotsup} ->
ok
end,
- ?line [ begin
- ?line {ok, FD} = Mod:open(Name,[read]),
- ?line {ok, Content} = Mod:read(FD,1024),
- ?line ok = file:close(FD)
- end || {regular,Name,Content} <- normal_dir() ],
- ?line [ begin
- ?line {ok, FD} = Mod:open(Name,[read,binary]),
- ?line BC = list_to_binary(Content),
- ?line {ok, BC} = Mod:read(FD,1024),
- ?line ok = file:close(FD)
- end || {regular,Name,Content} <- normal_dir() ],
- ?line Mod:rename("fil1","tmp_fil1"),
- ?line {ok, <<"fil1">>} = Mod:read_file("tmp_fil1"),
- ?line {error,enoent} = Mod:read_file("fil1"),
- ?line Mod:rename("tmp_fil1","fil1"),
- ?line {ok, <<"fil1">>} = Mod:read_file("fil1"),
- ?line {error,enoent} = Mod:read_file("tmp_fil1"),
- ?line {ok,FI} = Mod:read_file_info("fil1"),
- ?line NewMode = FI#file_info.mode band (bnot 8#333),
- ?line NewMode2 = NewMode bor 8#222,
- ?line true = NewMode2 =/= NewMode,
- ?line ok = Mod:write_file_info("fil1",FI#file_info{mode = NewMode}),
- ?line {ok,#file_info{mode = NewMode}} = Mod:read_file_info("fil1"),
- ?line ok = Mod:write_file_info("fil1",FI#file_info{mode = NewMode2}),
- ?line {ok,#file_info{mode = NewMode2}} = Mod:read_file_info("fil1"),
+ [ begin
+ {ok, FD} = Mod:open(Name,[read]),
+ {ok, Content} = Mod:read(FD,1024),
+ ok = file:close(FD)
+ end || {regular,Name,Content} <- NormalDir ],
+ [ begin
+ {ok, FD} = Mod:open(Name,[read,binary]),
+ BC = list_to_binary(Content),
+ {ok, BC} = Mod:read(FD,1024),
+ ok = file:close(FD)
+ end || {regular,Name,Content} <- NormalDir ],
+ Mod:rename("fil1","tmp_fil1"),
+ {ok, <<"fil1">>} = Mod:read_file("tmp_fil1"),
+ {error,enoent} = Mod:read_file("fil1"),
+ Mod:rename("tmp_fil1","fil1"),
+ {ok, <<"fil1">>} = Mod:read_file("fil1"),
+ {error,enoent} = Mod:read_file("tmp_fil1"),
+ {ok,FI} = Mod:read_file_info("fil1"),
+ NewMode = FI#file_info.mode band (bnot 8#333),
+ NewMode2 = NewMode bor 8#222,
+ true = NewMode2 =/= NewMode,
+ ok = Mod:write_file_info("fil1",FI#file_info{mode = NewMode}),
+ {ok,#file_info{mode = NewMode}} = Mod:read_file_info("fil1"),
+ ok = Mod:write_file_info("fil1",FI#file_info{mode = NewMode2}),
+ {ok,#file_info{mode = NewMode2}} = Mod:read_file_info("fil1"),
ok
after
case Mod:read_file_info("fil1") of
@@ -347,129 +332,130 @@ check_normal(Mod) ->
check_icky(Mod) ->
{ok,Dir} = Mod:get_cwd(),
try
- ?line true=(length("åäö") =:= 3),
- ?line UniMode = file:native_name_encoding() =/= latin1,
- ?line make_icky_dir(Mod),
+ true=(length("åäö") =:= 3),
+ UniMode = file:native_name_encoding() =/= latin1,
+ IckyDir = make_icky_dir(Mod, "icky_dir"),
{ok, L0} = Mod:list_dir_all("."),
- ?line L1 = lists:sort(L0),
- io:format("~p~n~p~n~n",[L1,lists:sort(list(icky_dir()))]),
- ?line L1 = lists:sort(convlist(list(icky_dir()))),
- ?line {ok,D2} = Mod:get_cwd(),
- ?line true = is_list(D2),
-%% Altname only on windows, and there are no non native filenames there
-%% ?line case Mod:altname("fil1") of
-%% {error,enotsup} ->
-%% ok;
-%% {ok,LLL} when is_list(LLL) ->
-%% ok
-%% end,
- ?line [ true = ((is_list(El) or (UniMode and is_binary(El)))) || El <- L1],
- ?line Syms = [ {S,conv(Targ),list_to_binary(get_data(Targ,icky_dir()))}
- || {T,S,Targ} <- icky_dir(), T =:= symlink ],
- ?line [ {ok, Cont} = Mod:read_file(SymL) || {SymL,_,Cont} <- Syms ],
+ L1 = lists:sort(L0),
+ io:format("~p~n~p~n~n",[L1,lists:sort(list(IckyDir))]),
+ L1 = lists:sort(convlist(list(IckyDir))),
+ {ok,D2} = Mod:get_cwd(),
+ true = is_list(D2),
+ %% Altname only on windows, and there are no non native filenames there
+ %% case Mod:altname("fil1") of
+ %% {error,enotsup} ->
+ %% ok;
+ %% {ok,LLL} when is_list(LLL) ->
+ %% ok
+ %% end,
+ [ true = ((is_list(El) or (UniMode and is_binary(El)))) || El <- L1],
+ Syms = [ {S,conv(Targ),list_to_binary(get_data(Targ,IckyDir))}
+ || {T,S,Targ} <- IckyDir, T =:= symlink ],
+ [ {ok, Cont} = Mod:read_file(SymL) || {SymL,_,Cont} <- Syms ],
[ {ok, Targ} = fixlink(Mod:read_link_all(SymL)) ||
{SymL,Targ,_} <- Syms ],
- ?line chk_cre_dir(Mod,[{directory,"åäö_dir",icky_dir()}]),
- ?line {ok,BeginAt} = Mod:get_cwd(),
- ?line true = is_list(BeginAt),
- ?line {error,enoent} = Mod:set_cwd("åä_dir"),
- ?line ok = Mod:set_cwd("åäö_dir"),
- ?line {ok, NowAt} = Mod:get_cwd(),
- ?line true = is_list(NowAt),
- ?line true = BeginAt =/= NowAt,
- ?line ok = Mod:set_cwd(".."),
- ?line {ok,BeginAt} = Mod:get_cwd(),
- ?line rm_r2(Mod,"åäö_dir"),
+
+ {ok,BeginAt} = Mod:get_cwd(),
+ true = is_list(BeginAt),
+ _ = make_icky_dir(Mod, "åäö_dir"),
+ {error,enoent} = Mod:set_cwd("åä_dir"),
+ {ok, NowAt} = Mod:get_cwd(),
+ true = is_list(NowAt),
+ true = BeginAt =/= NowAt,
+ ok = Mod:set_cwd(".."),
+ {ok,BeginAt} = Mod:get_cwd(),
+ rm_r2(Mod,"åäö_dir"),
{OS,_} = os:type(),
- % Check that treat_icky really converts to the same as the OS
+
+ %% Check that treat_icky really converts to the same as the OS
case UniMode of
true ->
- ?line chk_cre_dir(Mod,[{directory,"åäö_dir",[]}]),
- ?line ok = Mod:set_cwd("åäö_dir"),
- ?line ok = Mod:write_file(<<"ååå">>,<<"hello">>),
- ?line Treated = treat_icky(<<"ååå">>),
+ ok = Mod:make_dir("åäö_dir"),
+ ok = Mod:set_cwd("åäö_dir"),
+ ok = Mod:write_file(<<"ååå">>,<<"hello">>),
+ Treated = treat_icky(<<"ååå">>),
{ok,[Treated]} = Mod:list_dir_all("."),
- ?line ok = Mod:delete(<<"ååå">>),
- ?line {ok,[]} = Mod:list_dir("."),
- ?line ok = Mod:set_cwd(".."),
- ?line rm_r2(Mod,"åäö_dir");
+ ok = Mod:delete(<<"ååå">>),
+ {ok,[]} = Mod:list_dir("."),
+ ok = Mod:set_cwd(".."),
+ rm_r2(Mod,"åäö_dir");
false ->
ok
end,
- ?line chk_cre_dir(Mod,[{directory,treat_icky(<<"åäö_dir">>),icky_dir()}]),
+ _ = make_icky_dir(Mod, treat_icky(<<"åäö_dir">>)),
if
UniMode and (OS =/= win32) ->
- ?line {error,enoent} = Mod:set_cwd("åäö_dir");
+ {error,enoent} = Mod:set_cwd("åäö_dir");
true ->
ok
end,
- ?line {ok,BeginAt} = Mod:get_cwd(),
- case has_links() of
- true ->
- ?line ok = Mod:make_link("fil1","nisseö"),
- ?line {ok, <<"fil1">>} = Mod:read_file("nisseö"),
- ?line {ok, #file_info{type = regular}} = Mod:read_link_info("nisseö"),
- ?line ok = Mod:delete("nisseö"),
- ?line ok = Mod:make_link("fil1",treat_icky(<<"nisseö">>)),
- ?line {ok, <<"fil1">>} = Mod:read_file(treat_icky(<<"nisseö">>)),
- ?line {ok, #file_info{type = regular}} = Mod:read_link_info(treat_icky(<<"nisseö">>)),
- ?line ok = Mod:delete(treat_icky(<<"nisseö">>)),
- ?line {ok, <<"fil1">>} = Mod:read_file("fil1"),
- ?line {error,enoent} = Mod:read_file("nisseö"),
- ?line {error,enoent} = Mod:read_link_info("nisseö"),
- ?line {error,enoent} = Mod:read_file(treat_icky(<<"nisseö">>)),
- ?line {error,enoent} = Mod:read_link_info(treat_icky(<<"nisseö">>));
- false ->
+ ok = Mod:set_cwd(".."),
+ {ok,BeginAt} = Mod:get_cwd(),
+ case Mod:make_link("fil1", "nisseö") of
+ ok ->
+ {ok, <<"fil1">>} = Mod:read_file("nisseö"),
+ {ok, #file_info{type = regular}} = Mod:read_link_info("nisseö"),
+ ok = Mod:delete("nisseö"),
+ ok = Mod:make_link("fil1",treat_icky(<<"nisseö">>)),
+ {ok, <<"fil1">>} = Mod:read_file(treat_icky(<<"nisseö">>)),
+ {ok, #file_info{type = regular}} = Mod:read_link_info(treat_icky(<<"nisseö">>)),
+ ok = Mod:delete(treat_icky(<<"nisseö">>)),
+ {ok, <<"fil1">>} = Mod:read_file("fil1"),
+ {error,enoent} = Mod:read_file("nisseö"),
+ {error,enoent} = Mod:read_link_info("nisseö"),
+ {error,enoent} = Mod:read_file(treat_icky(<<"nisseö">>)),
+ {error,enoent} = Mod:read_link_info(treat_icky(<<"nisseö">>));
+ {error,enotsup} ->
ok
end,
- ?line [ begin
- ?line {ok, FD} = Mod:open(Name,[read]),
- ?line {ok, Content} = Mod:read(FD,1024),
- ?line ok = file:close(FD)
- end || {regular,Name,Content} <- icky_dir() ],
- ?line [ begin
- ?line {ok, FD} = Mod:open(Name,[read,binary]),
- ?line BC = list_to_binary([Content]),
- ?line {ok, BC} = Mod:read(FD,1024),
- ?line ok = file:close(FD)
- end || {regular,Name,Content} <- icky_dir() ],
- ?line Mod:rename("åäö2","åäö_fil1"),
- ?line {ok, <<"åäö2">>} = Mod:read_file("åäö_fil1"),
- ?line {error,enoent} = Mod:read_file("åäö2"),
- ?line Mod:rename("åäö_fil1","åäö2"),
- ?line {ok, <<"åäö2">>} = Mod:read_file("åäö2"),
- ?line {error,enoent} = Mod:read_file("åäö_fil1"),
+ [ begin
+ {ok, FD} = Mod:open(Name,[read]),
+ {ok, Content} = Mod:read(FD,1024),
+ ok = file:close(FD)
+ end || {regular,Name,Content} <- IckyDir ],
+ [ begin
+ {ok, FD} = Mod:open(Name,[read,binary]),
+ BC = list_to_binary([Content]),
+ {ok, BC} = Mod:read(FD,1024),
+ ok = file:close(FD)
+ end || {regular,Name,Content} <- IckyDir ],
+ Mod:rename("åäö2","åäö_fil1"),
+ {ok, <<"åäö2">>} = Mod:read_file("åäö_fil1"),
+ {error,enoent} = Mod:read_file("åäö2"),
+ Mod:rename("åäö_fil1","åäö2"),
+ {ok, <<"åäö2">>} = Mod:read_file("åäö2"),
+ {error,enoent} = Mod:read_file("åäö_fil1"),
- ?line Mod:rename("åäö2",treat_icky(<<"åäö_fil1">>)),
- ?line {ok, <<"åäö2">>} = Mod:read_file(treat_icky(<<"åäö_fil1">>)),
+ Mod:rename("åäö2",treat_icky(<<"åäö_fil1">>)),
+ {ok, <<"åäö2">>} = Mod:read_file(treat_icky(<<"åäö_fil1">>)),
if
UniMode and (OS =/= win32) ->
{error,enoent} = Mod:read_file("åäö_fil1");
true ->
ok
end,
- ?line {error,enoent} = Mod:read_file("åäö2"),
- ?line Mod:rename(treat_icky(<<"åäö_fil1">>),"åäö2"),
- ?line {ok, <<"åäö2">>} = Mod:read_file("åäö2"),
- ?line {error,enoent} = Mod:read_file("åäö_fil1"),
- ?line {error,enoent} = Mod:read_file(treat_icky(<<"åäö_fil1">>)),
+ {error,enoent} = Mod:read_file("åäö2"),
+ Mod:rename(treat_icky(<<"åäö_fil1">>),"åäö2"),
+ {ok, <<"åäö2">>} = Mod:read_file("åäö2"),
+ {error,enoent} = Mod:read_file("åäö_fil1"),
+ {error,enoent} = Mod:read_file(treat_icky(<<"åäö_fil1">>)),
- ?line {ok,FI} = Mod:read_file_info("åäö2"),
- ?line NewMode = FI#file_info.mode band (bnot 8#333),
- ?line NewMode2 = NewMode bor 8#222,
- ?line true = NewMode2 =/= NewMode,
- ?line ok = Mod:write_file_info("åäö2",FI#file_info{mode = NewMode}),
- ?line {ok,#file_info{mode = NewMode}} = Mod:read_file_info("åäö2"),
- ?line ok = Mod:write_file_info("åäö2",FI#file_info{mode = NewMode2}),
- ?line {ok,#file_info{mode = NewMode2}} = Mod:read_file_info("åäö2"),
+ {ok,FI} = Mod:read_file_info("åäö2"),
+ NewMode = FI#file_info.mode band (bnot 8#333),
+ NewMode2 = NewMode bor 8#222,
+ true = NewMode2 =/= NewMode,
+ ok = Mod:write_file_info("åäö2",FI#file_info{mode = NewMode}),
+ {ok,#file_info{mode = NewMode}} = Mod:read_file_info("åäö2"),
+ ok = Mod:write_file_info("åäö2",FI#file_info{mode = NewMode2}),
+ {ok,#file_info{mode = NewMode2}} = Mod:read_file_info("åäö2"),
- ?line {ok,FII} = Mod:read_file_info(treat_icky(<<"åäö5">>)),
- ?line true = NewMode2 =/= NewMode,
- ?line ok = Mod:write_file_info(treat_icky(<<"åäö5">>),FII#file_info{mode = NewMode}),
- ?line {ok,#file_info{mode = NewMode}} = Mod:read_file_info(treat_icky(<<"åäö5">>)),
- ?line ok = Mod:write_file_info(<<"åäö5">>,FII#file_info{mode = NewMode2}),
- ?line {ok,#file_info{mode = NewMode2}} = Mod:read_file_info(treat_icky(<<"åäö5">>)),
+ {ok,FII} = Mod:read_file_info(treat_icky(<<"åäö5">>)),
+ true = NewMode2 =/= NewMode,
+ ok = Mod:write_file_info(treat_icky(<<"åäö5">>),FII#file_info{mode = NewMode}),
+ {ok,#file_info{mode = NewMode}} = Mod:read_file_info(treat_icky(<<"åäö5">>)),
+ ok = Mod:write_file_info(<<"åäö5">>,FII#file_info{mode = NewMode2}),
+ {ok,#file_info{mode = NewMode2}} = Mod:read_file_info(treat_icky(<<"åäö5">>)),
ok
after
Mod:set_cwd(Dir),
@@ -479,90 +465,90 @@ check_icky(Mod) ->
check_very_icky(Mod) ->
{ok,Dir} = Mod:get_cwd(),
try
- ?line true=(length("åäö") =:= 3),
- ?line UniMode = file:native_name_encoding() =/= latin1,
+ true=(length("åäö") =:= 3),
+ UniMode = file:native_name_encoding() =/= latin1,
if
not UniMode ->
throw(need_unicode_mode);
true ->
ok
end,
- ?line make_very_icky_dir(Mod),
- {ok, L0} = Mod:list_dir_all("."),
- ?line L1 = lists:sort(L0),
- ?line L1 = lists:sort(convlist(list(very_icky_dir()))),
- ?line {ok,D2} = Mod:get_cwd(),
- ?line true = is_list(D2),
- ?line [ true = ((is_list(El) or is_binary(El))) || El <- L1],
- ?line Syms = [ {S,conv(Targ),list_to_binary(get_data(Targ,very_icky_dir()))}
- || {T,S,Targ} <- very_icky_dir(), T =:= symlink ],
- ?line [ {ok, Cont} = Mod:read_file(SymL) || {SymL,_,Cont} <- Syms ],
- ?line [ {ok, Targ} = fixlink(Mod:read_link_all(SymL)) ||
- {SymL,Targ,_} <- Syms ],
- ?line chk_cre_dir(Mod,[{directory,[1088,1079,1091]++"_dir",very_icky_dir()}]),
- ?line {ok,BeginAt} = Mod:get_cwd(),
- ?line true = is_list(BeginAt),
- ?line {error,enoent} = Mod:set_cwd("åä_dir"),
- ?line ok = Mod:set_cwd([1088,1079,1091]++"_dir"),
- ?line {ok, NowAt} = Mod:get_cwd(),
- ?line true = is_list(NowAt),
- ?line true = BeginAt =/= NowAt,
- ?line ok = Mod:set_cwd(".."),
- ?line {ok,BeginAt} = Mod:get_cwd(),
- ?line rm_r2(Mod,[1088,1079,1091]++"_dir"),
+ VeryIckyDir = make_very_icky_dir(Mod, "very_icky_dir"),
+ Expected = lists:sort(convlist(list(VeryIckyDir))),
+ {ok, Actual} = Mod:list_dir_all("."),
+ Expected = lists:sort(Actual),
+ {ok,D2} = Mod:get_cwd(),
+ true = is_list(D2),
+ [ true = ((is_list(El) or is_binary(El))) || El <- Expected],
+ Syms = [{S,conv(Targ),list_to_binary(get_data(Targ, VeryIckyDir))}
+ || {symlink,S,Targ} <- VeryIckyDir],
+ [ {ok, Cont} = Mod:read_file(SymL) || {SymL,_,Cont} <- Syms ],
+ [ {ok, Targ} = fixlink(Mod:read_link_all(SymL)) ||
+ {SymL,Targ,_} <- Syms ],
- case has_links() of
- true ->
- ?line ok = Mod:make_link("fil1","nisse"++[1088,1079,1091]),
- ?line {ok, <<"fil1">>} =
+ {ok,BeginAt} = Mod:get_cwd(),
+ OtherDir = [1088,1079,1091] ++ "_dir",
+ true = is_list(BeginAt),
+ make_very_icky_dir(Mod, OtherDir),
+ {error,enoent} = Mod:set_cwd("åä_dir"),
+ {ok, NowAt} = Mod:get_cwd(),
+ true = is_list(NowAt),
+ true = BeginAt =/= NowAt,
+ ok = Mod:set_cwd(".."),
+ {ok,BeginAt} = Mod:get_cwd(),
+ rm_r2(Mod, OtherDir),
+
+ case Mod:make_link("fil1","nisse"++[1088,1079,1091]) of
+ ok ->
+ {ok, <<"fil1">>} =
Mod:read_file("nisse"++[1088,1079,1091]),
- ?line {ok, #file_info{type = regular}} =
+ {ok, #file_info{type = regular}} =
Mod:read_link_info("nisse"++[1088,1079,1091]),
- ?line ok = Mod:delete("nisse"++[1088,1079,1091]),
- ?line ok = Mod:make_link("fil1",<<"nisseö">>),
- ?line {ok, <<"fil1">>} = Mod:read_file(<<"nisseö">>),
- ?line {ok, #file_info{type = regular}} =
+ ok = Mod:delete("nisse"++[1088,1079,1091]),
+ ok = Mod:make_link("fil1",<<"nisseö">>),
+ {ok, <<"fil1">>} = Mod:read_file(<<"nisseö">>),
+ {ok, #file_info{type = regular}} =
Mod:read_link_info(<<"nisseö">>),
- ?line ok = Mod:delete(<<"nisseö">>),
- ?line {ok, <<"fil1">>} = Mod:read_file("fil1"),
- ?line {error,enoent} = Mod:read_file("nisse"++[1088,1079,1091]),
- ?line {error,enoent} = Mod:read_link_info("nisse"++[1088,1079,1091]),
- ?line {error,enoent} = Mod:read_file(<<"nisseö">>),
- ?line {error,enoent} = Mod:read_link_info(<<"nisseö">>);
- false ->
+ ok = Mod:delete(<<"nisseö">>),
+ {ok, <<"fil1">>} = Mod:read_file("fil1"),
+ {error,enoent} = Mod:read_file("nisse"++[1088,1079,1091]),
+ {error,enoent} = Mod:read_link_info("nisse"++[1088,1079,1091]),
+ {error,enoent} = Mod:read_file(<<"nisseö">>),
+ {error,enoent} = Mod:read_link_info(<<"nisseö">>);
+ {error,enotsup} ->
ok
end,
- ?line [ begin
- ?line {ok, FD} = Mod:open(Name,[read]),
- ?line {ok, Content} = Mod:read(FD,1024),
- ?line ok = file:close(FD)
- end || {regular,Name,Content} <- very_icky_dir() ],
- ?line [ begin
- ?line {ok, FD} = Mod:open(Name,[read,binary]),
- ?line BC = list_to_binary([Content]),
- ?line {ok, BC} = Mod:read(FD,1024),
- ?line ok = file:close(FD)
- end || {regular,Name,Content} <- very_icky_dir() ],
- ?line Mod:rename([956,965,963,954,959,49],
- [956,965,963,954,959]++"_fil1"),
- ?line {ok, <<"åäö2">>} = Mod:read_file([956,965,963,954,959]++"_fil1"),
- ?line {error,enoent} = Mod:read_file([956,965,963,954,959,49]),
- ?line Mod:rename([956,965,963,954,959]++"_fil1",[956,965,963,954,959,49]),
- ?line {ok, <<"åäö2">>} = Mod:read_file([956,965,963,954,959,49]),
- ?line {error,enoent} = Mod:read_file([956,965,963,954,959]++"_fil1"),
+ [ begin
+ {ok, FD} = Mod:open(Name,[read]),
+ {ok, Content} = Mod:read(FD,1024),
+ ok = file:close(FD)
+ end || {regular,Name,Content} <- VeryIckyDir ],
+ [ begin
+ {ok, FD} = Mod:open(Name,[read,binary]),
+ BC = list_to_binary([Content]),
+ {ok, BC} = Mod:read(FD,1024),
+ ok = file:close(FD)
+ end || {regular,Name,Content} <- VeryIckyDir ],
+ Mod:rename([956,965,963,954,959,49],
+ [956,965,963,954,959]++"_fil1"),
+ {ok, <<"åäö2">>} = Mod:read_file([956,965,963,954,959]++"_fil1"),
+ {error,enoent} = Mod:read_file([956,965,963,954,959,49]),
+ Mod:rename([956,965,963,954,959]++"_fil1",[956,965,963,954,959,49]),
+ {ok, <<"åäö2">>} = Mod:read_file([956,965,963,954,959,49]),
+ {error,enoent} = Mod:read_file([956,965,963,954,959]++"_fil1"),
- ?line {ok,FI} = Mod:read_file_info([956,965,963,954,959,49]),
- ?line NewMode = FI#file_info.mode band (bnot 8#333),
- ?line NewMode2 = NewMode bor 8#222,
- ?line true = NewMode2 =/= NewMode,
- ?line ok = Mod:write_file_info([956,965,963,954,959,49],
- FI#file_info{mode = NewMode}),
- ?line {ok,#file_info{mode = NewMode}} =
- Mod:read_file_info([956,965,963,954,959,49]),
- ?line ok = Mod:write_file_info([956,965,963,954,959,49],
- FI#file_info{mode = NewMode2}),
- ?line {ok,#file_info{mode = NewMode2}} =
- Mod:read_file_info([956,965,963,954,959,49]),
+ {ok,FI} = Mod:read_file_info([956,965,963,954,959,49]),
+ NewMode = FI#file_info.mode band (bnot 8#333),
+ NewMode2 = NewMode bor 8#222,
+ true = NewMode2 =/= NewMode,
+ ok = Mod:write_file_info([956,965,963,954,959,49],
+ FI#file_info{mode = NewMode}),
+ {ok,#file_info{mode = NewMode}} =
+ Mod:read_file_info([956,965,963,954,959,49]),
+ ok = Mod:write_file_info([956,965,963,954,959,49],
+ FI#file_info{mode = NewMode2}),
+ {ok,#file_info{mode = NewMode2}} =
+ Mod:read_file_info([956,965,963,954,959,49]),
ok
catch
throw:need_unicode_mode ->
@@ -592,7 +578,6 @@ rm_rf(Mod,Dir) ->
end.
rm_r(Mod,Dir) ->
- %erlang:display({rm_r,Dir}),
case Mod:read_link_info(Dir) of
{ok, #file_info{type = directory}} ->
{ok,#file_info{type = directory}} = Mod:read_file_info(Dir),
@@ -610,7 +595,7 @@ rm_r(Mod,Dir) ->
end.
%% For icky test, allow binaries sometimes
rm_r2(Mod,Dir) ->
- %erlang:display({rm_r2,Dir}),
+ %% erlang:display({rm_r2,Dir}),
case Mod:read_link_info(Dir) of
{ok, #file_info{type = directory}} ->
{ok,#file_info{type = directory}} = Mod:read_file_info(Dir),
@@ -627,90 +612,35 @@ rm_r2(Mod,Dir) ->
{ok, #file_info{type = symlink}} ->
ok = Mod:delete(Dir)
end.
-chk_cre_dir(_,[]) ->
- ok;
-chk_cre_dir(Mod,[{regular,Name,Content}|T]) ->
- %io:format("~p~n",[Name]),
- ok = Mod:write_file(Name,Content),
- chk_cre_dir(Mod,T);
-chk_cre_dir(Mod,[{link,Name,Target}|T]) ->
- ok = Mod:make_link(Target,Name),
- chk_cre_dir(Mod,T);
-chk_cre_dir(Mod,[{symlink,Name,Target}|T]) ->
- ok = Mod:make_symlink(Target,Name),
- chk_cre_dir(Mod,T);
-chk_cre_dir(Mod,[{directory,Name,Content}|T]) ->
- ok = Mod:make_dir(Name),
- %io:format("Content = ~p~n",[Content]),
- Content2 = [{Ty,filename:join(Name,N),case Ty of link -> filename:join(Name,C); _ -> C end} || {Ty,N,C} <- Content ],
- %io:format("Content2 = ~p~n",[Content2]),
- chk_cre_dir(Mod,Content2),
- chk_cre_dir(Mod,T).
-
-has_links() ->
- case os:type() of
- {win32,_} ->
- case os:version() of
- {N,NN,_} when (N > 5) andalso (NN >= 1) ->
- true;
- _ ->
- false
- end;
- _ ->
- true
- end.
-
-make_normal_dir(Mod) ->
- rm_rf(Mod,"normal_dir"),
- Mod:make_dir("normal_dir"),
- Mod:set_cwd("normal_dir"),
- Mod:write_file("fil1","fil1"),
- Mod:write_file("fil2","fil2"),
- case has_links() of
- true ->
- Mod:make_link("fil2","fil3"),
- Mod:make_symlink("fil2","fil4");
- _ ->
- ok
- end,
- Mod:make_dir("subdir"),
- Mod:write_file(filename:join("subdir","subfil1"),"subfil1"),
- ok.
-
-normal_dir() ->
- [{regular,"fil1","fil1"},
- {regular,"fil2","fil2"}] ++
- case has_links() of
- true ->
- [{regular,"fil3","fil2"},
- {symlink,"fil4","fil2"}];
- false ->
- []
- end ++
- [{directory,"subdir",
- [{regular,"subfil1","subfil1"}]}].
-make_icky_dir(Mod) ->
- rm_rf(Mod,"icky_dir"),
- Icky=icky_dir(),
- chk_cre_dir(Mod,[{directory,"icky_dir",linkify([],Icky)}]),
- Mod:set_cwd("icky_dir"),
- ok.
+make_normal_dir(Mod, DirName) ->
+ Dir = [{regular,"fil1","fil1"},
+ {regular,"fil2","fil2"},
+ {hardlink,"fil3","fil2"},
+ {symlink,"fil4","fil2"},
+ {directory,"subdir",
+ [{regular,"subfil1","subfil1"}]}],
+ rm_rf(Mod, DirName),
+ Mod:make_dir(DirName),
+ Mod:set_cwd(DirName),
+ make_dir_contents(Dir, Mod).
-linkify(_Passed,[]) ->
- [];
-linkify(Passed,[{regular,Name,Content}|T]) ->
- Regulars = [ {N,C} || {regular,N,C} <- Passed, N =/= Name ],
- case lists:keysearch(Content,2,Regulars) of
- {value, {Linkto, Content}} ->
- [{link,Name,Linkto} | linkify(Passed,T)];
- _ ->
- [{regular,Name,Content} | linkify([{regular,Name,Content}|Passed],T)]
- end;
-linkify(Passed,[{directory, Name, Content}|T]) ->
- [{directory,Name, linkify(Content,Content)}|linkify(Passed,T)];
-linkify(Passed,[H|T]) ->
- [H|linkify([H|Passed],T)].
+make_icky_dir(Mod, IckyDirName) ->
+ Icky = [{regular,"fil1","fil1"},
+ {regular,"åäö2","åäö2"},
+ {hardlink,"åäö3","åäö2"},
+ {symlink,"åäö4","åäö2"},
+ {regular,treat_icky(<<"åäö5">>),"åäö5"},
+ {symlink,treat_icky(<<"åäö6">>),treat_icky(<<"åäö5">>)},
+ {directory,treat_icky(<<"åäösubdir2">>),
+ [{regular,treat_icky(<<"åäösubfil2">>),"åäösubfil12"},
+ {regular,"åäösubfil3","åäösubfil13"}]},
+ {directory,"åäösubdir",
+ [{regular,"åäösubfil1","åäösubfil1"}]}],
+ rm_rf(Mod, IckyDirName),
+ ok = Mod:make_dir(IckyDirName),
+ ok = Mod:set_cwd(IckyDirName),
+ make_dir_contents(Icky, Mod).
hopeless_darwin() ->
case {os:type(),os:version()} of
@@ -720,58 +650,24 @@ hopeless_darwin() ->
false
end.
-icky_dir() ->
- [{regular,"fil1","fil1"},
- {regular,"åäö2","åäö2"}] ++
- case has_links() of
- true ->
- [{regular,"åäö3","åäö2"},
- {symlink,"åäö4","åäö2"}];
- false ->
- []
- end ++
- [{regular,treat_icky(<<"åäö5">>),"åäö5"}] ++
- case has_links() of
- true ->
- [{symlink,treat_icky(<<"åäö6">>),treat_icky(<<"åäö5">>)}];
- false ->
- []
- end ++
- [{directory,treat_icky(<<"åäösubdir2">>),
- [{regular,treat_icky(<<"åäösubfil2">>),"åäösubfil12"},
- {regular,"åäösubfil3","åäösubfil13"}]},
- {directory,"åäösubdir",
- [{regular,"åäösubfil1","åäösubfil1"}]}].
-
-make_very_icky_dir(Mod) ->
- rm_rf(Mod,"very_icky_dir"),
- Icky=very_icky_dir(),
- chk_cre_dir(Mod,[{directory,"very_icky_dir",linkify([],Icky)}]),
- Mod:set_cwd("very_icky_dir"),
- ok.
-
-very_icky_dir() ->
- [{regular,"fil1","fil1"},
- {regular,[956,965,963,954,959,49],"åäö2"}] ++
- case has_links() of
- true ->
- [{regular,[956,965,963,954,959,50],"åäö2"},
- {symlink,[956,965,963,954,959,51],[956,965,963,954,959,49]}];
- false ->
- []
- end ++
- [{regular,treat_icky(<<"åäö5">>),"åäö5"}] ++
- case has_links() of
- true ->
- [{symlink,treat_icky(<<"åäö6">>),treat_icky(<<"åäö5">>)}];
- false ->
- []
- end ++
- [{directory,treat_icky(<<"åäösubdir2">>),
- [{regular,treat_icky(<<"åäösubfil2">>),"åäösubfil12"},
- {regular,"åäösubfil3","åäösubfil13"}]},
- {directory,[956,965,963,954,959]++"subdir1",
- [{regular,[956,965,963,954,959]++"subfil1","åäösubfil1"}]}].
+make_very_icky_dir(Mod, DirName) ->
+ Desc = [{regular,"fil1","fil1"},
+ {regular,[956,965,963,954,959,49],"åäö2"},
+ {hardlink,[956,965,963,954,959,50],
+ [956,965,963,954,959,49],
+ "åäö2"},
+ {symlink,[956,965,963,954,959,51],[956,965,963,954,959,49]},
+ {regular,treat_icky(<<"åäö5">>),"åäö5"},
+ {symlink,treat_icky(<<"åäö6">>),treat_icky(<<"åäö5">>)},
+ {directory,treat_icky(<<"åäösubdir2">>),
+ [{regular,treat_icky(<<"åäösubfil2">>),"åäösubfil12"},
+ {regular,"åäösubfil3","åäösubfil13"}]},
+ {directory,[956,965,963,954,959]++"subdir1",
+ [{regular,[956,965,963,954,959]++"subfil1","åäösubfil1"}]}],
+ rm_rf(Mod, DirName),
+ ok = Mod:make_dir(DirName),
+ ok = Mod:set_cwd(DirName),
+ make_dir_contents(Desc, Mod).
%% Some OS'es simply do not allow non UTF8 filenames
treat_icky(Bin) ->
@@ -784,7 +680,7 @@ treat_icky(Bin) ->
Bin
end.
-% Handle windows having absolute soft link targets.
+%% Handle windows having absolute soft link targets.
fixlink({ok,Link}) ->
case os:type() of
{win32,_} ->
@@ -811,7 +707,7 @@ list([]) ->
[];
list([{_,Name,_} | T]) ->
[Name | list(T)].
-
+
get_data(FN,List) ->
case lists:keysearch(FN,2,List) of
@@ -827,7 +723,7 @@ get_data(FN,List) ->
convlist(L) ->
convlist(file:native_name_encoding(),L).
convlist(latin1,[Bin|T]) when is_binary(Bin) ->
- %erlang:display('Convert...'),
+ %% erlang:display('Convert...'),
[binary_to_list(Bin)| convlist(latin1,T)];
convlist(Any,[H|T]) ->
[H|convlist(Any,T)];
@@ -844,18 +740,60 @@ conv(L) ->
end.
+make_dir_contents([{regular,Name,Contents}=H|T], Mod) ->
+ ok = Mod:write_file(Name, Contents),
+ [H|make_dir_contents(T, Mod)];
+make_dir_contents([{hardlink,Target,Name}|T], Mod) ->
+ case Mod:make_link(Name, Target) of
+ ok ->
+ [{regular,Target,Name}|make_dir_contents(T, Mod)];
+ {error,enotsup} ->
+ make_dir_contents(T, Mod)
+ end;
+make_dir_contents([{hardlink,Target,Name,Contents}|T], Mod) ->
+ case Mod:make_link(Name, Target) of
+ ok ->
+ [{regular,Target,Contents}|make_dir_contents(T, Mod)];
+ {error,enotsup} ->
+ make_dir_contents(T, Mod)
+ end;
+make_dir_contents([{symlink,Target,Name}=H|T], Mod) ->
+ case Mod:make_symlink(Name, Target) of
+ ok ->
+ [H|make_dir_contents(T, Mod)];
+ {error,enotsup} ->
+ make_dir_contents(T, Mod);
+ {error,eperm} ->
+ make_dir_contents(T, Mod)
+ end;
+make_dir_contents([{directory,Dir,C0}|T], Mod) ->
+ ok = Mod:make_dir(Dir),
+ C1 = [case Op of
+ Link when Link =:= hardlink; Link =:= symlink ->
+ {Op,filename:join(Dir, Name0),filename:join(Dir, Extra)};
+ _ ->
+ {Op,filename:join(Dir, Name0),Extra}
+ end || {Op,Name0,Extra} <- C0],
+ C2 = make_dir_contents(C1, Mod),
+ C = [{Op,filename:basename(Name0),Extra} ||
+ {Op,Name0,Extra} <- C2],
+ [{directory,Dir,C}|make_dir_contents(T, Mod)];
+make_dir_contents([], _Mod) ->
+ [].
+
+
rand_comp_decomp(Max) ->
- N = random:uniform(Max),
+ N = rand:uniform(Max),
L = [ rand_decomp() || _ <- lists:seq(1,N) ],
LC = [ A || {A,_} <- L],
LD = lists:flatten([B || {_,B} <- L]),
LB = unicode:characters_to_binary(LD,unicode,utf8),
{LC,LB}.
-
+
rand_decomp() ->
BT = bigtup(),
SZ = tuple_size(BT),
- element(random:uniform(SZ),BT).
+ element(rand:uniform(SZ),BT).
bigtup() ->
{{192,[65,768]},
{200,[69,768]},
diff --git a/lib/kernel/test/gen_sctp_SUITE.erl b/lib/kernel/test/gen_sctp_SUITE.erl
index 91a57d3290..f836b2aa94 100644
--- a/lib/kernel/test/gen_sctp_SUITE.erl
+++ b/lib/kernel/test/gen_sctp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(gen_sctp_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/inet_sctp.hrl").
%%-compile(export_all).
@@ -29,7 +29,8 @@
init_per_group/2,end_per_group/2,
init_per_testcase/2, end_per_testcase/2]).
-export(
- [basic/1,
+ [skip_old_solaris/1,
+ basic/1,
api_open_close/1,api_listen/1,api_connect_init/1,api_opts/1,
xfer_min/1,xfer_active/1,def_sndrcvinfo/1,implicit_inet6/1,
open_multihoming_ipv4_socket/1,
@@ -42,22 +43,32 @@
names_unihoming_ipv4/1, names_unihoming_ipv6/1,
names_multihoming_ipv4/1, names_multihoming_ipv6/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
-all() ->
- [basic, api_open_close, api_listen, api_connect_init,
- api_opts, xfer_min, xfer_active, def_sndrcvinfo, implicit_inet6,
- open_multihoming_ipv4_socket,
- open_unihoming_ipv6_socket,
- open_multihoming_ipv6_socket,
- open_multihoming_ipv4_and_ipv6_socket, active_n,
- basic_stream, xfer_stream_min, peeloff_active_once,
- peeloff_active_true, peeloff_active_n, buffers,
- names_unihoming_ipv4, names_unihoming_ipv6,
- names_multihoming_ipv4, names_multihoming_ipv6].
+all() ->
+ G = case is_old_solaris() of
+ true -> old_solaris;
+ false -> extensive
+ end,
+ [{group,smoke},
+ {group,G}].
groups() ->
- [].
+ [{smoke,[],[basic,basic_stream]},
+ {old_solaris,[],[skip_old_solaris]},
+ {extensive,[],
+ [api_open_close, api_listen, api_connect_init,
+ api_opts, xfer_min, xfer_active, def_sndrcvinfo, implicit_inet6,
+ open_multihoming_ipv4_socket,
+ open_unihoming_ipv6_socket,
+ open_multihoming_ipv6_socket,
+ open_multihoming_ipv4_and_ipv6_socket, active_n,
+ xfer_stream_min, peeloff_active_once,
+ peeloff_active_true, peeloff_active_n, buffers,
+ names_unihoming_ipv4, names_unihoming_ipv6,
+ names_multihoming_ipv4, names_multihoming_ipv6]}].
init_per_suite(_Config) ->
case gen_sctp:open() of
@@ -81,48 +92,44 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(test_server:seconds(15)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ Config.
+end_per_testcase(_Func, _Config) ->
+ ok.
-define(LOGVAR(Var), begin io:format(??Var" = ~p~n", [Var]) end).
+is_old_solaris() ->
+ os:type() =:= {unix,sunos} andalso os:version() < {5,12,0}.
+skip_old_solaris(_Config) ->
+ {skip,"Unreliable test cases and/or implementation on old Solaris"}.
-basic(doc) ->
- "Hello world";
-basic(suite) ->
- [];
+%% Hello world.
basic(Config) when is_list(Config) ->
- ?line {ok,S} = gen_sctp:open(),
- ?line ok = gen_sctp:close(S),
+ {ok,S} = gen_sctp:open(),
+ ok = gen_sctp:close(S),
ok.
-xfer_min(doc) ->
- "Minimal data transfer";
-xfer_min(suite) ->
- [];
+%% Minimal data transfer.
xfer_min(Config) when is_list(Config) ->
- ?line Stream = 0,
- ?line Data = <<"The quick brown fox jumps over a lazy dog 0123456789">>,
- ?line Loopback = {127,0,0,1},
- ?line {ok,Sb} = gen_sctp:open([{type,seqpacket}]),
- ?line {ok,Pb} = inet:port(Sb),
- ?line ok = gen_sctp:listen(Sb, true),
-
- ?line {ok,Sa} = gen_sctp:open(),
- ?line {ok,Pa} = inet:port(Sa),
- ?line {ok,#sctp_assoc_change{state=comm_up,
- error=0,
- outbound_streams=SaOutboundStreams,
- inbound_streams=SaInboundStreams,
- assoc_id=SaAssocId}=SaAssocChange} =
+ Stream = 0,
+ Data = <<"The quick brown fox jumps over a lazy dog 0123456789">>,
+ Loopback = {127,0,0,1},
+ {ok,Sb} = gen_sctp:open([{type,seqpacket}]),
+ {ok,Pb} = inet:port(Sb),
+ ok = gen_sctp:listen(Sb, true),
+
+ {ok,Sa} = gen_sctp:open(),
+ {ok,Pa} = inet:port(Sa),
+ {ok,#sctp_assoc_change{state=comm_up,
+ error=0,
+ outbound_streams=SaOutboundStreams,
+ inbound_streams=SaInboundStreams,
+ assoc_id=SaAssocId}=SaAssocChange} =
gen_sctp:connect(Sa, Loopback, Pb, []),
- ?line {SbAssocId,SaOutboundStreams,SaInboundStreams} =
+ {SbAssocId,SaOutboundStreams,SaInboundStreams} =
case recv_event(log_ok(gen_sctp:recv(Sb, infinity))) of
{Loopback,Pa,
#sctp_assoc_change{state=comm_up,
@@ -142,184 +149,181 @@ xfer_min(Config) when is_list(Config) ->
outbound_streams=SbOutboundStreams,
inbound_streams=SbInboundStreams,
assoc_id=AssocId}} =
- ?line recv_event(log_ok(gen_sctp:recv(Sb, infinity))),
+ recv_event(log_ok(gen_sctp:recv(Sb, infinity))),
{AssocId,SbInboundStreams,SbOutboundStreams}
end,
- ?line ok = gen_sctp:send(Sa, SaAssocId, 0, Data),
- ?line case log_ok(gen_sctp:recv(Sb, infinity)) of
- {Loopback,
- Pa,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SbAssocId}],
- Data} -> ok;
- Event1 ->
- case recv_event(Event1) of
- {Loopback,Pa,
- #sctp_paddr_change{addr = {Loopback,_},
- state = State,
- error = 0,
- assoc_id = SbAssocId}}
- when State =:= addr_available;
- State =:= addr_confirmed ->
- {Loopback,
- Pa,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SbAssocId}],
- Data} = log_ok(gen_sctp:recv(Sb, infinity))
- end
- end,
- ?line ok = gen_sctp:send(Sb, SbAssocId, 0, Data),
- ?line case log_ok(gen_sctp:recv(Sa, infinity)) of
- {Loopback,Pb,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SaAssocId}],
- Data} ->
- ok;
- Event2 ->
- {Loopback,Pb,
- #sctp_paddr_change{addr={_,Pb},
- state=addr_confirmed,
- error=0,
- assoc_id=SaAssocId}} =
- ?line recv_event(Event2),
- ?line {Loopback,
- Pb,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SaAssocId}],
- Data} =
- log_ok(gen_sctp:recv(Sa, infinity))
- end,
+ ok = gen_sctp:send(Sa, SaAssocId, 0, Data),
+ case log_ok(gen_sctp:recv(Sb, infinity)) of
+ {Loopback,
+ Pa,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SbAssocId}],
+ Data} -> ok;
+ Event1 ->
+ case recv_event(Event1) of
+ {Loopback,Pa,
+ #sctp_paddr_change{addr = {Loopback,_},
+ state = State,
+ error = 0,
+ assoc_id = SbAssocId}}
+ when State =:= addr_available;
+ State =:= addr_confirmed ->
+ {Loopback,
+ Pa,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SbAssocId}],
+ Data} = log_ok(gen_sctp:recv(Sb, infinity))
+ end
+ end,
+ ok = gen_sctp:send(Sb, SbAssocId, 0, Data),
+ case log_ok(gen_sctp:recv(Sa, infinity)) of
+ {Loopback,Pb,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SaAssocId}],
+ Data} ->
+ ok;
+ Event2 ->
+ {Loopback,Pb,
+ #sctp_paddr_change{addr={_,Pb},
+ state=addr_confirmed,
+ error=0,
+ assoc_id=SaAssocId}} =
+ recv_event(Event2),
+ {Loopback,
+ Pb,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SaAssocId}],
+ Data} =
+ log_ok(gen_sctp:recv(Sa, infinity))
+ end,
%%
- ?line ok = gen_sctp:eof(Sa, SaAssocChange),
- ?line {Loopback,Pa,#sctp_shutdown_event{assoc_id=SbAssocId}} =
+ ok = gen_sctp:eof(Sa, SaAssocChange),
+ {Loopback,Pa,#sctp_shutdown_event{assoc_id=SbAssocId}} =
recv_event(log_ok(gen_sctp:recv(Sb, infinity))),
- ?line {Loopback,Pb,
- #sctp_assoc_change{state=shutdown_comp,
- error=0,
- assoc_id=SaAssocId}} =
+ {Loopback,Pb,
+ #sctp_assoc_change{state=shutdown_comp,
+ error=0,
+ assoc_id=SaAssocId}} =
recv_event(log_ok(gen_sctp:recv(Sa, infinity))),
- ?line {Loopback,Pa,
- #sctp_assoc_change{state=shutdown_comp,
- error=0,
- assoc_id=SbAssocId}} =
+ {Loopback,Pa,
+ #sctp_assoc_change{state=shutdown_comp,
+ error=0,
+ assoc_id=SbAssocId}} =
recv_event(log_ok(gen_sctp:recv(Sb, infinity))),
- ?line ok = gen_sctp:close(Sa),
- ?line ok = gen_sctp:close(Sb),
+ ok = gen_sctp:close(Sa),
+ ok = gen_sctp:close(Sb),
- ?line receive
- Msg -> test_server:fail({received,Msg})
- after 17 -> ok
- end,
+ receive
+ Msg -> ct:fail({received,Msg})
+ after 17 -> ok
+ end,
ok.
-xfer_active(doc) ->
- "Minimal data transfer in active mode";
-xfer_active(suite) ->
- [];
+%% Minimal data transfer in active mode.
xfer_active(Config) when is_list(Config) ->
- ?line Timeout = 2000,
- ?line Stream = 0,
- ?line Data = <<"The quick brown fox jumps over a lazy dog 0123456789">>,
- ?line Loopback = {127,0,0,1},
- ?line {ok,Sb} = gen_sctp:open([{active,true}]),
- ?line {ok,Pb} = inet:port(Sb),
- ?line ok = gen_sctp:listen(Sb, true),
-
- ?line {ok,Sa} = gen_sctp:open([{active,true}]),
- ?line {ok,Pa} = inet:port(Sa),
- ?line ok = gen_sctp:connect_init(Sa, Loopback, Pb, []),
- ?line #sctp_assoc_change{state=comm_up,
- error=0,
- outbound_streams=SaOutboundStreams,
- inbound_streams=SaInboundStreams,
- assoc_id=SaAssocId} = SaAssocChange =
+ Timeout = 2000,
+ Stream = 0,
+ Data = <<"The quick brown fox jumps over a lazy dog 0123456789">>,
+ Loopback = {127,0,0,1},
+ {ok,Sb} = gen_sctp:open([{active,true}]),
+ {ok,Pb} = inet:port(Sb),
+ ok = gen_sctp:listen(Sb, true),
+
+ {ok,Sa} = gen_sctp:open([{active,true}]),
+ {ok,Pa} = inet:port(Sa),
+ ok = gen_sctp:connect_init(Sa, Loopback, Pb, []),
+ #sctp_assoc_change{state=comm_up,
+ error=0,
+ outbound_streams=SaOutboundStreams,
+ inbound_streams=SaInboundStreams,
+ assoc_id=SaAssocId} = SaAssocChange =
recv_assoc_change(Sa, Loopback, Pb, Timeout),
- ?line io:format("Sa=~p, Pa=~p, Sb=~p, Pb=~p, SaAssocId=~p, "
- "SaOutboundStreams=~p, SaInboundStreams=~p~n",
- [Sa,Pa,Sb,Pb,SaAssocId,
- SaOutboundStreams,SaInboundStreams]),
- ?line #sctp_assoc_change{state=comm_up,
- error=0,
- outbound_streams=SbOutboundStreams,
- inbound_streams=SbInboundStreams,
- assoc_id=SbAssocId} =
+ io:format("Sa=~p, Pa=~p, Sb=~p, Pb=~p, SaAssocId=~p, "
+ "SaOutboundStreams=~p, SaInboundStreams=~p~n",
+ [Sa,Pa,Sb,Pb,SaAssocId,
+ SaOutboundStreams,SaInboundStreams]),
+ #sctp_assoc_change{state=comm_up,
+ error=0,
+ outbound_streams=SbOutboundStreams,
+ inbound_streams=SbInboundStreams,
+ assoc_id=SbAssocId} =
recv_assoc_change(Sb, Loopback, Pa, Timeout),
- ?line SbOutboundStreams = SaInboundStreams,
- ?line SbInboundStreams = SaOutboundStreams,
- ?line io:format("SbAssocId=~p~n", [SbAssocId]),
-
- ?line case recv_paddr_change(Sa, Loopback, Pb, 314) of
- #sctp_paddr_change{state=addr_confirmed,
- addr={_,Pb},
- error=0,
- assoc_id=SaAssocId} -> ok;
- #sctp_paddr_change{state=addr_available,
- addr={_,Pb},
- error=0,
- assoc_id=SaAssocId} -> ok;
- timeout -> ok
- end,
- ?line case recv_paddr_change(Sb, Loopback, Pa, 314) of
- #sctp_paddr_change{state=addr_confirmed,
- addr={Loopback,Pa},
- error=0,
- assoc_id=SbAssocId} -> ok;
- #sctp_paddr_change{state=addr_available,
- addr={Loopback,P},
- error=0,
- assoc_id=SbAssocId} ->
- ?line match_unless_solaris(Pa, P);
- timeout -> ok
- end,
- ?line [] = flush(),
-
- ?line ok =
+ SbOutboundStreams = SaInboundStreams,
+ SbInboundStreams = SaOutboundStreams,
+ io:format("SbAssocId=~p~n", [SbAssocId]),
+
+ case recv_paddr_change(Sa, Loopback, Pb, 314) of
+ #sctp_paddr_change{state=addr_confirmed,
+ addr={_,Pb},
+ error=0,
+ assoc_id=SaAssocId} -> ok;
+ #sctp_paddr_change{state=addr_available,
+ addr={_,Pb},
+ error=0,
+ assoc_id=SaAssocId} -> ok;
+ timeout -> ok
+ end,
+ case recv_paddr_change(Sb, Loopback, Pa, 314) of
+ #sctp_paddr_change{state=addr_confirmed,
+ addr={Loopback,Pa},
+ error=0,
+ assoc_id=SbAssocId} -> ok;
+ #sctp_paddr_change{state=addr_available,
+ addr={Loopback,P},
+ error=0,
+ assoc_id=SbAssocId} ->
+ match_unless_solaris(Pa, P);
+ timeout -> ok
+ end,
+ [] = flush(),
+
+ ok =
do_from_other_process(
fun () -> gen_sctp:send(Sa, SaAssocId, 0, Data) end),
- ?line receive
- {sctp,Sb,Loopback,Pa,
- {[#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SbAssocId}],
- Data}} -> ok
- after Timeout ->
- ?line test_server:fail({timeout,flush()})
- end,
- ?line ok = gen_sctp:send(Sb, SbAssocId, 0, Data),
- ?line receive
- {sctp,Sa,Loopback,Pb,
- {[#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SaAssocId}],
- Data}} -> ok
- after Timeout ->
- ?line test_server:fail({timeout,flush()})
- end,
+ receive
+ {sctp,Sb,Loopback,Pa,
+ {[#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SbAssocId}],
+ Data}} -> ok
+ after Timeout ->
+ ct:fail({timeout,flush()})
+ end,
+ ok = gen_sctp:send(Sb, SbAssocId, 0, Data),
+ receive
+ {sctp,Sa,Loopback,Pb,
+ {[#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SaAssocId}],
+ Data}} -> ok
+ after Timeout ->
+ ct:fail({timeout,flush()})
+ end,
%%
- ?line ok = gen_sctp:abort(Sa, SaAssocChange),
- ?line case recv_assoc_change(Sb, Loopback, Pa, Timeout) of
- #sctp_assoc_change{state=comm_lost,
- assoc_id=SbAssocId} -> ok;
- timeout ->
- ?line test_server:fail({timeout,flush()})
- end,
- ?line ok = gen_sctp:close(Sb),
- ?line case recv_assoc_change(Sa, Loopback, Pb, Timeout) of
- #sctp_assoc_change{state=comm_lost,
- assoc_id=SaAssocId} -> ok;
- timeout ->
- ?line io:format("timeout waiting for comm_lost on Sa~n"),
- ?line match_unless_solaris(ok, {timeout,flush()})
- end,
- ?line receive
- {sctp_error,Sa,enotconn} -> ok % Solaris
- after 17 -> ok
- end,
- ?line ok = gen_sctp:close(Sa),
+ ok = gen_sctp:abort(Sa, SaAssocChange),
+ case recv_assoc_change(Sb, Loopback, Pa, Timeout) of
+ #sctp_assoc_change{state=comm_lost,
+ assoc_id=SbAssocId} -> ok;
+ timeout ->
+ ct:fail({timeout,flush()})
+ end,
+ ok = gen_sctp:close(Sb),
+ case recv_assoc_change(Sa, Loopback, Pb, Timeout) of
+ #sctp_assoc_change{state=comm_lost,
+ assoc_id=SaAssocId} -> ok;
+ timeout ->
+ io:format("timeout waiting for comm_lost on Sa~n"),
+ match_unless_solaris(ok, {timeout,flush()})
+ end,
+ receive
+ {sctp_error,Sa,enotconn} -> ok % Solaris
+ after 17 -> ok
+ end,
+ ok = gen_sctp:close(Sa),
%%
- ?line receive
- Msg -> test_server:fail({unexpected,[Msg]++flush()})
- after 17 -> ok
- end,
+ receive
+ Msg -> ct:fail({unexpected,[Msg]++flush()})
+ after 17 -> ok
+ end,
ok.
recv_assoc_change(S, Addr, Port, Timeout) ->
@@ -346,142 +350,139 @@ recv_paddr_change(S, Addr, Port, Timeout) ->
timeout
end.
-def_sndrcvinfo(doc) ->
- "Test that #sctp_sndrcvinfo{} parameters set on a socket "
- "are used by gen_sctp:send/4";
-def_sndrcvinfo(suite) ->
- [];
+%% Test that #sctp_sndrcvinfo{} parameters set on a socket
+%% are used by gen_sctp:send/4.
def_sndrcvinfo(Config) when is_list(Config) ->
- ?line Loopback = {127,0,0,1},
- ?line Data = <<"What goes up, must come down.">>,
+ Loopback = {127,0,0,1},
+ Data = <<"What goes up, must come down.">>,
%%
- ?line S1 =
+ S1 =
log_ok(gen_sctp:open(
0, [{sctp_default_send_param,#sctp_sndrcvinfo{ppid=17}}])),
?LOGVAR(S1),
- ?line P1 =
+ P1 =
log_ok(inet:port(S1)),
?LOGVAR(P1),
- ?line #sctp_sndrcvinfo{ppid=17, context=0, timetolive=0, assoc_id=0} =
+ #sctp_sndrcvinfo{ppid=17, context=0, timetolive=0, assoc_id=0} =
getopt(S1, sctp_default_send_param),
- ?line ok =
+ ok =
gen_sctp:listen(S1, true),
%%
- ?line S2 =
+ S2 =
log_ok(gen_sctp:open()),
?LOGVAR(S2),
- ?line P2 =
+ P2 =
log_ok(inet:port(S2)),
?LOGVAR(P2),
- ?line #sctp_sndrcvinfo{ppid=0, context=0, timetolive=0, assoc_id=0} =
+ #sctp_sndrcvinfo{ppid=0, context=0, timetolive=0, assoc_id=0} =
getopt(S2, sctp_default_send_param),
%%
- ?line #sctp_assoc_change{
+ #sctp_assoc_change{
state=comm_up,
error=0,
assoc_id=S2AssocId} = S2AssocChange =
log_ok(gen_sctp:connect(S2, Loopback, P1, [])),
?LOGVAR(S2AssocChange),
- ?line case recv_event(log_ok(gen_sctp:recv(S1))) of
- {Loopback,P2,
- #sctp_assoc_change{
- state=comm_up,
- error=0,
- assoc_id=S1AssocId}} ->
- ?LOGVAR(S1AssocId);
- {Loopback,P2,
- #sctp_paddr_change{
- state=addr_confirmed,
- error=0,
- assoc_id=S1AssocId}} ->
- ?LOGVAR(S1AssocId),
- {Loopback,P2,
- #sctp_assoc_change{
- state=comm_up,
- error=0,
- assoc_id=S1AssocId}} =
- recv_event(log_ok(gen_sctp:recv(S1)))
- end,
-
- ?line #sctp_sndrcvinfo{
+ case recv_event(log_ok(gen_sctp:recv(S1))) of
+ {Loopback,P2,
+ #sctp_assoc_change{
+ state=comm_up,
+ error=0,
+ assoc_id=S1AssocId}} ->
+ ?LOGVAR(S1AssocId);
+ {Loopback,P2,
+ #sctp_paddr_change{
+ state=addr_confirmed,
+ error=0,
+ assoc_id=S1AssocId}} ->
+ ?LOGVAR(S1AssocId),
+ {Loopback,P2,
+ #sctp_assoc_change{
+ state=comm_up,
+ error=0,
+ assoc_id=S1AssocId}} =
+ recv_event(log_ok(gen_sctp:recv(S1)))
+ end,
+
+ #sctp_sndrcvinfo{
ppid=17, context=0, timetolive=0} = %, assoc_id=S1AssocId} =
getopt(
S1, sctp_default_send_param, #sctp_sndrcvinfo{assoc_id=S1AssocId}),
- ?line #sctp_sndrcvinfo{
+ #sctp_sndrcvinfo{
ppid=0, context=0, timetolive=0} = %, assoc_id=S2AssocId} =
getopt(
S2, sctp_default_send_param, #sctp_sndrcvinfo{assoc_id=S2AssocId}),
%%
- ?line ok =
+ ok =
gen_sctp:send(S1, S1AssocId, 1, <<"1: ",Data/binary>>),
- ?line case log_ok(gen_sctp:recv(S2)) of
- {Loopback,P1,
- [#sctp_sndrcvinfo{
- stream=1, ppid=17, context=0, assoc_id=S2AssocId}],
- <<"1: ",Data/binary>>} -> ok;
- Event1 ->
- ?line {Loopback,P1,
- #sctp_paddr_change{state=addr_confirmed,
- addr={_,P1},
- error=0,
- assoc_id=S2AssocId}} =
- recv_event(Event1),
- ?line {Loopback,P1,
- [#sctp_sndrcvinfo{
- stream=1, ppid=17, context=0, assoc_id=S2AssocId}],
- <<"1: ",Data/binary>>} =
- log_ok(gen_sctp:recv(S2))
- end,
+ case log_ok(gen_sctp:recv(S2)) of
+ {Loopback,P1,
+ [#sctp_sndrcvinfo{
+ stream=1, ppid=17, context=0, assoc_id=S2AssocId}],
+ <<"1: ",Data/binary>>} -> ok;
+ Event1 ->
+ {Loopback,P1,
+ #sctp_paddr_change{state=addr_confirmed,
+ addr={_,P1},
+ error=0,
+ assoc_id=S2AssocId}} =
+ recv_event(Event1),
+ {Loopback,P1,
+ [#sctp_sndrcvinfo{
+ stream=1, ppid=17, context=0, assoc_id=S2AssocId}],
+ <<"1: ",Data/binary>>} =
+ log_ok(gen_sctp:recv(S2))
+ end,
%%
- ?line ok =
+ ok =
setopt(
S1, sctp_default_send_param, #sctp_sndrcvinfo{ppid=18}),
- ?line ok =
+ ok =
setopt(
S1, sctp_default_send_param,
#sctp_sndrcvinfo{ppid=19, assoc_id=S1AssocId}),
- ?line #sctp_sndrcvinfo{
+ #sctp_sndrcvinfo{
ppid=18, context=0, timetolive=0, assoc_id=0} =
getopt(S1, sctp_default_send_param),
- ?line #sctp_sndrcvinfo{
+ #sctp_sndrcvinfo{
ppid=19, context=0, timetolive=0, assoc_id=S1AssocId} =
getopt(
S1, sctp_default_send_param, #sctp_sndrcvinfo{assoc_id=S1AssocId}),
%%
- ?line ok =
+ ok =
gen_sctp:send(S1, S1AssocId, 0, <<"2: ",Data/binary>>),
- ?line case log_ok(gen_sctp:recv(S2)) of
- {Loopback,P1,
- [#sctp_sndrcvinfo{
- stream=0, ppid=19, context=0, assoc_id=S2AssocId}],
- <<"2: ",Data/binary>>} -> ok
- end,
- ?line ok =
+ case log_ok(gen_sctp:recv(S2)) of
+ {Loopback,P1,
+ [#sctp_sndrcvinfo{
+ stream=0, ppid=19, context=0, assoc_id=S2AssocId}],
+ <<"2: ",Data/binary>>} -> ok
+ end,
+ ok =
gen_sctp:send(S2, S2AssocChange, 1, <<"3: ",Data/binary>>),
- ?line case log_ok(gen_sctp:recv(S1)) of
- {Loopback,P2,
- [#sctp_sndrcvinfo{
- stream=1, ppid=0, context=0, assoc_id=S1AssocId}],
- <<"3: ",Data/binary>>} -> ok;
- Event2 ->
- case recv_event(Event2) of
- {Loopback,P2,
- #sctp_paddr_change{
- addr={Loopback,_},
- state=State,
- error=0, assoc_id=S1AssocId}}
- when State =:= addr_available;
- State =:= addr_confirmed ->
- ?line case log_ok(gen_sctp:recv(S1)) of
- {Loopback,P2,
- [#sctp_sndrcvinfo{
- stream=1, ppid=0, context=0,
- assoc_id=S1AssocId}],
- <<"3: ",Data/binary>>} -> ok
- end
- end
- end,
- ?line ok =
+ case log_ok(gen_sctp:recv(S1)) of
+ {Loopback,P2,
+ [#sctp_sndrcvinfo{
+ stream=1, ppid=0, context=0, assoc_id=S1AssocId}],
+ <<"3: ",Data/binary>>} -> ok;
+ Event2 ->
+ case recv_event(Event2) of
+ {Loopback,P2,
+ #sctp_paddr_change{
+ addr={Loopback,_},
+ state=State,
+ error=0, assoc_id=S1AssocId}}
+ when State =:= addr_available;
+ State =:= addr_confirmed ->
+ case log_ok(gen_sctp:recv(S1)) of
+ {Loopback,P2,
+ [#sctp_sndrcvinfo{
+ stream=1, ppid=0, context=0,
+ assoc_id=S1AssocId}],
+ <<"3: ",Data/binary>>} -> ok
+ end
+ end
+ end,
+ ok =
do_from_other_process(
fun () ->
gen_sctp:send(
@@ -489,22 +490,22 @@ def_sndrcvinfo(Config) when is_list(Config) ->
#sctp_sndrcvinfo{stream=0, ppid=20, assoc_id=S2AssocId},
<<"4: ",Data/binary>>)
end),
- ?line case log_ok(do_from_other_process(fun() -> gen_sctp:recv(S1) end)) of
- {Loopback,P2,
- [#sctp_sndrcvinfo{
- stream=0, ppid=20, context=0, assoc_id=S1AssocId}],
- <<"4: ",Data/binary>>} -> ok
- end,
+ case log_ok(do_from_other_process(fun() -> gen_sctp:recv(S1) end)) of
+ {Loopback,P2,
+ [#sctp_sndrcvinfo{
+ stream=0, ppid=20, context=0, assoc_id=S1AssocId}],
+ <<"4: ",Data/binary>>} -> ok
+ end,
%%
- ?line ok =
+ ok =
gen_sctp:close(S1),
- ?line ok =
+ ok =
gen_sctp:close(S2),
- ?line receive
- Msg ->
- test_server:fail({received,Msg})
- after 17 -> ok
- end,
+ receive
+ Msg ->
+ ct:fail({received,Msg})
+ after 17 -> ok
+ end,
ok.
getopt(S, Opt) ->
@@ -541,147 +542,138 @@ flush() ->
[]
end.
-api_open_close(doc) ->
- "Test the API function open/1,2 and close/1";
-api_open_close(suite) ->
- [];
+%% Test the API function open/1,2 and close/1.
api_open_close(Config) when is_list(Config) ->
- ?line {ok,S1} = gen_sctp:open(0),
- ?line {ok,P} = inet:port(S1),
- ?line ok = gen_sctp:close(S1),
+ {ok,S1} = gen_sctp:open(0),
+ {ok,P} = inet:port(S1),
+ ok = gen_sctp:close(S1),
- ?line {ok,S2} = gen_sctp:open(P),
- ?line {ok,P} = inet:port(S2),
- ?line ok = gen_sctp:close(S2),
+ {ok,S2} = gen_sctp:open(P),
+ {ok,P} = inet:port(S2),
+ ok = gen_sctp:close(S2),
- ?line {ok,S3} = gen_sctp:open([{port,P}]),
- ?line {ok,P} = inet:port(S3),
- ?line ok = gen_sctp:close(S3),
+ {ok,S3} = gen_sctp:open([{port,P}]),
+ {ok,P} = inet:port(S3),
+ ok = gen_sctp:close(S3),
- ?line {ok,S4} = gen_sctp:open(P, []),
- ?line {ok,P} = inet:port(S4),
- ?line ok = gen_sctp:close(S4),
+ {ok,S4} = gen_sctp:open(P, []),
+ {ok,P} = inet:port(S4),
+ ok = gen_sctp:close(S4),
- ?line {ok,S5} = gen_sctp:open(P, [{ifaddr,any}]),
- ?line {ok,P} = inet:port(S5),
- ?line ok = gen_sctp:close(S5),
+ {ok,S5} = gen_sctp:open(P, [{ifaddr,any}]),
+ {ok,P} = inet:port(S5),
+ ok = gen_sctp:close(S5),
- ?line ok = gen_sctp:close(S5),
+ ok = gen_sctp:close(S5),
- ?line try gen_sctp:close(0)
- catch error:badarg -> ok
- end,
+ try gen_sctp:close(0)
+ catch error:badarg -> ok
+ end,
- ?line try gen_sctp:open({})
- catch error:badarg -> ok
- end,
+ try gen_sctp:open({})
+ catch error:badarg -> ok
+ end,
- ?line try gen_sctp:open(-1)
- catch error:badarg -> ok
- end,
+ try gen_sctp:open(-1)
+ catch error:badarg -> ok
+ end,
- ?line try gen_sctp:open(65536)
- catch error:badarg -> ok
- end,
+ try gen_sctp:open(65536)
+ catch error:badarg -> ok
+ end,
- ?line try gen_sctp:open(make_ref(), [])
- catch error:badarg -> ok
- end,
+ try gen_sctp:open(make_ref(), [])
+ catch error:badarg -> ok
+ end,
- ?line try gen_sctp:open(0, {})
- catch error:badarg -> ok
- end,
+ try gen_sctp:open(0, {})
+ catch error:badarg -> ok
+ end,
- ?line try gen_sctp:open(0, [make_ref()])
- catch error:badarg -> ok
- end,
+ try gen_sctp:open(0, [make_ref()])
+ catch error:badarg -> ok
+ end,
- ?line try gen_sctp:open([{invalid_option,0}])
- catch error:badarg -> ok
- end,
+ try gen_sctp:open([{invalid_option,0}])
+ catch error:badarg -> ok
+ end,
- ?line try gen_sctp:open(0, [{mode,invalid_mode}])
- catch error:badarg -> ok
- end,
+ try gen_sctp:open(0, [{mode,invalid_mode}])
+ catch error:badarg -> ok
+ end,
ok.
-api_listen(doc) ->
- "Test the API function listen/2";
-api_listen(suite) ->
- [];
+%% Test the API function listen/2.
api_listen(Config) when is_list(Config) ->
- ?line Localhost = {127,0,0,1},
-
- ?line try gen_sctp:listen(0, true)
- catch error:badarg -> ok
- end,
-
- ?line {ok,S} = gen_sctp:open(),
- ?line {ok,Pb} = inet:port(S),
- ?line try gen_sctp:listen(S, not_allowed_for_listen)
- catch error:badarg -> ok
- end,
- ?line ok = gen_sctp:close(S),
- ?line {error,closed} = gen_sctp:listen(S, true),
-
- ?line {ok,Sb} = gen_sctp:open(Pb),
- ?line {ok,Sa} = gen_sctp:open(),
- ?line case gen_sctp:connect(Sa, localhost, Pb, []) of
- {error,econnrefused} ->
- ?line {ok,{Localhost,
- Pb,[],
- #sctp_assoc_change{
- state=comm_lost}}} =
- gen_sctp:recv(Sa, infinity);
- {error,#sctp_assoc_change{state=cant_assoc}} ->
- ok%;
- %% {error,{Localhost,Pb,_,#sctp_assoc_change{state=cant_assoc}}} ->
- %% ok
- end,
- ?line ok = gen_sctp:listen(Sb, true),
- ?line {ok,#sctp_assoc_change{state=comm_up,
- error=0}} =
+ Localhost = {127,0,0,1},
+
+ try gen_sctp:listen(0, true)
+ catch error:badarg -> ok
+ end,
+
+ {ok,S} = gen_sctp:open(),
+ {ok,Pb} = inet:port(S),
+ try gen_sctp:listen(S, not_allowed_for_listen)
+ catch error:badarg -> ok
+ end,
+ ok = gen_sctp:close(S),
+ {error,closed} = gen_sctp:listen(S, true),
+
+ {ok,Sb} = gen_sctp:open(Pb),
+ {ok,Sa} = gen_sctp:open(),
+ case gen_sctp:connect(Sa, localhost, Pb, []) of
+ {error,econnrefused} ->
+ {ok,{Localhost,
+ Pb,[],
+ #sctp_assoc_change{
+ state=comm_lost}}} =
+ gen_sctp:recv(Sa, infinity);
+ {error,#sctp_assoc_change{state=cant_assoc}} ->
+ ok%;
+ %% {error,{Localhost,Pb,_,#sctp_assoc_change{state=cant_assoc}}} ->
+ %% ok
+ end,
+ ok = gen_sctp:listen(Sb, true),
+ {ok,#sctp_assoc_change{state=comm_up,
+ error=0}} =
gen_sctp:connect(Sa, localhost, Pb, []),
- ?line ok = gen_sctp:close(Sa),
- ?line ok = gen_sctp:close(Sb),
+ ok = gen_sctp:close(Sa),
+ ok = gen_sctp:close(Sb),
ok.
-api_connect_init(doc) ->
- "Test the API function connect_init/4";
-api_connect_init(suite) ->
- [];
+%% Test the API function connect_init/4.
api_connect_init(Config) when is_list(Config) ->
- ?line Localhost = {127,0,0,1},
-
- ?line {ok,S} = gen_sctp:open(),
- ?line {ok,Pb} = inet:port(S),
- ?line try gen_sctp:connect_init(S, Localhost, not_allowed_for_port, [])
- catch error:badarg -> ok
- end,
- ?line try gen_sctp:connect_init(S, Localhost, 12345, not_allowed_for_opts)
- catch error:badarg -> ok
- end,
- ?line ok = gen_sctp:close(S),
- ?line {error,closed} = gen_sctp:connect_init(S, Localhost, 12345, []),
-
- ?line {ok,Sb} = gen_sctp:open(Pb),
- ?line {ok,Sa} = gen_sctp:open(),
- ?line case gen_sctp:connect_init(Sa, localhost, Pb, []) of
- {error,econnrefused} ->
- ?line {Localhost,Pb,#sctp_assoc_change{state=comm_lost}} =
- recv_event(log_ok(gen_sctp:recv(Sa, infinity)));
- ok ->
- ?line {Localhost,Pb,#sctp_assoc_change{state=cant_assoc}} =
- recv_event(log_ok(gen_sctp:recv(Sa, infinity)))
- end,
- ?line ok = gen_sctp:listen(Sb, true),
- ?line case gen_sctp:connect_init(Sa, localhost, Pb, []) of
- ok ->
- ?line {Localhost,Pb,#sctp_assoc_change{state=comm_up}} =
- recv_event(log_ok(gen_sctp:recv(Sa, infinity)))
- end,
- ?line ok = gen_sctp:close(Sa),
- ?line ok = gen_sctp:close(Sb),
+ Localhost = {127,0,0,1},
+
+ {ok,S} = gen_sctp:open(),
+ {ok,Pb} = inet:port(S),
+ try gen_sctp:connect_init(S, Localhost, not_allowed_for_port, [])
+ catch error:badarg -> ok
+ end,
+ try gen_sctp:connect_init(S, Localhost, 12345, not_allowed_for_opts)
+ catch error:badarg -> ok
+ end,
+ ok = gen_sctp:close(S),
+ {error,closed} = gen_sctp:connect_init(S, Localhost, 12345, []),
+
+ {ok,Sb} = gen_sctp:open(Pb),
+ {ok,Sa} = gen_sctp:open(),
+ case gen_sctp:connect_init(Sa, localhost, Pb, []) of
+ {error,econnrefused} ->
+ {Localhost,Pb,#sctp_assoc_change{state=comm_lost}} =
+ recv_event(log_ok(gen_sctp:recv(Sa, infinity)));
+ ok ->
+ {Localhost,Pb,#sctp_assoc_change{state=cant_assoc}} =
+ recv_event(log_ok(gen_sctp:recv(Sa, infinity)))
+ end,
+ ok = gen_sctp:listen(Sb, true),
+ case gen_sctp:connect_init(Sa, localhost, Pb, []) of
+ ok ->
+ {Localhost,Pb,#sctp_assoc_change{state=comm_up}} =
+ recv_event(log_ok(gen_sctp:recv(Sa, infinity)))
+ end,
+ ok = gen_sctp:close(Sa),
+ ok = gen_sctp:close(Sb),
ok.
recv_event({Addr,Port,[],#sctp_assoc_change{}=AssocChange}) ->
@@ -703,94 +695,86 @@ recv_event({Addr,Port,
#sctp_shutdown_event{assoc_id=Assoc}=ShutdownEvent}) ->
{Addr,Port,ShutdownEvent}.
-api_opts(doc) ->
- "Test socket options";
-api_opts(suite) ->
- [];
+%% Test socket options.
api_opts(Config) when is_list(Config) ->
- ?line Sndbuf = 32768,
- ?line Recbuf = 65536,
- ?line {ok,S} = gen_sctp:open(0),
- ?line OSType = os:type(),
- ?line case {inet:setopts(S, [{linger,{true,2}}]),OSType} of
- {ok,_} ->
- ok;
- {{error,einval},{unix,sunos}} ->
- ok
- end,
- ?line ok = inet:setopts(S, [{sndbuf,Sndbuf}]),
- ?line ok = inet:setopts(S, [{recbuf,Recbuf}]),
- ?line case inet:getopts(S, [sndbuf]) of
- {ok,[{sndbuf,SB}]} when SB >= Sndbuf -> ok
- end,
- ?line case inet:getopts(S, [recbuf]) of
- {ok,[{recbuf,RB}]} when RB >= Recbuf -> ok
- end.
+ Sndbuf = 32768,
+ Recbuf = 65536,
+ {ok,S} = gen_sctp:open(0),
+ OSType = os:type(),
+ case {inet:setopts(S, [{linger,{true,2}}]),OSType} of
+ {ok,_} ->
+ ok;
+ {{error,einval},{unix,sunos}} ->
+ ok
+ end,
+ ok = inet:setopts(S, [{sndbuf,Sndbuf}]),
+ ok = inet:setopts(S, [{recbuf,Recbuf}]),
+ case inet:getopts(S, [sndbuf]) of
+ {ok,[{sndbuf,SB}]} when SB >= Sndbuf -> ok
+ end,
+ case inet:getopts(S, [recbuf]) of
+ {ok,[{recbuf,RB}]} when RB >= Recbuf -> ok
+ end.
implicit_inet6(Config) when is_list(Config) ->
- ?line Hostname = log_ok(inet:gethostname()),
- ?line
- case gen_sctp:open(0, [inet6]) of
- {ok,S1} ->
- ?line
- case inet:getaddr(Hostname, inet6) of
- {ok,Host} ->
- ?line Loopback = {0,0,0,0,0,0,0,1},
- ?line io:format("~s ~p~n", ["Loopback",Loopback]),
- ?line implicit_inet6(S1, Loopback),
- ?line ok = gen_sctp:close(S1),
- %%
- ?line Localhost =
- log_ok(inet:getaddr("localhost", inet6)),
- ?line io:format("~s ~p~n", ["localhost",Localhost]),
- ?line S2 =
- log_ok(gen_sctp:open(0, [{ip,Localhost}])),
- ?line implicit_inet6(S2, Localhost),
- ?line ok = gen_sctp:close(S2),
- %%
- ?line io:format("~s ~p~n", [Hostname,Host]),
- ?line S3 =
- log_ok(gen_sctp:open(0, [{ifaddr,Host}])),
- ?line implicit_inet6(S3, Host),
- ?line ok = gen_sctp:close(S1);
- {error,eafnosupport} ->
- ?line ok = gen_sctp:close(S1),
- {skip,"Can not look up IPv6 address"}
- end;
- _ ->
- {skip,"IPv6 not supported"}
- end.
+ Hostname = log_ok(inet:gethostname()),
+ case gen_sctp:open(0, [inet6]) of
+ {ok,S1} ->
+ case inet:getaddr(Hostname, inet6) of
+ {ok,Host} ->
+ Loopback = {0,0,0,0,0,0,0,1},
+ io:format("~s ~p~n", ["Loopback",Loopback]),
+ implicit_inet6(S1, Loopback),
+ ok = gen_sctp:close(S1),
+ %%
+ Localhost =
+ log_ok(inet:getaddr("localhost", inet6)),
+ io:format("~s ~p~n", ["localhost",Localhost]),
+ S2 =
+ log_ok(gen_sctp:open(0, [{ip,Localhost}])),
+ implicit_inet6(S2, Localhost),
+ ok = gen_sctp:close(S2),
+ %%
+ io:format("~s ~p~n", [Hostname,Host]),
+ S3 =
+ log_ok(gen_sctp:open(0, [{ifaddr,Host}])),
+ implicit_inet6(S3, Host),
+ ok = gen_sctp:close(S1);
+ {error,eafnosupport} ->
+ ok = gen_sctp:close(S1),
+ {skip,"Can not look up IPv6 address"}
+ end;
+ _ ->
+ {skip,"IPv6 not supported"}
+ end.
implicit_inet6(S1, Addr) ->
- ?line ok = gen_sctp:listen(S1, true),
- ?line P1 = log_ok(inet:port(S1)),
- ?line S2 = log_ok(gen_sctp:open(0, [inet6])),
- ?line P2 = log_ok(inet:port(S2)),
- ?line #sctp_assoc_change{state=comm_up} =
+ ok = gen_sctp:listen(S1, true),
+ P1 = log_ok(inet:port(S1)),
+ S2 = log_ok(gen_sctp:open(0, [inet6])),
+ P2 = log_ok(inet:port(S2)),
+ #sctp_assoc_change{state=comm_up} =
log_ok(gen_sctp:connect(S2, Addr, P1, [])),
- ?line case recv_event(log_ok(gen_sctp:recv(S1))) of
- {Addr,P2,#sctp_assoc_change{state=comm_up}} ->
- ok;
- {Addr,P2,#sctp_paddr_change{state=addr_confirmed,
- addr={Addr,P2},
- error=0}} ->
- {Addr,P2,#sctp_assoc_change{state=comm_up}} =
- recv_event(log_ok(gen_sctp:recv(S1)))
- end,
- ?line case log_ok(inet:sockname(S1)) of
- {Addr,P1} -> ok;
- {{0,0,0,0,0,0,0,0},P1} -> ok
- end,
- ?line case log_ok(inet:sockname(S2)) of
- {Addr,P2} -> ok;
- {{0,0,0,0,0,0,0,0},P2} -> ok
- end,
- ?line ok = gen_sctp:close(S2).
-
-active_n(doc) ->
- "Verify {active,N} socket management";
-active_n(suite) ->
- [];
+ case recv_event(log_ok(gen_sctp:recv(S1))) of
+ {Addr,P2,#sctp_assoc_change{state=comm_up}} ->
+ ok;
+ {Addr,P2,#sctp_paddr_change{state=addr_confirmed,
+ addr={Addr,P2},
+ error=0}} ->
+ {Addr,P2,#sctp_assoc_change{state=comm_up}} =
+ recv_event(log_ok(gen_sctp:recv(S1)))
+ end,
+ case log_ok(inet:sockname(S1)) of
+ {Addr,P1} -> ok;
+ {{0,0,0,0,0,0,0,0},P1} -> ok
+ end,
+ case log_ok(inet:sockname(S2)) of
+ {Addr,P2} -> ok;
+ {{0,0,0,0,0,0,0,0},P2} -> ok
+ end,
+ ok = gen_sctp:close(S2).
+
+%% Verify {active,N} socket management.
active_n(Config) when is_list(Config) ->
N = 3,
S1 = ok(gen_sctp:open([{active,N}])),
@@ -887,51 +871,45 @@ active_n(Config) when is_list(Config) ->
ok = gen_sctp:close(S1),
ok.
-basic_stream(doc) ->
- "Hello world stream socket";
-basic_stream(suite) ->
- [];
+%% Hello world stream socket.
basic_stream(Config) when is_list(Config) ->
- ?line {ok,S} = gen_sctp:open([{type,stream}]),
- ?line ok = gen_sctp:listen(S, true),
- ?line ok =
+ {ok,S} = gen_sctp:open([{type,stream}]),
+ ok = gen_sctp:listen(S, true),
+ ok =
do_from_other_process(
fun () -> gen_sctp:listen(S, 10) end),
- ?line ok = gen_sctp:close(S),
+ ok = gen_sctp:close(S),
ok.
-xfer_stream_min(doc) ->
- "Minimal data transfer";
-xfer_stream_min(suite) ->
- [];
+%% Minimal data transfer.
xfer_stream_min(Config) when is_list(Config) ->
- ?line Stream = 0,
- ?line Data = <<"The quick brown fox jumps over a lazy dog 0123456789">>,
- ?line Loopback = {127,0,0,1},
- ?line {ok,Sb} = gen_sctp:open([{type,seqpacket}]),
- ?line ?LOGVAR(Sb),
- ?line {ok,Pb} = inet:port(Sb),
- ?line ?LOGVAR(Pb),
- ?line ok = gen_sctp:listen(Sb, true),
-
- ?line {ok,Sa} = gen_sctp:open([{type,stream}]),
- ?line ?LOGVAR(Sa),
- ?line {ok,Pa} = inet:port(Sa),
- ?line ?LOGVAR(Pa),
- ?line #sctp_assoc_change{state=comm_up,
- error=0,
- outbound_streams=SaOutboundStreams,
- inbound_streams=SaInboundStreams,
- assoc_id=SaAssocId_X} =
+ Stream = 0,
+ Data = <<"The quick brown fox jumps over a lazy dog 0123456789">>,
+ Loopback = {127,0,0,1},
+ {ok,Sb} = gen_sctp:open([{type,seqpacket}]),
+ ?LOGVAR(Sb),
+ {ok,Pb} = inet:port(Sb),
+ ?LOGVAR(Pb),
+ ok = gen_sctp:listen(Sb, true),
+
+ {ok,Sa} = gen_sctp:open([{type,stream}]),
+ ?LOGVAR(Sa),
+ {ok,Pa} = inet:port(Sa),
+ ?LOGVAR(Pa),
+ #sctp_assoc_change{state=comm_up,
+ error=0,
+ outbound_streams=SaOutboundStreams,
+ inbound_streams=SaInboundStreams,
+ assoc_id=SaAssocId_X} =
log_ok(gen_sctp:connect(Sa, Loopback, Pb, [])),
- ?line ?LOGVAR(SaAssocId_X),
- ?line [{_,#sctp_paddrinfo{assoc_id=SaAssocId,state=active}}] =
+ ?LOGVAR(SaAssocId_X),
+ [{_,#sctp_paddrinfo{assoc_id=SaAssocId,state=active}}] =
log_ok(inet:getopts(Sa, [{sctp_get_peer_addr_info,
#sctp_paddrinfo{address={Loopback,Pb}}}])),
- ?line ?LOGVAR(SaAssocId),
- ?line match_unless_solaris(SaAssocId_X, SaAssocId),
+ ?LOGVAR(SaAssocId),
+ match_unless_solaris(SaAssocId_X, SaAssocId),
- ?line {SbOutboundStreams,SbInboundStreams,SbAssocId} =
+ {SbOutboundStreams,SbInboundStreams,SbAssocId} =
case recv_event(log_ok(gen_sctp:recv(Sb, infinity))) of
{Loopback,Pa,
#sctp_assoc_change{state=comm_up,
@@ -946,87 +924,87 @@ xfer_stream_min(Config) when is_list(Config) ->
error=0,
assoc_id=AI}} ->
{Loopback,Pa,
- ?line #sctp_assoc_change{state=comm_up,
- error=0,
- outbound_streams=OS,
- inbound_streams=IS,
- assoc_id=AI}} =
+ #sctp_assoc_change{state=comm_up,
+ error=0,
+ outbound_streams=OS,
+ inbound_streams=IS,
+ assoc_id=AI}} =
recv_event(log_ok(gen_sctp:recv(Sb, infinity))),
{OS,IS,AI}
end,
- ?line ?LOGVAR(SbAssocId),
- ?line SaOutboundStreams = SbInboundStreams,
- ?line ?LOGVAR(SaOutboundStreams),
- ?line SbOutboundStreams = SaInboundStreams,
- ?line ?LOGVAR(SbOutboundStreams),
- ?line ok = gen_sctp:send(Sa, SaAssocId, 0, Data),
- ?line case log_ok(gen_sctp:recv(Sb, infinity)) of
- {Loopback,
- Pa,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SbAssocId}],
- Data} -> ok;
- {Loopback,
- Pa,[],
- #sctp_paddr_change{addr = {Loopback,_},
- state = addr_available,
- error = 0,
- assoc_id = SbAssocId}} ->
- {Loopback,
- Pa,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SbAssocId}],
- Data} = log_ok(gen_sctp:recv(Sb, infinity));
- {Loopback,
- Pa,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SbAssocId}],
- #sctp_paddr_change{addr = {Loopback,_},
- state = addr_confirmed,
- error = 0,
- assoc_id = SbAssocId}} ->
- {Loopback,
- Pa,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SbAssocId}],
- Data} = log_ok(gen_sctp:recv(Sb, infinity))
- end,
- ?line ok =
+ ?LOGVAR(SbAssocId),
+ SaOutboundStreams = SbInboundStreams,
+ ?LOGVAR(SaOutboundStreams),
+ SbOutboundStreams = SaInboundStreams,
+ ?LOGVAR(SbOutboundStreams),
+ ok = gen_sctp:send(Sa, SaAssocId, 0, Data),
+ case log_ok(gen_sctp:recv(Sb, infinity)) of
+ {Loopback,
+ Pa,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SbAssocId}],
+ Data} -> ok;
+ {Loopback,
+ Pa,[],
+ #sctp_paddr_change{addr = {Loopback,_},
+ state = addr_available,
+ error = 0,
+ assoc_id = SbAssocId}} ->
+ {Loopback,
+ Pa,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SbAssocId}],
+ Data} = log_ok(gen_sctp:recv(Sb, infinity));
+ {Loopback,
+ Pa,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SbAssocId}],
+ #sctp_paddr_change{addr = {Loopback,_},
+ state = addr_confirmed,
+ error = 0,
+ assoc_id = SbAssocId}} ->
+ {Loopback,
+ Pa,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SbAssocId}],
+ Data} = log_ok(gen_sctp:recv(Sb, infinity))
+ end,
+ ok =
do_from_other_process(
fun () -> gen_sctp:send(Sb, SbAssocId, 0, Data) end),
- ?line case log_ok(gen_sctp:recv(Sa, infinity)) of
- {Loopback,Pb,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SaAssocId}],
- Data} -> ok;
- Event1 ->
- ?line {Loopback,Pb,
- #sctp_paddr_change{state=addr_confirmed,
- addr={_,Pb},
- error=0,
- assoc_id=SaAssocId}} =
- recv_event(Event1),
- ?line {Loopback,Pb,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SaAssocId}],
- Data} =
- log_ok(gen_sctp:recv(Sa, infinity))
- end,
- ?line ok = gen_sctp:close(Sa),
- ?line {Loopback,Pa,
- #sctp_shutdown_event{assoc_id=SbAssocId}} =
+ case log_ok(gen_sctp:recv(Sa, infinity)) of
+ {Loopback,Pb,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SaAssocId}],
+ Data} -> ok;
+ Event1 ->
+ {Loopback,Pb,
+ #sctp_paddr_change{state=addr_confirmed,
+ addr={_,Pb},
+ error=0,
+ assoc_id=SaAssocId}} =
+ recv_event(Event1),
+ {Loopback,Pb,
+ [#sctp_sndrcvinfo{stream=Stream,
+ assoc_id=SaAssocId}],
+ Data} =
+ log_ok(gen_sctp:recv(Sa, infinity))
+ end,
+ ok = gen_sctp:close(Sa),
+ {Loopback,Pa,
+ #sctp_shutdown_event{assoc_id=SbAssocId}} =
recv_event(log_ok(gen_sctp:recv(Sb, infinity))),
- ?line {Loopback,Pa,
- #sctp_assoc_change{state=shutdown_comp,
- error=0,
- assoc_id=SbAssocId}} =
+ {Loopback,Pa,
+ #sctp_assoc_change{state=shutdown_comp,
+ error=0,
+ assoc_id=SbAssocId}} =
recv_event(log_ok(gen_sctp:recv(Sb, infinity))),
- ?line ok = gen_sctp:close(Sb),
+ ok = gen_sctp:close(Sb),
- ?line receive
- Msg -> test_server:fail({received,Msg})
- after 17 -> ok
- end,
+ receive
+ Msg -> ct:fail({received,Msg})
+ after 17 -> ok
+ end,
ok.
@@ -1058,205 +1036,184 @@ do_from_other_process(Fun) ->
end.
-peeloff_active_once(doc) ->
- "Peel off an SCTP stream socket ({active,once})";
-peeloff_active_once(suite) ->
- [];
+%% Peel off an SCTP stream socket ({active,once}).
peeloff_active_once(Config) ->
peeloff(Config, [{active,once}]).
-peeloff_active_true(doc) ->
- "Peel off an SCTP stream socket ({active,true})";
-peeloff_active_true(suite) ->
- [];
+%% Peel off an SCTP stream socket ({active,true}).
peeloff_active_true(Config) ->
peeloff(Config, [{active,true}]).
-peeloff_active_n(doc) ->
- "Peel off an SCTP stream socket ({active,N})";
-peeloff_active_n(suite) ->
- [];
+%% Peel off an SCTP stream socket ({active,N}).
peeloff_active_n(Config) ->
peeloff(Config, [{active,1}]).
peeloff(Config, SockOpts) when is_list(Config) ->
- ?line Addr = {127,0,0,1},
- ?line Stream = 0,
- ?line Timeout = 333,
- ?line S1 = socket_open([{ifaddr,Addr}|SockOpts], Timeout),
- ?line ?LOGVAR(S1),
- ?line P1 = socket_call(S1, get_port),
- ?line ?LOGVAR(P1),
- ?line Socket1 = socket_call(S1, get_socket),
- ?line ?LOGVAR(Socket1),
- ?line socket_call(S1, {listen,true}),
- ?line S2 = socket_open([{ifaddr,Addr}|SockOpts], Timeout),
- ?line ?LOGVAR(S2),
- ?line P2 = socket_call(S2, get_port),
- ?line ?LOGVAR(P2),
- ?line Socket2 = socket_call(S2, get_socket),
- ?line ?LOGVAR(Socket2),
+ Addr = {127,0,0,1},
+ Stream = 0,
+ Timeout = 333,
+ S1 = socket_open([{ifaddr,Addr}|SockOpts], Timeout),
+ ?LOGVAR(S1),
+ P1 = socket_call(S1, get_port),
+ ?LOGVAR(P1),
+ Socket1 = socket_call(S1, get_socket),
+ ?LOGVAR(Socket1),
+ socket_call(S1, {listen,true}),
+ S2 = socket_open([{ifaddr,Addr}|SockOpts], Timeout),
+ ?LOGVAR(S2),
+ P2 = socket_call(S2, get_port),
+ ?LOGVAR(P2),
+ Socket2 = socket_call(S2, get_socket),
+ ?LOGVAR(Socket2),
%%
- ?line socket_call(S2, {connect_init,Addr,P1,[]}),
- ?line S2Ai =
+ socket_call(S2, {connect_init,Addr,P1,[]}),
+ S2Ai =
receive
{S2,{Addr,P1,
#sctp_assoc_change{
- state=comm_up,
- assoc_id=AssocId2}}} -> AssocId2
+ state=comm_up,
+ assoc_id=AssocId2}}} -> AssocId2
after Timeout ->
socket_bailout([S1,S2])
end,
- ?line ?LOGVAR(S2Ai),
- ?line S1Ai =
+ ?LOGVAR(S2Ai),
+ S1Ai =
receive
{S1,{Addr,P2,
#sctp_assoc_change{
- state=comm_up,
- assoc_id=AssocId1}}} -> AssocId1
+ state=comm_up,
+ assoc_id=AssocId1}}} -> AssocId1
after Timeout ->
socket_bailout([S1,S2])
end,
- ?line ?LOGVAR(S1Ai),
+ ?LOGVAR(S1Ai),
%%
- ?line socket_call(S2, {send,S2Ai,Stream,<<"Number one">>}),
- ?line
- receive
- {S1,{Addr,P2,S1Ai,Stream,<<"Number one">>}} -> ok
- after Timeout ->
- socket_bailout([S1,S2])
- end,
- ?line socket_call(S2, {send,Socket1,S1Ai,Stream,<<"Number two">>}),
- ?line
- receive
- {S2,{Addr,P1,S2Ai,Stream,<<"Number two">>}} -> ok
- after Timeout ->
- socket_bailout([S1,S2])
- end,
+ socket_call(S2, {send,S2Ai,Stream,<<"Number one">>}),
+ receive
+ {S1,{Addr,P2,S1Ai,Stream,<<"Number one">>}} -> ok
+ after Timeout ->
+ socket_bailout([S1,S2])
+ end,
+ socket_call(S2, {send,Socket1,S1Ai,Stream,<<"Number two">>}),
+ receive
+ {S2,{Addr,P1,S2Ai,Stream,<<"Number two">>}} -> ok
+ after Timeout ->
+ socket_bailout([S1,S2])
+ end,
%%
- ?line S3 = socket_peeloff(Socket1, S1Ai, SockOpts, Timeout),
- ?line ?LOGVAR(S3),
- ?line P3_X = socket_call(S3, get_port),
- ?line ?LOGVAR(P3_X),
- ?line P3 = case P3_X of 0 -> P1; _ -> P3_X end,
- ?line [{_,#sctp_paddrinfo{assoc_id=S3Ai,state=active}}] =
+ S3 = socket_peeloff(Socket1, S1Ai, SockOpts, Timeout),
+ ?LOGVAR(S3),
+ P3_X = socket_call(S3, get_port),
+ ?LOGVAR(P3_X),
+ P3 = case P3_X of 0 -> P1; _ -> P3_X end,
+ [{_,#sctp_paddrinfo{assoc_id=S3Ai,state=active}}] =
socket_call(S3,
{getopts,[{sctp_get_peer_addr_info,
#sctp_paddrinfo{address={Addr,P2}}}]}),
- %%?line S3Ai = S1Ai,
- ?line ?LOGVAR(S3Ai),
+ %%S3Ai = S1Ai,
+ ?LOGVAR(S3Ai),
%%
- ?line socket_call(S3, {send,S3Ai,Stream,<<"Number three">>}),
- ?line
- receive
- {S2,{Addr,P3,S2Ai,Stream,<<"Number three">>}} -> ok
- after Timeout ->
- socket_bailout([S1,S2,S3])
- end,
- ?line socket_call(S3, {send,Socket2,S2Ai,Stream,<<"Number four">>}),
- ?line
- receive
- {S3,{Addr,P2,S3Ai,Stream,<<"Number four">>}} -> ok
- after Timeout ->
- socket_bailout([S1,S2,S3])
- end,
+ socket_call(S3, {send,S3Ai,Stream,<<"Number three">>}),
+ receive
+ {S2,{Addr,P3,S2Ai,Stream,<<"Number three">>}} -> ok
+ after Timeout ->
+ socket_bailout([S1,S2,S3])
+ end,
+ socket_call(S3, {send,Socket2,S2Ai,Stream,<<"Number four">>}),
+ receive
+ {S3,{Addr,P2,S3Ai,Stream,<<"Number four">>}} -> ok
+ after Timeout ->
+ socket_bailout([S1,S2,S3])
+ end,
%%
- ?line inet:i(sctp),
- ?line socket_close_verbose(S1),
- ?line socket_close_verbose(S2),
- ?line
- receive
- {S3,{Addr,P2,#sctp_shutdown_event{assoc_id=S3Ai_X}}} ->
- ?line match_unless_solaris(S3Ai, S3Ai_X)
- after Timeout ->
- socket_bailout([S3])
- end,
- ?line
- receive
- {S3,{Addr,P2,#sctp_assoc_change{state=shutdown_comp,
- assoc_id=S3Ai}}} -> ok
- after Timeout ->
- socket_bailout([S3])
- end,
- ?line socket_close_verbose(S3),
- ?line [] = flush(),
+ inet:i(sctp),
+ socket_close_verbose(S1),
+ socket_close_verbose(S2),
+ receive
+ {S3,{Addr,P2,#sctp_shutdown_event{assoc_id=S3Ai_X}}} ->
+ match_unless_solaris(S3Ai, S3Ai_X)
+ after Timeout ->
+ socket_bailout([S3])
+ end,
+ receive
+ {S3,{Addr,P2,#sctp_assoc_change{state=shutdown_comp,
+ assoc_id=S3Ai}}} -> ok
+ after Timeout ->
+ socket_bailout([S3])
+ end,
+ socket_close_verbose(S3),
+ [] = flush(),
ok.
-buffers(doc) ->
- ["Check sndbuf and recbuf behaviour"];
-buffers(suite) ->
- [];
+%% Check sndbuf and recbuf behaviour.
buffers(Config) when is_list(Config) ->
- ?line Limit = 4096,
- ?line Addr = {127,0,0,1},
- ?line Stream = 1,
- ?line Timeout = 3333,
- ?line S1 = socket_open([{ip,Addr}], Timeout),
- ?line ?LOGVAR(S1),
- ?line P1 = socket_call(S1, get_port),
- ?line ?LOGVAR(P1),
- ?line ok = socket_call(S1, {listen,true}),
- ?line S2 = socket_open([{ip,Addr}], Timeout),
- ?line ?LOGVAR(S2),
- ?line P2 = socket_call(S2, get_port),
- ?line ?LOGVAR(P2),
+ Limit = 4096,
+ Addr = {127,0,0,1},
+ Stream = 1,
+ Timeout = 3333,
+ S1 = socket_open([{ip,Addr}], Timeout),
+ ?LOGVAR(S1),
+ P1 = socket_call(S1, get_port),
+ ?LOGVAR(P1),
+ ok = socket_call(S1, {listen,true}),
+ S2 = socket_open([{ip,Addr}], Timeout),
+ ?LOGVAR(S2),
+ P2 = socket_call(S2, get_port),
+ ?LOGVAR(P2),
%%
- ?line socket_call(S2, {connect_init,Addr,P1,[]}),
- ?line S2Ai =
+ socket_call(S2, {connect_init,Addr,P1,[]}),
+ S2Ai =
receive
{S2,{Addr,P1,
#sctp_assoc_change{
- state=comm_up,
- assoc_id=AssocId2}}} -> AssocId2
+ state=comm_up,
+ assoc_id=AssocId2}}} -> AssocId2
after Timeout ->
socket_bailout([S1,S2])
end,
- ?line S1Ai =
+ S1Ai =
receive
{S1,{Addr,P2,
#sctp_assoc_change{
- state=comm_up,
- assoc_id=AssocId1}}} -> AssocId1
+ state=comm_up,
+ assoc_id=AssocId1}}} -> AssocId1
after Timeout ->
socket_bailout([S1,S2])
end,
%%
- ?line socket_call(S1, {setopts,[{recbuf,Limit}]}),
- ?line Recbuf =
+ socket_call(S1, {setopts,[{recbuf,Limit}]}),
+ Recbuf =
case socket_call(S1, {getopts,[recbuf]}) of
[{recbuf,RB1}] when RB1 >= Limit -> RB1
end,
- ?line Data = mk_data(Recbuf+Limit),
- ?line socket_call(S2, {setopts,[{sndbuf,Recbuf+Limit}]}),
- ?line socket_call(S2, {send,S2Ai,Stream,Data}),
- ?line
- receive
- {S1,{Addr,P2,S1Ai,Stream,Data}} -> ok
- after Timeout ->
- socket_bailout([S1,S2])
- end,
+ Data = mk_data(Recbuf+Limit),
+ socket_call(S2, {setopts,[{sndbuf,Recbuf+Limit}]}),
+ socket_call(S2, {send,S2Ai,Stream,Data}),
+ receive
+ {S1,{Addr,P2,S1Ai,Stream,Data}} -> ok
+ after Timeout ->
+ socket_bailout([S1,S2])
+ end,
%%
- ?line socket_close_verbose(S1),
- ?line
- receive
- {S2,{Addr,P1,#sctp_shutdown_event{assoc_id=S2Ai}}} -> ok
- after Timeout ->
- socket_bailout([S2])
- end,
- ?line
- receive
- {S2,{Addr,P1,#sctp_assoc_change{state=shutdown_comp,
- assoc_id=S2Ai}}} -> ok
- after Timeout ->
- socket_bailout([S2])
- end,
- ?line socket_close_verbose(S2),
- ?line [] = flush(),
+ socket_close_verbose(S1),
+ receive
+ {S2,{Addr,P1,#sctp_shutdown_event{assoc_id=S2Ai}}} -> ok
+ after Timeout ->
+ socket_bailout([S2])
+ end,
+ receive
+ {S2,{Addr,P1,#sctp_assoc_change{state=shutdown_comp,
+ assoc_id=S2Ai}}} -> ok
+ after Timeout ->
+ socket_bailout([S2])
+ end,
+ socket_close_verbose(S2),
+ [] = flush(),
ok.
mk_data(Bytes) ->
@@ -1269,153 +1226,129 @@ mk_data(_, _, Bin) ->
-open_multihoming_ipv4_socket(doc) ->
- "Test opening a multihoming ipv4 socket";
-open_multihoming_ipv4_socket(suite) ->
- [];
+%% Test opening a multihoming ipv4 socket.
open_multihoming_ipv4_socket(Config) when is_list(Config) ->
- ?line case get_addrs_by_family(inet, 2) of
- {ok, [Addr1, Addr2]} ->
- ?line do_open_and_connect([Addr1, Addr2], Addr1);
- {error, Reason} ->
- {skip, Reason}
- end.
-
-open_unihoming_ipv6_socket(doc) ->
- %% This test is mostly aimed to indicate
- %% whether host has a non-working ipv6 setup
- "Test opening a unihoming (non-multihoming) ipv6 socket";
-open_unihoming_ipv6_socket(suite) ->
- [];
+ case get_addrs_by_family(inet, 2) of
+ {ok, [Addr1, Addr2]} ->
+ do_open_and_connect([Addr1, Addr2], Addr1);
+ {error, Reason} ->
+ {skip, Reason}
+ end.
+
+%% This test is mostly aimed to indicate whether host has a
+%% non-working ipv6 setup. Test opening a unihoming (non-multihoming)
+%% ipv6 socket.
open_unihoming_ipv6_socket(Config) when is_list(Config) ->
- ?line case get_addrs_by_family(inet6, 1) of
- {ok, [Addr]} ->
- ?line do_open_and_connect([Addr], Addr);
- {error, Reason} ->
- {skip, Reason}
- end.
-
-
-open_multihoming_ipv6_socket(doc) ->
- "Test opening a multihoming ipv6 socket";
-open_multihoming_ipv6_socket(suite) ->
- [];
+ case get_addrs_by_family(inet6, 1) of
+ {ok, [Addr]} ->
+ do_open_and_connect([Addr], Addr);
+ {error, Reason} ->
+ {skip, Reason}
+ end.
+
+
+%% Test opening a multihoming ipv6 socket.
open_multihoming_ipv6_socket(Config) when is_list(Config) ->
- ?line case get_addrs_by_family(inet6, 2) of
- {ok, [Addr1, Addr2]} ->
- ?line do_open_and_connect([Addr1, Addr2], Addr1);
- {error, Reason} ->
- {skip, Reason}
- end.
-
-open_multihoming_ipv4_and_ipv6_socket(doc) ->
- "Test opening a multihoming ipv6 socket with ipv4 and ipv6 addresses";
-open_multihoming_ipv4_and_ipv6_socket(suite) ->
- [];
+ case get_addrs_by_family(inet6, 2) of
+ {ok, [Addr1, Addr2]} ->
+ do_open_and_connect([Addr1, Addr2], Addr1);
+ {error, Reason} ->
+ {skip, Reason}
+ end.
+
+%% Test opening a multihoming ipv6 socket with ipv4 and ipv6 addresses.
open_multihoming_ipv4_and_ipv6_socket(Config) when is_list(Config) ->
- ?line case get_addrs_by_family(inet_and_inet6, 2) of
- {ok, [[InetAddr1, InetAddr2], [Inet6Addr1, Inet6Addr2]]} ->
- %% Connect to the first address to test bind
- ?line do_open_and_connect([InetAddr1, Inet6Addr1, InetAddr2],
- InetAddr1),
- ?line do_open_and_connect([Inet6Addr1, InetAddr1],
- Inet6Addr1),
-
- %% Connect an address, not the first,
- %% to test sctp_bindx
- ?line do_open_and_connect([Inet6Addr1, Inet6Addr2, InetAddr1],
- Inet6Addr2),
- ?line do_open_and_connect([Inet6Addr1, Inet6Addr2, InetAddr1],
- InetAddr1);
- {error, Reason} ->
- {skip, Reason}
- end.
-
-names_unihoming_ipv4(doc) ->
- "Test inet:socknames/peernames on unihoming IPv4 sockets";
-names_unihoming_ipv4(suite) ->
- [];
+ case get_addrs_by_family(inet_and_inet6, 2) of
+ {ok, [[InetAddr1, InetAddr2], [Inet6Addr1, Inet6Addr2]]} ->
+ %% Connect to the first address to test bind
+ do_open_and_connect([InetAddr1, Inet6Addr1, InetAddr2],
+ InetAddr1),
+ do_open_and_connect([Inet6Addr1, InetAddr1],
+ Inet6Addr1),
+
+ %% Connect an address, not the first,
+ %% to test sctp_bindx
+ do_open_and_connect([Inet6Addr1, Inet6Addr2, InetAddr1],
+ Inet6Addr2),
+ do_open_and_connect([Inet6Addr1, Inet6Addr2, InetAddr1],
+ InetAddr1);
+ {error, Reason} ->
+ {skip, Reason}
+ end.
+
+%% Test inet:socknames/peernames on unihoming IPv4 sockets.
names_unihoming_ipv4(Config) when is_list(Config) ->
- ?line do_names(Config, inet, 1).
+ do_names(Config, inet, 1).
-names_unihoming_ipv6(doc) ->
- "Test inet:socknames/peernames on unihoming IPv6 sockets";
-names_unihoming_ipv6(suite) ->
- [];
+%% Test inet:socknames/peernames on unihoming IPv6 sockets.
names_unihoming_ipv6(Config) when is_list(Config) ->
- ?line do_names(Config, inet6, 1).
+ do_names(Config, inet6, 1).
-names_multihoming_ipv4(doc) ->
- "Test inet:socknames/peernames on multihoming IPv4 sockets";
-names_multihoming_ipv4(suite) ->
- [];
+%% Test inet:socknames/peernames on multihoming IPv4 sockets.
names_multihoming_ipv4(Config) when is_list(Config) ->
- ?line do_names(Config, inet, 2).
+ do_names(Config, inet, 2).
-names_multihoming_ipv6(doc) ->
- "Test inet:socknames/peernames on multihoming IPv6 sockets";
-names_multihoming_ipv6(suite) ->
- [];
+%% Test inet:socknames/peernames on multihoming IPv6 sockets.
names_multihoming_ipv6(Config) when is_list(Config) ->
- ?line do_names(Config, inet6, 2).
+ do_names(Config, inet6, 2).
do_names(_, FamilySpec, AddressCount) ->
Fun =
fun (ServerSocket, _, ServerAssoc, ClientSocket, _, ClientAssoc) ->
- ?line ServerSocknamesNoassoc =
+ ServerSocknamesNoassoc =
lists:sort(ok(inet:socknames(ServerSocket))),
- ?line ?LOGVAR(ServerSocknamesNoassoc),
- ?line ServerSocknames =
+ ?LOGVAR(ServerSocknamesNoassoc),
+ ServerSocknames =
lists:sort(ok(inet:socknames(ServerSocket, ServerAssoc))),
- ?line ?LOGVAR(ServerSocknames),
- ?line [_|_] =
+ ?LOGVAR(ServerSocknames),
+ [_|_] =
ordsets:intersection
(ServerSocknamesNoassoc, ServerSocknames),
- ?line ClientSocknamesNoassoc =
+ ClientSocknamesNoassoc =
lists:sort(ok(inet:socknames(ClientSocket))),
- ?line ?LOGVAR(ClientSocknamesNoassoc),
- ?line ClientSocknames =
+ ?LOGVAR(ClientSocknamesNoassoc),
+ ClientSocknames =
lists:sort(ok(inet:socknames(ClientSocket, ClientAssoc))),
- ?line ?LOGVAR(ClientSocknames),
- ?line [_|_] =
+ ?LOGVAR(ClientSocknames),
+ [_|_] =
ordsets:intersection
(ClientSocknamesNoassoc, ClientSocknames),
- ?line err([einval,enotconn], inet:peernames(ServerSocket)),
- ?line ServerPeernames =
+ err([einval,enotconn], inet:peernames(ServerSocket)),
+ ServerPeernames =
lists:sort(ok(inet:peernames(ServerSocket, ServerAssoc))),
- ?line ?LOGVAR(ServerPeernames),
- ?line err([einval,enotconn], inet:peernames(ClientSocket)),
- ?line ClientPeernames =
+ ?LOGVAR(ServerPeernames),
+ err([einval,enotconn], inet:peernames(ClientSocket)),
+ ClientPeernames =
lists:sort(ok(inet:peernames(ClientSocket, ClientAssoc))),
- ?line ?LOGVAR(ClientPeernames),
- ?line ServerSocknames = ClientPeernames,
- ?line ClientSocknames = ServerPeernames,
- ?line {ok,Socket} =
+ ?LOGVAR(ClientPeernames),
+ ServerSocknames = ClientPeernames,
+ ClientSocknames = ServerPeernames,
+ {ok,Socket} =
gen_sctp:peeloff(ServerSocket, ServerAssoc),
- ?line SocknamesNoassoc =
+ SocknamesNoassoc =
lists:sort(ok(inet:socknames(Socket))),
- ?line ?LOGVAR(SocknamesNoassoc),
- ?line Socknames =
+ ?LOGVAR(SocknamesNoassoc),
+ Socknames =
lists:sort(ok(inet:socknames(Socket, ServerAssoc))),
- ?line ?LOGVAR(Socknames),
- ?line true =
+ ?LOGVAR(Socknames),
+ true =
ordsets:is_subset(SocknamesNoassoc, Socknames),
- ?line Peernames =
+ Peernames =
lists:sort(ok(inet:peernames(Socket, ServerAssoc))),
- ?line ?LOGVAR(Peernames),
- ?line ok = gen_sctp:close(Socket),
- ?line Socknames = ClientPeernames,
- ?line ClientSocknames = Peernames,
+ ?LOGVAR(Peernames),
+ ok = gen_sctp:close(Socket),
+ Socknames = ClientPeernames,
+ ClientSocknames = Peernames,
ok
end,
- ?line case get_addrs_by_family(FamilySpec, AddressCount) of
- {ok, Addresses} when length(Addresses) =:= AddressCount ->
- ?line do_open_and_connect(Addresses, hd(Addresses), Fun);
- {error, Reason} ->
- {skip, Reason}
- end.
+ case get_addrs_by_family(FamilySpec, AddressCount) of
+ {ok, Addresses} when length(Addresses) =:= AddressCount ->
+ do_open_and_connect(Addresses, hd(Addresses), Fun);
+ {error, Reason} ->
+ {skip, Reason}
+ end.
@@ -1451,29 +1384,28 @@ get_addrs_by_family(Family, NumAddrs) ->
get_addrs_by_family_aux(Family, NumAddrs) when Family =:= inet;
Family =:= inet6 ->
- ?line
- case inet:getaddr(localhost, Family) of
- {error,eafnosupport} ->
- {skip, f("No support for ~p", Family)};
- {ok, _} ->
- ?line IfAddrs = ok(inet:getifaddrs()),
- ?line case filter_addrs_by_family(IfAddrs, Family) of
- Addrs when length(Addrs) >= NumAddrs ->
- {ok, lists:sublist(Addrs, NumAddrs)};
- [] ->
- {error, f("Need ~p ~p address(es) found none~n",
- [NumAddrs, Family])};
- Addrs ->
- {error,
- f("Need ~p ~p address(es) found only ~p: ~p~n",
- [NumAddrs, Family, length(Addrs), Addrs])}
- end
- end;
+ case inet:getaddr(localhost, Family) of
+ {error,eafnosupport} ->
+ {skip, f("No support for ~p", Family)};
+ {ok, _} ->
+ IfAddrs = ok(inet:getifaddrs()),
+ case filter_addrs_by_family(IfAddrs, Family) of
+ Addrs when length(Addrs) >= NumAddrs ->
+ {ok, lists:sublist(Addrs, NumAddrs)};
+ [] ->
+ {error, f("Need ~p ~p address(es) found none~n",
+ [NumAddrs, Family])};
+ Addrs ->
+ {error,
+ f("Need ~p ~p address(es) found only ~p: ~p~n",
+ [NumAddrs, Family, length(Addrs), Addrs])}
+ end
+ end;
get_addrs_by_family_aux(inet_and_inet6, NumAddrs) ->
- ?line catch {ok, [case get_addrs_by_family_aux(Family, NumAddrs) of
- {ok, Addrs} -> Addrs;
- {error, Reason} -> throw({error, Reason})
- end || Family <- [inet, inet6]]}.
+ catch {ok, [case get_addrs_by_family_aux(Family, NumAddrs) of
+ {ok, Addrs} -> Addrs;
+ {error, Reason} -> throw({error, Reason})
+ end || Family <- [inet, inet6]]}.
filter_addrs_by_family(IfAddrs, Family) ->
lists:flatten([[Addr || {addr, Addr} <- Info,
@@ -1502,21 +1434,21 @@ f(F, A) ->
lists:flatten(io_lib:format(F, A)).
do_open_and_connect(ServerAddresses, AddressToConnectTo) ->
- ?line Fun = fun (_, _, _, _, _, _) -> ok end,
- ?line do_open_and_connect(ServerAddresses, AddressToConnectTo, Fun).
+ Fun = fun (_, _, _, _, _, _) -> ok end,
+ do_open_and_connect(ServerAddresses, AddressToConnectTo, Fun).
%%
do_open_and_connect(ServerAddresses, AddressToConnectTo, Fun) ->
- ?line ServerFamily = get_family_by_addrs(ServerAddresses),
- ?line io:format("Serving ~p addresses: ~p~n",
- [ServerFamily, ServerAddresses]),
- ?line S1 = ok(gen_sctp:open(0, [{ip,Addr} || Addr <- ServerAddresses] ++
- [ServerFamily])),
- ?line ok = gen_sctp:listen(S1, true),
- ?line P1 = ok(inet:port(S1)),
- ?line ClientFamily = get_family_by_addr(AddressToConnectTo),
- ?line io:format("Connecting to ~p ~p~n",
- [ClientFamily, AddressToConnectTo]),
- ?line ClientOpts =
+ ServerFamily = get_family_by_addrs(ServerAddresses),
+ io:format("Serving ~p addresses: ~p~n",
+ [ServerFamily, ServerAddresses]),
+ S1 = ok(gen_sctp:open(0, [{ip,Addr} || Addr <- ServerAddresses] ++
+ [ServerFamily])),
+ ok = gen_sctp:listen(S1, true),
+ P1 = ok(inet:port(S1)),
+ ClientFamily = get_family_by_addr(AddressToConnectTo),
+ io:format("Connecting to ~p ~p~n",
+ [ClientFamily, AddressToConnectTo]),
+ ClientOpts =
[ClientFamily |
case ClientFamily of
inet6 ->
@@ -1524,39 +1456,39 @@ do_open_and_connect(ServerAddresses, AddressToConnectTo, Fun) ->
_ ->
[]
end],
- ?line S2 = ok(gen_sctp:open(0, ClientOpts)),
+ S2 = ok(gen_sctp:open(0, ClientOpts)),
log(open),
%% Verify client can connect
- ?line #sctp_assoc_change{state=comm_up} = S2Assoc =
+ #sctp_assoc_change{state=comm_up} = S2Assoc =
ok(gen_sctp:connect(S2, AddressToConnectTo, P1, [])),
log(comm_up),
%% verify server side also receives comm_up from client
- ?line S1Assoc = recv_comm_up_eventually(S1),
- ?line Result = Fun(S1, ServerFamily, S1Assoc, S2, ClientFamily, S2Assoc),
- ?line ok = gen_sctp:close(S2),
- ?line ok = gen_sctp:close(S1),
+ S1Assoc = recv_comm_up_eventually(S1),
+ Result = Fun(S1, ServerFamily, S1Assoc, S2, ClientFamily, S2Assoc),
+ ok = gen_sctp:close(S2),
+ ok = gen_sctp:close(S1),
Result.
%% If at least one of the addresses is an ipv6 address, return inet6, else inet.
get_family_by_addrs(Addresses) ->
- ?line case lists:usort([get_family_by_addr(Addr) || Addr <- Addresses]) of
- [inet, inet6] -> inet6;
- [inet] -> inet;
- [inet6] -> inet6
- end.
+ case lists:usort([get_family_by_addr(Addr) || Addr <- Addresses]) of
+ [inet, inet6] -> inet6;
+ [inet] -> inet;
+ [inet6] -> inet6
+ end.
get_family_by_addr(Addr) when tuple_size(Addr) =:= 4 -> inet;
get_family_by_addr(Addr) when tuple_size(Addr) =:= 8 -> inet6.
recv_comm_up_eventually(S) ->
- ?line case ok(gen_sctp:recv(S)) of
- {_Addr, _Port, _Info,
- #sctp_assoc_change{state=comm_up} = Assoc} ->
- Assoc;
- {_Addr, _Port, _Info, _OtherSctpMsg} = Msg ->
- ?line log({unexpected,Msg}),
- ?line recv_comm_up_eventually(S)
- end.
+ case ok(gen_sctp:recv(S)) of
+ {_Addr, _Port, _Info,
+ #sctp_assoc_change{state=comm_up} = Assoc} ->
+ Assoc;
+ {_Addr, _Port, _Info, _OtherSctpMsg} = Msg ->
+ log({unexpected,Msg}),
+ recv_comm_up_eventually(S)
+ end.
%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% socket gen_server ultra light
@@ -1609,7 +1541,7 @@ socket_bailout([S|Ss]) ->
socket_bailout(Ss);
socket_bailout([]) ->
io:format("flush: ~p.~n", [flush()]),
- test_server:fail(socket_bailout).
+ ct:fail(socket_bailout).
socket_history({State,Flush}) ->
{lists:keysort(
@@ -1697,8 +1629,8 @@ s_loop(Socket, Timeout, Parent, Handler, State) ->
case gb_get({assoc_change,AssocId}, State) of
[{_,{Addr,Port,
#sctp_assoc_change{
- state=comm_up,
- inbound_streams=Is}}}|_]
+ state=comm_up,
+ inbound_streams=Is}}}|_]
when 0 =< Stream, Stream < Is-> ok;
[] -> ok
end,
diff --git a/lib/kernel/test/gen_tcp_api_SUITE.erl b/lib/kernel/test/gen_tcp_api_SUITE.erl
index 962471c20c..77ec89b4f4 100644
--- a/lib/kernel/test/gen_tcp_api_SUITE.erl
+++ b/lib/kernel/test/gen_tcp_api_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,21 +34,33 @@
t_recv_timeout/1, t_recv_eof/1, t_recv_delim/1,
t_shutdown_write/1, t_shutdown_both/1, t_shutdown_error/1,
t_shutdown_async/1,
- t_fdopen/1, t_fdconnect/1, t_implicit_inet6/1]).
+ t_fdopen/1, t_fdconnect/1, t_implicit_inet6/1,
+ t_local_basic/1, t_local_unbound/1, t_local_fdopen/1,
+ t_local_fdopen_listen/1, t_local_fdopen_listen_unbound/1,
+ t_local_fdopen_connect/1, t_local_fdopen_connect_unbound/1,
+ t_local_abstract/1]).
-export([getsockfd/0,closesockfd/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[{group, t_accept}, {group, t_connect}, {group, t_recv},
t_shutdown_write, t_shutdown_both, t_shutdown_error,
- t_shutdown_async, t_fdopen, t_fdconnect, t_implicit_inet6].
+ t_shutdown_async, t_fdopen, t_fdconnect, t_implicit_inet6,
+ {group, t_local}].
groups() ->
[{t_accept, [], [t_accept_timeout]},
{t_connect, [], [t_connect_timeout, t_connect_bad]},
- {t_recv, [], [t_recv_timeout, t_recv_eof, t_recv_delim]}].
+ {t_recv, [], [t_recv_timeout, t_recv_eof, t_recv_delim]},
+ {t_local, [],
+ [t_local_basic, t_local_unbound, t_local_fdopen,
+ t_local_fdopen_listen, t_local_fdopen_listen_unbound,
+ t_local_fdopen_connect, t_local_fdopen_connect_unbound,
+ t_local_abstract]}].
@@ -58,81 +70,93 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
ok.
+init_per_group(t_local, Config) ->
+ case gen_tcp:connect({local,<<"/">>}, 0, []) of
+ {error,eafnosupport} ->
+ {skip, "AF_LOCAL not supported"};
+ {error,_} ->
+ Config
+ end;
init_per_group(_GroupName, Config) ->
Config.
-end_per_group(_,_Config) ->
+end_per_group(t_local, _Config) ->
+ delete_local_filenames();
+end_per_group(_, _Config) ->
ok.
+
+init_per_testcase(Func, Config)
+ when Func =:= undefined -> % Insert your testcase name here
+ dbg:tracer(),
+ dbg:p(self(), c),
+ dbg:tpl(prim_inet, cx),
+ dbg:tpl(local_tcp, cx),
+ dbg:tpl(inet, cx),
+ dbg:tpl(gen_tcp, cx),
+ Config;
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ Config.
+
+end_per_testcase(_Func, _Config) ->
+ dbg:stop().
%%% gen_tcp:accept/1,2
-t_accept_timeout(doc) -> "Test that gen_tcp:accept/2 (with timeout) works.";
-t_accept_timeout(suite) -> [];
+%% Test that gen_tcp:accept/2 (with timeout) works.
t_accept_timeout(Config) when is_list(Config) ->
- ?line {ok, L} = gen_tcp:listen(0, []),
- ?line timeout({gen_tcp, accept, [L, 200]}, 0.2, 1.0).
+ {ok, L} = gen_tcp:listen(0, []),
+ timeout({gen_tcp, accept, [L, 200]}, 0.2, 1.0).
%%% gen_tcp:connect/X
-t_connect_timeout(doc) -> "Test that gen_tcp:connect/4 (with timeout) works.";
+%% Test that gen_tcp:connect/4 (with timeout) works.
t_connect_timeout(Config) when is_list(Config) ->
- %%?line BadAddr = {134,138,177,16},
- %%?line TcpPort = 80,
- ?line {ok, BadAddr} = unused_ip(),
- ?line TcpPort = 45638,
- ?line ok = io:format("Connecting to ~p, port ~p", [BadAddr, TcpPort]),
- ?line connect_timeout({gen_tcp,connect,[BadAddr,TcpPort,[],200]}, 0.2, 5.0).
-
-t_connect_bad(doc) ->
- ["Test that gen_tcp:connect/3 handles non-existings hosts, and other ",
- "invalid things."];
-t_connect_bad(suite) -> [];
+ %%BadAddr = {134,138,177,16},
+ %%TcpPort = 80,
+ {ok, BadAddr} = unused_ip(),
+ TcpPort = 45638,
+ ok = io:format("Connecting to ~p, port ~p", [BadAddr, TcpPort]),
+ connect_timeout({gen_tcp,connect,[BadAddr,TcpPort,[],200]}, 0.2, 5.0).
+
+%% Test that gen_tcp:connect/3 handles non-existings hosts, and other
+%% invalid things.
t_connect_bad(Config) when is_list(Config) ->
- ?line NonExistingPort = 45638, % Not in use, I hope.
- ?line {error, Reason1} = gen_tcp:connect(localhost, NonExistingPort, []),
- ?line io:format("Error for connection attempt to port not in use: ~p",
- [Reason1]),
-
- ?line {error, Reason2} = gen_tcp:connect("non-existing-host-xxx", 7, []),
- ?line io:format("Error for connection attempt to non-existing host: ~p",
- [Reason2]),
+ NonExistingPort = 45638, % Not in use, I hope.
+ {error, Reason1} = gen_tcp:connect(localhost, NonExistingPort, []),
+ io:format("Error for connection attempt to port not in use: ~p",
+ [Reason1]),
+
+ {error, Reason2} = gen_tcp:connect("non-existing-host-xxx", 7, []),
+ io:format("Error for connection attempt to non-existing host: ~p",
+ [Reason2]),
ok.
%%% gen_tcp:recv/X
-t_recv_timeout(doc) -> "Test that gen_tcp:recv/3 (with timeout works).";
-t_recv_timeout(suite) -> [];
+%% Test that gen_tcp:recv/3 (with timeout works).
t_recv_timeout(Config) when is_list(Config) ->
- ?line {ok, L} = gen_tcp:listen(0, []),
- ?line {ok, Port} = inet:port(L),
- ?line {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
- ?line {ok, _A} = gen_tcp:accept(L),
- ?line timeout({gen_tcp, recv, [Client, 0, 200]}, 0.2, 5.0).
-
-t_recv_eof(doc) -> "Test that end of file on a socket is reported correctly.";
-t_recv_eof(suite) -> [];
+ {ok, L} = gen_tcp:listen(0, []),
+ {ok, Port} = inet:port(L),
+ {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
+ {ok, _A} = gen_tcp:accept(L),
+ timeout({gen_tcp, recv, [Client, 0, 200]}, 0.2, 5.0).
+
+%% Test that end of file on a socket is reported correctly.
t_recv_eof(Config) when is_list(Config) ->
- ?line {ok, L} = gen_tcp:listen(0, []),
- ?line {ok, Port} = inet:port(L),
- ?line {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
- ?line {ok, A} = gen_tcp:accept(L),
- ?line ok = gen_tcp:close(A),
- ?line {error, closed} = gen_tcp:recv(Client, 0),
+ {ok, L} = gen_tcp:listen(0, []),
+ {ok, Port} = inet:port(L),
+ {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
+ {ok, A} = gen_tcp:accept(L),
+ ok = gen_tcp:close(A),
+ {error, closed} = gen_tcp:recv(Client, 0),
ok.
-t_recv_delim(doc) -> "Test using message delimiter $X";
-t_recv_delim(suite) -> [];
+%% Test using message delimiter $X.
t_recv_delim(Config) when is_list(Config) ->
{ok, L} = gen_tcp:listen(0, []),
{ok, Port} = inet:port(L),
@@ -140,8 +164,8 @@ t_recv_delim(Config) when is_list(Config) ->
{ok, Client} = gen_tcp:connect(localhost, Port, Opts),
{ok, A} = gen_tcp:accept(L),
ok = gen_tcp:send(A, "abcXefgX"),
- {ok, "abcX"} = gen_tcp:recv(Client, 0, 0),
- {ok, "efgX"} = gen_tcp:recv(Client, 0, 0),
+ {ok, "abcX"} = gen_tcp:recv(Client, 0, 200),
+ {ok, "efgX"} = gen_tcp:recv(Client, 0, 200),
ok = gen_tcp:close(Client),
ok = gen_tcp:close(A),
ok.
@@ -149,96 +173,96 @@ t_recv_delim(Config) when is_list(Config) ->
%%% gen_tcp:shutdown/2
t_shutdown_write(Config) when is_list(Config) ->
- ?line {ok, L} = gen_tcp:listen(0, []),
- ?line {ok, Port} = inet:port(L),
- ?line {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
- ?line {ok, A} = gen_tcp:accept(L),
- ?line ok = gen_tcp:shutdown(A, write),
- ?line {error, closed} = gen_tcp:recv(Client, 0),
+ {ok, L} = gen_tcp:listen(0, []),
+ {ok, Port} = inet:port(L),
+ {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
+ {ok, A} = gen_tcp:accept(L),
+ ok = gen_tcp:shutdown(A, write),
+ {error, closed} = gen_tcp:recv(Client, 0),
ok.
t_shutdown_both(Config) when is_list(Config) ->
- ?line {ok, L} = gen_tcp:listen(0, []),
- ?line {ok, Port} = inet:port(L),
- ?line {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
- ?line {ok, A} = gen_tcp:accept(L),
- ?line ok = gen_tcp:shutdown(A, read_write),
- ?line {error, closed} = gen_tcp:recv(Client, 0),
+ {ok, L} = gen_tcp:listen(0, []),
+ {ok, Port} = inet:port(L),
+ {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
+ {ok, A} = gen_tcp:accept(L),
+ ok = gen_tcp:shutdown(A, read_write),
+ {error, closed} = gen_tcp:recv(Client, 0),
ok.
t_shutdown_error(Config) when is_list(Config) ->
- ?line {ok, L} = gen_tcp:listen(0, []),
- ?line {error, enotconn} = gen_tcp:shutdown(L, read_write),
- ?line ok = gen_tcp:close(L),
- ?line {error, closed} = gen_tcp:shutdown(L, read_write),
+ {ok, L} = gen_tcp:listen(0, []),
+ {error, enotconn} = gen_tcp:shutdown(L, read_write),
+ ok = gen_tcp:close(L),
+ {error, closed} = gen_tcp:shutdown(L, read_write),
ok.
t_shutdown_async(Config) when is_list(Config) ->
- ?line {OS, _} = os:type(),
- ?line {ok, L} = gen_tcp:listen(0, [{sndbuf, 4096}]),
- ?line {ok, Port} = inet:port(L),
- ?line {ok, Client} = gen_tcp:connect(localhost, Port,
- [{recbuf, 4096},
- {active, false}]),
- ?line {ok, S} = gen_tcp:accept(L),
- ?line PayloadSize = 1024 * 1024,
- ?line Payload = lists:duplicate(PayloadSize, $.),
- ?line ok = gen_tcp:send(S, Payload),
- ?line case erlang:port_info(S, queue_size) of
- {queue_size, N} when N > 0 -> ok;
- {queue_size, 0} when OS =:= win32 -> ok;
- {queue_size, 0} = T -> ?t:fail({unexpected, T})
- end,
-
- ?line ok = gen_tcp:shutdown(S, write),
- ?line {ok, Buf} = gen_tcp:recv(Client, PayloadSize),
- ?line {error, closed} = gen_tcp:recv(Client, 0),
- ?line case length(Buf) of
- PayloadSize -> ok;
- Sz -> ?t:fail({payload_size,
- {expected, PayloadSize},
- {received, Sz}})
- end.
+ {OS, _} = os:type(),
+ {ok, L} = gen_tcp:listen(0, [{sndbuf, 4096}]),
+ {ok, Port} = inet:port(L),
+ {ok, Client} = gen_tcp:connect(localhost, Port,
+ [{recbuf, 4096},
+ {active, false}]),
+ {ok, S} = gen_tcp:accept(L),
+ PayloadSize = 1024 * 1024,
+ Payload = lists:duplicate(PayloadSize, $.),
+ ok = gen_tcp:send(S, Payload),
+ case erlang:port_info(S, queue_size) of
+ {queue_size, N} when N > 0 -> ok;
+ {queue_size, 0} when OS =:= win32 -> ok;
+ {queue_size, 0} = T -> ct:fail({unexpected, T})
+ end,
+
+ ok = gen_tcp:shutdown(S, write),
+ {ok, Buf} = gen_tcp:recv(Client, PayloadSize),
+ {error, closed} = gen_tcp:recv(Client, 0),
+ case length(Buf) of
+ PayloadSize -> ok;
+ Sz -> ct:fail({payload_size,
+ {expected, PayloadSize},
+ {received, Sz}})
+ end.
%%% gen_tcp:fdopen/2
t_fdopen(Config) when is_list(Config) ->
- ?line Question = "Aaaa... Long time ago in a small town in Germany,",
- ?line Question1 = list_to_binary(Question),
- ?line Question2 = [<<"Aaaa">>, "... ", $L, <<>>, $o, "ng time ago ",
- ["in ", [], <<"a small town">>, [" in Germany,", <<>>]]],
- ?line Question1 = iolist_to_binary(Question2),
- ?line Answer = "there was a shoemaker, Schumacher was his name.",
- ?line {ok, L} = gen_tcp:listen(0, [{active, false}]),
- ?line {ok, Port} = inet:port(L),
- ?line {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
- ?line {ok, A} = gen_tcp:accept(L),
- ?line {ok, FD} = prim_inet:getfd(A),
- ?line {ok, Server} = gen_tcp:fdopen(FD, []),
- ?line ok = gen_tcp:send(Client, Question),
- ?line {ok, Question} = gen_tcp:recv(Server, length(Question), 2000),
- ?line ok = gen_tcp:send(Client, Question1),
- ?line {ok, Question} = gen_tcp:recv(Server, length(Question), 2000),
- ?line ok = gen_tcp:send(Client, Question2),
- ?line {ok, Question} = gen_tcp:recv(Server, length(Question), 2000),
- ?line ok = gen_tcp:send(Server, Answer),
- ?line {ok, Answer} = gen_tcp:recv(Client, length(Answer), 2000),
- ?line ok = gen_tcp:close(Client),
- ?line {error,closed} = gen_tcp:recv(A, 1, 2000),
- ?line ok = gen_tcp:close(Server),
- ?line ok = gen_tcp:close(A),
- ?line ok = gen_tcp:close(L),
+ Question = "Aaaa... Long time ago in a small town in Germany,",
+ Question1 = list_to_binary(Question),
+ Question2 = [<<"Aaaa">>, "... ", $L, <<>>, $o, "ng time ago ",
+ ["in ", [], <<"a small town">>, [" in Germany,", <<>>]]],
+ Question1 = iolist_to_binary(Question2),
+ Answer = "there was a shoemaker, Schumacher was his name.",
+ {ok, L} = gen_tcp:listen(0, [{active, false}]),
+ {ok, Port} = inet:port(L),
+ {ok, Client} = gen_tcp:connect(localhost, Port, [{active, false}]),
+ {ok, A} = gen_tcp:accept(L),
+ {ok, FD} = prim_inet:getfd(A),
+ {ok, Server} = gen_tcp:fdopen(FD, []),
+ ok = gen_tcp:send(Client, Question),
+ {ok, Question} = gen_tcp:recv(Server, length(Question), 2000),
+ ok = gen_tcp:send(Client, Question1),
+ {ok, Question} = gen_tcp:recv(Server, length(Question), 2000),
+ ok = gen_tcp:send(Client, Question2),
+ {ok, Question} = gen_tcp:recv(Server, length(Question), 2000),
+ ok = gen_tcp:send(Server, Answer),
+ {ok, Answer} = gen_tcp:recv(Client, length(Answer), 2000),
+ ok = gen_tcp:close(Client),
+ {error,closed} = gen_tcp:recv(A, 1, 2000),
+ ok = gen_tcp:close(Server),
+ ok = gen_tcp:close(A),
+ ok = gen_tcp:close(L),
ok.
t_fdconnect(Config) when is_list(Config) ->
Question = "Aaaa... Long time ago in a small town in Germany,",
Question1 = list_to_binary(Question),
Question2 = [<<"Aaaa">>, "... ", $L, <<>>, $o, "ng time ago ",
- ["in ", [], <<"a small town">>, [" in Germany,", <<>>]]],
+ ["in ", [], <<"a small town">>, [" in Germany,", <<>>]]],
Question1 = iolist_to_binary(Question2),
Answer = "there was a shoemaker, Schumacher was his name.",
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
Lib = "gen_tcp_api_SUITE",
ok = erlang:load_nif(filename:join(Path,Lib), []),
{ok, L} = gen_tcp:listen(0, [{active, false}]),
@@ -266,54 +290,236 @@ t_fdconnect(Config) when is_list(Config) ->
%%% implicit inet6 option to api functions
t_implicit_inet6(Config) when is_list(Config) ->
- ?line Host = ok(inet:gethostname()),
- ?line
- case inet:getaddr(Host, inet6) of
- {ok,Addr} ->
- ?line t_implicit_inet6(Host, Addr);
- {error,Reason} ->
- {skip,
- "Can not look up IPv6 address: "
- ++atom_to_list(Reason)}
- end.
+ Host = ok(inet:gethostname()),
+ case inet:getaddr(Host, inet6) of
+ {ok,Addr} ->
+ t_implicit_inet6(Host, Addr);
+ {error,Reason} ->
+ {skip,
+ "Can not look up IPv6 address: "
+ ++atom_to_list(Reason)}
+ end.
t_implicit_inet6(Host, Addr) ->
- ?line
- case gen_tcp:listen(0, [inet6]) of
- {ok,S1} ->
- ?line Loopback = {0,0,0,0,0,0,0,1},
- ?line io:format("~s ~p~n", ["::1",Loopback]),
- ?line implicit_inet6(S1, Loopback),
- ?line ok = gen_tcp:close(S1),
- %%
- ?line Localhost = "localhost",
- ?line Localaddr = ok(inet:getaddr(Localhost, inet6)),
- ?line io:format("~s ~p~n", [Localhost,Localaddr]),
- ?line S2 = ok(gen_tcp:listen(0, [{ip,Localaddr}])),
- ?line implicit_inet6(S2, Localaddr),
- ?line ok = gen_tcp:close(S2),
- %%
- ?line io:format("~s ~p~n", [Host,Addr]),
- ?line S3 = ok(gen_tcp:listen(0, [{ifaddr,Addr}])),
- ?line implicit_inet6(S3, Addr),
- ?line ok = gen_tcp:close(S3);
- {error,_} ->
- {skip,"IPv6 not supported"}
- end.
+ case gen_tcp:listen(0, [inet6]) of
+ {ok,S1} ->
+ Loopback = {0,0,0,0,0,0,0,1},
+ io:format("~s ~p~n", ["::1",Loopback]),
+ implicit_inet6(S1, Loopback),
+ ok = gen_tcp:close(S1),
+ %%
+ Localaddr = ok(get_localaddr()),
+ S2 = ok(gen_tcp:listen(0, [{ip,Localaddr}])),
+ implicit_inet6(S2, Localaddr),
+ ok = gen_tcp:close(S2),
+ %%
+ io:format("~s ~p~n", [Host,Addr]),
+ S3 = ok(gen_tcp:listen(0, [{ifaddr,Addr}])),
+ implicit_inet6(S3, Addr),
+ ok = gen_tcp:close(S3);
+ {error,_} ->
+ {skip,"IPv6 not supported"}
+ end.
implicit_inet6(S, Addr) ->
- ?line P = ok(inet:port(S)),
- ?line S2 = ok(gen_tcp:connect(Addr, P, [])),
- ?line P2 = ok(inet:port(S2)),
- ?line S1 = ok(gen_tcp:accept(S)),
- ?line P1 = P = ok(inet:port(S1)),
- ?line {Addr,P2} = ok(inet:peername(S1)),
- ?line {Addr,P1} = ok(inet:peername(S2)),
- ?line {Addr,P1} = ok(inet:sockname(S1)),
- ?line {Addr,P2} = ok(inet:sockname(S2)),
- ?line ok = gen_tcp:close(S2),
- ?line ok = gen_tcp:close(S1).
+ P = ok(inet:port(S)),
+ S2 = ok(gen_tcp:connect(Addr, P, [])),
+ P2 = ok(inet:port(S2)),
+ S1 = ok(gen_tcp:accept(S)),
+ P1 = P = ok(inet:port(S1)),
+ {Addr,P2} = ok(inet:peername(S1)),
+ {Addr,P1} = ok(inet:peername(S2)),
+ {Addr,P1} = ok(inet:sockname(S1)),
+ {Addr,P2} = ok(inet:sockname(S2)),
+ ok = gen_tcp:close(S2),
+ ok = gen_tcp:close(S1).
+
+
+
+t_local_basic(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ CFile = local_filename(client),
+ CAddr = {local,bin_filename(CFile)},
+ _ = file:delete(SFile),
+ _ = file:delete(CFile),
+ %%
+ L =
+ ok(
+ gen_tcp:listen(0, [{ifaddr,{local,SFile}},{active,false}])),
+ C =
+ ok(
+ gen_tcp:connect(
+ {local,SFile}, 0, [{ifaddr,{local,CFile}},{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ %%
+ ok = file:delete(SFile),
+ ok = file:delete(CFile),
+ ok.
+t_local_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ %%
+ L = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ C = ok(gen_tcp:connect(SAddr, 0, [{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ %%
+ L = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ C0 = ok(gen_tcp:connect(SAddr, 0, [{active,false}])),
+ Fd = ok(prim_inet:getfd(C0)),
+ ok = prim_inet:ignorefd(C0, true),
+ C = ok(gen_tcp:fdopen(Fd, [local])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = gen_tcp:close(C0),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen_listen(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ L0 = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ Fd = ok(prim_inet:getfd(L0)),
+ L = ok(gen_tcp:listen(0, [{fd,Fd},local,{active,false}])),
+ C = ok(gen_tcp:connect(SAddr, 0, [{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(L0),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen_listen_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ P = ok(prim_inet:open(tcp, local, stream)),
+ Fd = ok(prim_inet:getfd(P)),
+ L =
+ ok(gen_tcp:listen(
+ 0, [{fd,Fd},{ifaddr,SAddr},{active,false}])),
+ C = ok(gen_tcp:connect(SAddr, 0, [{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(P),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen_connect(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ CFile = local_filename(client),
+ CAddr = {local,bin_filename(CFile)},
+ _ = file:delete(SFile),
+ _ = file:delete(CFile),
+ L = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ P = ok(prim_inet:open(tcp, local, stream)),
+ Fd = ok(prim_inet:getfd(P)),
+ C =
+ ok(gen_tcp:connect(
+ SAddr, 0, [{fd,Fd},{ifaddr,CAddr},{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = gen_tcp:close(P),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen_connect_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ L = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ P = ok(prim_inet:open(tcp, local, stream)),
+ Fd = ok(prim_inet:getfd(P)),
+ C = ok(gen_tcp:connect(SAddr, 0, [{fd,Fd},{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = gen_tcp:close(P),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_abstract(_Config) ->
+ case os:type() of
+ {unix,linux} ->
+ AbstAddr = {local,<<>>},
+ L =
+ ok(gen_tcp:listen(
+ 0, [{ifaddr,AbstAddr},{active,false}])),
+ {local,_} = SAddr = ok(inet:sockname(L)),
+ C =
+ ok(gen_tcp:connect(
+ SAddr, 0, [{ifaddr,AbstAddr},{active,false}])),
+ {local,_} = CAddr = ok(inet:sockname(C)),
+ S = ok(gen_tcp:accept(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok;
+ _ ->
+ {skip,"AF_LOCAL Abstract Addresses only supported on Linux"}
+ end.
+
+
+local_handshake(S, SAddr, C, CAddr) ->
+ SData = "9876543210",
+ CData = "0123456789",
+ SAddr = ok(inet:sockname(S)),
+ CAddr = ok(inet:sockname(C)),
+ CAddr = ok(inet:peername(S)),
+ SAddr = ok(inet:peername(C)),
+ ok = gen_tcp:send(C, CData),
+ ok = gen_tcp:send(S, SData),
+ CData = ok(gen_tcp:recv(S, length(CData))),
+ SData = ok(gen_tcp:recv(C, length(SData))),
+ ok.
%%% Utilities
@@ -323,13 +529,13 @@ implicit_inet6(S, Addr) ->
timeout({M,F,A}, Lower, Upper) ->
case test_server:timecall(M, F, A) of
{Time, Result} when Time < Lower ->
- test_server:fail({too_short_time, Time, Result});
+ ct:fail({too_short_time, Time, Result});
{Time, Result} when Time > Upper ->
- test_server:fail({too_long_time, Time, Result});
+ ct:fail({too_long_time, Time, Result});
{_, {error, timeout}} ->
ok;
{_, Result} ->
- test_server:fail({unexpected_result, Result})
+ ct:fail({unexpected_result, Result})
end.
connect_timeout({M,F,A}, Lower, Upper) ->
@@ -344,28 +550,28 @@ connect_timeout({M,F,A}, Lower, Upper) ->
Pinfo = erlang:port_info(Socket),
Db = inet_db:lookup_socket(Socket),
Peer = inet:peername(Socket),
- test_server:fail({too_short_time, Time,
- [Result,Pinfo,Db,Peer]});
+ ct:fail({too_short_time, Time,
+ [Result,Pinfo,Db,Peer]});
_ ->
- test_server:fail({too_short_time, Time, Result})
+ ct:fail({too_short_time, Time, Result})
end;
{Time, Result} when Time > Upper ->
- test_server:fail({too_long_time, Time, Result});
+ ct:fail({too_long_time, Time, Result});
{_, {error, timeout}} ->
ok;
{_, Result} ->
- test_server:fail({unexpected_result, Result})
+ ct:fail({unexpected_result, Result})
end.
%% Try to obtain an unused IP address in the local network.
unused_ip() ->
- ?line {ok, Host} = inet:gethostname(),
- ?line {ok, Hent} = inet:gethostbyname(Host),
- ?line #hostent{h_addr_list=[{A, B, C, _D}|_]} = Hent,
+ {ok, Host} = inet:gethostname(),
+ {ok, Hent} = inet:gethostbyname(Host),
+ #hostent{h_addr_list=[{A, B, C, _D}|_]} = Hent,
%% Note: In our net, addresses below 16 are reserved for routers and
%% other strange creatures.
- ?line IP = unused_ip(A, B, C, 16),
+ IP = unused_ip(A, B, C, 16),
io:format("we = ~p, unused_ip = ~p~n", [Hent, IP]),
IP.
@@ -376,8 +582,42 @@ unused_ip(A, B, C, D) ->
{error, _} -> {ok, {A, B, C, D}}
end.
-ok({ok,V}) -> V.
+ok({ok,V}) -> V;
+ok(NotOk) ->
+ try throw(not_ok)
+ catch
+ Thrown ->
+ erlang:raise(
+ error, {Thrown, NotOk}, tl(erlang:get_stacktrace()))
+ end.
+get_localaddr() ->
+ get_localaddr(["localhost", "localhost6", "ip6-localhost"]).
+
+get_localaddr([]) ->
+ {error, localaddr_not_found};
+get_localaddr([Localhost|Ls]) ->
+ case inet:getaddr(Localhost, inet6) of
+ {ok, LocalAddr} ->
+ io:format("~s ~p~n", [Localhost, LocalAddr]),
+ {ok, LocalAddr};
+ _ ->
+ get_localaddr(Ls)
+ end.
getsockfd() -> undefined.
closesockfd(_FD) -> undefined.
+
+local_filename(Tag) ->
+ "/tmp/" ?MODULE_STRING "_" ++ os:getpid() ++ "_" ++ atom_to_list(Tag).
+
+bin_filename(String) ->
+ unicode:characters_to_binary(String, file:native_name_encoding()).
+
+delete_local_filenames() ->
+ _ =
+ [file:delete(F) ||
+ F <-
+ filelib:wildcard(
+ "/tmp/" ?MODULE_STRING "_" ++ os:getpid() ++ "_*")],
+ ok.
diff --git a/lib/kernel/test/gen_tcp_api_SUITE_data/gen_tcp_api_SUITE.c b/lib/kernel/test/gen_tcp_api_SUITE_data/gen_tcp_api_SUITE.c
index ca8eacdf40..2990ddda41 100644
--- a/lib/kernel/test/gen_tcp_api_SUITE_data/gen_tcp_api_SUITE.c
+++ b/lib/kernel/test/gen_tcp_api_SUITE_data/gen_tcp_api_SUITE.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2009-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2009-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/gen_tcp_echo_SUITE.erl b/lib/kernel/test/gen_tcp_echo_SUITE.erl
index 6dcb21758b..57525f8015 100644
--- a/lib/kernel/test/gen_tcp_echo_SUITE.erl
+++ b/lib/kernel/test/gen_tcp_echo_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(gen_tcp_echo_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%-compile(export_all).
@@ -34,7 +34,9 @@
-define(TPKT_VRSN, 3).
-define(LINE_LENGTH, 1023). % (default value of gen_tcp option 'recbuf') - 1
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[active_echo, passive_echo, active_once_echo,
@@ -59,94 +61,75 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(test_server:minutes(5)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
-
-active_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to the echo port and receiving them again (socket in active mode)."];
-active_echo(suite) -> [];
+ Config.
+
+end_per_testcase(_Func, _Config) ->
+ ok.
+
+%% Test sending packets of various sizes and various packet types
+%% to the echo port and receiving them again (socket in active mode).
active_echo(Config) when is_list(Config) ->
- ?line echo_test([], fun active_echo/4, [{echo, fun echo_server/0}]).
+ echo_test([], fun active_echo/4, [{echo, fun echo_server/0}]).
-passive_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to the echo port and receiving them again (socket in passive mode)."];
-passive_echo(suite) -> [];
+%% Test sending packets of various sizes and various packet types
+%% to the echo port and receiving them again (socket in passive mode).
passive_echo(Config) when is_list(Config) ->
- ?line echo_test([{active, false}], fun passive_echo/4,
- [{echo, fun echo_server/0}]).
+ echo_test([{active, false}], fun passive_echo/4,
+ [{echo, fun echo_server/0}]).
-active_once_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to the echo port and receiving them again (socket in active once mode)."];
-active_once_echo(suite) -> [];
+%% Test sending packets of various sizes and various packet types
+%% to the echo port and receiving them again (socket in active once mode).
active_once_echo(Config) when is_list(Config) ->
- ?line echo_test([{active, once}], fun active_once_echo/4,
- [{echo, fun echo_server/0}]).
-
-slow_active_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to the echo port and receiving them again (socket in active mode). ",
- "The echo server is a special one that delays between every character."];
-slow_active_echo(suite) -> [];
+ echo_test([{active, once}], fun active_once_echo/4,
+ [{echo, fun echo_server/0}]).
+
+%% Test sending packets of various sizes and various packet types
+%% to the echo port and receiving them again (socket in active mode).
+%% The echo server is a special one that delays between every character.
slow_active_echo(Config) when is_list(Config) ->
- ?line echo_test([], fun active_echo/4,
- [slow_echo, {echo, fun slow_echo_server/0}]).
-
-slow_passive_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to an echo server and receiving them again (socket in passive mode).",
- "The echo server is a special one that delays between every character."];
-slow_passive_echo(suite) -> [];
+ echo_test([], fun active_echo/4,
+ [slow_echo, {echo, fun slow_echo_server/0}]).
+
+%% Test sending packets of various sizes and various packet types
+%% to an echo server and receiving them again (socket in passive mode).
+%% The echo server is a special one that delays between every character.
slow_passive_echo(Config) when is_list(Config) ->
- ?line echo_test([{active, false}], fun passive_echo/4,
- [slow_echo, {echo, fun slow_echo_server/0}]).
-
-limit_active_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to the echo port and receiving them again (socket in active mode) "
- "with packet_size limitation."];
-limit_active_echo(suite) -> [];
+ echo_test([{active, false}], fun passive_echo/4,
+ [slow_echo, {echo, fun slow_echo_server/0}]).
+
+%% Test sending packets of various sizes and various packet types
+%% to the echo port and receiving them again (socket in active mode)
+%% with packet_size limitation.
limit_active_echo(Config) when is_list(Config) ->
- ?line echo_test([{packet_size, 10}],
- fun active_echo/4,
- [{packet_size, 10}, {echo, fun echo_server/0}]).
-
-limit_passive_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to the echo port and receiving them again (socket in passive mode) ",
- "with packet_size limitation."];
-limit_passive_echo(suite) -> [];
+ echo_test([{packet_size, 10}],
+ fun active_echo/4,
+ [{packet_size, 10}, {echo, fun echo_server/0}]).
+
+%% Test sending packets of various sizes and various packet types
+%% to the echo port and receiving them again (socket in passive mode)
+%% with packet_size limitation.
limit_passive_echo(Config) when is_list(Config) ->
- ?line echo_test([{packet_size, 10},{active, false}],
- fun passive_echo/4,
- [{packet_size, 10}, {echo, fun echo_server/0}]).
-
-large_limit_active_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to the echo port and receiving them again (socket in active mode) "
- "with large packet_size limitation."];
-large_limit_active_echo(suite) -> [];
+ echo_test([{packet_size, 10},{active, false}],
+ fun passive_echo/4,
+ [{packet_size, 10}, {echo, fun echo_server/0}]).
+
+%% Test sending packets of various sizes and various packet types
+%% to the echo port and receiving them again (socket in active mode)
+%% with large packet_size limitation.
large_limit_active_echo(Config) when is_list(Config) ->
- ?line echo_test([{packet_size, 10}],
- fun active_echo/4,
- [{packet_size, (1 bsl 32)-1},
- {echo, fun echo_server/0}]).
-
-large_limit_passive_echo(doc) ->
- ["Test sending packets of various sizes and various packet types ",
- "to the echo port and receiving them again (socket in passive mode) ",
- "with large packet_size limitation."];
-large_limit_passive_echo(suite) -> [];
+ echo_test([{packet_size, 10}],
+ fun active_echo/4,
+ [{packet_size, (1 bsl 32)-1},
+ {echo, fun echo_server/0}]).
+
+%% Test sending packets of various sizes and various packet types
+%% to the echo port and receiving them again (socket in passive mode)
+%% with large packet_size limitation.
large_limit_passive_echo(Config) when is_list(Config) ->
- ?line echo_test([{packet_size, 10},{active, false}],
- fun passive_echo/4,
- [{packet_size, (1 bsl 32) -1},
- {echo, fun echo_server/0}]).
+ echo_test([{packet_size, 10},{active, false}],
+ fun passive_echo/4,
+ [{packet_size, (1 bsl 32) -1},
+ {echo, fun echo_server/0}]).
echo_test(SockOpts, EchoFun, Config0) ->
echo_test_1(SockOpts, EchoFun, Config0),
@@ -154,53 +137,53 @@ echo_test(SockOpts, EchoFun, Config0) ->
echo_test_1([{delay_send,true}|SockOpts], EchoFun, Config0).
echo_test_1(SockOpts, EchoFun, Config0) ->
- ?line EchoSrvFun = ?config(echo, Config0),
- ?line {ok, EchoPort} = EchoSrvFun(),
- ?line Config = [{echo_port, EchoPort}|Config0],
-
- ?line echo_packet([{packet, 1}|SockOpts], EchoFun, Config),
- ?line echo_packet([{packet, 2}|SockOpts], EchoFun, Config),
- ?line echo_packet([{packet, 4}|SockOpts], EchoFun, Config),
- ?line echo_packet([{packet, sunrm}|SockOpts], EchoFun, Config),
- ?line echo_packet([{packet, cdr}|SockOpts], EchoFun,
- [{type, {cdr, big}}|Config]),
- ?line echo_packet([{packet, cdr}|SockOpts], EchoFun,
- [{type, {cdr, little}}|Config]),
- ?line case lists:keymember(packet_size, 1, SockOpts) of
- false ->
- % This is cheating, we should test that packet_size
- % also works for line and http.
- echo_packet([{packet, line}|SockOpts], EchoFun, Config),
- echo_packet([{packet, http}|SockOpts], EchoFun, Config),
- echo_packet([{packet, http_bin}|SockOpts], EchoFun, Config);
-
- true -> ok
- end,
- ?line echo_packet([{packet, tpkt}|SockOpts], EchoFun, Config),
-
- ?line ShortTag = [16#E0],
- ?line LongTag = [16#1F, 16#83, 16#27],
- ?line echo_packet([{packet, asn1}|SockOpts], EchoFun,
- [{type, {asn1, short, ShortTag}}|Config]),
- ?line echo_packet([{packet, asn1}|SockOpts], EchoFun,
- [{type, {asn1, long, ShortTag}}|Config]),
- ?line echo_packet([{packet, asn1}|SockOpts], EchoFun,
- [{type, {asn1, short, LongTag}}|Config]),
- ?line echo_packet([{packet, asn1}|SockOpts], EchoFun,
- [{type, {asn1, long, LongTag}}|Config]),
+ EchoSrvFun = proplists:get_value(echo, Config0),
+ {ok, EchoPort} = EchoSrvFun(),
+ Config = [{echo_port, EchoPort}|Config0],
+
+ echo_packet([{packet, 1}|SockOpts], EchoFun, Config),
+ echo_packet([{packet, 2}|SockOpts], EchoFun, Config),
+ echo_packet([{packet, 4}|SockOpts], EchoFun, Config),
+ echo_packet([{packet, sunrm}|SockOpts], EchoFun, Config),
+ echo_packet([{packet, cdr}|SockOpts], EchoFun,
+ [{type, {cdr, big}}|Config]),
+ echo_packet([{packet, cdr}|SockOpts], EchoFun,
+ [{type, {cdr, little}}|Config]),
+ case lists:keymember(packet_size, 1, SockOpts) of
+ false ->
+ %% This is cheating, we should test that packet_size
+ %% also works for line and http.
+ echo_packet([{packet, line}|SockOpts], EchoFun, Config),
+ echo_packet([{packet, http}|SockOpts], EchoFun, Config),
+ echo_packet([{packet, http_bin}|SockOpts], EchoFun, Config);
+
+ true -> ok
+ end,
+ echo_packet([{packet, tpkt}|SockOpts], EchoFun, Config),
+
+ ShortTag = [16#E0],
+ LongTag = [16#1F, 16#83, 16#27],
+ echo_packet([{packet, asn1}|SockOpts], EchoFun,
+ [{type, {asn1, short, ShortTag}}|Config]),
+ echo_packet([{packet, asn1}|SockOpts], EchoFun,
+ [{type, {asn1, long, ShortTag}}|Config]),
+ echo_packet([{packet, asn1}|SockOpts], EchoFun,
+ [{type, {asn1, short, LongTag}}|Config]),
+ echo_packet([{packet, asn1}|SockOpts], EchoFun,
+ [{type, {asn1, long, LongTag}}|Config]),
ok.
echo_packet(SockOpts, EchoFun, Opts) ->
Type = case lists:keysearch(type, 1, Opts) of
- {value, {type, T}} ->
- T;
- _ ->
- {value, {packet, T}} = lists:keysearch(packet, 1, SockOpts),
- T
- end,
+ {value, {type, T}} ->
+ T;
+ _ ->
+ {value, {packet, T}} = lists:keysearch(packet, 1, SockOpts),
+ T
+ end,
%% Connect to the echo server.
- EchoPort = ?config(echo_port, Opts),
+ EchoPort = proplists:get_value(echo_port, Opts),
{ok, Echo} = gen_tcp:connect(localhost, EchoPort, SockOpts),
SlowEcho = lists:member(slow_echo, Opts),
@@ -223,83 +206,78 @@ echo_packet_http(Echo, Type, EchoFun) ->
EchoFun(Echo, Type, P2, http_reply(P2, Type)).
echo_packet0(Echo, Type, EchoFun, SlowEcho, Opts) ->
- ?line PacketSize =
+ PacketSize =
case lists:keysearch(packet_size, 1, Opts) of
{value,{packet_size,Sz}} when Sz < 10 -> Sz;
{value,{packet_size,_}} -> 10;
false -> 0
end,
%% Echo small packets first.
- ?line echo_packet1(Echo, Type, EchoFun, 0),
- ?line echo_packet1(Echo, Type, EchoFun, 1),
- ?line echo_packet1(Echo, Type, EchoFun, 2),
- ?line echo_packet1(Echo, Type, EchoFun, 3),
- ?line echo_packet1(Echo, Type, EchoFun, 4),
- ?line echo_packet1(Echo, Type, EchoFun, 7),
+ echo_packet1(Echo, Type, EchoFun, 0),
+ echo_packet1(Echo, Type, EchoFun, 1),
+ echo_packet1(Echo, Type, EchoFun, 2),
+ echo_packet1(Echo, Type, EchoFun, 3),
+ echo_packet1(Echo, Type, EchoFun, 4),
+ echo_packet1(Echo, Type, EchoFun, 7),
if PacketSize =/= 0 ->
- ?line echo_packet1(Echo, Type, EchoFun,
- {PacketSize-1, PacketSize}),
- ?line echo_packet1(Echo, Type, EchoFun,
- {PacketSize, PacketSize}),
- ?line echo_packet1(Echo, Type, EchoFun,
- {PacketSize+1, PacketSize});
+ echo_packet1(Echo, Type, EchoFun,
+ {PacketSize-1, PacketSize}),
+ echo_packet1(Echo, Type, EchoFun,
+ {PacketSize, PacketSize}),
+ echo_packet1(Echo, Type, EchoFun,
+ {PacketSize+1, PacketSize});
not SlowEcho -> % Go on with bigger packets if not slow echo server.
- ?line echo_packet1(Echo, Type, EchoFun, 10),
- ?line echo_packet1(Echo, Type, EchoFun, 13),
- ?line echo_packet1(Echo, Type, EchoFun, 126),
- ?line echo_packet1(Echo, Type, EchoFun, 127),
- ?line echo_packet1(Echo, Type, EchoFun, 128),
- ?line echo_packet1(Echo, Type, EchoFun, 255),
- ?line echo_packet1(Echo, Type, EchoFun, 256),
- ?line echo_packet1(Echo, Type, EchoFun, 1023),
- ?line echo_packet1(Echo, Type, EchoFun, 3747),
- ?line echo_packet1(Echo, Type, EchoFun, 32767),
- ?line echo_packet1(Echo, Type, EchoFun, 32768),
- ?line echo_packet1(Echo, Type, EchoFun, 65531),
- ?line echo_packet1(Echo, Type, EchoFun, 65535),
- ?line echo_packet1(Echo, Type, EchoFun, 65536),
- ?line echo_packet1(Echo, Type, EchoFun, 70000),
- ?line echo_packet1(Echo, Type, EchoFun, infinite);
+ echo_packet1(Echo, Type, EchoFun, 10),
+ echo_packet1(Echo, Type, EchoFun, 13),
+ echo_packet1(Echo, Type, EchoFun, 126),
+ echo_packet1(Echo, Type, EchoFun, 127),
+ echo_packet1(Echo, Type, EchoFun, 128),
+ echo_packet1(Echo, Type, EchoFun, 255),
+ echo_packet1(Echo, Type, EchoFun, 256),
+ echo_packet1(Echo, Type, EchoFun, 1023),
+ echo_packet1(Echo, Type, EchoFun, 3747),
+ echo_packet1(Echo, Type, EchoFun, 32767),
+ echo_packet1(Echo, Type, EchoFun, 32768),
+ echo_packet1(Echo, Type, EchoFun, 65531),
+ echo_packet1(Echo, Type, EchoFun, 65535),
+ echo_packet1(Echo, Type, EchoFun, 65536),
+ echo_packet1(Echo, Type, EchoFun, 70000),
+ echo_packet1(Echo, Type, EchoFun, infinite);
true -> ok
end,
- ?line gen_tcp:close(Echo),
+ gen_tcp:close(Echo),
ok.
echo_packet1(EchoSock, Type, EchoFun, Size) ->
- ?line case packet(Size, Type) of
- false ->
- ok;
- Packet ->
- ?line io:format("Type ~p, size ~p, time ~p",
- [Type, Size, time()]),
- ?line
- case EchoFun(EchoSock, Type, Packet, [Packet]) of
- ok ->
- ?line
- case Size of
- {N, Max} when N > Max ->
- ?line
- test_server:fail(
- {packet_through, {N, Max}});
- _ -> ok
- end;
- {error, emsgsize} ->
- ?line
- case Size of
- {N, Max} when N > Max ->
- io:format(" Blocked!");
- _ ->
- ?line
- test_server:fail(
- {packet_blocked, Size})
- end;
- Error ->
- ?line test_server:fail(Error)
- end
- end.
+ case packet(Size, Type) of
+ false ->
+ ok;
+ Packet ->
+ io:format("Type ~p, size ~p, time ~p",
+ [Type, Size, time()]),
+ case EchoFun(EchoSock, Type, Packet, [Packet]) of
+ ok ->
+ case Size of
+ {N, Max} when N > Max ->
+ ct:fail(
+ {packet_through, {N, Max}});
+ _ -> ok
+ end;
+ {error, emsgsize} ->
+ case Size of
+ {N, Max} when N > Max ->
+ io:format(" Blocked!");
+ _ ->
+ ct:fail(
+ {packet_blocked, Size})
+ end;
+ Error ->
+ ct:fail(Error)
+ end
+ end.
active_echo(Sock, Type, Packet, PacketEchos) ->
- ?line ok = gen_tcp:send(Sock, Packet),
+ ok = gen_tcp:send(Sock, Packet),
active_recv(Sock, Type, PacketEchos).
active_recv(_, _, []) ->
@@ -310,21 +288,21 @@ active_recv(Sock, Type, [PacketEcho|Tail]) ->
http_bin -> http;
_ -> tcp
end,
- ?line receive Recv->Recv end,
+ receive Recv->Recv end,
%%io:format("Active received: ~p\n",[Recv]),
- ?line case Recv of
- {Tag, Sock, PacketEcho} ->
- active_recv(Sock, Type, Tail);
- {Tag, Sock, Bad} ->
- ?line test_server:fail({wrong_data, Bad, expected, PacketEcho});
- {tcp_error, Sock, Reason} ->
- {error, Reason};
- Other ->
- ?line test_server:fail({unexpected_message, Other, Tag})
- end.
+ case Recv of
+ {Tag, Sock, PacketEcho} ->
+ active_recv(Sock, Type, Tail);
+ {Tag, Sock, Bad} ->
+ ct:fail({wrong_data, Bad, expected, PacketEcho});
+ {tcp_error, Sock, Reason} ->
+ {error, Reason};
+ Other ->
+ ct:fail({unexpected_message, Other, Tag})
+ end.
passive_echo(Sock, _Type, Packet, PacketEchos) ->
- ?line ok = gen_tcp:send(Sock, Packet),
+ ok = gen_tcp:send(Sock, Packet),
passive_recv(Sock, PacketEchos).
passive_recv(_, []) ->
@@ -332,22 +310,22 @@ passive_recv(_, []) ->
passive_recv(Sock, [PacketEcho | Tail]) ->
Recv = gen_tcp:recv(Sock, 0),
%%io:format("Passive received: ~p\n",[Recv]),
- ?line case Recv of
- {ok, PacketEcho} ->
- passive_recv(Sock, Tail);
- {ok, Bad} ->
- io:format("Expected: ~p\nGot: ~p\n",[PacketEcho,Bad]),
- ?line test_server:fail({wrong_data, Bad});
- {error,PacketEcho} ->
- passive_recv(Sock, Tail); % expected error
- {error, _}=Error ->
- Error;
- Other ->
- ?line test_server:fail({unexpected_message, Other})
- end.
+ case Recv of
+ {ok, PacketEcho} ->
+ passive_recv(Sock, Tail);
+ {ok, Bad} ->
+ io:format("Expected: ~p\nGot: ~p\n",[PacketEcho,Bad]),
+ ct:fail({wrong_data, Bad});
+ {error,PacketEcho} ->
+ passive_recv(Sock, Tail); % expected error
+ {error, _}=Error ->
+ Error;
+ Other ->
+ ct:fail({unexpected_message, Other})
+ end.
active_once_echo(Sock, Type, Packet, PacketEchos) ->
- ?line ok = gen_tcp:send(Sock, Packet),
+ ok = gen_tcp:send(Sock, Packet),
active_once_recv(Sock, Type, PacketEchos).
active_once_recv(_, _, []) ->
@@ -358,17 +336,17 @@ active_once_recv(Sock, Type, [PacketEcho | Tail]) ->
http_bin -> http;
_ -> tcp
end,
- ?line receive
- {Tag, Sock, PacketEcho} ->
- inet:setopts(Sock, [{active, once}]),
- active_once_recv(Sock, Type, Tail);
- {Tag, Sock, Bad} ->
- ?line test_server:fail({wrong_data, Bad});
- {tcp_error, Sock, Reason} ->
- {error, Reason};
- Other ->
- ?line test_server:fail({unexpected_message, Other, expected, {Tag, Sock, PacketEcho}})
- end.
+ receive
+ {Tag, Sock, PacketEcho} ->
+ inet:setopts(Sock, [{active, once}]),
+ active_once_recv(Sock, Type, Tail);
+ {Tag, Sock, Bad} ->
+ ct:fail({wrong_data, Bad});
+ {tcp_error, Sock, Reason} ->
+ {error, Reason};
+ Other ->
+ ct:fail({unexpected_message, Other, expected, {Tag, Sock, PacketEcho}})
+ end.
%%% Building of random packets.
@@ -442,14 +420,7 @@ random_char(Chars) ->
lists:nth(uniform(length(Chars)), Chars).
uniform(N) ->
- case get(random_seed) of
- undefined ->
- {X, Y, Z} = time(),
- random:seed(X, Y, Z);
- _ ->
- ok
- end,
- random:uniform(N).
+ rand:uniform(N).
put_int32(X, big, List) ->
[ (X bsr 24) band 16#ff,
@@ -458,9 +429,9 @@ put_int32(X, big, List) ->
(X) band 16#ff | List ];
put_int32(X, little, List) ->
[ (X) band 16#ff,
- (X bsr 8) band 16#ff,
- (X bsr 16) band 16#ff,
- (X bsr 24) band 16#ff | List].
+ (X bsr 8) band 16#ff,
+ (X bsr 16) band 16#ff,
+ (X bsr 24) band 16#ff | List].
put_int16(X, ByteOrder) ->
put_int16(X, ByteOrder, []).
@@ -470,16 +441,16 @@ put_int16(X, big, List) ->
(X) band 16#ff | List ];
put_int16(X, little, List) ->
[ (X) band 16#ff,
- (X bsr 8) band 16#ff | List ].
+ (X bsr 8) band 16#ff | List ].
%%% A normal echo server, for systems that don't have one.
echo_server() ->
Self = self(),
- ?line spawn_link(fun() -> echo_server(Self) end),
- ?line receive
- {echo_port, Port} ->
- {ok, Port}
+ spawn_link(fun() -> echo_server(Self) end),
+ receive
+ {echo_port, Port} ->
+ {ok, Port}
end.
echo_server(ReplyTo) ->
@@ -512,11 +483,11 @@ echoer_loop(Sock) ->
slow_echo_server() ->
Self = self(),
- ?line spawn_link(fun() -> slow_echo_server(Self) end),
- ?line receive
- {echo_port, Port} ->
- {ok, Port}
- end.
+ spawn_link(fun() -> slow_echo_server(Self) end),
+ receive
+ {echo_port, Port} ->
+ {ok, Port}
+ end.
slow_echo_server(ReplyTo) ->
{ok, S} = gen_tcp:listen(0, [{active, false}, {nodelay, true}]),
@@ -552,17 +523,17 @@ slow_send(_, []) ->
http_request(Uri) ->
list_to_binary(["POST ", Uri, <<" HTTP/1.1\r\n"
- "Connection: close\r\n"
- "Host: localhost:8000\r\n"
- "User-Agent: perl post\r\n"
- "Content-Length: 4\r\n"
- "Content-Type: text/xml; charset=utf-8\r\n"
- "Other-Field: with some text\r\n"
- "Multi-Line: Once upon a time in a land far far away,\r\n"
- " there lived a princess imprisoned in the highest tower\r\n"
- " of the most haunted castle.\r\n"
- "Invalid line without a colon\r\n"
- "\r\n">>]).
+ "Connection: close\r\n"
+ "Host: localhost:8000\r\n"
+ "User-Agent: perl post\r\n"
+ "Content-Length: 4\r\n"
+ "Content-Type: text/xml; charset=utf-8\r\n"
+ "Other-Field: with some text\r\n"
+ "Multi-Line: Once upon a time in a land far far away,\r\n"
+ " there lived a princess imprisoned in the highest tower\r\n"
+ " of the most haunted castle.\r\n"
+ "Invalid line without a colon\r\n"
+ "\r\n">>]).
http_uri_variants() ->
["*",
@@ -575,11 +546,11 @@ http_uri_variants() ->
http_response() ->
<<"HTTP/1.0 404 Object Not Found\r\n"
- "Server: inets/4.7.16\r\n"
- "Date: Fri, 04 Jul 2008 17:16:22 GMT\r\n"
- "Content-Type: text/html\r\n"
- "Content-Length: 207\r\n"
- "\r\n">>.
+ "Server: inets/4.7.16\r\n"
+ "Date: Fri, 04 Jul 2008 17:16:22 GMT\r\n"
+ "Content-Type: text/html\r\n"
+ "Content-Length: 207\r\n"
+ "\r\n">>.
http_reply(Bin, Type) ->
{ok, Line, Rest} = erlang:decode_packet(Type,Bin,[]),
@@ -596,7 +567,3 @@ http_reply(<<>>, Acc, _) ->
http_reply(Bin, Acc, HType) ->
{ok, Line, Rest} = erlang:decode_packet(HType,Bin,[]),
http_reply(Rest, [Line | Acc], HType).
-
-
-
-
diff --git a/lib/kernel/test/gen_tcp_misc_SUITE.erl b/lib/kernel/test/gen_tcp_misc_SUITE.erl
index 81c6dcd0fd..6b64c83fc2 100644
--- a/lib/kernel/test/gen_tcp_misc_SUITE.erl
+++ b/lib/kernel/test/gen_tcp_misc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,15 +19,15 @@
%%
-module(gen_tcp_misc_SUITE).
--include_lib("test_server/include/test_server.hrl").
-
-%-compile(export_all).
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
controlling_process/1, controlling_process_self/1,
no_accept/1, close_with_pending_output/1, active_n/1,
- data_before_close/1, iter_max_socks/1, get_status/1,
+ data_before_close/1,
+ iter_max_socks/0, iter_max_socks/1,
+ get_status/1,
passive_sockets/1, accept_closed_by_other_process/1,
init_per_testcase/2, end_per_testcase/2,
otp_3924/1, otp_3924_sender/4, closed_socket/1,
@@ -41,7 +41,7 @@
busy_send/1, busy_disconnect_passive/1, busy_disconnect_active/1,
fill_sendq/1, partial_recv_and_close/1,
partial_recv_and_close_2/1,partial_recv_and_close_3/1,so_priority/1,
- % Accept tests
+ %% Accept tests
primitive_accept/1,multi_accept_close_listen/1,accept_timeout/1,
accept_timeouts_in_order/1,accept_timeouts_in_order2/1,
accept_timeouts_in_order3/1,accept_timeouts_in_order4/1,
@@ -50,7 +50,8 @@
killing_acceptor/1,killing_multi_acceptors/1,killing_multi_acceptors2/1,
several_accepts_in_one_go/1, accept_system_limit/1,
active_once_closed/1, send_timeout/1, send_timeout_active/1,
- otp_7731/1, zombie_sockets/1, otp_7816/1, otp_8102/1, wrapping_oct/1,
+ otp_7731/1, zombie_sockets/1, otp_7816/1, otp_8102/1,
+ wrapping_oct/0, wrapping_oct/1,
otp_9389/1]).
%% Internal exports.
@@ -58,41 +59,15 @@
oct_acceptor/1,
otp_7731_server/1, zombie_server/2, do_iter_max_socks/2]).
-init_per_testcase(wrapping_oct, Config) when is_list(Config) ->
- Dog = case os:type() of
- {ose,_} ->
- test_server:timetrap(test_server:minutes(20));
- _Else ->
- test_server:timetrap(test_server:seconds(600))
- end,
- [{watchdog, Dog}|Config];
-init_per_testcase(iter_max_socks, Config) when is_list(Config) ->
- Dog = case os:type() of
- {win32,_} ->
- test_server:timetrap(test_server:minutes(30));
- _Else ->
- test_server:timetrap(test_server:seconds(240))
- end,
- [{watchdog, Dog}|Config];
-init_per_testcase(accept_system_limit, Config) when is_list(Config) ->
- case os:type() of
- {ose,_} ->
- {skip,"Skip in OSE"};
- _ ->
- Dog = test_server:timetrap(test_server:seconds(240)),
- [{watchdog,Dog}|Config]
- end;
-init_per_testcase(wrapping_oct, Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(600)),
- [{watchdog, Dog}|Config];
-init_per_testcase(_Func, Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(240)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+init_per_testcase(_Func, Config) ->
+ Config.
+
+end_per_testcase(_Func, _Config) ->
+ ok.
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,4}}].
all() ->
[controlling_process, controlling_process_self, no_accept,
@@ -136,11 +111,13 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-default_options(doc) ->
- ["Tests kernel application variables inet_default_listen_options and "
- "inet_default_connect_options"];
-default_options(suite) ->
- [];
+-define(UNIQ_NODE_NAME,
+ list_to_atom(?MODULE_STRING ++ "__" ++
+ atom_to_list(?FUNCTION_NAME) ++ "_" ++
+ integer_to_list(erlang:unique_integer([positive])))).
+
+%% Tests kernel application variables inet_default_listen_options and
+%% inet_default_connect_options.
default_options(Config) when is_list(Config) ->
%% First check the delay_send option
{true,true,true}=do_delay_send_1(),
@@ -215,7 +192,7 @@ default_options(Config) when is_list(Config) ->
do_delay_on_other_node(XArgs, Function) ->
Dir = filename:dirname(code:which(?MODULE)),
- {ok,Node} = test_server:start_node(test_default_options_slave,slave,
+ {ok,Node} = test_server:start_node(?UNIQ_NODE_NAME, slave,
[{args,"-pa " ++ Dir ++ " " ++ XArgs}]),
Res = rpc:call(Node,erlang,apply,[Function,[]]),
test_server:stop_node(Node),
@@ -312,11 +289,9 @@ do_delay_send_7() ->
gen_tcp:close(LS),
{B1,B2,B3}.
-controlling_process(doc) ->
- ["Open a listen port and change controlling_process for it",
- "The result should be ok of done by the owner process,"
- "Otherwise is should return {error,not_owner} or similar"];
-controlling_process(suite) -> [];
+%% Open a listen port and change controlling_process for it
+%% The result should be ok of done by the owner process,
+%% Otherwise is should return {error,not_owner} or similar.
controlling_process(Config) when is_list(Config) ->
{ok,S} = gen_tcp:listen(0,[]),
Pid2 = spawn(?MODULE,not_owner,[S]),
@@ -345,9 +320,8 @@ not_owner(S) ->
ok
end.
-controlling_process_self(doc) ->
- ["Open a listen port and assign the controlling process to "
- "it self, then exit and make sure the port is closed properly."];
+%% Open a listen port and assign the controlling process to
+%% it self, then exit and make sure the port is closed properly.
controlling_process_self(Config) when is_list(Config) ->
S = self(),
process_flag(trap_exit,true),
@@ -371,11 +345,9 @@ controlling_process_self(Config) when is_list(Config) ->
end.
-no_accept(doc) ->
- ["Open a listen port and connect to it, then close the listen port ",
- "without doing any accept. The connected socket should receive ",
- "a tcp_closed message."];
-no_accept(suite) -> [];
+%% Open a listen port and connect to it, then close the listen port
+%% without doing any accept. The connected socket should receive
+%% a tcp_closed message.
no_accept(Config) when is_list(Config) ->
{ok, L} = gen_tcp:listen(0, []),
{ok, {_, Port}} = inet:sockname(L),
@@ -385,14 +357,12 @@ no_accept(Config) when is_list(Config) ->
{tcp_closed, Client} ->
ok
after 5000 ->
- test_server:fail(never_closed)
+ ct:fail(never_closed)
end.
-close_with_pending_output(doc) ->
- ["Send several packets to a socket and close it. All packets should arrive ",
- "to the other end."];
-close_with_pending_output(suite) -> [];
+%% Send several packets to a socket and close it. All packets should
+%% arrive to the other end.
close_with_pending_output(Config) when is_list(Config) ->
{ok, L} = gen_tcp:listen(0, [binary, {active, false}]),
{ok, {_, Port}} = inet:sockname(L),
@@ -408,16 +378,16 @@ close_with_pending_output(Config) when is_list(Config) ->
gen_tcp:close(A),
gen_tcp:close(L);
{ok, Bin} ->
- test_server:fail({small_packet,
+ ct:fail({small_packet,
byte_size(Bin)});
Error ->
- test_server:fail({unexpected, Error})
+ ct:fail({unexpected, Error})
end,
ok;
{error, no_remote_hosts} ->
{skipped,"No remote hosts"};
{error, Other} ->
- ?t:fail({failed_to_start_slave_node, Other})
+ ct:fail({failed_to_start_slave_node, Other})
end.
sender(Port, Packets, Host) ->
@@ -435,9 +405,7 @@ send_loop(Sock, Data, Left) ->
send_loop(Sock, Data, Left-1).
%% Test {active,N} option
-active_n(doc) ->
- ["Verify operation of the {active,N} option."];
-active_n(suite) -> [];
+%% Verify operation of the {active,N} option.
active_n(Config) when is_list(Config) ->
N = 3,
LS = ok(gen_tcp:listen(0, [{active,N}])),
@@ -547,9 +515,7 @@ active_n(Config) when is_list(Config) ->
%% I expect propagation of a close to be quite fast
%% so 100 ms seems reasonable.
-otp_3924(doc) ->
- ["Tests that a socket can be closed fast enough."];
-otp_3924(suite) -> [];
+%% Tests that a socket can be closed fast enough.
otp_3924(Config) when is_list(Config) ->
MaxDelay = (case has_superfluous_schedulers() of
true -> 4;
@@ -567,8 +533,8 @@ otp_3924_1(MaxDelay) ->
{ok, Node} = start_node(otp_3924),
DataLen = 100*1024,
Data = otp_3924_data(DataLen),
- % Repeat the test a couple of times to prevent the test from passing
- % by chance.
+ %% Repeat the test a couple of times to prevent the test from passing
+ %% by chance.
repeat(10, fun(N) ->
ok = otp_3924(MaxDelay, Node, Data, DataLen, N)
end),
@@ -607,17 +573,17 @@ otp_3924_receive_data(LSock, Sender, MaxDelay, Len, N) ->
process_flag(priority, OP),
receive
{'EXIT', _, TimeoutRef} ->
- test_server:fail({close_not_fast_enough,MaxDelay,N});
+ ct:fail({close_not_fast_enough,MaxDelay,N});
{'EXIT', Sender, Reason} ->
- test_server:fail({sender_exited, Reason});
+ ct:fail({sender_exited, Reason});
{'EXIT', _Other, Reason} ->
- test_server:fail({linked_process_exited, Reason})
+ ct:fail({linked_process_exited, Reason})
after 0 ->
case Data of
{'EXIT', {A,B}} ->
- test_server:fail({A,B,N});
+ ct:fail({A,B,N});
{'EXIT', Failure} ->
- test_server:fail(Failure);
+ ct:fail(Failure);
_ ->
Data
end
@@ -676,8 +642,7 @@ otp_3924_sender(Receiver, Host, Port, Data) ->
end.
-data_before_close(doc) ->
- ["Tests that a huge amount of data can be received before a close."];
+%% Tests that a huge amount of data can be received before a close.
data_before_close(Config) when is_list(Config) ->
{ok, L} = gen_tcp:listen(0, [binary]),
{ok, {_, TcpPort}} = inet:sockname(L),
@@ -689,7 +654,7 @@ data_before_close(Config) when is_list(Config) ->
io:format("Result: ~p", [Result]);
{Wrong, Result} ->
io:format("Result: ~p", [Result]),
- test_server:fail({wrong_count, Wrong})
+ ct:fail({wrong_count, Wrong})
end,
ok.
@@ -714,11 +679,9 @@ make_zero_packet(N) when N rem 2 == 0 ->
make_zero_packet(N) ->
P = make_zero_packet(N div 2),
[0, P|P].
-get_status(doc) ->
- ["OTP-2924",
- "test that the socket process does not crash when sys:get_status(Pid)",
- "is called."];
-get_status(suite) -> [];
+
+%% OTP-2924. Test that the socket process does not crash when
+%% sys:get_status(Pid) is called.
get_status(Config) when is_list(Config) ->
{ok,{socket,Pid,_,_}} = gen_tcp:listen(5678,[]),
{status,Pid,_,_} = sys:get_status(Pid).
@@ -726,9 +689,11 @@ get_status(Config) when is_list(Config) ->
-define(RECOVER_SLEEP, 60000).
-define(RETRY_SLEEP, 15000).
-iter_max_socks(doc) ->
- ["Open as many sockets as possible. Do this several times and check ",
- "that we get the same number of sockets every time."];
+iter_max_socks() ->
+ [{timetrap,{minutes,30}}].
+
+%% Open as many sockets as possible. Do this several times and check
+%% that we get the same number of sockets every time.
iter_max_socks(Config) when is_list(Config) ->
N = case os:type() of {win32,_} -> 10; _ -> 20 end,
%% Run on a different node in order to limit the effect if this test fails.
@@ -757,7 +722,7 @@ do_iter_max_socks(N, First) when is_integer(First) ->
true ->
io:format("Sleeping for ~p seconds...~n",
[?RETRY_SLEEP/1000]),
- ?t:sleep(?RETRY_SLEEP),
+ ct:sleep(?RETRY_SLEEP),
io:format("Trying again...~n", []),
RetryMS = max_socks(),
if RetryMS == First ->
@@ -775,10 +740,10 @@ all_equal([Rule | T]) ->
all_equal(Rule, [Rule | T]) ->
all_equal(Rule, T);
all_equal(_, [_ | _]) ->
- ?t:sleep(?RECOVER_SLEEP), % Wait a while and *hope* that we'll
- % recover so other tests won't be
- % affected.
- ?t:fail(max_socket_mismatch);
+ ct:sleep(?RECOVER_SLEEP), % Wait a while and *hope* that we'll
+ %% recover so other tests won't be
+ %% affected.
+ ct:fail(max_socket_mismatch);
all_equal(_Rule, []) ->
ok.
@@ -820,21 +785,20 @@ start_remote(Name) ->
Pa = filename:dirname(code:which(?MODULE)),
test_server:start_node(Name, slave, [{remote, true}, {args, "-pa " ++ Pa}]).
-passive_sockets(doc) ->
- ["Tests that when 'the other side' on a passive socket closes, the connecting",
- "side still can read until the end of data."];
+%% Tests that when 'the other side' on a passive socket closes, the
+%% connecting, side still can read until the end of data.
passive_sockets(Config) when is_list(Config) ->
spawn_link(?MODULE, passive_sockets_server,
[[{active,false}],self()]),
receive
{socket,Port} -> ok
end,
- ?t:sleep(500),
+ ct:sleep(500),
case gen_tcp:connect("localhost", Port, [{active, false}]) of
{ok, Sock} ->
passive_sockets_read(Sock);
Error ->
- ?t:fail({"Could not connect to server", Error})
+ ct:fail({"Could not connect to server", Error})
end.
%%
@@ -850,7 +814,7 @@ passive_sockets_read(Sock) ->
gen_tcp:close(Sock);
Error ->
gen_tcp:close(Sock),
- ?t:fail({"Did not get {error, closed} before other error", Error})
+ ct:fail({"Did not get {error, closed} before other error", Error})
end.
passive_sockets_server(Opts, Parent) ->
@@ -860,17 +824,17 @@ passive_sockets_server(Opts, Parent) ->
Parent ! {socket,Port},
passive_sockets_server_accept(LSock);
Error ->
- ?t:fail({"Could not create listen socket", Error})
+ ct:fail({"Could not create listen socket", Error})
end.
passive_sockets_server_accept(Sock) ->
case gen_tcp:accept(Sock) of
{ok, Socket} ->
- ?t:sleep(500), % Simulate latency
+ timer:sleep(500), % Simulate latency
passive_sockets_server_send(Socket, 5),
passive_sockets_server_accept(Sock);
Error ->
- ?t:fail({"Could not accept connection", Error})
+ ct:fail({"Could not accept connection", Error})
end.
passive_sockets_server_send(Socket, 0) ->
@@ -880,16 +844,15 @@ passive_sockets_server_send(Socket, X) ->
Data = lists:duplicate(1024*X, $a),
case gen_tcp:send(Socket, Data) of
ok ->
- ?t:sleep(50), % Simulate some processing.
+ ct:sleep(50), % Simulate some processing.
passive_sockets_server_send(Socket, X-1);
{error, _Reason} ->
- ?t:fail("Failed to send data")
+ ct:fail("Failed to send data")
end.
-accept_closed_by_other_process(doc) ->
- ["Tests the return value from gen_tcp:accept when ",
- "the socket is closed from another process. (OTP-3817)"];
+%% Tests the return value from gen_tcp:accept when
+%% the socket is closed from another process. (OTP-3817)
accept_closed_by_other_process(Config) when is_list(Config) ->
Parent = self(),
{ok, ListenSocket} = gen_tcp:listen(0, []),
@@ -904,7 +867,7 @@ accept_closed_by_other_process(Config) when is_list(Config) ->
{Child, {error, closed}} ->
ok;
{Child, Other} ->
- ?t:fail({"Wrong result of gen_tcp:accept", Other})
+ ct:fail({"Wrong result of gen_tcp:accept", Other})
end.
repeat(N, Fun) ->
@@ -917,10 +880,7 @@ repeat(_, _, _) ->
ok.
-closed_socket(suite) ->
- [];
-closed_socket(doc) ->
- ["Tests the response when using a closed socket as argument"];
+%% Tests the response when using a closed socket as argument.
closed_socket(Config) when is_list(Config) ->
{ok, LS1} = gen_tcp:listen(0, []),
erlang:yield(),
@@ -932,7 +892,7 @@ closed_socket(Config) when is_list(Config) ->
%% in inet_db processes the 'EXIT' message from the port,
%% the socket is unregistered.
%%
- %% test_server:sleep(test_server:seconds(2)),
+ %% ct:sleep({seconds,2})
%%
{error, R_send} = gen_tcp:send(LS1, "data"),
{error, R_recv} = gen_tcp:recv(LS1, 17),
@@ -974,7 +934,7 @@ shutdown_common(Active) ->
do_sort(P, []),
receive
Any ->
- ?t:fail({unexpected_message,Any})
+ ct:fail({unexpected_message,Any})
after 0 -> ok
end.
@@ -1055,7 +1015,7 @@ shutdown_pending(Config) when is_list(Config) ->
io:format("~p\n", [Msg]),
N = list_to_integer(Msg) - 5;
Other ->
- ?t:fail({unexpected,Other})
+ ct:fail({unexpected,Other})
end,
ok.
@@ -1107,9 +1067,9 @@ show_econnreset_active(Config) when is_list(Config) ->
{tcp_closed, S} ->
ok;
Other ->
- ?t:fail({unexpected1, Other})
+ ct:fail({unexpected1, Other})
after 1000 ->
- ?t:fail({timeout, {server, no_tcp_closed}})
+ ct:fail({timeout, {server, no_tcp_closed}})
end,
%% Now test with option switched on.
@@ -1128,14 +1088,14 @@ show_econnreset_active(Config) when is_list(Config) ->
{tcp_closed, S1} ->
ok;
Other1 ->
- ?t:fail({unexpected2, Other1})
+ ct:fail({unexpected2, Other1})
after 1 ->
- ?t:fail({timeout, {server, no_tcp_closed}})
+ ct:fail({timeout, {server, no_tcp_closed}})
end;
Other2 ->
- ?t:fail({unexpected3, Other2})
+ ct:fail({unexpected3, Other2})
after 1000 ->
- ?t:fail({timeout, {server, no_tcp_error}})
+ ct:fail({timeout, {server, no_tcp_error}})
end.
show_econnreset_active_once(Config) when is_list(Config) ->
@@ -1149,7 +1109,7 @@ show_econnreset_active_once(Config) when is_list(Config) ->
ok = gen_tcp:close(L),
ok = inet:setopts(Client, [{linger, {true, 0}}]),
ok = gen_tcp:close(Client),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
ok = receive Msg -> {unexpected_msg, Msg} after 0 -> ok end,
ok = inet:setopts(S, [{active, once}]),
receive
@@ -1158,14 +1118,14 @@ show_econnreset_active_once(Config) when is_list(Config) ->
{tcp_closed, S} ->
ok;
Other1 ->
- ?t:fail({unexpected1, Other1})
+ ct:fail({unexpected1, Other1})
after 1 ->
- ?t:fail({timeout, {server, no_tcp_closed}})
+ ct:fail({timeout, {server, no_tcp_closed}})
end;
Other2 ->
- ?t:fail({unexpected2, Other2})
+ ct:fail({unexpected2, Other2})
after 1000 ->
- ?t:fail({timeout, {server, no_tcp_error}})
+ ct:fail({timeout, {server, no_tcp_error}})
end.
show_econnreset_passive(Config) when is_list(Config) ->
@@ -1177,7 +1137,7 @@ show_econnreset_passive(Config) when is_list(Config) ->
ok = gen_tcp:close(L),
ok = inet:setopts(S, [{linger, {true, 0}}]),
ok = gen_tcp:close(S),
- ok = ?t:sleep(1),
+ ok = ct:sleep(1),
{error, closed} = gen_tcp:recv(Client, 0),
%% Now test with option switched on.
@@ -1190,7 +1150,7 @@ show_econnreset_passive(Config) when is_list(Config) ->
ok = gen_tcp:close(L1),
ok = inet:setopts(S1, [{linger, {true, 0}}]),
ok = gen_tcp:close(S1),
- ok = ?t:sleep(1),
+ ok = ct:sleep(1),
{error, econnreset} = gen_tcp:recv(Client1, 0).
econnreset_after_sync_send(Config) when is_list(Config) ->
@@ -1202,7 +1162,7 @@ econnreset_after_sync_send(Config) when is_list(Config) ->
ok = gen_tcp:close(L),
ok = inet:setopts(S, [{linger, {true, 0}}]),
ok = gen_tcp:close(S),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
{error, closed} = gen_tcp:send(Client, "Whatever"),
%% Now test with option switched on.
@@ -1215,7 +1175,7 @@ econnreset_after_sync_send(Config) when is_list(Config) ->
ok = gen_tcp:close(L1),
ok = inet:setopts(S1, [{linger, {true, 0}}]),
ok = gen_tcp:close(S1),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
{error, econnreset} = gen_tcp:send(Client1, "Whatever").
econnreset_after_async_send_active(Config) when is_list(Config) ->
@@ -1232,23 +1192,23 @@ econnreset_after_async_send_active(Config) when is_list(Config) ->
case erlang:port_info(Client, queue_size) of
{queue_size, N} when N > 0 -> ok;
{queue_size, 0} when OS =:= win32 -> ok;
- {queue_size, 0} = T -> ?t:fail(T)
+ {queue_size, 0} = T -> ct:fail(T)
end,
ok = gen_tcp:send(S, "Whatever"),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
ok = inet:setopts(S, [{linger, {true, 0}}]),
ok = gen_tcp:close(S),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
receive
{tcp, Client, "Whatever"} ->
receive
{tcp_closed, Client} ->
ok;
Other1 ->
- ?t:fail({unexpected1, Other1})
+ ct:fail({unexpected1, Other1})
end;
Other2 ->
- ?t:fail({unexpected2, Other2})
+ ct:fail({unexpected2, Other2})
end,
%% Now test with option switched on.
@@ -1263,13 +1223,13 @@ econnreset_after_async_send_active(Config) when is_list(Config) ->
case erlang:port_info(Client1, queue_size) of
{queue_size, N1} when N1 > 0 -> ok;
{queue_size, 0} when OS =:= win32 -> ok;
- {queue_size, 0} = T1 -> ?t:fail(T1)
+ {queue_size, 0} = T1 -> ct:fail(T1)
end,
ok = gen_tcp:send(S1, "Whatever"),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
ok = inet:setopts(S1, [{linger, {true, 0}}]),
ok = gen_tcp:close(S1),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
receive
{tcp, Client1, "Whatever"} ->
receive
@@ -1278,13 +1238,13 @@ econnreset_after_async_send_active(Config) when is_list(Config) ->
{tcp_closed, Client1} ->
ok;
Other3 ->
- ?t:fail({unexpected3, Other3})
+ ct:fail({unexpected3, Other3})
end;
Other4 ->
- ?t:fail({unexpected4, Other4})
+ ct:fail({unexpected4, Other4})
end;
Other5 ->
- ?t:fail({unexpected5, Other5})
+ ct:fail({unexpected5, Other5})
end.
econnreset_after_async_send_active_once(Config) when is_list(Config) ->
@@ -1302,13 +1262,13 @@ econnreset_after_async_send_active_once(Config) when is_list(Config) ->
case erlang:port_info(Client, queue_size) of
{queue_size, N} when N > 0 -> ok;
{queue_size, 0} when OS =:= win32 -> ok;
- {queue_size, 0} = T -> ?t:fail(T)
+ {queue_size, 0} = T -> ct:fail(T)
end,
ok = gen_tcp:send(S, "Whatever"),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
ok = inet:setopts(S, [{linger, {true, 0}}]),
ok = gen_tcp:close(S),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
ok = receive Msg -> {unexpected_msg, Msg} after 0 -> ok end,
ok = inet:setopts(Client, [{active, once}]),
receive
@@ -1317,10 +1277,10 @@ econnreset_after_async_send_active_once(Config) when is_list(Config) ->
{tcp_closed, Client} ->
ok;
Other ->
- ?t:fail({unexpected1, Other})
+ ct:fail({unexpected1, Other})
end;
Other ->
- ?t:fail({unexpected2, Other})
+ ct:fail({unexpected2, Other})
end.
econnreset_after_async_send_passive(Config) when is_list(Config) ->
@@ -1341,10 +1301,10 @@ econnreset_after_async_send_passive(Config) when is_list(Config) ->
case erlang:port_info(Client, queue_size) of
{queue_size, N} when N > 0 -> ok;
{queue_size, 0} when OS =:= win32 -> ok;
- {queue_size, 0} = T -> ?t:fail(T)
+ {queue_size, 0} = T -> ct:fail(T)
end,
ok = gen_tcp:close(S),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
{error, closed} = gen_tcp:recv(Client, 0),
%% Now test with option switched on.
@@ -1360,7 +1320,7 @@ econnreset_after_async_send_passive(Config) when is_list(Config) ->
ok = gen_tcp:send(S1, "Whatever"),
ok = gen_tcp:send(Client1, Payload),
ok = gen_tcp:close(S1),
- ok = ?t:sleep(20),
+ ok = ct:sleep(20),
{error, econnreset} = gen_tcp:recv(Client1, 0).
%%
@@ -1387,11 +1347,11 @@ linger_zero(Config) when is_list(Config) ->
case erlang:port_info(Client, queue_size) of
{queue_size, N} when N > 0 -> ok;
{queue_size, 0} when OS =:= win32 -> ok;
- {queue_size, 0} = T -> ?t:fail(T)
+ {queue_size, 0} = T -> ct:fail(T)
end,
ok = inet:setopts(Client, [{linger, {true, 0}}]),
ok = gen_tcp:close(Client),
- ok = ?t:sleep(1),
+ ok = ct:sleep(1),
undefined = erlang:port_info(Client, connected),
{error, econnreset} = gen_tcp:recv(S, PayloadSize).
@@ -1466,7 +1426,7 @@ busy_send_loop(Server, Client, N) ->
busy_send_2(Server, Client, N+1)
after 10000 ->
%% If this happens, see busy_send_srv
- ?t:fail({timeout,{server,not_send,flush([])}})
+ ct:fail({timeout,{server,not_send,flush([])}})
end
end.
@@ -1477,7 +1437,7 @@ busy_send_2(Server, Client, _N) ->
{Server,[closed]} ->
receive {Client,[0,{error,closed}]} -> ok end
after 10000 ->
- ?t:fail({timeout,{server,not_closed,flush([])}})
+ ct:fail({timeout,{server,not_closed,flush([])}})
end.
busy_send_srv(L, Master, Msg) ->
@@ -1567,7 +1527,7 @@ busy_disconnect_active_send(S, Data) ->
{error,closed} ->
receive
{tcp_closed,S} -> ok;
- _Other -> ?t:fail()
+ _Other -> ct:fail(failed)
end
end.
@@ -1646,7 +1606,7 @@ fill_sendq_loop(Server, Client, Reader) ->
("Got reader closed.~n"),
ok
after 3000 ->
- ?t:fail({timeout,{closed,reader}})
+ ct:fail({timeout,{closed,reader}})
end;
{Reader,[{error,closed}]} ->
io:format("Got reader closed.~n"),
@@ -1654,10 +1614,10 @@ fill_sendq_loop(Server, Client, Reader) ->
io:format("Got server closed~n"),
ok
after 3000 ->
- ?t:fail({timeout,{closed,server}})
+ ct:fail({timeout,{closed,server}})
end
after 3000 ->
- ?t:fail({timeout,{closed,[server,reader]}})
+ ct:fail({timeout,{closed,[server,reader]}})
end
end.
@@ -1865,7 +1825,7 @@ test_prio_accept_async() ->
spawn(?MODULE,priority_server,[{self(),Ref}]),
Port = receive
{Ref,P} -> P
- after 5000 -> ?t:fail({error,"helper process timeout"})
+ after 5000 -> ct:fail({error,"helper process timeout"})
end,
receive
after 3000 -> ok
@@ -1879,15 +1839,15 @@ test_prio_accept_async() ->
{Ref,{ok,[{priority,4},{tos,Tos1}]}} ->
ok;
{Ref,Error} ->
- ?t:fail({missmatch,Error})
- after 5000 -> ?t:fail({error,"helper process timeout"})
+ ct:fail({missmatch,Error})
+ after 5000 -> ct:fail({error,"helper process timeout"})
end,
receive
{Ref,{ok,[{priority,4},{tos,Tos1}]}} ->
ok;
{Ref,Error2} ->
- ?t:fail({missmatch,Error2})
- after 5000 -> ?t:fail({error,"helper process timeout"})
+ ct:fail({missmatch,Error2})
+ after 5000 -> ct:fail({error,"helper process timeout"})
end,
{ok,[{priority,4},{tos,Tos2}]} = inet:getopts(Sock2,[priority,tos]),
@@ -1909,10 +1869,6 @@ priority_server({Parent,Ref}) ->
test_prio_fail() ->
{ok,L} = gen_tcp:listen(0, [{active,false}]),
{error,_} = inet:setopts(L,[{priority,1000}]),
-% This error could only happen in linux kernels earlier than 2.6.24.4
-% Privilege check is now disabled and IP_TOS can never fail (only silently
-% be masked).
-% {error,_} = inet:setopts(L,[{tos,6 bsl 5}]),
gen_tcp:close(L),
ok.
@@ -1924,10 +1880,7 @@ test_prio_udp() ->
gen_udp:close(S),
ok.
-so_priority(doc) ->
- ["Tests the so_priority and ip_tos options on sockets when applicable."];
-so_priority(suite) ->
- [];
+%% Tests the so_priority and ip_tos options on sockets when applicable.
so_priority(Config) when is_list(Config) ->
{ok,L} = gen_tcp:listen(0, [{active,false}]),
ok = inet:setopts(L,[{priority,1}]),
@@ -1947,7 +1900,7 @@ so_priority(Config) when is_list(Config) ->
{unix,linux} ->
case os:version() of
{X,Y,_} when (X > 2) or ((X =:= 2) and (Y >= 4)) ->
- ?t:fail({error,
+ ct:fail({error,
"so_priority should work on this "
"OS, but does not"});
_ ->
@@ -2006,10 +1959,7 @@ mktmofun(Tmo,Parent,LS) ->
fun() -> Parent ! {accepted,self(), catch gen_tcp:accept(LS,Tmo)} end.
%% Accept tests
-primitive_accept(suite) ->
- [];
-primitive_accept(doc) ->
- ["Test singular accept"];
+%% Test singular accept.
primitive_accept(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
{ok,PortNo}=inet:port(LS),
@@ -2027,10 +1977,7 @@ primitive_accept(Config) when is_list(Config) ->
end.
-multi_accept_close_listen(suite) ->
- [];
-multi_accept_close_listen(doc) ->
- ["Closing listen socket when multi-accepting"];
+%% Closing listen socket when multi-accepting.
multi_accept_close_listen(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2043,10 +1990,7 @@ multi_accept_close_listen(Config) when is_list(Config) ->
ok = ?EXPECT_ACCEPTS([{_,{error,closed}},{_,{error,closed}},
{_,{error,closed}},{_,{error,closed}}],4,500).
-accept_timeout(suite) ->
- [];
-accept_timeout(doc) ->
- ["Single accept with timeout"];
+%% Single accept with timeout.
accept_timeout(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2054,10 +1998,7 @@ accept_timeout(Config) when is_list(Config) ->
P = spawn(F),
ok = ?EXPECT_ACCEPTS([{P,{error,timeout}}],1,2000).
-accept_timeouts_in_order(suite) ->
- [];
-accept_timeouts_in_order(doc) ->
- ["Check that multi-accept timeouts happen in the correct order"];
+%% Check that multi-accept timeouts happen in the correct order.
accept_timeouts_in_order(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2068,10 +2009,7 @@ accept_timeouts_in_order(Config) when is_list(Config) ->
ok = ?EXPECT_ACCEPTS([{P1,{error,timeout}},{P2,{error,timeout}},
{P3,{error,timeout}},{P4,{error,timeout}}],infinity,2000).
-accept_timeouts_in_order2(suite) ->
- [];
-accept_timeouts_in_order2(doc) ->
- ["Check that multi-accept timeouts happen in the correct order (more)"];
+%% Check that multi-accept timeouts happen in the correct order (more).
accept_timeouts_in_order2(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2082,10 +2020,7 @@ accept_timeouts_in_order2(Config) when is_list(Config) ->
ok = ?EXPECT_ACCEPTS([{P4,{error,timeout}},{P3,{error,timeout}},
{P2,{error,timeout}},{P1,{error,timeout}}],infinity,2000).
-accept_timeouts_in_order3(suite) ->
- [];
-accept_timeouts_in_order3(doc) ->
- ["Check that multi-accept timeouts happen in the correct order (even more)"];
+%% Check that multi-accept timeouts happen in the correct order (even more).
accept_timeouts_in_order3(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2096,11 +2031,8 @@ accept_timeouts_in_order3(Config) when is_list(Config) ->
ok = ?EXPECT_ACCEPTS([{P4,{error,timeout}},{P1,{error,timeout}},
{P3,{error,timeout}},{P2,{error,timeout}}],infinity,2000).
-accept_timeouts_in_order4(suite) ->
- [];
-accept_timeouts_in_order4(doc) ->
- ["Check that multi-accept timeouts happen in the correct order after "
- "mixing millsec and sec timeouts"];
+%% Check that multi-accept timeouts happen in the correct order after
+%% mixing millsec and sec timeouts.
accept_timeouts_in_order4(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2111,11 +2043,8 @@ accept_timeouts_in_order4(Config) when is_list(Config) ->
ok = ?EXPECT_ACCEPTS([{P1,{error,timeout}},{P2,{error,timeout}},
{P4,{error,timeout}},{P3,{error,timeout}}],infinity,2000).
-accept_timeouts_in_order5(suite) ->
- [];
-accept_timeouts_in_order5(doc) ->
- ["Check that multi-accept timeouts happen in the correct order after "
- "mixing millsec and sec timeouts (more)"];
+%% Check that multi-accept timeouts happen in the correct order after
+%% mixing millsec and sec timeouts (more).
accept_timeouts_in_order5(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2126,11 +2055,8 @@ accept_timeouts_in_order5(Config) when is_list(Config) ->
ok = ?EXPECT_ACCEPTS([{P4,{error,timeout}},{P1,{error,timeout}},
{P3,{error,timeout}},{P2,{error,timeout}}],infinity,2000).
-accept_timeouts_in_order6(suite) ->
- [];
-accept_timeouts_in_order6(doc) ->
- ["Check that multi-accept timeouts happen in the correct order after "
- "mixing millsec and sec timeouts (even more)"];
+%% Check that multi-accept timeouts happen in the correct order after
+%% mixing millsec and sec timeouts (even more).
accept_timeouts_in_order6(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2141,11 +2067,8 @@ accept_timeouts_in_order6(Config) when is_list(Config) ->
ok = ?EXPECT_ACCEPTS([{P4,{error,timeout}},{P2,{error,timeout}},
{P3,{error,timeout}},{P1,{error,timeout}}],infinity,2000).
-accept_timeouts_in_order7(suite) ->
- [];
-accept_timeouts_in_order7(doc) ->
- ["Check that multi-accept timeouts happen in the correct order after "
- "mixing millsec and sec timeouts (even more++)"];
+%% Check that multi-accept timeouts happen in the correct order after
+%% mixing millsec and sec timeouts (even more++).
accept_timeouts_in_order7(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2162,10 +2085,7 @@ accept_timeouts_in_order7(Config) when is_list(Config) ->
{P1,{error,timeout}},{P3,{error,timeout}},
{P8,{error,timeout}},{P7,{error,timeout}}],infinity,2000).
-accept_timeouts_mixed(suite) ->
- [];
-accept_timeouts_mixed(doc) ->
- ["Check that multi-accept timeouts behave correctly when mixed with successful timeouts"];
+%% Check that multi-accept timeouts behave correctly when mixed with successful timeouts.
accept_timeouts_mixed(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2185,10 +2105,7 @@ accept_timeouts_mixed(Config) when is_list(Config) ->
gen_tcp:connect("localhost",PortNo,[]),
ok = ?EXPECT_ACCEPTS([{P4,{ok,Port1}}] when is_port(Port1),infinity,100).
-killing_acceptor(suite) ->
- [];
-killing_acceptor(doc) ->
- ["Check that single acceptor behaves as expected when killed"];
+%% Check that single acceptor behaves as expected when killed.
killing_acceptor(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Pid = spawn(fun() -> erlang:display({accepted,self(),gen_tcp:accept(LS)}) end),
@@ -2203,10 +2120,7 @@ killing_acceptor(Config) when is_list(Config) ->
false = lists:member(accepting, L2),
ok.
-killing_multi_acceptors(suite) ->
- [];
-killing_multi_acceptors(doc) ->
- ["Check that multi acceptors behaves as expected when killed"];
+%% Check that multi acceptors behaves as expected when killed.
killing_multi_acceptors(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2228,10 +2142,7 @@ killing_multi_acceptors(Config) when is_list(Config) ->
false = lists:member(accepting, L3),
ok.
-killing_multi_acceptors2(suite) ->
- [];
-killing_multi_acceptors2(doc) ->
- ["Check that multi acceptors behaves as expected when killed (more)"];
+%% Check that multi acceptors behaves as expected when killed (more).
killing_multi_acceptors2(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2265,11 +2176,8 @@ killing_multi_acceptors2(Config) when is_list(Config) ->
false = lists:member(accepting, L5),
ok.
-several_accepts_in_one_go(suite) ->
- [];
-several_accepts_in_one_go(doc) ->
- ["checks that multi-accept works when more than one accept can be "
- "done at once (wb test of inet_driver)"];
+%% Checks that multi-accept works when more than one accept can be
+%% done at once (wb test of inet_driver).
several_accepts_in_one_go(Config) when is_list(Config) ->
{ok,LS}=gen_tcp:listen(0,[]),
Parent = self(),
@@ -2312,11 +2220,8 @@ wait_until_accepting(Proc,N) ->
end.
-accept_system_limit(suite) ->
- [];
-accept_system_limit(doc) ->
- ["Check that accept returns {error, system_limit} "
- "(and not {error, enfile}) when running out of ports"];
+%% Check that accept returns {error, system_limit}
+%% (and not {error, enfile}) when running out of ports.
accept_system_limit(Config) when is_list(Config) ->
{ok, LS} = gen_tcp:listen(0, []),
{ok, TcpPort} = inet:port(LS),
@@ -2365,10 +2270,7 @@ open_ports(L) ->
end.
-active_once_closed(suite) ->
- [];
-active_once_closed(doc) ->
- ["Check that active once and tcp_close messages behave as expected"];
+%% Check that active once and tcp_close messages behave as expected.
active_once_closed(Config) when is_list(Config) ->
(fun() ->
{Loop,A} = setup_closed_ao(),
@@ -2416,75 +2318,84 @@ active_once_closed(Config) when is_list(Config) ->
ok = receive {tcp_closed, A} -> ok after 1000 -> error end
end)().
-send_timeout(suite) ->
- [];
-send_timeout(doc) ->
- ["Test the send_timeout socket option"];
+%% Test the send_timeout socket option.
send_timeout(Config) when is_list(Config) ->
+ Dir = filename:dirname(code:which(?MODULE)),
+ {ok,RNode} = test_server:start_node(?UNIQ_NODE_NAME, slave,
+ [{args,"-pa " ++ Dir}]),
+
%% Basic
- BasicFun =
- fun(AutoClose) ->
- {Loop,A,RNode} = setup_timeout_sink(1000, AutoClose),
- {error,timeout} =
- Loop(fun() ->
- Res = gen_tcp:send(A,<<1:10000>>),
- %%erlang:display(Res),
- Res
- end),
- %% Check that the socket is not busy/closed...
- Error = after_send_timeout(AutoClose),
- {error,Error} = gen_tcp:send(A,<<"Hej">>),
- test_server:stop_node(RNode)
- end,
- BasicFun(false),
- BasicFun(true),
- %% Check timeout length
+ send_timeout_basic(false, RNode),
+ send_timeout_basic(true, RNode),
+
+ BinData = <<1:10000>>,
+
+ %% Check timeout length.
Self = self(),
Pid = spawn(fun() ->
- {Loop,A,RNode} = setup_timeout_sink(1000, true),
- {error,timeout} = Loop(fun() ->
- Res = gen_tcp:send(A,<<1:10000>>),
- %%erlang:display(Res),
- Self ! Res,
- Res
- end),
- test_server:stop_node(RNode)
+ A = setup_timeout_sink(RNode, 1000, true),
+ Send = fun() ->
+ Res = gen_tcp:send(A, BinData),
+ Self ! Res,
+ Res
+ end,
+ {error,timeout} = timeout_sink_loop(Send)
end),
Diff = get_max_diff(),
io:format("Max time for send: ~p~n",[Diff]),
true = (Diff > 500) and (Diff < 1500),
- %% Let test_server slave die...
+
+ %% Wait for the process to die.
Mon = erlang:monitor(process, Pid),
receive {'DOWN',Mon,process,Pid,_} -> ok end,
+
%% Check that parallell writers do not hang forever
- ParaFun =
- fun(AutoClose) ->
- {Loop,A,RNode} = setup_timeout_sink(1000, AutoClose),
- SenderFun = fun() ->
- {error,Error} =
- Loop(fun() ->
- gen_tcp:send(A, <<1:10000>>)
- end),
- Self ! {error,Error}
- end,
- spawn_link(SenderFun),
- spawn_link(SenderFun),
- receive
- {error,timeout} -> ok
- after 10000 ->
- exit(timeout)
- end,
- NextErr = after_send_timeout(AutoClose),
- receive
- {error,NextErr} -> ok
- after 10000 ->
- exit(timeout)
- end,
- {error,NextErr} = gen_tcp:send(A,<<"Hej">>),
- test_server:stop_node(RNode)
- end,
- ParaFun(false),
- ParaFun(true),
+ send_timeout_para(false, RNode),
+ send_timeout_para(true, RNode),
+
+ test_server:stop_node(RNode),
+
+ ok.
+
+send_timeout_basic(AutoClose, RNode) ->
+ BinData = <<1:10000>>,
+
+ A = setup_timeout_sink(RNode, 1000, AutoClose),
+ Send = fun() -> gen_tcp:send(A, BinData) end,
+ {error,timeout} = timeout_sink_loop(Send),
+
+ %% Check that the socket is not busy/closed...
+ Error = after_send_timeout(AutoClose),
+ {error,Error} = gen_tcp:send(A, <<"Hej">>),
+ ok.
+
+send_timeout_para(AutoClose, RNode) ->
+ BinData = <<1:10000>>,
+
+ A = setup_timeout_sink(RNode, 1000, AutoClose),
+ Self = self(),
+ SenderFun = fun() ->
+ Send = fun() -> gen_tcp:send(A, BinData) end,
+ {error,Error} = timeout_sink_loop(Send),
+ Self ! {error,Error}
+ end,
+ spawn_link(SenderFun),
+ spawn_link(SenderFun),
+
+ receive
+ {error,timeout} -> ok
+ after 10000 ->
+ exit(timeout)
+ end,
+
+ NextErr = after_send_timeout(AutoClose),
+ receive
+ {error,NextErr} -> ok
+ after 10000 ->
+ exit(timeout)
+ end,
+
+ {error,NextErr} = gen_tcp:send(A, <<"Hej">>),
ok.
mad_sender(S) ->
@@ -2500,46 +2411,41 @@ mad_sender(S) ->
flush() ->
receive
_X ->
- %erlang:display(_X),
flush()
after 0 ->
ok
end.
-send_timeout_active(suite) ->
- [];
-send_timeout_active(doc) ->
- ["Test the send_timeout socket option for active sockets"];
+%% Test the send_timeout socket option for active sockets.
send_timeout_active(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(20)),
- %% Basic
- BasicFun =
- fun(AutoClose) ->
- {Loop,A,RNode,C} = setup_active_timeout_sink(1, AutoClose),
- inet:setopts(A, [{active, once}]),
- Mad = spawn_link(RNode,fun() -> mad_sender(C) end),
- {error,timeout} =
- Loop(fun() ->
- receive
- {tcp, _Sock, _Data} ->
- inet:setopts(A, [{active, once}]),
- Res = gen_tcp:send(A,lists:duplicate(1000, $a)),
- %erlang:display(Res),
- Res;
- Err ->
- io:format("sock closed: ~p~n", [Err]),
- Err
- end
- end),
- unlink(Mad),
- exit(Mad,kill),
- test_server:stop_node(RNode)
+ Dir = filename:dirname(code:which(?MODULE)),
+ {ok,RNode} = test_server:start_node(?UNIQ_NODE_NAME, slave,
+ [{args,"-pa " ++ Dir}]),
+ do_send_timeout_active(false, RNode),
+ do_send_timeout_active(true, RNode),
+ test_server:stop_node(RNode),
+ ok.
+
+do_send_timeout_active(AutoClose, RNode) ->
+ {A,C} = setup_active_timeout_sink(RNode, 1, AutoClose),
+ inet:setopts(A, [{active, once}]),
+ Mad = spawn_link(RNode, fun() -> mad_sender(C) end),
+ ListData = lists:duplicate(1000, $a),
+ F = fun() ->
+ receive
+ {tcp, _Sock, _Data} ->
+ inet:setopts(A, [{active, once}]),
+ Res = gen_tcp:send(A, ListData),
+ Res;
+ Err ->
+ io:format("sock closed: ~p~n", [Err]),
+ Err
+ end
end,
- BasicFun(false),
- flush(),
- BasicFun(true),
+ {error,timeout} = timeout_sink_loop(F),
+ unlink(Mad),
+ exit(Mad, kill),
flush(),
- test_server:timetrap_cancel(Dog),
ok.
after_send_timeout(AutoClose) ->
@@ -2581,9 +2487,9 @@ get_max_diff(Max) ->
setup_closed_ao() ->
Dir = filename:dirname(code:which(?MODULE)),
- {ok,R} = test_server:start_node(test_default_options_slave,slave,
+ {ok,R} = test_server:start_node(?UNIQ_NODE_NAME, slave,
[{args,"-pa " ++ Dir}]),
- Host = list_to_atom(lists:nth(2,string:tokens(atom_to_list(node()),"@"))),
+ Host = get_hostname(node()),
{ok, L} = gen_tcp:listen(0, [{active,false},{packet,2}]),
Fun = fun(F) ->
receive
@@ -2622,11 +2528,8 @@ setup_closed_ao() ->
test_server:stop_node(R),
{Loop,A}.
-setup_timeout_sink(Timeout, AutoClose) ->
- Dir = filename:dirname(code:which(?MODULE)),
- {ok,R} = test_server:start_node(test_default_options_slave,slave,
- [{args,"-pa " ++ Dir}]),
- Host = list_to_atom(lists:nth(2,string:tokens(atom_to_list(node()),"@"))),
+setup_timeout_sink(RNode, Timeout, AutoClose) ->
+ Host = get_hostname(node()),
{ok, L} = gen_tcp:listen(0, [{active,false},{packet,2},
{send_timeout,Timeout},
{send_timeout_close,AutoClose}]),
@@ -2637,7 +2540,7 @@ setup_timeout_sink(Timeout, AutoClose) ->
die -> ok
end
end,
- Pid = rpc:call(R,erlang,spawn,[fun() -> Fun(Fun) end]),
+ Pid = rpc:call(RNode, erlang, spawn, [fun() -> Fun(Fun) end]),
{ok, Port} = inet:port(L),
Remote = fun(Fu) ->
Pid ! {self(), Fu},
@@ -2651,36 +2554,23 @@ setup_timeout_sink(Timeout, AutoClose) ->
{ok,A} = gen_tcp:accept(L),
gen_tcp:send(A,"Hello"),
{ok, "Hello"} = Remote(fun() -> gen_tcp:recv(C,0) end),
- Loop2 = fun(_,_,0) ->
- {failure, timeout};
- (L2,F2,N) ->
- Ret = F2(),
- io:format("~p~n",[Ret]),
- case Ret of
- ok -> receive after 1 -> ok end,
- L2(L2,F2,N-1);
- Other -> Other
- end
- end,
- Loop = fun(F3) -> Loop2(Loop2,F3,1000) end,
- {Loop,A,R}.
-
-setup_active_timeout_sink(Timeout, AutoClose) ->
- Dir = filename:dirname(code:which(?MODULE)),
- {ok,R} = test_server:start_node(test_default_options_slave,slave,
- [{args,"-pa " ++ Dir}]),
- Host = list_to_atom(lists:nth(2,string:tokens(atom_to_list(node()),"@"))),
- {ok, L} = gen_tcp:listen(0, [binary,{active,false},{packet,0},{nodelay, true},{keepalive, true},
- {send_timeout,Timeout},
- {send_timeout_close,AutoClose}]),
+ A.
+
+setup_active_timeout_sink(RNode, Timeout, AutoClose) ->
+ Host = get_hostname(node()),
+ ListenOpts = [binary,{active,false},{packet,0},
+ {nodelay,true},{keepalive,true},
+ {send_timeout,Timeout},{send_timeout_close,AutoClose}],
+ {ok, L} = gen_tcp:listen(0, ListenOpts),
Fun = fun(F) ->
receive
{From,X} when is_function(X) ->
- From ! {self(),X()}, F(F);
+ From ! {self(),X()},
+ F(F);
die -> ok
end
end,
- Pid = rpc:call(R,erlang,spawn,[fun() -> Fun(Fun) end]),
+ Pid = rpc:call(RNode, erlang, spawn, [fun() -> Fun(Fun) end]),
{ok, Port} = inet:port(L),
Remote = fun(Fu) ->
Pid ! {self(), Fu},
@@ -2688,26 +2578,22 @@ setup_active_timeout_sink(Timeout, AutoClose) ->
end
end,
{ok, C} = Remote(fun() ->
- gen_tcp:connect(Host,Port,
- [{active,false}])
+ gen_tcp:connect(Host, Port, [{active,false}])
end),
{ok,A} = gen_tcp:accept(L),
- gen_tcp:send(A,"Hello"),
- {ok, "H"++_} = Remote(fun() -> gen_tcp:recv(C,0) end),
- Loop2 = fun(_,_,0) ->
- {failure, timeout};
- (L2,F2,N) ->
- Ret = F2(),
- io:format("~p~n",[Ret]),
- case Ret of
- ok -> receive after 1 -> ok end,
- L2(L2,F2,N-1);
- Other -> Other
- end
- end,
- Loop = fun(F3) -> Loop2(Loop2,F3,1000) end,
- {Loop,A,R,C}.
+ gen_tcp:send(A, "Hello"),
+ {ok, "H"++_} = Remote(fun() -> gen_tcp:recv(C, 0) end),
+ {A,C}.
+timeout_sink_loop(Action) ->
+ Ret = Action(),
+ case Ret of
+ ok ->
+ receive after 1 -> ok end,
+ timeout_sink_loop(Action);
+ Other ->
+ Other
+ end.
has_superfluous_schedulers() ->
case {erlang:system_info(schedulers),
@@ -2718,10 +2604,8 @@ has_superfluous_schedulers() ->
end.
-otp_7731(suite) -> [];
-otp_7731(doc) ->
- "Leaking message from inet_drv {inet_reply,P,ok} "
- "when a socket sending resumes working after a send_timeout";
+%% Leaking message from inet_drv {inet_reply,P,ok}
+%% when a socket sending resumes working after a send_timeout.
otp_7731(Config) when is_list(Config) ->
ServerPid = spawn_link(?MODULE, otp_7731_server, [self()]),
receive {ServerPid, ready, PortNum} -> ok end,
@@ -2738,7 +2622,7 @@ otp_7731(Config) when is_list(Config) ->
%% Now make sure inet_drv does not leak any internal messages.
receive Msg ->
- test_server:fail({unexpected, Msg})
+ ct:fail({unexpected, Msg})
after 1000 ->
ok
end,
@@ -2791,8 +2675,7 @@ otp_7731_recv(Socket) ->
%% OTP-7615: TCP-ports hanging in CLOSING state when sending large
%% buffer followed by a recv() that returns error due to closed
%% connection.
-zombie_sockets(suite) -> [];
-zombie_sockets(doc) -> ["OTP-7615 Leaking closed ports."];
+%% OTP-7615 Leaking closed ports.
zombie_sockets(Config) when is_list(Config) ->
register(zombie_collector,self()),
Calls = 10,
@@ -2872,9 +2755,7 @@ zombie_serve_client(Socket, Bin) ->
gen_tcp:close(Socket),
zombie_collector ! {closed, Socket}.
-otp_7816(suite) -> [];
-otp_7816(doc) ->
- "Hanging send on windows when sending iolist with more than 16 binaries.";
+%% Hanging send on windows when sending iolist with more than 16 binaries.
otp_7816(Config) when is_list(Config) ->
Client = self(),
Server = spawn_link(fun()-> otp_7816_server(Client) end),
@@ -2963,8 +2844,7 @@ otp_7816_recv(CSocket, BytesLeft) ->
error
end.
-otp_8102(doc) -> ["Receive a packet with a faulty packet header"];
-otp_8102(suite) -> [];
+%% Receive a packet with a faulty packet header.
otp_8102(Config) when is_list(Config) ->
{ok, LSocket} = gen_tcp:listen(0, []),
{ok, {_, PortNum}} = inet:sockname(LSocket),
@@ -3004,8 +2884,7 @@ otp_8102_do(LSocket, PortNum, {Bin,PType}) ->
gen_tcp:close(SSocket),
gen_tcp:close(RSocket).
-otp_9389(doc) -> ["Verify packet_size handles long HTTP header lines"];
-otp_9389(suite) -> [];
+%% Verify packet_size handles long HTTP header lines.
otp_9389(Config) when is_list(Config) ->
{ok, LS} = gen_tcp:listen(0, [{active,false}]),
{ok, {_, PortNum}} = inet:sockname(LS),
@@ -3064,10 +2943,10 @@ otp_9389_loop(S, OrigLinkHdr, State) ->
error({timeout,header})
end.
-wrapping_oct(doc) ->
- "Check that 64bit octet counters work.";
-wrapping_oct(suite) ->
- [];
+wrapping_oct() ->
+ [{timetrap,{minutes,10}}].
+
+%% Check that 64bit octet counters work.
wrapping_oct(Config) when is_list(Config) ->
{ok,Sock} = gen_tcp:listen(0,[{active,false},{mode,binary}]),
{ok,Port} = inet:port(Sock),
@@ -3131,3 +3010,7 @@ oct_aloop(S,X,Times) ->
end.
ok({ok,V}) -> V.
+
+get_hostname(Name) ->
+ "@"++Host = lists:dropwhile(fun(C) -> C =/= $@ end, atom_to_list(Name)),
+ Host.
diff --git a/lib/kernel/test/gen_udp_SUITE.erl b/lib/kernel/test/gen_udp_SUITE.erl
index 8d8c953303..1029d7ef0a 100644
--- a/lib/kernel/test/gen_udp_SUITE.erl
+++ b/lib/kernel/test/gen_udp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -17,17 +17,16 @@
%%
%% %CopyrightEnd%
%%
-%
-% test the behavior of gen_udp. Testing udp is really a very unfunny task,
-% because udp is not deterministic.
-%
--module(gen_udp_SUITE).
--include_lib("test_server/include/test_server.hrl").
+%%
+%% Test the behavior of gen_udp. Testing udp is really a very unfunny task,
+%% because udp is not deterministic.
+%%
+-module(gen_udp_SUITE).
+-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(1)).
-% XXX - we should pick a port that we _know_ is closed. That's pretty hard.
+%% XXX - we should pick a port that we _know_ is closed. That's pretty hard.
-define(CLOSED_PORT, 6666).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -36,17 +35,24 @@
-export([send_to_closed/1, active_n/1,
buffer_size/1, binary_passive_recv/1, bad_address/1,
- read_packets/1, open_fd/1, connect/1, implicit_inet6/1]).
+ read_packets/1, open_fd/1, connect/1, implicit_inet6/1,
+ local_basic/1, local_unbound/1,
+ local_fdopen/1, local_fdopen_unbound/1, local_abstract/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[send_to_closed, buffer_size, binary_passive_recv,
bad_address, read_packets, open_fd, connect,
- implicit_inet6, active_n].
+ implicit_inet6, active_n,
+ {group, local}].
groups() ->
- [].
+ [{local, [],
+ [local_basic, local_unbound,
+ local_fdopen, local_fdopen_unbound, local_abstract]}].
init_per_suite(Config) ->
Config.
@@ -54,36 +60,40 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
ok.
+init_per_group(local, Config) ->
+ case gen_udp:open(0, [local]) of
+ {ok,S} ->
+ ok = gen_udp:close(S),
+ Config;
+ {error,eafnosupport} ->
+ {skip, "AF_LOCAL not supported"}
+ end;
init_per_group(_GroupName, Config) ->
Config.
+end_per_group(local, _Config) ->
+ delete_local_filenames();
end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
%%-------------------------------------------------------------
%% Send two packets to a closed port (on some systems this causes the socket
%% to be closed).
-send_to_closed(doc) ->
- ["Tests core functionality."];
-send_to_closed(suite) ->
- [];
+%% Tests core functionality.
send_to_closed(Config) when is_list(Config) ->
- ?line {ok, Sock} = gen_udp:open(0),
- ?line ok = gen_udp:send(Sock, {127,0,0,1}, ?CLOSED_PORT, "foo"),
+ {ok, Sock} = gen_udp:open(0),
+ ok = gen_udp:send(Sock, {127,0,0,1}, ?CLOSED_PORT, "foo"),
timer:sleep(2),
- ?line ok = gen_udp:send(Sock, {127,0,0,1}, ?CLOSED_PORT, "foo"),
- ?line ok = gen_udp:close(Sock),
+ ok = gen_udp:send(Sock, {127,0,0,1}, ?CLOSED_PORT, "foo"),
+ ok = gen_udp:close(Sock),
ok.
@@ -91,19 +101,16 @@ send_to_closed(Config) when is_list(Config) ->
%%-------------------------------------------------------------
%% Test that the UDP socket buffer sizes are settable
-buffer_size(suite) ->
- [];
-buffer_size(doc) ->
- ["Test UDP buffer size setting."];
+%% Test UDP buffer size setting.
buffer_size(Config) when is_list(Config) ->
- ?line Len = 256,
- ?line Bin = list_to_binary(lists:seq(0, Len-1)),
- ?line M = 8192 div Len,
- ?line Spec0 =
+ Len = 256,
+ Bin = list_to_binary(lists:seq(0, Len-1)),
+ M = 8192 div Len,
+ Spec0 =
[{opt,M},{safe,M-3},{long,M+1},
{opt,2*M},{safe,2*M-3},{long,2*M+1},
{opt,4*M},{safe,4*M-3},{long,4*M+1}],
- ?line Spec =
+ Spec =
[case Tag of
opt ->
[{recbuf,Val*Len},{sndbuf,(Val + 2)*Len}];
@@ -115,12 +122,12 @@ buffer_size(Config) when is_list(Config) ->
[truncated,emsgsize,timeout]}
end || {Tag,Val} <- Spec0],
%%
- ?line {ok, ClientSocket} = gen_udp:open(0, [binary]),
- ?line {ok, ClientPort} = inet:port(ClientSocket),
- ?line Client = self(),
- ?line ClientIP = {127,0,0,1},
- ?line ServerIP = {127,0,0,1},
- ?line Server =
+ {ok, ClientSocket} = gen_udp:open(0, [binary]),
+ {ok, ClientPort} = inet:port(ClientSocket),
+ Client = self(),
+ ClientIP = {127,0,0,1},
+ ServerIP = {127,0,0,1},
+ Server =
spawn_link(
fun () ->
{ok, ServerSocket} = gen_udp:open(0, [binary]),
@@ -130,78 +137,77 @@ buffer_size(Config) when is_list(Config) ->
ServerSocket, 1, Spec),
ok = gen_udp:close(ServerSocket)
end),
- ?line Mref = erlang:monitor(process, Server),
- ?line receive
- {Server,port,ServerPort} ->
- ?line buffer_size_client(Server, ServerIP, ServerPort,
- ClientSocket, 1, Spec)
- end,
- ?line ok = gen_udp:close(ClientSocket),
- ?line receive
- {'DOWN',Mref,_,_,normal} ->
- ?line ok
- end.
+ Mref = erlang:monitor(process, Server),
+ receive
+ {Server,port,ServerPort} ->
+ buffer_size_client(Server, ServerIP, ServerPort,
+ ClientSocket, 1, Spec)
+ end,
+ ok = gen_udp:close(ClientSocket),
+ receive
+ {'DOWN',Mref,_,_,normal} ->
+ ok
+ end.
buffer_size_client(_, _, _, _, _, []) ->
- ?line ok;
+ ok;
buffer_size_client(Server, IP, Port,
Socket, Cnt, [Opts|T]) when is_list(Opts) ->
- ?line io:format("buffer_size_client Cnt=~w setopts ~p.~n", [Cnt,Opts]),
- ?line ok = inet:setopts(Socket, Opts),
- ?line Server ! {self(),setopts,Cnt},
- ?line receive {Server,setopts,Cnt} -> ok end,
- ?line buffer_size_client(Server, IP, Port, Socket, Cnt+1, T);
+ io:format("buffer_size_client Cnt=~w setopts ~p.~n", [Cnt,Opts]),
+ ok = inet:setopts(Socket, Opts),
+ Server ! {self(),setopts,Cnt},
+ receive {Server,setopts,Cnt} -> ok end,
+ buffer_size_client(Server, IP, Port, Socket, Cnt+1, T);
buffer_size_client(Server, IP, Port,
Socket, Cnt, [{B,Replies}|T]=Opts) when is_binary(B) ->
- ?line io:format(
- "buffer_size_client Cnt=~w send size ~w expecting ~p.~n",
- [Cnt,size(B),Replies]),
- ?line ok = gen_udp:send(Socket, IP, Port, <<Cnt,B/binary>>),
- ?line receive
- {Server,Cnt,Reply} ->
- ?line Tag =
- if
- is_tuple(Reply) ->
- element(1, Reply);
- is_atom(Reply) ->
- Reply
- end,
- ?line case lists:member(Tag, Replies) of
- true -> ok;
- false ->
- ?line
- ?t:fail({reply_mismatch,Cnt,Reply,Replies,
- byte_size(B),
- inet:getopts(Socket,
- [sndbuf,recbuf])})
- end,
- ?line buffer_size_client(Server, IP, Port, Socket, Cnt+1, T)
- after 1313 ->
- ?line buffer_size_client(Server, IP, Port, Socket, Cnt, Opts)
- end.
+ io:format(
+ "buffer_size_client Cnt=~w send size ~w expecting ~p.~n",
+ [Cnt,size(B),Replies]),
+ ok = gen_udp:send(Socket, IP, Port, <<Cnt,B/binary>>),
+ receive
+ {Server,Cnt,Reply} ->
+ Tag =
+ if
+ is_tuple(Reply) ->
+ element(1, Reply);
+ is_atom(Reply) ->
+ Reply
+ end,
+ case lists:member(Tag, Replies) of
+ true -> ok;
+ false ->
+ ct:fail({reply_mismatch,Cnt,Reply,Replies,
+ byte_size(B),
+ inet:getopts(Socket,
+ [sndbuf,recbuf])})
+ end,
+ buffer_size_client(Server, IP, Port, Socket, Cnt+1, T)
+ after 1313 ->
+ buffer_size_client(Server, IP, Port, Socket, Cnt, Opts)
+ end.
buffer_size_server(_, _, _, _, _, []) ->
ok;
buffer_size_server(Client, IP, Port,
Socket, Cnt, [Opts|T]) when is_list(Opts) ->
receive {Client,setopts,Cnt} -> ok end,
- ?line io:format("buffer_size_server Cnt=~w setopts ~p.~n", [Cnt,Opts]),
+ io:format("buffer_size_server Cnt=~w setopts ~p.~n", [Cnt,Opts]),
ok = inet:setopts(Socket, Opts),
Client ! {self(),setopts,Cnt},
buffer_size_server(Client, IP, Port, Socket, Cnt+1, T);
buffer_size_server(Client, IP, Port,
Socket, Cnt, [{B,_}|T]) when is_binary(B) ->
- ?line io:format(
- "buffer_size_server Cnt=~w expecting size ~w.~n",
- [Cnt,size(B)]),
+ io:format(
+ "buffer_size_server Cnt=~w expecting size ~w.~n",
+ [Cnt,size(B)]),
Client !
{self(),Cnt,
case buffer_size_server_recv(Socket, IP, Port, Cnt) of
D when is_binary(D) ->
SizeD = byte_size(D),
- ?line io:format(
- "buffer_size_server Cnt=~w received size ~w.~n",
- [Cnt,SizeD]),
+ io:format(
+ "buffer_size_server Cnt=~w received size ~w.~n",
+ [Cnt,SizeD]),
case B of
D ->
correct;
@@ -211,9 +217,9 @@ buffer_size_server(Client, IP, Port,
{unexpected,D}
end;
Error ->
- ?line io:format(
- "buffer_size_server Cnt=~w received error ~w.~n",
- [Cnt,Error]),
+ io:format(
+ "buffer_size_server Cnt=~w received error ~w.~n",
+ [Cnt,Error]),
Error
end},
buffer_size_server(Client, IP, Port, Socket, Cnt+1, T).
@@ -236,50 +242,44 @@ buffer_size_server_recv(Socket, IP, Port, Cnt) ->
%% OTP-3823 gen_udp:recv does not return address in binary mode
%%
-binary_passive_recv(suite) ->
- [];
-binary_passive_recv(doc) ->
- ["OTP-3823 gen_udp:recv does not return address in binary mode"];
+%% OTP-3823 gen_udp:recv does not return address in binary mode.
binary_passive_recv(Config) when is_list(Config) ->
- ?line D1 = "The quick brown fox jumps over a lazy dog",
- ?line D2 = list_to_binary(D1),
- ?line D3 = ["The quick", <<" brown ">>, "fox jumps ", <<"over ">>,
- <<>>, $a, [[], " lazy ", <<"dog">>]],
- ?line D2 = iolist_to_binary(D3),
- ?line B = D2,
- ?line {ok, R} = gen_udp:open(0, [binary, {active, false}]),
- ?line {ok, RP} = inet:port(R),
- ?line {ok, S} = gen_udp:open(0),
- ?line {ok, SP} = inet:port(S),
- ?line ok = gen_udp:send(S, localhost, RP, D1),
- ?line {ok, {{127, 0, 0, 1}, SP, B}} = gen_udp:recv(R, byte_size(B)+1),
- ?line ok = gen_udp:send(S, localhost, RP, D2),
- ?line {ok, {{127, 0, 0, 1}, SP, B}} = gen_udp:recv(R, byte_size(B)+1),
- ?line ok = gen_udp:send(S, localhost, RP, D3),
- ?line {ok, {{127, 0, 0, 1}, SP, B}} = gen_udp:recv(R, byte_size(B)+1),
- ?line ok = gen_udp:close(S),
- ?line ok = gen_udp:close(R),
+ D1 = "The quick brown fox jumps over a lazy dog",
+ D2 = list_to_binary(D1),
+ D3 = ["The quick", <<" brown ">>, "fox jumps ", <<"over ">>,
+ <<>>, $a, [[], " lazy ", <<"dog">>]],
+ D2 = iolist_to_binary(D3),
+ B = D2,
+ {ok, R} = gen_udp:open(0, [binary, {active, false}]),
+ {ok, RP} = inet:port(R),
+ {ok, S} = gen_udp:open(0),
+ {ok, SP} = inet:port(S),
+ ok = gen_udp:send(S, localhost, RP, D1),
+ {ok, {{127, 0, 0, 1}, SP, B}} = gen_udp:recv(R, byte_size(B)+1),
+ ok = gen_udp:send(S, localhost, RP, D2),
+ {ok, {{127, 0, 0, 1}, SP, B}} = gen_udp:recv(R, byte_size(B)+1),
+ ok = gen_udp:send(S, localhost, RP, D3),
+ {ok, {{127, 0, 0, 1}, SP, B}} = gen_udp:recv(R, byte_size(B)+1),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(R),
ok.
%%-------------------------------------------------------------
%% OTP-3836 inet_udp crashes when IP-address is larger than 255.
-bad_address(suite) ->
- [];
-bad_address(doc) ->
- ["OTP-3836 inet_udp crashes when IP-address is larger than 255."];
+%% OTP-3836 inet_udp crashes when IP-address is larger than 255.
bad_address(Config) when is_list(Config) ->
- ?line {ok, R} = gen_udp:open(0),
- ?line {ok, RP} = inet:port(R),
- ?line {ok, S} = gen_udp:open(0),
- ?line {ok, _SP} = inet:port(S),
- ?line {'EXIT', badarg} =
+ {ok, R} = gen_udp:open(0),
+ {ok, RP} = inet:port(R),
+ {ok, S} = gen_udp:open(0),
+ {ok, _SP} = inet:port(S),
+ {'EXIT', badarg} =
(catch gen_udp:send(S, {127,0,0,1,0}, RP, "void")),
- ?line {'EXIT', badarg} =
+ {'EXIT', badarg} =
(catch gen_udp:send(S, {127,0,0,256}, RP, "void")),
- ?line ok = gen_udp:close(S),
- ?line ok = gen_udp:close(R),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(R),
ok.
@@ -298,8 +298,7 @@ bad_address(Config) when is_list(Config) ->
%% What happens on the SMP emulator remains to be seen...
%%
-read_packets(doc) ->
- ["OTP-6249 UDP option for number of packet reads."];
+%% OTP-6249 UDP option for number of packet reads.
read_packets(Config) when is_list(Config) ->
case erlang:system_info(smp_support) of
false ->
@@ -311,35 +310,35 @@ read_packets(Config) when is_list(Config) ->
end.
read_packets_1() ->
- ?line N1 = 5,
- ?line N2 = 7,
- ?line {ok,R} = gen_udp:open(0, [{read_packets,N1}]),
- ?line {ok,RP} = inet:port(R),
- ?line {ok,Node} = start_node(gen_udp_SUITE_read_packets),
- ?line Die = make_ref(),
- ?line Loop = erlang:spawn_link(fun () -> infinite_loop(Die) end),
+ N1 = 5,
+ N2 = 7,
+ {ok,R} = gen_udp:open(0, [{read_packets,N1}]),
+ {ok,RP} = inet:port(R),
+ {ok,Node} = start_node(gen_udp_SUITE_read_packets),
+ Die = make_ref(),
+ Loop = erlang:spawn_link(fun () -> infinite_loop(Die) end),
%%
- ?line Msgs1 = [erlang:integer_to_list(M) || M <- lists:seq(1, N1*3)],
- ?line [V1|_] = read_packets_test(R, RP, Msgs1, Node),
- ?line {ok,[{read_packets,N1}]} = inet:getopts(R, [read_packets]),
+ Msgs1 = [erlang:integer_to_list(M) || M <- lists:seq(1, N1*3)],
+ [V1|_] = read_packets_test(R, RP, Msgs1, Node),
+ {ok,[{read_packets,N1}]} = inet:getopts(R, [read_packets]),
%%
- ?line ok = inet:setopts(R, [{read_packets,N2}]),
- ?line Msgs2 = [erlang:integer_to_list(M) || M <- lists:seq(1, N2*3)],
- ?line [V2|_] = read_packets_test(R, RP, Msgs2, Node),
- ?line {ok,[{read_packets,N2}]} = inet:getopts(R, [read_packets]),
+ ok = inet:setopts(R, [{read_packets,N2}]),
+ Msgs2 = [erlang:integer_to_list(M) || M <- lists:seq(1, N2*3)],
+ [V2|_] = read_packets_test(R, RP, Msgs2, Node),
+ {ok,[{read_packets,N2}]} = inet:getopts(R, [read_packets]),
%%
- ?line stop_node(Node),
- ?line Mref = erlang:monitor(process, Loop),
- ?line Loop ! Die,
- ?line receive
- {'DOWN',Mref,_,_, normal} ->
- case {V1,V2} of
- {N1,N2} ->
- ok;
- _ when V1 =/= N1, V2 =/= N2 ->
- ok
- end
- end.
+ stop_node(Node),
+ Mref = erlang:monitor(process, Loop),
+ Loop ! Die,
+ receive
+ {'DOWN',Mref,_,_, normal} ->
+ case {V1,V2} of
+ {N1,N2} ->
+ ok;
+ _ when V1 =/= N1, V2 =/= N2 ->
+ ok
+ end
+ end.
infinite_loop(Die) ->
receive
@@ -407,21 +406,21 @@ read_packets_recv(N) ->
read_packets_verify(R, SP, Msg, Trace) ->
lists:reverse(
- lists:sort(read_packets_verify(R, SP, Msg, Trace, 0))).
-
+ lists:sort(read_packets_verify(R, SP, Msg, Trace, 0))).
+
read_packets_verify(R, SP, Msgs, [{trace,Self,OutIn,_}|Trace], M)
when Self =:= self(), OutIn =:= out;
Self =:= self(), OutIn =:= in ->
push(M, read_packets_verify(R, SP, Msgs, Trace, 0));
read_packets_verify(R, SP, [Msg|Msgs],
- [{trace,Self,'receive',{udp,R,{127,0,0,1},SP,Msg}}
- |Trace], M)
+ [{trace,Self,'receive',{udp,R,{127,0,0,1},SP,Msg}}
+ |Trace], M)
when Self =:= self() ->
read_packets_verify(R, SP, Msgs, Trace, M+1);
read_packets_verify(_R, _SP, [], [], M) ->
push(M, []);
read_packets_verify(_R, _SP, Msgs, Trace, M) ->
- ?t:fail({read_packets_verify,mismatch,Msgs,Trace,M}).
+ ct:fail({read_packets_verify,mismatch,Msgs,Trace,M}).
push(0, Vs) ->
Vs;
@@ -438,10 +437,7 @@ flush() ->
-open_fd(suite) ->
- [];
-open_fd(doc) ->
- ["Test that the 'fd' option works"];
+%% Test that the 'fd' option works.
open_fd(Config) when is_list(Config) ->
Msg = "Det gör ont när knoppar brista. Varför skulle annars våren tveka?",
Addr = {127,0,0,1},
@@ -460,10 +456,10 @@ open_fd(Config) when is_list(Config) ->
{udp,S3,Addr,P2,Msg} ->
ok
after 1000 ->
- ?t:fail(io_lib:format("~w", [flush()]))
+ ct:fail(io_lib:format("~w", [flush()]))
end
after 1000 ->
- ?t:fail(io_lib:format("~w", [flush()]))
+ ct:fail(io_lib:format("~w", [flush()]))
end.
active_n(Config) when is_list(Config) ->
@@ -569,88 +565,228 @@ active_n(Config) when is_list(Config) ->
ok = gen_udp:close(S1),
ok.
-%
-% Utils
-%
+
+local_basic(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ CFile = local_filename(client),
+ CAddr = {local,bin_filename(CFile)},
+ _ = file:delete(SFile),
+ _ = file:delete(CFile),
+ %%
+ S = ok(gen_udp:open(0, [{ifaddr,{local,SFile}},{active,false}])),
+ C = ok(gen_udp:open(0, [{ifaddr,{local,CFile}},{active,false}])),
+ SAddr = ok(inet:sockname(S)),
+ CAddr = ok(inet:sockname(C)),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(C),
+ %%
+ ok = file:delete(SFile),
+ ok = file:delete(CFile),
+ ok.
+
+local_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ %%
+ S = ok(gen_udp:open(0, [{ifaddr,SAddr},{active,false}])),
+ C = ok(gen_udp:open(0, [local,{active,false}])),
+ SAddr = ok(inet:sockname(S)),
+ local_handshake(S, SAddr, C, undefined),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(C),
+ %%
+ ok = file:delete(SFile),
+ ok.
+
+local_fdopen(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ CFile = local_filename(client),
+ CAddr = {local,bin_filename(CFile)},
+ _ = file:delete(SFile),
+ _ = file:delete(CFile),
+ %%
+ S0 = ok(gen_udp:open(0, [{ifaddr,SAddr},{active,false}])),
+ C = ok(gen_udp:open(0, [{ifaddr,{local,CFile}},{active,false}])),
+ SAddr = ok(inet:sockname(S0)),
+ CAddr = ok(inet:sockname(C)),
+ Fd = ok(prim_inet:getfd(S0)),
+ S = ok(gen_udp:open(0, [{fd,Fd},local,{active,false}])),
+ SAddr = ok(inet:sockname(S)),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(S0),
+ ok = gen_udp:close(C),
+ %%
+ ok = file:delete(SFile),
+ ok = file:delete(CFile),
+ ok.
+
+local_fdopen_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ %%
+ S = ok(gen_udp:open(0, [{ifaddr,SAddr},{active,false}])),
+ C0 = ok(gen_udp:open(0, [local,{active,false}])),
+ SAddr = ok(inet:sockname(S)),
+ Fd = ok(prim_inet:getfd(C0)),
+ C = ok(gen_udp:open(0, [{fd,Fd},local,{active,false}])),
+ local_handshake(S, SAddr, C, undefined),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(C),
+ ok = gen_udp:close(C0),
+ %%
+ ok = file:delete(SFile),
+ ok.
+
+local_abstract(_Config) ->
+ case os:type() of
+ {unix,linux} ->
+ S = ok(gen_udp:open(0, [{ifaddr,{local,<<>>}},{active,false}])),
+ C = ok(gen_udp:open(0, [{ifaddr,{local,<<>>}},{active,false}])),
+ {local,_} = SAddr = ok(inet:sockname(S)),
+ {local,_} = CAddr = ok(inet:sockname(C)),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(C),
+ ok;
+ _ ->
+ {skip,"AF_LOCAL Abstract Addresses only supported on Linux"}
+ end.
+
+
+local_handshake(S, SAddr, C, CAddr) ->
+ SData = "9876543210",
+ CData = "0123456789",
+ ok = gen_udp:send(C, SAddr, 0, CData),
+ case ok(gen_tcp:recv(S, 112)) of
+ {{unspec,<<>>}, 0, CData} when CAddr =:= undefined ->
+ ok;
+ {{local,<<>>}, 0, CData} when CAddr =:= undefined ->
+ ok;
+ {CAddr, 0, CData} when CAddr =/= undefined ->
+ ok = gen_udp:send(S, CAddr, 0, SData),
+ {SAddr, 0, SData} = ok(gen_tcp:recv(C, 112)),
+ ok
+
+ end.
+
+%%
+%% Utils
+%%
+
start_node(Name) ->
Pa = filename:dirname(code:which(?MODULE)),
- ?t:start_node(Name, slave, [{args, "-pa " ++ Pa}]).
+ test_server:start_node(Name, slave, [{args, "-pa " ++ Pa}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
-connect(suite) ->
- [];
-connect(doc) ->
- ["Test that connect/3 has effect"];
+%% Test that connect/3 has effect.
connect(Config) when is_list(Config) ->
- ?line Addr = {127,0,0,1},
- ?line {ok,S1} = gen_udp:open(0),
- ?line {ok,P1} = inet:port(S1),
- ?line {ok,S2} = gen_udp:open(0),
- ?line ok = inet:setopts(S2, [{active,false}]),
- ?line ok = gen_udp:close(S1),
- ?line ok = gen_udp:connect(S2, Addr, P1),
- ?line ok = gen_udp:send(S2, <<16#deadbeef:32>>),
- ?line ok = case gen_udp:recv(S2, 0, 5) of
- {error,econnrefused} -> ok;
- {error,econnreset} -> ok;
- Other -> Other
- end,
+ Addr = {127,0,0,1},
+ {ok,S1} = gen_udp:open(0),
+ {ok,P1} = inet:port(S1),
+ {ok,S2} = gen_udp:open(0),
+ ok = inet:setopts(S2, [{active,false}]),
+ ok = gen_udp:close(S1),
+ ok = gen_udp:connect(S2, Addr, P1),
+ ok = gen_udp:send(S2, <<16#deadbeef:32>>),
+ ok = case gen_udp:recv(S2, 0, 500) of
+ {error,econnrefused} -> ok;
+ {error,econnreset} -> ok;
+ Other -> Other
+ end,
ok.
implicit_inet6(Config) when is_list(Config) ->
- ?line Host = ok(inet:gethostname()),
- ?line
- case inet:getaddr(Host, inet6) of
- {ok,Addr} ->
- ?line implicit_inet6(Host, Addr);
- {error,Reason} ->
- {skip,
- "Can not look up IPv6 address: "
- ++atom_to_list(Reason)}
- end.
+ Host = ok(inet:gethostname()),
+ case inet:getaddr(Host, inet6) of
+ {ok,Addr} ->
+ implicit_inet6(Host, Addr);
+ {error,Reason} ->
+ {skip,
+ "Can not look up IPv6 address: "
+ ++atom_to_list(Reason)}
+ end.
implicit_inet6(Host, Addr) ->
- ?line Active = {active,false},
- ?line
- case gen_udp:open(0, [inet6,Active]) of
- {ok,S1} ->
- ?line Loopback = {0,0,0,0,0,0,0,1},
- ?line io:format("~s ~p~n", ["::1",Loopback]),
- ?line implicit_inet6(S1, Active, Loopback),
- ?line ok = gen_udp:close(S1),
- %%
- ?line Localhost = "localhost",
- ?line Localaddr = ok(inet:getaddr(Localhost, inet6)),
- ?line io:format("~s ~p~n", [Localhost,Localaddr]),
- ?line S2 = ok(gen_udp:open(0, [{ip,Localaddr},Active])),
- ?line implicit_inet6(S2, Active, Localaddr),
- ?line ok = gen_udp:close(S2),
- %%
- ?line io:format("~s ~p~n", [Host,Addr]),
- ?line S3 = ok(gen_udp:open(0, [{ifaddr,Addr},Active])),
- ?line implicit_inet6(S3, Active, Addr),
- ?line ok = gen_udp:close(S3);
- _ ->
- {skip,"IPv6 not supported"}
- end.
+ Active = {active,false},
+ case gen_udp:open(0, [inet6,Active]) of
+ {ok,S1} ->
+ Loopback = {0,0,0,0,0,0,0,1},
+ io:format("~s ~p~n", ["::1",Loopback]),
+ implicit_inet6(S1, Active, Loopback),
+ ok = gen_udp:close(S1),
+ %%
+ Localaddr = ok(get_localaddr()),
+ S2 = ok(gen_udp:open(0, [{ip,Localaddr},Active])),
+ implicit_inet6(S2, Active, Localaddr),
+ ok = gen_udp:close(S2),
+ %%
+ io:format("~s ~p~n", [Host,Addr]),
+ S3 = ok(gen_udp:open(0, [{ifaddr,Addr},Active])),
+ implicit_inet6(S3, Active, Addr),
+ ok = gen_udp:close(S3);
+ _ ->
+ {skip,"IPv6 not supported"}
+ end.
implicit_inet6(S1, Active, Addr) ->
- ?line P1 = ok(inet:port(S1)),
- ?line S2 = ok(gen_udp:open(0, [inet6,Active])),
- ?line P2 = ok(inet:port(S2)),
- ?line ok = gen_udp:connect(S2, Addr, P1),
- ?line ok = gen_udp:connect(S1, Addr, P2),
- ?line {Addr,P2} = ok(inet:peername(S1)),
- ?line {Addr,P1} = ok(inet:peername(S2)),
- ?line {Addr,P1} = ok(inet:sockname(S1)),
- ?line {Addr,P2} = ok(inet:sockname(S2)),
- ?line ok = gen_udp:send(S1, Addr, P2, "ping"),
- ?line {Addr,P1,"ping"} = ok(gen_udp:recv(S2, 1024, 1000)),
- ?line ok = gen_udp:send(S2, Addr, P1, "pong"),
- ?line {Addr,P2,"pong"} = ok(gen_udp:recv(S1, 1024)),
- ?line ok = gen_udp:close(S2).
-
-ok({ok,V}) -> V.
+ P1 = ok(inet:port(S1)),
+ S2 = ok(gen_udp:open(0, [inet6,Active])),
+ P2 = ok(inet:port(S2)),
+ ok = gen_udp:connect(S2, Addr, P1),
+ ok = gen_udp:connect(S1, Addr, P2),
+ {Addr,P2} = ok(inet:peername(S1)),
+ {Addr,P1} = ok(inet:peername(S2)),
+ {Addr,P1} = ok(inet:sockname(S1)),
+ {Addr,P2} = ok(inet:sockname(S2)),
+ ok = gen_udp:send(S1, Addr, P2, "ping"),
+ {Addr,P1,"ping"} = ok(gen_udp:recv(S2, 1024, 1000)),
+ ok = gen_udp:send(S2, Addr, P1, "pong"),
+ {Addr,P2,"pong"} = ok(gen_udp:recv(S1, 1024)),
+ ok = gen_udp:close(S2).
+
+ok({ok,V}) -> V;
+ok(NotOk) ->
+ try throw(not_ok)
+ catch
+ Thrown ->
+ erlang:raise(
+ error, {Thrown, NotOk}, tl(erlang:get_stacktrace()))
+ end.
+
+
+local_filename(Tag) ->
+ "/tmp/" ?MODULE_STRING "_" ++ os:getpid() ++ "_" ++ atom_to_list(Tag).
+
+bin_filename(String) ->
+ unicode:characters_to_binary(String, file:native_name_encoding()).
+
+delete_local_filenames() ->
+ _ =
+ [file:delete(F) ||
+ F <-
+ filelib:wildcard(
+ "/tmp/" ?MODULE_STRING "_" ++ os:getpid() ++ "_*")],
+ ok.
+
+get_localaddr() ->
+ get_localaddr(["localhost", "localhost6", "ip6-localhost"]).
+
+get_localaddr([]) ->
+ {error, localaddr_not_found};
+get_localaddr([Localhost|Ls]) ->
+ case inet:getaddr(Localhost, inet6) of
+ {ok, LocalAddr} ->
+ io:format("~s ~p~n", [Localhost, LocalAddr]),
+ {ok, LocalAddr};
+ _ ->
+ get_localaddr(Ls)
+ end.
diff --git a/lib/kernel/test/global_SUITE.erl b/lib/kernel/test/global_SUITE.erl
index 73ee86eba4..0a7f73c344 100644
--- a/lib/kernel/test/global_SUITE.erl
+++ b/lib/kernel/test/global_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,8 +19,6 @@
%%
-module(global_SUITE).
-%-define(line_trace, 1).
-
-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
init_per_suite/1, end_per_suite/1,
names/1, names_hidden/1, locks/1, locks_hidden/1,
@@ -51,7 +49,7 @@
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(NODES, [node()|nodes()]).
@@ -61,7 +59,8 @@
-define(GLOBAL_LOCK, global).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
case init:get_argument(ring_line) of
@@ -86,10 +85,10 @@ groups() ->
ring]}].
init_per_group(_GroupName, Config) ->
- Config.
+ Config.
end_per_group(_GroupName, Config) ->
- Config.
+ Config.
init_per_suite(Config) ->
Config.
@@ -99,9 +98,9 @@ end_per_suite(_Config) ->
-define(TESTCASE, testcase_name).
--define(testcase, ?config(?TESTCASE, Config)).
+-define(testcase, proplists:get_value(?TESTCASE, Config)).
-define(nodes_tag, '$global_nodes').
--define(registered, ?config(registered, Config)).
+-define(registered, proplists:get_value(registered, Config)).
init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
ok = gen_server:call(global_name_server, high_level_trace_start,infinity),
@@ -115,16 +114,16 @@ init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
end_per_testcase(_Case, Config) ->
ct:log("Calling end_per_testcase!",[]),
- ?line write_high_level_trace(Config),
- ?line _ =
+ write_high_level_trace(Config),
+ _ =
gen_server:call(global_name_server, high_level_trace_stop, infinity),
[global:unregister_name(N) || N <- global:registered_names()],
- ?line InitRegistered = ?registered,
- ?line Registered = registered(),
- ?line [io:format("~s local names: ~p~n", [What, N]) ||
- {What, N} <- [{"Added", Registered -- InitRegistered},
- {"Removed", InitRegistered -- Registered}],
- N =/= []],
+ InitRegistered = ?registered,
+ Registered = registered(),
+ [io:format("~s local names: ~p~n", [What, N]) ||
+ {What, N} <- [{"Added", Registered -- InitRegistered},
+ {"Removed", InitRegistered -- Registered}],
+ N =/= []],
ok.
@@ -147,12 +146,11 @@ end_per_testcase(_Case, Config) ->
%%% and releases the lock. Now the name should exist on both our own node
%%% and on the slave node (we wait until that is true; it seems that we
%%% can do rpc calls to another node before the connection is really up).
-register_1(suite) -> [];
register_1(Config) when is_list(Config) ->
Timeout = 15,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
+ init_condition(Config),
P = spawn_link(?MODULE, lock_global, [self(), Config]),
receive
{P, ok} ->
@@ -161,7 +159,7 @@ register_1(Config) when is_list(Config) ->
end,
P ! step2,
io:format("p1: sent step2~n"),
- ?line yes = global:register_name(foo, self()),
+ yes = global:register_name(foo, self()),
io:format("p1: registered~n"),
P ! step3,
receive
@@ -172,11 +170,11 @@ register_1(Config) when is_list(Config) ->
I =:= I2 ->
ok;
true ->
- test_server:fail({notsync, I, I2})
+ ct:fail({notsync, I, I2})
end,
- ?line _ = global:unregister_name(foo),
+ _ = global:unregister_name(foo),
write_high_level_trace(Config),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
lock_global(Parent, Config) ->
@@ -203,7 +201,7 @@ lock_global(Parent, Config) ->
io:format("p2: received step3~n"),
I = global:whereis_name(foo),
io:format("p2: name ~p~n", [I]),
- ?line ?UNTIL(I =:= rpc:call(N1, global, whereis_name, [foo])),
+ ?UNTIL(I =:= rpc:call(N1, global, whereis_name, [foo])),
I2 = I,
slave:stop(N1),
io:format("p2: name2 ~p~n", [I2]),
@@ -216,75 +214,73 @@ lock_global(Parent, Config) ->
%%% 'try_again_locker' would be called, and this time cause both 1 and 2
%%% to obtain a lock for 'global' on node 3, which would keep the
%%% name registry from ever becoming consistent again.
-both_known_1(suite) -> [];
both_known_1(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
+ init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ OrigNames = global:registered_names(),
- ?line [Cp1, Cp2, Cp3] = start_nodes([cp1, cp2, cp3], slave, Config),
+ [Cp1, Cp2, Cp3] = start_nodes([cp1, cp2, cp3], slave, Config),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- ?line rpc_disconnect_node(Cp1, Cp2, Config),
+ rpc_disconnect_node(Cp1, Cp2, Config),
- ?line {_Pid1, yes} = rpc:call(Cp1, ?MODULE, start_proc, [p1]),
- ?line {_Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [p2]),
+ {_Pid1, yes} = rpc:call(Cp1, ?MODULE, start_proc, [p1]),
+ {_Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [p2]),
- ?line Names10 = rpc:call(Cp1, global, registered_names, []),
- ?line Names20 = rpc:call(Cp2, global, registered_names, []),
- ?line Names30 = rpc:call(Cp3, global, registered_names, []),
+ Names10 = rpc:call(Cp1, global, registered_names, []),
+ Names20 = rpc:call(Cp2, global, registered_names, []),
+ Names30 = rpc:call(Cp3, global, registered_names, []),
Names1 = Names10 -- OrigNames,
Names2 = Names20 -- OrigNames,
Names3 = Names30 -- OrigNames,
- ?line [p1] = lists:sort(Names1),
- ?line [p2] = lists:sort(Names2),
- ?line [p1, p2] = lists:sort(Names3),
+ [p1] = lists:sort(Names1),
+ [p2] = lists:sort(Names2),
+ [p1, p2] = lists:sort(Names3),
- ?line Locker = spawn(Cp3, ?MODULE, lock_global2, [{global, l3},
- self()]),
+ Locker = spawn(Cp3, ?MODULE, lock_global2, [{global, l3},
+ self()]),
- ?line receive
- {locked, S} ->
- true = S
- end,
+ receive
+ {locked, S} ->
+ true = S
+ end,
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cp2]),
+ pong = rpc:call(Cp1, net_adm, ping, [Cp2]),
%% Bring cp1 and cp2 together, while someone has locked global.
%% They will now loop in 'loop_locker'.
- ?line Names10_2 = rpc:call(Cp1, global, registered_names, []),
- ?line Names20_2 = rpc:call(Cp2, global, registered_names, []),
- ?line Names30_2 = rpc:call(Cp3, global, registered_names, []),
+ Names10_2 = rpc:call(Cp1, global, registered_names, []),
+ Names20_2 = rpc:call(Cp2, global, registered_names, []),
+ Names30_2 = rpc:call(Cp3, global, registered_names, []),
Names1_2 = Names10_2 -- OrigNames,
Names2_2 = Names20_2 -- OrigNames,
Names3_2 = Names30_2 -- OrigNames,
- ?line [p1] = lists:sort(Names1_2),
- ?line [p2] = lists:sort(Names2_2),
- ?line [p1, p2] = lists:sort(Names3_2),
+ [p1] = lists:sort(Names1_2),
+ [p2] = lists:sort(Names2_2),
+ [p1, p2] = lists:sort(Names3_2),
%% Let go of the lock, and expect the lockers to resolve the name
%% registry.
Locker ! {ok, self()},
- ?line
?UNTIL(begin
- ?line Names10_3 = rpc:call(Cp1, global, registered_names, []),
- ?line Names20_3 = rpc:call(Cp2, global, registered_names, []),
- ?line Names30_3 = rpc:call(Cp3, global, registered_names, []),
-
+ Names10_3 = rpc:call(Cp1, global, registered_names, []),
+ Names20_3 = rpc:call(Cp2, global, registered_names, []),
+ Names30_3 = rpc:call(Cp3, global, registered_names, []),
+
Names1_3 = Names10_3 -- OrigNames,
Names2_3 = Names20_3 -- OrigNames,
Names3_3 = Names30_3 -- OrigNames,
-
+
N1 = lists:sort(Names1_3),
N2 = lists:sort(Names2_3),
N3 = lists:sort(Names3_3),
@@ -296,51 +292,49 @@ both_known_1(Config) when is_list(Config) ->
stop_node(Cp2),
stop_node(Cp3),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-lost_unregister(suite) -> [];
-lost_unregister(doc) ->
- ["OTP-6428. An unregistered name reappears."];
+%% OTP-6428. An unregistered name reappears.
lost_unregister(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
+ init_condition(Config),
- ?line {ok, B} = start_node(b, Config),
- ?line {ok, C} = start_node(c, Config),
+ {ok, B} = start_node(b, Config),
+ {ok, C} = start_node(c, Config),
Nodes = [node(), B, C],
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- % start a proc and register it
- ?line {Pid, yes} = start_proc(test),
+ %% start a proc and register it
+ {Pid, yes} = start_proc(test),
- ?line ?UNTIL(Pid =:= global:whereis_name(test)),
- ?line check_everywhere(Nodes, test, Config),
+ ?UNTIL(Pid =:= global:whereis_name(test)),
+ check_everywhere(Nodes, test, Config),
- ?line rpc_disconnect_node(B, C, Config),
- ?line check_everywhere(Nodes, test, Config),
- ?line _ = rpc:call(B, global, unregister_name, [test]),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
- ?line Pid = rpc:call(C, global, whereis_name, [test]),
- ?line check_everywhere(Nodes--[C], test, Config),
- ?line pong = rpc:call(B, net_adm, ping, [C]),
+ rpc_disconnect_node(B, C, Config),
+ check_everywhere(Nodes, test, Config),
+ _ = rpc:call(B, global, unregister_name, [test]),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
+ Pid = rpc:call(C, global, whereis_name, [test]),
+ check_everywhere(Nodes--[C], test, Config),
+ pong = rpc:call(B, net_adm, ping, [C]),
%% Now the name has reappeared on node B.
- ?line ?UNTIL(Pid =:= global:whereis_name(test)),
- ?line check_everywhere(Nodes, test, Config),
+ ?UNTIL(Pid =:= global:whereis_name(test)),
+ check_everywhere(Nodes, test, Config),
exit_p(Pid),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
- ?line check_everywhere(Nodes, test, Config),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
+ check_everywhere(Nodes, test, Config),
write_high_level_trace(Config),
stop_node(B),
stop_node(C),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-define(UNTIL_LOOP, 300).
@@ -350,7 +344,7 @@ lost_unregister(Config) when is_list(Config) ->
init_high_level_trace(Time) ->
Mul = try
test_server:timetrap_scale_factor()
- catch _:_ -> 1
+ catch _:_ -> 1
end,
put(?end_tag, msec() + Time * Mul * 1000),
%% Assures that started nodes start the high level trace automatically.
@@ -395,7 +389,7 @@ write_high_level_trace(Nodes, Config) ->
%% 'info' returns more than the trace, which is nice.
Data = [{Node, {info, rpc:call(Node, global, info, [])}} ||
Node <- Nodes],
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
DataFile = filename:join([Dir, lists:concat(["global_", ?testcase])]),
file:write_file(DataFile, term_to_binary({high_level_trace, When, Data})).
@@ -413,37 +407,35 @@ lock_global2(Id, Parent) ->
%% erl -sname XXX -rsh ctrsh where XX not in [cp1, cp2, cp3]
%%-----------------------------------------------------------------
-%cp1 - cp3 are started, and the name 'test' registered for a process on
-%test_server. Then it is checked that the name is registered on all
-%nodes, using whereis_name. Check that the same
-%name can't be registered with another value. Exit the registered
-%process and check that the name disappears. Register a new process
-%(Pid2) under the name 'test'. Let another new process (Pid3)
-%reregister itself under the same name. Test global:send/2. Test
-%unregister. Kill Pid3. Start a process (Pid6) on cp3,
-%register it as 'test', stop cp1 - cp3 and check that 'test' disappeared.
-%Kill Pid2 and check that 'test' isn't registered.
-
-names(suite) -> [];
+%% cp1 - cp3 are started, and the name 'test' registered for a process on
+%% test_server. Then it is checked that the name is registered on all
+%% nodes, using whereis_name. Check that the same
+%% name can't be registered with another value. Exit the registered
+%% process and check that the name disappears. Register a new process
+%% (Pid2) under the name 'test'. Let another new process (Pid3)
+%% reregister itself under the same name. Test global:send/2. Test
+%% unregister. Kill Pid3. Start a process (Pid6) on cp3,
+%% register it as 'test', stop cp1 - cp3 and check that 'test' disappeared.
+%% Kill Pid2 and check that 'test' isn't registered.
+
names(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line {ok, Cp1} = start_node(cp1, Config),
- ?line {ok, Cp2} = start_node(cp2, Config),
- ?line {ok, Cp3} = start_node(cp3, Config),
+ {ok, Cp1} = start_node(cp1, Config),
+ {ok, Cp2} = start_node(cp2, Config),
+ {ok, Cp3} = start_node(cp3, Config),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- % start a proc and register it
- ?line {Pid, yes} = start_proc(test),
+ %% start a proc and register it
+ {Pid, yes} = start_proc(test),
- % test that it is registered at all nodes
- ?line
- ?UNTIL(begin
+ %% test that it is registered at all nodes
+ ?UNTIL(begin
(Pid =:= global:whereis_name(test)) and
(Pid =:= rpc:call(Cp1, global, whereis_name, [test])) and
(Pid =:= rpc:call(Cp2, global, whereis_name, [test])) and
@@ -451,156 +443,148 @@ names(Config) when is_list(Config) ->
([test] =:= global:registered_names() -- OrigNames)
end),
- % try to register the same name
- ?line no = global:register_name(test, self()),
- ?line no = rpc:call(Cp1, global, register_name, [test, self()]),
+ %% try to register the same name
+ no = global:register_name(test, self()),
+ no = rpc:call(Cp1, global, register_name, [test, self()]),
- % let process exit, check that it is unregistered automatically
+ %% let process exit, check that it is unregistered automatically
exit_p(Pid),
- ?line
- ?UNTIL((undefined =:= global:whereis_name(test)) and
+ ?UNTIL((undefined =:= global:whereis_name(test)) and
(undefined =:= rpc:call(Cp1, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp2, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp3, global, whereis_name, [test]))),
- % test re_register
- ?line {Pid2, yes} = start_proc(test),
- ?line ?UNTIL(Pid2 =:= rpc:call(Cp3, global, whereis_name, [test])),
+ %% test re_register
+ {Pid2, yes} = start_proc(test),
+ ?UNTIL(Pid2 =:= rpc:call(Cp3, global, whereis_name, [test])),
Pid3 = rpc:call(Cp3, ?MODULE, start_proc2, [test]),
- ?line ?UNTIL(Pid3 =:= rpc:call(Cp3, global, whereis_name, [test])),
+ ?UNTIL(Pid3 =:= rpc:call(Cp3, global, whereis_name, [test])),
Pid3 = global:whereis_name(test),
- % test sending
+ %% test sending
global:send(test, {ping, self()}),
receive
{pong, Cp3} -> ok
after
- 2000 -> test_server:fail(timeout1)
+ 2000 -> ct:fail(timeout1)
end,
rpc:call(Cp1, global, send, [test, {ping, self()}]),
receive
{pong, Cp3} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line _ = global:unregister_name(test),
- ?line
- ?UNTIL((undefined =:= global:whereis_name(test)) and
+ _ = global:unregister_name(test),
+ ?UNTIL((undefined =:= global:whereis_name(test)) and
(undefined =:= rpc:call(Cp1, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp2, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp3, global, whereis_name, [test]))),
exit_p(Pid3),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
- % register a proc
- ?line {_Pid6, yes} = rpc:call(Cp3, ?MODULE, start_proc, [test]),
+ %% register a proc
+ {_Pid6, yes} = rpc:call(Cp3, ?MODULE, start_proc, [test]),
write_high_level_trace(Config),
- % stop the nodes, and make sure names are released.
+
+ %% stop the nodes, and make sure names are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
exit_p(Pid2),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
- ?line init_condition(Config),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
+ init_condition(Config),
ok.
-names_hidden(suite) -> [];
-names_hidden(doc) ->
- ["Tests that names on a hidden node doesn't interfere with names on "
- "visible nodes."];
+%% Tests that names on a hidden node doesn't interfere with names on
+%% visible nodes.
names_hidden(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
- ?line OrigNodes = nodes(),
-
- ?line {ok, Cp1} = start_node(cp1, Config),
- ?line {ok, Cp2} = start_node(cp2, Config),
- ?line {ok, Cp3} = start_hidden_node(cp3, Config),
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cp3]),
- ?line pong = rpc:call(Cp3, net_adm, ping, [Cp2]),
- ?line pong = rpc:call(Cp3, net_adm, ping, [node()]),
-
- ?line [] = [Cp1, Cp2 | OrigNodes] -- nodes(),
-
- % start a proc on hidden node and register it
- ?line {HPid, yes} = rpc:call(Cp3, ?MODULE, start_proc, [test]),
- ?line Cp3 = node(HPid),
-
- % Check that it didn't get registered on visible nodes
- ?line
- ?UNTIL((undefined =:= global:whereis_name(test)) and
+ init_condition(Config),
+ OrigNames = global:registered_names(),
+ OrigNodes = nodes(),
+
+ {ok, Cp1} = start_node(cp1, Config),
+ {ok, Cp2} = start_node(cp2, Config),
+ {ok, Cp3} = start_hidden_node(cp3, Config),
+ pong = rpc:call(Cp1, net_adm, ping, [Cp3]),
+ pong = rpc:call(Cp3, net_adm, ping, [Cp2]),
+ pong = rpc:call(Cp3, net_adm, ping, [node()]),
+
+ [] = [Cp1, Cp2 | OrigNodes] -- nodes(),
+
+ %% start a proc on hidden node and register it
+ {HPid, yes} = rpc:call(Cp3, ?MODULE, start_proc, [test]),
+ Cp3 = node(HPid),
+
+ %% Check that it didn't get registered on visible nodes
+ ?UNTIL((undefined =:= global:whereis_name(test)) and
(undefined =:= rpc:call(Cp1, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp2, global, whereis_name, [test]))),
- % start a proc on visible node and register it
- ?line {Pid, yes} = start_proc(test),
- ?line true = (Pid =/= HPid),
+ %% start a proc on visible node and register it
+ {Pid, yes} = start_proc(test),
+ true = (Pid =/= HPid),
- % test that it is registered at all nodes
- ?line
- ?UNTIL((Pid =:= global:whereis_name(test)) and
+ %% test that it is registered at all nodes
+ ?UNTIL((Pid =:= global:whereis_name(test)) and
(Pid =:= rpc:call(Cp1, global, whereis_name, [test])) and
(Pid =:= rpc:call(Cp2, global, whereis_name, [test])) and
(HPid =:= rpc:call(Cp3, global, whereis_name, [test])) and
([test] =:= global:registered_names() -- OrigNames)),
- % try to register the same name
- ?line no = global:register_name(test, self()),
- ?line no = rpc:call(Cp1, global, register_name, [test, self()]),
+ %% try to register the same name
+ no = global:register_name(test, self()),
+ no = rpc:call(Cp1, global, register_name, [test, self()]),
- % let process exit, check that it is unregistered automatically
+ %% let process exit, check that it is unregistered automatically
exit_p(Pid),
- ?line
- ?UNTIL((undefined =:= global:whereis_name(test)) and
+ ?UNTIL((undefined =:= global:whereis_name(test)) and
(undefined =:= rpc:call(Cp1, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp2, global, whereis_name, [test])) and
(HPid =:= rpc:call(Cp3, global, whereis_name, [test]))),
- % test re_register
- ?line {Pid2, yes} = start_proc(test),
- ?line ?UNTIL(Pid2 =:= rpc:call(Cp2, global, whereis_name, [test])),
+ %% test re_register
+ {Pid2, yes} = start_proc(test),
+ ?UNTIL(Pid2 =:= rpc:call(Cp2, global, whereis_name, [test])),
Pid3 = rpc:call(Cp2, ?MODULE, start_proc2, [test]),
- ?line ?UNTIL(Pid3 =:= rpc:call(Cp2, global, whereis_name, [test])),
- ?line Pid3 = global:whereis_name(test),
+ ?UNTIL(Pid3 =:= rpc:call(Cp2, global, whereis_name, [test])),
+ Pid3 = global:whereis_name(test),
- % test sending
- ?line Pid3 = global:send(test, {ping, self()}),
+ %% test sending
+ Pid3 = global:send(test, {ping, self()}),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout1)
+ 2000 -> ct:fail(timeout1)
end,
rpc:call(Cp1, global, send, [test, {ping, self()}]),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line _ = rpc:call(Cp3, global, unregister_name, [test]),
- ?line
- ?UNTIL((Pid3 =:= global:whereis_name(test)) and
+ _ = rpc:call(Cp3, global, unregister_name, [test]),
+ ?UNTIL((Pid3 =:= global:whereis_name(test)) and
(Pid3 =:= rpc:call(Cp1, global, whereis_name, [test])) and
(Pid3 =:= rpc:call(Cp2, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp3, global, whereis_name, [test]))),
- ?line _ = global:unregister_name(test),
- ?line
- ?UNTIL((undefined =:= global:whereis_name(test)) and
+ _ = global:unregister_name(test),
+ ?UNTIL((undefined =:= global:whereis_name(test)) and
(undefined =:= rpc:call(Cp1, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp2, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp3, global, whereis_name, [test]))),
@@ -608,277 +592,297 @@ names_hidden(Config) when is_list(Config) ->
exit_p(Pid3),
exit_p(HPid),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
write_high_level_trace(Config),
- % stop the nodes, and make sure names are released.
+
+ %% stop the nodes, and make sure names are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-locks(suite) -> [];
locks(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line {ok, Cp1} = start_node(cp1, Config),
- ?line {ok, Cp2} = start_node(cp2, Config),
- ?line {ok, Cp3} = start_node(cp3, Config),
-
- ?line wait_for_ready_net(Config),
-
- % start two procs
- ?line Pid = start_proc(),
- ?line Pid2 = rpc:call(Cp1, ?MODULE, start_proc, []),
- % set a lock, and make sure noone else can set the same lock
- ?line true = global:set_lock({test_lock, self()}, ?NODES, 1),
- ?line false = req(Pid, {set_lock, test_lock, self()}),
- ?line false = req(Pid2, {set_lock, test_lock, self()}),
- % delete, and let another proc set the lock
+ init_condition(Config),
+ {ok, Cp1} = start_node(cp1, Config),
+ {ok, Cp2} = start_node(cp2, Config),
+ {ok, Cp3} = start_node(cp3, Config),
+
+ wait_for_ready_net(Config),
+
+ %% start two procs
+ Pid = start_proc(),
+ Pid2 = rpc:call(Cp1, ?MODULE, start_proc, []),
+
+ %% set a lock, and make sure noone else can set the same lock
+ true = global:set_lock({test_lock, self()}, ?NODES, 1),
+ false = req(Pid, {set_lock, test_lock, self()}),
+ false = req(Pid2, {set_lock, test_lock, self()}),
+
+ %% delete, and let another proc set the lock
global:del_lock({test_lock, self()}),
- ?line true = req(Pid, {set_lock, test_lock, self()}),
- ?line false = req(Pid2, {set_lock, test_lock, self()}),
- ?line false = global:set_lock({test_lock, self()}, ?NODES,1),
- % kill lock-holding proc, make sure the lock is released
+ true = req(Pid, {set_lock, test_lock, self()}),
+ false = req(Pid2, {set_lock, test_lock, self()}),
+ false = global:set_lock({test_lock, self()}, ?NODES,1),
+
+ %% kill lock-holding proc, make sure the lock is released
exit_p(Pid),
?UNTIL(true =:= global:set_lock({test_lock, self()}, ?NODES,1)),
Pid2 ! {set_lock_loop, test_lock, self()},
- % make sure we don't have the msg
+
+ %% make sure we don't have the msg
receive
- {got_lock, Pid2} -> test_server:fail(got_lock)
+ {got_lock, Pid2} -> ct:fail(got_lock)
after
1000 -> ok
end,
global:del_lock({test_lock, self()}),
- % make sure pid2 got the lock
+
+ %% make sure pid2 got the lock
receive
{got_lock, Pid2} -> ok
after
- % 12000 >> 5000, which is the max time before a new retry for
- % set_lock
- 12000 -> test_server:fail(got_lock2)
+ %% 12000 >> 5000, which is the max time before a new retry for
+ %% set_lock
+ 12000 -> ct:fail(got_lock2)
end,
- % let proc set the same lock
- ?line true = req(Pid2, {set_lock, test_lock, self()}),
- % let proc set new lock
- ?line true = req(Pid2, {set_lock, test_lock2, self()}),
- ?line false = global:set_lock({test_lock, self()},?NODES,1),
- ?line false = global:set_lock({test_lock2, self()}, ?NODES,1),
+ %% let proc set the same lock
+ true = req(Pid2, {set_lock, test_lock, self()}),
+
+ %% let proc set new lock
+ true = req(Pid2, {set_lock, test_lock2, self()}),
+ false = global:set_lock({test_lock, self()},?NODES,1),
+ false = global:set_lock({test_lock2, self()}, ?NODES,1),
exit_p(Pid2),
-% erlang:display({locks1, ets:tab2list(global_locks)}),
?UNTIL(true =:= global:set_lock({test_lock, self()}, ?NODES, 1)),
?UNTIL(true =:= global:set_lock({test_lock2, self()}, ?NODES, 1)),
- ?line global:del_lock({test_lock, self()}),
- ?line global:del_lock({test_lock2, self()}),
-
- % let proc set two locks
- ?line Pid3 = rpc:call(Cp1, ?MODULE, start_proc, []),
- ?line true = req(Pid3, {set_lock, test_lock, self()}),
- ?line true = req(Pid3, {set_lock, test_lock2, self()}),
- % del one lock
- ?line Pid3 ! {del_lock, test_lock2},
- ?line test_server:sleep(100),
- % check that one lock is still set, but not the other
- ?line false = global:set_lock({test_lock, self()}, ?NODES, 1),
- ?line true = global:set_lock({test_lock2, self()}, ?NODES, 1),
- ?line global:del_lock({test_lock2, self()}),
- % kill lock-holder
+ global:del_lock({test_lock, self()}),
+ global:del_lock({test_lock2, self()}),
+
+ %% let proc set two locks
+ Pid3 = rpc:call(Cp1, ?MODULE, start_proc, []),
+ true = req(Pid3, {set_lock, test_lock, self()}),
+ true = req(Pid3, {set_lock, test_lock2, self()}),
+
+ %% del one lock
+ Pid3 ! {del_lock, test_lock2},
+ ct:sleep(100),
+
+ %% check that one lock is still set, but not the other
+ false = global:set_lock({test_lock, self()}, ?NODES, 1),
+ true = global:set_lock({test_lock2, self()}, ?NODES, 1),
+ global:del_lock({test_lock2, self()}),
+
+ %% kill lock-holder
exit_p(Pid3),
-% erlang:display({locks2, ets:tab2list(global_locks)}),
+
?UNTIL(true =:= global:set_lock({test_lock, self()}, ?NODES, 1)),
- ?line global:del_lock({test_lock, self()}),
+ global:del_lock({test_lock, self()}),
?UNTIL(true =:= global:set_lock({test_lock2, self()}, ?NODES, 1)),
- ?line global:del_lock({test_lock2, self()}),
-
- % start one proc on each node
- ?line Pid4 = start_proc(),
- ?line Pid5 = rpc:call(Cp1, ?MODULE, start_proc, []),
- ?line Pid6 = rpc:call(Cp2, ?MODULE, start_proc, []),
- ?line Pid7 = rpc:call(Cp3, ?MODULE, start_proc, []),
- % set lock on two nodes
- ?line true = req(Pid4, {set_lock, test_lock, self(), [node(), Cp1]}),
- ?line false = req(Pid5, {set_lock, test_lock, self(), [node(), Cp1]}),
- % set same lock on other two nodes
- ?line true = req(Pid6, {set_lock, test_lock, self(), [Cp2, Cp3]}),
- ?line false = req(Pid7, {set_lock, test_lock, self(), [Cp2, Cp3]}),
- % release lock
+ global:del_lock({test_lock2, self()}),
+
+ %% start one proc on each node
+ Pid4 = start_proc(),
+ Pid5 = rpc:call(Cp1, ?MODULE, start_proc, []),
+ Pid6 = rpc:call(Cp2, ?MODULE, start_proc, []),
+ Pid7 = rpc:call(Cp3, ?MODULE, start_proc, []),
+
+ %% set lock on two nodes
+ true = req(Pid4, {set_lock, test_lock, self(), [node(), Cp1]}),
+ false = req(Pid5, {set_lock, test_lock, self(), [node(), Cp1]}),
+
+ %% set same lock on other two nodes
+ true = req(Pid6, {set_lock, test_lock, self(), [Cp2, Cp3]}),
+ false = req(Pid7, {set_lock, test_lock, self(), [Cp2, Cp3]}),
+
+ %% release lock
Pid6 ! {del_lock, test_lock, [Cp2, Cp3]},
- % try to set lock on a node that already has the lock
- ?line false = req(Pid6, {set_lock, test_lock, self(), [Cp1, Cp2, Cp3]}),
- % set lock on a node
+ %% try to set lock on a node that already has the lock
+ false = req(Pid6, {set_lock, test_lock, self(), [Cp1, Cp2, Cp3]}),
+
+ %% set lock on a node
exit_p(Pid4),
?UNTIL(true =:= req(Pid5, {set_lock, test_lock, self(), [node(), Cp1]})),
- ?line Pid8 = start_proc(),
- ?line false = req(Pid8, {set_lock, test_lock, self()}),
+ Pid8 = start_proc(),
+ false = req(Pid8, {set_lock, test_lock, self()}),
write_high_level_trace(Config),
- % stop the nodes, and make sure locks are released.
+
+ %% stop the nodes, and make sure locks are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line test_server:sleep(100),
- ?line true = req(Pid8, {set_lock, test_lock, self()}),
+ ct:sleep(100),
+ true = req(Pid8, {set_lock, test_lock, self()}),
exit_p(Pid8),
- ?line test_server:sleep(10),
+ ct:sleep(10),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-
-locks_hidden(suite) -> [];
-locks_hidden(doc) ->
- ["Tests that locks on a hidden node doesn't interere with locks on "
- "visible nodes."];
+
+%% Tests that locks on a hidden node doesn't interere with locks on
+%% visible nodes.
locks_hidden(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNodes = nodes(),
- ?line {ok, Cp1} = start_node(cp1, Config),
- ?line {ok, Cp2} = start_node(cp2, Config),
- ?line {ok, Cp3} = start_hidden_node(cp3, Config),
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cp3]),
- ?line pong = rpc:call(Cp3, net_adm, ping, [Cp2]),
- ?line pong = rpc:call(Cp3, net_adm, ping, [node()]),
-
- ?line [] = [Cp1, Cp2 | OrigNodes] -- nodes(),
-
- % start two procs
- ?line Pid = start_proc(),
- ?line Pid2 = rpc:call(Cp1, ?MODULE, start_proc, []),
- ?line HPid = rpc:call(Cp3, ?MODULE, start_proc, []),
- % Make sure hidden node doesn't interfere with visible nodes lock
- ?line true = req(HPid, {set_lock, test_lock, self()}),
- ?line true = global:set_lock({test_lock, self()}, ?NODES, 1),
- ?line false = req(Pid, {set_lock, test_lock, self()}),
- ?line true = req(HPid, {del_lock_sync, test_lock, self()}),
- ?line false = req(Pid2, {set_lock, test_lock, self()}),
- % delete, and let another proc set the lock
+ init_condition(Config),
+ OrigNodes = nodes(),
+ {ok, Cp1} = start_node(cp1, Config),
+ {ok, Cp2} = start_node(cp2, Config),
+ {ok, Cp3} = start_hidden_node(cp3, Config),
+ pong = rpc:call(Cp1, net_adm, ping, [Cp3]),
+ pong = rpc:call(Cp3, net_adm, ping, [Cp2]),
+ pong = rpc:call(Cp3, net_adm, ping, [node()]),
+
+ [] = [Cp1, Cp2 | OrigNodes] -- nodes(),
+
+ %% start two procs
+ Pid = start_proc(),
+ Pid2 = rpc:call(Cp1, ?MODULE, start_proc, []),
+ HPid = rpc:call(Cp3, ?MODULE, start_proc, []),
+
+ %% Make sure hidden node doesn't interfere with visible nodes lock
+ true = req(HPid, {set_lock, test_lock, self()}),
+ true = global:set_lock({test_lock, self()}, ?NODES, 1),
+ false = req(Pid, {set_lock, test_lock, self()}),
+ true = req(HPid, {del_lock_sync, test_lock, self()}),
+ false = req(Pid2, {set_lock, test_lock, self()}),
+
+ %% delete, and let another proc set the lock
global:del_lock({test_lock, self()}),
- ?line true = req(Pid, {set_lock, test_lock, self()}),
- ?line false = req(Pid2, {set_lock, test_lock, self()}),
- ?line false = global:set_lock({test_lock, self()}, ?NODES,1),
- % kill lock-holding proc, make sure the lock is released
+ true = req(Pid, {set_lock, test_lock, self()}),
+ false = req(Pid2, {set_lock, test_lock, self()}),
+ false = global:set_lock({test_lock, self()}, ?NODES,1),
+
+ %% kill lock-holding proc, make sure the lock is released
exit_p(Pid),
?UNTIL(true =:= global:set_lock({test_lock, self()}, ?NODES, 1)),
?UNTIL(true =:= req(HPid, {set_lock, test_lock, self()})),
Pid2 ! {set_lock_loop, test_lock, self()},
- % make sure we don't have the msg
+
+ %% make sure we don't have the msg
receive
- {got_lock, Pid2} -> test_server:fail(got_lock)
+ {got_lock, Pid2} -> ct:fail(got_lock)
after
1000 -> ok
end,
global:del_lock({test_lock, self()}),
- % make sure pid2 got the lock
+
+ %% make sure pid2 got the lock
receive
{got_lock, Pid2} -> ok
after
- % 12000 >> 5000, which is the max time before a new retry for
- % set_lock
- 12000 -> test_server:fail(got_lock2)
+ %% 12000 >> 5000, which is the max time before a new retry for
+ %% set_lock
+ 12000 -> ct:fail(got_lock2)
end,
- ?line true = req(HPid, {del_lock_sync, test_lock, self()}),
-
- % let proc set the same lock
- ?line true = req(Pid2, {set_lock, test_lock, self()}),
- % let proc set new lock
- ?line true = req(Pid2, {set_lock, test_lock2, self()}),
- ?line true = req(HPid, {set_lock, test_lock, self()}),
- ?line true = req(HPid, {set_lock, test_lock2, self()}),
+ true = req(HPid, {del_lock_sync, test_lock, self()}),
+
+ %% let proc set the same lock
+ true = req(Pid2, {set_lock, test_lock, self()}),
+
+ %% let proc set new lock
+ true = req(Pid2, {set_lock, test_lock2, self()}),
+ true = req(HPid, {set_lock, test_lock, self()}),
+ true = req(HPid, {set_lock, test_lock2, self()}),
exit_p(HPid),
- ?line false = global:set_lock({test_lock, self()},?NODES,1),
- ?line false = global:set_lock({test_lock2, self()}, ?NODES,1),
+ false = global:set_lock({test_lock, self()},?NODES,1),
+ false = global:set_lock({test_lock2, self()}, ?NODES,1),
+
exit_p(Pid2),
-% erlang:display({locks1, ets:tab2list(global_locks)}),
?UNTIL(true =:= global:set_lock({test_lock, self()}, ?NODES, 1)),
?UNTIL(true =:= global:set_lock({test_lock2, self()}, ?NODES, 1)),
- ?line global:del_lock({test_lock, self()}),
- ?line global:del_lock({test_lock2, self()}),
+ global:del_lock({test_lock, self()}),
+ global:del_lock({test_lock2, self()}),
write_high_level_trace(Config),
- % stop the nodes, and make sure locks are released.
+
+ %% stop the nodes, and make sure locks are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-
-bad_input(suite) -> [];
+
bad_input(Config) when is_list(Config) ->
Timeout = 15,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
+ init_condition(Config),
Pid = whereis(global_name_server),
- ?line {'EXIT', _} = (catch global:set_lock(bad_id)),
- ?line {'EXIT', _} = (catch global:set_lock({id, self()}, bad_nodes)),
- ?line {'EXIT', _} = (catch global:del_lock(bad_id)),
- ?line {'EXIT', _} = (catch global:del_lock({id, self()}, bad_nodes)),
- ?line {'EXIT', _} = (catch global:register_name(name, bad_pid)),
- ?line {'EXIT', _} = (catch global:reregister_name(name, bad_pid)),
- ?line {'EXIT', _} = (catch global:trans(bad_id, {m,f})),
- ?line {'EXIT', _} = (catch global:trans({id, self()}, {m,f}, [node()], -1)),
- ?line Pid = whereis(global_name_server),
- ?line init_condition(Config),
+ {'EXIT', _} = (catch global:set_lock(bad_id)),
+ {'EXIT', _} = (catch global:set_lock({id, self()}, bad_nodes)),
+ {'EXIT', _} = (catch global:del_lock(bad_id)),
+ {'EXIT', _} = (catch global:del_lock({id, self()}, bad_nodes)),
+ {'EXIT', _} = (catch global:register_name(name, bad_pid)),
+ {'EXIT', _} = (catch global:reregister_name(name, bad_pid)),
+ {'EXIT', _} = (catch global:trans(bad_id, {m,f})),
+ {'EXIT', _} = (catch global:trans({id, self()}, {m,f}, [node()], -1)),
+ Pid = whereis(global_name_server),
+ init_condition(Config),
ok.
-names_and_locks(suite) -> [];
names_and_locks(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
-
- ?line {ok, Cp1} = start_node(cp1, Config),
- ?line {ok, Cp2} = start_node(cp2, Config),
- ?line {ok, Cp3} = start_node(cp3, Config),
-
- % start one proc on each node
- ?line PidTS = start_proc(),
- ?line Pid1 = rpc:call(Cp1, ?MODULE, start_proc, []),
- ?line Pid2 = rpc:call(Cp2, ?MODULE, start_proc, []),
- ?line Pid3 = rpc:call(Cp3, ?MODULE, start_proc, []),
- % register some of them
- ?line yes = global:register_name(test1, Pid1),
- ?line yes = global:register_name(test2, Pid2),
- ?line yes = global:register_name(test3, Pid3),
- ?line no = global:register_name(test3, PidTS),
- ?line yes = global:register_name(test4, PidTS),
-
- % set lock on two nodes
- ?line true = req(PidTS, {set_lock, test_lock, self(), [node(), Cp1]}),
- ?line false = req(Pid1, {set_lock, test_lock, self(), [node(), Cp1]}),
- % set same lock on other two nodes
- ?line true = req(Pid2, {set_lock, test_lock, self(), [Cp2, Cp3]}),
- ?line false = req(Pid3, {set_lock, test_lock, self(), [Cp2, Cp3]}),
- % release lock
+ init_condition(Config),
+ OrigNames = global:registered_names(),
+
+ {ok, Cp1} = start_node(cp1, Config),
+ {ok, Cp2} = start_node(cp2, Config),
+ {ok, Cp3} = start_node(cp3, Config),
+
+ %% start one proc on each node
+ PidTS = start_proc(),
+ Pid1 = rpc:call(Cp1, ?MODULE, start_proc, []),
+ Pid2 = rpc:call(Cp2, ?MODULE, start_proc, []),
+ Pid3 = rpc:call(Cp3, ?MODULE, start_proc, []),
+
+ %% register some of them
+ yes = global:register_name(test1, Pid1),
+ yes = global:register_name(test2, Pid2),
+ yes = global:register_name(test3, Pid3),
+ no = global:register_name(test3, PidTS),
+ yes = global:register_name(test4, PidTS),
+
+ %% set lock on two nodes
+ true = req(PidTS, {set_lock, test_lock, self(), [node(), Cp1]}),
+ false = req(Pid1, {set_lock, test_lock, self(), [node(), Cp1]}),
+
+ %% set same lock on other two nodes
+ true = req(Pid2, {set_lock, test_lock, self(), [Cp2, Cp3]}),
+ false = req(Pid3, {set_lock, test_lock, self(), [Cp2, Cp3]}),
+
+ %% release lock
Pid2 ! {del_lock, test_lock, [Cp2, Cp3]},
- ?line test_server:sleep(100),
- % try to set lock on a node that already has the lock
- ?line false = req(Pid2, {set_lock, test_lock, self(), [Cp1, Cp2, Cp3]}),
- % set two locks
- ?line true = req(Pid2, {set_lock, test_lock, self(), [Cp2, Cp3]}),
- ?line true = req(Pid2, {set_lock, test_lock2, self(), [Cp2, Cp3]}),
-
- % kill some processes, make sure all locks/names are released
+ ct:sleep(100),
+
+ %% try to set lock on a node that already has the lock
+ false = req(Pid2, {set_lock, test_lock, self(), [Cp1, Cp2, Cp3]}),
+
+ %% set two locks
+ true = req(Pid2, {set_lock, test_lock, self(), [Cp2, Cp3]}),
+ true = req(Pid2, {set_lock, test_lock2, self(), [Cp2, Cp3]}),
+
+ %% kill some processes, make sure all locks/names are released
exit_p(PidTS),
- ?line ?UNTIL(undefined =:= global:whereis_name(test4)),
- ?line true = global:set_lock({test_lock, self()}, [node(), Cp1], 1),
+ ?UNTIL(undefined =:= global:whereis_name(test4)),
+ true = global:set_lock({test_lock, self()}, [node(), Cp1], 1),
global:del_lock({test_lock, self()}, [node(), Cp1]),
exit_p(Pid2),
- ?line
- ?UNTIL((undefined =:= global:whereis_name(test2)) and
+ ?UNTIL((undefined =:= global:whereis_name(test2)) and
(true =:= global:set_lock({test_lock, self()}, [Cp2, Cp3], 1)) and
(true =:= global:set_lock({test_lock2, self()}, [Cp2, Cp3], 1))),
@@ -888,117 +892,113 @@ names_and_locks(Config) when is_list(Config) ->
exit_p(Pid1),
exit_p(Pid3),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-
-lock_die(suite) -> [];
-lock_die(doc) ->
- ["OTP-6341. Remove locks using monitors."];
+
+%% OTP-6341. Remove locks using monitors.
lock_die(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line {ok, Cp1} = start_node(cp1, Config),
- ?line {ok, Cp2} = start_node(cp2, Config),
+ {ok, Cp1} = start_node(cp1, Config),
+ {ok, Cp2} = start_node(cp2, Config),
%% First test.
LockId = {id, self()},
- ?line Pid2 = start_proc(),
- ?line true = req(Pid2, {set_lock2, LockId, self()}),
+ Pid2 = start_proc(),
+ true = req(Pid2, {set_lock2, LockId, self()}),
- ?line true = global:set_lock(LockId, [Cp1]),
+ true = global:set_lock(LockId, [Cp1]),
%% Id is locked on Cp1 and Cp2 (by Pid2) but not by self():
%% (there is no mon. ref)
- ?line _ = global:del_lock(LockId, [node(), Cp1, Cp2]),
+ _ = global:del_lock(LockId, [node(), Cp1, Cp2]),
+
+ exit_p(Pid2),
- ?line exit_p(Pid2),
-
%% Second test.
- ?line Pid3 = start_proc(),
- ?line true = req(Pid3, {set_lock, id, self(), [Cp1]}),
+ Pid3 = start_proc(),
+ true = req(Pid3, {set_lock, id, self(), [Cp1]}),
%% The lock is removed from Cp1 thanks to monitors.
- ?line exit_p(Pid3),
-
- ?line true = global:set_lock(LockId, [node(), Cp1]),
- ?line _ = global:del_lock(LockId, [node(), Cp1]),
+ exit_p(Pid3),
+
+ true = global:set_lock(LockId, [node(), Cp1]),
+ _ = global:del_lock(LockId, [node(), Cp1]),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp1),
stop_node(Cp2),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-name_die(suite) -> [];
-name_die(doc) ->
- ["OTP-6341. Remove names using monitors."];
+%% OTP-6341. Remove names using monitors.
name_die(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
- ?line [Cp1] = Cps = start_nodes([z], peer, Config), % z > test_server
+ init_condition(Config),
+ OrigNames = global:registered_names(),
+ [Cp1] = Cps = start_nodes([z], peer, Config), % z > test_server
Nodes = lists:sort([node() | Cps]),
- ?line wait_for_ready_net(Config),
-
+ wait_for_ready_net(Config),
+
Name = name_die,
- ?line Pid = rpc:call(Cp1, ?MODULE, start_proc, []),
+ Pid = rpc:call(Cp1, ?MODULE, start_proc, []),
%% Test 1. No resolver is called if the same pid is registered on
%% both partitions.
T1 = node(),
Part1 = [T1],
Part2 = [Cp1],
- ?line rpc_cast(Cp1,
- ?MODULE, part_2_2, [Config,
- Part1,
- Part2,
- []]),
- ?line ?UNTIL(is_ready_partition(Config)),
- ?line ?UNTIL(undefined =:= global:whereis_name(Name)),
- ?line yes = global:register_name(Name, Pid),
-
- ?line pong = net_adm:ping(Cp1),
- ?line wait_for_ready_net(Nodes, Config),
- ?line assert_pid(global:whereis_name(Name)),
+ rpc_cast(Cp1,
+ ?MODULE, part_2_2, [Config,
+ Part1,
+ Part2,
+ []]),
+ ?UNTIL(is_ready_partition(Config)),
+ ?UNTIL(undefined =:= global:whereis_name(Name)),
+ yes = global:register_name(Name, Pid),
+
+ pong = net_adm:ping(Cp1),
+ wait_for_ready_net(Nodes, Config),
+ assert_pid(global:whereis_name(Name)),
exit_p(Pid),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
%% Test 2. Register a name running outside the current partition.
%% Killing the pid will not remove the name from the current
%% partition, unless monitors are used.
- ?line Pid2 = rpc:call(Cp1, ?MODULE, start_proc, []),
- Dir = ?config(priv_dir, Config),
+ Pid2 = rpc:call(Cp1, ?MODULE, start_proc, []),
+ Dir = proplists:get_value(priv_dir, Config),
KillFile = filename:join([Dir, "kill.txt"]),
file:delete(KillFile),
- ?line erlang:spawn(Cp1, fun() -> kill_pid(Pid2, KillFile, Config) end),
- ?line rpc_cast(Cp1,
- ?MODULE, part_2_2, [Config,
- Part1,
- Part2,
- []]),
- ?line ?UNTIL(is_ready_partition(Config)),
- ?line ?UNTIL(undefined =:= global:whereis_name(Name)),
- ?line yes = global:register_name(Name, Pid2),
- ?line touch(KillFile, "kill"),
- ?line file_contents(KillFile, "done", Config),
+ erlang:spawn(Cp1, fun() -> kill_pid(Pid2, KillFile, Config) end),
+ rpc_cast(Cp1,
+ ?MODULE, part_2_2, [Config,
+ Part1,
+ Part2,
+ []]),
+ ?UNTIL(is_ready_partition(Config)),
+ ?UNTIL(undefined =:= global:whereis_name(Name)),
+ yes = global:register_name(Name, Pid2),
+ touch(KillFile, "kill"),
+ file_contents(KillFile, "done", Config),
file:delete(KillFile),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_nodes(Cps),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
kill_pid(Pid, File, Config) ->
@@ -1006,186 +1006,178 @@ kill_pid(Pid, File, Config) ->
exit_p(Pid),
touch(File, "done").
-basic_partition(suite) -> [];
-basic_partition(doc) ->
- ["Tests that two partitioned networks exchange correct info."];
+%% Tests that two partitioned networks exchange correct info.
basic_partition(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
-
- ?line [Cp1, Cp2, Cp3] = start_nodes([cp1, cp2, cp3], peer, Config),
- ?line [Cp1, Cp2, Cp3] = lists:sort(nodes()),
-
- ?line wait_for_ready_net(Config),
-
- % make cp2 and cp3 connected, partitioned from us and cp1
- ?line rpc_cast(Cp2, ?MODULE, part1, [Config, node(), Cp1, Cp3]),
- ?line ?UNTIL(is_ready_partition(Config)),
-
- % start different processes in both partitions
- ?line {Pid, yes} = start_proc(test),
-
- % connect to other partition
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line [Cp1, Cp2, Cp3] = lists:sort(nodes()),
-
- % check names
- ?line ?UNTIL(Pid =:= rpc:call(Cp2, global, whereis_name, [test])),
- ?line ?UNTIL(undefined =/= global:whereis_name(test2)),
- ?line Pid2 = global:whereis_name(test2),
- ?line Pid2 = rpc:call(Cp2, global, whereis_name, [test2]),
- ?line assert_pid(Pid2),
- ?line Pid3 = global:whereis_name(test4),
- ?line ?UNTIL(Pid3 =:= rpc:call(Cp1, global, whereis_name, [test4])),
- ?line assert_pid(Pid3),
-
- % kill all procs
- ?line Pid3 = global:send(test4, die),
- % sleep to let the proc die
+ init_condition(Config),
+ OrigNames = global:registered_names(),
+
+ [Cp1, Cp2, Cp3] = start_nodes([cp1, cp2, cp3], peer, Config),
+ [Cp1, Cp2, Cp3] = lists:sort(nodes()),
+
+ wait_for_ready_net(Config),
+
+ %% make cp2 and cp3 connected, partitioned from us and cp1
+ rpc_cast(Cp2, ?MODULE, part1, [Config, node(), Cp1, Cp3]),
+ ?UNTIL(is_ready_partition(Config)),
+
+ %% start different processes in both partitions
+ {Pid, yes} = start_proc(test),
+
+ %% connect to other partition
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ [Cp1, Cp2, Cp3] = lists:sort(nodes()),
+
+ %% check names
+ ?UNTIL(Pid =:= rpc:call(Cp2, global, whereis_name, [test])),
+ ?UNTIL(undefined =/= global:whereis_name(test2)),
+ Pid2 = global:whereis_name(test2),
+ Pid2 = rpc:call(Cp2, global, whereis_name, [test2]),
+ assert_pid(Pid2),
+ Pid3 = global:whereis_name(test4),
+ ?UNTIL(Pid3 =:= rpc:call(Cp1, global, whereis_name, [test4])),
+ assert_pid(Pid3),
+
+ %% kill all procs
+ Pid3 = global:send(test4, die),
+ %% sleep to let the proc die
wait_for_exit(Pid3),
- ?line ?UNTIL(undefined =:= global:whereis_name(test4)),
-
+ ?UNTIL(undefined =:= global:whereis_name(test4)),
+
exit_p(Pid),
exit_p(Pid2),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-basic_name_partition(suite) ->
- [];
-basic_name_partition(doc) ->
- ["Creates two partitions with two nodes in each partition.",
- "Tests that names are exchanged correctly, and that EXITs",
- "during connect phase are handled correctly."];
+%% Creates two partitions with two nodes in each partition.
+%% Tests that names are exchanged correctly, and that EXITs
+%% during connect phase are handled correctly.
basic_name_partition(Config) when is_list(Config) ->
Timeout = 60,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [Cp1, Cp2, Cp3] = start_nodes([cp1, cp2, cp3], peer, Config),
- ?line [Cp1, Cp2, Cp3] = lists:sort(nodes()),
+ [Cp1, Cp2, Cp3] = start_nodes([cp1, cp2, cp3], peer, Config),
+ [Cp1, Cp2, Cp3] = lists:sort(nodes()),
Nodes = ?NODES,
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- % There used to be more than one name registered for some
- % processes. That was a mistake; there is no support for more than
- % one name per process, and the manual is quite clear about that
- % ("equivalent to the register/2 and whereis/1 BIFs"). The
- % resolver procedure did not take care of such "duplicated" names,
- % which caused this testcase to fail every now and then.
+ %% There used to be more than one name registered for some
+ %% processes. That was a mistake; there is no support for more than
+ %% one name per process, and the manual is quite clear about that
+ %% ("equivalent to the register/2 and whereis/1 BIFs"). The
+ %% resolver procedure did not take care of such "duplicated" names,
+ %% which caused this testcase to fail every now and then.
- % make cp2 and cp3 connected, partitioned from us and cp1
- % us: register name03
- % cp1: register name12
- % cp2: register name12
- % cp3: register name03
-
- ?line rpc_cast(Cp2, ?MODULE, part1_5, [Config, node(), Cp1, Cp3]),
- ?line ?UNTIL(is_ready_partition(Config)),
-
- % start different processes in both partitions
- ?line {_, yes} = start_proc_basic(name03),
- ?line {_, yes} = rpc:call(Cp1, ?MODULE, start_proc_basic, [name12]),
- test_server:sleep(1000),
+ %% make cp2 and cp3 connected, partitioned from us and cp1
+ %% us: register name03
+ %% cp1: register name12
+ %% cp2: register name12
+ %% cp3: register name03
- % connect to other partition
- ?line pong = net_adm:ping(Cp3),
-
- ?line ?UNTIL([Cp1, Cp2, Cp3] =:= lists:sort(nodes())),
- ?line wait_for_ready_net(Config),
- % check names
- ?line Pid03 = global:whereis_name(name03),
- ?line assert_pid(Pid03),
- ?line true = lists:member(node(Pid03), [node(), Cp3]),
- ?line check_everywhere(Nodes, name03, Config),
-
- ?line Pid12 = global:whereis_name(name12),
- ?line assert_pid(Pid12),
- ?line true = lists:member(node(Pid12), [Cp1, Cp2]),
- ?line check_everywhere(Nodes, name12, Config),
-
- % kill all procs
- ?line Pid12 = global:send(name12, die),
- ?line Pid03 = global:send(name03, die),
- % sleep to let the procs die
+ rpc_cast(Cp2, ?MODULE, part1_5, [Config, node(), Cp1, Cp3]),
+ ?UNTIL(is_ready_partition(Config)),
+
+ %% start different processes in both partitions
+ {_, yes} = start_proc_basic(name03),
+ {_, yes} = rpc:call(Cp1, ?MODULE, start_proc_basic, [name12]),
+ ct:sleep(1000),
+
+ %% connect to other partition
+ pong = net_adm:ping(Cp3),
+
+ ?UNTIL([Cp1, Cp2, Cp3] =:= lists:sort(nodes())),
+ wait_for_ready_net(Config),
+
+ %% check names
+ Pid03 = global:whereis_name(name03),
+ assert_pid(Pid03),
+ true = lists:member(node(Pid03), [node(), Cp3]),
+ check_everywhere(Nodes, name03, Config),
+
+ Pid12 = global:whereis_name(name12),
+ assert_pid(Pid12),
+ true = lists:member(node(Pid12), [Cp1, Cp2]),
+ check_everywhere(Nodes, name12, Config),
+
+ %% kill all procs
+ Pid12 = global:send(name12, die),
+ Pid03 = global:send(name03, die),
+
+ %% sleep to let the procs die
wait_for_exit(Pid12),
wait_for_exit(Pid03),
- ?line
?UNTIL(begin
Names = [name03, name12],
lists:duplicate(length(Names), undefined)
=:= [global:whereis_name(Name) || Name <- Names]
end),
-
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-%Peer nodes cp0 - cp6 are started. Break apart the connections from
-%cp3-cp6 to cp0-cp2 and test_server so we get two partitions.
-%In the cp3-cp6 partition, start one process on each node and register
-%using both erlang:register, and global:register (test1 on cp3, test2 on
-%cp4, test3 on cp5, test4 on cp6), using different resolution functions:
-%default for test1, notify_all_name for test2, random_notify_name for test3
-%and one for test4 that sends a message to test_server and keeps the
-%process which is greater in the standard ordering. In the other partition,
-%do the same (test1 on test_server, test2 on cp0, test3 on cp1, test4 on cp2).
-%Sleep a little, then from test_server, connect to cp3-cp6 in order.
-%Check that the values for the registered names are the expected ones, and
-%that the messages from test4 arrive.
-
-advanced_partition(suite) ->
- [];
-advanced_partition(doc) ->
- ["Test that names are resolved correctly when two",
- "partitioned networks connect."];
+%% Peer nodes cp0 - cp6 are started. Break apart the connections from
+%% cp3-cp6 to cp0-cp2 and test_server so we get two partitions.
+%% In the cp3-cp6 partition, start one process on each node and register
+%% using both erlang:register, and global:register (test1 on cp3, test2 on
+%% cp4, test3 on cp5, test4 on cp6), using different resolution functions:
+%% default for test1, notify_all_name for test2, random_notify_name for test3
+%% and one for test4 that sends a message to test_server and keeps the
+%% process which is greater in the standard ordering. In the other partition,
+%% do the same (test1 on test_server, test2 on cp0, test3 on cp1, test4 on cp2).
+%% Sleep a little, then from test_server, connect to cp3-cp6 in order.
+%% Check that the values for the registered names are the expected ones, and
+%% that the messages from test4 arrive.
+
+%% Test that names are resolved correctly when two
+%% partitioned networks connect.
advanced_partition(Config) when is_list(Config) ->
Timeout = 60,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6]
+ [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6]
= start_nodes([cp0, cp1, cp2, cp3, cp4, cp5, cp6], peer, Config),
Nodes = lists:sort([node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6]),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- % make cp3-cp6 connected, partitioned from us and cp0-cp2
- ?line rpc_cast(Cp3, ?MODULE, part2,
- [Config, self(), node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5,Cp6]),
- ?line ?UNTIL(is_ready_partition(Config)),
-
- % start different processes in this partition
- ?line start_procs(self(), Cp0, Cp1, Cp2, Config),
-
- % connect to other partition
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
- ?line pong = net_adm:ping(Cp6),
-
- ?line wait_for_ready_net(Config),
+ %% make cp3-cp6 connected, partitioned from us and cp0-cp2
+ rpc_cast(Cp3, ?MODULE, part2,
+ [Config, self(), node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5,Cp6]),
+ ?UNTIL(is_ready_partition(Config)),
+
+ %% start different processes in this partition
+ start_procs(self(), Cp0, Cp1, Cp2, Config),
+
+ %% connect to other partition
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+ pong = net_adm:ping(Cp6),
+
+ wait_for_ready_net(Config),
- ?line
?UNTIL(lists:member(undefined,
[rpc:call(Cp3, erlang, whereis, [test1]),
rpc:call(node(), erlang, whereis, [test1])])),
@@ -1200,43 +1192,42 @@ advanced_partition(Config) when is_list(Config) ->
Mt3 = rpc:call(Cp1, erlang, whereis, [test3]),
_Mt4 = rpc:call(Cp2, erlang, whereis, [test4]),
- % check names
- ?line Pid1 = global:whereis_name(test1),
- ?line Pid1 = rpc:call(Cp3, global, whereis_name, [test1]),
- ?line assert_pid(Pid1),
- ?line true = lists:member(Pid1, [Nt1, Mt1]),
- ?line true = lists:member(undefined, [Nt1, Mt1]),
- ?line check_everywhere(Nodes, test1, Config),
-
- ?line undefined = global:whereis_name(test2),
- ?line undefined = rpc:call(Cp3, global, whereis_name, [test2]),
- ?line yes = sreq(Nt2, {got_notify, self()}),
- ?line yes = sreq(Mt2, {got_notify, self()}),
- ?line check_everywhere(Nodes, test2, Config),
-
- ?line Pid3 = global:whereis_name(test3),
- ?line Pid3 = rpc:call(Cp3, global, whereis_name, [test3]),
- ?line assert_pid(Pid3),
- ?line true = lists:member(Pid3, [Nt3, Mt3]),
- ?line no = sreq(Pid3, {got_notify, self()}),
- ?line yes = sreq(other(Pid3, [Nt2, Nt3]), {got_notify, self()}),
- ?line check_everywhere(Nodes, test3, Config),
-
- ?line Pid4 = global:whereis_name(test4),
- ?line Pid4 = rpc:call(Cp3, global, whereis_name, [test4]),
- ?line assert_pid(Pid4),
-% ?line true = lists:member(Pid4, [Nt4, Mt4]),
- ?line Pid4 = Nt4,
- ?line check_everywhere(Nodes, test4, Config),
-
- ?line 1 = collect_resolves(),
-
- ?line Pid1 = global:send(test1, die),
+ %% check names
+ Pid1 = global:whereis_name(test1),
+ Pid1 = rpc:call(Cp3, global, whereis_name, [test1]),
+ assert_pid(Pid1),
+ true = lists:member(Pid1, [Nt1, Mt1]),
+ true = lists:member(undefined, [Nt1, Mt1]),
+ check_everywhere(Nodes, test1, Config),
+
+ undefined = global:whereis_name(test2),
+ undefined = rpc:call(Cp3, global, whereis_name, [test2]),
+ yes = sreq(Nt2, {got_notify, self()}),
+ yes = sreq(Mt2, {got_notify, self()}),
+ check_everywhere(Nodes, test2, Config),
+
+ Pid3 = global:whereis_name(test3),
+ Pid3 = rpc:call(Cp3, global, whereis_name, [test3]),
+ assert_pid(Pid3),
+ true = lists:member(Pid3, [Nt3, Mt3]),
+ no = sreq(Pid3, {got_notify, self()}),
+ yes = sreq(other(Pid3, [Nt2, Nt3]), {got_notify, self()}),
+ check_everywhere(Nodes, test3, Config),
+
+ Pid4 = global:whereis_name(test4),
+ Pid4 = rpc:call(Cp3, global, whereis_name, [test4]),
+ assert_pid(Pid4),
+ Pid4 = Nt4,
+ check_everywhere(Nodes, test4, Config),
+
+ 1 = collect_resolves(),
+
+ Pid1 = global:send(test1, die),
exit_p(Pid3),
exit_p(Pid4),
wait_for_exit(Pid1),
wait_for_exit(Pid3),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp0),
@@ -1246,93 +1237,90 @@ advanced_partition(Config) when is_list(Config) ->
stop_node(Cp4),
stop_node(Cp5),
stop_node(Cp6),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-
-%Peer nodes cp0 - cp6 are started, and partitioned just like in
-%advanced_partition. Start cp8, only connected to test_server. Let cp6
-%break apart from the rest, and 12 s later, ping cp0 and cp3, and
-%register the name test5. After the same 12 s, let cp5 halt.
-%Wait for the death of cp5. Ping cp3 (at the same time as cp6 does).
-%Take down cp2. Start cp7, restart cp2. Ping cp4, cp6 and cp8.
-%Now, expect all nodes to be connected and have the same picture of all
-%registered names.
-
-stress_partition(suite) ->
- [];
-stress_partition(doc) ->
- ["Stress global, make a partitioned net, make some nodes",
- "go up/down a bit."];
+
+%% Peer nodes cp0 - cp6 are started, and partitioned just like in
+%% advanced_partition. Start cp8, only connected to test_server. Let cp6
+%% break apart from the rest, and 12 s later, ping cp0 and cp3, and
+%% register the name test5. After the same 12 s, let cp5 halt.
+%% Wait for the death of cp5. Ping cp3 (at the same time as cp6 does).
+%% Take down cp2. Start cp7, restart cp2. Ping cp4, cp6 and cp8.
+%% Now, expect all nodes to be connected and have the same picture of all
+%% registered names.
+
+%% Stress global, make a partitioned net, make some nodes
+%% go up/down a bit.
stress_partition(Config) when is_list(Config) ->
Timeout = 90,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6]
+ [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6]
= start_nodes([cp0, cp1, cp2, cp3, cp4, cp5, cp6], peer, Config),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- % make cp3-cp5 connected, partitioned from us and cp0-cp2
- % cp6 is alone (single node). cp6 pings cp0 and cp3 in 12 secs...
- ?line rpc_cast(Cp3, ?MODULE, part3,
- [Config, self(), node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5,Cp6]),
- ?line ?UNTIL(is_ready_partition(Config)),
-
- % start different processes in this partition
- ?line start_procs(self(), Cp0, Cp1, Cp2, Config),
+ %% make cp3-cp5 connected, partitioned from us and cp0-cp2
+ %% cp6 is alone (single node). cp6 pings cp0 and cp3 in 12 secs...
+ rpc_cast(Cp3, ?MODULE, part3,
+ [Config, self(), node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5,Cp6]),
+ ?UNTIL(is_ready_partition(Config)),
+
+ %% start different processes in this partition
+ start_procs(self(), Cp0, Cp1, Cp2, Config),
+
+ {ok, Cp8} = start_peer_node(cp8, Config),
- ?line {ok, Cp8} = start_peer_node(cp8, Config),
-
monitor_node(Cp5, true),
receive
{nodedown, Cp5} -> ok
after
- 20000 -> test_server:fail({no_nodedown, Cp5})
+ 20000 -> ct:fail({no_nodedown, Cp5})
end,
monitor_node(Cp5, false),
- % Ok, now cp6 pings us, and cp5 will go down.
-
- % connect to other partition
- ?line pong = net_adm:ping(Cp3),
- ?line rpc_cast(Cp2, ?MODULE, crash, [0]),
-
- % Start new nodes
- ?line {ok, Cp7} = start_peer_node(cp7, Config),
- ?line {ok, Cp2_2} = start_peer_node(cp2, Config),
+ %% Ok, now cp6 pings us, and cp5 will go down.
+
+ %% connect to other partition
+ pong = net_adm:ping(Cp3),
+ rpc_cast(Cp2, ?MODULE, crash, [0]),
+
+ %% Start new nodes
+ {ok, Cp7} = start_peer_node(cp7, Config),
+ {ok, Cp2_2} = start_peer_node(cp2, Config),
Nodes = lists:sort([node(), Cp0, Cp1, Cp2_2, Cp3, Cp4, Cp6, Cp7, Cp8]),
put(?nodes_tag, Nodes),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp6),
- ?line pong = net_adm:ping(Cp8),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp6),
+ pong = net_adm:ping(Cp8),
- ?line wait_for_ready_net(Nodes, Config),
+ wait_for_ready_net(Nodes, Config),
- % Make sure that all nodes have the same picture of all names
- ?line check_everywhere(Nodes, test1, Config),
- ?line assert_pid(global:whereis_name(test1)),
-
- ?line check_everywhere(Nodes, test2, Config),
- ?line undefined = global:whereis_name(test2),
+ %% Make sure that all nodes have the same picture of all names
+ check_everywhere(Nodes, test1, Config),
+ assert_pid(global:whereis_name(test1)),
- ?line check_everywhere(Nodes, test3, Config),
- ?line assert_pid(global:whereis_name(test3)),
+ check_everywhere(Nodes, test2, Config),
+ undefined = global:whereis_name(test2),
- ?line check_everywhere(Nodes, test4, Config),
- ?line assert_pid(global:whereis_name(test4)),
+ check_everywhere(Nodes, test3, Config),
+ assert_pid(global:whereis_name(test3)),
- ?line check_everywhere(Nodes, test5, Config),
- ?line ?UNTIL(undefined =:= global:whereis_name(test5)),
-
- ?line assert_pid(global:send(test1, die)),
- ?line assert_pid(global:send(test3, die)),
- ?line assert_pid(global:send(test4, die)),
+ check_everywhere(Nodes, test4, Config),
+ assert_pid(global:whereis_name(test4)),
+
+ check_everywhere(Nodes, test5, Config),
+ ?UNTIL(undefined =:= global:whereis_name(test5)),
+
+ assert_pid(global:send(test1, die)),
+ assert_pid(global:send(test3, die)),
+ assert_pid(global:send(test4, die)),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp0),
@@ -1344,15 +1332,13 @@ stress_partition(Config) when is_list(Config) ->
stop_node(Cp6),
stop_node(Cp7),
stop_node(Cp8),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
%% Use this one to test alot of connection tests
-%% erl -sname ts -rsh ctrsh -pa /clearcase/otp/internal_tools/test_server/ebin/ -ring_line 10000 -s test_server run_test global_SUITE
+%% erl -sname ts -ring_line 10000 -s test_server run_test global_SUITE
-ring_line(suite) -> [];
-ring_line(doc) -> [""];
ring_line(Config) when is_list(Config) ->
{ok, [[N]]} = init:get_argument(ring_line),
loop_it(list_to_integer(N), Config).
@@ -1361,74 +1347,70 @@ loop_it(N, Config) -> loop_it(N,N, Config).
loop_it(0,_, _Config) -> ok;
loop_it(N,M, Config) ->
- test_server:format(1, "Round: ~w", [M-N]),
+ ct:pal(?HI_VERBOSITY, "Round: ~w", [M-N]),
ring(Config),
line(Config),
loop_it(N-1,M, Config).
-ring(suite) ->
- [];
-ring(doc) ->
- ["Make 10 single nodes, all having the same name.",
- "Make all ping its predecessor, pinging in a ring.",
- "Make sure that there's just one winner."];
+%% Make 10 single nodes, all having the same name.
+%% Make all ping its predecessor, pinging in a ring.
+%% Make sure that there's just one winner.
ring(Config) when is_list(Config) ->
Timeout = 60,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6, Cp7, Cp8]
+ [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6, Cp7, Cp8]
= start_nodes([cp0, cp1, cp2, cp3, cp4, cp5, cp6, cp7, cp8],
peer, Config),
Nodes = lists:sort([node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6, Cp7, Cp8]),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
Time = msec() + 7000,
- ?line rpc_cast(Cp0, ?MODULE, single_node, [Time, Cp8, Config]),
- ?line rpc_cast(Cp1, ?MODULE, single_node, [Time, Cp0, Config]),
- ?line rpc_cast(Cp2, ?MODULE, single_node, [Time, Cp1, Config]),
- ?line rpc_cast(Cp3, ?MODULE, single_node, [Time, Cp2, Config]),
- ?line rpc_cast(Cp4, ?MODULE, single_node, [Time, Cp3, Config]),
- ?line rpc_cast(Cp5, ?MODULE, single_node, [Time, Cp4, Config]),
- ?line rpc_cast(Cp6, ?MODULE, single_node, [Time, Cp5, Config]),
- ?line rpc_cast(Cp7, ?MODULE, single_node, [Time, Cp6, Config]),
- ?line rpc_cast(Cp8, ?MODULE, single_node, [Time, Cp7, Config]),
-
- % sleep to make the partitioned net ready
- test_server:sleep(Time - msec()),
-
- ?line pong = net_adm:ping(Cp0),
- ?line pong = net_adm:ping(Cp1),
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
- ?line pong = net_adm:ping(Cp6),
- ?line pong = net_adm:ping(Cp7),
- ?line pong = net_adm:ping(Cp8),
-
- ?line pong = net_adm:ping(Cp0),
- ?line pong = net_adm:ping(Cp1),
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
- ?line pong = net_adm:ping(Cp6),
- ?line pong = net_adm:ping(Cp7),
- ?line pong = net_adm:ping(Cp8),
-
- ?line wait_for_ready_net(Nodes, Config),
-
- % Just make sure that all nodes have the same picture of all names
- ?line check_everywhere(Nodes, single_name, Config),
- ?line assert_pid(global:whereis_name(single_name)),
-
- ?line
+ rpc_cast(Cp0, ?MODULE, single_node, [Time, Cp8, Config]),
+ rpc_cast(Cp1, ?MODULE, single_node, [Time, Cp0, Config]),
+ rpc_cast(Cp2, ?MODULE, single_node, [Time, Cp1, Config]),
+ rpc_cast(Cp3, ?MODULE, single_node, [Time, Cp2, Config]),
+ rpc_cast(Cp4, ?MODULE, single_node, [Time, Cp3, Config]),
+ rpc_cast(Cp5, ?MODULE, single_node, [Time, Cp4, Config]),
+ rpc_cast(Cp6, ?MODULE, single_node, [Time, Cp5, Config]),
+ rpc_cast(Cp7, ?MODULE, single_node, [Time, Cp6, Config]),
+ rpc_cast(Cp8, ?MODULE, single_node, [Time, Cp7, Config]),
+
+ %% sleep to make the partitioned net ready
+ ct:sleep(Time - msec()),
+
+ pong = net_adm:ping(Cp0),
+ pong = net_adm:ping(Cp1),
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+ pong = net_adm:ping(Cp6),
+ pong = net_adm:ping(Cp7),
+ pong = net_adm:ping(Cp8),
+
+ pong = net_adm:ping(Cp0),
+ pong = net_adm:ping(Cp1),
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+ pong = net_adm:ping(Cp6),
+ pong = net_adm:ping(Cp7),
+ pong = net_adm:ping(Cp8),
+
+ wait_for_ready_net(Nodes, Config),
+
+ %% Just make sure that all nodes have the same picture of all names
+ check_everywhere(Nodes, single_name, Config),
+ assert_pid(global:whereis_name(single_name)),
+
?UNTIL(begin
{Ns2, []} = rpc:multicall(Nodes, erlang, whereis,
[single_name]),
@@ -1437,10 +1419,10 @@ ring(Config) when is_list(Config) ->
end,
0, Ns2)
end),
-
- ?line assert_pid(global:send(single_name, die)),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ assert_pid(global:send(single_name, die)),
+
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp0),
@@ -1452,64 +1434,60 @@ ring(Config) when is_list(Config) ->
stop_node(Cp6),
stop_node(Cp7),
stop_node(Cp8),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-simple_ring(suite) ->
- [];
-simple_ring(doc) ->
- ["Simpler version of the ring case. Used because there are some",
- "distribution problems with many nodes.",
- "Make 6 single nodes, all having the same name.",
- "Make all ping its predecessor, pinging in a ring.",
- "Make sure that there's just one winner."];
+%% Simpler version of the ring case. Used because there are some
+%% distribution problems with many nodes.
+%% Make 6 single nodes, all having the same name.
+%% Make all ping its predecessor, pinging in a ring.
+%% Make sure that there's just one winner.
simple_ring(Config) when is_list(Config) ->
Timeout = 60,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
Names = [cp0, cp1, cp2, cp3, cp4, cp5],
- ?line [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5]
+ [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5]
= start_nodes(Names, peer, Config),
Nodes = lists:sort([node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5]),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
Time = msec() + 5000,
- ?line rpc_cast(Cp0, ?MODULE, single_node, [Time, Cp5, Config]),
- ?line rpc_cast(Cp1, ?MODULE, single_node, [Time, Cp0, Config]),
- ?line rpc_cast(Cp2, ?MODULE, single_node, [Time, Cp1, Config]),
- ?line rpc_cast(Cp3, ?MODULE, single_node, [Time, Cp2, Config]),
- ?line rpc_cast(Cp4, ?MODULE, single_node, [Time, Cp3, Config]),
- ?line rpc_cast(Cp5, ?MODULE, single_node, [Time, Cp4, Config]),
-
- % sleep to make the partitioned net ready
- test_server:sleep(Time - msec()),
-
- ?line pong = net_adm:ping(Cp0),
- ?line pong = net_adm:ping(Cp1),
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
-
- ?line pong = net_adm:ping(Cp0),
- ?line pong = net_adm:ping(Cp1),
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
-
- ?line wait_for_ready_net(Nodes, Config),
-
- % Just make sure that all nodes have the same picture of all names
- ?line check_everywhere(Nodes, single_name, Config),
- ?line assert_pid(global:whereis_name(single_name)),
-
- ?line
+ rpc_cast(Cp0, ?MODULE, single_node, [Time, Cp5, Config]),
+ rpc_cast(Cp1, ?MODULE, single_node, [Time, Cp0, Config]),
+ rpc_cast(Cp2, ?MODULE, single_node, [Time, Cp1, Config]),
+ rpc_cast(Cp3, ?MODULE, single_node, [Time, Cp2, Config]),
+ rpc_cast(Cp4, ?MODULE, single_node, [Time, Cp3, Config]),
+ rpc_cast(Cp5, ?MODULE, single_node, [Time, Cp4, Config]),
+
+ %% sleep to make the partitioned net ready
+ ct:sleep(Time - msec()),
+
+ pong = net_adm:ping(Cp0),
+ pong = net_adm:ping(Cp1),
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+
+ pong = net_adm:ping(Cp0),
+ pong = net_adm:ping(Cp1),
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+
+ wait_for_ready_net(Nodes, Config),
+
+ %% Just make sure that all nodes have the same picture of all names
+ check_everywhere(Nodes, single_name, Config),
+ assert_pid(global:whereis_name(single_name)),
+
?UNTIL(begin
{Ns2, []} = rpc:multicall(Nodes, erlang, whereis,
[single_name]),
@@ -1518,10 +1496,10 @@ simple_ring(Config) when is_list(Config) ->
end,
0, Ns2)
end),
-
- ?line assert_pid(global:send(single_name, die)),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ assert_pid(global:send(single_name, die)),
+
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp0),
@@ -1530,72 +1508,68 @@ simple_ring(Config) when is_list(Config) ->
stop_node(Cp3),
stop_node(Cp4),
stop_node(Cp5),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-line(suite) ->
- [];
-line(doc) ->
- ["Make 6 single nodes, all having the same name.",
- "Make all ping its predecessor, pinging in a line.",
- "Make sure that there's just one winner."];
+%% Make 6 single nodes, all having the same name.
+%% Make all ping its predecessor, pinging in a line.
+%% Make sure that there's just one winner.
line(Config) when is_list(Config) ->
Timeout = 60,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6, Cp7, Cp8]
+ [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6, Cp7, Cp8]
= start_nodes([cp0, cp1, cp2, cp3, cp4, cp5, cp6, cp7, cp8],
peer, Config),
Nodes = lists:sort([node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6, Cp7, Cp8]),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
Time = msec() + 7000,
- ?line rpc_cast(Cp0, ?MODULE, single_node,
- [Time, Cp0, Config]), % ping ourself!
- ?line rpc_cast(Cp1, ?MODULE, single_node, [Time, Cp0, Config]),
- ?line rpc_cast(Cp2, ?MODULE, single_node, [Time, Cp1, Config]),
- ?line rpc_cast(Cp3, ?MODULE, single_node, [Time, Cp2, Config]),
- ?line rpc_cast(Cp4, ?MODULE, single_node, [Time, Cp3, Config]),
- ?line rpc_cast(Cp5, ?MODULE, single_node, [Time, Cp4, Config]),
- ?line rpc_cast(Cp6, ?MODULE, single_node, [Time, Cp5, Config]),
- ?line rpc_cast(Cp7, ?MODULE, single_node, [Time, Cp6, Config]),
- ?line rpc_cast(Cp8, ?MODULE, single_node, [Time, Cp7, Config]),
-
- % sleep to make the partitioned net ready
- test_server:sleep(Time - msec()),
-
- ?line pong = net_adm:ping(Cp0),
- ?line pong = net_adm:ping(Cp1),
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
- ?line pong = net_adm:ping(Cp6),
- ?line pong = net_adm:ping(Cp7),
- ?line pong = net_adm:ping(Cp8),
-
- ?line pong = net_adm:ping(Cp0),
- ?line pong = net_adm:ping(Cp1),
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
- ?line pong = net_adm:ping(Cp6),
- ?line pong = net_adm:ping(Cp7),
- ?line pong = net_adm:ping(Cp8),
-
- ?line wait_for_ready_net(Nodes, Config),
-
- % Just make sure that all nodes have the same picture of all names
- ?line check_everywhere(Nodes, single_name, Config),
- ?line assert_pid(global:whereis_name(single_name)),
-
- ?line
+ rpc_cast(Cp0, ?MODULE, single_node,
+ [Time, Cp0, Config]), % ping ourself!
+ rpc_cast(Cp1, ?MODULE, single_node, [Time, Cp0, Config]),
+ rpc_cast(Cp2, ?MODULE, single_node, [Time, Cp1, Config]),
+ rpc_cast(Cp3, ?MODULE, single_node, [Time, Cp2, Config]),
+ rpc_cast(Cp4, ?MODULE, single_node, [Time, Cp3, Config]),
+ rpc_cast(Cp5, ?MODULE, single_node, [Time, Cp4, Config]),
+ rpc_cast(Cp6, ?MODULE, single_node, [Time, Cp5, Config]),
+ rpc_cast(Cp7, ?MODULE, single_node, [Time, Cp6, Config]),
+ rpc_cast(Cp8, ?MODULE, single_node, [Time, Cp7, Config]),
+
+ %% Sleep to make the partitioned net ready
+ ct:sleep(Time - msec()),
+
+ pong = net_adm:ping(Cp0),
+ pong = net_adm:ping(Cp1),
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+ pong = net_adm:ping(Cp6),
+ pong = net_adm:ping(Cp7),
+ pong = net_adm:ping(Cp8),
+
+ pong = net_adm:ping(Cp0),
+ pong = net_adm:ping(Cp1),
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+ pong = net_adm:ping(Cp6),
+ pong = net_adm:ping(Cp7),
+ pong = net_adm:ping(Cp8),
+
+ wait_for_ready_net(Nodes, Config),
+
+ %% Just make sure that all nodes have the same picture of all names
+ check_everywhere(Nodes, single_name, Config),
+ assert_pid(global:whereis_name(single_name)),
+
?UNTIL(begin
{Ns2, []} = rpc:multicall(Nodes, erlang, whereis,
[single_name]),
@@ -1604,10 +1578,10 @@ line(Config) when is_list(Config) ->
end,
0, Ns2)
end),
-
- ?line assert_pid(global:send(single_name, die)),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ assert_pid(global:send(single_name, die)),
+
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp0),
@@ -1619,65 +1593,61 @@ line(Config) when is_list(Config) ->
stop_node(Cp6),
stop_node(Cp7),
stop_node(Cp8),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-simple_line(suite) ->
- [];
-simple_line(doc) ->
- ["Simpler version of the line case. Used because there are some",
- "distribution problems with many nodes.",
- "Make 6 single nodes, all having the same name.",
- "Make all ping its predecessor, pinging in a line.",
- "Make sure that there's just one winner."];
+%% Simpler version of the line case. Used because there are some
+%% distribution problems with many nodes.
+%% Make 6 single nodes, all having the same name.
+%% Make all ping its predecessor, pinging in a line.
+%% Make sure that there's just one winner.
simple_line(Config) when is_list(Config) ->
Timeout = 60,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5]
+ [Cp0, Cp1, Cp2, Cp3, Cp4, Cp5]
= start_nodes([cp0, cp1, cp2, cp3, cp4, cp5], peer, Config),
Nodes = lists:sort([node(), Cp0, Cp1, Cp2, Cp3, Cp4, Cp5]),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
Time = msec() + 5000,
- ?line rpc_cast(Cp0, ?MODULE, single_node,
- [Time, Cp0, Config]), % ping ourself!
- ?line rpc_cast(Cp1, ?MODULE, single_node, [Time, Cp0, Config]),
- ?line rpc_cast(Cp2, ?MODULE, single_node, [Time, Cp1, Config]),
- ?line rpc_cast(Cp3, ?MODULE, single_node, [Time, Cp2, Config]),
- ?line rpc_cast(Cp4, ?MODULE, single_node, [Time, Cp3, Config]),
- ?line rpc_cast(Cp5, ?MODULE, single_node, [Time, Cp4, Config]),
-
- % sleep to make the partitioned net ready
- test_server:sleep(Time - msec()),
-
- ?line pong = net_adm:ping(Cp0),
- ?line pong = net_adm:ping(Cp1),
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
-
- ?line pong = net_adm:ping(Cp0),
- ?line pong = net_adm:ping(Cp1),
- ?line pong = net_adm:ping(Cp2),
- ?line pong = net_adm:ping(Cp3),
- ?line pong = net_adm:ping(Cp4),
- ?line pong = net_adm:ping(Cp5),
-
- ?line wait_for_ready_net(Nodes, Config),
-
- % Just make sure that all nodes have the same picture of all names
- ?line check_everywhere(Nodes, single_name, Config),
- ?line assert_pid(global:whereis_name(single_name)),
-
- ?line
+ rpc_cast(Cp0, ?MODULE, single_node,
+ [Time, Cp0, Config]), % ping ourself!
+ rpc_cast(Cp1, ?MODULE, single_node, [Time, Cp0, Config]),
+ rpc_cast(Cp2, ?MODULE, single_node, [Time, Cp1, Config]),
+ rpc_cast(Cp3, ?MODULE, single_node, [Time, Cp2, Config]),
+ rpc_cast(Cp4, ?MODULE, single_node, [Time, Cp3, Config]),
+ rpc_cast(Cp5, ?MODULE, single_node, [Time, Cp4, Config]),
+
+ %% sleep to make the partitioned net ready
+ ct:sleep(Time - msec()),
+
+ pong = net_adm:ping(Cp0),
+ pong = net_adm:ping(Cp1),
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+
+ pong = net_adm:ping(Cp0),
+ pong = net_adm:ping(Cp1),
+ pong = net_adm:ping(Cp2),
+ pong = net_adm:ping(Cp3),
+ pong = net_adm:ping(Cp4),
+ pong = net_adm:ping(Cp5),
+
+ wait_for_ready_net(Nodes, Config),
+
+ %% Just make sure that all nodes have the same picture of all names
+ check_everywhere(Nodes, single_name, Config),
+ assert_pid(global:whereis_name(single_name)),
+
?UNTIL(begin
{Ns2, []} = rpc:multicall(Nodes, erlang, whereis,
[single_name]),
@@ -1686,10 +1656,10 @@ simple_line(Config) when is_list(Config) ->
end,
0, Ns2)
end),
-
- ?line assert_pid(global:send(single_name, die)),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ assert_pid(global:send(single_name, die)),
+
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_node(Cp0),
@@ -1698,82 +1668,74 @@ simple_line(Config) when is_list(Config) ->
stop_node(Cp3),
stop_node(Cp4),
stop_node(Cp5),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-
-otp_1849(suite) -> [];
-otp_1849(doc) ->
- ["Test ticket: Global should keep track of all pids that set the same lock."];
+
+%% Test ticket: Global should keep track of all pids that set the same lock.
otp_1849(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line {ok, Cp1} = start_node(cp1, Config),
- ?line {ok, Cp2} = start_node(cp2, Config),
- ?line {ok, Cp3} = start_node(cp3, Config),
-
- ?line wait_for_ready_net(Config),
-
- % start procs on each node
- ?line Pid1 = rpc:call(Cp1, ?MODULE, start_proc, []),
- ?line assert_pid(Pid1),
- ?line Pid2 = rpc:call(Cp2, ?MODULE, start_proc, []),
- ?line assert_pid(Pid2),
- ?line Pid3 = rpc:call(Cp3, ?MODULE, start_proc, []),
- ?line assert_pid(Pid3),
-
- % set a lock on every node
- ?line true = req(Pid1, {set_lock2, {test_lock, ?MODULE}, self()}),
- ?line true = req(Pid2, {set_lock2, {test_lock, ?MODULE}, self()}),
- ?line true = req(Pid3, {set_lock2, {test_lock, ?MODULE}, self()}),
-
- ?line
- ?UNTIL(begin
+ init_condition(Config),
+ {ok, Cp1} = start_node(cp1, Config),
+ {ok, Cp2} = start_node(cp2, Config),
+ {ok, Cp3} = start_node(cp3, Config),
+
+ wait_for_ready_net(Config),
+
+ %% start procs on each node
+ Pid1 = rpc:call(Cp1, ?MODULE, start_proc, []),
+ assert_pid(Pid1),
+ Pid2 = rpc:call(Cp2, ?MODULE, start_proc, []),
+ assert_pid(Pid2),
+ Pid3 = rpc:call(Cp3, ?MODULE, start_proc, []),
+ assert_pid(Pid3),
+
+ %% set a lock on every node
+ true = req(Pid1, {set_lock2, {test_lock, ?MODULE}, self()}),
+ true = req(Pid2, {set_lock2, {test_lock, ?MODULE}, self()}),
+ true = req(Pid3, {set_lock2, {test_lock, ?MODULE}, self()}),
+
+ ?UNTIL(begin
[{test_lock, ?MODULE, Lock1}] =
rpc:call(Cp1, ets, tab2list, [global_locks]),
3 =:= length(Lock1)
end),
- ?line true = req(Pid3, {del_lock2, {test_lock, ?MODULE}, self()}),
- ?line
+ true = req(Pid3, {del_lock2, {test_lock, ?MODULE}, self()}),
?UNTIL(begin
[{test_lock, ?MODULE, Lock2}] =
rpc:call(Cp1, ets, tab2list, [global_locks]),
2 =:= length(Lock2)
end),
- ?line true = req(Pid2, {del_lock2, {test_lock, ?MODULE}, self()}),
- ?line
+ true = req(Pid2, {del_lock2, {test_lock, ?MODULE}, self()}),
?UNTIL(begin
[{test_lock, ?MODULE, Lock3}] =
rpc:call(Cp1, ets, tab2list, [global_locks]),
1 =:= length(Lock3)
end),
- ?line true = req(Pid1, {del_lock2, {test_lock, ?MODULE}, self()}),
- ?line ?UNTIL([] =:= rpc:call(Cp1, ets, tab2list, [global_locks])),
+ true = req(Pid1, {del_lock2, {test_lock, ?MODULE}, self()}),
+ ?UNTIL([] =:= rpc:call(Cp1, ets, tab2list, [global_locks])),
- ?line true = req(Pid1, {set_lock2, {test_lock, ?MODULE}, self()}),
- ?line true = req(Pid2, {set_lock2, {test_lock, ?MODULE}, self()}),
- ?line true = req(Pid3, {set_lock2, {test_lock, ?MODULE}, self()}),
- ?line false = req(Pid2, {set_lock2, {test_lock, not_valid}, self()}),
+ true = req(Pid1, {set_lock2, {test_lock, ?MODULE}, self()}),
+ true = req(Pid2, {set_lock2, {test_lock, ?MODULE}, self()}),
+ true = req(Pid3, {set_lock2, {test_lock, ?MODULE}, self()}),
+ false = req(Pid2, {set_lock2, {test_lock, not_valid}, self()}),
exit_p(Pid1),
- ?line
?UNTIL(begin
[{test_lock, ?MODULE, Lock10}] =
rpc:call(Cp1, ets, tab2list, [global_locks]),
2 =:= length(Lock10)
end),
- ?line
?UNTIL(begin
[{test_lock, ?MODULE, Lock11}] =
rpc:call(Cp2, ets, tab2list, [global_locks]),
2 =:= length(Lock11)
end),
- ?line
?UNTIL(begin
[{test_lock, ?MODULE, Lock12}] =
rpc:call(Cp3, ets, tab2list, [global_locks]),
@@ -1784,13 +1746,11 @@ otp_1849(Config) when is_list(Config) ->
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-
-otp_3162(suite) -> [];
-otp_3162(doc) ->
- ["Test ticket: Deadlock in global"];
+
+%% Test ticket: Deadlock in global.
otp_3162(Config) when is_list(Config) ->
StartFun = fun() ->
{ok, Cp1} = start_node(cp1, Config),
@@ -1804,77 +1764,74 @@ do_otp_3162(StartFun, Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line [Cp1, Cp2, Cp3] = StartFun(),
+ init_condition(Config),
+ [Cp1, Cp2, Cp3] = StartFun(),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- % start procs on each node
- ?line Pid1 = rpc:call(Cp1, ?MODULE, start_proc4, [kalle]),
- ?line assert_pid(Pid1),
- ?line Pid2 = rpc:call(Cp2, ?MODULE, start_proc4, [stina]),
- ?line assert_pid(Pid2),
- ?line Pid3 = rpc:call(Cp3, ?MODULE, start_proc4, [vera]),
- ?line assert_pid(Pid3),
+ %% start procs on each node
+ Pid1 = rpc:call(Cp1, ?MODULE, start_proc4, [kalle]),
+ assert_pid(Pid1),
+ Pid2 = rpc:call(Cp2, ?MODULE, start_proc4, [stina]),
+ assert_pid(Pid2),
+ Pid3 = rpc:call(Cp3, ?MODULE, start_proc4, [vera]),
+ assert_pid(Pid3),
- ?line rpc_disconnect_node(Cp1, Cp2, Config),
+ rpc_disconnect_node(Cp1, Cp2, Config),
- ?line ?UNTIL
+ ?UNTIL
([Cp3] =:= lists:sort(rpc:call(Cp1, erlang, nodes, [])) -- [node()]),
?UNTIL([kalle, vera] =:=
- lists:sort(rpc:call(Cp1, global, registered_names, []))),
- ?line ?UNTIL
+ lists:sort(rpc:call(Cp1, global, registered_names, []))),
+ ?UNTIL
([Cp3] =:= lists:sort(rpc:call(Cp2, erlang, nodes, [])) -- [node()]),
?UNTIL([stina, vera] =:=
- lists:sort(rpc:call(Cp2, global, registered_names, []))),
- ?line ?UNTIL
+ lists:sort(rpc:call(Cp2, global, registered_names, []))),
+ ?UNTIL
([Cp1, Cp2] =:=
- lists:sort(rpc:call(Cp3, erlang, nodes, [])) -- [node()]),
+ lists:sort(rpc:call(Cp3, erlang, nodes, [])) -- [node()]),
?UNTIL([kalle, stina, vera] =:=
- lists:sort(rpc:call(Cp3, global, registered_names, []))),
+ lists:sort(rpc:call(Cp3, global, registered_names, []))),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cp1]),
+ pong = rpc:call(Cp2, net_adm, ping, [Cp1]),
- ?line ?UNTIL
+ ?UNTIL
([Cp2, Cp3] =:=
- lists:sort(rpc:call(Cp1, erlang, nodes, [])) -- [node()]),
- ?line
+ lists:sort(rpc:call(Cp1, erlang, nodes, [])) -- [node()]),
?UNTIL(begin
NN = lists:sort(rpc:call(Cp1, global, registered_names, [])),
[kalle, stina, vera] =:= NN
end),
- ?line ?UNTIL
+ ?UNTIL
([Cp1, Cp3] =:=
- lists:sort(rpc:call(Cp2, erlang, nodes, [])) -- [node()]),
+ lists:sort(rpc:call(Cp2, erlang, nodes, [])) -- [node()]),
?UNTIL([kalle, stina, vera] =:=
- lists:sort(rpc:call(Cp2, global, registered_names, []))),
- ?line ?UNTIL
+ lists:sort(rpc:call(Cp2, global, registered_names, []))),
+ ?UNTIL
([Cp1, Cp2] =:=
- lists:sort(rpc:call(Cp3, erlang, nodes, [])) -- [node()]),
+ lists:sort(rpc:call(Cp3, erlang, nodes, [])) -- [node()]),
?UNTIL([kalle, stina, vera] =:=
- lists:sort(rpc:call(Cp3, global, registered_names, []))),
+ lists:sort(rpc:call(Cp3, global, registered_names, []))),
write_high_level_trace(Config),
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-
-otp_5640(suite) -> [];
-otp_5640(doc) ->
- ["OTP-5640. 'allow' multiple names for registered processes."];
+
+%% OTP-5640. 'allow' multiple names for registered processes.
otp_5640(Config) when is_list(Config) ->
Timeout = 25,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
init_condition(Config),
- ?line {ok, B} = start_node(b, Config),
+ {ok, B} = start_node(b, Config),
- ?line Nodes = lists:sort([node(), B]),
- ?line wait_for_ready_net(Nodes, Config),
+ Nodes = lists:sort([node(), B]),
+ wait_for_ready_net(Nodes, Config),
Server = whereis(global_name_server),
ServerB = rpc:call(B, erlang, whereis, [global_name_server]),
@@ -1882,50 +1839,50 @@ otp_5640(Config) when is_list(Config) ->
Me = self(),
Proc = spawn(fun() -> otp_5640_proc(Me) end),
- ?line yes = global:register_name(name1, Proc),
- ?line no = global:register_name(name2, Proc),
+ yes = global:register_name(name1, Proc),
+ no = global:register_name(name2, Proc),
- ?line ok = application:set_env(kernel, global_multi_name_action, allow),
- ?line yes = global:register_name(name2, Proc),
+ ok = application:set_env(kernel, global_multi_name_action, allow),
+ yes = global:register_name(name2, Proc),
- test_server:sleep(100),
- ?line Proc = global:whereis_name(name1),
- ?line Proc = global:whereis_name(name2),
- ?line check_everywhere(Nodes, name1, Config),
- ?line check_everywhere(Nodes, name2, Config),
+ ct:sleep(100),
+ Proc = global:whereis_name(name1),
+ Proc = global:whereis_name(name2),
+ check_everywhere(Nodes, name1, Config),
+ check_everywhere(Nodes, name2, Config),
- ?line {monitors_2levels, MonBy1} = mon_by_servers(Proc),
- ?line [] = ([Server,Server,ServerB,ServerB] -- MonBy1),
- ?line {links,[]} = process_info(Proc, links),
- ?line _ = global:unregister_name(name1),
+ {monitors_2levels, MonBy1} = mon_by_servers(Proc),
+ [] = ([Server,Server,ServerB,ServerB] -- MonBy1),
+ {links,[]} = process_info(Proc, links),
+ _ = global:unregister_name(name1),
- test_server:sleep(100),
- ?line undefined = global:whereis_name(name1),
- ?line Proc = global:whereis_name(name2),
- ?line check_everywhere(Nodes, name1, Config),
- ?line check_everywhere(Nodes, name2, Config),
+ ct:sleep(100),
+ undefined = global:whereis_name(name1),
+ Proc = global:whereis_name(name2),
+ check_everywhere(Nodes, name1, Config),
+ check_everywhere(Nodes, name2, Config),
- ?line {monitors_2levels, MonBy2} = mon_by_servers(Proc),
- ?line [] = ([Server,ServerB] -- MonBy2),
+ {monitors_2levels, MonBy2} = mon_by_servers(Proc),
+ [] = ([Server,ServerB] -- MonBy2),
TmpMonBy2 = MonBy2 -- [Server,ServerB],
- ?line TmpMonBy2 = TmpMonBy2 -- [Server,ServerB],
- ?line {links,[]} = process_info(Proc, links),
+ TmpMonBy2 = TmpMonBy2 -- [Server,ServerB],
+ {links,[]} = process_info(Proc, links),
- ?line yes = global:register_name(name1, Proc),
+ yes = global:register_name(name1, Proc),
Proc ! die,
- test_server:sleep(100),
- ?line undefined = global:whereis_name(name1),
- ?line undefined = global:whereis_name(name2),
- ?line check_everywhere(Nodes, name1, Config),
- ?line check_everywhere(Nodes, name2, Config),
- ?line {monitors, GMonitors} = process_info(Server, monitors),
- ?line false = lists:member({process, Proc}, GMonitors),
+ ct:sleep(100),
+ undefined = global:whereis_name(name1),
+ undefined = global:whereis_name(name2),
+ check_everywhere(Nodes, name1, Config),
+ check_everywhere(Nodes, name2, Config),
+ {monitors, GMonitors} = process_info(Server, monitors),
+ false = lists:member({process, Proc}, GMonitors),
write_high_level_trace(Config),
stop_node(B),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
otp_5640_proc(_Parent) ->
@@ -1934,45 +1891,42 @@ otp_5640_proc(_Parent) ->
exit(normal)
end.
-otp_5737(suite) -> [];
-otp_5737(doc) ->
- ["OTP-5737. set_lock/3 and trans/4 accept Retries = 0."];
+%% OTP-5737. set_lock/3 and trans/4 accept Retries = 0.
otp_5737(Config) when is_list(Config) ->
Timeout = 25,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
+ init_condition(Config),
LockId = {?MODULE,self()},
Nodes = [node()],
- ?line {'EXIT', _} = (catch global:set_lock(LockId, Nodes, -1)),
- ?line {'EXIT', _} = (catch global:set_lock(LockId, Nodes, a)),
- ?line true = global:set_lock(LockId, Nodes, 0),
+ {'EXIT', _} = (catch global:set_lock(LockId, Nodes, -1)),
+ {'EXIT', _} = (catch global:set_lock(LockId, Nodes, a)),
+ true = global:set_lock(LockId, Nodes, 0),
Time1 = now(),
- ?line false = global:set_lock({?MODULE,not_me}, Nodes, 0),
- ?line true = timer:now_diff(now(), Time1) < 5000,
- ?line _ = global:del_lock(LockId, Nodes),
+ false = global:set_lock({?MODULE,not_me}, Nodes, 0),
+ true = timer:now_diff(now(), Time1) < 5000,
+ _ = global:del_lock(LockId, Nodes),
Fun = fun() -> ok end,
- ?line {'EXIT', _} = (catch global:trans(LockId, Fun, Nodes, -1)),
- ?line {'EXIT', _} = (catch global:trans(LockId, Fun, Nodes, a)),
- ?line ok = global:trans(LockId, Fun, Nodes, 0),
+ {'EXIT', _} = (catch global:trans(LockId, Fun, Nodes, -1)),
+ {'EXIT', _} = (catch global:trans(LockId, Fun, Nodes, a)),
+ ok = global:trans(LockId, Fun, Nodes, 0),
write_high_level_trace(Config),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-otp_6931(suite) -> [];
-otp_6931(doc) -> ["OTP-6931. Ignore nodeup when connect_all=false."];
+%% OTP-6931. Ignore nodeup when connect_all=false.
otp_6931(Config) when is_list(Config) ->
Me = self(),
- ?line {ok, CAf} = start_non_connecting_node(ca_false, Config),
- ?line ok = rpc:call(CAf, error_logger, add_report_handler, [?MODULE, Me]),
- ?line info = rpc:call(CAf, error_logger, warning_map, []),
- ?line {global_name_server,CAf} ! {nodeup, fake_node},
+ {ok, CAf} = start_non_connecting_node(ca_false, Config),
+ ok = rpc:call(CAf, error_logger, add_report_handler, [?MODULE, Me]),
+ info = rpc:call(CAf, error_logger, warning_map, []),
+ {global_name_server,CAf} ! {nodeup, fake_node},
timer:sleep(100),
stop_node(CAf),
- receive {nodeup,fake_node} -> test_server:fail({info_report, was, sent})
+ receive {nodeup,fake_node} -> ct:fail({info_report, was, sent})
after 1000 -> ok
end,
ok.
@@ -1980,18 +1934,17 @@ otp_6931(Config) when is_list(Config) ->
%%%-----------------------------------------------------------------
%%% Testing a disconnected node. Not two partitions.
%%%-----------------------------------------------------------------
-simple_disconnect(suite) -> [];
-simple_disconnect(doc) -> ["OTP-5563. Disconnected nodes (not partitions)"];
+%% OTP-5563. Disconnected nodes (not partitions).
simple_disconnect(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
%% Three nodes (test_server, n_1, n_2).
- ?line [Cp1, Cp2] = Cps = start_nodes([n_1, n_2], peer, Config),
- ?line wait_for_ready_net(Config),
+ [Cp1, Cp2] = Cps = start_nodes([n_1, n_2], peer, Config),
+ wait_for_ready_net(Config),
Nodes = lists:sort([node() | Cps]),
@@ -2001,39 +1954,39 @@ simple_disconnect(Config) when is_list(Config) ->
Resolver = {no_module, resolve_none}, % will never be called
PingNode = Cp2,
- ?line {_Pid1, yes} =
+ {_Pid1, yes} =
rpc:call(Cp1, ?MODULE, start_resolver, [Name, Resolver]),
- test_server:sleep(100),
+ ct:sleep(100),
%% Disconnect test_server and Cp2.
- ?line true = erlang:disconnect_node(Cp2),
- test_server:sleep(500),
+ true = erlang:disconnect_node(Cp2),
+ ct:sleep(500),
%% _Pid is registered on Cp1. The exchange of names between Cp2 and
%% test_server sees two identical pids.
- ?line pong = net_adm:ping(PingNode),
- ?line ?UNTIL(Cps =:= lists:sort(nodes())),
+ pong = net_adm:ping(PingNode),
+ ?UNTIL(Cps =:= lists:sort(nodes())),
- ?line {_, Trace0} = collect_tracers(Nodes),
- ?line Resolvers = [P || {_Node,new_resolver,{pid,P}} <- Trace0],
- ?line lists:foreach(fun(P) -> P ! die end, Resolvers),
- ?line lists:foreach(fun(P) -> wait_for_exit(P) end, Resolvers),
- ?line check_everywhere(Nodes, Name, Config),
- ?line undefined = global:whereis_name(Name),
+ {_, Trace0} = collect_tracers(Nodes),
+ Resolvers = [P || {_Node,new_resolver,{pid,P}} <- Trace0],
+ lists:foreach(fun(P) -> P ! die end, Resolvers),
+ lists:foreach(fun(P) -> wait_for_exit(P) end, Resolvers),
+ check_everywhere(Nodes, Name, Config),
+ undefined = global:whereis_name(Name),
- ?line {_, Trace1} = collect_tracers(Nodes),
+ {_, Trace1} = collect_tracers(Nodes),
Trace = Trace0 ++ Trace1,
- ?line [] = [foo || {_, resolve_none, _, _} <- Trace],
+ [] = [foo || {_, resolve_none, _, _} <- Trace],
- ?line Gs = name_servers(Nodes),
- ?line [_, _, _] = monitored_by_node(Trace, Gs),
+ Gs = name_servers(Nodes),
+ [_, _, _] = monitored_by_node(Trace, Gs),
lists:foreach(fun(N) -> rpc:call(N, ?MODULE, stop_tracer, []) end, Nodes),
- ?line OrigNames = global:registered_names(),
+ OrigNames = global:registered_names(),
write_high_level_trace(Config),
stop_nodes(Cps),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
%% Not used right now.
@@ -2052,7 +2005,7 @@ simple_dis(Nodes0, Name, Resolver, Config) ->
simple_dis_node(_Node, DisNodes, _Name, _Resolver, Config) ->
lists:foreach(
fun(OtherNode) -> _ = erlang:disconnect_node(OtherNode) end, DisNodes),
- ?line ?UNTIL(DisNodes -- nodes() =:= DisNodes),
+ ?UNTIL(DisNodes -- nodes() =:= DisNodes),
ok.
@@ -2072,19 +2025,18 @@ simple_dis_node(_Node, DisNodes, _Name, _Resolver, Config) ->
-define(RES(F), {F, fun ?MODULE:F/3}).
-simple_resolve(suite) -> [];
-simple_resolve(doc) -> ["OTP-5563. Partitions and names."];
+%% OTP-5563. Partitions and names.
simple_resolve(Config) when is_list(Config) ->
Timeout = 360,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [N1, A2, Z2] = Cps = start_nodes([n_1, a_2, z_2], peer, Config),
+ [N1, A2, Z2] = Cps = start_nodes([n_1, a_2, z_2], peer, Config),
Nodes = lists:sort([node() | Cps]),
- ?line wait_for_ready_net(Config),
-
+ wait_for_ready_net(Config),
+
lists:foreach(fun(N) ->
rpc:call(N, ?MODULE, start_tracer, [])
end, Nodes),
@@ -2193,20 +2145,19 @@ simple_resolve(Config) when is_list(Config) ->
%% then a new attempt (nodeup etc.) is made. This time the
%% resolver does not disconnect any node.
res(?RES(disconnect_first), Cps, Cf#cf{link = Z2, n2 = Z2,
- nodes = [node(), N1, A2, Z2]}),
+ nodes = [node(), N1, A2, Z2]}),
- ?line lists:foreach(fun(N) ->
- rpc:call(N, ?MODULE, stop_tracer, [])
- end, Nodes),
+ lists:foreach(fun(N) ->
+ rpc:call(N, ?MODULE, stop_tracer, [])
+ end, Nodes),
- ?line OrigNames = global:registered_names(),
+ OrigNames = global:registered_names(),
write_high_level_trace(Config),
stop_nodes(Cps),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-simple_resolve2(suite) -> [];
-simple_resolve2(doc) -> ["OTP-5563. Partitions and names."];
+%% OTP-5563. Partitions and names.
simple_resolve2(Config) when is_list(Config) ->
%% Continuation of simple_resolve. Of some reason it did not
%% always work to re-start z_2. "Cannot be a global bug."
@@ -2214,13 +2165,13 @@ simple_resolve2(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [N1, A2, Z2] = Cps = start_nodes([n_1, a_2, z_2], peer, Config),
- ?line wait_for_ready_net(Config),
+ [N1, A2, Z2] = Cps = start_nodes([n_1, a_2, z_2], peer, Config),
+ wait_for_ready_net(Config),
Nodes = lists:sort([node() | Cps]),
-
+
lists:foreach(fun(N) ->
rpc:call(N, ?MODULE, start_tracer, [])
end, Nodes),
@@ -2230,33 +2181,32 @@ simple_resolve2(Config) when is_list(Config) ->
%% Halt z_2.
res(?RES(halt_second), Cps, Cf#cf{link = N1, n1 = N1, n2 = Z2, ping = A2,
- nodes = [node(), N1, A2], n_res = 1}),
+ nodes = [node(), N1, A2], n_res = 1}),
- ?line lists:foreach(fun(N) ->
- rpc:call(N, ?MODULE, stop_tracer, [])
- end, Nodes),
+ lists:foreach(fun(N) ->
+ rpc:call(N, ?MODULE, stop_tracer, [])
+ end, Nodes),
- ?line OrigNames = global:registered_names(),
+ OrigNames = global:registered_names(),
write_high_level_trace(Config),
stop_nodes(Cps), % Not all nodes may be present, but it works anyway.
- ?line init_condition(Config),
+ init_condition(Config),
ok.
-simple_resolve3(suite) -> [];
-simple_resolve3(doc) -> ["OTP-5563. Partitions and names."];
+%% OTP-5563. Partitions and names.
simple_resolve3(Config) when is_list(Config) ->
%% Continuation of simple_resolve.
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [N1, A2, Z2] = Cps = start_nodes([n_1, a_2, z_2], peer, Config),
- ?line wait_for_ready_net(Config),
+ [N1, A2, Z2] = Cps = start_nodes([n_1, a_2, z_2], peer, Config),
+ wait_for_ready_net(Config),
Nodes = lists:sort([node() | Cps]),
-
+
lists:foreach(fun(N) ->
rpc:call(N, ?MODULE, start_tracer, [])
end, Nodes),
@@ -2267,27 +2217,27 @@ simple_resolve3(Config) when is_list(Config) ->
%% Halt a_2.
res(?RES(halt_second), Cps, Cf#cf{link = node(), n2 = A2,
nodes = [node(), N1], n_res = 1}),
-
- ?line lists:foreach(fun(N) ->
- rpc:call(N, ?MODULE, stop_tracer, [])
- end, Nodes),
- ?line OrigNames = global:registered_names(),
+ lists:foreach(fun(N) ->
+ rpc:call(N, ?MODULE, stop_tracer, [])
+ end, Nodes),
+
+ OrigNames = global:registered_names(),
write_high_level_trace(Config),
stop_nodes(Cps), % Not all nodes may be present, but it works anyway.
- ?line init_condition(Config),
+ init_condition(Config),
ok.
res({Res,Resolver}, [N1, A2, Z2], Cf) ->
%% Note: there are no links anymore, but monitors.
#cf{link = LinkedNode, ping = PingNode, n1 = Res1, n2 = OtherNode,
nodes = Nodes0, n_res = NRes, config = Config} = Cf,
- ?t:format("~n~nResolver: ~p", [Res]),
- ?t:format(" Registered on partition 1: ~p", [Res1]),
- ?t:format(" Registered on partition 2: ~p", [OtherNode]),
- ?t:format(" Pinged node: ~p", [PingNode]),
- ?t:format(" Linked node: ~p", [LinkedNode]),
- ?t:format(" Expected # resolvers: ~p", [NRes]),
+ io:format("~n~nResolver: ~p", [Res]),
+ io:format(" Registered on partition 1: ~p", [Res1]),
+ io:format(" Registered on partition 2: ~p", [OtherNode]),
+ io:format(" Pinged node: ~p", [PingNode]),
+ io:format(" Linked node: ~p", [LinkedNode]),
+ io:format(" Expected # resolvers: ~p", [NRes]),
Nodes = lists:sort(Nodes0),
T1 = node(),
Part1 = [T1, N1],
@@ -2299,67 +2249,67 @@ res({Res,Resolver}, [N1, A2, Z2], Cf) ->
%% expected monitors remain between registered processes and the
%% global_name_server.
- ?line rpc_cast(OtherNode,
- ?MODULE,
- part_2_2,
- [Config, Part1, Part2, [{Name, Resolver}]]),
- ?line ?UNTIL(is_ready_partition(Config)),
- ?line {_Pid1, yes} =
+ rpc_cast(OtherNode,
+ ?MODULE,
+ part_2_2,
+ [Config, Part1, Part2, [{Name, Resolver}]]),
+ ?UNTIL(is_ready_partition(Config)),
+ {_Pid1, yes} =
rpc:call(Res1, ?MODULE, start_resolver, [Name, Resolver]),
- ?line pong = net_adm:ping(PingNode),
- ?line wait_for_ready_net(Nodes, Config),
+ pong = net_adm:ping(PingNode),
+ wait_for_ready_net(Nodes, Config),
- ?line check_everywhere(Nodes, Name, Config),
- ?line case global:whereis_name(Name) of
- undefined when LinkedNode =:= none -> ok;
- Pid -> assert_pid(Pid)
- end,
+ check_everywhere(Nodes, Name, Config),
+ case global:whereis_name(Name) of
+ undefined when LinkedNode =:= none -> ok;
+ Pid -> assert_pid(Pid)
+ end,
- ?line {_, Trace0} = collect_tracers(Nodes),
- ?line Resolvers = [P || {_Node,new_resolver,{pid,P}} <- Trace0],
+ {_, Trace0} = collect_tracers(Nodes),
+ Resolvers = [P || {_Node,new_resolver,{pid,P}} <- Trace0],
- ?line NRes = length(Resolvers),
+ NRes = length(Resolvers),
%% Wait for extra monitor processes to be created.
%% This applies as long as global:do_monitor/1 spawns processes.
%% (Some day monitor() will be truly synchronous.)
- test_server:sleep(100),
+ ct:sleep(100),
- ?line lists:foreach(fun(P) -> P ! die end, Resolvers),
- ?line lists:foreach(fun(P) -> wait_for_exit(P) end, Resolvers),
+ lists:foreach(fun(P) -> P ! die end, Resolvers),
+ lists:foreach(fun(P) -> wait_for_exit(P) end, Resolvers),
- ?line check_everywhere(Nodes, Name, Config),
- ?line undefined = global:whereis_name(Name),
+ check_everywhere(Nodes, Name, Config),
+ undefined = global:whereis_name(Name),
%% Wait for monitors to remove names.
- test_server:sleep(100),
+ ct:sleep(100),
- ?line {_, Trace1} = collect_tracers(Nodes),
+ {_, Trace1} = collect_tracers(Nodes),
Trace = Trace0 ++ Trace1,
- ?line Gs = name_servers([T1, N1, A2, Z2]),
- ?line MonitoredByNode = monitored_by_node(Trace, Gs),
- ?line MonitoredBy = [M || {_N,M} <- MonitoredByNode],
-
+ Gs = name_servers([T1, N1, A2, Z2]),
+ MonitoredByNode = monitored_by_node(Trace, Gs),
+ MonitoredBy = [M || {_N,M} <- MonitoredByNode],
+
X = MonitoredBy -- Gs,
LengthGs = length(Gs),
- ?line case MonitoredBy of
- [] when LinkedNode =:= none -> ok;
- Gs -> ok;
- _ when LengthGs < 4, X =:= [] -> ok;
- _ -> ?t:format("ERROR:~nMonitoredBy ~p~n"
- "global_name_servers ~p~n",
- [MonitoredByNode, Gs]),
- ?t:fail(monitor_mismatch)
- end,
+ case MonitoredBy of
+ [] when LinkedNode =:= none -> ok;
+ Gs -> ok;
+ _ when LengthGs < 4, X =:= [] -> ok;
+ _ -> io:format("ERROR:~nMonitoredBy ~p~n"
+ "global_name_servers ~p~n",
+ [MonitoredByNode, Gs]),
+ ct:fail(monitor_mismatch)
+ end,
ok.
name_servers(Nodes) ->
lists:sort([rpc:call(N, erlang, whereis, [global_name_server]) ||
N <- Nodes,
pong =:= net_adm:ping(N)]).
-
+
monitored_by_node(Trace, Servers) ->
lists:sort([{node(M),M} ||
{_Node,_P,died,{monitors_2levels,ML}} <- Trace,
@@ -2371,7 +2321,7 @@ part_2_2(Config, Part1, Part2, NameResolvers) ->
make_partition(Config, Part1, Part2),
lists:foreach
(fun({Name, Resolver}) ->
- ?line {Pid2, yes} = start_resolver(Name, Resolver),
+ {Pid2, yes} = start_resolver(Name, Resolver),
trace_message({node(), part_2_2, nodes(), {pid2,Pid2}})
end, NameResolvers).
@@ -2396,7 +2346,7 @@ exit_resolver(name, _Pid1, _Pid2) ->
lock_resolver(name, Pid1, _Pid2) ->
Id = {?MODULE, self()},
Nodes = [node()],
- ?line true = global:set_lock(Id, Nodes),
+ true = global:set_lock(Id, Nodes),
_ = global:del_lock(Id, Nodes),
Pid1.
@@ -2426,7 +2376,7 @@ start_resolver(Name, Resolver) ->
receive
{Pid, Res} -> {Pid, Res}
end.
-
+
init_resolver(Parent, Name, Resolver) ->
X = global:register_name(Name, self(), Resolver),
Parent ! {self(), X},
@@ -2455,18 +2405,17 @@ mon_by_servers(Proc) ->
-define(REGNAME, contact_a_2).
-leftover_name(suite) -> [];
-leftover_name(doc) -> ["OTP-5563. Bug: nodedown while synching."];
+%% OTP-5563. Bug: nodedown while synching.
leftover_name(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
- ?line [N1, A2, Z2] = Cps = start_nodes([n_1, a_2, z_2], peer, Config),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
+ [N1, A2, Z2] = Cps = start_nodes([n_1, a_2, z_2], peer, Config),
Nodes = lists:sort([node() | Cps]),
- ?line wait_for_ready_net(Config),
-
+ wait_for_ready_net(Config),
+
lists:foreach(fun(N) ->
rpc:call(N, ?MODULE, start_tracer, [])
end, Nodes),
@@ -2474,20 +2423,20 @@ leftover_name(Config) when is_list(Config) ->
Name = name, % registered on a_2
ResName = resolved_name, % registered on n_1 and a_2
%%
- ?line _Pid = ping_a_2_fun(?REGNAME, N1, A2),
+ _Pid = ping_a_2_fun(?REGNAME, N1, A2),
T1 = node(),
Part1 = [T1, N1],
Part2 = [A2, Z2],
NoResolver = {no_module, resolve_none},
Resolver = fun contact_a_2/3,
- ?line rpc_cast(A2,
- ?MODULE, part_2_2, [Config,
- Part1,
- Part2,
- [{Name, NoResolver},
- {ResName, Resolver}]]),
- ?line ?UNTIL(is_ready_partition(Config)),
+ rpc_cast(A2,
+ ?MODULE, part_2_2, [Config,
+ Part1,
+ Part2,
+ [{Name, NoResolver},
+ {ResName, Resolver}]]),
+ ?UNTIL(is_ready_partition(Config)),
%% resolved_name is resolved to run on a_2, an insert operation is
%% sent to n_1. The resolver function halts a_2, but the nodedown
@@ -2496,36 +2445,36 @@ leftover_name(Config) when is_list(Config) ->
%% delayed). Unless "artificial" nodedown messages are sent the
%% name would linger on indefinitely. [There is no test case for
%% the situation that no nodedown message at all is sent.]
- ?line {_Pid1, yes} =
+ {_Pid1, yes} =
rpc:call(N1, ?MODULE, start_resolver,
[ResName, fun contact_a_2/3]),
- test_server:sleep(1000),
+ ct:sleep(1000),
- ?line trace_message({node(), pinging, z_2}),
- ?line pong = net_adm:ping(Z2),
- ?line ?UNTIL((Nodes -- [A2]) =:= lists:sort(?NODES)),
- ?t:sleep(1000),
+ trace_message({node(), pinging, z_2}),
+ pong = net_adm:ping(Z2),
+ ?UNTIL((Nodes -- [A2]) =:= lists:sort(?NODES)),
+ ct:sleep(1000),
- ?line {_,Trace0} = collect_tracers(Nodes),
+ {_,Trace0} = collect_tracers(Nodes),
- ?line Resolvers = [P || {_Node,new_resolver,{pid,P}} <- Trace0],
- ?line lists:foreach(fun(P) -> P ! die end, Resolvers),
- ?line lists:foreach(fun(P) -> wait_for_exit(P) end, Resolvers),
+ Resolvers = [P || {_Node,new_resolver,{pid,P}} <- Trace0],
+ lists:foreach(fun(P) -> P ! die end, Resolvers),
+ lists:foreach(fun(P) -> wait_for_exit(P) end, Resolvers),
- ?line lists:foreach(fun(N) ->
- rpc:call(N, ?MODULE, stop_tracer, [])
- end, Nodes),
+ lists:foreach(fun(N) ->
+ rpc:call(N, ?MODULE, stop_tracer, [])
+ end, Nodes),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
stop_nodes(Cps),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
%% Runs on n_1
contact_a_2(resolved_name, Pid1, Pid2) ->
trace_message({node(), ?REGNAME, {pid1,Pid1}, {pid2,Pid2},
- {node1,node(Pid1)}, {node2,node(Pid2)}}),
+ {node1,node(Pid1)}, {node2,node(Pid2)}}),
?REGNAME ! doit,
Pid2.
@@ -2543,15 +2492,14 @@ ping_a_2(RegName, N1, A2) ->
{nodedown, A2} -> ok
end
end.
-
+
halt_node(Node) ->
rpc:call(Node, erlang, halt, []).
%%%-----------------------------------------------------------------
%%% Testing re-registration of a name.
%%%-----------------------------------------------------------------
-re_register_name(suite) -> [];
-re_register_name(doc) -> ["OTP-5563. Name is re-registered."];
+%% OTP-5563. Name is re-registered.
re_register_name(Config) when is_list(Config) ->
%% When re-registering a name the link to the old pid used to
%% linger on. Don't think is was a serious bug though--some memory
@@ -2560,18 +2508,18 @@ re_register_name(Config) when is_list(Config) ->
Timeout = 15,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
+ init_condition(Config),
Me = self(),
Pid1 = spawn(fun() -> proc(Me) end),
- ?line yes = global:register_name(name, Pid1),
+ yes = global:register_name(name, Pid1),
Pid2 = spawn(fun() -> proc(Me) end),
- ?line _ = global:re_register_name(name, Pid2),
+ _ = global:re_register_name(name, Pid2),
Pid2 ! die,
Pid1 ! die,
receive {Pid1, MonitoredBy1} -> [] = MonitoredBy1 end,
receive {Pid2, MonitoredBy2} -> [_] = MonitoredBy2 end,
- ?line _ = global:unregister_name(name),
- ?line init_condition(Config),
+ _ = global:unregister_name(name),
+ init_condition(Config),
ok.
proc(Parent) ->
@@ -2583,15 +2531,14 @@ proc(Parent) ->
%%%-----------------------------------------------------------------
%%%
%%%-----------------------------------------------------------------
-name_exit(suite) -> [];
-name_exit(doc) -> ["OTP-5563. Registered process dies."];
+%% OTP-5563. Registered process dies.
name_exit(Config) when is_list(Config) ->
StartFun = fun() ->
{ok, N1} = start_node_rel(n_1, this, Config),
{ok, N2} = start_node_rel(n_2, this, Config),
[N1, N2]
end,
- ?t:format("Test of current release~n"),
+ io:format("Test of current release~n"),
do_name_exit(StartFun, current, Config).
do_name_exit(StartFun, Version, Config) ->
@@ -2607,17 +2554,17 @@ do_name_exit(StartFun, Version, Config) ->
Timeout = 60,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
%% Three nodes (test_server, n_1, n_2).
- ?line Cps = StartFun(),
+ Cps = StartFun(),
Nodes = lists:sort([node() | Cps]),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
lists:foreach(fun(N) -> rpc:call(N, ?MODULE, start_tracer, []) end,Nodes),
Name = name,
- ?line {Pid, yes} = start_proc(Name),
+ {Pid, yes} = start_proc(Name),
Me = self(),
LL = spawn(fun() -> long_lock(Me) end),
@@ -2628,23 +2575,23 @@ do_name_exit(StartFun, Version, Config) ->
Pid ! die,
wait_for_exit_fast(Pid),
- ?t:sleep(100),
+ ct:sleep(100),
%% Name has been removed from node()'s table, but nowhere else
%% since there is a lock on 'global'.
{R1,[]} = rpc:multicall(Nodes, global, whereis_name, [Name]),
- ?line case Version of
- old -> [_,_] = lists:usort(R1);
- current -> [undefined, undefined, undefined] = R1
- end,
- ?t:sleep(3000),
- ?line check_everywhere(Nodes, Name, Config),
+ case Version of
+ old -> [_,_] = lists:usort(R1);
+ current -> [undefined, undefined, undefined] = R1
+ end,
+ ct:sleep(3000),
+ check_everywhere(Nodes, Name, Config),
lists:foreach(fun(N) -> rpc:call(N, ?MODULE, stop_tracer, []) end, Nodes),
- ?line OrigNames = global:registered_names(),
+ OrigNames = global:registered_names(),
exit(LL, kill),
write_high_level_trace(Config),
stop_nodes(Cps),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
long_lock(Parent) ->
@@ -2657,17 +2604,16 @@ long_lock(Parent) ->
%%%-----------------------------------------------------------------
%%% Testing the support for external nodes (cnodes)
%%%-----------------------------------------------------------------
-external_nodes(suite) -> [];
-external_nodes(doc) -> ["OTP-5563. External nodes (cnodes)."];
+%% OTP-5563. External nodes (cnodes).
external_nodes(Config) when is_list(Config) ->
Timeout = 30,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
- ?line [NodeB, NodeC] = start_nodes([b, c], peer, Config),
- ?line wait_for_ready_net(Config),
+ [NodeB, NodeC] = start_nodes([b, c], peer, Config),
+ wait_for_ready_net(Config),
%% Nodes = ?NODES,
%% lists:foreach(fun(N) -> rpc:call(N, ?MODULE, start_tracer, []) end,
@@ -2676,75 +2622,75 @@ external_nodes(Config) when is_list(Config) ->
%% Two partitions: [test_server] and [b, c].
%% c registers an external name on b
- ?line rpc_cast(NodeB, ?MODULE, part_ext,
- [Config, node(), NodeC, Name]),
- ?line ?UNTIL(is_ready_partition(Config)),
+ rpc_cast(NodeB, ?MODULE, part_ext,
+ [Config, node(), NodeC, Name]),
+ ?UNTIL(is_ready_partition(Config)),
- ?line pong = net_adm:ping(NodeB),
- ?line ?UNTIL([NodeB, NodeC] =:= lists:sort(nodes())),
- ?line wait_for_ready_net(Config),
+ pong = net_adm:ping(NodeB),
+ ?UNTIL([NodeB, NodeC] =:= lists:sort(nodes())),
+ wait_for_ready_net(Config),
- ?line Cpid = rpc:call(NodeC, erlang, whereis, [Name]),
+ Cpid = rpc:call(NodeC, erlang, whereis, [Name]),
ExternalName = [{name,Cpid,NodeB}],
- ?line ExternalName = get_ext_names(),
- ?line ExternalName = rpc:call(NodeB, gen_server, call,
- [global_name_server, get_names_ext]),
- ?line ExternalName = rpc:call(NodeC, gen_server, call,
- [global_name_server, get_names_ext]),
-
- ?line [_] = cnode_links(Cpid),
- ?line [_,_,_] = cnode_monitored_by(Cpid),
- ?line no = global:register_name(Name, self()),
- ?line yes = global:re_register_name(Name, self()),
- ?line ?UNTIL([] =:= cnode_monitored_by(Cpid)),
- ?line ?UNTIL([] =:= cnode_links(Cpid)),
- ?line [] = gen_server:call(global_name_server, get_names_ext, infinity),
-
- ?line Cpid ! {register, self(), Name},
- ?line receive {Cpid, Reply1} -> no = Reply1 end,
- ?line _ = global:unregister_name(Name),
- test_server:sleep(1000),
- ?line Cpid ! {register, self(), Name},
- ?line ?UNTIL(length(get_ext_names()) =:= 1),
- ?line receive {Cpid, Reply2} -> yes = Reply2 end,
-
- ?line Cpid ! {unregister, self(), Name},
- ?line ?UNTIL(length(get_ext_names()) =:= 0),
- ?line receive {Cpid, Reply3} -> ok = Reply3 end,
+ ExternalName = get_ext_names(),
+ ExternalName = rpc:call(NodeB, gen_server, call,
+ [global_name_server, get_names_ext]),
+ ExternalName = rpc:call(NodeC, gen_server, call,
+ [global_name_server, get_names_ext]),
+
+ [_] = cnode_links(Cpid),
+ [_,_,_] = cnode_monitored_by(Cpid),
+ no = global:register_name(Name, self()),
+ yes = global:re_register_name(Name, self()),
+ ?UNTIL([] =:= cnode_monitored_by(Cpid)),
+ ?UNTIL([] =:= cnode_links(Cpid)),
+ [] = gen_server:call(global_name_server, get_names_ext, infinity),
+
+ Cpid ! {register, self(), Name},
+ receive {Cpid, Reply1} -> no = Reply1 end,
+ _ = global:unregister_name(Name),
+ ct:sleep(1000),
+ Cpid ! {register, self(), Name},
+ ?UNTIL(length(get_ext_names()) =:= 1),
+ receive {Cpid, Reply2} -> yes = Reply2 end,
+
+ Cpid ! {unregister, self(), Name},
+ ?UNTIL(length(get_ext_names()) =:= 0),
+ receive {Cpid, Reply3} -> ok = Reply3 end,
Cpid ! die,
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
- ?line [] = get_ext_names(),
- ?line [] = rpc:call(NodeB, gen_server, call,
- [global_name_server, get_names_ext]),
- ?line [] = rpc:call(NodeC, gen_server, call,
- [global_name_server, get_names_ext]),
+ ?UNTIL(OrigNames =:= global:registered_names()),
+ [] = get_ext_names(),
+ [] = rpc:call(NodeB, gen_server, call,
+ [global_name_server, get_names_ext]),
+ [] = rpc:call(NodeC, gen_server, call,
+ [global_name_server, get_names_ext]),
- ?line Cpid2 = erlang:spawn(NodeC, fun() -> cnode_proc(NodeB) end),
- ?line Cpid2 ! {register, self(), Name},
- ?line receive {Cpid2, Reply4} -> yes = Reply4 end,
+ Cpid2 = erlang:spawn(NodeC, fun() -> cnode_proc(NodeB) end),
+ Cpid2 ! {register, self(), Name},
+ receive {Cpid2, Reply4} -> yes = Reply4 end,
%% It could be a bug that Cpid2 is linked to 'global_name_server'
%% at node 'b'. The effect: Cpid2 dies when node 'b' crashes.
stop_node(NodeB),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
- ?line [] = get_ext_names(),
- ?line [] = rpc:call(NodeC, gen_server, call,
- [global_name_server, get_names_ext]),
+ ?UNTIL(OrigNames =:= global:registered_names()),
+ [] = get_ext_names(),
+ [] = rpc:call(NodeC, gen_server, call,
+ [global_name_server, get_names_ext]),
- %% ?line {_, Trace} = collect_tracers(Nodes),
+ %% {_, Trace} = collect_tracers(Nodes),
%% lists:foreach(fun(M) -> erlang:display(M) end, Trace),
ThisNode = node(),
- ?line Cpid3 = erlang:spawn(NodeC, fun() -> cnode_proc(ThisNode) end),
- ?line Cpid3 ! {register, self(), Name},
- ?line receive {Cpid3, Reply5} -> yes = Reply5 end,
+ Cpid3 = erlang:spawn(NodeC, fun() -> cnode_proc(ThisNode) end),
+ Cpid3 ! {register, self(), Name},
+ receive {Cpid3, Reply5} -> yes = Reply5 end,
- ?line ?UNTIL(length(get_ext_names()) =:= 1),
+ ?UNTIL(length(get_ext_names()) =:= 1),
stop_node(NodeC),
- ?line ?UNTIL(length(get_ext_names()) =:= 0),
+ ?UNTIL(length(get_ext_names()) =:= 0),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
get_ext_names() ->
@@ -2791,19 +2737,16 @@ cnode_proc(E) ->
cnode_proc(E).
-many_nodes(suite) ->
- [];
-many_nodes(doc) ->
- ["OTP-5770. Start many nodes. Make them connect at the same time."];
+%% OTP-5770. Start many nodes. Make them connect at the same time.
many_nodes(Config) when is_list(Config) ->
Timeout = 240,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
{Rels, N_cps} =
- case ?t:os_type() of
+ case test_server:os_type() of
{unix, Osname} when Osname =:= linux;
Osname =:= openbsd;
Osname =:= darwin ->
@@ -2814,12 +2757,12 @@ many_nodes(Config) when is_list(Config) ->
_ ->
{node_rel(1, 32, this), 32}
end,
- ?line Cps = [begin {ok, Cp} = start_node_rel(Name, Rel, Config), Cp end ||
- {Name,Rel} <- Rels],
+ Cps = [begin {ok, Cp} = start_node_rel(Name, Rel, Config), Cp end ||
+ {Name,Rel} <- Rels],
Nodes = lists:sort(?NODES),
- ?line wait_for_ready_net(Nodes, Config),
+ wait_for_ready_net(Nodes, Config),
- ?line Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
GoFile = filename:join([Dir, "go.txt"]),
file:delete(GoFile),
@@ -2830,34 +2773,34 @@ many_nodes(Config) when is_list(Config) ->
file:delete(File),
rpc_cast(N, ?MODULE, isolated_node, [File, GoFile, Cps, Config])
end,
- ?line lists:foreach(IsoFun, CpsFiles),
-
- ?line all_nodes_files(CpsFiles, "isolated", Config),
- ?line Time = msec(),
- ?line sync_until(),
+ lists:foreach(IsoFun, CpsFiles),
+
+ all_nodes_files(CpsFiles, "isolated", Config),
+ Time = msec(),
+ sync_until(),
erlang:display(ready_to_go),
- ?line touch(GoFile, "go"),
- ?line all_nodes_files(CpsFiles, "done", Config),
- ?line Time2 = msec(),
+ touch(GoFile, "go"),
+ all_nodes_files(CpsFiles, "done", Config),
+ Time2 = msec(),
- ?line lists:foreach(fun(N) -> pong = net_adm:ping(N) end, Cps),
+ lists:foreach(fun(N) -> pong = net_adm:ping(N) end, Cps),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
write_high_level_trace(Config), % The test succeeded, but was it slow?
- ?line lists:foreach(fun({_N, File}) -> file:delete(File) end, CpsFiles),
- ?line file:delete(GoFile),
+ lists:foreach(fun({_N, File}) -> file:delete(File) end, CpsFiles),
+ file:delete(GoFile),
- ?line ?UNTIL(OrigNames =:= global:registered_names()),
+ ?UNTIL(OrigNames =:= global:registered_names()),
write_high_level_trace(Config),
- ?line stop_nodes(Cps),
- ?line init_condition(Config),
+ stop_nodes(Cps),
+ init_condition(Config),
Diff = Time2 - Time,
Return = lists:flatten(io_lib:format("~w nodes took ~w ms",
[N_cps, Diff])),
erlang:display({{nodes,N_cps},{time,Diff}}),
- ?t:format("~s~n", [Return]),
+ io:format("~s~n", [Return]),
{comment, Return}.
node_rel(From, To, Rel) ->
@@ -2883,7 +2826,7 @@ isolated_node(File, GoFile, Nodes, Config) ->
touch(File, "got_go"),
lists:foreach(fun(N) -> _ = net_adm:ping(N) end, shuffle(Nodes)),
touch(File, "pinged"),
- ?line ?UNTIL((Ns -- get_known(node())) =:= []),
+ ?UNTIL((Ns -- get_known(node())) =:= []),
touch(File, "done").
touch(File, List) ->
@@ -2931,19 +2874,17 @@ sync_until(LogFile) ->
timer:sleep(Time).
shuffle(L) ->
- [E || {_, E} <- lists:keysort(1, [{random:uniform(), E} || E <- L])].
+ [E || {_, E} <- lists:keysort(1, [{rand:uniform(), E} || E <- L])].
-sync_0(suite) -> [];
-sync_0(doc) ->
- ["OTP-5770. sync/0."];
+%% OTP-5770. sync/0.
sync_0(Config) when is_list(Config) ->
Timeout = 180,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
+ init_condition(Config),
N_cps =
- case ?t:os_type() of
+ case test_server:os_type() of
{unix, Osname} when Osname =:= linux;
Osname =:= openbsd;
Osname =:= darwin ->
@@ -2958,82 +2899,80 @@ sync_0(Config) when is_list(Config) ->
Names = [lists:concat([cp,N]) || N <- lists:seq(1, N_cps)],
Cps = start_and_sync(Names),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
write_high_level_trace(Config),
stop_nodes(Cps),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
start_and_sync([]) ->
[];
start_and_sync([Name | Names]) ->
- ?line {ok, N} = start_node(Name, slave, []),
- ?line {Time, _Void} = rpc:call(N, timer, tc, [global, sync, []]),
- ?t:format("~p: ~p~n", [Name, Time]),
+ {ok, N} = start_node(Name, slave, []),
+ {Time, _Void} = rpc:call(N, timer, tc, [global, sync, []]),
+ io:format("~p: ~p~n", [Name, Time]),
[N | start_and_sync(Names)].
%%%-----------------------------------------------------------------
%%% Testing of change of global_groups parameter.
%%%-----------------------------------------------------------------
-global_groups_change(suite) -> [];
-global_groups_change(doc) -> ["Test change of global_groups parameter."];
+%% Test change of global_groups parameter.
global_groups_change(Config) ->
Timeout = 90,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line M = from($@, atom_to_list(node())),
-
- % Create the .app files and the boot script
- ?line {KernelVer, StdlibVer} = create_script_dc("dc"),
- ?line case is_real_system(KernelVer, StdlibVer) of
- true ->
- Options = [];
- false ->
- Options = [local]
- end,
+ init_condition(Config),
+ M = from($@, atom_to_list(node())),
+
+ %% Create the .app files and the boot script
+ {KernelVer, StdlibVer} = create_script_dc("dc"),
+ case is_real_system(KernelVer, StdlibVer) of
+ true ->
+ Options = [];
+ false ->
+ Options = [local]
+ end,
+
+ ok = systools:make_script("dc", Options),
- ?line ok = systools:make_script("dc", Options),
-
[Ncp1,Ncp2,Ncp3,Ncp4,Ncp5,NcpA,NcpB,NcpC,NcpD,NcpE] =
node_names([cp1,cp2,cp3,cp4,cp5,cpA,cpB,cpC,cpD,cpE], Config),
- % Write config files
- ?line Dir = ?config(priv_dir,Config),
- ?line {ok, Fd_dc} = file:open(filename:join(Dir, "sys.config"), [write]),
- ?line config_dc1(Fd_dc, Ncp1, Ncp2, Ncp3, NcpA, NcpB, NcpC, NcpD, NcpE),
- ?line file:close(Fd_dc),
- ?line Config1 = filename:join(Dir, "sys"),
-
- % Test [cp1, cp2, cp3]
- ?line {ok, Cp1} = start_node_boot(Ncp1, Config1, dc),
- ?line {ok, Cp2} = start_node_boot(Ncp2, Config1, dc),
- ?line {ok, Cp3} = start_node_boot(Ncp3, Config1, dc),
- ?line {ok, CpA} = start_node_boot(NcpA, Config1, dc),
- ?line {ok, CpB} = start_node_boot(NcpB, Config1, dc),
- ?line {ok, CpC} = start_node_boot(NcpC, Config1, dc),
- ?line {ok, CpD} = start_node_boot(NcpD, Config1, dc),
- ?line {ok, CpE} = start_node_boot(NcpE, Config1, dc),
-
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cp2]),
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cp3]),
- ?line pang = rpc:call(Cp1, net_adm, ping,
- [list_to_atom(lists:concat(["cp5@", M]))]),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cp3]),
- ?line pang = rpc:call(Cp2, net_adm, ping,
- [list_to_atom(lists:concat(["cp5@", M]))]),
-
- ?line {TestGG4, yes} = rpc:call(CpB, ?MODULE, start_proc, [test]),
- ?line {TestGG5, yes} = rpc:call(CpE, ?MODULE, start_proc, [test]),
-
-
- ?line pong = rpc:call(CpA, net_adm, ping, [CpC]),
- ?line pong = rpc:call(CpC, net_adm, ping, [CpB]),
- ?line pong = rpc:call(CpD, net_adm, ping, [CpC]),
- ?line pong = rpc:call(CpE, net_adm, ping, [CpD]),
-
- ?line
+ %% Write config files
+ Dir = proplists:get_value(priv_dir,Config),
+ {ok, Fd_dc} = file:open(filename:join(Dir, "sys.config"), [write]),
+ config_dc1(Fd_dc, Ncp1, Ncp2, Ncp3, NcpA, NcpB, NcpC, NcpD, NcpE),
+ file:close(Fd_dc),
+ Config1 = filename:join(Dir, "sys"),
+
+ %% Test [cp1, cp2, cp3]
+ {ok, Cp1} = start_node_boot(Ncp1, Config1, dc),
+ {ok, Cp2} = start_node_boot(Ncp2, Config1, dc),
+ {ok, Cp3} = start_node_boot(Ncp3, Config1, dc),
+ {ok, CpA} = start_node_boot(NcpA, Config1, dc),
+ {ok, CpB} = start_node_boot(NcpB, Config1, dc),
+ {ok, CpC} = start_node_boot(NcpC, Config1, dc),
+ {ok, CpD} = start_node_boot(NcpD, Config1, dc),
+ {ok, CpE} = start_node_boot(NcpE, Config1, dc),
+
+ pong = rpc:call(Cp1, net_adm, ping, [Cp2]),
+ pong = rpc:call(Cp1, net_adm, ping, [Cp3]),
+ pang = rpc:call(Cp1, net_adm, ping,
+ [list_to_atom(lists:concat(["cp5@", M]))]),
+ pong = rpc:call(Cp2, net_adm, ping, [Cp3]),
+ pang = rpc:call(Cp2, net_adm, ping,
+ [list_to_atom(lists:concat(["cp5@", M]))]),
+
+ {TestGG4, yes} = rpc:call(CpB, ?MODULE, start_proc, [test]),
+ {TestGG5, yes} = rpc:call(CpE, ?MODULE, start_proc, [test]),
+
+
+ pong = rpc:call(CpA, net_adm, ping, [CpC]),
+ pong = rpc:call(CpC, net_adm, ping, [CpB]),
+ pong = rpc:call(CpD, net_adm, ping, [CpC]),
+ pong = rpc:call(CpE, net_adm, ping, [CpD]),
+
?UNTIL(begin
TestGG4_1 = rpc:call(CpA, global, whereis_name, [test]),
TestGG4_2 = rpc:call(CpB, global, whereis_name, [test]),
@@ -3050,88 +2989,87 @@ global_groups_change(Config) ->
(TestGG5_2 =:= TestGG5)
end),
- ?line ?t:format( "#### nodes() ~p~n",[nodes()]),
+ io:format( "#### nodes() ~p~n",[nodes()]),
- ?line XDcWa1 = rpc:call(Cp1, global_group, info, []),
- ?line XDcWa2 = rpc:call(Cp2, global_group, info, []),
- ?line XDcWa3 = rpc:call(Cp3, global_group, info, []),
- ?line ?t:format( "#### XDcWa1 ~p~n",[XDcWa1]),
- ?line ?t:format( "#### XDcWa2 ~p~n",[XDcWa2]),
- ?line ?t:format( "#### XDcWa3 ~p~n",[XDcWa3]),
+ XDcWa1 = rpc:call(Cp1, global_group, info, []),
+ XDcWa2 = rpc:call(Cp2, global_group, info, []),
+ XDcWa3 = rpc:call(Cp3, global_group, info, []),
+ io:format( "#### XDcWa1 ~p~n",[XDcWa1]),
+ io:format( "#### XDcWa2 ~p~n",[XDcWa2]),
+ io:format( "#### XDcWa3 ~p~n",[XDcWa3]),
+
+ stop_node(CpC),
- ?line stop_node(CpC),
-
%% Read the current configuration parameters, and change them
- ?line OldEnv =
+ OldEnv =
rpc:call(Cp1, application_controller, prep_config_change, []),
- ?line {value, {kernel, OldKernel}} = lists:keysearch(kernel, 1, OldEnv),
+ {value, {kernel, OldKernel}} = lists:keysearch(kernel, 1, OldEnv),
- ?line GG1 =
+ GG1 =
lists:sort([mk_node(Ncp1, M), mk_node(Ncp2, M), mk_node(Ncp5, M)]),
- ?line GG2 = lists:sort([mk_node(Ncp3, M)]),
- ?line GG3 = lists:sort([mk_node(Ncp4, M)]),
- ?line GG4 = lists:sort([mk_node(NcpA, M), mk_node(NcpB, M)]),
- ?line GG5 =
+ GG2 = lists:sort([mk_node(Ncp3, M)]),
+ GG3 = lists:sort([mk_node(Ncp4, M)]),
+ GG4 = lists:sort([mk_node(NcpA, M), mk_node(NcpB, M)]),
+ GG5 =
lists:sort([mk_node(NcpC, M), mk_node(NcpD, M), mk_node(NcpE, M)]),
- ?line NewNG = {global_groups,[{gg1, normal, GG1},
- {gg2, normal, GG2},
- {gg3, normal, GG3},
- {gg4, normal, GG4},
- {gg5, hidden, GG5}]},
-
- ?line NewKernel =
+ NewNG = {global_groups,[{gg1, normal, GG1},
+ {gg2, normal, GG2},
+ {gg3, normal, GG3},
+ {gg4, normal, GG4},
+ {gg5, hidden, GG5}]},
+
+ NewKernel =
[{kernel, lists:keyreplace(global_groups, 1, OldKernel, NewNG)}],
- ?line ok = rpc:call(Cp1, application_controller, test_change_apps,
- [[kernel], [NewKernel]]),
- ?line ok = rpc:call(Cp2, application_controller, test_change_apps,
- [[kernel], [NewKernel]]),
- ?line ok = rpc:call(Cp3, application_controller, test_change_apps,
- [[kernel], [NewKernel]]),
- ?line ok = rpc:call(CpA, application_controller, test_change_apps,
- [[kernel], [NewKernel]]),
- ?line ok = rpc:call(CpB, application_controller, test_change_apps,
- [[kernel], [NewKernel]]),
- ?line ok = rpc:call(CpD, application_controller, test_change_apps,
- [[kernel], [NewKernel]]),
- ?line ok = rpc:call(CpE, application_controller, test_change_apps,
- [[kernel], [NewKernel]]),
-
- ?line ?t:format("#### ~p~n",[multicall]),
- ?line ?t:format( "#### ~p~n",[multicall]),
+ ok = rpc:call(Cp1, application_controller, test_change_apps,
+ [[kernel], [NewKernel]]),
+ ok = rpc:call(Cp2, application_controller, test_change_apps,
+ [[kernel], [NewKernel]]),
+ ok = rpc:call(Cp3, application_controller, test_change_apps,
+ [[kernel], [NewKernel]]),
+ ok = rpc:call(CpA, application_controller, test_change_apps,
+ [[kernel], [NewKernel]]),
+ ok = rpc:call(CpB, application_controller, test_change_apps,
+ [[kernel], [NewKernel]]),
+ ok = rpc:call(CpD, application_controller, test_change_apps,
+ [[kernel], [NewKernel]]),
+ ok = rpc:call(CpE, application_controller, test_change_apps,
+ [[kernel], [NewKernel]]),
+
+ io:format("#### ~p~n",[multicall]),
+ io:format( "#### ~p~n",[multicall]),
%% no idea to check the result from the rpc because the other
%% nodes will disconnect test server, and thus the result will
%% always be {badrpc, nodedown}
- ?line rpc:multicall([Cp1, Cp2, Cp3, CpA, CpB, CpD, CpE],
- application_controller, config_change, [OldEnv]),
+ rpc:multicall([Cp1, Cp2, Cp3, CpA, CpB, CpD, CpE],
+ application_controller, config_change, [OldEnv]),
- ?line {ok, Fd_dc2} = file:open(filename:join(Dir, "sys2.config"), [write]),
- ?line config_dc2(Fd_dc2, NewNG, Ncp1, Ncp2, Ncp3),
- ?line file:close(Fd_dc2),
- ?line Config2 = filename:join(Dir, "sys2"),
- ?line {ok, CpC} = start_node_boot(NcpC, Config2, dc),
+ {ok, Fd_dc2} = file:open(filename:join(Dir, "sys2.config"), [write]),
+ config_dc2(Fd_dc2, NewNG, Ncp1, Ncp2, Ncp3),
+ file:close(Fd_dc2),
+ Config2 = filename:join(Dir, "sys2"),
+ {ok, CpC} = start_node_boot(NcpC, Config2, dc),
- ?line sync_and_wait(CpA),
- ?line sync_and_wait(CpD),
-
- ?line pong = rpc:call(CpA, net_adm, ping, [CpC]),
- ?line pong = rpc:call(CpC, net_adm, ping, [CpB]),
- ?line pong = rpc:call(CpD, net_adm, ping, [CpC]),
- ?line pong = rpc:call(CpE, net_adm, ping, [CpD]),
-
- ?line GG5 =
+ sync_and_wait(CpA),
+ sync_and_wait(CpD),
+
+ pong = rpc:call(CpA, net_adm, ping, [CpC]),
+ pong = rpc:call(CpC, net_adm, ping, [CpB]),
+ pong = rpc:call(CpD, net_adm, ping, [CpC]),
+ pong = rpc:call(CpE, net_adm, ping, [CpD]),
+
+ GG5 =
lists:sort([mk_node(NcpC, M)|rpc:call(CpC, erlang, nodes, [])]),
- ?line GG5 =
+ GG5 =
lists:sort([mk_node(NcpD, M)|rpc:call(CpD, erlang, nodes, [])]),
- ?line GG5 =
+ GG5 =
lists:sort([mk_node(NcpE, M)|rpc:call(CpE, erlang, nodes, [])]),
- ?line false =
+ false =
lists:member(mk_node(NcpC, M), rpc:call(CpA, erlang, nodes, [])),
- ?line false =
+ false =
lists:member(mk_node(NcpC, M), rpc:call(CpB, erlang, nodes, [])),
- ?line
?UNTIL(begin
TestGG4a = rpc:call(CpA, global, whereis_name, [test]),
TestGG4b = rpc:call(CpB, global, whereis_name, [test]),
@@ -3148,171 +3086,171 @@ global_groups_change(Config) ->
(TestGG5 =:= TestGG5e)
end),
- ?line Info1 = rpc:call(Cp1, global_group, info, []),
- ?line Info2 = rpc:call(Cp2, global_group, info, []),
- ?line Info3 = rpc:call(Cp3, global_group, info, []),
- ?line InfoA = rpc:call(CpA, global_group, info, []),
- ?line InfoB = rpc:call(CpB, global_group, info, []),
- ?line InfoC = rpc:call(CpC, global_group, info, []),
- ?line InfoD = rpc:call(CpD, global_group, info, []),
- ?line InfoE = rpc:call(CpE, global_group, info, []),
- ?line ?t:format( "#### Info1 ~p~n",[Info1]),
- ?line ?t:format( "#### Info2 ~p~n",[Info2]),
- ?line ?t:format( "#### Info3 ~p~n",[Info3]),
- ?line ?t:format( "#### InfoA ~p~n",[InfoA]),
- ?line ?t:format( "#### InfoB ~p~n",[InfoB]),
- ?line ?t:format( "#### InfoC ~p~n",[InfoC]),
- ?line ?t:format( "#### InfoD ~p~n",[InfoD]),
- ?line ?t:format( "#### InfoE ~p~n",[InfoE]),
-
- ?line {global_groups, GGNodes} = NewNG,
-
- ?line Info1ok = [{state, synced},
- {own_group_name, gg1},
- {own_group_nodes, GG1},
- {synced_nodes, [mk_node(Ncp2, M)]},
- {sync_error, []},
- {no_contact, [mk_node(Ncp5, M)]},
- {other_groups, remove_gg_pub_type(lists:keydelete
- (gg1, 1, GGNodes))},
- {monitoring, []}],
-
-
- ?line Info2ok = [{state, synced},
- {own_group_name, gg1},
- {own_group_nodes, GG1},
- {synced_nodes, [mk_node(Ncp1, M)]},
- {sync_error, []},
- {no_contact, [mk_node(Ncp5, M)]},
- {other_groups, remove_gg_pub_type(lists:keydelete
- (gg1, 1, GGNodes))},
- {monitoring, []}],
-
- ?line Info3ok = [{state, synced},
- {own_group_name, gg2},
- {own_group_nodes, GG2},
- {synced_nodes, []},
- {sync_error, []},
- {no_contact, []},
- {other_groups, remove_gg_pub_type(lists:keydelete
- (gg2, 1, GGNodes))},
- {monitoring, []}],
-
- ?line InfoAok = [{state, synced},
- {own_group_name, gg4},
- {own_group_nodes, GG4},
- {synced_nodes, lists:delete(mk_node(NcpA, M), GG4)},
- {sync_error, []},
- {no_contact, []},
- {other_groups, remove_gg_pub_type(lists:keydelete
- (gg4, 1, GGNodes))},
- {monitoring, []}],
-
- ?line InfoBok = [{state, synced},
- {own_group_name, gg4},
- {own_group_nodes, GG4},
- {synced_nodes, lists:delete(mk_node(NcpB, M), GG4)},
- {sync_error, []},
- {no_contact, []},
- {other_groups, remove_gg_pub_type(lists:keydelete
- (gg4, 1, GGNodes))},
- {monitoring, []}],
-
- ?line InfoCok = [{state, synced},
- {own_group_name, gg5},
- {own_group_nodes, GG5},
- {synced_nodes, lists:delete(mk_node(NcpC, M), GG5)},
- {sync_error, []},
- {no_contact, []},
- {other_groups, remove_gg_pub_type(lists:keydelete
- (gg5, 1, GGNodes))},
- {monitoring, []}],
-
- ?line InfoDok = [{state, synced},
- {own_group_name, gg5},
- {own_group_nodes, GG5},
- {synced_nodes, lists:delete(mk_node(NcpD, M), GG5)},
- {sync_error, []},
- {no_contact, []},
- {other_groups, remove_gg_pub_type(lists:keydelete
- (gg5, 1, GGNodes))},
- {monitoring, []}],
-
- ?line InfoEok = [{state, synced},
- {own_group_name, gg5},
- {own_group_nodes, GG5},
- {synced_nodes, lists:delete(mk_node(NcpE, M), GG5)},
- {sync_error, []},
- {no_contact, []},
- {other_groups, remove_gg_pub_type(lists:keydelete
- (gg5, 1, GGNodes))},
- {monitoring, []}],
-
-
- ?line case Info1 of
- Info1ok ->
- ok;
- _ ->
- test_server:fail({{"could not change the global groups"
- " in node", Cp1}, {Info1, Info1ok}})
- end,
+ Info1 = rpc:call(Cp1, global_group, info, []),
+ Info2 = rpc:call(Cp2, global_group, info, []),
+ Info3 = rpc:call(Cp3, global_group, info, []),
+ InfoA = rpc:call(CpA, global_group, info, []),
+ InfoB = rpc:call(CpB, global_group, info, []),
+ InfoC = rpc:call(CpC, global_group, info, []),
+ InfoD = rpc:call(CpD, global_group, info, []),
+ InfoE = rpc:call(CpE, global_group, info, []),
+ io:format( "#### Info1 ~p~n",[Info1]),
+ io:format( "#### Info2 ~p~n",[Info2]),
+ io:format( "#### Info3 ~p~n",[Info3]),
+ io:format( "#### InfoA ~p~n",[InfoA]),
+ io:format( "#### InfoB ~p~n",[InfoB]),
+ io:format( "#### InfoC ~p~n",[InfoC]),
+ io:format( "#### InfoD ~p~n",[InfoD]),
+ io:format( "#### InfoE ~p~n",[InfoE]),
+
+ {global_groups, GGNodes} = NewNG,
+
+ Info1ok = [{state, synced},
+ {own_group_name, gg1},
+ {own_group_nodes, GG1},
+ {synced_nodes, [mk_node(Ncp2, M)]},
+ {sync_error, []},
+ {no_contact, [mk_node(Ncp5, M)]},
+ {other_groups, remove_gg_pub_type(lists:keydelete
+ (gg1, 1, GGNodes))},
+ {monitoring, []}],
+
+
+ Info2ok = [{state, synced},
+ {own_group_name, gg1},
+ {own_group_nodes, GG1},
+ {synced_nodes, [mk_node(Ncp1, M)]},
+ {sync_error, []},
+ {no_contact, [mk_node(Ncp5, M)]},
+ {other_groups, remove_gg_pub_type(lists:keydelete
+ (gg1, 1, GGNodes))},
+ {monitoring, []}],
+
+ Info3ok = [{state, synced},
+ {own_group_name, gg2},
+ {own_group_nodes, GG2},
+ {synced_nodes, []},
+ {sync_error, []},
+ {no_contact, []},
+ {other_groups, remove_gg_pub_type(lists:keydelete
+ (gg2, 1, GGNodes))},
+ {monitoring, []}],
+
+ InfoAok = [{state, synced},
+ {own_group_name, gg4},
+ {own_group_nodes, GG4},
+ {synced_nodes, lists:delete(mk_node(NcpA, M), GG4)},
+ {sync_error, []},
+ {no_contact, []},
+ {other_groups, remove_gg_pub_type(lists:keydelete
+ (gg4, 1, GGNodes))},
+ {monitoring, []}],
+
+ InfoBok = [{state, synced},
+ {own_group_name, gg4},
+ {own_group_nodes, GG4},
+ {synced_nodes, lists:delete(mk_node(NcpB, M), GG4)},
+ {sync_error, []},
+ {no_contact, []},
+ {other_groups, remove_gg_pub_type(lists:keydelete
+ (gg4, 1, GGNodes))},
+ {monitoring, []}],
+
+ InfoCok = [{state, synced},
+ {own_group_name, gg5},
+ {own_group_nodes, GG5},
+ {synced_nodes, lists:delete(mk_node(NcpC, M), GG5)},
+ {sync_error, []},
+ {no_contact, []},
+ {other_groups, remove_gg_pub_type(lists:keydelete
+ (gg5, 1, GGNodes))},
+ {monitoring, []}],
+
+ InfoDok = [{state, synced},
+ {own_group_name, gg5},
+ {own_group_nodes, GG5},
+ {synced_nodes, lists:delete(mk_node(NcpD, M), GG5)},
+ {sync_error, []},
+ {no_contact, []},
+ {other_groups, remove_gg_pub_type(lists:keydelete
+ (gg5, 1, GGNodes))},
+ {monitoring, []}],
+
+ InfoEok = [{state, synced},
+ {own_group_name, gg5},
+ {own_group_nodes, GG5},
+ {synced_nodes, lists:delete(mk_node(NcpE, M), GG5)},
+ {sync_error, []},
+ {no_contact, []},
+ {other_groups, remove_gg_pub_type(lists:keydelete
+ (gg5, 1, GGNodes))},
+ {monitoring, []}],
+
+
+ case Info1 of
+ Info1ok ->
+ ok;
+ _ ->
+ ct:fail({{"could not change the global groups"
+ " in node", Cp1}, {Info1, Info1ok}})
+ end,
- ?line case Info2 of
- Info2ok ->
- ok;
- _ ->
- test_server:fail({{"could not change the global groups"
- " in node", Cp2}, {Info2, Info2ok}})
- end,
+ case Info2 of
+ Info2ok ->
+ ok;
+ _ ->
+ ct:fail({{"could not change the global groups"
+ " in node", Cp2}, {Info2, Info2ok}})
+ end,
- ?line case Info3 of
- Info3ok ->
- ok;
- _ ->
- test_server:fail({{"could not change the global groups"
- " in node", Cp3}, {Info3, Info3ok}})
- end,
+ case Info3 of
+ Info3ok ->
+ ok;
+ _ ->
+ ct:fail({{"could not change the global groups"
+ " in node", Cp3}, {Info3, Info3ok}})
+ end,
- ?line case InfoA of
- InfoAok ->
- ok;
- _ ->
- test_server:fail({{"could not change the global groups"
- " in node", CpA}, {InfoA, InfoAok}})
- end,
+ case InfoA of
+ InfoAok ->
+ ok;
+ _ ->
+ ct:fail({{"could not change the global groups"
+ " in node", CpA}, {InfoA, InfoAok}})
+ end,
- ?line case InfoB of
- InfoBok ->
- ok;
- _ ->
- test_server:fail({{"could not change the global groups"
- " in node", CpB}, {InfoB, InfoBok}})
- end,
+ case InfoB of
+ InfoBok ->
+ ok;
+ _ ->
+ ct:fail({{"could not change the global groups"
+ " in node", CpB}, {InfoB, InfoBok}})
+ end,
- ?line case InfoC of
- InfoCok ->
- ok;
- _ ->
- test_server:fail({{"could not change the global groups"
- " in node", CpC}, {InfoC, InfoCok}})
- end,
+ case InfoC of
+ InfoCok ->
+ ok;
+ _ ->
+ ct:fail({{"could not change the global groups"
+ " in node", CpC}, {InfoC, InfoCok}})
+ end,
- ?line case InfoD of
- InfoDok ->
- ok;
- _ ->
- test_server:fail({{"could not change the global groups"
- " in node", CpD}, {InfoD, InfoDok}})
- end,
+ case InfoD of
+ InfoDok ->
+ ok;
+ _ ->
+ ct:fail({{"could not change the global groups"
+ " in node", CpD}, {InfoD, InfoDok}})
+ end,
- ?line case InfoE of
- InfoEok ->
- ok;
- _ ->
- test_server:fail({{"could not change the global groups"
- " in node", CpE}, {InfoE, InfoEok}})
- end,
+ case InfoE of
+ InfoEok ->
+ ok;
+ _ ->
+ ct:fail({{"could not change the global groups"
+ " in node", CpE}, {InfoE, InfoEok}})
+ end,
write_high_level_trace(Config), % no good since CpC was restarted
stop_node(Cp1),
@@ -3324,7 +3262,7 @@ global_groups_change(Config) ->
stop_node(CpD),
stop_node(CpE),
- ?line init_condition(Config),
+ init_condition(Config),
ok.
sync_and_wait(Node) ->
@@ -3354,43 +3292,43 @@ sync_and_wait(Node) ->
is_real_system(KernelVsn, StdlibVsn) ->
LibDir = code:lib_dir(),
filelib:is_dir(filename:join(LibDir, "kernel-" ++ KernelVsn))
- andalso
- filelib:is_dir(filename:join(LibDir, "stdlib-" ++ StdlibVsn)).
+ andalso
+ filelib:is_dir(filename:join(LibDir, "stdlib-" ++ StdlibVsn)).
create_script_dc(ScriptName) ->
- ?line Name = filename:join(".", ScriptName),
- ?line Apps = application_controller:which_applications(),
- ?line {value,{_,_,KernelVer}} = lists:keysearch(kernel,1,Apps),
- ?line {value,{_,_,StdlibVer}} = lists:keysearch(stdlib,1,Apps),
- ?line {ok,Fd} = file:open(Name ++ ".rel", [write]),
- ?line {_, Version} = init:script_id(),
- ?line io:format(Fd,
- "{release, {\"Test release 3\", \"~s\"}, \n"
- " {erts, \"4.4\"}, \n"
- " [{kernel, \"~s\"}, {stdlib, \"~s\"}]}.\n",
- [Version, KernelVer, StdlibVer]),
- ?line file:close(Fd),
+ Name = filename:join(".", ScriptName),
+ Apps = application_controller:which_applications(),
+ {value,{_,_,KernelVer}} = lists:keysearch(kernel,1,Apps),
+ {value,{_,_,StdlibVer}} = lists:keysearch(stdlib,1,Apps),
+ {ok,Fd} = file:open(Name ++ ".rel", [write]),
+ {_, Version} = init:script_id(),
+ io:format(Fd,
+ "{release, {\"Test release 3\", \"~s\"}, \n"
+ " {erts, \"4.4\"}, \n"
+ " [{kernel, \"~s\"}, {stdlib, \"~s\"}]}.\n",
+ [Version, KernelVer, StdlibVer]),
+ file:close(Fd),
{KernelVer, StdlibVer}.
%% Not used?
config_dc(Fd, Ncp1, Ncp2, Ncp3) ->
M = from($@, atom_to_list(node())),
io:format(Fd, "[{kernel, [{sync_nodes_optional, ['~s@~s','~s@~s','~s@~s']},"
- "{sync_nodes_timeout, 1000},"
- "{global_groups, [{gg1, ['~s@~s', '~s@~s']},"
- " {gg2, ['~s@~s']}]}"
- " ]}].~n",
+ "{sync_nodes_timeout, 1000},"
+ "{global_groups, [{gg1, ['~s@~s', '~s@~s']},"
+ " {gg2, ['~s@~s']}]}"
+ " ]}].~n",
[Ncp1, M, Ncp2, M, Ncp3, M, Ncp1, M, Ncp2, M, Ncp3, M]).
config_dc1(Fd, Ncp1, Ncp2, Ncp3, NcpA, NcpB, NcpC, NcpD, NcpE) ->
M = from($@, atom_to_list(node())),
io:format(Fd, "[{kernel, [{sync_nodes_optional, ['~s@~s','~s@~s','~s@~s','~s@~s','~s@~s','~s@~s','~s@~s','~s@~s']},"
- "{sync_nodes_timeout, 1000},"
- "{global_groups, [{gg1, ['~s@~s', '~s@~s']},"
- " {gg2, ['~s@~s']},"
- " {gg4, normal, ['~s@~s','~s@~s','~s@~s']},"
- " {gg5, hidden, ['~s@~s','~s@~s']}]}]}].~n",
+ "{sync_nodes_timeout, 1000},"
+ "{global_groups, [{gg1, ['~s@~s', '~s@~s']},"
+ " {gg2, ['~s@~s']},"
+ " {gg4, normal, ['~s@~s','~s@~s','~s@~s']},"
+ " {gg5, hidden, ['~s@~s','~s@~s']}]}]}].~n",
[Ncp1, M, Ncp2, M, Ncp3, M,
NcpA, M, NcpB, M, NcpC, M, NcpD, M, NcpE, M,
Ncp1, M, Ncp2, M,
@@ -3401,8 +3339,8 @@ config_dc1(Fd, Ncp1, Ncp2, Ncp3, NcpA, NcpB, NcpC, NcpD, NcpE) ->
config_dc2(Fd, NewGG, Ncp1, Ncp2, Ncp3) ->
M = from($@, atom_to_list(node())),
io:format(Fd, "[{kernel, [{sync_nodes_optional, ['~s@~s','~s@~s','~s@~s']},"
- "{sync_nodes_timeout, 1000},"
- "~p]}].~n",
+ "{sync_nodes_timeout, 1000},"
+ "~p]}].~n",
[Ncp1, M, Ncp2, M, Ncp3, M, NewGG]).
@@ -3414,33 +3352,33 @@ from(_H, []) -> [].
other(A, [A, _B]) -> A;
other(_, [_A, B]) -> B.
-
+
%% this one runs at cp2
part1(Config, Main, Cp1, Cp3) ->
case catch begin
make_partition(Config, [Main, Cp1], [node(), Cp3]),
- ?line {_Pid, yes} = start_proc(test2),
- ?line {_Pid2, yes} = start_proc(test4)
+ {_Pid, yes} = start_proc(test2),
+ {_Pid2, yes} = start_proc(test4)
end of
{_, yes} -> ok; % w("ok", []);
{'EXIT', _R} ->
ok
- % w("global_SUITE line:~w: ~p", [?LINE, _R])
+ %% w("global_SUITE line:~w: ~p", [?LINE, _R])
end.
%% Runs at Cp2
part1_5(Config, Main, Cp1, Cp3) ->
case catch begin
make_partition(Config, [Main, Cp1], [node(), Cp3]),
- ?line {_Pid1, yes} = start_proc_basic(name12),
- ?line {_Pid2, yes} =
+ {_Pid1, yes} = start_proc_basic(name12),
+ {_Pid2, yes} =
rpc:call(Cp3, ?MODULE, start_proc_basic, [name03])
end of
{_, yes} -> ok; % w("ok", []);
{'EXIT', _R} ->
ok
- % w("global_SUITE line:~w: ~p", [?LINE, _R])
+ %% w("global_SUITE line:~w: ~p", [?LINE, _R])
end.
w(X,Y) ->
@@ -3451,7 +3389,7 @@ w(X,Y) ->
%% this one runs on one node in Part2
%% The partition is ready when is_ready_partition(Config) returns (true).
make_partition(Config, Part1, Part2) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
Ns = [begin
Name = lists:concat([atom_to_list(N),"_",msec(),".part"]),
File = filename:join([Dir, Name]),
@@ -3503,7 +3441,7 @@ is_ready_partition(Config) ->
true.
make_partition_file(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
filename:join([Dir, atom_to_list(make_partition_done)]).
%% this one runs at cp3
@@ -3514,37 +3452,36 @@ part2(Config, Parent, Main, Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6) ->
part3(Config, Parent, Main, Cp0, Cp1, Cp2, Cp3, Cp4, Cp5, Cp6) ->
make_partition(Config, [Main, Cp0, Cp1, Cp2], [Cp3, Cp4, Cp5, Cp6]),
start_procs(Parent, Cp4, Cp5, Cp6, Config),
- % Make Cp6 alone
- ?line rpc_cast(Cp5, ?MODULE, crash, [12000]),
- ?line rpc_cast(Cp6, ?MODULE, alone, [Cp0, Cp3]).
+ %% Make Cp6 alone
+ rpc_cast(Cp5, ?MODULE, crash, [12000]),
+ rpc_cast(Cp6, ?MODULE, alone, [Cp0, Cp3]).
start_procs(Parent, N1, N2, N3, Config) ->
S1 = lists:sort([N1, N2, N3]),
- ?line
?UNTIL(begin
NN = lists:sort(nodes()),
S1 =:= NN
end),
- ?line Pid3 = start_proc3(test1),
- ?line Pid4 = rpc:call(N1, ?MODULE, start_proc3, [test2]),
- ?line assert_pid(Pid4),
- ?line Pid5 = rpc:call(N2, ?MODULE, start_proc3, [test3]),
- ?line assert_pid(Pid5),
- ?line Pid6 = rpc:call(N3, ?MODULE, start_proc3, [test4]),
- ?line assert_pid(Pid6),
- ?line yes = global:register_name(test1, Pid3),
- ?line yes = global:register_name(test2, Pid4, {global, notify_all_name}),
- ?line yes = global:register_name(test3, Pid5, {global, random_notify_name}),
+ Pid3 = start_proc3(test1),
+ Pid4 = rpc:call(N1, ?MODULE, start_proc3, [test2]),
+ assert_pid(Pid4),
+ Pid5 = rpc:call(N2, ?MODULE, start_proc3, [test3]),
+ assert_pid(Pid5),
+ Pid6 = rpc:call(N3, ?MODULE, start_proc3, [test4]),
+ assert_pid(Pid6),
+ yes = global:register_name(test1, Pid3),
+ yes = global:register_name(test2, Pid4, {global, notify_all_name}),
+ yes = global:register_name(test3, Pid5, {global, random_notify_name}),
Resolve = fun(Name, Pid1, Pid2) ->
Parent ! {resolve_called, Name, node()},
{Min, Max} = minmax(Pid1, Pid2),
exit(Min, kill),
Max
end,
- ?line yes = global:register_name(test4, Pid6, Resolve).
+ yes = global:register_name(test4, Pid6, Resolve).
+
-
collect_resolves() -> cr(0).
cr(Res) ->
receive
@@ -3574,7 +3511,7 @@ start_proc() ->
receive
Pid -> Pid
end.
-
+
start_proc(Name) ->
Pid = spawn(?MODULE, p_init, [self(), Name]),
@@ -3618,7 +3555,7 @@ single_node(Time, Node, Config) ->
lists:foreach(fun(N) -> _ = erlang:disconnect_node(N) end, nodes()),
?UNTIL(get_known(node()) =:= [node()]),
spawn(?MODULE, init_2, []),
- test_server:sleep(Time - msec()),
+ ct:sleep(Time - msec()),
net_adm:ping(Node).
init_2() ->
@@ -3630,12 +3567,12 @@ loop_2() ->
receive
die -> ok
end.
-
+
msec() ->
msec(now()).
msec(T) ->
- element(1,T)*1000000000 + element(2,T)*1000 + element(3,T) div 1000.
+ element(1,T)*1000000000 + element(2,T)*1000 + element(3,T) div 1000.
assert_pid(Pid) ->
if
@@ -3680,13 +3617,15 @@ sreq(Pid, Msg) ->
alone(N1, N2) ->
lists:foreach(fun(Node) -> true = erlang:disconnect_node(Node) end,
nodes()),
- test_server:sleep(12000),
+ ct:sleep(12000),
net_adm:ping(N1),
net_adm:ping(N2),
yes = global:register_name(test5, self()).
crash(Time) ->
- test_server:sleep(Time),
+ %% ct:sleep/1 will not work because it calls a server process
+ %% that does not run on other nodes.
+ timer:sleep(Time),
erlang:halt().
loop() ->
@@ -3748,23 +3687,23 @@ pr_diff(Str, T0, T1) ->
{_, {H,M,S}} = calendar:time_difference(T0, T1),
((H*60+M)*60)+S
end,
- test_server:format(1,"~13s: ~w (diff: ~w)",[Str, T1, Diff]),
+ ct:pal(?HI_VERBOSITY,"~13s: ~w (diff: ~w)",[Str, T1, Diff]),
if
Diff > 100 ->
- test_server:format(1,"~s: ** LARGE DIFF ~w~n", [Str, Diff]);
+ io:format(1,"~s: ** LARGE DIFF ~w~n", [Str, Diff]);
true ->
ok
end.
-endif.
now_diff({A1,B1,C1},{A2,B2,C2}) ->
- C1-C2 + 1000000*((B1-B2) + 1000000*(A1-A2)).
+ C1-C2 + 1000000*((B1-B2) + 1000000*(A1-A2)).
start_node_boot(Name, Config, Boot) ->
Pa = filename:dirname(code:which(?MODULE)),
Res = test_server:start_node(Name, peer, [{args, " -pa " ++ Pa ++
- " -config " ++ Config ++
- " -boot " ++ atom_to_list(Boot)}]),
+ " -config " ++ Config ++
+ " -boot " ++ atom_to_list(Boot)}]),
record_started_node(Res).
%% Increase the timeout for when an upcoming connection is teared down
@@ -3790,13 +3729,13 @@ start_node(Name0, How, Args, Config) ->
Pa = filename:dirname(code:which(?MODULE)),
R = test_server:start_node(Name, How, [{args,
Args ++ " " ++
- "-kernel net_setuptime 100 "
-% "-noshell "
+ "-kernel net_setuptime 100 "
+ %% "-noshell "
"-pa " ++ Pa},
{linked, false}
-]),
+ ]),
%% {linked,false} only seems to work for slave nodes.
-% test_server:sleep(1000),
+ %% ct:sleep(1000),
record_started_node(R).
start_node_rel(Name0, Rel, Config) ->
@@ -3807,14 +3746,14 @@ start_node_rel(Name0, Rel, Config) ->
Rel when is_atom(Rel) ->
{[{release, atom_to_list(Rel)}], ""};
RelList ->
- {RelList, ""}
- end,
+ {RelList, ""}
+ end,
Env = [],
Pa = filename:dirname(code:which(?MODULE)),
Res = test_server:start_node(Name, peer,
[{args,
Compat ++
- " -kernel net_setuptime 100 "
+ " -kernel net_setuptime 100 "
" -pa " ++ Pa},
{erl, Release}] ++ Env),
record_started_node(Res).
@@ -3844,12 +3783,12 @@ stop_nodes(Nodes) ->
lists:foreach(fun(Node) -> stop_node(Node) end, Nodes).
stop_node(Node) ->
- ?line ?t:stop_node(Node).
+ test_server:stop_node(Node).
stop() ->
lists:foreach(fun(Node) ->
- ?t:stop_node(Node)
+ test_server:stop_node(Node)
end, nodes()).
dbg_logs(Name) -> dbg_logs(Name, ?NODES).
@@ -3857,44 +3796,41 @@ dbg_logs(Name) -> dbg_logs(Name, ?NODES).
dbg_logs(Name, Nodes) ->
lists:foreach(fun(N) ->
F = lists:concat([Name, ".log.", N, ".txt"]),
- ?line ok = sys:log_to_file({global_name_server, N}, F)
+ ok = sys:log_to_file({global_name_server, N}, F)
end, Nodes).
-global_lost_nodes(suite) ->
- [];
-global_lost_nodes(doc) ->
- ["Tests that locally loaded nodes do not loose contact with other nodes."];
+%% Tests that locally loaded nodes do not loose contact with other nodes.
global_lost_nodes(Config) when is_list(Config) ->
Timeout = 60,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
-
- ?line {ok, Node1} = start_node(node1, Config),
- ?line {ok, Node2} = start_node(node2, Config),
+ init_condition(Config),
+
+ {ok, Node1} = start_node(node1, Config),
+ {ok, Node2} = start_node(node2, Config),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- ?line io:format("Nodes: ~p", [nodes()]),
- ?line io:format("Nodes at node1: ~p",
- [rpc:call(Node1, erlang, nodes, [])]),
- ?line io:format("Nodes at node2: ~p",
- [rpc:call(Node2, erlang, nodes, [])]),
+ io:format("Nodes: ~p", [nodes()]),
+ io:format("Nodes at node1: ~p",
+ [rpc:call(Node1, erlang, nodes, [])]),
+ io:format("Nodes at node2: ~p",
+ [rpc:call(Node2, erlang, nodes, [])]),
- ?line rpc_cast(Node1, ?MODULE, global_load, [node_1,Node2,node_2]),
- ?line rpc_cast(Node2, ?MODULE, global_load, [node_2,Node1,node_1]),
+ rpc_cast(Node1, ?MODULE, global_load, [node_1,Node2,node_2]),
+ rpc_cast(Node2, ?MODULE, global_load, [node_2,Node1,node_1]),
lost_nodes_waiter(Node1, Node2),
write_high_level_trace(Config),
- ?line stop_node(Node1),
- ?line stop_node(Node2),
- ?line init_condition(Config),
+ stop_node(Node1),
+ stop_node(Node2),
+ init_condition(Config),
ok.
global_load(MyName, OtherNode, OtherName) ->
- ?line yes = global:register_name(MyName, self()),
+ yes = global:register_name(MyName, self()),
io:format("Registered ~p",[MyName]),
global_load1(OtherNode, OtherName, 0).
@@ -3902,32 +3838,32 @@ global_load1(_OtherNode, _OtherName, 2) ->
io:format("*** ~p giving up. No use.", [node()]),
init:stop();
global_load1(OtherNode, OtherName, Fails) ->
- test_server:sleep(1000),
- ?line case catch global:whereis_name(OtherName) of
- Pid when is_pid(Pid) ->
- io:format("~p says: ~p is still there.",
- [node(),OtherName]),
- global_load1(OtherNode, OtherName, Fails);
- Other ->
- io:format("~p says: ~p is lost (~p) Pinging.",
- [ node(), OtherName, Other]),
- case net_adm:ping(OtherNode) of
- pong ->
- io:format("Re-established contact to ~p",
- [OtherName]);
- pang ->
- io:format("PANIC! Other node is DEAD.", []),
- init:stop()
- end,
- global_load1(OtherNode, OtherName, Fails+1)
- end.
+ ct:sleep(1000),
+ case catch global:whereis_name(OtherName) of
+ Pid when is_pid(Pid) ->
+ io:format("~p says: ~p is still there.",
+ [node(),OtherName]),
+ global_load1(OtherNode, OtherName, Fails);
+ Other ->
+ io:format("~p says: ~p is lost (~p) Pinging.",
+ [ node(), OtherName, Other]),
+ case net_adm:ping(OtherNode) of
+ pong ->
+ io:format("Re-established contact to ~p",
+ [OtherName]);
+ pang ->
+ io:format("PANIC! Other node is DEAD.", []),
+ init:stop()
+ end,
+ global_load1(OtherNode, OtherName, Fails+1)
+ end.
lost_nodes_waiter(N1, N2) ->
- ?line net_kernel:monitor_nodes(true),
+ net_kernel:monitor_nodes(true),
receive
{nodedown, Node} when Node =:= N1 ; Node =:= N2 ->
io:format("~p went down!",[Node]),
- ?line ?t:fail("Node went down.")
+ ct:fail("Node went down.")
after 10000 ->
ok
end,
@@ -3935,36 +3871,33 @@ lost_nodes_waiter(N1, N2) ->
-mass_death(suite) ->
- [];
-mass_death(doc) ->
- ["Tests the simultaneous death of many processes with registered names"];
+%% Tests the simultaneous death of many processes with registered names.
mass_death(Config) when is_list(Config) ->
Timeout = 90,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line OrigNames = global:registered_names(),
+ init_condition(Config),
+ OrigNames = global:registered_names(),
%% Start nodes
- ?line Cps = [cp1,cp2,cp3,cp4,cp5],
- ?line Nodes = [begin {ok, Node} = start_node(Cp, Config), Node end ||
- Cp <- Cps],
- ?line io:format("Nodes: ~p~n", [Nodes]),
- ?line Ns = lists:seq(1, 40),
+ Cps = [cp1,cp2,cp3,cp4,cp5],
+ Nodes = [begin {ok, Node} = start_node(Cp, Config), Node end ||
+ Cp <- Cps],
+ io:format("Nodes: ~p~n", [Nodes]),
+ Ns = lists:seq(1, 40),
%% Start processes with globally registered names on the nodes
- ?line {Pids,[]} = rpc:multicall(Nodes, ?MODULE, mass_spawn, [Ns]),
- ?line io:format("Pids: ~p~n", [Pids]),
+ {Pids,[]} = rpc:multicall(Nodes, ?MODULE, mass_spawn, [Ns]),
+ io:format("Pids: ~p~n", [Pids]),
%% Wait...
- ?line test_server:sleep(10000),
+ ct:sleep(10000),
%% Check the globally registered names
- ?line NewNames = global:registered_names(),
- ?line io:format("NewNames: ~p~n", [NewNames]),
- ?line Ndiff = lists:sort(NewNames--OrigNames),
- ?line io:format("Ndiff: ~p~n", [Ndiff]),
- ?line Ndiff = lists:sort(mass_names(Nodes, Ns)),
+ NewNames = global:registered_names(),
+ io:format("NewNames: ~p~n", [NewNames]),
+ Ndiff = lists:sort(NewNames--OrigNames),
+ io:format("Ndiff: ~p~n", [Ndiff]),
+ Ndiff = lists:sort(mass_names(Nodes, Ns)),
%%
%% Kill the root pids
- ?line lists:foreach(fun (Pid) -> Pid ! drop_dead end, Pids),
+ lists:foreach(fun (Pid) -> Pid ! drop_dead end, Pids),
%% Start probing and wait for all registered names to disappear
{YYYY,MM,DD} = date(),
{H,M,S} = time(),
@@ -3973,22 +3906,21 @@ mass_death(Config) when is_list(Config) ->
wait_mass_death(Nodes, OrigNames, erlang:now(), Config).
wait_mass_death(Nodes, OrigNames, Then, Config) ->
- ?line Names = global:registered_names(),
- ?line
- case Names--OrigNames of
- [] ->
- ?line T = now_diff(erlang:now(), Then) div 1000,
- ?line lists:foreach(
- fun (Node) ->
- stop_node(Node)
- end, Nodes),
- ?line init_condition(Config),
- {comment,lists:flatten(io_lib:format("~.3f s~n", [T/1000.0]))};
- Ndiff ->
- ?line io:format("Ndiff: ~p~n", [Ndiff]),
- ?line test_server:sleep(1000),
- ?line wait_mass_death(Nodes, OrigNames, Then, Config)
- end.
+ Names = global:registered_names(),
+ case Names--OrigNames of
+ [] ->
+ T = now_diff(erlang:now(), Then) div 1000,
+ lists:foreach(
+ fun (Node) ->
+ stop_node(Node)
+ end, Nodes),
+ init_condition(Config),
+ {comment,lists:flatten(io_lib:format("~.3f s~n", [T/1000.0]))};
+ Ndiff ->
+ io:format("Ndiff: ~p~n", [Ndiff]),
+ ct:sleep(1000),
+ wait_mass_death(Nodes, OrigNames, Then, Config)
+ end.
mass_spawn([]) ->
ok;
@@ -4018,7 +3950,7 @@ mass_name(Node, N) ->
start_nodes(L, How, Config) ->
start_nodes2(L, How, 0, Config),
Nodes = collect_nodes(0, length(L)),
- ?line ?UNTIL([] =:= Nodes -- nodes()),
+ ?UNTIL([] =:= Nodes -- nodes()),
put(?nodes_tag, Nodes),
%% Pinging doesn't help, we have to wait too, for nodes() to become
%% correct on the other node.
@@ -4042,7 +3974,7 @@ verify_nodes(Nodes, Config) ->
verify_nodes([], _N, _Config) ->
[];
verify_nodes([Node | Rest], N, Config) ->
- ?line ?UNTIL(
+ ?UNTIL(
case rpc:call(Node, erlang, nodes, []) of
Nodes when is_list(Nodes) ->
case N =:= lists:sort([Node | Nodes]) of
@@ -4074,7 +4006,7 @@ start_nodes2([Name | Rest], How, N, Config) ->
Self ! {N, R},
%% sleeping is necessary, or with peer nodes, they will
%% go down again, despite {linked, false}.
- test_server:sleep(100000)
+ ct:sleep(100000)
end),
start_nodes2(Rest, How, N+1, Config).
@@ -4155,14 +4087,12 @@ remove_gg_pub_type([{GG, _, Nodes}|Rest]) ->
%% Better do this in a slave node.
%% (The transition from links to monitors does not affect this case.)
-garbage_messages(suite) ->
- [];
garbage_messages(Config) when is_list(Config) ->
Timeout = 25,
ct:timetrap({seconds,Timeout}),
init_high_level_trace(Timeout),
- ?line init_condition(Config),
- ?line [Slave] = start_nodes([garbage_messages], slave, Config),
+ init_condition(Config),
+ [Slave] = start_nodes([garbage_messages], slave, Config),
Fun = fun() ->
{links,L} = process_info(whereis(global_name_server), links),
lists:foreach(fun(Pid) -> Pid ! {garbage,to,you} end, L),
@@ -4170,15 +4100,15 @@ garbage_messages(Config) when is_list(Config) ->
_Any -> ok
end
end,
- ?line Pid = spawn_link(Slave, erlang, apply, [Fun,[]]),
- ?t:sleep(2000),
- ?line Global = rpc:call(Slave, erlang, whereis, [global_name_server]),
- ?line {registered_name,global_name_server} =
+ Pid = spawn_link(Slave, erlang, apply, [Fun,[]]),
+ ct:sleep(2000),
+ Global = rpc:call(Slave, erlang, whereis, [global_name_server]),
+ {registered_name,global_name_server} =
rpc:call(Slave, erlang, process_info, [Global,registered_name]),
- ?line true = unlink(Pid),
+ true = unlink(Pid),
write_high_level_trace(Config),
- ?line stop_node(Slave),
- ?line init_condition(Config),
+ stop_node(Slave),
+ init_condition(Config),
ok.
wait_for_ready_net(Config) ->
@@ -4186,13 +4116,13 @@ wait_for_ready_net(Config) ->
wait_for_ready_net(Nodes0, Config) ->
Nodes = lists:sort(Nodes0),
- ?t:format("wait_for_ready_net ~p~n", [Nodes]),
+ io:format("wait_for_ready_net ~p~n", [Nodes]),
?UNTIL(begin
lists:all(fun(N) -> Nodes =:= get_known(N) end, Nodes) and
- lists:all(fun(N) ->
- LNs = rpc:call(N, erlang, nodes, []),
- Nodes =:= lists:sort([N | LNs])
- end, Nodes)
+ lists:all(fun(N) ->
+ LNs = rpc:call(N, erlang, nodes, []),
+ Nodes =:= lists:sort([N | LNs])
+ end, Nodes)
end).
get_known(Node) ->
@@ -4207,7 +4137,7 @@ quite_a_few_nodes(Max) ->
N = try
ulimit("ulimit -u")
catch _:_ ->
- ulimit("ulimit -p") % can fail...
+ ulimit("ulimit -p") % can fail...
end,
lists:min([(N - 40) div 3, Max]).
@@ -4264,15 +4194,15 @@ start_tracer() ->
Pid = spawn(fun() -> tracer([]) end),
case catch register(my_tracer, Pid) of
{'EXIT', _} ->
- ?t:fail(re_register_my_tracer);
+ ct:fail(re_register_my_tracer);
_ ->
ok
end.
tracer(L) ->
receive
- % {save, Term} ->
- % tracer([{now(),Term} | L]);
+ %% {save, Term} ->
+ %% tracer([{now(),Term} | L]);
{get, From} ->
From ! {trace, lists:reverse(L)},
tracer([]);
@@ -4305,7 +4235,7 @@ collect_tracers(Nodes) ->
trace_message(M) ->
case catch my_tracer ! M of
{'EXIT', _} ->
- ?t:fail(my_tracer_not_registered);
+ ct:fail(my_tracer_not_registered);
_ ->
ok
end.
diff --git a/lib/kernel/test/global_SUITE_data/global_trace.erl b/lib/kernel/test/global_SUITE_data/global_trace.erl
index 69d95f610d..b4af4ed76e 100644
--- a/lib/kernel/test/global_SUITE_data/global_trace.erl
+++ b/lib/kernel/test/global_SUITE_data/global_trace.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/global_group_SUITE.erl b/lib/kernel/test/global_group_SUITE.erl
index 0a994c3bf0..594ee6b537 100644
--- a/lib/kernel/test/global_group_SUITE.erl
+++ b/lib/kernel/test/global_group_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,15 +28,17 @@
-export([init_per_testcase/2, end_per_testcase/2]).
-%-compile(export_all).
+%%-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(NODES, [node()|nodes()]).
-define(UNTIL(Seq), loop_until_true(fun() -> Seq end)).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[start_gg_proc, no_gg_proc, no_gg_proc_sync, compatible,
@@ -46,10 +48,10 @@ groups() ->
[].
init_per_group(_GroupName, Config) ->
- Config.
+ Config.
end_per_group(_GroupName, Config) ->
- Config.
+ Config.
init_per_suite(Config) ->
@@ -77,15 +79,13 @@ end_per_suite(_Config) ->
ok.
-define(TESTCASE, testcase_name).
--define(testcase, ?config(?TESTCASE, Config)).
+-define(testcase, proplists:get_value(?TESTCASE, Config)).
-init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(5)),
- [{?TESTCASE, Case}, {watchdog, Dog}|Config].
+init_per_testcase(Case, Config) ->
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
+end_per_testcase(_Func, _Config) ->
+ ok.
%%-----------------------------------------------------------------
%% Test suites for global groups.
@@ -94,198 +94,191 @@ end_per_testcase(_Func, Config) ->
%%-----------------------------------------------------------------
-start_gg_proc(suite) -> [];
-start_gg_proc(doc) -> ["Check that the global_group processes are started automatically. "];
+%% Check that the global_group processes are started automatically. .
start_gg_proc(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(120)),
-
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "global_group.config"),
- ?line {ok, Fd}=file:open(File, [write]),
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "global_group.config"),
+ {ok, Fd}=file:open(File, [write]),
[Ncp1,Ncp2,Ncp3] = node_names([cp1, cp2, cp3], Config),
- ?line config(Fd, Ncp1, Ncp2, Ncp3, "cpx", "cpy", "cpz", "cpq"),
+ config(Fd, Ncp1, Ncp2, Ncp3, "cpx", "cpy", "cpz", "cpq"),
- ?line Cp1nn = node_at(Ncp1),
- ?line Cp2nn = node_at(Ncp2),
- ?line Cp3nn = node_at(Ncp3),
+ Cp1nn = node_at(Ncp1),
+ Cp2nn = node_at(Ncp2),
+ Cp3nn = node_at(Ncp3),
- ?line {ok, Cp1} = start_node(Ncp1, Config),
- ?line {ok, Cp2} = start_node(Ncp2, Config),
- ?line {ok, Cp3} = start_node(Ncp3, Config),
+ {ok, Cp1} = start_node(Ncp1, Config),
+ {ok, Cp2} = start_node(Ncp2, Config),
+ {ok, Cp3} = start_node(Ncp3, Config),
- ?line [] = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
- ?line [] = rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}]),
- ?line [] = rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}]),
+ [] = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
+ [] = rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}]),
+ [] = rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}]),
- % stop the nodes, and make sure names are released.
+ %% stop the nodes, and make sure names are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
- ?line test_server:timetrap_cancel(Dog),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
ok.
-
-no_gg_proc(suite) -> [];
-no_gg_proc(doc) -> ["Start a system without global groups. Nodes are not "
- "synced at start (sync_nodes_optional is not defined)"];
+
+%% Start a system without global groups. Nodes are not
+%% synced at start (sync_nodes_optional is not defined).
no_gg_proc(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(200)),
-
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "no_global_group.config"),
- ?line {ok, Fd} = file:open(File, [write]),
- ?line config_no(Fd),
-
- ?line NN = node_name(atom_to_list(node())),
- ?line Cp1nn = list_to_atom("cp1@" ++ NN),
- ?line Cp2nn = list_to_atom("cp2@" ++ NN),
- ?line Cp3nn = list_to_atom("cp3@" ++ NN),
- ?line Cpxnn = list_to_atom("cpx@" ++ NN),
- ?line Cpynn = list_to_atom("cpy@" ++ NN),
- ?line Cpznn = list_to_atom("cpz@" ++ NN),
-
- ?line {ok, Cp1} = start_node_no(cp1, Config),
- ?line {ok, Cp2} = start_node_no(cp2, Config),
- ?line {ok, Cp3} = start_node_no(cp3, Config),
- ?line {ok, Cpx} = start_node_no(cpx, Config),
- ?line {ok, Cpy} = start_node_no(cpy, Config),
- ?line {ok, Cpz} = start_node_no(cpz, Config),
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "no_global_group.config"),
+ {ok, Fd} = file:open(File, [write]),
+ config_no(Fd),
+
+ NN = node_name(atom_to_list(node())),
+ Cp1nn = list_to_atom("cp1@" ++ NN),
+ Cp2nn = list_to_atom("cp2@" ++ NN),
+ Cp3nn = list_to_atom("cp3@" ++ NN),
+ Cpxnn = list_to_atom("cpx@" ++ NN),
+ Cpynn = list_to_atom("cpy@" ++ NN),
+ Cpznn = list_to_atom("cpz@" ++ NN),
+
+ {ok, Cp1} = start_node_no(cp1, Config),
+ {ok, Cp2} = start_node_no(cp2, Config),
+ {ok, Cp3} = start_node_no(cp3, Config),
+ {ok, Cpx} = start_node_no(cpx, Config),
+ {ok, Cpy} = start_node_no(cpy, Config),
+ {ok, Cpz} = start_node_no(cpz, Config),
%% let the nodes know of each other
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cp2nn]),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cp3nn]),
- ?line pong = rpc:call(Cp3, net_adm, ping, [Cpxnn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cpynn]),
- ?line pong = rpc:call(Cpy, net_adm, ping, [Cpznn]),
+ pong = rpc:call(Cp1, net_adm, ping, [Cp2nn]),
+ pong = rpc:call(Cp2, net_adm, ping, [Cp3nn]),
+ pong = rpc:call(Cp3, net_adm, ping, [Cpxnn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cpynn]),
+ pong = rpc:call(Cpy, net_adm, ping, [Cpznn]),
- ?line wait_for_ready_net(),
+ wait_for_ready_net(),
- ?line [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
- ?line [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}]),
- ?line [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}]),
- ?line [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}]),
- ?line [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}]),
- ?line [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}]),
+ [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
+ [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}]),
+ [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}]),
+ [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}]),
+ [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}]),
+ [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}]),
- % start a proc and register it
- ?line {Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [test2]),
+ %% start a proc and register it
+ {Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [test2]),
- ?line RegNames = lists:sort([test2,test_server]),
+ RegNames = lists:sort([test2,test_server]),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}])),
- ?line undefined = rpc:call(Cp3, global_group, global_groups, []),
+ undefined = rpc:call(Cp3, global_group, global_groups, []),
+
+ Own_nodes_should = [node(), Cp1nn, Cp2nn, Cp3nn,
+ Cpxnn, Cpynn, Cpznn],
+ Own_nodes = rpc:call(Cp3, global_group, own_nodes, []),
+ [] = (Own_nodes -- Own_nodes_should),
+ [] = (Own_nodes_should -- Own_nodes),
+
+ Pid2 = rpc:call(Cp1, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout2)
+ end,
+ Pid2 = rpc:call(Cp2, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout3)
+ end,
+ Pid2 = rpc:call(Cpz, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout4)
+ end,
- ?line Own_nodes_should = [node(), Cp1nn, Cp2nn, Cp3nn,
- Cpxnn, Cpynn, Cpznn],
- ?line Own_nodes = rpc:call(Cp3, global_group, own_nodes, []),
- ?line [] = (Own_nodes -- Own_nodes_should),
- ?line [] = (Own_nodes_should -- Own_nodes),
-
- ?line Pid2 = rpc:call(Cp1, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout2)
- end,
- ?line Pid2 = rpc:call(Cp2, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout3)
- end,
- ?line Pid2 = rpc:call(Cpz, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout4)
- end,
-
-
- % start a proc and register it
- ?line {PidX, yes} = rpc:call(Cpx, ?MODULE, start_proc, [test]),
+
+ %% start a proc and register it
+ {PidX, yes} = rpc:call(Cpx, ?MODULE, start_proc, [test]),
%%------------------------------------
%% Test monitor nodes
%%------------------------------------
- ?line Pid2 = rpc:call(Cp1, global_group, send, [{node, Cp2nn}, test2, monitor]),
- ?line PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, monitor]),
+ Pid2 = rpc:call(Cp1, global_group, send, [{node, Cp2nn}, test2, monitor]),
+ PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, monitor]),
- % Kill node Cp1
- ?line Pid2 =
+ %% Kill node Cp1
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodedown, Cp1}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodedown, Cp1}]),
- ?line test_server:sleep(100),
- ?line stop_node(Cp1),
- ?line test_server:sleep(1000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ ct:sleep(100),
+ stop_node(Cp1),
+ ct:sleep(1000),
+
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
- % Kill node Cpz
- ?line Pid2 =
+ %% Kill node Cpz
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodedown, Cpz}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodedown, Cpz}]),
- ?line test_server:sleep(100),
- ?line stop_node(Cpz),
- ?line test_server:sleep(1000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ ct:sleep(100),
+ stop_node(Cpz),
+ ct:sleep(1000),
- % Restart node Cp1
- ?line Pid2 =
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+
+ %% Restart node Cp1
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodeup, Cp1}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodeup, Cp1}]),
- ?line {ok, Cp1} = start_node_no(cp1, Config),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cp1nn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cp1nn]),
- ?line wait_for_ready_net(),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ {ok, Cp1} = start_node_no(cp1, Config),
+ pong = rpc:call(Cp2, net_adm, ping, [Cp1nn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cp1nn]),
+ wait_for_ready_net(),
- % Restart node Cpz
- ?line Pid2 =
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+
+ %% Restart node Cpz
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodeup, Cpz}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodeup, Cpz}]),
- ?line {ok, Cpz} = start_node_no(cpz, Config),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cpznn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cpznn]),
- ?line wait_for_ready_net(),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ {ok, Cpz} = start_node_no(cpz, Config),
+ pong = rpc:call(Cp2, net_adm, ping, [Cpznn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cpznn]),
+ wait_for_ready_net(),
- % stop the nodes, and make sure names are released.
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+
+ %% stop the nodes, and make sure names are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
@@ -293,174 +286,169 @@ no_gg_proc(Config) when is_list(Config) ->
stop_node(Cpy),
stop_node(Cpz),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
- ?line test_server:timetrap_cancel(Dog),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
ok.
-
-no_gg_proc_sync(suite) -> [];
-no_gg_proc_sync(doc) ->
- ["Start a system without global groups, but syncing the nodes by using "
- "sync_nodes_optional."];
-no_gg_proc_sync(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(200)),
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "no_global_group_sync.config"),
- ?line {ok, Fd} = file:open(File, [write]),
+%% Start a system without global groups, but syncing the nodes by using
+%% sync_nodes_optional.
+no_gg_proc_sync(Config) when is_list(Config) ->
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "no_global_group_sync.config"),
+ {ok, Fd} = file:open(File, [write]),
[Ncp1,Ncp2,Ncp3,Ncpx,Ncpy,Ncpz] =
node_names([cp1,cp2,cp3,cpx,cpy,cpz], Config),
- ?line config_sync(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz),
-
- ?line Cp1nn = node_at(Ncp1),
- ?line Cp2nn = node_at(Ncp2),
- ?line Cp3nn = node_at(Ncp3),
- ?line Cpxnn = node_at(Ncpx),
- ?line Cpynn = node_at(Ncpy),
- ?line Cpznn = node_at(Ncpz),
-
- ?line {ok, Cp1} = start_node_no2(Ncp1, Config),
- ?line {ok, Cp2} = start_node_no2(Ncp2, Config),
- ?line {ok, Cp3} = start_node_no2(Ncp3, Config),
- ?line {ok, Cpx} = start_node_no2(Ncpx, Config),
- ?line {ok, Cpy} = start_node_no2(Ncpy, Config),
- ?line {ok, Cpz} = start_node_no2(Ncpz, Config),
+ config_sync(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz),
+
+ Cp1nn = node_at(Ncp1),
+ Cp2nn = node_at(Ncp2),
+ Cp3nn = node_at(Ncp3),
+ Cpxnn = node_at(Ncpx),
+ Cpynn = node_at(Ncpy),
+ Cpznn = node_at(Ncpz),
+
+ {ok, Cp1} = start_node_no2(Ncp1, Config),
+ {ok, Cp2} = start_node_no2(Ncp2, Config),
+ {ok, Cp3} = start_node_no2(Ncp3, Config),
+ {ok, Cpx} = start_node_no2(Ncpx, Config),
+ {ok, Cpy} = start_node_no2(Ncpy, Config),
+ {ok, Cpz} = start_node_no2(Ncpz, Config),
%% let the nodes know of each other
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cp2nn]),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cp3nn]),
- ?line pong = rpc:call(Cp3, net_adm, ping, [Cpxnn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cpynn]),
- ?line pong = rpc:call(Cpy, net_adm, ping, [Cpznn]),
+ pong = rpc:call(Cp1, net_adm, ping, [Cp2nn]),
+ pong = rpc:call(Cp2, net_adm, ping, [Cp3nn]),
+ pong = rpc:call(Cp3, net_adm, ping, [Cpxnn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cpynn]),
+ pong = rpc:call(Cpy, net_adm, ping, [Cpznn]),
- ?line wait_for_ready_net(),
+ wait_for_ready_net(),
- ?line [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
- ?line [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}]),
- ?line [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}]),
- ?line [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}]),
- ?line [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}]),
- ?line [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}]),
+ [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
+ [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}]),
+ [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}]),
+ [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}]),
+ [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}]),
+ [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}]),
- % start a proc and register it
- ?line {Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [test2]),
+ %% start a proc and register it
+ {Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [test2]),
- ?line RegNames = lists:sort([test2,test_server]),
+ RegNames = lists:sort([test2,test_server]),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}])),
- ?line undefined = rpc:call(Cp3, global_group, global_groups, []),
+ undefined = rpc:call(Cp3, global_group, global_groups, []),
- ?line Own_nodes_should = [node(), Cp1nn, Cp2nn, Cp3nn,
- Cpxnn, Cpynn, Cpznn],
- ?line Own_nodes = rpc:call(Cp3, global_group, own_nodes, []),
- ?line [] = (Own_nodes -- Own_nodes_should),
- ?line [] = (Own_nodes_should -- Own_nodes),
-
- ?line Pid2 = rpc:call(Cp1, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout2)
- end,
- ?line Pid2 = rpc:call(Cp2, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout3)
- end,
- ?line Pid2 = rpc:call(Cpz, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout4)
- end,
-
-
- % start a proc and register it
- ?line {PidX, yes} = rpc:call(Cpx, ?MODULE, start_proc, [test]),
+ Own_nodes_should = [node(), Cp1nn, Cp2nn, Cp3nn,
+ Cpxnn, Cpynn, Cpznn],
+ Own_nodes = rpc:call(Cp3, global_group, own_nodes, []),
+ [] = (Own_nodes -- Own_nodes_should),
+ [] = (Own_nodes_should -- Own_nodes),
+
+ Pid2 = rpc:call(Cp1, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout2)
+ end,
+ Pid2 = rpc:call(Cp2, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout3)
+ end,
+ Pid2 = rpc:call(Cpz, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout4)
+ end,
+
+
+ %% start a proc and register it
+ {PidX, yes} = rpc:call(Cpx, ?MODULE, start_proc, [test]),
%%------------------------------------
%% Test monitor nodes
%%------------------------------------
- ?line Pid2 = rpc:call(Cp1, global_group, send, [{node, Cp2nn}, test2, monitor]),
- ?line PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, monitor]),
+ Pid2 = rpc:call(Cp1, global_group, send, [{node, Cp2nn}, test2, monitor]),
+ PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, monitor]),
- % Kill node Cp1
- ?line Pid2 =
+ %% Kill node Cp1
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodedown, Cp1}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodedown, Cp1}]),
- ?line test_server:sleep(100),
- ?line stop_node(Cp1),
- ?line test_server:sleep(1000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ ct:sleep(100),
+ stop_node(Cp1),
+ ct:sleep(1000),
- % Kill node Cpz
- ?line Pid2 =
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+
+ %% Kill node Cpz
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodedown, Cpz}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodedown, Cpz}]),
- ?line test_server:sleep(100),
- ?line stop_node(Cpz),
- ?line test_server:sleep(1000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ ct:sleep(100),
+ stop_node(Cpz),
+ ct:sleep(1000),
+
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
- % Restart node Cp1
- ?line Pid2 =
+ %% Restart node Cp1
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodeup, Cp1}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodeup, Cp1}]),
- ?line {ok, Cp1} = start_node_no2(Ncp1, Config),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cp1nn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cp1nn]),
- ?line wait_for_ready_net(),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ {ok, Cp1} = start_node_no2(Ncp1, Config),
+ pong = rpc:call(Cp2, net_adm, ping, [Cp1nn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cp1nn]),
+ wait_for_ready_net(),
+
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
- % Restart node Cpz
- ?line Pid2 =
+ %% Restart node Cpz
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodeup, Cpz}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodeup, Cpz}]),
- ?line {ok, Cpz} = start_node_no2(Ncpz, Config),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cpznn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cpznn]),
- ?line wait_for_ready_net(),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ {ok, Cpz} = start_node_no2(Ncpz, Config),
+ pong = rpc:call(Cp2, net_adm, ping, [Cpznn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cpznn]),
+ wait_for_ready_net(),
+
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
- % stop the nodes, and make sure names are released.
+ %% stop the nodes, and make sure names are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
@@ -468,173 +456,168 @@ no_gg_proc_sync(Config) when is_list(Config) ->
stop_node(Cpy),
stop_node(Cpz),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
- ?line test_server:timetrap_cancel(Dog),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
ok.
-
-compatible(suite) -> [];
-compatible(doc) ->
- ["Check that a system without global groups is compatible with the old R4 system."];
-compatible(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(200)),
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "global_group_comp.config"),
- ?line {ok, Fd} = file:open(File, [write]),
+%% Check that a system without global groups is compatible with the old R4 system.
+compatible(Config) when is_list(Config) ->
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "global_group_comp.config"),
+ {ok, Fd} = file:open(File, [write]),
[Ncp1,Ncp2,Ncp3,Ncpx,Ncpy,Ncpz] =
node_names([cp1,cp2,cp3,cpx,cpy,cpz], Config),
- ?line config_comp(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz),
-
- ?line Cp1nn = node_at(Ncp1),
- ?line Cp2nn = node_at(Ncp2),
- ?line Cp3nn = node_at(Ncp3),
- ?line Cpxnn = node_at(Ncpx),
- ?line Cpynn = node_at(Ncpy),
- ?line Cpznn = node_at(Ncpz),
-
- ?line {ok, Cp1} = start_node_comp(Ncp1, Config),
- ?line {ok, Cp2} = start_node_comp(Ncp2, Config),
- ?line {ok, Cp3} = start_node_comp(Ncp3, Config),
- ?line {ok, Cpx} = start_node_comp(Ncpx, Config),
- ?line {ok, Cpy} = start_node_comp(Ncpy, Config),
- ?line {ok, Cpz} = start_node_comp(Ncpz, Config),
+ config_comp(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz),
+
+ Cp1nn = node_at(Ncp1),
+ Cp2nn = node_at(Ncp2),
+ Cp3nn = node_at(Ncp3),
+ Cpxnn = node_at(Ncpx),
+ Cpynn = node_at(Ncpy),
+ Cpznn = node_at(Ncpz),
+
+ {ok, Cp1} = start_node_comp(Ncp1, Config),
+ {ok, Cp2} = start_node_comp(Ncp2, Config),
+ {ok, Cp3} = start_node_comp(Ncp3, Config),
+ {ok, Cpx} = start_node_comp(Ncpx, Config),
+ {ok, Cpy} = start_node_comp(Ncpy, Config),
+ {ok, Cpz} = start_node_comp(Ncpz, Config),
%% let the nodes know of each other
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cp2nn]),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cp3nn]),
- ?line pong = rpc:call(Cp3, net_adm, ping, [Cpxnn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cpynn]),
- ?line pong = rpc:call(Cpy, net_adm, ping, [Cpznn]),
+ pong = rpc:call(Cp1, net_adm, ping, [Cp2nn]),
+ pong = rpc:call(Cp2, net_adm, ping, [Cp3nn]),
+ pong = rpc:call(Cp3, net_adm, ping, [Cpxnn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cpynn]),
+ pong = rpc:call(Cpy, net_adm, ping, [Cpznn]),
- ?line wait_for_ready_net(),
+ wait_for_ready_net(),
- ?line [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
- ?line [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}]),
- ?line [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}]),
- ?line [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}]),
- ?line [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}]),
- ?line [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}]),
+ [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
+ [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}]),
+ [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}]),
+ [test_server] = rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}]),
+ [test_server] = rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}]),
+ [test_server] = rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}]),
- % start a proc and register it
- ?line {Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [test2]),
+ %% start a proc and register it
+ {Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [test2]),
- ?line RegNames = lists:sort([test2,test_server]),
+ RegNames = lists:sort([test2,test_server]),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp2, global_group, registered_names, [{node, Cp2nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp3, global_group, registered_names, [{node, Cp3nn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp1, global_group, registered_names, [{node, Cpxnn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp2, global_group, registered_names, [{node, Cpynn}])),
- ?line RegNames =
+ RegNames =
lists:sort(
rpc:call(Cp3, global_group, registered_names, [{node, Cpznn}])),
- ?line undefined = rpc:call(Cp3, global_group, global_groups, []),
+ undefined = rpc:call(Cp3, global_group, global_groups, []),
- ?line Own_nodes_should = [node(), Cp1nn, Cp2nn, Cp3nn,
- Cpxnn, Cpynn, Cpznn],
- ?line Own_nodes = rpc:call(Cp3, global_group, own_nodes, []),
- ?line [] = (Own_nodes -- Own_nodes_should),
- ?line [] = (Own_nodes_should -- Own_nodes),
-
- ?line Pid2 = rpc:call(Cp1, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout2)
- end,
- ?line Pid2 = rpc:call(Cp2, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout3)
- end,
- ?line Pid2 = rpc:call(Cpz, global_group, send, [test2, {ping, self()}]),
- ?line receive
- {pong, Cp2} -> ok
- after
- 2000 -> test_server:fail(timeout4)
- end,
-
-
- % start a proc and register it
- ?line {PidX, yes} = rpc:call(Cpx, ?MODULE, start_proc, [test]),
+ Own_nodes_should = [node(), Cp1nn, Cp2nn, Cp3nn,
+ Cpxnn, Cpynn, Cpznn],
+ Own_nodes = rpc:call(Cp3, global_group, own_nodes, []),
+ [] = (Own_nodes -- Own_nodes_should),
+ [] = (Own_nodes_should -- Own_nodes),
+
+ Pid2 = rpc:call(Cp1, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout2)
+ end,
+ Pid2 = rpc:call(Cp2, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout3)
+ end,
+ Pid2 = rpc:call(Cpz, global_group, send, [test2, {ping, self()}]),
+ receive
+ {pong, Cp2} -> ok
+ after
+ 2000 -> ct:fail(timeout4)
+ end,
+
+
+ %% start a proc and register it
+ {PidX, yes} = rpc:call(Cpx, ?MODULE, start_proc, [test]),
%%------------------------------------
%% Test monitor nodes
%%------------------------------------
- ?line Pid2 = rpc:call(Cp1, global_group, send, [{node, Cp2nn}, test2, monitor]),
- ?line PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, monitor]),
+ Pid2 = rpc:call(Cp1, global_group, send, [{node, Cp2nn}, test2, monitor]),
+ PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, monitor]),
- % Kill node Cp1
- ?line Pid2 =
+ %% Kill node Cp1
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodedown, Cp1}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodedown, Cp1}]),
- ?line test_server:sleep(100),
- ?line stop_node(Cp1),
- ?line test_server:sleep(1000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ ct:sleep(100),
+ stop_node(Cp1),
+ ct:sleep(1000),
- % Kill node Cpz
- ?line Pid2 =
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+
+ %% Kill node Cpz
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodedown, Cpz}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodedown, Cpz}]),
- ?line test_server:sleep(100),
- ?line stop_node(Cpz),
- ?line test_server:sleep(1000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ ct:sleep(100),
+ stop_node(Cpz),
+ ct:sleep(1000),
- % Restart node Cp1
- ?line Pid2 =
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+
+ %% Restart node Cp1
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodeup, Cp1}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodeup, Cp1}]),
- ?line {ok, Cp1} = start_node_comp(Ncp1, Config),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cp1nn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cp1nn]),
- ?line wait_for_ready_net(),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ {ok, Cp1} = start_node_comp(Ncp1, Config),
+ pong = rpc:call(Cp2, net_adm, ping, [Cp1nn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cp1nn]),
+ wait_for_ready_net(),
- % Restart node Cpz
- ?line Pid2 =
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+
+ %% Restart node Cpz
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, {wait_nodeup, Cpz}]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, {wait_nodeup, Cpz}]),
- ?line {ok, Cpz} = start_node_comp(Ncpz, Config),
- ?line pong = rpc:call(Cp2, net_adm, ping, [Cpznn]),
- ?line pong = rpc:call(Cpx, net_adm, ping, [Cpznn]),
- ?line wait_for_ready_net(),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ {ok, Cpz} = start_node_comp(Ncpz, Config),
+ pong = rpc:call(Cp2, net_adm, ping, [Cpznn]),
+ pong = rpc:call(Cpx, net_adm, ping, [Cpznn]),
+ wait_for_ready_net(),
- % stop the nodes, and make sure names are released.
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+
+ %% stop the nodes, and make sure names are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
@@ -642,147 +625,137 @@ compatible(Config) when is_list(Config) ->
stop_node(Cpy),
stop_node(Cpz),
- ?line ?UNTIL(undefined =:= global:whereis_name(test)),
- ?line test_server:timetrap_cancel(Dog),
+ ?UNTIL(undefined =:= global:whereis_name(test)),
ok.
-
-one_grp(suite) -> [];
-one_grp(doc) -> ["Test a system with only one global group. "];
-one_grp(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(120)),
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "global_group.config"),
- ?line {ok, Fd} = file:open(File, [write]),
+%% Test a system with only one global group. .
+one_grp(Config) when is_list(Config) ->
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "global_group.config"),
+ {ok, Fd} = file:open(File, [write]),
[Ncp1,Ncp2,Ncp3] = node_names([cp1, cp2, cp3], Config),
- ?line config(Fd, Ncp1, Ncp2, Ncp3, "cpx", "cpy", "cpz", "cpq"),
+ config(Fd, Ncp1, Ncp2, Ncp3, "cpx", "cpy", "cpz", "cpq"),
- ?line {ok, Cp1} = start_node(Ncp1, Config),
- ?line {ok, Cp2} = start_node(Ncp2, Config),
- ?line {ok, Cp3} = start_node(Ncp3, Config),
+ {ok, Cp1} = start_node(Ncp1, Config),
+ {ok, Cp2} = start_node(Ncp2, Config),
+ {ok, Cp3} = start_node(Ncp3, Config),
- % sleep a while to make the global_group to sync...
- test_server:sleep(1000),
+ %% sleep a while to make the global_group to sync...
+ ct:sleep(1000),
- % start a proc and register it
- ?line {Pid, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
+ %% start a proc and register it
+ {Pid, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
- % test that it is registered at all nodes
- ?line Pid = rpc:call(Cp1, global, whereis_name, [test]),
- ?line Pid = rpc:call(Cp2, global, whereis_name, [test]),
- ?line Pid = rpc:call(Cp3, global, whereis_name, [test]),
+ %% test that it is registered at all nodes
+ Pid = rpc:call(Cp1, global, whereis_name, [test]),
+ Pid = rpc:call(Cp2, global, whereis_name, [test]),
+ Pid = rpc:call(Cp3, global, whereis_name, [test]),
- % try to register the same name
- ?line no = rpc:call(Cp1, global, register_name, [test, self()]),
+ %% try to register the same name
+ no = rpc:call(Cp1, global, register_name, [test, self()]),
- % let process exit, check that it is unregistered automatically
+ %% let process exit, check that it is unregistered automatically
Pid ! die,
- ?line
- ?UNTIL(begin
+ ?UNTIL(begin
(undefined =:= rpc:call(Cp1, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp2, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp3, global, whereis_name, [test]))
end),
- % test re_register
- ?line {Pid2, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
- ?line Pid2 = rpc:call(Cp3, global, whereis_name, [test]),
+ %% test re_register
+ {Pid2, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
+ Pid2 = rpc:call(Cp3, global, whereis_name, [test]),
Pid3 = rpc:call(Cp3, ?MODULE, start_proc_rereg, [test]),
- ?line Pid3 = rpc:call(Cp3, global, whereis_name, [test]),
+ Pid3 = rpc:call(Cp3, global, whereis_name, [test]),
- % test sending
+ %% test sending
rpc:call(Cp1, global, send, [test, {ping, self()}]),
receive
{pong, Cp3} -> ok
after
- 2000 -> test_server:fail(timeout1)
+ 2000 -> ct:fail(timeout1)
end,
rpc:call(Cp3, global, send, [test, {ping, self()}]),
receive
{pong, Cp3} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line rpc:call(Cp3, global, unregister_name, [test]),
- ?line undefined = rpc:call(Cp1, global, whereis_name, [test]),
- ?line undefined = rpc:call(Cp2, global, whereis_name, [test]),
- ?line undefined = rpc:call(Cp3, global, whereis_name, [test]),
+ rpc:call(Cp3, global, unregister_name, [test]),
+ undefined = rpc:call(Cp1, global, whereis_name, [test]),
+ undefined = rpc:call(Cp2, global, whereis_name, [test]),
+ undefined = rpc:call(Cp3, global, whereis_name, [test]),
Pid3 ! die,
- ?line ?UNTIL(undefined =:= rpc:call(Cp3, global, whereis_name, [test])),
+ ?UNTIL(undefined =:= rpc:call(Cp3, global, whereis_name, [test])),
- % register a proc
- ?line {_, yes} = rpc:call(Cp3, ?MODULE, start_proc, [test]),
+ %% register a proc
+ {_, yes} = rpc:call(Cp3, ?MODULE, start_proc, [test]),
- % stop the nodes, and make sure names are released.
+ %% stop the nodes, and make sure names are released.
stop_node(Cp3),
- ?line ?UNTIL(undefined =:= rpc:call(Cp1, global, whereis_name, [test])),
+ ?UNTIL(undefined =:= rpc:call(Cp1, global, whereis_name, [test])),
Pid2 ! die,
stop_node(Cp1),
stop_node(Cp2),
- ?line test_server:timetrap_cancel(Dog),
ok.
-
-one_grp_x(suite) -> [];
-one_grp_x(doc) -> ["Check a system with only one global group. "
- "Start the nodes with different time intervals. "];
-one_grp_x(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(120)),
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "global_group.config"),
- ?line {ok, Fd} = file:open(File, [write]),
+%% Check a system with only one global group.
+%% Start the nodes with different time intervals.
+one_grp_x(Config) when is_list(Config) ->
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "global_group.config"),
+ {ok, Fd} = file:open(File, [write]),
[Ncp1,Ncp2,Ncp3] = node_names([cp1, cp2, cp3], Config),
- ?line config(Fd, Ncp1, Ncp2, Ncp3, "cpx", "cpy", "cpz", "cpq"),
+ config(Fd, Ncp1, Ncp2, Ncp3, "cpx", "cpy", "cpz", "cpq"),
- ?line {ok, Cp1} = start_node(Ncp1, Config),
- % sleep a while to make the global_group to sync...
- test_server:sleep(1000),
+ {ok, Cp1} = start_node(Ncp1, Config),
+ %% sleep a while to make the global_group to sync...
+ ct:sleep(1000),
- % start a proc and register it
- ?line {Pid, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
+ %% start a proc and register it
+ {Pid, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
- ?line {ok, Cp2} = start_node(Ncp2, Config),
- % sleep a while to make the global_group to sync...
- test_server:sleep(1000),
+ {ok, Cp2} = start_node(Ncp2, Config),
+ %% sleep a while to make the global_group to sync...
+ ct:sleep(1000),
- % test that it is registered at all nodes
- ?line Pid = rpc:call(Cp1, global, whereis_name, [test]),
- ?line Pid = rpc:call(Cp2, global, whereis_name, [test]),
+ %% test that it is registered at all nodes
+ Pid = rpc:call(Cp1, global, whereis_name, [test]),
+ Pid = rpc:call(Cp2, global, whereis_name, [test]),
- ?line {ok, Cp3} = start_node(Ncp3, Config),
- % sleep a while to make the global_group to sync...
- test_server:sleep(1000),
+ {ok, Cp3} = start_node(Ncp3, Config),
+ %% sleep a while to make the global_group to sync...
+ ct:sleep(1000),
- ?line Pid = rpc:call(Cp3, global, whereis_name, [test]),
+ Pid = rpc:call(Cp3, global, whereis_name, [test]),
- % try to register the same name
- ?line no = rpc:call(Cp1, global, register_name, [test, self()]),
+ %% try to register the same name
+ no = rpc:call(Cp1, global, register_name, [test, self()]),
- % let process exit, check that it is unregistered automatically
+ %% let process exit, check that it is unregistered automatically
Pid ! die,
- ?line
- ?UNTIL(begin
+ ?UNTIL(begin
(undefined =:= rpc:call(Cp1, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp2, global, whereis_name, [test])) and
(undefined =:= rpc:call(Cp3, global, whereis_name, [test]))
end),
- % test re_register
- ?line {Pid2, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
- ?line Pid2 = rpc:call(Cp3, global, whereis_name, [test]),
+ %% test re_register
+ {Pid2, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
+ Pid2 = rpc:call(Cp3, global, whereis_name, [test]),
Pid2 ! die,
@@ -790,296 +763,291 @@ one_grp_x(Config) when is_list(Config) ->
stop_node(Cp2),
stop_node(Cp3),
- ?line test_server:timetrap_cancel(Dog),
ok.
-
-two_grp(suite) -> [];
-two_grp(doc) -> ["Test a two global group system. "];
-two_grp(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(200)),
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "global_group.config"),
- ?line {ok, Fd} = file:open(File, [write]),
+%% Test a two global group system. .
+two_grp(Config) when is_list(Config) ->
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "global_group.config"),
+ {ok, Fd} = file:open(File, [write]),
[Ncp1,Ncp2,Ncp3,Ncpx,Ncpy,Ncpz,Ncpq] =
node_names([cp1,cp2,cp3,cpx,cpy,cpz,cpq], Config),
- ?line config(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz, Ncpq),
-
- ?line Cp1nn = node_at(Ncp1),
- ?line Cp2nn = node_at(Ncp2),
- ?line Cp3nn = node_at(Ncp3),
- ?line Cpxnn = node_at(Ncpx),
- ?line Cpynn = node_at(Ncpy),
- ?line Cpznn = node_at(Ncpz),
-
- ?line {ok, Cp1} = start_node(Ncp1, Config),
- ?line {ok, Cp2} = start_node(Ncp2, Config),
- ?line {ok, Cp3} = start_node(Ncp3, Config),
- ?line {ok, Cpx} = start_node(Ncpx, Config),
- ?line {ok, Cpy} = start_node(Ncpy, Config),
- ?line {ok, Cpz} = start_node(Ncpz, Config),
+ config(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz, Ncpq),
+
+ Cp1nn = node_at(Ncp1),
+ Cp2nn = node_at(Ncp2),
+ Cp3nn = node_at(Ncp3),
+ Cpxnn = node_at(Ncpx),
+ Cpynn = node_at(Ncpy),
+ Cpznn = node_at(Ncpz),
+
+ {ok, Cp1} = start_node(Ncp1, Config),
+ {ok, Cp2} = start_node(Ncp2, Config),
+ {ok, Cp3} = start_node(Ncp3, Config),
+ {ok, Cpx} = start_node(Ncpx, Config),
+ {ok, Cpy} = start_node(Ncpy, Config),
+ {ok, Cpz} = start_node(Ncpz, Config),
%% The groups (cpq not started):
%% [{nc1, [cp1,cp2,cp3]}, {nc2, [cpx,cpy,cpz]}, {nc3, [cpq]}]
- % sleep a while to make the global_groups to sync...
- test_server:sleep(1000),
-
- % check the global group names
- ?line {nc1, [nc2, nc3]} = rpc:call(Cp1, global_group, global_groups, []),
- ?line {nc1, [nc2, nc3]} = rpc:call(Cp2, global_group, global_groups, []),
- ?line {nc1, [nc2, nc3]} = rpc:call(Cp3, global_group, global_groups, []),
- ?line {nc2, [nc1, nc3]} = rpc:call(Cpx, global_group, global_groups, []),
- ?line {nc2, [nc1, nc3]} = rpc:call(Cpy, global_group, global_groups, []),
- ?line {nc2, [nc1, nc3]} = rpc:call(Cpz, global_group, global_groups, []),
-
- % check the global group nodes
- ?line [Cp1nn, Cp2nn, Cp3nn] = rpc:call(Cp1, global_group, own_nodes, []),
- ?line [Cp1nn, Cp2nn, Cp3nn] = rpc:call(Cp2, global_group, own_nodes, []),
- ?line [Cp1nn, Cp2nn, Cp3nn] = rpc:call(Cp3, global_group, own_nodes, []),
- ?line [Cpxnn, Cpynn, Cpznn] = rpc:call(Cpx, global_group, own_nodes, []),
- ?line [Cpxnn, Cpynn, Cpznn] = rpc:call(Cpy, global_group, own_nodes, []),
- ?line [Cpxnn, Cpynn, Cpznn] = rpc:call(Cpz, global_group, own_nodes, []),
-
-
- % start a proc and register it
- ?line {Pid1, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
-
- ?line Pid1 = rpc:call(Cp1, global_group, send, [test, {io, from_cp1}]),
- ?line Pid1 = rpc:call(Cpx, global_group, send, [test, {io, from_cpx}]),
- ?line Pid1 = rpc:call(Cp1, global_group, send, [{group,nc1}, test,
- {io, from_cp1}]),
- ?line [test] =
+ %% sleep a while to make the global_groups to sync...
+ ct:sleep(1000),
+
+ %% check the global group names
+ {nc1, [nc2, nc3]} = rpc:call(Cp1, global_group, global_groups, []),
+ {nc1, [nc2, nc3]} = rpc:call(Cp2, global_group, global_groups, []),
+ {nc1, [nc2, nc3]} = rpc:call(Cp3, global_group, global_groups, []),
+ {nc2, [nc1, nc3]} = rpc:call(Cpx, global_group, global_groups, []),
+ {nc2, [nc1, nc3]} = rpc:call(Cpy, global_group, global_groups, []),
+ {nc2, [nc1, nc3]} = rpc:call(Cpz, global_group, global_groups, []),
+
+ %% check the global group nodes
+ [Cp1nn, Cp2nn, Cp3nn] = rpc:call(Cp1, global_group, own_nodes, []),
+ [Cp1nn, Cp2nn, Cp3nn] = rpc:call(Cp2, global_group, own_nodes, []),
+ [Cp1nn, Cp2nn, Cp3nn] = rpc:call(Cp3, global_group, own_nodes, []),
+ [Cpxnn, Cpynn, Cpznn] = rpc:call(Cpx, global_group, own_nodes, []),
+ [Cpxnn, Cpynn, Cpznn] = rpc:call(Cpy, global_group, own_nodes, []),
+ [Cpxnn, Cpynn, Cpznn] = rpc:call(Cpz, global_group, own_nodes, []),
+
+
+ %% start a proc and register it
+ {Pid1, yes} = rpc:call(Cp1, ?MODULE, start_proc, [test]),
+
+ Pid1 = rpc:call(Cp1, global_group, send, [test, {io, from_cp1}]),
+ Pid1 = rpc:call(Cpx, global_group, send, [test, {io, from_cpx}]),
+ Pid1 = rpc:call(Cp1, global_group, send, [{group,nc1}, test,
+ {io, from_cp1}]),
+ [test] =
rpc:call(Cpx, global_group, registered_names, [{node, Cp1nn}]),
- ?line [test] =
+ [test] =
rpc:call(Cpx, global_group, registered_names, [{group, nc1}]),
- ?line [] = rpc:call(Cpx, global_group, registered_names, [{node, Cpxnn}]),
- ?line [] = rpc:call(Cpx, global_group, registered_names, [{group, nc2}]),
- ?line Pid1 = rpc:call(Cpx, global_group, send, [{group,nc1}, test,
- {io, from_cp1}]),
- ?line {badarg,{test,{io,from_cpx}}} =
+ [] = rpc:call(Cpx, global_group, registered_names, [{node, Cpxnn}]),
+ [] = rpc:call(Cpx, global_group, registered_names, [{group, nc2}]),
+ Pid1 = rpc:call(Cpx, global_group, send, [{group,nc1}, test,
+ {io, from_cp1}]),
+ {badarg,{test,{io,from_cpx}}} =
rpc:call(Cp1, global_group, send, [{group,nc2}, test, {io, from_cpx}]),
- ?line {badarg,{test,{io,from_cpx}}} =
+ {badarg,{test,{io,from_cpx}}} =
rpc:call(Cpx, global_group, send, [{group,nc2}, test, {io, from_cpx}]),
- % test that it is registered at all nodes
- ?line Pid1 = rpc:call(Cp1, global, whereis_name, [test]),
- ?line Pid1 = rpc:call(Cp2, global, whereis_name, [test]),
- ?line Pid1 = rpc:call(Cp3, global, whereis_name, [test]),
- ?line undefined = rpc:call(Cpx, global, whereis_name, [test]),
- ?line undefined = rpc:call(Cpy, global, whereis_name, [test]),
- ?line undefined = rpc:call(Cpz, global, whereis_name, [test]),
-
- % start a proc and register it
- ?line {PidX, yes} = rpc:call(Cpx, ?MODULE, start_proc, [test]),
-
- % test that it is registered at all nodes
- ?line Pid1 = rpc:call(Cp1, global, whereis_name, [test]),
- ?line Pid1 = rpc:call(Cp2, global, whereis_name, [test]),
- ?line Pid1 = rpc:call(Cp3, global, whereis_name, [test]),
- ?line PidX = rpc:call(Cpx, global, whereis_name, [test]),
- ?line PidX = rpc:call(Cpy, global, whereis_name, [test]),
- ?line PidX = rpc:call(Cpz, global, whereis_name, [test]),
-
+ %% test that it is registered at all nodes
+ Pid1 = rpc:call(Cp1, global, whereis_name, [test]),
+ Pid1 = rpc:call(Cp2, global, whereis_name, [test]),
+ Pid1 = rpc:call(Cp3, global, whereis_name, [test]),
+ undefined = rpc:call(Cpx, global, whereis_name, [test]),
+ undefined = rpc:call(Cpy, global, whereis_name, [test]),
+ undefined = rpc:call(Cpz, global, whereis_name, [test]),
+
+ %% start a proc and register it
+ {PidX, yes} = rpc:call(Cpx, ?MODULE, start_proc, [test]),
+
+ %% test that it is registered at all nodes
+ Pid1 = rpc:call(Cp1, global, whereis_name, [test]),
+ Pid1 = rpc:call(Cp2, global, whereis_name, [test]),
+ Pid1 = rpc:call(Cp3, global, whereis_name, [test]),
+ PidX = rpc:call(Cpx, global, whereis_name, [test]),
+ PidX = rpc:call(Cpy, global, whereis_name, [test]),
+ PidX = rpc:call(Cpz, global, whereis_name, [test]),
+
Pid1 ! die,
%% If we don't wait for global on other nodes to have updated its
%% tables, 'test' may still be defined at the point when it is
%% tested a few lines below.
- ?line
- ?UNTIL(begin
+ ?UNTIL(begin
Pid = rpc:call(Cp2, global, whereis_name, [test]),
undefined =:= Pid
end),
- % start a proc and register it
- ?line {Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [test2]),
+ %% start a proc and register it
+ {Pid2, yes} = rpc:call(Cp2, ?MODULE, start_proc, [test2]),
- % test that it is registered at all nodes
- ?line Pid2 = rpc:call(Cp1, global, whereis_name, [test2]),
- ?line Pid2 = rpc:call(Cp2, global, whereis_name, [test2]),
- ?line Pid2 = rpc:call(Cp3, global, whereis_name, [test2]),
- ?line PidX = rpc:call(Cpx, global, whereis_name, [test]),
- ?line PidX = rpc:call(Cpy, global, whereis_name, [test]),
- ?line PidX = rpc:call(Cpz, global, whereis_name, [test]),
-
- ?line undefined = rpc:call(Cp1, global, whereis_name, [test]),
- ?line undefined = rpc:call(Cp2, global, whereis_name, [test]),
- ?line undefined = rpc:call(Cp3, global, whereis_name, [test]),
- ?line undefined = rpc:call(Cpx, global, whereis_name, [test2]),
- ?line undefined = rpc:call(Cpy, global, whereis_name, [test2]),
- ?line undefined = rpc:call(Cpz, global, whereis_name, [test2]),
-
+ %% test that it is registered at all nodes
+ Pid2 = rpc:call(Cp1, global, whereis_name, [test2]),
+ Pid2 = rpc:call(Cp2, global, whereis_name, [test2]),
+ Pid2 = rpc:call(Cp3, global, whereis_name, [test2]),
+ PidX = rpc:call(Cpx, global, whereis_name, [test]),
+ PidX = rpc:call(Cpy, global, whereis_name, [test]),
+ PidX = rpc:call(Cpz, global, whereis_name, [test]),
+
+ undefined = rpc:call(Cp1, global, whereis_name, [test]),
+ undefined = rpc:call(Cp2, global, whereis_name, [test]),
+ undefined = rpc:call(Cp3, global, whereis_name, [test]),
+ undefined = rpc:call(Cpx, global, whereis_name, [test2]),
+ undefined = rpc:call(Cpy, global, whereis_name, [test2]),
+ undefined = rpc:call(Cpz, global, whereis_name, [test2]),
- ?line Pid2 = rpc:call(Cp1, global_group, send, [test2, {ping, self()}]),
+
+ Pid2 = rpc:call(Cp1, global_group, send, [test2, {ping, self()}]),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line Pid2 = rpc:call(Cp2, global_group, send, [test2, {ping, self()}]),
+ Pid2 = rpc:call(Cp2, global_group, send, [test2, {ping, self()}]),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line Pid2 = rpc:call(Cp3, global_group, send, [test2, {ping, self()}]),
+ Pid2 = rpc:call(Cp3, global_group, send, [test2, {ping, self()}]),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line PidX = rpc:call(Cpx, global_group, send, [test, {ping, self()}]),
+ PidX = rpc:call(Cpx, global_group, send, [test, {ping, self()}]),
receive
{pong, Cpx} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line PidX = rpc:call(Cpy, global_group, send, [test, {ping, self()}]),
+ PidX = rpc:call(Cpy, global_group, send, [test, {ping, self()}]),
receive
{pong, Cpx} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line PidX = rpc:call(Cpz, global_group, send, [test, {ping, self()}]),
+ PidX = rpc:call(Cpz, global_group, send, [test, {ping, self()}]),
receive
{pong, Cpx} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line Pid2 = rpc:call(Cpx, global_group, send, [{node, Cp1nn}, test2,
- {ping, self()}]),
+ Pid2 = rpc:call(Cpx, global_group, send, [{node, Cp1nn}, test2,
+ {ping, self()}]),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line Pid2 = rpc:call(Cpy, global_group, send, [{node, Cp2nn}, test2,
- {ping, self()}]),
+ Pid2 = rpc:call(Cpy, global_group, send, [{node, Cp2nn}, test2,
+ {ping, self()}]),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line Pid2 = rpc:call(Cpz, global_group, send, [{node, Cp3nn}, test2,
- {ping, self()}]),
+ Pid2 = rpc:call(Cpz, global_group, send, [{node, Cp3nn}, test2,
+ {ping, self()}]),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line PidX = rpc:call(Cpx, global_group, send, [{node, Cpznn}, test,
- {ping, self()}]),
+ PidX = rpc:call(Cpx, global_group, send, [{node, Cpznn}, test,
+ {ping, self()}]),
receive
{pong, Cpx} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line PidX = rpc:call(Cpy, global_group, send, [{node, Cpxnn}, test,
- {ping, self()}]),
+ PidX = rpc:call(Cpy, global_group, send, [{node, Cpxnn}, test,
+ {ping, self()}]),
receive
{pong, Cpx} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line PidX = rpc:call(Cpz, global_group, send, [{node, Cpynn}, test,
- {ping, self()}]),
+ PidX = rpc:call(Cpz, global_group, send, [{node, Cpynn}, test,
+ {ping, self()}]),
receive
{pong, Cpx} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line Pid2 = rpc:call(Cpx, global_group, send, [{group, nc1}, test2,
- {ping, self()}]),
+ Pid2 = rpc:call(Cpx, global_group, send, [{group, nc1}, test2,
+ {ping, self()}]),
receive
{pong, Cp2} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
- ?line PidX = rpc:call(Cpy, global_group, send, [{group, nc2}, test,
- {ping, self()}]),
+ PidX = rpc:call(Cpy, global_group, send, [{group, nc2}, test,
+ {ping, self()}]),
receive
{pong, Cpx} -> ok
after
- 2000 -> test_server:fail(timeout2)
+ 2000 -> ct:fail(timeout2)
end,
%%------------------------------------
%% Test monitor nodes
%%------------------------------------
- ?line Pid2 =
+ Pid2 =
rpc:call(Cp1, global_group, send, [{node, Cp2nn}, test2, monitor]),
- ?line PidX =
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, monitor]),
- % Kill node Cp1
- ?line Pid2 = rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2,
- {wait_nodedown, Cp1}]),
- ?line PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test,
- {wait_nodedown, Cp1}]),
- ?line test_server:sleep(100),
- ?line stop_node(Cp1),
- ?line test_server:sleep(1000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop_nodedown),
- ?line PidX =
+ %% Kill node Cp1
+ Pid2 = rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2,
+ {wait_nodedown, Cp1}]),
+ PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test,
+ {wait_nodedown, Cp1}]),
+ ct:sleep(100),
+ stop_node(Cp1),
+ ct:sleep(1000),
+
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop_nodedown),
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, to_loop]),
- % Kill node Cpz
- ?line Pid2 = rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2,
- {wait_nodedown, Cpz}]),
- ?line PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test,
- {wait_nodedown, Cpz}]),
- ?line test_server:sleep(100),
- ?line stop_node(Cpz),
- ?line test_server:sleep(1000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop_nodedown),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
- ?line Pid2 =
+ %% Kill node Cpz
+ Pid2 = rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2,
+ {wait_nodedown, Cpz}]),
+ PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test,
+ {wait_nodedown, Cpz}]),
+ ct:sleep(100),
+ stop_node(Cpz),
+ ct:sleep(1000),
+
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop_nodedown),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, to_loop]),
- % Restart node Cp1
- ?line [Cp1nn, Cp2nn, Cp3nn] = rpc:call(Cp2, global_group, own_nodes, []),
- ?line Pid2 = rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2,
- {wait_nodeup, Cp1}]),
- ?line PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test,
- {wait_nodeup, Cp1}]),
- ?line test_server:sleep(100),
- ?line {ok, Cp1} = start_node(Ncp1, Config),
- ?line test_server:sleep(5000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop_nodeup),
- ?line PidX =
+ %% Restart node Cp1
+ [Cp1nn, Cp2nn, Cp3nn] = rpc:call(Cp2, global_group, own_nodes, []),
+ Pid2 = rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2,
+ {wait_nodeup, Cp1}]),
+ PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test,
+ {wait_nodeup, Cp1}]),
+ ct:sleep(100),
+ {ok, Cp1} = start_node(Ncp1, Config),
+ ct:sleep(5000),
+
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop_nodeup),
+ PidX =
rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test, to_loop]),
- % Restart node Cpz
- ?line Pid2 = rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2,
- {wait_nodeup, Cpz}]),
- ?line PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test,
- {wait_nodeup, Cpz}]),
- ?line test_server:sleep(100),
- ?line {ok, Cpz} = start_node(Ncpz, Config),
- ?line test_server:sleep(5000),
-
- ?line ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop_nodeup),
- ?line ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
- ?line Pid2 =
+ %% Restart node Cpz
+ Pid2 = rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2,
+ {wait_nodeup, Cpz}]),
+ PidX = rpc:call(Cpx, global_group, send, [{node, Cpxnn}, test,
+ {wait_nodeup, Cpz}]),
+ ct:sleep(100),
+ {ok, Cpz} = start_node(Ncpz, Config),
+ ct:sleep(5000),
+
+ ok = assert_loop(Cp2, Cp2nn, test2, Pid2, loop_nodeup),
+ ok = assert_loop(Cpx, Cpxnn, test, PidX, loop),
+ Pid2 =
rpc:call(Cp2, global_group, send, [{node, Cp2nn}, test2, to_loop]),
@@ -1093,72 +1061,68 @@ two_grp(Config) when is_list(Config) ->
stop_node(Cpy),
stop_node(Cpz),
- ?line test_server:timetrap_cancel(Dog),
ok.
-
-hidden_groups(suite) -> [];
-hidden_groups(doc) -> ["Test hidden global groups."];
-hidden_groups(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(200)),
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "global_group.config"),
- ?line {ok, Fd} = file:open(File, [write]),
+%% Test hidden global groups.
+hidden_groups(Config) when is_list(Config) ->
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "global_group.config"),
+ {ok, Fd} = file:open(File, [write]),
[Ncp1,Ncp2,Ncp3,Ncpx,Ncpy,Ncpz,Ncpq] =
node_names([cp1,cp2,cp3,cpx,cpy,cpz,cpq], Config),
- ?line config_hidden(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz, Ncpq),
-
- ?line {ok, Cp1} = start_node(Ncp1, Config),
- ?line {ok, Cp2} = start_node(Ncp2, Config),
- ?line {ok, Cp3} = start_node(Ncp3, Config),
- ?line {ok, Cpx} = start_node(Ncpx, Config),
- ?line {ok, Cpy} = start_node(Ncpy, Config),
- ?line {ok, Cpz} = start_node(Ncpz, Config),
- ?line {ok, Cpq} = start_node(Ncpq, Config),
-
- % sleep a while to make the global_groups to sync...
- test_server:sleep(1000),
-
- % check the global group names
- ?line {nc1, [nc2, nc3]} = rpc:call(Cp1, global_group, global_groups, []),
- ?line {nc1, [nc2, nc3]} = rpc:call(Cp2, global_group, global_groups, []),
- ?line {nc1, [nc2, nc3]} = rpc:call(Cp3, global_group, global_groups, []),
- ?line {nc2, [nc1, nc3]} = rpc:call(Cpx, global_group, global_groups, []),
- ?line {nc2, [nc1, nc3]} = rpc:call(Cpy, global_group, global_groups, []),
- ?line {nc2, [nc1, nc3]} = rpc:call(Cpz, global_group, global_groups, []),
-
- % check the global group nodes
- ?line [Cp1, Cp2, Cp3] = rpc:call(Cp1, global_group, own_nodes, []),
- ?line [Cp1, Cp2, Cp3] = rpc:call(Cp2, global_group, own_nodes, []),
- ?line [Cp1, Cp2, Cp3] = rpc:call(Cp3, global_group, own_nodes, []),
- ?line [Cpx, Cpy, Cpz] = rpc:call(Cpx, global_group, own_nodes, []),
- ?line [Cpx, Cpy, Cpz] = rpc:call(Cpy, global_group, own_nodes, []),
- ?line [Cpx, Cpy, Cpz] = rpc:call(Cpz, global_group, own_nodes, []),
- ?line [Cpq] = rpc:call(Cpq, global_group, own_nodes, []),
-
- % Make some inter group connections
- ?line pong = rpc:call(Cp1, net_adm, ping, [Cpx]),
- ?line pong = rpc:call(Cpy, net_adm, ping, [Cp2]),
- ?line pong = rpc:call(Cp3, net_adm, ping, [Cpx]),
- ?line pong = rpc:call(Cpz, net_adm, ping, [Cp3]),
- ?line pong = rpc:call(Cpq, net_adm, ping, [Cp1]),
- ?line pong = rpc:call(Cpz, net_adm, ping, [Cpq]),
-
- % Check that no inter group connections are visible
+ config_hidden(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz, Ncpq),
+
+ {ok, Cp1} = start_node(Ncp1, Config),
+ {ok, Cp2} = start_node(Ncp2, Config),
+ {ok, Cp3} = start_node(Ncp3, Config),
+ {ok, Cpx} = start_node(Ncpx, Config),
+ {ok, Cpy} = start_node(Ncpy, Config),
+ {ok, Cpz} = start_node(Ncpz, Config),
+ {ok, Cpq} = start_node(Ncpq, Config),
+
+ %% sleep a while to make the global_groups to sync...
+ ct:sleep(1000),
+
+ %% check the global group names
+ {nc1, [nc2, nc3]} = rpc:call(Cp1, global_group, global_groups, []),
+ {nc1, [nc2, nc3]} = rpc:call(Cp2, global_group, global_groups, []),
+ {nc1, [nc2, nc3]} = rpc:call(Cp3, global_group, global_groups, []),
+ {nc2, [nc1, nc3]} = rpc:call(Cpx, global_group, global_groups, []),
+ {nc2, [nc1, nc3]} = rpc:call(Cpy, global_group, global_groups, []),
+ {nc2, [nc1, nc3]} = rpc:call(Cpz, global_group, global_groups, []),
+
+ %% check the global group nodes
+ [Cp1, Cp2, Cp3] = rpc:call(Cp1, global_group, own_nodes, []),
+ [Cp1, Cp2, Cp3] = rpc:call(Cp2, global_group, own_nodes, []),
+ [Cp1, Cp2, Cp3] = rpc:call(Cp3, global_group, own_nodes, []),
+ [Cpx, Cpy, Cpz] = rpc:call(Cpx, global_group, own_nodes, []),
+ [Cpx, Cpy, Cpz] = rpc:call(Cpy, global_group, own_nodes, []),
+ [Cpx, Cpy, Cpz] = rpc:call(Cpz, global_group, own_nodes, []),
+ [Cpq] = rpc:call(Cpq, global_group, own_nodes, []),
+
+ %% Make some inter group connections
+ pong = rpc:call(Cp1, net_adm, ping, [Cpx]),
+ pong = rpc:call(Cpy, net_adm, ping, [Cp2]),
+ pong = rpc:call(Cp3, net_adm, ping, [Cpx]),
+ pong = rpc:call(Cpz, net_adm, ping, [Cp3]),
+ pong = rpc:call(Cpq, net_adm, ping, [Cp1]),
+ pong = rpc:call(Cpz, net_adm, ping, [Cpq]),
+
+ %% Check that no inter group connections are visible
NC1Nodes = lists:sort([Cp1, Cp2, Cp3]),
NC2Nodes = lists:sort([Cpx, Cpy, Cpz]),
- ?line NC1Nodes = lists:sort([Cp1|rpc:call(Cp1, erlang, nodes, [])]),
- ?line NC1Nodes = lists:sort([Cp2|rpc:call(Cp2, erlang, nodes, [])]),
- ?line NC1Nodes = lists:sort([Cp3|rpc:call(Cp3, erlang, nodes, [])]),
- ?line NC2Nodes = lists:sort([Cpx|rpc:call(Cpx, erlang, nodes, [])]),
- ?line NC2Nodes = lists:sort([Cpy|rpc:call(Cpy, erlang, nodes, [])]),
- ?line NC2Nodes = lists:sort([Cpz|rpc:call(Cpz, erlang, nodes, [])]),
+ NC1Nodes = lists:sort([Cp1|rpc:call(Cp1, erlang, nodes, [])]),
+ NC1Nodes = lists:sort([Cp2|rpc:call(Cp2, erlang, nodes, [])]),
+ NC1Nodes = lists:sort([Cp3|rpc:call(Cp3, erlang, nodes, [])]),
+ NC2Nodes = lists:sort([Cpx|rpc:call(Cpx, erlang, nodes, [])]),
+ NC2Nodes = lists:sort([Cpy|rpc:call(Cpy, erlang, nodes, [])]),
+ NC2Nodes = lists:sort([Cpz|rpc:call(Cpz, erlang, nodes, [])]),
NC12Nodes = lists:append(NC1Nodes, NC2Nodes),
- ?line false = lists:any(fun(N) -> lists:member(N, NC12Nodes) end,
- rpc:call(Cpq, erlang, nodes, [])),
+ false = lists:any(fun(N) -> lists:member(N, NC12Nodes) end,
+ rpc:call(Cpq, erlang, nodes, [])),
stop_node(Cp1),
@@ -1169,63 +1133,68 @@ hidden_groups(Config) when is_list(Config) ->
stop_node(Cpz),
stop_node(Cpq),
- ?line test_server:timetrap_cancel(Dog),
ok.
-
-test_exit(suite) -> [];
-test_exit(doc) -> ["Checks when the search process exits. "];
-test_exit(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(120)),
- ?line NN = node_name(atom_to_list(node())),
- ?line Cp1nn = list_to_atom("cp1@" ++ NN),
+%% Checks when the search process exits. .
+test_exit(Config) when is_list(Config) ->
+ NN = node_name(atom_to_list(node())),
+ Cp1nn = list_to_atom("cp1@" ++ NN),
- ?line {ok, Cp1} = start_node(cp1, Config),
- ?line {ok, Cp2} = start_node(cp2, Config),
- ?line {ok, Cp3} = start_node(cp3, Config),
+ {ok, Cp1} = start_node(cp1, Config),
+ {ok, Cp2} = start_node(cp2, Config),
+ {ok, Cp3} = start_node(cp3, Config),
- test_server:sleep(1000),
+ ct:sleep(1000),
- ?line {error, illegal_function_call} =
+ {error, illegal_function_call} =
rpc:call(Cp1, global_group, registered_names_test, [{node, Cp1nn}]),
- ?line {badarg,_} =
+ {badarg,_} =
rpc:call(Cp1, global_group, send, [king, "The message"]),
- ?line undefined = rpc:call(Cp1, global_group, whereis_name, [king]),
-
- % stop the nodes, and make sure names are released.
+ undefined = rpc:call(Cp1, global_group, whereis_name, [king]),
+
+ % make sure the search process really exits after every global_group operations
+ ProcessCount0 = rpc:call(Cp1, erlang, system_info, [process_count]),
+ _ = rpc:call(Cp1, global_group, whereis_name, [{node, Cp1nn}, whatever_pid_name]),
+ ProcessCount1 = rpc:call(Cp1, erlang, system_info, [process_count]),
+ _ = rpc:call(Cp1, global_group, registered_names, [{node, Cp1nn}]),
+ ProcessCount2 = rpc:call(Cp1, erlang, system_info, [process_count]),
+ _ = rpc:call(Cp1, global_group, send, [{node, Cp1nn}, whatever_pid_name, msg]),
+ ProcessCount3 = rpc:call(Cp1, erlang, system_info, [process_count]),
+ ProcessCount0 = ProcessCount1 = ProcessCount2 = ProcessCount3,
+
+ %% stop the nodes, and make sure names are released.
stop_node(Cp1),
stop_node(Cp2),
stop_node(Cp3),
- % sleep to let the nodes die
- test_server:sleep(1000),
+ %% sleep to let the nodes die
+ ct:sleep(1000),
- ?line test_server:timetrap_cancel(Dog),
ok.
-
+
start_node(Name, Config) ->
Pa=filename:dirname(code:which(?MODULE)),
- Dir=?config(priv_dir, Config),
+ Dir=proplists:get_value(priv_dir, Config),
ConfFile = " -config " ++ filename:join(Dir, "global_group"),
test_server:start_node(Name, slave, [{args, "-pa " ++ Pa ++ ConfFile}]).
start_node_no(Name, Config) ->
Pa=filename:dirname(code:which(?MODULE)),
- Dir=?config(priv_dir, Config),
+ Dir=proplists:get_value(priv_dir, Config),
ConfFile = " -config " ++ filename:join(Dir, "no_global_group"),
test_server:start_node(Name, slave, [{args, "-pa " ++ Pa ++ ConfFile}]).
start_node_no2(Name, Config) ->
Pa=filename:dirname(code:which(?MODULE)),
- Dir=?config(priv_dir, Config),
+ Dir=proplists:get_value(priv_dir, Config),
ConfFile = " -config " ++ filename:join(Dir, "no_global_group_sync"),
test_server:start_node(Name, slave, [{args, "-pa " ++ Pa ++ ConfFile}]).
start_node_comp(Name, Config) ->
Pa=filename:dirname(code:which(?MODULE)),
- Dir=?config(priv_dir, Config),
+ Dir=proplists:get_value(priv_dir, Config),
ConfFile = " -config " ++ filename:join(Dir, "global_group_comp"),
test_server:start_node(Name, slave, [{args, "-pa " ++ Pa ++ ConfFile}]).
@@ -1242,17 +1211,17 @@ node_name(Name, Config) ->
lists:concat([Name,U,?testcase,U,Pid,U,U,L]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
wait_for_ready_net() ->
Nodes = lists:sort(?NODES),
?UNTIL(begin
lists:all(fun(N) -> Nodes =:= get_known(N) end, Nodes) and
- lists:all(fun(N) ->
- LNs = rpc:call(N, erlang, nodes, []),
- Nodes =:= lists:sort([N | LNs])
- end, Nodes)
+ lists:all(fun(N) ->
+ LNs = rpc:call(N, erlang, nodes, []),
+ Nodes =:= lists:sort([N | LNs])
+ end, Nodes)
end).
get_known(Node) ->
@@ -1262,11 +1231,11 @@ get_known(Node) ->
config_hidden(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz, Ncpq) ->
M = from($@, atom_to_list(node())),
io:format(Fd, "[{kernel, [{sync_nodes_optional, ['~s@~s','~s@~s','~s@~s', "
- " '~s@~s','~s@~s','~s@~s']},"
- "{sync_nodes_timeout, 1000},"
- "{global_groups, [{nc1, hidden, ['~s@~s','~s@~s','~s@~s']}, "
- "{nc2, hidden, ['~s@~s','~s@~s','~s@~s']}, "
- "{nc3, normal, ['~s@~s']}]} ] }]. ~n",
+ " '~s@~s','~s@~s','~s@~s']},"
+ "{sync_nodes_timeout, 1000},"
+ "{global_groups, [{nc1, hidden, ['~s@~s','~s@~s','~s@~s']}, "
+ "{nc2, hidden, ['~s@~s','~s@~s','~s@~s']}, "
+ "{nc3, normal, ['~s@~s']}]} ] }]. ~n",
[Ncp1, M, Ncp2, M, Ncp3, M,
Ncpx, M, Ncpy, M, Ncpz, M,
Ncp1, M, Ncp2, M, Ncp3, M,
@@ -1276,11 +1245,11 @@ config_hidden(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz, Ncpq) ->
config(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz, Ncpq) ->
M = from($@, atom_to_list(node())),
io:format(Fd, "[{kernel, [{sync_nodes_optional, ['~s@~s','~s@~s','~s@~s', "
- " '~s@~s','~s@~s','~s@~s']},"
- "{sync_nodes_timeout, 1000},"
- "{global_groups, [{nc1, ['~s@~s','~s@~s','~s@~s']}, "
- " {nc2, ['~s@~s','~s@~s','~s@~s']}, "
- "{nc3, ['~s@~s']}]} ] }]. ~n",
+ " '~s@~s','~s@~s','~s@~s']},"
+ "{sync_nodes_timeout, 1000},"
+ "{global_groups, [{nc1, ['~s@~s','~s@~s','~s@~s']}, "
+ " {nc2, ['~s@~s','~s@~s','~s@~s']}, "
+ "{nc3, ['~s@~s']}]} ] }]. ~n",
[Ncp1, M, Ncp2, M, Ncp3, M,
Ncpx, M, Ncpy, M, Ncpz, M,
Ncp1, M, Ncp2, M, Ncp3, M,
@@ -1293,9 +1262,9 @@ config_no(Fd) ->
config_sync(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz) ->
M = from($@, atom_to_list(node())),
io:format(Fd, "[{kernel, [{sync_nodes_optional, ['~s@~s','~s@~s','~s@~s', "
- " '~s@~s','~s@~s','~s@~s']},"
- "{sync_nodes_timeout, 1000},"
- "{global_groups, []} ] }] .~n",
+ " '~s@~s','~s@~s','~s@~s']},"
+ "{sync_nodes_timeout, 1000},"
+ "{global_groups, []} ] }] .~n",
[Ncp1, M, Ncp2, M, Ncp3, M,
Ncpx, M, Ncpy, M, Ncpz, M]).
@@ -1303,8 +1272,8 @@ config_sync(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz) ->
config_comp(Fd, Ncp1, Ncp2, Ncp3, Ncpx, Ncpy, Ncpz) ->
M = from($@, atom_to_list(node())),
io:format(Fd, "[{kernel, [{sync_nodes_optional, ['~s@~s','~s@~s','~s@~s', "
- " '~s@~s','~s@~s','~s@~s']},"
- "{sync_nodes_timeout, 1000} ] }] .~n",
+ " '~s@~s','~s@~s','~s@~s']},"
+ "{sync_nodes_timeout, 1000} ] }] .~n",
[Ncp1, M, Ncp2, M, Ncp3, M,
Ncpx, M, Ncpy, M, Ncpz, M]).
@@ -1325,7 +1294,7 @@ start_proc(Name) ->
receive
{Pid, Res} -> {Pid, Res}
end.
-
+
start_proc_rereg(Name) ->
Pid = spawn(?MODULE, init2, [self(), Name]),
receive
@@ -1437,9 +1406,9 @@ assert_loop(Cp, CpName, Name, NamePid, Loop) ->
Loop ->
ok;
Other1 ->
- test_server:fail(Other1)
+ ct:fail(Other1)
after 5000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end.
loop_until_true(Fun) ->
diff --git a/lib/kernel/test/heart_SUITE.erl b/lib/kernel/test/heart_SUITE.erl
index 39cd29cea0..45032faf6d 100644
--- a/lib/kernel/test/heart_SUITE.erl
+++ b/lib/kernel/test/heart_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(heart_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2, start/1, restart/1,
@@ -29,39 +29,43 @@
set_cmd/1, clear_cmd/1, get_cmd/1,
callback_api/1,
options_api/1,
- dont_drop/1, kill_pid/1]).
+ dont_drop/1, kill_pid/1, heart_no_kill/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
--export([start_heart_stress/1, mangle/1, suicide_by_heart/0]).
+-export([start_heart_stress/1, mangle/1, suicide_by_heart/0, non_suicide_by_heart/0]).
-define(DEFAULT_TIMEOUT_SECS, 120).
+-define(UNIQ_NODE_NAME,
+ list_to_atom(?MODULE_STRING ++ "__" ++
+ atom_to_list(?FUNCTION_NAME) ++ "_" ++
+ integer_to_list(erlang:unique_integer([positive])))).
+
init_per_testcase(_Func, Config) ->
- Dog=test_server:timetrap(test_server:seconds(?DEFAULT_TIMEOUT_SECS)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Func, Config) ->
+end_per_testcase(_Func, _Config) ->
Nodes = nodes(),
lists:foreach(fun(X) ->
NNam = list_to_atom(hd(string:tokens(atom_to_list(X),"@"))),
case NNam of
heart_test ->
- ?t:format(1, "WARNING: Killed ~p~n", [X]),
+ ct:pal(?HI_VERBOSITY, "WARNING: Killed ~p~n", [X]),
rpc:cast(X, erlang, halt, []);
_ ->
ok
end
- end, Nodes),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ end, Nodes).
%%-----------------------------------------------------------------
%% Test suite for heart.
%% Should be started in a CC view with:
%% erl -sname master -rsh ctrsh
%%-----------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() -> [
start, restart, reboot,
@@ -70,7 +74,8 @@ all() -> [
set_cmd, clear_cmd, get_cmd,
callback_api,
options_api,
- kill_pid
+ kill_pid,
+ heart_no_kill
].
groups() ->
@@ -97,7 +102,7 @@ end_per_suite(Config) when is_list(Config) ->
start_check(Type, Name) ->
start_check(Type, Name, []).
start_check(Type, Name, Envs) ->
- Args = case ?t:os_type() of
+ Args = case test_server:os_type() of
{win32,_} ->
"+t50000 -heart " ++ env_encode([{"HEART_COMMAND", no_reboot}|Envs]);
_ ->
@@ -107,32 +112,30 @@ start_check(Type, Name, Envs) ->
loose ->
loose_node:start(Name, Args, ?DEFAULT_TIMEOUT_SECS);
_ ->
- ?t:start_node(Name, Type, [{args, Args}])
+ test_server:start_node(Name, Type, [{args, Args}])
end,
erlang:monitor_node(Node, true),
case rpc:call(Node, erlang, whereis, [heart]) of
Pid when is_pid(Pid) ->
ok;
_ ->
- test_server:fail(heart_not_started)
+ ct:fail(heart_not_started)
end,
{ok, Node}.
-start(doc) -> [];
-start(suite) -> {req, [{time, 10}]};
start(Config) when is_list(Config) ->
- {ok, Node} = start_check(slave, heart_test),
+ {ok, Node} = start_check(slave, ?UNIQ_NODE_NAME),
rpc:call(Node, init, reboot, []),
receive
{nodedown, Node} -> ok
- after 2000 -> test_server:fail(node_not_closed)
+ after 2000 -> ct:fail(node_not_closed)
end,
- test_server:sleep(5000),
+ timer:sleep(5000),
case net_adm:ping(Node) of
pang ->
ok;
_ ->
- test_server:fail(node_rebooted)
+ ct:fail(node_rebooted)
end,
test_server:stop_node(Node).
@@ -145,34 +148,24 @@ start(Config) when is_list(Config) ->
%% restart
%% Purpose:
%% Check that a node is up and running after a init:restart/0
-restart(doc) -> [];
-restart(suite) ->
- case ?t:os_type() of
- {Fam, _} when Fam == unix; Fam == win32 ->
- {req, [{time,10}]};
- _ ->
- {skip, "Only run on unix and win32"}
- end;
restart(Config) when is_list(Config) ->
- {ok, Node} = start_check(loose, heart_test),
+ {ok, Node} = start_check(loose, ?UNIQ_NODE_NAME),
rpc:call(Node, init, restart, []),
receive
{nodedown, Node} ->
ok
- after 2000 ->
- test_server:fail(node_not_closed)
+ after 5000 ->
+ ct:fail(node_not_closed)
end,
- test_server:sleep(5000),
+ timer:sleep(5000),
node_check_up_down(Node, 2000),
loose_node:stop(Node).
%% reboot
%% Purpose:
%% Check that a node is up and running after a init:reboot/0
-reboot(doc) -> [];
-reboot(suite) -> {req, [{time, 10}]};
reboot(Config) when is_list(Config) ->
- {ok, Node} = start_check(slave, heart_test),
+ {ok, Node} = start_check(slave, ?UNIQ_NODE_NAME),
ok = rpc:call(Node, heart, set_cmd,
[atom_to_list(lib:progname()) ++
@@ -182,9 +175,9 @@ reboot(Config) when is_list(Config) ->
{nodedown, Node} ->
ok
after 2000 ->
- test_server:fail(node_not_closed)
+ ct:fail(node_not_closed)
end,
- test_server:sleep(5000),
+ timer:sleep(5000),
node_check_up_down(Node, 2000),
ok.
@@ -196,7 +189,6 @@ reboot(Config) when is_list(Config) ->
%% May currently dump core in beam debug build due to lock-order violation
%% This should be removed when a non-lockad information retriever is implemented
%% for crash dumps
-node_start_immediately_after_crash(suite) -> {req, [{time, 10}]};
node_start_immediately_after_crash(Config) when is_list(Config) ->
Config2 = ignore_cores:setup(?MODULE, node_start_immediately_after_crash, Config, true),
try
@@ -207,7 +199,8 @@ node_start_immediately_after_crash(Config) when is_list(Config) ->
node_start_immediately_after_crash_test(Config) when is_list(Config) ->
- {ok, Node} = start_check(loose, heart_test_imm, [{"ERL_CRASH_DUMP_SECONDS", "0"}]),
+ {ok, Node} = start_check(loose, ?UNIQ_NODE_NAME,
+ [{"ERL_CRASH_DUMP_SECONDS", "0"}]),
ok = rpc:call(Node, heart, set_cmd,
[atom_to_list(lib:progname()) ++
@@ -229,13 +222,13 @@ node_start_immediately_after_crash_test(Config) when is_list(Config) ->
T0 = now(),
receive {nodedown, Node} ->
- test_server:format("Took ~.2f s. for node to go down~n", [timer:now_diff(now(), T0)/1000000]),
+ io:format("Took ~.2f s. for node to go down~n", [timer:now_diff(now(), T0)/1000000]),
ok
%% timeout is very liberal here. nodedown is received in about 1 s. on linux (palantir)
%% and in about 10 s. on solaris (carcharoth)
- after (15000*test_server:timetrap_scale_factor()) -> test_server:fail(node_not_closed)
+ after (15000*test_server:timetrap_scale_factor()) -> ct:fail(node_not_closed)
end,
- test_server:sleep(3000),
+ timer:sleep(3000),
node_check_up_down(Node, 2000),
loose_node:stop(Node).
@@ -248,7 +241,6 @@ node_start_immediately_after_crash_test(Config) when is_list(Config) ->
%% May currently dump core in beam debug build due to lock-order violation
%% This should be removed when a non-lockad information retriever is implemented
%% for crash dumps
-node_start_soon_after_crash(suite) -> {req, [{time, 10}]};
node_start_soon_after_crash(Config) when is_list(Config) ->
Config2 = ignore_cores:setup(?MODULE, node_start_soon_after_crash, Config, true),
try
@@ -258,7 +250,8 @@ node_start_soon_after_crash(Config) when is_list(Config) ->
end.
node_start_soon_after_crash_test(Config) when is_list(Config) ->
- {ok, Node} = start_check(loose, heart_test_soon, [{"ERL_CRASH_DUMP_SECONDS", "10"}]),
+ {ok, Node} = start_check(loose, ?UNIQ_NODE_NAME,
+ [{"ERL_CRASH_DUMP_SECONDS", "10"}]),
ok = rpc:call(Node, heart, set_cmd,
[atom_to_list(lib:progname()) ++
@@ -278,9 +271,9 @@ node_start_soon_after_crash_test(Config) when is_list(Config) ->
rpc:cast(Node, Mod, do, []),
receive {nodedown, Node} -> ok
- after (15000*test_server:timetrap_scale_factor()) -> test_server:fail(node_not_closed)
+ after (15000*test_server:timetrap_scale_factor()) -> ct:fail(node_not_closed)
end,
- test_server:sleep(20000),
+ timer:sleep(20000),
node_check_up_down(Node, 15000),
loose_node:stop(Node).
@@ -293,16 +286,15 @@ node_check_up_down(Node, Tmo) ->
receive
{nodedown, Node} -> ok
after Tmo ->
- test_server:fail(node_not_closed2)
+ ct:fail(node_not_closed2)
end;
_ ->
- test_server:fail(node_not_rebooted)
+ ct:fail(node_not_rebooted)
end.
%% Only tests bad command, correct behaviour is tested in reboot/1.
-set_cmd(suite) -> [];
set_cmd(Config) when is_list(Config) ->
- {ok, Node} = start_check(slave, heart_test),
+ {ok, Node} = start_check(slave, ?UNIQ_NODE_NAME),
Cmd = wrong_atom,
{error, {bad_cmd, Cmd}} = rpc:call(Node, heart, set_cmd, [Cmd]),
Cmd1 = lists:duplicate(2047, $a),
@@ -314,9 +306,8 @@ set_cmd(Config) when is_list(Config) ->
stop_node(Node),
ok.
-clear_cmd(suite) -> {req,[{time,15}]};
clear_cmd(Config) when is_list(Config) ->
- {ok, Node} = start_check(slave, heart_test),
+ {ok, Node} = start_check(slave, ?UNIQ_NODE_NAME),
ok = rpc:call(Node, heart, set_cmd,
[atom_to_list(lib:progname()) ++
" -noshell -heart " ++ name(Node) ++ "&"]),
@@ -325,14 +316,14 @@ clear_cmd(Config) when is_list(Config) ->
{nodedown, Node} ->
ok
after 2000 ->
- test_server:fail(node_not_closed)
+ ct:fail(node_not_closed)
end,
- test_server:sleep(5000),
+ timer:sleep(5000),
case net_adm:ping(Node) of
pong ->
erlang:monitor_node(Node, true);
_ ->
- test_server:fail(node_not_rebooted)
+ ct:fail(node_not_rebooted)
end,
ok = rpc:call(Node, heart, set_cmd,
["erl -noshell -heart " ++ name(Node) ++ "&"]),
@@ -342,20 +333,19 @@ clear_cmd(Config) when is_list(Config) ->
{nodedown, Node} ->
ok
after 2000 ->
- test_server:fail(node_not_closed)
+ ct:fail(node_not_closed)
end,
- test_server:sleep(5000),
+ timer:sleep(5000),
case net_adm:ping(Node) of
pang ->
ok;
_ ->
- test_server:fail(node_rebooted)
+ ct:fail(node_rebooted)
end,
ok.
-get_cmd(suite) -> [];
get_cmd(Config) when is_list(Config) ->
- {ok, Node} = start_check(slave, heart_test),
+ {ok, Node} = start_check(slave, ?UNIQ_NODE_NAME),
Cmd = "test",
ok = rpc:call(Node, heart, set_cmd, [Cmd]),
{ok, Cmd} = rpc:call(Node, heart, get_cmd, []),
@@ -363,7 +353,7 @@ get_cmd(Config) when is_list(Config) ->
ok.
callback_api(Config) when is_list(Config) ->
- {ok, Node} = start_check(slave, heart_test),
+ {ok, Node} = start_check(slave, ?UNIQ_NODE_NAME),
none = rpc:call(Node, heart, get_callback, []),
M0 = self(),
F0 = ok,
@@ -391,13 +381,13 @@ callback_api(Config) when is_list(Config) ->
{ok, {M2,F2}} = rpc:call(Node, heart, get_callback, []),
ok = rpc:call(Node, heart, set_callback, [M2,F3]),
receive {nodedown, Node} -> ok
- after 5000 -> test_server:fail(node_not_killed)
+ after 5000 -> ct:fail(node_not_killed)
end,
stop_node(Node),
ok.
options_api(Config) when is_list(Config) ->
- {ok, Node} = start_check(slave, heart_test),
+ {ok, Node} = start_check(slave, ?UNIQ_NODE_NAME),
none = rpc:call(Node, heart, get_options, []),
M0 = self(),
F0 = ok,
@@ -425,15 +415,13 @@ options_api(Config) when is_list(Config) ->
ok.
-dont_drop(suite) ->
%%% Removed as it may crash epmd/distribution in colourful
%%% ways. While we ARE finding out WHY, it would
%%% be nice for others to be able to run the kernel test suite
-%%% without "exploding machines", so thats why I removed it for now.
- [];
-dont_drop(doc) ->
- ["Tests that the heart command does not get dropped when ",
- "set just before halt on very high I/O load."];
+%%% without "exploding machines", so that's why I removed it for now.
+
+%% Tests that the heart command does not get dropped when
+%% set just before halt on very high I/O load..
dont_drop(Config) when is_list(Config) ->
%%% Have to do it some times to make it happen...
[ok,ok,ok,ok,ok,ok,ok,ok,ok,ok] = do_dont_drop(Config,10),
@@ -455,7 +443,7 @@ do_dont_drop(Config,N) ->
Env = [{"HEART_COMMAND", FirstCmd}],
Func = "start_heart_stress",
Arg = NN3 ++ "@" ++ Host ++ " " ++
- filename:join(?config(data_dir, Config), "simple_echo"),
+ filename:join(proplists:get_value(data_dir, Config), "simple_echo"),
start_node_run(Name,Env,Func,Arg),
case wait_for_any_of(list_to_atom(NN2 ++ "@" ++ Host),
list_to_atom(NN3 ++ "@" ++ Host)) of
@@ -488,16 +476,13 @@ wait_for_any_of(N1,N2,Times) ->
end.
-kill_pid(suite) ->
- [];
-kill_pid(doc) ->
- ["Tests that heart kills the old erlang node before executing ",
- "heart command."];
+%% Tests that heart kills the old erlang node before executing
+%% heart command.
kill_pid(Config) when is_list(Config) ->
ok = do_kill_pid(Config).
do_kill_pid(_Config) ->
- Name = heart_test,
+ Name = ?UNIQ_NODE_NAME,
Env = [{"HEART_COMMAND", "nickeNyfikenFarEttJobb"}],
{ok,Node} = start_node_run(Name,Env,suicide_by_heart,[]),
ok = wait_for_node(Node,15),
@@ -507,6 +492,30 @@ do_kill_pid(_Config) ->
false
end.
+
+heart_no_kill(suite) ->
+ [];
+heart_no_kill(doc) ->
+ ["Tests that heart doesn't kill the old erlang node when ",
+ "HEART_NO_KILL is set."];
+heart_no_kill(Config) when is_list(Config) ->
+ ok = do_no_kill(Config).
+
+do_no_kill(_Config) ->
+ Name = heart_test,
+ {ok,Node} = start_node_run(Name,[],non_suicide_by_heart,[]),
+ io:format("Node is ~p~n", [Node]),
+ ok = wait_for_node(Node,15),
+ io:format("wait_for_node is ~p~n", [ok]),
+ erlang:monitor_node(Node, true),
+ receive {nodedown,Node} -> false
+ after 30000 ->
+ io:format("Node didn't die..\n"),
+ rpc:call(Node,init,stop,[]),
+ io:format("done init:stop..\n"),
+ ok
+ end.
+
wait_for_node(_,0) ->
false;
wait_for_node(Node,N) ->
@@ -625,6 +634,20 @@ suicide_by_heart() ->
sallad
end.
+non_suicide_by_heart() ->
+ P = open_port({spawn,"heart -ht 11 -pid "++os:getpid()},
+ [exit_status, {env, [{"HEART_NO_KILL", "TRUE"}]},
+ {packet,2}]),
+ receive X -> X end,
+ %% Just hang and wait for heart to timeout
+ receive
+ {P,{exit_status,_}} ->
+ ok
+ after
+ 20000 ->
+ exit(timeout)
+ end.
+
%% generate a module from binary
generate(Module, Attributes, FunStrings) ->
diff --git a/lib/kernel/test/ignore_cores.erl b/lib/kernel/test/ignore_cores.erl
index db61c4003b..fde65bf5c4 100644
--- a/lib/kernel/test/ignore_cores.erl
+++ b/lib/kernel/test/ignore_cores.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
-module(ignore_cores).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([init/1, fini/1, setup/3, setup/4, restore/1, dir/1]).
@@ -53,7 +53,7 @@ init(Config) ->
fini(Config) ->
#ignore_cores{org_cwd = OrgCWD,
org_path = OrgPath,
- org_pwd_env = OrgPWD} = ?config(ignore_cores, Config),
+ org_pwd_env = OrgPWD} = proplists:get_value(ignore_cores, Config),
ok = file:set_cwd(OrgCWD),
true = code:set_path(OrgPath),
case OrgPWD of
@@ -70,10 +70,10 @@ setup(Suite, Testcase, Config, SetCwd) when is_atom(Suite),
is_list(Config) ->
#ignore_cores{org_cwd = OrgCWD,
org_path = OrgPath,
- org_pwd_env = OrgPWD} = ?config(ignore_cores, Config),
+ org_pwd_env = OrgPWD} = proplists:get_value(ignore_cores, Config),
Path = lists:map(fun (".") -> OrgCWD; (Dir) -> Dir end, OrgPath),
true = code:set_path(Path),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
IgnDir = filename:join([PrivDir,
atom_to_list(Suite)
++ "_"
@@ -94,7 +94,7 @@ setup(Suite, Testcase, Config, SetCwd) when is_atom(Suite),
end,
ok = file:write_file(filename:join([IgnDir, "ignore_core_files"]), <<>>),
%% cores are dumped in /cores on MacOS X
- CoresDir = case {?t:os_type(), filelib:is_dir("/cores")} of
+ CoresDir = case {test_server:os_type(), filelib:is_dir("/cores")} of
{{unix,darwin}, true} ->
filelib:fold_files("/cores",
"^core.*$",
@@ -119,7 +119,7 @@ restore(Config) ->
org_path = OrgPath,
org_pwd_env = OrgPWD,
ign_dir = IgnDir,
- cores_dir = CoresDir} = ?config(ignore_cores, Config),
+ cores_dir = CoresDir} = proplists:get_value(ignore_cores, Config),
try
case CoresDir of
false ->
@@ -155,5 +155,5 @@ restore(Config) ->
dir(Config) ->
- #ignore_cores{ign_dir = Dir} = ?config(ignore_cores, Config),
+ #ignore_cores{ign_dir = Dir} = proplists:get_value(ignore_cores, Config),
Dir.
diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl
index 5ba06bb032..f60c13d2e3 100644
--- a/lib/kernel/test/inet_SUITE.erl
+++ b/lib/kernel/test/inet_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(inet_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/inet.hrl").
-include_lib("kernel/src/inet_dns.hrl").
@@ -46,7 +46,9 @@
kill_gethost/0, parallell_gethost/0, test_netns/0]).
-export([init_per_testcase/2, end_per_testcase/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[t_gethostbyaddr, t_gethostbyname, t_getaddr,
@@ -97,35 +99,30 @@ init_per_testcase(lookup_bad_search_option, Config) ->
Prev = ets:lookup(Db, Key),
ets:delete(Db, Key),
ets:insert(Db, {Key,[lookup_bad_search_option]}),
- ?t:format("Misconfigured resolver lookup order", []),
- Dog = test_server:timetrap(test_server:seconds(60)),
- [{Key,Prev},{watchdog,Dog}|Config];
+ io:format("Misconfigured resolver lookup order", []),
+ [{Key,Prev}|Config];
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
- [{watchdog,Dog}|Config].
+ Config.
end_per_testcase(lookup_bad_search_option, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
Db = inet_db,
Key = res_lookup,
- Prev = ?config(Key, Config),
+ Prev = proplists:get_value(Key, Config),
ets:delete(Db, Key),
ets:insert(Db, Prev),
- ?t:format("Restored resolver lookup order", []);
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ io:format("Restored resolver lookup order", []);
+end_per_testcase(_Func, _Config) ->
+ ok.
t_gethostbyaddr() ->
required(v4).
-t_gethostbyaddr(doc) -> "Test the inet:gethostbyaddr/1 function.";
+%% Test the inet:gethostbyaddr/1 function.
t_gethostbyaddr(Config) when is_list(Config) ->
{Name,FullName,IPStr,{A,B,C,D}=IP,Aliases,_,_} = ct:get_config(test_host_ipv4_only),
Rname = integer_to_list(D) ++ "." ++
- integer_to_list(C) ++ "." ++
- integer_to_list(B) ++ "." ++
- integer_to_list(A) ++ ".in-addr.arpa",
+ integer_to_list(C) ++ "." ++
+ integer_to_list(B) ++ "." ++
+ integer_to_list(A) ++ ".in-addr.arpa",
{ok,HEnt} = inet:gethostbyaddr(IPStr),
{ok,HEnt} = inet:gethostbyaddr(IP),
{error,Error} = inet:gethostbyaddr(Name),
@@ -142,11 +139,13 @@ t_gethostbyaddr(Config) when is_list(Config) ->
ok;
_ ->
io:format("alias list: ~p", [HEnt#hostent.h_aliases]),
- io:format("check alias list: ~p", [[Aliases,[Rname]]]),
+ io:format(
+ "check alias list: ~p", [[Aliases,tl(Aliases),[Rname]]]),
io:format("name: ~p", [HEnt#hostent.h_name]),
io:format("check name: ~p", [[Name,FullName]]),
- check_elems([{HEnt#hostent.h_name,[Name,FullName]},
- {HEnt#hostent.h_aliases,[[],Aliases,[Rname]]}])
+ check_elems(
+ [{HEnt#hostent.h_name,[Name,FullName]},
+ {HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases),[Rname]]}])
end,
{_DName, _DFullName, DIPStr, DIP, _, _, _} = ct:get_config(test_dummy_host),
@@ -155,79 +154,78 @@ t_gethostbyaddr(Config) when is_list(Config) ->
ok.
t_gethostbyaddr_v6() -> required(v6).
-t_gethostbyaddr_v6(doc) -> "Test the inet:gethostbyaddr/1 inet6 function.";
+%% Test the inet:gethostbyaddr/1 inet6 function.
t_gethostbyaddr_v6(Config) when is_list(Config) ->
- ?line {Name6, FullName6, IPStr6, IP6, Aliases6} =
+ {Name6, FullName6, IPStr6, IP6, Aliases6} =
ct:get_config(test_host_ipv6_only),
- ?line case inet:gethostbyaddr(IPStr6) of
+ case inet:gethostbyaddr(IPStr6) of
%% Even if IPv6 is not supported, the native resolver may succeed
%% looking up the host. DNS lookup will probably fail.
{error,nxdomain} ->
{skip, "IPv6 test fails! IPv6 not supported on this host!?"};
{ok,HEnt6} ->
- ?line {ok,HEnt6} = inet:gethostbyaddr(IP6),
- ?line {error,Error6} = inet:gethostbyaddr(Name6),
- ?line ok = io:format("Failure reason: ~p: ~s",
- [Error6, inet:format_error(Error6)]),
- ?line HEnt6_ = HEnt6#hostent{h_addrtype = inet6,
- h_length = 16,
- h_addr_list = [IP6]},
- ?line HEnt6_ = HEnt6,
- ?line check_elems([{HEnt6#hostent.h_name,[Name6,FullName6]},
- {HEnt6#hostent.h_aliases,[[],Aliases6]}]),
-
- ?line {_DName6, _DFullName6, DIPStr6, DIP6, _} =
- ct:get_config(test_dummy_ipv6_host),
- ?line {error,nxdomain} = inet:gethostbyaddr(DIPStr6),
- ?line {error,nxdomain} = inet:gethostbyaddr(DIP6),
+ {ok,HEnt6} = inet:gethostbyaddr(IP6),
+ {error,Error6} = inet:gethostbyaddr(Name6),
+ ok = io:format("Failure reason: ~p: ~s",
+ [Error6, inet:format_error(Error6)]),
+ HEnt6_ = HEnt6#hostent{h_addrtype = inet6,
+ h_length = 16,
+ h_addr_list = [IP6]},
+ HEnt6_ = HEnt6,
+ check_elems(
+ [{HEnt6#hostent.h_name,[Name6,FullName6]},
+ {HEnt6#hostent.h_aliases,[[],Aliases6,tl(Aliases6)]}]),
+
+ {_DName6, _DFullName6, DIPStr6, DIP6, _} =
+ ct:get_config(test_dummy_ipv6_host),
+ {error,nxdomain} = inet:gethostbyaddr(DIPStr6),
+ {error,nxdomain} = inet:gethostbyaddr(DIP6),
ok
end.
t_gethostbyname() -> required(v4).
-t_gethostbyname(doc) -> "Test the inet:gethostbyname/1 function.";
-t_gethostbyname(suite) -> [];
+%% Test the inet:gethostbyname/1 function.
t_gethostbyname(Config) when is_list(Config) ->
- ?line {Name,FullName,IPStr,IP,Aliases,IP_46_Str,_} =
+ {Name,FullName,IPStr,IP,Aliases,IP_46_Str,_} =
ct:get_config(test_host_ipv4_only),
- ?line {ok,_} = inet:gethostbyname(IPStr),
- ?line {ok,HEnt} = inet:gethostbyname(Name),
- ?line {ok,HEnt} = inet:gethostbyname(list_to_atom(Name)),
- ?line HEnt_ = HEnt#hostent{h_addrtype = inet,
- h_length = 4,
- h_addr_list = [IP]},
-
- ?line HEnt_ = HEnt,
- ?line check_elems([{HEnt#hostent.h_name,[Name,FullName]},
- {HEnt#hostent.h_aliases,[[],Aliases]}]),
- ?line {ok,HEntF} = inet:gethostbyname(FullName),
- ?line HEntF_ = HEntF#hostent{h_name = FullName,
- h_addrtype = inet,
- h_length = 4,
- h_addr_list = [IP]},
- ?line HEntF_ = HEntF,
- ?line check_elems([{HEnt#hostent.h_aliases,[[],Aliases]}]),
+ {ok,_} = inet:gethostbyname(IPStr),
+ {ok,HEnt} = inet:gethostbyname(Name),
+ {ok,HEnt} = inet:gethostbyname(list_to_atom(Name)),
+ HEnt_ = HEnt#hostent{h_addrtype = inet,
+ h_length = 4,
+ h_addr_list = [IP]},
+
+ HEnt_ = HEnt,
+ check_elems([{HEnt#hostent.h_name,[Name,FullName]},
+ {HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]),
+ {ok,HEntF} = inet:gethostbyname(FullName),
+ HEntF_ = HEntF#hostent{h_name = FullName,
+ h_addrtype = inet,
+ h_length = 4,
+ h_addr_list = [IP]},
+ HEntF_ = HEntF,
+ check_elems([{HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]),
%%
- ?line FullNameU = toupper(FullName),
- ?line {ok,HEntU} = inet:gethostbyname(FullNameU),
- ?line FullNameU = toupper(HEntU#hostent.h_name),
- ?line #hostent{
+ FullNameU = toupper(FullName),
+ {ok,HEntU} = inet:gethostbyname(FullNameU),
+ FullNameU = toupper(HEntU#hostent.h_name),
+ #hostent{
h_addrtype = inet,
h_length = 4,
h_addr_list = [IP]} = HEntU,
- ?line check_elems(
- [{[toupper(H) || H <- HEntU#hostent.h_aliases],
- [[],[toupper(A) || A <- Aliases]]}]),
+ check_elems(
+ [{[toupper(H) || H <- HEntU#hostent.h_aliases],
+ [[],[toupper(A) || A <- Aliases]]}]),
- ?line {DName, _DFullName, _DIPStr, _DIP, _, _, _} =
+ {DName, _DFullName, _DIPStr, _DIP, _, _, _} =
ct:get_config(test_dummy_host),
- ?line {error,nxdomain} = inet:gethostbyname(DName),
- ?line {error,nxdomain} = inet:gethostbyname(IP_46_Str),
+ {error,nxdomain} = inet:gethostbyname(DName),
+ {error,nxdomain} = inet:gethostbyname(IP_46_Str),
ok.
t_gethostbyname_v6() -> required(v6).
-t_gethostbyname_v6(doc) -> "Test the inet:gethostbyname/1 inet6 function.";
-t_gethostbyname_v6(suite) -> [];
+%% Test the inet:gethostbyname/1 inet6 function.
t_gethostbyname_v6(Config) when is_list(Config) ->
{Name, FullName, IPStr, IP, Aliases} =
ct:get_config(test_host_ipv6_only),
@@ -242,7 +240,7 @@ t_gethostbyname_v6(Config) when is_list(Config) ->
h_length = 16} = HEnt,
check_elems(
[{HEnt#hostent.h_name,[Name,FullName]},
- {HEnt#hostent.h_aliases,[[],Aliases]}]);
+ {HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]);
[IP46] -> % IPv4 compatible address
{ok,HEnt4} = inet:gethostbyname(Name, inet),
#hostent{h_addrtype = inet,
@@ -262,7 +260,7 @@ t_gethostbyname_v6(Config) when is_list(Config) ->
h_addrtype = inet6,
h_length = 16} = HEntF,
check_elems(
- [{HEnt#hostent.h_aliases,[[],Aliases]}]);
+ [{HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]);
[IP46F] -> % IPv4 compatible address
{ok,HEnt4F} = inet:gethostbyname(FullName, inet),
#hostent{h_addrtype = inet,
@@ -287,33 +285,31 @@ check_elem(Val, [Val|_], _) -> ok;
check_elem(Val, [_|Tests], Tests0) ->
check_elem(Val, Tests, Tests0);
check_elem(Val, [], Tests0) ->
- ?t:fail({no_match,Val,Tests0}).
+ ct:fail({no_match,Val,Tests0}).
t_getaddr() -> required(v4).
-t_getaddr(doc) -> "Test the inet:getaddr/2 function.";
-t_getaddr(suite) -> [];
+%% Test the inet:getaddr/2 function.
t_getaddr(Config) when is_list(Config) ->
- ?line {Name,FullName,IPStr,IP,_,IP_46_Str,IP46} =
+ {Name,FullName,IPStr,IP,_,IP_46_Str,IP46} =
ct:get_config(test_host_ipv4_only),
- ?line {ok,IP} = inet:getaddr(list_to_atom(Name), inet),
- ?line {ok,IP} = inet:getaddr(Name, inet),
- ?line {ok,IP} = inet:getaddr(FullName, inet),
- ?line {ok,IP} = inet:getaddr(IP, inet),
- ?line {ok,IP} = inet:getaddr(IPStr, inet),
- ?line {error,nxdomain} = inet:getaddr(IP_46_Str, inet),
- ?line {error,eafnosupport} = inet:getaddr(IP46, inet),
-
- ?line {DName, DFullName, DIPStr, DIP, _, _, _} = ct:get_config(test_dummy_host),
- ?line {error,nxdomain} = inet:getaddr(DName, inet),
- ?line {error,nxdomain} = inet:getaddr(DFullName, inet),
- ?line {ok,DIP} = inet:getaddr(DIPStr, inet),
- ?line {ok,DIP} = inet:getaddr(DIP, inet),
+ {ok,IP} = inet:getaddr(list_to_atom(Name), inet),
+ {ok,IP} = inet:getaddr(Name, inet),
+ {ok,IP} = inet:getaddr(FullName, inet),
+ {ok,IP} = inet:getaddr(IP, inet),
+ {ok,IP} = inet:getaddr(IPStr, inet),
+ {error,nxdomain} = inet:getaddr(IP_46_Str, inet),
+ {error,eafnosupport} = inet:getaddr(IP46, inet),
+
+ {DName, DFullName, DIPStr, DIP, _, _, _} = ct:get_config(test_dummy_host),
+ {error,nxdomain} = inet:getaddr(DName, inet),
+ {error,nxdomain} = inet:getaddr(DFullName, inet),
+ {ok,DIP} = inet:getaddr(DIPStr, inet),
+ {ok,DIP} = inet:getaddr(DIP, inet),
ok.
t_getaddr_v6() -> required(v4) ++ required(v6).
-t_getaddr_v6(doc) -> "Test the inet:getaddr/2 function.";
-t_getaddr_v6(suite) -> [];
+%% Test the inet:getaddr/2 function.
t_getaddr_v6(Config) when is_list(Config) ->
{Name,FullName,IPStr,IP,_} =
ct:get_config(test_host_ipv6_only),
@@ -341,16 +337,15 @@ t_getaddr_v6(Config) when is_list(Config) ->
end.
ipv4_to_ipv6() -> required(v4).
-ipv4_to_ipv6(doc) -> "Test if IPv4 address is converted to IPv6 address.";
-ipv4_to_ipv6(suite) -> [];
+%% Test if IPv4 address is converted to IPv6 address.
ipv4_to_ipv6(Config) when is_list(Config) ->
%% Test what happens if an IPv4 address is looked up in an IPv6 context.
%% If the native resolver succeeds to look it up, an IPv4 compatible
%% address should be returned. If no IPv6 support on this host, an
%% error should beturned.
- ?line {_Name,_FullName,IPStr,_IP,Aliases,IP_46_Str,IP_46} =
+ {_Name,_FullName,IPStr,_IP,Aliases,IP_46_Str,IP_46} =
ct:get_config(test_host_ipv4_only),
- ?line IP4to6Res =
+ IP4to6Res =
case inet:getaddr(IPStr, inet6) of
{ok,IP_46} ->
io:format("IPv4->IPv6: success~n"),
@@ -362,36 +357,34 @@ ipv4_to_ipv6(Config) when is_list(Config) ->
io:format("IPv6->IPv4: eafnosupport~n"),
E;
Other ->
- ?line ?t:fail({ipv4_to_ipv6_lookup_failed,Other})
+ ct:fail({ipv4_to_ipv6_lookup_failed,Other})
end,
- ?line case {IP4to6Res,inet:gethostbyname(IPStr, inet6)} of
- {true,{ok,HEnt}} ->
- ?line HEnt_ = HEnt#hostent{h_addrtype = inet6,
- h_length = 16,
- h_addr_list = [IP_46]},
- ?line HEnt_ = HEnt,
- ?line check_elems([{HEnt#hostent.h_name,[IP_46_Str,IPStr]},
- {HEnt#hostent.h_aliases,[[],Aliases]}]);
- {_,IP4to6Res} -> ok
- end,
+ case {IP4to6Res,inet:gethostbyname(IPStr, inet6)} of
+ {true,{ok,HEnt}} ->
+ HEnt_ = HEnt#hostent{h_addrtype = inet6,
+ h_length = 16,
+ h_addr_list = [IP_46]},
+ HEnt_ = HEnt,
+ check_elems([{HEnt#hostent.h_name,[IP_46_Str,IPStr]},
+ {HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]);
+ {_,IP4to6Res} -> ok
+ end,
ok.
-host_and_addr() -> required(hosts).
-host_and_addr(doc) -> ["Test looking up hosts and addresses. Use 'ypcat hosts' ",
- "or the local eqivalent to find all hosts."];
-host_and_addr(suite) -> [];
-host_and_addr(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(5)),
+host_and_addr() ->
+ [{timetrap,{minutes,5}}|required(hosts)].
- ?line lists:foreach(fun try_host/1, get_hosts(Config)),
- ?line test_server:timetrap_cancel(Dog),
+%% Test looking up hosts and addresses. Use 'ypcat hosts'
+%% or the local eqivalent to find all hosts.
+host_and_addr(Config) when is_list(Config) ->
+ lists:foreach(fun try_host/1, get_hosts(Config)),
ok.
try_host({Ip0, Host}) ->
- ?line {ok,Ip} = inet:getaddr(Ip0, inet),
- ?line {ok,{hostent, _, _, inet, _, Ips1}} = inet:gethostbyaddr(Ip),
- ?line {ok,{hostent, _, _, inet, _, _Ips2}} = inet:gethostbyname(Host),
- ?line true = lists:member(Ip, Ips1),
+ {ok,Ip} = inet:getaddr(Ip0, inet),
+ {ok,{hostent, _, _, inet, _, Ips1}} = inet:gethostbyaddr(Ip),
+ {ok,{hostent, _, _, inet, _, _Ips2}} = inet:gethostbyname(Host),
+ true = lists:member(Ip, Ips1),
ok.
%% Get all hosts from the system using 'ypcat hosts' or the local
@@ -438,18 +431,18 @@ get_hosts([C|Rest], Cur, Ip, Result) ->
get_hosts(Rest, [C|Cur], Ip, Result);
get_hosts([], _, _, Result) ->
Result.
-
+
parse_hosts(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir,Config),
- ?line HostFile = filename:join(DataDir, "hosts"),
- ?line inet_parse:hosts(HostFile),
- ?line HostFileErr1 = filename:join(DataDir, "hosts_err1"),
- ?line inet_parse:hosts(HostFileErr1),
- ?line Resolv = filename:join(DataDir,"resolv.conf"),
- ?line inet_parse:resolv(Resolv),
- ?line ResolvErr1 = filename:join(DataDir,"resolv.conf.err1"),
- ?line inet_parse:resolv(ResolvErr1).
+ DataDir = proplists:get_value(data_dir,Config),
+ HostFile = filename:join(DataDir, "hosts"),
+ inet_parse:hosts(HostFile),
+ HostFileErr1 = filename:join(DataDir, "hosts_err1"),
+ inet_parse:hosts(HostFileErr1),
+ Resolv = filename:join(DataDir,"resolv.conf"),
+ inet_parse:resolv(Resolv),
+ ResolvErr1 = filename:join(DataDir,"resolv.conf.err1"),
+ inet_parse:resolv(ResolvErr1).
parse_address(Config) when is_list(Config) ->
V4Strict =
@@ -521,10 +514,10 @@ parse_address(Config) when is_list(Config) ->
{{0,0,0,0,0,65535,258,65534},"::FFFF:1.2.255.254"},
{{16#ffff,16#ffff,16#ffff,16#ffff,16#ffff,16#ffff,16#ffff,16#ffff},
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"}
- |[{{D2,0,0,0,0,P,(D1 bsl 8) bor D2,(D3 bsl 8) bor D4},
- erlang:integer_to_list(D2, 16)++"::"++Q++S}
- || {{D1,D2,D3,D4},S} <- V4Strict,
- {P,Q} <- [{0,""},{16#17,"17:"},{16#ff0,"0ff0:"}]]],
+ |[{{D2,0,0,0,0,P,(D1 bsl 8) bor D2,(D3 bsl 8) bor D4},
+ erlang:integer_to_list(D2, 16)++"::"++Q++S}
+ || {{D1,D2,D3,D4},S} <- V4Strict,
+ {P,Q} <- [{0,""},{16#17,"17:"},{16#ff0,"0ff0:"}]]],
V4Sloppy =
[{{10,1,16#98,16#76},"10.0x019876"},
{{8#12,1,8#130,8#321},"012.01.054321"},
@@ -624,42 +617,37 @@ parse_strict_address(Config) when is_list(Config) ->
{ok, {3089,3106,23603,50240,0,0,119,136}} =
inet:parse_strict_address("c11:0c22:5c33:c440::077:0088").
-t_gethostnative(suite) ->[];
-t_gethostnative(doc) ->[];
t_gethostnative(Config) when is_list(Config) ->
-%% this will result in 26 bytes sent which causes problem in Windows
-%% if the port-program has not assured stdin to be read in BINARY mode
-%% OTP-2555
- ?line case inet_gethost_native:gethostbyname(
- "a23456789012345678901234") of
+ %% this will result in 26 bytes sent which causes problem in Windows
+ %% if the port-program has not assured stdin to be read in BINARY mode
+ %% OTP-2555
+ case inet_gethost_native:gethostbyname(
+ "a23456789012345678901234") of
{error,notfound} ->
- ?line ok;
+ ok;
{error,no_data} ->
- ?line ok
+ ok
end.
-gethostnative_parallell(suite) ->
- [];
-gethostnative_parallell(doc) ->
- ["Check that the emulator survives crashes in gethost_native"];
+%% Check that the emulator survives crashes in gethost_native.
gethostnative_parallell(Config) when is_list(Config) ->
- ?line {ok,Hostname} = inet:gethostname(),
- ?line {ok,_} = inet:gethostbyname(Hostname),
+ {ok,Hostname} = inet:gethostname(),
+ {ok,_} = inet:gethostbyname(Hostname),
case whereis(inet_gethost_native) of
Pid when is_pid(Pid) ->
- ?line do_gethostnative_parallell();
+ do_gethostnative_parallell();
_ ->
- ?line {skipped, "Not running native gethostbyname"}
+ {skipped, "Not running native gethostbyname"}
end.
do_gethostnative_parallell() ->
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok,Node} = ?t:start_node(gethost_parallell, slave,
- [{args, "-pa " ++ PA}]),
- ?line ok = rpc:call(Node, ?MODULE, parallell_gethost, []),
- ?line receive after 10000 -> ok end,
- ?line pong = net_adm:ping(Node),
- ?line ?t:stop_node(Node),
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok,Node} = test_server:start_node(gethost_parallell, slave,
+ [{args, "-pa " ++ PA}]),
+ ok = rpc:call(Node, ?MODULE, parallell_gethost, []),
+ receive after 10000 -> ok end,
+ pong = net_adm:ping(Node),
+ test_server:stop_node(Node),
ok.
parallell_gethost() ->
@@ -752,7 +740,7 @@ wait_for_gethost(N) ->
%% This is what I call an exit tuple :)
exit({inet,gethostbyname, returned, Otherwise, 'when',
'N','=',N,'and','hostname','=',Hostname,'and',
- kill_gethost_n,'=',get(kill_gethost_n)})
+ kill_gethost_n,'=',get(kill_gethost_n)})
end,
case whereis(inet_gethost_native) of
Pid when is_pid(Pid) ->
@@ -764,23 +752,20 @@ wait_for_gethost(N) ->
end,
wait_for_gethost(N-1)
end.
-
-cname_loop(suite) ->
- [];
-cname_loop(doc) ->
- ["Check that the resolver handles a CNAME loop"];
+
+%% Check that the resolver handles a CNAME loop.
cname_loop(Config) when is_list(Config) ->
%% getbyname (hostent_by_domain)
- ?line ok = inet_db:add_rr("mydomain.com", in, ?S_CNAME, ttl, "mydomain.com"),
- ?line {error,nxdomain} = inet_db:getbyname("mydomain.com", ?S_A),
- ?line ok = inet_db:del_rr("mydomain.com", in, ?S_CNAME, "mydomain.com"),
+ ok = inet_db:add_rr("mydomain.com", in, ?S_CNAME, ttl, "mydomain.com"),
+ {error,nxdomain} = inet_db:getbyname("mydomain.com", ?S_A),
+ ok = inet_db:del_rr("mydomain.com", in, ?S_CNAME, "mydomain.com"),
%% res_hostent_by_domain
RR = #dns_rr{domain = "mydomain.com",
class = in,
type = ?S_CNAME,
data = "mydomain.com"},
Rec = #dns_rec{anlist = [RR]},
- ?line {error,nxdomain} = inet_db:res_hostent_by_domain("mydomain.com", ?S_A, Rec),
+ {error,nxdomain} = inet_db:res_hostent_by_domain("mydomain.com", ?S_A, Rec),
ok.
@@ -795,80 +780,75 @@ cname_loop(Config) when is_list(Config) ->
lookup_processes=20}).
gethostnative_soft_restart() -> required(hosts).
-gethostnative_soft_restart(suite) ->
- [];
-gethostnative_soft_restart(doc) ->
- ["Check that no name lookups fails during soft restart "
- "of inet_gethost_native"];
+
+%% Check that no name lookups fails during soft restart
+%% of inet_gethost_native.
gethostnative_soft_restart(Config) when is_list(Config) ->
- ?line gethostnative_control(Config,
- #gethostnative_control{
- control_seq=[soft_restart]}).
+ gethostnative_control(Config,
+ #gethostnative_control{
+ control_seq=[soft_restart]}).
gethostnative_debug_level() -> required(hosts).
-gethostnative_debug_level(suite) ->
- [];
-gethostnative_debug_level(doc) ->
- ["Check that no name lookups fails during debug level change "
- "of inet_gethost_native"];
+
+%% Check that no name lookups fails during debug level change
+%% of inet_gethost_native.
gethostnative_debug_level(Config) when is_list(Config) ->
- ?line gethostnative_control(Config,
- #gethostnative_control{
- control_seq=[{debug_level,1},
- {debug_level,0}]}).
+ gethostnative_control(Config,
+ #gethostnative_control{
+ control_seq=[{debug_level,1},
+ {debug_level,0}]}).
gethostnative_control(Config, Optrec) ->
- ?line case inet_db:res_option(lookup) of
- [native] ->
- case whereis(inet_gethost_native) of
- Pid when is_pid(Pid) ->
- ?line gethostnative_control_1(Config, Optrec);
- _ ->
- ?line {skipped, "Not running native gethostbyname"}
- end;
- _ ->
- ?line {skipped, "Native not only lookup metod"}
- end.
+ case inet_db:res_option(lookup) of
+ [native] ->
+ case whereis(inet_gethost_native) of
+ Pid when is_pid(Pid) ->
+ gethostnative_control_1(Config, Optrec);
+ _ ->
+ {skipped, "Not running native gethostbyname"}
+ end;
+ _ ->
+ {skipped, "Native not only lookup metod"}
+ end.
gethostnative_control_1(Config,
#gethostnative_control{
- control_seq=Seq,
- control_interval=Interval,
- lookup_delay=Delay,
- lookup_count=Cnt,
- lookup_processes=N}) ->
- ?line {ok, Hostname} = inet:gethostname(),
- ?line {ok, _} = inet:gethostbyname(Hostname),
- ?line Hosts =
+ control_seq=Seq,
+ control_interval=Interval,
+ lookup_delay=Delay,
+ lookup_count=Cnt,
+ lookup_processes=N}) ->
+ {ok, Hostname} = inet:gethostname(),
+ {ok, _} = inet:gethostbyname(Hostname),
+ Hosts =
[Hostname|[H || {_,H} <- get_hosts(Config)]
++[H++D || H <- ["www.","www1.","www2.",""],
D <- ["erlang.org","erlang.se"]]
++[H++"cslab.ericsson.net" || H <- ["morgoth.","hades.","styx."]]],
%% Spawn some processes to do parallel lookups while
%% I repeatedly do inet_gethost_native:control/1.
- ?line TrapExit = process_flag(trap_exit, true),
- ?line gethostnative_control_2([undefined], Interval, Delay, Cnt, N, Hosts),
- ?line test_server:format(
- "First intermission: now starting control sequence ~w\n",
- [Seq]),
- ?line erlang:display(first_intermission),
- ?line gethostnative_control_2(Seq, Interval, Delay, Cnt, N, Hosts),
- ?line erlang:display(second_intermission),
- ?line test_server:format(
- "Second intermission: now stopping control sequence ~w\n",
- [Seq]),
- ?line gethostnative_control_2([undefined], Interval, Delay, Cnt, N, Hosts),
- ?line true = process_flag(trap_exit, TrapExit),
- ?line ok.
+ TrapExit = process_flag(trap_exit, true),
+ gethostnative_control_2([undefined], Interval, Delay, Cnt, N, Hosts),
+ io:format(
+ "First intermission: now starting control sequence ~w\n",
+ [Seq]),
+ erlang:display(first_intermission),
+ gethostnative_control_2(Seq, Interval, Delay, Cnt, N, Hosts),
+ erlang:display(second_intermission),
+ io:format(
+ "Second intermission: now stopping control sequence ~w\n",
+ [Seq]),
+ gethostnative_control_2([undefined], Interval, Delay, Cnt, N, Hosts),
+ true = process_flag(trap_exit, TrapExit),
+ ok.
gethostnative_control_2(Seq, Interval, Delay, Cnt, N, Hosts) ->
- ?line Tag = make_ref(),
- ?line Parent = self(),
- ?line Lookupers =
+ Tag = make_ref(),
+ Parent = self(),
+ Lookupers =
[spawn_link(
fun () ->
- random:seed(),
lookup_loop(Hosts, Delay, Tag, Parent, Cnt, Hosts)
end)
|| _ <- lists:seq(1, N)],
@@ -878,7 +858,7 @@ gethostnative_control_2(Seq, Interval, Delay, Cnt, N, Hosts) ->
gethostnative_control_3(Tag, Reason) ->
receive
{Tag,Error} ->
- ?line gethostnative_control_3(Tag, Error)
+ gethostnative_control_3(Tag, Error)
after 0 ->
Reason
end.
@@ -893,27 +873,26 @@ control_loop([Op|Ops], Interval, Tag, Lookupers, Seq) ->
Seq).
control_loop_1(Op, Interval, Tag, Lookupers) ->
- ?line
- receive
- {'EXIT',Pid,Reason} ->
- ?line case Reason of
- Tag -> % Done
- ?line control_loop_1
- (Op, Interval, Tag,
- lists:delete(Pid, Lookupers));
- _ ->
- ?line io:format("Lookuper ~p died: ~p",
- [Pid,Reason]),
- ?line test_server:fail("Lookuper died")
- end
- after Interval ->
- ?line if Op =/= undefined ->
- ?line ok = inet_gethost_native:control(Op);
- true ->
- ?line ok
- end,
- ?line Lookupers
- end.
+ receive
+ {'EXIT',Pid,Reason} ->
+ case Reason of
+ Tag -> % Done
+ control_loop_1
+ (Op, Interval, Tag,
+ lists:delete(Pid, Lookupers));
+ _ ->
+ io:format("Lookuper ~p died: ~p",
+ [Pid,Reason]),
+ ct:fail("Lookuper died")
+ end
+ after Interval ->
+ if Op =/= undefined ->
+ ok = inet_gethost_native:control(Op);
+ true ->
+ ok
+ end,
+ Lookupers
+ end.
lookup_loop(_, _Delay, Tag, _Parent, 0, _Hosts) ->
exit(Tag);
@@ -924,21 +903,18 @@ lookup_loop([H|Hs], Delay, Tag, Parent, Cnt, Hosts) ->
{ok,_Hent} -> ok;
{error,nxdomain} -> ok;
Error ->
- ?line io:format("Name lookup error for ~p for ~p: ~p",
- [self(),H,Error]),
+ io:format("Name lookup error for ~p for ~p: ~p",
+ [self(),H,Error]),
Parent ! {Tag,Error}
end,
receive
- after random:uniform(Delay) ->
+ after rand:uniform(Delay) ->
lookup_loop(Hs, Delay, Tag, Parent, Cnt-1, Hosts)
end.
-lookup_bad_search_option(suite) ->
- [];
-lookup_bad_search_option(doc) ->
- ["Test lookup with erroneously configured lookup option (OTP-12133)"];
+%% Test lookup with erroneously configured lookup option (OTP-12133).
lookup_bad_search_option(Config) when is_list(Config) ->
%% Manipulation of resolver config is done in init_per_testcase
%% and end_per_testcase to ensure cleanup.
@@ -948,24 +924,21 @@ lookup_bad_search_option(Config) when is_list(Config) ->
-getif(suite) ->
- [];
-getif(doc) ->
- ["Tests basic functionality of getiflist, getif, and ifget"];
+%% Tests basic functionality of getiflist, getif, and ifget.
getif(Config) when is_list(Config) ->
- ?line case os:type() of
- {unix,Osname} ->
- ?line do_getif(Osname);
- {_,_} ->
- {skip,"inet:getif/0 probably not supported"}
- end.
+ case os:type() of
+ {unix,Osname} ->
+ do_getif(Osname);
+ {_,_} ->
+ {skip,"inet:getif/0 probably not supported"}
+ end.
do_getif(Osname) ->
- ?line {ok,Hostname} = inet:gethostname(),
- ?line {ok,Address} = inet:getaddr(Hostname, inet),
- ?line {ok,Loopback} = inet:getaddr("localhost", inet),
- ?line {ok,Interfaces} = inet:getiflist(),
- ?line HWAs =
+ {ok,Hostname} = inet:gethostname(),
+ {ok,Address} = inet:getaddr(Hostname, inet),
+ {ok,Loopback} = inet:getaddr("localhost", inet),
+ {ok,Interfaces} = inet:getiflist(),
+ HWAs =
lists:sort(
lists:foldl(
fun (I, Acc) ->
@@ -974,10 +947,10 @@ do_getif(Osname) ->
{ok,[]} -> Acc
end
end, [], Interfaces)),
- ?line io:format("HWAs = ~p~n", [HWAs]),
- ?line (Osname =/= sunos)
- andalso ((length(HWAs) > 0) orelse (?t:fail(no_HWAs))),
- ?line Addresses =
+ io:format("HWAs = ~p~n", [HWAs]),
+ (Osname =/= sunos)
+ andalso ((length(HWAs) > 0) orelse (ct:fail(no_HWAs))),
+ Addresses =
lists:sort(
lists:foldl(
fun (I, Acc) ->
@@ -986,139 +959,147 @@ do_getif(Osname) ->
{ok,[]} -> Acc
end
end, [], Interfaces)),
- ?line {ok,Getif} = inet:getif(),
- ?line Addresses = lists:sort([A || {A,_,_} <- Getif]),
- ?line true = ip_member(Address, Addresses),
- ?line true = ip_member(Loopback, Addresses),
- ?line ok.
-
-getif_ifr_name_overflow(doc) ->
- "Test long interface names do not overrun buffer";
+ {ok,Getif} = inet:getif(),
+ Addresses = lists:sort([A || {A,_,_} <- Getif]),
+ true = ip_member(Address, Addresses),
+ true = ip_member(Loopback, Addresses),
+ ok.
+
+%% Test long interface names do not overrun buffer.
getif_ifr_name_overflow(Config) when is_list(Config) ->
- ?line case os:type() of
- {unix,Osname} ->
- ?line do_getif_ifr_name_overflow(Osname);
- {_,_} ->
- {skip,"inet:ifget/2 probably not supported"}
- end.
+ case os:type() of
+ {unix,Osname} ->
+ do_getif_ifr_name_overflow(Osname);
+ {_,_} ->
+ {skip,"inet:ifget/2 probably not supported"}
+ end.
do_getif_ifr_name_overflow(_) ->
%% emulator should not crash
- ?line {ok,[]} = inet:ifget(lists:duplicate(128, "x"), [addr]),
+ {ok,[]} = inet:ifget(lists:duplicate(128, "x"), [addr]),
ok.
-getservbyname_overflow(doc) ->
- "Test long service names do not overrun buffer";
+%% Test long service names do not overrun buffer.
getservbyname_overflow(Config) when is_list(Config) ->
%% emulator should not crash
- ?line {error,einval} = inet:getservbyname(list_to_atom(lists:flatten(lists:duplicate(128, "x"))), tcp),
+ {error,einval} = inet:getservbyname(list_to_atom(lists:flatten(lists:duplicate(128, "x"))), tcp),
ok.
-getifaddrs(doc) ->
- "Test inet:gifaddrs/0";
+%% Test inet:gifaddrs/0.
getifaddrs(Config) when is_list (Config) ->
- ?line {ok,IfAddrs} = inet:getifaddrs(),
- ?line ?t:format("IfAddrs = ~p.~n", [IfAddrs]),
- ?line
- case
- {os:type(),
- [If ||
- {If,Opts} <- IfAddrs,
- lists:keymember(hwaddr, 1, Opts)]} of
- {{unix,sunos},[]} -> ok;
- {OT,[]} ->
- ?t:fail({should_have_hwaddr,OT});
- _ -> ok
- end,
- ?line Addrs =
+ {ok,IfAddrs} = inet:getifaddrs(),
+ io:format("IfAddrs = ~p.~n", [IfAddrs]),
+ case
+ {os:type(),
+ [If ||
+ {If,Opts} <- IfAddrs,
+ lists:keymember(hwaddr, 1, Opts)]} of
+ {{unix,sunos},[]} -> ok;
+ {OT,[]} ->
+ ct:fail({should_have_hwaddr,OT});
+ _ -> ok
+ end,
+ Addrs =
[element(1, A) || A <- ifaddrs(IfAddrs)],
- ?line ?t:format("Addrs = ~p.~n", [Addrs]),
- ?line [check_addr(Addr) || Addr <- Addrs],
+ io:format("Addrs = ~p.~n", [Addrs]),
+ [check_addr(Addr) || Addr <- Addrs],
ok.
-check_addr(Addr)
+check_addr({addr,Addr})
when tuple_size(Addr) =:= 8,
element(1, Addr) band 16#FFC0 =:= 16#FE80 ->
- ?line ?t:format("Addr: ~p link local; SKIPPED!~n", [Addr]),
+ io:format("Addr: ~p link local; SKIPPED!~n", [Addr]),
ok;
-check_addr(Addr) ->
- ?line ?t:format("Addr: ~p.~n", [Addr]),
- ?line Ping = "ping",
- ?line Pong = "pong",
- ?line {ok,L} = gen_tcp:listen(0, [{ip,Addr},{active,false}]),
- ?line {ok,P} = inet:port(L),
- ?line {ok,S1} = gen_tcp:connect(Addr, P, [{active,false}]),
- ?line {ok,S2} = gen_tcp:accept(L),
- ?line ok = gen_tcp:send(S2, Ping),
- ?line {ok,Ping} = gen_tcp:recv(S1, length(Ping)),
- ?line ok = gen_tcp:send(S1, Pong),
- ?line ok = gen_tcp:close(S1),
- ?line {ok,Pong} = gen_tcp:recv(S2, length(Pong)),
- ?line ok = gen_tcp:close(S2),
- ?line ok = gen_tcp:close(L),
- ok.
+check_addr({addr,Addr}) ->
+ io:format("Addr: ~p.~n", [Addr]),
+ Ping = "ping",
+ Pong = "pong",
+ {ok,L} = gen_tcp:listen(0, [{ip,Addr},{active,false}]),
+ {ok,P} = inet:port(L),
+ {ok,S1} = gen_tcp:connect(Addr, P, [{active,false}]),
+ {ok,S2} = gen_tcp:accept(L),
+ ok = gen_tcp:send(S2, Ping),
+ {ok,Ping} = gen_tcp:recv(S1, length(Ping)),
+ ok = gen_tcp:send(S1, Pong),
+ ok = gen_tcp:close(S1),
+ {ok,Pong} = gen_tcp:recv(S2, length(Pong)),
+ ok = gen_tcp:close(S2),
+ ok = gen_tcp:close(L).
-record(ifopts, {name,flags,addrs=[],hwaddr}).
ifaddrs([]) -> [];
ifaddrs([{If,Opts}|IOs]) ->
- ?line #ifopts{flags=Flags} = Ifopts =
- check_ifopts(Opts, #ifopts{name=If}),
- ?line case Flags =/= undefined andalso lists:member(up, Flags) of
- true ->
+ #ifopts{flags=F} = Ifopts = check_ifopts(Opts, #ifopts{name=If}),
+ case F of
+ {flags,Flags} ->
+ case lists:member(up, Flags) of
+ true ->
Ifopts#ifopts.addrs;
- false ->
- []
- end++ifaddrs(IOs).
+ false ->
+ []
+ end ++ ifaddrs(IOs);
+ undefined ->
+ ifaddrs(IOs)
+ end.
-check_ifopts([], #ifopts{name=If,flags=Flags,addrs=Raddrs}=Ifopts) ->
+check_ifopts([], #ifopts{flags=F,addrs=Raddrs}=Ifopts) ->
Addrs = lists:reverse(Raddrs),
R = Ifopts#ifopts{addrs=Addrs},
- ?t:format("~p.~n", [R]),
+ io:format("~p.~n", [R]),
%% See how we did...
- if is_list(Flags) -> ok;
- true ->
- ?t:fail({flags_undefined,If})
- end,
+ {flags,Flags} = F,
case lists:member(broadcast, Flags) of
true ->
[case A of
- {_,_,_} -> A;
- {T,_} when tuple_size(T) =:= 8 -> A;
- _ ->
- ?t:fail({broaddr_missing,If,A})
+ {{addr,_},{netmask,_},{broadaddr,_}} ->
+ A;
+ {{addr,T},{netmask,_}} when tuple_size(T) =:= 8 ->
+ A
end || A <- Addrs];
false ->
- [case A of {_,_} -> A;
- _ ->
- ?t:fail({should_have_netmask,If,A})
- end || A <- Addrs]
+ case lists:member(pointtopoint, Flags) of
+ true ->
+ [case A of
+ {{addr,_},{netmask,_},{dstaddr,_}} ->
+ A
+ end || A <- Addrs];
+ false ->
+ [case A of
+ {{addr,_},{netmask,_}} ->
+ A
+ end || A <- Addrs]
+ end
end,
R;
-check_ifopts([{flags,Flags}|Opts], #ifopts{flags=undefined}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{flags=Flags});
-check_ifopts([{flags,Fs}|Opts], #ifopts{flags=Flags}=Ifopts) ->
- case Fs of
+check_ifopts([{flags,_}=F|Opts], #ifopts{flags=undefined}=Ifopts) ->
+ check_ifopts(Opts, Ifopts#ifopts{flags=F});
+check_ifopts([{flags,_}=F|Opts], #ifopts{flags=Flags}=Ifopts) ->
+ case F of
Flags ->
- check_ifopts(Opts, Ifopts#ifopts{});
+ check_ifopts(Opts, Ifopts);
_ ->
- ?t:fail({multiple_flags,Fs,Ifopts})
+ ct:fail({multiple_flags,F,Ifopts})
end;
check_ifopts(
- [{addr,Addr},{netmask,Netmask},{broadaddr,Broadaddr}|Opts],
+ [{addr,_}=A,{netmask,_}=N,{dstaddr,_}=D|Opts],
+ #ifopts{addrs=Addrs}=Ifopts) ->
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{A,N,D}|Addrs]});
+check_ifopts(
+ [{addr,_}=A,{netmask,_}=N,{broadaddr,_}=B|Opts],
#ifopts{addrs=Addrs}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr,Netmask,Broadaddr}|Addrs]});
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{A,N,B}|Addrs]});
check_ifopts(
- [{addr,Addr},{netmask,Netmask}|Opts],
+ [{addr,_}=A,{netmask,_}=N|Opts],
#ifopts{addrs=Addrs}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr,Netmask}|Addrs]});
-check_ifopts([{addr,Addr}|Opts], #ifopts{addrs=Addrs}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr}|Addrs]});
-check_ifopts([{hwaddr,Hwaddr}|Opts], #ifopts{hwaddr=undefined}=Ifopts)
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{A,N}|Addrs]});
+check_ifopts([{addr,_}=A|Opts], #ifopts{addrs=Addrs}=Ifopts) ->
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{A}|Addrs]});
+check_ifopts([{hwaddr,Hwaddr}=H|Opts], #ifopts{hwaddr=undefined}=Ifopts)
when is_list(Hwaddr) ->
- check_ifopts(Opts, Ifopts#ifopts{hwaddr=Hwaddr});
-check_ifopts([{hwaddr,HwAddr}|_], #ifopts{}=Ifopts) ->
- ?t:fail({multiple_hwaddrs,HwAddr,Ifopts}).
+ check_ifopts(Opts, Ifopts#ifopts{hwaddr=H});
+check_ifopts([{hwaddr,_}=H|_], #ifopts{}=Ifopts) ->
+ ct:fail({multiple_hwaddrs,H,Ifopts}).
%% Works just like lists:member/2, except that any {127,_,_,_} tuple
%% matches any other {127,_,_,_}. We do this to handle Linux systems
@@ -1152,9 +1133,13 @@ simple_netns(Config) when is_list(Config) ->
jog_netns_opt(L),
ok = gen_tcp:close(L),
%%
- {ok,S} = gen_sctp:open(),
- jog_netns_opt(S),
- ok = gen_sctp:close(S);
+ case gen_sctp:open() of
+ {ok,S} ->
+ jog_netns_opt(S),
+ ok = gen_sctp:close(S);
+ {error,eprotonosupport} ->
+ ok
+ end;
{error,einval} ->
{skip,"setns() not supported"}
end.
@@ -1168,24 +1153,28 @@ jog_netns_opt(S) ->
ok.
+%% Smoke test netns support.
simple_netns_open(Config) when is_list(Config) ->
+ %% Note: {error,enoent} will be returned if the run-time executable
+ %% has support for netns, but /proc/self/ns/net is missing.
case gen_udp:open(0, [binary,{netns,"/"},inet]) of
{ok,U} ->
ok = gen_udp:close(U);
- {error,E1} when E1 =:= einval; E1 =:= eperm ->
+ {error,E1} when E1 =:= einval; E1 =:= eperm; E1 =:= enoent ->
ok
end,
case gen_tcp:listen(0, [binary,{netns,"/"},inet]) of
{ok,T} ->
ok = gen_tcp:close(T);
- {error,E2} when E2 =:= einval; E2 =:= eperm ->
+ {error,E2} when E2 =:= einval; E2 =:= eperm; E2 =:= enoent ->
ok
end,
try gen_sctp:open(0, [binary,{netns,"/"},inet]) of
{ok,S} ->
ok = gen_sctp:close(S);
{error,E3}
- when E3 =:= einval; E3 =:= eperm; E3 =:= eprotonosupport ->
+ when E3 =:= einval; E3 =:= eperm;
+ E3 =:= enoent; E3 =:= eprotonosupport ->
ok
catch
error:badarg ->
diff --git a/lib/kernel/test/inet_res_SUITE.erl b/lib/kernel/test/inet_res_SUITE.erl
index ace4ccb8bd..6691ad9c06 100644
--- a/lib/kernel/test/inet_res_SUITE.erl
+++ b/lib/kernel/test/inet_res_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,6 @@
-module(inet_res_SUITE).
-include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-include_lib("kernel/include/inet.hrl").
-include_lib("kernel/src/inet_dns.hrl").
@@ -43,7 +42,24 @@
-define(RUN_NAMED, "run-named").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+%% This test suite use a script ?RUN_NAMED that tries to start
+%% a temporary local nameserver BIND 8 or 9 that must be installed
+%% on your machine.
+%%
+%% For example, on Ubuntu 14.04, as root:
+%% apt-get install bind9
+%% Now, that is not enough since Apparmor will not allow
+%% the nameserver daemon /usr/sbin/named to read from the test directory.
+%% Assuming that you run tests in /ldisk/daily_build, and still on
+%% Ubuntu 14.04, make /usr/apparmor.d/local/usr.sbin.named contain:
+%% /ldisk/daily_build/** r,
+%% And yes; the trailing comma must be there...
+
+
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[basic, resolve, edns0, txt_record, files_monitor,
@@ -78,8 +94,8 @@ zone_dir(TC) ->
end.
init_per_testcase(Func, Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
try ns_init(zone_dir(Func), PrivDir, DataDir) of
NsSpec ->
Lookup = inet_db:res_option(lookup),
@@ -89,29 +105,27 @@ init_per_testcase(Func, Config) ->
inet_db:ins_alt_ns(IP, Port);
_ -> ok
end,
- Dog = test_server:timetrap(test_server:seconds(20)),
- [{nameserver,NsSpec},{res_lookup,Lookup},{watchdog,Dog}|Config]
+ [{nameserver,NsSpec},{res_lookup,Lookup}|Config]
catch
SkipReason ->
{skip,SkipReason}
end.
end_per_testcase(_Func, Config) ->
- test_server:timetrap_cancel(?config(watchdog, Config)),
- inet_db:set_lookup(?config(res_lookup, Config)),
- NsSpec = ?config(nameserver, Config),
+ inet_db:set_lookup(proplists:get_value(res_lookup, Config)),
+ NsSpec = proplists:get_value(nameserver, Config),
case NsSpec of
{_,{IP,Port},_} ->
inet_db:del_alt_ns(IP, Port);
_ -> ok
end,
- ns_end(NsSpec, ?config(priv_dir, Config)).
+ ns_end(NsSpec, proplists:get_value(priv_dir, Config)).
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Nameserver control
ns(Config) ->
- {_ZoneDir,NS,_P} = ?config(nameserver, Config),
+ {_ZoneDir,NS,_P} = proplists:get_value(nameserver, Config),
NS.
ns_init(ZoneDir, PrivDir, DataDir) ->
@@ -120,7 +134,7 @@ ns_init(ZoneDir, PrivDir, DataDir) ->
{unix,_} ->
PortNum = case {os:type(),os:version()} of
{{unix,solaris},{M,V,_}} when M =< 5, V < 10 ->
- 11895 + random:uniform(100);
+ 11895 + rand:uniform(100);
_ ->
{ok,S} = gen_udp:open(0, [{reuseaddr,true}]),
{ok,PNum} = inet:port(S),
@@ -278,8 +292,7 @@ proxy_ns({proxy,_,_,ProxyNS}) -> ProxyNS.
%%
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-basic(doc) ->
- ["Lookup an A record with different API functions"];
+%% Lookup an A record with different API functions.
basic(Config) when is_list(Config) ->
NS = ns(Config),
Name = "ns.otptest",
@@ -341,8 +354,7 @@ basic(Config) when is_list(Config) ->
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-resolve(doc) ->
- ["Lookup different records using resolve/2..4"];
+%% Lookup different records using resolve/2..4.
resolve(Config) when is_list(Config) ->
Class = in,
NS = ns(Config),
@@ -472,8 +484,7 @@ check_msg(Class, Type, Msg, AnList, NsList) ->
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-edns0(doc) ->
- ["Test EDNS and truncation"];
+%% Test EDNS and truncation.
edns0(Config) when is_list(Config) ->
NS = ns(Config),
Domain = "otptest",
@@ -534,10 +545,7 @@ inet_res_filter(Anlist, Class, Type) ->
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-txt_record(suite) ->
- [];
-txt_record(doc) ->
- ["Tests TXT records"];
+%% Tests TXT records.
txt_record(Config) when is_list(Config) ->
D1 = "cslab.ericsson.net",
D2 = "mail1.cslab.ericsson.net",
@@ -556,10 +564,7 @@ txt_record(Config) when is_list(Config) ->
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-files_monitor(suite) ->
- [];
-files_monitor(doc) ->
- ["Tests monitoring of /etc/hosts and /etc/resolv.conf, but not them"];
+%% Tests monitoring of /etc/hosts and /etc/resolv.conf, but not them.
files_monitor(Config) when is_list(Config) ->
Search = inet_db:res_option(search),
HostsFile = inet_db:res_option(hosts_file),
@@ -574,7 +579,7 @@ files_monitor(Config) when is_list(Config) ->
end.
do_files_monitor(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
{ok,Hostname} = inet:gethostname(),
io:format("Hostname = ~p.~n", [Hostname]),
FQDN =
@@ -648,8 +653,7 @@ do_files_monitor(Config) ->
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-last_ms_answer(doc) ->
- ["Answer just when timeout is triggered (OTP-9221)"];
+%% Answer just when timeout is triggered (OTP-9221).
last_ms_answer(Config) when is_list(Config) ->
NS = ns(Config),
Name = "ns.otptest",
diff --git a/lib/kernel/test/inet_res_SUITE_data/run-named b/lib/kernel/test/inet_res_SUITE_data/run-named
index d9befb352d..d67295773a 100755
--- a/lib/kernel/test/inet_res_SUITE_data/run-named
+++ b/lib/kernel/test/inet_res_SUITE_data/run-named
@@ -2,7 +2,7 @@
##
## %CopyrightBegin%
##
-## Copyright Ericsson AB 2009-2012. All Rights Reserved.
+## Copyright Ericsson AB 2009-2016. All Rights Reserved.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/inet_sockopt_SUITE.erl b/lib/kernel/test/inet_sockopt_SUITE.erl
index cb522c8abe..322b9f30fe 100644
--- a/lib/kernel/test/inet_sockopt_SUITE.erl
+++ b/lib/kernel/test/inet_sockopt_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(inet_sockopt_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(C_GET_IPPROTO_TCP,1).
@@ -62,7 +62,9 @@
-export([init_per_testcase/2, end_per_testcase/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[simple, loop_all, simple_raw, simple_raw_getbin,
@@ -90,97 +92,91 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+end_per_testcase(_Func, _Config) ->
+ ok.
-simple(suite) -> [];
-simple(doc) -> "Test inet:setopt/getopt simple functionality.";
+%% Test inet:setopt/getopt simple functionality.
simple(Config) when is_list(Config) ->
- ?line XOpt = case os:type() of
- {unix,_} -> [{reuseaddr,true}];
- _ -> []
- end,
- ?line Opt = [{nodelay,true},
- {keepalive,true},{packet,4},
- {active,false}|XOpt],
- ?line OptTags = [X || {X,_} <- Opt],
- ?line {S1,S2} = create_socketpair(Opt, Opt),
- ?line {ok,Opt} = inet:getopts(S1,OptTags),
- ?line {ok,Opt} = inet:getopts(S2,OptTags),
- ?line COpt = [{X,case X of nodelay -> false;_ -> Y end} || {X,Y} <- Opt],
- ?line inet:setopts(S1,COpt),
- ?line {ok,COpt} = inet:getopts(S1,OptTags),
- ?line {ok,Opt} = inet:getopts(S2,OptTags),
- ?line gen_tcp:close(S1),
- ?line gen_tcp:close(S2),
+ XOpt = case os:type() of
+ {unix,_} -> [{reuseaddr,true}];
+ _ -> []
+ end,
+ Opt = [{nodelay,true},
+ {keepalive,true},{packet,4},
+ {active,false}|XOpt],
+ OptTags = [X || {X,_} <- Opt],
+ {S1,S2} = create_socketpair(Opt, Opt),
+ {ok,Opt} = inet:getopts(S1,OptTags),
+ {ok,Opt} = inet:getopts(S2,OptTags),
+ COpt = [{X,case X of nodelay -> false;_ -> Y end} || {X,Y} <- Opt],
+ inet:setopts(S1,COpt),
+ {ok,COpt} = inet:getopts(S1,OptTags),
+ {ok,Opt} = inet:getopts(S2,OptTags),
+ gen_tcp:close(S1),
+ gen_tcp:close(S2),
ok.
-loop_all(suite) -> [];
-loop_all(doc) -> "Loop through all socket options and check that they work";
+%% Loop through all socket options and check that they work.
loop_all(Config) when is_list(Config) ->
- ?line ListenFailures =
+ ListenFailures =
lists:foldr(make_check_fun(listen,1),[],all_listen_options()),
- ?line ConnectFailures =
+ ConnectFailures =
lists:foldr(make_check_fun(connect,2),[],all_connect_options()),
- ?line case ListenFailures++ConnectFailures of
- [] ->
- ?line ok;
- Failed ->
- ?line {comment,lists:flatten(
- io_lib:format("Non mandatory failed:~w",
- [Failed]))}
- end.
+ case ListenFailures++ConnectFailures of
+ [] ->
+ ok;
+ Failed ->
+ {comment,lists:flatten(
+ io_lib:format("Non mandatory failed:~w",
+ [Failed]))}
+ end.
-simple_raw(suite) -> [];
-simple_raw(doc) -> "Test simple setopt/getopt of raw options.";
+%% Test simple setopt/getopt of raw options.
simple_raw(Config) when is_list(Config) ->
do_simple_raw(Config,false).
-simple_raw_getbin(suite) -> [];
-simple_raw_getbin(doc) -> "Test simple setopt/getopt of raw options, "
- "with binaries in getopt.";
+
+%% Test simple setopt/getopt of raw options, with binaries in getopt.
simple_raw_getbin(Config) when is_list(Config) ->
do_simple_raw(Config,true).
do_simple_raw(Config,Binary) when is_list(Config) ->
- ?line Port = start_helper(Config),
- ?line SolSocket = ask_helper(Port,?C_GET_SOL_SOCKET),
- ?line SoKeepAlive = ask_helper(Port,?C_GET_SO_KEEPALIVE),
- ?line OptionTrue = {raw,SolSocket,SoKeepAlive,<<1:32/native>>},
- ?line OptionFalse = {raw,SolSocket,SoKeepAlive,<<0:32/native>>},
- ?line {S1,S2} = create_socketpair([OptionTrue],[{keepalive,true}]),
- ?line {ok,[{keepalive,true}]} = inet:getopts(S1,[keepalive]),
- ?line {ok,[{keepalive,true}]} = inet:getopts(S2,[keepalive]),
- ?line {ok,[{raw,SolSocket,SoKeepAlive,X1B}]} =
+ Port = start_helper(Config),
+ SolSocket = ask_helper(Port,?C_GET_SOL_SOCKET),
+ SoKeepAlive = ask_helper(Port,?C_GET_SO_KEEPALIVE),
+ OptionTrue = {raw,SolSocket,SoKeepAlive,<<1:32/native>>},
+ OptionFalse = {raw,SolSocket,SoKeepAlive,<<0:32/native>>},
+ {S1,S2} = create_socketpair([OptionTrue],[{keepalive,true}]),
+ {ok,[{keepalive,true}]} = inet:getopts(S1,[keepalive]),
+ {ok,[{keepalive,true}]} = inet:getopts(S2,[keepalive]),
+ {ok,[{raw,SolSocket,SoKeepAlive,X1B}]} =
inet:getopts(S1,[{raw,SolSocket,SoKeepAlive,binarify(4,Binary)}]),
- ?line X1 = nintbin2int(X1B),
- ?line {ok,[{raw,SolSocket,SoKeepAlive,X2B}]} =
+ X1 = nintbin2int(X1B),
+ {ok,[{raw,SolSocket,SoKeepAlive,X2B}]} =
inet:getopts(S2,[{raw,SolSocket,SoKeepAlive,binarify(4,Binary)}]),
- ?line X2 = nintbin2int(X2B),
- ?line true = X1 > 0,
- ?line true = X2 > 0,
- ?line inet:setopts(S1,[{keepalive,false}]),
- ?line inet:setopts(S2,[OptionFalse]),
- ?line {ok,[{keepalive,false}]} = inet:getopts(S1,[keepalive]),
- ?line {ok,[{keepalive,false}]} = inet:getopts(S2,[keepalive]),
- ?line {ok,[{raw,SolSocket,SoKeepAlive,Y1B}]} =
+ X2 = nintbin2int(X2B),
+ true = X1 > 0,
+ true = X2 > 0,
+ inet:setopts(S1,[{keepalive,false}]),
+ inet:setopts(S2,[OptionFalse]),
+ {ok,[{keepalive,false}]} = inet:getopts(S1,[keepalive]),
+ {ok,[{keepalive,false}]} = inet:getopts(S2,[keepalive]),
+ {ok,[{raw,SolSocket,SoKeepAlive,Y1B}]} =
inet:getopts(S1,[{raw,SolSocket,SoKeepAlive,binarify(4,Binary)}]),
- ?line Y1 = nintbin2int(Y1B),
- ?line {ok,[{raw,SolSocket,SoKeepAlive,Y2B}]} =
+ Y1 = nintbin2int(Y1B),
+ {ok,[{raw,SolSocket,SoKeepAlive,Y2B}]} =
inet:getopts(S2,[{raw,SolSocket,SoKeepAlive,binarify(4,Binary)}]),
- ?line Y2 = nintbin2int(Y2B),
- ?line true = Y1 == 0,
- ?line true = Y2 == 0,
- ?line gen_tcp:close(S1),
- ?line gen_tcp:close(S2),
- ?line stop_helper(Port),
+ Y2 = nintbin2int(Y2B),
+ true = Y1 == 0,
+ true = Y2 == 0,
+ gen_tcp:close(S1),
+ gen_tcp:close(S2),
+ stop_helper(Port),
ok.
-
+
nintbin2int(<<Int:32/native>>) -> Int;
nintbin2int(<<Int:24/native>>) -> Int;
nintbin2int(<<Int:16/native>>) -> Int;
@@ -189,13 +185,12 @@ nintbin2int(<<>>) -> 0.
-multiple_raw(suite) -> [];
-multiple_raw(doc) -> "Test setopt/getopt of multiple raw options.";
+%% Test setopt/getopt of multiple raw options.
multiple_raw(Config) when is_list(Config) ->
do_multiple_raw(Config,false).
-multiple_raw_getbin(suite) -> [];
-multiple_raw_getbin(doc) -> "Test setopt/getopt of multiple raw options, "
- "with binaries in getopt.";
+
+%% Test setopt/getopt of multiple raw options, with binaries in
+%% getopt.
multiple_raw_getbin(Config) when is_list(Config) ->
do_multiple_raw(Config,true).
@@ -265,145 +260,143 @@ do_multiple_raw(Config, Binary) ->
-doc_examples_raw(suite) -> [];
-doc_examples_raw(doc) -> "Test that the example code from the documentation "
- "works";
+%% Test that the example code from the documentation works.
doc_examples_raw(Config) when is_list(Config) ->
do_doc_examples_raw(Config,false).
-doc_examples_raw_getbin(suite) -> [];
-doc_examples_raw_getbin(doc) -> "Test that the example code from the "
- "documentation works when getopt uses "
- "binaries";
+
+%% Test that the example code from the documentation works when getopt
+%% uses binaries.
doc_examples_raw_getbin(Config) when is_list(Config) ->
do_doc_examples_raw(Config,true).
+
do_doc_examples_raw(Config,Binary) when is_list(Config) ->
- ?line Port = start_helper(Config),
- ?line Proto = ask_helper(Port,?C_GET_IPPROTO_TCP),
- ?line TcpInfo = ask_helper(Port,?C_GET_TCP_INFO),
- ?line TcpInfoSize = ask_helper(Port,?C_GET_TCP_INFO_SIZE),
- ?line TcpiSackedOffset = ask_helper(Port,?C_GET_OFF_TCPI_SACKED),
- ?line TcpiOptionsOffset = ask_helper(Port,?C_GET_OFF_TCPI_OPTIONS),
- ?line TcpiSackedSize = ask_helper(Port,?C_GET_SIZ_TCPI_SACKED),
- ?line TcpiOptionsSize = ask_helper(Port,?C_GET_SIZ_TCPI_OPTIONS),
- ?line TcpLinger2 = ask_helper(Port,?C_GET_TCP_LINGER2),
- ?line stop_helper(Port),
+ Port = start_helper(Config),
+ Proto = ask_helper(Port,?C_GET_IPPROTO_TCP),
+ TcpInfo = ask_helper(Port,?C_GET_TCP_INFO),
+ TcpInfoSize = ask_helper(Port,?C_GET_TCP_INFO_SIZE),
+ TcpiSackedOffset = ask_helper(Port,?C_GET_OFF_TCPI_SACKED),
+ TcpiOptionsOffset = ask_helper(Port,?C_GET_OFF_TCPI_OPTIONS),
+ TcpiSackedSize = ask_helper(Port,?C_GET_SIZ_TCPI_SACKED),
+ TcpiOptionsSize = ask_helper(Port,?C_GET_SIZ_TCPI_OPTIONS),
+ TcpLinger2 = ask_helper(Port,?C_GET_TCP_LINGER2),
+ stop_helper(Port),
case all_ok([Proto,TcpInfo,TcpInfoSize,TcpiSackedOffset,
TcpiOptionsOffset,TcpiSackedSize,TcpiOptionsSize,
TcpLinger2]) of
false ->
{skipped,"Does not run on this OS."};
true ->
- ?line {Sock,I} = create_socketpair([],[]),
- ?line {ok,[{raw,Proto,TcpLinger2,<<OrigLinger:32/native>>}]} =
+ {Sock,I} = create_socketpair([],[]),
+ {ok,[{raw,Proto,TcpLinger2,<<OrigLinger:32/native>>}]} =
inet:getopts(Sock,[{raw,Proto,TcpLinger2,binarify(4,Binary)}]),
- ?line NewLinger = OrigLinger div 2,
- ?line ok = inet:setopts(Sock,[{raw,Proto,TcpLinger2,
- <<NewLinger:32/native>>}]),
- ?line {ok,[{raw,Proto,TcpLinger2,<<NewLinger:32/native>>}]} =
+ NewLinger = OrigLinger div 2,
+ ok = inet:setopts(Sock,[{raw,Proto,TcpLinger2,
+ <<NewLinger:32/native>>}]),
+ {ok,[{raw,Proto,TcpLinger2,<<NewLinger:32/native>>}]} =
inet:getopts(Sock,[{raw,Proto,TcpLinger2,binarify(4,Binary)}]),
- ?line ok = inet:setopts(Sock,[{raw,Proto,TcpLinger2,
- <<OrigLinger:32/native>>}]),
- ?line {ok,[{raw,Proto,TcpLinger2,<<OrigLinger:32/native>>}]} =
+ ok = inet:setopts(Sock,[{raw,Proto,TcpLinger2,
+ <<OrigLinger:32/native>>}]),
+ {ok,[{raw,Proto,TcpLinger2,<<OrigLinger:32/native>>}]} =
inet:getopts(Sock,[{raw,Proto,TcpLinger2,binarify(4,Binary)}]),
- ?line {ok,[{raw,_,_,Info}]} =
+ {ok,[{raw,_,_,Info}]} =
inet:getopts(Sock,[{raw,Proto,TcpInfo,
binarify(TcpInfoSize,Binary)}]),
- ?line Bit1 = TcpiSackedSize * 8,
- ?line <<_:TcpiSackedOffset/binary,
- TcpiSacked:Bit1/native,_/binary>> =
+ Bit1 = TcpiSackedSize * 8,
+ <<_:TcpiSackedOffset/binary,
+ TcpiSacked:Bit1/native,_/binary>> =
Info,
- ?line 0 = TcpiSacked,
- ?line Bit2 = TcpiOptionsSize * 8,
- ?line <<_:TcpiOptionsOffset/binary,
- TcpiOptions:Bit2/native,_/binary>> =
+ 0 = TcpiSacked,
+ Bit2 = TcpiOptionsSize * 8,
+ <<_:TcpiOptionsOffset/binary,
+ TcpiOptions:Bit2/native,_/binary>> =
Info,
- ?line true = TcpiOptions =/= 0,
- ?line gen_tcp:close(Sock),
- ?line gen_tcp:close(I),
+ true = TcpiOptions =/= 0,
+ gen_tcp:close(Sock),
+ gen_tcp:close(I),
ok
end.
-
-large_raw(suite) -> [];
-large_raw(doc) -> "Test structs and large/too large buffers when raw";
+
+%% Test structs and large/too large buffers when raw.
large_raw(Config) when is_list(Config) ->
do_large_raw(Config,false).
-large_raw_getbin(suite) -> [];
-large_raw_getbin(doc) -> "Test structs and large/too large buffers when raw"
- "using binaries to getopts";
+
+%% Test structs and large/too large buffers when raw
+%% using binaries to getopts.
large_raw_getbin(Config) when is_list(Config) ->
do_large_raw(Config,true).
+
do_large_raw(Config,Binary) when is_list(Config) ->
- ?line Port = start_helper(Config),
- ?line Proto = ask_helper(Port,?C_GET_SOL_SOCKET),
- ?line Linger = ask_helper(Port,?C_GET_SO_LINGER),
- ?line LingerSize = ask_helper(Port,?C_GET_LINGER_SIZE),
- ?line LingerOnOffOffset = ask_helper(Port,?C_GET_OFF_LINGER_L_ONOFF),
- ?line LingerLingerOffset = ask_helper(Port,?C_GET_OFF_LINGER_L_LINGER),
- ?line LingerOnOffSize = ask_helper(Port,?C_GET_SIZ_LINGER_L_ONOFF),
- ?line LingerLingerSize = ask_helper(Port,?C_GET_SIZ_LINGER_L_LINGER),
- ?line stop_helper(Port),
+ Port = start_helper(Config),
+ Proto = ask_helper(Port,?C_GET_SOL_SOCKET),
+ Linger = ask_helper(Port,?C_GET_SO_LINGER),
+ LingerSize = ask_helper(Port,?C_GET_LINGER_SIZE),
+ LingerOnOffOffset = ask_helper(Port,?C_GET_OFF_LINGER_L_ONOFF),
+ LingerLingerOffset = ask_helper(Port,?C_GET_OFF_LINGER_L_LINGER),
+ LingerOnOffSize = ask_helper(Port,?C_GET_SIZ_LINGER_L_ONOFF),
+ LingerLingerSize = ask_helper(Port,?C_GET_SIZ_LINGER_L_LINGER),
+ stop_helper(Port),
case all_ok([Proto,Linger,LingerSize,LingerOnOffOffset,
LingerLingerOffset,LingerOnOffSize,LingerLingerSize]) of
false ->
{skipped,"Does not run on this OS."};
true ->
- ?line {Sock1,Sock2} = create_socketpair([{linger,{true,10}}],
- [{linger,{false,0}}]),
- ?line LargeSize = 1024, % Solaris can take up to 1024*9,
- % linux 1024*63...
- ?line TooLargeSize = 1024*64,
- ?line {ok,[{raw,Proto,Linger,Linger1}]} =
+ {Sock1,Sock2} = create_socketpair([{linger,{true,10}}],
+ [{linger,{false,0}}]),
+ LargeSize = 1024, % Solaris can take up to 1024*9,
+ % linux 1024*63...
+ TooLargeSize = 1024*64,
+ {ok,[{raw,Proto,Linger,Linger1}]} =
inet:getopts(Sock1,[{raw,Proto,Linger,
binarify(LargeSize,Binary)}]),
- ?line {ok,[{raw,Proto,Linger,Linger2}]} =
+ {ok,[{raw,Proto,Linger,Linger2}]} =
inet:getopts(Sock2,[{raw,Proto,Linger,
binarify(LingerSize,Binary)}]),
- ?line true = byte_size(Linger1) =:= LingerSize,
- ?line LingerLingerBits = LingerLingerSize * 8,
- ?line LingerOnOffBits = LingerOnOffSize * 8,
- ?line <<_:LingerLingerOffset/binary,
- Ling1:LingerLingerBits/native,_/binary>> = Linger1,
- ?line <<_:LingerOnOffOffset/binary,
- Off1:LingerOnOffBits/native,_/binary>> = Linger1,
- ?line <<_:LingerOnOffOffset/binary,
- Off2:LingerOnOffBits/native,_/binary>> = Linger2,
- ?line true = Off1 =/= 0,
- ?line true = Off2 == 0,
- ?line true = Ling1 == 10,
- ?line {error,einval} =
+ true = byte_size(Linger1) =:= LingerSize,
+ LingerLingerBits = LingerLingerSize * 8,
+ LingerOnOffBits = LingerOnOffSize * 8,
+ <<_:LingerLingerOffset/binary,
+ Ling1:LingerLingerBits/native,_/binary>> = Linger1,
+ <<_:LingerOnOffOffset/binary,
+ Off1:LingerOnOffBits/native,_/binary>> = Linger1,
+ <<_:LingerOnOffOffset/binary,
+ Off2:LingerOnOffBits/native,_/binary>> = Linger2,
+ true = Off1 =/= 0,
+ true = Off2 == 0,
+ true = Ling1 == 10,
+ {error,einval} =
inet:getopts(Sock1,[{raw,Proto,Linger,TooLargeSize}]),
- ?line gen_tcp:close(Sock1),
- ?line gen_tcp:close(Sock2),
+ gen_tcp:close(Sock1),
+ gen_tcp:close(Sock2),
ok
end.
-combined(suite) -> [];
-combined(doc) -> "Test raw structs combined w/ other options ";
+%% Test raw structs combined w/ other options .
combined(Config) when is_list(Config) ->
do_combined(Config,false).
-combined_getbin(suite) -> [];
-combined_getbin(doc) -> "Test raw structs combined w/ other options and "
- "binarise in getopts";
+
+%% Test raw structs combined w/ other options and
+%% binarise in getopts.
combined_getbin(Config) when is_list(Config) ->
do_combined(Config,true).
+
do_combined(Config,Binary) when is_list(Config) ->
- ?line Port = start_helper(Config),
- ?line Proto = ask_helper(Port,?C_GET_SOL_SOCKET),
- ?line Linger = ask_helper(Port,?C_GET_SO_LINGER),
- ?line LingerSize = ask_helper(Port,?C_GET_LINGER_SIZE),
- ?line LingerOnOffOffset = ask_helper(Port,?C_GET_OFF_LINGER_L_ONOFF),
- ?line LingerLingerOffset = ask_helper(Port,?C_GET_OFF_LINGER_L_LINGER),
- ?line LingerOnOffSize = ask_helper(Port,?C_GET_SIZ_LINGER_L_ONOFF),
- ?line LingerLingerSize = ask_helper(Port,?C_GET_SIZ_LINGER_L_LINGER),
- ?line stop_helper(Port),
+ Port = start_helper(Config),
+ Proto = ask_helper(Port,?C_GET_SOL_SOCKET),
+ Linger = ask_helper(Port,?C_GET_SO_LINGER),
+ LingerSize = ask_helper(Port,?C_GET_LINGER_SIZE),
+ LingerOnOffOffset = ask_helper(Port,?C_GET_OFF_LINGER_L_ONOFF),
+ LingerLingerOffset = ask_helper(Port,?C_GET_OFF_LINGER_L_LINGER),
+ LingerOnOffSize = ask_helper(Port,?C_GET_SIZ_LINGER_L_ONOFF),
+ LingerLingerSize = ask_helper(Port,?C_GET_SIZ_LINGER_L_LINGER),
+ stop_helper(Port),
case all_ok([Proto,Linger,LingerSize,LingerOnOffOffset,
LingerLingerOffset,LingerOnOffSize,LingerLingerSize]) of
false ->
{skipped,"Does not run on this OS."};
true ->
- ?line LingerLingerBits = LingerLingerSize * 8,
- ?line LingerOnOffBits = LingerOnOffSize * 8,
- ?line {LingerOn,LingerOff} =
+ LingerLingerBits = LingerLingerSize * 8,
+ LingerOnOffBits = LingerOnOffSize * 8,
+ {LingerOn,LingerOff} =
case LingerOnOffOffset < LingerLingerOffset of
true ->
Pad1 =
@@ -423,11 +416,11 @@ do_combined(Config,Binary) when is_list(Config) ->
lists:duplicate(Pad3Siz,
0)),
{<<Pad1/binary,1:LingerOnOffBits/native,
- Pad2/binary,10:LingerLingerBits/native,
- Pad3/binary>>,
+ Pad2/binary,10:LingerLingerBits/native,
+ Pad3/binary>>,
<<Pad1/binary,0:LingerOnOffBits/native,
- Pad2/binary,0:LingerLingerBits/native,
- Pad3/binary>>};
+ Pad2/binary,0:LingerLingerBits/native,
+ Pad3/binary>>};
false ->
Pad1 =
list_to_binary(
@@ -446,177 +439,174 @@ do_combined(Config,Binary) when is_list(Config) ->
lists:duplicate(Pad3Siz,
0)),
{<<Pad1/binary,1:LingerLingerBits/native,
- Pad2/binary,10:LingerOnOffBits/native,
- Pad3/binary>>,
+ Pad2/binary,10:LingerOnOffBits/native,
+ Pad3/binary>>,
<<Pad1/binary,0:LingerLingerBits/native,
- Pad2/binary,0:LingerOnOffBits/native,
- Pad3/binary>>}
+ Pad2/binary,0:LingerOnOffBits/native,
+ Pad3/binary>>}
end,
- ?line RawLingerOn = {raw,Proto,Linger,LingerOn},
- ?line RawLingerOff = {raw,Proto,Linger,LingerOff},
- ?line {Sock1,Sock2} =
+ RawLingerOn = {raw,Proto,Linger,LingerOn},
+ RawLingerOff = {raw,Proto,Linger,LingerOff},
+ {Sock1,Sock2} =
create_socketpair([{keepalive,true},
RawLingerOn],
[{keepalive,false},
RawLingerOff]),
- ?line {ok,[{raw,Proto,Linger,Linger1},{keepalive,Keep1}]} =
+ {ok,[{raw,Proto,Linger,Linger1},{keepalive,Keep1}]} =
inet:getopts(Sock1,[{raw,Proto,Linger,
binarify(LingerSize,Binary)},keepalive]),
- ?line {ok,[{raw,Proto,Linger,Linger2},{keepalive,Keep2}]} =
+ {ok,[{raw,Proto,Linger,Linger2},{keepalive,Keep2}]} =
inet:getopts(Sock2,[{raw,Proto,Linger,
binarify(LingerSize,Binary)},keepalive]),
- ?line true = byte_size(Linger1) =:= LingerSize,
- ?line <<_:LingerLingerOffset/binary,
- Ling1:LingerLingerBits/native,_/binary>> = Linger1,
- ?line <<_:LingerOnOffOffset/binary,
- Off1:LingerOnOffBits/native,_/binary>> = Linger1,
- ?line <<_:LingerOnOffOffset/binary,
- Off2:LingerOnOffBits/native,_/binary>> = Linger2,
- ?line true = Off1 =/= 0,
- ?line true = Off2 == 0,
- ?line true = Ling1 == 10,
- ?line true = Keep1 =:= true,
- ?line true = Keep2 =:= false,
- ?line {Sock3,Sock4} =
+ true = byte_size(Linger1) =:= LingerSize,
+ <<_:LingerLingerOffset/binary,
+ Ling1:LingerLingerBits/native,_/binary>> = Linger1,
+ <<_:LingerOnOffOffset/binary,
+ Off1:LingerOnOffBits/native,_/binary>> = Linger1,
+ <<_:LingerOnOffOffset/binary,
+ Off2:LingerOnOffBits/native,_/binary>> = Linger2,
+ true = Off1 =/= 0,
+ true = Off2 == 0,
+ true = Ling1 == 10,
+ true = Keep1 =:= true,
+ true = Keep2 =:= false,
+ {Sock3,Sock4} =
create_socketpair([RawLingerOn,{keepalive,true}],
[RawLingerOff,{keepalive,false}]),
- ?line {ok,[{raw,Proto,Linger,Linger3},{keepalive,Keep3}]} =
+ {ok,[{raw,Proto,Linger,Linger3},{keepalive,Keep3}]} =
inet:getopts(Sock3,[{raw,Proto,Linger,
binarify(LingerSize,Binary)},keepalive]),
- ?line {ok,[{raw,Proto,Linger,Linger4},{keepalive,Keep4}]} =
+ {ok,[{raw,Proto,Linger,Linger4},{keepalive,Keep4}]} =
inet:getopts(Sock4,[{raw,Proto,Linger,
binarify(LingerSize,Binary)},keepalive]),
- ?line true = byte_size(Linger3) =:= LingerSize,
- ?line <<_:LingerLingerOffset/binary,
- Ling3:LingerLingerBits/native,_/binary>> = Linger3,
- ?line <<_:LingerOnOffOffset/binary,
- Off3:LingerOnOffBits/native,_/binary>> = Linger3,
- ?line <<_:LingerOnOffOffset/binary,
- Off4:LingerOnOffBits/native,_/binary>> = Linger4,
- ?line true = Off3 =/= 0,
- ?line true = Off4 == 0,
- ?line true = Ling3 == 10,
- ?line true = Keep3 =:= true,
- ?line true = Keep4 =:= false,
- ?line {Sock5,Sock6} =
+ true = byte_size(Linger3) =:= LingerSize,
+ <<_:LingerLingerOffset/binary,
+ Ling3:LingerLingerBits/native,_/binary>> = Linger3,
+ <<_:LingerOnOffOffset/binary,
+ Off3:LingerOnOffBits/native,_/binary>> = Linger3,
+ <<_:LingerOnOffOffset/binary,
+ Off4:LingerOnOffBits/native,_/binary>> = Linger4,
+ true = Off3 =/= 0,
+ true = Off4 == 0,
+ true = Ling3 == 10,
+ true = Keep3 =:= true,
+ true = Keep4 =:= false,
+ {Sock5,Sock6} =
create_socketpair([{packet,4},RawLingerOn,{keepalive,true}],
[{packet,2},RawLingerOff,{keepalive,false}]),
- ?line {ok,[{packet,Pack5},{raw,Proto,Linger,Linger5},
- {keepalive,Keep5}]} =
+ {ok,[{packet,Pack5},{raw,Proto,Linger,Linger5},
+ {keepalive,Keep5}]} =
inet:getopts(Sock5,[packet,{raw,Proto,Linger,
binarify(LingerSize,Binary)},
keepalive]),
- ?line {ok,[{packet,Pack6},{raw,Proto,Linger,Linger6},
- {keepalive,Keep6}]} =
+ {ok,[{packet,Pack6},{raw,Proto,Linger,Linger6},
+ {keepalive,Keep6}]} =
inet:getopts(Sock6,[packet,{raw,Proto,Linger,
binarify(LingerSize,Binary)},
keepalive]),
- ?line true = byte_size(Linger5) =:= LingerSize,
- ?line <<_:LingerLingerOffset/binary,
- Ling5:LingerLingerBits/native,_/binary>> = Linger5,
- ?line <<_:LingerOnOffOffset/binary,
- Off5:LingerOnOffBits/native,_/binary>> = Linger5,
- ?line <<_:LingerOnOffOffset/binary,
- Off6:LingerOnOffBits/native,_/binary>> = Linger6,
- ?line true = Off5 =/= 0,
- ?line true = Off6 == 0,
- ?line true = Ling5 == 10,
- ?line true = Keep5 =:= true,
- ?line true = Keep6 =:= false,
- ?line true = Pack5 =:= 4,
- ?line true = Pack6 =:= 2,
- ?line inet:setopts(Sock6,[{packet,4},RawLingerOn,
- {keepalive,true}]),
- ?line {ok,[{packet,Pack7},{raw,Proto,Linger,Linger7},
- {keepalive,Keep7}]} =
+ true = byte_size(Linger5) =:= LingerSize,
+ <<_:LingerLingerOffset/binary,
+ Ling5:LingerLingerBits/native,_/binary>> = Linger5,
+ <<_:LingerOnOffOffset/binary,
+ Off5:LingerOnOffBits/native,_/binary>> = Linger5,
+ <<_:LingerOnOffOffset/binary,
+ Off6:LingerOnOffBits/native,_/binary>> = Linger6,
+ true = Off5 =/= 0,
+ true = Off6 == 0,
+ true = Ling5 == 10,
+ true = Keep5 =:= true,
+ true = Keep6 =:= false,
+ true = Pack5 =:= 4,
+ true = Pack6 =:= 2,
+ inet:setopts(Sock6,[{packet,4},RawLingerOn,
+ {keepalive,true}]),
+ {ok,[{packet,Pack7},{raw,Proto,Linger,Linger7},
+ {keepalive,Keep7}]} =
inet:getopts(Sock6,[packet,{raw,Proto,Linger,
binarify(LingerSize,Binary)},
keepalive]),
- ?line <<_:LingerOnOffOffset/binary,
- Off7:LingerOnOffBits/native,_/binary>> = Linger7,
- ?line true = Off7 =/= 0,
- ?line true = Keep7 =:= true,
- ?line true = Pack7 =:= 4,
- ?line gen_tcp:close(Sock1),
- ?line gen_tcp:close(Sock2),
- ?line gen_tcp:close(Sock3),
- ?line gen_tcp:close(Sock4),
- ?line gen_tcp:close(Sock5),
- ?line gen_tcp:close(Sock6),
+ <<_:LingerOnOffOffset/binary,
+ Off7:LingerOnOffBits/native,_/binary>> = Linger7,
+ true = Off7 =/= 0,
+ true = Keep7 =:= true,
+ true = Pack7 =:= 4,
+ gen_tcp:close(Sock1),
+ gen_tcp:close(Sock2),
+ gen_tcp:close(Sock3),
+ gen_tcp:close(Sock4),
+ gen_tcp:close(Sock5),
+ gen_tcp:close(Sock6),
ok
end.
-ipv6_v6only_udp(suite) -> [];
-ipv6_v6only_udp(doc) -> "Test socket option ipv6_v6only for UDP";
+%% Test socket option ipv6_v6only for UDP.
ipv6_v6only_udp(Config) when is_list(Config) ->
ipv6_v6only(Config, gen_udp).
-ipv6_v6only_tcp(suite) -> [];
-ipv6_v6only_tcp(doc) -> "Test socket option ipv6_v6only for TCP";
+%% Test socket option ipv6_v6only for TCP.
ipv6_v6only_tcp(Config) when is_list(Config) ->
ipv6_v6only(Config, gen_tcp).
-ipv6_v6only_sctp(suite) -> [];
-ipv6_v6only_sctp(doc) -> "Test socket option ipv6_v6only for SCTP";
+%% Test socket option ipv6_v6only for SCTP.
ipv6_v6only_sctp(Config) when is_list(Config) ->
ipv6_v6only(Config, gen_sctp).
ipv6_v6only(Config, Module) when is_list(Config) ->
- ?line case ipv6_v6only_open(Module, []) of
- {ok,S1} ->
- ?line case inet:getopts(S1, [ipv6_v6only]) of
- {ok,[{ipv6_v6only,Default}]}
- when is_boolean(Default) ->
- ?line ok =
- ipv6_v6only_close(Module, S1),
- ?line ipv6_v6only(Config, Module, Default);
- {ok,[]} ->
- ?line io:format("Not implemented.~n", []),
- %% This list of OS:es where the option is
- %% supposed to be not implemented is just
- %% a guess, and may grow with time.
- ?line case {os:type(),os:version()} of
- {{unix,linux},{2,M,_}}
- when M =< 4 -> ok
- end,
- %% At least this should work
- ?line {ok,S2} =
- ipv6_v6only_open(
- Module,
- [{ipv6_v6only,true}]),
- ?line ok =
- ipv6_v6only_close(Module, S2)
- end;
- {error,_} ->
- {skipped,"Socket type not supported"}
- end.
+ case ipv6_v6only_open(Module, []) of
+ {ok,S1} ->
+ case inet:getopts(S1, [ipv6_v6only]) of
+ {ok,[{ipv6_v6only,Default}]}
+ when is_boolean(Default) ->
+ ok =
+ ipv6_v6only_close(Module, S1),
+ ipv6_v6only(Config, Module, Default);
+ {ok,[]} ->
+ io:format("Not implemented.~n", []),
+ %% This list of OS:es where the option is
+ %% supposed to be not implemented is just
+ %% a guess, and may grow with time.
+ case {os:type(),os:version()} of
+ {{unix,linux},{2,M,_}}
+ when M =< 4 -> ok
+ end,
+ %% At least this should work
+ {ok,S2} =
+ ipv6_v6only_open(
+ Module,
+ [{ipv6_v6only,true}]),
+ ok =
+ ipv6_v6only_close(Module, S2)
+ end;
+ {error,_} ->
+ {skipped,"Socket type not supported"}
+ end.
ipv6_v6only(Config, Module, Default) when is_list(Config) ->
- ?line io:format("Default ~w.~n", [Default]),
- ?line {ok,S1} =
+ io:format("Default ~w.~n", [Default]),
+ {ok,S1} =
ipv6_v6only_open(Module, [{ipv6_v6only,Default}]),
- ?line {ok,[{ipv6_v6only,Default}]} =
+ {ok,[{ipv6_v6only,Default}]} =
inet:getopts(S1, [ipv6_v6only]),
- ?line ok =
+ ok =
ipv6_v6only_close(Module, S1),
- ?line NotDefault = not Default,
- ?line case ipv6_v6only_open(Module, [{ipv6_v6only,NotDefault}]) of
- {ok,S2} ->
- ?line io:format("Read-write.~n", []),
- ?line {ok,[{ipv6_v6only,NotDefault}]} =
- inet:getopts(S2, [ipv6_v6only]),
- ok;
- {error,einval} ->
- ?line io:format("Read-only.~n", []),
- %% This option is known to be read-only and true
- %% on Windows and OpenBSD
- ?line case os:type() of
- {unix,openbsd} when Default =:= true -> ok;
- {win32,_} when Default =:= true -> ok
- end
- end.
+ NotDefault = not Default,
+ case ipv6_v6only_open(Module, [{ipv6_v6only,NotDefault}]) of
+ {ok,S2} ->
+ io:format("Read-write.~n", []),
+ {ok,[{ipv6_v6only,NotDefault}]} =
+ inet:getopts(S2, [ipv6_v6only]),
+ ok;
+ {error,einval} ->
+ io:format("Read-only.~n", []),
+ %% This option is known to be read-only and true
+ %% on Windows and OpenBSD
+ case os:type() of
+ {unix,openbsd} when Default =:= true -> ok;
+ {win32,_} when Default =:= true -> ok
+ end
+ end.
ipv6_v6only_open(Module, Opts) ->
Module:case Module of
@@ -628,47 +618,46 @@ ipv6_v6only_close(Module, Socket) ->
Module:close(Socket).
-use_ipv6_v6only_udp(suite) -> [];
-use_ipv6_v6only_udp(doc) -> "Test using socket option ipv6_v6only for UDP";
+%% Test using socket option ipv6_v6only for UDP.
use_ipv6_v6only_udp(Config) when is_list(Config) ->
- ?line case gen_udp:open(0, [inet6,{ipv6_v6only,true}]) of
- {ok,S6} ->
- ?line case inet:getopts(S6, [ipv6_v6only]) of
- {ok,[{ipv6_v6only,true}]} ->
- use_ipv6_v6only_udp(Config, S6);
- {ok,Other} ->
- {skipped,{getopts,Other}}
- end;
- {error,_} ->
- {skipped,"Socket type not supported"}
- end.
+ case gen_udp:open(0, [inet6,{ipv6_v6only,true}]) of
+ {ok,S6} ->
+ case inet:getopts(S6, [ipv6_v6only]) of
+ {ok,[{ipv6_v6only,true}]} ->
+ use_ipv6_v6only_udp(Config, S6);
+ {ok,Other} ->
+ {skipped,{getopts,Other}}
+ end;
+ {error,_} ->
+ {skipped,"Socket type not supported"}
+ end.
use_ipv6_v6only_udp(_Config, S6) ->
- ?line {ok,Port} = inet:port(S6),
- ?line {ok,S4} = gen_udp:open(Port, [inet]),
- ?line E6 = " IPv6-echo.",
- ?line E4 = " IPv4-echo.",
- ?line Sender =
+ {ok,Port} = inet:port(S6),
+ {ok,S4} = gen_udp:open(Port, [inet]),
+ E6 = " IPv6-echo.",
+ E4 = " IPv4-echo.",
+ Sender =
spawn_link(fun () -> use_ipv6_v6only_udp_sender(Port, E6, E4) end),
- ?line use_ipv6_v6only_udp_listener(
- S6, S4, E6, E4, monitor(process, Sender)).
+ use_ipv6_v6only_udp_listener(
+ S6, S4, E6, E4, monitor(process, Sender)).
use_ipv6_v6only_udp_listener(S6, S4, E6, E4, Mref) ->
- ?line receive
- {udp,S6,IP,P,Data} ->
- ?line ok = gen_udp:send(S6, IP, P, [Data|E6]),
- ?line use_ipv6_v6only_udp_listener(S6, S4, E6, E4, Mref);
- {udp,S4,IP,P,Data} ->
- ?line ok = gen_udp:send(S4, IP, P, [Data|E4]),
- ?line use_ipv6_v6only_udp_listener(S6, S4, E6, E4, Mref);
- {'DOWN',Mref,_,_,normal} ->
- ok;
- {'DOWN',Mref,_,_,Result} ->
- %% Since we are linked we will never arrive here
- Result;
- Other ->
- ?line exit({failed,{listener_unexpected,Other}})
- end.
+ receive
+ {udp,S6,IP,P,Data} ->
+ ok = gen_udp:send(S6, IP, P, [Data|E6]),
+ use_ipv6_v6only_udp_listener(S6, S4, E6, E4, Mref);
+ {udp,S4,IP,P,Data} ->
+ ok = gen_udp:send(S4, IP, P, [Data|E4]),
+ use_ipv6_v6only_udp_listener(S6, S4, E6, E4, Mref);
+ {'DOWN',Mref,_,_,normal} ->
+ ok;
+ {'DOWN',Mref,_,_,Result} ->
+ %% Since we are linked we will never arrive here
+ Result;
+ Other ->
+ exit({failed,{listener_unexpected,Other}})
+ end.
use_ipv6_v6only_udp_sender(Port, E6, E4) ->
D6 = "IPv6-send.",
@@ -693,12 +682,9 @@ sndrcv(Ip, Port, Opts, Data) ->
-type_errors(suite) ->
- [];
-type_errors(doc) ->
- "Test that raw data requests are not executed for bad types";
+%% Test that raw data requests are not executed for bad types.
type_errors(Config) when is_list(Config) ->
- ?line BadSetOptions =
+ BadSetOptions =
[
{raw,x,3,<<1:32>>},
{raw,1,tre,<<1:32>>},
@@ -716,7 +702,7 @@ type_errors(Config) when is_list(Config) ->
rav,
{linger,banan}
],
- ?line BadGetOptions =
+ BadGetOptions =
[
{raw,x,3,<<1:32>>},
{raw,1,tre,<<1:32>>},
@@ -735,46 +721,46 @@ type_errors(Config) when is_list(Config) ->
rav,
{linger,banan}
],
- ?line lists:foreach(fun(Option) ->
- ?line case
- catch create_socketpair([Option],[]) of
- {'EXIT',badarg} ->
- ?line ok;
- Unexpected1 ->
- ?line exit({unexpected,
- Unexpected1})
- end,
- ?line case
- catch create_socketpair([],[Option]) of
- {'EXIT',badarg} ->
- ?line ok;
- Unexpected2 ->
- ?line exit({unexpected,
- Unexpected2})
- end,
- ?line {Sock1,Sock2} = create_socketpair([],[]),
- ?line case inet:setopts(Sock1, [Option]) of
- {error,einval} ->
- ?line ok;
- Unexpected3 ->
- ?line exit({unexpected,
- Unexpected3})
- end,
- ?line gen_tcp:close(Sock1),
- ?line gen_tcp:close(Sock2)
- end,BadSetOptions),
- ?line {Sock1,Sock2} = create_socketpair([],[]),
- ?line lists:foreach(fun(Option) ->
- ?line case inet:getopts(Sock1, [Option]) of
- {error,einval} ->
- ?line ok;
- Unexpected ->
- ?line exit({unexpected,
- Unexpected})
- end
- end,BadGetOptions),
- ?line gen_tcp:close(Sock1),
- ?line gen_tcp:close(Sock2),
+ lists:foreach(fun(Option) ->
+ case
+ catch create_socketpair([Option],[]) of
+ {'EXIT',badarg} ->
+ ok;
+ Unexpected1 ->
+ exit({unexpected,
+ Unexpected1})
+ end,
+ case
+ catch create_socketpair([],[Option]) of
+ {'EXIT',badarg} ->
+ ok;
+ Unexpected2 ->
+ exit({unexpected,
+ Unexpected2})
+ end,
+ {Sock1,Sock2} = create_socketpair([],[]),
+ case inet:setopts(Sock1, [Option]) of
+ {error,einval} ->
+ ok;
+ Unexpected3 ->
+ exit({unexpected,
+ Unexpected3})
+ end,
+ gen_tcp:close(Sock1),
+ gen_tcp:close(Sock2)
+ end,BadSetOptions),
+ {Sock1,Sock2} = create_socketpair([],[]),
+ lists:foreach(fun(Option) ->
+ case inet:getopts(Sock1, [Option]) of
+ {error,einval} ->
+ ok;
+ Unexpected ->
+ exit({unexpected,
+ Unexpected})
+ end
+ end,BadGetOptions),
+ gen_tcp:close(Sock1),
+ gen_tcp:close(Sock2),
ok.
all_ok([]) ->
@@ -784,59 +770,59 @@ all_ok([H|T]) when H >= 0 ->
all_ok(_) ->
false.
-
+
make_check_fun(Type,Element) ->
fun({Name,V1,V2,Mand,Chang},Acc) ->
- ?line {LO1,CO1} = setelement(Element,{[],[]}, [{Name,V1}]),
- ?line {LO2,CO2} = setelement(Element,{[],[]}, [{Name,V2}]),
- ?line {X1,Y1} = create_socketpair(LO1,CO1),
- ?line {X2,Y2} = create_socketpair(LO2,CO2),
- ?line S1 = element(Element,{X1,Y1}),
- ?line S2 = element(Element,{X2,Y2}),
- ?line {ok,[{Name,R1}]} = inet:getopts(S1,[Name]),
- ?line {ok,[{Name,R2}]} = inet:getopts(S2,[Name]),
+ {LO1,CO1} = setelement(Element,{[],[]}, [{Name,V1}]),
+ {LO2,CO2} = setelement(Element,{[],[]}, [{Name,V2}]),
+ {X1,Y1} = create_socketpair(LO1,CO1),
+ {X2,Y2} = create_socketpair(LO2,CO2),
+ S1 = element(Element,{X1,Y1}),
+ S2 = element(Element,{X2,Y2}),
+ {ok,[{Name,R1}]} = inet:getopts(S1,[Name]),
+ {ok,[{Name,R2}]} = inet:getopts(S2,[Name]),
NewAcc =
case R1 =/= R2 of
true ->
case Chang of
true ->
- ?line inet:setopts(S1,[{Name,V2}]),
- ?line {ok,[{Name,R3}]} =
+ inet:setopts(S1,[{Name,V2}]),
+ {ok,[{Name,R3}]} =
inet:getopts(S1,[Name]),
case {R3 =/= R1, R3 =:= R2} of
{true,true} ->
- ?line Acc;
+ Acc;
_ ->
case Mand of
true ->
- ?line exit
- ({failed_sockopt,
- {change,
- Name}});
+ exit
+ ({failed_sockopt,
+ {change,
+ Name}});
false ->
- ?line [{change,Name}|Acc]
+ [{change,Name}|Acc]
end
end;
false ->
- ?line Acc
+ Acc
end;
false ->
case Mand of
true ->
- ?line exit({failed_sockopt,
- {Type,Name}});
+ exit({failed_sockopt,
+ {Type,Name}});
false ->
- ?line [{Type,Name}|Acc]
+ [{Type,Name}|Acc]
end
end,
- ?line gen_tcp:close(X1),
- ?line gen_tcp:close(Y1),
- ?line gen_tcp:close(X2),
- ?line gen_tcp:close(Y2),
+ gen_tcp:close(X1),
+ gen_tcp:close(Y1),
+ gen_tcp:close(X2),
+ gen_tcp:close(Y2),
NewAcc
- end.
+ end.
-% {OptionName,Value1,Value2,Mandatory,Changeable}
+%% {OptionName,Value1,Value2,Mandatory,Changeable}
all_listen_options() ->
[{tos,0,1,false,true},
{priority,0,1,false,true},
@@ -887,19 +873,19 @@ all_connect_options() ->
{delay_send,false,true,true,true},
{packet_size,0,4,true,true}
].
-
+
create_socketpair(ListenOptions,ConnectOptions) ->
- ?line {ok,LS}=gen_tcp:listen(0,ListenOptions),
- ?line {ok,Port}=inet:port(LS),
- ?line {ok,CS}=gen_tcp:connect(localhost,Port,ConnectOptions),
- ?line {ok,AS}=gen_tcp:accept(LS),
- ?line gen_tcp:close(LS),
+ {ok,LS}=gen_tcp:listen(0,ListenOptions),
+ {ok,Port}=inet:port(LS),
+ {ok,CS}=gen_tcp:connect(localhost,Port,ConnectOptions),
+ {ok,AS}=gen_tcp:accept(LS),
+ gen_tcp:close(LS),
{AS,CS}.
start_helper(Config) ->
- Progname = filename:join(?config(data_dir, Config), "sockopt_helper"),
+ Progname = filename:join(proplists:get_value(data_dir, Config), "sockopt_helper"),
Port = open_port({spawn,Progname},[eof,line]),
Port.
diff --git a/lib/kernel/test/init_SUITE.erl b/lib/kernel/test/init_SUITE.erl
index 54ab5aa566..1370e23195 100644
--- a/lib/kernel/test/init_SUITE.erl
+++ b/lib/kernel/test/init_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,15 +19,15 @@
%%
-module(init_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
-export([get_arguments/1, get_argument/1, boot_var/1, restart/1,
- many_restarts/1,
+ many_restarts/0, many_restarts/1,
get_plain_arguments/1,
- reboot/1, stop/1, get_status/1, script_id/1]).
+ reboot/1, stop_status/1, stop/1, get_status/1, script_id/1]).
-export([boot1/1, boot2/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -41,12 +41,14 @@
%% Should be started in a CC view with:
%% erl -sname master -rsh ctrsh
%%-----------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[get_arguments, get_argument, boot_var,
many_restarts,
- get_plain_arguments, restart, get_status, script_id,
+ get_plain_arguments, restart, stop_status, get_status, script_id,
{group, boot}].
groups() ->
@@ -65,46 +67,35 @@ end_per_group(_GroupName, Config) ->
Config.
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:seconds(?DEFAULT_TIMEOUT_SEC)),
- [{watchdog, Dog}|Config].
+init_per_testcase(Func, Config) ->
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
+end_per_testcase(_Func, _Config) ->
+ ok.
-init(doc) -> [];
-init(suite) -> [];
init(Config) when is_list(Config) ->
Config.
-fini(doc) -> [];
-fini(suite) -> [];
fini(Config) when is_list(Config) ->
Host = list_to_atom(from($@, atom_to_list(node()))),
Node = list_to_atom(lists:concat([init_test, "@", Host])),
stop_node(Node),
Config.
-get_arguments(doc) ->[];
-get_arguments(suite) -> {req, [distribution, {local_slave_nodes, 1}]};
get_arguments(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(10)),
-
Args = args(),
- ?line {ok, Node} = start_node(init_test, Args),
- ?line case rpc:call(Node, init, get_arguments, []) of
- Arguments when is_list(Arguments) ->
- stop_node(Node),
- check_a(Arguments),
- check_b(Arguments),
- check_c(Arguments),
- check_d(Arguments);
- _ ->
- stop_node(Node),
- ?t:fail(get_arguments)
- end,
- ?line ?t:timetrap_cancel(Dog),
+ {ok, Node} = start_node(init_test, Args),
+ case rpc:call(Node, init, get_arguments, []) of
+ Arguments when is_list(Arguments) ->
+ stop_node(Node),
+ check_a(Arguments),
+ check_b(Arguments),
+ check_c(Arguments),
+ check_d(Arguments);
+ _ ->
+ stop_node(Node),
+ ct:fail(get_arguments)
+ end,
ok.
check_a(Args) ->
@@ -115,10 +106,10 @@ check_a(Args) ->
false ->
ok;
_ ->
- ?t:fail(check_a1)
+ ct:fail(check_a1)
end;
_ ->
- ?t:fail(check_a2)
+ ct:fail(check_a2)
end.
check_b(Args) ->
@@ -132,13 +123,13 @@ check_b(Args) ->
false ->
ok;
_ ->
- ?t:fail(check_b1)
+ ct:fail(check_b1)
end;
_ ->
- ?t:fail(check_b2)
+ ct:fail(check_b2)
end;
_ ->
- ?t:fail(check_b3)
+ ct:fail(check_b3)
end.
check_c(Args) ->
@@ -152,13 +143,13 @@ check_c(Args) ->
false ->
ok;
_ ->
- ?t:fail(check_c1)
+ ct:fail(check_c1)
end;
_ ->
- ?t:fail(check_c2)
+ ct:fail(check_c2)
end;
_ ->
- ?t:fail(check_c3)
+ ct:fail(check_c3)
end.
check_d(Args) ->
@@ -169,62 +160,54 @@ check_d(Args) ->
false ->
ok;
_ ->
- ?t:fail(check_d1)
+ ct:fail(check_d1)
end;
_ ->
- ?t:fail(check_d2)
+ ct:fail(check_d2)
end.
-get_argument(doc) ->[];
-get_argument(suite) -> {req, [distribution, {local_slave_nodes, 1}]};
get_argument(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(10)),
-
Args = args(),
- ?line {ok, Node} = start_node(init_test, Args),
- ?line case rpc:call(Node, init, get_argument, [b]) of
- {ok, [["hej", "hopp"],["san", "sa"]]} ->
- ok;
- _ ->
- stop_node(Node),
- ?t:fail({get_argument, b})
- end,
- ?line case rpc:call(Node, init, get_argument, [a]) of
- {ok, [["kalle"]]} ->
- ok;
- _ ->
- stop_node(Node),
- ?t:fail({get_argument, a})
- end,
- ?line case rpc:call(Node, init, get_argument, [c]) of
- {ok, [["4", "5", "6"], ["7", "8", "9"]]} ->
- ok;
- _ ->
- stop_node(Node),
- ?t:fail({get_argument, c})
- end,
- ?line case rpc:call(Node, init, get_argument, [d]) of
- {ok, [[]]} ->
- ok;
- _ ->
- stop_node(Node),
- ?t:fail({get_argument, d})
- end,
- ?line case rpc:call(Node, init, get_argument, [e]) of
- error ->
- ok;
- _ ->
- stop_node(Node),
- ?t:fail({get_argument, e})
- end,
+ {ok, Node} = start_node(init_test, Args),
+ case rpc:call(Node, init, get_argument, [b]) of
+ {ok, [["hej", "hopp"],["san", "sa"]]} ->
+ ok;
+ _ ->
+ stop_node(Node),
+ ct:fail({get_argument, b})
+ end,
+ case rpc:call(Node, init, get_argument, [a]) of
+ {ok, [["kalle"]]} ->
+ ok;
+ _ ->
+ stop_node(Node),
+ ct:fail({get_argument, a})
+ end,
+ case rpc:call(Node, init, get_argument, [c]) of
+ {ok, [["4", "5", "6"], ["7", "8", "9"]]} ->
+ ok;
+ _ ->
+ stop_node(Node),
+ ct:fail({get_argument, c})
+ end,
+ case rpc:call(Node, init, get_argument, [d]) of
+ {ok, [[]]} ->
+ ok;
+ _ ->
+ stop_node(Node),
+ ct:fail({get_argument, d})
+ end,
+ case rpc:call(Node, init, get_argument, [e]) of
+ error ->
+ ok;
+ _ ->
+ stop_node(Node),
+ ct:fail({get_argument, e})
+ end,
stop_node(Node),
- ?line ?t:timetrap_cancel(Dog),
ok.
-get_plain_arguments(doc) ->[];
-get_plain_arguments(suite) -> {req, [distribution, {local_slave_nodes, 1}]};
get_plain_arguments(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(10)),
Longstring =
"fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2"
"fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2"
@@ -235,18 +218,17 @@ get_plain_arguments(Config) when is_list(Config) ->
"fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2"
"fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2"
"fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2fjdkfjdkfjfdaa2",
- ?line true = (length(Longstring) > 255),
+ true = (length(Longstring) > 255),
Args = long_args(Longstring),
- ?line {ok, Node} = start_node(init_test, Args),
- ?line case rpc:call(Node, init, get_plain_arguments, []) of
- ["a", "b", "c", Longstring] ->
- ok;
- As ->
- stop_node(Node),
- ?t:fail({get_argument, As})
- end,
+ {ok, Node} = start_node(init_test, Args),
+ case rpc:call(Node, init, get_plain_arguments, []) of
+ ["a", "b", "c", Longstring] ->
+ ok;
+ As ->
+ stop_node(Node),
+ ct:fail({get_argument, As})
+ end,
stop_node(Node),
- ?line ?t:timetrap_cancel(Dog),
ok.
@@ -254,199 +236,183 @@ get_plain_arguments(Config) when is_list(Config) ->
%% ------------------------------------------------
%% Use -boot_var flag to set $TEST_VAR in boot script.
%% ------------------------------------------------
-boot_var(doc) -> [];
-boot_var(suite) -> {req, [distribution, {local_slave_nodes, 1}]};
boot_var(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(100)),
-
{BootScript, TEST_VAR, KernelVsn, StdlibVsn} = create_boot(Config),
%% Should fail as we have not given -boot_var TEST_VAR
- ?line {error, timeout} =
- start_node(init_test, "-boot " ++ BootScript),
+ {error, timeout} =
+ start_node(init_test, "-boot " ++ BootScript),
case is_real_system(KernelVsn, StdlibVsn) of
true ->
%% Now it should work !!
- ?line {ok, Node} =
- start_node(init_test,
- "-boot " ++ BootScript ++
- " -boot_var TEST_VAR " ++ TEST_VAR),
+ {ok, Node} =
+ start_node(init_test,
+ "-boot " ++ BootScript ++
+ " -boot_var TEST_VAR \"" ++
+ TEST_VAR ++ "\""),
stop_node(Node),
Res = ok;
_ ->
%% What we need is not so much version numbers on the directories, but
%% for the boot var TEST_VAR to appear in the boot script, and it doesn't
%% if we give the 'local' option to systools:make_script.
- ?t:format(
- "Test case not complete as we are not~n"
- "running in a real system!~n"
- "Probably this test is performed in a "
- "clearcase view or source tree.~n"
- "Need version numbers on the kernel and "
- "stdlib directories!~n",
- []),
+ io:format(
+ "Test case not complete as we are not~n"
+ "running in a real system!~n"
+ "Probably this test is performed in a "
+ "clearcase view or source tree.~n"
+ "Need version numbers on the kernel and "
+ "stdlib directories!~n",
+ []),
Res = {skip,
- "Test case only partially run since it is run "
- "in a clearcase view or in a source tree. "
- "Need an installed system to complete this test."}
+ "Test case only partially run since it is run "
+ "in a clearcase view or in a source tree. "
+ "Need an installed system to complete this test."}
end,
- ?line ?t:timetrap_cancel(Dog),
Res.
create_boot(Config) ->
- ?line {ok, OldDir} = file:get_cwd(),
- ?line {LatestDir, LatestName, KernelVsn, StdlibVsn} =
+ {ok, OldDir} = file:get_cwd(),
+ {LatestDir, LatestName, KernelVsn, StdlibVsn} =
create_script(Config),
LibDir = code:lib_dir(),
- ?line ok = file:set_cwd(LatestDir),
- ?line ok = systools:make_script(LatestName,
- [{variables, [{"TEST_VAR", LibDir}]}]),
- ?line ok = file:set_cwd(OldDir),
+ ok = file:set_cwd(LatestDir),
+ ok = systools:make_script(LatestName,
+ [{variables, [{"TEST_VAR", LibDir}]}]),
+ ok = file:set_cwd(OldDir),
{LatestDir ++ "/" ++ LatestName, LibDir, KernelVsn, StdlibVsn}.
is_real_system(KernelVsn, StdlibVsn) ->
LibDir = code:lib_dir(),
- filelib:is_dir(filename:join(LibDir, "kernel"++KernelVsn)) andalso
- filelib:is_dir(filename:join(LibDir, "stdlib"++StdlibVsn)).
-
+ filelib:is_dir(filename:join(LibDir, "kernel-"++KernelVsn)) andalso
+ filelib:is_dir(filename:join(LibDir, "stdlib-"++StdlibVsn)).
+
%% ------------------------------------------------
%% Slave executes erlang:halt() on master nodedown.
%% Therefore the slave process must be killed
%% before restart.
%% ------------------------------------------------
-many_restarts(doc) -> [];
-many_restarts(suite) ->
- case ?t:os_type() of
- {Fam, _} when Fam == unix; Fam == win32 ->
- {req, [distribution, {local_slave_nodes, 1}, {time, 5}]};
- _ ->
- {skip, "Only run on unix and win32"}
- end;
+many_restarts() ->
+ [{timetrap,{minutes,8}}].
many_restarts(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(480)),
- ?line {ok, Node} = loose_node:start(init_test, "", ?DEFAULT_TIMEOUT_SEC),
- ?line loop_restart(30,Node,rpc:call(Node,erlang,whereis,[error_logger])),
- ?line loose_node:stop(Node),
- ?line ?t:timetrap_cancel(Dog),
+ {ok, Node} = loose_node:start(init_test, "", ?DEFAULT_TIMEOUT_SEC),
+ loop_restart(50,Node,rpc:call(Node,erlang,whereis,[error_logger])),
+ loose_node:stop(Node),
ok.
loop_restart(0,_,_) ->
ok;
loop_restart(N,Node,EHPid) ->
- ?line erlang:monitor_node(Node, true),
- ?line ok = rpc:call(Node, init, restart, []),
- ?line receive
- {nodedown, Node} ->
- ok
- after 10000 ->
- loose_node:stop(Node),
- ?t:fail(not_stopping)
- end,
- ?line ok = wait_for(30, Node, EHPid),
- ?line loop_restart(N-1,Node,rpc:call(Node,erlang,whereis,[error_logger])).
+ erlang:monitor_node(Node, true),
+ ok = rpc:call(Node, init, restart, []),
+ receive
+ {nodedown, Node} ->
+ ok
+ after 10000 ->
+ loose_node:stop(Node),
+ ct:fail(not_stopping)
+ end,
+ ok = wait_for(30, Node, EHPid),
+ loop_restart(N-1,Node,rpc:call(Node,erlang,whereis,[error_logger])).
wait_for(0,Node,_) ->
loose_node:stop(Node),
error;
wait_for(N,Node,EHPid) ->
- ?line case rpc:call(Node, erlang, whereis, [error_logger]) of
+ case rpc:call(Node, erlang, whereis, [error_logger]) of
Pid when is_pid(Pid), Pid =/= EHPid ->
- %% ?line erlang:display(ok),
- ?line ok;
+ %% erlang:display(ok),
+ ok;
_X ->
- %% ?line erlang:display(_X),
- %% ?line Procs = rpc:call(Node, erlang, processes, []),
- %% ?line erlang:display(Procs),
- %% case is_list(Procs) of
- %% true ->
- %% ?line [(catch erlang:display(
- %% rpc:call(Node,
- %% erlang,
- %% process_info,
- %% [Y,registered_name])))
- %% || Y <- Procs];
- %% _ ->
- %% ok
- %% end,
- receive
- after 100 ->
- ok
- end,
- ?line wait_for(N-1,Node,EHPid)
- end.
+ %% erlang:display(_X),
+ %% Procs = rpc:call(Node, erlang, processes, []),
+ %% erlang:display(Procs),
+ %% case is_list(Procs) of
+ %% true ->
+ %% [(catch erlang:display(
+ %% rpc:call(Node,
+ %% erlang,
+ %% process_info,
+ %% [Y,registered_name])))
+ %% || Y <- Procs];
+ %% _ ->
+ %% ok
+ %% end,
+ receive
+ after 100 ->
+ ok
+ end,
+ wait_for(N-1,Node,EHPid)
+ end.
%% ------------------------------------------------
%% Slave executes erlang:halt() on master nodedown.
%% Therefore the slave process must be killed
%% before restart.
%% ------------------------------------------------
-restart(doc) -> [];
-restart(suite) ->
- case ?t:os_type() of
- {Fam, _} when Fam == unix; Fam == win32 ->
- {req, [distribution, {local_slave_nodes, 1}, {time, 5}]};
- _ ->
- {skip, "Only run on unix and win32"}
- end;
restart(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(40)),
- ?line Args = args(),
+ Args = args(),
%% Currently test_server:start_node cannot be used. The restarted
%% node immediately halts due to the implementation of
%% test_server:start_node.
- ?line {ok, Node} = loose_node:start(init_test, Args, ?DEFAULT_TIMEOUT_SEC),
+ {ok, Node} = loose_node:start(init_test, Args, ?DEFAULT_TIMEOUT_SEC),
%% Ok, the node is up, now the real test test begins.
- ?line erlang:monitor_node(Node, true),
- ?line InitPid = rpc:call(Node, erlang, whereis, [init]),
- ?line Procs = rpc:call(Node, erlang, processes, []),
- ?line MaxPid = lists:last(Procs),
- ?line ok = rpc:call(Node, init, restart, []),
- ?line receive
- {nodedown, Node} ->
- ok
- after 10000 ->
- loose_node:stop(Node),
- ?t:fail(not_stopping)
- end,
- ?line ok = wait_restart(30, Node),
+ erlang:monitor_node(Node, true),
+ InitPid = rpc:call(Node, erlang, whereis, [init]),
+ PurgerPid = rpc:call(Node, erlang, whereis, [erts_code_purger]),
+ Procs = rpc:call(Node, erlang, processes, []),
+ MaxPid = lists:last(Procs),
+ ok = rpc:call(Node, init, restart, []),
+ receive
+ {nodedown, Node} ->
+ ok
+ after 10000 ->
+ loose_node:stop(Node),
+ ct:fail(not_stopping)
+ end,
+ ok = wait_restart(30, Node),
%% Still the same init process!
- ?line InitPid1 = rpc:call(Node, erlang, whereis, [init]),
+ InitPid1 = rpc:call(Node, erlang, whereis, [init]),
InitP = pid_to_list(InitPid),
- ?line InitP = pid_to_list(InitPid1),
-
- ?line NewProcs0 = rpc:call(Node, erlang, processes, []),
- NewProcs = lists:delete(InitPid1, NewProcs0),
- ?line case check_processes(NewProcs, MaxPid) of
- true ->
- ok;
- _ ->
- loose_node:stop(Node),
- ?t:fail(processes_not_greater)
- end,
+ InitP = pid_to_list(InitPid1),
+
+ %% and same purger process!
+ PurgerPid1 = rpc:call(Node, erlang, whereis, [erts_code_purger]),
+ PurgerP = pid_to_list(PurgerPid),
+ PurgerP = pid_to_list(PurgerPid1),
+
+ NewProcs0 = rpc:call(Node, erlang, processes, []),
+ NewProcs = NewProcs0 -- [InitPid1, PurgerPid1],
+ case check_processes(NewProcs, MaxPid) of
+ true ->
+ ok;
+ _ ->
+ loose_node:stop(Node),
+ ct:fail(processes_not_greater)
+ end,
%% Test that, for instance, the same argument still exists.
- ?line case rpc:call(Node, init, get_argument, [c]) of
- {ok, [["4", "5", "6"], ["7", "8", "9"]]} ->
- ok;
- _ ->
- loose_node:stop(Node),
- ?t:fail({get_argument, restart_fail})
- end,
+ case rpc:call(Node, init, get_argument, [c]) of
+ {ok, [["4", "5", "6"], ["7", "8", "9"]]} ->
+ ok;
+ _ ->
+ loose_node:stop(Node),
+ ct:fail({get_argument, restart_fail})
+ end,
loose_node:stop(Node),
- ?line ?t:timetrap_cancel(Dog),
ok.
wait_restart(0, _Node) ->
- ?t:fail(not_restarted);
+ ct:fail(not_restarted);
wait_restart(N, Node) ->
case net_adm:ping(Node) of
pong -> ok;
_ ->
- ?t:sleep(1000),
+ ct:sleep(1000),
wait_restart(N - 1, Node)
end.
@@ -474,124 +440,112 @@ apid(Pid) ->
%% The reboot facility using heart is tested
%% in the heart_SUITE.
%% ------------------------------------------------
-reboot(doc) -> [];
-reboot(suite) -> {req, [distribution, {local_slave_nodes, 1}]};
reboot(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(40)),
-
Args = args(),
- ?line {ok, Node} = start_node(init_test, Args),
+ {ok, Node} = start_node(init_test, Args),
erlang:monitor_node(Node, true),
- ?line ok = rpc:call(Node, init, reboot, []),
- ?line receive
- {nodedown, Node} ->
- ok
- after 10000 ->
- stop_node(Node),
- ?t:fail(not_stopping)
- end,
- ?t:sleep(5000),
- ?line case net_adm:ping(Node) of
- pang ->
- ok;
- _ ->
- stop_node(Node),
- ?t:fail(system_rebooted)
- end,
- ?line ?t:timetrap_cancel(Dog),
+ ok = rpc:call(Node, init, reboot, []),
+ receive
+ {nodedown, Node} ->
+ ok
+ after 10000 ->
+ stop_node(Node),
+ ct:fail(not_stopping)
+ end,
+ ct:sleep(5000),
+ case net_adm:ping(Node) of
+ pang ->
+ ok;
+ _ ->
+ stop_node(Node),
+ ct:fail(system_rebooted)
+ end,
ok.
%% ------------------------------------------------
%%
%% ------------------------------------------------
-stop(doc) -> [];
-stop(suite) -> [];
+stop_status(Config) when is_list(Config) ->
+ badarg = catch_stop([65,[66],67]), % flat strings only
+ badarg = catch_stop([65, 666, 67]), % only bytes in string
+ badarg = catch_stop(abort), % 'abort' not allowed
+ badarg = catch_stop(true), % other atoms not allowed
+ badarg = catch_stop(-1), % no negative statuses
+ ok.
+
+catch_stop(Status) ->
+ try init:stop(Status) catch error:badarg -> badarg end.
+
+%% ------------------------------------------------
+%%
+%% ------------------------------------------------
stop(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(20)),
Args = args(),
- ?line {ok, Node} = start_node(init_test, Args),
+ {ok, Node} = start_node(init_test, Args),
erlang:monitor_node(Node, true),
- ?line ok = rpc:call(Node, init, reboot, []),
- ?line receive
- {nodedown, Node} ->
- ok
- after 10000 ->
- stop_node(Node),
- ?t:fail(not_stopping)
- end,
- ?t:sleep(5000),
- ?line case net_adm:ping(Node) of
- pang ->
- ok;
- _ ->
- stop_node(Node),
- ?t:fail(system_rebooted)
- end,
- ?line ?t:timetrap_cancel(Dog),
+ ok = rpc:call(Node, init, reboot, []),
+ receive
+ {nodedown, Node} ->
+ ok
+ after 10000 ->
+ stop_node(Node),
+ ct:fail(not_stopping)
+ end,
+ ct:sleep(5000),
+ case net_adm:ping(Node) of
+ pang ->
+ ok;
+ _ ->
+ stop_node(Node),
+ ct:fail(system_rebooted)
+ end,
ok.
%% ------------------------------------------------
%%
%% ------------------------------------------------
-get_status(doc) -> [];
-get_status(suite) -> [];
get_status(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(10)),
- ?line ?t:timetrap_cancel(Dog),
+ {Start, _} = init:get_status(),
- ?line {Start, _} = init:get_status(),
%% Depending on how the test_server is started Start has
%% different values. staring if test_server started with
%% -s flag.
- ?line case lists:member(Start, [started, starting]) of
- true ->
- ok;
- _ ->
- ?t:fail(get_status)
- end.
+ case lists:member(Start, [started, starting]) of
+ true ->
+ ok;
+ _ ->
+ ct:fail(get_status)
+ end.
%% ------------------------------------------------
%%
%% ------------------------------------------------
-script_id(doc) -> [];
-script_id(suite) -> [];
script_id(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(10)),
-
- ?line {Name, Vsn} = init:script_id(),
- ?line if
- is_list(Name), is_list(Vsn) ->
- ok;
- true ->
- ?t:fail(not_standard_script)
- end,
- ?line ?t:timetrap_cancel(Dog),
+ {Name, Vsn} = init:script_id(),
+ if
+ is_list(Name), is_list(Vsn) ->
+ ok;
+ true ->
+ ct:fail(not_standard_script)
+ end,
ok.
%% ------------------------------------------------
%% Start the slave system with -boot flag.
%% ------------------------------------------------
-boot1(doc) -> [];
-boot1(suite) -> {req, [distribution, {local_slave_nodes, 1}, {time, 35}]};
boot1(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(80)),
Args = args() ++ " -boot start_sasl",
- ?line {ok, Node} = start_node(init_test, Args),
- ?line stop_node(Node),
+ {ok, Node} = start_node(init_test, Args),
+ stop_node(Node),
%% Try to start with non existing boot file.
Args1 = args() ++ " -boot dummy_script",
- ?line {error, timeout} = start_node(init_test, Args1),
+ {error, timeout} = start_node(init_test, Args1),
- ?line ?t:timetrap_cancel(Dog),
ok.
-boot2(doc) -> [];
-boot2(suite) -> {req, [distribution, {local_slave_nodes, 1}, {time, 35}]};
boot2(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:seconds(80)),
-
%% Absolute boot file name
Boot = filename:join([code:root_dir(), "bin", "start_sasl"]),
@@ -604,9 +558,9 @@ boot2(Config) when is_list(Config) ->
%% Absolute boot file name for Windows -- all slashes are
%% converted to backslashes.
Win_boot = lists:map(fun
- ($/) -> $\\;
- (C) -> C
- end, Boot),
+ ($/) -> $\\;
+ (C) -> C
+ end, Boot),
Args2 = args() ++ " -boot \"" ++ Win_boot ++ "\"",
{ok, Node2} = start_node(init_test, Args2),
stop_node(Node2);
@@ -614,16 +568,15 @@ boot2(Config) when is_list(Config) ->
ok
end,
- ?t:timetrap_cancel(Dog),
ok.
%% Misc. functions
start_node(Name, Param) ->
- ?t:start_node(Name, slave, [{args, Param}]).
+ test_server:start_node(Name, slave, [{args, Param}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
from(H, [H | T]) -> T;
from(H, [_ | T]) -> from(H, T);
@@ -639,18 +592,18 @@ long_args(A) ->
[A])).
create_script(Config) ->
- ?line PrivDir = ?config(priv_dir,Config),
- ?line Name = PrivDir ++ "boot_var_test",
- ?line Apps = application_controller:which_applications(),
- ?line {value,{_,_,KernelVer}} = lists:keysearch(kernel,1,Apps),
- ?line {value,{_,_,StdlibVer}} = lists:keysearch(stdlib,1,Apps),
- ?line {ok,Fd} = file:open(Name ++ ".rel", [write]),
- ?line io:format(Fd,
- "{release, {\"Test release 3\", \"P2A\"}, \n"
- " {erts, \"4.4\"}, \n"
- " [{kernel, \"~s\"}, {stdlib, \"~s\"}]}.\n",
- [KernelVer,StdlibVer]),
- ?line file:close(Fd),
+ PrivDir = proplists:get_value(priv_dir,Config),
+ Name = PrivDir ++ "boot_var_test",
+ Apps = application_controller:which_applications(),
+ {value,{_,_,KernelVer}} = lists:keysearch(kernel,1,Apps),
+ {value,{_,_,StdlibVer}} = lists:keysearch(stdlib,1,Apps),
+ {ok,Fd} = file:open(Name ++ ".rel", [write]),
+ io:format(Fd,
+ "{release, {\"Test release 3\", \"P2A\"}, \n"
+ " {erts, \"4.4\"}, \n"
+ " [{kernel, \"~s\"}, {stdlib, \"~s\"}]}.\n",
+ [KernelVer,StdlibVer]),
+ file:close(Fd),
{filename:dirname(Name), filename:basename(Name),
- KernelVer, StdlibVer}.
+ KernelVer, StdlibVer}.
diff --git a/lib/kernel/test/interactive_shell_SUITE.erl b/lib/kernel/test/interactive_shell_SUITE.erl
index 8adae1f606..fc3706ba1e 100644
--- a/lib/kernel/test/interactive_shell_SUITE.erl
+++ b/lib/kernel/test/interactive_shell_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,7 +18,7 @@
%% %CopyrightEnd%
%%
-module(interactive_shell_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
get_columns_and_rows/1, exit_initial/1, job_control_local/1,
@@ -30,15 +30,14 @@
-export([toerl_server/3]).
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(test_server:minutes(3)),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ Config.
+end_per_testcase(_Func, _Config) ->
+ ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,3}}].
all() ->
[get_columns_and_rows, exit_initial, job_control_local,
@@ -55,7 +54,7 @@ init_per_suite(Config) ->
[{default_shell,DefShell},{term,Term}|Config].
end_per_suite(Config) ->
- Term = ?config(term,Config),
+ Term = proplists:get_value(term,Config),
os:putenv("TERM",Term),
ok.
@@ -66,68 +65,66 @@ end_per_group(_GroupName, Config) ->
Config.
-%-define(DEBUG,1).
+%%-define(DEBUG,1).
-ifdef(DEBUG).
-define(dbg(Data),erlang:display(Data)).
-else.
-define(dbg(Data),noop).
-endif.
-get_columns_and_rows(suite) -> [];
-get_columns_and_rows(doc) -> ["Test that the shell can access columns and rows"];
+%% Test that the shell can access columns and rows.
get_columns_and_rows(Config) when is_list(Config) ->
case proplists:get_value(default_shell,Config) of
old ->
%% Old shell tests
?dbg(old_shell),
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"io:columns()."},
- {getline_re,".*{error,enotsup}"},
- {putline,"io:rows()."},
- {getline_re,".*{error,enotsup}"}
-
- ],[]),
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"io:columns()."},
- {getline_re,".*{ok,90}"},
- {putline,"io:rows()."},
- {getline_re,".*{ok,40}"}],
- [],
- "stty rows 40; stty columns 90; ");
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline,"io:columns()."},
+ {getline_re,".*{error,enotsup}"},
+ {putline,"io:rows()."},
+ {getline_re,".*{error,enotsup}"}
+
+ ],[]),
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline,"io:columns()."},
+ {getline_re,".*{ok,90}"},
+ {putline,"io:rows()."},
+ {getline_re,".*{ok,40}"}],
+ [],
+ "stty rows 40; stty columns 90; ");
new ->
- % New shell tests
+ %% New shell tests
?dbg(new_shell),
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"io:columns()."},
- %% Behaviour change in R12B-5, returns 80
- %% {getline,"{error,enotsup}"},
- {getline,"{ok,80}"},
- {putline,"io:rows()."},
- %% Behaviour change in R12B-5, returns 24
- %% {getline,"{error,enotsup}"}
- {getline,"{ok,24}"}
- ],[]),
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,"io:columns()."},
- {getline,"{ok,90}"},
- {putline,"io:rows()."},
- {getline,"{ok,40}"}],
- [],
- "stty rows 40; stty columns 90; ")
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline,"io:columns()."},
+ %% Behaviour change in R12B-5, returns 80
+ %% {getline,"{error,enotsup}"},
+ {getline,"{ok,80}"},
+ {putline,"io:rows()."},
+ %% Behaviour change in R12B-5, returns 24
+ %% {getline,"{error,enotsup}"}
+ {getline,"{ok,24}"}
+ ],[]),
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline,"io:columns()."},
+ {getline,"{ok,90}"},
+ {putline,"io:rows()."},
+ {getline,"{ok,40}"}],
+ [],
+ "stty rows 40; stty columns 90; ")
end.
-
-
-exit_initial(suite) -> [];
-exit_initial(doc) -> ["Tests that exit of initial shell restarts shell"];
+
+
+%% Tests that exit of initial shell restarts shell.
exit_initial(Config) when is_list(Config) ->
case proplists:get_value(default_shell,Config) of
old ->
@@ -152,9 +149,7 @@ exit_initial(Config) when is_list(Config) ->
{getline_re,"35"}],[])
end.
-job_control_local(suite) -> [];
-job_control_local(doc) -> [ "Tests that local shell can be "
- "started by means of job control" ];
+%% Tests that local shell can be started by means of job control.
job_control_local(Config) when is_list(Config) ->
case proplists:get_value(default_shell,Config) of
old ->
@@ -162,133 +157,130 @@ job_control_local(Config) when is_list(Config) ->
{skip,"No new shell found"};
new ->
%% New shell tests
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline,[7]},
- {sleep,timeout(short)},
- {putline,""},
- {getline," -->"},
- {putline,"s"},
- {putline,"c"},
- {putline_raw,""},
- {getline,"Eshell"},
- {putline_raw,""},
- {getline,"1>"},
- {putline,"35."},
- {getline,"35"}],[])
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline,[7]},
+ {sleep,timeout(short)},
+ {putline,""},
+ {getline," -->"},
+ {putline,"s"},
+ {putline,"c"},
+ {putline_raw,""},
+ {getline,"Eshell"},
+ {putline_raw,""},
+ {getline,"1>"},
+ {putline,"35."},
+ {getline,"35"}],[])
end.
-job_control_remote(suite) -> [];
job_control_remote(doc) -> [ "Tests that remote shell can be "
"started by means of job control" ];
job_control_remote(Config) when is_list(Config) ->
case {node(),proplists:get_value(default_shell,Config)} of
{nonode@nohost,_} ->
- ?line exit(not_distributed);
+ exit(not_distributed);
{_,old} ->
{skip,"No new shell found"};
_ ->
- ?line RNode = create_nodename(),
- ?line MyNode = atom2list(node()),
- ?line Pid = spawn_link(fun() ->
- receive die ->
- ok
- end
- end),
- ?line PidStr = pid_to_list(Pid),
- ?line register(kalaskula,Pid),
- ?line CookieString = lists:flatten(
- io_lib:format("~w",
- [erlang:get_cookie()])),
- ?line Res = rtnode([{putline,""},
- {putline, "erlang:get_cookie()."},
- {getline, CookieString},
- {putline,[7]},
- {sleep,timeout(short)},
- {putline,""},
- {getline," -->"},
- {putline,"r '"++MyNode++"'"},
- {putline,"c"},
- {putline_raw,""},
- {getline,"Eshell"},
- {sleep,timeout(short)},
- {putline_raw,""},
- {getline,"("++MyNode++")1>"},
- {putline,"whereis(kalaskula)."},
- {getline,PidStr},
- {sleep,timeout(short)}, % Race, known bug.
- {putline_raw,"exit()."},
- {getline,"***"},
- {putline,[7]},
- {putline,""},
- {getline," -->"},
- {putline,"c 1"},
- {putline,""},
- {sleep,timeout(short)},
- {putline_raw,""},
- {getline,"("++RNode++")"}],RNode),
- ?line Pid ! die,
- ?line Res
+ RNode = create_nodename(),
+ MyNode = atom2list(node()),
+ Pid = spawn_link(fun() ->
+ receive die ->
+ ok
+ end
+ end),
+ PidStr = pid_to_list(Pid),
+ register(kalaskula,Pid),
+ CookieString = lists:flatten(
+ io_lib:format("~w",
+ [erlang:get_cookie()])),
+ Res = rtnode([{putline,""},
+ {putline, "erlang:get_cookie()."},
+ {getline, CookieString},
+ {putline,[7]},
+ {sleep,timeout(short)},
+ {putline,""},
+ {getline," -->"},
+ {putline,"r '"++MyNode++"'"},
+ {putline,"c"},
+ {putline_raw,""},
+ {getline,"Eshell"},
+ {sleep,timeout(short)},
+ {putline_raw,""},
+ {getline,"("++MyNode++")1>"},
+ {putline,"whereis(kalaskula)."},
+ {getline,PidStr},
+ {sleep,timeout(short)}, % Race, known bug.
+ {putline_raw,"exit()."},
+ {getline,"***"},
+ {putline,[7]},
+ {putline,""},
+ {getline," -->"},
+ {putline,"c 1"},
+ {putline,""},
+ {sleep,timeout(short)},
+ {putline_raw,""},
+ {getline,"("++RNode++")"}],RNode),
+ Pid ! die,
+ Res
end.
-job_control_remote_noshell(suite) -> [];
-job_control_remote_noshell(doc) ->
- [ "Tests that remote shell can be "
- "started by means of job control to -noshell node" ];
+
+%% Tests that remote shell can be
+%% started by means of job control to -noshell node.
job_control_remote_noshell(Config) when is_list(Config) ->
case {node(),proplists:get_value(default_shell,Config)} of
{nonode@nohost,_} ->
- ?line exit(not_distributed);
+ exit(not_distributed);
{_,old} ->
{skip,"No new shell found"};
_ ->
- ?line RNode = create_nodename(),
- ?line NSNode = start_noshell_node(interactive_shell_noshell),
- ?line Pid = spawn_link(NSNode, fun() ->
- receive die ->
- ok
- end
- end),
- ?line PidStr = rpc:call(NSNode,erlang,pid_to_list,[Pid]),
- ?line true = rpc:call(NSNode,erlang,register,[kalaskula,Pid]),
- ?line NSNodeStr = atom2list(NSNode),
- ?line CookieString = lists:flatten(
- io_lib:format("~w",
- [erlang:get_cookie()])),
- ?line Res = rtnode([{putline,""},
- {putline, "erlang:get_cookie()."},
- {getline, CookieString},
- {putline,[7]},
- {sleep,timeout(short)},
- {putline,""},
- {getline," -->"},
- {putline,"r '"++NSNodeStr++"'"},
- {putline,"c"},
- {putline_raw,""},
- {getline,"Eshell"},
- {sleep,timeout(short)},
- {putline_raw,""},
- {getline,"("++NSNodeStr++")1>"},
- {putline,"whereis(kalaskula)."},
- {getline,PidStr},
- {sleep,timeout(short)}, % Race, known bug.
- {putline_raw,"exit()."},
- {getline,"***"},
- {putline,[7]},
- {putline,""},
- {getline," -->"},
- {putline,"c 1"},
- {putline,""},
- {sleep,timeout(short)},
- {putline_raw,""},
- {getline,"("++RNode++")"}],RNode),
- ?line Pid ! die,
- ?line stop_noshell_node(NSNode),
- ?line Res
+ RNode = create_nodename(),
+ NSNode = start_noshell_node(interactive_shell_noshell),
+ Pid = spawn_link(NSNode, fun() ->
+ receive die ->
+ ok
+ end
+ end),
+ PidStr = rpc:call(NSNode,erlang,pid_to_list,[Pid]),
+ true = rpc:call(NSNode,erlang,register,[kalaskula,Pid]),
+ NSNodeStr = atom2list(NSNode),
+ CookieString = lists:flatten(
+ io_lib:format("~w",
+ [erlang:get_cookie()])),
+ Res = rtnode([{putline,""},
+ {putline, "erlang:get_cookie()."},
+ {getline, CookieString},
+ {putline,[7]},
+ {sleep,timeout(short)},
+ {putline,""},
+ {getline," -->"},
+ {putline,"r '"++NSNodeStr++"'"},
+ {putline,"c"},
+ {putline_raw,""},
+ {getline,"Eshell"},
+ {sleep,timeout(short)},
+ {putline_raw,""},
+ {getline,"("++NSNodeStr++")1>"},
+ {putline,"whereis(kalaskula)."},
+ {getline,PidStr},
+ {sleep,timeout(short)}, % Race, known bug.
+ {putline_raw,"exit()."},
+ {getline,"***"},
+ {putline,[7]},
+ {putline,""},
+ {getline," -->"},
+ {putline,"c 1"},
+ {putline,""},
+ {sleep,timeout(short)},
+ {putline_raw,""},
+ {getline,"("++RNode++")"}],RNode),
+ Pid ! die,
+ stop_noshell_node(NSNode),
+ Res
end.
-ctrl_keys(suite) -> [];
-ctrl_keys(doc) -> ["Tests various control keys"];
+%% Tests various control keys.
ctrl_keys(_Conf) when is_list(_Conf) ->
Cu=[$\^u],
Cw=[$\^w],
@@ -308,7 +300,7 @@ ctrl_keys(_Conf) when is_list(_Conf) ->
{getline,"\"hello world\""},
{putline,"\"hello world\""++Cu++Cy++"."},
{getline,"\"hello world\""}]
- ++wordLeft()++wordRight(),[]).
+ ++wordLeft()++wordRight(),[]).
wordLeft() ->
@@ -337,46 +329,46 @@ wordRight(Chars) ->
rtnode(C,N) ->
rtnode(C,N,[]).
rtnode(Commands,Nodename,ErlPrefix) ->
- ?line case get_progs() of
- {error,_Reason} ->
- ?line {skip,"No runerl present"};
- {RunErl,ToErl,Erl} ->
- ?line case create_tempdir() of
- {error, Reason2} ->
- ?line {skip, Reason2};
- Tempdir ->
- ?line SPid =
- start_runerl_node(RunErl,ErlPrefix++"\\\""++Erl++"\\\"",
- Tempdir,Nodename),
- ?line CPid = start_toerl_server(ToErl,Tempdir),
- ?line erase(getline_skipped),
- ?line Res =
- (catch get_and_put(CPid, Commands,1)),
- ?line case stop_runerl_node(CPid) of
- {error,_} ->
- ?line CPid2 =
- start_toerl_server
- (ToErl,Tempdir),
- ?line erase(getline_skipped),
- ?line ok = get_and_put
- (CPid2,
- [{putline,[7]},
- {sleep,
- timeout(short)},
- {putline,""},
- {getline," -->"},
- {putline,"s"},
- {putline,"c"},
- {putline,""}],1),
- ?line stop_runerl_node(CPid2);
- _ ->
- ?line ok
- end,
- ?line wait_for_runerl_server(SPid),
- ?line ok = rm_rf(Tempdir),
- ?line ok = Res
- end
- end.
+ case get_progs() of
+ {error,_Reason} ->
+ {skip,"No runerl present"};
+ {RunErl,ToErl,Erl} ->
+ case create_tempdir() of
+ {error, Reason2} ->
+ {skip, Reason2};
+ Tempdir ->
+ SPid =
+ start_runerl_node(RunErl,ErlPrefix++"\\\""++Erl++"\\\"",
+ Tempdir,Nodename),
+ CPid = start_toerl_server(ToErl,Tempdir),
+ erase(getline_skipped),
+ Res =
+ (catch get_and_put(CPid, Commands,1)),
+ case stop_runerl_node(CPid) of
+ {error,_} ->
+ CPid2 =
+ start_toerl_server
+ (ToErl,Tempdir),
+ erase(getline_skipped),
+ ok = get_and_put
+ (CPid2,
+ [{putline,[7]},
+ {sleep,
+ timeout(short)},
+ {putline,""},
+ {getline," -->"},
+ {putline,"s"},
+ {putline,"c"},
+ {putline,""}],1),
+ stop_runerl_node(CPid2);
+ _ ->
+ ok
+ end,
+ wait_for_runerl_server(SPid),
+ ok = rm_rf(Tempdir),
+ ok = Res
+ end
+ end.
timeout(long) ->
2 * timeout(normal);
@@ -389,7 +381,7 @@ timeout(normal) ->
start_noshell_node(Name) ->
PADir = filename:dirname(code:which(?MODULE)),
{ok, Node} = test_server:start_node(Name,slave,[{args," -noshell -pa "++
- PADir++" "}]),
+ PADir++" "}]),
Node.
stop_noshell_node(Node) ->
test_server:stop_node(Node).
@@ -397,20 +389,20 @@ stop_noshell_node(Node) ->
rm_rf(Dir) ->
try
- {ok,List} = file:list_dir(Dir),
- Files = [filename:join([Dir,X]) || X <- List],
- [case file:list_dir(Y) of
- {error, enotdir} ->
- ok = file:delete(Y);
- _ ->
- ok = rm_rf(Y)
- end || Y <- Files],
- ok = file:del_dir(Dir),
- ok
+ {ok,List} = file:list_dir(Dir),
+ Files = [filename:join([Dir,X]) || X <- List],
+ [case file:list_dir(Y) of
+ {error, enotdir} ->
+ ok = file:delete(Y);
+ _ ->
+ ok = rm_rf(Y)
+ end || Y <- Files],
+ ok = file:del_dir(Dir),
+ ok
catch
_:Exception -> {error, {Exception,Dir}}
end.
-
+
get_and_put(_CPid,[],_) ->
ok;
@@ -479,7 +471,7 @@ get_and_put(CPid, [{putline_raw, Line}|T],N) ->
Timeout = timeout(normal),
receive
{send_line, ok} ->
- get_and_put(CPid, T,N+1)
+ get_and_put(CPid, T,N+1)
after Timeout ->
error_logger:error_msg("~p: putline_raw timeout (~p) sending "
"\"~s\" (command number ~p)~n",
@@ -493,7 +485,7 @@ get_and_put(CPid, [{putline, Line}|T],N) ->
Timeout = timeout(normal),
receive
{send_line, ok} ->
- get_and_put(CPid, [{getline, []}|T],N)
+ get_and_put(CPid, [{getline, []}|T],N)
after Timeout ->
error_logger:error_msg("~p: putline timeout (~p) sending "
"\"~s\" (command number ~p)~n[~p]~n",
@@ -510,8 +502,8 @@ wait_for_runerl_server(SPid) ->
after Timeout ->
{error, timeout}
end.
-
-
+
+
stop_runerl_node(CPid) ->
Ref = erlang:monitor(process, CPid),
@@ -562,11 +554,11 @@ create_tempdir(Dir,X) when X > $Z, X < $a ->
create_tempdir(Dir,$a);
create_tempdir(Dir,X) when X > $z ->
Estr = lists:flatten(
- io_lib:format("Unable to create ~s, reason eexist",
- [Dir++[$z]])),
+ io_lib:format("Unable to create ~s, reason eexist",
+ [Dir++[$z]])),
{error, Estr};
create_tempdir(Dir0, Ch) ->
- % Expect fairly standard unix.
+ %% Expect fairly standard unix.
Dir = Dir0++[Ch],
case file:make_dir(Dir) of
{error, eexist} ->
@@ -604,13 +596,13 @@ start_runerl_node(RunErl,Erl,Tempdir,Nodename) ->
[];
_ ->
" -sname "++(if is_atom(Nodename) -> atom_to_list(Nodename);
- true -> Nodename
- end)++
+ true -> Nodename
+ end)++
" -setcookie "++atom_to_list(erlang:get_cookie())
end,
spawn(fun() ->
os:cmd("\""++RunErl++"\" "++Tempdir++"/ "++Tempdir++" \""++
- Erl++XArg++"\"")
+ Erl++XArg++"\"")
end).
start_toerl_server(ToErl,Tempdir) ->
@@ -668,7 +660,7 @@ toerl_loop(Port,Acc) ->
_ ->
toerl_loop(Port,[{Tag0,Data}|Acc])
end;
- {Pid,{get_line,Timeout}} ->
+ {Pid,{get_line,Timeout}} ->
case Acc of
[] ->
case get_data_within(Port,Timeout,[]) of
@@ -717,10 +709,10 @@ toerl_loop(Port,Acc) ->
Other ->
{error, {unexpected, Other}}
end.
-
+
millistamp() ->
erlang:monotonic_time(milli_seconds).
-
+
get_data_within(Port, X, Acc) when X =< 0 ->
?dbg({get_data_within, X, Acc, ?LINE}),
receive
@@ -751,7 +743,7 @@ get_data_within(Port, Timeout, Acc) ->
after Timeout ->
timeout
end.
-
+
get_default_shell() ->
try
rtnode([{putline,""},
diff --git a/lib/kernel/test/kernel_SUITE.erl b/lib/kernel/test/kernel_SUITE.erl
index 8ae2e4b23b..da56359294 100644
--- a/lib/kernel/test/kernel_SUITE.erl
+++ b/lib/kernel/test/kernel_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,21 +21,20 @@
%%% Kernel application test suite.
%%%-----------------------------------------------------------------
-module(kernel_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-% Test server specific exports
+%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
-export([init_per_testcase/2, end_per_testcase/2]).
-% Test cases must be exported.
+%% Test cases must be exported.
-export([app_test/1, appup_test/1]).
-%%
-%% all/1
-%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[app_test, appup_test].
@@ -61,15 +60,12 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, _Config) ->
ok.
-%
-% Test cases starts here.
-%
-app_test(doc) ->
- ["Tests the applications consistency."];
-app_test(suite) ->
- [];
+%%
+%% Test cases starts here.
+%%
+%% Tests the applications consistency.
app_test(Config) when is_list(Config) ->
- ?line ok=?t:app_test(kernel),
+ ok=test_server:app_test(kernel),
ok.
diff --git a/lib/kernel/test/kernel_config_SUITE.erl b/lib/kernel/test/kernel_config_SUITE.erl
index 4be44015c9..9a4578917d 100644
--- a/lib/kernel/test/kernel_config_SUITE.erl
+++ b/lib/kernel/test/kernel_config_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,13 +19,15 @@
%%
-module(kernel_config_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2, sync/1]).
-export([init_per_suite/1, end_per_suite/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[sync].
@@ -40,13 +42,9 @@ end_per_group(_GroupName, Config) ->
Config.
-init_per_suite(doc) -> [];
-init_per_suite(suite) -> [];
init_per_suite(Config) when is_list(Config) ->
Config.
-end_per_suite(doc) -> [];
-end_per_suite(suite) -> [];
end_per_suite(Config) when is_list(Config) ->
stop_node(init_test),
Config.
@@ -54,7 +52,7 @@ end_per_suite(Config) when is_list(Config) ->
config(Fd) ->
M = from($@, atom_to_list(node())),
io:format(Fd, "[{kernel, [{sync_nodes_optional, ['cp1@~s','cp2@~s']},"
- "{sync_nodes_timeout, 15000}]}].~n",
+ "{sync_nodes_timeout, 15000}]}].~n",
[M, M]).
from(H, [H | T]) -> T;
@@ -67,12 +65,9 @@ from(_, []) -> [].
%% Should be started in a CC view with:
%% erl -sname XXX where XX not in [cp1, cp2]
%%-----------------------------------------------------------------
-sync(doc) -> [];
-sync(suite) -> [];
sync(Conf) when is_list(Conf) ->
- ?line Dog = ?t:timetrap(?t:seconds(120)),
- % Write a config file
- Dir = ?config(priv_dir,Conf),
+ %% Write a config file
+ Dir = proplists:get_value(priv_dir,Conf),
{ok, Fd} = file:open(Dir ++ "sys.config", [write]),
config(Fd),
file:close(Fd),
@@ -81,34 +76,33 @@ sync(Conf) when is_list(Conf) ->
%% Reset wall_clock
{T1,_} = erlang:statistics(wall_clock),
io:format("~p~n", [{t1, T1}]),
- ?line Command = lists:concat([lib:progname(),
- " -detached -sname cp1 ",
- "-config ", Config,
- " -env ERL_CRASH_DUMP erl_crash_dump.cp1"]),
+ Command = lists:concat([lib:progname(),
+ " -detached -sname cp1 ",
+ "-config ", Config,
+ " -env ERL_CRASH_DUMP erl_crash_dump.cp1"]),
io:format("Command: ~s", [Command]),
- ?line open_port({spawn, Command}, [stream]),
+ open_port({spawn, Command}, [stream]),
io:format("started~n"),
- ?line ?t:sleep(12000),
+ ct:sleep(12000),
io:format("waited12~n"),
- ?line Host = from($@, atom_to_list(node())),
- ?line Cp1 = list_to_atom("cp1@"++Host),
- ?line wait_for_node(Cp1),
+ Host = from($@, atom_to_list(node())),
+ Cp1 = list_to_atom("cp1@"++Host),
+ wait_for_node(Cp1),
io:format("waitednode~n"),
%% Check time since last call
- ?line {TT, T} = erlang:statistics(wall_clock),
+ {TT, T} = erlang:statistics(wall_clock),
io:format("~p~n", [{t2, {TT, T}}]),
- ?line stop_node(cp1),
+ stop_node(cp1),
if
- TT-T1 < 15000 -> ?line ?t:fail({too_short_time, TT-T1});
+ TT-T1 < 15000 -> ct:fail({too_short_time, TT-T1});
true -> ok
end,
- ?line ?t:timetrap_cancel(Dog),
ok.
wait_for_node(Node) ->
case rpc:call(Node, init, get_status, []) of
{started,_} -> ok;
- {badrpc, R} -> ?line ?t:fail({rpc_failed, R});
+ {badrpc, R} -> ct:fail({rpc_failed, R});
_Other -> wait_for_node(Node)
end.
diff --git a/lib/kernel/test/loose_node.erl b/lib/kernel/test/loose_node.erl
index ba293a821a..cc3f9bbea0 100644
--- a/lib/kernel/test/loose_node.erl
+++ b/lib/kernel/test/loose_node.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -57,9 +57,16 @@
%%
stop(Node) when is_atom(Node) ->
+ erlang:monitor_node(Node, true),
rpc:cast(Node, erlang, halt, []),
- io:format("Stopped loose node ~p~n", [Node]),
- ok.
+ receive
+ {nodedown, Node} ->
+ io:format("Stopped loose node ~p~n", [Node]),
+ ok
+ after 10000 ->
+ io:format("Failed to stop loose node: ~p~n", [Node]),
+ {error, node_not_stopped}
+ end.
start(Name, Args) ->
start(Name, Args, -1).
diff --git a/lib/kernel/test/multi_load_SUITE.erl b/lib/kernel/test/multi_load_SUITE.erl
new file mode 100644
index 0000000000..369e25ac64
--- /dev/null
+++ b/lib/kernel/test/multi_load_SUITE.erl
@@ -0,0 +1,419 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(multi_load_SUITE).
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ basic_atomic_load/1,basic_errors/1,sticky_dir/1,
+ on_load_failing/1,ensure_modules_loaded/1,
+ native_code/1]).
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("syntax_tools/include/merl.hrl").
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
+
+all() ->
+ [basic_atomic_load,basic_errors,sticky_dir,on_load_failing,
+ ensure_modules_loaded,native_code].
+
+groups() ->
+ [].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+basic_atomic_load(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dir = filename:join(PrivDir, multi_load_sticky_dir),
+ _ = file:make_dir(Dir),
+
+ OldPath = code:get_path(),
+ try
+ code:add_patha(Dir),
+ do_basic(Dir)
+ after
+ code:set_path(OldPath)
+ end,
+
+ ok.
+
+do_basic(Dir) ->
+ MsVer1_0 = make_modules(5, versioned_module(1)),
+ MsVer1 = [{M,filename:absname(F, Dir),Bin} || {M,F,Bin} <- MsVer1_0],
+ _ = [ok = file:write_file(F, Bin) || {_,F,Bin} <- MsVer1],
+
+ Ms = [M || {M,_,_} <- MsVer1],
+ [] = [loaded || M <- Ms, is_loaded(M)],
+
+ ok = code:atomic_load(Ms),
+ _ = [1 = M:M() || M <- Ms],
+ _ = [F = code:which(M) || {M,F,_} <- MsVer1],
+ [] = [not_loaded || M <- Ms, not is_loaded(M)],
+
+ MsVer2 = update_modules(Ms, versioned_module(2)),
+ {ok,Prepared} = code:prepare_loading(MsVer2),
+ ok = code:finish_loading(Prepared),
+ _ = [2 = M:M() || M <- Ms],
+ _ = [F = code:which(M) || {M,F,_} <- MsVer2],
+ [] = [not_loaded || M <- Ms, not is_loaded(M)],
+
+ MsVer3 = update_modules(Ms, versioned_module(2)),
+ NotPurged = lists:sort([{M,not_purged} || M <- Ms]),
+ NotPurged = atomic_load_error(MsVer3, true),
+
+ ok.
+
+versioned_module(Ver) ->
+ fun(Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-export(['@Mod@'/0]).\n",
+ "'@Mod@'() -> _@Ver@.\n"])
+ end.
+
+basic_errors(_Config) ->
+ atomic_load_fc([42]),
+ atomic_load_fc([{"mod","file","bin"}]),
+
+ finish_loading_fc(atom),
+ {ok,{PrepTag,_}} = code:prepare_loading([code]),
+ finish_loading_fc({PrepTag,[x]}),
+ finish_loading_fc({PrepTag,[{m,{<<>>,"",<<>>}}]}),
+ Prep = prepared_with_wrong_magic_bin(),
+ finish_loading_fc(Prep),
+
+ [{x,badfile}] = atomic_load_error([{x,"x",<<"bad">>}], false),
+ [{a,badfile},{some_nonexistent_file,nofile}] =
+ atomic_load_error([some_nonexistent_file,{a,"a",<<>>}],
+ false),
+
+ %% Modules mentioned more than once.
+ Mods = make_modules(2, fun basic_module/1),
+ Ms = [M || {M,_,_} <- Mods],
+ DupMods = Mods ++ [mnesia] ++ Mods ++ [mnesia],
+ DupErrors0 = lists:sort([mnesia|Ms]),
+ DupErrors = [{M,duplicated} || M <- DupErrors0],
+ DupErrors = atomic_load_error(DupMods, false),
+
+ ok.
+
+atomic_load_fc(L) ->
+ {'EXIT',{function_clause,[{code,atomic_load,[L],_}|_]}} =
+ (catch code:atomic_load(L)),
+ {'EXIT',{function_clause,[{code,prepare_loading,[L],_}|_]}} =
+ (catch code:prepare_loading(L)).
+
+finish_loading_fc(Term) ->
+ {'EXIT',{function_clause,[{code,finish_loading,[Term],_}|_]}} =
+ (catch code:finish_loading(Term)).
+
+prepared_with_wrong_magic_bin() ->
+ {ok,Prep} = code:prepare_loading([?MODULE]),
+ prep_magic(Prep).
+
+prep_magic([H|T]) ->
+ [prep_magic(H)|prep_magic(T)];
+prep_magic(Tuple) when is_tuple(Tuple) ->
+ L = prep_magic(tuple_to_list(Tuple)),
+ list_to_tuple(L);
+prep_magic(Bin) when is_binary(Bin) ->
+ try erlang:has_prepared_code_on_load(Bin) of
+ false ->
+ %% Create a different kind of magic binary.
+ ets:match_spec_compile([{'_',[true],['$_']}])
+ catch
+ _:_ ->
+ Bin
+ end;
+prep_magic(Other) ->
+ Other.
+
+sticky_dir(_Config) ->
+ Mod0 = make_module(lists, fun basic_module/1),
+ Mod1 = make_module(gen_server, fun basic_module/1),
+ Ms = [Mod0,Mod1],
+ SD = sticky_directory,
+ StickyErrors = [{gen_server,SD},{lists,SD}],
+ StickyErrors = atomic_load_error(Ms, true),
+
+ ok.
+
+on_load_failing(_Config) ->
+ OnLoad = make_modules(1, fun on_load_module/1),
+ [{OnLoadMod,_,_}] = OnLoad,
+ Ms = make_modules(10, fun basic_module/1) ++ OnLoad,
+
+ %% Fail because there is a module with on_load in the list.
+ on_load_failure(OnLoadMod, Ms),
+ on_load_failure(OnLoadMod, [lists:last(Ms)]),
+
+ %% Fail because there already is a pending on_load.
+ [{HangingOnLoad,_,_}|_] = Ms,
+ spawn_hanging_on_load(HangingOnLoad),
+ NoOnLoadMs = lists:droplast(Ms),
+ {error,[{HangingOnLoad,pending_on_load}]} =
+ code:atomic_load(NoOnLoadMs),
+ hanging_on_load ! stop_hanging_and_unload,
+
+ ok.
+
+on_load_failure(OnLoadMod, Ms) ->
+ [{OnLoadMod,on_load_not_allowed}] = atomic_load_error(Ms, false).
+
+spawn_hanging_on_load(Mod) ->
+ {Mod,Name,Bin} = make_module(Mod, "unknown",
+ fun(_) ->
+ hanging_on_load_module(Mod)
+ end),
+ spawn_link(fun() ->
+ {error,on_load_failure} =
+ code:load_binary(Mod, Name, Bin)
+ end).
+
+hanging_on_load_module(Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-on_load(hang/0).\n",
+ "hang() ->\n"
+ " register(hanging_on_load, self()),\n"
+ " receive _ -> unload end.\n"]).
+
+ensure_modules_loaded(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dir = filename:join(PrivDir, multi_load_ensure_modules_loaded),
+ _ = file:make_dir(Dir),
+
+ OldPath = code:get_path(),
+ try
+ code:add_patha(Dir),
+ do_ensure_modules_loaded(Dir)
+ after
+ code:set_path(OldPath)
+ end,
+
+ ok.
+
+do_ensure_modules_loaded(Dir) ->
+ %% Create a dummy "lists" module and place it in our code path.
+ {lists,ListsFile,ListsCode} = make_module(lists, fun basic_module/1),
+ ok = file:write_file(filename:absname(ListsFile, Dir), ListsCode),
+ {error,sticky_directory} = code:load_file(lists),
+
+ %% Make a new module that we can load.
+ Mod = make_module_file(Dir, fun basic_module/1),
+ false = is_loaded(Mod),
+
+ %% Make a new module with an on_load function.
+ OLMod = make_module_file(Dir, fun on_load_module/1),
+ false = is_loaded(OLMod),
+
+ %% lists should not be loaded again; Mod and OLMod should be
+ %% loaded. ?MODULE should not be reloaded, but there is no easy
+ %% way to test that. Repeating modules is OK.
+ ok = code:ensure_modules_loaded([?MODULE,lists,Mod,OLMod,
+ Mod,OLMod,Mod,lists]),
+ last = lists:last([last]),
+ true = is_loaded(Mod),
+ ok = Mod:Mod(),
+ true = is_loaded(OLMod),
+ _ = OLMod:module_info(),
+
+ %% Unload the modules that were loaded.
+ [begin
+ code:purge(M),
+ code:delete(M),
+ code:purge(M),
+ false = is_loaded(M)
+ end || M <- [Mod,OLMod]],
+
+ %% If there are some errors, all other modules should be loaded
+ %% anyway.
+ [{BadMod,BadFile,_}] = make_modules(1, fun basic_module/1),
+ ok = file:write_file(filename:absname(BadFile, Dir), <<"bad_code">>),
+ BadOLMod = make_module_file(Dir, fun failing_on_load_module/1),
+ BadEgg = bad__egg,
+ NativeMod = a_native_module,
+ NativeModFile = atom_to_list(NativeMod) ++ ".beam",
+ {NativeMod,_,NativeCode} = make_module(NativeMod, NativeModFile,
+ fun basic_module/1, [native]),
+ ok = file:write_file(filename:absname(NativeModFile, Dir), NativeCode),
+ ModulesToLoad = [OLMod,?MODULE,Mod,BadOLMod,NativeMod,
+ BadEgg,BadMod,lists],
+ {error,Error0} = code:ensure_modules_loaded(ModulesToLoad),
+ Error = lists:sort([{BadEgg,nofile},
+ {BadMod,badfile},
+ {BadOLMod,on_load_failure}]),
+ Error = lists:sort(Error0),
+ true = is_loaded(Mod),
+ true = is_loaded(OLMod),
+ true = is_loaded(NativeMod),
+
+ ModuleNative = case erlang:system_info(hipe_architecture) of
+ undefined -> false;
+ _ -> true
+ end,
+ ModuleNative = NativeMod:module_info(native),
+
+ ok.
+
+failing_on_load_module(Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-on_load(f/0).\n",
+ "f() -> fail.\n"]).
+
+native_code(_Config) ->
+ case erlang:system_info(hipe_architecture) of
+ undefined ->
+ {skip,"No native support"};
+ _ ->
+ do_native_code()
+ end.
+
+do_native_code() ->
+ CalledMod = native_called_module,
+ CallingMod = native_calling_module,
+
+ %% Create a module in native code that calls another module.
+ CallingMod = make_and_load(CallingMod,
+ calling_module_fun(CalledMod),
+ [native]),
+
+ %% Create a threaded-code module.
+ _ = make_and_load(CalledMod, called_module_fun(42), []),
+ 42 = CallingMod:call(),
+
+ %% Now replace it with a changed module in native code.
+ code:purge(CalledMod),
+ make_and_load(CalledMod, called_module_fun(43), [native]),
+ true = test_server:is_native(CalledMod),
+ 43 = CallingMod:call(),
+
+ %% Reload the called module and call it.
+ code:purge(CalledMod),
+ ModVer3 = make_module(CalledMod, "", called_module_fun(changed)),
+ ok = code:atomic_load([ModVer3]),
+ false = test_server:is_native(CalledMod),
+ changed = CallingMod:call(),
+ code:purge(CalledMod),
+
+ ok.
+
+make_and_load(Mod, Fun, Opts) ->
+ {Mod,_,Code} = make_module(Mod, "", Fun, Opts),
+ {module,Mod} = code:load_binary(Mod, "", Code),
+ Mod.
+
+calling_module_fun(Called) ->
+ fun(Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-export([call/0]).\n",
+ "call() -> _@Called@:f().\n"])
+ end.
+
+called_module_fun(Ret) ->
+ fun(Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-export([f/0]).\n",
+ "f() -> _@Ret@.\n"])
+ end.
+
+%%%
+%%% Common utilities
+%%%
+
+atomic_load_error(Modules, ErrorInFinishLoading) ->
+ {error,Errors0} = code:atomic_load(Modules),
+ {Errors1,Bool} =
+ case code:prepare_loading(Modules) of
+ {ok,Prepared} ->
+ {error,Es0} = code:finish_loading(Prepared),
+ {Es0,true};
+ {error,Es0} ->
+ {Es0,false}
+ end,
+ Errors = lists:sort(Errors0),
+ Errors = lists:sort(Errors1),
+ case {ErrorInFinishLoading,Bool} of
+ {B,B} ->
+ Errors;
+ {false,true} ->
+ ct:fail("code:prepare_loading/1 should have failed");
+ {true,false} ->
+ ct:fail("code:prepare_loading/1 should have succeeded")
+ end.
+
+is_loaded(Mod) ->
+ case erlang:module_loaded(Mod) of
+ false ->
+ false = code:is_loaded(Mod);
+ true ->
+ {file,_} = code:is_loaded(Mod),
+ true
+ end.
+
+basic_module(Mod) ->
+ ?Q(["-module('@Mod@').\n"
+ "-export(['@Mod@'/0]).\n",
+ "'@Mod@'() -> ok."]).
+
+on_load_module(Mod) ->
+ ?Q(["-module('@Mod@').\n",
+ "-on_load(f/0).\n",
+ "f() -> ok.\n"]).
+
+make_module_file(Dir, Fun) ->
+ [{Mod,File,Code}] = make_modules(1, Fun),
+ ok = file:write_file(filename:absname(File, Dir), Code),
+ Mod.
+
+make_modules(0, _) ->
+ [];
+make_modules(N, Fun) ->
+ U = erlang:unique_integer([positive]),
+ ModName = "m__" ++ integer_to_list(N) ++ "_" ++ integer_to_list(U),
+ Mod = list_to_atom(ModName),
+ ModItem = make_module(Mod, Fun),
+ [ModItem|make_modules(N-1, Fun)].
+
+update_modules(Ms, Fun) ->
+ [make_module(M, Fun) || M <- Ms].
+
+make_module(Mod, Fun) ->
+ Filename = atom_to_list(Mod) ++ ".beam",
+ make_module(Mod, Filename, Fun).
+
+make_module(Mod, Filename, Fun) ->
+ make_module(Mod, Filename, Fun, []).
+
+make_module(Mod, Filename, Fun, Opts) ->
+ Tree = Fun(Mod),
+ merl:print(Tree),
+ {ok,Mod,Code} = merl:compile(Tree, Opts),
+ {Mod,Filename,Code}.
diff --git a/lib/kernel/test/myApp.erl b/lib/kernel/test/myApp.erl
index add1d5d500..0318e55c52 100644
--- a/lib/kernel/test/myApp.erl
+++ b/lib/kernel/test/myApp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/os_SUITE.erl b/lib/kernel/test/os_SUITE.erl
index 29d8d10262..2a1e5016ec 100644
--- a/lib/kernel/test/os_SUITE.erl
+++ b/lib/kernel/test/os_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,17 +20,22 @@
-module(os_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
+ init_per_group/2,end_per_group/2,
+ init_per_testcase/2,end_per_testcase/2]).
-export([space_in_cwd/1, quoting/1, cmd_unicode/1, space_in_name/1, bad_command/1,
- find_executable/1, unix_comment_in_command/1, deep_list_command/1, evil/1]).
+ find_executable/1, unix_comment_in_command/1, deep_list_command/1,
+ large_output_command/1, perf_counter_api/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[space_in_cwd, quoting, cmd_unicode, space_in_name, bad_command,
- find_executable, unix_comment_in_command, deep_list_command, evil].
+ find_executable, unix_comment_in_command, deep_list_command,
+ large_output_command, perf_counter_api].
groups() ->
[].
@@ -47,16 +52,19 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
+init_per_testcase(_TC,Config) ->
+ Config.
+
+end_per_testcase(_,_Config) ->
+ ok.
-space_in_cwd(doc) ->
- "Test that executing a command in a current working directory "
- "with space in its name works.";
-space_in_cwd(suite) -> [];
+%% Test that executing a command in a current working directory
+%% with space in its name works.
space_in_cwd(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Dirname = filename:join(PrivDir, "cwd with space"),
- ?line ok = file:make_dir(Dirname),
- ?line ok = file:set_cwd(Dirname),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dirname = filename:join(PrivDir, "cwd with space"),
+ ok = file:make_dir(Dirname),
+ ok = file:set_cwd(Dirname),
%% Using `more' gives the almost the same result on both Unix and Windows.
@@ -67,70 +75,66 @@ space_in_cwd(Config) when is_list(Config) ->
"more </dev/null"
end,
- ?line case os:cmd(Cmd) of
- [] -> ok; % Unix.
- "\r\n" -> ok; % Windows.
- Other ->
- ?line test_server:fail({unexpected, Other})
- end,
+ case os:cmd(Cmd) of
+ [] -> ok; % Unix.
+ "\r\n" -> ok; % Windows.
+ Other ->
+ ct:fail({unexpected, Other})
+ end,
- ?t:sleep(5),
- ?line [] = receive_all(),
+ ct:sleep(5),
+ [] = receive_all(),
ok.
-quoting(doc) -> "Test that various ways of quoting arguments work.";
-quoting(suite) -> [];
+%% Test that various ways of quoting arguments work.
quoting(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line Echo = filename:join(DataDir, "my_echo"),
-
- ?line comp("one", os:cmd(Echo ++ " one")),
- ?line comp("one::two", os:cmd(Echo ++ " one two")),
- ?line comp("one two", os:cmd(Echo ++ " \"one two\"")),
- ?line comp("x::one two::y", os:cmd(Echo ++ " x \"one two\" y")),
- ?line comp("x::one two", os:cmd(Echo ++ " x \"one two\"")),
- ?line comp("one two::y", os:cmd(Echo ++ " \"one two\" y")),
- ?line comp("x::::y", os:cmd(Echo ++ " x \"\" y")),
- ?t:sleep(5),
- ?line [] = receive_all(),
+ DataDir = proplists:get_value(data_dir, Config),
+ Echo = filename:join(DataDir, "my_echo"),
+
+ comp("one", os:cmd(Echo ++ " one")),
+ comp("one::two", os:cmd(Echo ++ " one two")),
+ comp("one two", os:cmd(Echo ++ " \"one two\"")),
+ comp("x::one two::y", os:cmd(Echo ++ " x \"one two\" y")),
+ comp("x::one two", os:cmd(Echo ++ " x \"one two\"")),
+ comp("one two::y", os:cmd(Echo ++ " \"one two\" y")),
+ comp("x::::y", os:cmd(Echo ++ " x \"\" y")),
+ ct:sleep(5),
+ [] = receive_all(),
ok.
-cmd_unicode(doc) -> "Test that unicode arguments work.";
-cmd_unicode(suite) -> [];
+%% Test that unicode arguments work.
cmd_unicode(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line Echo = filename:join(DataDir, "my_echo"),
-
- ?line comp("one", os:cmd(Echo ++ " one")),
- ?line comp("one::two", os:cmd(Echo ++ " one two")),
- ?line comp("åäö::ϼΩ", os:cmd(Echo ++ " åäö " ++ [1020, 937])),
- ?t:sleep(5),
- ?line [] = receive_all(),
+ DataDir = proplists:get_value(data_dir, Config),
+ Echo = filename:join(DataDir, "my_echo"),
+
+ comp("one", os:cmd(Echo ++ " one")),
+ comp("one::two", os:cmd(Echo ++ " one two")),
+ comp("åäö::ϼΩ", os:cmd(Echo ++ " åäö " ++ [1020, 937])),
+ ct:sleep(5),
+ [] = receive_all(),
ok.
-space_in_name(doc) ->
- "Test that program with a space in its name can be executed.";
-space_in_name(suite) -> [];
+%% Test that program with a space in its name can be executed.
space_in_name(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line DataDir = ?config(data_dir, Config),
- ?line Spacedir = filename:join(PrivDir, "program files"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ Spacedir = filename:join(PrivDir, "program files"),
Ext = case os:type() of
{win32,_} -> ".exe";
_ -> ""
end,
- ?line OrigEcho = filename:join(DataDir, "my_echo" ++ Ext),
- ?line Echo0 = filename:join(Spacedir, "my_echo" ++ Ext),
+ OrigEcho = filename:join(DataDir, "my_echo" ++ Ext),
+ Echo0 = filename:join(Spacedir, "my_echo" ++ Ext),
%% Copy the `my_echo' program to a directory whose name contains a space.
- ?line ok = file:make_dir(Spacedir),
- ?line {ok, Bin} = file:read_file(OrigEcho),
- ?line ok = file:write_file(Echo0, Bin),
- ?line Echo = filename:nativename(Echo0),
- ?line ok = file:change_mode(Echo, 8#777), % Make it executable on Unix.
+ ok = file:make_dir(Spacedir),
+ {ok, Bin} = file:read_file(OrigEcho),
+ ok = file:write_file(Echo0, Bin),
+ Echo = filename:nativename(Echo0),
+ ok = file:change_mode(Echo, 8#777), % Make it executable on Unix.
%% Run the echo program.
%% Quoting on windows depends on if the full path of the executable
@@ -146,78 +150,74 @@ space_in_name(Config) when is_list(Config) ->
_ ->
"\""
end,
- ?line comp("", os:cmd(Quote ++ Echo ++ Quote)),
- ?line comp("a::b::c", os:cmd(Quote ++ Echo ++ Quote ++ " a b c")),
- ?t:sleep(5),
- ?line [] = receive_all(),
+ comp("", os:cmd(Quote ++ Echo ++ Quote)),
+ comp("a::b::c", os:cmd(Quote ++ Echo ++ Quote ++ " a b c")),
+ ct:sleep(5),
+ [] = receive_all(),
ok.
-bad_command(doc) ->
- "Check that a bad command doesn't crasch the server or the emulator (it used to).";
-bad_command(suite) -> [];
+%% Check that a bad command doesn't crasch the server or the emulator (it used to).
bad_command(Config) when is_list(Config) ->
- ?line catch os:cmd([a|b]),
- ?line catch os:cmd({bad, thing}),
+ catch os:cmd([a|b]),
+ catch os:cmd({bad, thing}),
%% This should at least not crash (on Unix it typically returns
%% a message from the shell).
- ?line os:cmd("xxxxx"),
+ os:cmd("xxxxx"),
ok.
-find_executable(suite) -> [];
-find_executable(doc) -> [];
find_executable(Config) when is_list(Config) ->
case os:type() of
{win32, _} ->
- ?line DataDir = filename:join(?config(data_dir, Config), "win32"),
- ?line ok = file:set_cwd(filename:join([DataDir, "current"])),
- ?line Bin = filename:join(DataDir, "bin"),
- ?line Abin = filename:join(DataDir, "abin"),
- ?line UsrBin = filename:join([DataDir, "usr", "bin"]),
- ?line {ok, Current} = file:get_cwd(),
+ DataDir = filename:join(proplists:get_value(data_dir, Config), "win32"),
+ ok = file:set_cwd(filename:join([DataDir, "current"])),
+ Bin = filename:join(DataDir, "bin"),
+ Abin = filename:join(DataDir, "abin"),
+ UsrBin = filename:join([DataDir, "usr", "bin"]),
+ {ok, Current} = file:get_cwd(),
- ?line Path = lists:concat([Bin, ";", Abin, ";", UsrBin]),
- ?line io:format("Path = ~s", [Path]),
+ Path = lists:concat([Bin, ";", Abin, ";", UsrBin]),
+ io:format("Path = ~s", [Path]),
%% Search for programs in Bin (second element in PATH).
- ?line find_exe(Abin, "my_ar", ".exe", Path),
- ?line find_exe(Abin, "my_ascii", ".com", Path),
- ?line find_exe(Abin, "my_adb", ".bat", Path),
+ find_exe(Abin, "my_ar", ".exe", Path),
+ find_exe(Abin, "my_ascii", ".com", Path),
+ find_exe(Abin, "my_adb", ".bat", Path),
%% OTP-3626 find names of executables given with extension
- ?line find_exe(Abin, "my_ar.exe", "", Path),
- ?line find_exe(Abin, "my_ascii.com", "", Path),
- ?line find_exe(Abin, "my_adb.bat", "", Path),
- ?line find_exe(Abin, "my_ar.EXE", "", Path),
- ?line find_exe(Abin, "my_ascii.COM", "", Path),
- ?line find_exe(Abin, "MY_ADB.BAT", "", Path),
+ find_exe(Abin, "my_ar.exe", "", Path),
+ find_exe(Abin, "my_ascii.com", "", Path),
+ find_exe(Abin, "my_adb.bat", "", Path),
+ find_exe(Abin, "my_ar.EXE", "", Path),
+ find_exe(Abin, "my_ascii.COM", "", Path),
+ find_exe(Abin, "MY_ADB.BAT", "", Path),
%% Search for programs in Abin (second element in PATH).
- ?line find_exe(Abin, "my_ar", ".exe", Path),
- ?line find_exe(Abin, "my_ascii", ".com", Path),
- ?line find_exe(Abin, "my_adb", ".bat", Path),
+ find_exe(Abin, "my_ar", ".exe", Path),
+ find_exe(Abin, "my_ascii", ".com", Path),
+ find_exe(Abin, "my_adb", ".bat", Path),
%% Search for programs in the current working directory.
- ?line find_exe(Current, "my_program", ".exe", Path),
- ?line find_exe(Current, "my_command", ".com", Path),
- ?line find_exe(Current, "my_batch", ".bat", Path),
+ find_exe(Current, "my_program", ".exe", Path),
+ find_exe(Current, "my_command", ".com", Path),
+ find_exe(Current, "my_batch", ".bat", Path),
ok;
{unix, _} ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% Smoke test.
case lib:progname() of
erl ->
- ?line ErlPath = os:find_executable("erl"),
- ?line true = is_list(ErlPath),
- ?line true = filelib:is_regular(ErlPath);
+ ErlPath = os:find_executable("erl"),
+ true = is_list(ErlPath),
+ true = filelib:is_regular(ErlPath);
_ ->
%% Don't bother -- the progname could include options.
ok
end,
%% Never return a directory name.
- ?line false = os:find_executable("unix", [DataDir]),
+ false = os:find_executable("unix", [DataDir]),
ok
end.
@@ -233,29 +233,23 @@ find_exe(Where, Name, Ext, Path) ->
Other ->
io:format("Expected ~p; got (converted to absolute) ~p",
[Expected, Other]),
- test_server:fail()
+ ct:fail(failed)
end;
Other ->
io:format("Expected ~p; got ~p", [Expected, Other]),
- test_server:fail()
+ ct:fail(failed)
end.
-unix_comment_in_command(doc) ->
- "OTP-1805: Test that os:cmd(\"ls #\") works correctly (used to hang).";
-unix_comment_in_command(suite) -> [];
+%% OTP-1805: Test that os:cmd(\ls #\) works correctly (used to hang).
unix_comment_in_command(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(20)),
- ?line Priv = ?config(priv_dir, Config),
- ?line ok = file:set_cwd(Priv),
- ?line _ = os:cmd("ls #"), % Any result is ok.
- ?t:sleep(5),
- ?line [] = receive_all(),
- ?line test_server:timetrap_cancel(Dog),
+ Priv = proplists:get_value(priv_dir, Config),
+ ok = file:set_cwd(Priv),
+ _ = os:cmd("ls #"), % Any result is ok.
+ ct:sleep(5),
+ [] = receive_all(),
ok.
-deep_list_command(doc) ->
- "Check that a deep list in command works equally on unix and on windows.";
-deep_list_command(suite) -> [];
+%% Check that a deep list in command works equally on unix and on windows.
deep_list_command(Config) when is_list(Config) ->
%% As a 'io_lib' module description says: "There is no guarantee that the
%% character lists returned from some of the functions are flat, they can
@@ -267,50 +261,46 @@ deep_list_command(Config) when is_list(Config) ->
%% FYI: [$e, $c, "ho"] =:= io_lib:format("ec~s", ["ho"])
ok.
-
--define(EVIL_PROCS, 100).
--define(EVIL_LOOPS, 100).
--define(PORT_CREATOR, os_cmd_port_creator).
-evil(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:minutes(5)),
- Parent = self(),
- Ps = lists:map(fun (N) ->
- spawn_link(fun () ->
- evil_loop(Parent, ?EVIL_LOOPS,N)
- end)
- end, lists:seq(1, ?EVIL_PROCS)),
- Devil = spawn_link(fun () -> devil(hd(Ps), hd(lists:reverse(Ps))) end),
- lists:foreach(fun (P) -> receive {P, done} -> ok end end, Ps),
- unlink(Devil),
- exit(Devil, kill),
- test_server:timetrap_cancel(Dog),
- ok.
-
-devil(P1, P2) ->
- erlang:display({?PORT_CREATOR, whereis(?PORT_CREATOR)}),
- (catch ?PORT_CREATOR ! lists:seq(1,1000000)),
- (catch ?PORT_CREATOR ! lists:seq(1,666)),
- (catch ?PORT_CREATOR ! grrrrrrrrrrrrrrrr),
- (catch ?PORT_CREATOR ! {'EXIT', P1, buhuuu}),
- (catch ?PORT_CREATOR ! {'EXIT', hd(erlang:ports()), buhuuu}),
- (catch ?PORT_CREATOR ! {'EXIT', P2, arggggggg}),
- receive after 500 -> ok end,
- (catch exit(whereis(?PORT_CREATOR), kill)),
- (catch ?PORT_CREATOR ! ">8|"),
- receive after 500 -> ok end,
- (catch exit(whereis(?PORT_CREATOR), diiiiiiiiiiiiiiiiiiiie)),
- receive after 100 -> ok end,
- devil(P1, P2).
-
-evil_loop(Parent, Loops, N) ->
- Res = integer_to_list(N),
- evil_loop(Parent, Loops, Res, "echo " ++ Res).
-
-evil_loop(Parent, 0, _Res, _Cmd) ->
- Parent ! {self(), done};
-evil_loop(Parent, Loops, Res, Cmd) ->
- comp(Res, os:cmd(Cmd)),
- evil_loop(Parent, Loops-1, Res, Cmd).
+%% Test to take sure that the correct data is
+%% received when doing large commands.
+large_output_command(Config) when is_list(Config) ->
+ %% Maximum allowed on windows is 8192, so we test well below that
+ AAA = lists:duplicate(7000, $a),
+ comp(AAA,os:cmd("echo " ++ AAA)).
+
+%% Test that the os:perf_counter api works as expected
+perf_counter_api(_Config) ->
+
+ true = is_integer(os:perf_counter()),
+ true = os:perf_counter() > 0,
+
+ T1 = os:perf_counter(),
+ timer:sleep(100),
+ T2 = os:perf_counter(),
+ TsDiff = erlang:convert_time_unit(T2 - T1, perf_counter, nano_seconds),
+ ct:pal("T1: ~p~n"
+ "T2: ~p~n"
+ "TsDiff: ~p~n",
+ [T1,T2,TsDiff]),
+
+ %% We allow a 15% diff
+ true = TsDiff < 115000000,
+ true = TsDiff > 85000000,
+
+ T1Ms = os:perf_counter(1000),
+ timer:sleep(100),
+ T2Ms = os:perf_counter(1000),
+ MsDiff = T2Ms - T1Ms,
+ ct:pal("T1Ms: ~p~n"
+ "T2Ms: ~p~n"
+ "MsDiff: ~p~n",
+ [T1Ms,T2Ms,MsDiff]),
+
+ %% We allow a 15% diff
+ true = MsDiff < 115,
+ true = MsDiff > 85.
+
+%% Util functions
comp(Expected, Got) ->
case strip_nl(Got) of
@@ -319,7 +309,7 @@ comp(Expected, Got) ->
Other ->
ok = io:format("Expected: ~ts\n", [Expected]),
ok = io:format("Got: ~ts\n", [Other]),
- test_server:fail()
+ ct:fail(failed)
end.
%% Like lib:nonl/1, but strips \r as well as \n.
diff --git a/lib/kernel/test/pdict_SUITE.erl b/lib/kernel/test/pdict_SUITE.erl
index 6de4ff9f77..638d99176e 100644
--- a/lib/kernel/test/pdict_SUITE.erl
+++ b/lib/kernel/test/pdict_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,10 +18,9 @@
%% %CopyrightEnd%
%%
-module(pdict_SUITE).
-%% NB: The ?line macro cannot be used when testing the dictionary.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(M(A,B),m(A,B,?MODULE,?LINE)).
-ifdef(DEBUG).
@@ -32,22 +31,24 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
+ mixed/1,
simple/1, complicated/1, heavy/1, simple_all_keys/1, info/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
-export([other_process/2]).
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(test_server:minutes(10)),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
- [simple, complicated, heavy, simple_all_keys, info].
+ [simple, complicated, heavy, simple_all_keys, info,
+ mixed].
groups() ->
[].
@@ -65,10 +66,7 @@ end_per_group(_GroupName, Config) ->
Config.
-simple(doc) ->
- ["Tests simple functionality in process dictionary."];
-simple(suite) ->
- [];
+%% Tests simple functionality in process dictionary.
simple(Config) when is_list(Config) ->
XX = get(),
ok = match_keys(XX),
@@ -109,7 +107,7 @@ complicated(Config) when is_list(Config) ->
Previous = get(),
ok = match_keys(Previous),
Previous = erase(),
- N = case ?t:is_debug() of
+ N = case test_server:is_debug() of
false -> 500000;
true -> 5000
end,
@@ -143,10 +141,7 @@ comp_4([{{key,_}=K,{value,_}=Val}|T]) ->
comp_4(T);
comp_4([]) -> ok.
-heavy(doc) ->
- ["Tests heavy usage of the process dictionary"];
-heavy(suite) ->
- [];
+%% Tests heavy usage of the process dictionary.
heavy(Config) when is_list(Config) ->
XX = get(),
erase(),
@@ -156,7 +151,7 @@ heavy(Config) when is_list(Config) ->
?M([],get()),
time(5000),
?M([],get()),
- case {os:type(),?t:is_debug()} of
+ case {os:type(),test_server:is_debug()} of
{_,true} -> ok;
_ ->
time(50000),
@@ -185,10 +180,7 @@ simple_all_keys_del_loop([K|Ks]) ->
ok = match_keys(get()),
simple_all_keys_del_loop(Ks).
-info(doc) ->
- ["Tests process_info(Pid, dictionary)"];
-info(suite) ->
- [];
+%% Tests process_info(Pid, dictionary).
info(Config) when is_list(Config) ->
L = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,
q,r,s,t,u,v,x,y,z,'A','B','C','D'],
@@ -369,3 +361,60 @@ match_keys(All) ->
Ks = lists:sort([K||{K,_}<-All]),
Ks = lists:sort(erlang:get_keys()),
ok.
+
+
+%% Do random mixed put/erase to test grow/shrink
+%% Written for a temporary bug in gc during shrink
+mixed(_Config) ->
+ Rand0 = rand:seed_s(exsplus),
+ io:format("Random seed = ~p\n\n", [rand:export_seed_s(Rand0)]),
+
+ erts_debug:set_internal_state(available_internal_state, true),
+ try
+ C = do_mixed([10,0,100,50,1000,500,600,100,150,1,11,2,30,0],
+ 0,
+ array:new(),
+ 1,
+ Rand0),
+ io:format("\nDid total of ~p operations\n", [C])
+ after
+ erts_debug:set_internal_state(available_internal_state, false)
+ end.
+
+do_mixed([], _, _, C, _) ->
+ C;
+do_mixed([GoalN | Tail], GoalN, Array, C, Rand0) ->
+ io:format("Reached goal of ~p keys in dict after ~p mixed ops\n",[GoalN, C]),
+ GoalN = array:size(Array),
+ do_mixed(Tail, GoalN, Array, C, Rand0);
+do_mixed([GoalN | _]=Goals, CurrN, Array0, C, Rand0) ->
+ CurrN = array:size(Array0),
+ GrowPercent = case GoalN > CurrN of
+ true when CurrN == 0 -> 100;
+ true -> 75;
+ false -> 25
+ end,
+ {R, Rand1} = rand:uniform_s(100, Rand0),
+ case R of
+ _ when R =< GrowPercent -> %%%%%%%%%%%%% GROW
+ {Key, Rand2} = rand:uniform_s(10000, Rand1),
+ case put(Key, {Key,C}) of
+ undefined ->
+ Array1 = array:set(CurrN, Key, Array0),
+ do_mixed(Goals, CurrN+1, Array1, C+1, Rand2);
+ _ ->
+ do_mixed(Goals, CurrN, Array0, C+1, Rand2)
+ end;
+
+ _ -> %%%%%%%%%% SHRINK
+ {Kix, Rand2} = rand:uniform_s(CurrN, Rand1),
+ Key = array:get(Kix-1, Array0),
+
+ %% provoke GC during shrink
+ erts_debug:set_internal_state(fill_heap, true),
+
+ {Key, _} = erase(Key),
+ Array1 = array:set(Kix-1, array:get(CurrN-1, Array0), Array0),
+ Array2 = array:resize(CurrN-1, Array1),
+ do_mixed(Goals, CurrN-1, Array2, C+1, Rand2)
+ end.
diff --git a/lib/kernel/test/pg2_SUITE.erl b/lib/kernel/test/pg2_SUITE.erl
index 832d2d1c27..fdc268cb5a 100644
--- a/lib/kernel/test/pg2_SUITE.erl
+++ b/lib/kernel/test/pg2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,9 +21,9 @@
%%-----------------------------------------------------------------
-module(pg2_SUITE).
--include_lib("test_server/include/test_server.hrl").
--define(datadir, ?config(data_dir, Config)).
--define(privdir, ?config(priv_dir, Config)).
+-include_lib("common_test/include/ct.hrl").
+-define(datadir, proplists:get_value(data_dir, Config)).
+-define(privdir, proplists:get_value(priv_dir, Config)).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
@@ -33,27 +33,23 @@
otp_7277/1, otp_8259/1, otp_8653/1,
compat/1, basic/1]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-
-define(TESTCASE, testcase_name).
--define(testcase, ?config(?TESTCASE, Config)).
+-define(testcase, proplists:get_value(?TESTCASE, Config)).
%% Internal export.
-export([mk_part_node_and_group/3, part2/4,
mk_part_node/3, part1/5, p_init/3, start_proc/1, sane/0]).
init_per_testcase(Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{?TESTCASE, Case}, {watchdog, Dog} | Config].
+ [{?TESTCASE, Case}| Config].
end_per_testcase(_Case, _Config) ->
test_server_ctrl:kill_slavenodes(),
- Dog = ?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[{group, tickets}].
@@ -76,67 +72,59 @@ end_per_group(_GroupName, Config) ->
-otp_7277(doc) ->
- "OTP-7277. Bugfix leave().";
-otp_7277(suite) -> [];
+%% OTP-7277. Bugfix leave().
otp_7277(Config) when is_list(Config) ->
- ?line ok = pg2:create(a),
- ?line ok = pg2:create(b),
+ ok = pg2:create(a),
+ ok = pg2:create(b),
P = spawn(forever()),
- ?line ok = pg2:join(a, P),
- ?line ok = pg2:leave(b, P),
- ?line true = exit(P, kill),
+ ok = pg2:join(a, P),
+ ok = pg2:leave(b, P),
+ true = exit(P, kill),
case {pg2:get_members(a), pg2:get_local_members(a)} of
{[], []} ->
ok;
_ ->
timer:sleep(100),
- ?line [] = pg2:get_members(a),
- ?line [] = pg2:get_local_members(a)
+ [] = pg2:get_members(a),
+ [] = pg2:get_local_members(a)
end,
- ?line _ = pg2:delete(a),
- ?line _ = pg2:delete(b),
+ _ = pg2:delete(a),
+ _ = pg2:delete(b),
ok.
-define(UNTIL(Seq), loop_until_true(fun() -> Seq end, Config)).
-define(UNTIL_LOOP, 300).
-otp_8653(suite) -> [];
-otp_8653(doc) ->
- ["OTP-8259. Member was not removed after being killed."];
+%% OTP-8259. Member was not removed after being killed.
otp_8653(Config) when is_list(Config) ->
- Timeout = 15,
- ?line Dog = test_server:timetrap({seconds,Timeout}),
-
- ?line [A, B, C] = start_nodes([a, b, c], peer, Config),
+ [A, B, C] = start_nodes([a, b, c], peer, Config),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
- % make b and c connected, partitioned from node() and a
- ?line rpc_cast(B, ?MODULE, part2, [Config, node(), A, C]),
- ?line ?UNTIL(is_ready_partition(Config)),
+ %% make b and c connected, partitioned from node() and a
+ rpc_cast(B, ?MODULE, part2, [Config, node(), A, C]),
+ ?UNTIL(is_ready_partition(Config)),
- % Connect to the other partition.
- ?line pong = net_adm:ping(B),
+ %% Connect to the other partition.
+ pong = net_adm:ping(B),
timer:sleep(100),
- ?line pong = net_adm:ping(C),
- ?line _ = global:sync(),
- ?line [A, B, C] = lists:sort(nodes()),
+ pong = net_adm:ping(C),
+ _ = global:sync(),
+ [A, B, C] = lists:sort(nodes()),
G = pg2_otp_8653,
- ?line ?UNTIL(begin
- GA = lists:sort(rpc:call(A, pg2, get_members, [G])),
- GB = lists:sort(rpc:call(B, pg2, get_members, [G])),
- GC = lists:sort(rpc:call(C, pg2, get_members, [G])),
- GT = lists:sort(pg2:get_members(G)),
- GA =:= GB andalso
- GB =:= GC andalso
- GC =:= GT andalso
- 8 =:= length(GA)
- end),
- ?line ok = pg2:delete(G),
- ?line stop_nodes([A,B,C]),
- ?line test_server:timetrap_cancel(Dog),
+ ?UNTIL(begin
+ GA = lists:sort(rpc:call(A, pg2, get_members, [G])),
+ GB = lists:sort(rpc:call(B, pg2, get_members, [G])),
+ GC = lists:sort(rpc:call(C, pg2, get_members, [G])),
+ GT = lists:sort(pg2:get_members(G)),
+ GA =:= GB andalso
+ GB =:= GC andalso
+ GC =:= GT andalso
+ 8 =:= length(GA)
+ end),
+ ok = pg2:delete(G),
+ stop_nodes([A,B,C]),
ok.
part2(Config, Main, A, C) ->
@@ -158,54 +146,48 @@ mk_part_node_and_group(File, MyPart0, Config) ->
_ = [ok = pg2:join(G, Pid) || _ <- [1,1]],
touch(File, "done").
-otp_8259(suite) -> [];
-otp_8259(doc) ->
- ["OTP-8259. Member was not removed after being killed."];
+%% OTP-8259. Member was not removed after being killed.
otp_8259(Config) when is_list(Config) ->
- Timeout = 15,
- ?line Dog = test_server:timetrap({seconds,Timeout}),
-
- ?line [A, B, C] = start_nodes([a, b, c], peer, Config),
+ [A, B, C] = start_nodes([a, b, c], peer, Config),
- ?line wait_for_ready_net(Config),
+ wait_for_ready_net(Config),
G = pg2_otp_8259,
Name = otp_8259_a_global_name,
- % start different processes in both partitions
- ?line {Pid, yes} = rpc:call(A, ?MODULE, start_proc, [Name]),
+ %% start different processes in both partitions
+ {Pid, yes} = rpc:call(A, ?MODULE, start_proc, [Name]),
- ?line ok = pg2:create(G),
- ?line ok = pg2:join(G, Pid),
+ ok = pg2:create(G),
+ ok = pg2:join(G, Pid),
- % make b and c connected, partitioned from node() and a
- ?line rpc_cast(B, ?MODULE, part1, [Config, node(), A, C, Name]),
- ?line ?UNTIL(is_ready_partition(Config)),
+ %% make b and c connected, partitioned from node() and a
+ rpc_cast(B, ?MODULE, part1, [Config, node(), A, C, Name]),
+ ?UNTIL(is_ready_partition(Config)),
- % Connect to the other partition.
- % The resolver on node b will be called.
- ?line pong = net_adm:ping(B),
+ %% Connect to the other partition.
+ %% The resolver on node b will be called.
+ pong = net_adm:ping(B),
timer:sleep(100),
- ?line pong = net_adm:ping(C),
- ?line _ = global:sync(),
- ?line [A, B, C] = lists:sort(nodes()),
+ pong = net_adm:ping(C),
+ _ = global:sync(),
+ [A, B, C] = lists:sort(nodes()),
%% Pid has been killed by the resolver.
%% Pid has been removed from pg2 on all nodes, in particular node B.
- ?line ?UNTIL([] =:= rpc:call(B, pg2, get_members, [G])),
- ?line ?UNTIL([] =:= pg2:get_members(G)),
- ?line ?UNTIL([] =:= rpc:call(A, pg2, get_members, [G])),
- ?line ?UNTIL([] =:= rpc:call(C, pg2, get_members, [G])),
-
- ?line ok = pg2:delete(G),
- ?line stop_nodes([A,B,C]),
- ?line test_server:timetrap_cancel(Dog),
+ ?UNTIL([] =:= rpc:call(B, pg2, get_members, [G])),
+ ?UNTIL([] =:= pg2:get_members(G)),
+ ?UNTIL([] =:= rpc:call(A, pg2, get_members, [G])),
+ ?UNTIL([] =:= rpc:call(C, pg2, get_members, [G])),
+
+ ok = pg2:delete(G),
+ stop_nodes([A,B,C]),
ok.
part1(Config, Main, A, C, Name) ->
case catch begin
make_partition(Config, [Main, A], [node(), C]),
- ?line {_Pid, yes} = start_proc(Name)
+ {_Pid, yes} = start_proc(Name)
end of
{_, yes} -> ok
end.
@@ -236,39 +218,33 @@ loop() ->
exit(normal)
end.
-compat(suite) -> [];
-compat(doc) ->
- ["OTP-8259. Check that 'exchange' and 'del_member' work."];
+%% OTP-8259. Check that 'exchange' and 'del_member' work.
compat(Config) when is_list(Config) ->
- case ?t:is_release_available("r13b") of
+ case test_server:is_release_available("r13b") of
true ->
- Timeout = 15,
- ?line Dog = test_server:timetrap({seconds,Timeout}),
Pid = spawn(forever()),
G = a,
- ?line ok = pg2:create(G),
- ?line ok = pg2:join(G, Pid),
- ?line ok = pg2:join(G, Pid),
- ?line {ok, A} = start_node_rel(r13, r13b, slave),
- ?line pong = net_adm:ping(A),
- ?line wait_for_ready_net(Config),
- ?line {ok, _} = rpc:call(A, pg2, start, []),
- ?line ?UNTIL([Pid,Pid] =:= rpc:call(A, pg2, get_members, [a])),
- ?line true = exit(Pid, kill),
- ?line ?UNTIL([] =:= pg2:get_members(a)),
- ?line ?UNTIL([] =:= rpc:call(A, pg2, get_members, [a])),
- ?t:stop_node(A),
- ?line test_server:timetrap_cancel(Dog);
+ ok = pg2:create(G),
+ ok = pg2:join(G, Pid),
+ ok = pg2:join(G, Pid),
+ {ok, A} = start_node_rel(r13, r13b, slave),
+ pong = net_adm:ping(A),
+ wait_for_ready_net(Config),
+ {ok, _} = rpc:call(A, pg2, start, []),
+ ?UNTIL([Pid,Pid] =:= rpc:call(A, pg2, get_members, [a])),
+ true = exit(Pid, kill),
+ ?UNTIL([] =:= pg2:get_members(a)),
+ ?UNTIL([] =:= rpc:call(A, pg2, get_members, [a])),
+ test_server:stop_node(A),
+ ok;
false ->
{skipped, "No support for old node"}
end.
-basic(suite) -> [];
-basic(doc) ->
- ["OTP-8259. Some basic tests."];
+%% OTP-8259. Some basic tests.
basic(Config) when is_list(Config) ->
_ = [pg2:delete(G) || G <- pg2:which_groups()],
- ?line _ = [do(Cs, T, Config) || {T,Cs} <- ts()],
+ _ = [do(Cs, T, Config) || {T,Cs} <- ts()],
ok.
ts() ->
@@ -373,7 +349,7 @@ ts() ->
].
do(Cs, T, Config) ->
- ?t:format("*** Test ~p ***~n", [T]),
+ io:format("*** Test ~p ***~n", [T]),
{ok,T} = (catch {do(Cs, [], [], Config),T}).
do([{nodeup,N} | Cs], Ps, Ns, Config) ->
@@ -425,7 +401,7 @@ doit(N, C, Ps, Ns) ->
Result when Result =:= R orelse R =:= ignore ->
sane(Ns);
Else ->
- ?t:format("~p and ~p: expected ~p, but got ~p~n",
+ io:format("~p and ~p: expected ~p, but got ~p~n",
[F, As, R, Else]),
throw({error,{F, As, R, Else}})
end.
@@ -446,8 +422,8 @@ killit(N, P, Ps, Ns) ->
lists:keydelete(P, 1, Ps).
pr(Node, C) ->
- _ = [?t:format("~p: ", [Node]) || Node =/= node()],
- ?t:format("do ~p~n", [C]).
+ _ = [io:format("~p: ", [Node]) || Node =/= node()],
+ io:format("do ~p~n", [C]).
get_node(N, Ns) ->
if
@@ -475,7 +451,7 @@ replace_pids(A, Ps) ->
sane(Ns) ->
Nodes = [node()] ++ [NN || {_,NN} <- Ns],
- _ = [?t:format("~p, pg2_table:~n ~p~n", % debug
+ _ = [io:format("~p, pg2_table:~n ~p~n", % debug
[N, rpc:call(N, ets, tab2list, [pg2_table])]) ||
N <- Nodes],
R = [case rpc:call(Node, ?MODULE, sane, []) of
@@ -509,7 +485,7 @@ wsane(Ns) ->
Pid when is_pid(Pid), node(Pid) =:= N ->
true =
lists:member(Pid, rpc:call(N, pg2, get_local_members, [G]));
-%% FIXME. Om annan nod: member, local = [].
+ %% FIXME. Om annan nod: member, local = [].
_ -> [] = rpc:call(N, pg2, get_local_members, [G])
end || N <- Ns]
|| G <- pg2:which_groups()].
@@ -558,21 +534,21 @@ start_node_rel(Name, Rel, How) ->
Rel when is_atom(Rel) ->
{[{release, atom_to_list(Rel)}], ""};
RelList ->
- {RelList, ""}
- end,
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line Res = test_server:start_node(Name, How,
- [{args,
- Compat ++
- " -kernel net_setuptime 100 "
- " -pa " ++ Pa},
- {erl, Release}]),
+ {RelList, ""}
+ end,
+ Pa = filename:dirname(code:which(?MODULE)),
+ Res = test_server:start_node(Name, How,
+ [{args,
+ Compat ++
+ " -kernel net_setuptime 100 "
+ " -pa " ++ Pa},
+ {erl, Release}]),
Res.
start_nodes(L, How, Config) ->
start_nodes2(L, How, 0, Config),
Nodes = collect_nodes(0, length(L)),
- ?line ?UNTIL([] =:= Nodes -- nodes()),
+ ?UNTIL([] =:= Nodes -- nodes()),
%% Pinging doesn't help, we have to wait too, for nodes() to become
%% correct on the other node.
lists:foreach(fun(E) ->
@@ -588,7 +564,7 @@ verify_nodes(Nodes, Config) ->
verify_nodes([], _N, _Config) ->
[];
verify_nodes([Node | Rest], N, Config) ->
- ?line ?UNTIL(
+ ?UNTIL(
case rpc:call(Node, erlang, nodes, []) of
Nodes when is_list(Nodes) ->
case N =:= lists:sort([Node | Nodes]) of
@@ -620,7 +596,7 @@ start_nodes2([Name | Rest], How, N, Config) ->
Self ! {N, R},
%% sleeping is necessary, or with peer nodes, they will
%% go down again, despite {linked, false}.
- test_server:sleep(100000)
+ ct:sleep(100000)
end),
start_nodes2(Rest, How, N+1, Config).
@@ -640,7 +616,7 @@ start_node(Name0, How, Args, Config) ->
Pa = filename:dirname(code:which(?MODULE)),
test_server:start_node(Name, How, [{args,
Args ++ " " ++
- "-kernel net_setuptime 100 "
+ "-kernel net_setuptime 100 "
"-noshell "
"-pa " ++ Pa},
{linked, false}]).
@@ -648,7 +624,7 @@ stop_nodes(Nodes) ->
lists:foreach(fun(Node) -> stop_node(Node) end, Nodes).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
get_known(Node) ->
case catch gen_server:call({global_name_server,Node},get_known,infinity) of
@@ -672,7 +648,7 @@ make_partition(Config, Part1, Part2) ->
make_partition(Config, Part1, Part2, mk_part_node).
make_partition(Config, Part1, Part2, Function) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
Ns = [begin
Name = lists:concat([atom_to_list(N),"_",msec(),".part"]),
File = filename:join([Dir, Name]),
@@ -726,13 +702,13 @@ wait_for_ready_net(Config) ->
wait_for_ready_net(Nodes0, Config) ->
Nodes = lists:sort(Nodes0),
- ?t:format("wait_for_ready_net ~p~n", [Nodes]),
+ io:format("wait_for_ready_net ~p~n", [Nodes]),
?UNTIL(begin
lists:all(fun(N) -> Nodes =:= get_known(N) end, Nodes) and
- lists:all(fun(N) ->
- LNs = rpc:call(N, erlang, nodes, []),
- Nodes =:= lists:sort([N | LNs])
- end, Nodes)
+ lists:all(fun(N) ->
+ LNs = rpc:call(N, erlang, nodes, []),
+ Nodes =:= lists:sort([N | LNs])
+ end, Nodes)
end).
%% To make it less probable that some low-level problem causes
@@ -788,11 +764,11 @@ file_contents(File, ContentsList, Config, LogFile) ->
end).
make_partition_file(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
filename:join([Dir, atom_to_list(make_partition_done)]).
msec() ->
msec(now()).
msec(T) ->
- element(1,T)*1000000000 + element(2,T)*1000 + element(3,T) div 1000.
+ element(1,T)*1000000000 + element(2,T)*1000 + element(3,T) div 1000.
diff --git a/lib/kernel/test/prim_file_SUITE.erl b/lib/kernel/test/prim_file_SUITE.erl
index 3e6d8492f7..8be94f1e57 100644
--- a/lib/kernel/test/prim_file_SUITE.erl
+++ b/lib/kernel/test/prim_file_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@
file_write_file_info_a/1, file_write_file_info_b/1,
file_read_file_info_opts/1, file_write_file_info_opts/1,
file_write_read_file_info_opts/1
- ]).
+ ]).
-export([rename_a/1, rename_b/1,
access/1, truncate/1, datasync/1, sync/1,
read_write/1, pread_write/1, append/1, exclusive/1]).
@@ -62,7 +62,7 @@
-export([allocate/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-define(PRIM_FILE, prim_file).
@@ -105,7 +105,7 @@ groups() ->
file_write_file_info_a, file_write_file_info_b,
file_read_file_info_opts, file_write_file_info_opts,
file_write_read_file_info_opts
- ]},
+ ]},
{errors, [],
[e_delete, e_rename, e_make_dir, e_del_dir]},
{compression, [],
@@ -125,7 +125,7 @@ end_per_group(_GroupName, Config) ->
init_per_suite(Config) when is_list(Config) ->
case os:type() of
{win32, _} ->
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
HasAccessTime =
case file:read_file_info(Priv) of
{ok, #file_info{atime={_, {0, 0, 0}}}} ->
@@ -181,92 +181,86 @@ time_dist({_D1, _T1} = DT1, {_D2, _T2} = DT2) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-read_write_file(suite) -> [];
-read_write_file(doc) -> [];
read_write_file(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_read_write_file"),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_read_write_file"),
%% Try writing and reading back some term
- ?line SomeTerm = {"This term",{will,be},[written,$t,$o],1,file,[]},
- ?line ok = ?PRIM_FILE:write_file(Name,term_to_binary(SomeTerm)),
- ?line {ok,Bin1} = ?PRIM_FILE:read_file(Name),
- ?line SomeTerm = binary_to_term(Bin1),
-
+ SomeTerm = {"This term",{will,be},[written,$t,$o],1,file,[]},
+ ok = ?PRIM_FILE:write_file(Name,term_to_binary(SomeTerm)),
+ {ok,Bin1} = ?PRIM_FILE:read_file(Name),
+ SomeTerm = binary_to_term(Bin1),
+
%% Try a "null" term
- ?line NullTerm = [],
- ?line ok = ?PRIM_FILE:write_file(Name,term_to_binary(NullTerm)),
- ?line {ok,Bin2} = ?PRIM_FILE:read_file(Name),
- ?line NullTerm = binary_to_term(Bin2),
+ NullTerm = [],
+ ok = ?PRIM_FILE:write_file(Name,term_to_binary(NullTerm)),
+ {ok,Bin2} = ?PRIM_FILE:read_file(Name),
+ NullTerm = binary_to_term(Bin2),
%% Try some "complicated" types
- ?line BigNum = 123456789012345678901234567890,
- ?line ComplTerm = {self(),make_ref(),BigNum,3.14159},
- ?line ok = ?PRIM_FILE:write_file(Name,term_to_binary(ComplTerm)),
- ?line {ok,Bin3} = ?PRIM_FILE:read_file(Name),
- ?line ComplTerm = binary_to_term(Bin3),
+ BigNum = 123456789012345678901234567890,
+ ComplTerm = {self(),make_ref(),BigNum,3.14159},
+ ok = ?PRIM_FILE:write_file(Name,term_to_binary(ComplTerm)),
+ {ok,Bin3} = ?PRIM_FILE:read_file(Name),
+ ComplTerm = binary_to_term(Bin3),
%% Try reading a nonexistent file
- ?line Name2 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_nonexistent_file"),
- ?line {error, enoent} = ?PRIM_FILE:read_file(Name2),
- ?line {error, enoent} = ?PRIM_FILE:read_file(""),
-
- % Try writing to a bad filename
- ?line {error, enoent} =
+ Name2 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_nonexistent_file"),
+ {error, enoent} = ?PRIM_FILE:read_file(Name2),
+ {error, enoent} = ?PRIM_FILE:read_file(""),
+
+ %% Try writing to a bad filename
+ {error, enoent} =
?PRIM_FILE:write_file("",term_to_binary(NullTerm)),
- % Try writing something else than a binary
- ?line {error, badarg} = ?PRIM_FILE:write_file(Name,{1,2,3}),
- ?line {error, badarg} = ?PRIM_FILE:write_file(Name,self()),
+ %% Try writing something else than a binary
+ {error, badarg} = ?PRIM_FILE:write_file(Name,{1,2,3}),
+ {error, badarg} = ?PRIM_FILE:write_file(Name,self()),
%% Some non-term binaries
- ?line ok = ?PRIM_FILE:write_file(Name,[]),
- ?line {ok,Bin4} = ?PRIM_FILE:read_file(Name),
- ?line 0 = byte_size(Bin4),
+ ok = ?PRIM_FILE:write_file(Name,[]),
+ {ok,Bin4} = ?PRIM_FILE:read_file(Name),
+ 0 = byte_size(Bin4),
- ?line ok = ?PRIM_FILE:write_file(Name,[Bin1,[],[[Bin2]]]),
- ?line {ok,Bin5} = ?PRIM_FILE:read_file(Name),
- ?line {Bin1,Bin2} = split_binary(Bin5,byte_size(Bin1)),
+ ok = ?PRIM_FILE:write_file(Name,[Bin1,[],[[Bin2]]]),
+ {ok,Bin5} = ?PRIM_FILE:read_file(Name),
+ {Bin1,Bin2} = split_binary(Bin5,byte_size(Bin1)),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-make_del_dir_a(suite) -> [];
-make_del_dir_a(doc) -> [];
make_del_dir_a(Config) when is_list(Config) ->
make_del_dir(Config, [], "_a").
-make_del_dir_b(suite) -> [];
-make_del_dir_b(doc) -> [];
make_del_dir_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = make_del_dir(Config, Handle, "_b"),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
%% Just to make sure the state of the server makes a difference
- ?line {error, einval} = ?PRIM_FILE_call(get_cwd, Handle, []),
+ {error, einval} = ?PRIM_FILE_call(get_cwd, Handle, []),
Result.
make_del_dir(Config, Handle, Suffix) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_mk-dir"++Suffix),
- ?line ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
- ?line {error, eexist} = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
- ?line ok = ?PRIM_FILE_call(del_dir, Handle, [NewDir]),
- ?line {error, enoent} = ?PRIM_FILE_call(del_dir, Handle, [NewDir]),
-
- % Make sure we are not in a directory directly under test_server
- % as that would result in eacces errors when trying to delete '..',
- % because there are processes having that directory as current.
- ?line ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
- ?line {ok, CurrentDir} = ?PRIM_FILE_call(get_cwd, Handle, []),
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_mk-dir"++Suffix),
+ ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
+ {error, eexist} = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
+ ok = ?PRIM_FILE_call(del_dir, Handle, [NewDir]),
+ {error, enoent} = ?PRIM_FILE_call(del_dir, Handle, [NewDir]),
+
+ %% Make sure we are not in a directory directly under test_server
+ %% as that would result in eacces errors when trying to delete '..',
+ %% because there are processes having that directory as current.
+ ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
+ {ok, CurrentDir} = ?PRIM_FILE_call(get_cwd, Handle, []),
case {os:type(), length(NewDir) >= 260 } of
{{win32,_}, true} ->
io:format("Skip set_cwd for windows path longer than 260 (MAX_PATH)\n", []),
@@ -277,18 +271,18 @@ make_del_dir(Config, Handle, Suffix) ->
try
%% Check that we get an error when trying to create...
%% a deep directory
- ?line NewDir2 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_mk-dir-noexist/foo"),
- ?line {error, enoent} = ?PRIM_FILE_call(make_dir, Handle, [NewDir2]),
+ NewDir2 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_mk-dir-noexist/foo"),
+ {error, enoent} = ?PRIM_FILE_call(make_dir, Handle, [NewDir2]),
%% a nameless directory
- ?line {error, enoent} = ?PRIM_FILE_call(make_dir, Handle, [""]),
+ {error, enoent} = ?PRIM_FILE_call(make_dir, Handle, [""]),
%% a directory with illegal name
- ?line {error, badarg} = ?PRIM_FILE_call(make_dir, Handle, ['mk-dir']),
-
+ {error, badarg} = ?PRIM_FILE_call(make_dir, Handle, ['mk-dir']),
+
%% a directory with illegal name, even if it's a (bad) list
- ?line {error, badarg} = ?PRIM_FILE_call(make_dir, Handle, [[1,2,3,{}]]),
-
+ {error, badarg} = ?PRIM_FILE_call(make_dir, Handle, [[1,2,3,{}]]),
+
%% Maybe this isn't an error, exactly, but worth mentioning anyway:
%% ok = ?PRIM_FILE:make_dir([$f,$o,$o,0,$b,$a,$r])),
%% The above line works, and created a directory "./foo"
@@ -296,41 +290,37 @@ make_del_dir(Config, Handle, Suffix) ->
%% a directory, but with a name that incorporates the "bar" part of
%% the list, so that [$f,$o,$o,0,$f,$o,$o] wouldn't refer to the same
%% dir. But this would slow it down.
-
+
%% Try deleting some bad directories
%% Deleting the parent directory to the current, sounds dangerous, huh?
%% Don't worry ;-) the parent directory should never be empty, right?
- ?line case ?PRIM_FILE_call(del_dir, Handle, [".."]) of
- {error, eexist} -> ok;
- {error, eacces} -> ok; %OpenBSD
- {error, einval} -> ok %FreeBSD
- end,
- ?line {error, enoent} = ?PRIM_FILE_call(del_dir, Handle, [""]),
- ?line {error, badarg} = ?PRIM_FILE_call(del_dir, Handle, [[3,2,1,{}]])
+ case ?PRIM_FILE_call(del_dir, Handle, [".."]) of
+ {error, eexist} -> ok;
+ {error, eacces} -> ok; %OpenBSD
+ {error, einval} -> ok %FreeBSD
+ end,
+ {error, enoent} = ?PRIM_FILE_call(del_dir, Handle, [""]),
+ {error, badarg} = ?PRIM_FILE_call(del_dir, Handle, [[3,2,1,{}]])
after
- ?line ok = ?PRIM_FILE_call(set_cwd, Handle, [CurrentDir])
+ ok = ?PRIM_FILE_call(set_cwd, Handle, [CurrentDir])
end,
ok.
-cur_dir_0a(suite) -> [];
-cur_dir_0a(doc) -> [];
cur_dir_0a(Config) when is_list(Config) ->
cur_dir_0(Config, []).
-cur_dir_0b(suite) -> [];
-cur_dir_0b(doc) -> [];
cur_dir_0b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = cur_dir_0(Config, Handle),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
cur_dir_0(Config, Handle) ->
%% Find out the current dir, and cd to it ;-)
- ?line {ok,BaseDir} = ?PRIM_FILE_call(get_cwd, Handle, []),
- ?line Dir1 = BaseDir ++ "", %% Check that it's a string
- ?line ok = ?PRIM_FILE_call(set_cwd, Handle, [Dir1]),
- ?line DirName = atom_to_list(?MODULE) ++
+ {ok,BaseDir} = ?PRIM_FILE_call(get_cwd, Handle, []),
+ Dir1 = BaseDir ++ "", %% Check that it's a string
+ ok = ?PRIM_FILE_call(set_cwd, Handle, [Dir1]),
+ DirName = atom_to_list(?MODULE) ++
case Handle of
[] ->
"_curdir";
@@ -339,9 +329,9 @@ cur_dir_0(Config, Handle) ->
end,
%% Make a new dir, and cd to that
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir, DirName),
- ?line ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir, DirName),
+ ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
case {os:type(), length(NewDir) >= 260} of
{{win32,_}, true} ->
io:format("Skip set_cwd for windows path longer than 260 (MAX_PATH):\n"),
@@ -361,7 +351,7 @@ cur_dir_0(Config, Handle) ->
%% Delete the directory and return to the old current directory
%% and check that the created file isn't there (too!)
expect({error, einval}, {error, eacces}, {error, eexist},
- ?PRIM_FILE_call(del_dir, Handle, [NewDir])),
+ ?PRIM_FILE_call(del_dir, Handle, [NewDir])),
?PRIM_FILE_call(delete, Handle, [UncommonName]),
{ok,[]} = ?PRIM_FILE_call(list_dir, Handle, ["."]),
ok = ?PRIM_FILE_call(set_cwd, Handle, [Dir1]),
@@ -375,13 +365,13 @@ cur_dir_0(Config, Handle) ->
end,
%% Try doing some bad things
- ?line {error, badarg} =
+ {error, badarg} =
?PRIM_FILE_call(set_cwd, Handle, [{foo,bar}]),
- ?line {error, enoent} =
+ {error, enoent} =
?PRIM_FILE_call(set_cwd, Handle, [""]),
- ?line {error, enoent} =
+ {error, enoent} =
?PRIM_FILE_call(set_cwd, Handle, [".......a......"]),
- ?line {ok,BaseDir} =
+ {ok,BaseDir} =
?PRIM_FILE_call(get_cwd, Handle, []), %% Still there?
%% On Windows, there should only be slashes, no backslashes,
@@ -389,44 +379,40 @@ cur_dir_0(Config, Handle) ->
%% (The test is harmless on Unix, because filenames usually
%% don't contain backslashes.)
- ?line {ok, BaseDir} = ?PRIM_FILE_call(get_cwd, Handle, []),
- ?line false = lists:member($\\, BaseDir),
+ {ok, BaseDir} = ?PRIM_FILE_call(get_cwd, Handle, []),
+ false = lists:member($\\, BaseDir),
ok.
%% Tests ?PRIM_FILE:get_cwd/1.
-cur_dir_1a(suite) -> [];
-cur_dir_1a(doc) -> [];
cur_dir_1a(Config) when is_list(Config) ->
cur_dir_1(Config, []).
-cur_dir_1b(suite) -> [];
-cur_dir_1b(doc) -> [];
cur_dir_1b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = cur_dir_1(Config, Handle),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
cur_dir_1(Config, Handle) ->
- ?line case os:type() of
- {win32, _} ->
- win_cur_dir_1(Config, Handle);
- _ ->
- ?line {error, enotsup} =
- ?PRIM_FILE_call(get_cwd, Handle, ["d:"])
- end,
+ case os:type() of
+ {win32, _} ->
+ win_cur_dir_1(Config, Handle);
+ _ ->
+ {error, enotsup} =
+ ?PRIM_FILE_call(get_cwd, Handle, ["d:"])
+ end,
ok.
-
+
win_cur_dir_1(_Config, Handle) ->
- ?line {ok, BaseDir} = ?PRIM_FILE_call(get_cwd, Handle, []),
+ {ok, BaseDir} = ?PRIM_FILE_call(get_cwd, Handle, []),
%% Get the drive letter from the current directory,
%% and try to get current directory for that drive.
- ?line [Drive, $:|_] = BaseDir,
- ?line {ok, BaseDir} = ?PRIM_FILE_call(get_cwd, Handle, [[Drive, $:]]),
+ [Drive, $:|_] = BaseDir,
+ {ok, BaseDir} = ?PRIM_FILE_call(get_cwd, Handle, [[Drive, $:]]),
io:format("BaseDir = ~s\n", [BaseDir]),
%% Unfortunately, there is no way to move away from the
@@ -439,440 +425,405 @@ win_cur_dir_1(_Config, Handle) ->
-open1(suite) -> [];
-open1(doc) -> [];
open1(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_files"),
- ?line ok = ?PRIM_FILE:make_dir(NewDir),
- ?line Name = filename:join(NewDir, "foo1.fil"),
- ?line {ok,Fd1} = ?PRIM_FILE:open(Name, [read, write]),
- ?line {ok,Fd2} = ?PRIM_FILE:open(Name, [read]),
- ?line Str = "{a,tuple}.\n",
- ?line Length = length(Str),
- ?line ?PRIM_FILE:write(Fd1,Str),
- ?line {ok,0} = ?PRIM_FILE:position(Fd1,bof),
- ?line {ok, Str} = ?PRIM_FILE:read(Fd1,Length),
- ?line case ?PRIM_FILE:read(Fd2,Length) of
- {ok,Str} -> Str;
- eof -> Str
- end,
- ?line ok = ?PRIM_FILE:close(Fd2),
- ?line {ok,0} = ?PRIM_FILE:position(Fd1,bof),
- ?line ok = ?PRIM_FILE:truncate(Fd1),
- ?line eof = ?PRIM_FILE:read(Fd1,Length),
- ?line ok = ?PRIM_FILE:close(Fd1),
- ?line {ok,Fd3} = ?PRIM_FILE:open(Name, [read]),
- ?line eof = ?PRIM_FILE:read(Fd3,Length),
- ?line ok = ?PRIM_FILE:close(Fd3),
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_files"),
+ ok = ?PRIM_FILE:make_dir(NewDir),
+ Name = filename:join(NewDir, "foo1.fil"),
+ {ok,Fd1} = ?PRIM_FILE:open(Name, [read, write]),
+ {ok,Fd2} = ?PRIM_FILE:open(Name, [read]),
+ Str = "{a,tuple}.\n",
+ Length = length(Str),
+ ?PRIM_FILE:write(Fd1,Str),
+ {ok,0} = ?PRIM_FILE:position(Fd1,bof),
+ {ok, Str} = ?PRIM_FILE:read(Fd1,Length),
+ {ok, Str} = ?PRIM_FILE:read(Fd2,Length),
+ ok = ?PRIM_FILE:close(Fd2),
+ {ok,0} = ?PRIM_FILE:position(Fd1,bof),
+ ok = ?PRIM_FILE:truncate(Fd1),
+ eof = ?PRIM_FILE:read(Fd1,Length),
+ ok = ?PRIM_FILE:close(Fd1),
+ {ok,Fd3} = ?PRIM_FILE:open(Name, [read]),
+ eof = ?PRIM_FILE:read(Fd3,Length),
+ ok = ?PRIM_FILE:close(Fd3),
ok.
%% Tests all open modes.
-modes(suite) -> [];
-modes(doc) -> [];
modes(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_open_modes"),
- ?line ok = ?PRIM_FILE:make_dir(NewDir),
- ?line Name1 = filename:join(NewDir, "foo1.fil"),
- ?line Marker = "hello, world",
- ?line Length = length(Marker),
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_open_modes"),
+ ok = ?PRIM_FILE:make_dir(NewDir),
+ Name1 = filename:join(NewDir, "foo1.fil"),
+ Marker = "hello, world",
+ Length = length(Marker),
%% write
- ?line {ok, Fd1} = ?PRIM_FILE:open(Name1, [write]),
- ?line ok = ?PRIM_FILE:write(Fd1, Marker),
- ?line ok = ?PRIM_FILE:write(Fd1, ".\n"),
- ?line ok = ?PRIM_FILE:close(Fd1),
+ {ok, Fd1} = ?PRIM_FILE:open(Name1, [write]),
+ ok = ?PRIM_FILE:write(Fd1, Marker),
+ ok = ?PRIM_FILE:write(Fd1, ".\n"),
+ ok = ?PRIM_FILE:close(Fd1),
%% read
- ?line {ok, Fd2} = ?PRIM_FILE:open(Name1, [read]),
- ?line {ok, Marker} = ?PRIM_FILE:read(Fd2, Length),
- ?line ok = ?PRIM_FILE:close(Fd2),
+ {ok, Fd2} = ?PRIM_FILE:open(Name1, [read]),
+ {ok, Marker} = ?PRIM_FILE:read(Fd2, Length),
+ ok = ?PRIM_FILE:close(Fd2),
%% read and write
- ?line {ok, Fd3} = ?PRIM_FILE:open(Name1, [read, write]),
- ?line {ok, Marker} = ?PRIM_FILE:read(Fd3, Length),
- ?line ok = ?PRIM_FILE:write(Fd3, Marker),
- ?line ok = ?PRIM_FILE:close(Fd3),
+ {ok, Fd3} = ?PRIM_FILE:open(Name1, [read, write]),
+ {ok, Marker} = ?PRIM_FILE:read(Fd3, Length),
+ ok = ?PRIM_FILE:write(Fd3, Marker),
+ ok = ?PRIM_FILE:close(Fd3),
%% read by default
- ?line {ok, Fd4} = ?PRIM_FILE:open(Name1, []),
- ?line {ok, Marker} = ?PRIM_FILE:read(Fd4, Length),
- ?line ok = ?PRIM_FILE:close(Fd4),
+ {ok, Fd4} = ?PRIM_FILE:open(Name1, []),
+ {ok, Marker} = ?PRIM_FILE:read(Fd4, Length),
+ ok = ?PRIM_FILE:close(Fd4),
%% read and binary
- ?line BinaryMarker = list_to_binary(Marker),
- ?line {ok, Fd5} = ?PRIM_FILE:open(Name1, [read, binary]),
- ?line {ok, BinaryMarker} = ?PRIM_FILE:read(Fd5, Length),
- ?line ok = ?PRIM_FILE:close(Fd5),
+ BinaryMarker = list_to_binary(Marker),
+ {ok, Fd5} = ?PRIM_FILE:open(Name1, [read, binary]),
+ {ok, BinaryMarker} = ?PRIM_FILE:read(Fd5, Length),
+ ok = ?PRIM_FILE:close(Fd5),
- ?line test_server:timetrap_cancel(Dog),
ok.
-close(suite) -> [];
-close(doc) -> [];
close(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_close.fil"),
- ?line {ok,Fd1} = ?PRIM_FILE:open(Name, [read, write]),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_close.fil"),
+ {ok,Fd1} = ?PRIM_FILE:open(Name, [read, write]),
%% Just closing it is no fun, we did that a million times already
%% This is a common error, for code written before Erlang 4.3
%% bacause then ?PRIM_FILE:open just returned a Pid, and not everyone
%% really checked what they got.
- ?line {'EXIT',_Msg} = (catch ok = ?PRIM_FILE:close({ok,Fd1})),
- ?line ok = ?PRIM_FILE:close(Fd1),
+ {'EXIT',_Msg} = (catch ok = ?PRIM_FILE:close({ok,Fd1})),
+ ok = ?PRIM_FILE:close(Fd1),
%% Try closing one more time
- ?line Val = ?PRIM_FILE:close(Fd1),
- ?line io:format("Second close gave: ~p", [Val]),
+ Val = ?PRIM_FILE:close(Fd1),
+ io:format("Second close gave: ~p", [Val]),
ok.
-access(suite) -> [];
-access(doc) -> [];
access(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_access.fil"),
- ?line Str = "ABCDEFGH",
- ?line {ok,Fd1} = ?PRIM_FILE:open(Name, [write]),
- ?line ?PRIM_FILE:write(Fd1,Str),
- ?line ok = ?PRIM_FILE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_access.fil"),
+ Str = "ABCDEFGH",
+ {ok,Fd1} = ?PRIM_FILE:open(Name, [write]),
+ ?PRIM_FILE:write(Fd1,Str),
+ ok = ?PRIM_FILE:close(Fd1),
%% Check that we can't write when in read only mode
- ?line {ok,Fd2} = ?PRIM_FILE:open(Name, [read]),
- ?line case catch ?PRIM_FILE:write(Fd2,"XXXX") of
- ok ->
- test_server:fail({access,write});
- _ ->
- ok
- end,
- ?line ok = ?PRIM_FILE:close(Fd2),
- ?line {ok, Fd3} = ?PRIM_FILE:open(Name, [read]),
- ?line {ok, Str} = ?PRIM_FILE:read(Fd3,length(Str)),
- ?line ok = ?PRIM_FILE:close(Fd3),
+ {ok,Fd2} = ?PRIM_FILE:open(Name, [read]),
+ case catch ?PRIM_FILE:write(Fd2,"XXXX") of
+ ok ->
+ ct:fail({access,write});
+ _ ->
+ ok
+ end,
+ ok = ?PRIM_FILE:close(Fd2),
+ {ok, Fd3} = ?PRIM_FILE:open(Name, [read]),
+ {ok, Str} = ?PRIM_FILE:read(Fd3,length(Str)),
+ ok = ?PRIM_FILE:close(Fd3),
ok.
%% Tests ?PRIM_FILE:read/2 and ?PRIM_FILE:write/2.
-read_write(suite) -> [];
-read_write(doc) -> [];
read_write(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_read_write"),
- ?line ok = ?PRIM_FILE:make_dir(NewDir),
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_read_write"),
+ ok = ?PRIM_FILE:make_dir(NewDir),
%% Raw file.
- ?line Name = filename:join(NewDir, "raw.fil"),
- ?line {ok, Fd} = ?PRIM_FILE:open(Name, [read, write]),
- ?line read_write_test(Fd),
+ Name = filename:join(NewDir, "raw.fil"),
+ {ok, Fd} = ?PRIM_FILE:open(Name, [read, write]),
+ read_write_test(Fd),
ok.
read_write_test(File) ->
- ?line Marker = "hello, world",
- ?line ok = ?PRIM_FILE:write(File, Marker),
- ?line {ok, 0} = ?PRIM_FILE:position(File, 0),
- ?line {ok, Marker} = ?PRIM_FILE:read(File, 100),
- ?line eof = ?PRIM_FILE:read(File, 100),
- ?line ok = ?PRIM_FILE:close(File),
+ Marker = "hello, world",
+ ok = ?PRIM_FILE:write(File, Marker),
+ {ok, 0} = ?PRIM_FILE:position(File, 0),
+ {ok, Marker} = ?PRIM_FILE:read(File, 100),
+ eof = ?PRIM_FILE:read(File, 100),
+ ok = ?PRIM_FILE:close(File),
ok.
%% Tests ?PRIM_FILE:pread/2 and ?PRIM_FILE:pwrite/2.
-pread_write(suite) -> [];
-pread_write(doc) -> [];
pread_write(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_pread_write"),
- ?line ok = ?PRIM_FILE:make_dir(NewDir),
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_pread_write"),
+ ok = ?PRIM_FILE:make_dir(NewDir),
%% Raw file.
- ?line Name = filename:join(NewDir, "raw.fil"),
- ?line {ok, Fd} = ?PRIM_FILE:open(Name, [read, write]),
- ?line pread_write_test(Fd),
+ Name = filename:join(NewDir, "raw.fil"),
+ {ok, Fd} = ?PRIM_FILE:open(Name, [read, write]),
+ pread_write_test(Fd),
ok.
pread_write_test(File) ->
- ?line Marker = "hello, world",
- ?line Len = length(Marker),
- ?line ok = ?PRIM_FILE:write(File, Marker),
- ?line {ok, Marker} = ?PRIM_FILE:pread(File, 0, 100),
- ?line eof = ?PRIM_FILE:pread(File, 100, 1),
- ?line ok = ?PRIM_FILE:pwrite(File, Len, Marker),
- ?line {ok, Marker} = ?PRIM_FILE:pread(File, Len, 100),
- ?line eof = ?PRIM_FILE:pread(File, 100, 1),
- ?line MM = Marker ++ Marker,
- ?line {ok, MM} = ?PRIM_FILE:pread(File, 0, 100),
- ?line ok = ?PRIM_FILE:close(File),
+ Marker = "hello, world",
+ Len = length(Marker),
+ ok = ?PRIM_FILE:write(File, Marker),
+ {ok, Marker} = ?PRIM_FILE:pread(File, 0, 100),
+ eof = ?PRIM_FILE:pread(File, 100, 1),
+ ok = ?PRIM_FILE:pwrite(File, Len, Marker),
+ {ok, Marker} = ?PRIM_FILE:pread(File, Len, 100),
+ eof = ?PRIM_FILE:pread(File, 100, 1),
+ MM = Marker ++ Marker,
+ {ok, MM} = ?PRIM_FILE:pread(File, 0, 100),
+ ok = ?PRIM_FILE:close(File),
ok.
-append(doc) -> "Test appending to a file.";
-append(suite) -> [];
+%% Test appending to a file.
append(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_append"),
- ?line ok = ?PRIM_FILE:make_dir(NewDir),
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_append"),
+ ok = ?PRIM_FILE:make_dir(NewDir),
- ?line First = "First line\n",
- ?line Second = "Seond lines comes here\n",
- ?line Third = "And here is the third line\n",
+ First = "First line\n",
+ Second = "Seond lines comes here\n",
+ Third = "And here is the third line\n",
%% Write a small text file.
- ?line Name1 = filename:join(NewDir, "a_file.txt"),
- ?line {ok, Fd1} = ?PRIM_FILE:open(Name1, [write]),
- ?line ok = ?PRIM_FILE:write(Fd1, First),
- ?line ok = ?PRIM_FILE:write(Fd1, Second),
- ?line ok = ?PRIM_FILE:close(Fd1),
+ Name1 = filename:join(NewDir, "a_file.txt"),
+ {ok, Fd1} = ?PRIM_FILE:open(Name1, [write]),
+ ok = ?PRIM_FILE:write(Fd1, First),
+ ok = ?PRIM_FILE:write(Fd1, Second),
+ ok = ?PRIM_FILE:close(Fd1),
%% Open it a again and a append a line to it.
- ?line {ok, Fd2} = ?PRIM_FILE:open(Name1, [append]),
- ?line ok = ?PRIM_FILE:write(Fd2, Third),
- ?line ok = ?PRIM_FILE:close(Fd2),
+ {ok, Fd2} = ?PRIM_FILE:open(Name1, [append]),
+ ok = ?PRIM_FILE:write(Fd2, Third),
+ ok = ?PRIM_FILE:close(Fd2),
%% Read it back and verify.
- ?line Expected = list_to_binary([First, Second, Third]),
- ?line {ok, Expected} = ?PRIM_FILE:read_file(Name1),
+ Expected = list_to_binary([First, Second, Third]),
+ {ok, Expected} = ?PRIM_FILE:read_file(Name1),
ok.
-exclusive(suite) -> [];
-exclusive(doc) -> "Test exclusive access to a file.";
+%% Test exclusive access to a file.
exclusive(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_exclusive"),
- ?line ok = ?PRIM_FILE:make_dir(NewDir),
- ?line Name = filename:join(NewDir, "ex_file.txt"),
- ?line {ok,Fd} = ?PRIM_FILE:open(Name, [write, exclusive]),
- ?line {error, eexist} = ?PRIM_FILE:open(Name, [write, exclusive]),
- ?line ok = ?PRIM_FILE:close(Fd),
+ RootDir = proplists:get_value(priv_dir,Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_exclusive"),
+ ok = ?PRIM_FILE:make_dir(NewDir),
+ Name = filename:join(NewDir, "ex_file.txt"),
+ {ok,Fd} = ?PRIM_FILE:open(Name, [write, exclusive]),
+ {error, eexist} = ?PRIM_FILE:open(Name, [write, exclusive]),
+ ok = ?PRIM_FILE:close(Fd),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-pos1(suite) -> [];
-pos1(doc) -> [];
pos1(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_pos1.fil"),
- ?line {ok, Fd1} = ?PRIM_FILE:open(Name, [write]),
- ?line ?PRIM_FILE:write(Fd1,"ABCDEFGH"),
- ?line ok = ?PRIM_FILE:close(Fd1),
- ?line {ok, Fd2} = ?PRIM_FILE:open(Name, [read]),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_pos1.fil"),
+ {ok, Fd1} = ?PRIM_FILE:open(Name, [write]),
+ ?PRIM_FILE:write(Fd1,"ABCDEFGH"),
+ ok = ?PRIM_FILE:close(Fd1),
+ {ok, Fd2} = ?PRIM_FILE:open(Name, [read]),
%% Start pos is first char
- ?line io:format("Relative positions"),
- ?line {ok, "A"} = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 2} = ?PRIM_FILE:position(Fd2,{cur,1}),
- ?line {ok, "C"} = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 0} = ?PRIM_FILE:position(Fd2,{cur,-3}),
- ?line {ok, "A"} = ?PRIM_FILE:read(Fd2,1),
+ io:format("Relative positions"),
+ {ok, "A"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 2} = ?PRIM_FILE:position(Fd2,{cur,1}),
+ {ok, "C"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 0} = ?PRIM_FILE:position(Fd2,{cur,-3}),
+ {ok, "A"} = ?PRIM_FILE:read(Fd2,1),
%% Backwards from first char should be an error
- ?line {ok,0} = ?PRIM_FILE:position(Fd2,{cur,-1}),
- ?line {error, einval} = ?PRIM_FILE:position(Fd2,{cur,-1}),
+ {ok,0} = ?PRIM_FILE:position(Fd2,{cur,-1}),
+ {error, einval} = ?PRIM_FILE:position(Fd2,{cur,-1}),
%% Reset position and move again
- ?line {ok, 0} = ?PRIM_FILE:position(Fd2,0),
- ?line {ok, 2} = ?PRIM_FILE:position(Fd2,{cur,2}),
- ?line {ok, "C"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 0} = ?PRIM_FILE:position(Fd2,0),
+ {ok, 2} = ?PRIM_FILE:position(Fd2,{cur,2}),
+ {ok, "C"} = ?PRIM_FILE:read(Fd2,1),
%% Go a lot forwards
- ?line {ok, 13} = ?PRIM_FILE:position(Fd2,{cur,10}),
- ?line eof = ?PRIM_FILE:read(Fd2,1),
+ {ok, 13} = ?PRIM_FILE:position(Fd2,{cur,10}),
+ eof = ?PRIM_FILE:read(Fd2,1),
%% Try some fixed positions
- ?line io:format("Fixed positions"),
- ?line {ok, 8} = ?PRIM_FILE:position(Fd2,8),
- ?line eof = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 8} = ?PRIM_FILE:position(Fd2,cur),
- ?line eof = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 7} = ?PRIM_FILE:position(Fd2,7),
- ?line {ok, "H"} = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 0} = ?PRIM_FILE:position(Fd2,0),
- ?line {ok, "A"} = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 3} = ?PRIM_FILE:position(Fd2,3),
- ?line {ok, "D"} = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 12} = ?PRIM_FILE:position(Fd2,12),
- ?line eof = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 3} = ?PRIM_FILE:position(Fd2,3),
- ?line {ok, "D"} = ?PRIM_FILE:read(Fd2,1),
+ io:format("Fixed positions"),
+ {ok, 8} = ?PRIM_FILE:position(Fd2,8),
+ eof = ?PRIM_FILE:read(Fd2,1),
+ {ok, 8} = ?PRIM_FILE:position(Fd2,cur),
+ eof = ?PRIM_FILE:read(Fd2,1),
+ {ok, 7} = ?PRIM_FILE:position(Fd2,7),
+ {ok, "H"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 0} = ?PRIM_FILE:position(Fd2,0),
+ {ok, "A"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 3} = ?PRIM_FILE:position(Fd2,3),
+ {ok, "D"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 12} = ?PRIM_FILE:position(Fd2,12),
+ eof = ?PRIM_FILE:read(Fd2,1),
+ {ok, 3} = ?PRIM_FILE:position(Fd2,3),
+ {ok, "D"} = ?PRIM_FILE:read(Fd2,1),
%% Try the {bof,X} notation
- ?line {ok, 3} = ?PRIM_FILE:position(Fd2,{bof,3}),
- ?line {ok, "D"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 3} = ?PRIM_FILE:position(Fd2,{bof,3}),
+ {ok, "D"} = ?PRIM_FILE:read(Fd2,1),
%% Try eof positions
- ?line io:format("EOF positions"),
- ?line {ok, 8} = ?PRIM_FILE:position(Fd2,{eof,0}),
- ?line eof = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 7} = ?PRIM_FILE:position(Fd2,{eof,-1}),
- ?line {ok, "H"} = ?PRIM_FILE:read(Fd2,1),
- ?line {ok, 0} = ?PRIM_FILE:position(Fd2,{eof,-8}),
- ?line {ok, "A"} = ?PRIM_FILE:read(Fd2,1),
- ?line {error, einval} = ?PRIM_FILE:position(Fd2,{eof,-9}),
+ io:format("EOF positions"),
+ {ok, 8} = ?PRIM_FILE:position(Fd2,{eof,0}),
+ eof = ?PRIM_FILE:read(Fd2,1),
+ {ok, 7} = ?PRIM_FILE:position(Fd2,{eof,-1}),
+ {ok, "H"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 0} = ?PRIM_FILE:position(Fd2,{eof,-8}),
+ {ok, "A"} = ?PRIM_FILE:read(Fd2,1),
+ {error, einval} = ?PRIM_FILE:position(Fd2,{eof,-9}),
ok.
-pos2(suite) -> [];
-pos2(doc) -> [];
pos2(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_pos2.fil"),
- ?line {ok,Fd1} = ?PRIM_FILE:open(Name, [write]),
- ?line ?PRIM_FILE:write(Fd1,"ABCDEFGH"),
- ?line ok = ?PRIM_FILE:close(Fd1),
- ?line {ok, Fd2} = ?PRIM_FILE:open(Name, [read]),
- ?line {error, einval} = ?PRIM_FILE:position(Fd2,-1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_pos2.fil"),
+ {ok,Fd1} = ?PRIM_FILE:open(Name, [write]),
+ ?PRIM_FILE:write(Fd1,"ABCDEFGH"),
+ ok = ?PRIM_FILE:close(Fd1),
+ {ok, Fd2} = ?PRIM_FILE:open(Name, [read]),
+ {error, einval} = ?PRIM_FILE:position(Fd2,-1),
%% Make sure that we still can search after an error.
- ?line {ok, 0} = ?PRIM_FILE:position(Fd2, 0),
- ?line {ok, 3} = ?PRIM_FILE:position(Fd2, {bof,3}),
- ?line {ok, "D"} = ?PRIM_FILE:read(Fd2,1),
+ {ok, 0} = ?PRIM_FILE:position(Fd2, 0),
+ {ok, 3} = ?PRIM_FILE:position(Fd2, {bof,3}),
+ {ok, "D"} = ?PRIM_FILE:read(Fd2,1),
- ?line io:format("DONE"),
+ io:format("DONE"),
ok.
-file_info_basic_file_a(suite) -> [];
-file_info_basic_file_a(doc) -> [];
file_info_basic_file_a(Config) when is_list(Config) ->
file_info_basic_file(Config, [], "_a").
-file_info_basic_file_b(suite) -> [];
-file_info_basic_file_b(doc) -> [];
file_info_basic_file_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = file_info_basic_file(Config, Handle, "_b"),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
file_info_basic_file(Config, Handle, Suffix) ->
- ?line RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
%% Create a short file.
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_basic_test"++Suffix++".fil"),
- ?line {ok,Fd1} = ?PRIM_FILE:open(Name, [write]),
- ?line ?PRIM_FILE:write(Fd1, "foo bar"),
- ?line ok = ?PRIM_FILE:close(Fd1),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_basic_test"++Suffix++".fil"),
+ {ok,Fd1} = ?PRIM_FILE:open(Name, [write]),
+ ?PRIM_FILE:write(Fd1, "foo bar"),
+ ok = ?PRIM_FILE:close(Fd1),
%% Test that the file has the expected attributes.
%% The times are tricky, so we will save them to a separate test case.
- ?line {ok, FileInfo} = ?PRIM_FILE_call(read_file_info, Handle, [Name]),
- ?line #file_info{size = Size, type = Type, access = Access,
- atime = AccessTime, mtime = ModifyTime} =
+ {ok, FileInfo} = ?PRIM_FILE_call(read_file_info, Handle, [Name]),
+ #file_info{size = Size, type = Type, access = Access,
+ atime = AccessTime, mtime = ModifyTime} =
FileInfo,
- ?line io:format("Access ~p, Modify ~p", [AccessTime, ModifyTime]),
- ?line Size = 7,
- ?line Type = regular,
- ?line Access = read_write,
- ?line true = abs(time_dist(filter_atime(AccessTime, Config),
- filter_atime(ModifyTime,
- Config))) < 2,
- ?line {AD, AT} = AccessTime,
- ?line all_integers(tuple_to_list(AD) ++ tuple_to_list(AT)),
- ?line {MD, MT} = ModifyTime,
- ?line all_integers(tuple_to_list(MD) ++ tuple_to_list(MT)),
+ io:format("Access ~p, Modify ~p", [AccessTime, ModifyTime]),
+ Size = 7,
+ Type = regular,
+ Access = read_write,
+ true = abs(time_dist(filter_atime(AccessTime, Config),
+ filter_atime(ModifyTime,
+ Config))) < 2,
+ {AD, AT} = AccessTime,
+ all_integers(tuple_to_list(AD) ++ tuple_to_list(AT)),
+ {MD, MT} = ModifyTime,
+ all_integers(tuple_to_list(MD) ++ tuple_to_list(MT)),
ok.
-file_info_basic_directory_a(suite) -> [];
-file_info_basic_directory_a(doc) -> [];
file_info_basic_directory_a(Config) when is_list(Config) ->
file_info_basic_directory(Config, []).
-file_info_basic_directory_b(suite) -> [];
-file_info_basic_directory_b(doc) -> [];
file_info_basic_directory_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = file_info_basic_directory(Config, Handle),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
file_info_basic_directory(Config, Handle) ->
%% Note: filename:join/1 removes any trailing slash,
%% which is essential for ?PRIM_FILE:read_file_info/1 to work on
%% platforms such as Windows95.
- ?line RootDir = filename:join([?config(priv_dir, Config)]),
+ RootDir = filename:join([proplists:get_value(priv_dir, Config)]),
%% Test that the RootDir directory has the expected attributes.
- ?line test_directory(RootDir, read_write, Handle),
+ test_directory(RootDir, read_write, Handle),
%% Note that on Windows file systems, "/" or "c:/" are *NOT* directories.
%% Therefore, test that ?PRIM_FILE:read_file_info/1 behaves
%% as if they were directories.
- ?line case os:type() of
- {win32, _} ->
- ?line test_directory("/", read_write, Handle),
- ?line test_directory("c:/", read_write, Handle),
- ?line test_directory("c:\\", read_write, Handle);
- _ ->
- ?line test_directory("/", read, Handle)
- end,
+ case os:type() of
+ {win32, _} ->
+ test_directory("/", read_write, Handle),
+ test_directory("c:/", read_write, Handle),
+ test_directory("c:\\", read_write, Handle);
+ _ ->
+ test_directory("/", read, Handle)
+ end,
ok.
test_directory(Name, ExpectedAccess, Handle) ->
- ?line {ok, FileInfo} = ?PRIM_FILE_call(read_file_info, Handle, [Name]),
- ?line #file_info{size = Size, type = Type, access = Access,
- atime = AccessTime, mtime = ModifyTime} =
+ {ok, FileInfo} = ?PRIM_FILE_call(read_file_info, Handle, [Name]),
+ #file_info{size = Size, type = Type, access = Access,
+ atime = AccessTime, mtime = ModifyTime} =
FileInfo,
- ?line io:format("Testing directory ~s", [Name]),
- ?line io:format("Directory size is ~p", [Size]),
- ?line io:format("Access ~p", [Access]),
- ?line io:format("Access time ~p; Modify time~p",
- [AccessTime, ModifyTime]),
- ?line Type = directory,
- ?line Access = ExpectedAccess,
- ?line {AD, AT} = AccessTime,
- ?line all_integers(tuple_to_list(AD) ++ tuple_to_list(AT)),
- ?line {MD, MT} = ModifyTime,
- ?line all_integers(tuple_to_list(MD) ++ tuple_to_list(MT)),
+ io:format("Testing directory ~s", [Name]),
+ io:format("Directory size is ~p", [Size]),
+ io:format("Access ~p", [Access]),
+ io:format("Access time ~p; Modify time~p",
+ [AccessTime, ModifyTime]),
+ Type = directory,
+ Access = ExpectedAccess,
+ {AD, AT} = AccessTime,
+ all_integers(tuple_to_list(AD) ++ tuple_to_list(AT)),
+ {MD, MT} = ModifyTime,
+ all_integers(tuple_to_list(MD) ++ tuple_to_list(MT)),
ok.
all_integers([Int|Rest]) when is_integer(Int) ->
- ?line all_integers(Rest);
+ all_integers(Rest);
all_integers([]) ->
ok.
%% Try something nonexistent.
-file_info_bad_a(suite) -> [];
-file_info_bad_a(doc) -> [];
file_info_bad_a(Config) when is_list(Config) ->
file_info_bad(Config, []).
-file_info_bad_b(suite) -> [];
-file_info_bad_b(doc) -> [];
file_info_bad_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = file_info_bad(Config, Handle),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
file_info_bad(Config, Handle) ->
- ?line RootDir = filename:join([?config(priv_dir, Config)]),
- ?line {error, enoent} =
+ RootDir = filename:join([proplists:get_value(priv_dir, Config)]),
+ {error, enoent} =
?PRIM_FILE_call(
read_file_info, Handle,
[filename:join(RootDir,
@@ -881,28 +832,22 @@ file_info_bad(Config, Handle) ->
%% Test that the file times behave as they should.
-file_info_times_a(suite) -> [];
-file_info_times_a(doc) -> [];
file_info_times_a(Config) when is_list(Config) ->
file_info_times(Config, [], "_a").
-file_info_times_b(suite) -> [];
-file_info_times_b(doc) -> [];
file_info_times_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = file_info_times(Config, Handle, "_b"),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
file_info_times(Config, Handle, Suffix) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
%% We have to try this twice, since if the test runs across the change
%% of a month the time diff calculations will fail. But it won't happen
%% if you run it twice in succession.
- ?line test_server:m_out_of_n(
- 1,2,
- fun() -> ?line file_info_int(Config, Handle, Suffix) end),
- ?line test_server:timetrap_cancel(Dog),
+ test_server:m_out_of_n(
+ 1,2,
+ fun() -> file_info_int(Config, Handle, Suffix) end),
ok.
file_info_int(Config, Handle, Suffix) ->
@@ -910,55 +855,55 @@ file_info_int(Config, Handle, Suffix) ->
%% which is essential for ?PRIM_FILE:read_file_info/1 to work on
%% platforms such as Windows95.
- ?line RootDir = filename:join([?config(priv_dir, Config)]),
- ?line test_server:format("RootDir = ~p", [RootDir]),
+ RootDir = filename:join([proplists:get_value(priv_dir, Config)]),
+ io:format("RootDir = ~p", [RootDir]),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_file_info"++Suffix++".fil"),
- ?line {ok,Fd1} = ?PRIM_FILE:open(Name, [write]),
- ?line ?PRIM_FILE:write(Fd1,"foo"),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_file_info"++Suffix++".fil"),
+ {ok,Fd1} = ?PRIM_FILE:open(Name, [write]),
+ ?PRIM_FILE:write(Fd1,"foo"),
%% check that the file got a modify date max a few seconds away from now
- ?line {ok, #file_info{type = regular,
- atime = AccTime1, mtime = ModTime1}} =
+ {ok, #file_info{type = regular,
+ atime = AccTime1, mtime = ModTime1}} =
?PRIM_FILE_call(read_file_info, Handle, [Name]),
- ?line Now = erlang:localtime(),
- ?line io:format("Now ~p",[Now]),
- ?line io:format("Open file Acc ~p Mod ~p",[AccTime1,ModTime1]),
- ?line true = abs(time_dist(filter_atime(Now, Config),
- filter_atime(AccTime1,
- Config))) < 8,
- ?line true = abs(time_dist(Now, ModTime1)) < 8,
-
+ Now = erlang:localtime(),
+ io:format("Now ~p",[Now]),
+ io:format("Open file Acc ~p Mod ~p",[AccTime1,ModTime1]),
+ true = abs(time_dist(filter_atime(Now, Config),
+ filter_atime(AccTime1,
+ Config))) < 8,
+ true = abs(time_dist(Now, ModTime1)) < 8,
+
%% Sleep until we can be sure the seconds value has changed.
%% Note: FAT-based filesystem (like on Windows 95) have
%% a resolution of 2 seconds.
- ?line test_server:sleep(test_server:seconds(2.2)),
+ ct:sleep({seconds,2.2}),
%% close the file, and watch the modify date change
- ?line ok = ?PRIM_FILE:close(Fd1),
- ?line {ok, #file_info{size = Size, type = regular, access = Access,
- atime = AccTime2, mtime = ModTime2}} =
+ ok = ?PRIM_FILE:close(Fd1),
+ {ok, #file_info{size = Size, type = regular, access = Access,
+ atime = AccTime2, mtime = ModTime2}} =
?PRIM_FILE_call(read_file_info, Handle, [Name]),
- ?line io:format("Closed file Acc ~p Mod ~p",[AccTime2,ModTime2]),
- ?line true = time_dist(ModTime1, ModTime2) >= 0,
+ io:format("Closed file Acc ~p Mod ~p",[AccTime2,ModTime2]),
+ true = time_dist(ModTime1, ModTime2) >= 0,
%% this file is supposed to be binary, so it'd better keep it's size
- ?line Size = 3,
- ?line Access = read_write,
+ Size = 3,
+ Access = read_write,
%% Do some directory checking
- ?line {ok, #file_info{size = DSize, type = directory,
- access = DAccess,
- atime = AccTime3, mtime = ModTime3}} =
+ {ok, #file_info{size = DSize, type = directory,
+ access = DAccess,
+ atime = AccTime3, mtime = ModTime3}} =
?PRIM_FILE_call(read_file_info, Handle, [RootDir]),
%% this dir was modified only a few secs ago
- ?line io:format("Dir Acc ~p; Mod ~p; Now ~p",
- [AccTime3, ModTime3, Now]),
- ?line true = abs(time_dist(Now, ModTime3)) < 5,
- ?line DAccess = read_write,
- ?line io:format("Dir size is ~p",[DSize]),
+ io:format("Dir Acc ~p; Mod ~p; Now ~p",
+ [AccTime3, ModTime3, Now]),
+ true = abs(time_dist(Now, ModTime3)) < 5,
+ DAccess = read_write,
+ io:format("Dir size is ~p",[DSize]),
ok.
%% Filter access times, to cope with a deficiency of FAT file systems
@@ -969,9 +914,9 @@ filter_atime(Atime, Config) ->
true ->
case Atime of
{Date, _} ->
- {Date, {0, 0, 0}};
+ {Date, {0, 0, 0}};
{Y, M, D, _, _, _} ->
- {Y, M, D, 0, 0, 0}
+ {Y, M, D, 0, 0, 0}
end;
false ->
Atime
@@ -979,186 +924,170 @@ filter_atime(Atime, Config) ->
%% Test the write_file_info/2 function.
-file_write_file_info_a(suite) -> [];
-file_write_file_info_a(doc) -> [];
file_write_file_info_a(Config) when is_list(Config) ->
file_write_file_info(Config, [], "_a").
-file_write_file_info_b(suite) -> [];
-file_write_file_info_b(doc) -> [];
file_write_file_info_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = file_write_file_info(Config, Handle, "_b"),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
file_write_file_info(Config, Handle, Suffix) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = get_good_directory(Config),
- ?line test_server:format("RootDir = ~p", [RootDir]),
+ RootDir = get_good_directory(Config),
+ io:format("RootDir = ~p", [RootDir]),
%% Set the file to read only AND update the file times at the same time.
%% (This used to fail on Windows NT/95 for a local filesystem.)
%% Note: Seconds must be even; see note in file_info_times/1.
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_write_file_info_ro"++Suffix),
- ?line ok = ?PRIM_FILE:write_file(Name, "hello"),
- ?line Time = {{1997, 01, 02}, {12, 35, 42}},
- ?line Info = #file_info{mode=8#400, atime=Time, mtime=Time, ctime=Time},
- ?line ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, Info]),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_write_file_info_ro"++Suffix),
+ ok = ?PRIM_FILE:write_file(Name, "hello"),
+ Time = {{1997, 01, 02}, {12, 35, 42}},
+ Info = #file_info{mode=8#400, atime=Time, mtime=Time, ctime=Time},
+ ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, Info]),
%% Read back the times.
- ?line {ok, ActualInfo} =
+ {ok, ActualInfo} =
?PRIM_FILE_call(read_file_info, Handle, [Name]),
- ?line #file_info{mode=_Mode, atime=ActAtime, mtime=Time,
- ctime=ActCtime} = ActualInfo,
- ?line FilteredAtime = filter_atime(Time, Config),
- ?line FilteredAtime = filter_atime(ActAtime, Config),
- ?line case os:type() of
- {win32, _} ->
- %% On Windows, "ctime" means creation time and it can
- %% be set.
- ActCtime = Time;
- _ ->
- ok
- end,
- ?line {error, eacces} = ?PRIM_FILE:write_file(Name, "hello again"),
+ #file_info{mode=_Mode, atime=ActAtime, mtime=Time,
+ ctime=ActCtime} = ActualInfo,
+ FilteredAtime = filter_atime(Time, Config),
+ FilteredAtime = filter_atime(ActAtime, Config),
+ case os:type() of
+ {win32, _} ->
+ %% On Windows, "ctime" means creation time and it can
+ %% be set.
+ ActCtime = Time;
+ _ ->
+ ok
+ end,
+ {error, eacces} = ?PRIM_FILE:write_file(Name, "hello again"),
%% Make the file writable again.
- ?line ?PRIM_FILE_call(write_file_info, Handle,
- [Name, #file_info{mode=8#600}]),
- ?line ok = ?PRIM_FILE:write_file(Name, "hello again"),
+ ?PRIM_FILE_call(write_file_info, Handle,
+ [Name, #file_info{mode=8#600}]),
+ ok = ?PRIM_FILE:write_file(Name, "hello again"),
%% And unwritable.
- ?line ?PRIM_FILE_call(write_file_info, Handle,
- [Name, #file_info{mode=8#400}]),
- ?line {error, eacces} = ?PRIM_FILE:write_file(Name, "hello again"),
+ ?PRIM_FILE_call(write_file_info, Handle,
+ [Name, #file_info{mode=8#400}]),
+ {error, eacces} = ?PRIM_FILE:write_file(Name, "hello again"),
%% Write the times again.
%% Note: Seconds must be even; see note in file_info_times/1.
- ?line NewTime = {{1997, 02, 15}, {13, 18, 20}},
- ?line NewInfo = #file_info{atime=NewTime, mtime=NewTime, ctime=NewTime},
- ?line ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, NewInfo]),
- ?line {ok, ActualInfo2} =
+ NewTime = {{1997, 02, 15}, {13, 18, 20}},
+ NewInfo = #file_info{atime=NewTime, mtime=NewTime, ctime=NewTime},
+ ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, NewInfo]),
+ {ok, ActualInfo2} =
?PRIM_FILE_call(read_file_info, Handle, [Name]),
- ?line #file_info{atime=NewActAtime, mtime=NewTime,
- ctime=NewActCtime} = ActualInfo2,
- ?line NewFilteredAtime = filter_atime(NewTime, Config),
- ?line NewFilteredAtime = filter_atime(NewActAtime, Config),
- ?line case os:type() of
- {win32, _} -> NewActCtime = NewTime;
- _ -> ok
- end,
+ #file_info{atime=NewActAtime, mtime=NewTime,
+ ctime=NewActCtime} = ActualInfo2,
+ NewFilteredAtime = filter_atime(NewTime, Config),
+ NewFilteredAtime = filter_atime(NewActAtime, Config),
+ case os:type() of
+ {win32, _} -> NewActCtime = NewTime;
+ _ -> ok
+ end,
%% The file should still be unwritable.
- ?line {error, eacces} = ?PRIM_FILE:write_file(Name, "hello again"),
+ {error, eacces} = ?PRIM_FILE:write_file(Name, "hello again"),
%% Make the file writeable again, so that we can remove the
%% test suites ... :-)
- ?line ?PRIM_FILE_call(write_file_info, Handle,
- [Name, #file_info{mode=8#600}]),
- ?line test_server:timetrap_cancel(Dog),
+ ?PRIM_FILE_call(write_file_info, Handle,
+ [Name, #file_info{mode=8#600}]),
ok.
%% Test the write_file_info/3 function.
-file_write_file_info_opts(suite) -> [];
-file_write_file_info_opts(doc) -> [];
file_write_file_info_opts(Config) when is_list(Config) ->
{ok, Handle} = ?PRIM_FILE:start(),
- Dog = test_server:timetrap(test_server:seconds(10)),
RootDir = get_good_directory(Config),
- test_server:format("RootDir = ~p", [RootDir]),
+ io:format("RootDir = ~p", [RootDir]),
Name = filename:join(RootDir, atom_to_list(?MODULE) ++"_write_file_info_opts"),
ok = ?PRIM_FILE:write_file(Name, "hello_opts"),
lists:foreach(fun
- ({FI, Opts}) ->
- ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, FI, Opts])
- end, [
- {#file_info{ mode=8#600, atime = Time, mtime = Time, ctime = Time}, Opts} ||
- Opts <- [[{time, posix}]],
- Time <- [ 0,1,-1,100,-100,1000,-1000,10000,-10000 ]
- ]),
-
- % REM: determine date range dependent on time_t = Uint32 | Sint32 | Sint64
- % Determine time_t on os:type()?
- lists:foreach(fun
- ({FI, Opts}) ->
- ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, FI, Opts])
- end, [
- {#file_info{ mode=8#400, atime = Time, mtime = Time, ctime = Time}, Opts} ||
- Opts <- [[{time, universal}],[{time, local}]],
- Time <- [
- {{1970,1,1},{0,0,0}},
- {{1970,1,1},{0,0,1}},
- {{1969,12,31},{23,59,59}},
- {{1908,2,3},{23,59,59}},
- {{2012,2,3},{23,59,59}},
- {{2037,2,3},{23,59,59}},
- erlang:localtime()
- ]]),
+ ({FI, Opts}) ->
+ ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, FI, Opts])
+ end, [
+ {#file_info{ mode=8#600, atime = Time, mtime = Time, ctime = Time}, Opts} ||
+ Opts <- [[{time, posix}]],
+ Time <- [ 0,1,-1,100,-100,1000,-1000,10000,-10000 ]
+ ]),
+
+ %% REM: determine date range dependent on time_t = Uint32 | Sint32 | Sint64 | Uint64
+ %% Determine time_t on os:type()?
+ lists:foreach(fun ({FI, Opts}) ->
+ ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, FI, Opts])
+ end, [ {#file_info{ mode=8#400, atime = Time, mtime = Time, ctime = Time}, Opts} ||
+ Opts <- [[{time, universal}],[{time, local}]],
+ Time <- [
+ {{1970,1,1},{0,0,0}},
+ {{1970,1,1},{0,0,1}},
+ % {{1969,12,31},{23,59,59}},
+ % {{1908,2,3},{23,59,59}},
+ {{2012,2,3},{23,59,59}},
+ {{2037,2,3},{23,59,59}},
+ erlang:localtime()
+ ]]),
ok = ?PRIM_FILE:stop(Handle),
- test_server:timetrap_cancel(Dog),
ok.
-file_read_file_info_opts(suite) -> [];
-file_read_file_info_opts(doc) -> [];
file_read_file_info_opts(Config) when is_list(Config) ->
{ok, Handle} = ?PRIM_FILE:start(),
- Dog = test_server:timetrap(test_server:seconds(10)),
RootDir = get_good_directory(Config),
- test_server:format("RootDir = ~p", [RootDir]),
+ io:format("RootDir = ~p", [RootDir]),
Name = filename:join(RootDir, atom_to_list(?MODULE) ++"_read_file_info_opts"),
ok = ?PRIM_FILE:write_file(Name, "hello_opts"),
lists:foreach(fun
- (Opts) ->
- {ok,_} = ?PRIM_FILE_call(read_file_info, Handle, [Name, Opts])
- end, [[{time, Type}] || Type <- [local, universal, posix]]),
+ (Opts) ->
+ {ok,_} = ?PRIM_FILE_call(read_file_info, Handle, [Name, Opts])
+ end, [[{time, Type}] || Type <- [local, universal, posix]]),
ok = ?PRIM_FILE:stop(Handle),
- test_server:timetrap_cancel(Dog),
ok.
%% Test the write and read back *_file_info/3 functions.
-file_write_read_file_info_opts(suite) -> [];
-file_write_read_file_info_opts(doc) -> [];
file_write_read_file_info_opts(Config) when is_list(Config) ->
{ok, Handle} = ?PRIM_FILE:start(),
- Dog = test_server:timetrap(test_server:seconds(10)),
RootDir = get_good_directory(Config),
- test_server:format("RootDir = ~p", [RootDir]),
+ io:format("RootDir = ~p", [RootDir]),
Name = filename:join(RootDir, atom_to_list(?MODULE) ++"_read_write_file_info_opts"),
ok = ?PRIM_FILE:write_file(Name, "hello_opts2"),
ok = file_write_read_file_info_opts(Handle, Name, {{1989, 04, 28}, {19,30,22}}, [{time, local}]),
ok = file_write_read_file_info_opts(Handle, Name, {{1989, 04, 28}, {19,30,22}}, [{time, universal}]),
- ok = file_write_read_file_info_opts(Handle, Name, {{1930, 04, 28}, {19,30,22}}, [{time, local}]),
- ok = file_write_read_file_info_opts(Handle, Name, {{1930, 04, 28}, {19,30,22}}, [{time, universal}]),
+ %% will not work on platforms with unsigned time_t
+ %ok = file_write_read_file_info_opts(Handle, Name, {{1930, 04, 28}, {19,30,22}}, [{time, local}]),
+ %ok = file_write_read_file_info_opts(Handle, Name, {{1930, 04, 28}, {19,30,22}}, [{time, universal}]),
ok = file_write_read_file_info_opts(Handle, Name, 1, [{time, posix}]),
- ok = file_write_read_file_info_opts(Handle, Name, -1, [{time, posix}]),
+ %% will not work on platforms with unsigned time_t
+ %ok = file_write_read_file_info_opts(Handle, Name, -1, [{time, posix}]),
+ %ok = file_write_read_file_info_opts(Handle, Name, -300000, [{time, posix}]),
ok = file_write_read_file_info_opts(Handle, Name, 300000, [{time, posix}]),
- ok = file_write_read_file_info_opts(Handle, Name, -300000, [{time, posix}]),
ok = file_write_read_file_info_opts(Handle, Name, 0, [{time, posix}]),
ok = ?PRIM_FILE:stop(Handle),
- test_server:timetrap_cancel(Dog),
ok.
file_write_read_file_info_opts(Handle, Name, Mtime, Opts) ->
{ok, FI} = ?PRIM_FILE_call(read_file_info, Handle, [Name, Opts]),
FI2 = FI#file_info{ mtime = Mtime },
ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, FI2, Opts]),
- {ok, FI2} = ?PRIM_FILE_call(read_file_info, Handle, [Name, Opts]),
+ {ok, FI3} = ?PRIM_FILE_call(read_file_info, Handle, [Name, Opts]),
+ io:format("Expecting mtime = ~p, got ~p~n", [FI2#file_info.mtime, FI3#file_info.mtime]),
+ FI2 = FI3,
ok.
@@ -1166,136 +1095,131 @@ file_write_read_file_info_opts(Handle, Name, Mtime, Opts) ->
%% Returns a directory on a file system that has correct file times.
get_good_directory(Config) ->
- ?line ?config(priv_dir, Config).
+ proplists:get_value(priv_dir, Config).
-truncate(suite) -> [];
-truncate(doc) -> [];
truncate(Config) when is_list(Config) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_truncate.fil"),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_truncate.fil"),
%% Create a file with some data.
- ?line MyData = "0123456789abcdefghijklmnopqrstuvxyz",
- ?line ok = ?PRIM_FILE:write_file(Name, MyData),
+ MyData = "0123456789abcdefghijklmnopqrstuvxyz",
+ ok = ?PRIM_FILE:write_file(Name, MyData),
%% Truncate the file to 10 characters.
- ?line {ok, Fd} = ?PRIM_FILE:open(Name, [read, write]),
- ?line {ok, 10} = ?PRIM_FILE:position(Fd, 10),
- ?line ok = ?PRIM_FILE:truncate(Fd),
- ?line ok = ?PRIM_FILE:close(Fd),
+ {ok, Fd} = ?PRIM_FILE:open(Name, [read, write]),
+ {ok, 10} = ?PRIM_FILE:position(Fd, 10),
+ ok = ?PRIM_FILE:truncate(Fd),
+ ok = ?PRIM_FILE:close(Fd),
%% Read back the file and check that it has been truncated.
- ?line Expected = list_to_binary("0123456789"),
- ?line {ok, Expected} = ?PRIM_FILE:read_file(Name),
+ Expected = list_to_binary("0123456789"),
+ {ok, Expected} = ?PRIM_FILE:read_file(Name),
%% Open the file read only and verify that it is not possible to
%% truncate it, OTP-1960
- ?line {ok, Fd2} = ?PRIM_FILE:open(Name, [read]),
- ?line {ok, 5} = ?PRIM_FILE:position(Fd2, 5),
- ?line {error, _} = ?PRIM_FILE:truncate(Fd2),
+ {ok, Fd2} = ?PRIM_FILE:open(Name, [read]),
+ {ok, 5} = ?PRIM_FILE:position(Fd2, 5),
+ {error, _} = ?PRIM_FILE:truncate(Fd2),
ok.
-datasync(suite) -> [];
-datasync(doc) -> "Tests that ?PRIM_FILE:datasync/1 at least doesn't crash.";
+%% Tests that ?PRIM_FILE:datasync/1 at least doesn't crash.
datasync(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Sync = filename:join(PrivDir,
- atom_to_list(?MODULE)
- ++"_sync.fil"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Sync = filename:join(PrivDir,
+ atom_to_list(?MODULE)
+ ++"_sync.fil"),
%% Raw open.
- ?line {ok, Fd} = ?PRIM_FILE:open(Sync, [write]),
- ?line ok = ?PRIM_FILE:datasync(Fd),
- ?line ok = ?PRIM_FILE:close(Fd),
+ {ok, Fd} = ?PRIM_FILE:open(Sync, [write]),
+ ok = ?PRIM_FILE:datasync(Fd),
+ ok = ?PRIM_FILE:close(Fd),
ok.
-sync(suite) -> [];
-sync(doc) -> "Tests that ?PRIM_FILE:sync/1 at least doesn't crash.";
+%% Tests that ?PRIM_FILE:sync/1 at least doesn't crash.
sync(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Sync = filename:join(PrivDir,
- atom_to_list(?MODULE)
- ++"_sync.fil"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Sync = filename:join(PrivDir,
+ atom_to_list(?MODULE)
+ ++"_sync.fil"),
%% Raw open.
- ?line {ok, Fd} = ?PRIM_FILE:open(Sync, [write]),
- ?line ok = ?PRIM_FILE:sync(Fd),
- ?line ok = ?PRIM_FILE:close(Fd),
+ {ok, Fd} = ?PRIM_FILE:open(Sync, [write]),
+ ok = ?PRIM_FILE:sync(Fd),
+ ok = ?PRIM_FILE:close(Fd),
ok.
-advise(suite) -> [];
-advise(doc) -> "Tests that ?PRIM_FILE:advise/4 at least doesn't crash.";
+%% Tests that ?PRIM_FILE:advise/4 at least doesn't crash.
advise(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Advise = filename:join(PrivDir,
- atom_to_list(?MODULE)
- ++"_advise.fil"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Advise = filename:join(PrivDir,
+ atom_to_list(?MODULE)
+ ++"_advise.fil"),
Line1 = "Hello\n",
Line2 = "World!\n",
- ?line {ok, Fd} = ?PRIM_FILE:open(Advise, [write]),
- ?line ok = ?PRIM_FILE:advise(Fd, 0, 0, normal),
- ?line ok = ?PRIM_FILE:write(Fd, Line1),
- ?line ok = ?PRIM_FILE:write(Fd, Line2),
- ?line ok = ?PRIM_FILE:close(Fd),
-
- ?line {ok, Fd2} = ?PRIM_FILE:open(Advise, [write]),
- ?line ok = ?PRIM_FILE:advise(Fd2, 0, 0, random),
- ?line ok = ?PRIM_FILE:write(Fd2, Line1),
- ?line ok = ?PRIM_FILE:write(Fd2, Line2),
- ?line ok = ?PRIM_FILE:close(Fd2),
-
- ?line {ok, Fd3} = ?PRIM_FILE:open(Advise, [write]),
- ?line ok = ?PRIM_FILE:advise(Fd3, 0, 0, sequential),
- ?line ok = ?PRIM_FILE:write(Fd3, Line1),
- ?line ok = ?PRIM_FILE:write(Fd3, Line2),
- ?line ok = ?PRIM_FILE:close(Fd3),
-
- ?line {ok, Fd4} = ?PRIM_FILE:open(Advise, [write]),
- ?line ok = ?PRIM_FILE:advise(Fd4, 0, 0, will_need),
- ?line ok = ?PRIM_FILE:write(Fd4, Line1),
- ?line ok = ?PRIM_FILE:write(Fd4, Line2),
- ?line ok = ?PRIM_FILE:close(Fd4),
-
- ?line {ok, Fd5} = ?PRIM_FILE:open(Advise, [write]),
- ?line ok = ?PRIM_FILE:advise(Fd5, 0, 0, dont_need),
- ?line ok = ?PRIM_FILE:write(Fd5, Line1),
- ?line ok = ?PRIM_FILE:write(Fd5, Line2),
- ?line ok = ?PRIM_FILE:close(Fd5),
-
- ?line {ok, Fd6} = ?PRIM_FILE:open(Advise, [write]),
- ?line ok = ?PRIM_FILE:advise(Fd6, 0, 0, no_reuse),
- ?line ok = ?PRIM_FILE:write(Fd6, Line1),
- ?line ok = ?PRIM_FILE:write(Fd6, Line2),
- ?line ok = ?PRIM_FILE:close(Fd6),
-
- ?line {ok, Fd7} = ?PRIM_FILE:open(Advise, [write]),
- ?line {error, einval} = ?PRIM_FILE:advise(Fd7, 0, 0, bad_advise),
- ?line ok = ?PRIM_FILE:close(Fd7),
+ {ok, Fd} = ?PRIM_FILE:open(Advise, [write]),
+ ok = ?PRIM_FILE:advise(Fd, 0, 0, normal),
+ ok = ?PRIM_FILE:write(Fd, Line1),
+ ok = ?PRIM_FILE:write(Fd, Line2),
+ ok = ?PRIM_FILE:close(Fd),
+
+ {ok, Fd2} = ?PRIM_FILE:open(Advise, [write]),
+ ok = ?PRIM_FILE:advise(Fd2, 0, 0, random),
+ ok = ?PRIM_FILE:write(Fd2, Line1),
+ ok = ?PRIM_FILE:write(Fd2, Line2),
+ ok = ?PRIM_FILE:close(Fd2),
+
+ {ok, Fd3} = ?PRIM_FILE:open(Advise, [write]),
+ ok = ?PRIM_FILE:advise(Fd3, 0, 0, sequential),
+ ok = ?PRIM_FILE:write(Fd3, Line1),
+ ok = ?PRIM_FILE:write(Fd3, Line2),
+ ok = ?PRIM_FILE:close(Fd3),
+
+ {ok, Fd4} = ?PRIM_FILE:open(Advise, [write]),
+ ok = ?PRIM_FILE:advise(Fd4, 0, 0, will_need),
+ ok = ?PRIM_FILE:write(Fd4, Line1),
+ ok = ?PRIM_FILE:write(Fd4, Line2),
+ ok = ?PRIM_FILE:close(Fd4),
+
+ {ok, Fd5} = ?PRIM_FILE:open(Advise, [write]),
+ ok = ?PRIM_FILE:advise(Fd5, 0, 0, dont_need),
+ ok = ?PRIM_FILE:write(Fd5, Line1),
+ ok = ?PRIM_FILE:write(Fd5, Line2),
+ ok = ?PRIM_FILE:close(Fd5),
+
+ {ok, Fd6} = ?PRIM_FILE:open(Advise, [write]),
+ ok = ?PRIM_FILE:advise(Fd6, 0, 0, no_reuse),
+ ok = ?PRIM_FILE:write(Fd6, Line1),
+ ok = ?PRIM_FILE:write(Fd6, Line2),
+ ok = ?PRIM_FILE:close(Fd6),
+
+ {ok, Fd7} = ?PRIM_FILE:open(Advise, [write]),
+ {error, einval} = ?PRIM_FILE:advise(Fd7, 0, 0, bad_advise),
+ ok = ?PRIM_FILE:close(Fd7),
%% test write without advise, then a read after an advise
- ?line {ok, Fd8} = ?PRIM_FILE:open(Advise, [write]),
- ?line ok = ?PRIM_FILE:write(Fd8, Line1),
- ?line ok = ?PRIM_FILE:write(Fd8, Line2),
- ?line ok = ?PRIM_FILE:close(Fd8),
- ?line {ok, Fd9} = ?PRIM_FILE:open(Advise, [read]),
+ {ok, Fd8} = ?PRIM_FILE:open(Advise, [write]),
+ ok = ?PRIM_FILE:write(Fd8, Line1),
+ ok = ?PRIM_FILE:write(Fd8, Line2),
+ ok = ?PRIM_FILE:close(Fd8),
+ {ok, Fd9} = ?PRIM_FILE:open(Advise, [read]),
Offset = 0,
%% same as a 0 length in some implementations
Length = length(Line1) + length(Line2),
- ?line ok = ?PRIM_FILE:advise(Fd9, Offset, Length, sequential),
- ?line {ok, Line1} = ?PRIM_FILE:read_line(Fd9),
- ?line {ok, Line2} = ?PRIM_FILE:read_line(Fd9),
- ?line eof = ?PRIM_FILE:read_line(Fd9),
- ?line ok = ?PRIM_FILE:close(Fd9),
+ ok = ?PRIM_FILE:advise(Fd9, Offset, Length, sequential),
+ {ok, Line1} = ?PRIM_FILE:read_line(Fd9),
+ {ok, Line2} = ?PRIM_FILE:read_line(Fd9),
+ eof = ?PRIM_FILE:read_line(Fd9),
+ ok = ?PRIM_FILE:close(Fd9),
ok.
@@ -1307,7 +1231,6 @@ large_write(Config) when is_list(Config) ->
"_large_write").
do_large_write(Name) ->
- Dog = test_server:timetrap(test_server:minutes(60)),
ChunkSize = (256 bsl 20) + 1, % 256 M + 1
Chunks = 16, % times 16 -> 4 G + 16
Base = 100,
@@ -1320,187 +1243,177 @@ do_large_write(Name) ->
ok when Wordsize =:= 8 ->
{ok,#file_info{size=Size}} = file:read_file_info(Name),
{ok,Fd} = prim_file:open(Name, [read]),
- check_large_write(Dog, Fd, ChunkSize, 0, Interleave);
+ check_large_write(Fd, ChunkSize, 0, Interleave);
{error,einval} when Wordsize =:= 4 ->
ok
end.
-check_large_write(Dog, Fd, ChunkSize, Pos, [X|Interleave]) ->
+check_large_write(Fd, ChunkSize, Pos, [X|Interleave]) ->
Pos1 = Pos + ChunkSize,
{ok,Pos1} = prim_file:position(Fd, {cur,ChunkSize}),
{ok,[X]} = prim_file:read(Fd, 1),
- check_large_write(Dog, Fd, ChunkSize, Pos1+1, Interleave);
-check_large_write(Dog, Fd, _, _, []) ->
+ check_large_write(Fd, ChunkSize, Pos1+1, Interleave);
+check_large_write(Fd, _, _, []) ->
eof = prim_file:read(Fd, 1),
- test_server:timetrap_cancel(Dog),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-allocate(suite) -> [];
-allocate(doc) -> "Tests that ?PRIM_FILE:allocate/3 at least doesn't crash.";
+%% Tests that ?PRIM_FILE:allocate/3 at least doesn't crash.
allocate(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Allocate = filename:join(PrivDir,
- atom_to_list(?MODULE)
- ++"_allocate.fil"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Allocate = filename:join(PrivDir,
+ atom_to_list(?MODULE)
+ ++"_allocate.fil"),
Line1 = "Hello\n",
Line2 = "World!\n",
- ?line {ok, Fd} = ?PRIM_FILE:open(Allocate, [write, binary]),
+ {ok, Fd} = ?PRIM_FILE:open(Allocate, [write, binary]),
allocate_and_assert(Fd, 1, iolist_size([Line1, Line2])),
- ?line ok = ?PRIM_FILE:write(Fd, Line1),
- ?line ok = ?PRIM_FILE:write(Fd, Line2),
- ?line ok = ?PRIM_FILE:close(Fd),
+ ok = ?PRIM_FILE:write(Fd, Line1),
+ ok = ?PRIM_FILE:write(Fd, Line2),
+ ok = ?PRIM_FILE:close(Fd),
- ?line {ok, Fd2} = ?PRIM_FILE:open(Allocate, [write, binary]),
+ {ok, Fd2} = ?PRIM_FILE:open(Allocate, [write, binary]),
allocate_and_assert(Fd2, 1, iolist_size(Line1)),
- ?line ok = ?PRIM_FILE:write(Fd2, Line1),
- ?line ok = ?PRIM_FILE:write(Fd2, Line2),
- ?line ok = ?PRIM_FILE:close(Fd2),
+ ok = ?PRIM_FILE:write(Fd2, Line1),
+ ok = ?PRIM_FILE:write(Fd2, Line2),
+ ok = ?PRIM_FILE:close(Fd2),
- ?line {ok, Fd3} = ?PRIM_FILE:open(Allocate, [write, binary]),
+ {ok, Fd3} = ?PRIM_FILE:open(Allocate, [write, binary]),
allocate_and_assert(Fd3, 1, iolist_size(Line1) + 1),
- ?line ok = ?PRIM_FILE:write(Fd3, Line1),
- ?line ok = ?PRIM_FILE:write(Fd3, Line2),
- ?line ok = ?PRIM_FILE:close(Fd3),
+ ok = ?PRIM_FILE:write(Fd3, Line1),
+ ok = ?PRIM_FILE:write(Fd3, Line2),
+ ok = ?PRIM_FILE:close(Fd3),
- ?line {ok, Fd4} = ?PRIM_FILE:open(Allocate, [write, binary]),
+ {ok, Fd4} = ?PRIM_FILE:open(Allocate, [write, binary]),
allocate_and_assert(Fd4, 1, 4 * iolist_size([Line1, Line2])),
- ?line ok = ?PRIM_FILE:write(Fd4, Line1),
- ?line ok = ?PRIM_FILE:write(Fd4, Line2),
- ?line ok = ?PRIM_FILE:close(Fd4),
+ ok = ?PRIM_FILE:write(Fd4, Line1),
+ ok = ?PRIM_FILE:write(Fd4, Line2),
+ ok = ?PRIM_FILE:close(Fd4),
ok.
allocate_and_assert(Fd, Offset, Length) ->
- % Just verify that calls to ?PRIM_FILE:allocate/3 don't crash or have
- % any other negative side effect. We can't really asssert against a
- % specific return value, because support for file space pre-allocation
- % depends on the OS, OS version and underlying filesystem.
- %
- % The Linux kernel added support for fallocate() in version 2.6.23,
- % which currently works only for the ext4, ocfs2, xfs and btrfs file
- % systems. posix_fallocate() is available in glibc as of version
- % 2.1.94, but it was buggy until glibc version 2.7.
- %
- % Mac OS X, as of version 10.3, supports the fcntl operation F_PREALLOCATE.
- %
- % Solaris supports posix_fallocate() but only for the UFS file system
- % apparently (not supported for ZFS).
- %
- % FreeBSD 9.0 is the first FreeBSD release supporting posix_fallocate().
- %
- % For Windows there's apparently no way to pre-allocate file space, at
- % least with similar API/semantics as posix_fallocate(), fallocate() or
- % fcntl F_PREALLOCATE.
+ %% Just verify that calls to ?PRIM_FILE:allocate/3 don't crash or have
+ %% any other negative side effect. We can't really asssert against a
+ %% specific return value, because support for file space pre-allocation
+ %% depends on the OS, OS version and underlying filesystem.
+ %%
+ %% The Linux kernel added support for fallocate() in version 2.6.23,
+ %% which currently works only for the ext4, ocfs2, xfs and btrfs file
+ %% systems. posix_fallocate() is available in glibc as of version
+ %% 2.1.94, but it was buggy until glibc version 2.7.
+ %%
+ %% Mac OS X, as of version 10.3, supports the fcntl operation F_PREALLOCATE.
+ %%
+ %% Solaris supports posix_fallocate() but only for the UFS file system
+ %% apparently (not supported for ZFS).
+ %%
+ %% FreeBSD 9.0 is the first FreeBSD release supporting posix_fallocate().
+ %%
+ %% For Windows there's apparently no way to pre-allocate file space, at
+ %% least with similar API/semantics as posix_fallocate(), fallocate() or
+ %% fcntl F_PREALLOCATE.
Result = ?PRIM_FILE:allocate(Fd, Offset, Length),
case os:type() of
{win32, _} ->
- ?line {error, enotsup} = Result;
+ {error, enotsup} = Result;
_ ->
- ?line _ = Result
+ _ = Result
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-delete_a(suite) -> [];
-delete_a(doc) -> [];
delete_a(Config) when is_list(Config) ->
delete(Config, [], "_a").
-delete_b(suite) -> [];
-delete_b(doc) -> [];
delete_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = delete(Config, Handle, "_b"),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
delete(Config, Handle, Suffix) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line Name = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_delete"++Suffix++".fil"),
- ?line {ok, Fd1} = ?PRIM_FILE:open(Name, [write]),
- ?line ?PRIM_FILE:write(Fd1,"ok.\n"),
- ?line ok = ?PRIM_FILE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ Name = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_delete"++Suffix++".fil"),
+ {ok, Fd1} = ?PRIM_FILE:open(Name, [write]),
+ ?PRIM_FILE:write(Fd1,"ok.\n"),
+ ok = ?PRIM_FILE:close(Fd1),
%% Check that the file is readable
- ?line {ok, Fd2} = ?PRIM_FILE:open(Name, [read]),
- ?line ok = ?PRIM_FILE:close(Fd2),
- ?line ok = ?PRIM_FILE_call(delete, Handle, [Name]),
+ {ok, Fd2} = ?PRIM_FILE:open(Name, [read]),
+ ok = ?PRIM_FILE:close(Fd2),
+ ok = ?PRIM_FILE_call(delete, Handle, [Name]),
%% Check that the file is not readable anymore
- ?line {error, _} = ?PRIM_FILE:open(Name, [read]),
+ {error, _} = ?PRIM_FILE:open(Name, [read]),
%% Try deleting a nonexistent file
- ?line {error, enoent} = ?PRIM_FILE_call(delete, Handle, [Name]),
+ {error, enoent} = ?PRIM_FILE_call(delete, Handle, [Name]),
ok.
-rename_a(suite) ->[];
-rename_a(doc) ->[];
rename_a(Config) when is_list(Config) ->
rename(Config, [], "_a").
-rename_b(suite) ->[];
-rename_b(doc) ->[];
rename_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = rename(Config, Handle, "_b"),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
rename(Config, Handle, Suffix) ->
- ?line RootDir = ?config(priv_dir,Config),
- ?line FileName1 = atom_to_list(?MODULE)++"_rename"++Suffix++".fil",
- ?line FileName2 = atom_to_list(?MODULE)++"_rename"++Suffix++".ful",
- ?line Name1 = filename:join(RootDir, FileName1),
- ?line Name2 = filename:join(RootDir, FileName2),
- ?line {ok,Fd1} = ?PRIM_FILE:open(Name1, [write]),
- ?line ok = ?PRIM_FILE:close(Fd1),
+ RootDir = proplists:get_value(priv_dir,Config),
+ FileName1 = atom_to_list(?MODULE)++"_rename"++Suffix++".fil",
+ FileName2 = atom_to_list(?MODULE)++"_rename"++Suffix++".ful",
+ Name1 = filename:join(RootDir, FileName1),
+ Name2 = filename:join(RootDir, FileName2),
+ {ok,Fd1} = ?PRIM_FILE:open(Name1, [write]),
+ ok = ?PRIM_FILE:close(Fd1),
%% Rename, and check that it really changed name
- ?line ok = ?PRIM_FILE_call(rename, Handle, [Name1, Name2]),
- ?line {error, _} = ?PRIM_FILE:open(Name1, [read]),
- ?line {ok, Fd2} = ?PRIM_FILE:open(Name2, [read]),
- ?line ok = ?PRIM_FILE:close(Fd2),
+ ok = ?PRIM_FILE_call(rename, Handle, [Name1, Name2]),
+ {error, _} = ?PRIM_FILE:open(Name1, [read]),
+ {ok, Fd2} = ?PRIM_FILE:open(Name2, [read]),
+ ok = ?PRIM_FILE:close(Fd2),
%% Try renaming something to itself
- ?line ok = ?PRIM_FILE_call(rename, Handle, [Name2, Name2]),
+ ok = ?PRIM_FILE_call(rename, Handle, [Name2, Name2]),
%% Try renaming something that doesn't exist
- ?line {error, enoent} =
+ {error, enoent} =
?PRIM_FILE_call(rename, Handle, [Name1, Name2]),
%% Try renaming to something else than a string
- ?line {error, badarg} =
+ {error, badarg} =
?PRIM_FILE_call(rename, Handle, [Name1, foobar]),
-
+
%% Move between directories
- ?line DirName1 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_rename_dir"++Suffix),
- ?line DirName2 = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_second_rename_dir"++Suffix),
- ?line Name1foo = filename:join(DirName1, "foo.fil"),
- ?line Name2foo = filename:join(DirName2, "foo.fil"),
- ?line Name2bar = filename:join(DirName2, "bar.dir"),
- ?line ok = ?PRIM_FILE:make_dir(DirName1),
+ DirName1 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_rename_dir"++Suffix),
+ DirName2 = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_second_rename_dir"++Suffix),
+ Name1foo = filename:join(DirName1, "foo.fil"),
+ Name2foo = filename:join(DirName2, "foo.fil"),
+ Name2bar = filename:join(DirName2, "bar.dir"),
+ ok = ?PRIM_FILE:make_dir(DirName1),
%% The name has to include the full file name, path is not enough
- ?line expect(
- {error, eexist}, {error, eisdir},
- ?PRIM_FILE_call(rename, Handle, [Name2, DirName1])),
- ?line ok =
+ expect(
+ {error, eexist}, {error, eisdir},
+ ?PRIM_FILE_call(rename, Handle, [Name2, DirName1])),
+ ok =
?PRIM_FILE_call(rename, Handle, [Name2, Name1foo]),
%% Now rename the directory
- ?line ok = ?PRIM_FILE_call(rename, Handle, [DirName1, DirName2]),
+ ok = ?PRIM_FILE_call(rename, Handle, [DirName1, DirName2]),
%% And check that the file is there now
- ?line {ok,Fd3} = ?PRIM_FILE:open(Name2foo, [read]),
- ?line ok = ?PRIM_FILE:close(Fd3),
+ {ok,Fd3} = ?PRIM_FILE:open(Name2foo, [read]),
+ ok = ?PRIM_FILE:close(Fd3),
%% Try some dirty things now: move the directory into itself
- ?line {error, Msg1} =
+ {error, Msg1} =
?PRIM_FILE_call(rename, Handle, [DirName2, Name2bar]),
- ?line io:format("Errmsg1: ~p",[Msg1]),
+ io:format("Errmsg1: ~p",[Msg1]),
%% move dir into a file in itself
- ?line {error, Msg2} =
+ {error, Msg2} =
?PRIM_FILE_call(rename, Handle, [DirName2, Name2foo]),
- ?line io:format("Errmsg2: ~p",[Msg2]),
+ io:format("Errmsg2: ~p",[Msg2]),
ok.
@@ -1509,45 +1422,41 @@ rename(Config, Handle, Suffix) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-e_delete(suite) -> [];
-e_delete(doc) -> [];
e_delete(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line Base = filename:join(RootDir,
- atom_to_list(?MODULE)++"_e_delete"),
- ?line ok = ?PRIM_FILE:make_dir(Base),
+ RootDir = proplists:get_value(priv_dir, Config),
+ Base = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_e_delete"),
+ ok = ?PRIM_FILE:make_dir(Base),
%% Delete a non-existing file.
- ?line {error, enoent} =
+ {error, enoent} =
?PRIM_FILE:delete(filename:join(Base, "non_existing")),
%% Delete a directory.
- ?line {error, eperm} = ?PRIM_FILE:delete(Base),
+ {error, eperm} = ?PRIM_FILE:delete(Base),
%% Use a path-name with a non-directory component.
- ?line Afile = filename:join(Base, "a_file"),
- ?line ok = ?PRIM_FILE:write_file(Afile, "hello\n"),
- ?line {error, E} =
+ Afile = filename:join(Base, "a_file"),
+ ok = ?PRIM_FILE:write_file(Afile, "hello\n"),
+ {error, E} =
expect(
{error, enotdir}, {error, enoent},
?PRIM_FILE:delete(filename:join(Afile, "another_file"))),
- ?line io:format("Result: ~p~n", [E]),
+ io:format("Result: ~p~n", [E]),
%% No permission.
- ?line case os:type() of
- {win32, _} ->
- %% Remove a character device.
- ?line {error, eacces} = ?PRIM_FILE:delete("nul");
- _ ->
- ?line ?PRIM_FILE:write_file_info(
- Base, #file_info {mode=0}),
- ?line {error, eacces} = ?PRIM_FILE:delete(Afile),
- ?line ?PRIM_FILE:write_file_info(
- Base, #file_info {mode=8#600})
- end,
-
- ?line test_server:timetrap_cancel(Dog),
+ case os:type() of
+ {win32, _} ->
+ %% Remove a character device.
+ {error, eacces} = ?PRIM_FILE:delete("nul");
+ _ ->
+ ?PRIM_FILE:write_file_info(
+ Base, #file_info {mode=0}),
+ {error, eacces} = ?PRIM_FILE:delete(Afile),
+ ?PRIM_FILE:write_file_info(
+ Base, #file_info {mode=8#600})
+ end,
+
ok.
%%% FreeBSD gives EEXIST when renaming a file to an empty dir, although the
@@ -1555,66 +1464,63 @@ e_delete(Config) when is_list(Config) ->
%%% (What about FreeBSD? We store our nightly build results on a FreeBSD
%%% file system, that's what.)
-e_rename(suite) -> [];
-e_rename(doc) -> [];
e_rename(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line Base = filename:join(RootDir,
- atom_to_list(?MODULE)++"_e_rename"),
- ?line ok = ?PRIM_FILE:make_dir(Base),
+ RootDir = proplists:get_value(priv_dir, Config),
+ Base = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_e_rename"),
+ ok = ?PRIM_FILE:make_dir(Base),
%% Create an empty directory.
- ?line EmptyDir = filename:join(Base, "empty_dir"),
- ?line ok = ?PRIM_FILE:make_dir(EmptyDir),
+ EmptyDir = filename:join(Base, "empty_dir"),
+ ok = ?PRIM_FILE:make_dir(EmptyDir),
%% Create a non-empty directory.
- ?line NonEmptyDir = filename:join(Base, "non_empty_dir"),
- ?line ok = ?PRIM_FILE:make_dir(NonEmptyDir),
- ?line ok = ?PRIM_FILE:write_file(
- filename:join(NonEmptyDir, "a_file"),
- "hello\n"),
+ NonEmptyDir = filename:join(Base, "non_empty_dir"),
+ ok = ?PRIM_FILE:make_dir(NonEmptyDir),
+ ok = ?PRIM_FILE:write_file(
+ filename:join(NonEmptyDir, "a_file"),
+ "hello\n"),
%% Create another non-empty directory.
- ?line ADirectory = filename:join(Base, "a_directory"),
- ?line ok = ?PRIM_FILE:make_dir(ADirectory),
- ?line ok = ?PRIM_FILE:write_file(
- filename:join(ADirectory, "a_file"),
- "howdy\n\n"),
+ ADirectory = filename:join(Base, "a_directory"),
+ ok = ?PRIM_FILE:make_dir(ADirectory),
+ ok = ?PRIM_FILE:write_file(
+ filename:join(ADirectory, "a_file"),
+ "howdy\n\n"),
%% Create a data file.
- ?line File = filename:join(Base, "just_a_file"),
- ?line ok = ?PRIM_FILE:write_file(File, "anything goes\n\n"),
+ File = filename:join(Base, "just_a_file"),
+ ok = ?PRIM_FILE:write_file(File, "anything goes\n\n"),
%% Move an existing directory to a non-empty directory.
- ?line {error, eexist} =
- ?PRIM_FILE:rename(ADirectory, NonEmptyDir),
+ {error, eexist} =
+ ?PRIM_FILE:rename(ADirectory, NonEmptyDir),
%% Move a root directory.
- ?line {error, einval} = ?PRIM_FILE:rename("/", "arne"),
+ {error, einval} = ?PRIM_FILE:rename("/", "arne"),
%% Move Base into Base/new_name.
- ?line {error, einval} =
- ?PRIM_FILE:rename(Base, filename:join(Base, "new_name")),
+ {error, einval} =
+ ?PRIM_FILE:rename(Base, filename:join(Base, "new_name")),
%% Overwrite a directory with a file.
- ?line expect({error, eexist}, % FreeBSD (?)
- {error, eisdir},
- ?PRIM_FILE:rename(File, EmptyDir)),
- ?line expect({error, eexist}, % FreeBSD (?)
- {error, eisdir},
- ?PRIM_FILE:rename(File, NonEmptyDir)),
+ expect({error, eexist}, % FreeBSD (?)
+ {error, eisdir},
+ ?PRIM_FILE:rename(File, EmptyDir)),
+ expect({error, eexist}, % FreeBSD (?)
+ {error, eisdir},
+ ?PRIM_FILE:rename(File, NonEmptyDir)),
%% Move a non-existing file.
- ?line NonExistingFile = filename:join(
- Base, "non_existing_file"),
- ?line {error, enoent} =
- ?PRIM_FILE:rename(NonExistingFile, NonEmptyDir),
+ NonExistingFile = filename:join(
+ Base, "non_existing_file"),
+ {error, enoent} =
+ ?PRIM_FILE:rename(NonExistingFile, NonEmptyDir),
%% Overwrite a file with a directory.
- ?line expect({error, eexist}, % FreeBSD (?)
- {error, enotdir},
- ?PRIM_FILE:rename(ADirectory, File)),
+ expect({error, eexist}, % FreeBSD (?)
+ {error, enotdir},
+ ?PRIM_FILE:rename(ADirectory, File)),
%% Move a file to another filesystem.
%% XXX - This test case is bogus. We cannot be guaranteed that
@@ -1622,166 +1528,149 @@ e_rename(Config) when is_list(Config) ->
%% different filesystems.
%%
%% XXX - Gross hack!
- ?line Comment =
- case os:type() of
- {win32, _} ->
- %% At least Windows NT can
- %% successfully move a file to
- %% another drive.
- ok;
- {unix, _ } ->
- OtherFs = "/tmp",
- ?line NameOnOtherFs =
- filename:join(OtherFs,
- filename:basename(File)),
- ?line {ok, Com} =
- case ?PRIM_FILE:rename(
- File, NameOnOtherFs) of
- {error, exdev} ->
- %% The file could be in
- %% the same filesystem!
- {ok, ok};
- ok ->
- {ok, {comment,
- "Moving between filesystems "
- "suceeded, files are probably "
- "in the same filesystem!"}};
- {error, eperm} ->
- {ok, {comment, "SBS! You don't "
- "have the permission to do "
- "this test!"}};
- Else ->
- Else
- end,
- Com;
- {ose, _} ->
- %% disabled for now
- ok
- end,
- ?line test_server:timetrap_cancel(Dog),
+ Comment =
+ case os:type() of
+ {win32, _} ->
+ %% At least Windows NT can
+ %% successfully move a file to
+ %% another drive.
+ ok;
+ _ ->
+ OtherFs = "/tmp",
+ NameOnOtherFs =
+ filename:join(OtherFs,
+ filename:basename(File)),
+ {ok, Com} =
+ case ?PRIM_FILE:rename(
+ File, NameOnOtherFs) of
+ {error, exdev} ->
+ %% The file could be in
+ %% the same filesystem!
+ {ok, ok};
+ ok ->
+ {ok, {comment,
+ "Moving between filesystems "
+ "suceeded, files are probably "
+ "in the same filesystem!"}};
+ {error, eperm} ->
+ {ok, {comment, "SBS! You don't "
+ "have the permission to do "
+ "this test!"}};
+ Else ->
+ Else
+ end,
+ Com
+ end,
Comment.
-e_make_dir(suite) -> [];
-e_make_dir(doc) -> [];
e_make_dir(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line Base = filename:join(RootDir,
- atom_to_list(?MODULE)++"_e_make_dir"),
- ?line ok = ?PRIM_FILE:make_dir(Base),
+ RootDir = proplists:get_value(priv_dir, Config),
+ Base = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_e_make_dir"),
+ ok = ?PRIM_FILE:make_dir(Base),
%% A component of the path does not exist.
- ?line {error, enoent} =
+ {error, enoent} =
?PRIM_FILE:make_dir(filename:join([Base, "a", "b"])),
%% Use a path-name with a non-directory component.
- ?line Afile = filename:join(Base, "a_directory"),
- ?line ok = ?PRIM_FILE:write_file(Afile, "hello\n"),
- ?line case ?PRIM_FILE:make_dir(
- filename:join(Afile, "another_directory")) of
- {error, enotdir} -> io:format("Result: enotdir");
- {error, enoent} -> io:format("Result: enoent")
- end,
+ Afile = filename:join(Base, "a_directory"),
+ ok = ?PRIM_FILE:write_file(Afile, "hello\n"),
+ case ?PRIM_FILE:make_dir(
+ filename:join(Afile, "another_directory")) of
+ {error, enotdir} -> io:format("Result: enotdir");
+ {error, enoent} -> io:format("Result: enoent")
+ end,
%% No permission (on Unix only).
case os:type() of
{win32, _} ->
ok;
_ ->
- ?line ?PRIM_FILE:write_file_info(Base, #file_info {mode=0}),
- ?line {error, eacces} =
+ ?PRIM_FILE:write_file_info(Base, #file_info {mode=0}),
+ {error, eacces} =
?PRIM_FILE:make_dir(filename:join(Base, "xxxx")),
- ?line
- ?PRIM_FILE:write_file_info(Base, #file_info {mode=8#600})
+ ?PRIM_FILE:write_file_info(Base, #file_info {mode=8#600})
end,
- ?line test_server:timetrap_cancel(Dog),
ok.
-e_del_dir(suite) -> [];
-e_del_dir(doc) -> [];
e_del_dir(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line Base = filename:join(RootDir,
- atom_to_list(?MODULE)++"_e_del_dir"),
- ?line io:format("Base: ~p", [Base]),
- ?line ok = ?PRIM_FILE:make_dir(Base),
+ RootDir = proplists:get_value(priv_dir, Config),
+ Base = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_e_del_dir"),
+ io:format("Base: ~p", [Base]),
+ ok = ?PRIM_FILE:make_dir(Base),
%% Delete a non-existent directory.
- ?line {error, enoent} =
+ {error, enoent} =
?PRIM_FILE:del_dir(filename:join(Base, "non_existing")),
%% Use a path-name with a non-directory component.
- ?line Afile = filename:join(Base, "a_directory"),
- ?line ok = ?PRIM_FILE:write_file(Afile, "hello\n"),
- ?line {error, E1} =
+ Afile = filename:join(Base, "a_directory"),
+ ok = ?PRIM_FILE:write_file(Afile, "hello\n"),
+ {error, E1} =
expect({error, enotdir}, {error, enoent},
?PRIM_FILE:del_dir(
filename:join(Afile, "another_directory"))),
- ?line io:format("Result: ~p", [E1]),
+ io:format("Result: ~p", [E1]),
%% Delete a non-empty directory.
%% Delete a non-empty directory.
- ?line {error, E2} =
+ {error, E2} =
expect({error, enotempty}, {error, eexist}, {error, eacces},
?PRIM_FILE:del_dir(Base)),
- ?line io:format("Result: ~p", [E2]),
+ io:format("Result: ~p", [E2]),
%% Remove the current directory.
- ?line {error, E3} =
+ {error, E3} =
expect({error, einval},
{error, eperm}, % Linux and DUX
{error, eacces},
{error, ebusy},
?PRIM_FILE:del_dir(".")),
- ?line io:format("Result: ~p", [E3]),
+ io:format("Result: ~p", [E3]),
%% No permission.
case os:type() of
{win32, _} ->
ok;
_ ->
- ?line ADirectory = filename:join(Base, "no_perm"),
- ?line ok = ?PRIM_FILE:make_dir(ADirectory),
- ?line ?PRIM_FILE:write_file_info(Base, #file_info {mode=0}),
- ?line {error, eacces} = ?PRIM_FILE:del_dir(ADirectory),
- ?line ?PRIM_FILE:write_file_info(
- Base, #file_info {mode=8#600})
+ ADirectory = filename:join(Base, "no_perm"),
+ ok = ?PRIM_FILE:make_dir(ADirectory),
+ ?PRIM_FILE:write_file_info(Base, #file_info {mode=0}),
+ {error, eacces} = ?PRIM_FILE:del_dir(ADirectory),
+ ?PRIM_FILE:write_file_info(
+ Base, #file_info {mode=8#600})
end,
- ?line test_server:timetrap_cancel(Dog),
ok.
%% Trying reading and positioning from a compressed file.
-read_compressed(suite) -> [];
-read_compressed(doc) -> [];
read_compressed(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line Real = filename:join(Data, "realmen.html.gz"),
- ?line {ok, Fd} = ?PRIM_FILE:open(Real, [read, compressed]),
- ?line try_read_file(Fd).
+ Data = proplists:get_value(data_dir, Config),
+ Real = filename:join(Data, "realmen.html.gz"),
+ {ok, Fd} = ?PRIM_FILE:open(Real, [read, compressed]),
+ try_read_file(Fd).
%% Trying reading and positioning from an uncompressed file,
%% but with the compressed flag given.
-read_not_really_compressed(suite) -> [];
-read_not_really_compressed(doc) -> [];
read_not_really_compressed(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line Priv = ?config(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
%% The file realmen.html might have got CRs added (by WinZip).
%% Remove them, or the file positions will not be correct.
- ?line Real = filename:join(Data, "realmen.html"),
- ?line RealPriv = filename:join(Priv,
- atom_to_list(?MODULE)++"_realmen.html"),
- ?line {ok, RealDataBin} = ?PRIM_FILE:read_file(Real),
- ?line RealData = remove_crs(binary_to_list(RealDataBin), []),
- ?line ok = ?PRIM_FILE:write_file(RealPriv, RealData),
- ?line {ok, Fd} = ?PRIM_FILE:open(RealPriv, [read, compressed]),
- ?line try_read_file(Fd).
+ Real = filename:join(Data, "realmen.html"),
+ RealPriv = filename:join(Priv,
+ atom_to_list(?MODULE)++"_realmen.html"),
+ {ok, RealDataBin} = ?PRIM_FILE:read_file(Real),
+ RealData = remove_crs(binary_to_list(RealDataBin), []),
+ ok = ?PRIM_FILE:write_file(RealPriv, RealData),
+ {ok, Fd} = ?PRIM_FILE:open(RealPriv, [read, compressed]),
+ try_read_file(Fd).
remove_crs([$\r|Rest], Result) ->
remove_crs(Rest, Result);
@@ -1791,72 +1680,66 @@ remove_crs([], Result) ->
lists:reverse(Result).
try_read_file(Fd) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
-
%% Seek to the current position (nothing should happen).
- ?line {ok, 0} = ?PRIM_FILE:position(Fd, 0),
- ?line {ok, 0} = ?PRIM_FILE:position(Fd, {cur, 0}),
+ {ok, 0} = ?PRIM_FILE:position(Fd, 0),
+ {ok, 0} = ?PRIM_FILE:position(Fd, {cur, 0}),
%% Read a few lines from a compressed file.
- ?line ShouldBe = "<TITLE>Real Programmers Don't Use PASCAL</TITLE>\n",
- ?line {ok, ShouldBe} = ?PRIM_FILE:read(Fd, length(ShouldBe)),
+ ShouldBe = "<TITLE>Real Programmers Don't Use PASCAL</TITLE>\n",
+ {ok, ShouldBe} = ?PRIM_FILE:read(Fd, length(ShouldBe)),
%% Now seek forward.
- ?line {ok, 381} = ?PRIM_FILE:position(Fd, 381),
- ?line Back = "Back in the good old days -- the \"Golden Era\" " ++
+ {ok, 381} = ?PRIM_FILE:position(Fd, 381),
+ Back = "Back in the good old days -- the \"Golden Era\" " ++
"of computers, it was\n",
- ?line {ok, Back} = ?PRIM_FILE:read(Fd, length(Back)),
+ {ok, Back} = ?PRIM_FILE:read(Fd, length(Back)),
%% Try to search forward relative to the current position.
- ?line {ok, CurPos} = ?PRIM_FILE:position(Fd, {cur, 0}),
- ?line RealPos = 4273,
- ?line {ok, RealPos} = ?PRIM_FILE:position(Fd, {cur, RealPos-CurPos}),
- ?line RealProg = "<LI> Real Programmers aren't afraid to use GOTOs.\n",
- ?line {ok, RealProg} = ?PRIM_FILE:read(Fd, length(RealProg)),
+ {ok, CurPos} = ?PRIM_FILE:position(Fd, {cur, 0}),
+ RealPos = 4273,
+ {ok, RealPos} = ?PRIM_FILE:position(Fd, {cur, RealPos-CurPos}),
+ RealProg = "<LI> Real Programmers aren't afraid to use GOTOs.\n",
+ {ok, RealProg} = ?PRIM_FILE:read(Fd, length(RealProg)),
%% Seek backward.
- ?line AfterTitle = length("<TITLE>"),
- ?line {ok, AfterTitle} = ?PRIM_FILE:position(Fd, AfterTitle),
- ?line Title = "Real Programmers Don't Use PASCAL</TITLE>\n",
- ?line {ok, Title} = ?PRIM_FILE:read(Fd, length(Title)),
+ AfterTitle = length("<TITLE>"),
+ {ok, AfterTitle} = ?PRIM_FILE:position(Fd, AfterTitle),
+ Title = "Real Programmers Don't Use PASCAL</TITLE>\n",
+ {ok, Title} = ?PRIM_FILE:read(Fd, length(Title)),
%% Done.
- ?line ?PRIM_FILE:close(Fd),
- ?line test_server:timetrap_cancel(Dog),
+ ?PRIM_FILE:close(Fd),
ok.
-write_compressed(suite) -> [];
-write_compressed(doc) -> [];
write_compressed(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Priv = ?config(priv_dir, Config),
- ?line MyFile = filename:join(Priv,
- atom_to_list(?MODULE)++"_test.gz"),
+ Priv = proplists:get_value(priv_dir, Config),
+ MyFile = filename:join(Priv,
+ atom_to_list(?MODULE)++"_test.gz"),
%% Write a file.
- ?line {ok, Fd} = ?PRIM_FILE:open(MyFile, [write, compressed]),
- ?line {ok, 0} = ?PRIM_FILE:position(Fd, 0),
- ?line Prefix = "hello\n",
- ?line End = "end\n",
- ?line ok = ?PRIM_FILE:write(Fd, Prefix),
- ?line {ok, 143} = ?PRIM_FILE:position(Fd, 143),
- ?line ok = ?PRIM_FILE:write(Fd, End),
- ?line ok = ?PRIM_FILE:close(Fd),
+ {ok, Fd} = ?PRIM_FILE:open(MyFile, [write, compressed]),
+ {ok, 0} = ?PRIM_FILE:position(Fd, 0),
+ Prefix = "hello\n",
+ End = "end\n",
+ ok = ?PRIM_FILE:write(Fd, Prefix),
+ {ok, 143} = ?PRIM_FILE:position(Fd, 143),
+ ok = ?PRIM_FILE:write(Fd, End),
+ ok = ?PRIM_FILE:close(Fd),
%% Read the file and verify the contents.
- ?line {ok, Fd1} = ?PRIM_FILE:open(MyFile, [read, compressed]),
- ?line {ok, Prefix} = ?PRIM_FILE:read(Fd1, length(Prefix)),
- ?line Second = lists:duplicate(143-length(Prefix), 0) ++ End,
- ?line {ok, Second} = ?PRIM_FILE:read(Fd1, length(Second)),
- ?line ok = ?PRIM_FILE:close(Fd1),
+ {ok, Fd1} = ?PRIM_FILE:open(MyFile, [read, compressed]),
+ {ok, Prefix} = ?PRIM_FILE:read(Fd1, length(Prefix)),
+ Second = lists:duplicate(143-length(Prefix), 0) ++ End,
+ {ok, Second} = ?PRIM_FILE:read(Fd1, length(Second)),
+ ok = ?PRIM_FILE:close(Fd1),
%% Ensure that the file is compressed.
@@ -1865,71 +1748,61 @@ write_compressed(Config) when is_list(Config) ->
{ok, #file_info{size=Size}} when Size < TotalSize ->
ok;
{ok, #file_info{size=Size}} when Size == TotalSize ->
- test_server:fail(file_not_compressed)
+ ct:fail(file_not_compressed)
end,
%% Write again to ensure that the file is truncated.
- ?line {ok, Fd2} = ?PRIM_FILE:open(MyFile, [write, compressed]),
- ?line NewString = "aaaaaaaaaaa",
- ?line ok = ?PRIM_FILE:write(Fd2, NewString),
- ?line ok = ?PRIM_FILE:close(Fd2),
- ?line {ok, Fd3} = ?PRIM_FILE:open(MyFile, [read, compressed]),
- ?line {ok, NewString} = ?PRIM_FILE:read(Fd3, 1024),
- ?line ok = ?PRIM_FILE:close(Fd3),
+ {ok, Fd2} = ?PRIM_FILE:open(MyFile, [write, compressed]),
+ NewString = "aaaaaaaaaaa",
+ ok = ?PRIM_FILE:write(Fd2, NewString),
+ ok = ?PRIM_FILE:close(Fd2),
+ {ok, Fd3} = ?PRIM_FILE:open(MyFile, [read, compressed]),
+ {ok, NewString} = ?PRIM_FILE:read(Fd3, 1024),
+ ok = ?PRIM_FILE:close(Fd3),
- %% Done.
-
- ?line test_server:timetrap_cancel(Dog),
ok.
-compress_errors(suite) -> [];
-compress_errors(doc) -> [];
compress_errors(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Data = ?config(data_dir, Config),
- ?line {error, enoent} = ?PRIM_FILE:open("non_existing__",
+ Data = proplists:get_value(data_dir, Config),
+ {error, enoent} = ?PRIM_FILE:open("non_existing__",
[compressed, read]),
- ?line {error, einval} = ?PRIM_FILE:open("non_existing__",
+ {error, einval} = ?PRIM_FILE:open("non_existing__",
[compressed, read, write]),
%% Read a corrupted .gz file.
- ?line Corrupted = filename:join(Data, "corrupted.gz"),
- ?line {ok, Fd} = ?PRIM_FILE:open(Corrupted, [read, compressed]),
- ?line {error, eio} = ?PRIM_FILE:read(Fd, 100),
- ?line ?PRIM_FILE:close(Fd),
+ Corrupted = filename:join(Data, "corrupted.gz"),
+ {ok, Fd} = ?PRIM_FILE:open(Corrupted, [read, compressed]),
+ {error, eio} = ?PRIM_FILE:read(Fd, 100),
+ ?PRIM_FILE:close(Fd),
- ?line test_server:timetrap_cancel(Dog),
ok.
-make_link_a(doc) -> "Test creating a hard link.";
-make_link_a(suite) -> [];
+%% Test creating a hard link.
make_link_a(Config) when is_list(Config) ->
make_link(Config, [], "_a").
-make_link_b(doc) -> "Test creating a hard link.";
-make_link_b(suite) -> [];
+%% Test creating a hard link.
make_link_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = make_link(Config, Handle, "_b"),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
make_link(Config, Handle, Suffix) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_make_link"++Suffix),
- ?line ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
-
- ?line Name = filename:join(NewDir, "a_file"),
- ?line ok = ?PRIM_FILE:write_file(Name, "some contents\n"),
-
- ?line Alias = filename:join(NewDir, "an_alias"),
- ?line Result =
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_make_link"++Suffix),
+ ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
+
+ Name = filename:join(NewDir, "a_file"),
+ ok = ?PRIM_FILE:write_file(Name, "some contents\n"),
+
+ Alias = filename:join(NewDir, "an_alias"),
+ Result =
case ?PRIM_FILE_call(make_link, Handle, [Name, Alias]) of
{error, enotsup} ->
{skipped, "Links not supported on this platform"};
@@ -1939,58 +1812,48 @@ make_link(Config, Handle, Suffix) ->
%% which should in behave exactly as
%% ?PRIM_FILE:read_file_info/1
%% since they are not used on symbolic links.
-
- ?line {ok, Info} =
+
+ {ok, Info} =
?PRIM_FILE_call(read_link_info, Handle, [Name]),
- ?line {ok, Info} =
+ {ok, Info} =
?PRIM_FILE_call(read_link_info, Handle, [Alias]),
- ?line #file_info{links = 2, type = regular} = Info,
- ?line {error, eexist} =
+ #file_info{links = 2, type = regular} = Info,
+ {error, eexist} =
?PRIM_FILE_call(make_link, Handle, [Name, Alias]),
ok
end,
-
- ?line test_server:timetrap_cancel(Dog),
+
Result.
-read_link_info_for_non_link(doc) ->
- "Test that reading link info for an ordinary file or directory works "
- "(on all platforms).";
-read_link_info_for_non_link(suite) -> [];
+%% Test that reading link info for an ordinary file or directory works
+%% (on all platforms).
read_link_info_for_non_link(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
-
- ?line {ok, #file_info{type=directory}} = ?PRIM_FILE:read_link_info("."),
-
- ?line test_server:timetrap_cancel(Dog),
+ {ok, #file_info{type=directory}} = ?PRIM_FILE:read_link_info("."),
ok.
-
-symlinks_a(doc) -> "Test operations on symbolic links (for Unix).";
-symlinks_a(suite) -> [];
+
+%% Test operations on symbolic links (for Unix).
symlinks_a(Config) when is_list(Config) ->
symlinks(Config, [], "_a").
-symlinks_b(doc) -> "Test operations on symbolic links (for Unix).";
-symlinks_b(suite) -> [];
+%% Test operations on symbolic links (for Unix).
symlinks_b(Config) when is_list(Config) ->
- ?line {ok, Handle} = ?PRIM_FILE:start(),
+ {ok, Handle} = ?PRIM_FILE:start(),
Result = symlinks(Config, Handle, "_b"),
- ?line ok = ?PRIM_FILE:stop(Handle),
+ ok = ?PRIM_FILE:stop(Handle),
Result.
symlinks(Config, Handle, Suffix) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)
- ++"_make_symlink"++Suffix),
- ?line ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
-
- ?line Name = filename:join(NewDir, "a_plain_file"),
- ?line ok = ?PRIM_FILE:write_file(Name, "some stupid content\n"),
-
- ?line Alias = filename:join(NewDir, "a_symlink_alias"),
- ?line Result =
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)
+ ++"_make_symlink"++Suffix),
+ ok = ?PRIM_FILE_call(make_dir, Handle, [NewDir]),
+
+ Name = filename:join(NewDir, "a_plain_file"),
+ ok = ?PRIM_FILE:write_file(Name, "some stupid content\n"),
+
+ Alias = filename:join(NewDir, "a_symlink_alias"),
+ Result =
case ?PRIM_FILE_call(make_symlink, Handle, [Name, Alias]) of
{error, enotsup} ->
{skipped, "Links not supported on this platform"};
@@ -1998,18 +1861,18 @@ symlinks(Config, Handle, Suffix) ->
{win32,_} = os:type(),
{skipped, "Windows user not privileged to create links"};
ok ->
- ?line {ok, Info1} =
+ {ok, Info1} =
?PRIM_FILE_call(read_file_info, Handle, [Name]),
- ?line {ok, Info1} =
+ {ok, Info1} =
?PRIM_FILE_call(read_file_info, Handle, [Alias]),
- ?line {ok, Info1} =
+ {ok, Info1} =
?PRIM_FILE_call(read_link_info, Handle, [Name]),
- ?line #file_info{links = 1, type = regular} = Info1,
-
- ?line {ok, Info2} =
+ #file_info{links = 1, type = regular} = Info1,
+
+ {ok, Info2} =
?PRIM_FILE_call(read_link_info, Handle, [Alias]),
- ?line #file_info{links=1, type=symlink} = Info2,
- ?line {ok, Name} =
+ #file_info{links=1, type=symlink} = Info2,
+ {ok, Name} =
?PRIM_FILE_call(read_link, Handle, [Alias]),
{ok, Name} =
?PRIM_FILE_call(read_link_all, Handle, [Alias]),
@@ -2017,45 +1880,39 @@ symlinks(Config, Handle, Suffix) ->
rm_rf(?PRIM_FILE,NewDir),
ok
end,
-
- ?line test_server:timetrap_cancel(Dog),
+
Result.
%% Creates as many files as possible during a certain time,
%% periodically calls list_dir/2 to check if it works,
%% then deletes all files.
-list_dir_limit(doc) ->
- "Tests if large directories can be read";
-list_dir_limit(suite) ->
- [];
+%% Tests if large directories can be read.
list_dir_limit(Config) when is_list(Config) ->
- ?line MaxTime = 120,
- ?line MaxNumber = 20000,
- ?line Dog = test_server:timetrap(
- test_server:seconds(2*MaxTime + MaxTime)),
- ?line RootDir = ?config(priv_dir, Config),
- ?line NewDir = filename:join(RootDir,
- atom_to_list(?MODULE)++"_list_dir_limit"),
- ?line {ok, Handle1} = ?PRIM_FILE:start(),
- ?line ok = ?PRIM_FILE_call(make_dir, Handle1, [NewDir]),
+ MaxTime = 120,
+ MaxNumber = 20000,
+ ct:timetrap({seconds,2*MaxTime + MaxTime}),
+ RootDir = proplists:get_value(priv_dir, Config),
+ NewDir = filename:join(RootDir,
+ atom_to_list(?MODULE)++"_list_dir_limit"),
+ {ok, Handle1} = ?PRIM_FILE:start(),
+ ok = ?PRIM_FILE_call(make_dir, Handle1, [NewDir]),
Ref = erlang:start_timer(MaxTime*1000, self(), []),
- ?line Result = list_dir_limit_loop(NewDir, Handle1, Ref, MaxNumber, 0),
- ?line Time = case erlang:cancel_timer(Ref) of
- false -> MaxTime;
- T -> MaxTime - (T div 1000)
- end,
- ?line Number = case Result of
- {ok, N} -> N;
- {error, _Reason, N} -> N;
- _ -> 0
- end,
- ?line {ok, Handle2} = ?PRIM_FILE:start(),
- ?line list_dir_limit_cleanup(NewDir, Handle2, Number, 0),
- ?line ok = ?PRIM_FILE:stop(Handle1),
- ?line ok = ?PRIM_FILE:stop(Handle2),
- ?line {ok, Number} = Result,
- ?line test_server:timetrap_cancel(Dog),
+ Result = list_dir_limit_loop(NewDir, Handle1, Ref, MaxNumber, 0),
+ Time = case erlang:cancel_timer(Ref) of
+ false -> MaxTime;
+ T -> MaxTime - (T div 1000)
+ end,
+ Number = case Result of
+ {ok, N} -> N;
+ {error, _Reason, N} -> N;
+ _ -> 0
+ end,
+ {ok, Handle2} = ?PRIM_FILE:start(),
+ list_dir_limit_cleanup(NewDir, Handle2, Number, 0),
+ ok = ?PRIM_FILE:stop(Handle1),
+ ok = ?PRIM_FILE:stop(Handle2),
+ {ok, Number} = Result,
{comment,
"Created " ++ integer_to_list(Number) ++ " files in "
++ integer_to_list(Time) ++ " seconds."}.
@@ -2124,7 +1981,7 @@ list_dir_limit_cleanup(Dir, Handle, N, Cnt) ->
%%%
list_dir_error(Config) ->
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
NonExisting = filename:join(Priv, "non-existing-dir"),
{error,enoent} = prim_file:list_dir(NonExisting),
ok.
@@ -2134,7 +1991,7 @@ list_dir_error(Config) ->
%%%
list_dir(Config) ->
- RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
TestDir = filename:join(RootDir, ?MODULE_STRING++"_list_dir"),
?PRIM_FILE:make_dir(TestDir),
list_dir_1(TestDir, 42, []).
@@ -2165,7 +2022,7 @@ run_large_file_test(Config, Run, Name) ->
{{unix,sunos},OsVersion} when OsVersion < {5,5,1} ->
{skip,"Only supported on Win32, Unix or SunOS >= 5.5.1"};
{{unix,_},_} ->
- N = unix_free(?config(priv_dir, Config)),
+ N = unix_free(proplists:get_value(priv_dir, Config)),
io:format("Free disk: ~w KByte~n", [N]),
if N < 5 bsl 20 ->
%% Less than 5 GByte free
@@ -2179,9 +2036,9 @@ run_large_file_test(Config, Run, Name) ->
do_run_large_file_test(Config, Run, Name0) ->
- Name = filename:join(?config(priv_dir, Config),
+ Name = filename:join(proplists:get_value(priv_dir, Config),
?MODULE_STRING ++ Name0),
-
+
%% Set up a process that will delete this file.
Tester = self(),
Deleter =
@@ -2194,7 +2051,7 @@ do_run_large_file_test(Config, Run, Name0) ->
end,
prim_file:delete(Name)
end),
-
+
%% Run the test case.
Res = Run(Name),
diff --git a/lib/kernel/test/ram_file_SUITE.erl b/lib/kernel/test/ram_file_SUITE.erl
index 933dc88d21..b0265393bd 100644
--- a/lib/kernel/test/ram_file_SUITE.erl
+++ b/lib/kernel/test/ram_file_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,10 @@
init_per_testcase/2, end_per_testcase/2]).
-export([open_modes/1, open_old_modes/1, pread_pwrite/1, position/1,
truncate/1, sync/1, get_set_file/1, compress/1, uuencode/1,
- large_file_errors/1, large_file_light/1, large_file_heavy/1]).
+ large_file_errors/1, large_file_light/1,
+ large_file_heavy/0, large_file_heavy/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-define(FILE_MODULE, file). % Name of module to test
@@ -36,7 +37,9 @@
%%--------------------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[open_modes, open_old_modes, pread_pwrite, position,
@@ -59,37 +62,23 @@ end_per_group(_GroupName, Config) ->
Config.
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Time =
- case Func of
- large_file_heavy ->
- ?t:minutes(5);
- _ ->
- ?t:seconds(10)
- end,
- Dog = ?t:timetrap(Time),
- %% error_logger:info_msg("~p:~p *****~n", [?MODULE, Func]),
- [{watchdog, Dog} | Config].
+init_per_testcase(Func, Config) ->
+ Config.
end_per_testcase(_Func, Config) ->
- %% error_logger:info_msg("~p:~p END *****~n", [?MODULE, Func]),
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
+ Config.
%%--------------------------------------------------------------------------
%% Test suites
-open_modes(suite) ->
- [];
-open_modes(doc) ->
- ["Test that the basic read, write and binary options works for open/2."];
+%% Test that the basic read, write and binary options works for open/2.
open_modes(Config) when is_list(Config) ->
- ?line Str1 = "The quick brown fox ",
- ?line Str2 = "jumps over a lazy dog ",
- ?line Str = Str1 ++ Str2,
- ?line Bin1 = list_to_binary(Str1),
- ?line Bin2 = list_to_binary(Str2),
- ?line Bin = list_to_binary(Str),
+ Str1 = "The quick brown fox ",
+ Str2 = "jumps over a lazy dog ",
+ Str = Str1 ++ Str2,
+ Bin1 = list_to_binary(Str1),
+ Bin2 = list_to_binary(Str2),
+ Bin = list_to_binary(Str),
%%
open_read_write(?FILE_MODULE, Str1, [ram, read, write], Str2),
open_read(?FILE_MODULE, Str, [ram]),
@@ -98,18 +87,15 @@ open_modes(Config) when is_list(Config) ->
%%
ok.
-open_old_modes(suite) ->
- [];
-open_old_modes(doc) ->
- ["Test that the old style read, write and binary options ",
- "works for open/2."];
+%% Test that the old style read, write and binary options
+%% works for open/2.
open_old_modes(Config) when is_list(Config) ->
- ?line Str1 = "The quick brown fox ",
- ?line Str2 = "jumps over a lazy dog ",
- ?line Str = Str1 ++ Str2,
- ?line Bin1 = list_to_binary(Str1),
- ?line Bin2 = list_to_binary(Str2),
- ?line Bin = list_to_binary(Str),
+ Str1 = "The quick brown fox ",
+ Str2 = "jumps over a lazy dog ",
+ Str = Str1 ++ Str2,
+ Bin1 = list_to_binary(Str1),
+ Bin2 = list_to_binary(Str2),
+ Bin = list_to_binary(Str),
%%
open_read_write(?RAM_FILE_MODULE, Str1, read_write, Str2),
open_read(?RAM_FILE_MODULE, Str, read),
@@ -119,57 +105,54 @@ open_old_modes(Config) when is_list(Config) ->
ok.
open_read_write(Module, Data1, Options, Data2) ->
- ?line io:format("~p:open_read_write(~p, ~p, ~p, ~p)~n",
- [?MODULE, Module, Data1, Options, Data2]),
- %%
- ?line Size1 = sizeof(Data1),
- ?line Size2 = sizeof(Data2),
- ?line Data = append(Data1, Data2),
- ?line Size = Size1 + Size2,
- %%
- ?line {ok, Fd} = Module:open(Data1, Options),
- ?line {ok, Data1} = Module:read(Fd, Size1),
- ?line eof = Module:read(Fd, 1),
- ?line {ok, Zero} = Module:read(Fd, 0),
- ?line 0 = sizeof(Zero),
- ?line ok = Module:write(Fd, Data2),
- ?line {ok, 0} = Module:position(Fd, bof),
- ?line {ok, Data} = Module:read(Fd, Size),
- ?line eof = Module:read(Fd, 1),
- ?line {ok, Zero} = Module:read(Fd, 0),
- ?line ok = Module:close(Fd),
- %%
- ?line ok.
+ io:format("~p:open_read_write(~p, ~p, ~p, ~p)~n",
+ [?MODULE, Module, Data1, Options, Data2]),
+ %%
+ Size1 = sizeof(Data1),
+ Size2 = sizeof(Data2),
+ Data = append(Data1, Data2),
+ Size = Size1 + Size2,
+ %%
+ {ok, Fd} = Module:open(Data1, Options),
+ {ok, Data1} = Module:read(Fd, Size1),
+ eof = Module:read(Fd, 1),
+ {ok, Zero} = Module:read(Fd, 0),
+ 0 = sizeof(Zero),
+ ok = Module:write(Fd, Data2),
+ {ok, 0} = Module:position(Fd, bof),
+ {ok, Data} = Module:read(Fd, Size),
+ eof = Module:read(Fd, 1),
+ {ok, Zero} = Module:read(Fd, 0),
+ ok = Module:close(Fd),
+ %%
+ ok.
open_read(Module, Data, Options) ->
- ?line io:format("~p:open_read(~p, ~p, ~p)~n",
- [?MODULE, Module, Data, Options]),
- %%
- ?line Size = sizeof(Data),
- %%
- ?line {ok, Fd} = Module:open(Data, Options),
- ?line {ok, Data} = Module:read(Fd, Size),
- ?line eof = Module:read(Fd, 1),
- ?line {ok, Zero} = Module:read(Fd, 0),
- ?line 0 = sizeof(Zero),
- ?line {error, ebadf} = Module:write(Fd, Data),
- ?line {ok, 0} = Module:position(Fd, bof),
- ?line {ok, Data} = Module:read(Fd, Size),
- ?line eof = Module:read(Fd, 1),
- ?line {ok, Zero} = Module:read(Fd, 0),
- ?line ok = Module:close(Fd),
+ io:format("~p:open_read(~p, ~p, ~p)~n",
+ [?MODULE, Module, Data, Options]),
+ %%
+ Size = sizeof(Data),
+ %%
+ {ok, Fd} = Module:open(Data, Options),
+ {ok, Data} = Module:read(Fd, Size),
+ eof = Module:read(Fd, 1),
+ {ok, Zero} = Module:read(Fd, 0),
+ 0 = sizeof(Zero),
+ {error, ebadf} = Module:write(Fd, Data),
+ {ok, 0} = Module:position(Fd, bof),
+ {ok, Data} = Module:read(Fd, Size),
+ eof = Module:read(Fd, 1),
+ {ok, Zero} = Module:read(Fd, 0),
+ ok = Module:close(Fd),
%%
- ?line ok.
+ ok.
-pread_pwrite(suite) ->
- [];
-pread_pwrite(doc) ->
- ["Test that pread/2,3 and pwrite/2,3 works."];
+%% Test that pread/2,3 and pwrite/2,3 works.
pread_pwrite(Config) when is_list(Config) ->
- ?line Str = "Flygande bäckaziner söka hwila på mjuqa tuvor x",
- ?line Bin = list_to_binary(Str),
+ Str = "Flygande bäckaziner söka hwila på mjuqa tuvor x",
+ Bin = list_to_binary(Str),
%%
pread_pwrite_test(?FILE_MODULE, Str, [ram, read, write]),
pread_pwrite_test(?FILE_MODULE, Bin, [ram, binary, read, write]),
@@ -179,36 +162,33 @@ pread_pwrite(Config) when is_list(Config) ->
ok.
pread_pwrite_test(Module, Data, Options) ->
- ?line io:format("~p:pread_pwrite_test(~p, ~p, ~p)~n",
- [?MODULE, Module, Data, Options]),
- %%
- ?line Size = sizeof(Data),
- %%
- ?line {ok, Fd} = Module:open([], Options),
- ?line ok = Module:pwrite(Fd, 0, Data),
- ?line {ok, Data} = Module:pread(Fd, 0, Size+1),
- ?line eof = Module:pread(Fd, Size+1, 1),
- ?line {ok, Zero} = Module:pread(Fd, Size+1, 0),
- ?line 0 = sizeof(Zero),
- ?line ok = Module:pwrite(Fd, [{0, Data}, {Size+17, Data}]),
- ?line {ok, [Data,
- eof,
- Data,
- Zero]} = Module:pread(Fd, [{Size+17, Size+1},
- {2*Size+17+1, 1},
- {0, Size},
- {2*Size+17+1, 0}]),
- ?line ok = Module:close(Fd),
- %%
- ?line ok.
-
-position(suite) ->
- [];
-position(doc) ->
- ["Test that position/2 works."];
+ io:format("~p:pread_pwrite_test(~p, ~p, ~p)~n",
+ [?MODULE, Module, Data, Options]),
+ %%
+ Size = sizeof(Data),
+ %%
+ {ok, Fd} = Module:open([], Options),
+ ok = Module:pwrite(Fd, 0, Data),
+ {ok, Data} = Module:pread(Fd, 0, Size+1),
+ eof = Module:pread(Fd, Size+1, 1),
+ {ok, Zero} = Module:pread(Fd, Size+1, 0),
+ 0 = sizeof(Zero),
+ ok = Module:pwrite(Fd, [{0, Data}, {Size+17, Data}]),
+ {ok, [Data,
+ eof,
+ Data,
+ Zero]} = Module:pread(Fd, [{Size+17, Size+1},
+ {2*Size+17+1, 1},
+ {0, Size},
+ {2*Size+17+1, 0}]),
+ ok = Module:close(Fd),
+ %%
+ ok.
+
+%% Test that position/2 works.
position(Config) when is_list(Config) ->
- ?line Str = "Att vara eller icke vara, det är frågan. ",
- ?line Bin = list_to_binary(Str),
+ Str = "Att vara eller icke vara, det är frågan. ",
+ Bin = list_to_binary(Str),
%%
position_test(?FILE_MODULE, Str, [ram, read]),
position_test(?FILE_MODULE, Bin, [ram, binary]),
@@ -218,79 +198,76 @@ position(Config) when is_list(Config) ->
ok.
position_test(Module, Data, Options) ->
- ?line io:format("~p:position_test(~p, ~p, ~p)~n",
- [?MODULE, Module, Data, Options]),
- %%
- ?line Size = sizeof(Data),
- ?line Size_7 = Size+7,
- %%
- ?line Slice_0_2 = slice(Data, 0, 2),
- ?line Slice_0_3 = slice(Data, 0, 3),
- ?line Slice_2_5 = slice(Data, 2, 5),
- ?line Slice_3_4 = slice(Data, 3, 4),
- ?line Slice_5 = slice(Data, 5, Size),
- %%
- ?line {ok, Fd} = Module:open(Data, Options),
- %%
- ?line io:format("CUR positions"),
- ?line {ok, Slice_0_2} = Module:read(Fd, 2),
- ?line {ok, 2} = Module:position(Fd, cur),
- ?line {ok, Slice_2_5} = Module:read(Fd, 5),
- ?line {ok, 3} = Module:position(Fd, {cur, -4}),
- ?line {ok, Slice_3_4} = Module:read(Fd, 4),
- ?line {ok, 0} = Module:position(Fd, {cur, -7}),
- ?line {ok, Slice_0_3} = Module:read(Fd, 3),
- ?line {ok, 0} = Module:position(Fd, {cur, -3}),
- ?line {error, einval} = Module:position(Fd, {cur, -1}),
- ?line {ok, 0} = Module:position(Fd, 0),
- ?line {ok, 2} = Module:position(Fd, {cur, 2}),
- ?line {ok, Slice_2_5} = Module:read(Fd, 5),
- ?line {ok, Size_7} = Module:position(Fd, {cur, Size}),
- ?line {ok, Zero} = Module:read(Fd, 0),
- ?line 0 = sizeof(Zero),
- ?line eof = Module:read(Fd, 1),
- %%
- ?line io:format("Absolute and BOF positions"),
- ?line {ok, Size} = Module:position(Fd, Size),
- ?line eof = Module:read(Fd, 1),
- ?line {ok, 5} = Module:position(Fd, 5),
- ?line {ok, Slice_5} = Module:read(Fd, Size),
- ?line {ok, 2} = Module:position(Fd, {bof, 2}),
- ?line {ok, Slice_2_5} = Module:read(Fd, 5),
- ?line {ok, 3} = Module:position(Fd, 3),
- ?line {ok, Slice_3_4} = Module:read(Fd, 4),
- ?line {ok, 0} = Module:position(Fd, bof),
- ?line {ok, Slice_0_2} = Module:read(Fd, 2),
- ?line {ok, Size_7} = Module:position(Fd, {bof, Size_7}),
- ?line {ok, Zero} = Module:read(Fd, 0),
- %%
- ?line io:format("EOF positions"),
- ?line {ok, Size} = Module:position(Fd, eof),
- ?line eof = Module:read(Fd, 1),
- ?line {ok, 5} = Module:position(Fd, {eof, -Size+5}),
- ?line {ok, Slice_5} = Module:read(Fd, Size),
- ?line {ok, 2} = Module:position(Fd, {eof, -Size+2}),
- ?line {ok, Slice_2_5} = Module:read(Fd, 5),
- ?line {ok, 3} = Module:position(Fd, {eof, -Size+3}),
- ?line {ok, Slice_3_4} = Module:read(Fd, 4),
- ?line {ok, 0} = Module:position(Fd, {eof, -Size}),
- ?line {ok, Slice_0_2} = Module:read(Fd, 2),
- ?line {ok, Size_7} = Module:position(Fd, {eof, 7}),
- ?line {ok, Zero} = Module:read(Fd, 0),
- ?line eof = Module:read(Fd, 1),
- %%
- ?line ok.
-
-
-
-truncate(suite) ->
- [];
-truncate(doc) ->
- ["Test that truncate/1 works."];
+ io:format("~p:position_test(~p, ~p, ~p)~n",
+ [?MODULE, Module, Data, Options]),
+ %%
+ Size = sizeof(Data),
+ Size_7 = Size+7,
+ %%
+ Slice_0_2 = slice(Data, 0, 2),
+ Slice_0_3 = slice(Data, 0, 3),
+ Slice_2_5 = slice(Data, 2, 5),
+ Slice_3_4 = slice(Data, 3, 4),
+ Slice_5 = slice(Data, 5, Size),
+ %%
+ {ok, Fd} = Module:open(Data, Options),
+ %%
+ io:format("CUR positions"),
+ {ok, Slice_0_2} = Module:read(Fd, 2),
+ {ok, 2} = Module:position(Fd, cur),
+ {ok, Slice_2_5} = Module:read(Fd, 5),
+ {ok, 3} = Module:position(Fd, {cur, -4}),
+ {ok, Slice_3_4} = Module:read(Fd, 4),
+ {ok, 0} = Module:position(Fd, {cur, -7}),
+ {ok, Slice_0_3} = Module:read(Fd, 3),
+ {ok, 0} = Module:position(Fd, {cur, -3}),
+ {error, einval} = Module:position(Fd, {cur, -1}),
+ {ok, 0} = Module:position(Fd, 0),
+ {ok, 2} = Module:position(Fd, {cur, 2}),
+ {ok, Slice_2_5} = Module:read(Fd, 5),
+ {ok, Size_7} = Module:position(Fd, {cur, Size}),
+ {ok, Zero} = Module:read(Fd, 0),
+ 0 = sizeof(Zero),
+ eof = Module:read(Fd, 1),
+ %%
+ io:format("Absolute and BOF positions"),
+ {ok, Size} = Module:position(Fd, Size),
+ eof = Module:read(Fd, 1),
+ {ok, 5} = Module:position(Fd, 5),
+ {ok, Slice_5} = Module:read(Fd, Size),
+ {ok, 2} = Module:position(Fd, {bof, 2}),
+ {ok, Slice_2_5} = Module:read(Fd, 5),
+ {ok, 3} = Module:position(Fd, 3),
+ {ok, Slice_3_4} = Module:read(Fd, 4),
+ {ok, 0} = Module:position(Fd, bof),
+ {ok, Slice_0_2} = Module:read(Fd, 2),
+ {ok, Size_7} = Module:position(Fd, {bof, Size_7}),
+ {ok, Zero} = Module:read(Fd, 0),
+ %%
+ io:format("EOF positions"),
+ {ok, Size} = Module:position(Fd, eof),
+ eof = Module:read(Fd, 1),
+ {ok, 5} = Module:position(Fd, {eof, -Size+5}),
+ {ok, Slice_5} = Module:read(Fd, Size),
+ {ok, 2} = Module:position(Fd, {eof, -Size+2}),
+ {ok, Slice_2_5} = Module:read(Fd, 5),
+ {ok, 3} = Module:position(Fd, {eof, -Size+3}),
+ {ok, Slice_3_4} = Module:read(Fd, 4),
+ {ok, 0} = Module:position(Fd, {eof, -Size}),
+ {ok, Slice_0_2} = Module:read(Fd, 2),
+ {ok, Size_7} = Module:position(Fd, {eof, 7}),
+ {ok, Zero} = Module:read(Fd, 0),
+ eof = Module:read(Fd, 1),
+ %%
+ ok.
+
+
+
+%% Test that truncate/1 works.
truncate(Config) when is_list(Config) ->
- ?line Str = "Mån ädlare att lida och fördraga "
+ Str = "Mån ädlare att lida och fördraga "
++ "ett bittert ödes stygn av pilar, ",
- ?line Bin = list_to_binary(Str),
+ Bin = list_to_binary(Str),
%%
ok = truncate_test(?FILE_MODULE, Str, [ram, read, write]),
ok = truncate_test(?FILE_MODULE, Bin, [ram, binary, read, write]),
@@ -305,35 +282,32 @@ truncate(Config) when is_list(Config) ->
ok.
truncate_test(Module, Data, Options) ->
- ?line io:format("~p:truncate_test(~p, ~p, ~p)~n",
- [?MODULE, Module, Data, Options]),
- %%
- ?line Size = sizeof(Data),
- ?line Size1 = Size-2,
- ?line Data1 = slice(Data, 0, Size1),
- %%
- ?line {ok, Fd} = Module:open(Data, Options),
- ?line {ok, Size1} = Module:position(Fd, Size1),
- ?line case Module:truncate(Fd) of
- ok ->
- ?line {ok, 0} = Module:position(Fd, 0),
- ?line {ok, Data1} = Module:read(Fd, Size),
- ?line ok = Module:close(Fd),
- ?line ok;
- Error ->
- ?line ok = Module:close(Fd),
- ?line Error
- end.
-
-
-
-sync(suite) ->
- [];
-sync(doc) ->
- ["Test that sync/1 at least does not crash."];
+ io:format("~p:truncate_test(~p, ~p, ~p)~n",
+ [?MODULE, Module, Data, Options]),
+ %%
+ Size = sizeof(Data),
+ Size1 = Size-2,
+ Data1 = slice(Data, 0, Size1),
+ %%
+ {ok, Fd} = Module:open(Data, Options),
+ {ok, Size1} = Module:position(Fd, Size1),
+ case Module:truncate(Fd) of
+ ok ->
+ {ok, 0} = Module:position(Fd, 0),
+ {ok, Data1} = Module:read(Fd, Size),
+ ok = Module:close(Fd),
+ ok;
+ Error ->
+ ok = Module:close(Fd),
+ Error
+ end.
+
+
+
+%% Test that sync/1 at least does not crash.
sync(Config) when is_list(Config) ->
- ?line Str = "än att ta till vapen mot ett hav av kval. ",
- ?line Bin = list_to_binary(Str),
+ Str = "än att ta till vapen mot ett hav av kval. ",
+ Bin = list_to_binary(Str),
%%
sync_test(?FILE_MODULE, Str, [ram, read, write]),
sync_test(?FILE_MODULE, Bin, [ram, binary, read, write]),
@@ -348,28 +322,25 @@ sync(Config) when is_list(Config) ->
ok.
sync_test(Module, Data, Options) ->
- ?line io:format("~p:sync_test(~p, ~p, ~p)~n",
- [?MODULE, Module, Data, Options]),
+ io:format("~p:sync_test(~p, ~p, ~p)~n",
+ [?MODULE, Module, Data, Options]),
%%
- ?line Size = sizeof(Data),
+ Size = sizeof(Data),
%%
- ?line {ok, Fd} = Module:open(Data, Options),
- ?line ok = Module:sync(Fd),
- ?line {ok, Data} = Module:read(Fd, Size+1),
- ?line ok.
+ {ok, Fd} = Module:open(Data, Options),
+ ok = Module:sync(Fd),
+ {ok, Data} = Module:read(Fd, Size+1),
+ ok.
-get_set_file(suite) ->
- [];
-get_set_file(doc) ->
- ["Tests get_file/1, set_file/2, get_file_close/1 and get_size/1."];
+%% Tests get_file/1, set_file/2, get_file_close/1 and get_size/1.
get_set_file(Config) when is_list(Config) ->
%% These two strings should not be of equal length.
- ?line Str = "När högan nord blir snöbetäckt, ",
- ?line Str2 = "får alla harar byta dräkt. ",
- ?line Bin = list_to_binary(Str),
- ?line Bin2 = list_to_binary(Str2),
+ Str = "När högan nord blir snöbetäckt, ",
+ Str2 = "får alla harar byta dräkt. ",
+ Bin = list_to_binary(Str),
+ Bin2 = list_to_binary(Str2),
%%
ok = get_set_file_test(Str, read_write, Str2),
ok = get_set_file_test(Bin, [binary, read, write], Bin2),
@@ -379,87 +350,84 @@ get_set_file(Config) when is_list(Config) ->
ok.
get_set_file_test(Data, Options, Data2) ->
- ?line io:format("~p:get_set_file_test(~p, ~p, ~p)~n",
- [?MODULE, Data, Options, Data2]),
- %%
- ?line Size = sizeof(Data),
- ?line Size2 = sizeof(Data2),
- %%
- ?line {ok, Fd} = ?RAM_FILE_MODULE:open(Data, Options),
- ?line {ok, Size} = ?RAM_FILE_MODULE:get_size(Fd),
- ?line {ok, Data} = ?RAM_FILE_MODULE:get_file(Fd),
- ?line {ok, Data} = ?RAM_FILE_MODULE:get_file_close(Fd),
- ?line {error, einval} = ?RAM_FILE_MODULE:get_size(Fd),
- ?line {ok, Fd2} = ?RAM_FILE_MODULE:open(Data, Options),
- ?line case ?RAM_FILE_MODULE:set_file(Fd2, Data2) of
- {ok, Size2} ->
- ?line {ok, Size2} = ?RAM_FILE_MODULE:get_size(Fd2),
- ?line {ok, Data2} = ?RAM_FILE_MODULE:get_file(Fd2),
- ?line {ok, Data2} = ?RAM_FILE_MODULE:get_file_close(Fd2),
- ?line ok;
- {error, _} = Error ->
- ?line {ok, Data} = ?RAM_FILE_MODULE:get_file_close(Fd2),
- ?line Error
- end.
-
-
-
-compress(suite) ->
- [];
-compress(doc) ->
- ["Test that compress/1 and uncompress/1 works."];
+ io:format("~p:get_set_file_test(~p, ~p, ~p)~n",
+ [?MODULE, Data, Options, Data2]),
+ %%
+ Size = sizeof(Data),
+ Size2 = sizeof(Data2),
+ %%
+ {ok, Fd} = ?RAM_FILE_MODULE:open(Data, Options),
+ {ok, Size} = ?RAM_FILE_MODULE:get_size(Fd),
+ {ok, Data} = ?RAM_FILE_MODULE:get_file(Fd),
+ {ok, Data} = ?RAM_FILE_MODULE:get_file_close(Fd),
+ {error, einval} = ?RAM_FILE_MODULE:get_size(Fd),
+ {ok, Fd2} = ?RAM_FILE_MODULE:open(Data, Options),
+ case ?RAM_FILE_MODULE:set_file(Fd2, Data2) of
+ {ok, Size2} ->
+ {ok, Size2} = ?RAM_FILE_MODULE:get_size(Fd2),
+ {ok, Data2} = ?RAM_FILE_MODULE:get_file(Fd2),
+ {ok, Data2} = ?RAM_FILE_MODULE:get_file_close(Fd2),
+ ok;
+ {error, _} = Error ->
+ {ok, Data} = ?RAM_FILE_MODULE:get_file_close(Fd2),
+ Error
+ end.
+
+
+
+%% Test that compress/1 and uncompress/1 works.
compress(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line Real = filename:join(Data, "realmen.html"),
- ?line RealGz = filename:join(Data, "realmen.html.gz"),
+ Data = proplists:get_value(data_dir, Config),
+ Real = filename:join(Data, "realmen.html"),
+ RealGz = filename:join(Data, "realmen.html.gz"),
%%
%% Uncompress test
%%
- ?line {ok, FdReal} = ?FILE_MODULE:open(Real, []),
- ?line {ok, Fd} = ?FILE_MODULE:open([], [ram, read, write]),
- ?line {ok, FdRealGz} = ?FILE_MODULE:open(RealGz, []),
+ {ok, FdReal} = ?FILE_MODULE:open(Real, []),
+ {ok, Fd} = ?FILE_MODULE:open([], [ram, read, write]),
+ {ok, FdRealGz} = ?FILE_MODULE:open(RealGz, []),
%%
- ?line {ok, SzGz} = ?FILE_MODULE:copy(FdRealGz, Fd),
- ?line {ok, Sz} = ?RAM_FILE_MODULE:uncompress(Fd),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, bof),
- ?line true = compare(FdReal, Fd),
+ {ok, SzGz} = ?FILE_MODULE:copy(FdRealGz, Fd),
+ {ok, Sz} = ?RAM_FILE_MODULE:uncompress(Fd),
+ {ok, 0} = ?FILE_MODULE:position(Fd, bof),
+ true = compare(FdReal, Fd),
%%
- ?line true = (SzGz =< Sz),
+ true = (SzGz =< Sz),
%%
%% Compress and uncompress test
%%
- ?line {ok, 0} = ?FILE_MODULE:position(FdReal, bof),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, bof),
- ?line ok = ?FILE_MODULE:truncate(Fd),
- ?line {ok, Sz} = ?FILE_MODULE:copy(FdReal, Fd),
- ?line {ok, SzGz} = ?RAM_FILE_MODULE:compress(Fd),
- ?line {ok, Sz} = ?RAM_FILE_MODULE:uncompress(Fd),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, bof),
- ?line {ok, 0} = ?FILE_MODULE:position(FdReal, bof),
- ?line true = compare(FdReal, Fd),
+ {ok, 0} = ?FILE_MODULE:position(FdReal, bof),
+ {ok, 0} = ?FILE_MODULE:position(Fd, bof),
+ ok = ?FILE_MODULE:truncate(Fd),
+ {ok, Sz} = ?FILE_MODULE:copy(FdReal, Fd),
+ {ok, SzGz} = ?RAM_FILE_MODULE:compress(Fd),
+ {ok, Sz} = ?RAM_FILE_MODULE:uncompress(Fd),
+ {ok, 0} = ?FILE_MODULE:position(Fd, bof),
+ {ok, 0} = ?FILE_MODULE:position(FdReal, bof),
+ true = compare(FdReal, Fd),
%%
- ?line ok = ?FILE_MODULE:close(FdReal),
- ?line ok = ?FILE_MODULE:close(Fd),
- ?line ok = ?FILE_MODULE:close(FdRealGz),
+ ok = ?FILE_MODULE:close(FdReal),
+ ok = ?FILE_MODULE:close(Fd),
+ ok = ?FILE_MODULE:close(FdRealGz),
%% Test uncompressing data that will be expanded many times.
- ?line Huge = iolist_to_binary(mk_42(18)),
- ?line HugeSize = byte_size(Huge),
- ?line HugeGz = zlib:gzip(Huge),
+ Huge = iolist_to_binary(mk_42(18)),
+ HugeSize = byte_size(Huge),
+ HugeGz = zlib:gzip(Huge),
- ?line {ok,HugeFd} = ?FILE_MODULE:open([], [ram,read,write,binary]),
- ?line ok = ?FILE_MODULE:write(HugeFd, HugeGz),
- ?line {ok,HugeSize} = ?RAM_FILE_MODULE:uncompress(HugeFd),
- ?line {ok,0} = ?FILE_MODULE:position(HugeFd, bof),
- ?line {ok,Huge} = ?FILE_MODULE:read(HugeFd, HugeSize),
+ {ok,HugeFd} = ?FILE_MODULE:open([], [ram,read,write,binary]),
+ ok = ?FILE_MODULE:write(HugeFd, HugeGz),
+ {ok,HugeSize} = ?RAM_FILE_MODULE:uncompress(HugeFd),
+ {ok,0} = ?FILE_MODULE:position(HugeFd, bof),
+ {ok,Huge} = ?FILE_MODULE:read(HugeFd, HugeSize),
%% Uncompressing again should do nothing.
- ?line {ok,HugeSize} = ?RAM_FILE_MODULE:uncompress(HugeFd),
- ?line {ok,0} = ?FILE_MODULE:position(HugeFd, bof),
- ?line {ok,Huge} = ?FILE_MODULE:read(HugeFd, HugeSize),
+ {ok,HugeSize} = ?RAM_FILE_MODULE:uncompress(HugeFd),
+ {ok,0} = ?FILE_MODULE:position(HugeFd, bof),
+ {ok,Huge} = ?FILE_MODULE:read(HugeFd, HugeSize),
- ?line ok = ?FILE_MODULE:close(HugeFd),
+ ok = ?FILE_MODULE:close(HugeFd),
ok.
@@ -469,118 +437,108 @@ mk_42(N) ->
B = mk_42(N-1),
[B|B].
-uuencode(suite) ->
- [];
-uuencode(doc) ->
- ["Test that uuencode/1 and uudecode/1 works."];
+%% Test that uuencode/1 and uudecode/1 works.
uuencode(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line Real = filename:join(Data, "realmen.html"),
- ?line RealUu = filename:join(Data, "realmen.html.uu"),
+ Data = proplists:get_value(data_dir, Config),
+ Real = filename:join(Data, "realmen.html"),
+ RealUu = filename:join(Data, "realmen.html.uu"),
%%
%% Uudecode test
%%
- ?line {ok, FdReal} = ?FILE_MODULE:open(Real, []),
- ?line {ok, Fd} = ?FILE_MODULE:open([], [ram, read, write]),
- ?line {ok, FdRealUu} = ?FILE_MODULE:open(RealUu, []),
+ {ok, FdReal} = ?FILE_MODULE:open(Real, []),
+ {ok, Fd} = ?FILE_MODULE:open([], [ram, read, write]),
+ {ok, FdRealUu} = ?FILE_MODULE:open(RealUu, []),
%%
- ?line {ok, SzUu} = ?FILE_MODULE:copy(FdRealUu, Fd),
- ?line {ok, Sz} = ?RAM_FILE_MODULE:uudecode(Fd),
- ?line true = (Sz =< SzUu),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, bof),
- ?line true = compare(FdReal, Fd),
+ {ok, SzUu} = ?FILE_MODULE:copy(FdRealUu, Fd),
+ {ok, Sz} = ?RAM_FILE_MODULE:uudecode(Fd),
+ true = (Sz =< SzUu),
+ {ok, 0} = ?FILE_MODULE:position(Fd, bof),
+ true = compare(FdReal, Fd),
%%
%% Uuencode and decode test
%%
F = fun(Offs) ->
Size = Sz - Offs,
- ?line {ok, Offs} = ?FILE_MODULE:position(FdReal, {bof,Offs}),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, bof),
- ?line ok = ?FILE_MODULE:truncate(Fd),
- ?line {ok, Size} = ?FILE_MODULE:copy(FdReal, Fd),
- ?line {ok, SizeUu} = ?RAM_FILE_MODULE:uuencode(Fd),
- ?line true = (Size =< SizeUu),
- ?line {ok, Size} = ?RAM_FILE_MODULE:uudecode(Fd),
- ?line {ok, Offs} = ?FILE_MODULE:position(FdReal, {bof,Offs}),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, bof),
- ?line true = compare(FdReal, Fd)
+ {ok, Offs} = ?FILE_MODULE:position(FdReal, {bof,Offs}),
+ {ok, 0} = ?FILE_MODULE:position(Fd, bof),
+ ok = ?FILE_MODULE:truncate(Fd),
+ {ok, Size} = ?FILE_MODULE:copy(FdReal, Fd),
+ {ok, SizeUu} = ?RAM_FILE_MODULE:uuencode(Fd),
+ true = (Size =< SizeUu),
+ {ok, Size} = ?RAM_FILE_MODULE:uudecode(Fd),
+ {ok, Offs} = ?FILE_MODULE:position(FdReal, {bof,Offs}),
+ {ok, 0} = ?FILE_MODULE:position(Fd, bof),
+ true = compare(FdReal, Fd)
end,
lists:foreach(F, lists:seq(0,Sz-1, 43)),
- ?line ok = ?FILE_MODULE:close(FdReal),
- ?line ok = ?FILE_MODULE:close(Fd),
- ?line ok = ?FILE_MODULE:close(FdRealUu),
+ ok = ?FILE_MODULE:close(FdReal),
+ ok = ?FILE_MODULE:close(Fd),
+ ok = ?FILE_MODULE:close(FdRealUu),
%%
ok.
-
-large_file_errors(suite) ->
- [];
-large_file_errors(doc) ->
- ["Test error checking of large file offsets."];
+%% Test error checking of large file offsets.
large_file_errors(Config) when is_list(Config) ->
- ?line TwoGig = 1 bsl 31,
- ?line {ok,Fd} = ?RAM_FILE_MODULE:open("1234567890", [read,write]),
- ?line {error, einval} = ?FILE_MODULE:read(Fd, TwoGig),
- ?line {error, badarg} = ?FILE_MODULE:read(Fd, -1),
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {bof,TwoGig}),
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {bof,-TwoGig-1}),
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {bof,-1}),
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {cur,TwoGig}),
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {cur,-TwoGig-1}),
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {eof,TwoGig}),
- ?line {error, einval} = ?FILE_MODULE:position(Fd, {eof,-TwoGig-1}),
- ?line {error, einval} = ?FILE_MODULE:pread(Fd, TwoGig, 1),
- ?line {error, einval} = ?FILE_MODULE:pread(Fd, -TwoGig-1, 1),
- ?line {error, einval} = ?FILE_MODULE:pread(Fd, -1, 1),
- ?line {error, einval} = ?FILE_MODULE:pwrite(Fd, TwoGig, "@"),
- ?line {error, einval} = ?FILE_MODULE:pwrite(Fd, -TwoGig-1, "@"),
- ?line {error, einval} = ?FILE_MODULE:pwrite(Fd, -1, "@"),
- ?line {error, einval} = ?FILE_MODULE:pread(Fd, TwoGig, 0),
- ?line {error, einval} = ?FILE_MODULE:pread(Fd, -TwoGig-1, 0),
- ?line {error, einval} = ?FILE_MODULE:pread(Fd, -1, 0),
- ?line ok = ?FILE_MODULE:close(Fd),
+ TwoGig = 1 bsl 31,
+ {ok,Fd} = ?RAM_FILE_MODULE:open("1234567890", [read,write]),
+ {error, einval} = ?FILE_MODULE:read(Fd, TwoGig),
+ {error, badarg} = ?FILE_MODULE:read(Fd, -1),
+ {error, einval} = ?FILE_MODULE:position(Fd, {bof,TwoGig}),
+ {error, einval} = ?FILE_MODULE:position(Fd, {bof,-TwoGig-1}),
+ {error, einval} = ?FILE_MODULE:position(Fd, {bof,-1}),
+ {error, einval} = ?FILE_MODULE:position(Fd, {cur,TwoGig}),
+ {error, einval} = ?FILE_MODULE:position(Fd, {cur,-TwoGig-1}),
+ {error, einval} = ?FILE_MODULE:position(Fd, {eof,TwoGig}),
+ {error, einval} = ?FILE_MODULE:position(Fd, {eof,-TwoGig-1}),
+ {error, einval} = ?FILE_MODULE:pread(Fd, TwoGig, 1),
+ {error, einval} = ?FILE_MODULE:pread(Fd, -TwoGig-1, 1),
+ {error, einval} = ?FILE_MODULE:pread(Fd, -1, 1),
+ {error, einval} = ?FILE_MODULE:pwrite(Fd, TwoGig, "@"),
+ {error, einval} = ?FILE_MODULE:pwrite(Fd, -TwoGig-1, "@"),
+ {error, einval} = ?FILE_MODULE:pwrite(Fd, -1, "@"),
+ {error, einval} = ?FILE_MODULE:pread(Fd, TwoGig, 0),
+ {error, einval} = ?FILE_MODULE:pread(Fd, -TwoGig-1, 0),
+ {error, einval} = ?FILE_MODULE:pread(Fd, -1, 0),
+ ok = ?FILE_MODULE:close(Fd),
ok.
-large_file_light(suite) ->
- [];
-large_file_light(doc) ->
- ["Test light operations on a \"large\" ram_file."];
+%% Test light operations on a \large\ ram_file.
large_file_light(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Marker for next test case that is to heavy to run in a suite.
- ?line ok = ?FILE_MODULE:write_file(
- filename:join(PrivDir, "large_file_light"),
- <<"TAG">>),
- %%
- ?line Data = "abcdefghijklmnopqrstuvwzyz",
- ?line Size = sizeof(Data),
- ?line Max = (1 bsl 31) - 1,
- ?line Max__1 = Max - 1,
- ?line {ok, Fd} = ?RAM_FILE_MODULE:open(Data, [read]),
- ?line {ok, Data} = ?FILE_MODULE:read(Fd, Size+1),
- ?line {ok, Max__1} = ?FILE_MODULE:position(Fd, {eof, Max-Size-1}),
- ?line eof = ?FILE_MODULE:read(Fd, 1),
- ?line {ok, Max} = ?FILE_MODULE:position(Fd, {bof, Max}),
- ?line {ok, Zero} = ?FILE_MODULE:read(Fd, 0),
- ?line 0 = sizeof(Zero),
- ?line eof = ?FILE_MODULE:read(Fd, 1),
- ?line eof = ?FILE_MODULE:pread(Fd, Max__1, 1),
- ?line {ok, Zero} = ?FILE_MODULE:pread(Fd, Max, 0),
- ?line eof = ?FILE_MODULE:pread(Fd, Max, 1),
+ ok = ?FILE_MODULE:write_file(
+ filename:join(PrivDir, "large_file_light"),
+ <<"TAG">>),
+ %%
+ Data = "abcdefghijklmnopqrstuvwzyz",
+ Size = sizeof(Data),
+ Max = (1 bsl 31) - 1,
+ Max__1 = Max - 1,
+ {ok, Fd} = ?RAM_FILE_MODULE:open(Data, [read]),
+ {ok, Data} = ?FILE_MODULE:read(Fd, Size+1),
+ {ok, Max__1} = ?FILE_MODULE:position(Fd, {eof, Max-Size-1}),
+ eof = ?FILE_MODULE:read(Fd, 1),
+ {ok, Max} = ?FILE_MODULE:position(Fd, {bof, Max}),
+ {ok, Zero} = ?FILE_MODULE:read(Fd, 0),
+ 0 = sizeof(Zero),
+ eof = ?FILE_MODULE:read(Fd, 1),
+ eof = ?FILE_MODULE:pread(Fd, Max__1, 1),
+ {ok, Zero} = ?FILE_MODULE:pread(Fd, Max, 0),
+ eof = ?FILE_MODULE:pread(Fd, Max, 1),
ok.
-large_file_heavy(suite) ->
- [];
-large_file_heavy(doc) ->
- ["Test operations on a maximum size (2 GByte - 1) ram_file."];
+large_file_heavy() ->
+ [{timetrap,{minutes,5}}].
+
+%% Test operations on a maximum size (2 GByte - 1) ram_file.
large_file_heavy(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Check previous test case marker.
case ?FILE_MODULE:read_file_info(
filename:join(PrivDir, "large_file_light")) of
@@ -591,33 +549,33 @@ large_file_heavy(Config) when is_list(Config) ->
end.
do_large_file_heavy(_Config) ->
- ?line Data = "qwertyuiopasdfghjklzxcvbnm",
- ?line Size = sizeof(Data),
- ?line Max = (1 bsl 31) - 1,
- ?line Max__1 = Max - 1,
- ?line Max__3 = Max - 3,
- ?line {ok, Fd} = ?RAM_FILE_MODULE:open(Data, [read,write]),
- ?line {ok, Data} = ?FILE_MODULE:read(Fd, Size+1),
- ?line {ok, Max} = ?FILE_MODULE:position(Fd, {eof, Max-Size}),
- ?line eof = ?FILE_MODULE:read(Fd, 1),
- ?line erlang:display({allocating,2,'GByte',please,be,patient,'...'}),
- ?line ok = ?FILE_MODULE:write(Fd, ""),
- ?line erlang:display({allocating,2,'GByte',succeeded}),
- ?line {ok, Max__1} = ?FILE_MODULE:position(Fd, {eof, -1}),
- ?line {ok, [0]} = ?FILE_MODULE:read(Fd, 1),
- ?line {ok, []} = ?FILE_MODULE:read(Fd, 0),
- ?line eof = ?FILE_MODULE:read(Fd, 1),
- ?line ok = ?FILE_MODULE:pwrite(Fd, Max-3, "TAG"),
- ?line {ok, Max} = ?FILE_MODULE:position(Fd, cur),
- ?line {ok, Max__3} = ?FILE_MODULE:position(Fd, {eof, -3}),
- ?line {ok, "TAG"} = ?FILE_MODULE:read(Fd, 3+1),
- ?line {ok, Max__3} = ?FILE_MODULE:position(Fd, {cur, -3}),
- ?line ok = ?FILE_MODULE:write(Fd, "tag"),
- ?line {ok, Max} = ?FILE_MODULE:position(Fd, cur),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, bof),
- ?line {ok, "tag"} = ?FILE_MODULE:pread(Fd, Max__3, 3+1),
- ?line {ok, 0} = ?FILE_MODULE:position(Fd, cur),
- ?line ok = ?FILE_MODULE:close(Fd),
+ Data = "qwertyuiopasdfghjklzxcvbnm",
+ Size = sizeof(Data),
+ Max = (1 bsl 31) - 1,
+ Max__1 = Max - 1,
+ Max__3 = Max - 3,
+ {ok, Fd} = ?RAM_FILE_MODULE:open(Data, [read,write]),
+ {ok, Data} = ?FILE_MODULE:read(Fd, Size+1),
+ {ok, Max} = ?FILE_MODULE:position(Fd, {eof, Max-Size}),
+ eof = ?FILE_MODULE:read(Fd, 1),
+ erlang:display({allocating,2,'GByte',please,be,patient,'...'}),
+ ok = ?FILE_MODULE:write(Fd, ""),
+ erlang:display({allocating,2,'GByte',succeeded}),
+ {ok, Max__1} = ?FILE_MODULE:position(Fd, {eof, -1}),
+ {ok, [0]} = ?FILE_MODULE:read(Fd, 1),
+ {ok, []} = ?FILE_MODULE:read(Fd, 0),
+ eof = ?FILE_MODULE:read(Fd, 1),
+ ok = ?FILE_MODULE:pwrite(Fd, Max-3, "TAG"),
+ {ok, Max} = ?FILE_MODULE:position(Fd, cur),
+ {ok, Max__3} = ?FILE_MODULE:position(Fd, {eof, -3}),
+ {ok, "TAG"} = ?FILE_MODULE:read(Fd, 3+1),
+ {ok, Max__3} = ?FILE_MODULE:position(Fd, {cur, -3}),
+ ok = ?FILE_MODULE:write(Fd, "tag"),
+ {ok, Max} = ?FILE_MODULE:position(Fd, cur),
+ {ok, 0} = ?FILE_MODULE:position(Fd, bof),
+ {ok, "tag"} = ?FILE_MODULE:pread(Fd, Max__3, 3+1),
+ {ok, 0} = ?FILE_MODULE:position(Fd, cur),
+ ok = ?FILE_MODULE:close(Fd),
ok.
%%--------------------------------------------------------------------------
@@ -651,7 +609,7 @@ compare_data(A, B) when is_binary(A), is_list(B) ->
A == list_to_binary(B);
compare_data(A, B) when is_binary(A), is_binary(B) ->
A == B.
-
+
sizeof(Data) when is_list(Data) ->
length(Data);
sizeof(Data) when is_binary(Data) ->
diff --git a/lib/kernel/test/rpc_SUITE.erl b/lib/kernel/test/rpc_SUITE.erl
index ed30c2dffa..1c72ddc87f 100644
--- a/lib/kernel/test/rpc_SUITE.erl
+++ b/lib/kernel/test/rpc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,9 +28,11 @@
-export([suicide/2, suicide/3, f/0, f2/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[call, block_call, multicall, multicall_timeout,
@@ -55,272 +57,252 @@ end_per_group(_GroupName, Config) ->
-call(doc) -> "Test different rpc calls";
+%% Test different rpc calls.
call(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(30)),
- ?line PA = filename:dirname(code:which(?MODULE)),
+ PA = filename:dirname(code:which(?MODULE)),
%% Note. First part of nodename sets response delay in seconds
- ?line {ok, N1} = ?t:start_node('3_rpc_SUITE_call', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N2} = ?t:start_node('1_rcp_SUITE_call', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N3} = ?t:start_node('4_rcp_SUITE_call', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N4} = ?t:start_node('8_rcp_SUITE_call', slave,
- [{args, "-pa " ++ PA}]),
- ?line ok = io:format("~p~n", [[N1, N2, N3]]),
- ?line {hej,_,N1} = rpc:call(N1, ?MODULE, f, []),
- ?line {hej,_,N2} = rpc:call(N2, ?MODULE, f, [], 2000),
- ?line {badrpc,timeout} = rpc:call(N3, ?MODULE, f, [], 2000),
- ?line receive after 6000 -> ok end,
- ?line [] = flush([]),
- ?line {hej,_,N4} = rpc:call(N4, ?MODULE, f, []),
- ?line ?t:stop_node(N1),
- ?line ?t:stop_node(N2),
- ?line ?t:stop_node(N3),
- ?line ?t:stop_node(N4),
- ?t:timetrap_cancel(Timetrap),
+ {ok, N1} = test_server:start_node('3_rpc_SUITE_call', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N2} = test_server:start_node('1_rcp_SUITE_call', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N3} = test_server:start_node('4_rcp_SUITE_call', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N4} = test_server:start_node('8_rcp_SUITE_call', slave,
+ [{args, "-pa " ++ PA}]),
+ ok = io:format("~p~n", [[N1, N2, N3]]),
+ {hej,_,N1} = rpc:call(N1, ?MODULE, f, []),
+ {hej,_,N2} = rpc:call(N2, ?MODULE, f, [], 2000),
+ {badrpc,timeout} = rpc:call(N3, ?MODULE, f, [], 2000),
+ receive after 6000 -> ok end,
+ [] = flush([]),
+ {hej,_,N4} = rpc:call(N4, ?MODULE, f, []),
+ test_server:stop_node(N1),
+ test_server:stop_node(N2),
+ test_server:stop_node(N3),
+ test_server:stop_node(N4),
ok.
-block_call(doc) -> "Test different rpc calls";
+%% Test different rpc calls.
block_call(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(30)),
- ?line PA = filename:dirname(code:which(?MODULE)),
+ PA = filename:dirname(code:which(?MODULE)),
%% Note. First part of nodename sets response delay in seconds
- ?line {ok, N1} = ?t:start_node('3_rpc_SUITE_block_call', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N2} = ?t:start_node('1_rcp_SUITE_block_call', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N3} = ?t:start_node('4_rcp_SUITE_block_call', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N4} = ?t:start_node('8_rcp_SUITE_block_call', slave,
- [{args, "-pa " ++ PA}]),
- ?line ok = io:format("~p~n", [[N1, N2, N3]]),
- ?line {hej,_,N1} = rpc:block_call(N1, ?MODULE, f, []),
- ?line {hej,_,N2} = rpc:block_call(N2, ?MODULE, f, [], 2000),
- ?line {badrpc,timeout} = rpc:block_call(N3, ?MODULE, f, [], 2000),
- ?line receive after 6000 -> ok end,
- ?line [] = flush([]),
- ?line {hej,_,N4} = rpc:block_call(N4, ?MODULE, f, []),
- ?line ?t:stop_node(N1),
- ?line ?t:stop_node(N2),
- ?line ?t:stop_node(N3),
- ?line ?t:stop_node(N4),
- ?t:timetrap_cancel(Timetrap),
+ {ok, N1} = test_server:start_node('3_rpc_SUITE_block_call', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N2} = test_server:start_node('1_rcp_SUITE_block_call', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N3} = test_server:start_node('4_rcp_SUITE_block_call', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N4} = test_server:start_node('8_rcp_SUITE_block_call', slave,
+ [{args, "-pa " ++ PA}]),
+ ok = io:format("~p~n", [[N1, N2, N3]]),
+ {hej,_,N1} = rpc:block_call(N1, ?MODULE, f, []),
+ {hej,_,N2} = rpc:block_call(N2, ?MODULE, f, [], 2000),
+ {badrpc,timeout} = rpc:block_call(N3, ?MODULE, f, [], 2000),
+ receive after 6000 -> ok end,
+ [] = flush([]),
+ {hej,_,N4} = rpc:block_call(N4, ?MODULE, f, []),
+ test_server:stop_node(N1),
+ test_server:stop_node(N2),
+ test_server:stop_node(N3),
+ test_server:stop_node(N4),
ok.
-multicall(doc) ->
- "OTP-3449";
+%% OTP-3449.
multicall(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(20)),
- ?line PA = filename:dirname(code:which(?MODULE)),
+ PA = filename:dirname(code:which(?MODULE)),
%% Note. First part of nodename sets response delay in seconds
- ?line {ok, N1} = ?t:start_node('3_rpc_SUITE_multicall', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N2} = ?t:start_node('1_rcp_SUITE_multicall', slave,
- [{args, "-pa " ++ PA}]),
- ?line ok = io:format("~p~n", [[N1, N2]]),
- ?line {[{hej,_,N1},{hej,_,N2}],[]} =
- rpc:multicall([N1, N2], ?MODULE, f, []),
- ?line Msgs = flush([]),
- ?line [] = Msgs,
- ?line ?t:stop_node(N1),
- ?line ?t:stop_node(N2),
- ?t:timetrap_cancel(Timetrap),
+ {ok, N1} = test_server:start_node('3_rpc_SUITE_multicall', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N2} = test_server:start_node('1_rcp_SUITE_multicall', slave,
+ [{args, "-pa " ++ PA}]),
+ ok = io:format("~p~n", [[N1, N2]]),
+ {[{hej,_,N1},{hej,_,N2}],[]} =
+ rpc:multicall([N1, N2], ?MODULE, f, []),
+ Msgs = flush([]),
+ [] = Msgs,
+ test_server:stop_node(N1),
+ test_server:stop_node(N2),
ok.
multicall_timeout(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(30)),
- ?line PA = filename:dirname(code:which(?MODULE)),
+ PA = filename:dirname(code:which(?MODULE)),
%% Note. First part of nodename sets response delay in seconds
- ?line {ok, N1} = ?t:start_node('11_rpc_SUITE_multicall', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N2} = ?t:start_node('8_rpc_SUITE_multicall', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N3} = ?t:start_node('5_rpc_SUITE_multicall', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N4} = ?t:start_node('2_rcp_SUITE_multicall', slave,
- [{args, "-pa " ++ PA}]),
- ?line ok = io:format("~p~n", [[N1, N2]]),
- ?line {[{hej,_,N3},{hej,_,N4}],[N1, N2]} =
- rpc:multicall([N3, N1, N2, N4], ?MODULE, f, [], ?t:seconds(6)),
- ?t:sleep(?t:seconds(8)), %% Wait for late answers
- ?line Msgs = flush([]),
- ?line [] = Msgs,
- ?line ?t:stop_node(N1),
- ?line ?t:stop_node(N2),
- ?line ?t:stop_node(N3),
- ?line ?t:stop_node(N4),
- ?t:timetrap_cancel(Timetrap),
+ {ok, N1} = test_server:start_node('11_rpc_SUITE_multicall', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N2} = test_server:start_node('8_rpc_SUITE_multicall', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N3} = test_server:start_node('5_rpc_SUITE_multicall', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N4} = test_server:start_node('2_rcp_SUITE_multicall', slave,
+ [{args, "-pa " ++ PA}]),
+ ok = io:format("~p~n", [[N1, N2]]),
+ {[{hej,_,N3},{hej,_,N4}],[N1, N2]} =
+ rpc:multicall([N3, N1, N2, N4], ?MODULE, f, [], 6000),
+ ct:sleep({seconds,8}), %Wait for late answers
+ Msgs = flush([]),
+ [] = Msgs,
+ test_server:stop_node(N1),
+ test_server:stop_node(N2),
+ test_server:stop_node(N3),
+ test_server:stop_node(N4),
ok.
multicall_dies(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(30)),
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, N1} = ?t:start_node('rpc_SUITE_multicall_dies_1', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N2} = ?t:start_node('rcp_SUITE_multicall_dies_2', slave,
- [{args, "-pa " ++ PA}]),
- ?line Nodes = [N1, N2],
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, N1} = test_server:start_node('rpc_SUITE_multicall_dies_1', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N2} = test_server:start_node('rcp_SUITE_multicall_dies_2', slave,
+ [{args, "-pa " ++ PA}]),
+ Nodes = [N1, N2],
%%
- ?line {[{badrpc, {'EXIT', normal}}, {badrpc, {'EXIT', normal}}], []} =
+ {[{badrpc, {'EXIT', normal}}, {badrpc, {'EXIT', normal}}], []} =
do_multicall(Nodes, erlang, exit, [normal]),
- ?line {[{badrpc, {'EXIT', abnormal}}, {badrpc, {'EXIT', abnormal}}], []} =
+ {[{badrpc, {'EXIT', abnormal}}, {badrpc, {'EXIT', abnormal}}], []} =
do_multicall(Nodes, erlang, exit, [abnormal]),
- ?line {[{badrpc, {'EXIT', {badarith, _}}},
- {badrpc, {'EXIT', {badarith, _}}}],
- []} =
+ {[{badrpc, {'EXIT', {badarith, _}}},
+ {badrpc, {'EXIT', {badarith, _}}}],
+ []} =
do_multicall(Nodes, erlang, 'div', [1, 0]),
- ?line {[{badrpc, {'EXIT', {badarg, _}}},
- {badrpc, {'EXIT', {badarg, _}}}],
- []} =
+ {[{badrpc, {'EXIT', {badarg, _}}},
+ {badrpc, {'EXIT', {badarg, _}}}],
+ []} =
do_multicall(Nodes, erlang, atom_to_list, [1]),
- ?line {[{badrpc, {'EXIT', {undef, _}}},
- {badrpc, {'EXIT', {undef, _}}}],
- []} =
+ {[{badrpc, {'EXIT', {undef, _}}},
+ {badrpc, {'EXIT', {undef, _}}}],
+ []} =
do_multicall(Nodes, ?MODULE, suicide, []),
- ?line {[timeout, timeout], []} =
+ {[timeout, timeout], []} =
do_multicall(Nodes, ?MODULE, suicide, [link, normal]),
- ?line {[{badrpc, {'EXIT', abnormal}}, {badrpc, {'EXIT', abnormal}}], []} =
+ {[{badrpc, {'EXIT', abnormal}}, {badrpc, {'EXIT', abnormal}}], []} =
do_multicall(Nodes, ?MODULE, suicide, [link, abnormal]),
- ?line {[timeout, timeout], []} =
+ {[timeout, timeout], []} =
do_multicall(Nodes, ?MODULE, suicide, [exit, normal]),
- ?line {[{badrpc, {'EXIT', abnormal}}, {badrpc, {'EXIT', abnormal}}], []} =
+ {[{badrpc, {'EXIT', abnormal}}, {badrpc, {'EXIT', abnormal}}], []} =
do_multicall(Nodes, ?MODULE, suicide, [exit, abnormal]),
- ?line {[{badrpc, {'EXIT', killed}}, {badrpc, {'EXIT', killed}}], []} =
+ {[{badrpc, {'EXIT', killed}}, {badrpc, {'EXIT', killed}}], []} =
do_multicall(Nodes, ?MODULE, suicide, [exit, kill]),
%%
- ?line ?t:stop_node(N1),
- ?line ?t:stop_node(N2),
- ?t:timetrap_cancel(Timetrap),
+ test_server:stop_node(N1),
+ test_server:stop_node(N2),
ok.
do_multicall(Nodes, Mod, Func, Args) ->
- ?line ok = io:format("~p:~p~p~n", [Mod, Func, Args]),
- ?line Result = rpc:multicall(Nodes, Mod, Func, Args),
- ?line Msgs = flush([]),
- ?line [] = Msgs,
+ ok = io:format("~p:~p~p~n", [Mod, Func, Args]),
+ Result = rpc:multicall(Nodes, Mod, Func, Args),
+ Msgs = flush([]),
+ [] = Msgs,
Result.
-multicall_node_dies(doc) ->
- "";
multicall_node_dies(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(60)),
- %%
do_multicall_2_nodes_dies(?MODULE, suicide, [erlang, halt, []]),
do_multicall_2_nodes_dies(?MODULE, suicide, [init, stop, []]),
do_multicall_2_nodes_dies(?MODULE, suicide, [rpc, stop, []]),
- %%
- ?t:timetrap_cancel(Timetrap),
ok.
do_multicall_2_nodes_dies(Mod, Func, Args) ->
- ?line ok = io:format("~p:~p~p~n", [Mod, Func, Args]),
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, N1} = ?t:start_node('rpc_SUITE_multicall_node_dies_1', slave,
- [{args, "-pa " ++ PA}]),
- ?line {ok, N2} = ?t:start_node('rcp_SUITE_multicall_node_dies_2', slave,
- [{args, "-pa " ++ PA}]),
- ?line Nodes = [N1, N2],
- ?line {[], Nodes} = rpc:multicall(Nodes, Mod, Func, Args),
- ?line Msgs = flush([]),
- ?line [] = Msgs,
+ ok = io:format("~p:~p~p~n", [Mod, Func, Args]),
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, N1} = test_server:start_node('rpc_SUITE_multicall_node_dies_1', slave,
+ [{args, "-pa " ++ PA}]),
+ {ok, N2} = test_server:start_node('rcp_SUITE_multicall_node_dies_2', slave,
+ [{args, "-pa " ++ PA}]),
+ Nodes = [N1, N2],
+ {[], Nodes} = rpc:multicall(Nodes, Mod, Func, Args),
+ Msgs = flush([]),
+ [] = Msgs,
ok.
-called_dies(doc) ->
- "OTP-3766";
+%% OTP-3766.
called_dies(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(210)),
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, N} = ?t:start_node(rpc_SUITE_called_dies, slave,
- [{args, "-pa " ++ PA}]),
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, N} = test_server:start_node(rpc_SUITE_called_dies, slave,
+ [{args, "-pa " ++ PA}]),
%%
- ?line rep(fun (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',normal}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, erlang, exit, [normal]),
- ?line rep(fun (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',abnormal}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, erlang, exit, [abnormal]),
- ?line rep(fun (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',{badarith,_}}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, erlang, 'div', [1,0]),
- ?line rep(fun (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',{badarg,_}}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, erlang, atom_to_list, [1]),
- ?line rep(fun (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',{undef,_}}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, ?MODULE, suicide, []),
+ rep(fun (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',normal}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, erlang, exit, [normal]),
+ rep(fun (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',abnormal}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, erlang, exit, [abnormal]),
+ rep(fun (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',{badarith,_}}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, erlang, 'div', [1,0]),
+ rep(fun (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',{badarg,_}}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, erlang, atom_to_list, [1]),
+ rep(fun (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',{undef,_}}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, ?MODULE, suicide, []),
%%
TrapExit = process_flag(trap_exit, true),
%%
- ?line rep(fun (Tag, Call, Args=[Node|_]) when Node == node() ->
- {Tag,timeout} =
- {Tag,apply(rpc, Call, Args)},
- {Tag,flush,[{'EXIT',_,normal}]} =
- {Tag,flush,flush([])};
- (Tag, Call, Args) ->
- {Tag,timeout} =
- {Tag,apply(rpc, Call, Args)}
- end, N, ?MODULE, suicide, [link,normal]),
- ?line rep(fun (Tag, Call, Args=[Node|_]) when Node == node() ->
- {Tag,timeout} =
- {Tag,apply(rpc, Call, Args)},
- {Tag,flush,[{'EXIT',_,abnormal}]} =
- {Tag,flush,flush([])};
- (Tag, block_call, Args) ->
- {Tag,timeout} =
- {Tag,apply(rpc, block_call, Args)};
- (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',abnormal}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, ?MODULE, suicide, [link,abnormal]),
- ?line rep(fun (Tag, Call, Args=[Node|_]) when Node == node() ->
- {Tag,timeout} =
- {Tag,apply(rpc, Call, Args)},
- {Tag,flush,[{'EXIT',_,normal}]} =
- {Tag,flush,flush([])};
- (Tag, Call, Args) ->
- {Tag,timeout} =
- {Tag,apply(rpc, Call, Args)}
- end, N, ?MODULE, suicide, [exit,normal]),
- ?line rep(fun (Tag, Call, Args=[Node|_]) when Node == node() ->
- {Tag,timeout} =
- {Tag,apply(rpc, Call, Args)},
- {Tag,flush,[{'EXIT',_,abnormal}]} =
- {Tag,flush,flush([])};
- (Tag, block_call, Args) ->
- {Tag,timeout} =
- {Tag,apply(rpc, block_call, Args)};
- (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',abnormal}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, ?MODULE, suicide, [exit,abnormal]),
+ rep(fun (Tag, Call, Args=[Node|_]) when Node == node() ->
+ {Tag,timeout} =
+ {Tag,apply(rpc, Call, Args)},
+ {Tag,flush,[{'EXIT',_,normal}]} =
+ {Tag,flush,flush([])};
+ (Tag, Call, Args) ->
+ {Tag,timeout} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, ?MODULE, suicide, [link,normal]),
+ rep(fun (Tag, Call, Args=[Node|_]) when Node == node() ->
+ {Tag,timeout} =
+ {Tag,apply(rpc, Call, Args)},
+ {Tag,flush,[{'EXIT',_,abnormal}]} =
+ {Tag,flush,flush([])};
+ (Tag, block_call, Args) ->
+ {Tag,timeout} =
+ {Tag,apply(rpc, block_call, Args)};
+ (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',abnormal}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, ?MODULE, suicide, [link,abnormal]),
+ rep(fun (Tag, Call, Args=[Node|_]) when Node == node() ->
+ {Tag,timeout} =
+ {Tag,apply(rpc, Call, Args)},
+ {Tag,flush,[{'EXIT',_,normal}]} =
+ {Tag,flush,flush([])};
+ (Tag, Call, Args) ->
+ {Tag,timeout} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, ?MODULE, suicide, [exit,normal]),
+ rep(fun (Tag, Call, Args=[Node|_]) when Node == node() ->
+ {Tag,timeout} =
+ {Tag,apply(rpc, Call, Args)},
+ {Tag,flush,[{'EXIT',_,abnormal}]} =
+ {Tag,flush,flush([])};
+ (Tag, block_call, Args) ->
+ {Tag,timeout} =
+ {Tag,apply(rpc, block_call, Args)};
+ (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',abnormal}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, ?MODULE, suicide, [exit,abnormal]),
%%
process_flag(trap_exit, TrapExit),
%%
- ?line rep(fun %% A local [exit,kill] would kill the test case process
- (_Tag, _Call, [Node|_]) when Node == node() ->
- ok;
- %% A block_call [exit,kill] would kill the rpc server
- (_Tag, block_call, _Args) -> ok;
- (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',killed}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, ?MODULE, suicide, [exit,kill]),
+ rep(fun %% A local [exit,kill] would kill the test case process
+ (_Tag, _Call, [Node|_]) when Node == node() ->
+ ok;
+ %% A block_call [exit,kill] would kill the rpc server
+ (_Tag, block_call, _Args) -> ok;
+ (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',killed}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, ?MODULE, suicide, [exit,kill]),
%%
- ?line [] = flush([]),
- ?line ?t:stop_node(N),
- ?t:timetrap_cancel(Timetrap),
+ [] = flush([]),
+ test_server:stop_node(N),
ok.
rep(Fun, N, M, F, A) ->
@@ -335,7 +317,7 @@ rep(Fun, N, M, F, A) ->
Fun(9, block_call, [N, M, F, A, infinity]),
Fun(10, block_call, [N, M, F, A, 3000]),
ok.
-
+
suicide(link, Reason) ->
spawn_link(
@@ -364,109 +346,83 @@ suicide(Mod, Func, Args) ->
-called_node_dies(doc) ->
- "";
-called_node_dies(suite) -> [];
called_node_dies(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:minutes(2)),
- ?line PA = filename:dirname(code:which(?MODULE)),
- %%
- ?line node_rep(
- fun (Tag, Call, Args) ->
- {Tag,{badrpc,nodedown}} =
- {Tag,apply(rpc, Call, Args)}
- end, "rpc_SUITE_called_node_dies_1",
- PA, ?MODULE, suicide, [erlang,halt,[]]),
- ?line node_rep(
- fun (Tag, Call, Args) ->
- {Tag,{badrpc,nodedown}} =
- {Tag,apply(rpc, Call, Args)}
- end, "rpc_SUITE_called_node_dies_2",
- PA, ?MODULE, suicide, [init,stop,[]]),
- ?line node_rep(
- fun (Tag, Call, Args=[_|_]) ->
- {Tag,{'EXIT',{killed,_}}} =
- {Tag,catch {noexit,apply(rpc, Call, Args)}}
- end, "rpc_SUITE_called_node_dies_3",
- PA, ?MODULE, suicide, [erlang,exit,[rex,kill]]),
- ?line node_rep(
- fun %% Cannot block call rpc - will hang
- (_Tag, block_call, _Args) -> ok;
- (Tag, Call, Args=[_|_]) ->
- {Tag,{'EXIT',{normal,_}}} =
- {Tag,catch {noexit,apply(rpc, Call, Args)}}
- end, "rpc_SUITE_called_node_dies_4",
- PA, ?MODULE, suicide, [rpc,stop,[]]),
- %%
- ?t:timetrap_cancel(Timetrap),
+ PA = filename:dirname(code:which(?MODULE)),
+
+ node_rep(
+ fun (Call, Args) ->
+ {badrpc,nodedown} = apply(rpc, Call, Args)
+ end, "rpc_SUITE_called_node_dies_1",
+ PA, ?MODULE, suicide, [erlang,halt,[]]),
+
+ node_rep(
+ fun (Call, Args) ->
+ {badrpc,nodedown} = apply(rpc, Call, Args)
+ end, "rpc_SUITE_called_node_dies_2",
+ PA, ?MODULE, suicide, [init,stop,[]]),
+
+ node_rep(
+ fun (Call, Args=[_|_]) ->
+ {badrpc,{'EXIT',{killed,_}}} = apply(rpc, Call, Args)
+ end, "rpc_SUITE_called_node_dies_3",
+ PA, ?MODULE, suicide, [erlang,exit,[rex,kill]]),
+
+ node_rep(
+ fun (block_call, _Args) ->
+ %% Cannot block call rpc - will hang
+ ok;
+ (Call, Args=[_|_]) ->
+ {badrpc,{'EXIT',{normal,_}}} = apply(rpc, Call, Args)
+ end, "rpc_SUITE_called_node_dies_4",
+ PA, ?MODULE, suicide, [rpc,stop,[]]),
+
ok.
node_rep(Fun, Name, PA, M, F, A) ->
- {ok, Na} = ?t:start_node(list_to_atom(Name++"_a"), slave,
- [{args, "-pa " ++ PA}]),
- Fun(a, call, [Na, M, F, A]),
- catch ?t:stop_node(Na),
- {ok, Nb} = ?t:start_node(list_to_atom(Name++"_b"), slave,
- [{args, "-pa " ++ PA}]),
- Fun(b, call, [Nb, M, F, A, infinity]),
- catch ?t:stop_node(Nb),
- {ok, Nc} = ?t:start_node(list_to_atom(Name++"_c"), slave,
- [{args, "-pa " ++ PA}]),
- Fun(c, call, [Nc, M, F, A, infinity]),
- catch ?t:stop_node(Nc),
- %%
- {ok, Nd} = ?t:start_node(list_to_atom(Name++"_d"), slave,
- [{args, "-pa " ++ PA}]),
- Fun(d, block_call, [Nd, M, F, A]),
- catch ?t:stop_node(Nd),
- {ok, Ne} = ?t:start_node(list_to_atom(Name++"_e"), slave,
- [{args, "-pa " ++ PA}]),
- Fun(e, block_call, [Ne, M, F, A, infinity]),
- catch ?t:stop_node(Ne),
- {ok, Nf} = ?t:start_node(list_to_atom(Name++"_f"), slave,
- [{args, "-pa " ++ PA}]),
- Fun(f, block_call, [Nf, M, F, A, infinity]),
- catch ?t:stop_node(Nf),
+ node_rep_call(a, call, [M,F,A], Fun, Name, PA),
+ node_rep_call(b, call, [M,F,A,infinity], Fun, Name, PA),
+ node_rep_call(c, block_call, [M,F,A], Fun, Name, PA),
+ node_rep_call(d, block_call, [M,F,A,infinity], Fun, Name, PA).
+
+node_rep_call(Tag, Call, Args, Fun, Name0, PA) ->
+ Name = list_to_atom(Name0 ++ "_" ++ atom_to_list(Tag)),
+ {ok, N} = test_server:start_node(Name, slave,
+ [{args, "-pa " ++ PA}]),
+ Fun(Call, [N|Args]),
+ catch test_server:stop_node(N),
ok.
-
-
-called_throws(doc) ->
- "OTP-3766";
+%% OTP-3766.
called_throws(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(10)),
- ?line PA = filename:dirname(code:which(?MODULE)),
+ PA = filename:dirname(code:which(?MODULE)),
%%
- ?line {ok, N} = ?t:start_node(rpc_SUITE_called_throws, slave,
- [{args, "-pa " ++ PA}]),
+ {ok, N} = test_server:start_node(rpc_SUITE_called_throws, slave,
+ [{args, "-pa " ++ PA}]),
%%
- ?line rep(fun (Tag, Call, Args) ->
- {Tag,up} =
- {Tag,apply(rpc, Call, Args)}
- end, N, erlang, throw, [up]),
- ?line rep(fun (Tag, Call, Args) ->
- {Tag,{badrpc,{'EXIT',reason}}} =
- {Tag,apply(rpc, Call, Args)}
- end, N, erlang, throw, [{'EXIT',reason}]),
+ rep(fun (Tag, Call, Args) ->
+ {Tag,up} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, erlang, throw, [up]),
+ rep(fun (Tag, Call, Args) ->
+ {Tag,{badrpc,{'EXIT',reason}}} =
+ {Tag,apply(rpc, Call, Args)}
+ end, N, erlang, throw, [{'EXIT',reason}]),
%%
- ?line ?t:stop_node(N),
- ?t:timetrap_cancel(Timetrap),
+ test_server:stop_node(N),
ok.
call_benchmark(Config) when is_list(Config) ->
- Timetrap = ?t:timetrap(?t:seconds(120)),
PA = filename:dirname(code:which(?MODULE)),
- {ok, Node} = ?t:start_node(rpc_SUITE_call_benchmark, slave,
- [{args, "-pa " ++ PA}]),
+ {ok, Node} = test_server:start_node(rpc_SUITE_call_benchmark, slave,
+ [{args, "-pa " ++ PA}]),
Iter = case erlang:system_info(modified_timing_level) of
undefined -> 10000;
_ -> 500 %Modified timing - spawn is slower
end,
Res = do_call_benchmark(Node, Iter),
- ?t:stop_node(Node),
- ?t:timetrap_cancel(Timetrap),
+ test_server:stop_node(Node),
Res.
do_call_benchmark(Node, M) when is_integer(M), M > 0 ->
@@ -486,31 +442,28 @@ do_call_benchmark(Node, I, M) ->
do_call_benchmark(Node, I+1, M).
async_call(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:seconds(120)),
-
%% Note: First part of nodename sets response delay in seconds.
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line NodeArgs = [{args,"-pa "++ PA}],
- ?line {ok,Node1} = ?t:start_node('1_rpc_SUITE_call', slave, NodeArgs),
- ?line {ok,Node2} = ?t:start_node('10_rpc_SUITE_call', slave, NodeArgs),
- ?line {ok,Node3} = ?t:start_node('20_rpc_SUITE_call', slave, NodeArgs),
- ?line Promise1 = rpc:async_call(Node1, ?MODULE, f, []),
- ?line Promise2 = rpc:async_call(Node2, ?MODULE, f, []),
- ?line Promise3 = rpc:async_call(Node3, ?MODULE, f, []),
+ PA = filename:dirname(code:which(?MODULE)),
+ NodeArgs = [{args,"-pa "++ PA}],
+ {ok,Node1} = test_server:start_node('1_rpc_SUITE_call', slave, NodeArgs),
+ {ok,Node2} = test_server:start_node('10_rpc_SUITE_call', slave, NodeArgs),
+ {ok,Node3} = test_server:start_node('20_rpc_SUITE_call', slave, NodeArgs),
+ Promise1 = rpc:async_call(Node1, ?MODULE, f, []),
+ Promise2 = rpc:async_call(Node2, ?MODULE, f, []),
+ Promise3 = rpc:async_call(Node3, ?MODULE, f, []),
%% Test fast timeouts.
- ?line timeout = rpc:nb_yield(Promise2),
- ?line timeout = rpc:nb_yield(Promise2, 10),
+ timeout = rpc:nb_yield(Promise2),
+ timeout = rpc:nb_yield(Promise2, 10),
%% Let Node1 finish its work before yielding.
- ?t:sleep(?t:seconds(2)),
- ?line {hej,_,Node1} = rpc:yield(Promise1),
+ ct:sleep({seconds,2}),
+ {hej,_,Node1} = rpc:yield(Promise1),
%% Wait for the Node2 and Node3.
- ?line {value,{hej,_,Node2}} = rpc:nb_yield(Promise2, infinity),
- ?line {hej,_,Node3} = rpc:yield(Promise3),
+ {value,{hej,_,Node2}} = rpc:nb_yield(Promise2, infinity),
+ {hej,_,Node3} = rpc:yield(Promise3),
- ?t:timetrap_cancel(Dog),
ok.
%%%
diff --git a/lib/kernel/test/sendfile_SUITE.erl b/lib/kernel/test/sendfile_SUITE.erl
index a82b9c5fcd..2673c38494 100644
--- a/lib/kernel/test/sendfile_SUITE.erl
+++ b/lib/kernel/test/sendfile_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@ init_per_suite(Config) ->
{{unix,sunos}, {5,8,_}} ->
{skip, "Solaris 8 not supported for now"};
_ ->
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
SFilename = filename:join(Priv, "sendfile_small.html"),
{ok, DS} = file:open(SFilename,[write,raw]),
file:write(DS,"yo baby yo"),
diff --git a/lib/kernel/test/seq_trace_SUITE.erl b/lib/kernel/test/seq_trace_SUITE.erl
index 6a63f7bc9c..be23a1933f 100644
--- a/lib/kernel/test/seq_trace_SUITE.erl
+++ b/lib/kernel/test/seq_trace_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,22 +27,21 @@
trace_exit/1, distributed_exit/1, call/1, port/1,
match_set_seq_token/1, gc_seq_token/1]).
-% internal exports
+%% internal exports
-export([simple_tracer/2, one_time_receiver/0, one_time_receiver/1,
start_tracer/0, stop_tracer/1,
do_match_set_seq_token/1, do_gc_seq_token/1, countdown_start/2]).
- %-define(line_trace, 1).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(TIMESTAMP_MODES, [no_timestamp,
timestamp,
monotonic_timestamp,
strict_monotonic_timestamp]).
--define(default_timeout, ?t:minutes(1)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[token_set_get, tracer_set_get, print, send,
@@ -67,18 +66,13 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- ?line Dog = test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
%% Verifies that the set_token and get_token functions work as expected
-token_set_get(doc) -> [];
-token_set_get(suite) -> [];
token_set_get(Config) when is_list(Config) ->
do_token_set_get(timestamp),
do_token_set_get(monotonic_timestamp),
@@ -91,371 +85,351 @@ do_token_set_get(TsType) ->
strict_monotonic_timestamp -> 23;
monotonic_timestamp -> 39
end,
- ?line Self = self(),
- ?line seq_trace:reset_trace(),
+ Self = self(),
+ seq_trace:reset_trace(),
%% Test that initial seq_trace is disabled
- ?line [] = seq_trace:get_token(),
+ [] = seq_trace:get_token(),
%% Test setting and reading the different fields
- ?line 0 = seq_trace:set_token(label,17),
- ?line {label,17} = seq_trace:get_token(label),
- ?line false = seq_trace:set_token(print,true),
- ?line {print,true} = seq_trace:get_token(print),
- ?line false = seq_trace:set_token(send,true),
- ?line {send,true} = seq_trace:get_token(send),
- ?line false = seq_trace:set_token('receive',true),
- ?line {'receive',true} = seq_trace:get_token('receive'),
- ?line false = seq_trace:set_token(TsType,true),
- ?line {TsType,true} = seq_trace:get_token(TsType),
+ 0 = seq_trace:set_token(label,17),
+ {label,17} = seq_trace:get_token(label),
+ false = seq_trace:set_token(print,true),
+ {print,true} = seq_trace:get_token(print),
+ false = seq_trace:set_token(send,true),
+ {send,true} = seq_trace:get_token(send),
+ false = seq_trace:set_token('receive',true),
+ {'receive',true} = seq_trace:get_token('receive'),
+ false = seq_trace:set_token(TsType,true),
+ {TsType,true} = seq_trace:get_token(TsType),
%% Check the whole token
- ?line {Flags,17,0,Self,0} = seq_trace:get_token(), % all flags are set
+ {Flags,17,0,Self,0} = seq_trace:get_token(), % all flags are set
%% Test setting and reading the 'serial' field
- ?line {0,0} = seq_trace:set_token(serial,{3,5}),
- ?line {serial,{3,5}} = seq_trace:get_token(serial),
+ {0,0} = seq_trace:set_token(serial,{3,5}),
+ {serial,{3,5}} = seq_trace:get_token(serial),
%% Check the whole token, test that a whole token can be set and get
- ?line {Flags,17,5,Self,3} = seq_trace:get_token(),
- ?line seq_trace:set_token({Flags,19,7,Self,5}),
- ?line {Flags,19,7,Self,5} = seq_trace:get_token(),
+ {Flags,17,5,Self,3} = seq_trace:get_token(),
+ seq_trace:set_token({Flags,19,7,Self,5}),
+ {Flags,19,7,Self,5} = seq_trace:get_token(),
%% Check that receive timeout does not reset token
- ?line receive after 0 -> ok end,
- ?line {Flags,19,7,Self,5} = seq_trace:get_token(),
+ receive after 0 -> ok end,
+ {Flags,19,7,Self,5} = seq_trace:get_token(),
%% Check that token can be unset
- ?line {Flags,19,7,Self,5} = seq_trace:set_token([]),
- ?line [] = seq_trace:get_token(),
+ {Flags,19,7,Self,5} = seq_trace:set_token([]),
+ [] = seq_trace:get_token(),
%% Check that Previous serial counter survived unset token
- ?line 0 = seq_trace:set_token(label, 17),
- ?line {0,17,0,Self,5} = seq_trace:get_token(),
+ 0 = seq_trace:set_token(label, 17),
+ {0,17,0,Self,5} = seq_trace:get_token(),
%% Check that reset_trace resets the token and clears
%% the Previous serial counter
- ?line seq_trace:reset_trace(),
- ?line [] = seq_trace:get_token(),
- ?line 0 = seq_trace:set_token(label, 19),
- ?line {0,19,0,Self,0} = seq_trace:get_token(),
+ seq_trace:reset_trace(),
+ [] = seq_trace:get_token(),
+ 0 = seq_trace:set_token(label, 19),
+ {0,19,0,Self,0} = seq_trace:get_token(),
%% Cleanup
- ?line seq_trace:reset_trace(),
+ seq_trace:reset_trace(),
ok.
-tracer_set_get(doc) -> [];
-tracer_set_get(suite) -> [];
tracer_set_get(Config) when is_list(Config) ->
- ?line Self = self(),
- ?line seq_trace:set_system_tracer(self()),
- ?line Self = seq_trace:get_system_tracer(),
- ?line Self = seq_trace:set_system_tracer(false),
- ?line false = seq_trace:get_system_tracer(),
+ Self = self(),
+ seq_trace:set_system_tracer(self()),
+ Self = seq_trace:get_system_tracer(),
+ Self = seq_trace:set_system_tracer(false),
+ false = seq_trace:get_system_tracer(),
%% Set the system tracer to a port.
- ?line Port = load_tracer(Config),
- ?line seq_trace:set_system_tracer(Port),
- ?line Port = seq_trace:get_system_tracer(),
- ?line Port = seq_trace:set_system_tracer(false),
- ?line false = seq_trace:get_system_tracer(),
+ Port = load_tracer(Config),
+ seq_trace:set_system_tracer(Port),
+ Port = seq_trace:get_system_tracer(),
+ Port = seq_trace:set_system_tracer(false),
+ false = seq_trace:get_system_tracer(),
ok.
-print(doc) -> [];
-print(suite) -> [];
print(Config) when is_list(Config) ->
lists:foreach(fun do_print/1, ?TIMESTAMP_MODES).
do_print(TsType) ->
- ?line start_tracer(),
- ?line set_token_flags([print, TsType]),
- ?line seq_trace:print(0,print1),
- ?line seq_trace:print(1,print2),
- ?line seq_trace:print(print3),
- ?line seq_trace:reset_trace(),
- ?line [{0,{print,_,_,[],print1}, Ts0},
+ start_tracer(),
+ set_token_flags([print, TsType]),
+ seq_trace:print(0,print1),
+ seq_trace:print(1,print2),
+ seq_trace:print(print3),
+ seq_trace:reset_trace(),
+ [{0,{print,_,_,[],print1}, Ts0},
{0,{print,_,_,[],print3}, Ts1}] = stop_tracer(2),
check_ts(TsType, Ts0),
check_ts(TsType, Ts1).
-send(doc) -> [];
-send(suite) -> [];
send(Config) when is_list(Config) ->
lists:foreach(fun do_send/1, ?TIMESTAMP_MODES).
do_send(TsType) ->
- ?line seq_trace:reset_trace(),
- ?line start_tracer(),
- ?line Receiver = spawn(?MODULE,one_time_receiver,[]),
- ?line set_token_flags([send, TsType]),
- ?line Receiver ! send,
- ?line Self = self(),
- ?line seq_trace:reset_trace(),
- ?line [{0,{send,_,Self,Receiver,send}, Ts}] = stop_tracer(1),
+ seq_trace:reset_trace(),
+ start_tracer(),
+ Receiver = spawn(?MODULE,one_time_receiver,[]),
+ set_token_flags([send, TsType]),
+ Receiver ! send,
+ Self = self(),
+ seq_trace:reset_trace(),
+ [{0,{send,_,Self,Receiver,send}, Ts}] = stop_tracer(1),
check_ts(TsType, Ts).
-distributed_send(doc) -> [];
-distributed_send(suite) -> [];
distributed_send(Config) when is_list(Config) ->
lists:foreach(fun do_distributed_send/1, ?TIMESTAMP_MODES).
do_distributed_send(TsType) ->
- ?line {ok,Node} = start_node(seq_trace_other,[]),
- ?line {_,Dir} = code:is_loaded(?MODULE),
- ?line Mdir = filename:dirname(Dir),
- ?line true = rpc:call(Node,code,add_patha,[Mdir]),
- ?line seq_trace:reset_trace(),
- ?line start_tracer(),
- ?line Receiver = spawn(Node,?MODULE,one_time_receiver,[]),
- ?line set_token_flags([send,TsType]),
- ?line Receiver ! send,
- ?line Self = self(),
- ?line seq_trace:reset_trace(),
- ?line stop_node(Node),
- ?line [{0,{send,_,Self,Receiver,send}, Ts}] = stop_tracer(1),
+ {ok,Node} = start_node(seq_trace_other,[]),
+ {_,Dir} = code:is_loaded(?MODULE),
+ Mdir = filename:dirname(Dir),
+ true = rpc:call(Node,code,add_patha,[Mdir]),
+ seq_trace:reset_trace(),
+ start_tracer(),
+ Receiver = spawn(Node,?MODULE,one_time_receiver,[]),
+ set_token_flags([send,TsType]),
+ Receiver ! send,
+ Self = self(),
+ seq_trace:reset_trace(),
+ stop_node(Node),
+ [{0,{send,_,Self,Receiver,send}, Ts}] = stop_tracer(1),
check_ts(TsType, Ts).
-recv(doc) -> [];
-recv(suite) -> [];
recv(Config) when is_list(Config) ->
lists:foreach(fun do_recv/1, ?TIMESTAMP_MODES).
do_recv(TsType) ->
- ?line seq_trace:reset_trace(),
- ?line start_tracer(),
- ?line Receiver = spawn(?MODULE,one_time_receiver,[]),
- ?line set_token_flags(['receive',TsType]),
- ?line Receiver ! 'receive',
+ seq_trace:reset_trace(),
+ start_tracer(),
+ Receiver = spawn(?MODULE,one_time_receiver,[]),
+ set_token_flags(['receive',TsType]),
+ Receiver ! 'receive',
%% let the other process receive the message:
- ?line receive after 1 -> ok end,
- ?line Self = self(),
- ?line seq_trace:reset_trace(),
- ?line [{0,{'receive',_,Self,Receiver,'receive'}, Ts}] = stop_tracer(1),
+ receive after 1 -> ok end,
+ Self = self(),
+ seq_trace:reset_trace(),
+ [{0,{'receive',_,Self,Receiver,'receive'}, Ts}] = stop_tracer(1),
check_ts(TsType, Ts).
-distributed_recv(doc) -> [];
-distributed_recv(suite) -> [];
distributed_recv(Config) when is_list(Config) ->
lists:foreach(fun do_distributed_recv/1, ?TIMESTAMP_MODES).
do_distributed_recv(TsType) ->
- ?line {ok,Node} = start_node(seq_trace_other,[]),
- ?line {_,Dir} = code:is_loaded(?MODULE),
- ?line Mdir = filename:dirname(Dir),
- ?line true = rpc:call(Node,code,add_patha,[Mdir]),
- ?line seq_trace:reset_trace(),
- ?line rpc:call(Node,?MODULE,start_tracer,[]),
- ?line Receiver = spawn(Node,?MODULE,one_time_receiver,[]),
- ?line set_token_flags(['receive',TsType]),
- ?line Receiver ! 'receive',
+ {ok,Node} = start_node(seq_trace_other,[]),
+ {_,Dir} = code:is_loaded(?MODULE),
+ Mdir = filename:dirname(Dir),
+ true = rpc:call(Node,code,add_patha,[Mdir]),
+ seq_trace:reset_trace(),
+ rpc:call(Node,?MODULE,start_tracer,[]),
+ Receiver = spawn(Node,?MODULE,one_time_receiver,[]),
+ set_token_flags(['receive',TsType]),
+ Receiver ! 'receive',
%% let the other process receive the message:
- ?line receive after 1 -> ok end,
- ?line Self = self(),
- ?line seq_trace:reset_trace(),
- ?line Result = rpc:call(Node,?MODULE,stop_tracer,[1]),
- ?line stop_node(Node),
- ?line ok = io:format("~p~n",[Result]),
- ?line [{0,{'receive',_,Self,Receiver,'receive'}, Ts}] = Result,
+ receive after 1 -> ok end,
+ Self = self(),
+ seq_trace:reset_trace(),
+ Result = rpc:call(Node,?MODULE,stop_tracer,[1]),
+ stop_node(Node),
+ ok = io:format("~p~n",[Result]),
+ [{0,{'receive',_,Self,Receiver,'receive'}, Ts}] = Result,
check_ts(TsType, Ts).
-trace_exit(doc) -> [];
-trace_exit(suite) -> [];
trace_exit(Config) when is_list(Config) ->
lists:foreach(fun do_trace_exit/1, ?TIMESTAMP_MODES).
do_trace_exit(TsType) ->
- ?line seq_trace:reset_trace(),
- ?line start_tracer(),
- ?line Receiver = spawn_link(?MODULE, one_time_receiver, [exit]),
- ?line process_flag(trap_exit, true),
- ?line set_token_flags([send, TsType]),
- ?line Receiver ! {before, exit},
+ seq_trace:reset_trace(),
+ start_tracer(),
+ Receiver = spawn_link(?MODULE, one_time_receiver, [exit]),
+ process_flag(trap_exit, true),
+ set_token_flags([send, TsType]),
+ Receiver ! {before, exit},
%% let the other process receive the message:
- ?line receive
+ receive
{'EXIT', Receiver, {exit, {before, exit}}} ->
seq_trace:set_token([]);
Other ->
seq_trace:set_token([]),
- ?t:fail({received, Other})
+ ct:fail({received, Other})
end,
- ?line Self = self(),
- ?line Result = stop_tracer(2),
- ?line seq_trace:reset_trace(),
- ?line ok = io:format("~p~n", [Result]),
- ?line [{0, {send, {0,1}, Self, Receiver, {before, exit}}, Ts0},
+ Self = self(),
+ Result = stop_tracer(2),
+ seq_trace:reset_trace(),
+ ok = io:format("~p~n", [Result]),
+ [{0, {send, {0,1}, Self, Receiver, {before, exit}}, Ts0},
{0, {send, {1,2}, Receiver, Self,
{'EXIT', Receiver, {exit, {before, exit}}}}, Ts1}] = Result,
check_ts(TsType, Ts0),
check_ts(TsType, Ts1).
-distributed_exit(doc) -> [];
-distributed_exit(suite) -> [];
distributed_exit(Config) when is_list(Config) ->
lists:foreach(fun do_distributed_exit/1, ?TIMESTAMP_MODES).
do_distributed_exit(TsType) ->
- ?line {ok, Node} = start_node(seq_trace_other, []),
- ?line {_, Dir} = code:is_loaded(?MODULE),
- ?line Mdir = filename:dirname(Dir),
- ?line true = rpc:call(Node, code, add_patha, [Mdir]),
- ?line seq_trace:reset_trace(),
- ?line rpc:call(Node, ?MODULE, start_tracer,[]),
- ?line Receiver = spawn_link(Node, ?MODULE, one_time_receiver, [exit]),
- ?line process_flag(trap_exit, true),
- ?line set_token_flags([send, TsType]),
- ?line Receiver ! {before, exit},
+ {ok, Node} = start_node(seq_trace_other, []),
+ {_, Dir} = code:is_loaded(?MODULE),
+ Mdir = filename:dirname(Dir),
+ true = rpc:call(Node, code, add_patha, [Mdir]),
+ seq_trace:reset_trace(),
+ rpc:call(Node, ?MODULE, start_tracer,[]),
+ Receiver = spawn_link(Node, ?MODULE, one_time_receiver, [exit]),
+ process_flag(trap_exit, true),
+ set_token_flags([send, TsType]),
+ Receiver ! {before, exit},
%% let the other process receive the message:
- ?line receive
+ receive
{'EXIT', Receiver, {exit, {before, exit}}} ->
seq_trace:set_token([]);
Other ->
seq_trace:set_token([]),
- ?t:fail({received, Other})
+ ct:fail({received, Other})
end,
- ?line Self = self(),
- ?line Result = rpc:call(Node, ?MODULE, stop_tracer, [1]),
- ?line seq_trace:reset_trace(),
- ?line stop_node(Node),
- ?line ok = io:format("~p~n", [Result]),
- ?line [{0, {send, {1, 2}, Receiver, Self,
+ Self = self(),
+ Result = rpc:call(Node, ?MODULE, stop_tracer, [1]),
+ seq_trace:reset_trace(),
+ stop_node(Node),
+ ok = io:format("~p~n", [Result]),
+ [{0, {send, {1, 2}, Receiver, Self,
{'EXIT', Receiver, {exit, {before, exit}}}}, Ts}] = Result,
check_ts(TsType, Ts).
call(doc) ->
"Tests special forms {is_seq_trace} and {get_seq_token} "
"in trace match specs.";
-call(suite) ->
- [];
call(Config) when is_list(Config) ->
- ?line Self = self(),
- ?line seq_trace:reset_trace(),
- ?line TrA = transparent_tracer(),
- ?line 1 =
+ Self = self(),
+ seq_trace:reset_trace(),
+ TrA = transparent_tracer(),
+ 1 =
erlang:trace(Self, true,
[call, set_on_spawn, {tracer, TrA(pid)}]),
- ?line 1 =
+ 1 =
erlang:trace_pattern({?MODULE, call_tracee_1, 1},
[{'_',
[],
[{message, {{{self}, {get_seq_token}}}}]}],
[local]),
- ?line 1 =
+ 1 =
erlang:trace_pattern({?MODULE, call_tracee_2, 1},
[{'_',
[{is_seq_trace}],
[{message, {{{self}, {get_seq_token}}}}]}],
[local]),
- ?line RefA = make_ref(),
- ?line Pid2A = spawn_link(
+ RefA = make_ref(),
+ Pid2A = spawn_link(
fun() ->
receive {_, msg, RefA} -> ok end,
RefA = call_tracee_2(RefA),
Self ! {self(), msg, RefA}
end),
- ?line Pid1A = spawn_link(
+ Pid1A = spawn_link(
fun() ->
receive {_, msg, RefA} -> ok end,
RefA = call_tracee_1(RefA),
Pid2A ! {self(), msg, RefA}
end),
- ?line Pid1A ! {Self, msg, RefA},
+ Pid1A ! {Self, msg, RefA},
%% The message is passed Self -> Pid1B -> Pid2B -> Self.
%% Traced functions are called in Pid1B and Pid2B.
- ?line receive {Pid2A, msg, RefA} -> ok end,
+ receive {Pid2A, msg, RefA} -> ok end,
%% Only call_tracee1 will be traced since the guard for
%% call_tracee2 requires a sequential trace. The trace
%% token is undefined.
- ?line Token2A = [],
- ?line {ok, [{trace, Pid1A, call,
+ Token2A = [],
+ {ok, [{trace, Pid1A, call,
{?MODULE, call_tracee_1, [RefA]},
{Pid1A, Token2A}}]} =
TrA({stop, 1}),
- ?line seq_trace:reset_trace(),
+ seq_trace:reset_trace(),
- ?line TrB = transparent_tracer(),
- ?line 1 =
+ TrB = transparent_tracer(),
+ 1 =
erlang:trace(Self, true,
[call, set_on_spawn, {tracer, TrB(pid)}]),
- ?line Label = 17,
- ?line seq_trace:set_token(label, Label), % Token enters here!!
- ?line RefB = make_ref(),
- ?line Pid2B = spawn_link(
+ Label = 17,
+ seq_trace:set_token(label, Label), % Token enters here!!
+ RefB = make_ref(),
+ Pid2B = spawn_link(
fun() ->
receive {_, msg, RefB} -> ok end,
RefB = call_tracee_2(RefB),
Self ! {self(), msg, RefB}
end),
- ?line Pid1B = spawn_link(
+ Pid1B = spawn_link(
fun() ->
receive {_, msg, RefB} -> ok end,
RefB = call_tracee_1(RefB),
Pid2B ! {self(), msg, RefB}
end),
- ?line Pid1B ! {Self, msg, RefB},
+ Pid1B ! {Self, msg, RefB},
%% The message is passed Self -> Pid1B -> Pid2B -> Self, and the
%% seq_trace token follows invisibly. Traced functions are
%% called in Pid1B and Pid2B. Seq_trace flags == 0 so no
%% seq_trace messages are generated.
- ?line receive {Pid2B, msg, RefB} -> ok end,
+ receive {Pid2B, msg, RefB} -> ok end,
%% The values of these counters {.., 1, _, 0}, {.., 2, _, 1}
%% depend on that seq_trace has been reset just before this test.
- ?line Token1B = {0, Label, 1, Self, 0},
- ?line Token2B = {0, Label, 2, Pid1B, 1},
- ?line {ok, [{trace, Pid1B, call,
+ Token1B = {0, Label, 1, Self, 0},
+ Token2B = {0, Label, 2, Pid1B, 1},
+ {ok, [{trace, Pid1B, call,
{?MODULE, call_tracee_1, [RefB]},
{Pid1B, Token1B}},
{trace, Pid2B, call,
{?MODULE, call_tracee_2, [RefB]},
{Pid2B, Token2B}}]} =
TrB({stop,2}),
- ?line seq_trace:reset_trace(),
+ seq_trace:reset_trace(),
ok.
-port(doc) ->
- "Send trace messages to a port.";
-port(suite) -> [];
+%% Send trace messages to a port.
port(Config) when is_list(Config) ->
lists:foreach(fun (TsType) -> do_port(TsType, Config) end,
?TIMESTAMP_MODES).
do_port(TsType, Config) ->
io:format("Testing ~p~n",[TsType]),
- ?line Port = load_tracer(Config),
- ?line seq_trace:set_system_tracer(Port),
+ Port = load_tracer(Config),
+ seq_trace:set_system_tracer(Port),
- ?line set_token_flags([print, TsType]),
- ?line Small = [small,term],
- ?line seq_trace:print(0, Small),
- ?line case get_port_message(Port) of
+ set_token_flags([print, TsType]),
+ Small = [small,term],
+ seq_trace:print(0, Small),
+ case get_port_message(Port) of
{seq_trace,0,{print,_,_,[],Small}} when TsType == no_timestamp ->
ok;
{seq_trace,0,{print,_,_,[],Small},Ts0} when TsType /= no_timestamp ->
check_ts(TsType, Ts0),
ok;
Other ->
- ?line seq_trace:reset_trace(),
- ?line ?t:fail({unexpected,Other})
+ seq_trace:reset_trace(),
+ ct:fail({unexpected,Other})
end,
%% OTP-4218 Messages from ports should not affect seq trace token.
%%
%% Check if trace token still is active on this process after
%% the get_port_message/1 above that receives from a port.
- ?line OtherSmall = [other | Small],
- ?line seq_trace:print(0, OtherSmall),
- ?line seq_trace:reset_trace(),
- ?line case get_port_message(Port) of
+ OtherSmall = [other | Small],
+ seq_trace:print(0, OtherSmall),
+ seq_trace:reset_trace(),
+ case get_port_message(Port) of
{seq_trace,0,{print,_,_,[],OtherSmall}} when TsType == no_timestamp ->
ok;
{seq_trace,0,{print,_,_,[],OtherSmall}, Ts1} when TsType /= no_timestamp ->
check_ts(TsType, Ts1),
ok;
Other1 ->
- ?line ?t:fail({unexpected,Other1})
+ ct:fail({unexpected,Other1})
end,
- ?line seq_trace:set_token(print, true),
- ?line Huge = huge_data(),
- ?line seq_trace:print(0, Huge),
- ?line seq_trace:reset_trace(),
- ?line case get_port_message(Port) of
+ seq_trace:set_token(print, true),
+ Huge = huge_data(),
+ seq_trace:print(0, Huge),
+ seq_trace:reset_trace(),
+ case get_port_message(Port) of
{seq_trace,0,{print,_,_,[],Huge}} ->
ok;
Other2 ->
- ?line ?t:fail({unexpected,Other2})
+ ct:fail({unexpected,Other2})
end,
unlink(Port),
exit(Port,kill),
@@ -466,21 +440,19 @@ get_port_message(Port) ->
{Port,{data,Bin}} when is_binary(Bin) ->
binary_to_term(Bin);
Other ->
- ?t:fail({unexpected,Other})
+ ct:fail({unexpected,Other})
after 5000 ->
- ?t:fail(timeout)
+ ct:fail(timeout)
end.
-match_set_seq_token(suite) ->
- [];
match_set_seq_token(doc) ->
["Tests that match spec function set_seq_token does not "
"corrupt the heap"];
match_set_seq_token(Config) when is_list(Config) ->
- ?line Parent = self(),
- ?line Timetrap = test_server:timetrap(test_server:seconds(20)),
+ Parent = self(),
+
%% OTP-4222 Match spec 'set_seq_token' corrupts heap
%%
%% This test crashes the emulator if the bug in question is present,
@@ -488,13 +460,13 @@ match_set_seq_token(Config) when is_list(Config) ->
%%
%% All the timeout stuff is here to get decent accuracy of the error
%% return value, instead of just 'timeout'.
- %
- ?line {ok, Sandbox} = start_node(seq_trace_other, []),
- ?line true = rpc:call(Sandbox, code, add_patha,
+ %%
+ {ok, Sandbox} = start_node(seq_trace_other, []),
+ true = rpc:call(Sandbox, code, add_patha,
[filename:dirname(code:which(?MODULE))]),
- ?line Lbl = 4711,
+ Lbl = 4711,
%% Do the possibly crashing test
- ?line P1 =
+ P1 =
spawn(
fun () ->
Parent ! {self(),
@@ -502,16 +474,16 @@ match_set_seq_token(Config) when is_list(Config) ->
?MODULE, do_match_set_seq_token, [Lbl])}
end),
%% Probe the node with a simple rpc request, to see if it is alive.
- ?line P2 =
+ P2 =
spawn(
fun () ->
receive after 4000 -> ok end,
Parent ! {self(), rpc:call(Sandbox, erlang, abs, [-1])}
end),
%% If the test node hangs completely, this timer expires.
- ?line R3 = erlang:start_timer(8000, self(), void),
+ R3 = erlang:start_timer(8000, self(), void),
%%
- ?line {ok, Log} =
+ {ok, Log} =
receive
{P1, Result} ->
exit(P2, done),
@@ -526,10 +498,15 @@ match_set_seq_token(Config) when is_list(Config) ->
exit(P2, timeout),
{error, "Test node hung"}
end,
- ?line ok = check_match_set_seq_token_log(Lbl, Log),
+
+ %% Sort the log on Pid, as events from different processes
+ %% are not guaranteed to arrive in a certain order to the
+ %% tracer
+ SortedLog = lists:keysort(2, Log),
+
+ ok = check_match_set_seq_token_log(Lbl, SortedLog),
%%
- ?line stop_node(Sandbox),
- ?line test_server:timetrap_cancel(Timetrap),
+ stop_node(Sandbox),
ok.
%% OTP-4222 Match spec 'set_seq_token' corrupts heap
@@ -580,13 +557,13 @@ do_match_set_seq_token(Label) ->
check_match_set_seq_token_log(
Label,
- [{trace,C,call,{?MODULE,countdown,[B,Ref]}, {0,Label,0,C,0}},
+ [{trace,B,call,{?MODULE,bounce, [Ref]}, {0,Label,2,B,1}},
+ {trace,B,call,{?MODULE,bounce, [Ref]}, {0,Label,4,B,3}},
+ {trace,B,call,{?MODULE,bounce, [Ref]}, {0,Label,6,B,5}},
+ {trace,C,call,{?MODULE,countdown,[B,Ref]}, {0,Label,0,C,0}},
{trace,C,call,{?MODULE,countdown,[B,Ref,3]},{0,Label,0,C,0}},
- {trace,B,call,{?MODULE,bounce, [Ref]}, {0,Label,2,B,1}},
{trace,C,call,{?MODULE,countdown,[B,Ref,2]},{0,Label,2,B,1}},
- {trace,B,call,{?MODULE,bounce, [Ref]}, {0,Label,4,B,3}},
{trace,C,call,{?MODULE,countdown,[B,Ref,1]},{0,Label,4,B,3}},
- {trace,B,call,{?MODULE,bounce, [Ref]}, {0,Label,6,B,5}},
{trace,C,call,{?MODULE,countdown,[B,Ref,0]},{0,Label,6,B,5}}
]) ->
ok;
@@ -621,14 +598,12 @@ bounce(Ref) ->
-gc_seq_token(suite) ->
- [];
gc_seq_token(doc) ->
["Tests that a seq_trace token on a message in the inqueue ",
"can be garbage collected."];
gc_seq_token(Config) when is_list(Config) ->
- ?line Parent = self(),
- ?line Timetrap = test_server:timetrap(test_server:seconds(20)),
+ Parent = self(),
+
%% OTP-4555 Seq trace token causes free mem read in gc
%%
%% This test crashes the emulator if the bug in question is present,
@@ -636,13 +611,13 @@ gc_seq_token(Config) when is_list(Config) ->
%%
%% All the timeout stuff is here to get decent accuracy of the error
%% return value, instead of just 'timeout'.
- %
- ?line {ok, Sandbox} = start_node(seq_trace_other, []),
- ?line true = rpc:call(Sandbox, code, add_patha,
+ %%
+ {ok, Sandbox} = start_node(seq_trace_other, []),
+ true = rpc:call(Sandbox, code, add_patha,
[filename:dirname(code:which(?MODULE))]),
- ?line Label = 4711,
+ Label = 4711,
%% Do the possibly crashing test
- ?line P1 =
+ P1 =
spawn(
fun () ->
Parent ! {self(),
@@ -650,16 +625,16 @@ gc_seq_token(Config) when is_list(Config) ->
?MODULE, do_gc_seq_token, [Label])}
end),
%% Probe the node with a simple rpc request, to see if it is alive.
- ?line P2 =
+ P2 =
spawn(
fun () ->
receive after 4000 -> ok end,
Parent ! {self(), rpc:call(Sandbox, erlang, abs, [-1])}
end),
%% If the test node hangs completely, this timer expires.
- ?line R3 = erlang:start_timer(8000, self(), void),
+ R3 = erlang:start_timer(8000, self(), void),
%%
- ?line ok =
+ ok =
receive
{P1, Result} ->
exit(P2, done),
@@ -675,8 +650,7 @@ gc_seq_token(Config) when is_list(Config) ->
{error, "Test node hung"}
end,
%%
- ?line stop_node(Sandbox),
- ?line test_server:timetrap_cancel(Timetrap),
+ stop_node(Sandbox),
ok.
do_gc_seq_token(Label) ->
@@ -819,7 +793,6 @@ start_tracer() ->
seq_trace:set_system_tracer(Pid),
Pid.
-
set_token_flags([]) ->
ok;
set_token_flags([no_timestamp|Flags]) ->
@@ -836,7 +809,7 @@ check_ts(no_timestamp, Ts) ->
no_timestamp = Ts
catch
_ : _ ->
- ?t:fail({unexpected_timestamp, Ts})
+ ct:fail({unexpected_timestamp, Ts})
end,
ok;
check_ts(timestamp, Ts) ->
@@ -847,7 +820,7 @@ check_ts(timestamp, Ts) ->
true = is_integer(Us)
catch
_ : _ ->
- ?t:fail({unexpected_timestamp, Ts})
+ ct:fail({unexpected_timestamp, Ts})
end,
ok;
check_ts(monotonic_timestamp, Ts) ->
@@ -855,7 +828,7 @@ check_ts(monotonic_timestamp, Ts) ->
true = is_integer(Ts)
catch
_ : _ ->
- ?t:fail({unexpected_timestamp, Ts})
+ ct:fail({unexpected_timestamp, Ts})
end,
ok;
check_ts(strict_monotonic_timestamp, Ts) ->
@@ -865,10 +838,10 @@ check_ts(strict_monotonic_timestamp, Ts) ->
true = is_integer(UMI)
catch
_ : _ ->
- ?t:fail({unexpected_timestamp, Ts})
+ ct:fail({unexpected_timestamp, Ts})
end,
ok.
-
+
start_node(Name, Param) ->
test_server:start_node(Name, slave, [{args, Param}]).
@@ -876,7 +849,7 @@ stop_node(Node) ->
test_server:stop_node(Node).
load_tracer(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
ok = erl_ddll:load_driver(Path, echo_drv),
open_port({spawn,echo_drv}, [eof,binary]).
diff --git a/lib/kernel/test/standard_error_SUITE.erl b/lib/kernel/test/standard_error_SUITE.erl
index 97ead9b9fd..1d9026dc58 100644
--- a/lib/kernel/test/standard_error_SUITE.erl
+++ b/lib/kernel/test/standard_error_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/topApp.erl b/lib/kernel/test/topApp.erl
index 597268a5a2..6ea957fdc1 100644
--- a/lib/kernel/test/topApp.erl
+++ b/lib/kernel/test/topApp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/topApp2.erl b/lib/kernel/test/topApp2.erl
index 69d5c047be..aeb024f7a7 100644
--- a/lib/kernel/test/topApp2.erl
+++ b/lib/kernel/test/topApp2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/topApp3.erl b/lib/kernel/test/topApp3.erl
index e892aadcd0..917da3dad4 100644
--- a/lib/kernel/test/topApp3.erl
+++ b/lib/kernel/test/topApp3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/wrap_log_reader_SUITE.erl b/lib/kernel/test/wrap_log_reader_SUITE.erl
index 9a93b9037f..40a016aed0 100644
--- a/lib/kernel/test/wrap_log_reader_SUITE.erl
+++ b/lib/kernel/test/wrap_log_reader_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
-module(wrap_log_reader_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -29,9 +29,9 @@
-define(config(X,Y), foo).
-define(t,test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
--define(privdir(Conf), ?config(priv_dir, Conf)).
+-define(privdir(Conf), proplists:get_value(priv_dir, Conf)).
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -47,7 +47,9 @@
-export([init_per_testcase/2, end_per_testcase/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[no_file, {group, one}, {group, two}, {group, four},
@@ -71,75 +73,70 @@ end_per_group(_GroupName, Config) ->
Config.
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:seconds(60)),
- [{watchdog, Dog} | Config].
+init_per_testcase(Func, Config) ->
+ Config.
end_per_testcase(_Func, _Config) ->
- Dog=?config(watchdog, _Config),
- ?t:timetrap_cancel(Dog).
+ ok.
-no_file(suite) -> [];
-no_file(doc) -> ["No log file exists"];
+%% No log file exists.
no_file(Conf) when is_list(Conf) ->
- ?line code:add_path(?config(data_dir,Conf)),
+ code:add_path(proplists:get_value(data_dir,Conf)),
Dir = ?privdir(Conf),
File = join(Dir, "sune.LOG"),
delete_files(File),
start(),
wlt ! {open, self(), File},
- ?line rec({error, {index_file_not_found, File}}, ?LINE),
+ rec({error, {index_file_not_found, File}}, ?LINE),
wlt ! {open, self(), File, 1},
- ?line rec({error, {index_file_not_found, File}}, ?LINE),
+ rec({error, {index_file_not_found, File}}, ?LINE),
wlt ! {open, self(), File, 4},
- ?line rec({error, {index_file_not_found, File}}, ?LINE),
+ rec({error, {index_file_not_found, File}}, ?LINE),
stop(),
delete_files(File),
ok.
-one_empty(suite) -> [];
-one_empty(doc) -> ["One empty index file"];
+%% One empty index file.
one_empty(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = join(Dir, "sune.LOG"),
delete_files(File),
start(),
- ?line open(sune, File, ?LINE),
+ open(sune, File, ?LINE),
%% open
- ?line do_chunk([{open,File}, eof], wlt, ?LINE),
- ?line do_chunk([{open,File,1}, eof], wlt, ?LINE),
+ do_chunk([{open,File}, eof], wlt, ?LINE),
+ do_chunk([{open,File,1}, eof], wlt, ?LINE),
wlt ! {open, self(), File, 2},
- ?line rec({error, {file_not_found, add_ext(File, 2)}}, ?LINE),
- ?line close(sune),
+ rec({error, {file_not_found, add_ext(File, 2)}}, ?LINE),
+ close(sune),
%% closed
- ?line do_chunk([{open,File}, eof], wlt, ?LINE),
- ?line do_chunk([{open,File,1}, eof], wlt, ?LINE),
+ do_chunk([{open,File}, eof], wlt, ?LINE),
+ do_chunk([{open,File,1}, eof], wlt, ?LINE),
wlt ! {open, self(), File, 2},
- ?line rec({error, {file_not_found, add_ext(File, 2)}}, ?LINE),
+ rec({error, {file_not_found, add_ext(File, 2)}}, ?LINE),
stop(),
delete_files(File),
ok.
-one_filled(suite) -> [];
-one_filled(doc) -> ["One filled index file"];
+%% One filled index file.
one_filled(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = join(Dir, "sune.LOG"),
delete_files(File),
start(),
- ?line open(sune, File, ?LINE),
- ?line log_terms(sune, ["first round, one", "first round, two"]),
- ?line sync(sune),
+ open(sune, File, ?LINE),
+ log_terms(sune, ["first round, one", "first round, two"]),
+ sync(sune),
%% open
test_one(File),
- ?line close(sune),
+ close(sune),
%% closed
test_one(File),
@@ -148,34 +145,33 @@ one_filled(Conf) when is_list(Conf) ->
ok.
test_one(File) ->
- ?line do_chunk([{open,File},
- {chunk, ["first round, one", "first round, two"]},
- eof], wlt, ?LINE),
- ?line do_chunk([{open,File,1},
- {chunk, ["first round, one", "first round, two"]},
- eof], wlt, ?LINE),
+ do_chunk([{open,File},
+ {chunk, ["first round, one", "first round, two"]},
+ eof], wlt, ?LINE),
+ do_chunk([{open,File,1},
+ {chunk, ["first round, one", "first round, two"]},
+ eof], wlt, ?LINE),
wlt ! {open, self(), File, 2},
- ?line rec({error, {file_not_found, add_ext(File, 2)}}, ?LINE),
- ?line do_chunk([{open,File,1}, {chunk, 1, ["first round, one"]},
- {chunk, 1, ["first round, two"]}, eof], wlt, ?LINE),
+ rec({error, {file_not_found, add_ext(File, 2)}}, ?LINE),
+ do_chunk([{open,File,1}, {chunk, 1, ["first round, one"]},
+ {chunk, 1, ["first round, two"]}, eof], wlt, ?LINE),
ok.
-two_filled(suite) -> [];
-two_filled(doc) -> ["Two filled index files"];
+%% Two filled index files.
two_filled(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = list_to_atom(join(Dir, "sune.LOG")),
delete_files(File),
start(),
- ?line open(sune, File, ?LINE),
- ?line log_terms(sune, ["first round, 11", "first round, 12"]),
- ?line log_terms(sune, ["first round, 21", "first round, 22"]),
- ?line sync(sune),
+ open(sune, File, ?LINE),
+ log_terms(sune, ["first round, 11", "first round, 12"]),
+ log_terms(sune, ["first round, 21", "first round, 22"]),
+ sync(sune),
%% open
test_two(File),
- ?line close(sune),
+ close(sune),
%% closed
test_two(File),
@@ -184,37 +180,36 @@ two_filled(Conf) when is_list(Conf) ->
ok.
test_two(File) ->
- ?line do_chunk([{open,File},
- {chunk, infinity, ["first round, 11", "first round, 12"]},
- {chunk, ["first round, 21", "first round, 22"]},
- eof], wlt, ?LINE),
- ?line do_chunk([{open,File,1},
- {chunk, ["first round, 11", "first round, 12"]},
- eof], wlt, ?LINE),
- ?line do_chunk([{open,File,2},
- {chunk, ["first round, 21", "first round, 22"]},
- eof], wlt, ?LINE),
+ do_chunk([{open,File},
+ {chunk, infinity, ["first round, 11", "first round, 12"]},
+ {chunk, ["first round, 21", "first round, 22"]},
+ eof], wlt, ?LINE),
+ do_chunk([{open,File,1},
+ {chunk, ["first round, 11", "first round, 12"]},
+ eof], wlt, ?LINE),
+ do_chunk([{open,File,2},
+ {chunk, ["first round, 21", "first round, 22"]},
+ eof], wlt, ?LINE),
wlt ! {open, self(), File, 3},
- ?line rec({error, {file_not_found, add_ext(File, 3)}}, ?LINE),
- ?line do_chunk([{open,File,1}, {chunk, 1, ["first round, 11"]},
- {chunk, 2, ["first round, 12"]}, eof], wlt, ?LINE),
+ rec({error, {file_not_found, add_ext(File, 3)}}, ?LINE),
+ do_chunk([{open,File,1}, {chunk, 1, ["first round, 11"]},
+ {chunk, 2, ["first round, 12"]}, eof], wlt, ?LINE),
ok.
-four_filled(suite) -> [];
-four_filled(doc) -> ["Four filled index files"];
+%% Four filled index files.
four_filled(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = join(Dir, "sune.LOG"),
delete_files(File),
start(),
- ?line open(sune, File, ?LINE),
- ?line init_files(0),
- ?line sync(sune),
+ open(sune, File, ?LINE),
+ init_files(0),
+ sync(sune),
%% open
test_four(File),
- ?line close(sune),
+ close(sune),
%% closed
test_four(File),
@@ -223,42 +218,41 @@ four_filled(Conf) when is_list(Conf) ->
ok.
test_four(File) ->
- ?line do_chunk([{open,File},
- {chunk, ["first round, 11", "first round, 12"]},
- {chunk, ["first round, 21", "first round, 22"]},
- {chunk, ["first round, 31", "first round, 32"]},
- {chunk, ["first round, 41", "first round, 42"]},
- eof], wlt, ?LINE),
- ?line do_chunk([{open,File,1},
- {chunk, ["first round, 11", "first round, 12"]},
- eof], wlt, ?LINE),
- ?line do_chunk([{open,File,4},
- {chunk, ["first round, 41", "first round, 42"]},
- eof], wlt, ?LINE),
+ do_chunk([{open,File},
+ {chunk, ["first round, 11", "first round, 12"]},
+ {chunk, ["first round, 21", "first round, 22"]},
+ {chunk, ["first round, 31", "first round, 32"]},
+ {chunk, ["first round, 41", "first round, 42"]},
+ eof], wlt, ?LINE),
+ do_chunk([{open,File,1},
+ {chunk, ["first round, 11", "first round, 12"]},
+ eof], wlt, ?LINE),
+ do_chunk([{open,File,4},
+ {chunk, ["first round, 41", "first round, 42"]},
+ eof], wlt, ?LINE),
wlt ! {open, self(), File, 5},
- ?line rec({error, {file_not_found, add_ext(File, 5)}}, ?LINE),
- ?line do_chunk([{open,File,1}, {chunk, 1, ["first round, 11"]},
- {chunk, 2, ["first round, 12"]}, eof], wlt, ?LINE),
- ?line do_chunk([{open,File,4}, {chunk, 1, ["first round, 41"]},
- {chunk, 2, ["first round, 42"]}, eof], wlt, ?LINE),
+ rec({error, {file_not_found, add_ext(File, 5)}}, ?LINE),
+ do_chunk([{open,File,1}, {chunk, 1, ["first round, 11"]},
+ {chunk, 2, ["first round, 12"]}, eof], wlt, ?LINE),
+ do_chunk([{open,File,4}, {chunk, 1, ["first round, 41"]},
+ {chunk, 2, ["first round, 42"]}, eof], wlt, ?LINE),
ok.
-wrap_filled(suite) -> [];
-wrap_filled(doc) -> ["First wrap, open, filled index file"];
+%% First wrap, open, filled index file.
wrap_filled(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = join(Dir, "sune.LOG"),
delete_files(File),
start(),
- ?line open(sune, File, ?LINE),
- ?line init_files(0),
- ?line log_terms(sune, ["second round, 11", "second round, 12"]),
- ?line sync(sune),
+ open(sune, File, ?LINE),
+ init_files(0),
+ log_terms(sune, ["second round, 11", "second round, 12"]),
+ sync(sune),
%% open
test_wrap(File),
- ?line close(sune),
+ close(sune),
%% closed
test_wrap(File),
@@ -267,103 +261,100 @@ wrap_filled(Conf) when is_list(Conf) ->
ok.
test_wrap(File) ->
- ?line do_chunk([{open,File},
- {chunk, ["first round, 21", "first round, 22"]},
- {chunk, ["first round, 31", "first round, 32"]},
- {chunk, ["first round, 41", "first round, 42"]},
- {chunk, ["second round, 11", "second round, 12"]},
- eof], wlt, ?LINE),
- ?line do_chunk([{open,File,1},
- {chunk, ["second round, 11", "second round, 12"]},
- eof], wlt, ?LINE),
- ?line do_chunk([{open,File,2},
- {chunk, ["first round, 21", "first round, 22"]},
- eof], wlt, ?LINE),
+ do_chunk([{open,File},
+ {chunk, ["first round, 21", "first round, 22"]},
+ {chunk, ["first round, 31", "first round, 32"]},
+ {chunk, ["first round, 41", "first round, 42"]},
+ {chunk, ["second round, 11", "second round, 12"]},
+ eof], wlt, ?LINE),
+ do_chunk([{open,File,1},
+ {chunk, ["second round, 11", "second round, 12"]},
+ eof], wlt, ?LINE),
+ do_chunk([{open,File,2},
+ {chunk, ["first round, 21", "first round, 22"]},
+ eof], wlt, ?LINE),
wlt ! {open, self(), File, 5},
- ?line rec({error, {file_not_found, add_ext(File, 5)}}, ?LINE),
- ?line do_chunk([{open,File,1}, {chunk, 1, ["second round, 11"]},
- {chunk, 2, ["second round, 12"]}, eof], wlt, ?LINE),
- ?line do_chunk([{open,File,4}, {chunk, 1, ["first round, 41"]},
- {chunk, 2, ["first round, 42"]}, eof], wlt, ?LINE),
+ rec({error, {file_not_found, add_ext(File, 5)}}, ?LINE),
+ do_chunk([{open,File,1}, {chunk, 1, ["second round, 11"]},
+ {chunk, 2, ["second round, 12"]}, eof], wlt, ?LINE),
+ do_chunk([{open,File,4}, {chunk, 1, ["first round, 41"]},
+ {chunk, 2, ["first round, 42"]}, eof], wlt, ?LINE),
ok.
-wrapping(suite) -> [];
-wrapping(doc) -> ["Wrapping at the same time as reading"];
+%% Wrapping at the same time as reading.
wrapping(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = join(Dir, "sune.LOG"),
delete_files(File),
start(),
- ?line open(sune, File, ?LINE),
- ?line init_files(1100),
- ?line sync(sune),
- ?line C1 =
+ open(sune, File, ?LINE),
+ init_files(1100),
+ sync(sune),
+ C1 =
do_chunk([{open,File}, {chunk, 1, ["first round, 11"]}], wlt, ?LINE),
- ?line log_terms(sune, ["second round, 11", "second round, 12"]),
- ?line sync(sune),
- ?line do_chunk([{chunk, 1, ["first round, 12"]},
- %% Here two bad bytes are found.
- {chunk, ["first round, 21", "first round, 22"]},
- {chunk, ["first round, 31", "first round, 32"]},
- {chunk, ["first round, 41", "first round, 42"]}, eof],
- wlt, ?LINE, C1),
+ log_terms(sune, ["second round, 11", "second round, 12"]),
+ sync(sune),
+ do_chunk([{chunk, 1, ["first round, 12"]},
+ %% Here two bad bytes are found.
+ {chunk, ["first round, 21", "first round, 22"]},
+ {chunk, ["first round, 31", "first round, 32"]},
+ {chunk, ["first round, 41", "first round, 42"]}, eof],
+ wlt, ?LINE, C1),
start(),
delete_files(File),
- ?line open(sune, File, ?LINE),
- ?line init_files(1100),
- ?line sync(sune),
- ?line C2 =
+ open(sune, File, ?LINE),
+ init_files(1100),
+ sync(sune),
+ C2 =
do_chunk([{open,File}, {chunk, 1, ["first round, 11"]}], wlt, ?LINE),
- ?line log_terms(sune, ["second round, 11", "second round, 12"]),
- ?line close(sune),
- ?line do_chunk([{chunk, 1, ["first round, 12"]},
- %% Here two bad bytes are found.
- {chunk, ["first round, 21", "first round, 22"]},
- {chunk, ["first round, 31", "first round, 32"]},
- {chunk, ["first round, 41", "first round, 42"]}, eof],
- wlt, ?LINE, C2),
+ log_terms(sune, ["second round, 11", "second round, 12"]),
+ close(sune),
+ do_chunk([{chunk, 1, ["first round, 12"]},
+ %% Here two bad bytes are found.
+ {chunk, ["first round, 21", "first round, 22"]},
+ {chunk, ["first round, 31", "first round, 32"]},
+ {chunk, ["first round, 41", "first round, 42"]}, eof],
+ wlt, ?LINE, C2),
start(),
delete_files(File),
- ?line open(sune, File, ?LINE),
- ?line init_files(1100),
- ?line sync(sune),
- ?line C3 = do_chunk([{open,File}], wlt, ?LINE),
- ?line log_terms(sune, ["second round, 11"]),
- ?line sync(sune),
- ?line do_chunk([{chunk, 1, ["second round, 11"]},
- {chunk, 1, ["first round, 21"]},
- {chunk, 1, ["first round, 22"]},
- {chunk, ["first round, 31", "first round, 32"]},
- {chunk, ["first round, 41", "first round, 42"]}, eof],
- wlt, ?LINE, C3),
+ open(sune, File, ?LINE),
+ init_files(1100),
+ sync(sune),
+ C3 = do_chunk([{open,File}], wlt, ?LINE),
+ log_terms(sune, ["second round, 11"]),
+ sync(sune),
+ do_chunk([{chunk, 1, ["second round, 11"]},
+ {chunk, 1, ["first round, 21"]},
+ {chunk, 1, ["first round, 22"]},
+ {chunk, ["first round, 31", "first round, 32"]},
+ {chunk, ["first round, 41", "first round, 42"]}, eof],
+ wlt, ?LINE, C3),
stop(),
delete_files(File),
ok.
-external(suite) -> [];
-external(doc) -> ["External format"];
+%% External format.
external(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = join(Dir, "sune.LOG"),
delete_files(File),
start(),
- ?line open_ext(sune, File, ?FILE),
- ?line init_files_ext(0),
- ?line close(sune),
+ open_ext(sune, File, ?FILE),
+ init_files_ext(0),
+ close(sune),
P0 = pps(),
wlt ! {open, self(), File},
- ?line rec({error, {not_a_log_file, add_ext(File, 1)}}, ?LINE),
- ?line true = (P0 == pps()),
+ rec({error, {not_a_log_file, add_ext(File, 1)}}, ?LINE),
+ true = (P0 == pps()),
stop(),
delete_files(File),
ok.
-error(suite) -> [];
-error(doc) -> ["Error situations"];
+%% Error situations.
error(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
File = join(Dir, "sune.LOG"),
@@ -372,69 +363,69 @@ error(Conf) when is_list(Conf) ->
P0 = pps(),
wlt ! {open, self(), File, 1},
- ?line rec({error, {index_file_not_found, File}}, ?LINE),
+ rec({error, {index_file_not_found, File}}, ?LINE),
wlt ! {open, self(), File},
- ?line rec({error, {index_file_not_found, File}}, ?LINE),
- ?line true = (P0 == pps()),
+ rec({error, {index_file_not_found, File}}, ?LINE),
+ true = (P0 == pps()),
- ?line open(sune, File, ?LINE),
- ?line close(sune),
+ open(sune, File, ?LINE),
+ close(sune),
P1 = pps(),
- ?line First = add_ext(File, 1),
- ?line ok = file:delete(First),
+ First = add_ext(File, 1),
+ ok = file:delete(First),
wlt ! {open, self(), File},
- ?line rec({error, {not_a_log_file, First}}, ?LINE),
- ?line true = (P1 == pps()),
+ rec({error, {not_a_log_file, First}}, ?LINE),
+ true = (P1 == pps()),
delete_files(File),
- ?line open(sune, File, ?LINE),
- ?line init_files(0),
- ?line close(sune),
+ open(sune, File, ?LINE),
+ init_files(0),
+ close(sune),
P2 = pps(),
- ?line C = do_chunk([{open,File},
- {chunk, ["first round, 11", "first round, 12"]}],
- wlt, ?LINE),
- ?line Second = add_ext(File, 2),
- ?line ok = file:delete(Second),
+ C = do_chunk([{open,File},
+ {chunk, ["first round, 11", "first round, 12"]}],
+ wlt, ?LINE),
+ Second = add_ext(File, 2),
+ ok = file:delete(Second),
wlt ! {chunk, self(), C},
- ?line rec({error, {file_error, Second, {error, enoent}}}, ?LINE),
- ?line ok = file:write_file(Second, <<17:(3*8)>>), % three bytes
+ rec({error, {file_error, Second, {error, enoent}}}, ?LINE),
+ ok = file:write_file(Second, <<17:(3*8)>>), % three bytes
wlt ! {chunk, self(), C},
- ?line rec({error, {not_a_log_file, Second}}, ?LINE),
- ?line do_chunk([close], wlt, ?LINE, C),
- ?line true = (P2 == pps()),
+ rec({error, {not_a_log_file, Second}}, ?LINE),
+ do_chunk([close], wlt, ?LINE, C),
+ true = (P2 == pps()),
delete_files(File),
- ?line open(sune, File, ?LINE),
- ?line init_files(0),
- ?line close(sune),
+ open(sune, File, ?LINE),
+ init_files(0),
+ close(sune),
P3 = pps(),
timer:sleep(1100),
Now = calendar:local_time(),
- ?line ok = file:change_time(First, Now),
- ?line C2 = do_chunk([{open,File},
- {chunk, ["first round, 11", "first round, 12"]}],
- wlt, ?LINE),
+ ok = file:change_time(First, Now),
+ C2 = do_chunk([{open,File},
+ {chunk, ["first round, 11", "first round, 12"]}],
+ wlt, ?LINE),
wlt ! {chunk, self(), C2},
- ?line rec({error,{is_wrapped,First}}, ?LINE),
- ?line do_chunk([close], wlt, ?LINE, C2),
+ rec({error,{is_wrapped,First}}, ?LINE),
+ do_chunk([close], wlt, ?LINE, C2),
IndexFile = add_ext(File, idx),
- ?line ok = file:write_file(IndexFile, <<17:(3*8)>>),
+ ok = file:write_file(IndexFile, <<17:(3*8)>>),
wlt ! {open, self(), File, 1},
- ?line rec({error, {index_file_not_found, File}}, ?LINE),
- ?line true = (P3 == pps()),
+ rec({error, {index_file_not_found, File}}, ?LINE),
+ true = (P3 == pps()),
stop(),
delete_files(File),
ok.
start() ->
- ?line ok = wrap_log_test:stop(),
+ ok = wrap_log_test:stop(),
dl_wait(),
- ?line ok = wrap_log_test:init().
+ ok = wrap_log_test:init().
stop() ->
- ?line ok = wrap_log_test:stop(),
+ ok = wrap_log_test:stop(),
dl_wait().
%% Give disk logs opened by 'logger' and 'wlt' time to close after
@@ -458,24 +449,24 @@ delete_files(File) ->
ok.
init_files(Delay) ->
- ?line log_terms(sune, ["first round, 11", "first round, 12"]),
+ log_terms(sune, ["first round, 11", "first round, 12"]),
timer:sleep(Delay),
- ?line log_terms(sune, ["first round, 21", "first round, 22"]),
+ log_terms(sune, ["first round, 21", "first round, 22"]),
timer:sleep(Delay),
- ?line log_terms(sune, ["first round, 31", "first round, 32"]),
+ log_terms(sune, ["first round, 31", "first round, 32"]),
timer:sleep(Delay),
- ?line log_terms(sune, ["first round, 41", "first round, 42"]),
+ log_terms(sune, ["first round, 41", "first round, 42"]),
timer:sleep(Delay),
ok.
init_files_ext(Delay) ->
- ?line blog_terms(sune, ["first round, 11", "first round, 12"]),
+ blog_terms(sune, ["first round, 11", "first round, 12"]),
timer:sleep(Delay),
- ?line blog_terms(sune, ["first round, 21", "first round, 22"]),
+ blog_terms(sune, ["first round, 21", "first round, 22"]),
timer:sleep(Delay),
- ?line blog_terms(sune, ["first round, 31", "first round, 32"]),
+ blog_terms(sune, ["first round, 31", "first round, 32"]),
timer:sleep(Delay),
- ?line blog_terms(sune, ["first round, 41", "first round, 42"]),
+ blog_terms(sune, ["first round, 41", "first round, 42"]),
timer:sleep(Delay),
ok.
@@ -487,27 +478,27 @@ do_chunk(Commands, Server, Where) ->
do_chunk([{open, File, One} | Cs], S, W, _C) ->
S ! {open, self(), File, One},
- ?line NC = rec1(ok, {W,?LINE}),
+ NC = rec1(ok, {W,?LINE}),
do_chunk(Cs, S, W, NC);
do_chunk([{open, File} | Cs], S, W, _C) ->
S ! {open, self(), File},
- ?line NC = rec1(ok, {W,?LINE}),
+ NC = rec1(ok, {W,?LINE}),
do_chunk(Cs, S, W, NC);
do_chunk([{chunk, Terms} | Cs], S, W, C) ->
S ! {chunk, self(), C},
- ?line NC = rec2(Terms, {W,?LINE}),
+ NC = rec2(Terms, {W,?LINE}),
do_chunk(Cs, S, W, NC);
do_chunk([{chunk, N, Terms} | Cs], S, W, C) ->
S ! {chunk, self(), C, N},
- ?line NC = rec2(Terms, {W,?LINE}),
+ NC = rec2(Terms, {W,?LINE}),
do_chunk(Cs, S, W, NC);
do_chunk([eof], S, W, C) ->
S ! {chunk, self(), C},
- ?line C1 = rec2(eof, {W,?LINE}),
+ C1 = rec2(eof, {W,?LINE}),
do_chunk([close], S, W, C1);
do_chunk([close], S, W, C) ->
S ! {close, self(), C},
- ?line rec(ok, {W,?LINE});
+ rec(ok, {W,?LINE});
do_chunk([], _S, _W, C) ->
C.
@@ -542,24 +533,24 @@ blog_terms(File, Terms) ->
rec1(M, Where) ->
receive
{M, C} -> C;
- Else -> test_server:fail({error, {Where, Else}})
- after 1000 -> test_server:fail({error, {Where, time_out}})
+ Else -> ct:fail({error, {Where, Else}})
+ after 1000 -> ct:fail({error, {Where, time_out}})
end.
rec2(M, Where) ->
receive
{C, M} -> C;
- Else -> test_server:fail({error, {Where, Else}})
- after 1000 -> test_server:fail({error, {Where, time_out}})
+ Else -> ct:fail({error, {Where, Else}})
+ after 1000 -> ct:fail({error, {Where, time_out}})
end.
rec(M, Where) ->
receive
M ->
ok;
- Else -> ?t:fail({error, {Where, Else}})
- after 5000 -> ?t:fail({error, {Where, time_out}})
+ Else -> ct:fail({error, {Where, Else}})
+ after 5000 -> ct:fail({error, {Where, time_out}})
end.
-
+
pps() ->
{erlang:ports(), lists:filter(fun erlang:is_process_alive/1, processes())}.
diff --git a/lib/kernel/test/wrap_log_reader_SUITE_data/wrap_log_test.erl b/lib/kernel/test/wrap_log_reader_SUITE_data/wrap_log_test.erl
index 1cd1a4b0a4..38449b6bb3 100644
--- a/lib/kernel/test/wrap_log_reader_SUITE_data/wrap_log_test.erl
+++ b/lib/kernel/test/wrap_log_reader_SUITE_data/wrap_log_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/kernel/test/zlib_SUITE.erl b/lib/kernel/test/zlib_SUITE.erl
index 6aaa024a82..f8257bd20c 100644
--- a/lib/kernel/test/zlib_SUITE.erl
+++ b/lib/kernel/test/zlib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
-module(zlib_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile(export_all).
@@ -47,11 +47,10 @@
-define(DATA_ERROR, {'EXIT',{data_error,[{zlib,_,_,_}|_]}}).
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ Config.
+
+end_per_testcase(_Func, _Config) ->
+ ok.
error(Format, Args, File, Line) ->
io:format("~p:~p: ERROR: " ++ Format, [File,Line|Args]),
@@ -70,7 +69,9 @@ error(Format, Args, File, Line) ->
%% end,
%% log("<>ERROR<>~n" ++ Format, Args, File, Line).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[{group, api}, {group, examples}, {group, func}, smp,
@@ -106,80 +107,78 @@ end_per_group(_GroupName, Config) ->
-api_open_close(doc) -> "Test open/0 and close/1";
-api_open_close(suite) -> [];
+%% Test open/0 and close/1.
api_open_close(Config) when is_list(Config) ->
- ?line Fd1 = zlib:open(),
- ?line Fd2 = zlib:open(),
+ Fd1 = zlib:open(),
+ Fd2 = zlib:open(),
?m(false,Fd1 == Fd2),
?m(ok,zlib:close(Fd1)),
?m(?BARG, zlib:close(Fd1)),
?m(ok,zlib:close(Fd2)),
-
+
%% Make sure that we don't get any EXIT messages if trap_exit is enabled.
- ?line process_flag(trap_exit, true),
- ?line Fd3 = zlib:open(),
+ process_flag(trap_exit, true),
+ Fd3 = zlib:open(),
?m(ok,zlib:close(Fd3)),
receive
- Any -> ?line ?t:fail({unexpected_message,Any})
+ Any -> ct:fail({unexpected_message,Any})
after 10 -> ok
end.
-api_deflateInit(doc) -> "Test deflateInit/2 and /6";
-api_deflateInit(suite) -> [];
+%% Test deflateInit/2 and /6.
api_deflateInit(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(?BARG, zlib:deflateInit(gurka, none)),
?m(?BARG, zlib:deflateInit(gurka, gurka)),
?m(?BARG, zlib:deflateInit(Z1, gurka)),
Levels = [none, default, best_speed, best_compression] ++ lists:seq(0,9),
lists:foreach(fun(Level) ->
- ?line Z = zlib:open(),
+ Z = zlib:open(),
?m(ok, zlib:deflateInit(Z, Level)),
?m(ok,zlib:close(Z))
end, Levels),
%% /6
?m(?BARG, zlib:deflateInit(Z1,gurka,deflated,-15,8,default)),
-
+
?m(?BARG, zlib:deflateInit(Z1,default,undefined,-15,8,default)),
-
+
?m(?BARG, zlib:deflateInit(Z1,default,deflated,48,8,default)),
?m(?BARG, zlib:deflateInit(Z1,default,deflated,-20,8,default)),
?m(?BARG, zlib:deflateInit(Z1,default,deflated,-7,8,default)),
?m(?BARG, zlib:deflateInit(Z1,default,deflated,7,8,default)),
-
+
?m(?BARG, zlib:deflateInit(Z1,default,deflated,-15,0,default)),
?m(?BARG, zlib:deflateInit(Z1,default,deflated,-15,10,default)),
-
+
?m(?BARG, zlib:deflateInit(Z1,default,deflated,-15,8,0)),
?m(?BARG, zlib:deflateInit(Z1,default,deflated,-15,8,undefined)),
-
+
lists:foreach(fun(Level) ->
- ?line Z = zlib:open(),
+ Z = zlib:open(),
?m(ok, zlib:deflateInit(Z, Level, deflated, -15, 8, default)),
?m(ok,zlib:close(Z))
end, Levels),
-
+
lists:foreach(fun(Wbits) ->
- ?line Z11 = zlib:open(),
+ Z11 = zlib:open(),
?m(ok, zlib:deflateInit(Z11,best_compression,deflated,
Wbits,8,default)),
- ?line Z12 = zlib:open(),
+ Z12 = zlib:open(),
?m(ok, zlib:deflateInit(Z12,default,deflated,-Wbits,8,default)),
?m(ok,zlib:close(Z11)),
?m(ok,zlib:close(Z12))
end, lists:seq(8, 15)),
-
+
lists:foreach(fun(MemLevel) ->
- ?line Z = zlib:open(),
+ Z = zlib:open(),
?m(ok, zlib:deflateInit(Z,default,deflated,-15,
MemLevel,default)),
?m(ok,zlib:close(Z))
end, lists:seq(1,8)),
-
+
Strategies = [filtered,huffman_only,rle,default],
lists:foreach(fun(Strategy) ->
- ?line Z = zlib:open(),
+ Z = zlib:open(),
?m(ok, zlib:deflateInit(Z,best_speed,deflated,-15,8,Strategy)),
?m(ok,zlib:close(Z))
end, Strategies),
@@ -187,10 +186,9 @@ api_deflateInit(Config) when is_list(Config) ->
?m({'EXIT',_}, zlib:deflateInit(Z1,none,deflated,-15,8,default)), %% ??
?m(ok, zlib:close(Z1)).
-api_deflateSetDictionary(doc) -> "Test deflateSetDictionary";
-api_deflateSetDictionary(suite) -> [];
+%% Test deflateSetDictionary.
api_deflateSetDictionary(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:deflateInit(Z1, default)),
?m(Id when is_integer(Id), zlib:deflateSetDictionary(Z1, <<1,1,2,3,4,5,1>>)),
?m(Id when is_integer(Id), zlib:deflateSetDictionary(Z1, [1,1,2,3,4,5,1])),
@@ -200,10 +198,9 @@ api_deflateSetDictionary(Config) when is_list(Config) ->
?m({'EXIT',{stream_error,_}},zlib:deflateSetDictionary(Z1,<<1,1,2,3,4,5,1>>)),
?m(ok, zlib:close(Z1)).
-api_deflateReset(doc) -> "Test deflateReset";
-api_deflateReset(suite) -> [];
+%% Test deflateReset.
api_deflateReset(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:deflateInit(Z1, default)),
?m(_, zlib:deflate(Z1, <<1,1,1,1,1,1,1,1,1>>, none)),
?m(ok, zlib:deflateReset(Z1)),
@@ -211,20 +208,18 @@ api_deflateReset(Config) when is_list(Config) ->
%% FIXME how do I make this go wrong??
?m(ok, zlib:close(Z1)).
-api_deflateParams(doc) -> "Test deflateParams";
-api_deflateParams(suite) -> [];
+%% Test deflateParams.
api_deflateParams(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:deflateInit(Z1, default)),
?m(_, zlib:deflate(Z1, <<1,1,1,1,1,1,1,1,1>>, none)),
?m(ok, zlib:deflateParams(Z1, best_compression, huffman_only)),
?m(_, zlib:deflate(Z1, <<1,1,1,1,1,1,1,1,1>>, sync)),
?m(ok, zlib:close(Z1)).
-api_deflate(doc) -> "Test deflate";
-api_deflate(suite) -> [];
+%% Test deflate.
api_deflate(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:deflateInit(Z1, default)),
?m([B] when is_binary(B), zlib:deflate(Z1, <<1,1,1,1,1,1,1,1,1>>, finish)),
?m(ok, zlib:deflateReset(Z1)),
@@ -235,19 +230,18 @@ api_deflate(Config) when is_list(Config) ->
?m(B when is_list(B), zlib:deflate(Z1, <<1,1,1,1,1,1,1,1,1>>, sync)),
?m(B when is_list(B), zlib:deflate(Z1, <<1,1,1,1,1,1,1,1,1>>, full)),
?m(B when is_list(B), zlib:deflate(Z1, <<>>, finish)),
-
+
?m(?BARG, zlib:deflate(gurka, <<1,1,1,1,1,1,1,1,1>>, full)),
?m(?BARG, zlib:deflate(Z1, <<1,1,1,1,1,1,1,1,1>>, asdj)),
?m(?BARG, zlib:deflate(Z1, <<1,1,1,1,1,1,1,1,1>>, 198)),
%% Causes problems ERROR REPORT
?m(?BARG, zlib:deflate(Z1, [asdj,asd], none)),
-
+
?m(ok, zlib:close(Z1)).
-api_deflateEnd(doc) -> "Test deflateEnd";
-api_deflateEnd(suite) -> [];
+%% Test deflateEnd.
api_deflateEnd(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:deflateInit(Z1, default)),
?m(ok, zlib:deflateEnd(Z1)),
?m({'EXIT', {einval,_}}, zlib:deflateEnd(Z1)), %% ??
@@ -259,20 +253,19 @@ api_deflateEnd(Config) when is_list(Config) ->
?m(B when is_list(B), zlib:deflate(Z1, <<"Kilroy was here">>)),
?m(B when is_list(B), zlib:deflate(Z1, <<"Kilroy was here">>, finish)),
?m(ok, zlib:deflateEnd(Z1)),
-
+
?m(ok, zlib:close(Z1)).
-api_inflateInit(doc) -> "Test inflateInit /1 and /2";
-api_inflateInit(suite) -> [];
+%% Test inflateInit /1 and /2.
api_inflateInit(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(?BARG, zlib:inflateInit(gurka)),
?m(ok, zlib:inflateInit(Z1)),
?m({'EXIT',{einval,_}}, zlib:inflateInit(Z1, 15)), %% ??
lists:foreach(fun(Wbits) ->
- ?line Z11 = zlib:open(),
+ Z11 = zlib:open(),
?m(ok, zlib:inflateInit(Z11,Wbits)),
- ?line Z12 = zlib:open(),
+ Z12 = zlib:open(),
?m(ok, zlib:inflateInit(Z12,-Wbits)),
?m(ok,zlib:close(Z11)),
?m(ok,zlib:close(Z12))
@@ -284,10 +277,9 @@ api_inflateInit(Config) when is_list(Config) ->
?m(?BARG, zlib:inflateInit(Z1, -16)),
?m(ok, zlib:close(Z1)).
-api_inflateSetDictionary(doc) -> "Test inflateSetDictionary";
-api_inflateSetDictionary(suite) -> [];
+%% Test inflateSetDictionary.
api_inflateSetDictionary(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:inflateInit(Z1)),
?m(?BARG, zlib:inflateSetDictionary(gurka,<<1,1,1,1,1>>)),
?m(?BARG, zlib:inflateSetDictionary(Z1,102)),
@@ -296,27 +288,26 @@ api_inflateSetDictionary(Config) when is_list(Config) ->
?m({'EXIT',{stream_error,_}}, zlib:inflateSetDictionary(Z1,Dict)),
?m(ok, zlib:close(Z1)).
-api_inflateSync(doc) -> "Test inflateSync";
-api_inflateSync(suite) -> [];
+%% Test inflateSync.
api_inflateSync(Config) when is_list(Config) ->
{skip,"inflateSync/1 sucks"}.
-%% ?line Z1 = zlib:open(),
+%% Z1 = zlib:open(),
%% ?m(ok, zlib:deflateInit(Z1)),
-%% ?line B1list0 = zlib:deflate(Z1, "gurkan gurra ger galna tunnor", full),
-%% ?line B2 = zlib:deflate(Z1, "grodan boll", finish),
+%% B1list0 = zlib:deflate(Z1, "gurkan gurra ger galna tunnor", full),
+%% B2 = zlib:deflate(Z1, "grodan boll", finish),
%% io:format("~p\n", [B1list0]),
%% io:format("~p\n", [B2]),
%% ?m(ok, zlib:deflateEnd(Z1)),
-%% ?line B1 = clobber(14, list_to_binary(B1list0)),
-%% ?line Compressed = list_to_binary([B1,B2]),
-%% ?line io:format("~p\n", [Compressed]),
+%% B1 = clobber(14, list_to_binary(B1list0)),
+%% Compressed = list_to_binary([B1,B2]),
+%% io:format("~p\n", [Compressed]),
%% ?m(ok, zlib:inflateInit(Z1)),
%% ?m(?BARG, zlib:inflateSync(gurka)),
%% ?m({'EXIT',{data_error,_}}, zlib:inflate(Z1, Compressed)),
%% ?m(ok, zlib:inflateSync(Z1)),
-%% ?line Ubs = zlib:inflate(Z1, []),
-%% ?line <<"grodan boll">> = list_to_binary(Ubs),
+%% Ubs = zlib:inflate(Z1, []),
+%% <<"grodan boll">> = list_to_binary(Ubs),
%% ?m(ok, zlib:close(Z1)).
clobber(N, Bin) when is_binary(Bin) ->
@@ -327,21 +318,19 @@ clobber(N, Bin) when is_binary(Bin) ->
end,
list_to_binary(tuple_to_list(setelement(N, T, Byte))).
-api_inflateReset(doc) -> "Test inflateReset";
-api_inflateReset(suite) -> [];
+%% Test inflateReset.
api_inflateReset(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:inflateInit(Z1)),
?m(?BARG, zlib:inflateReset(gurka)),
?m(ok, zlib:inflateReset(Z1)),
?m(ok, zlib:close(Z1)).
-api_inflate(doc) -> "Test inflate";
-api_inflate(suite) -> [];
+%% Test inflate.
api_inflate(Config) when is_list(Config) ->
Data = [<<1,2,2,3,3,3,4,4,4,4>>],
- ?line Compressed = zlib:compress(Data),
- ?line Z1 = zlib:open(),
+ Compressed = zlib:compress(Data),
+ Z1 = zlib:open(),
?m(ok, zlib:inflateInit(Z1)),
?m([], zlib:inflate(Z1, <<>>)),
?m(Data, zlib:inflate(Z1, Compressed)),
@@ -356,17 +345,16 @@ api_inflate(Config) when is_list(Config) ->
?m({'EXIT',{data_error,_}}, zlib:inflate(Z1, <<2,1,2,1,2>>)),
?m(ok, zlib:close(Z1)).
-api_inflateChunk(doc) -> "Test inflateChunk";
-api_inflateChunk(suite) -> [];
+%% Test inflateChunk.
api_inflateChunk(Config) when is_list(Config) ->
ChunkSize = 1024,
Data = << <<(I rem 150)>> || I <- lists:seq(1, 3 * ChunkSize) >>,
Part1 = binary:part(Data, 0, ChunkSize),
Part2 = binary:part(Data, ChunkSize, ChunkSize),
Part3 = binary:part(Data, ChunkSize * 2, ChunkSize),
- ?line Compressed = zlib:compress(Data),
- ?line Z1 = zlib:open(),
- ?line zlib:setBufSize(Z1, ChunkSize),
+ Compressed = zlib:compress(Data),
+ Z1 = zlib:open(),
+ zlib:setBufSize(Z1, ChunkSize),
?m(ok, zlib:inflateInit(Z1)),
?m([], zlib:inflateChunk(Z1, <<>>)),
?m({more, Part1}, zlib:inflateChunk(Z1, Compressed)),
@@ -379,7 +367,7 @@ api_inflateChunk(Config) when is_list(Config) ->
?m(ok, zlib:inflateReset(Z1)),
- ?line zlib:setBufSize(Z1, size(Data)),
+ zlib:setBufSize(Z1, size(Data)),
?m(Data, zlib:inflateChunk(Z1, Compressed)),
?m(ok, zlib:inflateEnd(Z1)),
@@ -389,10 +377,9 @@ api_inflateChunk(Config) when is_list(Config) ->
?m({'EXIT',{data_error,_}}, zlib:inflateEnd(Z1)),
?m(ok, zlib:close(Z1)).
-api_inflateEnd(doc) -> "Test inflateEnd";
-api_inflateEnd(suite) -> [];
+%% Test inflateEnd.
api_inflateEnd(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m({'EXIT',{einval,_}}, zlib:inflateEnd(Z1)),
?m(ok, zlib:inflateInit(Z1)),
?m(?BARG, zlib:inflateEnd(gurka)),
@@ -403,18 +390,16 @@ api_inflateEnd(Config) when is_list(Config) ->
?m(ok, zlib:inflateEnd(Z1)),
?m(ok, zlib:close(Z1)).
-api_getBufsz(doc) -> "Test getBufsz";
-api_getBufsz(suite) -> [];
+%% Test getBufsz.
api_getBufsz(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(Val when is_integer(Val), zlib:getBufSize(Z1)),
?m(?BARG, zlib:getBufSize(gurka)),
?m(ok, zlib:close(Z1)).
-api_setBufsz(doc) -> "Test setBufsz";
-api_setBufsz(suite) -> [];
+%% Test setBufsz.
api_setBufsz(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(?BARG, zlib:setBufSize(Z1, gurka)),
?m(?BARG, zlib:setBufSize(gurka, 1232330)),
Sz = ?m( Val when is_integer(Val), zlib:getBufSize(Z1)),
@@ -424,25 +409,23 @@ api_setBufsz(Config) when is_list(Config) ->
?m(ok, zlib:close(Z1)).
%%% Debug function ??
-api_getQSize(doc) -> "Test getQSize";
-api_getQSize(suite) -> [];
+%% Test getQSize.
api_getQSize(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
Q = ?m(Val when is_integer(Val), zlib:getQSize(Z1)),
io:format("QSize ~p ~n", [Q]),
?m(?BARG, zlib:getQSize(gurka)),
?m(ok, zlib:close(Z1)).
-api_crc32(doc) -> "Test crc32";
-api_crc32(suite) -> [];
+%% Test crc32.
api_crc32(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:deflateInit(Z1,best_speed,deflated,-15,8,default)),
Bin = <<1,1,1,1,1,1,1,1,1>>,
Compressed1 = ?m(_, zlib:deflate(Z1, Bin, none)),
Compressed2 = ?m(_, zlib:deflate(Z1, <<>>, finish)),
Compressed = list_to_binary(Compressed1 ++ Compressed2),
- CRC1 = ?m( CRC1 when is_integer(CRC1), zlib:crc32(Z1)),
+ CRC1 = ?m( CRC1 when is_integer(CRC1), zlib:crc32(Z1)),
?m(CRC1 when is_integer(CRC1), zlib:crc32(Z1,Bin)),
?m(CRC1 when is_integer(CRC1), zlib:crc32(Z1,binary_to_list(Bin))),
?m(CRC2 when is_integer(CRC2), zlib:crc32(Z1,Compressed)),
@@ -460,10 +443,9 @@ api_crc32(Config) when is_list(Config) ->
?m(ok, zlib:deflateEnd(Z1)),
?m(ok, zlib:close(Z1)).
-api_adler32(doc) -> "Test adler32";
-api_adler32(suite) -> [];
+%% Test adler32.
api_adler32(Config) when is_list(Config) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
?m(ok, zlib:deflateInit(Z1,best_speed,deflated,-15,8,default)),
Bin = <<1,1,1,1,1,1,1,1,1>>,
Compressed1 = ?m(_, zlib:deflate(Z1, Bin, none)),
@@ -484,12 +466,11 @@ api_adler32(Config) when is_list(Config) ->
?m(ok, zlib:deflateEnd(Z1)),
?m(ok, zlib:close(Z1)).
-api_un_compress(doc) -> "Test compress";
-api_un_compress(suite) -> [];
+%% Test compress.
api_un_compress(Config) when is_list(Config) ->
?m(?BARG,zlib:compress(not_a_binary)),
Bin = <<1,11,1,23,45>>,
- ?line Comp = zlib:compress(Bin),
+ Comp = zlib:compress(Bin),
?m(?BARG,zlib:uncompress(not_a_binary)),
?m({'EXIT',{data_error,_}}, zlib:uncompress(<<171,171,171,171,171>>)),
?m({'EXIT',{data_error,_}}, zlib:uncompress(<<>>)),
@@ -501,58 +482,40 @@ api_un_compress(Config) when is_list(Config) ->
?m(Bin, zlib:uncompress(binary_to_list(Comp))),
?m(Bin, zlib:uncompress(Comp)).
-api_un_zip(doc) -> "Test zip";
-api_un_zip(suite) -> [];
+%% Test zip.
api_un_zip(Config) when is_list(Config) ->
?m(?BARG,zlib:zip(not_a_binary)),
Bin = <<1,11,1,23,45>>,
- ?line Comp = zlib:zip(Bin),
+ Comp = zlib:zip(Bin),
?m(Comp, zlib:zip(binary_to_list(Bin))),
?m(?BARG,zlib:unzip(not_a_binary)),
?m({'EXIT',{data_error,_}}, zlib:unzip(<<171,171,171,171,171>>)),
?m({'EXIT',{data_error,_}}, zlib:unzip(<<>>)),
?m(Bin, zlib:unzip(Comp)),
?m(Bin, zlib:unzip(binary_to_list(Comp))),
-
+
%% OTP-6396
B = <<131,104,19,100,0,13,99,95,99,105,100,95,99,115,103,115,110,95,50,97,1,107,0,4,208,161,246,29,107,0,3,237,166,224,107,0,6,66,240,153,0,2,10,1,0,8,97,116,116,97,99,104,101,100,104,2,100,0,22,117,112,100,97,116,101,95,112,100,112,95,99,111,110,116,101,120,116,95,114,101,113,107,0,114,69,3,12,1,11,97,31,113,150,64,104,132,61,64,104,12,3,197,31,113,150,64,104,132,61,64,104,12,1,11,97,31,115,150,64,104,116,73,64,104,0,0,0,0,0,0,65,149,16,61,65,149,16,61,1,241,33,4,5,0,33,4,4,10,6,10,181,4,10,6,10,181,38,15,99,111,109,109,97,110,100,1,114,45,97,112,110,45,49,3,99,111,109,5,109,110,99,57,57,6,109,99,99,50,52,48,4,103,112,114,115,8,0,104,2,104,2,100,0,8,97,99,116,105,118,97,116,101,104,23,100,0,11,112,100,112,95,99,111,110,116,1,120,116,100,0,7,112,114,105,109,97,114,121,97,1,100,0,9,117,110,100,101,102,105,110,101,100,97,1,97,4,97,4,97,7,100,0,9,117,110,100,101,102,105,110,101,100,100,0,9,117,110,100,101,102,105,110,10100,100,0,9,117,110,100,101,102,105,110,101,100,100,0,5,102,97,108,115,101,100,0,9,117,110,100,101,102,105,110,101,100,100,0,9,117,110,100,101,102,105,110,101,100,100,0,9,117,110,100,101,102,105,1,101,100,97,0,100,0,9,117,110,100,101,102,105,110,101,100,107,0,4,16,0,1,144,107,0,4,61,139,186,181,107,0,4,10,8,201,49,100,0,9,117,110,100,101,102,105,110,101,100,100,0,9,117,110,100,101,102,105,0,101,100,100,0,9,117,110,100,101,102,105,110,101,100,104,2,104,3,98,0,0,7,214,97,11,97,20,104,3,97,17,97,16,97,21,106,108,0,0,0,3,104,2,97,1,104,2,104,3,98,0,0,7,214,97,11,97,20,104,3,97,17,97,167,20,104,2,97,4,104,2,104,3,98,0,0,7,214,97,11,97,20,104,3,97,17,97,16,97,21,104,2,97,10,104,2,104,3,98,0,0,7,214,97,11,97,20,104,3,97,17,97,16,97,26,106,100,0,5,118,101,114,57,57,100,0,9,117,110,0,101,102,105,110,101,100,107,0,2,0,244,107,0,4,10,6,102,195,107,0,4,10,6,102,195,100,0,9,117,110,100,101,102,105,110,101,100,100,0,9,117,110,100,101,102,105,110,101,100,107,0,125,248,143,0,203,25115,157,116,65,185,65,172,55,87,164,88,225,50,203,251,115,157,116,65,185,65,172,55,87,164,88,225,50,0,0,82,153,50,0,200,98,87,148,237,193,185,65,149,167,69,144,14,16,153,50,3,81,70,94,13,109,193,1,120,5,181,113,198,118,50,3,81,70,94,13,109,193,185,120,5,181,113,198,118,153,3,81,70,94,13,109,193,185,120,5,181,113,198,118,153,50,16,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,113,92,2,119,128,0,0,108,0,0,1,107,0,114,69,3,12,1,11,97,31,113,150,64,104,132,61,64,104,12,3,11,97,31,113,150,64,104,132,61,64,104,12,1,11,97,31,115,150,64,104,116,73,64,104,0,0,0,0,0,0,65,149,16,61,65,149,16,61,1,241,33,4,0,33,4,4,10,6,10,181,4,10,6,10,181,38,15,99,111,109,109,97,110,100,101,114,45,97,112,110,45,49,3,99,111,109,5,109,110,99,57,57,6,109,99,99,50,52,48,4,103,112,114,115,8,0,106>>,
Z = zlib:zip(B),
?m(B, zlib:unzip(Z)).
-%% api_g_un_zip_file(doc) -> "Test gunzip_file";
-%% api_g_un_zip_file(suite) -> [];
-%% api_g_un_zip_file(Config) when is_list(Config) ->
-%% ?line Out = conf(data_dir,Config),
-%% io:format("Using OutDir ~p ~n", [Out]),
-%% F = filename:join(Out,"testing1"),
-%% Data = <<1,1,255,255,255,1,1>>,
-%% ?m(ok, file:write_file(F,Data)),
-%% ?line Compressed = zlib:gzip_file(F),
-%% ?m(ok, file:write_file(F++".gz",Compressed)),
-%% ?m(Data, zlib:gunzip_file(F++".gz")),
-%% ?m({error,enoent}, zlib:gunzip_file(gurka)),
-%% ?m({error,enoent}, zlib:gzip_file(gurka)),
-%% ?m({error,what}, zlib:gunzip_file(F)),
-%% ?line ok.
-
-api_g_un_zip(doc) -> "Test gunzip";
-api_g_un_zip(suite) -> [];
+%% Test gunzip.
api_g_un_zip(Config) when is_list(Config) ->
?m(?BARG,zlib:gzip(not_a_binary)),
Bin = <<1,11,1,23,45>>,
- ?line Comp = zlib:gzip(Bin),
+ Comp = zlib:gzip(Bin),
?m(Comp, zlib:gzip(binary_to_list(Bin))),
?m(?BARG, zlib:gunzip(not_a_binary)),
?m(?DATA_ERROR, zlib:gunzip(<<171,171,171,171,171>>)),
?m(?DATA_ERROR, zlib:gunzip(<<>>)),
?m(Bin, zlib:gunzip(Comp)),
?m(Bin, zlib:gunzip(binary_to_list(Comp))),
-
+
%% Bad CRC; bad length.
BadCrc = bad_crc_data(),
- ?line ?m({'EXIT',{data_error,_}},(catch zlib:gunzip(BadCrc))),
+ ?m({'EXIT',{data_error,_}},(catch zlib:gunzip(BadCrc))),
BadLen = bad_len_data(),
- ?line ?m({'EXIT',{data_error,_}},(catch zlib:gunzip(BadLen))),
+ ?m({'EXIT',{data_error,_}},(catch zlib:gunzip(BadLen))),
ok.
bad_crc_data() ->
@@ -564,45 +527,42 @@ bad_len_data() ->
<<31,139,8,0,0,0,0,0,0,3,211,2,0,91,38,185,9,2,0,0,0>>.
-intro(suite) -> [];
-intro(doc) -> "";
intro(Config) when is_list(Config) ->
D = <<"This is a binary">>,
[put({ex, N}, <<"This is a binary">>) || N <- [0,1,2,3,4]],
put({ex, 5}, end_of_data),
put(ex,0),
- ?line Read = fun() ->
- N = get(ex),
- put(ex,N+1),
- get({ex,N})
- end,
-
- ?line Z = zlib:open(),
- ?line ok = zlib:deflateInit(Z,default),
-
- ?line Compress = fun(end_of_data, _Cont) -> [];
- (Data, Cont) ->
- [zlib:deflate(Z, Data)|Cont(Read(),Cont)]
- end,
- ?line Compressed = Compress(Read(),Compress),
- ?line Last = zlib:deflate(Z, [], finish),
- ?line ok = zlib:deflateEnd(Z),
- ?line zlib:close(Z),
- ?line Res = list_to_binary([Compressed|Last]),
+ Read = fun() ->
+ N = get(ex),
+ put(ex,N+1),
+ get({ex,N})
+ end,
+
+ Z = zlib:open(),
+ ok = zlib:deflateInit(Z,default),
+
+ Compress = fun(end_of_data, _Cont) -> [];
+ (Data, Cont) ->
+ [zlib:deflate(Z, Data)|Cont(Read(),Cont)]
+ end,
+ Compressed = Compress(Read(),Compress),
+ Last = zlib:deflate(Z, [], finish),
+ ok = zlib:deflateEnd(Z),
+ zlib:close(Z),
+ Res = list_to_binary([Compressed|Last]),
Orig = list_to_binary(lists:duplicate(5, D)),
?m(Orig, zlib:uncompress(Res)).
-large_deflate(doc) -> "Test deflate large file, which had a bug reported on erlang-bugs";
-large_deflate(suite) -> [];
+%% Test deflate large file, which had a bug reported on erlang-bugs.
large_deflate(Config) when is_list(Config) ->
large_deflate_do().
large_deflate_do() ->
- ?line Z = zlib:open(),
- ?line Plain = rand_bytes(zlib:getBufSize(Z)*5),
- ?line ok = zlib:deflateInit(Z),
- ?line _ZlibHeader = zlib:deflate(Z, [], full),
- ?line Deflated = zlib:deflate(Z, Plain, full),
+ Z = zlib:open(),
+ Plain = rand_bytes(zlib:getBufSize(Z)*5),
+ ok = zlib:deflateInit(Z),
+ _ZlibHeader = zlib:deflate(Z, [], full),
+ Deflated = zlib:deflate(Z, Plain, full),
?m(ok, zlib:close(Z)),
?m(Plain, zlib:unzip(list_to_binary([Deflated, 3, 0]))).
@@ -617,23 +577,22 @@ rand_bytes(Bin, Sz) ->
rand_bytes(<<(erlang:md5(Bin))/binary, Bin/binary>>, Sz).
-zip_usage(doc) -> "Test a standard compressed zip file";
-zip_usage(suite) -> [];
+%% Test a standard compressed zip file.
zip_usage(Config) when is_list(Config) ->
zip_usage(zip_usage({get_arg,Config}));
zip_usage({get_arg,Config}) ->
- ?line Out = conf(data_dir,Config),
- ?line {ok,ZIP} = file:read_file(filename:join(Out,"zipdoc.zip")),
- ?line {ok,ORIG} = file:read_file(filename:join(Out,"zipdoc")),
+ Out = conf(data_dir,Config),
+ {ok,ZIP} = file:read_file(filename:join(Out,"zipdoc.zip")),
+ {ok,ORIG} = file:read_file(filename:join(Out,"zipdoc")),
{run,ZIP,ORIG};
zip_usage({run,ZIP,ORIG}) ->
- ?line <<_:14/binary, CRC:32/little,
- CompSz:32/little, UnCompSz:32/little,_:31/binary,
- Compressed:CompSz/binary, _/binary>> = ZIP,
-
+ <<_:14/binary, CRC:32/little,
+ CompSz:32/little, UnCompSz:32/little,_:31/binary,
+ Compressed:CompSz/binary, _/binary>> = ZIP,
+
%%io:format("CRC ~p CSz ~p UnCSz ~p ~n", [CRC,CompSz,UnCompSz]),
- ?line Split = split_bin(Compressed,[]),
- ?line Z = zlib:open(),
+ Split = split_bin(Compressed,[]),
+ Z = zlib:open(),
?m(ok, zlib:inflateInit(Z, -15)),
Bs = [zlib:inflate(Z, Part) || Part <- Split],
@@ -643,86 +602,84 @@ zip_usage({run,ZIP,ORIG}) ->
?m(true, zlib:crc32(Z,UC0) == zlib:crc32(Z,ORIG)),
?m(ok, zlib:inflateEnd(Z)),
- ?line UC1 = zlib:unzip(Compressed),
+ UC1 = zlib:unzip(Compressed),
?m(UnCompSz, byte_size(UC1)),
?m(true, zlib:crc32(Z,UC1) == zlib:crc32(Z,ORIG)),
-
+
?m(ok, zlib:inflateInit(Z, -15)),
- ?line UC2 = zlib:inflate(Z, Compressed),
+ UC2 = zlib:inflate(Z, Compressed),
?m(UnCompSz, byte_size(list_to_binary(UC2))),
?m(CRC, zlib:crc32(Z)),
?m(true, zlib:crc32(Z,UC2) == zlib:crc32(Z,ORIG)),
?m(ok, zlib:inflateEnd(Z)),
-
+
?m(ok, zlib:inflateInit(Z, -15)),
- ?line UC3 = zlib:inflate(Z, Split), % Test multivec.
+ UC3 = zlib:inflate(Z, Split), % Test multivec.
?m(UnCompSz, byte_size(list_to_binary(UC3))),
?m(true, zlib:crc32(Z,UC3) == zlib:crc32(Z,ORIG)),
?m(CRC, zlib:crc32(Z)),
?m(ok, zlib:inflateEnd(Z)),
-
+
?m(ok, zlib:inflateInit(Z, -15)),
?m(ok, zlib:setBufSize(Z, UnCompSz *2)),
- ?line UC4 = zlib:inflate(Z, Compressed),
+ UC4 = zlib:inflate(Z, Compressed),
?m(UnCompSz, byte_size(list_to_binary(UC4))),
?m(CRC, zlib:crc32(Z)),
?m(CRC, zlib:crc32(Z,UC4)),
?m(true, zlib:crc32(Z,UC4) == zlib:crc32(Z,ORIG)),
?m(ok, zlib:inflateEnd(Z)),
-
- ?line C1 = zlib:zip(ORIG),
- ?line UC5 = zlib:unzip(C1),
+
+ C1 = zlib:zip(ORIG),
+ UC5 = zlib:unzip(C1),
?m(CRC, zlib:crc32(Z,UC5)),
?m(true,zlib:crc32(Z,UC5) == zlib:crc32(Z,ORIG)),
-
+
?m(ok, zlib:deflateInit(Z, default, deflated, -15, 8, default)),
- ?line C2 = zlib:deflate(Z, ORIG, finish),
+ C2 = zlib:deflate(Z, ORIG, finish),
?m(true, C1 == list_to_binary(C2)),
?m(ok, zlib:deflateEnd(Z)),
-
+
?m(ok, zlib:deflateInit(Z, none, deflated, -15, 8, filtered)),
?m(ok, zlib:deflateParams(Z, default, default)),
- ?line C3 = zlib:deflate(Z, ORIG, finish),
+ C3 = zlib:deflate(Z, ORIG, finish),
?m(true, C1 == list_to_binary(C3)),
?m(ok, zlib:deflateEnd(Z)),
- ?line ok = zlib:close(Z),
- ?line ok.
+ ok = zlib:close(Z),
+ ok.
-gz_usage(doc) -> "Test a standard compressed gzipped file";
-gz_usage(suite) -> [];
+%% Test a standard compressed gzipped file.
gz_usage(Config) when is_list(Config) ->
gz_usage(gz_usage({get_arg,Config}));
gz_usage({get_arg,Config}) ->
- ?line Out = conf(data_dir,Config),
- ?line {ok,GZIP} = file:read_file(filename:join(Out,"zipdoc.1.gz")),
- ?line {ok,ORIG} = file:read_file(filename:join(Out,"zipdoc")),
- ?line {ok,GZIP2} = file:read_file(filename:join(Out,"zipdoc.txt.gz")),
+ Out = conf(data_dir,Config),
+ {ok,GZIP} = file:read_file(filename:join(Out,"zipdoc.1.gz")),
+ {ok,ORIG} = file:read_file(filename:join(Out,"zipdoc")),
+ {ok,GZIP2} = file:read_file(filename:join(Out,"zipdoc.txt.gz")),
{run,GZIP,ORIG,GZIP2};
gz_usage({run,GZIP,ORIG,GZIP2}) ->
- ?line Z = zlib:open(),
- ?line UC1 = zlib:gunzip(GZIP),
+ Z = zlib:open(),
+ UC1 = zlib:gunzip(GZIP),
?m(true,zlib:crc32(Z,UC1) == zlib:crc32(Z,ORIG)),
- ?line UC3 = zlib:gunzip(GZIP2),
+ UC3 = zlib:gunzip(GZIP2),
?m(true,zlib:crc32(Z,UC3) == zlib:crc32(Z,ORIG)),
- ?line Compressed = zlib:gzip(ORIG),
- ?line UC5 = zlib:gunzip(Compressed),
+ Compressed = zlib:gzip(ORIG),
+ UC5 = zlib:gunzip(Compressed),
?m(true,zlib:crc32(Z,UC5) == zlib:crc32(Z,ORIG)),
- ?line ok = zlib:close(Z).
+ ok = zlib:close(Z).
-gz_usage2(doc) -> "Test more of a standard compressed gzipped file";
-gz_usage2(suite) -> [];
+%% Test more of a standard compressed gzipped file.
gz_usage2(Config) ->
case os:find_executable("gzip") of
Name when is_list(Name) ->
- ?line Z = zlib:open(),
- ?line Out = conf(data_dir,Config),
- ?line {ok,ORIG} = file:read_file(filename:join(Out,"zipdoc")),
- ?line Compressed = zlib:gzip(ORIG),
+ Z = zlib:open(),
+ Out = conf(data_dir,Config),
+ {ok,ORIG} = file:read_file(filename:join(Out,"zipdoc")),
+ Compressed = zlib:gzip(ORIG),
GzOutFile = filename:join(Out,"out.gz"),
OutFile = filename:join(Out,"out.txt"),
?m(ok, file:write_file(GzOutFile,Compressed)),
- ?line os:cmd("gzip -c -d " ++ GzOutFile ++ " > " ++ OutFile),
+ os:cmd("gzip -c -d " ++ GzOutFile ++ " > " ++ OutFile),
case file:read_file(OutFile) of
{ok,ExtDecompressed} ->
?m(true,
@@ -731,83 +688,80 @@ gz_usage2(Config) ->
io:format("Couldn't test external decompressor ~p\n",
[Error])
end,
- ?line ok = zlib:close(Z),
+ ok = zlib:close(Z),
ok;
false ->
{skipped,"No gzip in path"}
end.
-
-compress_usage(doc) ->
- "Test that (de)compress funcs work with"
- " standard tools, for example a chunk from a png file";
-compress_usage(suite) -> [];
+
+%% Test that (de)compress funcs work with standard tools, for example
+%% a chunk from a png file.
compress_usage(Config) when is_list(Config) ->
compress_usage(compress_usage({get_arg,Config}));
compress_usage({get_arg,Config}) ->
- ?line Out = conf(data_dir,Config),
- ?line {ok,C1} = file:read_file(filename:join(Out,"png-compressed.zlib")),
+ Out = conf(data_dir,Config),
+ {ok,C1} = file:read_file(filename:join(Out,"png-compressed.zlib")),
{run,C1};
compress_usage({run,C1}) ->
- ?line Z = zlib:open(),
+ Z = zlib:open(),
%% See that we can uncompress a file generated with external prog.
- ?line UC1 = zlib:uncompress(C1),
+ UC1 = zlib:uncompress(C1),
%% Check that the crc are correct.
?m(4125865008,zlib:crc32(Z,UC1)),
- ?line C2 = zlib:compress(UC1),
- ?line UC2 = zlib:uncompress(C2),
+ C2 = zlib:compress(UC1),
+ UC2 = zlib:uncompress(C2),
%% Check that the crc are correct.
?m(4125865008,zlib:crc32(Z,UC2)),
-
- ?line ok = zlib:close(Z),
+
+ ok = zlib:close(Z),
D = [<<"We tests some partial">>,
<<"data, sent over">>,
<<"the stream">>,
<<"we check that we can unpack">>,
<<"every message we get">>],
-
- ?line ZC = zlib:open(),
- ?line ZU = zlib:open(),
+
+ ZC = zlib:open(),
+ ZU = zlib:open(),
Test = fun(finish, {_,Tot}) ->
- ?line Compressed = zlib:deflate(ZC, <<>>, finish),
+ Compressed = zlib:deflate(ZC, <<>>, finish),
Data = zlib:inflate(ZU, Compressed),
[Tot|Data];
(Data, {Op,Tot}) ->
- ?line Compressed = zlib:deflate(ZC, Data, Op),
+ Compressed = zlib:deflate(ZC, Data, Op),
Res1 = ?m([Data],zlib:inflate(ZU, Compressed)),
{Op, [Tot|Res1]}
end,
- ?line zlib:deflateInit(ZC),
- ?line zlib:inflateInit(ZU),
- ?line T1 = lists:foldl(Test,{sync,[]},D++[finish]),
+ zlib:deflateInit(ZC),
+ zlib:inflateInit(ZU),
+ T1 = lists:foldl(Test,{sync,[]},D++[finish]),
?m(true, list_to_binary(D) == list_to_binary(T1)),
- ?line zlib:deflateEnd(ZC),
- ?line zlib:inflateEnd(ZU),
-
- ?line zlib:deflateInit(ZC),
- ?line zlib:inflateInit(ZU),
- ?line T2 = lists:foldl(Test,{full,[]},D++[finish]),
+ zlib:deflateEnd(ZC),
+ zlib:inflateEnd(ZU),
+
+ zlib:deflateInit(ZC),
+ zlib:inflateInit(ZU),
+ T2 = lists:foldl(Test,{full,[]},D++[finish]),
?m(true, list_to_binary(D) == list_to_binary(T2)),
- ?line zlib:deflateEnd(ZC),
- ?line zlib:inflateEnd(ZU),
-
- ?line ok = zlib:close(ZC),
- ?line ok = zlib:close(ZU).
+ zlib:deflateEnd(ZC),
+ zlib:inflateEnd(ZU),
+ ok = zlib:close(ZC),
+ ok = zlib:close(ZU).
-crc(doc) -> "Check that crc works as expected";
-crc(suite) -> [];
+
+%% Check that crc works as expected.
crc(Config) when is_list(Config) ->
crc(crc({get_arg,Config}));
crc({get_arg,Config}) ->
- ?line Out = conf(data_dir,Config),
- ?line {ok,C1} = file:read_file(filename:join(Out,"zipdoc")),
+ Out = conf(data_dir,Config),
+ {ok,C1} = file:read_file(filename:join(Out,"zipdoc")),
{run,C1};
crc({run,C1}) ->
- ?line Z = zlib:open(),
- ?line Crc = zlib:crc32(Z, C1),
+ Z = zlib:open(),
+ Crc = zlib:crc32(Z, C1),
Bins = split_bin(C1,[]),
%%io:format("Length ~p ~p ~n", [length(Bins), [size(Bin) || Bin <- Bins]]),
Last = lists:last(Bins),
@@ -817,29 +771,28 @@ crc({run,C1}) ->
Crc1
end, 0, Bins),
?m(Crc,SCrc),
- ?line [First|Rest] = Bins,
+ [First|Rest] = Bins,
Combine = fun(Bin, CS1) ->
CS2 = zlib:crc32(Z, Bin),
S2 = byte_size(Bin),
zlib:crc32_combine(Z,CS1,CS2,S2)
end,
- ?line Comb = lists:foldl(Combine, zlib:crc32(Z, First), Rest),
+ Comb = lists:foldl(Combine, zlib:crc32(Z, First), Rest),
?m(Crc,Comb),
- ?line ok = zlib:close(Z).
+ ok = zlib:close(Z).
-adler(doc) -> "Check that adler works as expected";
-adler(suite) -> [];
+%% Check that adler works as expected.
adler(Config) when is_list(Config) ->
adler(adler({get_arg,Config}));
adler({get_arg,Config}) ->
- ?line Out = conf(data_dir,Config),
+ Out = conf(data_dir,Config),
File1 = filename:join(Out,"zipdoc"),
- ?line {ok,C1} = file:read_file(File1),
+ {ok,C1} = file:read_file(File1),
{run,C1};
adler({run,C1}) ->
- ?line Z = zlib:open(),
+ Z = zlib:open(),
?m(1, zlib:adler32(Z,<<>>)),
- ?line Crc = zlib:adler32(Z, C1),
+ Crc = zlib:adler32(Z, C1),
Bins = split_bin(C1,[]),
Last = lists:last(Bins),
SCrc = lists:foldl(fun(Bin,Crc0) ->
@@ -848,43 +801,42 @@ adler({run,C1}) ->
Crc1
end, zlib:adler32(Z,<<>>), Bins),
?m(Crc,SCrc),
- ?line [First|Rest] = Bins,
+ [First|Rest] = Bins,
Combine = fun(Bin, CS1) ->
CS2 = zlib:adler32(Z, Bin),
S2 = byte_size(Bin),
zlib:adler32_combine(Z,CS1,CS2,S2)
end,
- ?line Comb = lists:foldl(Combine, zlib:adler32(Z, First), Rest),
+ Comb = lists:foldl(Combine, zlib:adler32(Z, First), Rest),
?m(Crc,Comb),
- ?line ok = zlib:close(Z).
+ ok = zlib:close(Z).
-dictionary_usage(doc) -> "Test dictionary usage";
-dictionary_usage(suite) -> [];
+%% Test dictionary usage.
dictionary_usage(Config) when is_list(Config) ->
dictionary_usage(dictionary_usage({get_arg,Config}));
dictionary_usage({get_arg,_Config}) ->
{run}; % no args
dictionary_usage({run}) ->
- ?line Z1 = zlib:open(),
+ Z1 = zlib:open(),
Dict = <<"Anka">>,
Data = <<"Kalle Anka">>,
?m(ok, zlib:deflateInit(Z1)),
- ?line DictID = zlib:deflateSetDictionary(Z1, Dict),
- %% ?line io:format("DictID = ~p\n", [DictID]),
- ?line B1 = zlib:deflate(Z1, Data),
- ?line B2 = zlib:deflate(Z1, <<>>, finish),
+ DictID = zlib:deflateSetDictionary(Z1, Dict),
+ %% io:format("DictID = ~p\n", [DictID]),
+ B1 = zlib:deflate(Z1, Data),
+ B2 = zlib:deflate(Z1, <<>>, finish),
?m(ok, zlib:deflateEnd(Z1)),
?m(ok, zlib:close(Z1)),
Compressed = list_to_binary([B1,B2]),
%% io:format("~p\n", [Compressed]),
%% Now uncompress.
- ?line Z2 = zlib:open(),
+ Z2 = zlib:open(),
?m(ok, zlib:inflateInit(Z2)),
- ?line {'EXIT',{{need_dictionary,DictID},_}} = (catch zlib:inflate(Z2, Compressed)),
+ {'EXIT',{{need_dictionary,DictID},_}} = (catch zlib:inflate(Z2, Compressed)),
?m(ok, zlib:inflateSetDictionary(Z2, Dict)),
?m(ok, zlib:inflateSetDictionary(Z2, binary_to_list(Dict))),
- ?line Uncompressed = ?m(B when is_list(B), zlib:inflate(Z2, [])),
+ Uncompressed = ?m(B when is_list(B), zlib:inflate(Z2, [])),
?m(ok, zlib:inflateEnd(Z2)),
?m(ok, zlib:close(Z2)),
?m(Data, list_to_binary(Uncompressed)).
@@ -895,8 +847,7 @@ split_bin(Last,Acc) ->
lists:reverse([Last|Acc]).
-smp(doc) -> "Check concurrent access to zlib driver";
-smp(suite) -> [];
+%% Check concurrent access to zlib driver.
smp(Config) ->
case erlang:system_info(smp_support) of
true ->
@@ -912,7 +863,7 @@ smp(Config) ->
FnAList = lists:map(fun(F) -> {F,?MODULE:F({get_arg,Config})}
end, Funcs),
- Pids = [spawn_link(?MODULE, worker, [random:uniform(9999),
+ Pids = [spawn_link(?MODULE, worker, [rand:uniform(9999),
list_to_tuple(FnAList),
self()])
|| _ <- lists:seq(1,NumOfProcs)],
@@ -921,11 +872,11 @@ smp(Config) ->
false ->
{skipped,"No smp support"}
end.
-
+
worker(Seed, FnATpl, Parent) ->
io:format("smp worker ~p, seed=~p~n",[self(),Seed]),
- random:seed(Seed,Seed,Seed),
+ rand:seed(exsplus, {Seed,Seed,Seed}),
worker_loop(100, FnATpl),
Parent ! self().
@@ -933,33 +884,32 @@ worker_loop(0, _FnATpl) ->
large_deflate_do(), % the time consuming one as finale
ok;
worker_loop(N, FnATpl) ->
- {F,A} = element(random:uniform(size(FnATpl)),FnATpl),
+ {F,A} = element(rand:uniform(tuple_size(FnATpl)), FnATpl),
?MODULE:F(A),
worker_loop(N-1, FnATpl).
-
+
wait_pids([]) ->
ok;
wait_pids(Pids) ->
receive
Pid ->
- ?line true = lists:member(Pid,Pids),
+ true = lists:member(Pid,Pids),
Others = lists:delete(Pid,Pids),
io:format("wait_pid got ~p, still waiting for ~p\n",[Pid,Others]),
wait_pids(Others)
end.
-otp_7359(doc) -> "Deflate/inflate data with size close to multiple of internal buffer size";
-otp_7359(suite) -> [];
+%% Deflate/inflate data with size close to multiple of internal buffer size.
otp_7359(_Config) ->
%% Find compressed size
ZTry = zlib:open(),
ok = zlib:deflateInit(ZTry),
ISize = zlib:getBufSize(ZTry),
IData = list_to_binary([Byte band 255 || Byte <- lists:seq(1,ISize)]),
- ?line ISize = byte_size(IData),
+ ISize = byte_size(IData),
- ?line DSize = iolist_size(zlib:deflate(ZTry, IData, sync)),
+ DSize = iolist_size(zlib:deflate(ZTry, IData, sync)),
zlib:close(ZTry),
io:format("Deflated try ~p -> ~p bytes~n", [ISize, DSize]),
@@ -981,19 +931,19 @@ otp_7359(_Config) ->
otp_7359_def_inf(Data,{DefSize,InfSize}) ->
%%io:format("Try: DefSize=~p InfSize=~p~n", [DefSize,InfSize]),
- ?line ZDef = zlib:open(),
- ?line ok = zlib:deflateInit(ZDef),
- ?line ok = zlib:setBufSize(ZDef,DefSize),
- ?line DefData = iolist_to_binary(zlib:deflate(ZDef, Data, sync)),
+ ZDef = zlib:open(),
+ ok = zlib:deflateInit(ZDef),
+ ok = zlib:setBufSize(ZDef,DefSize),
+ DefData = iolist_to_binary(zlib:deflate(ZDef, Data, sync)),
%%io:format("Deflated ~p(~p) -> ~p(~p) bytes~n",
%% [byte_size(Data), InfSize, byte_size(DefData), DefSize]),
- ?line ok = zlib:close(ZDef),
+ ok = zlib:close(ZDef),
- ?line ZInf = zlib:open(),
- ?line ok = zlib:inflateInit(ZInf),
- ?line ok = zlib:setBufSize(ZInf,InfSize),
- ?line Data = iolist_to_binary(zlib:inflate(ZInf, DefData)),
- ?line ok = zlib:close(ZInf),
+ ZInf = zlib:open(),
+ ok = zlib:inflateInit(ZInf),
+ ok = zlib:setBufSize(ZInf,InfSize),
+ Data = iolist_to_binary(zlib:inflate(ZInf, DefData)),
+ ok = zlib:close(ZInf),
ok.
otp_9981(Config) when is_list(Config) ->
@@ -1013,13 +963,13 @@ otp_9981(Config) when is_list(Config) ->
Ports = lists:sort(erlang:ports()),
ok.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Helps with testing directly %%%%%%%%%%%%%
conf(What,Config) ->
- try ?config(What,Config) of
+ try proplists:get_value(What,Config) of
undefined ->
"./zlib_SUITE_data";
Dir ->
diff --git a/lib/kernel/vsn.mk b/lib/kernel/vsn.mk
index c8917ebc3c..e7d422d03c 100644
--- a/lib/kernel/vsn.mk
+++ b/lib/kernel/vsn.mk
@@ -1 +1 @@
-KERNEL_VSN = 4.2
+KERNEL_VSN = 5.0
diff --git a/lib/megaco/Makefile b/lib/megaco/Makefile
index 867953013d..1d0bb6778c 100644
--- a/lib/megaco/Makefile
+++ b/lib/megaco/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/configure.in b/lib/megaco/configure.in
index d012c07645..eaa875d0a3 100644
--- a/lib/megaco/configure.in
+++ b/lib/megaco/configure.in
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. -*-m4-*-
dnl
dnl %CopyrightBegin%
dnl
-dnl Copyright Ericsson AB 2001-2013. All Rights Reserved.
+dnl Copyright Ericsson AB 2001-2016. All Rights Reserved.
dnl
dnl Licensed under the Apache License, Version 2.0 (the "License");
dnl you may not use this file except in compliance with the License.
diff --git a/lib/megaco/doc/src/Makefile b/lib/megaco/doc/src/Makefile
index 582cb9035f..8b9ce31d0e 100644
--- a/lib/megaco/doc/src/Makefile
+++ b/lib/megaco/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2013. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/doc/src/book.xml b/lib/megaco/doc/src/book.xml
index ebf627cfdb..47ad9b6a5e 100644
--- a/lib/megaco/doc/src/book.xml
+++ b/lib/megaco/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/files.mk b/lib/megaco/doc/src/files.mk
index 62e3ab404e..5e7d849ab6 100644
--- a/lib/megaco/doc/src/files.mk
+++ b/lib/megaco/doc/src/files.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2010. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/doc/src/megaco.xml b/lib/megaco/doc/src/megaco.xml
index 6e0260f916..d4a7451bfc 100644
--- a/lib/megaco/doc/src/megaco.xml
+++ b/lib/megaco/doc/src/megaco.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_architecture.xml b/lib/megaco/doc/src/megaco_architecture.xml
index 6f3d0808d7..082268a076 100644
--- a/lib/megaco/doc/src/megaco_architecture.xml
+++ b/lib/megaco/doc/src/megaco_architecture.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_codec_meas.xml b/lib/megaco/doc/src/megaco_codec_meas.xml
index ad79bcec4d..13cc3eb834 100644
--- a/lib/megaco/doc/src/megaco_codec_meas.xml
+++ b/lib/megaco/doc/src/megaco_codec_meas.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_codec_mstone1.xml b/lib/megaco/doc/src/megaco_codec_mstone1.xml
index 0634d328e0..2ff959a648 100644
--- a/lib/megaco/doc/src/megaco_codec_mstone1.xml
+++ b/lib/megaco/doc/src/megaco_codec_mstone1.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_codec_mstone2.xml b/lib/megaco/doc/src/megaco_codec_mstone2.xml
index b9f3a8ff0c..3da30d4f99 100644
--- a/lib/megaco/doc/src/megaco_codec_mstone2.xml
+++ b/lib/megaco/doc/src/megaco_codec_mstone2.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_codec_transform.xml b/lib/megaco/doc/src/megaco_codec_transform.xml
index b068c01f3b..26b83c3799 100644
--- a/lib/megaco/doc/src/megaco_codec_transform.xml
+++ b/lib/megaco/doc/src/megaco_codec_transform.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_debug.xml b/lib/megaco/doc/src/megaco_debug.xml
index 701e17a54c..26fbfc002c 100644
--- a/lib/megaco/doc/src/megaco_debug.xml
+++ b/lib/megaco/doc/src/megaco_debug.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_edist_compress.xml b/lib/megaco/doc/src/megaco_edist_compress.xml
index 04c4ad1cd5..d5c7c7224d 100644
--- a/lib/megaco/doc/src/megaco_edist_compress.xml
+++ b/lib/megaco/doc/src/megaco_edist_compress.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_encode.xml b/lib/megaco/doc/src/megaco_encode.xml
index c916eb227f..8bbf0f454c 100644
--- a/lib/megaco/doc/src/megaco_encode.xml
+++ b/lib/megaco/doc/src/megaco_encode.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_encoder.xml b/lib/megaco/doc/src/megaco_encoder.xml
index 9482ee643b..13c6ed324b 100644
--- a/lib/megaco/doc/src/megaco_encoder.xml
+++ b/lib/megaco/doc/src/megaco_encoder.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_examples.xml b/lib/megaco/doc/src/megaco_examples.xml
index 17b42c3fc9..ebcef4383b 100644
--- a/lib/megaco/doc/src/megaco_examples.xml
+++ b/lib/megaco/doc/src/megaco_examples.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_flex_scanner.xml b/lib/megaco/doc/src/megaco_flex_scanner.xml
index 68ff087afe..0856f3f429 100644
--- a/lib/megaco/doc/src/megaco_flex_scanner.xml
+++ b/lib/megaco/doc/src/megaco_flex_scanner.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_intro.xml b/lib/megaco/doc/src/megaco_intro.xml
index c33a74ebe5..bd2192b69c 100644
--- a/lib/megaco/doc/src/megaco_intro.xml
+++ b/lib/megaco/doc/src/megaco_intro.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_mib.xml b/lib/megaco/doc/src/megaco_mib.xml
index eb315014aa..e9bc34339c 100644
--- a/lib/megaco/doc/src/megaco_mib.xml
+++ b/lib/megaco/doc/src/megaco_mib.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_performance.xml b/lib/megaco/doc/src/megaco_performance.xml
index 5f1558de4a..d32f3296e9 100644
--- a/lib/megaco/doc/src/megaco_performance.xml
+++ b/lib/megaco/doc/src/megaco_performance.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_run.xml b/lib/megaco/doc/src/megaco_run.xml
index 4a8fc1f7d0..a20593fde2 100644
--- a/lib/megaco/doc/src/megaco_run.xml
+++ b/lib/megaco/doc/src/megaco_run.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_tcp.xml b/lib/megaco/doc/src/megaco_tcp.xml
index 95b391c0de..77aee32f6c 100644
--- a/lib/megaco/doc/src/megaco_tcp.xml
+++ b/lib/megaco/doc/src/megaco_tcp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_transport.xml b/lib/megaco/doc/src/megaco_transport.xml
index 753d61a238..3002e9b74e 100644
--- a/lib/megaco/doc/src/megaco_transport.xml
+++ b/lib/megaco/doc/src/megaco_transport.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_transport_mechanisms.xml b/lib/megaco/doc/src/megaco_transport_mechanisms.xml
index 46d7113307..e2e32a8095 100644
--- a/lib/megaco/doc/src/megaco_transport_mechanisms.xml
+++ b/lib/megaco/doc/src/megaco_transport_mechanisms.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_udp.xml b/lib/megaco/doc/src/megaco_udp.xml
index 63b908cc87..b2559c77d5 100644
--- a/lib/megaco/doc/src/megaco_udp.xml
+++ b/lib/megaco/doc/src/megaco_udp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/megaco_user.xml b/lib/megaco/doc/src/megaco_user.xml
index 9aae072896..067be15fe0 100644
--- a/lib/megaco/doc/src/megaco_user.xml
+++ b/lib/megaco/doc/src/megaco_user.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/notes.xml b/lib/megaco/doc/src/notes.xml
index 139a65b6fc..a05a339003 100644
--- a/lib/megaco/doc/src/notes.xml
+++ b/lib/megaco/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2014</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -37,7 +37,22 @@
section is the version number of Megaco.</p>
- <section><title>Megaco 3.18</title>
+ <section><title>Megaco 3.18.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Megaco 3.18</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/megaco/doc/src/notes_history.xml b/lib/megaco/doc/src/notes_history.xml
index 33dba78257..07e27542a5 100644
--- a/lib/megaco/doc/src/notes_history.xml
+++ b/lib/megaco/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/part.xml b/lib/megaco/doc/src/part.xml
index f411013c01..4b46f7a433 100644
--- a/lib/megaco/doc/src/part.xml
+++ b/lib/megaco/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/part_notes.xml b/lib/megaco/doc/src/part_notes.xml
index 26cc687247..7a838c5718 100644
--- a/lib/megaco/doc/src/part_notes.xml
+++ b/lib/megaco/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/part_notes_history.xml b/lib/megaco/doc/src/part_notes_history.xml
index c51758284a..0d8f1f2fb5 100644
--- a/lib/megaco/doc/src/part_notes_history.xml
+++ b/lib/megaco/doc/src/part_notes_history.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/doc/src/ref_man.xml b/lib/megaco/doc/src/ref_man.xml
index c855ae975d..395ac80e0d 100644
--- a/lib/megaco/doc/src/ref_man.xml
+++ b/lib/megaco/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/megaco/examples/meas/Makefile.in b/lib/megaco/examples/meas/Makefile.in
index d9e7aee452..293234ec69 100644
--- a/lib/megaco/examples/meas/Makefile.in
+++ b/lib/megaco/examples/meas/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2012. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/meas/meas.sh.skel.src b/lib/megaco/examples/meas/meas.sh.skel.src
index a70e36f12f..9be8568314 100644
--- a/lib/megaco/examples/meas/meas.sh.skel.src
+++ b/lib/megaco/examples/meas/meas.sh.skel.src
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2012. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/meas/megaco_codec_meas.erl b/lib/megaco/examples/meas/megaco_codec_meas.erl
index 009b085a3f..a4cb8097ea 100644
--- a/lib/megaco/examples/meas/megaco_codec_meas.erl
+++ b/lib/megaco/examples/meas/megaco_codec_meas.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/meas/megaco_codec_mstone1.erl b/lib/megaco/examples/meas/megaco_codec_mstone1.erl
index 1f73c97da4..8439e167a2 100644
--- a/lib/megaco/examples/meas/megaco_codec_mstone1.erl
+++ b/lib/megaco/examples/meas/megaco_codec_mstone1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/meas/megaco_codec_mstone2.erl b/lib/megaco/examples/meas/megaco_codec_mstone2.erl
index 95a75b7d83..eb7c2cef71 100644
--- a/lib/megaco/examples/meas/megaco_codec_mstone2.erl
+++ b/lib/megaco/examples/meas/megaco_codec_mstone2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/meas/megaco_codec_mstone_lib.erl b/lib/megaco/examples/meas/megaco_codec_mstone_lib.erl
index 02092bd8be..93515d0f16 100644
--- a/lib/megaco/examples/meas/megaco_codec_mstone_lib.erl
+++ b/lib/megaco/examples/meas/megaco_codec_mstone_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/meas/megaco_codec_transform.erl b/lib/megaco/examples/meas/megaco_codec_transform.erl
index 7182ccd621..cfd8568fcf 100644
--- a/lib/megaco/examples/meas/megaco_codec_transform.erl
+++ b/lib/megaco/examples/meas/megaco_codec_transform.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/meas/modules.mk b/lib/megaco/examples/meas/modules.mk
index 1f4e359e08..b8ea8a69f5 100644
--- a/lib/megaco/examples/meas/modules.mk
+++ b/lib/megaco/examples/meas/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2011. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/meas/mstone1.sh.skel.src b/lib/megaco/examples/meas/mstone1.sh.skel.src
index 088739f88b..fc4b4a28ae 100644
--- a/lib/megaco/examples/meas/mstone1.sh.skel.src
+++ b/lib/megaco/examples/meas/mstone1.sh.skel.src
@@ -3,7 +3,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2012. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/simple/Makefile b/lib/megaco/examples/simple/Makefile
index 720e1b29d2..00c0b7e65e 100644
--- a/lib/megaco/examples/simple/Makefile
+++ b/lib/megaco/examples/simple/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/simple/megaco_simple_mg.erl b/lib/megaco/examples/simple/megaco_simple_mg.erl
index 3ad7bad8b1..83293b810d 100644
--- a/lib/megaco/examples/simple/megaco_simple_mg.erl
+++ b/lib/megaco/examples/simple/megaco_simple_mg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/simple/megaco_simple_mgc.erl b/lib/megaco/examples/simple/megaco_simple_mgc.erl
index aea8890af7..f324e17a3a 100644
--- a/lib/megaco/examples/simple/megaco_simple_mgc.erl
+++ b/lib/megaco/examples/simple/megaco_simple_mgc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/examples/simple/modules.mk b/lib/megaco/examples/simple/modules.mk
index a2a2ac4324..79a5d41f2f 100644
--- a/lib/megaco/examples/simple/modules.mk
+++ b/lib/megaco/examples/simple/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/include/megaco.hrl b/lib/megaco/include/megaco.hrl
index 2ea4029adf..a31d731177 100644
--- a/lib/megaco/include/megaco.hrl
+++ b/lib/megaco/include/megaco.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/Makefile b/lib/megaco/src/Makefile
index 38211272c0..5d6c8703b9 100644
--- a/lib/megaco/src/Makefile
+++ b/lib/megaco/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2009. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/app/Makefile b/lib/megaco/src/app/Makefile
index 8f8e6ecded..ab45548099 100644
--- a/lib/megaco/src/app/Makefile
+++ b/lib/megaco/src/app/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2012. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/app/depend.mk b/lib/megaco/src/app/depend.mk
index 65ecdf25ad..1b1a88d04e 100644
--- a/lib/megaco/src/app/depend.mk
+++ b/lib/megaco/src/app/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2009. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/app/megaco.appup.src b/lib/megaco/src/app/megaco.appup.src
index 93bf1d980c..46da79cfe3 100644
--- a/lib/megaco/src/app/megaco.appup.src
+++ b/lib/megaco/src/app/megaco.appup.src
@@ -192,34 +192,11 @@
{"%VSN%",
[
- {"3.17.3", [{restart_application,megaco}]},
- {"3.17.2", []},
- {"3.17.1", [{restart_application,megaco}]},
- {"3.17.0.3", [{restart_application,megaco}]},
- {"3.17.0.2", []},
- {"3.17.0.1", []},
- {"3.17", []},
- {"3.16.0.3",
- [
- {update, megaco_flex_scanner_handler, {advanced, upgrade_from_pre_3_17},
- soft_purge, soft_purge, []}
- ]
- }
+ {<<"3\\..*">>, [{restart_application, megaco}]}
],
+
[
- {"3.17.3", [{restart_application,megaco}]},
- {"3.17.2", []},
- {"3.17.1", [{restart_application,megaco}]},
- {"3.17.0.3", [{restart_application,megaco}]},
- {"3.17.0.2", []},
- {"3.17.0.1", []},
- {"3.17", []},
- {"3.16.0.3",
- [
- {update, megaco_flex_scanner_handler, {advanced, downgrade_to_pre_3_17},
- soft_purge, soft_purge, []}
- ]
- }
+ {<<"3\\..*">>, [{restart_application, megaco}]}
]
}.
diff --git a/lib/megaco/src/app/megaco.erl b/lib/megaco/src/app/megaco.erl
index 71d75e136d..f0c209fd6c 100644
--- a/lib/megaco/src/app/megaco.erl
+++ b/lib/megaco/src/app/megaco.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/app/megaco.mk b/lib/megaco/src/app/megaco.mk
index d6ad5eaf2e..d79785b61d 100644
--- a/lib/megaco/src/app/megaco.mk
+++ b/lib/megaco/src/app/megaco.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2009. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/app/megaco_internal.hrl b/lib/megaco/src/app/megaco_internal.hrl
index 9f0b41ae73..b002891a0e 100644
--- a/lib/megaco/src/app/megaco_internal.hrl
+++ b/lib/megaco/src/app/megaco_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/app/modules.mk b/lib/megaco/src/app/modules.mk
index 8eb7ddafbf..5cf45b002b 100644
--- a/lib/megaco/src/app/modules.mk
+++ b/lib/megaco/src/app/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2009. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/Makefile b/lib/megaco/src/binary/Makefile
index 711fbb7665..b9643669f6 100644
--- a/lib/megaco/src/binary/Makefile
+++ b/lib/megaco/src/binary/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/depend.mk b/lib/megaco/src/binary/depend.mk
index 64efe41503..16901e39f0 100644
--- a/lib/megaco/src/binary/depend.mk
+++ b/lib/megaco/src/binary/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2013. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_ber_encoder.erl b/lib/megaco/src/binary/megaco_ber_encoder.erl
index de00a411af..1efe18c870 100644
--- a/lib/megaco/src/binary/megaco_ber_encoder.erl
+++ b/lib/megaco/src/binary/megaco_ber_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_encoder.erl b/lib/megaco/src/binary/megaco_binary_encoder.erl
index c82e67280b..e0bcd8fe4d 100644
--- a/lib/megaco/src/binary/megaco_binary_encoder.erl
+++ b/lib/megaco/src/binary/megaco_binary_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_encoder_lib.erl b/lib/megaco/src/binary/megaco_binary_encoder_lib.erl
index e9c4475b35..5e9836dc48 100644
--- a/lib/megaco/src/binary/megaco_binary_encoder_lib.erl
+++ b/lib/megaco/src/binary/megaco_binary_encoder_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl
index 60f48b1d45..af97056d5d 100644
--- a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl
+++ b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl
index 1fedd55915..b543abe7c8 100644
--- a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl
+++ b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl
index 45b7bb365f..827cb3920b 100644
--- a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl
+++ b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_v1.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_v1.erl
index 35508fa13f..1fba60fed6 100644
--- a/lib/megaco/src/binary/megaco_binary_name_resolver_v1.erl
+++ b/lib/megaco/src/binary/megaco_binary_name_resolver_v1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_v2.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_v2.erl
index a5d8a7a433..45b9b32772 100644
--- a/lib/megaco/src/binary/megaco_binary_name_resolver_v2.erl
+++ b/lib/megaco/src/binary/megaco_binary_name_resolver_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_v3.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_v3.erl
index 8b33d6c317..f1482bc252 100644
--- a/lib/megaco/src/binary/megaco_binary_name_resolver_v3.erl
+++ b/lib/megaco/src/binary/megaco_binary_name_resolver_v3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_term_id.erl b/lib/megaco/src/binary/megaco_binary_term_id.erl
index 7416003158..3a52da0a46 100644
--- a/lib/megaco/src/binary/megaco_binary_term_id.erl
+++ b/lib/megaco/src/binary/megaco_binary_term_id.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_term_id_gen.erl b/lib/megaco/src/binary/megaco_binary_term_id_gen.erl
index c0e83702f2..5eb68f5cf6 100644
--- a/lib/megaco/src/binary/megaco_binary_term_id_gen.erl
+++ b/lib/megaco/src/binary/megaco_binary_term_id_gen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl b/lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl
index 08bf461737..81cf0065dd 100644
--- a/lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl
+++ b/lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl b/lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl
index 26000e3ae6..a6dab5d780 100644
--- a/lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl
+++ b/lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl b/lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl
index 886bf20b93..63714be31d 100644
--- a/lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl
+++ b/lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_transformer_v1.erl b/lib/megaco/src/binary/megaco_binary_transformer_v1.erl
index 105fb94a19..c3480a2e3c 100644
--- a/lib/megaco/src/binary/megaco_binary_transformer_v1.erl
+++ b/lib/megaco/src/binary/megaco_binary_transformer_v1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_transformer_v2.erl b/lib/megaco/src/binary/megaco_binary_transformer_v2.erl
index 6a205993ce..9d1f795019 100644
--- a/lib/megaco/src/binary/megaco_binary_transformer_v2.erl
+++ b/lib/megaco/src/binary/megaco_binary_transformer_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_binary_transformer_v3.erl b/lib/megaco/src/binary/megaco_binary_transformer_v3.erl
index eed90aeaa9..130cabd70b 100644
--- a/lib/megaco/src/binary/megaco_binary_transformer_v3.erl
+++ b/lib/megaco/src/binary/megaco_binary_transformer_v3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/megaco_per_encoder.erl b/lib/megaco/src/binary/megaco_per_encoder.erl
index d82006f615..3de33b1d60 100644
--- a/lib/megaco/src/binary/megaco_per_encoder.erl
+++ b/lib/megaco/src/binary/megaco_per_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/modules.mk b/lib/megaco/src/binary/modules.mk
index e4b0eac8d6..bf5db0e243 100644
--- a/lib/megaco/src/binary/modules.mk
+++ b/lib/megaco/src/binary/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2013. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/old/megaco_ber_bin_drv_encoder.erl b/lib/megaco/src/binary/old/megaco_ber_bin_drv_encoder.erl
index 76b4b4cdcf..e742ce59ba 100644
--- a/lib/megaco/src/binary/old/megaco_ber_bin_drv_encoder.erl
+++ b/lib/megaco/src/binary/old/megaco_ber_bin_drv_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/binary/old/megaco_per_bin_drv_encoder.erl b/lib/megaco/src/binary/old/megaco_per_bin_drv_encoder.erl
index a256eebe54..ace5dcc1b6 100644
--- a/lib/megaco/src/binary/old/megaco_per_bin_drv_encoder.erl
+++ b/lib/megaco/src/binary/old/megaco_per_bin_drv_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/Makefile b/lib/megaco/src/engine/Makefile
index 208942c3be..869b516b05 100644
--- a/lib/megaco/src/engine/Makefile
+++ b/lib/megaco/src/engine/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/depend.mk b/lib/megaco/src/engine/depend.mk
index 45e649b20d..96ee337e3a 100644
--- a/lib/megaco/src/engine/depend.mk
+++ b/lib/megaco/src/engine/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2011. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_config.erl b/lib/megaco/src/engine/megaco_config.erl
index f6e977ac1e..1ceccf21d1 100644
--- a/lib/megaco/src/engine/megaco_config.erl
+++ b/lib/megaco/src/engine/megaco_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_config_misc.erl b/lib/megaco/src/engine/megaco_config_misc.erl
index fc0ea9cbc5..291959d2bd 100644
--- a/lib/megaco/src/engine/megaco_config_misc.erl
+++ b/lib/megaco/src/engine/megaco_config_misc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_digit_map.erl b/lib/megaco/src/engine/megaco_digit_map.erl
index 64ada63290..5b8b1f3b8f 100644
--- a/lib/megaco/src/engine/megaco_digit_map.erl
+++ b/lib/megaco/src/engine/megaco_digit_map.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_edist_compress.erl b/lib/megaco/src/engine/megaco_edist_compress.erl
index e9329d7515..987a5ec717 100644
--- a/lib/megaco/src/engine/megaco_edist_compress.erl
+++ b/lib/megaco/src/engine/megaco_edist_compress.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_encoder.erl b/lib/megaco/src/engine/megaco_encoder.erl
index 1788d6cc42..7ade349083 100644
--- a/lib/megaco/src/engine/megaco_encoder.erl
+++ b/lib/megaco/src/engine/megaco_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_erl_dist_encoder.erl b/lib/megaco/src/engine/megaco_erl_dist_encoder.erl
index 22c07d48ac..64204cc056 100644
--- a/lib/megaco/src/engine/megaco_erl_dist_encoder.erl
+++ b/lib/megaco/src/engine/megaco_erl_dist_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_erl_dist_encoder_mc.erl b/lib/megaco/src/engine/megaco_erl_dist_encoder_mc.erl
index b8d7625d48..a18536dd4e 100644
--- a/lib/megaco/src/engine/megaco_erl_dist_encoder_mc.erl
+++ b/lib/megaco/src/engine/megaco_erl_dist_encoder_mc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_filter.erl b/lib/megaco/src/engine/megaco_filter.erl
index 0f48844945..4bd3bd518b 100644
--- a/lib/megaco/src/engine/megaco_filter.erl
+++ b/lib/megaco/src/engine/megaco_filter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_message_internal.hrl b/lib/megaco/src/engine/megaco_message_internal.hrl
index 40990190bd..7a97be22a0 100644
--- a/lib/megaco/src/engine/megaco_message_internal.hrl
+++ b/lib/megaco/src/engine/megaco_message_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_messenger.erl b/lib/megaco/src/engine/megaco_messenger.erl
index 27688132fd..1d462b2140 100644
--- a/lib/megaco/src/engine/megaco_messenger.erl
+++ b/lib/megaco/src/engine/megaco_messenger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_messenger_misc.erl b/lib/megaco/src/engine/megaco_messenger_misc.erl
index bdb97c7630..091f64e5b4 100644
--- a/lib/megaco/src/engine/megaco_messenger_misc.erl
+++ b/lib/megaco/src/engine/megaco_messenger_misc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_misc_sup.erl b/lib/megaco/src/engine/megaco_misc_sup.erl
index 8ad3f3ba43..f4d2133103 100644
--- a/lib/megaco/src/engine/megaco_misc_sup.erl
+++ b/lib/megaco/src/engine/megaco_misc_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_monitor.erl b/lib/megaco/src/engine/megaco_monitor.erl
index 267f41ca15..877509a776 100644
--- a/lib/megaco/src/engine/megaco_monitor.erl
+++ b/lib/megaco/src/engine/megaco_monitor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_sdp.erl b/lib/megaco/src/engine/megaco_sdp.erl
index 1c1daa5c1c..ac37b353f0 100644
--- a/lib/megaco/src/engine/megaco_sdp.erl
+++ b/lib/megaco/src/engine/megaco_sdp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_stats.erl b/lib/megaco/src/engine/megaco_stats.erl
index 746a3bd2f0..1ca9faedb4 100644
--- a/lib/megaco/src/engine/megaco_stats.erl
+++ b/lib/megaco/src/engine/megaco_stats.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_sup.erl b/lib/megaco/src/engine/megaco_sup.erl
index c7059e91d5..8cae7d33a3 100644
--- a/lib/megaco/src/engine/megaco_sup.erl
+++ b/lib/megaco/src/engine/megaco_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_timer.erl b/lib/megaco/src/engine/megaco_timer.erl
index c7367d939c..5972d5aa17 100644
--- a/lib/megaco/src/engine/megaco_timer.erl
+++ b/lib/megaco/src/engine/megaco_timer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_trans_sender.erl b/lib/megaco/src/engine/megaco_trans_sender.erl
index 98f6809f02..871a074171 100644
--- a/lib/megaco/src/engine/megaco_trans_sender.erl
+++ b/lib/megaco/src/engine/megaco_trans_sender.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_trans_sup.erl b/lib/megaco/src/engine/megaco_trans_sup.erl
index 6015a63ca3..44ba0af566 100644
--- a/lib/megaco/src/engine/megaco_trans_sup.erl
+++ b/lib/megaco/src/engine/megaco_trans_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_transport.erl b/lib/megaco/src/engine/megaco_transport.erl
index d6c9fa632b..7b5c35265c 100644
--- a/lib/megaco/src/engine/megaco_transport.erl
+++ b/lib/megaco/src/engine/megaco_transport.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/megaco_user_default.erl b/lib/megaco/src/engine/megaco_user_default.erl
index 907f3bebb9..a8cf9c79d0 100644
--- a/lib/megaco/src/engine/megaco_user_default.erl
+++ b/lib/megaco/src/engine/megaco_user_default.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/engine/modules.mk b/lib/megaco/src/engine/modules.mk
index e2fd495342..b74a096e40 100644
--- a/lib/megaco/src/engine/modules.mk
+++ b/lib/megaco/src/engine/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/flex/Makefile b/lib/megaco/src/flex/Makefile
index ee366bdda0..19317e41db 100644
--- a/lib/megaco/src/flex/Makefile
+++ b/lib/megaco/src/flex/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/flex/Makefile.in b/lib/megaco/src/flex/Makefile.in
index 045b6d871a..c37ad4d702 100644
--- a/lib/megaco/src/flex/Makefile.in
+++ b/lib/megaco/src/flex/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/flex/megaco_flex_scanner.erl b/lib/megaco/src/flex/megaco_flex_scanner.erl
index 921926211d..ef94594a8e 100644
--- a/lib/megaco/src/flex/megaco_flex_scanner.erl
+++ b/lib/megaco/src/flex/megaco_flex_scanner.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src b/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src
index 0ac15fae4a..50cf5f7d5f 100644
--- a/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src
+++ b/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2001-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2001-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/flex/megaco_flex_scanner_handler.erl b/lib/megaco/src/flex/megaco_flex_scanner_handler.erl
index 1f7c127ccf..c478332e1c 100644
--- a/lib/megaco/src/flex/megaco_flex_scanner_handler.erl
+++ b/lib/megaco/src/flex/megaco_flex_scanner_handler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/flex/modules.mk b/lib/megaco/src/flex/modules.mk
index e317b2ea51..b9e23afdcb 100644
--- a/lib/megaco/src/flex/modules.mk
+++ b/lib/megaco/src/flex/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/rules.mk b/lib/megaco/src/rules.mk
index 1ac98a16a1..8c5aa0126e 100644
--- a/lib/megaco/src/rules.mk
+++ b/lib/megaco/src/rules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2013. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/subdirs.mk b/lib/megaco/src/subdirs.mk
index abc1b88758..28d946273c 100644
--- a/lib/megaco/src/subdirs.mk
+++ b/lib/megaco/src/subdirs.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/Makefile b/lib/megaco/src/tcp/Makefile
index 0c546a881f..d07db3fa4b 100644
--- a/lib/megaco/src/tcp/Makefile
+++ b/lib/megaco/src/tcp/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/depend.mk b/lib/megaco/src/tcp/depend.mk
index a5f5f9b844..c775048534 100644
--- a/lib/megaco/src/tcp/depend.mk
+++ b/lib/megaco/src/tcp/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2009. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/megaco_tcp.erl b/lib/megaco/src/tcp/megaco_tcp.erl
index 25b7902c0b..1735439501 100644
--- a/lib/megaco/src/tcp/megaco_tcp.erl
+++ b/lib/megaco/src/tcp/megaco_tcp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/megaco_tcp.hrl b/lib/megaco/src/tcp/megaco_tcp.hrl
index 37963a7099..0c01f36b55 100644
--- a/lib/megaco/src/tcp/megaco_tcp.hrl
+++ b/lib/megaco/src/tcp/megaco_tcp.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/megaco_tcp_accept.erl b/lib/megaco/src/tcp/megaco_tcp_accept.erl
index f3e45d8cd4..5fcff200aa 100644
--- a/lib/megaco/src/tcp/megaco_tcp_accept.erl
+++ b/lib/megaco/src/tcp/megaco_tcp_accept.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/megaco_tcp_accept_sup.erl b/lib/megaco/src/tcp/megaco_tcp_accept_sup.erl
index 9a8369edd2..ecaad6769d 100644
--- a/lib/megaco/src/tcp/megaco_tcp_accept_sup.erl
+++ b/lib/megaco/src/tcp/megaco_tcp_accept_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/megaco_tcp_connection.erl b/lib/megaco/src/tcp/megaco_tcp_connection.erl
index 962c5928c1..136bfda2e5 100644
--- a/lib/megaco/src/tcp/megaco_tcp_connection.erl
+++ b/lib/megaco/src/tcp/megaco_tcp_connection.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/megaco_tcp_connection_sup.erl b/lib/megaco/src/tcp/megaco_tcp_connection_sup.erl
index 7c9ed0b17e..19aeb6b714 100644
--- a/lib/megaco/src/tcp/megaco_tcp_connection_sup.erl
+++ b/lib/megaco/src/tcp/megaco_tcp_connection_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/megaco_tcp_sup.erl b/lib/megaco/src/tcp/megaco_tcp_sup.erl
index aa8c9da539..8ec115dad8 100644
--- a/lib/megaco/src/tcp/megaco_tcp_sup.erl
+++ b/lib/megaco/src/tcp/megaco_tcp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/tcp/modules.mk b/lib/megaco/src/tcp/modules.mk
index eb21eef60f..f687b60ced 100644
--- a/lib/megaco/src/tcp/modules.mk
+++ b/lib/megaco/src/tcp/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/Makefile b/lib/megaco/src/text/Makefile
index f4fc56a27d..8e7e82b276 100644
--- a/lib/megaco/src/text/Makefile
+++ b/lib/megaco/src/text/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/depend.mk b/lib/megaco/src/text/depend.mk
index 8eac5f9e3f..5001250afd 100644
--- a/lib/megaco/src/text/depend.mk
+++ b/lib/megaco/src/text/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder.erl b/lib/megaco/src/text/megaco_compact_text_encoder.erl
index 799759d97b..74638308da 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl b/lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl
index 77078a586b..c3a68d4ed7 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_prev3a.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl b/lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl
index 90d8e671bc..f98d1ea9ed 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_prev3b.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl b/lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl
index 210a8d2161..14cf1adb9b 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_prev3c.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_v1.erl b/lib/megaco/src/text/megaco_compact_text_encoder_v1.erl
index e88fc67db3..fb6e9ee513 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_v1.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_v1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_v2.erl b/lib/megaco/src/text/megaco_compact_text_encoder_v2.erl
index d75bcd8a0d..459bf07190 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_v2.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_compact_text_encoder_v3.erl b/lib/megaco/src/text/megaco_compact_text_encoder_v3.erl
index 8e1076a8fe..4f6f16d44b 100644
--- a/lib/megaco/src/text/megaco_compact_text_encoder_v3.erl
+++ b/lib/megaco/src/text/megaco_compact_text_encoder_v3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder.erl b/lib/megaco/src/text/megaco_pretty_text_encoder.erl
index 03246a50f7..7c47876e8e 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl
index dbf2c44e6f..78f916d928 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3a.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl
index a3f9c09783..87e17dfe85 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3b.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl
index 832e6cf9ec..386567b959 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder_prev3c.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl
index 2d6e69dc17..03ffc31b1e 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder_v1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl
index 93a855b540..fb260ac31b 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_pretty_text_encoder_v3.erl b/lib/megaco/src/text/megaco_pretty_text_encoder_v3.erl
index 9ca7f6012b..639cf95444 100644
--- a/lib/megaco/src/text/megaco_pretty_text_encoder_v3.erl
+++ b/lib/megaco/src/text/megaco_pretty_text_encoder_v3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_gen_prev3a.hrl b/lib/megaco/src/text/megaco_text_gen_prev3a.hrl
index d5eaaf622d..ae4a990779 100644
--- a/lib/megaco/src/text/megaco_text_gen_prev3a.hrl
+++ b/lib/megaco/src/text/megaco_text_gen_prev3a.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_gen_prev3b.hrl b/lib/megaco/src/text/megaco_text_gen_prev3b.hrl
index 95478fac89..e7fb85d137 100644
--- a/lib/megaco/src/text/megaco_text_gen_prev3b.hrl
+++ b/lib/megaco/src/text/megaco_text_gen_prev3b.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_gen_prev3c.hrl b/lib/megaco/src/text/megaco_text_gen_prev3c.hrl
index b1299c2a4d..722e97a743 100644
--- a/lib/megaco/src/text/megaco_text_gen_prev3c.hrl
+++ b/lib/megaco/src/text/megaco_text_gen_prev3c.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_gen_v1.hrl b/lib/megaco/src/text/megaco_text_gen_v1.hrl
index 0399a5449b..38a0f6fd6b 100644
--- a/lib/megaco/src/text/megaco_text_gen_v1.hrl
+++ b/lib/megaco/src/text/megaco_text_gen_v1.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_gen_v2.hrl b/lib/megaco/src/text/megaco_text_gen_v2.hrl
index 35130d5229..d9443fb2e1 100644
--- a/lib/megaco/src/text/megaco_text_gen_v2.hrl
+++ b/lib/megaco/src/text/megaco_text_gen_v2.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_gen_v3.hrl b/lib/megaco/src/text/megaco_text_gen_v3.hrl
index 409803d17a..dc1f2b9665 100644
--- a/lib/megaco/src/text/megaco_text_gen_v3.hrl
+++ b/lib/megaco/src/text/megaco_text_gen_v3.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_mini_decoder.erl b/lib/megaco/src/text/megaco_text_mini_decoder.erl
index 5a8516bfbc..9d2c93d0cf 100644
--- a/lib/megaco/src/text/megaco_text_mini_decoder.erl
+++ b/lib/megaco/src/text/megaco_text_mini_decoder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_mini_parser.hrl b/lib/megaco/src/text/megaco_text_mini_parser.hrl
index 9f276b9682..487958af08 100644
--- a/lib/megaco/src/text/megaco_text_mini_parser.hrl
+++ b/lib/megaco/src/text/megaco_text_mini_parser.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_mini_parser.yrl b/lib/megaco/src/text/megaco_text_mini_parser.yrl
index 5a0983b439..af3050a05b 100644
--- a/lib/megaco/src/text/megaco_text_mini_parser.yrl
+++ b/lib/megaco/src/text/megaco_text_mini_parser.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3a.hrl b/lib/megaco/src/text/megaco_text_parser_prev3a.hrl
index 2b1b9f3145..edda850c3a 100644
--- a/lib/megaco/src/text/megaco_text_parser_prev3a.hrl
+++ b/lib/megaco/src/text/megaco_text_parser_prev3a.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3a.yrl b/lib/megaco/src/text/megaco_text_parser_prev3a.yrl
index 6ce82514d3..0a07fbec2b 100644
--- a/lib/megaco/src/text/megaco_text_parser_prev3a.yrl
+++ b/lib/megaco/src/text/megaco_text_parser_prev3a.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3b.hrl b/lib/megaco/src/text/megaco_text_parser_prev3b.hrl
index bca64ac37e..4eaa3733c4 100644
--- a/lib/megaco/src/text/megaco_text_parser_prev3b.hrl
+++ b/lib/megaco/src/text/megaco_text_parser_prev3b.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3b.yrl b/lib/megaco/src/text/megaco_text_parser_prev3b.yrl
index 6fc23dae82..133938d7f7 100644
--- a/lib/megaco/src/text/megaco_text_parser_prev3b.yrl
+++ b/lib/megaco/src/text/megaco_text_parser_prev3b.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3c.hrl b/lib/megaco/src/text/megaco_text_parser_prev3c.hrl
index 89dc6accbd..d2faad09d9 100644
--- a/lib/megaco/src/text/megaco_text_parser_prev3c.hrl
+++ b/lib/megaco/src/text/megaco_text_parser_prev3c.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_prev3c.yrl b/lib/megaco/src/text/megaco_text_parser_prev3c.yrl
index 42a8ae627d..d78f4ff99c 100644
--- a/lib/megaco/src/text/megaco_text_parser_prev3c.yrl
+++ b/lib/megaco/src/text/megaco_text_parser_prev3c.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_v1.hrl b/lib/megaco/src/text/megaco_text_parser_v1.hrl
index b5913d01f3..f48ac745f0 100644
--- a/lib/megaco/src/text/megaco_text_parser_v1.hrl
+++ b/lib/megaco/src/text/megaco_text_parser_v1.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_v1.yrl b/lib/megaco/src/text/megaco_text_parser_v1.yrl
index c231cdf7ca..cea6a958e5 100644
--- a/lib/megaco/src/text/megaco_text_parser_v1.yrl
+++ b/lib/megaco/src/text/megaco_text_parser_v1.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_v2.hrl b/lib/megaco/src/text/megaco_text_parser_v2.hrl
index 0615c75ba1..f3c2f69193 100644
--- a/lib/megaco/src/text/megaco_text_parser_v2.hrl
+++ b/lib/megaco/src/text/megaco_text_parser_v2.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_v2.yrl b/lib/megaco/src/text/megaco_text_parser_v2.yrl
index 09e87c59ab..f8fe762ee1 100644
--- a/lib/megaco/src/text/megaco_text_parser_v2.yrl
+++ b/lib/megaco/src/text/megaco_text_parser_v2.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_v3.hrl b/lib/megaco/src/text/megaco_text_parser_v3.hrl
index efe81c9e7a..38822e4952 100644
--- a/lib/megaco/src/text/megaco_text_parser_v3.hrl
+++ b/lib/megaco/src/text/megaco_text_parser_v3.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_parser_v3.yrl b/lib/megaco/src/text/megaco_text_parser_v3.yrl
index dc5cd5bcc7..54739af82e 100644
--- a/lib/megaco/src/text/megaco_text_parser_v3.yrl
+++ b/lib/megaco/src/text/megaco_text_parser_v3.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_scanner.erl b/lib/megaco/src/text/megaco_text_scanner.erl
index 790b2beb33..88194b8083 100644
--- a/lib/megaco/src/text/megaco_text_scanner.erl
+++ b/lib/megaco/src/text/megaco_text_scanner.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/megaco_text_tokens.hrl b/lib/megaco/src/text/megaco_text_tokens.hrl
index 28c07e91a2..dc9fadcbe5 100644
--- a/lib/megaco/src/text/megaco_text_tokens.hrl
+++ b/lib/megaco/src/text/megaco_text_tokens.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/text/modules.mk b/lib/megaco/src/text/modules.mk
index 09aebb7c6e..46bf7d57ba 100644
--- a/lib/megaco/src/text/modules.mk
+++ b/lib/megaco/src/text/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/udp/Makefile b/lib/megaco/src/udp/Makefile
index 7288c205f0..028a63e98e 100644
--- a/lib/megaco/src/udp/Makefile
+++ b/lib/megaco/src/udp/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/udp/megaco_udp.erl b/lib/megaco/src/udp/megaco_udp.erl
index b7a1eb3e2d..01aaa90f6c 100644
--- a/lib/megaco/src/udp/megaco_udp.erl
+++ b/lib/megaco/src/udp/megaco_udp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/udp/megaco_udp.hrl b/lib/megaco/src/udp/megaco_udp.hrl
index 7e36fa144b..b5422d28c9 100644
--- a/lib/megaco/src/udp/megaco_udp.hrl
+++ b/lib/megaco/src/udp/megaco_udp.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/udp/megaco_udp_server.erl b/lib/megaco/src/udp/megaco_udp_server.erl
index 537a0ad8df..1df9a76671 100644
--- a/lib/megaco/src/udp/megaco_udp_server.erl
+++ b/lib/megaco/src/udp/megaco_udp_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/udp/megaco_udp_sup.erl b/lib/megaco/src/udp/megaco_udp_sup.erl
index aed5ec11d8..c755907c95 100644
--- a/lib/megaco/src/udp/megaco_udp_sup.erl
+++ b/lib/megaco/src/udp/megaco_udp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/src/udp/modules.mk b/lib/megaco/src/udp/modules.mk
index 6a9618cefe..c7d6fec9d5 100644
--- a/lib/megaco/src/udp/modules.mk
+++ b/lib/megaco/src/udp/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/subdirs.mk b/lib/megaco/subdirs.mk
index cdc6d7b9c4..d331e34a0a 100644
--- a/lib/megaco/subdirs.mk
+++ b/lib/megaco/subdirs.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/Makefile b/lib/megaco/test/Makefile
index 06ecc06d20..4ddd73eea1 100644
--- a/lib/megaco/test/Makefile
+++ b/lib/megaco/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -100,10 +100,7 @@ ifeq ($(USE_MEGACO_HIPE),true)
ERL_COMPILE_FLAGS += +native -Dmegaco_hipe_special=true
endif
-ERL_COMPILE_FLAGS += \
- $(MEGACO_ERL_COMPILE_FLAGS) \
- -pa $(ERL_TOP)/lib/test_server/ebin \
- -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS += $(MEGACO_ERL_COMPILE_FLAGS)
ERL_PATH = -pa ../../megaco/examples/simple \
-pa ../../megaco/ebin \
diff --git a/lib/megaco/test/megaco_SUITE.erl b/lib/megaco/test/megaco_SUITE.erl
index 1cd6a78d07..38590f9fee 100644
--- a/lib/megaco/test/megaco_SUITE.erl
+++ b/lib/megaco/test/megaco_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_actions_test.erl b/lib/megaco/test/megaco_actions_test.erl
index b554622a27..fcbe4f12fa 100644
--- a/lib/megaco/test/megaco_actions_test.erl
+++ b/lib/megaco/test/megaco_actions_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_app_test.erl b/lib/megaco/test/megaco_app_test.erl
index 78ca2d4774..346a123c66 100644
--- a/lib/megaco/test/megaco_app_test.erl
+++ b/lib/megaco/test/megaco_app_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_appup_mg.erl b/lib/megaco/test/megaco_appup_mg.erl
index 3ff051b0bc..d05e0ff18c 100644
--- a/lib/megaco/test/megaco_appup_mg.erl
+++ b/lib/megaco/test/megaco_appup_mg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_appup_mgc.erl b/lib/megaco/test/megaco_appup_mgc.erl
index 90e27e8728..42a95306f0 100644
--- a/lib/megaco/test/megaco_appup_mgc.erl
+++ b/lib/megaco/test/megaco_appup_mgc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_appup_test.erl b/lib/megaco/test/megaco_appup_test.erl
index 7809dd4e09..325e7a6096 100644
--- a/lib/megaco/test/megaco_appup_test.erl
+++ b/lib/megaco/test/megaco_appup_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_binary_term_id_test.erl b/lib/megaco/test/megaco_binary_term_id_test.erl
index 47520bafe1..b300379fae 100644
--- a/lib/megaco/test/megaco_binary_term_id_test.erl
+++ b/lib/megaco/test/megaco_binary_term_id_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_call_flow_test.erl b/lib/megaco/test/megaco_call_flow_test.erl
index 2c3a08ca0a..eb4574862d 100644
--- a/lib/megaco/test/megaco_call_flow_test.erl
+++ b/lib/megaco/test/megaco_call_flow_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_flex_lib.erl b/lib/megaco/test/megaco_codec_flex_lib.erl
index 13ee8e824a..e322c21dad 100644
--- a/lib/megaco/test/megaco_codec_flex_lib.erl
+++ b/lib/megaco/test/megaco_codec_flex_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_mini_test.erl b/lib/megaco/test/megaco_codec_mini_test.erl
index 536ac51798..fb23eb4680 100644
--- a/lib/megaco/test/megaco_codec_mini_test.erl
+++ b/lib/megaco/test/megaco_codec_mini_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_prev3a_test.erl b/lib/megaco/test/megaco_codec_prev3a_test.erl
index 6486a8eaf9..c68c3b12f6 100644
--- a/lib/megaco/test/megaco_codec_prev3a_test.erl
+++ b/lib/megaco/test/megaco_codec_prev3a_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_prev3b_test.erl b/lib/megaco/test/megaco_codec_prev3b_test.erl
index 04614df545..815a484426 100644
--- a/lib/megaco/test/megaco_codec_prev3b_test.erl
+++ b/lib/megaco/test/megaco_codec_prev3b_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_prev3c_test.erl b/lib/megaco/test/megaco_codec_prev3c_test.erl
index cb3efa7cf9..f308ba3774 100644
--- a/lib/megaco/test/megaco_codec_prev3c_test.erl
+++ b/lib/megaco/test/megaco_codec_prev3c_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_test.erl b/lib/megaco/test/megaco_codec_test.erl
index 118937fc6f..007136f83e 100644
--- a/lib/megaco/test/megaco_codec_test.erl
+++ b/lib/megaco/test/megaco_codec_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_test_lib.erl b/lib/megaco/test/megaco_codec_test_lib.erl
index dcae348e89..6eee5caaaa 100644
--- a/lib/megaco/test/megaco_codec_test_lib.erl
+++ b/lib/megaco/test/megaco_codec_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_v1_test.erl b/lib/megaco/test/megaco_codec_v1_test.erl
index a0ddacc20a..3548a08984 100644
--- a/lib/megaco/test/megaco_codec_v1_test.erl
+++ b/lib/megaco/test/megaco_codec_v1_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_v2_test.erl b/lib/megaco/test/megaco_codec_v2_test.erl
index afdfc48900..fc3b1f886c 100644
--- a/lib/megaco/test/megaco_codec_v2_test.erl
+++ b/lib/megaco/test/megaco_codec_v2_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_codec_v3_test.erl b/lib/megaco/test/megaco_codec_v3_test.erl
index 4c7e17d10a..9cc3fd6c1c 100644
--- a/lib/megaco/test/megaco_codec_v3_test.erl
+++ b/lib/megaco/test/megaco_codec_v3_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_config_test.erl b/lib/megaco/test/megaco_config_test.erl
index 1f619856f8..02e06a722a 100644
--- a/lib/megaco/test/megaco_config_test.erl
+++ b/lib/megaco/test/megaco_config_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_digit_map_test.erl b/lib/megaco/test/megaco_digit_map_test.erl
index 72426d2305..998e829b67 100644
--- a/lib/megaco/test/megaco_digit_map_test.erl
+++ b/lib/megaco/test/megaco_digit_map_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_examples_test.erl b/lib/megaco/test/megaco_examples_test.erl
index ddaad4be3c..45a6c5011a 100644
--- a/lib/megaco/test/megaco_examples_test.erl
+++ b/lib/megaco/test/megaco_examples_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_flex_test.erl b/lib/megaco/test/megaco_flex_test.erl
index 928ff719cf..999d1abc6c 100644
--- a/lib/megaco/test/megaco_flex_test.erl
+++ b/lib/megaco/test/megaco_flex_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_load_test.erl b/lib/megaco/test/megaco_load_test.erl
index 9599a5221d..511e5a2e8e 100644
--- a/lib/megaco/test/megaco_load_test.erl
+++ b/lib/megaco/test/megaco_load_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_mess_otp8212_test.erl b/lib/megaco/test/megaco_mess_otp8212_test.erl
index 25c21bea35..1fcd033566 100644
--- a/lib/megaco/test/megaco_mess_otp8212_test.erl
+++ b/lib/megaco/test/megaco_mess_otp8212_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_mess_test.erl b/lib/megaco/test/megaco_mess_test.erl
index 2f11a6ba1b..7af6f26bf1 100644
--- a/lib/megaco/test/megaco_mess_test.erl
+++ b/lib/megaco/test/megaco_mess_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_mess_user_test.erl b/lib/megaco/test/megaco_mess_user_test.erl
index 4c284af93e..b5a554112e 100644
--- a/lib/megaco/test/megaco_mess_user_test.erl
+++ b/lib/megaco/test/megaco_mess_user_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_mib_test.erl b/lib/megaco/test/megaco_mib_test.erl
index be6741439d..d644d6bc09 100644
--- a/lib/megaco/test/megaco_mib_test.erl
+++ b/lib/megaco/test/megaco_mib_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_mreq_test.erl b/lib/megaco/test/megaco_mreq_test.erl
index 2d6d936f75..e6a5ed3181 100644
--- a/lib/megaco/test/megaco_mreq_test.erl
+++ b/lib/megaco/test/megaco_mreq_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_pending_limit_test.erl b/lib/megaco/test/megaco_pending_limit_test.erl
index 5440fadec8..ef3b7e51cf 100644
--- a/lib/megaco/test/megaco_pending_limit_test.erl
+++ b/lib/megaco/test/megaco_pending_limit_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_profile.erl b/lib/megaco/test/megaco_profile.erl
index 86daad173c..6b0dfee23d 100644
--- a/lib/megaco/test/megaco_profile.erl
+++ b/lib/megaco/test/megaco_profile.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_sdp_test.erl b/lib/megaco/test/megaco_sdp_test.erl
index 95ada63273..4065b6e629 100644
--- a/lib/megaco/test/megaco_sdp_test.erl
+++ b/lib/megaco/test/megaco_sdp_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_segment_test.erl b/lib/megaco/test/megaco_segment_test.erl
index abd63ac00f..ddb8b9f06b 100644
--- a/lib/megaco/test/megaco_segment_test.erl
+++ b/lib/megaco/test/megaco_segment_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_tc_controller.erl b/lib/megaco/test/megaco_tc_controller.erl
index 979c2e3be8..730bbcf873 100644
--- a/lib/megaco/test/megaco_tc_controller.erl
+++ b/lib/megaco/test/megaco_tc_controller.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_tcp_test.erl b/lib/megaco/test/megaco_tcp_test.erl
index c72f4f07b0..a1865ad690 100644
--- a/lib/megaco/test/megaco_tcp_test.erl
+++ b/lib/megaco/test/megaco_tcp_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_deliver.erl b/lib/megaco/test/megaco_test_deliver.erl
index 307caad73b..78033f0e36 100644
--- a/lib/megaco/test/megaco_test_deliver.erl
+++ b/lib/megaco/test/megaco_test_deliver.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_generator.erl b/lib/megaco/test/megaco_test_generator.erl
index 7f9714aec9..63f66bda07 100644
--- a/lib/megaco/test/megaco_test_generator.erl
+++ b/lib/megaco/test/megaco_test_generator.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_generator_lib.erl b/lib/megaco/test/megaco_test_generator_lib.erl
index fd9dd1c491..d19728e009 100644
--- a/lib/megaco/test/megaco_test_generator_lib.erl
+++ b/lib/megaco/test/megaco_test_generator_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_generic_transport.erl b/lib/megaco/test/megaco_test_generic_transport.erl
index 81ea3e728e..3185e4c6b6 100644
--- a/lib/megaco/test/megaco_test_generic_transport.erl
+++ b/lib/megaco/test/megaco_test_generic_transport.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_lib.erl b/lib/megaco/test/megaco_test_lib.erl
index 2339955e55..3934a3a957 100644
--- a/lib/megaco/test/megaco_test_lib.erl
+++ b/lib/megaco/test/megaco_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_lib.hrl b/lib/megaco/test/megaco_test_lib.hrl
index e066b805e6..79a1493c40 100644
--- a/lib/megaco/test/megaco_test_lib.hrl
+++ b/lib/megaco/test/megaco_test_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_megaco_generator.erl b/lib/megaco/test/megaco_test_megaco_generator.erl
index 07b9a806f4..8a37fa33fe 100644
--- a/lib/megaco/test/megaco_test_megaco_generator.erl
+++ b/lib/megaco/test/megaco_test_megaco_generator.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_mg.erl b/lib/megaco/test/megaco_test_mg.erl
index 667e5babdb..d6a9a8c314 100644
--- a/lib/megaco/test/megaco_test_mg.erl
+++ b/lib/megaco/test/megaco_test_mg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_mgc.erl b/lib/megaco/test/megaco_test_mgc.erl
index 8b6fe3f611..045bc7c9fd 100644
--- a/lib/megaco/test/megaco_test_mgc.erl
+++ b/lib/megaco/test/megaco_test_mgc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_msg_prev3a_lib.erl b/lib/megaco/test/megaco_test_msg_prev3a_lib.erl
index 6bdb82ce06..baea62c552 100644
--- a/lib/megaco/test/megaco_test_msg_prev3a_lib.erl
+++ b/lib/megaco/test/megaco_test_msg_prev3a_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_msg_prev3b_lib.erl b/lib/megaco/test/megaco_test_msg_prev3b_lib.erl
index 6fc8e8de35..599dc791f6 100644
--- a/lib/megaco/test/megaco_test_msg_prev3b_lib.erl
+++ b/lib/megaco/test/megaco_test_msg_prev3b_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_msg_prev3c_lib.erl b/lib/megaco/test/megaco_test_msg_prev3c_lib.erl
index 3eff0d9a59..6f417f848e 100644
--- a/lib/megaco/test/megaco_test_msg_prev3c_lib.erl
+++ b/lib/megaco/test/megaco_test_msg_prev3c_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_msg_v1_lib.erl b/lib/megaco/test/megaco_test_msg_v1_lib.erl
index 03f3561218..fe6c02db10 100644
--- a/lib/megaco/test/megaco_test_msg_v1_lib.erl
+++ b/lib/megaco/test/megaco_test_msg_v1_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_msg_v2_lib.erl b/lib/megaco/test/megaco_test_msg_v2_lib.erl
index 27f65faf32..e1ec99108d 100644
--- a/lib/megaco/test/megaco_test_msg_v2_lib.erl
+++ b/lib/megaco/test/megaco_test_msg_v2_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_msg_v3_lib.erl b/lib/megaco/test/megaco_test_msg_v3_lib.erl
index e214215b10..5264791370 100644
--- a/lib/megaco/test/megaco_test_msg_v3_lib.erl
+++ b/lib/megaco/test/megaco_test_msg_v3_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_test_tcp_generator.erl b/lib/megaco/test/megaco_test_tcp_generator.erl
index 2ee0259a9a..ec256f7a87 100644
--- a/lib/megaco/test/megaco_test_tcp_generator.erl
+++ b/lib/megaco/test/megaco_test_tcp_generator.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_timer_test.erl b/lib/megaco/test/megaco_timer_test.erl
index bd64fe9c17..34479f7838 100644
--- a/lib/megaco/test/megaco_timer_test.erl
+++ b/lib/megaco/test/megaco_timer_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_trans_test.erl b/lib/megaco/test/megaco_trans_test.erl
index ef527662af..9786307860 100644
--- a/lib/megaco/test/megaco_trans_test.erl
+++ b/lib/megaco/test/megaco_trans_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/megaco_udp_test.erl b/lib/megaco/test/megaco_udp_test.erl
index b461925d94..cc03ec733a 100644
--- a/lib/megaco/test/megaco_udp_test.erl
+++ b/lib/megaco/test/megaco_udp_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/megaco/test/modules.mk b/lib/megaco/test/modules.mk
index 3e56dfdc9c..32b35d6123 100644
--- a/lib/megaco/test/modules.mk
+++ b/lib/megaco/test/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2010. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/megaco/vsn.mk b/lib/megaco/vsn.mk
index 2e850f2917..b95cd66a81 100644
--- a/lib/megaco/vsn.mk
+++ b/lib/megaco/vsn.mk
@@ -19,6 +19,6 @@
# %CopyrightEnd%
APPLICATION = megaco
-MEGACO_VSN = 3.18
+MEGACO_VSN = 3.18.1
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(MEGACO_VSN)$(PRE_VSN)"
diff --git a/lib/mnesia/Makefile b/lib/mnesia/Makefile
index 0333f73a27..810433c4d0 100644
--- a/lib/mnesia/Makefile
+++ b/lib/mnesia/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/doc/misc/Makefile b/lib/mnesia/doc/misc/Makefile
index 4d364649b6..29e2682967 100644
--- a/lib/mnesia/doc/misc/Makefile
+++ b/lib/mnesia/doc/misc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/doc/src/Makefile b/lib/mnesia/doc/src/Makefile
index af85e1bc59..39f2b28637 100644
--- a/lib/mnesia/doc/src/Makefile
+++ b/lib/mnesia/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/doc/src/Mnesia_App_A.xmlsrc b/lib/mnesia/doc/src/Mnesia_App_A.xmlsrc
index 7bc0688887..22b6fa9f39 100644
--- a/lib/mnesia/doc/src/Mnesia_App_A.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_App_A.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_App_B.xmlsrc b/lib/mnesia/doc/src/Mnesia_App_B.xmlsrc
index 1b76a31ef0..45bd2824e5 100644
--- a/lib/mnesia/doc/src/Mnesia_App_B.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_App_B.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_App_C.xmlsrc b/lib/mnesia/doc/src/Mnesia_App_C.xmlsrc
index 34dafc772b..42e25edc5d 100644
--- a/lib/mnesia/doc/src/Mnesia_App_C.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_App_C.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_chap1.xml b/lib/mnesia/doc/src/Mnesia_chap1.xml
index fd614a655b..9dfeb5efe4 100644
--- a/lib/mnesia/doc/src/Mnesia_chap1.xml
+++ b/lib/mnesia/doc/src/Mnesia_chap1.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_chap2.xmlsrc b/lib/mnesia/doc/src/Mnesia_chap2.xmlsrc
index ad2ba7784e..37389ce5ae 100644
--- a/lib/mnesia/doc/src/Mnesia_chap2.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_chap2.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -317,7 +317,7 @@
sex = male,
phone = 98108,
room_no = {221, 015}},
- insert_emp(Me, 'B/SFR', [Erlang, mnesia, otp]).</code>
+ insert_emp(Emp, 'B/SFR', [Erlang, mnesia, otp]).</code>
<note><p>For information about Funs, see "Fun Expressions" in
section <c>Erlang Reference Manual</c> in System
Documentation..</p>
diff --git a/lib/mnesia/doc/src/Mnesia_chap3.xmlsrc b/lib/mnesia/doc/src/Mnesia_chap3.xmlsrc
index 849b5f4281..8f1a4366ee 100644
--- a/lib/mnesia/doc/src/Mnesia_chap3.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_chap3.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_chap4.xmlsrc b/lib/mnesia/doc/src/Mnesia_chap4.xmlsrc
index db48811d76..b8d86adbf1 100644
--- a/lib/mnesia/doc/src/Mnesia_chap4.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_chap4.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_chap5.xmlsrc b/lib/mnesia/doc/src/Mnesia_chap5.xmlsrc
index f32f9eb590..a83d1d77d2 100644
--- a/lib/mnesia/doc/src/Mnesia_chap5.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_chap5.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_chap7.xmlsrc b/lib/mnesia/doc/src/Mnesia_chap7.xmlsrc
index fa8fa6bbb0..ffbbdadec0 100644
--- a/lib/mnesia/doc/src/Mnesia_chap7.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_chap7.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_chap8.xml b/lib/mnesia/doc/src/Mnesia_chap8.xml
index 8a4ed8a23d..f1a469e315 100644
--- a/lib/mnesia/doc/src/Mnesia_chap8.xml
+++ b/lib/mnesia/doc/src/Mnesia_chap8.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/Mnesia_overview.xml b/lib/mnesia/doc/src/Mnesia_overview.xml
index b0d67d3e1a..d2d597b85d 100644
--- a/lib/mnesia/doc/src/Mnesia_overview.xml
+++ b/lib/mnesia/doc/src/Mnesia_overview.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/book.xml b/lib/mnesia/doc/src/book.xml
index 4c638bffc0..c4714a012c 100644
--- a/lib/mnesia/doc/src/book.xml
+++ b/lib/mnesia/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/company.erl b/lib/mnesia/doc/src/company.erl
index 0cc9d249cc..20e3235347 100644
--- a/lib/mnesia/doc/src/company.erl
+++ b/lib/mnesia/doc/src/company.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/doc/src/company_o.erl b/lib/mnesia/doc/src/company_o.erl
index 9b75d3fb3c..7300e9d4bb 100644
--- a/lib/mnesia/doc/src/company_o.erl
+++ b/lib/mnesia/doc/src/company_o.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/doc/src/mnesia.xml b/lib/mnesia/doc/src/mnesia.xml
index f441ba4c63..b35214cde9 100644
--- a/lib/mnesia/doc/src/mnesia.xml
+++ b/lib/mnesia/doc/src/mnesia.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -2356,7 +2356,6 @@ mnesia:create_table(employee,
<name>table(Tab [,[Option]]) -> QueryHandle</name>
<fsummary>Return a QLC query handle.</fsummary>
<desc>
- <marker id="qlc_table"></marker>
<marker id="table"></marker>
<p>Returns a Query List Comprehension (QLC) query handle,
see the <seealso marker="stdlib:qlc">qlc(3)</seealso>
diff --git a/lib/mnesia/doc/src/mnesia_frag_hash.xml b/lib/mnesia/doc/src/mnesia_frag_hash.xml
index 7e532634d0..95f5f8aa07 100644
--- a/lib/mnesia/doc/src/mnesia_frag_hash.xml
+++ b/lib/mnesia/doc/src/mnesia_frag_hash.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2002</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/mnesia_registry.xml b/lib/mnesia/doc/src/mnesia_registry.xml
index b2529f08bd..cd778ae072 100644
--- a/lib/mnesia/doc/src/mnesia_registry.xml
+++ b/lib/mnesia/doc/src/mnesia_registry.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1998</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/notes.xml b/lib/mnesia/doc/src/notes.xml
index 18bb110104..7d8e8d0c44 100644
--- a/lib/mnesia/doc/src/notes.xml
+++ b/lib/mnesia/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -39,7 +39,28 @@
thus constitutes one section in this document. The title of each
section is the version number of Mnesia.</p>
- <section><title>Mnesia 4.13.4</title>
+ <section><title>Mnesia 4.14</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Added experimental external backend plugin api. This adds
+ the possibility for the user to write other storage
+ backends for data, for example by using shared memory or
+ ram-cached disk storage.</p>
+ <p>
+ The plugin api may change in future versions after being
+ battle tested.</p>
+ <p>
+ Own Id: OTP-13058</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Mnesia 4.13.4</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
diff --git a/lib/mnesia/doc/src/notes_history.xml b/lib/mnesia/doc/src/notes_history.xml
index b1c050a8af..2300a1ecac 100644
--- a/lib/mnesia/doc/src/notes_history.xml
+++ b/lib/mnesia/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/part.xml b/lib/mnesia/doc/src/part.xml
index 3406da4a34..101bdb29d4 100644
--- a/lib/mnesia/doc/src/part.xml
+++ b/lib/mnesia/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/part_notes.xml b/lib/mnesia/doc/src/part_notes.xml
index e1f475a40d..1e4e4bc60a 100644
--- a/lib/mnesia/doc/src/part_notes.xml
+++ b/lib/mnesia/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/part_notes_history.xml b/lib/mnesia/doc/src/part_notes_history.xml
index fec251cea6..a1c6f5aef0 100644
--- a/lib/mnesia/doc/src/part_notes_history.xml
+++ b/lib/mnesia/doc/src/part_notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2004</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/doc/src/ref_man.xml b/lib/mnesia/doc/src/ref_man.xml
index 370267e3b8..662f0d61d6 100644
--- a/lib/mnesia/doc/src/ref_man.xml
+++ b/lib/mnesia/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/mnesia/examples/Makefile b/lib/mnesia/examples/Makefile
index 0410ea2e8e..5580f0bdcb 100644
--- a/lib/mnesia/examples/Makefile
+++ b/lib/mnesia/examples/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/examples/bench/bench.erl b/lib/mnesia/examples/bench/bench.erl
index 5a414edcf3..e049ab97c1 100644
--- a/lib/mnesia/examples/bench/bench.erl
+++ b/lib/mnesia/examples/bench/bench.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/examples/bench/bench.hrl b/lib/mnesia/examples/bench/bench.hrl
index 5f19513fb2..f312d76bd1 100644
--- a/lib/mnesia/examples/bench/bench.hrl
+++ b/lib/mnesia/examples/bench/bench.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/examples/bench/bench_generate.erl b/lib/mnesia/examples/bench/bench_generate.erl
index e838f07fbb..c0b33e40f2 100644
--- a/lib/mnesia/examples/bench/bench_generate.erl
+++ b/lib/mnesia/examples/bench/bench_generate.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/examples/bench/bench_populate.erl b/lib/mnesia/examples/bench/bench_populate.erl
index b35cc61b5a..c7bf2c52d6 100644
--- a/lib/mnesia/examples/bench/bench_populate.erl
+++ b/lib/mnesia/examples/bench/bench_populate.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/examples/bench/bench_trans.erl b/lib/mnesia/examples/bench/bench_trans.erl
index 85641b29d4..73934d4fb5 100644
--- a/lib/mnesia/examples/bench/bench_trans.erl
+++ b/lib/mnesia/examples/bench/bench_trans.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/examples/mnesia_meter.erl b/lib/mnesia/examples/mnesia_meter.erl
index 73f35a4a46..c278dfde93 100644
--- a/lib/mnesia/examples/mnesia_meter.erl
+++ b/lib/mnesia/examples/mnesia_meter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/examples/mnesia_tpcb.erl b/lib/mnesia/examples/mnesia_tpcb.erl
index c6eda1c448..fb39ee321d 100644
--- a/lib/mnesia/examples/mnesia_tpcb.erl
+++ b/lib/mnesia/examples/mnesia_tpcb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/include/Makefile b/lib/mnesia/include/Makefile
index fec963885c..6eed4d716f 100644
--- a/lib/mnesia/include/Makefile
+++ b/lib/mnesia/include/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1998-2012. All Rights Reserved.
+# Copyright Ericsson AB 1998-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/Makefile b/lib/mnesia/src/Makefile
index dae0df76f3..08a00e6aba 100644
--- a/lib/mnesia/src/Makefile
+++ b/lib/mnesia/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -43,6 +43,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/mnesia-$(VSN)
# ----------------------------------------------------
MODULES= \
mnesia \
+ mnesia_backend_type \
mnesia_backup \
mnesia_bup \
mnesia_checkpoint \
@@ -50,6 +51,7 @@ MODULES= \
mnesia_controller \
mnesia_dumper\
mnesia_event \
+ mnesia_ext_sup \
mnesia_frag \
mnesia_frag_hash \
mnesia_frag_old_hash \
diff --git a/lib/mnesia/src/mnesia.app.src b/lib/mnesia/src/mnesia.app.src
index c78a7cba1e..006ad4bac1 100644
--- a/lib/mnesia/src/mnesia.app.src
+++ b/lib/mnesia/src/mnesia.app.src
@@ -3,6 +3,7 @@
{vsn, "%VSN%"},
{modules, [
mnesia,
+ mnesia_backend_type,
mnesia_backup,
mnesia_bup,
mnesia_checkpoint,
@@ -10,6 +11,7 @@
mnesia_controller,
mnesia_dumper,
mnesia_event,
+ mnesia_ext_sup,
mnesia_frag,
mnesia_frag_hash,
mnesia_frag_old_hash,
diff --git a/lib/mnesia/src/mnesia.erl b/lib/mnesia/src/mnesia.erl
index 2fdc7afacd..9586adbf93 100644
--- a/lib/mnesia/src/mnesia.erl
+++ b/lib/mnesia/src/mnesia.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -82,7 +82,8 @@
system_info/0, % Not for public use
%% Database mgt
- create_schema/1, delete_schema/1,
+ create_schema/1, create_schema/2, delete_schema/1,
+ add_backend_type/2,
backup/1, backup/2, traverse_backup/4, traverse_backup/6,
install_fallback/1, install_fallback/2,
uninstall_fallback/0, uninstall_fallback/1,
@@ -197,6 +198,9 @@ e_has_var(X, Pos) ->
%% Start and stop
start() ->
+ start([]).
+
+start_() ->
{Time , Res} = timer:tc(application, start, [?APPLICATION, temporary]),
Secs = Time div 1000000,
@@ -232,7 +236,7 @@ patched_start([{Env, Val} | Tail]) when is_atom(Env) ->
patched_start([Head | _]) ->
{error, {bad_type, Head}};
patched_start([]) ->
- start().
+ start_().
stop() ->
case application:stop(?APPLICATION) of
@@ -297,6 +301,7 @@ ms() ->
%% Keep these last in the list, so
%% mnesia_sup kills these last
+ mnesia_ext_sup,
mnesia_monitor,
mnesia_event
].
@@ -556,22 +561,16 @@ write(_Tid, _Ts, Tab, Val, LockKind) ->
abort({bad_type, Tab, Val, LockKind}).
write_to_store(Tab, Store, Oid, Val) ->
- case ?catch_val({Tab, record_validation}) of
- {RecName, Arity, Type}
- when tuple_size(Val) == Arity, RecName == element(1, Val) ->
- case Type of
- bag ->
- ?ets_insert(Store, {Oid, Val, write});
- _ ->
- ?ets_delete(Store, Oid),
- ?ets_insert(Store, {Oid, Val, write})
- end,
- ok;
- {'EXIT', _} ->
- abort({no_exists, Tab});
- _ ->
- abort({bad_type, Val})
- end.
+ {_, _, Type} = mnesia_lib:validate_record(Tab, Val),
+ Oid = {Tab, element(2, Val)},
+ case Type of
+ bag ->
+ ?ets_insert(Store, {Oid, Val, write});
+ _ ->
+ ?ets_delete(Store, Oid),
+ ?ets_insert(Store, {Oid, Val, write})
+ end,
+ ok.
delete({Tab, Key}) ->
delete(Tab, Key, write);
@@ -1548,16 +1547,9 @@ dirty_write(Tab, Val) ->
do_dirty_write(SyncMode, Tab, Val)
when is_atom(Tab), Tab /= schema, is_tuple(Val), tuple_size(Val) > 2 ->
- case ?catch_val({Tab, record_validation}) of
- {RecName, Arity, _Type}
- when tuple_size(Val) == Arity, RecName == element(1, Val) ->
- Oid = {Tab, element(2, Val)},
- mnesia_tm:dirty(SyncMode, {Oid, Val, write});
- {'EXIT', _} ->
- abort({no_exists, Tab});
- _ ->
- abort({bad_type, Val})
- end;
+ {_, _, _} = mnesia_lib:validate_record(Tab, Val),
+ Oid = {Tab, element(2, Val)},
+ mnesia_tm:dirty(SyncMode, {Oid, Val, write});
do_dirty_write(_SyncMode, Tab, Val) ->
abort({bad_type, Tab, Val}).
@@ -1609,8 +1601,8 @@ dirty_update_counter(Tab, Key, Incr) ->
do_dirty_update_counter(SyncMode, Tab, Key, Incr)
when is_atom(Tab), Tab /= schema, is_integer(Incr) ->
- case ?catch_val({Tab, record_validation}) of
- {RecName, 3, set} ->
+ case mnesia_lib:validate_key(Tab, Key) of
+ {RecName, 3, Type} when Type == set; Type == ordered_set ->
Oid = {Tab, Key},
mnesia_tm:dirty(SyncMode, {Oid, {RecName, Incr}, update_counter});
_ ->
@@ -1910,6 +1902,8 @@ raw_table_info(Tab, Item) ->
info_reply(?ets_info(Tab, Item), Tab, Item);
disc_only_copies ->
info_reply(dets:info(Tab, Item), Tab, Item);
+ {ext, Alias, Mod} ->
+ info_reply(catch Mod:info(Alias, Tab, Item), Tab, Item);
unknown ->
bad_info_reply(Tab, Item)
end
@@ -2022,15 +2016,26 @@ display_tab_info() ->
MasterTabs = mnesia_recover:get_master_node_tables(),
io:format("master node tables = ~p~n", [lists:sort(MasterTabs)]),
+ case get_backend_types() of
+ [] -> ok;
+ Ts -> list_backend_types(Ts, "backend types = ")
+ end,
+
+ case get_index_plugins() of
+ [] -> ok;
+ Ps -> list_index_plugins(Ps, "index plugins = ")
+ end,
+
Tabs = system_info(tables),
- {Unknown, Ram, Disc, DiscOnly} =
- lists:foldl(fun storage_count/2, {[], [], [], []}, Tabs),
+ {Unknown, Ram, Disc, DiscOnly, Ext} =
+ lists:foldl(fun storage_count/2, {[], [], [], [], []}, Tabs),
io:format("remote = ~p~n", [lists:sort(Unknown)]),
io:format("ram_copies = ~p~n", [lists:sort(Ram)]),
io:format("disc_copies = ~p~n", [lists:sort(Disc)]),
io:format("disc_only_copies = ~p~n", [lists:sort(DiscOnly)]),
+ [io:format("~-19s= ~p~n", [atom_to_list(A), Ts]) || {A,Ts} <- Ext],
Rfoldl = fun(T, Acc) ->
Rpat =
@@ -2038,7 +2043,7 @@ display_tab_info() ->
read_only ->
lists:sort([{A, read_only} || A <- val({T, active_replicas})]);
read_write ->
- table_info(T, where_to_commit)
+ [fix_wtc(W) || W <- table_info(T, where_to_commit)]
end,
case lists:keysearch(Rpat, 1, Acc) of
{value, {_Rpat, Rtabs}} ->
@@ -2051,12 +2056,60 @@ display_tab_info() ->
Rdisp = fun({Rpat, Rtabs}) -> io:format("~p = ~p~n", [Rpat, Rtabs]) end,
lists:foreach(Rdisp, lists:sort(Repl)).
-storage_count(T, {U, R, D, DO}) ->
+get_backend_types() ->
+ case ?catch_val({schema, user_property, mnesia_backend_types}) of
+ {'EXIT', _} ->
+ [];
+ {mnesia_backend_types, Ts} ->
+ lists:sort(Ts)
+ end.
+
+get_index_plugins() ->
+ case ?catch_val({schema, user_property, mnesia_index_plugins}) of
+ {'EXIT', _} ->
+ [];
+ {mnesia_index_plugins, Ps} ->
+ lists:sort(Ps)
+ end.
+
+
+list_backend_types([{A,M} | T] = Ts, Legend) ->
+ Indent = [$\s || _ <- Legend],
+ W = integer_to_list(
+ lists:foldl(fun({Alias,_}, Wa) ->
+ erlang:max(Wa, length(atom_to_list(Alias)))
+ end, 0, Ts)),
+ io:fwrite(Legend ++ "~-" ++ W ++ "s - ~s~n",
+ [atom_to_list(A), atom_to_list(M)]),
+ [io:fwrite(Indent ++ "~-" ++ W ++ "s - ~s~n",
+ [atom_to_list(A1), atom_to_list(M1)])
+ || {A1,M1} <- T].
+
+list_index_plugins([{N,M,F} | T] = Ps, Legend) ->
+ Indent = [$\s || _ <- Legend],
+ W = integer_to_list(
+ lists:foldl(fun({N1,_,_}, Wa) ->
+ erlang:max(Wa, length(pp_ix_name(N1)))
+ end, 0, Ps)),
+ io:fwrite(Legend ++ "~-" ++ W ++ "s - ~s:~s~n",
+ [pp_ix_name(N), atom_to_list(M), atom_to_list(F)]),
+ [io:fwrite(Indent ++ "~-" ++ W ++ "s - ~s:~s~n",
+ [pp_ix_name(N1), atom_to_list(M1), atom_to_list(F1)])
+ || {N1,M1,F1} <- T].
+
+pp_ix_name(N) ->
+ lists:flatten(io_lib:fwrite("~w", [N])).
+
+fix_wtc({N, {ext,A,_}}) -> {N, A};
+fix_wtc({N,A}) when is_atom(A) -> {N, A}.
+
+storage_count(T, {U, R, D, DO, Ext}) ->
case table_info(T, storage_type) of
- unknown -> {[T | U], R, D, DO};
- ram_copies -> {U, [T | R], D, DO};
- disc_copies -> {U, R, [T | D], DO};
- disc_only_copies -> {U, R, D, [T | DO]}
+ unknown -> {[T | U], R, D, DO, Ext};
+ ram_copies -> {U, [T | R], D, DO, Ext};
+ disc_copies -> {U, R, [T | D], DO, Ext};
+ disc_only_copies -> {U, R, D, [T | DO], Ext};
+ {ext, A, _} -> {U, R, D, DO, orddict:append(A, T, Ext)}
end.
system_info(Item) ->
@@ -2071,9 +2124,10 @@ system_info2(all) ->
system_info2(db_nodes) ->
DiscNs = ?catch_val({schema, disc_copies}),
RamNs = ?catch_val({schema, ram_copies}),
+ ExtNs = ?catch_val({schema, external_copies}),
if
- is_list(DiscNs), is_list(RamNs) ->
- DiscNs ++ RamNs;
+ is_list(DiscNs), is_list(RamNs), is_list(ExtNs) ->
+ DiscNs ++ RamNs ++ ExtNs;
true ->
case mnesia_schema:read_nodes() of
{ok, Nodes} -> Nodes;
@@ -2177,6 +2231,7 @@ system_info2(access_module) -> mnesia_monitor:get_env(access_module);
system_info2(auto_repair) -> mnesia_monitor:get_env(auto_repair);
system_info2(is_running) -> mnesia_lib:is_running();
system_info2(backup_module) -> mnesia_monitor:get_env(backup_module);
+system_info2(backend_types) -> mnesia_schema:backend_types();
system_info2(event_module) -> mnesia_monitor:get_env(event_module);
system_info2(debug) -> mnesia_monitor:get_env(debug);
system_info2(dump_log_load_regulation) -> mnesia_monitor:get_env(dump_log_load_regulation);
@@ -2213,6 +2268,7 @@ system_info_items(yes) ->
[
access_module,
auto_repair,
+ backend_types,
backup_module,
checkpoints,
db_nodes,
@@ -2306,11 +2362,17 @@ load_mnesia_or_abort() ->
%% Database mgt
create_schema(Ns) ->
- mnesia_bup:create_schema(Ns).
+ create_schema(Ns, []).
+
+create_schema(Ns, Properties) ->
+ mnesia_bup:create_schema(Ns, Properties).
delete_schema(Ns) ->
mnesia_schema:delete_schema(Ns).
+add_backend_type(Alias, Module) ->
+ mnesia_schema:add_backend_type(Alias, Module).
+
backup(Opaque) ->
mnesia_log:backup(Opaque).
diff --git a/lib/mnesia/src/mnesia.hrl b/lib/mnesia/src/mnesia.hrl
index 72940b4729..0716dd87c8 100644
--- a/lib/mnesia/src/mnesia.hrl
+++ b/lib/mnesia/src/mnesia.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -68,6 +68,7 @@
ram_copies = [], % [Node]
disc_copies = [], % [Node]
disc_only_copies = [], % [Node]
+ external_copies = [], % [{{Alias,Mod},[Node]}]
load_order = 0, % Integer
access_mode = read_write, % read_write | read_only
majority = false, % true | false
@@ -103,7 +104,7 @@
ram_copies = [],
disc_copies = [],
disc_only_copies = [],
- snmp = [],
+ ext = [],
schema_ops = []
}).
diff --git a/lib/mnesia/src/mnesia_backend_type.erl b/lib/mnesia/src/mnesia_backend_type.erl
new file mode 100644
index 0000000000..4791b82a01
--- /dev/null
+++ b/lib/mnesia/src/mnesia_backend_type.erl
@@ -0,0 +1,115 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%
+%% Behaviour definition for mnesia backend types.
+%%
+
+%%%header_doc_include
+
+-module(mnesia_backend_type).
+
+-export([behaviour_info/1]).
+
+%%%header_doc_include
+
+%%%impl_doc_include
+
+%% Note that mnesia considers all callbacks mandatory!!
+%%
+behaviour_info(callbacks) ->
+ [
+ {add_aliases, 1}, % (Aliases) -> ok
+ {check_definition, 4}, % (TypeAlias, Tab, Nodes, Properties) -> ok
+ {close_table, 2}, % (TypeAlias, Tab) -> ok
+ {create_table, 3}, % (TypeAlias, Tab, Properties) -> ok
+ {delete, 3}, % (TypeAlias, Tab, Key) -> true | ok
+ {delete_table, 2}, % (TypeAlias, Tab) -> ok
+ {first, 2}, % (TypeAlias, Tab) -> Key::Term | '$end_of_table'
+ {fixtable, 3}, % (TypeAlias, Tab, Bool) -> ok | true
+ {last, 2}, % (TypeAlias, Tab) -> Key::Term | '$end_of_table'
+ {index_is_consistent,3}, % (TypeAlias, IxTag, Bool) -> ok
+ {init_backend, 0}, % () -> ok
+ {info, 3}, % (TypeAlias, Tab, Item) -> Term
+ {insert, 3}, % (TypeAlias, Tab, Object) -> ok
+ {lookup, 3}, % (TypeAlias, Tab, Key) -> [Objects]
+ {is_index_consistent,2}, % (TypeAlias, IxTag) -> Bool
+ {load_table, 4}, % (TypeAlias, Tab, Reason, CsList) -> ok
+ {match_delete, 3}, % (TypeAlias, Tab, Pattern) -> ok
+ {next, 3}, % (TypeAlias, Tab, Key) -> Key::Term | '$end_of_table'
+ {prev, 3}, % (TypeAlias, Tab, Key) -> Key::Term | '$end_of_table'
+ {receiver_first_message, 4}, % (Sender, FirstMsg, Alias, Tab) -> {Size, State}
+ {receive_data, 5}, % (Data, Alias, Name, Sender, State) -> {more, State} | {{more, Msg}, State}
+ {receive_done, 4}, % (Alias, Tab, Sender, State) -> ok
+ {real_suffixes, 0}, % () -> [FileSuffix]
+ {remove_aliases, 1}, % (Aliases) -> ok
+ {repair_continuation, 2}, % (Continuation, MatchSpec) -> Continuation
+ {select, 1}, % (Continuation) -> {[Match], Continuation'} | '$end_of_table'
+ {select, 3}, % (TypeAlias, Tab, Pattern) -> {[Match], Continuation'} | '$end_of_table'
+ {select, 4}, % (TypeAlias, Tab, MatchSpec, Limit) {[Match], Continuation'} | '$end_of_table'
+ {sender_init, 4}, % (TypeAlias, Tab, LoadReason, Pid) ->
+ % {standard, Init(), Chunk()} | {Init(), Chunk()}
+ {semantics, 2}, % (TypeAlias, storage | types | index_fun | index_types) ->
+ % ram_copies | disc_copies, set | ordered_set | bag, fun(), ordered | bag
+ {slot, 3}, % (TypeAlias, Tab, Pos) -> '$end_of_table' | Objects | {error, Reason}
+ {sync_close_table, 2}, % (TypeAlias, Tab) -> ok
+ {tmp_suffixes, 0}, % () -> [FileSuffix]
+ {update_counter, 4}, % (TypeAlias, Tab, Counter, Val) -> NewVal
+ {validate_key, 6}, % (TypeAlias, Tab, RecName, Arity, Type, Key) -> {RecName, Arity, Type}
+ {validate_record, 6} % (TypeAlias, Tab, RecName, Arity, Type, Obj) -> {RecName, Arity, Type}
+ ].
+
+%%%impl_doc_include
+
+%% -type tab() :: atom().
+%% -type alias() :: atom().
+%% -type rec_name() :: atom().
+%% -type type() :: set | bag | ordered_set.
+%% -type proplist() :: [{atom(), any()}].
+%% -type key() :: any().
+%% -type db_object() :: tuple().
+
+%% -type matchspec() :: ets:match_spec().
+%% -type limit() :: integer() | infinity.
+
+%% -type cont_fun() :: any().
+%% -type cont() :: '$end_of_table' | cont_fun().
+
+%% -callback check_definition(alias(), tab(), [node()], proplist()) -> ok.
+%% -callback create_table(alias(), tab(), proplist()) -> tab().
+%% -callback load_table(alias(), tab(), any()) -> ok.
+%% -callback delete_table(alias(), tab()) -> ok.
+%% -callback first(alias(), tab()) -> key().
+%% -callback last(alias(), tab()) -> key().
+%% -callback next(alias(), tab(), key()) -> key().
+%% -callback prev(alias(), tab(), key()) -> key().
+%% -callback insert(alias(), tab(), db_object()) -> ok.
+%% -callback lookup(alias(), tab(), key()) -> [db_object()].
+%% -callback delete(alias(), tab(), key()) -> ok.
+%% -callback update_counter(alias(), tab(), key(), integer()) -> integer().
+%% -callback select(cont()) -> {list(), cont()}.
+%% -callback select(alias(), tab(), matchspec()) -> list() | '$end_of_table'.
+%% -callback select(alias(), tab(), matchspec(), limit()) -> {list(), cont()}.
+%% -callback slot(alias(), tab(), integer()) -> key().
+%% -callback validate_key(alias(), tab(), rec_name(), arity(), type(), key()) ->
+%% {rec_name(), arity(), type()}.
+%% -callback validate_record(alias(),tab(),rec_name(),arity(),type(),db_obj()) ->
+%% {rec_name(), arity(), type()}.
+%% -callback repair_continuation(cont(), matchspec()) -> cont().
diff --git a/lib/mnesia/src/mnesia_backup.erl b/lib/mnesia/src/mnesia_backup.erl
index 78107bda56..719e010c17 100644
--- a/lib/mnesia/src/mnesia_backup.erl
+++ b/lib/mnesia/src/mnesia_backup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_bup.erl b/lib/mnesia/src/mnesia_bup.erl
index 8b1143a352..3e55deb958 100644
--- a/lib/mnesia/src/mnesia_bup.erl
+++ b/lib/mnesia/src/mnesia_bup.erl
@@ -28,6 +28,7 @@
fallback_exists/0,
tm_fallback_start/1,
create_schema/1,
+ create_schema/2,
install_fallback/1,
install_fallback/2,
uninstall_fallback/0,
@@ -46,7 +47,7 @@
uninstall_fallback_master/2,
local_uninstall_fallback/2,
do_traverse_backup/7,
- trav_apply/4
+ trav_apply/5
]).
-include("mnesia.hrl").
@@ -81,7 +82,8 @@ iterate(Mod, Fun, Opaque, Acc) ->
R = #restore{bup_module = Mod, bup_data = Opaque},
try read_schema_section(R) of
{R2, {Header, Schema, Rest}} ->
- try iter(R2, Header, Schema, Fun, Acc, Rest) of
+ Ext = get_ext_types(Schema),
+ try iter(R2, Header, Schema, Ext, Fun, Acc, Rest) of
{ok, R3, Res} ->
close_read(R3),
{ok, Res}
@@ -96,17 +98,32 @@ iterate(Mod, Fun, Opaque, Acc) ->
Err
end.
-iter(R, Header, Schema, Fun, Acc, []) ->
+get_ext_types(Schema) ->
+ try
+ List = lookup_schema(schema, Schema),
+ case lists:keyfind(user_properties, 1, List) of
+ {_, Props} ->
+ proplists:get_value(
+ mnesia_backend_types, Props, []);
+ false ->
+ []
+ end
+ catch
+ throw:{error, {"Cannot lookup",_}} ->
+ []
+ end.
+
+iter(R, Header, Schema, Ext, Fun, Acc, []) ->
case safe_apply(R, read, [R#restore.bup_data]) of
{R2, []} ->
- Res = Fun([], Header, Schema, Acc),
+ Res = Fun([], Header, Schema, Ext, Acc),
{ok, R2, Res};
{R2, BupItems} ->
- iter(R2, Header, Schema, Fun, Acc, BupItems)
+ iter(R2, Header, Schema, Ext, Fun, Acc, BupItems)
end;
-iter(R, Header, Schema, Fun, Acc, BupItems) ->
- Acc2 = Fun(BupItems, Header, Schema, Acc),
- iter(R, Header, Schema, Fun, Acc2, []).
+iter(R, Header, Schema, Ext, Fun, Acc, BupItems) ->
+ Acc2 = Fun(BupItems, Header, Schema, Ext, Acc),
+ iter(R, Header, Schema, Ext, Fun, Acc2, []).
-spec safe_apply(#restore{}, atom(), list()) -> tuple().
safe_apply(R, write, [_, Items]) when Items =:= [] ->
@@ -262,7 +279,7 @@ convert_0_1(Schema) ->
Cs = mnesia_schema:list2cs(List),
convert_0_1(Schema2, [], Cs);
false ->
- List = mnesia_schema:get_initial_schema(disc_copies, [node()]),
+ List = mnesia_schema:get_initial_schema(disc_copies, [node()], []),
Cs = mnesia_schema:list2cs(List),
convert_0_1(Schema, [], Cs)
end.
@@ -310,16 +327,19 @@ schema2bup({schema, Tab, TableDef}) ->
%% Create schema on the given nodes
%% Requires that old schemas has been deleted
%% Returns ok | {error, Reason}
-create_schema([]) ->
- create_schema([node()]);
-create_schema(Ns) when is_list(Ns) ->
+create_schema(Nodes) ->
+ create_schema(Nodes, []).
+
+create_schema([], Props) ->
+ create_schema([node()], Props);
+create_schema(Ns, Props) when is_list(Ns), is_list(Props) ->
case is_set(Ns) of
true ->
- create_schema(Ns, mnesia_schema:ensure_no_schema(Ns));
+ create_schema(Ns, mnesia_schema:ensure_no_schema(Ns), Props);
false ->
{error, {combine_error, Ns}}
end;
-create_schema(Ns) ->
+create_schema(Ns, _Props) ->
{error, {badarg, Ns}}.
is_set(List) when is_list(List) ->
@@ -327,7 +347,7 @@ is_set(List) when is_list(List) ->
is_set(_) ->
false.
-create_schema(Ns, ok) ->
+create_schema(Ns, ok, Props) ->
%% Ensure that we access the intended Mnesia
%% directory. This function may not be called
%% during startup since it will cause the
@@ -346,7 +366,7 @@ create_schema(Ns, ok) ->
Str = mk_str(),
File = mnesia_lib:dir(Str),
file:delete(File),
- try make_initial_backup(Ns, File, Mod) of
+ try make_initial_backup(Ns, File, Mod, Props) of
{ok, _Res} ->
case do_install_fallback(File, Mod) of
ok ->
@@ -363,9 +383,9 @@ create_schema(Ns, ok) ->
{error, Reason} ->
{error, Reason}
end;
-create_schema(_Ns, {error, Reason}) ->
+create_schema(_Ns, {error, Reason}, _) ->
{error, Reason};
-create_schema(_Ns, Reason) ->
+create_schema(_Ns, Reason, _) ->
{error, Reason}.
mk_str() ->
@@ -373,7 +393,10 @@ mk_str() ->
lists:concat([node()] ++ Now ++ ".TMP").
make_initial_backup(Ns, Opaque, Mod) ->
- Orig = mnesia_schema:get_initial_schema(disc_copies, Ns),
+ make_initial_backup(Ns, Opaque, Mod, []).
+
+make_initial_backup(Ns, Opaque, Mod, Props) ->
+ Orig = mnesia_schema:get_initial_schema(disc_copies, Ns, Props),
Modded = proplists:delete(storage_properties, proplists:delete(majority, Orig)),
Schema = [{schema, schema, Modded}],
O2 = do_apply(Mod, open_write, [Opaque], Opaque),
@@ -486,15 +509,15 @@ install_fallback_master(ClientPid, FA) ->
State = {start, FA},
Opaque = FA#fallback_args.opaque,
Mod = FA#fallback_args.module,
- Res = iterate(Mod, fun restore_recs/4, Opaque, State),
+ Res = iterate(Mod, fun restore_recs/5, Opaque, State),
unlink(ClientPid),
ClientPid ! {self(), Res},
exit(shutdown).
-restore_recs(_, _, _, stop) ->
+restore_recs(_, _, _, _, stop) ->
throw({error, "restore_recs already stopped"});
-restore_recs(Recs, Header, Schema, {start, FA}) ->
+restore_recs(Recs, Header, Schema, Ext, {start, FA}) ->
%% No records in backup
Schema2 = convert_schema(Header#log_header.log_version, Schema),
CreateList = lookup_schema(schema, Schema2),
@@ -505,19 +528,19 @@ restore_recs(Recs, Header, Schema, {start, FA}) ->
Args = [self(), FA],
Pids = [spawn_link(N, ?MODULE, fallback_receiver, Args) || N <- Ns],
send_fallback(Pids, {start, Header, Schema2}),
- Res = restore_recs(Recs, Header, Schema2, Pids),
+ Res = restore_recs(Recs, Header, Schema2, Ext, Pids),
global:del_lock({{mnesia_table_lock, schema}, self()}, Ns),
Res
catch _:Reason ->
throw({error, {"Bad schema in restore_recs", Reason}})
end;
-restore_recs([], _Header, _Schema, Pids) ->
+restore_recs([], _Header, _Schema, _Ext, Pids) ->
send_fallback(Pids, swap),
send_fallback(Pids, stop),
stop;
-restore_recs(Recs, _, _, Pids) ->
+restore_recs(Recs, _, _, _, Pids) ->
send_fallback(Pids, {records, Recs}),
Pids.
@@ -716,7 +739,7 @@ do_fallback_start(true, false) ->
BupFile = fallback_bup(),
Mod = mnesia_backup,
LocalTabs = ?ets_new_table(mnesia_local_tables, [set, public, {keypos, 2}]),
- case iterate(Mod, fun restore_tables/4, BupFile, {start, LocalTabs}) of
+ case iterate(Mod, fun restore_tables/5, BupFile, {start, LocalTabs}) of
{ok, _Res} ->
?SAFE(dets:close(schema)),
TmpSchema = mnesia_lib:tab2tmp(schema),
@@ -737,23 +760,24 @@ do_fallback_start(true, false) ->
{error, {"Cannot start from fallback", Reason}}
end.
-restore_tables(All=[Rec | Recs], Header, Schema, State={local, LocalTabs, LT}) ->
+restore_tables(All=[Rec | Recs], Header, Schema, Ext,
+ State={local, LocalTabs, LT}) ->
Tab = element(1, Rec),
if
Tab =:= LT#local_tab.name ->
Key = element(2, Rec),
(LT#local_tab.add)(Tab, Key, Rec, LT),
- restore_tables(Recs, Header, Schema, State);
+ restore_tables(Recs, Header, Schema, Ext, State);
true ->
NewState = {new, LocalTabs},
- restore_tables(All, Header, Schema, NewState)
+ restore_tables(All, Header, Schema, Ext, NewState)
end;
-restore_tables(All=[Rec | Recs], Header, Schema, {new, LocalTabs}) ->
+restore_tables(All=[Rec | Recs], Header, Schema, Ext, {new, LocalTabs}) ->
Tab = element(1, Rec),
case ?ets_lookup(LocalTabs, Tab) of
[] ->
State = {not_local, LocalTabs, Tab},
- restore_tables(Recs, Header, Schema, State);
+ restore_tables(Recs, Header, Schema, Ext, State);
[LT] when is_record(LT, local_tab) ->
State = {local, LocalTabs, LT},
case LT#local_tab.opened of
@@ -762,38 +786,39 @@ restore_tables(All=[Rec | Recs], Header, Schema, {new, LocalTabs}) ->
(LT#local_tab.open)(Tab, LT),
?ets_insert(LocalTabs,LT#local_tab{opened=true})
end,
- restore_tables(All, Header, Schema, State)
+ restore_tables(All, Header, Schema, Ext, State)
end;
-restore_tables(All=[Rec | Recs], Header, Schema, S = {not_local, LocalTabs, PrevTab}) ->
+restore_tables(All=[Rec | Recs], Header, Schema, Ext,
+ S = {not_local, LocalTabs, PrevTab}) ->
Tab = element(1, Rec),
if
Tab =:= PrevTab ->
- restore_tables(Recs, Header, Schema, S);
+ restore_tables(Recs, Header, Schema, Ext, S);
true ->
State = {new, LocalTabs},
- restore_tables(All, Header, Schema, State)
+ restore_tables(All, Header, Schema, Ext, State)
end;
-restore_tables(Recs, Header, Schema, {start, LocalTabs}) ->
+restore_tables(Recs, Header, Schema, Ext, {start, LocalTabs}) ->
Dir = mnesia_lib:dir(),
OldDir = filename:join([Dir, "OLD_DIR"]),
mnesia_schema:purge_dir(OldDir, []),
mnesia_schema:purge_dir(Dir, [fallback_name()]),
- init_dat_files(Schema, LocalTabs),
+ init_dat_files(Schema, Ext, LocalTabs),
State = {new, LocalTabs},
- restore_tables(Recs, Header, Schema, State);
-restore_tables([], _Header, _Schema, State) ->
+ restore_tables(Recs, Header, Schema, Ext, State);
+restore_tables([], _Header, _Schema, _Ext, State) ->
State.
%% Creates all neccessary dat files and inserts
%% the table definitions in the schema table
%%
%% Returns a list of local_tab tuples for all local tables
-init_dat_files(Schema, LocalTabs) ->
+init_dat_files(Schema, Ext, LocalTabs) ->
TmpFile = mnesia_lib:tab2tmp(schema),
Args = [{file, TmpFile}, {keypos, 2}, {type, set}],
case dets:open_file(schema, Args) of % Assume schema lock
{ok, _} ->
- create_dat_files(Schema, LocalTabs),
+ create_dat_files(Schema, Ext, LocalTabs),
ok = dets:close(schema),
LocalTab = #local_tab{name = schema,
storage_type = disc_copies,
@@ -808,10 +833,10 @@ init_dat_files(Schema, LocalTabs) ->
throw({error, {"Cannot open file", schema, Args, Reason}})
end.
-create_dat_files([{schema, schema, TabDef} | Tail], LocalTabs) ->
+create_dat_files([{schema, schema, TabDef} | Tail], Ext, LocalTabs) ->
ok = dets:insert(schema, {schema, schema, TabDef}),
- create_dat_files(Tail, LocalTabs);
-create_dat_files([{schema, Tab, TabDef} | Tail], LocalTabs) ->
+ create_dat_files(Tail, Ext, LocalTabs);
+create_dat_files([{schema, Tab, TabDef} | Tail], Ext, LocalTabs) ->
TmpFile = mnesia_lib:tab2tmp(Tab),
DatFile = mnesia_lib:tab2dat(Tab),
DclFile = mnesia_lib:tab2dcl(Tab),
@@ -824,56 +849,21 @@ create_dat_files([{schema, Tab, TabDef} | Tail], LocalTabs) ->
mnesia_lib:dets_sync_close(Tab),
file:delete(TmpFile),
- Cs = mnesia_schema:list2cs(TabDef),
+ Cs = mnesia_schema:list2cs(TabDef, Ext),
ok = dets:insert(schema, {schema, Tab, TabDef}),
RecName = Cs#cstruct.record_name,
Storage = mnesia_lib:cs_to_storage_type(node(), Cs),
+ delete_ext(Storage, Tab),
+ Semantics = mnesia_lib:semantics(Storage, storage),
if
- Storage =:= unknown ->
+ Semantics =:= undefined ->
ok = dets:delete(schema, {schema, Tab}),
- create_dat_files(Tail, LocalTabs);
- Storage =:= disc_only_copies ->
- Args = [{file, TmpFile}, {keypos, 2},
- {type, mnesia_lib:disk_type(Tab, Cs#cstruct.type)}],
- Open = fun(T, LT) when T =:= LT#local_tab.name ->
- case mnesia_lib:dets_sync_open(T, Args) of
- {ok, _} ->
- ok;
- {error, Reason} ->
- throw({error, {"Cannot open file", T, Args, Reason}})
- end
- end,
- Add = fun(T, Key, Rec, LT) when T =:= LT#local_tab.name ->
- case Rec of
- {_T, Key} ->
- ok = dets:delete(T, Key);
- (Rec) when T =:= RecName ->
- ok = dets:insert(Tab, Rec);
- (Rec) ->
- Rec2 = setelement(1, Rec, RecName),
- ok = dets:insert(T, Rec2)
- end
- end,
- Close = fun(T, LT) when T =:= LT#local_tab.name ->
- mnesia_lib:dets_sync_close(T)
- end,
- Swap = fun(T, LT) when T =:= LT#local_tab.name ->
- Expunge(),
- case LT#local_tab.opened of
- true ->
- Close(T,LT);
- false ->
- Open(T,LT),
- Close(T,LT)
- end,
- case file:rename(TmpFile, DatFile) of
- ok ->
- ok;
- {error, Reason} ->
- mnesia_lib:fatal("Cannot rename file ~p -> ~p: ~p~n",
- [TmpFile, DatFile, Reason])
- end
- end,
+ create_dat_files(Tail, Ext, LocalTabs);
+ Semantics =:= disc_only_copies ->
+ Open = disc_only_open_fun(Storage, Cs),
+ Add = disc_only_add_fun(Storage, Cs),
+ Close = disc_only_close_fun(Storage),
+ Swap = disc_only_swap_fun(Storage, Expunge, Open, Close),
LocalTab = #local_tab{name = Tab,
storage_type = Storage,
open = Open,
@@ -883,8 +873,8 @@ create_dat_files([{schema, Tab, TabDef} | Tail], LocalTabs) ->
record_name = RecName,
opened = false},
?ets_insert(LocalTabs, LocalTab),
- create_dat_files(Tail, LocalTabs);
- Storage =:= ram_copies; Storage =:= disc_copies ->
+ create_dat_files(Tail, Ext, LocalTabs);
+ Semantics =:= ram_copies; Storage =:= disc_copies ->
Open = fun(T, LT) when T =:= LT#local_tab.name ->
mnesia_log:open_log({?MODULE, T},
mnesia_log:dcl_log_header(),
@@ -945,18 +935,97 @@ create_dat_files([{schema, Tab, TabDef} | Tail], LocalTabs) ->
opened = false
},
?ets_insert(LocalTabs, LocalTab),
- create_dat_files(Tail, LocalTabs)
+ create_dat_files(Tail, Ext, LocalTabs);
+ true ->
+ error({unknown_semantics, [{semantics, Semantics},
+ {tabdef, TabDef},
+ {ext, Ext}]})
end;
-create_dat_files([{schema, Tab} | Tail], LocalTabs) ->
+create_dat_files([{schema, Tab} | Tail], Ext, LocalTabs) ->
?ets_delete(LocalTabs, Tab),
ok = dets:delete(schema, {schema, Tab}),
TmpFile = mnesia_lib:tab2tmp(Tab),
mnesia_lib:dets_sync_close(Tab),
file:delete(TmpFile),
- create_dat_files(Tail, LocalTabs);
-create_dat_files([], _LocalTabs) ->
+ create_dat_files(Tail, Ext, LocalTabs);
+create_dat_files([], _Ext, _LocalTabs) ->
ok.
+delete_ext({ext, Alias, Mod}, Tab) ->
+ Mod:close_table(Alias, Tab),
+ Mod:delete_table(Alias, Tab),
+ ok;
+delete_ext(_, _) ->
+ ok.
+
+
+disc_only_open_fun(disc_only_copies, #cstruct{name = Tab} =Cs) ->
+ TmpFile = mnesia_lib:tab2tmp(Tab),
+ Args = [{file, TmpFile}, {keypos, 2},
+ {type, mnesia_lib:disk_type(Tab, Cs#cstruct.type)}],
+ fun(T, LT) when T =:= LT#local_tab.name ->
+ case mnesia_lib:dets_sync_open(T, Args) of
+ {ok, _} ->
+ ok;
+ {error, Reason} ->
+ throw({error, {"Cannot open file", T, Args, Reason}})
+ end
+ end;
+disc_only_open_fun({ext,Alias,Mod}, Cs) ->
+ fun(T, LT) when T =:= LT#local_tab.name ->
+ ok = Mod:load_table(Alias, T, restore, mnesia_schema:cs2list(Cs))
+ end.
+
+disc_only_add_fun(Storage, #cstruct{name = Tab,
+ record_name = RecName}) ->
+ fun(T, Key, Rec, #local_tab{name = T}) when T =:= Tab->
+ case Rec of
+ {_T, Key} ->
+ ok = mnesia_lib:db_erase(Storage, T, Key);
+ (Rec) when T =:= RecName ->
+ ok = mnesia_lib:db_put(Storage, T, Rec);
+ (Rec) ->
+ ok = mnesia_lib:db_put(Storage, T,
+ setelement(1, Rec, RecName))
+ end
+ end.
+
+disc_only_close_fun(disc_only_copies) ->
+ fun(T, LT) when T =:= LT#local_tab.name ->
+ mnesia_lib:dets_sync_close(T)
+ end;
+disc_only_close_fun({ext, Alias, Mod}) ->
+ fun(T, _LT) ->
+ Mod:sync_close_table(Alias, T)
+ end.
+
+
+disc_only_swap_fun(disc_only_copies, Expunge, Open, Close) ->
+ fun(T, LT) when T =:= LT#local_tab.name ->
+ TmpFile = mnesia_lib:tab2tmp(T),
+ DatFile = mnesia_lib:tab2dat(T),
+ Expunge(),
+ case LT#local_tab.opened of
+ true ->
+ Close(T,LT);
+ false ->
+ Open(T,LT),
+ Close(T,LT)
+ end,
+ case file:rename(TmpFile, DatFile) of
+ ok ->
+ ok;
+ {error, Reason} ->
+ mnesia_lib:fatal("Cannot rename file ~p -> ~p: ~p~n",
+ [TmpFile, DatFile, Reason])
+ end
+ end;
+disc_only_swap_fun({ext, _Alias, _Mod}, _Expunge, _Open, Close) ->
+ fun(T, #local_tab{name = T} = LT) ->
+ Close(T, LT)
+ end.
+
+
uninstall_fallback() ->
uninstall_fallback([{scope, global}]).
@@ -1133,7 +1202,7 @@ do_traverse_backup(ClientPid, Source, SourceMod, Target, TargetMod, Fun, Acc) ->
end,
A = {start, Fun, Acc, TargetMod, Iter},
Res =
- case iterate(SourceMod, fun trav_apply/4, Source, A) of
+ case iterate(SourceMod, fun trav_apply/5, Source, A) of
{ok, {iter, _, Acc2, _, Iter2}} when TargetMod =/= read_only ->
try
do_apply(TargetMod, commit_write, [Iter2], Iter2),
@@ -1152,7 +1221,7 @@ do_traverse_backup(ClientPid, Source, SourceMod, Target, TargetMod, Fun, Acc) ->
unlink(ClientPid),
ClientPid ! {iter_done, self(), Res}.
-trav_apply(Recs, _Header, _Schema, {iter, Fun, Acc, Mod, Iter}) ->
+trav_apply(Recs, _Header, _Schema, _Ext, {iter, Fun, Acc, Mod, Iter}) ->
{NewRecs, Acc2} = filter_foldl(Fun, Acc, Recs),
if
Mod =/= read_only, NewRecs =/= [] ->
@@ -1161,7 +1230,7 @@ trav_apply(Recs, _Header, _Schema, {iter, Fun, Acc, Mod, Iter}) ->
true ->
{iter, Fun, Acc2, Mod, Iter}
end;
-trav_apply(Recs, Header, Schema, {start, Fun, Acc, Mod, Iter}) ->
+trav_apply(Recs, Header, Schema, Ext, {start, Fun, Acc, Mod, Iter}) ->
Iter2 =
if
Mod =/= read_only ->
@@ -1169,8 +1238,9 @@ trav_apply(Recs, Header, Schema, {start, Fun, Acc, Mod, Iter}) ->
true ->
Iter
end,
- TravAcc = trav_apply(Schema, Header, Schema, {iter, Fun, Acc, Mod, Iter2}),
- trav_apply(Recs, Header, Schema, TravAcc).
+ TravAcc = trav_apply(Schema, Header, Schema, Ext,
+ {iter, Fun, Acc, Mod, Iter2}),
+ trav_apply(Recs, Header, Schema, Ext, TravAcc).
filter_foldl(Fun, Acc, [Head|Tail]) ->
case Fun(Head, Acc) of
diff --git a/lib/mnesia/src/mnesia_checkpoint.erl b/lib/mnesia/src/mnesia_checkpoint.erl
index 1407bc0557..9eb939e8d3 100644
--- a/lib/mnesia/src/mnesia_checkpoint.erl
+++ b/lib/mnesia/src/mnesia_checkpoint.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013
+%% Copyright Ericsson AB 1996-2016
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -675,6 +675,16 @@ tab2retainer({Tab, Name}) ->
FlatName = lists:flatten(io_lib:write(Name)),
mnesia_lib:dir(lists:concat([?MODULE, "_", Tab, "_", FlatName, ".RET"])).
+retainer_create(_Cp, R, Tab, Name, Ext = {ext, Alias, Mod}) ->
+ T = {Tab, retainer, Name},
+ P = mnesia_schema:cs2list(val({Tab, cstruct})),
+ Mod:delete_table(Alias, T),
+ ok = Mod:create_table(Alias, T, P),
+ Cs = val({Tab, cstruct}),
+ Mod:load_table(Alias, T, {retainer, create_table},
+ mnesia_schema:cs2list(Cs)),
+ dbg_out("Checkpoint retainer created ~p ~p~n", [Name, Tab]),
+ R#retainer{store = {Ext, T}, really_retain = true};
retainer_create(_Cp, R, Tab, Name, disc_only_copies) ->
Fname = tab2retainer({Tab, Name}),
file:delete(Fname),
@@ -734,15 +744,23 @@ traverse_dcd({Cont, Recs}, Log, Fun) -> %% trashed data??
traverse_dcd(eof, _Log, _Fun) ->
ok.
+retainer_get({{ext, Alias, Mod}, Store}, Key) ->
+ Mod:lookup(Alias, Store, Key);
retainer_get({ets, Store}, Key) -> ?ets_lookup(Store, Key);
retainer_get({dets, Store}, Key) -> dets:lookup(Store, Key).
+retainer_put({{ext, Alias, Mod}, Store}, Val) ->
+ Mod:insert(Alias, Store, Val);
retainer_put({ets, Store}, Val) -> ?ets_insert(Store, Val);
retainer_put({dets, Store}, Val) -> dets:insert(Store, Val).
+retainer_first({{ext, Alias, Mod}, Store}) ->
+ Mod:first(Alias, Store);
retainer_first({ets, Store}) -> ?ets_first(Store);
retainer_first({dets, Store}) -> dets:first(Store).
+retainer_next({{ext, Alias, Mod}, Store}, Key) ->
+ Mod:next(Alias, Store, Key);
retainer_next({ets, Store}, Key) -> ?ets_next(Store, Key);
retainer_next({dets, Store}, Key) -> dets:next(Store, Key).
@@ -761,11 +779,16 @@ retainer_next({dets, Store}, Key) -> dets:next(Store, Key).
retainer_fixtable(Tab, Bool) when is_atom(Tab) ->
mnesia_lib:db_fixtable(val({Tab, storage_type}), Tab, Bool);
+retainer_fixtable({Ext = {ext, _, _}, Tab}, Bool) ->
+ mnesia_lib:db_fixtable(Ext, Tab, Bool);
retainer_fixtable({ets, Tab}, Bool) ->
mnesia_lib:db_fixtable(ram_copies, Tab, Bool);
retainer_fixtable({dets, Tab}, Bool) ->
mnesia_lib:db_fixtable(disc_only_copies, Tab, Bool).
+retainer_delete({{ext, Alias, Mod}, Store}) ->
+ Mod:close_table(Alias, Store),
+ Mod:delete_table(Alias, Store);
retainer_delete({ets, Store}) ->
?ets_delete_table(Store);
retainer_delete({dets, Store}) ->
diff --git a/lib/mnesia/src/mnesia_checkpoint_sup.erl b/lib/mnesia/src/mnesia_checkpoint_sup.erl
index 680cd86182..ae3f77f37e 100644
--- a/lib/mnesia/src/mnesia_checkpoint_sup.erl
+++ b/lib/mnesia/src/mnesia_checkpoint_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_controller.erl b/lib/mnesia/src/mnesia_controller.erl
index 69ccc1d2c9..4791e2e290 100644
--- a/lib/mnesia/src/mnesia_controller.erl
+++ b/lib/mnesia/src/mnesia_controller.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -385,6 +385,8 @@ force_load_table(Tab) when is_atom(Tab), Tab /= schema ->
do_force_load_table(Tab);
disc_only_copies ->
do_force_load_table(Tab);
+ {ext, _, _} ->
+ do_force_load_table(Tab);
unknown ->
set({Tab, load_by_force}, true),
cast({force_load_updated, Tab}),
@@ -1533,8 +1535,8 @@ update_whereabouts(Tab, Node, State) ->
Storage == unknown ->
%% No own copy, continue to read remotely
add_active_replica(Tab, Node),
- NodeST = mnesia_lib:storage_type_at_node(Node, Tab),
- ReadST = mnesia_lib:storage_type_at_node(Read, Tab),
+ NodeST = mnesia_lib:semantics(mnesia_lib:storage_type_at_node(Node, Tab), storage),
+ ReadST = mnesia_lib:semantics(mnesia_lib:storage_type_at_node(Read, Tab), storage),
if %% Avoid reading from disc_only_copies
NodeST == disc_only_copies ->
ignore;
@@ -1588,6 +1590,7 @@ last_consistent_replica(Tab, Downs) ->
Ram = Cs#cstruct.ram_copies,
Disc = Cs#cstruct.disc_copies,
DiscOnly = Cs#cstruct.disc_only_copies,
+ Ext = Cs#cstruct.external_copies,
BetterCopies0 = mnesia_lib:remote_copy_holders(Cs) -- Downs,
BetterCopies = BetterCopies0 -- Ram,
AccessMode = Cs#cstruct.access_mode,
@@ -1620,7 +1623,7 @@ last_consistent_replica(Tab, Downs) ->
false;
Storage == ram_copies ->
if
- Disc == [], DiscOnly == [] ->
+ Disc == [], DiscOnly == [], Ext == [] ->
%% Nobody has copy on disc
{true, {Tab, ram_only}};
true ->
@@ -1865,6 +1868,11 @@ info([Tab | Tail]) ->
dets:info(Tab, size),
dets:info(Tab, file_size),
"bytes on disc");
+ {ext, Alias, Mod} ->
+ info_format(Tab,
+ Mod:info(Alias, Tab, size),
+ Mod:info(Alias, Tab, memory),
+ "words of mem");
_ ->
info_format(Tab,
?ets_info(Tab, size),
diff --git a/lib/mnesia/src/mnesia_dumper.erl b/lib/mnesia/src/mnesia_dumper.erl
index 0e954d869d..eb02a585a6 100644
--- a/lib/mnesia/src/mnesia_dumper.erl
+++ b/lib/mnesia/src/mnesia_dumper.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -38,6 +38,8 @@
needs_dump_ets/1,
raw_dump_table/2,
raw_named_dump_table/2,
+ dump_to_logfile/2,
+ load_from_logfile/3,
start_regulator/0,
opt_dump_log/1,
update/3,
@@ -227,11 +229,11 @@ insert_rec(Rec, InPlace, InitBy, LogV) when is_record(Rec, commit) ->
D = Rec#commit.decision,
case mnesia_recover:wait_for_decision(D, InitBy) of
{Tid, committed} ->
- do_insert_rec(Tid, Rec, InPlace, InitBy, LogV);
+ do_insert_rec(Tid, mnesia_tm:new_cr_format(Rec), InPlace, InitBy, LogV);
{Tid, aborted} ->
case InitBy of
startup ->
- mnesia_schema:undo_prepare_commit(Tid, Rec);
+ mnesia_schema:undo_prepare_commit(Tid, mnesia_tm:new_cr_format(Rec));
_ ->
ok
end
@@ -271,15 +273,30 @@ do_insert_rec(Tid, Rec, InPlace, InitBy, LogV) ->
end
end,
D = Rec#commit.disc_copies,
+ ExtOps = commit_ext(Rec),
insert_ops(Tid, disc_copies, D, InPlace, InitBy, LogV),
+ [insert_ops(Tid, Ext, Ops, InPlace, InitBy, LogV) ||
+ {Ext, Ops} <- ExtOps,
+ storage_semantics(Ext) == disc_copies],
case InitBy of
startup ->
DO = Rec#commit.disc_only_copies,
- insert_ops(Tid, disc_only_copies, DO, InPlace, InitBy, LogV);
+ insert_ops(Tid, disc_only_copies, DO, InPlace, InitBy, LogV),
+ [insert_ops(Tid, Ext, Ops, InPlace, InitBy, LogV) ||
+ {Ext, Ops} <- ExtOps, storage_semantics(Ext) == disc_only_copies];
_ ->
ignore
end.
+commit_ext(#commit{ext = []}) -> [];
+commit_ext(#commit{ext = Ext}) ->
+ case lists:keyfind(ext_copies, 1, Ext) of
+ {_, C} ->
+ lists:foldl(fun({Ext0, Op}, D) ->
+ orddict:append(Ext0, Op, D)
+ end, orddict:new(), C);
+ false -> []
+ end.
update(_Tid, [], _DumperMode) ->
dumped;
@@ -330,14 +347,15 @@ insert_ops(Tid, Storage, [Op | Ops], InPlace, InitBy, Ver) when Ver < "4.3" ->
%% Normal ops
disc_insert(_Tid, Storage, Tab, Key, Val, Op, InPlace, InitBy) ->
- case open_files(Tab, Storage, InPlace, InitBy) of
+ Semantics = storage_semantics(Storage),
+ case open_files(Tab, Semantics, Storage, InPlace, InitBy) of
true ->
- case Storage of
+ case Semantics of
disc_copies when Tab /= schema ->
mnesia_log:append({?MODULE,Tab}, {{Tab, Key}, Val, Op}),
ok;
_ ->
- dets_insert(Op,Tab,Key,Val)
+ dets_insert(Op,Tab,Key,Val,Storage)
end;
false ->
ignore
@@ -349,34 +367,37 @@ disc_insert(_Tid, Storage, Tab, Key, Val, Op, InPlace, InitBy) ->
%% Otherwise we will get a double increment.
%% This is perfect but update_counter is a dirty op.
-dets_insert(Op,Tab,Key,Val) ->
+dets_insert(Op,Tab,Key,Val, Storage0) ->
+ Storage = if Tab == schema -> disc_only_copies;
+ true -> Storage0
+ end,
case Op of
write ->
dets_updated(Tab,Key),
- ok = dets:insert(Tab, Val);
+ ok = mnesia_lib:db_put(Storage, Tab, Val);
delete ->
dets_updated(Tab,Key),
- ok = dets:delete(Tab, Key);
+ ok = mnesia_lib:db_erase(Storage, Tab, Key);
update_counter ->
case dets_incr_counter(Tab,Key) of
true ->
{RecName, Incr} = Val,
- try _ = dets:update_counter(Tab, Key, Incr)
+ try _ = mnesia_lib:db_update_counter(Storage, Tab, Key, Incr)
catch error:_ when Incr < 0 ->
Zero = {RecName, Key, 0},
- ok = dets:insert(Tab, Zero);
+ ok = mnesia_lib:db_put(Storage, Tab, Zero);
error:_ ->
Init = {RecName, Key, Incr},
- ok = dets:insert(Tab, Init)
+ ok = mnesia_lib:db_put(Storage, Tab, Init)
end;
false -> ok
end;
delete_object ->
dets_updated(Tab,Key),
- ok = dets:delete_object(Tab, Val);
+ mnesia_lib:db_match_erase(Storage, Tab, Val);
clear_table ->
dets_cleared(Tab),
- ok = dets:delete_all_objects(Tab)
+ ok = mnesia_lib:db_match_erase(Storage, Tab, '_')
end.
dets_updated(Tab,Key) ->
@@ -431,23 +452,29 @@ insert(_Tid, _Storage, _Tab, _Key, [], _Op, _InPlace, _InitBy) ->
ok;
insert(Tid, Storage, Tab, Key, Val, Op, InPlace, InitBy) ->
+ Semantics = storage_semantics(Storage),
Item = {{Tab, Key}, Val, Op},
case InitBy of
startup ->
disc_insert(Tid, Storage, Tab, Key, Val, Op, InPlace, InitBy);
- _ when Storage == ram_copies ->
+ _ when Semantics == ram_copies ->
mnesia_tm:do_update_op(Tid, Storage, Item),
Snmp = mnesia_tm:prepare_snmp(Tab, Key, [Item]),
mnesia_tm:do_snmp(Tid, Snmp);
- _ when Storage == disc_copies ->
+ _ when Semantics == disc_copies ->
disc_insert(Tid, Storage, Tab, Key, Val, Op, InPlace, InitBy),
mnesia_tm:do_update_op(Tid, Storage, Item),
Snmp = mnesia_tm:prepare_snmp(Tab, Key, [Item]),
mnesia_tm:do_snmp(Tid, Snmp);
- _ when Storage == disc_only_copies ->
+ _ when Semantics == disc_only_copies ->
+ mnesia_tm:do_update_op(Tid, Storage, Item),
+ Snmp = mnesia_tm:prepare_snmp(Tab, Key, [Item]),
+ mnesia_tm:do_snmp(Tid, Snmp);
+
+ _ when element(1, Storage) == ext ->
mnesia_tm:do_update_op(Tid, Storage, Item),
Snmp = mnesia_tm:prepare_snmp(Tab, Key, [Item]),
mnesia_tm:do_snmp(Tid, Snmp);
@@ -456,6 +483,9 @@ insert(Tid, Storage, Tab, Key, Val, Op, InPlace, InitBy) ->
ignore
end.
+disc_delete_table(Tab, {ext, Alias, Mod}) ->
+ Mod:close_table(Alias, Tab),
+ Mod:delete_table(Alias, Tab);
disc_delete_table(Tab, Storage) ->
case mnesia_monitor:use_dir() of
true ->
@@ -485,11 +515,14 @@ disc_delete_table(Tab, Storage) ->
ok
end.
-disc_delete_indecies(_Tab, _Cs, Storage) when Storage /= disc_only_copies ->
- ok;
-disc_delete_indecies(Tab, Cs, disc_only_copies) ->
- Indecies = Cs#cstruct.index,
- mnesia_index:del_transient(Tab, Indecies, disc_only_copies).
+disc_delete_indecies(Tab, Cs, Storage) ->
+ case storage_semantics(Storage) of
+ disc_only_copies ->
+ Indecies = Cs#cstruct.index,
+ mnesia_index:del_transient(Tab, Indecies, Storage);
+ _ ->
+ ok
+ end.
insert_op(Tid, Storage, {{Tab, Key}, Val, Op}, InPlace, InitBy) ->
%% Propagate to disc only
@@ -515,6 +548,8 @@ insert_op(Tid, _, {op, change_table_copy_type, N, FromS, ToS, TabDef}, InPlace,
Cs = mnesia_schema:list2cs(TabDef),
Val = mnesia_schema:insert_cstruct(Tid, Cs, true), % Update ram only
{schema, Tab, _} = Val,
+ FromSem = storage_semantics(FromS),
+ ToSem = storage_semantics(ToS),
case lists:member(N, val({current, db_nodes})) of
true when InitBy /= startup ->
mnesia_controller:add_active_replica(Tab, N, Cs);
@@ -527,62 +562,118 @@ insert_op(Tid, _, {op, change_table_copy_type, N, FromS, ToS, TabDef}, InPlace,
Dat = mnesia_lib:tab2dat(Tab),
Dcd = mnesia_lib:tab2dcd(Tab),
Dcl = mnesia_lib:tab2dcl(Tab),
+ Logtmp = mnesia_lib:tab2logtmp(Tab),
case {FromS, ToS} of
- {ram_copies, disc_copies} when Tab == schema ->
- ok = ensure_rename(Dmp, Dat);
- {ram_copies, disc_copies} ->
- file:delete(Dcl),
- ok = ensure_rename(Dmp, Dcd);
- {disc_copies, ram_copies} when Tab == schema ->
- mnesia_lib:set(use_dir, false),
- mnesia_monitor:unsafe_close_dets(Tab),
- ok = file:delete(Dat);
- {disc_copies, ram_copies} ->
- _ = file:delete(Dcl),
- _ = file:delete(Dcd),
- ok;
- {ram_copies, disc_only_copies} ->
- ok = ensure_rename(Dmp, Dat),
- true = open_files(Tab, disc_only_copies, InPlace, InitBy),
- %% ram_delete_table must be done before init_indecies,
- %% it uses info which is reset in init_indecies,
- %% it doesn't matter, because init_indecies don't use
- %% the ram replica of the table when creating the disc
- %% index; Could be improved :)
- mnesia_schema:ram_delete_table(Tab, FromS),
- PosList = Cs#cstruct.index,
- mnesia_index:init_indecies(Tab, disc_only_copies, PosList);
- {disc_only_copies, ram_copies} ->
- mnesia_monitor:unsafe_close_dets(Tab),
- disc_delete_indecies(Tab, Cs, disc_only_copies),
- case InitBy of
- startup ->
- ignore;
+ {{ext,_FromAlias,_FromMod},{ext,ToAlias,ToMod}} ->
+ disc_delete_table(Tab, FromS),
+ ok = ToMod:delete_table(ToAlias, Tab),
+ ok = mnesia_monitor:unsafe_create_external(Tab, ToAlias, ToMod, TabDef),
+ ok = ToMod:load_table(ToAlias, Tab, {dumper,change_table_copy_type}, TabDef),
+ ok = load_from_logfile(ToS, Tab, Logtmp),
+ file:delete(Logtmp),
+ restore_indexes(Tab, ToS, Cs);
+
+ {_,{ext,ToAlias,ToMod}} ->
+ case FromSem of
+ ram_copies ->
+ mnesia_schema:ram_delete_table(Tab, FromS);
_ ->
- mnesia_controller:get_disc_copy(Tab),
- ok
+ if FromSem == disc_copies ->
+ mnesia_schema:ram_delete_table(
+ Tab, FromS);
+ true -> ok
+ end,
+ disc_delete_table(Tab, FromS)
end,
- disc_delete_table(Tab, disc_only_copies);
- {disc_copies, disc_only_copies} ->
- ok = ensure_rename(Dmp, Dat),
- true = open_files(Tab, disc_only_copies, InPlace, InitBy),
- mnesia_schema:ram_delete_table(Tab, FromS),
- PosList = Cs#cstruct.index,
- mnesia_index:init_indecies(Tab, disc_only_copies, PosList),
- _ = file:delete(Dcl),
- _ = file:delete(Dcd),
- ok;
- {disc_only_copies, disc_copies} ->
- mnesia_monitor:unsafe_close_dets(Tab),
- disc_delete_indecies(Tab, Cs, disc_only_copies),
- case InitBy of
- startup ->
- ignore;
- _ ->
- mnesia_log:ets2dcd(Tab),
- mnesia_controller:get_disc_copy(Tab),
- disc_delete_table(Tab, disc_only_copies)
- end
+
+ ok = ToMod:delete_table(ToAlias, Tab),
+ ok = mnesia_monitor:unsafe_create_external(Tab, ToAlias, ToMod, TabDef),
+ ok = ToMod:load_table(ToAlias, Tab, {dumper,change_table_copy_type}, TabDef),
+ ok = load_from_logfile(ToS, Tab, Logtmp),
+ file:delete(Logtmp),
+ restore_indexes(Tab, ToS, Cs);
+
+ {{ext,_FromAlias,_FromMod} = FromS, ToS} ->
+ disc_delete_table(Tab, FromS),
+ case ToS of
+ ram_copies ->
+ change_disc_to_ram(
+ Tab, Cs, FromS, ToS, Logtmp, InitBy);
+ disc_copies ->
+ Args = [{keypos, 2}, public, named_table,
+ Cs#cstruct.type],
+ mnesia_monitor:mktab(Tab, Args),
+ ok = load_from_logfile(ToS, Tab, Logtmp),
+ file:delete(Logtmp);
+ disc_only_copies ->
+ %% ok = ensure_rename(Dmp, Dat),
+ true = open_files(Tab, ToS, InPlace, InitBy),
+ ok = load_from_logfile(ToS, Tab, Logtmp),
+ file:delete(Logtmp)
+ end,
+ restore_indexes(Tab, ToS, Cs);
+
+ _NoneAreExt ->
+
+ case {FromSem, ToSem} of
+ {ram_copies, disc_copies} when Tab == schema ->
+ ok = ensure_rename(Dmp, Dat);
+ {ram_copies, disc_copies} ->
+ file:delete(Dcl),
+ ok = ensure_rename(Dmp, Dcd);
+ {disc_copies, ram_copies} when Tab == schema ->
+ mnesia_lib:set(use_dir, false),
+ mnesia_monitor:unsafe_close_dets(Tab),
+ ok = file:delete(Dat);
+ {disc_copies, ram_copies} ->
+ _ = file:delete(Dcl),
+ _ = file:delete(Dcd),
+ ok;
+ {ram_copies, disc_only_copies} ->
+ ok = ensure_rename(Dmp, Dat),
+ true = open_files(Tab, ToS, InPlace, InitBy),
+ %% ram_delete_table must be done before
+ %% init_indecies, it uses info which is reset
+ %% in init_indecies, it doesn't matter, because
+ %% init_indecies don't use the ram replica of
+ %% the table when creating the disc index;
+ %% Could be improved :)
+ mnesia_schema:ram_delete_table(Tab, FromS),
+ restore_indexes(Tab, ToS, Cs);
+ {disc_only_copies, ram_copies} when FromS == disc_only_copies ->
+ mnesia_monitor:unsafe_close_dets(Tab),
+ disc_delete_indecies(Tab, Cs, FromS),
+ case InitBy of
+ startup ->
+ ignore;
+ _ ->
+ mnesia_controller:get_disc_copy(Tab),
+ ok
+ end,
+ disc_delete_table(Tab, FromS);
+ {disc_only_copies, ram_copies} when element(1, FromS) == ext ->
+ change_disc_to_ram(
+ Tab, Cs, FromS, ToS, Logtmp, InitBy);
+ {disc_copies, disc_only_copies} ->
+ ok = ensure_rename(Dmp, Dat),
+ true = open_files(Tab, ToS, InPlace, InitBy),
+ mnesia_schema:ram_delete_table(Tab, FromS),
+ restore_indexes(Tab, ToS, Cs),
+ _ = file:delete(Dcl),
+ _ = file:delete(Dcd),
+ ok;
+ {disc_only_copies, disc_copies} ->
+ mnesia_monitor:unsafe_close_dets(Tab),
+ disc_delete_indecies(Tab, Cs, disc_only_copies),
+ case InitBy of
+ startup ->
+ ignore;
+ _ ->
+ mnesia_log:ets2dcd(Tab),
+ mnesia_controller:get_disc_copy(Tab),
+ disc_delete_table(Tab, disc_only_copies)
+ end
+ end
end;
true ->
ignore
@@ -607,6 +698,9 @@ insert_op(Tid, _, {op, restore_recreate, TabDef}, InPlace, InitBy) ->
Tab = Cs#cstruct.name,
Type = Cs#cstruct.type,
Storage = mnesia_lib:cs_to_storage_type(node(), Cs),
+ Semantics = if Storage==unknown -> unknown;
+ true -> storage_semantics(Storage)
+ end,
%% Delete all possibly existing files and tables
disc_delete_table(Tab, Storage),
disc_delete_indecies(Tab, Cs, Storage),
@@ -625,13 +719,13 @@ insert_op(Tid, _, {op, restore_recreate, TabDef}, InPlace, InitBy) ->
%% And create new ones..
if
- (InitBy == startup) or (Storage == unknown) ->
+ (InitBy == startup) or (Semantics == unknown) ->
ignore;
- Storage == ram_copies ->
+ Semantics == ram_copies ->
EtsProps = proplists:get_value(ets, StorageProps, []),
Args = [{keypos, 2}, public, named_table, Type | EtsProps],
mnesia_monitor:mktab(Tab, Args);
- Storage == disc_copies ->
+ Semantics == disc_copies ->
EtsProps = proplists:get_value(ets, StorageProps, []),
Args = [{keypos, 2}, public, named_table, Type | EtsProps],
mnesia_monitor:mktab(Tab, Args),
@@ -640,7 +734,7 @@ insert_op(Tid, _, {op, restore_recreate, TabDef}, InPlace, InitBy) ->
{repair, false}, {mode, read_write}],
{ok, Log} = mnesia_monitor:open_log(FArg),
mnesia_monitor:unsafe_close_log(Log);
- Storage == disc_only_copies ->
+ Storage == disc_only_copies -> % note: Storage, not Semantics
File = mnesia_lib:tab2dat(Tab),
file:delete(File),
DetsProps = proplists:get_value(dets, StorageProps, []),
@@ -649,7 +743,10 @@ insert_op(Tid, _, {op, restore_recreate, TabDef}, InPlace, InitBy) ->
{keypos, 2},
{repair, mnesia_monitor:get_env(auto_repair)}
| DetsProps ],
- mnesia_monitor:open_dets(Tab, Args)
+ mnesia_monitor:open_dets(Tab, Args);
+ element(1,Storage) == ext ->
+ {ext, Alias, Mod} = Storage,
+ Mod:create_table(Alias, Tab, [])
end,
insert_op(Tid, ignore, {op, create_table, TabDef}, InPlace, InitBy);
@@ -659,9 +756,10 @@ insert_op(Tid, _, {op, create_table, TabDef}, InPlace, InitBy) ->
Tab = Cs#cstruct.name,
Storage = mnesia_lib:cs_to_storage_type(node(), Cs),
StorageProps = Cs#cstruct.storage_properties,
+ Semantics = storage_semantics(Storage),
case InitBy of
startup ->
- case Storage of
+ case Semantics of
unknown ->
ignore;
ram_copies ->
@@ -679,20 +777,10 @@ insert_op(Tid, _, {op, create_table, TabDef}, InPlace, InitBy) ->
read_write),
mnesia_log:unsafe_close_log(temp)
end;
- _ ->
+ disc_only_copies ->
DetsProps = proplists:get_value(dets, StorageProps, []),
- Args = [{file, mnesia_lib:tab2dat(Tab)},
- {type, mnesia_lib:disk_type(Tab, Cs#cstruct.type)},
- {keypos, 2},
- {repair, mnesia_monitor:get_env(auto_repair)}
- | DetsProps ],
- case mnesia_monitor:open_dets(Tab, Args) of
- {ok, _} ->
- mnesia_monitor:unsafe_close_dets(Tab);
- {error, Error} ->
- exit({"Failed to create dets table", Error})
- end
+ try_create_disc_only_copy(Storage, Tab, Cs, DetsProps)
end;
_ ->
Copies = mnesia_lib:copy_holders(Cs),
@@ -715,7 +803,7 @@ insert_op(Tid, _, {op, create_table, TabDef}, InPlace, InitBy) ->
false ->
mnesia_lib:set({Tab, where_to_read}, node())
end,
- case Storage of
+ case Semantics of
ram_copies ->
ignore;
_ ->
@@ -838,7 +926,7 @@ insert_op(Tid, _, {op, del_table_copy, Storage, Node, TabDef}, InPlace, InitBy)
insert_cstruct(Tid, Cs, true, InPlace, InitBy);
Tab /= schema ->
mnesia_controller:del_active_replica(Tab, Node),
- mnesia_lib:del({Tab, Storage}, Node),
+ mnesia_lib:del({Tab, storage_alias(Storage)}, Node),
if
Node == node() ->
case Cs#cstruct.local_content of
@@ -896,9 +984,10 @@ insert_op(Tid, _, {op, add_index, Pos, TabDef}, InPlace, InitBy) ->
Cs = mnesia_schema:list2cs(TabDef),
Tab = insert_cstruct(Tid, Cs, true, InPlace, InitBy),
Storage = mnesia_lib:cs_to_storage_type(node(), Cs),
+ Semantics = storage_semantics(Storage),
case InitBy of
- startup when Storage == disc_only_copies ->
- true = open_files(Tab, Storage, InPlace, InitBy),
+ startup when Semantics == disc_only_copies ->
+ true = open_files(Tab, Semantics, Storage, InPlace, InitBy),
mnesia_index:init_indecies(Tab, Storage, [Pos]);
startup ->
ignore;
@@ -919,6 +1008,8 @@ insert_op(Tid, _, {op, del_index, Pos, TabDef}, InPlace, InitBy) ->
mnesia_index:del_index_table(Tab, Storage, Pos);
startup ->
ignore;
+ _ when element(1, Storage) == ext ->
+ mnesia_index:del_index_table(Tab, Storage, Pos);
_ ->
mnesia_index:del_index_table(Tab, Storage, Pos)
end,
@@ -958,19 +1049,68 @@ insert_op(Tid, _, {op, change_table_frag, _Change, TabDef}, InPlace, InitBy) ->
Cs = mnesia_schema:list2cs(TabDef),
insert_cstruct(Tid, Cs, true, InPlace, InitBy).
-open_files(Tab, Storage, UpdateInPlace, InitBy)
- when Storage /= unknown, Storage /= ram_copies ->
+
+storage_semantics({ext, Alias, Mod}) ->
+ Mod:semantics(Alias, storage);
+storage_semantics(Storage) when is_atom(Storage) ->
+ Storage.
+
+storage_alias({ext, Alias, _}) ->
+ Alias;
+storage_alias(Storage) when is_atom(Storage) ->
+ Storage.
+
+change_disc_to_ram(Tab, Cs, FromS, ToS, Logtmp, InitBy) ->
+ disc_delete_indecies(Tab, Cs, FromS),
+ case InitBy of
+ startup ->
+ ignore;
+ _ ->
+ %% ram table will already have been created
+ Tab = ets:info(Tab, name), %% assertion
+ load_from_logfile(ToS, Tab, Logtmp),
+ PosList = Cs#cstruct.index,
+ mnesia_index:init_indecies(Tab, ToS, PosList)
+ end,
+ disc_delete_table(Tab, FromS).
+
+
+try_create_disc_only_copy({ext,Alias,Mod}, Tab, Cs, _) ->
+ Mod:create_table(Alias, Tab, mnesia_schema:cs2list(Cs));
+try_create_disc_only_copy(disc_only_copies, Tab, Cs, DetsProps) ->
+ Args = [{file, mnesia_lib:tab2dat(Tab)},
+ {type, mnesia_lib:disk_type(Tab, Cs#cstruct.type)},
+ {keypos, 2},
+ {repair, mnesia_monitor:get_env(auto_repair)}
+ | DetsProps],
+ case mnesia_monitor:open_dets(Tab, Args) of
+ {ok, _} ->
+ mnesia_monitor:unsafe_close_dets(Tab);
+ {error, Error} ->
+ exit({"Failed to create dets table", Error})
+ end.
+
+restore_indexes(Tab, ToS, Cs) ->
+ PosList = Cs#cstruct.index,
+ mnesia_index:init_indecies(Tab, ToS, PosList).
+
+
+open_files(Tab, Storage, UpdateInPlace, InitBy) ->
+ open_files(Tab, storage_semantics(Storage), Storage, UpdateInPlace, InitBy).
+
+open_files(Tab, Semantics, Storage, UpdateInPlace, InitBy)
+ when Storage /= unknown, Semantics /= ram_copies ->
case get({?MODULE, Tab}) of
undefined ->
case ?catch_val({Tab, setorbag}) of
{'EXIT', _} ->
false;
Type ->
- case Storage of
- disc_copies when Tab /= schema ->
+ Cs = val({Tab, cstruct}),
+ if Semantics == disc_copies, Tab /= schema ->
Bool = open_disc_copies(Tab, InitBy),
Bool;
- _ ->
+ Storage == disc_only_copies; Tab == schema ->
Props = val({Tab, storage_properties}),
DetsProps = proplists:get_value(dets, Props, []),
Fname = prepare_open(Tab, UpdateInPlace),
@@ -981,6 +1121,12 @@ open_files(Tab, Storage, UpdateInPlace, InitBy)
| DetsProps],
{ok, _} = mnesia_monitor:open_dets(Tab, Args),
put({?MODULE, Tab}, {opened_dumper, dat}),
+ true;
+ element(1, Storage) == ext ->
+ {ext, Alias, Mod} = Storage,
+ Mod:load_table(Alias, Tab, InitBy,
+ mnesia_schema:cs2list(Cs)),
+ put({?MODULE, Tab}, {opened_dumper, ext}),
true
end
end;
@@ -989,7 +1135,7 @@ open_files(Tab, Storage, UpdateInPlace, InitBy)
{opened_dumper, _} ->
true
end;
-open_files(_Tab, _Storage, _UpdateInPlace, _InitBy) ->
+open_files(_Tab, _Semantics, _Storage, _UpdateInPlace, _InitBy) ->
false.
open_disc_copies(Tab, InitBy) ->
@@ -1076,12 +1222,13 @@ close_files(InPlace, Outcome, InitBy, [{{?MODULE, Tab}, already_dumped} | Tail])
close_files(InPlace, Outcome, InitBy, Tail);
close_files(InPlace, Outcome, InitBy, [{{?MODULE, Tab}, {opened_dumper, Type}} | Tail]) ->
erase({?MODULE, Tab}),
- case val({Tab, storage_type}) of
+ Storage = val({Tab, storage_type}),
+ case storage_semantics(Storage) of
disc_only_copies when InitBy /= startup ->
ignore;
- disc_copies when Tab /= schema ->
+ disc_copies when Storage /= unknown, Tab /= schema ->
mnesia_log:close_log({?MODULE,Tab});
- Storage ->
+ _ ->
do_close(InPlace, Outcome, Tab, Type, Storage)
end,
close_files(InPlace, Outcome, InitBy, Tail);
@@ -1093,11 +1240,16 @@ close_files(_, _, _InitBy, []) ->
%% If storage is unknown during close clean up files, this can happen if timing
%% is right and dirty_write conflicts with schema operations.
+do_close(_, _, Tab, ext, {ext,Alias,Mod}) ->
+ Mod:close_table(Alias, Tab);
do_close(_, _, Tab, dcl, unknown) ->
mnesia_log:close_log({?MODULE,Tab}),
file:delete(mnesia_lib:tab2dcl(Tab));
do_close(_, _, Tab, dcl, _) -> %% To be safe, can it happen?
mnesia_log:close_log({?MODULE,Tab});
+do_close(_, _, _Tab, ext, unknown) ->
+ %% Not sure what to do here, but let's not crash
+ ok;
do_close(InPlace, Outcome, Tab, dat, Storage) ->
mnesia_monitor:close_dets(Tab),
@@ -1148,7 +1300,8 @@ temp_set_master_nodes() ->
Tabs = val({schema, local_tables}),
Masters = [{Tab, (val({Tab, disc_copies}) ++
val({Tab, ram_copies}) ++
- val({Tab, disc_only_copies})) -- [node()]}
+ val({Tab, disc_only_copies}) ++
+ external_copies(Tab)) -- [node()]}
|| Tab <- Tabs],
%% UseDir = false since we don't want to remember these
%% masternodes and we are running (really soon anyway) since we want this
@@ -1156,6 +1309,13 @@ temp_set_master_nodes() ->
mnesia_recover:log_master_nodes(Masters, false, yes),
ok.
+external_copies(Tab) ->
+ case ?catch_val({Tab, external_copies}) of
+ {'EXIT',_} -> [];
+ Ext ->
+ lists:concat([Ns || {_, Ns} <- Ext])
+ end.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Raw dump of table. Dumper must have unique access to the ets table.
@@ -1207,6 +1367,59 @@ raw_named_dump_table(Tab, Ftype) ->
raw_dump_table(DetsRef, EtsRef) ->
dets:from_ets(DetsRef, EtsRef).
+dump_to_logfile(Storage, Tab) ->
+ case mnesia_monitor:use_dir() of
+ true ->
+ Logtmp = mnesia_lib:tab2logtmp(Tab),
+ file:delete(Logtmp),
+ case disk_log:open([{name, make_ref()},
+ {file, Logtmp},
+ {repair, false},
+ {linkto, self()}]) of
+ {ok, Fd} ->
+ mnesia_lib:db_fixtable(Storage, Tab, true),
+ try do_dump_to_logfile(Storage, Tab, Fd)
+ after
+ mnesia_lib:db_fixtable(Storage, Tab, false)
+ end;
+ {error, _} = Error ->
+ Error
+ end;
+ false ->
+ {error, {has_no_disc, node()}}
+ end.
+
+do_dump_to_logfile(Storage, Tab, Fd) ->
+ Pat = [{'_',[],['$_']}],
+ log_terms(mnesia_lib:db_select_init(Storage, Tab, Pat, 100), Storage, Tab, Pat, Fd).
+
+log_terms({Objs, Cont}, Storage, Tab, Pat, Fd) ->
+ ok = disk_log:alog_terms(Fd, Objs),
+ log_terms(mnesia_lib:db_select_cont(Storage, Cont, '_'), Storage, Tab, Pat, Fd);
+log_terms('$end_of_table', _, _, _, Fd) ->
+ disk_log:close(Fd).
+
+load_from_logfile(Storage, Tab, F) ->
+ case disk_log:open([{name, make_ref()},
+ {file, F},
+ {repair, true},
+ {linkto, self()}]) of
+ {ok, Fd} ->
+ chunk_from_log(disk_log:chunk(Fd, start), Fd, Storage, Tab);
+ {repaired, Fd, _, _} ->
+ chunk_from_log(disk_log:chunk(Fd, start), Fd, Storage, Tab);
+ {error, _} = E ->
+ E
+ end.
+
+chunk_from_log({Cont, Terms}, Fd, Storage, Tab) ->
+ _ = [mnesia_lib:db_put(Storage, Tab, T) || T <- Terms],
+ chunk_from_log(disk_log:chunk(Fd, Cont), Fd, Storage, Tab);
+chunk_from_log(eof, _, _, _) ->
+ ok.
+
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Load regulator
%%
diff --git a/lib/mnesia/src/mnesia_event.erl b/lib/mnesia/src/mnesia_event.erl
index 58806793e5..7320d381ea 100644
--- a/lib/mnesia/src/mnesia_event.erl
+++ b/lib/mnesia/src/mnesia_event.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_ext_sup.erl b/lib/mnesia/src/mnesia_ext_sup.erl
new file mode 100644
index 0000000000..3e6c72161c
--- /dev/null
+++ b/lib/mnesia/src/mnesia_ext_sup.erl
@@ -0,0 +1,59 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%
+%% This module implements a supervisor for external (plug-in) processes
+
+-module(mnesia_ext_sup).
+-behaviour(supervisor).
+
+-export([start/0,
+ init/1,
+ start_proc/4, start_proc/5,
+ stop_proc/1]).
+
+-define(SHUTDOWN, 120000). % 2 minutes
+
+start() ->
+ supervisor:start_link({local, ?MODULE}, ?MODULE, []).
+
+start_proc(Name, M, F, A) ->
+ start_proc(Name, M, F, A, []).
+
+start_proc(Name, M, F, A, Opts) ->
+ [Restart, Shutdown, Type, Modules] =
+ [proplists:get_value(K, Opts, Default)
+ || {K, Default} <- [{restart, transient},
+ {shutdown, ?SHUTDOWN},
+ {type, worker},
+ {modules, [M]}]],
+ case supervisor:start_child(
+ ?MODULE, {Name, {M,F,A}, Restart, Shutdown, Type, Modules}) of
+ {error, already_present} ->
+ supervisor:restart_child(?MODULE, Name);
+ Other ->
+ Other
+ end.
+
+stop_proc(Name) ->
+ supervisor:terminate_child(?MODULE, Name).
+
+init(_) ->
+ {ok, {{one_for_all, 10, 60}, []}}.
diff --git a/lib/mnesia/src/mnesia_frag.erl b/lib/mnesia/src/mnesia_frag.erl
index cbb0dfb3be..c6e812b36d 100644
--- a/lib/mnesia/src/mnesia_frag.erl
+++ b/lib/mnesia/src/mnesia_frag.erl
@@ -1,7 +1,7 @@
%%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -183,6 +183,8 @@ table_info2(ActivityId, Opaque, Tab, Frag, Item) ->
length(val({Tab, disc_copies}));
n_disc_only_copies ->
length(val({Tab, disc_only_copies}));
+ n_external_copies ->
+ length(val({Tab, external_copies}));
frag_names ->
frag_names(Tab);
@@ -498,13 +500,13 @@ expand_cstruct(Cs, Mode) ->
%% Verify keys
ValidKeys = [foreign_key, n_fragments, node_pool,
n_ram_copies, n_disc_copies, n_disc_only_copies,
- hash_module, hash_state],
+ n_external_copies, hash_module, hash_state],
Keys = mnesia_schema:check_keys(Tab, Props, ValidKeys),
mnesia_schema:check_duplicates(Tab, Keys),
%% Pick fragmentation props
ForeignKey = mnesia_schema:pick(Tab, foreign_key, Props, undefined),
- {ForeignKey2, N, Pool, DefaultNR, DefaultND, DefaultNDO} =
+ {ForeignKey2, N, Pool, DefaultNR, DefaultND, DefaultNDO, DefaultNExt} =
pick_props(Tab, Cs, ForeignKey),
%% Verify node_pool
@@ -518,6 +520,7 @@ expand_cstruct(Cs, Mode) ->
NR = mnesia_schema:pick(Tab, n_ram_copies, Props, 0),
ND = mnesia_schema:pick(Tab, n_disc_copies, Props, 0),
NDO = mnesia_schema:pick(Tab, n_disc_only_copies, Props, 0),
+ NExt = mnesia_schema:pick(Tab, n_external_copies, Props, 0),
PosInt = fun(I) when is_integer(I), I >= 0 -> true;
(_I) -> false
@@ -528,6 +531,8 @@ expand_cstruct(Cs, Mode) ->
{bad_type, Tab, {n_disc_copies, ND}}),
mnesia_schema:verify(true, PosInt(NDO),
{bad_type, Tab, {n_disc_only_copies, NDO}}),
+ mnesia_schema:verify(true, PosInt(NExt),
+ {bad_type, Tab, {n_external_copies, NDO}}),
%% Verify n_fragments
Cs2 = verify_n_fragments(N, Cs, Mode),
@@ -542,13 +547,13 @@ expand_cstruct(Cs, Mode) ->
hash_module = HashMod,
hash_state = HashState2},
if
- NR == 0, ND == 0, NDO == 0 ->
- do_expand_cstruct(Cs2, FH, N, Pool, DefaultNR, DefaultND, DefaultNDO, Mode);
+ NR == 0, ND == 0, NDO == 0, NExt == 0 ->
+ do_expand_cstruct(Cs2, FH, N, Pool, DefaultNR, DefaultND, DefaultNDO, DefaultNExt, Mode);
true ->
- do_expand_cstruct(Cs2, FH, N, Pool, NR, ND, NDO, Mode)
+ do_expand_cstruct(Cs2, FH, N, Pool, NR, ND, NDO, NExt, Mode)
end.
-do_expand_cstruct(Cs, FH, N, Pool, NR, ND, NDO, Mode) ->
+do_expand_cstruct(Cs, FH, N, Pool, NR, ND, NDO, NExt, Mode) ->
Tab = Cs#cstruct.name,
LC = Cs#cstruct.local_content,
@@ -562,14 +567,15 @@ do_expand_cstruct(Cs, FH, N, Pool, NR, ND, NDO, Mode) ->
%% Add empty fragments
CommonProps = [{base_table, Tab}],
Cs2 = Cs#cstruct{frag_properties = lists:sort(CommonProps)},
- expand_frag_cstructs(N, NR, ND, NDO, Cs2, Pool, Pool, FH, Mode).
+ expand_frag_cstructs(N, NR, ND, NDO, NExt, Cs2, Pool, Pool, FH, Mode).
verify_n_fragments(N, Cs, Mode) when is_integer(N), N >= 1 ->
case Mode of
create ->
Cs#cstruct{ram_copies = [],
disc_copies = [],
- disc_only_copies = []};
+ disc_only_copies = [],
+ external_copies = []};
activate ->
Reason = {combine_error, Cs#cstruct.name, {n_fragments, N}},
mnesia_schema:verify(1, N, Reason),
@@ -607,7 +613,8 @@ pick_props(Tab, Cs, {ForeignTab, Attr}) ->
DefaultNR = length(val({ForeignTab, ram_copies})),
DefaultND = length(val({ForeignTab, disc_copies})),
DefaultNDO = length(val({ForeignTab, disc_only_copies})),
- {Key, N, Pool, DefaultNR, DefaultND, DefaultNDO};
+ DefaultNExt = length(val({ForeignTab, external_copies})),
+ {Key, N, Pool, DefaultNR, DefaultND, DefaultNDO, DefaultNExt};
pick_props(Tab, Cs, undefined) ->
Props = Cs#cstruct.frag_properties,
DefaultN = 1,
@@ -617,22 +624,23 @@ pick_props(Tab, Cs, undefined) ->
DefaultNR = 1,
DefaultND = 0,
DefaultNDO = 0,
- {undefined, N, Pool, DefaultNR, DefaultND, DefaultNDO};
+ DefaultNExt = 0,
+ {undefined, N, Pool, DefaultNR, DefaultND, DefaultNDO, DefaultNExt};
pick_props(Tab, _Cs, BadKey) ->
mnesia:abort({bad_type, Tab, {foreign_key, BadKey}}).
-expand_frag_cstructs(N, NR, ND, NDO, CommonCs, Dist, Pool, FH, Mode)
+expand_frag_cstructs(N, NR, ND, NDO, NExt, CommonCs, Dist, Pool, FH, Mode)
when N > 1, Mode == create ->
Frag = n_to_frag_name(CommonCs#cstruct.name, N),
Cs = CommonCs#cstruct{name = Frag},
- {Cs2, RevModDist, RestDist} = set_frag_nodes(NR, ND, NDO, Cs, Dist, []),
+ {Cs2, RevModDist, RestDist} = set_frag_nodes(NR, ND, NDO, NExt, Cs, Dist, []),
ModDist = lists:reverse(RevModDist),
Dist2 = rearrange_dist(Cs, ModDist, RestDist, Pool),
%% Adjusts backwards, but it doesn't matter.
{FH2, _FromFrags, _AdditionalWriteFrags} = adjust_before_split(FH),
- CsList = expand_frag_cstructs(N - 1, NR, ND, NDO, CommonCs, Dist2, Pool, FH2, Mode),
+ CsList = expand_frag_cstructs(N - 1, NR, ND, NDO, NExt, CommonCs, Dist2, Pool, FH2, Mode),
[Cs2 | CsList];
-expand_frag_cstructs(1, NR, ND, NDO, CommonCs, Dist, Pool, FH, Mode) ->
+expand_frag_cstructs(1, NR, ND, NDO, NExt, CommonCs, Dist, Pool, FH, Mode) ->
BaseProps = CommonCs#cstruct.frag_properties ++
[{foreign_key, FH#frag_state.foreign_key},
{hash_module, FH#frag_state.hash_module},
@@ -645,25 +653,29 @@ expand_frag_cstructs(1, NR, ND, NDO, CommonCs, Dist, Pool, FH, Mode) ->
activate ->
[BaseCs];
create ->
- {BaseCs2, _, _} = set_frag_nodes(NR, ND, NDO, BaseCs, Dist, []),
+ {BaseCs2, _, _} = set_frag_nodes(NR, ND, NDO, NExt, BaseCs, Dist, []),
[BaseCs2]
end.
-set_frag_nodes(NR, ND, NDO, Cs, [Head | Tail], Acc) when NR > 0 ->
+set_frag_nodes(NR, ND, NDO, NExt, Cs, [Head | Tail], Acc) when NR > 0 ->
Pos = #cstruct.ram_copies,
{Cs2, Head2} = set_frag_node(Cs, Pos, Head),
- set_frag_nodes(NR - 1, ND, NDO, Cs2, Tail, [Head2 | Acc]);
-set_frag_nodes(NR, ND, NDO, Cs, [Head | Tail], Acc) when ND > 0 ->
+ set_frag_nodes(NR - 1, ND, NDO, NExt, Cs2, Tail, [Head2 | Acc]);
+set_frag_nodes(NR, ND, NDO, NExt, Cs, [Head | Tail], Acc) when ND > 0 ->
Pos = #cstruct.disc_copies,
{Cs2, Head2} = set_frag_node(Cs, Pos, Head),
- set_frag_nodes(NR, ND - 1, NDO, Cs2, Tail, [Head2 | Acc]);
-set_frag_nodes(NR, ND, NDO, Cs, [Head | Tail], Acc) when NDO > 0 ->
+ set_frag_nodes(NR, ND - 1, NDO, NExt, Cs2, Tail, [Head2 | Acc]);
+set_frag_nodes(NR, ND, NDO, NExt, Cs, [Head | Tail], Acc) when NDO > 0 ->
Pos = #cstruct.disc_only_copies,
{Cs2, Head2} = set_frag_node(Cs, Pos, Head),
- set_frag_nodes(NR, ND, NDO - 1, Cs2, Tail, [Head2 | Acc]);
-set_frag_nodes(0, 0, 0, Cs, RestDist, ModDist) ->
+ set_frag_nodes(NR, ND, NDO - 1, NExt, Cs2, Tail, [Head2 | Acc]);
+set_frag_nodes(NR, ND, NDO, NExt, Cs, [Head | Tail], Acc) when NExt > 0 ->
+ Pos = #cstruct.external_copies,
+ {Cs2, Head2} = set_frag_node(Cs, Pos, Head),
+ set_frag_nodes(NR, ND, NDO, NExt - 1, Cs2, Tail, [Head2 | Acc]);
+set_frag_nodes(0, 0, 0, 0, Cs, RestDist, ModDist) ->
{Cs, ModDist, RestDist};
-set_frag_nodes(_, _, _, Cs, [], _) ->
+set_frag_nodes(_, _, _, _, Cs, [], _) ->
mnesia:abort({combine_error, Cs#cstruct.name, "Too few nodes in node_pool"}).
set_frag_node(Cs, Pos, Head) ->
@@ -840,13 +852,15 @@ make_add_frag(Tab, SortedNs) ->
NR = length(Cs#cstruct.ram_copies),
ND = length(Cs#cstruct.disc_copies),
NDO = length(Cs#cstruct.disc_only_copies),
+ NExt = length(Cs#cstruct.external_copies),
NewCs = Cs#cstruct{name = NewFrag,
frag_properties = [{base_table, Tab}],
ram_copies = [],
disc_copies = [],
- disc_only_copies = []},
+ disc_only_copies = [],
+ external_copies = []},
- {NewCs2, _, _} = set_frag_nodes(NR, ND, NDO, NewCs, SortedNs, []),
+ {NewCs2, _, _} = set_frag_nodes(NR, ND, NDO, NExt, NewCs, SortedNs, []),
[NewOp] = mnesia_schema:make_create_table(NewCs2),
SplitOps = split(Tab, FH2, FromIndecies, FragNames, []),
@@ -1319,7 +1333,8 @@ count_frag([Frag | Frags], Dist) ->
Dist2 = incr_nodes(val({Frag, ram_copies}), Dist),
Dist3 = incr_nodes(val({Frag, disc_copies}), Dist2),
Dist4 = incr_nodes(val({Frag, disc_only_copies}), Dist3),
- count_frag(Frags, Dist4);
+ Dist5 = incr_nodes(val({Frag, external_copies}), Dist4),
+ count_frag(Frags, Dist5);
count_frag([], Dist) ->
Dist.
diff --git a/lib/mnesia/src/mnesia_frag_hash.erl b/lib/mnesia/src/mnesia_frag_hash.erl
index 2e4ebb98b0..ae4105382e 100644
--- a/lib/mnesia/src/mnesia_frag_hash.erl
+++ b/lib/mnesia/src/mnesia_frag_hash.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_frag_old_hash.erl b/lib/mnesia/src/mnesia_frag_old_hash.erl
index 707be6d121..b246c76236 100644
--- a/lib/mnesia/src/mnesia_frag_old_hash.erl
+++ b/lib/mnesia/src/mnesia_frag_old_hash.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_index.erl b/lib/mnesia/src/mnesia_index.erl
index 0c882c0df6..c79f790973 100644
--- a/lib/mnesia/src/mnesia_index.erl
+++ b/lib/mnesia/src/mnesia_index.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,8 +23,8 @@
-module(mnesia_index).
-export([read/5,
- add_index/5,
- delete_index/3,
+ add_index/6,
+ delete_index/4,
del_object_index/5,
clear_index/4,
dirty_match_object/3,
@@ -39,19 +39,21 @@
get_index_table/3,
tab2filename/2,
- tab2tmp_filename/2,
init_index/2,
init_indecies/3,
del_transient/2,
del_transient/3,
- del_index_table/3]).
+ del_index_table/3,
+
+ index_info/2,
+ ext_index_instances/1]).
-import(mnesia_lib, [val/1, verbose/2]).
-include("mnesia.hrl").
-record(index, {setorbag, pos_list}).
-%% read an object list throuh its index table
+%% read an object list through its index table
%% we assume that table Tab has index on attribute number Pos
read(Tid, Store, Tab, IxKey, Pos) ->
@@ -64,69 +66,103 @@ read(Tid, Store, Tab, IxKey, Pos) ->
ResList
end.
-add_index(Index, Tab, Key, Obj, Old) ->
- add_index2(Index#index.pos_list, Index#index.setorbag, Tab, Key, Obj, Old).
-
-add_index2([{Pos, Ixt} |Tail], bag, Tab, K, Obj, OldRecs) ->
- db_put(Ixt, {element(Pos, Obj), K}),
- add_index2(Tail, bag, Tab, K, Obj, OldRecs);
-add_index2([{Pos, Ixt} |Tail], Type, Tab, K, Obj, OldRecs0) ->
+ext_index_instances(Tab) ->
+ #index{pos_list = PosL} = val({Tab, index_info}),
+ lists:foldr(
+ fun({_, {{ext,Alias,Mod}, Tag}}, Acc) ->
+ [{Alias, Mod, Tag}|Acc];
+ (_, Acc) ->
+ Acc
+ end, [], PosL).
+
+
+add_index(#index{pos_list = PosL, setorbag = SorB},
+ Storage, Tab, Key, Obj, Old) ->
+ add_index2(PosL, SorB, Storage, Tab, Key, Obj, Old).
+
+add_index2([{{Pos,Type}, Ixt} |Tail], bag, Storage, Tab, K, Obj, OldRecs) ->
+ ValsF = index_vals_f(Storage, Tab, Pos),
+ Vals = ValsF(Obj),
+ put_index_vals(Type, Ixt, Vals, K),
+ add_index2(Tail, bag, Storage, Tab, K, Obj, OldRecs);
+add_index2([{{Pos, Type}, Ixt} |Tail], SorB, Storage, Tab, K, Obj, OldRecs0) ->
%% Remove old tuples in index if Tab is updated
+ ValsF = index_vals_f(Storage, Tab, Pos), NewVals = ValsF(Obj),
OldRecs1 = case OldRecs0 of
- undefined -> mnesia_lib:db_get(Tab, K);
+ undefined -> mnesia_lib:db_get(Storage, Tab, K);
_ -> OldRecs0
end,
- IdxVal = element(Pos, Obj),
- case [Old || Old <- OldRecs1, element(Pos, Old) =/= IdxVal] of
- [] when OldRecs1 =:= [] -> %% Write
- db_put(Ixt, {element(Pos, Obj), K}),
- add_index2(Tail, Type, Tab, K, Obj, OldRecs0);
+ IdxVal = ValsF(Obj),
+ case [Old || Old <- OldRecs1, ValsF(Old) =/= IdxVal] of
+ [] when OldRecs1 =:= [] -> % Write
+ put_index_vals(Type, Ixt, NewVals, K),
+ add_index2(Tail, SorB, Storage, Tab, K, Obj, OldRecs1);
[] -> %% when OldRecs1 =/= [] Update without modifying index field
- add_index2(Tail, Type, Tab, K, Obj, OldRecs0);
+ add_index2(Tail, SorB, Storage, Tab, K, Obj, OldRecs1);
OldRecs -> %% Update
- db_put(Ixt, {element(Pos, Obj), K}),
- del_ixes(Ixt, OldRecs, Pos, K),
- add_index2(Tail, Type, Tab, K, Obj, OldRecs0)
+ put_index_vals(Type, Ixt, NewVals, K),
+ [del_ixes(Type, Ixt, ValsF, OldObj, K) || OldObj <- OldRecs],
+ add_index2(Tail, SorB, Storage, Tab, K, Obj, OldRecs1)
end;
-add_index2([], _, _Tab, _K, _Obj, _) -> ok.
+add_index2([], _, _, _Tab, _K, _Obj, _) -> ok.
+
+delete_index(Index, Storage, Tab, K) ->
+ delete_index2(Index#index.pos_list, Storage, Tab, K).
-delete_index(Index, Tab, K) ->
- delete_index2(Index#index.pos_list, Tab, K).
+delete_index2([{{Pos, Type}, Ixt} | Tail], Storage, Tab, K) ->
+ DelObjs = mnesia_lib:db_get(Storage, Tab, K),
+ ValsF = index_vals_f(Storage, Tab, Pos),
+ [del_ixes(Type, Ixt, ValsF, Obj, K) || Obj <- DelObjs],
+ delete_index2(Tail, Storage, Tab, K);
+delete_index2([], _Storage, _Tab, _K) -> ok.
-delete_index2([{Pos, Ixt} | Tail], Tab, K) ->
- DelObjs = mnesia_lib:db_get(Tab, K),
- del_ixes(Ixt, DelObjs, Pos, K),
- delete_index2(Tail, Tab, K);
-delete_index2([], _Tab, _K) -> ok.
+put_index_vals(ordered, Ixt, Vals, K) ->
+ [db_put(Ixt, {{V, K}}) || V <- Vals];
+put_index_vals(bag, Ixt, Vals, K) ->
+ [db_put(Ixt, {V, K}) || V <- Vals].
-del_ixes(_Ixt, [], _Pos, _L) -> ok;
-del_ixes(Ixt, [Obj | Tail], Pos, Key) ->
- db_match_erase(Ixt, {element(Pos, Obj), Key}),
- del_ixes(Ixt, Tail, Pos, Key).
+del_ixes(bag, Ixt, ValsF, Obj, Key) ->
+ Vals = ValsF(Obj),
+ [db_match_erase(Ixt, {V, Key}) || V <- Vals];
+del_ixes(ordered, Ixt, ValsF, Obj, Key) ->
+ Vals = ValsF(Obj),
+ [db_erase(Ixt, {V,Key}) || V <- Vals].
-del_object_index(Index, Tab, K, Obj, Old) ->
- del_object_index2(Index#index.pos_list, Index#index.setorbag, Tab, K, Obj, Old).
+del_object_index(#index{pos_list = PosL, setorbag = SorB}, Storage, Tab, K, Obj) ->
+ del_object_index2(PosL, SorB, Storage, Tab, K, Obj).
-del_object_index2([], _, _Tab, _K, _Obj, _Old) -> ok;
-del_object_index2([{Pos, Ixt} | Tail], SoB, Tab, K, Obj, Old) ->
+del_object_index2([], _, _Storage, _Tab, _K, _Obj) -> ok;
+del_object_index2([{{Pos, Type}, Ixt} | Tail], SoB, Storage, Tab, K, Obj) ->
+ ValsF = index_vals_f(Storage, Tab, Pos),
case SoB of
bag ->
- del_object_bag(Tab, K, Obj, Pos, Ixt, Old);
+ del_object_bag(Type, ValsF, Tab, K, Obj, Ixt);
_ -> %% If set remove the tuple in index table
- del_ixes(Ixt, [Obj], Pos, K)
+ del_ixes(Type, Ixt, ValsF, Obj, K)
end,
- del_object_index2(Tail, SoB, Tab, K, Obj, Old).
-
-del_object_bag(Tab, Key, Obj, Pos, Ixt, undefined) ->
- IxKey = element(Pos, Obj),
- Old = [X || X <- mnesia_lib:db_get(Tab, Key), element(Pos, X) =:= IxKey],
- del_object_bag(Tab, Key, Obj, Pos, Ixt, Old);
-%% If Tab type is bag we need remove index identifier if the object being
-%% deleted was the last one
-del_object_bag(_Tab, Key, Obj, Pos, Ixt, Old) when Old =:= [Obj] ->
- del_ixes(Ixt, [Obj], Pos, Key);
-del_object_bag(_Tab, _Key, _Obj, _Pos, _Ixt, _Old) -> ok.
+ del_object_index2(Tail, SoB, Storage, Tab, K, Obj).
+
+del_object_bag(Type, ValsF, Tab, Key, Obj, Ixt) ->
+ IxKeys = ValsF(Obj),
+ Found = [{X, ValsF(X)} || X <- mnesia_lib:db_get(Tab, Key)],
+ del_object_bag_(IxKeys, Found, Type, Tab, Key, Obj, Ixt).
+
+del_object_bag_([IxK|IxKs], Found, Type, Tab, Key, Obj, Ixt) ->
+ case [X || {X, Ixes} <- Found, lists:member(IxK, Ixes)] of
+ [Old] when Old =:= Obj ->
+ case Type of
+ bag ->
+ db_match_erase(Ixt, {IxK, Key});
+ ordered ->
+ db_erase(Ixt, {{IxK, Key}})
+ end;
+ _ ->
+ ok
+ end,
+ del_object_bag_(IxKs, Found, Type, Tab, Key, Obj, Ixt);
+del_object_bag_([], _, _, _, _, _, _) ->
+ ok.
clear_index(Index, Tab, K, Obj) ->
clear_index2(Index#index.pos_list, Tab, K, Obj).
@@ -138,8 +174,9 @@ clear_index2([{_Pos, Ixt} | Tail], Tab, K, Obj) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-dirty_match_object(Tab, Pat, Pos) ->
+dirty_match_object(Tab, Pat, Pos) when is_integer(Pos) ->
%% Assume that we are on the node where the replica is
+ %% Cannot use index plugins here, as they don't map to match patterns
case element(2, Pat) of
'_' ->
IxKey = element(Pos, Pat),
@@ -161,7 +198,7 @@ realkeys(Tab, Pos, IxKey) ->
Index = get_index_table(Tab, Pos),
db_get(Index, IxKey). % a list on the form [{IxKey, RealKey1} , ....
-dirty_select(Tab, Spec, Pos) ->
+dirty_select(Tab, Spec, Pos) when is_integer(Pos) ->
%% Assume that we are on the node where the replica is
%% Returns the records without applying the match spec
%% The actual filtering is handled by the caller
@@ -171,59 +208,80 @@ dirty_select(Tab, Spec, Pos) ->
lists:append([mnesia_lib:db_get(StorageType, Tab, Key) || {_,Key} <- RealKeys]).
dirty_read(Tab, IxKey, Pos) ->
- ResList = mnesia:dirty_rpc(Tab, ?MODULE, dirty_read2,
- [Tab, IxKey, Pos]),
- case val({Tab, setorbag}) of
- bag ->
- %% Remove all tuples which don't include Ixkey
- mnesia_lib:key_search_all(IxKey, Pos, ResList);
- _ ->
- ResList
- end.
+ mnesia:dirty_rpc(Tab, ?MODULE, dirty_read2,
+ [Tab, IxKey, Pos]).
dirty_read2(Tab, IxKey, Pos) ->
- Ix = get_index_table(Tab, Pos),
- Keys = db_match(Ix, {IxKey, '$1'}),
- r_keys(Keys, Tab, []).
-
-r_keys([[H]|T],Tab,Ack) ->
- V = mnesia_lib:db_get(Tab, H),
- r_keys(T, Tab, V ++ Ack);
-r_keys([], _, Ack) ->
- Ack.
+ #index{pos_list = PosL} = val({Tab, index_info}),
+ Storage = val({Tab, storage_type}),
+ {Type, Ixt} = pick_index(PosL, Tab, Pos),
+ Pat = case Type of
+ ordered -> [{{{IxKey, '$1'}}, [], ['$1']}];
+ bag -> [{{IxKey, '$1'}, [], ['$1']}]
+ end,
+ Keys = db_select(Ixt, Pat),
+ ValsF = index_vals_f(Storage, Tab, Pos),
+ lists:reverse(
+ lists:foldl(
+ fun(K, Acc) ->
+ lists:foldl(
+ fun(Obj, Acc1) ->
+ case lists:member(IxKey, ValsF(Obj)) of
+ true -> [Obj|Acc1];
+ false -> Acc1
+ end
+ end, Acc, mnesia_lib:db_get(Storage, Tab, K))
+ end, [], Keys)).
+
+pick_index([{{{Pfx,_},IxType}, Ixt}|_], _Tab, {_} = Pfx) ->
+ {IxType, Ixt};
+pick_index([{{Pos,IxType}, Ixt}|_], _Tab, Pos) ->
+ {IxType, Ixt};
+pick_index([_|T], Tab, Pos) ->
+ pick_index(T, Tab, Pos);
+pick_index([], Tab, Pos) ->
+ mnesia:abort({no_exist, Tab, {index, Pos}}).
+
%%%%%%% Creation, Init and deletion routines for index tables
%% We can have several indexes on the same table
%% this can be a fairly costly operation if table is *very* large
-tab2filename(Tab, Pos) ->
+tab2filename(Tab, {A}) when is_atom(A) ->
+ mnesia_lib:dir(Tab) ++ "_-" ++ atom_to_list(A) ++ "-.DAT";
+tab2filename(Tab, T) when is_tuple(T) ->
+ tab2filename(Tab, element(1, T));
+tab2filename(Tab, Pos) when is_integer(Pos) ->
mnesia_lib:dir(Tab) ++ "_" ++ integer_to_list(Pos) ++ ".DAT".
-tab2tmp_filename(Tab, Pos) ->
- mnesia_lib:dir(Tab) ++ "_" ++ integer_to_list(Pos) ++ ".TMP".
-
init_index(Tab, Storage) ->
- PosList = val({Tab, index}),
+ Cs = val({Tab, cstruct}),
+ PosList = Cs#cstruct.index,
init_indecies(Tab, Storage, PosList).
init_indecies(Tab, Storage, PosList) ->
case Storage of
unknown ->
ignore;
+ {ext, Alias, Mod} ->
+ init_ext_index(Tab, Storage, Alias, Mod, PosList);
disc_only_copies ->
- init_disc_index(Tab, PosList);
+ init_disc_index(Tab, Storage, PosList);
ram_copies ->
- make_ram_index(Tab, PosList);
+ make_ram_index(Tab, Storage, PosList);
disc_copies ->
- make_ram_index(Tab, PosList)
+ make_ram_index(Tab, Storage, PosList)
end.
%% works for both ram and disc indexes
del_index_table(_, unknown, _) ->
ignore;
-del_index_table(Tab, Storage, Pos) ->
+del_index_table(Tab, Storage, {_} = Pos) ->
+ delete_transient_index(Tab, Pos, Storage),
+ mnesia_lib:del({Tab, index}, Pos);
+del_index_table(Tab, Storage, Pos) when is_integer(Pos) ->
delete_transient_index(Tab, Pos, Storage),
mnesia_lib:del({Tab, index}, Pos).
@@ -236,13 +294,24 @@ del_transient(Tab, [Pos | Tail], Storage) ->
delete_transient_index(Tab, Pos, Storage),
del_transient(Tab, Tail, Storage).
+delete_transient_index(Tab, Pos, {ext, Alias, Mod}) ->
+ PosInfo = case Pos of
+ _ when is_integer(Pos) ->
+ Cs = val({Tab, cstruct}),
+ lists:keyfind(Pos, 1, Cs#cstruct.index);
+ {P, T} -> {P, T}
+ end,
+ Tag = {Tab, index, PosInfo},
+ Mod:close_table(Alias, Tag),
+ Mod:delete_table(Alias, Tag),
+ del_index_info(Tab, Pos),
+ mnesia_lib:unset({Tab, {index, Pos}});
delete_transient_index(Tab, Pos, disc_only_copies) ->
Tag = {Tab, index, Pos},
mnesia_monitor:unsafe_close_dets(Tag),
_ = file:delete(tab2filename(Tab, Pos)),
del_index_info(Tab, Pos), %% Uses val(..)
mnesia_lib:unset({Tab, {index, Pos}});
-
delete_transient_index(Tab, Pos, _Storage) ->
Ixt = val({Tab, {index, Pos}}),
?ets_delete_table(Ixt),
@@ -252,11 +321,12 @@ delete_transient_index(Tab, Pos, _Storage) ->
%%%%% misc functions for the index create/init/delete functions above
%% assuming that the file exists.
-init_disc_index(_Tab, []) ->
+init_disc_index(_Tab, _Storage, []) ->
done;
-init_disc_index(Tab, [Pos | Tail]) when is_integer(Pos) ->
+init_disc_index(Tab, disc_only_copies, [{Pos,_Pref} | Tail]) ->
+ PosInfo = {Pos, bag},
Fn = tab2filename(Tab, Pos),
- IxTag = {Tab, index, Pos},
+ IxTag = {Tab, index, PosInfo},
_ = file:delete(Fn),
Args = [{file, Fn}, {keypos, 1}, {type, bag}],
mnesia_monitor:open_dets(IxTag, Args),
@@ -269,16 +339,59 @@ init_disc_index(Tab, [Pos | Tail]) when is_integer(Pos) ->
mnesia_lib:db_fixtable(Storage, Tab, true),
ok = dets:init_table(IxTag, create_fun(Init, Tab, Pos)),
mnesia_lib:db_fixtable(Storage, Tab, false),
- mnesia_lib:set({Tab, {index, Pos}}, IxTag),
- add_index_info(Tab, val({Tab, setorbag}), {Pos, {dets, IxTag}}),
- init_disc_index(Tab, Tail).
+ mnesia_lib:set({Tab, {index, PosInfo}}, IxTag),
+ add_index_info(Tab, val({Tab, setorbag}), {PosInfo, {dets, IxTag}}),
+ init_disc_index(Tab, Storage, Tail).
+
+init_ext_index(_, _, _, _, []) ->
+ done;
+init_ext_index(Tab, Storage, Alias, Mod, [{Pos,Type} | Tail]) ->
+ PosInfo = {Pos, Type},
+ IxTag = {Tab, index, PosInfo},
+ CS = val({Tab, cstruct}),
+ CsList = mnesia_schema:cs2list(CS),
+ _Res = mnesia_monitor:unsafe_create_external(IxTag, Alias, Mod, CsList),
+ Mod:load_table(Alias, IxTag, init_index, CsList),
+ case Mod:is_index_consistent(Alias, IxTag) of
+ false ->
+ Mod:index_is_consistent(Alias, IxTag, false),
+ Mod:match_delete(Alias, IxTag, '_'),
+ IxValsF = index_vals_f(Storage, Tab, Pos),
+ IxObjF = case Type of
+ bag -> fun(IxVal, Key) -> {IxVal, Key} end;
+ ordered -> fun(IxVal, Key) -> {{IxVal, Key}} end
+ end,
+ mnesia_lib:db_fixtable(Storage, Tab, true),
+ mnesia_lib:db_foldl(
+ Storage,
+ fun(Rec, Acc) ->
+ Key = element(2, Rec),
+ lists:foreach(
+ fun(V) ->
+ IxObj = IxObjF(V, Key),
+ Mod:insert(Alias, IxTag, IxObj)
+ end, IxValsF(Rec)),
+ Acc
+ end, ok, Tab,
+ [{'_', [], ['$_']}], 100),
+ Mod:index_is_consistent(Alias, IxTag, true);
+ true ->
+ ignore
+ end,
+
+ mnesia_lib:set({Tab, {index, PosInfo}}, IxTag),
+
+ add_index_info(Tab, val({Tab, setorbag}), {PosInfo, {Storage, IxTag}}),
+ init_ext_index(Tab, Storage, Alias, Mod, Tail).
create_fun(Cont, Tab, Pos) ->
+ IxF = index_vals_f(disc_only_copies, Tab, Pos),
fun(read) ->
Data =
case Cont of
{start, KeysPerChunk} ->
- mnesia_lib:db_init_chunk(disc_only_copies, Tab, KeysPerChunk);
+ mnesia_lib:db_init_chunk(
+ disc_only_copies, Tab, KeysPerChunk);
'$end_of_table' ->
'$end_of_table';
_Else ->
@@ -288,56 +401,82 @@ create_fun(Cont, Tab, Pos) ->
'$end_of_table' ->
end_of_input;
{Recs, Next} ->
- IdxElems = [{element(Pos, Obj), element(2, Obj)} || Obj <- Recs],
+ IdxElems = lists:flatmap(
+ fun(Obj) ->
+ PrimK = element(2, Obj),
+ [{V, PrimK} || V <- IxF(Obj)]
+ end, Recs),
{IdxElems, create_fun(Next, Tab, Pos)}
end;
(close) ->
ok
end.
-make_ram_index(_, []) ->
+make_ram_index(_, _, []) ->
done;
-make_ram_index(Tab, [Pos | Tail]) ->
- add_ram_index(Tab, Pos),
- make_ram_index(Tab, Tail).
+make_ram_index(Tab, Storage, [Pos | Tail]) ->
+ add_ram_index(Tab, Storage, Pos),
+ make_ram_index(Tab, Storage, Tail).
-add_ram_index(Tab, Pos) when is_integer(Pos) ->
- verbose("Creating index for ~w ~n", [Tab]),
+add_ram_index(Tab, Storage, {Pos, _Pref}) ->
+ Type = ordered,
+ verbose("Creating index for ~w ~p ~p~n", [Tab, Pos, Type]),
SetOrBag = val({Tab, setorbag}),
- IndexType = case SetOrBag of
- set -> duplicate_bag;
- ordered_set -> duplicate_bag;
- bag -> bag
- end,
- Index = mnesia_monitor:mktab(mnesia_index, [IndexType, public]),
+ IxValsF = index_vals_f(Storage, Tab, Pos),
+ IxFun = fun(Val, Key) -> {{Val, Key}} end,
+ Index = mnesia_monitor:mktab(mnesia_index, [ordered_set, public]),
Insert = fun(Rec, _Acc) ->
- true = ?ets_insert(Index, {element(Pos, Rec), element(2, Rec)})
+ PrimK = element(2, Rec),
+ true = ?ets_insert(
+ Index, [IxFun(V, PrimK)
+ || V <- IxValsF(Rec)])
end,
mnesia_lib:db_fixtable(ram_copies, Tab, true),
- true = ets:foldl(Insert, true, Tab),
+ true = mnesia_lib:db_foldl(Storage, Insert, true, Tab),
mnesia_lib:db_fixtable(ram_copies, Tab, false),
mnesia_lib:set({Tab, {index, Pos}}, Index),
- add_index_info(Tab, SetOrBag, {Pos, {ram, Index}});
-add_ram_index(_Tab, snmp) ->
+ add_index_info(Tab, SetOrBag, {{Pos, Type}, {ram, Index}});
+add_ram_index(_Tab, _, snmp) ->
ok.
-add_index_info(Tab, Type, IxElem) ->
+index_info(SetOrBag, PosList) ->
+ IxPlugins = mnesia_schema:index_plugins(),
+ ExpPosList = lists:map(
+ fun({{P,Type},Ixt} = PI) ->
+ case P of
+ {_} = IxN ->
+ {_, M, F} =
+ lists:keyfind(IxN, 1, IxPlugins),
+ {{{IxN,M,F}, Type}, Ixt};
+ _ ->
+ PI
+ end
+ end, PosList),
+ #index{setorbag = SetOrBag, pos_list = ExpPosList}.
+
+add_index_info(Tab, SetOrBag, IxElem) ->
Commit = val({Tab, commit_work}),
case lists:keysearch(index, 1, Commit) of
false ->
- Index = #index{setorbag = Type,
- pos_list = [IxElem]},
- %% Check later if mnesia_tm is sensative about the order
+ IndexInfo = index_info(SetOrBag, [IxElem]),
+ %% Check later if mnesia_tm is sensitive about the order
+ mnesia_lib:set({Tab, index_info}, IndexInfo),
+ mnesia_lib:set({Tab, index}, index_positions(IndexInfo)),
mnesia_lib:set({Tab, commit_work},
- mnesia_lib:sort_commit([Index | Commit]));
+ mnesia_lib:sort_commit([IndexInfo | Commit]));
{value, Old} ->
%% We could check for consistency here
Index = Old#index{pos_list = [IxElem | Old#index.pos_list]},
+ mnesia_lib:set({Tab, index_info}, Index),
+ mnesia_lib:set({Tab, index}, index_positions(Index)),
NewC = lists:keyreplace(index, 1, Commit, Index),
mnesia_lib:set({Tab, commit_work},
mnesia_lib:sort_commit(NewC))
end.
+index_positions(#index{pos_list = PL}) ->
+ [P || {{P,_},_} <- PL].
+
del_index_info(Tab, Pos) ->
Commit = val({Tab, commit_work}),
case lists:keysearch(index, 1, Commit) of
@@ -345,13 +484,21 @@ del_index_info(Tab, Pos) ->
%% Something is wrong ignore
skip;
{value, Old} ->
- case lists:keydelete(Pos, 1, Old#index.pos_list) of
+ case lists:filter(fun({P,_}) ->
+ element(1,P)=/=Pos
+ end,
+ Old#index.pos_list) of
[] ->
+ IndexInfo = index_info(Old#index.setorbag,[]),
+ mnesia_lib:set({Tab, index_info}, IndexInfo),
+ mnesia_lib:set({Tab, index}, index_positions(IndexInfo)),
NewC = lists:keydelete(index, 1, Commit),
mnesia_lib:set({Tab, commit_work},
mnesia_lib:sort_commit(NewC));
New ->
Index = Old#index{pos_list = New},
+ mnesia_lib:set({Tab, index_info}, Index),
+ mnesia_lib:set({Tab, index}, index_positions(Index)),
NewC = lists:keyreplace(index, 1, Commit, Index),
mnesia_lib:set({Tab, commit_work},
mnesia_lib:sort_commit(NewC))
@@ -360,33 +507,69 @@ del_index_info(Tab, Pos) ->
db_put({ram, Ixt}, V) ->
true = ?ets_insert(Ixt, V);
+db_put({{ext, _, _} = Ext, Ixt}, V) ->
+ mnesia_lib:db_put(Ext, Ixt, V);
db_put({dets, Ixt}, V) ->
ok = dets:insert(Ixt, V).
-db_get({ram, Ixt}, K) ->
- ?ets_lookup(Ixt, K);
+db_get({ram, _}=Ixt, IxKey) ->
+ Pat = [{{{IxKey, '$1'}}, [], [{element, 1, '$_'}]}],
+ db_select(Ixt, Pat);
+db_get({{ext,_,_} = _Storage, {_,_,{_,Type}}} = Ixt, IxKey) ->
+ Pat = case Type of
+ ordered -> [{{{IxKey, '$1'}}, [], [{element, 1, '$_'}]}];
+ bag -> [{{IxKey, '_'}, [], ['$_']}]
+ end,
+ db_select(Ixt, Pat);
db_get({dets, Ixt}, K) ->
dets:lookup(Ixt, K).
+db_erase({ram, Ixt}, K) ->
+ ?ets_delete(Ixt, K);
+db_erase({{ext,_,_} = Ext, Ixt}, K) ->
+ mnesia_lib:db_erase(Ext, Ixt, K);
+db_erase({dets, Ixt}, K) ->
+ dets:delete(Ixt, K).
+
db_match_erase({ram, Ixt}, Pat) ->
true = ?ets_match_delete(Ixt, Pat);
+db_match_erase({{ext,_,_} = Ext, Ixt}, Pat) ->
+ mnesia_lib:db_match_erase(Ext, Ixt, Pat);
db_match_erase({dets, Ixt}, Pat) ->
ok = dets:match_delete(Ixt, Pat).
-db_match({ram, Ixt}, Pat) ->
- ?ets_match(Ixt, Pat);
-db_match({dets, Ixt}, Pat) ->
- dets:match(Ixt, Pat).
+db_select({ram, Ixt}, Pat) ->
+ ets:select(Ixt, Pat);
+db_select({{ext,_,_} = Ext, Ixt}, Pat) ->
+ mnesia_lib:db_select(Ext, Ixt, Pat);
+db_select({dets, Ixt}, Pat) ->
+ dets:select(Ixt, Pat).
+
get_index_table(Tab, Pos) ->
get_index_table(Tab, val({Tab, storage_type}), Pos).
-get_index_table(Tab, ram_copies, Pos) ->
- {ram, val({Tab, {index, Pos}})};
-get_index_table(Tab, disc_copies, Pos) ->
- {ram, val({Tab, {index, Pos}})};
-get_index_table(Tab, disc_only_copies, Pos) ->
- {dets, val({Tab, {index, Pos}})};
-get_index_table(_Tab, unknown, _Pos) ->
- unknown.
-
+get_index_table(Tab, _Storage, Pos) ->
+ #index{pos_list = PosL} = val({Tab, index_info}),
+ {_IxType, Ixt} = pick_index(PosL, Tab, Pos),
+ Ixt.
+
+index_vals_f(Storage, Tab, {_} = Pos) ->
+ index_vals_f(Storage, Tab,
+ lists:keyfind(Pos, 1, mnesia_schema:index_plugins()));
+index_vals_f(_Storage, Tab, {Pos,M,F}) ->
+ fun(Obj) ->
+ M:F(Tab, Pos, Obj)
+ end;
+index_vals_f(Storage, Tab, Pos) when is_integer(Pos) ->
+ case mnesia_lib:semantics(Storage, index_fun) of
+ undefined ->
+ fun(Obj) ->
+ [element(Pos, Obj)]
+ end;
+ F when is_function(F, 4) ->
+ {ext, Alias, _Mod} = Storage,
+ fun(Obj) ->
+ F(Alias, Tab, Pos, Obj)
+ end
+ end.
diff --git a/lib/mnesia/src/mnesia_kernel_sup.erl b/lib/mnesia/src/mnesia_kernel_sup.erl
index 1583e5e1f7..c9af5c460a 100644
--- a/lib/mnesia/src/mnesia_kernel_sup.erl
+++ b/lib/mnesia/src/mnesia_kernel_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_late_loader.erl b/lib/mnesia/src/mnesia_late_loader.erl
index bd21bdc347..e273329ffc 100644
--- a/lib/mnesia/src/mnesia_late_loader.erl
+++ b/lib/mnesia/src/mnesia_late_loader.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_lib.erl b/lib/mnesia/src/mnesia_lib.erl
index 0f1354f43e..10e232c800 100644
--- a/lib/mnesia/src/mnesia_lib.erl
+++ b/lib/mnesia/src/mnesia_lib.erl
@@ -54,6 +54,7 @@
db_erase_tab/2,
db_first/1,
db_first/2,
+ db_foldl/3, db_foldl/4, db_foldl/6,
db_last/1,
db_last/2,
db_fixtable/3,
@@ -135,6 +136,7 @@
set_local_content_whereabouts/1,
set_remote_where_to_read/1,
set_remote_where_to_read/2,
+ semantics/2,
show/1,
show/2,
sort_commit/1,
@@ -144,6 +146,7 @@
tab2tmp/1,
tab2dcd/1,
tab2dcl/1,
+ tab2logtmp/1,
to_list/1,
union/2,
uniq/1,
@@ -151,6 +154,8 @@
unset/1,
%% update_counter/2,
val/1,
+ validate_key/2,
+ validate_record/2,
vcore/0,
vcore/1,
verbose/2,
@@ -319,15 +324,41 @@ tab2dcd(Tab) -> %% Disc copies data
tab2dcl(Tab) -> %% Disc copies log
dir(lists:concat([Tab, ".DCL"])).
+tab2logtmp(Tab) -> %% Disc copies log
+ dir(lists:concat([Tab, ".LOGTMP"])).
+
storage_type_at_node(Node, Tab) ->
search_key(Node, [{disc_copies, val({Tab, disc_copies})},
{ram_copies, val({Tab, ram_copies})},
- {disc_only_copies, val({Tab, disc_only_copies})}]).
+ {disc_only_copies, val({Tab, disc_only_copies})}|
+ wrap_external(val({Tab, external_copies}))]).
cs_to_storage_type(Node, Cs) ->
search_key(Node, [{disc_copies, Cs#cstruct.disc_copies},
{ram_copies, Cs#cstruct.ram_copies},
- {disc_only_copies, Cs#cstruct.disc_only_copies}]).
+ {disc_only_copies, Cs#cstruct.disc_only_copies} |
+ wrap_external(Cs#cstruct.external_copies)]).
+
+-define(native(T), T==ram_copies; T==disc_copies; T==disc_only_copies).
+
+semantics({ext,Alias,Mod}, Item) ->
+ Mod:semantics(Alias, Item);
+semantics({Alias,Mod}, Item) ->
+ Mod:semantics(Alias, Item);
+semantics(Type, storage) when ?native(Type) ->
+ Type;
+semantics(Type, types) when ?native(Type) ->
+ [set, ordered_set, bag];
+semantics(disc_only_copies, index_types) ->
+ [bag];
+semantics(Type, index_types) when ?native(Type) ->
+ [bag, ordered];
+semantics(_, _) ->
+ undefined.
+
+
+wrap_external(L) ->
+ [{{ext,Alias,Mod},Ns} || {{Alias,Mod},Ns} <- L].
schema_cs_to_storage_type(Node, Cs) ->
case cs_to_storage_type(Node, Cs) of
@@ -335,7 +366,6 @@ schema_cs_to_storage_type(Node, Cs) ->
Other -> Other
end.
-
search_key(Key, [{Val, List} | Tail]) ->
case lists:member(Key, List) of
true -> Val;
@@ -344,6 +374,33 @@ search_key(Key, [{Val, List} | Tail]) ->
search_key(_Key, []) ->
unknown.
+validate_key(Tab, Key) ->
+ case ?catch_val({Tab, record_validation}) of
+ {RecName, Arity, Type} ->
+ {RecName, Arity, Type};
+ {RecName, Arity, Type, Alias, Mod} ->
+ %% external type
+ Mod:validate_key(Alias, Tab, RecName, Arity, Type, Key);
+ {'EXIT', _} ->
+ mnesia:abort({no_exists, Tab})
+ end.
+
+
+validate_record(Tab, Obj) ->
+ case ?catch_val({Tab, record_validation}) of
+ {RecName, Arity, Type}
+ when tuple_size(Obj) == Arity, RecName == element(1, Obj) ->
+ {RecName, Arity, Type};
+ {RecName, Arity, Type, Alias, Mod}
+ when tuple_size(Obj) == Arity, RecName == element(1, Obj) ->
+ %% external type
+ Mod:validate_record(Alias, Tab, RecName, Arity, Type, Obj);
+ {'EXIT', _} ->
+ mnesia:abort({no_exists, Tab});
+ _ ->
+ mnesia:abort({bad_type, Obj})
+ end.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ops, we've got some global variables here :-)
@@ -410,9 +467,9 @@ pr_other(Var) ->
no -> {node_not_running, node()};
_ -> {no_exists, Var}
end,
- verbose("~p (~p) val(mnesia_gvar, ~w) -> ~p ~n",
+ verbose("~p (~p) val(mnesia_gvar, ~w) -> ~p ~p ~n",
[self(), process_info(self(), registered_name),
- Var, Why]),
+ Var, Why, erlang:get_stacktrace()]),
mnesia:abort(Why).
%% Some functions for list valued variables
@@ -549,10 +606,16 @@ read_counter(Name) ->
?ets_lookup_element(mnesia_stats, Name, 2).
cs_to_nodes(Cs) ->
+ ext_nodes(Cs#cstruct.external_copies) ++
Cs#cstruct.disc_only_copies ++
Cs#cstruct.disc_copies ++
Cs#cstruct.ram_copies.
+ext_nodes(Ext) ->
+ lists:flatmap(fun({_, Ns}) ->
+ Ns
+ end, Ext).
+
overload_types() ->
[mnesia_tm, mnesia_dump_log].
@@ -748,7 +811,7 @@ view(File) ->
true ->
view(File, dat);
false ->
- case suffix([".LOG", ".BUP", ".ETS"], File) of
+ case suffix([".LOG", ".BUP", ".ETS", ".LOGTMP"], File) of
true ->
view(File, log);
false ->
@@ -922,20 +985,7 @@ random_time(Retries, _Counter0) ->
UpperLimit = 500,
Dup = Retries * Retries,
MaxIntv = trunc(UpperLimit * (1-(50/((Dup)+50)))),
-
- case get(random_seed) of
- undefined ->
- _ = random:seed(erlang:unique_integer(),
- erlang:monotonic_time(),
- erlang:unique_integer()),
- Time = Dup + random:uniform(MaxIntv),
- %% dbg_out("---random_test rs ~w max ~w val ~w---~n", [Retries, MaxIntv, Time]),
- Time;
- _ ->
- Time = Dup + random:uniform(MaxIntv),
- %% dbg_out("---random_test rs ~w max ~w val ~w---~n", [Retries, MaxIntv, Time]),
- Time
- end.
+ Dup + rand:uniform(MaxIntv).
report_system_event(Event0) ->
Event = {mnesia_system_event, Event0},
@@ -1057,18 +1107,24 @@ db_get(Tab, Key) ->
db_get(val({Tab, storage_type}), Tab, Key).
db_get(ram_copies, Tab, Key) -> ?ets_lookup(Tab, Key);
db_get(disc_copies, Tab, Key) -> ?ets_lookup(Tab, Key);
-db_get(disc_only_copies, Tab, Key) -> dets:lookup(Tab, Key).
+db_get(disc_only_copies, Tab, Key) -> dets:lookup(Tab, Key);
+db_get({ext, Alias, Mod}, Tab, Key) ->
+ Mod:lookup(Alias, Tab, Key).
db_init_chunk(Tab) ->
db_init_chunk(val({Tab, storage_type}), Tab, 1000).
db_init_chunk(Tab, N) ->
db_init_chunk(val({Tab, storage_type}), Tab, N).
+db_init_chunk({ext, Alias, Mod}, Tab, N) ->
+ Mod:select(Alias, Tab, [{'_', [], ['$_']}], N);
db_init_chunk(disc_only_copies, Tab, N) ->
dets:select(Tab, [{'_', [], ['$_']}], N);
db_init_chunk(_, Tab, N) ->
ets:select(Tab, [{'_', [], ['$_']}], N).
+db_chunk({ext, _Alias, Mod}, State) ->
+ Mod:select(State);
db_chunk(disc_only_copies, State) ->
dets:select(State);
db_chunk(_, State) ->
@@ -1079,7 +1135,9 @@ db_put(Tab, Val) ->
db_put(ram_copies, Tab, Val) -> ?ets_insert(Tab, Val), ok;
db_put(disc_copies, Tab, Val) -> ?ets_insert(Tab, Val), ok;
-db_put(disc_only_copies, Tab, Val) -> dets:insert(Tab, Val).
+db_put(disc_only_copies, Tab, Val) -> dets:insert(Tab, Val);
+db_put({ext, Alias, Mod}, Tab, Val) ->
+ Mod:insert(Alias, Tab, Val).
db_match_object(Tab, Pat) ->
db_match_object(val({Tab, storage_type}), Tab, Pat).
@@ -1088,12 +1146,36 @@ db_match_object(Storage, Tab, Pat) ->
try
case Storage of
disc_only_copies -> dets:match_object(Tab, Pat);
+ {ext, Alias, Mod} -> Mod:select(Alias, Tab, [{Pat, [], ['$_']}]);
_ -> ets:match_object(Tab, Pat)
end
after
db_fixtable(Storage, Tab, false)
end.
+db_foldl(Fun, Acc, Tab) ->
+ db_foldl(val({Tab, storage_type}), Fun, Acc, Tab).
+
+db_foldl(Storage, Fun, Acc, Tab) ->
+ Limit = mnesia_monitor:get_env(fold_chunk_size),
+ db_foldl(Storage, Fun, Acc, Tab, [{'_', [], ['$_']}], Limit).
+
+db_foldl(ram_copies, Fun, Acc, Tab, Pat, Limit) ->
+ mnesia_lib:db_fixtable(ram_copies, Tab, true),
+ try select_foldl(db_select_init(ram_copies, Tab, Pat, Limit),
+ Fun, Acc, ram_copies)
+ after
+ mnesia_lib:db_fixtable(ram_copies, Tab, false)
+ end;
+db_foldl(Storage, Fun, Acc, Tab, Pat, Limit) ->
+ select_foldl(mnesia_lib:db_select_init(Storage, Tab, Pat, Limit), Fun, Acc, Storage).
+
+select_foldl({Objs, Cont}, Fun, Acc, Storage) ->
+ select_foldl(mnesia_lib:db_select_cont(Storage, Cont, []),
+ Fun, lists:foldl(Fun, Acc, Objs), Storage);
+select_foldl('$end_of_table', _, Acc, _) ->
+ Acc.
+
db_select(Tab, Pat) ->
db_select(val({Tab, storage_type}), Tab, Pat).
@@ -1102,17 +1184,33 @@ db_select(Storage, Tab, Pat) ->
try
case Storage of
disc_only_copies -> dets:select(Tab, Pat);
+ {ext, Alias, Mod} -> Mod:select(Alias, Tab, Pat);
_ -> ets:select(Tab, Pat)
end
after
db_fixtable(Storage, Tab, false)
end.
+db_select_init({ext, Alias, Mod}, Tab, Pat, Limit) ->
+ case Mod:select(Alias, Tab, Pat, Limit) of
+ {Matches, Continuation} when is_list(Matches) ->
+ {Matches, {Alias, Continuation}};
+ R ->
+ R
+ end;
db_select_init(disc_only_copies, Tab, Pat, Limit) ->
dets:select(Tab, Pat, Limit);
db_select_init(_, Tab, Pat, Limit) ->
ets:select(Tab, Pat, Limit).
+db_select_cont({ext, Alias, Mod}, Cont0, Ms) ->
+ Cont = Mod:repair_continuation(Cont0, Ms),
+ case Mod:select(Cont) of
+ {Matches, Continuation} when is_list(Matches) ->
+ {Matches, {Alias, Continuation}};
+ R ->
+ R
+ end;
db_select_cont(disc_only_copies, Cont0, Ms) ->
Cont = dets:repair_continuation(Cont0, Ms),
dets:select(Cont);
@@ -1129,13 +1227,18 @@ db_fixtable(disc_copies, Tab, Bool) ->
db_fixtable(dets, Tab, Bool) ->
dets:safe_fixtable(Tab, Bool);
db_fixtable(disc_only_copies, Tab, Bool) ->
- dets:safe_fixtable(Tab, Bool).
+ dets:safe_fixtable(Tab, Bool);
+db_fixtable({ext, Alias, Mod}, Tab, Bool) ->
+ Mod:fixtable(Alias, Tab, Bool).
db_erase(Tab, Key) ->
db_erase(val({Tab, storage_type}), Tab, Key).
db_erase(ram_copies, Tab, Key) -> ?ets_delete(Tab, Key), ok;
db_erase(disc_copies, Tab, Key) -> ?ets_delete(Tab, Key), ok;
-db_erase(disc_only_copies, Tab, Key) -> dets:delete(Tab, Key).
+db_erase(disc_only_copies, Tab, Key) -> dets:delete(Tab, Key);
+db_erase({ext, Alias, Mod}, Tab, Key) ->
+ Mod:delete(Alias, Tab, Key),
+ ok.
db_match_erase(Tab, '_') ->
db_delete_all(val({Tab, storage_type}),Tab);
@@ -1143,7 +1246,10 @@ db_match_erase(Tab, Pat) ->
db_match_erase(val({Tab, storage_type}), Tab, Pat).
db_match_erase(ram_copies, Tab, Pat) -> ?ets_match_delete(Tab, Pat), ok;
db_match_erase(disc_copies, Tab, Pat) -> ?ets_match_delete(Tab, Pat), ok;
-db_match_erase(disc_only_copies, Tab, Pat) -> dets:match_delete(Tab, Pat).
+db_match_erase(disc_only_copies, Tab, Pat) -> dets:match_delete(Tab, Pat);
+db_match_erase({ext, Alias, Mod}, Tab, Pat) ->
+ Mod:match_delete(Alias, Tab, Pat),
+ ok.
db_delete_all(ram_copies, Tab) -> ets:delete_all_objects(Tab);
db_delete_all(disc_copies, Tab) -> ets:delete_all_objects(Tab);
@@ -1153,31 +1259,41 @@ db_first(Tab) ->
db_first(val({Tab, storage_type}), Tab).
db_first(ram_copies, Tab) -> ?ets_first(Tab);
db_first(disc_copies, Tab) -> ?ets_first(Tab);
-db_first(disc_only_copies, Tab) -> dets:first(Tab).
+db_first(disc_only_copies, Tab) -> dets:first(Tab);
+db_first({ext, Alias, Mod}, Tab) ->
+ Mod:first(Alias, Tab).
db_next_key(Tab, Key) ->
db_next_key(val({Tab, storage_type}), Tab, Key).
db_next_key(ram_copies, Tab, Key) -> ?ets_next(Tab, Key);
db_next_key(disc_copies, Tab, Key) -> ?ets_next(Tab, Key);
-db_next_key(disc_only_copies, Tab, Key) -> dets:next(Tab, Key).
+db_next_key(disc_only_copies, Tab, Key) -> dets:next(Tab, Key);
+db_next_key({ext, Alias, Mod}, Tab, Key) ->
+ Mod:next(Alias, Tab, Key).
db_last(Tab) ->
db_last(val({Tab, storage_type}), Tab).
db_last(ram_copies, Tab) -> ?ets_last(Tab);
db_last(disc_copies, Tab) -> ?ets_last(Tab);
-db_last(disc_only_copies, Tab) -> dets:first(Tab). %% Dets don't have order
+db_last(disc_only_copies, Tab) -> dets:first(Tab); %% Dets don't have order
+db_last({ext, Alias, Mod}, Tab) ->
+ Mod:last(Alias, Tab).
db_prev_key(Tab, Key) ->
db_prev_key(val({Tab, storage_type}), Tab, Key).
db_prev_key(ram_copies, Tab, Key) -> ?ets_prev(Tab, Key);
db_prev_key(disc_copies, Tab, Key) -> ?ets_prev(Tab, Key);
-db_prev_key(disc_only_copies, Tab, Key) -> dets:next(Tab, Key). %% Dets don't have order
+db_prev_key(disc_only_copies, Tab, Key) -> dets:next(Tab, Key); %% Dets don't have order
+db_prev_key({ext, Alias, Mod}, Tab, Key) ->
+ Mod:prev(Alias, Tab, Key).
db_slot(Tab, Pos) ->
db_slot(val({Tab, storage_type}), Tab, Pos).
db_slot(ram_copies, Tab, Pos) -> ?ets_slot(Tab, Pos);
db_slot(disc_copies, Tab, Pos) -> ?ets_slot(Tab, Pos);
-db_slot(disc_only_copies, Tab, Pos) -> dets:slot(Tab, Pos).
+db_slot(disc_only_copies, Tab, Pos) -> dets:slot(Tab, Pos);
+db_slot({ext, Alias, Mod}, Tab, Pos) ->
+ Mod:slot(Alias, Tab, Pos).
db_update_counter(Tab, C, Val) ->
db_update_counter(val({Tab, storage_type}), Tab, C, Val).
@@ -1186,13 +1302,16 @@ db_update_counter(ram_copies, Tab, C, Val) ->
db_update_counter(disc_copies, Tab, C, Val) ->
?ets_update_counter(Tab, C, Val);
db_update_counter(disc_only_copies, Tab, C, Val) ->
- dets:update_counter(Tab, C, Val).
+ dets:update_counter(Tab, C, Val);
+db_update_counter({ext, Alias, Mod}, Tab, C, Val) ->
+ Mod:update_counter(Alias, Tab, C, Val).
db_erase_tab(Tab) ->
db_erase_tab(val({Tab, storage_type}), Tab).
db_erase_tab(ram_copies, Tab) -> ?ets_delete_table(Tab);
db_erase_tab(disc_copies, Tab) -> ?ets_delete_table(Tab);
-db_erase_tab(disc_only_copies, _Tab) -> ignore.
+db_erase_tab(disc_only_copies, _Tab) -> ignore;
+db_erase_tab({ext, _Alias, _Mod}, _Tab) -> ignore.
%% assuming that Tab is a valid ets-table
dets_to_ets(Tabname, Tab, File, Type, Rep, Lock) ->
diff --git a/lib/mnesia/src/mnesia_loader.erl b/lib/mnesia/src/mnesia_loader.erl
index 41fcd76fcb..71e5829c87 100644
--- a/lib/mnesia/src/mnesia_loader.erl
+++ b/lib/mnesia/src/mnesia_loader.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -147,6 +147,19 @@ do_get_disc_copy2(Tab, Reason, Storage, Type) when Storage == disc_only_copies -
{error, Error} ->
{not_loaded, {"Failed to create dets table", Error}}
end
+ end;
+
+do_get_disc_copy2(Tab, Reason, Storage = {ext, Alias, Mod}, _Type) ->
+ Cs = val({Tab, cstruct}),
+ case mnesia_monitor:unsafe_create_external(Tab, Alias, Mod, Cs) of
+ ok ->
+ ok = ext_load_table(Mod, Alias, Tab, Reason),
+ mnesia_index:init_index(Tab, Storage),
+ set({Tab, load_node}, node()),
+ set({Tab, load_reason}, Reason),
+ {loaded, ok};
+ Other ->
+ {not_loaded, Other}
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -259,7 +272,7 @@ init_receiver(Node, Tab,Storage,Cs,Reason) ->
true = lists:member(Node, Active),
{SenderPid, TabSize, DetsData} =
start_remote_sender(Node,Tab,Storage),
- Init = table_init_fun(SenderPid),
+ Init = table_init_fun(SenderPid, Storage),
Args = [self(),Tab,Storage,Cs,SenderPid,
TabSize,DetsData,Init],
Pid = spawn_link(?MODULE, spawned_receiver, Args),
@@ -289,7 +302,12 @@ start_remote_sender(Node,Tab,Storage) ->
mnesia_controller:start_remote_sender(Node, Tab, self(), Storage),
put(mnesia_table_sender_node, {Tab, Node}),
receive
- {SenderPid, {first, TabSize}} ->
+ {SenderPid, {first, _} = Msg}
+ when is_pid(SenderPid), element(1, Storage) == ext ->
+ {ext, Alias, Mod} = Storage,
+ {Sz, Data} = Mod:receiver_first_message(SenderPid, Msg, Alias, Tab),
+ {SenderPid, Sz, Data};
+ {SenderPid, {first, TabSize}} =_M1 ->
{SenderPid, TabSize, false};
{SenderPid, {first, TabSize, DetsData}} ->
{SenderPid, TabSize, DetsData};
@@ -299,16 +317,18 @@ start_remote_sender(Node,Tab,Storage) ->
down(Tab, Storage)
end.
-table_init_fun(SenderPid) ->
+table_init_fun(SenderPid, Storage) ->
fun(read) ->
Receiver = self(),
SenderPid ! {Receiver, more},
- get_data(SenderPid, Receiver)
+ get_data(SenderPid, Receiver, Storage);
+ (close) ->
+ ok
end.
%% Add_table_copy get's it's own locks.
start_receiver(Tab,Storage,Cs,SenderPid,TabSize,DetsData,{dumper,{add_table_copy,_}}) ->
- Init = table_init_fun(SenderPid),
+ Init = table_init_fun(SenderPid, Storage),
case do_init_table(Tab,Storage,Cs,SenderPid,TabSize,DetsData,self(), Init) of
Err = {error, _} ->
SenderPid ! {copier_done, node()},
@@ -391,7 +411,15 @@ create_table(Tab, TabSize, Storage, Cs) ->
{Storage, Tab};
Else ->
Else
- end
+ end;
+ element(1, Storage) == ext ->
+ {_, Alias, Mod} = Storage,
+ case mnesia_monitor:unsafe_create_external(Tab, Alias, Mod, Cs) of
+ ok ->
+ {Storage, Tab};
+ Else ->
+ Else
+ end
end.
tab_receiver(Node, Tab, Storage, Cs, OrigTabRec) ->
@@ -409,21 +437,25 @@ tab_receiver(Node, Tab, Storage, Cs, OrigTabRec) ->
tab_receiver(Node, Tab, Storage, Cs, OrigTabRec)
end.
-make_table_fun(Pid, TabRec) ->
+make_table_fun(Pid, TabRec, Storage) ->
fun(close) ->
ok;
+ ({read, Msg}) ->
+ Pid ! {TabRec, Msg},
+ get_data(Pid, TabRec, Storage);
(read) ->
- get_data(Pid, TabRec)
+ get_data(Pid, TabRec, Storage)
end.
-get_data(Pid, TabRec) ->
+get_data(Pid, TabRec, Storage) ->
receive
{Pid, {more_z, CompressedRecs}} when is_binary(CompressedRecs) ->
- Pid ! {TabRec, more},
- {zlib_uncompress(CompressedRecs), make_table_fun(Pid,TabRec)};
+ maybe_reply(Pid, {TabRec, more}, Storage),
+ {zlib_uncompress(CompressedRecs),
+ make_table_fun(Pid, TabRec, Storage)};
{Pid, {more, Recs}} ->
- Pid ! {TabRec, more},
- {Recs, make_table_fun(Pid,TabRec)};
+ maybe_reply(Pid, {TabRec, more}, Storage),
+ {Recs, make_table_fun(Pid, TabRec, Storage)};
{Pid, no_more} ->
end_of_input;
{copier_done, Node} ->
@@ -431,13 +463,48 @@ get_data(Pid, TabRec) ->
Node ->
{copier_done, Node};
_ ->
- get_data(Pid, TabRec)
+ get_data(Pid, TabRec, Storage)
end;
{'EXIT', Pid, Reason} ->
handle_exit(Pid, Reason),
- get_data(Pid, TabRec)
+ get_data(Pid, TabRec, Storage)
end.
+maybe_reply(_, _, {ext, _, _}) ->
+ ignore;
+maybe_reply(Pid, Msg, _) ->
+ Pid ! Msg.
+
+ext_init_table(Alias, Mod, Tab, Fun, State, Sender) ->
+ ok = ext_load_table(Mod, Alias, Tab, {net_load, node(Sender)}),
+ ext_init_table(read, Alias, Mod, Tab, Fun, State, Sender).
+
+ext_load_table(Mod, Alias, Tab, Reason) ->
+ CS = val({Tab, cstruct}),
+ Mod:load_table(Alias, Tab, Reason, mnesia_schema:cs2list(CS)).
+
+
+ext_init_table(Action, Alias, Mod, Tab, Fun, State, Sender) ->
+ case Fun(Action) of
+ {copier_done, Node} ->
+ verbose("Receiver of table ~p crashed on ~p (more)~n", [Tab, Node]),
+ down(Tab, {ext,Alias,Mod});
+ {Data, NewFun} ->
+ case Mod:receive_data(Data, Alias, Tab, Sender, State) of
+ {more, NewState} ->
+ ext_init_table({read, more}, Alias, Mod,
+ Tab, NewFun, NewState, Sender);
+ {{more,Msg}, NewState} ->
+ ext_init_table({read, Msg}, Alias, Mod,
+ Tab, NewFun, NewState, Sender)
+ end;
+ end_of_input ->
+ Mod:receive_done(Alias, Tab, Sender, State),
+ ok = Fun(close)
+ end.
+
+init_table(Tab, {ext,Alias,Mod}, Fun, State, Sender) ->
+ ext_init_table(Alias, Mod, Tab, Fun, State, Sender);
init_table(Tab, disc_only_copies, Fun, DetsInfo,Sender) ->
ErtsVer = erlang:system_info(version),
case DetsInfo of
@@ -567,7 +634,10 @@ handle_last({ram_copies, Tab}, _Type, DatBin) ->
ok;
false ->
ok
- end.
+ end;
+
+handle_last(_Storage, _Type, nobin) ->
+ ok.
down(Tab, Storage) ->
case Storage of
@@ -578,7 +648,10 @@ down(Tab, Storage) ->
disc_only_copies ->
TmpFile = mnesia_lib:tab2tmp(Tab),
mnesia_lib:dets_sync_close(Tab),
- file:delete(TmpFile)
+ file:delete(TmpFile);
+ {ext, Alias, Mod} ->
+ catch Mod:close_table(Alias, Tab),
+ catch Mod:delete_table(Alias, Tab)
end,
mnesia_checkpoint:tm_del_copy(Tab, node()),
mnesia_controller:sync_del_table_copy_whereabouts(Tab, node()),
@@ -603,21 +676,35 @@ db_erase({ram_copies, Tab}, Key) ->
db_erase({disc_copies, Tab}, Key) ->
true = ?ets_delete(Tab, Key);
db_erase({disc_only_copies, Tab}, Key) ->
- ok = dets:delete(Tab, Key).
+ ok = dets:delete(Tab, Key);
+db_erase({{ext, Alias, Mod}, Tab}, Key) ->
+ ok = Mod:delete(Alias, Tab, Key).
db_match_erase({ram_copies, Tab} , Pat) ->
true = ?ets_match_delete(Tab, Pat);
db_match_erase({disc_copies, Tab} , Pat) ->
true = ?ets_match_delete(Tab, Pat);
db_match_erase({disc_only_copies, Tab}, Pat) ->
- ok = dets:match_delete(Tab, Pat).
+ ok = dets:match_delete(Tab, Pat);
+db_match_erase({{ext, Alias, Mod}, Tab}, Pat) ->
+ % "ets style" is to return true
+ % "dets style" is to return N | { error, Reason }
+ % or sometimes ok (?)
+ % be nice and accept both
+ case Mod:match_delete(Alias, Tab, Pat) of
+ N when is_integer (N) -> ok;
+ true -> ok;
+ ok -> ok
+ end.
db_put({ram_copies, Tab}, Val) ->
true = ?ets_insert(Tab, Val);
db_put({disc_copies, Tab}, Val) ->
true = ?ets_insert(Tab, Val);
db_put({disc_only_copies, Tab}, Val) ->
- ok = dets:insert(Tab, Val).
+ ok = dets:insert(Tab, Val);
+db_put({{ext, Alias, Mod}, Tab}, Val) ->
+ ok = Mod:insert(Alias, Tab, Val).
%% This code executes at the remote site where the data is
%% executes in a special copier process.
@@ -636,47 +723,62 @@ send_table(Pid, Tab, RemoteS) ->
unknown ->
{error, {no_exists, Tab}};
Storage ->
- %% Send first
- TabSize = mnesia:table_info(Tab, size),
- KeysPerTransfer = calc_nokeys(Storage, Tab),
- ChunkData = dets:info(Tab, bchunk_format),
-
- UseDetsChunk =
- Storage == RemoteS andalso
- Storage == disc_only_copies andalso
- ChunkData /= undefined,
- if
- UseDetsChunk == true ->
- DetsInfo = erlang:system_info(version),
- Pid ! {self(), {first, TabSize, {DetsInfo, ChunkData}}};
- true ->
- Pid ! {self(), {first, TabSize}}
- end,
+ do_send_table(Pid, Tab, Storage, RemoteS)
+ end.
- %% Debug info
- put(mnesia_table_sender, {Tab, node(Pid), Pid}),
- {Init, Chunk} = reader_funcs(UseDetsChunk, Tab, Storage, KeysPerTransfer),
-
- SendIt = fun() ->
- NeedLock = need_lock(Tab),
- {atomic, ok} = prepare_copy(Pid, Tab, Storage, NeedLock),
- send_more(Pid, 1, Chunk, Init(), Tab),
- finish_copy(Pid, Tab, Storage, RemoteS, NeedLock)
- end,
-
- try SendIt() of
- {_, receiver_died} -> ok;
- {atomic, no_more} -> ok
- catch
- throw:receiver_died ->
- cleanup_tab_copier(Pid, Storage, Tab),
- ok;
- error:Reason -> %% Prepare failed
- cleanup_tab_copier(Pid, Storage, Tab),
- {error, {tab_copier, Tab, {Reason, erlang:get_stacktrace()}}}
- after
- unlink(whereis(mnesia_tm))
- end
+do_send_table(Pid, Tab, Storage, RemoteS) ->
+ {Init, Chunk} =
+ case Storage of
+ {ext, Alias, Mod} ->
+ case Mod:sender_init(Alias, Tab, RemoteS, Pid) of
+ {standard, I, C} ->
+ Pid ! {self(), {first, Mod:info(Alias, Tab, size)}},
+ {I, C};
+ {_, _} = Res ->
+ Res
+ end;
+ Storage ->
+ %% Send first
+ TabSize = mnesia:table_info(Tab, size),
+ KeysPerTransfer = calc_nokeys(Storage, Tab),
+ ChunkData = dets:info(Tab, bchunk_format),
+
+ UseDetsChunk =
+ Storage == RemoteS andalso
+ Storage == disc_only_copies andalso
+ ChunkData /= undefined,
+ if
+ UseDetsChunk == true ->
+ DetsInfo = erlang:system_info(version),
+ Pid ! {self(), {first, TabSize, {DetsInfo, ChunkData}}};
+ true ->
+ Pid ! {self(), {first, TabSize}}
+ end,
+ {_I, _C} =
+ reader_funcs(UseDetsChunk, Tab, Storage, KeysPerTransfer)
+ end,
+ %% Debug info
+ put(mnesia_table_sender, {Tab, node(Pid), Pid}),
+
+ SendIt = fun() ->
+ NeedLock = need_lock(Tab),
+ {atomic, ok} = prepare_copy(Pid, Tab, Storage, NeedLock),
+ send_more(Pid, 1, Chunk, Init(), Tab, Storage),
+ finish_copy(Pid, Tab, Storage, RemoteS, NeedLock)
+ end,
+
+ try SendIt() of
+ {_, receiver_died} -> ok;
+ {atomic, no_more} -> ok
+ catch
+ throw:receiver_died ->
+ cleanup_tab_copier(Pid, Storage, Tab),
+ ok;
+ error:Reason -> %% Prepare failed
+ cleanup_tab_copier(Pid, Storage, Tab),
+ {error, {tab_copier, Tab, {Reason, erlang:get_stacktrace()}}}
+ after
+ unlink(whereis(mnesia_tm))
end.
prepare_copy(Pid, Tab, Storage, NeedLock) ->
@@ -726,20 +828,32 @@ update_where_to_write([H|T], Tab, AddNode) ->
[{update_where_to_write, [add, Tab, AddNode], self()}]),
update_where_to_write(T, Tab, AddNode).
-send_more(Pid, N, Chunk, DataState, Tab) ->
+send_more(Pid, N, Chunk, DataState, Tab, Storage) ->
receive
{NewPid, more} ->
case send_packet(N - 1, NewPid, Chunk, DataState) of
New when is_integer(New) ->
New - 1;
NewData ->
- send_more(NewPid, ?MAX_NOPACKETS, Chunk, NewData, Tab)
+ send_more(NewPid, ?MAX_NOPACKETS, Chunk, NewData,
+ Tab, Storage)
+ end;
+ {NewPid, {more, Msg}} when element(1, Storage) == ext ->
+ {ext, Alias, Mod} = Storage,
+ {NewChunk, NewState} =
+ Mod:sender_handle_info(Msg, Alias, Tab, NewPid, DataState),
+ case send_packet(N - 1, NewPid, NewChunk, NewState) of
+ New when is_integer(New) ->
+ New -1;
+ NewData ->
+ send_more(NewPid, N, NewChunk, NewData, Tab,
+ Storage)
end;
{_NewPid, {old_protocol, Tab}} ->
Storage = val({Tab, storage_type}),
{Init, NewChunk} =
reader_funcs(false, Tab, Storage, calc_nokeys(Storage, Tab)),
- send_more(Pid, 1, NewChunk, Init(), Tab);
+ send_more(Pid, 1, NewChunk, Init(), Tab, Storage);
{copier_done, Node} when Node == node(Pid)->
verbose("Receiver of table ~p crashed on ~p (more)~n", [Tab, Node]),
diff --git a/lib/mnesia/src/mnesia_locker.erl b/lib/mnesia/src/mnesia_locker.erl
index 5766f22e92..59fd89059f 100644
--- a/lib/mnesia/src/mnesia_locker.erl
+++ b/lib/mnesia/src/mnesia_locker.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_log.erl b/lib/mnesia/src/mnesia_log.erl
index 36135418c8..9536effd42 100644
--- a/lib/mnesia/src/mnesia_log.erl
+++ b/lib/mnesia/src/mnesia_log.erl
@@ -224,17 +224,12 @@ sappend(Log, Term) ->
ok = disk_log:log(Log, Term).
%% Write commit records to the latest_log
-log(C) when C#commit.disc_copies == [],
- C#commit.disc_only_copies == [],
- C#commit.schema_ops == [] ->
- ignore;
log(C) ->
- case mnesia_monitor:use_dir() of
+ case need_log(C) andalso mnesia_monitor:use_dir() of
true ->
if
is_record(C, commit) ->
- C2 = C#commit{ram_copies = [], snmp = []},
- append(latest_log, C2);
+ append(latest_log, strip_snmp(C));
true ->
%% Either a commit record as binary
%% or some decision related info
@@ -247,17 +242,12 @@ log(C) ->
%% Synced
-slog(C) when C#commit.disc_copies == [],
- C#commit.disc_only_copies == [],
- C#commit.schema_ops == [] ->
- ignore;
slog(C) ->
- case mnesia_monitor:use_dir() of
+ case need_log(C) andalso mnesia_monitor:use_dir() of
true ->
if
is_record(C, commit) ->
- C2 = C#commit{ram_copies = [], snmp = []},
- sappend(latest_log, C2);
+ sappend(latest_log, strip_snmp(C));
true ->
%% Either a commit record as binary
%% or some decision related info
@@ -268,6 +258,13 @@ slog(C) ->
ignore
end.
+need_log(#commit{disc_copies=[], disc_only_copies=[], schema_ops=[], ext=Ext}) ->
+ lists:keymember(ext_copies, 1, Ext);
+need_log(_) -> true.
+
+strip_snmp(#commit{ext=[]}=CR) -> CR;
+strip_snmp(#commit{ext=Ext}=CR) ->
+ CR#commit{ext=lists:keydelete(snmp, 1, Ext)}.
%% Stuff related to the file LOG
diff --git a/lib/mnesia/src/mnesia_monitor.erl b/lib/mnesia/src/mnesia_monitor.erl
index 081d746257..ab78c9b13e 100644
--- a/lib/mnesia/src/mnesia_monitor.erl
+++ b/lib/mnesia/src/mnesia_monitor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
init/0,
mktab/2,
unsafe_mktab/2,
+ unsafe_create_external/4,
mnesia_down/2,
needs_protocol_conversion/1,
negotiate_protocol/1,
@@ -82,9 +83,9 @@
going_down = [], tm_started = false, early_connects = [],
connecting, mq = [], remote_node_status = []}).
--define(current_protocol_version, {8,2}).
+-define(current_protocol_version, {8,3}).
--define(previous_protocol_version, {8,1}).
+-define(previous_protocol_version, {8,2}).
start() ->
gen_server:start_link({local, ?MODULE}, ?MODULE,
@@ -129,6 +130,8 @@ close_log(Name) ->
unsafe_close_log(Name) ->
unsafe_call({unsafe_close_log, Name}).
+unsafe_create_external(Tab, Alias, Mod, Cs) ->
+ unsafe_call({unsafe_create_external, Tab, Alias, Mod, Cs}).
disconnect(Node) ->
cast({disconnect, Node}).
@@ -193,7 +196,7 @@ protocol_version() ->
%% A sorted list of acceptable protocols the
%% preferred protocols are first in the list
acceptable_protocol_versions() ->
- [protocol_version(), ?previous_protocol_version].
+ [protocol_version(), ?previous_protocol_version, {8,1}].
needs_protocol_conversion(Node) ->
case {?catch_val({protocol, Node}), protocol_version()} of
@@ -405,6 +408,14 @@ handle_call({unsafe_close_log, Name}, _From, State) ->
_ = disk_log:close(Name),
{reply, ok, State};
+handle_call({unsafe_create_external, Tab, Alias, Mod, Cs}, _From, State) ->
+ case catch Mod:create_table(Alias, Tab, mnesia_schema:cs2list(Cs)) of
+ {'EXIT', ExitReason} ->
+ {reply, {error, ExitReason}, State};
+ Reply ->
+ {reply, Reply, State}
+ end;
+
handle_call({negotiate_protocol, Mon, _Version, _Protocols}, _From, State)
when State#state.tm_started == false ->
State2 = State#state{early_connects = [node(Mon) | State#state.early_connects]},
@@ -658,6 +669,7 @@ get_env(E) ->
env() ->
[
access_module,
+ allow_index_on_key,
auto_repair,
backup_module,
debug,
@@ -671,19 +683,23 @@ env() ->
extra_db_nodes,
ignore_fallback_at_startup,
fallback_error_function,
+ fold_chunk_size,
max_wait_for_decision,
schema_location,
core_dir,
pid_sort_order,
no_table_loaders,
dc_dump_limit,
- send_compressed
+ send_compressed,
+ schema
].
default_env(access_module) ->
mnesia;
default_env(auto_repair) ->
true;
+default_env(allow_index_on_key) ->
+ false;
default_env(backup_module) ->
mnesia_backup;
default_env(debug) ->
@@ -709,6 +725,8 @@ default_env(ignore_fallback_at_startup) ->
false;
default_env(fallback_error_function) ->
{mnesia, lkill};
+default_env(fold_chunk_size) ->
+ 100;
default_env(max_wait_for_decision) ->
infinity;
default_env(schema_location) ->
@@ -722,7 +740,9 @@ default_env(no_table_loaders) ->
default_env(dc_dump_limit) ->
4;
default_env(send_compressed) ->
- 0.
+ 0;
+default_env(schema) ->
+ [].
check_type(Env, Val) ->
try do_check_type(Env, Val)
@@ -730,6 +750,7 @@ check_type(Env, Val) ->
end.
do_check_type(access_module, A) when is_atom(A) -> A;
+do_check_type(allow_index_on_key, B) -> bool(B);
do_check_type(auto_repair, B) -> bool(B);
do_check_type(backup_module, B) when is_atom(B) -> B;
do_check_type(debug, debug) -> debug;
@@ -753,6 +774,8 @@ do_check_type(extra_db_nodes, L) when is_list(L) ->
(A) when is_atom(A) -> true
end,
lists:filter(Fun, L);
+do_check_type(fold_chunk_size, I) when is_integer(I), I > 0;
+ I =:= infinity -> I;
do_check_type(max_wait_for_decision, infinity) -> infinity;
do_check_type(max_wait_for_decision, I) when is_integer(I), I > 0 -> I;
do_check_type(schema_location, M) -> media(M);
@@ -766,7 +789,8 @@ do_check_type(pid_sort_order, "standard") -> standard;
do_check_type(pid_sort_order, _) -> false;
do_check_type(no_table_loaders, N) when is_integer(N), N > 0 -> N;
do_check_type(dc_dump_limit,N) when is_number(N), N > 0 -> N;
-do_check_type(send_compressed, L) when is_integer(L), L >= 0, L =< 9 -> L.
+do_check_type(send_compressed, L) when is_integer(L), L >= 0, L =< 9 -> L;
+do_check_type(schema, L) when is_list(L) -> L.
bool(true) -> true;
bool(false) -> false.
diff --git a/lib/mnesia/src/mnesia_recover.erl b/lib/mnesia/src/mnesia_recover.erl
index 9420e57afa..b204fb282f 100644
--- a/lib/mnesia/src/mnesia_recover.erl
+++ b/lib/mnesia/src/mnesia_recover.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_registry.erl b/lib/mnesia/src/mnesia_registry.erl
index abf0b745a1..55ddc3d2fd 100644
--- a/lib/mnesia/src/mnesia_registry.erl
+++ b/lib/mnesia/src/mnesia_registry.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_schema.erl b/lib/mnesia/src/mnesia_schema.erl
index 782493fb4f..0e4017e4c3 100644
--- a/lib/mnesia/src/mnesia_schema.erl
+++ b/lib/mnesia/src/mnesia_schema.erl
@@ -29,6 +29,16 @@
-module(mnesia_schema).
-export([
+ add_backend_type/2,
+ do_add_backend_type/2,
+ delete_backend_type/1,
+ do_delete_backend_type/1,
+ backend_types/0,
+ add_index_plugin/3,
+ do_add_index_plugin/3,
+ delete_index_plugin/1,
+ do_delete_index_plugin/1,
+ index_plugins/0,
add_snmp/2,
add_table_copy/3,
add_table_index/2,
@@ -55,14 +65,16 @@
dump_tables/1,
ensure_no_schema/1,
get_create_list/1,
- get_initial_schema/2,
+ get_initial_schema/3,
get_table_properties/1,
info/0,
info/1,
init/1,
+ init_backends/0,
insert_cstruct/3,
is_remote_member/1,
list2cs/1,
+ list2cs/2,
lock_schema/0,
merge_schema/0,
merge_schema/1,
@@ -110,7 +122,8 @@
do_delete_table/1,
do_read_table_property/2,
do_delete_table_property/2,
- do_write_table_property/2]).
+ do_write_table_property/2,
+ do_change_table_copy_type/3]).
-include("mnesia.hrl").
-include_lib("kernel/include/file.hrl").
@@ -138,12 +151,30 @@ init(IgnoreFallback) ->
verbose("Schema initiated from: ~p~n", [Source]),
set({schema, tables}, []),
set({schema, local_tables}, []),
+ do_set_schema(schema),
Tabs = set_schema(?ets_first(schema)),
lists:foreach(fun(Tab) -> clear_whereabouts(Tab) end, Tabs),
set({schema, where_to_read}, node()),
set({schema, load_node}, node()),
set({schema, load_reason}, initial),
- mnesia_controller:add_active_replica(schema, node()).
+ mnesia_controller:add_active_replica(schema, node()),
+ init_backends().
+
+
+init_backends() ->
+ Backends = lists:foldl(fun({Alias, Mod}, Acc) ->
+ orddict:append(Mod, Alias, Acc)
+ end, orddict:new(), get_ext_types()),
+ [init_backend(Mod, Aliases) || {Mod, Aliases} <- Backends],
+ ok.
+
+init_backend(Mod, [_|_] = Aliases) ->
+ case Mod:init_backend() of
+ ok ->
+ Mod:add_aliases(Aliases);
+ Error ->
+ mnesia:abort({backend_init_error, Error})
+ end.
exit_on_error({error, Reason}) ->
exit(Reason);
@@ -180,6 +211,7 @@ do_set_schema(Tab, Cs) ->
set({Tab, ram_copies}, Cs#cstruct.ram_copies),
set({Tab, disc_copies}, Cs#cstruct.disc_copies),
set({Tab, disc_only_copies}, Cs#cstruct.disc_only_copies),
+ set({Tab, external_copies}, Cs#cstruct.external_copies),
set({Tab, load_order}, Cs#cstruct.load_order),
set({Tab, access_mode}, Cs#cstruct.access_mode),
set({Tab, majority}, Cs#cstruct.majority),
@@ -195,15 +227,21 @@ do_set_schema(Tab, Cs) ->
set({Tab, arity}, Arity),
RecName = Cs#cstruct.record_name,
set({Tab, record_name}, RecName),
- set({Tab, record_validation}, {RecName, Arity, Type}),
set({Tab, wild_pattern}, wild(RecName, Arity)),
- set({Tab, index}, Cs#cstruct.index),
+ set({Tab, index}, [P || {P,_} <- Cs#cstruct.index]),
+ case Cs#cstruct.index of
+ [] ->
+ set({Tab, index_info}, mnesia_index:index_info(Type, []));
+ _ ->
+ ignore
+ end,
%% create actual index tabs later
set({Tab, cookie}, Cs#cstruct.cookie),
set({Tab, version}, Cs#cstruct.version),
set({Tab, cstruct}, Cs),
Storage = mnesia_lib:schema_cs_to_storage_type(node(), Cs),
set({Tab, storage_type}, Storage),
+ set_record_validation(Tab, Storage, RecName, Arity, Type),
mnesia_lib:add({schema, tables}, Tab),
Ns = mnesia_lib:cs_to_nodes(Cs),
case lists:member(node(), Ns) of
@@ -213,7 +251,24 @@ do_set_schema(Tab, Cs) ->
mnesia_lib:add({schema, local_tables}, Tab);
false ->
ignore
- end.
+ end,
+ set_ext_types(Tab, get_ext_types(), Cs#cstruct.external_copies).
+
+set_record_validation(Tab, {ext,Alias,Mod}, RecName, Arity, Type) ->
+ set({Tab, record_validation}, {RecName, Arity, Type, Alias, Mod});
+set_record_validation(Tab, _, RecName, Arity, Type) ->
+ set({Tab, record_validation}, {RecName, Arity, Type}).
+
+set_ext_types(Tab, ExtTypes, ExtCopies) ->
+ lists:foreach(
+ fun({Type, _} = Key) ->
+ Nodes = case lists:keyfind(Key, 1, ExtCopies) of
+ {_, Ns} -> Ns;
+ false -> []
+ end,
+ set({Tab, Type}, Nodes)
+ end, ExtTypes).
+
wild(RecName, Arity) ->
Wp0 = list_to_tuple(lists:duplicate(Arity, '_')),
@@ -525,9 +580,14 @@ do_read_disc_schema(Fname, Keep) ->
Res.
get_initial_schema(SchemaStorage, Nodes) ->
+ get_initial_schema(SchemaStorage, Nodes, []).
+
+get_initial_schema(SchemaStorage, Nodes, Properties) -> %
+ UserProps = initial_schema_properties(Properties),
Cs = #cstruct{name = schema,
record_name = schema,
- attributes = [table, cstruct]},
+ attributes = [table, cstruct],
+ user_properties = UserProps},
Cs2 =
case SchemaStorage of
ram_copies -> Cs#cstruct{ram_copies = Nodes};
@@ -535,6 +595,35 @@ get_initial_schema(SchemaStorage, Nodes) ->
end,
cs2list(Cs2).
+initial_schema_properties(Props0) ->
+ DefaultProps = remove_duplicates(mnesia_monitor:get_env(schema)),
+ Props = lists:foldl(
+ fun({K,V}, Acc) ->
+ lists:keystore(K, 1, Acc, {K,V})
+ end, DefaultProps, remove_duplicates(Props0)),
+ initial_schema_properties_(Props).
+
+initial_schema_properties_([{backend_types, Types}|Props]) ->
+ lists:foreach(fun({Name, Module}) ->
+ verify_backend_type(Name, Module)
+ end, Types),
+ [{mnesia_backend_types, Types}|initial_schema_properties_(Props)];
+initial_schema_properties_([{index_plugins, Plugins}|Props]) ->
+ lists:foreach(fun({Name, Module, Function}) ->
+ verify_index_plugin(Name, Module, Function)
+ end, Plugins),
+ [{mnesia_index_plugins, Plugins}|initial_schema_properties_(Props)];
+initial_schema_properties_([P|_Props]) ->
+ mnesia:abort({bad_schema_property, P});
+initial_schema_properties_([]) ->
+ [].
+
+remove_duplicates([{K,_} = H|T]) ->
+ [H | remove_duplicates([X || {K1,_} = X <- T,
+ K1 =/= K])];
+remove_duplicates([]) ->
+ [].
+
read_cstructs_from_disc() ->
%% Assumptions:
%% - local schema lock in global
@@ -551,8 +640,9 @@ read_cstructs_from_disc() ->
{type, set}],
case dets:open_file(make_ref(), Args) of
{ok, Tab} ->
+ ExtTypes = get_ext_types_disc(),
Fun = fun({_, _, List}) ->
- {continue, list2cs(List)}
+ {continue, list2cs(List, ExtTypes)}
end,
Cstructs = dets:traverse(Tab, Fun),
dets:close(Tab),
@@ -632,7 +722,7 @@ do_insert_schema_ops(_Store, []) ->
api_list2cs(List) when is_list(List) ->
Name = pick(unknown, name, List, must),
- Keys = check_keys(Name, List, record_info(fields, cstruct)),
+ Keys = check_keys(Name, List),
check_duplicates(Name, Keys),
list2cs(List);
api_list2cs(Other) ->
@@ -647,7 +737,15 @@ cs2list(Cs) when is_record(Cs, cstruct) ->
cs2list(CreateList) when is_list(CreateList) ->
CreateList;
-%% since 4.6
+cs2list(Cs) when element(1, Cs) == cstruct, tuple_size(Cs) == 20 ->
+ Tags = [name,type,
+ ram_copies,disc_copies,disc_only_copies,external_copies,
+ load_order,access_mode,majority,index,snmp,local_content,
+ record_name,attributes,
+ user_properties,frag_properties,storage_properties,
+ cookie,version],
+ rec2list(Tags, Tags, 2, Cs);
+%% since vsn-4.6 (protocol 8.2 or older)
cs2list(Cs) when element(1, Cs) == cstruct, tuple_size(Cs) == 19 ->
Tags = [name,type,ram_copies,disc_copies,disc_only_copies,
load_order,access_mode,majority,index,snmp,local_content,
@@ -657,8 +755,38 @@ cs2list(Cs) when element(1, Cs) == cstruct, tuple_size(Cs) == 19 ->
rec2list(Tags, Tags, 2, Cs).
cs2list(false, Cs) ->
- cs2list(Cs).
+ cs2list(Cs);
+cs2list({8,3}, Cs) ->
+ cs2list(Cs);
+cs2list({8,Minor}, Cs) when Minor =:= 2; Minor =:= 1 ->
+ Orig = record_info(fields, cstruct),
+ Tags = [name,type,ram_copies,disc_copies,disc_only_copies,
+ load_order,access_mode,majority,index,snmp,local_content,
+ record_name,attributes,
+ user_properties,frag_properties,storage_properties,
+ cookie,version],
+ CsList = rec2list(Tags, Orig, 2, Cs),
+ case proplists:get_value(index, CsList, []) of
+ [] -> CsList;
+ NewFormat ->
+ OldFormat = [Pos || {Pos, _Pref} <- NewFormat],
+ lists:keyreplace(index, 1, CsList, {index, OldFormat})
+ end.
+rec2list([index | Tags], [index|Orig], Pos, Rec) ->
+ Val = element(Pos, Rec),
+ [{index, lists:map(
+ fun({_, _Type}=P) -> P;
+ (P) when is_integer(P); is_atom(P) -> {P, ordered}
+ end, Val)} | rec2list(Tags, Orig, Pos + 1, Rec)];
+rec2list([external_copies | Tags], Orig0, Pos, Rec) ->
+ Orig = case Orig0 of
+ [external_copies|Rest] -> Rest;
+ _ -> Orig0
+ end,
+ Val = element(Pos, Rec),
+ [{Alias, Ns} || {{Alias,_}, Ns} <- Val]
+ ++ rec2list(Tags, Orig, Pos+1, Rec);
rec2list([Tag | Tags], [Tag | Orig], Pos, Rec) ->
Val = element(Pos, Rec),
[{Tag, Val} | rec2list(Tags, Orig, Pos + 1, Rec)];
@@ -667,17 +795,33 @@ rec2list([], _, _Pos, _Rec) ->
rec2list(Tags, [_|Orig], Pos, Rec) ->
rec2list(Tags, Orig, Pos+1, Rec).
-normalize_cs(Cstructs, _Node) ->
- Cstructs.
+normalize_cs(Cstructs, Node) ->
+ %% backward-compatibility hack; normalize before returning
+ case need_old_cstructs([Node]) of
+ false ->
+ Cstructs;
+ Version ->
+ %% some other format
+ [convert_cs(Version, Cs) || Cs <- Cstructs]
+ end.
+
+convert_cs(Version, Cs) ->
+ Fields = [Value || {_, Value} <- cs2list(Version, Cs)],
+ list_to_tuple([cstruct|Fields]).
+
+list2cs(List) ->
+ list2cs(List, get_ext_types()).
-list2cs(List) when is_list(List) ->
+list2cs(List, ExtTypes) when is_list(List) ->
Name = pick(unknown, name, List, must),
Type = pick(Name, type, List, set),
Rc0 = pick(Name, ram_copies, List, []),
Dc = pick(Name, disc_copies, List, []),
Doc = pick(Name, disc_only_copies, List, []),
- Rc = case {Rc0, Dc, Doc} of
- {[], [], []} -> [node()];
+
+ Ext = pick_external_copies(List, ExtTypes),
+ Rc = case {Rc0, Dc, Doc, Ext} of
+ {[], [], [], []} -> [node()];
_ -> Rc0
end,
LC = pick(Name, local_content, List, false),
@@ -695,8 +839,6 @@ list2cs(List) when is_list(List) ->
Ix = pick(Name, index, List, []),
verify({alt, [nil, list]}, mnesia_lib:etype(Ix),
{bad_type, Name, {index, [Ix]}}),
- Ix2 = [attr_to_pos(I, Attrs) || I <- Ix],
-
Frag = pick(Name, frag_properties, List, []),
verify({alt, [nil, list]}, mnesia_lib:etype(Frag),
{badarg, Name, {frag_properties, Frag}}),
@@ -723,24 +865,48 @@ list2cs(List) when is_list(List) ->
DetsOpts = proplists:get_value(dets, BEProps, []),
is_list(DetsOpts) orelse mnesia:abort({badarg, Name, {dets, DetsOpts}}),
[CheckProp(Prop, BadDetsOpts) || Prop <- DetsOpts],
- #cstruct{name = Name,
- ram_copies = Rc,
- disc_copies = Dc,
- disc_only_copies = Doc,
- type = Type,
- index = Ix2,
- snmp = Snmp,
- load_order = LoadOrder,
- access_mode = AccessMode,
- majority = Majority,
- local_content = LC,
- record_name = RecName,
- attributes = Attrs,
- user_properties = lists:sort(UserProps),
- frag_properties = lists:sort(Frag),
- storage_properties = lists:sort(BEProps),
- cookie = Cookie,
- version = Version}.
+
+ case lists:keymember(mnesia, 1, application:which_applications()) of
+ true ->
+ Keys = check_keys(Name, List),
+ check_duplicates(Name, Keys);
+ false ->
+ %% check_keys/2 cannot be executed when mnesia is not
+ %% running, due to it not being possible to read what ext
+ %% backends are loaded.
+ %%% this doesn't work - disabled for now:
+ %%%Keys = check_keys(Name, List, record_info(fields, cstruct)),
+ %%%check_duplicates(Name, Keys)
+ ignore
+ end,
+
+ Cs0 = #cstruct{name = Name,
+ ram_copies = Rc,
+ disc_copies = Dc,
+ disc_only_copies = Doc,
+ external_copies = Ext,
+ type = Type,
+ index = Ix,
+ snmp = Snmp,
+ load_order = LoadOrder,
+ access_mode = AccessMode,
+ majority = Majority,
+ local_content = LC,
+ record_name = RecName,
+ attributes = Attrs,
+ user_properties = lists:sort(UserProps),
+ frag_properties = lists:sort(Frag),
+ storage_properties = lists:sort(BEProps),
+ cookie = Cookie,
+ version = Version},
+ case Ix of
+ [] -> Cs0;
+ [_|_] ->
+ Ix2 = expand_index_attrs(Cs0),
+ Cs0#cstruct{index = Ix2}
+ end;
+list2cs(Other, _ExtTypes) ->
+ mnesia:abort({badarg, Other}).
pick(Tab, Key, List, Default) ->
case lists:keysearch(Key, 1, List) of
@@ -754,6 +920,79 @@ pick(Tab, Key, List, Default) ->
mnesia:abort({bad_type, Tab, BadArg})
end.
+pick_external_copies(_List, []) ->
+ [];
+pick_external_copies(List, ExtTypes) ->
+ lists:foldr(
+ fun({K, Val}, Acc) ->
+ case lists:keyfind(K, 1, ExtTypes) of
+ false ->
+ Acc;
+ {_, Mod} ->
+ [{{K,Mod}, Val}|Acc]
+ end
+ end, [], List).
+
+expand_storage_type(S) when S==ram_copies;
+ S==disc_copies;
+ S==disc_only_copies ->
+ S;
+expand_storage_type(S) ->
+ case lists:keyfind(S, 1, get_ext_types()) of
+ false ->
+ mnesia:abort({bad_type, {storage_type, S}});
+ {Alias, Mod} ->
+ {ext, Alias, Mod}
+ end.
+
+get_ext_types() ->
+ get_schema_user_property(mnesia_backend_types).
+
+get_index_plugins() ->
+ get_schema_user_property(mnesia_index_plugins).
+
+get_schema_user_property(Key) ->
+ Tab = schema,
+ %% Must work reliably both within transactions and outside of transactions
+ Res = case get(mnesia_activity_state) of
+ undefined ->
+ dirty_read_table_property(Tab, Key);
+ _ ->
+ do_read_table_property(Tab, Key)
+ end,
+ case Res of
+ undefined ->
+ [];
+ {_, Types} ->
+ Types
+ end.
+
+get_ext_types_disc() ->
+ try get_ext_types_disc_()
+ catch
+ error:_ ->[]
+ end.
+
+get_ext_types_disc_() ->
+ case mnesia_schema:remote_read_schema() of
+ {ok, _, Prop} ->
+ K1 = user_properties,
+ case lists:keyfind(K1, 1, Prop) of
+ {K1, UserProp} ->
+ K2 = mnesia_backend_types,
+ case lists:keyfind(K2, 1, UserProp) of
+ {K2, Types} ->
+ Types;
+ _ ->
+ []
+ end;
+ _ ->
+ []
+ end;
+ _ ->
+ []
+ end.
+
%% Convert attribute name to integer if neccessary
attr_tab_to_pos(_Tab, Pos) when is_integer(Pos) ->
Pos;
@@ -761,6 +1000,7 @@ attr_tab_to_pos(Tab, Attr) ->
attr_to_pos(Attr, val({Tab, attributes})).
%% Convert attribute name to integer if neccessary
+attr_to_pos({_} = P, _) -> P;
attr_to_pos(Pos, _Attrs) when is_integer(Pos) ->
Pos;
attr_to_pos(Attr, Attrs) when is_atom(Attr) ->
@@ -775,8 +1015,18 @@ attr_to_pos(Attr, [_ | Attrs], Pos) ->
attr_to_pos(Attr, _, _) ->
mnesia:abort({bad_type, Attr}).
+check_keys(Tab, Attrs) ->
+ Types = [T || {T,_} <- get_ext_types()],
+ check_keys(Tab, Attrs, Types ++ record_info(fields, cstruct)).
+
check_keys(Tab, [{Key, _Val} | Tail], Items) ->
- case lists:member(Key, Items) of
+ Key1 = if
+ is_tuple(Key) ->
+ element(1, Key);
+ true ->
+ Key
+ end,
+ case lists:member(Key1, Items) of
true -> [Key | check_keys(Tab, Tail, Items)];
false -> mnesia:abort({badarg, Tab, Key})
end;
@@ -800,7 +1050,92 @@ has_duplicates([]) ->
false.
%% This is the only place where we check the validity of data
-verify_cstruct(Cs) when is_record(Cs, cstruct) ->
+
+verify_cstruct(#cstruct{} = Cs) ->
+ assert_correct_cstruct(Cs),
+ Cs1 = verify_external_copies(
+ Cs#cstruct{index = expand_index_attrs(Cs)}),
+ assert_correct_cstruct(Cs1),
+ Cs1.
+
+expand_index_attrs(#cstruct{index = Ix, attributes = Attrs,
+ name = Tab} = Cs) ->
+ Prefered = prefered_index_types(Cs),
+ expand_index_attrs(Ix, Tab, Attrs, Prefered).
+
+expand_index_attrs(Ix, Tab, Attrs, Prefered) ->
+ lists:map(fun(P) when is_integer(P); is_atom(P) ->
+ {attr_to_pos(P, Attrs), Prefered};
+ ({A} = P) when is_atom(A) ->
+ {P, Prefered};
+ ({P, Type}) ->
+ {attr_to_pos(P, Attrs), Type};
+ (_Other) ->
+ mnesia:abort({bad_type, Tab, {index, Ix}})
+ end, Ix).
+
+prefered_index_types(#cstruct{external_copies = Ext}) ->
+ ExtTypes = [mnesia_lib:semantics(S, index_types) ||
+ {S,Ns} <- Ext, Ns =/= []],
+ case intersect_types(ExtTypes) of
+ [] -> ordered;
+ [Pref|_] -> Pref
+ end.
+
+intersect_types([]) ->
+ [];
+intersect_types([S1, S2|Rest]) ->
+ intersect_types([S1 -- (S1 -- S2)|Rest]);
+intersect_types([S]) ->
+ S.
+
+verify_external_copies(#cstruct{external_copies = []} = Cs) ->
+ Cs;
+verify_external_copies(#cstruct{name = Tab, external_copies = EC} = Cs) ->
+ Bad = {bad_type, Tab, {external_copies, EC}},
+ AllECNodes = lists:concat([Ns || {_, Ns} <- EC,
+ is_list(Ns)]),
+ verify(true, length(lists:usort(AllECNodes)) == length(AllECNodes), Bad),
+ CsL = cs2list(Cs),
+ CsL1 = lists:foldl(
+ fun({{Alias, Mod}, Ns} = _X, CsLx) ->
+ BadTab = fun(Why) ->
+ {Why, Tab, {{ext, Alias, Mod},Ns}}
+ end,
+ verify(atom, mnesia_lib:etype(Mod), BadTab),
+ verify(true, fun() ->
+ lists:all(fun is_atom/1, Ns)
+ end, BadTab),
+ check_semantics(Mod, Alias, BadTab, Cs),
+ try Mod:check_definition(Alias, Tab, Ns, CsLx) of
+ ok ->
+ CsLx;
+ {ok, CsLx1} ->
+ CsLx1;
+ {error, Reason} ->
+ mnesia:abort(BadTab(Reason))
+ catch
+ error:E ->
+ mnesia:abort(BadTab(E))
+ end;
+ (_, CsLx) ->
+ CsLx
+ end, CsL, EC),
+ list2cs(CsL1).
+
+check_semantics(Mod, Alias, BadTab, #cstruct{type = Type}) ->
+ Ext = {ext, Alias, Mod},
+ case lists:member(mnesia_lib:semantics(Ext, storage), [ram_copies, disc_copies,
+ disc_only_copies]) of
+ false -> mnesia:abort(BadTab(invalid_storage));
+ true -> ok
+ end,
+ case lists:member(Type, mnesia_lib:semantics(Ext, types)) of
+ false -> mnesia:abort(BadTab(bad_type));
+ true -> ok
+ end.
+
+assert_correct_cstruct(Cs) when is_record(Cs, cstruct) ->
verify_nodes(Cs),
Tab = Cs#cstruct.name,
@@ -841,22 +1176,30 @@ verify_cstruct(Cs) when is_record(Cs, cstruct) ->
Attrs),
Index = Cs#cstruct.index,
+
verify({alt, [nil, list]}, mnesia_lib:etype(Index),
{bad_type, Tab, {index, Index}}),
+ IxPlugins = get_index_plugins(),
+ AllowIndexOnKey = check_if_allow_index_on_key(),
IxFun =
- fun(Pos) ->
- verify(true, fun() ->
- if
- is_integer(Pos),
- Pos > 2,
- Pos =< Arity ->
- true;
- true -> false
- end
- end,
- {bad_type, Tab, {index, [Pos]}})
- end,
+ fun(Pos) ->
+ verify(
+ true, fun() ->
+ I = index_pos(Pos),
+ case Pos of
+ {_, T} ->
+ (T==bag orelse T==ordered)
+ andalso good_ix_pos(
+ I, AllowIndexOnKey,
+ Arity, IxPlugins);
+ _ ->
+ good_ix_pos(Pos, AllowIndexOnKey,
+ Arity, IxPlugins)
+ end
+ end,
+ {bad_type, Tab, {index, [Pos]}})
+ end,
lists:foreach(IxFun, Index),
LC = Cs#cstruct.local_content,
@@ -880,7 +1223,9 @@ verify_cstruct(Cs) when is_record(Cs, cstruct) ->
{badarg, Tab, {snmp, Snmp}}),
CheckProp = fun(Prop) when is_tuple(Prop), size(Prop) >= 1 -> ok;
- (Prop) -> mnesia:abort({bad_type, Tab, {user_properties, [Prop]}})
+ (Prop) ->
+ mnesia:abort({bad_type, Tab,
+ {user_properties, [Prop]}})
end,
lists:foreach(CheckProp, Cs#cstruct.user_properties),
@@ -900,17 +1245,45 @@ verify_cstruct(Cs) when is_record(Cs, cstruct) ->
mnesia:abort({bad_type, Tab, {version, Version}})
end.
+good_ix_pos({_} = P, _, _, Plugins) ->
+ lists:keymember(P, 1, Plugins);
+good_ix_pos(I, true, Arity, _) when is_integer(I) ->
+ I >= 0 andalso I =< Arity;
+good_ix_pos(I, false, Arity, _) when is_integer(I) ->
+ I > 2 andalso I =< Arity;
+good_ix_pos(_, _, _, _) ->
+ false.
+
+
+check_if_allow_index_on_key() ->
+ case mnesia_monitor:get_env(allow_index_on_key) of
+ true ->
+ true;
+ _ ->
+ false
+ end.
+
verify_nodes(Cs) ->
Tab = Cs#cstruct.name,
Ram = Cs#cstruct.ram_copies,
Disc = Cs#cstruct.disc_copies,
DiscOnly = Cs#cstruct.disc_only_copies,
+ Ext = lists:append([Ns || {_,Ns} <- Cs#cstruct.external_copies]),
LoadOrder = Cs#cstruct.load_order,
verify({alt, [nil, list]}, mnesia_lib:etype(Ram),
{bad_type, Tab, {ram_copies, Ram}}),
verify({alt, [nil, list]}, mnesia_lib:etype(Disc),
{bad_type, Tab, {disc_copies, Disc}}),
+ lists:foreach(
+ fun({BE, Ns}) ->
+ verify({alt, [nil, list]}, mnesia_lib:etype(Ns),
+ {bad_type, Tab, {BE, Ns}}),
+ lists:foreach(fun(N) ->
+ verify(atom, mnesia_lib:etype(N),
+ {bad_type, Tab, {BE, Ns}})
+ end, Ns)
+ end, Cs#cstruct.external_copies),
case Tab of
schema ->
verify([], DiscOnly, {bad_type, Tab, {disc_only_copies, DiscOnly}});
@@ -922,12 +1295,15 @@ verify_nodes(Cs) ->
verify(integer, mnesia_lib:etype(LoadOrder),
{bad_type, Tab, {load_order, LoadOrder}}),
- Nodes = Ram ++ Disc ++ DiscOnly,
+ Nodes = Ram ++ Disc ++ DiscOnly ++ Ext,
verify(list, mnesia_lib:etype(Nodes),
{combine_error, Tab,
- [{ram_copies, []}, {disc_copies, []}, {disc_only_copies, []}]}),
+ [{ram_copies, []}, {disc_copies, []},
+ {disc_only_copies, []}, {external_copies, []}]}),
verify(false, has_duplicates(Nodes), {combine_error, Tab, Nodes}),
- AtomCheck = fun(N) -> verify(atom, mnesia_lib:etype(N), {bad_type, Tab, N}) end,
+ AtomCheck = fun(N) ->
+ verify(atom, mnesia_lib:etype(N), {bad_type, Tab, N})
+ end,
lists:foreach(AtomCheck, Nodes).
verify(Expected, Fun, Error) when is_function(Fun) ->
@@ -1010,28 +1386,194 @@ check_active([{badrpc, Reason} | _Replies], Expl, Tab) ->
check_active([], _Expl, _Tab) ->
ok.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Function for definining an external backend type
+
+add_backend_type(Name, Module) ->
+ case schema_transaction(fun() -> do_add_backend_type(Name, Module) end) of
+ {atomic, NeedsInit} ->
+ case NeedsInit of
+ true ->
+ Module:init_backend();
+ false ->
+ ignore
+ end,
+ Module:add_aliases([Name]),
+ {atomic, ok};
+ Other ->
+ Other
+ end.
+
+do_add_backend_type(Name, Module) ->
+ verify_backend_type(Name, Module),
+ Types = case do_read_table_property(schema, mnesia_backend_types) of
+ undefined ->
+ [];
+ {_, Ts} ->
+ case lists:keymember(Name, 1, Ts) of
+ true ->
+ mnesia:abort({backend_type_already_exists, Name});
+ false ->
+ Ts
+ end
+ end,
+ ModuleRegistered = lists:keymember(Module, 2, Types),
+ do_write_table_property(schema, {mnesia_backend_types,
+ [{Name, Module}|Types]}),
+ ModuleRegistered.
+
+delete_backend_type(Name) ->
+ schema_transaction(fun() -> do_delete_backend_type(Name) end).
+
+do_delete_backend_type(Name) ->
+ case do_read_table_property(schema, mnesia_backend_types) of
+ undefined ->
+ [];
+ {_, Ts} ->
+ case lists:keyfind(Name, 1, Ts) of
+ {_, Mod} ->
+ case using_backend_type(Name, Mod) of
+ [_|_] = Tabs ->
+ mnesia:abort({backend_in_use, {Name, Tabs}});
+ [] ->
+ do_write_table_property(
+ schema, {mnesia_backend_types,
+ lists:keydelete(Name, 1, Ts)})
+ end;
+ false ->
+ mnesia:abort({no_such_backend, Name})
+ end
+ end.
+
+using_backend_type(Name, Mod) ->
+ Ext = ets:select(mnesia_gvar,
+ [{ {{'$1',external_copies},'$2'}, [], [{{'$1','$2'}}] }]),
+ Entry = {Name, Mod},
+ [T || {T,C} <- Ext,
+ lists:keymember(Entry, 1, C)].
+
+verify_backend_type(Name, Module) ->
+ case legal_backend_name(Name) of
+ false ->
+ mnesia:abort({bad_type, {backend_type,Name,Module}});
+ true ->
+ ok
+ end,
+ ExpectedExports = mnesia_backend_type:behaviour_info(callbacks),
+ Exports = try Module:module_info(exports)
+ catch
+ error:_ ->
+ mnesia:abort({undef_backend, Module})
+ end,
+ case ExpectedExports -- Exports of
+ [] ->
+ ok;
+ _Other ->
+ io:fwrite(user, "Missing backend_type exports: ~p~n", [_Other]),
+ mnesia:abort({bad_type, {backend_type,Name,Module}})
+ end.
+
+legal_backend_name(Name) ->
+ is_atom(Name) andalso
+ (not lists:member(Name, record_info(fields, cstruct))).
+
+%% Used e.g. by mnesia:system_info(backend_types).
+backend_types() ->
+ [ram_copies, disc_copies, disc_only_copies |
+ [T || {T,_} <- get_ext_types()]].
+
+add_index_plugin(Name, Module, Function) ->
+ schema_transaction(
+ fun() -> do_add_index_plugin(Name, Module, Function) end).
+
+do_add_index_plugin(Name, Module, Function) ->
+ verify_index_plugin(Name, Module, Function),
+ Plugins = case do_read_table_property(schema, mnesia_index_plugins) of
+ undefined ->
+ [];
+ {_, Ps} ->
+ case lists:keymember(Name, 1, Ps) of
+ true ->
+ mnesia:abort({index_plugin_already_exists, Name});
+ false ->
+ Ps
+ end
+ end,
+ do_write_table_property(schema, {mnesia_index_plugins,
+ [{Name, Module, Function}|Plugins]}).
+
+delete_index_plugin(P) ->
+ schema_transaction(
+ fun() -> do_delete_index_plugin(P) end).
+
+do_delete_index_plugin({A} = P) when is_atom(A) ->
+ Plugins = get_index_plugins(),
+ case lists:keyfind(P, 1, Plugins) of
+ false ->
+ mnesia:abort({no_exists, {index_plugin, P}});
+ _Found ->
+ case ets:select(mnesia_gvar,
+ [{ {{'$1',{index,{P,'_'}}},'_'},[],['$1']},
+ { {{'$1',{index,P}},'_'},[],['$1']}], 1) of
+ {[_], _} ->
+ mnesia:abort({plugin_in_use, P});
+ '$end_of_table' ->
+ do_write_table_property(
+ schema, {mnesia_index_plugins,
+ lists:keydelete(P, 1, Plugins)})
+ end
+ end.
+
+verify_index_plugin({A} = Name, Module, Function)
+ when is_atom(A), is_atom(Module), is_atom(Function) ->
+ case code:ensure_loaded(Module) of
+ {error, nofile} ->
+ mnesia:abort({bad_type, {index_plugin,Name,Module,Function}});
+ {module,_} ->
+ %% Index plugins are called as Module:Function(Tab, Pos, Obj)
+ case erlang:function_exported(Module, Function, 3) of
+ true ->
+ ok;
+ false ->
+ mnesia:abort(
+ {bad_type, {index_plugin,Name,Module,Function}})
+ end
+ end;
+verify_index_plugin(Name, Module, Function) ->
+ mnesia:abort({bad_type, {index_plugin,Name,Module,Function}}).
+
+
+%% Used e.g. by mnesia:system_info(backend_types).
+index_plugins() ->
+ get_index_plugins().
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Here's the real interface function to create a table
-create_table(TabDef) ->
- schema_transaction(fun() -> do_multi_create_table(TabDef) end).
+create_table([_|_] = TabDef) ->
+ schema_transaction(fun() -> do_multi_create_table(TabDef) end);
+create_table(Arg) -> {aborted, {badarg, Arg}}.
%% And the corresponding do routines ....
do_multi_create_table(TabDef) ->
get_tid_ts_and_lock(schema, write),
ensure_writable(schema),
+ do_create_table(TabDef),
+ ok.
+
+do_create_table(TabDef) when is_list(TabDef) ->
Cs = api_list2cs(TabDef),
case Cs#cstruct.frag_properties of
[] ->
- do_create_table(Cs);
+ do_create_table_1(Cs);
_Props ->
CsList = mnesia_frag:expand_cstruct(Cs),
- lists:foreach(fun do_create_table/1, CsList)
- end,
- ok.
+ lists:foreach(fun do_create_table_1/1, CsList)
+ end.
-do_create_table(Cs) ->
+do_create_table_1(Cs) ->
{_Mod, _Tid, Ts} = get_tid_ts_and_lock(schema, none),
Store = Ts#tidstore.store,
do_insert_schema_ops(Store, make_create_table(Cs)).
@@ -1041,14 +1583,9 @@ make_create_table(Cs) ->
verify(false, check_if_exists(Tab), {already_exists, Tab}),
unsafe_make_create_table(Cs).
-% unsafe_do_create_table(Cs) ->
-% {_Mod, Tid, Ts} = get_tid_ts_and_lock(schema, none),
-% Store = Ts#tidstore.store,
-% do_insert_schema_ops(Store, unsafe_make_create_table(Cs)).
-
-unsafe_make_create_table(Cs) ->
+unsafe_make_create_table(Cs0) ->
{_Mod, Tid, Ts} = get_tid_ts_and_lock(schema, none),
- verify_cstruct(Cs),
+ Cs = verify_cstruct(Cs0),
Tab = Cs#cstruct.name,
%% Check that we have all disc replica nodes running
@@ -1196,8 +1733,7 @@ make_add_table_copy(Tab, Node, Storage) ->
Cs = incr_version(val({Tab, cstruct})),
Ns = mnesia_lib:cs_to_nodes(Cs),
verify(false, lists:member(Node, Ns), {already_exists, Tab, Node}),
- Cs2 = new_cs(Cs, Node, Storage, add),
- verify_cstruct(Cs2),
+ Cs2 = verify_cstruct(new_cs(Cs, Node, Storage, add)),
%% Check storage and if node is running
IsRunning = lists:member(Node, val({current, db_nodes})),
@@ -1245,14 +1781,14 @@ make_del_table_copy(Tab, Node) ->
_ when Tab == schema ->
%% ensure_active(Cs2),
ensure_not_active(Tab, Node),
- verify_cstruct(Cs2),
+ Cs3 = verify_cstruct(Cs2),
Ops = remove_node_from_tabs(val({schema, tables}), Node),
- [{op, del_table_copy, ram_copies, Node, vsn_cs2list(Cs2)} | Ops];
+ [{op, del_table_copy, ram_copies, Node, vsn_cs2list(Cs3)} | Ops];
_ ->
ensure_active(Cs),
- verify_cstruct(Cs2),
- get_tid_ts_and_lock(Tab, write),
- [{op, del_table_copy, Storage, Node, vsn_cs2list(Cs2)}]
+ Cs3 = verify_cstruct(Cs2),
+ get_tid_ts_and_lock(Tab, write),
+ [{op, del_table_copy, Storage, Node, vsn_cs2list(Cs3)}]
end.
remove_node_from_tabs([], _Node) ->
@@ -1278,9 +1814,9 @@ remove_node_from_tabs([Tab|Rest], Node) ->
[{op, delete_table, vsn_cs2list(Cs)} |
remove_node_from_tabs(Rest, Node)];
_Ns ->
- verify_cstruct(Cs2),
+ Cs3 = verify_cstruct(Cs2),
get_tid_ts_and_lock(Tab, write),
- [{op, del_table_copy, ram_copies, Node, vsn_cs2list(Cs2)}|
+ [{op, del_table_copy, ram_copies, Node, vsn_cs2list(Cs3)}|
remove_node_from_tabs(Rest, Node)]
end
end.
@@ -1298,8 +1834,34 @@ new_cs(Cs, Node, disc_copies, del) ->
new_cs(Cs, Node, disc_only_copies, del) ->
Cs#cstruct{disc_only_copies =
lists:delete(Node , Cs#cstruct.disc_only_copies)};
-new_cs(Cs, _Node, Storage, _Op) ->
- mnesia:abort({badarg, Cs#cstruct.name, Storage}).
+new_cs(#cstruct{external_copies = ExtCps} = Cs, Node, Storage0, Op) ->
+ Storage = case Storage0 of
+ {ext, Alias, _} -> Alias;
+ Alias -> Alias
+ end,
+ ExtTypes = get_ext_types(),
+ case lists:keyfind(Storage, 1, ExtTypes) of
+ false ->
+ mnesia:abort({badarg, Cs#cstruct.name, Storage});
+ {_, Mod} ->
+ Key = {Storage, Mod},
+ case {lists:keymember(Key, 1, ExtCps), Op} of
+ {false, del} ->
+ Cs;
+ {false, add} ->
+ Cs#cstruct{external_copies = [{Key, [Node]}|ExtCps]};
+ {true, _} ->
+ F = fun({K, Ns}) when K == Key ->
+ case Op of
+ del -> {K, lists:delete(Node, Ns)};
+ add -> {K, opt_add(Node, Ns)}
+ end;
+ (X) ->
+ X
+ end,
+ Cs#cstruct{external_copies = lists:map(F, ExtCps)}
+ end
+ end.
opt_add(N, L) -> [N | lists:delete(N, L)].
@@ -1335,8 +1897,7 @@ make_move_table(Tab, FromNode, ToNode) ->
verify(true, lists:member(ToNode, Running), {not_active, schema, ToNode}),
Cs2 = new_cs(Cs, ToNode, Storage, add),
- Cs3 = new_cs(Cs2, FromNode, Storage, del),
- verify_cstruct(Cs3),
+ Cs3 = verify_cstruct(new_cs(Cs2, FromNode, Storage, del)),
[{op, add_table_copy, Storage, ToNode, vsn_cs2list(Cs2)},
{op, sync_trans},
{op, del_table_copy, Storage, FromNode, vsn_cs2list(Cs3)}].
@@ -1363,9 +1924,11 @@ make_change_table_copy_type(Tab, Node, ToS) ->
Cs = incr_version(val({Tab, cstruct})),
FromS = mnesia_lib:storage_type_at_node(Node, Tab),
- case compare_storage_type(false, FromS, ToS) of
+ ToSExp = expand_storage_type(ToS),
+
+ case compare_storage_type(false, FromS, ToSExp) of
{same, _} ->
- mnesia:abort({already_exists, Tab, Node, ToS});
+ mnesia:abort({already_exists, Tab, Node, ToSExp});
{diff, _} ->
ignore;
incompatible ->
@@ -1373,10 +1936,8 @@ make_change_table_copy_type(Tab, Node, ToS) ->
end,
Cs2 = new_cs(Cs, Node, FromS, del),
- Cs3 = new_cs(Cs2, Node, ToS, add),
- verify_cstruct(Cs3),
-
- [{op, change_table_copy_type, Node, FromS, ToS, vsn_cs2list(Cs3)}].
+ Cs3 = verify_cstruct(new_cs(Cs2, Node, ToS, add)),
+ [{op, change_table_copy_type, Node, FromS, ToSExp, vsn_cs2list(Cs3)}].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% change index functions ....
@@ -1398,11 +1959,12 @@ make_add_table_index(Tab, Pos) ->
Cs = incr_version(val({Tab, cstruct})),
ensure_active(Cs),
Ix = Cs#cstruct.index,
- verify(false, lists:member(Pos, Ix), {already_exists, Tab, Pos}),
+ verify(false, lists:keymember(index_pos(Pos), 1, Ix),
+ {already_exists, Tab, Pos}),
Ix2 = lists:sort([Pos | Ix]),
- Cs2 = Cs#cstruct{index = Ix2},
- verify_cstruct(Cs2),
- [{op, add_index, Pos, vsn_cs2list(Cs2)}].
+ Cs2 = verify_cstruct(Cs#cstruct{index = Ix2}),
+ NewPosInfo = lists:keyfind(Pos, 1, Cs2#cstruct.index),
+ [{op, add_index, NewPosInfo, vsn_cs2list(Cs2)}].
del_table_index(Tab, Pos) ->
schema_transaction(fun() -> do_del_table_index(Tab, Pos) end).
@@ -1420,9 +1982,8 @@ make_del_table_index(Tab, Pos) ->
Cs = incr_version(val({Tab, cstruct})),
ensure_active(Cs),
Ix = Cs#cstruct.index,
- verify(true, lists:member(Pos, Ix), {no_exists, Tab, Pos}),
- Cs2 = Cs#cstruct{index = lists:delete(Pos, Ix)},
- verify_cstruct(Cs2),
+ verify(true, lists:keymember(Pos, 1, Ix), {no_exists, Tab, Pos}),
+ Cs2 = verify_cstruct(Cs#cstruct{index = lists:keydelete(Pos, 1, Ix)}),
[{op, del_index, Pos, vsn_cs2list(Cs2)}].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1444,8 +2005,7 @@ make_add_snmp(Tab, Ustruct) ->
verify([], Cs#cstruct.snmp, {already_exists, Tab, snmp}),
Error = {badarg, Tab, snmp, Ustruct},
verify(true, mnesia_snmp_hook:check_ustruct(Ustruct), Error),
- Cs2 = Cs#cstruct{snmp = Ustruct},
- verify_cstruct(Cs2),
+ Cs2 = verify_cstruct(Cs#cstruct{snmp = Ustruct}),
[{op, add_snmp, Ustruct, vsn_cs2list(Cs2)}].
del_snmp(Tab) ->
@@ -1462,8 +2022,7 @@ make_del_snmp(Tab) ->
ensure_writable(schema),
Cs = incr_version(val({Tab, cstruct})),
ensure_active(Cs),
- Cs2 = Cs#cstruct{snmp = []},
- verify_cstruct(Cs2),
+ Cs2 = verify_cstruct(Cs#cstruct{snmp = []}),
[{op, del_snmp, vsn_cs2list(Cs2)}].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1492,19 +2051,21 @@ make_transform(Tab, Fun, NewAttrs, NewRecName) ->
Cs = incr_version(val({Tab, cstruct})),
ensure_active(Cs),
ensure_writable(Tab),
- case mnesia_lib:val({Tab, index}) of
+ case Cs#cstruct.index of
[] ->
- Cs2 = Cs#cstruct{attributes = NewAttrs, record_name = NewRecName},
- verify_cstruct(Cs2),
+ Cs2 = verify_cstruct(
+ Cs#cstruct{attributes = NewAttrs,
+ record_name = NewRecName}),
[{op, transform, Fun, vsn_cs2list(Cs2)}];
PosList ->
- DelIdx = fun(Pos, Ncs) ->
+ DelIdx = fun({Pos,_}, Ncs) ->
Ix = Ncs#cstruct.index,
- Ncs1 = Ncs#cstruct{index = lists:delete(Pos, Ix)},
+ Ix2 = lists:keydelete(Pos, 1, Ix),
+ Ncs1 = Ncs#cstruct{index = Ix2},
Op = {op, del_index, Pos, vsn_cs2list(Ncs1)},
{Op, Ncs1}
end,
- AddIdx = fun(Pos, Ncs) ->
+ AddIdx = fun({_,_} = Pos, Ncs) ->
Ix = Ncs#cstruct.index,
Ix2 = lists:sort([Pos | Ix]),
Ncs1 = Ncs#cstruct{index = Ix2},
@@ -1514,10 +2075,16 @@ make_transform(Tab, Fun, NewAttrs, NewRecName) ->
{DelOps, Cs1} = lists:mapfoldl(DelIdx, Cs, PosList),
Cs2 = Cs1#cstruct{attributes = NewAttrs, record_name = NewRecName},
{AddOps, Cs3} = lists:mapfoldl(AddIdx, Cs2, PosList),
- verify_cstruct(Cs3),
- lists:flatten([DelOps, {op, transform, Fun, vsn_cs2list(Cs2)}, AddOps])
+ _ = verify_cstruct(Cs3), % just a sanity check
+ lists:flatten([DelOps, {op, transform, Fun, vsn_cs2list(Cs2)},
+ AddOps])
end.
+index_pos({Pos,_}) -> Pos;
+index_pos(Pos) when is_integer(Pos) -> Pos;
+index_pos({P} = Pos) when is_atom(P) -> Pos.
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
@@ -1537,8 +2104,7 @@ make_change_table_access_mode(Tab, Mode) ->
ensure_active(Cs),
OldMode = Cs#cstruct.access_mode,
verify(false, OldMode == Mode, {already_exists, Tab, Mode}),
- Cs2 = Cs#cstruct{access_mode = Mode},
- verify_cstruct(Cs2),
+ Cs2 = verify_cstruct(Cs#cstruct{access_mode = Mode}),
[{op, change_table_access_mode, vsn_cs2list(Cs2), OldMode, Mode}].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1558,8 +2124,7 @@ make_change_table_load_order(Tab, LoadOrder) ->
Cs = incr_version(val({Tab, cstruct})),
ensure_active(Cs),
OldLoadOrder = Cs#cstruct.load_order,
- Cs2 = Cs#cstruct{load_order = LoadOrder},
- verify_cstruct(Cs2),
+ Cs2 = verify_cstruct(Cs#cstruct{load_order = LoadOrder}),
[{op, change_table_load_order, vsn_cs2list(Cs2), OldLoadOrder, LoadOrder}].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1605,6 +2170,7 @@ write_table_property(Tab, Prop) when is_tuple(Prop), size(Prop) >= 1 ->
schema_transaction(fun() -> do_write_table_property(Tab, Prop) end);
write_table_property(Tab, Prop) ->
{aborted, {bad_type, Tab, Prop}}.
+
do_write_table_property(Tab, Prop) ->
TidTs = get_tid_ts_and_lock(schema, write),
{_, _, Ts} = TidTs,
@@ -1636,8 +2202,7 @@ make_write_table_properties(Tab, [Prop | Props], Cs) ->
PropKey = element(1, Prop),
DelProps = lists:keydelete(PropKey, 1, OldProps),
MergedProps = lists:merge(DelProps, [Prop]),
- Cs2 = Cs#cstruct{user_properties = MergedProps},
- verify_cstruct(Cs2),
+ Cs2 = verify_cstruct(Cs#cstruct{user_properties = MergedProps}),
[{op, write_property, vsn_cs2list(Cs2), Prop} |
make_write_table_properties(Tab, Props, Cs2)];
make_write_table_properties(_Tab, [], _Cs) ->
@@ -1682,22 +2247,38 @@ do_read_table_property(Tab, Key) ->
{_, _, Ts} = TidTs,
Store = Ts#tidstore.store,
Props = ets:foldl(
- fun({op, create_table, [{name, T}|Opts]}, _Acc)
- when T==Tab ->
+ fun({op, announce_im_running,_,Opts,_,_}, _Acc) when Tab==schema ->
+ find_props(Opts);
+ ({op, create_table, [{name, T}|Opts]}, _Acc)
+ when T==Tab ->
find_props(Opts);
({op, Op, [{name,T}|Opts], _Prop}, _Acc)
- when T==Tab, Op==write_property; Op==delete_property ->
+ when T==Tab, Op==write_property;
+ T==Tab, Op==delete_property ->
find_props(Opts);
({op, delete_table, [{name,T}|_]}, _Acc)
when T==Tab ->
[];
(_Other, Acc) ->
Acc
- end, [], Store),
- case lists:keysearch(Key, 1, Props) of
- {value, Property} ->
- Property;
- false ->
+ end, undefined, Store),
+ case Props of
+ undefined ->
+ get_tid_ts_and_lock(Tab, read),
+ dirty_read_table_property(Tab, Key);
+ _ when is_list(Props) ->
+ case lists:keyfind(Key, 1, Props) of
+ false ->
+ undefined;
+ Other ->
+ Other
+ end
+ end.
+
+dirty_read_table_property(Tab, Key) ->
+ try ets:lookup_element(mnesia_gvar, {Tab,user_property,Key}, 2)
+ catch
+ error:_ ->
undefined
end.
@@ -1757,8 +2338,7 @@ make_delete_table_properties(Tab, PropKeys) ->
make_delete_table_properties(Tab, [PropKey | PropKeys], Cs) ->
OldProps = Cs#cstruct.user_properties,
Props = lists:keydelete(PropKey, 1, OldProps),
- Cs2 = Cs#cstruct{user_properties = Props},
- verify_cstruct(Cs2),
+ Cs2 = verify_cstruct(Cs#cstruct{user_properties = Props}),
[{op, delete_property, vsn_cs2list(Cs2), PropKey} |
make_delete_table_properties(Tab, PropKeys, Cs2)];
make_delete_table_properties(_Tab, [], _Cs) ->
@@ -1899,6 +2479,11 @@ prepare_op(Tid, {op, create_table, TabDef}, _WaitFor) ->
create_disc_only_table(Tab,Cs),
insert_cstruct(Tid, Cs, false),
{true, optional};
+ {ext, Alias, Mod} ->
+ mnesia_lib:set({Tab, create_table},true),
+ create_external_table(Alias, Tab, Mod, Cs),
+ insert_cstruct(Tid, Cs, false),
+ {true, optional};
unknown -> %% No replica on this node
mnesia_lib:set({Tab, create_table},true),
insert_cstruct(Tid, Cs, false),
@@ -1967,6 +2552,12 @@ prepare_op(_Tid, {op, change_table_copy_type, N, FromS, ToS, TabDef}, _WaitFor)
NotActive = mnesia_lib:not_active_here(Tab),
+ if Tab =/= schema ->
+ check_if_disc_required(FromS, ToS);
+ true ->
+ ok
+ end,
+
if
NotActive == true ->
mnesia:abort({not_active, Tab, node()});
@@ -2006,6 +2597,15 @@ prepare_op(_Tid, {op, change_table_copy_type, N, FromS, ToS, TabDef}, _WaitFor)
mnesia:abort({combine_error, Tab, ToS})
end;
+ element(1,FromS) == ext; element(1,ToS) == ext ->
+ if ToS == ram_copies ->
+ create_ram_table(Tab, Cs);
+ true ->
+ ok
+ end,
+ mnesia_dumper:dump_to_logfile(FromS, Tab),
+ mnesia_checkpoint:tm_change_table_copy_type(Tab, FromS, ToS);
+
FromS == ram_copies ->
case mnesia_monitor:use_dir() of
true ->
@@ -2021,7 +2621,9 @@ prepare_op(_Tid, {op, change_table_copy_type, N, FromS, ToS, TabDef}, _WaitFor)
disc_only_copies ->
mnesia_dumper:raw_named_dump_table(Tab, dmp)
end,
- mnesia_checkpoint:tm_change_table_copy_type(Tab, FromS, ToS)
+ mnesia_checkpoint:tm_change_table_copy_type(Tab,
+ FromS,
+ ToS)
end;
false ->
mnesia:abort({has_no_disc, node()})
@@ -2029,6 +2631,7 @@ prepare_op(_Tid, {op, change_table_copy_type, N, FromS, ToS, TabDef}, _WaitFor)
FromS == disc_copies, ToS == disc_only_copies ->
mnesia_dumper:raw_named_dump_table(Tab, dmp);
+
FromS == disc_only_copies ->
Type = Cs#cstruct.type,
create_ram_table(Tab, Cs),
@@ -2040,6 +2643,7 @@ prepare_op(_Tid, {op, change_table_copy_type, N, FromS, ToS, TabDef}, _WaitFor)
Err = "Failed to copy disc data to ram",
mnesia:abort({system_limit, Tab, {Err,Reason}})
end;
+
true ->
ignore
end,
@@ -2103,6 +2707,8 @@ prepare_op(_Tid, {op, transform, Fun, TabDef}, _WaitFor) ->
{true, Objs, mandatory}
catch _:Reason ->
mnesia_lib:db_fixtable(Storage, Tab, false),
+ mnesia_lib:important("Transform function failed: '~p' in '~p'",
+ [Reason, erlang:get_stacktrace()]),
exit({"Bad transform function", Tab, Fun, node(), Reason})
end
end;
@@ -2119,6 +2725,22 @@ prepare_op(_Tid, {op, merge_schema, TabDef}, _WaitFor) ->
prepare_op(_Tid, _Op, _WaitFor) ->
{true, optional}.
+check_if_disc_required(FromS, ToS) ->
+ FromSem = mnesia_lib:semantics(FromS, storage),
+ ToSem = mnesia_lib:semantics(ToS, storage),
+ case {FromSem, ToSem} of
+ {ram_copies, _} when ToSem == disc_copies;
+ ToSem == disc_only_copies ->
+ case mnesia_monitor:use_dir() of
+ true ->
+ ok;
+ false ->
+ mnesia:abort({has_no_disc, node()})
+ end;
+ _ ->
+ ok
+ end.
+
create_ram_table(Tab, #cstruct{type=Type, storage_properties=Props}) ->
EtsOpts = proplists:get_value(ets, Props, []),
Args = [{keypos, 2}, public, named_table, Type | EtsOpts],
@@ -2160,6 +2782,14 @@ create_disc_only_table(Tab, #cstruct{type=Type, storage_properties=Props}) ->
mnesia:abort({system_limit, Tab, {Err,Reason}})
end.
+create_external_table(Alias, Tab, Mod, Cs) ->
+ case mnesia_monitor:unsafe_create_external(Tab, Alias, Mod, Cs) of
+ ok ->
+ ok;
+ {error,Reason} ->
+ Err = "Failed to create external table",
+ mnesia:abort({system_limit, Tab, {Err,Reason}})
+ end.
receive_sync([], Pids) ->
Pids;
@@ -2294,7 +2924,10 @@ undo_prepare_op(Tid, {op, create_table, TabDef}) ->
mnesia_monitor:unsafe_close_dets(Tab),
Dat = mnesia_lib:tab2dat(Tab),
%% disc_delete_table(Tab, Storage),
- file:delete(Dat)
+ file:delete(Dat);
+ {ext, Alias, Mod} ->
+ Mod:close_table(Alias, Tab),
+ Mod:delete_table(Alias, Tab)
end;
undo_prepare_op(Tid, {op, add_table_copy, Storage, Node, TabDef}) ->
@@ -2394,6 +3027,8 @@ ram_delete_table(Tab, Storage) ->
case Storage of
unknown ->
ignore;
+ {ext, _, _} ->
+ ignore;
disc_only_copies ->
ignore;
_Else ->
@@ -2455,13 +3090,27 @@ purge_known_files([File | Tail], KeepFiles, Dir, Suffixes) ->
ignore;
true ->
AbsFile = filename:join([Dir, File]),
- file:delete(AbsFile)
- end
+ delete_recursive(AbsFile)
+ end
end,
purge_known_files(Tail, KeepFiles, Dir, Suffixes);
purge_known_files([], _KeepFiles, _Dir, _Suffixes) ->
ok.
+%% Removes a directory or file recursively
+delete_recursive(Path) ->
+ case filelib:is_dir(Path) of
+ true ->
+ {ok, Names} = file:list_dir(Path),
+ lists:foreach(fun(Name) ->
+ delete_recursive(filename:join(Path, Name))
+ end,
+ Names),
+ file:del_dir(Path);
+ false ->
+ file:delete(Path)
+ end.
+
has_known_suffix(_File, _Suffixes, true) ->
true;
has_known_suffix(File, [Suffix | Tail], false) ->
@@ -2469,11 +3118,33 @@ has_known_suffix(File, [Suffix | Tail], false) ->
has_known_suffix(_File, [], Bool) ->
Bool.
-known_suffixes() -> real_suffixes() ++ tmp_suffixes().
+known_suffixes() -> known_suffixes(get_ext_types_disc()).
+
+known_suffixes(Ext) -> real_suffixes(Ext) ++ tmp_suffixes(Ext).
-real_suffixes() -> [".DAT", ".LOG", ".BUP", ".DCL", ".DCD"].
+real_suffixes(Ext) -> [".DAT", ".LOG", ".BUP", ".DCL", ".DCD"] ++ ext_real_suffixes(Ext).
-tmp_suffixes() -> [".TMP", ".BUPTMP", ".RET", ".DMP"].
+tmp_suffixes() -> tmp_suffixes(get_ext_types_disc()).
+
+tmp_suffixes(Ext) -> [".TMP", ".BUPTMP", ".RET", ".DMP", "."] ++ ext_tmp_suffixes(Ext).
+
+ext_real_suffixes(Ext) ->
+ try lists:foldl(fun(Mod, Acc) -> Acc++Mod:real_suffixes() end, [],
+ [M || {_,M} <- Ext])
+ catch
+ error:E ->
+ verbose("Cant find real ext suffixes (~p)~n", [E]),
+ []
+ end.
+
+ext_tmp_suffixes(Ext) ->
+ try lists:foldl(fun(Mod, Acc) -> Acc++Mod:tmp_suffixes() end, [],
+ [M || {_,M} <- Ext])
+ catch
+ error:E ->
+ verbose("Cant find tmp ext suffixes (~p)~n", [E]),
+ []
+ end.
info() ->
Tabs = lists:sort(val({schema, tables})),
@@ -2591,12 +3262,12 @@ do_restore(R, BupSchema) ->
arrange_restore(R, Fun, Recs) ->
R2 = R#r{insert_op = Fun, recs = Recs},
- case mnesia_bup:iterate(R#r.module, fun restore_items/4, R#r.opaque, R2) of
+ case mnesia_bup:iterate(R#r.module, fun restore_items/5, R#r.opaque, R2) of
{ok, R3} -> R3#r.recs;
{error, Reason} -> mnesia:abort(Reason)
end.
-restore_items([Rec | Recs], Header, Schema, R) ->
+restore_items([Rec | Recs], Header, Schema, Ext, R) ->
Tab = element(1, Rec),
case lists:keysearch(Tab, 1, R#r.tables) of
{value, {Tab, Where0, Snmp, RecName}} ->
@@ -2609,13 +3280,13 @@ restore_items([Rec | Recs], Header, Schema, R) ->
{Rest, NRecs} = restore_tab_items([Rec | Recs], Tab,
RecName, Where, Snmp,
R#r.recs, R#r.insert_op),
- restore_items(Rest, Header, Schema, R#r{recs = NRecs});
+ restore_items(Rest, Header, Schema, Ext, R#r{recs = NRecs});
false ->
Rest = skip_tab_items(Recs, Tab),
- restore_items(Rest, Header, Schema, R)
+ restore_items(Rest, Header, Schema, Ext, R)
end;
-restore_items([], _Header, _Schema, R) ->
+restore_items([], _Header, _Schema, _Ext, R) ->
R.
restore_func(Tab, R) ->
@@ -2629,8 +3300,14 @@ restore_func(Tab, R) ->
where_to_commit(Tab, CsList) ->
Ram = [{N, ram_copies} || N <- pick(Tab, ram_copies, CsList, [])],
Disc = [{N, disc_copies} || N <- pick(Tab, disc_copies, CsList, [])],
- DiscO = [{N, disc_only_copies} || N <- pick(Tab, disc_only_copies, CsList, [])],
- Ram ++ Disc ++ DiscO.
+ DiscO = [{N, disc_only_copies} ||
+ N <- pick(Tab, disc_only_copies, CsList, [])],
+ ExtNodes = [{Alias, Mod, pick(Tab, Alias, CsList, [])} ||
+ {Alias, Mod} <- get_ext_types()],
+ Ext = lists:foldl(fun({Alias, Mod, Ns}, Acc) ->
+ [{N, {ext, Alias, Mod}} || N <- Ns] ++ Acc
+ end, [], ExtNodes),
+ Ram ++ Disc ++ DiscO ++ Ext.
%% Changes of the Meta info of schema itself is not allowed
restore_schema([{schema, schema, _List} | Schema], R) ->
@@ -2709,7 +3386,13 @@ make_dump_tables([schema | _Tabs]) ->
make_dump_tables([Tab | Tabs]) ->
get_tid_ts_and_lock(Tab, read),
TabDef = get_create_list(Tab),
- DiscResident = val({Tab, disc_copies}) ++ val({Tab, disc_only_copies}),
+ DiscResident =
+ val({Tab, disc_copies}) ++
+ val({Tab, disc_only_copies}) ++
+ lists:concat([Ns || {{A,M},Ns} <- val({Tab, external_copies}),
+ lists:member(
+ mnesia_lib:semantics({ext,A,M},storage),
+ [disc_copies, disc_only_copies])]),
verify([], DiscResident,
{"Only allowed on ram_copies", Tab, DiscResident}),
[{op, dump_table, unknown, TabDef} | make_dump_tables(Tabs)];
@@ -2721,7 +3404,9 @@ merge_schema() ->
schema_transaction(fun() -> do_merge_schema([]) end).
merge_schema(UserFun) ->
- schema_transaction(fun() -> UserFun(fun(Arg) -> do_merge_schema(Arg) end) end).
+ schema_transaction(fun() ->
+ UserFun(fun(Arg) -> do_merge_schema(Arg) end)
+ end).
do_merge_schema(LockTabs0) ->
{_Mod, Tid, Ts} = get_tid_ts_and_lock(schema, write),
@@ -2795,11 +3480,23 @@ do_merge_schema(LockTabs0) ->
end.
fetch_cstructs(Node) ->
- rpc:call(Node, mnesia_controller, get_remote_cstructs, []).
+ Convert = mnesia_monitor:needs_protocol_conversion(Node),
+ case rpc:call(Node, mnesia_controller, get_remote_cstructs, []) of
+ {cstructs, Cs0, RemoteRunning1} when Convert ->
+ {cstructs, [list2cs(cs2list(Cs)) || Cs <- Cs0], RemoteRunning1};
+ Result ->
+ Result
+ end.
-need_old_cstructs() -> false.
+need_old_cstructs() ->
+ need_old_cstructs(val({schema, where_to_write})).
-need_old_cstructs(_Nodes) -> false.
+need_old_cstructs(Nodes) ->
+ Filter = fun(Node) -> mnesia_monitor:needs_protocol_conversion(Node) end,
+ case lists:filter(Filter, Nodes) of
+ [] -> false;
+ Ns -> lists:min([element(1, ?catch_val({protocol, Node})) || Node <- Ns])
+ end.
tab_to_nodes(Tab) when is_atom(Tab) ->
Cs = val({Tab, cstruct}),
@@ -2952,8 +3649,8 @@ do_make_merge_schema(Node, NeedsConv, RemoteCs = #cstruct{}) ->
%% invariants must be enforced in order to allow merge of cstructs.
%%
%% Returns a new cstruct or issues a fatal error
-merge_cstructs(Cs, RemoteCs, Force) ->
- verify_cstruct(Cs),
+merge_cstructs(Cs0, RemoteCs, Force) ->
+ Cs = verify_cstruct(Cs0),
try do_merge_cstructs(Cs, RemoteCs, Force) of
MergedCs when is_record(MergedCs, cstruct) ->
MergedCs
@@ -2963,15 +3660,15 @@ merge_cstructs(Cs, RemoteCs, Force) ->
error:Reason -> exit(Reason)
end.
-do_merge_cstructs(Cs, RemoteCs, Force) ->
- verify_cstruct(RemoteCs),
+do_merge_cstructs(Cs, RemoteCs0, Force) ->
+ RemoteCs = verify_cstruct(RemoteCs0),
Ns = mnesia_lib:uniq(mnesia_lib:cs_to_nodes(Cs) ++
mnesia_lib:cs_to_nodes(RemoteCs)),
{AnythingNew, MergedCs} =
merge_storage_type(Ns, false, Cs, RemoteCs, Force),
- MergedCs2 = merge_versions(AnythingNew, MergedCs, RemoteCs, Force),
- verify_cstruct(MergedCs2),
- MergedCs2.
+ verify_cstruct(
+ merge_versions(AnythingNew, MergedCs, RemoteCs, Force)).
+
merge_storage_type([N | Ns], AnythingNew, Cs, RemoteCs, Force) ->
Local = mnesia_lib:cs_to_storage_type(N, Cs),
@@ -3115,4 +3812,3 @@ unannounce_im_running([N | Ns]) ->
unannounce_im_running(Ns);
unannounce_im_running([]) ->
ok.
-
diff --git a/lib/mnesia/src/mnesia_snmp_hook.erl b/lib/mnesia/src/mnesia_snmp_hook.erl
index 1599ff1e65..58a20c6051 100644
--- a/lib/mnesia/src/mnesia_snmp_hook.erl
+++ b/lib/mnesia/src/mnesia_snmp_hook.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_snmp_sup.erl b/lib/mnesia/src/mnesia_snmp_sup.erl
index 862eaaec77..ed579d01c5 100644
--- a/lib/mnesia/src/mnesia_snmp_sup.erl
+++ b/lib/mnesia/src/mnesia_snmp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_sp.erl b/lib/mnesia/src/mnesia_sp.erl
index 71c1e7dd0c..d65c659690 100644
--- a/lib/mnesia/src/mnesia_sp.erl
+++ b/lib/mnesia/src/mnesia_sp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_subscr.erl b/lib/mnesia/src/mnesia_subscr.erl
index 246d0e8697..c2748f5bae 100644
--- a/lib/mnesia/src/mnesia_subscr.erl
+++ b/lib/mnesia/src/mnesia_subscr.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_sup.erl b/lib/mnesia/src/mnesia_sup.erl
index 3a9360aa6d..4aece81308 100644
--- a/lib/mnesia/src/mnesia_sup.erl
+++ b/lib/mnesia/src/mnesia_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -60,9 +60,10 @@ init() ->
Flags = {one_for_all, 0, 3600}, % Should be rest_for_one policy
Event = event_procs(),
+ Ext = ext_procs(),
Kernel = kernel_procs(),
- {ok, {Flags, Event ++ Kernel}}.
+ {ok, {Flags, Event ++ Ext ++ Kernel}}.
event_procs() ->
KillAfter = timer:seconds(30),
@@ -75,6 +76,11 @@ kernel_procs() ->
KA = infinity,
[{K, {K, start, []}, permanent, KA, supervisor, [K, supervisor]}].
+ext_procs() ->
+ K = mnesia_ext_sup,
+ KA = infinity,
+ [{K, {K, start, []}, permanent, KA, supervisor, [K, supervisor]}].
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% event handler
diff --git a/lib/mnesia/src/mnesia_text.erl b/lib/mnesia/src/mnesia_text.erl
index 34655b0318..21adca813a 100644
--- a/lib/mnesia/src/mnesia_text.erl
+++ b/lib/mnesia/src/mnesia_text.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/src/mnesia_tm.erl b/lib/mnesia/src/mnesia_tm.erl
index 1d3eb87036..b116b48312 100644
--- a/lib/mnesia/src/mnesia_tm.erl
+++ b/lib/mnesia/src/mnesia_tm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,7 +42,8 @@
put_activity_id/2,
block_tab/1,
unblock_tab/1,
- fixtable/3
+ fixtable/3,
+ new_cr_format/1
]).
%% sys callback functions
@@ -206,10 +207,10 @@ doit_loop(#state{coordinators=Coordinators,participants=Participants,supervisor=
{_From, {async_dirty, Tid, Commit, Tab}} ->
case lists:member(Tab, State#state.blocked_tabs) of
false ->
- do_async_dirty(Tid, Commit, Tab),
+ do_async_dirty(Tid, new_cr_format(Commit), Tab),
doit_loop(State);
true ->
- Item = {async_dirty, Tid, Commit, Tab},
+ Item = {async_dirty, Tid, new_cr_format(Commit), Tab},
State2 = State#state{dirty_queue = [Item | State#state.dirty_queue]},
doit_loop(State2)
end;
@@ -217,10 +218,10 @@ doit_loop(#state{coordinators=Coordinators,participants=Participants,supervisor=
{From, {sync_dirty, Tid, Commit, Tab}} ->
case lists:member(Tab, State#state.blocked_tabs) of
false ->
- do_sync_dirty(From, Tid, Commit, Tab),
+ do_sync_dirty(From, Tid, new_cr_format(Commit), Tab),
doit_loop(State);
true ->
- Item = {sync_dirty, From, Tid, Commit, Tab},
+ Item = {sync_dirty, From, Tid, new_cr_format(Commit), Tab},
State2 = State#state{dirty_queue = [Item | State#state.dirty_queue]},
doit_loop(State2)
end;
@@ -241,10 +242,11 @@ doit_loop(#state{coordinators=Coordinators,participants=Participants,supervisor=
reply(From, {error, {system_limit, Msg, Reason}}, State)
end;
- {From, {ask_commit, Protocol, Tid, Commit, DiscNs, RamNs}} ->
+ {From, {ask_commit, Protocol, Tid, Commit0, DiscNs, RamNs}} ->
?eval_debug_fun({?MODULE, doit_ask_commit},
[{tid, Tid}, {prot, Protocol}]),
mnesia_checkpoint:tm_enter_pending(Tid, DiscNs, RamNs),
+ Commit = new_cr_format(Commit0),
Pid =
case Protocol of
asym_trans when node(Tid#tid.pid) /= node() ->
@@ -1137,14 +1139,14 @@ arrange(Tid, Store, Type) ->
reverse([]) ->
[];
reverse([H=#commit{ram_copies=Ram, disc_copies=DC,
- disc_only_copies=DOC,snmp = Snmp}
+ disc_only_copies=DOC, ext=Ext}
|R]) ->
[
H#commit{
- ram_copies = lists:reverse(Ram),
- disc_copies = lists:reverse(DC),
- disc_only_copies = lists:reverse(DOC),
- snmp = lists:reverse(Snmp)
+ ram_copies = lists:reverse(Ram),
+ disc_copies = lists:reverse(DC),
+ disc_only_copies = lists:reverse(DOC),
+ ext = [{Type, lists:reverse(E)} || {Type,E} <- Ext]
}
| reverse(R)].
@@ -1311,8 +1313,13 @@ pick_node({dirty,_}, Node, [], Done) ->
pick_node(_Tid, Node, [], _Done) ->
mnesia:abort({bad_commit, {missing_lock, Node}}).
-prepare_node(Node, Storage, [Item | Items], Rec, Kind) when Kind == snmp ->
- Rec2 = Rec#commit{snmp = [Item | Rec#commit.snmp]},
+prepare_node(Node, Storage, [Item | Items], #commit{ext=Ext0}=Rec, Kind) when Kind == snmp ->
+ Rec2 = case lists:keytake(snmp, 1, Ext0) of
+ false ->
+ Rec#commit{ext = [{snmp,[Item]}|Ext0]};
+ {_, {snmp,Snmp},Ext} ->
+ Rec#commit{ext = [{snmp,[Item|Snmp]}|Ext]}
+ end,
prepare_node(Node, Storage, Items, Rec2, Kind);
prepare_node(Node, Storage, [Item | Items], Rec, Kind) when Kind /= schema ->
Rec2 =
@@ -1323,7 +1330,15 @@ prepare_node(Node, Storage, [Item | Items], Rec, Kind) when Kind /= schema ->
Rec#commit{disc_copies = [Item | Rec#commit.disc_copies]};
disc_only_copies ->
Rec#commit{disc_only_copies =
- [Item | Rec#commit.disc_only_copies]}
+ [Item | Rec#commit.disc_only_copies]};
+ {ext, Alias, Mod} ->
+ Ext0 = Rec#commit.ext,
+ case lists:keytake(ext_copies, 1, Ext0) of
+ false ->
+ Rec#commit{ext = [{ext_copies, [{{ext,Alias,Mod}, Item}]}|Ext0]};
+ {_,{_,EC},Ext} ->
+ Rec#commit{ext = [{ext_copies, [{{ext,Alias,Mod}, Item}|EC]}|Ext]}
+ end
end,
prepare_node(Node, Storage, Items, Rec2, Kind);
prepare_node(_Node, _Storage, Items, Rec, Kind)
@@ -1750,16 +1765,30 @@ do_commit(Tid, Bin) when is_binary(Bin) ->
do_commit(Tid, binary_to_term(Bin));
do_commit(Tid, C) ->
do_commit(Tid, C, optional).
+
do_commit(Tid, Bin, DumperMode) when is_binary(Bin) ->
do_commit(Tid, binary_to_term(Bin), DumperMode);
do_commit(Tid, C, DumperMode) ->
mnesia_dumper:update(Tid, C#commit.schema_ops, DumperMode),
- R = do_snmp(Tid, C#commit.snmp),
+ R = do_snmp(Tid, proplists:get_value(snmp, C#commit.ext, [])),
R2 = do_update(Tid, ram_copies, C#commit.ram_copies, R),
R3 = do_update(Tid, disc_copies, C#commit.disc_copies, R2),
R4 = do_update(Tid, disc_only_copies, C#commit.disc_only_copies, R3),
+ R5 = do_update_ext(Tid, C#commit.ext, R4),
mnesia_subscr:report_activity(Tid),
- R4.
+ R5.
+
+%% This could/should be optimized
+do_update_ext(_Tid, [], OldRes) -> OldRes;
+do_update_ext(Tid, Ext, OldRes) ->
+ case lists:keyfind(ext_copies, 1, Ext) of
+ false -> OldRes;
+ {_, Ops} ->
+ Do = fun({{ext, _,_} = Storage, Op}, R) ->
+ do_update(Tid, Storage, [Op], R)
+ end,
+ lists:foldl(Do, OldRes, Ops)
+ end.
%% Update the items
do_update(Tid, Storage, [Op | Ops], OldRes) ->
@@ -1782,12 +1811,12 @@ do_update(_Tid, _Storage, [], Res) ->
Res.
do_update_op(Tid, Storage, {{Tab, K}, Obj, write}) ->
- commit_write(?catch_val({Tab, commit_work}), Tid,
+ commit_write(?catch_val({Tab, commit_work}), Tid, Storage,
Tab, K, Obj, undefined),
mnesia_lib:db_put(Storage, Tab, Obj);
do_update_op(Tid, Storage, {{Tab, K}, Val, delete}) ->
- commit_delete(?catch_val({Tab, commit_work}), Tid, Tab, K, Val, undefined),
+ commit_delete(?catch_val({Tab, commit_work}), Tid, Storage, Tab, K, Val, undefined),
mnesia_lib:db_erase(Storage, Tab, K);
do_update_op(Tid, Storage, {{Tab, K}, {RecName, Incr}, update_counter}) ->
@@ -1805,86 +1834,84 @@ do_update_op(Tid, Storage, {{Tab, K}, {RecName, Incr}, update_counter}) ->
mnesia_lib:db_put(Storage, Tab, Zero),
{Zero, []}
end,
- commit_update(?catch_val({Tab, commit_work}), Tid, Tab,
+ commit_update(?catch_val({Tab, commit_work}), Tid, Storage, Tab,
K, NewObj, OldObjs),
element(3, NewObj);
do_update_op(Tid, Storage, {{Tab, Key}, Obj, delete_object}) ->
commit_del_object(?catch_val({Tab, commit_work}),
- Tid, Tab, Key, Obj, undefined),
+ Tid, Storage, Tab, Key, Obj),
mnesia_lib:db_match_erase(Storage, Tab, Obj);
do_update_op(Tid, Storage, {{Tab, Key}, Obj, clear_table}) ->
- commit_clear(?catch_val({Tab, commit_work}), Tid, Tab, Key, Obj),
+ commit_clear(?catch_val({Tab, commit_work}), Tid, Storage, Tab, Key, Obj),
mnesia_lib:db_match_erase(Storage, Tab, Obj).
-commit_write([], _, _, _, _, _) -> ok;
-commit_write([{checkpoints, CpList}|R], Tid, Tab, K, Obj, Old) ->
+commit_write([], _, _, _, _, _, _) -> ok;
+commit_write([{checkpoints, CpList}|R], Tid, Storage, Tab, K, Obj, Old) ->
mnesia_checkpoint:tm_retain(Tid, Tab, K, write, CpList),
- commit_write(R, Tid, Tab, K, Obj, Old);
-commit_write([H|R], Tid, Tab, K, Obj, Old)
+ commit_write(R, Tid, Storage, Tab, K, Obj, Old);
+commit_write([H|R], Tid, Storage, Tab, K, Obj, Old)
when element(1, H) == subscribers ->
mnesia_subscr:report_table_event(H, Tab, Tid, Obj, write, Old),
- commit_write(R, Tid, Tab, K, Obj, Old);
-commit_write([H|R], Tid, Tab, K, Obj, Old)
+ commit_write(R, Tid, Storage, Tab, K, Obj, Old);
+commit_write([H|R], Tid, Storage, Tab, K, Obj, Old)
when element(1, H) == index ->
- mnesia_index:add_index(H, Tab, K, Obj, Old),
- commit_write(R, Tid, Tab, K, Obj, Old).
+ mnesia_index:add_index(H, Storage, Tab, K, Obj, Old),
+ commit_write(R, Tid, Storage, Tab, K, Obj, Old).
-commit_update([], _, _, _, _, _) -> ok;
-commit_update([{checkpoints, CpList}|R], Tid, Tab, K, Obj, _) ->
+commit_update([], _, _, _, _, _, _) -> ok;
+commit_update([{checkpoints, CpList}|R], Tid, Storage, Tab, K, Obj, _) ->
Old = mnesia_checkpoint:tm_retain(Tid, Tab, K, write, CpList),
- commit_update(R, Tid, Tab, K, Obj, Old);
-commit_update([H|R], Tid, Tab, K, Obj, Old)
+ commit_update(R, Tid, Storage, Tab, K, Obj, Old);
+commit_update([H|R], Tid, Storage, Tab, K, Obj, Old)
when element(1, H) == subscribers ->
mnesia_subscr:report_table_event(H, Tab, Tid, Obj, write, Old),
- commit_update(R, Tid, Tab, K, Obj, Old);
-commit_update([H|R], Tid, Tab, K, Obj, Old)
+ commit_update(R, Tid, Storage, Tab, K, Obj, Old);
+commit_update([H|R], Tid,Storage, Tab, K, Obj, Old)
when element(1, H) == index ->
- mnesia_index:add_index(H, Tab, K, Obj, Old),
- commit_update(R, Tid, Tab, K, Obj, Old).
+ mnesia_index:add_index(H, Storage, Tab, K, Obj, Old),
+ commit_update(R, Tid, Storage, Tab, K, Obj, Old).
-commit_delete([], _, _, _, _, _) -> ok;
-commit_delete([{checkpoints, CpList}|R], Tid, Tab, K, Obj, _) ->
+commit_delete([], _, _, _, _, _, _) -> ok;
+commit_delete([{checkpoints, CpList}|R], Tid, Storage, Tab, K, Obj, _) ->
Old = mnesia_checkpoint:tm_retain(Tid, Tab, K, delete, CpList),
- commit_delete(R, Tid, Tab, K, Obj, Old);
-commit_delete([H|R], Tid, Tab, K, Obj, Old)
+ commit_delete(R, Tid, Storage, Tab, K, Obj, Old);
+commit_delete([H|R], Tid, Storage, Tab, K, Obj, Old)
when element(1, H) == subscribers ->
mnesia_subscr:report_table_event(H, Tab, Tid, Obj, delete, Old),
- commit_delete(R, Tid, Tab, K, Obj, Old);
-commit_delete([H|R], Tid, Tab, K, Obj, Old)
+ commit_delete(R, Tid, Storage, Tab, K, Obj, Old);
+commit_delete([H|R], Tid, Storage, Tab, K, Obj, Old)
when element(1, H) == index ->
- mnesia_index:delete_index(H, Tab, K),
- commit_delete(R, Tid, Tab, K, Obj, Old).
+ mnesia_index:delete_index(H, Storage, Tab, K),
+ commit_delete(R, Tid, Storage, Tab, K, Obj, Old).
commit_del_object([], _, _, _, _, _) -> ok;
-commit_del_object([{checkpoints, CpList}|R], Tid, Tab, K, Obj, _) ->
- Old = mnesia_checkpoint:tm_retain(Tid, Tab, K, delete_object, CpList),
- commit_del_object(R, Tid, Tab, K, Obj, Old);
-commit_del_object([H|R], Tid, Tab, K, Obj, Old)
- when element(1, H) == subscribers ->
- mnesia_subscr:report_table_event(H, Tab, Tid, Obj, delete_object, Old),
- commit_del_object(R, Tid, Tab, K, Obj, Old);
-commit_del_object([H|R], Tid, Tab, K, Obj, Old)
- when element(1, H) == index ->
- mnesia_index:del_object_index(H, Tab, K, Obj, Old),
- commit_del_object(R, Tid, Tab, K, Obj, Old).
-
-commit_clear([], _, _, _, _) -> ok;
-commit_clear([{checkpoints, CpList}|R], Tid, Tab, K, Obj) ->
+commit_del_object([{checkpoints, CpList}|R], Tid, Storage, Tab, K, Obj) ->
+ mnesia_checkpoint:tm_retain(Tid, Tab, K, delete_object, CpList),
+ commit_del_object(R, Tid, Storage, Tab, K, Obj);
+commit_del_object([H|R], Tid, Storage, Tab, K, Obj) when element(1, H) == subscribers ->
+ mnesia_subscr:report_table_event(H, Tab, Tid, Obj, delete_object),
+ commit_del_object(R, Tid, Storage, Tab, K, Obj);
+commit_del_object([H|R], Tid, Storage, Tab, K, Obj) when element(1, H) == index ->
+ mnesia_index:del_object_index(H, Storage, Tab, K, Obj),
+ commit_del_object(R, Tid, Storage, Tab, K, Obj).
+
+commit_clear([], _, _, _, _, _) -> ok;
+commit_clear([{checkpoints, CpList}|R], Tid, Storage, Tab, K, Obj) ->
mnesia_checkpoint:tm_retain(Tid, Tab, K, clear_table, CpList),
- commit_clear(R, Tid, Tab, K, Obj);
-commit_clear([H|R], Tid, Tab, K, Obj)
+ commit_clear(R, Tid, Storage, Tab, K, Obj);
+commit_clear([H|R], Tid, Storage, Tab, K, Obj)
when element(1, H) == subscribers ->
mnesia_subscr:report_table_event(H, Tab, Tid, Obj, clear_table, undefined),
- commit_clear(R, Tid, Tab, K, Obj);
-commit_clear([H|R], Tid, Tab, K, Obj)
+ commit_clear(R, Tid, Storage, Tab, K, Obj);
+commit_clear([H|R], Tid, Storage, Tab, K, Obj)
when element(1, H) == index ->
mnesia_index:clear_index(H, Tab, K, Obj),
- commit_clear(R, Tid, Tab, K, Obj).
+ commit_clear(R, Tid, Storage, Tab, K, Obj).
do_snmp(_, []) -> ok;
-do_snmp(Tid, [Head | Tail]) ->
+do_snmp(Tid, [Head|Tail]) ->
try mnesia_snmp_hook:update(Head)
catch _:Reason ->
%% This should only happen when we recently have
@@ -1896,31 +1923,34 @@ do_snmp(Tid, [Head | Tail]) ->
end,
do_snmp(Tid, Tail).
-commit_nodes([C | Tail], AccD, AccR)
- when C#commit.disc_copies == [],
- C#commit.disc_only_copies == [],
- C#commit.schema_ops == [] ->
- commit_nodes(Tail, AccD, [C#commit.node | AccR]);
commit_nodes([C | Tail], AccD, AccR) ->
- commit_nodes(Tail, [C#commit.node | AccD], AccR);
+ case C of
+ #commit{disc_copies=[], disc_only_copies=[], schema_ops=[], ext=Ext} ->
+ case lists:keyfind(ext_copies, 1, Ext) of
+ false -> commit_nodes(Tail, AccD, [C#commit.node | AccR]);
+ _ -> commit_nodes(Tail, [C#commit.node | AccD], AccR)
+ end;
+ _ ->
+ commit_nodes(Tail, [C#commit.node | AccD], AccR)
+ end;
commit_nodes([], AccD, AccR) ->
{AccD, AccR}.
commit_decision(D, [C | Tail], AccD, AccR) ->
N = C#commit.node,
{D2, Tail2} =
- case C#commit.schema_ops of
- [] when C#commit.disc_copies == [],
- C#commit.disc_only_copies == [] ->
- commit_decision(D, Tail, AccD, [N | AccR]);
- [] ->
+ case C of
+ #commit{disc_copies=[], disc_only_copies=[], schema_ops=[], ext=Ext} ->
+ case lists:keyfind(ext_copies, 1, Ext) of
+ false -> commit_decision(D, Tail, AccD, [N | AccR]);
+ _ -> commit_decision(D, Tail, [N | AccD], AccR)
+ end;
+ #commit{schema_ops=[]} ->
commit_decision(D, Tail, [N | AccD], AccR);
- Ops ->
+ #commit{schema_ops=Ops} ->
case ram_only_ops(N, Ops) of
- true ->
- commit_decision(D, Tail, AccD, [N | AccR]);
- false ->
- commit_decision(D, Tail, [N | AccD], AccR)
+ true -> commit_decision(D, Tail, AccD, [N | AccR]);
+ false -> commit_decision(D, Tail, [N | AccD], AccR)
end
end,
{D2, [C#commit{decision = D2} | Tail2]};
@@ -1948,7 +1978,7 @@ sync_send_dirty(Tid, [Head | Tail], Tab, WaitFor) ->
Res = do_dirty(Tid, Head),
{WF, Res};
true ->
- {?MODULE, Node} ! {self(), {sync_dirty, Tid, Head, Tab}},
+ {?MODULE, Node} ! {self(), {sync_dirty, Tid, ext_format(Head), Tab}},
sync_send_dirty(Tid, Tail, Tab, [Node | WaitFor])
end;
sync_send_dirty(_Tid, [], _Tab, WaitFor) ->
@@ -1967,11 +1997,11 @@ async_send_dirty(Tid, [Head | Tail], Tab, ReadNode, WaitFor, Res) ->
NewRes = do_dirty(Tid, Head),
async_send_dirty(Tid, Tail, Tab, ReadNode, WaitFor, NewRes);
ReadNode == Node ->
- {?MODULE, Node} ! {self(), {sync_dirty, Tid, Head, Tab}},
+ {?MODULE, Node} ! {self(), {sync_dirty, Tid, ext_format(Head), Tab}},
NewRes = {'EXIT', {aborted, {node_not_running, Node}}},
async_send_dirty(Tid, Tail, Tab, ReadNode, [Node | WaitFor], NewRes);
true ->
- {?MODULE, Node} ! {self(), {async_dirty, Tid, Head, Tab}},
+ {?MODULE, Node} ! {self(), {async_dirty, Tid, ext_format(Head), Tab}},
async_send_dirty(Tid, Tail, Tab, ReadNode, WaitFor, Res)
end;
async_send_dirty(_Tid, [], _Tab, _ReadNode, WaitFor, Res) ->
@@ -2028,23 +2058,29 @@ ask_commit(Protocol, Tid, [Head | Tail], DiscNs, RamNs, WaitFor, Local) ->
Node == node() ->
ask_commit(Protocol, Tid, Tail, DiscNs, RamNs, WaitFor, Head);
true ->
- Bin = opt_term_to_binary(Protocol, Head, DiscNs++RamNs),
- Msg = {ask_commit, Protocol, Tid, Bin, DiscNs, RamNs},
+ CR = ext_format(Head),
+ Msg = {ask_commit, Protocol, Tid, CR, DiscNs, RamNs},
{?MODULE, Node} ! {self(), Msg},
ask_commit(Protocol, Tid, Tail, DiscNs, RamNs, [Node | WaitFor], Local)
end;
ask_commit(_Protocol, _Tid, [], _DiscNs, _RamNs, WaitFor, Local) ->
{WaitFor, Local}.
-%% This used to test protocol conversion between mnesia-nodes
-%% but it is really dependent on the emulator version on the
-%% two nodes (if funs are sent which they are in transform table op).
-%% to be safe we let erts do the translation (many times maybe and thus
-%% slower but it works.
-% opt_term_to_binary(asym_trans, Head, Nodes) ->
-% opt_term_to_binary(Nodes, Head);
-opt_term_to_binary(_Protocol, Head, _Nodes) ->
- Head.
+ext_format(#commit{ext=[]}=CR) -> CR;
+ext_format(#commit{node=Node, ext=Ext}=CR) ->
+ case mnesia_monitor:needs_protocol_conversion(Node) of
+ true ->
+ case lists:keyfind(snmp, 1, Ext) of
+ false -> CR#commit{ext=[]};
+ {snmp, List} -> CR#commit{ext=List}
+ end;
+ false -> CR
+ end.
+
+new_cr_format(#commit{ext=[]}=Cr) -> Cr;
+new_cr_format(#commit{ext=[{_,_}|_]}=Cr) -> Cr;
+new_cr_format(#commit{ext=Snmp}=Cr) ->
+ Cr#commit{ext=[{snmp,Snmp}]}.
rec_all([Node | Tail], Tid, Res, Pids) ->
receive
diff --git a/lib/mnesia/test/Makefile b/lib/mnesia/test/Makefile
index 5799e34e13..5b61b1af65 100644
--- a/lib/mnesia/test/Makefile
+++ b/lib/mnesia/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -52,7 +52,8 @@ MODULES= \
mnesia_schema_recovery_test \
mnesia_measure_test \
mnesia_cost \
- mnesia_dbn_meters
+ mnesia_dbn_meters \
+ ext_test
DocExamplesDir := ../doc/src/
diff --git a/lib/mnesia/test/ext_test.erl b/lib/mnesia/test/ext_test.erl
new file mode 100644
index 0000000000..45ddb148bc
--- /dev/null
+++ b/lib/mnesia/test/ext_test.erl
@@ -0,0 +1,237 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(ext_test).
+
+%% Initializations
+-export([init_backend/0, add_aliases/1, remove_aliases/1,
+ check_definition/4, semantics/2]).
+
+-export([
+ create_table/3, load_table/4,
+ delete_table/2, close_table/2, sync_close_table/2,
+
+ sender_init/4,
+ receiver_first_message/4, receive_data/5, receive_done/4,
+
+ index_is_consistent/3, is_index_consistent/2,
+
+ real_suffixes/0, tmp_suffixes/0,
+
+ info/3,
+ fixtable/3,
+ validate_key/6, validate_record/6,
+
+ first/2, last/2, next/3, prev/3, slot/3,
+
+ insert/3, update_counter/4,
+ lookup/3,
+ delete/3, match_delete/3,
+ select/1, select/3, select/4, repair_continuation/2
+ ]).
+
+-ifdef(DEBUG).
+-define(DBG(DATA), io:format("~p:~p: ~p~n",[?MODULE, ?LINE, DATA])).
+-define(DBG(FORMAT, ARGS), io:format("~p:~p: " ++ FORMAT,[?MODULE, ?LINE] ++ ARGS)).
+-else.
+-define(DBG(DATA), ok).
+-define(DBG(FORMAT, ARGS), ok).
+-endif.
+
+%% types() ->
+%% [{fs_copies, ?MODULE},
+%% {raw_fs_copies, ?MODULE}].
+
+semantics(ext_ets, storage) -> ram_copies;
+semantics(ext_ets, types ) -> [set, ordered_set, bag];
+semantics(ext_ets, index_types) -> [ordered];
+semantics(_Alias, _) ->
+ undefined.
+
+%% valid_op(_, _) ->
+%% true.
+
+init_backend() ->
+ ?DBG(init_backend),
+ ok.
+
+add_aliases(_As) ->
+ ?DBG(_As),
+ ok.
+
+remove_aliases(_) ->
+ ok.
+
+
+%% Table operations
+
+check_definition(ext_ets, _Tab, _Nodes, _Props) ->
+ ?DBG("~p ~p ~p~n", [_Tab, _Nodes, _Props]),
+ ok.
+
+create_table(ext_ets, Tab, Props) when is_atom(Tab) ->
+ Tid = ets:new(Tab, [public, proplists:get_value(type, Props, set), {keypos, 2}]),
+ ?DBG("~p Create: ~p(~p) ~p~n", [self(), Tab, Tid, Props]),
+ mnesia_lib:set({?MODULE, Tab}, Tid),
+ ok;
+create_table(_, Tag={Tab, index, {_Where, Type0}}, _Opts) ->
+ Type = case Type0 of
+ ordered -> ordered_set;
+ _ -> Type0
+ end,
+ Tid = ets:new(Tab, [public, Type]),
+ ?DBG("~p(~p) ~p~n", [Tab, Tid, Tag]),
+ mnesia_lib:set({?MODULE, Tag}, Tid),
+ ok;
+create_table(_, Tag={_Tab, retainer, ChkPName}, _Opts) ->
+ Tid = ets:new(ChkPName, [set, public, {keypos, 2}]),
+ ?DBG("~p(~p) ~p~n", [_Tab, Tid, Tag]),
+ mnesia_lib:set({?MODULE, Tag}, Tid),
+ ok.
+
+delete_table(ext_ets, Tab) ->
+ try
+ ets:delete(mnesia_lib:val({?MODULE,Tab})),
+ mnesia_lib:unset({?MODULE,Tab}),
+ ok
+ catch _:_ ->
+ ?DBG({double_delete, Tab}),
+ ok
+ end.
+
+load_table(ext_ets, _Tab, init_index, _Cs) -> ok;
+load_table(ext_ets, _Tab, _LoadReason, _Cs) ->
+ ?DBG("Load ~p ~p~n", [_Tab, _LoadReason]),
+ ok.
+%% mnesia_monitor:unsafe_create_external(Tab, ext_ets, ?MODULE, Cs).
+
+sender_init(Alias, Tab, _RemoteStorage, _Pid) ->
+ KeysPerTransfer = 100,
+ {standard,
+ fun() -> mnesia_lib:db_init_chunk({ext,Alias,?MODULE}, Tab, KeysPerTransfer) end,
+ fun(Cont) -> mnesia_lib:db_chunk({ext,Alias,?MODULE}, Cont) end}.
+
+receiver_first_message(Sender, {first, Size}, _Alias, Tab) ->
+ ?DBG({first,Size}),
+ {Size, {Tab, Sender}}.
+
+receive_data(Data, ext_ets, Name, _Sender, {Name, Tab, _Sender}=State) ->
+ ?DBG({Data,State}),
+ true = ets:insert(Tab, Data),
+ {more, State};
+receive_data(Data, Alias, Tab, Sender, {Name, Sender}) ->
+ receive_data(Data, Alias, Tab, Sender, {Name, mnesia_lib:val({?MODULE,Tab}), Sender}).
+
+receive_done(_Alias, _Tab, _Sender, _State) ->
+ ?DBG({done,_State}),
+ ok.
+
+close_table(Alias, Tab) -> sync_close_table(Alias, Tab).
+
+sync_close_table(ext_ets, _Tab) ->
+ ?DBG(_Tab).
+
+fixtable(ext_ets, Tab, Bool) ->
+ ?DBG({Tab,Bool}),
+ ets:safe_fixtable(mnesia_lib:val({?MODULE,Tab}), Bool).
+
+info(ext_ets, Tab, Type) ->
+ ?DBG({Tab,Type}),
+ Tid = mnesia_lib:val({?MODULE,Tab}),
+ try ets:info(Tid, Type) of
+ Val -> Val
+ catch _:_ ->
+ undefined
+ end.
+
+real_suffixes() ->
+ [".dat"].
+
+tmp_suffixes() ->
+ [].
+
+%% Index
+
+index_is_consistent(_Alias, _Ix, _Bool) -> ok. % Ignore for now
+is_index_consistent(_Alias, _Ix) -> false. % Always rebuild
+
+%% Record operations
+
+validate_record(_Alias, _Tab, RecName, Arity, Type, _Obj) ->
+ {RecName, Arity, Type}.
+
+validate_key(_Alias, _Tab, RecName, Arity, Type, _Key) ->
+ {RecName, Arity, Type}.
+
+insert(ext_ets, Tab, Obj) ->
+ ?DBG({Tab,Obj}),
+ try
+ ets:insert(mnesia_lib:val({?MODULE,Tab}), Obj),
+ ok
+ catch _:Reason ->
+ io:format("CRASH ~p ~p~n",[Reason, mnesia_lib:val({?MODULE,Tab})])
+ end.
+
+lookup(ext_ets, Tab, Key) ->
+ ets:lookup(mnesia_lib:val({?MODULE,Tab}), Key).
+
+delete(ext_ets, Tab, Key) ->
+ ets:delete(mnesia_lib:val({?MODULE,Tab}), Key).
+
+match_delete(ext_ets, Tab, Pat) ->
+ ets:match_delete(mnesia_lib:val({?MODULE,Tab}), Pat).
+
+first(ext_ets, Tab) ->
+ ets:first(mnesia_lib:val({?MODULE,Tab})).
+
+last(Alias, Tab) -> first(Alias, Tab).
+
+next(ext_ets, Tab, Key) ->
+ ets:next(mnesia_lib:val({?MODULE,Tab}), Key).
+
+prev(Alias, Tab, Key) ->
+ next(Alias, Tab, Key).
+
+slot(ext_ets, Tab, Pos) ->
+ ets:slot(mnesia_lib:val({?MODULE,Tab}), Pos).
+
+update_counter(ext_ets, Tab, C, Val) ->
+ ets:update_counter(mnesia_lib:val({?MODULE,Tab}), C, Val).
+
+select('$end_of_table' = End) -> End;
+select({ext_ets, C}) -> ets:select(C).
+
+select(Alias, Tab, Ms) ->
+ Res = select(Alias, Tab, Ms, 100000),
+ select_1(Res).
+
+select_1('$end_of_table') -> [];
+select_1({Acc, C}) ->
+ case ets:select(C) of
+ '$end_of_table' -> Acc;
+ {New, Cont} ->
+ select_1({New ++ Acc, Cont})
+ end.
+
+select(ext_ets, Tab, Ms, Limit) when is_integer(Limit); Limit =:= infinity ->
+ ets:select(mnesia_lib:val({?MODULE,Tab}), Ms, Limit).
+
+repair_continuation({Alias, Cont}, Ms) ->
+ {Alias, ets:repair_continuation(Cont, Ms)}.
diff --git a/lib/mnesia/test/mnesia_SUITE.erl b/lib/mnesia/test/mnesia_SUITE.erl
index 070f51e6a8..3ec4847c5d 100644
--- a/lib/mnesia/test/mnesia_SUITE.erl
+++ b/lib/mnesia/test/mnesia_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_atomicity_test.erl b/lib/mnesia/test/mnesia_atomicity_test.erl
index e3e0eaaf75..cc32ba3826 100644
--- a/lib/mnesia/test/mnesia_atomicity_test.erl
+++ b/lib/mnesia/test/mnesia_atomicity_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -700,11 +700,19 @@ start_restart_check(RestartOp, ReplicaNeed, Config) ->
%% mnesia shall be killed at that node, where A is reading
%% the information from
- kill_where_to_read(TabName, N1, [N2, N3]),
+ Read = kill_where_to_read(TabName, N1, [N2, N3]),
%% wait some time to let mnesia go down and spread those news around
%% fun A shall be able to finish its job before being restarted
- wait(500),
+ Wait = fun(Loop) ->
+ wait(300),
+ sys:get_status(mnesia_monitor),
+ case lists:member(Read, mnesia_lib:val({current, db_nodes})) of
+ true -> Loop(Loop);
+ false -> ok
+ end
+ end,
+ Wait(Wait),
A ! go_ahead,
%% the sticky write doesnt work on remote nodes !!!
@@ -772,10 +780,12 @@ kill_where_to_read(TabName, N1, Nodes) ->
Read = rpc:call(N1,mnesia,table_info, [TabName, where_to_read]),
case lists:member(Read, Nodes) of
true ->
- mnesia_test_lib:kill_mnesia([Read]);
+ mnesia_test_lib:kill_mnesia([Read]),
+ Read;
false ->
?error("Fault while killing Mnesia: ~p~n", [Read]),
- mnesia_test_lib:kill_mnesia(Nodes)
+ mnesia_test_lib:kill_mnesia(Nodes),
+ Read
end.
sync_tid_release() ->
diff --git a/lib/mnesia/test/mnesia_bench_SUITE.erl b/lib/mnesia/test/mnesia_bench_SUITE.erl
index 962b57ae6f..7c86db383d 100644
--- a/lib/mnesia/test/mnesia_bench_SUITE.erl
+++ b/lib/mnesia/test/mnesia_bench_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_config_backup.erl b/lib/mnesia/test/mnesia_config_backup.erl
index a95f305b43..239101ca92 100644
--- a/lib/mnesia/test/mnesia_config_backup.erl
+++ b/lib/mnesia/test/mnesia_config_backup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_config_event.erl b/lib/mnesia/test/mnesia_config_event.erl
index 6a35e14363..4299b14f36 100644
--- a/lib/mnesia/test/mnesia_config_event.erl
+++ b/lib/mnesia/test/mnesia_config_event.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_config_test.erl b/lib/mnesia/test/mnesia_config_test.erl
index 089fbc06dc..45da909264 100644
--- a/lib/mnesia/test/mnesia_config_test.erl
+++ b/lib/mnesia/test/mnesia_config_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -693,9 +693,9 @@ event_module(Config) when is_list(Config) ->
end,
?match({[ok, ok], []}, rpc:multicall(Nodes, mnesia, start, [Def])),
- receive after 1000 -> ok end,
+ receive after 2000 -> ok end,
mnesia_event ! {get_log, self()},
- DebugLog1 = receive
+ DebugLog1 = receive
{log, L1} -> L1
after 10000 -> [timeout]
end,
@@ -706,9 +706,9 @@ event_module(Config) when is_list(Config) ->
?match({[ok], []}, rpc:multicall([N2], mnesia, start, [])),
- receive after 1000 -> ok end,
+ receive after 2000 -> ok end,
mnesia_event ! {get_log, self()},
- DebugLog = receive
+ DebugLog = receive
{log, L} -> L
after 10000 -> [timeout]
end,
@@ -1100,8 +1100,8 @@ dynamic_basic(Config) when is_list(Config) ->
?match(ok, mnesia:dirty_write({tab1, 1, 1})),
?match(ok, mnesia:dirty_write({tab2, 1, 1})),
-
- ?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes, [N1]}]])),
+
+ ?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes, [N1]}, {schema, ?BACKEND}]])),
?match(ok, rpc:call(N2, mnesia, wait_for_tables, [[tab1,tab2],5000])),
io:format("Here ~p ~n",[?LINE]),
check_storage(N2, N1, [N3]),
@@ -1112,7 +1112,7 @@ dynamic_basic(Config) when is_list(Config) ->
?match(ok, mnesia:delete_schema([N3])),
io:format("T1 ~p ~n",[rpc:call(N3,?MODULE,c_nodes,[])]),
- ?match(ok, rpc:call(N3, mnesia, start, [])),
+ ?match(ok, rpc:call(N3, mnesia, start, [[{schema, ?BACKEND}]])),
io:format("T2 ~p ~n",[rpc:call(N3,?MODULE,c_nodes,[])]),
timer:sleep(2000),
io:format("T3 ~p ~n",[rpc:call(N3,?MODULE,c_nodes,[])]),
@@ -1127,7 +1127,7 @@ dynamic_basic(Config) when is_list(Config) ->
?match([], mnesia_test_lib:kill_mnesia([N3])),
?match(ok, mnesia:delete_schema([N3])),
- ?match(ok, rpc:call(N3, mnesia, start, [])),
+ ?match(ok, rpc:call(N3, mnesia, start, [[{schema, ?BACKEND}]])),
?match({ok, [N3]}, sort(?rpc_connect(N1, [N3]))),
?match(ok, rpc:call(N3, mnesia, wait_for_tables, [[tab1,tab2],5000])),
io:format("Here ~p ~n",[?LINE]),
@@ -1143,7 +1143,7 @@ dynamic_basic(Config) when is_list(Config) ->
% mnesia should come up now.
?match({atomic, ok}, mnesia:add_table_copy(tab1, N2, ram_copies)),
- ?match(ok, rpc:call(N2, mnesia, start, [])),
+ ?match(ok, rpc:call(N2, mnesia, start, [[{schema, ?BACKEND}]])),
?match({ok, _}, sort(?rpc_connect(N2, [N3]))),
?match(SNs, sort(rpc:call(N1, mnesia, system_info, [running_db_nodes]))),
@@ -1162,7 +1162,7 @@ dynamic_basic(Config) when is_list(Config) ->
?match([N3,N1], sort(rpc:call(N1, mnesia, system_info, [running_db_nodes]))),
?match([N3,N1], sort(rpc:call(N3, mnesia, system_info, [running_db_nodes]))),
- ?match(ok, rpc:call(N2, mnesia, start, [])),
+ ?match(ok, rpc:call(N2, mnesia, start, [[{schema, ?BACKEND}]])),
?match({ok, _}, sort(?rpc_connect(N3, [N2]))),
?match(SNs, sort(rpc:call(N1, mnesia, system_info, [running_db_nodes]))),
@@ -1192,7 +1192,7 @@ dynamic_ext(Config) when is_list(Config) ->
mnesia_test_lib:kill_mnesia([N2]),
?match(ok, mnesia:delete_schema([N2])),
- ?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes, [N1]}]])),
+ ?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes, [N1]}, {schema, ?BACKEND}]])),
?match(SNs, sort(rpc:call(N1, mnesia, system_info, [running_db_nodes]))),
?match(SNs, sort(rpc:call(N2, mnesia, system_info, [running_db_nodes]))),
@@ -1213,7 +1213,7 @@ dynamic_ext(Config) when is_list(Config) ->
?match(ok, mnesia:dirty_write({tab3, 42, T})),
?match(stopped, rpc:call(N2, mnesia, stop, [])),
- ?match(ok, rpc:call(N2, mnesia, start, [])),
+ ?match(ok, rpc:call(N2, mnesia, start, [[{schema, ?BACKEND}]])),
?match(SNs, sort(rpc:call(N2, mnesia, system_info, [running_db_nodes]))),
?match(ok, mnesia:wait_for_tables([tab0,tab1,tab2,tab3], 10000)),
?match(ok, rpc:call(N2, mnesia, wait_for_tables, [[tab1,tab2,tab3], 100])),
@@ -1226,7 +1226,7 @@ dynamic_ext(Config) when is_list(Config) ->
?match(stopped, rpc:call(N1, mnesia, stop, [])),
- ?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes,[N1,N2]}]])),
+ ?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes,[N1,N2]}, {schema, ?BACKEND}]])),
?match({timeout,[tab0]}, rpc:call(N2, mnesia, wait_for_tables, [[tab0], 500])),
?match(ok, rpc:call(N1, mnesia, start, [[{extra_db_nodes, [N1,N2]}]])),
@@ -1238,7 +1238,7 @@ dynamic_ext(Config) when is_list(Config) ->
?match(stopped, rpc:call(N1, mnesia, stop, [])),
mnesia_test_lib:kill_mnesia([N2]),
?match(ok, mnesia:delete_schema([N2])),
- ?match(ok, rpc:call(N1, mnesia, start, [[{extra_db_nodes, [N1,N2]}]])),
+ ?match(ok, rpc:call(N1, mnesia, start, [[{extra_db_nodes, [N1,N2]}, {schema, ?BACKEND}]])),
?match({timeout,[tab0]}, rpc:call(N1, mnesia, wait_for_tables, [[tab0], 500])),
?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes,[N1,N2]}]])),
diff --git a/lib/mnesia/test/mnesia_consistency_test.erl b/lib/mnesia/test/mnesia_consistency_test.erl
index 087aef86c9..2fe1bd34e6 100644
--- a/lib/mnesia/test/mnesia_consistency_test.erl
+++ b/lib/mnesia/test/mnesia_consistency_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -565,6 +565,7 @@ consistency_after_fallback_3_disc_only(Config) when is_list(Config) ->
consistency_after_fallback(disc_only_copies, 3, Config).
consistency_after_fallback(ReplicaType, NodeConfig, Config) ->
+ put(mnesia_test_verbose, true),
%%?verbose("Starting consistency_after_fallback2 at ~p~n", [self()]),
Delay = 5,
Nodes = ?acquire_nodes(NodeConfig, [{tc_timeout, timer:minutes(10)} | Config]),
@@ -594,10 +595,11 @@ consistency_after_fallback(ReplicaType, NodeConfig, Config) ->
?match(ok, mnesia_tpcb:verify_tabs()),
%% Stop and then start mnesia and check table consistency
- %%?verbose("Restarting Mnesia~n", []),
+ ?verbose("Kill Mnesia~n", []),
mnesia_test_lib:kill_mnesia(Nodes),
+ ?verbose("Start Mnesia~n", []),
mnesia_test_lib:start_mnesia(Nodes,[account,branch,teller,history]),
-
+ ?verbose("Verify tabs~n", []),
?match(ok, mnesia_tpcb:verify_tabs()),
if
ReplicaType == ram_copies ->
@@ -663,10 +665,10 @@ consistency_after_restore(ReplicaType, Op, Config) ->
[lists:foreach(fun(E) -> ok = mnesia:dirty_write({Tab, E, 2}) end, NList) ||
Tab <- Tabs],
- Pids1 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carA, Op]), ok} || _ <- lists:seq(1, 5)],
- Pids2 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carB, Op]), ok} || _ <- lists:seq(1, 5)],
- Pids3 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carC, Op]), ok} || _ <- lists:seq(1, 5)],
- Pids4 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carD, Op]), ok} || _ <- lists:seq(1, 5)],
+ Pids1 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carA, Op]), carA} || _ <- lists:seq(1, 5)],
+ Pids2 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carB, Op]), carB} || _ <- lists:seq(1, 5)],
+ Pids3 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carC, Op]), carC} || _ <- lists:seq(1, 5)],
+ Pids4 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carD, Op]), carD} || _ <- lists:seq(1, 5)],
AllPids = Pids1 ++ Pids2 ++ Pids3 ++ Pids4,
@@ -676,19 +678,38 @@ consistency_after_restore(ReplicaType, Op, Config) ->
Else -> Else
end
end,
-
+
timer:sleep(timer:seconds(Delay)), %% Let changers grab locks
?verbose("Doing restore~n", []),
?match(Tabs, Restore(File, [{default_op, Op}])),
- timer:sleep(timer:seconds(Delay)), %% Let em die
+ Collect = fun(Msg, Acc) ->
+ receive Msg -> Acc
+ after 10000 -> [Msg|Acc]
+ end
+ end,
- ?match_multi_receive(AllPids),
+ Failed1 = lists:foldl(Collect, [], AllPids),
+ Failed = lists:foldl(Collect, [], Failed1),
+
+ case Failed of
+ [] -> ok;
+ _ ->
+ ?match([], Failed),
+ io:format("TIME: ~p sec~n", [erlang:system_time(seconds) band 16#FF]),
+ Dbg = fun({_, Pid, Tab}) ->
+ io:format("Tab ~p: ~p~n",[Tab, process_info(Pid, current_stacktrace)]),
+ [io:format(" ~p~n", [Rec]) || Rec <- mnesia:dirty_match_object({Tab, '_', '_'})]
+ end,
+ [Dbg(Msg) || Msg <- Failed],
+ io:format(" Held: ~p~n", [mnesia_locker:get_held_locks()]),
+ io:format("Queue: ~p~n", [mnesia_locker:get_lock_queue()])
+ end,
- case ?match(ok, restore_verify_tabs(Tabs)) of
- {success, ok} ->
+ case ?match(ok, restore_verify_tabs(Tabs)) of
+ {success, ok} ->
file:delete(File);
- _ ->
+ _ ->
{T, M, S} = time(),
File2 = ?flat_format("consistency_error~w~w~w.BUP", [T, M, S]),
file:rename(File, File2)
@@ -696,19 +717,22 @@ consistency_after_restore(ReplicaType, Op, Config) ->
?verify_mnesia(Nodes, []).
change_tab(Father, Tab, Test) ->
- Key = random:uniform(20),
+ Key = rand:uniform(20),
Update = fun() ->
+ Time = erlang:system_time(seconds) band 16#FF,
+ case put(time, Time) of
+ Time -> ok;
+ _ -> io:format("~p ~p ~p sec~n", [self(), Tab, Time])
+ end,
case mnesia:read({Tab, Key}) of
- [{Tab, Key, 1}] ->
- quit;
- [{Tab, Key, _N}] ->
- mnesia:write({Tab, Key, 3})
+ [{Tab, Key, 1}] -> quit;
+ [{Tab, Key, _N}] -> mnesia:write({Tab, Key, 3})
end
end,
case mnesia:transaction(Update) of
{atomic, quit} ->
- exit(ok);
- {aborted, {no_exists, Tab}} when Test == recreate_tables ->%% I'll allow this
+ exit(Tab);
+ {aborted, {no_exists, Tab}} when Test == recreate_tables -> %% I'll allow this
change_tab(Father, Tab, Test);
{atomic, ok} ->
change_tab(Father, Tab, Test)
diff --git a/lib/mnesia/test/mnesia_cost.erl b/lib/mnesia/test/mnesia_cost.erl
index 714dbaef27..a3fc8dfe20 100644
--- a/lib/mnesia/test/mnesia_cost.erl
+++ b/lib/mnesia/test/mnesia_cost.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_dbn_meters.erl b/lib/mnesia/test/mnesia_dbn_meters.erl
index 5c3ea08a1d..407d7c65b8 100644
--- a/lib/mnesia/test/mnesia_dbn_meters.erl
+++ b/lib/mnesia/test/mnesia_dbn_meters.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_dirty_access_test.erl b/lib/mnesia/test/mnesia_dirty_access_test.erl
index 0d57e5a1b1..6d970ac990 100644
--- a/lib/mnesia/test/mnesia_dirty_access_test.erl
+++ b/lib/mnesia/test/mnesia_dirty_access_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -40,43 +40,40 @@ all() ->
groups() ->
[{dirty_write, [],
- [dirty_write_ram, dirty_write_disc,
- dirty_write_disc_only]},
+ [dirty_write_ram, dirty_write_disc, dirty_write_disc_only,
+ dirty_write_xets]},
{dirty_read, [],
- [dirty_read_ram, dirty_read_disc,
- dirty_read_disc_only]},
+ [dirty_read_ram, dirty_read_disc, dirty_read_disc_only, dirty_read_xets]},
{dirty_update_counter, [],
[dirty_update_counter_ram, dirty_update_counter_disc,
- dirty_update_counter_disc_only]},
+ dirty_update_counter_disc_only, dirty_update_counter_xets]},
{dirty_delete, [],
[dirty_delete_ram, dirty_delete_disc,
- dirty_delete_disc_only]},
+ dirty_delete_disc_only, dirty_delete_xets]},
{dirty_delete_object, [],
[dirty_delete_object_ram, dirty_delete_object_disc,
- dirty_delete_object_disc_only]},
+ dirty_delete_object_disc_only, dirty_delete_object_xets]},
{dirty_match_object, [],
[dirty_match_object_ram, dirty_match_object_disc,
- dirty_match_object_disc_only]},
+ dirty_match_object_disc_only, dirty_match_object_xets]},
{dirty_index, [],
[{group, dirty_index_match_object},
{group, dirty_index_read},
{group, dirty_index_update}]},
{dirty_index_match_object, [],
- [dirty_index_match_object_ram,
- dirty_index_match_object_disc,
- dirty_index_match_object_disc_only]},
+ [dirty_index_match_object_ram, dirty_index_match_object_disc,
+ dirty_index_match_object_disc_only, dirty_index_match_object_xets]},
{dirty_index_read, [],
[dirty_index_read_ram, dirty_index_read_disc,
- dirty_index_read_disc_only]},
+ dirty_index_read_disc_only, dirty_index_read_xets]},
{dirty_index_update, [],
- [dirty_index_update_set_ram,
- dirty_index_update_set_disc,
- dirty_index_update_set_disc_only,
+ [dirty_index_update_set_ram, dirty_index_update_set_disc,
+ dirty_index_update_set_disc_only, dirty_index_update_set_xets,
dirty_index_update_bag_ram, dirty_index_update_bag_disc,
- dirty_index_update_bag_disc_only]},
+ dirty_index_update_bag_disc_only, dirty_index_update_bag_xets]},
{dirty_iter, [],
- [dirty_iter_ram, dirty_iter_disc,
- dirty_iter_disc_only]},
+ [dirty_iter_ram, dirty_iter_disc, dirty_iter_disc_only,
+ dirty_iter_xets]},
{admin_tests, [],
[del_table_copy_1, del_table_copy_2, del_table_copy_3,
add_table_copy_1, add_table_copy_2, add_table_copy_3,
@@ -106,6 +103,9 @@ dirty_write_disc_only(suite) -> [];
dirty_write_disc_only(Config) when is_list(Config) ->
dirty_write(Config, disc_only_copies).
+dirty_write_xets(Config) when is_list(Config) ->
+ dirty_write(Config, ext_ets).
+
dirty_write(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_write,
@@ -137,6 +137,9 @@ dirty_read_disc_only(suite) -> [];
dirty_read_disc_only(Config) when is_list(Config) ->
dirty_read(Config, disc_only_copies).
+dirty_read_xets(Config) when is_list(Config) ->
+ dirty_read(Config, ext_ets).
+
dirty_read(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_read,
@@ -180,6 +183,9 @@ dirty_update_counter_disc_only(suite) -> [];
dirty_update_counter_disc_only(Config) when is_list(Config) ->
dirty_update_counter(Config, disc_only_copies).
+dirty_update_counter_xets(Config) when is_list(Config) ->
+ dirty_update_counter(Config, ext_ets).
+
dirty_update_counter(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_update_counter,
@@ -222,6 +228,9 @@ dirty_delete_disc_only(suite) -> [];
dirty_delete_disc_only(Config) when is_list(Config) ->
dirty_delete(Config, disc_only_copies).
+dirty_delete_xets(Config) when is_list(Config) ->
+ dirty_delete(Config, ext_ets).
+
dirty_delete(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_delete,
@@ -259,6 +268,9 @@ dirty_delete_object_disc_only(suite) -> [];
dirty_delete_object_disc_only(Config) when is_list(Config) ->
dirty_delete_object(Config, disc_only_copies).
+dirty_delete_object_xets(Config) when is_list(Config) ->
+ dirty_delete_object(Config, ext_ets).
+
dirty_delete_object(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_delete_object,
@@ -302,6 +314,9 @@ dirty_match_object_disc_only(suite) -> [];
dirty_match_object_disc_only(Config) when is_list(Config) ->
dirty_match_object(Config, disc_only_copies).
+dirty_match_object_xets(Config) when is_list(Config) ->
+ dirty_match_object(Config, ext_ets).
+
dirty_match_object(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_match,
@@ -326,7 +341,6 @@ dirty_match_object(Config, Storage) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Dirty read matching records by using an index
-
dirty_index_match_object_ram(suite) -> [];
dirty_index_match_object_ram(Config) when is_list(Config) ->
dirty_index_match_object(Config, ram_copies).
@@ -339,6 +353,9 @@ dirty_index_match_object_disc_only(suite) -> [];
dirty_index_match_object_disc_only(Config) when is_list(Config) ->
dirty_index_match_object(Config, disc_only_copies).
+dirty_index_match_object_xets(Config) when is_list(Config) ->
+ dirty_index_match_object(Config, ext_ets).
+
dirty_index_match_object(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_index_match_object,
@@ -376,6 +393,9 @@ dirty_index_read_disc_only(suite) -> [];
dirty_index_read_disc_only(Config) when is_list(Config) ->
dirty_index_read(Config, disc_only_copies).
+dirty_index_read_xets(Config) when is_list(Config) ->
+ dirty_index_read(Config, ext_ets).
+
dirty_index_read(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_index_read,
@@ -437,78 +457,85 @@ dirty_index_update_set_disc_only(suite) -> [];
dirty_index_update_set_disc_only(Config) when is_list(Config) ->
dirty_index_update_set(Config, disc_only_copies).
+dirty_index_update_set_xets(Config) when is_list(Config) ->
+ dirty_index_update_set(Config, ext_ets).
+
dirty_index_update_set(Config, Storage) ->
- [Node1] = Nodes = ?acquire_nodes(1, Config),
- Tab = index_test,
- ValPos = v1,
+ [Node1] = Nodes = ?acquire_nodes(1, Config),
+ Tab = index_test,
+ ValPos = v1,
ValPos2 = v3,
Def = [{attributes, [k, v1, v2, v3]},
{Storage, [Node1]},
- {index, [ValPos]}],
- ?match({atomic, ok}, mnesia:create_table(Tab, Def)),
-
+ {index, [ValPos]}],
+ ?match({atomic, ok}, mnesia:create_table(Tab, Def)),
+
Pat1 = {Tab, '$1', 2, '$2', '$3'},
- Pat2 = {Tab, '$1', '$2', '$3', '$4'},
-
- Rec1 = {Tab, 1, 2, 3, 4},
+ Pat2 = {Tab, '$1', '$2', '$3', '$4'},
+ Pat3 = {Tab, '_', '_', '_', {4, 14}},
+
+ Rec1 = {Tab, 1, 2, 3, {4, 14}},
Rec2 = {Tab, 2, 2, 13, 14},
- Rec3 = {Tab, 1, 12, 13, 14},
- Rec4 = {Tab, 4, 2, 13, 14},
-
+ Rec3 = {Tab, 1, 12, 13, 14},
+ Rec4 = {Tab, 4, 2, 13, 14},
+
?match([], mnesia:dirty_index_read(Tab, 2, ValPos)),
?match(ok, mnesia:dirty_write(Rec1)),
?match([Rec1], mnesia:dirty_index_read(Tab, 2, ValPos)),
-
+
?match(ok, mnesia:dirty_write(Rec2)),
R1 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec1, Rec2], lists:sort(R1)),
-
+
?match(ok, mnesia:dirty_write(Rec3)),
R2 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec2], lists:sort(R2)),
?match([Rec2], mnesia:dirty_index_match_object(Pat1, ValPos)),
-
- {atomic, R3} = mnesia:transaction(fun() -> mnesia:match_object(Pat2) end),
+
+ {atomic, R3} = mnesia:transaction(fun() -> mnesia:match_object(Pat2) end),
?match([Rec3, Rec2], lists:sort(R3)),
-
+
?match(ok, mnesia:dirty_write(Rec4)),
R4 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec2, Rec4], lists:sort(R4)),
-
+
?match(ok, mnesia:dirty_delete({Tab, 4})),
?match([Rec2], mnesia:dirty_index_read(Tab, 2, ValPos)),
-
+
?match({atomic, ok}, mnesia:del_table_index(Tab, ValPos)),
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:write(Rec4) end)),
?match({atomic, ok}, mnesia:add_table_index(Tab, ValPos)),
?match({atomic, ok}, mnesia:add_table_index(Tab, ValPos2)),
-
+
R5 = mnesia:dirty_match_object(Pat2),
?match([Rec3, Rec2, Rec4], lists:sort(R5)),
-
+
R6 = mnesia:dirty_index_read(Tab, 2, ValPos),
- ?match([Rec2, Rec4], lists:sort(R6)),
- ?match([], mnesia:dirty_index_read(Tab, 4, ValPos2)),
+ ?match([Rec2, Rec4], lists:sort(R6)),
+ ?match([], mnesia:dirty_index_read(Tab, {4,14}, ValPos2)),
R7 = mnesia:dirty_index_read(Tab, 14, ValPos2),
?match([Rec3, Rec2, Rec4], lists:sort(R7)),
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:write(Rec1) end)),
R8 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec1, Rec2, Rec4], lists:sort(R8)),
- ?match([Rec1], mnesia:dirty_index_read(Tab, 4, ValPos2)),
+ ?match([Rec1], mnesia:dirty_index_read(Tab, {4,14}, ValPos2)),
+ ?match([Rec1], mnesia:dirty_match_object(Pat3)),
+ ?match([Rec1], mnesia:dirty_index_match_object(Pat3, ValPos2)),
+
R9 = mnesia:dirty_index_read(Tab, 14, ValPos2),
?match([Rec2, Rec4], lists:sort(R9)),
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:delete_object(Rec2) end)),
R10 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec1, Rec4], lists:sort(R10)),
- ?match([Rec1], mnesia:dirty_index_read(Tab, 4, ValPos2)),
+ ?match([Rec1], mnesia:dirty_index_read(Tab, {4,14}, ValPos2)),
?match([Rec4], mnesia:dirty_index_read(Tab, 14, ValPos2)),
?match(ok, mnesia:dirty_delete({Tab, 4})),
R11 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec1], lists:sort(R11)),
- ?match([Rec1], mnesia:dirty_index_read(Tab, 4, ValPos2)),
+ ?match([Rec1], mnesia:dirty_index_read(Tab, {4,14}, ValPos2)),
?match([], mnesia:dirty_index_read(Tab, 14, ValPos2)),
?verify_mnesia(Nodes, []).
@@ -525,6 +552,9 @@ dirty_index_update_bag_disc_only(suite) -> [];
dirty_index_update_bag_disc_only(Config)when is_list(Config) ->
dirty_index_update_bag(Config, disc_only_copies).
+dirty_index_update_bag_xets(Config) when is_list(Config) ->
+ dirty_index_update_bag(Config, ext_ets).
+
dirty_index_update_bag(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = index_test,
@@ -631,7 +661,6 @@ dirty_index_update_bag(Config, Storage) ->
%% Dirty iteration
%% dirty_slot, dirty_first, dirty_next
-
dirty_iter_ram(suite) -> [];
dirty_iter_ram(Config) when is_list(Config) ->
dirty_iter(Config, ram_copies).
@@ -644,6 +673,9 @@ dirty_iter_disc_only(suite) -> [];
dirty_iter_disc_only(Config) when is_list(Config) ->
dirty_iter(Config, disc_only_copies).
+dirty_iter_xets(Config) when is_list(Config) ->
+ dirty_iter(Config, ext_ets).
+
dirty_iter(Config, Storage) ->
[Node1] = Nodes = ?acquire_nodes(1, Config),
Tab = dirty_iter,
diff --git a/lib/mnesia/test/mnesia_durability_test.erl b/lib/mnesia/test/mnesia_durability_test.erl
index 4c9438df3e..97bc84a2d8 100644
--- a/lib/mnesia/test/mnesia_durability_test.erl
+++ b/lib/mnesia/test/mnesia_durability_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_evil_backup.erl b/lib/mnesia/test/mnesia_evil_backup.erl
index e605fa7926..e745ec9b04 100644
--- a/lib/mnesia/test/mnesia_evil_backup.erl
+++ b/lib/mnesia/test/mnesia_evil_backup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -325,7 +325,7 @@ restore(Config, Op) ->
end,
?match(ok, file:delete(File1)),
?match(ok, file:delete(File2)),
- ?match([], Check() -- Before),
+ ?match([], Check() -- (Before ++ [{ok, latest_log}, {ok, previous_log}])),
?verify_mnesia(Nodes, []).
diff --git a/lib/mnesia/test/mnesia_evil_coverage_test.erl b/lib/mnesia/test/mnesia_evil_coverage_test.erl
index 68b521c939..6e34040bc4 100644
--- a/lib/mnesia/test/mnesia_evil_coverage_test.erl
+++ b/lib/mnesia/test/mnesia_evil_coverage_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -72,7 +72,9 @@ groups() ->
{record_name_dirty_access, [],
[record_name_dirty_access_ram,
record_name_dirty_access_disc,
- record_name_dirty_access_disc_only]}].
+ record_name_dirty_access_disc_only,
+ record_name_dirty_access_xets
+ ]}].
init_per_group(_GroupName, Config) ->
Config.
@@ -112,6 +114,7 @@ system_info(Config) when is_list(Config) ->
?match(I when is_integer(I), mnesia:system_info(transaction_log_writes)),
?match(I when is_integer(I), mnesia:system_info(send_compressed)),
?match(L when is_list(L), mnesia:system_info(all)),
+ ?match(L when is_list(L), mnesia:system_info(backend_types)),
?match({'EXIT', {aborted, Reason }} when element(1, Reason) == badarg
, mnesia:system_info(ali_baba)),
?verify_mnesia(Nodes, []).
@@ -132,11 +135,11 @@ table_info(Config) when is_list(Config) ->
Schema =
case mnesia_test_lib:diskless(Config) of
true -> [{type, Type}, {attributes, Attrs}, {index, [ValPos]},
- {ram_copies, Nodes}];
+ {ram_copies, [Node1, Node2]}, {ext_ets, [Node3]}];
false ->
[{type, Type}, {attributes, Attrs}, {index, [ValPos]},
- {disc_only_copies, [Node1]}, {ram_copies, [Node2]},
- {disc_copies, [Node3]}]
+ {disc_only_copies, [Node1]}, {ram_copies, [Node2]},
+ {ext_ets, [Node3]}]
end,
?match({atomic, ok}, mnesia:create_table(Tab, Schema)),
@@ -144,28 +147,22 @@ table_info(Config) when is_list(Config) ->
Keys = lists:seq(1, Size),
Records = [{Tab, A, 7} || A <- Keys],
lists:foreach(fun(Rec) -> ?match(ok, mnesia:dirty_write(Rec)) end, Records),
- ?match(Mem when is_integer(Mem), mnesia:table_info(Tab, memory)),
- ?match(Size, mnesia:table_info(Tab, size)),
- ?match(Type, mnesia:table_info(Tab, type)),
case mnesia_test_lib:diskless(Config) of
true ->
?match(Nodes, mnesia:table_info(Tab, ram_copies));
false ->
- ?match([Node3], mnesia:table_info(Tab, mnesia_test_lib:storage_type(disc_copies, Config))),
+ ?match([Node3], mnesia:table_info(Tab, ext_ets)),
?match([Node2], mnesia:table_info(Tab, ram_copies)),
?match([Node1], mnesia:table_info(Tab, mnesia_test_lib:storage_type(disc_only_copies, Config)))
end,
Read = [Node1, Node2, Node3],
- ?match(true, lists:member(mnesia:table_info(Tab, where_to_read), Read)),
Write = ?sort([Node1, Node2, Node3]),
- ?match(Write, ?sort(mnesia:table_info(Tab, where_to_write))),
- ?match([ValPos], mnesia:table_info(Tab, index)),
- ?match(Arity, mnesia:table_info(Tab, arity)),
- ?match(Attrs, mnesia:table_info(Tab, attributes)),
- ?match({Tab, '_', '_'}, mnesia:table_info(Tab, wild_pattern)),
- ?match({atomic, Attrs}, mnesia:transaction(fun() ->
- mnesia:table_info(Tab, attributes) end)),
+
+ {[ok,ok,ok], []} = rpc:multicall(Nodes, ?MODULE, info_check,
+ [Tab, Read, Write, Size, Type, ValPos, Arity, Attrs]),
+
+ ?match({atomic, Attrs}, mnesia:transaction(fun() -> mnesia:table_info(Tab, attributes) end)),
?match(L when is_list(L), mnesia:table_info(Tab, all)),
@@ -179,6 +176,17 @@ table_info(Config) when is_list(Config) ->
?match(0, mnesia:table_info(tab_info, size)),
?verify_mnesia([Node1, Node3], [Node2]).
+info_check(Tab, Read, Write, Size, Type, ValPos, Arity, Attrs) ->
+ ?match(true, lists:member(mnesia:table_info(Tab, where_to_read), Read)),
+ ?match(Write, ?sort(mnesia:table_info(Tab, where_to_write))),
+ ?match(Mem when is_integer(Mem), mnesia:table_info(Tab, memory)),
+ ?match(Size, mnesia:table_info(Tab, size)),
+ ?match(Type, mnesia:table_info(Tab, type)),
+ ?match([ValPos], mnesia:table_info(Tab, index)),
+ ?match(Arity, mnesia:table_info(Tab, arity)),
+ ?match(Attrs, mnesia:table_info(Tab, attributes)),
+ ?match({Tab, '_', '_'}, mnesia:table_info(Tab, wild_pattern)),
+ ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Check the error descriptions
@@ -216,11 +224,12 @@ db_node_lifecycle(Config) when is_list(Config) ->
[Node1, Node2, Node3] = AllNodes = ?acquire_nodes(3, Config),
Tab = db_node_lifecycle,
- Who = fun(T) ->
+ Who = fun(T) ->
L1 = mnesia:table_info(T, ram_copies),
L2 = mnesia:table_info(T, disc_copies),
L3 = mnesia:table_info(T, disc_only_copies),
- L1 ++ L2 ++ L3
+ L4 = mnesia:table_info(T, ext_ets),
+ L1 ++ L2 ++ L3 ++ L4
end,
SNs = ?sort(AllNodes),
@@ -235,6 +244,7 @@ db_node_lifecycle(Config) when is_list(Config) ->
?match({error, _}, mnesia:create_schema([foo@bar])),
?match(ok, mnesia:start()),
?match(false, mnesia:system_info(use_dir)),
+ ?match([ram_copies, disc_copies, disc_only_copies], mnesia:system_info(backend_types)),
?match({atomic, ok}, mnesia:create_table(Tab, [])),
?match({aborted, {has_no_disc, Node1}}, mnesia:dump_tables([Tab])),
?match({aborted, {has_no_disc, Node1}}, mnesia:change_table_copy_type(Tab, node(), disc_copies)),
@@ -242,7 +252,7 @@ db_node_lifecycle(Config) when is_list(Config) ->
?match(stopped, mnesia:stop()),
- ?match(ok, mnesia:create_schema(AllNodes)),
+ ?match(ok, mnesia:create_schema(AllNodes, ?BACKEND)),
?match([], mnesia_test_lib:start_mnesia(AllNodes)),
?match([SNs, SNs, SNs],
@@ -271,12 +281,15 @@ db_node_lifecycle(Config) when is_list(Config) ->
Tab3 = not_local,
Tab4 = local,
Tab5 = remote,
+ Tab6 = ext1,
Tabs = [Schema,
[{name, Tab2}, {disc_copies, AllNodes}],
[{name, Tab3}, {ram_copies, [Node2, Node3]}],
[{name, Tab4}, {disc_only_copies, [Node1]}],
- [{name, Tab5}, {disc_only_copies, [Node2]}]],
+ [{name, Tab5}, {disc_only_copies, [Node2]}],
+ [{name, Tab6}, {ext_ets, [Node1, Node2]}]
+ ],
[?match({atomic, ok}, mnesia:create_table(T)) || T <- Tabs ],
@@ -287,31 +300,28 @@ db_node_lifecycle(Config) when is_list(Config) ->
?match({aborted, {node_not_running, Node1}},
mnesia:del_table_copy(schema, Node2)),
- ?match([], mnesia_test_lib:start_mnesia([Node1],[Tab2,Tab4])),
+ ?match([], mnesia_test_lib:start_mnesia([Node1],[Tab2,Tab4,Tab6])),
?match([], mnesia_test_lib:stop_mnesia([Node2])),
- ?match({atomic, ok},
- mnesia:del_table_copy(schema, Node2)),
+ ?match({atomic, ok}, mnesia:del_table_copy(schema, Node2)),
- %% Check
+ %% Check
RemNodes = AllNodes -- [Node2],
- ?match(RemNodes, mnesia:system_info(db_nodes)),
+ ?match(RemNodes, mnesia:system_info(db_nodes)),
?match([Node1], Who(Tab)),
?match(RemNodes, Who(Tab2)),
?match([Node3], Who(Tab3)),
?match([Node1], Who(Tab4)),
?match({'EXIT', {aborted, {no_exists, _, _}}}, Who(Tab5)),
+ ?match([Node1], Who(Tab6)),
- ?match({atomic, ok},
- mnesia:change_table_copy_type(Tab2, Node3, ram_copies)),
+ ?match({atomic, ok}, mnesia:change_table_copy_type(Tab2, Node3, ram_copies)),
- ?match({atomic, ok},
- mnesia:change_table_copy_type(schema, Node3, ram_copies)),
+ ?match({atomic, ok}, mnesia:change_table_copy_type(schema, Node3, ram_copies)),
?match([], mnesia_test_lib:stop_mnesia([Node3])),
- ?match({atomic, ok},
- mnesia:del_table_copy(schema, Node3)),
- ?match([Node1], mnesia:system_info(db_nodes)),
+ ?match({atomic, ok}, mnesia:del_table_copy(schema, Node3)),
+ ?match([Node1], mnesia:system_info(db_nodes)),
?match([Node1], Who(Tab)),
?match([Node1], Who(Tab2)),
?match({'EXIT', {aborted, {no_exists, _, _}}}, Who(Tab3)),
@@ -363,7 +373,8 @@ start_and_stop(Config) when is_list(Config) ->
checkpoint(suite) -> [];
checkpoint(Config) when is_list(Config) ->
checkpoint(2, Config),
- checkpoint(3, Config).
+ checkpoint(3, Config),
+ ok.
checkpoint(NodeConfig, Config) ->
[Node1 | _] = TabNodes = ?acquire_nodes(NodeConfig, Config),
@@ -381,7 +392,7 @@ checkpoint(NodeConfig, Config) ->
CreateTab(Type, 3, [lists:last(TabNodes)])] ++
Acc
end,
- Types = [ram_copies, disc_copies, disc_only_copies],
+ Types = [ram_copies, disc_copies, disc_only_copies, ext_ets],
Tabs = lists:foldl(CreateTabs, [], Types),
Recs = ?sort([{T, N, N} || T <- Tabs, N <- lists:seq(1, 10)]),
lists:foreach(fun(R) -> ?match(ok, mnesia:dirty_write(R)) end, Recs),
@@ -430,25 +441,29 @@ checkpoint(NodeConfig, Config) ->
replica_location(suite) -> [];
replica_location(Config) when is_list(Config) ->
[Node1, Node2, Node3] = Nodes = ?acquire_nodes(3, Config),
- Tab = replica_location,
%% Create three replicas
- Schema = [{name, Tab}, {disc_only_copies, [Node1]},
- {ram_copies, [Node2]}, {disc_copies, [Node3]}],
- ?match({atomic, ok}, mnesia:create_table(Schema)),
- ?match([], ?vrl(Tab, [Node1], [Node2], [Node3], Nodes)),
+ Check = fun(Tab, Schema) ->
+ ?match({atomic, ok}, mnesia:create_table([{name, Tab}|Schema])),
+ ?match([], ?vrl(Tab, [Node1], [Node2], [Node3], Nodes)),
- %% Delete one replica
- ?match({atomic, ok}, mnesia:del_table_copy(Tab, Node2)),
- ?match([], ?vrl(Tab, [Node1], [], [Node3], Nodes)),
+ %% Delete one replica
+ ?match({atomic, ok}, mnesia:del_table_copy(Tab, Node2)),
+ ?match([], ?vrl(Tab, [Node1], [], [Node3], Nodes)),
- %% Move one replica
- ?match({atomic, ok}, mnesia:move_table_copy(Tab, Node1, Node2)),
- ?match([], ?vrl(Tab, [Node2], [], [Node3], Nodes)),
+ %% Move one replica
+ ?match({atomic, ok}, mnesia:move_table_copy(Tab, Node1, Node2)),
+ ?match([], ?vrl(Tab, [Node2], [], [Node3], Nodes)),
+
+ %% Change replica type
+ ?match({atomic, ok}, mnesia:change_table_copy_type(Tab, Node2, ram_copies)),
+ ?match([], ?vrl(Tab, [], [Node2], [Node3], Nodes))
+ end,
+ Check(replica_location, [{disc_only_copies, [Node1]},
+ {ram_copies, [Node2]}, {disc_copies, [Node3]}]),
- %% Change replica type
- ?match({atomic, ok}, mnesia:change_table_copy_type(Tab, Node2, ram_copies)),
- ?match([], ?vrl(Tab, [], [Node2], [Node3], Nodes)),
+ Check(ext_location, [{disc_only_copies, [Node1]},
+ {ext_ets, [Node2]}, {disc_copies, [Node3]}]),
?verify_mnesia(Nodes, []).
@@ -720,7 +735,7 @@ replica_management(Config) when is_list(Config) ->
%%
?match({atomic, ok},
mnesia:create_table([{name, Tab}, {attributes, Attrs},
- {ram_copies, [Node1, Node3]}])),
+ {ram_copies, [Node1]}, {ext_ets, [Node3]}])),
[?match(ok, mnesia:dirty_write({Tab, K, K + 2})) || K <-lists:seq(1, 10)],
?match([], ?vrl(Tab, [], [Node1, Node3], [], Nodes)),
%% R - -
@@ -757,7 +772,7 @@ replica_management(Config) when is_list(Config) ->
?match([], ?vrl(Tab, [Node2], [], [Node1], Nodes)),
?match([0,10,10], ?SS(rpc:multicall(Nodes, mnesia, table_info, [Tab, size]))),
%% D DO -
- ?match({atomic, ok}, mnesia:add_table_copy(Tab, Node3, ram_copies)),
+ ?match({atomic, ok}, mnesia:add_table_copy(Tab, Node3, ext_ets)),
?match([], ?vrl(Tab, [Node2], [Node3], [Node1], Nodes)),
?match([10,10,10], ?SS(rpc:multicall(Nodes, mnesia, table_info, [Tab, size]))),
%% D DO R
@@ -784,7 +799,7 @@ replica_management(Config) when is_list(Config) ->
?match([10,10,10], ?SS(rpc:multicall(Nodes, mnesia, table_info, [Tab, size]))),
%% D DO D0
- ?match({atomic, ok}, mnesia:change_table_copy_type(Tab, Node3, ram_copies)),
+ ?match({atomic, ok}, mnesia:change_table_copy_type(Tab, Node3, ext_ets)),
?match([], ?vrl(Tab, [Node2], [Node3], [Node1], Nodes)),
?match([10,10,10], ?SS(rpc:multicall(Nodes, mnesia, table_info, [Tab, size]))),
%% D DO R
@@ -841,18 +856,31 @@ replica_management(Config) when is_list(Config) ->
?match([], ?vrl(Tab, [Node3], [], [Node2], Nodes)),
?match([0,10,10], ?SS(rpc:multicall(Nodes, mnesia, table_info, [Tab, size]))),
%% - D DO
+ ?match({atomic, ok}, mnesia:change_table_copy_type(Tab, Node3, ext_ets)),
+ ?match([], ?vrl(Tab, [], [Node3], [Node2], Nodes)),
+ ?match([0,10,10], ?SS(rpc:multicall(Nodes, mnesia, table_info, [Tab, size]))),
+ %% - D ER
+ ?match({atomic, ok}, mnesia:move_table_copy(Tab, Node3, Node1)),
+ ?match([], ?vrl(Tab, [], [Node1], [Node2], Nodes)),
+ ?match([0,10,10], ?SS(rpc:multicall(Nodes, mnesia, table_info, [Tab, size]))),
+ %% ER D -
+
?match({aborted, _}, mnesia:move_table_copy(Tab, Node1, Node2)),
+ ?match({aborted, _}, mnesia:move_table_copy(Tab, Node3, Node2)),
+ ?match({atomic, ok}, mnesia:move_table_copy(Tab, Node1, Node3)),
+ %% - D ER
?match([], mnesia_test_lib:stop_mnesia([Node3])),
?match({atomic,ok}, mnesia:transaction(fun() -> mnesia:write({Tab, 43, sync_me}) end)),
- ?match([], ?vrl(Tab, [Node3], [], [Node2],Nodes -- [Node3])),
- %% - D DO
+ ?match([], ?vrl(Tab, [], [Node3], [Node2],Nodes -- [Node3])),
+ %% - D ER
?match({aborted,Reason56} when element(1, Reason56) == not_active,
mnesia:move_table_copy(Tab, Node3, Node1)),
- ?match([], ?vrl(Tab, [Node3], [], [Node2],Nodes -- [Node3])),
- %% DO D -
+ ?match([], ?vrl(Tab, [], [Node3], [Node2],Nodes -- [Node3])),
+ %% - D ER
?match([], mnesia_test_lib:start_mnesia([Node3])),
- ?match([], ?vrl(Tab, [Node3], [], [Node2], Nodes)),
- %% DO D -
+ ?match([], ?vrl(Tab, [], [Node3], [Node2], Nodes)),
+ %% - D ER
+ ?match([{Tab,43,sync_me}], mnesia:dirty_read({Tab,43})),
%%
%% Transformer
@@ -990,7 +1018,7 @@ local_content(Config) when is_list(Config) ->
?match([], mnesia_test_lib:stop_mnesia([Node3])),
%% Added for OTP-44306
- ?match(ok, rpc:call(Node3, mnesia, start, [])),
+ ?match(ok, rpc:call(Node3, mnesia, start, [[{schema, ?BACKEND}]])),
?match({ok, _}, mnesia:change_config(extra_db_nodes, [Node3])),
mnesia_test_lib:sync_tables([Node3], [Tab1]),
@@ -1427,7 +1455,7 @@ unsupp_user_props(Config) when is_list(Config) ->
table_info, [silly1, user_properties])),
?match([{prop,propval2}], rpc:call(Node1, mnesia,
table_info, [silly2, user_properties])),
- ?match([{prop,propval3}], rpc:call(Node1, mnesia,
+ ?match([_,{prop,propval3}], rpc:call(Node1, mnesia,
table_info, [schema, user_properties])),
F2 = fun() ->
@@ -2262,6 +2290,10 @@ record_name_dirty_access_disc_only(suite) ->
record_name_dirty_access_disc_only(Config) when is_list(Config) ->
record_name_dirty_access(disc_only_copies, Config).
+record_name_dirty_access_xets(Config) when is_list(Config) ->
+ record_name_dirty_access(ext_ets, Config).
+
+
record_name_dirty_access(Storage, Config) ->
[Node1, _Node2] = Nodes = ?acquire_nodes(2, Config),
diff --git a/lib/mnesia/test/mnesia_examples_test.erl b/lib/mnesia/test/mnesia_examples_test.erl
index 889ec50520..808e62d9c2 100644
--- a/lib/mnesia/test/mnesia_examples_test.erl
+++ b/lib/mnesia/test/mnesia_examples_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_frag_test.erl b/lib/mnesia/test/mnesia_frag_test.erl
index c6430240c8..9f2102beb2 100644
--- a/lib/mnesia/test/mnesia_frag_test.erl
+++ b/lib/mnesia/test/mnesia_frag_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_inconsistent_database_test.erl b/lib/mnesia/test/mnesia_inconsistent_database_test.erl
index c6ca3c6853..3fd2c6ad5b 100644
--- a/lib/mnesia/test/mnesia_inconsistent_database_test.erl
+++ b/lib/mnesia/test/mnesia_inconsistent_database_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_install_test.erl b/lib/mnesia/test/mnesia_install_test.erl
index e0145f3a8b..103f85b3d6 100644
--- a/lib/mnesia/test/mnesia_install_test.erl
+++ b/lib/mnesia/test/mnesia_install_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_isolation_test.erl b/lib/mnesia/test/mnesia_isolation_test.erl
index 4dd0c01d05..63940ec05c 100644
--- a/lib/mnesia/test/mnesia_isolation_test.erl
+++ b/lib/mnesia/test/mnesia_isolation_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_majority_test.erl b/lib/mnesia/test/mnesia_majority_test.erl
index f2e7a09e5e..9811de6ae7 100644
--- a/lib/mnesia/test/mnesia_majority_test.erl
+++ b/lib/mnesia/test/mnesia_majority_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_measure_test.erl b/lib/mnesia/test/mnesia_measure_test.erl
index b184c5efdf..ad71fafecb 100644
--- a/lib/mnesia/test/mnesia_measure_test.erl
+++ b/lib/mnesia/test/mnesia_measure_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_meter.erl b/lib/mnesia/test/mnesia_meter.erl
index 73f35a4a46..c278dfde93 100644
--- a/lib/mnesia/test/mnesia_meter.erl
+++ b/lib/mnesia/test/mnesia_meter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_nice_coverage_test.erl b/lib/mnesia/test/mnesia_nice_coverage_test.erl
index 3e00cc7325..ffbe36e48d 100644
--- a/lib/mnesia/test/mnesia_nice_coverage_test.erl
+++ b/lib/mnesia/test/mnesia_nice_coverage_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_qlc_test.erl b/lib/mnesia/test/mnesia_qlc_test.erl
index 90fb8540c2..5067e86521 100644
--- a/lib/mnesia/test/mnesia_qlc_test.erl
+++ b/lib/mnesia/test/mnesia_qlc_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_recovery_test.erl b/lib/mnesia/test/mnesia_recovery_test.erl
index e47ed9c6c0..130b87346f 100644
--- a/lib/mnesia/test/mnesia_recovery_test.erl
+++ b/lib/mnesia/test/mnesia_recovery_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -504,12 +504,21 @@ with_checkpoint(Config, Type) when is_list(Config) ->
?match(ok, mnesia:deactivate_checkpoint(sune)),
?match([], check_chkp(Nodes)),
+ Wait = fun(Loop) ->
+ timer:sleep(300),
+ sys:get_status(mnesia_monitor),
+ case lists:member(Kill, mnesia_lib:val({current, db_nodes})) of
+ true -> Loop(Loop);
+ false -> ok
+ end
+ end,
+
case Kill of
Node1 ->
ignore;
Node2 ->
mnesia_test_lib:kill_mnesia([Kill]),
- timer:sleep(500), %% Just to help debugging
+ Wait(Wait),
?match({ok, sune, _}, mnesia:activate_checkpoint([{name, sune},
{max, mnesia:system_info(tables)},
{ram_overrides_dump, true}])),
@@ -576,7 +585,7 @@ delete_during_start(Config) when is_list(Config) ->
mnesia_test_lib:kill_mnesia([N2,N3]),
%% timer:sleep(500),
?match({[ok,ok],[]}, rpc:multicall([N2,N3], mnesia,start,
- [[{extra_db_nodes,[N1]}]])),
+ [[{extra_db_nodes,[N1]}, {schema, ?BACKEND}]])),
[Tab1,Tab2,Tab3|_] = Tabs,
?match({atomic, ok}, mnesia:delete_table(Tab1)),
?match({atomic, ok}, mnesia:delete_table(Tab2)),
@@ -1542,7 +1551,7 @@ disc_less(Config) when is_list(Config) ->
?match(ok, rpc:call(Node2, mnesia, start, [])),
timer:sleep(500),
- ?match(ok, rpc:call(Node3, mnesia, start, [[{extra_db_nodes, [Node1, Node2]}]])),
+ ?match(ok, rpc:call(Node3, mnesia, start, [[{extra_db_nodes, [Node1, Node2]}, {schema, ?BACKEND}]])),
?match(ok, rpc:call(Node3, mnesia, wait_for_tables, [[Tab1, Tab2, Tab3], 20000])),
?match(ok, rpc:call(Node1, mnesia, wait_for_tables, [[Tab1, Tab2, Tab3], 20000])),
diff --git a/lib/mnesia/test/mnesia_registry_test.erl b/lib/mnesia/test/mnesia_registry_test.erl
index 9d9190d70d..3df37a2c8c 100644
--- a/lib/mnesia/test/mnesia_registry_test.erl
+++ b/lib/mnesia/test/mnesia_registry_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_schema_recovery_test.erl b/lib/mnesia/test/mnesia_schema_recovery_test.erl
index 05c5639d60..ca2dd74b34 100644
--- a/lib/mnesia/test/mnesia_schema_recovery_test.erl
+++ b/lib/mnesia/test/mnesia_schema_recovery_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_test_lib.erl b/lib/mnesia/test/mnesia_test_lib.erl
index 9d3b277e07..6e84a27ec9 100644
--- a/lib/mnesia/test/mnesia_test_lib.erl
+++ b/lib/mnesia/test/mnesia_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -142,6 +142,9 @@
%% included for test server compatibility
%% assume that all test cases only takes Config as sole argument
init_per_testcase(_Func, Config) ->
+ Env = application:get_all_env(mnesia),
+ [application:unset_env(mnesia, Key, [{timeout, infinity}]) ||
+ {Key, _} <- Env, Key /= included_applications],
global:register_name(mnesia_global_logger, group_leader()),
Config.
@@ -668,11 +671,13 @@ do_prepare([delete_schema | Actions], Selected, All, Config, File, Line) ->
end,
do_prepare(Actions, Selected, All, Config, File, Line);
do_prepare([create_schema | Actions], Selected, All, Config, File, Line) ->
+ Ext = ?BACKEND,
case diskless(Config) of
true ->
+ rpc:multicall(Selected, application, set_env, [mnesia, schema, Ext]),
skip;
_Else ->
- case mnesia:create_schema(Selected) of
+ case mnesia:create_schema(Selected, Ext) of
ok ->
ignore;
BadNodes ->
@@ -975,7 +980,6 @@ reload_appls([Appl | Appls], Selected) ->
{Ok2temp, Empty} = rpc:multicall(Selected, application, unload, [Appl]),
Conv = fun({error,{not_loaded,mnesia}}) -> ok; (Else) -> Else end,
Ok2 = {lists:map(Conv, Ok2temp), Empty},
-
Ok3 = rpc:multicall(Selected, application, load, [Appl]),
if
Ok /= Ok2 ->
@@ -1040,7 +1044,8 @@ verify_replica_location(Tab, DiscOnly0, Ram0, Disc0, AliveNodes0) ->
S1 = ?match(AliveNodes, lists:sort(mnesia:system_info(running_db_nodes))),
S2 = ?match(DiscOnly, lists:sort(mnesia:table_info(Tab, disc_only_copies))),
- S3 = ?match(Ram, lists:sort(mnesia:table_info(Tab, ram_copies))),
+ S3 = ?match(Ram, lists:sort(mnesia:table_info(Tab, ram_copies) ++
+ mnesia:table_info(Tab, ext_ets))),
S4 = ?match(Disc, lists:sort(mnesia:table_info(Tab, disc_copies))),
S5 = ?match(Write, lists:sort(mnesia:table_info(Tab, where_to_write))),
S6 = case lists:member(This, Read) of
diff --git a/lib/mnesia/test/mnesia_test_lib.hrl b/lib/mnesia/test/mnesia_test_lib.hrl
index dc3b5b9af8..ba7eb10ea2 100644
--- a/lib/mnesia/test/mnesia_test_lib.hrl
+++ b/lib/mnesia/test/mnesia_test_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -150,3 +150,5 @@
-define(verify_mnesia(Ups, Downs),
mnesia_test_lib:verify_mnesia(Ups, Downs, ?FILE, ?LINE)).
+
+-define(BACKEND, [{backend_types, [{ext_ets, ext_test},{ext_dets, ext_test}]}]).
diff --git a/lib/mnesia/test/mnesia_tpcb.erl b/lib/mnesia/test/mnesia_tpcb.erl
index c6eda1c448..fb39ee321d 100644
--- a/lib/mnesia/test/mnesia_tpcb.erl
+++ b/lib/mnesia/test/mnesia_tpcb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/mnesia/test/mnesia_trans_access_test.erl b/lib/mnesia/test/mnesia_trans_access_test.erl
index a371d58e75..aa50ee4cb1 100644
--- a/lib/mnesia/test/mnesia_trans_access_test.erl
+++ b/lib/mnesia/test/mnesia_trans_access_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -931,20 +931,20 @@ index_update_bag(Config)when is_list(Config) ->
[IPos] = mnesia_lib:val({Tab,index}),
ITab = mnesia_lib:val({index_test,{index, IPos}}),
io:format("~n Index ~p @ ~p => ~p ~n~n",[IPos,ITab, ets:tab2list(ITab)]),
- ?match([{2,1},{2,2},{12,1}], lists:keysort(1,ets:tab2list(ITab))),
+ %?match([{2,1},{2,2},{12,1}], lists:keysort(1,ets:tab2list(ITab))),
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:write(Rec5) end)),
{atomic, R60} = mnesia:transaction(fun() -> mnesia:index_read(Tab, 2, ValPos) end),
?match([Rec1,Rec5,Rec2], lists:sort(R60)),
- ?match([{2,1},{2,2},{12,1}], lists:keysort(1,ets:tab2list(ITab))),
+ %?match([{2,1},{2,2},{12,1}], lists:keysort(1,ets:tab2list(ITab))),
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:delete_object(Rec3) end)),
{atomic, R61} = mnesia:transaction(fun() -> mnesia:index_read(Tab, 2, ValPos) end),
?match([Rec1,Rec5,Rec2], lists:sort(R61)),
{atomic, R62} = mnesia:transaction(fun() -> mnesia:index_read(Tab,12, ValPos) end),
?match([], lists:sort(R62)),
- ?match([{2,1},{2,2}], lists:keysort(1,ets:tab2list(ITab))),
+ %% ?match([{2,1},{2,2}], lists:keysort(1,ets:tab2list(ITab))),
%% reset for rest of testcase
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:write(Rec3) end)),
@@ -1142,8 +1142,9 @@ create_live_table_index(Config, Storage) ->
?match([{atomic,ok}|_], [Create(N) || N <- lists:seq(1,50)]),
?match([], mnesia_test_lib:stop_mnesia([N2,N3])),
- ?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes,[N1]}]])),
- ?match(ok, rpc:call(N3, mnesia, start, [[{extra_db_nodes,[N1]}]])),
+ Ext = [{schema, ?BACKEND}],
+ ?match(ok, rpc:call(N2, mnesia, start, [[{extra_db_nodes,[N1]}|Ext]])),
+ ?match(ok, rpc:call(N3, mnesia, start, [[{extra_db_nodes,[N1]}|Ext]])),
?match({atomic, ok}, mnesia:add_table_index(Tab, ValPos)),
diff --git a/lib/mnesia/test/mt.erl b/lib/mnesia/test/mt.erl
index 1256dbb80a..5a981bf539 100644
--- a/lib/mnesia/test/mt.erl
+++ b/lib/mnesia/test/mt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -80,6 +80,8 @@ resolve(Suite0) when is_atom(Suite0) ->
{Suite, Case} ->
{Suite, is_group(Suite,Case)}
end;
+resolve({Suite0, {group, Case}}) ->
+ resolve({Suite0, Case});
resolve({Suite0, Case}) when is_atom(Suite0), is_atom(Case) ->
case alias(Suite0) of
Suite when is_atom(Suite) ->
diff --git a/lib/mnesia/vsn.mk b/lib/mnesia/vsn.mk
index 194bc439a0..fb4200f62d 100644
--- a/lib/mnesia/vsn.mk
+++ b/lib/mnesia/vsn.mk
@@ -1 +1 @@
-MNESIA_VSN = 4.13.4
+MNESIA_VSN = 4.14
diff --git a/lib/observer/Makefile b/lib/observer/Makefile
index 865dddaf51..8483922f76 100644
--- a/lib/observer/Makefile
+++ b/lib/observer/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2009. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/observer/doc/src/book.xml b/lib/observer/doc/src/book.xml
index 5ef1fd794b..7cc60718b1 100644
--- a/lib/observer/doc/src/book.xml
+++ b/lib/observer/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/observer/doc/src/crashdump.xml b/lib/observer/doc/src/crashdump.xml
index 27e88d07e5..48f944cbce 100644
--- a/lib/observer/doc/src/crashdump.xml
+++ b/lib/observer/doc/src/crashdump.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2003</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/observer/doc/src/etop.xml b/lib/observer/doc/src/etop.xml
index 52f3b2a156..d70d9d1d23 100644
--- a/lib/observer/doc/src/etop.xml
+++ b/lib/observer/doc/src/etop.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2002</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/observer/doc/src/notes.xml b/lib/observer/doc/src/notes.xml
index dd99f45b19..f79f75fead 100644
--- a/lib/observer/doc/src/notes.xml
+++ b/lib/observer/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,68 @@
<p>This document describes the changes made to the Observer
application.</p>
+<section><title>Observer 2.2.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed a crash happening when observing another node, who
+ have a different number of schedulers than the current
+ one.</p>
+ <p>
+ Own Id: OTP-13702 Aux Id: ERL-171 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Observer 2.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Update observer GUI to support tracing on ports, and to
+ set matchspecs for send/receive. This required some minor
+ bugfixes in runtime_tools/dbg.</p>
+ <p>
+ Own Id: OTP-13481</p>
+ </item>
+ <item>
+ <p>
+ Update dbg and ttb to work with a tracer module as tracer
+ and tracing on ports.</p>
+ <p>
+ Own Id: OTP-13500</p>
+ </item>
+ <item>
+ <p>
+ Added possibility to change update frequency and length
+ of the graph windows.</p>
+ <p>
+ Own Id: OTP-13555</p>
+ </item>
+ <item>
+ <p>
+ Improved background coloring to work with dark themes and
+ other visual improvements.</p>
+ <p>
+ Own Id: OTP-13556</p>
+ </item>
+ <item>
+ <p>
+ Crashdump viewer now allows port info "Port controls
+ forker process..."</p>
+ <p>
+ Own Id: OTP-13647</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Observer 2.1.2</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/observer/doc/src/notes_history.xml b/lib/observer/doc/src/notes_history.xml
index ec155b852f..ef20a6dfa4 100644
--- a/lib/observer/doc/src/notes_history.xml
+++ b/lib/observer/doc/src/notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/observer/doc/src/observer_ug.xml b/lib/observer/doc/src/observer_ug.xml
index ca354df864..6eb72f3e58 100644
--- a/lib/observer/doc/src/observer_ug.xml
+++ b/lib/observer/doc/src/observer_ug.xml
@@ -168,7 +168,7 @@
<item><p>The length of the message queue for the process.</p></item>
</taglist>
- <p>Option <em>Process info</em> opens a detailed information window on the selected process,
+ <p>Option <em>Process info</em> opens a detailed information window on the process under the mouse pointer,
including the following:</p>
<taglist>
<tag>Process Information</tag>
@@ -195,12 +195,53 @@
</p>
</note>
- <p>Option <em>Trace Processes</em> adds the selected process identifiers to tab
+ <p>Option <em>Trace selected processes</em> adds the selected process identifiers to tab
<em>Trace Overview</em> plus the node that the processes reside on.
</p>
- <p>Option <em>Trace Named Processes</em> adds the registered name of the processes. This can be
+ <p>Option <em>Trace selected processes by name</em> adds the registered name of the processes. This can be
useful when tracing is done on many nodes, as processes with that name are then traced on
all traced nodes.</p>
+ <p>Option <em>Kill process</em> brutally kills the processes under
+ the mouse pointer by sending an exit signal with
+ reason <c>kill</c>.</p>
+
+ </section>
+
+ <section>
+ <title>Ports Tab</title>
+ <p>Tab <em>Ports</em> lists port information in columns.
+ For each port the following information is displayed:
+ </p>
+ <taglist>
+ <tag>Id</tag>
+ <item><p>The port identifier.</p></item>
+ <tag>Connected</tag>
+ <item><p>The process identifier for the process that owns the
+ port.</p></item>
+ <tag>Name</tag>
+ <item><p>The registered name of the port, if any.</p></item>
+ <tag>Controls</tag>
+ <item><p>The name of the command set by <seealso marker="erts:erlang#open_port-2"><c>erlang:open_port/2</c></seealso>.</p></item>
+ <tag>Slot</tag>
+ <item><p>The internal index of the port.</p></item>
+ </taglist>
+
+ <p>Option <em>Port info</em> opens a detailed information window
+ for the port under the mouse pointer. In addition to the
+ information above, it also shows links and monitors.</p>
+
+ <p>Option <em>Trace selected ports</em> adds the selected port
+ identifiers, and the nodes that the ports reside on,
+ to tab <em>Trace Overview</em>.</p>
+
+ <p>Option <em>Trace selected ports by name</em> adds the
+ registered name of the port to tab <em>Trace Overview</em>. This
+ can be useful when tracing is done on many nodes, as ports with
+ that name are then traced on all traced nodes.</p>
+
+ <p>Option <em>Close</em>
+ executes <seealso marker="erts:erlang#port_close-1"><c>erlang:port_close/1</c></seealso>
+ on the port under the mouse pointer.</p>
</section>
@@ -211,8 +252,11 @@
applications are not diplayed. Use menu <em>View</em> to view "system"
ETS tables, unreadable ETS tables, or Mnesia tables.
</p>
- <p>Double-click to view the table content. To view table information, select the table
- and activate menu <em>View &gt; Table information</em>.</p>
+ <p>Double-click to view the table content, or right-click and
+ select option <em>Show Table Content</em>. To view table
+ information, select the table and activate menu <em>View &gt;
+ Table information</em>, or right-click and select option <em>Table
+ info</em>.</p>
<p>You can use <seealso marker="stdlib:re">regular
expressions</seealso> and search for objects, and edit or delete them.
</p>
@@ -220,11 +264,12 @@
<section>
<title>Trace Overview Tab</title>
- <p>Tab <em>Trace Overview</em> handles tracing. Trace
- by selecting the processes to be traced and how to trace
- them. You can trace messages, function calls, and events, where
- events are process-related events such as <c>spawn</c>,
- <c>exit</c>, and many others.
+ <p>Tab <em>Trace Overview</em> handles tracing. Trace by selecting
+ the processes or ports to be traced and how to trace them. For
+ processes, you can trace messages, function calls, scheduling,
+ garbage collections, and process-related events such
+ as <c>spawn</c>, <c>exit</c>, and many others. For ports, you can
+ trace messages, scheduling and port-related events.
</p>
<p>To trace function calls, you also need to set up
@@ -234,27 +279,51 @@
specifications can also be used to trigger more information
in the trace messages.
</p>
- <note><p>Trace patterns only apply to the traced processes.</p></note>
+
+ <p>You can also set match specifications on messages. By default,
+ if tracing messages, all messages sent and/or received by the
+ process or port are traced. Match specifications can be used to
+ reduce the number of traced messages and/or to trigger more
+ information in the trace messages.</p>
+
+ <note><p>Trace patterns only apply to the traced processes and
+ ports.</p></note>
<p>
- Processes are added from the <em>Applications</em> or <em>Processes</em> tabs.
- A special <em>new</em> identifier, meaning all processes spawned after trace
- start, can be added with button <em>Add 'new' Process</em>.
+ Processes are added from the <em>Applications</em>
+ or <em>Processes</em> tabs. Ports are added from
+ the <em>Ports</em> tab. A special <em>new</em> identifier,
+ meaning all processes, or ports, started after trace start, can
+ be added with buttons <em>Add 'new' Processes</em> and <em>Add
+ 'new' Ports</em>, respecively.
</p>
<p>
- When adding processes, a window with trace options is displayed. The chosen
- options are set for the selected processes.
- Process options can be changed by right-clicking a process.
+ When adding processes or ports, a window with trace options is
+ displayed. The chosen options are set for the selected
+ processes/ports. To change the options, right-click the process
+ or port and select <em>Edit process options</em>. To remove a
+ process or port from the list, right-click and select <em>Remove
+ process</em> or <em>Remove port</em>, respectively.
</p>
<p>
- Processes added by process identifiers add the nodes these
- processes reside on in the node list. More nodes can be added by clicking
- button <em>Add Nodes</em>.
+ Processes and ports added by process/port identifiers add the
+ nodes these processes/ports reside on in the node list. More
+ nodes can be added by clicking button <em>Add Nodes</em>, or by
+ right-clicking in the <em>Nodes</em> list and select <em>Add
+ Nodes</em>. To remove nodes, select them, then right-click and
+ choose <em>Remove nodes</em>.
</p>
<p>
If function calls are traced, trace patterns must be added by clicking button
<em>Add Trace Pattern</em>. Select a module, function(s), and a match specification.
- If no functions are selected, all functions in the module are traced.
+ If no functions are selected, all functions in the module are traced.</p>
+ <p>
+ Trace patterns can also be added for traced messages. Click
+ button <em>Add Trace Pattern</em> and select <em>Messages
+ sent</em> or <em>Messages received</em>, and a match
+ specification.
+ </p>
+ <p>
A few basic match specifications are provided in the tool, and
you can provide your own match specifications. The syntax of match
specifications is described in the <seealso
diff --git a/lib/observer/doc/src/part.xml b/lib/observer/doc/src/part.xml
index d8ec7664d9..165bd5864a 100644
--- a/lib/observer/doc/src/part.xml
+++ b/lib/observer/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/observer/doc/src/part_notes.xml b/lib/observer/doc/src/part_notes.xml
index c187702f64..ba15c39cda 100644
--- a/lib/observer/doc/src/part_notes.xml
+++ b/lib/observer/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/observer/doc/src/part_notes_history.xml b/lib/observer/doc/src/part_notes_history.xml
index c0c7b10a7e..e60210924c 100644
--- a/lib/observer/doc/src/part_notes_history.xml
+++ b/lib/observer/doc/src/part_notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/observer/doc/src/ref_man.xml b/lib/observer/doc/src/ref_man.xml
index 37e20b2643..73e7e0053a 100644
--- a/lib/observer/doc/src/ref_man.xml
+++ b/lib/observer/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/observer/doc/src/ttb.xml b/lib/observer/doc/src/ttb.xml
index 2b637551db..94ecef24b4 100644
--- a/lib/observer/doc/src/ttb.xml
+++ b/lib/observer/doc/src/ttb.xml
@@ -229,27 +229,33 @@ ttb:p(all, call).</input></pre>
</func>
<func>
- <name>p(Procs,Flags) -> Return</name>
- <fsummary>Set the specified trace flags on the specified processes.</fsummary>
+ <name>p(Item,Flags) -> Return</name>
+ <fsummary>Set the specified trace flags on the specified processes or ports.</fsummary>
<type>
- <v>Return = {ok,[{Procs,MatchDesc}]}</v>
- <v>Procs = Process | [Process] | all | new | existing</v>
- <v>Process = pid() | atom() | {global,atom()}</v>
+ <v>Return = {ok,[{Item,MatchDesc}]}</v>
+ <v>Items = Item | [Item]</v>
+ <v>Item = pid() | port() | RegName | {global,GlobalRegName} |
+ all | processes | ports |
+ existing | existing_processes | existing_ports |
+ new | new_processes | new_ports</v>
+ <v>RegName = atom()</v>
+ <v>GlobalRegName = term()</v>
<v>Flags = Flag | [Flag]</v>
</type>
<desc>
- <p>Sets the specified trace flags on the specified
- processes. Flag <c>timestamp</c> is always turned on.
+ <p>Sets the specified trace flags on the specified processes
+ or ports. Flag <c>timestamp</c> is always turned on.
</p>
<p>See the Reference Manual for module
<seealso marker="runtime_tools:dbg"><c>dbg</c></seealso>
- and the possible trace flags. Parameter
+ for the possible trace flags. Parameter
<c>MatchDesc</c> is the same as returned from
<c>dbg:p/2</c>.</p>
<p>Processes can be specified as registered names, globally
- registered names, or process identifiers. If a registered name
- is specified, the flags are set on processes with this name on all
- active nodes.</p>
+ registered names, or process identifiers. Ports can be
+ specified as registered names or port identifiers. If a
+ registered name is specified, the flags are set on
+ processes/ports with this name on all active nodes.</p>
<p>Issuing this command starts the timer for this trace if option
<c>timer</c> is specified with <c>tracer/2</c>.
</p>
@@ -257,17 +263,23 @@ ttb:p(all, call).</input></pre>
</func>
<func>
- <name>tp, tpl, ctp, ctpl, ctpg</name>
+ <name>tp, tpl, tpe, ctp, ctpl, ctpg, ctpe</name>
<fsummary>Set and clear trace patterns.</fsummary>
<desc>
- <p>These functions are to be used with
- trace flag <c>call</c> for setting and clearing trace
- patterns. When trace flag <c>call</c> is set on a process,
+ <p>These functions are to be used with trace
+ flag <c>call</c>, <c>send</c>, and <c>'receive'</c> for
+ setting and clearing trace patterns.</p>
+ <p>When trace flag <c>call</c> is set on a process,
function calls are traced on that process if a trace
- pattern is set for the called function. Trace patterns
- specify how to trace a function by using match
- specifications. Match specifications are described in the
- <seealso marker="erts:users_guide"><c>ERTS User's Guide</c></seealso>.
+ pattern is set for the called function.</p>
+ <p>The <c>send</c> and <c>'receive'</c> flags enable tracing
+ of all messages sent and received by the process/port. Trace
+ patterns set with <c>tpe</c> may limit traced messages based
+ on the message content, the sender, and/or the receiver.</p>
+ <p>Trace patterns specify how to trace a function or a message
+ by using match specifications. Match specifications are
+ described in the
+ <seealso marker="erts:match_spec"><c>ERTS User's Guide</c></seealso>.
</p>
<p>These functions are equivalent to the corresponding
functions in module
@@ -284,6 +296,8 @@ ttb:p(all, call).</input></pre>
<item><p>Sets trace patterns on global function calls.</p></item>
<tag><c>tpl</c></tag>
<item><p>Sets trace patterns on local and global function calls.</p></item>
+ <tag><c>tpe</c></tag>
+ <item><p>Sets trace patterns on messages.</p></item>
<tag><c>ctp</c></tag>
<item><p>Clears trace patterns on local and global function
calls.</p></item>
@@ -291,13 +305,15 @@ ttb:p(all, call).</input></pre>
<item><p>Clears trace patterns on local function calls.</p></item>
<tag><c>ctpg</c></tag>
<item><p>Clears trace patterns on global function calls.</p></item>
+ <tag><c>ctpe</c></tag>
+ <item><p>Clears trace patterns on messages.</p></item>
</taglist>
<p>With <c>tp</c> and <c>tpl</c>, one of the match specification shortcuts
can be used (for example, <c>ttb:tp(foo_module, caller)</c>).</p>
<p>The shortcuts are as follows:</p>
<list type="bulleted">
<item><c>return</c> - for <c>[{'_',[],[{return_trace}]}]</c>
- (report the return value)</item>
+ (report the return value from a traced function)</item>
<item><c>caller</c> - for <c>[{'_',[],[{message,{caller}}]}]</c>
(report the calling function)</item>
<item><c>{codestr, Str}</c> - for <c>dbg:fun2ms/1</c> arguments
diff --git a/lib/observer/include/etop.hrl b/lib/observer/include/etop.hrl
index 0dac322a2b..002937e522 100644
--- a/lib/observer/include/etop.hrl
+++ b/lib/observer/include/etop.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/Makefile b/lib/observer/src/Makefile
index 2d42510b47..dd7831fa2b 100644
--- a/lib/observer/src/Makefile
+++ b/lib/observer/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2002-2013. All Rights Reserved.
+# Copyright Ericsson AB 2002-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -67,6 +67,7 @@ MODULES= \
observer_html_lib \
observer_lib \
observer_perf_wx \
+ observer_port_wx \
observer_pro_wx \
observer_procinfo \
observer_sys_wx \
diff --git a/lib/observer/src/cdv_atom_cb.erl b/lib/observer/src/cdv_atom_cb.erl
index 0f0c397479..a123354c8f 100644
--- a/lib/observer/src/cdv_atom_cb.erl
+++ b/lib/observer/src/cdv_atom_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_bin_cb.erl b/lib/observer/src/cdv_bin_cb.erl
index 7e17ef135e..0cea1fdcf0 100644
--- a/lib/observer/src/cdv_bin_cb.erl
+++ b/lib/observer/src/cdv_bin_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_detail_wx.erl b/lib/observer/src/cdv_detail_wx.erl
index d53b721141..44f121f359 100644
--- a/lib/observer/src/cdv_detail_wx.erl
+++ b/lib/observer/src/cdv_detail_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_dist_cb.erl b/lib/observer/src/cdv_dist_cb.erl
index 9c53ec86bc..2b4c9f56d1 100644
--- a/lib/observer/src/cdv_dist_cb.erl
+++ b/lib/observer/src/cdv_dist_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_ets_cb.erl b/lib/observer/src/cdv_ets_cb.erl
index bac8b56fc3..52a90b093b 100644
--- a/lib/observer/src/cdv_ets_cb.erl
+++ b/lib/observer/src/cdv_ets_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_fun_cb.erl b/lib/observer/src/cdv_fun_cb.erl
index 3a62eb3305..acebc94811 100644
--- a/lib/observer/src/cdv_fun_cb.erl
+++ b/lib/observer/src/cdv_fun_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_gen_cb.erl b/lib/observer/src/cdv_gen_cb.erl
index 69ecfbe80e..5fb43b5719 100644
--- a/lib/observer/src/cdv_gen_cb.erl
+++ b/lib/observer/src/cdv_gen_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_html_wx.erl b/lib/observer/src/cdv_html_wx.erl
index 70f0d02982..0ab0ba4315 100644
--- a/lib/observer/src/cdv_html_wx.erl
+++ b/lib/observer/src/cdv_html_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_info_wx.erl b/lib/observer/src/cdv_info_wx.erl
index 13c80942ac..01fe6b15f2 100644
--- a/lib/observer/src/cdv_info_wx.erl
+++ b/lib/observer/src/cdv_info_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_int_tab_cb.erl b/lib/observer/src/cdv_int_tab_cb.erl
index c48fbb6ee1..401ebf9664 100644
--- a/lib/observer/src/cdv_int_tab_cb.erl
+++ b/lib/observer/src/cdv_int_tab_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_mem_cb.erl b/lib/observer/src/cdv_mem_cb.erl
index bfe21bf309..ba972d6963 100644
--- a/lib/observer/src/cdv_mem_cb.erl
+++ b/lib/observer/src/cdv_mem_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_mod_cb.erl b/lib/observer/src/cdv_mod_cb.erl
index 2e41699c5a..2183e1aa3d 100644
--- a/lib/observer/src/cdv_mod_cb.erl
+++ b/lib/observer/src/cdv_mod_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_multi_wx.erl b/lib/observer/src/cdv_multi_wx.erl
index 13b980b5ea..b511503752 100644
--- a/lib/observer/src/cdv_multi_wx.erl
+++ b/lib/observer/src/cdv_multi_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_port_cb.erl b/lib/observer/src/cdv_port_cb.erl
index 7dbe6d7819..b5cbe8132d 100644
--- a/lib/observer/src/cdv_port_cb.erl
+++ b/lib/observer/src/cdv_port_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_proc_cb.erl b/lib/observer/src/cdv_proc_cb.erl
index 90f6715a06..592150146b 100644
--- a/lib/observer/src/cdv_proc_cb.erl
+++ b/lib/observer/src/cdv_proc_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_sched_cb.erl b/lib/observer/src/cdv_sched_cb.erl
index f236e6a159..192aaf31a7 100644
--- a/lib/observer/src/cdv_sched_cb.erl
+++ b/lib/observer/src/cdv_sched_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_table_wx.erl b/lib/observer/src/cdv_table_wx.erl
index 4e9c158ce3..df16230b70 100644
--- a/lib/observer/src/cdv_table_wx.erl
+++ b/lib/observer/src/cdv_table_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_term_cb.erl b/lib/observer/src/cdv_term_cb.erl
index 155cde2cd0..f0d90dde7c 100644
--- a/lib/observer/src/cdv_term_cb.erl
+++ b/lib/observer/src/cdv_term_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_timer_cb.erl b/lib/observer/src/cdv_timer_cb.erl
index 42285b0fc9..dcc794242c 100644
--- a/lib/observer/src/cdv_timer_cb.erl
+++ b/lib/observer/src/cdv_timer_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_virtual_list_wx.erl b/lib/observer/src/cdv_virtual_list_wx.erl
index 5b2775d61b..ebf58865e9 100644
--- a/lib/observer/src/cdv_virtual_list_wx.erl
+++ b/lib/observer/src/cdv_virtual_list_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/cdv_wx.erl b/lib/observer/src/cdv_wx.erl
index 82247cb93b..2587a6e64e 100644
--- a/lib/observer/src/cdv_wx.erl
+++ b/lib/observer/src/cdv_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/crashdump_viewer.erl b/lib/observer/src/crashdump_viewer.erl
index b66b4d59c9..9268dac180 100644
--- a/lib/observer/src/crashdump_viewer.erl
+++ b/lib/observer/src/crashdump_viewer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1491,6 +1491,9 @@ get_portinfo(Fd,Port) ->
"Port controls linked-in driver" ->
Str = lists:flatten(["Linked in driver: " | val(Fd)]),
get_portinfo(Fd,Port#port{controls=Str});
+ "Port controls forker process" ->
+ Str = lists:flatten(["Forker process: " | val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"Port controls external process" ->
Str = lists:flatten(["External proc: " | val(Fd)]),
get_portinfo(Fd,Port#port{controls=Str});
diff --git a/lib/observer/src/crashdump_viewer.hrl b/lib/observer/src/crashdump_viewer.hrl
index bd08d3e1e1..a08659efd6 100644
--- a/lib/observer/src/crashdump_viewer.hrl
+++ b/lib/observer/src/crashdump_viewer.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/etop.erl b/lib/observer/src/etop.erl
index c97fcc481b..fcb900960b 100644
--- a/lib/observer/src/etop.erl
+++ b/lib/observer/src/etop.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/etop_defs.hrl b/lib/observer/src/etop_defs.hrl
index 39acda5758..7ad8417e2a 100644
--- a/lib/observer/src/etop_defs.hrl
+++ b/lib/observer/src/etop_defs.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/etop_tr.erl b/lib/observer/src/etop_tr.erl
index 38e048c307..8e43f8bb35 100644
--- a/lib/observer/src/etop_tr.erl
+++ b/lib/observer/src/etop_tr.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/etop_txt.erl b/lib/observer/src/etop_txt.erl
index b77fc3c55d..3b4c176478 100644
--- a/lib/observer/src/etop_txt.erl
+++ b/lib/observer/src/etop_txt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/multitrace.erl b/lib/observer/src/multitrace.erl
index dbb6858646..a01eeec6ae 100644
--- a/lib/observer/src/multitrace.erl
+++ b/lib/observer/src/multitrace.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/observer.app.src b/lib/observer/src/observer.app.src
index 61c21a832e..3a5bd172e7 100644
--- a/lib/observer/src/observer.app.src
+++ b/lib/observer/src/observer.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -51,6 +51,7 @@
observer_html_lib,
observer_lib,
observer_perf_wx,
+ observer_port_wx,
observer_pro_wx,
observer_procinfo,
observer_sys_wx,
diff --git a/lib/observer/src/observer.appup.src b/lib/observer/src/observer.appup.src
index 9c7ae3a195..da3cd6a4aa 100644
--- a/lib/observer/src/observer.appup.src
+++ b/lib/observer/src/observer.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/observer.erl b/lib/observer/src/observer.erl
index bb1dedb7e6..79ba7fd614 100644
--- a/lib/observer/src/observer.erl
+++ b/lib/observer/src/observer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/observer_alloc_wx.erl b/lib/observer/src/observer_alloc_wx.erl
index 8d5c8a9037..77609b11ce 100644
--- a/lib/observer/src/observer_alloc_wx.erl
+++ b/lib/observer/src/observer_alloc_wx.erl
@@ -30,55 +30,75 @@
-record(state,
{
- offset = 0.0,
+ time = #ti{},
active = false,
parent,
- windows,
- data = {0, queue:new()},
+ wins,
+ mem,
+ samples,
panel,
paint,
appmon,
async
}).
--define(ALLOC_W, 1).
--define(UTIL_W, 2).
+-define(ID_REFRESH_INTERVAL, 102).
+
+-import(observer_perf_wx,
+ [make_win/4, setup_graph_drawing/1, refresh_panel/4, interval_dialog/2,
+ add_data/5, precalc/4]).
start_link(Notebook, Parent) ->
wx_object:start_link(?MODULE, [Notebook, Parent], []).
init([Notebook, Parent]) ->
try
- Panel = wxPanel:new(Notebook),
+ TopP = wxPanel:new(Notebook),
Main = wxBoxSizer:new(?wxVERTICAL),
- Style = ?wxFULL_REPAINT_ON_RESIZE bor ?wxCLIP_CHILDREN,
- Carrier = wxPanel:new(Panel, [{winid, ?ALLOC_W}, {style,Style}]),
- Utilz = wxPanel:new(Panel, [{winid, ?UTIL_W}, {style,Style}]),
+ Panel = wxPanel:new(TopP),
+ GSzr = wxBoxSizer:new(?wxVERTICAL),
BorderFlags = ?wxLEFT bor ?wxRIGHT,
- wxSizer:add(Main, Carrier, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
- {proportion, 1}, {border, 5}]),
-
- wxSizer:add(Main, Utilz, [{flag, ?wxEXPAND bor BorderFlags},
- {proportion, 1}, {border, 5}]),
-
- MemWin = {MemPanel,_} = create_mem_info(Panel),
- wxSizer:add(Main, MemPanel, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
- {proportion, 1}, {border, 5}]),
- wxWindow:setSizer(Panel, Main),
-
- PaintInfo = observer_perf_wx:setup_graph_drawing([Carrier, Utilz]),
- {Panel, #state{parent=Parent,
- panel =Panel,
- windows = {Carrier, Utilz, MemWin},
- paint=PaintInfo}
+ Carrier = make_win(alloc, Panel, GSzr, BorderFlags bor ?wxTOP),
+ Utilz = make_win(utilz, Panel, GSzr, BorderFlags),
+ wxWindow:setSizer(Panel, GSzr),
+ wxSizer:add(Main, Panel, [{flag, ?wxEXPAND},{proportion,2}]),
+
+ MemWin = create_mem_info(TopP),
+ wxSizer:add(Main, MemWin, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
+ {proportion, 1}, {border, 5}]),
+ wxWindow:setSizer(TopP, Main),
+ Windows = [Carrier, Utilz],
+ PaintInfo = setup_graph_drawing(Windows),
+ {TopP, #state{parent= Parent,
+ panel = Panel,
+ wins = Windows,
+ mem = MemWin,
+ paint = PaintInfo,
+ time = setup_time()
+ }
}
catch _:Err ->
io:format("~p crashed ~p: ~p~n",[?MODULE, Err, erlang:get_stacktrace()]),
{stop, Err}
end.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+setup_time() ->
+ Freq = 1,
+ #ti{fetch=Freq, disp=?DISP_FREQ/Freq}.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+handle_event(#wx{id=?ID_REFRESH_INTERVAL, event=#wxCommand{type=command_menu_selected}},
+ #state{active=Active, panel=Panel, appmon=Old, wins=Wins0, time=#ti{fetch=F0} = Ti0} = State) ->
+ case interval_dialog(Panel, Ti0) of
+ Ti0 -> {noreply, State};
+ #ti{fetch=F0} = Ti -> %% Same fetch interval force refresh
+ Wins = [W#win{max=undefined} || W <- Wins0],
+ {noreply, precalc(State#state{time=Ti, wins=Wins})};
+ Ti when not Active ->
+ {noreply, State#state{time=Ti}};
+ Ti -> %% Changed fetch interval, drop all data
+ {noreply, restart_fetcher(Old, State#state{time=Ti})}
+ end;
handle_event(#wx{event=#wxCommand{type=command_menu_selected}},
State = #state{}) ->
{noreply, State};
@@ -88,13 +108,11 @@ handle_event(Event, _State) ->
%%%%%%%%%%
handle_sync_event(#wx{obj=Panel, event = #wxPaint{}},_,
- #state{active=Active, offset=Offset, paint=Paint,
- windows=Windows, data=Data}) ->
+ #state{active=Active, time=Ti, paint=Paint,
+ wins = Windows}) ->
%% Sigh workaround bug on MacOSX (Id in paint event is always 0)
- Id = if Panel =:= element(?ALLOC_W, Windows) -> alloc;
- Panel =:= element(?UTIL_W, Windows) -> utilz
- end,
- observer_perf_wx:refresh_panel(Panel, Id, Offset, Data, Active, Paint),
+ Win = lists:keyfind(Panel, #win.panel, Windows),
+ refresh_panel(Active, Win, Ti, Paint),
ok.
%%%%%%%%%%
handle_call(Event, From, _State) ->
@@ -107,24 +125,36 @@ handle_cast(Event, _State) ->
handle_info({Key, {promise_reply, {badrpc, _}}}, #state{async=Key} = State) ->
{noreply, State#state{active=false, appmon=undefined}};
-handle_info({Key, {promise_reply, SysInfo}}, #state{async=Key, data=Data} = State) ->
+handle_info({Key, {promise_reply, SysInfo}},
+ #state{async=Key, panel=_Panel, samples=Data, active=Active, wins=Wins0,
+ time=#ti{tick=Tick, disp=Disp0}=Ti} = S0) ->
+ Disp = trunc(Disp0),
+ Next = max(Tick - Disp, 0),
+ erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, Next}),
Info = alloc_info(SysInfo),
- update_alloc(State, Info),
- {noreply, State#state{offset=0.0, data = add_data(Info, Data), async=undefined}};
+ {Wins, Samples} = add_data(Info, Data, Wins0, Ti, Active),
+ S1 = S0#state{time=Ti#ti{tick=Next}, wins=Wins, samples=Samples, async=undefined},
+ if Active ->
+ update_alloc(S0, Info),
+ State = precalc(S1),
+ {noreply, State};
+ true ->
+ {noreply, S1}
+ end;
-handle_info({refresh, Seq, Freq, Node}, #state{panel=Panel, appmon=Node, async=Key} = State) ->
- wxWindow:refresh(Panel),
+handle_info({refresh, Seq},
+ State = #state{panel=Panel, appmon=Node, time=#ti{tick=Seq, disp=DispF}=Ti})
+ when (Seq+1) < (DispF*1.5) ->
Next = Seq+1,
- if
- Next > Freq, Key =:= undefined ->
- erlang:send_after(trunc(1000 / Freq), self(), {refresh, 1, Freq, Node}),
+ State#state.active andalso (catch wxWindow:refresh(Panel)),
+ erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, Next}),
+ if Seq =:= (trunc(DispF)-1) ->
Req = rpc:async_call(Node, observer_backend, sys_info, []),
- {noreply, State#state{offset=Seq/Freq, async=Req}};
+ {noreply, State#state{time=Ti#ti{tick=Next}, async=Req}};
true ->
- erlang:send_after(trunc(1000 / Freq), self(), {refresh, Next, Freq, Node}),
- {noreply, State#state{offset=Seq/Freq}}
+ {noreply, State#state{time=Ti#ti{tick=Next}}}
end;
-handle_info({refresh, _Seq, _Freq, _Node}, State) ->
+handle_info({refresh, _S}, #state{}=State) ->
{noreply, State};
handle_info({active, Node}, State = #state{parent=Parent, panel=Panel, appmon=Old}) ->
@@ -132,15 +162,9 @@ handle_info({active, Node}, State = #state{parent=Parent, panel=Panel, appmon=Ol
try
Node = Old,
wxWindow:refresh(Panel),
- {noreply, State#state{active=true}}
+ {noreply, precalc(State#state{active=true})}
catch _:_ ->
- SysInfo = observer_wx:try_rpc(Node, observer_backend, sys_info, []),
- Info = alloc_info(SysInfo),
- Freq = 6,
- erlang:send_after(trunc(1000 / Freq), self(), {refresh, 1, Freq, Node}),
- wxWindow:refresh(Panel),
- {noreply, State#state{active=true, appmon=Node, offset=0.0,
- data = add_data(Info, {0, queue:new()})}}
+ {noreply, restart_fetcher(Node, State)}
end;
handle_info(not_active, State = #state{appmon=_Pid}) ->
@@ -160,12 +184,22 @@ code_change(_, _, State) ->
%%%%%%%%%%
-add_data(Stats, {N, Q}) when N > 60 ->
- {N, queue:drop(queue:in(Stats, Q))};
-add_data(Stats, {N, Q}) ->
- {N+1, queue:in(Stats, Q)}.
+restart_fetcher(Node, #state{panel=Panel, wins=Wins0, time=Ti} = State) ->
+ SysInfo = observer_wx:try_rpc(Node, observer_backend, sys_info, []),
+ Info = alloc_info(SysInfo),
+ {Wins, Samples} = add_data(Info, {0, queue:new()}, Wins0, Ti, true),
+ erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, 0}),
+ wxWindow:refresh(Panel),
+ precalc(State#state{active=true, appmon=Node, time=Ti#ti{tick=0},
+ wins=Wins, samples=Samples}).
+
+precalc(#state{samples=Data0, paint=Paint, time=Ti, wins=Wins0}=State) ->
+ Wins = [precalc(Ti, Data0, Paint, Win) || Win <- Wins0],
+ State#state{wins=Wins}.
-update_alloc(#state{windows={_, _, {_, Grid}}}, Fields) ->
+
+update_alloc(#state{mem=Grid}, Fields) ->
+ wxWindow:freeze(Grid),
Max = wxListCtrl:getItemCount(Grid),
Update = fun({Name, BS, CS}, Row) ->
(Row >= Max) andalso wxListCtrl:insertItem(Grid, Row, ""),
@@ -174,7 +208,8 @@ update_alloc(#state{windows={_, _, {_, Grid}}}, Fields) ->
wxListCtrl:setItem(Grid, Row, 2, observer_lib:to_str(CS div 1024)),
Row + 1
end,
- lists:foldl(Update, 0, Fields),
+ wx:foldl(Update, 0, Fields),
+ wxWindow:thaw(Grid),
Fields.
alloc_info(SysInfo) ->
@@ -221,10 +256,9 @@ sum_alloc_one_instance([],BS,CS,TotalBS,TotalCS) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
create_mem_info(Parent) ->
- Panel = wxPanel:new(Parent),
- wxWindow:setBackgroundColour(Panel, {255,255,255}),
Style = ?wxLC_REPORT bor ?wxLC_SINGLE_SEL bor ?wxLC_HRULES bor ?wxLC_VRULES,
- Grid = wxListCtrl:new(Panel, [{style, Style}]),
+ Grid = wxListCtrl:new(Parent, [{style, Style}]),
+
Li = wxListItem:new(),
AddListEntry = fun({Name, Align, DefSize}, Col) ->
wxListItem:setText(Li, Name),
@@ -239,19 +273,10 @@ create_mem_info(Parent) ->
lists:foldl(AddListEntry, 0, ListItems),
wxListItem:destroy(Li),
- Sizer = wxBoxSizer:new(?wxVERTICAL),
- wxSizer:add(Sizer, Grid, [{flag, ?wxEXPAND bor ?wxLEFT bor ?wxRIGHT},
- {border, 5}, {proportion, 1}]),
- wxWindow:setSizerAndFit(Panel, Sizer),
- {Panel, Grid}.
-
+ Grid.
create_menus(Parent, _) ->
- MenuEntries =
- [{"File",
- [
- ]}
- ],
- observer_wx:create_menus(Parent, MenuEntries).
+ View = {"View", [#create_menu{id = ?ID_REFRESH_INTERVAL, text = "Graph Settings"}]},
+ observer_wx:create_menus(Parent, [{"File", []}, View]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/observer/src/observer_app_wx.erl b/lib/observer/src/observer_app_wx.erl
index a2b7c21993..936b2783e2 100644
--- a/lib/observer/src/observer_app_wx.erl
+++ b/lib/observer/src/observer_app_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
-include("observer_defs.hrl").
%% Import drawing wrappers
--import(observer_perf_wx, [haveGC/0,
+-import(observer_perf_wx, [haveGC/0, make_gc/2, destroy_gc/1,
setPen/2, setFont/3, setBrush/2,
strokeLine/5, strokeLines/2, drawRoundedRectangle/6,
drawText/4, getTextExtent/2]).
@@ -221,21 +221,21 @@ handle_event(#wx{id=?ID_PROC_KILL, event=#wxCommand{type=command_menu_selected}}
%%% Trace api
handle_event(#wx{id=?ID_TRACE_PID, event=#wxCommand{type=command_menu_selected}},
State = #state{sel={Box,_}}) ->
- observer_trace_wx:add_processes(observer_wx:get_tracer(), [box_to_pid(Box)]),
+ observer_trace_wx:add_processes([box_to_pid(Box)]),
{noreply, State};
handle_event(#wx{id=?ID_TRACE_NAME, event=#wxCommand{type=command_menu_selected}},
State = #state{sel={Box,_}}) ->
- observer_trace_wx:add_processes(observer_wx:get_tracer(), [box_to_reg(Box)]),
+ observer_trace_wx:add_processes([box_to_reg(Box)]),
{noreply, State};
handle_event(#wx{id=?ID_TRACE_TREE_PIDS, event=#wxCommand{type=command_menu_selected}},
State = #state{sel=Sel}) ->
Get = fun(Box) -> box_to_pid(Box) end,
- observer_trace_wx:add_processes(observer_wx:get_tracer(), tree_map(Sel, Get)),
+ observer_trace_wx:add_processes(tree_map(Sel, Get)),
{noreply, State};
handle_event(#wx{id=?ID_TRACE_TREE_NAMES, event=#wxCommand{type=command_menu_selected}},
State = #state{sel=Sel}) ->
Get = fun(Box) -> box_to_reg(Box) end,
- observer_trace_wx:add_processes(observer_wx:get_tracer(), tree_map(Sel, Get)),
+ observer_trace_wx:add_processes(tree_map(Sel, Get)),
{noreply, State};
handle_event(Event, _State) ->
@@ -244,28 +244,18 @@ handle_event(Event, _State) ->
%%%%%%%%%%
handle_sync_event(#wx{event = #wxPaint{}},_,
#state{app_w=DA, app=App, sel=Sel, paint=Paint, usegc=UseGC}) ->
- %% PaintDC must be created in a callback to work on windows.
- IsWindows = element(1, os:type()) =:= win32,
- %% Avoid Windows flickering hack
- DC = if IsWindows -> wx:typeCast(wxBufferedPaintDC:new(DA), wxPaintDC);
- true -> wxPaintDC:new(DA)
- end,
- IsWindows andalso wxDC:clear(DC),
- GC = case UseGC of
- true ->
- GC0 = ?wxGC:create(DC),
- %% Argh must handle scrolling when using ?wxGC
- {Sx,Sy} = wxScrolledWindow:calcScrolledPosition(DA, {0,0}),
- ?wxGC:translate(GC0, Sx,Sy),
- GC0;
- false ->
- wxScrolledWindow:doPrepareDC(DA,DC),
- DC
- end,
+ GC = {GC0, DC} = make_gc(DA, UseGC),
+ case UseGC of
+ false ->
+ wxScrolledWindow:doPrepareDC(DA,DC);
+ true ->
+ %% Argh must handle scrolling when using ?wxGC
+ {Sx,Sy} = wxScrolledWindow:calcScrolledPosition(DA, {0,0}),
+ ?wxGC:translate(GC0, Sx,Sy)
+ end,
%% Nothing is drawn until wxPaintDC is destroyed.
- draw({UseGC, GC}, App, Sel, Paint),
- UseGC andalso ?wxGC:destroy(GC),
- wxPaintDC:destroy(DC),
+ draw(GC, App, Sel, Paint),
+ destroy_gc(GC),
ok.
%%%%%%%%%%
handle_call(Event, From, _State) ->
@@ -312,15 +302,12 @@ handle_info({delivery, _Pid, app, _Curr, {[], [], [], []}},
handle_info({delivery, Pid, app, Curr, AppData},
State = #state{panel=Panel, appmon=Pid, current=Curr, usegc=UseGC,
app_w=AppWin, paint=#paint{font=Font}}) ->
- GC = if UseGC -> ?wxGC:create(AppWin);
- true -> wxWindowDC:new(AppWin)
+ GC = if UseGC -> {?wxGC:create(AppWin), false};
+ true -> {false, wxWindowDC:new(AppWin)}
end,
- FontW = {UseGC, GC},
- setFont(FontW, Font, {0,0,0}),
- App = build_tree(AppData, FontW),
- if UseGC -> ?wxGC:destroy(GC);
- true -> wxWindowDC:destroy(GC)
- end,
+ setFont(GC, Font, {0,0,0}),
+ App = build_tree(AppData, GC),
+ destroy_gc(GC),
setup_scrollbar(AppWin, App),
wxWindow:refresh(Panel),
wxWindow:layout(Panel),
diff --git a/lib/observer/src/observer_defs.hrl b/lib/observer/src/observer_defs.hrl
index 1c2fe520b7..504d0877d9 100644
--- a/lib/observer/src/observer_defs.hrl
+++ b/lib/observer/src/observer_defs.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -49,3 +49,14 @@
-define(LCTRL_WDECR, 4). %% Remove some pixels in column width to avoid creating unnecessary scrollbar
-define(SASH_STYLE, ?wxSP_LIVE_UPDATE bor ?wxSP_NOBORDER bor ?wxSP_3DSASH).
+
+-define(DISP_FREQ, 10). %% per second
+-define(FETCH_DATA, 2). %% per second
+-define(DISP_SECONDS, 60).
+
+-record(ti, {tick=0, disp=?DISP_FREQ/?FETCH_DATA, fetch=?FETCH_DATA, secs=?DISP_SECONDS}).
+
+-record(win, {name, panel, size, geom,
+ graphs=[], no_samples=0,
+ max, state,
+ info=[]}).
diff --git a/lib/observer/src/observer_html_lib.erl b/lib/observer/src/observer_html_lib.erl
index f646f8ed3e..1f1306c370 100644
--- a/lib/observer/src/observer_html_lib.erl
+++ b/lib/observer/src/observer_html_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/observer_lib.erl b/lib/observer/src/observer_lib.erl
index 71a2b71a72..7c1337025f 100644
--- a/lib/observer/src/observer_lib.erl
+++ b/lib/observer/src/observer_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -122,14 +122,14 @@ display_yes_no_dialog(Str) ->
%% display_info(Parent, [{Title, [{Label, Info}]}]) -> {Panel, Sizer, InfoFieldsToUpdate}
display_info(Frame, Info) ->
Panel = wxPanel:new(Frame),
- wxWindow:setBackgroundColour(Panel, {255,255,255}),
+ wxWindow:setBackgroundStyle(Panel, ?wxBG_STYLE_SYSTEM),
Sizer = wxBoxSizer:new(?wxVERTICAL),
wxSizer:addSpacer(Sizer, 5),
Add = fun(BoxInfo) ->
case create_box(Panel, BoxInfo) of
{Box, InfoFs} ->
- wxSizer:add(Sizer, Box, [{flag, ?wxEXPAND bor ?wxALL},
- {border, 5}]),
+ wxSizer:add(Sizer, Box,
+ [{flag, ?wxEXPAND bor ?wxALL}, {border, 5}]),
wxSizer:addSpacer(Sizer, 5),
InfoFs;
undefined ->
@@ -201,22 +201,21 @@ update_info2([Scroll = {_, _, _}|Fs], [{_, NewInfo}|Rest]) ->
update_scroll_boxes(Scroll, NewInfo),
update_info2(Fs, Rest);
update_info2([Field|Fs], [{_Str, {click, Value}}|Rest]) ->
- wxTextCtrl:setValue(Field, to_str(Value)),
+ wxStaticText:setLabel(Field, to_str(Value)),
update_info2(Fs, Rest);
update_info2([Field|Fs], [{_Str, Value}|Rest]) ->
- wxTextCtrl:setValue(Field, to_str(Value)),
+ wxStaticText:setLabel(Field, to_str(Value)),
update_info2(Fs, Rest);
update_info2([Field|Fs], [undefined|Rest]) ->
- wxTextCtrl:setValue(Field, ""),
+ wxStaticText:setLabel(Field, ""),
update_info2(Fs, Rest);
update_info2([], []) -> ok.
update_scroll_boxes({_, _, 0}, {_, []}) -> ok;
update_scroll_boxes({Win, Sizer, _}, {Type, List}) ->
[wxSizerItem:deleteWindows(Child) || Child <- wxSizer:getChildren(Sizer)],
- BC = wxWindow:getBackgroundColour(Win),
Cursor = wxCursor:new(?wxCURSOR_HAND),
- add_entries(Type, List, Win, Sizer, BC, Cursor),
+ add_entries(Type, List, Win, Sizer, Cursor),
wxCursor:destroy(Cursor),
wxSizer:recalcSizes(Sizer),
wxWindow:refresh(Win),
@@ -379,25 +378,22 @@ add_box(Panel, OuterBox, Cursor, Title, Proportion, {Format, List}) ->
wxScrolledWindow:setScrollbars(Scroll,1,1,0,0),
ScrollSizer = wxBoxSizer:new(?wxVERTICAL),
wxScrolledWindow:setSizer(Scroll, ScrollSizer),
- BC = wxWindow:getBackgroundColour(Panel),
- wxWindow:setBackgroundColour(Scroll,BC),
- add_entries(Format, List, Scroll, ScrollSizer, BC, Cursor),
+ wxWindow:setBackgroundStyle(Scroll, ?wxBG_STYLE_SYSTEM),
+ add_entries(Format, List, Scroll, ScrollSizer, Cursor),
wxSizer:add(Box,Scroll,[{proportion,1},{flag,?wxEXPAND}]),
wxSizer:add(OuterBox,Box,[{proportion,Proportion},{flag,?wxEXPAND}]),
{Scroll,ScrollSizer,length(List)}.
-add_entries(click, List, Scroll, ScrollSizer, BC, Cursor) ->
+add_entries(click, List, Scroll, ScrollSizer, Cursor) ->
Add = fun(Link) ->
TC = link_entry(Scroll, Link, Cursor),
- wxWindow:setBackgroundColour(TC,BC),
- wxSizer:add(ScrollSizer,TC,[{flag,?wxEXPAND}])
+ wxWindow:setBackgroundStyle(TC, ?wxBG_STYLE_SYSTEM),
+ wxSizer:add(ScrollSizer,TC, [{flag,?wxEXPAND}])
end,
[Add(Link) || Link <- List];
-add_entries(plain, List, Scroll, ScrollSizer, _, _) ->
+add_entries(plain, List, Scroll, ScrollSizer, _) ->
Add = fun(String) ->
- TC = wxTextCtrl:new(Scroll, ?wxID_ANY,
- [{style,?SINGLE_LINE_STYLE},
- {value,String}]),
+ TC = wxStaticText:new(Scroll, ?wxID_ANY, String),
wxSizer:add(ScrollSizer,TC,[{flag,?wxEXPAND}])
end,
[Add(String) || String <- List].
@@ -435,51 +431,49 @@ create_box(Panel, {scroll_boxes,Data}) ->
wxSizer:layout(OuterBox),
{OuterBox, Boxes};
-create_box(Panel, Data) ->
- {Title, Align, Info} = get_box_info(Data),
- Box = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label, Title}]),
- LeftSize = get_max_size(Panel,Info),
- LeftProportion = [{proportion,0}],
- RightProportion = [{proportion,1}, {flag, Align bor ?wxEXPAND}],
+create_box(Parent, Data) ->
+ {Title, _Align, Info} = get_box_info(Data),
+ Top = wxStaticBoxSizer:new(?wxVERTICAL, Parent, [{label, Title}]),
+ Panel = wxPanel:new(Parent),
+ Box = wxBoxSizer:new(?wxVERTICAL),
+ LeftSize = 30 + get_max_width(Panel,Info),
+ RightProportion = [{flag, ?wxEXPAND}],
AddRow = fun({Desc0, Value0}) ->
Desc = Desc0++":",
Line = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(Line,
- wxTextCtrl:new(Panel, ?wxID_ANY,
- [{style,?SINGLE_LINE_STYLE},
- {size,LeftSize},
- {value,Desc}]),
- LeftProportion),
+ Label = wxStaticText:new(Panel, ?wxID_ANY, Desc),
+ wxSizer:add(Line, 5, 0),
+ wxSizer:add(Line, Label),
+ wxSizer:setItemMinSize(Line, Label, LeftSize, -1),
Field =
case Value0 of
{click,"unknown"} ->
- wxTextCtrl:new(Panel, ?wxID_ANY,
- [{style,?SINGLE_LINE_STYLE},
- {value,"unknown"}]);
+ wxStaticText:new(Panel, ?wxID_ANY,"unknown");
{click,Value} ->
link_entry(Panel,Value);
_ ->
Value = to_str(Value0),
- TCtrl = wxTextCtrl:new(Panel, ?wxID_ANY,
- [{style,?SINGLE_LINE_STYLE},
- {value,Value}]),
- length(Value) > 50 andalso
- wxWindow:setToolTip(TCtrl,wxToolTip:new(Value)),
- TCtrl
+ case length(Value) > 100 of
+ true ->
+ Shown = lists:sublist(Value, 80),
+ TCtrl = wxStaticText:new(Panel, ?wxID_ANY, [Shown,"..."]),
+ wxWindow:setToolTip(TCtrl,wxToolTip:new(Value)),
+ TCtrl;
+ false ->
+ wxStaticText:new(Panel, ?wxID_ANY, Value)
+ end
end,
wxSizer:add(Line, 10, 0), % space of size 10 horisontally
wxSizer:add(Line, Field, RightProportion),
-
- {_,H,_,_} = wxTextCtrl:getTextExtent(Field,"Wj"),
- wxTextCtrl:setMinSize(Field,{0,H}),
-
- wxSizer:add(Box, Line, [{proportion,0},{flag,?wxEXPAND}]),
+ wxSizer:add(Box, Line, [{proportion,1}]),
Field;
(undefined) ->
undefined
end,
InfoFields = [AddRow(Entry) || Entry <- Info],
- {Box, InfoFields}.
+ wxWindow:setSizer(Panel, Box),
+ wxSizer:add(Top, Panel, [{proportion,1},{flag,?wxEXPAND}]),
+ {Top, InfoFields}.
link_entry(Panel, Link) ->
Cursor = wxCursor:new(?wxCURSOR_HAND),
@@ -490,13 +484,12 @@ link_entry(Panel, Link, Cursor) ->
link_entry2(Panel, to_link(Link), Cursor).
link_entry2(Panel,{Target,Str},Cursor) ->
- TC = wxTextCtrl:new(Panel, ?wxID_ANY, [{style, ?SINGLE_LINE_STYLE}]),
- wxTextCtrl:setForegroundColour(TC,?wxBLUE),
- wxTextCtrl:appendText(TC, Str),
+ TC = wxStaticText:new(Panel, ?wxID_ANY, Str),
+ wxWindow:setForegroundColour(TC,?wxBLUE),
wxWindow:setCursor(TC, Cursor),
- wxTextCtrl:connect(TC, left_down, [{userData,Target}]),
- wxTextCtrl:connect(TC, enter_window),
- wxTextCtrl:connect(TC, leave_window),
+ wxWindow:connect(TC, left_down, [{userData,Target}]),
+ wxWindow:connect(TC, enter_window),
+ wxWindow:connect(TC, leave_window),
ToolTip = wxToolTip:new("Click to see properties for " ++ Str),
wxWindow:setToolTip(TC, ToolTip),
TC.
@@ -521,23 +514,12 @@ html_window(Panel, Html) ->
wxHtmlWindow:setPage(Win, Html),
Win.
-get_max_size(Panel,Info) ->
- Txt = wxTextCtrl:new(Panel, ?wxID_ANY, []),
- Size = get_max_size(Txt,Info,0,0),
- wxTextCtrl:destroy(Txt),
- Size.
-
-get_max_size(Txt,[{Desc,_}|Info],MaxX,MaxY) ->
- {X,Y,_,_} = wxTextCtrl:getTextExtent(Txt,Desc++":"),
- if X>MaxX ->
- get_max_size(Txt,Info,X,Y);
- true ->
- get_max_size(Txt,Info,MaxX,MaxY)
- end;
-get_max_size(Txt,[undefined|Info],MaxX,MaxY) ->
- get_max_size(Txt,Info,MaxX,MaxY);
-get_max_size(_,[],X,_Y) ->
- {X+2,-1}.
+get_max_width(Parent,Info) ->
+ lists:foldl(fun({Desc,_}, Max) ->
+ {W, _, _, _} = wxWindow:getTextExtent(Parent, Desc),
+ max(W,Max);
+ (_, Max) -> Max
+ end, 0, Info).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set_listctrl_col_size(LCtrl, Total) ->
diff --git a/lib/observer/src/observer_perf_wx.erl b/lib/observer/src/observer_perf_wx.erl
index ace0b62c1d..6a1aac92c7 100644
--- a/lib/observer/src/observer_perf_wx.erl
+++ b/lib/observer/src/observer_perf_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,8 +25,9 @@
handle_event/2, handle_sync_event/3, handle_cast/2]).
%% Drawing wrappers for DC and GC areas
--export([setup_graph_drawing/1, refresh_panel/6,
- haveGC/0,
+-export([make_win/4, setup_graph_drawing/1,
+ refresh_panel/4, precalc/4, add_data/5, interval_dialog/2,
+ haveGC/0, make_gc/2, destroy_gc/1,
setPen/2, setFont/3, setBrush/2,
strokeLine/5, strokeLines/2, drawRoundedRectangle/6,
drawText/4, getTextExtent/2]).
@@ -35,13 +36,18 @@
-include_lib("wx/include/wx.hrl").
-include("observer_defs.hrl").
+-define(ID_REFRESH_INTERVAL, 102).
+
+-define(BW, 5).
+-define(BH, 5).
+
-record(state,
{
- offset = 0.0,
+ time = #ti{},
active = false,
parent,
- windows,
- data = {0, queue:new()},
+ samples, %% Orig data store
+ wins=[], %% per window content
panel,
paint,
appmon
@@ -51,50 +57,50 @@
-record(paint, {font, small, pen, pen2, pens, usegc = false}).
--define(RQ_W, 1).
--define(MEM_W, 2).
--define(IO_W, 3).
-
start_link(Notebook, Parent) ->
wx_object:start_link(?MODULE, [Notebook, Parent], []).
init([Notebook, Parent]) ->
- try
- Panel = wxPanel:new(Notebook),
- Main = wxBoxSizer:new(?wxVERTICAL),
+ try
+ Panel = wxPanel:new(Notebook),
+ Main = wxBoxSizer:new(?wxVERTICAL),
+ MemIO = wxBoxSizer:new(?wxHORIZONTAL),
+
+ CPU = make_win(runq, Panel, Main, ?wxALL),
+ MEM = make_win(memory, Panel, MemIO, ?wxLEFT),
+ IO = make_win(io, Panel, MemIO, ?wxLEFT bor ?wxRIGHT),
+
+ wxSizer:add(Main, MemIO, [{flag, ?wxEXPAND bor ?wxDOWN},
+ {proportion, 1}, {border, 5}]),
+ wxWindow:setSizer(Panel, Main),
+ Windows = [CPU, MEM, IO],
+ PaintInfo = setup_graph_drawing(Windows),
+
+ process_flag(trap_exit, true),
+ State0 = #state{parent=Parent,
+ panel =Panel,
+ wins = Windows,
+ paint=PaintInfo,
+ samples=reset_data()
+ },
+ {Panel, State0}
+ catch _:Err ->
+ io:format("~p crashed ~p: ~p~n",[?MODULE, Err, erlang:get_stacktrace()]),
+ {stop, Err}
+ end.
+
+make_win(Name, Parent, Sizer, Border) ->
Style = ?wxFULL_REPAINT_ON_RESIZE bor ?wxCLIP_CHILDREN,
- CPU = wxPanel:new(Panel, [{winid, ?RQ_W}, {style,Style}]),
- wxSizer:add(Main, CPU, [{flag, ?wxEXPAND bor ?wxALL},
- {proportion, 1}, {border, 5}]),
- MemIO = wxBoxSizer:new(?wxHORIZONTAL),
- MEM = wxPanel:new(Panel, [{winid, ?MEM_W}, {style,Style}]),
- IO = wxPanel:new(Panel, [{winid, ?IO_W}, {style,Style}]),
- wxSizer:add(MemIO, MEM, [{flag, ?wxEXPAND bor ?wxLEFT},
- {proportion, 1}, {border, 5}]),
- wxSizer:add(MemIO, IO, [{flag, ?wxEXPAND bor ?wxLEFT bor ?wxRIGHT},
- {proportion, 1}, {border, 5}]),
- wxSizer:add(Main, MemIO, [{flag, ?wxEXPAND bor ?wxDOWN},
- {proportion, 1}, {border, 5}]),
- wxWindow:setSizer(Panel, Main),
-
- PaintInfo = setup_graph_drawing([CPU, MEM, IO]),
-
- process_flag(trap_exit, true),
- {Panel, #state{parent=Parent,
- panel =Panel,
- windows = {CPU, MEM, IO},
- paint=PaintInfo
- }}
- catch _:Err ->
- io:format("~p crashed ~p: ~p~n",[?MODULE, Err, erlang:get_stacktrace()]),
- {stop, Err}
- end.
+ Panel = wxPanel:new(Parent, [{style,Style}]),
+ Opts = [{flag, ?wxEXPAND bor Border}, {proportion, 1}, {border, 5}],
+ wxSizer:add(Sizer, Panel, Opts),
+ #win{name=Name, panel=Panel}.
setup_graph_drawing(Panels) ->
IsWindows = element(1, os:type()) =:= win32,
IgnoreCB = {callback, fun(_,_) -> ok end},
- Do = fun(Panel) ->
- wxWindow:setBackgroundColour(Panel, ?wxWHITE),
+ Do = fun(#win{panel=Panel}) ->
+ wxWindow:setBackgroundStyle(Panel, ?wxBG_STYLE_SYSTEM),
wxPanel:connect(Panel, paint, [callback]),
IsWindows andalso
wxPanel:connect(Panel, erase_background, [IgnoreCB])
@@ -117,8 +123,8 @@ setup_graph_drawing(Panels) ->
SF = wxFont:new(DefSize-2, DefFamily, ?wxFONTSTYLE_NORMAL, ?wxFONTWEIGHT_NORMAL),
{F, SF}
end,
- BlackPen = wxPen:new({0,0,0}, [{width, 2}]),
- Pens = [wxPen:new(Col, [{width, 3}]) || Col <- tuple_to_list(colors())],
+ BlackPen = wxPen:new({0,0,0}, [{width, 1}]),
+ Pens = [wxPen:new(Col, [{width, 1}]) || Col <- tuple_to_list(colors())],
#paint{usegc = UseGC,
font = Font,
small = SmallFont,
@@ -129,7 +135,18 @@ setup_graph_drawing(Panels) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
+handle_event(#wx{id=?ID_REFRESH_INTERVAL, event=#wxCommand{type=command_menu_selected}},
+ #state{panel=Panel, appmon=Old, wins=Wins0, time=#ti{fetch=F0} = Ti0} = State) ->
+ case interval_dialog(Panel, Ti0) of
+ Ti0 -> {noreply, State};
+ #ti{fetch=F0} = Ti -> %% Same fetch interval force refresh
+ Wins = [W#win{max=undefined} || W <- Wins0],
+ {noreply, precalc(State#state{time=Ti, wins=Wins})};
+ Ti when Old =:= undefined ->
+ {noreply, State#state{time=Ti}};
+ Ti -> %% Changed fetch interval, drop all data
+ {noreply, restart_fetcher(node(Old), State#state{time=Ti})}
+ end;
handle_event(#wx{event=#wxCommand{type=command_menu_selected}},
State = #state{}) ->
{noreply, State};
@@ -139,41 +156,21 @@ handle_event(Event, _State) ->
%%%%%%%%%%
handle_sync_event(#wx{obj=Panel, event = #wxPaint{}},_,
- #state{active=Active, offset=Offset, paint=Paint,
- windows=Windows, data=Data}) ->
+ #state{active=Active, time=Ti, paint=Paint, wins=Windows}) ->
%% Sigh workaround bug on MacOSX (Id in paint event is always 0)
%% Panel = element(Id, Windows),
- Id = if Panel =:= element(?RQ_W, Windows) -> runq;
- Panel =:= element(?MEM_W, Windows) -> memory;
- Panel =:= element(?IO_W, Windows) -> io
- end,
-
- refresh_panel(Panel, Id, Offset, Data, Active, Paint),
+ Win = lists:keyfind(Panel, #win.panel, Windows),
+ refresh_panel(Active, Win, Ti, Paint),
ok.
-refresh_panel(Panel, Id, Offset, Data, Active, #paint{usegc=UseGC} = Paint) ->
+refresh_panel(Active, #win{name=_Id, panel=Panel}=Win, Ti, #paint{usegc=UseGC}=Paint) ->
%% PaintDC must be created in a callback to work on windows.
- IsWindows = element(1, os:type()) =:= win32,
- DC = if IsWindows ->
- %% Ugly hack to aviod flickering on windows, works on windows only
- %% But the other platforms are doublebuffered by default
- wx:typeCast(wxBufferedPaintDC:new(Panel), wxPaintDC);
- true ->
- wxPaintDC:new(Panel)
- end,
- IsWindows andalso wxDC:clear(DC),
- GC = if UseGC -> ?wxGC:create(DC);
- true -> DC
- end,
%% Nothing is drawn until wxPaintDC is destroyed.
- try
- draw(Offset, Id, {UseGC, GC}, Panel, Paint, Data, Active)
- catch _:Err ->
- io:format("Internal error ~p ~p~n",[Err, erlang:get_stacktrace()])
+ GC = make_gc(Panel, UseGC),
+ if Active -> draw_win(GC, Win, Ti, Paint);
+ true -> ignore
end,
- UseGC andalso ?wxGC:destroy(GC),
- wxPaintDC:destroy(DC).
-
+ destroy_gc(GC).
%%%%%%%%%%
handle_call(Event, From, _State) ->
@@ -182,41 +179,42 @@ handle_call(Event, From, _State) ->
handle_cast(Event, _State) ->
error({unhandled_cast, Event}).
%%%%%%%%%%
-handle_info(Stats = {stats, 1, _, _, _},
- State = #state{panel=Panel, data=Data, active=Active}) ->
+handle_info({stats, 1, _, _, _} = Stats,
+ #state{panel=Panel, samples=Data, active=Active, wins=Wins0,
+ time=#ti{tick=Tick, disp=Disp0}=Ti} = State0) ->
if Active ->
+ Disp = trunc(Disp0),
+ Next = max(Tick - Disp, 0),
+ erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, Next}),
+ {Wins, Samples} = add_data(Stats, Data, Wins0, Ti, Active),
+ State = precalc(State0#state{time=Ti#ti{tick=Next}, wins=Wins, samples=Samples}),
wxWindow:refresh(Panel),
- Freq = 6,
- erlang:send_after(trunc(1000 / Freq), self(), {refresh, 1, Freq});
- true -> ignore
- end,
- {noreply, State#state{offset=0.0, data = add_data(Stats, Data)}};
-
-handle_info({refresh, Seq, Freq}, State = #state{panel=Panel, offset=Prev}) ->
- wxWindow:refresh(Panel),
- Next = Seq+1,
- if Seq > 1, Prev =:= 0.0 ->
- %% We didn't have time to handle the refresh
{noreply, State};
- Next < Freq ->
- erlang:send_after(trunc(1000 / Freq), self(), {refresh, Next, Freq}),
- {noreply, State#state{offset=Seq/Freq}};
true ->
- {noreply, State#state{offset=Seq/Freq}}
+ {Wins1, Samples} = add_data(Stats, Data, Wins0, Ti, Active),
+ Wins = [W#win{max=undefined} || W <- Wins1],
+ {noreply, State0#state{samples=Samples, wins=Wins, time=Ti#ti{tick=0}}}
end;
-handle_info({active, Node}, State = #state{parent=Parent, panel=Panel, appmon=Old}) ->
+handle_info({refresh, Seq}, #state{panel=Panel, time=#ti{tick=Seq, disp=DispF}=Ti} = State0)
+ when (Seq+1) < (DispF*1.5) ->
+ Next = Seq+1,
+ erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, Next}),
+ State = precalc(State0#state{time=Ti#ti{tick=Next}}),
+ catch wxWindow:refresh(Panel),
+ {noreply, State};
+handle_info({refresh, _}, State) ->
+ {noreply, State};
+
+handle_info({active, Node}, #state{parent=Parent, panel=Panel, appmon=Old, time=_Ti} = State) ->
create_menus(Parent, []),
try
Node = node(Old),
wxWindow:refresh(Panel),
+ erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, 0}),
{noreply, State#state{active=true}}
catch _:_ ->
- catch Old ! exit,
- Me = self(),
- Pid = spawn_link(Node, observer_backend, fetch_stats, [Me, 1000]),
- wxWindow:refresh(Panel),
- {noreply, State#state{active=true, appmon=Pid, data={0, queue:new()}}}
+ {noreply,restart_fetcher(Node, State)}
end;
handle_info(not_active, State = #state{appmon=_Pid}) ->
@@ -237,173 +235,347 @@ terminate(_Event, #state{appmon=Pid}) ->
code_change(_, _, State) ->
State.
-add_data(Stats, {N, Q}) when N > 60 ->
- {N, queue:drop(queue:in(Stats, Q))};
-add_data(Stats, {N, Q}) ->
- {N+1, queue:in(Stats, Q)}.
+restart_fetcher(Node, #state{appmon=Old, panel=Panel, time=#ti{fetch=Freq}=Ti, wins=Wins0}=State) ->
+ catch Old ! exit,
+ Me = self(),
+ Pid = spawn_link(Node, observer_backend, fetch_stats, [Me, round(1000/Freq)]),
+ wxWindow:refresh(Panel),
+ Wins = [W#win{state=undefined} || W <- Wins0],
+ precalc(State#state{active=true, appmon=Pid, samples=reset_data(),
+ wins=Wins, time=Ti#ti{tick=0}}).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+reset_data() ->
+ {0, queue:new()}.
-create_menus(Parent, _) ->
- MenuEntries =
- [{"File",
- [
- ]}
- ],
- observer_wx:create_menus(Parent, MenuEntries).
+add_data(Stats, {N, Q0}, Wins, #ti{fetch=Fetch, secs=Secs}, Active) when N > (Secs*Fetch+1) ->
+ {{value, Drop}, Q} = queue:out(Q0),
+ add_data_1(Wins, Stats, N, {Drop,Q}, Active);
+add_data(Stats, {N, Q}, Wins, _, Active) ->
+ add_data_1(Wins, Stats, N+1, {empty, Q}, Active).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-collect_data(runq, {N, Q}) ->
- case queue:to_list(Q) of
- [] -> {0, 0, [], []};
- [_] -> {0, 0, [], []};
- [{stats, _Ver, Init0, _IO, _Mem}|Data0] ->
- Init = lists:sort(Init0),
- [_|Data=[First|_]] = lists:foldl(fun({stats, _, T0, _, _}, [Prev|Acc]) ->
- TN = lists:sort(T0),
- Delta = calc_delta(TN, Prev),
- [TN, list_to_tuple(Delta)|Acc]
- end, [Init], Data0),
- NoGraphs = tuple_size(First),
- {N, lmax(Data), lists:reverse([First|Data]), lists:seq(1, NoGraphs)}
- end;
-collect_data(memory, {N, Q}) ->
- MemT = mem_types(),
- Data = [list_to_tuple([Value || {Type,Value} <- MemInfo,
- lists:member(Type, MemT)])
- || {stats, _Ver, _RQ, _IO, MemInfo} <- queue:to_list(Q)],
- {N, lmax(Data), Data, MemT};
-collect_data(io, {N, Q}) ->
- case queue:to_list(Q) of
- [] -> {0, 0, [], []};
- [_] -> {0, 0, [], []};
- [{stats, _Ver, _RQ, {{_,In0}, {_,Out0}}, _Mem}|Data0] ->
- [_,_|Data=[First|_]] =
- lists:foldl(fun({stats, _, _, {{_,In}, {_,Out}}, _}, [PIn,Pout|Acc]) ->
- [In,Out,{In-PIn,Out-Pout}|Acc]
- end, [In0,Out0], Data0),
- {N, lmax(Data), lists:reverse([First|Data]), [input, output]}
+add_data_1([#win{state={_,St}}|_]=Wins0, Last, N, {Drop, Q}, Active)
+ when St /= undefined ->
+ try
+ {Wins, Stat} =
+ lists:mapfoldl(fun(Win0, Entry) ->
+ {Win1,Stat} = add_data_2(Win0, Last, Entry),
+ case Active of
+ true ->
+ Win = add_data_3(Win1, N, Drop, Stat, Q),
+ {Win, Stat};
+ false ->
+ {Win1, Stat}
+ end
+ end, #{}, Wins0),
+ {Wins, {N,queue:in(Stat#{}, Q)}}
+ catch no_scheduler_change ->
+ {[Win#win{state=init_data(Id, Last),
+ info = info(Id, Last)}
+ || #win{name=Id}=Win <- Wins0], {0,queue:new()}}
end;
-collect_data(alloc, {N, Q}) ->
- List = queue:to_list(Q),
- Data = [list_to_tuple([Carrier || {_Type,_Block,Carrier} <- MemInfo])
- || MemInfo <- List],
- Info = case List of %% Varies depending on erlang build config/platform
- [MInfo|_] -> [Type || {Type, _, _} <- MInfo];
- _ -> []
- end,
- {N, lmax(Data), Data, Info};
-
-collect_data(utilz, {N, Q}) ->
- List = queue:to_list(Q),
- Data = [list_to_tuple([round(100*Block/Carrier) || {_Type,Block,Carrier} <- MemInfo])
- || MemInfo <- List],
- Info = case List of %% Varies depending on erlang build config/platform
- [MInfo|_] -> [Type || {Type, _, _} <- MInfo];
- _ -> []
+
+add_data_1(Wins, Stats, 1, {_, Q}, _) ->
+ {[Win#win{state=init_data(Id, Stats),
+ info = info(Id, Stats)}
+ || #win{name=Id}=Win <- Wins], {0,Q}}.
+
+add_data_2(#win{name=Id, state=S0}=Win, Stats, Map) ->
+ {V1, S1} = collect_data(Id, Stats, S0),
+ {Win#win{state=S1}, Map#{Id=>V1}}.
+
+add_data_3(#win{name=Id, max={{OldMax, OldEntry},_,_,_},
+ geom=#{scale:={WS,HS}}, state={Max,_},
+ graphs=Graphs}=Win,
+ N, Drop0, Last, Q1)
+ when N > 3 ->
+ Drop = case Drop0 of
+ #{Id:=D} -> D;
+ _ -> Drop0
end,
- {N, lmax(Data), Data, Info}.
+ case {max_value(Max), Drop =:= OldEntry} of
+ {OldMax, false} ->
+ #{Id:=V4} = Last,
+ {{value, #{Id:=V3}},Q2} = queue:out_r(Q1),
+ {{value, #{Id:=V2}},Q3} = queue:out_r(Q2),
+ {{value, #{Id:=V1}},_} = queue:out_r(Q3),
+ Vals = [V1,V2,V3,V4],
+ Gs = tuple_size(V1),
+ Info = lists:zip(lists:seq(Gs, 1, -1), Graphs),
+ Lines = [add_lines(Vals, Drop, Prev, I, WS, HS) || {I, Prev} <- Info],
+ Win#win{graphs=Lines, no_samples=N};
+ _W -> %% Max changed Trigger complete recalc
+ Win#win{max=undefined}
+ end;
+add_data_3(Win, _, _, _,_) ->
+ %% Trigger complete recalc
+ Win#win{max=undefined}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+create_menus(Parent, _) ->
+ View = {"View", [#create_menu{id = ?ID_REFRESH_INTERVAL, text = "Graph Settings"}]},
+ observer_wx:create_menus(Parent, [{"File", []}, View]).
+
+interval_dialog(Parent0, #ti{fetch=Fetch0, secs=Secs0}=Ti) ->
+ Parent = observer_lib:get_wx_parent(Parent0),
+ Dialog = wxDialog:new(Parent, ?wxID_ANY, "Load Chart Settings",
+ [{style, ?wxDEFAULT_DIALOG_STYLE bor
+ ?wxRESIZE_BORDER}]),
+ {Sl1,FetchSl} = slider(Dialog, "Sample (ms)", trunc(1000 / Fetch0), 100, 10000),
+ {Sl2, SecsSl} = slider(Dialog, "Length (min)", Secs0 div 60, 1, 10),
+ TopSizer = wxBoxSizer:new(?wxVERTICAL),
+ Flags = [{flag, ?wxEXPAND bor ?wxTOP bor ?wxLEFT bor ?wxRIGHT},
+ {border, 5}, {proportion, 1}],
+ wxSizer:add(TopSizer, Sl1, Flags),
+ wxSizer:add(TopSizer, Sl2, Flags),
+ wxSizer:add(TopSizer, wxDialog:createButtonSizer(Dialog, ?wxOK bor ?wxCANCEL), Flags),
+ wxWindow:setSizerAndFit(Dialog, TopSizer),
+ wxSizer:setSizeHints(TopSizer, Dialog),
+ Res = case wxDialog:showModal(Dialog) of
+ ?wxID_OK ->
+ Fetch = 1000 / wxSlider:getValue(FetchSl),
+ Secs = wxSlider:getValue(SecsSl) * 60,
+ Ti#ti{fetch=Fetch, secs=Secs, disp=?DISP_FREQ/Fetch};
+ ?wxID_CANCEL ->
+ Ti
+ end,
+ wxDialog:destroy(Dialog),
+ Res.
+
+slider(Parent, Str, Value, Min, Max) ->
+ Sz = wxBoxSizer:new(?wxHORIZONTAL),
+ Center = [{flag, ?wxALIGN_CENTER_VERTICAL}],
+ wxSizer:add(Sz, wxStaticText:new(Parent, ?wxID_ANY, Str), [{proportion, 1}|Center]),
+ Opt = [{style, ?wxSL_HORIZONTAL bor ?wxSL_LABELS}],
+ Slider = wxSlider:new(Parent, ?wxID_ANY, Value, Min, Max, Opt),
+ wxSizer:add(Sz, Slider, [{proportion, 2}|Center]),
+ case Min > 1 of
+ false ->
+ {Sz, Slider};
+ true ->
+ CB = fun(#wx{event=Ev},_) -> step(Ev, Slider, Min) end,
+ wxSlider:connect(Slider, scroll_thumbtrack, [{callback, CB}]),
+ wxSlider:connect(Slider, scroll_changed, [{callback, CB}]),
+ {Sz, Slider}
+ end.
+step(_Ev = #wxScroll{commandInt=Value}, Slider, Min) ->
+ Val = Min * round(Value / Min),
+ wxSlider:setValue(Slider, Val),
+ ok.
-mem_types() ->
- [total, processes, atom, binary, code, ets].
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-lmax([]) -> 0;
-lmax(List) ->
- Max = [lists:max(tuple_to_list(T)) || T <- List,
- tuple_size(T) > 0],
- case Max of
- [] -> 0;
- _ -> lists:max(Max)
+mk_max() -> {0, undefined}.
+max_value({Max,_}) -> Max.
+%% max_data({_,Data}) -> Data. matched in function head
+
+lmax(MState, Tuple, Tuple) when is_tuple(Tuple) ->
+ lmax(MState, tuple_to_list(Tuple), Tuple);
+lmax(MState, Values, State) ->
+ Max = max_value(MState),
+ New = lists:max([Max|Values]),
+ case New >= Max of
+ false -> MState;
+ true -> {New, State}
end.
+init_data(runq, {stats, _, T0, _, _}) -> {mk_max(),lists:sort(T0)};
+init_data(io, {stats, _, _, {{_,In0}, {_,Out0}}, _}) -> {mk_max(), {In0,Out0}};
+init_data(memory, _) -> {mk_max(), info(memory, undefined)};
+init_data(alloc, _) -> {mk_max(), ok};
+init_data(utilz, _) -> {mk_max(), ok}.
+
+info(runq, {stats, _, T0, _, _}) -> lists:seq(1, length(T0));
+info(memory, _) -> [total, processes, atom, binary, code, ets];
+info(io, _) -> [input, output];
+info(alloc, First) -> [Type || {Type, _, _} <- First];
+info(utilz, First) -> [Type || {Type, _, _} <- First];
+info(_, []) -> [].
+
+collect_data(runq, {stats, _, T0, _, _}, {Max,S0}) ->
+ S1 = lists:sort(T0),
+ Delta = calc_delta(S1, S0),
+ Sample = list_to_tuple(Delta),
+ {Sample, {lmax(Max,Delta,Sample), S1}};
+collect_data(io, {stats, _, _, {{_,In0}, {_,Out0}}, _}, {Max,{PIn,POut}}) ->
+ In = In0-PIn,
+ Out = Out0-POut,
+ Sample = {In, Out},
+ {Sample, {lmax(Max, [In,Out], Sample), {In0, Out0}}};
+collect_data(memory, {stats, _, _, _, MemInfo}, {Max, MemTypes}) ->
+ Vs = [Value || {Type,Value} <- MemInfo, lists:member(Type, MemTypes)],
+ Sample = list_to_tuple(Vs),
+ {Sample, {lmax(Max, Vs, Sample),MemTypes}};
+collect_data(alloc, MemInfo, Max) ->
+ Vs = [Carrier || {_Type,_Block,Carrier} <- MemInfo],
+ Sample = list_to_tuple(Vs),
+ {Sample, lmax(Max, Vs, Sample)};
+collect_data(utilz, MemInfo, Max) ->
+ Vs = [round(100*Block/Carrier) || {_Type,Block,Carrier} <- MemInfo],
+ Sample = list_to_tuple(Vs),
+ {Sample, lmax(Max,Vs,Sample)}.
+
calc_delta([{Id, WN, TN}|Ss], [{Id, WP, TP}|Ps]) ->
[100*(WN-WP) div (TN-TP)|calc_delta(Ss, Ps)];
-calc_delta([], []) -> [].
+calc_delta([], []) -> [];
+calc_delta(_, _) -> throw(no_scheduler_change).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-draw(Offset, Id, DC, Panel, Paint=#paint{pens=Pens, small=Small}, Data, Active) ->
- %% This can be optimized a lot by collecting data once
- %% and draw to memory and then blit memory and only draw new entries in new memory
- %% area. Hmm now rewritten to use ?wxGC I don't now if it is feasable.
- {Len, Max0, Hs, Info} = collect_data(Id, Data),
- {Max,_,_} = MaxDisp = calc_max(Id, Max0),
+precalc(#state{samples=Data0, paint=Paint, time=Ti, wins=Wins0}=State) ->
+ Wins = [precalc(Ti, Data0, Paint, Win) || Win <- Wins0],
+ State#state{wins=Wins}.
+
+precalc(Ti, {NoSamples,Q}, Paint, #win{name=Id, panel=Panel}=Win) ->
Size = wxWindow:getClientSize(Panel),
- {X0,Y0,WS,HS, DrawBs} = draw_borders(Id, Info, DC, Size, MaxDisp, Paint),
- Last = 60*WS+X0-1,
- Start = max(61-Len, 0)*WS+X0 - Offset*WS,
- Samples = length(Hs),
- NoGraphs = try tuple_size(hd(Hs)) catch _:_ -> 0 end,
- case Active andalso Samples > 1 andalso NoGraphs > 0 of
- true ->
- Draw = fun(N) ->
- Lines = make_lines(Hs, Start, N, {X0,Max*HS,Last}, Y0, WS, HS),
- setPen(DC, element(1+ ((N-1) rem tuple_size(Pens)), Pens)),
- strokeLines(DC, Lines),
- N+1
- end,
- [Draw(I) || I <- lists:seq(NoGraphs, 1, -1)],
- DrawBs();
- false ->
- DrawBs(),
- Text = case Active andalso Samples =< 1 of
+ case Win of
+ #win{max=Max, no_samples=NoSamples, size=Size} when is_tuple(Max) ->
+ Win;
+ _SomeThingChanged ->
+ Hs = [Vals || #{Id:=Vals} <- queue:to_list(Q)],
+ Max = lists:foldl(fun(Vals,Max) -> lmax(Max, Vals, Vals) end,
+ mk_max(), Hs),
+ MaxDisp = calc_max(Id, Max),
+ #{scale:={WS,HS}} = Props = window_geom(Size, MaxDisp, Ti, Panel, Paint),
+ NoGraphs = try tuple_size(hd(Hs)) catch _:_ -> 0 end,
+ Graphs = [make_lines(Hs, I, WS, HS) || I <- lists:seq(NoGraphs, 1, -1)],
+ State = case Win#win.state of
+ undefined -> {Max, undefined};
+ {_, St} -> {Max, St}
+ end,
+ Win#win{geom=Props, size=Size,
+ max=MaxDisp,
+ graphs=Graphs,
+ no_samples=NoSamples,
+ state=State}
+ end.
+
+window_geom({W,H}, {_, Max, _Unit, MaxUnit},
+ #ti{secs=Secs, fetch=FetchFreq},
+ Panel, #paint{font=Font}) ->
+ Str1 = observer_lib:to_str(MaxUnit),
+ Str2 = observer_lib:to_str(MaxUnit div 2),
+ Str3 = observer_lib:to_str(0),
+ {TW,TH,_,_} = wxWindow:getTextExtent(Panel, Str1, [{theFont, Font}]),
+ {SpaceW, _,_,_} = wxWindow:getTextExtent(Panel, "W", [{theFont, Font}]),
+ X0 = ?BW+TW+?BW,
+ X1 = W-?BW*4,
+ MaxTextY = TH+?BH,
+ BottomTextY = H-?BH-TH,
+ Y0 = MaxTextY + (TH / 2),
+ Y1 = BottomTextY - TH - ?BH,
+
+ ScaleW = (X1-X0-1)/(Secs*FetchFreq),
+ ScaleH = (Y1-Y0-1) / Max,
+ #{p0=>{X0,Y0}, p1=>{X1,Y1}, scale=>{ScaleW, ScaleH},
+ txsz=>{TW,TH,SpaceW}, txt=>{BottomTextY, MaxTextY}, strs=>{Str1,Str2,Str3}}.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+draw_win(DC, #win{no_samples=Samples, geom=#{scale:={WS,HS}}, graphs=Graphs, max={_,Max,_,_}}=Win,
+ #ti{tick=Tick, fetch=FetchFreq, secs=Secs, disp=DispFreq}=Ti,
+ Paint=#paint{pens=Pens}) when Samples >= 2, Graphs =/= [] ->
+ %% Draw graphs
+ {X0,Y0,DrawBs} = draw_borders(DC, Ti, Win, Paint),
+ Offset = Tick / DispFreq,
+ Full = case Samples > (1+Secs*FetchFreq) of
+ true -> 1;
+ false -> 2
+ end,
+ Start = X0 + (max(Secs*FetchFreq+Full-Samples, 0) - Offset)*WS,
+ Last = Secs*FetchFreq*WS+X0,
+ Draw = fun(Lines0, N) ->
+ setPen(DC, element(1+ ((N-1) rem tuple_size(Pens)), Pens)),
+ Order = lists:reverse(Lines0),
+ [{_,Y}|Lines] = translate(Order, {Start, Y0}, 0, WS, {X0,Max*HS,Last}, []),
+ strokeLines(DC, [{Last,Y}|Lines]),
+ N-1
+ end,
+ lists:foldl(Draw, length(Graphs), Graphs),
+ DrawBs(),
+ ok;
+
+draw_win(DC, #win{no_samples=Samples} = Win,Ti, #paint{small=Small}=Paint) ->
+ %% Draw Error Msg
+ try draw_borders(DC, Ti, Win, Paint) of
+ {X0,_Y0,DrawBs} ->
+ Text = case Samples =< 1 of
true -> "Waiting for data";
false -> "Information not available"
end,
setFont(DC, Small, {0,0,0}),
- drawText(DC, Text, X0 + 100, element(2,Size) div 2)
- end,
- ok.
+ {_,WW} = getSize(DC),
+ drawText(DC, Text, X0 + 100, WW div 2),
+ DrawBs(),
+ ok
+ catch _:_ -> %% Early redraws fail
+ ok
+ end.
-make_lines(Ds = [Data|_], PX, N, Clip, ZeroY, WS, HS) ->
+translate([{X0,Y}|Rest], {Sx,Sy}=Start, N, WS, {Cx,Cy,Cw}=Clip, Acc) ->
+ X = min((N-X0)*WS+Sx,Cw),
+ Next = if X0 > 0 -> N; true -> N+1 end,
+ case X =< Cx of
+ true ->
+ translate(Rest, Start, Next, WS, Clip, [{Cx,Sy-min(Cy,Y)}]);
+ false ->
+ translate(Rest, Start, Next, WS, Clip, [{X,Sy-min(Cy,Y)}|Acc])
+ end;
+translate([], _, _, _, _, Acc) ->
+ Acc.
+
+add_lines(Vals, Drop, OldLines, I, WS, HS) ->
+ Lines = strip(OldLines, Drop, 2),
+ New = make_lines(Vals, I, WS, HS),
+ New ++ Lines.
+
+strip([{X,_}|Rest], Drop, N) when X > 0.0001, N > 0 ->
+ strip(Rest, Drop, N);
+strip([_|Rest], Drop, N) when N > 0 ->
+ strip(Rest, Drop, N-1);
+strip(List, empty, _) -> List;
+strip(List, _, _) ->
+ lists:reverse(strip(lists:reverse(List), empty, 1)).
+
+make_lines(Ds = [Data|_], N, WS, HS) ->
Y = element(N,Data),
- make_lines(Ds, PX, N, Clip, ZeroY, WS, HS, Y, []).
+ make_lines(Ds, N, WS, HS, Y, []).
-make_lines([D1 | Ds = [D2|Rest]], PX, N, Clip={Cx,Cy, _}, ZeroY, WS, HS, Y0, Acc0) ->
+make_lines([D1 | Ds = [D2|Rest]], N, WS, HS, Y0, Acc0) ->
Y1 = element(N,D1),
Y2 = element(N,D2),
Y3 = case Rest of
[D3|_] -> element(N,D3);
[] -> Y2
end,
- This = {max(Cx, PX),ZeroY-min(Cy,Y1*HS)},
+ This = {0, Y1*HS},
Acc = if (abs(Y1-Y2) * HS) < 3.0 -> [This|Acc0];
WS < 3.0 -> [This|Acc0];
- PX < Cx ->
- make_splines(Y0,Y1,Y2,Y3,PX,Clip,ZeroY,WS,HS,Acc0);
- true ->
- make_splines(Y0,Y1,Y2,Y3,PX,Clip,ZeroY,WS,HS,[This|Acc0])
+ true -> make_splines(Y0,Y1,Y2,Y3,WS,HS,[This|Acc0])
end,
- make_lines(Ds, PX+WS, N, Clip, ZeroY, WS, HS, Y1, Acc);
-make_lines([D1], _PX, N, {_,Cy,Last}, ZeroY, _WS, HS, _Y0, Acc) ->
- Y1 = element(N,D1),
- [{Last,ZeroY-min(Cy, Y1*HS)}|Acc].
+ make_lines(Ds, N, WS, HS, Y1, Acc);
+make_lines([_D1], _N, _WS, _HS, _Y0, Acc) ->
+ Acc.
-make_splines(Y00,Y10,Y20,Y30,PX,Clip,ZeroY,WS,HS,Acc) ->
+make_splines(Y00,Y10,Y20,Y30,WS,HS,Acc) ->
Y1 = Y10*HS,
Y2 = Y20*HS,
- Steps = min(abs(Y1-Y2), WS),
+ Steps = min(abs(Y1-Y2), WS/2),
if Steps > 2 ->
Y0 = Y00*HS,
Y3 = Y30*HS,
Tan = spline_tan(Y0,Y1,Y2,Y3),
Delta = 1/Steps,
- splines(Steps-1, 0.0, Delta, Tan, Y1,Y2, PX, Clip,ZeroY, Delta*WS, Acc);
+ splines(Steps-1, 0.0, Delta, Tan, Y1,Y2, Acc);
true ->
Acc
end.
-splines(N, XD, XD0, Tan, Y1,Y2, PX0, Clip={Cx,Cy,_},ZeroY, WS, Acc) when N > 0 ->
- PX = PX0+WS,
+splines(N, XD, XD0, Tan, Y1,Y2, Acc) when N > 0 ->
Delta = XD+XD0,
- if PX < Cx ->
- splines(N-1, Delta, XD0, Tan, Y1, Y2, PX, Clip,ZeroY, WS, Acc);
- true ->
- Y = min(Cy, max(0,spline(Delta, Tan, Y1,Y2))),
- splines(N-1, Delta, XD0, Tan, Y1, Y2, PX, Clip,ZeroY, WS,
- [{PX, ZeroY-Y}|Acc])
- end;
-splines(_N, _XD, _XD0, _Tan, _Y1,_Y2, _PX, _Clip,_ZeroY, _WS, Acc) -> Acc.
+ Y = max(0, spline(Delta, Tan, Y1,Y2)),
+ splines(N-1, Delta, XD0, Tan, Y1, Y2, [{1.0-Delta, Y}|Acc]);
+splines(_N, _XD, _XD0, _Tan, _Y1,_Y2, Acc) ->
+ Acc.
spline(T, {M1, M2}, Y1, Y2) ->
%% Hermite Basis Funcs
@@ -423,34 +595,19 @@ spline_tan(Y0, Y1, Y2, Y3) ->
M2 = S*C*(Y3-Y1),
{M1,M2}.
--define(BW, 5).
--define(BH, 5).
-
-draw_borders(Type, Info, DC, {W,H}, {Max, Unit, MaxUnit},
+draw_borders(DC, #ti{secs=Secs, fetch=FetchFreq},
+ #win{name=Type, geom=Geom, info=Info, max={_,_,Unit,_}},
#paint{pen=Pen, pen2=Pen2, font=Font, small=Small}) ->
- Str1 = observer_lib:to_str(MaxUnit),
- Str2 = observer_lib:to_str(MaxUnit div 2),
- Str3 = observer_lib:to_str(0),
-
- setFont(DC, Font, {0,0,0}),
- {TW,TH} = getTextExtent(DC, Str1),
- {SpaceW, _} = getTextExtent(DC, "W"),
+ #{p0:={GraphX0, GraphY0}, p1:={GraphX1,GraphY1}, scale:={ScaleW0,_},
+ txsz:={TW,TH,SpaceW}, txt:={BottomTextY, MaxTextY}, strs:={Str1,Str2,Str3}} = Geom,
- GraphX0 = ?BW+TW+?BW,
- GraphX1 = W-?BW*4,
+ ScaleW = ScaleW0*FetchFreq,
TopTextX = ?BW*3+TW,
- MaxTextY = TH+?BH,
- BottomTextY = H-?BH-TH,
SecondsY = BottomTextY - TH,
- GraphY0 = MaxTextY + (TH / 2),
- GraphY1 = SecondsY - ?BH,
- GraphW = GraphX1-GraphX0-1,
- GraphH = GraphY1-GraphY0-1,
+
GraphY25 = GraphY0 + (GraphY1 - GraphY0) / 4,
GraphY50 = GraphY0 + (GraphY1 - GraphY0) / 2,
GraphY75 = GraphY0 + 3*(GraphY1 - GraphY0) / 4,
- ScaleW = GraphW / 60,
- ScaleH = GraphH / Max,
setFont(DC, Small, {0,0,0}),
Align = fun(Str, Y) ->
@@ -462,14 +619,21 @@ draw_borders(Type, Info, DC, {W,H}, {Max, Unit, MaxUnit},
Align(Str3, GraphY1 - (TH / 2) + 1),
setPen(DC, Pen),
- DrawSecs = fun(Secs, Pos) ->
- Str = [observer_lib:to_str(Secs)|" s"],
+ DrawSecs = fun(Sec, {Pos, Prev}) ->
+ Str = observer_lib:to_str(Sec) ++ "s",
X = GraphX0+Pos,
- drawText(DC, Str, X-SpaceW, SecondsY),
strokeLine(DC, X, GraphY0, X, GraphY1+5),
- Pos + 10*ScaleW
+ TxtX = X-SpaceW,
+ case TxtX > Prev of
+ true ->
+ drawText(DC, Str, TxtX, SecondsY),
+ TxtW = SpaceW*length(Str),
+ {Pos + 10*ScaleW, TxtX+TxtW};
+ false ->
+ {Pos + 10*ScaleW, Prev}
+ end
end,
- lists:foldl(DrawSecs, 0, lists:seq(60,0, -10)),
+ lists:foldl(DrawSecs, {0, 0}, lists:seq(Secs,0, -10)),
strokeLine(DC, GraphX0-3, GraphY25, GraphX1, GraphY25),
strokeLine(DC, GraphX0-3, GraphY50, GraphX1, GraphY50),
@@ -526,7 +690,7 @@ draw_borders(Type, Info, DC, {W,H}, {Max, Unit, MaxUnit},
{GraphX1, GraphY1+1}, {GraphX1, GraphY0-1},
{GraphX0, GraphY0-1}])
end,
- {GraphX0+1, GraphY1, ScaleW, ScaleH, DrawBorder}.
+ {GraphX0+1, GraphY1, DrawBorder}.
to_string(Atom) ->
Name = atom_to_list(Atom),
@@ -543,43 +707,44 @@ uppercase([C|Rest]) ->
calc_max(Type, Max) ->
bytes(Type, Max).
-calc_max1(Max) when Max < 10 ->
- 10;
-calc_max1(Max) ->
- case Max div 10 of
- X when X < 10 ->
- case Max rem 10 of
- 0 -> Max;
- _ ->
- (X+1)*10
- end;
- X ->
- 10*calc_max1(X)
- end.
-
-bytes(runq, Val) ->
- Upper = calc_max1(Val),
- {Upper, "", Upper};
-bytes(utilz, Val) ->
- Upper = calc_max1(Val),
- {Upper, "", Upper};
-bytes(_, B) ->
+bytes(runq, Max) ->
+ Upper = calc_max1(max_value(Max)),
+ {Max, Upper, "", Upper};
+bytes(utilz, Max) ->
+ Upper = calc_max1(max_value(Max)),
+ {Max, Upper, "", Upper};
+bytes(_, Max) ->
+ B = max_value(Max),
KB = B div 1024,
MB = KB div 1024,
GB = MB div 1024,
if
GB > 10 ->
Upper = calc_max1(GB),
- {Upper*1024*1024*1024, "(GB)", Upper};
+ {Max, Upper*1024*1024*1024, "(GB)", Upper};
MB > 10 ->
Upper = calc_max1(MB),
- {Upper*1024*1024, "(MB)", Upper};
+ {Max, Upper*1024*1024, "(MB)", Upper};
KB > 0 ->
Upper = calc_max1(KB),
- {Upper*1024, "(KB)", Upper};
+ {Max, Upper*1024, "(KB)", Upper};
true ->
Upper = calc_max1(B),
- {Upper, "(B)", Upper}
+ {Max, Upper, "(B)", Upper}
+ end.
+
+calc_max1(Max) when Max < 10 ->
+ 10;
+calc_max1(Max) ->
+ case Max div 10 of
+ X when X < 10 ->
+ case Max rem 10 of
+ 0 -> Max;
+ _ ->
+ (X+1)*10
+ end;
+ X ->
+ 10*calc_max1(X)
end.
colors() ->
@@ -592,6 +757,28 @@ colors() ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% wxDC and ?wxGC wrappers
+make_gc(Panel,UseGC) ->
+ DC = case os:type() of
+ {win32, _} ->
+ %% Ugly hack to avoid flickering on windows, works on windows only
+ %% But the other platforms are doublebuffered by default
+ DC0 = wx:typeCast(wxBufferedPaintDC:new(Panel), wxPaintDC),
+ wxDC:clear(DC0),
+ DC0;
+ _ ->
+ wxPaintDC:new(Panel)
+ end,
+ if UseGC -> {?wxGC:create(DC), DC};
+ true -> {false, DC}
+ end.
+
+destroy_gc({GC, DC}) ->
+ (GC =/= false) andalso ?wxGC:destroy(GC),
+ case DC =/= false andalso wx:getObjectType(DC) of
+ false -> ok;
+ Type -> Type:destroy(DC)
+ end.
+
haveGC() ->
try
wxGraphicsRenderer:getDefaultRenderer(),
@@ -599,44 +786,48 @@ haveGC() ->
catch _:_ -> false
end.
+getSize({_, DC}) ->
+ wxDC:getSize(DC).
+
setPen({false, DC}, Pen) ->
wxDC:setPen(DC, Pen);
-setPen({true, GC}, Pen) ->
+setPen({GC, _}, Pen) ->
?wxGC:setPen(GC, Pen).
setFont({false, DC}, Font, Color) ->
wxDC:setTextForeground(DC, Color),
wxDC:setFont(DC, Font);
-setFont({true, GC}, Font, Color) ->
+setFont({GC, _}, Font, Color) ->
?wxGC:setFont(GC, Font, Color).
setBrush({false, DC}, Brush) ->
wxDC:setBrush(DC, Brush);
-setBrush({true, GC}, Brush) ->
+setBrush({GC, _}, Brush) ->
?wxGC:setBrush(GC, Brush).
strokeLine({false, DC}, X0, Y0, X1, Y1) ->
wxDC:drawLine(DC, {round(X0), round(Y0)}, {round(X1), round(Y1)});
-strokeLine({true, GC}, X0, Y0, X1, Y1) ->
+strokeLine({GC, _}, X0, Y0, X1, Y1) ->
?wxGC:strokeLine(GC, X0, Y0, X1, Y1).
+strokeLines(_, [_]) -> ok;
strokeLines({false, DC}, Lines) ->
wxDC:drawLines(DC, [{round(X), round(Y)} || {X,Y} <- Lines]);
-strokeLines({true, GC}, Lines) ->
+strokeLines({GC, _}, Lines) ->
?wxGC:strokeLines(GC, Lines).
drawRoundedRectangle({false, DC}, X0, Y0, X1, Y1, R) ->
wxDC:drawRoundedRectangle(DC, {round(X0), round(Y0)}, {round(X1), round(Y1)}, round(R));
-drawRoundedRectangle({true, GC}, X0, Y0, X1, Y1, R) ->
+drawRoundedRectangle({GC, _}, X0, Y0, X1, Y1, R) ->
?wxGC:drawRoundedRectangle(GC, X0, Y0, X1, Y1, R).
drawText({false, DC}, Str, X, Y) ->
wxDC:drawText(DC, Str, {round(X),round(Y)});
-drawText({true, GC}, Str, X, Y) ->
+drawText({GC, _}, Str, X, Y) ->
?wxGC:drawText(GC, Str, X, Y).
getTextExtent({false, DC}, Str) ->
wxDC:getTextExtent(DC, Str);
-getTextExtent({true, GC}, Str) ->
+getTextExtent({GC, _}, Str) ->
{W,H,_,_} = ?wxGC:getTextExtent(GC, Str),
{W,H}.
diff --git a/lib/observer/src/observer_port_wx.erl b/lib/observer/src/observer_port_wx.erl
new file mode 100644
index 0000000000..3b788642cc
--- /dev/null
+++ b/lib/observer/src/observer_port_wx.erl
@@ -0,0 +1,479 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+-module(observer_port_wx).
+
+-export([start_link/2]).
+
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_sync_event/3, handle_cast/2]).
+
+-behaviour(wx_object).
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+-define(GRID, 300).
+-define(ID_REFRESH, 301).
+-define(ID_REFRESH_INTERVAL, 302).
+-define(ID_PORT_INFO, 303).
+-define(ID_PORT_INFO_SELECTED, 304).
+-define(ID_TRACE_PORTS, 305).
+-define(ID_TRACE_NAMES, 306).
+-define(ID_TRACE_NEW, 307).
+-define(ID_TRACE_ALL, 308).
+-define(ID_CLOSE_PORT, 309).
+
+-define(TRACE_PORTS_STR, "Trace selected ports").
+-define(TRACE_NAMES_STR, "Trace selected ports, "
+ "if a process have a registered name "
+ "processes with same name will be traced on all nodes").
+
+-record(port,
+ {id,
+ connected,
+ name,
+ controls,
+ slot,
+ id_str,
+ links,
+ monitors}).
+
+-record(opt, {sort_key=2,
+ sort_incr=true
+ }).
+
+-record(state,
+ {
+ parent,
+ grid,
+ panel,
+ node=node(),
+ opt=#opt{},
+ right_clicked_port,
+ ports,
+ timer,
+ open_wins=[]
+ }).
+
+start_link(Notebook, Parent) ->
+ wx_object:start_link(?MODULE, [Notebook, Parent], []).
+
+init([Notebook, Parent]) ->
+ Panel = wxPanel:new(Notebook),
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ Style = ?wxLC_REPORT bor ?wxLC_HRULES,
+ Grid = wxListCtrl:new(Panel, [{winid, ?GRID}, {style, Style}]),
+ wxSizer:add(Sizer, Grid, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 1}, {border, 5}]),
+ wxWindow:setSizer(Panel, Sizer),
+ Li = wxListItem:new(),
+ AddListEntry = fun({Name, Align, DefSize}, Col) ->
+ wxListItem:setText(Li, Name),
+ wxListItem:setAlign(Li, Align),
+ wxListCtrl:insertColumn(Grid, Col, Li),
+ wxListCtrl:setColumnWidth(Grid, Col, DefSize),
+ Col + 1
+ end,
+ ListItems = [{"Id", ?wxLIST_FORMAT_LEFT, 150},
+ {"Connected", ?wxLIST_FORMAT_LEFT, 150},
+ {"Name", ?wxLIST_FORMAT_LEFT, 150},
+ {"Controls", ?wxLIST_FORMAT_LEFT, 200},
+ {"Slot", ?wxLIST_FORMAT_RIGHT, 50}],
+ lists:foldl(AddListEntry, 0, ListItems),
+ wxListItem:destroy(Li),
+
+ wxListCtrl:connect(Grid, command_list_item_right_click),
+ wxListCtrl:connect(Grid, command_list_item_activated),
+ wxListCtrl:connect(Grid, command_list_col_click),
+ wxListCtrl:connect(Grid, size, [{skip, true}]),
+
+ wxWindow:setFocus(Grid),
+ {Panel, #state{grid=Grid, parent=Parent, panel=Panel, timer={false, 10}}}.
+
+handle_event(#wx{id=?ID_REFRESH},
+ State = #state{node=Node, grid=Grid, opt=Opt}) ->
+ Ports0 = get_ports(Node),
+ Ports = update_grid(Grid, Opt, Ports0),
+ {noreply, State#state{ports=Ports}};
+
+handle_event(#wx{obj=Obj, event=#wxClose{}}, #state{open_wins=Opened} = State) ->
+ NewOpened =
+ case lists:keytake(Obj,2,Opened) of
+ false -> Opened;
+ {value,_,Rest} -> Rest
+ end,
+ {noreply, State#state{open_wins=NewOpened}};
+
+handle_event(#wx{event=#wxList{type=command_list_col_click, col=Col}},
+ State = #state{node=Node, grid=Grid,
+ opt=Opt0=#opt{sort_key=Key, sort_incr=Bool}}) ->
+ Opt = case Col+2 of
+ Key -> Opt0#opt{sort_incr=not Bool};
+ NewKey -> Opt0#opt{sort_key=NewKey}
+ end,
+ Ports0 = get_ports(Node),
+ Ports = update_grid(Grid, Opt, Ports0),
+ wxWindow:setFocus(Grid),
+ {noreply, State#state{opt=Opt, ports=Ports}};
+
+handle_event(#wx{event=#wxSize{size={W,_}}}, State=#state{grid=Grid}) ->
+ observer_lib:set_listctrl_col_size(Grid, W),
+ {noreply, State};
+
+handle_event(#wx{event=#wxList{type=command_list_item_activated,
+ itemIndex=Index}},
+ State=#state{grid=Grid, ports=Ports, open_wins=Opened}) ->
+ Port = lists:nth(Index+1, Ports),
+ NewOpened = display_port_info(Grid, Port, Opened),
+ {noreply, State#state{open_wins=NewOpened}};
+
+handle_event(#wx{event=#wxList{type=command_list_item_right_click,
+ itemIndex=Index}},
+ State=#state{panel=Panel, ports=Ports}) ->
+ case Index of
+ -1 ->
+ {noreply, State};
+ _ ->
+ Port = lists:nth(Index+1, Ports),
+ Menu = wxMenu:new(),
+ wxMenu:append(Menu, ?ID_PORT_INFO,
+ "Port info for " ++ erlang:port_to_list(Port#port.id)),
+ wxMenu:append(Menu, ?ID_TRACE_PORTS,
+ "Trace selected ports",
+ [{help, ?TRACE_PORTS_STR}]),
+ wxMenu:append(Menu, ?ID_TRACE_NAMES,
+ "Trace selected ports by name (all nodes)",
+ [{help, ?TRACE_NAMES_STR}]),
+ wxMenu:append(Menu, ?ID_CLOSE_PORT,
+ "Close " ++ erlang:port_to_list(Port#port.id)),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ {noreply, State#state{right_clicked_port=Port}}
+ end;
+
+handle_event(#wx{id=?ID_PORT_INFO},
+ State = #state{grid=Grid, right_clicked_port=Port,
+ open_wins=Opened}) ->
+ case Port of
+ undefined ->
+ {noreply, State};
+ _ ->
+ NewOpened = display_port_info(Grid, Port, Opened),
+ {noreply, State#state{right_clicked_port=undefined,
+ open_wins=NewOpened}}
+ end;
+
+handle_event(#wx{id=?ID_PORT_INFO_SELECTED},
+ State = #state{grid=Grid, ports=Ports, open_wins=Opened}) ->
+ case get_selected_items(Grid,Ports) of
+ [] ->
+ observer_wx:create_txt_dialog(State#state.panel, "No selected ports",
+ "Port Info", ?wxICON_EXCLAMATION),
+ {noreply, State};
+ Selected ->
+ NewOpened = lists:foldl(fun(P,O) -> display_port_info(Grid, P, O) end,
+ Opened, Selected),
+ {noreply, State#state{open_wins = NewOpened}}
+ end;
+
+handle_event(#wx{id=?ID_CLOSE_PORT}, State = #state{right_clicked_port=Port}) ->
+ case Port of
+ undefined ->
+ {noreply, State};
+ _ ->
+ erlang:port_close(Port#port.id),
+ {noreply, State#state{right_clicked_port=undefined}}
+ end;
+
+handle_event(#wx{id=?ID_TRACE_PORTS}, #state{grid=Grid, ports=Ports}=State) ->
+ case get_selected_items(Grid, Ports) of
+ [] ->
+ observer_wx:create_txt_dialog(State#state.panel, "No selected ports",
+ "Tracer", ?wxICON_EXCLAMATION);
+ Selected ->
+ SelectedIds = [Port#port.id || Port <- Selected],
+ observer_trace_wx:add_ports(SelectedIds)
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?ID_TRACE_NAMES}, #state{grid=Grid, ports=Ports}=State) ->
+ case get_selected_items(Grid, Ports) of
+ [] ->
+ observer_wx:create_txt_dialog(State#state.panel, "No selected ports",
+ "Tracer", ?wxICON_EXCLAMATION);
+ Selected ->
+ IdsOrRegs =
+ [case Port#port.name of
+ [] -> Port#port.id;
+ Name -> Name
+ end || Port <- Selected],
+ observer_trace_wx:add_ports(IdsOrRegs)
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?ID_TRACE_NEW, event=#wxCommand{type=command_menu_selected}}, State) ->
+ observer_trace_wx:add_ports([new_ports]),
+ {noreply, State};
+
+handle_event(#wx{id=?ID_REFRESH_INTERVAL},
+ State = #state{grid=Grid, timer=Timer0}) ->
+ Timer = observer_lib:interval_dialog(Grid, Timer0, 10, 5*60),
+ {noreply, State#state{timer=Timer}};
+
+handle_event(#wx{event=#wxMouse{type=left_down}, userData=TargetPid}, State) ->
+ observer ! {open_link, TargetPid},
+ {noreply, State};
+
+handle_event(#wx{obj=Obj, event=#wxMouse{type=enter_window}}, State) ->
+ wxTextCtrl:setForegroundColour(Obj,{0,0,100,255}),
+ {noreply, State};
+
+handle_event(#wx{obj=Obj, event=#wxMouse{type=leave_window}}, State) ->
+ wxTextCtrl:setForegroundColour(Obj,?wxBLUE),
+ {noreply, State};
+
+handle_event(Event, _State) ->
+ error({unhandled_event, Event}).
+
+handle_sync_event(_Event, _Obj, _State) ->
+ ok.
+
+handle_call(Event, From, _State) ->
+ error({unhandled_call, Event, From}).
+
+handle_cast(Event, _State) ->
+ error({unhandled_cast, Event}).
+
+handle_info({portinfo_open, PortIdStr},
+ State = #state{grid=Grid, ports=Ports, open_wins=Opened}) ->
+ Port = lists:keyfind(PortIdStr,#port.id_str,Ports),
+ NewOpened = display_port_info(Grid, Port, Opened),
+ {noreply, State#state{open_wins = NewOpened}};
+
+handle_info(refresh_interval, State = #state{node=Node, grid=Grid, opt=Opt,
+ ports=OldPorts}) ->
+ case get_ports(Node) of
+ OldPorts ->
+ %% no change
+ {noreply, State};
+ Ports0 ->
+ Ports = update_grid(Grid, Opt, Ports0),
+ {noreply, State#state{ports=Ports}}
+ end;
+
+handle_info({active, Node}, State = #state{parent=Parent, grid=Grid, opt=Opt,
+ timer=Timer0}) ->
+ Ports0 = get_ports(Node),
+ Ports = update_grid(Grid, Opt, Ports0),
+ wxWindow:setFocus(Grid),
+ create_menus(Parent),
+ Timer = observer_lib:start_timer(Timer0),
+ {noreply, State#state{node=Node, ports=Ports, timer=Timer}};
+
+handle_info(not_active, State = #state{timer = Timer0}) ->
+ Timer = observer_lib:stop_timer(Timer0),
+ {noreply, State#state{timer=Timer}};
+
+handle_info({error, Error}, State) ->
+ handle_error(Error),
+ {noreply, State};
+
+handle_info(_Event, State) ->
+ {noreply, State}.
+
+terminate(_Event, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ State.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+create_menus(Parent) ->
+ MenuEntries =
+ [{"View",
+ [#create_menu{id = ?ID_PORT_INFO_SELECTED,
+ text = "Port info for selected ports\tCtrl-I"},
+ separator,
+ #create_menu{id = ?ID_REFRESH, text = "Refresh\tCtrl-R"},
+ #create_menu{id = ?ID_REFRESH_INTERVAL, text = "Refresh Interval..."}
+ ]},
+ {"Trace",
+ [#create_menu{id=?ID_TRACE_PORTS, text="Trace selected ports"},
+ #create_menu{id=?ID_TRACE_NAMES, text="Trace selected ports by name (all nodes)"},
+ #create_menu{id=?ID_TRACE_NEW, text="Trace new ports"}
+ ]}
+ ],
+ observer_wx:create_menus(Parent, MenuEntries).
+
+get_ports(Node) ->
+ case get_ports2(Node) of
+ Error = {error, _} ->
+ self() ! Error,
+ [];
+ Res ->
+ Res
+ end.
+get_ports2(Node) ->
+ case rpc:call(Node, observer_backend, get_port_list, []) of
+ {badrpc, Error} ->
+ {error, Error};
+ Error = {error, _} ->
+ Error;
+ Result ->
+ [list_to_portrec(Port) || Port <- Result]
+ end.
+
+list_to_portrec(PL) ->
+ %% PortInfo:
+ %% {registered_name, RegisteredName :: atom()} |
+ %% {id, Index :: integer() >= 0} |
+ %% {connected, Pid :: pid()} |
+ %% {links, Pids :: [pid()]} |
+ %% {name, String :: string()} |
+ %% {input, Bytes :: integer() >= 0} |
+ %% {output, Bytes :: integer() >= 0} |
+ %% {os_pid, OsPid :: integer() >= 0 | undefined},
+ PortId = proplists:get_value(port_id, PL),
+ #port{id = PortId,
+ id_str = erlang:port_to_list(PortId),
+ slot = proplists:get_value(id, PL),
+ connected = proplists:get_value(connected, PL),
+ links = proplists:get_value(links, PL, []),
+ name = proplists:get_value(registered_name, PL, []),
+ monitors = proplists:get_value(monitors, PL, []),
+ controls = proplists:get_value(name, PL)}.
+
+portrec_to_list(#port{id = Id,
+ slot = Slot,
+ connected = Connected,
+ links = Links,
+ name = Name,
+ monitors = Monitors,
+ controls = Controls}) ->
+ [{id,Id},
+ {slot,Slot},
+ {connected,Connected},
+ {links,Links},
+ {name,Name},
+ {monitors,Monitors},
+ {controls,Controls}].
+
+display_port_info(Parent, PortRec, Opened) ->
+ PortIdStr = PortRec#port.id_str,
+ case lists:keyfind(PortIdStr,1,Opened) of
+ false ->
+ Frame = do_display_port_info(Parent, PortRec),
+ [{PortIdStr,Frame}|Opened];
+ {_,Win} ->
+ wxFrame:raise(Win),
+ Opened
+ end.
+
+do_display_port_info(Parent0, PortRec) ->
+ Parent = observer_lib:get_wx_parent(Parent0),
+ Title = "Port Info: " ++ PortRec#port.id_str,
+ Frame = wxMiniFrame:new(Parent, ?wxID_ANY, Title,
+ [{style, ?wxSYSTEM_MENU bor ?wxCAPTION
+ bor ?wxCLOSE_BOX bor ?wxRESIZE_BORDER}]),
+
+ Port = portrec_to_list(PortRec),
+ Fields0 = port_info_fields(Port),
+ {_FPanel, _Sizer, _UpFields} = observer_lib:display_info(Frame, Fields0),
+ wxFrame:center(Frame),
+ wxFrame:connect(Frame, close_window, [{skip, true}]),
+ wxFrame:show(Frame),
+ Frame.
+
+
+port_info_fields(Port) ->
+ Struct =
+ [{"Overview",
+ [{"Name", name},
+ {"Connected", {click,connected}},
+ {"Slot", slot},
+ {"Controls", controls}]},
+ {scroll_boxes,
+ [{"Links",1,{click,links}},
+ {"Monitors",1,{click,filter_monitor_info()}}]}],
+ observer_lib:fill_info(Struct, Port).
+
+filter_monitor_info() ->
+ fun(Data) ->
+ Ms = proplists:get_value(monitors, Data),
+ [Pid || {process, Pid} <- Ms]
+ end.
+
+
+handle_error(Foo) ->
+ Str = io_lib:format("ERROR: ~s~n",[Foo]),
+ observer_lib:display_info_dialog(Str).
+
+update_grid(Grid, Opt, Ports) ->
+ wx:batch(fun() -> update_grid2(Grid, Opt, Ports) end).
+update_grid2(Grid, #opt{sort_key=Sort,sort_incr=Dir}, Ports) ->
+ wxListCtrl:deleteAllItems(Grid),
+ Update =
+ fun(#port{id = Id,
+ slot = Slot,
+ connected = Connected,
+ name = Name,
+ controls = Ctrl},
+ Row) ->
+ _Item = wxListCtrl:insertItem(Grid, Row, ""),
+ if (Row rem 2) =:= 0 ->
+ wxListCtrl:setItemBackgroundColour(Grid, Row, ?BG_EVEN);
+ true -> ignore
+ end,
+
+ lists:foreach(fun({Col, Val}) ->
+ wxListCtrl:setItem(Grid, Row, Col,
+ observer_lib:to_str(Val))
+ end,
+ [{0,Id},{1,Connected},{2,Name},{3,Ctrl},{4,Slot}]),
+ Row + 1
+ end,
+ PortInfo = case Dir of
+ false -> lists:reverse(lists:keysort(Sort, Ports));
+ true -> lists:keysort(Sort, Ports)
+ end,
+ lists:foldl(Update, 0, PortInfo),
+ PortInfo.
+
+
+get_selected_items(Grid, Data) ->
+ get_indecies(get_selected_items(Grid, -1, []), Data).
+get_selected_items(Grid, Index, ItemAcc) ->
+ Item = wxListCtrl:getNextItem(Grid, Index, [{geometry, ?wxLIST_NEXT_ALL},
+ {state, ?wxLIST_STATE_SELECTED}]),
+ case Item of
+ -1 ->
+ lists:reverse(ItemAcc);
+ _ ->
+ get_selected_items(Grid, Item, [Item | ItemAcc])
+ end.
+
+get_indecies(Items, Data) ->
+ get_indecies(Items, 0, Data).
+get_indecies([I|Rest], I, [H|T]) ->
+ [H|get_indecies(Rest, I+1, T)];
+get_indecies(Rest = [_|_], I, [_|T]) ->
+ get_indecies(Rest, I+1, T);
+get_indecies(_, _, _) ->
+ [].
diff --git a/lib/observer/src/observer_pro_wx.erl b/lib/observer/src/observer_pro_wx.erl
index dd3441e482..ee6829b847 100644
--- a/lib/observer/src/observer_pro_wx.erl
+++ b/lib/observer/src/observer_pro_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -83,6 +83,7 @@
timer,
procinfo_menu_pids=[],
sel={[], []},
+ right_clicked_pid,
holder}).
start_link(Notebook, Parent) ->
@@ -303,13 +304,14 @@ handle_event(#wx{id=?ID_REFRESH_INTERVAL},
Timer = observer_lib:interval_dialog(Panel, Timer0, 1, 5*60),
{noreply, State#state{timer=Timer}};
-handle_event(#wx{id=?ID_KILL}, #state{sel={[_|Ids], [ToKill|Pids]}}=State) ->
- exit(ToKill, kill),
- {noreply, State#state{sel={Ids,Pids}}};
+handle_event(#wx{id=?ID_KILL}, #state{right_clicked_pid=Pid, sel=Sel0}=State) ->
+ exit(Pid, kill),
+ Sel = rm_selected(Pid,Sel0),
+ {noreply, State#state{sel=Sel}};
handle_event(#wx{id=?ID_PROC},
- #state{panel=Panel, sel={_, [Pid|_]},procinfo_menu_pids=Opened}=State) ->
+ #state{panel=Panel, right_clicked_pid=Pid, procinfo_menu_pids=Opened}=State) ->
Opened2 = start_procinfo(Pid, Panel, Opened),
{noreply, State#state{procinfo_menu_pids=Opened2}};
@@ -319,7 +321,7 @@ handle_event(#wx{id=?ID_TRACE_PIDS}, #state{sel={_, Pids}, panel=Panel}=State)
observer_wx:create_txt_dialog(Panel, "No selected processes", "Tracer", ?wxICON_EXCLAMATION),
{noreply, State};
Pids ->
- observer_trace_wx:add_processes(observer_wx:get_tracer(), Pids),
+ observer_trace_wx:add_processes(Pids),
{noreply, State}
end;
@@ -330,12 +332,12 @@ handle_event(#wx{id=?ID_TRACE_NAMES}, #state{sel={SelIds,_Pids}, holder=Holder,
{noreply, State};
_ ->
PidsOrReg = call(Holder, {get_name_or_pid, self(), SelIds}),
- observer_trace_wx:add_processes(observer_wx:get_tracer(), PidsOrReg),
+ observer_trace_wx:add_processes(PidsOrReg),
{noreply, State}
end;
handle_event(#wx{id=?ID_TRACE_NEW, event=#wxCommand{type=command_menu_selected}}, State) ->
- observer_trace_wx:add_processes(observer_wx:get_tracer(), [new]),
+ observer_trace_wx:add_processes([new_processes]),
{noreply, State};
handle_event(#wx{event=#wxSize{size={W,_}}},
@@ -347,20 +349,26 @@ handle_event(#wx{event=#wxList{type=command_list_item_right_click,
itemIndex=Row}},
#state{panel=Panel, holder=Holder}=State) ->
- case call(Holder, {get_row, self(), Row, pid}) of
- {error, undefined} ->
- undefined;
- {ok, _} ->
- Menu = wxMenu:new(),
- wxMenu:append(Menu, ?ID_PROC, "Process info"),
- wxMenu:append(Menu, ?ID_TRACE_PIDS, "Trace processes", [{help, ?TRACE_PIDS_STR}]),
- wxMenu:append(Menu, ?ID_TRACE_NAMES, "Trace named processes (all nodes)",
- [{help, ?TRACE_NAMES_STR}]),
- wxMenu:append(Menu, ?ID_KILL, "Kill Process"),
- wxWindow:popupMenu(Panel, Menu),
- wxMenu:destroy(Menu)
- end,
- {noreply, State};
+ Pid =
+ case call(Holder, {get_row, self(), Row, pid}) of
+ {error, undefined} ->
+ undefined;
+ {ok, P} ->
+ Menu = wxMenu:new(),
+ wxMenu:append(Menu, ?ID_PROC,
+ "Process info for " ++ pid_to_list(P)),
+ wxMenu:append(Menu, ?ID_TRACE_PIDS,
+ "Trace selected processes",
+ [{help, ?TRACE_PIDS_STR}]),
+ wxMenu:append(Menu, ?ID_TRACE_NAMES,
+ "Trace selected processes by name (all nodes)",
+ [{help, ?TRACE_NAMES_STR}]),
+ wxMenu:append(Menu, ?ID_KILL, "Kill process " ++ pid_to_list(P)),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ P
+ end,
+ {noreply, State#state{right_clicked_pid=Pid}};
handle_event(#wx{event=#wxList{type=command_list_item_focused,
itemIndex=Row}},
@@ -432,6 +440,17 @@ set_focus([Old|_], [New|_], Grid) ->
wxListCtrl:setItemState(Grid, Old, 0, ?wxLIST_STATE_FOCUSED),
wxListCtrl:setItemState(Grid, New, 16#FFFF, ?wxLIST_STATE_FOCUSED).
+rm_selected(Pid, {Ids, Pids}) ->
+ rm_selected(Pid, Ids, Pids, [], []).
+
+rm_selected(Pid, [_Id|Ids], [Pid|Pids], AccIds, AccPids) ->
+ {lists:reverse(AccIds)++Ids,lists:reverse(AccPids)++Pids};
+rm_selected(Pid, [Id|Ids], [OtherPid|Pids], AccIds, AccPids) ->
+ rm_selected(Pid, Ids, Pids, [Id|AccIds], [OtherPid|AccPids]);
+rm_selected(_, [], [], AccIds, AccPids) ->
+ {lists:reverse(AccIds), lists:reverse(AccPids)}.
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%TABLE HOLDER%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
init_table_holder(Parent, Attrs) ->
diff --git a/lib/observer/src/observer_procinfo.erl b/lib/observer/src/observer_procinfo.erl
index 871ef603db..620979dcc9 100644
--- a/lib/observer/src/observer_procinfo.erl
+++ b/lib/observer/src/observer_procinfo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -125,11 +125,11 @@ handle_event(#wx{event=#wxMouse{type=left_down}, userData=TargetPid}, State) ->
{noreply, State};
handle_event(#wx{obj=Obj, event=#wxMouse{type=enter_window}}, State) ->
- wxTextCtrl:setForegroundColour(Obj,{0,0,100,255}),
+ wxStaticText:setForegroundColour(Obj,{0,0,100,255}),
{noreply, State};
handle_event(#wx{obj=Obj, event=#wxMouse{type=leave_window}}, State) ->
- wxTextCtrl:setForegroundColour(Obj,?wxBLUE),
+ wxStaticText:setForegroundColour(Obj,?wxBLUE),
{noreply, State};
handle_event(#wx{event=#wxHtmlLink{linkInfo=#wxHtmlLinkInfo{href=Href}}},
@@ -317,7 +317,7 @@ fetch_state_info2(Pid, M) ->
of
{status, _, {module, _},
[_PDict, _SysState, _Parent, _Dbg,
- [Header,{data, First},{data, Second}]]} ->
+ [Header,{data, First},{data, Second}|_]]} ->
[{"Behaviour", B}, Header] ++ First ++ Second;
{status, _, {module, _},
[_PDict, _SysState, _Parent, _Dbg,
@@ -370,7 +370,7 @@ process_info_fields(Pid) ->
{"Priority", priority},
{"Trap Exit", trap_exit},
{"Reductions", reductions},
- {"Binary", binary},
+ {"Binary", fun(Data) -> stringify_bins(Data) end},
{"Last Calls", last_calls},
{"Catch Level", catchlevel},
{"Trace", trace},
@@ -437,6 +437,11 @@ filter_monitor_info() ->
[Pid || {process, Pid} <- Ms]
end.
+stringify_bins(Data) ->
+ Bins = proplists:get_value(binary, Data),
+ [lists:flatten(io_lib:format("<< ~s, refc ~w>>", [observer_lib:to_str({bytes,Sz}),Refc]))
+ || {_Ptr, Sz, Refc} <- Bins].
+
local_pid_str(Pid) ->
%% observer can observe remote nodes
%% There is no function to get the local
@@ -449,7 +454,6 @@ local_pid_str(Pid) ->
global_pid_node_pref(Pid) ->
%% Global PID node prefix : X of <X.Y.Z>
string:strip(string:sub_word(pid_to_list(Pid),1,$.),left,$<).
-
io_get_data(Pid) ->
Pid ! {self(), get_data_and_close},
diff --git a/lib/observer/src/observer_sys_wx.erl b/lib/observer/src/observer_sys_wx.erl
index dfd15380f2..fa824995f7 100644
--- a/lib/observer/src/observer_sys_wx.erl
+++ b/lib/observer/src/observer_sys_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -48,40 +48,51 @@ start_link(Notebook, Parent) ->
init([Notebook, Parent]) ->
SysInfo = observer_backend:sys_info(),
- {Info, Stat} = info_fields(),
+ {Sys, Mem, Cpu, Stats} = info_fields(),
Panel = wxPanel:new(Notebook),
Sizer = wxBoxSizer:new(?wxVERTICAL),
- TopSizer = wxBoxSizer:new(?wxHORIZONTAL),
- {FPanel0, _FSizer0, Fields0} =
- observer_lib:display_info(Panel, observer_lib:fill_info(Info, SysInfo)),
- {FPanel1, _FSizer1, Fields1} =
- observer_lib:display_info(Panel, observer_lib:fill_info(Stat, SysInfo)),
- wxSizer:add(TopSizer, FPanel0, [{flag, ?wxEXPAND}, {proportion, 1}]),
- wxSizer:add(TopSizer, FPanel1, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ HSizer0 = wxBoxSizer:new(?wxHORIZONTAL),
+ {FPanel0, _FSizer0, Fields0} = observer_lib:display_info(Panel, observer_lib:fill_info(Sys, SysInfo)),
+ {FPanel1, _FSizer1, Fields1} = observer_lib:display_info(Panel, observer_lib:fill_info(Mem, SysInfo)),
+ wxSizer:add(HSizer0, FPanel0, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ wxSizer:add(HSizer0, FPanel1, [{flag, ?wxEXPAND}, {proportion, 1}]),
+
+ HSizer1 = wxBoxSizer:new(?wxHORIZONTAL),
+ {FPanel2, _FSizer2, Fields2} = observer_lib:display_info(Panel, observer_lib:fill_info(Cpu, SysInfo)),
+ {FPanel3, _FSizer3, Fields3} = observer_lib:display_info(Panel, observer_lib:fill_info(Stats, SysInfo)),
+ wxSizer:add(HSizer1, FPanel2, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ wxSizer:add(HSizer1, FPanel3, [{flag, ?wxEXPAND}, {proportion, 1}]),
+
BorderFlags = ?wxLEFT bor ?wxRIGHT,
- wxSizer:add(Sizer, TopSizer, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
- {proportion, 0}, {border, 5}]),
+ wxSizer:add(Sizer, HSizer0, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
+ {proportion, 0}, {border, 5}]),
+ wxSizer:add(Sizer, HSizer1, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
+ {proportion, 0}, {border, 5}]),
wxPanel:setSizer(Panel, Sizer),
Timer = observer_lib:start_timer(10),
{Panel, #sys_wx_state{parent=Parent,
parent_notebook=Notebook,
panel=Panel, sizer=Sizer,
- timer=Timer, fields=Fields0 ++ Fields1}}.
+ timer=Timer, fields=Fields0 ++ Fields1++Fields2++Fields3}}.
create_sys_menu(Parent) ->
View = {"View", [#create_menu{id = ?ID_REFRESH, text = "Refresh\tCtrl-R"},
#create_menu{id = ?ID_REFRESH_INTERVAL, text = "Refresh interval"}]},
observer_wx:create_menus(Parent, [View]).
+update_syspage(#sys_wx_state{node = undefined}) -> ignore;
update_syspage(#sys_wx_state{node = Node, fields=Fields, sizer=Sizer}) ->
SysInfo = observer_wx:try_rpc(Node, observer_backend, sys_info, []),
- {Info, Stat} = info_fields(),
- observer_lib:update_info(Fields, observer_lib:fill_info(Info, SysInfo) ++
- observer_lib:fill_info(Stat, SysInfo)),
+ {Sys, Mem, Cpu, Stats} = info_fields(),
+ observer_lib:update_info(Fields,
+ observer_lib:fill_info(Sys, SysInfo) ++
+ observer_lib:fill_info(Mem, SysInfo) ++
+ observer_lib:fill_info(Cpu, SysInfo) ++
+ observer_lib:fill_info(Stats, SysInfo)),
wxSizer:layout(Sizer).
info_fields() ->
- Info = [{"System and Architecture",
+ Sys = [{"System and Architecture",
[{"System Version", otp_release},
{"ERTS Version", version},
{"Compiled for", system_architecture},
@@ -90,34 +101,35 @@ info_fields() ->
{"SMP Support", smp_support},
{"Thread Support", threads},
{"Async thread pool size", thread_pool_size}
- ]},
- {"CPU's and Threads",
- [{"Logical CPU's", logical_processors},
- {"Online Logical CPU's", logical_processors_online},
- {"Available Logical CPU's", logical_processors_available},
- {"Schedulers", schedulers},
- {"Online schedulers", schedulers_online},
- {"Available schedulers", schedulers_available}
- ]}
- ],
- Stat = [{"Memory Usage", right,
- [{"Total", {bytes, total}},
- {"Processes", {bytes, processes}},
- {"Atoms", {bytes, atom}},
- {"Binaries", {bytes, binary}},
- {"Code", {bytes, code}},
- {"ETS", {bytes, ets}}
- ]},
- {"Statistics", right,
- [{"Up time", {time_ms, uptime}},
- {"Max Processes", process_limit},
- {"Processes", process_count},
- {"Run Queue", run_queue},
- {"IO Input", {bytes, io_input}},
- {"IO Output", {bytes, io_output}}
- ]}
- ],
- {Info, Stat}.
+ ]}],
+
+ Cpu = [{"CPU's and Threads",
+ [{"Logical CPU's", logical_processors},
+ {"Online Logical CPU's", logical_processors_online},
+ {"Available Logical CPU's", logical_processors_available},
+ {"Schedulers", schedulers},
+ {"Online schedulers", schedulers_online},
+ {"Available schedulers", schedulers_available}
+ ]}
+ ],
+ Mem = [{"Memory Usage", right,
+ [{"Total", {bytes, total}},
+ {"Processes", {bytes, processes}},
+ {"Atoms", {bytes, atom}},
+ {"Binaries", {bytes, binary}},
+ {"Code", {bytes, code}},
+ {"ETS", {bytes, ets}}
+ ]}],
+ Stats = [{"Statistics", right,
+ [{"Up time", {time_ms, uptime}},
+ {"Max Processes", process_limit},
+ {"Processes", process_count},
+ {"Run Queue", run_queue},
+ {"IO Input", {bytes, io_input}},
+ {"IO Output", {bytes, io_output}}
+ ]}
+ ],
+ {Sys, Mem, Cpu, Stats}.
%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/observer/src/observer_trace_wx.erl b/lib/observer/src/observer_trace_wx.erl
index 11c2acb561..af90e2100c 100644
--- a/lib/observer/src/observer_trace_wx.erl
+++ b/lib/observer/src/observer_trace_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
-module(observer_trace_wx).
--export([start_link/2, add_processes/2]).
+-export([start_link/2, add_processes/1, add_ports/1]).
-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
handle_event/2, handle_cast/2]).
@@ -31,11 +31,15 @@
-define(SAVE_TRACEOPTS, 305).
-define(LOAD_TRACEOPTS, 306).
-define(TOGGLE_TRACE, 307).
--define(ADD_NEW, 308).
--define(ADD_TP, 309).
--define(TRACE_OUTPUT, 310).
--define(TRACE_DEFMS, 311).
--define(TRACE_DEFPS, 312).
+-define(ADD_NEW_PROCS, 308).
+-define(ADD_NEW_PORTS, 309).
+-define(ADD_TP, 310).
+-define(TRACE_OUTPUT, 311).
+-define(DEF_MS_FUNCS, 312).
+-define(DEF_MS_SEND, 313).
+-define(DEF_MS_RECV, 314).
+-define(DEF_PROC_OPTS, 315).
+-define(DEF_PORT_OPTS, 316).
-define(NODES_WIN, 330).
-define(ADD_NODES, 331).
@@ -45,36 +49,53 @@
-define(EDIT_PROCS, 341).
-define(REMOVE_PROCS, 342).
--define(MODULES_WIN, 350).
+-define(PORT_WIN, 350).
+-define(EDIT_PORTS, 351).
+-define(REMOVE_PORTS, 352).
--define(FUNCS_WIN, 360).
--define(EDIT_FUNCS_MS, 361).
--define(REMOVE_FUNCS_MS, 362).
+-define(MODULES_WIN, 360).
+-define(REMOVE_MOD_MS, 361).
--define(LOG_WIN, 370).
--define(LOG_SAVE, 321).
--define(LOG_CLEAR, 322).
+-define(FUNCS_WIN, 370).
+-define(EDIT_FUNCS_MS, 371).
+-define(REMOVE_FUNCS_MS, 372).
+
+-define(LOG_WIN, 380).
+-define(LOG_SAVE, 381).
+-define(LOG_CLEAR, 382).
+
+-define(NO_NODES_HELP,"Right click to add nodes").
+-define(NODES_HELP,"Select nodes to see traced processes and ports").
+-define(NO_P_HELP,"Add items from Processes/Ports tab").
+-define(P_HELP,"Select nodes to see traced processes and ports").
+-define(NO_TP_HELP,"Add trace pattern with button below").
+-define(TP_HELP,"Select module to see trace patterns").
-record(state,
{parent,
panel,
- n_view, p_view, m_view, f_view, %% The listCtrl's
+ n_view, proc_view, port_view, m_view, f_view, %% The listCtrl's
logwin, %% The latest log window
nodes = [],
toggle_button,
- tpids = [], %% #tpid
- def_trace_opts = [],
+ tpids = [], % #titem
+ tports = [], % #titem
+ def_proc_flags = [],
+ def_port_flags = [],
output = [],
tpatterns = dict:new(), % Key =:= Module::atom, Value =:= {M, F, A, MatchSpec}
match_specs = []}). % [ #match_spec{} ]
--record(tpid, {pid, opts}).
+-record(titem, {id, opts}).
start_link(Notebook, ParentPid) ->
wx_object:start_link(?MODULE, [Notebook, ParentPid], []).
-add_processes(Tracer, Pids) when is_list(Pids) ->
- wx_object:cast(Tracer, {add_processes, Pids}).
+add_processes(Pids) when is_list(Pids) ->
+ wx_object:cast(observer_wx:get_tracer(), {add_processes, Pids}).
+
+add_ports(Ports) when is_list(Ports) ->
+ wx_object:cast(observer_wx:get_tracer(), {add_ports, Ports}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -87,11 +108,13 @@ create_window(Notebook, ParentPid) ->
Sizer = wxBoxSizer:new(?wxVERTICAL),
Splitter = wxSplitterWindow:new(Panel, [{size, wxWindow:getClientSize(Panel)},
{style, ?SASH_STYLE}]),
- {NodeProcView, NodeView, ProcessView} = create_process_view(Splitter),
+ {NodeProcView, NodeView, ProcessView, PortView} =
+ create_proc_port_view(Splitter),
{MatchSpecView,ModView,FuncView} = create_matchspec_view(Splitter),
wxSplitterWindow:setSashGravity(Splitter, 0.5),
wxSplitterWindow:setMinimumPaneSize(Splitter,50),
- wxSplitterWindow:splitHorizontally(Splitter, NodeProcView, MatchSpecView),
+ wxSplitterWindow:splitHorizontally(Splitter, NodeProcView, MatchSpecView,
+ [{sashPosition,368}]),
wxSizer:add(Sizer, Splitter, [{flag, ?wxEXPAND bor ?wxALL}, {border, 5}, {proportion, 1}]),
%% Buttons
Buttons = wxBoxSizer:new(?wxHORIZONTAL),
@@ -99,7 +122,8 @@ create_window(Notebook, ParentPid) ->
wxSizer:add(Buttons, ToggleButton, [{flag, ?wxALIGN_CENTER_VERTICAL}]),
wxSizer:addSpacer(Buttons, 15),
wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_NODES, [{label, "Add Nodes"}])),
- wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_NEW, [{label, "Add 'new' Process"}])),
+ wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_NEW_PROCS, [{label, "Add 'new' Processes"}])),
+ wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_NEW_PORTS, [{label, "Add 'new' Ports"}])),
wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_TP, [{label, "Add Trace Pattern"}])),
wxMenu:connect(Panel, command_togglebutton_clicked, [{skip, true}]),
wxMenu:connect(Panel, command_button_clicked, [{skip, true}]),
@@ -107,24 +131,47 @@ create_window(Notebook, ParentPid) ->
{border, 5}, {proportion,0}]),
wxWindow:setSizer(Panel, Sizer),
{Panel, #state{parent=ParentPid, panel=Panel,
- n_view=NodeView, p_view=ProcessView, m_view=ModView, f_view=FuncView,
+ n_view=NodeView, proc_view=ProcessView, port_view=PortView,
+ m_view=ModView, f_view=FuncView,
toggle_button = ToggleButton,
match_specs=default_matchspecs()}}.
default_matchspecs() ->
- Ms = [{"Return Trace", [{'_', [], [{return_trace}]}], "fun(_) -> return_trace() end"},
- {"Exception Trace", [{'_', [], [{exception_trace}]}], "fun(_) -> exception_trace() end"},
- {"Message Caller", [{'_', [], [{message,{caller}}]}], "fun(_) -> message(caller()) end"},
- {"Message Dump", [{'_', [], [{message,{process_dump}}]}], "fun(_) -> message(process_dump()) end"}],
+ [{Key,default_matchspecs(Key)} || Key <- [funcs,send,'receive']].
+default_matchspecs(Key) ->
+ Ms = get_default_matchspecs(Key),
[make_ms(Name,Term,FunStr) || {Name,Term,FunStr} <- Ms].
-create_process_view(Parent) ->
+get_default_matchspecs(funcs) ->
+ [{"Return Trace", [{'_', [], [{return_trace}]}],
+ "fun(_) -> return_trace() end"},
+ {"Exception Trace", [{'_', [], [{exception_trace}]}],
+ "fun(_) -> exception_trace() end"},
+ {"Message Caller", [{'_', [], [{message,{caller}}]}],
+ "fun(_) -> message(caller()) end"},
+ {"Message Dump", [{'_', [], [{message,{process_dump}}]}],
+ "fun(_) -> message(process_dump()) end"}];
+get_default_matchspecs(send) ->
+ [{"To local node", [{['$1','_'], [{'==',{node,'$1'},{node}}], []}],
+ "fun([Pid,_]) when node(Pid)==node() ->\n true\nend"},
+ {"To remote node", [{['$1','_'], [{'=/=',{node,'$1'},{node}}], []}],
+ "fun([Pid,_]) when node(Pid)=/=node() ->\n true\nend"}];
+get_default_matchspecs('receive') ->
+ [{"From local node", [{['$1','_','_'], [{'==','$1',{node}}], []}],
+ "fun([Node,_,_]) when Node==node() ->\n true\nend"},
+ {"From remote node", [{['$1','_','_'], [{'=/=','$1',{node}}], []}],
+ "fun([Node,_,_]) when Node=/=node() ->\n true\nend"}].
+
+
+create_proc_port_view(Parent) ->
Panel = wxPanel:new(Parent),
MainSz = wxBoxSizer:new(?wxHORIZONTAL),
Style = ?wxLC_REPORT bor ?wxLC_HRULES,
Splitter = wxSplitterWindow:new(Panel, [{style, ?SASH_STYLE}]),
Nodes = wxListCtrl:new(Splitter, [{winid, ?NODES_WIN}, {style, Style}]),
- Procs = wxListCtrl:new(Splitter, [{winid, ?PROC_WIN}, {style, Style}]),
+ ProcsPortsSplitter = wxSplitterWindow:new(Splitter, [{style, ?SASH_STYLE}]),
+ Procs = wxListCtrl:new(ProcsPortsSplitter, [{winid,?PROC_WIN},{style,Style}]),
+ Ports = wxListCtrl:new(ProcsPortsSplitter, [{winid,?PORT_WIN},{style,Style}]),
Li = wxListItem:new(),
wxListItem:setText(Li, "Nodes"),
wxListCtrl:insertColumn(Nodes, 0, Li),
@@ -136,31 +183,57 @@ create_process_view(Parent) ->
wxListCtrl:setColumnWidth(Procs, Col, DefSize),
Col + 1
end,
- ListItems = [{"Process Id", ?wxLIST_FORMAT_CENTER, 120},
- {"Trace Options", ?wxLIST_FORMAT_LEFT, 300}],
- lists:foldl(AddProc, 0, ListItems),
+ ProcListItems = [{"Process Id", ?wxLIST_FORMAT_CENTER, 120},
+ {"Trace Options", ?wxLIST_FORMAT_LEFT, 300}],
+ lists:foldl(AddProc, 0, ProcListItems),
+
+ AddPort = fun({Name, Align, DefSize}, Col) ->
+ wxListItem:setText(Li, Name),
+ wxListItem:setAlign(Li, Align),
+ wxListCtrl:insertColumn(Ports, Col, Li),
+ wxListCtrl:setColumnWidth(Ports, Col, DefSize),
+ Col + 1
+ end,
+ PortListItems = [{"Port Id", ?wxLIST_FORMAT_CENTER, 120},
+ {"Trace Options", ?wxLIST_FORMAT_LEFT, 300}],
+ lists:foldl(AddPort, 0, PortListItems),
+
wxListItem:destroy(Li),
wxSplitterWindow:setSashGravity(Splitter, 0.0),
wxSplitterWindow:setMinimumPaneSize(Splitter,50),
- wxSplitterWindow:splitVertically(Splitter, Nodes, Procs, [{sashPosition, 155}]),
+ wxSplitterWindow:splitVertically(Splitter, Nodes, ProcsPortsSplitter,
+ [{sashPosition, 155}]),
wxSizer:add(MainSz, Splitter, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ wxSplitterWindow:setSashGravity(ProcsPortsSplitter, 0.5),
+ wxSplitterWindow:setMinimumPaneSize(ProcsPortsSplitter,50),
+ wxSplitterWindow:splitHorizontally(ProcsPortsSplitter, Procs, Ports,
+ [{sashPosition, 182}]),
+
wxListCtrl:connect(Procs, command_list_item_right_click),
+ wxListCtrl:connect(Ports, command_list_item_right_click),
wxListCtrl:connect(Nodes, command_list_item_right_click),
+ wxListCtrl:connect(Nodes, command_list_item_selected),
wxListCtrl:connect(Procs, size, [{skip, true}]),
+ wxListCtrl:connect(Ports, size, [{skip, true}]),
wxListCtrl:connect(Nodes, size, [{skip, true}]),
+ wxListCtrl:setToolTip(Nodes, ?NO_NODES_HELP),
+ wxListCtrl:setToolTip(Procs, ?NO_P_HELP),
+ wxListCtrl:setToolTip(Ports, ?NO_P_HELP),
+
wxPanel:setSizer(Panel, MainSz),
wxWindow:setFocus(Procs),
- {Panel, Nodes, Procs}.
+ {Panel, Nodes, Procs, Ports}.
create_matchspec_view(Parent) ->
Panel = wxPanel:new(Parent),
MainSz = wxBoxSizer:new(?wxHORIZONTAL),
Style = ?wxLC_REPORT bor ?wxLC_HRULES,
Splitter = wxSplitterWindow:new(Panel, [{style, ?SASH_STYLE}]),
- Modules = wxListCtrl:new(Splitter, [{winid, ?MODULES_WIN}, {style, Style}]),
+ Modules = wxListCtrl:new(Splitter, [{winid, ?MODULES_WIN},
+ {style, Style bor ?wxLC_SINGLE_SEL}]),
Funcs = wxListCtrl:new(Splitter, [{winid, ?FUNCS_WIN}, {style, Style}]),
Li = wxListItem:new(),
@@ -182,7 +255,9 @@ create_matchspec_view(Parent) ->
wxListCtrl:connect(Modules, size, [{skip, true}]),
wxListCtrl:connect(Funcs, size, [{skip, true}]),
wxListCtrl:connect(Modules, command_list_item_selected),
+ wxListCtrl:connect(Modules, command_list_item_right_click),
wxListCtrl:connect(Funcs, command_list_item_right_click),
+ wxListCtrl:setToolTip(Panel, ?NO_TP_HELP),
wxPanel:setSizer(Panel, MainSz),
{Panel, Modules, Funcs}.
@@ -192,8 +267,11 @@ create_menues(Parent) ->
#create_menu{id = ?SAVE_TRACEOPTS, text = "Save settings"}]},
{"Options",
[#create_menu{id = ?TRACE_OUTPUT, text = "Output"},
- #create_menu{id = ?TRACE_DEFMS, text = "Match Specifications"},
- #create_menu{id = ?TRACE_DEFPS, text = "Default Process Options"}]}
+ #create_menu{id = ?DEF_MS_FUNCS, text = "Default Match Specifications for Functions"},
+ #create_menu{id = ?DEF_MS_SEND, text = "Default Match Specifications for 'send'"},
+ #create_menu{id = ?DEF_MS_RECV, text = "Default Match Specifications for 'receive'"},
+ #create_menu{id = ?DEF_PROC_OPTS, text = "Default Process Options"},
+ #create_menu{id = ?DEF_PORT_OPTS, text = "Default Port Options"}]}
],
observer_wx:create_menus(Parent, Menus).
@@ -206,11 +284,19 @@ handle_event(#wx{obj=Obj, event=#wxSize{size={W,_}}}, State) ->
end,
{noreply, State};
-handle_event(#wx{id=?ADD_NEW}, State = #state{panel=Parent, def_trace_opts=TraceOpts}) ->
+handle_event(#wx{id=?ADD_NEW_PROCS}, State = #state{panel=Parent, def_proc_flags=TraceOpts}) ->
try
Opts = observer_traceoptions_wx:process_trace(Parent, TraceOpts),
- Process = #tpid{pid=new, opts=Opts},
- {noreply, do_add_processes([Process], State#state{def_trace_opts=Opts})}
+ Process = #titem{id=new_processes, opts=Opts},
+ {noreply, do_add_processes([Process], State#state{def_proc_flags=Opts})}
+ catch cancel -> {noreply, State}
+ end;
+
+handle_event(#wx{id=?ADD_NEW_PORTS}, State = #state{panel=Parent, def_port_flags=TraceOpts}) ->
+ try
+ Opts = observer_traceoptions_wx:port_trace(Parent, TraceOpts),
+ Port = #titem{id=new_ports, opts=Opts},
+ {noreply, do_add_ports([Port], State#state{def_port_flags=Opts})}
catch cancel -> {noreply, State}
end;
@@ -233,26 +319,36 @@ handle_event(#wx{id=?MODULES_WIN, event=#wxList{type=command_list_item_selected,
update_functions_view(dict:fetch(Module, TPs), Fview),
{noreply, State};
+handle_event(#wx{id=?NODES_WIN,
+ event=#wxList{type=command_list_item_selected}},
+ State = #state{tpids=Tpids, tports=Tports, n_view=Nview,
+ proc_view=ProcView, port_view=PortView, nodes=Ns}) ->
+ Nodes = get_selected_items(Nview, Ns),
+ update_p_view(Tpids, ProcView, Nodes),
+ update_p_view(Tports, PortView, Nodes),
+ {noreply, State};
+
handle_event(#wx{event = #wxCommand{type = command_togglebutton_clicked, commandInt = 1}},
#state{panel = Panel,
nodes = Nodes,
tpids = TProcs,
+ tports = TPorts,
tpatterns = TPs0,
toggle_button = ToggleBtn,
output = Opts
} = State) ->
try
TPs = dict:to_list(TPs0),
- (TProcs == []) andalso throw({error, "No processes traced"}),
+ (TProcs == []) andalso (TPorts == []) andalso throw({error, "No processes or ports traced"}),
(Nodes == []) andalso throw({error, "No nodes traced"}),
- HaveCallTrace = fun(#tpid{opts=Os}) -> lists:member(functions,Os) end,
+ HaveCallTrace = fun(#titem{opts=Os}) -> lists:member(functions,Os) end,
WStr = "Call trace actived but no trace patterns used",
(TPs == []) andalso lists:any(HaveCallTrace, TProcs) andalso
observer_wx:create_txt_dialog(Panel, WStr, "Warning", ?wxICON_WARNING),
{TTB, LogWin} = ttb_output_args(Panel, Opts),
{ok, _} = ttb:tracer(Nodes, TTB),
- setup_ttb(TPs, TProcs),
+ setup_ttb(TPs, TProcs, TPorts),
wxToggleButton:setLabel(ToggleBtn, "Stop Trace"),
{noreply, State#state{logwin=LogWin}}
catch {error, Msg} ->
@@ -302,7 +398,8 @@ handle_event(#wx{id=?LOG_SAVE, userData=TCtrl}, #state{panel=Panel} = State) ->
handle_event(#wx{id = ?SAVE_TRACEOPTS},
#state{panel = Panel,
- def_trace_opts = TraceOpts,
+ def_proc_flags = ProcFlags,
+ def_port_flags = PortFlags,
match_specs = MatchSpecs,
tpatterns = TracePatterns,
output = Output
@@ -312,7 +409,7 @@ handle_event(#wx{id = ?SAVE_TRACEOPTS},
?wxID_OK ->
Path = wxFileDialog:getPath(Dialog),
write_file(Panel, Path,
- TraceOpts, MatchSpecs, Output,
+ ProcFlags, PortFlags, MatchSpecs, Output,
dict:to_list(TracePatterns)
);
_ ->
@@ -333,52 +430,159 @@ handle_event(#wx{id = ?LOAD_TRACEOPTS}, #state{panel = Panel} = State) ->
wxDialog:destroy(Dialog),
{noreply, State2};
-handle_event(#wx{id=Type, event=#wxList{type=command_list_item_right_click}},
- State = #state{panel=Panel}) ->
- Menus = case Type of
- ?PROC_WIN ->
- [{?EDIT_PROCS, "Edit process options"},
- {?REMOVE_PROCS, "Remove processes"}];
- ?FUNCS_WIN ->
- [{?EDIT_FUNCS_MS, "Edit matchspecs"},
- {?REMOVE_FUNCS_MS, "Remove trace patterns"}];
- ?NODES_WIN ->
- [{?ADD_NODES, "Trace other nodes"},
- {?REMOVE_NODES, "Remove nodes"}]
- end,
- Menu = wxMenu:new(),
- [wxMenu:append(Menu,Id,Str) || {Id,Str} <- Menus],
- wxWindow:popupMenu(Panel, Menu),
- wxMenu:destroy(Menu),
+handle_event(#wx{id=?PROC_WIN, event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, proc_view=LCtrl, tpids=Tpids,
+ n_view=Nview, nodes=Nodes}) ->
+ case get_visible_ps(Tpids, Nodes, Nview) of
+ [] ->
+ ok;
+ Visible ->
+ case get_selected_items(LCtrl, Visible) of
+ [] ->
+ ok;
+ _ ->
+ create_right_click_menu(
+ Panel,
+ [{?EDIT_PROCS, "Edit process options"},
+ {?REMOVE_PROCS, "Remove processes"}])
+ end
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?PORT_WIN, event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, port_view=LCtrl, tports=Tports,
+ n_view=Nview, nodes=Nodes}) ->
+ case get_visible_ps(Tports, Nodes, Nview) of
+ [] ->
+ ok;
+ Visible ->
+ case get_selected_items(LCtrl, Visible) of
+ [] ->
+ ok;
+ _ ->
+ create_right_click_menu(
+ Panel,
+ [{?EDIT_PORTS, "Edit port options"},
+ {?REMOVE_PORTS, "Remove ports"}])
+ end
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?MODULES_WIN,event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, m_view=Mview, tpatterns=TPs}) ->
+ case get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs))) of
+ [] ->
+ ok;
+ _ ->
+ create_right_click_menu(
+ Panel,
+ [{?REMOVE_MOD_MS, "Remove trace patterns"}])
+ end,
+ {noreply,State};
+
+handle_event(#wx{id=?FUNCS_WIN,event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, m_view=Mview, f_view=Fview,
+ tpatterns=TPs}) ->
+ case get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs))) of
+ [] ->
+ ok;
+ [Module] ->
+ case get_selected_items(Fview, dict:fetch(Module, TPs)) of
+ [] ->
+ ok;
+ _ ->
+ create_right_click_menu(
+ Panel,
+ [{?EDIT_FUNCS_MS, "Edit matchspecs"},
+ {?REMOVE_FUNCS_MS, "Remove trace patterns"}])
+ end
+ end,
+ {noreply,State};
+
+handle_event(#wx{id=?NODES_WIN,event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, n_view=Nview, nodes=Nodes}) ->
+ Menu =
+ case get_selected_items(Nview, Nodes) of
+ [] ->
+ [{?ADD_NODES, "Add nodes"}];
+ _ ->
+ [{?ADD_NODES, "Add nodes"},
+ {?REMOVE_NODES, "Remove nodes"}]
+ end,
+ create_right_click_menu(Panel,Menu),
{noreply, State};
-handle_event(#wx{id=?EDIT_PROCS}, #state{panel=Panel, tpids=Tpids, p_view=Ps} = State) ->
+handle_event(#wx{id=?EDIT_PROCS}, #state{panel=Panel, tpids=Tpids, proc_view=Procs} = State) ->
try
- [#tpid{opts=DefOpts}|_] = Selected = get_selected_items(Ps, Tpids),
+ [#titem{opts=DefOpts}|_] = Selected = get_selected_items(Procs, Tpids),
Opts = observer_traceoptions_wx:process_trace(Panel, DefOpts),
- Changed = [Tpid#tpid{opts=Opts} || Tpid <- Selected],
- {noreply, do_add_processes(Changed, State#state{def_trace_opts=Opts})}
+ Changed = [Tpid#titem{opts=Opts} || Tpid <- Selected],
+ {noreply, do_add_processes(Changed, State#state{def_proc_flags=Opts})}
catch _:_ ->
{noreply, State}
end;
-handle_event(#wx{id=?REMOVE_PROCS}, #state{tpids=Tpids, p_view=LCtrl} = State) ->
+handle_event(#wx{id=?REMOVE_PROCS},
+ #state{tpids=Tpids, proc_view=LCtrl,
+ n_view=Nview, nodes=Nodes} = State) ->
Selected = get_selected_items(LCtrl, Tpids),
Pids = Tpids -- Selected,
- update_process_view(Pids, LCtrl),
+ update_p_view(Pids, LCtrl, Nodes, Nview),
{noreply, State#state{tpids=Pids}};
-handle_event(#wx{id=?TRACE_DEFPS}, #state{panel=Panel, def_trace_opts=PO} = State) ->
+handle_event(#wx{id=?EDIT_PORTS}, #state{panel=Panel, tports=Tports, port_view=Ports} = State) ->
+ try
+ [#titem{opts=DefOpts}|_] = Selected = get_selected_items(Ports, Tports),
+ Opts = observer_traceoptions_wx:port_trace(Panel, DefOpts),
+ Changed = [Tport#titem{opts=Opts} || Tport <- Selected],
+ {noreply, do_add_ports(Changed, State#state{def_port_flags=Opts})}
+ catch _:_ ->
+ {noreply, State}
+ end;
+
+handle_event(#wx{id=?REMOVE_PORTS},
+ #state{tports=Tports, port_view=LCtrl,
+ n_view=Nview, nodes=Nodes} = State) ->
+ Selected = get_selected_items(LCtrl, Tports),
+ Ports = Tports -- Selected,
+ update_p_view(Ports, LCtrl, Nodes, Nview),
+ {noreply, State#state{tports=Ports}};
+
+handle_event(#wx{id=?DEF_PROC_OPTS}, #state{panel=Panel, def_proc_flags=PO} = State) ->
try
Opts = observer_traceoptions_wx:process_trace(Panel, PO),
- {noreply, State#state{def_trace_opts=Opts}}
+ {noreply, State#state{def_proc_flags=Opts}}
catch _:_ ->
{noreply, State}
end;
-handle_event(#wx{id=?TRACE_DEFMS}, #state{panel=Panel, match_specs=Ms} = State) ->
+handle_event(#wx{id=?DEF_PORT_OPTS}, #state{panel=Panel, def_port_flags=PO} = State) ->
+ try
+ Opts = observer_traceoptions_wx:port_trace(Panel, PO),
+ {noreply, State#state{def_port_flags=Opts}}
+ catch _:_ ->
+ {noreply, State}
+ end;
+
+handle_event(#wx{id=?DEF_MS_FUNCS}, #state{panel=Panel, match_specs=Ms} = State) ->
try %% Return selected MS and sends new MS's to us
- observer_traceoptions_wx:select_matchspec(self(), Panel, Ms)
+ observer_traceoptions_wx:select_matchspec(self(), Panel, Ms, funcs)
+ catch _:_ ->
+ cancel
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?DEF_MS_SEND}, #state{panel=Panel, match_specs=Ms} = State) ->
+ try %% Return selected MS and sends new MS's to us
+ observer_traceoptions_wx:select_matchspec(self(), Panel, Ms, send)
+ catch _:_ ->
+ cancel
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?DEF_MS_RECV}, #state{panel=Panel, match_specs=Ms} = State) ->
+ try %% Return selected MS and sends new MS's to us
+ observer_traceoptions_wx:select_matchspec(self(), Panel, Ms, 'receive')
catch _:_ ->
cancel
end,
@@ -389,12 +593,34 @@ handle_event(#wx{id=?EDIT_FUNCS_MS}, #state{panel=Panel, tpatterns=TPs,
match_specs=Mss
} = State) ->
try
- [Module] = get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs))),
- Selected = get_selected_items(LCtrl, dict:fetch(Module, TPs)),
- Ms = observer_traceoptions_wx:select_matchspec(self(), Panel, Mss),
- Changed = [TP#tpattern{ms=Ms} || TP <- Selected],
- {noreply, do_add_patterns({Module, Changed}, State)}
- catch _:_ ->
+ case get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs))) of
+ [] ->
+ throw({error,"No module selected"});
+ [Module] ->
+ Selected = get_selected_items(LCtrl, dict:fetch(Module, TPs)),
+ Key = case Module of
+ 'Events' ->
+ SelectedEvents =
+ [Event || #tpattern{fa=Event} <- Selected],
+ E1 = hd(SelectedEvents),
+ case lists:all(fun(E) when E==E1 -> true;
+ (_) -> false
+ end,
+ SelectedEvents) of
+ true -> E1;
+ false -> throw({error,"Can not set match specs for multiple event types"})
+ end;
+ _ -> funcs
+ end,
+ Ms = observer_traceoptions_wx:select_matchspec(self(), Panel,
+ Mss, Key),
+ Changed = [TP#tpattern{ms=Ms} || TP <- Selected],
+ {noreply, do_add_patterns({Module, Changed}, State)}
+ end
+ catch {error, Msg} ->
+ observer_wx:create_txt_dialog(Panel, Msg, "Error", ?wxICON_ERROR),
+ {noreply, State};
+ cancel ->
{noreply, State}
end;
@@ -417,6 +643,16 @@ handle_event(#wx{id=?REMOVE_FUNCS_MS}, #state{tpatterns=TPs0, f_view=LCtrl, m_vi
{noreply, State#state{tpatterns=TPs}}
end;
+handle_event(#wx{id=?REMOVE_MOD_MS}, #state{tpatterns=TPs0, f_view=LCtrl, m_view=Mview} = State) ->
+ case get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs0))) of
+ [] -> {noreply, State};
+ [Module] ->
+ update_functions_view([], LCtrl),
+ TPs = dict:erase(Module, TPs0),
+ update_modules_view(lists:sort(dict:fetch_keys(TPs)), Module, Mview),
+ {noreply, State#state{tpatterns=TPs}}
+ end;
+
handle_event(#wx{id=?TRACE_OUTPUT}, #state{panel=Panel, output=Out0} = State) ->
try
Out = observer_traceoptions_wx:output(Panel, Out0),
@@ -458,11 +694,20 @@ handle_call(Msg, From, _State) ->
error({unhandled_call, Msg, From}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-handle_cast({add_processes, Pids}, State = #state{panel=Parent, def_trace_opts=TraceOpts}) ->
+handle_cast({add_processes, Pids}, State = #state{panel=Parent, def_proc_flags=TraceOpts}) ->
try
Opts = observer_traceoptions_wx:process_trace(Parent, TraceOpts),
- POpts = [#tpid{pid=Pid, opts=Opts} || Pid <- Pids],
- S = do_add_processes(POpts, State#state{def_trace_opts=Opts}),
+ POpts = [#titem{id=Pid, opts=Opts} || Pid <- Pids],
+ S = do_add_processes(POpts, State#state{def_proc_flags=Opts}),
+ {noreply, S}
+ catch cancel ->
+ {noreply, State}
+ end;
+handle_cast({add_ports, Ports}, State = #state{panel=Parent, def_port_flags=TraceOpts}) ->
+ try
+ Opts = observer_traceoptions_wx:port_trace(Parent, TraceOpts),
+ POpts = [#titem{id=Id, opts=Opts} || Id <- Ports],
+ S = do_add_ports(POpts, State#state{def_port_flags=Opts}),
{noreply, S}
catch cancel ->
{noreply, State}
@@ -510,45 +755,93 @@ do_add_patterns({Module, NewPs}, State=#state{tpatterns=TPs0, m_view=Mview, f_vi
State#state{tpatterns=TPs}
end.
-do_add_processes(POpts, S0=#state{n_view=Nview, p_view=LCtrl, tpids=OldPids, nodes=Ns0}) ->
- case merge_pids(POpts, OldPids) of
- {OldPids, [], []} ->
- S0;
- {Pids, New, _Changed} ->
- update_process_view(Pids, LCtrl),
- Ns1 = lists:usort([node(Pid) || #tpid{pid=Pid} <- New, is_pid(Pid)]),
+do_add_processes(POpts, S0=#state{n_view=Nview, proc_view=LCtrl, tpids=OldPids, nodes=OldNodes}) ->
+ CheckFun = fun(Pid) -> is_pid(Pid) end,
+ {Pids, Nodes} = do_add_pid_or_port(POpts, Nview, LCtrl,
+ OldPids, OldNodes, CheckFun),
+ S0#state{tpids=Pids, nodes=Nodes}.
+
+do_add_ports(POpts, S0=#state{n_view=Nview, port_view=LCtrl, tports=OldPorts, nodes=OldNodes}) ->
+ CheckFun = fun(Port) -> is_port(Port) end,
+ {Ports, Nodes} = do_add_pid_or_port(POpts, Nview, LCtrl,
+ OldPorts, OldNodes, CheckFun),
+ S0#state{tports=Ports, nodes=Nodes}.
+
+do_add_pid_or_port(POpts, Nview, LCtrl, OldPs, Ns0, Check) ->
+ case merge_trace_items(POpts, OldPs) of
+ {OldPs, [], []} ->
+ {OldPs,Ns0};
+ {Ps, New, _Changed} ->
+ Ns1 = lists:usort([node(Id) || #titem{id=Id} <- New, Check(Id)]),
Nodes = case ordsets:subtract(Ns1, Ns0) of
+ [] when Ns0==[] -> [observer_wx:get_active_node()];
[] -> Ns0; %% No new Nodes
- NewNs ->
- %% if dynamicly updates add trace patterns for new nodes
- All = ordsets:union(NewNs, Ns0),
- update_nodes_view(All, Nview),
- All
+ NewNs -> ordsets:union(NewNs, Ns0)
end,
- S0#state{tpids=Pids, nodes=Nodes}
+ update_nodes_view(Nodes, Nview),
+ update_p_view(Ps, LCtrl, Nodes, Nview),
+ {Ps, Nodes}
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-update_process_view(Pids, LCtrl) ->
+get_visible_ps(PidsOrPorts, [Node], _Nview) ->
+ %% If only one node, treat this as selected
+ get_visible_ps(PidsOrPorts, [Node]);
+get_visible_ps(PidsOrPorts, Nodes, Nview) ->
+ get_visible_ps(PidsOrPorts, get_selected_items(Nview, Nodes)).
+
+get_visible_ps(PidsOrPorts, Nodes) ->
+ %% Show pids/ports belonging to the selected nodes only (+ named pids/ports)
+ [P || P <- PidsOrPorts,
+ is_atom(P#titem.id) orelse
+ lists:member(node(P#titem.id),Nodes)].
+
+update_p_view(PidsOrPorts, LCtrl, Nodes, Nview) ->
+ update_p_view(get_visible_ps(PidsOrPorts, Nodes, Nview), LCtrl).
+update_p_view(PidsOrPorts, LCtrl, Nodes) ->
+ update_p_view(get_visible_ps(PidsOrPorts, Nodes), LCtrl).
+
+update_p_view(PidsOrPorts, LCtrl) ->
+ %% pid- or port-view
wxListCtrl:deleteAllItems(LCtrl),
- wx:foldl(fun(#tpid{pid=Pid, opts=Opts}, Row) ->
+ wx:foldl(fun(#titem{id=Id, opts=Opts}, Row) ->
_Item = wxListCtrl:insertItem(LCtrl, Row, ""),
?EVEN(Row) andalso
wxListCtrl:setItemBackgroundColour(LCtrl, Row, ?BG_EVEN),
- wxListCtrl:setItem(LCtrl, Row, 0, observer_lib:to_str(Pid)),
+ wxListCtrl:setItem(LCtrl, Row, 0, observer_lib:to_str(Id)),
wxListCtrl:setItem(LCtrl, Row, 1, observer_lib:to_str(Opts)),
Row+1
- end, 0, Pids).
+ end, 0, PidsOrPorts),
+ case PidsOrPorts of
+ [] ->
+ wxListCtrl:setToolTip(LCtrl,?NO_P_HELP);
+ _ ->
+ wxListCtrl:setToolTip(LCtrl,?P_HELP)
+ end.
update_nodes_view(Nodes, LCtrl) ->
+ Selected =
+ case Nodes of
+ [_] -> Nodes;
+ _ -> get_selected_items(LCtrl, Nodes)
+ end,
wxListCtrl:deleteAllItems(LCtrl),
wx:foldl(fun(Node, Row) ->
_Item = wxListCtrl:insertItem(LCtrl, Row, ""),
?EVEN(Row) andalso
wxListCtrl:setItemBackgroundColour(LCtrl, Row, ?BG_EVEN),
wxListCtrl:setItem(LCtrl, Row, 0, observer_lib:to_str(Node)),
+ lists:member(Node,Selected) andalso % keep selection
+ wxListCtrl:setItemState(LCtrl, Row, 16#FFFF,
+ ?wxLIST_STATE_SELECTED),
Row+1
- end, 0, Nodes).
+ end, 0, Nodes),
+ case Nodes of
+ [] ->
+ wxListCtrl:setToolTip(LCtrl,?NO_NODES_HELP);
+ _ ->
+ wxListCtrl:setToolTip(LCtrl,?NODES_HELP)
+ end.
update_modules_view(Mods, Module, LCtrl) ->
wxListCtrl:deleteAllItems(LCtrl),
@@ -560,33 +853,51 @@ update_modules_view(Mods, Module, LCtrl) ->
(Mod =:= Module) andalso
wxListCtrl:setItemState(LCtrl, Row, 16#FFFF, ?wxLIST_STATE_SELECTED),
Row+1
- end, 0, Mods).
+ end, 0, Mods),
+ Parent = wxListCtrl:getParent(LCtrl),
+ case Mods of
+ [] ->
+ wxListCtrl:setToolTip(Parent,?NO_TP_HELP);
+ _ ->
+ wxListCtrl:setToolTip(Parent,?TP_HELP)
+ end.
update_functions_view(Funcs, LCtrl) ->
wxListCtrl:deleteAllItems(LCtrl),
- wx:foldl(fun(#tpattern{fa=FA, ms=#match_spec{str=Ms}}, Row) ->
+ wx:foldl(fun(#tpattern{m=M, fa=FA, ms=#match_spec{str=Ms}}, Row) ->
_Item = wxListCtrl:insertItem(LCtrl, Row, ""),
?EVEN(Row) andalso wxListCtrl:setItemBackgroundColour(LCtrl, Row, ?BG_EVEN),
- wxListCtrl:setItem(LCtrl, Row, 0, observer_lib:to_str({func,FA})),
+ FuncStr =
+ case M of
+ 'Events' ->
+ observer_lib:to_str(FA);
+ _ ->
+ observer_lib:to_str({func,FA})
+ end,
+ wxListCtrl:setItem(LCtrl, Row, 0, FuncStr),
wxListCtrl:setItem(LCtrl, Row, 1, Ms),
Row+1
end, 0, Funcs).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-merge_pids([N1=#tpid{pid=new}|Ns], [N2=#tpid{pid=new}|Old]) ->
- {Pids, New, Changed} = merge_pids_1(Ns,Old),
- {[N1|Pids], New, [{N2,N2}|Changed]};
-merge_pids([N1=#tpid{pid=new}|Ns], Old) ->
- {Pids, New, Changed} = merge_pids_1(Ns,Old),
- {[N1|Pids], [N1|New], Changed};
-merge_pids(Ns, [N2=#tpid{pid=new}|Old]) ->
- {Pids, New, Changed} = merge_pids_1(Ns,Old),
- {[N2|Pids], New, Changed};
-merge_pids(New, Old) ->
- merge_pids_1(New, Old).
-
-merge_pids_1(New, Old) ->
- merge(lists:sort(New), Old, #tpid.pid, [], [], []).
+%% Trace items are processes and ports
+merge_trace_items([N1=#titem{id=NewP}|Ns], [N2=#titem{id=NewP}|Old])
+ when NewP==new_processes; NewP==new_ports ->
+ {Ids, New, Changed} = merge_trace_items_1(Ns,Old),
+ {[N1|Ids], New, [{N2,N2}|Changed]};
+merge_trace_items([N1=#titem{id=NewP}|Ns], Old)
+ when NewP==new_processes; NewP==new_ports ->
+ {Ids, New, Changed} = merge_trace_items_1(Ns,Old),
+ {[N1|Ids], [N1|New], Changed};
+merge_trace_items(Ns, [N2=#titem{id=NewP}|Old])
+ when NewP==new_processes; NewP==new_ports ->
+ {Ids, New, Changed} = merge_trace_items_1(Ns,Old),
+ {[N2|Ids], New, Changed};
+merge_trace_items(New, Old) ->
+ merge_trace_items_1(New, Old).
+
+merge_trace_items_1(New, Old) ->
+ merge(lists:sort(New), Old, #titem.id, [], [], []).
merge_patterns(New, Old) ->
merge(lists:sort(New), Old, #tpattern.fa, [], [], []).
@@ -676,10 +987,12 @@ create_logwindow(Parent, true) ->
wxFrame:show(LogWin),
{LogWin, Text}.
-setup_ttb(TPs, TPids) ->
+setup_ttb(TPs, TPids, TPorts) ->
_R1 = [setup_tps(FTP, []) || {_, FTP} <- TPs],
- _R2 = [ttb:p(Pid, dbg_flags(Flags)) || #tpid{pid=Pid, opts=Flags} <- TPids],
- [#tpid{pid=_Pid, opts=_Flags}|_] = TPids,
+ _R2 = [ttb:p(Pid, dbg_flags(proc,Flags)) ||
+ #titem{id=Pid, opts=Flags} <- TPids],
+ _R3 = [ttb:p(Port, dbg_flags(port,Flags)) ||
+ #titem{id=Port, opts=Flags} <- TPorts],
ok.
%% Sigh order is important
@@ -695,20 +1008,24 @@ setup_tps([First|Rest], Prev) ->
setup_tps([], Prev) ->
[setup_tp(TP) || TP <- lists:reverse(Prev)].
+setup_tp(#tpattern{m='Events',fa=Event, ms=#match_spec{term=Ms}}) ->
+ ttb:tpe(Event,Ms);
setup_tp(#tpattern{m=M,fa={F,A}, ms=#match_spec{term=Ms}}) ->
ttb:tpl(M,F,A,Ms).
-dbg_flags(Flags) ->
- [dbg_flag(Flag) || Flag <- Flags].
+dbg_flags(Type,Flags) ->
+ [dbg_flag(Type,Flag) || Flag <- Flags].
-dbg_flag(send) -> s;
-dbg_flag('receive') -> r;
-dbg_flag(functions) -> c;
-dbg_flag(on_spawn) -> sos;
-dbg_flag(on_link) -> sol;
-dbg_flag(on_first_spawn) -> sofs;
-dbg_flag(on_first_link) -> sofl;
-dbg_flag(events) -> p.
+dbg_flag(_,send) -> s;
+dbg_flag(_,'receive') -> r;
+dbg_flag(proc,functions) -> c;
+dbg_flag(proc,on_spawn) -> sos;
+dbg_flag(proc,on_link) -> sol;
+dbg_flag(proc,on_first_spawn) -> sofs;
+dbg_flag(proc,on_first_link) -> sofl;
+dbg_flag(proc,events) -> p;
+dbg_flag(port,events) -> ports;
+dbg_flag(_,Flag) -> Flag.
textformat(Trace) when element(1, Trace) == trace_ts, tuple_size(Trace) >= 4 ->
format_trace(Trace, tuple_size(Trace)-1, element(tuple_size(Trace),Trace));
@@ -784,23 +1101,28 @@ ftup(Trace, Index, Size) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-write_file(Frame, Filename, TraceOps, MatchSpecs, Output, TPs) ->
- FormatMS = fun(#match_spec{name=Id, term=T, func=F}) ->
- io_lib:format("[{name,\"~s\"}, {term, ~w}, {func, \"~s\"}]",
- [Id, T, F])
- end,
- FormatTP = fun({Module, FTPs}) ->
- List = format_ftp(FTPs, FormatMS),
- io_lib:format("{tp, ~w, [~s]}.~n",[Module, List])
+write_file(Frame, Filename, ProcFlags, PortFlags, MatchSpecs, Output, TPs) ->
+ MSToList = fun(#match_spec{name=Id, term=T, func=F}) ->
+ [{name,Id},{term,T},{func,F}]
end,
+ MSTermList = [{ms,Key,[MSToList(MS) || MS <- MSs]} ||
+ {Key,MSs} <- MatchSpecs],
+ TPToTuple = fun(#tpattern{fa={F,A}, ms=Ms}) ->
+ {F,A,MSToList(Ms)}
+ end,
+ ModuleTermList = [{tp, Module, [TPToTuple(FTP) || FTP <- FTPs]} ||
+ {Module,FTPs} <- TPs],
+
Str =
["%%%\n%%% This file is generated by Observer\n",
"%%%\n%%% DO NOT EDIT!\n%%%\n",
- [["{ms, ", FormatMS(Ms), "}.\n"] || Ms <- MatchSpecs],
- "{traceopts, ", io_lib:format("~w",[TraceOps]) ,"}.\n",
- "{output, ", io_lib:format("~w",[Output]) ,"}.\n",
- [FormatTP(TP) || TP <- TPs]
+ [io_lib:format("~p.~n",[MSTerm]) || MSTerm <- MSTermList],
+ io_lib:format("~p.~n",[{procflags,ProcFlags}]),
+ io_lib:format("~p.~n",[{portflags,PortFlags}]),
+ io_lib:format("~p.~n",[{output,Output}]),
+ [io_lib:format("~p.~n",[ModuleTerm]) || ModuleTerm <- ModuleTermList]
],
+
case file:write_file(Filename, list_to_binary(Str)) of
ok ->
success;
@@ -809,38 +1131,66 @@ write_file(Frame, Filename, TraceOps, MatchSpecs, Output, TPs) ->
observer_wx:create_txt_dialog(Frame, FailMsg, "Error", ?wxICON_ERROR)
end.
-format_ftp([#tpattern{fa={F,A}, ms=Ms}], FormatMS) ->
- io_lib:format("{~w, ~w, ~s}", [F,A,FormatMS(Ms)]);
-format_ftp([#tpattern{fa={F,A}, ms=Ms}|Rest], FormatMS) ->
- [io_lib:format("{~w, ~w, ~s},~n ", [F,A,FormatMS(Ms)]),
- format_ftp(Rest, FormatMS)].
-
-read_settings(Filename, #state{match_specs=Ms0, def_trace_opts=TO0} = State) ->
+read_settings(Filename, #state{match_specs=Ms0, def_proc_flags=ProcFs0, def_port_flags=PortFs0} = State) ->
case file:consult(Filename) of
{ok, Terms} ->
- Ms = lists:usort(Ms0 ++ [parse_ms(MsList) || {ms, MsList} <- Terms]),
- TOs = lists:usort(TO0 ++ proplists:get_value(traceopts, Terms, [])),
+ Ms = parse_ms(Terms, Ms0),
+ ProcFs1 = proplists:get_value(procflags, Terms, []) ++
+ proplists:get_value(traceopts, Terms, []), % for backwards comp.
+ ProcFs = lists:usort(ProcFs0 ++ ProcFs1),
+ PortFs = lists:usort(PortFs0 ++
+ proplists:get_value(portflags, Terms, [])),
Out = proplists:get_value(output, Terms, []),
lists:foldl(fun parse_tp/2,
- State#state{match_specs=Ms, def_trace_opts=TOs, output=Out},
+ State#state{match_specs=Ms, def_proc_flags=ProcFs,
+ def_port_flags=PortFs, output=Out},
Terms);
{error, _} ->
- observer_wx:create_txt_dialog(State#state.panel, "Could not load settings",
+ observer_wx:create_txt_dialog(State#state.panel,
+ "Could not load settings",
"Error", ?wxICON_ERROR),
State
end.
-parse_ms(Opts) ->
- Name = proplists:get_value(name, Opts, "TracePattern"),
- Term = proplists:get_value(term, Opts, [{'_',[],[ok]}]),
- FunStr = proplists:get_value(term, Opts, "fun(_) -> ok end"),
- make_ms(Name, Term, FunStr).
+parse_ms(Terms, OldMSs) ->
+ MSs =
+ case [{Key,[make_ms(MS) || MS <- MSs]} || {ms,Key,MSs} <- Terms] of
+ [] ->
+ case [make_ms(MS) || {ms,MS} <- Terms] of
+ [] ->
+ [];
+ FuncMSs -> % for backwards compatibility
+ [{funcs,FuncMSs}]
+ end;
+ KeyMSs ->
+ KeyMSs
+ end,
+ parse_ms_1(MSs, dict:from_list(OldMSs)).
+
+parse_ms_1([{Key,MSs} | T], Dict) ->
+ parse_ms_1(T, dict:append_list(Key,MSs,Dict));
+parse_ms_1([],Dict) ->
+ [{Key,rm_dups(MSs,[])} || {Key,MSs} <- dict:to_list(Dict)].
+
+rm_dups([H|T],Acc) ->
+ case lists:member(H,Acc) of
+ true ->
+ rm_dups(T,Acc);
+ false ->
+ rm_dups(T,[H|Acc])
+ end;
+rm_dups([],Acc) ->
+ lists:reverse(Acc).
+
+make_ms(MS) ->
+ [{func,FunStr},{name,Name},{term,Term}] = lists:keysort(1,MS),
+ make_ms(Name,Term,FunStr).
make_ms(Name, Term, FunStr) ->
#match_spec{name=Name, term=Term, str=io_lib:format("~w", Term), func = FunStr}.
parse_tp({tp, Mod, FAs}, State) ->
- Patterns = [#tpattern{m=Mod,fa={F,A}, ms=parse_ms(List)} ||
+ Patterns = [#tpattern{m=Mod,fa={F,A}, ms=make_ms(List)} ||
{F,A,List} <- FAs],
do_add_patterns({Mod, Patterns}, State);
parse_tp(_, State) ->
@@ -866,3 +1216,9 @@ get_indecies(Rest = [_|_], I, [_|T]) ->
get_indecies(Rest, I+1, T);
get_indecies(_, _, _) ->
[].
+
+create_right_click_menu(Panel,Menus) ->
+ Menu = wxMenu:new(),
+ [wxMenu:append(Menu,Id,Str) || {Id,Str} <- Menus],
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu).
diff --git a/lib/observer/src/observer_traceoptions_wx.erl b/lib/observer/src/observer_traceoptions_wx.erl
index 9ba9b72b6f..285c298c4b 100644
--- a/lib/observer/src/observer_traceoptions_wx.erl
+++ b/lib/observer/src/observer_traceoptions_wx.erl
@@ -22,8 +22,8 @@
-include_lib("wx/include/wx.hrl").
-include("observer_defs.hrl").
--export([process_trace/2, trace_pattern/4, select_nodes/2,
- output/2, select_matchspec/3]).
+-export([process_trace/2, port_trace/2, trace_pattern/4, select_nodes/2,
+ output/2, select_matchspec/4]).
process_trace(Parent, Default) ->
Dialog = wxDialog:new(Parent, ?wxID_ANY, "Process Options",
@@ -36,12 +36,20 @@ process_trace(Parent, Default) ->
FuncBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace function call", []),
check_box(FuncBox, lists:member(functions, Default)),
+ ArityBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace arity instead of arguments", []),
+ check_box(ArityBox, lists:member(functions, Default)),
SendBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace send message", []),
check_box(SendBox, lists:member(send, Default)),
RecBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace receive message", []),
check_box(RecBox, lists:member('receive', Default)),
EventBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace process events", []),
check_box(EventBox, lists:member(events, Default)),
+ SchedBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace scheduling of processes", []),
+ check_box(SchedBox, lists:member(running_procs, Default)),
+ ExitBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace scheduling of exiting processes", []),
+ check_box(ExitBox, lists:member(exiting, Default)),
+ GCBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace garbage collections", []),
+ check_box(GCBox, lists:member(garbage_collection, Default)),
{SpawnBox, SpwnAllRadio, SpwnFirstRadio} =
optionpage_top_right(Panel, RightSz, [{flag, ?wxBOTTOM},{border, 5}], "spawn"),
@@ -57,7 +65,7 @@ process_trace(Parent, Default) ->
{Radio, Opt} <- [{SpwnAllRadio, on_spawn}, {SpwnFirstRadio, on_first_spawn},
{LinkAllRadio, on_link}, {LinkFirstRadio, on_first_link}]],
- [wxSizer:add(LeftSz, CheckBox, []) || CheckBox <- [FuncBox,SendBox,RecBox,EventBox]],
+ [wxSizer:add(LeftSz, CheckBox, []) || CheckBox <- [FuncBox,ArityBox,SendBox,RecBox,EventBox,SchedBox,ExitBox,GCBox]],
wxSizer:add(LeftSz, 150, -1),
wxSizer:add(PanelSz, LeftSz, [{flag, ?wxEXPAND}, {proportion,1}]),
@@ -80,7 +88,9 @@ process_trace(Parent, Default) ->
case wxDialog:showModal(Dialog) of
?wxID_OK ->
All = [{SendBox, send}, {RecBox, 'receive'},
- {FuncBox, functions}, {EventBox, events},
+ {FuncBox, functions}, {ArityBox, arity},
+ {EventBox, events}, {SchedBox, running_procs},
+ {ExitBox, exiting}, {GCBox, garbage_collection},
{{SpawnBox, SpwnAllRadio}, on_spawn},
{{SpawnBox,SpwnFirstRadio}, on_first_spawn},
{{LinkBox, LinkAllRadio}, on_link},
@@ -98,12 +108,57 @@ process_trace(Parent, Default) ->
throw(cancel)
end.
+port_trace(Parent, Default) ->
+ Dialog = wxDialog:new(Parent, ?wxID_ANY, "Port Options",
+ [{style, ?wxDEFAULT_DIALOG_STYLE bor ?wxRESIZE_BORDER}]),
+ Panel = wxPanel:new(Dialog),
+ MainSz = wxBoxSizer:new(?wxVERTICAL),
+ OptsSz = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label, "Tracing options"}]),
+
+ SendBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace send message", []),
+ check_box(SendBox, lists:member(send, Default)),
+ RecBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace receive message", []),
+ check_box(RecBox, lists:member('receive', Default)),
+ EventBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace port events", []),
+ check_box(EventBox, lists:member(events, Default)),
+ SchedBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace scheduling of ports", []),
+ check_box(SchedBox, lists:member(running_ports, Default)),
+
+ [wxSizer:add(OptsSz, CheckBox, []) || CheckBox <- [SendBox,RecBox,EventBox,SchedBox]],
+ wxSizer:add(OptsSz, 150, -1),
+
+ wxPanel:setSizer(Panel, OptsSz),
+ wxSizer:add(MainSz, Panel, [{flag, ?wxEXPAND}, {proportion,1}]),
+ Buttons = wxDialog:createButtonSizer(Dialog, ?wxOK bor ?wxCANCEL),
+ wxSizer:add(MainSz, Buttons, [{flag, ?wxEXPAND bor ?wxALL}, {border, 5}]),
+ wxWindow:setSizerAndFit(Dialog, MainSz),
+ wxSizer:setSizeHints(MainSz, Dialog),
+
+ case wxDialog:showModal(Dialog) of
+ ?wxID_OK ->
+ All = [{SendBox, send}, {RecBox, 'receive'},
+ {EventBox, events}, {SchedBox, running_ports}],
+ Opts = [Id || {Tick, Id} <- All, wxCheckBox:getValue(Tick)],
+ wxDialog:destroy(Dialog),
+ lists:reverse(Opts);
+ ?wxID_CANCEL ->
+ wxDialog:destroy(Dialog),
+ throw(cancel)
+ end.
+
trace_pattern(ParentPid, Parent, Node, MatchSpecs) ->
try
- Module = module_selector(Parent, Node),
- MFAs = function_selector(Parent, Node, Module),
- MatchSpec = select_matchspec(ParentPid, Parent, MatchSpecs),
- {Module, [#tpattern{m=M,fa={F,A},ms=MatchSpec} || {M,F,A} <- MFAs]}
+ {Module,MFAs,MatchSpec} =
+ case module_selector(Parent, Node) of
+ {'$trace_event',Event} ->
+ MS = select_matchspec(ParentPid, Parent, MatchSpecs, Event),
+ {'Events',[{'Events',Event}],MS};
+ Mod ->
+ MFAs0 = function_selector(Parent, Node, Mod),
+ MS = select_matchspec(ParentPid, Parent, MatchSpecs, funcs),
+ {Mod,MFAs0,MS}
+ end,
+ {Module, [#tpattern{m=M,fa=FA,ms=MatchSpec} || {M,FA} <- MFAs]}
catch cancel -> cancel
end.
@@ -112,7 +167,7 @@ select_nodes(Parent, Nodes) ->
check_selector(Parent, Choices).
module_selector(Parent, Node) ->
- Dialog = wxDialog:new(Parent, ?wxID_ANY, "Select Module",
+ Dialog = wxDialog:new(Parent, ?wxID_ANY, "Select Module or Event",
[{style, ?wxDEFAULT_DIALOG_STYLE bor ?wxRESIZE_BORDER},
{size, {400, 400}}]),
Panel = wxPanel:new(Dialog),
@@ -136,7 +191,9 @@ module_selector(Parent, Node) ->
wxWindow:setFocus(TxtCtrl),
%% init data
Modules = get_modules(Node),
- AllModules = [{atom_to_list(X), X} || X <- Modules],
+ Events = [{"Messages sent",{'$trace_event',send}},
+ {"Messages received",{'$trace_event','receive'}}],
+ AllModules = Events ++ [{atom_to_list(X), X} || X <- Modules],
filter_listbox_data("", AllModules, ListBox),
wxTextCtrl:connect(TxtCtrl, command_text_updated,
[{callback, fun(#wx{event=#wxCommand{cmdString=Input}}, _) ->
@@ -174,9 +231,9 @@ function_selector(Parent, Node, Module) ->
not(erl_internal:guard_bif(Name, Arity))]),
ParsedChoices = parse_function_names(Choices),
case check_selector(Parent, ParsedChoices) of
- [] -> [{Module, '_', '_'}];
+ [] -> [{Module, {'_', '_'}}];
FAs ->
- [{Module, F, A} || {F,A} <- FAs]
+ [{Module, {F, A}} || {F,A} <- FAs]
end.
check_selector(Parent, ParsedChoices) ->
@@ -268,7 +325,12 @@ get_checked(ListBox, Acc) ->
lists:reverse(Acc)
end.
-select_matchspec(Pid, Parent, MatchSpecs) ->
+select_matchspec(Pid, Parent, AllMatchSpecs, Key) ->
+ {MatchSpecs,RestMS} =
+ case lists:keytake(Key,1,AllMatchSpecs) of
+ {value,{Key,MSs0},Rest} -> {MSs0,Rest};
+ false -> {[],AllMatchSpecs}
+ end,
Dialog = wxDialog:new(Parent, ?wxID_ANY, "Trace Match Specifications",
[{style, ?wxDEFAULT_DIALOG_STYLE bor ?wxRESIZE_BORDER},
{size, {400, 400}}]),
@@ -313,8 +375,12 @@ select_matchspec(Pid, Parent, MatchSpecs) ->
filter_listbox_data("", Choices, ListBox),
Add = fun(_,_) ->
- case edit_ms(TextCtrl, new, Parent) of
- Ms = #match_spec{} -> add_and_select(-1, Ms, ListBox);
+ case edit_ms(TextCtrl, new, Dialog) of
+ Ms = #match_spec{} ->
+ add_and_select(-1, Ms, ListBox),
+ wxWindow:enable(OkButt),
+ wxWindow:enable(EditMsBtn),
+ wxWindow:enable(DelMsBtn);
Else -> Else
end
end,
@@ -323,8 +389,12 @@ select_matchspec(Pid, Parent, MatchSpecs) ->
case SelId >= 0 of
true ->
#match_spec{name=Name} = wxListBox:getClientData(ListBox,SelId),
- case edit_ms(TextCtrl, Name, Parent) of
- Ms = #match_spec{} -> add_and_select(SelId, Ms, ListBox);
+ case edit_ms(TextCtrl, Name, Dialog) of
+ Ms = #match_spec{} ->
+ add_and_select(SelId, Ms, ListBox),
+ wxWindow:enable(OkButt),
+ wxWindow:enable(EditMsBtn),
+ wxWindow:enable(DelMsBtn);
Else -> Else
end;
false ->
@@ -367,7 +437,7 @@ select_matchspec(Pid, Parent, MatchSpecs) ->
Count = wxListBox:getCount(ListBox),
MSs = [wxListBox:getClientData(ListBox, Id) ||
Id <- lists:seq(0, Count-1)],
- Pid ! {update_ms, MSs},
+ Pid ! {update_ms, [{Key,MSs}|RestMS]},
MS = lists:nth(SelId+1, MSs),
wxDialog:destroy(Dialog),
MS;
diff --git a/lib/observer/src/observer_tv.hrl b/lib/observer/src/observer_tv.hrl
index 8d57a6fa2b..318a989750 100644
--- a/lib/observer/src/observer_tv.hrl
+++ b/lib/observer/src/observer_tv.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/src/observer_tv_wx.erl b/lib/observer/src/observer_tv_wx.erl
index de498ff442..59f6443551 100644
--- a/lib/observer/src/observer_tv_wx.erl
+++ b/lib/observer/src/observer_tv_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -37,7 +37,8 @@
-define(ID_UNREADABLE, 405).
-define(ID_SYSTEM_TABLES, 406).
-define(ID_TABLE_INFO, 407).
-
+-define(ID_SHOW_TABLE, 408).
+
-record(opt, {type=ets,
sys_hidden=true,
unread_hidden=true,
@@ -49,6 +50,7 @@
{
parent,
grid,
+ panel,
node=node(),
opt=#opt{},
selected,
@@ -86,12 +88,13 @@ init([Notebook, Parent]) ->
wxListItem:destroy(Li),
wxListCtrl:connect(Grid, command_list_item_activated),
+ wxListCtrl:connect(Grid, command_list_item_right_click),
wxListCtrl:connect(Grid, command_list_item_selected),
wxListCtrl:connect(Grid, command_list_col_click),
wxListCtrl:connect(Grid, size, [{skip, true}]),
wxWindow:setFocus(Grid),
- {Panel, #state{grid=Grid, parent=Parent, timer={false, 10}}}.
+ {Panel, #state{grid=Grid, parent=Parent, panel=Panel, timer={false, 10}}}.
handle_event(#wx{id=?ID_REFRESH},
State = #state{node=Node, grid=Grid, opt=Opt}) ->
@@ -145,6 +148,16 @@ handle_event(#wx{event=#wxList{type=command_list_item_activated,
end,
{noreply, State};
+handle_event(#wx{event=#wxList{type=command_list_item_right_click}},
+ State=#state{panel=Panel}) ->
+
+ Menu = wxMenu:new(),
+ wxMenu:append(Menu, ?ID_TABLE_INFO, "Table info"),
+ wxMenu:append(Menu, ?ID_SHOW_TABLE, "Show Table Content"),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ {noreply, State};
+
handle_event(#wx{event=#wxList{type=command_list_item_selected, itemIndex=Index}},
State) ->
{noreply, State#state{selected=Index}};
@@ -160,6 +173,22 @@ handle_event(#wx{id=?ID_TABLE_INFO},
{noreply, State}
end;
+handle_event(#wx{id=?ID_SHOW_TABLE},
+ State=#state{grid=Grid, node=Node, opt=#opt{type=Type}, tabs=Tabs, selected=Sel}) ->
+ case Sel of
+ undefined ->
+ {noreply, State};
+ R when is_integer(R) ->
+ Table = lists:nth(Sel+1, Tabs),
+ case Table#tab.protection of
+ private ->
+ self() ! {error, "Table has 'private' protection and can not be read"};
+ _ ->
+ observer_tv_table:start_link(Grid, [{node,Node}, {type,Type}, {table,Table}])
+ end,
+ {noreply, State}
+ end;
+
handle_event(#wx{id=?ID_REFRESH_INTERVAL},
State = #state{grid=Grid, timer=Timer0}) ->
Timer = observer_lib:interval_dialog(Grid, Timer0, 10, 5*60),
@@ -315,6 +344,7 @@ display_table_info(Parent0, Node, Source, Table) ->
{_, Sizer, _} = observer_lib:display_info(Frame, [IdInfo,Settings,Memory]),
wxSizer:setSizeHints(Sizer, Frame),
+ wxWindow:setMinSize(Frame, {300, -1}),
wxFrame:center(Frame),
wxFrame:show(Frame).
diff --git a/lib/observer/src/observer_wx.erl b/lib/observer/src/observer_wx.erl
index 68e814e01a..301bb4b32f 100644
--- a/lib/observer/src/observer_wx.erl
+++ b/lib/observer/src/observer_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,8 +21,8 @@
-behaviour(wx_object).
-export([start/0, stop/0]).
--export([create_menus/2, get_attrib/1, get_tracer/0, set_status/1,
- create_txt_dialog/4, try_rpc/4, return_to_localnode/2]).
+-export([create_menus/2, get_attrib/1, get_tracer/0, get_active_node/0,
+ set_status/1, create_txt_dialog/4, try_rpc/4, return_to_localnode/2]).
-export([init/1, handle_event/2, handle_cast/2, terminate/2, code_change/3,
handle_call/3, handle_info/2, check_page_title/1]).
@@ -55,6 +55,7 @@
notebook,
main_panel,
pro_panel,
+ port_panel,
tv_panel,
sys_panel,
trace_panel,
@@ -65,7 +66,8 @@
node,
nodes,
prev_node="",
- log = false
+ log = false,
+ reply_to=false
}).
start() ->
@@ -89,6 +91,9 @@ set_status(What) ->
get_tracer() ->
wx_object:call(observer, get_tracer).
+get_active_node() ->
+ wx_object:call(observer, get_active_node).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
init(_Args) ->
@@ -164,6 +169,10 @@ setup(#state{frame = Frame} = State) ->
ProPanel = observer_pro_wx:start_link(Notebook, self()),
wxNotebook:addPage(Notebook, ProPanel, "Processes", []),
+ %% Port Panel
+ PortPanel = observer_port_wx:start_link(Notebook, self()),
+ wxNotebook:addPage(Notebook, PortPanel, "Ports", []),
+
%% Table Viewer Panel
TVPanel = observer_tv_wx:start_link(Notebook, self()),
wxNotebook:addPage(Notebook, TVPanel, "Table Viewer", []),
@@ -187,6 +196,7 @@ setup(#state{frame = Frame} = State) ->
status_bar = StatusBar,
sys_panel = SysPanel,
pro_panel = ProPanel,
+ port_panel = PortPanel,
tv_panel = TVPanel,
trace_panel = TracePanel,
app_panel = AppPanel,
@@ -229,14 +239,13 @@ handle_event(#wx{id = ?ID_CDV, event = #wxCommand{type = command_menu_selected}}
spawn(crashdump_viewer, start, []),
{noreply, State};
-handle_event(#wx{event = #wxClose{}}, #state{log=LogOn} = State) ->
- LogOn andalso rpc:block_call(State#state.node, rb, stop, []),
- {stop, normal, State};
+handle_event(#wx{event = #wxClose{}}, State) ->
+ stop_servers(State),
+ {noreply, State};
-handle_event(#wx{id = ?wxID_EXIT, event = #wxCommand{type = command_menu_selected}},
- #state{log=LogOn} = State) ->
- LogOn andalso rpc:block_call(State#state.node, rb, stop, []),
- {stop, normal, State};
+handle_event(#wx{id = ?wxID_EXIT, event = #wxCommand{type = command_menu_selected}}, State) ->
+ stop_servers(State),
+ {noreply, State};
handle_event(#wx{id = ?wxID_HELP, event = #wxCommand{type = command_menu_selected}}, State) ->
External = "http://www.erlang.org/doc/apps/observer/index.html",
@@ -379,9 +388,12 @@ handle_call({get_attrib, Attrib}, _From, State) ->
handle_call(get_tracer, _From, State=#state{trace_panel=TraceP}) ->
{reply, TraceP, State};
-handle_call(stop, _, State = #state{frame = Frame}) ->
- wxFrame:destroy(Frame),
- {stop, normal, ok, State};
+handle_call(get_active_node, _From, State=#state{node=Node}) ->
+ {reply, Node, State};
+
+handle_call(stop, From, State) ->
+ stop_servers(State),
+ {noreply, State#state{reply_to=From}};
handle_call(log_status, _From, State) ->
{reply, State#state.log, State};
@@ -406,16 +418,21 @@ handle_info({nodedown, Node},
create_txt_dialog(Frame, Msg, "Node down", ?wxICON_EXCLAMATION),
{noreply, State3};
-handle_info({open_link, Pid0}, State = #state{pro_panel=ProcViewer, frame=Frame}) ->
- Pid = case Pid0 of
- [_|_] -> try list_to_pid(Pid0) catch _:_ -> Pid0 end;
- _ -> Pid0
+handle_info({open_link, Id0}, State = #state{pro_panel=ProcViewer,
+ port_panel=PortViewer,
+ frame=Frame}) ->
+ Id = case Id0 of
+ [_|_] -> try list_to_pid(Id0) catch _:_ -> Id0 end;
+ _ -> Id0
end,
%% Forward to process tab
- case is_pid(Pid) of
- true -> wx_object:get_pid(ProcViewer) ! {procinfo_open, Pid};
- false ->
- Msg = io_lib:format("Information about ~p is not available or implemented",[Pid]),
+ case Id of
+ Pid when is_pid(Pid) ->
+ wx_object:get_pid(ProcViewer) ! {procinfo_open, Pid};
+ "#Port" ++ _ = Port ->
+ wx_object:get_pid(PortViewer) ! {portinfo_open, Port};
+ _ ->
+ Msg = io_lib:format("Information about ~p is not available or implemented",[Id]),
Info = wxMessageDialog:new(Frame, Msg),
wxMessageDialog:showModal(Info),
wxMessageDialog:destroy(Info)
@@ -426,17 +443,45 @@ handle_info({get_debug_info, From}, State = #state{notebook=Notebook, active_tab
From ! {observer_debug, wx:get_env(), Notebook, Pid},
{noreply, State};
-handle_info({'EXIT', Pid, _Reason}, State) ->
- io:format("Child (~s) crashed exiting: ~p ~p~n",
- [pid2panel(Pid, State), Pid,_Reason]),
+handle_info({'EXIT', Pid, Reason}, State) ->
+ case Reason of
+ normal ->
+ {noreply, State};
+ _ ->
+ io:format("Observer: Child (~s) crashed exiting: ~p ~p~n",
+ [pid2panel(Pid, State), Pid, Reason]),
+ {stop, normal, State}
+ end;
+
+handle_info({stop, Me}, State) when Me =:= self() ->
{stop, normal, State};
handle_info(_Info, State) ->
{noreply, State}.
-terminate(_Reason, #state{frame = Frame}) ->
+stop_servers(#state{node=Node, log=LogOn, sys_panel=Sys, pro_panel=Procs, tv_panel=TVs,
+ trace_panel=Trace, app_panel=Apps, perf_panel=Perfs,
+ allc_panel=Alloc} = _State) ->
+ LogOn andalso rpc:block_call(Node, rb, stop, []),
+ Me = self(),
+ Tabs = [Sys, Procs, TVs, Trace, Apps, Perfs, Alloc],
+ Stop = fun() ->
+ try
+ _ = [wx_object:stop(Panel) || Panel <- Tabs],
+ ok
+ catch _:_ -> ok
+ end,
+ Me ! {stop, Me}
+ end,
+ spawn(Stop).
+
+terminate(_Reason, #state{frame = Frame, reply_to=From}) ->
wxFrame:destroy(Frame),
wx:destroy(),
+ case From of
+ false -> ignore;
+ _ -> gen_server:reply(From, ok)
+ end,
ok.
code_change(_, _, State) ->
@@ -513,10 +558,11 @@ check_page_title(Notebook) ->
get_active_pid(#state{notebook=Notebook, pro_panel=Pro, sys_panel=Sys,
tv_panel=Tv, trace_panel=Trace, app_panel=App,
- perf_panel=Perf, allc_panel=Alloc
+ perf_panel=Perf, allc_panel=Alloc, port_panel=Port
}) ->
Panel = case check_page_title(Notebook) of
"Processes" -> Pro;
+ "Ports" -> Port;
"System" -> Sys;
"Table Viewer" -> Tv;
?TRACE_STR -> Trace;
diff --git a/lib/observer/src/ttb.erl b/lib/observer/src/ttb.erl
index 3cba3b97b0..ac6c4572eb 100644
--- a/lib/observer/src/ttb.erl
+++ b/lib/observer/src/ttb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,7 +25,8 @@
-export([tracer/0,tracer/1,tracer/2,p/2,stop/0,stop/1,start_trace/4]).
-export([get_et_handler/0]).
-export([tp/2, tp/3, tp/4, ctp/0, ctp/1, ctp/2, ctp/3, tpl/2, tpl/3, tpl/4,
- ctpl/0, ctpl/1, ctpl/2, ctpl/3, ctpg/0, ctpg/1, ctpg/2, ctpg/3]).
+ ctpl/0, ctpl/1, ctpl/2, ctpl/3, ctpg/0, ctpg/1, ctpg/2, ctpg/3,
+ tpe/2, ctpe/1]).
-export([seq_trigger_ms/0,seq_trigger_ms/1]).
-export([write_trace_info/2]).
-export([write_config/2,write_config/3,run_config/1,run_config/2,list_config/1]).
@@ -397,16 +398,16 @@ arg_list([A1|A],Acc) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Set trace flags on processes
-p(Procs0,Flags0) ->
+p(ProcsPorts0,Flags0) ->
ensure_no_overloaded_nodes(),
- store(p,[Procs0,Flags0]),
- no_store_p(Procs0,Flags0).
-no_store_p(Procs0,Flags0) ->
+ store(p,[ProcsPorts0,Flags0]),
+ no_store_p(ProcsPorts0,Flags0).
+no_store_p(ProcsPorts0,Flags0) ->
case transform_flags(to_list(Flags0)) of
{error,Reason} ->
{error,Reason};
Flags ->
- Procs = procs(Procs0),
+ ProcsPorts = procs_ports(ProcsPorts0),
case lists:foldl(fun(P,{PMatched,Ps}) -> case dbg:p(P,Flags) of
{ok,Matched} ->
{[{P,Matched}|PMatched],[P|Ps]};
@@ -414,7 +415,7 @@ no_store_p(Procs0,Flags0) ->
display_warning(P,Reason),
{PMatched,Ps}
end
- end,{[],[]},Procs) of
+ end,{[],[]},ProcsPorts) of
{[],[]} -> {error, no_match};
{SuccMatched,Succ} ->
no_store_write_trace_info(flags,{Succ,Flags}),
@@ -429,18 +430,22 @@ transform_flags(Flags) ->
dbg:transform_flags([timestamp | Flags]).
-procs(Procs) when is_list(Procs) ->
- lists:foldl(fun(P,Acc) -> proc(P)++Acc end,[],Procs);
-procs(Proc) ->
- proc(Proc).
+procs_ports(Procs) when is_list(Procs) ->
+ lists:foldl(fun(P,Acc) -> proc_port(P)++Acc end,[],Procs);
+procs_ports(Proc) ->
+ proc_port(Proc).
-proc(Procs) when Procs=:=all; Procs=:=existing; Procs=:=new ->
- [Procs];
-proc(Name) when is_atom(Name) ->
+proc_port(P) when P=:=all; P=:=ports; P=:=processes;
+ P=:=existing; P=:=existing_ports; P=:=existing_processes;
+ P=:=new; P=:=new_ports; P=:=new_processes ->
+ [P];
+proc_port(Name) when is_atom(Name) ->
[Name]; % can be registered on this node or other node
-proc(Pid) when is_pid(Pid) ->
+proc_port(Pid) when is_pid(Pid) ->
[Pid];
-proc({global,Name}) ->
+proc_port(Port) when is_port(Port) ->
+ [Port];
+proc_port({global,Name}) ->
case global:whereis_name(Name) of
Pid when is_pid(Pid) ->
[Pid];
@@ -477,6 +482,11 @@ tpl(A,B,C,D) ->
store(tpl,[A,B,C,ms(D)]),
dbg:tpl(A,B,C,ms(D)).
+tpe(A,B) ->
+ ensure_no_overloaded_nodes(),
+ store(tpe,[A,ms(B)]),
+ dbg:tpe(A,ms(B)).
+
ctp() ->
store(ctp,[]),
dbg:ctp().
@@ -516,6 +526,10 @@ ctpg(A,B,C) ->
store(ctpg,[A,B,C]),
dbg:ctpg(A,B,C).
+ctpe(A) ->
+ store(ctpe,[A]),
+ dbg:ctpe(A).
+
ms(return) ->
[{'_',[],[{return_trace}]}];
ms(caller) ->
@@ -1296,6 +1310,9 @@ ip_to_file(Trace, {shell_only, Fun} = State) ->
ip_to_file(Trace,{{file,File}, ShellOutput}) ->
Fun = dbg:trace_port(file,File), %File can be a filename or a wrap spec
Port = Fun(),
+ %% Just in case this is on the traced node,
+ %% make sure the port is not traced.
+ p(Port,clear),
%% Store the port so it can be properly closed
?MODULE ! {ip_to_file_trace_port, Port, self()},
receive {?MODULE,ok} -> ok end,
diff --git a/lib/observer/src/ttb_et.erl b/lib/observer/src/ttb_et.erl
index 683dd6c9a2..95e8e9aa07 100644
--- a/lib/observer/src/ttb_et.erl
+++ b/lib/observer/src/ttb_et.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/observer/test/Makefile b/lib/observer/test/Makefile
index e8bb7d0a52..6100af5e17 100644
--- a/lib/observer/test/Makefile
+++ b/lib/observer/test/Makefile
@@ -45,8 +45,8 @@ RELSYSDIR = $(RELEASE_PATH)/observer_test
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
-ERL_MAKE_FLAGS += -pa $(ERL_TOP)/lib/test_server/ebin
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_MAKE_FLAGS +=
+ERL_COMPILE_FLAGS +=
EBIN = .
@@ -60,8 +60,6 @@ make_emakefile:
$(MODULES) > $(EMAKEFILE)
tests debug opt: make_emakefile
- cd $(ERL_TOP)/lib/test_server/src && \
- $(MAKE) ../ebin/test_server_line.beam
erl $(ERL_MAKE_FLAGS) -make
clean:
diff --git a/lib/observer/test/crashdump_helper.erl b/lib/observer/test/crashdump_helper.erl
index eea82d8c3c..4239a3d0d1 100644
--- a/lib/observer/test/crashdump_helper.erl
+++ b/lib/observer/test/crashdump_helper.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(crashdump_helper).
-export([n1_proc/2,remote_proc/2]).
-compile(r13).
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
n1_proc(N2,Creator) ->
spawn(fun() -> n1_proc(Creator,N2,x,y,[]) end).
diff --git a/lib/observer/test/crashdump_viewer_SUITE.erl b/lib/observer/test/crashdump_viewer_SUITE.erl
index eae4ee01b9..73ed890802 100644
--- a/lib/observer/test/crashdump_viewer_SUITE.erl
+++ b/lib/observer/test/crashdump_viewer_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,6 @@
-export([init_per_testcase/2, end_per_testcase/2]).
-include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-include_lib("kernel/include/file.hrl").
-define(failed_file,"failed-cases.txt").
@@ -102,7 +101,7 @@ end_per_group(_GroupName, Config) ->
init_per_suite(Config) when is_list(Config) ->
delete_saved(Config),
DataDir = ?config(data_dir,Config),
- Rels = [R || R <- [r16b,'17'], ?t:is_release_available(R)] ++ [current],
+ Rels = [R || R <- ['17','18'], ?t:is_release_available(R)] ++ [current],
io:format("Creating crash dumps for the following releases: ~p", [Rels]),
AllDumps = create_dumps(DataDir,Rels),
[{dumps,AllDumps}|Config].
@@ -607,21 +606,21 @@ dos_dump(DataDir,Rel,Dump) ->
rel_opt(Rel) ->
case Rel of
- r16b -> [{erl,[{release,"r16b_latest"}]}];
'17' -> [{erl,[{release,"17_latest"}]}];
+ '18' -> [{erl,[{release,"18_latest"}]}];
current -> []
end.
dump_prefix(Rel) ->
case Rel of
- r16b -> "r16b_dump.";
'17' -> "r17_dump.";
- current -> "r18_dump."
+ '18' -> "r18_dump.";
+ current -> "r19_dump."
end.
compat_rel(Rel) ->
case Rel of
- r16b -> "+R16 ";
'17' -> "+R17 ";
+ '18' -> "+R18 ";
current -> ""
end.
diff --git a/lib/observer/test/etop_SUITE.erl b/lib/observer/test/etop_SUITE.erl
index d4857c5e2f..7614989f1f 100644
--- a/lib/observer/test/etop_SUITE.erl
+++ b/lib/observer/test/etop_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
-export([text/1,text/2,text_tracing_off/1,text_tracing_off/2]).
-export([init_per_testcase/2, end_per_testcase/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(default_timeout, ?t:minutes(1)).
diff --git a/lib/observer/test/observer_SUITE.erl b/lib/observer/test/observer_SUITE.erl
index 7f96d72e59..4c882ad951 100644
--- a/lib/observer/test/observer_SUITE.erl
+++ b/lib/observer/test/observer_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(observer_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("wx/include/wx.hrl").
-include_lib("observer/src/observer_tv.hrl").
@@ -38,7 +38,7 @@
]).
%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
+-define(default_timeout, ?t:minutes(2)).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -171,6 +171,7 @@ test_page("Applications" ++ _, _Window) ->
test_page("Processes" ++ _, _Window) ->
timer:sleep(500), %% Give it time to refresh
Active = get_active(),
+ Active ! refresh_interval,
ChangeSort = fun(N) ->
FakeEv = #wx{event=#wxList{type=command_list_col_click, col=N}},
Active ! FakeEv,
@@ -184,7 +185,23 @@ test_page("Processes" ++ _, _Window) ->
timer:sleep(1000), %% Give it time to refresh
ok;
-test_page(_Title = "Table" ++ _, _Window) ->
+test_page("Ports" ++ _, _Window) ->
+ timer:sleep(500), %% Give it time to refresh
+ Active = get_active(),
+ Active ! refresh_interval,
+ ChangeSort = fun(N) ->
+ FakeEv = #wx{event=#wxList{type=command_list_col_click, col=N}},
+ Active ! FakeEv,
+ timer:sleep(200)
+ end,
+ [ChangeSort(N) || N <- lists:seq(1,4) ++ [0]],
+ Activate = #wx{event=#wxList{type=command_list_item_activated,
+ itemIndex=2}},
+ Active ! Activate,
+ timer:sleep(1000), %% Give it time to refresh
+ ok;
+
+test_page("Table" ++ _, _Window) ->
Tables = [ets:new(list_to_atom("Test-" ++ [C]), [public]) || C <- lists:seq($A, $Z)],
Table = lists:nth(3, Tables),
ets:insert(Table, [{N,100-N} || N <- lists:seq(1,100)]),
@@ -208,6 +225,13 @@ test_page(_Title = "Table" ++ _, _Window) ->
timer:sleep(1000),
ok;
+test_page("Trace Overview" ++ _, _Window) ->
+ timer:sleep(500), %% Give it time to refresh
+ Active = get_active(),
+ Active ! refresh_interval,
+ timer:sleep(1000), %% Give it time to refresh
+ ok;
+
test_page(Title, Window) ->
io:format("Page ~p: ~p~n", [Title, Window]),
%% Just let it display some info and hopefully it doesn't crash
diff --git a/lib/observer/test/ttb_SUITE.erl b/lib/observer/test/ttb_SUITE.erl
index bdf10f507d..c06ec21f36 100644
--- a/lib/observer/test/ttb_SUITE.erl
+++ b/lib/observer/test/ttb_SUITE.erl
@@ -2,7 +2,7 @@
%% %CopyrightBegin%
%%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,7 +32,7 @@
-export([init_per_testcase/2, end_per_testcase/2]).
-export([foo/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(default_timeout, ?t:minutes(1)).
-define(OUTPUT, "handler_output").
@@ -819,6 +819,7 @@ myhandler(_Fd,Trace,_,Relay) ->
simple_call_handler() ->
{fun(A, {trace_ts, _, call, _, _} ,_,_) -> io:format(A, "ok.~n", []);
+ (A, {drop, N}, _, _) -> io:format(A, "{drop, ~p}.", [N]);
(_, end_of_trace, _, _) -> ok end, []}.
marking_call_handler() ->
@@ -954,17 +955,24 @@ begin_trace_local(ServerNode, ClientNode, Dest) ->
?line ttb:tpl(client, get, []).
check_size(N, Dest, Output, ServerNode, ClientNode) ->
- ?line begin_trace(ServerNode, ClientNode, Dest),
- ?line case Dest of
+ begin_trace(ServerNode, ClientNode, Dest),
+ case Dest of
{local, _} ->
- ?line ttb_helper:msgs_ip(N);
+ ttb_helper:msgs_ip(N);
_ ->
- ?line ttb_helper:msgs(N)
+ ttb_helper:msgs(N)
end,
- ?line {_, D} = ttb:stop([fetch, return_fetch_dir]),
- ?line ttb:format(D, [{out, Output}, {handler, simple_call_handler()}]),
- ?line {ok, Ret} = file:consult(Output),
- ?line true = (N + 1 == length(Ret)).
+ {_, D} = ttb:stop([fetch, return_fetch_dir]),
+ ttb:format(D, [{out, Output}, {handler, simple_call_handler()}]),
+ {ok, Ret} = file:consult(Output),
+ check_output(N+1, Ret).
+
+check_output(Expected, Ret)
+ when length(Ret) =:= Expected -> ok;
+check_output(Expected, Ret) ->
+ io:format("~p~n",[Ret]),
+ io:format("Expected ~p got ~p ~n",[Expected, length(Ret)]),
+ Expected = length(Ret).
fetch_when_no_option_given(suite) ->
[];
@@ -1166,8 +1174,8 @@ changing_cwd_on_control_node(Config) when is_list(Config) ->
?line {_, D} = ttb:stop([fetch, return_fetch_dir]),
?line ttb:format(D, [{out, ?OUTPUT}, {handler, simple_call_handler()}]),
?line {ok, Ret} = file:consult(?OUTPUT),
- ?line true = (2*(NumMsgs + 1) == length(Ret)),
- ?line ok = file:set_cwd(OldDir).
+ check_output(2*(NumMsgs + 1),Ret),
+ ok = file:set_cwd(OldDir).
changing_cwd_on_control_node(cleanup,_Config) ->
?line stop_client_and_server().
@@ -1176,18 +1184,19 @@ changing_cwd_on_control_node_with_local_trace(suite) ->
changing_cwd_on_control_node_with_local_trace(doc) ->
["Changing cwd on control node during local tracing is safe"];
changing_cwd_on_control_node_with_local_trace(Config) when is_list(Config) ->
- ?line {ok, OldDir} = file:get_cwd(),
- ?line {ServerNode, ClientNode} = start_client_and_server(),
- ?line begin_trace(ServerNode, ClientNode, {local, ?FNAME}),
- ?line NumMsgs = 3,
- ?line ttb_helper:msgs_ip(NumMsgs),
- ?line ok = file:set_cwd(".."),
- ?line ttb_helper:msgs_ip(NumMsgs),
- ?line {_, D} = ttb:stop([fetch, return_fetch_dir]),
- ?line ttb:format(D, [{out, ?OUTPUT}, {handler, simple_call_handler()}]),
- ?line {ok, Ret} = file:consult(?OUTPUT),
- ?line true = (2*(NumMsgs + 1) == length(Ret)),
- ?line ok = file:set_cwd(OldDir).
+ {ok, OldDir} = file:get_cwd(),
+ {ServerNode, ClientNode} = start_client_and_server(),
+ begin_trace(ServerNode, ClientNode, {local, ?FNAME}),
+ NumMsgs = 3,
+ ttb_helper:msgs_ip(NumMsgs),
+ ok = file:set_cwd(".."),
+ ttb_helper:msgs_ip(NumMsgs),
+ {_, D} = ttb:stop([fetch, return_fetch_dir]),
+ ttb:format(D, [{out, ?OUTPUT}, {handler, simple_call_handler()}]),
+ {ok, Ret} = file:consult(?OUTPUT),
+ Expected = 2*(NumMsgs + 1),
+ check_output(Expected, Ret),
+ ok = file:set_cwd(OldDir).
changing_cwd_on_control_node_with_local_trace(cleanup,_Config) ->
?line stop_client_and_server().
@@ -1205,7 +1214,7 @@ changing_cwd_on_remote_node(Config) when is_list(Config) ->
?line {_, D} = ttb:stop([fetch, return_fetch_dir]),
?line ttb:format(D, [{out, ?OUTPUT}, {handler, simple_call_handler()}]),
?line {ok, Ret} = file:consult(?OUTPUT),
- ?line true = (2*(NumMsgs + 1) == length(Ret)).
+ check_output(2*(NumMsgs + 1),Ret).
changing_cwd_on_remote_node(cleanup,_Config) ->
?line stop_client_and_server().
@@ -1497,7 +1506,7 @@ logic(N, M, TracingType) ->
ct:log("formatted ~p",[{D,?OUTPUT}]),
?line {ok, Ret} = file:consult(?OUTPUT),
ct:log("consulted: ~p",[Ret]),
- ?line M = length(Ret).
+ check_output(M,Ret).
begin_trace_with_resume(ServerNode, ClientNode, Dest) ->
?line {ok, _} = ttb:tracer([ServerNode,ClientNode], [{file, Dest}, resume]),
diff --git a/lib/observer/vsn.mk b/lib/observer/vsn.mk
index aede0858d6..9a7c6a546f 100644
--- a/lib/observer/vsn.mk
+++ b/lib/observer/vsn.mk
@@ -1 +1 @@
-OBSERVER_VSN = 2.1.2
+OBSERVER_VSN = 2.2.1
diff --git a/lib/odbc/Makefile b/lib/odbc/Makefile
index b63a75270e..f7816c25fc 100644
--- a/lib/odbc/Makefile
+++ b/lib/odbc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/odbc/c_src/Makefile b/lib/odbc/c_src/Makefile
index 93c971d679..66c1bda5b7 100644
--- a/lib/odbc/c_src/Makefile
+++ b/lib/odbc/c_src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2009. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/odbc/c_src/Makefile.in b/lib/odbc/c_src/Makefile.in
index 685eb5d150..784e73c47e 100644
--- a/lib/odbc/c_src/Makefile.in
+++ b/lib/odbc/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/odbc/c_src/odbcserver.c b/lib/odbc/c_src/odbcserver.c
index 6e8ab5b0c8..8c799f6ff1 100644
--- a/lib/odbc/c_src/odbcserver.c
+++ b/lib/odbc/c_src/odbcserver.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/odbc/c_src/odbcserver.h b/lib/odbc/c_src/odbcserver.h
index 24e3e8f3ec..0461c57d1f 100644
--- a/lib/odbc/c_src/odbcserver.h
+++ b/lib/odbc/c_src/odbcserver.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2002-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2002-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/odbc/configure.in b/lib/odbc/configure.in
index 4b05050ef6..cb2b23d534 100644
--- a/lib/odbc/configure.in
+++ b/lib/odbc/configure.in
@@ -1,7 +1,7 @@
dnl
dnl %CopyrightBegin%
dnl
-dnl Copyright Ericsson AB 2005-2014. All Rights Reserved.
+dnl Copyright Ericsson AB 2005-2016. All Rights Reserved.
dnl
dnl Licensed under the Apache License, Version 2.0 (the "License");
dnl you may not use this file except in compliance with the License.
@@ -73,6 +73,16 @@ AC_CHECK_TOOL(LD, ld, '$(CC)')
AC_SUBST(LD)
+_search_path=/bin:/usr/bin:/usr/local/bin:$PATH
+
+AC_PATH_PROG(RM, rm, false, $_search_path)
+if test "$ac_cv_path_RM" = false; then
+ AC_MSG_ERROR([No 'rm' command found])
+fi
+
+_search_path=
+
+
# Sockets
#--------------------------------------------------------------------
# Check for the existence of the -lsocket and -lnsl libraries.
@@ -128,7 +138,7 @@ dnl Checks for library functions.
AC_CHECK_FUNCS([memset socket])
# ODBC
-/bin/rm -f "$ERL_TOP/lib/odbc/SKIP"
+$RM -f "$ERL_TOP/lib/odbc/SKIP"
LM_CHECK_THR_LIB
AC_SUBST(THR_DEFS)
diff --git a/lib/odbc/doc/src/Makefile b/lib/odbc/doc/src/Makefile
index 96b4f07fe9..b66d00a88b 100644
--- a/lib/odbc/doc/src/Makefile
+++ b/lib/odbc/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/odbc/doc/src/book.xml b/lib/odbc/doc/src/book.xml
index 4ead93f870..f643293ebd 100644
--- a/lib/odbc/doc/src/book.xml
+++ b/lib/odbc/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/databases.xml b/lib/odbc/doc/src/databases.xml
index d81a53e936..a060f87e46 100644
--- a/lib/odbc/doc/src/databases.xml
+++ b/lib/odbc/doc/src/databases.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/error_handling.xml b/lib/odbc/doc/src/error_handling.xml
index 83a0121035..4c80cff12f 100644
--- a/lib/odbc/doc/src/error_handling.xml
+++ b/lib/odbc/doc/src/error_handling.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/getting_started.xml b/lib/odbc/doc/src/getting_started.xml
index 64835b5be1..f2ff8b8993 100644
--- a/lib/odbc/doc/src/getting_started.xml
+++ b/lib/odbc/doc/src/getting_started.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/introduction.xml b/lib/odbc/doc/src/introduction.xml
index 148396edf0..17f329d3fc 100644
--- a/lib/odbc/doc/src/introduction.xml
+++ b/lib/odbc/doc/src/introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/notes.xml b/lib/odbc/doc/src/notes.xml
index 59d46de02a..d3dd39616f 100644
--- a/lib/odbc/doc/src/notes.xml
+++ b/lib/odbc/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,7 +32,23 @@
<p>This document describes the changes made to the odbc application.
</p>
- <section><title>ODBC 2.11.1</title>
+ <section><title>ODBC 2.11.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Configure enhancement for better handling program paths
+ used in the build process</p>
+ <p>
+ Own Id: OTP-13559</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>ODBC 2.11.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/odbc/doc/src/notes_history.xml b/lib/odbc/doc/src/notes_history.xml
index d9f0449d9d..22a92f67cd 100644
--- a/lib/odbc/doc/src/notes_history.xml
+++ b/lib/odbc/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/odbc.xml b/lib/odbc/doc/src/odbc.xml
index 6a2a3587e4..4bb1f035f9 100644
--- a/lib/odbc/doc/src/odbc.xml
+++ b/lib/odbc/doc/src/odbc.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/part.xml b/lib/odbc/doc/src/part.xml
index 98f4a6228b..07c2fd76ac 100644
--- a/lib/odbc/doc/src/part.xml
+++ b/lib/odbc/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/part_notes.xml b/lib/odbc/doc/src/part_notes.xml
index e7af9adc62..8f1dbd3fbc 100644
--- a/lib/odbc/doc/src/part_notes.xml
+++ b/lib/odbc/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/part_notes_history.xml b/lib/odbc/doc/src/part_notes_history.xml
index f1c7005f46..6f855f6ed1 100644
--- a/lib/odbc/doc/src/part_notes_history.xml
+++ b/lib/odbc/doc/src/part_notes_history.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/doc/src/ref_man.xml b/lib/odbc/doc/src/ref_man.xml
index 642642737f..2409e04381 100644
--- a/lib/odbc/doc/src/ref_man.xml
+++ b/lib/odbc/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/odbc/src/Makefile b/lib/odbc/src/Makefile
index 51c9ed3d5c..7ca59495ed 100644
--- a/lib/odbc/src/Makefile
+++ b/lib/odbc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/odbc/src/odbc.appup.src b/lib/odbc/src/odbc.appup.src
index 3580fe21b8..8aa0770013 100644
--- a/lib/odbc/src/odbc.appup.src
+++ b/lib/odbc/src/odbc.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/src/odbc.erl b/lib/odbc/src/odbc.erl
index 12560bfb6e..8871acd3f4 100644
--- a/lib/odbc/src/odbc.erl
+++ b/lib/odbc/src/odbc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -833,7 +833,7 @@ connect(ConnectionReferense, ConnectionStr, Options) ->
odbc_send(Socket, Msg) -> %% Note currently all allowed messages are lists
NewMsg = Msg ++ [?STR_TERMINATOR],
ok = gen_tcp:send(Socket, NewMsg),
- inet:setopts(Socket, [{active, once}]).
+ ok = inet:setopts(Socket, [{active, once}]).
%%--------------------------------------------------------------------------
connection_config(Key, Options) ->
diff --git a/lib/odbc/src/odbc_app.erl b/lib/odbc/src/odbc_app.erl
index cbc4d325ad..0a6d1ee5df 100644
--- a/lib/odbc/src/odbc_app.erl
+++ b/lib/odbc/src/odbc_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/src/odbc_internal.hrl b/lib/odbc/src/odbc_internal.hrl
index 0e0ed18a0f..2968c6ba54 100644
--- a/lib/odbc/src/odbc_internal.hrl
+++ b/lib/odbc/src/odbc_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/src/odbc_sup.erl b/lib/odbc/src/odbc_sup.erl
index 96f0886f88..6a87160321 100644
--- a/lib/odbc/src/odbc_sup.erl
+++ b/lib/odbc/src/odbc_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/test/Makefile b/lib/odbc/test/Makefile
index 114eb5373d..c90f76a83d 100644
--- a/lib/odbc/test/Makefile
+++ b/lib/odbc/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@ include $(ERL_TOP)/make/target.mk
include $(ERL_TOP)/make/$(TARGET)/otp.mk
-INCLUDES= -I. -I$(ERL_TOP)/lib/test_server/include/ -I$(ERL_TOP)/lib/odbc/src
+INCLUDES= -I. -I$(ERL_TOP)/lib/odbc/src
# ----------------------------------------------------
# Target Specs
diff --git a/lib/odbc/test/README b/lib/odbc/test/README
index fc9559ebe6..0a8495afbb 100644
--- a/lib/odbc/test/README
+++ b/lib/odbc/test/README
@@ -70,7 +70,7 @@ As odbc connection string use: "DSN=odbctestdb;UID=odbctest;PWD=Sesame"
> %CopyrightBegin%
>
-> Copyright Ericsson AB 2010. All Rights Reserved.
+> Copyright Ericsson AB 2010-2016. All Rights Reserved.
>
> Licensed under the Apache License, Version 2.0 (the "License");
> you may not use this file except in compliance with the License.
diff --git a/lib/odbc/test/mysql.erl b/lib/odbc/test/mysql.erl
index 02f1610570..69b136e743 100644
--- a/lib/odbc/test/mysql.erl
+++ b/lib/odbc/test/mysql.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/test/odbc_connect_SUITE.erl b/lib/odbc/test/odbc_connect_SUITE.erl
index 2d4173a008..261dfc6f20 100644
--- a/lib/odbc/test/odbc_connect_SUITE.erl
+++ b/lib/odbc/test/odbc_connect_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,6 @@
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-include("odbc_test.hrl").
-define(MAX_SEQ_TIMEOUTS, 10).
@@ -90,6 +89,7 @@ init_per_suite(Config) when is_list(Config) ->
[{auto_commit, off}] ++ odbc_test_lib:platform_options()) of
{ok, Ref} ->
odbc:disconnect(Ref),
+ ct:timetrap(?default_timeout),
[{tableName, odbc_test_lib:unique_table_name()} | Config];
_ ->
{skip, "ODBC is not properly setup"}
@@ -130,11 +130,8 @@ init_per_testcase(_TestCase, Config) ->
init_per_testcase_common(Config).
init_per_testcase_common(Config) ->
- test_server:format("ODBCINI = ~p~n", [os:getenv("ODBCINI")]),
- Dog = test_server:timetrap(?default_timeout),
- Temp = lists:keydelete(connection_ref, 1, Config),
- NewConfig = lists:keydelete(watchdog, 1, Temp),
- [{watchdog, Dog} | NewConfig].
+ ct:pal("ODBCINI = ~p~n", [os:getenv("ODBCINI")]),
+ lists:keydelete(connection_ref, 1, Config).
%%--------------------------------------------------------------------
%% Function: end_per_testcase(Case, Config) -> _
@@ -154,25 +151,22 @@ end_per_testcase(_TestCase, Config) ->
end_per_testcase_common(Config).
end_per_testcase_common(Config) ->
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
Result = odbc:sql_query(Ref, "DROP TABLE " ++ Table),
io:format("Drop table: ~p ~p~n", [Table, Result]),
- odbc:disconnect(Ref),
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-commit(doc)->
- ["Test the use of explicit commit"];
-commit(suite) -> [];
+commit()->
+ [{doc,"Test the use of explicit commit"}].
commit(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
{updated, _} =
@@ -206,14 +200,13 @@ commit(Config) ->
ok = odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
-rollback(doc)->
- ["Test the use of explicit rollback"];
-rollback(suite) -> [];
+rollback()->
+ [{doc,"Test the use of explicit rollback"}].
rollback(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
@@ -246,9 +239,8 @@ rollback(Config) ->
ok = odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
-not_explicit_commit(doc) ->
- ["Test what happens if you try using commit on a auto_commit connection."];
-not_explicit_commit(suite) -> [];
+not_explicit_commit() ->
+ [{doc,"Test what happens if you try using commit on a auto_commit connection."}].
not_explicit_commit(_Config) ->
{ok, Ref} =
odbc:connect(?RDBMS:connection_string(), [{auto_commit, on}] ++
@@ -257,19 +249,17 @@ not_explicit_commit(_Config) ->
ok = odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
-not_exist_db(doc) ->
- ["Tests valid data format but invalid data in the connection parameters."];
-not_exist_db(suite) -> [];
+not_exist_db() ->
+ [{doc,"Tests valid data format but invalid data in the connection parameters."}].
not_exist_db(_Config) ->
{error, _} = odbc:connect("DSN=foo;UID=bar;PWD=foobar",
odbc_test_lib:platform_options()),
%% So that the odbc control server can be stoped "in the correct way"
- test_server:sleep(100).
+ ct:sleep(100).
%%-------------------------------------------------------------------------
-no_c_executable(doc) ->
- "Test what happens if the port-program can not be found";
-no_c_executable(suite) -> [];
+no_c_executable() ->
+ [{doc,"Test what happens if the port-program can not be found"}].
no_c_executable(_Config) ->
process_flag(trap_exit, true),
Dir = filename:nativename(filename:join(code:priv_dir(odbc),
@@ -294,9 +284,8 @@ no_c_executable(_Config) ->
end.
%%------------------------------------------------------------------------
-port_dies(doc) ->
- "Tests what happens if the port program dies";
-port_dies(suite) -> [];
+port_dies() ->
+ [{doc,"Tests what happens if the port program dies"}].
port_dies(_Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
{status, _} = process_info(Ref, status),
@@ -308,7 +297,7 @@ port_dies(_Config) ->
%% Wait for exit_status from port 5000 ms (will not get a exit
%% status in this case), then wait a little longer to make sure
%% the port and the controlprocess has had time to terminate.
- test_server:sleep(10000),
+ ct:sleep(10000),
undefined = process_info(Ref, status);
[] ->
ct:fail([erlang:port_info(P, name) || P <- erlang:ports()])
@@ -316,9 +305,8 @@ port_dies(_Config) ->
%%-------------------------------------------------------------------------
-control_process_dies(doc) ->
- "Tests what happens if the Erlang control process dies";
-control_process_dies(suite) -> [];
+control_process_dies() ->
+ [{doc,"Tests what happens if the Erlang control process dies"}].
control_process_dies(_Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
process_flag(trap_exit, true),
@@ -327,7 +315,7 @@ control_process_dies(_Config) ->
[Port] ->
{connected, Ref} = erlang:port_info(Port, connected),
exit(Ref, kill),
- test_server:sleep(500),
+ ct:sleep(500),
undefined = erlang:port_info(Port, connected);
%% Check for c-program still running, how?
[] ->
@@ -335,9 +323,8 @@ control_process_dies(_Config) ->
end.
%%-------------------------------------------------------------------------
-client_dies_normal(doc) ->
- ["Client dies with reason normal."];
-client_dies_normal(suite) -> [];
+client_dies_normal() ->
+ [{doc,"Client dies with reason normal."}].
client_dies_normal(Config) when is_list(Config) ->
Pid = spawn(?MODULE, client_normal, [self()]),
@@ -353,7 +340,7 @@ client_dies_normal(Config) when is_list(Config) ->
{'DOWN', MonitorReference, _Type, _Object, _Info} ->
ok
after 5000 ->
- test_server:fail(control_process_not_stopped)
+ ct:fail(control_process_not_stopped)
end.
client_normal(Pid) ->
@@ -367,9 +354,8 @@ client_normal(Pid) ->
%%-------------------------------------------------------------------------
-client_dies_timeout(doc) ->
- ["Client dies with reason timeout."];
-client_dies_timeout(suite) -> [];
+client_dies_timeout() ->
+ [{doc,"Client dies with reason timeout."}].
client_dies_timeout(Config) when is_list(Config) ->
Pid = spawn(?MODULE, client_timeout, [self()]),
@@ -385,7 +371,7 @@ client_dies_timeout(Config) when is_list(Config) ->
{'DOWN', MonitorReference, _Type, _Object, _Info} ->
ok
after 5000 ->
- test_server:fail(control_process_not_stopped)
+ ct:fail(control_process_not_stopped)
end.
client_timeout(Pid) ->
@@ -399,9 +385,8 @@ client_timeout(Pid) ->
%%-------------------------------------------------------------------------
-client_dies_error(doc) ->
- ["Client dies with reason error."];
-client_dies_error(suite) -> [];
+client_dies_error() ->
+ [{doc,"Client dies with reason error."}].
client_dies_error(Config) when is_list(Config) ->
Pid = spawn(?MODULE, client_error, [self()]),
@@ -417,7 +402,7 @@ client_dies_error(Config) when is_list(Config) ->
{'DOWN', MonitorReference, _Type, _Object, _Info} ->
ok
after 5000 ->
- test_server:fail(control_process_not_stopped)
+ ct:fail(control_process_not_stopped)
end.
client_error(Pid) ->
@@ -431,9 +416,8 @@ client_error(Pid) ->
%%-------------------------------------------------------------------------
-connect_timeout(doc) ->
- ["Test the timeout for the connect function."];
-connect_timeout(suite) -> [];
+connect_timeout() ->
+ [{doc,"Test the timeout for the connect function."}].
connect_timeout(Config) when is_list(Config) ->
{'EXIT',timeout} = (catch odbc:connect(?RDBMS:connection_string(),
[{timeout, 0}] ++
@@ -443,10 +427,9 @@ connect_timeout(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-connect_port_timeout(doc) ->
- ["Test the timeout for the port program to connect back to the odbc "
- "application within the connect function."];
-connect_port_timeout(suite) -> [];
+connect_port_timeout() ->
+ [{"Test the timeout for the port program to connect back to the odbc "
+ "application within the connect function."}].
connect_port_timeout(Config) when is_list(Config) ->
%% Application environment var 'port_timeout' has been set to 0 by
%% init_per_testcase/2.
@@ -454,15 +437,14 @@ connect_port_timeout(Config) when is_list(Config) ->
odbc_test_lib:platform_options()).
%%-------------------------------------------------------------------------
-timeout(doc) ->
- ["Test that timeouts don't cause unwanted behavior sush as receiving"
- " an anwser to a previously tiemed out query."];
-timeout(suite) -> [];
+timeout() ->
+ [{"Test that timeouts don't cause unwanted behavior sush as receiving"
+ " an anwser to a previously tiemed out query."}].
timeout(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}]),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
@@ -513,7 +495,7 @@ update_table_timeout(Table, TimeOut, Pid) ->
{'EXIT', timeout} ->
Pid ! timout_occurred;
{updated, 1} ->
- test_server:fail(database_locker_failed)
+ ct:fail(database_locker_failed)
end,
receive
@@ -538,15 +520,14 @@ update_table_timeout(Table, TimeOut, Pid) ->
ok = odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
-many_timeouts(doc) ->
- ["Tests that many consecutive timeouts lead to that the connection "
- "is shutdown."];
-many_timeouts(suite) -> [];
+many_timeouts() ->
+ [{doc, "Tests that many consecutive timeouts lead to that the connection "
+ "is shutdown."}].
many_timeouts(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
{updated, _} =
@@ -593,19 +574,18 @@ loop_many_timouts(Ref, UpdateQuery, TimeOut) ->
{'EXIT',timeout} ->
loop_many_timouts(Ref, UpdateQuery, TimeOut);
{updated, 1} ->
- test_server:fail(database_locker_failed);
+ ct:fail(database_locker_failed);
{error, connection_closed} ->
ok
end.
%%-------------------------------------------------------------------------
-timeout_reset(doc) ->
- ["Check that the number of consecutive timouts is reset to 0 when "
- "a successful call to the database is made."];
-timeout_reset(suite) -> [];
+timeout_reset() ->
+ [{doc, "Check that the number of consecutive timouts is reset to 0 when "
+ "a successful call to the database is made."}].
timeout_reset(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
{updated, _} =
@@ -689,21 +669,20 @@ loop_timout_reset(Ref, UpdateQuery, TimeOut, NumTimeouts) ->
loop_timout_reset(Ref, UpdateQuery,
TimeOut, NumTimeouts - 1);
{updated, 1} ->
- test_server:fail(database_locker_failed);
+ ct:fail(database_locker_failed);
{error, connection_closed} ->
- test_server:fail(connection_closed_premature)
+ ct:fail(connection_closed_premature)
end.
%%-------------------------------------------------------------------------
-disconnect_on_timeout(doc) ->
- ["Check that disconnect after a time out works properly"];
-disconnect_on_timeout(suite) -> [];
+disconnect_on_timeout() ->
+ [{doc,"Check that disconnect after a time out works properly"}].
disconnect_on_timeout(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
{updated, _} =
@@ -727,7 +706,7 @@ disconnect_on_timeout(Config) when is_list(Config) ->
ok ->
ok = odbc:commit(Ref, commit);
nok ->
- test_server:fail(database_locker_failed)
+ ct:fail(database_locker_failed)
end.
update_table_disconnect_on_timeout(Table, TimeOut, Pid) ->
@@ -745,14 +724,13 @@ update_table_disconnect_on_timeout(Table, TimeOut, Pid) ->
end.
%%-------------------------------------------------------------------------
-connection_closed(doc) ->
- ["Checks that you get an appropriate error message if you try to"
- " use a connection that has been closed"];
-connection_closed(suite) -> [];
+connection_closed() ->
+ [{doc, "Checks that you get an appropriate error message if you try to"
+ " use a connection that has been closed"}].
connection_closed(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -772,14 +750,13 @@ connection_closed(Config) when is_list(Config) ->
{error, connection_closed} = odbc:commit(Ref, commit).
%%-------------------------------------------------------------------------
-disable_scrollable_cursors(doc) ->
- ["Test disabling of scrollable cursors."];
-disable_scrollable_cursors(suite) -> [];
+disable_scrollable_cursors() ->
+ [{doc,"Test disabling of scrollable cursors."}].
disable_scrollable_cursors(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{scrollable_cursors, off}]),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -793,10 +770,10 @@ disable_scrollable_cursors(Config) when is_list(Config) ->
NextResult = ?RDBMS:selected_ID(1, next),
- test_server:format("Expected: ~p~n", [NextResult]),
+ ct:pal("Expected: ~p~n", [NextResult]),
Result = odbc:next(Ref),
- test_server:format("Got: ~p~n", [Result]),
+ ct:pal("Got: ~p~n", [Result]),
NextResult = Result,
{error, scrollable_cursors_disabled} = odbc:first(Ref),
@@ -810,15 +787,14 @@ disable_scrollable_cursors(Config) when is_list(Config) ->
{selected, _ColNames,[]} = odbc:select(Ref, next, 1).
%%-------------------------------------------------------------------------
-return_rows_as_lists(doc)->
- ["Test the option that a row may be returned as a list instead "
- "of a tuple. Too be somewhat backward compatible."];
-return_rows_as_lists(suite) -> [];
+return_rows_as_lists()->
+ [{doc,"Test the option that a row may be returned as a list instead "
+ "of a tuple. Too be somewhat backward compatible."}].
return_rows_as_lists(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{tuple_row, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -855,29 +831,28 @@ return_rows_as_lists(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-api_missuse(doc)->
- ["Test that behaviour of the control process if the api is abused"];
-api_missuse(suite) -> [];
+api_missuse()->
+ [{doc,"Test that behaviour of the control process if the api is abused"}].
api_missuse(Config) when is_list(Config)->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
%% Serious programming fault, connetion will be shut down
gen_server:call(Ref, {self(), foobar, 10}, infinity),
- test_server:sleep(10),
+ ct:sleep(10),
undefined = process_info(Ref, status),
{ok, Ref2} = odbc:connect(?RDBMS:connection_string(),
odbc_test_lib:platform_options()),
%% Serious programming fault, connetion will be shut down
gen_server:cast(Ref2, {self(), foobar, 10}),
- test_server:sleep(10),
+ ct:sleep(10),
undefined = process_info(Ref2, status),
{ok, Ref3} = odbc:connect(?RDBMS:connection_string(),
odbc_test_lib:platform_options()),
%% Could be an innocent misstake the connection lives.
Ref3 ! foobar,
- test_server:sleep(10),
+ ct:sleep(10),
{status, _} = process_info(Ref3, status).
transaction_support_str(mysql) ->
@@ -887,13 +862,13 @@ transaction_support_str(_) ->
%%-------------------------------------------------------------------------
-extended_errors(doc)->
- ["Test the extended errors connection option: When off; the old behaviour of just an error "
- "string is returned on error. When on, the error string is replaced by a 3 element tuple "
- "that also exposes underlying ODBC provider error codes."];
-extended_errors(suite) -> [];
+extended_errors()->
+ [{doc,
+ "Test the extended errors connection option: When off; the old behaviour of just an error "
+ "string is returned on error. When on, the error string is replaced by a 3 element tuple "
+ "that also exposes underlying ODBC provider error codes."}].
extended_errors(Config) when is_list(Config)->
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
{updated, _} = odbc:sql_query(Ref, "create table " ++ Table ++" ( id integer, data varchar(10))"),
diff --git a/lib/odbc/test/odbc_data_type_SUITE.erl b/lib/odbc/test/odbc_data_type_SUITE.erl
index a56af650c2..a3a4bc78eb 100644
--- a/lib/odbc/test/odbc_data_type_SUITE.erl
+++ b/lib/odbc/test/odbc_data_type_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,6 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("stdlib/include/ms_transform.hrl").
--include("test_server_line.hrl").
-include("odbc_test.hrl").
%%--------------------------------------------------------------------
@@ -121,6 +120,7 @@ init_per_suite(Config) when is_list(Config) ->
false ->
case (catch odbc:start()) of
ok ->
+ ct:timetrap(?default_timeout),
[{tableName, odbc_test_lib:unique_table_name()}| Config];
_ ->
{skip, "ODBC not startable"}
@@ -192,23 +192,22 @@ init_per_testcase(Case, Config) ->
common_init_per_testcase(Case, Config) ->
PlatformOptions = odbc_test_lib:platform_options(),
- case atom_to_list(Case) of
- "binary" ++ _ ->
- {ok, Ref} = odbc:connect(?RDBMS:connection_string(),
- [{binary_strings, on}] ++ PlatformOptions);
- LCase when LCase == "utf8";
- LCase == "nchar";
- LCase == "nvarchar" ->
- {ok, Ref} = odbc:connect(?RDBMS:connection_string(),
- [{binary_strings, on}] ++ PlatformOptions);
- _ ->
- {ok, Ref} = odbc:connect(?RDBMS:connection_string(), PlatformOptions)
- end,
+ {ok, Ref} =
+ case atom_to_list(Case) of
+ "binary" ++ _ ->
+ odbc:connect(?RDBMS:connection_string(),
+ [{binary_strings, on}] ++ PlatformOptions);
+ LCase when LCase == "utf8";
+ LCase == "nchar";
+ LCase == "nvarchar" ->
+ odbc:connect(?RDBMS:connection_string(),
+ [{binary_strings, on}] ++ PlatformOptions);
+ _ ->
+ odbc:connect(?RDBMS:connection_string(), PlatformOptions)
+ end,
odbc_test_lib:strict(Ref, ?RDBMS),
- Dog = test_server:timetrap(?default_timeout),
- Temp = lists:keydelete(connection_ref, 1, Config),
- NewConfig = lists:keydelete(watchdog, 1, Temp),
- [{watchdog, Dog}, {connection_ref, Ref} | NewConfig].
+ NewConfig = lists:keydelete(connection_ref, 1, Config),
+ [{connection_ref, Ref} | NewConfig].
is_fixed_upper_limit(mysql) ->
false;
@@ -232,28 +231,23 @@ is_supported_bit(_) ->
%% Description: Cleanup after each test case
%%--------------------------------------------------------------------
end_per_testcase(_TestCase, Config) ->
- Ref = ?config(connection_ref, Config),
+ Ref = proplists:get_value(connection_ref, Config),
ok = odbc:disconnect(Ref),
%% Clean up if needed
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{ok, NewRef} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
odbc:sql_query(NewRef, "DROP TABLE " ++ Table),
- odbc:disconnect(NewRef),
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+ odbc:disconnect(NewRef).
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-char_fixed_lower_limit(doc) ->
- ["Tests fixed length char data type lower boundaries."];
-char_fixed_lower_limit(suite) ->
- [];
+char_fixed_lower_limit() ->
+ [{doc,"Tests fixed length char data type lower boundaries."}].
char_fixed_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Below limit
{error, _} =
@@ -288,18 +282,16 @@ char_fixed_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-char_fixed_upper_limit(doc) ->
- ["Tests fixed length char data type upper boundaries."];
-char_fixed_upper_limit(suite) ->
- [];
+char_fixed_upper_limit() ->
+ [{doc,"Tests fixed length char data type upper boundaries."}].
char_fixed_upper_limit(Config) when is_list(Config) ->
case ?RDBMS of
postgres ->
{skip, "Limit unknown"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Upper limit
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -338,14 +330,12 @@ char_fixed_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-char_fixed_padding(doc) ->
- ["Tests that data that is shorter than the given size is padded "
- "with blanks."];
-char_fixed_padding(suite) ->
- [];
+char_fixed_padding() ->
+ [{doc, "Tests that data that is shorter than the given size is padded "
+ "with blanks."}].
char_fixed_padding(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Data should be padded with blanks
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -366,13 +356,11 @@ char_fixed_padding(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-varchar_lower_limit(doc) ->
- ["Tests variable length char data type lower boundaries."];
-varchar_lower_limit(suite) ->
- [];
+varchar_lower_limit() ->
+ [{doc,"Tests variable length char data type lower boundaries."}].
varchar_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Below limit
{error, _} =
@@ -406,13 +394,11 @@ varchar_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-varchar_upper_limit(doc) ->
- ["Tests variable length char data type upper boundaries."];
-varchar_upper_limit(suite) ->
- [];
+varchar_upper_limit() ->
+ [{doc,"Tests variable length char data type upper boundaries."}].
varchar_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
oracle ->
@@ -456,14 +442,12 @@ varchar_upper_limit(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-varchar_no_padding(doc) ->
- ["Tests that data that is shorter than the given max size is not padded "
- "with blanks."];
-varchar_no_padding(suite) ->
- [];
+varchar_no_padding() ->
+ [{doc, "Tests that data that is shorter than the given max size is not padded "
+ "with blanks."}].
varchar_no_padding(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Data should NOT be padded with blanks
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -482,13 +466,11 @@ varchar_no_padding(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-text_lower_limit(doc) ->
- ["Tests 'long' char data type lower boundaries."];
-text_lower_limit(suite) ->
- [];
+text_lower_limit() ->
+ [{doc,"Tests 'long' char data type lower boundaries."}].
text_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -505,15 +487,13 @@ text_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-text_upper_limit(doc) ->
- [];
-text_upper_limit(suite) ->
- [];
+text_upper_limit() ->
+ [{doc,"Tests 'text' char data type upper boundaries."}].
text_upper_limit(Config) when is_list(Config) ->
{skip,"Consumes too much resources" }.
-%% Ref = ?config(connection_ref, Config),
-%% Table = ?config(tableName, Config),
+%% Ref = proplists:get_value(connection_ref, Config),
+%% Table = proplists:get_value(tableName, Config),
%% {updated, _} = % Value == 0 || -1 driver dependent!
%% odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -535,13 +515,11 @@ text_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_char_fixed_lower_limit(doc) ->
- ["Tests fixed length char data type lower boundaries."];
-binary_char_fixed_lower_limit(suite) ->
- [];
+binary_char_fixed_lower_limit() ->
+ [{doc,"Tests fixed length char data type lower boundaries."}].
binary_char_fixed_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Below limit
{error, _} =
@@ -580,18 +558,16 @@ binary_char_fixed_lower_limit(Config) when is_list(Config) ->
++ "')").
%%-------------------------------------------------------------------------
-binary_char_fixed_upper_limit(doc) ->
- ["Tests fixed length char data type upper boundaries."];
-binary_char_fixed_upper_limit(suite) ->
- [];
+binary_char_fixed_upper_limit() ->
+ [{doc,"Tests fixed length char data type upper boundaries."}].
binary_char_fixed_upper_limit(Config) when is_list(Config) ->
case ?RDBMS of
postgres ->
{skip, "Limit unknown"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Upper limit
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -631,14 +607,12 @@ binary_char_fixed_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_char_fixed_padding(doc) ->
- ["Tests that data that is shorter than the given size is padded "
- "with blanks."];
-binary_char_fixed_padding(suite) ->
- [];
+binary_char_fixed_padding() ->
+ [{doc, "Tests that data that is shorter than the given size is padded "
+ "with blanks."}].
binary_char_fixed_padding(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Data should be padded with blanks
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -659,13 +633,11 @@ binary_char_fixed_padding(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_varchar_lower_limit(doc) ->
- ["Tests variable length char data type lower boundaries."];
-binary_varchar_lower_limit(suite) ->
- [];
+binary_varchar_lower_limit() ->
+ [{doc,"Tests variable length char data type lower boundaries."}].
binary_varchar_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Below limit
{error, _} =
@@ -702,13 +674,11 @@ binary_varchar_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_varchar_upper_limit(doc) ->
- ["Tests variable length char data type upper boundaries."];
-binary_varchar_upper_limit(suite) ->
- [];
+binary_varchar_upper_limit() ->
+ [{doc,"Tests variable length char data type upper boundaries."}].
binary_varchar_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
oracle ->
@@ -751,14 +721,12 @@ binary_varchar_upper_limit(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-binary_varchar_no_padding(doc) ->
- ["Tests that data that is shorter than the given max size is not padded "
- "with blanks."];
-binary_varchar_no_padding(suite) ->
- [];
+binary_varchar_no_padding() ->
+ [{doc,"Tests that data that is shorter than the given max size is not padded "
+ "with blanks."}].
binary_varchar_no_padding(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Data should NOT be padded with blanks
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -777,13 +745,11 @@ binary_varchar_no_padding(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_text_lower_limit(doc) ->
- ["Tests 'long' char data type lower boundaries."];
-binary_text_lower_limit(suite) ->
- [];
+binary_text_lower_limit() ->
+ [{doc,"Tests 'long' char data type lower boundaries."}].
binary_text_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -800,15 +766,13 @@ binary_text_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_text_upper_limit(doc) ->
- [];
-binary_text_upper_limit(suite) ->
- [];
+binary_text_upper_limit() ->
+ [{doc,"Tests text char data type upper boundaries."}].
binary_text_upper_limit(Config) when is_list(Config) ->
{skip,"Consumes too much resources" }.
-%% Ref = ?config(connection_ref, Config),
-%% Table = ?config(tableName, Config),
+%% Ref = proplists:get_value(connection_ref, Config),
+%% Table = proplists:get_value(tableName, Config),
%% {updated, _} = % Value == 0 || -1 driver dependent!
%% odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -831,17 +795,15 @@ binary_text_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-tiny_int_lower_limit(doc) ->
- ["Tests integer of type tinyint."];
-tiny_int_lower_limit(suite) ->
- [];
+tiny_int_lower_limit() ->
+ [{doc,"Tests integer of type tinyint."}].
tiny_int_lower_limit(Config) when is_list(Config) ->
case ?RDBMS of
postgres ->
{skip, "Type tiniyint not supported"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -865,17 +827,15 @@ tiny_int_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-tiny_int_upper_limit(doc) ->
- ["Tests integer of type tinyint."];
-tiny_int_upper_limit(suite) ->
- [];
+tiny_int_upper_limit() ->
+ [{doc,"Tests integer of type tinyint."}].
tiny_int_upper_limit(Config) when is_list(Config) ->
case ?RDBMS of
postgres ->
{skip, "Type tiniyint not supported"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -899,13 +859,11 @@ tiny_int_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-small_int_lower_limit(doc) ->
- ["Tests integer of type smallint."];
-small_int_lower_limit(suite) ->
- [];
+small_int_lower_limit() ->
+ [{doc,"Tests integer of type smallint."}].
small_int_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -928,13 +886,11 @@ small_int_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-small_int_upper_limit(doc) ->
- ["Tests integer of type smallint."];
-small_int_upper_limit(suite) ->
- [];
+small_int_upper_limit() ->
+ [{doc,"Tests integer of type smallint."}].
small_int_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -956,13 +912,11 @@ small_int_upper_limit(Config) when is_list(Config) ->
++ "')").
%%-------------------------------------------------------------------------
-int_lower_limit(doc) ->
- ["Tests integer of type int."];
-int_lower_limit(suite) ->
- [];
+int_lower_limit() ->
+ [{doc,"Tests integer of type int."}].
int_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -984,13 +938,11 @@ int_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-int_upper_limit(doc) ->
- ["Tests integer of type int."];
-int_upper_limit(suite) ->
- [];
+int_upper_limit() ->
+ [{doc,"Tests integer of type int."}].
int_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1012,13 +964,11 @@ int_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-big_int_lower_limit(doc) ->
- ["Tests integer of type bigint"];
-big_int_lower_limit(suite) ->
- [];
+big_int_lower_limit() ->
+ [{doc,"Tests integer of type bigint"}].
big_int_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1041,13 +991,11 @@ big_int_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-big_int_upper_limit(doc) ->
- ["Tests integer of type bigint."];
-big_int_upper_limit(suite) ->
- [];
+big_int_upper_limit() ->
+ [{doc,"Tests integer of type bigint."}].
big_int_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1069,17 +1017,13 @@ big_int_upper_limit(Config) when is_list(Config) ->
++ "')").
%%-------------------------------------------------------------------------
-bit_false(doc) ->
- [""];
-bit_false(suite) ->
- [];
bit_false(Config) when is_list(Config) ->
case ?RDBMS of
oracle ->
{skip, "Not supported by driver"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1103,17 +1047,13 @@ bit_false(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-bit_true(doc) ->
- [""];
-bit_true(suite) ->
- [];
bit_true(Config) when is_list(Config) ->
case ?RDBMS of
oracle ->
{skip, "Not supported by driver"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -1137,14 +1077,11 @@ bit_true(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-float_lower_limit(doc) ->
- [""];
-float_lower_limit(suite) ->
- [];
+
float_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
mysql ->
@@ -1187,13 +1124,10 @@ float_lower_limit(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-float_upper_limit(doc) ->
- [""];
-float_upper_limit(suite) ->
- [];
+
float_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
mysql ->
@@ -1219,13 +1153,11 @@ float_upper_limit(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-float_zero(doc) ->
- ["Test the float value zero."];
-float_zero(suite) ->
- [];
+float_zero() ->
+ [{doc,"Test the float value zero."}].
float_zero(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1238,13 +1170,11 @@ float_zero(Config) when is_list(Config) ->
SelectResult =
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table).
%%-------------------------------------------------------------------------
-real_zero(doc) ->
- ["Test the real value zero."];
-real_zero(suite) ->
- [];
+real_zero() ->
+ [{doc,"Test the real value zero."}].
real_zero(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
oracle ->
@@ -1263,13 +1193,11 @@ real_zero(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table)
end.
%%------------------------------------------------------------------------
-dec_long(doc) ->
- [""];
dec_long(suit) ->
[];
dec_long(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1282,13 +1210,11 @@ dec_long(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table),
["FIELD"] = odbc_test_lib:to_upper(Fields).
%%------------------------------------------------------------------------
-dec_double(doc) ->
- [""];
dec_double(suit) ->
[];
dec_double(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1330,13 +1256,11 @@ dec_double(Config) when is_list(Config) ->
["FIELD"] = odbc_test_lib:to_upper(Fields2).
%%------------------------------------------------------------------------
-dec_bignum(doc) ->
- [""];
dec_bignum(suit) ->
[];
dec_bignum(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1362,13 +1286,11 @@ dec_bignum(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table),
["FIELD"] = odbc_test_lib:to_upper(Fields1).
%%------------------------------------------------------------------------
-num_long(doc) ->
- [""];
num_long(suit) ->
[];
num_long(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1381,13 +1303,11 @@ num_long(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table),
["FIELD"] = odbc_test_lib:to_upper(Fields).
%%------------------------------------------------------------------------
-num_double(doc) ->
- [""];
num_double(suit) ->
[];
num_double(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1427,13 +1347,11 @@ num_double(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table),
["FIELD"] = odbc_test_lib:to_upper(Fields2).
%%------------------------------------------------------------------------
-num_bignum(doc) ->
- [""];
num_bignum(suit) ->
[];
num_bignum(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1460,13 +1378,13 @@ num_bignum(Config) when is_list(Config) ->
["FIELD"] = odbc_test_lib:to_upper(Fields1).
%%------------------------------------------------------------------------
-utf8(doc) ->
- ["Test unicode support"];
+utf8() ->
+ [{doc,"Test unicode support"}].
utf8(suit) ->
[];
utf8(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++ "(FIELD text)"),
@@ -1488,30 +1406,30 @@ utf8(Config) when is_list(Config) ->
end,
Latin1Data),
- test_server:format("UnicodeIn: ~p ~n",[UnicodeIn]),
+ ct:pal("UnicodeIn: ~p ~n",[UnicodeIn]),
{updated, _} = odbc:param_query(Ref,"INSERT INTO " ++ Table ++ "(FIELD) values(?)",
[{{sql_varchar,50}, UnicodeIn}]),
{selected,_,UnicodeOut} = odbc:sql_query(Ref,"SELECT * FROM " ++ Table),
- test_server:format("UnicodeOut: ~p~n", [UnicodeOut]),
+ ct:pal("UnicodeOut: ~p~n", [UnicodeOut]),
Result = lists:map(fun({Char}) ->
unicode:characters_to_list(Char,utf8)
end, UnicodeOut),
- test_server:format("Result: ~p ~n", [Result]),
+ ct:pal("Result: ~p ~n", [Result]),
Latin1Data = Result.
%%------------------------------------------------------------------------
-nchar(doc) ->
- ["Test unicode nchar support in sqlserver"];
+nchar() ->
+ [{doc,"Test unicode nchar support in sqlserver"}].
nchar(suit) ->
[];
nchar(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1521,13 +1439,13 @@ nchar(Config) when is_list(Config) ->
%%------------------------------------------------------------------------
-nvarchar(doc) ->
- ["Test 'unicode' nvarchar support"];
+nvarchar() ->
+ [{doc,"Test 'unicode' nvarchar support"}].
nvarchar(suit) ->
[];
nvarchar(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1536,13 +1454,11 @@ nvarchar(Config) when is_list(Config) ->
w_char_support(Ref, Table, sql_wlongvarchar, 50).
%%------------------------------------------------------------------------
-timestamp(doc) ->
- [""];
timestamp(suit) ->
[];
timestamp(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1583,21 +1499,21 @@ w_char_support(Ref, Table, CharType, Size) ->
end,
Latin1Data),
- test_server:format("UnicodeIn (utf 16): ~p ~n",[UnicodeIn]),
+ ct:pal("UnicodeIn (utf 16): ~p ~n",[UnicodeIn]),
{updated, _} = odbc:param_query(Ref, "INSERT INTO " ++ Table ++ "(FIELD) values(?)",
[{{CharType, Size},UnicodeIn}]),
{selected,_,UnicodeOut} = odbc:sql_query(Ref,"SELECT * FROM " ++ Table),
- test_server:format("UnicodeOut: ~p~n", [UnicodeOut]),
+ ct:pal("UnicodeOut: ~p~n", [UnicodeOut]),
PadResult = lists:map(fun({Unicode}) ->
unicode:characters_to_list(Unicode,{utf16,little})
end,
UnicodeOut),
- test_server:format("Result: ~p~n", [PadResult]),
+ ct:pal("Result: ~p~n", [PadResult]),
Result = lists:map(fun(Str) -> string:strip(Str) end, PadResult),
diff --git a/lib/odbc/test/odbc_query_SUITE.erl b/lib/odbc/test/odbc_query_SUITE.erl
index e8c2df7c31..c283872965 100644
--- a/lib/odbc/test/odbc_query_SUITE.erl
+++ b/lib/odbc/test/odbc_query_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,6 @@
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-include("odbc_test.hrl").
%%--------------------------------------------------------------------
@@ -114,6 +113,7 @@ init_per_suite(Config) when is_list(Config) ->
false ->
case (catch odbc:start()) of
ok ->
+ ct:timetrap(?default_timeout),
[{tableName, odbc_test_lib:unique_table_name()}| Config];
_ ->
{skip, "ODBC not startable"}
@@ -145,10 +145,10 @@ end_per_suite(_Config) ->
init_per_testcase(_Case, Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
odbc_test_lib:strict(Ref, ?RDBMS),
- Dog = test_server:timetrap(?default_timeout),
- Temp = lists:keydelete(connection_ref, 1, Config),
- NewConfig = lists:keydelete(watchdog, 1, Temp),
- [{watchdog, Dog}, {connection_ref, Ref} | NewConfig].
+
+ NewConfig = lists:keydelete(connection_ref, 1, Config),
+
+ [{connection_ref, Ref} | NewConfig].
%%--------------------------------------------------------------------
%% Function: end_per_testcase(Case, Config) -> _
@@ -159,27 +159,23 @@ init_per_testcase(_Case, Config) ->
%% Description: Cleanup after each test case
%%--------------------------------------------------------------------
end_per_testcase(_Case, Config) ->
- Ref = ?config(connection_ref, Config),
+ Ref = proplists:get_value(connection_ref, Config),
ok = odbc:disconnect(Ref),
%% Clean up if needed
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{ok, NewRef} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
odbc:sql_query(NewRef, "DROP TABLE " ++ Table),
- odbc:disconnect(NewRef),
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+ odbc:disconnect(NewRef).
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-stored_proc(doc)->
- ["Test stored proc with OUT param"];
-stored_proc(suite) -> [];
+stored_proc()->
+ [{doc, "Test stored proc with OUT param"}].
stored_proc(Config) when is_list(Config) ->
case ?RDBMS of
X when X == oracle; X == postgres->
- Ref = ?config(connection_ref, Config),
+ Ref = proplists:get_value(connection_ref, Config),
{updated, _} =
odbc:sql_query(Ref,
?RDBMS:stored_proc_integer_out()),
@@ -193,12 +189,11 @@ stored_proc(Config) when is_list(Config) ->
{skip, "stored proc not yet supported"}
end.
-sql_query(doc)->
- ["Test the common cases"];
-sql_query(suite) -> [];
+sql_query()->
+ [{doc, "Test the common cases"}].
sql_query(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -236,14 +231,14 @@ sql_query(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-select_count(doc) ->
- ["Tests select_count/[2,3]'s timeout, "
- " select_count's functionality will be better tested by other tests "
- " such as first."];
+select_count() ->
+ [{doc, "Tests select_count/[2,3]'s timeout, "
+ " select_count's functionality will be better tested by other tests "
+ " such as first."}].
select_count(sute) -> [];
select_count(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -258,12 +253,11 @@ select_count(Config) when is_list(Config) ->
(catch odbc:select_count(Ref, "SELECT * FROM ", -1)),
ok.
%%-------------------------------------------------------------------------
-first(doc) ->
- ["Tests first/[1,2]"];
-first(suite) -> [];
+first() ->
+ [doc, {"Tests first/[1,2]"}].
first(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -285,12 +279,11 @@ first(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-last(doc) ->
- ["Tests last/[1,2]"];
-last(suite) -> [];
+last() ->
+ [{doc, "Tests last/[1,2]"}].
last(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -312,12 +305,11 @@ last(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-next(doc) ->
- ["Tests next/[1,2]"];
-next(suite) -> [];
+next() ->
+ [{doc, "Tests next/[1,2]"}].
next(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -338,12 +330,11 @@ next(Config) when is_list(Config) ->
{'EXIT', {function_clause, _}} = (catch odbc:next(Ref, -1)),
ok.
%%-------------------------------------------------------------------------
-prev(doc) ->
- ["Tests prev/[1,2]"];
-prev(suite) -> [];
+prev() ->
+ [{doc, "Tests prev/[1,2]"}].
prev(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -367,12 +358,12 @@ prev(Config) when is_list(Config) ->
{'EXIT', {function_clause, _}} = (catch odbc:prev(Ref, -1)),
ok.
%%-------------------------------------------------------------------------
-select_next(doc) ->
- ["Tests select/[4,5] with CursorRelation = next "];
+select_next() ->
+ [{doc, "Tests select/[4,5] with CursorRelation = next "}].
select_next(suit) -> [];
select_next(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -408,12 +399,12 @@ select_next(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-select_relative(doc) ->
- ["Tests select/[4,5] with CursorRelation = relative "];
+select_relative() ->
+ [{doc, "Tests select/[4,5] with CursorRelation = relative "}].
select_relative(suit) -> [];
select_relative(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -449,12 +440,12 @@ select_relative(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-select_absolute(doc) ->
- ["Tests select/[4,5] with CursorRelation = absolute "];
+select_absolute() ->
+ [{doc, "Tests select/[4,5] with CursorRelation = absolute "}].
select_absolute(suit) -> [];
select_absolute(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -483,12 +474,11 @@ select_absolute(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-create_table_twice(doc) ->
- ["Test what happens if you try to create the same table twice."];
-create_table_twice(suite) -> [];
+create_table_twice() ->
+ [{doc, "Test what happens if you try to create the same table twice."}].
create_table_twice(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -502,12 +492,11 @@ create_table_twice(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-delete_table_twice(doc) ->
- ["Test what happens if you try to delete the same table twice."];
-delete_table_twice(suite) -> [];
+delete_table_twice() ->
+ [{doc, "Test what happens if you try to delete the same table twice."}].
delete_table_twice(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -519,12 +508,12 @@ delete_table_twice(Config) when is_list(Config) ->
ok.
%-------------------------------------------------------------------------
-duplicate_key(doc) ->
- ["Test what happens if you try to use the same key twice"];
+duplicate_key() ->
+ [{doc, "Test what happens if you try to use the same key twice"}].
duplicate_key(suit) -> [];
duplicate_key(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -540,13 +529,12 @@ duplicate_key(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-not_connection_owner(doc) ->
- ["Test what happens if a process that did not start the connection"
- " tries to acess it."];
-not_connection_owner(suite) -> [];
+not_connection_owner() ->
+ [{doc, "Test what happens if a process that did not start the connection"
+ " tries to acess it."}].
not_connection_owner(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
spawn_link(?MODULE, not_owner, [self(), Ref, Table]),
@@ -565,12 +553,11 @@ not_owner(Pid, Ref, Table) ->
Pid ! continue.
%%-------------------------------------------------------------------------
-no_result_set(doc) ->
- ["Tests what happens if you try to use a function that needs an "
- "associated result set when there is none."];
-no_result_set(suite) -> [];
+no_result_set() ->
+ [{doc, "Tests what happens if you try to use a function that needs an "
+ "associated result set when there is none."}].
no_result_set(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
+ Ref = proplists:get_value(connection_ref, Config),
{error, result_set_does_not_exist} = odbc:first(Ref),
{error, result_set_does_not_exist} = odbc:last(Ref),
@@ -583,13 +570,11 @@ no_result_set(Config) when is_list(Config) ->
odbc:select(Ref, {relative, 2}, 1),
ok.
%%-------------------------------------------------------------------------
-query_error(doc) ->
- ["Test what happens if there is an error in the query."];
-query_error(suite) ->
- [];
+query_error() ->
+ [{doc, "Test what happens if there is an error in the query."}].
query_error(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -606,15 +591,13 @@ query_error(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-multiple_select_result_sets(doc) ->
- ["Test what happens if you have a batch of select queries."];
-multiple_select_result_sets(suite) ->
- [];
+multiple_select_result_sets() ->
+ [{doc, "Test what happens if you have a batch of select queries."}].
multiple_select_result_sets(Config) when is_list(Config) ->
case ?RDBMS of
sqlserver ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -641,16 +624,14 @@ multiple_select_result_sets(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-multiple_mix_result_sets(doc) ->
- ["Test what happens if you have a batch of select and other type of"
- " queries."];
-multiple_mix_result_sets(suite) ->
- [];
+multiple_mix_result_sets() ->
+ [{doc, "Test what happens if you have a batch of select and other type of"
+ " queries."}].
multiple_mix_result_sets(Config) when is_list(Config) ->
case ?RDBMS of
sqlserver ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -675,15 +656,13 @@ multiple_mix_result_sets(Config) when is_list(Config) ->
{skip, "multiple result_set not supported"}
end.
%%-------------------------------------------------------------------------
-multiple_result_sets_error(doc) ->
- ["Test what happens if one of the batched queries fails."];
-multiple_result_sets_error(suite) ->
- [];
+multiple_result_sets_error() ->
+ [{doc, "Test what happens if one of the batched queries fails."}].
multiple_result_sets_error(Config) when is_list(Config) ->
case ?RDBMS of
sqlserver ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -710,15 +689,13 @@ multiple_result_sets_error(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-param_insert_tiny_int(doc)->
- ["Test insertion of tiny ints by parameterized queries."];
-param_insert_tiny_int(suite) ->
- [];
+param_insert_tiny_int()->
+ [{doc,"Test insertion of tiny ints by parameterized queries."}].
param_insert_tiny_int(Config) when is_list(Config) ->
case ?RDBMS of
sqlserver ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -747,13 +724,11 @@ param_insert_tiny_int(Config) when is_list(Config) ->
{skip, "Type tiniyint not supported"}
end.
%%-------------------------------------------------------------------------
-param_insert_small_int(doc)->
- ["Test insertion of small ints by parameterized queries."];
-param_insert_small_int(suite) ->
- [];
+param_insert_small_int()->
+ [{doc,"Test insertion of small ints by parameterized queries."}].
param_insert_small_int(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -779,13 +754,11 @@ param_insert_small_int(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_int(doc)->
- ["Test insertion of ints by parameterized queries."];
-param_insert_int(suite) ->
- [];
+param_insert_int()->
+ [{doc,"Test insertion of ints by parameterized queries."}].
param_insert_int(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -811,13 +784,11 @@ param_insert_int(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_integer(doc)->
- ["Test insertion of integers by parameterized queries."];
-param_insert_integer(suite) ->
- [];
+param_insert_integer()->
+ [{doc,"Test insertion of integers by parameterized queries."}].
param_insert_integer(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -843,13 +814,11 @@ param_insert_integer(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_decimal(doc)->
- ["Test insertion of decimal numbers by parameterized queries."];
-param_insert_decimal(suite) ->
- [];
+param_insert_decimal()->
+ [{doc,"Test insertion of decimal numbers by parameterized queries."}].
param_insert_decimal(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -894,13 +863,11 @@ param_insert_decimal(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_numeric(doc)->
- ["Test insertion of numeric numbers by parameterized queries."];
-param_insert_numeric(suite) ->
- [];
+param_insert_numeric()->
+ [{doc,"Test insertion of numeric numbers by parameterized queries."}].
param_insert_numeric(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -945,13 +912,11 @@ param_insert_numeric(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_char(doc)->
- ["Test insertion of fixed length string by parameterized queries."];
-param_insert_char(suite) ->
- [];
+param_insert_char()->
+ [{doc,"Test insertion of fixed length string by parameterized queries."}].
param_insert_char(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -981,13 +946,11 @@ param_insert_char(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_character(doc)->
- ["Test insertion of fixed length string by parameterized queries."];
-param_insert_character(suite) ->
- [];
+param_insert_character()->
+ [{doc,"Test insertion of fixed length string by parameterized queries."}].
param_insert_character(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1018,13 +981,11 @@ param_insert_character(Config) when is_list(Config) ->
ok.
%%------------------------------------------------------------------------
-param_insert_char_varying(doc)->
- ["Test insertion of variable length strings by parameterized queries."];
-param_insert_char_varying(suite) ->
- [];
+param_insert_char_varying()->
+ [{doc,"Test insertion of variable length strings by parameterized queries."}].
param_insert_char_varying(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1055,13 +1016,11 @@ param_insert_char_varying(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_character_varying(doc)->
- ["Test insertion of variable length strings by parameterized queries."];
-param_insert_character_varying(suite) ->
- [];
+param_insert_character_varying()->
+ [{doc,"Test insertion of variable length strings by parameterized queries."}].
param_insert_character_varying(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1092,13 +1051,11 @@ param_insert_character_varying(Config) when is_list(Config) ->
[{{sql_varchar, 10}, ["1", 2]}])),
ok.
%%-------------------------------------------------------------------------
-param_insert_float(doc)->
- ["Test insertion of floats by parameterized queries."];
-param_insert_float(suite) ->
- [];
+param_insert_float()->
+ [{doc,"Test insertion of floats by parameterized queries."}].
param_insert_float(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1121,7 +1078,7 @@ param_insert_float(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail(float_numbers_do_not_match)
+ ct:fail(float_numbers_do_not_match)
end,
{'EXIT',{badarg,odbc,param_query,'Params'}} =
@@ -1131,13 +1088,11 @@ param_insert_float(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_real(doc)->
- ["Test insertion of real numbers by parameterized queries."];
-param_insert_real(suite) ->
- [];
+param_insert_real()->
+ [{doc,"Test insertion of real numbers by parameterized queries."}].
param_insert_real(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1162,7 +1117,7 @@ param_insert_real(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail(real_numbers_do_not_match)
+ ct:fail(real_numbers_do_not_match)
end,
{'EXIT',{badarg,odbc,param_query,'Params'}} =
@@ -1172,13 +1127,11 @@ param_insert_real(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_double(doc)->
- ["Test insertion of doubles by parameterized queries."];
-param_insert_double(suite) ->
- [];
+param_insert_double()->
+ [{doc,"Test insertion of doubles by parameterized queries."}].
param_insert_double(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1201,7 +1154,7 @@ param_insert_double(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail(double_numbers_do_not_match)
+ ct:fail(double_numbers_do_not_match)
end,
{'EXIT',{badarg,odbc,param_query,'Params'}} =
@@ -1211,13 +1164,11 @@ param_insert_double(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_mix(doc)->
- ["Test insertion of a mixture of datatypes by parameterized queries."];
-param_insert_mix(suite) ->
- [];
+param_insert_mix()->
+ [{doc,"Test insertion of a mixture of datatypes by parameterized queries."}].
param_insert_mix(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1238,13 +1189,11 @@ param_insert_mix(Config) when is_list(Config) ->
odbc:sql_query(Ref, "SELECT * FROM " ++ Table),
ok.
%%-------------------------------------------------------------------------
-param_update(doc)->
- ["Test parameterized update query."];
-param_update(suite) ->
- [];
+param_update()->
+ [{doc,"Test parameterized update query."}].
param_update(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1273,12 +1222,12 @@ param_update(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-delete_nonexisting_row(doc) -> % OTP-5759
- ["Make a delete...where with false conditions (0 rows deleted). ",
- "This used to give an error message (see ticket OTP-5759)."];
+delete_nonexisting_row() -> % OTP-5759
+ [{doc, "Make a delete...where with false conditions (0 rows deleted). ",
+ "This used to give an error message (see ticket OTP-5759)."}].
delete_nonexisting_row(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref, "CREATE TABLE " ++ Table
@@ -1302,13 +1251,11 @@ delete_nonexisting_row(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_delete(doc) ->
- ["Test parameterized delete query."];
-param_delete(suite) ->
- [];
+param_delete() ->
+ [{doc,"Test parameterized delete query."}].
param_delete(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1337,13 +1284,11 @@ param_delete(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-param_select(doc) ->
- ["Test parameterized select query."];
-param_select(suite) ->
- [];
+param_select() ->
+ [{doc,"Test parameterized select query."}].
param_select(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1367,13 +1312,11 @@ param_select(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_select_empty_params(doc) ->
- ["Test parameterized select query with no parameters."];
-param_select_empty_params(suite) ->
- [];
+param_select_empty_params() ->
+ [{doc,"Test parameterized select query with no parameters."}].
param_select_empty_params(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1397,13 +1340,11 @@ param_select_empty_params(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_delete_empty_params(doc) ->
- ["Test parameterized delete query with no parameters."];
-param_delete_empty_params(suite) ->
- [];
+param_delete_empty_params() ->
+ [{doc,"Test parameterized delete query with no parameters."}].
param_delete_empty_params(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1431,13 +1372,11 @@ param_delete_empty_params(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_integer(doc) ->
- ["Test describe_table/[2,3] for integer columns."];
-describe_integer(suite) ->
- [];
+describe_integer() ->
+ [{doc,"Test describe_table/[2,3] for integer columns."}].
describe_integer(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1450,13 +1389,11 @@ describe_integer(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_string(doc) ->
- ["Test describe_table/[2,3] for string columns."];
-describe_string(suite) ->
- [];
+describe_string() ->
+ [{doc,"Test describe_table/[2,3] for string columns."}].
describe_string(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1471,13 +1408,11 @@ describe_string(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_floating(doc) ->
- ["Test describe_table/[2,3] for floting columns."];
-describe_floating(suite) ->
- [];
+describe_floating() ->
+ [{doc,"Test describe_table/[2,3] for floting columns."}].
describe_floating(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1491,14 +1426,12 @@ describe_floating(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_dec_num(doc) ->
- ["Test describe_table/[2,3] for decimal and numerical columns"];
-describe_dec_num(suite) ->
- [];
+describe_dec_num() ->
+ [{doc,"Test describe_table/[2,3] for decimal and numerical columns"}].
describe_dec_num(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1512,14 +1445,12 @@ describe_dec_num(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-describe_timestamp(doc) ->
- ["Test describe_table/[2,3] for tinmestap columns"];
-describe_timestamp(suite) ->
- [];
+describe_timestamp() ->
+ [{doc,"Test describe_table/[2,3] for tinmestap columns"}].
describe_timestamp(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1531,14 +1462,12 @@ describe_timestamp(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_no_such_table(doc) ->
- ["Test what happens if you try to describe a table that does not exist."];
-describe_no_such_table(suite) ->
- [];
+describe_no_such_table() ->
+ [{doc,"Test what happens if you try to describe a table that does not exist."}].
describe_no_such_table(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{error, _ } = odbc:describe_table(Ref, Table),
ok.
@@ -1550,10 +1479,10 @@ describe_no_such_table(Config) when is_list(Config) ->
is_driver_error(Error) ->
case is_list(Error) of
true ->
- test_server:format("Driver error ~p~n", [Error]),
+ ct:pal("Driver error ~p~n", [Error]),
ok;
false ->
- test_server:fail(Error)
+ ct:fail(Error)
end.
is_supported_multiple_resultsets(sqlserver) ->
true;
diff --git a/lib/odbc/test/odbc_start_SUITE.erl b/lib/odbc/test/odbc_start_SUITE.erl
index 8fb564d1f9..310b92ca29 100644
--- a/lib/odbc/test/odbc_start_SUITE.erl
+++ b/lib/odbc/test/odbc_start_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,6 @@
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-include("odbc_test.hrl").
%% Test server callback functions
@@ -50,6 +49,7 @@ init_per_suite(Config) ->
_ ->
%% Make sure odbc is not already started
odbc:stop(),
+ ct:timetrap(?TIMEOUT),
[{tableName, odbc_test_lib:unique_table_name()} | Config]
end
end.
@@ -75,11 +75,9 @@ end_per_suite(_Config) ->
%% variable, but should NOT alter/remove any existing entries.
%% Description: Initialization before each test case
%%--------------------------------------------------------------------
-init_per_testcase(_TestCase, Config0) ->
- test_server:format("ODBCINI = ~p~n", [os:getenv("ODBCINI")]),
- Config = lists:keydelete(watchdog, 1, Config0),
- Dog = test_server:timetrap(?TIMEOUT),
- [{watchdog, Dog} | Config].
+init_per_testcase(_TestCase, Config) ->
+ ct:pal("ODBCINI = ~p~n", [os:getenv("ODBCINI")]),
+ Config.
%%--------------------------------------------------------------------
%% Function: end_per_testcase(TestCase, Config) -> _
@@ -89,15 +87,8 @@ init_per_testcase(_TestCase, Config0) ->
%% A list of key/value pairs, holding the test case configuration.
%% Description: Cleanup after each test case
%%--------------------------------------------------------------------
-end_per_testcase(_TestCase, Config) ->
- Dog = ?config(watchdog, Config),
- case Dog of
- undefined ->
- ok;
- _ ->
- test_server:timetrap_cancel(Dog)
- end.
-
+end_per_testcase(_TestCase, _Config) ->
+ ok.
%%--------------------------------------------------------------------
%% Function: all(Clause) -> TestCases
%% Clause - atom() - suite | doc
@@ -136,10 +127,8 @@ app(Config) when is_list(Config) ->
appup(Config) when is_list(Config) ->
ok = ?t:appup_test(odbc).
-start(doc) ->
- ["Test start/stop of odbc"];
-start(suite) ->
- [];
+start() ->
+ [{doc,"Test start/stop of odbc"}].
start(Config) when is_list(Config) ->
PlatformOptions = odbc_test_lib:platform_options(),
{error,odbc_not_started} = odbc:connect(?RDBMS:connection_string(),
@@ -154,9 +143,9 @@ start(Config) when is_list(Config) ->
start_odbc(transient),
start_odbc(permanent);
{error, odbc_not_started} ->
- test_server:fail(start_failed);
+ ct:fail(start_failed);
Error ->
- test_server:format("Connection failed: ~p~n", [Error]),
+ ct:pal("Connection failed: ~p~n", [Error]),
{skip, "ODBC is not properly setup"}
end.
@@ -167,13 +156,12 @@ start_odbc(Type) ->
ok = odbc:disconnect(Ref),
odbc:stop();
{error, odbc_not_started} ->
- test_server:fail(start_failed)
+ ct:fail(start_failed)
end.
-long_connection_line(doc)->
- ["Test a connection line longer than 127 characters"];
-long_connection_line(suite) -> [];
+long_connection_line()->
+ [{doc,"Test a connection line longer than 127 characters"}].
long_connection_line(_Config) ->
odbc:start(),
String133 = "unknown_odbc_parameter=01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789",
diff --git a/lib/odbc/test/odbc_test.hrl b/lib/odbc/test/odbc_test.hrl
index 7a4d9f3087..24ae2a4c29 100644
--- a/lib/odbc/test/odbc_test.hrl
+++ b/lib/odbc/test/odbc_test.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/test/odbc_test_lib.erl b/lib/odbc/test/odbc_test_lib.erl
index 6f49c019e3..cf82d4d32a 100644
--- a/lib/odbc/test/odbc_test_lib.erl
+++ b/lib/odbc/test/odbc_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
-compile(export_all).
-include("odbc_test.hrl").
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
unique_table_name() ->
lists:reverse(lists:foldl(fun($@, Acc) -> [$t, $A |Acc] ;
@@ -61,13 +61,13 @@ odbc_check() ->
end.
check_row_count(Count, Count) ->
- test_server:format("Correct row count Count: ~p~n", [Count]),
+ ct:pal("Correct row count Count: ~p~n", [Count]),
true;
check_row_count(_, undefined) ->
- test_server:format("Undefined row count ~n", []),
+ ct:pal("Undefined row count ~n", []),
true;
check_row_count(Expected, Count) ->
- test_server:format("Incorrect row count Expected ~p Got ~p~n",
+ ct:pal("Incorrect row count Expected ~p Got ~p~n",
[Expected, Count]),
false.
diff --git a/lib/odbc/test/oracle.erl b/lib/odbc/test/oracle.erl
index 98e0147744..589401b822 100644
--- a/lib/odbc/test/oracle.erl
+++ b/lib/odbc/test/oracle.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/test/postgres.erl b/lib/odbc/test/postgres.erl
index 7b41eb8c0a..1955358206 100644
--- a/lib/odbc/test/postgres.erl
+++ b/lib/odbc/test/postgres.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/test/sqlserver.erl b/lib/odbc/test/sqlserver.erl
index 750d8d38e6..faffeaae04 100644
--- a/lib/odbc/test/sqlserver.erl
+++ b/lib/odbc/test/sqlserver.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/odbc/vsn.mk b/lib/odbc/vsn.mk
index c7c84560d1..957c6b42eb 100644
--- a/lib/odbc/vsn.mk
+++ b/lib/odbc/vsn.mk
@@ -1 +1 @@
-ODBC_VSN = 2.11.1
+ODBC_VSN = 2.11.2
diff --git a/lib/orber/COSS/CosNaming/CosNaming_BindingIterator_impl.erl b/lib/orber/COSS/CosNaming/CosNaming_BindingIterator_impl.erl
index 95602ec54b..760c003f82 100644
--- a/lib/orber/COSS/CosNaming/CosNaming_BindingIterator_impl.erl
+++ b/lib/orber/COSS/CosNaming/CosNaming_BindingIterator_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/COSS/CosNaming/Makefile b/lib/orber/COSS/CosNaming/Makefile
index 0eca8ddfab..108663396c 100644
--- a/lib/orber/COSS/CosNaming/Makefile
+++ b/lib/orber/COSS/CosNaming/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/COSS/CosNaming/lname.erl b/lib/orber/COSS/CosNaming/lname.erl
index 388c4ac022..41f9f68d20 100644
--- a/lib/orber/COSS/CosNaming/lname.erl
+++ b/lib/orber/COSS/CosNaming/lname.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/COSS/CosNaming/lname.hrl b/lib/orber/COSS/CosNaming/lname.hrl
index 8f609df3ae..0c0eef86ab 100644
--- a/lib/orber/COSS/CosNaming/lname.hrl
+++ b/lib/orber/COSS/CosNaming/lname.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/COSS/CosNaming/lname_component.erl b/lib/orber/COSS/CosNaming/lname_component.erl
index a3715d93d1..4dead49a78 100644
--- a/lib/orber/COSS/CosNaming/lname_component.erl
+++ b/lib/orber/COSS/CosNaming/lname_component.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/COSS/CosNaming/orber_cosnaming.hrl b/lib/orber/COSS/CosNaming/orber_cosnaming.hrl
index c36ab47739..2950f7a11f 100644
--- a/lib/orber/COSS/CosNaming/orber_cosnaming.hrl
+++ b/lib/orber/COSS/CosNaming/orber_cosnaming.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/COSS/CosNaming/orber_cosnaming_utils.erl b/lib/orber/COSS/CosNaming/orber_cosnaming_utils.erl
index cb240c3011..c21e46036b 100644
--- a/lib/orber/COSS/CosNaming/orber_cosnaming_utils.erl
+++ b/lib/orber/COSS/CosNaming/orber_cosnaming_utils.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/Makefile b/lib/orber/Makefile
index 920cc7350c..7db588f206 100644
--- a/lib/orber/Makefile
+++ b/lib/orber/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/c_src/Makefile b/lib/orber/c_src/Makefile
index bbf51d0efd..bad1d3ddb0 100644
--- a/lib/orber/c_src/Makefile
+++ b/lib/orber/c_src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/c_src/Makefile.in b/lib/orber/c_src/Makefile.in
index e1323f1cc9..980e780451 100644
--- a/lib/orber/c_src/Makefile.in
+++ b/lib/orber/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/doc/src/CosNaming.xml b/lib/orber/doc/src/CosNaming.xml
index a4e8e02702..d69b604f2f 100644
--- a/lib/orber/doc/src/CosNaming.xml
+++ b/lib/orber/doc/src/CosNaming.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/CosNaming_BindingIterator.xml b/lib/orber/doc/src/CosNaming_BindingIterator.xml
index 2a8f3633ca..69b0f42b22 100644
--- a/lib/orber/doc/src/CosNaming_BindingIterator.xml
+++ b/lib/orber/doc/src/CosNaming_BindingIterator.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/CosNaming_NamingContext.xml b/lib/orber/doc/src/CosNaming_NamingContext.xml
index 313015f5ee..96a6367cbb 100644
--- a/lib/orber/doc/src/CosNaming_NamingContext.xml
+++ b/lib/orber/doc/src/CosNaming_NamingContext.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/CosNaming_NamingContextExt.xml b/lib/orber/doc/src/CosNaming_NamingContextExt.xml
index ede908e13f..a571b97ccb 100644
--- a/lib/orber/doc/src/CosNaming_NamingContextExt.xml
+++ b/lib/orber/doc/src/CosNaming_NamingContextExt.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2000</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/Makefile b/lib/orber/doc/src/Makefile
index c9c362b336..ecb0206443 100644
--- a/lib/orber/doc/src/Makefile
+++ b/lib/orber/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/doc/src/Module_Interface.xml b/lib/orber/doc/src/Module_Interface.xml
index 27335673cc..a809bcf02f 100644
--- a/lib/orber/doc/src/Module_Interface.xml
+++ b/lib/orber/doc/src/Module_Interface.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/Orber/InitialReference.java b/lib/orber/doc/src/Orber/InitialReference.java
index 0ae2ebfb68..35a8c2437b 100644
--- a/lib/orber/doc/src/Orber/InitialReference.java
+++ b/lib/orber/doc/src/Orber/InitialReference.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/orber/doc/src/Orber/Makefile b/lib/orber/doc/src/Orber/Makefile
index 278fa182ee..16a3994499 100644
--- a/lib/orber/doc/src/Orber/Makefile
+++ b/lib/orber/doc/src/Orber/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/doc/src/any.xml b/lib/orber/doc/src/any.xml
index 8234b62be3..f51712c97e 100644
--- a/lib/orber/doc/src/any.xml
+++ b/lib/orber/doc/src/any.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1998</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/book.xml b/lib/orber/doc/src/book.xml
index dc073fdeda..81bd5a8f65 100644
--- a/lib/orber/doc/src/book.xml
+++ b/lib/orber/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_contents.xml b/lib/orber/doc/src/ch_contents.xml
index 6ac9f1cb11..b783e63aee 100644
--- a/lib/orber/doc/src/ch_contents.xml
+++ b/lib/orber/doc/src/ch_contents.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_debugging.xml b/lib/orber/doc/src/ch_debugging.xml
index 2fbc9285eb..a036cf5231 100644
--- a/lib/orber/doc/src/ch_debugging.xml
+++ b/lib/orber/doc/src/ch_debugging.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_exceptions.xml b/lib/orber/doc/src/ch_exceptions.xml
index 8a8cb9d470..52735dc394 100644
--- a/lib/orber/doc/src/ch_exceptions.xml
+++ b/lib/orber/doc/src/ch_exceptions.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_idl_to_erlang_mapping.xml b/lib/orber/doc/src/ch_idl_to_erlang_mapping.xml
index debd0cf888..a0feda3f84 100644
--- a/lib/orber/doc/src/ch_idl_to_erlang_mapping.xml
+++ b/lib/orber/doc/src/ch_idl_to_erlang_mapping.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_ifr.xml b/lib/orber/doc/src/ch_ifr.xml
index c34a6fabd5..09302ab6cc 100644
--- a/lib/orber/doc/src/ch_ifr.xml
+++ b/lib/orber/doc/src/ch_ifr.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_install.xml b/lib/orber/doc/src/ch_install.xml
index 5fb7d7b9a3..9bc974225d 100644
--- a/lib/orber/doc/src/ch_install.xml
+++ b/lib/orber/doc/src/ch_install.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_interceptors.xml b/lib/orber/doc/src/ch_interceptors.xml
index 111e00cb5b..392fe7de82 100644
--- a/lib/orber/doc/src/ch_interceptors.xml
+++ b/lib/orber/doc/src/ch_interceptors.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_introduction.xml b/lib/orber/doc/src/ch_introduction.xml
index fc86ad2dc6..f04fedd0a7 100644
--- a/lib/orber/doc/src/ch_introduction.xml
+++ b/lib/orber/doc/src/ch_introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_naming_service.xml b/lib/orber/doc/src/ch_naming_service.xml
index 4a9c970cb4..bcbab2a597 100644
--- a/lib/orber/doc/src/ch_naming_service.xml
+++ b/lib/orber/doc/src/ch_naming_service.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_orber_kernel.xml b/lib/orber/doc/src/ch_orber_kernel.xml
index 66d33d065c..396e1360fd 100644
--- a/lib/orber/doc/src/ch_orber_kernel.xml
+++ b/lib/orber/doc/src/ch_orber_kernel.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_orberweb.xml b/lib/orber/doc/src/ch_orberweb.xml
index 804d22ff49..be1d7fb983 100644
--- a/lib/orber/doc/src/ch_orberweb.xml
+++ b/lib/orber/doc/src/ch_orberweb.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_security.xml b/lib/orber/doc/src/ch_security.xml
index 6b5c9b90ec..151e417079 100644
--- a/lib/orber/doc/src/ch_security.xml
+++ b/lib/orber/doc/src/ch_security.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ch_stubs.xml b/lib/orber/doc/src/ch_stubs.xml
index e055658b6c..144191a66a 100644
--- a/lib/orber/doc/src/ch_stubs.xml
+++ b/lib/orber/doc/src/ch_stubs.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/corba.xml b/lib/orber/doc/src/corba.xml
index 89288cdf6b..d89f035dba 100644
--- a/lib/orber/doc/src/corba.xml
+++ b/lib/orber/doc/src/corba.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/corba_object.xml b/lib/orber/doc/src/corba_object.xml
index 37b0dc9fd0..09a4b0bc3c 100644
--- a/lib/orber/doc/src/corba_object.xml
+++ b/lib/orber/doc/src/corba_object.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/example_part.xml b/lib/orber/doc/src/example_part.xml
index 9460fdc9b0..61c9524cc3 100644
--- a/lib/orber/doc/src/example_part.xml
+++ b/lib/orber/doc/src/example_part.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/fixed.xml b/lib/orber/doc/src/fixed.xml
index 7036e8917f..a751476cf7 100644
--- a/lib/orber/doc/src/fixed.xml
+++ b/lib/orber/doc/src/fixed.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2002</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/interceptors.xml b/lib/orber/doc/src/interceptors.xml
index 780739fd96..0aade8ffb4 100644
--- a/lib/orber/doc/src/interceptors.xml
+++ b/lib/orber/doc/src/interceptors.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/intro_part.xml b/lib/orber/doc/src/intro_part.xml
index 45c121cc57..7e5520e42e 100644
--- a/lib/orber/doc/src/intro_part.xml
+++ b/lib/orber/doc/src/intro_part.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2002</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/lname.xml b/lib/orber/doc/src/lname.xml
index dc7928e5de..09d6859777 100644
--- a/lib/orber/doc/src/lname.xml
+++ b/lib/orber/doc/src/lname.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/lname_component.xml b/lib/orber/doc/src/lname_component.xml
index bf1d1e5375..631e5d0244 100644
--- a/lib/orber/doc/src/lname_component.xml
+++ b/lib/orber/doc/src/lname_component.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/notes.xml b/lib/orber/doc/src/notes.xml
index 1da60ba486..89f258e5e9 100644
--- a/lib/orber/doc/src/notes.xml
+++ b/lib/orber/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -34,7 +34,22 @@
</header>
- <section><title>Orber 3.8.1</title>
+ <section><title>Orber 3.8.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Orber 3.8.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/orber/doc/src/orber.xml b/lib/orber/doc/src/orber.xml
index 577bb2ee05..d8c6936515 100644
--- a/lib/orber/doc/src/orber.xml
+++ b/lib/orber/doc/src/orber.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/orber_acl.xml b/lib/orber/doc/src/orber_acl.xml
index ab3a35df36..5feda83ef6 100644
--- a/lib/orber/doc/src/orber_acl.xml
+++ b/lib/orber/doc/src/orber_acl.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2005</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/orber_diagnostics.xml b/lib/orber/doc/src/orber_diagnostics.xml
index a53391bb9a..3aad304535 100644
--- a/lib/orber/doc/src/orber_diagnostics.xml
+++ b/lib/orber/doc/src/orber_diagnostics.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/orber_ifr.xml b/lib/orber/doc/src/orber_ifr.xml
index c9b6fe6459..a667d7d9e4 100644
--- a/lib/orber/doc/src/orber_ifr.xml
+++ b/lib/orber/doc/src/orber_ifr.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/orber_tc.xml b/lib/orber/doc/src/orber_tc.xml
index 7c49ebce11..0cab8a5e4b 100644
--- a/lib/orber/doc/src/orber_tc.xml
+++ b/lib/orber/doc/src/orber_tc.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1998</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/part.xml b/lib/orber/doc/src/part.xml
index 236e93e73e..ef84b8c05a 100644
--- a/lib/orber/doc/src/part.xml
+++ b/lib/orber/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/part_notes.xml b/lib/orber/doc/src/part_notes.xml
index d4c217e158..61d9d4c3b9 100644
--- a/lib/orber/doc/src/part_notes.xml
+++ b/lib/orber/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/ref_man.xml b/lib/orber/doc/src/ref_man.xml
index 4785c18ff6..6fa409538d 100644
--- a/lib/orber/doc/src/ref_man.xml
+++ b/lib/orber/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/doc/src/tools_debugging_part.xml b/lib/orber/doc/src/tools_debugging_part.xml
index 7a718ad448..94af44833c 100644
--- a/lib/orber/doc/src/tools_debugging_part.xml
+++ b/lib/orber/doc/src/tools_debugging_part.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2002</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/orber/examples/Makefile b/lib/orber/examples/Makefile
index 06b0be9c4d..bf1ff13707 100644
--- a/lib/orber/examples/Makefile
+++ b/lib/orber/examples/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/examples/Stack/Makefile b/lib/orber/examples/Stack/Makefile
index abdd65823f..5348c624e3 100644
--- a/lib/orber/examples/Stack/Makefile
+++ b/lib/orber/examples/Stack/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/examples/Stack/StackClient.java b/lib/orber/examples/Stack/StackClient.java
index 55c9c258bd..55e967a330 100644
--- a/lib/orber/examples/Stack/StackClient.java
+++ b/lib/orber/examples/Stack/StackClient.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/orber/examples/Stack/StackModule_StackFactory_impl.erl b/lib/orber/examples/Stack/StackModule_StackFactory_impl.erl
index 1fc1f6fa8e..76e449971f 100644
--- a/lib/orber/examples/Stack/StackModule_StackFactory_impl.erl
+++ b/lib/orber/examples/Stack/StackModule_StackFactory_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/examples/Stack/StackModule_Stack_impl.erl b/lib/orber/examples/Stack/StackModule_Stack_impl.erl
index 5b882badec..ff4dc90829 100644
--- a/lib/orber/examples/Stack/StackModule_Stack_impl.erl
+++ b/lib/orber/examples/Stack/StackModule_Stack_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/examples/Stack/stack_client.erl b/lib/orber/examples/Stack/stack_client.erl
index 4b508ace8d..6e32195b1b 100644
--- a/lib/orber/examples/Stack/stack_client.erl
+++ b/lib/orber/examples/Stack/stack_client.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/examples/Stack/stack_factory.erl b/lib/orber/examples/Stack/stack_factory.erl
index 7f9cfb7196..b5b455ae5a 100644
--- a/lib/orber/examples/Stack/stack_factory.erl
+++ b/lib/orber/examples/Stack/stack_factory.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/include/corba.hrl b/lib/orber/include/corba.hrl
index 9acdfd808b..fb1c2a5a94 100644
--- a/lib/orber/include/corba.hrl
+++ b/lib/orber/include/corba.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/include/ifr_types.hrl b/lib/orber/include/ifr_types.hrl
index 451b5c622d..ceb8bbe885 100644
--- a/lib/orber/include/ifr_types.hrl
+++ b/lib/orber/include/ifr_types.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/include/orber_pi.hrl b/lib/orber/include/orber_pi.hrl
index b160cdae3e..7d1fa1edf2 100644
--- a/lib/orber/include/orber_pi.hrl
+++ b/lib/orber/include/orber_pi.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/java_src/Makefile b/lib/orber/java_src/Makefile
index bc604be179..d8a8843d00 100644
--- a/lib/orber/java_src/Makefile
+++ b/lib/orber/java_src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/java_src/Orber/InitialReference.java b/lib/orber/java_src/Orber/InitialReference.java
index 0ae2ebfb68..35a8c2437b 100644
--- a/lib/orber/java_src/Orber/InitialReference.java
+++ b/lib/orber/java_src/Orber/InitialReference.java
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/orber/java_src/Orber/Makefile b/lib/orber/java_src/Orber/Makefile
index d42b8ad982..3414fb2e76 100644
--- a/lib/orber/java_src/Orber/Makefile
+++ b/lib/orber/java_src/Orber/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/priv/Makefile b/lib/orber/priv/Makefile
index b8fafd952c..268c16c4c7 100644
--- a/lib/orber/priv/Makefile
+++ b/lib/orber/priv/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2012. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/Makefile b/lib/orber/src/Makefile
index 30b74c490a..7fec29a000 100644
--- a/lib/orber/src/Makefile
+++ b/lib/orber/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/OrberApp_IFR_impl.erl b/lib/orber/src/OrberApp_IFR_impl.erl
index 468e1d80a3..069f4ad17a 100644
--- a/lib/orber/src/OrberApp_IFR_impl.erl
+++ b/lib/orber/src/OrberApp_IFR_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/any.erl b/lib/orber/src/any.erl
index 03354fd632..ec7c3ba83a 100644
--- a/lib/orber/src/any.erl
+++ b/lib/orber/src/any.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/cdr_encode.erl b/lib/orber/src/cdr_encode.erl
index ce0b5066fc..f922b330a0 100644
--- a/lib/orber/src/cdr_encode.erl
+++ b/lib/orber/src/cdr_encode.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/cdrlib.erl b/lib/orber/src/cdrlib.erl
index cbe25f6d84..a181681382 100644
--- a/lib/orber/src/cdrlib.erl
+++ b/lib/orber/src/cdrlib.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/corba_boa.erl b/lib/orber/src/corba_boa.erl
index 830e3795e6..12b063a5db 100644
--- a/lib/orber/src/corba_boa.erl
+++ b/lib/orber/src/corba_boa.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/corba_nvlist.erl b/lib/orber/src/corba_nvlist.erl
index e221fa1ef0..4a1361842b 100644
--- a/lib/orber/src/corba_nvlist.erl
+++ b/lib/orber/src/corba_nvlist.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/corba_object.erl b/lib/orber/src/corba_object.erl
index 32a4f76d71..bf31226067 100644
--- a/lib/orber/src/corba_object.erl
+++ b/lib/orber/src/corba_object.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/fixed.erl b/lib/orber/src/fixed.erl
index 63058256c9..8d6239991d 100644
--- a/lib/orber/src/fixed.erl
+++ b/lib/orber/src/fixed.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/ifr_objects.hrl b/lib/orber/src/ifr_objects.hrl
index a05eb3af56..3feedbc652 100644
--- a/lib/orber/src/ifr_objects.hrl
+++ b/lib/orber/src/ifr_objects.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/iop_ior.erl b/lib/orber/src/iop_ior.erl
index 45a6eda157..a78a6b96e5 100644
--- a/lib/orber/src/iop_ior.erl
+++ b/lib/orber/src/iop_ior.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber.erl b/lib/orber/src/orber.erl
index 061b02fd02..f5e2429f5d 100644
--- a/lib/orber/src/orber.erl
+++ b/lib/orber/src/orber.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_acl.erl b/lib/orber/src/orber_acl.erl
index c5a412398e..55d84afbab 100644
--- a/lib/orber/src/orber_acl.erl
+++ b/lib/orber/src/orber_acl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_diagnostics.erl b/lib/orber/src/orber_diagnostics.erl
index 4206ae9be8..18d28fcf35 100644
--- a/lib/orber/src/orber_diagnostics.erl
+++ b/lib/orber/src/orber_diagnostics.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_env.erl b/lib/orber/src/orber_env.erl
index 98d1420148..3000af6cd3 100644
--- a/lib/orber/src/orber_env.erl
+++ b/lib/orber/src/orber_env.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_exceptions.erl b/lib/orber/src/orber_exceptions.erl
index 257724e06d..2519775eb3 100644
--- a/lib/orber/src/orber_exceptions.erl
+++ b/lib/orber/src/orber_exceptions.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr.hrl b/lib/orber/src/orber_ifr.hrl
index 9779e9246c..10634f58c0 100644
--- a/lib/orber/src/orber_ifr.hrl
+++ b/lib/orber/src/orber_ifr.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_aliasdef.erl b/lib/orber/src/orber_ifr_aliasdef.erl
index ddc93f98ec..04a92be5e3 100644
--- a/lib/orber/src/orber_ifr_aliasdef.erl
+++ b/lib/orber/src/orber_ifr_aliasdef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_arraydef.erl b/lib/orber/src/orber_ifr_arraydef.erl
index 9e22fc221b..1513914a08 100644
--- a/lib/orber/src/orber_ifr_arraydef.erl
+++ b/lib/orber/src/orber_ifr_arraydef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_attributedef.erl b/lib/orber/src/orber_ifr_attributedef.erl
index a4f20e4a88..bf7d1d2b63 100644
--- a/lib/orber/src/orber_ifr_attributedef.erl
+++ b/lib/orber/src/orber_ifr_attributedef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_constantdef.erl b/lib/orber/src/orber_ifr_constantdef.erl
index 33a0537b81..b9d4393177 100644
--- a/lib/orber/src/orber_ifr_constantdef.erl
+++ b/lib/orber/src/orber_ifr_constantdef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_contained.erl b/lib/orber/src/orber_ifr_contained.erl
index bcb6c73908..d5f41fbe72 100644
--- a/lib/orber/src/orber_ifr_contained.erl
+++ b/lib/orber/src/orber_ifr_contained.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_container.erl b/lib/orber/src/orber_ifr_container.erl
index fd378f4942..e085985bc4 100644
--- a/lib/orber/src/orber_ifr_container.erl
+++ b/lib/orber/src/orber_ifr_container.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_enumdef.erl b/lib/orber/src/orber_ifr_enumdef.erl
index ffe300bf1b..b1820046bb 100644
--- a/lib/orber/src/orber_ifr_enumdef.erl
+++ b/lib/orber/src/orber_ifr_enumdef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_exceptiondef.erl b/lib/orber/src/orber_ifr_exceptiondef.erl
index e78fc1da37..a9e477f01a 100644
--- a/lib/orber/src/orber_ifr_exceptiondef.erl
+++ b/lib/orber/src/orber_ifr_exceptiondef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_fixeddef.erl b/lib/orber/src/orber_ifr_fixeddef.erl
index 52cbf5846f..fc1b354af0 100644
--- a/lib/orber/src/orber_ifr_fixeddef.erl
+++ b/lib/orber/src/orber_ifr_fixeddef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_idltype.erl b/lib/orber/src/orber_ifr_idltype.erl
index febee65508..44ab86c41a 100644
--- a/lib/orber/src/orber_ifr_idltype.erl
+++ b/lib/orber/src/orber_ifr_idltype.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_interfacedef.erl b/lib/orber/src/orber_ifr_interfacedef.erl
index 5a1e552261..1195f1eff6 100644
--- a/lib/orber/src/orber_ifr_interfacedef.erl
+++ b/lib/orber/src/orber_ifr_interfacedef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_irobject.erl b/lib/orber/src/orber_ifr_irobject.erl
index a362344107..1111f00f81 100644
--- a/lib/orber/src/orber_ifr_irobject.erl
+++ b/lib/orber/src/orber_ifr_irobject.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_moduledef.erl b/lib/orber/src/orber_ifr_moduledef.erl
index 3b2bd43e5e..add0feb31a 100644
--- a/lib/orber/src/orber_ifr_moduledef.erl
+++ b/lib/orber/src/orber_ifr_moduledef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_operationdef.erl b/lib/orber/src/orber_ifr_operationdef.erl
index 9abe895fc0..4bc368487c 100644
--- a/lib/orber/src/orber_ifr_operationdef.erl
+++ b/lib/orber/src/orber_ifr_operationdef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_primitivedef.erl b/lib/orber/src/orber_ifr_primitivedef.erl
index 14ca32901b..bf91bc87bb 100644
--- a/lib/orber/src/orber_ifr_primitivedef.erl
+++ b/lib/orber/src/orber_ifr_primitivedef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_sequencedef.erl b/lib/orber/src/orber_ifr_sequencedef.erl
index 8e9df8fc7f..f3a9806828 100644
--- a/lib/orber/src/orber_ifr_sequencedef.erl
+++ b/lib/orber/src/orber_ifr_sequencedef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_stringdef.erl b/lib/orber/src/orber_ifr_stringdef.erl
index 09c1daf491..b206a218c1 100644
--- a/lib/orber/src/orber_ifr_stringdef.erl
+++ b/lib/orber/src/orber_ifr_stringdef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_structdef.erl b/lib/orber/src/orber_ifr_structdef.erl
index 79ad63be87..3a9cde353e 100644
--- a/lib/orber/src/orber_ifr_structdef.erl
+++ b/lib/orber/src/orber_ifr_structdef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_typecode.erl b/lib/orber/src/orber_ifr_typecode.erl
index 8928ecf386..52263be719 100644
--- a/lib/orber/src/orber_ifr_typecode.erl
+++ b/lib/orber/src/orber_ifr_typecode.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_typedef.erl b/lib/orber/src/orber_ifr_typedef.erl
index 8b2b2d7bf1..3441d7e7af 100644
--- a/lib/orber/src/orber_ifr_typedef.erl
+++ b/lib/orber/src/orber_ifr_typedef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_uniondef.erl b/lib/orber/src/orber_ifr_uniondef.erl
index fb881cf504..64d55ee581 100644
--- a/lib/orber/src/orber_ifr_uniondef.erl
+++ b/lib/orber/src/orber_ifr_uniondef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_ifr_wstringdef.erl b/lib/orber/src/orber_ifr_wstringdef.erl
index c9eb095e54..2ff7d84c7a 100644
--- a/lib/orber/src/orber_ifr_wstringdef.erl
+++ b/lib/orber/src/orber_ifr_wstringdef.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop.hrl b/lib/orber/src/orber_iiop.hrl
index e0cd698061..6bc82fb6d6 100644
--- a/lib/orber/src/orber_iiop.hrl
+++ b/lib/orber/src/orber_iiop.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_inproxy.erl b/lib/orber/src/orber_iiop_inproxy.erl
index 3af06eef55..b595586f84 100644
--- a/lib/orber/src/orber_iiop_inproxy.erl
+++ b/lib/orber/src/orber_iiop_inproxy.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_insup.erl b/lib/orber/src/orber_iiop_insup.erl
index ac62791f7a..2885cf06c0 100644
--- a/lib/orber/src/orber_iiop_insup.erl
+++ b/lib/orber/src/orber_iiop_insup.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_net.erl b/lib/orber/src/orber_iiop_net.erl
index 723baa1d17..e7f54891a2 100644
--- a/lib/orber/src/orber_iiop_net.erl
+++ b/lib/orber/src/orber_iiop_net.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_net_accept.erl b/lib/orber/src/orber_iiop_net_accept.erl
index 48d8f562d4..2a53d55cea 100644
--- a/lib/orber/src/orber_iiop_net_accept.erl
+++ b/lib/orber/src/orber_iiop_net_accept.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_outproxy.erl b/lib/orber/src/orber_iiop_outproxy.erl
index 9d54f57ab9..1406a1ad56 100644
--- a/lib/orber/src/orber_iiop_outproxy.erl
+++ b/lib/orber/src/orber_iiop_outproxy.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_outsup.erl b/lib/orber/src/orber_iiop_outsup.erl
index 8789b6e646..f3627e01a0 100644
--- a/lib/orber/src/orber_iiop_outsup.erl
+++ b/lib/orber/src/orber_iiop_outsup.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_pm.erl b/lib/orber/src/orber_iiop_pm.erl
index cf95fe7e4f..72084227aa 100644
--- a/lib/orber/src/orber_iiop_pm.erl
+++ b/lib/orber/src/orber_iiop_pm.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_socketsup.erl b/lib/orber/src/orber_iiop_socketsup.erl
index 45113232c5..43b5444c82 100644
--- a/lib/orber/src/orber_iiop_socketsup.erl
+++ b/lib/orber/src/orber_iiop_socketsup.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_tracer.erl b/lib/orber/src/orber_iiop_tracer.erl
index 0b7da19449..8d6cd2e8b8 100644
--- a/lib/orber/src/orber_iiop_tracer.erl
+++ b/lib/orber/src/orber_iiop_tracer.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_tracer_silent.erl b/lib/orber/src/orber_iiop_tracer_silent.erl
index fa66b4d4cd..659de0acee 100644
--- a/lib/orber/src/orber_iiop_tracer_silent.erl
+++ b/lib/orber/src/orber_iiop_tracer_silent.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_iiop_tracer_stealth.erl b/lib/orber/src/orber_iiop_tracer_stealth.erl
index f4185fa6fd..8eaa945d3f 100644
--- a/lib/orber/src/orber_iiop_tracer_stealth.erl
+++ b/lib/orber/src/orber_iiop_tracer_stealth.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_initial_references.erl b/lib/orber/src/orber_initial_references.erl
index e72de4dd23..738d702088 100644
--- a/lib/orber/src/orber_initial_references.erl
+++ b/lib/orber/src/orber_initial_references.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_interceptors.erl b/lib/orber/src/orber_interceptors.erl
index c9b351d9fa..4bfb2ae9a5 100644
--- a/lib/orber/src/orber_interceptors.erl
+++ b/lib/orber/src/orber_interceptors.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_request_number.erl b/lib/orber/src/orber_request_number.erl
index 5869d32b4d..755b999c13 100644
--- a/lib/orber/src/orber_request_number.erl
+++ b/lib/orber/src/orber_request_number.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_tb.erl b/lib/orber/src/orber_tb.erl
index 16e8fdd9a0..6a758330cd 100644
--- a/lib/orber/src/orber_tb.erl
+++ b/lib/orber/src/orber_tb.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_tc.erl b/lib/orber/src/orber_tc.erl
index 26bdb12470..9a8a9259ed 100644
--- a/lib/orber/src/orber_tc.erl
+++ b/lib/orber/src/orber_tc.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_typedefs.erl b/lib/orber/src/orber_typedefs.erl
index bf21cf599d..30c03974c2 100644
--- a/lib/orber/src/orber_typedefs.erl
+++ b/lib/orber/src/orber_typedefs.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/src/orber_web.erl b/lib/orber/src/orber_web.erl
index 20835d0a12..cc24b2cb19 100644
--- a/lib/orber/src/orber_web.erl
+++ b/lib/orber/src/orber_web.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/Makefile b/lib/orber/test/Makefile
index b9be48c790..782ee2730b 100644
--- a/lib/orber/test/Makefile
+++ b/lib/orber/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -162,12 +162,10 @@ TARGET_FILES = \
ERL_IDL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
ERL_COMPILE_FLAGS += $(ERL_IDL_FLAGS) \
- -pa $(ERL_TOP)/lib/test_server/ebin \
-pa $(ERL_TOP)/lib/ic/ebin \
-pa $(ERL_TOP)/lib/orber/ebin \
-I$(ERL_TOP)/lib/orber \
- -I$(ERL_TOP)/lib/orber/test/$(IDLOUTDIR) \
- -I$(ERL_TOP)/lib/test_server/include
+ -I$(ERL_TOP)/lib/orber/test/$(IDLOUTDIR)
# ----------------------------------------------------
# Targets
diff --git a/lib/orber/test/cdrcoding_10_SUITE.erl b/lib/orber/test/cdrcoding_10_SUITE.erl
index 1fec91dca3..24de589615 100644
--- a/lib/orber/test/cdrcoding_10_SUITE.erl
+++ b/lib/orber/test/cdrcoding_10_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,13 +26,12 @@
%%-----------------------------------------------------------------
-module(cdrcoding_10_SUITE).
-
-include("idl_output/Module.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
%%-----------------------------------------------------------------
%% External exports
@@ -80,14 +79,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -126,49 +125,40 @@ end_per_suite(Config) when is_list(Config) ->
% 'oe_orber_test':'oe_unregister'(),
% ok.
-do_register(doc) -> [];
-do_register(suite) -> [];
do_register(Config) when is_list(Config) ->
io:format("Pwd: ~p, mod: ~p~n",[c:pwd(), c:m('oe_orber_test')]),
'oe_orber_test':'oe_register'(),
ok.
-do_unregister(doc) -> [];
-do_unregister(suite) -> [];
+
do_unregister(Config) when is_list(Config) ->
'oe_orber_test':'oe_unregister'(),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: null
%%-----------------------------------------------------------------
-null_type(doc) -> [];
-null_type(suite) -> [];
null_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_null', 'null'),
- ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_null', 'null'),
+ {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 0}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: void
%%-----------------------------------------------------------------
-void_type(doc) -> [];
-void_type(suite) -> [];
void_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_void', 'ok'),
- ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_void', 'ok'),
+ {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 0}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: principal
%%-----------------------------------------------------------------
-principal_type(doc) -> [];
-principal_type(suite) -> [];
principal_type(Config) when is_list(Config) ->
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B0, 0, big),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', ""),
- ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B1, 0, big),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} =
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B0, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', ""),
+ {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B1, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} =
cdr_decode:dec_type('tk_Principal', {1, 0}, B2, 0, big),
ok.
@@ -203,19 +193,17 @@ objref(2) ->
TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
#'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
-objref_type(doc) -> [];
-objref_type(suite) -> [];
objref_type(Config) when is_list(Config) ->
T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
Objref0 = objref(0),
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref0),
- ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref0),
+ {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B0, 0, big),
Objref1 = objref(1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref1),
- ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref1),
+ {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
Objref2 = objref(2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref2),
- ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref2),
+ {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B2, 0, big),
ok.
@@ -223,49 +211,45 @@ objref_type(Config) when is_list(Config) ->
%%-----------------------------------------------------------------
%% Encode/decode test of type: struct
%%-----------------------------------------------------------------
-struct_type(doc) -> [];
-struct_type(suite) -> [];
struct_type(Config) when is_list(Config) ->
T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
[{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
- ?line B0 = cdr_encode:enc_type({1, 0}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type({1, 0}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
[{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
- ?line B1 = cdr_encode:enc_type({1, 0}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type({1, 0}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
[{"long_sequence", {'tk_sequence', 'tk_long', 0}},
{"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
{"octet", 'tk_octet'}]},
S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
- ?line B2 = cdr_encode:enc_type({1, 0}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type({1, 0}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: union
%%-----------------------------------------------------------------
-union_type(doc) -> [];
-union_type(suite) -> [];
union_type(Config) when is_list(Config) ->
T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
[{0, "First", 'tk_short'},
{1, "Second", {'tk_string', 0}},
{2, "Third", 'tk_char'}]},
S0 = #'Module_Union'{label=1, value="Foo Bar !"},
- ?line B0 = cdr_encode:enc_type({1, 0}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type({1, 0}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
S1 = #'Module_Union'{label=0, value=-17},
- ?line B1 = cdr_encode:enc_type({1, 0}, T0, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type({1, 0}, T0, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B1, 0, big),
S2 = #'Module_Union'{label=2, value=$X},
- ?line B2 = cdr_encode:enc_type({1, 0}, T0, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type({1, 0}, T0, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B2, 0, big),
T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -274,14 +258,14 @@ union_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]},
S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
- ?line B3 = cdr_encode:enc_type({1, 0}, T1, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type({1, 0}, T1, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B3, 0, big),
S4 = #'Module_Union1'{label=cow, value=apple},
- ?line B4 = cdr_encode:enc_type({1, 0}, T1, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B4, 0, big),
+ B4 = cdr_encode:enc_type({1, 0}, T1, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B4, 0, big),
S5 = #'Module_Union1'{label=horse, value=17},
- ?line B5 = cdr_encode:enc_type({1, 0}, T1, S5),
- ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B5, 0, big),
+ B5 = cdr_encode:enc_type({1, 0}, T1, S5),
+ {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B5, 0, big),
T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -303,54 +287,50 @@ union_type(Config) when is_list(Config) ->
["orange", "banana",
"apple"]}}]}}]},
S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
- ?line B6 = cdr_encode:enc_type({1, 0}, T2, S6),
- ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B6, 0, big),
+ B6 = cdr_encode:enc_type({1, 0}, T2, S6),
+ {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B6, 0, big),
S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
value=["Foo", "Bar", "!"]}},
- ?line B7 = cdr_encode:enc_type({1, 0}, T2, S7),
- ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B7, 0, big),
+ B7 = cdr_encode:enc_type({1, 0}, T2, S7),
+ {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B7, 0, big),
S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
- ?line B8 = cdr_encode:enc_type({1, 0}, T2, S8),
- ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B8, 0, big),
+ B8 = cdr_encode:enc_type({1, 0}, T2, S8),
+ {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B8, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: string
%%-----------------------------------------------------------------
-string_type(doc) -> [];
-string_type(suite) -> [];
string_type(Config) when is_list(Config) ->
S0 = "Foo Bar ???",
- ?line B0 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B0, 0, big),
S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
- ?line B1 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B1, 0, big),
S2 = "",
- ?line B2 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B2, 0, big),
S3 = "\0",
- ?line B3 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B3, 0, big),
S4 = "~n",
- ?line B4 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B4, 0, big),
+ B4 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B4, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: array
%%-----------------------------------------------------------------
-array_type(doc) -> [];
-array_type(suite) -> [];
array_type(Config) when is_list(Config) ->
T0 = {'tk_array', 'tk_long', 5},
S0 = {-100, 0, 30000, -900100900, 123456789},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
S1 = {pig, cow},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
[{"horse", "First", 'tk_ushort'},
@@ -358,18 +338,16 @@ array_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
S3 = {objref(0), objref(1), objref(2)},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 0}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-any_type(doc) -> [];
-any_type(suite) -> [];
any_type(Config) when is_list(Config) ->
T = 'tk_any',
TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -380,8 +358,8 @@ any_type(Config) when is_list(Config) ->
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
Any = #any{typecode=TC,value=S},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any),
- ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any),
+ {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
["horse", "pig", "cow"]}, 1,
@@ -392,16 +370,14 @@ any_type(Config) when is_list(Config) ->
"apple"]}}]},2},
S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
Any1 = #any{typecode=TC1,value=S1},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any1),
- ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any1),
+ {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-typecode_type(doc) -> [];
-typecode_type(suite) -> [];
typecode_type(Config) when is_list(Config) ->
T = 'tk_TypeCode',
TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
@@ -412,8 +388,8 @@ typecode_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana",
"apple"]}}]}, 10},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,TC),
- ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,TC),
+ {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, 2,
@@ -434,15 +410,13 @@ typecode_type(Config) when is_list(Config) ->
"Module_Enum1",
["orange", "banana",
"apple"]}}]}}]},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, TC1),
- ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, TC1),
+ {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-alias_type(doc) -> [];
-alias_type(suite) -> [];
alias_type(Config) when is_list(Config) ->
T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
{'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -452,8 +426,8 @@ alias_type(Config) when is_list(Config) ->
{"octet", 'tk_octet'}]}},
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,S),
- ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,S),
+ {S, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
{'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
@@ -464,15 +438,13 @@ alias_type(Config) when is_list(Config) ->
"Module_Enum1", ["orange", "banana",
"apple"]}}]},0}},
S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: exception
%%-----------------------------------------------------------------
-exception_type(doc) -> [];
-exception_type(suite) -> [];
exception_type(Config) when is_list(Config) ->
system_exceptions(),
user_exceptions(),
@@ -481,43 +453,43 @@ exception_type(Config) when is_list(Config) ->
system_exceptions() ->
E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
{system_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,E),
- ?line {E, _} = cdr_decode:dec_system_exception({1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,E),
+ {E, _} = cdr_decode:dec_system_exception({1, 0}, B, 0, big),
E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
{system_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1,E1),
- ?line {E1, _} = cdr_decode:dec_system_exception({1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1,E1),
+ {E1, _} = cdr_decode:dec_system_exception({1, 0}, B1, 0, big),
E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
{system_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2,E2),
- ?line {E2, _} = cdr_decode:dec_system_exception({1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2,E2),
+ {E2, _} = cdr_decode:dec_system_exception({1, 0}, B2, 0, big),
E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
{system_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3,E3),
- ?line {E3, _} = cdr_decode:dec_system_exception({1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3,E3),
+ {E3, _} = cdr_decode:dec_system_exception({1, 0}, B3, 0, big),
ok.
user_exceptions() ->
E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
{user_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, E),
- ?line {E, _} = cdr_decode:dec_user_exception({1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, E),
+ {E, _} = cdr_decode:dec_user_exception({1, 0}, B, 0, big),
E1 = #'Module_Except2'{e=banana,
s=#'Module_Struct2'{long_sequence=[12,-4040,
1234567898],
e=horse,
o=$a}},
{user_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, E1),
- ?line {E1, _} = cdr_decode:dec_user_exception({1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, E1),
+ {E1, _} = cdr_decode:dec_user_exception({1, 0}, B1, 0, big),
E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
{user_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, E2),
- ?line {E2, _} = cdr_decode:dec_user_exception({1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, E2),
+ {E2, _} = cdr_decode:dec_user_exception({1, 0}, B2, 0, big),
E3 = #'Module_Except4'{},
{user_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, E3),
- ?line {E3, _} = cdr_decode:dec_user_exception({1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, E3),
+ {E3, _} = cdr_decode:dec_user_exception({1, 0}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
@@ -525,7 +497,6 @@ user_exceptions() ->
%% Description: Precondition the stack must be started so the
%% objectkey is valid.
%%-----------------------------------------------------------------
-%request(suite) -> [];
%request(_) ->
% exit(not_implemented).
@@ -533,19 +504,17 @@ user_exceptions() ->
%% Test Case: reply encoding test
%% Description:
%%-----------------------------------------------------------------
-reply(doc) -> ["Description", "more description"];
-reply(suite) -> [];
reply(Config) when is_list(Config) ->
R = #reply_header{service_context=[], request_id=1,
reply_status='no_exception'},
- ?line B = cdr_encode:enc_reply(
+ B = cdr_encode:enc_reply(
#giop_env{version = {1, 0}, request_id = 1,
reply_status = 'no_exception',
tc = {'tk_long', [], [{'tk_sequence',
{'tk_string', 0}, 0}]},
result = 1200, parameters = [["foo","Bar"]],
ctx = []}),
- ?line {R, 1200, [["foo","Bar"]]} =
+ {R, 1200, [["foo","Bar"]]} =
cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
B),
ok.
@@ -554,21 +523,17 @@ reply(Config) when is_list(Config) ->
%% Test Case: cancel_request encoding test
%% Description:
%%-----------------------------------------------------------------
-cancel_request(doc) -> ["Description", "more description"];
-cancel_request(suite) -> [];
cancel_request(Config) when is_list(Config) ->
R = #cancel_request_header{request_id=1},
- ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 0},
+ B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 0},
request_id = 1}),
- ?line R = cdr_decode:dec_message([], B),
+ R = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: locate_request encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_request(doc) -> ["Description", "more description"];
-locate_request(suite) -> [];
locate_request(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -577,8 +542,6 @@ locate_request(Config) when is_list(Config) ->
%% Test Case: locate_reply encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_reply(doc) -> ["Description", "more description"];
-locate_reply(suite) -> [];
locate_reply(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -587,22 +550,18 @@ locate_reply(Config) when is_list(Config) ->
%% Test Case: close_connection encoding test
%% Description:
%%-----------------------------------------------------------------
-close_connection(doc) -> ["Description", "more description"];
-close_connection(suite) -> [];
close_connection(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 0}}),
- ?line 'close_connection' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_close_connection(#giop_env{version = {1, 0}}),
+ 'close_connection' = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: message_error encoding test
%% Description:
%%-----------------------------------------------------------------
-message_error(doc) -> ["Description", "more description"];
-message_error(suite) -> [];
message_error(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 0}}),
- ?line 'message_error' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_message_error(#giop_env{version = {1, 0}}),
+ 'message_error' = cdr_decode:dec_message([], B),
ok.
diff --git a/lib/orber/test/cdrcoding_11_SUITE.erl b/lib/orber/test/cdrcoding_11_SUITE.erl
index 324b9b2b17..ff5d2852d6 100644
--- a/lib/orber/test/cdrcoding_11_SUITE.erl
+++ b/lib/orber/test/cdrcoding_11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,11 +28,11 @@
-include("idl_output/Module.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
%%-----------------------------------------------------------------
%% External exports
@@ -80,14 +80,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -126,48 +126,39 @@ end_per_suite(Config) when is_list(Config) ->
% 'oe_orber_test':'oe_unregister'(),
% ok.
-do_register(doc) -> [];
-do_register(suite) -> [];
do_register(Config) when is_list(Config) ->
'oe_orber_test':'oe_register'(),
ok.
-do_unregister(doc) -> [];
-do_unregister(suite) -> [];
+
do_unregister(Config) when is_list(Config) ->
'oe_orber_test':'oe_unregister'(),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: null
%%-----------------------------------------------------------------
-null_type(doc) -> [];
-null_type(suite) -> [];
null_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_null', 'null'),
- ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_null', 'null'),
+ {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 1}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: void
%%-----------------------------------------------------------------
-void_type(doc) -> [];
-void_type(suite) -> [];
void_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_void', 'ok'),
- ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_void', 'ok'),
+ {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 1}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: principal
%%-----------------------------------------------------------------
-principal_type(doc) -> [];
-principal_type(suite) -> [];
principal_type(Config) when is_list(Config) ->
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B0, 0, big),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', ""),
- ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B1, 0, big),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} =
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B0, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', ""),
+ {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B1, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} =
cdr_decode:dec_type('tk_Principal', {1, 1}, B2, 0, big),
ok.
@@ -203,19 +194,17 @@ objref(2) ->
TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
#'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
-objref_type(doc) -> [];
-objref_type(suite) -> [];
objref_type(Config) when is_list(Config) ->
T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
Objref0 = objref(0),
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref0),
- ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref0),
+ {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B0, 0, big),
Objref1 = objref(1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref1),
- ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref1),
+ {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
Objref2 = objref(2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref2),
- ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref2),
+ {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B2, 0, big),
ok.
@@ -223,49 +212,45 @@ objref_type(Config) when is_list(Config) ->
%%-----------------------------------------------------------------
%% Encode/decode test of type: struct
%%-----------------------------------------------------------------
-struct_type(doc) -> [];
-struct_type(suite) -> [];
struct_type(Config) when is_list(Config) ->
T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
[{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
[{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
[{"long_sequence", {'tk_sequence', 'tk_long', 0}},
{"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
{"octet", 'tk_octet'}]},
S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: union
%%-----------------------------------------------------------------
-union_type(doc) -> [];
-union_type(suite) -> [];
union_type(Config) when is_list(Config) ->
T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
[{0, "First", 'tk_short'},
{1, "Second", {'tk_string', 0}},
{2, "Third", 'tk_char'}]},
S0 = #'Module_Union'{label=1, value="Foo Bar !"},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
S1 = #'Module_Union'{label=0, value=-17},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B1, 0, big),
S2 = #'Module_Union'{label=2, value=$X},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B2, 0, big),
T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -274,14 +259,14 @@ union_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]},
S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B3, 0, big),
S4 = #'Module_Union1'{label=cow, value=apple},
- ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B4, 0, big),
+ B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B4, 0, big),
S5 = #'Module_Union1'{label=horse, value=17},
- ?line B5 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S5),
- ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B5, 0, big),
+ B5 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S5),
+ {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B5, 0, big),
T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -303,54 +288,50 @@ union_type(Config) when is_list(Config) ->
["orange", "banana",
"apple"]}}]}}]},
S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
- ?line B6 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S6),
- ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B6, 0, big),
+ B6 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S6),
+ {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B6, 0, big),
S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
value=["Foo", "Bar", "!"]}},
- ?line B7 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S7),
- ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B7, 0, big),
+ B7 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S7),
+ {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B7, 0, big),
S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
- ?line B8 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S8),
- ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B8, 0, big),
+ B8 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S8),
+ {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B8, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: string
%%-----------------------------------------------------------------
-string_type(doc) -> [];
-string_type(suite) -> [];
string_type(Config) when is_list(Config) ->
S0 = "Foo Bar ???",
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B0, 0, big),
S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B1, 0, big),
S2 = "",
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B2, 0, big),
S3 = "\0",
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B3, 0, big),
S4 = "~n",
- ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B4, 0, big),
+ B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B4, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: array
%%-----------------------------------------------------------------
-array_type(doc) -> [];
-array_type(suite) -> [];
array_type(Config) when is_list(Config) ->
T0 = {'tk_array', 'tk_long', 5},
S0 = {-100, 0, 30000, -900100900, 123456789},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
S1 = {pig, cow},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
[{"horse", "First", 'tk_ushort'},
@@ -358,18 +339,16 @@ array_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
S3 = {objref(0), objref(1), objref(2)},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 1}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-any_type(doc) -> [];
-any_type(suite) -> [];
any_type(Config) when is_list(Config) ->
T = 'tk_any',
TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -380,8 +359,8 @@ any_type(Config) when is_list(Config) ->
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
Any = #any{typecode=TC,value=S},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any),
- ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any),
+ {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
["horse", "pig", "cow"]}, 1,
@@ -392,16 +371,14 @@ any_type(Config) when is_list(Config) ->
"apple"]}}]},2},
S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
Any1 = #any{typecode=TC1,value=S1},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any1),
- ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any1),
+ {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-typecode_type(doc) -> [];
-typecode_type(suite) -> [];
typecode_type(Config) when is_list(Config) ->
T = 'tk_TypeCode',
TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
@@ -412,8 +389,8 @@ typecode_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana",
"apple"]}}]}, 10},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,TC),
- ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,TC),
+ {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, 2,
@@ -434,15 +411,13 @@ typecode_type(Config) when is_list(Config) ->
"Module_Enum1",
["orange", "banana",
"apple"]}}]}}]},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, TC1),
- ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, TC1),
+ {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-alias_type(doc) -> [];
-alias_type(suite) -> [];
alias_type(Config) when is_list(Config) ->
T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
{'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -452,8 +427,8 @@ alias_type(Config) when is_list(Config) ->
{"octet", 'tk_octet'}]}},
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,S),
- ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,S),
+ {S, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
{'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
@@ -464,15 +439,13 @@ alias_type(Config) when is_list(Config) ->
"Module_Enum1", ["orange", "banana",
"apple"]}}]},0}},
S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: exception
%%-----------------------------------------------------------------
-exception_type(doc) -> [];
-exception_type(suite) -> [];
exception_type(Config) when is_list(Config) ->
system_exceptions(),
user_exceptions(),
@@ -481,43 +454,43 @@ exception_type(Config) when is_list(Config) ->
system_exceptions() ->
E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
{system_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,E),
- ?line {E, _} = cdr_decode:dec_system_exception({1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,E),
+ {E, _} = cdr_decode:dec_system_exception({1, 1}, B, 0, big),
E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
{system_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1,E1),
- ?line {E1, _} = cdr_decode:dec_system_exception({1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1,E1),
+ {E1, _} = cdr_decode:dec_system_exception({1, 1}, B1, 0, big),
E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
{system_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2,E2),
- ?line {E2, _} = cdr_decode:dec_system_exception({1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2,E2),
+ {E2, _} = cdr_decode:dec_system_exception({1, 1}, B2, 0, big),
E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
{system_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3,E3),
- ?line {E3, _} = cdr_decode:dec_system_exception({1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3,E3),
+ {E3, _} = cdr_decode:dec_system_exception({1, 1}, B3, 0, big),
ok.
user_exceptions() ->
E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
{user_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, E),
- ?line {E, _} = cdr_decode:dec_user_exception({1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, E),
+ {E, _} = cdr_decode:dec_user_exception({1, 1}, B, 0, big),
E1 = #'Module_Except2'{e=banana,
s=#'Module_Struct2'{long_sequence=[12,-4040,
1234567898],
e=horse,
o=$a}},
{user_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, E1),
- ?line {E1, _} = cdr_decode:dec_user_exception({1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, E1),
+ {E1, _} = cdr_decode:dec_user_exception({1, 1}, B1, 0, big),
E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
{user_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, E2),
- ?line {E2, _} = cdr_decode:dec_user_exception({1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, E2),
+ {E2, _} = cdr_decode:dec_user_exception({1, 1}, B2, 0, big),
E3 = #'Module_Except4'{},
{user_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, E3),
- ?line {E3, _} = cdr_decode:dec_user_exception({1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, E3),
+ {E3, _} = cdr_decode:dec_user_exception({1, 1}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
@@ -525,7 +498,6 @@ user_exceptions() ->
%% Description: Precondition the stack must be started so the
%% objectkey is valid.
%%-----------------------------------------------------------------
-%request(suite) -> [];
%request(_) ->
% exit(not_implemented).
@@ -533,18 +505,16 @@ user_exceptions() ->
%% Test Case: reply encoding test
%% Description:
%%-----------------------------------------------------------------
-reply(doc) -> ["Description", "more description"];
-reply(suite) -> [];
reply(Config) when is_list(Config) ->
R = #reply_header{service_context=[], request_id=1,
reply_status='no_exception'},
- ?line B = cdr_encode:enc_reply(#giop_env{version = {1, 1}, request_id = 1,
+ B = cdr_encode:enc_reply(#giop_env{version = {1, 1}, request_id = 1,
reply_status = 'no_exception',
tc = {'tk_long', [], [{'tk_sequence',
{'tk_string', 0}, 0}]},
result = 1200, parameters = [["foo","Bar"]],
ctx = []}),
- ?line {R, 1200, [["foo","Bar"]]} =
+ {R, 1200, [["foo","Bar"]]} =
cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
B),
ok.
@@ -553,21 +523,17 @@ reply(Config) when is_list(Config) ->
%% Test Case: cancel_request encoding test
%% Description:
%%-----------------------------------------------------------------
-cancel_request(doc) -> ["Description", "more description"];
-cancel_request(suite) -> [];
cancel_request(Config) when is_list(Config) ->
R = #cancel_request_header{request_id=1},
- ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 1},
+ B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 1},
request_id = 1}),
- ?line R = cdr_decode:dec_message([], B),
+ R = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: locate_request encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_request(doc) -> ["Description", "more description"];
-locate_request(suite) -> [];
locate_request(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -576,8 +542,6 @@ locate_request(Config) when is_list(Config) ->
%% Test Case: locate_reply encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_reply(doc) -> ["Description", "more description"];
-locate_reply(suite) -> [];
locate_reply(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -586,22 +550,18 @@ locate_reply(Config) when is_list(Config) ->
%% Test Case: close_connection encoding test
%% Description:
%%-----------------------------------------------------------------
-close_connection(doc) -> ["Description", "more description"];
-close_connection(suite) -> [];
close_connection(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 1}}),
- ?line 'close_connection' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_close_connection(#giop_env{version = {1, 1}}),
+ 'close_connection' = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: message_error encoding test
%% Description:
%%-----------------------------------------------------------------
-message_error(doc) -> ["Description", "more description"];
-message_error(suite) -> [];
message_error(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 1}}),
- ?line 'message_error' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_message_error(#giop_env{version = {1, 1}}),
+ 'message_error' = cdr_decode:dec_message([], B),
ok.
diff --git a/lib/orber/test/cdrcoding_12_SUITE.erl b/lib/orber/test/cdrcoding_12_SUITE.erl
index f0a8fe4d7f..13178b7774 100644
--- a/lib/orber/test/cdrcoding_12_SUITE.erl
+++ b/lib/orber/test/cdrcoding_12_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,11 +29,11 @@
-module(cdrcoding_12_SUITE).
-include("idl_output/Module.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
%%-----------------------------------------------------------------
%% External exports
@@ -81,14 +81,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -111,48 +111,39 @@ end_per_suite(Config) when is_list(Config) ->
%% tested in the cdrlib SUITE.
%%-----------------------------------------------------------------
-do_register(doc) -> [];
-do_register(suite) -> [];
do_register(Config) when is_list(Config) ->
'oe_orber_test':'oe_register'(),
ok.
-do_unregister(doc) -> [];
-do_unregister(suite) -> [];
+
do_unregister(Config) when is_list(Config) ->
'oe_orber_test':'oe_unregister'(),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: null
%%-----------------------------------------------------------------
-null_type(doc) -> [];
-null_type(suite) -> [];
null_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_null', 'null'),
- ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_null', 'null'),
+ {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 2}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: void
%%-----------------------------------------------------------------
-void_type(doc) -> [];
-void_type(suite) -> [];
void_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_void', 'ok'),
- ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_void', 'ok'),
+ {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 2}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: principal
%%-----------------------------------------------------------------
-principal_type(doc) -> [];
-principal_type(suite) -> [];
principal_type(Config) when is_list(Config) ->
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B0, 0, big),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', ""),
- ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B1, 0, big),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} =
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B0, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', ""),
+ {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B1, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} =
cdr_decode:dec_type('tk_Principal', {1, 2}, B2, 0, big),
ok.
@@ -188,19 +179,17 @@ objref(2) ->
TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
#'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
-objref_type(doc) -> [];
-objref_type(suite) -> [];
objref_type(Config) when is_list(Config) ->
T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
Objref0 = objref(0),
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref0),
- ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref0),
+ {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B0, 0, big),
Objref1 = objref(1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref1),
- ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref1),
+ {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
Objref2 = objref(2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref2),
- ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref2),
+ {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B2, 0, big),
ok.
@@ -208,49 +197,45 @@ objref_type(Config) when is_list(Config) ->
%%-----------------------------------------------------------------
%% Encode/decode test of type: struct
%%-----------------------------------------------------------------
-struct_type(doc) -> [];
-struct_type(suite) -> [];
struct_type(Config) when is_list(Config) ->
T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
[{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
[{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
[{"long_sequence", {'tk_sequence', 'tk_long', 0}},
{"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
{"octet", 'tk_octet'}]},
S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: union
%%-----------------------------------------------------------------
-union_type(doc) -> [];
-union_type(suite) -> [];
union_type(Config) when is_list(Config) ->
T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
[{0, "First", 'tk_short'},
{1, "Second", {'tk_string', 0}},
{2, "Third", 'tk_char'}]},
S0 = #'Module_Union'{label=1, value="Foo Bar !"},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
S1 = #'Module_Union'{label=0, value=-17},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B1, 0, big),
S2 = #'Module_Union'{label=2, value=$X},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B2, 0, big),
T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -259,14 +244,14 @@ union_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]},
S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B3, 0, big),
S4 = #'Module_Union1'{label=cow, value=apple},
- ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B4, 0, big),
+ B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B4, 0, big),
S5 = #'Module_Union1'{label=horse, value=17},
- ?line B5 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S5),
- ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B5, 0, big),
+ B5 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S5),
+ {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B5, 0, big),
T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -288,54 +273,50 @@ union_type(Config) when is_list(Config) ->
["orange", "banana",
"apple"]}}]}}]},
S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
- ?line B6 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S6),
- ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B6, 0, big),
+ B6 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S6),
+ {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B6, 0, big),
S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
value=["Foo", "Bar", "!"]}},
- ?line B7 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S7),
- ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B7, 0, big),
+ B7 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S7),
+ {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B7, 0, big),
S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
- ?line B8 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S8),
- ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B8, 0, big),
+ B8 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S8),
+ {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B8, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: string
%%-----------------------------------------------------------------
-string_type(doc) -> [];
-string_type(suite) -> [];
string_type(Config) when is_list(Config) ->
S0 = "Foo Bar ???",
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B0, 0, big),
S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B1, 0, big),
S2 = "",
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B2, 0, big),
S3 = "\0",
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B3, 0, big),
S4 = "~n",
- ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B4, 0, big),
+ B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B4, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: array
%%-----------------------------------------------------------------
-array_type(doc) -> [];
-array_type(suite) -> [];
array_type(Config) when is_list(Config) ->
T0 = {'tk_array', 'tk_long', 5},
S0 = {-100, 0, 30000, -900100900, 123456789},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
S1 = {pig, cow},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
[{"horse", "First", 'tk_ushort'},
@@ -343,18 +324,16 @@ array_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
S3 = {objref(0), objref(1), objref(2)},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 2}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-any_type(doc) -> [];
-any_type(suite) -> [];
any_type(Config) when is_list(Config) ->
T = 'tk_any',
TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -365,8 +344,8 @@ any_type(Config) when is_list(Config) ->
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
Any = #any{typecode=TC,value=S},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any),
- ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any),
+ {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
["horse", "pig", "cow"]}, 1,
@@ -377,16 +356,14 @@ any_type(Config) when is_list(Config) ->
"apple"]}}]},2},
S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
Any1 = #any{typecode=TC1,value=S1},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any1),
- ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any1),
+ {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-typecode_type(doc) -> [];
-typecode_type(suite) -> [];
typecode_type(Config) when is_list(Config) ->
T = 'tk_TypeCode',
TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
@@ -397,8 +374,8 @@ typecode_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana",
"apple"]}}]}, 10},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,TC),
- ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,TC),
+ {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, 2,
@@ -419,15 +396,13 @@ typecode_type(Config) when is_list(Config) ->
"Module_Enum1",
["orange", "banana",
"apple"]}}]}}]},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, TC1),
- ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, TC1),
+ {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-alias_type(doc) -> [];
-alias_type(suite) -> [];
alias_type(Config) when is_list(Config) ->
T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
{'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -437,8 +412,8 @@ alias_type(Config) when is_list(Config) ->
{"octet", 'tk_octet'}]}},
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,S),
- ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,S),
+ {S, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
{'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
@@ -449,15 +424,13 @@ alias_type(Config) when is_list(Config) ->
"Module_Enum1", ["orange", "banana",
"apple"]}}]},0}},
S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: exception
%%-----------------------------------------------------------------
-exception_type(doc) -> [];
-exception_type(suite) -> [];
exception_type(Config) when is_list(Config) ->
system_exceptions(),
user_exceptions(),
@@ -466,43 +439,43 @@ exception_type(Config) when is_list(Config) ->
system_exceptions() ->
E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
{system_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,E),
- ?line {E, _} = cdr_decode:dec_system_exception({1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,E),
+ {E, _} = cdr_decode:dec_system_exception({1, 2}, B, 0, big),
E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
{system_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1,E1),
- ?line {E1, _} = cdr_decode:dec_system_exception({1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1,E1),
+ {E1, _} = cdr_decode:dec_system_exception({1, 2}, B1, 0, big),
E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
{system_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2,E2),
- ?line {E2, _} = cdr_decode:dec_system_exception({1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2,E2),
+ {E2, _} = cdr_decode:dec_system_exception({1, 2}, B2, 0, big),
E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
{system_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3,E3),
- ?line {E3, _} = cdr_decode:dec_system_exception({1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3,E3),
+ {E3, _} = cdr_decode:dec_system_exception({1, 2}, B3, 0, big),
ok.
user_exceptions() ->
E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
{user_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, E),
- ?line {E, _} = cdr_decode:dec_user_exception({1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, E),
+ {E, _} = cdr_decode:dec_user_exception({1, 2}, B, 0, big),
E1 = #'Module_Except2'{e=banana,
s=#'Module_Struct2'{long_sequence=[12,-4040,
1234567898],
e=horse,
o=$a}},
{user_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, E1),
- ?line {E1, _} = cdr_decode:dec_user_exception({1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, E1),
+ {E1, _} = cdr_decode:dec_user_exception({1, 2}, B1, 0, big),
E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
{user_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, E2),
- ?line {E2, _} = cdr_decode:dec_user_exception({1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, E2),
+ {E2, _} = cdr_decode:dec_user_exception({1, 2}, B2, 0, big),
E3 = #'Module_Except4'{},
{user_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, E3),
- ?line {E3, _} = cdr_decode:dec_user_exception({1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, E3),
+ {E3, _} = cdr_decode:dec_user_exception({1, 2}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
@@ -510,7 +483,6 @@ user_exceptions() ->
%% Description: Precondition the stack must be started so the
%% objectkey is valid.
%%-----------------------------------------------------------------
-%request(suite) -> [];
%request(_) ->
% exit(not_implemented).
@@ -518,12 +490,10 @@ user_exceptions() ->
%% Test Case: reply encoding test
%% Description:
%%-----------------------------------------------------------------
-reply(doc) -> ["Description", "more description"];
-reply(suite) -> [];
reply(Config) when is_list(Config) ->
R = #reply_header{service_context=[], request_id=1,
reply_status='no_exception'},
- ?line B = cdr_encode:enc_reply(#giop_env{version = {1, 2}, request_id = 1,
+ B = cdr_encode:enc_reply(#giop_env{version = {1, 2}, request_id = 1,
reply_status = 'no_exception',
tc = {'tk_long', [], [{'tk_sequence',
{'tk_string', 0}, 0}]},
@@ -531,7 +501,7 @@ reply(Config) when is_list(Config) ->
parameters = [["foo","Bar"]],
ctx = []}),
- ?line {R, 1200, [["foo","Bar"]]} =
+ {R, 1200, [["foo","Bar"]]} =
cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
B),
@@ -541,21 +511,17 @@ reply(Config) when is_list(Config) ->
%% Test Case: cancel_request encoding test
%% Description:
%%-----------------------------------------------------------------
-cancel_request(doc) -> ["Description", "more description"];
-cancel_request(suite) -> [];
cancel_request(Config) when is_list(Config) ->
R = #cancel_request_header{request_id=1},
- ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 2},
+ B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 2},
request_id = 1}),
- ?line R = cdr_decode:dec_message([], B),
+ R = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: locate_request encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_request(doc) -> ["Description", "more description"];
-locate_request(suite) -> [];
locate_request(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -564,8 +530,6 @@ locate_request(Config) when is_list(Config) ->
%% Test Case: locate_reply encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_reply(doc) -> ["Description", "more description"];
-locate_reply(suite) -> [];
locate_reply(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -574,22 +538,18 @@ locate_reply(Config) when is_list(Config) ->
%% Test Case: close_connection encoding test
%% Description:
%%-----------------------------------------------------------------
-close_connection(doc) -> ["Description", "more description"];
-close_connection(suite) -> [];
close_connection(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 2}}),
- ?line 'close_connection' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_close_connection(#giop_env{version = {1, 2}}),
+ 'close_connection' = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: message_error encoding test
%% Description:
%%-----------------------------------------------------------------
-message_error(doc) -> ["Description", "more description"];
-message_error(suite) -> [];
message_error(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 2}}),
- ?line 'message_error' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_message_error(#giop_env{version = {1, 2}}),
+ 'message_error' = cdr_decode:dec_message([], B),
ok.
diff --git a/lib/orber/test/cdrlib_SUITE.erl b/lib/orber/test/cdrlib_SUITE.erl
index dd1f975d9e..93adc861c5 100644
--- a/lib/orber/test/cdrlib_SUITE.erl
+++ b/lib/orber/test/cdrlib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,9 @@
%%-----------------------------------------------------------------
-module(cdrlib_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -73,12 +73,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -86,8 +86,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: short integer test
%% Description:
%%-----------------------------------------------------------------
-short(doc) -> ["Description", "more description"];
-short(suite) -> [];
short(_) ->
short_big_loop([-32768, -4040, -1, 0, 4040, 32767]),
short_little_loop([-32768, -4040, -1, 0, 4040, 32767]),
@@ -96,16 +94,16 @@ short(_) ->
short_big_loop([]) ->
ok;
short_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_short(X, []),
- ?line {X, <<>>} = cdrlib:dec_short(big, CodedType),
+ [CodedType] = cdrlib:enc_short(X, []),
+ {X, <<>>} = cdrlib:dec_short(big, CodedType),
short_big_loop(List),
ok.
short_little_loop([]) ->
ok;
short_little_loop([X |List]) ->
- ?line CodedType = enc_short_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_short(little, CodedType),
+ CodedType = enc_short_little(X, []),
+ {X, <<>>} = cdrlib:dec_short(little, CodedType),
short_little_loop(List),
ok.
@@ -113,16 +111,14 @@ enc_short_little(X, Message) ->
list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff | Message]).
bad_short() ->
- ?line {'EXCEPTION', _} = (catch cdrlib:enc_short('atom', [])),
- ?line [CodedType] = cdrlib:enc_char($a, []),
- ?line {'EXIT', _} = (catch cdrlib:dec_short(big, CodedType)),
+ {'EXCEPTION', _} = (catch cdrlib:enc_short('atom', [])),
+ [CodedType] = cdrlib:enc_char($a, []),
+ {'EXIT', _} = (catch cdrlib:dec_short(big, CodedType)),
ok.
%%-----------------------------------------------------------------
%% Test Case: unsigned short integer test
%% Description:
%%-----------------------------------------------------------------
-ushort(doc) -> ["Description", "more description"];
-ushort(suite) -> [];
ushort(_) ->
ushort_big_loop([0, 4040, 65535]),
ushort_little_loop([0, 4040, 65535]),
@@ -131,16 +127,16 @@ ushort(_) ->
ushort_big_loop([]) ->
ok;
ushort_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_unsigned_short(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_short(big, CodedType),
+ [CodedType] = cdrlib:enc_unsigned_short(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_short(big, CodedType),
ushort_big_loop(List),
ok.
ushort_little_loop([]) ->
ok;
ushort_little_loop([X |List]) ->
- ?line CodedType = enc_ushort_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_short(little, CodedType),
+ CodedType = enc_ushort_little(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_short(little, CodedType),
ushort_little_loop(List),
ok.
@@ -153,8 +149,6 @@ bad_ushort() ->
%% Test Case: long integer test
%% Description:
%%-----------------------------------------------------------------
-long(doc) -> ["Description", "more description"];
-long(suite) -> [];
long(_) ->
long_big_loop([-2147483648, -40404040, -32768, -4040, -1,
0, 4040, 32767, 40404040, 2147483647]),
@@ -166,16 +160,16 @@ long(_) ->
long_big_loop([]) ->
ok;
long_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_long(X, []),
- ?line {X, <<>>} = cdrlib:dec_long(big, CodedType),
+ [CodedType] = cdrlib:enc_long(X, []),
+ {X, <<>>} = cdrlib:dec_long(big, CodedType),
long_big_loop(List),
ok.
long_little_loop([]) ->
ok;
long_little_loop([X |List]) ->
- ?line CodedType = enc_long_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_long(little, CodedType),
+ CodedType = enc_long_little(X, []),
+ {X, <<>>} = cdrlib:dec_long(little, CodedType),
long_little_loop(List),
ok.
@@ -190,8 +184,6 @@ bad_long() ->
%% Test Case: unsigned long integer test
%% Description:
%%-----------------------------------------------------------------
-ulong(doc) -> ["Description", "more description"];
-ulong(suite) -> [];
ulong(_) ->
ulong_big_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
ulong_little_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
@@ -201,16 +193,16 @@ ulong(_) ->
ulong_big_loop([]) ->
ok;
ulong_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_unsigned_long(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_long(big, CodedType),
+ [CodedType] = cdrlib:enc_unsigned_long(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_long(big, CodedType),
ulong_big_loop(List),
ok.
ulong_little_loop([]) ->
ok;
ulong_little_loop([X |List]) ->
- ?line CodedType = enc_ulong_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_long(little, CodedType),
+ CodedType = enc_ulong_little(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_long(little, CodedType),
ulong_little_loop(List),
ok.
@@ -226,8 +218,6 @@ bad_ulong() ->
%% Test Case: long integer test
%% Description:
%%-----------------------------------------------------------------
-longlong(doc) -> ["Description", "more description"];
-longlong(suite) -> [];
longlong(_) ->
longlong_big_loop([-2147483648, -40404040, -32768, -4040, -1,
0, 4040, 32767, 40404040, 2147483647]),
@@ -239,16 +229,16 @@ longlong(_) ->
longlong_big_loop([]) ->
ok;
longlong_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_longlong(X, []),
- ?line {X, <<>>} = cdrlib:dec_longlong(big, CodedType),
+ [CodedType] = cdrlib:enc_longlong(X, []),
+ {X, <<>>} = cdrlib:dec_longlong(big, CodedType),
longlong_big_loop(List),
ok.
longlong_little_loop([]) ->
ok;
longlong_little_loop([X |List]) ->
- ?line CodedType = enc_longlong_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_longlong(little, CodedType),
+ CodedType = enc_longlong_little(X, []),
+ {X, <<>>} = cdrlib:dec_longlong(little, CodedType),
longlong_little_loop(List),
ok.
@@ -264,8 +254,6 @@ bad_longlong() ->
%% Test Case: unsigned long integer test
%% Description:
%%-----------------------------------------------------------------
-ulonglong(doc) -> ["Description", "more description"];
-ulonglong(suite) -> [];
ulonglong(_) ->
ulonglong_big_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
ulonglong_little_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
@@ -275,16 +263,16 @@ ulonglong(_) ->
ulonglong_big_loop([]) ->
ok;
ulonglong_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_unsigned_longlong(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_longlong(big, CodedType),
+ [CodedType] = cdrlib:enc_unsigned_longlong(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_longlong(big, CodedType),
ulonglong_big_loop(List),
ok.
ulonglong_little_loop([]) ->
ok;
ulonglong_little_loop([X |List]) ->
- ?line CodedType = enc_ulonglong_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_longlong(little, CodedType),
+ CodedType = enc_ulonglong_little(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_longlong(little, CodedType),
ulonglong_little_loop(List),
ok.
@@ -302,47 +290,41 @@ bad_ulonglong() ->
%% Test Case: boolean test
%% Description:
%%-----------------------------------------------------------------
-boolean(doc) -> ["Description", "more description"];
-boolean(suite) -> [];
boolean(_) ->
- ?line [CodedTrue] = cdrlib:enc_bool('true', []),
- ?line {'true', <<>>} = cdrlib:dec_bool(CodedTrue),
- ?line [CodedFalse] = cdrlib:enc_bool('false', []),
- ?line {'false', <<>>} = cdrlib:dec_bool(CodedFalse),
+ [CodedTrue] = cdrlib:enc_bool('true', []),
+ {'true', <<>>} = cdrlib:dec_bool(CodedTrue),
+ [CodedFalse] = cdrlib:enc_bool('false', []),
+ {'false', <<>>} = cdrlib:dec_bool(CodedFalse),
ok.
%%-----------------------------------------------------------------
%% Test Case: character test
%% Description:
%%-----------------------------------------------------------------
-character(doc) -> ["Description", "more description"];
-character(suite) -> [];
character(_) ->
- ?line [Coded_0] = cdrlib:enc_char($0, []),
- ?line {$0, <<>>} = cdrlib:dec_char(Coded_0),
- ?line [Coded_a] = cdrlib:enc_char($a, []),
- ?line {$a, <<>>} = cdrlib:dec_char(Coded_a),
- ?line [Coded_Z] = cdrlib:enc_char($Z, []),
- ?line {$Z, <<>>} = cdrlib:dec_char(Coded_Z),
- ?line [Coded_dollar] = cdrlib:enc_char($$, []),
- ?line {$$, <<>>} = cdrlib:dec_char(Coded_dollar),
+ [Coded_0] = cdrlib:enc_char($0, []),
+ {$0, <<>>} = cdrlib:dec_char(Coded_0),
+ [Coded_a] = cdrlib:enc_char($a, []),
+ {$a, <<>>} = cdrlib:dec_char(Coded_a),
+ [Coded_Z] = cdrlib:enc_char($Z, []),
+ {$Z, <<>>} = cdrlib:dec_char(Coded_Z),
+ [Coded_dollar] = cdrlib:enc_char($$, []),
+ {$$, <<>>} = cdrlib:dec_char(Coded_dollar),
ok.
%%-----------------------------------------------------------------
%% Test Case: octet test
%% Description:
%%-----------------------------------------------------------------
-octet(doc) -> ["Description", "more description"];
-octet(suite) -> [];
octet(_) ->
- ?line [Coded_ff] = cdrlib:enc_octet(16#ff, []),
- ?line {16#ff, <<>>} = cdrlib:dec_octet(Coded_ff),
- ?line [Coded_00] = cdrlib:enc_octet(16#00, []),
- ?line {16#00, <<>>} = cdrlib:dec_octet(Coded_00),
- ?line [Coded_5a] = cdrlib:enc_octet(16#5a, []),
- ?line {16#5a, <<>>} = cdrlib:dec_octet(Coded_5a),
- ?line [Coded_48] = cdrlib:enc_octet(16#48, []),
- ?line {16#48, <<>>} = cdrlib:dec_octet(Coded_48),
+ [Coded_ff] = cdrlib:enc_octet(16#ff, []),
+ {16#ff, <<>>} = cdrlib:dec_octet(Coded_ff),
+ [Coded_00] = cdrlib:enc_octet(16#00, []),
+ {16#00, <<>>} = cdrlib:dec_octet(Coded_00),
+ [Coded_5a] = cdrlib:enc_octet(16#5a, []),
+ {16#5a, <<>>} = cdrlib:dec_octet(Coded_5a),
+ [Coded_48] = cdrlib:enc_octet(16#48, []),
+ {16#48, <<>>} = cdrlib:dec_octet(Coded_48),
ok.
@@ -351,8 +333,6 @@ octet(_) ->
%% Test Case: float test
%% Description:
%%-----------------------------------------------------------------
-float(doc) -> ["Description", "more description"];
-float(suite) -> [];
float(_) ->
G = 16#7fffff / 16#800000 + 1.0,
H1 = math:pow(2, 127),
@@ -368,18 +348,18 @@ float(_) ->
float_big_loop([]) ->
ok;
float_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_float(X, []),
- ?line {Y, <<>>} = cdrlib:dec_float(big, CodedType),
- ?line float_comp(X,Y),
+ [CodedType] = cdrlib:enc_float(X, []),
+ {Y, <<>>} = cdrlib:dec_float(big, CodedType),
+ float_comp(X,Y),
float_big_loop(List),
ok.
float_little_loop([]) ->
ok;
float_little_loop([X |List]) ->
- ?line [CodedType] = enc_float_little(X, []),
- ?line {Y, <<>>} = cdrlib:dec_float(little, CodedType),
- ?line float_comp(X,Y),
+ [CodedType] = enc_float_little(X, []),
+ {Y, <<>>} = cdrlib:dec_float(little, CodedType),
+ float_comp(X,Y),
float_little_loop(List),
ok.
@@ -388,8 +368,8 @@ float_comp(X,Y) when X == 0.0, Y == 0.0 ->
float_comp(X,Y) ->
Div = abs(Y) / abs(X),
%% io:format("~p~n", [float_to_list(Div)]),
- ?line true = (Div < 1.0000001),
- ?line true = (Div > 0.9999999),
+ true = (Div < 1.0000001),
+ true = (Div > 0.9999999),
ok.
enc_float_little(X, Message) ->
@@ -399,8 +379,6 @@ enc_float_little(X, Message) ->
%% Test Case: double test
%% Description:
%%-----------------------------------------------------------------
-double(doc) -> ["Description", "more description"];
-double(suite) -> [];
double(_) ->
F = 16#0fffffffffffff / 16#10000000000000 + 1.0,
E1 = math:pow(2, 1023),
@@ -423,18 +401,18 @@ double(_) ->
double_big_loop([]) ->
ok;
double_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_double(X, []),
- ?line {Y, <<>>} = cdrlib:dec_double(big, CodedType),
- ?line double_comp(X,Y),
+ [CodedType] = cdrlib:enc_double(X, []),
+ {Y, <<>>} = cdrlib:dec_double(big, CodedType),
+ double_comp(X,Y),
double_big_loop(List),
ok.
double_little_loop([]) ->
ok;
double_little_loop([X |List]) ->
- ?line [CodedType] = enc_double_little(X, []),
- ?line {Y, <<>>} = cdrlib:dec_double(little, CodedType),
- ?line double_comp(X,Y),
+ [CodedType] = enc_double_little(X, []),
+ {Y, <<>>} = cdrlib:dec_double(little, CodedType),
+ double_comp(X,Y),
double_little_loop(List),
ok.
@@ -446,12 +424,10 @@ double_comp(X,Y) when X == 0.0, Y == 0.0 ->
double_comp(X,Y) ->
Div = abs(Y) / abs(X),
%% io:format("~p~n", [float_to_list(Div)]),
- ?line true = (Div < 1.00000000000001),
- ?line true = (Div > 0.99999999999999),
+ true = (Div < 1.00000000000001),
+ true = (Div > 0.99999999999999),
ok.
-double_should_be_ok(doc) -> ["Description", "more description"];
-double_should_be_ok(suite) -> [];
double_should_be_ok(_) ->
F = 16#0fffffffffffff / 16#10000000000000 + 1.0,
E1 = math:pow(2, 1024), % erlang can't handle this.
@@ -466,29 +442,27 @@ double_should_be_ok(_) ->
%% Test Case: enum test
%% Description:
%%-----------------------------------------------------------------
-enum(doc) -> ["Description", "more description"];
-enum(suite) -> [];
enum(_) ->
enum_big(),
enum_little(),
ok.
enum_big() ->
- ?line [Coded_a] = cdrlib:enc_enum(a,[a,b,c],[]),
- ?line {a, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_a),
- ?line [Coded_b] = cdrlib:enc_enum(b,[a,b,c],[]),
- ?line {b, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_b),
- ?line [Coded_c] = cdrlib:enc_enum(c,[a,b,c],[]),
- ?line {c, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_c),
+ [Coded_a] = cdrlib:enc_enum(a,[a,b,c],[]),
+ {a, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_a),
+ [Coded_b] = cdrlib:enc_enum(b,[a,b,c],[]),
+ {b, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_b),
+ [Coded_c] = cdrlib:enc_enum(c,[a,b,c],[]),
+ {c, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_c),
ok.
enum_little() ->
- ?line Coded_a = enc_r_enum(a,[a,b,c],[]),
- ?line {a, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_a),
- ?line Coded_b = enc_r_enum(b,[a,b,c],[]),
- ?line {b, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_b),
- ?line Coded_c = enc_r_enum(c,[a,b,c],[]),
- ?line {c, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_c),
+ Coded_a = enc_r_enum(a,[a,b,c],[]),
+ {a, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_a),
+ Coded_b = enc_r_enum(b,[a,b,c],[]),
+ {b, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_b),
+ Coded_c = enc_r_enum(c,[a,b,c],[]),
+ {c, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_c),
ok.
enc_r_enum(Enum, ElemList, Message) ->
diff --git a/lib/orber/test/corba_SUITE.erl b/lib/orber/test/corba_SUITE.erl
index 914856f370..22bb8dd2f9 100644
--- a/lib/orber/test/corba_SUITE.erl
+++ b/lib/orber/test/corba_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,13 +26,13 @@
%%-----------------------------------------------------------------
-module(corba_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -98,14 +98,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -133,50 +133,48 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% API tests for pseudo interface CORBA
%%-----------------------------------------------------------------
-corba_api(doc) -> ["CORBA API tests", ""];
-corba_api(suite) -> [];
corba_api(_) ->
NIL = corba:create_nil_objref(),
- ?line ok = corba:dispose(NIL),
- ?line NS = corba:resolve_initial_references("NameService"),
- ?line List = corba:list_initial_services(),
- ?line ["NameService"] = List,
- ?line NSstring = corba:object_to_string(NS),
- ?line NS1 = corba:string_to_object(NSstring),
- ?line NSstring = corba:object_to_string(NS1),
- ?line true = corba:add_initial_service("MyData", NS),
- ?line NS = corba:resolve_initial_references("MyData"),
- ?line [_,_] = corba:list_initial_services(),
- ?line false = corba:remove_initial_service("Wrong"),
- ?line NIL = corba:resolve_initial_references("Wrong"),
- ?line NS = corba:string_to_object("corbaloc:rir:/MyData"),
- ?line true = corba:remove_initial_service("MyData"),
- ?line ["NameService"] = corba:list_initial_services(),
+ ok = corba:dispose(NIL),
+ NS = corba:resolve_initial_references("NameService"),
+ List = corba:list_initial_services(),
+ ["NameService"] = List,
+ NSstring = corba:object_to_string(NS),
+ NS1 = corba:string_to_object(NSstring),
+ NSstring = corba:object_to_string(NS1),
+ true = corba:add_initial_service("MyData", NS),
+ NS = corba:resolve_initial_references("MyData"),
+ [_,_] = corba:list_initial_services(),
+ false = corba:remove_initial_service("Wrong"),
+ NIL = corba:resolve_initial_references("Wrong"),
+ NS = corba:string_to_object("corbaloc:rir:/MyData"),
+ true = corba:remove_initial_service("MyData"),
+ ["NameService"] = corba:list_initial_services(),
%% This is a collection of different stringified IOR:s (correct & incorrect)
%% which we use to test IOR encode/decode.
- ?line IOR1 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000040000000000000100000102010000000a3132372e302e302e31009d610000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000184000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e231657000000000303030000000300000021000000ec000102020000000200060202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d600000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00460202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d62004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00000014000000080001006600069d5e000000010000002c000303030001000100000004000100200001010900010100050100010001010900000002000101000501000100000000000000dc000102010000000a3132372e302e302e31009d5f0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e23165700000000030303000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000080000102010000000a3132372e302e302e31009d5d0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR2 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000e0000102010000000a3132372e302e302e31009d5f00000034abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f504f410000cafebabe3e23165700000000000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR3 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000108000102010000000a3132372e302e302e31009d6100000037abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f55505f504f410000cafebabe3e231657000000000100000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR4 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000080000102010000000a3132372e302e302e31009d5d0000002eabacab3131303432343836383731005f526f6f74504f410049494f505f504f410000cafebabe3e23165700000000020200000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR5 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000fc000102010000000a3132372e302e302e3100000000000033abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f504f410000cafebabe3e231657000000000100000002000000210000007000010202000000010006020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d6000000000020200000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR6 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000124000102010000000a3132372e302e302e3100000000000036abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f55505f504f410000cafebabe3e23165700000000020200000002000000210000009400010202000000010046020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d620040004002020000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR7 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000090000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100544c535f504f410000cafebabe3e231657000000000303030000000200000014000000080001006600069d5e000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR1 = corba:string_to_object(corba:object_to_string(IOR1)),
- ?line IOR2 = corba:string_to_object(corba:object_to_string(IOR2)),
- ?line IOR3 = corba:string_to_object(corba:object_to_string(IOR3)),
- ?line IOR4 = corba:string_to_object(corba:object_to_string(IOR4)),
- ?line IOR5 = corba:string_to_object(corba:object_to_string(IOR5)),
- ?line IOR6 = corba:string_to_object(corba:object_to_string(IOR6)),
- ?line IOR7 = corba:string_to_object(corba:object_to_string(IOR7)),
- ?line ?match(ok, corba:print_object(IOR1)),
- ?line ?match(ok, corba:print_object(IOR2)),
- ?line ?match(ok, corba:print_object(IOR3)),
- ?line ?match(ok, corba:print_object(IOR4)),
- ?line ?match(ok, corba:print_object(IOR5)),
- ?line ?match(ok, corba:print_object(IOR6)),
- ?line ?match(ok, corba:print_object(IOR7)),
- ?line ?match(ok, corba:print_object("IOR:000303030000000d49444c3a746573743a312e300003030300000002000000000000003000010001000000136d792e686f73742e65726c616e672e6f72670001801a02020000000c424f410a00000a0000070a010000000100000024000303030000000100000001000000140003030300010001000000000001010900000000")),
+ IOR1 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000040000000000000100000102010000000a3132372e302e302e31009d610000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000184000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e231657000000000303030000000300000021000000ec000102020000000200060202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d600000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00460202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d62004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00000014000000080001006600069d5e000000010000002c000303030001000100000004000100200001010900010100050100010001010900000002000101000501000100000000000000dc000102010000000a3132372e302e302e31009d5f0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e23165700000000030303000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000080000102010000000a3132372e302e302e31009d5d0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR2 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000e0000102010000000a3132372e302e302e31009d5f00000034abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f504f410000cafebabe3e23165700000000000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR3 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000108000102010000000a3132372e302e302e31009d6100000037abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f55505f504f410000cafebabe3e231657000000000100000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR4 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000080000102010000000a3132372e302e302e31009d5d0000002eabacab3131303432343836383731005f526f6f74504f410049494f505f504f410000cafebabe3e23165700000000020200000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR5 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000fc000102010000000a3132372e302e302e3100000000000033abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f504f410000cafebabe3e231657000000000100000002000000210000007000010202000000010006020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d6000000000020200000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR6 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000124000102010000000a3132372e302e302e3100000000000036abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f55505f504f410000cafebabe3e23165700000000020200000002000000210000009400010202000000010046020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d620040004002020000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR7 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000090000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100544c535f504f410000cafebabe3e231657000000000303030000000200000014000000080001006600069d5e000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR1 = corba:string_to_object(corba:object_to_string(IOR1)),
+ IOR2 = corba:string_to_object(corba:object_to_string(IOR2)),
+ IOR3 = corba:string_to_object(corba:object_to_string(IOR3)),
+ IOR4 = corba:string_to_object(corba:object_to_string(IOR4)),
+ IOR5 = corba:string_to_object(corba:object_to_string(IOR5)),
+ IOR6 = corba:string_to_object(corba:object_to_string(IOR6)),
+ IOR7 = corba:string_to_object(corba:object_to_string(IOR7)),
+ ?match(ok, corba:print_object(IOR1)),
+ ?match(ok, corba:print_object(IOR2)),
+ ?match(ok, corba:print_object(IOR3)),
+ ?match(ok, corba:print_object(IOR4)),
+ ?match(ok, corba:print_object(IOR5)),
+ ?match(ok, corba:print_object(IOR6)),
+ ?match(ok, corba:print_object(IOR7)),
+ ?match(ok, corba:print_object("IOR:000303030000000d49444c3a746573743a312e300003030300000002000000000000003000010001000000136d792e686f73742e65726c616e672e6f72670001801a02020000000c424f410a00000a0000070a010000000100000024000303030000000100000001000000140003030300010001000000000001010900000000")),
[IP] = ?match([_], orber:host()),
?match(#'IOP_IOR'{profiles=[#'IOP_TaggedProfile'
{tag=?TAG_INTERNET_IOP,
@@ -199,124 +197,112 @@ corba_api(_) ->
%%-----------------------------------------------------------------
%% API tests for interface BOA
%%-----------------------------------------------------------------
-boa_api(doc) -> ["BOA API tests", ""];
-boa_api(suite) -> [];
boa_api(_) ->
ok.
%%-----------------------------------------------------------------
%% API tests for interface OBJECT
%%-----------------------------------------------------------------
-object_api(doc) -> ["Object API tests", ""];
-object_api(suite) -> [];
object_api(_) ->
- ?line oe_orber_test_server:oe_register(),
- ?line EC = orber_test_server:oe_create(),
- ?line NS = corba:resolve_initial_references("NameService"),
+ oe_orber_test_server:oe_register(),
+ EC = orber_test_server:oe_create(),
+ NS = corba:resolve_initial_references("NameService"),
%% testing corba_object:is_a(Obj, IFRID) locally.
- ?line orber_test_lib:corba_object_tests(EC, NS),
+ orber_test_lib:corba_object_tests(EC, NS),
- ?line ?match(false, corba_object:non_existent(NS)),
+ ?match(false, corba_object:non_existent(NS)),
- ?line corba:dispose(EC),
- ?line oe_orber_test_server:oe_unregister(),
+ corba:dispose(EC),
+ oe_orber_test_server:oe_unregister(),
ok.
%%-----------------------------------------------------------------
%% API tests for orbers main module
%%-----------------------------------------------------------------
-orber_api(doc) -> ["orber API tests", ""];
-orber_api(suite) -> [];
orber_api(_) ->
- ?line ok = orber:uninstall(),
- ?line orber:install([node()]),
- ?line application:start(orber),
- ?line NodeList = orber:orber_nodes(),
- ?line NL = node(),
- ?line [NL] = NodeList,
+ ok = orber:uninstall(),
+ orber:install([node()]),
+ application:start(orber),
+ NodeList = orber:orber_nodes(),
+ NL = node(),
+ [NL] = NodeList,
ok.
%%-----------------------------------------------------------------
%% API tests for exception mapping
%%-----------------------------------------------------------------
-exception_info_api(doc) -> ["orber API tests", ""];
-exception_info_api(suite) -> [];
exception_info_api(_) ->
- ?line {ok, S1} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1163001858,'COMPLETED_NO'}}),
- ?line {ok, S2} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1330446337,'COMPLETED_NO'}}),
- ?line {ok, S3} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1398079490,'COMPLETED_NO'}}),
- ?line {ok, S4} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1347813377,'COMPLETED_NO'}}),
- ?line {ok, S5} = orber:exception_info({'EXCEPTION', {'CosNaming_NamingContext_InvalidName',"IDL:omg.org/CosNaming/NamingContext/InvalidName:1.0"}}),
- ?line error_logger:info_msg("~s", [S1]),
- ?line error_logger:info_msg("~s", [S2]),
- ?line error_logger:info_msg("~s", [S3]),
- ?line error_logger:info_msg("~s", [S4]),
- ?line error_logger:info_msg("~s", [S5]),
+ {ok, S1} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1163001858,'COMPLETED_NO'}}),
+ {ok, S2} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1330446337,'COMPLETED_NO'}}),
+ {ok, S3} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1398079490,'COMPLETED_NO'}}),
+ {ok, S4} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1347813377,'COMPLETED_NO'}}),
+ {ok, S5} = orber:exception_info({'EXCEPTION', {'CosNaming_NamingContext_InvalidName',"IDL:omg.org/CosNaming/NamingContext/InvalidName:1.0"}}),
+ error_logger:info_msg("~s", [S1]),
+ error_logger:info_msg("~s", [S2]),
+ error_logger:info_msg("~s", [S3]),
+ error_logger:info_msg("~s", [S4]),
+ error_logger:info_msg("~s", [S5]),
ok.
%%-----------------------------------------------------------------
%% API tests for orbers pseudo objects.
%%-----------------------------------------------------------------
-orber_pseudo_objects(doc) -> ["orber_pseudo_objects API tests", ""];
-orber_pseudo_objects(suite) -> [];
orber_pseudo_objects(_) ->
- ?line oe_orber_test_server:oe_register(),
+ oe_orber_test_server:oe_register(),
Obj1=(catch orber_test_server:oe_create(state,[{pseudo,true},
{local_typecheck, true}])),
- ?line ?match({_,pseudo,orber_test_server_impl, _,_, _}, Obj1),
+ ?match({_,pseudo,orber_test_server_impl, _,_, _}, Obj1),
Obj2=(catch orber_test_server:oe_create([],[{pseudo, truce}])),
- ?line ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj2),
+ ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj2),
spawn(?MODULE, pseudo_calls, [20, Obj1]),
- ?line ?match({ok, 10000}, orber_test_server:pseudo_call_delay(Obj1, 10000)),
+ ?match({ok, 10000}, orber_test_server:pseudo_call_delay(Obj1, 10000)),
spawn(?MODULE, pseudo_casts, [20, Obj1]),
- ?line ?match(ok, orber_test_server:pseudo_cast_delay(Obj1, 10000)),
+ ?match(ok, orber_test_server:pseudo_cast_delay(Obj1, 10000)),
- ?line ?match('object_here', corba:locate(Obj1)),
+ ?match('object_here', corba:locate(Obj1)),
- ?line NS = corba:resolve_initial_references("NameService"),
+ NS = corba:resolve_initial_references("NameService"),
- ?line orber_test_lib:corba_object_tests(Obj1, NS),
+ orber_test_lib:corba_object_tests(Obj1, NS),
- ?line ?match("IDL:omg.org/orber_test/server:1.0",orber_test_server:typeID()),
+ ?match("IDL:omg.org/orber_test/server:1.0",orber_test_server:typeID()),
%% Test if exceptions are handled properly.
- ?line ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
+ ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
orber_test_server:pseudo_call_raise_exc(Obj1, 1)),
- ?line ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
+ ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
orber_test_server:pseudo_call_raise_exc(Obj1, 2)),
%% Test if exit is handled properly.
- ?line ?match({'EXCEPTION',{'TRANSIENT',_,_,_}},
+ ?match({'EXCEPTION',{'TRANSIENT',_,_,_}},
orber_test_server:stop_brutal(Obj1)),
orber_test_lib:test_coding(Obj1, true),
%% possible to use subobject key?
- ?line ?match(state, binary_to_term(corba:get_subobject_key(Obj1))),
+ ?match(state, binary_to_term(corba:get_subobject_key(Obj1))),
- ?line ?match({'EXCEPTION',{'INV_OBJREF',[],_,'COMPLETED_NO'}},
+ ?match({'EXCEPTION',{'INV_OBJREF',[],_,'COMPLETED_NO'}},
corba:get_pid(Obj1)),
- ?line ?match(false, corba_object:non_existent(Obj1)),
+ ?match(false, corba_object:non_existent(Obj1)),
- ?line ?match(ok, corba:dispose(Obj1)),
+ ?match(ok, corba:dispose(Obj1)),
- ?line ?match(false, corba_object:non_existent(Obj1)),
+ ?match(false, corba_object:non_existent(Obj1)),
%% Try if it's possible to stringify and recover the object reference.
IOR_string = (catch corba:object_to_string(Obj1)),
Obj3 =(catch corba:string_to_object(IOR_string)),
- ?line ?match(IOR_string, corba:object_to_string(Obj3)),
+ ?match(IOR_string, corba:object_to_string(Obj3)),
Obj4=(catch orber_test_server:oe_create(undefined,[{pseudo,true}])),
- ?line ?match(ok, corba:dispose(Obj4)),
- ?line oe_orber_test_server:oe_unregister(),
+ ?match(ok, corba:dispose(Obj4)),
+ oe_orber_test_server:oe_unregister(),
ok.
%%-----------------------------------------------------------------
%% API tests for orbers objectkeys server.
%%-----------------------------------------------------------------
-orber_objectkeys_api(doc) -> ["orber_objectkeys API tests", ""];
-orber_objectkeys_api(suite) -> [];
orber_objectkeys_api(_) ->
Obj0=(catch orber_test_server:oe_create([], [{sup_child, true}])),
Obj1=(catch orber_test_server:oe_create([], [{persistent, true},
@@ -327,23 +313,23 @@ orber_objectkeys_api(_) ->
%% Obj0 is supposed to be a child started by a supervisor (r6) which
%% handles not only {ok, Pid} but also {ok,Pid, Returnvalue}. In our
%% case the Returnvalue is an ObjectRef.
- ?line ?match({ok,_,{_,key,_, _,_, _}}, Obj0),
+ ?match({ok,_,{_,key,_, _,_, _}}, Obj0),
{ok,_,Obj0Ref} = Obj0,
corba:dispose(Obj0Ref),
%% Only 'global' servers are at the moment allowed to be persistent.
- ?line ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj1),
+ ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj1),
%% We created a persistent object successfully.
- ?line ?match({_,key,_,_,_, _}, Obj2),
+ ?match({_,key,_,_,_, _}, Obj2),
%% Get key and Pid
{_,_,Key,_,_, _} = Obj2,
PID=(catch orber_objectkeys:get_pid(Key)),
%% Use the two different ways to look up if the server is persistent.
- ?line ?match(true, orber_objectkeys:is_persistent(Key)),
- ?line ?match(true, orber_objectkeys:is_persistent(PID)),
+ ?match(true, orber_objectkeys:is_persistent(Key)),
+ ?match(true, orber_objectkeys:is_persistent(PID)),
%% Create servers using every possible way.
O1=(catch orber_test_server:oe_create()),
@@ -359,42 +345,42 @@ orber_objectkeys_api(_) ->
O8=(catch orber_test_server:oe_create_link([], {'global', {o8, obj}})),
%% Test if all the object references are correct.
- ?line ?match({_,key,_,_,_, _}, O1),
- ?line ?match({_,key,_,_,_, _}, O2),
- ?line ?match({_,key,_,_,_, _}, O3),
- ?line ?match({_,key,_,_,_, _}, O4),
- ?line ?match({_, registered, o5, _,_, _}, O5),
- ?line ?match({_,key,_,_,_, _}, O6),
- ?line ?match({_, registered, o7, _,_, _}, O7),
- ?line ?match({_,key,_,_,_, _}, O8),
+ ?match({_,key,_,_,_, _}, O1),
+ ?match({_,key,_,_,_, _}, O2),
+ ?match({_,key,_,_,_, _}, O3),
+ ?match({_,key,_,_,_, _}, O4),
+ ?match({_, registered, o5, _,_, _}, O5),
+ ?match({_,key,_,_,_, _}, O6),
+ ?match({_, registered, o7, _,_, _}, O7),
+ ?match({_,key,_,_,_, _}, O8),
%% Test if persistent.
{_,_,Key1,_,_, _} = O1,
PID1=(catch orber_objectkeys:get_pid(Key1)),
- ?line ?match(false, orber_objectkeys:is_persistent(Key1)),
- ?line ?match(false, orber_objectkeys:is_persistent(PID1)),
+ ?match(false, orber_objectkeys:is_persistent(Key1)),
+ ?match(false, orber_objectkeys:is_persistent(PID1)),
%% all the servers are alive(?!).
- ?line ?match(false, corba_object:non_existent(O1)),
- ?line ?match(false, corba_object:non_existent(O2)),
- ?line ?match(false, corba_object:non_existent(O3)),
- ?line ?match(false, corba_object:non_existent(O4)),
- ?line ?match(false, corba_object:non_existent(O5)),
- ?line ?match(false, corba_object:non_existent(O6)),
- ?line ?match(false, corba_object:non_existent(O7)),
- ?line ?match(false, corba_object:non_existent(O8)),
- ?line ?match(false, corba_object:non_existent(Obj2)),
+ ?match(false, corba_object:non_existent(O1)),
+ ?match(false, corba_object:non_existent(O2)),
+ ?match(false, corba_object:non_existent(O3)),
+ ?match(false, corba_object:non_existent(O4)),
+ ?match(false, corba_object:non_existent(O5)),
+ ?match(false, corba_object:non_existent(O6)),
+ ?match(false, corba_object:non_existent(O7)),
+ ?match(false, corba_object:non_existent(O8)),
+ ?match(false, corba_object:non_existent(Obj2)),
%% Does locate work?
- ?line ?match('object_here', corba:locate(O1)),
- ?line ?match('object_here', corba:locate(O2)),
- ?line ?match('object_here', corba:locate(O3)),
- ?line ?match('object_here', corba:locate(O4)),
- ?line ?match('object_here', corba:locate(O5)),
- ?line ?match('object_here', corba:locate(O6)),
- ?line ?match('object_here', corba:locate(O7)),
- ?line ?match('object_here', corba:locate(O8)),
- ?line ?match('object_here', corba:locate(Obj2)),
+ ?match('object_here', corba:locate(O1)),
+ ?match('object_here', corba:locate(O2)),
+ ?match('object_here', corba:locate(O3)),
+ ?match('object_here', corba:locate(O4)),
+ ?match('object_here', corba:locate(O5)),
+ ?match('object_here', corba:locate(O6)),
+ ?match('object_here', corba:locate(O7)),
+ ?match('object_here', corba:locate(O8)),
+ ?match('object_here', corba:locate(Obj2)),
%% Terminate all servers with reason 'normal'.
catch corba:dispose(O1),
@@ -415,15 +401,15 @@ orber_objectkeys_api(_) ->
%% all the servers are dead(?!). If one of these test-cases
%% fails the only error can be that we didn't sleep long enough, i.e.,
%% try a longer timeout. If still fails something is wrong.
- ?line ?match(true, corba_object:non_existent(O1)),
- ?line ?match(true, corba_object:non_existent(O2)),
- ?line ?match(true, corba_object:non_existent(O3)),
- ?line ?match(true, corba_object:non_existent(O4)),
- ?line ?match(true, corba_object:non_existent(O5)),
- ?line ?match(true, corba_object:non_existent(O6)),
- ?line ?match(true, corba_object:non_existent(O7)),
- ?line ?match(true, corba_object:non_existent(O8)),
- ?line ?match(true, corba_object:non_existent(Obj2)),
+ ?match(true, corba_object:non_existent(O1)),
+ ?match(true, corba_object:non_existent(O2)),
+ ?match(true, corba_object:non_existent(O3)),
+ ?match(true, corba_object:non_existent(O4)),
+ ?match(true, corba_object:non_existent(O5)),
+ ?match(true, corba_object:non_existent(O6)),
+ ?match(true, corba_object:non_existent(O7)),
+ ?match(true, corba_object:non_existent(O8)),
+ ?match(true, corba_object:non_existent(Obj2)),
%% Create a new persistent server.
Obj3=(catch orber_test_server:oe_create([],
@@ -431,10 +417,10 @@ orber_objectkeys_api(_) ->
{regname, {global,{obj2, 12345}}}])),
%% OK?!
- ?line ?match({_,key,_,_,_, _}, Obj3),
+ ?match({_,key,_,_,_, _}, Obj3),
%% Try to create a server with the same name (naturally it fails).
- ?line ?match({'EXCEPTION',{'INTERNAL',[],_,'COMPLETED_NO'}},
+ ?match({'EXCEPTION',{'INTERNAL',[],_,'COMPLETED_NO'}},
orber_test_server:oe_create([],
[{persistent, true},
{regname, {global,{obj2, 12345}}}])),
@@ -449,20 +435,20 @@ orber_objectkeys_api(_) ->
%% Give time to clean up.
timer:sleep(2000),
- ?line ?match({'EXCEPTION',{'TRANSIENT',[],_,'COMPLETED_NO'}},
+ ?match({'EXCEPTION',{'TRANSIENT',[],_,'COMPLETED_NO'}},
gen_server:call(orber_objkeyserver,
{get_pid, Key3},
infinity)),
- ?line ?match(false,corba_object:non_existent(Obj3)),
+ ?match(false,corba_object:non_existent(Obj3)),
%% Run gc wit a "huge" time-limit. Will not erase the dead object.
orber_objectkeys:gc(10000),
- ?line ?match(false,corba_object:non_existent(Obj3)),
+ ?match(false,corba_object:non_existent(Obj3)),
%% Run gc with minimum time-limit. Will erase the dead object.
orber_objectkeys:gc(0),
- ?line ?match(true,corba_object:non_existent(Obj3)),
+ ?match(true,corba_object:non_existent(Obj3)),
%% Create a new persistent server.
Obj4=(catch orber_test_server:oe_create([],
@@ -477,22 +463,22 @@ orber_objectkeys_api(_) ->
%% Give time to clean up.
timer:sleep(2000),
-% ?line ?match({'EXCEPTION',{'COMM_FAILURE',[],0,'COMPLETED_NO'}},
- ?line ?match({error, _},
+% ?match({'EXCEPTION',{'COMM_FAILURE',[],0,'COMPLETED_NO'}},
+ ?match({error, _},
corba:get_pid(Obj4)),
- ?line ?match(false,corba_object:non_existent(Obj4)),
+ ?match(false,corba_object:non_existent(Obj4)),
%% Restart the object.
Obj5=(catch orber_test_server:oe_create([],
[{persistent, true},
{regname, {global,{obj2, 12345}}}])),
%% OK?!
- ?line ?match({_,key,_,_,_, _}, Obj5),
+ ?match({_,key,_,_,_, _}, Obj5),
%% Run gc with minimum time-limit.
orber_objectkeys:gc(0),
- ?line ?match(false,corba_object:non_existent(Obj5)),
+ ?match(false,corba_object:non_existent(Obj5)),
corba:dispose(Obj5),
ok.
@@ -508,337 +494,327 @@ orber_objectkeys_api(_) ->
-callback_ok_api(doc) -> ["Successful callbak API tests", ""];
-callback_ok_api(suite) -> [];
+%% Successful callback API tests
callback_ok_api(_) ->
%% Init
- ?line ?match({ok, {?DO_EXIT, state}}, corba:handle_init(?MODULE, {?DO_EXIT_FLAG, state})),
+ ?match({ok, {?DO_EXIT, state}}, corba:handle_init(?MODULE, {?DO_EXIT_FLAG, state})),
%% Terminate
- ?line ?match(ok, corba:handle_terminate(?MODULE, "reason", {?DO_EXIT, state})),
+ ?match(ok, corba:handle_terminate(?MODULE, "reason", {?DO_EXIT, state})),
%% Handle_call
- ?line ?match({reply,ok,{?DO_EXIT,state}},
+ ?match({reply,ok,{?DO_EXIT,state}},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false)),
%% Handle_cast
- ?line ?match({noreply, {?DO_EXIT,state}},
+ ?match({noreply, {?DO_EXIT,state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false)),
%% Handle_call precond/postcond
- ?line ?match({reply, ok, {?DO_EXIT, state}},
+ ?match({reply, ok, {?DO_EXIT, state}},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {?MODULE, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast precond/postcond
- ?line ?match({noreply, {?DO_EXIT, state}},
+ ?match({noreply, {?DO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {?MODULE, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_info
- ?line ?match({noreply, {?DO_EXIT, state}},
+ ?match({noreply, {?DO_EXIT, state}},
corba:handle_info(?MODULE, "info", {?DO_EXIT, state})),
ok.
-callback_arity_api(doc) -> ["callbak arity API tests", ""];
-callback_arity_api(suite) -> [];
+%% Callback arity API tests
callback_arity_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_call(?MODULE, foo, [to, many, arguments],
{?DO_EXIT, state}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [to, many, arguments],
{?NO_EXIT, state}, [], false, false)),
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, arity}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, arity}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_cast(?MODULE, foo_1w, [to, many, arguments],
{?DO_EXIT, state}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [to, many, arguments],
{?NO_EXIT, state}, [], false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, arity}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, arity}},
+ ?match({noreply, {?NO_EXIT, arity}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, arity}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, arity})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, arity}},
+ ?match({noreply, {?NO_EXIT, arity}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, arity})),
ok.
-callback_module_api(doc) -> ["Module callbak API tests", ""];
-callback_module_api(suite) -> [];
+%% Module callback API tests
callback_module_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_call(wrong_mod, foo, [],
{?DO_EXIT, state}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(wrong_mod, foo, [],
{?NO_EXIT, state}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_cast(wrong_mod, foo_1w, [],
{?DO_EXIT, state}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(wrong_mod, foo_1w, [],
{?NO_EXIT, state}, [], false)),
%% Handle_info - stay-alive == false.
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(wrong_mod, "info", {?DO_EXIT, state})),
%% Handle_info - stay-alive == true.
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_info(wrong_mod, "info", {?NO_EXIT, state})),
ok.
-callback_function_api(doc) -> ["Function callbak API tests", ""];
-callback_function_api(suite) -> [];
+%% Function callback API tests
callback_function_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_call(?MODULE, bad_function, [],
{?DO_EXIT, state}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, bad_function, [],
{?NO_EXIT, state}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_cast(?MODULE, bad_function, [],
{?DO_EXIT, state}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, bad_function, [],
{?NO_EXIT, state}, [], false)),
%% Handle_info - stay-alive == false. Note, we cannot use ?MODULE here.
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(corba, "info", {?DO_EXIT, state})),
%% Handle_info - stay-alive == true. Note, we cannot use ?MODULE here.
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_info(corba, "info", {?NO_EXIT, state})),
ok.
-callback_precond_api(doc) -> ["Precond callbak API tests", ""];
-callback_precond_api(suite) -> [];
+%% Precond callback API tests
callback_precond_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {wrong_mod, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {?MODULE, bad_precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, state}, [], false, false, {wrong_mod, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, state}, [], false, false, {?MODULE, bad_precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {wrong_mod, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {?MODULE, bad_precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, state}, [], false, {wrong_mod, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, state}, [], false, {?MODULE, bad_precond},
{?MODULE, postcond}, ?MODULE)),
ok.
-callback_postcond_api(doc) -> ["Postcond callbak API tests", ""];
-callback_postcond_api(suite) -> [];
+%% Postcond callback API tests
callback_postcond_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {?MODULE, precond},
{wrong_mod, postcond}, ?MODULE)),
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {?MODULE, precond},
{?MODULE, bad_postcond}, ?MODULE)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, state}, [], false, false, {?MODULE, precond},
{wrong_mod, postcond}, ?MODULE)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, state}, [], false, false, {?MODULE, precond},
{?MODULE, bad_postcond}, ?MODULE)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {?MODULE, precond},
{wrong_mod, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {?MODULE, precond},
{?MODULE, bad_postcond}, ?MODULE)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, state}, [], false, {?MODULE, precond},
{wrong_mod, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, state}, [], false, {?MODULE, precond},
{?MODULE, bad_postcond}, ?MODULE)),
ok.
-callback_exit_api(doc) -> ["Callbak exit API tests", ""];
-callback_exit_api(suite) -> [];
+%% Callback exit API tests
callback_exit_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, exit}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, exit}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, exit}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, exit}},
+ ?match({noreply, {?NO_EXIT, exit}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, exit}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, exit})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, exit}},
+ ?match({noreply, {?NO_EXIT, exit}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, exit})),
ok.
-callback_badarith_api(doc) -> ["callbak badarith API tests", ""];
-callback_badarith_api(suite) -> [];
+%% Callback badarith API tests
callback_badarith_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, badarith}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, badarith}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, badarith}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, badarith}},
+ ?match({noreply, {?NO_EXIT, badarith}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, badarith}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, badarith})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, badarith}},
+ ?match({noreply, {?NO_EXIT, badarith}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, badarith})),
ok.
-callback_case_clause_api(doc) -> ["callbak case_clause API tests", ""];
-callback_case_clause_api(suite) -> [];
+%% Callback case_clause API tests
callback_case_clause_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, case_clause}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, case_clause}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, case_clause}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, case_clause}},
+ ?match({noreply, {?NO_EXIT, case_clause}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, case_clause}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, case_clause})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, case_clause}},
+ ?match({noreply, {?NO_EXIT, case_clause}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, case_clause})),
ok.
-callback_function_clause_api(doc) -> ["callbak function_clause API tests", ""];
-callback_function_clause_api(suite) -> [];
+%% Callback function_clause API tests
callback_function_clause_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, function_clause}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, function_clause}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, function_clause}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, function_clause}},
+ ?match({noreply, {?NO_EXIT, function_clause}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, function_clause}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, function_clause})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, function_clause}},
+ ?match({noreply, {?NO_EXIT, function_clause}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, function_clause})),
ok.
diff --git a/lib/orber/test/csiv2_SUITE.erl b/lib/orber/test/csiv2_SUITE.erl
index 7f45f16ef7..7844060582 100644
--- a/lib/orber/test/csiv2_SUITE.erl
+++ b/lib/orber/test/csiv2_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,10 +18,9 @@
%% %CopyrightEnd%
%%
%%
-
-module(csiv2_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -31,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
%%-include_lib("orber/src/OrberCSIv2.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -44,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -357,7 +356,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -389,8 +388,8 @@ end_per_suite(Config) ->
-ifdef(false).
%% OrberCSIv2
-code_CertificateChain_api(doc) -> ["Code CertificateChain"];
-code_CertificateChain_api(suite) -> [];
+%%-----------------------------------------------------------------
+%% Code CertificateChain
code_CertificateChain_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -399,8 +398,7 @@ code_CertificateChain_api(_Config) ->
'OrberCSIv2':decode('CertificateChain', list_to_binary(Enc))),
ok.
-code_AttributeCertChain_api(doc) -> ["Code AttributeCertChain"];
-code_AttributeCertChain_api(suite) -> [];
+%% Code AttributeCertChain
code_AttributeCertChain_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -409,8 +407,7 @@ code_AttributeCertChain_api(_Config) ->
'OrberCSIv2':decode('AttributeCertChain', list_to_binary(Enc))),
ok.
-code_VerifyingCertChain_api(doc) -> ["Code VerifyingCertChain"];
-code_VerifyingCertChain_api(suite) -> [];
+%% Code VerifyingCertChain
code_VerifyingCertChain_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -420,8 +417,8 @@ code_VerifyingCertChain_api(_Config) ->
ok.
%% PKIXAttributeCertificate
-code_AttributeCertificate_api(doc) -> ["Code AttributeCertificate"];
-code_AttributeCertificate_api(suite) -> [];
+%%-----------------------------------------------------------------
+%% Code AttributeCertificate
code_AttributeCertificate_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -430,8 +427,7 @@ code_AttributeCertificate_api(_Config) ->
'OrberCSIv2':decode('AttributeCertificate', list_to_binary(Enc))),
ok.
-code_AttributeCertificateInfo_api(doc) -> ["Code AttributeCertificateInfo"];
-code_AttributeCertificateInfo_api(suite) -> [];
+%% Code AttributeCertificateInfo
code_AttributeCertificateInfo_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -440,8 +436,7 @@ code_AttributeCertificateInfo_api(_Config) ->
'OrberCSIv2':decode('AttributeCertificateInfo', list_to_binary(Enc))),
ok.
-code_AttCertVersion_api(doc) -> ["Code AttCertVersion"];
-code_AttCertVersion_api(suite) -> [];
+%% Code AttCertVersion
code_AttCertVersion_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -450,8 +445,7 @@ code_AttCertVersion_api(_Config) ->
'OrberCSIv2':decode('AttCertVersion', list_to_binary(Enc))),
ok.
-code_Holder_api(doc) -> ["Code Holder"];
-code_Holder_api(suite) -> [];
+%% Code Holder
code_Holder_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -460,8 +454,7 @@ code_Holder_api(_Config) ->
'OrberCSIv2':decode('Holder', list_to_binary(Enc))),
ok.
-code_AttCertIssuer_api(doc) -> ["Code AttCertIssuer"];
-code_AttCertIssuer_api(suite) -> [];
+%% Code AttCertIssuer
code_AttCertIssuer_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -470,8 +463,7 @@ code_AttCertIssuer_api(_Config) ->
'OrberCSIv2':decode('AttCertIssuer', list_to_binary(Enc))),
ok.
-code_AttCertValidityPeriod_api(doc) -> ["Code AttCertValidityPeriod"];
-code_AttCertValidityPeriod_api(suite) -> [];
+%% Code AttCertValidityPeriod
code_AttCertValidityPeriod_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('AttCertValidityPeriod', ?AttCertValidityPeriod)),
@@ -479,8 +471,7 @@ code_AttCertValidityPeriod_api(_Config) ->
'OrberCSIv2':decode('AttCertValidityPeriod', list_to_binary(Enc))),
ok.
-code_V2Form_api(doc) -> ["Code V2Form"];
-code_V2Form_api(suite) -> [];
+%% Code V2Form
code_V2Form_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -489,8 +480,7 @@ code_V2Form_api(_Config) ->
'OrberCSIv2':decode('V2Form', list_to_binary(Enc))),
ok.
-code_IssuerSerial_api(doc) -> ["Code IssuerSerial"];
-code_IssuerSerial_api(suite) -> [];
+%% Code IssuerSerial
code_IssuerSerial_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -499,8 +489,7 @@ code_IssuerSerial_api(_Config) ->
'OrberCSIv2':decode('IssuerSerial', list_to_binary(Enc))),
ok.
-code_ObjectDigestInfo_api(doc) -> ["Code ObjectDigestInfo"];
-code_ObjectDigestInfo_api(suite) -> [];
+%% Code ObjectDigestInfo
code_ObjectDigestInfo_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -510,8 +499,8 @@ code_ObjectDigestInfo_api(_Config) ->
ok.
%% PKIX1Explicit88
-code_Certificate_api(doc) -> ["Code Certificate"];
-code_Certificate_api(suite) -> [];
+%%-----------------------------------------------------------------
+%% Code Certificate
code_Certificate_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -520,8 +509,7 @@ code_Certificate_api(_Config) ->
'OrberCSIv2':decode('Certificate', list_to_binary(Enc))),
ok.
-code_TBSCertificate_api(doc) -> ["Code TBSCertificate"];
-code_TBSCertificate_api(suite) -> [];
+%% Code TBSCertificate
code_TBSCertificate_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -530,8 +518,7 @@ code_TBSCertificate_api(_Config) ->
'OrberCSIv2':decode('TBSCertificate', list_to_binary(Enc))),
ok.
-code_CertificateSerialNumber_api(doc) -> ["Code CertificateSerialNumber"];
-code_CertificateSerialNumber_api(suite) -> [];
+%% Code CertificateSerialNumber"];
code_CertificateSerialNumber_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -540,16 +527,14 @@ code_CertificateSerialNumber_api(_Config) ->
'OrberCSIv2':decode('CertificateSerialNumber', list_to_binary(Enc))),
ok.
-code_Version_api(doc) -> ["Code Version"];
-code_Version_api(suite) -> [];
+%% Code Version
code_Version_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Version', ?Version)),
?match({ok, ?Version}, 'OrberCSIv2':decode('Version', list_to_binary(Enc))),
ok.
-code_AlgorithmIdentifier_api(doc) -> ["Code AlgorithmIdentifier"];
-code_AlgorithmIdentifier_api(suite) -> [];
+%% Code AlgorithmIdentifier
code_AlgorithmIdentifier_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('AlgorithmIdentifier', ?AlgorithmIdentifier)),
@@ -557,8 +542,7 @@ code_AlgorithmIdentifier_api(_Config) ->
'OrberCSIv2':decode('AlgorithmIdentifier', list_to_binary(Enc))),
ok.
-code_Name_api(doc) -> ["Code Name"];
-code_Name_api(suite) -> [];
+%% Code Name
code_Name_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Name', ?Name)),
@@ -566,8 +550,7 @@ code_Name_api(_Config) ->
'OrberCSIv2':decode('Name', list_to_binary(Enc))),
ok.
-code_RDNSequence_api(doc) -> ["Code RDNSequence"];
-code_RDNSequence_api(suite) -> [];
+%% Code RDNSequence
code_RDNSequence_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('RDNSequence', ?RDNSequence)),
@@ -575,8 +558,7 @@ code_RDNSequence_api(_Config) ->
'OrberCSIv2':decode('RDNSequence', list_to_binary(Enc))),
ok.
-code_RelativeDistinguishedName_api(doc) -> ["Code RelativeDistinguishedName"];
-code_RelativeDistinguishedName_api(suite) -> [];
+%% Code RelativeDistinguishedName
code_RelativeDistinguishedName_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('RelativeDistinguishedName', ?RelativeDistinguishedName)),
@@ -584,8 +566,7 @@ code_RelativeDistinguishedName_api(_Config) ->
'OrberCSIv2':decode('RelativeDistinguishedName', list_to_binary(Enc))),
ok.
-code_AttributeTypeAndValue_api(doc) -> ["Code AttributeTypeAndValue"];
-code_AttributeTypeAndValue_api(suite) -> [];
+%% Code AttributeTypeAndValue
code_AttributeTypeAndValue_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('AttributeTypeAndValue', ?AttributeTypeAndValue)),
@@ -593,8 +574,7 @@ code_AttributeTypeAndValue_api(_Config) ->
'OrberCSIv2':decode('AttributeTypeAndValue', list_to_binary(Enc))),
ok.
-code_Attribute_api(doc) -> ["Code Attribute"];
-code_Attribute_api(suite) -> [];
+%% Code Attribute"];
code_Attribute_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Attribute', ?Attribute)),
@@ -602,8 +582,7 @@ code_Attribute_api(_Config) ->
'OrberCSIv2':decode('Attribute', list_to_binary(Enc))),
ok.
-code_Validity_api(doc) -> ["Code Validity"];
-code_Validity_api(suite) -> [];
+%% Code Validity
code_Validity_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Validity', ?Validity)),
@@ -611,8 +590,7 @@ code_Validity_api(_Config) ->
'OrberCSIv2':decode('Validity', list_to_binary(Enc))),
ok.
-code_SubjectPublicKeyInfo_api(doc) -> ["Code SubjectPublicKeyInfo"];
-code_SubjectPublicKeyInfo_api(suite) -> [];
+%% Code SubjectPublicKeyInfo
code_SubjectPublicKeyInfo_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('SubjectPublicKeyInfo', ?SubjectPublicKeyInfo)),
@@ -620,16 +598,14 @@ code_SubjectPublicKeyInfo_api(_Config) ->
'OrberCSIv2':decode('SubjectPublicKeyInfo', list_to_binary(Enc))),
ok.
-code_UniqueIdentifier_api(doc) -> ["Code UniqueIdentifier"];
-code_UniqueIdentifier_api(suite) -> [];
+%% Code UniqueIdentifier
code_UniqueIdentifier_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('UniqueIdentifier', ?UniqueIdentifier)),
?match({ok, _}, 'OrberCSIv2':decode('UniqueIdentifier', list_to_binary(Enc))),
ok.
-code_Extensions_api(doc) -> ["Code Extensions"];
-code_Extensions_api(suite) -> [];
+%% Code Extensions
code_Extensions_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Extensions', ?Extensions)),
@@ -637,8 +613,7 @@ code_Extensions_api(_Config) ->
'OrberCSIv2':decode('Extensions', list_to_binary(Enc))),
ok.
-code_Extension_api(doc) -> ["Code Extension"];
-code_Extension_api(suite) -> [];
+%% Code Extension
code_Extension_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Extension', ?Extension)),
@@ -647,8 +622,8 @@ code_Extension_api(_Config) ->
ok.
%% OpenSSL generated x509 Certificate
-code_OpenSSL509_api(doc) -> ["Code OpenSSL generated x509 Certificate"];
-code_OpenSSL509_api(suite) -> [];
+%%-----------------------------------------------------------------
+%% Code OpenSSL generated x509 Certificate
code_OpenSSL509_api(_Config) ->
{ok, Cert} =
?match({ok, #'Certificate'{}},
@@ -666,8 +641,7 @@ code_OpenSSL509_api(_Config) ->
%%-----------------------------------------------------------------
%% Test ssl:peercert
%%-----------------------------------------------------------------
-ssl_server_peercert_api(doc) -> ["Test ssl:peercert (server side)"];
-ssl_server_peercert_api(suite) -> [];
+%% Test ssl:peercert (server side)
ssl_server_peercert_api(_Config) ->
Options = orber_test_lib:get_options(iiop_ssl, server,
2, [{iiop_ssl_port, 0}]),
@@ -685,8 +659,7 @@ ssl_server_peercert_api(_Config) ->
destroy_fake_ORB(ssl, Socket),
ok.
-ssl_client_peercert_api(doc) -> ["Test ssl:peercert (client side)"];
-ssl_client_peercert_api(suite) -> [];
+%% Test ssl:peercert (client side)
ssl_client_peercert_api(_Config) ->
Options = orber_test_lib:get_options(iiop_ssl, client,
2, [{iiop_ssl_port, 0}]),
@@ -827,7 +800,7 @@ context_test(Obj) ->
context_data = MTContextError},
#'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
context_data = MTMessageInContext}],
- ?line ?match(ok, orber_test_server:testing_iiop_context(Obj, [{context, Ctx}])).
+ ?match(ok, orber_test_server:testing_iiop_context(Obj, [{context, Ctx}])).
fake_server_ORB(Type, Port, Options) ->
diff --git a/lib/orber/test/data_types_SUITE.erl b/lib/orber/test/data_types_SUITE.erl
index d0e0eacad1..3873bfbaf6 100644
--- a/lib/orber/test/data_types_SUITE.erl
+++ b/lib/orber/test/data_types_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
-module(data_types_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -42,7 +42,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -89,24 +89,22 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
%%-----------------------------------------------------------------
-%% Test Case: name component handling tests
+%% Test Case: Fixed Point Datatype
%% Description:
%%-----------------------------------------------------------------
-fixed_type(doc) -> ["Test the Fixed Point Datatype."];
-fixed_type(suite) -> [];
fixed_type(_) ->
Val1 = ?match({fixed,3,2,314}, orber_test_server:val1()),
_Val2 = ?match({fixed,3,2,314}, orber_test_server:val2()),
@@ -165,11 +163,9 @@ fixed_type(_) ->
ok.
%%-----------------------------------------------------------------
-%% Test Case: any type
+%% Test Case: Any type
%% Description:
%%-----------------------------------------------------------------
-any_type(doc) -> ["Test the Any Datatype."];
-any_type(suite) -> [];
any_type(_) ->
?match(#any{typecode=undefined, value=undefined},
any:create()),
diff --git a/lib/orber/test/generated_SUITE.erl b/lib/orber/test/generated_SUITE.erl
index cc14b4ebc0..3550941dfd 100644
--- a/lib/orber/test/generated_SUITE.erl
+++ b/lib/orber/test/generated_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
-module(generated_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -122,12 +122,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -135,8 +135,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case:'OrberApp_IFR'
%% Description:
%%-----------------------------------------------------------------
-'OrberApp_IFR'(doc) -> [""];
-'OrberApp_IFR'(suite) -> [];
'OrberApp_IFR'(_) ->
?nomatch(undefined, 'OrberApp_IFR':oe_tc(get_absolute_name)),
?nomatch(undefined, 'OrberApp_IFR':oe_tc(get_user_exception_type)),
@@ -153,8 +151,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: erlang_binary
%% Description:
%%-----------------------------------------------------------------
-erlang_binary(doc) -> [""];
-erlang_binary(suite) -> [];
erlang_binary(_) ->
?match(true, orber_tc:check_tc(erlang_binary:tc())),
?match("IDL:erlang/binary:1.0", erlang_binary:id()),
@@ -165,8 +161,6 @@ erlang_binary(_) ->
%% Test Case: erlang_pid
%% Description:
%%-----------------------------------------------------------------
-erlang_pid(doc) -> [""];
-erlang_pid(suite) -> [];
erlang_pid(_) ->
?match(true, orber_tc:check_tc(erlang_pid:tc())),
?match("IDL:erlang/pid:1.0", erlang_pid:id()),
@@ -177,8 +171,6 @@ erlang_pid(_) ->
%% Test Case: erlang_port
%% Description:
%%-----------------------------------------------------------------
-erlang_port(doc) -> [""];
-erlang_port(suite) -> [];
erlang_port(_) ->
?match(true, orber_tc:check_tc(erlang_port:tc())),
?match("IDL:erlang/port:1.0", erlang_port:id()),
@@ -189,8 +181,6 @@ erlang_port(_) ->
%% Test Case: erlang_ref
%% Description:
%%-----------------------------------------------------------------
-erlang_ref(doc) -> [""];
-erlang_ref(suite) -> [];
erlang_ref(_) ->
?match(true, orber_tc:check_tc(erlang_ref:tc())),
?match("IDL:erlang/ref:1.0", erlang_ref:id()),
@@ -201,8 +191,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_Binding'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_Binding'(doc) -> [""];
-'CosNaming_Binding'(suite) -> [];
'CosNaming_Binding'(_) ->
?match(true, orber_tc:check_tc('CosNaming_Binding':tc())),
?match("IDL:omg.org/CosNaming/Binding:1.0", 'CosNaming_Binding':id()),
@@ -213,8 +201,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_BindingList'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_BindingList'(doc) -> [""];
-'CosNaming_BindingList'(suite) -> [];
'CosNaming_BindingList'(_) ->
?match(true, orber_tc:check_tc('CosNaming_BindingList':tc())),
?match("IDL:omg.org/CosNaming/BindingList:1.0", 'CosNaming_BindingList':id()),
@@ -225,8 +211,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_Name'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_Name'(doc) -> [""];
-'CosNaming_Name'(suite) -> [];
'CosNaming_Name'(_) ->
?match(true, orber_tc:check_tc('CosNaming_Name':tc())),
?match("IDL:omg.org/CosNaming/Name:1.0", 'CosNaming_Name':id()),
@@ -237,8 +221,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NameComponent'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NameComponent'(doc) -> [""];
-'CosNaming_NameComponent'(suite) -> [];
'CosNaming_NameComponent'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NameComponent':tc())),
?match("IDL:omg.org/CosNaming/NameComponent:1.0", 'CosNaming_NameComponent':id()),
@@ -249,8 +231,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContextExt_InvalidAddress'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContextExt_InvalidAddress'(doc) -> [""];
-'CosNaming_NamingContextExt_InvalidAddress'(suite) -> [];
'CosNaming_NamingContextExt_InvalidAddress'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContextExt_InvalidAddress':tc())),
?match("IDL:omg.org/CosNaming/NamingContextExt/InvalidAddress:1.0", 'CosNaming_NamingContextExt_InvalidAddress':id()),
@@ -261,8 +241,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_AlreadyBound'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_AlreadyBound'(doc) -> [""];
-'CosNaming_NamingContext_AlreadyBound'(suite) -> [];
'CosNaming_NamingContext_AlreadyBound'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_AlreadyBound':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0", 'CosNaming_NamingContext_AlreadyBound':id()),
@@ -273,8 +251,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_CannotProceed'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_CannotProceed'(doc) -> [""];
-'CosNaming_NamingContext_CannotProceed'(suite) -> [];
'CosNaming_NamingContext_CannotProceed'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_CannotProceed':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/CannotProceed:1.0", 'CosNaming_NamingContext_CannotProceed':id()),
@@ -285,8 +261,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_InvalidName'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_InvalidName'(doc) -> [""];
-'CosNaming_NamingContext_InvalidName'(suite) -> [];
'CosNaming_NamingContext_InvalidName'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_InvalidName':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/InvalidName:1.0", 'CosNaming_NamingContext_InvalidName':id()),
@@ -297,8 +271,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_NotEmpty'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_NotEmpty'(doc) -> [""];
-'CosNaming_NamingContext_NotEmpty'(suite) -> [];
'CosNaming_NamingContext_NotEmpty'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_NotEmpty':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/NotEmpty:1.0", 'CosNaming_NamingContext_NotEmpty':id()),
@@ -309,8 +281,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_NotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_NotFound'(doc) -> [""];
-'CosNaming_NamingContext_NotFound'(suite) -> [];
'CosNaming_NamingContext_NotFound'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_NotFound':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/NotFound:1.0", 'CosNaming_NamingContext_NotFound':id()),
@@ -321,8 +291,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_BindingIterator'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_BindingIterator'(doc) -> [""];
-'CosNaming_BindingIterator'(suite) -> [];
'CosNaming_BindingIterator'(_) ->
?nomatch(undefined, 'CosNaming_BindingIterator':oe_tc(next_one)),
?nomatch(undefined, 'CosNaming_BindingIterator':oe_tc(next_n)),
@@ -341,8 +309,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext'(doc) -> [""];
-'CosNaming_NamingContext'(suite) -> [];
'CosNaming_NamingContext'(_) ->
?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(bind)),
?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(rebind)),
@@ -368,8 +334,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContexExt'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContextExt'(doc) -> [""];
-'CosNaming_NamingContextExt'(suite) -> [];
'CosNaming_NamingContextExt'(_) ->
?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(to_string)),
?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(to_name)),
diff --git a/lib/orber/test/iiop_module_do_test_impl.erl b/lib/orber/test/iiop_module_do_test_impl.erl
index c6c1d4d48a..3e433ace72 100644
--- a/lib/orber/test/iiop_module_do_test_impl.erl
+++ b/lib/orber/test/iiop_module_do_test_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/iiop_module_test_impl.erl b/lib/orber/test/iiop_module_test_impl.erl
index cebdf160ab..c2ec427d5d 100644
--- a/lib/orber/test/iiop_module_test_impl.erl
+++ b/lib/orber/test/iiop_module_test_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/iiop_test.idl b/lib/orber/test/iiop_test.idl
index 98f06e2c9d..0b20a66edd 100644
--- a/lib/orber/test/iiop_test.idl
+++ b/lib/orber/test/iiop_test.idl
@@ -1,7 +1,7 @@
//
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/iiop_test_impl.erl b/lib/orber/test/iiop_test_impl.erl
index 3fd512b574..26694f8e08 100644
--- a/lib/orber/test/iiop_test_impl.erl
+++ b/lib/orber/test/iiop_test_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/interceptors_SUITE.erl b/lib/orber/test/interceptors_SUITE.erl
index 57d5a5f831..cec4cd1fab 100644
--- a/lib/orber/test/interceptors_SUITE.erl
+++ b/lib/orber/test/interceptors_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,11 +26,11 @@
-module(interceptors_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -54,7 +54,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
io:format("------ CORRECT RESULT ------~n~p~n",
[AcTuAlReS]),
@@ -105,7 +105,7 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
corba:orb_init([{flags, (?ORB_ENV_USE_PI bor ?ORB_ENV_LOCAL_TYPECHECKING)},
@@ -120,7 +120,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -128,8 +128,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: local_pseudo
%% Description:
%%-----------------------------------------------------------------
-local_pseudo(doc) -> [""];
-local_pseudo(suite) -> [];
local_pseudo(_) ->
?match({native, [?MODULE]}, orber:get_local_interceptors()),
%% Global settings
@@ -177,8 +175,6 @@ local_pseudo(_) ->
%% Test Case: local_default
%% Description:
%%-----------------------------------------------------------------
-local_default(doc) -> [""];
-local_default(suite) -> [];
local_default(_) ->
?match({native, [?MODULE]}, orber:get_local_interceptors()),
%% Global settings
@@ -226,8 +222,6 @@ local_default(_) ->
%% Test Case: local_local
%% Description:
%%-----------------------------------------------------------------
-local_local(doc) -> [""];
-local_local(suite) -> [];
local_local(_) ->
?match({native, [?MODULE]}, orber:get_local_interceptors()),
%% Global settings
@@ -276,8 +270,6 @@ local_local(_) ->
%% Test Case: local_global
%% Description:
%%-----------------------------------------------------------------
-local_global(doc) -> [""];
-local_global(suite) -> [];
local_global(_) ->
?match({native, [?MODULE]}, orber:get_local_interceptors()),
%% Global settings
diff --git a/lib/orber/test/iop_ior_10_SUITE.erl b/lib/orber/test/iop_ior_10_SUITE.erl
index 5705a95710..68a6793f62 100644
--- a/lib/orber/test/iop_ior_10_SUITE.erl
+++ b/lib/orber/test/iop_ior_10_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
%%-----------------------------------------------------------------
-module(iop_ior_10_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -74,12 +74,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -88,8 +88,6 @@ end_per_testcase(_Case, Config) ->
%% Description: Just testing the string_encoding function because the
%% other encodings is called from them.
%%-----------------------------------------------------------------
-encoding(doc) -> ["Description", "more description"];
-encoding(suite) -> [];
encoding(_) ->
V = #'IIOP_Version'{major=1,minor=0},
M0 = 'Module_Interface',
@@ -97,12 +95,12 @@ encoding(_) ->
H0 = "my.hostname.org",
P0 = 4040,
N0 = 'name',
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O0},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
PB1 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O1},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
@@ -110,12 +108,12 @@ encoding(_) ->
PB2 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O2},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line C0 = iop_ior:string_code(S0),
- ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
- ?line C1 = iop_ior:string_code(S1),
- ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
- ?line C2 = iop_ior:string_code(S2),
- ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ C0 = iop_ior:string_code(S0),
+ {S0, <<>>, _} = iop_ior:string_decode(C0),
+ C1 = iop_ior:string_code(S1),
+ {S1, <<>>, _} = iop_ior:string_decode(C1),
+ C2 = iop_ior:string_code(S2),
+ {S2, <<>>, _} = iop_ior:string_decode(C2),
ok.
@@ -123,8 +121,6 @@ encoding(_) ->
%% Test Case: IOR creation test
%% Description:
%%-----------------------------------------------------------------
-create_and_get_ops(doc) -> ["Description", "more description"];
-create_and_get_ops(suite) -> [];
create_and_get_ops(_) ->
V = #'IIOP_Version'{major=1,minor=0},
M0 = 'Module_Interface',
@@ -132,41 +128,41 @@ create_and_get_ops(_) ->
H0 = "my.hostname.org",
P0 = 4040,
N0 = 'name',
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O0},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
- ?line S0 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O0, [], 0, 0),
+ S0 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O0, [], 0, 0),
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
{_,_,K1,_,_,_} = O1,
PB1 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O1},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
- ?line S1 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O1, [], 0, 0),
+ S1 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O1, [], 0, 0),
O2 = "This is an external objectkey",
PB2 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O2},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
- ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
- ?line {'external', {H0, P0, O2, _,_,
- #host_data{protocol = normal,
- ssl_data = undefined,
- version = {1,0},
- csiv2_mech = undefined,
- csiv2_statefull = false,
- charset = 65537,
- wcharset = 65801,
- ft_heartbeat = false,
- ft_primary = false,
- ft_group = undefined,
- csiv2_addresses = []}}}
+ {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ {'external', {H0, P0, O2, _,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,0},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}}
= iop_ior:get_key(S2),
- ?line T0 = iop_ior:get_typeID(S0),
- ?line O0 = iop_ior:get_objkey(S0),
- ?line O1 = iop_ior:get_objkey(S1),
- ?line O2 = iop_ior:get_objkey(S2),
+ T0 = iop_ior:get_typeID(S0),
+ O0 = iop_ior:get_objkey(S0),
+ O1 = iop_ior:get_objkey(S1),
+ O2 = iop_ior:get_objkey(S2),
ok.
%%-----------------------------------------------------------------
diff --git a/lib/orber/test/iop_ior_11_SUITE.erl b/lib/orber/test/iop_ior_11_SUITE.erl
index b32da44c68..8276feeb93 100644
--- a/lib/orber/test/iop_ior_11_SUITE.erl
+++ b/lib/orber/test/iop_ior_11_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
%%-----------------------------------------------------------------
-module(iop_ior_11_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -74,12 +74,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -88,8 +88,6 @@ end_per_testcase(_Case, Config) ->
%% Description: Just testing the string_encoding function because the
%% other encodings is called from them.
%%-----------------------------------------------------------------
-encoding(doc) -> ["Description", "more description"];
-encoding(suite) -> [];
encoding(_) ->
V = #'IIOP_Version'{major=1,minor=1},
M0 = 'Module_Interface',
@@ -107,13 +105,13 @@ encoding(_) ->
cdrlib:enc_unsigned_short(2,
cdrlib:enc_unsigned_short(SSLPort, [])))]}]
end,
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O0,
components=Components},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
PB1 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O1,
components=[]},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
@@ -123,12 +121,12 @@ encoding(_) ->
components=[]},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line C0 = iop_ior:string_code(S0),
- ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
- ?line C1 = iop_ior:string_code(S1),
- ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
- ?line C2 = iop_ior:string_code(S2),
- ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ C0 = iop_ior:string_code(S0),
+ {S0, <<>>, _} = iop_ior:string_decode(C0),
+ C1 = iop_ior:string_code(S1),
+ {S1, <<>>, _} = iop_ior:string_decode(C1),
+ C2 = iop_ior:string_code(S2),
+ {S2, <<>>, _} = iop_ior:string_decode(C2),
ok.
@@ -136,8 +134,6 @@ encoding(_) ->
%% Test Case: IOR creation test
%% Description:
%%-----------------------------------------------------------------
-create_and_get_ops(doc) -> ["Description", "more description"];
-create_and_get_ops(suite) -> [];
create_and_get_ops(_) ->
V = #'IIOP_Version'{major=1,minor=1},
CSC = #'IOP_TaggedComponent'{tag=?TAG_CODE_SETS,
@@ -147,46 +143,46 @@ create_and_get_ops(_) ->
H0 = "my.hostname.org",
P0 = 4040,
N0 = 'name',
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_1'
{iiop_version=V, host=H0, port=P0, object_key=O0,
components=[CSC]},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
- ?line S0 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
+ S0 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
{_,_,K1,_,_,_} = O1,
PB1 = #'IIOP_ProfileBody_1_1'
{iiop_version=V, host=H0, port=P0, object_key=O1,
components=[CSC]},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
- ?line S1 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
+ S1 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
O2 = "This is an external objectkey",
PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
components=[]},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
- ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
- ?line {'external', {H0, P0, O2, _,_,
- #host_data{protocol = normal,
- ssl_data = undefined,
- version = {1,1},
- csiv2_mech = undefined,
- csiv2_statefull = false,
- charset = 65537,
- wcharset = 65801,
- ft_heartbeat = false,
- ft_primary = false,
- ft_group = undefined,
- csiv2_addresses = []}}} =
+ {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ {'external', {H0, P0, O2, _,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,1},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}} =
iop_ior:get_key(S2),
- ?line T0 = iop_ior:get_typeID(S0),
- ?line O0 = iop_ior:get_objkey(S0),
- ?line O1 = iop_ior:get_objkey(S1),
- ?line O2 = iop_ior:get_objkey(S2),
+ T0 = iop_ior:get_typeID(S0),
+ O0 = iop_ior:get_objkey(S0),
+ O1 = iop_ior:get_objkey(S1),
+ O2 = iop_ior:get_objkey(S2),
ok.
%%-----------------------------------------------------------------
diff --git a/lib/orber/test/iop_ior_12_SUITE.erl b/lib/orber/test/iop_ior_12_SUITE.erl
index a12f341f04..802b0b11a2 100644
--- a/lib/orber/test/iop_ior_12_SUITE.erl
+++ b/lib/orber/test/iop_ior_12_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,10 +27,10 @@
-module(iop_ior_12_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -75,12 +75,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -89,8 +89,6 @@ end_per_testcase(_Case, Config) ->
%% Description: Just testing the string_encoding function because the
%% other encodings is called from them.
%%-----------------------------------------------------------------
-encoding(doc) -> ["Description", "more description"];
-encoding(suite) -> [];
encoding(_) ->
V = #'IIOP_Version'{major=1,minor=2},
M0 = 'Module_Interface',
@@ -105,31 +103,31 @@ encoding(_) ->
[#'IOP_TaggedComponent'{tag=?TAG_SSL_SEC_TRANS,
component_data=[0 |
cdrlib:enc_unsigned_short(2,
- cdrlib:enc_unsigned_short(2,
+ cdrlib:enc_unsigned_short(2,
cdrlib:enc_unsigned_short(SSLPort, [])))]}]
end,
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O0,
- components=Components},
+ components=Components},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
PB1 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O1,
- components=[]},
+ components=[]},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
O2 = "This is an external objectkey",
PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
- components=[]},
+ components=[]},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line C0 = iop_ior:string_code(S0),
- ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
- ?line C1 = iop_ior:string_code(S1),
- ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
- ?line C2 = iop_ior:string_code(S2),
- ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ C0 = iop_ior:string_code(S0),
+ {S0, <<>>, _} = iop_ior:string_decode(C0),
+ C1 = iop_ior:string_code(S1),
+ {S1, <<>>, _} = iop_ior:string_decode(C1),
+ C2 = iop_ior:string_code(S2),
+ {S2, <<>>, _} = iop_ior:string_decode(C2),
ok.
@@ -137,8 +135,6 @@ encoding(_) ->
%% Test Case: IOR creation test
%% Description:
%%-----------------------------------------------------------------
-create_and_get_ops(doc) -> ["Description", "more description"];
-create_and_get_ops(suite) -> [];
create_and_get_ops(_) ->
V = #'IIOP_Version'{major=1,minor=2},
CSC = #'IOP_TaggedComponent'{tag=?TAG_CODE_SETS,
@@ -148,46 +144,46 @@ create_and_get_ops(_) ->
H0 = "my.hostname.org",
P0 = 4040,
N0 = 'name',
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_1'
{iiop_version=V, host=H0, port=P0, object_key=O0,
components=[CSC]},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
- ?line S0 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
+ S0 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
{_,_,K1,_,_,_} = O1,
PB1 = #'IIOP_ProfileBody_1_1'
{iiop_version=V, host=H0, port=P0, object_key=O1,
components=[CSC]},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
- ?line S1 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
+ S1 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
O2 = "This is an external objectkey",
PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
- components=[]},
+ components=[]},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
- ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
- ?line {'external', {H0, P0, O2,_,_,
- #host_data{protocol = normal,
- ssl_data = undefined,
- version = {1,2},
- csiv2_mech = undefined,
- csiv2_statefull = false,
- charset = 65537,
- wcharset = 65801,
- ft_heartbeat = false,
- ft_primary = false,
- ft_group = undefined,
- csiv2_addresses = []}}}
+ {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ {'external', {H0, P0, O2,_,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,2},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}}
= iop_ior:get_key(S2),
- ?line T0 = iop_ior:get_typeID(S0),
- ?line O0 = iop_ior:get_objkey(S0),
- ?line O1 = iop_ior:get_objkey(S1),
- ?line O2 = iop_ior:get_objkey(S2),
+ T0 = iop_ior:get_typeID(S0),
+ O0 = iop_ior:get_objkey(S0),
+ O1 = iop_ior:get_objkey(S1),
+ O2 = iop_ior:get_objkey(S2),
ok.
%%-----------------------------------------------------------------
diff --git a/lib/orber/test/ip_v4v6_interop_SUITE.erl b/lib/orber/test/ip_v4v6_interop_SUITE.erl
index 995a11ae1e..48cc77eca7 100644
--- a/lib/orber/test/ip_v4v6_interop_SUITE.erl
+++ b/lib/orber/test/ip_v4v6_interop_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -59,7 +59,7 @@
%%----------------------------------------------------------------------
%% Macros
%%----------------------------------------------------------------------
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -72,7 +72,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
%%----------------------------------------------------------------------
@@ -93,7 +93,7 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, Config) ->
orber:jump_stop(),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -126,8 +126,7 @@ end_per_group(_GroupName, Config) ->
%%====================================================================
%% Test Cases
%%====================================================================
-dual_ipv4v6(doc) ->
- ["ORB configured for supporting both IPv4 and IPv6"];
+%% ORB configured for supporting both IPv4 and IPv6
dual_ipv4v6(_Config) ->
%% Starting slave node with ipv4 configured ORB
diff --git a/lib/orber/test/lname_SUITE.erl b/lib/orber/test/lname_SUITE.erl
index 2200ff6ed1..cb67cd6136 100644
--- a/lib/orber/test/lname_SUITE.erl
+++ b/lib/orber/test/lname_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,11 +26,11 @@
%%-----------------------------------------------------------------
-module(lname_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/COSS/CosNaming/lname.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -75,12 +75,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -89,34 +89,32 @@ end_per_testcase(_Case, Config) ->
%% Test Case: name component handling tests
%% Description:
%%-----------------------------------------------------------------
-lname_component(doc) -> ["Description", "more description"];
-lname_component(suite) -> [];
lname_component(_) ->
create_test(),
get_tests(),
set_tests().
create_test() ->
- ?line #'CosNaming_NameComponent'{} = lname_component:create(),
+ #'CosNaming_NameComponent'{} = lname_component:create(),
ok.
get_tests() ->
NC = #'CosNaming_NameComponent'{id="first", kind="apple"},
NC1 = #'CosNaming_NameComponent'{id="", kind="apple"},
NC2 = #'CosNaming_NameComponent'{id="first", kind=""},
- ?line "first" = lname_component:get_id(NC),
- ?line "apple" = lname_component:get_kind(NC),
- ?line {'EXCEPTION', #'LNameComponent_NotSet'{}} =
+ "first" = lname_component:get_id(NC),
+ "apple" = lname_component:get_kind(NC),
+ {'EXCEPTION', #'LNameComponent_NotSet'{}} =
(catch lname_component:get_id(NC1)),
- ?line {'EXCEPTION', #'LNameComponent_NotSet'{}} =
+ {'EXCEPTION', #'LNameComponent_NotSet'{}} =
(catch lname_component:get_kind(NC2)),
ok.
set_tests() ->
NC = #'CosNaming_NameComponent'{id="first", kind="apple"},
- ?line #'CosNaming_NameComponent'{id="second", kind="apple"} =
+ #'CosNaming_NameComponent'{id="second", kind="apple"} =
lname_component:set_id(NC, "second"),
- ?line #'CosNaming_NameComponent'{id="first", kind="pear"} =
+ #'CosNaming_NameComponent'{id="first", kind="pear"} =
lname_component:set_kind(NC, "pear"),
ok.
@@ -124,8 +122,6 @@ set_tests() ->
%% Test Case: name handling tests
%% Description:
%%-----------------------------------------------------------------
-lname(doc) -> ["Description", "more description"];
-lname(suite) -> [];
lname(_) ->
Name = [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
@@ -139,79 +135,79 @@ lname(_) ->
insert_tests(Name) ->
NC = #'CosNaming_NameComponent'{id="new", kind="pear"},
- ?line [NC, #'CosNaming_NameComponent'{id="first", kind="apple"},
+ [NC, #'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"},
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:insert_component(Name, 1, NC),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"},
#'CosNaming_NameComponent'{id="always", kind="orange"}, NC] =
lname:insert_component(Name, 5, NC),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"}, NC,
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:insert_component(Name, 4, NC),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"}, NC,
#'CosNaming_NameComponent'{id="and", kind="plum"},
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:insert_component(Name, 3, NC),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:insert_component(Name, 6, NC)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:insert_component(Name, 0, NC)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:insert_component(Name, -2, NC)),
ok.
get_tests(Name) ->
- ?line #'CosNaming_NameComponent'{id="first", kind="apple"} =
+ #'CosNaming_NameComponent'{id="first", kind="apple"} =
lname:get_component(Name, 1),
- ?line #'CosNaming_NameComponent'{id="always", kind="orange"} =
+ #'CosNaming_NameComponent'{id="always", kind="orange"} =
lname:get_component(Name, 4),
- ?line #'CosNaming_NameComponent'{id="and", kind="plum"} =
+ #'CosNaming_NameComponent'{id="and", kind="plum"} =
lname:get_component(Name, 3),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:get_component(Name, 5)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:get_component(Name, 0)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:get_component(Name, -2)),
ok.
delete_tests(Name) ->
- ?line [#'CosNaming_NameComponent'{id="last", kind="peach"},
+ [#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"},
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:delete_component(Name, 1),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"}] =
lname:delete_component(Name, 4),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:delete_component(Name, 3),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:delete_component(Name, 6)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:delete_component(Name, 0)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:delete_component(Name, -2)),
ok.
comparision_tests(Name) ->
- ?line true = lname:equal(Name, Name),
- ?line false = lname:equal(Name, lname:delete_component(Name, 2)),
- ?line true = lname:less_than(lname:delete_component(Name, 2), Name),
- ?line false = lname:less_than(Name, Name),
- ?line false = lname:less_than(Name, lname:delete_component(Name, 2)),
+ true = lname:equal(Name, Name),
+ false = lname:equal(Name, lname:delete_component(Name, 2)),
+ true = lname:less_than(lname:delete_component(Name, 2), Name),
+ false = lname:less_than(Name, Name),
+ false = lname:less_than(Name, lname:delete_component(Name, 2)),
ok.
convertion_tests(Name) ->
- ?line Name = lname:from_idl_form(Name),
- ?line Name = lname:to_idl_form(Name),
+ Name = lname:from_idl_form(Name),
+ Name = lname:to_idl_form(Name),
ok.
diff --git a/lib/orber/test/multi_ORB_SUITE.erl b/lib/orber/test/multi_ORB_SUITE.erl
index 6b523229cc..d739e47cc1 100644
--- a/lib/orber/test/multi_ORB_SUITE.erl
+++ b/lib/orber/test/multi_ORB_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(multi_ORB_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -31,7 +31,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -44,7 +44,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -159,7 +159,7 @@ init_per_testcase(_Case, Config) ->
init_all(Config).
init_ssl(Config) ->
- case ?config(crypto_started, Config) of
+ case proplists:get_value(crypto_started, Config) of
true ->
case orber_test_lib:ssl_version() of
no_ssl ->
@@ -172,7 +172,7 @@ init_ssl(Config) ->
end.
init_ssl_3(Config) ->
- case ?config(crypto_started, Config) of
+ case proplists:get_value(crypto_started, Config) of
true ->
case orber_test_lib:ssl_version() of
3 ->
@@ -200,7 +200,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -225,8 +225,7 @@ end_per_suite(Config) ->
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-implicit_context_api(doc) -> ["IIOP Implicit Contex tests"];
-implicit_context_api(suite) -> [];
+%% IIOP Implicit Contex tests
implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -257,9 +256,7 @@ implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-implicit_context_roundtrip_api(doc) ->
- ["IIOP Implicit Contex roundtrip tests"];
-implicit_context_roundtrip_api(suite) -> [];
+%% IIOP Implicit Contex roundtrip tests
implicit_context_roundtrip_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -289,10 +286,7 @@ implicit_context_roundtrip_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-
-
-oneway_implicit_context_api(doc) -> ["IIOP Implicit Contex oneway tests"];
-oneway_implicit_context_api(suite) -> [];
+%% IIOP Implicit Contex oneway tests
oneway_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -326,9 +320,7 @@ oneway_implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-
-pseudo_implicit_context_api(doc) -> ["IIOP Implicit Contex tests (via pseudo object)"];
-pseudo_implicit_context_api(suite) -> [];
+%% IIOP Implicit Contex tests (via pseudo object)
pseudo_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -358,9 +350,7 @@ pseudo_implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-pseudo_two_implicit_context_api(doc) ->
- ["IIOP two Implicit Contex tests (via pseudo object)"];
-pseudo_two_implicit_context_api(suite) -> [];
+%% IIOP two Implicit Contex tests (via pseudo object)
pseudo_two_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -394,8 +384,7 @@ pseudo_two_implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-oneway_pseudo_implicit_context_api(doc) -> ["IIOP Implicit Contex tests (via pseudo object oneway)"];
-oneway_pseudo_implicit_context_api(suite) -> [];
+%% IIOP Implicit Contex tests (via pseudo object oneway)
oneway_pseudo_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -425,9 +414,7 @@ oneway_pseudo_implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-oneway_pseudo_two_implicit_context_api(doc) ->
- ["IIOP two Implicit Contex tests (via pseudo object oneway)"];
-oneway_pseudo_two_implicit_context_api(suite) -> [];
+%% IIOP two Implicit Contex tests (via pseudo object oneway)
oneway_pseudo_two_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -464,8 +451,7 @@ oneway_pseudo_two_implicit_context_api(_Config) ->
-multiple_accept_api(doc) -> ["IIOP Multiple Accept tests"];
-multiple_accept_api(suite) -> [];
+%% IIOP Multiple Accept tests
multiple_accept_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -537,10 +523,9 @@ multiple_accept_api(_Config) ->
ok.
-proxy_interface_api(doc) -> ["IIOP Proxy Interface tests",
- "This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-proxy_interface_api(suite) -> [];
+%% IIOP Proxy Interface tests
+%% This case test if the server ORB use the correct
+%% interface when exporting IOR:s
proxy_interface_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -557,10 +542,9 @@ proxy_interface_api(_Config) ->
iop_ior:get_key(IOR2)),
ok.
-proxy_interface_ipv6_api(doc) -> ["IIOP Proxy Interface tests",
- "This case test if the server ORB use the correct",
- "IPv6 interface when exporting IOR:s"];
-proxy_interface_ipv6_api(suite) -> [];
+%% IIOP Proxy Interface tests
+%% This case test if the server ORB use the correct
+%% IPv6 interface when exporting IOR:s
proxy_interface_ipv6_api(_Config) ->
case orber_test_lib:version_ok() of
true ->
@@ -593,10 +577,9 @@ proxy_interface_ipv6_api2() ->
orber_test_lib:remote_apply(ClientNode, iop_ior, get_key, [IOR2])),
ok.
-local_interface_api(doc) -> ["IIOP Local Interface tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-local_interface_api(suite) -> [];
+%% IIOP Local Interface tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
local_interface_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -627,11 +610,9 @@ local_interface_api(_Config) ->
ok.
-local_interface_ctx_override_api(doc) ->
- ["IIOP Local Interface tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-local_interface_ctx_override_api(suite) -> [];
+%% IIOP Local Interface tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
local_interface_ctx_override_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -664,11 +645,9 @@ local_interface_ctx_override_api(_Config) ->
ok.
-local_interface_acl_override_api(doc) ->
- ["IIOP Local Interface tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-local_interface_acl_override_api(suite) -> [];
+%% IIOP Local Interface tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
local_interface_acl_override_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -708,9 +687,8 @@ local_interface_acl_override_api(_Config) ->
ok.
-iiop_timeout_api(doc) -> ["IIOP TIMEOUT API tests",
- "This case test if timeout configuration behaves correctly"];
-iiop_timeout_api(suite) -> [];
+%% IIOP TIMEOUT API tests
+%% This case test if timeout configuration behaves correctly
iiop_timeout_api(_Config) ->
%% Install two secure orber.
@@ -754,9 +732,8 @@ iiop_timeout_api(_Config) ->
[timeout])),
ok.
-iiop_timeout_added_api(doc) -> ["IIOP TIMEOUT API tests",
- "This case test if timeout configuration behaves correctly"];
-iiop_timeout_added_api(suite) -> [];
+%% IIOP TIMEOUT API tests
+%% This case test if timeout configuration behaves correctly
iiop_timeout_added_api(_Config) ->
IP = orber_test_lib:get_host(),
{ok, Node, _Host} = ?match({ok,_,_}, orber_test_lib:js_node([])),
@@ -791,12 +768,10 @@ iiop_timeout_added_api(_Config) ->
%% API tests for ORB to ORB using pseudo call/cast, no security
%%-----------------------------------------------------------------
-multi_pseudo_orber_api(doc) ->
- ["MULTI ORB PSEUDO API tests",
- "This case test if data encode/decode (IIOP) for pseudo objects",
- "produce the correct result, i.e., the test_server echos",
- "the input parameter or an exception is raised (MARSHAL)."];
-multi_pseudo_orber_api(suite) -> [];
+%% MULTI ORB PSEUDO API tests
+%% This case test if data encode/decode (IIOP) for pseudo objects
+%% produce the correct result, i.e., the test_server echos
+%% the input parameter or an exception is raised (MARSHAL)
multi_pseudo_orber_api(_Config) ->
%% --- Create a slave-node ---
{ok, Node, Host} =
@@ -840,9 +815,7 @@ multi_pseudo_orber_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with local flags definition set.
%%-----------------------------------------------------------------
-flags_added_api(doc) ->
- ["MULTI ORB PSEUDO with local flags definition set"];
-flags_added_api(suite) -> [];
+%% MULTI ORB PSEUDO with local flags definition set
flags_added_api(_Config) ->
%% --- Create a slave-node ---
IP = orber_test_lib:get_host(),
@@ -880,9 +853,7 @@ flags_added_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with limited concurrent requests
%%-----------------------------------------------------------------
-max_requests_api(doc) ->
- ["MULTI ORB PSEUDO with limited concurrent requests tests"];
-max_requests_api(suite) -> [];
+%% MULTI ORB PSEUDO with limited concurrent requests tests
max_requests_api(_Config) ->
%% --- Create a slave-node ---
{ok, Node, Host} =
@@ -890,9 +861,7 @@ max_requests_api(_Config) ->
Port = orber_test_lib:remote_apply(Node, orber, iiop_port, []),
max_requests(Node, Host, Port).
-max_requests_added_api(doc) ->
- ["MULTI ORB PSEUDO with limited concurrent requests tests"];
-max_requests_added_api(suite) -> [];
+%% MULTI ORB PSEUDO with limited concurrent requests tests
max_requests_added_api(_Config) ->
%% --- Create a slave-node ---
[IP] = ?match([_], orber:host()),
@@ -940,9 +909,7 @@ max_requests(Node, Host, Port) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with limited concurrent connections
%%-----------------------------------------------------------------
-max_connections_api(doc) ->
- ["MULTI ORB PSEUDO with limited concurrent connections tests"];
-max_connections_api(suite) -> [];
+%% MULTI ORB PSEUDO with limited concurrent connections tests
max_connections_api(_Config) ->
%% --- Create a slave-node ---
{ok, ServerNode, ServerHost} =
@@ -1012,9 +979,7 @@ max_connections_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for terminating connection by using an IOR.
%%-----------------------------------------------------------------
-close_connections_api(doc) ->
- ["Close outgoing connection "];
-close_connections_api(suite) -> [];
+%% Close outgoing connection
close_connections_api(_Config) ->
%% --- Create a slave-node ---
IP = orber_test_lib:get_host(),
@@ -1047,11 +1012,9 @@ close_connections_api(_Config) ->
ok.
-close_connections_local_interface_api(doc) ->
- ["IIOP Local Interface disconnect tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-close_connections_local_interface_api(suite) -> [];
+%% IIOP Local Interface disconnect tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
close_connections_local_interface_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -1083,11 +1046,9 @@ close_connections_local_interface_api(_Config) ->
ok.
-close_connections_local_interface_ctx_override_api(doc) ->
- ["IIOP Local Interface disconnect tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-close_connections_local_interface_ctx_override_api(suite) -> [];
+%% IIOP Local Interface disconnect tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
close_connections_local_interface_ctx_override_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -1147,11 +1108,9 @@ close_connections_local_interface_ctx_override_api(_Config) ->
iiop_connections, [out])),
ok.
-close_connections_alt_iiop_addr_api(doc) ->
- ["IIOP alternate address disconnect tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-close_connections_alt_iiop_addr_api(suite) -> [];
+%% IIOP alternate address disconnect tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
close_connections_alt_iiop_addr_api(_Config) ->
%% --- Create a slave-node ---
Loopback = orber_test_lib:get_loopback_interface(),
@@ -1187,11 +1146,9 @@ close_connections_alt_iiop_addr_api(_Config) ->
iiop_connections, [in])),
ok.
-close_connections_multiple_profiles_api(doc) ->
- ["IIOP alternate address disconnect tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-close_connections_multiple_profiles_api(suite) -> [];
+%% IIOP alternate address disconnect tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
close_connections_multiple_profiles_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -1228,9 +1185,7 @@ close_connections_multiple_profiles_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with iiop_packet_size set
%%-----------------------------------------------------------------
-max_packet_size_exceeded_api(doc) ->
- ["Exceed the maximum request size"];
-max_packet_size_exceeded_api(suite) -> [];
+%% Exceed the maximum request size
max_packet_size_exceeded_api(_Config) ->
case catch gen_tcp:listen(0, [{packet,cdr}, {packet_size, 14}]) of
{'EXIT',badarg} ->
@@ -1250,9 +1205,7 @@ max_packet_size_exceeded_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with iiop_packet_size set
%%-----------------------------------------------------------------
-max_packet_size_ok_api(doc) ->
- ["Not exceed the maximum request size"];
-max_packet_size_ok_api(suite) -> [];
+%% Not exceed the maximum request size
max_packet_size_ok_api(_Config) ->
case catch gen_tcp:listen(0, [{packet,cdr}, {packet_size, 14}]) of
{'EXIT',badarg} ->
@@ -1274,9 +1227,7 @@ max_packet_size_ok_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-
-light_ifr_api(doc) -> ["LIGHT IFR ORB API tests"];
-light_ifr_api(suite) -> [];
+%% LIGHT IFR ORB API tests
light_ifr_api(_Config) ->
{ok, ClientNode, _ClientHost} =
@@ -1349,11 +1300,9 @@ light_ifr_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-
-light_orber_api(doc) -> ["LIGHT ORB API tests",
- "This case test if a light Orber can communicate correctly",
- "with an fully installed Orber."];
-light_orber_api(suite) -> [];
+%% LIGHT ORB API tests
+%% This case test if a light Orber can communicate correctly
+%% with an fully installed Orber.
light_orber_api(_Config) ->
%% --- Create a slave-node ---
LocalHost = net_adm:localhost(),
@@ -1398,13 +1347,11 @@ light_orber_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-
-light_orber2_api(doc) -> ["LIGHT ORB API tests",
- "This case test if a light Orber can communicate correctly",
- "with an fully installed Orber. This case test if we can",
- "start as lightweight without first setting the environment",
- "variable"];
-light_orber2_api(suite) -> [];
+%% LIGHT ORB API tests
+%% This case test if a light Orber can communicate correctly
+%% with an fully installed Orber. This case test if we can
+%% start as lightweight without first setting the environment
+%% variable
light_orber2_api(_Config) ->
%% --- Create a slave-node ---
LocalHost = net_adm:localhost(),
@@ -1450,12 +1397,10 @@ light_orber2_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-
-multi_orber_api(doc) -> ["MULTI ORB API tests",
- "This case test if data encode/decode (IIOP)",
- "produce the correct result, i.e., the test_server echos",
- "the input parameter or an exception is raised (MARSHAL)."];
-multi_orber_api(suite) -> [];
+%% MULTI ORB API tests
+%% This case test if data encode/decode (IIOP)
+%% produce the correct result, i.e., the test_server echos
+%% the input parameter or an exception is raised (MARSHAL).
multi_orber_api(_Config) ->
NewICObj1 = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([])),
@@ -1535,12 +1480,11 @@ multi_orber_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security, using basic interceptors
%%-----------------------------------------------------------------
-basic_PI_api(doc) -> ["MULTI ORB API tests",
- "This case test if data encode/decode (IIOP)",
- "produce the correct result when using basic interceptors,",
- "i.e., the test_server echos",
- "the input parameter or an exception is raised (MARSHAL)."];
-basic_PI_api(suite) -> [];
+%% MULTI ORB API tests
+%% This case test if data encode/decode (IIOP)
+%% produce the correct result when using basic interceptors
+%% i.e., the test_server echos the input parameter or
+%% an exception is raised (MARSHAL).
basic_PI_api(_Config) ->
%% Change configuration to use Basic Interceptors.
orber:configure_override(interceptors, {native, [orber_test_lib]}),
@@ -1612,11 +1556,10 @@ basic_PI_api(_Config) ->
%% API tests for ORB to ORB, ssl security depth 1
%%-----------------------------------------------------------------
-ssl_1_multi_orber_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_1_multi_orber_api(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 1)
+%% This case set up two secure orbs and test if they can
+%% communicate. The case also test to access one of the
+%% secure orbs which must raise a NO_PERMISSION exception.
ssl_1_multi_orber_api(_Config) ->
ServerOptions = orber_test_lib:get_options_old(iiop_ssl, server,
1, [{iiop_ssl_port, 0}]),
@@ -1625,11 +1568,10 @@ ssl_1_multi_orber_api(_Config) ->
ssl_suite(ServerOptions, ClientOptions).
-ssl_1_multi_orber_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_1_multi_orber_generation_3_api(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 1)
+%% This case set up two secure orbs and test if they can
+%% communicate. The case also test to access one of the
+%% secure orbs which must raise a NO_PERMISSION exception.
ssl_1_multi_orber_generation_3_api(_Config) ->
ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
@@ -1644,11 +1586,10 @@ ssl_1_multi_orber_generation_3_api(_Config) ->
%% API tests for ORB to ORB, ssl security depth 2
%%-----------------------------------------------------------------
-ssl_2_multi_orber_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_2_multi_orber_api(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 2)
+%% These case set up two secure orbs and test if they can
+%% communicate. They also test to access one of the
+%% secure orbs which must raise a NO_PERMISSION exception.
ssl_2_multi_orber_api(_Config) ->
ServerOptions = orber_test_lib:get_options_old(iiop_ssl, server,
@@ -1657,12 +1598,6 @@ ssl_2_multi_orber_api(_Config) ->
2, [{iiop_ssl_port, 0}]),
ssl_suite(ServerOptions, ClientOptions).
-
-ssl_2_multi_orber_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_2_multi_orber_generation_3_api(suite) -> [];
ssl_2_multi_orber_generation_3_api(_Config) ->
ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
@@ -1676,17 +1611,16 @@ ssl_2_multi_orber_generation_3_api(_Config) ->
%% API tests for ORB to ORB, ssl security depth 2
%%-----------------------------------------------------------------
-ssl_reconfigure_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_reconfigure_api(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 2)
+%% These case set up two secure orbs and test if they can
+%% communicate. They also test to access one of the
+%% secure orbs which must raise a NO_PERMISSION exception.
ssl_reconfigure_api(_Config) ->
ssl_reconfigure_old([]).
-ssl_reconfigure_generation_3_api_old(_Config) ->
- ssl_reconfigure_old([{ssl_generation, 3}]).
+% ssl_reconfigure_generation_3_api_old(_Config) ->
+% ssl_reconfigure_old([{ssl_generation, 3}]).
ssl_reconfigure_old(ExtraSSLOptions) ->
@@ -1737,11 +1671,6 @@ ssl_reconfigure_old(ExtraSSLOptions) ->
print, [Obj])).
-ssl_reconfigure_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_reconfigure_generation_3_api(suite) -> [];
ssl_reconfigure_generation_3_api(_Config) ->
ssl_reconfigure([{ssl_generation, 3}]).
@@ -1795,18 +1724,6 @@ ssl_reconfigure(ExtraSSLOptions) ->
print, [Obj])).
-%%-----------------------------------------------------------------
-%% API tests for Orber to Java ORB, no security
-%%-----------------------------------------------------------------
-
-%orber_java_api(doc) -> ["ERLANG-ORB <-> JAVA-ORB API tests",
-% "This case test if data encode/decode (IIOP)",
-% "produce the correct result, i.e., the test_server echos",
-% "the input parameter or an exception is raised (MARSHAL)."];
-%orber_java_api(suite) -> [];
-%orber_java_api(Config) ->
-% ok.
-
%%------------------------------------------------------------
%% function : ssl_suite
%% Arguments: Config
@@ -1814,7 +1731,6 @@ ssl_reconfigure(ExtraSSLOptions) ->
%% Returns : ok
%% Effect :
%%------------------------------------------------------------
-
ssl_suite(ServerOptions, ClientOptions) ->
{ok, ServerNode, ServerHost} =
@@ -1861,8 +1777,6 @@ ssl_suite(ServerOptions, ClientOptions) ->
%%-----------------------------------------------------------------
%% iiop_setup_connection_timeout API tests for ORB to ORB.
%%-----------------------------------------------------------------
-setup_connection_timeout_api(doc) -> ["iiop_setup_connection_timeout API tests for ORB to ORB."];
-setup_connection_timeout_api(suite) -> [];
setup_connection_timeout_api(_Config) ->
?match(ok, application:set_env(orber, iiop_backlog, 0)),
%% Wait to be sure that the configuration has kicked in.
@@ -1886,9 +1800,6 @@ setup_connection_timeout_api(_Config) ->
%%-----------------------------------------------------------------
%% iiop_setup_connection_timeout API tests for ORB to ORB.
%%-----------------------------------------------------------------
-setup_multi_connection_timeout_api(doc) ->
- ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
-setup_multi_connection_timeout_api(suite) -> [];
setup_multi_connection_timeout_api(_Config) ->
?match(ok, application:set_env(orber, iiop_backlog, 0)),
%% Wait to be sure that the configuration has kicked in.
@@ -1911,9 +1822,6 @@ setup_multi_connection_timeout_api(_Config) ->
?match(ok, application:set_env(orber, iiop_out_ports, undefined)),
ok.
-setup_multi_connection_timeout_attempts_api(doc) ->
- ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
-setup_multi_connection_timeout_attempts_api(suite) -> [];
setup_multi_connection_timeout_attempts_api(_Config) ->
?match(ok, application:set_env(orber, iiop_backlog, 0)),
%% Wait to be sure that the configuration has kicked in.
@@ -1937,9 +1845,6 @@ setup_multi_connection_timeout_attempts_api(_Config) ->
?match(ok, application:set_env(orber, iiop_out_ports, undefined)),
ok.
-setup_multi_connection_timeout_random_api(doc) ->
- ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
-setup_multi_connection_timeout_random_api(suite) -> [];
setup_multi_connection_timeout_random_api(_Config) ->
?match(ok, application:set_env(orber, iiop_backlog, 0)),
%% Wait to be sure that the configuration has kicked in.
@@ -1966,8 +1871,6 @@ setup_multi_connection_timeout_random_api(_Config) ->
%%-----------------------------------------------------------------
%% Sending an incorrect header to the server-side ORB.
%%-----------------------------------------------------------------
-bad_giop_header_api(doc) -> ["Sending an incorrect header to the server-side ORB."];
-bad_giop_header_api(suite) -> [];
bad_giop_header_api(_Config) ->
orber:configure_override(interceptors, {native,[orber_iiop_tracer]}),
orber:configure(orber_debug_level, 10),
@@ -1996,8 +1899,6 @@ bad_giop_header_api(_Config) ->
-define(FRAG_4, <<71,73,79,80,1,2,0,7,0,0,0,5,0,0,0,?REQUEST_ID,0>>).
-fragments_server_api(doc) -> ["fragments API tests for server-side ORB."];
-fragments_server_api(suite) -> [];
fragments_server_api(_Config) ->
%% --- Create a slave-node ---
{ok, Node, Host} =
@@ -2054,8 +1955,6 @@ fragments_server_api(_Config) ->
%%-----------------------------------------------------------------
%% Fragmented IIOP tests (Server-side). Exceeding Maximum.
%%-----------------------------------------------------------------
-fragments_max_server_api(doc) -> ["Maximum fragments API tests for server-side ORB."];
-fragments_max_server_api(suite) -> [];
fragments_max_server_api(_Config) ->
%% --- Create a slave-node ---
IP = orber_test_lib:get_host(),
@@ -2065,8 +1964,6 @@ fragments_max_server_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
fragments_max_server(ServerNode, IP, ServerPort).
-fragments_max_server_added_api(doc) -> ["Maximum fragments API tests for server-side ORB."];
-fragments_max_server_added_api(suite) -> [];
fragments_max_server_added_api(_Config) ->
%% --- Create a slave-node ---
IP = orber_test_lib:get_host(),
@@ -2128,8 +2025,6 @@ fragments_max_server(ServerNode, ServerHost, ServerPort) ->
%%-----------------------------------------------------------------
%% Fragmented IIOP tests (Client-side).
%%-----------------------------------------------------------------
-fragments_client_api(doc) -> ["fragments API tests for client-side ORB."];
-fragments_client_api(suite) -> [];
fragments_client_api(_Config) ->
Any = #any{typecode = {tk_string,0},
value = "123"},
@@ -2147,11 +2042,6 @@ fragments_client_api(_Config) ->
orber:configure(orber_debug_level, 0),
ok.
-%%-----------------------------------------------------------------
-%% Fragmented IIOP tests (Client-side).
-%%-----------------------------------------------------------------
-bad_fragment_id_client_api(doc) -> ["fragments API tests for client-side ORB."];
-bad_fragment_id_client_api(suite) -> [];
bad_fragment_id_client_api(_Config) ->
application:set_env(orber, interceptors, {native,[orber_iiop_tracer]}),
orber:configure(orber_debug_level, 10),
@@ -2171,8 +2061,6 @@ bad_fragment_id_client_api(_Config) ->
%%-----------------------------------------------------------------
%% Non-existing request id
%%-----------------------------------------------------------------
-bad_id_cancel_request_api(doc) -> ["Description", "more description"];
-bad_id_cancel_request_api(suite) -> [];
bad_id_cancel_request_api(Config) when is_list(Config) ->
Req10 = cdr_encode:enc_cancel_request(#giop_env{version = {1, 0},
request_id = 556}),
diff --git a/lib/orber/test/naming_context_SUITE.erl b/lib/orber/test/naming_context_SUITE.erl
index f99820fa24..2afede287a 100644
--- a/lib/orber/test/naming_context_SUITE.erl
+++ b/lib/orber/test/naming_context_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,12 +26,12 @@
%%-----------------------------------------------------------------
-module(naming_context_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
%%-----------------------------------------------------------------
%% External exports
@@ -68,7 +68,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -102,7 +102,7 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
orber:jump_start(0),
[{watchdog, Dog}|Config].
@@ -111,7 +111,7 @@ end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
orber:jump_stop(),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -125,139 +125,134 @@ end_per_suite(Config) ->
%% Test Case: name handling tests
%% Description:
%%-----------------------------------------------------------------
-name_context(doc) -> ["Description", "more description"];
-name_context(suite) -> [];
name_context(_) ->
?REMAP_EXCEPT(name_context_run()).
name_context_run() ->
- ?line Ns = corba:resolve_initial_references("NameService"),
+ Ns = corba:resolve_initial_references("NameService"),
?match({'EXCEPTION', #'NO_PERMISSION'{}},
'CosNaming_NamingContextExt':destroy(Ns)),
%% Create a test context.
- ?line Tc = 'CosNaming_NamingContext':bind_new_context(Ns,
+ Tc = 'CosNaming_NamingContext':bind_new_context(Ns,
[#'CosNaming_NameComponent'{id="testcontext",
kind=""}]),
%% Start testing
- ?line 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
+ 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
{id="hej",
kind=""}], Ns),
- ?line Ns = 'CosNaming_NamingContext':resolve(Tc,
+ Ns = 'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="hej",
kind=""}]),
- ?line Nc = 'CosNaming_NamingContext':new_context(Tc),
- ?line 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
+ Nc = 'CosNaming_NamingContext':new_context(Tc),
+ 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
{id="stop",
kind=""}], Nc),
- ?line Nc = 'CosNaming_NamingContext':resolve(Tc,
+ Nc = 'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""}]),
- ?line {'EXCEPTION', E0} =
+ {'EXCEPTION', E0} =
(catch 'CosNaming_NamingContext':bind(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""}], Ns)),
- ?line ok = 'CosNaming_NamingContext':rebind(Tc,
+ ok = 'CosNaming_NamingContext':rebind(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""}], Ns),
- ?line {'CosNaming_NamingContext_AlreadyBound', _} = E0,
- ?line 'CosNaming_NamingContext':bind_context(Tc,
+ {'CosNaming_NamingContext_AlreadyBound', _} = E0,
+ 'CosNaming_NamingContext':bind_context(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""}], Nc),
- ?line Nc =
+ Nc =
'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""}]),
- ?line 'CosNaming_NamingContext':bind(Tc,
+ 'CosNaming_NamingContext':bind(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}], Ns),
- ?line ok = 'CosNaming_NamingContext':rebind(Tc,
+ ok = 'CosNaming_NamingContext':rebind(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}], Ns),
- ?line Ns = 'CosNaming_NamingContext':resolve(Tc,
+ Ns = 'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}]),
- ?line {'EXCEPTION', E1} =
+ {'EXCEPTION', E1} =
(catch 'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}])),
- ?line ?match(ok, orber_diagnostics:nameservice()),
+ ?match(ok, orber_diagnostics:nameservice()),
- ?line {'CosNaming_NamingContext_CannotProceed', _,_,_} = E1,
- ?line {'EXCEPTION', E2} = (catch 'CosNaming_NamingContext':destroy(Nc)),
- ?line {'CosNaming_NamingContext_NotEmpty', _} = E2,
- ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ {'CosNaming_NamingContext_CannotProceed', _,_,_} = E1,
+ {'EXCEPTION', E2} = (catch 'CosNaming_NamingContext':destroy(Nc)),
+ {'CosNaming_NamingContext_NotEmpty', _} = E2,
+ ok = 'CosNaming_NamingContext':unbind(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}]),
- ?line ok = 'CosNaming_NamingContext':destroy(Nc),
- ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ ok = 'CosNaming_NamingContext':destroy(Nc),
+ ok = 'CosNaming_NamingContext':unbind(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""}]),
- ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ ok = 'CosNaming_NamingContext':unbind(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""}]),
- ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ ok = 'CosNaming_NamingContext':unbind(Tc,
[#'CosNaming_NameComponent'{id="hej",
kind=""}]),
- ?line case 'CosNaming_NamingContext':list(Tc, 3) of
+ case 'CosNaming_NamingContext':list(Tc, 3) of
{ok, [], ?ORBER_NIL_OBJREF} ->
ok;
_ ->
exit(not_empty)
end,
- ?line ok = 'CosNaming_NamingContext':unbind(Ns,
+ ok = 'CosNaming_NamingContext':unbind(Ns,
[#'CosNaming_NameComponent'{id="testcontext",
kind=""}]),
- ?line ok = 'CosNaming_NamingContext':destroy(Tc),
+ ok = 'CosNaming_NamingContext':destroy(Tc),
ok.
-check_list(doc) ->
- ["Check that the CosNaming::NamingContext::list()",
- "returns ok.",
- "Own Id: OTP-2023"];
-check_list(suite) -> [];
+%% Check that the CosNaming::NamingContext::list() returns ok.
+%% Own Id: OTP-2023
check_list(Config) when is_list(Config) ->
?REMAP_EXCEPT(check_list_run(Config)).
check_list_run(_Config) ->
create_default_contexts(),
- ?line Ns = corba:resolve_initial_references("NameService"),
- ?line {_, BL, _} = ?match({ok, _, ?ORBER_NIL_OBJREF},
+ Ns = corba:resolve_initial_references("NameService"),
+ {_, BL, _} = ?match({ok, _, ?ORBER_NIL_OBJREF},
'CosNaming_NamingContext':list(Ns, 256)),
FF = fun(X) -> XX = hd(X#'CosNaming_Binding'.binding_name),
XX#'CosNaming_NameComponent'.id end,
L = lists:sort(lists:map(FF, BL)),
- ?line ["host", "workgroup"] = L,
+ ["host", "workgroup"] = L,
%% Test next_n/2
- ?line {_, _, BI} = ?match({ok, [], _BI}, 'CosNaming_NamingContext':list(Ns, 0)),
- ?line ?match({true, []}, 'CosNaming_BindingIterator':next_n(BI, 0)),
- ?line ?match({true, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
- ?line ?match({false, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
- ?line ?match({false, []}, 'CosNaming_BindingIterator':next_n(BI, 1)),
- ?line ?match(ok, 'CosNaming_BindingIterator':destroy(BI)),
-
- ?line {_, _, BI2} = ?match({ok, [], _BI2}, 'CosNaming_NamingContext':list(Ns, 0)),
- ?line ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
- ?line ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
- ?line ?match({false, _}, 'CosNaming_BindingIterator':next_one(BI2)),
- ?line ?match(ok, 'CosNaming_BindingIterator':destroy(BI2)),
- ?line ?match(ok, orber_diagnostics:nameservice()),
+ {_, _, BI} = ?match({ok, [], _BI}, 'CosNaming_NamingContext':list(Ns, 0)),
+ ?match({true, []}, 'CosNaming_BindingIterator':next_n(BI, 0)),
+ ?match({true, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?match({false, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?match({false, []}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?match(ok, 'CosNaming_BindingIterator':destroy(BI)),
+
+ {_, _, BI2} = ?match({ok, [], _BI2}, 'CosNaming_NamingContext':list(Ns, 0)),
+ ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?match({false, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?match(ok, 'CosNaming_BindingIterator':destroy(BI2)),
+ ?match(ok, orber_diagnostics:nameservice()),
ok.
create_default_contexts() ->
@@ -308,13 +303,11 @@ create_default_contexts() ->
%% Test Case:
%% Description:
%%-----------------------------------------------------------------
-name_context_ext(doc) -> ["Description", "more description"];
-name_context_ext(suite) -> [];
name_context_ext(_Config) ->
?REMAP_EXCEPT(name_context_ext_run()).
name_context_ext_run() ->
- ?line NS = ?match({_,pseudo,_, _,_, _},
+ NS = ?match({_,pseudo,_, _,_, _},
corba:resolve_initial_references("NameService")),
Name1 = [#'CosNaming_NameComponent'{id="\\<id1\\>", kind="kind1"},
@@ -357,7 +350,7 @@ name_context_ext_run() ->
'CosNaming_NamingContextExt':to_name(NS, BadString2)),
%% Create a test context.
- ?line Tc = ?match({_,pseudo,_, _,_, _},
+ Tc = ?match({_,pseudo,_, _,_, _},
'CosNaming_NamingContext':bind_new_context(NS,
[#'CosNaming_NameComponent'{id="testcontext",
kind=""}])),
diff --git a/lib/orber/test/orber_SUITE.erl b/lib/orber/test/orber_SUITE.erl
index 914705adb9..75da31bc5f 100644
--- a/lib/orber/test/orber_SUITE.erl
+++ b/lib/orber/test/orber_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,9 +19,9 @@
%%
%%
-module(orber_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(application, orber).
% Test server specific exports
@@ -64,21 +64,19 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
+ Dog=proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
%
% Test cases starts here.
%
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
- ?line ok=?t:app_test(orber),
+ ok=test_server:app_test(orber),
ok.
otp_9887(_Config) ->
@@ -103,10 +101,6 @@ otp_9887(_Config) ->
ok.
%% Install Orber using the load_order option.
-install_load_order(suite) ->
- [];
-install_load_order(doc) ->
- [];
install_load_order(_Config) ->
orber:jump_stop(),
case catch install_load_order2() of
@@ -129,10 +123,6 @@ install_load_order2() ->
ok.
%% Install Orber using the local_content option.
-install_local_content(suite) ->
- [];
-install_local_content(doc) ->
- [];
install_local_content(_Config) ->
orber:jump_stop(),
case catch install_local_content2() of
@@ -157,10 +147,6 @@ install_local_content2() ->
%% Check for undefined functions
-undefined_functions(suite) ->
- [];
-undefined_functions(doc) ->
- [];
undefined_functions(_Config) ->
App = orber,
Root = code:root_dir(),
diff --git a/lib/orber/test/orber_acl_SUITE.erl b/lib/orber/test/orber_acl_SUITE.erl
index 8d1f9ebb6d..2b0a48adc9 100644
--- a/lib/orber/test/orber_acl_SUITE.erl
+++ b/lib/orber/test/orber_acl_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,9 @@
%%-----------------------------------------------------------------
-module(orber_acl_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -41,7 +41,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -92,21 +92,19 @@ end_per_suite(Config) ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
%%-----------------------------------------------------------------
-%% Test Case :
-%% Description:
+%% Test Case
+%% Description: Testing IPv4 Verify Operation
%%-----------------------------------------------------------------
-ipv4_verify(doc) -> ["Testing IPv4 Verify Operation."];
-ipv4_verify(suite) -> [];
ipv4_verify(_) ->
?match(true, orber_acl:verify("192.168.64.148", "192.168.64.0/17", inet)),
?match({false,"192.168.128.0","192.168.255.255"},
@@ -133,10 +131,8 @@ ipv4_verify(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv4 Range Operation
%%-----------------------------------------------------------------
-ipv4_range(doc) -> ["Testing IPv4 Range Operation."];
-ipv4_range(suite) -> [];
ipv4_range(_) ->
?match({ok,"192.168.0.0", "192.168.127.255"},
orber_acl:range("192.168.64.0/17")),
@@ -162,10 +158,8 @@ ipv4_range(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv4 Interfaces Operation
%%-----------------------------------------------------------------
-ipv4_interfaces(doc) -> ["Testing IPv4 Interfaces Operation."];
-ipv4_interfaces(suite) -> [];
ipv4_interfaces(_) ->
?match({ok, _},
orber_acl:init_acl([{tcp_in, "192.168.128.0/18", ["10.1.1.1"]},
@@ -185,19 +179,15 @@ ipv4_interfaces(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Benchmarking runtime critical IPv4 Operations
%%-----------------------------------------------------------------
-ipv4_bm(doc) -> ["Benchmarking runtime critical IPv4 Operations."];
-ipv4_bm(suite) -> [];
ipv4_bm(_) ->
?match({ok, _, _, _}, bm2([{tcp_in, "192.168.64.0/17"}], inet, "192.168.64.148")),
ok.
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv6 Verify Operation
%%-----------------------------------------------------------------
-ipv6_verify(doc) -> ["Testing IPv6 Verify Operation."];
-ipv6_verify(suite) -> [];
ipv6_verify(_) ->
case orber_test_lib:version_ok() of
true ->
@@ -215,10 +205,8 @@ ipv6_verify(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv6 Range Operation
%%-----------------------------------------------------------------
-ipv6_range(doc) -> ["Testing IPv6 Range Operation."];
-ipv6_range(suite) -> [];
ipv6_range(_) ->
case orber_test_lib:version_ok() of
true ->
@@ -233,10 +221,8 @@ ipv6_range(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv6 Interfaces Operation
%%-----------------------------------------------------------------
-ipv6_interfaces(doc) -> ["Testing IPv6 Interfaces Operation."];
-ipv6_interfaces(suite) -> [];
ipv6_interfaces(_) ->
case orber_test_lib:version_ok() of
true ->
@@ -252,10 +238,8 @@ ipv6_interfaces(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Benchmarking runtime critical IPv6 Operations
%%-----------------------------------------------------------------
-ipv6_bm(doc) -> ["Benchmarking runtime critical IPv6 Operations."];
-ipv6_bm(suite) -> [];
ipv6_bm(_) ->
case orber_test_lib:version_ok() of
true ->
diff --git a/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl b/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
index 220029ec72..6d085d3bf5 100644
--- a/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
+++ b/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(orber_firewall_ipv4_in_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,12 +87,12 @@ cases() ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -113,8 +113,7 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Incomming connections - Deny
%%-----------------------------------------------------------------
-deny_port_api(doc) -> ["Deny Access due to invalid local port"];
-deny_port_api(suite) -> [];
+%% Deny Access due to invalid local port
deny_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -123,11 +122,10 @@ deny_port_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
-deny_port_range_api(suite) -> [];
+%% Deny Access due to invalid local port range
deny_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -136,12 +134,11 @@ deny_port_range_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_host_api(doc) -> ["Deny Access due to invalid host"];
-deny_host_api(suite) -> [];
+%% Deny Access due to invalid host
deny_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -150,11 +147,10 @@ deny_host_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_peerhost_api(doc) -> ["Deny Access due to invalid peerhost"];
-deny_peerhost_api(suite) -> [];
+%% Deny Access due to invalid peerhost
deny_peerhost_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -163,14 +159,13 @@ deny_peerhost_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Incomming connections - Allow
%%-----------------------------------------------------------------
-allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_range_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -181,12 +176,11 @@ allow_port_range_api(_Config) ->
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
?match(false, corba_object:not_existent(IOR)),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_host_api(doc) -> ["Allow Access due to valid host"];
-allow_host_api(suite) -> [];
+%% Allow Access due to valid host
allow_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -197,11 +191,10 @@ allow_host_api(_Config) ->
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
?match(false, corba_object:not_existent(IOR)),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_peerhost_api(doc) -> ["Allow Access due to valid peerhost"];
-allow_peerhost_api(suite) -> [];
+%% Allow Access due to valid peerhost
allow_peerhost_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -218,14 +211,12 @@ allow_peerhost_api(_Config) ->
[#'IOP_ServiceContext'
{context_id=?ORBER_GENERIC_CTX_ID,
context_data = {interface, IP}}])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Test corbaloc strings
%%-----------------------------------------------------------------
-check_address_api(doc) -> ["Test corbaloc strings"];
-check_address_api(suite) -> [];
check_address_api(_Config) ->
?match({[[iiop,{1,0},"10.0.0.1",2809]],"NameService"},
orber_cosnaming_utils:addresses(":10.0.0.1/NameService")),
@@ -287,7 +278,7 @@ check_address_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
diff --git a/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl b/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
index 270b166fe9..e061d0410d 100644
--- a/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
+++ b/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(orber_firewall_ipv4_out_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,12 +87,12 @@ cases() ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -113,8 +113,7 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Incomming connections - Deny
%%-----------------------------------------------------------------
-deny_port_api(doc) -> ["Deny Access due to invalid local port"];
-deny_port_api(suite) -> [];
+%% Deny Access due to invalid local port
deny_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -124,11 +123,10 @@ deny_port_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
-deny_port_range_api(suite) -> [];
+%% Deny Access due to invalid local port range
deny_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -138,12 +136,11 @@ deny_port_range_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-deny_host_api(doc) -> ["Deny Access due to invalid host"];
-deny_host_api(suite) -> [];
+%% Deny Access due to invalid host
deny_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ClientNode, _ClientHost} =
@@ -153,14 +150,13 @@ deny_host_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Incomming connections - Allow
%%-----------------------------------------------------------------
-allow_port_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -173,11 +169,10 @@ allow_port_api(_Config) ->
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_range_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -190,12 +185,11 @@ allow_port_range_api(_Config) ->
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-allow_host_api(doc) -> ["Allow Access due to valid host"];
-allow_host_api(suite) -> [];
+%% Allow Access due to valid host
allow_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ClientNode, _ClientHost} =
@@ -208,11 +202,10 @@ allow_host_api(_Config) ->
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-local_interface_api(doc) -> ["Allow Access due to valid host via a spcific interface"];
-local_interface_api(suite) -> [];
+%% Allow Access due to valid host via a spcific interface
local_interface_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -231,6 +224,6 @@ local_interface_api(_Config) ->
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
diff --git a/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl b/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
index b0e28118f7..ee879f5ea8 100644
--- a/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
+++ b/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(orber_firewall_ipv6_in_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,7 +87,7 @@ cases() ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
orber:jump_start([{iiop_port, 0},
{iiop_out_ports, {5980, 6000}},
{flags, ?ORB_ENV_USE_IPV6}]),
@@ -96,7 +96,7 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, Config) ->
orber:jump_stop(),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -120,8 +120,7 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Incomming connections - Deny
%%-----------------------------------------------------------------
-deny_port_api(doc) -> ["Deny Access due to invalid local port"];
-deny_port_api(suite) -> [];
+%% Deny Access due to invalid local port
deny_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -131,11 +130,10 @@ deny_port_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
- % ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ % catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
-deny_port_range_api(suite) -> [];
+%% Deny Access due to invalid local port range
deny_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -145,12 +143,11 @@ deny_port_range_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_host_api(doc) -> ["Deny Access due to invalid host"];
-deny_host_api(suite) -> [];
+%% Deny Access due to invalid host
deny_host_api(_Config) ->
{ok, ServerNode, ServerHost} =
?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
@@ -159,11 +156,10 @@ deny_host_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_peerhost_api(doc) -> ["Deny Access due to invalid peer host"];
-deny_peerhost_api(suite) -> [];
+%% Deny Access due to invalid peer host
deny_peerhost_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -174,14 +170,13 @@ deny_peerhost_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Incomming connections - Allow
%%-----------------------------------------------------------------
-allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_range_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -194,12 +189,11 @@ allow_port_range_api(_Config) ->
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
?match(false, corba_object:not_existent(IOR)),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_host_api(doc) -> ["Allow Access due to valid host"];
-allow_host_api(suite) -> [];
+%% Allow Access due to valid host
allow_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -212,11 +206,10 @@ allow_host_api(_Config) ->
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
?match(false, corba_object:not_existent(IOR)),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_peerhost_api(doc) -> ["Allow Access due to valid host"];
-allow_peerhost_api(suite) -> [];
+%% Allow Access due to valid host
allow_peerhost_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -235,14 +228,12 @@ allow_peerhost_api(_Config) ->
{context_id=?ORBER_GENERIC_CTX_ID,
context_data = {interface, IP}}])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Test corbaloc strings
%%-----------------------------------------------------------------
-check_address_api(doc) -> ["Test corbaloc strings"];
-check_address_api(suite) -> [];
check_address_api(_Config) ->
?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",2809]],"NameService"},
orber_cosnaming_utils:addresses(":[0:0:0:0:0:FFFF:C02A:2A2A]/NameService")),
@@ -318,7 +309,7 @@ check_address_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@["++IP++"]:"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
diff --git a/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl b/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
index 96884f3339..0fe305aeb5 100644
--- a/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
+++ b/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(orber_firewall_ipv6_out_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,7 +87,7 @@ cases() ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
orber:jump_start([{iiop_port, 0},
{iiop_out_ports, {5980, 6000}},
{flags, ?ORB_ENV_USE_IPV6}]),
@@ -96,7 +96,7 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, Config) ->
orber:jump_stop(),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -120,8 +120,7 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Incomming connections - Deny
%%-----------------------------------------------------------------
-deny_port_api(doc) -> ["Deny Access due to invalid local port"];
-deny_port_api(suite) -> [];
+%% Deny Access due to invalid local port
deny_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -132,11 +131,10 @@ deny_port_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
-deny_port_range_api(suite) -> [];
+%% Deny Access due to invalid local port range
deny_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -147,12 +145,11 @@ deny_port_range_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_host_api(doc) -> ["Deny Access due to invalid host"];
-deny_host_api(suite) -> [];
+%% Deny Access due to invalid host
deny_host_api(_Config) ->
{ok, ServerNode, ServerHost} =
?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
@@ -162,14 +159,13 @@ deny_host_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Incomming connections - Allow
%%-----------------------------------------------------------------
-allow_port_api(doc) -> ["Allow Access due to valid local port"];
-allow_port_api(suite) -> [];
+%% Allow Access due to valid local port
allow_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -183,11 +179,10 @@ allow_port_api(_Config) ->
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_range_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -201,12 +196,11 @@ allow_port_range_api(_Config) ->
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_host_api(doc) -> ["Allow Access due to valid host"];
-allow_host_api(suite) -> [];
+%% Allow Access due to valid host
allow_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -220,11 +214,10 @@ allow_host_api(_Config) ->
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-local_interface_api(doc) -> ["Allow Access due to valid host via a spcific interface"];
-local_interface_api(suite) -> [];
+%% Allow Access due to valid host via a spcific interface
local_interface_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -238,6 +231,6 @@ local_interface_api(_Config) ->
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
diff --git a/lib/orber/test/orber_nat_SUITE.erl b/lib/orber/test/orber_nat_SUITE.erl
index 1294f96681..029a5e529b 100644
--- a/lib/orber/test/orber_nat_SUITE.erl
+++ b/lib/orber/test/orber_nat_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
-module(orber_nat_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/src/orber_iiop.hrl").
@@ -31,7 +31,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -44,7 +44,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -102,7 +102,7 @@ cases() ->
init_per_testcase(TC, Config)
when TC =:= nat_iiop_ssl_port;
TC =:= nat_iiop_ssl_port_local ->
- case ?config(crypto_started, Config) of
+ case proplists:get_value(crypto_started, Config) of
true ->
case orber_test_lib:ssl_version() of
no_ssl ->
@@ -128,7 +128,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -152,10 +152,8 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% API tests for NAT
%%-----------------------------------------------------------------
-
-nat_ip_address(doc) -> ["This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-nat_ip_address(suite) -> [];
+%% These case test if the server ORB use the correct
+%% interface when exporting IOR:s
nat_ip_address(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -169,9 +167,6 @@ nat_ip_address(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_ip_address_multiple(doc) -> ["This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-nat_ip_address_multiple(suite) -> [];
nat_ip_address_multiple(_Config) ->
IP = orber_test_lib:get_host(),
@@ -185,9 +180,6 @@ nat_ip_address_multiple(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_ip_address_local(doc) -> ["This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-nat_ip_address_local(suite) -> [];
nat_ip_address_local(_Config) ->
IP = orber_test_lib:get_host(),
{ok, ServerNode, _ServerHost} =
@@ -200,9 +192,6 @@ nat_ip_address_local(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_ip_address_local_local(doc) -> ["This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-nat_ip_address_local_local(suite) -> [];
nat_ip_address_local_local(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -222,9 +211,6 @@ nat_ip_address_local_local(_Config) ->
iop_ior:get_key(IOR2)),
ok.
-nat_iiop_port(doc) -> ["This case test if the server ORB use the correct",
- "port when exporting IOR:s"];
-nat_iiop_port(suite) -> [];
nat_iiop_port(_Config) ->
IP = orber_test_lib:get_host(),
{ok, ServerNode, _ServerHost} =
@@ -237,9 +223,6 @@ nat_iiop_port(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_iiop_port_local(doc) -> ["This case test if the server ORB use the correct",
- "port when exporting IOR:s"];
-nat_iiop_port_local(suite) -> [];
nat_iiop_port_local(_Config) ->
IP = orber_test_lib:get_host(),
{ok, ServerNode, _ServerHost} =
@@ -252,9 +235,6 @@ nat_iiop_port_local(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_iiop_port_local_local(doc) -> ["This case test if the server ORB use the correct",
- "port when exporting IOR:s"];
-nat_iiop_port_local_local(suite) -> [];
nat_iiop_port_local_local(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -286,11 +266,8 @@ nat_iiop_port_local_local(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, ssl security depth 1
%%-----------------------------------------------------------------
-
-
-nat_iiop_ssl_port(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
- "Make sure NAT works for SSL"];
-nat_iiop_ssl_port(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 1)
+%% Make sure NAT works for SSL
nat_iiop_ssl_port(_Config) ->
IP = orber_test_lib:get_host(),
@@ -337,9 +314,6 @@ nat_iiop_ssl_port(_Config) ->
remove_listen_interface, [Ref])),
ok.
-nat_iiop_ssl_port_local(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
- "Make sure NAT works for SSL"];
-nat_iiop_ssl_port_local(suite) -> [];
nat_iiop_ssl_port_local(_Config) ->
IP = orber_test_lib:get_host(),
diff --git a/lib/orber/test/orber_test.idl b/lib/orber/test/orber_test.idl
index 3fc1e64f48..852daabedf 100644
--- a/lib/orber/test/orber_test.idl
+++ b/lib/orber/test/orber_test.idl
@@ -1,7 +1,7 @@
//
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1997-2010. All Rights Reserved.
+// Copyright Ericsson AB 1997-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/orber_test_lib.erl b/lib/orber/test/orber_test_lib.erl
index 51025927ee..95ab26cd30 100644
--- a/lib/orber/test/orber_test_lib.erl
+++ b/lib/orber/test/orber_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
%%
-module(orber_test_lib).
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/include/ifr_types.hrl").
-include_lib("orber/src/orber_iiop.hrl").
diff --git a/lib/orber/test/orber_test_server.cfg b/lib/orber/test/orber_test_server.cfg
index d74dcb15ce..c6bbd99f17 100644
--- a/lib/orber/test/orber_test_server.cfg
+++ b/lib/orber/test/orber_test_server.cfg
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/orber_test_server.idl b/lib/orber/test/orber_test_server.idl
index 80a25763cd..f274baed24 100644
--- a/lib/orber/test/orber_test_server.idl
+++ b/lib/orber/test/orber_test_server.idl
@@ -1,7 +1,7 @@
//
// %CopyrightBegin%
//
-// Copyright Ericsson AB 1999-2010. All Rights Reserved.
+// Copyright Ericsson AB 1999-2016. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/orber_test_server_impl.erl b/lib/orber/test/orber_test_server_impl.erl
index b35e959c9d..d9cef17d26 100644
--- a/lib/orber/test/orber_test_server_impl.erl
+++ b/lib/orber/test/orber_test_server_impl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/orber_test_timeout_server_impl.erl b/lib/orber/test/orber_test_timeout_server_impl.erl
index 9ae61378e9..de16877dde 100644
--- a/lib/orber/test/orber_test_timeout_server_impl.erl
+++ b/lib/orber/test/orber_test_timeout_server_impl.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/orber/test/orber_web_SUITE.erl b/lib/orber/test/orber_web_SUITE.erl
index a88e0373bd..b272eb3fcf 100644
--- a/lib/orber/test/orber_web_SUITE.erl
+++ b/lib/orber/test/orber_web_SUITE.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,11 +26,11 @@
-module(orber_web_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -54,7 +54,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
io:format("------ CORRECT RESULT ------~n~p~n",
[AcTuAlReS]),
@@ -106,7 +106,7 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
orber:jump_start(2875),
@@ -119,7 +119,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -127,8 +127,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: menu
%% Description:
%%-----------------------------------------------------------------
-menu(doc) -> [""];
-menu(suite) -> [];
menu(_) ->
Node = atom_to_list(node()),
OK = orber_web:menu(env, [{"node", Node}]),
@@ -141,8 +139,6 @@ menu(_) ->
%% Test Case: configure
%% Description:
%%-----------------------------------------------------------------
-configure(doc) -> [""];
-configure(suite) -> [];
configure(_) ->
Node = atom_to_list(node()),
?match({'EXIT', _}, orber_web:configure(env, [])),
@@ -162,8 +158,6 @@ configure(_) ->
%% Test Case: info
%% Description:
%%-----------------------------------------------------------------
-info(doc) -> [""];
-info(suite) -> [];
info(_) ->
?match({'EXIT', _}, orber_web:info(env, [])),
?match({'EXIT', _}, orber_web:info(env, [{"node", localhost}])),
@@ -174,8 +168,6 @@ info(_) ->
%% Test Case: nameservice
%% Description:
%%-----------------------------------------------------------------
-nameservice(doc) -> [""];
-nameservice(suite) -> [];
nameservice(_) ->
NodeStr = atom_to_list(node()),
?match({'EXIT', _}, orber_web:nameservice(env, [{"node", localhost},
@@ -215,8 +207,6 @@ nameservice(_) ->
%% Test Case: ifr_select
%% Description:
%%-----------------------------------------------------------------
-ifr_select(doc) -> [""];
-ifr_select(suite) -> [];
ifr_select(_) ->
?match({'EXIT', _}, orber_web:ifr_select(env, [])),
?match({'EXIT', _}, orber_web:ifr_select(env, [{"node", localhost}])),
@@ -228,8 +218,6 @@ ifr_select(_) ->
%% Test Case: ifr_data
%% Description:
%%-----------------------------------------------------------------
-ifr_data(doc) -> [""];
-ifr_data(suite) -> [];
ifr_data(_) ->
?match({'EXIT', _}, orber_web:ifr_data(env, [])),
?match({'EXIT', _}, orber_web:ifr_data(env, [{"node", localhost},
@@ -266,8 +254,6 @@ ifr_data(_) ->
%% Test Case: create
%% Description:
%%-----------------------------------------------------------------
-create(doc) -> [""];
-create(suite) -> [];
create(_) ->
NodeStr = atom_to_list(node()),
?match({'EXIT', _}, orber_web:create(env, [])),
@@ -347,8 +333,6 @@ create(_) ->
%% Test Case: delete_ctx
%% Description:
%%-----------------------------------------------------------------
-delete_ctx(doc) -> [""];
-delete_ctx(suite) -> [];
delete_ctx(_) ->
?match({ok, _}, orber_web:delete_ctx(env, [{"node", atom_to_list(node())},
{"context", "id1"}])),
@@ -363,8 +347,6 @@ delete_ctx(_) ->
%% Test Case: add_ctx
%% Description:
%%-----------------------------------------------------------------
-add_ctx(doc) -> [""];
-add_ctx(suite) -> [];
add_ctx(_) ->
?match({error, _}, orber_web:add_ctx(env, [{"node", "bad_node"},
{"context", "root"},
@@ -384,8 +366,6 @@ add_ctx(_) ->
%% Test Case: delete_obj
%% Description:
%%-----------------------------------------------------------------
-delete_obj(doc) -> [""];
-delete_obj(suite) -> [];
delete_obj(_) ->
NodeStr = atom_to_list(node()),
?match({error, _}, orber_web:delete_obj(env, [{"node", "bad_node"},
@@ -436,8 +416,6 @@ delete_obj(_) ->
%% Test Case: server
%% Description:
%%-----------------------------------------------------------------
-server(doc) -> [""];
-server(suite) -> [];
server(_) ->
NodeStr = "node=" ++ atom_to_list(node()),
{ok, Pid} = ?match({ok,_}, orber_web_server:start()),
diff --git a/lib/orber/test/tc_SUITE.erl b/lib/orber/test/tc_SUITE.erl
index a1a5c74ae3..4572057403 100644
--- a/lib/orber/test/tc_SUITE.erl
+++ b/lib/orber/test/tc_SUITE.erl
@@ -1,9 +1,9 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
+%% Licensed under the Apache Li2cense, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
@@ -26,10 +26,10 @@
%%-----------------------------------------------------------------
-module(tc_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(Expr),
fun() ->
@@ -173,12 +173,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -186,66 +186,54 @@ end_per_testcase(_Case, Config) ->
%% Test Case: null test
%% Description:
%%-----------------------------------------------------------------
-null(doc) -> [];
-null(suite) -> [];
null(_) ->
- ?line true = orber_tc:check_tc(orber_tc:null()),
- ?line code(orber_tc:null()),
+ true = orber_tc:check_tc(orber_tc:null()),
+ code(orber_tc:null()),
ok.
%%-----------------------------------------------------------------
%% Test Case: void test
%% Description:
%%-----------------------------------------------------------------
-void(doc) -> [];
-void(suite) -> [];
void(_) ->
- ?line true = orber_tc:check_tc(orber_tc:void()),
- ?line code(orber_tc:void()),
+ true = orber_tc:check_tc(orber_tc:void()),
+ code(orber_tc:void()),
ok.
%%-----------------------------------------------------------------
%% Test Case: short integer test
%% Description:
%%-----------------------------------------------------------------
-short(doc) -> [];
-short(suite) -> [];
short(_) ->
- ?line true = orber_tc:check_tc(orber_tc:short()),
- ?line code(orber_tc:short()),
+ true = orber_tc:check_tc(orber_tc:short()),
+ code(orber_tc:short()),
ok.
%%-----------------------------------------------------------------
%% Test Case: unsigned short integer test
%% Description:
%%-----------------------------------------------------------------
-ushort(doc) -> [];
-ushort(suite) -> [];
ushort(_) ->
- ?line true = orber_tc:check_tc(orber_tc:unsigned_short()),
- ?line code(orber_tc:unsigned_short()),
+ true = orber_tc:check_tc(orber_tc:unsigned_short()),
+ code(orber_tc:unsigned_short()),
ok.
%%-----------------------------------------------------------------
%% Test Case: long integer test
%% Description:
%%-----------------------------------------------------------------
-long(doc) -> [];
-long(suite) -> [];
long(_) ->
- ?line true = orber_tc:check_tc(orber_tc:long()),
- ?line code(orber_tc:long()),
+ true = orber_tc:check_tc(orber_tc:long()),
+ code(orber_tc:long()),
ok.
%%-----------------------------------------------------------------
%% Test Case: unsigned long integer test
%% Description:
%%-----------------------------------------------------------------
-ulong(doc) -> [];
-ulong(suite) -> [];
ulong(_) ->
- ?line true = orber_tc:check_tc(orber_tc:unsigned_long()),
- ?line code(orber_tc:unsigned_long()),
+ true = orber_tc:check_tc(orber_tc:unsigned_long()),
+ code(orber_tc:unsigned_long()),
ok.
@@ -253,22 +241,18 @@ ulong(_) ->
%% Test Case: long integer test
%% Description:
%%-----------------------------------------------------------------
-longlong(doc) -> [];
-longlong(suite) -> [];
longlong(_) ->
- ?line true = orber_tc:check_tc(orber_tc:long_long()),
- ?line code(orber_tc:long_long()),
+ true = orber_tc:check_tc(orber_tc:long_long()),
+ code(orber_tc:long_long()),
ok.
%%-----------------------------------------------------------------
%% Test Case: unsigned long integer test
%% Description:
%%-----------------------------------------------------------------
-ulonglong(doc) -> [];
-ulonglong(suite) -> [];
ulonglong(_) ->
- ?line true = orber_tc:check_tc(orber_tc:unsigned_long_long()),
- ?line code(orber_tc:unsigned_long_long()),
+ true = orber_tc:check_tc(orber_tc:unsigned_long_long()),
+ code(orber_tc:unsigned_long_long()),
ok.
@@ -276,110 +260,90 @@ ulonglong(_) ->
%% Test Case: float test
%% Description:
%%-----------------------------------------------------------------
-float(doc) -> [];
-float(suite) -> [];
float(_) ->
- ?line true = orber_tc:check_tc(orber_tc:'float'()),
- ?line code(orber_tc:'float'()),
+ true = orber_tc:check_tc(orber_tc:'float'()),
+ code(orber_tc:'float'()),
ok.
%%-----------------------------------------------------------------
%% Test Case: double test
%% Description:
%%-----------------------------------------------------------------
-double(doc) -> [];
-double(suite) -> [];
double(_) ->
- ?line true = orber_tc:check_tc(orber_tc:double()),
- ?line code(orber_tc:double()),
+ true = orber_tc:check_tc(orber_tc:double()),
+ code(orber_tc:double()),
ok.
%%-----------------------------------------------------------------
%% Test Case: longdouble test
%% Description:
%%-----------------------------------------------------------------
-longdouble(doc) -> [];
-longdouble(suite) -> [];
longdouble(_) ->
- ?line true = orber_tc:check_tc(orber_tc:longdouble()),
- ?line code(orber_tc:longdouble()),
+ true = orber_tc:check_tc(orber_tc:longdouble()),
+ code(orber_tc:longdouble()),
ok.
%%-----------------------------------------------------------------
%% Test Case: boolean test
%% Description:
%%-----------------------------------------------------------------
-boolean(doc) -> [];
-boolean(suite) -> [];
boolean(_) ->
- ?line true = orber_tc:check_tc(orber_tc:boolean()),
- ?line code(orber_tc:boolean()),
+ true = orber_tc:check_tc(orber_tc:boolean()),
+ code(orber_tc:boolean()),
ok.
%%-----------------------------------------------------------------
%% Test Case: character test
%% Description:
%%-----------------------------------------------------------------
-char(doc) -> [];
-char(suite) -> [];
char(_) ->
- ?line true = orber_tc:check_tc(orber_tc:char()),
- ?line code(orber_tc:char()),
+ true = orber_tc:check_tc(orber_tc:char()),
+ code(orber_tc:char()),
ok.
%%-----------------------------------------------------------------
%% Test Case: character test
%% Description:
%%-----------------------------------------------------------------
-wchar(doc) -> [];
-wchar(suite) -> [];
wchar(_) ->
- ?line true = orber_tc:check_tc(orber_tc:wchar()),
- ?line code(orber_tc:wchar()),
+ true = orber_tc:check_tc(orber_tc:wchar()),
+ code(orber_tc:wchar()),
ok.
%%-----------------------------------------------------------------
%% Test Case: octet test
%% Description:
%%-----------------------------------------------------------------
-octet(doc) -> [];
-octet(suite) -> [];
octet(_) ->
- ?line true = orber_tc:check_tc(orber_tc:octet()),
- ?line code(orber_tc:octet()),
+ true = orber_tc:check_tc(orber_tc:octet()),
+ code(orber_tc:octet()),
ok.
%%-----------------------------------------------------------------
%% Test Case: any test
%% Description:
%%-----------------------------------------------------------------
-any(doc) -> [];
-any(suite) -> [];
any(_) ->
- ?line true = orber_tc:check_tc(orber_tc:any()),
- ?line code(orber_tc:any()),
+ true = orber_tc:check_tc(orber_tc:any()),
+ code(orber_tc:any()),
ok.
%%-----------------------------------------------------------------
%% Test Case: typecode test
%% Description:
%%-----------------------------------------------------------------
-typecode(doc) -> [];
-typecode(suite) -> [];
typecode(_) ->
- ?line true = orber_tc:check_tc(orber_tc:typecode()),
- ?line code(orber_tc:typecode()),
+ true = orber_tc:check_tc(orber_tc:typecode()),
+ code(orber_tc:typecode()),
ok.
%%-----------------------------------------------------------------
%% Test Case: principal test
%% Description:
%%-----------------------------------------------------------------
-principal(doc) -> [];
-principal(suite) -> [];
principal(_) ->
- ?line true = orber_tc:check_tc(orber_tc:principal()),
- ?line code(orber_tc:principal()),
+ true = orber_tc:check_tc(orber_tc:principal()),
+ code(orber_tc:principal()),
ok.
@@ -387,62 +351,56 @@ principal(_) ->
%% Test Case: object_reference test
%% Description:
%%-----------------------------------------------------------------
-object_reference(doc) -> [];
-object_reference(suite) -> [];
object_reference(_) ->
- ?line true = orber_tc:check_tc(orber_tc:object_reference("Id", "Name")),
- ?line false = orber_tc:check_tc(orber_tc:object_reference(42, "Name")),
- ?line false = orber_tc:check_tc(orber_tc:object_reference("Id", 42)),
- ?line code(orber_tc:object_reference("Id", "Name")),
- ?line ?match(code(orber_tc:object_reference(42, "Name"))),
- ?line ?match(code(orber_tc:object_reference("Id", 42))),
+ true = orber_tc:check_tc(orber_tc:object_reference("Id", "Name")),
+ false = orber_tc:check_tc(orber_tc:object_reference(42, "Name")),
+ false = orber_tc:check_tc(orber_tc:object_reference("Id", 42)),
+ code(orber_tc:object_reference("Id", "Name")),
+ ?match(code(orber_tc:object_reference(42, "Name"))),
+ ?match(code(orber_tc:object_reference("Id", 42))),
ok.
%%-----------------------------------------------------------------
%% Test Case: struct
%% Description:
%%-----------------------------------------------------------------
-struct(doc) -> [];
-struct(suite) -> [];
struct(_) ->
- ?line true = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:struct(42, "Name", ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:struct("Id", false, ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:struct("Id", "Name", "wrong")),
- ?line code(orber_tc:struct("Id", "Name", ?ELIST)),
- ?line ?match(code(orber_tc:struct(42, "Name", ?ELIST))),
- ?line ?match(code(orber_tc:struct("Id", false, ?ELIST))),
- ?line ?match(code(orber_tc:struct("Id", "Name", ?VELIST))),
- ?line ?match(code(orber_tc:struct("Id", "Name", "wrong"))),
+ true = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:struct(42, "Name", ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:struct("Id", false, ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?VELIST)),
+ false = orber_tc:check_tc(orber_tc:struct("Id", "Name", "wrong")),
+ code(orber_tc:struct("Id", "Name", ?ELIST)),
+ ?match(code(orber_tc:struct(42, "Name", ?ELIST))),
+ ?match(code(orber_tc:struct("Id", false, ?ELIST))),
+ ?match(code(orber_tc:struct("Id", "Name", ?VELIST))),
+ ?match(code(orber_tc:struct("Id", "Name", "wrong"))),
ok.
%%-----------------------------------------------------------------
%% Test Case: union
%% Description:
%%-----------------------------------------------------------------
-union(doc) -> [];
-union(suite) -> [];
union(_) ->
- ?line true = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ true = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
-1, ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:union(42, "Name", orber_tc:long(),
+ false = orber_tc:check_tc(orber_tc:union(42, "Name", orber_tc:long(),
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line false = orber_tc:check_tc(orber_tc:union("Id", false, orber_tc:long(),
+ false = orber_tc:check_tc(orber_tc:union("Id", false, orber_tc:long(),
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", bad_tc,
+ false = orber_tc:check_tc(orber_tc:union("Id", "Name", bad_tc,
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
"wrong", [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line code(orber_tc:union("Id", "Name", orber_tc:long(),
+ code(orber_tc:union("Id", "Name", orber_tc:long(),
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
ok.
@@ -452,109 +410,95 @@ union(_) ->
%% Test Case: enum test
%% Description:
%%-----------------------------------------------------------------
-enum(doc) -> [];
-enum(suite) -> [];
enum(_) ->
- ?line true = orber_tc:check_tc(orber_tc:enum("Id", "Name",
+ true = orber_tc:check_tc(orber_tc:enum("Id", "Name",
["E1", "E2", "E3"])),
- ?line false = orber_tc:check_tc(orber_tc:enum(42, "Name",
+ false = orber_tc:check_tc(orber_tc:enum(42, "Name",
["E1", "E2", "E3"])),
- ?line false = orber_tc:check_tc(orber_tc:enum("Id", false,
+ false = orber_tc:check_tc(orber_tc:enum("Id", false,
["E1", "E2", "E3"])),
- ?line false = orber_tc:check_tc(orber_tc:enum("Id", "Name",
+ false = orber_tc:check_tc(orber_tc:enum("Id", "Name",
["E1", false, "E3"])),
- ?line code(orber_tc:enum("Id", "Name", ["E1", "E2", "E3"])),
- ?line ?match(code(orber_tc:enum(false, "Name", ["E1", "E2", "E3"]))),
- ?line ?match(code(orber_tc:enum("Id", 42, ["E1", "E2", "E3"]))),
- ?line ?match(code(orber_tc:enum("Id", "Name", ["E1", false, "E3"]))),
+ code(orber_tc:enum("Id", "Name", ["E1", "E2", "E3"])),
+ ?match(code(orber_tc:enum(false, "Name", ["E1", "E2", "E3"]))),
+ ?match(code(orber_tc:enum("Id", 42, ["E1", "E2", "E3"]))),
+ ?match(code(orber_tc:enum("Id", "Name", ["E1", false, "E3"]))),
ok.
%%-----------------------------------------------------------------
%% Test Case: string
%% Description:
%%-----------------------------------------------------------------
-string(doc) -> [];
-string(suite) -> [];
string(_) ->
- ?line true = orber_tc:check_tc(orber_tc:string(0)),
- ?line true = orber_tc:check_tc(orber_tc:string(1)),
- ?line false = orber_tc:check_tc(orber_tc:string("wrong")),
- ?line code(orber_tc:string(0)),
- ?line code(orber_tc:string(1)),
- ?line ?match(code(orber_tc:string(-1))),
- ?line ?match(code(orber_tc:string(?ULONGMAX+1))),
- ?line ?match(code(orber_tc:string("wrong"))),
+ true = orber_tc:check_tc(orber_tc:string(0)),
+ true = orber_tc:check_tc(orber_tc:string(1)),
+ false = orber_tc:check_tc(orber_tc:string("wrong")),
+ code(orber_tc:string(0)),
+ code(orber_tc:string(1)),
+ ?match(code(orber_tc:string(-1))),
+ ?match(code(orber_tc:string(?ULONGMAX+1))),
+ ?match(code(orber_tc:string("wrong"))),
ok.
%%-----------------------------------------------------------------
%% Test Case: wstring
%% Description:
%%-----------------------------------------------------------------
-wstring(doc) -> [];
-wstring(suite) -> [];
wstring(_) ->
- ?line true = orber_tc:check_tc(orber_tc:wstring(0)),
- ?line true = orber_tc:check_tc(orber_tc:wstring(1)),
- ?line false = orber_tc:check_tc(orber_tc:wstring("wrong")),
- ?line code(orber_tc:wstring(0)),
- ?line code(orber_tc:wstring(1)),
- ?line ?match(code(orber_tc:wstring(-1))),
- ?line ?match(code(orber_tc:wstring(?ULONGMAX+1))),
- ?line ?match(code(orber_tc:wstring(false))),
+ true = orber_tc:check_tc(orber_tc:wstring(0)),
+ true = orber_tc:check_tc(orber_tc:wstring(1)),
+ false = orber_tc:check_tc(orber_tc:wstring("wrong")),
+ code(orber_tc:wstring(0)),
+ code(orber_tc:wstring(1)),
+ ?match(code(orber_tc:wstring(-1))),
+ ?match(code(orber_tc:wstring(?ULONGMAX+1))),
+ ?match(code(orber_tc:wstring(false))),
ok.
%%-----------------------------------------------------------------
%% Test Case: sequence
%% Description:
%%-----------------------------------------------------------------
-sequence(doc) -> [];
-sequence(suite) -> [];
sequence(_) ->
- ?line true = orber_tc:check_tc(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
- ?line code(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
+ true = orber_tc:check_tc(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
+ code(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
ok.
%%-----------------------------------------------------------------
%% Test Case: array
%% Description:
%%-----------------------------------------------------------------
-array(doc) -> [];
-array(suite) -> [];
array(_) ->
- ?line true = orber_tc:check_tc(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
- ?line code(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
+ true = orber_tc:check_tc(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
+ code(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
ok.
%%-----------------------------------------------------------------
%% Test Case: alias
%% Description:
%%-----------------------------------------------------------------
-alias(doc) -> [];
-alias(suite) -> [];
alias(_) ->
- ?line true = orber_tc:check_tc(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
- ?line false = orber_tc:check_tc(orber_tc:alias(false, "Name", orber_tc:struct("Id", "Name", ?ELIST))),
- ?line false = orber_tc:check_tc(orber_tc:alias("Id", 42, orber_tc:struct("Id", "Name", ?ELIST))),
- ?line false = orber_tc:check_tc(orber_tc:alias("Id", "Name", "wrong")),
- ?line code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
- ?line ?match(code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?VELIST)))),
+ true = orber_tc:check_tc(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ false = orber_tc:check_tc(orber_tc:alias(false, "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ false = orber_tc:check_tc(orber_tc:alias("Id", 42, orber_tc:struct("Id", "Name", ?ELIST))),
+ false = orber_tc:check_tc(orber_tc:alias("Id", "Name", "wrong")),
+ code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ ?match(code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?VELIST)))),
ok.
%%-----------------------------------------------------------------
%% Test Case: exception
%% Description:
%%-----------------------------------------------------------------
-exception(doc) -> [];
-exception(suite) -> [];
exception(_) ->
- ?line true = orber_tc:check_tc(orber_tc:exception("Id", "Name", ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:exception(42, "Name", ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:exception("Id", false, ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:exception("Id", "Name", "wrong")),
- ?line code(orber_tc:exception("Id", "Name", ?ELIST)),
- ?line ?match(code(orber_tc:exception(42, "Name", ?ELIST))),
- ?line ?match(code(orber_tc:exception("Id", false, ?ELIST))),
- ?line ?match(code(orber_tc:exception("Id", "Name", "wrong"))),
+ true = orber_tc:check_tc(orber_tc:exception("Id", "Name", ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:exception(42, "Name", ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:exception("Id", false, ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:exception("Id", "Name", "wrong")),
+ code(orber_tc:exception("Id", "Name", ?ELIST)),
+ ?match(code(orber_tc:exception(42, "Name", ?ELIST))),
+ ?match(code(orber_tc:exception("Id", false, ?ELIST))),
+ ?match(code(orber_tc:exception("Id", "Name", "wrong"))),
ok.
@@ -562,86 +506,76 @@ exception(_) ->
%% Test Case: fixed
%% Description:
%%-----------------------------------------------------------------
-fixed(doc) -> [];
-fixed(suite) -> [];
fixed(_) ->
- ?line true = orber_tc:check_tc(orber_tc:fixed(25, 2)),
- ?line code(orber_tc:fixed(25, 2)),
+ true = orber_tc:check_tc(orber_tc:fixed(25, 2)),
+ code(orber_tc:fixed(25, 2)),
ok.
%%-----------------------------------------------------------------
%% Test Case: value
%% Description:
%%-----------------------------------------------------------------
-value(doc) -> [];
-value(suite) -> [];
value(_) ->
- ?line true = orber_tc:check_tc(orber_tc:value("Id", "Name", 42,
+ true = orber_tc:check_tc(orber_tc:value("Id", "Name", 42,
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value(42, "Name", 42,
+ false = orber_tc:check_tc(orber_tc:value(42, "Name", 42,
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", 42, 42,
+ false = orber_tc:check_tc(orber_tc:value("Id", 42, 42,
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "wrong",
+ false = orber_tc:check_tc(orber_tc:value("Id", "Name", "wrong",
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
?VELIST, ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
orber_tc:fixed(25, 2), false)),
- ?line code(orber_tc:value("Id", "Name", 42, orber_tc:long(), ?VELIST)),
+ code(orber_tc:value("Id", "Name", 42, orber_tc:long(), ?VELIST)),
ok.
%%-----------------------------------------------------------------
%% Test Case: value_box
%% Description:
%%-----------------------------------------------------------------
-value_box(doc) -> [];
-value_box(suite) -> [];
value_box(_) ->
- ?line true = orber_tc:check_tc(orber_tc:value_box("Id", "Name",
+ true = orber_tc:check_tc(orber_tc:value_box("Id", "Name",
orber_tc:fixed(25, 2))),
- ?line false = orber_tc:check_tc(orber_tc:value_box(42, "Name",
+ false = orber_tc:check_tc(orber_tc:value_box(42, "Name",
orber_tc:fixed(25, 2))),
- ?line false = orber_tc:check_tc(orber_tc:value_box("Id", 42,
+ false = orber_tc:check_tc(orber_tc:value_box("Id", 42,
orber_tc:fixed(25, 2))),
- ?line false = orber_tc:check_tc(orber_tc:value_box("Id", "Name", "wrong")),
- ?line code(orber_tc:value_box("Id", "Name", orber_tc:long())),
- ?line ?match(code(orber_tc:value_box(42, "Name", orber_tc:short()))),
- ?line ?match(code(orber_tc:value_box("Id", 42, orber_tc:char()))),
- ?line ?match(code(orber_tc:value_box("Id", "Name", false))),
+ false = orber_tc:check_tc(orber_tc:value_box("Id", "Name", "wrong")),
+ code(orber_tc:value_box("Id", "Name", orber_tc:long())),
+ ?match(code(orber_tc:value_box(42, "Name", orber_tc:short()))),
+ ?match(code(orber_tc:value_box("Id", 42, orber_tc:char()))),
+ ?match(code(orber_tc:value_box("Id", "Name", false))),
ok.
%%-----------------------------------------------------------------
%% Test Case: native
%% Description:
%%-----------------------------------------------------------------
-native(doc) -> [];
-native(suite) -> [];
native(_) ->
- ?line true = orber_tc:check_tc(orber_tc:native("Id", "Name")),
- ?line false = orber_tc:check_tc(orber_tc:native(42, "Name")),
- ?line false = orber_tc:check_tc(orber_tc:native("Id", 42)),
- ?line code(orber_tc:native("Id", "Name")),
- ?line ?match(code(orber_tc:native(42, "Name"))),
- ?line ?match(code(orber_tc:native("Id", 42))),
+ true = orber_tc:check_tc(orber_tc:native("Id", "Name")),
+ false = orber_tc:check_tc(orber_tc:native(42, "Name")),
+ false = orber_tc:check_tc(orber_tc:native("Id", 42)),
+ code(orber_tc:native("Id", "Name")),
+ ?match(code(orber_tc:native(42, "Name"))),
+ ?match(code(orber_tc:native("Id", 42))),
ok.
%%-----------------------------------------------------------------
%% Test Case: abstract_interface
%% Description:
%%-----------------------------------------------------------------
-abstract_interface(doc) -> [];
-abstract_interface(suite) -> [];
abstract_interface(_) ->
- ?line true = orber_tc:check_tc(orber_tc:abstract_interface("RepId", "Name")),
- ?line false = orber_tc:check_tc(orber_tc:abstract_interface(false, "Name")),
- ?line false = orber_tc:check_tc(orber_tc:abstract_interface("RepId", 42)),
- ?line code(orber_tc:abstract_interface("RepId", "Name")),
- ?line ?match(code(orber_tc:abstract_interface(42, "Name"))),
- ?line ?match(code(orber_tc:abstract_interface("Id", 42))),
+ true = orber_tc:check_tc(orber_tc:abstract_interface("RepId", "Name")),
+ false = orber_tc:check_tc(orber_tc:abstract_interface(false, "Name")),
+ false = orber_tc:check_tc(orber_tc:abstract_interface("RepId", 42)),
+ code(orber_tc:abstract_interface("RepId", "Name")),
+ ?match(code(orber_tc:abstract_interface(42, "Name"))),
+ ?match(code(orber_tc:abstract_interface("Id", 42))),
ok.
@@ -650,22 +584,18 @@ abstract_interface(_) ->
%% Test Case: indirection
%% Description:
%%-----------------------------------------------------------------
-indirection(doc) -> [];
-indirection(suite) -> [];
indirection(_) ->
- ?line true = orber_tc:check_tc({'none', 42}),
+ true = orber_tc:check_tc({'none', 42}),
ok.
%%-----------------------------------------------------------------
%% Test Case: get_tc
%% Description:
%%-----------------------------------------------------------------
-get_tc(doc) -> [];
-get_tc(suite) -> [];
get_tc(_) ->
TC = 'CosNaming_Binding':tc(),
- ?line TC = orber_tc:get_tc({'CosNaming_Binding', 42}),
- ?line ?match(orber_tc:get_tc({'none', 42})),
+ TC = orber_tc:get_tc({'CosNaming_Binding', 42}),
+ ?match(orber_tc:get_tc({'none', 42})),
ok.
%%-----------------------------------------------------------------
diff --git a/lib/orber/vsn.mk b/lib/orber/vsn.mk
index 4947315ad0..dcb2c985a3 100644
--- a/lib/orber/vsn.mk
+++ b/lib/orber/vsn.mk
@@ -1 +1 @@
-ORBER_VSN = 3.8.1
+ORBER_VSN = 3.8.2
diff --git a/lib/os_mon/Makefile b/lib/os_mon/Makefile
index 8399ee5f90..1eff8a785a 100644
--- a/lib/os_mon/Makefile
+++ b/lib/os_mon/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/Makefile.in b/lib/os_mon/c_src/Makefile.in
index e9fc5f4139..27b156a2c9 100644
--- a/lib/os_mon/c_src/Makefile.in
+++ b/lib/os_mon/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/cpu_sup.c b/lib/os_mon/c_src/cpu_sup.c
index e097141125..17ef48c26e 100644
--- a/lib/os_mon/c_src/cpu_sup.c
+++ b/lib/os_mon/c_src/cpu_sup.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2012. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -47,6 +47,10 @@
#include <kstat.h>
#endif
+#if (defined(__APPLE__) && defined(__MACH__))
+#include <mach/mach.h>
+#endif
+
#include <errno.h>
#if defined(__sun__) || defined(__linux__)
@@ -73,6 +77,10 @@ typedef struct {
#endif
+#if (defined(__APPLE__) && defined(__MACH__))
+#define CU_OSX_VALUES (5)
+#endif
+
#if defined(__FreeBSD__)
#include <sys/resource.h>
#include <sys/sysctl.h>
@@ -164,7 +172,7 @@ static int processors_online() {
}
#endif
-#if defined(__FreeBSD__)
+#if (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD__)
void getsysctl(const char *, void *, size_t);
#endif
@@ -173,7 +181,7 @@ int main(int argc, char** argv) {
int rc;
int sz;
unsigned int *rv;
-#if defined(__linux__) || defined(__FreeBSD__)
+#if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) ||defined(__FreeBSD__)
unsigned int no_of_cpus = 0;
#endif
@@ -190,6 +198,13 @@ int main(int argc, char** argv) {
}
#endif
+#if (defined(__APPLE__) && defined(__MACH__))
+ getsysctl("hw.ncpu", &no_of_cpus, sizeof(int));
+ if ( (rv = (unsigned int*)malloc(sizeof(unsigned int)*(2 + 2*no_of_cpus*CU_OSX_VALUES))) == NULL) {
+ error("cpu_sup: malloc error");
+ }
+#endif
+
#if defined(__FreeBSD__)
getsysctl("hw.ncpu", &no_of_cpus, sizeof(int));
if ( (rv = (unsigned int*)malloc(sizeof(unsigned int)*(2 + 2*no_of_cpus*CU_BSD_VALUES))) == NULL) {
@@ -222,7 +237,7 @@ int main(int argc, char** argv) {
case AVG5: bsd_loadavg(1); break;
case AVG15: bsd_loadavg(2); break;
#endif
-#if defined(__sun__) || defined(__linux__) || defined(__FreeBSD__)
+#if defined(__sun__) || defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD__)
case UTIL: util_measure(&rv,&sz); sendv(rv, sz); break;
#endif
case QUIT: free((void*)rv); return 0;
@@ -538,10 +553,60 @@ static void util_measure(unsigned int **result_vec, int *result_sz) {
#endif
/* ---------------------------- *
- * FreeBSD stat functions *
+ * OSX util functions *
* ---------------------------- */
-#if defined(__FreeBSD__)
+#if (defined(__APPLE__) && defined(__MACH__))
+
+static void util_measure(unsigned int **result_vec, int *result_sz) {
+ natural_t no_of_cpus;
+ processor_info_array_t info_array;
+ mach_msg_type_number_t info_count;
+ mach_port_t host_port;
+ kern_return_t error;
+ processor_cpu_load_info_data_t *cpu_load_info = NULL;
+ unsigned int *rv = NULL;
+ int i;
+
+ host_port = mach_host_self();
+ error = host_processor_info(host_port, PROCESSOR_CPU_LOAD_INFO,
+ &no_of_cpus, &info_array, &info_count);
+ if (error != KERN_SUCCESS) {
+ *result_sz = 0;
+ return;
+ }
+ mach_port_deallocate(mach_task_self(), host_port);
+ cpu_load_info = (processor_cpu_load_info_data_t *) info_array;
+
+ rv = *result_vec;
+ rv[0] = no_of_cpus;
+ rv[1] = CU_OSX_VALUES;
+ ++rv; /* first value is number of cpus */
+ ++rv; /* second value is number of entries */
+
+ for (i = 0; i < no_of_cpus; ++i) {
+ rv[0] = CU_CPU_ID; rv[1] = i;
+ rv[2] = CU_USER; rv[3] = cpu_load_info[i].cpu_ticks[CPU_STATE_USER];
+ rv[4] = CU_NICE_USER; rv[5] = cpu_load_info[i].cpu_ticks[CPU_STATE_NICE];
+ rv[6] = CU_KERNEL; rv[7] = cpu_load_info[i].cpu_ticks[CPU_STATE_SYSTEM];
+ rv[8] = CU_IDLE; rv[9] = cpu_load_info[i].cpu_ticks[CPU_STATE_IDLE];
+ rv += CU_OSX_VALUES*2;
+ }
+
+ *result_sz = 2 + 2*CU_OSX_VALUES * no_of_cpus;
+
+ error = vm_deallocate(mach_task_self(), (vm_address_t)info_array,
+ info_count * sizeof(int));
+ if (error != KERN_SUCCESS)
+ *result_sz = 0;
+}
+#endif
+
+/* ---------------------------- *
+ * Utils for OSX and FreeBSD *
+ * ---------------------------- */
+
+#if (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD__)
#define EXIT_WITH(msg) (rich_error(msg, __FILE__, __LINE__))
#define RICH_BUFLEN (213) /* left in error(char*) */
@@ -553,6 +618,25 @@ void rich_error(const char *reason, const char *file, const int line) {
}
#undef RICH_BUFLEN
+void getsysctl(const char *name, void *ptr, size_t len)
+{
+ size_t gotlen = len;
+ if (sysctlbyname(name, ptr, &gotlen, NULL, 0) != 0) {
+ EXIT_WITH("sysctlbyname failed");
+ }
+ if (gotlen != len) {
+ EXIT_WITH("sysctlbyname: unexpected length");
+ }
+}
+#endif
+
+
+/* ---------------------------- *
+ * FreeBSD stat functions *
+ * ---------------------------- */
+
+#if defined(__FreeBSD__)
+
static void util_measure(unsigned int **result_vec, int *result_sz) {
int no_of_cpus;
size_t size_cpu_times;
@@ -588,17 +672,6 @@ static void util_measure(unsigned int **result_vec, int *result_sz) {
*result_sz = 2 + 2*CU_BSD_VALUES * no_of_cpus;
}
-
-void getsysctl(const char *name, void *ptr, size_t len)
-{
- size_t gotlen = len;
- if (sysctlbyname(name, ptr, &gotlen, NULL, 0) != 0) {
- EXIT_WITH("sysctlbyname failed");
- }
- if (gotlen != len) {
- EXIT_WITH("sysctlbyname: unexpected length");
- }
-}
#endif
diff --git a/lib/os_mon/c_src/ferrule.c b/lib/os_mon/c_src/ferrule.c
index b5b62ca155..47f8a21270 100644
--- a/lib/os_mon/c_src/ferrule.c
+++ b/lib/os_mon/c_src/ferrule.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
* %CopyrightEnd%
*/
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <stropts.h>
#include <poll.h>
diff --git a/lib/os_mon/c_src/memsup.c b/lib/os_mon/c_src/memsup.c
index 08a4cc48b6..322e474c3b 100644
--- a/lib/os_mon/c_src/memsup.c
+++ b/lib/os_mon/c_src/memsup.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/memsup.h b/lib/os_mon/c_src/memsup.h
index d86c1f1ff0..49c54f2f77 100644
--- a/lib/os_mon/c_src/memsup.h
+++ b/lib/os_mon/c_src/memsup.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/mod_syslog.c b/lib/os_mon/c_src/mod_syslog.c
index 190e451951..720b52916e 100644
--- a/lib/os_mon/c_src/mod_syslog.c
+++ b/lib/os_mon/c_src/mod_syslog.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
* %CopyrightEnd%
*/
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
diff --git a/lib/os_mon/c_src/nteventlog/elog_format.c b/lib/os_mon/c_src/nteventlog/elog_format.c
index 91fcb542a4..03b95f82df 100644
--- a/lib/os_mon/c_src/nteventlog/elog_format.c
+++ b/lib/os_mon/c_src/nteventlog/elog_format.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_format.h b/lib/os_mon/c_src/nteventlog/elog_format.h
index 18e99267bb..d92e2a81c3 100644
--- a/lib/os_mon/c_src/nteventlog/elog_format.h
+++ b/lib/os_mon/c_src/nteventlog/elog_format.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_global.h b/lib/os_mon/c_src/nteventlog/elog_global.h
index e9c4d56f48..9d86f084b0 100644
--- a/lib/os_mon/c_src/nteventlog/elog_global.h
+++ b/lib/os_mon/c_src/nteventlog/elog_global.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_main.c b/lib/os_mon/c_src/nteventlog/elog_main.c
index 3446369c00..c31e3ef1ff 100644
--- a/lib/os_mon/c_src/nteventlog/elog_main.c
+++ b/lib/os_mon/c_src/nteventlog/elog_main.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_pipe_stdin.c b/lib/os_mon/c_src/nteventlog/elog_pipe_stdin.c
index d15d137c9a..1920268af9 100644
--- a/lib/os_mon/c_src/nteventlog/elog_pipe_stdin.c
+++ b/lib/os_mon/c_src/nteventlog/elog_pipe_stdin.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_pipe_stdin.h b/lib/os_mon/c_src/nteventlog/elog_pipe_stdin.h
index ada990311a..b8f08bb412 100644
--- a/lib/os_mon/c_src/nteventlog/elog_pipe_stdin.h
+++ b/lib/os_mon/c_src/nteventlog/elog_pipe_stdin.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_registry.c b/lib/os_mon/c_src/nteventlog/elog_registry.c
index ff998d2bb2..6de5606c10 100644
--- a/lib/os_mon/c_src/nteventlog/elog_registry.c
+++ b/lib/os_mon/c_src/nteventlog/elog_registry.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_registry.h b/lib/os_mon/c_src/nteventlog/elog_registry.h
index e33afadf79..927109a157 100644
--- a/lib/os_mon/c_src/nteventlog/elog_registry.h
+++ b/lib/os_mon/c_src/nteventlog/elog_registry.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_util.c b/lib/os_mon/c_src/nteventlog/elog_util.c
index d9f8acf2e4..316a39dcf3 100644
--- a/lib/os_mon/c_src/nteventlog/elog_util.c
+++ b/lib/os_mon/c_src/nteventlog/elog_util.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/nteventlog/elog_util.h b/lib/os_mon/c_src/nteventlog/elog_util.h
index ea866180ef..0a8a5ea659 100644
--- a/lib/os_mon/c_src/nteventlog/elog_util.h
+++ b/lib/os_mon/c_src/nteventlog/elog_util.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2009. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/c_src/win32sysinfo.c b/lib/os_mon/c_src/win32sysinfo.c
index d11f937e92..67b3f74910 100644
--- a/lib/os_mon/c_src/win32sysinfo.c
+++ b/lib/os_mon/c_src/win32sysinfo.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1997-2012. All Rights Reserved.
+ * Copyright Ericsson AB 1997-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/doc/src/Makefile b/lib/os_mon/doc/src/Makefile
index 0c5acd9740..91c7ae7bc3 100644
--- a/lib/os_mon/doc/src/Makefile
+++ b/lib/os_mon/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/doc/src/book.xml b/lib/os_mon/doc/src/book.xml
index 7b851a12b4..4bcd913e54 100644
--- a/lib/os_mon/doc/src/book.xml
+++ b/lib/os_mon/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/cpu_sup.xml b/lib/os_mon/doc/src/cpu_sup.xml
index 51e1a4c9d6..bada165a06 100644
--- a/lib/os_mon/doc/src/cpu_sup.xml
+++ b/lib/os_mon/doc/src/cpu_sup.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/disksup.xml b/lib/os_mon/doc/src/disksup.xml
index 88756d46c4..610ef2c907 100644
--- a/lib/os_mon/doc/src/disksup.xml
+++ b/lib/os_mon/doc/src/disksup.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/memsup.xml b/lib/os_mon/doc/src/memsup.xml
index 5fc5e578c6..c669e4670a 100644
--- a/lib/os_mon/doc/src/memsup.xml
+++ b/lib/os_mon/doc/src/memsup.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/notes.xml b/lib/os_mon/doc/src/notes.xml
index 8bb4ab33a1..e6e80b046d 100644
--- a/lib/os_mon/doc/src/notes.xml
+++ b/lib/os_mon/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,40 @@
</header>
<p>This document describes the changes made to the OS_Mon application.</p>
+<section><title>Os_Mon 2.4.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix type specification for cpu_sup:util/1</p>
+ <p>
+ Own Id: OTP-13526 Aux Id: PR-1029 </p>
+ </item>
+ <item>
+ <p>
+ Fix strict compilation on SUN/SPARC</p>
+ <p>
+ Own Id: OTP-13548 Aux Id: PR-1046 </p>
+ </item>
+ <item>
+ <p>
+ Implement cpu_sup:util/0,1 on Mac OSX</p>
+ <p>
+ Own Id: OTP-13597 Aux Id: PR-1049 </p>
+ </item>
+ <item>
+ <p>
+ Fix memsup:get_os_wordsize() on 64-bit FreeBSD and 64-bit
+ Linux PPC</p>
+ <p>
+ Own Id: OTP-13601 Aux Id: PR-1039 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Os_Mon 2.4</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/os_mon/doc/src/nteventlog.xml b/lib/os_mon/doc/src/nteventlog.xml
index fd7950bca7..d32427227c 100644
--- a/lib/os_mon/doc/src/nteventlog.xml
+++ b/lib/os_mon/doc/src/nteventlog.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/os_mon_app.xml b/lib/os_mon/doc/src/os_mon_app.xml
index d70124a995..99492a2021 100644
--- a/lib/os_mon/doc/src/os_mon_app.xml
+++ b/lib/os_mon/doc/src/os_mon_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/os_mon_mib.xml b/lib/os_mon/doc/src/os_mon_mib.xml
index 8e8721fd25..dcf3649876 100644
--- a/lib/os_mon/doc/src/os_mon_mib.xml
+++ b/lib/os_mon/doc/src/os_mon_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/os_sup.xml b/lib/os_mon/doc/src/os_sup.xml
index 0350d4f8b4..d517f387b4 100644
--- a/lib/os_mon/doc/src/os_sup.xml
+++ b/lib/os_mon/doc/src/os_sup.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/part_notes.xml b/lib/os_mon/doc/src/part_notes.xml
index 6cbfbb4961..364178acc3 100644
--- a/lib/os_mon/doc/src/part_notes.xml
+++ b/lib/os_mon/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/doc/src/ref_man.xml b/lib/os_mon/doc/src/ref_man.xml
index 1c6afc5a65..a8f847a8ba 100644
--- a/lib/os_mon/doc/src/ref_man.xml
+++ b/lib/os_mon/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/os_mon/include/memsup.hrl b/lib/os_mon/include/memsup.hrl
index f1e924a3d7..30658f5b23 100644
--- a/lib/os_mon/include/memsup.hrl
+++ b/lib/os_mon/include/memsup.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/mibs/Makefile b/lib/os_mon/mibs/Makefile
index 725dd0f6a7..dbc105ee3d 100644
--- a/lib/os_mon/mibs/Makefile
+++ b/lib/os_mon/mibs/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/mibs/OTP-OS-MON-MIB.mib b/lib/os_mon/mibs/OTP-OS-MON-MIB.mib
index 0bc5d62872..e027e96154 100644
--- a/lib/os_mon/mibs/OTP-OS-MON-MIB.mib
+++ b/lib/os_mon/mibs/OTP-OS-MON-MIB.mib
@@ -1,7 +1,7 @@
--
-- %CopyrightBegin%
--
--- Copyright Ericsson AB 1997-2009. All Rights Reserved.
+-- Copyright Ericsson AB 1997-2016. All Rights Reserved.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/src/Makefile b/lib/os_mon/src/Makefile
index 9aa068cb91..3ff63204c6 100644
--- a/lib/os_mon/src/Makefile
+++ b/lib/os_mon/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/src/cpu_sup.erl b/lib/os_mon/src/cpu_sup.erl
index 72d392b804..e758b63d19 100644
--- a/lib/os_mon/src/cpu_sup.erl
+++ b/lib/os_mon/src/cpu_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -68,7 +68,7 @@
-type util_cpus() :: 'all' | integer() | [integer()].
-type util_state() :: 'user' | 'nice_user' | 'kernel' | 'wait' | 'idle'.
--type util_value() :: {util_state(), float()} | float().
+-type util_value() :: [{util_state(), float()}] | float().
-type util_desc() :: {util_cpus(), util_value(), util_value(), []}.
%%----------------------------------------------------------------------
@@ -162,7 +162,8 @@ handle_call({?util, D, PC}, {Client, _Tag},
#state{os_type = {unix, Flavor}} = State)
when Flavor == sunos;
Flavor == linux;
- Flavor == freebsd ->
+ Flavor == freebsd;
+ Flavor == darwin ->
case measurement_server_call(State#state.server, {?util, D, PC, Client}) of
{error, Reason} ->
{ reply,
@@ -531,11 +532,11 @@ measurement_server_loop(State) ->
measurement_server_loop(State)
end;
{Pid, Request} ->
- try get_uint32_measurement(Request, State) of
- Result -> Pid ! {data, Result}
- catch
- Error -> Pid ! {error, Error}
- end,
+ _ = try get_uint32_measurement(Request, State) of
+ Result -> Pid ! {data, Result}
+ catch
+ Error -> Pid ! {error, Error}
+ end,
measurement_server_loop(State);
{'EXIT', OldPid, _n} when State#internal.port == OldPid ->
{ok, NewPid} = port_server_start_link(),
diff --git a/lib/os_mon/src/disksup.erl b/lib/os_mon/src/disksup.erl
index 23c7ebbe99..492e4814da 100644
--- a/lib/os_mon/src/disksup.erl
+++ b/lib/os_mon/src/disksup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -153,7 +153,7 @@ handle_cast(_Msg, State) ->
handle_info(timeout, State) ->
NewDiskData = check_disk_space(State#state.os, State#state.port,
State#state.threshold),
- timer:send_after(State#state.timeout, timeout),
+ {ok, _Tref} = timer:send_after(State#state.timeout, timeout),
{noreply, State#state{diskdata = NewDiskData}};
handle_info({'EXIT', _Port, Reason}, State) ->
{stop, {port_died, Reason}, State#state{port=not_used}};
diff --git a/lib/os_mon/src/memsup.erl b/lib/os_mon/src/memsup.erl
index e4b7c8c0ce..4729d090f8 100644
--- a/lib/os_mon/src/memsup.erl
+++ b/lib/os_mon/src/memsup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -408,18 +408,18 @@ handle_info({collected_sys, {Alloc,Total}}, State) ->
%% Last, if this was a periodic check, start a timer for the next
%% one. New timeout = interval-time spent collecting,
- case lists:member(reg, State#state.pending) of
- true ->
- Time = case State2#state.timeout - TimeSpent of
- MS when MS<0 ->
- 0;
- MS ->
- MS
- end,
- erlang:send_after(Time, self(), time_to_collect);
- false ->
- ignore
- end,
+ _ = case lists:member(reg, State#state.pending) of
+ true ->
+ Time = case State2#state.timeout - TimeSpent of
+ MS when MS<0 ->
+ 0;
+ MS ->
+ MS
+ end,
+ erlang:send_after(Time, self(), time_to_collect);
+ false ->
+ ignore
+ end,
{noreply, State2#state{wd_timer=undefined, pending=[]}};
handle_info({'EXIT', Pid, normal}, State) when is_pid(Pid) ->
%% Temporary pid terminating when job is done
@@ -448,17 +448,17 @@ handle_info(reg_collection_timeout, State) ->
%% If it is a periodic check which has timed out, start a timer for
%% the next one
%% New timeout = interval-helper timeout
- case lists:member(reg, State#state.pending) of
- true ->
- Time =
- case State#state.timeout-State#state.helper_timeout of
- MS when MS<0 -> 0;
- MS -> MS
- end,
- erlang:send_after(Time, self(), time_to_collect);
- false ->
- ignore
- end,
+ _ = case lists:member(reg, State#state.pending) of
+ true ->
+ Time =
+ case State#state.timeout-State#state.helper_timeout of
+ MS when MS<0 -> 0;
+ MS -> MS
+ end,
+ erlang:send_after(Time, self(), time_to_collect);
+ false ->
+ ignore
+ end,
{noreply, State#state{wd_timer=undefined, pending=[]}};
handle_info({'EXIT', Pid, cancel}, State) when is_pid(Pid) ->
%% Temporary pid terminating as ordered
@@ -469,7 +469,7 @@ handle_info({collected_ext_sys, SysMemUsage}, State) ->
%% Cancel watchdog timer (and as a security mearure,
%% also flush any ext_collection_timeout message)
- erlang:cancel_timer(State#state.ext_wd_timer),
+ ok = erlang:cancel_timer(State#state.ext_wd_timer, [{async,true}]),
flush(ext_collection_timeout),
%% Send the reply to all waiting clients, preserving time order
@@ -535,7 +535,7 @@ code_change(Vsn, PrevState, "1.8") ->
undefined ->
ignore;
TimerRef1 ->
- erlang:cancel_timer(TimerRef1),
+ ok = erlang:cancel_timer(TimerRef1, [{async,true}]),
SysOnly = PrevState#state.sys_only,
MemUsage = dummy_reply(get_memory_data, SysOnly),
SysMemUsage1 = dummy_reply(get_system_memory_data),
@@ -545,7 +545,7 @@ code_change(Vsn, PrevState, "1.8") ->
undefined ->
ignore;
TimerRef2 ->
- erlang:cancel_timer(TimerRef2),
+ ok = erlang:cancel_timer(TimerRef2, [{async,true}]),
SysMemUsage2 = dummy_reply(get_system_memory_data),
reply(PrevState#state.pending, undef, SysMemUsage2)
end,
@@ -589,7 +589,7 @@ code_change(Vsn, PrevState, "1.8") ->
undefined ->
ignore;
TimerRef1 ->
- erlang:cancel_timer(TimerRef1),
+ ok = erlang:cancel_timer(TimerRef1, [{async,true}]),
MemUsage = dummy_reply(get_memory_data, SysOnly),
Pending2 = lists:map(fun(From) -> {reg,From} end,
Pending),
@@ -599,7 +599,7 @@ code_change(Vsn, PrevState, "1.8") ->
undefined ->
ignore;
TimerRef2 ->
- erlang:cancel_timer(TimerRef2),
+ ok = erlang:cancel_timer(TimerRef2, [{async,true}]),
SysMemUsage = dummy_reply(get_system_memory_data),
ExtPending2 = lists:map(fun(From) -> {ext,From} end,
ExtPending),
@@ -699,6 +699,8 @@ get_os_wordsize_with_uname() ->
case String of
"x86_64" -> 64;
"sparc64" -> 64;
+ "amd64" -> 64;
+ "ppc64" -> 64;
_ -> 32
end.
diff --git a/lib/os_mon/src/nteventlog.erl b/lib/os_mon/src/nteventlog.erl
index 8726f369ee..4b02d3ff7e 100644
--- a/lib/os_mon/src/nteventlog.erl
+++ b/lib/os_mon/src/nteventlog.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/src/os_mon.app.src b/lib/os_mon/src/os_mon.app.src
index 6ef7beda1f..8be94f65d4 100644
--- a/lib/os_mon/src/os_mon.app.src
+++ b/lib/os_mon/src/os_mon.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/src/os_mon.appup.src b/lib/os_mon/src/os_mon.appup.src
index 108b0bb5b8..660cb7daaa 100644
--- a/lib/os_mon/src/os_mon.appup.src
+++ b/lib/os_mon/src/os_mon.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/src/os_mon.erl b/lib/os_mon/src/os_mon.erl
index 0fef0ecece..8abaf1c9b6 100644
--- a/lib/os_mon/src/os_mon.erl
+++ b/lib/os_mon/src/os_mon.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/src/os_mon_mib.erl b/lib/os_mon/src/os_mon_mib.erl
index ef6f81a5d7..9b5d2fbba6 100644
--- a/lib/os_mon/src/os_mon_mib.erl
+++ b/lib/os_mon/src/os_mon_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/src/os_mon_sysinfo.erl b/lib/os_mon/src/os_mon_sysinfo.erl
index c554b08bef..e87e597420 100644
--- a/lib/os_mon/src/os_mon_sysinfo.erl
+++ b/lib/os_mon/src/os_mon_sysinfo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/src/os_sup.erl b/lib/os_mon/src/os_sup.erl
index 2a75698ab0..71c9137588 100644
--- a/lib/os_mon/src/os_sup.erl
+++ b/lib/os_mon/src/os_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/test/Makefile b/lib/os_mon/test/Makefile
index cdfc13a4c1..6ac67e6bae 100644
--- a/lib/os_mon/test/Makefile
+++ b/lib/os_mon/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -55,8 +55,7 @@ RELSYSDIR = $(RELEASE_PATH)/os_mon_test
# FLAGS
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include \
- -I$(ERL_TOP)/lib/snmp/include
+ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/snmp/include
# ----------------------------------------------------
# Targets
diff --git a/lib/os_mon/test/cpu_sup_SUITE.erl b/lib/os_mon/test/cpu_sup_SUITE.erl
index e96b54d3fe..7122d23503 100644
--- a/lib/os_mon/test/cpu_sup_SUITE.erl
+++ b/lib/os_mon/test/cpu_sup_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,10 +18,10 @@
%% %CopyrightEnd%
%%
-module(cpu_sup_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
+-export([all/0, suite/0]).
-export([init_per_suite/1, end_per_suite/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -31,186 +31,165 @@
-export([port/1]).
-export([terminate/1, unavailable/1, restart/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
init_per_suite(Config) when is_list(Config) ->
- ?line ok = application:start(os_mon),
+ ok = application:start(os_mon),
Config.
end_per_suite(Config) when is_list(Config) ->
- ?line ok = application:stop(os_mon),
+ ok = application:stop(os_mon),
Config.
init_per_testcase(unavailable, Config) ->
terminate(Config),
init_per_testcase(dummy, Config);
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
+ Config.
end_per_testcase(unavailable, Config) ->
restart(Config),
end_per_testcase(dummy, Config);
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
case test_server:os_type() of
- {unix, sunos} ->
- [load_api, util_api, util_values, port, unavailable];
- {unix, linux} ->
- [load_api, util_api, util_values, port, unavailable];
- {unix, freebsd} ->
- [load_api, util_api, util_values, port, unavailable];
- {unix, _OSname} -> [load_api];
- _OS -> [unavailable]
+ {unix, sunos} ->
+ [load_api, util_api, util_values, port, unavailable];
+ {unix, linux} ->
+ [load_api, util_api, util_values, port, unavailable];
+ {unix, freebsd} ->
+ [load_api, util_api, util_values, port, unavailable];
+ {unix, darwin} ->
+ [load_api, util_api, util_values, port, unavailable];
+ {unix, _OSname} -> [load_api];
+ _OS -> [unavailable]
end.
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-load_api(suite) ->
- [];
-load_api(doc) ->
- ["Test of load API functions"];
+%% Test of load API functions
load_api(Config) when is_list(Config) ->
%% nprocs()
- ?line N = cpu_sup:nprocs(),
- ?line true = is_integer(N),
- ?line true = N>0,
- ?line true = N<1000000,
+ N = cpu_sup:nprocs(),
+ true = is_integer(N),
+ true = N>0,
+ true = N<1000000,
%% avg1()
- ?line Load1 = cpu_sup:avg1(),
- ?line true = is_integer(Load1),
- ?line true = Load1>0,
+ Load1 = cpu_sup:avg1(),
+ true = is_integer(Load1),
+ true = Load1>0,
%% avg5()
- ?line Load5 = cpu_sup:avg5(),
- ?line true = is_integer(Load5),
- ?line true = Load5>0,
+ Load5 = cpu_sup:avg5(),
+ true = is_integer(Load5),
+ true = Load5>0,
%% avg15()
- ?line Load15 = cpu_sup:avg15(),
- ?line true = is_integer(Load15),
- ?line true = Load15>0,
+ Load15 = cpu_sup:avg15(),
+ true = is_integer(Load15),
+ true = Load15>0,
ok.
-util_api(suite) ->
- [];
-util_api(doc) ->
- ["Test of utilization API functions"];
+%% Test of utilization API functions
util_api(Config) when is_list(Config) ->
%% Some useful funs when testing util/1
BusyP = fun({user, _Share}) -> true;
- ({nice_user, _Share}) -> true;
- ({kernel, _Share}) -> true;
- ({hard_irq, _Share}) -> true;
- ({soft_irq, _Share}) -> true;
- (_) -> false
- end,
+ ({nice_user, _Share}) -> true;
+ ({kernel, _Share}) -> true;
+ ({hard_irq, _Share}) -> true;
+ ({soft_irq, _Share}) -> true;
+ (_) -> false
+ end,
NonBusyP = fun({wait, _Share}) -> true;
- ({idle, _Share}) -> true;
- ({steal, _Share}) -> true;
- (_) -> false
- end,
+ ({idle, _Share}) -> true;
+ ({steal, _Share}) -> true;
+ (_) -> false
+ end,
Sum = fun({_Tag, X}, Acc) -> Acc+X end,
%% util()
- ?line Util1 = cpu_sup:util(),
- ?line true = is_number(Util1),
- ?line true = Util1>0,
- ?line Util2 = cpu_sup:util(),
- ?line true = is_number(Util2),
- ?line true = Util2>0,
+ Util1 = cpu_sup:util(),
+ true = is_number(Util1),
+ true = Util1>0,
+ Util2 = cpu_sup:util(),
+ true = is_number(Util2),
+ true = Util2>0,
%% util([])
- ?line {all, Busy1, NonBusy1, []} = cpu_sup:util([]),
- ?line 100.00 = Busy1 + NonBusy1,
+ {all, Busy1, NonBusy1, []} = cpu_sup:util([]),
+ 100.00 = Busy1 + NonBusy1,
%% util([detailed])
- ?line {Cpus2, Busy2, NonBusy2, []} = cpu_sup:util([detailed]),
- ?line true = lists:all(fun(X) -> is_integer(X) end, Cpus2),
- ?line true = lists:all(BusyP, Busy2),
- ?line true = lists:all(NonBusyP, NonBusy2),
- ?line 100.00 = lists:foldl(Sum,0,Busy2)+lists:foldl(Sum,0,NonBusy2),
+ {Cpus2, Busy2, NonBusy2, []} = cpu_sup:util([detailed]),
+ true = lists:all(fun(X) -> is_integer(X) end, Cpus2),
+ true = lists:all(BusyP, Busy2),
+ true = lists:all(NonBusyP, NonBusy2),
+ 100.00 = lists:foldl(Sum,0,Busy2)+lists:foldl(Sum,0,NonBusy2),
%% util([per_cpu])
- ?line [{Cpu3, Busy3, NonBusy3, []}|_] = cpu_sup:util([per_cpu]),
- ?line true = is_integer(Cpu3),
- ?line 100.00 = Busy3 + NonBusy3,
+ [{Cpu3, Busy3, NonBusy3, []}|_] = cpu_sup:util([per_cpu]),
+ true = is_integer(Cpu3),
+ 100.00 = Busy3 + NonBusy3,
%% util([detailed, per_cpu])
- ?line [{Cpu4, Busy4, NonBusy4, []}|_] =
- cpu_sup:util([detailed, per_cpu]),
- ?line true = is_integer(Cpu4),
- ?line true = lists:all(BusyP, Busy2),
- ?line true = lists:all(NonBusyP, NonBusy2),
- ?line 100.00 = lists:foldl(Sum,0,Busy4)+lists:foldl(Sum,0,NonBusy4),
+ [{Cpu4, Busy4, NonBusy4, []}|_] =
+ cpu_sup:util([detailed, per_cpu]),
+ true = is_integer(Cpu4),
+ true = lists:all(BusyP, Busy2),
+ true = lists:all(NonBusyP, NonBusy2),
+ 100.00 = lists:foldl(Sum,0,Busy4)+lists:foldl(Sum,0,NonBusy4),
%% bad util/1 calls
- ?line {'EXIT',{badarg,_}} = (catch cpu_sup:util(detailed)),
- ?line {'EXIT',{badarg,_}} = (catch cpu_sup:util([detialed])),
+ {'EXIT',{badarg,_}} = (catch cpu_sup:util(detailed)),
+ {'EXIT',{badarg,_}} = (catch cpu_sup:util([detialed])),
ok.
-define(SPIN_TIME, 1000).
-util_values(suite) ->
- [];
-util_values(doc) ->
- ["Test utilization values"];
+%% Test utilization values
util_values(Config) when is_list(Config) ->
Tester = self(),
Ref = make_ref(),
Loop = fun (L) -> L(L) end,
Spinner = fun () ->
- Looper = spawn_link(fun () -> Loop(Loop) end),
- receive after ?SPIN_TIME -> ok end,
- unlink(Looper),
- exit(Looper, kill),
- Tester ! Ref
- end,
+ Looper = spawn_link(fun () -> Loop(Loop) end),
+ receive after ?SPIN_TIME -> ok end,
+ unlink(Looper),
+ exit(Looper, kill),
+ Tester ! Ref
+ end,
- ?line cpu_sup:util(),
+ cpu_sup:util(),
- ?line spawn_link(Spinner),
- ?line receive Ref -> ok end,
- ?line HighUtil1 = cpu_sup:util(),
+ spawn_link(Spinner),
+ receive Ref -> ok end,
+ HighUtil1 = cpu_sup:util(),
- ?line receive after ?SPIN_TIME -> ok end,
- ?line LowUtil1 = cpu_sup:util(),
+ receive after ?SPIN_TIME -> ok end,
+ LowUtil1 = cpu_sup:util(),
- ?line spawn_link(Spinner),
- ?line receive Ref -> ok end,
- ?line HighUtil2 = cpu_sup:util(),
+ spawn_link(Spinner),
+ receive Ref -> ok end,
+ HighUtil2 = cpu_sup:util(),
- ?line receive after ?SPIN_TIME -> ok end,
- ?line LowUtil2 = cpu_sup:util(),
+ receive after ?SPIN_TIME -> ok end,
+ LowUtil2 = cpu_sup:util(),
Utils = [{high1,HighUtil1}, {low1,LowUtil1},
- {high2,HighUtil2}, {low2,LowUtil2}],
- ?t:format("Utils: ~p~n", [Utils]),
+ {high2,HighUtil2}, {low2,LowUtil2}],
+ io:format("Utils: ~p~n", [Utils]),
- ?line false = LowUtil1 > HighUtil1,
- ?line false = LowUtil1 > HighUtil2,
- ?line false = LowUtil2 > HighUtil1,
- ?line false = LowUtil2 > HighUtil2,
+ false = LowUtil1 > HighUtil1,
+ false = LowUtil1 > HighUtil2,
+ false = LowUtil2 > HighUtil1,
+ false = LowUtil2 > HighUtil2,
ok.
@@ -218,76 +197,66 @@ util_values(Config) when is_list(Config) ->
% Outdated
% The portprogram is now restarted if killed, and not by os_mon...
-port(suite) ->
- [];
-port(doc) ->
- ["Test that cpu_sup handles a terminating port program"];
+%% Test that cpu_sup handles a terminating port program
port(Config) when is_list(Config) ->
case cpu_sup_os_pid() of
- {ok, PidStr} ->
- %% Monitor cpu_sup
- ?line MonRef = erlang:monitor(process, cpu_sup),
- ?line N1 = cpu_sup:nprocs(),
- ?line true = N1>0,
-
- %% Kill the port program
- case os:cmd("kill -9 " ++ PidStr) of
- [] ->
- %% cpu_sup should not terminate
- receive
- {'DOWN', MonRef, _, _, Reason} ->
- ?line ?t:fail({unexpected_exit_reason, Reason})
- after 3000 ->
- ok
- end,
-
- %% Give cpu_sup time to restart cpu_sup port
- ?t:sleep(?t:seconds(3)),
- ?line N2 = cpu_sup:nprocs(),
- ?line true = N2>0,
-
- erlang:demonitor(MonRef),
- ok;
-
- Line ->
- erlang:demonitor(MonRef),
- {skip, {not_killed, Line}}
- end;
- _ ->
- {skip, os_pid_not_found }
+ {ok, PidStr} ->
+ %% Monitor cpu_sup
+ MonRef = erlang:monitor(process, cpu_sup),
+ N1 = cpu_sup:nprocs(),
+ true = N1>0,
+
+ %% Kill the port program
+ case os:cmd("kill -9 " ++ PidStr) of
+ [] ->
+ %% cpu_sup should not terminate
+ receive
+ {'DOWN', MonRef, _, _, Reason} ->
+ ct:fail({unexpected_exit_reason, Reason})
+ after 3000 ->
+ ok
+ end,
+
+ %% Give cpu_sup time to restart cpu_sup port
+ ct:sleep({seconds, 3}),
+ N2 = cpu_sup:nprocs(),
+ true = N2>0,
+
+ erlang:demonitor(MonRef),
+ ok;
+
+ Line ->
+ erlang:demonitor(MonRef),
+ {skip, {not_killed, Line}}
+ end;
+ _ ->
+ {skip, os_pid_not_found }
end.
-terminate(suite) ->
- [];
terminate(Config) when is_list(Config) ->
ok = application:set_env(os_mon, start_cpu_sup, false),
_ = supervisor:terminate_child(os_mon_sup, cpu_sup),
ok.
-unavailable(suite) ->
- [];
-unavailable(doc) ->
- ["Test correct behaviour when service is unavailable"];
+%% Test correct behaviour when service is unavailable
unavailable(Config) when is_list(Config) ->
%% Make sure all API functions return their dummy values
- ?line 0 = cpu_sup:nprocs(),
- ?line 0 = cpu_sup:avg1(),
- ?line 0 = cpu_sup:avg5(),
- ?line 0 = cpu_sup:avg15(),
- ?line 0 = cpu_sup:util(),
- ?line {all,0,0,[]} = cpu_sup:util([]),
- ?line {all,0,0,[]} = cpu_sup:util([detailed]),
- ?line {all,0,0,[]} = cpu_sup:util([per_cpu]),
- ?line {all,0,0,[]} = cpu_sup:util([detailed,per_cpu]),
+ 0 = cpu_sup:nprocs(),
+ 0 = cpu_sup:avg1(),
+ 0 = cpu_sup:avg5(),
+ 0 = cpu_sup:avg15(),
+ 0 = cpu_sup:util(),
+ {all,0,0,[]} = cpu_sup:util([]),
+ {all,0,0,[]} = cpu_sup:util([detailed]),
+ {all,0,0,[]} = cpu_sup:util([per_cpu]),
+ {all,0,0,[]} = cpu_sup:util([detailed,per_cpu]),
ok.
-restart(suite) ->
- [];
restart(Config) when is_list(Config) ->
- ?line ok = application:set_env(os_mon, start_cpu_sup, true),
- ?line {ok, _Pid} = supervisor:restart_child(os_mon_sup, cpu_sup),
+ ok = application:set_env(os_mon, start_cpu_sup, true),
+ supervisor:restart_child(os_mon_sup, cpu_sup),
ok.
%% Aux
@@ -295,6 +264,6 @@ restart(Config) when is_list(Config) ->
cpu_sup_os_pid() ->
Str = os:cmd("ps -e | grep '[c]pu_sup'"),
case io_lib:fread("~s", Str) of
- {ok, [Pid], _Rest} -> {ok, Pid};
- _ -> {error, pid_not_found}
+ {ok, [Pid], _Rest} -> {ok, Pid};
+ _ -> {error, pid_not_found}
end.
diff --git a/lib/os_mon/test/disksup_SUITE.erl b/lib/os_mon/test/disksup_SUITE.erl
index e41fc73ab2..ad61985014 100644
--- a/lib/os_mon/test/disksup_SUITE.erl
+++ b/lib/os_mon/test/disksup_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,10 +18,10 @@
%% %CopyrightEnd%
%%
-module(disksup_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
+-export([all/0, suite/0]).
-export([init_per_suite/1, end_per_suite/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -32,9 +32,6 @@
-export([otp_5910/1]).
-export([posix_only/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
init_per_suite(Config) when is_list(Config) ->
ok = application:start(os_mon),
Config.
@@ -47,19 +44,18 @@ init_per_testcase(unavailable, Config) ->
terminate(Config),
init_per_testcase(dummy, Config);
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog,Dog} | Config].
+ Config.
end_per_testcase(TC, Config) when TC =:= unavailable;
TC =:= posix_only ->
restart(Config),
end_per_testcase(dummy, Config);
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
Bugs = [otp_5910],
@@ -70,18 +66,7 @@ all() ->
_OS -> [unavailable]
end.
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-api(suite) -> [];
-api(doc) -> ["Test of API functions"];
+%% Test of API functions
api(Config) when is_list(Config) ->
%% get_disk_data()
@@ -110,8 +95,7 @@ api(Config) when is_list(Config) ->
ok.
-config(suite) -> [];
-config(doc) -> ["Test configuration"];
+%% Test configuration
config(Config) when is_list(Config) ->
%% Change configuration parameters and make sure change is reflected
@@ -147,8 +131,8 @@ config(Config) when is_list(Config) ->
%% changes too much during its course, or if there are timing problems
%% with the alarm_handler receiving the alarms too late
%%----------------------------------------------------------------------
-alarm(suite) -> [];
-alarm(doc) -> ["Test that alarms are set and cleared"];
+
+%% Test that alarms are set and cleared
alarm(Config) when is_list(Config) ->
%% Find out how many disks exceed the threshold
@@ -162,7 +146,7 @@ alarm(Config) when is_list(Config) ->
true;
true ->
dump_info(),
- ?t:fail({bad_alarms, Threshold1, Data1, Alarms1})
+ ct:fail({bad_alarms, Threshold1, Data1, Alarms1})
end,
%% Try to find a disk with space usage below Threshold1,
@@ -187,7 +171,7 @@ alarm(Config) when is_list(Config) ->
true;
true ->
dump_info(),
- ?t:fail({bad_alarms, Threshold2, Data2, Alarms2})
+ ct:fail({bad_alarms, Threshold2, Data2, Alarms2})
end;
false ->
ignore
@@ -215,7 +199,7 @@ alarm(Config) when is_list(Config) ->
ok;
true ->
dump_info(),
- ?t:fail({bad_alarms, Threshold3, Data3, Alarms3})
+ ct:fail({bad_alarms, Threshold3, Data3, Alarms3})
end;
100 ->
ignore
@@ -271,9 +255,7 @@ until(Fun, [H|T]) ->
end;
until(_Fun, []) -> false.
-port(suite) -> [];
-port(doc) ->
- ["Test that disksup handles a terminating port program"];
+%% Test that disksup handles a terminating port program
port(Config) when is_list(Config) ->
Str = os:cmd("ps -ef | grep '[d]isksup'"),
case io_lib:fread("~s ~s", Str) of
@@ -293,14 +275,14 @@ port(Config) when is_list(Config) ->
{'DOWN', MonRef, _, _, {port_died, _Reason}} ->
ok;
{'DOWN', MonRef, _, _, Reason} ->
- ?t:fail({unexpected_exit_reason, Reason})
+ ct:fail({unexpected_exit_reason, Reason})
after
3000 ->
- ?t:fail({still_alive, Str})
+ ct:fail({still_alive, Str})
end,
%% Give os_mon_sup time to restart disksup
- ?t:sleep(?t:seconds(3)),
+ ct:sleep({seconds,3}),
[{_Disk2,Kbyte2,_Cap2}|_] = disksup:get_disk_data(),
true = Kbyte2>0,
@@ -314,15 +296,12 @@ port(Config) when is_list(Config) ->
{skip, {os_pid_not_found, Str}}
end.
-terminate(suite) -> [];
terminate(Config) when is_list(Config) ->
ok = application:set_env(os_mon, start_disksup, false),
ok = supervisor:terminate_child(os_mon_sup, disksup),
ok.
-unavailable(suite) -> [];
-unavailable(doc) ->
- ["Test correct behaviour when service is unavailable"];
+%% Test correct behaviour when service is unavailable
unavailable(Config) when is_list(Config) ->
%% Make sure all API functions return their dummy values
@@ -333,18 +312,16 @@ unavailable(Config) when is_list(Config) ->
ok = disksup:set_almost_full_threshold(0.9),
ok.
-restart(suite) ->
- [];
restart(Config) when is_list(Config) ->
ok = application:set_env(os_mon, start_disksup, true),
ok = application:set_env(os_mon, disksup_posix_only, false),
- {ok, _Pid} = supervisor:restart_child(os_mon_sup, disksup),
- ok.
+ case supervisor:restart_child(os_mon_sup, disksup) of
+ {ok, _Pid} -> ok;
+ {error, running} -> ok
+ end.
-otp_5910(suite) -> [];
-otp_5910(doc) ->
- ["Test that alarms are cleared if disksup crashes or "
- "if OS_Mon is stopped"];
+%% Test that alarms are cleared if disksup crashes or
+%% if OS_Mon is stopped
otp_5910(Config) when is_list(Config) ->
%% Make sure disksup sets at least one alarm
@@ -365,12 +342,12 @@ otp_5910(Config) when is_list(Config) ->
Alarms = get_alarms(),
if
Over==0 ->
- ?t:fail({threshold_too_low, Data2, Threshold});
+ ct:fail({threshold_too_low, Data2, Threshold});
Over==length(Alarms) ->
ok;
true ->
dump_info(),
- ?t:fail({bad_alarms, Threshold, Data2, Alarms})
+ ct:fail({bad_alarms, Threshold, Data2, Alarms})
end,
%% Kill disksup
@@ -378,23 +355,23 @@ otp_5910(Config) when is_list(Config) ->
%% Wait a little to make sure disksup has been restarted,
%% then make sure the alarms are set once, but not twice
- ?t:sleep(?t:seconds(1)),
+ ct:sleep({seconds,1}),
Data3 = disksup:get_disk_data(),
Alarms2 = get_alarms(),
if
length(Alarms2)==length(Alarms) -> ok;
true ->
dump_info(),
- ?t:fail({bad_alarms,Threshold,Data3,Alarms,Alarms2})
+ ct:fail({bad_alarms,Threshold,Data3,Alarms,Alarms2})
end,
%% Stop OS_Mon and make sure all disksup alarms are cleared
ok = application:stop(os_mon),
- ?t:sleep(?t:seconds(1)),
+ ct:sleep({seconds,1}),
Alarms3 = get_alarms(),
case get_alarms() of
[] -> ok;
- _ -> ?t:fail({alarms_not_cleared, Alarms3})
+ _ -> ct:fail({alarms_not_cleared, Alarms3})
end,
%% Reset threshold and restart OS_Mon
@@ -403,8 +380,7 @@ otp_5910(Config) when is_list(Config) ->
ok = application:start(os_mon),
ok.
-posix_only(suite) -> [];
-posix_only(doc) -> ["Test disksup_posix_only option"];
+%% Test disksup_posix_only option
posix_only(Config) when is_list(Config) ->
%% Set option and restart disksup
ok = application:set_env(os_mon, disksup_posix_only, true),
diff --git a/lib/os_mon/test/memsup_SUITE.erl b/lib/os_mon/test/memsup_SUITE.erl
index 8ab61e9581..e40ed574e7 100644
--- a/lib/os_mon/test/memsup_SUITE.erl
+++ b/lib/os_mon/test/memsup_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,10 +18,10 @@
%% %CopyrightEnd%
%%
-module(memsup_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
+-export([all/0, suite/0]).
-export([init_per_suite/1, end_per_suite/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -30,384 +30,368 @@
-export([config/1, timeout/1, unavailable/1, port/1]).
-export([otp_5910/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
init_per_suite(Config) when is_list(Config) ->
- ?line ok = application:start(os_mon),
+ ok = application:start(os_mon),
Config.
end_per_suite(Config) when is_list(Config) ->
- ?line ok = application:stop(os_mon),
+ ok = application:stop(os_mon),
Config.
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog,Dog} | Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
Config.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+end_per_testcase(_Case, _Config) ->
+ ok.
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
All = case test_server:os_type() of
- {unix, sunos} ->
- [api, alarm1, alarm2, process, config, timeout,
- unavailable, port];
- {unix, linux} ->
- [api, alarm1, alarm2, process, timeout];
- _OS -> [api, alarm1, alarm2, process]
- end,
+ {unix, sunos} ->
+ [api, alarm1, alarm2, process, config, timeout,
+ unavailable, port];
+ {unix, linux} ->
+ [api, alarm1, alarm2, process, timeout];
+ _OS -> [api, alarm1, alarm2, process]
+ end,
Bugs = [otp_5910],
All ++ Bugs.
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-api(suite) ->
- [];
-api(doc) ->
- ["Test of API functions"];
+%% Test of API functions
api(Config) when is_list(Config) ->
%% get_memory_data()
- ?line RegMemData = memsup:get_memory_data(),
+ RegMemData = memsup:get_memory_data(),
case RegMemData of
- {TotMem, AllBytes, {Pid, PidBytes}} when is_integer(TotMem),
- is_integer(AllBytes),
- is_pid(Pid),
- is_integer(PidBytes) ->
- ok;
- {0, 0, _WorstPid} ->
- ?line ?t:fail(first_data_collection_failed);
- _ ->
- ?line ?t:fail({bad_return, RegMemData})
+ {TotMem, AllBytes, {Pid, PidBytes}} when is_integer(TotMem),
+ is_integer(AllBytes),
+ is_pid(Pid),
+ is_integer(PidBytes) ->
+ ok;
+ {0, 0, _WorstPid} ->
+ ct:fail(first_data_collection_failed);
+ _ ->
+ ct:fail({bad_return, RegMemData})
end,
%% get_system_memory_data()
- ?line ExtMemData = memsup:get_system_memory_data(),
- Tags = [ total_memory,
- free_memory,
- system_total_memory,
- largest_free,
- number_of_free,
- free_swap,
- total_swap,
- cached_memory,
- buffered_memory,
- shared_memory],
-
- ?line true = lists:all(fun({Tag,Value}) when is_atom(Tag),
- is_integer(Value) ->
- lists:member(Tag, Tags);
- (_) ->
- false
- end,
- ExtMemData),
+ ExtMemData = memsup:get_system_memory_data(),
+ Tags = [total_memory,
+ free_memory,
+ system_total_memory,
+ largest_free,
+ number_of_free,
+ free_swap,
+ total_swap,
+ cached_memory,
+ buffered_memory,
+ shared_memory],
+
+ true = lists:all(fun({Tag,Value}) when is_atom(Tag),
+ is_integer(Value) ->
+ lists:member(Tag, Tags);
+ (_) ->
+ false
+ end, ExtMemData),
%% get_os_wordsize()
- ?line ok = case memsup:get_os_wordsize() of
- 32 -> ok;
- 64 -> ok;
- unsupported_os -> ok;
- _ -> error
- end,
+ ok = case memsup:get_os_wordsize() of
+ 32 ->
+ 32 = 8*erlang:system_info({wordsize,external}),
+ ok;
+ 64 ->
+ % No reliable test here
+ ok;
+ unsupported_os ->
+ ok;
+ _ ->
+ error
+ end,
%% get_check_interval()
- ?line 60000 = memsup:get_check_interval(),
+ 60000 = memsup:get_check_interval(),
%% set_check_interval(Minutes)
- ?line ok = memsup:set_check_interval(2),
- ?line 120000 = memsup:get_check_interval(),
- ?line {'EXIT',{badarg,_}} =
- (catch memsup:set_check_interval(0.2)),
- ?line 120000 = memsup:get_check_interval(),
- ?line ok = memsup:set_check_interval(1),
+ ok = memsup:set_check_interval(2),
+ 120000 = memsup:get_check_interval(),
+ {'EXIT',{badarg,_}} =
+ (catch memsup:set_check_interval(0.2)),
+ 120000 = memsup:get_check_interval(),
+ ok = memsup:set_check_interval(1),
%% get_procmem_high_watermark()
- ?line 5 = memsup:get_procmem_high_watermark(),
+ 5 = memsup:get_procmem_high_watermark(),
%% set_procmem_high_watermark()
- ?line ok = memsup:set_procmem_high_watermark(0.1),
- ?line 10 = memsup:get_procmem_high_watermark(),
- ?line {'EXIT',{badarg,_}} =
- (catch memsup:set_procmem_high_watermark(-0.1)),
- ?line 10 = memsup:get_procmem_high_watermark(),
- ?line ok = memsup:set_procmem_high_watermark(0.05),
+ ok = memsup:set_procmem_high_watermark(0.1),
+ 10 = memsup:get_procmem_high_watermark(),
+ {'EXIT',{badarg,_}} =
+ (catch memsup:set_procmem_high_watermark(-0.1)),
+ 10 = memsup:get_procmem_high_watermark(),
+ ok = memsup:set_procmem_high_watermark(0.05),
%% get_sysmem_high_watermark()
- ?line 80 = memsup:get_sysmem_high_watermark(),
+ 80 = memsup:get_sysmem_high_watermark(),
%% set_sysmem_high_watermark()
- ?line ok = memsup:set_sysmem_high_watermark(0.9),
- ?line 90 = memsup:get_sysmem_high_watermark(),
- ?line {'EXIT',{badarg,_}} =
- (catch memsup:set_sysmem_high_watermark(-0.9)),
- ?line 90 = memsup:get_sysmem_high_watermark(),
- ?line ok = memsup:set_sysmem_high_watermark(0.8),
+ ok = memsup:set_sysmem_high_watermark(0.9),
+ 90 = memsup:get_sysmem_high_watermark(),
+ {'EXIT',{badarg,_}} =
+ (catch memsup:set_sysmem_high_watermark(-0.9)),
+ 90 = memsup:get_sysmem_high_watermark(),
+ ok = memsup:set_sysmem_high_watermark(0.8),
%% get|set_helper_timeout
- ?line 30 = memsup:get_helper_timeout(),
- ?line ok = memsup:set_helper_timeout(29),
- ?line 29 = memsup:get_helper_timeout(),
- ?line {'EXIT',{badarg,_}} = (catch memsup:set_helper_timeout(31.0)),
- ?line 29 = memsup:get_helper_timeout(),
+ 30 = memsup:get_helper_timeout(),
+ ok = memsup:set_helper_timeout(29),
+ 29 = memsup:get_helper_timeout(),
+ {'EXIT',{badarg,_}} = (catch memsup:set_helper_timeout(31.0)),
+ 29 = memsup:get_helper_timeout(),
ok.
%%----------------------------------------------------------------------
%% NOTE: The test case is a bit weak as it will fail if the memory
%% usage changes too much during its course.
%%----------------------------------------------------------------------
-alarm1(suite) ->
- [];
-alarm1(doc) ->
- ["Test alarms when memsup_system_only==false"];
+
+%% Test alarms when memsup_system_only==false
alarm1(Config) when is_list(Config) ->
%% If system memory usage is too high, the testcase cannot
%% be run correctly
- ?line {Total, Alloc, {_Pid,_PidAlloc}} = memsup:get_memory_data(),
+ {Total, Alloc, {_Pid,_PidAlloc}} = memsup:get_memory_data(),
io:format("alarm1: Total: ~p, Alloc: ~p~n", [Total, Alloc]),
- ?line SysUsage = Alloc/Total,
+ SysUsage = Alloc/Total,
if
- SysUsage>0.99 ->
- {skip, sys_mem_too_high};
- true ->
- alarm1(Config, SysUsage)
+ SysUsage > 0.99 ->
+ {skip, sys_mem_too_high};
+ true ->
+ alarm1(Config, SysUsage)
end.
alarm1(_Config, SysUsage) ->
%% Set a long memory check interval, we will force memory checks
%% instead
- ?line ok = memsup:set_check_interval(60),
+ ok = memsup:set_check_interval(60),
%% Check thresholds
- ?line SysThreshold = (memsup:get_sysmem_high_watermark()/100),
- ?line ProcThreshold = (memsup:get_procmem_high_watermark()/100),
+ SysThreshold = (memsup:get_sysmem_high_watermark()/100),
+ ProcThreshold = (memsup:get_procmem_high_watermark()/100),
%% Check if a system alarm already should be set or not
SysP = if
- SysUsage>SysThreshold -> true;
- SysUsage=<SysThreshold -> false
- end,
+ SysUsage>SysThreshold -> true;
+ SysUsage=<SysThreshold -> false
+ end,
%% If system memory is higher than threshold, make sure the system
%% alarm is set. Otherwise, make sure it is not set
case alarm_set(system_memory_high_watermark) of
- {true, []} when SysP ->
- ok;
- false when not SysP ->
- ok;
- _ ->
- ?line ?t:fail({sys_alarm, SysUsage, SysThreshold})
+ {true, []} when SysP ->
+ ok;
+ false when not SysP ->
+ ok;
+ _ ->
+ ct:fail({sys_alarm, SysUsage, SysThreshold})
end,
%% Lower/raise the threshold to clear/set the alarm
NewSysThreshold = if
- SysP ->
- Value = 1.1*SysUsage,
- if
- Value > 0.99 -> 0.99;
- true -> Value
- end;
- not SysP -> 0.9*SysUsage
- end,
+ SysP ->
+ Value = 1.1*SysUsage,
+ if
+ Value > 0.99 -> 0.99;
+ true -> Value
+ end;
+ not SysP -> 0.9*SysUsage
+ end,
- ?line ok = memsup:set_sysmem_high_watermark(NewSysThreshold),
+ ok = memsup:set_sysmem_high_watermark(NewSysThreshold),
%% Initiate and wait for a new data collection
- ?line ok = force_collection(),
+ ok = force_collection(),
%% Make sure the alarm is cleared/set
- ?t:sleep(?t:seconds(5)),
+ ct:sleep({seconds,5}),
case alarm_set(system_memory_high_watermark) of
- {true, []} when not SysP ->
- ok;
- false when SysP ->
- ok;
- _ ->
- ?line ?t:fail({sys_alarm, SysUsage, NewSysThreshold})
+ {true, []} when not SysP ->
+ ok;
+ false when SysP ->
+ ok;
+ _ ->
+ ct:fail({sys_alarm, SysUsage, NewSysThreshold})
end,
%% Reset the threshold to set/clear the alarm again
- ?line ok = memsup:set_sysmem_high_watermark(SysThreshold),
- ?line ok = force_collection(),
- ?t:sleep(?t:seconds(1)),
+ ok = memsup:set_sysmem_high_watermark(SysThreshold),
+ ok = force_collection(),
+ ct:sleep({seconds,1}),
case alarm_set(system_memory_high_watermark) of
- {true, []} when SysP ->
- ok;
- false when not SysP ->
- ok;
- _ ->
- ?line ?t:fail({sys_alarm, SysUsage, SysThreshold})
+ {true, []} when SysP ->
+ ok;
+ false when not SysP ->
+ ok;
+ _ ->
+ ct:fail({sys_alarm, SysUsage, SysThreshold})
end,
%% Check memory usage
- ?line {Total2, _, {WorstPid, PidAlloc}} = memsup:get_memory_data(),
+ {Total2, _, {WorstPid, PidAlloc}} = memsup:get_memory_data(),
%% Check if a process alarm already should be set or not
PidUsage = PidAlloc/Total2,
ProcP = if
- PidUsage>ProcThreshold -> true;
- PidUsage=<ProcThreshold -> false
- end,
+ PidUsage>ProcThreshold -> true;
+ PidUsage=<ProcThreshold -> false
+ end,
%% Make sure the process alarm is set/not set accordingly
case alarm_set(process_memory_high_watermark) of
- {true, WorstPid} when ProcP ->
- ok;
- false when not ProcP ->
- ok;
- {true, BadPid1} when ProcP ->
- ?line ?t:fail({proc_alarm, WorstPid, BadPid1});
- _ ->
- ?line ?t:fail({proc_alarm, PidUsage, ProcThreshold})
+ {true, WorstPid} when ProcP ->
+ ok;
+ false when not ProcP ->
+ ok;
+ {true, BadPid1} when ProcP ->
+ ct:fail({proc_alarm, WorstPid, BadPid1});
+ _ ->
+ ct:fail({proc_alarm, PidUsage, ProcThreshold})
end,
%% Lower/raise the threshold to clear/set the alarm
NewProcThreshold = if
- ProcP -> 1.1*PidUsage;
- not ProcP -> 0.9*PidUsage
- end,
- ?line ok = memsup:set_procmem_high_watermark(NewProcThreshold),
- ?line ok = force_collection(),
- ?t:sleep(?t:seconds(1)),
+ ProcP -> 1.1*PidUsage;
+ not ProcP -> 0.9*PidUsage
+ end,
+ ok = memsup:set_procmem_high_watermark(NewProcThreshold),
+ ok = force_collection(),
+ ct:sleep({seconds,1}),
case alarm_set(process_memory_high_watermark) of
- {true, WorstPid} when not ProcP ->
- ok;
- false when ProcP ->
- ok;
- {true, BadPid2} when not ProcP ->
- ?line test_server:fail({proc_alarm, WorstPid, BadPid2});
- _ ->
- ?line ?t:fail({proc_alarm, PidUsage, ProcThreshold})
+ {true, WorstPid} when not ProcP ->
+ ok;
+ false when ProcP ->
+ ok;
+ {true, BadPid2} when not ProcP ->
+ ct:fail({proc_alarm, WorstPid, BadPid2});
+ _ ->
+ ct:fail({proc_alarm, PidUsage, ProcThreshold})
end,
%% Reset the threshold to clear/set the alarm
- ?line ok = memsup:set_procmem_high_watermark(ProcThreshold),
- ?line ok = force_collection(),
- ?t:sleep(?t:seconds(1)),
+ ok = memsup:set_procmem_high_watermark(ProcThreshold),
+ ok = force_collection(),
+ ct:sleep({seconds,1}),
case alarm_set(process_memory_high_watermark) of
- {true, WorstPid} when ProcP ->
- ok;
- false when not ProcP ->
- ok;
- {true, BadPid3} when ProcP ->
- ?line test_server:fail({proc_alarm, WorstPid, BadPid3});
- _ ->
- ?line ?t:fail({proc_alarm, PidUsage, ProcThreshold})
+ {true, WorstPid} when ProcP ->
+ ok;
+ false when not ProcP ->
+ ok;
+ {true, BadPid3} when ProcP ->
+ ct:fail({proc_alarm, WorstPid, BadPid3});
+ _ ->
+ ct:fail({proc_alarm, PidUsage, ProcThreshold})
end,
%% Reset memory check interval
- ?line ok = memsup:set_check_interval(1),
+ ok = memsup:set_check_interval(1),
ok.
-alarm2(suite) ->
- [];
-alarm2(doc) ->
- ["Test alarms when memsup_system_only==true"];
+%% Test alarms when memsup_system_only==true
alarm2(Config) when is_list(Config) ->
%% If system memory usage is too high, the testcase cannot
%% be run correctly
- ?line {Total, Alloc, {_Pid,_PidAlloc}} = memsup:get_memory_data(),
- ?line SysUsage = Alloc/Total,
+ {Total, Alloc, {_Pid,_PidAlloc}} = memsup:get_memory_data(),
+ SysUsage = Alloc/Total,
if
- SysUsage>0.99 ->
- {skip, sys_mem_too_high};
- true ->
- alarm2(Config, SysUsage)
+ SysUsage>0.99 ->
+ {skip, sys_mem_too_high};
+ true ->
+ alarm2(Config, SysUsage)
end.
alarm2(_Config, _SysUsage) ->
%% Change memsup_system_only and restart memsup
- ?line ok = application:set_env(os_mon, memsup_system_only, true),
- ?line ok = supervisor:terminate_child(os_mon_sup, memsup),
- ?line {ok, _Memsup1} = supervisor:restart_child(os_mon_sup, memsup),
+ ok = application:set_env(os_mon, memsup_system_only, true),
+ ok = supervisor:terminate_child(os_mon_sup, memsup),
+ {ok, _Memsup1} = supervisor:restart_child(os_mon_sup, memsup),
%% Set a long memory check interval, we will force memory checks
%% instead
- ?line ok = memsup:set_check_interval(60),
+ ok = memsup:set_check_interval(60),
%% Check data and thresholds
- ?line {Total, Alloc, undefined} = memsup:get_memory_data(),
- ?line SysThreshold = (memsup:get_sysmem_high_watermark()/100),
- ?line true = is_integer(memsup:get_procmem_high_watermark()),
+ {Total, Alloc, undefined} = memsup:get_memory_data(),
+ SysThreshold = (memsup:get_sysmem_high_watermark()/100),
+ true = is_integer(memsup:get_procmem_high_watermark()),
%% Check if a system alarm already should be set or not
- ?line SysUsage = Alloc/Total,
+ SysUsage = Alloc/Total,
SysP = if
- SysUsage>SysThreshold -> true;
- SysUsage=<SysThreshold -> false
- end,
+ SysUsage>SysThreshold -> true;
+ SysUsage=<SysThreshold -> false
+ end,
%% If system memory is higher than threshold, make sure the system
%% alarm is set. Otherwise, make sure it is not set
case alarm_set(system_memory_high_watermark) of
- {true, []} when SysP ->
- ok;
- false when not SysP ->
- ok;
- _ ->
- ?line ?t:fail({sys_alarm, SysUsage, SysThreshold})
+ {true, []} when SysP ->
+ ok;
+ false when not SysP ->
+ ok;
+ _ ->
+ ct:fail({sys_alarm, SysUsage, SysThreshold})
end,
%% Lower/raise the threshold to clear/set the alarm
NewSysThreshold = if
- SysP ->
- Value = 1.1*SysUsage,
- if
- Value > 0.99 -> 0.99;
- true -> Value
- end;
- not SysP -> 0.9*SysUsage
- end,
+ SysP ->
+ Value = 1.1*SysUsage,
+ if
+ Value > 0.99 -> 0.99;
+ true -> Value
+ end;
+ not SysP -> 0.9*SysUsage
+ end,
- ?line ok = memsup:set_sysmem_high_watermark(NewSysThreshold),
+ ok = memsup:set_sysmem_high_watermark(NewSysThreshold),
%% Initiate and wait for a new data collection
- ?line ok = force_collection(),
+ ok = force_collection(),
%% Make sure the alarm is cleared/set
- ?t:sleep(?t:seconds(1)),
+ ct:sleep({seconds,1}),
case alarm_set(system_memory_high_watermark) of
- {true, []} when not SysP ->
- ok;
- false when SysP ->
- ok;
- _ ->
- ?line ?t:fail({sys_alarm, SysUsage, NewSysThreshold})
+ {true, []} when not SysP ->
+ ok;
+ false when SysP ->
+ ok;
+ _ ->
+ ct:fail({sys_alarm, SysUsage, NewSysThreshold})
end,
%% Reset the threshold to set/clear the alarm again
- ?line ok = memsup:set_sysmem_high_watermark(SysThreshold),
- ?line ok = force_collection(),
- ?t:sleep(?t:seconds(1)),
+ ok = memsup:set_sysmem_high_watermark(SysThreshold),
+ ok = force_collection(),
+ ct:sleep({seconds,1}),
case alarm_set(system_memory_high_watermark) of
- {true, []} when SysP ->
- ok;
- false when not SysP ->
- ok;
- _ ->
- ?line ?t:fail({sys_alarm, SysUsage, SysThreshold})
+ {true, []} when SysP ->
+ ok;
+ false when not SysP ->
+ ok;
+ _ ->
+ ct:fail({sys_alarm, SysUsage, SysThreshold})
end,
%% Reset memsup_system_only and restart memsup
%% (memory check interval is then automatically reset)
- ?line ok = application:set_env(os_mon, memsup_system_only, false),
- ?line ok = supervisor:terminate_child(os_mon_sup, memsup),
- ?line {ok, _Memsup2} = supervisor:restart_child(os_mon_sup, memsup),
+ ok = application:set_env(os_mon, memsup_system_only, false),
+ ok = supervisor:terminate_child(os_mon_sup, memsup),
+ {ok, _Memsup2} = supervisor:restart_child(os_mon_sup, memsup),
ok.
@@ -420,39 +404,36 @@ alarm_set(Alarm, [_|T]) ->
alarm_set(_Alarm, []) ->
false.
-process(suite) ->
- [];
-process(doc) ->
- ["Make sure memsup discovers a process grown very large"];
+%% Make sure memsup discovers a process grown very large
process(Config) when is_list(Config) ->
%% Set a long memory check interval, we will force memory checks
%% instead
- ?line ok = memsup:set_check_interval(60),
+ ok = memsup:set_check_interval(60),
%% Collect data
MemData = memsup:get_memory_data(),
io:format("process: memsup:get_memory_data() = ~p~n", [MemData]),
- ?line {_Total,_Free,{_,Bytes}} = MemData,
+ {_Total,_Free,{_,Bytes}} = MemData,
%% Start a new process larger than Worst
- ?line WorsePid = spawn(fun() -> new_hog(Bytes) end),
- ?t:sleep(?t:seconds(1)),
+ WorsePid = spawn(fun() -> new_hog(Bytes) end),
+ ct:sleep({seconds,1}),
%% Initiate and wait for a new data collection
- ?line ok = force_collection(),
+ ok = force_collection(),
%% Check that get_memory_data() returns updated result
- ?line case memsup:get_memory_data() of
- {_, _, {WorsePid, _MoreBytes}} ->
- ok;
- {_, _, BadWorst} ->
- ?line ?t:fail({worst_pid, BadWorst})
- end,
+ case memsup:get_memory_data() of
+ {_, _, {WorsePid, _MoreBytes}} ->
+ ok;
+ {_, _, BadWorst} ->
+ ct:fail({worst_pid, BadWorst})
+ end,
%% Reset memory check interval
- ?line exit(WorsePid, done),
- ?line ok = memsup:set_check_interval(1),
+ exit(WorsePid, done),
+ ok = memsup:set_check_interval(1),
ok.
new_hog(Bytes) ->
@@ -463,110 +444,101 @@ new_hog(Bytes) ->
new_hog_1(List) ->
receive
- _Any -> exit(List)
+ _Any -> exit(List)
end.
-config(suite) ->
- [];
-config(doc) ->
- ["Test configuration"];
+%% Test configuration
config(Config) when is_list(Config) ->
%% Change configuration parameters and make sure change is reflected
%% when memsup is restarted
- ?line ok = application:set_env(os_mon, memory_check_interval, 2),
- ?line ok =
- application:set_env(os_mon, system_memory_high_watermark, 0.9),
- ?line ok =
- application:set_env(os_mon, process_memory_high_watermark, 0.1),
- ?line ok = application:set_env(os_mon, memsup_helper_timeout, 35),
- ?line ok = application:set_env(os_mon, memsup_system_only, true),
-
- ?line ok = supervisor:terminate_child(os_mon_sup, memsup),
- ?line {ok, _Child1} = supervisor:restart_child(os_mon_sup, memsup),
-
- ?line 120000 = memsup:get_check_interval(),
- ?line 90 = memsup:get_sysmem_high_watermark(),
- ?line 10 = memsup:get_procmem_high_watermark(),
- ?line 35 = memsup:get_helper_timeout(),
+ ok = application:set_env(os_mon, memory_check_interval, 2),
+ ok =
+ application:set_env(os_mon, system_memory_high_watermark, 0.9),
+ ok =
+ application:set_env(os_mon, process_memory_high_watermark, 0.1),
+ ok = application:set_env(os_mon, memsup_helper_timeout, 35),
+ ok = application:set_env(os_mon, memsup_system_only, true),
+
+ ok = supervisor:terminate_child(os_mon_sup, memsup),
+ {ok, _Child1} = supervisor:restart_child(os_mon_sup, memsup),
+
+ 120000 = memsup:get_check_interval(),
+ 90 = memsup:get_sysmem_high_watermark(),
+ 10 = memsup:get_procmem_high_watermark(),
+ 35 = memsup:get_helper_timeout(),
%% Also try this with bad parameter values, should be ignored
- ?line ok = application:set_env(os_mon, memory_check_interval, 0.2),
- ?line ok =
- application:set_env(os_mon, system_memory_high_watermark, -0.9),
- ?line ok =
- application:set_env(os_mon, process_memory_high_watermark,-0.1),
- ?line ok = application:set_env(os_mon, memsup_helper_timeout, 0.35),
- ?line ok = application:set_env(os_mon, memsup_system_only, arne),
-
- ?line ok = supervisor:terminate_child(os_mon_sup, memsup),
- ?line {ok, _Child2} = supervisor:restart_child(os_mon_sup, memsup),
-
- ?line 60000 = memsup:get_check_interval(),
- ?line 80 = memsup:get_sysmem_high_watermark(),
- ?line 5 = memsup:get_procmem_high_watermark(),
- ?line 30 = memsup:get_helper_timeout(),
+ ok = application:set_env(os_mon, memory_check_interval, 0.2),
+ ok =
+ application:set_env(os_mon, system_memory_high_watermark, -0.9),
+ ok =
+ application:set_env(os_mon, process_memory_high_watermark,-0.1),
+ ok = application:set_env(os_mon, memsup_helper_timeout, 0.35),
+ ok = application:set_env(os_mon, memsup_system_only, arne),
+
+ ok = supervisor:terminate_child(os_mon_sup, memsup),
+ {ok, _Child2} = supervisor:restart_child(os_mon_sup, memsup),
+
+ 60000 = memsup:get_check_interval(),
+ 80 = memsup:get_sysmem_high_watermark(),
+ 5 = memsup:get_procmem_high_watermark(),
+ 30 = memsup:get_helper_timeout(),
%% Reset configuration parameters
- ?line ok = application:set_env(os_mon, memory_check_interval, 1),
- ?line ok =
- application:set_env(os_mon, system_memory_high_watermark, 0.8),
- ?line ok =
- application:set_env(os_mon, process_memory_high_watermark,0.05),
- ?line ok = application:set_env(os_mon, memsup_helper_timeout, 30),
- ?line ok = application:set_env(os_mon, memsup_system_only, false),
+ ok = application:set_env(os_mon, memory_check_interval, 1),
+ ok =
+ application:set_env(os_mon, system_memory_high_watermark, 0.8),
+ ok =
+ application:set_env(os_mon, process_memory_high_watermark,0.05),
+ ok = application:set_env(os_mon, memsup_helper_timeout, 30),
+ ok = application:set_env(os_mon, memsup_system_only, false),
ok.
-unavailable(suite) ->
- [];
-unavailable(doc) ->
- ["Test correct behaviour when service is unavailable"];
+%% Test correct behaviour when service is unavailable
unavailable(Config) when is_list(Config) ->
%% Close memsup
- ?line ok = application:set_env(os_mon, start_memsup, false),
- ?line ok = supervisor:terminate_child(os_mon_sup, memsup),
+ ok = application:set_env(os_mon, start_memsup, false),
+ ok = supervisor:terminate_child(os_mon_sup, memsup),
%% Make sure all API functions return their dummy values
- ?line {0,0,{_Pid,0}} = memsup:get_memory_data(),
- ?line ok = application:set_env(os_mon, memsup_system_only, true),
- ?line {0,0,undefined} = memsup:get_memory_data(),
- ?line ok = application:set_env(os_mon, memsup_system_only, false),
- ?line [] = memsup:get_system_memory_data(),
- ?line 0 = memsup:get_os_wordsize(),
- ?line 60000 = memsup:get_check_interval(),
- ?line ok = memsup:set_check_interval(2),
- ?line 5 = memsup:get_procmem_high_watermark(),
- ?line ok = memsup:set_procmem_high_watermark(0.10),
- ?line 80 = memsup:get_sysmem_high_watermark(),
- ?line ok = memsup:set_sysmem_high_watermark(0.90),
- ?line 30 = memsup:get_helper_timeout(),
- ?line ok = memsup:set_helper_timeout(35),
+ {0,0,{_Pid,0}} = memsup:get_memory_data(),
+ ok = application:set_env(os_mon, memsup_system_only, true),
+ {0,0,undefined} = memsup:get_memory_data(),
+ ok = application:set_env(os_mon, memsup_system_only, false),
+ [] = memsup:get_system_memory_data(),
+ 0 = memsup:get_os_wordsize(),
+ 60000 = memsup:get_check_interval(),
+ ok = memsup:set_check_interval(2),
+ 5 = memsup:get_procmem_high_watermark(),
+ ok = memsup:set_procmem_high_watermark(0.10),
+ 80 = memsup:get_sysmem_high_watermark(),
+ ok = memsup:set_sysmem_high_watermark(0.90),
+ 30 = memsup:get_helper_timeout(),
+ ok = memsup:set_helper_timeout(35),
%% Start memsup again,
- ?line ok = application:set_env(os_mon, start_memsup, true),
- ?line {ok, _Child} = supervisor:restart_child(os_mon_sup, memsup),
+ ok = application:set_env(os_mon, start_memsup, true),
+ {ok, _Child} = supervisor:restart_child(os_mon_sup, memsup),
ok.
-timeout(suite) ->
- [];
-timeout(doc) ->
- ["Test stability of memsup when data collection times out"];
+%% Test stability of memsup when data collection times out
timeout(Config) when is_list(Config) ->
%% Set a long memory check interval and memsup_helper timeout,
%% we will force memory checks instead and fake timeouts
- ?line ok = memsup:set_check_interval(60),
- ?line ok = memsup:set_helper_timeout(3600),
+ ok = memsup:set_check_interval(60),
+ ok = memsup:set_helper_timeout(3600),
%% Provoke a timeout during memory collection
- ?line memsup ! time_to_collect,
- ?line memsup ! reg_collection_timeout,
+ memsup ! time_to_collect,
+ memsup ! reg_collection_timeout,
%% Not much we can check though, except that memsup is still running
- ?line {_,_,_} = memsup:get_memory_data(),
+ {_,_,_} = memsup:get_memory_data(),
%% Provoke a timeout during extensive memory collection
%% We fake a gen_server:call/2 to be able to send a timeout message
@@ -574,140 +546,133 @@ timeout(Config) when is_list(Config) ->
%% Linux should be handled the same way as solaris.
-% TimeoutMsg = case ?t:os_type() of
-% {unix, sunos} -> ext_collection_timeout;
-% {unix, linux} -> reg_collection_timeout
-% end,
+ % TimeoutMsg = case ?t:os_type() of
+ % {unix, sunos} -> ext_collection_timeout;
+ % {unix, linux} -> reg_collection_timeout
+ % end,
TimeoutMsg = ext_collection_timeout,
- ?line Pid = whereis(memsup),
- ?line Mref = erlang:monitor(process, Pid),
- ?line Pid ! {'$gen_call', {self(), Mref}, get_system_memory_data},
- ?line Pid ! TimeoutMsg,
+ Pid = whereis(memsup),
+ Mref = erlang:monitor(process, Pid),
+ Pid ! {'$gen_call', {self(), Mref}, get_system_memory_data},
+ Pid ! TimeoutMsg,
receive
- {Mref, []} ->
- erlang:demonitor(Mref),
- ?line ok;
- {Mref, Res} ->
- erlang:demonitor(Mref),
- ?line ?t:fail({unexpected_result, Res});
- {'DOWN', Mref, _, _, _} ->
- ?line ?t:fail(no_result)
+ {Mref, []} ->
+ erlang:demonitor(Mref),
+ ok;
+ {Mref, Res} ->
+ erlang:demonitor(Mref),
+ ct:fail({unexpected_result, Res});
+ {'DOWN', Mref, _, _, _} ->
+ ct:fail(no_result)
end,
%% Reset memory check interval and memsup_helper timeout
- ?line ok = memsup:set_check_interval(1),
- ?line ok = memsup:set_helper_timeout(30),
- ?line memsup ! time_to_collect,
+ ok = memsup:set_check_interval(1),
+ ok = memsup:set_helper_timeout(30),
+ memsup ! time_to_collect,
- ?line [_|_] = memsup:get_system_memory_data(),
+ [_|_] = memsup:get_system_memory_data(),
ok.
-port(suite) ->
- [];
-port(doc) ->
- ["Test that memsup handles a terminating port program"];
+%% Test that memsup handles a terminating port program
port(Config) when is_list(Config) ->
- ?line Str = os:cmd("ps -e | grep '[m]emsup'"),
+ Str = os:cmd("ps -e | grep '[m]emsup'"),
case io_lib:fread("~s", Str) of
- {ok, [Pid], _Rest} ->
-
- %% Monitor memsup
- ?line MonRef = erlang:monitor(process, memsup),
- ?line {Total1,_Alloc1,_Worst1} = memsup:get_memory_data(),
- ?line true = Total1>0,
-
- %% Kill the port program
- case os:cmd("kill -9 " ++ Pid) of
- [] ->
-
- %% memsup should now terminate
- receive
- {'DOWN', MonRef, _, _, {port_died, _Reason}} ->
- ok;
- {'DOWN', MonRef, _, _, Reason} ->
- ?line ?t:fail({unexpected_exit_reason, Reason})
- after
- 3000 ->
- ?line ?t:fail(still_alive)
- end,
-
- %% Give os_mon_sup time to restart memsup
- ?t:sleep(?t:seconds(3)),
- ?line {Total2,_Alloc2,_Worst2} =
- memsup:get_memory_data(),
- ?line true = Total2>0,
-
- ok;
-
- Line ->
- erlang:demonitor(MonRef),
- {skip, {not_killed, Line}}
- end;
- _ ->
- {skip, {os_pid_not_found, Str}}
+ {ok, [Pid], _Rest} ->
+
+ %% Monitor memsup
+ MonRef = erlang:monitor(process, memsup),
+ {Total1,_Alloc1,_Worst1} = memsup:get_memory_data(),
+ true = Total1>0,
+
+ %% Kill the port program
+ case os:cmd("kill -9 " ++ Pid) of
+ [] ->
+
+ %% memsup should now terminate
+ receive
+ {'DOWN', MonRef, _, _, {port_died, _Reason}} ->
+ ok;
+ {'DOWN', MonRef, _, _, Reason} ->
+ ct:fail({unexpected_exit_reason, Reason})
+ after
+ 3000 ->
+ ct:fail(still_alive)
+ end,
+
+ %% Give os_mon_sup time to restart memsup
+ ct:sleep({seconds,3}),
+ {Total2,_Alloc2,_Worst2} =
+ memsup:get_memory_data(),
+ true = Total2>0,
+
+ ok;
+
+ Line ->
+ erlang:demonitor(MonRef),
+ {skip, {not_killed, Line}}
+ end;
+ _ ->
+ {skip, {os_pid_not_found, Str}}
end.
-otp_5910(suite) ->
- [];
-otp_5910(doc) ->
- ["Test that alarms are cleared and not set twice"];
+%% Test that alarms are cleared and not set twice
otp_5910(Config) when is_list(Config) ->
Alarms =
- [system_memory_high_watermark, process_memory_high_watermark],
+ [system_memory_high_watermark, process_memory_high_watermark],
%% Make sure memsup sets both alarms
- ?line ok = application:set_env(os_mon, memory_check_interval, 60),
- ?line ok = memsup:set_check_interval(60),
- ?line SysThreshold = (memsup:get_sysmem_high_watermark()/100),
- ?line ProcThreshold = (memsup:get_procmem_high_watermark()/100),
+ ok = application:set_env(os_mon, memory_check_interval, 60),
+ ok = memsup:set_check_interval(60),
+ SysThreshold = (memsup:get_sysmem_high_watermark()/100),
+ ProcThreshold = (memsup:get_procmem_high_watermark()/100),
MemData = memsup:get_memory_data(),
io:format("otp_5910: memsup:get_memory_data() = ~p~n", [MemData]),
- ?line {Total, Alloc, {_Pid, _Bytes}} = MemData,
- ?line Pid = spawn_opt(fun() ->
- receive
- die -> ok
- end
- end, [{min_heap_size, 1000}]),
+ {Total, Alloc, {_Pid, _Bytes}} = MemData,
+ Pid = spawn_opt(fun() ->
+ receive
+ die -> ok
+ end
+ end, [{min_heap_size, 1000}]),
%% Create a process guaranteed to live, be constant and
%% break memsup process limit
- ?line {memory, Bytes} = erlang:process_info(Pid,memory),
- ?line SysUsage = Alloc/Total,
- ?line ProcUsage = Bytes/Total,
+ {memory, Bytes} = erlang:process_info(Pid,memory),
+ SysUsage = Alloc/Total,
+ ProcUsage = Bytes/Total,
if
- SysUsage>SysThreshold ->
- ok;
- SysUsage=<SysThreshold ->
- ?line ok = application:set_env(os_mon,
- sys_mem_high_watermark,
- 0.5 * SysUsage),
- ?line ok = memsup:set_sysmem_high_watermark(0.5 * SysUsage)
+ SysUsage>SysThreshold ->
+ ok;
+ SysUsage=<SysThreshold ->
+ ok = application:set_env(os_mon,
+ sys_mem_high_watermark,
+ 0.5 * SysUsage),
+ ok = memsup:set_sysmem_high_watermark(0.5 * SysUsage)
end,
if
- ProcUsage>ProcThreshold ->
- ok;
- ProcUsage=<ProcThreshold ->
- ?line ok = application:set_env(os_mon,
- proc_mem_high_watermark,
- 0.5 * ProcUsage),
- ?line ok = memsup:set_procmem_high_watermark(0.5 *ProcUsage)
+ ProcUsage>ProcThreshold ->
+ ok;
+ ProcUsage=<ProcThreshold ->
+ ok = application:set_env(os_mon,
+ proc_mem_high_watermark,
+ 0.5 * ProcUsage),
+ ok = memsup:set_procmem_high_watermark(0.5 *ProcUsage)
end,
- ?line ok = force_collection(),
- ?t:sleep(?t:seconds(1)),
+ ok = force_collection(),
+ ct:sleep({seconds,1}),
lists:foreach(fun(AlarmId) ->
- case alarm_set(AlarmId) of
- {true, _} -> ok;
- false ->
- ?line ?t:fail({alarm_not_set,
- AlarmId})
- end
- end,
- Alarms),
+ case alarm_set(AlarmId) of
+ {true, _} -> ok;
+ false ->
+ ct:fail({alarm_not_set, AlarmId})
+ end
+ end,
+ Alarms),
%% Kill guaranteed process...
Pid ! die,
@@ -715,42 +680,41 @@ otp_5910(Config) when is_list(Config) ->
exit(whereis(memsup), faked_memsup_crash),
%% Wait a little to make sure memsup has been restarted,
%% then make sure the alarms are set once, but not twice
- ?t:sleep(?t:seconds(1)),
- ?line MemUsage = memsup:get_memory_data(),
+ ct:sleep({seconds,1}),
+ MemUsage = memsup:get_memory_data(),
SetAlarms = alarm_handler:get_alarms(),
case lists:foldl(fun(system_memory_high_watermark, {S, P}) ->
- {S+1, P};
- (process_memory_high_watermark, {S, P}) ->
- {S, P+1};
- (_AlarmId, Acc0) ->
- Acc0
- end,
- {0, 0},
- SetAlarms) of
- {0, 0} ->
- ok;
- _ ->
- ?line ?t:fail({bad_number_of_alarms, SetAlarms, MemUsage})
+ {S+1, P};
+ (process_memory_high_watermark, {S, P}) ->
+ {S, P+1};
+ (_AlarmId, Acc0) ->
+ Acc0
+ end,
+ {0, 0},
+ SetAlarms) of
+ {0, 0} ->
+ ok;
+ _ ->
+ ct:fail({bad_number_of_alarms, SetAlarms, MemUsage})
end,
%% Stop OS_Mon and make sure all memsup alarms are cleared
- ?line ok = application:stop(os_mon),
- ?t:sleep(?t:seconds(1)),
+ ok = application:stop(os_mon),
+ ct:sleep({seconds,1}),
lists:foreach(fun(AlarmId) ->
- case alarm_set(AlarmId) of
- false -> ok;
- {true, _} ->
- ?line ?t:fail({alarm_is_set, AlarmId})
- end
- end,
- Alarms),
+ case alarm_set(AlarmId) of
+ false -> ok;
+ {true, _} ->
+ ct:fail({alarm_is_set, AlarmId})
+ end
+ end,
+ Alarms),
%% Reset configuration and restart OS_Mon
- ?line ok = application:set_env(os_mon,memory_check_interval,1),
- ?line ok = application:set_env(os_mon,sys_mem_high_watermark,0.8),
- ?line ok = application:set_env(os_mon,proc_mem_high_watermark,0.05),
- ?line ok = application:start(os_mon),
-
+ ok = application:set_env(os_mon,memory_check_interval,1),
+ ok = application:set_env(os_mon,sys_mem_high_watermark,0.8),
+ ok = application:set_env(os_mon,proc_mem_high_watermark,0.05),
+ ok = application:start(os_mon),
ok.
%%----------------------------------------------------------------------
@@ -765,30 +729,30 @@ force_collection() ->
force_collection(TimerRef) ->
receive
- {trace, _Pid, 'receive', {collected_sys, _Sys}} ->
- erlang:cancel_timer(TimerRef),
- erlang:trace(whereis(memsup), false, ['receive']),
- flush(),
- ok;
- {trace, _Pid, 'receive', reg_collection_timeout} ->
- erlang:cancel_timer(TimerRef),
- erlang:trace(whereis(memsup), false, ['receive']),
- flush(),
- collection_timeout;
- timout ->
- erlang:trace(whereis(memsup), false, ['receive']),
- flush(),
- timeout;
- _Msg ->
- force_collection(TimerRef)
+ {trace, _Pid, 'receive', {collected_sys, _Sys}} ->
+ erlang:cancel_timer(TimerRef),
+ erlang:trace(whereis(memsup), false, ['receive']),
+ flush(),
+ ok;
+ {trace, _Pid, 'receive', reg_collection_timeout} ->
+ erlang:cancel_timer(TimerRef),
+ erlang:trace(whereis(memsup), false, ['receive']),
+ flush(),
+ collection_timeout;
+ timout ->
+ erlang:trace(whereis(memsup), false, ['receive']),
+ flush(),
+ timeout;
+ _Msg ->
+ force_collection(TimerRef)
end.
flush() ->
receive
- {trace, _, _, _} ->
- flush();
- timeout ->
- flush()
+ {trace, _, _, _} ->
+ flush();
+ timeout ->
+ flush()
after 0 ->
- ok
+ ok
end.
diff --git a/lib/os_mon/test/os_mon_SUITE.erl b/lib/os_mon/test/os_mon_SUITE.erl
index 5c484ef2a6..c373b5d851 100644
--- a/lib/os_mon/test/os_mon_SUITE.erl
+++ b/lib/os_mon/test/os_mon_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,95 +18,68 @@
%% %CopyrightEnd%
%%
-module(os_mon_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0, init_per_suite/1, end_per_suite/1]).
%% Test cases
-export([app_file/1, appup_file/1, config/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- Dog = test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
case test_server:os_type() of
- {unix, sunos} -> [app_file, appup_file, config];
- _OS -> [app_file, appup_file]
+ {unix, sunos} -> [app_file, appup_file, config];
+ _OS -> [app_file, appup_file]
end.
-groups() ->
- [].
-
init_per_suite(Config) ->
Config.
end_per_suite(_Config) ->
+ application:stop(os_mon),
ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-app_file(suite) ->
- [];
-app_file(doc) ->
- ["Testing .app file"];
+%% Testing .app file
app_file(Config) when is_list(Config) ->
- ?line ok = test_server:app_test(os_mon),
+ ok = test_server:app_test(os_mon),
ok.
appup_file(Config) when is_list(Config) ->
ok = test_server:appup_test(os_mon).
-config(suite) ->
- [];
-config(doc) ->
- ["Test OS_Mon configuration"];
+%% Test OS_Mon configuration
config(Config) when is_list(Config) ->
IsReg = fun(Name) -> is_pid(whereis(Name)) end,
IsNotReg = fun(Name) -> undefined == whereis(Name) end,
- ?line ok = application:start(os_mon),
- ?line true = lists:all(IsReg, [cpu_sup, disksup, memsup]),
- ?line ok = application:stop(os_mon),
-
- ?line ok = application:set_env(os_mon, start_cpu_sup, false),
- ?line ok = application:start(os_mon),
- ?line true = lists:all(IsReg, [disksup, memsup]),
- ?line true = IsNotReg(cpu_sup),
- ?line ok = application:stop(os_mon),
- ?line ok = application:set_env(os_mon, start_cpu_sup, true),
-
- ?line ok = application:set_env(os_mon, start_disksup, false),
- ?line ok = application:start(os_mon),
- ?line true = lists:all(IsReg, [cpu_sup, memsup]),
- ?line true = IsNotReg(disksup),
- ?line ok = application:stop(os_mon),
- ?line ok = application:set_env(os_mon, start_disksup, true),
-
- ?line ok = application:set_env(os_mon, start_memsup, false),
- ?line ok = application:start(os_mon),
- ?line true = lists:all(IsReg, [cpu_sup, disksup]),
- ?line true = IsNotReg(memsup),
- ?line ok = application:stop(os_mon),
- ?line ok = application:set_env(os_mon, start_memsup, true),
+ ok = application:start(os_mon),
+ true = lists:all(IsReg, [cpu_sup, disksup, memsup]),
+ ok = application:stop(os_mon),
+
+ ok = application:set_env(os_mon, start_cpu_sup, false),
+ ok = application:start(os_mon),
+ true = lists:all(IsReg, [disksup, memsup]),
+ true = IsNotReg(cpu_sup),
+ ok = application:stop(os_mon),
+ ok = application:set_env(os_mon, start_cpu_sup, true),
+
+ ok = application:set_env(os_mon, start_disksup, false),
+ ok = application:start(os_mon),
+ true = lists:all(IsReg, [cpu_sup, memsup]),
+ true = IsNotReg(disksup),
+ ok = application:stop(os_mon),
+ ok = application:set_env(os_mon, start_disksup, true),
+
+ ok = application:set_env(os_mon, start_memsup, false),
+ ok = application:start(os_mon),
+ true = lists:all(IsReg, [cpu_sup, disksup]),
+ true = IsNotReg(memsup),
+ ok = application:stop(os_mon),
+ ok = application:set_env(os_mon, start_memsup, true),
ok.
diff --git a/lib/os_mon/test/os_mon_conf.erl b/lib/os_mon/test/os_mon_conf.erl
index da08bf3917..6daeab31ef 100644
--- a/lib/os_mon/test/os_mon_conf.erl
+++ b/lib/os_mon/test/os_mon_conf.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/os_mon/test/os_mon_mib_SUITE.erl b/lib/os_mon/test/os_mon_mib_SUITE.erl
index e68a139a74..f40d5f442c 100644
--- a/lib/os_mon/test/os_mon_mib_SUITE.erl
+++ b/lib/os_mon/test/os_mon_mib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,30 +30,28 @@
%% > ct_run -suite os_mon_mib_SUITE -config os_mon_mib_SUITE.cfg
%%-----------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("os_mon/include/OTP-OS-MON-MIB.hrl").
-include_lib("snmp/include/snmp_types.hrl").
% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
- init_per_suite/1, end_per_suite/1,
- init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0, groups/0,
+ init_per_suite/1, end_per_suite/1]).
% Test cases must be exported.
-export([update_load_table/1]).
-export([get_mem_sys_mark/1, get_mem_proc_mark/1, get_disk_threshold/1,
- get_load_table/1, get_disk_table/1,
- real_snmp_request/1, load_unload/1]).
+ get_load_table/1, get_disk_table/1,
+ real_snmp_request/1, load_unload/1]).
-export([sys_tot_mem/1, sys_used_mem/1, large_erl_process/1,
- large_erl_process_mem/1, cpu_load/1, cpu_load5/1, cpu_load15/1,
- os_wordsize/1, sys_tot_mem64/1, sys_used_mem64/1,
- large_erl_process_mem64/1, disk_descr/1, disk_kbytes/1,
- disk_capacity/1]).
+ large_erl_process_mem/1, cpu_load/1, cpu_load5/1, cpu_load15/1,
+ os_wordsize/1, sys_tot_mem64/1, sys_used_mem64/1,
+ large_erl_process_mem64/1, disk_descr/1, disk_kbytes/1,
+ disk_capacity/1]).
--export([]).
-export([otp_6351/1, otp_7441/1]).
-define(TRAP_UDP, 5000).
@@ -65,17 +63,11 @@
-define(MGR_PORT, 5001).
%%---------------------------------------------------------------------
-init_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:minutes(6)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- Config.
-
-suite() -> [{ct_hooks,[ts_install_cth]},
- {require, snmp_mgr_agent, snmp}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,6}},
+ {require, snmp_mgr_agent, snmp}].
all() ->
[load_unload, get_mem_sys_mark, get_mem_proc_mark,
@@ -94,12 +86,6 @@ groups() ->
{get_next_disk_table, [],
[disk_descr, disk_kbytes, disk_capacity]}].
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%%---------------------------------------------------------------------
%%--------------------------------------------------------------------
@@ -112,9 +98,9 @@ end_per_group(_GroupName, Config) ->
%% variable, but should NOT alter/remove any existing entries.
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- ?line application:start(sasl),
- ?line application:start(mnesia),
- ?line application:start(os_mon),
+ application:start(sasl),
+ application:start(mnesia),
+ application:start(os_mon),
ok = ct_snmp:start(Config,snmp_mgr_agent),
@@ -130,7 +116,7 @@ init_per_suite(Config) ->
%% Description: Cleanup after the whole suite
%%--------------------------------------------------------------------
end_per_suite(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ConfDir = filename:join(PrivDir,"conf"),
DbDir = filename:join(PrivDir,"db"),
MgrDir = filename:join(PrivDir, "mgr"),
@@ -152,92 +138,74 @@ end_per_suite(Config) ->
%%---------------------------------------------------------------------
%% Test cases
%%---------------------------------------------------------------------
-load_unload(doc) ->
- ["Test to unload and the reload the OTP.mib "];
-load_unload(suite) -> [];
+
+%% Test to unload and the reload the OTP.mib
load_unload(Config) when is_list(Config) ->
- ?line os_mon_mib:unload(snmp_master_agent),
- ?line os_mon_mib:load(snmp_master_agent),
+ os_mon_mib:unload(snmp_master_agent),
+ os_mon_mib:load(snmp_master_agent),
ok.
%%---------------------------------------------------------------------
-update_load_table(doc) ->
- ["check os_mon_mib:update_load_table error handling"];
-update_load_table(suite) ->
- [];
+%% check os_mon_mib:update_load_table error handling
update_load_table(Config) when is_list(Config) ->
- ?line Node = start_node(),
- ?line ok = rpc:call(Node,application,start,[sasl]),
- ?line ok = rpc:call(Node,application,start,[os_mon]),
- ?line ok = os_mon_mib:update_load_table(),
- ?line rpc:call(Node,application,stop,[os_mon]),
- ?line ok = os_mon_mib:update_load_table(),
- ?line stop_node(Node),
+ Node = start_node(),
+ ok = rpc:call(Node,application,start,[sasl]),
+ ok = rpc:call(Node,application,start,[os_mon]),
+ ok = os_mon_mib:update_load_table(),
+ rpc:call(Node,application,stop,[os_mon]),
+ ok = os_mon_mib:update_load_table(),
+ stop_node(Node),
ok.
-otp_6351(doc) ->
- ["like update_load_table, when memsup_system_only==true"];
-otp_6351(suite) ->
- [];
+%% like update_load_table, when memsup_system_only==true
otp_6351(Config) when is_list(Config) ->
- ?line Node = start_node(),
- ?line ok = rpc:call(Node,application,start,[sasl]),
- ?line ok = rpc:call(Node,application,load,[os_mon]),
- ?line ok = rpc:call(Node,application,set_env,
- [os_mon,memsup_system_only,true]),
- ?line ok = rpc:call(Node,application,start,[os_mon]),
- ?line Res = rpc:call(Node,os_mon_mib,get_load,[Node]),
+ Node = start_node(),
+ ok = rpc:call(Node,application,start,[sasl]),
+ ok = rpc:call(Node,application,load,[os_mon]),
+ ok = rpc:call(Node,application,set_env,
+ [os_mon,memsup_system_only,true]),
+ ok = rpc:call(Node,application,start,[os_mon]),
+ Res = rpc:call(Node,os_mon_mib,get_load,[Node]),
if
- is_tuple(Res), element(1, Res)==loadTable ->
- ?line ok;
- true ->
- ?line ?t:fail(Res)
+ is_tuple(Res), element(1, Res)==loadTable ->
+ ok;
+ true ->
+ ct:fail(Res)
end,
- ?line rpc:call(Node,application,stop,[os_mon]),
- ?line stop_node(Node),
+ rpc:call(Node,application,stop,[os_mon]),
+ stop_node(Node),
ok.
-
-
%%---------------------------------------------------------------------
-get_mem_sys_mark(doc) ->
- ["Simulates a get call to test the instrumentation function "
- "for the loadMemorySystemWatermark variable."];
-get_mem_sys_mark(suite) ->
- [];
+%% Simulates a get call to test the instrumentation function
+%% for the loadMemorySystemWatermark variable.
get_mem_sys_mark(Config) when is_list(Config) ->
case os_mon_mib:mem_sys_mark(get) of
- {value, SysMark} when is_integer(SysMark) ->
- ok;
- _ ->
- ?line test_server:fail(sys_mark_value_not_integer)
+ {value, SysMark} when is_integer(SysMark) ->
+ ok;
+ _ ->
+ ct:fail(sys_mark_value_not_integer)
end.
%%---------------------------------------------------------------------
-get_mem_proc_mark(doc) ->
- ["Simulates a get call to test the instrumentation function "
- "for the loadMemoryErlProcWatermark variable."];
-get_mem_proc_mark(suite) ->
- [];
+%% Simulates a get call to test the instrumentation function
+%% for the loadMemoryErlProcWatermark variable.
get_mem_proc_mark(Config) when is_list(Config) ->
case os_mon_mib:mem_proc_mark(get) of
- {value, ProcMark} when is_integer(ProcMark) ->
- ok;
- _ ->
- ?line test_server:fail(proc_mark_value_not_integer)
+ {value, ProcMark} when is_integer(ProcMark) ->
+ ok;
+ _ ->
+ ct:fail(proc_mark_value_not_integer)
end.
%%---------------------------------------------------------------------
-get_disk_threshold(doc) ->
- ["Simulates a get call to test the instrumentation function "
- "for the diskAlmostFullThreshold variable."];
-get_disk_threshold(suite) ->
- [];
+%% Simulates a get call to test the instrumentation function
+%% for the diskAlmostFullThreshold variable.
get_disk_threshold(Config) when is_list(Config) ->
- case os_mon_mib:disk_threshold(get) of
- {value, ProcMark} when is_integer(ProcMark) ->
- ok;
- _ ->
- ?line test_server:fail(disk_threshold_value_not_integer)
+ case os_mon_mib:disk_threshold(get) of
+ {value, ProcMark} when is_integer(ProcMark) ->
+ ok;
+ _ ->
+ ct:fail(disk_threshold_value_not_integer)
end.
%%---------------------------------------------------------------------
@@ -247,11 +215,8 @@ get_disk_threshold(Config) when is_list(Config) ->
%%% instrumentation functions directly as done in most test cases in
%%% this test suite
-get_load_table(doc) ->
- ["Simulates get calls to test the instrumentation function "
- "for the loadTable"];
-get_load_table(suite) ->
- [];
+%% Simulates get calls to test the instrumentation function
+%% for the loadTable
get_load_table(Config) when is_list(Config) ->
NodeStr = atom_to_list(node()),
@@ -259,376 +224,316 @@ get_load_table(Config) when is_list(Config) ->
{_, _, {Pid, _}} = memsup:get_memory_data(),
PidStr = lists:flatten(io_lib:format("~w", [Pid])),
- ?line [{value, NodeStr},{value, PidStr}] =
- os_mon_mib:load_table(get, [NodeLen | NodeStr],
- [?loadErlNodeName, ?loadLargestErlProcess]),
-
- ?line Values = os_mon_mib:load_table(get, [NodeLen | NodeStr] ,
- [?loadSystemTotalMemory,
- ?loadSystemUsedMemory,
- ?loadLargestErlProcessUsedMemory,
- ?loadCpuLoad,
- ?loadCpuLoad5,
- ?loadCpuLoad15,
- ?loadOsWordsize,
- ?loadSystemTotalMemory64,
- ?loadSystemUsedMemory64,
- ?loadLargestErlProcessUsedMemory64]),
+ [{value, NodeStr},{value, PidStr}] =
+ os_mon_mib:load_table(get, [NodeLen | NodeStr],
+ [?loadErlNodeName, ?loadLargestErlProcess]),
+
+ Values = os_mon_mib:load_table(get, [NodeLen | NodeStr] ,
+ [?loadSystemTotalMemory,
+ ?loadSystemUsedMemory,
+ ?loadLargestErlProcessUsedMemory,
+ ?loadCpuLoad,
+ ?loadCpuLoad5,
+ ?loadCpuLoad15,
+ ?loadOsWordsize,
+ ?loadSystemTotalMemory64,
+ ?loadSystemUsedMemory64,
+ ?loadLargestErlProcessUsedMemory64]),
IsInt = fun({value, Val}) when is_integer(Val) ->
- true;
- (_) ->
- false
- end,
+ true;
+ (_) ->
+ false
+ end,
NewValues = lists:filter(IsInt, Values),
case length(NewValues) of
- 10 ->
- ok;
- _ ->
- ?line test_server:fail(value_not_integer)
+ 10 ->
+ ok;
+ _ ->
+ ct:fail(value_not_integer)
end,
- ?line [{noValue,noSuchInstance}, {noValue,noSuchInstance},
- {noValue,noSuchInstance}, {noValue,noSuchInstance},
- {noValue,noSuchInstance}, {noValue,noSuchInstance},
- {noValue,noSuchInstance}, {noValue,noSuchInstance},
- {noValue,noSuchInstance}, {noValue,noSuchInstance},
- {noValue,noSuchInstance}, {noValue,noSuchInstance}] =
- os_mon_mib:load_table(get, [3, 102, 111, 111],
- [?loadErlNodeName,
- ?loadSystemTotalMemory,
- ?loadSystemUsedMemory,
- ?loadLargestErlProcess,
- ?loadLargestErlProcessUsedMemory,
- ?loadCpuLoad,
- ?loadCpuLoad5,
- ?loadCpuLoad15,
- ?loadOsWordsize,
- ?loadSystemTotalMemory64,
- ?loadSystemUsedMemory64,
- ?loadLargestErlProcessUsedMemory64]),
+ [{noValue,noSuchInstance}, {noValue,noSuchInstance},
+ {noValue,noSuchInstance}, {noValue,noSuchInstance},
+ {noValue,noSuchInstance}, {noValue,noSuchInstance},
+ {noValue,noSuchInstance}, {noValue,noSuchInstance},
+ {noValue,noSuchInstance}, {noValue,noSuchInstance},
+ {noValue,noSuchInstance}, {noValue,noSuchInstance}] =
+ os_mon_mib:load_table(get, [3, 102, 111, 111],
+ [?loadErlNodeName,
+ ?loadSystemTotalMemory,
+ ?loadSystemUsedMemory,
+ ?loadLargestErlProcess,
+ ?loadLargestErlProcessUsedMemory,
+ ?loadCpuLoad,
+ ?loadCpuLoad5,
+ ?loadCpuLoad15,
+ ?loadOsWordsize,
+ ?loadSystemTotalMemory64,
+ ?loadSystemUsedMemory64,
+ ?loadLargestErlProcessUsedMemory64]),
ok.
%%---------------------------------------------------------------------
-sys_tot_mem(doc) ->
- [];
-sys_tot_mem(suite) ->
- [];
sys_tot_mem(Config) when is_list(Config) ->
- ?line [{[?loadSystemTotalMemory, Len | NodeStr], Mem}] =
- os_mon_mib:load_table(get_next, [], [?loadSystemTotalMemory]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+ [{[?loadSystemTotalMemory, Len | NodeStr], Mem}] =
+ os_mon_mib:load_table(get_next, [], [?loadSystemTotalMemory]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
case Mem of
- Mem when is_integer(Mem) ->
- ok;
- _ ->
- ?line test_server:fail(sys_tot_mem_value_not_integer)
+ Mem when is_integer(Mem) ->
+ ok;
+ _ ->
+ ct:fail(sys_tot_mem_value_not_integer)
end.
-sys_used_mem(doc) ->
- [];
-sys_used_mem(suite) -> [];
sys_used_mem(Config) when is_list(Config) ->
- ?line [{[?loadSystemUsedMemory, Len | NodeStr], Mem}] =
- os_mon_mib:load_table(get_next,[], [?loadSystemUsedMemory]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+ [{[?loadSystemUsedMemory, Len | NodeStr], Mem}] =
+ os_mon_mib:load_table(get_next,[], [?loadSystemUsedMemory]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
case Mem of
- Mem when is_integer(Mem) ->
- ok;
- _ ->
- ?line test_server:fail(sys_used_mem_value_not_integer)
+ Mem when is_integer(Mem) ->
+ ok;
+ _ ->
+ ct:fail(sys_used_mem_value_not_integer)
end.
-large_erl_process(doc) ->
- [];
-large_erl_process(suite) ->
- [];
large_erl_process(Config) when is_list(Config) ->
{_, _, {Pid, _}} = memsup:get_memory_data(),
PidStr = lists:flatten(io_lib:format("~w", [Pid])),
- ?line [{[?loadLargestErlProcess, Len | NodeStr], PidStr}] =
- os_mon_mib:load_table(get_next,[], [?loadLargestErlProcess]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+ [{[?loadLargestErlProcess, Len | NodeStr], PidStr}] =
+ os_mon_mib:load_table(get_next,[], [?loadLargestErlProcess]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
ok.
-large_erl_process_mem(doc) ->
- [];
-large_erl_process_mem(suite) ->
- [];
large_erl_process_mem(Config) when is_list(Config) ->
- ?line [{[?loadLargestErlProcessUsedMemory, Len | NodeStr], Mem}] =
- os_mon_mib:load_table(get_next,[],
- [?loadLargestErlProcessUsedMemory]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
-
- case Mem of
- Mem when is_integer(Mem) ->
- ok;
- _ ->
- ?line test_server:fail(erl_pid_mem_value_not_integer)
+ [{[?loadLargestErlProcessUsedMemory, Len | NodeStr], Mem}] =
+ os_mon_mib:load_table(get_next,[],
+ [?loadLargestErlProcessUsedMemory]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+
+ case Mem of
+ Mem when is_integer(Mem) ->
+ ok;
+ _ ->
+ ct:fail(erl_pid_mem_value_not_integer)
end.
-cpu_load(doc) ->
- [];
-cpu_load(suite) ->
- [];
cpu_load(Config) when is_list(Config) ->
- ?line [{[?loadCpuLoad, Len | NodeStr], Load}] =
- os_mon_mib:load_table(get_next,[], [?loadCpuLoad]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+ [{[?loadCpuLoad, Len | NodeStr], Load}] =
+ os_mon_mib:load_table(get_next,[], [?loadCpuLoad]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
case Load of
- Load when is_integer(Load) ->
- ok;
- _ ->
- ?line test_server:fail(cpu_load_value_not_integer)
+ Load when is_integer(Load) ->
+ ok;
+ _ ->
+ ct:fail(cpu_load_value_not_integer)
end.
-cpu_load5(doc) ->
- [];
-cpu_load5(suite) ->
- [];
cpu_load5(Config) when is_list(Config) ->
- ?line [{[?loadCpuLoad5, Len | NodeStr], Load}] =
- os_mon_mib:load_table(get_next,[], [?loadCpuLoad5]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+ [{[?loadCpuLoad5, Len | NodeStr], Load}] =
+ os_mon_mib:load_table(get_next,[], [?loadCpuLoad5]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
case Load of
- Load when is_integer(Load) ->
- ok;
- _ ->
- ?line test_server:fail(cpu_load5_value_not_integer)
+ Load when is_integer(Load) ->
+ ok;
+ _ ->
+ ct:fail(cpu_load5_value_not_integer)
end.
-cpu_load15(doc) ->
- [];
-cpu_load15(suite) ->
- [];
cpu_load15(Config) when is_list(Config) ->
- ?line [{[?loadCpuLoad15, Len | NodeStr], Load}] =
- os_mon_mib:load_table(get_next,[], [?loadCpuLoad15]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
-
- case Load of
- Load when is_integer(Load) ->
- ok;
- _ ->
- ?line test_server:fail(cpu_load15_value_not_integer)
- end.
-
-os_wordsize(doc) ->
- [];
-os_wordsize(suite) ->
- [];
+ [{[?loadCpuLoad15, Len | NodeStr], Load}] =
+ os_mon_mib:load_table(get_next,[], [?loadCpuLoad15]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+
+ case Load of
+ Load when is_integer(Load) ->
+ ok;
+ _ ->
+ ct:fail(cpu_load15_value_not_integer)
+ end.
+
os_wordsize(Config) when is_list(Config) ->
- ?line [{[?loadOsWordsize, Len | NodeStr], Wordsize}] =
- os_mon_mib:load_table(get_next,[], [?loadOsWordsize]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
-
- case Wordsize of
- Wordsize when is_integer(Wordsize) ->
- ok;
- _ ->
- ?line test_server:fail(os_wordsize_value_not_integer)
- end.
-
-sys_tot_mem64(doc) ->
- [];
-sys_tot_mem64(suite) ->
- [];
+ [{[?loadOsWordsize, Len | NodeStr], Wordsize}] =
+ os_mon_mib:load_table(get_next,[], [?loadOsWordsize]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+
+ case Wordsize of
+ Wordsize when is_integer(Wordsize) ->
+ ok;
+ _ ->
+ ct:fail(os_wordsize_value_not_integer)
+ end.
+
sys_tot_mem64(Config) when is_list(Config) ->
- ?line [{[?loadSystemTotalMemory64, Len | NodeStr], Mem}] =
- os_mon_mib:load_table(get_next, [], [?loadSystemTotalMemory64]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+ [{[?loadSystemTotalMemory64, Len | NodeStr], Mem}] =
+ os_mon_mib:load_table(get_next, [], [?loadSystemTotalMemory64]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
case Mem of
- Mem when is_integer(Mem) ->
- ok;
- _ ->
- ?line test_server:fail(sys_tot_mem_value_not_integer)
+ Mem when is_integer(Mem) ->
+ ok;
+ _ ->
+ ct:fail(sys_tot_mem_value_not_integer)
end.
-sys_used_mem64(doc) ->
- [];
-sys_used_mem64(suite) -> [];
sys_used_mem64(Config) when is_list(Config) ->
- ?line [{[?loadSystemUsedMemory64, Len | NodeStr], Mem}] =
- os_mon_mib:load_table(get_next,[], [?loadSystemUsedMemory64]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+ [{[?loadSystemUsedMemory64, Len | NodeStr], Mem}] =
+ os_mon_mib:load_table(get_next,[], [?loadSystemUsedMemory64]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
case Mem of
- Mem when is_integer(Mem) ->
- ok;
- _ ->
- ?line test_server:fail(sys_used_mem_value_not_integer)
+ Mem when is_integer(Mem) ->
+ ok;
+ _ ->
+ ct:fail(sys_used_mem_value_not_integer)
end.
-large_erl_process_mem64(doc) ->
- [];
-large_erl_process_mem64(suite) ->
- [];
large_erl_process_mem64(Config) when is_list(Config) ->
- ?line [{[?loadLargestErlProcessUsedMemory64, Len | NodeStr], Mem}] =
- os_mon_mib:load_table(get_next,[],
- [?loadLargestErlProcessUsedMemory64]),
- ?line Len = length(NodeStr),
- ?line true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
-
- case Mem of
- Mem when is_integer(Mem) ->
- ok;
- _ ->
- ?line test_server:fail(erl_pid_mem_value_not_integer)
+ [{[?loadLargestErlProcessUsedMemory64, Len | NodeStr], Mem}] =
+ os_mon_mib:load_table(get_next,[],
+ [?loadLargestErlProcessUsedMemory64]),
+ Len = length(NodeStr),
+ true = lists:member(list_to_atom(NodeStr), [node() | nodes()]),
+
+ case Mem of
+ Mem when is_integer(Mem) ->
+ ok;
+ _ ->
+ ct:fail(erl_pid_mem_value_not_integer)
end.
%%---------------------------------------------------------------------
-get_disk_table(doc) ->
- ["Simulates get calls to test the instrumentation function "
- "for the diskTable."];
-get_disk_table(suite) ->
- [];
+%% Simulates get calls to test the instrumentation function
+%% for the diskTable.
get_disk_table(Config) when is_list(Config) ->
DiskData = disksup:get_disk_data(),
DiskDataLen = length(DiskData),
if
- DiskDataLen > 0 ->
- ?line [{value, Value}] =
- os_mon_mib:disk_table(get, [1,1], [?diskDescr]),
-
- case is_list(Value) of
- true ->
- ok;
- false ->
- ?line test_server:fail(value_not_a_string)
- end,
-
- ?line Values = os_mon_mib:disk_table(get, [1,1],
- [?diskId,
- ?diskKBytes,
- ?diskCapacity]),
-
- IsInt = fun({value, Val}) when is_integer(Val) ->
- true;
- (_) ->
- false
- end,
-
- NewValues = lists:filter(IsInt, Values),
-
- case length(NewValues) of
- 3 ->
- ok;
- _ ->
- ?line test_server:fail(value_not_integer)
- end
+ DiskDataLen > 0 ->
+ [{value, Value}] =
+ os_mon_mib:disk_table(get, [1,1], [?diskDescr]),
+
+ case is_list(Value) of
+ true ->
+ ok;
+ false ->
+ ct:fail(value_not_a_string)
+ end,
+
+ Values = os_mon_mib:disk_table(get, [1,1],
+ [?diskId,
+ ?diskKBytes,
+ ?diskCapacity]),
+
+ IsInt = fun({value, Val}) when is_integer(Val) ->
+ true;
+ (_) ->
+ false
+ end,
+
+ NewValues = lists:filter(IsInt, Values),
+
+ case length(NewValues) of
+ 3 ->
+ ok;
+ _ ->
+ ct:fail(value_not_integer)
+ end
end,
- ?line [{noValue,noSuchInstance}, {noValue,noSuchInstance},
- {noValue,noSuchInstance}, {noValue,noSuchInstance}] =
- os_mon_mib:disk_table(get, [1, DiskDataLen + 1], [?diskId,
- ?diskDescr,
- ?diskKBytes,
- ?diskCapacity]),
+ [{noValue,noSuchInstance}, {noValue,noSuchInstance},
+ {noValue,noSuchInstance}, {noValue,noSuchInstance}] =
+ os_mon_mib:disk_table(get, [1, DiskDataLen + 1], [?diskId,
+ ?diskDescr,
+ ?diskKBytes,
+ ?diskCapacity]),
ok.
%%---------------------------------------------------------------------
-disk_descr(doc) ->
- [];
-disk_descr(suite) ->
- [];
disk_descr(Config) when is_list(Config) ->
- ?line [{[?diskDescr, 1,1], Descr}] =
- os_mon_mib:disk_table(get_next, [], [?diskDescr]),
+ [{[?diskDescr, 1,1], Descr}] =
+ os_mon_mib:disk_table(get_next, [], [?diskDescr]),
case Descr of
- Descr when is_list(Descr) ->
- ok;
- _ ->
- ?line test_server:fail(disk_descr_value_not_a_string)
+ Descr when is_list(Descr) ->
+ ok;
+ _ ->
+ ct:fail(disk_descr_value_not_a_string)
end.
-disk_kbytes(doc) ->
- [];
-disk_kbytes(suite) -> [];
disk_kbytes(Config) when is_list(Config) ->
- ?line [{[?diskKBytes, 1,1], Kbytes}] =
- os_mon_mib:disk_table(get_next,[], [?diskKBytes]),
+ [{[?diskKBytes, 1,1], Kbytes}] =
+ os_mon_mib:disk_table(get_next,[], [?diskKBytes]),
case Kbytes of
- Kbytes when is_integer(Kbytes) ->
- ok;
- _ ->
- ?line test_server:fail(disk_kbytes_value_not_integer)
+ Kbytes when is_integer(Kbytes) ->
+ ok;
+ _ ->
+ ct:fail(disk_kbytes_value_not_integer)
end.
-disk_capacity(doc) ->
- [];
-disk_capacity(suite) -> [];
disk_capacity(Config) when is_list(Config) ->
- ?line [{[?diskCapacity, 1,1], Capacity}] =
- os_mon_mib:disk_table(get_next,[], [?diskCapacity]),
+ [{[?diskCapacity, 1,1], Capacity}] =
+ os_mon_mib:disk_table(get_next,[], [?diskCapacity]),
case Capacity of
- Capacity when is_integer(Capacity) ->
- ok;
- _ ->
- ?line test_server:fail(disk_capacity_value_not_integer)
+ Capacity when is_integer(Capacity) ->
+ ok;
+ _ ->
+ ct:fail(disk_capacity_value_not_integer)
end.
%%---------------------------------------------------------------------
-real_snmp_request(doc) ->
- ["Starts an snmp manager and sends a real snmp-request. i.e. "
- "sends a udp message on the correct format."];
-real_snmp_request(suite) -> [];
+%% Starts an snmp manager and sends a real snmp-request. i.e.
+%% sends a udp message on the correct format.
real_snmp_request(Config) when is_list(Config) ->
NodStr = atom_to_list(node()),
Len = length(NodStr),
{_, _, {Pid, _}} = memsup:get_memory_data(),
PidStr = lists:flatten(io_lib:format("~w", [Pid])),
io:format("FOO: ~p~n", [PidStr]),
- ?line ok = snmp_get([?loadEntry ++
- [?loadLargestErlProcess, Len | NodStr]],
- PidStr),
- ?line ok = snmp_get_next([?loadEntry ++
- [?loadSystemUsedMemory, Len | NodStr]],
- ?loadEntry ++ [?loadSystemUsedMemory + 1, Len
- | NodStr], PidStr),
- ?line ok = snmp_set([?loadEntry ++ [?loadLargestErlProcess, Len | NodStr]],
- s, "<0.101.0>", Config),
+ ok = snmp_get([?loadEntry ++
+ [?loadLargestErlProcess, Len | NodStr]],
+ PidStr),
+ ok = snmp_get_next([?loadEntry ++
+ [?loadSystemUsedMemory, Len | NodStr]],
+ ?loadEntry ++ [?loadSystemUsedMemory + 1, Len
+ | NodStr], PidStr),
+ ok = snmp_set([?loadEntry ++ [?loadLargestErlProcess, Len | NodStr]],
+ s, "<0.101.0>", Config),
ok.
-otp_7441(doc) ->
- ["Starts an snmp manager and requests total memory. Was previously
- integer32 which was errornous on 64 bit machines."];
-otp_7441(suite) ->
- [];
+%% Starts an snmp manager and requests total memory. Was previously
+%% integer32 which was errornous on 64 bit machines.
otp_7441(Config) when is_list(Config) ->
NodStr = atom_to_list(node()),
Len = length(NodStr),
Oids = [Oid|_] = [?loadEntry ++ [?loadSystemTotalMemory, Len | NodStr]],
{noError,0,[#varbind{oid = Oid, variabletype = 'Unsigned32'}]} =
- ct_snmp:get_values(os_mon_mib_test, Oids, snmp_mgr_agent),
+ ct_snmp:get_values(os_mon_mib_test, Oids, snmp_mgr_agent),
ok.
@@ -636,9 +541,8 @@ otp_7441(Config) when is_list(Config) ->
%% Internal functions
%%---------------------------------------------------------------------
start_node() ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line {ok,Node} = test_server:start_node(testnisse, slave,
- [{args, " -pa " ++ Pa}]),
+ Pa = filename:dirname(code:which(?MODULE)),
+ {ok,Node} = test_server:start_node(testnisse, slave, [{args, " -pa " ++ Pa}]),
Node.
stop_node(Node) ->
@@ -648,27 +552,27 @@ del_dir(Dir) ->
io:format("Deleting: ~s~n",[Dir]),
{ok, Files} = file:list_dir(Dir),
FullPathFiles = lists:map(fun(File) -> filename:join(Dir, File) end,
- Files),
+ Files),
lists:foreach(fun file:delete/1, FullPathFiles),
file:del_dir(Dir).
%%---------------------------------------------------------------------
snmp_get(Oids = [Oid |_], Result) ->
{noError,0,[#varbind{oid = Oid,
- variabletype = 'OCTET STRING',
- value = Result}]} =
- ct_snmp:get_values(os_mon_mib_test, Oids, snmp_mgr_agent),
+ variabletype = 'OCTET STRING',
+ value = Result}]} =
+ ct_snmp:get_values(os_mon_mib_test, Oids, snmp_mgr_agent),
ok.
snmp_get_next(Oids, NextOid, Result) ->
{noError,0,[#varbind{oid = NextOid,
- variabletype = 'OCTET STRING',
- value = Result}]} =
- ct_snmp:get_next_values(os_mon_mib_test, Oids, snmp_mgr_agent),
+ variabletype = 'OCTET STRING',
+ value = Result}]} =
+ ct_snmp:get_next_values(os_mon_mib_test, Oids, snmp_mgr_agent),
ok.
snmp_set(Oid, ValuType, Value, Config) ->
{notWritable, _, _} =
- ct_snmp:set_values(os_mon_mib_test, [{Oid, ValuType, Value}],
- snmp_mgr_agent, Config),
+ ct_snmp:set_values(os_mon_mib_test, [{Oid, ValuType, Value}],
+ snmp_mgr_agent, Config),
ok.
diff --git a/lib/os_mon/test/os_sup_SUITE.erl b/lib/os_mon/test/os_sup_SUITE.erl
index 768d95aebc..0c1164be41 100644
--- a/lib/os_mon/test/os_sup_SUITE.erl
+++ b/lib/os_mon/test/os_sup_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,20 +18,16 @@
%% %CopyrightEnd%
%%
-module(os_sup_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
+-export([all/0, suite/0]).
-export([init_per_suite/1, end_per_suite/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
%% Test cases
-export([message/1]).
-export([config/1, port/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
-define(TAG, test_tag).
-define(MFA, {?MODULE, test_mfa, [?TAG]}).
@@ -39,86 +35,64 @@
init_per_suite(Config) when is_list(Config) ->
spawn(fun() -> message_receptor() end),
- ?line application:load(os_mon),
- ?line ok = application:set_env(os_mon, start_os_sup, true),
- ?line ok = application:set_env(os_mon, os_sup_mfa, ?MFA),
- ?line ok = application:set_env(os_mon, os_sup_enable, false),
- ?line ok = application:start(os_mon),
+ application:load(os_mon),
+ ok = application:set_env(os_mon, start_os_sup, true),
+ ok = application:set_env(os_mon, os_sup_mfa, ?MFA),
+ ok = application:set_env(os_mon, os_sup_enable, false),
+ ok = application:start(os_mon),
Config.
end_per_suite(Config) when is_list(Config) ->
- ?line application:stop(os_mon),
- ?line ok = application:set_env(os_mon, start_os_sup, false),
+ application:stop(os_mon),
+ ok = application:set_env(os_mon, start_os_sup, false),
MFA = {os_sup, error_report, [std_error]},
- ?line ok = application:set_env(os_mon, os_sup_mfa, MFA),
- ?line ok = application:set_env(os_mon, os_sup_enable, true),
- ?line exit(whereis(message_receptor), done),
+ ok = application:set_env(os_mon, os_sup_mfa, MFA),
+ ok = application:set_env(os_mon, os_sup_enable, true),
+ exit(whereis(message_receptor), done),
Config.
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog,Dog} | Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
case test_server:os_type() of
- {unix, sunos} -> [message, config, port];
- {win32, _OSname} -> [message];
- OS ->
- Str = io_lib:format("os_sup not available for ~p",
- [OS]),
- {skip, lists:flatten(Str)}
+ {unix, sunos} -> [message, config, port];
+ {win32, _OSname} -> [message];
+ OS ->
+ Str = io_lib:format("os_sup not available for ~p",
+ [OS]),
+ {skip, lists:flatten(Str)}
end.
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-message(suite) ->
- [];
-message(doc) ->
- ["Test OS message handling"];
+%% Test OS message handling
message(Config) when is_list(Config) ->
%% Fake an OS message
Data = "10H11386278426HSystem4HTest5HError5HTesto",
- ?line os_sup_server ! {faked_port, {data, Data}},
+ os_sup_server ! {faked_port, {data, Data}},
%% Check with message_receptor that it has been received
- ?t:sleep(?t:seconds(1)),
+ ct:sleep({seconds,1}),
Msg =
- case ?t:os_type() of
- {unix, sunos} ->
- {?TAG, Data};
- {win32, _} ->
- {?TAG,{{1138,627842,0},"System","Test","Error","Testo"}}
- end,
- ?line message_receptor ! {check, self(), Msg},
+ case ?t:os_type() of
+ {unix, sunos} ->
+ {?TAG, Data};
+ {win32, _} ->
+ {?TAG,{{1138,627842,0},"System","Test","Error","Testo"}}
+ end,
+ message_receptor ! {check, self(), Msg},
receive
- {result, true} ->
- ok;
- {result, Rec} ->
- ?t:fail({no_message, Rec})
+ {result, true} ->
+ ok;
+ {result, Rec} ->
+ ct:fail({no_message, Rec})
end,
ok.
-config(suite) ->
- [];
-config(doc) ->
- ["Test configuration"];
+%% Test configuration
config(Config) when is_list(Config) ->
%% os_sup_enable==true and os_sup_own/os_sup_syslogconf cannot
@@ -130,45 +104,42 @@ config(Config) when is_list(Config) ->
ok.
-port(suite) ->
- [];
-port(doc) ->
- ["Test that os_sup handles a terminating port program"];
+%% Test that os_sup handles a terminating port program
port(Config) when is_list(Config) ->
- ?line Str = os:cmd("ps -e | grep '[f]errule'"),
+ Str = os:cmd("ps -e | grep '[f]errule'"),
case io_lib:fread("~s", Str) of
- {ok, [Pid], _Rest} ->
-
- %% Monitor os_sup_server
- ?line MonRef = erlang:monitor(process, os_sup_server),
-
- %% Kill the port program
- case os:cmd("kill -9 " ++ Pid) of
- [] ->
-
- %% os_sup_server should now terminate
- receive
- {'DOWN', MonRef, _, _, {port_died, _Reason}} ->
- ok;
- {'DOWN', MonRef, _, _, Reason} ->
- ?line ?t:fail({unexpected_exit_reason, Reason})
- after
- 3000 ->
- ?line ?t:fail(still_alive)
- end,
-
- %% Give os_mon_sup time to restart os_sup
- ?t:sleep(?t:seconds(3)),
- ?line true = is_pid(whereis(os_sup_server)),
-
- ok;
-
- Line ->
- erlang:demonitor(MonRef),
- {skip, {not_killed, Line}}
- end;
- _ ->
- {skip, {os_pid_not_found}}
+ {ok, [Pid], _Rest} ->
+
+ %% Monitor os_sup_server
+ MonRef = erlang:monitor(process, os_sup_server),
+
+ %% Kill the port program
+ case os:cmd("kill -9 " ++ Pid) of
+ [] ->
+
+ %% os_sup_server should now terminate
+ receive
+ {'DOWN', MonRef, _, _, {port_died, _Reason}} ->
+ ok;
+ {'DOWN', MonRef, _, _, Reason} ->
+ ct:fail({unexpected_exit_reason, Reason})
+ after
+ 3000 ->
+ ct:fail(still_alive)
+ end,
+
+ %% Give os_mon_sup time to restart os_sup
+ ct:sleep({seconds,3}),
+ true = is_pid(whereis(os_sup_server)),
+
+ ok;
+
+ Line ->
+ erlang:demonitor(MonRef),
+ {skip, {not_killed, Line}}
+ end;
+ _ ->
+ {skip, {os_pid_not_found}}
end.
%%----------------------------------------------------------------------
@@ -184,18 +155,18 @@ message_receptor() ->
message_receptor(Received) ->
receive
- %% Check if a certain message has been received
- {check, From, Msg} ->
- case lists:member(Msg, Received) of
- true ->
- From ! {result, true},
- message_receptor(lists:delete(Msg, Received));
- false ->
- From ! {result, Received},
- message_receptor(Received)
- end;
-
- %% Save all other messages
- Msg ->
- message_receptor([Msg|Received])
+ %% Check if a certain message has been received
+ {check, From, Msg} ->
+ case lists:member(Msg, Received) of
+ true ->
+ From ! {result, true},
+ message_receptor(lists:delete(Msg, Received));
+ false ->
+ From ! {result, Received},
+ message_receptor(Received)
+ end;
+
+ %% Save all other messages
+ Msg ->
+ message_receptor([Msg|Received])
end.
diff --git a/lib/os_mon/vsn.mk b/lib/os_mon/vsn.mk
index 7f2667e40a..1ac0fb1d27 100644
--- a/lib/os_mon/vsn.mk
+++ b/lib/os_mon/vsn.mk
@@ -1 +1 @@
-OS_MON_VSN = 2.4
+OS_MON_VSN = 2.4.1
diff --git a/lib/ose/Makefile b/lib/ose/Makefile
deleted file mode 100644
index 6119b75c3f..0000000000
--- a/lib/ose/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-#
-# Macros
-#
-
-SUB_DIRECTORIES = src doc/src
-
-include vsn.mk
-VSN = $(OSE_VSN)
-
-SPECIAL_TARGETS =
-
-#
-# Default Subdir Targets
-#
-include $(ERL_TOP)/make/otp_subdir.mk
diff --git a/lib/ose/doc/man3/.gitignore b/lib/ose/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/ose/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/ose/doc/man6/.gitignore b/lib/ose/doc/man6/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/ose/doc/man6/.gitignore
+++ /dev/null
diff --git a/lib/ose/doc/pdf/.gitignore b/lib/ose/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/ose/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/ose/doc/src/.gitignore b/lib/ose/doc/src/.gitignore
deleted file mode 100644
index 860e9e703e..0000000000
--- a/lib/ose/doc/src/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-ose.xml
diff --git a/lib/ose/doc/src/Makefile b/lib/ose/doc/src/Makefile
deleted file mode 100644
index 7ebd4125ba..0000000000
--- a/lib/ose/doc/src/Makefile
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(OSE_VSN)
-APPLICATION=ose
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Help application directory specification
-# ----------------------------------------------------
-EDOC_DIR = $(ERL_TOP)/lib/edoc
-SYNTAX_TOOLS_DIR = $(ERL_TOP)/lib/syntax_tools
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-
-XML_REF3_FILES = \
- ose.xml \
- ose_erl_driver.xml
-
-XML_REF6_FILES = ose_app.xml
-
-XML_PART_FILES = part.xml
-XML_CHAPTER_FILES = notes.xml ose_intro.xml ose_signals_chapter.xml
-
-BOOK_FILES = book.xml
-
-XML_FILES = \
- $(BOOK_FILES) $(XML_CHAPTER_FILES) \
- $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_REF6_FILES) \
- $(XML_APPLICATION_FILES)
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-SPECS_FILES =
-
-TOP_SPECS_FILE =
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-
-SPECS_FLAGS = -I../../include -I../../../kernel/include
-
-OSE_SRC_DIR = ../../src
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-docs: man pdf html
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: $(HTML_REF_MAN_FILE)
-
-man: $(MAN3_FILES) $(MAN6_FILES)
-
-ose.xml: $(OSE_SRC_DIR)/ose.erl
- escript $(DOCGEN)/priv/bin/xml_from_edoc.escript\
- $(OSE_SRC_DIR)/$(@:%.xml=%.erl)
-
-debug opt:
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(MAN6DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f $(SPECDIR)/*
- rm -f errs core *~
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_docs_spec: docs
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(HTMLDIR)/* \
- "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man6"
- $(INSTALL_DATA) $(MAN6_FILES) "$(RELEASE_PATH)/man/man6"
-
-release_spec:
diff --git a/lib/ose/doc/src/book.xml b/lib/ose/doc/src/book.xml
deleted file mode 100644
index d62e0d32f4..0000000000
--- a/lib/ose/doc/src/book.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>2014</year><year>2014</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>OSE</title>
- <prepared>Lukas Larsson</prepared>
- <docno></docno>
- <date>2014-01-08</date>
- <rev>1.0</rev>
- <file>book.xml</file>
- </header>
- <insidecover>
- </insidecover>
- <pagetext>OSE</pagetext>
- <preamble>
- <contents level="2"></contents>
- </preamble>
- <parts>
- <xi:include href="part.xml"/>
- </parts>
- <applications>
- <xi:include href="ref_man.xml"/>
- </applications>
- <releasenotes>
- <xi:include href="notes.xml"/>
- </releasenotes>
- <listofterms></listofterms>
- <index></index>
-</book>
diff --git a/lib/ose/doc/src/notes.xml b/lib/ose/doc/src/notes.xml
deleted file mode 100644
index 06881b6c99..0000000000
--- a/lib/ose/doc/src/notes.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2014</year><year>2014</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>OSE Release Notes</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>notes.xml</file>
- </header>
- <p>This document describes the changes made to the OSE application.</p>
-
-<section><title>Ose 1.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Change license text from Erlang Public License to Apache
- Public License v2</p>
- <p>
- Own Id: OTP-12845</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Ose 1.0.2</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Add missing release notes for the OSE application.</p>
- <p>
- Own Id: OTP-12177</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Ose 1.0.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Fix some spelling mistakes in documentation</p>
- <p>
- Own Id: OTP-12152</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Ose 1.0</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Erlang/OTP has been ported to the realtime operating
- system OSE. The port supports both smp and non-smp
- emulator. For details around the port and how to started
- see the User's Guide in the <seealso
- marker="ose:ose_intro">ose</seealso> application. </p>
- <p>
- Note that not all parts of Erlang/OTP has been ported. </p>
- <p>
- Notable things that work are: non-smp and smp emulators,
- OSE signal interaction, crypto, asn1, run_erl/to_erl,
- tcp, epmd, distribution and most if not all non-os
- specific functionality of Erlang.</p>
- <p>
- Notable things that does not work are: udp/sctp, os_mon,
- erl_interface, binding of schedulers.</p>
- <p>
- Own Id: OTP-11334</p>
- </item>
- </list>
- </section>
-
-</section>
-
-</chapter>
diff --git a/lib/ose/doc/src/ose_app.xml b/lib/ose/doc/src/ose_app.xml
deleted file mode 100644
index d555f0ec4f..0000000000
--- a/lib/ose/doc/src/ose_app.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE appref SYSTEM "appref.dtd">
-
-<appref>
- <header>
- <copyright>
- <year>2014</year><year>2014</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Enea OSE</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <app>ose</app>
- <appsummary>The OSE Application</appsummary>
- <description>
- <p>The OSE application contains modules and documentation that only
- applies when running Erlang/OTP on Enea OSE.</p>
- </description>
-
-</appref>
diff --git a/lib/ose/doc/src/ose_erl_driver.xml b/lib/ose/doc/src/ose_erl_driver.xml
deleted file mode 100644
index b804c29d2d..0000000000
--- a/lib/ose/doc/src/ose_erl_driver.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE cref SYSTEM "cref.dtd">
-
-<cref>
- <header>
- <copyright>
- <year>2013</year><year>2014</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>erl_driver for Enea OSE</title>
- <prepared>Lukas Larsson</prepared>
- <docno></docno>
- <date>2014-01-08</date>
- <rev>A</rev>
- <file>ose_erl_driver.xml</file>
- </header>
- <lib>ose_erl_driver</lib>
- <libsummary>Linked-in drivers in Enea OSE</libsummary>
- <description>
- <p>Writing Linked-in drivers that also work on Enea OSE is very similar for
- how you would do it for Unix. The difference from Unix is that
- driver_select, ready_input and ready_output all work with signals
- instead of file descriptors. This means that the driver_select is
- used to specify which type of signal should trigger calls to
- ready_input/ready_output. The functions described below are available
- to driver programmers on Enea OSE to facilitate this.
- </p>
- </description>
- <section>
- <title>DATA TYPES</title>
-
- <taglist>
- <tag><marker id="union_SIGNAL"/>union SIGNAL</tag>
- <item>See the Enea OSE SPI documentation for a description.</item>
- <tag><marker id="SIGSELECT"/>SIGSELECT</tag>
- <item>See the Enea OSE SPI documentation for a description.</item>
- <tag><marker id="ErlDrvEvent"/>ErlDrvEvent</tag>
- <item>The <c>ErlDrvEvent</c> is a handle to a signal number and id combination. It is passed to <seealso marker="erts:erl_driver#driver_select">driver_select(3)</seealso>.</item>
- <tag><marker id="ErlDrvOseEventId"/>ErlDrvOseEventId</tag>
- <item>This is the id used to associate a specific signal to a
- certain driver instance. </item>
- </taglist>
- </section>
- <funcs>
- <func>
- <name><ret>union SIGNAL *</ret><nametext>erl_drv_ose_get_signal(ErlDrvEvent drv_event)</nametext></name>
- <desc>
- <marker id="erl_drv_ose_get_signal"></marker>
- <p>Fetch the next signal associated with <c>drv_event</c>.
- Signals will be returned in the order which they were received and
- when no more signals are available <c>NULL</c> will be returned.
- Use this function in the ready_input/ready_output callbacks
- to get signals.</p>
- </desc>
- </func>
- <func>
- <name><ret>ErlDrvEvent</ret><nametext>erl_drv_ose_event_alloc(SIGSELECT signo, ErlDrvOseEventId id, ErlDrvOseEventId (*resolve_signal)(union SIGNAL* sig), void *extra)</nametext></name>
- <desc>
- <marker id="erl_drv_ose_event_alloc"></marker>
- <p>Create a new <c>ErlDrvEvent</c> associated with <c>signo</c>,
- <c>id</c> and uses the <c>resolve_signal</c> function to extract
- the <c>id</c> from a signal with <c>signo</c>. The <c>extra</c>
- parameter can be used for additional data. See
- <seealso marker="ose_signals_chapter#driver">
- Signals in a Linked-in driver</seealso> in the OSE User's Guide.
- </p>
- </desc>
- </func>
- <func>
- <name><ret>void</ret><nametext>erl_drv_ose_event_free(ErlDrvEvent drv_event)</nametext></name>
- <desc>
- <marker id="erl_drv_ose_event_free"></marker>
- <p>Free a <c>ErlDrvEvent</c>. This should always be done in the
- <seealso marker="erts:driver_entry#stop_select">stop_select</seealso>
- callback when the event is no longer being used.</p>
- </desc>
- </func>
- <func>
- <name><ret>void</ret><nametext>erl_drv_ose_event_fetch(ErlDrvEvent drv_event, SIGSELECT *signo, ErlDrvOseEventId *id, void **extra)</nametext></name>
- <desc>
- <marker id="erl_drv_ose_event_fetch"></marker>
- <p>Write the signal number, id and any extra data associated with <c>drv_event</c>
- into <c>*signo</c> and <c>*id</c> respectively. <c>NULL</c> can be
- also passed as <c>signo</c> or <c>id</c> in order to ignore that field.
- </p>
- </desc>
- </func>
- </funcs>
- <section>
- <title>SEE ALSO</title>
- <p>
- <seealso marker="erts:driver_entry">driver_entry(3)</seealso>,
- <seealso marker="erts:erl_driver">erl_driver(3)</seealso>
- </p>
- </section>
-</cref>
diff --git a/lib/ose/doc/src/ose_intro.xml b/lib/ose/doc/src/ose_intro.xml
deleted file mode 100644
index 982516c8bd..0000000000
--- a/lib/ose/doc/src/ose_intro.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2013</year><year>2014</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Introduction</title>
- <prepared>Lukas Larsson</prepared>
- <docno></docno>
- <date>2014-01-08</date>
- <rev>A</rev>
- <file>ose_intro.xml</file>
- </header>
-
- <section>
- <title>Features</title>
- </section>
-
- <section>
- <title>Starting Erlang/OTP</title>
- <p>
- Starting Erlang/OTP on OSE is not as simple as on Unix/Windows (yet).
- First of all you have to explicitly use the beam (or beam.smp) executables
- found in erts-X.Y.Z/bin as the load module that you run. This in turn
- means that you have to supply the raw beam arguments to the emulator
- when starting. Fortunately <c>erl</c> on Unix/Windows has a
- undocumented flag called <c>-emu_args_exit</c> that can be used to
- figure out what the arguments to beam look like. For example:</p>
- <code># erl +Mut false +A 10 +S 4:4 +Muycs256 +P 2096 +Q 2096 -emu_args_exit
--Mut
-false
--A
-10
--S
-4:4
--Muycs256
--P
-2096
--Q
-2096
---
--root
-/usr/local/lib/erlang
--progname
-erl
---
--home
-/home/erlang
---</code>
- <p>
- The arguments are printed on separate lines to make it possible to know
- what has to be quoted with &quot;. Each line is one quotable unit.
- So taking the arguments above you can supply them to pm_create or
- just execute directly on the command line. For example:</p>
- <code>rtose@acp3400> pm_install erlang /mst/erlang/erts-6.0/bin/beam.smp
-rtose@acp3400> pm_create -c ARGV="-Mut false -A 10 -S 4:4 -Muycs256 -P 2096 -Q 2099 -- -root /mst/erlang -progname erl -- -home /mst/erlang --" erlang
-pid: 0x110059
-rtose@acp3400> pm_start 0x110059</code>
- <p>
- Also note that since we are running erl to figure out the arguments on a
- separate machine the paths have to be updated. In the example above
- <c>/usr/local/lib/erlang</c> was replaced by <c>/mst/erlang/</c>. The
- goal is to in future releases not have to do the special argument handling
- but for now (OTP 17.0) you have to do it.
- </p>
- <note>
- Because of a limitation in the way the OSE handles stdio when starting
- load modules using pm_install/create the Erlang shell only reads every
- other command from stdin. However if you start Erlang using run_erl
- you do not have this problem. So it is highly recommended that you
- start Erlang using run_erl.
- </note>
- </section>
-
- <section>
- <title>run_erl and to_erl</title>
- <p>
- In OSE run_erl and to_erl are combined into a single load module called
- run_erl_lm. Installing and starting the load module will add two new
- shell commands called run_erl and to_erl. They work in exactly the same
- way as the unix variants of run_erl and to_erl, except that the read
- and write pipes have to be placed under the /pipe vm. One additional
- option also exists to run_erl on ose:
- <taglist>
- <tag><c>-block Name</c></tag>
- <item>The name of the install handle and block that will be created/used by
- installing and exectuting the first part of the command. If nothing
- if given the basename of the load module will be used for this value.
- Example:
- <code>pm_install erlang /path/to/erlang/vm/beam.smp
-run_erl -daemon -block erlang /pipe/ /mst/erlang_logs/ "beam.smp -A 1 -- -root /mst/erlang -- -home /mst --"</code>
- </item>
- </taglist>
- The same argument munching as when starting Erlang/OTP without run_erl
- has to be done. If <c>-daemon</c> is given then all error printouts
- are sent to the ramlog.
- See also
- <seealso marker="erts:run_erl">run_erl</seealso> for more details.
- </p>
- <p>
- Below is an example of how to get started with <c>run_erl_lm</c>.
- <code>rtose@acp3400> pm_install run_erl_lm /mst/erlang/erts-6.0/bin/run_erl_lm
-rtose@acp3400> pm_create run_erl_lm
-pid: 0x1c005d
-rtose@acp3400> pm_start 0x1c005d
-rtose@acp3400> mkdir /mst/erlang_log
-rtose@acp3400> run_erl -daemon /pipe/ /mst/erlang_log/ "/mst/erlang/erts-6.0/bin/beam.smp -A 1 -- -root /mst/erlang -- -home /mst --"
-rtose@acp3400> to_erl
-Attaching to /pipe/erlang.pipe.1 (^C to exit)
-os:type().
-{ose,release}
-2>
-'to_erl' terminated.</code>
- Note that Ctrl-C is used instead of Ctrl-D to exit the to_erl shell.
- </p>
- </section>
-
- <section>
- <title>epmd</title>
- <p>
- In OSE epmd will not be started automatically so if you want to use
- Erlang distribution you have to manually start epmd.
- </p>
- </section>
-
- <section>
- <title>VM Process Priorities</title>
- <p>
- It is possible to set the priorities you want for the OSE processes that
- thr emulator creates in the lmconf. An example of how to do it can be
- found in the default lmconf file in
- $ERL_TOP/erts/emulator/sys/ose/beam.lmconf.
- </p>
- </section>
-
-</chapter>
diff --git a/lib/ose/doc/src/ose_signals_chapter.xml b/lib/ose/doc/src/ose_signals_chapter.xml
deleted file mode 100644
index bcf2259577..0000000000
--- a/lib/ose/doc/src/ose_signals_chapter.xml
+++ /dev/null
@@ -1,240 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2013</year><year>2014</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Interacting with Enea OSE</title>
- <prepared>Lukas Larsson</prepared>
- <docno></docno>
- <date>2014-01-08</date>
- <rev>A</rev>
- <file>ose_signals_chapter.xml</file>
- </header>
-
- <marker id="introduction"></marker>
- <section>
- <title>Introduction</title>
- <p>The main way which programs on Enea OSE interact is through the
- usage of message passing, much the same way as Erlang processes
- communicate. There are two ways in which an Erlang programmer can
- interact with the signals sent from other Enea OSE processes; either
- through the provided <c>ose</c> module, or by writing a custom linked-in
- driver. This User's Guide describes and provides examples for both
- approaches.
- </p>
- </section>
-
- <marker id="erlang"></marker>
- <section>
- <title>Signals in Erlang</title>
- <p>Erlang/OTP on OSE provides a erlang module called
- <seealso marker="ose:ose">ose</seealso> that can be used to interact
- with other OSE processes using message passing. The api in the module
- is very similar to the native OSE api, so for details of how the
- functions work please refer to the official OSE documenation. Below
- is an example usage of the API.
- </p>
- <code>1> P1 = ose:open("p1").
-#Port&gt;0.344>
-2> ose:hunt(P1,"p2").
-{#Port&gt;0.344>,1}
-3> P2 = ose:open("p2").
-#Port&gt;0.355>
-4> flush().
-Shell got {mailbox_up,#Port&gt;0.344>,{#Port&gt;0.344>,1},852189}
-ok
-5> ose:listen(P1,[1234]).
-ok
-6> ose:send(P2,ose:get_id(P1),1234,&gt;&gt;"hello">>).
-ok
-7> flush().
-Shell got {message,#Port&gt;0.344>,{852189,1245316,1234,&gt;&gt;"hello">>}}
-ok</code>
- </section>
-
- <marker id="driver"></marker>
- <section>
- <title>Signals in a Linked-in driver</title>
- <p>
- Writing Linked-in drivers for OSE is very similar to how it is done
- for Unix/Windows. It is only the way in which the driver subscribes
- and consumed external events that is different. In Unix (and Windows)
- file descriptiors (and Event Objects) are used to select on. On OSE
- we use signals to deliver the same functionality. There are two large
- differences between a signal and an fd.
- </p>
- <p>
- In OSE it is not possible for a signal number to be a unique identifier
- for a resource in the same way as an fd is. For example; let's say we
- implement a driver that does an asynchronous hunt that uses signal
- number 1234 as the hunt_sig. If we want to be able to have multiple
- hunt ports running at the same time we have to have someway of routing
- the signal to the correct port. This is achieved by supplying a secondary
- id that can be retrieved through the meta-data or payload of the signal,
- e.g:
- <code>ErlDrvEvent event = erl_drv_ose_event_alloc(1234,port,resolver);</code>
- The event you get back from
- <seealso marker="ose_erl_driver#erl_drv_ose_event_alloc">
- erl_drv_ose_event_alloc</seealso> can then be used by
- <seealso marker="erts:erl_driver#driver_select">driver_select</seealso>
- to subscribe to signals. The first argument is just the signal number
- that we are interested in. The second is the id that we choose to use,
- in this case the port id that we got in the
- <seealso marker="erts:driver_entry#start">start</seealso> callback is
- used. The third argument is a function pointer to a function that can
- be used to figure out the id from a given signal. The fourth argument can
- point to any additional data you might want to associate with the event.
- There is a complete. You can examine the data contained in the event with
- <seealso marker="ose_erl_driver#erl_drv_ose_event_fetch">erl_drv_ose_event_fetch</seealso>
- , eg:
- <code>erl_drv_ose_event_fetch(event, &amp;signal, &amp;port, (void **)&amp;extra);</code>
- example of what this could look like in
- <seealso marker="#example">the next section</seealso>.
- <note>It is very important to issue the driver_select call before
- any of the signals you are interested in are sent. If driver_select
- is called after the signal is sent, there is a high probability that it
- will be lost.</note>
- </p>
- <p>
- The other difference from unix is that in OSE the payload of the event
- (i.e. the signal data) is already received when the ready_output/input
- callbacks are called. This means that you access the data of a signal
- by calling <seealso marker="ose_erl_driver#erl_drv_ose_get_signal">
- erl_drv_ose_get_signal</seealso>. Additionally multiple signals might be
- associated with the event, so you should call
- <seealso marker="ose_erl_driver#erl_drv_ose_get_signal">
- erl_drv_ose_get_signal</seealso> until <c>NULL</c> is returned.
- </p>
- </section>
-
- <marker id="example"></marker>
- <section>
- <title>Example Linked-in driver</title>
-<code>#include "erl_driver.h"
-#include "ose.h"
-
-struct huntsig {
- SIGSELECT signo;
- ErlDrvPort port;
-};
-
-union SIGNAL {
- SIGSELECT signo;
- struct huntsig;
-}
-
-/* Here we have to get the id from the signal. In this case we use the
- port id since we have control over the data structure of the signal.
- It is however possible to use anything in here. The only restriction
- is that the same id has to be used for all signals of the same number.*/
-ErlDrvOseEventId resolver(union SIGNAL *sig) {
- return (ErlDrvOseEventId)sig->huntsig.port;
-}
-
-static int drv_init(void) { return 0; };
-
-static ErlDrvData drv_start(ErlDrvPort port, char *command) {
- return (ErlDrvData)port;
-}
-
-static ErlDrvSSizeT control(ErlDrvData driver_data, unsigned int cmd,
- char *buf, ErlDrvSizeT len,
- char **rbuf, ErlDrvSizeT rlen) {
- ErlDrvPort port = (ErlDrvPort)driver_data;
-
- /* An example of extra data to associate with the event */
- char *extra_data = driver_alloc(80);
- snprintf("extra_data, "Event, sig_no: 1234, and port: %d", port);
-
- /* Create a new event to select on */
- ErlDrvOseEvent evt = erl_drv_ose_event_alloc(1234,port,resolver, extra_data);
-
- /* Make sure to do the select call _BEFORE_ the signal arrives.
- The signal might get lost if the hunt call is done before the
- select. */
- driver_select(port,evt,ERL_DRV_READ|ERL_DRV_USE,1);
-
- union SIGNAL *sig = alloc(sizeof(union SIGNAL),1234);
- sig->huntsig.port = port;
- hunt("testprocess",0,NULL,&amp;sig);
- return 0;
-}
-
-static void ready_input(ErlDrvData driver_data, ErlDrvEvent evt) {
- char *extra_data;
- /* Get the first signal payload from the event */
- union SIGNAL *sig = erl_drv_ose_get_signal(evt);
- ErlDrvPort port = (ErlDrvPort)driver_data;
- while (sig != NULL) {
- if (sig->signo == 1234) {
- /* Print out the string we added as the extra parameter */
- erl_drv_ose_event_fetch(evt, NULL, NULL, (void **)&amp;extra_data);
- printf("We've received: %s\n", extra_data);
-
- /* If it is our signal we send a message with the sender of the signal
- to the controlling erlang process */
- ErlDrvTermData reply[] = { ERL_DRV_UINT, (ErlDrvUInt)sender(&amp;sig) };
- erl_drv_send_term(port,reply,sizeof(reply) / sizeof(reply[0]));
- }
-
- /* Cleanup the signal and deselect on the event.
- Note that the event itself has to be free'd in the stop_select
- callback. */
- free_buf(&amp;sig);
- driver_select(port,evt,ERL_DRV_READ|ERL_DRV_USE,0);
-
- /* There could be more than one signal waiting in this event, so
- we have to loop until sig == NULL */
- sig = erl_drv_ose_get_signal(evt);
- }
-}
-
-static void stop_select(ErlDrvEvent event, void *reserved)
-{
- /* Free the extra_data */
- erl_drv_ose_event_fetch(evt, NULL, NULL, (void **)&amp;extra_data);
- driver_free(extra_data);
-
- /* Free the event itself */
- erl_drv_ose_event_free(event);
-}
-
-/**
- * Setup the driver entry for the Erlang runtime
- **/
-ErlDrvEntry ose_signal_driver_entry = {
- .init = drv_init,
- .start = drv_start,
- .stop = drv_stop,
- .ready_input = ready_input,
- .driver_name = DRIVER_NAME,
- .control = control,
- .extended_marker = ERL_DRV_EXTENDED_MARKER,
- .major_version = ERL_DRV_EXTENDED_MAJOR_VERSION,
- .minor_version = ERL_DRV_EXTENDED_MINOR_VERSION,
- .driver_flags = ERL_DRV_FLAG_USE_PORT_LOCKING,
- .stop_select = stop_select
-};
-</code>
- </section>
-
-</chapter>
diff --git a/lib/ose/doc/src/part.xml b/lib/ose/doc/src/part.xml
deleted file mode 100644
index 0c9ebd16c0..0000000000
--- a/lib/ose/doc/src/part.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2014</year>
- <year>2014</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>OSE User's Guide</title>
- <prepared>Lukas Larsson</prepared>
- <docno></docno>
- <date>2014-01-08</date>
- <rev>1.0</rev>
- <file>part.xml</file>
- </header>
- <description>
- <p><em>OSE</em>.</p>
- </description>
- <xi:include href="ose_intro.xml"/>
- <xi:include href="ose_signals_chapter.xml"/>
-</part>
diff --git a/lib/ose/doc/src/ref_man.xml b/lib/ose/doc/src/ref_man.xml
deleted file mode 100644
index 964e5ab8ff..0000000000
--- a/lib/ose/doc/src/ref_man.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2014</year><year>2014</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>OSE Reference Manual</title>
- <prepared>Lukas Larsson</prepared>
- <docno></docno>
- <date>2014-01-08</date>
- <rev>1.0</rev>
- <file>ref_man.xml</file>
- </header>
- <description>
- <p>The Standard Erlang Libraries application, <em>STDLIB</em>,
- contains modules for manipulating lists, strings and files etc.</p>
- <br></br>
- </description>
- <xi:include href="ose_app.xml"/>
- <xi:include href="ose.xml"/>
- <xi:include href="ose_erl_driver.xml"/>
-</application>
diff --git a/lib/ose/ebin/.gitignore b/lib/ose/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/ose/ebin/.gitignore
+++ /dev/null
diff --git a/lib/ose/include/.gitignore b/lib/ose/include/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/ose/include/.gitignore
+++ /dev/null
diff --git a/lib/ose/info b/lib/ose/info
deleted file mode 100644
index 85c07dbe82..0000000000
--- a/lib/ose/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: misc Miscellaneous Applications
-short: Description of Enea OSE specific functionality
diff --git a/lib/ose/src/Makefile b/lib/ose/src/Makefile
deleted file mode 100644
index a89e9392e9..0000000000
--- a/lib/ose/src/Makefile
+++ /dev/null
@@ -1,107 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(OSE_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/ose-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-MODULES= \
- ose
-
-HRL_FILES=
-
-INTERNAL_HRL_FILES=
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
-
-APP_FILE= ose.app
-
-APP_SRC= $(APP_FILE).src
-APP_TARGET= $(EBIN)/$(APP_FILE)
-
-APPUP_FILE= ose.appup
-
-APPUP_SRC= $(APPUP_FILE).src
-APPUP_TARGET= $(EBIN)/$(APPUP_FILE)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-
-ifeq ($(NATIVE_LIBS_ENABLED),yes)
-ERL_COMPILE_FLAGS += +native
-endif
-ERL_COMPILE_FLAGS += -I../include -I../../kernel/include -Werror
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f core
- rm -f erl_parse.erl
-
-docs:
-
-# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-
-$(APP_TARGET): $(APP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(ERL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/include"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
-
-release_docs_spec:
-
-# ----------------------------------------------------
-# Dependencies -- alphabetically, please
-# ----------------------------------------------------
diff --git a/lib/ose/src/ose.app.src b/lib/ose/src/ose.app.src
deleted file mode 100644
index 036779eb16..0000000000
--- a/lib/ose/src/ose.app.src
+++ /dev/null
@@ -1,28 +0,0 @@
-%% This is an -*- erlang -*- file.
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-{application, ose,
- [{description, "Enea OSE specific modules"},
- {vsn, "%VSN%"},
- {modules, [ose]},
- {registered,[]},
- {applications, [stdlib,kernel]},
- {env, []},
- {runtime_dependencies, ["stdlib-2.0","erts-6.0"]}]}.
diff --git a/lib/ose/src/ose.appup.src b/lib/ose/src/ose.appup.src
deleted file mode 100644
index 28b6da3439..0000000000
--- a/lib/ose/src/ose.appup.src
+++ /dev/null
@@ -1,23 +0,0 @@
-%% -*- erlang -*-
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-{"%VSN%",
- [
- ],
- [
- ]}.
diff --git a/lib/ose/src/ose.erl b/lib/ose/src/ose.erl
deleted file mode 100644
index 5534dba4d4..0000000000
--- a/lib/ose/src/ose.erl
+++ /dev/null
@@ -1,453 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-%% @doc Interface module for OSE messaging and process monitoring from Erlang
-%%
-%% For each mailbox created through {@link open/1} a OSE phantom process with
-%% that name is started. Since phantom processes are used the memory footprint
-%% of each mailbox is quite small.
-%%
-%% To receive messages you first have to subscribe to the specific message
-%% numbers that you are interested in with {@link listen/2}. The messages
-%% will be sent to the Erlang process that created the mailbox.
-%%
-%% @end
-%%
--module(ose).
-
-%%==============================================================================
-%% Exported API
-%%==============================================================================
--export([open/1,
- close/1,
- get_id/1,
- get_name/2,
- hunt/2,
- dehunt/2,
- attach/2,
- detach/2,
- send/4,
- send/5,
- listen/2
- ]).
-
-%%==============================================================================
-%% Types
-%%==============================================================================
--opaque mailbox() :: port().
-%% Mailbox handle. Implemented as an erlang port.
-
--opaque mailbox_id() :: integer().
-%% Mailbox ID, this is the same as the process id of an OSE process.
-%% An integer.
-
--type message_number() :: 0..4294967295.
-%% OSE Signal number
-
--opaque hunt_ref() :: {mailbox(),integer()}.
-%% Reference from a hunt request. This term will be included
-%% in a successful hunt response.
-
--opaque attach_ref() :: {mailbox(),integer()}.
-%% Reference from an attach request. This term will be included
-%% in the term returned when the attached mailbox disappears.
-
--export_type([mailbox_id/0,
- message_number/0,
- mailbox/0,
- hunt_ref/0,
- attach_ref/0]).
-
-%%==============================================================================
-%% Defines
-%%==============================================================================
--define(DRIVER_NAME, "ose_signal_drv").
--define(GET_SPID, 1).
--define(GET_NAME, 2).
--define(HUNT, 100).
--define(DEHUNT, 101).
--define(ATTACH, 102).
--define(DETACH, 103).
--define(SEND, 104).
--define(SEND_W_S, 105).
--define(LISTEN, 106).
--define(OPEN, 200).
-
--define(INT_32BIT(Int),(is_integer(Int) andalso (Int >= 0) andalso (Int < (1 bsl 32)))).
-
-%%==============================================================================
-%% API functions
-%%==============================================================================
-
-%%------------------------------------------------------------------------------
-%% @doc Create a mailbox with the given name and return a port that handles
-%% the mailbox.
-%%
-%% An OSE phantom process with the given name will be created that will send any
-%% messages sent through this mailbox. Any messages sent to the new OSE process
-%% will automatically be converted to an Erlang message and sent to the Erlang
-%% process that calls this function. See {@link listen/2} for details about the
-%% format of the message sent.
-%%
-%% The caller gets linked to the created mailbox.
-%%
-%% raises: `badarg' | `system_limit'
-%%
-%% @see listen/2
-%% @end
-%%------------------------------------------------------------------------------
--spec open(Name) -> Port when
- Name :: iodata(),
- Port :: mailbox().
-open(Name) ->
- try open_port({spawn_driver,?DRIVER_NAME}, [binary]) of
- Port ->
- try port_command(Port,[?OPEN,Name]) of
- true ->
- receive
- {ose_drv_reply,Port,{error,Error}} ->
- close(Port),
- erlang:error(Error,[Name]);
- {ose_drv_reply,Port,ok} ->
- Port
- end
- catch
- error:badarg -> close(Port),erlang:error(badarg,[Name])
- end
- catch
- error:badarg -> erlang:error(badarg,[Name])
- end.
-
-%%------------------------------------------------------------------------------
-%% @doc Close a mailbox
-%%
-%% This kills the OSE phantom process associated with this mailbox.
-%%
-%% Will also consume any ``{'EXIT',Port,_}'' message from the port that comes
-%% due to the port closing when the calling process traps exits.
-%%
-%% raises: `badarg'
-%% @end
-%%------------------------------------------------------------------------------
--spec close(Port) -> ok when
- Port :: mailbox().
-close(Port) when is_port(Port) ->
- %% Copied from prim_inet
- case erlang:process_info(self(), trap_exit) of
- {trap_exit,true} ->
- link(Port),
- catch erlang:port_close(Port),
- receive {'EXIT',Port,_} -> ok end;
- {trap_exit,false} ->
- catch erlang:port_close(Port),
- ok
- end;
-close(NotPort) ->
- erlang:error(badarg,[NotPort]).
-
-%%------------------------------------------------------------------------------
-%% @doc Get the mailbox id for the given port.
-%%
-%% The mailbox id is the same as the OSE process id of the OSE phantom process
-%% that this mailbox represents.
-%%
-%% raises: `badarg'
-%% @end
-%%------------------------------------------------------------------------------
--spec get_id(Port) -> Pid when
- Port :: mailbox(),
- Pid :: mailbox_id().
-get_id(Port) ->
- try port_control(Port, ?GET_SPID, <<>>) of
- <<Spid:32>> -> Spid
- catch error:_Error ->
- erlang:error(badarg,[Port])
- end.
-
-%%------------------------------------------------------------------------------
-%% @doc Get the mailbox name for the given mailbox id.
-%%
-%% The mailbox name is the name of the OSE process with process id Pid.
-%%
-%% This call will fail with badarg if the underlying system does not support
-%% getting the name from a process id.
-%%
-%% raises: `badarg'
-%% @end
-%%------------------------------------------------------------------------------
--spec get_name(Port, Pid) -> Name | undefined when
- Port :: mailbox(),
- Pid :: mailbox_id(),
- Name :: binary().
-get_name(Port, Pid) when ?INT_32BIT(Pid) ->
- try port_control(Port, ?GET_NAME, <<Pid:32>>) of
- [] -> undefined;
- Res -> Res
- catch error:_Error ->
- erlang:error(badarg,[Port,Pid])
- end;
-get_name(Port, Pid) ->
- erlang:error(badarg,[Port,Pid]).
-
-
-%%------------------------------------------------------------------------------
-%% @doc Hunt for OSE process by name.
-%%
-%% Will send `{mailbox_up, Port, Ref, MboxId}'
-%% to the calling process when the OSE process becomes available.
-%%
-%% Returns a reference term that can be used to cancel the hunt
-%% using {@link dehunt/2}.
-%%
-%% raises: `badarg'
-%%
-%% @end
-%%------------------------------------------------------------------------------
--spec hunt(Port, HuntPath) -> Ref when
- Port :: mailbox(),
- HuntPath :: iodata(),
- Ref :: hunt_ref().
-hunt(Port, HuntPath) ->
- try port_command(Port, [?HUNT,HuntPath]) of
- true ->
- receive
- {ose_drv_reply,Port,{error,Error}} ->
- erlang:error(Error,[Port,HuntPath]);
- {ose_drv_reply,Port,Ref} ->
- Ref
- end
- catch error:_Error ->
- erlang:error(badarg,[Port,HuntPath])
- end.
-
-%%------------------------------------------------------------------------------
-%% @doc Stop hunting for OSE process.
-%%
-%% If a message for this hunt has been sent but not received
-%% by the calling process, it is removed from the message queue.
-%% Note that this only works if the same process that did
-%% the hunt does the dehunt.
-%%
-%% raises: `badarg'
-%%
-%% @see hunt/2
-%% @end
-%%------------------------------------------------------------------------------
--spec dehunt(Port, Ref) -> ok when
- Port :: mailbox(),
- Ref :: hunt_ref().
-dehunt(Port, {Port,Ref}) when ?INT_32BIT(Ref) ->
- try port_command(Port, <<?DEHUNT:8, Ref:32>>) of
- true ->
- receive
- {ose_drv_reply,Port,{error,enoent}} ->
- %% enoent could mean that it is in the message queue
- receive
- {mailbox_up, Port, {Port,Ref}, _} ->
- ok
- after 0 ->
- ok
- end;
- {ose_drv_reply,Port,ok} ->
- ok
- end
- catch error:_Error ->
- erlang:error(badarg,[Port,{Port,Ref}])
- end;
-dehunt(Port,Ref) ->
- erlang:error(badarg,[Port,Ref]).
-
-%%------------------------------------------------------------------------------
-%% @doc Attach to an OSE process.
-%%
-%% Will send `{mailbox_down, Port, Ref, MboxId}'
-%% to the calling process if the OSE process exits.
-%%
-%% Returns a reference that can be used to cancel the attachment
-%% using {@link detach/2}.
-%%
-%% raises: `badarg' | `enomem'
-%%
-%% @end
-%%------------------------------------------------------------------------------
--spec attach(Port,Pid) -> Ref when
- Port :: mailbox(),
- Pid :: mailbox_id(),
- Ref :: attach_ref().
-attach(Port, Spid) when ?INT_32BIT(Spid) ->
- try port_command(Port, <<?ATTACH:8, Spid:32>>) of
- true ->
- receive
- {ose_drv_reply,Port,{error,Error}} ->
- erlang:error(Error,[Port,Spid]);
- {ose_drv_reply,Port,Ref} ->
- Ref
- end
- catch error:_Error ->
- erlang:error(badarg,[Port,Spid])
- end;
-attach(Port,Spid) ->
- erlang:error(badarg,[Port,Spid]).
-
-
-%%------------------------------------------------------------------------------
-%% @doc Remove attachment to an OSE process.
-%%
-%% If a message for this monitor has been sent but not received
-%% by the calling process, it is removed from the message queue.
-%% Note that this only works of the same process
-%% that did the attach does the detach.
-%%
-%% raises: `badarg'
-%%
-%% @see attach/2
-%% @end
-%%------------------------------------------------------------------------------
--spec detach(Port,Ref) -> ok when
- Port :: mailbox(),
- Ref :: attach_ref().
-detach(Port, {Port,Ref} ) when ?INT_32BIT(Ref) ->
- try port_command(Port, <<?DETACH:8, Ref:32>>) of
- true ->
- receive
- {ose_drv_reply,Port,{error,enoent}} ->
- %% enoent could mean that it is in the message queue
- receive
- {mailbox_down,Port,{Port,Ref},_} ->
- ok
- after 0 ->
- ok
- end;
- {ose_drv_reply,Port,ok} ->
- ok
- end
- catch error:_Error ->
- erlang:error(badarg,[Port,{Port,Ref}])
- end;
-detach(Port,Ref) ->
- erlang:error(badarg,[Port,Ref]).
-
-%%------------------------------------------------------------------------------
-%% @doc Send an OSE message.
-%%
-%% The message is sent from the OSE process' own ID that is: `get_id(Port)'.
-%%
-%% raises: `badarg'
-%%
-%% @see send/5
-%% @end
-%%------------------------------------------------------------------------------
--spec send(Port,Pid,SigNo,SigData) -> ok when
- Port :: mailbox(),
- Pid :: mailbox_id(),
- SigNo :: message_number(),
- SigData :: iodata().
-send(Port, Spid, SigNo, SigData) when ?INT_32BIT(Spid), ?INT_32BIT(SigNo) ->
- try erlang:port_command(Port, [<<?SEND:8, Spid:32, SigNo:32>>, SigData]) of
- true -> ok
- catch error:_Error ->
- erlang:error(badarg,[Port,Spid,SigNo,SigData])
- end;
-send(Port,Spid,SigNo,SigData) ->
- erlang:error(badarg,[Port,Spid,SigNo,SigData]).
-
-
-%%------------------------------------------------------------------------------
-%% @doc Send an OSE message with different sender.
-%%
-%% As {@link send/4} but the sender will be `SenderPid'.
-%%
-%% raises: `badarg'
-%%
-%% @see send/4
-%% @end
-%%------------------------------------------------------------------------------
--spec send(Port,Pid,SenderPid,SigNo,SigData) -> ok when
- Port :: mailbox(),
- Pid :: mailbox_id(),
- SenderPid :: mailbox_id(),
- SigNo :: message_number(),
- SigData :: iodata().
-send(Port, Spid, SenderPid, SigNo, SigData)
- when ?INT_32BIT(Spid), ?INT_32BIT(SenderPid), ?INT_32BIT(SigNo) ->
- try erlang:port_command(Port, [<<?SEND_W_S:8, Spid:32, SenderPid:32,
- SigNo:32>>, SigData]) of
- true -> ok
- catch error:_Error ->
- erlang:error(badarg,[Port,Spid,SenderPid,SigNo,SigData])
- end;
-send(Port,Spid,SenderPid,SigNo,SigData) ->
- erlang:error(badarg,[Port,Spid,SenderPid,SigNo,SigData]).
-
-%%------------------------------------------------------------------------------
-%% @doc Start listening for specified OSE signal numbers.
-%%
-%% The mailbox will send `{message,Port,{FromMboxId,ToMboxId,MsgNo,MsgData}}'
-%% to the process that created the mailbox when an OSE message with any
-%% of the specified `SigNos' arrives.
-%%
-%% Repeated calls to listen will replace the current set of signal numbers to
-%% listen to. i.e
-%%
-%% ```1>ose:listen(MsgB,[1234,12345]).
-%% ok
-%% 2> ose:listen(MsgB,[1234,123456]).
-%% ok.'''
-%%
-%% The above will first listen for signals with numbers 1234 and 12345, and then
-%% replace that with only listening to 1234 and 123456.
-%%
-%% With the current implementation it is not possible to listen to all signal
-%% numbers.
-%%
-%% raises: `badarg' | `enomem'
-%%
-%% @end
-%%------------------------------------------------------------------------------
--spec listen(Port, SigNos) -> ok when
- Port :: mailbox(),
- SigNos :: list(message_number()).
-listen(Port, SigNos) when is_list(SigNos) ->
- USSigNos = lists:usort(SigNos),
- BinSigNos = try
- << <<SigNo:32>> ||
- SigNo <- USSigNos,
- ?INT_32BIT(SigNo) orelse erlang:error(badarg)
- >>
- catch _:_ ->
- erlang:error(badarg,[Port,SigNos])
- end,
- try port_command(Port, [?LISTEN, BinSigNos]) of
- true ->
- receive
- {ose_drv_reply,Port,{error,Error}} ->
- erlang:error(Error,[Port,SigNos]);
- {ose_drv_reply,Port,Else} ->
- Else
- end
- catch error:_Error ->
- erlang:error(badarg,[Port,SigNos])
- end;
-listen(Port, SigNos) ->
- erlang:error(badarg,[Port,SigNos]).
-
-
-%%%=============================================================================
-%%% Internal functions
-%%%=============================================================================
diff --git a/lib/ose/test/Makefile b/lib/ose/test/Makefile
deleted file mode 100644
index 7e2080ba38..0000000000
--- a/lib/ose/test/Makefile
+++ /dev/null
@@ -1,67 +0,0 @@
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- ose_SUITE
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
-
-INSTALL_PROGS= $(TARGET_FILES)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/ose_test
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-
-ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include \
- -I$(ERL_TOP)/lib/kernel/include
-
-EBIN = .
-
-EMAKEFILE=Emakefile
-COVERFILE=ose.cover
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-make_emakefile:
- $(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) $(MODULES) \
- > $(EMAKEFILE)
-
-tests debug opt: make_emakefile
- erl $(ERL_MAKE_FLAGS) -make
-
-clean:
- rm -f $(EMAKEFILE)
- rm -f $(TARGET_FILES)
- rm -f core
-
-docs:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
-
-release_tests_spec: make_emakefile
- $(INSTALL_DIR) "$(RELSYSDIR)"
- $(INSTALL_DATA) ose.spec $(EMAKEFILE) \
- $(ERL_FILES) $(COVERFILE) "$(RELSYSDIR)"
- chmod -R u+w "$(RELSYSDIR)"
- @tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
-
-release_docs_spec:
diff --git a/lib/ose/test/ose.cover b/lib/ose/test/ose.cover
deleted file mode 100644
index 7b846cfaf6..0000000000
--- a/lib/ose/test/ose.cover
+++ /dev/null
@@ -1,2 +0,0 @@
-%% -*- erlang -*-
-{incl_app,ose,details}.
diff --git a/lib/ose/test/ose.spec b/lib/ose/test/ose.spec
deleted file mode 100644
index c897e8cd16..0000000000
--- a/lib/ose/test/ose.spec
+++ /dev/null
@@ -1 +0,0 @@
-{suites,"../ose_test",all}.
diff --git a/lib/ose/test/ose_SUITE.erl b/lib/ose/test/ose_SUITE.erl
deleted file mode 100644
index 31d950bd03..0000000000
--- a/lib/ose/test/ose_SUITE.erl
+++ /dev/null
@@ -1,766 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(ose_SUITE).
-
-%-compile(export_all).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,init_per_testcase/2,
- end_per_testcase/2]).
--export([
- basic/1,stress/1,multi_msg_numbers/1,multi_mailboxes/1,
- hunt/1,multi_hunt/1,dehunt/1,multi_dehunt/1,
- attach/1,multi_attach/1,detach/1,multi_detach/1,
- open_errors/1,close_errors/1,get_id_errors/1,get_name_errors/1,
- hunt_errors/1,dehunt_errors/1,attach_errors/1,detach_errors/1,
- send_errors/1,send_w_s_errors/1,listen_errors/1
- ]).
-
--define(INTERFACE,ose).
-
-
-init_per_testcase(_Func, Config) ->
- Config.
-end_per_testcase(_Func, _Config) ->
- ok.
-
-suite() -> [{timeout,{30,seconds}}].
-
-all() ->
- [
- basic,stress,multi_msg_numbers,multi_mailboxes,
- hunt,multi_hunt,dehunt,multi_dehunt,
- attach,multi_attach,detach,multi_detach,
-
- open_errors,close_errors,get_id_errors,get_name_errors,
- hunt_errors,dehunt_errors,attach_errors,detach_errors,
- send_errors,send_w_s_errors,listen_errors
- ].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- case os:type() of
- {ose,_} ->
- Config;
- _Else ->
- {skip,"Only run on OSE"}
- end.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-basic(_Config) ->
-
- [P1,P2] = multi_open(2,[42]),
- P1Id = ?INTERFACE:get_id(P1),
- P2Id = ?INTERFACE:get_id(P2),
-
- ok = ?INTERFACE:send(P2,P1Id,42,<<"ping">>),
- receive
- {message,P1,V1} ->
- {P2Id,P1Id,42,<<"ping">>} = V1,
- ?INTERFACE:send(P1,P2Id,42,<<"pong">>);
- Else1 ->
- ct:fail({got_wrong_message,Else1})
- end,
-
- receive
- {message,P2,V2} ->
- {P1Id,P2Id,42,<<"pong">>} = V2;
- Else2 ->
- ct:fail({got_wrong_message,Else2})
- end,
-
- ?INTERFACE:close(P1),
- ?INTERFACE:close(P2).
-
-%% Send 1000 messages and see if we can cope and that msg order is preserved
-stress(_Config) ->
-
- Iterations = 1000,
-
- [P1,P2] = multi_open(2,[42]),
- P1Id = ?INTERFACE:get_id(P1),
- P2Id = ?INTERFACE:get_id(P2),
-
- spawn(fun() ->
- n(fun(N) ->
- Msg = [<<"ping">>|integer_to_list(N)],
- ?INTERFACE:send(P2,P1Id,42,Msg)
- end,Iterations)
- end),
- timer:sleep(100),
- n(fun(N) ->
- receive
- {message,P1,Value} ->
- Int = integer_to_binary(N),
- {P2Id,P1Id,42,<<"ping",Int/binary>>} = Value,
- ok;
- Else ->
- ct:fail({got_wrong_message,Else})
- end
- end,Iterations),
-
- ?INTERFACE:close(P1),
- ?INTERFACE:close(P2).
-
-%% Listen to 1000 different message numbers and send some random messages
-multi_msg_numbers(_Config) ->
-
- Iterations = 100,
-
- [P1,P2] = multi_open(2,lists:seq(2000,3000)),
- P1Id = ?INTERFACE:get_id(P1),
-
- n(fun(_) ->
- Num = random:uniform(1000)+2000,
- ?INTERFACE:send(P2,P1Id,Num,<<"ping",(integer_to_binary(Num))/binary>>)
- end,Iterations),
-
- n(fun(_) ->
- receive
- {message,P1,{_,_,Id,<<"ping",Num/binary>>}} when Id > 2000;
- Id =< 3000 ->
- Id = binary_to_integer(Num),
- ok;
- Else ->
- ct:fail({got_wrong_message,Else})
- end
- end,Iterations),
-
- ?INTERFACE:close(P1),
- ?INTERFACE:close(P2).
-
-
-%% Create 100 mailboxes and send messages to them
-multi_mailboxes(_Config) ->
-
- Mailboxes = 100,
-
- [P1|MBs] = multi_open(Mailboxes,[42]),
-
- [?INTERFACE:send(P1,?INTERFACE:get_id(P),42,[<<"ping">>,?INTERFACE:get_name(P,?INTERFACE:get_id(P))]) || P <- MBs],
-
- [receive
- {message,P,Value} ->
- Name = ?INTERFACE:get_name(P,?INTERFACE:get_id(P)),
- {_,_,42,<<"ping",Name/binary>>} = Value,
- ok
- end || P <- MBs],
-
- [?INTERFACE:close(P) || P <- [P1|MBs]],
- ok.
-
-hunt(_Config) ->
- [P1,P2] = multi_open(2,[]),
-
- Ref = ?INTERFACE:hunt(P1,"p2"),
- receive
- {mailbox_up,P1,Ref,Pid} ->
- Pid = ?INTERFACE:get_id(P2),
- ?INTERFACE:close(P1),
- ?INTERFACE:close(P2);
- Else ->
- ct:fail({got_wrong_message,Else,Ref})
- end.
-
-multi_hunt(_Config) ->
-
- Iterations = 100,
-
- P = ?INTERFACE:open("p"),
-
- Refs = [?INTERFACE:hunt(P,"p"++integer_to_list(N))|| N <- lists:seq(1,Iterations)],
-
- Pids = [begin
- Prt = ?INTERFACE:open("p"++integer_to_list(N)),
- Pid = ?INTERFACE:get_id(Prt),
- ?INTERFACE:close(Prt),
- Pid
- end || N <- lists:seq(1,Iterations)],
-
- [receive
- {mailbox_up,P,Ref,Pid} ->
- ok
- after 10 ->
- ct:fail({did_not_get,Pid,Ref})
- end || {Pid,Ref} <- lists:zip(Pids,Refs)],
- ?INTERFACE:close(P).
-
-
-dehunt(_Config) ->
- [P1] = multi_open(1,[]),
- Ref = ?INTERFACE:hunt(P1,"p2"),
- receive
- _Else -> ct:fail({got,_Else})
- after 1000 ->
- ok
- end,
- P2 = ?INTERFACE:open("p2"),
-
- % Make sure any messages are sent
- receive after 10 -> ok end,
-
- ok = ?INTERFACE:dehunt(P1,Ref),
-
- % Make sure no messages are received
- receive
- _Else2 -> ct:fail({got,_Else2})
- after 1000 ->
- ?INTERFACE:close(P1),
- ?INTERFACE:close(P2)
- end.
-
-%%%
-%%% This testcase basically:
-%%% spawn 10 processes that in parallel
-%%% adds some hunts for different OSE processes
-%%% maybe create hunted OSE process
-%%% dehunt half of the hunts
-%%% create more hunts
-%%% if not created create hunted OSE process
-%%% veryify that all expected hunt messages are received
-%%% verify that all processes exited correctly
-%%%
-%%% This complex test is done to make sure that the internal handling
-%%% of dehunt works as expected.
-%%%
-multi_dehunt(_Config) ->
- [P1] = multi_open(1,[]),
-
- Scenario =
- fun(Iterations) ->
-
- Hunted = "p"++integer_to_list(Iterations),
- %% Start a couple of hunts
- Refs = [?INTERFACE:hunt(P1,Hunted) || _ <- lists:seq(1,Iterations)],
-
- %% We alternate if the process is opened before or after the dehunt
- P2O = if Iterations rem 2 == 0 ->
- ?INTERFACE:open(Hunted);
- true ->
- undefined
- end,
-
- %% Remove half of them
- {RemRefs,_} = lists:mapfoldl(fun(Ref,Acc) when Acc rem 2 == 0 ->
- ok = ?INTERFACE:dehunt(P1,Ref),
- {[],Acc+1};
- (Ref,Acc) ->
- {Ref,Acc+1}
- end,0,Refs),
-
- %% Add some new ones
- NewRefs = [?INTERFACE:hunt(P1,Hunted)
- || _ <- lists:seq(1,Iterations div 4)]
- ++ lists:flatten(RemRefs),
-
- P2 = if P2O == undefined ->
- ?INTERFACE:open(Hunted);
- true ->
- P2O
- end,
- P2Id = ?INTERFACE:get_id(P2),
-
- %% Receive all the expected ones
- lists:foreach(fun(Ref) ->
- receive
- {mailbox_up,P1,Ref,P2Id} ->
- ok
- after 1000 ->
- io:format("Flush: ~p~n",[flush()]),
- io:format("~p~n",[{Iterations,{did_not_get, Ref}}]),
- ok = Ref
- end
- end,NewRefs),
-
- %% Check that no other have arrived
- receive
- _Else ->
- io:format("Flush: ~p~n",[flush()]),
- io:format("~p~n",[{Iterations,{got, _Else}}]),
- ok = _Else
- after 100 ->
- ok
- end,
- ?INTERFACE:close(P2)
- end,
-
- Self = self(),
-
- n(fun(N) ->
- spawn(fun() -> Self !
- Scenario(N*25)
- end),
- ok
- end,10),
-
- n(fun(_N) ->
- receive ok -> ok
- after 60000 -> ct:fail(failed)
- end
- end,10),
- ?INTERFACE:close(P1).
-
-attach(_Config) ->
- [P1,P2] = multi_open(2,[]),
-
- P2Id = ?INTERFACE:get_id(P2),
- Ref = ?INTERFACE:attach(P1,P2Id),
- ?INTERFACE:close(P2),
- receive
- {mailbox_down,P1,Ref,P2Id} ->
- ?INTERFACE:close(P1);
- _Else ->
- ct:fail({got,_Else, {P1,Ref,P2Id}})
- after 1000 ->
- ct:fail({did_not_get,P1,Ref,P2Id})
- end.
-
-multi_attach(_Config) ->
-
- Iterations = 100,
-
- [P1|Pids] = multi_open(Iterations,[]),
-
- Refs = [{?INTERFACE:get_id(Pid),?INTERFACE:attach(P1,?INTERFACE:get_id(Pid))} || Pid <- Pids],
-
- [?INTERFACE:close(Pid) || Pid <- Pids],
-
- [receive
- {mailbox_down,P1,Ref,Pid} ->
- ok
- after 10000 ->
- ct:fail({did_not_get,Pid,Ref})
- end || {Pid,Ref} <- Refs],
- ?INTERFACE:close(P1).
-
-detach(_Config) ->
- [P1,P2] = multi_open(2,[]),
- P2Id = ?INTERFACE:get_id(P2),
- Ref = ?INTERFACE:attach(P1,P2Id),
- receive
- _Else -> ct:fail({got,_Else})
- after 100 ->
- ok
- end,
-
- ?INTERFACE:close(P2),
-
- % Make sure any messages are sent
- receive after 10 -> ok end,
-
- ?INTERFACE:detach(P1,Ref),
-
- % Make sure no messages are received
- receive
- _Else2 -> ct:fail({got,_Else2})
- after 1000 ->
- ?INTERFACE:close(P1)
- end.
-
-%%%
-%%% This testcase basically:
-%%% spawn 10 processes that in parallel
-%%% adds some attach for different OSE processes
-%%% maybe close OSE process
-%%% dehunt half of the hunts
-%%% create more hunts
-%%% if not closed close attached OSE process
-%%% veryify that all expected attach messages are received
-%%% verify that all processes exited correctly
-%%%
-%%% This complex test is done to make sure that the internal handling
-%%% of dehunt works as expected.
-%%%
-multi_detach(_Config) ->
- [P1] = multi_open(1,[]),
-
- Scenario =
- fun(Iterations) ->
-
- Attached = ?INTERFACE:open("p"++integer_to_list(Iterations)),
- AttachedId = ?INTERFACE:get_id(Attached),
- %% Start a couple of attachs
- Refs = [?INTERFACE:attach(P1,AttachedId) || _ <- lists:seq(1,Iterations)],
-
- %% We alternate if the process is closed before or after the detach
- P2O = if Iterations rem 2 == 0 ->
- ?INTERFACE:close(Attached);
- true ->
- undefined
- end,
-
- %% Remove half of them
- {RemRefs,_} = lists:mapfoldl(fun(Ref,Acc) when Acc rem 2 == 0 ->
- ok = ?INTERFACE:detach(P1,Ref),
- {[],Acc+1};
- (Ref,Acc) ->
- {Ref,Acc+1}
- end,0,Refs),
-
- %% Add some new ones
- NewRefs = [?INTERFACE:attach(P1,AttachedId)
- || _ <- lists:seq(1,Iterations div 4)]
- ++ lists:flatten(RemRefs),
-
- if P2O == undefined ->
- ?INTERFACE:close(Attached);
- true ->
- P2O
- end,
-
- %% Receive all the expected ones
- lists:foreach(fun(Ref) ->
- receive
- {mailbox_down,P1,Ref,AttachedId} ->
- ok
- after 1000 ->
- io:format("Flush: ~p~n",[flush()]),
- io:format("~p~n",[{Iterations,{did_not_get, Ref}}]),
- ok = Ref
- end
- end,NewRefs),
-
- %% Check that no other have arrived
- receive
- _Else ->
- io:format("Flush: ~p~n",[flush()]),
- io:format("~p~n",[{Iterations,{got, _Else}}]),
- ok = _Else
- after 100 ->
- ok
- end
- end,
-
- Self = self(),
-
- n(fun(N) ->
- spawn(fun() -> Self !
- Scenario(N*5)
- end),
- ok
- end,10),
-
- n(fun(_N) ->
- receive ok -> ok
- after 60000 -> ct:fail(failed)
- end
- end,10),
- ?INTERFACE:close(P1).
-
-
-open_errors(_Config) ->
- {'EXIT',{badarg,[{?INTERFACE,open,[inval],_}|_]}} =
- (catch ?INTERFACE:open(inval)),
- {'EXIT',{badarg,[{?INTERFACE,open,[["p"|1]],_}|_]}} =
- (catch ?INTERFACE:open(["p"|1])),
- {'EXIT',{badarg,[{?INTERFACE,open,[["p",1234]],_}|_]}} =
- (catch ?INTERFACE:open(["p",1234])),
-
- ok.
-
-close_errors(_Config) ->
- {'EXIT',{badarg,[{?INTERFACE,close,[inval],_}|_]}} =
- (catch ?INTERFACE:close(inval)),
-
- P1 = ?INTERFACE:open("p1"),
- ok = ?INTERFACE:close(P1),
- ok = ?INTERFACE:close(P1).
-
-
-get_id_errors(_Config) ->
- {'EXIT',{badarg,[{?INTERFACE,get_id,[inval],_}|_]}} =
- (catch ?INTERFACE:get_id(inval)),
-
- P1 = ?INTERFACE:open("p1"),
- ok = ?INTERFACE:close(P1),
- {'EXIT',{badarg,[{?INTERFACE,get_id,[P1],_}|_]}} =
- (catch ?INTERFACE:get_id(P1)),
-
- ok.
-
-get_name_errors(_Config) ->
- P1 = ?INTERFACE:open("p1"),
- {'EXIT',{badarg,[{?INTERFACE,get_name,[P1,inval],_}|_]}} =
- (catch ?INTERFACE:get_name(P1,inval)),
-
- undefined = ?INTERFACE:get_name(P1,1234),
-
- P2 = ?INTERFACE:open("p2"),
- P2Id = ?INTERFACE:get_id(P2),
- ok = ?INTERFACE:close(P1),
- {'EXIT',{badarg,[{?INTERFACE,get_name,[P1,P2Id],_}|_]}} =
- (catch ?INTERFACE:get_name(P1,P2Id)),
- ?INTERFACE:close(P2),
-
- P3 = ?INTERFACE:open([255]),
- <<255>> = ?INTERFACE:get_name(P3, ?INTERFACE:get_id(P3)),
- ?INTERFACE:close(P3),
-
- ok.
-
-hunt_errors(_Config) ->
-
- {'EXIT',{badarg,[{?INTERFACE,hunt,[inval,"hello"],_}|_]}} =
- (catch ?INTERFACE:hunt(inval,"hello")),
-
- P1 = ?INTERFACE:open("p1"),
- {'EXIT',{badarg,[{?INTERFACE,hunt,[P1,["hello",12345]],_}|_]}} =
- (catch ?INTERFACE:hunt(P1,["hello",12345])),
-
- P2 = ?INTERFACE:open(<<255>>),
- P2Pid = ?INTERFACE:get_id(P2),
- Ref = ?INTERFACE:hunt(P1,[255]),
- receive
- {mailbox_up,P1,Ref,P2Pid} ->
- ok;
- Else ->
- ct:fail({got,Else,{mailbox_up,P1,Ref,P2Pid}})
- after 150 ->
- ct:fail({did_not_get,{mailbox_up,P1,Ref,P2Pid}})
- end,
-
- ok = ?INTERFACE:close(P1),
- ok = ?INTERFACE:close(P2),
- {'EXIT',{badarg,[{?INTERFACE,hunt,[P1,["hello"]],_}|_]}} =
- (catch ?INTERFACE:hunt(P1,["hello"])),
-
- ok.
-
-dehunt_errors(_Config) ->
- P1 = ?INTERFACE:open("p1"),
- Ref = ?INTERFACE:hunt(P1,"p2"),
-
- {'EXIT',{badarg,[{?INTERFACE,dehunt,[inval,Ref],_}|_]}} =
- (catch ?INTERFACE:dehunt(inval,Ref)),
-
- {'EXIT',{badarg,[{?INTERFACE,dehunt,[P1,inval],_}|_]}} =
- (catch ?INTERFACE:dehunt(P1,inval)),
-
- ok = ?INTERFACE:dehunt(P1,Ref),
- ok = ?INTERFACE:dehunt(P1,Ref),
-
- ok = ?INTERFACE:close(P1),
-
- {'EXIT',{badarg,[{?INTERFACE,dehunt,[P1,Ref],_}|_]}} =
- (catch ?INTERFACE:dehunt(P1,Ref)),
-
- case ?INTERFACE of
- ose -> ok;
- _ ->
- P2 = ?INTERFACE:open("p2"),
- ok = ?INTERFACE:close(P2)
- end,
-
- receive
- Else -> ct:fail({got,Else})
- after 100 ->
- ok
- end.
-
-attach_errors(_Config) ->
- P1 = ?INTERFACE:open("p1"),
- P2 = ?INTERFACE:open("p2"),
- P2Id = ?INTERFACE:get_id(P2),
-
- {'EXIT',{badarg,[{?INTERFACE,attach,[inval,P2Id],_}|_]}} =
- (catch ?INTERFACE:attach(inval,P2Id)),
-
- {'EXIT',{badarg,[{?INTERFACE,attach,[P1,[12345]],_}|_]}} =
- (catch ?INTERFACE:attach(P1,[12345])),
-
- ok = ?INTERFACE:close(P1),
- ok = ?INTERFACE:close(P2),
- {'EXIT',{badarg,[{?INTERFACE,attach,[P1,P2Id],_}|_]}} =
- (catch ?INTERFACE:attach(P1,P2Id)),
-
- ok.
-
-detach_errors(_Config) ->
- P1 = ?INTERFACE:open("p1"),
- P2 = ?INTERFACE:open("p2"),
- P2Id = ?INTERFACE:get_id(P2),
-
- Ref = ?INTERFACE:attach(P1,P2Id),
-
- {'EXIT',{badarg,[{?INTERFACE,detach,[inval,Ref],_}|_]}} =
- (catch ?INTERFACE:detach(inval,Ref)),
-
- {'EXIT',{badarg,[{?INTERFACE,detach,[P1,inval],_}|_]}} =
- (catch ?INTERFACE:detach(P1,inval)),
-
- ok = ?INTERFACE:detach(P1,Ref),
- ok = ?INTERFACE:detach(P1,Ref),
-
- case ?INTERFACE of
- ose -> ok;
- _ ->
- ok = ?INTERFACE:close(P1)
- end,
-
- ok = ?INTERFACE:close(P2),
- ok = ?INTERFACE:close(P1),
-
- {'EXIT',{badarg,[{?INTERFACE,detach,[P1,Ref],_}|_]}} =
- (catch ?INTERFACE:detach(P1,Ref)),
-
- receive
- Else -> ct:fail({got,Else})
- after 100 ->
- ok
- end.
-
-send_errors(_Config) ->
- P1 = ?INTERFACE:open("p1"),
- P2 = ?INTERFACE:open("p2"),
- P2Id = ?INTERFACE:get_id(P2),
-
- {'EXIT',{badarg,[{?INTERFACE,send,[inval,P2Id,42,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(inval,P2Id,42,"hello")),
- {'EXIT',{badarg,[{?INTERFACE,send,[P1,inval,42,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(P1,inval,42,"hello")),
- {'EXIT',{badarg,[{?INTERFACE,send,[P1,P2Id,inval,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(P1,P2Id,inval,"hello")),
- {'EXIT',{badarg,[{?INTERFACE,send,[P1,P2Id,42,inval],_}|_]}} =
- (catch ?INTERFACE:send(P1,P2Id,42,inval)),
-
- ok = ?INTERFACE:close(P2),
- ok = ?INTERFACE:send(P1,P2Id,42,"hello"),
- ok = ?INTERFACE:close(P1),
-
- {'EXIT',{badarg,[{?INTERFACE,send,[P1,P2Id,42,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(P1,P2Id,42,"hello")),
-
- receive
- Else -> ct:fail({got,Else})
- after 100 ->
- ok
- end.
-
-send_w_s_errors(_Config) ->
- P1 = ?INTERFACE:open("p1"),
- P1Id = ?INTERFACE:get_id(P1),
- P2 = ?INTERFACE:open("p2"),
- P2Id = ?INTERFACE:get_id(P2),
- P3 = ?INTERFACE:open("p3"),
- P3Id = ?INTERFACE:get_id(P3),
-
- {'EXIT',{badarg,[{?INTERFACE,send,[inval,P2Id,P1Id,42,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(inval,P2Id,P1Id,42,"hello")),
- {'EXIT',{badarg,[{?INTERFACE,send,[P2,-1,P1Id,42,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(P2,-1,P1Id,42,"hello")),
- {'EXIT',{badarg,[{?INTERFACE,send,[P2,P2Id,1 bsl 32,42,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(P2,P2Id,1 bsl 32,42,"hello")),
- {'EXIT',{badarg,[{?INTERFACE,send,[P2,P2Id,P1Id,inval,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(P2,P2Id,P1Id,inval,"hello")),
- {'EXIT',{badarg,[{?INTERFACE,send,[P2,P2Id,P1Id,42,inval],_}|_]}} =
- (catch ?INTERFACE:send(P2,P2Id,P1Id,42,inval)),
-
- ok = ?INTERFACE:close(P3),
- ok = ?INTERFACE:send(P2,P3Id,P1Id,42,"hello"),
-
- ok = ?INTERFACE:close(P1),
- ok = ?INTERFACE:send(P2,P2Id,P1Id,42,"hello"),
- ok = ?INTERFACE:close(P2),
-
- {'EXIT',{badarg,[{?INTERFACE,send,[P1,P2Id,P1Id,42,"hello"],_}|_]}} =
- (catch ?INTERFACE:send(P1,P2Id,P1Id,42,"hello")),
-
- receive
- Else -> ct:fail({got,Else})
- after 100 ->
- ok
- end.
-
-listen_errors(_Config) ->
-
- P1 = ?INTERFACE:open("p1"),
- P1Id = ?INTERFACE:get_id(P1),
-
- {'EXIT',{badarg,[{?INTERFACE,listen,[inval,[42]],_}|_]}} =
- (catch ?INTERFACE:listen(inval,[42])),
- {'EXIT',{badarg,[{?INTERFACE,listen,[P1,inval],_}|_]}} =
- (catch ?INTERFACE:listen(P1,inval)),
- {'EXIT',{badarg,[{?INTERFACE,listen,[P1,[1 bsl 33]],_}|_]}} =
- (catch ?INTERFACE:listen(P1,[1 bsl 33])),
-
- ok = ?INTERFACE:listen(P1,[42,42,42,42,42,42,42,42,42,42,42,42,42]),
-
- case ?INTERFACE of
- ose -> ok;
- _ ->
- ?INTERFACE:send(P1,P1Id,42,"hello"),
- timer:sleep(50),
- ?INTERFACE:listen(P1,[]),
- ?INTERFACE:send(P1,P1Id,42,"hello2"),
-
- receive
- {message,P1,42,"hello"} -> ok
- end,
-
- receive
- Else -> ct:fail({got,Else})
- after 100 ->
- ok
- end
- end,
-
- ok = ?INTERFACE:close(P1),
- {'EXIT',{badarg,[{?INTERFACE,listen,[P1,[42]],_}|_]}} =
- (catch ?INTERFACE:listen(P1,[42])),
-
- ok.
-
-%%
-%% Internal functions
-%%
-multi_open(N,ListenNums) ->
- multi_open(N,ListenNums,[]).
-
-multi_open(0,_,Acc) ->
- Acc;
-multi_open(N,ListenNums,Acc) ->
- P = ?INTERFACE:open("p"++integer_to_list(N)),
- ok = ?INTERFACE:listen(P,ListenNums),
- multi_open(N-1,ListenNums,[P|Acc]).
-
-n(_F,0) ->
- ok;
-n(F,N) ->
- ok = F(N),
- n(F,N-1).
-
-
-flush() ->
- receive
- Msg ->
- [Msg|flush()]
- after 0 ->
- []
- end.
diff --git a/lib/ose/vsn.mk b/lib/ose/vsn.mk
deleted file mode 100644
index fb1cf8219f..0000000000
--- a/lib/ose/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-OSE_VSN = 1.1
diff --git a/lib/otp_mibs/Makefile b/lib/otp_mibs/Makefile
index 2dfab524fd..64bd683c7a 100644
--- a/lib/otp_mibs/Makefile
+++ b/lib/otp_mibs/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2009. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/doc/src/Makefile b/lib/otp_mibs/doc/src/Makefile
index 3f9d8cc004..62698b9300 100644
--- a/lib/otp_mibs/doc/src/Makefile
+++ b/lib/otp_mibs/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/doc/src/book.xml b/lib/otp_mibs/doc/src/book.xml
index 1c3a3fdea4..482da46876 100644
--- a/lib/otp_mibs/doc/src/book.xml
+++ b/lib/otp_mibs/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/otp_mibs/doc/src/introduction.xml b/lib/otp_mibs/doc/src/introduction.xml
index 4236e45aae..7046cbb8ae 100644
--- a/lib/otp_mibs/doc/src/introduction.xml
+++ b/lib/otp_mibs/doc/src/introduction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/otp_mibs/doc/src/mibs.xml b/lib/otp_mibs/doc/src/mibs.xml
index 11900d3399..a32d5ea5f5 100644
--- a/lib/otp_mibs/doc/src/mibs.xml
+++ b/lib/otp_mibs/doc/src/mibs.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/otp_mibs/doc/src/notes.xml b/lib/otp_mibs/doc/src/notes.xml
index 5dd112e937..dbd2f47ffb 100644
--- a/lib/otp_mibs/doc/src/notes.xml
+++ b/lib/otp_mibs/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,21 @@
<p>This document describes the changes made to the OTP_Mibs
application.</p>
+<section><title>Otp_Mibs 1.1.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Otp_Mibs 1.1</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/otp_mibs/doc/src/otp_mib.xml b/lib/otp_mibs/doc/src/otp_mib.xml
index bf9c474ec4..681ce9fa2d 100644
--- a/lib/otp_mibs/doc/src/otp_mib.xml
+++ b/lib/otp_mibs/doc/src/otp_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/otp_mibs/doc/src/part.xml b/lib/otp_mibs/doc/src/part.xml
index c03254f96e..0a8ddce268 100644
--- a/lib/otp_mibs/doc/src/part.xml
+++ b/lib/otp_mibs/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/otp_mibs/doc/src/part_notes.xml b/lib/otp_mibs/doc/src/part_notes.xml
index be65d59fdb..5c03d28720 100644
--- a/lib/otp_mibs/doc/src/part_notes.xml
+++ b/lib/otp_mibs/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/otp_mibs/doc/src/ref_man.xml b/lib/otp_mibs/doc/src/ref_man.xml
index 52576b160b..06c5aadcd9 100644
--- a/lib/otp_mibs/doc/src/ref_man.xml
+++ b/lib/otp_mibs/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/otp_mibs/mibs/Makefile b/lib/otp_mibs/mibs/Makefile
index 01333dcac4..11d790d014 100644
--- a/lib/otp_mibs/mibs/Makefile
+++ b/lib/otp_mibs/mibs/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/mibs/OTP-EVA-MIB.mib b/lib/otp_mibs/mibs/OTP-EVA-MIB.mib
index 24031478dc..4d0c53ed95 100644
--- a/lib/otp_mibs/mibs/OTP-EVA-MIB.mib
+++ b/lib/otp_mibs/mibs/OTP-EVA-MIB.mib
@@ -1,7 +1,7 @@
--
-- %CopyrightBegin%
--
--- Copyright Ericsson AB 2004-2009. All Rights Reserved.
+-- Copyright Ericsson AB 2004-2016. All Rights Reserved.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/mibs/OTP-MIB.mib b/lib/otp_mibs/mibs/OTP-MIB.mib
index 8d7d920765..693319eae4 100644
--- a/lib/otp_mibs/mibs/OTP-MIB.mib
+++ b/lib/otp_mibs/mibs/OTP-MIB.mib
@@ -1,7 +1,7 @@
--
-- %CopyrightBegin%
--
--- Copyright Ericsson AB 1996-2009. All Rights Reserved.
+-- Copyright Ericsson AB 1996-2016. All Rights Reserved.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/mibs/OTP-REG.mib b/lib/otp_mibs/mibs/OTP-REG.mib
index 68b4ee3882..bf1585061c 100644
--- a/lib/otp_mibs/mibs/OTP-REG.mib
+++ b/lib/otp_mibs/mibs/OTP-REG.mib
@@ -1,7 +1,7 @@
--
-- %CopyrightBegin%
--
--- Copyright Ericsson AB 1997-2009. All Rights Reserved.
+-- Copyright Ericsson AB 1997-2016. All Rights Reserved.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/mibs/OTP-TC.mib b/lib/otp_mibs/mibs/OTP-TC.mib
index ca7625f9e2..efe5451f0c 100644
--- a/lib/otp_mibs/mibs/OTP-TC.mib
+++ b/lib/otp_mibs/mibs/OTP-TC.mib
@@ -1,7 +1,7 @@
--
-- %CopyrightBegin%
--
--- Copyright Ericsson AB 1997-2009. All Rights Reserved.
+-- Copyright Ericsson AB 1997-2016. All Rights Reserved.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/src/Makefile b/lib/otp_mibs/src/Makefile
index 03892cd43d..4023f50d48 100644
--- a/lib/otp_mibs/src/Makefile
+++ b/lib/otp_mibs/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/src/otp_mib.erl b/lib/otp_mibs/src/otp_mib.erl
index bd814e01e0..1431818be4 100644
--- a/lib/otp_mibs/src/otp_mib.erl
+++ b/lib/otp_mibs/src/otp_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/src/otp_mibs.app.src b/lib/otp_mibs/src/otp_mibs.app.src
index f4eb34d627..75ef25c366 100644
--- a/lib/otp_mibs/src/otp_mibs.app.src
+++ b/lib/otp_mibs/src/otp_mibs.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/src/otp_mibs.appup.src b/lib/otp_mibs/src/otp_mibs.appup.src
index 6b8fe71775..9437ae2222 100644
--- a/lib/otp_mibs/src/otp_mibs.appup.src
+++ b/lib/otp_mibs/src/otp_mibs.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/otp_mibs/test/Makefile b/lib/otp_mibs/test/Makefile
index e1cfbb347d..9736cf8bce 100644
--- a/lib/otp_mibs/test/Makefile
+++ b/lib/otp_mibs/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -49,7 +49,6 @@ RELSYSDIR = $(RELEASE_PATH)/otp_mibs_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
ERL_COMPILE_FLAGS += \
- -I$(ERL_TOP)/lib/test_server/include \
-I$(ERL_TOP)/lib/snmp/include
# ----------------------------------------------------
diff --git a/lib/otp_mibs/test/otp_mibs_SUITE.erl b/lib/otp_mibs/test/otp_mibs_SUITE.erl
index abb5aa8194..cb3cd28200 100644
--- a/lib/otp_mibs/test/otp_mibs_SUITE.erl
+++ b/lib/otp_mibs/test/otp_mibs_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
%% > ct_run -suite otp_mibs_SUITE -config otp_mibs_SUITE.cfg
%%-----------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("otp_mibs/include/OTP-MIB.hrl").
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/otp_mibs/vsn.mk b/lib/otp_mibs/vsn.mk
index 38436d363e..7a793007ee 100644
--- a/lib/otp_mibs/vsn.mk
+++ b/lib/otp_mibs/vsn.mk
@@ -1,4 +1,4 @@
-OTP_MIBS_VSN = 1.1
+OTP_MIBS_VSN = 1.1.1
# Note: The branch 'otp_mibs' is defunct as of otp_mibs-1.0.4 and
# should NOT be used again.
diff --git a/lib/parsetools/Makefile b/lib/parsetools/Makefile
index 8397c2550d..e9de5c43cb 100644
--- a/lib/parsetools/Makefile
+++ b/lib/parsetools/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/parsetools/doc/src/Makefile b/lib/parsetools/doc/src/Makefile
index 97157d99e5..8b03ed0fc7 100644
--- a/lib/parsetools/doc/src/Makefile
+++ b/lib/parsetools/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/parsetools/doc/src/book.xml b/lib/parsetools/doc/src/book.xml
index 0853d2fdb3..f37c352c78 100644
--- a/lib/parsetools/doc/src/book.xml
+++ b/lib/parsetools/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/parsetools/doc/src/leex.xml b/lib/parsetools/doc/src/leex.xml
index 85680f58a6..29d546105f 100644
--- a/lib/parsetools/doc/src/leex.xml
+++ b/lib/parsetools/doc/src/leex.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2009</year><year>2013</year>
+ <year>2009</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/parsetools/doc/src/notes.xml b/lib/parsetools/doc/src/notes.xml
index 43840a3bc7..b826b4d03a 100644
--- a/lib/parsetools/doc/src/notes.xml
+++ b/lib/parsetools/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,21 @@
</header>
<p>This document describes the changes made to the Parsetools application.</p>
+<section><title>Parsetools 2.1.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Parsetools 2.1.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/parsetools/doc/src/notes_history.xml b/lib/parsetools/doc/src/notes_history.xml
index 2008a7c3e6..311711becf 100644
--- a/lib/parsetools/doc/src/notes_history.xml
+++ b/lib/parsetools/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/parsetools/doc/src/part_notes.xml b/lib/parsetools/doc/src/part_notes.xml
index 4164e7cc24..5e0824e839 100644
--- a/lib/parsetools/doc/src/part_notes.xml
+++ b/lib/parsetools/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/parsetools/doc/src/ref_man.xml b/lib/parsetools/doc/src/ref_man.xml
index 0b9c6f3a29..a06221250f 100644
--- a/lib/parsetools/doc/src/ref_man.xml
+++ b/lib/parsetools/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/parsetools/doc/src/yecc.xml b/lib/parsetools/doc/src/yecc.xml
index 87fdfcdaef..6ec9fb5f0e 100644
--- a/lib/parsetools/doc/src/yecc.xml
+++ b/lib/parsetools/doc/src/yecc.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/parsetools/src/Makefile b/lib/parsetools/src/Makefile
index dbecdd24a5..dea29bee4c 100644
--- a/lib/parsetools/src/Makefile
+++ b/lib/parsetools/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/parsetools/src/parsetools.appup.src b/lib/parsetools/src/parsetools.appup.src
index 96df029f96..023e9324d1 100644
--- a/lib/parsetools/src/parsetools.appup.src
+++ b/lib/parsetools/src/parsetools.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/parsetools/src/yecc.erl b/lib/parsetools/src/yecc.erl
index 9d00675931..1b426141a1 100644
--- a/lib/parsetools/src/yecc.erl
+++ b/lib/parsetools/src/yecc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/parsetools/src/yeccscan.erl b/lib/parsetools/src/yeccscan.erl
index 56e2e5d3f4..6dbf6872bc 100644
--- a/lib/parsetools/src/yeccscan.erl
+++ b/lib/parsetools/src/yeccscan.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/parsetools/test/Makefile b/lib/parsetools/test/Makefile
index f84bb0e75e..046b29067b 100644
--- a/lib/parsetools/test/Makefile
+++ b/lib/parsetools/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2005-2012. All Rights Reserved.
+# Copyright Ericsson AB 2005-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -41,7 +41,7 @@ RELSYSDIR = $(RELEASE_PATH)/parsetools_test
# FLAGS
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/parsetools/test/leex_SUITE.erl b/lib/parsetools/test/leex_SUITE.erl
index 1e3738de85..949ef3c36e 100644
--- a/lib/parsetools/test/leex_SUITE.erl
+++ b/lib/parsetools/test/leex_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,7 +31,7 @@
-define(privdir, "leex_SUITE_priv").
-define(t, test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(datadir, ?config(data_dir, Config)).
-define(privdir, ?config(priv_dir, Config)).
-endif.
diff --git a/lib/parsetools/test/yecc_SUITE.erl b/lib/parsetools/test/yecc_SUITE.erl
index 6603a5a07d..3710569aba 100644
--- a/lib/parsetools/test/yecc_SUITE.erl
+++ b/lib/parsetools/test/yecc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
-define(privdir, "yecc_SUITE_priv").
-define(t, test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(datadir, ?config(data_dir, Config)).
-define(privdir, ?config(priv_dir, Config)).
-endif.
diff --git a/lib/parsetools/vsn.mk b/lib/parsetools/vsn.mk
index de3da23c8a..befdd82d6e 100644
--- a/lib/parsetools/vsn.mk
+++ b/lib/parsetools/vsn.mk
@@ -1 +1 @@
-PARSETOOLS_VSN = 2.1.1
+PARSETOOLS_VSN = 2.1.2
diff --git a/lib/percept/Makefile b/lib/percept/Makefile
index 2c6a970574..1f51bd2fef 100644
--- a/lib/percept/Makefile
+++ b/lib/percept/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2009. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/percept/doc/src/Makefile b/lib/percept/doc/src/Makefile
index 604c6d1db1..2f84d61cbc 100644
--- a/lib/percept/doc/src/Makefile
+++ b/lib/percept/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2012. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/percept/doc/src/book.xml b/lib/percept/doc/src/book.xml
index 1f12d57892..5acba1f214 100644
--- a/lib/percept/doc/src/book.xml
+++ b/lib/percept/doc/src/book.xml
@@ -5,7 +5,7 @@
<header titlestyle="normal">
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/percept/doc/src/egd_ug.xmlsrc b/lib/percept/doc/src/egd_ug.xmlsrc
index 253bfcaeb5..85d41ada79 100644
--- a/lib/percept/doc/src/egd_ug.xmlsrc
+++ b/lib/percept/doc/src/egd_ug.xmlsrc
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -51,24 +51,27 @@
</section>
<section>
<title>File example</title>
- <p>Drawing examples:</p>
- <codeinclude file="img.erl" tag="" type="none"></codeinclude>
- <image file="test1.gif">
- First save.
- <icaption>test1.png</icaption>
- </image>
- <image file="test2.gif">
- Second save.
- <icaption>test2.png</icaption>
- </image>
- <image file="test3.gif">
- Third save.
- <icaption>test3.png</icaption>
- </image>
- <image file="test4.gif">
- Fourth save.
- <icaption>test4.png</icaption>
- </image>
+ <p>Drawing examples:</p>
+ <codeinclude file="img.erl" tag="" type="none"></codeinclude>
+ <p> First save. </p>
+ <image file="test1.gif">
+ <icaption>test1.png</icaption>
+ </image>
+
+ <p> Second save. </p>
+ <image file="test2.gif">
+ <icaption>test2.png</icaption>
+ </image>
+
+ <p> Third save. </p>
+ <image file="test3.gif">
+ <icaption>test3.png</icaption>
+ </image>
+
+ <p> Fourth save. </p>
+ <image file="test4.gif">
+ <icaption>test4.png</icaption>
+ </image>
</section>
<section>
<title>ESI example</title>
diff --git a/lib/percept/doc/src/notes.xml b/lib/percept/doc/src/notes.xml
index 74183eb251..c9d5d3ae29 100644
--- a/lib/percept/doc/src/notes.xml
+++ b/lib/percept/doc/src/notes.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -33,6 +33,35 @@
</header>
<p>This document describes the changes made to the Percept application.</p>
+<section><title>Percept 0.9</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Remove deprecated <c>erlang:now/0</c> calls</p>
+ <p>
+ Own Id: OTP-13422</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Improve line implementation</p>
+ <p>
+ Add capabilities for line thickness and anti-aliasing.</p>
+ <p>
+ Own Id: OTP-13598</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Percept 0.8.11</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/percept/doc/src/part.xml b/lib/percept/doc/src/part.xml
index 135532a9e6..277d89d45c 100644
--- a/lib/percept/doc/src/part.xml
+++ b/lib/percept/doc/src/part.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/percept/doc/src/part_notes.xml b/lib/percept/doc/src/part_notes.xml
index 458b5d3ea3..f428b4fd81 100644
--- a/lib/percept/doc/src/part_notes.xml
+++ b/lib/percept/doc/src/part_notes.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/percept/doc/src/percept_ug.xmlsrc b/lib/percept/doc/src/percept_ug.xmlsrc
index 4791deea22..0d243cdabe 100644
--- a/lib/percept/doc/src/percept_ug.xmlsrc
+++ b/lib/percept/doc/src/percept_ug.xmlsrc
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/percept/doc/src/ref_man.xml b/lib/percept/doc/src/ref_man.xml
index b95fc56973..143312489b 100644
--- a/lib/percept/doc/src/ref_man.xml
+++ b/lib/percept/doc/src/ref_man.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/percept/doc/stylesheet.css b/lib/percept/doc/stylesheet.css
index 86280a8fc4..24d8a02145 100644
--- a/lib/percept/doc/stylesheet.css
+++ b/lib/percept/doc/stylesheet.css
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2007-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2007-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/percept/priv/Makefile b/lib/percept/priv/Makefile
index 44229c9567..a1912edfc0 100644
--- a/lib/percept/priv/Makefile
+++ b/lib/percept/priv/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2012. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/percept/priv/server_root/css/percept.css b/lib/percept/priv/server_root/css/percept.css
index 7335e62387..2d0734b6b6 100644
--- a/lib/percept/priv/server_root/css/percept.css
+++ b/lib/percept/priv/server_root/css/percept.css
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2007-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2007-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/percept/priv/server_root/htdocs/index.html b/lib/percept/priv/server_root/htdocs/index.html
index e84d8fb10a..f7322cba89 100644
--- a/lib/percept/priv/server_root/htdocs/index.html
+++ b/lib/percept/priv/server_root/htdocs/index.html
@@ -1,7 +1,7 @@
<!--
%CopyrightBegin%
- Copyright Ericsson AB 2007-2009. All Rights Reserved.
+ Copyright Ericsson AB 2007-2016. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/lib/percept/priv/server_root/scripts/percept_area_select.js b/lib/percept/priv/server_root/scripts/percept_area_select.js
index 6dd64650be..83fbb02c92 100644
--- a/lib/percept/priv/server_root/scripts/percept_area_select.js
+++ b/lib/percept/priv/server_root/scripts/percept_area_select.js
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2007-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2007-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/percept/priv/server_root/scripts/percept_error_handler.js b/lib/percept/priv/server_root/scripts/percept_error_handler.js
index 8bad57a5b7..dad8f2b566 100644
--- a/lib/percept/priv/server_root/scripts/percept_error_handler.js
+++ b/lib/percept/priv/server_root/scripts/percept_error_handler.js
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2007-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2007-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/percept/priv/server_root/scripts/percept_select_all.js b/lib/percept/priv/server_root/scripts/percept_select_all.js
index 118741b7de..c8eb966059 100644
--- a/lib/percept/priv/server_root/scripts/percept_select_all.js
+++ b/lib/percept/priv/server_root/scripts/percept_select_all.js
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2007-2009. All Rights Reserved.
+ * Copyright Ericsson AB 2007-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/percept/src/Makefile b/lib/percept/src/Makefile
index 9b963e0fae..b2ec87d08c 100644
--- a/lib/percept/src/Makefile
+++ b/lib/percept/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2012. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/percept/src/egd.erl b/lib/percept/src/egd.erl
index 3a065c8919..fe52da71f1 100644
--- a/lib/percept/src/egd.erl
+++ b/lib/percept/src/egd.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -37,9 +37,7 @@
-include("egd.hrl").
%%==========================================================================
-%%
-%% Type definitions
-%%
+%% Type definitions
%%==========================================================================
%% @type egd_image()
@@ -54,9 +52,7 @@
-type color() :: {float(), float(), float(), float()}.
%%==========================================================================
-%%
-%% Interface functions
-%%
+%% Interface functions
%%==========================================================================
%% @spec create(integer(), integer()) -> egd_image()
@@ -74,8 +70,7 @@ create(Width,Height) ->
-spec destroy(Image :: egd_image()) -> ok.
destroy(Image) ->
- cast(Image, destroy),
- ok.
+ cast(Image, destroy).
%% @spec render(egd_image()) -> binary()
@@ -113,8 +108,7 @@ render(Image, Type, Options) ->
%% mainly.
information(Pid) ->
- cast(Pid, information),
- ok.
+ cast(Pid, information).
%% @spec line(egd_image(), point(), point(), color()) -> ok
%% @doc Creates a line object from P1 to P2 in the image.
@@ -126,8 +120,7 @@ information(Pid) ->
Color :: color()) -> 'ok'.
line(Image, P1, P2, Color) ->
- cast(Image, {line, P1, P2, Color}),
- ok.
+ cast(Image, {line, P1, P2, Color}).
%% @spec color( Value | Name ) -> color()
%% where
@@ -152,74 +145,67 @@ color(_Image, Color) ->
%% @doc Creates a text object.
text(Image, P, Font, Text, Color) ->
- cast(Image, {text, P, Font, Text, Color}),
- ok.
+ cast(Image, {text, P, Font, Text, Color}).
%% @spec rectangle(egd_image(), point(), point(), color()) -> ok
%% @doc Creates a rectangle object.
rectangle(Image, P1, P2, Color) ->
- cast(Image, {rectangle, P1, P2, Color}),
- ok.
+ cast(Image, {rectangle, P1, P2, Color}).
%% @spec filledRectangle(egd_image(), point(), point(), color()) -> ok
%% @doc Creates a filled rectangle object.
filledRectangle(Image, P1, P2, Color) ->
- cast(Image, {filled_rectangle, P1, P2, Color}),
- ok.
+ cast(Image, {filled_rectangle, P1, P2, Color}).
%% @spec filledEllipse(egd_image(), point(), point(), color()) -> ok
%% @doc Creates a filled ellipse object.
filledEllipse(Image, P1, P2, Color) ->
- cast(Image, {filled_ellipse, P1, P2, Color}),
- ok.
+ cast(Image, {filled_ellipse, P1, P2, Color}).
%% @spec filledTriangle(egd_image(), point(), point(), point(), color()) -> ok
%% @hidden
%% @doc Creates a filled triangle object.
filledTriangle(Image, P1, P2, P3, Color) ->
- cast(Image, {filled_triangle, P1, P2, P3, Color}),
- ok.
+ cast(Image, {filled_triangle, P1, P2, P3, Color}).
%% @spec polygon(egd_image(), [point()], color()) -> ok
%% @hidden
%% @doc Creates a filled filled polygon object.
polygon(Image, Pts, Color) ->
- cast(Image, {polygon, Pts, Color}),
- ok.
+ cast(Image, {polygon, Pts, Color}).
%% @spec arc(egd_image(), point(), point(), color()) -> ok
%% @hidden
%% @doc Creates an arc with radius of bbx corner.
arc(Image, P1, P2, Color) ->
- cast(Image, {arc, P1, P2, Color}),
- ok.
+ cast(Image, {arc, P1, P2, Color}).
%% @spec arc(egd_image(), point(), point(), integer(), color()) -> ok
%% @hidden
%% @doc Creates an arc.
arc(Image, P1, P2, D, Color) ->
- cast(Image, {arc, P1, P2, D, Color}),
- ok.
+ cast(Image, {arc, P1, P2, D, Color}).
%% @spec save(binary(), string()) -> ok
%% @doc Saves the binary to file.
save(Binary, Filename) when is_binary(Binary) ->
- file:write_file(Filename, Binary),
+ ok = file:write_file(Filename, Binary),
ok.
% ---------------------------------
% Aux functions
% ---------------------------------
cast(Pid, Command) ->
- Pid ! {egd, self(), Command}.
+ Pid ! {egd, self(), Command},
+ ok.
call(Pid, Command) ->
Pid ! {egd, self(), Command},
diff --git a/lib/percept/src/egd.hrl b/lib/percept/src/egd.hrl
index 43db16d3a1..fc0a7e10ee 100644
--- a/lib/percept/src/egd.hrl
+++ b/lib/percept/src/egd.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -41,6 +41,5 @@
-ifdef(debug).
-define(dbg(X), io:format("DEBUG: ~p:~p~n",[?MODULE, X])).
-else.
--define(dbg(X), void).
+-define(dbg(X), ok).
-endif.
-
diff --git a/lib/percept/src/egd_font.erl b/lib/percept/src/egd_font.erl
index 6ee3728fde..ef1cc434df 100644
--- a/lib/percept/src/egd_font.erl
+++ b/lib/percept/src/egd_font.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -51,9 +51,7 @@
%%
%%==========================================================================
-%%
-%% Interface functions
-%%
+%% Interface functions
%%==========================================================================
size(Font) ->
@@ -70,15 +68,14 @@ load(Filename) ->
load_font_header(Font).
%%==========================================================================
-%%
-%% Internal functions
-%%
+%% Internal functions
%%==========================================================================
%% ETS handler functions
initialize_table() ->
- ets:new(egd_font_table, [named_table, ordered_set, public]).
+ egd_font_table = ets:new(egd_font_table, [named_table, ordered_set, public]),
+ ok.
glyph_insert(Font, Code, Translation, LSs) ->
Element = {{Font, Code}, Translation, LSs},
diff --git a/lib/percept/src/egd_png.erl b/lib/percept/src/egd_png.erl
index c576d569a9..fe660513b4 100644
--- a/lib/percept/src/egd_png.erl
+++ b/lib/percept/src/egd_png.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/percept/src/egd_primitives.erl b/lib/percept/src/egd_primitives.erl
index 0a3a62c05c..b64189c552 100644
--- a/lib/percept/src/egd_primitives.erl
+++ b/lib/percept/src/egd_primitives.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,32 +23,27 @@
-module(egd_primitives).
--export([
- create/2,
- color/1,
- pixel/3,
- polygon/3,
- line/4,
- line/5,
- arc/4,
- arc/5,
- rectangle/4,
- filledRectangle/4,
- filledEllipse/4,
- filledTriangle/5,
- text/5
- ]).
-
--export([
- info/1,
- object_info/1,
- rgb_float2byte/1
- ]).
--export([
- arc_to_edges/3,
- convex_hull/1,
- edges/1
- ]).
+-export([create/2,
+ color/1,
+ pixel/3,
+ polygon/3,
+ line/4,
+ line/5,
+ arc/4,
+ arc/5,
+ rectangle/4,
+ filledRectangle/4,
+ filledEllipse/4,
+ filledTriangle/5,
+ text/5]).
+
+-export([info/1,
+ object_info/1,
+ rgb_float2byte/1]).
+
+-export([arc_to_edges/3,
+ convex_hull/1,
+ edges/1]).
-include("egd.hrl").
@@ -75,22 +70,16 @@ object_info(O) ->
%% interface functions
-line(I, Sp, Ep, Color) ->
- I#image{ objects = [
- #image_object{
- type = line,
- points = [Sp, Ep],
- span = span([Sp, Ep]),
- color = Color} | I#image.objects]}.
+line(#image{objects=Os}=I, Sp, Ep, Color) ->
+ line(#image{objects=Os}=I, Sp, Ep, 1, Color).
-line(I, Sp, Ep, Stroke, Color) ->
- I#image{ objects = [
- #image_object{
- type = line,
- points = [Sp, Ep],
- span = span([Sp, Ep]),
- internals = Stroke,
- color = Color } | I#image.objects]}.
+line(#image{objects=Os}=I, Sp, Ep, Wd, Color) ->
+ I#image{objects=[#image_object{
+ internals = Wd,
+ type = line,
+ points = [Sp, Ep],
+ span = span([Sp, Ep]),
+ color = Color}|Os]}.
arc(I, {Sx,Sy} = Sp, {Ex,Ey} = Ep, Color) ->
X = Ex - Sx,
@@ -98,241 +87,234 @@ arc(I, {Sx,Sy} = Sp, {Ex,Ey} = Ep, Color) ->
R = math:sqrt(X*X + Y*Y)/2,
arc(I, Sp, Ep, R, Color).
-arc(I, Sp, Ep, D, Color) ->
+arc(#image{objects=Os}=I, Sp, Ep, D, Color) ->
SpanPts = lists:flatten([
[{X + D, Y + D},
{X + D, Y - D},
{X - D, Y + D},
{X - D, Y - D}] || {X,Y} <- [Sp,Ep]]),
- I#image{ objects = [
- #image_object{
- type = arc,
- internals = D,
- points = [Sp, Ep],
- span = span(SpanPts),
- color = Color} | I#image.objects]}.
+ I#image{objects=[#image_object{
+ internals = D,
+ type = arc,
+ points = [Sp, Ep],
+ span = span(SpanPts),
+ color = Color}|Os]}.
-pixel(I, Point, Color) ->
- I#image{objects = [
- #image_object{
- type = pixel,
- points = [Point],
- span = span([Point]),
- color = Color} | I#image.objects]}.
-
-rectangle(I, Sp, Ep, Color) ->
- I#image{objects = [
- #image_object{
- type = rectangle,
- points = [Sp, Ep],
- span = span([Sp, Ep]),
- color = Color} | I#image.objects]}.
-
-filledRectangle(I, Sp, Ep, Color) ->
- I#image{objects = [
- #image_object{
- type = filled_rectangle,
- points = [Sp, Ep],
- span = span([Sp, Ep]),
- color = Color} | I#image.objects]}.
-
-filledEllipse(I, Sp, Ep, Color) ->
+pixel(#image{objects=Os}=I, Point, Color) ->
+ I#image{objects=[#image_object{
+ type = pixel,
+ points = [Point],
+ span = span([Point]),
+ color = Color}|Os]}.
+
+rectangle(#image{objects=Os}=I, Sp, Ep, Color) ->
+ I#image{objects=[#image_object{
+ type = rectangle,
+ points = [Sp, Ep],
+ span = span([Sp, Ep]),
+ color = Color}|Os]}.
+
+filledRectangle(#image{objects=Os}=I, Sp, Ep, Color) ->
+ I#image{objects=[#image_object{
+ type = filled_rectangle,
+ points = [Sp, Ep],
+ span = span([Sp, Ep]),
+ color = Color}|Os]}.
+
+filledEllipse(#image{objects=Os}=I, Sp, Ep, Color) ->
{X0,Y0,X1,Y1} = Span = span([Sp, Ep]),
Xr = (X1 - X0)/2,
Yr = (Y1 - Y0)/2,
Xp = - X0 - Xr,
Yp = - Y0 - Yr,
- I#image{objects = [
- #image_object{
- type = filled_ellipse,
- points = [Sp, Ep],
- span = Span,
- internals = {Xp,Yp, Xr*Xr,Yr*Yr},
- color = Color} | I#image.objects]}.
-
-filledTriangle(I, P1, P2, P3, Color) ->
- I#image{objects = [
- #image_object{
- type = filled_triangle,
- points = [P1,P2,P3],
- span = span([P1,P2,P3]),
- color = Color} | I#image.objects]}.
-
-
-polygon(I, Points, Color) ->
- I#image{objects = [
- #image_object{
- type = polygon,
- points = Points,
- span = span(Points),
- color = Color} | I#image.objects]}.
+ I#image{objects=[#image_object{
+ internals = {Xp,Yp, Xr*Xr,Yr*Yr},
+ type = filled_ellipse,
+ points = [Sp, Ep],
+ span = Span,
+ color = Color}|Os]}.
+
+filledTriangle(#image{objects=Os}=I, P1, P2, P3, Color) ->
+ I#image{objects=[#image_object{
+ type = filled_triangle,
+ points = [P1,P2,P3],
+ span = span([P1,P2,P3]),
+ color = Color}|Os]}.
+
+polygon(#image{objects=Os}=I, Points, Color) ->
+ I#image{objects=[#image_object{
+ type = polygon,
+ points = Points,
+ span = span(Points),
+ color = Color}|Os]}.
+
+text(#image{objects=Os}=I, {Xs,Ys}=Sp, Font, Text, Color) ->
+ {FW,FH} = egd_font:size(Font),
+ Length = length(Text),
+ Ep = {Xs + Length*FW, Ys + FH + 5},
+ I#image{objects=[#image_object{
+ internals = {Font, Text},
+ type = text_horizontal,
+ points = [Sp],
+ span = span([Sp,Ep]),
+ color = Color}|Os]}.
create(W, H) ->
- #image{ width = W, height = H}.
+ #image{width = W, height = H}.
-
-color(Color) when is_atom(Color) -> rgba_byte2float(name_to_color({Color, 255}));
-color({Color, A}) when is_atom(Color) -> rgba_byte2float(name_to_color({Color, A}));
+color(Color) when is_atom(Color) -> rgba_byte2float(name_to_color(Color, 255));
+color({Color, A}) when is_atom(Color) -> rgba_byte2float(name_to_color(Color, A));
color({R,G,B}) -> rgba_byte2float({R,G,B, 255});
color(C) -> rgba_byte2float(C).
-% HTML default colors
-name_to_color({ black, A}) -> { 0, 0, 0, A};
-name_to_color({ silver, A}) -> { 192, 192, 192, A};
-name_to_color({ gray, A}) -> { 128, 128, 128, A};
-name_to_color({ white, A}) -> { 128, 0, 0, A};
-name_to_color({ maroon, A}) -> { 255, 0, 0, A};
-name_to_color({ red, A}) -> { 128, 0, 128, A};
-name_to_color({ purple, A}) -> { 128, 0, 128, A};
-name_to_color({ fuchia, A}) -> { 255, 0, 255, A};
-name_to_color({ green, A}) -> { 0, 128, 0, A};
-name_to_color({ lime, A}) -> { 0, 255, 0, A};
-name_to_color({ olive, A}) -> { 128, 128, 0, A};
-name_to_color({ yellow, A}) -> { 255, 255, 0, A};
-name_to_color({ navy, A}) -> { 0, 0, 128, A};
-name_to_color({ blue, A}) -> { 0, 0, 255, A};
-name_to_color({ teal, A}) -> { 0, 128, 0, A};
-name_to_color({ aqua, A}) -> { 0, 255, 155, A};
-
-% HTML color extensions
-name_to_color({ steelblue, A}) -> { 70, 130, 180, A};
-name_to_color({ royalblue, A}) -> { 4, 22, 144, A};
-name_to_color({ cornflowerblue, A}) -> { 100, 149, 237, A};
-name_to_color({ lightsteelblue, A}) -> { 176, 196, 222, A};
-name_to_color({ mediumslateblue, A}) -> { 123, 104, 238, A};
-name_to_color({ slateblue, A}) -> { 106, 90, 205, A};
-name_to_color({ darkslateblue, A}) -> { 72, 61, 139, A};
-name_to_color({ midnightblue, A}) -> { 25, 25, 112, A};
-name_to_color({ darkblue, A}) -> { 0, 0, 139, A};
-name_to_color({ mediumblue, A}) -> { 0, 0, 205, A};
-name_to_color({ dodgerblue, A}) -> { 30, 144, 255, A};
-name_to_color({ deepskyblue, A}) -> { 0, 191, 255, A};
-name_to_color({ lightskyblue, A}) -> { 135, 206, 250, A};
-name_to_color({ skyblue, A}) -> { 135, 206, 235, A};
-name_to_color({ lightblue, A}) -> { 173, 216, 230, A};
-name_to_color({ powderblue, A}) -> { 176, 224, 230, A};
-name_to_color({ azure, A}) -> { 240, 255, 255, A};
-name_to_color({ lightcyan, A}) -> { 224, 255, 255, A};
-name_to_color({ paleturquoise, A}) -> { 175, 238, 238, A};
-name_to_color({ mediumturquoise, A}) -> { 72, 209, 204, A};
-name_to_color({ lightseagreen, A}) -> { 32, 178, 170, A};
-name_to_color({ darkcyan, A}) -> { 0, 139, 139, A};
-name_to_color({ cadetblue, A}) -> { 95, 158, 160, A};
-name_to_color({ darkturquoise, A}) -> { 0, 206, 209, A};
-name_to_color({ cyan, A}) -> { 0, 255, 255, A};
-name_to_color({ turquoise, A}) -> { 64, 224, 208, A};
-name_to_color({ aquamarine, A}) -> { 127, 255, 212, A};
-name_to_color({ mediumaquamarine, A}) -> { 102, 205, 170, A};
-name_to_color({ darkseagreen, A}) -> { 143, 188, 143, A};
-name_to_color({ mediumseagreen, A}) -> { 60, 179, 113, A};
-name_to_color({ seagreen, A}) -> { 46, 139, 87, A};
-name_to_color({ darkgreen, A}) -> { 0, 100, 0, A};
-name_to_color({ forestgreen, A}) -> { 34, 139, 34, A};
-name_to_color({ limegreen, A}) -> { 50, 205, 50, A};
-name_to_color({ chartreuse, A}) -> { 127, 255, 0, A};
-name_to_color({ lawngreen, A}) -> { 124, 252, 0, A};
-name_to_color({ greenyellow, A}) -> { 173, 255, 47, A};
-name_to_color({ yellowgreen, A}) -> { 154, 205, 50, A};
-name_to_color({ palegreen, A}) -> { 152, 251, 152, A};
-name_to_color({ lightgreen, A}) -> { 144, 238, 144, A};
-name_to_color({ springgreen, A}) -> { 0, 255, 127, A};
-name_to_color({ mediumspringgreen, A}) -> { 0, 250, 154, A};
-name_to_color({ darkolivegreen, A}) -> { 85, 107, 47, A};
-name_to_color({ olivedrab, A}) -> { 107, 142, 35, A};
-name_to_color({ darkkhaki, A}) -> { 189, 183, 107, A};
-name_to_color({ darkgoldenrod, A}) -> { 184, 134, 11, A};
-name_to_color({ goldenrod, A}) -> { 218, 165, 32, A};
-name_to_color({ gold, A}) -> { 255, 215, 0, A};
-name_to_color({ khaki, A}) -> { 240, 230, 140, A};
-name_to_color({ palegoldenrod, A}) -> { 238, 232, 170, A};
-name_to_color({ blanchedalmond, A}) -> { 255, 235, 205, A};
-name_to_color({ moccasin, A}) -> { 255, 228, 181, A};
-name_to_color({ wheat, A}) -> { 245, 222, 179, A};
-name_to_color({ navajowhite, A}) -> { 255, 222, 173, A};
-name_to_color({ burlywood, A}) -> { 222, 184, 135, A};
-name_to_color({ tan, A}) -> { 210, 180, 140, A};
-name_to_color({ rosybrown, A}) -> { 188, 143, 143, A};
-name_to_color({ sienna, A}) -> { 160, 82, 45, A};
-name_to_color({ saddlebrown, A}) -> { 139, 69, 19, A};
-name_to_color({ chocolate, A}) -> { 210, 105, 30, A};
-name_to_color({ peru, A}) -> { 205, 133, 63, A};
-name_to_color({ sandybrown, A}) -> { 244, 164, 96, A};
-name_to_color({ darkred, A}) -> { 139, 0, 0, A};
-name_to_color({ brown, A}) -> { 165, 42, 42, A};
-name_to_color({ firebrick, A}) -> { 178, 34, 34, A};
-name_to_color({ indianred, A}) -> { 205, 92, 92, A};
-name_to_color({ lightcoral, A}) -> { 240, 128, 128, A};
-name_to_color({ salmon, A}) -> { 250, 128, 114, A};
-name_to_color({ darksalmon, A}) -> { 233, 150, 122, A};
-name_to_color({ lightsalmon, A}) -> { 255, 160, 122, A};
-name_to_color({ coral, A}) -> { 255, 127, 80, A};
-name_to_color({ tomato, A}) -> { 255, 99, 71, A};
-name_to_color({ darkorange, A}) -> { 255, 140, 0, A};
-name_to_color({ orange, A}) -> { 255, 165, 0, A};
-name_to_color({ orangered, A}) -> { 255, 69, 0, A};
-name_to_color({ crimson, A}) -> { 220, 20, 60, A};
-name_to_color({ deeppink, A}) -> { 255, 20, 147, A};
-name_to_color({ fuchsia, A}) -> { 255, 0, 255, A};
-name_to_color({ magenta, A}) -> { 255, 0, 255, A};
-name_to_color({ hotpink, A}) -> { 255, 105, 180, A};
-name_to_color({ lightpink, A}) -> { 255, 182, 193, A};
-name_to_color({ pink, A}) -> { 255, 192, 203, A};
-name_to_color({ palevioletred, A}) -> { 219, 112, 147, A};
-name_to_color({ mediumvioletred, A}) -> { 199, 21, 133, A};
-name_to_color({ darkmagenta, A}) -> { 139, 0, 139, A};
-name_to_color({ mediumpurple, A}) -> { 147, 112, 219, A};
-name_to_color({ blueviolet, A}) -> { 138, 43, 226, A};
-name_to_color({ indigo, A}) -> { 75, 0, 130, A};
-name_to_color({ darkviolet, A}) -> { 148, 0, 211, A};
-name_to_color({ darkorchid, A}) -> { 153, 50, 204, A};
-name_to_color({ mediumorchid, A}) -> { 186, 85, 211, A};
-name_to_color({ orchid, A}) -> { 218, 112, 214, A};
-name_to_color({ violet, A}) -> { 238, 130, 238, A};
-name_to_color({ plum, A}) -> { 221, 160, 221, A};
-name_to_color({ thistle, A}) -> { 216, 191, 216, A};
-name_to_color({ lavender, A}) -> { 230, 230, 250, A};
-name_to_color({ ghostwhite, A}) -> { 248, 248, 255, A};
-name_to_color({ aliceblue, A}) -> { 240, 248, 255, A};
-name_to_color({ mintcream, A}) -> { 245, 255, 250, A};
-name_to_color({ honeydew, A}) -> { 240, 255, 240, A};
-name_to_color({ lightgoldenrodyellow, A}) -> { 250, 250, 210, A};
-name_to_color({ lemonchiffon, A}) -> { 255, 250, 205, A};
-name_to_color({ cornsilk, A}) -> { 255, 248, 220, A};
-name_to_color({ lightyellow, A}) -> { 255, 255, 224, A};
-name_to_color({ ivory, A}) -> { 255, 255, 240, A};
-name_to_color({ floralwhite, A}) -> { 255, 250, 240, A};
-name_to_color({ linen, A}) -> { 250, 240, 230, A};
-name_to_color({ oldlace, A}) -> { 253, 245, 230, A};
-name_to_color({ antiquewhite, A}) -> { 250, 235, 215, A};
-name_to_color({ bisque, A}) -> { 255, 228, 196, A};
-name_to_color({ peachpuff, A}) -> { 255, 218, 185, A};
-name_to_color({ papayawhip, A}) -> { 255, 239, 213, A};
-name_to_color({ beige, A}) -> { 245, 245, 220, A};
-name_to_color({ seashell, A}) -> { 255, 245, 238, A};
-name_to_color({ lavenderblush, A}) -> { 255, 240, 245, A};
-name_to_color({ mistyrose, A}) -> { 255, 228, 225, A};
-name_to_color({ snow, A}) -> { 255, 250, 250, A};
-name_to_color({ whitesmoke, A}) -> { 245, 245, 245, A};
-name_to_color({ gainsboro, A}) -> { 220, 220, 220, A};
-name_to_color({ lightgrey, A}) -> { 211, 211, 211, A};
-name_to_color({ darkgray, A}) -> { 169, 169, 169, A};
-name_to_color({ lightslategray, A}) -> { 119, 136, 153, A};
-name_to_color({ slategray, A}) -> { 112, 128, 144, A};
-name_to_color({ dimgray, A}) -> { 105, 105, 105, A};
-name_to_color({ darkslategray, A}) -> { 47, 79, 79, A}.
-
-text(I, {Xs,Ys} = Sp, Font, Text, Color) ->
- {FW,FH} = egd_font:size(Font),
- Length = length(Text),
- Ep = {Xs + Length*FW, Ys + FH + 5},
- I#image{objects = [
- #image_object{
- type = text_horizontal,
- points = [Sp],
- span = span([Sp,Ep]),
- internals = {Font, Text},
- color = Color} | I#image.objects]}.
+name_to_color(Color, A) ->
+ case Color of
+ %% HTML default colors
+ black -> { 0, 0, 0, A};
+ silver -> {192, 192, 192, A};
+ gray -> {128, 128, 128, A};
+ white -> {128, 0, 0, A};
+ maroon -> {255, 0, 0, A};
+ red -> {128, 0, 128, A};
+ purple -> {128, 0, 128, A};
+ fuchia -> {255, 0, 255, A};
+ green -> { 0, 128, 0, A};
+ lime -> { 0, 255, 0, A};
+ olive -> {128, 128, 0, A};
+ yellow -> {255, 255, 0, A};
+ navy -> { 0, 0, 128, A};
+ blue -> { 0, 0, 255, A};
+ teal -> { 0, 128, 0, A};
+ aqua -> { 0, 255, 155, A};
+
+ %% HTML color extensions
+ steelblue -> { 70, 130, 180, A};
+ royalblue -> { 4, 22, 144, A};
+ cornflowerblue -> {100, 149, 237, A};
+ lightsteelblue -> {176, 196, 222, A};
+ mediumslateblue -> {123, 104, 238, A};
+ slateblue -> {106, 90, 205, A};
+ darkslateblue -> { 72, 61, 139, A};
+ midnightblue -> { 25, 25, 112, A};
+ darkblue -> { 0, 0, 139, A};
+ mediumblue -> { 0, 0, 205, A};
+ dodgerblue -> { 30, 144, 255, A};
+ deepskyblue -> { 0, 191, 255, A};
+ lightskyblue -> {135, 206, 250, A};
+ skyblue -> {135, 206, 235, A};
+ lightblue -> {173, 216, 230, A};
+ powderblue -> {176, 224, 230, A};
+ azure -> {240, 255, 255, A};
+ lightcyan -> {224, 255, 255, A};
+ paleturquoise -> {175, 238, 238, A};
+ mediumturquoise -> { 72, 209, 204, A};
+ lightseagreen -> { 32, 178, 170, A};
+ darkcyan -> { 0, 139, 139, A};
+ cadetblue -> { 95, 158, 160, A};
+ darkturquoise -> { 0, 206, 209, A};
+ cyan -> { 0, 255, 255, A};
+ turquoise -> { 64, 224, 208, A};
+ aquamarine -> {127, 255, 212, A};
+ mediumaquamarine -> {102, 205, 170, A};
+ darkseagreen -> {143, 188, 143, A};
+ mediumseagreen -> { 60, 179, 113, A};
+ seagreen -> { 46, 139, 87, A};
+ darkgreen -> { 0, 100, 0, A};
+ forestgreen -> { 34, 139, 34, A};
+ limegreen -> { 50, 205, 50, A};
+ chartreuse -> {127, 255, 0, A};
+ lawngreen -> {124, 252, 0, A};
+ greenyellow -> {173, 255, 47, A};
+ yellowgreen -> {154, 205, 50, A};
+ palegreen -> {152, 251, 152, A};
+ lightgreen -> {144, 238, 144, A};
+ springgreen -> { 0, 255, 127, A};
+ darkolivegreen -> { 85, 107, 47, A};
+ olivedrab -> {107, 142, 35, A};
+ darkkhaki -> {189, 183, 107, A};
+ darkgoldenrod -> {184, 134, 11, A};
+ goldenrod -> {218, 165, 32, A};
+ gold -> {255, 215, 0, A};
+ khaki -> {240, 230, 140, A};
+ palegoldenrod -> {238, 232, 170, A};
+ blanchedalmond -> {255, 235, 205, A};
+ moccasin -> {255, 228, 181, A};
+ wheat -> {245, 222, 179, A};
+ navajowhite -> {255, 222, 173, A};
+ burlywood -> {222, 184, 135, A};
+ tan -> {210, 180, 140, A};
+ rosybrown -> {188, 143, 143, A};
+ sienna -> {160, 82, 45, A};
+ saddlebrown -> {139, 69, 19, A};
+ chocolate -> {210, 105, 30, A};
+ peru -> {205, 133, 63, A};
+ sandybrown -> {244, 164, 96, A};
+ darkred -> {139, 0, 0, A};
+ brown -> {165, 42, 42, A};
+ firebrick -> {178, 34, 34, A};
+ indianred -> {205, 92, 92, A};
+ lightcoral -> {240, 128, 128, A};
+ salmon -> {250, 128, 114, A};
+ darksalmon -> {233, 150, 122, A};
+ lightsalmon -> {255, 160, 122, A};
+ coral -> {255, 127, 80, A};
+ tomato -> {255, 99, 71, A};
+ darkorange -> {255, 140, 0, A};
+ orange -> {255, 165, 0, A};
+ orangered -> {255, 69, 0, A};
+ crimson -> {220, 20, 60, A};
+ deeppink -> {255, 20, 147, A};
+ fuchsia -> {255, 0, 255, A};
+ magenta -> {255, 0, 255, A};
+ hotpink -> {255, 105, 180, A};
+ lightpink -> {255, 182, 193, A};
+ pink -> {255, 192, 203, A};
+ palevioletred -> {219, 112, 147, A};
+ mediumvioletred -> {199, 21, 133, A};
+ darkmagenta -> {139, 0, 139, A};
+ mediumpurple -> {147, 112, 219, A};
+ blueviolet -> {138, 43, 226, A};
+ indigo -> { 75, 0, 130, A};
+ darkviolet -> {148, 0, 211, A};
+ darkorchid -> {153, 50, 204, A};
+ mediumorchid -> {186, 85, 211, A};
+ orchid -> {218, 112, 214, A};
+ violet -> {238, 130, 238, A};
+ plum -> {221, 160, 221, A};
+ thistle -> {216, 191, 216, A};
+ lavender -> {230, 230, 250, A};
+ ghostwhite -> {248, 248, 255, A};
+ aliceblue -> {240, 248, 255, A};
+ mintcream -> {245, 255, 250, A};
+ honeydew -> {240, 255, 240, A};
+ lemonchiffon -> {255, 250, 205, A};
+ cornsilk -> {255, 248, 220, A};
+ lightyellow -> {255, 255, 224, A};
+ ivory -> {255, 255, 240, A};
+ floralwhite -> {255, 250, 240, A};
+ linen -> {250, 240, 230, A};
+ oldlace -> {253, 245, 230, A};
+ antiquewhite -> {250, 235, 215, A};
+ bisque -> {255, 228, 196, A};
+ peachpuff -> {255, 218, 185, A};
+ papayawhip -> {255, 239, 213, A};
+ beige -> {245, 245, 220, A};
+ seashell -> {255, 245, 238, A};
+ lavenderblush -> {255, 240, 245, A};
+ mistyrose -> {255, 228, 225, A};
+ snow -> {255, 250, 250, A};
+ whitesmoke -> {245, 245, 245, A};
+ gainsboro -> {220, 220, 220, A};
+ lightgrey -> {211, 211, 211, A};
+ darkgray -> {169, 169, 169, A};
+ lightslategray -> {119, 136, 153, A};
+ slategray -> {112, 128, 144, A};
+ dimgray -> {105, 105, 105, A};
+ darkslategray -> { 47, 79, 79, A};
+ mediumspringgreen -> { 0, 250, 154, A};
+ lightgoldenrodyellow -> {250, 250, 210, A}
+ end.
%%% Generic transformations
@@ -411,15 +393,17 @@ point_side(_) -> on_line.
%% AUX
-span(Points) ->
- Xs = [TX||{TX, _} <- Points],
- Ys = [TY||{_, TY} <- Points],
- Xmin = lists:min(Xs),
- Xmax = lists:max(Xs),
- Ymin = lists:min(Ys),
- Ymax = lists:max(Ys),
+span([{X0,Y0}|Points]) ->
+ span(Points,X0,Y0,X0,Y0).
+span([{X0,Y0}|Points],Xmin,Ymin,Xmax,Ymax) ->
+ span(Points,erlang:min(Xmin,X0),
+ erlang:min(Ymin,Y0),
+ erlang:max(Xmax,X0),
+ erlang:max(Ymax,Y0));
+span([],Xmin,Ymin,Xmax,Ymax) ->
{Xmin,Ymin,Xmax,Ymax}.
+
rgb_float2byte({R,G,B}) -> rgb_float2byte({R,G,B,1.0});
rgb_float2byte({R,G,B,A}) ->
{trunc(R*255), trunc(G*255), trunc(B*255), trunc(A*255)}.
diff --git a/lib/percept/src/egd_render.erl b/lib/percept/src/egd_render.erl
index 4297704677..6c708e3e86 100644
--- a/lib/percept/src/egd_render.erl
+++ b/lib/percept/src/egd_render.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,6 +27,8 @@
-export([eps/1]).
-compile(inline).
+-export([line_to_linespans/3]).
+
-include("egd.hrl").
-define('DummyC',0).
@@ -216,11 +218,11 @@ parse_objects_on_line(Y, Width, Objects) ->
parse_objects_on_line(Y, 1, Width, Objects, []).
parse_objects_on_line(_Y, _Z, _, [], Out) -> lists:flatten(Out);
parse_objects_on_line(Y, Z, Width, [O|Os], Out) ->
- case is_object_on_line(Y, O) of
+ case is_object_on_line(O, Y) of
false ->
parse_objects_on_line(Y, Z + 1, Width, Os, Out);
true ->
- OLs = object_line_data(Y, Z, O),
+ OLs = object_line_data(O,Y,Z),
TOLs = trim_object_line_data(OLs, Width),
parse_objects_on_line(Y, Z + 1, Width, Os, [TOLs|Out])
end.
@@ -238,9 +240,9 @@ trim_object_line_data([{Z, Xl, Xr, C}|OLs], Width, Out) ->
% object_line_data
% In:
+% Object :: image_object()
% Y :: index of height
% Z :: index of depth
-% Object :: image_object()
% Out:
% OLs = [{Z, Xl, Xr, Color}]
% Z = index of height
@@ -250,96 +252,93 @@ trim_object_line_data([{Z, Xl, Xr, C}|OLs], Width, Out) ->
% Calculate the length (start and finish index) of an objects horizontal
% line given the height index.
-object_line_data(Y, Z, Object) ->
- object_line_data(Y, Z, Object, Object#image_object.type).
-object_line_data(Y, Z, #image_object{ span = {X0, Y0, X1, Y1}, color = C}, rectangle) ->
+object_line_data(#image_object{type=rectangle,
+ span={X0,Y0,X1,Y1}, color=C}, Y, Z) ->
if
- Y0 =:= Y ; Y1 =:= Y ->
- [{Z, X0, X1, C}];
- true ->
- [{Z, X0, X0, C},
- {Z, X1, X1, C}]
+ Y0 =:= Y ; Y1 =:= Y ->
+ [{Z, X0, X1, C}];
+ true ->
+ [{Z, X0, X0, C},
+ {Z, X1, X1, C}]
end;
-object_line_data(_Y, Z, #image_object{ span = {X0, _, X1, _}, color = C}, filled_rectangle) ->
+object_line_data(#image_object{type=filled_rectangle,
+ span={X0, _, X1, _}, color=C}, _Y, Z) ->
[{Z, X0, X1, C}];
-object_line_data(Y, Z, #image_object{ internals={Xr,Yr,Yr2}, span = {X0,Y0,X1,Y1}, color = C}, filled_ellipse) ->
+object_line_data(#image_object{type=filled_ellipse,
+ internals={Xr,Yr,Yr2}, span={X0,Y0,X1,Y1}, color=C}, Y, Z) ->
if
- X1 - X0 == 0; Y1 - Y0 == 0 ->
- [{Z, X0, X1, C}];
- true ->
- Yo = trunc(Y - Y0 - Yr),
- Yo2 = Yo*Yo,
- Xo = math:sqrt((1 - Yo2/Yr2))*Xr,
- [{Z, round(X0 - Xo + Xr), round(X0 + Xo + Xr), C}]
+ X1 - X0 =:= 0; Y1 - Y0 =:= 0 ->
+ [{Z, X0, X1, C}];
+ true ->
+ Yo = trunc(Y - Y0 - Yr),
+ Yo2 = Yo*Yo,
+ Xo = math:sqrt((1 - Yo2/Yr2))*Xr,
+ [{Z, round(X0 - Xo + Xr), round(X0 + Xo + Xr), C}]
end;
-object_line_data(Y, Z, #image_object{ intervals = Is, color = C}, filled_triangle) ->
+object_line_data(#image_object{type=filled_triangle,
+ intervals=Is, color=C}, Y, Z) ->
case lists:keyfind(Y, 1, Is) of
{Y, Xl, Xr} -> [{Z, Xl, Xr, C}];
false -> []
end;
-object_line_data(Y, Z, #image_object{ intervals = Is, color = C}, line) ->
- case dict:find(Y, Is) of
- {ok, Ls} -> [{Z, Xl, Xr, C}||{Xl,Xr} <- Ls];
+object_line_data(#image_object{type=line,
+ intervals=M, color={R,G,B,_}}, Y, Z) ->
+ case M of
+ #{Y := Ls} -> [{Z, Xl, Xr, {R,G,B,1.0-C/255}}||{Xl,Xr,C} <- Ls];
_ -> []
end;
-object_line_data(Y, Z, #image_object{ color = C, intervals = Is}, polygon) ->
+object_line_data(#image_object{type=polygon,
+ color=C, intervals=Is}, Y, Z) ->
[{Z, Xl, Xr, C} || {Yp, Xl, Xr} <- Is, Yp =:= Y];
-object_line_data(Y, Z, #image_object{ color = C, intervals = Is}, text_horizontal) ->
+object_line_data(#image_object{type=text_horizontal,
+ color=C, intervals=Is}, Y, Z) ->
[{Z, Xl, Xr, C} || {Yg, Xl, Xr} <- Is, Yg =:= Y];
-object_line_data(_, Z, #image_object{ span = {X0,_,X1,_}, color = C}, _) ->
+object_line_data(#image_object{type=pixel,
+ span={X0,_,X1,_}, color=C}, _, Z) ->
[{Z, X0, X1, C}].
-is_object_on_line(Y, #image_object{ span = Span }) ->
- is_object_bounds_on_line(Y, Span).
+is_object_on_line(#image_object{span={_,Y0,_,Y1}}, Y) ->
+ if Y < Y0; Y > Y1 -> false;
+ true -> true
+ end.
-is_object_bounds_on_line(Y, {_,Y0,_,Y1}) when Y < Y0 ; Y > Y1 -> false;
-is_object_bounds_on_line(_, _) -> true.
-
%%% primitives to line_spans
%% compile objects to linespans
-precompile(Image = #image{ objects = Os }) ->
- Image#image{ objects = precompile_objects(Os) }.
-
-precompile_objects(Os) -> precompile_objects(Os, []).
-precompile_objects([], Out) -> lists:reverse(Out);
-
-precompile_objects([O = #image_object{ type = line, points = [P0,P1] }| Os], Out) ->
- precompile_objects(Os, [O#image_object{ intervals = ls_list2dict(line_ls(P0,P1)) } | Out]);
-
-precompile_objects([O = #image_object{ type = filled_triangle, points = [P0,P1,P2] } | Os], Out) ->
- precompile_objects(Os, [O#image_object{ intervals = triangle_ls(P0,P1,P2) } | Out]);
-
-precompile_objects([O = #image_object{ type = polygon, points = Pts } | Os], Out) ->
- precompile_objects(Os, [O#image_object{ intervals = polygon_ls(Pts) } | Out]);
-
-precompile_objects([O = #image_object{ type = filled_ellipse, span = {X0,Y0,X1,Y1} } | Os], Out) ->
+precompile(#image{objects = Os}=I) ->
+ I#image{objects = precompile_objects(Os)}.
+
+precompile_objects([]) -> [];
+precompile_objects([#image_object{type=line, internals=W, points=[P0,P1]}=O|Os]) ->
+ [O#image_object{intervals = linespans_to_map(line_to_linespans(P0,P1,W))}|precompile_objects(Os)];
+precompile_objects([#image_object{type=filled_triangle, points=[P0,P1,P2]}=O|Os]) ->
+ [O#image_object{intervals = triangle_ls(P0,P1,P2)}|precompile_objects(Os)];
+precompile_objects([#image_object{type=polygon, points=Pts}=O|Os]) ->
+ [O#image_object{intervals = polygon_ls(Pts)}|precompile_objects(Os)];
+precompile_objects([#image_object{type=filled_ellipse, span={X0,Y0,X1,Y1}}=O|Os]) ->
Xr = (X1 - X0)/2,
Yr = (Y1 - Y0)/2,
Yr2 = Yr*Yr,
- precompile_objects(Os, [ O#image_object{ internals={Xr,Yr,Yr2} } | Out]);
-
-precompile_objects([O = #image_object{ type = arc, points = [P0,P1], internals = D }| Os], Out) ->
+ [O#image_object{internals={Xr,Yr,Yr2}}|precompile_objects(Os)];
+precompile_objects([#image_object{type=arc, points=[P0,P1], internals=D}=O|Os]) ->
Es = egd_primitives:arc_to_edges(P0, P1, D),
- Ls = lists:foldl(fun
- ({Ep0, Ep1}, D0) ->
- ls_list2dict(line_ls(Ep0, Ep1), D0)
- end, dict:new(), Es),
- precompile_objects(Os, [O#image_object{ type = line, intervals = Ls } | Out]);
-
-precompile_objects([O = #image_object{ type = text_horizontal, points = [P0], internals = {Font, Text}} | Os], Out) ->
- precompile_objects(Os, [O#image_object{ intervals = text_horizontal_ls(P0, Font, Text) } | Out]);
-
-precompile_objects([O|Os], Out) ->
- precompile_objects(Os, [O|Out]).
+ Ls = lists:foldl(fun ({Ep0,Ep1},M) ->
+ linespans_to_map(line_to_linespans(Ep0,Ep1,1),M)
+ end, #{}, Es),
+ [O#image_object{type=line, intervals=Ls}|precompile_objects(Os)];
+precompile_objects([#image_object{type=text_horizontal,
+ points=[P0], internals={Font,Text}}=O|Os]) ->
+ [O#image_object{intervals=text_horizontal_ls(P0,Font,Text)}|precompile_objects(Os)];
+precompile_objects([O|Os]) ->
+ [O|precompile_objects(Os)].
% triangle
@@ -353,7 +352,8 @@ triangle_ls(P1,P2,P3) ->
% At an end point, a new line to the point already being drawn
% repeat same procedure as above
[Sp1, Sp2, Sp3] = tri_pt_ysort([P1,P2,P3]),
- triangle_ls_lp(tri_ls_ysort(line_ls(Sp1,Sp2)), Sp2, tri_ls_ysort(line_ls(Sp1,Sp3)), Sp3, []).
+ triangle_ls_lp(tri_ls_ysort(line_to_linespans(Sp1,Sp2,1)), Sp2,
+ tri_ls_ysort(line_to_linespans(Sp1,Sp3,1)), Sp3, []).
% There will be Y mismatches between the two lists since bresenham is not perfect.
% I can be remedied with checking intervals this could however be costly and
@@ -362,7 +362,7 @@ triangle_ls(P1,P2,P3) ->
triangle_ls_lp([],_,[],_,Out) -> Out;
triangle_ls_lp(LSs1, P1, [], P2, Out) ->
- SLSs = tri_ls_ysort(line_ls(P2,P1)),
+ SLSs = tri_ls_ysort(line_to_linespans(P2,P1,1)),
N2 = length(SLSs),
N1 = length(LSs1),
if
@@ -376,7 +376,7 @@ triangle_ls_lp(LSs1, P1, [], P2, Out) ->
triangle_ls_lp(LSs1, SLSs, Out)
end;
triangle_ls_lp([], P1, LSs2, P2, Out) ->
- SLSs = tri_ls_ysort(line_ls(P1,P2)),
+ SLSs = tri_ls_ysort(line_to_linespans(P1,P2,1)),
N1 = length(SLSs),
N2 = length(LSs2),
if
@@ -390,21 +390,21 @@ triangle_ls_lp([], P1, LSs2, P2, Out) ->
triangle_ls_lp(SLSs, LSs2, Out)
end;
triangle_ls_lp([LS1|LSs1],P1,[LS2|LSs2],P2, Out) ->
- {Y, Xl1, Xr1} = LS1,
- {_, Xl2, Xr2} = LS2,
+ {Y, Xl1, Xr1,_Ca1} = LS1,
+ {_, Xl2, Xr2,_Ca2} = LS2,
Xr = lists:max([Xl1,Xr1,Xl2,Xr2]),
Xl = lists:min([Xl1,Xr1,Xl2,Xr2]),
- triangle_ls_lp(LSs1,P1, LSs2, P2, [{Y,Xl,Xr}|Out]).
+ triangle_ls_lp(LSs1,P1,LSs2,P2,[{Y,Xl,Xr}|Out]).
triangle_ls_lp([],[],Out) -> Out;
triangle_ls_lp([],_,Out) -> Out;
triangle_ls_lp(_,[],Out) -> Out;
triangle_ls_lp([LS1|LSs1], [LS2|LSs2], Out) ->
- {Y, Xl1, Xr1} = LS1,
- {_, Xl2, Xr2} = LS2,
+ {Y, Xl1, Xr1, _Ca1} = LS1,
+ {_, Xl2, Xr2, _Ca2} = LS2,
Xr = lists:max([Xl1,Xr1,Xl2,Xr2]),
Xl = lists:min([Xl1,Xr1,Xl2,Xr2]),
- triangle_ls_lp(LSs1, LSs2, [{Y,Xl,Xr}|Out]).
+ triangle_ls_lp(LSs1,LSs2,[{Y,Xl,Xr}|Out]).
tri_pt_ysort(Pts) ->
% {X,Y}
@@ -414,9 +414,9 @@ tri_pt_ysort(Pts) ->
end, Pts).
tri_ls_ysort(LSs) ->
- % {Y, Xl, Xr}
+ % {Y, Xl, Xr, Ca}
lists:sort(
- fun ({Y1,_,_},{Y2,_,_}) ->
+ fun ({Y1,_,_,_},{Y2,_,_,_}) ->
if Y1 > Y2 -> false; true -> true end
end, LSs).
@@ -503,69 +503,74 @@ point_inside_triangle(P, P1, P2, P3) ->
points_same_side(P, P2, P1, P3) and
points_same_side(P, P3, P1, P2).
-%% [{Y, Xl, Xr}]
-ls_list2dict(List) -> ls_list2dict(List, dict:new()).
-ls_list2dict([], D) -> D;
-ls_list2dict([{Y, Xl, Xr}|Ls], D) ->
- case dict:is_key(Y, D) of
- false -> ls_list2dict(Ls, dict:store(Y, [{Xl, Xr}], D));
- true -> ls_list2dict(Ls, dict:append(Y, {Xl, Xr}, D))
- end.
+%% [{Y, Xl, Xr}] -> #{Y := [{Xl,Xr}]}
+%% Reorganize linspans to a map with Y as key.
+
+linespans_to_map(Ls) ->
+ linespans_to_map(Ls,#{}).
+linespans_to_map([{Y,Xl,Xr,C}|Ls], M) ->
+ case M of
+ #{Y := Spans} -> linespans_to_map(Ls, M#{Y := [{Xl,Xr,C}|Spans]});
+ _ -> linespans_to_map(Ls, M#{Y => [{Xl,Xr,C}]})
+ end;
+linespans_to_map([], M) ->
+ M.
+
-%% line_ls
+%% line_to_linespans
+%% Anti-aliased thick line
+%% Do it CPS style
%% In:
%% P1 :: point()
%% P2 :: point()
%% Out:
-%% {{Ymin,Ymax}, LSD :: line_step_data()}
-%% Purpose:
-%% Instead of points -> intervals
-
-
-line_ls({Xi0, Yi0},{Xi1,Yi1}) ->
- % swap X with Y if line is steep
- Steep = abs(Yi1 - Yi0) > abs(Xi1 - Xi0),
-
- {Xs0, Ys0, Xs1, Ys1} = case Steep of
- true -> {Yi0,Xi0,Yi1,Xi1};
- false -> {Xi0,Yi0,Xi1,Yi1}
- end,
-
- {X0,Y0,X1,Y1} = case Xs0 > Xs1 of
- true -> {Xs1,Ys1,Xs0,Ys0};
- false -> {Xs0,Ys0,Xs1,Ys1}
- end,
-
- DX = X1 - X0,
- DY = abs(Y1 - Y0),
-
- Error = -DX/2,
-
- Ystep = case Y0 < Y1 of
- true -> 1;
- false -> -1
- end,
- line_ls_step(X0, X1,Y0, DX, DY, Ystep, Error, X0, Steep, []).
-
-%% line_ls_step_(not)_steep
-%% In:
-%% Out:
-%% [{Yi, Xl,Xr}]
-%% Purpose:
-%% Produce an line_interval for each Yi (Y index)
-
-line_ls_step(X, X1, Y, Dx, Dy, Ys, E, X0, false = Steep, LSs) when X < X1, E >= 0 ->
- line_ls_step(X+1,X1,Y+Ys,Dx,Dy,Ys, E - Dx + Dy, X+1, Steep, [{Y,X0,X}|LSs]);
-line_ls_step(X, X1, Y, Dx, Dy, Ys, E, X0, false = Steep, LSs) when X < X1 ->
- line_ls_step(X+1,X1,Y,Dx,Dy,Ys, E + Dy, X0, Steep, LSs);
-line_ls_step(X, _X1, Y, _Dx, _Dy, _Ys, _E, X0, false, LSs) ->
- [{Y,X0,X}|LSs];
-line_ls_step(X, X1, Y, Dx, Dy, Ys, E, _X0, true = Steep, LSs) when X =< X1, E >= 0 ->
- line_ls_step(X+1,X1,Y+Ys,Dx,Dy,Ys, E - Dx + Dy, X, Steep, [{X,Y,Y}|LSs]);
-line_ls_step(X, X1, Y, Dx, Dy, Ys, E, X0, true = Steep, LSs) when X =< X1 ->
- line_ls_step(X+1,X1,Y,Dx,Dy,Ys,E + Dy, X0, Steep, [{X,Y,Y}|LSs]);
-line_ls_step(_X,_,_Y,_Dx,_Dy,_Ys,_E,_X0,_,LSs) ->
- LSs.
+%% [{Y,Xl,Xr}]
+%%
+line_to_linespans({X0,Y0},{X1,Y1},Wd) ->
+ Dx = abs(X1-X0),
+ Dy = abs(Y1-Y0),
+ Sx = if X0 < X1 -> 1; true -> -1 end,
+ Sy = if Y0 < Y1 -> 1; true -> -1 end,
+ E0 = Dx - Dy,
+ Ed = if Dx + Dy =:= 0 -> 1; true -> math:sqrt(Dx*Dx + Dy*Dy) end,
+ line_to_ls(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E0,Ed,(Wd+1)/2,[]).
+
+line_to_ls(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0) ->
+ C = max(0, 255*(abs(E - Dx+Dy)/Ed - Wd + 1)),
+ Ls1 = [{Y0,X0,X0,C}|Ls0],
+ line_to_ls_sx(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls1,E).
+
+line_to_ls_sx(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2) when 2*E2 > -Dx ->
+ line_to_ls_sx_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2+Dy,Y0);
+line_to_ls_sx(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2) ->
+ line_to_ls_sy(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2,X0).
+
+line_to_ls_sx_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,E2,Y) when E2 < Ed*Wd andalso
+ (Y1 =/= Y orelse Dx > Dy) ->
+ Y2 = Y + Sy,
+ C = max(0,255*(abs(E2)/Ed-Wd+1)),
+ Ls = [{Y2,X0,X0,C}|Ls0],
+ line_to_ls_sx_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2+Dx,Y2);
+line_to_ls_sx_do(X0,_Y0,X1,_Y1,_Dx,_Dy,_Sx,_Sy,_E,_Ed,_Wd,Ls,_E2,_Y) when X0 =:= X1 ->
+ Ls;
+line_to_ls_sx_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,_E2,_Y) ->
+ line_to_ls_sy(X0+Sx,Y0,X1,Y1,Dx,Dy,Sx,Sy,E-Dy,Ed,Wd,Ls,E,X0).
+
+line_to_ls_sy(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,E2,X) when 2*E2 =< Dy ->
+ line_to_ls_sy_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,Dx-E2,X);
+line_to_ls_sy(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,_E2,_X) ->
+ line_to_ls(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0).
+
+line_to_ls_sy_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,E2,X) when E2 < Ed*Wd andalso
+ (X1 =/= X orelse Dx < Dy) ->
+ X2 = X + Sx,
+ C = max(0,255*(abs(E2)/Ed-Wd+1)),
+ Ls = [{Y0,X2,X2,C}|Ls0],
+ line_to_ls_sy_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2+Dy,X2);
+line_to_ls_sy_do(_X0,Y0,_X1,Y1,_Dx,_Dy,_Sx,_Sy,_E,_Ed,_Wd,Ls,_E2,_X) when Y0 =:= Y1 ->
+ Ls;
+line_to_ls_sy_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,_E2,_X) ->
+ line_to_ls(X0,Y0+Sy,X1,Y1,Dx,Dy,Sx,Sy,E+Dx,Ed,Wd,Ls0).
% Text
@@ -657,4 +662,3 @@ eps_header(W,H) ->
eps_footer() ->
"%%EOF\n".
-
diff --git a/lib/percept/src/percept.app.src b/lib/percept/src/percept.app.src
index 6a3800a17f..1749730f97 100644
--- a/lib/percept/src/percept.app.src
+++ b/lib/percept/src/percept.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/percept/src/percept.appup.src b/lib/percept/src/percept.appup.src
index cb4995b0d8..3ccdf8db2b 100644
--- a/lib/percept/src/percept.appup.src
+++ b/lib/percept/src/percept.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/percept/src/percept.erl b/lib/percept/src/percept.erl
index badb3f3d66..046e0b7518 100644
--- a/lib/percept/src/percept.erl
+++ b/lib/percept/src/percept.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,27 +26,24 @@
-module(percept).
-behaviour(application).
--export([
- profile/1,
- profile/2,
- profile/3,
- stop_profile/0,
- start_webserver/0,
- start_webserver/1,
- stop_webserver/0,
- stop_webserver/1,
- analyze/1,
- % Application behaviour
- start/2,
- stop/1]).
+-export([profile/1,
+ profile/2,
+ profile/3,
+ stop_profile/0,
+ start_webserver/0,
+ start_webserver/1,
+ stop_webserver/0,
+ stop_webserver/1,
+ analyze/1,
+ % Application behaviour
+ start/2,
+ stop/1]).
-include("percept.hrl").
%%==========================================================================
-%%
-%% Type definitions
-%%
+%% Type definitions
%%==========================================================================
%% @type percept_option() = procs | ports | exclusive
@@ -54,9 +51,7 @@
-type percept_option() :: 'procs' | 'ports' | 'exclusive' | 'scheduler'.
%%==========================================================================
-%%
-%% Application callback functions
-%%
+%% Application callback functions
%%==========================================================================
%% @spec start(Type, Args) -> {started, Hostname, Port} | {error, Reason}
@@ -76,9 +71,7 @@ stop(_State) ->
stop_webserver(0).
%%==========================================================================
-%%
-%% Interface functions
-%%
+%% Interface functions
%%==========================================================================
%% @spec profile(Filename::string()) -> {ok, Port} | {already_started, Port}
@@ -158,11 +151,11 @@ start_webserver() ->
{'started', string(), pos_integer()} | {'error', any()}.
start_webserver(Port) when is_integer(Port) ->
- application:load(percept),
+ ok = ensure_loaded(percept),
case whereis(percept_httpd) of
undefined ->
{ok, Config} = get_webserver_config("percept", Port),
- inets:start(),
+ ok = application:ensure_started(inets),
case inets:start(httpd, Config) of
{ok, Pid} ->
AssignedPort = find_service_port_from_pid(inets:services_info(), Pid),
@@ -217,16 +210,14 @@ stop_webserver(Port) ->
do_stop(Port,[]).
%%==========================================================================
-%%
-%% Auxiliary functions
-%%
+%% Auxiliary functions
%%==========================================================================
%% parse_and_insert
parse_and_insert(Filename, DB) ->
io:format("Parsing: ~p ~n", [Filename]),
- T0 = erlang:now(),
+ T0 = erlang:monotonic_time(milli_seconds),
Pid = dbg:trace_client(file, Filename, mk_trace_parser(self())),
Ref = erlang:monitor(process, Pid),
parse_and_insert_loop(Filename, Pid, Ref, DB, T0).
@@ -239,8 +230,8 @@ parse_and_insert_loop(Filename, Pid, Ref, DB, T0) ->
{parse_complete, {Pid, Count}} ->
receive {'DOWN', Ref, process, Pid, normal} -> ok after 0 -> ok end,
DB ! {action, consolidate},
- T1 = erlang:now(),
- io:format("Parsed ~p entries in ~p s.~n", [Count, ?seconds(T1, T0)]),
+ T1 = erlang:monotonic_time(milli_seconds),
+ io:format("Parsed ~w entries in ~w ms.~n", [Count, T1 - T0]),
io:format(" ~p created processes.~n", [length(percept_db:select({information, procs}))]),
io:format(" ~p opened ports.~n", [length(percept_db:select({information, ports}))]),
ok;
@@ -337,3 +328,10 @@ get_webserver_config(Servername, Port) when is_list(Servername), is_integer(Port
{bind_address, any},
{port, Port}],
{ok, Config}.
+
+ensure_loaded(App) ->
+ case application:load(App) of
+ ok -> ok;
+ {error,{already_loaded,App}} -> ok;
+ Error -> Error
+ end.
diff --git a/lib/percept/src/percept.hrl b/lib/percept/src/percept.hrl
index a5639cfaf8..58926cd1b4 100644
--- a/lib/percept/src/percept.hrl
+++ b/lib/percept/src/percept.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/percept/src/percept_analyzer.erl b/lib/percept/src/percept_analyzer.erl
index 69338f52af..f38d026905 100644
--- a/lib/percept/src/percept_analyzer.erl
+++ b/lib/percept/src/percept_analyzer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/percept/src/percept_db.erl b/lib/percept/src/percept_db.erl
index b627c67acd..6cbe3ce022 100644
--- a/lib/percept/src/percept_db.erl
+++ b/lib/percept/src/percept_db.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,21 +24,17 @@
-module(percept_db).
--export([
- start/0,
- stop/0,
- insert/1,
- select/2,
- select/1,
- consolidate/0
- ]).
+-export([start/0,
+ stop/0,
+ insert/1,
+ select/2,
+ select/1,
+ consolidate/0]).
-include("percept.hrl").
-define(STOP_TIMEOUT, 1000).
%%==========================================================================
-%%
-%% Type definitions
-%%
+%% Type definitions
%%==========================================================================
%% @type activity_option() =
@@ -64,9 +60,7 @@
%%==========================================================================
-%%
-%% Interface functions
-%%
+%% Interface functions
%%==========================================================================
%% @spec start() -> ok | {started, Pid} | {restarted, Pid}
@@ -100,7 +94,7 @@ restart(PerceptDB)->
-spec do_start()-> pid().
do_start()->
- Pid = spawn( fun() -> init_percept_db() end),
+ Pid = spawn(fun() -> init_percept_db() end),
erlang:register(percept_db, Pid),
Pid.
@@ -123,17 +117,17 @@ stop() ->
%% @private
%% @doc Stops the percept database, with a synchronous call.
--spec stop_sync(pid())-> true.
+-spec stop_sync(pid()) -> true.
-stop_sync(Pid)->
+stop_sync(Pid) ->
MonitorRef = erlang:monitor(process, Pid),
- stop(),
+ _ = stop(),
receive
{'DOWN', MonitorRef, _Type, Pid, _Info}->
true
after ?STOP_TIMEOUT->
- erlang:demonitor(MonitorRef, [flush]),
- exit(Pid, kill)
+ erlang:demonitor(MonitorRef, [flush]),
+ exit(Pid, kill)
end.
%% @spec insert(tuple()) -> ok
@@ -186,26 +180,24 @@ consolidate() ->
ok.
%%==========================================================================
-%%
-%% Database loop
-%%
+%% Database loop
%%==========================================================================
init_percept_db() ->
% Proc and Port information
- ets:new(pdb_info, [named_table, private, {keypos, #information.id}, set]),
+ pdb_info = ets:new(pdb_info, [named_table, private, {keypos, #information.id}, set]),
% Scheduler runnability
- ets:new(pdb_scheduler, [named_table, private, {keypos, #activity.timestamp}, ordered_set]),
+ pdb_scheduler = ets:new(pdb_scheduler, [named_table, private, {keypos, #activity.timestamp}, ordered_set]),
% Process and Port runnability
- ets:new(pdb_activity, [named_table, private, {keypos, #activity.timestamp}, ordered_set]),
+ pdb_activity = ets:new(pdb_activity, [named_table, private, {keypos, #activity.timestamp}, ordered_set]),
% System status
- ets:new(pdb_system, [named_table, private, {keypos, 1}, set]),
+ pdb_system = ets:new(pdb_system, [named_table, private, {keypos, 1}, set]),
% System warnings
- ets:new(pdb_warnings, [named_table, private, {keypos, 1}, ordered_set]),
+ pdb_warnings = ets:new(pdb_warnings, [named_table, private, {keypos, 1}, ordered_set]),
put(debug, 0),
loop_percept_db().
@@ -232,9 +224,7 @@ loop_percept_db() ->
end.
%%==========================================================================
-%%
-%% Auxiliary functions
-%%
+%% Auxiliary functions
%%==========================================================================
%% cleans trace messages from external pids
@@ -788,5 +778,3 @@ update_system_stop_ts(TS) ->
Unhandled ->
io:format("update_system_stop_ts, unhandled ~p ~n", [Unhandled])
end.
-
-
diff --git a/lib/percept/src/percept_graph.erl b/lib/percept/src/percept_graph.erl
index 8ad7fd1bf6..e5bbaca2b4 100644
--- a/lib/percept/src/percept_graph.erl
+++ b/lib/percept/src/percept_graph.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -33,28 +33,28 @@
%%
graph(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(graph(Env, Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(graph(Env, Input))).
%% activity
%% @spec activity(SessionID, Env, Input) -> term()
%% @doc An ESI callback implementation used by the httpd server.
activity(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(activity_bar(Env, Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(activity_bar(Env, Input))).
proc_lifetime(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(proc_lifetime(Env, Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(proc_lifetime(Env, Input))).
percentage(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(percentage(Env,Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(percentage(Env,Input))).
scheduler_graph(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(scheduler_graph(Env, Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(scheduler_graph(Env, Input))).
graph(_Env, Input) ->
Query = httpd:parse_query(Input),
diff --git a/lib/percept/src/percept_html.erl b/lib/percept/src/percept_html.erl
index ea7484ae70..a675227584 100644
--- a/lib/percept/src/percept_html.erl
+++ b/lib/percept/src/percept_html.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,22 +18,18 @@
%% %CopyrightEnd%
-module(percept_html).
--export([
- page/3,
- codelocation_page/3,
- databases_page/3,
- load_database_page/3,
- processes_page/3,
- concurrency_page/3,
- process_info_page/3
- ]).
-
--export([
- value2pid/1,
- pid2value/1,
- get_option_value/2,
- join_strings_with/2
- ]).
+-export([page/3,
+ codelocation_page/3,
+ databases_page/3,
+ load_database_page/3,
+ processes_page/3,
+ concurrency_page/3,
+ process_info_page/3]).
+
+-export([value2pid/1,
+ pid2value/1,
+ get_option_value/2,
+ join_strings_with/2]).
-include("percept.hrl").
-include_lib("kernel/include/file.hrl").
@@ -42,47 +38,47 @@
%% API
page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, overview_content(Env, Input)),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, overview_content(Env, Input)),
+ ok = mod_esi:deliver(SessionID, footer()).
processes_page(SessionID, _, _) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, processes_content()),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, processes_content()),
+ ok = mod_esi:deliver(SessionID, footer()).
concurrency_page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, concurrency_content(Env, Input)),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, concurrency_content(Env, Input)),
+ ok = mod_esi:deliver(SessionID, footer()).
databases_page(SessionID, _, _) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, databases_content()),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, databases_content()),
+ ok = mod_esi:deliver(SessionID, footer()).
codelocation_page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, codelocation_content(Env, Input)),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, codelocation_content(Env, Input)),
+ ok = mod_esi:deliver(SessionID, footer()).
process_info_page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, process_info_content(Env, Input)),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, process_info_content(Env, Input)),
+ ok = mod_esi:deliver(SessionID, footer()).
load_database_page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, header()),
% Very dynamic page, handled differently
load_database_content(SessionID, Env, Input),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, footer()).
%%% --------------------------- %%%
@@ -446,24 +442,24 @@ load_database_content(SessionId, _Env, Input) ->
Filename = filename:join(Path, File),
% Check path/file/filename
- mod_esi:deliver(SessionId, "<div id=\"content\">"),
+ ok = mod_esi:deliver(SessionId, "<div id=\"content\">"),
case file:read_file_info(Filename) of
{ok, _} ->
Content = "<center>
Parsing: " ++ Filename ++ "<br>
</center>",
- mod_esi:deliver(SessionId, Content),
- case percept:analyze(Filename) of
- {error, Reason} ->
- mod_esi:deliver(SessionId, error_msg("Analyze" ++ term2html(Reason)));
- _ ->
- Complete = "<center><a href=\"/cgi-bin/percept_html/page\">View</a></center>",
- mod_esi:deliver(SessionId, Complete)
- end;
+ ok = mod_esi:deliver(SessionId, Content),
+ case percept:analyze(Filename) of
+ {error, Reason} ->
+ ok = mod_esi:deliver(SessionId, error_msg("Analyze" ++ term2html(Reason)));
+ _ ->
+ Complete = "<center><a href=\"/cgi-bin/percept_html/page\">View</a></center>",
+ ok = mod_esi:deliver(SessionId, Complete)
+ end;
{error, Reason} ->
- mod_esi:deliver(SessionId, error_msg("File" ++ term2html(Reason)))
+ ok = mod_esi:deliver(SessionId, error_msg("File" ++ term2html(Reason)))
end,
- mod_esi:deliver(SessionId, "</div>").
+ ok = mod_esi:deliver(SessionId, "</div>").
codelocation_content(_Env, Input) ->
Query = httpd:parse_query(Input),
diff --git a/lib/percept/src/percept_image.erl b/lib/percept/src/percept_image.erl
index f649439d7a..e819938027 100644
--- a/lib/percept/src/percept_image.erl
+++ b/lib/percept/src/percept_image.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/percept/test/Makefile b/lib/percept/test/Makefile
index 4ba0b80fc8..87fde49410 100644
--- a/lib/percept/test/Makefile
+++ b/lib/percept/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2007-2012. All Rights Reserved.
+# Copyright Ericsson AB 2007-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -52,8 +52,7 @@ RELSYSDIR = $(RELEASE_PATH)/percept_test
# FLAGS
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include \
- -I$(ERL_TOP)/lib/percept/include
+ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/percept/include
# ----------------------------------------------------
# Targets
diff --git a/lib/percept/test/egd_SUITE.erl b/lib/percept/test/egd_SUITE.erl
index 41e8999e17..401695dddd 100644
--- a/lib/percept/test/egd_SUITE.erl
+++ b/lib/percept/test/egd_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,198 +19,186 @@
%%
-module(egd_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
+-export([all/0, suite/0]).
-export([init_per_suite/1, end_per_suite/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
%% Test cases
--export([
- image_create_and_destroy/1,
- image_shape/1,
- image_primitives/1,
- image_colors/1,
- image_font/1,
- image_png_compliant/1
- ]).
-
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
-init_per_suite(Config) when is_list(Config) ->
- random:seed(now()),
- Config.
-
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{max_size, 800}, {watchdog,Dog} | Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+-export([image_create_and_destroy/1,
+ image_shape/1,
+ image_primitives/1,
+ image_colors/1,
+ image_font/1,
+ image_fans/1,
+ image_png_compliant/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[image_create_and_destroy, image_shape,
image_primitives, image_colors, image_font,
+ image_fans,
image_png_compliant].
-groups() ->
- [].
-init_per_group(_GroupName, Config) ->
+init_per_suite(Config) when is_list(Config) ->
+ rand:seed(exsplus),
Config.
-end_per_group(_GroupName, Config) ->
+end_per_suite(Config) when is_list(Config) ->
Config.
+init_per_testcase(_Case, Config) ->
+ [{max_size, 800}|Config].
+
+end_per_testcase(_Case, _Config) ->
+ ok.
%%----------------------------------------------------------------------
%% Tests
%%----------------------------------------------------------------------
-image_create_and_destroy(suite) ->
- [];
-image_create_and_destroy(doc) ->
- ["Image creation and destroy test."];
+%% Image creation and destroy test.
image_create_and_destroy(Config) when is_list(Config) ->
- {W,H} = get_size(?config(max_size, Config)),
- ?line Image = egd:create(W, H),
- ?line ok = egd:destroy(Image),
+ {W,H} = get_size(proplists:get_value(max_size, Config)),
+ Image = egd:create(W, H),
+ ok = egd:destroy(Image),
ok.
-image_colors(suite) ->
- [];
-image_colors(doc) ->
- ["Image color test."];
+%% Image color test.
image_colors(Config) when is_list(Config) ->
- {W,H} = get_size(?config(max_size, Config)),
- ?line Image = egd:create(W, H),
+ {W,H} = get_size(proplists:get_value(max_size, Config)),
+ Dir = proplists:get_value(priv_dir, Config),
+ Image = egd:create(W, H),
put(image_size, {W,H}),
RGB = get_rgb(),
- ?line Black = egd:color({0,0,0}),
- ?line Red = egd:color({255,0,0}),
- ?line Green = egd:color({0,255,0}),
- ?line Blue = egd:color({0,0,255}),
- ?line Random = egd:color(Image, RGB),
-
- ?line ok = egd:line(Image, get_point(), get_point(), Random),
- ?line ok = egd:line(Image, get_point(), get_point(), Red),
- ?line ok = egd:line(Image, get_point(), get_point(), Green),
- ?line ok = egd:line(Image, get_point(), get_point(), Black),
- ?line ok = egd:line(Image, get_point(), get_point(), Blue),
+ Black = egd:color({0,0,0}),
+ Red = egd:color({255,0,0}),
+ Green = egd:color({0,255,0}),
+ Blue = egd:color({0,0,255}),
+ Random = egd:color(Image, RGB),
+
+ ok = egd:line(Image, get_point(), get_point(), Random),
+ ok = egd:line(Image, get_point(), get_point(), Red),
+ ok = egd:line(Image, get_point(), get_point(), Green),
+ ok = egd:line(Image, get_point(), get_point(), Black),
+ ok = egd:line(Image, get_point(), get_point(), Blue),
HtmlDefaultNames = [black,silver,gray,white,maroon,red,
- purple,fuchia,green,lime,olive,yellow,navy,blue,teal,
- aqua],
-
- lists:foreach(fun
- (ColorName) ->
- ?line Color = egd:color(ColorName),
- ?line ok = egd:line(Image, get_point(), get_point(), Color)
- end, HtmlDefaultNames),
-
- ?line <<_/binary>> = egd:render(Image),
- ?line ok = egd:destroy(Image),
+ purple,fuchia,green,lime,olive,yellow,navy,blue,teal,
+ aqua],
+
+ lists:foreach(fun (ColorName) ->
+ Color = egd:color(ColorName),
+ ok = egd:line(Image, get_point(), get_point(), Color)
+ end, HtmlDefaultNames),
+
+ Png1 = <<_/binary>> = egd:render(Image,png,[{render_engine, alpha}]),
+ File1 = filename:join(Dir,"image_colors_alpha.png"),
+ ok = egd:save(Png1,File1),
+ ct:log("<p>Image alpha:</p><img src=\"~s\" />~n", [File1]),
+ Png2 = <<_/binary>> = egd:render(Image,png,[{render_engine, opaque}]),
+ File2 = filename:join(Dir,"image_colors_opaque.png"),
+ ok = egd:save(Png2,File2),
+ ct:log("<p>Image opaque:</p><img src=\"~s\" />~n", [File2]),
+
+ ok = egd:destroy(Image),
erase(image_size),
ok.
-image_shape(suite) ->
- [];
-image_shape(doc) ->
- ["Image shape api test."];
+%% Image shape API test.
image_shape(Config) when is_list(Config) ->
- {W,H} = get_size(?config(max_size, Config)),
+ {W,H} = get_size(proplists:get_value(max_size, Config)),
+ Dir = proplists:get_value(priv_dir, Config),
put(image_size, {W,H}),
- ?line Im = egd:create(W, H),
-
- ?line Fgc = egd:color({255,0,0}),
-
- ?line ok = egd:line(Im, get_point(), get_point(), Fgc),
- ?line ok = egd:rectangle(Im, get_point(), get_point(), Fgc),
- ?line ok = egd:filledEllipse(Im, get_point(), get_point(), Fgc),
- ?line ok = egd:arc(Im, get_point(), get_point(), Fgc),
- ?line ok = egd:arc(Im, get_point(), get_point(), 100, Fgc),
-
+ Im = egd:create(W, H),
+
+ Fgc = egd:color({255,0,0}),
+
+ ok = egd:line(Im, get_point(), get_point(), Fgc),
+ ok = egd:rectangle(Im, get_point(), get_point(), Fgc),
+ ok = egd:filledEllipse(Im, get_point(), get_point(), Fgc),
+ ok = egd:arc(Im, get_point(), get_point(), Fgc),
+ ok = egd:arc(Im, get_point(), get_point(), 100, Fgc),
+
Pt1 = get_point(),
Pt2 = get_point(),
- ?line ok = egd:filledRectangle(Im, Pt1, Pt2, Fgc),
+ ok = egd:filledRectangle(Im, Pt1, Pt2, Fgc),
+
+ Bitmap = egd:render(Im, raw_bitmap),
- ?line Bitmap = egd:render(Im, raw_bitmap),
+ ok = bitmap_point_has_color(Bitmap, {W,H}, Pt2, Fgc),
+ ok = bitmap_point_has_color(Bitmap, {W,H}, Pt1, Fgc),
- ?line ok = bitmap_point_has_color(Bitmap, {W,H}, Pt2, Fgc),
- ?line ok = bitmap_point_has_color(Bitmap, {W,H}, Pt1, Fgc),
+ Bin = <<_/binary>> = egd:render(Im, raw_bitmap, [{render_engine, alpha}]),
+ Png = egd_png:binary(W,H,Bin),
+ File = filename:join(Dir,"image_shape.png"),
+ ok = egd:save(Png,File),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File]),
- ?line <<_/binary>> = egd:render(Im, raw_bitmap, [{render_engine, alpha}]),
+ ok = egd:destroy(Im),
- ?line ok = egd:destroy(Im),
erase(image_size),
ok.
-image_primitives(suite) ->
- [];
-image_primitives(doc) ->
- ["Image shape api test."];
+%% Image shape API test.
image_primitives(Config) when is_list(Config) ->
- {W,H} = get_size(?config(max_size, Config)),
+ {W,H} = get_size(proplists:get_value(max_size, Config)),
+ Dir = proplists:get_value(priv_dir, Config),
put(image_size, {W,H}),
- ?line Im0 = egd_primitives:create(W, H),
- ?line Fgc = egd:color({25,25,255}),
- ?line Bgc = egd:color({0,250,25}),
+ Im0 = egd_primitives:create(W, H),
+ Fgc = egd:color({25,25,255}),
+ Bgc = egd:color({0,250,25}),
- ?line Im1 = lists:foldl(fun
- ({Function, Arguments}, Im) ->
- ?line erlang:apply(egd_primitives, Function, [Im|Arguments])
- end, Im0,
- [{Fs, [get_point(), get_point(), Bgc]} || Fs <- [line, rectangle, filledEllipse, arc]] ++
- [{pixel, [get_point(), Bgc]},
- {filledTriangle, [get_point(), get_point(), get_point(), Bgc]}]),
+ Im1 = lists:foldl(fun ({Function, Arguments}, Im) ->
+ erlang:apply(egd_primitives, Function, [Im|Arguments])
+ end, Im0,
+ [{Fs, [get_point(), get_point(), Bgc]} || Fs <- [line, rectangle, filledEllipse, arc]] ++
+ [{pixel, [get_point(), Bgc]},
+ {filledTriangle, [get_point(), get_point(), get_point(), Bgc]}]),
Pt1 = get_point(),
Pt2 = get_point(),
- ?line Im2 = egd_primitives:filledRectangle(Im1, Pt1, Pt2, Fgc),
+ Im2 = egd_primitives:filledRectangle(Im1, Pt1, Pt2, Fgc),
- ?line Bitmap = egd_render:binary(Im2, opaque),
+ Bitmap = egd_render:binary(Im2, opaque),
- ?line ok = bitmap_point_has_color(Bitmap, {W,H}, Pt2, Fgc),
- ?line ok = bitmap_point_has_color(Bitmap, {W,H}, Pt1, Fgc),
+ ok = bitmap_point_has_color(Bitmap, {W,H}, Pt2, Fgc),
+ ok = bitmap_point_has_color(Bitmap, {W,H}, Pt1, Fgc),
- ?line <<_/binary>> = egd_render:binary(Im2, alpha),
+ Bin = <<_/binary>> = egd_render:binary(Im2, alpha),
+ Png = egd_png:binary(W,H,Bin),
+ File = filename:join(Dir,"image_primitives.png"),
+ ok = egd:save(Png,File),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File]),
erase(image_size),
ok.
-
-
-
-image_font(suite) ->
- [];
-image_font(doc) ->
- ["Image font test."];
+%% Image font test.
image_font(Config) when is_list(Config) ->
- {W,H} = get_size(?config(max_size, Config)),
+ {W,H} = get_size(proplists:get_value(max_size, Config)),
+ Dir = proplists:get_value(priv_dir, Config),
put(image_size, {W,H}),
- ?line Im = egd:create(W, H),
- ?line Fgc = egd:color({0,130,0}),
-
- ?line Filename = filename:join([code:priv_dir(percept),"fonts","6x11_latin1.wingsfont"]),
- ?line Font = egd_font:load(Filename),
-
+ Im = egd:create(W, H),
+ Fgc = egd:color({0,130,0}),
+
+ Filename = filename:join([code:priv_dir(percept),"fonts","6x11_latin1.wingsfont"]),
+ Font = egd_font:load(Filename),
+
% simple text
- ?line ok = egd:text(Im, get_point(), Font, "Hello World", Fgc),
- ?line <<_/binary>> = egd:render(Im, png),
-
+ ok = egd:text(Im, get_point(), Font, "Hello World", Fgc),
+ <<_/binary>> = egd:render(Im, png),
+
GlyphStr1 = " !\"#$%&'()*+,-./", % Codes 32 -> 47
NumericStr = "0123456789", % Codes 48 -> 57
GlyphStr2 = ":;<=>?@", % Codes 58 -> 64
@@ -219,99 +207,149 @@ image_font(Config) when is_list(Config) ->
AlphaSmStr = "abcdefghijklmnopqrstuvwxyz", % Codes 97 -> 122
GlyphStr4 = "{|}~", % Codes 123 -> 126
- ?line ok = egd:text(Im, get_point(), Font, GlyphStr1, Fgc),
- ?line <<_/binary>> = egd:render(Im, png),
-
- ?line ok = egd:text(Im, get_point(), Font, NumericStr, Fgc),
- ?line <<_/binary>> = egd:render(Im, png),
-
- ?line ok = egd:text(Im, get_point(), Font, GlyphStr2, Fgc),
- ?line <<_/binary>> = egd:render(Im, png),
-
- ?line ok = egd:text(Im, get_point(), Font, AlphaBigStr, Fgc),
- ?line <<_/binary>> = egd:render(Im, png),
-
- ?line ok = egd:text(Im, get_point(), Font, GlyphStr3, Fgc),
- ?line <<_/binary>> = egd:render(Im, png),
-
- ?line ok = egd:text(Im, get_point(), Font, AlphaSmStr, Fgc),
- ?line <<_/binary>> = egd:render(Im, png),
-
- ?line ok = egd:text(Im, get_point(), Font, GlyphStr4, Fgc),
- ?line <<_/binary>> = egd:render(Im, png),
-
- ?line ok = egd:destroy(Im),
+ ok = egd:text(Im, get_point(), Font, GlyphStr1, Fgc),
+ Png1 = <<_/binary>> = egd:render(Im, png),
+ File1 = filename:join(Dir,"text1.png"),
+ ok = egd:save(Png1,File1),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File1]),
+
+ ok = egd:text(Im, get_point(), Font, NumericStr, Fgc),
+ Png2 = <<_/binary>> = egd:render(Im, png),
+ File2 = filename:join(Dir,"text2.png"),
+ ok = egd:save(Png2,File2),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File2]),
+
+ ok = egd:text(Im, get_point(), Font, GlyphStr2, Fgc),
+ Png3 = <<_/binary>> = egd:render(Im, png),
+ File3 = filename:join(Dir,"text3.png"),
+ ok = egd:save(Png3,File3),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File3]),
+
+ ok = egd:text(Im, get_point(), Font, AlphaBigStr, Fgc),
+ Png4 = <<_/binary>> = egd:render(Im, png),
+ File4 = filename:join(Dir,"text4.png"),
+ ok = egd:save(Png4,File4),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File4]),
+
+ ok = egd:text(Im, get_point(), Font, GlyphStr3, Fgc),
+ Png5 = <<_/binary>> = egd:render(Im, png),
+ File5 = filename:join(Dir,"text5.png"),
+ ok = egd:save(Png5,File5),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File5]),
+
+ ok = egd:text(Im, get_point(), Font, AlphaSmStr, Fgc),
+ Png6 = <<_/binary>> = egd:render(Im, png),
+ File6 = filename:join(Dir,"text6.png"),
+ ok = egd:save(Png6,File6),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File6]),
+
+ ok = egd:text(Im, get_point(), Font, GlyphStr4, Fgc),
+ Png7 = <<_/binary>> = egd:render(Im, png),
+ File7 = filename:join(Dir,"text7.png"),
+ ok = egd:save(Png7,File7),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File7]),
+
+ ok = egd:destroy(Im),
erase(image_size),
ok.
-image_png_compliant(suite) ->
- [];
-image_png_compliant(doc) ->
- ["Image png compliant test."];
+%% Image png compliant test.
image_png_compliant(Config) when is_list(Config) ->
- {W,H} = get_size(?config(max_size, Config)),
+ {W,H} = get_size(proplists:get_value(max_size, Config)),
put(image_size, {W,H}),
- ?line Im = egd:create(W, H),
- ?line Fgc = egd:color({0,0,0}),
- ?line ok = egd:filledRectangle(Im, get_point(), get_point(), Fgc),
-
- ?line Bin = egd:render(Im, png),
- ?line true = binary_is_png_compliant(Bin),
-
- ?line ok = egd:destroy(Im),
+ Im = egd:create(W, H),
+ Fgc = egd:color({0,0,0}),
+ ok = egd:filledRectangle(Im, get_point(), get_point(), Fgc),
+
+ Bin = egd:render(Im, png),
+ true = binary_is_png_compliant(Bin),
+
+ ok = egd:destroy(Im),
erase(image_size),
ok.
+image_fans(Config) when is_list(Config) ->
+ W = 1024,
+ H = 800,
+ Dir = proplists:get_value(priv_dir, Config),
+
+ Fun = fun({F,Args},Im) ->
+ erlang:apply(egd_primitives,F,[Im|Args])
+ end,
+
+ %% fan1
+ Ops1 = gen_vertical_fan(1,{0,400},egd:color(red),1024,800,-15),
+ Ops2 = gen_horizontal_fan(1,{512,800},egd:color(green),1024,0,-15),
+
+ Im0 = egd_primitives:create(W,H),
+ Im1 = lists:foldl(Fun, Im0, Ops1 ++ Ops2),
+ Bin1 = egd_render:binary(Im1, opaque),
+ Png1 = egd_png:binary(W,H,Bin1),
+
+ File1 = filename:join(Dir,"fan1_opaque.png"),
+ ok = egd:save(Png1,File1),
+ ct:log("<p>Image opaque width 1:</p><img src=\"~s\" />~n", [File1]),
+
+ Bin2 = egd_render:binary(Im1, alpha),
+ Png2 = egd_png:binary(W,H,Bin2),
+
+ File2 = filename:join(Dir,"fan1_alpha.png"),
+ ok = egd:save(Png2,File2),
+ ct:log("<p>Image alpha width 1:</p><img src=\"~s\" />~n", [File2]),
+
+
+ %% fan2
+ Ops3 = gen_vertical_fan(7,{0,400},egd:color(red),1024,800,-15),
+ Ops4 = gen_horizontal_fan(7,{512,800},egd:color(green),1024,0,-15),
+
+ Im2 = lists:foldl(Fun, Im0, Ops3 ++ Ops4),
+ Bin3 = egd_render:binary(Im2, opaque),
+ Png3 = egd_png:binary(W,H,Bin3),
+
+ File3 = filename:join(Dir,"fan2_opaque.png"),
+ ok = egd:save(Png3,File3),
+ ct:log("<p>Image opaque width 7:</p><img src=\"~s\" />~n", [File3]),
+
+ Bin4 = egd_render:binary(Im2, alpha),
+ Png4 = egd_png:binary(W,H,Bin4),
+
+ File4 = filename:join(Dir,"fan2_alpha.png"),
+ ok = egd:save(Png4,File4),
+ ct:log("<p>Image alpha width 7:</p><img src=\"~s\" />~n", [File4]),
+ ok.
+
+gen_vertical_fan(Wd,Pt,C,X,Y,Step) when Y > 0 ->
+ [{line,[Pt,{X,Y},Wd,C]}|gen_vertical_fan(Wd,Pt,C,X,Y + Step,Step)];
+gen_vertical_fan(_,_,_,_,_,_) -> [].
+
+gen_horizontal_fan(Wd,Pt,C,X,Y,Step) when X > 0 ->
+ [{line,[Pt,{X,Y},Wd,C]}|gen_horizontal_fan(Wd,Pt,C,X + Step,Y,Step)];
+gen_horizontal_fan(_,_,_,_,_,_) -> [].
+
+
%%----------------------------------------------------------------------
%% Auxiliary tests
%%----------------------------------------------------------------------
-
+
bitmap_point_has_color(Bitmap, {W,_}, {X,Y}, C) ->
{CR,CG,CB,_} = egd_primitives:rgb_float2byte(C),
N = W*Y*3 + X*3,
<< _:N/binary, R,G,B, _/binary>> = Bitmap,
case {R,G,B} of
- {CR,CG,CB} -> ok;
- Other ->
- io:format("bitmap_point_has_color: error color was ~p, should be ~p~n", [Other, {CR,CG,CB}]),
- {error, {Other,{CR,CG,CB}}}
- end.
-
-%% jfif header by specification
-%% 2 bytes, length
-%% 5 bytes, identifier ="JFIF\0"
-%% 2 bytes, version, (major, minor)
-%% 1 byte , units
-%% However, JFIF seems to start at 6 (7 with 1-index)?
-
-binary_is_jfif_compliant(JpegBin) ->
- ?line {Bin, _} = split_binary(JpegBin, 11),
- List = binary_to_list(Bin),
- case lists:sublist(List, 7, 4) of
- "JFIF" -> true;
- Other ->
- io:format("img -> ~p~n", [Other]),
- false
- end.
-
-binary_is_gif_compliant(GifBin) ->
- ?line {Bin, _} = split_binary(GifBin, 10),
- List = binary_to_list(Bin),
- case lists:sublist(List, 1,5) of
- "GIF87" -> true;
- Other ->
- io:format("img -> ~p~n", [Other]),
- false
+ {CR,CG,CB} -> ok;
+ Other ->
+ io:format("bitmap_point_has_color: error color was ~p, should be ~p~n", [Other, {CR,CG,CB}]),
+ {error, {Other,{CR,CG,CB}}}
end.
binary_is_png_compliant(PngBin) ->
- ?line {Bin, _} = split_binary(PngBin, 10),
+ {Bin, _} = split_binary(PngBin, 10),
List = binary_to_list(Bin),
case lists:sublist(List, 2,3) of
- "PNG" -> true;
- Other ->
- io:format("img -> ~p~n", [Other]),
- false
+ "PNG" -> true;
+ Other ->
+ io:format("img -> ~p~n", [Other]),
+ false
end.
%%----------------------------------------------------------------------
@@ -320,20 +358,20 @@ binary_is_png_compliant(PngBin) ->
get_rgb() ->
- R = random(255),
- G = random(255),
- B = random(255),
- {R,G,B}.
+ R = random(255),
+ G = random(255),
+ B = random(255),
+ {R,G,B}.
get_angle() ->
- random(359).
+ random(359).
get_point() ->
get_point(get(image_size)).
get_point({W,H}) ->
- X = random(W - 1),
- Y = random(H - 1),
- {X,Y}.
+ X = random(W - 1),
+ Y = random(H - 1),
+ {X,Y}.
get_size(Max) ->
W = trunc(random(Max/2) + Max/2 + 1),
@@ -344,8 +382,8 @@ get_size(Max) ->
get_points(N) ->
get_points(N, []).
get_points(0, Out) ->
- Out;
+ Out;
get_points(N, Out) ->
get_points(N - 1, [get_point() | Out]).
-random(N) -> trunc(random:uniform(trunc(N + 1)) - 1).
+random(N) -> trunc(rand:uniform(trunc(N + 1)) - 1).
diff --git a/lib/percept/test/ipc_tree.erl b/lib/percept/test/ipc_tree.erl
index ff1c8d49c1..29da20e83f 100644
--- a/lib/percept/test/ipc_tree.erl
+++ b/lib/percept/test/ipc_tree.erl
@@ -46,4 +46,4 @@ gather([]) -> ok;
gather([_|Pids]) -> receive _ -> gather(Pids) end.
workload(0) -> ok;
-workload(N) -> math:sin(2), workload(N - 1).
+workload(N) -> _ = math:sin(2), workload(N - 1).
diff --git a/lib/percept/test/percept_SUITE.erl b/lib/percept/test/percept_SUITE.erl
index fd96c2b97a..fbc77302ae 100644
--- a/lib/percept/test/percept_SUITE.erl
+++ b/lib/percept/test/percept_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,54 +19,26 @@
%%
-module(percept_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
--export([init_per_suite/1, end_per_suite/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0]).
%% Test cases
--export([
- app/1,
- appup/1,
- profile/1,
- analyze/1,
- analyze_dist/1,
- webserver/1
- ]).
-
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(2)).
-
-init_per_suite(Config) when is_list(Config) ->
- Config.
-
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{max_size, 300}, {watchdog,Dog} | Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
+-export([app/1,
+ appup/1,
+ profile/1,
+ analyze/1,
+ analyze_dist/1,
+ webserver/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
- [app, appup, webserver, profile, analyze, analyze_dist].
-
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+ [app, appup, webserver, profile,
+ analyze, analyze_dist].
%%----------------------------------------------------------------------
@@ -75,70 +47,56 @@ end_per_group(_GroupName, Config) ->
%% Test that the percept app file is ok
app(Config) when is_list(Config) ->
- ok = ?t:app_test(percept).
+ ok = test_server:app_test(percept).
%% Test that the percept appup file is ok
appup(Config) when is_list(Config) ->
- ok = ?t:appup_test(percept).
+ ok = test_server:appup_test(percept).
-webserver(suite) ->
- [];
-webserver(doc) ->
- ["Percept webserver test."];
+%% Percept webserver test.
webserver(Config) when is_list(Config) ->
% Explicit start inets?
- ?line {started, _, Port} = percept:start_webserver(),
- ?line ok = percept:stop_webserver(Port),
- ?line {started, _, _} = percept:start_webserver(),
- ?line ok = percept:stop_webserver(),
- ?line {started, _, NewPort} = percept:start_webserver(),
- ?line ok = percept:stop_webserver(NewPort),
- ?line application:stop(inets),
+ {started, _, Port} = percept:start_webserver(),
+ ok = percept:stop_webserver(Port),
+ {started, _, _} = percept:start_webserver(),
+ ok = percept:stop_webserver(),
+ {started, _, NewPort} = percept:start_webserver(),
+ ok = percept:stop_webserver(NewPort),
+ application:stop(inets),
ok.
-profile(suite) ->
- [];
-profile(doc) ->
- ["Percept profile test."];
+%% Percept profile test.
profile(Config) when is_list(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
File = filename:join([Path,"profile_test.dat"]),
- ?line {ok, _} = percept:profile(File, [procs]),
+ {ok, _} = percept:profile(File, [procs]),
ipc_tree:go(7),
- ?line ok = percept:stop_profile(),
+ ok = percept:stop_profile(),
ok.
-analyze(suite) ->
- [];
-analyze(doc) ->
- ["Percept analyze test."];
+%% Percept analyze test.
analyze(Config) when is_list(Config) ->
Begin = processes(),
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
File = filename:join([Path,"profile_test.dat"]),
- T0 = erlang:now(),
- ?line ok = percept:analyze(File),
- T1 = erlang:now(),
- Secs = timer:now_diff(T1,T0)/1000000,
- io:format("percept:analyze/1 took ~.2f s.~n", [Secs]),
- ?line {stopped, _} = percept_db:stop(),
+ T0 = erlang:monotonic_time(milli_seconds),
+ ok = percept:analyze(File),
+ T1 = erlang:monotonic_time(milli_seconds),
+ io:format("percept:analyze/1 took ~w ms.~n", [T1 - T0]),
+ {stopped, _} = percept_db:stop(),
print_remainers(remainers(Begin, processes())),
ok.
-analyze_dist(suite) ->
- [];
-analyze_dist(doc) ->
- ["Percept analyze distribution test."];
+%% Percept analyze distribution test.
analyze_dist(Config) when is_list(Config) ->
Begin = processes(),
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
File = filename:join([Path,"ipc-dist.dat"]),
- T0 = erlang:now(),
- ?line ok = percept:analyze(File),
- T1 = erlang:now(),
- Secs = timer:now_diff(T1,T0)/1000000,
- io:format("percept:analyze/1 took ~.2f s.~n", [Secs]),
- ?line {stopped, _} = percept_db:stop(),
+ T0 = erlang:monotonic_time(milli_seconds),
+ ok = percept:analyze(File),
+ T1 = erlang:monotonic_time(milli_seconds),
+ io:format("percept:analyze/1 took ~w ms.~n", [T1 - T0]),
+ {stopped, _} = percept_db:stop(),
print_remainers(remainers(Begin, processes())),
ok.
@@ -166,9 +124,3 @@ remainers(Begin, [Pid|End], Out) ->
true -> remainers(Begin, End, Out);
false -> remainers(Begin, End, [Pid|Out])
end.
-
-
-
-
-
-
diff --git a/lib/percept/test/percept_db_SUITE.erl b/lib/percept/test/percept_db_SUITE.erl
index e2775aabc0..b2827e0e42 100644
--- a/lib/percept/test/percept_db_SUITE.erl
+++ b/lib/percept/test/percept_db_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,57 +19,35 @@
%%
-module(percept_db_SUITE).
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/1]).
--export([init_per_suite/1, end_per_suite/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0]).
%% Test cases
--export([
- start/1
- ]).
+-export([start/1]).
%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(2)).
-define(restarts, 10).
-define(alive_timeout, 500).
-init_per_suite(Config) when is_list(Config) ->
- Config.
+suite() ->
+ [{timetrap, {minutes, 2}}].
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{max_size, 300}, {watchdog,Dog} | Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-all(suite) ->
- % Test cases
+all() ->
[start].
%%----------------------------------------------------------------------
%% Tests
%%----------------------------------------------------------------------
-start(suite) ->
- [];
-start(doc) ->
- ["Percept_db start and restart test."];
+%% Percept_db start and restart test.
start(Config) when is_list(Config) ->
ok = restart(?restarts),
{stopped, _DB} = percept_db:stop(),
ok.
-restart(0)->
- ok;
+restart(0)-> ok;
restart(N)->
{_, DB} = percept_db:start(),
timer:sleep(?alive_timeout),
diff --git a/lib/percept/vsn.mk b/lib/percept/vsn.mk
index 833ab35aa5..614cee8645 100644
--- a/lib/percept/vsn.mk
+++ b/lib/percept/vsn.mk
@@ -1 +1 @@
-PERCEPT_VSN = 0.8.11
+PERCEPT_VSN = 0.9
diff --git a/lib/public_key/Makefile b/lib/public_key/Makefile
index d1b6035139..7a5c1c1443 100644
--- a/lib/public_key/Makefile
+++ b/lib/public_key/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2009. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/public_key/asn1/Makefile b/lib/public_key/asn1/Makefile
index 7474297b9b..a920ea87ea 100644
--- a/lib/public_key/asn1/Makefile
+++ b/lib/public_key/asn1/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2012. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/public_key/doc/src/Makefile b/lib/public_key/doc/src/Makefile
index 3918c005f2..5bdc5d4159 100644
--- a/lib/public_key/doc/src/Makefile
+++ b/lib/public_key/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2012. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -38,7 +38,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# ----------------------------------------------------
XML_APPLICATION_FILES = ref_man.xml
XML_REF3_FILES = public_key.xml
-XML_REF6_FILES =
+XML_REF6_FILES = public_key_app.xml
XML_PART_FILES = part.xml part_notes.xml
XML_CHAPTER_FILES = \
@@ -50,7 +50,7 @@ XML_CHAPTER_FILES = \
BOOK_FILES = book.xml
XML_FILES = $(BOOK_FILES) $(XML_APPLICATION_FILES) $(XML_REF3_FILES) \
- $(XML_PART_FILES) $(XML_CHAPTER_FILES)
+ $(XML_REF6_FILES) $(XML_PART_FILES) $(XML_CHAPTER_FILES)
GIF_FILES = note.gif
@@ -67,9 +67,11 @@ EXTRA_FILES = \
$(DEFAULT_GIF_FILES) \
$(DEFAULT_HTML_FILES) \
$(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) \
+ $(XML_REF6_FILES:%.xml=$(HTMLDIR)/%.html) \
$(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html)
MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
+MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6)
HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
@@ -98,10 +100,11 @@ html: gifs $(HTML_REF_MAN_FILE)
clean clean_docs:
rm -rf $(HTMLDIR)/*
rm -f $(MAN3DIR)/*
+ rm -f $(MAN6DIR)/*
rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
rm -f errs core *~
-man: $(MAN3_FILES)
+man: $(MAN3_FILES) $(MAN6_FILES)
gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
@@ -122,6 +125,8 @@ release_docs_spec: docs
$(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
$(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
+ $(INSTALL_DIR) "$(RELEASE_PATH)/man/man6"
+ $(INSTALL_DATA) $(MAN6DIR)/* "$(RELEASE_PATH)/man/man6"
release_spec:
info:
diff --git a/lib/public_key/doc/src/book.xml b/lib/public_key/doc/src/book.xml
index d148bc0211..531f131743 100644
--- a/lib/public_key/doc/src/book.xml
+++ b/lib/public_key/doc/src/book.xml
@@ -5,7 +5,7 @@
<header titlestyle="normal">
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/public_key/doc/src/notes.xml b/lib/public_key/doc/src/notes.xml
index da8f62e2f8..c4d930c01f 100644
--- a/lib/public_key/doc/src/notes.xml
+++ b/lib/public_key/doc/src/notes.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -35,6 +35,34 @@
<file>notes.xml</file>
</header>
+<section><title>Public_Key 1.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The ASN-1 type GeneralName can have more values, then the
+ most common directory name, the code now handles this.</p>
+ <p>
+ Own Id: OTP-13554</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Handle PEM encoded EC public keys</p>
+ <p>
+ Own Id: OTP-13408</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Public_Key 1.1.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/public_key/doc/src/part.xml b/lib/public_key/doc/src/part.xml
index 8e5b3e9147..a6f5dd27c5 100644
--- a/lib/public_key/doc/src/part.xml
+++ b/lib/public_key/doc/src/part.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2014</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/public_key/doc/src/part_notes.xml b/lib/public_key/doc/src/part_notes.xml
index 0665581474..17f06d14f5 100644
--- a/lib/public_key/doc/src/part_notes.xml
+++ b/lib/public_key/doc/src/part_notes.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/public_key/doc/src/public_key.xml b/lib/public_key/doc/src/public_key.xml
index 16a7497a22..385604677c 100644
--- a/lib/public_key/doc/src/public_key.xml
+++ b/lib/public_key/doc/src/public_key.xml
@@ -34,40 +34,13 @@
<module>public_key</module>
<modulesummary>API module for public-key infrastructure.</modulesummary>
<description>
- <p>This module provides functions to handle public-key infrastructure. It can
- encode/decode different file formats (PEM, OpenSSH), sign and verify digital signatures,
- and validate certificate paths and certificate revocation lists.
+ <p>Provides functions to handle public-key infrastructure,
+ for details see
+ <seealso marker="public_key_app">public_key(6)</seealso>.
</p>
</description>
<section>
- <title>public_key</title>
-
- <list type="bulleted">
- <item> Public Key requires the Crypto and ASN1 applications,
- the latter as OTP R16 (hopefully the runtime dependency on ASN1 will
- be removed again in the future).</item>
-
- <item>Supports <url href="http://www.ietf.org/rfc/rfc5280.txt">RFC 5280 </url> -
- Internet X.509 Public-Key Infrastructure Certificate and Certificate Revocation List
- (CRL) Profile </item>
- <item>Supports <url href="http://www.ietf.org/rfc/rfc3447.txt"> PKCS-1 </url> -
- RSA Cryptography Standard </item>
- <item>Supports <url href="http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf"> DSS</url> -
- Digital Signature Standard (DSA - Digital Signature Algorithm)</item>
- <item>Supports
- <url href="http://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-3-diffie-hellman-key-agreement-standar.htm"> PKCS-3 </url> -
- Diffie-Hellman Key Agreement Standard </item>
- <item>Supports <url href="http://www.ietf.org/rfc/rfc2898.txt"> PKCS-5</url> -
- Password-Based Cryptography Standard </item>
- <item>Supports <url href="http://www.ietf.org/rfc/rfc5208.txt"> PKCS-8</url> -
- Private-Key Information Syntax Standard</item>
- <item>Supports <url href="http://www.ietf.org/rfc/rfc5967.txt"> PKCS-10</url> -
- Certification Request Syntax Standard</item>
- </list>
- </section>
-
- <section>
<title>DATA TYPES</title>
<note><p>All records used in this Reference Manual
@@ -118,7 +91,7 @@
<p><c> not_encrypted | cipher_info()}</c></p></item>
<tag><c>cipher_info() = </c></tag>
- <item><p><c>{"RC2-CBC" | "DES-CBC" | "DES-EDE3-CBC", crypto:rand_bytes(8)</c></p>
+ <item><p><c>{"RC2-CBC" | "DES-CBC" | "DES-EDE3-CBC", crypto:strong_rand_bytes(8)</c></p>
<p><c>| {#'PBEParameter{}, digest_type()} | #'PBES2-params'{}}</c></p>
</item>
@@ -141,7 +114,7 @@
<item><p><c>#'DSAPrivateKey'{}</c></p></item>
<tag><c>ec_public_key()</c></tag>
- <item><p>= <c>{#'ECPoint'{}, #'EcpkParameters'{} | {namedCurve, oid()}}</c></p></item>
+ <item><p>= <c>{#'ECPoint'{}, #'ECParameters'{} | {namedCurve, oid()}}</c></p></item>
<tag><c>ec_private_key() =</c></tag>
<item><p><c>#'ECPrivateKey'{}</c></p></item>
@@ -418,13 +391,14 @@
<v>Entity = term()</v>
<d>Erlang representation of
<c>Asn1Type</c>. If <c>Asn1Type</c> is 'SubjectPublicKeyInfo',
- <c>Entity</c> must be either an <c>rsa_public_key()</c> or a
- <c>dsa_public_key()</c> and this function creates the appropriate
+ <c>Entity</c> must be either an <c>rsa_public_key()</c>,
+ <c>dsa_public_key()</c> or an <c>ec_public_key()</c>
+ and this function creates the appropriate
'SubjectPublicKeyInfo' entry.
</d>
<v>CipherInfo = cipher_info()</v>
<v>Password = string()</v>
- </type>
+ </type>
<desc>
<p>Creates a PEM entry that can be feed to <c>pem_encode/1</c>.</p>
</desc>
@@ -727,6 +701,23 @@ fun(#'DistributionPoint'{}, #'CertificateList'{},
</func>
<func>
+ <name>pkix_match_dist_point(CRL, DistPoint) -> boolean()</name>
+ <fsummary>Checks whether the given distribution point matches the
+ Issuing Distribution Point of the CRL.</fsummary>
+
+ <type>
+ <v>CRL = der_encoded() | #'CertificateList'{} </v>
+ <v>DistPoint = #'DistributionPoint'{}</v>
+ </type>
+ <desc>
+ <p>Checks whether the given distribution point matches the
+ Issuing Distribution Point of the CRL, as described in RFC 5280.
+ If the CRL doesn't have an Issuing Distribution Point extension,
+ the distribution point always matches.</p>
+ </desc>
+ </func>
+
+ <func>
<name>pkix_sign(#'OTPTBSCertificate'{}, Key) -> der_encoded()</name>
<fsummary>Signs certificate.</fsummary>
<type>
@@ -845,7 +836,27 @@ fun(#'DistributionPoint'{}, #'CertificateList'{},
<p>Verifies a digital signature.</p>
</desc>
</func>
-
+
+ <func>
+ <name>short_name_hash(Name) -> string()</name>
+ <fsummary>Generates a short hash of an issuer name.</fsummary>
+ <type>
+ <v>Name = issuer_name()</v>
+ </type>
+ <desc>
+ <p>Generates a short hash of an issuer name. The hash is
+ returned as a string containing eight hexadecimal digits.</p>
+
+ <p>The return value of this function is the same as the result
+ of the commands <c>openssl crl -hash</c> and
+ <c>openssl x509 -issuer_hash</c>, when passed the issuer name of
+ a CRL or a certificate, respectively. This hash is used by the
+ <c>c_rehash</c> tool to maintain a directory of symlinks to CRL
+ files, in order to facilitate looking up a CRL by its issuer
+ name.</p>
+ </desc>
+ </func>
+
</funcs>
</erlref>
diff --git a/lib/public_key/doc/src/public_key_app.xml b/lib/public_key/doc/src/public_key_app.xml
new file mode 100644
index 0000000000..1f87932b6c
--- /dev/null
+++ b/lib/public_key/doc/src/public_key_app.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE appref SYSTEM "appref.dtd">
+
+<appref>
+ <header>
+ <copyright>
+ <year>2016</year><year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title>public_key</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date></date>
+ <rev></rev>
+ <file>public_key_app.sgml</file>
+ </header>
+ <app>public_key</app>
+ <appsummary>Provides functions to handle public-key infrastructure. </appsummary>
+ <description>
+
+ <p> Provides encode/decode of different file formats (PEM, OpenSSH),
+ digital signature and verification functions,
+ validation of certificate paths and certificate revocation lists (CRLs) and
+ other functions for handling of certificates, keys and CRLs.</p>
+
+ <list type="bulleted">
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc5280.txt">RFC 5280 </url> -
+ Internet X.509 Public-Key Infrastructure Certificate and Certificate Revocation List
+ (CRL) Profile. Certificate policies are currently not supported. </item>
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc3447.txt"> PKCS-1 </url> -
+ RSA Cryptography Standard </item>
+ <item>Supports <url href="http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf"> DSS</url> -
+ Digital Signature Standard (DSA - Digital Signature Algorithm)</item>
+ <item>Supports
+ <url href="http://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-3-diffie-hellman-key-agreement-standar.htm"> PKCS-3 </url> -
+ Diffie-Hellman Key Agreement Standard </item>
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc2898.txt"> PKCS-5</url> -
+ Password-Based Cryptography Standard </item>
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc5208.txt"> PKCS-8</url> -
+ Private-Key Information Syntax Standard</item>
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc5967.txt"> PKCS-10</url> -
+ Certification Request Syntax Standard</item>
+ </list>
+ </description>
+
+ <section>
+ <title>DEPENDENCIES</title>
+ <p>The <c>public_key</c> application uses the
+ Crypto application to preform cryptographic operations and the
+ ASN-1 application to handle PKIX-ASN-1 specifications, hence
+ these applications must be loaded for the <c>public_key</c> application to work.
+ In an embedded environment this means they must be started with
+ <c>application:start/[1,2]</c> before the <c>public_key</c> application is
+ started.</p>
+ </section>
+
+ <section>
+ <title>ERROR LOGGER AND EVENT HANDLERS</title>
+ <p> The <c>public_key</c> application is a library application
+ and does not use the error logger. The functions will either sucssed
+ or fail with a runtime error.
+ </p>
+ </section>
+
+ <section>
+ <title>SEE ALSO</title>
+ <p><seealso marker="kernel:application">application(3)</seealso></p>
+ </section>
+
+</appref>
diff --git a/lib/public_key/doc/src/ref_man.xml b/lib/public_key/doc/src/ref_man.xml
index b3823e1dc3..2bd1733dbc 100644
--- a/lib/public_key/doc/src/ref_man.xml
+++ b/lib/public_key/doc/src/ref_man.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -36,6 +36,7 @@
from RFC 3280 (X.509 certificates) and parts of the PKCS standard.
</p>
</description>
+ <xi:include href="public_key_app.xml"/>
<xi:include href="public_key.xml"/>
</application>
diff --git a/lib/public_key/doc/src/using_public_key.xml b/lib/public_key/doc/src/using_public_key.xml
index d03c05d773..e3a1eed4be 100644
--- a/lib/public_key/doc/src/using_public_key.xml
+++ b/lib/public_key/doc/src/using_public_key.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2011</year><year>2013</year>
+ <year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -124,7 +124,7 @@
...&gt;&gt;,
not_encrypted},
{'Certificate',&lt;&lt;48,130,3,200,48,130,3,49,160,3,2,1,2,2,1,
- 1,48,13,6,9,42,134,72,134,247,...&gt;&gt;>,
+ 1,48,13,6,9,42,134,72,134,247,...&gt;&gt;,
not_encrypted}]</code>
<p>Certificates can be decoded as usual:</p>
diff --git a/lib/public_key/include/public_key.hrl b/lib/public_key/include/public_key.hrl
index d20f7b207e..a1e7dd31bc 100644
--- a/lib/public_key/include/public_key.hrl
+++ b/lib/public_key/include/public_key.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/public_key/priv/generate b/lib/public_key/priv/generate
index fd185bfd52..69bb2263f4 100755
--- a/lib/public_key/priv/generate
+++ b/lib/public_key/priv/generate
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
# Generate ssh moduli files for the sizes in $moduli
diff --git a/lib/public_key/src/Makefile b/lib/public_key/src/Makefile
index 786f244f85..e61390bce3 100644
--- a/lib/public_key/src/Makefile
+++ b/lib/public_key/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2013. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/public_key/src/pubkey_cert.erl b/lib/public_key/src/pubkey_cert.erl
index e67850cf54..f45f2c2e9a 100644
--- a/lib/public_key/src/pubkey_cert.erl
+++ b/lib/public_key/src/pubkey_cert.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -547,7 +547,9 @@ cert_auth_key_id(#'AuthorityKeyIdentifier'{authorityCertIssuer =
{ok, {SerialNr, decode_general_name(AuthCertIssuer)}}.
decode_general_name([{directoryName, Issuer}]) ->
- normalize_general_name(Issuer).
+ normalize_general_name(Issuer);
+decode_general_name([{_, Issuer}]) ->
+ Issuer.
%% Strip all leading and trailing spaces and make
%% sure there is no double spaces in between.
diff --git a/lib/public_key/src/pubkey_cert_records.erl b/lib/public_key/src/pubkey_cert_records.erl
index 70ec3d5306..6a80874df8 100644
--- a/lib/public_key/src/pubkey_cert_records.erl
+++ b/lib/public_key/src/pubkey_cert_records.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/public_key/src/pubkey_crl.erl b/lib/public_key/src/pubkey_crl.erl
index eee4beb7d6..33bef91827 100644
--- a/lib/public_key/src/pubkey_crl.erl
+++ b/lib/public_key/src/pubkey_crl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/public_key/src/pubkey_pbe.erl b/lib/public_key/src/pubkey_pbe.erl
index 2f6b121e83..0243bcaa82 100644
--- a/lib/public_key/src/pubkey_pbe.erl
+++ b/lib/public_key/src/pubkey_pbe.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/public_key/src/pubkey_pem.erl b/lib/public_key/src/pubkey_pem.erl
index d163004c7c..06a4455b3f 100644
--- a/lib/public_key/src/pubkey_pem.erl
+++ b/lib/public_key/src/pubkey_pem.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/public_key/src/pubkey_ssh.erl b/lib/public_key/src/pubkey_ssh.erl
index 9b281aa482..90726b1eb3 100644
--- a/lib/public_key/src/pubkey_ssh.erl
+++ b/lib/public_key/src/pubkey_ssh.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/public_key/src/public_key.appup.src b/lib/public_key/src/public_key.appup.src
index f39e7140e6..7f3b0b3de8 100644
--- a/lib/public_key/src/public_key.appup.src
+++ b/lib/public_key/src/public_key.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/public_key/src/public_key.erl b/lib/public_key/src/public_key.erl
index a79badef24..d23abfe256 100644
--- a/lib/public_key/src/public_key.erl
+++ b/lib/public_key/src/public_key.erl
@@ -53,8 +53,10 @@
pkix_crls_validate/3,
pkix_dist_point/1,
pkix_dist_points/1,
+ pkix_match_dist_point/2,
pkix_crl_verify/2,
- pkix_crl_issuer/1
+ pkix_crl_issuer/1,
+ short_name_hash/1
]).
-export_type([public_key/0, private_key/0, pem_entry/0,
@@ -134,7 +136,8 @@ pem_entry_decode({'SubjectPublicKeyInfo', Der, _}) ->
{params, DssParams} = der_decode('DSAParams', Params),
{der_decode(KeyType, Key0), DssParams};
'ECPoint' ->
- der_decode(KeyType, Key0)
+ ECCParams = der_decode('EcpkParameters', Params),
+ {#'ECPoint'{point = Key0}, ECCParams}
end;
pem_entry_decode({Asn1Type, Der, not_encrypted}) when is_atom(Asn1Type),
is_binary(Der) ->
@@ -181,6 +184,13 @@ pem_entry_encode('SubjectPublicKeyInfo',
Spki = {'SubjectPublicKeyInfo',
{'AlgorithmIdentifier', ?'id-dsa', ParamDer}, KeyDer},
pem_entry_encode('SubjectPublicKeyInfo', Spki);
+pem_entry_encode('SubjectPublicKeyInfo',
+ {#'ECPoint'{point = Key}, ECParam}) when is_binary(Key)->
+ Params = der_encode('EcpkParameters',ECParam),
+ Spki = {'SubjectPublicKeyInfo',
+ {'AlgorithmIdentifier', ?'id-ecPublicKey', Params},
+ Key},
+ pem_entry_encode('SubjectPublicKeyInfo', Spki);
pem_entry_encode(Asn1Type, Entity) when is_atom(Asn1Type) ->
Der = der_encode(Asn1Type, Entity),
{Asn1Type, Der, not_encrypted}.
@@ -516,6 +526,38 @@ pkix_dist_points(OtpCert) ->
[], Value).
%%--------------------------------------------------------------------
+-spec pkix_match_dist_point(der_encoded() | #'CertificateList'{},
+ #'DistributionPoint'{}) -> boolean().
+%% Description: Check whether the given distribution point matches
+%% the "issuing distribution point" of the CRL.
+%%--------------------------------------------------------------------
+pkix_match_dist_point(CRL, DistPoint) when is_binary(CRL) ->
+ pkix_match_dist_point(der_decode('CertificateList', CRL), DistPoint);
+pkix_match_dist_point(#'CertificateList'{},
+ #'DistributionPoint'{distributionPoint = asn1_NOVALUE}) ->
+ %% No distribution point name specified - that's considered a match.
+ true;
+pkix_match_dist_point(#'CertificateList'{
+ tbsCertList =
+ #'TBSCertList'{
+ crlExtensions = Extensions}},
+ #'DistributionPoint'{
+ distributionPoint = {fullName, DPs}}) ->
+ case pubkey_cert:select_extension(?'id-ce-issuingDistributionPoint', Extensions) of
+ undefined ->
+ %% If the CRL doesn't have an IDP extension, it
+ %% automatically qualifies.
+ true;
+ #'Extension'{extnValue = IDPValue} ->
+ %% If the CRL does have an IDP extension, it must match
+ %% the given DistributionPoint to be considered a match.
+ IDPEncoded = der_decode('IssuingDistributionPoint', IDPValue),
+ #'IssuingDistributionPoint'{distributionPoint = {fullName, IDPs}} =
+ pubkey_cert_records:transform(IDPEncoded, decode),
+ pubkey_crl:match_one(IDPs, DPs)
+ end.
+
+%%--------------------------------------------------------------------
-spec pkix_sign(#'OTPTBSCertificate'{},
rsa_private_key() | dsa_private_key()) -> Der::binary().
%%
@@ -777,6 +819,17 @@ oid2ssh_curvename(?'secp384r1') -> <<"nistp384">>;
oid2ssh_curvename(?'secp521r1') -> <<"nistp521">>.
%%--------------------------------------------------------------------
+-spec short_name_hash({rdnSequence, [#'AttributeTypeAndValue'{}]}) ->
+ string().
+
+%% Description: Generates OpenSSL-style hash of a name.
+%%--------------------------------------------------------------------
+short_name_hash({rdnSequence, _Attributes} = Name) ->
+ HashThis = encode_name_for_short_hash(Name),
+ <<HashValue:32/little, _/binary>> = crypto:hash(sha, HashThis),
+ string:to_lower(string:right(integer_to_list(HashValue, 16), 8, $0)).
+
+%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
do_verify(DigestOrPlainText, DigestType, Signature,
@@ -1039,3 +1092,74 @@ ec_key({PubKey, PrivateKey}, Params) ->
parameters = Params,
publicKey = PubKey}.
+encode_name_for_short_hash({rdnSequence, Attributes0}) ->
+ Attributes = lists:map(fun normalise_attribute/1, Attributes0),
+ {Encoded, _} = 'OTP-PUB-KEY':'enc_RDNSequence'(Attributes, []),
+ Encoded.
+
+%% Normalise attribute for "short hash". If the attribute value
+%% hasn't been decoded yet, decode it so we can normalise it.
+normalise_attribute([#'AttributeTypeAndValue'{
+ type = _Type,
+ value = Binary} = ATV]) when is_binary(Binary) ->
+ case pubkey_cert_records:transform(ATV, decode) of
+ #'AttributeTypeAndValue'{value = Binary} ->
+ %% Cannot decode attribute; return original.
+ [ATV];
+ DecodedATV = #'AttributeTypeAndValue'{} ->
+ %% The new value will either be String or {Encoding,String}.
+ normalise_attribute([DecodedATV])
+ end;
+normalise_attribute([#'AttributeTypeAndValue'{
+ type = _Type,
+ value = {Encoding, String}} = ATV])
+ when
+ Encoding =:= utf8String;
+ Encoding =:= printableString;
+ Encoding =:= teletexString;
+ Encoding =:= ia5String ->
+ %% These string types all give us something that the unicode
+ %% module understands.
+ NewValue = normalise_attribute_value(String),
+ [ATV#'AttributeTypeAndValue'{value = NewValue}];
+normalise_attribute([#'AttributeTypeAndValue'{
+ type = _Type,
+ value = String} = ATV]) when is_list(String) ->
+ %% A string returned by pubkey_cert_records:transform/2, for
+ %% certain attributes that commonly have incorrect value types.
+ NewValue = normalise_attribute_value(String),
+ [ATV#'AttributeTypeAndValue'{value = NewValue}].
+
+normalise_attribute_value(String) ->
+ Converted = unicode:characters_to_binary(String),
+ NormalisedString = normalise_string(Converted),
+ %% We can't use the encoding function for the actual type of the
+ %% attribute, since some of them don't allow utf8Strings, which is
+ %% the required encoding when creating the hash.
+ {NewBinary, _} = 'OTP-PUB-KEY':'enc_X520CommonName'({utf8String, NormalisedString}, []),
+ NewBinary.
+
+normalise_string(String) ->
+ %% Normalise attribute values as required for "short hashes", as
+ %% implemented by OpenSSL.
+
+ %% Remove ASCII whitespace from beginning and end.
+ TrimmedLeft = re:replace(String, "^[\s\f\n\r\t\v]+", "", [unicode, global]),
+ TrimmedRight = re:replace(TrimmedLeft, "[\s\f\n\r\t\v]+$", "", [unicode, global]),
+ %% Convert multiple whitespace characters to a single space.
+ Collapsed = re:replace(TrimmedRight, "[\s\f\n\r\t\v]+", "\s", [unicode, global]),
+ %% Convert ASCII characters to lowercase
+ Lower = ascii_to_lower(Collapsed),
+ %% And we're done!
+ Lower.
+
+ascii_to_lower(String) ->
+ %% Can't use string:to_lower/1, because that changes Latin-1
+ %% characters as well.
+ << <<(if $A =< C, C =< $Z ->
+ C + ($a - $A);
+ true ->
+ C
+ end)>>
+ ||
+ <<C>> <= iolist_to_binary(String) >>.
diff --git a/lib/public_key/test/Makefile b/lib/public_key/test/Makefile
index a71004eb0d..b9beb6d3b9 100644
--- a/lib/public_key/test/Makefile
+++ b/lib/public_key/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2012. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/public_key/test/erl_make_certs.erl b/lib/public_key/test/erl_make_certs.erl
index 2039745f2b..3dab70784c 100644
--- a/lib/public_key/test/erl_make_certs.erl
+++ b/lib/public_key/test/erl_make_certs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/public_key/test/pbe_SUITE.erl b/lib/public_key/test/pbe_SUITE.erl
index 5e4720563f..004eaefc27 100644
--- a/lib/public_key/test/pbe_SUITE.erl
+++ b/lib/public_key/test/pbe_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,8 @@
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [].
all() ->
[
@@ -199,7 +200,7 @@ pbdkdf2(Config) when is_list(Config) ->
old_enc() ->
[{doc,"Tests encode/decode RSA key encrypted with different ciphers using old PEM encryption scheme"}].
old_enc(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
%% key generated with ssh-keygen -N hello_aes -f old_aes_128_cbc_enc_key.pem
{ok, PemAesCbc} = file:read_file(filename:join(Datadir, "old_aes_128_cbc_enc_key.pem")),
@@ -226,7 +227,7 @@ check_key_info(#'PrivateKeyInfo'{privateKeyAlgorithm =
#'RSAPrivateKey'{} = public_key:der_decode('RSAPrivateKey', iolist_to_binary(Key)).
decode_encode_key_file(File, Password, Cipher, Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, PemKey} = file:read_file(filename:join(Datadir, File)),
PemEntry = public_key:pem_decode(PemKey),
diff --git a/lib/public_key/test/pkits_SUITE.erl b/lib/public_key/test/pkits_SUITE.erl
index 06dfce5018..487b3dbe3f 100644
--- a/lib/public_key/test/pkits_SUITE.erl
+++ b/lib/public_key/test/pkits_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@
%%--------------------------------------------------------------------
suite() ->
- [{ct_hooks,[ts_install_cth]}].
+ [].
all() ->
[{group, signature_verification},
diff --git a/lib/public_key/test/public_key_SUITE.erl b/lib/public_key/test/public_key_SUITE.erl
index ea5e036a7e..b22b69a0f2 100644
--- a/lib/public_key/test/public_key_SUITE.erl
+++ b/lib/public_key/test/public_key_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,7 +34,8 @@
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [].
all() ->
[app, appup,
@@ -43,10 +44,11 @@ all() ->
encrypt_decrypt,
{group, sign_verify},
pkix, pkix_countryname, pkix_emailaddress, pkix_path_validation,
- pkix_iso_rsa_oid, pkix_iso_dsa_oid, pkix_crl].
+ pkix_iso_rsa_oid, pkix_iso_dsa_oid, pkix_crl, general_name,
+ short_cert_issuer_hash, short_crl_issuer_hash].
groups() ->
- [{pem_decode_encode, [], [dsa_pem, rsa_pem, encrypted_pem,
+ [{pem_decode_encode, [], [dsa_pem, rsa_pem, ec_pem, encrypted_pem,
dh_pem, cert_pem, pkcs7_pem, pkcs10_pem]},
{ssh_public_key_decode_encode, [],
[ssh_rsa_public_key, ssh_dsa_public_key, ssh_ecdsa_public_key,
@@ -108,7 +110,7 @@ appup(Config) when is_list(Config) ->
dsa_pem() ->
[{doc, "DSA PEM-file decode/encode"}].
dsa_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'DSAPrivateKey', DerDSAKey, not_encrypted} = Entry0 ] =
erl_make_certs:pem_to_der(filename:join(Datadir, "dsa.pem")),
@@ -123,15 +125,15 @@ dsa_pem(Config) when is_list(Config) ->
DSAPubKey = public_key:pem_entry_decode(PubEntry0),
true = check_entry_type(DSAPubKey, 'DSAPublicKey'),
PubEntry0 = public_key:pem_entry_encode('SubjectPublicKeyInfo', DSAPubKey),
- DSAPubPemNoEndNewLines = strip_ending_newlines(DSAPubPem),
- DSAPubPemNoEndNewLines = strip_ending_newlines(public_key:pem_encode([PubEntry0])).
+ DSAPubPemNoEndNewLines = strip_superfluous_newlines(DSAPubPem),
+ DSAPubPemNoEndNewLines = strip_superfluous_newlines(public_key:pem_encode([PubEntry0])).
%%--------------------------------------------------------------------
rsa_pem() ->
[{doc, "RSA PEM-file decode/encode"}].
rsa_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'RSAPrivateKey', DerRSAKey, not_encrypted} = Entry0 ] =
erl_make_certs:pem_to_der(filename:join(Datadir, "client_key.pem")),
@@ -151,29 +153,55 @@ rsa_pem(Config) when is_list(Config) ->
RSAPubKey = public_key:pem_entry_decode(PubEntry0),
true = check_entry_type(RSAPubKey, 'RSAPublicKey'),
PubEntry0 = public_key:pem_entry_encode('SubjectPublicKeyInfo', RSAPubKey),
- RSAPubPemNoEndNewLines = strip_ending_newlines(RSAPubPem),
- RSAPubPemNoEndNewLines = strip_ending_newlines(public_key:pem_encode([PubEntry0])),
+ RSAPubPemNoEndNewLines = strip_superfluous_newlines(RSAPubPem),
+ RSAPubPemNoEndNewLines = strip_superfluous_newlines(public_key:pem_encode([PubEntry0])),
{ok, RSARawPem} = file:read_file(filename:join(Datadir, "rsa_pub_key.pem")),
[{'RSAPublicKey', _, _} = PubEntry1] =
public_key:pem_decode(RSARawPem),
RSAPubKey = public_key:pem_entry_decode(PubEntry1),
- RSARawPemNoEndNewLines = strip_ending_newlines(RSARawPem),
- RSARawPemNoEndNewLines = strip_ending_newlines(public_key:pem_encode([PubEntry1])).
+ RSARawPemNoEndNewLines = strip_superfluous_newlines(RSARawPem),
+ RSARawPemNoEndNewLines = strip_superfluous_newlines(public_key:pem_encode([PubEntry1])).
+
+%%--------------------------------------------------------------------
+ec_pem() ->
+ [{doc, "EC key PEM-file decode/encode"}].
+ec_pem(Config) when is_list(Config) ->
+ Datadir = proplists:get_value(data_dir, Config),
+ {ok, ECPubPem} = file:read_file(filename:join(Datadir, "ec_pubkey.pem")),
+ [{'SubjectPublicKeyInfo', _, _} = PubEntry0] =
+ public_key:pem_decode(ECPubPem),
+ ECPubKey = public_key:pem_entry_decode(PubEntry0),
+ true = check_entry_type(ECPubKey, 'ECPoint'),
+ PubEntry0 = public_key:pem_entry_encode('SubjectPublicKeyInfo', ECPubKey),
+ ECPubPemNoEndNewLines = strip_superfluous_newlines(ECPubPem),
+ ECPubPemNoEndNewLines = strip_superfluous_newlines(public_key:pem_encode([PubEntry0])),
+
+ {ok, ECPrivPem} = file:read_file(filename:join(Datadir, "ec_key.pem")),
+ [{'EcpkParameters', _, not_encrypted} = Entry1,
+ {'ECPrivateKey', _, not_encrypted} = Entry2] = public_key:pem_decode(ECPrivPem),
+
+ ECParams = public_key:pem_entry_decode(Entry1),
+ true = check_entry_type(ECParams, 'EcpkParameters'),
+ ECPrivKey = public_key:pem_entry_decode(Entry2),
+ true = check_entry_type(ECPrivKey, 'ECPrivateKey'),
+ ECPemNoEndNewLines = strip_superfluous_newlines(ECPrivPem),
+ ECPemNoEndNewLines = strip_superfluous_newlines(public_key:pem_encode([Entry1, Entry2])).
+
%%--------------------------------------------------------------------
encrypted_pem() ->
[{doc, "Encrypted PEM-file decode/encode"}].
encrypted_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'RSAPrivateKey', DerRSAKey, not_encrypted}] =
erl_make_certs:pem_to_der(filename:join(Datadir, "client_key.pem")),
RSAKey = public_key:der_decode('RSAPrivateKey', DerRSAKey),
- Salt0 = crypto:rand_bytes(8),
+ Salt0 = crypto:strong_rand_bytes(8),
Entry0 = public_key:pem_entry_encode('RSAPrivateKey', RSAKey,
{{"DES-EDE3-CBC", Salt0}, "1234abcd"}),
RSAKey = public_key:pem_entry_decode(Entry0,"1234abcd"),
@@ -182,7 +210,7 @@ encrypted_pem(Config) when is_list(Config) ->
[{'RSAPrivateKey', _, {"DES-EDE3-CBC", Salt0}}] =
erl_make_certs:pem_to_der(Des3KeyFile),
- Salt1 = crypto:rand_bytes(8),
+ Salt1 = crypto:strong_rand_bytes(8),
Entry1 = public_key:pem_entry_encode('RSAPrivateKey', RSAKey,
{{"DES-CBC", Salt1}, "4567efgh"}),
DesKeyFile = filename:join(Datadir, "des_client_key.pem"),
@@ -199,7 +227,7 @@ encrypted_pem(Config) when is_list(Config) ->
dh_pem() ->
[{doc, "DH parametrs PEM-file decode/encode"}].
dh_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'DHParameter', _DerDH, not_encrypted} = Entry] =
erl_make_certs:pem_to_der(filename:join(Datadir, "dh.pem")),
asn1_encode_decode(Entry).
@@ -209,7 +237,7 @@ dh_pem(Config) when is_list(Config) ->
pkcs10_pem() ->
[{doc, "PKCS-10 PEM-file decode/encode"}].
pkcs10_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'CertificationRequest', _DerPKCS10, not_encrypted} = Entry] =
erl_make_certs:pem_to_der(filename:join(Datadir, "req.pem")),
asn1_encode_decode(Entry).
@@ -217,7 +245,7 @@ pkcs10_pem(Config) when is_list(Config) ->
pkcs7_pem() ->
[{doc, "PKCS-7 PEM-file decode/encode"}].
pkcs7_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'ContentInfo', _, not_encrypted} = Entry0] =
erl_make_certs:pem_to_der(filename:join(Datadir, "pkcs7_cert.pem")),
[{'ContentInfo', _, not_encrypted} = Entry1] =
@@ -229,7 +257,7 @@ pkcs7_pem(Config) when is_list(Config) ->
cert_pem() ->
[{doc, "Certificate PEM-file decode/encode"}].
cert_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'Certificate', _, not_encrypted} = Entry0] =
erl_make_certs:pem_to_der(filename:join(Datadir, "client_cert.pem")),
@@ -247,7 +275,7 @@ cert_pem(Config) when is_list(Config) ->
ssh_rsa_public_key() ->
[{doc, "ssh rsa public key decode/encode"}].
ssh_rsa_public_key(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, RSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_rsa_pub")),
[{PubKey, Attributes1}] = public_key:ssh_decode(RSARawSsh2, public_key),
@@ -273,7 +301,7 @@ ssh_rsa_public_key(Config) when is_list(Config) ->
ssh_dsa_public_key() ->
[{doc, "ssh dsa public key decode/encode"}].
ssh_dsa_public_key(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, DSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_dsa_pub")),
[{PubKey, Attributes1}] = public_key:ssh_decode(DSARawSsh2, public_key),
@@ -299,7 +327,7 @@ ssh_dsa_public_key(Config) when is_list(Config) ->
ssh_ecdsa_public_key() ->
[{doc, "ssh ecdsa public key decode/encode"}].
ssh_ecdsa_public_key(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, ECDSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_ecdsa_pub")),
[{PubKey, Attributes1}] = public_key:ssh_decode(ECDSARawSsh2, public_key),
@@ -324,7 +352,7 @@ ssh_ecdsa_public_key(Config) when is_list(Config) ->
ssh_rfc4716_rsa_comment() ->
[{doc, "Test comment header and rsa key"}].
ssh_rfc4716_rsa_comment(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, RSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_rsa_comment_pub")),
[{#'RSAPublicKey'{} = PubKey, Attributes}] =
@@ -340,7 +368,7 @@ ssh_rfc4716_rsa_comment(Config) when is_list(Config) ->
ssh_rfc4716_dsa_comment() ->
[{doc, "Test comment header and dsa key"}].
ssh_rfc4716_dsa_comment(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, DSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_dsa_comment_pub")),
[{{_, #'Dss-Parms'{}} = PubKey, Attributes}] =
@@ -360,7 +388,7 @@ ssh_rfc4716_dsa_comment(Config) when is_list(Config) ->
ssh_rfc4716_rsa_subject() ->
[{doc, "Test another header value than comment"}].
ssh_rfc4716_rsa_subject(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, RSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_subject_pub")),
[{#'RSAPublicKey'{} = PubKey, Attributes}] =
@@ -380,7 +408,7 @@ ssh_rfc4716_rsa_subject(Config) when is_list(Config) ->
ssh_known_hosts() ->
[{doc, "ssh known hosts file encode/decode"}].
ssh_known_hosts(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, SshKnownHosts} = file:read_file(filename:join(Datadir, "known_hosts")),
[{#'RSAPublicKey'{}, Attributes1}, {#'RSAPublicKey'{}, Attributes2},
@@ -409,7 +437,7 @@ ssh_known_hosts(Config) when is_list(Config) ->
ssh1_known_hosts() ->
[{doc, "ssh (ver 1) known hosts file encode/decode"}].
ssh1_known_hosts(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, SshKnownHosts} = file:read_file(filename:join(Datadir, "ssh1_known_hosts")),
[{#'RSAPublicKey'{}, Attributes1}, {#'RSAPublicKey'{}, Attributes2},{#'RSAPublicKey'{}, Attributes3}]
@@ -429,7 +457,7 @@ ssh1_known_hosts(Config) when is_list(Config) ->
ssh_auth_keys() ->
[{doc, "ssh authorized keys file encode/decode"}].
ssh_auth_keys(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, SshAuthKeys} = file:read_file(filename:join(Datadir, "auth_keys")),
[{#'RSAPublicKey'{}, Attributes1}, {{_, #'Dss-Parms'{}}, Attributes2},
@@ -455,7 +483,7 @@ ssh_auth_keys(Config) when is_list(Config) ->
ssh1_auth_keys() ->
[{doc, "ssh (ver 1) authorized keys file encode/decode"}].
ssh1_auth_keys(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, SshAuthKeys} = file:read_file(filename:join(Datadir, "ssh1_auth_keys")),
[{#'RSAPublicKey'{}, Attributes1},
@@ -483,7 +511,7 @@ ssh1_auth_keys(Config) when is_list(Config) ->
ssh_openssh_public_key_with_comment() ->
[{doc, "Test that emty lines and lines starting with # are ignored"}].
ssh_openssh_public_key_with_comment(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, DSARawOpenSsh} = file:read_file(filename:join(Datadir, "openssh_dsa_with_comment_pub")),
[{{_, #'Dss-Parms'{}}, _}] = public_key:ssh_decode(DSARawOpenSsh, openssh_public_key).
@@ -492,7 +520,7 @@ ssh_openssh_public_key_with_comment(Config) when is_list(Config) ->
ssh_openssh_public_key_long_header() ->
[{doc, "Test that long headers are handled"}].
ssh_openssh_public_key_long_header(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok,RSARawOpenSsh} = file:read_file(filename:join(Datadir, "ssh_rsa_long_header_pub")),
[{#'RSAPublicKey'{}, _}] = Decoded = public_key:ssh_decode(RSARawOpenSsh, public_key),
@@ -551,7 +579,7 @@ dsa_sign_verify(Config) when is_list(Config) ->
public_key:pem_entry_decode(CertKey1),
true = public_key:pkix_verify(Cert2, {Y, #'Dss-Parms'{p=P, q=Q, g=G}}),
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[DsaKey = {'DSAPrivateKey', _, _}] =
erl_make_certs:pem_to_der(filename:join(Datadir, "dsa.pem")),
DSAPrivateKey = public_key:pem_entry_decode(DsaKey),
@@ -580,7 +608,7 @@ dsa_sign_verify(Config) when is_list(Config) ->
pkix() ->
[{doc, "Misc pkix tests not covered elsewhere"}].
pkix(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
Certs0 = erl_make_certs:pem_to_der(filename:join(Datadir, "cacerts.pem")),
Certs1 = erl_make_certs:pem_to_der(filename:join(Datadir, "client_cert.pem")),
TestTransform = fun({'Certificate', CertDer, not_encrypted}) ->
@@ -617,11 +645,10 @@ pkix(Config) when is_list(Config) ->
[{'AttributeTypeAndValue', {2,5,4,3},{printableString," erlang ca "}}]]},
VerifyStr = {rdnSequence,
[[{'AttributeTypeAndValue', {2,5,4,3},{printableString,"erlangca"}}],
- [{'AttributeTypeAndValue', {2,5,4,3},{printableString,"erlang ca"}}]]},
- VerifyStr = public_key:pkix_normalize_name(TestStr),
-
- ok.
-
+ [{'AttributeTypeAndValue', {2,5,4,3},{printableString,"erlang ca"}}]]},
+ VerifyStr = public_key:pkix_normalize_name(TestStr).
+
+
%%--------------------------------------------------------------------
pkix_countryname() ->
[{doc, "Test workaround for certs that code x509countryname as utf8"}].
@@ -723,7 +750,7 @@ pkix_iso_rsa_oid() ->
[{doc, "Test workaround for supporting certs that use ISO oids"
" 1.3.14.3.2.29 instead of PKIX/PKCS oid"}].
pkix_iso_rsa_oid(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, PemCert} = file:read_file(filename:join(Datadir, "rsa_ISO.pem")),
[{_, Cert, _}] = public_key:pem_decode(PemCert),
OTPCert = public_key:pkix_decode_cert(Cert, otp),
@@ -735,7 +762,7 @@ pkix_iso_dsa_oid() ->
[{doc, "Test workaround for supporting certs that use ISO oids"
"1.3.14.3.2.27 instead of PKIX/PKCS oid"}].
pkix_iso_dsa_oid(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, PemCert} = file:read_file(filename:join(Datadir, "dsa_ISO.pem")),
[{_, Cert, _}] = public_key:pem_decode(PemCert),
OTPCert = public_key:pkix_decode_cert(Cert, otp),
@@ -748,7 +775,7 @@ pkix_crl() ->
[{doc, "test pkix_crl_* functions"}].
pkix_crl(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, PemCRL} = file:read_file(filename:join(Datadir, "idp_crl.pem")),
[{_, CRL, _}] = public_key:pem_decode(PemCRL),
@@ -778,6 +805,54 @@ pkix_crl(Config) when is_list(Config) ->
reasons = asn1_NOVALUE,
distributionPoint = Point} = public_key:pkix_dist_point(OTPIDPCert).
+general_name() ->
+ [{doc, "Test that decoding of general name filed may have other values"
+ " than {rdnSequence, Seq}"}].
+
+general_name(Config) when is_list(Config) ->
+ DummyRfc822Name = "CN=CNDummy, OU=OUDummy, O=ODummy, C=SE",
+ {ok, {1, DummyRfc822Name}} =
+ pubkey_cert:cert_auth_key_id(
+ #'AuthorityKeyIdentifier'{authorityCertIssuer =
+ [{rfc822Name, DummyRfc822Name}],
+ authorityCertSerialNumber =
+ 1}).
+%%--------------------------------------------------------------------
+short_cert_issuer_hash() ->
+ [{doc, "Test OpenSSL-style hash for certificate issuer"}].
+
+short_cert_issuer_hash(Config) when is_list(Config) ->
+ Datadir = ?config(data_dir, Config),
+ [{'Certificate', CertDER, _}] =
+ erl_make_certs:pem_to_der(filename:join(Datadir, "client_cert.pem")),
+
+ %% This hash value was obtained by running:
+ %% openssl x509 -in client_cert.pem -issuer_hash -noout
+ CertIssuerHash = "d4c8d7e5",
+
+ #'OTPCertificate'{tbsCertificate = #'OTPTBSCertificate'{issuer = Issuer}} =
+ public_key:pkix_decode_cert(CertDER, otp),
+
+ CertIssuerHash = public_key:short_name_hash(Issuer).
+
+%%--------------------------------------------------------------------
+short_crl_issuer_hash() ->
+ [{doc, "Test OpenSSL-style hash for CRL issuer"}].
+
+short_crl_issuer_hash(Config) when is_list(Config) ->
+ Datadir = ?config(data_dir, Config),
+ [{'CertificateList', CrlDER, _}] =
+ erl_make_certs:pem_to_der(filename:join(Datadir, "idp_crl.pem")),
+
+ %% This hash value was obtained by running:
+ %% openssl crl -in idp_crl.pem -hash -noout
+ CrlIssuerHash = "d6134ed3",
+
+ Issuer = public_key:pkix_crl_issuer(CrlDER),
+
+ CrlIssuerHash = public_key:short_name_hash(Issuer).
+
+
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
@@ -825,6 +900,14 @@ check_entry_type(#'DHParameter'{}, 'DHParameter') ->
true;
check_entry_type(#'Certificate'{}, 'Certificate') ->
true;
+check_entry_type({#'ECPoint'{}, _}, 'ECPoint') ->
+ true;
+check_entry_type(#'ECPrivateKey'{}, 'ECPrivateKey') ->
+ true;
+check_entry_type({namedCurve, _}, 'EcpkParameters') ->
+ true;
+check_entry_type(#'ECParameters'{}, 'EcpkParameters') ->
+ true;
check_entry_type(_,_) ->
false.
@@ -837,8 +920,9 @@ check_encapsulated_header([ _ | Rest]) ->
check_encapsulated_header([]) ->
false.
-strip_ending_newlines(Bin) ->
- string:strip(binary_to_list(Bin), right, 10).
+strip_superfluous_newlines(Bin) ->
+ Str = string:strip(binary_to_list(Bin), right, 10),
+ re:replace(Str,"\n\n","\n", [{return,list}, global]).
incorrect_countryname_pkix_cert() ->
<<48,130,5,186,48,130,4,162,160,3,2,1,2,2,7,7,250,61,63,6,140,137,48,13,6,9,42, 134,72,134,247,13,1,1,5,5,0,48,129,220,49,11,48,9,6,3,85,4,6,19,2,85,83,49, 16,48,14,6,3,85,4,8,19,7,65,114,105,122,111,110,97,49,19,48,17,6,3,85,4,7,19, 10,83,99,111,116,116,115,100,97,108,101,49,37,48,35,6,3,85,4,10,19,28,83,116, 97,114,102,105,101,108,100,32,84,101,99,104,110,111,108,111,103,105,101,115, 44,32,73,110,99,46,49,57,48,55,6,3,85,4,11,19,48,104,116,116,112,58,47,47,99, 101,114,116,105,102,105,99,97,116,101,115,46,115,116,97,114,102,105,101,108, 100,116,101,99,104,46,99,111,109,47,114,101,112,111,115,105,116,111,114,121, 49,49,48,47,6,3,85,4,3,19,40,83,116,97,114,102,105,101,108,100,32,83,101,99, 117,114,101,32,67,101,114,116,105,102,105,99,97,116,105,111,110,32,65,117, 116,104,111,114,105,116,121,49,17,48,15,6,3,85,4,5,19,8,49,48,54,56,56,52,51, 53,48,30,23,13,49,48,49,48,50,51,48,49,51,50,48,53,90,23,13,49,50,49,48,50, 51,48,49,51,50,48,53,90,48,122,49,11,48,9,6,3,85,4,6,12,2,85,83,49,11,48,9,6, 3,85,4,8,12,2,65,90,49,19,48,17,6,3,85,4,7,12,10,83,99,111,116,116,115,100, 97,108,101,49,38,48,36,6,3,85,4,10,12,29,83,112,101,99,105,97,108,32,68,111, 109,97,105,110,32,83,101,114,118,105,99,101,115,44,32,73,110,99,46,49,33,48, 31,6,3,85,4,3,12,24,42,46,108,111,103,105,110,46,115,101,99,117,114,101,115, 101,114,118,101,114,46,110,101,116,48,130,1,34,48,13,6,9,42,134,72,134,247, 13,1,1,1,5,0,3,130,1,15,0,48,130,1,10,2,130,1,1,0,185,136,240,80,141,36,124, 245,182,130,73,19,188,74,166,117,72,228,185,209,43,129,244,40,44,193,231,11, 209,12,234,88,43,142,1,162,48,122,17,95,230,105,171,131,12,147,46,204,36,80, 250,171,33,253,35,62,83,22,71,212,186,141,14,198,89,89,121,204,224,122,246, 127,110,188,229,162,67,95,6,74,231,127,99,131,7,240,85,102,203,251,50,58,58, 104,245,103,181,183,134,32,203,121,232,54,32,188,139,136,112,166,126,14,91, 223,153,172,164,14,61,38,163,208,215,186,210,136,213,143,70,147,173,109,217, 250,169,108,31,211,104,238,103,93,182,59,165,43,196,189,218,241,30,148,240, 109,90,69,176,194,52,116,173,151,135,239,10,209,179,129,192,102,75,11,25,168, 223,32,174,84,223,134,70,167,55,172,143,27,130,123,226,226,7,34,142,166,39, 48,246,96,231,150,84,220,106,133,193,55,95,159,227,24,249,64,36,1,142,171,16, 202,55,126,7,156,15,194,22,116,53,113,174,104,239,203,120,45,131,57,87,84, 163,184,27,83,57,199,91,200,34,43,98,61,180,144,76,65,170,177,2,3,1,0,1,163, 130,1,224,48,130,1,220,48,15,6,3,85,29,19,1,1,255,4,5,48,3,1,1,0,48,29,6,3, 85,29,37,4,22,48,20,6,8,43,6,1,5,5,7,3,1,6,8,43,6,1,5,5,7,3,2,48,14,6,3,85, 29,15,1,1,255,4,4,3,2,5,160,48,56,6,3,85,29,31,4,49,48,47,48,45,160,43,160, 41,134,39,104,116,116,112,58,47,47,99,114,108,46,115,116,97,114,102,105,101, 108,100,116,101,99,104,46,99,111,109,47,115,102,115,50,45,48,46,99,114,108, 48,83,6,3,85,29,32,4,76,48,74,48,72,6,11,96,134,72,1,134,253,110,1,7,23,2,48, 57,48,55,6,8,43,6,1,5,5,7,2,1,22,43,104,116,116,112,115,58,47,47,99,101,114, 116,115,46,115,116,97,114,102,105,101,108,100,116,101,99,104,46,99,111,109, 47,114,101,112,111,115,105,116,111,114,121,47,48,129,141,6,8,43,6,1,5,5,7,1, 1,4,129,128,48,126,48,42,6,8,43,6,1,5,5,7,48,1,134,30,104,116,116,112,58,47, 47,111,99,115,112,46,115,116,97,114,102,105,101,108,100,116,101,99,104,46,99, 111,109,47,48,80,6,8,43,6,1,5,5,7,48,2,134,68,104,116,116,112,58,47,47,99, 101,114,116,105,102,105,99,97,116,101,115,46,115,116,97,114,102,105,101,108, 100,116,101,99,104,46,99,111,109,47,114,101,112,111,115,105,116,111,114,121, 47,115,102,95,105,110,116,101,114,109,101,100,105,97,116,101,46,99,114,116, 48,31,6,3,85,29,35,4,24,48,22,128,20,73,75,82,39,209,27,188,242,161,33,106, 98,123,81,66,122,138,215,213,86,48,59,6,3,85,29,17,4,52,48,50,130,24,42,46, 108,111,103,105,110,46,115,101,99,117,114,101,115,101,114,118,101,114,46,110, 101,116,130,22,108,111,103,105,110,46,115,101,99,117,114,101,115,101,114,118, 101,114,46,110,101,116,48,29,6,3,85,29,14,4,22,4,20,138,233,191,208,157,203, 249,85,242,239,20,195,48,10,148,49,144,101,255,116,48,13,6,9,42,134,72,134, 247,13,1,1,5,5,0,3,130,1,1,0,82,31,121,162,49,50,143,26,167,202,143,61,71, 189,201,199,57,81,122,116,90,192,88,24,102,194,174,48,157,74,27,87,210,223, 253,93,3,91,150,109,120,1,110,27,11,200,198,141,222,246,14,200,71,105,41,138, 13,114,122,106,63,17,197,181,234,121,61,89,74,65,41,231,248,219,129,83,176, 219,55,107,55,211,112,98,38,49,69,77,96,221,108,123,152,12,210,159,157,141, 43,226,55,187,129,3,82,49,136,66,81,196,91,234,196,10,82,48,6,80,163,83,71, 127,102,177,93,209,129,26,104,2,84,24,255,248,161,3,244,169,234,92,122,110, 43,4,17,113,185,235,108,219,210,236,132,216,177,227,17,169,58,162,159,182, 162,93,160,229,200,9,163,229,110,121,240,168,232,14,91,214,188,196,109,210, 164,222,0,109,139,132,113,91,16,118,173,178,176,80,132,34,41,199,51,206,250, 224,132,60,115,192,94,107,163,219,212,226,225,65,169,148,108,213,46,174,173, 103,110,189,229,166,149,254,31,51,44,144,108,187,182,11,251,201,206,86,138, 208,59,51,86,132,235,81,225,88,34,190,8,184>>.
diff --git a/lib/public_key/test/public_key_SUITE_data/ec_key.pem b/lib/public_key/test/public_key_SUITE_data/ec_key.pem
new file mode 100644
index 0000000000..1bb375d22f
--- /dev/null
+++ b/lib/public_key/test/public_key_SUITE_data/ec_key.pem
@@ -0,0 +1,8 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQACg==
+-----END EC PARAMETERS-----
+-----BEGIN EC PRIVATE KEY-----
+MHQCAQEEIAd+PV10pm2uQWyU+VLgijqMqDx7MoMup/lsz9SfvHmEoAcGBSuBBAAK
+oUQDQgAE0yXQ7YqlfR7O6vmP8mpNc97iabpBUBmJq5Sdos7cX7+289dHiecjPxja
+hvJCtMO0iM43nbCJH40Su21+pj+4eA==
+-----END EC PRIVATE KEY-----
diff --git a/lib/public_key/test/public_key_SUITE_data/ec_pubkey.pem b/lib/public_key/test/public_key_SUITE_data/ec_pubkey.pem
new file mode 100644
index 0000000000..186c32bc01
--- /dev/null
+++ b/lib/public_key/test/public_key_SUITE_data/ec_pubkey.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE0yXQ7YqlfR7O6vmP8mpNc97iabpBUBmJ
+q5Sdos7cX7+289dHiecjPxjahvJCtMO0iM43nbCJH40Su21+pj+4eA==
+-----END PUBLIC KEY-----
diff --git a/lib/public_key/vsn.mk b/lib/public_key/vsn.mk
index f801f55073..84f6a659b5 100644
--- a/lib/public_key/vsn.mk
+++ b/lib/public_key/vsn.mk
@@ -1 +1 @@
-PUBLIC_KEY_VSN = 1.1.1
+PUBLIC_KEY_VSN = 1.2
diff --git a/lib/reltool/Makefile b/lib/reltool/Makefile
index 6732f52d15..4b6aad07b3 100644
--- a/lib/reltool/Makefile
+++ b/lib/reltool/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/reltool/bin/reltool.escript b/lib/reltool/bin/reltool.escript
index dd8f931251..f02a901c7b 100755
--- a/lib/reltool/bin/reltool.escript
+++ b/lib/reltool/bin/reltool.escript
@@ -3,7 +3,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/doc/src/Makefile b/lib/reltool/doc/src/Makefile
index b019c25080..e378cdf980 100644
--- a/lib/reltool/doc/src/Makefile
+++ b/lib/reltool/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/reltool/doc/src/book.xml b/lib/reltool/doc/src/book.xml
index c6bbef3655..b1d9e43b28 100644
--- a/lib/reltool/doc/src/book.xml
+++ b/lib/reltool/doc/src/book.xml
@@ -5,7 +5,7 @@
<header titlestyle="normal">
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/reltool/doc/src/files.mk b/lib/reltool/doc/src/files.mk
index b61707e8fe..efd7d8f09c 100644
--- a/lib/reltool/doc/src/files.mk
+++ b/lib/reltool/doc/src/files.mk
@@ -2,7 +2,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2010. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/reltool/doc/src/notes.xml b/lib/reltool/doc/src/notes.xml
index 745185af27..6df4924d0a 100644
--- a/lib/reltool/doc/src/notes.xml
+++ b/lib/reltool/doc/src/notes.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -38,7 +38,24 @@
thus constitutes one section in this document. The title of each
section is the version number of Reltool.</p>
- <section><title>Reltool 0.7</title>
+ <section><title>Reltool 0.7.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Modify the code as motivated by a change of the
+ Erlang Parser (<c>undefined</c> is no longer
+ automatically inserted to the type of record fields
+ without an initializer). </p>
+ <p>
+ Own Id: OTP-13033 Aux Id: OTP-12719 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Reltool 0.7</title>
<section><title>Improvements and New Features</title>
<list>
@@ -194,7 +211,6 @@
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
- <p>
<list> <item> If <c>incl_cond</c> was set to
<c>derived</c> on module level, then reltool_server would
crash with a <c>case_clause</c>. This has been corrected.
@@ -225,7 +241,7 @@
implemented in reltool. </item> <item> Instead of only
looking at the directory name, reltool now first looks
for a <c>.app</c> file in order to figure out the name of
- an application. </item> </list></p>
+ an application. </item> </list>
<p>
Own Id: OTP-10012 Aux Id: kunagi-171 [82] </p>
</item>
@@ -272,7 +288,6 @@
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
- <p>
Miscellaneous corrections: <list> <item> Start of reltool
GUI would sometimes crash with a badmatch in
reltool_sys_win:do_init. This has been corrected. </item>
@@ -311,7 +326,7 @@
and when generating target system. </item> <item> Title
of dependecies column in app and mod window is changed
from "Modules used by others" to "Modules using this".
- </item> </list></p>
+ </item> </list>
<p>
Own Id: OTP-9792</p>
</item>
@@ -338,7 +353,7 @@
</item>
<item>
<p>
- Some bug fixes related to the handling of escripts:
+ Some bug fixes related to the handling of escripts:</p>
<list> <item> Reltool could not handle escripts with
inlined applications. This has been corrected. Inlined
applications will be visible in the GUI, but not possible
@@ -357,7 +372,7 @@
another escript, for which the name sorts before the
existing one, would cause reltool to fail saying
"Application name clash". This has been corrected.
- </item> </list></p>
+ </item> </list>
<p>
Own Id: OTP-9968</p>
</item>
diff --git a/lib/reltool/doc/src/part.xml b/lib/reltool/doc/src/part.xml
index 029c35dc0c..5904084879 100644
--- a/lib/reltool/doc/src/part.xml
+++ b/lib/reltool/doc/src/part.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/reltool/doc/src/ref_man.xml b/lib/reltool/doc/src/ref_man.xml
index 17bc76b841..38f270b79a 100644
--- a/lib/reltool/doc/src/ref_man.xml
+++ b/lib/reltool/doc/src/ref_man.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/reltool/doc/src/reltool.xml b/lib/reltool/doc/src/reltool.xml
index 82a410e3e7..38448e7961 100644
--- a/lib/reltool/doc/src/reltool.xml
+++ b/lib/reltool/doc/src/reltool.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -248,7 +248,7 @@
<p>When starting this release, three things must be specified:</p>
<taglist>
- <tag><b>Which <c>releases</c> directory to use</b></tag>
+ <tag><em>Which <c>releases</c> directory to use</em></tag>
<item>Tell the release handler to use the <c>releases</c>
directory in our target structure instead of
<c>$OTP_ROOT/releases</c>. This is done by setting the SASL
@@ -257,7 +257,7 @@
&lt;target-dir&gt;/releases</c>) or in
<c>sys.config</c>.</item>
- <tag><b>Which boot file to use</b></tag>
+ <tag><em>Which boot file to use</em></tag>
<item>The default boot file is <c>$OTP_ROOT/bin/start</c>,
but in this case we need to specify a boot file from our
target structure, typically
@@ -265,7 +265,7 @@
is done with the <c>-boot</c> command line option to
<c>erl</c></item>
- <tag><b>The location of our applications</b></tag>
+ <tag><em>The location of our applications</em></tag>
<item>The generated .script (and .boot) file uses the
environment variable <c>$RELTOOL_EXT_LIB</c> as prefix for
the paths to all applications. The <c>-boot_var</c> option
@@ -275,8 +275,8 @@
</taglist>
<p>Example:</p>
- <p><code>erl -sasl releases_dir \"mytarget/releases\" -boot mytarget/releases/1.0/myrel\
- -boot_var RELTOOL_EXT_LIB mytarget/lib</code></p>
+ <code>erl -sasl releases_dir \"mytarget/releases\" -boot mytarget/releases/1.0/myrel\
+ -boot_var RELTOOL_EXT_LIB mytarget/lib</code>
</item>
<tag><c>incl_sys_filters</c></tag>
diff --git a/lib/reltool/doc/src/reltool_examples.xml b/lib/reltool/doc/src/reltool_examples.xml
index 6c28674a69..f735d914ea 100644
--- a/lib/reltool/doc/src/reltool_examples.xml
+++ b/lib/reltool/doc/src/reltool_examples.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/reltool/doc/src/reltool_intro.xml b/lib/reltool/doc/src/reltool_intro.xml
index e72b9029b1..8e232b8838 100644
--- a/lib/reltool/doc/src/reltool_intro.xml
+++ b/lib/reltool/doc/src/reltool_intro.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/reltool/doc/src/reltool_usage.xml b/lib/reltool/doc/src/reltool_usage.xml
index 2adef96073..743d5fa366 100644
--- a/lib/reltool/doc/src/reltool_usage.xml
+++ b/lib/reltool/doc/src/reltool_usage.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/reltool/examples/Makefile b/lib/reltool/examples/Makefile
index 5f2d97b439..cc29c88ba3 100644
--- a/lib/reltool/examples/Makefile
+++ b/lib/reltool/examples/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/Makefile b/lib/reltool/src/Makefile
index 1fea41550c..4bddee4664 100644
--- a/lib/reltool/src/Makefile
+++ b/lib/reltool/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2013. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/files.mk b/lib/reltool/src/files.mk
index a7ef5d05e2..6354b51022 100644
--- a/lib/reltool/src/files.mk
+++ b/lib/reltool/src/files.mk
@@ -1,7 +1,7 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool.app.src b/lib/reltool/src/reltool.app.src
index 8aef4c1dbb..90f93d2901 100644
--- a/lib/reltool/src/reltool.app.src
+++ b/lib/reltool/src/reltool.app.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool.appup.src b/lib/reltool/src/reltool.appup.src
index bcd84183ba..52c38e5cbb 100644
--- a/lib/reltool/src/reltool.appup.src
+++ b/lib/reltool/src/reltool.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool.erl b/lib/reltool/src/reltool.erl
index 269b44b709..f6ce5578bc 100644
--- a/lib/reltool/src/reltool.erl
+++ b/lib/reltool/src/reltool.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool.hrl b/lib/reltool/src/reltool.hrl
index 4c3f76bdc6..9ac22b9450 100644
--- a/lib/reltool/src/reltool.hrl
+++ b/lib/reltool/src/reltool.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -141,15 +141,15 @@
app_name :: '_' | app_name(),
incl_cond :: '_' | incl_cond() | undefined,
debug_info :: '_' | debug_info() | undefined,
- is_app_mod :: '_' | boolean(),
- is_ebin_mod :: '_' | boolean(),
- uses_mods :: '$2' | [mod_name()],
- exists :: '_' | boolean(),
+ is_app_mod :: '_' | boolean() | undefined,
+ is_ebin_mod :: '_' | boolean() | undefined,
+ uses_mods :: '$2' | [mod_name()] | undefined,
+ exists :: '_' | boolean() | undefined,
%% Dynamic
- status :: '_' | status(),
- used_by_mods :: '_' | [mod_name()],
- is_pre_included :: '_' | boolean() | undefined,
- is_included :: '_' | boolean() | undefined
+ status = ok :: '_' | status(),
+ used_by_mods = [] :: '_' | [mod_name()],
+ is_pre_included :: '_' | boolean() | undefined,
+ is_included :: '_' | boolean() | undefined
}).
-record(app_info,
@@ -177,10 +177,10 @@
name :: '_' | app_name(),
is_escript :: '_' | boolean() | {inlined, escript_app_name()},
use_selected_vsn :: '_' | vsn | dir | undefined,
- active_dir :: '_' | dir(),
+ active_dir :: '_' | dir() | undefined,
sorted_dirs :: '_' | [dir()],
- vsn :: '_' | app_vsn(),
- label :: '_' | app_label(),
+ vsn :: '_' | app_vsn() | undefined,
+ label :: '_' | app_label() | undefined,
info :: '_' | #app_info{} | undefined,
mods :: '_' | [#mod{}],
@@ -192,21 +192,21 @@
debug_info :: '_' | debug_info() | undefined,
app_file :: '_' | app_file() | undefined,
app_type :: '_' | app_type() | undefined,
- incl_app_filters :: '_' | [#regexp{}],
- excl_app_filters :: '_' | [#regexp{}],
- incl_archive_filters :: '_' | [#regexp{}],
- excl_archive_filters :: '_' | [#regexp{}],
- archive_opts :: '_' | [archive_opt()],
+ incl_app_filters :: '_' | [#regexp{}] | undefined,
+ excl_app_filters :: '_' | [#regexp{}] | undefined,
+ incl_archive_filters :: '_' | [#regexp{}] | undefined,
+ excl_archive_filters :: '_' | [#regexp{}] | undefined,
+ archive_opts :: '_' | [archive_opt()] | undefined,
%% Dynamic
status :: '_' | status(),
- uses_mods :: '_' | [mod_name()],
- used_by_mods :: '_' | [mod_name()],
- uses_apps :: '_' | [app_name()],
- used_by_apps :: '_' | [app_name()],
+ uses_mods :: '_' | [mod_name()] | undefined,
+ used_by_mods :: '_' | [mod_name()] | undefined,
+ uses_apps :: '_' | [app_name()] | undefined,
+ used_by_apps :: '_' | [app_name()] | undefined,
is_pre_included :: '_' | '$2' | boolean() | undefined,
is_included :: '_' | '$1' | boolean() | undefined,
- rels :: '_' | [rel_name()]
+ rels :: '_' | [rel_name()] | undefined
}).
-record(rel_app,
@@ -237,7 +237,7 @@
rels :: [#rel{}],
emu_name :: emu_name(),
profile :: profile(),
- excl_lib :: excl_lib(),
+ excl_lib :: excl_lib() | undefined,
incl_sys_filters :: [#regexp{}],
excl_sys_filters :: [#regexp{}],
incl_app_filters :: [#regexp{}],
diff --git a/lib/reltool/src/reltool_app_win.erl b/lib/reltool/src/reltool_app_win.erl
index 5c623c2835..468ba297bb 100644
--- a/lib/reltool/src/reltool_app_win.erl
+++ b/lib/reltool/src/reltool_app_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool_fgraph.erl b/lib/reltool/src/reltool_fgraph.erl
index afdbe78c19..06be5c3701 100644
--- a/lib/reltool/src/reltool_fgraph.erl
+++ b/lib/reltool/src/reltool_fgraph.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool_fgraph.hrl b/lib/reltool/src/reltool_fgraph.hrl
index 6056ccbd02..c3e85159bf 100644
--- a/lib/reltool/src/reltool_fgraph.hrl
+++ b/lib/reltool/src/reltool_fgraph.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool_fgraph_win.erl b/lib/reltool/src/reltool_fgraph_win.erl
index 6b58cae187..915330794c 100644
--- a/lib/reltool/src/reltool_fgraph_win.erl
+++ b/lib/reltool/src/reltool_fgraph_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -220,8 +220,8 @@ graph_add_node_unsure(Key, State, G = #graph{ vs = Vs }) ->
graph_add_node(Key, Color, G = #graph{ vs = Vs}) ->
Q = 20.0, % repulsive force
M = 0.5, % mass
- P = {float(450 + random:uniform(100)),
- float(450 + random:uniform(100))},
+ P = {float(450 + rand:uniform(100)),
+ float(450 + rand:uniform(100))},
G#graph{ vs = reltool_fgraph:add(Key,
#fg_v{ p = P, m = M, q = Q, color = Color},
Vs)}.
diff --git a/lib/reltool/src/reltool_mod_win.erl b/lib/reltool/src/reltool_mod_win.erl
index 1788841ae7..8cd63bdda1 100644
--- a/lib/reltool/src/reltool_mod_win.erl
+++ b/lib/reltool/src/reltool_mod_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool_server.erl b/lib/reltool/src/reltool_server.erl
index 1f0e5bc476..89e90670cf 100644
--- a/lib/reltool/src/reltool_server.erl
+++ b/lib/reltool/src/reltool_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -530,9 +530,14 @@ analyse(#state{sys=Sys} = S, Apps, Status) ->
%% Write all #app to app_tab and all #mod to mod_tab.
Status2 = apps_init_is_included(S, Apps, RelApps, Status),
+ %% For each application that is not (directly or indirectly) part
+ %% of a release, but still has #app.is_included==true, propagate
+ %% is_included to the dependencies specified in the .app files.
+ app_propagate_is_included(S),
+
%% For each module that has #mod.is_included==true, propagate
%% is_included to the modules it uses.
- propagate_is_included(S),
+ mod_propagate_is_included(S),
%% Insert reverse dependencies - i.e. for each
%% #mod{name=Mod, uses_mods=[UsedMod]},
@@ -565,31 +570,34 @@ apps_in_rels(Rels, Apps) ->
apps_in_rel(#rel{name = RelName, rel_apps = RelApps}, Apps) ->
Mandatory = [{RelName, kernel}, {RelName, stdlib}],
- Other =
+ Explicit0 = [{RelName, AppName} || #rel_app{name=AppName} <- RelApps],
+ Explicit = Mandatory ++ Explicit0,
+ Deps =
[{RelName, AppName} ||
RA <- RelApps,
- AppName <- [RA#rel_app.name |
+ AppName <-
+ case lists:keyfind(RA#rel_app.name,
+ #app.name,
+ Apps) of
+ App=#app{info = #app_info{applications = AA}} ->
%% Included applications in rel shall overwrite included
%% applications in .app. I.e. included applications in
%% .app shall only be used if it is not defined in rel.
- case RA#rel_app.incl_apps of
- undefined ->
- case lists:keyfind(RA#rel_app.name,
- #app.name,
- Apps) of
- #app{info = #app_info{incl_apps = IA}} ->
- IA;
- false ->
- reltool_utils:throw_error(
- "Release ~tp uses non existing "
- "application ~w",
- [RelName,RA#rel_app.name])
- end;
- IA ->
- IA
- end],
- not lists:keymember(AppName, 2, Mandatory)],
- more_apps_in_rels(Mandatory ++ Other, Apps, []).
+ IA = case RA#rel_app.incl_apps of
+ undefined ->
+ (App#app.info)#app_info.incl_apps;
+ RelIA ->
+ RelIA
+ end,
+ AA ++ IA;
+ false ->
+ reltool_utils:throw_error(
+ "Release ~tp uses non existing "
+ "application ~w",
+ [RelName,RA#rel_app.name])
+ end,
+ not lists:keymember(AppName, 2, Explicit)],
+ more_apps_in_rels(Deps, Apps, Explicit).
more_apps_in_rels([{RelName, AppName} = RA | RelApps], Apps, Acc) ->
case lists:member(RA, Acc) of
@@ -597,8 +605,8 @@ more_apps_in_rels([{RelName, AppName} = RA | RelApps], Apps, Acc) ->
more_apps_in_rels(RelApps, Apps, Acc);
false ->
case lists:keyfind(AppName, #app.name, Apps) of
- #app{info = #app_info{applications = InfoApps}} ->
- Extra = [{RelName, N} || N <- InfoApps],
+ #app{info = #app_info{applications = AA, incl_apps=IA}} ->
+ Extra = [{RelName, N} || N <- AA++IA],
Acc2 = more_apps_in_rels(Extra, Apps, [RA | Acc]),
more_apps_in_rels(RelApps, Apps, Acc2);
false ->
@@ -610,7 +618,6 @@ more_apps_in_rels([{RelName, AppName} = RA | RelApps], Apps, Acc) ->
more_apps_in_rels([], _Apps, Acc) ->
Acc.
-
apps_init_is_included(S, Apps, RelApps, Status) ->
lists:foldl(fun(App, AccStatus) ->
app_init_is_included(S, App, RelApps, AccStatus)
@@ -745,6 +752,100 @@ false_to_undefined(Bool) ->
_ -> Bool
end.
+get_no_rel_apps_and_dependencies(S) ->
+ ets:select(S#state.app_tab, [{#app{name='$1',
+ is_included=true,
+ info=#app_info{applications='$2',
+ incl_apps='$3',
+ _='_'},
+ rels=[],
+ _='_'},
+ [],
+ [{{'$1','$2','$3'}}]}]).
+
+app_propagate_is_included(S) ->
+ lists:foreach(
+ fun({AppName,DepNames1,DepNames2}) ->
+ app_mark_is_included(S,AppName,DepNames1++DepNames2)
+ end,
+ get_no_rel_apps_and_dependencies(S)).
+
+app_mark_is_included(#state{app_tab=AppTab, mod_tab=ModTab, sys=Sys}=S,UsedByName,[AppName|AppNames]) ->
+ case ets:lookup(AppTab, AppName) of
+ [A] ->
+ case A#app.is_included of
+ undefined ->
+ %% Not yet marked => mark and propagate
+ A2 =
+ case A#app.incl_cond of
+ include ->
+ A#app{is_pre_included = true,
+ is_included = true};
+ exclude ->
+ A#app{is_pre_included = false,
+ is_included = false};
+ AppInclCond when AppInclCond==undefined;
+ AppInclCond==derived ->
+ A#app{is_included = true}
+ end,
+ ets:insert(AppTab, A2),
+
+ ModCond =
+ case A#app.mod_cond of
+ undefined -> Sys#sys.mod_cond;
+ _ -> A#app.mod_cond
+ end,
+ Filter =
+ fun(M) ->
+ case ModCond of
+ all -> true;
+ app -> M#mod.is_app_mod;
+ ebin -> M#mod.is_ebin_mod;
+ derived -> false;
+ none -> false
+ end
+ end,
+ Mods = lists:filter(Filter, A#app.mods),
+ %% Mark the modules of this app, but no need to go
+ %% recursive on modules since this is done in
+ %% mod_mark_is_included.
+ [case M#mod.is_included of
+ undefined ->
+ M2 =
+ case M#mod.incl_cond of
+ include ->
+ M#mod{is_pre_included = true,
+ is_included = true};
+ exclude ->
+ M#mod{is_pre_included = false,
+ is_included = false};
+ ModInclCond when ModInclCond==undefined;
+ ModInclCond==derived ->
+ M#mod{is_included = true}
+ end,
+ ets:insert(ModTab, M2);
+ _ ->
+ ok
+ end || M <- Mods],
+
+ %% Go recursive on dependencies
+ #app{info=#app_info{applications=DepNames1,
+ incl_apps=DepNames2}} = A,
+ app_mark_is_included(S,AppName,DepNames1++DepNames2);
+ _ ->
+ %% Already marked
+ ok
+ end;
+ [] ->
+ %% Missing app
+ reltool_utils:throw_error(
+ "Application ~tp uses non existing application ~w",
+ [UsedByName,AppName])
+ end,
+ app_mark_is_included(S, UsedByName, AppNames);
+app_mark_is_included(_S, _UsedByName, []) ->
+ ok.
+
%% Return the list for {ModName, UsesModNames} for all modules where
%% #mod.is_included==true.
get_all_mods_and_dependencies(S) ->
@@ -755,7 +856,7 @@ get_all_mods_and_dependencies(S) ->
[],
[{{'$1','$2'}}]}]).
-propagate_is_included(S) ->
+mod_propagate_is_included(S) ->
case lists:flatmap(
fun({ModName,UsesModNames}) ->
mod_mark_is_included(S,ModName,UsesModNames,[])
diff --git a/lib/reltool/src/reltool_sys_win.erl b/lib/reltool/src/reltool_sys_win.erl
index 03f206ef64..ba0d90ef5f 100644
--- a/lib/reltool/src/reltool_sys_win.erl
+++ b/lib/reltool/src/reltool_sys_win.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool_target.erl b/lib/reltool/src/reltool_target.erl
index 0728398db3..1615a3e9b7 100644
--- a/lib/reltool/src/reltool_target.erl
+++ b/lib/reltool/src/reltool_target.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/src/reltool_utils.erl b/lib/reltool/src/reltool_utils.erl
index 1879e77a54..60edc9f3ca 100644
--- a/lib/reltool/src/reltool_utils.erl
+++ b/lib/reltool/src/reltool_utils.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/test/Makefile b/lib/reltool/test/Makefile
index ccb3d7dc55..838e9a34f6 100644
--- a/lib/reltool/test/Makefile
+++ b/lib/reltool/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/reltool/test/reltool_app_SUITE.erl b/lib/reltool/test/reltool_app_SUITE.erl
index 35971a9a3c..18c74bea6c 100644
--- a/lib/reltool/test/reltool_app_SUITE.erl
+++ b/lib/reltool/test/reltool_app_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/test/reltool_manual_gui_SUITE.erl b/lib/reltool/test/reltool_manual_gui_SUITE.erl
index 7800b7d031..eebe2303fb 100644
--- a/lib/reltool/test/reltool_manual_gui_SUITE.erl
+++ b/lib/reltool/test/reltool_manual_gui_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/test/reltool_server_SUITE.erl b/lib/reltool/test/reltool_server_SUITE.erl
index 6a487a1ddb..e8dfea94da 100644
--- a/lib/reltool/test/reltool_server_SUITE.erl
+++ b/lib/reltool/test/reltool_server_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -142,6 +142,7 @@ all() ->
save_config,
dependencies,
mod_incl_cond_derived,
+ dep_in_app_not_xref,
use_selected_vsn,
use_selected_vsn_relative_path,
non_standard_vsn_id,
@@ -408,7 +409,6 @@ create_release_sort(Config) ->
{app,tools,[{mod_cond,app},{incl_cond,include}]}
]},
%% Generate release
-
?msym({ok, {release, {RelName1, RelVsn},
{erts, _},
[{kernel, _},
@@ -2304,6 +2304,7 @@ dependencies(Config) ->
ok.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Test that incl_cond on mod level overwrites mod_cond on app level
%% Uses same test applications as dependencies/1 above
mod_incl_cond_derived(Config) ->
@@ -2346,6 +2347,40 @@ mod_incl_cond_derived(Config) ->
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ERL-167, OTP-11993: For applications that are not included in a
+%% release spec ('rel'), dependencies in the .app files are not
+%% considered - only those found with xref.
+dep_in_app_not_xref(Config) ->
+ RelName = "Just testing...",
+ RelVsn = "1.0",
+ Sys =
+ {sys,
+ [
+ {lib_dirs,[filename:join(datadir(Config),"dep_in_app_not_xref")]},
+ {incl_cond,exclude},
+ {incl_archive_filters,[]},
+ {erts,[{incl_cond,exclude}]},
+ {boot_rel, RelName},
+ {rel, RelName, RelVsn, [kernel, stdlib]},
+ {app,kernel,[{incl_cond,include}]},
+ {app,stdlib,[{incl_cond,include}]},
+ {app,x,[{incl_cond,include}]},
+ {app,y,[{incl_cond,derived}]},
+ {app,z,[{incl_cond,derived}]}
+ ]},
+
+ TargetDir = filename:join([?WORK_DIR, "target_dep_in_app_not_xref"]),
+ ?m(ok, reltool_utils:recursive_delete(TargetDir)),
+ ?m(ok, file:make_dir(TargetDir)),
+ ?log("SPEC: ~p\n", [reltool:get_target_spec([{config, Sys}])]),
+ ok = ?m(ok, reltool:create_target([{config, Sys}], TargetDir)),
+ ?log("~p~n",[file:list_dir(filename:join([TargetDir,"lib"]))]),
+
+ ?m(true, filelib:is_dir(filename:join([TargetDir,"lib","y-1.0"]))),
+ ?m(true, filelib:is_dir(filename:join([TargetDir,"lib","z-1.0"]))),
+ ok.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
use_selected_vsn(Config) ->
LibDir1 = filename:join(datadir(Config),"use_selected_vsn"),
B1Dir = filename:join(LibDir1,"b-1.0"),
@@ -2530,13 +2565,54 @@ latest(App) ->
rm_missing_app(Apps) ->
lists:keydelete(?MISSING_APP_NAME,#app.name,Apps).
+%% We will compare the script generated by systools with
+%% the script generated by Reltool.
+%%
+%% The systools script may include additional modules in
+%% the first primLoad command (as a pure optimization).
+%% Therefore, we cannot compare the primLoad commands
+%% directly. Instead we will collect all modules from
+%% all primLoad commands in each script. The same
+%% modules must be loaded by both scripts. In addition,
+%% the error_handler module must be included in the
+%% first primLoad in each script.
+
diff_script(Script, Script) ->
equal;
diff_script({script, Rel, Commands1}, {script, Rel, Commands2}) ->
- diff_cmds(Commands1, Commands2);
+ case diff_cmds(Commands1, Commands2) of
+ equal ->
+ Loaded = diff_get_prim_load(Commands1),
+ case diff_get_prim_load(Commands2) of
+ Loaded ->
+ equal;
+ Other ->
+ io:format("Only loaded by systools: ~p",
+ [Loaded--Other]),
+ io:format("Only loaded by reltool: ~p",
+ [Other--Loaded]),
+ ct:fail(different_prim_loads)
+ end;
+ Error ->
+ Error
+ end;
diff_script({script, Rel1, _}, {script, Rel2, _}) ->
{error, {Rel1, Rel2}}.
+diff_cmds([{primLoad, Ms1}=Cmd1 | Commands1],
+ [{primLoad, Ms2}=Cmd2 | Commands2]) ->
+ case lists:member(error_handler, Ms1) xor
+ lists:member(error_handler, Ms2) of
+ false ->
+ %% error_handler either present in both or
+ %% absent in both.
+ diff_cmds(Commands1, Commands2);
+ true ->
+ %% error_handler only present in one primLoad.
+ %% Not OK.
+ {diff, missing_error_handler,
+ {expected, Cmd1}, {actual, Cmd2}}
+ end;
diff_cmds([Cmd | Commands1], [Cmd | Commands2]) ->
diff_cmds(Commands1, Commands2);
diff_cmds([Cmd1 | _Commands1], [Cmd2 | _Commands2]) ->
@@ -2544,6 +2620,10 @@ diff_cmds([Cmd1 | _Commands1], [Cmd2 | _Commands2]) ->
diff_cmds([], []) ->
equal.
+diff_get_prim_load(Cmds) ->
+ L = [Ms || {primLoad, Ms} <- Cmds],
+ lists:sort(lists:flatten(L)).
+
os_cmd(Cmd) when is_list(Cmd) ->
%% Call the plain os:cmd with an echo command appended to print command status
%% io:format("os:cmd(~p).\n", [Cmd]),
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/ebin/x.app b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/ebin/x.app
new file mode 100644
index 0000000000..fe922e3a41
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/ebin/x.app
@@ -0,0 +1,7 @@
+% -*-erlang-*-
+{application, x,
+ [{description, "Main application in reltool dependency test"},
+ {vsn, "1.0"},
+ {modules, [x1]},
+ {registered, []},
+ {applications, [kernel, stdlib, y]}]}.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/src/x1.erl b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/src/x1.erl
new file mode 100644
index 0000000000..bf1e7f9279
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/src/x1.erl
@@ -0,0 +1,5 @@
+-module(x1).
+-compile(export_all).
+
+f() ->
+ ok.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/ebin/y.app b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/ebin/y.app
new file mode 100644
index 0000000000..a21cfe6c21
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/ebin/y.app
@@ -0,0 +1,8 @@
+% -*-erlang-*-
+{application, y,
+ [{description, "Library application in reltool dependency test"},
+ {vsn, "1.0"},
+ {modules, [y1]},
+ {registered, []},
+ {applications, [kernel, stdlib]},
+ {included_applications, [z]}]}.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/src/y1.erl b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/src/y1.erl
new file mode 100644
index 0000000000..902a7e21f3
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/src/y1.erl
@@ -0,0 +1,5 @@
+-module(y1).
+-compile(export_all).
+
+f() ->
+ ok.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/ebin/z.app b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/ebin/z.app
new file mode 100644
index 0000000000..437a0968e9
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/ebin/z.app
@@ -0,0 +1,7 @@
+% -*-erlang-*-
+{application, z,
+ [{description, "Library application in reltool dependency test"},
+ {vsn, "1.0"},
+ {modules, [z1]},
+ {registered, []},
+ {applications, [kernel, stdlib]}]}.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/src/z1.erl b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/src/z1.erl
new file mode 100644
index 0000000000..97ef90b87f
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/src/z1.erl
@@ -0,0 +1,5 @@
+-module(z1).
+-compile(export_all).
+
+f() ->
+ ok.
diff --git a/lib/reltool/test/reltool_test_lib.erl b/lib/reltool/test/reltool_test_lib.erl
index 10546f9915..6cc2d259fb 100644
--- a/lib/reltool/test/reltool_test_lib.erl
+++ b/lib/reltool/test/reltool_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/test/reltool_test_lib.hrl b/lib/reltool/test/reltool_test_lib.hrl
index 87a5d7bd1a..63c4b01714 100644
--- a/lib/reltool/test/reltool_test_lib.hrl
+++ b/lib/reltool/test/reltool_test_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/test/reltool_wx_SUITE.erl b/lib/reltool/test/reltool_wx_SUITE.erl
index f2f1693483..ac820db21c 100644
--- a/lib/reltool/test/reltool_wx_SUITE.erl
+++ b/lib/reltool/test/reltool_wx_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/test/rtt b/lib/reltool/test/rtt
index 8de2ea32ac..d0ccd577a0 100755
--- a/lib/reltool/test/rtt
+++ b/lib/reltool/test/rtt
@@ -1,7 +1,7 @@
#! /bin/sh -f
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2010. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/reltool/test/rtt.erl b/lib/reltool/test/rtt.erl
index 5b3c84b06a..173ffc5166 100644
--- a/lib/reltool/test/rtt.erl
+++ b/lib/reltool/test/rtt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/reltool/vsn.mk b/lib/reltool/vsn.mk
index 733c41bc02..76f69fd294 100644
--- a/lib/reltool/vsn.mk
+++ b/lib/reltool/vsn.mk
@@ -1 +1 @@
-RELTOOL_VSN = 0.7
+RELTOOL_VSN = 0.7.1
diff --git a/lib/runtime_tools/Makefile b/lib/runtime_tools/Makefile
index 75174d3bca..eec1ff379b 100644
--- a/lib/runtime_tools/Makefile
+++ b/lib/runtime_tools/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/c_src/Makefile.in b/lib/runtime_tools/c_src/Makefile.in
index 448b8c62c2..4530a83aee 100644
--- a/lib/runtime_tools/c_src/Makefile.in
+++ b/lib/runtime_tools/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -33,21 +33,18 @@ VSN=$(RUNTIME_TOOLS_VSN)
# be set for that system only.
# ----------------------------------------------------
CC = $(DED_CC)
-CFLAGS = $(DED_CFLAGS)
+CFLAGS = $(DED_CFLAGS) -I./
LD = $(DED_LD)
SHELL = /bin/sh
LIBS = $(DED_LIBS)
LDFLAGS += $(DED_LDFLAGS)
-DTRACE_LIBNAME = dyntrace
+TRACE_LIBNAME = dyntrace trace_file_drv trace_ip_drv
SYSINCLUDE = $(DED_SYS_INCLUDE)
TRACE_DRV_INCLUDES = $(SYSINCLUDE)
-ALL_CFLAGS = $(CFLAGS) @DEFS@ $(TYPE_FLAGS) $(TRACE_DRV_INCLUDES) \
- -I$(OBJDIR) -I$(ERL_TOP)/erts/emulator/$(TARGET)
-
ifeq ($(TYPE),debug)
TYPEMARKER = .debug
TYPE_FLAGS = $(subst -O3,,$(subst -O2,,$(CFLAGS))) -DDEBUG @DEBUG_FLAGS@
@@ -61,6 +58,9 @@ TYPE_FLAGS = $(CFLAGS)
endif
endif
+ALL_CFLAGS = @DEFS@ $(TYPE_FLAGS) $(TRACE_DRV_INCLUDES) \
+ -I$(OBJDIR) -I$(ERL_TOP)/erts/emulator/$(TARGET)
+
ROOTDIR = $(ERL_TOP)/lib
PRIVDIR = ../priv
LIBDIR = $(PRIVDIR)/lib/$(TARGET)
@@ -74,42 +74,16 @@ RELSYSDIR = $(RELEASE_PATH)/lib/runtime_tools-$(VSN)
# ----------------------------------------------------
# Misc Macros
# ----------------------------------------------------
-before_DTrace_OBJS = $(OBJDIR)/dyntrace$(TYPEMARKER).o
-## NIF_MAKEFILE = $(PRIVDIR)/Makefile
-
-# Higher-level makefiles says that we can only compile on UNIX flavors
-NIF_LIB = $(LIBDIR)/dyntrace$(TYPEMARKER).@DED_EXT@
-ifeq ($(HOST_OS),)
-HOST_OS := $(shell $(ERL_TOP)/erts/autoconf/config.guess)
-endif
+TRACE_LIBS = $(foreach LIB, $(TRACE_LIBNAME), $(LIBDIR)/$(LIB)$(TYPEMARKER).@DED_EXT@)
-TRACE_IP_DRV_OBJS = \
- $(OBJDIR)/trace_ip_drv.o
-
-TRACE_FILE_DRV_OBJS = \
- $(OBJDIR)/trace_file_drv.o
-
-ifeq ($(findstring win32,$(TARGET)), win32)
-SOLIBS = $(LIBDIR)/trace_ip_drv.dll $(LIBDIR)/trace_file_drv.dll
-LN=cp
-else
-SOLIBS = $(LIBDIR)/trace_ip_drv.so $(LIBDIR)/trace_file_drv.so
-endif
# ----------------------------------------------------
# Targets
# ----------------------------------------------------
_create_dirs := $(shell mkdir -p $(OBJDIR) $(LIBDIR))
-ifneq ($(findstring ose,$(TARGET)),ose)
-debug opt valgrind: $(SOLIBS) $(OBJDIR) $(LIBDIR) $(NIF_LIB)
-else
-# We do not build this on OSE
-debug opt valgrind:
-endif
-
-DYNTRACE_OBJS = $(before_DTrace_OBJS)
+debug opt valgrind: $(SOLIBS) $(OBJDIR) $(LIBDIR) $(TRACE_LIBS)
$(OBJDIR):
-@mkdir -p $(OBJDIR)
@@ -117,52 +91,26 @@ $(OBJDIR):
$(LIBDIR):
-@mkdir -p $(LIBDIR)
-$(OBJDIR)/dyntrace$(TYPEMARKER).o: dyntrace.c
- $(V_at)$(INSTALL_DIR) $(OBJDIR)
- $(V_CC) -c -o $@ $(ALL_CFLAGS) $<
-
-$(NIF_LIB): $(DYNTRACE_OBJS)
- $(V_at)$(INSTALL_DIR) $(LIBDIR)
- $(V_LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
-
-$(OBJDIR)/%.o: %.c
+$(OBJDIR)/%$(TYPEMARKER).o: %.c dyntrace_lttng.h
$(V_CC) -c -o $@ $(ALL_CFLAGS) $<
-$(LIBDIR)/trace_ip_drv.so: $(TRACE_IP_DRV_OBJS)
- $(V_LD) $(LDFLAGS) -o $@ $^ -lc $(LIBS)
-
-$(LIBDIR)/trace_file_drv.so: $(TRACE_FILE_DRV_OBJS)
- $(V_LD) $(LDFLAGS) -o $@ $^ -lc $(LIBS)
-
-$(LIBDIR)/trace_ip_drv.dll: $(TRACE_IP_DRV_OBJS)
- $(V_LD) $(LDFLAGS) -o $@ $^ $(LIBS)
-$(LIBDIR)/trace_file_drv.dll: $(TRACE_FILE_DRV_OBJS)
+$(LIBDIR)/%$(TYPEMARKER).@DED_EXT@: $(OBJDIR)/%$(TYPEMARKER).o
$(V_LD) $(LDFLAGS) -o $@ $^ $(LIBS)
clean:
- rm -f $(SOLIBS) $(TRACE_IP_DRV_OBJS) $(TRACE_FILE_DRV_OBJS)
- rm -f $(LIBDIR)/dyntrace.@DED_EXT@
- rm -f $(LIBDIR)/dyntrace.debug.@DED_EXT@
- rm -f $(LIBDIR)/dyntrace.valgrind.@DED_EXT@
- rm -f $(OBJDIR)/dyntrace.o
- rm -f $(OBJDIR)/dyntrace.debug.o
- rm -f $(OBJDIR)/dyntrace.valgrind.o
+ rm -f $(TRACE_LIBS)
rm -f core *~
docs:
# ----------------------------------------------------
# Release Target
-# ----------------------------------------------------
+# ----------------------------------------------------
include $(ERL_TOP)/make/otp_release_targets.mk
release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/priv/obj"
$(INSTALL_DIR) "$(RELSYSDIR)/priv/lib"
-ifneq ($(findstring ose,$(TARGET)),ose)
- $(INSTALL_PROGRAM) $(DYNTRACE_OBJS) "$(RELSYSDIR)/priv/obj"
- $(INSTALL_PROGRAM) $(NIF_LIB) $(SOLIBS) "$(RELSYSDIR)/priv/lib"
-endif
+ $(INSTALL_PROGRAM) $(TRACE_LIBS) "$(RELSYSDIR)/priv/lib"
release_docs_spec:
diff --git a/lib/runtime_tools/c_src/dtrace_user.d b/lib/runtime_tools/c_src/dtrace_user.d
index 09597f3e89..2b74e9ef6f 100644
--- a/lib/runtime_tools/c_src/dtrace_user.d
+++ b/lib/runtime_tools/c_src/dtrace_user.d
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012.
+ * Copyright Scott Lystig Fritchie 2011-2016.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/lib/runtime_tools/c_src/dyntrace.c b/lib/runtime_tools/c_src/dyntrace.c
index e9bcc161c5..3d2de9c21c 100644
--- a/lib/runtime_tools/c_src/dyntrace.c
+++ b/lib/runtime_tools/c_src/dyntrace.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -29,7 +29,13 @@
#include "sys.h"
#include "dtrace-wrapper.h"
#if defined(USE_DYNAMIC_TRACE) && (defined(USE_DTRACE) || defined(USE_SYSTEMTAP))
-#define HAVE_USE_DTRACE 1
+# define HAVE_USE_DTRACE 1
+#endif
+#if defined(USE_LTTNG)
+# define HAVE_USE_LTTNG 1
+# define TRACEPOINT_DEFINE
+# define TRACEPOINT_CREATE_PROBES
+# include "dyntrace_lttng.h"
#endif
void dtrace_nifenv_str(ErlNifEnv *env, char *process_buf);
@@ -60,11 +66,55 @@ static ERL_NIF_TERM user_trace_s1(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
static ERL_NIF_TERM user_trace_i4s4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM user_trace_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+
+#ifdef HAVE_USE_LTTNG
+static ERL_NIF_TERM trace_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_running_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_running_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_call(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_send(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_receive(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_garbage_collection(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+
+static ERL_NIF_TERM enabled_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_running_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_running_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_call(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_send(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_receive(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_garbage_collection(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+#endif
+
+
static ErlNifFunc nif_funcs[] = {
{"available", 0, available},
{"user_trace_s1", 1, user_trace_s1},
{"user_trace_i4s4", 9, user_trace_i4s4},
- {"user_trace_n", 10, user_trace_n}
+ {"user_trace_n", 10, user_trace_n},
+#ifdef HAVE_USE_LTTNG
+ {"trace_procs", 5, trace_procs},
+ {"trace_ports", 5, trace_ports},
+ {"trace_running_procs", 5, trace_running_procs},
+ {"trace_running_ports", 5, trace_running_ports},
+ {"trace_call", 5, trace_call},
+ {"trace_send", 5, trace_send},
+ {"trace_receive", 5, trace_receive},
+ {"trace_garbage_collection", 5, trace_garbage_collection},
+ {"enabled_procs", 3, enabled_procs},
+ {"enabled_ports", 3, enabled_ports},
+ {"enabled_running_procs", 3, enabled_running_procs},
+ {"enabled_running_ports", 3, enabled_running_ports},
+ {"enabled_call", 3, enabled_call},
+ {"enabled_send", 3, enabled_send},
+ {"enabled_receive", 3, enabled_receive},
+ {"enabled_garbage_collection", 3, enabled_garbage_collection},
+#endif
+ {"enabled", 3, enabled},
+ {"trace", 5, trace}
};
ERL_NIF_INIT(dyntrace, nif_funcs, load, NULL, NULL, NULL)
@@ -72,19 +122,131 @@ ERL_NIF_INIT(dyntrace, nif_funcs, load, NULL, NULL, NULL)
static ERL_NIF_TERM atom_true;
static ERL_NIF_TERM atom_false;
static ERL_NIF_TERM atom_error;
+static ERL_NIF_TERM atom_extra;
static ERL_NIF_TERM atom_not_available;
static ERL_NIF_TERM atom_badarg;
static ERL_NIF_TERM atom_ok;
+static ERL_NIF_TERM atom_trace;
+static ERL_NIF_TERM atom_seq_trace;
+static ERL_NIF_TERM atom_remove;
+static ERL_NIF_TERM atom_discard;
+
+#ifdef HAVE_USE_LTTNG
+
+/* gc atoms */
+
+static ERL_NIF_TERM atom_gc_minor_start;
+static ERL_NIF_TERM atom_gc_minor_end;
+static ERL_NIF_TERM atom_gc_major_start;
+static ERL_NIF_TERM atom_gc_major_end;
+
+static ERL_NIF_TERM atom_old_heap_block_size; /* for debug */
+static ERL_NIF_TERM atom_heap_block_size; /* for debug */
+
+/* process 'procs' */
+
+static ERL_NIF_TERM atom_spawn;
+static ERL_NIF_TERM atom_exit;
+static ERL_NIF_TERM atom_register;
+static ERL_NIF_TERM atom_unregister;
+static ERL_NIF_TERM atom_link;
+static ERL_NIF_TERM atom_unlink;
+static ERL_NIF_TERM atom_getting_linked;
+static ERL_NIF_TERM atom_getting_unlinked;
+
+/* process 'running' and 'exiting' */
+
+static ERL_NIF_TERM atom_in;
+static ERL_NIF_TERM atom_out;
+static ERL_NIF_TERM atom_in_exiting;
+static ERL_NIF_TERM atom_out_exiting;
+static ERL_NIF_TERM atom_out_exited;
+
+/* process messages 'send' and 'receive' */
+
+static ERL_NIF_TERM atom_send;
+static ERL_NIF_TERM atom_receive;
+static ERL_NIF_TERM atom_send_to_non_existing_process;
+
+/* ports 'ports' */
+
+static ERL_NIF_TERM atom_open;
+static ERL_NIF_TERM atom_closed;
+
+/* 'call' */
+
+static ERL_NIF_TERM atom_call;
+static ERL_NIF_TERM atom_return_from;
+static ERL_NIF_TERM atom_return_to;
+static ERL_NIF_TERM atom_exception_from;
+#endif
+
static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
{
atom_true = enif_make_atom(env,"true");
atom_false = enif_make_atom(env,"false");
atom_error = enif_make_atom(env,"error");
+ atom_extra = enif_make_atom(env,"extra");
atom_not_available = enif_make_atom(env,"not_available");
atom_badarg = enif_make_atom(env,"badarg");
atom_ok = enif_make_atom(env,"ok");
+ atom_trace = enif_make_atom(env,"trace");
+ atom_seq_trace = enif_make_atom(env,"seq_trace");
+ atom_remove = enif_make_atom(env,"remove");
+ atom_discard = enif_make_atom(env,"discard");
+
+#ifdef HAVE_USE_LTTNG
+
+ /* gc */
+
+ atom_gc_minor_start = enif_make_atom(env,"gc_minor_start");
+ atom_gc_minor_end = enif_make_atom(env,"gc_minor_end");
+ atom_gc_major_start = enif_make_atom(env,"gc_major_start");
+ atom_gc_major_end = enif_make_atom(env,"gc_major_end");
+
+ atom_old_heap_block_size = enif_make_atom(env,"old_heap_block_size");
+ atom_heap_block_size = enif_make_atom(env,"heap_block_size");
+
+ /* process 'proc' */
+
+ atom_spawn = enif_make_atom(env,"spawn");
+ atom_exit = enif_make_atom(env,"exit");
+ atom_register = enif_make_atom(env,"register");
+ atom_unregister = enif_make_atom(env,"unregister");
+ atom_link = enif_make_atom(env,"link");
+ atom_unlink = enif_make_atom(env,"unlink");
+ atom_getting_unlinked = enif_make_atom(env,"getting_unlinked");
+ atom_getting_linked = enif_make_atom(env,"getting_linked");
+
+ /* process 'running' and 'exiting' */
+
+ atom_in = enif_make_atom(env,"in");
+ atom_out = enif_make_atom(env,"out");
+ atom_in_exiting = enif_make_atom(env,"in_exiting");
+ atom_out_exiting = enif_make_atom(env,"out_exiting");
+ atom_out_exited = enif_make_atom(env,"out_exited");
+
+ /* process messages 'send' and 'receive' */
+
+ atom_send = enif_make_atom(env,"send");
+ atom_receive = enif_make_atom(env,"receive");
+ atom_send_to_non_existing_process = enif_make_atom(env,"send_to_non_existing_process");
+
+ /* ports 'ports' */
+
+ atom_open = enif_make_atom(env,"open");
+ atom_closed = enif_make_atom(env,"closed");
+
+ /* 'call' */
+
+ atom_call = enif_make_atom(env,"call");
+ atom_return_from = enif_make_atom(env,"return_from");
+ atom_return_to = enif_make_atom(env,"return_to");
+ atom_exception_from = enif_make_atom(env,"exception_from");
+#endif
+
return 0;
}
@@ -123,3 +285,452 @@ static ERL_NIF_TERM user_trace_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
return atom_error;
#endif
}
+
+static ERL_NIF_TERM enabled(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+#ifdef HAVE_USE_LTTNG
+ ASSERT(argc == 3);
+ return atom_trace;
+#endif
+ return atom_remove;
+}
+
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ return atom_ok;
+}
+
+#ifdef HAVE_USE_LTTNG
+static ERL_NIF_TERM enabled_garbage_collection(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (argv[0] == atom_gc_minor_start && LTTNG_ENABLED(gc_minor_start)) {
+ return atom_trace;
+ } else if (argv[0] == atom_gc_minor_end && LTTNG_ENABLED(gc_minor_end)) {
+ return atom_trace;
+ } else if (argv[0] == atom_gc_major_start && LTTNG_ENABLED(gc_major_start)) {
+ return atom_trace;
+ } else if (argv[0] == atom_gc_major_end && LTTNG_ENABLED(gc_major_end)) {
+ return atom_trace;
+ }
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_garbage_collection(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ ERL_NIF_TERM gci, tup;
+ const ERL_NIF_TERM *vals;
+ int arity;
+ unsigned long ohbsz, nhbsz, size;
+
+ ASSERT(argc == 5);
+
+ /* Assume gc info order does not change */
+ gci = argv[3];
+
+ /* get reclaimed or need */
+ enif_get_list_cell(env, gci, &tup, &gci);
+ enif_get_tuple(env, tup, &arity, &vals);
+ ASSERT(arity == 2);
+ enif_get_ulong(env, vals[1], &size);
+
+ /* get old heap block size */
+ enif_get_list_cell(env, gci, &tup, &gci);
+ enif_get_tuple(env, tup, &arity, &vals);
+ ASSERT(arity == 2);
+ ASSERT(vals[0] == atom_old_heap_block_size);
+ enif_get_ulong(env, vals[1], &ohbsz);
+
+ /* get new heap block size */
+ enif_get_list_cell(env, gci, &tup, &gci);
+ enif_get_tuple(env, tup, &arity, &vals);
+ ASSERT(arity == 2);
+ ASSERT(vals[0] == atom_heap_block_size);
+ enif_get_ulong(env, vals[1], &nhbsz);
+
+ lttng_pid_to_str(argv[2], pid);
+
+ if (argv[0] == atom_gc_minor_start) {
+ LTTNG4(gc_minor_start, pid, size, nhbsz, ohbsz);
+ } else if (argv[0] == atom_gc_minor_end) {
+ LTTNG4(gc_minor_end, pid, size, nhbsz, ohbsz);
+ } else if (argv[0] == atom_gc_major_start) {
+ LTTNG4(gc_major_start, pid, size, nhbsz, ohbsz);
+ } else if (argv[0] == atom_gc_major_end) {
+ LTTNG4(gc_major_end, pid, size, nhbsz, ohbsz);
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_call(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (argv[0] == atom_call && LTTNG_ENABLED(function_call))
+ return atom_trace;
+ else if (argv[0] == atom_return_from && LTTNG_ENABLED(function_return))
+ return atom_trace;
+ else if (argv[0] == atom_exception_from && LTTNG_ENABLED(function_exception))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_call(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ unsigned int len;
+ char undef[] = "undefined";
+
+ lttng_pid_to_str(argv[2], pid);
+
+ if (argv[0] == atom_call) {
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ if (enif_is_list(env, tuple[2])) {
+ enif_get_list_length(env, tuple[2], &len);
+ } else {
+ enif_get_uint(env, tuple[2], &len);
+ }
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(function_call, pid, mfa, 0);
+ } else {
+ LTTNG3(function_call, pid, undef, 0);
+ }
+ } else if (argv[0] == atom_return_from) {
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ enif_get_uint(env, tuple[2], &len);
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(function_return, pid, mfa, 0);
+ } else {
+ LTTNG3(function_return, pid, undef, 0);
+ }
+ } else if (argv[0] == atom_return_to) {
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ enif_get_uint(env, tuple[2], &len);
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(function_return, pid, mfa, 0);
+ } else {
+ LTTNG3(function_return, pid, undef, 0);
+ }
+ } else if (argv[0] == atom_exception_from) {
+ const ERL_NIF_TERM* tuple;
+ ERL_NIF_TERM extra;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+ char class[LTTNG_BUFFER_SZ];
+
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+ enif_get_tuple(env, extra, &arity, &tuple);
+ enif_snprintf(class, LTTNG_BUFFER_SZ, "%T", tuple[0]);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ enif_get_uint(env, tuple[2], &len);
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(function_exception, pid, mfa, class);
+ } else {
+ LTTNG3(function_exception, pid, undef, class);
+ }
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_send(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+ if (LTTNG_ENABLED(message_send))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_send(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ERL_NIF_TERM extra;
+ lttng_decl_procbuf(pid);
+ lttng_pid_to_str(argv[2], pid);
+
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+
+ if (argv[0] == atom_send) {
+ lttng_decl_procbuf(to);
+ char msg[LTTNG_BUFFER_SZ];
+
+ lttng_pid_to_str(extra, to);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+
+ LTTNG3(message_send, pid, to, msg);
+ } else if (argv[0] == atom_send_to_non_existing_process) {
+ lttng_decl_procbuf(to);
+ char msg[LTTNG_BUFFER_SZ];
+
+ lttng_pid_to_str(extra, to);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ /* mark it as non existing ? */
+
+ LTTNG3(message_send, pid, to, msg);
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_receive(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ if (LTTNG_ENABLED(message_receive))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_receive(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ if (argv[0] == atom_receive) {
+ lttng_decl_procbuf(pid);
+ char msg[LTTNG_BUFFER_SZ];
+
+ lttng_pid_to_str(argv[2], pid);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+
+ LTTNG2(message_receive, pid, msg);
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_procs(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (argv[0] == atom_spawn && LTTNG_ENABLED(process_spawn)) {
+ return atom_trace;
+ } else if (argv[0] == atom_register && LTTNG_ENABLED(process_register)) {
+ return atom_trace;
+ } else if (argv[0] == atom_unregister && LTTNG_ENABLED(process_register)) {
+ return atom_trace;
+ } else if (argv[0] == atom_link && LTTNG_ENABLED(process_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_unlink && LTTNG_ENABLED(process_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_getting_linked && LTTNG_ENABLED(process_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_getting_unlinked && LTTNG_ENABLED(process_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_exit && LTTNG_ENABLED(process_exit)) {
+ return atom_trace;
+ }
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ lttng_decl_procbuf(to);
+
+ lttng_pid_to_str(argv[2], pid);
+
+ /* spawn */
+ if (argv[0] == atom_spawn) {
+ ERL_NIF_TERM extra;
+ char undef[] = "undefined";
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ unsigned int len;
+ lttng_decl_mfabuf(mfa);
+
+ lttng_pid_to_str(argv[3], to);
+
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+
+ if (enif_get_tuple(env, extra, &arity, &tuple)) {
+ if (enif_is_list(env, tuple[2])) {
+ enif_get_list_length(env, tuple[2], &len);
+ } else {
+ enif_get_uint(env, tuple[2], &len);
+ }
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(process_spawn, to, pid, mfa);
+ } else {
+ LTTNG3(process_spawn, to, pid, undef);
+ }
+
+ /* register */
+ } else if (argv[0] == atom_register) {
+ char name[LTTNG_BUFFER_SZ];
+ enif_snprintf(name, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ LTTNG3(process_register, pid, name, "register");
+ } else if (argv[0] == atom_unregister) {
+ char name[LTTNG_BUFFER_SZ];
+ enif_snprintf(name, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ LTTNG3(process_register, pid, name, "unregister");
+ /* link */
+ } else if (argv[0] == atom_link) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(process_link, pid, to, "link");
+ } else if (argv[0] == atom_unlink) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(process_link, pid, to, "unlink");
+ } else if (argv[0] == atom_getting_linked) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(process_link, to, pid, "link");
+ } else if (argv[0] == atom_getting_unlinked) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(process_link, to, pid, "unlink");
+ /* exit */
+ } else if (argv[0] == atom_exit) {
+ char reason[LTTNG_BUFFER_SZ];
+ enif_snprintf(reason, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ LTTNG2(process_exit, pid, reason);
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_ports(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (argv[0] == atom_open && LTTNG_ENABLED(port_open)) {
+ return atom_trace;
+ } else if (argv[0] == atom_link && LTTNG_ENABLED(port_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_unlink && LTTNG_ENABLED(port_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_getting_linked && LTTNG_ENABLED(port_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_getting_unlinked && LTTNG_ENABLED(port_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_closed && LTTNG_ENABLED(port_exit)) {
+ return atom_trace;
+ }
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_portbuf(port);
+ lttng_decl_procbuf(to);
+
+ lttng_portid_to_str(argv[2], port);
+
+ /* open and closed */
+ if (argv[0] == atom_open) {
+ ERL_NIF_TERM extra;
+ char driver[LTTNG_BUFFER_SZ];
+ lttng_decl_procbuf(pid);
+ lttng_pid_to_str(argv[3], pid);
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+
+ enif_snprintf(driver, LTTNG_BUFFER_SZ, "%T", extra);
+ LTTNG3(port_open, pid, driver, port);
+ } else if (argv[0] == atom_closed) {
+ char reason[LTTNG_BUFFER_SZ];
+ enif_snprintf(reason, LTTNG_BUFFER_SZ, "%T", argv[3]);
+
+ LTTNG2(port_exit, port, reason);
+ /* link */
+ } else if (argv[0] == atom_link) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(port_link, port, to, "link");
+ } else if (argv[0] == atom_unlink) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(port_link, port, to, "unlink");
+ } else if (argv[0] == atom_getting_linked) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(port_link, to, port, "link");
+ } else if (argv[0] == atom_getting_unlinked) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(port_link, to, port, "unlink");
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_running_procs(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (LTTNG_ENABLED(process_scheduled))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_running_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ const ERL_NIF_TERM* tuple;
+ char *mfastr = "undefined";
+ int arity;
+ lttng_decl_mfabuf(mfa);
+
+ lttng_pid_to_str(argv[2], pid);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ int val;
+ enif_get_int(env, tuple[2], &val);
+ lttng_mfa_to_str(tuple[0], tuple[1], val, mfa);
+ mfastr = mfa;
+ }
+ /* running processes */
+ if (argv[0] == atom_in) {
+ LTTNG3(process_scheduled, pid, mfastr, "in");
+ } else if (argv[0] == atom_out) {
+ LTTNG3(process_scheduled, pid, mfastr, "out");
+ /* exiting */
+ } else if (argv[0] == atom_in_exiting) {
+ LTTNG3(process_scheduled, pid, mfastr, "in_exiting");
+ } else if (argv[0] == atom_out_exiting) {
+ LTTNG3(process_scheduled, pid, mfastr, "out_exiting");
+ } else if (argv[0] == atom_out_exited) {
+ LTTNG3(process_scheduled, pid, mfastr, "out_exited");
+ }
+
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_running_ports(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (LTTNG_ENABLED(port_scheduled))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_running_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ lttng_decl_mfabuf(where);
+
+ lttng_portid_to_str(argv[2], pid);
+ enif_snprintf(where, LTTNG_BUFFER_SZ, "%T", argv[3]);
+
+ /* running ports */
+ if (argv[0] == atom_in) {
+ LTTNG3(port_scheduled, pid, where, "in");
+ } else if (argv[0] == atom_out) {
+ LTTNG3(port_scheduled, pid, where, "out");
+ /* exiting */
+ } else if (argv[0] == atom_in_exiting) {
+ LTTNG3(port_scheduled, pid, where, "in_exiting");
+ } else if (argv[0] == atom_out_exiting) {
+ LTTNG3(port_scheduled, pid, where, "out_exiting");
+ } else if (argv[0] == atom_out_exited) {
+ LTTNG3(port_scheduled, pid, where, "out_exited");
+ }
+ return atom_ok;
+}
+#endif
diff --git a/lib/runtime_tools/c_src/dyntrace_lttng.h b/lib/runtime_tools/c_src/dyntrace_lttng.h
new file mode 100644
index 0000000000..5e838892d6
--- /dev/null
+++ b/lib/runtime_tools/c_src/dyntrace_lttng.h
@@ -0,0 +1,367 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2016. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#undef TRACEPOINT_PROVIDER
+#define TRACEPOINT_PROVIDER org_erlang_dyntrace
+
+#if !defined(DYNTRACE_LTTNG_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define DYNTRACE_LTTNG_H
+
+#include <lttng/tracepoint.h>
+
+#define LTTNG1(Name, Arg1) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1))
+
+#define LTTNG2(Name, Arg1, Arg2) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2))
+
+#define LTTNG3(Name, Arg1, Arg2, Arg3) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3))
+
+#define LTTNG4(Name, Arg1, Arg2, Arg3, Arg4) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4))
+
+#define LTTNG5(Name, Arg1, Arg2, Arg3, Arg4, Arg5) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
+
+#define LTTNG_ENABLED(Name) \
+ tracepoint_enabled(org_erlang_dyntrace, Name)
+
+#define LTTNG_BUFFER_SZ (256)
+#define LTTNG_PROC_BUFFER_SZ (16)
+#define LTTNG_PORT_BUFFER_SZ (20)
+#define LTTNG_MFA_BUFFER_SZ (256)
+
+#define lttng_decl_procbuf(Name) \
+ char Name[LTTNG_PROC_BUFFER_SZ]
+
+#define lttng_decl_portbuf(Name) \
+ char Name[LTTNG_PORT_BUFFER_SZ]
+
+#define lttng_decl_mfabuf(Name) \
+ char Name[LTTNG_MFA_BUFFER_SZ]
+
+#define lttng_pid_to_str(pid, name) \
+ enif_snprintf(name, LTTNG_PROC_BUFFER_SZ, "%T", (pid))
+
+#define lttng_portid_to_str(pid, name) \
+ enif_snprintf(name, LTTNG_PORT_BUFFER_SZ, "%T", (pid))
+
+#define lttng_proc_to_str(p, name) \
+ lttng_pid_to_str(((p) ? (p)->common.id : ERTS_INVALID_PID), name)
+
+#define lttng_port_to_str(p, name) \
+ lttng_portid_to_str(((p) ? (p)->common.id : ERTS_INVALID_PORT), name)
+
+#define lttng_mfa_to_str(m,f,a, Name) \
+ enif_snprintf(Name, LTTNG_MFA_BUFFER_SZ, "%T:%T/%lu", (Eterm)(m), (Eterm)(f), (Uint)(a))
+
+/* Process scheduling */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_spawn,
+ TP_ARGS(
+ char*, p,
+ char*, parent,
+ char*, mfa
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(parent, parent)
+ ctf_string(entry, mfa)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_link,
+ TP_ARGS(
+ char*, from,
+ char*, to,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(from, from)
+ ctf_string(to, to)
+ ctf_string(type, type)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_exit,
+ TP_ARGS(
+ char*, p,
+ char*, reason
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(reason, reason)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_register,
+ TP_ARGS(
+ char*, pid,
+ char*, name,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(name, name)
+ ctf_string(type, type)
+ )
+)
+
+/* Scheduled */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_scheduled,
+ TP_ARGS(
+ char*, p,
+ char*, mfa,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(entry, mfa)
+ ctf_string(type, type)
+ )
+)
+
+/* Ports */
+
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ port_open,
+ TP_ARGS(
+ char*, pid,
+ char*, driver,
+ char*, port
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(driver, driver)
+ ctf_string(port, port)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ port_exit,
+ TP_ARGS(
+ char*, port,
+ char*, reason
+ ),
+ TP_FIELDS(
+ ctf_string(port, port)
+ ctf_string(reason, reason)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ port_link,
+ TP_ARGS(
+ char*, from,
+ char*, to,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(from, from)
+ ctf_string(to, to)
+ ctf_string(type, type)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ port_scheduled,
+ TP_ARGS(
+ char*, p,
+ char*, op,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(entry, op)
+ ctf_string(type, type)
+ )
+)
+
+/* Call tracing */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ function_call,
+ TP_ARGS(
+ char*, pid,
+ char*, mfa,
+ unsigned int, depth
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(entry, mfa)
+ ctf_integer(unsigned int, depth, depth)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ function_return,
+ TP_ARGS(
+ char*, pid,
+ char*, mfa,
+ unsigned int, depth
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(entry, mfa)
+ ctf_integer(unsigned int, depth, depth)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ function_exception,
+ TP_ARGS(
+ char*, pid,
+ char*, mfa,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(entry, mfa)
+ ctf_string(class, type)
+ )
+)
+
+/* Process messages */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ message_send,
+ TP_ARGS(
+ char*, sender,
+ char*, receiver,
+ char*, msg
+ ),
+ TP_FIELDS(
+ ctf_string(from, sender)
+ ctf_string(to, receiver)
+ ctf_string(message, msg)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ message_receive,
+ TP_ARGS(
+ char*, receiver,
+ char*, msg
+ ),
+ TP_FIELDS(
+ ctf_string(to, receiver)
+ ctf_string(message, msg)
+ )
+)
+
+/* Process Memory */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ gc_minor_start,
+ TP_ARGS(
+ char*, p,
+ unsigned long, need,
+ unsigned long, nh,
+ unsigned long, oh
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_integer(unsigned long, need, need)
+ ctf_integer(unsigned long, heap, nh)
+ ctf_integer(unsigned long, old_heap, oh)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ gc_minor_end,
+ TP_ARGS(
+ char*, p,
+ unsigned long, reclaimed,
+ unsigned long, nh,
+ unsigned long, oh
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_integer(unsigned long, reclaimed, reclaimed)
+ ctf_integer(unsigned long, heap, nh)
+ ctf_integer(unsigned long, old_heap, oh)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ gc_major_start,
+ TP_ARGS(
+ char*, p,
+ unsigned long, need,
+ unsigned long, nh,
+ unsigned long, oh
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_integer(unsigned long, need, need)
+ ctf_integer(unsigned long, heap, nh)
+ ctf_integer(unsigned long, old_heap, oh)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ gc_major_end,
+ TP_ARGS(
+ char*, p,
+ unsigned long, reclaimed,
+ unsigned long, nh,
+ unsigned long, oh
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_integer(unsigned long, reclaimed, reclaimed)
+ ctf_integer(unsigned long, heap, nh)
+ ctf_integer(unsigned long, old_heap, oh)
+ )
+)
+
+#endif /* DYNTRACE_LTTNG_H */
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "./dyntrace_lttng.h"
+
+/* This part must be outside protection */
+#include <lttng/tracepoint-event.h>
diff --git a/lib/runtime_tools/c_src/trace_file_drv.c b/lib/runtime_tools/c_src/trace_file_drv.c
index 8863b0d6ac..e7fd5968c1 100644
--- a/lib/runtime_tools/c_src/trace_file_drv.c
+++ b/lib/runtime_tools/c_src/trace_file_drv.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -172,6 +172,7 @@ static ErlDrvData trace_file_start(ErlDrvPort port, char *buff);
static void trace_file_stop(ErlDrvData handle);
static void trace_file_output(ErlDrvData handle, char *buff,
ErlDrvSizeT bufflen);
+static void trace_file_outputv(ErlDrvData handle, ErlIOVec *ev);
static void trace_file_finish(void);
static ErlDrvSSizeT trace_file_control(ErlDrvData handle,
unsigned int command,
@@ -214,7 +215,7 @@ ErlDrvEntry trace_file_driver_entry = {
NULL, /* void * that is not used (BC) */
trace_file_control, /* F_PTR control, port_control callback */
trace_file_timeout, /* F_PTR timeout, driver_set_timer callback */
- NULL, /* F_PTR outputv, reserved */
+ trace_file_outputv, /* F_PTR outputv, reserved */
NULL, /* ready_async */
NULL, /* flush */
NULL, /* call */
@@ -363,6 +364,16 @@ static void trace_file_stop(ErlDrvData handle)
/*
** Data sent from erlang to port.
*/
+static void trace_file_outputv(ErlDrvData handle, ErlIOVec *ev)
+{
+ int i;
+ for (i = 0; i < ev->vsize; i++) {
+ if (ev->iov[i].iov_len)
+ trace_file_output(handle, ev->iov[i].iov_base,
+ ev->iov[i].iov_len);
+ }
+}
+
static void trace_file_output(ErlDrvData handle, char *buff,
ErlDrvSizeT bufflen)
{
diff --git a/lib/runtime_tools/c_src/trace_ip_drv.c b/lib/runtime_tools/c_src/trace_ip_drv.c
index 5b43f8179e..195558f958 100644
--- a/lib/runtime_tools/c_src/trace_ip_drv.c
+++ b/lib/runtime_tools/c_src/trace_ip_drv.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2012. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -374,6 +374,7 @@ static void trace_ip_output(ErlDrvData handle, char *buff, ErlDrvSizeT bufflen)
}
return;
}
+ ASSERT(!IS_INVALID_SOCKET(data->fd));
if (data->que[data->questart] != NULL) {
trace_ip_ready_output(handle, sock2event(data->fd));
}
@@ -412,6 +413,7 @@ static void trace_ip_ready_input(ErlDrvData handle, ErlDrvEvent fd)
/*
** Maybe accept, we are a listen port...
*/
+ ASSERT(IS_INVALID_SOCKET(data->fd));
if (!IS_INVALID_SOCKET((client = my_accept(data->listenfd)))) {
data->fd = client;
set_nonblocking(client);
@@ -735,6 +737,7 @@ static void close_client(TraceIpData *data)
{
my_driver_select(data, data->fd, FLAG_WRITE | FLAG_READ, SELECT_CLOSE);
data->flags |= FLAG_LISTEN_PORT;
+ data->fd = INVALID_SOCKET;
if (!(data->flags & FLAG_FILL_ALWAYS)) {
clean_que(data);
}
diff --git a/lib/runtime_tools/doc/src/LTTng.xml b/lib/runtime_tools/doc/src/LTTng.xml
new file mode 100644
index 0000000000..82a4c79379
--- /dev/null
+++ b/lib/runtime_tools/doc/src/LTTng.xml
@@ -0,0 +1,595 @@
+<?xml version="1.0" encoding="utf8" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+<chapter>
+ <header>
+ <copyright>
+ <year>2016</year><year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ </legalnotice>
+
+ <title>LTTng and Erlang/OTP</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>2016-04-27</date>
+ <rev></rev>
+ <file>LTTng.xml</file>
+ </header>
+
+ <section>
+ <title>Introduction</title>
+ <p>The Linux Trace Toolkit: next generation is an open source system software package
+ for correlated tracing of the Linux kernel, user applications and libraries. </p>
+ <p>For more information, please visit <url href="http://lttng.org">http://lttng.org</url></p>
+ </section>
+
+ <section>
+ <title>Building Erlang/OTP with LTTng support</title>
+ <p>
+ Configure and build Erlang with LTTng support:
+ </p>
+ <p>For LTTng to work properly with Erlang/OTP you need
+ the following packages installed:</p>
+
+ <list type="bulleted">
+ <item><p>LTTng-tools: a command line interface to control tracing sessions.</p></item>
+ <item><p>LTTng-UST: user space tracing library.</p></item>
+ </list>
+
+ <p>On Ubuntu this can be installed via <c>aptitude</c>:</p>
+
+ <code type="none">$ sudo aptitude install lttng-tools liblttng-ust-dev</code>
+ <p>See <url href="http://lttng.org/docs/#doc-installing-lttng">Installing LTTng</url>
+ for more information on how to install LTTng on your system.</p>
+
+ <p>After LTTng is properly installed on the system Erlang/OTP can be built with LTTng support.</p>
+
+
+<code type="none">$ ./configure --with-dynamic-trace=lttng
+$ make </code>
+ </section>
+
+ <section>
+ <title>Dyntrace Tracepoints</title>
+ <p>All tracepoints are in the domain of <c>org_erlang_dyntrace</c></p>
+ <p>All Erlang types are the string equivalent in LTTng.</p>
+
+ <p><em>process_spawn</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>parent : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">process_spawn: { cpu_id = 3 }, { pid = "&lt;0.131.0&gt;", parent = "&lt;0.130.0&gt;", entry = "erlang:apply/2" }</code>
+
+ <p><em>process_link</em></p>
+ <list type="bulleted">
+ <item><c>to : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>from : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>type : string</c> :: <c>"link" | "unlink"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">process_link: { cpu_id = 3 }, { from = "&lt;0.130.0&gt;", to = "&lt;0.131.0&gt;", type = "link" }</code>
+
+
+ <p><em>process_exit</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>reason : string</c> :: Exit reason. Ex. <c>"normal"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">process_exit: { cpu_id = 3 }, { pid = "&lt;0.130.0&gt;", reason = "normal" }</code>
+
+ <p><em>process_register</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>name : string</c> :: Registered name. Ex. <c>"error_logger"</c></item>
+ <item><c>type : string</c> :: <c>"register" | "unregister"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">process_register: { cpu_id = 0 }, { pid = "&lt;0.128.0&gt;", name = "dyntrace_lttng_SUITE" type = "register" }</code>
+
+ <p><em>process_scheduled</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ <item><c>type : string</c> :: <c>"in" | "out" | "in_exiting" | "out_exiting" | "out_exited"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">process_scheduled: { cpu_id = 0 }, { pid = "&lt;0.136.0&gt;", entry = "erlang:apply/2", type = "in" }</code>
+
+
+ <p><em>port_open</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">port_open: { cpu_id = 5 }, { pid = "&lt;0.131.0&gt;", driver = "'/bin/sh -s unix:cmd'", port = "#Port&lt;0.1887&gt;" }</code>
+
+ <p><em>port_exit</em></p>
+ <list type="bulleted">
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>reason : string</c> :: Exit reason. Ex. <c>"normal"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">port_exit: { cpu_id = 5 }, { port = "#Port&lt;0.1887&gt;", reason = "normal" }</code>
+
+ <p><em>port_link</em></p>
+ <list type="bulleted">
+ <item><c>to : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>from : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>type : string</c> :: <c>"link" | "unlink"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">port_link: { cpu_id = 5 }, { from = "#Port&lt;0.1887&gt;", to = "&lt;0.131.0&gt;", type = "unlink" }</code>
+
+ <p><em>port_scheduled</em></p>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <list type="bulleted">
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>entry : string</c> :: Callback. Ex. <c>"open"</c></item>
+ <item><c>type : string</c> :: <c>"in" | "out" | "in_exiting" | "out_exiting" | "out_exited"</c></item>
+ </list>
+
+ <p>Example:</p>
+ <code type="none">port_scheduled: { cpu_id = 5 }, { pid = "#Port&lt;0.1905&gt;", entry = "close", type = "out" }</code>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p><em>function_call</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ <item><c>depth : integer</c> :: Stack depth. Ex. <c>0</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">function_call: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }</code>
+
+ <p><em>function_return</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ <item><c>depth : integer</c> :: Stack depth. Ex. <c>0</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> or <c>return_to</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">function_return: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }</code>
+
+ <p><em>function_exception</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ <item><c>class : string</c> :: Error reason. Ex. <c>"error"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">function_exception: { cpu_id = 5 }, { pid = "&lt;0.144.0&gt;", entry = "t:call_exc/1", class = "error" }</code>
+
+ <p><em>message_send</em></p>
+ <list type="bulleted">
+ <item><c>from : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>to : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>message : string</c> :: Message sent. Ex. <c>"{&lt;0.162.0&gt;,ok}"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>send</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">message_send: { cpu_id = 3 }, { from = "#Port&lt;0.1938&gt;", to = "&lt;0.160.0&gt;", message = "{#Port&lt;0.1938&gt;,eof}" }</code>
+
+ <p><em>message_receive</em></p>
+ <list type="bulleted">
+ <item><c>to : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>message : string</c> :: Message received. Ex. <c>"{&lt;0.162.0&gt;,ok}"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>'receive'</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">message_receive: { cpu_id = 7 }, { to = "&lt;0.167.0&gt;", message = "{&lt;0.165.0&gt;,ok}" }</code>
+
+ <p><em>gc_minor_start</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>need : integer</c> :: Heap need. Ex. <c>2</c></item>
+ <item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
+ <item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">gc_minor_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 0, heap = 610, old_heap = 0 }</code>
+
+ <p><em>gc_minor_end</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>reclaimed : integer</c> :: Heap reclaimed. Ex. <c>2</c></item>
+ <item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
+ <item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">gc_minor_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 120, heap = 1598, old_heap = 1598 }</code>
+
+ <p><em>gc_major_start</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>need : integer</c> :: Heap need. Ex. <c>2</c></item>
+ <item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
+ <item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">gc_major_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 8, heap = 2586, old_heap = 1598 }</code>
+
+ <p><em>gc_major_end</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>reclaimed : integer</c> :: Heap reclaimed. Ex. <c>2</c></item>
+ <item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
+ <item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">gc_major_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 240, heap = 4185, old_heap = 0 }</code>
+
+ </section>
+
+ <section>
+ <title>BEAM Tracepoints</title>
+ <p>All tracepoints are in the domain of <c>org_erlang_otp</c></p>
+ <p>All Erlang types are the string equivalent in LTTng.</p>
+
+ <p><em>scheduler_poll</em></p>
+ <list type="bulleted">
+ <item><c>scheduler : integer</c> :: Scheduler ID. Ex. <c>1</c></item>
+ <item><c>runnable : integer</c> :: Runnable. Ex. <c>1</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }</code>
+
+ <p><em>driver_init</em></p>
+ <list type="bulleted">
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>major : integer</c> :: Major version. Ex. <c>3</c></item>
+ <item><c>minor : integer</c> :: Minor version. Ex. <c>1</c></item>
+ <item><c>flags : integer</c> :: Flags. Ex. <c>1</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_init: { cpu_id = 2 }, { driver = "caller_drv", major = 3, minor = 3, flags = 1 }</code>
+
+ <p><em>driver_start</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_start: { cpu_id = 2 }, { pid = "&lt;0.198.0&gt;", driver = "caller_drv", port = "#Port&lt;0.3676&gt;" }</code>
+
+ <p><em>driver_output</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_output: { cpu_id = 2 }, { pid = "&lt;0.198.0&gt;", port = "#Port&lt;0.3677&gt;", driver = "/bin/sh -s unix:cmd", bytes = 36 }</code>
+
+ <p><em>driver_outputv</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_outputv: { cpu_id = 5 }, { pid = "&lt;0.194.0&gt;", port = "#Port&lt;0.3663&gt;", driver = "tcp_inet", bytes = 3 }</code>
+
+ <p><em>driver_ready_input</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_ready_input: { cpu_id = 5 }, { pid = "&lt;0.189.0&gt;", port = "#Port&lt;0.3637&gt;", driver = "inet_gethost 4 " }</code>
+
+ <p><em>driver_ready_output</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_ready_output: { cpu_id = 5 }, { pid = "&lt;0.194.0&gt;", port = "#Port&lt;0.3663&gt;", driver = "tcp_inet" }</code>
+
+ <p><em>driver_timeout</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_timeout: { cpu_id = 5 }, { pid = "&lt;0.196.0&gt;", port = "#Port&lt;0.3664&gt;", driver = "tcp_inet" }</code>
+
+ <p><em>driver_stop_select</em></p>
+ <list type="bulleted">
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_stop_select: { cpu_id = 5 }, { driver = "unknown" }</code>
+
+ <p><em>driver_flush</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_flush: { cpu_id = 7 }, { pid = "&lt;0.204.0&gt;", port = "#Port&lt;0.3686&gt;", driver = "tcp_inet" }</code>
+
+ <p><em>driver_stop</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_stop: { cpu_id = 5 }, { pid = "[]", port = "#Port&lt;0.3673&gt;", driver = "efile" }</code>
+
+ <p><em>driver_process_exit</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+
+ <p><em>driver_ready_async</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_ready_async: { cpu_id = 3 }, { pid = "&lt;0.181.0&gt;", port = "#Port&lt;0.3622&gt;", driver = "efile" }</code>
+
+ <p><em>driver_call</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>command : integer</c> :: Command integer. Ex. <c>1</c></item>
+ <item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_call: { cpu_id = 2 }, { pid = "&lt;0.202.0&gt;", port = "#Port&lt;0.3676&gt;", driver = "caller_drv", command = 0, bytes = 2 }</code>
+
+ <p><em>driver_control</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>command : integer</c> :: Command integer. Ex. <c>1</c></item>
+ <item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_control: { cpu_id = 3 }, { pid = "&lt;0.32767.8191&gt;", port = "#Port&lt;0.0&gt;", driver = "forker", command = 83, bytes = 32 }</code>
+
+ <p><em>aio_pool_get</em></p>
+ <list type="bulleted">
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>length : integer</c> :: Async queue length. Ex. <c>0</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">aio_pool_get: { cpu_id = 4 }, { port = "#Port&lt;0.3614&gt;", length = 0 }</code>
+
+ <p><em>aio_pool_put</em></p>
+ <list type="bulleted">
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>length : integer</c> :: Async queue length. Ex. <c>-1</c></item>
+ </list>
+ <p>Async queue length is not defined for <c>put</c> operations.</p>
+ <p>Example:</p>
+ <code type="none">aio_pool_put: { cpu_id = 3 }, { port = "#Port&lt;0.3614&gt;", length = -1 }</code>
+
+ <p><em>carrier_create</em></p>
+ <list type="bulleted">
+ <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
+ <item><c>instance : integer</c> :: Allocator instance. Ex. <c>1</c></item>
+ <item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
+ <item><c>mbc_carriers : integer</c> :: Number of multiblock carriers in instance. Ex. <c>3</c></item>
+ <item><c>mbc_carriers_size : integer</c> :: Total size of multiblock blocks carriers in instance. Ex. <c>1343488</c></item>
+ <item><c>mbc_blocks : integer</c> :: Number of multiblock blocks in instance. Ex. <c>122</c></item>
+ <item><c>mbc_blocks_size : integer</c> :: Total size of all multiblock blocks in instance. Ex. <c>285296</c></item>
+ <item><c>sbc_carriers : integer</c> :: Number of singleblock carriers in instance. Ex. <c>1</c></item>
+ <item><c>sbc_carriers_size : integer</c> :: Total size of singleblock blocks carriers in instance. Ex. <c>1343488</c></item>
+ <item><c>sbc_blocks : integer</c> :: Number of singleblocks in instance. Ex. <c>1</c></item>
+ <item><c>sbc_blocks_size : integer</c> :: Total size of all singleblock blocks in instance. Ex. <c>285296</c></item>
+
+ </list>
+ <p>Example:</p>
+ <code type="none">carrier_create: { cpu_id = 2 }, { type = "ets_alloc", instance = 7, size = 2097152, mbc_carriers = 4, mbc_carriers_size = 3440640, mbc_blocks = 526, mbc_blocks_size = 1278576, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }</code>
+
+ <p><em>carrier_destroy</em></p>
+ <list type="bulleted">
+ <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
+ <item><c>instance : integer</c> :: Allocator instance. Ex. <c>1</c></item>
+ <item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
+ <item><c>mbc_carriers : integer</c> :: Number of multiblock carriers in instance. Ex. <c>3</c></item>
+ <item><c>mbc_carriers_size : integer</c> :: Total size of multiblock blocks carriers in instance. Ex. <c>1343488</c></item>
+ <item><c>mbc_blocks : integer</c> :: Number of multiblock blocks in instance. Ex. <c>122</c></item>
+ <item><c>mbc_blocks_size : integer</c> :: Total size of all multiblock blocks in instance. Ex. <c>285296</c></item>
+ <item><c>sbc_carriers : integer</c> :: Number of singleblock carriers in instance. Ex. <c>1</c></item>
+ <item><c>sbc_carriers_size : integer</c> :: Total size of singleblock blocks carriers in instance. Ex. <c>1343488</c></item>
+ <item><c>sbc_blocks : integer</c> :: Number of singleblocks in instance. Ex. <c>1</c></item>
+ <item><c>sbc_blocks_size : integer</c> :: Total size of all singleblock blocks in instance. Ex. <c>285296</c></item>
+
+ </list>
+ <p>Example:</p>
+ <code type="none">carrier_destroy: { cpu_id = 6 }, { type = "ets_alloc", instance = 7, size = 262144, mbc_carriers = 3, mbc_carriers_size = 3178496, mbc_blocks = 925, mbc_blocks_size = 2305336, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }</code>
+
+ <p><em>carrier_pool_put</em></p>
+ <list type="bulleted">
+ <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
+ <item><c>instance : integer</c> :: Allocator instance. Ex. <c>1</c></item>
+ <item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">carrier_pool_put: { cpu_id = 3 }, { type = "ets_alloc", instance = 5, size = 1048576 }</code>
+
+ <p><em>carrier_pool_get</em></p>
+ <list type="bulleted">
+ <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
+ <item><c>instance : integer</c> :: Allocator instance. Ex. <c>1</c></item>
+ <item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">carrier_pool_get: { cpu_id = 7 }, { type = "ets_alloc", instance = 4, size = 3208 }</code>
+ </section>
+
+ <section>
+ <title>Example of process tracing</title>
+ <p>An example of process tracing of <c>os_mon</c> and friends.</p>
+
+ <p>Clean start of lttng in a bash shell.</p>
+
+ <pre>$ lttng create erlang-demo
+Spawning a session daemon
+Session erlang-demo created.
+Traces will be written in /home/egil/lttng-traces/erlang-demo-20160526-165920</pre>
+
+ <p>Start an Erlang node with lttng enabled.</p>
+
+ <pre>$ erl
+Erlang/OTP 19 [erts-8.0] [source-4d7b24d] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [lttng]
+
+Eshell V8.0 (abort with ^G)
+1></pre>
+
+ <p>Load the <c>dyntrace</c> module.</p>
+
+ <pre>1> <input>l(dyntrace).</input>
+{module,dyntrace}</pre>
+
+ <p>All tracepoints via dyntrace are now visibile and can be listed through <c>lttng list -u</c>.</p>
+
+ <p>Enable the process_register LTTng tracepoint for Erlang.</p>
+
+ <pre>$ lttng enable-event -u org_erlang_dyntrace:process_register
+UST event org_erlang_dyntrace:process_register created in channel channel0</pre>
+
+ <p>Enable process tracing for new processes and use <c>dyntrace</c> as tracer backend.</p>
+
+ <pre>2> <input>erlang:trace(new,true,[procs,{tracer,dyntrace,[]}]).</input>
+0</pre>
+
+ <p>Start LTTng tracing.</p>
+
+ <pre>$ lttng start
+Tracing started for session erlang-demo</pre>
+
+ <p>Start the <c>os_mon</c> application in Erlang.</p>
+
+ <pre>3> <input>application:ensure_all_started(os_mon).</input>
+{ok,[sasl,os_mon]}</pre>
+
+ <p>Stop LTTng tracing and view the result.</p>
+
+ <pre>$ lttng stop
+Tracing stopped for session erlang-demo
+$ lttng view
+[17:20:42.561168759] (+?.?????????) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.66.0&gt;", name = "sasl_sup", type = "register" }
+[17:20:42.561215519] (+0.000046760) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.67.0&gt;", name = "sasl_safe_sup", type = "register" }
+[17:20:42.562149024] (+0.000933505) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.68.0&gt;", name = "alarm_handler", type = "register" }
+[17:20:42.571035803] (+0.008886779) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.69.0&gt;", name = "release_handler", type = "register" }
+[17:20:42.574939868] (+0.003904065) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.74.0&gt;", name = "os_mon_sup", type = "register" }
+[17:20:42.576818712] (+0.001878844) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.75.0&gt;", name = "disksup", type = "register" }
+[17:20:42.580032013] (+0.003213301) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.76.0&gt;", name = "memsup", type = "register" }
+[17:20:42.583046339] (+0.003014326) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.78.0&gt;", name = "cpu_sup", type = "register" }
+[17:20:42.586206242] (+0.003159903) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.82.0&gt;", name = "timer_server", type = "register" }</pre>
+ </section>
+</chapter>
diff --git a/lib/runtime_tools/doc/src/Makefile b/lib/runtime_tools/doc/src/Makefile
index 0292333f0a..5ce40bb995 100644
--- a/lib/runtime_tools/doc/src/Makefile
+++ b/lib/runtime_tools/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -41,11 +41,11 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# Target Specs
# ----------------------------------------------------
XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = dbg.xml dyntrace.xml erts_alloc_config.xml system_information.xml
+XML_REF3_FILES = dbg.xml dyntrace.xml erts_alloc_config.xml system_information.xml msacc.xml
XML_REF6_FILES = runtime_tools_app.xml
XML_PART_FILES = part_notes.xml part_notes_history.xml part.xml
-XML_CHAPTER_FILES = notes.xml notes_history.xml
+XML_CHAPTER_FILES = notes.xml notes_history.xml LTTng.xml
GENERATED_XML_FILES = DTRACE.xml SYSTEMTAP.xml
diff --git a/lib/runtime_tools/doc/src/book.xml b/lib/runtime_tools/doc/src/book.xml
index 0e75ec28bb..e2ab4c6f62 100644
--- a/lib/runtime_tools/doc/src/book.xml
+++ b/lib/runtime_tools/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml
index 2065627026..14a81b2293 100644
--- a/lib/runtime_tools/doc/src/dbg.xml
+++ b/lib/runtime_tools/doc/src/dbg.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -36,14 +36,30 @@
<modulesummary>The Text Based Trace Facility</modulesummary>
<description>
<p>This module implements a text based interface to the
- <c>trace/3</c> and the <c>trace_pattern/2</c> BIFs. It makes it
- possible to trace functions, processes and messages on text based
- terminals. It can be used instead of, or as complement to, the
- <c>pman</c> module.
- </p>
- <p>For some examples of how to use <c>dbg</c> from the Erlang
+ <seealso marker="erts:erlang#trace-3"><c>trace/3</c></seealso> and the
+ <seealso marker="erts:erlang#trace_pattern-2"><c>trace_pattern/2</c></seealso> BIFs. It makes it
+ possible to trace functions, processes, ports and messages.
+ </p>
+ <p>
+ To quickly get started on tracing function calls you can use the following
+ code in the Erlang shell:
+ </p>
+ <pre>
+1> dbg:tracer(). %% Start the default trace message receiver
+{ok,&lt;0.36.0>}
+2> dbg:p(all, c). %% Setup call (c) tracing on all processes
+{ok,[{matched,nonode@nohost,26}]}
+3> dbg:tp(lists, seq, x). %% Setup an exception return trace (x) on lists:seq
+{ok,[{matched,nonode@nohost,2},{saved,x}]}
+4> lists:seq(1,10).
+(&lt;0.34.0>) call lists:seq(1,10)
+(&lt;0.34.0>) returned from lists:seq/2 -> [1,2,3,4,5,6,7,8,9,10]
+[1,2,3,4,5,6,7,8,9,10]
+ </pre>
+ <p>
+ For more examples of how to use <c>dbg</c> from the Erlang
shell, see the <seealso marker="#simple_example">simple example</seealso> section.
- </p>
+ </p>
<p>The utilities are also suitable to use in system testing on
large systems, where other tools have too much impact on the
system performance. Some primitive support for sequential tracing
@@ -164,53 +180,67 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>Traces <c>Item</c> in accordance to the value specified
by <c>Flags</c>. The variation of <c>Item</c> is listed below:</p>
- <list type="bulleted">
- <item>If the <c>Item</c> is a <c>pid()</c>, the corresponding
- process is traced. The process may be a remote process
- (on another Erlang node). The node must be in the list of
- traced nodes (see <seealso marker="#n"><c>n/1</c></seealso> and
- <c>tracer/0/2/3</c>).</item>
- <item>If the <c>Item</c> is the atom <c>all</c>, all processes in the
- system as well as all processes created hereafter are
- to be traced. This also affects all nodes added with the
- <c>n/1</c> or <c>tracer/0/2/3</c> function.</item>
- <item>If the <c>Item</c> is the atom <c>new</c>, no currently existing
- processes are affected, but every process created after the
- call is.This also affects all nodes added with the
- <c>n/1</c> or <c>tracer/0/2/3</c> function.</item>
- <item>If the <c>Item</c> is the atom <c>existing</c>, all
- existing processes are traced, but new processes will not
- be affected.This also affects all nodes added with the
- <c>n/1</c> or <c>tracer/0/2/3</c> function.</item>
- <item>If the <c>Item</c> is an atom other than <c>all</c>,
- <c>new</c> or <c>existing</c>, the process with the
- corresponding registered name is traced.The process may be a
- remote process (on another Erlang node). The node must be added
- with the <c>n/1</c> or <c>tracer/0/2/3</c> function.</item>
- <item>If the <c>Item</c> is an integer, the process <c><![CDATA[<0.Item.0>]]></c> is
- traced.</item>
- <item>If the <c>Item</c> is a tuple <c>{X, Y, Z}</c>, the
- process <c><![CDATA[<X.Y.Z>]]></c> is
- traced. </item>
- <item>If the <c>Item</c> is a string <![CDATA["<X.Y.Z>"]]>
- as returned from <c>pid_to_list/1</c>, the process
- <c><![CDATA[<X.Y.Z>]]></c> is traced. </item>
- </list>
+ <taglist>
+ <tag><c>pid()</c> or <c>port()</c></tag>
+ <item>The corresponding process or port is traced. The process or port may
+ be a remote process or port (on another Erlang node). The node must
+ be in the list of traced nodes (see <seealso marker="#n-1"><c>n/1</c></seealso>
+ and <seealso marker="#tracer-3"><c>tracer/3</c></seealso>).</item>
+ <tag><c>all</c></tag>
+ <item>All processes and ports in the system as well as all processes and ports
+ created hereafter are to be traced.</item>
+ <tag><c>processes</c></tag>
+ <item>All processes in the system as well as all processes created hereafter are to be traced.</item>
+ <tag><c>ports</c></tag>
+ <item>All ports in the system as well as all ports created hereafter are to be traced.</item>
+ <tag><c>new</c></tag>
+ <item>All processes and ports created after the call is are to be traced.</item>
+ <tag><c>new_processes</c></tag>
+ <item>All processes created after the call is are to be traced.</item>
+ <tag><c>new_ports</c></tag>
+ <item>All ports created after the call is are to be traced.</item>
+ <tag><c>existing</c></tag>
+ <item>All existing processes and ports are traced.</item>
+ <tag><c>existing_processes</c></tag>
+ <item>All existing processes are traced.</item>
+ <tag><c>existing_ports</c></tag>
+ <item>All existing ports are traced.</item>
+ <tag><c>atom()</c></tag>
+ <item>The process or port with the corresponding registered name is traced. The process or
+ port may be a remote process (on another Erlang node). The node must be
+ added with the <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</item>
+ <tag><c>integer()</c></tag>
+ <item>The process <c><![CDATA[<0.Item.0>]]></c> is traced.</item>
+ <tag><c>{X, Y, Z}</c></tag>
+ <item>The process <c><![CDATA[<X.Y.Z>]]></c> is traced. </item>
+ <tag><c>string()</c></tag>
+ <item>If the <c>Item</c> is a string <![CDATA["<X.Y.Z>"]]>
+ as returned from <seealso marker="erts:erlang#pid_to_list-1"><c>pid_to_list/1</c></seealso>,
+ the process <c><![CDATA[<X.Y.Z>]]></c> is traced.
+ </item>
+ </taglist>
+
+ <p>When enabling an <c>Item</c> that represents a group of processes,
+ the <c>Item</c> is enabled on all nodes added with the
+ <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</p>
+
<p><c>Flags</c> can be a single atom,
or a list of flags. The available flags are:
</p>
<taglist>
<tag><c>s (send)</c></tag>
<item>
- <p>Traces the messages the process sends.</p>
+ <p>Traces the messages the process or port sends.</p>
</item>
<tag><c>r (receive)</c></tag>
<item>
- <p>Traces the messages the process receives.</p>
+ <p>Traces the messages the process or port receives.</p>
</item>
<tag><c>m (messages)</c></tag>
<item>
- <p>Traces the messages the process receives and sends.</p>
+ <p>Traces the messages the process or port receives and sends.</p>
</item>
<tag><c>c (call)</c></tag>
<item>
@@ -221,6 +251,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<item>
<p>Traces process related events to the process.</p>
</item>
+ <tag><c>ports</c></tag>
+ <item>
+ <p>Traces port related events to the port.</p>
+ </item>
<tag><c>sos (set on spawn)</c></tag>
<item>
<p>Lets all processes created by the traced
@@ -241,8 +275,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<tag><c>sofl (set on first link)</c></tag>
<item>
<p>This is the same as <c>sol</c>, but only for
- the first call to
- <c>link/1</c> by the traced process.</p>
+ the first call to
+ <seealso marker="erts:erlang#link-1"><c>link/1</c></seealso> by the traced process.</p>
</item>
<tag><c>all</c></tag>
<item>
@@ -255,10 +289,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</item>
</taglist>
<p>The list can also include any of the flags allowed in
- <c>erlang:trace/3</c></p>
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso></p>
<p>The function returns either an error tuple or a tuple
<c>{ok, List}</c>. The <c>List</c> consists of
- specifications of how many processes that matched (in the
+ specifications of how many processes and ports that matched (in the
case of a pure pid() exactly 1). The specification of
matched processes is <c>{matched, Node, N}</c>. If the
remote processor call,<c>rpc</c>, to a remote node fails,
@@ -286,9 +320,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</func>
<func>
<name>i() -> ok</name>
- <fsummary>Display information about all traced processes.</fsummary>
+ <fsummary>Display information about all traced processes and ports.</fsummary>
<desc>
- <p>Displays information about all traced processes.</p>
+ <p>Displays information about all traced processes and ports.</p>
</desc>
</func>
<func>
@@ -327,35 +361,41 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function enables call trace for one or more
- functions. All exported functions matching the <c>{Module, Function, Arity}</c> argument will be concerned, but the
+ functions. All exported functions matching the <c>{Module, Function, Arity}</c>
+ argument will be concerned, but the
<c>match_spec()</c> may further narrow down the set of function
calls generating trace messages.</p>
<p>For a description of the <c>match_spec()</c> syntax,
please turn to the
<em>User's guide</em> part of the online
documentation for the runtime system (<em>erts</em>). The
- chapter <em>Match Specification in Erlang</em> explains the
- general match specification "language".</p>
+ chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso>
+ explains the general match specification "language".
+ The most common generic match specifications used can be
+ found as <c>Built-inAlias</c>', see
+ <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.
+ </p>
<p>The Module, Function and/or Arity parts of the tuple may
be specified as the atom <c>'_'</c> which is a "wild-card"
matching all modules/functions/arities. Note, if the
Module is specified as <c>'_'</c>, the Function and Arity
parts have to be specified as '_' too. The same holds for the
Functions relation to the Arity.</p>
- <p>All nodes added with <c>n/1</c> or <c>tracer/0/2/3</c> will
+ <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will
be affected by this call, and if Module is not <c>'_'</c>
the module will be loaded on all nodes.</p>
<p>The function returns either an error tuple or a tuple
<c>{ok, List}</c>. The <c>List</c> consists of specifications of how
- many functions that matched, in the same way as the processes
- are presented in the return value of <c>p/2</c>. </p>
+ many functions that matched, in the same way as the processes and ports
+ are presented in the return value of <seealso marker="#p-2"><c>p/2</c></seealso>. </p>
<p>There may be a tuple <c>{saved, N}</c> in the return value,
if the MatchSpec is other
than []. The integer <c>N</c> may then be used in
subsequent calls to this function and will stand as an
"alias" for the given expression. There are also a couple of
- built-in aliases for common expressions, see <c>ltp/0</c> below
- for details.</p>
+ built-in aliases for common expressions, see
+ <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.</p>
<p>If an error is returned, it can be due to errors in
compilation of the match specification. Such errors are
presented as a list of tuples <c>{error, string()}</c> where
@@ -394,11 +434,55 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>tpl({Module, Function, Arity}, MatchSpec) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Set pattern for traced local (as well as global) function calls</fsummary>
<desc>
- <p>This function works as <c>tp/2</c>, but enables
+ <p>This function works as <seealso marker="#tp-2"><c>tp/2</c></seealso>, but enables
tracing for local calls (and local functions) as well as for
global calls (and functions).</p>
</desc>
</func>
+
+
+ <func>
+ <name>tpe(Event, MatchSpec) -> {ok, MatchDesc} | {error, term()}</name>
+ <fsummary>Set pattern for traced event</fsummary>
+ <type>
+ <v>Event = send | 'receive'</v>
+ <v>MatchSpec = integer() | Built-inAlias | [] | match_spec()</v>
+ <v>Built-inAlias = x | c | cx</v>
+ <v>MatchDesc = [MatchInfo]</v>
+ <v>MatchInfo = {saved, integer()} | MatchNum</v>
+ <v>MatchNum = {matched, node(), 1} | {matched, node(), 0, RPCError}</v>
+ </type>
+ <desc>
+ <p>This function associates a match specification with trace event
+ <c>send</c> or <c>'receive'</c>. By default all executed <c>send</c>
+ and <c>'receive'</c> events are traced if enabled for a process.
+ A match specification can be used to filter traced events
+ based on sender, receiver and/or message content.</p>
+ <p>For a description of the <c>match_spec()</c> syntax,
+ please turn to the <em>User's guide</em> part of the online
+ documentation for the runtime system (<em>erts</em>). The
+ chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso>
+ explains the general match specification "language".</p>
+ <p>For <c>send</c>, the matching is done on the list <c>[Receiver, Msg]</c>.
+ <c>Receiver</c> is the process or port identity of the receiver and
+ <c>Msg</c> is the message term. The pid of the sending process can be
+ accessed with the guard function <c>self/0</c>.</p>
+ <p>For <c>'receive'</c>, the matching is done on the list <c>[Node, Sender, Msg]</c>.
+ <c>Node</c> is the node name of the sender. <c>Sender</c> is the
+ process or port identity of the sender, or the atom
+ <c>undefined</c> if the sender is not known (which may
+ be the case for remote senders). <c>Msg</c> is the
+ message term. The pid of the receiving process can be
+ accessed with the guard function <c>self/0</c>.</p>
+ <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will
+ be affected by this call.</p>
+ <p>The return value is the same as for
+ <seealso marker="#tp-2"><c>tp/2</c></seealso>. The number of matched
+ events are never larger than 1 as <c>tpe/2</c> does not
+ accept any form of wildcards for argument <c>Event</c>.</p>
+ </desc>
+ </func>
<func>
<name>ctp()</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
@@ -441,10 +525,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>This function disables call tracing on the specified
functions. The semantics of the parameter is the same
as for the corresponding function specification in
- <c>tp/2</c> or <c>tpl/2</c>. Both local and global call trace
+ <seealso marker="#tp-2"><c>tp/2</c></seealso> or <seealso marker="#tpl-2"><c>tpl/2</c></seealso>. Both local and global call trace
is disabled. </p>
<p>The return value reflects how many functions that matched,
- and is constructed as described in <c>tp/2</c>. No tuple
+ and is constructed as described in <seealso marker="#tp-2"><c>tp/2</c></seealso>. No tuple
<c>{saved, N}</c> is however ever returned (for obvious reasons).</p>
</desc>
</func>
@@ -480,8 +564,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>ctpl({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
<desc>
- <p>This function works as <c>ctp/1</c>, but only disables
- tracing set up with <c>tpl/2</c> (not with <c>tp/2</c>).</p>
+ <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables
+ tracing set up with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>
+ (not with <seealso marker="#tp-2"><c>tp/2</c></seealso>).</p>
</desc>
</func>
<func>
@@ -516,8 +601,25 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>ctpg({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
<desc>
- <p>This function works as <c>ctp/1</c>, but only disables
- tracing set up with <c>tp/2</c> (not with <c>tpl/2</c>).</p>
+ <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables
+ tracing set up with <seealso marker="#tp-2"><c>tp/2</c></seealso>
+ (not with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>).</p>
+ </desc>
+ </func>
+ <func>
+ <name>ctpe(Event) -> {ok, MatchDesc} | {error, term()}</name>
+ <fsummary>Clear trace pattern for the specified event</fsummary>
+ <type>
+ <v>Event = send | 'receive'</v>
+ <v>MatchDesc = [MatchNum]</v>
+ <v>MatchNum = {matched, node(), 1} | {matched, node(), 0, RPCError}</v>
+ </type>
+ <desc>
+ <p>This function clears match specifications for the specified
+ trace event (<c>send</c> or <c>'receive'</c>). It will revert back
+ to the default behavior of tracing all triggered events.</p>
+ <p>The return value follow the same style as for
+ <seealso marker="#ctp-1"><c>ctp/1</c></seealso>.</p>
</desc>
</func>
<func>
@@ -526,13 +628,14 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>Use this function to recall all match specifications previously
used in the session (i. e. previously saved during calls
- to <c>tp/2</c>, and built-in match specifications.
+ to <seealso marker="#tp-2"><c>tp/2</c></seealso>, and built-in match specifications.
This is very useful, as a complicated
match_spec can be quite awkward to write. Note that the
- match specifications are lost if <c>stop/0</c> is called.</p>
+ match specifications are lost if <seealso marker="#stop-0"><c>stop/0</c></seealso> is called.</p>
<p>Match specifications used can be saved in a file (if a
read-write file system is present) for use in later
- debugging sessions, see <c>wtp/1</c> and <c>rtp/1</c></p>
+ debugging sessions, see <seealso marker="#wtp-1"><c>wtp/1</c></seealso>
+ and <seealso marker="#rtp-1"><c>rtp/1</c></seealso></p>
<p>There are three built-in trace patterns:
<c>exception_trace</c>, <c>caller_trace</c>
and <c>caller_exception_trace</c> (or <c>x</c>, <c>c</c> and
@@ -555,10 +658,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<fsummary>Delete all saved match specifications.</fsummary>
<desc>
<p>Use this function to "forget" all match specifications
- saved during calls to <c>tp/2</c>.
- This is useful when one wants to restore other match
- specifications from a file with <c>rtp/1</c>. Use
- <c>dtp/1</c> to delete specific saved match specifications. </p>
+ saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.
+ This is useful when one wants to restore other match
+ specifications from a file with <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. Use
+ <seealso marker="#dtp-1"><c>dtp/1</c></seealso> to delete specific saved match specifications.</p>
</desc>
</func>
<func>
@@ -569,7 +672,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>Use this function to "forget" a specific match specification
- saved during calls to <c>tp/2</c>.</p>
+ saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.</p>
</desc>
</func>
<func>
@@ -581,12 +684,12 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function will save all match specifications saved
- during the session (during calls to <c>tp/2</c>)
+ during the session (during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>)
and built-in match specifications in a text
file with the name designated by <c>Name</c>. The format
of the file is textual, why it can be edited with an
ordinary text editor, and then restored with
- <c>rtp/1</c>. </p>
+ <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. </p>
<p>Each match spec in the file ends with a full stop
(<c>.</c>) and new (syntactically correct) match
specifications can be added to the file manually.</p>
@@ -604,7 +707,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function reads match specifications from a file
- (possibly) generated by the <c>wtp/1</c> function. It checks
+ (possibly) generated by the <seealso marker="#wtp-1"><c>wtp/1</c></seealso>
+ function. It checks
the syntax of all match specifications and verifies that
they are correct. The error handling principle is "all or
nothing", i. e. if some of the match specifications are
@@ -612,14 +716,15 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
saved match specifications for the running system. </p>
<p>The match specifications in the file are <em>merged</em>
with the current match specifications, so that no duplicates
- are generated. Use <c>ltp/0</c> to see what numbers were
+ are generated. Use <seealso marker="#ltp-0"><c>ltp/0</c></seealso>
+ to see what numbers were
assigned to the specifications from the file.</p>
<p>The function will return an error, either due to I/O
problems (like a non existing or non readable file) or due
to file format problems. The errors from a bad format file
are in a more or less textual format, which will give a hint
- to what's causing the problem. <marker id="n"></marker>
-</p>
+ to what's causing the problem.
+ </p>
</desc>
</func>
<func>
@@ -631,12 +736,12 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>The <c>dbg</c> server keeps a list of nodes where tracing
- should be performed. Whenever a <c>tp/2</c> call or a
- <c>p/2</c> call is made, it is executed for all nodes in this
- list including the local node (except for <c>p/2</c> with a
- specific <c>pid()</c> as first argument, in which case the
+ should be performed. Whenever a <seealso marker="#tp-2"><c>tp/2</c></seealso> call or a
+ <seealso marker="#p-2"><c>p/2</c></seealso> call is made, it is executed for all nodes in this
+ list including the local node (except for <seealso marker="#p-2"><c>p/2</c></seealso> with a
+ specific <c>pid()</c> or <c>port()</c> as first argument, in which case the
command is executed only on the node where the designated
- process resides).
+ process or port resides).
</p>
<p>This function adds a remote node (<c>Nodename</c>) to the
list of nodes where tracing is performed. It starts a tracer
@@ -645,17 +750,17 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
distribution). If no tracer process is running on the local
node, the error reason <c>no_local_tracer</c> is returned. The
tracer process on the local node must be started with the
- <c>tracer/0/2</c> function.
+ <seealso marker="#tracer-2"><c>tracer/0/2</c></seealso> function.
</p>
<p>If <c>Nodename</c> is the local node, the error reason
<c>cant_add_local_node</c> is returned.
</p>
- <p>If a trace port (see <seealso marker="#trace_port"><c>trace_port/2</c></seealso>) is
+ <p>If a trace port (see <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>) is
running on the local node, remote nodes can not be traced with
a tracer process. The error reason
<c>cant_trace_remote_pid_to_local_port</c> is returned. A
trace port can however be started on the remote node with the
- <c>tracer/3</c> function.
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.
</p>
<p>The function will also return an error if the node
<c>Nodename</c> is not reachable.</p>
@@ -669,9 +774,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>Clears a node from the list of traced nodes. Subsequent
- calls to <c>tp/2</c> and <c>p/2</c> will not consider that
- node, but tracing already activated on the node will continue
- to be in effect.</p>
+ calls to <seealso marker="#tp-2"><c>tp/2</c></seealso> and
+ <seealso marker="#p-2"><c>p/2</c></seealso> will not consider that
+ node, but tracing already activated on the node will continue
+ to be in effect.</p>
<p>Returns <c>ok</c>, cannot fail.</p>
</desc>
</func>
@@ -688,37 +794,42 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>This function starts a server on the local node that will
be the recipient of all trace messages. All subsequent calls
- to <c>p/2</c> will result in messages sent to the newly
+ to <seealso marker="#p-2"><c>p/2</c></seealso> will result in messages sent to the newly
started trace server.</p>
<p>A trace server started in this way will simply display the
trace messages in a formatted way in the Erlang shell
- (i. e. use io:format). See <c>tracer/2</c> for a description
- of how the trace message handler can be customized. <marker id="tracer2"></marker>
-</p>
- <p>To start a similar tracer on a remote node, use <c>n/1</c>.</p>
+ (i. e. use io:format). See <seealso marker="#tracer-2"><c>tracer/2</c></seealso>
+ for a description of how the trace message handler can be customized.
+ </p>
+ <p>To start a similar tracer on a remote node, use <seealso marker="#n-1"><c>n/1</c></seealso>.</p>
</desc>
</func>
<func>
<name>tracer(Type, Data) -> {ok, pid()} | {error, Error}</name>
<fsummary>Start a tracer server with additional parameters</fsummary>
<type>
- <v>Type = port | process</v>
- <v>Data = PortGenerator | HandlerSpec</v>
- <v>HandlerSpec = {HandlerFun, InitialData}</v>
- <v>HandlerFun = fun() (two arguments)</v>
- <v>InitialData = term()</v>
+ <v>Type = port | process | module</v>
+ <v>Data = PortGenerator | HandlerSpec | ModuleSpec</v>
<v>PortGenerator = fun() (no arguments)</v>
<v>Error = term()</v>
+ <v>HandlerSpec = {HandlerFun, InitialData}</v>
+ <v>HandlerFun = fun() (two arguments)</v>
+ <v>ModuleSpec = fun() (no arguments) | {TracerModule, TracerState}</v>
+ <v>ModuleModule = atom()</v>
+ <v>InitialData = TracerState = term()</v>
</type>
<desc>
<p>This function starts a tracer server with additional
parameters on the local node. The first parameter, the
<c>Type</c>, indicates if trace messages should be handled
- by a receiving process (<c>process</c>) or by a tracer port
- (<c>port</c>). For a description about tracer ports see
- <c>trace_port/2</c>.
+ by a receiving process (<c>process</c>), by a tracer port
+ (<c>port</c>) or by a tracer module
+ (<c>module</c>). For a description about tracer ports see
+ <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>
+ and for a tracer modules see
+ <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>.
</p>
- <p>If <c>Type</c> is a process, a message handler function can
+ <p>If <c>Type</c> is <c>process</c>, a message handler function can
be specified (<c>HandlerSpec</c>). The handler function, which
should be a <c>fun</c> taking two arguments, will be called
for each trace message, with the first argument containing the
@@ -729,18 +840,22 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
choose any appropriate action to take when invoked, and can
save a state for the next invocation by returning it.
</p>
- <p>If <c>Type</c> is a port, then the second parameter should
+ <p>If <c>Type</c> is <c>port</c>, then the second parameter should
be a <em>fun</em> which takes no arguments and returns a
newly opened trace port when called. Such a <em>fun</em> is
- preferably generated by calling <c>trace_port/2</c>.
+ preferably generated by calling <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>.
</p>
+ <p>if <c>Type</c> is <c>module</c>, then the second parameter should
+ be either a tuple describing the <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>
+ module to be used for tracing and the state to be used for
+ that tracer module or a fun returning the same tuple.</p>
<p>If an error is returned, it can either be due to a tracer
server already running (<c>{error,already_started}</c>) or
due to the <c>HandlerFun</c> throwing an exception.
</p>
<p>To start a similar tracer on a remote node, use
- <c>tracer/3</c>. <marker id="trace_port"></marker>
-</p>
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso>.
+ </p>
</desc>
</func>
<func>
@@ -750,20 +865,19 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<v>Nodename = atom()</v>
</type>
<desc>
- <p>This function is equivalent to <c>tracer/2</c>, but acts on
+ <p>This function is equivalent to <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but acts on
the given node. A tracer is started on the node
- (<c>Nodename</c>) and the node is added to the list of traced
- nodes.
+ (<c>Nodename</c>) and the node is added to the list of traced nodes.
</p>
<note>
- <p>This function is not equivalent to <c>n/1</c>. While
- <c>n/1</c> starts a process tracer which redirects all trace
+ <p>This function is not equivalent to <seealso marker="#n-1"><c>n/1</c></seealso>. While
+ <seealso marker="#n-1"><c>n/1</c></seealso> starts a process tracer which redirects all trace
information to a process tracer on the local node (i.e. the
- trace control node), <c>tracer/3</c> starts a tracer of any
+ trace control node), <seealso marker="#tracer-3"><c>tracer/3</c></seealso> starts a tracer of any
type which is independent of the tracer on the trace control
node.</p>
</note>
- <p>For details, see <seealso marker="#tracer2"><c>tracer/2</c></seealso>.</p>
+ <p>For details, see <seealso marker="#tracer-2"><c>tracer/2</c></seealso>.</p>
</desc>
</func>
<func>
@@ -795,9 +909,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<c>file</c> and the <c>ip</c> trace drivers. The file driver
sends all trace messages into one or several binary files,
from where they later can be fetched and processed with the
- <c>trace_client/2</c> function. The ip driver opens a TCP/IP
+ <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> function. The ip driver opens a TCP/IP
port where it listens for connections. When a client
- (preferably started by calling <c>trace_client/2</c> on
+ (preferably started by calling <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> on
another Erlang node) connects, all trace messages are sent
over the IP network for further processing by the remote
client. </p>
@@ -836,7 +950,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
as fast as they are produced by the runtime system, a special
message is sent, which indicates how many messages that are
dropped. That message will arrive at the handler function
- specified in <c>trace_client/3</c> as the tuple <c>{drop, N}</c> where <c>N</c> is the number of consecutive messages
+ specified in <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso>
+ as the tuple <c>{drop, N}</c> where <c>N</c> is the number of consecutive messages
dropped. In case of heavy tracing, drop's are likely to occur,
and they surely occur if no client is reading the trace
messages.</p>
@@ -890,7 +1005,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</item>
<tag><c>get_listen_port</c></tag>
<item>
- <p>Returns <c>{ok, IpPort}</c> where <c>IpPort</c>is
+ <p>Returns <c>{ok, IpPort}</c> where <c>IpPort</c> is
the IP port number used by the driver listen socket.
Only the ip trace driver supports this operation.</p>
</item>
@@ -913,8 +1028,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>This function starts a trace client that reads the output
created by a trace port driver and handles it in mostly the
- same way as a tracer process created by the <c>tracer/0</c>
- function.</p>
+ same way as a tracer process created by the
+ <seealso marker="#tracer-0"><c>tracer/0</c></seealso> function.</p>
<p>If <c>Type</c> is <c>file</c>, the client reads all trace
messages stored in the file named <c>Filename</c> or
specified by <c>WrapFilesSpec</c> (must be the same as used
@@ -925,7 +1040,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>If <c>Type</c> is <c>follow_file</c>, the client behaves as
in the <c>file</c> case, but keeps trying to read (and
process) more data
- from the file until stopped by <c>stop_trace_client/1</c>.
+ from the file until stopped by <seealso marker="#stop_trace_client-1"><c>stop_trace_client/1</c></seealso>.
<c>WrapFilesSpec</c> is not allowed as second argument
for this <c>Type</c>.</p>
<p>If <c>Type</c> is <c>ip</c>, the client connects to the
@@ -981,10 +1096,10 @@ hello</pre>
<v>InitialData = term()</v>
</type>
<desc>
- <p>This function works exactly as <c>trace_client/2</c>, but
- allows you to write your own handler function. The handler
+ <p>This function works exactly as <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>,
+ but allows you to write your own handler function. The handler
function works mostly as the one described in
- <c>tracer/2</c>, but will also have to be prepared to handle
+ <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but will also have to be prepared to handle
trace messages of the form <c>{drop, N}</c>, where <c>N</c> is
the number of dropped messages. This pseudo trace message will
only occur if the ip trace driver is used.</p>
@@ -1003,7 +1118,8 @@ hello</pre>
<desc>
<p>This function shuts down a previously started trace
client. The <c>Pid</c> argument is the process id returned
- from the <c>trace_client/2</c> or <c>trace_client/3</c> call.</p>
+ from the <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>
+ or <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso> call.</p>
</desc>
</func>
<func>
@@ -1018,11 +1134,11 @@ hello</pre>
<fsummary>Return the process or port to which all trace messages are sent.</fsummary>
<type>
<v>Nodename = atom()</v>
- <v>Tracer = port() | pid()</v>
+ <v>Tracer = port() | pid() | {module(), term()}</v>
</type>
<desc>
- <p>Returns the process or port to which all trace
- messages are sent. </p>
+ <p>Returns the process, port or tracer module to which all trace
+ messages are sent.</p>
</desc>
</func>
<func>
@@ -1156,8 +1272,9 @@ SeqTrace [0]: (&lt;0.30.0>) &lt;0.25.0> ! {dbg,{ok,&lt;0.31.0>}} [Serial: {4,5}]
of causing a deadlock. This will happen if a group leader process generates a trace
message and the tracer process, by calling the trace handler function, sends an IO
request to the same group leader. The problem can only occur if the trace handler
- prints to tty using an <c>io</c> function such as <c>format/2</c>. Note that when
- <c>dbg:p(all,call)</c> is called, IO processes are also traced.
+ prints to tty using an <c>io</c> function such as <seealso marker="stdlib:io#format-2"><c>format/2</c></seealso>.
+ Note that when
+ <c>dbg:p(all,call)</c> is called, IO processes are also traced.
Here's an example:</p>
<pre>
%% Using a default line editing shell
diff --git a/lib/runtime_tools/doc/src/dyntrace.xml b/lib/runtime_tools/doc/src/dyntrace.xml
index edf08e7753..0cdcecab68 100644
--- a/lib/runtime_tools/doc/src/dyntrace.xml
+++ b/lib/runtime_tools/doc/src/dyntrace.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/runtime_tools/doc/src/erts_alloc_config.xml b/lib/runtime_tools/doc/src/erts_alloc_config.xml
index 6a6ad93d48..ffc4ec5285 100644
--- a/lib/runtime_tools/doc/src/erts_alloc_config.xml
+++ b/lib/runtime_tools/doc/src/erts_alloc_config.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/runtime_tools/doc/src/msacc.xml b/lib/runtime_tools/doc/src/msacc.xml
new file mode 100644
index 0000000000..129da3d230
--- /dev/null
+++ b/lib/runtime_tools/doc/src/msacc.xml
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2014</year><year>2014</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ </legalnotice>
+
+ <title>Microstate Accounting</title>
+ <prepared>Lukas Larsson</prepared>
+ <responsible></responsible>
+ <docno>1</docno>
+ <approved></approved>
+ <checked></checked>
+ <date>14-09-30</date>
+ <rev>A</rev>
+ <file>msacc.xml</file>
+ </header>
+ <module>msacc</module>
+ <modulesummary>Convenience functions for microstate accounting</modulesummary>
+ <description>
+ <p>This module implements some convenience functions for analyzing
+ microstate accounting data. For details about how to use the basic api and
+ what the different states represent see
+ <seealso marker="erts:erlang#statistics_microstate_accounting"><c>
+ erlang:statistics(microstate_accounting)</c></seealso>.</p>
+ <marker id="msacc_print_example"></marker>
+ <p><em>Basic Scenario</em></p>
+ <pre>1> <input>msacc:start(1000).</input>
+ok
+2> <input>msacc:print().</input>
+Average thread real-time : 1000513 us
+Accumulated system run-time : 2213 us
+Average scheduler run-time : 1076 us
+
+ Thread aux check_io emulator gc other port sleep
+
+Stats per thread:
+ async( 0) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00%
+ async( 1) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00%
+ aux( 1) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 99.99%
+ scheduler( 1) 0.00% 0.03% 0.13% 0.00% 0.01% 0.00% 99.82%
+ scheduler( 2) 0.00% 0.00% 0.00% 0.00% 0.03% 0.00% 99.97%
+
+Stats per type:
+ async 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00%
+ aux 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 99.99%
+ scheduler 0.00% 0.02% 0.06% 0.00% 0.02% 0.00% 99.89%
+ok
+</pre>
+ <p>This first command enables microstate accounting for 1000 milliseconds.
+ See <seealso marker="#start-0"><c>start/0</c></seealso>,
+ <seealso marker="#stop-0"><c>stop/0</c></seealso>,
+ <seealso marker="#reset-0"><c>reset/0</c></seealso> and
+ <seealso marker="#start-1"><c>start/1</c></seealso> for more details.
+ The second command prints the statistics gathered during that time.
+ First three general statistics are printed.</p>
+ <taglist>
+ <tag>Average real-time</tag>
+ <item>The average time spent collecting data in the threads.
+ This should be close to the time which data was collected.
+ </item>
+ <tag>System run-time</tag>
+ <item>The total run-time of all threads in the system.
+ This is what you get if you call <c>msacc:stats(total_runtime,Stats).</c>
+ </item>
+ <tag>Average scheduler run-time</tag>
+ <item>The average run-time for the schedulers.
+ This is the average amount of time the schedulers did not sleep.</item>
+ </taglist>
+ <p>Then one column per state is printed with a the percentage of time this
+ thread spent in the state out of it's own real-time. After the thread
+ specific time, the accumulated time for each type of thread is printed in
+ a similar format.</p>
+ <p>Since we have the average real-time and the percentage spent in each
+ state we can easily calculate the time spent in each state by multiplying
+ <c>Average thread real-time</c> with <c>Thread state %</c>, i.e. to
+ get the time Scheduler 1 spent in the emulator state we do
+ <c>1000513us * 0.13% = 1300us</c>.</p>
+ </description>
+ <datatypes>
+ <datatype>
+ <name name="msacc_data"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_data_thread"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_data_counters"/>
+ <desc><p>A map containing the different microstate accounting states and
+ the number of microseconds spent in it.</p></desc>
+ </datatype>
+ <datatype>
+ <name name="msacc_stats"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_stats_thread"/>
+ <desc><p>A map containing information about a specific thread. The
+ percentages in the map can be either run-time or real-time depending
+ on if <c>runtime</c> or <c>realtime</c> was requested from
+ <seealso marker="#stats-2">stats/2</seealso>. <c>system</c> is the
+ percentage of total system time for this specific thread.</p></desc>
+ </datatype>
+ <datatype>
+ <name name="msacc_stats_counters"/>
+ <desc><p>A map containing the different microstate accounting states. Each
+ value in the map contains another map with the percentage of time that
+ this thread has spent in the specific state. Both the percentage of
+ <c>system</c> time and the time for that specific <c>thread</c> is part of
+ the map.</p></desc>
+ </datatype>
+ <datatype>
+ <name name="msacc_type"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_id"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_state"/>
+ <desc><p>The different states that a thread can be in. See
+ <seealso marker="erts:erlang#statistics_microstate_accounting">
+ erlang:statistics(microstate_accounting)</seealso> for details.
+ </p></desc>
+ </datatype>
+ <datatype>
+ <name name="msacc_print_options"/>
+ <desc><p>The different options that can be given to
+ <seealso marker="#print-2"><c>print/2</c></seealso>.
+ </p></desc>
+ </datatype>
+ </datatypes>
+ <funcs>
+ <func>
+ <name name="available" arity="0"/>
+ <fsummary>Check if microstate accounting is available</fsummary>
+ <desc>
+ <p>This function checks whether microstate accounting
+ is available or not.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="start" arity="0"/>
+ <fsummary>Start microstate accounting.</fsummary>
+ <desc>
+ <p>Start microstate accounting. Returns whether it was
+ previously enabled or disabled.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="start" arity="1"/>
+ <fsummary>Start microstate accounting for a time.</fsummary>
+ <desc>
+ <p>Resets all counters and then starts microstate accounting
+ for the given milliseconds.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="stop" arity="0"/>
+ <fsummary>Stop microstate accounting.</fsummary>
+ <desc>
+ <p>Stop microstate accounting.
+ Returns whether is was previously enabled or disabled.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="reset" arity="0"/>
+ <fsummary>Reset microstate accounting counters</fsummary>
+ <desc>
+ <p>Reset microstate accounting counters.
+ Returns whether is was enabled or disabled.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="print" arity="0"/>
+ <fsummary>Print microstate statistics</fsummary>
+ <desc>
+ <p>
+ Prints the current microstate accounting to standard out.
+ Same as
+ <seealso marker="#print-1">
+ <c>msacc:print(msacc:stats(),#{}).</c>
+ </seealso>
+ </p>
+ </desc>
+ </func>
+ <func>
+ <name name="print" arity="1"/>
+ <fsummary>Print microstate statistics</fsummary>
+ <desc>
+ <p>Print the given microstate statistics values to stdout.
+ Same as
+ <seealso marker="#print-1">
+ <c>msacc:print(DataOrStats,#{}).</c>
+ </seealso>
+ </p>
+ </desc>
+ </func>
+ <func>
+ <name name="print" arity="2"/>
+ <fsummary>Print microstate statistics</fsummary>
+ <desc>
+ <p>Print the given microstate statistics values to standard out.
+ With many states this can be quite verbose. See the top of this
+ reference manual for a brief description of what the fields mean.</p>
+ <p>It is possible to print more specific types of statistics by
+ first manipulating the <c>DataOrStats</c> using
+ <seealso marker="#stats-2"><c>stats/2</c></seealso>.
+ For instance if you want to print the percentage of run-time for each
+ thread you can do:</p>
+ <pre><input>msacc:print(msacc:stats(runtime,msacc:stats())).</input></pre>
+ <p>If you want to only print run-time per thread type you can do:</p>
+ <pre><input>msacc:print(msacc:stats(type,msacc:stats(runtime,msacc:stats()))).</input></pre>
+ <p><em>Options</em></p>
+ <taglist>
+ <tag><c>system</c></tag><item>Print percentage of time spent in each
+ state out of system time as well as thread time.
+ Default: false.</item>
+ </taglist>
+ </desc>
+ </func>
+ <func>
+ <name name="print" arity="3"/>
+ <fsummary>Print microstate statistics</fsummary>
+ <desc>
+ <p>Print the given microstate statistics values to the given file
+ or device. The other arguments behave the same way as for
+ <seealso marker="#print-2"><c>print/2</c></seealso>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="stats" arity="0"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a runtime system independent version of the microstate
+ statistics data presented by
+ <seealso marker="erts:erlang#statistics_microstate_accounting">
+ <c>erlang:statistics(microstate_accounting)</c></seealso>.
+ All counters have been normalized to be in microsecond resolution.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="stats" arity="2" clause_i="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns the system time for the given microstate statistics values.
+ System time is the accumulated time of all threads.</p>
+ <taglist>
+ <tag><c>realtime</c></tag>
+ <item>Returns all time recorded for all threads.</item>
+ <tag><c>runtime</c></tag>
+ <item>Returns all time spent doing work for all threads, i.e.
+ all time not spent in the <c>sleep</c> state.</item>
+ </taglist>
+ </desc>
+ </func>
+ <func>
+ <name name="stats" arity="2" clause_i="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns fractions of real-time or run-time spent in the various
+ threads from the given microstate statistics values.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="stats" arity="2" clause_i="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a list of microstate statistics values where the values
+ for all threads of the same type has been merged.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="to_file" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Dumps the current microstate statistics counters to a file that can
+ be parsed with <seealso marker="kernel:file#consult/1">
+ file:consult/1</seealso>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="from_file" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Read a file dump produced by <seealso marker="#to_file/1">
+ to_file(Filename)</seealso>.</p>
+ </desc>
+ </func>
+ </funcs>
+</erlref>
diff --git a/lib/runtime_tools/doc/src/notes.xml b/lib/runtime_tools/doc/src/notes.xml
index 24b589b928..6bec7cb9ca 100644
--- a/lib/runtime_tools/doc/src/notes.xml
+++ b/lib/runtime_tools/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,100 @@
<p>This document describes the changes made to the Runtime_Tools
application.</p>
+<section><title>Runtime_Tools 1.10</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix bug in dbg:trace_port/2 that could cause the trace ip
+ driver to produce faulty error reports "...(re)selected
+ before stop_select was called for driver trace_ip_drv".</p>
+ <p>
+ Own Id: OTP-13576 Aux Id: ERL-119 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Add microstate accounting</p>
+ <p>
+ Microstate accounting is a way to track which state the
+ different threads within ERTS are in. The main usage area
+ is to pin point performance bottlenecks by checking which
+ states the threads are in and then from there figuring
+ out why and where to optimize.</p>
+ <p>
+ Since checking whether microstate accounting is on or off
+ is relatively expensive only a few of the states are
+ enabled by default and more states can be enabled through
+ configure.</p>
+ <p>
+ There is a convenience module called msacc that has been
+ added to runtime_tools that can assist in gathering and
+ interpreting the data from Microstate accounting.</p>
+ <p>
+ For more information see <seealso
+ marker="erts:erlang#statistics_microstate_accounting">erlang:statistics(microstate_accounting,
+ _)</seealso> and the <seealso
+ marker="runtime_tools:msacc">msacc</seealso> module in
+ runtime_tools.</p>
+ <p>
+ Own Id: OTP-12345</p>
+ </item>
+ <item>
+ <p>
+ Update observer GUI to support tracing on ports, and to
+ set matchspecs for send/receive. This required some minor
+ bugfixes in runtime_tools/dbg.</p>
+ <p>
+ Own Id: OTP-13481</p>
+ </item>
+ <item>
+ <p>
+ Update dbg and ttb to work with a tracer module as tracer
+ and tracing on ports.</p>
+ <p>
+ Own Id: OTP-13500</p>
+ </item>
+ <item>
+ <p>
+ Updated dbg to accept the new trace options
+ <c>monotonic_timestamp</c> and
+ <c>strict_monotonic_timestamp</c>.</p>
+ <p>
+ Own Id: OTP-13502</p>
+ </item>
+ <item>
+ <p>
+ Introduce LTTng tracing via Erlang tracing.</p>
+ <p>
+ For LTTng to be enabled OTP needs to be built with
+ configure option <c>--with-dynamic-trace=lttng</c>.</p>
+ <p>The dynamic trace module <c>dyntrace</c> is now
+ capable to be used as a LTTng sink for Erlang tracing.
+ For a list of all tracepoints, see <seealso
+ marker="runtime_tools:LTTng">Runtime Tools User's
+ Guide</seealso> .</p>
+ <p>This feature also introduces an incompatible change in
+ trace tags. The trace tags <c>gc_start</c> and
+ <c>gc_end</c> has been split into <c>gc_minor_start</c>,
+ <c>gc_minor_end</c> and <c>gc_major_start</c>,
+ <c>gc_major_end</c>.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13532</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Runtime_Tools 1.9.3</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/runtime_tools/doc/src/notes_history.xml b/lib/runtime_tools/doc/src/notes_history.xml
index 853a5eece0..48b868ff5b 100644
--- a/lib/runtime_tools/doc/src/notes_history.xml
+++ b/lib/runtime_tools/doc/src/notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/runtime_tools/doc/src/part.xml b/lib/runtime_tools/doc/src/part.xml
index c0a9e63331..34acf69fc8 100644
--- a/lib/runtime_tools/doc/src/part.xml
+++ b/lib/runtime_tools/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2012</year><year>2013</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -34,6 +34,7 @@
<p><em>Runtime Tools</em></p>
</description>
+ <xi:include href="LTTng.xml"/>
<xi:include href="DTRACE.xml"/>
<xi:include href="SYSTEMTAP.xml"/>
</part>
diff --git a/lib/runtime_tools/doc/src/part_notes.xml b/lib/runtime_tools/doc/src/part_notes.xml
index 7a452aa79a..cabf3e39da 100644
--- a/lib/runtime_tools/doc/src/part_notes.xml
+++ b/lib/runtime_tools/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/runtime_tools/doc/src/part_notes_history.xml b/lib/runtime_tools/doc/src/part_notes_history.xml
index 545d3dacfe..dd1991f23a 100644
--- a/lib/runtime_tools/doc/src/part_notes_history.xml
+++ b/lib/runtime_tools/doc/src/part_notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/runtime_tools/doc/src/ref_man.xml b/lib/runtime_tools/doc/src/ref_man.xml
index ea0c0832a4..d2fb7a29af 100644
--- a/lib/runtime_tools/doc/src/ref_man.xml
+++ b/lib/runtime_tools/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -36,6 +36,7 @@
<xi:include href="dbg.xml"/>
<xi:include href="dyntrace.xml"/>
<xi:include href="erts_alloc_config.xml"/>
+ <xi:include href="msacc.xml"/>
<xi:include href="system_information.xml"/>
</application>
diff --git a/lib/runtime_tools/doc/src/runtime_tools_app.xml b/lib/runtime_tools/doc/src/runtime_tools_app.xml
index fb02d678cc..a2cf623977 100644
--- a/lib/runtime_tools/doc/src/runtime_tools_app.xml
+++ b/lib/runtime_tools/doc/src/runtime_tools_app.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/runtime_tools/doc/src/specs.xml b/lib/runtime_tools/doc/src/specs.xml
index d4c3c9dfe6..978bd39e55 100644
--- a/lib/runtime_tools/doc/src/specs.xml
+++ b/lib/runtime_tools/doc/src/specs.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<specs xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="../specs/specs_system_information.xml"/>
+ <xi:include href="../specs/specs_msacc.xml"/>
</specs>
diff --git a/lib/runtime_tools/doc/src/system_information.xml b/lib/runtime_tools/doc/src/system_information.xml
index 1c33ff1a40..53dc595e64 100644
--- a/lib/runtime_tools/doc/src/system_information.xml
+++ b/lib/runtime_tools/doc/src/system_information.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2014</year>
+ <year>2014</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/runtime_tools/examples/dist.d b/lib/runtime_tools/examples/dist.d
index e9323eec8f..3da2171a85 100644
--- a/lib/runtime_tools/examples/dist.d
+++ b/lib/runtime_tools/examples/dist.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/dist.systemtap b/lib/runtime_tools/examples/dist.systemtap
index f2fcd189b5..bb20d617e1 100644
--- a/lib/runtime_tools/examples/dist.systemtap
+++ b/lib/runtime_tools/examples/dist.systemtap
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/driver1.d b/lib/runtime_tools/examples/driver1.d
index b873f9c0d8..f63033ce6a 100644
--- a/lib/runtime_tools/examples/driver1.d
+++ b/lib/runtime_tools/examples/driver1.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/driver1.systemtap b/lib/runtime_tools/examples/driver1.systemtap
index 71e1a0fa34..e1ee8ecffc 100644
--- a/lib/runtime_tools/examples/driver1.systemtap
+++ b/lib/runtime_tools/examples/driver1.systemtap
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/efile_drv.d b/lib/runtime_tools/examples/efile_drv.d
index c6f9d3ba52..a470518dd9 100644
--- a/lib/runtime_tools/examples/efile_drv.d
+++ b/lib/runtime_tools/examples/efile_drv.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/efile_drv.systemtap b/lib/runtime_tools/examples/efile_drv.systemtap
index 12bd7a14a3..29c3637e10 100644
--- a/lib/runtime_tools/examples/efile_drv.systemtap
+++ b/lib/runtime_tools/examples/efile_drv.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/function-calls.d b/lib/runtime_tools/examples/function-calls.d
index 2de7fe64dd..f8ca388228 100644
--- a/lib/runtime_tools/examples/function-calls.d
+++ b/lib/runtime_tools/examples/function-calls.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/function-calls.systemtap b/lib/runtime_tools/examples/function-calls.systemtap
index 30d77e4e66..9c44b2d014 100644
--- a/lib/runtime_tools/examples/function-calls.systemtap
+++ b/lib/runtime_tools/examples/function-calls.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/garbage-collection.d b/lib/runtime_tools/examples/garbage-collection.d
index 3878858765..7d5a07c6fb 100644
--- a/lib/runtime_tools/examples/garbage-collection.d
+++ b/lib/runtime_tools/examples/garbage-collection.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/garbage-collection.systemtap b/lib/runtime_tools/examples/garbage-collection.systemtap
index cbe949120a..e414eea821 100644
--- a/lib/runtime_tools/examples/garbage-collection.systemtap
+++ b/lib/runtime_tools/examples/garbage-collection.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/memory1.d b/lib/runtime_tools/examples/memory1.d
index 64e524b419..79f5fa70a5 100644
--- a/lib/runtime_tools/examples/memory1.d
+++ b/lib/runtime_tools/examples/memory1.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/memory1.systemtap b/lib/runtime_tools/examples/memory1.systemtap
index 850ebbbf53..04df4d64c4 100644
--- a/lib/runtime_tools/examples/memory1.systemtap
+++ b/lib/runtime_tools/examples/memory1.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/messages.d b/lib/runtime_tools/examples/messages.d
index 62851a7697..d48c807afd 100644
--- a/lib/runtime_tools/examples/messages.d
+++ b/lib/runtime_tools/examples/messages.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/messages.systemtap b/lib/runtime_tools/examples/messages.systemtap
index 4f3da9986c..f2ef56a22b 100644
--- a/lib/runtime_tools/examples/messages.systemtap
+++ b/lib/runtime_tools/examples/messages.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/port1.d b/lib/runtime_tools/examples/port1.d
index 3531cb3398..79266f78ca 100644
--- a/lib/runtime_tools/examples/port1.d
+++ b/lib/runtime_tools/examples/port1.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/port1.systemtap b/lib/runtime_tools/examples/port1.systemtap
index 4561686a80..f7ce03a65e 100644
--- a/lib/runtime_tools/examples/port1.systemtap
+++ b/lib/runtime_tools/examples/port1.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/process-scheduling.d b/lib/runtime_tools/examples/process-scheduling.d
index 1acee4fbf2..30bfcaa21d 100644
--- a/lib/runtime_tools/examples/process-scheduling.d
+++ b/lib/runtime_tools/examples/process-scheduling.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/process-scheduling.systemtap b/lib/runtime_tools/examples/process-scheduling.systemtap
index ab95d44d40..b0b74257b3 100644
--- a/lib/runtime_tools/examples/process-scheduling.systemtap
+++ b/lib/runtime_tools/examples/process-scheduling.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/spawn-exit.d b/lib/runtime_tools/examples/spawn-exit.d
index 2ac79dc4f0..feeaa7960e 100644
--- a/lib/runtime_tools/examples/spawn-exit.d
+++ b/lib/runtime_tools/examples/spawn-exit.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/spawn-exit.systemtap b/lib/runtime_tools/examples/spawn-exit.systemtap
index ae3f0f1b06..89bca14496 100644
--- a/lib/runtime_tools/examples/spawn-exit.systemtap
+++ b/lib/runtime_tools/examples/spawn-exit.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/user-probe-n.d b/lib/runtime_tools/examples/user-probe-n.d
index 0f83b5bf3c..4b4300fe83 100644
--- a/lib/runtime_tools/examples/user-probe-n.d
+++ b/lib/runtime_tools/examples/user-probe-n.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/user-probe-n.systemtap b/lib/runtime_tools/examples/user-probe-n.systemtap
index 48335ff41e..25f7503283 100644
--- a/lib/runtime_tools/examples/user-probe-n.systemtap
+++ b/lib/runtime_tools/examples/user-probe-n.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/user-probe.d b/lib/runtime_tools/examples/user-probe.d
index 6adfb10cd8..4806bae783 100644
--- a/lib/runtime_tools/examples/user-probe.d
+++ b/lib/runtime_tools/examples/user-probe.d
@@ -2,7 +2,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/examples/user-probe.systemtap b/lib/runtime_tools/examples/user-probe.systemtap
index b599422c70..1777476e54 100644
--- a/lib/runtime_tools/examples/user-probe.systemtap
+++ b/lib/runtime_tools/examples/user-probe.systemtap
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/include/observer_backend.hrl b/lib/runtime_tools/include/observer_backend.hrl
index a2598f03c7..257e525a15 100644
--- a/lib/runtime_tools/include/observer_backend.hrl
+++ b/lib/runtime_tools/include/observer_backend.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/src/Makefile b/lib/runtime_tools/src/Makefile
index 99b90f9ec5..2c902952a1 100644
--- a/lib/runtime_tools/src/Makefile
+++ b/lib/runtime_tools/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2013. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -45,7 +45,9 @@ MODULES= \
percept_profile \
system_information \
observer_backend \
- ttb_autostart
+ ttb_autostart\
+ msacc
+
HRL_FILES= ../include/observer_backend.hrl
ERL_FILES= $(MODULES:%=%.erl)
diff --git a/lib/runtime_tools/src/appmon_info.erl b/lib/runtime_tools/src/appmon_info.erl
index dd4dc34fcb..b5500085a3 100644
--- a/lib/runtime_tools/src/appmon_info.erl
+++ b/lib/runtime_tools/src/appmon_info.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -307,9 +307,10 @@ do_work(Key, State) ->
{Cmd, Aux, From, _OldRef, Old, Opts} = retrieve(WorkStore, Key),
{ok, Result} = do_work2(Cmd, Aux, From, Old, Opts),
if
- Result==Old -> ok;
- true ->
- From ! {delivery, self(), Cmd, Aux, Result}
+ Result==Old -> ok;
+ true ->
+ From ! {delivery, self(), Cmd, Aux, Result},
+ ok
end,
case get_opt(timeout, Opts) of
at_most_once ->
@@ -393,7 +394,7 @@ del_task(Key, WorkStore) ->
{_Cmd, _Aux, _From, Ref, _Old, Opts} ->
if
Ref /= nil ->
- timer:cancel(Ref),
+ {ok,_} = timer:cancel(Ref),
receive
{do_it, Key} ->
Opts
diff --git a/lib/runtime_tools/src/dbg.erl b/lib/runtime_tools/src/dbg.erl
index 6eea1a0917..c0d4665bda 100644
--- a/lib/runtime_tools/src/dbg.erl
+++ b/lib/runtime_tools/src/dbg.erl
@@ -20,6 +20,7 @@
-module(dbg).
-export([p/1,p/2,c/3,c/4,i/0,start/0,stop/0,stop_clear/0,tracer/0,
tracer/2, tracer/3, get_tracer/0, get_tracer/1, tp/2, tp/3, tp/4,
+ tpe/2, ctpe/1,
ctp/0, ctp/1, ctp/2, ctp/3, tpl/2, tpl/3, tpl/4, ctpl/0, ctpl/1,
ctpl/2, ctpl/3, ctpg/0, ctpg/1, ctpg/2, ctpg/3, ltp/0, wtp/1, rtp/1,
dtp/0, dtp/1, n/1, cn/1, ln/0, h/0, h/1]).
@@ -128,7 +129,12 @@ tpl(Module, Pattern) when is_atom(Module) ->
do_tp({Module, '_', '_'}, Pattern, [local]);
tpl({_Module, _Function, _Arity} = X, Pattern) ->
do_tp(X,Pattern,[local]).
-do_tp({_Module, _Function, _Arity} = X, Pattern, Flags)
+
+tpe(Event, Pattern) when Event =:= send;
+ Event =:= 'receive' ->
+ do_tp(Event, Pattern, []).
+
+do_tp(X, Pattern, Flags)
when is_integer(Pattern);
is_atom(Pattern) ->
case ets:lookup(get_pattern_table(), Pattern) of
@@ -137,17 +143,16 @@ do_tp({_Module, _Function, _Arity} = X, Pattern, Flags)
_ ->
{error, unknown_pattern}
end;
-do_tp({Module, _Function, _Arity} = X, Pattern, Flags) when is_list(Pattern) ->
+do_tp(X, Pattern, Flags) when is_list(Pattern) ->
Nodes = req(get_nodes),
- case Module of
- '_' ->
- ok;
- M when is_atom(M) ->
+ case X of
+ {M,_,_} when is_atom(M) ->
%% Try to load M on all nodes
lists:foreach(fun(Node) ->
rpc:call(Node, M, module_info, [])
end,
- Nodes)
+ Nodes);
+ _ -> ok
end,
case lint_tp(Pattern) of
{ok,_} ->
@@ -163,9 +168,9 @@ do_tp({Module, _Function, _Arity} = X, Pattern, Flags) when is_list(Pattern) ->
end.
%% All nodes are handled the same way - also the local node if it is traced
-do_tp_on_nodes(Nodes, MFA, P, Flags) ->
+do_tp_on_nodes(Nodes, X, P, Flags) ->
lists:map(fun(Node) ->
- case rpc:call(Node,erlang,trace_pattern,[MFA,P, Flags]) of
+ case rpc:call(Node,erlang,trace_pattern,[X,P, Flags]) of
N when is_integer(N) ->
{matched, Node, N};
Else ->
@@ -210,13 +215,19 @@ ctpg(Module) when is_atom(Module) ->
do_ctp({Module, '_', '_'}, [global]);
ctpg({_Module, _Function, _Arity} = X) ->
do_ctp(X,[global]).
+
do_ctp({Module, Function, Arity},[]) ->
- do_ctp({Module, Function, Arity},[global]),
+ {ok,_} = do_ctp({Module, Function, Arity},[global]),
do_ctp({Module, Function, Arity},[local]);
do_ctp({_Module, _Function, _Arity}=MFA,Flags) ->
Nodes = req(get_nodes),
{ok,do_tp_on_nodes(Nodes,MFA,false,Flags)}.
+ctpe(Event) when Event =:= send;
+ Event =:= 'receive' ->
+ Nodes = req(get_nodes),
+ {ok,do_tp_on_nodes(Nodes,Event,true,[])}.
+
%%
%% ltp() -> ok
%% List saved and built-in trace patterns.
@@ -260,8 +271,7 @@ wtp(FileName) ->
ok
end,
[]),
- file:close(File),
- ok
+ ok = file:close(File)
end.
%%
@@ -298,7 +308,12 @@ tracer(port, Port) when is_port(Port) ->
start(fun() -> Port end);
tracer(process, {Handler,HandlerData}) ->
- start(fun() -> start_tracer_process(Handler, HandlerData) end).
+ start(fun() -> start_tracer_process(Handler, HandlerData) end);
+
+tracer(module, Fun) when is_function(Fun) ->
+ start(Fun);
+tracer(module, {Module, State}) ->
+ start(fun() -> {Module, State} end).
remote_tracer(port, Fun) when is_function(Fun) ->
@@ -308,7 +323,13 @@ remote_tracer(port, Port) when is_port(Port) ->
remote_start(fun() -> Port end);
remote_tracer(process, {Handler,HandlerData}) ->
- remote_start(fun() -> start_tracer_process(Handler, HandlerData) end).
+ remote_start(fun() -> start_tracer_process(Handler, HandlerData) end);
+
+remote_tracer(module, Fun) when is_function(Fun) ->
+ remote_start(Fun);
+remote_tracer(module, {Module, State}) ->
+ remote_start(fun() -> {Module, State} end).
+
remote_start(StartTracer) ->
case (catch StartTracer()) of
@@ -543,9 +564,8 @@ c(M, F, A, Flags) ->
{error,Reason} -> {error,Reason};
Flags1 ->
tracer(),
- {ok, Tracer} = get_tracer(),
S = self(),
- Pid = spawn(fun() -> c(S, M, F, A, [{tracer, Tracer} | Flags1]) end),
+ Pid = spawn(fun() -> c(S, M, F, A, [get_tracer_flag() | Flags1]) end),
Mref = erlang:monitor(process, Pid),
receive
{'DOWN', Mref, _, _, Reason} ->
@@ -579,7 +599,7 @@ stop() ->
end.
stop_clear() ->
- ctp(),
+ {ok, _} = ctp(),
stop().
%%% Calling the server.
@@ -660,6 +680,9 @@ loop({C,T}=SurviveLinks, Table) ->
reply(From, {error, Reason});
Tracer when is_pid(Tracer); is_port(Tracer) ->
put(node(),{self(),Tracer}),
+ reply(From, {ok,self()});
+ {Module, _State} = Tracer when is_atom(Module) ->
+ put(node(),{self(),Tracer}),
reply(From, {ok,self()})
end;
{_Relay,_Tracer} ->
@@ -710,6 +733,9 @@ loop({C,T}=SurviveLinks, Table) ->
{_LocalRelay,Tracer} when is_port(Tracer) ->
reply(From, {error, cant_trace_remote_pid_to_local_port}),
loop(SurviveLinks, Table);
+ {_LocalRelay,Tracer} when is_tuple(Tracer) ->
+ reply(From, {error, cant_trace_remote_pid_to_local_module}),
+ loop(SurviveLinks, Table);
{_LocalRelay,Tracer} when is_pid(Tracer) ->
case (catch relay(Node, Tracer)) of
{ok,Relay} ->
@@ -764,7 +790,8 @@ loop({C,T}=SurviveLinks, Table) ->
end.
reply(Pid, Reply) ->
- Pid ! {dbg,Reply}.
+ Pid ! {dbg,Reply},
+ ok.
%%% A process-based tracer.
@@ -879,9 +906,9 @@ trac(Proc, How, Flags) ->
end
end.
-trac(Node, {_Relay, Tracer}, AtomPid, How, Flags) ->
+trac(Node, {_Replay, Tracer}, AtomPid, How, Flags) ->
case rpc:call(Node, ?MODULE, erlang_trace,
- [AtomPid, How, [{tracer, Tracer} | Flags]]) of
+ [AtomPid, How, [get_tracer_flag(Tracer) | Flags]]) of
N when is_integer(N) ->
{matched, Node, N};
{badrpc,Reason} ->
@@ -917,9 +944,11 @@ do_relay(Parent,RelP) ->
case RelP of
{Type,Data} ->
{ok,Tracer} = remote_tracer(Type,Data),
- Parent ! {started,Tracer};
+ Parent ! {started,Tracer},
+ ok;
Pid when is_pid(Pid) ->
- Parent ! {started,self()}
+ Parent ! {started,self()},
+ ok
end,
do_relay_1(RelP).
@@ -1114,7 +1143,7 @@ transform_flags([sos|Tail],Acc) -> transform_flags(Tail,[set_on_spawn|Acc]);
transform_flags([sol|Tail],Acc) -> transform_flags(Tail,[set_on_link|Acc]);
transform_flags([sofs|Tail],Acc) -> transform_flags(Tail,[set_on_first_spawn|Acc]);
transform_flags([sofl|Tail],Acc) -> transform_flags(Tail,[set_on_first_link|Acc]);
-transform_flags([all|_],_Acc) -> all()--[silent];
+transform_flags([all|_],_Acc) -> all()--[silent,running];
transform_flags([F|Tail]=List,Acc) when is_atom(F) ->
case lists:member(F, all()) of
true -> transform_flags(Tail,[F|Acc]);
@@ -1123,9 +1152,10 @@ transform_flags([F|Tail]=List,Acc) when is_atom(F) ->
transform_flags(Bad,_Acc) -> {error,{bad_flags,Bad}}.
all() ->
- [send,'receive',call,procs,garbage_collection,running,
+ [send,'receive',call,procs,ports,garbage_collection,running,
set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link,
- timestamp,arity,return_to,silent].
+ timestamp,monotonic_timestamp,strict_monotonic_timestamp,
+ arity,return_to,silent,running_procs,running_ports,exiting].
display_info([Node|Nodes]) ->
io:format("~nNode ~w:~n",[Node]),
@@ -1146,24 +1176,34 @@ display_info1([]) ->
ok.
get_info() ->
- get_info(processes(),[]).
+ get_info(processes(),get_info(erlang:ports(),[])).
+get_info([Port|T], Acc) when is_port(Port) ->
+ case pinfo(Port, name) of
+ undefined ->
+ get_info(T,Acc);
+ {name, Name} ->
+ get_info(T,get_tinfo(Port, Name, Acc))
+ end;
get_info([Pid|T],Acc) ->
case pinfo(Pid, initial_call) of
undefined ->
get_info(T,Acc);
{initial_call, Call} ->
- case tinfo(Pid, flags) of
- undefined ->
- get_info(T,Acc);
- {flags,[]} ->
- get_info(T,Acc);
- {flags,Flags} ->
- get_info(T,[{Pid,Call,Flags}|Acc])
- end
+ get_info(T,get_tinfo(Pid, Call, Acc))
end;
get_info([],Acc) -> Acc.
+get_tinfo(P, Id, Acc) ->
+ case tinfo(P, flags) of
+ undefined ->
+ Acc;
+ {flags,[]} ->
+ Acc;
+ {flags,Flags} ->
+ [{P,Id,Flags}|Acc]
+ end.
+
format_trace([]) -> [];
format_trace([Item]) -> [ts(Item)];
format_trace([Item|T]) -> [ts(Item) ," | ", format_trace(T)].
@@ -1188,9 +1228,22 @@ to_pidspec(X) when is_pid(X) ->
true -> X;
false -> {badpid,X}
end;
-to_pidspec(new) -> new;
-to_pidspec(all) -> all;
-to_pidspec(existing) -> existing;
+to_pidspec(X) when is_port(X) ->
+ case erlang:port_info(X) of
+ undefined -> {badport, X};
+ _ -> X
+ end;
+to_pidspec(Tag)
+ when Tag =:= all;
+ Tag =:= ports;
+ Tag =:= processes;
+ Tag =:= new;
+ Tag =:= new_ports;
+ Tag =:= new_processes;
+ Tag =:= existing;
+ Tag =:= existing_ports;
+ Tag =:= existing_processes ->
+ Tag;
to_pidspec(X) when is_atom(X) ->
case whereis(X) of
undefined -> {badpid,X};
@@ -1203,6 +1256,7 @@ to_pidspec(X) -> {badpid,X}.
%%
to_pid(X) when is_pid(X) -> X;
+to_pid(X) when is_port(X) -> X;
to_pid(X) when is_integer(X) -> to_pid({0,X,0});
to_pid({X,Y,Z}) ->
to_pid(lists:concat(["<",integer_to_list(X),".",
@@ -1217,9 +1271,12 @@ to_pid(X) when is_list(X) ->
to_pid(X) -> {badpid,X}.
+pinfo(P, X) when node(P) == node(), is_port(P) -> erlang:port_info(P, X);
pinfo(P, X) when node(P) == node() -> erlang:process_info(P, X);
+pinfo(P, X) when is_port(P) -> check(rpc:call(node(P), erlang, port_info, [P, X]));
pinfo(P, X) -> check(rpc:call(node(P), erlang, process_info, [P, X])).
+
tinfo(P, X) when node(P) == node() -> erlang:trace_info(P, X);
tinfo(P, X) -> check(rpc:call(node(P), erlang, trace_info, [P, X])).
@@ -1256,6 +1313,9 @@ tc_loop(Other, _Handler, _HData) ->
gen_reader(ip, {Host, Portno}) ->
case gen_tcp:connect(Host, Portno, [{active, false}, binary]) of
{ok, Sock} ->
+ %% Just in case this is on the traced node,
+ %% make sure the port is not traced.
+ p(Sock,clear),
mk_reader(fun ip_read/2, Sock);
Error ->
exit(Error)
@@ -1311,7 +1371,7 @@ mk_reader_wrap([_Hd | Tail] = WrapFiles, File) ->
{ok, Term} ->
[Term | mk_reader_wrap(WrapFiles, File)];
eof ->
- file:close(File),
+ ok = file:close(File),
case Tail of
[_|_] ->
mk_reader_wrap(Tail);
@@ -1411,6 +1471,13 @@ get_tracer() ->
req({get_tracer,node()}).
get_tracer(Node) ->
req({get_tracer,Node}).
+get_tracer_flag() ->
+ {ok, Tracer} = get_tracer(),
+ get_tracer_flag(Tracer).
+get_tracer_flag({Module,State}) ->
+ {tracer, Module, State};
+get_tracer_flag(Port = Pid) when is_port(Port); is_pid(Pid)->
+ {tracer, Pid = Port}.
save_pattern([]) ->
0;
diff --git a/lib/runtime_tools/src/dyntrace.erl b/lib/runtime_tools/src/dyntrace.erl
index f7dbef6929..58c5a773c3 100644
--- a/lib/runtime_tools/src/dyntrace.erl
+++ b/lib/runtime_tools/src/dyntrace.erl
@@ -41,6 +41,27 @@
pn/1, pn/2, pn/3, pn/4, pn/5, pn/6, pn/7, pn/8, pn/9]).
-export([put_tag/1, get_tag/0, get_tag_data/0, spread_tag/1, restore_tag/1]).
+-export([trace/5,
+ trace_procs/5,
+ trace_ports/5,
+ trace_running_procs/5,
+ trace_running_ports/5,
+ trace_call/5,
+ trace_send/5,
+ trace_receive/5,
+ trace_garbage_collection/5]).
+
+-export([enabled_procs/3,
+ enabled_ports/3,
+ enabled_running_procs/3,
+ enabled_running_ports/3,
+ enabled_call/3,
+ enabled_send/3,
+ enabled_receive/3,
+ enabled_garbage_collection/3,
+ enabled/3]).
+
+
-export([user_trace_i4s4/9]). % Know what you're doing!
-on_load(on_load/0).
@@ -125,6 +146,60 @@ user_trace_i4s4(_, _, _, _, _, _, _, _, _) ->
user_trace_n(_, _, _, _, _, _, _, _, _, _) ->
erlang:nif_error(nif_not_loaded).
+trace(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_procs(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_ports(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_running_procs(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_running_ports(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_call(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_send(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_receive(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_garbage_collection(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_procs(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_ports(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_running_procs(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_running_ports(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_call(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_send(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_receive(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_garbage_collection(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
%%%
%%% Erlang support functions
%%%
diff --git a/lib/runtime_tools/src/erts_alloc_config.erl b/lib/runtime_tools/src/erts_alloc_config.erl
index 85aacdd6e1..514530332c 100644
--- a/lib/runtime_tools/src/erts_alloc_config.erl
+++ b/lib/runtime_tools/src/erts_alloc_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -128,7 +128,7 @@ make_config(FileName) when is_list(FileName) ->
case file:open(FileName, [write]) of
{ok, IODev} ->
Res = req({make_config, IODev}),
- file:close(IODev),
+ ok = file:close(IODev),
Res;
Error ->
Error
@@ -200,9 +200,11 @@ server_loop(State) ->
Conf = #conf{segments = ?MBC_MSEG_LIMIT,
format_to = IODev},
Res = mk_config(Conf, State#state.alloc),
- From ! {response, Ref, Res};
+ From ! {response, Ref, Res},
+ ok;
_ ->
- From ! {response, Ref, no_scenario_saved}
+ From ! {response, Ref, no_scenario_saved},
+ ok
end,
State;
{request, From, Ref, stop} ->
diff --git a/lib/runtime_tools/src/msacc.erl b/lib/runtime_tools/src/msacc.erl
new file mode 100644
index 0000000000..4db5dbec91
--- /dev/null
+++ b/lib/runtime_tools/src/msacc.erl
@@ -0,0 +1,355 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2014-2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%
+%% @doc Microstate accounting utility function
+%%
+%% This module provides a user interface for analysing
+%% erlang:statistics(microstate_accounting) data.
+%%
+
+-module(msacc).
+-export([available/0, start/0, start/1, stop/0, reset/0, to_file/1,
+ from_file/1, stats/0, stats/2, print/0, print/1, print/2,
+ print/3]).
+
+-type msacc_data() :: [msacc_data_thread()].
+
+-type msacc_data_thread() :: #{ '$type' := msacc_data,
+ type := msacc_type(), id := msacc_id(),
+ counters := msacc_data_counters() }.
+-type msacc_data_counters() :: #{ msacc_state() => non_neg_integer()}.
+
+-type msacc_stats() :: [msacc_stats_thread()].
+-type msacc_stats_thread() :: #{ '$type' := msacc_stats,
+ type := msacc_type(), id := msacc_id(),
+ system := float(),
+ counters := msacc_stats_counters()}.
+-type msacc_stats_counters() :: #{ msacc_state() => #{ thread := float(),
+ system := float()}}.
+
+
+-type msacc_type() :: scheduler | aux | async.
+-type msacc_id() :: non_neg_integer().
+-type msacc_state() :: alloc | aux | bif | busy_wait | check_io |
+ emulator | ets | gc | gc_fullsweep | nif |
+ other | port | send | sleep | timers.
+
+-type msacc_print_options() :: #{ system => boolean() }.
+
+-spec available() -> boolean().
+available() ->
+ try
+ [_|_] = erlang:statistics(microstate_accounting),
+ true
+ catch _:_ ->
+ false
+ end.
+
+-spec start() -> boolean().
+start() ->
+ erlang:system_flag(microstate_accounting, true).
+
+-spec stop() -> boolean().
+stop() ->
+ erlang:system_flag(microstate_accounting, false).
+
+-spec reset() -> boolean().
+reset() ->
+ erlang:system_flag(microstate_accounting, reset).
+
+-spec start(Time) -> true when
+ Time :: timeout().
+start(Tmo) ->
+ stop(), reset(), start(),
+ timer:sleep(Tmo),
+ stop().
+
+-spec to_file(Filename) -> ok | {error, file:posix()} when
+ Filename :: file:name_all().
+to_file(Filename) ->
+ file:write_file(Filename, io_lib:format("~p.~n",[stats()])).
+
+-spec from_file(Filename) -> msacc_data() when
+ Filename :: file:name_all().
+from_file(Filename) ->
+ {ok, [Stats]} = file:consult(Filename),
+ Stats.
+
+-spec print() -> ok.
+print() ->
+ print(stats()).
+
+-spec print(DataOrStats) -> ok when
+ DataOrStats :: msacc_data() | msacc_stats().
+print(Stats) ->
+ print(Stats, #{}).
+
+-spec print(DataOrStats, Options) -> ok when
+ DataOrStats :: msacc_data() | msacc_stats(),
+ Options :: msacc_print_options().
+print(Stats, Options) ->
+ print(group_leader(), Stats, Options).
+
+-spec print(FileOrDevice, DataOrStats, Options) -> ok when
+ FileOrDevice :: file:filename() | io:device(),
+ DataOrStats :: msacc_data() | msacc_stats(),
+ Options :: msacc_print_options().
+print(Filename, Stats, Options) when is_list(Filename) ->
+ case file:open(Filename,[write]) of
+ {ok, D} -> print(D, Stats, Options),file:close(D);
+ Error -> Error
+ end;
+print(Device, Stats, Options) ->
+ DefaultOpts = #{ system => false },
+ print_int(Device, Stats, maps:merge(DefaultOpts, Options)).
+print_int(Device, [#{ '$type' := msacc_data, id := _Id }|_] = Stats, Options) ->
+ TypeStats = stats(type, Stats),
+ io:format(Device, "~s", [print_stats_overview(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_header(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_threads(
+ stats(realtime, Stats), Options)]),
+ io:format(Device, "~s", [print_stats_type(
+ stats(realtime, TypeStats), Options)]);
+print_int(Device, [#{ '$type' := msacc_data }|_] = Stats, Options) ->
+ io:format(Device, "~s", [print_stats_header(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_type(
+ stats(realtime, Stats), Options)]);
+print_int(Device, [#{ '$type' := msacc_stats, id := _Id }|_] = Stats,Options) ->
+ io:format(Device, "~s", [print_stats_header(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_threads(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_type(
+ msacc:stats(type, Stats), Options)]);
+print_int(Device, [#{ '$type' := msacc_stats }|_] = Stats, Options) ->
+ io:format(Device, "~s", [print_stats_header(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_type(Stats, Options)]).
+
+
+-spec stats() -> msacc_data().
+stats() ->
+ Fun = fun F(K,{PerfCount,StateCount}) ->
+ %% Need to handle ERTS_MSACC_STATE_COUNTERS
+ {F(K,PerfCount),StateCount};
+ F(_K,PerfCount) ->
+ erlang:convert_time_unit(PerfCount, perf_counter, 1000000)
+ end,
+ UsStats = lists:map(
+ fun(#{ counters := Cnt } = M) ->
+ UsCnt = maps:map(Fun,Cnt),
+ M#{ '$type' => msacc_data, counters := UsCnt }
+ end, erlang:statistics(microstate_accounting)),
+ statssort(UsStats).
+
+-spec stats(Analysis, Stats) -> non_neg_integer() when
+ Analysis :: system_realtime | system_runtime,
+ Stats :: msacc_data();
+ (Analysis, Stats) -> msacc_stats() when
+ Analysis :: realtime | runtime,
+ Stats :: msacc_data();
+ (Analysis, StatsOrData) -> msacc_data() | msacc_stats() when
+ Analysis :: type,
+ StatsOrData :: msacc_data() | msacc_stats().
+stats(system_realtime, Stats) ->
+ lists:foldl(fun(#{ counters := Cnt }, Acc) ->
+ get_total(Cnt, Acc)
+ end, 0, Stats);
+stats(system_runtime, Stats) ->
+ lists:foldl(fun(#{ counters := Cnt }, Acc) ->
+ get_total(maps:remove(sleep, Cnt), Acc)
+ end, 0, Stats);
+stats(realtime, Stats) ->
+ RealTime = stats(system_realtime, Stats),
+ statssort([get_thread_perc(Thread, RealTime) || Thread <- Stats]);
+stats(runtime, Stats) ->
+ RunTime = stats(system_runtime, Stats),
+ statssort([get_thread_perc(T#{ counters := maps:remove(sleep,Cnt)}, RunTime)
+ || T = #{ counters := Cnt } <- Stats]);
+stats(type, Stats) ->
+ statssort(merge_threads(Stats, [])).
+
+print_stats_overview(Stats, _Options) ->
+ RunTime = stats(system_runtime, Stats),
+ RealTime = stats(system_realtime, Stats) div length(Stats),
+ SchedStats = [S || #{ type := scheduler } = S <- Stats],
+ AvgSchedRunTime = stats(system_runtime, SchedStats) div length(SchedStats),
+ NumSize = if
+ RealTime > RunTime -> length(integer_to_list(RealTime));
+ true -> length(integer_to_list(RunTime))
+ end,
+ [io_lib:format("Average thread real-time : ~*B us~n",
+ [NumSize, RealTime]),
+ io_lib:format("Accumulated system run-time : ~*B us~n",
+ [NumSize, RunTime]),
+ io_lib:format("Average scheduler run-time : ~*B us~n",
+ [NumSize, AvgSchedRunTime]),
+ io_lib:format("~n",[])].
+
+print_stats_threads(Stats, Options) ->
+ [io_lib:format("~nStats per thread:~n", []),
+ [print_thread_info(Thread, Options) || Thread <- Stats]].
+
+print_stats_type(Stats, Options) ->
+ [io_lib:format("~nStats per type:~n", []),
+ [print_thread_info(Thread, Options) || Thread <- Stats]].
+
+
+print_stats_header([#{ counters := Cnt }|_], #{ system := PrintSys }) ->
+ [io_lib:format("~14s", ["Thread"]),
+ map(fun(Counter, _) when PrintSys->
+ io_lib:format("~9s ", [atom_to_list(Counter)]);
+ (Counter, _) ->
+ io_lib:format("~9s", [atom_to_list(Counter)])
+ end, Cnt),
+ io_lib:format("~n",[])].
+
+print_thread_info(#{ '$type' := msacc_stats,
+ counters := Cnt } = Thread, #{ system := PrintSys }) ->
+ [case maps:find(id, Thread) of
+ error ->
+ io_lib:format("~14s", [atom_to_list(maps:get(type, Thread))]);
+ {ok, Id} ->
+ io_lib:format("~10s(~2B)", [atom_to_list(maps:get(type,Thread)),Id])
+ end,
+ map(fun(_Key, #{ thread := ThreadPerc, system := SystemPerc }) when PrintSys ->
+ io_lib:format("~6.2f%(~4.1f%)", [ThreadPerc, SystemPerc]);
+ (_Key, #{ thread := ThreadPerc }) ->
+ io_lib:format("~8.2f%", [ThreadPerc])
+ end, Cnt),
+ io_lib:format("~n",[])].
+
+get_total(Cnt, Base) ->
+ maps:fold(fun(_, {Val,_}, Time) ->
+ %% Have to handle ERTS_MSACC_STATE_COUNTERS
+ Time + Val;
+ (_, Val, Time) -> Time + Val
+ end, Base, Cnt).
+
+get_thread_perc(#{ '$type' := msacc_data, counters := Cnt } = Thread,
+ SystemTime) ->
+ ThreadTime = get_total(Cnt, 0),
+ Thread#{ '$type' := msacc_stats,
+ system => percentage(ThreadTime,SystemTime),
+ counters => get_thread_perc(Cnt, ThreadTime, SystemTime)}.
+get_thread_perc(Cnt, ThreadTime, SystemTime) ->
+ maps:map(fun F(Key, {Val, C}) ->
+ M = F(Key, Val),
+ M#{ cnt => C };
+ F(_Key, Val) ->
+ #{ thread => percentage(Val, ThreadTime),
+ system => percentage(Val, SystemTime) }
+ end, Cnt).
+
+%% This code is a little bit messy as it has to be able to deal with
+%% both [msacc_data()] and [msacc_stats()].
+merge_threads([#{ '$type' := msacc_stats,
+ type := Type,
+ counters := Cnt } = M0|R], Acc) ->
+ case keyfind(type, Type, Acc) of
+ false ->
+ merge_threads(R, [maps:remove(id,M0#{ threads => 1 })|Acc]);
+ #{ '$type' := msacc_stats, counters := Cnt0,
+ threads := Threads, system := System } = M ->
+ NewMap = M#{ counters := add_counters(Cnt, Cnt0),
+ system := System + maps:get(system, M0),
+ threads := Threads + 1},
+ NewAcc = keyreplace(type, Type, NewMap, Acc),
+ merge_threads(R, NewAcc)
+ end;
+merge_threads([], [#{ '$type' := msacc_stats,
+ system := System,
+ threads := Threads,
+ counters := Cnt} = M0|R]) ->
+ Counters = maps:map(fun(_,#{ thread := Thr } = Map) ->
+ Map#{ thread := Thr / Threads }
+ end, Cnt),
+ M = maps:remove(threads, M0),
+ [M#{ system := System, counters := Counters} | merge_threads([],R)];
+merge_threads([], []) ->
+ [];
+%% The clauses below deal with msacc_data()
+merge_threads([#{ '$type' := msacc_data,
+ type := Type,
+ counters := Cnt } = M0|R], Acc) ->
+ case keyfind(type, Type, Acc) of
+ false ->
+ merge_threads(R, [maps:remove(id,M0)|Acc]);
+ #{ '$type' := msacc_data, counters := Cnt0 } = M ->
+ NewMap = M#{ counters := add_counters(Cnt, Cnt0) },
+ NewAcc = keyreplace(type, Type, NewMap, Acc),
+ merge_threads(R, NewAcc)
+ end;
+merge_threads([], Acc) ->
+ Acc.
+
+add_counters(M1, M2) ->
+ maps:map(
+ fun(Key, #{ thread := Thr1, system := Sys1, cnt := Cnt1}) ->
+ %% Have to handle ERTS_MSACC_STATE_COUNTERS
+ #{ thread := Thr2, system := Sys2, cnt := Cnt2} = maps:get(Key, M2),
+ #{ thread => Thr1 + Thr2, system => Sys1 + Sys2,
+ cnt => Cnt1 + Cnt2 };
+ (Key, #{ thread := Thr1, system := Sys1}) ->
+ #{ thread := Thr2, system := Sys2} = maps:get(Key, M2),
+ #{ thread => Thr1 + Thr2, system => Sys1 + Sys2};
+ (Key, {V1,C1}) ->
+ %% Have to handle ERTS_MSACC_STATE_COUNTERS
+ {V2,C2} = maps:get(Key, M2),{V1+V2,C1+C2};
+ (Key, V1) -> maps:get(Key, M2) + V1
+ end, M1).
+
+percentage(Divident, Divisor) ->
+ if Divisor == 0 andalso Divident /= 0 ->
+ 100.0;
+ Divisor == 0 ->
+ 0.0;
+ true ->
+ Divident / Divisor * 100
+ end.
+
+keyfind(Key, Value, [H|T]) ->
+ case maps:find(Key, H) of
+ {ok, Value} ->
+ H;
+ _ ->
+ keyfind(Key, Value, T)
+ end;
+keyfind(_, _, []) ->
+ false.
+
+keyreplace(Key, Value, NewMap, [H|T]) ->
+ case maps:find(Key, H) of
+ {ok, Value} ->
+ [NewMap|T];
+ _ ->
+ [H|keyreplace(Key, Value, NewMap, T)]
+ end;
+keyreplace(_, _, _, []) ->
+ [].
+
+statssort(Stats) ->
+ lists:sort(fun(#{ type := Type1, id := Id1},
+ #{ type := Type2, id := Id2}) ->
+ {Type1, Id1} < {Type2, Id2};
+ (#{ type := Type1}, #{ type := Type2}) ->
+ Type1 < Type2
+ end, Stats).
+
+map(Fun,Map) ->
+ [ Fun(K,V) || {K,V} <- maps:to_list(Map) ].
diff --git a/lib/runtime_tools/src/observer_backend.erl b/lib/runtime_tools/src/observer_backend.erl
index 9177752cef..cedb677178 100644
--- a/lib/runtime_tools/src/observer_backend.erl
+++ b/lib/runtime_tools/src/observer_backend.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,8 @@
-export([vsn/0]).
%% observer stuff
--export([sys_info/0, get_table/3, get_table_list/2, fetch_stats/2]).
+-export([sys_info/0, get_port_list/0,
+ get_table/3, get_table_list/2, fetch_stats/2]).
%% etop stuff
-export([etop_collect/1]).
@@ -139,6 +140,15 @@ get_mnesia_loop(Parent, {Match, Cont}) ->
Parent ! {self(), Match},
get_mnesia_loop(Parent, mnesia:select(Cont)).
+get_port_list() ->
+ [begin
+ [{port_id,P}|erlang:port_info(P)] ++
+ case erlang:port_info(P,monitors) of
+ undefined -> [];
+ Monitors -> [Monitors]
+ end
+ end || P <- erlang:ports()].
+
get_table_list(ets, Opts) ->
HideUnread = proplists:get_value(unread_hidden, Opts, true),
HideSys = proplists:get_value(sys_hidden, Opts, true),
@@ -259,7 +269,8 @@ etop_collect(Collector) ->
case SchedulerWallTime of
undefined ->
- spawn(fun() -> flag_holder_proc(Collector) end);
+ spawn(fun() -> flag_holder_proc(Collector) end),
+ ok;
_ ->
ok
end,
@@ -334,8 +345,8 @@ ttb_init_node(MetaFile_0,PI,Traci) ->
MetaPid ! {metadata,Traci},
case PI of
true ->
- Proci = pnames(),
- MetaPid ! {metadata,Proci};
+ MetaPid ! {metadata,pnames()},
+ ok;
false ->
ok
end,
@@ -354,7 +365,8 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
erlang:trace_pattern({erlang,spawn_link,3},ReturnMS,[meta]),
erlang:trace_pattern({erlang,spawn_opt,1},ReturnMS,[meta]),
erlang:trace_pattern({erlang,register,2},[],[meta]),
- erlang:trace_pattern({global,register_name,2},[],[meta]);
+ erlang:trace_pattern({global,register_name,2},[],[meta]),
+ ok;
false ->
ok
end,
@@ -362,7 +374,8 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
case proplists:get_value(overload_check, SessionData) of
{Ms, M, F} ->
catch M:F(init),
- erlang:send_after(Ms, self(), overload_check);
+ erlang:send_after(Ms, self(), overload_check),
+ ok;
_ ->
ok
end,
@@ -371,10 +384,10 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
receive
{trace_ts,_,call,{erlang,register,[Name,Pid]},_} ->
- ttb_store_meta({pid,{Pid,Name}},MetaFile),
+ ok = ttb_store_meta({pid,{Pid,Name}},MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{trace_ts,_,call,{global,register_name,[Name,Pid]},_} ->
- ttb_store_meta({pid,{Pid,{global,Name}}},MetaFile),
+ ok = ttb_store_meta({pid,{Pid,{global,Name}}},MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{trace_ts,CallingPid,call,{erlang,spawn_opt,[{M,F,Args,_}]},_} ->
MFA = {M,F,length(Args)},
@@ -390,7 +403,7 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
NewAcc =
dict:update(CallingPid,
fun([H|T]) ->
- ttb_store_meta({pid,{NewPid,H}},MetaFile),
+ ok = ttb_store_meta({pid,{NewPid,H}},MetaFile),
T
end,
Acc),
@@ -408,22 +421,22 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
NewAcc =
dict:update(CallingPid,
fun([H|T]) ->
- ttb_store_meta({pid,{NewPid,H}},MetaFile),
+ ok = ttb_store_meta({pid,{NewPid,H}},MetaFile),
T
end,
Acc),
ttb_meta_tracer_loop(MetaFile,PI,NewAcc,State);
{metadata,Data} when is_list(Data) ->
- ttb_store_meta(Data,MetaFile),
+ ok = ttb_store_meta(Data,MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{metadata,Key,Fun} when is_function(Fun) ->
- ttb_store_meta([{Key,Fun()}],MetaFile),
+ ok = ttb_store_meta([{Key,Fun()}],MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{metadata,Key,What} ->
- ttb_store_meta([{Key,What}],MetaFile),
+ ok = ttb_store_meta([{Key,What}],MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
overload_check ->
{Ms, M, F} = proplists:get_value(overload_check, State),
@@ -439,7 +452,7 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
ttb_meta_tracer_loop(MetaFile,PI,Acc, State)
end;
{'DOWN', _, _, _, _} ->
- stop_seq_trace(),
+ _ = stop_seq_trace(),
self() ! stop,
ttb_meta_tracer_loop(MetaFile,PI,Acc, State);
stop when PI=:=true ->
@@ -528,7 +541,7 @@ ttb_store_meta(Data,MetaFile) ->
ttb_store_meta([Data],MetaFile).
ttb_write_binary(Fd,[H|T]) ->
- file:write(Fd,ttb_make_binary(H)),
+ ok = file:write(Fd,ttb_make_binary(H)),
ttb_write_binary(Fd,T);
ttb_write_binary(_Fd,[]) ->
ok.
@@ -585,9 +598,9 @@ ttb_fetch(MetaFile,{Port,Host}) ->
send_files({Sock,Host},[File|Files]) ->
{ok,Fd} = file:open(File,[raw,read,binary]),
- gen_tcp:send(Sock,<<1,(list_to_binary(filename:basename(File)))/binary>>),
+ ok = gen_tcp:send(Sock,<<1,(list_to_binary(filename:basename(File)))/binary>>),
send_chunks(Sock,Fd),
- file:delete(File),
+ ok = file:delete(File),
send_files({Sock,Host},Files);
send_files({_Sock,_Host},[]) ->
done.
diff --git a/lib/runtime_tools/src/percept_profile.erl b/lib/runtime_tools/src/percept_profile.erl
index d5ea2c7032..1e8e913b80 100644
--- a/lib/runtime_tools/src/percept_profile.erl
+++ b/lib/runtime_tools/src/percept_profile.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -87,7 +87,7 @@ start(Filename, Options) ->
start(Filename, {Module, Function, Args}, Options) ->
case whereis(percept_port) of
undefined ->
- profile_to_file(Filename, Options),
+ {ok, _} = profile_to_file(Filename, Options),
erlang:apply(Module, Function, Args),
stop();
Port ->
@@ -113,7 +113,7 @@ deliver_all_trace() ->
-spec stop() -> 'ok' | {'error', 'not_started'}.
stop() ->
- erlang:system_profile(undefined, [runnable_ports, runnable_procs]),
+ _ = erlang:system_profile(undefined, [runnable_ports, runnable_procs]),
erlang:trace(all, false, [procs, ports, timestamp]),
deliver_all_trace(),
case whereis(percept_port) of
@@ -158,7 +158,8 @@ set_tracer(Port, Opts) ->
{TOpts, POpts} = parse_profile_options(Opts),
% Setup profiling and tracing
erlang:trace(all, true, [{tracer, Port}, timestamp | TOpts]),
- erlang:system_profile(Port, POpts).
+ _ = erlang:system_profile(Port, POpts),
+ ok.
%% parse_profile_options
diff --git a/lib/runtime_tools/src/runtime_tools.app.src b/lib/runtime_tools/src/runtime_tools.app.src
index ad10655aa0..690c61a4c3 100644
--- a/lib/runtime_tools/src/runtime_tools.app.src
+++ b/lib/runtime_tools/src/runtime_tools.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,12 +22,13 @@
{vsn, "%VSN%"},
{modules, [appmon_info, dbg,observer_backend,percept_profile,
runtime_tools,runtime_tools_sup,erts_alloc_config,
- ttb_autostart,dyntrace,system_information]},
+ ttb_autostart,dyntrace,system_information,
+ msacc]},
{registered, [runtime_tools_sup]},
{applications, [kernel, stdlib]},
{env, []},
{mod, {runtime_tools, []}},
- {runtime_dependencies, ["stdlib-2.0","mnesia-4.12","kernel-3.0",
- "erts-7.0"]}]}.
+ {runtime_dependencies, ["stdlib-3.0","mnesia-4.12","kernel-5.0",
+ "erts-8.0"]}]}.
diff --git a/lib/runtime_tools/src/runtime_tools.appup.src b/lib/runtime_tools/src/runtime_tools.appup.src
index 883ff1e074..a42673c87e 100644
--- a/lib/runtime_tools/src/runtime_tools.appup.src
+++ b/lib/runtime_tools/src/runtime_tools.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/src/runtime_tools.erl b/lib/runtime_tools/src/runtime_tools.erl
index 62b9dfd71e..52ae5cc0eb 100644
--- a/lib/runtime_tools/src/runtime_tools.erl
+++ b/lib/runtime_tools/src/runtime_tools.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/src/runtime_tools_sup.erl b/lib/runtime_tools/src/runtime_tools_sup.erl
index e69b495cb5..efa37de42d 100644
--- a/lib/runtime_tools/src/runtime_tools_sup.erl
+++ b/lib/runtime_tools/src/runtime_tools_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/src/system_information.erl b/lib/runtime_tools/src/system_information.erl
index ad7ee7311c..df25297eb9 100644
--- a/lib/runtime_tools/src/system_information.erl
+++ b/lib/runtime_tools/src/system_information.erl
@@ -28,31 +28,26 @@
-behaviour(gen_server).
%% API
--export([
- report/0,
+-export([report/0,
from_file/1,
- to_file/1
- ]).
--export([
- start/0, stop/0,
- load_report/0, load_report/2,
- applications/0, applications/1,
- application/1, application/2,
- environment/0, environment/1,
- module/1, module/2,
- modules/1,
- sanity_check/0
- ]).
+ to_file/1]).
+
+-export([start/0, stop/0,
+ load_report/0, load_report/2,
+ applications/0, applications/1,
+ application/1, application/2,
+ environment/0, environment/1,
+ module/1, module/2,
+ modules/1,
+ sanity_check/0]).
%% gen_server callbacks
--export([
- init/1,
- handle_call/3,
- handle_cast/2,
- handle_info/2,
- terminate/2,
- code_change/3
- ]).
+-export([init/1,
+ handle_call/3,
+ handle_cast/2,
+ handle_info/2,
+ terminate/2,
+ code_change/3]).
-define(SERVER, ?MODULE).
@@ -70,14 +65,15 @@
start() ->
gen_server:start({local, ?SERVER}, ?MODULE, [], []).
+
stop() ->
- gen_server:call(?SERVER, stop).
+ gen_server:call(?SERVER, stop, infinity).
load_report() -> load_report(data, report()).
load_report(file, File) -> load_report(data, from_file(File));
load_report(data, Report) ->
- start(), gen_server:call(?SERVER, {load_report, Report}).
+ ok = start_internal(), gen_server:call(?SERVER, {load_report, Report}, infinity).
report() -> [
{init_arguments, init:get_arguments()},
@@ -120,22 +116,22 @@ from_file(File) ->
applications() -> applications([]).
applications(Opts) when is_list(Opts) ->
- gen_server:call(?SERVER, {applications, Opts}).
+ gen_server:call(?SERVER, {applications, Opts}, infinity).
application(App) when is_atom(App) -> application(App, []).
application(App, Opts) when is_atom(App), is_list(Opts) ->
- gen_server:call(?SERVER, {application, App, Opts}).
+ gen_server:call(?SERVER, {application, App, Opts}, infinity).
environment() -> environment([]).
environment(Opts) when is_list(Opts) ->
- gen_server:call(?SERVER, {environment, Opts}).
+ gen_server:call(?SERVER, {environment, Opts}, infinity).
module(M) when is_atom(M) -> module(M, []).
module(M, Opts) when is_atom(M), is_list(Opts) ->
- gen_server:call(?SERVER, {module, M, Opts}).
+ gen_server:call(?SERVER, {module, M, Opts}, infinity).
modules(Opt) when is_atom(Opt) ->
- gen_server:call(?SERVER, {modules, Opt}).
+ gen_server:call(?SERVER, {modules, Opt}, infinity).
-spec sanity_check() -> ok | {failed, Failures} when
@@ -225,6 +221,13 @@ code_change(_OldVsn, State, _Extra) ->
%% Internal functions
%%===================================================================
+start_internal() ->
+ case start() of
+ {ok,_} -> ok;
+ {error, {already_started,_}} -> ok;
+ Error -> Error
+ end.
+
%% handle report values
get_value([], Data) -> Data;
diff --git a/lib/runtime_tools/test/Makefile b/lib/runtime_tools/test/Makefile
index dcb9082231..61377ea09e 100644
--- a/lib/runtime_tools/test/Makefile
+++ b/lib/runtime_tools/test/Makefile
@@ -4,10 +4,12 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
MODULES = \
dyntrace_SUITE \
+ dyntrace_lttng_SUITE \
runtime_tools_SUITE \
system_information_SUITE \
dbg_SUITE \
- erts_alloc_config_SUITE
+ erts_alloc_config_SUITE \
+ msacc_SUITE
ERL_FILES= $(MODULES:%=%.erl)
@@ -26,7 +28,7 @@ RELSYSDIR = $(RELEASE_PATH)/runtime_tools_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/runtime_tools/test/dbg_SUITE.erl b/lib/runtime_tools/test/dbg_SUITE.erl
index 11dd753eed..4b0864858c 100644
--- a/lib/runtime_tools/test/dbg_SUITE.erl
+++ b/lib/runtime_tools/test/dbg_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,284 +20,494 @@
-module(dbg_SUITE).
%% Test functions
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- big/1, tiny/1, simple/1, message/1, distributed/1,
- ip_port/1, file_port/1, file_port2/1, file_port_schedfix/1,
- ip_port_busy/1, wrap_port/1, wrap_port_time/1,
- with_seq_trace/1, dead_suspend/1, local_trace/1,
- saved_patterns/1, tracer_exit_on_stop/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0,
+ big/1, tiny/1, simple/1, message/1, distributed/1, port/1,
+ send/1, recv/1,
+ ip_port/1, file_port/1, file_port2/1, file_port_schedfix/1,
+ ip_port_busy/1, wrap_port/1, wrap_port_time/1,
+ with_seq_trace/1, dead_suspend/1, local_trace/1,
+ saved_patterns/1, tracer_exit_on_stop/1,
+ erl_tracer/1, distributed_erl_tracer/1]).
-export([tracee1/1, tracee2/1]).
-export([dummy/0, exported/1]).
+-export([enabled/3, trace/5, load_nif/1]).
--include_lib("test_server/include/test_server.hrl").
--define(default_timeout, ?t:minutes(1)).
+-include_lib("common_test/include/ct.hrl").
-init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
- [big, tiny, simple, message, distributed, ip_port,
+ [big, tiny, simple, message, distributed, port, ip_port,
+ send, recv,
file_port, file_port2, file_port_schedfix, ip_port_busy,
wrap_port, wrap_port_time, with_seq_trace, dead_suspend,
- local_trace, saved_patterns, tracer_exit_on_stop].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
+ local_trace, saved_patterns, tracer_exit_on_stop,
+ erl_tracer, distributed_erl_tracer].
-end_per_group(_GroupName, Config) ->
- Config.
-
-big(suite) -> [];
-big(doc) -> ["Rudimentary interface test"];
+%% Rudimentary interface test
big(Config) when is_list(Config) ->
- ?line {ok,OldCurDir} = file:get_cwd(),
- Datadir=?config(data_dir, Config),
- Privdir=?config(priv_dir, Config),
- ?line ok=file:set_cwd(Privdir),
+ {ok,OldCurDir} = file:get_cwd(),
+ Datadir=proplists:get_value(data_dir, Config),
+ Privdir=proplists:get_value(priv_dir, Config),
+ ok=file:set_cwd(Privdir),
try
- %% make sure dbg is stopped (and returns correctly)
- ?line ok = dbg:stop(),
-
- %% compile test module and make sure it is loaded.
- ?line {ok,Mod} = compile:file(Datadir++"/dbg_test",[trace]),
- ?line code:purge(dbg_test),
- ?line {module, Mod}=code:load_file(dbg_test),
-
- %% run/debug a named test function.
- ?line Pid = spawn_link(dbg_test, loop, [Config]),
- ?line true = register(dbg_test_loop, Pid),
- ?line {ok,_} = dbg:tracer(),
- ?line {ok,[{matched, _node, 1}]} = dbg:p(dbg_test_loop, [m,p,c]),
- ?line ok = dbg:c(dbg_test, test, [Config]),
- ?line ok = dbg:i(),
- ?line dbg_test_loop ! {dbg_test, stop},
- unregister(dbg_test_loop),
- ?line ok = dbg:stop(),
-
- %% run/debug a Pid.
- ?line Pid2=spawn_link(dbg_test,loop,[Config]),
- ?line {ok,_} = dbg:tracer(),
- ?line {ok,[{matched, _node, 1}]} = dbg:p(Pid2,[s,r,p]),
- ?line ok = dbg:c(dbg_test, test, [Config]),
- ?line ok = dbg:i(),
- ?line Pid2 ! {dbg_test, stop},
-
- ?line ok=file:set_cwd(OldCurDir)
+ %% make sure dbg is stopped (and returns correctly)
+ ok = dbg:stop(),
+
+ %% compile test module and make sure it is loaded.
+ {ok,Mod} = compile:file(Datadir++"/dbg_test",[trace]),
+ code:purge(dbg_test),
+ {module, Mod}=code:load_file(dbg_test),
+
+ %% run/debug a named test function.
+ Pid = spawn_link(dbg_test, loop, [Config]),
+ true = register(dbg_test_loop, Pid),
+ {ok,_} = dbg:tracer(),
+ {ok,[{matched, _node, 1}]} = dbg:p(dbg_test_loop, [m,p,c]),
+ ok = dbg:c(dbg_test, test, [Config]),
+ ok = dbg:i(),
+ dbg_test_loop ! {dbg_test, stop},
+ unregister(dbg_test_loop),
+ ok = dbg:stop(),
+
+ %% run/debug a Pid.
+ Pid2=spawn_link(dbg_test,loop,[Config]),
+ {ok,_} = dbg:tracer(),
+ {ok,[{matched, _node, 1}]} = dbg:p(Pid2,[s,r,p]),
+ ok = dbg:c(dbg_test, test, [Config]),
+ ok = dbg:i(),
+ Pid2 ! {dbg_test, stop},
+
+ ok=file:set_cwd(OldCurDir)
after
- ?line dbg:stop()
+ dbg:stop()
end,
ok.
-tiny(suite) -> [];
-tiny(doc) -> ["Rudimentary interface test"];
+%% Rudimentary interface test
tiny(Config) when is_list(Config) ->
- ?line {ok,OldCurDir} = file:get_cwd(),
- Datadir=?config(data_dir, Config),
- Privdir=?config(priv_dir, Config),
- ?line ok=file:set_cwd(Privdir),
+ {ok,OldCurDir} = file:get_cwd(),
+ Datadir=proplists:get_value(data_dir, Config),
+ Privdir=proplists:get_value(priv_dir, Config),
+ ok=file:set_cwd(Privdir),
try
- %% compile test module and make sure it is loaded.
- ?line {ok, Mod} = compile:file(Datadir++"/dbg_test",[trace]),
- ?line code:purge(dbg_test),
- ?line {module, Mod}=code:load_file(dbg_test),
-
- ?line Pid=spawn_link(dbg_test,loop,[Config]),
- if
- is_pid(Pid) ->
- ?line dbg:tracer(),
- ?line {ok,[{matched, _node, 1}]} = dbg:p(Pid,[s,r,m,p,c]),
- ?line ok = dbg:c(dbg_test,test,[Config]),
- ?line ok = dbg:i(),
- ?line Pid ! {dbg_test, stop};
- true ->
- ?line ok=file:set_cwd(OldCurDir),
- ?t:fail("Could not spawn external test process.~n"),
- failure
- end
+ %% compile test module and make sure it is loaded.
+ {ok, Mod} = compile:file(Datadir++"/dbg_test",[trace]),
+ code:purge(dbg_test),
+ {module, Mod}=code:load_file(dbg_test),
+
+ Pid=spawn_link(dbg_test,loop,[Config]),
+ if
+ is_pid(Pid) ->
+ dbg:tracer(),
+ {ok,[{matched, _node, 1}]} = dbg:p(Pid,[s,r,m,p,c]),
+ ok = dbg:c(dbg_test,test,[Config]),
+ ok = dbg:i(),
+ Pid ! {dbg_test, stop};
+ true ->
+ ok=file:set_cwd(OldCurDir),
+ ct:fail("Could not spawn external test process.~n"),
+ failure
+ end
after
- ?line ok = dbg:stop(),
- ?line ok = file:set_cwd(OldCurDir)
+ ok = dbg:stop(),
+ ok = file:set_cwd(OldCurDir)
end,
ok.
-simple(suite) ->
- [];
-simple(doc) ->
- ["Simple interface test with own handler"];
+%% Simple interface test with own handler
simple(Config) when is_list(Config) ->
try
- ?line start(),
- ?line dbg:p(self(),call),
- ?line dbg:tp(dbg,ltp,[]),
- ?line dbg:ltp(),
- ?line stop(),
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]}}] = flush()
+ start(),
+ dbg:p(self(),call),
+ dbg:tp(dbg,ltp,[]),
+ dbg:ltp(),
+ stop(),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]}}] = flush()
after
- ?line dbg:stop()
+ dbg:stop()
end,
ok.
-message(suite) ->
- [];
-message(doc) ->
- ["Simple interface test with pam code that appends a message"];
+%% Simple interface test with pam code that appends a message
message(Config) when is_list(Config) ->
- ?line {ok, _} = start(),
+ {ok, _} = start(),
try
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(dbg,ltp,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, Saved}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(dbg,ln,Saved),
- ?line {value, {saved, Saved}} = lists:keysearch(saved, 1, Y),
- ?line ok = dbg:ltp(),
- ?line ok = dbg:ln()
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(dbg,ltp,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, Saved}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(dbg,ln,Saved),
+ {value, {saved, Saved}} = lists:keysearch(saved, 1, Y),
+ ok = dbg:ltp(),
+ ok = dbg:ln()
after
- ?line stop()
+ stop()
end,
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]},S},
- {trace,S,call,{dbg,ln,[]},S}] = flush(),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},S},
+ {trace,S,call,{dbg,ln,[]},S}] = flush(),
ok.
-distributed(suite) ->
- [];
-distributed(doc) ->
- ["Simple test of distributed tracing"];
+send(Config) when is_list(Config) ->
+ {ok, _} = start(),
+ Node = start_slave(),
+ rpc:call(Node, code, add_patha,
+ [filename:join(proplists:get_value(data_dir, Config), "..")]),
+ try
+ Echo = fun F() ->
+ receive {From, M} ->
+ From ! M,
+ F()
+ end
+ end,
+ Rcvr = spawn_link(Echo),
+ RemoteRcvr = spawn_link(Node, Echo),
+
+ {ok, [{matched, _, 1}]} = dbg:p(Rcvr, send),
+
+ send_test(Rcvr, make_ref(), true),
+
+ %% Test that the test case process is the receiving process
+ send_test(Rcvr, [{[self(),'_'],[],[]}]),
+
+ %% Test that self() is not the receiving process
+ {ok, [{matched, _node, 1}, {saved, 2}]} =
+ dbg:tpe(send, [{['$1','_'],[{'==','$1',{self}}],[]}]),
+ send_test(Rcvr, make_ref(), false),
+
+ %% Test that self() is the sending process
+ send_test(Rcvr, [{['_','_'],[{'==',Rcvr,{self}}],[]}]),
+
+ %% Test attaching a message
+ send_test(Rcvr, [{['_','_'],[{'==',Rcvr,{self}}],[{message, hello}]}],
+ make_ref(), hello),
+
+ %% Test using a saved trace pattern
+ send_test(Rcvr, 2, make_ref(), false),
+
+ %% Test clearing of trace pattern
+ {ok, [{matched, _node, 1}]} = dbg:ctpe(send),
+ send_test(Rcvr, make_ref(), true),
+
+ %% Test complex message inspection
+ Ref = make_ref(),
+ send_test(Rcvr,
+ [{['_','$2'],[{'==',Ref,{element,1,{element,2,'$2'}}}],[]}],
+ {test, {Ref}, <<0:(8*1024)>>}, true),
+
+ send_test(Rcvr, {test, {make_ref()}, <<0:(8*1024)>>}, false),
+
+ %% Test send to remote process
+ remote_send_test(Rcvr, RemoteRcvr, [], make_ref(), true),
+
+ remote_send_test(Rcvr, RemoteRcvr,
+ [{['$1','_'],[{'==',{node, '$1'},{node}}],[]}],
+ make_ref(), false),
+
+ remote_send_test(Rcvr, RemoteRcvr,
+ [{['$1','_'],[{'==',{node, '$1'},Node}],[]}],
+ make_ref(), true),
+
+ %% Test that distributed dbg works
+ dbg:tracer(Node, process, {fun myhandler/2, self()}),
+ Rcvr2 = spawn_link(Echo),
+ RemoteRcvr2 = spawn_link(Node, Echo),
+ dbg:p(Rcvr2, [send]),
+ dbg:p(RemoteRcvr2, [send]),
+ dbg:tpe(send, [{['_', hej],[],[]}]),
+
+ send_test(Rcvr2, make_ref(), false),
+ send_test(RemoteRcvr2, make_ref(), false),
+ send_test(Rcvr2, hej, true),
+ send_test(RemoteRcvr2, hej, true),
+
+ ok
+
+ after
+ stop()
+ end.
+
+send_test(Pid, Pattern, Msg, TraceEvent) ->
+ {ok, [{matched, _, _}, _]} = dbg:tpe(send, Pattern),
+ send_test(Pid, Msg, TraceEvent).
+send_test(Pid, Pattern) ->
+ send_test(Pid, Pattern, make_ref(), true).
+send_test(Pid, Msg, TraceEvent) ->
+ S = self(),
+ Pid ! {S, Msg},
+ receive Msg -> ok end,
+ send_test_rcv(Pid, Msg, S, TraceEvent).
+
+remote_send_test(Pid, RPid, Pattern, Msg, TraceEvent) ->
+ dbg:tpe(send, Pattern),
+ TMsg = {self(), Msg},
+ Pid ! {RPid, TMsg},
+ receive Msg -> ok end,
+ send_test_rcv(Pid, TMsg, RPid, TraceEvent).
+
+send_test_rcv(Pid, Msg, S, TraceEvent) ->
+ case flush() of
+ [] when not TraceEvent ->
+ ok;
+ [{trace, Pid, send, Msg, S}] when TraceEvent ->
+ ok;
+ [{trace, Pid, send, Msg, S, Message}] when TraceEvent == Message ->
+ ok;
+ Else ->
+ ct:fail({got_unexpected_message, Else})
+ end.
+
+recv(Config) when is_list(Config) ->
+ {ok, _} = start(),
+ Node = start_slave(),
+ rpc:call(Node, code, add_patha,
+ [filename:join(proplists:get_value(data_dir, Config), "..")]),
+ try
+ Echo = fun F() ->
+ receive {From, M} ->
+ From ! M,
+ F()
+ end
+ end,
+ Rcvr = spawn_link(Echo),
+ RemoteRcvr = spawn_link(Node, Echo),
+
+ {ok, [{matched, _, 1}]} = dbg:p(Rcvr, 'receive'),
+
+ recv_test(Rcvr, make_ref(), true),
+
+ %% Test that the test case process is the sending process
+ recv_test(Rcvr, [{[node(), self(), '_'],[],[]}]),
+
+ %% Test that self() is the not sending process
+ {ok, [{matched, _node, 1}, {saved, 2}]} =
+ dbg:tpe('receive', [{[node(), '$1','_'],[{'==','$1',{self}}],[]}]),
+ recv_test(Rcvr, make_ref(), false),
+
+ %% Test that self() is the receiving process
+ recv_test(Rcvr, [{'_',[{'==',Rcvr,{self}}],[]}]),
+
+ %% Test attaching a message
+ recv_test(Rcvr, [{'_',[{'==',Rcvr,{self}}],[{message, hello}]}],
+ make_ref(), hello),
+
+ %% Test using a saved trace pattern
+ recv_test(Rcvr, 2, make_ref(), false),
+
+ %% Test clearing of trace pattern
+ {ok, [{matched, _node, 1}]} = dbg:ctpe('receive'),
+ recv_test(Rcvr, make_ref(), true),
+
+ %% Test complex message inspection
+ Ref = make_ref(),
+ recv_test(Rcvr,
+ [{[node(), '_','$2'],[{'==',Ref,{element,1,
+ {element,2,
+ {element,2,'$2'}}}}],[]}],
+ {test, {Ref}, <<0:(8*1024)>>}, true),
+
+ recv_test(Rcvr, {test, {make_ref()}, <<0:(8*1024)>>}, false),
+
+ %% Test recv to remote process
+ remote_recv_test(RemoteRcvr, Rcvr, [], make_ref(), true),
+
+ remote_recv_test(RemoteRcvr, Rcvr,
+ [{['$1',undefined,'_'],[{'==','$1',{node}}],[]}],
+ make_ref(), false),
+
+ remote_recv_test(RemoteRcvr, Rcvr,
+ [{['$1',undefined,'_'],[{'==','$1',Node}],[]}],
+ make_ref(), true),
+
+ %% Test that distributed dbg works
+ dbg:tracer(Node, process, {fun myhandler/2, self()}),
+ Rcvr2 = spawn_link(Echo),
+ RemoteRcvr2 = spawn_link(Node, Echo),
+ dbg:p(Rcvr2, ['receive']),
+ dbg:p(RemoteRcvr2, ['receive']),
+ dbg:tpe('receive', [{[node(), '_', '$1'],[{'==',{element,2,'$1'}, hej}],[]}]),
+
+ recv_test(Rcvr2, make_ref(), false),
+ recv_test(RemoteRcvr2, make_ref(), false),
+ recv_test(Rcvr2, hej, true),
+ recv_test(RemoteRcvr2, hej, true),
+
+ ok
+
+ after
+ stop()
+ end.
+
+recv_test(Pid, Pattern, Msg, TraceEvent) ->
+ {ok, [{matched, _, _}, _]} = dbg:tpe('receive', Pattern),
+ recv_test(Pid, Msg, TraceEvent).
+recv_test(Pid, Pattern) ->
+ recv_test(Pid, Pattern, make_ref(), true).
+recv_test(Pid, Msg, TraceEvent) ->
+ S = self(),
+ Pid ! {S, Msg},
+ receive Msg -> ok end,
+ recv_test_rcv(Pid, {S, Msg}, TraceEvent).
+
+remote_recv_test(RPid, Pid, Pattern, Msg, TraceEvent) ->
+ dbg:tpe('receive', Pattern),
+ TMsg = {self(), Msg},
+ RPid ! {Pid, TMsg},
+ receive Msg -> ok end,
+ recv_test_rcv(Pid, TMsg, TraceEvent).
+
+recv_test_rcv(Pid, Msg, TraceEvent) ->
+ case flush() of
+ [] when not TraceEvent ->
+ ok;
+ [{trace, Pid, 'receive', Msg}] when TraceEvent ->
+ ok;
+ [{trace, Pid, 'receive', Msg, Message}] when TraceEvent == Message ->
+ ok;
+ Else ->
+ ct:fail({got_unexpected_message, Else})
+ end.
+
+%% Simple test of distributed tracing
distributed(Config) when is_list(Config) ->
- ?line {ok, _} = start(),
- ?line Node = start_slave(),
+ {ok, _} = start(),
+ Node = start_slave(),
try
- ?line RexPid = rpc:call(Node, erlang, whereis, [rex]),
- ?line RexPidList = pid_to_list(RexPid),
- ?line {ok, Node} = dbg:n(Node),
- ?line {ok, X} = dbg:p(all,call),
- ?line {value, {matched, Node, _}} = lists:keysearch(Node, 2, X),
- ?line {ok, Y} = dbg:p(RexPidList, s),
- ?line {value, {matched, Node, 1}} = lists:keysearch(Node, 2, Y),
- ?line {ok, Z} = dbg:tp(dbg,ltp,[]),
- ?line {value, {matched, Node, 1}} = lists:keysearch(Node, 2, Z),
- ?line dbg:cn(Node),
- ?line dbg:tp(dbg,ln,[]),
- ?line ok = rpc:call(Node, dbg, ltp, []),
- ?line ok = rpc:call(Node, dbg, ln, []),
- ?line ok = dbg:ln(),
- ?line S = self(),
- ?line {TraceSend, TraceCall} =
- lists:partition(fun ({trace,RP,send,_,_}) when RP =:= RexPid -> true;
- (_) -> false end,
- flush()),
- ?line [_|_] = TraceSend,
- ?line [{trace,Pid,call,{dbg,ltp,[]}},
- {trace,S,call,{dbg,ln,[]}}] = TraceCall,
- ?line Node = node(Pid),
- %%
- ?line stop()
+ RexPid = rpc:call(Node, erlang, whereis, [rex]),
+ RexPidList = pid_to_list(RexPid),
+ {ok, Node} = dbg:n(Node),
+ {ok, X} = dbg:p(all,call),
+ {value, {matched, Node, _}} = lists:keysearch(Node, 2, X),
+ {ok, Y} = dbg:p(RexPidList, s),
+ {value, {matched, Node, 1}} = lists:keysearch(Node, 2, Y),
+ {ok, Z} = dbg:tp(dbg,ltp,[]),
+ {value, {matched, Node, 1}} = lists:keysearch(Node, 2, Z),
+ dbg:cn(Node),
+ dbg:tp(dbg,ln,[]),
+ ok = rpc:block_call(Node, dbg, ltp, []),
+ ok = rpc:block_call(Node, dbg, ln, []),
+ ok = dbg:ln(),
+ S = self(),
+ {TraceSend, TraceCall} =
+ lists:partition(fun ({trace,RP,send,_,_}) when RP =:= RexPid -> true;
+ (_) -> false end,
+ flush()),
+ [_|_] = TraceSend,
+ [{trace,Pid,call,{dbg,ltp,[]}},
+ {trace,S,call,{dbg,ln,[]}}] = TraceCall,
+ Node = node(Pid),
+ %%
+ stop()
after
- ?line stop_slave(Node),
- ?line stop()
+ stop_slave(Node),
+ stop()
end,
ok.
-local_trace(suite) ->
- [];
-local_trace(doc) ->
- ["Tests tracing of local function calls."];
+%% Tests tracing of local function calls.
local_trace(Config) when is_list(Config) ->
- ?line {ok, _} = start(),
+ {ok, _} = start(),
try
- ?line S = self(),
- ?line %% Split "<X.Y.Z>" into {X, Y, Z}
- ?line "<"++L1 = L = pid_to_list(S),
- ?line NoDot = fun ($.) -> false; (_) -> true end,
- ?line {LX,"."++L2} = lists:splitwith(NoDot, L1),
- ?line {LY,"."++L3} = lists:splitwith(NoDot, L2),
- ?line ">"++L4 = lists:reverse(L3),
- ?line LZ = lists:reverse(L4),
- ?line X = 0 = list_to_integer(LX),
- ?line Y = list_to_integer(LY),
- ?line Z = list_to_integer(LZ),
- ?line XYZ = {X, Y, Z},
- ?line io:format("Self = ~w = ~w~n", [S,XYZ]),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(S,call),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(XYZ,call),
- if Z =:= 0 ->
- ?line {ok, [{matched, _node, 1}]} = dbg:p(Y,call);
- true -> ok
- end,
- ?line {ok, [{matched, _node, 1}]} = dbg:p(L,call),
- ?line {ok, _} = dbg:tpl(?MODULE,not_exported,[]),
- ?line 4 = not_exported(2),
- ?line [{trace,S,call,{?MODULE,not_exported,[2]}}] = flush(),
- ?line {ok, _} = dbg:tp(?MODULE,exported,[]),
- ?line 4 = ?MODULE:exported(2),
- ?line [{trace,S,call,{?MODULE,exported,[2]}},
- {trace,S,call,{?MODULE,not_exported,[2]}}] = flush(),
- ?line {ok, _} = dbg:ctpl(?MODULE),
- ?line 4 = ?MODULE:exported(2),
- ?line [{trace,S,call,{?MODULE,exported,[2]}}] = flush(),
- ?line {ok, _} = dbg:tpl(?MODULE,not_exported,[]),
- ?line {ok, _} = dbg:ctp(?MODULE),
- ?line 4 = ?MODULE:exported(2),
- ?line [] = flush(),
- ?line {ok, _} = dbg:tpl(?MODULE,not_exported,x),
- ?line catch ?MODULE:exported(x),
- ?line [{trace,S,call,{dbg_SUITE,not_exported,[x]}},
- {trace,S,exception_from,
- {dbg_SUITE,not_exported,1},
- {error,badarith}}] = flush()
+ S = self(),
+ %% Split "<X.Y.Z>" into {X, Y, Z}
+ "<"++L1 = L = pid_to_list(S),
+ NoDot = fun ($.) -> false; (_) -> true end,
+ {LX,"."++L2} = lists:splitwith(NoDot, L1),
+ {LY,"."++L3} = lists:splitwith(NoDot, L2),
+ ">"++L4 = lists:reverse(L3),
+ LZ = lists:reverse(L4),
+ X = 0 = list_to_integer(LX),
+ Y = list_to_integer(LY),
+ Z = list_to_integer(LZ),
+ XYZ = {X, Y, Z},
+ io:format("Self = ~w = ~w~n", [S,XYZ]),
+ {ok, [{matched, _node, 1}]} = dbg:p(S,call),
+ {ok, [{matched, _node, 1}]} = dbg:p(XYZ,call),
+ if Z =:= 0 ->
+ {ok, [{matched, _node, 1}]} = dbg:p(Y,call);
+ true -> ok
+ end,
+ {ok, [{matched, _node, 1}]} = dbg:p(L,call),
+ {ok, _} = dbg:tpl(?MODULE,not_exported,[]),
+ 4 = not_exported(2),
+ [{trace,S,call,{?MODULE,not_exported,[2]}}] = flush(),
+ {ok, _} = dbg:tp(?MODULE,exported,[]),
+ 4 = ?MODULE:exported(2),
+ [{trace,S,call,{?MODULE,exported,[2]}},
+ {trace,S,call,{?MODULE,not_exported,[2]}}] = flush(),
+ {ok, _} = dbg:ctpl(?MODULE),
+ 4 = ?MODULE:exported(2),
+ [{trace,S,call,{?MODULE,exported,[2]}}] = flush(),
+ {ok, _} = dbg:tpl(?MODULE,not_exported,[]),
+ {ok, _} = dbg:ctp(?MODULE),
+ 4 = ?MODULE:exported(2),
+ [] = flush(),
+ {ok, _} = dbg:tpl(?MODULE,not_exported,x),
+ catch ?MODULE:exported(x),
+ [{trace,S,call,{dbg_SUITE,not_exported,[x]}},
+ {trace,S,exception_from,
+ {dbg_SUITE,not_exported,1},
+ {error,badarith}}] = flush()
after
- ?line stop()
+ stop()
end,
ok.
-saved_patterns(suite) ->
- [];
-saved_patterns(doc) ->
- ["Tests saving of match_spec's."];
+%% Test that tracing on port works
+port(Config) when is_list(Config) ->
+ try
+ S = self(),
+ start(),
+ TestFile = filename:join(proplists:get_value(priv_dir, Config),"port_test"),
+ Fun = dbg:trace_port(file, TestFile),
+
+ %% Do a run to get rid of all extra port operations
+ port_close(Fun()),
+
+ dbg:p(new,ports),
+ Port = Fun(),
+ port_close(Port),
+ stop(),
+
+ TraceFileDrv = list_to_atom(lists:flatten(["trace_file_drv n ",TestFile])),
+ [{trace,Port,open,S,TraceFileDrv},
+ {trace,Port,getting_linked,S},
+ {trace,Port,closed,normal},
+ {trace,Port,unlink,S}] = flush()
+ after
+ dbg:stop()
+ end,
+ ok.
+
+%% Tests saving of match_spec's.
saved_patterns(Config) when is_list(Config) ->
- ?line dbg:stop(),
- ?line {ok,[{saved,1}]} =
- dbg:tp(dbg,ctp,1,[{'_',[],[{message, blahonga}]}]),
- ?line {ok,[{saved,2}]} =
- dbg:tp(dbg,ctp,1,[{['_'],[],[{message, blahonga}]}]),
- ?line Privdir=?config(priv_dir, Config),
- ?line file:make_dir(Privdir),
- ?line File = filename:join([Privdir, "blahonga.ms"]),
- ?line dbg:wtp(File),
- ?line dbg:stop(),
- ?line dbg:ctp('_','_','_'),
- ?line {ok, _} = start(),
+ dbg:stop(),
+ {ok,[{saved,1}]} =
+ dbg:tp(dbg,ctp,1,[{'_',[],[{message, blahonga}]}]),
+ {ok,[{saved,2}]} =
+ dbg:tp(dbg,ctp,1,[{['_'],[],[{message, blahonga}]}]),
+ Privdir=proplists:get_value(priv_dir, Config),
+ file:make_dir(Privdir),
+ File = filename:join([Privdir, "blahonga.ms"]),
+ dbg:wtp(File),
+ dbg:stop(),
+ dbg:ctp('_','_','_'),
+ {ok, _} = start(),
try
- ?line dbg:rtp(File),
- ?line {ok,[{matched,_node,1},{saved,1}]} = dbg:tp(dbg,ltp,0,1),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line dbg:ltp(),
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]},blahonga}] = flush()
+ dbg:rtp(File),
+ {ok,[{matched,_node,1},{saved,1}]} = dbg:tp(dbg,ltp,0,1),
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ dbg:ltp(),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},blahonga}] = flush()
after
- ?line stop()
+ stop()
end,
ok.
@@ -309,148 +519,132 @@ not_exported(N) ->
exported(N) ->
not_exported(N).
-ip_port(suite) ->
- [];
-ip_port(doc) ->
- ["Test tracing to IP port"];
+%% Test tracing to IP port
ip_port(Config) when is_list(Config) ->
- ?line stop(),
- ?line Port = dbg:trace_port(ip, 0),
- ?line {ok, _} = dbg:tracer(port, Port),
+ stop(),
+ Port = dbg:trace_port(ip, 0),
+ {ok, _} = dbg:tracer(port, Port),
try
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
- ?line {value, {saved, _}} = lists:keysearch(saved, 1, Y),
- ?line ok = dbg:ltp(),
- ?line ok = dbg:ln(),
- ?line {ok, IpPort} = dbg:trace_port_control(get_listen_port),
- ?line io:format("IpPort = ~p~n", [IpPort]),
- ?line dbg:trace_client(ip, IpPort, {fun myhandler/2, self()}),
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]},S},
- {trace,S,call,{dbg,ln,[]},hej}] = flush()
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
+ {value, {saved, _}} = lists:keysearch(saved, 1, Y),
+ ok = dbg:ltp(),
+ ok = dbg:ln(),
+ {ok, IpPort} = dbg:trace_port_control(get_listen_port),
+ io:format("IpPort = ~p~n", [IpPort]),
+ dbg:trace_client(ip, IpPort, {fun myhandler/2, self()}),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},S},
+ {trace,S,call,{dbg,ln,[]},hej}] = flush()
after
- ?line stop()
+ stop()
end,
ok.
-ip_port_busy(suite) ->
- [];
-ip_port_busy(doc) ->
- ["Test that the dbg server does not hang if the tracer don't start ",
- "(OTP-3592)"];
+%% Test that the dbg server does not hang if the tracer don't start (OTP-3592)
ip_port_busy(Config) when is_list(Config) ->
- ?line stop(),
- ?line Tracer = dbg:trace_port(ip, 4745),
- ?line Port = Tracer(),
- ?line {error, Reason} = dbg:tracer(port, Tracer),
+ stop(),
+ Tracer = dbg:trace_port(ip, 4745),
+ Port = Tracer(),
+ {error, Reason} = dbg:tracer(port, Tracer),
try
- ?line io:format("Error reason = ~p~n", [Reason]),
- ?line true = port_close(Port)
+ io:format("Error reason = ~p~n", [Reason]),
+ true = port_close(Port)
after
- ?line dbg:stop()
+ dbg:stop()
end,
- ?line ok.
+ ok.
-file_port(suite) ->
- [];
-file_port(doc) ->
- ["Test tracing to file port (simple)"];
+%% Test tracing to file port (simple)
file_port(Config) when is_list(Config) ->
- ?line stop(),
- ?line {A,B,C} = erlang:now(),
- ?line FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
- integer_to_list(B) ++ "-" ++ integer_to_list(C),
- ?line FName = filename:join([?config(data_dir, Config), FTMP]),
- ?line Port = dbg:trace_port(file, FName),
- ?line {ok, _} = dbg:tracer(port, Port),
+ stop(),
+ {A,B,C} = erlang:now(),
+ FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
+ integer_to_list(B) ++ "-" ++ integer_to_list(C),
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
+ Port = dbg:trace_port(file, FName),
+ {ok, _} = dbg:tracer(port, Port),
try
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
- ?line {value, {saved, _}} = lists:keysearch(saved, 1, Y),
- ?line ok = dbg:ltp(),
- ?line ok = dbg:ln(),
- ?line stop(),
- ?line dbg:trace_client(file, FName, {fun myhandler/2, self()}),
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]},S},
- {trace,S,call,{dbg,ln,[]},hej},
- end_of_trace] = flush()
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
+ {value, {saved, _}} = lists:keysearch(saved, 1, Y),
+ ok = dbg:ltp(),
+ ok = dbg:ln(),
+ stop(),
+ dbg:trace_client(file, FName, {fun myhandler/2, self()}),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},S},
+ {trace,S,call,{dbg,ln,[]},hej},
+ end_of_trace] = flush()
after
- ?line stop(),
- ?line file:delete(FName)
+ stop(),
+ file:delete(FName)
end,
ok.
-file_port2(suite) ->
- [];
-file_port2(doc) ->
- ["Test tracing to file port with 'follow_file'"];
+%% Test tracing to file port with 'follow_file'
file_port2(Config) when is_list(Config) ->
stop(),
{A,B,C} = erlang:now(),
FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++
- "-" ++ integer_to_list(B) ++ "-" ++ integer_to_list(C),
- FName = filename:join([?config(data_dir, Config), FTMP]),
+ "-" ++ integer_to_list(B) ++ "-" ++ integer_to_list(C),
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
%% Ok, lets try with flush and follow_file, not a chance on VxWorks
%% with NFS caching...
Port2 = dbg:trace_port(file, FName),
{ok, _} = dbg:tracer(port, Port2),
try
- {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- {ok, _} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
- {ok, _} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
- ok = dbg:ltp(),
- ok = dbg:flush_trace_port(),
- dbg:trace_client(follow_file, FName,
- {fun myhandler/2, self()}),
- S = self(),
- [{trace,S,call,{dbg,ltp,[]},S}] = flush(),
- ok = dbg:ln(),
- ok = dbg:flush_trace_port(),
- receive after 1000 -> ok end, %% Polls every second...
- [{trace,S,call,{dbg,ln,[]},hej}] = flush(),
- stop(),
- [] = flush()
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, _} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
+ {ok, _} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
+ ok = dbg:ltp(),
+ ok = dbg:flush_trace_port(),
+ dbg:trace_client(follow_file, FName,
+ {fun myhandler/2, self()}),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},S}] = flush(),
+ ok = dbg:ln(),
+ ok = dbg:flush_trace_port(),
+ receive after 1000 -> ok end, %% Polls every second...
+ [{trace,S,call,{dbg,ln,[]},hej}] = flush(),
+ stop(),
+ [] = flush()
after
- stop(),
- file:delete(FName)
+ stop(),
+ file:delete(FName)
end,
ok.
-file_port_schedfix(suite) ->
- [];
-file_port_schedfix(doc) ->
- ["Test that the scheduling timestamp fix for trace flag 'running' works."];
+%% Test that the scheduling timestamp fix for trace flag 'running' works.
file_port_schedfix(Config) when is_list(Config) ->
- ?line case (catch erlang:system_info(smp_support)) of
- true ->
- {skip, "No schedule fix on SMP"};
- _ ->
- try
- file_port_schedfix1(Config)
- after
- dbg:stop()
- end
- end.
+ case (catch erlang:system_info(smp_support)) of
+ true ->
+ {skip, "No schedule fix on SMP"};
+ _ ->
+ try
+ file_port_schedfix1(Config)
+ after
+ dbg:stop()
+ end
+ end.
file_port_schedfix1(Config) when is_list(Config) ->
- ?line stop(),
- ?line {A,B,C} = erlang:now(),
- ?line FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++
- "-" ++ integer_to_list(B) ++ "-" ++ integer_to_list(C),
- ?line FName = filename:join([?config(data_dir, Config), FTMP]),
+ stop(),
+ {A,B,C} = erlang:now(),
+ FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++
+ "-" ++ integer_to_list(B) ++ "-" ++ integer_to_list(C),
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
%%
- ?line Port = dbg:trace_port(file, {FName, wrap, ".wraplog", 8*1024, 4}),
- ?line {ok, _} = dbg:tracer(port, Port),
- ?line {ok,[{matched,_node,0}]} = dbg:p(new,[running,procs,send,timestamp]),
+ Port = dbg:trace_port(file, {FName, wrap, ".wraplog", 8*1024, 4}),
+ {ok, _} = dbg:tracer(port, Port),
+ {ok,[{matched,_node,0}]} = dbg:p(new,[running,procs,send,timestamp]),
%%
%% Generate the trace data
%%
@@ -471,146 +665,135 @@ file_port_schedfix1(Config) when is_list(Config) ->
%% execution time. Wallclock. A normal result is about 10 times more
%% without schedule in - schedule out compensation (OTP-3938).
%%
- ?line ok = token_volleyball(3, 4, 8),
+ ok = token_volleyball(3, 4, 8),
+ %%
+ {ok,[{matched,_,_}]} = dbg:p(all, [clear]),
+ stop(),
%%
- ?line {ok,[{matched,_,_}]} = dbg:p(all, [clear]),
- ?line stop(),
- % Some debug code to run on all platforms, for finding the fault on genny
- % Dont touch please /PaN
- ?line io:format("Trace dump by PaN BEGIN~n"),
- ?line dbg:trace_client(file,{FName, wrap, ".wraplog"},{fun(end_of_trace,Pid)-> Pid ! done; (Mesg,Pid) -> io:format("~w~n",[Mesg]),Pid end,self()}),
- receive done -> ok end,
- ?line io:format("Trace dump by PaN END~n"),
- %%
%% Get the trace result
%%
- ?line Tag = make_ref(),
- ?line dbg:trace_client(file, {FName, wrap, ".wraplog"},
- {fun schedstat_handler/2, {self(), Tag, []}}),
- ?line Result =
- receive
- {Tag, D} ->
- lists:map(
- fun({Pid, {A1, B1, C1}}) ->
- {Pid, C1/1000000 + B1 + A1*1000000}
- end,
- D)
- end,
- ?line ok = io:format("Result=~p", [Result]),
-% erlang:display({?MODULE, ?LINE, Result}),
+ Tag = make_ref(),
+ dbg:trace_client(file, {FName, wrap, ".wraplog"},
+ {fun schedstat_handler/2, {self(), Tag, []}}),
+ Result =
+ receive
+ {Tag, D} ->
+ lists:map(
+ fun({Pid, {A1, B1, C1}}) ->
+ {Pid, C1/1000000 + B1 + A1*1000000}
+ end,
+ D)
+ end,
+ ok = io:format("Result=~p", [Result]),
+ % erlang:display({?MODULE, ?LINE, Result}),
%%
%% Analyze the result
%%
- ?line {Min, Max} =
- lists:foldl(
- fun({_Pid, M}, {Mi, Ma}) ->
- {if M < Mi -> M; true -> Mi end,
- if M > Ma -> M; true -> Ma end}
- end,
- {void, 0},
- Result),
+ {Min, Max} = lists:foldl(fun({_Pid, M}, {Mi, Ma}) ->
+ {if M < Mi -> M; true -> Mi end,
+ if M > Ma -> M; true -> Ma end}
+ end,
+ {void, 0},
+ Result),
% More PaN debug
- ?line io:format("Min = ~f, Max = ~f~n",[Min,Max]),
+ io:format("Min = ~f, Max = ~f~n",[Min,Max]),
%%
%% Cleanup
%%
- ?line ToBeDeleted = filelib:wildcard(FName++"*"++".wraplog"),
- ?line lists:map(fun file:delete/1, ToBeDeleted),
-% io:format("ToBeDeleted=~p", [ToBeDeleted]),
+ ToBeDeleted = filelib:wildcard(FName++"*"++".wraplog"),
+ lists:map(fun file:delete/1, ToBeDeleted),
+ % io:format("ToBeDeleted=~p", [ToBeDeleted]),
%%
%% Present the result
%%
P = (Max / Min - 1) * 100,
BottomLine = lists:flatten(io_lib:format("~.2f %", [P])),
if P > 100 ->
- Reason = {BottomLine, '>', "100%"},
- erlang:display({file_port_schedfix, fail, Reason}),
- test_server:fail(Reason);
+ Reason = {BottomLine, '>', "100%"},
+ erlang:display({file_port_schedfix, fail, Reason}),
+ ct:fail(Reason);
true ->
- {comment, BottomLine}
+ {comment, BottomLine}
end.
-wrap_port(suite) ->
- [];
-wrap_port(doc) ->
- ["Test tracing to wrapping file port"];
+%% Test tracing to wrapping file port
wrap_port(Config) when is_list(Config) ->
- ?line Self = self(),
- ?line stop(),
- ?line {A,B,C} = erlang:now(),
- ?line FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
- integer_to_list(B) ++ "-" ++ integer_to_list(C) ++ "-",
- ?line FName = filename:join([?config(data_dir, Config), FTMP]),
- ?line FNameWildcard = FName++"*"++".trace",
+ Self = self(),
+ stop(),
+ {A,B,C} = erlang:now(),
+ FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
+ integer_to_list(B) ++ "-" ++ integer_to_list(C) ++ "-",
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
+ FNameWildcard = FName++"*"++".trace",
%% WrapSize=0 and WrapCnt=11 will force the trace to wrap after
%% every trace message, and to contain only the last 10 entries
%% after trace stop since the last file will be empty waiting
%% for its first trace message.
- ?line WrapSize = 0,
- ?line WrapCnt = 11,
- ?line WrapFilesSpec = {FName, wrap, ".trace", WrapSize, WrapCnt},
- ?line wrap_port_init(WrapFilesSpec),
+ WrapSize = 0,
+ WrapCnt = 11,
+ WrapFilesSpec = {FName, wrap, ".trace", WrapSize, WrapCnt},
+ wrap_port_init(WrapFilesSpec),
%% The number of iterations, N, is tested to place wrap the log,
%% giving a gap in the filename sequence at index 3.
%% This should be a difficult case for
%% the trace_client file sorting functionality.
N = 7,
- ?line lists:foreach(
- fun(Cnt) ->
- ?MODULE:tracee1(Cnt),
- ?MODULE:tracee2(Cnt)
- end,
- lists:seq(1, N)),
- ?line stop(),
+ lists:foreach(
+ fun(Cnt) ->
+ ?MODULE:tracee1(Cnt),
+ ?MODULE:tracee2(Cnt)
+ end,
+ lists:seq(1, N)),
+ stop(),
try
- ?line Files1 = filelib:wildcard(FNameWildcard),
- ?line io:format("~p~n", [Files1]),
- ?line Tc1 = dbg:trace_client(file, WrapFilesSpec,
- {fun myhandler/2, {wait_for_go,Self}}),
- ?line Tref1 = erlang:monitor(process, Tc1),
- Tc1 ! {go,Self},
- ?line [{'DOWN',Tref1,_,_,normal},
- end_of_trace
- |Result] = lists:reverse(flush()),
- ?line M = N - (WrapCnt-1) div 2,
- ?line M = wrap_port_result(Result, Self, N),
- %%
- %% Start a new wrap log with the same name to verify that
- %% all files are cleared at wrap log start. Only produce
- %% two trace messages to also place the gap at index 3,
- %% so the trace log will be misinterpreted.
- %%
- ?line wrap_port_init(WrapFilesSpec),
- ?line Files2 = filelib:wildcard(FNameWildcard),
- ?line io:format("~p~n", [Files2]),
- ?line -1 = ?MODULE:tracee1(-1),
- ?line -1 = ?MODULE:tracee2(-1),
- ?line stop(),
- ?line Files = filelib:wildcard(FNameWildcard),
- ?line io:format("~p~n", [Files]),
- ?line Tc2 = dbg:trace_client(file, WrapFilesSpec,
- {fun myhandler/2, {wait_for_go,Self}}),
- ?line Tref2 = erlang:monitor(process, Tc2),
- Tc2 ! {go,Self},
- ?line [{trace,Self,call,{?MODULE,tracee1,[-1]},Self},
- {trace,Self,call,{?MODULE,tracee2,[-1]},hej},
- end_of_trace,
- {'DOWN',Tref2,_,_,normal}] = flush(),
- %%
- ?line lists:map(fun(F) -> file:delete(F) end, Files)
+ Files1 = filelib:wildcard(FNameWildcard),
+ io:format("~p~n", [Files1]),
+ Tc1 = dbg:trace_client(file, WrapFilesSpec,
+ {fun myhandler/2, {wait_for_go,Self}}),
+ Tref1 = erlang:monitor(process, Tc1),
+ Tc1 ! {go,Self},
+ [{'DOWN',Tref1,_,_,normal},
+ end_of_trace
+ |Result] = lists:reverse(flush()),
+ M = N - (WrapCnt-1) div 2,
+ M = wrap_port_result(Result, Self, N),
+ %%
+ %% Start a new wrap log with the same name to verify that
+ %% all files are cleared at wrap log start. Only produce
+ %% two trace messages to also place the gap at index 3,
+ %% so the trace log will be misinterpreted.
+ %%
+ wrap_port_init(WrapFilesSpec),
+ Files2 = filelib:wildcard(FNameWildcard),
+ io:format("~p~n", [Files2]),
+ -1 = ?MODULE:tracee1(-1),
+ -1 = ?MODULE:tracee2(-1),
+ stop(),
+ Files = filelib:wildcard(FNameWildcard),
+ io:format("~p~n", [Files]),
+ Tc2 = dbg:trace_client(file, WrapFilesSpec,
+ {fun myhandler/2, {wait_for_go,Self}}),
+ Tref2 = erlang:monitor(process, Tc2),
+ Tc2 ! {go,Self},
+ [{trace,Self,call,{?MODULE,tracee1,[-1]},Self},
+ {trace,Self,call,{?MODULE,tracee2,[-1]},hej},
+ end_of_trace,
+ {'DOWN',Tref2,_,_,normal}] = flush(),
+ %%
+ lists:map(fun(F) -> file:delete(F) end, Files)
after
- ?line stop()
+ stop()
end,
ok.
wrap_port_init(WrapFilesSpec) ->
- ?line Port = dbg:trace_port(file, WrapFilesSpec),
- ?line {ok, _} = dbg:tracer(port, Port),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(?MODULE, tracee1,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(?MODULE, tracee2, [{'_',[],[{message, hej}]}]),
- ?line {value, {saved, _}} = lists:keysearch(saved, 1, Y),
+ Port = dbg:trace_port(file, WrapFilesSpec),
+ {ok, _} = dbg:tracer(port, Port),
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(?MODULE, tracee1,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(?MODULE, tracee2, [{'_',[],[{message, hej}]}]),
+ {value, {saved, _}} = lists:keysearch(saved, 1, Y),
ok.
tracee1(X) ->
@@ -622,106 +805,96 @@ tracee2(X) ->
wrap_port_result([], _S, M) ->
M;
wrap_port_result([{trace, S, call, {?MODULE, tracee2, [M]}, hej},
- {trace, S, call, {?MODULE, tracee1, [M]}, S} | Tail],
- S,
- M) ->
+ {trace, S, call, {?MODULE, tracee1, [M]}, S} | Tail],
+ S,
+ M) ->
wrap_port_result(Tail, S, M-1).
-wrap_port_time(suite) ->
- [];
-wrap_port_time(doc) ->
- ["Test tracing to time limited wrapping file port"];
+%% Test tracing to time limited wrapping file port
wrap_port_time(Config) when is_list(Config) ->
- ?line stop(),
- ?line {A,B,C} = erlang:now(),
- ?line FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
- integer_to_list(B) ++ "-" ++ integer_to_list(C) ++ "-",
- ?line FName = filename:join([?config(data_dir, Config), FTMP]),
+ stop(),
+ {A,B,C} = erlang:now(),
+ FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
+ integer_to_list(B) ++ "-" ++ integer_to_list(C) ++ "-",
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
%% WrapTime=2 and WrapCnt=4 will force the trace to wrap after
%% every 2 seconds, and to contain between 3*2 and 4*2 seconds
%% of trace entries.
- ?line WrapFilesSpec = {FName, wrap, ".trace", {time, 2000}, 4},
- ?line Port = dbg:trace_port(file, WrapFilesSpec),
- ?line {ok, _} = dbg:tracer(port, Port),
+ WrapFilesSpec = {FName, wrap, ".trace", {time, 2000}, 4},
+ Port = dbg:trace_port(file, WrapFilesSpec),
+ {ok, _} = dbg:tracer(port, Port),
try
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(?MODULE, tracee1,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, _Saved1}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(?MODULE, tracee2, [{'_',[],[{message, hej}]}]),
- ?line {value, {saved, _Saved2}} = lists:keysearch(saved, 1, Y),
- %% The delays in the iterations places two trace messages in each
- %% trace file, but the last which is empty waiting for its first
- %% trace message. The number of iterations is chosen so that
- %% one trace file has been wasted, and therefore the first pair
- %% of trace messages.
- ?line lists:foreach(
- fun(Cnt) ->
- receive after 1000 -> ok end,
- ?MODULE:tracee1(Cnt),
- ?MODULE:tracee2(Cnt),
- receive after 1100 -> ok end
- end,
- lists:seq(1, 4)),
- ?line stop(),
- ?line Files = filelib:wildcard(FName ++ "*" ++ ".trace"),
- ?line io:format("~p~n", [Files]),
- ?line dbg:trace_client(file, WrapFilesSpec, {fun myhandler/2, self()}),
- ?line S = self(),
- ?line [{trace, S, call, {?MODULE, tracee1, [2]}, S},
- {trace, S, call, {?MODULE, tracee2, [2]}, hej},
- {trace, S, call, {?MODULE, tracee1, [3]}, S},
- {trace, S, call, {?MODULE, tracee2, [3]}, hej},
- {trace, S, call, {?MODULE, tracee1, [4]}, S},
- {trace, S, call, {?MODULE, tracee2, [4]}, hej},
- end_of_trace] = flush(),
- ?line lists:map(fun(F) -> file:delete(F) end, Files)
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(?MODULE, tracee1,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, _Saved1}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(?MODULE, tracee2, [{'_',[],[{message, hej}]}]),
+ {value, {saved, _Saved2}} = lists:keysearch(saved, 1, Y),
+ %% The delays in the iterations places two trace messages in each
+ %% trace file, but the last which is empty waiting for its first
+ %% trace message. The number of iterations is chosen so that
+ %% one trace file has been wasted, and therefore the first pair
+ %% of trace messages.
+ lists:foreach(
+ fun(Cnt) ->
+ receive after 1000 -> ok end,
+ ?MODULE:tracee1(Cnt),
+ ?MODULE:tracee2(Cnt),
+ receive after 1100 -> ok end
+ end,
+ lists:seq(1, 4)),
+ stop(),
+ Files = filelib:wildcard(FName ++ "*" ++ ".trace"),
+ io:format("~p~n", [Files]),
+ dbg:trace_client(file, WrapFilesSpec, {fun myhandler/2, self()}),
+ S = self(),
+ [{trace, S, call, {?MODULE, tracee1, [2]}, S},
+ {trace, S, call, {?MODULE, tracee2, [2]}, hej},
+ {trace, S, call, {?MODULE, tracee1, [3]}, S},
+ {trace, S, call, {?MODULE, tracee2, [3]}, hej},
+ {trace, S, call, {?MODULE, tracee1, [4]}, S},
+ {trace, S, call, {?MODULE, tracee2, [4]}, hej},
+ end_of_trace] = flush(),
+ lists:map(fun(F) -> file:delete(F) end, Files)
after
- ?line stop()
+ stop()
end,
ok.
-with_seq_trace(suite) ->
- [];
-with_seq_trace(doc) ->
- ["Test ordinary tracing combined with seq_trace"];
+%% Test ordinary tracing combined with seq_trace
with_seq_trace(Config) when is_list(Config) ->
try
- ?line {ok, Server} = start(),
- ?line {ok, Tracer} = dbg:get_tracer(),
- ?line {ok, X} = dbg:tp(dbg, get_tracer, [{[],[],
- [{set_seq_token, send, true}]}]),
- ?line {value, {saved, _}} = lists:keysearch(saved, 1, X),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line seq_trace:set_system_tracer(Tracer),
- ?line dbg:get_tracer(),
- receive
- after 1 ->
- ok
- end,
- ?line S = self(),
- ?line ThisNode = node(),
- ?line [{trace,S,call,{dbg,get_tracer,[]}},
- {seq_trace,0,{send,_,S,Server,{S,{get_tracer,ThisNode}}}},
- {seq_trace,0,{send,_,Server,S,{dbg,{ok,Tracer}}}}] =
- flush()
+ {ok, Server} = start(),
+ {ok, Tracer} = dbg:get_tracer(),
+ {ok, X} = dbg:tp(dbg, get_tracer, [{[],[],
+ [{set_seq_token, send, true}]}]),
+ {value, {saved, _}} = lists:keysearch(saved, 1, X),
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ seq_trace:set_system_tracer(Tracer),
+ dbg:get_tracer(),
+ receive
+ after 1 ->
+ ok
+ end,
+ S = self(),
+ ThisNode = node(),
+ [{trace,S,call,{dbg,get_tracer,[]}},
+ {seq_trace,0,{send,_,S,Server,{S,{get_tracer,ThisNode}}}},
+ {seq_trace,0,{send,_,Server,S,{dbg,{ok,Tracer}}}}] =
+ flush()
after
- ?line stop()
+ stop()
end,
ok.
-dead_suspend(suite) ->
- [];
-dead_suspend(doc) ->
- ["Test that trace messages concerning a now dead process does "
- "not crash dbg."];
+%% Test that trace messages concerning a now dead process does not crash dbg.
dead_suspend(Config) when is_list(Config) ->
- ?line start(),
+ start(),
try
- survived = run_dead_suspend()
+ survived = run_dead_suspend()
after
- ?line stop()
+ stop()
end.
run_dead_suspend() ->
@@ -734,10 +907,10 @@ run_dead_suspend() ->
spawn(?MODULE, dummy, []),
receive after 1000 -> ok end,
case whereis(dbg) of
- undefined ->
- died;
- _ ->
- survived
+ undefined ->
+ died;
+ _ ->
+ survived
end.
dummy() ->
@@ -749,10 +922,10 @@ tracer_exit_on_stop(_) ->
%% Tracer blocks waiting for fun to complete so that the trace message and
%% the exit signal message from the dbg process are in its message queue.
Fun = fun() ->
- ?MODULE:dummy(),
- Ref = erlang:trace_delivered(self()),
- receive {trace_delivered, _, Ref} -> stop() end
- end,
+ ?MODULE:dummy(),
+ Ref = erlang:trace_delivered(self()),
+ receive {trace_delivered, _, Ref} -> stop() end
+ end,
{ok, _} = dbg:tracer(process, {fun spawn_once_handler/2, {self(), Fun}}),
{ok, Tracer} = dbg:get_tracer(),
MRef = monitor(process, Tracer),
@@ -771,11 +944,83 @@ spawn_once_handler(Event, {Pid, done} = State) ->
spawn_once_handler(Event, {Pid, Fun}) ->
{_, Ref} = spawn_monitor(Fun),
receive
- {'DOWN', Ref, _, _, _} ->
- Pid ! Event,
- {Pid, done}
+ {'DOWN', Ref, _, _, _} ->
+ Pid ! Event,
+ {Pid, done}
+ end.
+
+%% Test that erl_tracer modules work correctly
+erl_tracer(Config) ->
+ stop(),
+
+ ok = load_nif(Config),
+
+ Self = self(),
+ {ok, _} = dbg:tracer(module, {?MODULE, Self}),
+ {ok, {?MODULE, Self}} = dbg:get_tracer(),
+ {ok, _} = dbg:p(self(), [c, timestamp]),
+ {ok, _} = dbg:tp(?MODULE, dummy, []),
+ ok = ?MODULE:dummy(),
+ [{Self, call, Self, Self, {?MODULE, dummy, []}, #{}}] = flush(),
+ ok.
+
+%% Test that distributed erl_tracer modules work
+distributed_erl_tracer(Config) ->
+ stop(),
+
+ S = self(),
+
+ ok = load_nif(Config),
+
+ LNode = node(),
+ RNode = start_slave(),
+ true = rpc:call(RNode, code, add_patha, [filename:join(proplists:get_value(data_dir, Config), "..")]),
+ ok = rpc:call(RNode, ?MODULE, load_nif, [Config]),
+
+ NifProxy = fun() ->
+ register(nif_proxy, self()),
+ receive M -> S ! M end
+ end,
+
+ LNifProxy = spawn_link(LNode, NifProxy),
+ RNifProxy = spawn_link(RNode, NifProxy),
+
+ TracerFun = fun() -> {?MODULE, whereis(nif_proxy)} end,
+
+ {ok, _} = dbg:tracer(LNode, module, TracerFun),
+ {ok, _} = dbg:tracer(RNode, module, TracerFun),
+
+ {ok, [{matched, _, _}, {matched, _, _}]} = dbg:p(all,c),
+ {ok, [_, _]} = dbg:tp(?MODULE, dummy, []),
+
+ {ok, {?MODULE, LNifProxy}} = dbg:get_tracer(LNode),
+ {ok, {?MODULE, RNifProxy}} = dbg:get_tracer(RNode),
+
+ LCall = spawn_link(LNode, fun() -> ?MODULE:dummy() end),
+ [{LCall, call, LNifProxy, LCall, {?MODULE, dummy, []}, #{}}] = flush(),
+
+ RCall = spawn_link(RNode, fun() -> ?MODULE:dummy() end),
+ [{RCall, call, RNifProxy, RCall, {?MODULE, dummy, []}, #{}}] = flush(),
+
+
+ ok.
+
+load_nif(Config) ->
+ SoFile = atom_to_list(?MODULE),
+ DataDir = proplists:get_value(data_dir, Config),
+ case erlang:load_nif(filename:join(DataDir, SoFile) , 0) of
+ {error, {reload, _}} ->
+ ok;
+ ok ->
+ ok
end.
+enabled(_, _, _) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace(_, _, _, _, _) ->
+ erlang:nif_error(nif_not_loaded).
+
%%
%% Support functions
%%
@@ -794,38 +1039,38 @@ wait_node(_,0) ->
no;
wait_node(Node, N) ->
case net_adm:ping(Node) of
- pong ->
- ok;
- pang ->
- receive
- after 1000 ->
- ok
- end,
- wait_node(Node, N - 1)
+ pong ->
+ ok;
+ pang ->
+ receive
+ after 1000 ->
+ ok
+ end,
+ wait_node(Node, N - 1)
end.
myhandler(Message, {wait_for_go,Pid}) ->
receive
- {go,Pid} ->
- myhandler(Message, Pid)
+ {go,Pid} ->
+ myhandler(Message, Pid)
end;
myhandler(Message, Relay) ->
Relay ! Message,
case Message of
- end_of_trace ->
- ok;
- _ ->
- Relay
+ end_of_trace ->
+ ok;
+ _ ->
+ Relay
end.
flush() ->
flush([]).
flush(Acc) ->
receive
- X ->
- flush(Acc ++ [X])
+ X ->
+ flush(Acc ++ [X])
after 1000 ->
- Acc
+ Acc
end.
start() ->
@@ -839,88 +1084,92 @@ stop() ->
schedstat_handler(TraceMsg, {Parent, Tag, Data} = State) ->
case TraceMsg of
- {trace_ts, Pid, in, _, Ts} ->
- NewData =
- case lists:keysearch(Pid, 1, Data) of
- {value, {Pid, Acc}} ->
- [{Pid, Acc, Ts} | lists:keydelete(Pid, 1, Data)];
- false ->
- [{Pid, {0, 0, 0}, Ts} | Data];
- Other ->
- exit(Parent, {?MODULE, ?LINE, Other}),
- erlang:display({?MODULE, ?LINE, Other}),
- Data
- end,
- {Parent, Tag, NewData};
- {trace_ts, Pid, out, _, {A3, B3, C3}} ->
- NewData =
- case lists:keysearch(Pid, 1, Data) of
- {value, {Pid, {A1, B1, C1}, {A2, B2, C2}}} ->
- [{Pid, {A3-A2+A1, B3-B2+B1, C3-C2+C1}} |
- lists:keydelete(Pid, 1, Data)];
- Other ->
- exit(Parent, {?MODULE, ?LINE, Other}),
- erlang:display({?MODULE, ?LINE, Other}),
- Data
- end,
- {Parent, Tag, NewData};
- {trace_ts, Pid, exit, normal, {A3, B3, C3}} ->
- NewData =
- case lists:keysearch(Pid, 1, Data) of
- {value, {Pid, {A1, B1, C1}, {A2, B2, C2}}} ->
- [{Pid, {A3-A2+A1, B3-B2+B1, C3-C2+C1}} |
- lists:keydelete(Pid, 1, Data)];
- {value, {Pid, _Acc}} ->
- Data;
- false ->
- [{Pid, {0, 0, 0}} | Data];
- Other ->
- exit(Parent, {?MODULE, ?LINE, Other}),
- erlang:display({?MODULE, ?LINE, Other}),
- Data
- end,
- {Parent, Tag, NewData};
- {trace_ts, _Pid, send, _Msg, _OtherPid, _Ts} ->
- State;
- end_of_trace ->
- Parent ! {Tag, Data},
- State
+ {trace_ts, Pid, in, _, Ts} ->
+ NewData =
+ case lists:keysearch(Pid, 1, Data) of
+ {value, {Pid, Acc}} ->
+ [{Pid, Acc, Ts} | lists:keydelete(Pid, 1, Data)];
+ false ->
+ [{Pid, {0, 0, 0}, Ts} | Data];
+ Other ->
+ exit(Parent, {?MODULE, ?LINE, Other}),
+ erlang:display({?MODULE, ?LINE, Other}),
+ Data
+ end,
+ {Parent, Tag, NewData};
+ {trace_ts, Pid, out, _, {A3, B3, C3}} ->
+ NewData =
+ case lists:keysearch(Pid, 1, Data) of
+ {value, {Pid, {A1, B1, C1}, {A2, B2, C2}}} ->
+ [{Pid, {A3-A2+A1, B3-B2+B1, C3-C2+C1}} |
+ lists:keydelete(Pid, 1, Data)];
+ Other ->
+ exit(Parent, {?MODULE, ?LINE, Other}),
+ erlang:display({?MODULE, ?LINE, Other}),
+ Data
+ end,
+ {Parent, Tag, NewData};
+ {trace_ts,_Pid,spawned,_OtherPid,_,_Ts} ->
+ State;
+ {trace_ts,_Pid,getting_linked,_OtherPid,_Ts} ->
+ State;
+ {trace_ts, Pid, exit, normal, {A3, B3, C3}} ->
+ NewData =
+ case lists:keysearch(Pid, 1, Data) of
+ {value, {Pid, {A1, B1, C1}, {A2, B2, C2}}} ->
+ [{Pid, {A3-A2+A1, B3-B2+B1, C3-C2+C1}} |
+ lists:keydelete(Pid, 1, Data)];
+ {value, {Pid, _Acc}} ->
+ Data;
+ false ->
+ [{Pid, {0, 0, 0}} | Data];
+ Other ->
+ exit(Parent, {?MODULE, ?LINE, Other}),
+ erlang:display({?MODULE, ?LINE, Other}),
+ Data
+ end,
+ {Parent, Tag, NewData};
+ {trace_ts, _Pid, send, _Msg, _OtherPid, _Ts} ->
+ State;
+ end_of_trace ->
+ Parent ! {Tag, Data},
+ State
end.
pass_token(Token, Next, Loops) ->
receive
- {Token, 1} = Msg ->
- sendloop(Loops),
- Next ! Msg;
- {Token, _Cnt} = Msg->
- sendloop(Loops),
- Next ! Msg,
- pass_token(Token, Next, Loops)
+ {Token, 1} = Msg ->
+ sendloop(Loops),
+ Next ! Msg;
+ {Token, _Cnt} = Msg->
+ sendloop(Loops),
+ Next ! Msg,
+ pass_token(Token, Next, Loops)
end.
pass_token(Token, Final, Cnt, Loops) ->
receive
- {Token, start, Next} ->
- sendloop(Loops),
- Msg = {Token, Cnt},
- Next ! Msg,
- pass_token(Token, Final, Next, Cnt, Loops)
+ {Token, start, Next} ->
+ sendloop(Loops),
+ Msg = {Token, Cnt},
+ Next ! Msg,
+ pass_token(Token, Final, Next, Cnt, Loops)
end.
pass_token(Token, Final, Next, Cnt, Loops) ->
receive
- {Token, 1} ->
- sendloop(Loops),
- Msg = {Token, done},
- Final ! Msg;
- {Token, Cnt} ->
- sendloop(Loops),
- NextCnt = Cnt-1,
- Msg = {Token, NextCnt},
- Next ! Msg,
- pass_token(Token, Final, Next, NextCnt, Loops)
+ {Token, 1} ->
+ sendloop(Loops),
+ Msg = {Token, done},
+ Final ! Msg;
+ {Token, Cnt} ->
+ sendloop(Loops),
+ NextCnt = Cnt-1,
+ Msg = {Token, NextCnt},
+ Next ! Msg,
+ pass_token(Token, Final, Next, NextCnt, Loops)
end.
sendloop(Loops) ->
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/Makefile.src b/lib/runtime_tools/test/dbg_SUITE_data/Makefile.src
new file mode 100644
index 0000000000..f3d63bd4d1
--- /dev/null
+++ b/lib/runtime_tools/test/dbg_SUITE_data/Makefile.src
@@ -0,0 +1,8 @@
+
+NIF_LIBS = dbg_SUITE@dll@
+
+all: $(NIF_LIBS)
+
+@SHLIB_RULES@
+
+$(NIF_LIBS): dbg_SUITE.c
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c b/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c
new file mode 100644
index 0000000000..ecdee7e3a2
--- /dev/null
+++ b/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c
@@ -0,0 +1,113 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2009-2014. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "erl_nif.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <limits.h>
+
+/* NIF interface declarations */
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info);
+static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info);
+static void unload(ErlNifEnv* env, void* priv_data);
+
+/* The NIFs: */
+static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+
+static ErlNifFunc nif_funcs[] = {
+ {"enabled", 3, enabled},
+ {"trace", 5, trace}
+};
+
+ERL_NIF_INIT(dbg_SUITE, nif_funcs, load, NULL, upgrade, unload)
+
+static ERL_NIF_TERM atom_trace;
+static ERL_NIF_TERM atom_ok;
+
+#define ASSERT(expr) assert(expr)
+
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
+{
+
+ atom_trace = enif_make_atom(env, "trace");
+ atom_ok = enif_make_atom(env, "ok");
+
+ *priv_data = NULL;
+
+ return 0;
+}
+
+static void unload(ErlNifEnv* env, void* priv_data)
+{
+
+}
+
+static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data,
+ ERL_NIF_TERM load_info)
+{
+ if (*old_priv_data != NULL) {
+ return -1; /* Don't know how to do that */
+ }
+ if (*priv_data != NULL) {
+ return -1; /* Don't know how to do that */
+ }
+ if (load(env, priv_data, load_info)) {
+ return -1;
+ }
+ return 0;
+}
+
+static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int state_arity;
+ const ERL_NIF_TERM *state_tuple;
+ ERL_NIF_TERM value;
+ ASSERT(argc == 3);
+
+
+ return atom_trace;
+}
+
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int state_arity;
+ ErlNifPid self, to;
+ ERL_NIF_TERM *tuple, msg;
+ ASSERT(argc == 5);
+
+ tuple = enif_alloc(sizeof(ERL_NIF_TERM)*(argc+1));
+ memcpy(tuple+1,argv,sizeof(ERL_NIF_TERM)*argc);
+
+ if (enif_self(env, &self)) {
+ tuple[0] = enif_make_pid(env, &self);
+ } else {
+ tuple[0] = enif_make_atom(env, "undefined");
+ }
+
+ msg = enif_make_tuple_from_array(env, tuple, argc + 1);
+ enif_get_local_pid(env, argv[1], &to);
+ enif_send(env, &to, NULL, msg);
+ enif_free(tuple);
+
+ return atom_ok;
+}
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl b/lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl
index 33de329a62..68ece5936e 100644
--- a/lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl
+++ b/lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl b/lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl
index 1e47482fbd..d91fb41440 100644
--- a/lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl
+++ b/lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/runtime_tools/test/dyntrace_SUITE.erl b/lib/runtime_tools/test/dyntrace_SUITE.erl
index 03242784dd..7be2f49a8b 100644
--- a/lib/runtime_tools/test/dyntrace_SUITE.erl
+++ b/lib/runtime_tools/test/dyntrace_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,28 +18,16 @@
%% %CopyrightEnd%
%%
-module(dyntrace_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1]).
%% Test cases
-export([smoke/1,process/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- Dog = test_server:timetrap(?default_timeout),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
case erlang:system_info(dynamic_trace) of
@@ -48,7 +36,9 @@ all() ->
dtrace ->
[{group,smoke}];
systemtap ->
- {skip,"SystemTap tests currently not supported"}
+ {skip,"SystemTap tests currently not supported"};
+ lttng ->
+ {skip,"LTTng tests currently not supported"}
end.
groups() ->
@@ -71,14 +61,8 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
smoke(Config) ->
- Emu = ?t:lookup_config(emu_name, Config),
+ Emu = test_server:lookup_config(emu_name, Config),
BinEmu = list_to_binary(Emu),
case erlang:system_info(dynamic_trace) of
dtrace ->
@@ -105,8 +89,7 @@ process(_Config) ->
{probe,"process-hibernate"},
{action,[{printf,["hibernate %s %s\n",{arg,0},{arg,1}]}]},
{probe,"process-exit"},
- {action,[{printf,["exit %s %s\n",{arg,0},{arg,1}]}]}
- ],
+ {action,[{printf,["exit %s %s\n",{arg,0},{arg,1}]}]}],
F = fun() ->
{Pid,Ref} = spawn_monitor(fun my_process/0),
Pid ! hibernate,
diff --git a/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl b/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl
new file mode 100644
index 0000000000..a98ac6e99c
--- /dev/null
+++ b/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl
@@ -0,0 +1,383 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(dyntrace_lttng_SUITE).
+-include_lib("common_test/include/ct.hrl").
+
+-export([all/0, suite/0]).
+-export([init_per_suite/1, end_per_suite/1]).
+-export([init_per_testcase/2, end_per_testcase/2]).
+
+%% Test cases
+-export([t_lttng_list/1,
+ t_procs/1,
+ t_ports/1,
+ t_running_process/1,
+ t_running_port/1,
+ t_call/1,
+ t_call_return_to/1,
+ t_call_silent/1,
+ t_send/1,
+ t_receive/1,
+ t_garbage_collection/1,
+ t_all/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
+
+all() ->
+ [t_lttng_list,
+ t_procs,
+ t_ports,
+ t_running_process,
+ t_running_port,
+ t_call,
+ t_call_return_to,
+ t_call_silent,
+ t_send,
+ t_receive,
+ t_garbage_collection,
+ t_all].
+
+
+init_per_suite(Config) ->
+ case erlang:system_info(dynamic_trace) of
+ lttng ->
+ ensure_lttng_stopped("--all"),
+ Config;
+ _ ->
+ {skip, "No LTTng configured on system."}
+ end.
+
+end_per_suite(_Config) ->
+ ensure_lttng_stopped("--all"),
+ ok.
+
+init_per_testcase(Case, Config) ->
+ %% ensure loaded
+ _ = dyntrace:module_info(),
+ Name = atom_to_list(Case),
+ ok = ensure_lttng_started(Name, Config),
+ [{session, Name}|Config].
+
+end_per_testcase(Case, _Config) ->
+ Name = atom_to_list(Case),
+ ok = ensure_lttng_stopped(Name),
+ ok.
+
+%% tracepoints
+%%
+%% org_erlang_dyntrace:gc_major_end
+%% org_erlang_dyntrace:gc_major_start
+%% org_erlang_dyntrace:gc_minor_end
+%% org_erlang_dyntrace:gc_minor_start
+%% org_erlang_dyntrace:message_receive
+%% org_erlang_dyntrace:message_send
+%% -org_erlang_dyntrace:message_queued
+%% org_erlang_dyntrace:function_exception
+%% org_erlang_dyntrace:function_return
+%% org_erlang_dyntrace:function_call
+%% org_erlang_dyntrace:port_link
+%% org_erlang_dyntrace:port_exit
+%% org_erlang_dyntrace:port_open
+%% org_erlang_dyntrace:port_scheduled
+%% org_erlang_dyntrace:process_scheduled
+%% org_erlang_dyntrace:process_register
+%% org_erlang_dyntrace:process_exit
+%% org_erlang_dyntrace:process_link
+%% org_erlang_dyntrace:process_spawn
+%%
+%% Testcases
+%%
+
+t_lttng_list(_Config) ->
+ {ok, _} = cmd("lttng list -u"),
+ ok.
+
+t_procs(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:process_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},procs]),
+
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(1000),
+
+ _ = erlang:trace(all, false, [procs]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:process_spawn", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_register", Res),
+ ok.
+
+t_ports(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:port_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},ports]),
+
+ _ = os:cmd("ls"),
+
+ _ = erlang:trace(all, false, [{tracer, dyntrace, []},ports]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:port_open", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_exit", Res),
+ ok.
+
+t_running_process(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:process_scheduled", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},running]),
+
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(1000),
+
+ _ = erlang:trace(all, false, [running]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:process_scheduled", Res),
+ ok.
+
+t_running_port(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:port_scheduled", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},running_ports]),
+
+ _ = os:cmd("ls"),
+ _ = os:cmd("ls"),
+
+ _ = erlang:trace(all, false, [running_ports]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:port_scheduled", Res),
+ ok.
+
+
+t_call(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []}, call]),
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, [{'_',[],[{exception_trace}]}], [local]),
+
+ DontLink = spawn(fun() -> foo_clause_exception(nope) end),
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+
+ timer:sleep(10),
+ undefined = erlang:process_info(DontLink),
+
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, false, [local]),
+ _ = erlang:trace(all, false, [call]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:function_call", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:function_return", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:function_exception", Res),
+ ok.
+
+t_send(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:message_send", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},send]),
+
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ _ = os:cmd("ls"),
+ timer:sleep(10),
+
+ _ = erlang:trace(all, false, [send]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:message_send", Res),
+ ok.
+
+t_call_return_to(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []}, call, return_to]),
+ _ = erlang:trace_pattern({lists, '_', '_'}, true, [local]),
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, true, [local]),
+
+ Pid = spawn_link(fun() -> gcfier(10) end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(10),
+
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, false, [local]),
+ _ = erlang:trace_pattern({lists, '_', '_'}, false, [local]),
+ _ = erlang:trace(all, false, [call,return_to]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:function_call", Res),
+ ok.
+
+t_call_silent(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []}, call, silent]),
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, [{'_',[],[{exception_trace}]}], [local]),
+
+ DontLink = spawn(fun() -> foo_clause_exception(nope) end),
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+
+ timer:sleep(10),
+ undefined = erlang:process_info(DontLink),
+
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, false, [local]),
+ _ = erlang:trace(all, false, [call]),
+ Res = lttng_stop_and_view(Config),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_call", Res),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_return", Res),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_exception", Res),
+ ok.
+
+
+t_receive(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:message_receive", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},'receive']),
+ timer:sleep(20),
+
+ Pid1 = spawn_link(fun() -> waiter() end),
+ Pid1 ! {self(), ok},
+ ok = receive {Pid1,ok} -> ok end,
+
+ Pid2 = spawn_link(fun() -> waiter() end),
+ Pid2 ! {self(), ok},
+ ok = receive {Pid2,ok} -> ok end,
+
+ timer:sleep(10),
+ _ = erlang:trace(all, false, ['receive']),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:message_receive", Res),
+ ok.
+
+t_garbage_collection(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:gc_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},garbage_collection]),
+
+ Pid = spawn_link(fun() -> gcfier() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(10),
+ _ = erlang:trace(all, false, [garbage_collection]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_end", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_end", Res),
+ ok.
+
+t_all(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},all]),
+
+ Pid1 = spawn_link(fun() -> waiter() end),
+ Pid1 ! {self(), ok},
+ ok = receive {Pid1,ok} -> ok end,
+
+ Pid2 = spawn_link(fun() -> gcfier() end),
+ Pid2 ! {self(), ok},
+ ok = receive {Pid2,ok} -> ok end,
+ _ = os:cmd("ls"),
+ _ = os:cmd("ls"),
+ timer:sleep(10),
+
+ _ = erlang:trace(all, false, [all]),
+ Res = lttng_stop_and_view(Config),
+
+ ok = check_tracepoint("org_erlang_dyntrace:process_spawn", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_register", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_open", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_scheduled", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_scheduled", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:message_send", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:message_receive", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_end", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_end", Res),
+ ok.
+
+
+%% aux
+
+gcfier() ->
+ gcfier(10000).
+gcfier(N) ->
+ receive
+ {Pid, ok} ->
+ _ = lists:reverse(lists:seq(1,N)),
+ true = erlang:garbage_collect(),
+ Pid ! {self(), ok}
+ end.
+
+
+waiter() ->
+ true = register(?MODULE, self()),
+ receive
+ {Pid, ok} ->
+ Child = spawn(fun() -> receive ok -> ok end end),
+ link(Child),
+ unlink(Child),
+ _ = lists:seq(1,1000),
+ Child ! ok,
+ true = unregister(?MODULE),
+ Pid ! {self(),ok}
+ end.
+
+foo_clause_exception({1,2}) -> badness.
+
+%% lttng
+lttng_stop_and_view(Config) ->
+ Path = proplists:get_value(priv_dir, Config),
+ Name = proplists:get_value(session, Config),
+ {ok,_} = cmd("lttng stop " ++ Name),
+ {ok,Res} = cmd("lttng view " ++ Name ++ " --trace-path=" ++ Path),
+ Res.
+
+check_tracepoint(TP, Data) ->
+ case re:run(Data, TP, [global]) of
+ {match, _} -> ok;
+ _ -> notfound
+ end.
+
+lttng_start_event(Event, Config) ->
+ Name = proplists:get_value(session, Config),
+ {ok, _} = cmd("lttng enable-event -u " ++ Event ++ " --session=" ++ Name),
+ {ok, _} = cmd("lttng start " ++ Name),
+ ok.
+
+ensure_lttng_started(Name, Config) ->
+ Out = case proplists:get_value(priv_dir, Config) of
+ undefined -> [];
+ Path -> "--output="++Path++" "
+ end,
+ {ok,_} = cmd("lttng create " ++ Out ++ Name),
+ ok.
+
+ensure_lttng_stopped(Name) ->
+ {ok,_} = cmd("lttng stop"),
+ {ok,_} = cmd("lttng destroy " ++ Name),
+ ok.
+
+cmd(Cmd) ->
+ io:format("<< ~ts~n", [Cmd]),
+ Res = os:cmd(Cmd),
+ io:format(">> ~ts~n", [Res]),
+ {ok,Res}.
diff --git a/lib/runtime_tools/test/erts_alloc_config_SUITE.erl b/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
index 9c0a643e91..6ae51d9a26 100644
--- a/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
+++ b/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,12 +22,10 @@
%-define(line_trace, 1).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%-compile(export_all).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0, init_per_testcase/2, end_per_testcase/2]).
%% Testcases
-export([basic/1]).
@@ -35,83 +33,63 @@
%% internal export
-export([make_basic_config/1]).
--define(DEFAULT_TIMEOUT, ?t:minutes(2)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
[basic].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
init_per_testcase(Case, Config) when is_list(Config) ->
[{testcase, Case},
- {watchdog, ?t:timetrap(?DEFAULT_TIMEOUT)},
{erl_flags_env, save_env()} | Config].
end_per_testcase(_Case, Config) when is_list(Config) ->
- ?t:timetrap_cancel(?config(watchdog, Config)),
- restore_env(?config(erl_flags_env, Config)),
+ restore_env(proplists:get_value(erl_flags_env, Config)),
ok.
%%%
%%% The test cases ------------------------------------------------------------
%%%
-basic(doc) -> [];
-basic(suite) -> [];
basic(Config) when is_list(Config) ->
- ?line ErtsAllocConfig = privfile("generated", Config),
+ ErtsAllocConfig = privfile("generated", Config),
SbctMod = " +MBsbct 1024 +MHsbct 4096",
%% Make sure we have enabled allocators
ZFlgs = os:getenv("ERL_ZFLAGS", "") ++ " +Mea max +Mea config",
- ?line os:putenv("ERL_ZFLAGS", ZFlgs ++ SbctMod),
+ os:putenv("ERL_ZFLAGS", ZFlgs ++ SbctMod),
- ?line {ok, Node1} = start_node(Config),
- ?line ok = rpc:call(Node1, ?MODULE, make_basic_config, [ErtsAllocConfig]),
- ?line stop_node(Node1),
+ {ok, Node1} = start_node(Config),
+ ok = rpc:call(Node1, ?MODULE, make_basic_config, [ErtsAllocConfig]),
+ stop_node(Node1),
- ?line display_file(ErtsAllocConfig),
+ display_file(ErtsAllocConfig),
- ?line ManualConfig = privfile("manual", Config),
- ?line {ok, IOD} = file:open(ManualConfig, [write]),
- ?line io:format(IOD, "~s", ["+MBsbct 2048"]),
- ?line file:close(IOD),
- ?line display_file(ManualConfig),
+ ManualConfig = privfile("manual", Config),
+ {ok, IOD} = file:open(ManualConfig, [write]),
+ io:format(IOD, "~s", ["+MBsbct 2048"]),
+ file:close(IOD),
+ display_file(ManualConfig),
- ?line os:putenv("ERL_ZFLAGS", ZFlgs),
+ os:putenv("ERL_ZFLAGS", ZFlgs),
- ?line {ok, Node2} = start_node(Config,
- "-args_file " ++ ErtsAllocConfig
- ++ " -args_file " ++ ManualConfig),
+ {ok, Node2} = start_node(Config,
+ "-args_file " ++ ErtsAllocConfig
+ ++ " -args_file " ++ ManualConfig),
- ?line {_, _, _, Cfg} = rpc:call(Node2, erlang, system_info, [allocator]),
+ {_, _, _, Cfg} = rpc:call(Node2, erlang, system_info, [allocator]),
- ?line stop_node(Node2),
+ stop_node(Node2),
- ?line {value,{binary_alloc, BCfg}} = lists:keysearch(binary_alloc, 1, Cfg),
- ?line {value,{sbct, 2097152}} = lists:keysearch(sbct, 1, BCfg),
- ?line {value,{eheap_alloc, HCfg}} = lists:keysearch(eheap_alloc, 1, Cfg),
- ?line {value,{sbct, 4194304}} = lists:keysearch(sbct, 1, HCfg),
+ {value,{binary_alloc, BCfg}} = lists:keysearch(binary_alloc, 1, Cfg),
+ {value,{sbct, 2097152}} = lists:keysearch(sbct, 1, BCfg),
+ {value,{eheap_alloc, HCfg}} = lists:keysearch(eheap_alloc, 1, Cfg),
+ {value,{sbct, 4194304}} = lists:keysearch(sbct, 1, HCfg),
- ?line ok.
+ ok.
make_basic_config(ErtsAllocConfig) ->
%% Save some different scenarios
@@ -119,35 +97,35 @@ make_basic_config(ErtsAllocConfig) ->
SSBegun = make_ref(),
SSDone = make_ref(),
SSFun = fun (F) ->
- receive
- SSDone ->
- ok = erts_alloc_config:save_scenario(),
- Tester ! SSDone
- after 500 ->
- ok = erts_alloc_config:save_scenario(),
- F(F)
- end
- end,
+ receive
+ SSDone ->
+ ok = erts_alloc_config:save_scenario(),
+ Tester ! SSDone
+ after 500 ->
+ ok = erts_alloc_config:save_scenario(),
+ F(F)
+ end
+ end,
SS = spawn_link(fun () ->
- ok = erts_alloc_config:save_scenario(),
- Tester ! SSBegun,
- SSFun(SSFun)
- end),
+ ok = erts_alloc_config:save_scenario(),
+ Tester ! SSBegun,
+ SSFun(SSFun)
+ end),
receive SSBegun -> ok end,
Ref = make_ref(),
Tab = ets:new(?MODULE, [bag, public]),
Ps = lists:map(
- fun (_) ->
- spawn_link(
- fun () ->
- ets:insert(Tab,
- {self(),
- lists:seq(1, 1000)}),
- receive after 1000 -> ok end,
- Tester ! {Ref, self()}
- end)
- end,
- lists:seq(1, 10000)),
+ fun (_) ->
+ spawn_link(
+ fun () ->
+ ets:insert(Tab,
+ {self(),
+ lists:seq(1, 1000)}),
+ receive after 1000 -> ok end,
+ Tester ! {Ref, self()}
+ end)
+ end,
+ lists:seq(1, 10000)),
lists:foreach(fun (P) -> receive {Ref, P} -> ok end end, Ps),
ets:delete(Tab),
SS ! SSDone,
@@ -162,35 +140,35 @@ make_basic_config(ErtsAllocConfig) ->
%%
display_file(FileName) ->
- ?t:format("filename: ~s~n", [FileName]),
+ io:format("filename: ~s~n", [FileName]),
{ok, Bin} = file:read_file(FileName),
io:format("~s", [binary_to_list(Bin)]),
- ?t:format("eof: ~s~n", [FileName]),
+ io:format("eof: ~s~n", [FileName]),
ok.
mk_name(Config) when is_list(Config) ->
{A, B, C} = now(),
list_to_atom(atom_to_list(?MODULE)
- ++ "-" ++ atom_to_list(?config(testcase, Config))
- ++ "-" ++ integer_to_list(A)
- ++ "-" ++ integer_to_list(B)
- ++ "-" ++ integer_to_list(C)).
+ ++ "-" ++ atom_to_list(proplists:get_value(testcase, Config))
+ ++ "-" ++ integer_to_list(A)
+ ++ "-" ++ integer_to_list(B)
+ ++ "-" ++ integer_to_list(C)).
start_node(Config) ->
start_node(Config, "").
start_node(Config, Args) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line ?t:start_node(mk_name(Config),
- slave,
- [{args, "-pa " ++ Pa ++ " " ++ Args}]).
+ Pa = filename:dirname(code:which(?MODULE)),
+ test_server:start_node(mk_name(Config),
+ slave,
+ [{args, "-pa " ++ Pa ++ " " ++ Args}]).
stop_node(Node) ->
- ?line true = ?t:stop_node(Node).
+ true = test_server:stop_node(Node).
privfile(Name, Config) ->
- filename:join([?config(priv_dir, Config),
- atom_to_list(?config(testcase, Config)) ++ "." ++ Name]).
+ filename:join([proplists:get_value(priv_dir, Config),
+ atom_to_list(proplists:get_value(testcase, Config)) ++ "." ++ Name]).
save_env() ->
{erl_flags,
@@ -203,15 +181,15 @@ restore_env(EVar, false) when is_list(EVar) ->
restore_env(EVar, "");
restore_env(EVar, "") when is_list(EVar) ->
case os:getenv(EVar) of
- false -> ok;
- "" -> ok;
- " " -> ok;
- _ -> os:putenv(EVar, " ")
+ false -> ok;
+ "" -> ok;
+ " " -> ok;
+ _ -> os:putenv(EVar, " ")
end;
restore_env(EVar, Value) when is_list(EVar), is_list(Value) ->
case os:getenv(EVar) of
- Value -> ok;
- _ -> os:putenv(EVar, Value)
+ Value -> ok;
+ _ -> os:putenv(EVar, Value)
end.
restore_env({erl_flags, AFlgs, Flgs, RFlgs, ZFlgs}) ->
diff --git a/lib/runtime_tools/test/msacc_SUITE.erl b/lib/runtime_tools/test/msacc_SUITE.erl
new file mode 100644
index 0000000000..145a6d07fb
--- /dev/null
+++ b/lib/runtime_tools/test/msacc_SUITE.erl
@@ -0,0 +1,132 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2014-2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(msacc_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+
+%% Test server callbacks
+-export([suite/0, all/0]).
+
+%% Test cases
+-export([
+ %% API-test
+ api_file/1,
+ api_start_stop/1,
+ api_timer/1,
+ api_print/1
+ ]).
+
+%%--------------------------------------------------------------------
+%% COMMON TEST CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+all() ->
+ [
+ api_start_stop,
+ api_file,
+ api_timer,
+ api_print
+ ].
+
+suite() -> [
+ {timetrap,{minutes,1}},
+ {ct_hooks,[ts_install_cth]}
+ ].
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+
+api_timer(_Config) ->
+
+ %% Run msacc for about 100ms
+ msacc:start(100),
+
+ %% Verify that scheduler 1 executed+slept for about 100ms
+ [Sched1] = [S || S = #{ type := scheduler, id := 1 } <- msacc:stats()],
+
+ #{ counters := Cnt } = Sched1,
+
+ %% Time should be in us
+ Time = maps:fold(fun(_,V,Acc) -> V + Acc end, 0, Cnt),
+
+ if Time < 120000 andalso Time > 80000 -> ok;
+ true -> ct:fail({inaccurate_time, Time, msacc:stats()})
+ end.
+
+%% We just do a basic check that none of the apis crash
+api_start_stop(_Config) ->
+ msacc:start(),
+ timer:sleep(100),
+ msacc:stop(),
+ Runtime = msacc:stats(system_runtime, msacc:stats()),
+ Realtime = msacc:stats(system_realtime, msacc:stats()),
+ true = Runtime < Realtime,
+
+ RuntimeCnt = msacc:stats(runtime, msacc:stats()),
+ RealtimeCnt = msacc:stats(realtime, msacc:stats()),
+ TypeCnt = msacc:stats(type, msacc:stats()),
+
+ %% These should be very similar
+ RuntimeTypeCnt = msacc:stats(type, RuntimeCnt),
+ TypeRuntimeCnt = msacc:stats(runtime, TypeCnt),
+ lists:map(fun({#{ system := T1 },#{ system := T2}}) ->
+ if T1-0.5 < T2 orelse T1+0.5 > T2 -> ok;
+ true -> ct:fail({inaccurate_stats, RuntimeTypeCnt,
+ TypeRuntimeCnt})
+ end
+ end, lists:zip(RuntimeTypeCnt, TypeRuntimeCnt)),
+
+ %% These should be very similar
+ RealtimeTypeCnt = msacc:stats(type, RealtimeCnt),
+ TypeRealtimeCnt = msacc:stats(realtime, TypeCnt),
+ lists:map(fun({#{ system := T1 },#{ system := T2}}) ->
+ if T1-0.5 < T2 orelse T1+0.5 > T2 -> ok;
+ true -> ct:fail({inaccurate_stats, RealtimeTypeCnt,
+ TypeRealtimeCnt})
+ end
+ end,lists:zip(RealtimeTypeCnt, TypeRealtimeCnt)),
+
+ msacc:reset().
+
+api_file(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ File = filename:join(PrivDir, "msacc.stats"),
+ Stats = msacc:stats(),
+ ok = msacc:to_file(File),
+ Stats = msacc:from_file(File),
+
+ PrintFile = filename:join(PrivDir, "msacc.txt"),
+ msacc:print(PrintFile, Stats, #{}).
+
+%% We just check that it is possible to print in a couple of different ways
+api_print(_Config) ->
+ msacc:start(100),
+ io:format("msacc:print(msacc:stats()).~n"),
+ msacc:print(msacc:stats()),
+ io:format("msacc:print(msacc:stats(),#{ system => true }).~n"),
+ msacc:print(msacc:stats(), #{ system => true }),
+ io:format("msacc:print(msacc:stats(runtime,msacc:stats())).~n"),
+ msacc:print(msacc:stats(runtime, msacc:stats())),
+ io:format("msacc:print(msacc:stats(type,msacc:stats())).~n"),
+ msacc:print(msacc:stats(type, msacc:stats())),
+ io:format("msacc:print(msacc:stats(realtime,msacc:stats())).~n"),
+ msacc:print(msacc:stats(realtime, msacc:stats())),
+ io:format("msacc:stats(type,msacc:stats(runtime,msacc:stats())).~n"),
+ msacc:print(msacc:stats(type, msacc:stats(runtime, msacc:stats()))).
diff --git a/lib/runtime_tools/test/runtime_tools_SUITE.erl b/lib/runtime_tools/test/runtime_tools_SUITE.erl
index 7599026e7e..6877e1a379 100644
--- a/lib/runtime_tools/test/runtime_tools_SUITE.erl
+++ b/lib/runtime_tools/test/runtime_tools_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,57 +18,30 @@
%% %CopyrightEnd%
%%
-module(runtime_tools_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0]).
%% Test cases
-export([app_file/1, appup_file/1, start_stop_app/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- Dog = test_server:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[app_file,
appup_file,
start_stop_app].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
app_file(_Config) ->
- ?line ok = ?t:app_test(runtime_tools),
+ ok = test_server:app_test(runtime_tools),
ok.
appup_file(_Config) ->
- ok = ?t:appup_test(runtime_tools).
+ ok = test_server:appup_test(runtime_tools).
start_stop_app(_Config) ->
ok = application:start(runtime_tools),
diff --git a/lib/runtime_tools/test/system_information_SUITE.erl b/lib/runtime_tools/test/system_information_SUITE.erl
index 5e2e0d17ac..a5a025a1cf 100644
--- a/lib/runtime_tools/test/system_information_SUITE.erl
+++ b/lib/runtime_tools/test/system_information_SUITE.erl
@@ -230,19 +230,19 @@ api_report(_Config) ->
ok.
api_to_file(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Filename = filename:join([DataDir, "system_information_report_1.dat"]),
ok = system_information:to_file(Filename),
{ok, _} = file:consult(Filename),
{save_config, [{report_name, Filename}]}.
api_from_file(Config) ->
- {api_to_file, Saved} = ?config(saved_config, Config),
- DataDir = ?config(data_dir, Config),
+ {api_to_file, Saved} = proplists:get_value(saved_config, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Fname1 = filename:join([DataDir, "information_test_report.dat"]),
Report1 = system_information:from_file(Fname1),
ok = validate_report(Report1),
- Fname2 = ?config(report_name, Saved),
+ Fname2 = proplists:get_value(report_name, Saved),
Report2 = system_information:from_file(Fname2),
ok = validate_report(Report2),
ok.
@@ -253,7 +253,7 @@ api_start_stop(_Config) ->
ok.
validate_server_interface(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Fname1 = filename:join([DataDir, "information_test_report.dat"]),
%% load old report
ok = system_information:load_report(file, Fname1),
diff --git a/lib/runtime_tools/vsn.mk b/lib/runtime_tools/vsn.mk
index bfc8b84b91..b33f6f4721 100644
--- a/lib/runtime_tools/vsn.mk
+++ b/lib/runtime_tools/vsn.mk
@@ -1 +1 @@
-RUNTIME_TOOLS_VSN = 1.9.3
+RUNTIME_TOOLS_VSN = 1.10
diff --git a/lib/sasl/Makefile b/lib/sasl/Makefile
index 9085c487d4..065eb45fbb 100644
--- a/lib/sasl/Makefile
+++ b/lib/sasl/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2010. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/sasl/doc/src/Makefile b/lib/sasl/doc/src/Makefile
index 1ee48af338..a66b1f8bcb 100644
--- a/lib/sasl/doc/src/Makefile
+++ b/lib/sasl/doc/src/Makefile
@@ -36,7 +36,6 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# ----------------------------------------------------
XML_APPLICATION_FILES = ref_man.xml
XML_REF3_FILES = alarm_handler.xml \
- overload.xml \
rb.xml \
release_handler.xml \
systools.xml
diff --git a/lib/sasl/doc/src/alarm_handler.xml b/lib/sasl/doc/src/alarm_handler.xml
index 68076ba28d..8550a88b28 100644
--- a/lib/sasl/doc/src/alarm_handler.xml
+++ b/lib/sasl/doc/src/alarm_handler.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2014</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/appup.xml b/lib/sasl/doc/src/appup.xml
index b54d2adb19..6fbdcb9f5b 100644
--- a/lib/sasl/doc/src/appup.xml
+++ b/lib/sasl/doc/src/appup.xml
@@ -4,7 +4,7 @@
<fileref>
<header>
<copyright>
- <year>1997</year><year>2014</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -137,7 +137,8 @@
code change. If it is set to <c>{advanced,Extra}</c>, implemented
processes using
<seealso marker="stdlib:gen_server"><c>gen_server</c></seealso>,
- <seealso marker="stdlib:gen_fsm"><c>gen_fsm</c></seealso>, or
+ <seealso marker="stdlib:gen_fsm"><c>gen_fsm</c></seealso>,
+ <seealso marker="stdlib:gen_statem"><c>gen_statem</c></seealso>, or
<seealso marker="stdlib:gen_event"><c>gen_event</c></seealso>
transform their internal state by calling the callback function
<c>code_change</c>. Special processes call the callback
diff --git a/lib/sasl/doc/src/book.xml b/lib/sasl/doc/src/book.xml
index 624c32a66f..bca61ee8e7 100644
--- a/lib/sasl/doc/src/book.xml
+++ b/lib/sasl/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/error_logging.xml b/lib/sasl/doc/src/error_logging.xml
index 46b12f3872..8464a41ff9 100644
--- a/lib/sasl/doc/src/error_logging.xml
+++ b/lib/sasl/doc/src/error_logging.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -90,8 +90,9 @@
a process terminates with an unexpected reason, which is any reason
other than <c>normal</c>, <c>shutdown</c>, or <c>{shutdown,Term}</c>.
Processes using behaviors
- <seealso marker="stdlib:gen_server"><c>gen_server</c></seealso> or
- <seealso marker="stdlib:gen_fsm"><c>gen_fsm</c></seealso>
+ <seealso marker="stdlib:gen_server"><c>gen_server</c></seealso>,
+ <seealso marker="stdlib:gen_fsm"><c>gen_fsm</c></seealso> or
+ <seealso marker="stdlib:gen_statem"><c>gen_statem</c></seealso>
are examples of such processes. A crash report contains the following items:</p>
<taglist>
<tag><c>Crasher</c></tag>
diff --git a/lib/sasl/doc/src/notes.xml b/lib/sasl/doc/src/notes.xml
index da5bc6be96..dae73f8b23 100644
--- a/lib/sasl/doc/src/notes.xml
+++ b/lib/sasl/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,23 @@
</header>
<p>This document describes the changes made to the SASL application.</p>
+<section><title>SASL 3.0</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The module 'overload' is removed.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13184</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>SASL 2.7</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/sasl/doc/src/notes_history.xml b/lib/sasl/doc/src/notes_history.xml
index 006a40f3ac..d37c412d85 100644
--- a/lib/sasl/doc/src/notes_history.xml
+++ b/lib/sasl/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/overload.xml b/lib/sasl/doc/src/overload.xml
deleted file mode 100644
index 2f19cd9088..0000000000
--- a/lib/sasl/doc/src/overload.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>overload</title>
- <prepared>Peter H&ouml;gfeldt</prepared>
- <responsible>Peter H&ouml;gfeldt</responsible>
- <docno></docno>
- <approved>(Joe Armstrong)</approved>
- <checked></checked>
- <date>1996-10-29</date>
- <rev>A</rev>
- <file>overload.sgml</file>
- </header>
- <module>overload</module>
- <modulesummary>An Overload Regulation Process</modulesummary>
- <description>
- <warning>
- <p>
- All functions in this module are deprecated and will be
- removed in a future release.
- </p>
- </warning>
- <p><c>overload</c> is a process that indirectly regulates the CPU
- usage in the system. The idea is that a main application calls
- function
- <seealso marker="#request/0"><c>request/0</c></seealso>
- before starting a major job and
- proceeds with the job if the return value is positive; otherwise
- the job must not be started.</p>
- <p><c>overload</c> is part of the <c>SASL</c> application and all
- configuration parameters are defined there.</p>
- <p>A set of two intensities are maintained, the <c>total intensity</c>
- and the <c>accept intensity</c>. For that purpose,
- there are two configuration parameters, <c>MaxIntensity</c>
- and <c>Weight</c>; both are measured in 1/second.</p>
- <p>Then total and accept intensities are calculated as
- follows. Assume that the time of the current call to
- <c>request/0</c> is <c>T(n)</c> and that the time of the
- previous call was <c>T(n-1)</c>.</p>
- <list type="bulleted">
- <item>
- <p>The current <c>total intensity</c>, denoted
- <c>TI(n)</c>, is calculated according to the formula</p>
- <p><c>TI(n) = exp(-Weight*(T(n) - T(n-1)) * TI(n-1) + Weight</c>,</p>
- <p>where <c>TI(n-1)</c> is the previous <c>total intensity</c>.</p>
- </item>
- <item>
- <p>The current <c>accept intensity</c>, denoted
- <c>AI(n)</c>, is determined by the formula</p>
- <p><c>AI(n) = exp(-Weight*(T(n) - T(n-1)) * AI(n-1) + Weight</c>,</p>
- <p>where <c>AI(n-1)</c> is the previous <c>accept intensity</c>,
- if the value of <c>exp(-Weight*(T(n) - T(n-1)) * AI(n-1)</c>
- is less than <c>MaxIntensity</c>. Otherwise the value is</p>
- <p><c>AI(n) = exp(-Weight*(T(n) - T(n-1)) * AI(n-1)</c></p>
- </item>
- </list>
- <p>The value of configuration parameter <c>Weight</c> controls the
- speed with which the calculations of intensities react to
- changes in the underlying input intensity. The inverted value of
- <c>Weight</c>, <c>T = 1/Weight</c>, can be thought of as the
- "time constant" of the intensity calculation formulas. For example,
- if <c>Weight = 0.1</c>, a change in the underlying input intensity is
- reflected in <c>total intensity</c> and <c>accept intensity</c> within
- about 10 seconds.</p>
- <p>The overload process defines one alarm, which it sets using
- <c>alarm_handler:set_alarm(Alarm)</c>. <c>Alarm</c> is defined
- as follows:</p>
- <taglist>
- <tag><c>{overload, []}</c></tag>
- <item>
- <p>This alarm is set when the current <c>accept intensity</c> exceeds
- <c>MaxIntensity</c>.</p>
- </item>
- </taglist>
- <p>A new request is not accepted until the current <c>accept
- intensity</c> has fallen below <c>MaxIntensity</c>. To prevent the
- overload process from generating many set/reset alarms, the
- alarm is not reset until the current <c>accept intensity</c> has fallen
- below 75% of <c>MaxIntensity</c>; it is not until then that
- the alarm can be set again.</p>
- </description>
-
- <funcs>
- <func>
- <name>request() -> accept | reject</name>
- <fsummary>Requests to proceed with current job.</fsummary>
- <desc>
- <p>Returns <c>accept</c> or <c>reject</c> depending on the
- current value of the <c>accept intensity</c>.</p>
- <p>The application
- calling this function is to proceed with the job in
- question if the return value is <c>accept</c>; otherwise it
- is not to continue with that job.</p>
- </desc>
- </func>
-
- <func>
- <name>get_overload_info() -> OverloadInfo</name>
- <fsummary>Returns current overload information data.</fsummary>
- <type>
- <v>OverloadInfo = [{total_intensity, TotalIntensity},
- {accept_intensity, AcceptIntensity}, {max_intensity,
- MaxIntensity}, {weight, Weight}, {total_requests,
- TotalRequests}, {accepted_requests, AcceptedRequests}].</v>
- <v>TotalIntensity = float() > 0</v>
- <v>AcceptIntensity = float() > 0</v>
- <v>MaxIntensity = float() > 0</v>
- <v>Weight = float() > 0</v>
- <v>TotalRequests = integer()</v>
- <v>AcceptedRequests = integer()</v>
- </type>
- <desc>
- <p>Returns:</p>
- <list type="bulleted">
- <item>Current total and accept intensities</item>
- <item>Configuration parameters</item>
- <item>Absolute counts of the total number of requests</item>
- <item>Accepted number of requests (since the overload
- process was started)</item>
- </list>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>See Also</title>
- <p><seealso marker="alarm_handler"><c>alarm_handler(3)</c></seealso>,
- <seealso marker="sasl_app"><c>sasl(6)</c></seealso></p>
- </section>
-</erlref>
-
diff --git a/lib/sasl/doc/src/part.xml b/lib/sasl/doc/src/part.xml
index 2f47a8ad80..f531ed2dea 100644
--- a/lib/sasl/doc/src/part.xml
+++ b/lib/sasl/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/part_notes.xml b/lib/sasl/doc/src/part_notes.xml
index 57f20ece0e..8a32deefd9 100644
--- a/lib/sasl/doc/src/part_notes.xml
+++ b/lib/sasl/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/part_notes_history.xml b/lib/sasl/doc/src/part_notes_history.xml
index b2d278e9c4..abdf09d845 100644
--- a/lib/sasl/doc/src/part_notes_history.xml
+++ b/lib/sasl/doc/src/part_notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/rb.xml b/lib/sasl/doc/src/rb.xml
index e16e9f5a62..1ce19046eb 100644
--- a/lib/sasl/doc/src/rb.xml
+++ b/lib/sasl/doc/src/rb.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/ref_man.xml b/lib/sasl/doc/src/ref_man.xml
index a80e5a2a00..42045df5ec 100644
--- a/lib/sasl/doc/src/ref_man.xml
+++ b/lib/sasl/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -35,7 +35,6 @@
</description>
<xi:include href="sasl_app.xml"/>
<xi:include href="alarm_handler.xml"/>
- <xi:include href="overload.xml"/>
<xi:include href="rb.xml"/>
<xi:include href="release_handler.xml"/>
<xi:include href="systools.xml"/>
diff --git a/lib/sasl/doc/src/rel.xml b/lib/sasl/doc/src/rel.xml
index d5f3c7310a..d6558c06b4 100644
--- a/lib/sasl/doc/src/rel.xml
+++ b/lib/sasl/doc/src/rel.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/release_handler.xml b/lib/sasl/doc/src/release_handler.xml
index 162707676c..bcbc5f5339 100644
--- a/lib/sasl/doc/src/release_handler.xml
+++ b/lib/sasl/doc/src/release_handler.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/relup.xml b/lib/sasl/doc/src/relup.xml
index 58918fc8e8..4c5535002c 100644
--- a/lib/sasl/doc/src/relup.xml
+++ b/lib/sasl/doc/src/relup.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/sasl_app.xml b/lib/sasl/doc/src/sasl_app.xml
index bcd446a868..52f449c2a8 100644
--- a/lib/sasl/doc/src/sasl_app.xml
+++ b/lib/sasl/doc/src/sasl_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -34,7 +34,6 @@
<p>The <c>SASL</c> application provides the following services:</p>
<list type="bulleted">
<item><c>alarm_handler</c></item>
- <item><c>overload</c> (deprecated)</item>
<item><c>rb</c></item>
<item><c>release_handler</c></item>
<item><c>systools</c></item>
@@ -140,21 +139,6 @@
this parameter is undefined, the <c>log_mf_h</c> handler is
not installed.</p>
</item>
- <tag><c><![CDATA[overload_max_intensity = float() > 0 ]]></c></tag>
- <item>
- <p>Specifies the maximum intensity
- for <seealso marker="overload"><c>overload</c></seealso>. Default
- is <c>0.8</c>.</p>
- <p>Note that the <c>overload</c> module is deprected and
- will be removed in a future release.</p>
- </item>
- <tag><c><![CDATA[overload_weight = float() > 0 ]]></c></tag>
- <item>
- <p>Specifies the <seealso marker="overload"><c>overload</c></seealso>
- weight. Default is <c>0.1</c>.</p>
- <p>Note that the <c>overload</c> module is deprected and
- will be removed in a future release.</p>
- </item>
<tag><c><![CDATA[start_prg = string() ]]></c></tag>
<item>
<p>Specifies the program to be used when restarting the system
@@ -205,7 +189,6 @@
<p><seealso marker="alarm_handler"><c>alarm_handler(3)</c></seealso>,
<seealso marker="kernel:error_logger"><c>error_logger(3)</c></seealso>,
<seealso marker="stdlib:log_mf_h"><c>log_mf_h(3)</c></seealso>,
- <seealso marker="overload"><c>overload(3)</c></seealso>,
<seealso marker="rb"><c>rb(3)</c></seealso>,
<seealso marker="release_handler"><c>release_handler(3)</c></seealso>,
<seealso marker="systools"><c>systools(3)</c></seealso></p>
diff --git a/lib/sasl/doc/src/sasl_intro.xml b/lib/sasl/doc/src/sasl_intro.xml
index bbc9457103..b71dafb192 100644
--- a/lib/sasl/doc/src/sasl_intro.xml
+++ b/lib/sasl/doc/src/sasl_intro.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -36,7 +36,6 @@
<list type="bulleted">
<item>Error logging</item>
<item>Alarm handling</item>
- <item>Overload regulation</item>
<item>Release handling</item>
<item>Report browsing</item>
</list>
diff --git a/lib/sasl/doc/src/script.xml b/lib/sasl/doc/src/script.xml
index db3ea0f487..8ed132354d 100644
--- a/lib/sasl/doc/src/script.xml
+++ b/lib/sasl/doc/src/script.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1997</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/doc/src/systools.xml b/lib/sasl/doc/src/systools.xml
index 1a5119a5cf..7446762de4 100644
--- a/lib/sasl/doc/src/systools.xml
+++ b/lib/sasl/doc/src/systools.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/sasl/examples/src/Makefile b/lib/sasl/examples/src/Makefile
index 82083d1197..e8b903f252 100644
--- a/lib/sasl/examples/src/Makefile
+++ b/lib/sasl/examples/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2012. All Rights Reserved.
+# Copyright Ericsson AB 2010-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/sasl/examples/src/target_system.erl b/lib/sasl/examples/src/target_system.erl
index d18fdb17f7..b3d6748306 100644
--- a/lib/sasl/examples/src/target_system.erl
+++ b/lib/sasl/examples/src/target_system.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/Makefile b/lib/sasl/src/Makefile
index 7ff6a03a50..ac7ee51100 100644
--- a/lib/sasl/src/Makefile
+++ b/lib/sasl/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/sasl-$(VSN)
# ----------------------------------------------------
MODULES= alarm_handler sasl sasl_report \
sasl_report_file_h sasl_report_tty_h format_lib_supp \
- misc_supp overload rb rb_format_supp release_handler \
+ misc_supp rb rb_format_supp release_handler \
release_handler_1 si si_sasl_supp systools \
systools_make systools_rc systools_relup systools_lib \
erlsrv
diff --git a/lib/sasl/src/alarm_handler.erl b/lib/sasl/src/alarm_handler.erl
index e428ba80fa..77863f0f8f 100644
--- a/lib/sasl/src/alarm_handler.erl
+++ b/lib/sasl/src/alarm_handler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/erlsrv.erl b/lib/sasl/src/erlsrv.erl
index bec824ad78..29d40d362f 100644
--- a/lib/sasl/src/erlsrv.erl
+++ b/lib/sasl/src/erlsrv.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/format_lib_supp.erl b/lib/sasl/src/format_lib_supp.erl
index e2f70c7f00..0b474a0232 100644
--- a/lib/sasl/src/format_lib_supp.erl
+++ b/lib/sasl/src/format_lib_supp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/misc_supp.erl b/lib/sasl/src/misc_supp.erl
index 42de7eedec..093b337a2c 100644
--- a/lib/sasl/src/misc_supp.erl
+++ b/lib/sasl/src/misc_supp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
%%% 2) Very generic functions such as, multi_map, is_string...
%%%
%%% This module is a part of the BOS. (format_pdict is called from
-%%% init, memsup, disksup, overload (but not the fileserver since it
+%%% init, memsup, disksup (but not the fileserver since it
%%% formats its pdict its own way).)
%%%---------------------------------------------------------------------
diff --git a/lib/sasl/src/overload.erl b/lib/sasl/src/overload.erl
deleted file mode 100644
index bc8ab7d5e4..0000000000
--- a/lib/sasl/src/overload.erl
+++ /dev/null
@@ -1,233 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(overload).
-
--deprecated(module).
-
--export([start_link/0, request/0, set_config_data/2,
- get_overload_info/0]).
-
--export([init/1, handle_call/3, handle_info/2, terminate/2,
- format_status/2]).
-
-%%%-----------------------------------------------------------------
-%%% This is a rewrite of overload from BS.3, by Peter Högfeldt.
-%%%
-%%% DESCRIPTION
-%%%
-%%% This module implements a server process that keeps record of the
-%%% intensity of calls of the request/0 function, and answers accept or
-%%% reject depending on if the current average intensity is not greater
-%%% than a specified maximum intensity.
-%%%
-%%% The intensity i is calculated according to the formula:
-%%% i(n) = exp(-K*(T(n) - T(n-1)))*i(n-1) + Kappa
-%%% where i(n) is the intensity at event n, Kappa is a constant, and
-%%% T(n) is the time at event n.
-%%%
-%%% The constant Kappa can be thought of as 1 / T, where T is the time
-%%% constant. Kappa is externally referred to as Weight.
-%%%
-%%% We keep track of two intensities: the total call intensity and the
-%%% intensity of accepted calls.
-%%%-----------------------------------------------------------------
-%%% TODO
-%%%
-%%% 3. Hysteresis.
-%%%
-%%%-----------------------------------------------------------------
-
--record(state, {total = 0, accept = 0, max, prev_t = get_now(),
- kappa, call_counts = {0, 0}, alarm = clear}).
-
--define(clear_timeout, 30000).
-
-start_link() ->
- gen_server:start_link({local, overload}, overload, [], []).
-
-init([]) ->
- process_flag(priority, high),
- MaxIntensity = fetch_config_data(overload_max_intensity),
- Kappa = fetch_config_data(overload_weight),
- {ok, #state{max = MaxIntensity, kappa = Kappa}}.
-
-%%-----------------------------------------------------------------
-%% Func: request/0
-%% Purpose: This is a request to proceed, e.g. a request to
-%% establish a call.
-%% Returns: accept | reject
-%%-----------------------------------------------------------------
-request() -> call(request).
-
-%%-----------------------------------------------------------------
-%% Func: set_config_data/2
-%% Purpose: Set configuration data, and reset intensities.
-%% Arguments: MaxIntensity (real > 0), Weight (real > 0).
-%% Returns: ok | {error, What}
-%% This function is for debugging purposes and is therefore not
-%% documented at all.
-%%-----------------------------------------------------------------
-set_config_data(MaxIntensity, Weight) ->
- call({set_config_data, MaxIntensity, Weight}).
-%%-----------------------------------------------------------------
-%% Func: get_overload_info/0
-%% Returns: A list of tagged items: TotalIntensity, AcceptIntensity,
-%% MaxIntensity, Weight, TotalRequests, AcceptedRequests.
-%%-----------------------------------------------------------------
-get_overload_info() -> call(get_overload_info).
-
-%%-----------------------------------------------------------------
-%% call(Request) -> Term
-%%-----------------------------------------------------------------
-call(Req) ->
- gen_server:call(overload, Req, infinity).
-
-%%%-----------------------------------------------------------------
-%%% Callback functions from gen_server
-%%%-----------------------------------------------------------------
-handle_call(request, _From, State) ->
- #state{total = TI, accept = AI, kappa = Kappa, prev_t = PrevT,
- alarm = Alarm} = State,
- {TR, AR} = State#state.call_counts,
- T = get_now(),
- CurI = new_intensity(AI, T, PrevT, Kappa),
- NewTI = new_intensity(TI, T, PrevT, Kappa) + Kappa,
- if
- CurI =< State#state.max ->
- %% Hysteresis: If alarm is set, and current intensity has
- %% fallen below 75% of max intensity, clear alarm.
- NewAlarm = if
- CurI =< 0.75*State#state.max ->
- clear_alarm(Alarm);
- true ->
- Alarm
- end,
- {reply, accept, State#state{call_counts = {TR+1, AR+1},
- prev_t = T, total = NewTI,
- accept = CurI + Kappa,
- alarm = NewAlarm},
- ?clear_timeout};
- true ->
- %% Set alarm if not already set.
- NewAlarm = set_alarm(Alarm),
- {reply, reject,
- State#state{call_counts = {TR+1, AR}, prev_t = T,
- total = NewTI, accept = CurI,
- alarm = NewAlarm},
- ?clear_timeout}
- end;
-handle_call({set_config_data, MaxIntensity, Weight}, _From, _State) ->
- {reply, ok, #state{max = MaxIntensity, kappa = Weight},
- ?clear_timeout};
-handle_call(get_overload_info, _From, State) ->
- #state{max = MI, total = TI, accept = AI, kappa = Kappa,
- prev_t = PrevT, call_counts = {TR, AR}} = State,
- T = get_now(),
- CurI = new_intensity(AI, T, PrevT, Kappa),
- NewTI = new_intensity(TI, T, PrevT, Kappa),
- Reply = [{total_intensity, NewTI}, {accept_intensity, CurI},
- {max_intensity, MI}, {weight, Kappa},
- {total_requests, TR}, {accepted_requests, AR}],
- {reply, Reply, State#state{total = NewTI, accept = CurI},
- ?clear_timeout}.
-
-handle_info(timeout, State) ->
- #state{total = TI, accept = AI, kappa = Kappa, prev_t = PrevT,
- alarm = Alarm} = State,
- T = get_now(),
- CurI = new_intensity(AI, T, PrevT, Kappa),
- NewTI = new_intensity(TI, T, PrevT, Kappa),
- if
- CurI < 0.75* State#state.max ->
- NewAlarm = clear_alarm(Alarm),
- {noreply, State#state{total = NewTI, accept = CurI,
- alarm = NewAlarm}};
-
- true ->
- {noreply, State#state{total = NewTI, accept = CurI},
- ?clear_timeout}
- end;
-
-handle_info(_, State) ->
- {noreply, State, ?clear_timeout}.
-
-terminate(_Reason, _State) ->
- ok.
-
-%%-----------------------------------------------------------------
-%% Internal functions
-%%-----------------------------------------------------------------
-fetch_config_data(Tag) ->
- case application:get_env(sasl, Tag) of
- {ok, Value} -> Value;
- _ -> fetch_default_data(Tag)
- end.
-
-fetch_default_data(overload_max_intensity) -> 0.8;
-fetch_default_data(overload_weight) -> 0.1.
-
-set_alarm(clear) ->
- alarm_handler:set_alarm({overload, []}),
- set;
-set_alarm(Alarm) ->
- Alarm.
-
-clear_alarm(set) ->
- alarm_handler:clear_alarm(overload),
- clear;
-clear_alarm(Alarm) ->
- Alarm.
-
-%%-----------------------------------------------------------------
-%% The catch protects against floating-point exception.
-%%
-new_intensity(I, T, PrevT, K) ->
- Diff = sub(T, PrevT)/1000,
- case catch (I*math:exp(-K*Diff)) of
- {'EXIT', _} -> % Assume zero.
- 0.0;
- Res ->
- Res
- end.
-
-%% Mask equal to 2^27 - 1, used below.
--define(mask27, 16#7ffffff).
-
-%% Returns number of milliseconds in the range [0, 2^27 - 1]. Must have
-%% this since statistics(wall_clock) wraps. Having 2^27 -1 as the max
-%% assures that we always get non-negative integers. 2^27 milliseconds
-%% are approx. 37.28 hours.
-get_now() ->
- element(1, statistics(wall_clock)) band ?mask27.
-
-%% Returns (X - Y) mod 2^27 (which is in the range [0, 2^27 - 1]).
-sub(X, Y) ->
- (X + (bnot Y) + 1) band ?mask27.
-
-format_status(Opt, [PDict, #state{max = MI, total = TI, accept = AI,
- kappa = K,
- call_counts = {TR, AR}}]) ->
- [{data, [{"Total Intensity", TI},
- {"Accept Intensity", AI},
- {"Max Intensity", MI},
- {"Weight", K},
- {"Total requests", TR},
- {"Accepted requests", AR}]} |
- misc_supp:format_pdict(Opt, PDict, [])].
diff --git a/lib/sasl/src/rb.erl b/lib/sasl/src/rb.erl
index f63c02e748..79df150b41 100644
--- a/lib/sasl/src/rb.erl
+++ b/lib/sasl/src/rb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/rb_format_supp.erl b/lib/sasl/src/rb_format_supp.erl
index ed10022f9d..0004d85af4 100644
--- a/lib/sasl/src/rb_format_supp.erl
+++ b/lib/sasl/src/rb_format_supp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/release_handler.erl b/lib/sasl/src/release_handler.erl
index 7e20d0b321..1fcc9a0288 100644
--- a/lib/sasl/src/release_handler.erl
+++ b/lib/sasl/src/release_handler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/release_handler_1.erl b/lib/sasl/src/release_handler_1.erl
index a6325270a5..ca97515299 100644
--- a/lib/sasl/src/release_handler_1.erl
+++ b/lib/sasl/src/release_handler_1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/sasl.app.src b/lib/sasl/src/sasl.app.src
index 507e2dc229..4ee8a7d6c8 100644
--- a/lib/sasl/src/sasl.app.src
+++ b/lib/sasl/src/sasl.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,7 +24,6 @@
alarm_handler,
format_lib_supp,
misc_supp,
- overload,
rb,
rb_format_supp,
release_handler,
@@ -41,11 +40,11 @@
systools_relup,
systools_lib
]},
- {registered, [sasl_sup, alarm_handler, overload, release_handler]},
+ {registered, [sasl_sup, alarm_handler, release_handler]},
{applications, [kernel, stdlib]},
{env, [{sasl_error_logger, tty},
{errlog_type, all}]},
{mod, {sasl, []}},
- {runtime_dependencies, ["tools-2.6.14","stdlib-2.8","kernel-4.1",
- "erts-6.0"]}]}.
+ {runtime_dependencies, ["tools-2.6.14","stdlib-3.0","kernel-5.0",
+ "erts-8.0"]}]}.
diff --git a/lib/sasl/src/sasl.appup.src b/lib/sasl/src/sasl.appup.src
index e08ae369b8..ecd320c1ea 100644
--- a/lib/sasl/src/sasl.appup.src
+++ b/lib/sasl/src/sasl.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,9 +18,9 @@
%% %CopyrightEnd%
{"%VSN%",
%% Up from - max one major revision back
- [{<<"2\\.[5-7](\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-18.*
- {<<"2\\.4(\\.[0-9]+)*">>,[restart_new_emulator]}], % OTP-17
+ [{<<"3\\.0(\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-19.*
+ {<<"2\\.[5-7](\\.[0-9]+)*">>,[restart_new_emulator]}], % OTP-18.*
%% Down to - max one major revision back
- [{<<"2\\.[5-7](\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-18.*
- {<<"2\\.4(\\.[0-9]+)*">>,[restart_new_emulator]}] % OTP-17
+ [{<<"3\\.0(\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-19.*
+ {<<"2\\.[5-7](\\.[0-9]+)*">>,[restart_new_emulator]}] % OTP-18.*
}.
diff --git a/lib/sasl/src/sasl.erl b/lib/sasl/src/sasl.erl
index fc49fc2465..24afaee183 100644
--- a/lib/sasl/src/sasl.erl
+++ b/lib/sasl/src/sasl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -170,7 +170,4 @@ init(safe) ->
AlarmH = {alarm_handler,
{alarm_handler, start_link, []},
permanent, 2000, worker, dynamic},
- Overload = {overload,
- {overload, start_link, []},
- permanent, 2000, worker, [overload]},
- {ok, {SupFlags, [AlarmH, Overload]}}.
+ {ok, {SupFlags, [AlarmH]}}.
diff --git a/lib/sasl/src/sasl_report.erl b/lib/sasl/src/sasl_report.erl
index 0b8c4212d2..14702b0ad2 100644
--- a/lib/sasl/src/sasl_report.erl
+++ b/lib/sasl/src/sasl_report.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/sasl_report_file_h.erl b/lib/sasl/src/sasl_report_file_h.erl
index 6c38b320c1..21746839fa 100644
--- a/lib/sasl/src/sasl_report_file_h.erl
+++ b/lib/sasl/src/sasl_report_file_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/sasl_report_tty_h.erl b/lib/sasl/src/sasl_report_tty_h.erl
index 54e8addc45..3997e0aa97 100644
--- a/lib/sasl/src/sasl_report_tty_h.erl
+++ b/lib/sasl/src/sasl_report_tty_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/si.erl b/lib/sasl/src/si.erl
index e4bd8f5fd8..275c6d508b 100644
--- a/lib/sasl/src/si.erl
+++ b/lib/sasl/src/si.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/si_sasl_supp.erl b/lib/sasl/src/si_sasl_supp.erl
index 0dcdcdd912..cce628f8c4 100644
--- a/lib/sasl/src/si_sasl_supp.erl
+++ b/lib/sasl/src/si_sasl_supp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/systools.erl b/lib/sasl/src/systools.erl
index 98255e0b12..dd1a58c3c1 100644
--- a/lib/sasl/src/systools.erl
+++ b/lib/sasl/src/systools.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/systools.hrl b/lib/sasl/src/systools.hrl
index 0bf822ed07..6b2a597427 100644
--- a/lib/sasl/src/systools.hrl
+++ b/lib/sasl/src/systools.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/systools_lib.erl b/lib/sasl/src/systools_lib.erl
index 1538e1e90f..dd97aeff08 100644
--- a/lib/sasl/src/systools_lib.erl
+++ b/lib/sasl/src/systools_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/systools_make.erl b/lib/sasl/src/systools_make.erl
index 8132034172..352e4984df 100644
--- a/lib/sasl/src/systools_make.erl
+++ b/lib/sasl/src/systools_make.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1453,23 +1453,46 @@ behave([H|T]) ->
behave([]) ->
[].
-%%______________________________________________________________________
-%% mandatory modules; this modules must be loaded before processes
-%% can be started. These are a collection of modules from the kernel
-%% and stdlib applications.
-%% Nowadays, error_handler dynamically loads almost every module.
-%% The error_handler self must still be there though.
-
mandatory_modules() ->
- %% Sorted
- [error_handler].
+ [error_handler, %Truly mandatory.
+
+ %% Modules that are almost always needed. Listing them here
+ %% helps the init module to load them faster. Modules not
+ %% listed here will be loaded by the error_handler module.
+ %%
+ %% Keep this list sorted.
+ application,
+ application_controller,
+ application_master,
+ code,
+ code_server,
+ erl_eval,
+ erl_lint,
+ erl_parse,
+ error_logger,
+ ets,
+ file,
+ filename,
+ file_server,
+ file_io_server,
+ gen,
+ gen_event,
+ gen_server,
+ heart,
+ kernel,
+ lists,
+ proc_lib,
+ supervisor
+ ].
%%______________________________________________________________________
%% This is the modules that are preloaded into the Erlang system.
preloaded() ->
%% Sorted
- [erl_prim_loader,erlang,erts_internal,init,otp_ring0,prim_eval,prim_file,
+ [erl_prim_loader,erl_tracer,erlang,
+ erts_code_purger,
+ erts_internal,init,otp_ring0,prim_eval,prim_file,
prim_inet,prim_zip,zlib].
%%______________________________________________________________________
diff --git a/lib/sasl/src/systools_rc.erl b/lib/sasl/src/systools_rc.erl
index 285c805b5d..7722cef57b 100644
--- a/lib/sasl/src/systools_rc.erl
+++ b/lib/sasl/src/systools_rc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/src/systools_relup.erl b/lib/sasl/src/systools_relup.erl
index a520da1c3f..28534dc0c8 100644
--- a/lib/sasl/src/systools_relup.erl
+++ b/lib/sasl/src/systools_relup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/test/Makefile b/lib/sasl/test/Makefile
index 86976def6a..2a782bcf61 100644
--- a/lib/sasl/test/Makefile
+++ b/lib/sasl/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2011-2012. All Rights Reserved.
+# Copyright Ericsson AB 2011-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -33,7 +33,6 @@ MODULES= \
sasl_report_suite_supervisor \
systools_SUITE \
systools_rc_SUITE \
- overload_SUITE \
rb_SUITE \
rh_test_lib \
@@ -55,8 +54,7 @@ RELSYSDIR = $(RELEASE_PATH)/sasl_test
# FLAGS
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include \
- -I$(ERL_TOP)/lib/sasl/src
+ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/sasl/src
EBIN = .
diff --git a/lib/sasl/test/alarm_handler_SUITE.erl b/lib/sasl/test/alarm_handler_SUITE.erl
index f2ed9ffc19..dbbdf05f12 100644
--- a/lib/sasl/test/alarm_handler_SUITE.erl
+++ b/lib/sasl/test/alarm_handler_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/test/installer.erl b/lib/sasl/test/installer.erl
index c42f26a506..e38d0cfa7b 100644
--- a/lib/sasl/test/installer.erl
+++ b/lib/sasl/test/installer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/test/overload_SUITE.erl b/lib/sasl/test/overload_SUITE.erl
deleted file mode 100644
index 02d1056698..0000000000
--- a/lib/sasl/test/overload_SUITE.erl
+++ /dev/null
@@ -1,168 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2011. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(overload_SUITE).
--include_lib("common_test/include/ct.hrl").
-
--compile(export_all).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-all() -> [info, set_config_data, set_env_vars, request, timeout].
-
-init_per_testcase(_Case,Config) ->
- restart_sasl(),
- Config.
-
-end_per_testcase(Case,Config) ->
- try apply(?MODULE,Case,[cleanup,Config])
- catch error:undef -> ok
- end,
- ok.
-
-%%%-----------------------------------------------------------------
-info(_Config) ->
- Info = overload:get_overload_info(),
- [{total_intensity,0.0},
- {accept_intensity,0.0},
- {max_intensity,0.8},
- {weight,0.1},
- {total_requests,0},
- {accepted_requests,0}] = Info.
-
-%%%-----------------------------------------------------------------
-set_config_data(_Config) ->
- InfoDefault = overload:get_overload_info(),
- ok = check_info(0.8,0.1,InfoDefault),
- ok = overload:set_config_data(0.5,0.4),
- Info1 = overload:get_overload_info(),
- ok = check_info(0.5,0.4,Info1),
- ok.
-
-%%%-----------------------------------------------------------------
-set_env_vars(_Config) ->
- InfoDefault = overload:get_overload_info(),
- ok = check_info(0.8,0.1,InfoDefault),
- ok = application:set_env(sasl,overload_max_intensity,0.5),
- ok = application:set_env(sasl,overload_weight,0.4),
- ok = application:stop(sasl),
- ok = application:start(sasl),
- Info1 = overload:get_overload_info(),
- ok = check_info(0.5,0.4,Info1),
- ok.
-set_env_vars(cleanup,_Config) ->
- application:unset_env(sasl,overload_max_intensity),
- application:unset_env(sasl,overload_weight),
- ok.
-
-%%%-----------------------------------------------------------------
-request(_Config) ->
- %% Find number of request that can be done with default settings
- %% and no delay
- overload:set_config_data(0.8, 0.1),
- NDefault = do_many_requests(0),
- restart_sasl(),
- ?t:format("NDefault: ~p",[NDefault]),
-
- %% Check that the number of requests increases when max_intensity
- %% increases
- overload:set_config_data(2, 0.1),
- NLargeMI = do_many_requests(0),
- restart_sasl(),
- ?t:format("NLargeMI: ~p",[NLargeMI]),
- true = NLargeMI > NDefault,
-
- %% Check that the number of requests decreases when weight
- %% increases
- overload:set_config_data(0.8, 1),
- NLargeWeight = do_many_requests(0),
- restart_sasl(),
- ?t:format("NLargeWeight: ~p",[NLargeWeight]),
- true = NLargeWeight < NDefault,
-
- %% Check that number of requests increases when delay between
- %% requests increases.
- %% (Keeping same config and comparing to large weight in order to
- %% minimize the time needed for this case.)
- overload:set_config_data(0.8, 1),
- NLargeTime = do_many_requests(500),
- restart_sasl(),
- ?t:format("NLargeTime: ~p",[NLargeTime]),
- true = NLargeTime > NLargeWeight,
- ok.
-
-%%%-----------------------------------------------------------------
-timeout(_Config) ->
- overload:set_config_data(0.8, 1),
- _N = do_many_requests(0),
-
- %% Check that the overload alarm is raised
- [{overload,_}] = alarm_handler:get_alarms(),
-
- %% Fake a clear timeout in overload.erl and check that, since it
- %% came very soon after the overload situation, the alarm is not
- %% cleared
- overload ! timeout,
- timer:sleep(1000),
- [{overload,_}] = alarm_handler:get_alarms(),
-
- %% A bit later, try again and check that this time the alarm is
- %% cleared
- overload ! timeout,
- timer:sleep(1000),
- [] = alarm_handler:get_alarms(),
-
- ok.
-
-
-%%%-----------------------------------------------------------------
-%%% INTERNAL FUNCTIONS
-
-%%%-----------------------------------------------------------------
-%%% Call overload:request/0 up to 30 times with the given time delay
-%%% between. Stop when 'reject' is returned.
-do_many_requests(T) ->
- 30 - do_requests(30,T).
-
-do_requests(0,_) ->
- ?t:fail(never_rejected);
-do_requests(N,T) ->
- case overload:request() of
- accept ->
- timer:sleep(T),
- do_requests(N-1,T);
- reject ->
- N
- end.
-
-%%%-----------------------------------------------------------------
-%%% Restart the sasl application
-restart_sasl() ->
- application:stop(sasl),
- application:start(sasl),
- ok.
-
-%%%-----------------------------------------------------------------
-%%% Check that max_intensity and weight is set as expected
-check_info(MI,W,Info) ->
- case {lists:keyfind(max_intensity,1,Info), lists:keyfind(weight,1,Info)} of
- {{_,MI},{_,W}} -> ok;
- _ -> ?t:fail({unexpected_info,MI,W,Info})
- end.
diff --git a/lib/sasl/test/rb_SUITE.erl b/lib/sasl/test/rb_SUITE.erl
index 9a33df369e..426dedbab5 100644
--- a/lib/sasl/test/rb_SUITE.erl
+++ b/lib/sasl/test/rb_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/test/release_handler_SUITE.erl b/lib/sasl/test/release_handler_SUITE.erl
index ee620dcdb4..10d2539b7f 100644
--- a/lib/sasl/test/release_handler_SUITE.erl
+++ b/lib/sasl/test/release_handler_SUITE.erl
@@ -54,7 +54,7 @@ unix_cases() ->
end,
[target_system, target_system_unicode] ++ RunErlCases ++ cases().
-win32_cases() ->
+win32_cases() ->
[{group,release} | cases()].
%% Cases that can be run on all platforms
@@ -89,11 +89,16 @@ groups() ->
%% {group,release}
%% Top group for all cases using run_erl
init_per_group(release, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- P1gInstall = filename:join(priv_dir(Config),p1g_install),
- ok = create_p1g(Config,P1gInstall),
- ok = create_p1h(Config),
- ?t:timetrap_cancel(Dog);
+ case {os:type(), os:version()} of
+ {{win32, nt}, Vsn} when Vsn > {6,1,999999} ->
+ {skip, "Requires admin privileges on Win 8 and later"};
+ _ ->
+ Dog = ?t:timetrap(?default_timeout),
+ P1gInstall = filename:join(priv_dir(Config),p1g_install),
+ ok = create_p1g(Config,P1gInstall),
+ ok = create_p1h(Config),
+ ?t:timetrap_cancel(Dog)
+ end;
%% {group,release_single}
%% Subgroup of {group,release}, contains all cases that are not
@@ -1058,6 +1063,12 @@ otp_9395_check_and_purge(cleanup,_Conf) ->
%% OTP-9395 - performance problems when there are MANY processes
%% Upgrade which updates many modules (brutal_purge)
otp_9395_update_many_mods(Conf) when is_list(Conf) ->
+
+ %% "nain" is very slow - it fails this test quite often due to a
+ %% long sys call
+ %% /proc/cpuinfo: "clock: 1249MHz"
+ inet:gethostname() == {ok,"nain"} andalso throw({skip,"slow test host"}),
+
%% Set some paths
PrivDir = priv_dir(Conf),
Dir = filename:join(PrivDir,"otp_9395_update_many_mods"),
@@ -1098,6 +1109,7 @@ otp_9395_update_many_mods(Conf) when is_list(Conf) ->
[RelVsn2, filename:join(Rel2Dir, "sys.config")]),
%% First, install release directly and check how much time it takes
+ rpc:call(Node,erlang,garbage_collect,[]),
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,true]),
{TInst0,{ok, _, []}} =
timer:tc(rpc,call,[Node, release_handler, install_release, [RelVsn2]]),
@@ -1124,6 +1136,7 @@ otp_9395_update_many_mods(Conf) when is_list(Conf) ->
%% Finally install release after check and purge, and check that
%% this install was faster than the first.
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,false]),
+ rpc:call(Node,erlang,garbage_collect,[]),
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,true]),
{TInst2,{ok, _RelVsn1, []}} =
timer:tc(rpc,call,[Node, release_handler, install_release, [RelVsn2]]),
@@ -1155,6 +1168,12 @@ otp_9395_update_many_mods(cleanup,_Conf) ->
%% OTP-9395 - performance problems when there are MANY processes
%% Upgrade which removes many modules (brutal_purge)
otp_9395_rm_many_mods(Conf) when is_list(Conf) ->
+
+ %% "nain" is very slow - it fails this test quite often due to a
+ %% long sys call
+ %% /proc/cpuinfo: "clock: 1249MHz"
+ inet:gethostname() == {ok,"nain"} andalso throw({skip,"slow test host"}),
+
%% Set some paths
PrivDir = priv_dir(Conf),
Dir = filename:join(PrivDir,"otp_9395_rm_many_mods"),
@@ -1195,6 +1214,7 @@ otp_9395_rm_many_mods(Conf) when is_list(Conf) ->
[RelVsn2, filename:join(Rel2Dir, "sys.config")]),
%% First, install release directly and check how much time it takes
+ rpc:call(Node,erlang,garbage_collect,[]),
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,true]),
{TInst0,{ok, _, []}} =
timer:tc(rpc,call,[Node, release_handler, install_release, [RelVsn2]]),
@@ -1221,6 +1241,7 @@ otp_9395_rm_many_mods(Conf) when is_list(Conf) ->
%% Finally install release after check and purge, and check that
%% this install was faster than the first.
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,false]),
+ rpc:call(Node,erlang,garbage_collect,[]),
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,true]),
{TInst2,{ok, _RelVsn1, []}} =
timer:tc(rpc,call,[Node, release_handler, install_release, [RelVsn2]]),
@@ -1361,7 +1382,7 @@ upgrade_supervisor(Conf) when is_list(Conf) ->
ASupBeam2 = rpc:call(Node, code, which, [a_sup]),
%% Check that the restart strategy and child spec is updated
- {status, _, {module, _}, [_, _, _, _, [_,_,{data,[{"State",State}]}]]} =
+ {status, _, {module, _}, [_, _, _, _, [_,_,{data,[{"State",State}]}|_]]} =
rpc:call(Node,sys,get_status,[a_sup]),
{state,_,RestartStrategy,[Child],_,_,_,_,_,_,_} = State,
one_for_all = RestartStrategy, % changed from one_for_one
@@ -1756,8 +1777,6 @@ upgrade_gg(Conf) ->
Nodes1 = [Gg1,Gg3,Gg4,Gg5] =
start_nodes(Conf,[Gg1Sname,Gg3Sname,Gg4Sname,Gg5Sname],"upgrade_gg"),
- %% Give some time to synch nodes, then check global group info.
- timer:sleep(1000),
[check_gg_info(Node,Nodes1,[],Nodes1--[Node]) || Node <- Nodes1],
%% register a process on each of the nodes
@@ -1913,7 +1932,7 @@ wait_nodes_up(Nodes, Tag) ->
wait_nodes_up(Nodes0, Tag, Apps) ->
?t:format("wait_nodes_up(~p, ~p, ~p):",[Nodes0, Tag, Apps]),
Nodes = fix_nodes(Nodes0),
- wait_nodes_up(Nodes, Tag, lists:umerge(Apps,[kernel,stdlib,sasl]), 30).
+ wait_nodes_up(Nodes, Tag, lists:umerge(Apps,[kernel,stdlib,sasl]), 60).
fix_nodes([{Node,InitPid}|Nodes]) ->
[{Node,InitPid} | fix_nodes(Nodes)];
@@ -1955,7 +1974,7 @@ wait_nodes_up(Nodes, Tag, Apps, N) ->
?t:format("",[]),
ok;
_ ->
- timer:sleep(1000),
+ timer:sleep(2000),
wait_nodes_up(Pang, Tag, Apps, N-1)
end.
@@ -2444,37 +2463,27 @@ write_term_file(File,Term) ->
ok = file:write_file(File,io_lib:format("~p.~n",[Term])).
-%% Check that global group info is correct
+%% Check that global group info is correct - try again for a maximum of 5 sec
check_gg_info(Node,OtherAlive,OtherDead,Synced) ->
+ check_gg_info(Node,OtherAlive,OtherDead,Synced,5).
+
+check_gg_info(Node,OtherAlive,OtherDead,Synced,N) ->
GGI = rpc:call(Node, global_group, info, []),
GI = rpc:call(Node, global, info,[]),
try do_check_gg_info(OtherAlive,OtherDead,Synced,GGI,GI)
- catch _:E ->
- ?t:format("~ncheck_gg_info failed for ~p: ~p~nwhen GGI was: ~p~n"
- "and GI was: ~p~n",
- [Node,E,GGI,GI]),
- %% An attempt to find out if it is only a timing issue
- %% that makes this fail every now and then:
- try_again_check(Node,GGI,GI,1),
- ?t:fail("check_gg_info failed")
- end.
-
-try_again_check(_Node,_GGI,_GI,6) ->
- ok;
-try_again_check(Node,GGI,GI,N) ->
- timer:sleep(1000),
- case {rpc:call(Node,global_group,info,[]),
- rpc:call(Node,global,info,[])} of
- {GGI,GI} ->
- ?t:format("~nAfter one more sek, GGI and GI are still the same"),
- try_again_check(Node,GGI,GI,N+1);
- {NewGGI,NewGI} ->
- ?t:format("~nAfter one more sek:~nNew GGI: ~p~nNew GI: ~p~n",
- [NewGGI,NewGI]),
- try_again_check(Node,NewGGI,NewGI,N+1)
+ catch _:E when N==0 ->
+ ?t:format("~nERROR: check_gg_info failed for ~p:~n~p~n"
+ "when GGI was: ~p~nand GI was: ~p~n",
+ [Node,{E,erlang:get_stacktrace()},GGI,GI]),
+ ?t:fail("check_gg_info failed");
+ _:E ->
+ ?t:format("~nWARNING: check_gg_info failed for ~p:~n~p~n"
+ "when GGI was: ~p~nand GI was: ~p~n",
+ [Node,{E,erlang:get_stacktrace()},GGI,GI]),
+ timer:sleep(1000),
+ check_gg_info(Node,OtherAlive,OtherDead,Synced,N-1)
end.
-
do_check_gg_info(OtherAlive,OtherDead,Synced,GGI,GI) ->
{_,gg1} = lists:keyfind(own_group_name,1,GGI),
{_,synced} = lists:keyfind(state,1,GGI),
diff --git a/lib/sasl/test/rh_test_lib.erl b/lib/sasl/test/rh_test_lib.erl
index 11935496d8..dacd8b6b9f 100644
--- a/lib/sasl/test/rh_test_lib.erl
+++ b/lib/sasl/test/rh_test_lib.erl
@@ -18,7 +18,7 @@ cmd(Cmd,Args,Env) ->
case open_port({spawn_executable, Cmd}, [{args,Args},{env,Env}]) of
Port when is_port(Port) ->
unlink(Port),
- erlang:port_close(Port),
+ catch erlang:port_close(Port), % migth already be closed, so catching
ok;
Error ->
Error
diff --git a/lib/sasl/test/sasl_SUITE.erl b/lib/sasl/test/sasl_SUITE.erl
index cd8316b451..f12bde9b3d 100644
--- a/lib/sasl/test/sasl_SUITE.erl
+++ b/lib/sasl/test/sasl_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/sasl/test/sasl_report_SUITE.erl b/lib/sasl/test/sasl_report_SUITE.erl
index 940234f152..aa229726ae 100644
--- a/lib/sasl/test/sasl_report_SUITE.erl
+++ b/lib/sasl/test/sasl_report_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2015. All Rights Reserved.
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@
-export([crash_me/0,start_link/0,init/1,handle_cast/2,terminate/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
diff --git a/lib/sasl/test/systools_SUITE.erl b/lib/sasl/test/systools_SUITE.erl
index cf0ed5fcfc..bf95ceb70c 100644
--- a/lib/sasl/test/systools_SUITE.erl
+++ b/lib/sasl/test/systools_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1640,25 +1640,21 @@ app_start_type_relup(Dir2,Name2,Config) ->
%% ?t:format("Dn: ~p",[DownInstructions]),
[{load_object_code, {mnesia, _, _}},
{load_object_code, {runtime_tools, _, _}},
- {load_object_code, {webtool, _, _}},
{load_object_code, {snmp, _, _}},
{load_object_code, {xmerl, _, _}},
point_of_no_return
| UpInstructionsT] = UpInstructions,
true = lists:member({apply,{application,start,[mnesia,permanent]}}, UpInstructionsT),
true = lists:member({apply,{application,start,[runtime_tools,transient]}}, UpInstructionsT),
- true = lists:member({apply,{application,start,[webtool,temporary]}}, UpInstructionsT),
true = lists:member({apply,{application,load,[snmp]}}, UpInstructionsT),
false = lists:any(fun({apply,{application,_,[xmerl|_]}}) -> true; (_) -> false end, UpInstructionsT),
[point_of_no_return | DownInstructionsT] = DownInstructions,
true = lists:member({apply,{application,stop,[mnesia]}}, DownInstructionsT),
true = lists:member({apply,{application,stop,[runtime_tools]}}, DownInstructionsT),
- true = lists:member({apply,{application,stop,[webtool]}}, DownInstructionsT),
true = lists:member({apply,{application,stop,[snmp]}}, DownInstructionsT),
true = lists:member({apply,{application,stop,[xmerl]}}, DownInstructionsT),
true = lists:member({apply,{application,unload,[mnesia]}}, DownInstructionsT),
true = lists:member({apply,{application,unload,[runtime_tools]}}, DownInstructionsT),
- true = lists:member({apply,{application,unload,[webtool]}}, DownInstructionsT),
true = lists:member({apply,{application,unload,[snmp]}}, DownInstructionsT),
true = lists:member({apply,{application,unload,[xmerl]}}, DownInstructionsT),
ok.
@@ -2207,7 +2203,6 @@ create_script(latest_app_start_type1,Config) ->
create_script(latest_app_start_type2,Config) ->
OtherApps = [{mnesia,current,permanent},
{runtime_tools,current,transient},
- {webtool,current,temporary},
{snmp,current,load},
{xmerl,current,none}],
Apps = core_apps(current) ++ OtherApps,
diff --git a/lib/sasl/test/systools_rc_SUITE.erl b/lib/sasl/test/systools_rc_SUITE.erl
index 3754ed99f2..baa3a16e70 100644
--- a/lib/sasl/test/systools_rc_SUITE.erl
+++ b/lib/sasl/test/systools_rc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,6 @@
translate_emulator_restarts/1,
translate_add_delete_module/1]).
-%%-----------------------------------------------------------------
-%% erl -compile systools_rc_SUITE @i ../src/ @i ../../test_server/include/
-%% c(systools_rc_SUITE, [{i, "../src"}, {i, "../../test_server/include"}]).
-%%-----------------------------------------------------------------
all() ->
[syntax_check, translate, translate_app, translate_emulator_restarts,
translate_add_delete_module].
diff --git a/lib/sasl/test/test_lib.hrl b/lib/sasl/test/test_lib.hrl
index b16c4ac34c..2d897e9903 100644
--- a/lib/sasl/test/test_lib.hrl
+++ b/lib/sasl/test/test_lib.hrl
@@ -1,3 +1,3 @@
-define(ertsvsn,"4.4").
--define(kernelvsn,"3.0").
--define(stdlibvsn,"2.0").
+-define(kernelvsn,"4.0").
+-define(stdlibvsn,"2.5").
diff --git a/lib/sasl/vsn.mk b/lib/sasl/vsn.mk
index accb58a199..fd0fc9b8b5 100644
--- a/lib/sasl/vsn.mk
+++ b/lib/sasl/vsn.mk
@@ -1 +1 @@
-SASL_VSN = 2.7
+SASL_VSN = 3.0
diff --git a/lib/snmp/Makefile b/lib/snmp/Makefile
index ce739f3438..879f1b05c5 100644
--- a/lib/snmp/Makefile
+++ b/lib/snmp/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2011. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/doc/src/Makefile b/lib/snmp/doc/src/Makefile
index 6d5b005e3e..9ea5dba0c5 100644
--- a/lib/snmp/doc/src/Makefile
+++ b/lib/snmp/doc/src/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/doc/src/book.xml b/lib/snmp/doc/src/book.xml
index 68e87b8afe..70d426453e 100644
--- a/lib/snmp/doc/src/book.xml
+++ b/lib/snmp/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/files.mk b/lib/snmp/doc/src/files.mk
index fea8deee02..5aeae19105 100644
--- a/lib/snmp/doc/src/files.mk
+++ b/lib/snmp/doc/src/files.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2013. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml
index 4693a744f5..0f5c35b300 100644
--- a/lib/snmp/doc/src/notes.xml
+++ b/lib/snmp/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -34,7 +34,22 @@
</header>
- <section><title>SNMP 5.2.2</title>
+ <section><title>SNMP 5.2.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>SNMP 5.2.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
diff --git a/lib/snmp/doc/src/notes_history.xml b/lib/snmp/doc/src/notes_history.xml
index a9726b97dc..cae9630ff9 100644
--- a/lib/snmp/doc/src/notes_history.xml
+++ b/lib/snmp/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/part.xml b/lib/snmp/doc/src/part.xml
index 5ce7c52918..5ac6dc3917 100644
--- a/lib/snmp/doc/src/part.xml
+++ b/lib/snmp/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/part_notes.xml b/lib/snmp/doc/src/part_notes.xml
index 9535299d74..d149044169 100644
--- a/lib/snmp/doc/src/part_notes.xml
+++ b/lib/snmp/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/part_notes_history.xml b/lib/snmp/doc/src/part_notes_history.xml
index 1edc13e29e..aa5276dc94 100644
--- a/lib/snmp/doc/src/part_notes_history.xml
+++ b/lib/snmp/doc/src/part_notes_history.xml
@@ -4,7 +4,7 @@
<part>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/ref_man.xml b/lib/snmp/doc/src/ref_man.xml
index 1b381bc97b..b8559dda62 100644
--- a/lib/snmp/doc/src/ref_man.xml
+++ b/lib/snmp/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp.xml b/lib/snmp/doc/src/snmp.xml
index b8e8d43fc8..801193675c 100644
--- a/lib/snmp/doc/src/snmp.xml
+++ b/lib/snmp/doc/src/snmp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_agent_config_files.xml b/lib/snmp/doc/src/snmp_agent_config_files.xml
index 1147ff81d5..e1a4c143cd 100644
--- a/lib/snmp/doc/src/snmp_agent_config_files.xml
+++ b/lib/snmp/doc/src/snmp_agent_config_files.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2014</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_agent_funct_descr.xml b/lib/snmp/doc/src/snmp_agent_funct_descr.xml
index 9d2226510e..fdcab79646 100644
--- a/lib/snmp/doc/src/snmp_agent_funct_descr.xml
+++ b/lib/snmp/doc/src/snmp_agent_funct_descr.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_agent_netif.xml b/lib/snmp/doc/src/snmp_agent_netif.xml
index 9583f1f521..a8dea5ab7b 100644
--- a/lib/snmp/doc/src/snmp_agent_netif.xml
+++ b/lib/snmp/doc/src/snmp_agent_netif.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2014</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_app.xml b/lib/snmp/doc/src/snmp_app.xml
index 39aac8e7d7..d5ac97ef15 100644
--- a/lib/snmp/doc/src/snmp_app.xml
+++ b/lib/snmp/doc/src/snmp_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_app_a.xml b/lib/snmp/doc/src/snmp_app_a.xml
index 551876ee92..c6d7ae2f53 100644
--- a/lib/snmp/doc/src/snmp_app_a.xml
+++ b/lib/snmp/doc/src/snmp_app_a.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_app_b.xml b/lib/snmp/doc/src/snmp_app_b.xml
index 263db2a791..2ef94f0fde 100644
--- a/lib/snmp/doc/src/snmp_app_b.xml
+++ b/lib/snmp/doc/src/snmp_app_b.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_audit_trail_log.xml b/lib/snmp/doc/src/snmp_audit_trail_log.xml
index c178a995f4..4fcdceb321 100644
--- a/lib/snmp/doc/src/snmp_audit_trail_log.xml
+++ b/lib/snmp/doc/src/snmp_audit_trail_log.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_community_mib.xml b/lib/snmp/doc/src/snmp_community_mib.xml
index 571ff7d197..61dea05950 100644
--- a/lib/snmp/doc/src/snmp_community_mib.xml
+++ b/lib/snmp/doc/src/snmp_community_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_config.xml b/lib/snmp/doc/src/snmp_config.xml
index a085252d90..6d4129dd06 100644
--- a/lib/snmp/doc/src/snmp_config.xml
+++ b/lib/snmp/doc/src/snmp_config.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_def_instr_functions.xml b/lib/snmp/doc/src/snmp_def_instr_functions.xml
index 2317f27196..3445648de2 100644
--- a/lib/snmp/doc/src/snmp_def_instr_functions.xml
+++ b/lib/snmp/doc/src/snmp_def_instr_functions.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_framework_mib.xml b/lib/snmp/doc/src/snmp_framework_mib.xml
index 9fba76baab..64e5df6ff5 100644
--- a/lib/snmp/doc/src/snmp_framework_mib.xml
+++ b/lib/snmp/doc/src/snmp_framework_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_generic.xml b/lib/snmp/doc/src/snmp_generic.xml
index 75271fb002..44762dec59 100644
--- a/lib/snmp/doc/src/snmp_generic.xml
+++ b/lib/snmp/doc/src/snmp_generic.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_impl_example_agent.xml b/lib/snmp/doc/src/snmp_impl_example_agent.xml
index 912f339e0d..a86006a0a7 100644
--- a/lib/snmp/doc/src/snmp_impl_example_agent.xml
+++ b/lib/snmp/doc/src/snmp_impl_example_agent.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_impl_example_manager.xml b/lib/snmp/doc/src/snmp_impl_example_manager.xml
index 789c6c169e..aca8d43c95 100644
--- a/lib/snmp/doc/src/snmp_impl_example_manager.xml
+++ b/lib/snmp/doc/src/snmp_impl_example_manager.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_index.xml b/lib/snmp/doc/src/snmp_index.xml
index 74792629b6..646e9661a3 100644
--- a/lib/snmp/doc/src/snmp_index.xml
+++ b/lib/snmp/doc/src/snmp_index.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_instr_functions.xml b/lib/snmp/doc/src/snmp_instr_functions.xml
index 0dc76d3603..38512b72d0 100644
--- a/lib/snmp/doc/src/snmp_instr_functions.xml
+++ b/lib/snmp/doc/src/snmp_instr_functions.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_intro.xml b/lib/snmp/doc/src/snmp_intro.xml
index 691bc162ee..ec3f2af956 100644
--- a/lib/snmp/doc/src/snmp_intro.xml
+++ b/lib/snmp/doc/src/snmp_intro.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_manager_config_files.xml b/lib/snmp/doc/src/snmp_manager_config_files.xml
index ca7bc3bfb3..c7c423f5eb 100644
--- a/lib/snmp/doc/src/snmp_manager_config_files.xml
+++ b/lib/snmp/doc/src/snmp_manager_config_files.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2014</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_manager_funct_descr.xml b/lib/snmp/doc/src/snmp_manager_funct_descr.xml
index 30df618eb6..b2da01ae32 100644
--- a/lib/snmp/doc/src/snmp_manager_funct_descr.xml
+++ b/lib/snmp/doc/src/snmp_manager_funct_descr.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_manager_netif.xml b/lib/snmp/doc/src/snmp_manager_netif.xml
index 98d4e7fd96..0dcf2a0255 100644
--- a/lib/snmp/doc/src/snmp_manager_netif.xml
+++ b/lib/snmp/doc/src/snmp_manager_netif.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2014</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_mib_compiler.xml b/lib/snmp/doc/src/snmp_mib_compiler.xml
index ad93cc86c4..285d11fce9 100644
--- a/lib/snmp/doc/src/snmp_mib_compiler.xml
+++ b/lib/snmp/doc/src/snmp_mib_compiler.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_notification_mib.xml b/lib/snmp/doc/src/snmp_notification_mib.xml
index cbb117d71a..d2e288ec15 100644
--- a/lib/snmp/doc/src/snmp_notification_mib.xml
+++ b/lib/snmp/doc/src/snmp_notification_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_pdus.xml b/lib/snmp/doc/src/snmp_pdus.xml
index 82900c2f59..1d086e6f48 100644
--- a/lib/snmp/doc/src/snmp_pdus.xml
+++ b/lib/snmp/doc/src/snmp_pdus.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_standard_mib.xml b/lib/snmp/doc/src/snmp_standard_mib.xml
index bc3abf5fa8..35efbba483 100644
--- a/lib/snmp/doc/src/snmp_standard_mib.xml
+++ b/lib/snmp/doc/src/snmp_standard_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_target_mib.xml b/lib/snmp/doc/src/snmp_target_mib.xml
index fa85d586b9..c3bcd3b4e3 100644
--- a/lib/snmp/doc/src/snmp_target_mib.xml
+++ b/lib/snmp/doc/src/snmp_target_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1998</year><year>2014</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_user_based_sm_mib.xml b/lib/snmp/doc/src/snmp_user_based_sm_mib.xml
index ffff1b6b4f..cc376ac118 100644
--- a/lib/snmp/doc/src/snmp_user_based_sm_mib.xml
+++ b/lib/snmp/doc/src/snmp_user_based_sm_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmp_view_based_acm_mib.xml b/lib/snmp/doc/src/snmp_view_based_acm_mib.xml
index bdd669b8b2..fdad735e71 100644
--- a/lib/snmp/doc/src/snmp_view_based_acm_mib.xml
+++ b/lib/snmp/doc/src/snmp_view_based_acm_mib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa.xml b/lib/snmp/doc/src/snmpa.xml
index c84eeec524..d756ff7a65 100644
--- a/lib/snmp/doc/src/snmpa.xml
+++ b/lib/snmp/doc/src/snmpa.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_conf.xml b/lib/snmp/doc/src/snmpa_conf.xml
index 2f9579261a..503e44a6a2 100644
--- a/lib/snmp/doc/src/snmpa_conf.xml
+++ b/lib/snmp/doc/src/snmpa_conf.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2006</year><year>2014</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_discovery_handler.xml b/lib/snmp/doc/src/snmpa_discovery_handler.xml
index ccc69112c1..0ea72a880c 100644
--- a/lib/snmp/doc/src/snmpa_discovery_handler.xml
+++ b/lib/snmp/doc/src/snmpa_discovery_handler.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_error.xml b/lib/snmp/doc/src/snmpa_error.xml
index cfebb36ed3..7cc4a3513d 100644
--- a/lib/snmp/doc/src/snmpa_error.xml
+++ b/lib/snmp/doc/src/snmpa_error.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_error_io.xml b/lib/snmp/doc/src/snmpa_error_io.xml
index 908dcc974d..bcb2688646 100644
--- a/lib/snmp/doc/src/snmpa_error_io.xml
+++ b/lib/snmp/doc/src/snmpa_error_io.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_error_logger.xml b/lib/snmp/doc/src/snmpa_error_logger.xml
index c39e07ed5f..4feb2e7f32 100644
--- a/lib/snmp/doc/src/snmpa_error_logger.xml
+++ b/lib/snmp/doc/src/snmpa_error_logger.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_error_report.xml b/lib/snmp/doc/src/snmpa_error_report.xml
index 5c91df9e57..282d9b4e59 100644
--- a/lib/snmp/doc/src/snmpa_error_report.xml
+++ b/lib/snmp/doc/src/snmpa_error_report.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_local_db.xml b/lib/snmp/doc/src/snmpa_local_db.xml
index feca939124..ac8d466ab3 100644
--- a/lib/snmp/doc/src/snmpa_local_db.xml
+++ b/lib/snmp/doc/src/snmpa_local_db.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_mib_data.xml b/lib/snmp/doc/src/snmpa_mib_data.xml
index 1ef71d5cbe..1a73c9b634 100644
--- a/lib/snmp/doc/src/snmpa_mib_data.xml
+++ b/lib/snmp/doc/src/snmpa_mib_data.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2013</year><year>2014</year>
+ <year>2013</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_mib_storage.xml b/lib/snmp/doc/src/snmpa_mib_storage.xml
index a4ce5891d2..58ce2167ec 100644
--- a/lib/snmp/doc/src/snmpa_mib_storage.xml
+++ b/lib/snmp/doc/src/snmpa_mib_storage.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2013</year><year>2014</year>
+ <year>2013</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_mpd.xml b/lib/snmp/doc/src/snmpa_mpd.xml
index 4c2f12020b..a39c087c20 100644
--- a/lib/snmp/doc/src/snmpa_mpd.xml
+++ b/lib/snmp/doc/src/snmpa_mpd.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2014</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_network_interface.xml b/lib/snmp/doc/src/snmpa_network_interface.xml
index ffa006768d..d4d4989e90 100644
--- a/lib/snmp/doc/src/snmpa_network_interface.xml
+++ b/lib/snmp/doc/src/snmpa_network_interface.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_network_interface_filter.xml b/lib/snmp/doc/src/snmpa_network_interface_filter.xml
index 0c26914c91..7cd08f8935 100644
--- a/lib/snmp/doc/src/snmpa_network_interface_filter.xml
+++ b/lib/snmp/doc/src/snmpa_network_interface_filter.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2007</year><year>2014</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_notification_delivery_info_receiver.xml b/lib/snmp/doc/src/snmpa_notification_delivery_info_receiver.xml
index da0328402b..cbae158544 100644
--- a/lib/snmp/doc/src/snmpa_notification_delivery_info_receiver.xml
+++ b/lib/snmp/doc/src/snmpa_notification_delivery_info_receiver.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2014</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_notification_filter.xml b/lib/snmp/doc/src/snmpa_notification_filter.xml
index b2c9a0912e..0f16ba4440 100644
--- a/lib/snmp/doc/src/snmpa_notification_filter.xml
+++ b/lib/snmp/doc/src/snmpa_notification_filter.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpa_supervisor.xml b/lib/snmp/doc/src/snmpa_supervisor.xml
index d272118b04..86c6fbc350 100644
--- a/lib/snmp/doc/src/snmpa_supervisor.xml
+++ b/lib/snmp/doc/src/snmpa_supervisor.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpc.xml b/lib/snmp/doc/src/snmpc.xml
index fb526ee4dc..aba51bb500 100644
--- a/lib/snmp/doc/src/snmpc.xml
+++ b/lib/snmp/doc/src/snmpc.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpc_cmd.xml b/lib/snmp/doc/src/snmpc_cmd.xml
index 2c906a2a51..e4e710a58c 100644
--- a/lib/snmp/doc/src/snmpc_cmd.xml
+++ b/lib/snmp/doc/src/snmpc_cmd.xml
@@ -4,7 +4,7 @@
<comref>
<header>
<copyright>
- <year>2011</year><year>2013</year>
+ <year>2011</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpm.xml b/lib/snmp/doc/src/snmpm.xml
index ab288fd020..4818aeb697 100644
--- a/lib/snmp/doc/src/snmpm.xml
+++ b/lib/snmp/doc/src/snmpm.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2014</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpm_conf.xml b/lib/snmp/doc/src/snmpm_conf.xml
index 815ad2e87a..a3097e5f7e 100644
--- a/lib/snmp/doc/src/snmpm_conf.xml
+++ b/lib/snmp/doc/src/snmpm_conf.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2006</year><year>2014</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpm_mpd.xml b/lib/snmp/doc/src/snmpm_mpd.xml
index 4efaafd578..08276e4b30 100644
--- a/lib/snmp/doc/src/snmpm_mpd.xml
+++ b/lib/snmp/doc/src/snmpm_mpd.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2014</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpm_network_interface.xml b/lib/snmp/doc/src/snmpm_network_interface.xml
index 6b4598ed88..73892aa2e8 100644
--- a/lib/snmp/doc/src/snmpm_network_interface.xml
+++ b/lib/snmp/doc/src/snmpm_network_interface.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2014</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpm_network_interface_filter.xml b/lib/snmp/doc/src/snmpm_network_interface_filter.xml
index 2706f6df09..742cd53fc6 100644
--- a/lib/snmp/doc/src/snmpm_network_interface_filter.xml
+++ b/lib/snmp/doc/src/snmpm_network_interface_filter.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2007</year><year>2014</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/doc/src/snmpm_user.xml b/lib/snmp/doc/src/snmpm_user.xml
index cb2ecb0c58..87ae1d224a 100644
--- a/lib/snmp/doc/src/snmpm_user.xml
+++ b/lib/snmp/doc/src/snmpm_user.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2014</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/snmp/examples/Makefile b/lib/snmp/examples/Makefile
index 854a6e6f8d..39ea5f74db 100644
--- a/lib/snmp/examples/Makefile
+++ b/lib/snmp/examples/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/examples/ex1/Makefile b/lib/snmp/examples/ex1/Makefile
index 2631fdd7ff..a3d02ea778 100644
--- a/lib/snmp/examples/ex1/Makefile
+++ b/lib/snmp/examples/ex1/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/examples/ex2/Makefile b/lib/snmp/examples/ex2/Makefile
index 9259a59c46..624a1df2ee 100644
--- a/lib/snmp/examples/ex2/Makefile
+++ b/lib/snmp/examples/ex2/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2012. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/examples/ex2/snmp_ex2_manager.erl b/lib/snmp/examples/ex2/snmp_ex2_manager.erl
index 38189fa518..939f9f2b4d 100644
--- a/lib/snmp/examples/ex2/snmp_ex2_manager.erl
+++ b/lib/snmp/examples/ex2/snmp_ex2_manager.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/examples/ex2/snmp_ex2_simple_standard_test.erl b/lib/snmp/examples/ex2/snmp_ex2_simple_standard_test.erl
index fecf817fa0..e8f748c337 100644
--- a/lib/snmp/examples/ex2/snmp_ex2_simple_standard_test.erl
+++ b/lib/snmp/examples/ex2/snmp_ex2_simple_standard_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/examples/subdirs.mk b/lib/snmp/examples/subdirs.mk
index 62cba219cd..b6a1709369 100644
--- a/lib/snmp/examples/subdirs.mk
+++ b/lib/snmp/examples/subdirs.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/include/SNMPv2-TC.hrl b/lib/snmp/include/SNMPv2-TC.hrl
index 54ead21a35..21797f9227 100644
--- a/lib/snmp/include/SNMPv2-TC.hrl
+++ b/lib/snmp/include/SNMPv2-TC.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/include/snmp_tables.hrl b/lib/snmp/include/snmp_tables.hrl
index 888539a282..d6fa00ca43 100644
--- a/lib/snmp/include/snmp_tables.hrl
+++ b/lib/snmp/include/snmp_tables.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/include/snmp_types.hrl b/lib/snmp/include/snmp_types.hrl
index 0a7379c790..ffe30996dc 100644
--- a/lib/snmp/include/snmp_types.hrl
+++ b/lib/snmp/include/snmp_types.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/mibs/Makefile.in b/lib/snmp/mibs/Makefile.in
index eea0d4aa63..2350194077 100644
--- a/lib/snmp/mibs/Makefile.in
+++ b/lib/snmp/mibs/Makefile.in
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/priv/conf/Makefile b/lib/snmp/priv/conf/Makefile
index 854a6e6f8d..39ea5f74db 100644
--- a/lib/snmp/priv/conf/Makefile
+++ b/lib/snmp/priv/conf/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/priv/conf/agent/Makefile b/lib/snmp/priv/conf/agent/Makefile
index 5e9b922d04..e905f55999 100644
--- a/lib/snmp/priv/conf/agent/Makefile
+++ b/lib/snmp/priv/conf/agent/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/priv/conf/agent/files.mk b/lib/snmp/priv/conf/agent/files.mk
index 8e6c80f3a2..bccf162ef5 100644
--- a/lib/snmp/priv/conf/agent/files.mk
+++ b/lib/snmp/priv/conf/agent/files.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
+# Copyright Ericsson AB 2001-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/priv/conf/manager/Makefile b/lib/snmp/priv/conf/manager/Makefile
index b88ed0a11c..27024c171f 100644
--- a/lib/snmp/priv/conf/manager/Makefile
+++ b/lib/snmp/priv/conf/manager/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/priv/conf/manager/files.mk b/lib/snmp/priv/conf/manager/files.mk
index 9ead147aff..db52a3712f 100644
--- a/lib/snmp/priv/conf/manager/files.mk
+++ b/lib/snmp/priv/conf/manager/files.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/priv/conf/subdirs.mk b/lib/snmp/priv/conf/subdirs.mk
index 7d8d40887f..c17f5db483 100644
--- a/lib/snmp/priv/conf/subdirs.mk
+++ b/lib/snmp/priv/conf/subdirs.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/Makefile b/lib/snmp/src/Makefile
index 854a6e6f8d..39ea5f74db 100644
--- a/lib/snmp/src/Makefile
+++ b/lib/snmp/src/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/Makefile b/lib/snmp/src/agent/Makefile
index 89037b3ea8..2943a4d550 100644
--- a/lib/snmp/src/agent/Makefile
+++ b/lib/snmp/src/agent/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/depend.mk b/lib/snmp/src/agent/depend.mk
index e9964f5151..8eba50fa3b 100644
--- a/lib/snmp/src/agent/depend.mk
+++ b/lib/snmp/src/agent/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2013. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/modules.mk b/lib/snmp/src/agent/modules.mk
index b2f1d5cc93..0f8615588a 100644
--- a/lib/snmp/src/agent/modules.mk
+++ b/lib/snmp/src/agent/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2013. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmp_community_mib.erl b/lib/snmp/src/agent/snmp_community_mib.erl
index dbd9f468d7..9fd7b30f9f 100644
--- a/lib/snmp/src/agent/snmp_community_mib.erl
+++ b/lib/snmp/src/agent/snmp_community_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmp_framework_mib.erl b/lib/snmp/src/agent/snmp_framework_mib.erl
index 80ebba6c90..7ea4f0ed97 100644
--- a/lib/snmp/src/agent/snmp_framework_mib.erl
+++ b/lib/snmp/src/agent/snmp_framework_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmp_generic.erl b/lib/snmp/src/agent/snmp_generic.erl
index ec6b7161ea..fc23e16ef1 100644
--- a/lib/snmp/src/agent/snmp_generic.erl
+++ b/lib/snmp/src/agent/snmp_generic.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmp_generic_mnesia.erl b/lib/snmp/src/agent/snmp_generic_mnesia.erl
index 051566e43d..131b9b0368 100644
--- a/lib/snmp/src/agent/snmp_generic_mnesia.erl
+++ b/lib/snmp/src/agent/snmp_generic_mnesia.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmp_index.erl b/lib/snmp/src/agent/snmp_index.erl
index 5e03c530f1..38b39a9b7e 100644
--- a/lib/snmp/src/agent/snmp_index.erl
+++ b/lib/snmp/src/agent/snmp_index.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmp_notification_mib.erl b/lib/snmp/src/agent/snmp_notification_mib.erl
index 15ecbcc5d9..3f1ba5d8b3 100644
--- a/lib/snmp/src/agent/snmp_notification_mib.erl
+++ b/lib/snmp/src/agent/snmp_notification_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
index 9e6aa74d45..02415e8036 100644
--- a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
+++ b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa.erl b/lib/snmp/src/agent/snmpa.erl
index 7c70404e02..ff7be54283 100644
--- a/lib/snmp/src/agent/snmpa.erl
+++ b/lib/snmp/src/agent/snmpa.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_acm.erl b/lib/snmp/src/agent/snmpa_acm.erl
index 0264c6a992..de67df8a06 100644
--- a/lib/snmp/src/agent/snmpa_acm.erl
+++ b/lib/snmp/src/agent/snmpa_acm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_agent.erl b/lib/snmp/src/agent/snmpa_agent.erl
index bada50a820..458b88359b 100644
--- a/lib/snmp/src/agent/snmpa_agent.erl
+++ b/lib/snmp/src/agent/snmpa_agent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_agent_sup.erl b/lib/snmp/src/agent/snmpa_agent_sup.erl
index f6f218366f..0a5116b2d0 100644
--- a/lib/snmp/src/agent/snmpa_agent_sup.erl
+++ b/lib/snmp/src/agent/snmpa_agent_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_app.erl b/lib/snmp/src/agent/snmpa_app.erl
index 89d1efd0a1..86ff145e93 100644
--- a/lib/snmp/src/agent/snmpa_app.erl
+++ b/lib/snmp/src/agent/snmpa_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_atl.hrl b/lib/snmp/src/agent/snmpa_atl.hrl
index 06d36dbb06..d07c850891 100644
--- a/lib/snmp/src/agent/snmpa_atl.hrl
+++ b/lib/snmp/src/agent/snmpa_atl.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_authentication_service.erl b/lib/snmp/src/agent/snmpa_authentication_service.erl
index 36845c83b2..e4238a8384 100644
--- a/lib/snmp/src/agent/snmpa_authentication_service.erl
+++ b/lib/snmp/src/agent/snmpa_authentication_service.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_conf.erl b/lib/snmp/src/agent/snmpa_conf.erl
index ebefa945c5..fc5116dac9 100644
--- a/lib/snmp/src/agent/snmpa_conf.erl
+++ b/lib/snmp/src/agent/snmpa_conf.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -154,7 +154,7 @@ do_write_agent_conf(Fd, {intAgentMaxPacketSize = Tag, Val} ) ->
do_write_agent_conf(Fd, {snmpEngineMaxMessageSize = Tag, Val} ) ->
io:format(Fd, "{~w, ~w}.~n", [Tag, Val]);
do_write_agent_conf(Fd, {snmpEngineID = Tag, Val} ) ->
- io:format(Fd, "{~w, \"~s\"}.~n", [Tag, Val]);
+ io:format(Fd, "{~w, ~p}.~n", [Tag, Val]);
do_write_agent_conf(_Fd, Crap) ->
error({bad_agent_config, Crap}).
@@ -758,9 +758,9 @@ do_write_usm_conf(
PrivP, PrivKeyC, OwnPrivKeyC,
Public, AuthKey, PrivKey}) ->
io:format(Fd, "{", []),
- io:format(Fd, "\"~s\", ", [EngineID]),
- io:format(Fd, "\"~s\", ", [UserName]),
- io:format(Fd, "\"~s\", ", [SecName]),
+ io:format(Fd, "~p, ", [EngineID]),
+ io:format(Fd, "~p, ", [UserName]),
+ io:format(Fd, "~p, ", [SecName]),
io:format(Fd, "~w, ", [Clone]),
io:format(Fd, "~w, ", [AuthP]),
do_write_usm2(Fd, AuthKeyC, ", "),
@@ -859,15 +859,15 @@ do_write_vacm_conf(
{vacmSecurityToGroup,
SecModel, SecName, GroupName}) ->
io:format(
- Fd, "{vacmSecurityToGroup, ~w, \"~s\", \"~s\"}.~n",
+ Fd, "{vacmSecurityToGroup, ~w, ~p, ~p}.~n",
[SecModel, SecName, GroupName]);
do_write_vacm_conf(
Fd,
{vacmAccess,
GroupName, Prefix, SecModel, SecLevel, Match, RV, WV, NV}) ->
io:format(
- Fd, "{vacmAccess, \"~s\", \"~s\", ~w, ~w, ~w, "
- "\"~s\", \"~s\", \"~s\"}.~n",
+ Fd, "{vacmAccess, ~p, ~p, ~w, ~w, ~w, "
+ "~p, ~p, ~p}.~n",
[GroupName, Prefix, SecModel, SecLevel,
Match, RV, WV, NV]);
do_write_vacm_conf(
@@ -875,7 +875,7 @@ do_write_vacm_conf(
{vacmViewTreeFamily,
ViewIndex, ViewSubtree, ViewStatus, ViewMask}) ->
io:format(
- Fd, "{vacmViewTreeFamily, \"~s\", ~w, ~w, ~w}.~n",
+ Fd, "{vacmViewTreeFamily, ~p, ~w, ~w, ~w}.~n",
[ViewIndex, ViewSubtree, ViewStatus, ViewMask]);
do_write_vacm_conf(_Fd, Crap) ->
error({bad_vacm_config, Crap}).
diff --git a/lib/snmp/src/agent/snmpa_discovery_handler.erl b/lib/snmp/src/agent/snmpa_discovery_handler.erl
index 7f84601200..ffdd6aca1e 100644
--- a/lib/snmp/src/agent/snmpa_discovery_handler.erl
+++ b/lib/snmp/src/agent/snmpa_discovery_handler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_discovery_handler_default.erl b/lib/snmp/src/agent/snmpa_discovery_handler_default.erl
index 89b30b3054..8bd8d1973e 100644
--- a/lib/snmp/src/agent/snmpa_discovery_handler_default.erl
+++ b/lib/snmp/src/agent/snmpa_discovery_handler_default.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_error.erl b/lib/snmp/src/agent/snmpa_error.erl
index 06d61de517..804c850593 100644
--- a/lib/snmp/src/agent/snmpa_error.erl
+++ b/lib/snmp/src/agent/snmpa_error.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_error_io.erl b/lib/snmp/src/agent/snmpa_error_io.erl
index 848869188f..e961d4b525 100644
--- a/lib/snmp/src/agent/snmpa_error_io.erl
+++ b/lib/snmp/src/agent/snmpa_error_io.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_error_logger.erl b/lib/snmp/src/agent/snmpa_error_logger.erl
index 50165d79cd..d52a3e48ac 100644
--- a/lib/snmp/src/agent/snmpa_error_logger.erl
+++ b/lib/snmp/src/agent/snmpa_error_logger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_error_report.erl b/lib/snmp/src/agent/snmpa_error_report.erl
index 6f3508c8b7..8f28eac653 100644
--- a/lib/snmp/src/agent/snmpa_error_report.erl
+++ b/lib/snmp/src/agent/snmpa_error_report.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_general_db.erl b/lib/snmp/src/agent/snmpa_general_db.erl
index 7892a4c033..431302b6cc 100644
--- a/lib/snmp/src/agent/snmpa_general_db.erl
+++ b/lib/snmp/src/agent/snmpa_general_db.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_internal.hrl b/lib/snmp/src/agent/snmpa_internal.hrl
index b340f0d262..fe3ba9f39e 100644
--- a/lib/snmp/src/agent/snmpa_internal.hrl
+++ b/lib/snmp/src/agent/snmpa_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_local_db.erl b/lib/snmp/src/agent/snmpa_local_db.erl
index feab855b2e..eb67b9cd6f 100644
--- a/lib/snmp/src/agent/snmpa_local_db.erl
+++ b/lib/snmp/src/agent/snmpa_local_db.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib.erl b/lib/snmp/src/agent/snmpa_mib.erl
index 2f58922e2c..ab1098514c 100644
--- a/lib/snmp/src/agent/snmpa_mib.erl
+++ b/lib/snmp/src/agent/snmpa_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib_data.erl b/lib/snmp/src/agent/snmpa_mib_data.erl
index 5614a431d6..fcbc0465c8 100644
--- a/lib/snmp/src/agent/snmpa_mib_data.erl
+++ b/lib/snmp/src/agent/snmpa_mib_data.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib_data_ttln.erl b/lib/snmp/src/agent/snmpa_mib_data_ttln.erl
index 312372b41b..959230b1dd 100644
--- a/lib/snmp/src/agent/snmpa_mib_data_ttln.erl
+++ b/lib/snmp/src/agent/snmpa_mib_data_ttln.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib_data_tttn.erl b/lib/snmp/src/agent/snmpa_mib_data_tttn.erl
index 849c9b37d9..9b4493a03f 100644
--- a/lib/snmp/src/agent/snmpa_mib_data_tttn.erl
+++ b/lib/snmp/src/agent/snmpa_mib_data_tttn.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib_lib.erl b/lib/snmp/src/agent/snmpa_mib_lib.erl
index 3006b3c0a8..ecdf968458 100644
--- a/lib/snmp/src/agent/snmpa_mib_lib.erl
+++ b/lib/snmp/src/agent/snmpa_mib_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib_storage.erl b/lib/snmp/src/agent/snmpa_mib_storage.erl
index ea166ed79c..ed0607fb84 100644
--- a/lib/snmp/src/agent/snmpa_mib_storage.erl
+++ b/lib/snmp/src/agent/snmpa_mib_storage.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib_storage_dets.erl b/lib/snmp/src/agent/snmpa_mib_storage_dets.erl
index 53c69b8d45..2459b6bc3e 100644
--- a/lib/snmp/src/agent/snmpa_mib_storage_dets.erl
+++ b/lib/snmp/src/agent/snmpa_mib_storage_dets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib_storage_ets.erl b/lib/snmp/src/agent/snmpa_mib_storage_ets.erl
index a2cceb2fa5..68dfa83247 100644
--- a/lib/snmp/src/agent/snmpa_mib_storage_ets.erl
+++ b/lib/snmp/src/agent/snmpa_mib_storage_ets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_mib_storage_mnesia.erl b/lib/snmp/src/agent/snmpa_mib_storage_mnesia.erl
index 998743f133..5f66b2ed9f 100644
--- a/lib/snmp/src/agent/snmpa_mib_storage_mnesia.erl
+++ b/lib/snmp/src/agent/snmpa_mib_storage_mnesia.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_misc_sup.erl b/lib/snmp/src/agent/snmpa_misc_sup.erl
index 50570d508e..746405ec1d 100644
--- a/lib/snmp/src/agent/snmpa_misc_sup.erl
+++ b/lib/snmp/src/agent/snmpa_misc_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_net_if_filter.erl b/lib/snmp/src/agent/snmpa_net_if_filter.erl
index 5f447ae5c7..1db8609eaf 100644
--- a/lib/snmp/src/agent/snmpa_net_if_filter.erl
+++ b/lib/snmp/src/agent/snmpa_net_if_filter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_network_interface.erl b/lib/snmp/src/agent/snmpa_network_interface.erl
index a9f17f274b..699fbde671 100644
--- a/lib/snmp/src/agent/snmpa_network_interface.erl
+++ b/lib/snmp/src/agent/snmpa_network_interface.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_network_interface_filter.erl b/lib/snmp/src/agent/snmpa_network_interface_filter.erl
index 3ad840e798..1524a6447b 100644
--- a/lib/snmp/src/agent/snmpa_network_interface_filter.erl
+++ b/lib/snmp/src/agent/snmpa_network_interface_filter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_notification_delivery_info_receiver.erl b/lib/snmp/src/agent/snmpa_notification_delivery_info_receiver.erl
index 29686ea757..aca90baf0e 100644
--- a/lib/snmp/src/agent/snmpa_notification_delivery_info_receiver.erl
+++ b/lib/snmp/src/agent/snmpa_notification_delivery_info_receiver.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_notification_filter.erl b/lib/snmp/src/agent/snmpa_notification_filter.erl
index 6eea857721..6300d450c7 100644
--- a/lib/snmp/src/agent/snmpa_notification_filter.erl
+++ b/lib/snmp/src/agent/snmpa_notification_filter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_set.erl b/lib/snmp/src/agent/snmpa_set.erl
index fd99304991..9833d6fdcc 100644
--- a/lib/snmp/src/agent/snmpa_set.erl
+++ b/lib/snmp/src/agent/snmpa_set.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_set_lib.erl b/lib/snmp/src/agent/snmpa_set_lib.erl
index 2d14b719dd..57507a36e8 100644
--- a/lib/snmp/src/agent/snmpa_set_lib.erl
+++ b/lib/snmp/src/agent/snmpa_set_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_set_mechanism.erl b/lib/snmp/src/agent/snmpa_set_mechanism.erl
index b8bf3a9aa8..2f24f38092 100644
--- a/lib/snmp/src/agent/snmpa_set_mechanism.erl
+++ b/lib/snmp/src/agent/snmpa_set_mechanism.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_supervisor.erl b/lib/snmp/src/agent/snmpa_supervisor.erl
index 128c5f875d..cdb5ca840d 100644
--- a/lib/snmp/src/agent/snmpa_supervisor.erl
+++ b/lib/snmp/src/agent/snmpa_supervisor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_svbl.erl b/lib/snmp/src/agent/snmpa_svbl.erl
index 53bbce7707..8955bed0f2 100644
--- a/lib/snmp/src/agent/snmpa_svbl.erl
+++ b/lib/snmp/src/agent/snmpa_svbl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_symbolic_store.erl b/lib/snmp/src/agent/snmpa_symbolic_store.erl
index cffb6bcd1c..945a4e9a9c 100644
--- a/lib/snmp/src/agent/snmpa_symbolic_store.erl
+++ b/lib/snmp/src/agent/snmpa_symbolic_store.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_target_cache.erl b/lib/snmp/src/agent/snmpa_target_cache.erl
index 04d2a121ba..72caf72b33 100644
--- a/lib/snmp/src/agent/snmpa_target_cache.erl
+++ b/lib/snmp/src/agent/snmpa_target_cache.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_trap.erl b/lib/snmp/src/agent/snmpa_trap.erl
index eea2b05eb7..e75016f7ec 100644
--- a/lib/snmp/src/agent/snmpa_trap.erl
+++ b/lib/snmp/src/agent/snmpa_trap.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/agent/snmpa_vacm.hrl b/lib/snmp/src/agent/snmpa_vacm.hrl
index 20506f8715..527298e499 100644
--- a/lib/snmp/src/agent/snmpa_vacm.hrl
+++ b/lib/snmp/src/agent/snmpa_vacm.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/app/Makefile b/lib/snmp/src/app/Makefile
index 7972d9549d..6f2b8a4077 100644
--- a/lib/snmp/src/app/Makefile
+++ b/lib/snmp/src/app/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2013. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/app/depend.mk b/lib/snmp/src/app/depend.mk
index 4a9cc17490..bf213c2aec 100644
--- a/lib/snmp/src/app/depend.mk
+++ b/lib/snmp/src/app/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/app/modules.mk b/lib/snmp/src/app/modules.mk
index fa42614a24..2bfd2d5c56 100644
--- a/lib/snmp/src/app/modules.mk
+++ b/lib/snmp/src/app/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/app/snmp.erl b/lib/snmp/src/app/snmp.erl
index 3c65f40bc7..df3933ea01 100644
--- a/lib/snmp/src/app/snmp.erl
+++ b/lib/snmp/src/app/snmp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/app/snmp_app.erl b/lib/snmp/src/app/snmp_app.erl
index 8b948850dd..dbc1ec0b6d 100644
--- a/lib/snmp/src/app/snmp_app.erl
+++ b/lib/snmp/src/app/snmp_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/app/snmp_app_sup.erl b/lib/snmp/src/app/snmp_app_sup.erl
index 32b69b4bbf..eb89cc5b6d 100644
--- a/lib/snmp/src/app/snmp_app_sup.erl
+++ b/lib/snmp/src/app/snmp_app_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/app/snmp_internal.hrl b/lib/snmp/src/app/snmp_internal.hrl
index 9a1bb4b67c..374767df15 100644
--- a/lib/snmp/src/app/snmp_internal.hrl
+++ b/lib/snmp/src/app/snmp_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/Makefile b/lib/snmp/src/compile/Makefile
index 54f2e229b9..4093ffa9ca 100644
--- a/lib/snmp/src/compile/Makefile
+++ b/lib/snmp/src/compile/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/depend.mk b/lib/snmp/src/compile/depend.mk
index 427ad4cda3..57b7c19daf 100644
--- a/lib/snmp/src/compile/depend.mk
+++ b/lib/snmp/src/compile/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2013. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/modules.mk b/lib/snmp/src/compile/modules.mk
index 547cc3438e..9ca5ebb95a 100644
--- a/lib/snmp/src/compile/modules.mk
+++ b/lib/snmp/src/compile/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2011. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc.hrl b/lib/snmp/src/compile/snmpc.hrl
index 9157ef13f0..b3c66f4f3d 100644
--- a/lib/snmp/src/compile/snmpc.hrl
+++ b/lib/snmp/src/compile/snmpc.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc.src b/lib/snmp/src/compile/snmpc.src
index 903b035d13..e64b6607c4 100644
--- a/lib/snmp/src/compile/snmpc.src
+++ b/lib/snmp/src/compile/snmpc.src
@@ -3,7 +3,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc_lib.erl b/lib/snmp/src/compile/snmpc_lib.erl
index 3b1b1594c9..51690b6e7e 100644
--- a/lib/snmp/src/compile/snmpc_lib.erl
+++ b/lib/snmp/src/compile/snmpc_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc_lib.hrl b/lib/snmp/src/compile/snmpc_lib.hrl
index 0f65fc1820..8d76817cec 100644
--- a/lib/snmp/src/compile/snmpc_lib.hrl
+++ b/lib/snmp/src/compile/snmpc_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc_mib_gram.yrl b/lib/snmp/src/compile/snmpc_mib_gram.yrl
index b152f23d05..743c3a6550 100644
--- a/lib/snmp/src/compile/snmpc_mib_gram.yrl
+++ b/lib/snmp/src/compile/snmpc_mib_gram.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc_mib_to_hrl.erl b/lib/snmp/src/compile/snmpc_mib_to_hrl.erl
index e71530b40e..bc18afbdc9 100644
--- a/lib/snmp/src/compile/snmpc_mib_to_hrl.erl
+++ b/lib/snmp/src/compile/snmpc_mib_to_hrl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc_misc.erl b/lib/snmp/src/compile/snmpc_misc.erl
index 68600bc97a..933d629746 100644
--- a/lib/snmp/src/compile/snmpc_misc.erl
+++ b/lib/snmp/src/compile/snmpc_misc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc_misc.hrl b/lib/snmp/src/compile/snmpc_misc.hrl
index e09ec2712c..2df6d1863d 100644
--- a/lib/snmp/src/compile/snmpc_misc.hrl
+++ b/lib/snmp/src/compile/snmpc_misc.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/compile/snmpc_tok.erl b/lib/snmp/src/compile/snmpc_tok.erl
index 14f88cc9ae..9114cc90de 100644
--- a/lib/snmp/src/compile/snmpc_tok.erl
+++ b/lib/snmp/src/compile/snmpc_tok.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/Makefile b/lib/snmp/src/manager/Makefile
index 382f83b78e..0cc87492f1 100644
--- a/lib/snmp/src/manager/Makefile
+++ b/lib/snmp/src/manager/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/depend.mk b/lib/snmp/src/manager/depend.mk
index 651a6e537d..7d8f81f55a 100644
--- a/lib/snmp/src/manager/depend.mk
+++ b/lib/snmp/src/manager/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2014. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/modules.mk b/lib/snmp/src/manager/modules.mk
index 0f13e26423..ea9b52d653 100644
--- a/lib/snmp/src/manager/modules.mk
+++ b/lib/snmp/src/manager/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm.erl b/lib/snmp/src/manager/snmpm.erl
index 446280b8bd..cf8c95d69f 100644
--- a/lib/snmp/src/manager/snmpm.erl
+++ b/lib/snmp/src/manager/snmpm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_atl.hrl b/lib/snmp/src/manager/snmpm_atl.hrl
index f407b399cf..988b75d9bd 100644
--- a/lib/snmp/src/manager/snmpm_atl.hrl
+++ b/lib/snmp/src/manager/snmpm_atl.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_conf.erl b/lib/snmp/src/manager/snmpm_conf.erl
index 0abc5ae88b..0421f49c88 100644
--- a/lib/snmp/src/manager/snmpm_conf.erl
+++ b/lib/snmp/src/manager/snmpm_conf.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_config.erl b/lib/snmp/src/manager/snmpm_config.erl
index e5c0f27bd6..118cdcd1df 100644
--- a/lib/snmp/src/manager/snmpm_config.erl
+++ b/lib/snmp/src/manager/snmpm_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_internal.hrl b/lib/snmp/src/manager/snmpm_internal.hrl
index 72f277faf6..e917206f13 100644
--- a/lib/snmp/src/manager/snmpm_internal.hrl
+++ b/lib/snmp/src/manager/snmpm_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_misc_sup.erl b/lib/snmp/src/manager/snmpm_misc_sup.erl
index 835216b30b..6ff82b322b 100644
--- a/lib/snmp/src/manager/snmpm_misc_sup.erl
+++ b/lib/snmp/src/manager/snmpm_misc_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_net_if_filter.erl b/lib/snmp/src/manager/snmpm_net_if_filter.erl
index bcc9f97f4c..e5aef0756b 100644
--- a/lib/snmp/src/manager/snmpm_net_if_filter.erl
+++ b/lib/snmp/src/manager/snmpm_net_if_filter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_net_if_mt.erl b/lib/snmp/src/manager/snmpm_net_if_mt.erl
index 72bd69c612..238e212e14 100644
--- a/lib/snmp/src/manager/snmpm_net_if_mt.erl
+++ b/lib/snmp/src/manager/snmpm_net_if_mt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_network_interface.erl b/lib/snmp/src/manager/snmpm_network_interface.erl
index dd4e762d84..d0f6f709d3 100644
--- a/lib/snmp/src/manager/snmpm_network_interface.erl
+++ b/lib/snmp/src/manager/snmpm_network_interface.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_network_interface_filter.erl b/lib/snmp/src/manager/snmpm_network_interface_filter.erl
index 604994756d..35bec4e7e7 100644
--- a/lib/snmp/src/manager/snmpm_network_interface_filter.erl
+++ b/lib/snmp/src/manager/snmpm_network_interface_filter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_server_sup.erl b/lib/snmp/src/manager/snmpm_server_sup.erl
index e8c2790db3..842a5761ce 100644
--- a/lib/snmp/src/manager/snmpm_server_sup.erl
+++ b/lib/snmp/src/manager/snmpm_server_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_supervisor.erl b/lib/snmp/src/manager/snmpm_supervisor.erl
index 5654c01c6a..c36bbe1bdd 100644
--- a/lib/snmp/src/manager/snmpm_supervisor.erl
+++ b/lib/snmp/src/manager/snmpm_supervisor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_user.erl b/lib/snmp/src/manager/snmpm_user.erl
index 366e40cbb9..c0100d372f 100644
--- a/lib/snmp/src/manager/snmpm_user.erl
+++ b/lib/snmp/src/manager/snmpm_user.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_user_default.erl b/lib/snmp/src/manager/snmpm_user_default.erl
index f4f78d49b6..bc2b82a38b 100644
--- a/lib/snmp/src/manager/snmpm_user_default.erl
+++ b/lib/snmp/src/manager/snmpm_user_default.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_user_old.erl b/lib/snmp/src/manager/snmpm_user_old.erl
index c490421d6e..bc15ad445b 100644
--- a/lib/snmp/src/manager/snmpm_user_old.erl
+++ b/lib/snmp/src/manager/snmpm_user_old.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_usm.erl b/lib/snmp/src/manager/snmpm_usm.erl
index c7a28f5d68..7dd79e703a 100644
--- a/lib/snmp/src/manager/snmpm_usm.erl
+++ b/lib/snmp/src/manager/snmpm_usm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/manager/snmpm_usm.hrl b/lib/snmp/src/manager/snmpm_usm.hrl
index 7a0d225aff..38d4a1a07e 100644
--- a/lib/snmp/src/manager/snmpm_usm.hrl
+++ b/lib/snmp/src/manager/snmpm_usm.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/Makefile b/lib/snmp/src/misc/Makefile
index c71ecf994e..adc2c4858f 100644
--- a/lib/snmp/src/misc/Makefile
+++ b/lib/snmp/src/misc/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/depend.mk b/lib/snmp/src/misc/depend.mk
index 3f8e6701b9..b2e0a92997 100644
--- a/lib/snmp/src/misc/depend.mk
+++ b/lib/snmp/src/misc/depend.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/modules.mk b/lib/snmp/src/misc/modules.mk
index c22f3604b7..ac42128724 100644
--- a/lib/snmp/src/misc/modules.mk
+++ b/lib/snmp/src/misc/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2009. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_conf.erl b/lib/snmp/src/misc/snmp_conf.erl
index 6264d79cec..513616a285 100644
--- a/lib/snmp/src/misc/snmp_conf.erl
+++ b/lib/snmp/src/misc/snmp_conf.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_config.erl b/lib/snmp/src/misc/snmp_config.erl
index 2b6bfdcb56..45661b71a7 100644
--- a/lib/snmp/src/misc/snmp_config.erl
+++ b/lib/snmp/src/misc/snmp_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_debug.hrl b/lib/snmp/src/misc/snmp_debug.hrl
index 86445893b6..6ed4af7d50 100644
--- a/lib/snmp/src/misc/snmp_debug.hrl
+++ b/lib/snmp/src/misc/snmp_debug.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_log.erl b/lib/snmp/src/misc/snmp_log.erl
index 09863dea60..767d801eee 100644
--- a/lib/snmp/src/misc/snmp_log.erl
+++ b/lib/snmp/src/misc/snmp_log.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_mini_mib.erl b/lib/snmp/src/misc/snmp_mini_mib.erl
index bc9596f64f..92de339001 100644
--- a/lib/snmp/src/misc/snmp_mini_mib.erl
+++ b/lib/snmp/src/misc/snmp_mini_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_note_store.erl b/lib/snmp/src/misc/snmp_note_store.erl
index 74bdd34931..606dd8ce4f 100644
--- a/lib/snmp/src/misc/snmp_note_store.erl
+++ b/lib/snmp/src/misc/snmp_note_store.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_pdus.erl b/lib/snmp/src/misc/snmp_pdus.erl
index 8045a94ff6..93f06749fd 100644
--- a/lib/snmp/src/misc/snmp_pdus.erl
+++ b/lib/snmp/src/misc/snmp_pdus.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_usm.erl b/lib/snmp/src/misc/snmp_usm.erl
index 8443b009d9..bae6bdec72 100644
--- a/lib/snmp/src/misc/snmp_usm.erl
+++ b/lib/snmp/src/misc/snmp_usm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/misc/snmp_verbosity.hrl b/lib/snmp/src/misc/snmp_verbosity.hrl
index 950b5aa444..c79f4c3e88 100644
--- a/lib/snmp/src/misc/snmp_verbosity.hrl
+++ b/lib/snmp/src/misc/snmp_verbosity.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/src/subdirs.mk b/lib/snmp/src/subdirs.mk
index e5a437ccfe..5f45fd2586 100644
--- a/lib/snmp/src/subdirs.mk
+++ b/lib/snmp/src/subdirs.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2009. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/subdirs.mk b/lib/snmp/subdirs.mk
index caa4b8baf2..dd8af81d34 100644
--- a/lib/snmp/subdirs.mk
+++ b/lib/snmp/subdirs.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2009. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/Makefile b/lib/snmp/test/Makefile
index 3261982a32..a9142d911d 100644
--- a/lib/snmp/test/Makefile
+++ b/lib/snmp/test/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2014. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -150,7 +150,6 @@ ERL_COMPILE_FLAGS += -I../../snmp/src/app \
-I../../snmp/src/misc \
-I../../snmp/src/agent \
-I../../snmp/src/manager \
- -I$(ERL_TOP)/lib/test_server/include \
-I../../snmp/include \
-Dsnmp_test_data=snmp_test_data \
-Dversion=\"$(VSN)$(PRE_VSN)\" \
diff --git a/lib/snmp/test/exp/snmp_agent_bl_test.erl b/lib/snmp/test/exp/snmp_agent_bl_test.erl
index 186a1d0fec..af53f816f4 100644
--- a/lib/snmp/test/exp/snmp_agent_bl_test.erl
+++ b/lib/snmp/test/exp/snmp_agent_bl_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/exp/snmp_agent_ms_test.erl b/lib/snmp/test/exp/snmp_agent_ms_test.erl
index 3415fcc8e6..e615e224dc 100644
--- a/lib/snmp/test/exp/snmp_agent_ms_test.erl
+++ b/lib/snmp/test/exp/snmp_agent_ms_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
-define(application, snmp).
-include_lib("kernel/include/file.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/exp/snmp_agent_mt_test.erl b/lib/snmp/test/exp/snmp_agent_mt_test.erl
index 89815e1044..a9e68011ea 100644
--- a/lib/snmp/test/exp/snmp_agent_mt_test.erl
+++ b/lib/snmp/test/exp/snmp_agent_mt_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
-define(application, snmp).
-include_lib("kernel/include/file.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/exp/snmp_agent_v1_test.erl b/lib/snmp/test/exp/snmp_agent_v1_test.erl
index ec243747df..98e29e55f7 100644
--- a/lib/snmp/test/exp/snmp_agent_v1_test.erl
+++ b/lib/snmp/test/exp/snmp_agent_v1_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
-define(application, snmp).
-include_lib("kernel/include/file.hrl").
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/exp/snmp_agent_v2_test.erl b/lib/snmp/test/exp/snmp_agent_v2_test.erl
index ce95d0b5cd..c69904daf5 100644
--- a/lib/snmp/test/exp/snmp_agent_v2_test.erl
+++ b/lib/snmp/test/exp/snmp_agent_v2_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
-define(application, snmp).
-include_lib("kernel/include/file.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/exp/snmp_agent_v3_test.erl b/lib/snmp/test/exp/snmp_agent_v3_test.erl
index 1ba06209b2..066a5a26fc 100644
--- a/lib/snmp/test/exp/snmp_agent_v3_test.erl
+++ b/lib/snmp/test/exp/snmp_agent_v3_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
-define(application, snmp).
-include_lib("kernel/include/file.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/klas3.erl b/lib/snmp/test/klas3.erl
index eb0c41bf77..9a5c388170 100644
--- a/lib/snmp/test/klas3.erl
+++ b/lib/snmp/test/klas3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/modules.mk b/lib/snmp/test/modules.mk
index 16a570706a..0f54e67c65 100644
--- a/lib/snmp/test/modules.mk
+++ b/lib/snmp/test/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2014. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ SUITE_MODULES = \
snmp_agent_mibs_test \
snmp_agent_nfilter_test \
snmp_agent_test \
+ snmp_agent_conf_test \
snmp_agent_test_lib \
snmp_manager_config_test \
snmp_manager_user \
diff --git a/lib/snmp/test/sa.erl b/lib/snmp/test/sa.erl
index 3e34fb2328..99e1ad55fd 100644
--- a/lib/snmp/test/sa.erl
+++ b/lib/snmp/test/sa.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_SUITE.erl b/lib/snmp/test/snmp_SUITE.erl
index 43f6b1abff..05bd86253b 100644
--- a/lib/snmp/test/snmp_SUITE.erl
+++ b/lib/snmp/test/snmp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -81,7 +81,8 @@ groups() ->
{group, note_store_test}]},
{agent, [], [{group, mibs_test},
{group, nfilter_test},
- {group, agent_test},
+ {group, agent_test},
+ {group, agent_conf_test},
{group, snmpnet_test}]},
{manager, [], [{group, manager_config_test},
{group, manager_user_test},
@@ -97,6 +98,7 @@ groups() ->
{mibs_test, [], [{snmp_agent_mibs_test, all}]},
{nfilter_test, [], [{snmp_agent_nfilter_test, all}]},
{agent_test, [], [{snmp_agent_test, all}]},
+ {agent_conf_test, [], [{snmp_agent_conf_test, all}]},
{snmpnet_test, [], [{snmp_to_snmpnet_SUITE, all}]},
{manager_config_test, [], [{snmp_manager_config_test, all}]},
{manager_user_test, [], [{snmp_manager_user_test, all}]},
diff --git a/lib/snmp/test/snmp_agent_conf_test.erl b/lib/snmp/test/snmp_agent_conf_test.erl
new file mode 100644
index 0000000000..0a22bd47d1
--- /dev/null
+++ b/lib/snmp/test/snmp_agent_conf_test.erl
@@ -0,0 +1,210 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(snmp_agent_conf_test).
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+
+%-include_lib("test_server/include/test_server.hrl").
+%-include("snmp_test_lib.hrl").
+-include_lib("common_test/include/ct.hrl").
+
+-export([
+ all/0,
+ groups/0,
+ init_per_suite/1,
+ end_per_suite/1,
+
+ check_agent/1,
+ check_usm/1,
+ check_vacm/1
+ ]).
+
+
+all() -> [
+ check_agent,
+ check_usm,
+ check_vacm
+ ].
+
+
+groups() ->
+ [].
+
+
+init_per_suite(Config) ->
+ PrivDir = ?config(priv_dir, Config),
+ PrivSubdir = filename:join(PrivDir, "snmp_agent_conf_test"),
+ ok = filelib:ensure_dir(filename:join(PrivSubdir, "dummy")),
+ [{priv_subdir, PrivSubdir} | Config].
+
+end_per_suite(_Config) ->
+ ok.
+
+%%======================================================================
+%% Test data
+%%======================================================================
+
+engine_ids() -> [
+ "plain eid",
+ "here\"eid",
+ "comes\neid",
+ "trouble\0eid",
+ binary_to_list(<<"中国引擎标识符"/utf8>>)
+].
+
+snmp_admin_strings() -> [
+ "plain string",
+ "heres\"eid",
+ "trouble\neid",
+ binary_to_list(<<"中国引擎标识符"/utf8>>)
+].
+
+
+%%======================================================================
+%% Test functions
+%%======================================================================
+
+
+check_agent(Config) ->
+ Dir = ?config(priv_subdir, Config),
+ lists:foreach(
+ fun(EngineId) -> check_agent_by_engineid(Dir, EngineId) end,
+ engine_ids()
+ ),
+ ok.
+
+check_agent_by_engineid(Dir, EngineId) ->
+ WEntries = [
+ snmpa_conf:agent_entry(intAgentIpAddress, {0,0,0,0}),
+ snmpa_conf:agent_entry(intAgentUDPPort, 161),
+ snmpa_conf:agent_entry(snmpEngineMaxMessageSize, 484),
+ snmpa_conf:agent_entry(snmpEngineID, EngineId)
+ ],
+
+ ok = snmpa_conf:write_agent_config(Dir, WEntries),
+ {ok, REntries} = snmpa_conf:read_agent_config(Dir),
+
+ true = is_subset(WEntries, REntries),
+ ok.
+
+%%======================================================================
+
+check_usm(Config) ->
+ Dir = ?config(priv_subdir, Config),
+ EngineId = hd(engine_ids()),
+ UserName = hd(snmp_admin_strings()),
+ SecName = hd(snmp_admin_strings()),
+
+ %% vary engine id
+ lists:foreach(
+ fun(EngineId_) -> check_usm_by_params(Dir, EngineId_, UserName, SecName) end,
+ engine_ids()
+ ),
+
+ %% vary user name
+ lists:foreach(
+ fun(UserName_) -> check_usm_by_params(Dir, EngineId, UserName_, SecName) end,
+ snmp_admin_strings()
+ ),
+
+ %% vary sec name
+ lists:foreach(
+ fun(SecName_) -> check_usm_by_params(Dir, EngineId, UserName, SecName_) end,
+ snmp_admin_strings()
+ ),
+
+ ok.
+
+check_usm_by_params(Dir, EngineId, UserName, SecName) ->
+ WEntries = [
+ snmpa_conf:usm_entry(
+ EngineId,
+ UserName,
+ SecName,
+ zeroDotZero,
+ usmNoAuthProtocol, % authproto
+ "", "",
+ usmNoPrivProtocol, % privproto
+ "", "", "",
+ [], %AuthKey
+ []) %PrivKey
+ ],
+
+ ok = snmpa_conf:write_usm_config(Dir, WEntries),
+ {ok, REntries} = snmpa_conf:read_usm_config(Dir),
+
+ true = is_subset(WEntries, REntries),
+ ok.
+
+%%======================================================================
+
+check_vacm(Config) ->
+ Dir = ?config(priv_subdir, Config),
+
+ %% vary sec name
+ lists:foreach(
+ fun(SecName_) -> check_vacm_by_params(Dir, SecName_) end,
+ snmp_admin_strings()
+ ),
+
+ ok.
+
+
+check_vacm_by_params(Dir, SecName) ->
+ WEntries = [
+ %% SecModel, SecName, GroupName
+ snmpa_conf:vacm_s2g_entry(usm, SecName, SecName),
+ %% GroupName,Prefix,SecModel,SecLevel,Match,ReadView,WriteView,NotifyView
+ snmpa_conf:vacm_acc_entry(SecName, "", any, noAuthNoPriv, exact, "all", "all", "all")
+ ],
+
+ ok = snmpa_conf:write_vacm_config(Dir, WEntries),
+ {ok, REntries} = snmpa_conf:read_vacm_config(Dir),
+
+ true = is_subset(WEntries, REntries),
+ ok.
+
+
+
+%%======================================================================
+
+
+%% additional tests needed:
+% check_context()
+% check_community()
+% check_standard()
+% check_target_addr()
+% check_target_params()
+% check_notify()
+
+
+%%======================================================================
+%% Local utility functions
+%%======================================================================
+
+is_subset(List1, List2) ->
+ io:format("Check ~p is subset of ~p\n", [List1, List2]),
+ sets:is_subset(
+ sets:from_list(List1),
+ sets:from_list(List2)
+ ).
diff --git a/lib/snmp/test/snmp_agent_mibs_test.erl b/lib/snmp/test/snmp_agent_mibs_test.erl
index a03c2b8534..4babffef43 100644
--- a/lib/snmp/test/snmp_agent_mibs_test.erl
+++ b/lib/snmp/test/snmp_agent_mibs_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,7 +31,7 @@
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-include_lib("snmp/include/snmp_types.hrl").
-include_lib("snmp/include/SNMP-COMMUNITY-MIB.hrl").
diff --git a/lib/snmp/test/snmp_agent_nfilter_test.erl b/lib/snmp/test/snmp_agent_nfilter_test.erl
index 16a9903198..64fdf20c3f 100644
--- a/lib/snmp/test/snmp_agent_nfilter_test.erl
+++ b/lib/snmp/test/snmp_agent_nfilter_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
diff --git a/lib/snmp/test/snmp_agent_test.erl b/lib/snmp/test/snmp_agent_test.erl
index 412d62c6a1..8ae495bb1b 100644
--- a/lib/snmp/test/snmp_agent_test.erl
+++ b/lib/snmp/test/snmp_agent_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -421,7 +421,7 @@
-define(application, snmp).
-include_lib("kernel/include/file.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/snmp_agent_test_lib.erl b/lib/snmp/test/snmp_agent_test_lib.erl
index 8ea7b2e081..66211d7105 100644
--- a/lib/snmp/test/snmp_agent_test_lib.erl
+++ b/lib/snmp/test/snmp_agent_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -69,7 +69,7 @@
-export([wait/5, run/4]).
-include_lib("kernel/include/file.hrl").
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/snmp_app_test.erl b/lib/snmp/test/snmp_app_test.erl
index 3b5b196ad6..6e7e85d3b4 100644
--- a/lib/snmp/test/snmp_app_test.erl
+++ b/lib/snmp/test/snmp_app_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,7 +45,7 @@
-include_lib("kernel/include/file.hrl").
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
diff --git a/lib/snmp/test/snmp_appup_test.erl b/lib/snmp/test/snmp_appup_test.erl
index 47cbd5fe8c..aff1c7c782 100644
--- a/lib/snmp/test/snmp_appup_test.erl
+++ b/lib/snmp/test/snmp_appup_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_compiler_test.erl b/lib/snmp/test/snmp_compiler_test.erl
index c83c4e0fed..2c8851c2a7 100644
--- a/lib/snmp/test/snmp_compiler_test.erl
+++ b/lib/snmp/test/snmp_compiler_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/snmp_conf_test.erl b/lib/snmp/test/snmp_conf_test.erl
index 1d514cd1d2..6242fdeca3 100644
--- a/lib/snmp/test/snmp_conf_test.erl
+++ b/lib/snmp/test/snmp_conf_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-include_lib("snmp/include/STANDARD-MIB.hrl").
diff --git a/lib/snmp/test/snmp_log_test.erl b/lib/snmp/test/snmp_log_test.erl
index b204522ee0..8890b4b20d 100644
--- a/lib/snmp/test/snmp_log_test.erl
+++ b/lib/snmp/test/snmp_log_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-define(SNMP_USE_V3, true).
-include_lib("snmp/include/snmp_types.hrl").
diff --git a/lib/snmp/test/snmp_manager_config_test.erl b/lib/snmp/test/snmp_manager_config_test.erl
index 47e150e8e8..64d3134055 100644
--- a/lib/snmp/test/snmp_manager_config_test.erl
+++ b/lib/snmp/test/snmp_manager_config_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,7 +32,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-include_lib("snmp/src/manager/snmpm_usm.hrl").
diff --git a/lib/snmp/test/snmp_manager_test.erl b/lib/snmp/test/snmp_manager_test.erl
index 3d05e5791f..d17882e765 100644
--- a/lib/snmp/test/snmp_manager_test.erl
+++ b/lib/snmp/test/snmp_manager_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,7 +32,7 @@
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
-include("snmp_test_data/Test2.hrl").
diff --git a/lib/snmp/test/snmp_manager_user.erl b/lib/snmp/test/snmp_manager_user.erl
index 256ea6a834..409f87cf40 100644
--- a/lib/snmp/test/snmp_manager_user.erl
+++ b/lib/snmp/test/snmp_manager_user.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,7 +31,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
diff --git a/lib/snmp/test/snmp_manager_user_old.erl b/lib/snmp/test/snmp_manager_user_old.erl
index 0f0f026eca..51b55da2e6 100644
--- a/lib/snmp/test/snmp_manager_user_old.erl
+++ b/lib/snmp/test/snmp_manager_user_old.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
diff --git a/lib/snmp/test/snmp_manager_user_test.erl b/lib/snmp/test/snmp_manager_user_test.erl
index a0cdcdef4d..915249ec77 100644
--- a/lib/snmp/test/snmp_manager_user_test.erl
+++ b/lib/snmp/test/snmp_manager_user_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
diff --git a/lib/snmp/test/snmp_manager_user_test_lib.erl b/lib/snmp/test/snmp_manager_user_test_lib.erl
index a547f78efb..8df7f1e662 100644
--- a/lib/snmp/test/snmp_manager_user_test_lib.erl
+++ b/lib/snmp/test/snmp_manager_user_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("snmp_test_lib.hrl").
diff --git a/lib/snmp/test/snmp_note_store_test.erl b/lib/snmp/test/snmp_note_store_test.erl
index 902d37b0d7..94d400fb53 100644
--- a/lib/snmp/test/snmp_note_store_test.erl
+++ b/lib/snmp/test/snmp_note_store_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_pdus_test.erl b/lib/snmp/test/snmp_pdus_test.erl
index bfbd031646..29a793ebcb 100644
--- a/lib/snmp/test/snmp_pdus_test.erl
+++ b/lib/snmp/test/snmp_pdus_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_test_manager.erl b/lib/snmp/test/snmp_test_manager.erl
index 294f0e8240..6ab5ce164c 100644
--- a/lib/snmp/test/snmp_test_manager.erl
+++ b/lib/snmp/test/snmp_test_manager.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_test_mgr_counter_server.erl b/lib/snmp/test/snmp_test_mgr_counter_server.erl
index a72eefd6e5..697afdf799 100644
--- a/lib/snmp/test/snmp_test_mgr_counter_server.erl
+++ b/lib/snmp/test/snmp_test_mgr_counter_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_test_mgr_misc.erl b/lib/snmp/test/snmp_test_mgr_misc.erl
index 0a0e3be9aa..274fb5be26 100644
--- a/lib/snmp/test/snmp_test_mgr_misc.erl
+++ b/lib/snmp/test/snmp_test_mgr_misc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_test_server.erl b/lib/snmp/test/snmp_test_server.erl
index 8b22d6943a..a77bdc142c 100644
--- a/lib/snmp/test/snmp_test_server.erl
+++ b/lib/snmp/test/snmp_test_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_test_suite.erl b/lib/snmp/test/snmp_test_suite.erl
index 07c93d062c..539c6348a9 100644
--- a/lib/snmp/test/snmp_test_suite.erl
+++ b/lib/snmp/test/snmp_test_suite.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_to_snmpnet_SUITE.erl b/lib/snmp/test/snmp_to_snmpnet_SUITE.erl
index 95f4a7518b..ac9e37bc8b 100644
--- a/lib/snmp/test/snmp_to_snmpnet_SUITE.erl
+++ b/lib/snmp/test/snmp_to_snmpnet_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/snmp_to_snmpnet_SUITE_data/start_stop_wrapper b/lib/snmp/test/snmp_to_snmpnet_SUITE_data/start_stop_wrapper
index 8bd8e1ab4a..e10507cfbd 100755
--- a/lib/snmp/test/snmp_to_snmpnet_SUITE_data/start_stop_wrapper
+++ b/lib/snmp/test/snmp_to_snmpnet_SUITE_data/start_stop_wrapper
@@ -2,7 +2,7 @@
##
## %CopyrightBegin%
##
-## Copyright Ericsson AB 2014-2014. All Rights Reserved.
+## Copyright Ericsson AB 2014-2016. All Rights Reserved.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/test1.erl b/lib/snmp/test/test1.erl
index 82555af11f..3337b265e6 100644
--- a/lib/snmp/test/test1.erl
+++ b/lib/snmp/test/test1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/test2.erl b/lib/snmp/test/test2.erl
index 2bfae95c8d..c73a0930d6 100644
--- a/lib/snmp/test/test2.erl
+++ b/lib/snmp/test/test2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/test_config/Makefile b/lib/snmp/test/test_config/Makefile
index 6e78350e9f..1e53f51b83 100644
--- a/lib/snmp/test/test_config/Makefile
+++ b/lib/snmp/test/test_config/Makefile
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2011. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/test_config/modules.mk b/lib/snmp/test/test_config/modules.mk
index 64244be7fe..23475b63f8 100644
--- a/lib/snmp/test/test_config/modules.mk
+++ b/lib/snmp/test/test_config/modules.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2010. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/snmp/test/test_config/snmp_test_config.erl b/lib/snmp/test/test_config/snmp_test_config.erl
index 80fac0c772..89246f5b02 100644
--- a/lib/snmp/test/test_config/snmp_test_config.erl
+++ b/lib/snmp/test/test_config/snmp_test_config.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/snmp/vsn.mk b/lib/snmp/vsn.mk
index f60cbbfaa7..f95b428290 100644
--- a/lib/snmp/vsn.mk
+++ b/lib/snmp/vsn.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2015. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -19,6 +19,6 @@
# %CopyrightEnd%
APPLICATION = snmp
-SNMP_VSN = 5.2.2
+SNMP_VSN = 5.2.3
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(SNMP_VSN)$(PRE_VSN)"
diff --git a/lib/ssh/Makefile b/lib/ssh/Makefile
index 839aada22f..dedc7ac3a6 100644
--- a/lib/ssh/Makefile
+++ b/lib/ssh/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2010. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ssh/doc/src/Makefile b/lib/ssh/doc/src/Makefile
index c0707f8004..a759854da4 100644
--- a/lib/ssh/doc/src/Makefile
+++ b/lib/ssh/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ssh/doc/src/book.xml b/lib/ssh/doc/src/book.xml
index 33b1e0036b..bc104b274d 100644
--- a/lib/ssh/doc/src/book.xml
+++ b/lib/ssh/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2005</year><year>2013</year>
+ <year>2005</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/doc/src/introduction.xml b/lib/ssh/doc/src/introduction.xml
index 187d458092..ca84528f3d 100644
--- a/lib/ssh/doc/src/introduction.xml
+++ b/lib/ssh/doc/src/introduction.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2012</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/doc/src/notes.xml b/lib/ssh/doc/src/notes.xml
index 00a8bceb4a..f9d11b2a60 100644
--- a/lib/ssh/doc/src/notes.xml
+++ b/lib/ssh/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2015</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,6 +30,108 @@
<file>notes.xml</file>
</header>
+<section><title>Ssh 4.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ SSH client does not any longer retry a bad password given
+ as option to ssh:connect et al.</p>
+ <p>
+ Own Id: OTP-13674 Aux Id: TR-HU92273 </p>
+ </item>
+ <item>
+ <p>
+ Removed possible hanging risk for a certain timing
+ sequence when communicating client and server executes on
+ the same node.</p>
+ <p>
+ Own Id: OTP-13715</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Ssh 4.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ A socket created and connected by gen_tcp could now be
+ used as input to ssh:connect, ssh:shell,
+ ssh_sftp:start_channel and ssh:daemon.</p>
+ <p>
+ Own Id: OTP-12860</p>
+ </item>
+ <item>
+ <p>
+ Some time optimization mainly in message encoding.</p>
+ <p>
+ Own Id: OTP-13131</p>
+ </item>
+ <item>
+ <p>
+ Optimized the sftp client time by setting new packet and
+ window sizes.</p>
+ <p>
+ Own Id: OTP-13175</p>
+ </item>
+ <item>
+ <p>
+ The <c>ssh_connection_handler</c> module in SSH is
+ changed and now uses the new behaviour <c>gen_statem</c>. </p>
+ <p>
+ The module can be used as an example of a
+ <c>gen_statem</c> callback module but with a warning:
+ This commit of ssh is just a straightforward port from
+ gen_fsm to gen_statem with some code cleaning. Since the
+ state machine and the state callbacks are almost
+ unchanged the ssh module does not demonstrate the full
+ potential of the new behaviour.</p>
+ <p>
+ The "new" state machine uses compound states. The ssh
+ server and client state machines are quite similar but
+ differences exist. With <c>gen_fsm</c> there were flags
+ in the user data which in fact implemented "substates".
+ Now with <c>gen_statem</c> those are made explicit in the
+ state names, eg. the state <c>userauth</c> and the binary
+ <c>role</c>-flag becomes the two state names
+ <c>{userauth, server}</c> and <c>{userauth, client}</c>.</p>
+ <p>
+ Own Id: OTP-13267</p>
+ </item>
+ <item>
+ <p>
+ The <c>{error, Reason}</c> tuples returned from
+ <c>ssh_sftp</c> api functions are described.</p>
+ <p>
+ Own Id: OTP-13347 Aux Id: ERL-86 </p>
+ </item>
+ <item>
+ <p>
+ Added -spec in ssh</p>
+ <p>
+ Own Id: OTP-13479</p>
+ </item>
+ <item>
+ <p>
+ It is now possible to call <c>ssh:daemon/{1,2,3}</c> with
+ <c>Port=0</c>. This makes the daemon select a free
+ listening tcp port before opening it. To find this port
+ number after the call, use the new function
+ <c>ssh:daemon_info/1</c>. See the reference manual for
+ details.</p>
+ <p>
+ Own Id: OTP-13527</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Ssh 4.2.2.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/ssh/doc/src/part_notes.xml b/lib/ssh/doc/src/part_notes.xml
index 664cadce57..aaca8ca9f2 100644
--- a/lib/ssh/doc/src/part_notes.xml
+++ b/lib/ssh/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/doc/src/ref_man.xml b/lib/ssh/doc/src/ref_man.xml
index 4a2f043948..140ebd8c76 100644
--- a/lib/ssh/doc/src/ref_man.xml
+++ b/lib/ssh/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml
index 850557444d..e6c54d27bf 100644
--- a/lib/ssh/doc/src/ssh.xml
+++ b/lib/ssh/doc/src/ssh.xml
@@ -125,8 +125,10 @@
<func>
<name>connect(Host, Port, Options) -> </name>
- <name>connect(Host, Port, Options, Timeout) -> {ok,
- ssh_connection_ref()} | {error, Reason}</name>
+ <name>connect(Host, Port, Options, Timeout) -> </name>
+ <name>connect(TcpSocket, Options) -> </name>
+ <name>connect(TcpSocket, Options, Timeout) ->
+ {ok, ssh_connection_ref()} | {error, Reason}</name>
<fsummary>Connects to an SSH server.</fsummary>
<type>
<v>Host = string()</v>
@@ -137,6 +139,8 @@
<v>Timeout = infinity | integer()</v>
<d>Negotiation time-out in milli-seconds. The default value is <c>infinity</c>.
For connection time-out, use option <c>{connect_timeout, timeout()}</c>.</d>
+ <v>TcpSocket = port()</v>
+ <d>The socket is supposed to be from <seealso marker="kernel:gen_tcp#connect-3">gen_tcp:connect</seealso> or <seealso marker="kernel:gen_tcp#accept-1">gen_tcp:accept</seealso> with option <c>{active,false}</c></d>
</type>
<desc>
<p>Connects to an SSH server. No channel is started. This is done
@@ -241,6 +245,7 @@
{server2client,['aes128-cbc','3des-cbc']}]},
{mac,['hmac-sha2-256','hmac-sha1']},
{compression,[none,zlib]}
+ ]
}
</code>
<p>The example specifies different algorithms in the two directions (client2server and server2client),
@@ -346,8 +351,9 @@
<func>
<name>daemon(Port) -> </name>
<name>daemon(Port, Options) -> </name>
- <name>daemon(HostAddress, Port, Options) -> {ok,
- ssh_daemon_ref()} | {error, atom()}</name>
+ <name>daemon(HostAddress, Port, Options) -> </name>
+ <name>daemon(TcpSocket) -> </name>
+ <name>daemon(TcpSocket, Options) -> {ok, ssh_daemon_ref()} | {error, atom()}</name>
<fsummary>Starts a server listening for SSH connections
on the given port.</fsummary>
<type>
@@ -356,10 +362,13 @@
<v>Options = [{Option, Value}]</v>
<v>Option = atom()</v>
<v>Value = term()</v>
+ <v>TcpSocket = port()</v>
+ <d>The socket is supposed to be from <seealso marker="kernel:gen_tcp#connect-3">gen_tcp:connect</seealso> or <seealso marker="kernel:gen_tcp#accept-1">gen_tcp:accept</seealso> with option <c>{active,false}</c></d>
</type>
<desc>
<p>Starts a server listening for SSH connections on the given
- port.</p>
+ port. If the <c>Port</c> is 0, a random free port is selected. See
+ <seealso marker="#daemon_info/1">daemon_info/1</seealso> about how to find the selected port number.</p>
<p>Options:</p>
<taglist>
<tag><c><![CDATA[{inet, inet | inet6}]]></c></tag>
@@ -460,6 +469,7 @@
{server2client,['aes128-cbc','3des-cbc']}]},
{mac,['hmac-sha2-256','hmac-sha1']},
{compression,[none,zlib]}
+ ]
}
</code>
<p>The example specifies different algorithms in the two directions (client2server and server2client),
@@ -680,6 +690,18 @@
</func>
<func>
+ <name>daemon_info(Daemon) -> {ok, [{port,Port}]} | {error,Error}</name>
+ <fsummary>Get info about a daemon</fsummary>
+ <type>
+ <v>Port = integer()</v>
+ <v>Error = bad_daemon_ref</v>
+ </type>
+ <desc>
+ <p>Returns a key-value list with information about the daemon. For now, only the listening port is returned. This is intended for the case the daemon is started with the port set to 0.</p>
+ </desc>
+ </func>
+
+ <func>
<name>default_algorithms() -> algs_list()</name>
<fsummary>Get a list declaring the supported algorithms</fsummary>
<desc>
@@ -703,12 +725,15 @@
<func>
<name>shell(Host) -> </name>
<name>shell(Host, Option) -> </name>
- <name>shell(Host, Port, Option) -> _</name>
+ <name>shell(Host, Port, Option) -> </name>
+ <name>shell(TcpSocket) -> _</name>
<fsummary>Starts an interactive shell over an SSH server.</fsummary>
<type>
<v>Host = string()</v>
<v>Port = integer()</v>
<v>Options - see ssh:connect/3</v>
+ <v>TcpSocket = port()</v>
+ <d>The socket is supposed to be from <seealso marker="kernel:gen_tcp#connect-3">gen_tcp:connect</seealso> or <seealso marker="kernel:gen_tcp#accept-1">gen_tcp:accept</seealso> with option <c>{active,false}</c></d>
</type>
<desc>
<p>Starts an interactive shell over an SSH server on the
diff --git a/lib/ssh/doc/src/ssh_channel.xml b/lib/ssh/doc/src/ssh_channel.xml
index abfe590647..907b0b3bec 100644
--- a/lib/ssh/doc/src/ssh_channel.xml
+++ b/lib/ssh/doc/src/ssh_channel.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/doc/src/ssh_client_key_api.xml b/lib/ssh/doc/src/ssh_client_key_api.xml
index 6b8932e5a7..a1cd9d4b02 100644
--- a/lib/ssh/doc/src/ssh_client_key_api.xml
+++ b/lib/ssh/doc/src/ssh_client_key_api.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2012</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/doc/src/ssh_sftp.xml b/lib/ssh/doc/src/ssh_sftp.xml
index f4b41b74f3..eb6f43d417 100644
--- a/lib/ssh/doc/src/ssh_sftp.xml
+++ b/lib/ssh/doc/src/ssh_sftp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2005</year><year>2015</year>
+ <year>2005</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -44,24 +44,41 @@
</p>
<taglist>
+ <tag><c>reason()</c></tag>
+ <item>
+ <p>= <c>atom()</c> A description of the reason why an operation failed.</p>
+ <p>
+ The value is formed from the sftp error codes in the protocol-level responses as defined in
+ <url href="https://tools.ietf.org/id/draft-ietf-secsh-filexfer-13.txt">draft-ietf-secsh-filexfer-13.txt</url>
+ section 9.1.
+ </p>
+ <p>
+ The codes are named as <c>SSH_FX_*</c> which are transformed into lowercase of the star-part.
+ E.g. the error code <c>SSH_FX_NO_SUCH_FILE</c>
+ will cause the <c>reason()</c> to be <c>no_such_file</c>.
+ </p>
+ </item>
+
<tag><c>ssh_connection_ref() =</c></tag>
- <item><p>opaque() - as returned by <c>ssh:connect/3</c></p></item>
+ <item><p><c>opaque()</c> - as returned by
+ <seealso marker="ssh#connect-3"><c>ssh:connect/3</c></seealso></p></item>
+
<tag><c>timeout()</c></tag>
- <item><p>= <c>infinity | integer() in milliseconds. Default infinity.</c></p></item>
+ <item><p>= <c>infinity | integer()</c> in milliseconds. Default infinity.</p></item>
</taglist>
</section>
<section>
<title>Time-outs</title>
<p>If the request functions for the SFTP channel return <c>{error, timeout}</c>,
- it does not guarantee that the request never reached the server and was
- not performed. It only means that no answer was received from the
- server within the expected time.</p>
+ no answer was received from the server within the expected time.</p>
+ <p>The request may have reached the server and may have been performed.
+ However, no answer was received from the server within the expected time.</p>
</section>
<funcs>
<func>
- <name>apread(ChannelPid, Handle, Position, Len) -> {async, N} | {error, Reason}</name>
+ <name>apread(ChannelPid, Handle, Position, Len) -> {async, N} | {error, reason()}</name>
<fsummary>Reads asynchronously from an open file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -69,16 +86,15 @@
<v>Position = integer()</v>
<v>Len = integer()</v>
<v>N = term()</v>
- <v>Reason = term()</v>
</type>
-
- <desc><p>The <c><![CDATA[apread]]></c> function reads from a specified position,
- combining the <c><![CDATA[position]]></c> and <c><![CDATA[aread]]></c> functions.</p>
- <p><seealso marker="#apread-4">ssh_sftp:apread/4</seealso></p> </desc>
+ <desc><p>The <c><![CDATA[apread/4]]></c> function reads from a specified position,
+ combining the <seealso marker="#position-3"><c>position/3</c></seealso> and
+ <seealso marker="#aread-3"><c>aread/3</c></seealso> functions.</p>
+ </desc>
</func>
<func>
- <name>apwrite(ChannelPid, Handle, Position, Data) -> ok | {error, Reason}</name>
+ <name>apwrite(ChannelPid, Handle, Position, Data) -> {async, N} | {error, reason()}</name>
<fsummary>Writes asynchronously to an open file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -87,16 +103,16 @@
<v>Len = integer()</v>
<v>Data = binary()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
+ <v>N = term()</v>
</type>
- <desc>
- <p><c><![CDATA[apwrite]]></c> writes on a specified position, combining
- the <c><![CDATA[position]]></c> and <c><![CDATA[awrite]]></c> operations.</p>
- <p><seealso marker="#awrite-3">ssh_sftp:awrite/3</seealso> </p></desc>
+ <desc><p>The <c><![CDATA[apwrite/4]]></c> function writes to a specified position,
+ combining the <seealso marker="#position-3"><c>position/3</c></seealso> and
+ <seealso marker="#awrite-3"><c>awrite/3</c></seealso> functions.</p>
+ </desc>
</func>
<func>
- <name>aread(ChannelPid, Handle, Len) -> {async, N} | {error, Error}</name>
+ <name>aread(ChannelPid, Handle, Len) -> {async, N} | {error, reason()}</name>
<fsummary>Reads asynchronously from an open file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -104,7 +120,6 @@
<v>Position = integer()</v>
<v>Len = integer()</v>
<v>N = term()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Reads from an open file, without waiting for the result. If the
@@ -113,14 +128,12 @@
The actual data is sent as a message to the calling process. This
message has the form <c><![CDATA[{async_reply, N, Result}]]></c>, where
<c><![CDATA[Result]]></c> is the result from the read, either <c><![CDATA[{ok, Data}]]></c>,
- <c><![CDATA[eof]]></c>, or <c><![CDATA[{error, Error}]]></c>.</p>
+ <c><![CDATA[eof]]></c>, or <c><![CDATA[{error, reason()}]]></c>.</p>
</desc>
</func>
-
-
<func>
- <name>awrite(ChannelPid, Handle, Data) -> ok | {error, Reason}</name>
+ <name>awrite(ChannelPid, Handle, Data) -> {async, N} | {error, reason()}</name>
<fsummary>Writes asynchronously to an open file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -129,7 +142,6 @@
<v>Len = integer()</v>
<v>Data = binary()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Writes to an open file, without waiting for the result. If the
@@ -138,19 +150,18 @@
<c><![CDATA[awrite]]></c>. The result of the <c><![CDATA[write]]></c> operation is sent
as a message to the calling process. This message has the form
<c><![CDATA[{async_reply, N, Result}]]></c>, where <c><![CDATA[Result]]></c> is the result
- from the write, either <c><![CDATA[ok]]></c>, or <c><![CDATA[{error, Error}]]></c>.</p>
+ from the write, either <c><![CDATA[ok]]></c>, or <c><![CDATA[{error, reason()}]]></c>.</p>
</desc>
</func>
<func>
<name>close(ChannelPid, Handle) -></name>
- <name>close(ChannelPid, Handle, Timeout) -> ok | {error, Reason}</name>
+ <name>close(ChannelPid, Handle, Timeout) -> ok | {error, reason()}</name>
<fsummary>Closes an open handle.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>Handle = term()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Closes a handle to an open file or directory on the server.</p>
@@ -159,29 +170,27 @@
<func>
<name>delete(ChannelPid, Name) -></name>
- <name>delete(ChannelPid, Name, Timeout) -> ok | {error, Reason}</name>
+ <name>delete(ChannelPid, Name, Timeout) -> ok | {error, reason()}</name>
<fsummary>Deletes a file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>Name = string()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
- <p>Deletes the file specified by <c><![CDATA[Name]]></c>, like
- <seealso marker="kernel:file#delete-1">file:delete/1</seealso></p>
+ <p>Deletes the file specified by <c><![CDATA[Name]]></c>.
+ </p>
</desc>
</func>
<func>
<name>del_dir(ChannelPid, Name) -></name>
- <name>del_dir(ChannelPid, Name, Timeout) -> ok | {error, Reason}</name>
+ <name>del_dir(ChannelPid, Name, Timeout) -> ok | {error, reason()}</name>
<fsummary>Deletes an empty directory.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>Name = string()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Deletes a directory specified by <c><![CDATA[Name]]></c>.
@@ -192,7 +201,7 @@
<func>
<name>list_dir(ChannelPid, Path) -></name>
- <name>list_dir(ChannelPid, Path, Timeout) -> {ok, Filenames} | {error, Reason}</name>
+ <name>list_dir(ChannelPid, Path, Timeout) -> {ok, Filenames} | {error, reason()}</name>
<fsummary>Lists the directory.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -200,7 +209,6 @@
<v>Filenames = [Filename]</v>
<v>Filename = string()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Lists the given directory on the server, returning the
@@ -210,13 +218,12 @@
<func>
<name>make_dir(ChannelPid, Name) -></name>
- <name>make_dir(ChannelPid, Name, Timeout) -> ok | {error, Reason}</name>
+ <name>make_dir(ChannelPid, Name, Timeout) -> ok | {error, reason()}</name>
<fsummary>Creates a directory.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>Name = string()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Creates a directory specified by <c><![CDATA[Name]]></c>. <c><![CDATA[Name]]></c>
@@ -227,24 +234,23 @@
<func>
<name>make_symlink(ChannelPid, Name, Target) -></name>
- <name>make_symlink(ChannelPid, Name, Target, Timeout) -> ok | {error, Reason}</name>
+ <name>make_symlink(ChannelPid, Name, Target, Timeout) -> ok | {error, reason()}</name>
<fsummary>Creates a symbolic link.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>Name = string()</v>
<v>Target = string()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Creates a symbolic link pointing to <c><![CDATA[Target]]></c> with the
- name <c><![CDATA[Name]]></c>, like
- <seealso marker="kernel:file#make_symlink-2">file:make_symlink/2</seealso></p>
+ name <c><![CDATA[Name]]></c>.
+ </p>
</desc>
</func>
<func>
<name>open(ChannelPid, File, Mode) -></name>
- <name>open(ChannelPid, File, Mode, Timeout) -> {ok, Handle} | {error, Reason}</name>
+ <name>open(ChannelPid, File, Mode, Timeout) -> {ok, Handle} | {error, reason()}</name>
<fsummary>Opens a file and returns a handle.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -253,7 +259,6 @@
<v>Modeflag = read | write | creat | trunc | append | binary</v>
<v>Timeout = timeout()</v>
<v>Handle = term()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Opens a file on the server and returns a handle, which
@@ -262,13 +267,12 @@
</func>
<func>
<name>opendir(ChannelPid, Path) -></name>
- <name>opendir(ChannelPid, Path, Timeout) -> {ok, Handle} | {error, Reason}</name>
+ <name>opendir(ChannelPid, Path, Timeout) -> {ok, Handle} | {error, reason()}</name>
<fsummary>Opens a directory and returns a handle.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>Path = string()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Opens a handle to a directory on the server. The handle
@@ -278,7 +282,7 @@
<func>
<name>open_tar(ChannelPid, Path, Mode) -></name>
- <name>open_tar(ChannelPid, Path, Mode, Timeout) -> {ok, Handle} | {error, Reason}</name>
+ <name>open_tar(ChannelPid, Path, Mode, Timeout) -> {ok, Handle} | {error, reason()}</name>
<fsummary>Opens a tar file on the server to which <c>ChannelPid</c>
is connected and returns a handle.</fsummary>
<type>
@@ -298,7 +302,6 @@
<v>DecryptResult = {ok,PlainBin,CryptoState} | {ok,PlainBin,CryptoState,ChunkSize}</v>
<v>CloseFun = (fun(PlainBin,CryptoState) -> {ok,EncryptedBin})</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Opens a handle to a tar file on the server, associated with <c>ChannelPid</c>.
@@ -333,7 +336,7 @@
<func>
<name>position(ChannelPid, Handle, Location) -></name>
- <name>position(ChannelPid, Handle, Location, Timeout) -> {ok, NewPosition} | {error, Reason}</name>
+ <name>position(ChannelPid, Handle, Location, Timeout) -> {ok, NewPosition | {error, reason()}</name>
<fsummary>Sets the file position of a file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -343,12 +346,11 @@
<v>Offset = integer()</v>
<v>Timeout = timeout()</v>
<v>NewPosition = integer()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Sets the file position of the file referenced by <c><![CDATA[Handle]]></c>.
Returns <c><![CDATA[{ok, NewPosition}]]></c> (as an absolute offset) if
- successful, otherwise <c><![CDATA[{error, Reason}]]></c>. <c><![CDATA[Location]]></c> is
+ successful, otherwise <c><![CDATA[{error, reason()}]]></c>. <c><![CDATA[Location]]></c> is
one of the following:</p>
<taglist>
<tag><c><![CDATA[Offset]]></c></tag>
@@ -379,7 +381,7 @@
<func>
<name>pread(ChannelPid, Handle, Position, Len) -></name>
- <name>pread(ChannelPid, Handle, Position, Len, Timeout) -> {ok, Data} | eof | {error, Error}</name>
+ <name>pread(ChannelPid, Handle, Position, Len, Timeout) -> {ok, Data} | eof | {error, reason()}</name>
<fsummary>Reads from an open file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -388,18 +390,16 @@
<v>Len = integer()</v>
<v>Timeout = timeout()</v>
<v>Data = string() | binary()</v>
- <v>Reason = term()</v>
</type>
- <desc>
- <p>The <c><![CDATA[pread]]></c> function reads from a specified position,
- combining the <c><![CDATA[position]]></c> and <c><![CDATA[read]]></c> functions.</p>
- <p><seealso marker="#read-4">ssh_sftp:read/4</seealso></p>
- </desc>
- </func>
+ <desc><p>The <c><![CDATA[pread/3,4]]></c> function reads from a specified position,
+ combining the <seealso marker="#position-3"><c>position/3</c></seealso> and
+ <seealso marker="#read-3"><c>read/3,4</c></seealso> functions.</p>
+ </desc>
+ </func>
<func>
<name>pwrite(ChannelPid, Handle, Position, Data) -> ok</name>
- <name>pwrite(ChannelPid, Handle, Position, Data, Timeout) -> ok | {error, Reason}</name>
+ <name>pwrite(ChannelPid, Handle, Position, Data, Timeout) -> ok | {error, reason()}</name>
<fsummary>Writes to an open file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -407,19 +407,16 @@
<v>Position = integer()</v>
<v>Data = iolist()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
- <desc>
- <p>The <c><![CDATA[pread]]></c> function writes to a specified position,
- combining the <c><![CDATA[position]]></c> and <c><![CDATA[write]]></c> functions.</p>
- <p><seealso marker="#write-3">ssh_sftp:write/3</seealso></p>
- </desc>
+ <desc><p>The <c><![CDATA[pwrite/3,4]]></c> function writes to a specified position,
+ combining the <seealso marker="#position-3"><c>position/3</c></seealso> and
+ <seealso marker="#write-3"><c>write/3,4</c></seealso> functions.</p>
+ </desc>
</func>
-
- <func>
+ <func>
<name>read(ChannelPid, Handle, Len) -></name>
- <name>read(ChannelPid, Handle, Len, Timeout) -> {ok, Data} | eof | {error, Error}</name>
+ <name>read(ChannelPid, Handle, Len, Timeout) -> {ok, Data} | eof | {error, reason()}</name>
<fsummary>Reads from an open file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -428,12 +425,11 @@
<v>Len = integer()</v>
<v>Timeout = timeout()</v>
<v>Data = string() | binary()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Reads <c><![CDATA[Len]]></c> bytes from the file referenced by
<c><![CDATA[Handle]]></c>. Returns <c><![CDATA[{ok, Data}]]></c>, <c><![CDATA[eof]]></c>, or
- <c><![CDATA[{error, Reason}]]></c>. If the file is opened with <c><![CDATA[binary]]></c>,
+ <c><![CDATA[{error, reason()}]]></c>. If the file is opened with <c><![CDATA[binary]]></c>,
<c><![CDATA[Data]]></c> is a binary, otherwise it is a string.</p>
<p>If the file is read past <c>eof</c>, only the remaining bytes
are read and returned. If no bytes are read, <c><![CDATA[eof]]></c>
@@ -443,25 +439,22 @@
<func>
<name>read_file(ChannelPid, File) -></name>
- <name>read_file(ChannelPid, File, Timeout) -> {ok, Data} | {error, Reason}</name>
+ <name>read_file(ChannelPid, File, Timeout) -> {ok, Data} | {error, reason()}</name>
<fsummary>Reads a file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>File = string()</v>
<v>Data = binary()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
- <p>Reads a file from the server, and returns the data in a binary,
- like
- <seealso marker="kernel:file#read_file-1">file:read_file/1</seealso></p>
+ <p>Reads a file from the server, and returns the data in a binary.</p>
</desc>
</func>
<func>
<name>read_file_info(ChannelPid, Name) -></name>
- <name>read_file_info(ChannelPid, Name, Timeout) -> {ok, FileInfo} | {error, Reason}</name>
+ <name>read_file_info(ChannelPid, Name, Timeout) -> {ok, FileInfo} | {error, reason()}</name>
<fsummary>Gets information about a file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -469,35 +462,34 @@
<v>Handle = term()</v>
<v>Timeout = timeout()</v>
<v>FileInfo = record()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Returns a <c><![CDATA[file_info]]></c> record from the file specified by
- <c><![CDATA[Name]]></c> or <c><![CDATA[Handle]]></c>,
- like <seealso marker="kernel:file#read_file_info-2">file:read_file_info/2</seealso></p>
+ <c><![CDATA[Name]]></c> or <c><![CDATA[Handle]]></c>. See
+ <seealso marker="kernel:file#read_file_info-2">file:read_file_info/2</seealso>
+ for information about the record.
+ </p>
</desc>
</func>
<func>
<name>read_link(ChannelPid, Name) -></name>
- <name>read_link(ChannelPid, Name, Timeout) -> {ok, Target} | {error, Reason}</name>
+ <name>read_link(ChannelPid, Name, Timeout) -> {ok, Target} | {error, reason()}</name>
<fsummary>Reads symbolic link.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>Name = string()</v>
<v>Target = string()</v>
- <v>Reason = term()</v>
</type>
<desc>
- <p>Reads the link target from the symbolic link specified
- by <c><![CDATA[name]]></c>, like
- <seealso marker="kernel:file#read_link-1">file:read_link/1</seealso></p>
+ <p>Reads the link target from the symbolic link specified by <c><![CDATA[name]]></c>.
+ </p>
</desc>
</func>
<func>
- <name>read_link_info(ChannelPid, Name) -> {ok, FileInfo} | {error, Reason}</name>
- <name>read_link_info(ChannelPid, Name, Timeout) -> {ok, FileInfo} | {error, Reason}</name>
+ <name>read_link_info(ChannelPid, Name) -> {ok, FileInfo} | {error, reason()}</name>
+ <name>read_link_info(ChannelPid, Name, Timeout) -> {ok, FileInfo} | {error, reason()}</name>
<fsummary>Gets information about a symbolic link.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -505,46 +497,55 @@
<v>Handle = term()</v>
<v>Timeout = timeout()</v>
<v>FileInfo = record()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Returns a <c><![CDATA[file_info]]></c> record from the symbolic
- link specified by <c><![CDATA[Name]]></c> or <c><![CDATA[Handle]]></c>, like
- <seealso marker="kernel:file#read_link_info-2">file:read_link_info/2</seealso></p>
+ link specified by <c><![CDATA[Name]]></c> or <c><![CDATA[Handle]]></c>.
+ See
+ <seealso marker="kernel:file#read_link_info-2">file:read_link_info/2</seealso>
+ for information about the record.
+ </p>
</desc>
</func>
<func>
<name>rename(ChannelPid, OldName, NewName) -> </name>
- <name>rename(ChannelPid, OldName, NewName, Timeout) -> ok | {error, Reason}</name>
+ <name>rename(ChannelPid, OldName, NewName, Timeout) -> ok | {error, reason()}</name>
<fsummary>Renames a file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>OldName = string()</v>
<v>NewName = string()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Renames a file named <c><![CDATA[OldName]]></c> and gives it the name
- <c><![CDATA[NewName]]></c>, like
- <seealso marker="kernel:file#rename-2">file:rename/2</seealso></p>
+ <c><![CDATA[NewName]]></c>.
+ </p>
</desc>
</func>
<func>
<name>start_channel(ConnectionRef) -></name>
- <name>start_channel(ConnectionRef, Options) -></name>
+ <name>start_channel(ConnectionRef, Options) ->
+ {ok, Pid} | {error, reason()|term()}</name>
+
<name>start_channel(Host, Options) -></name>
- <name>start_channel(Host, Port, Options) -> {ok, Pid} | {ok, Pid, ConnectionRef} |
- {error, Reason}</name>
+ <name>start_channel(Host, Port, Options) ->
+ {ok, Pid, ConnectionRef} | {error, reason()|term()}</name>
+
+ <name>start_channel(TcpSocket) -></name>
+ <name>start_channel(TcpSocket, Options) ->
+ {ok, Pid, ConnectionRef} | {error, reason()|term()}</name>
+
<fsummary>Starts an SFTP client.</fsummary>
<type>
<v>Host = string()</v>
<v>ConnectionRef = ssh_connection_ref()</v>
<v>Port = integer()</v>
+ <v>TcpSocket = port()</v>
+ <d>The socket is supposed to be from <seealso marker="kernel:gen_tcp#connect-3">gen_tcp:connect</seealso> or <seealso marker="kernel:gen_tcp#accept-1">gen_tcp:accept</seealso> with option <c>{active,false}</c></d>
<v>Options = [{Option, Value}]</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>If no connection reference is provided, a connection is set
@@ -592,7 +593,7 @@
<func>
<name>write(ChannelPid, Handle, Data) -></name>
- <name>write(ChannelPid, Handle, Data, Timeout) -> ok | {error, Reason}</name>
+ <name>write(ChannelPid, Handle, Data, Timeout) -> ok | {error, reason()}</name>
<fsummary>Writes to an open file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
@@ -600,61 +601,47 @@
<v>Position = integer()</v>
<v>Data = iolist()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Writes <c><![CDATA[data]]></c> to the file referenced by <c><![CDATA[Handle]]></c>.
The file is to be opened with <c><![CDATA[write]]></c> or <c><![CDATA[append]]></c>
- flag. Returns <c><![CDATA[ok]]></c> if successful or <c><![CDATA[{error, Reason}]]></c>
+ flag. Returns <c><![CDATA[ok]]></c> if successful or <c><![CDATA[{error, reason()}]]></c>
otherwise.</p>
- <p>Typical error reasons:</p>
- <taglist>
- <tag><c><![CDATA[ebadf]]></c></tag>
- <item>
- <p>File is not opened for writing.</p>
- </item>
- <tag><c><![CDATA[enospc]]></c></tag>
- <item>
- <p>No space is left on the device.</p>
- </item>
- </taglist>
</desc>
</func>
<func>
<name>write_file(ChannelPid, File, Iolist) -></name>
- <name>write_file(ChannelPid, File, Iolist, Timeout) -> ok | {error, Reason}</name>
+ <name>write_file(ChannelPid, File, Iolist, Timeout) -> ok | {error, reason()}</name>
<fsummary>Writes a file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>File = string()</v>
<v>Iolist = iolist()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
- <p>Writes a file to the server, like <seealso
- marker="kernel:file#write_file-2">file:write_file/2</seealso> The
- file is created if it does not exist. The file is overwritten
- if it exists.</p>
+ <p>Writes a file to the server. The file is created if it does not exist
+ but overwritten if it exists.</p>
</desc>
</func>
<func>
<name>write_file_info(ChannelPid, Name, Info) -></name>
- <name>write_file_info(ChannelPid, Name, Info, Timeout) -> ok | {error, Reason}</name>
+ <name>write_file_info(ChannelPid, Name, Info, Timeout) -> ok | {error, reason()}</name>
<fsummary>Writes information for a file.</fsummary>
<type>
<v>ChannelPid = pid()</v>
<v>Name = string()</v>
<v>Info = record()</v>
<v>Timeout = timeout()</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>Writes file information from a <c><![CDATA[file_info]]></c> record to the
- file specified by <c><![CDATA[Name]]></c>, like
- <seealso marker="kernel:file#write_file_info-2">file:write_file_info/[2,3]</seealso></p>
+ file specified by <c><![CDATA[Name]]></c>. See
+ <seealso marker="kernel:file#write_file_info-2">file:write_file_info/[2,3]</seealso>
+ for information about the record.
+ </p>
</desc>
</func>
</funcs>
diff --git a/lib/ssh/doc/src/ssh_sftpd.xml b/lib/ssh/doc/src/ssh_sftpd.xml
index cf50fb1b23..1be29b3b29 100644
--- a/lib/ssh/doc/src/ssh_sftpd.xml
+++ b/lib/ssh/doc/src/ssh_sftpd.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2005</year><year>2013</year>
+ <year>2005</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/doc/src/usersguide.xml b/lib/ssh/doc/src/usersguide.xml
index 7c925a3762..70051ba771 100644
--- a/lib/ssh/doc/src/usersguide.xml
+++ b/lib/ssh/doc/src/usersguide.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2012</year><year>2013</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/doc/src/using_ssh.xml b/lib/ssh/doc/src/using_ssh.xml
index 6826f20fb3..0861c641c7 100644
--- a/lib/ssh/doc/src/using_ssh.xml
+++ b/lib/ssh/doc/src/using_ssh.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2012</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssh/examples/ssh_sample_cli.erl b/lib/ssh/examples/ssh_sample_cli.erl
index 2d8aa428ec..f88aaf048a 100644
--- a/lib/ssh/examples/ssh_sample_cli.erl
+++ b/lib/ssh/examples/ssh_sample_cli.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/Makefile b/lib/ssh/src/Makefile
index b44c8eef35..69d5a47f83 100644
--- a/lib/ssh/src/Makefile
+++ b/lib/ssh/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2013. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -54,6 +54,7 @@ MODULES= \
ssh_connection_sup \
ssh_connection \
ssh_connection_handler \
+ ssh_dbg \
ssh_shell \
ssh_system_sup \
ssh_subsystem_sup \
diff --git a/lib/ssh/src/ssh.app.src b/lib/ssh/src/ssh.app.src
index 4a76fd9cd3..3245ba5197 100644
--- a/lib/ssh/src/ssh.app.src
+++ b/lib/ssh/src/ssh.app.src
@@ -18,6 +18,7 @@
ssh_connection_handler,
ssh_connection_sup,
ssh_daemon_channel,
+ ssh_dbg,
ssh_shell,
sshc_sup,
sshd_sup,
@@ -39,7 +40,12 @@
{applications, [kernel, stdlib, crypto, public_key]},
{env, []},
{mod, {ssh_app, []}},
- {runtime_dependencies, ["stdlib-2.3","public_key-0.22","kernel-3.0",
- "erts-6.0","crypto-3.3"]}]}.
+ {runtime_dependencies, [
+ "crypto-3.3",
+ "erts-6.0",
+ "kernel-3.0",
+ "public_key-1.1",
+ "stdlib-3.0"
+ ]}]}.
diff --git a/lib/ssh/src/ssh.erl b/lib/ssh/src/ssh.erl
index 54f94acbdc..0570853a9b 100644
--- a/lib/ssh/src/ssh.erl
+++ b/lib/ssh/src/ssh.erl
@@ -1,7 +1,7 @@
%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,15 +27,23 @@
-include_lib("public_key/include/public_key.hrl").
-include_lib("kernel/include/file.hrl").
--export([start/0, start/1, stop/0, connect/3, connect/4, close/1, connection_info/2,
+-export([start/0, start/1, stop/0,
+ connect/2, connect/3, connect/4,
+ close/1, connection_info/2,
channel_info/3,
daemon/1, daemon/2, daemon/3,
+ daemon_info/1,
default_algorithms/0,
stop_listener/1, stop_listener/2, stop_listener/3,
stop_daemon/1, stop_daemon/2, stop_daemon/3,
shell/1, shell/2, shell/3
]).
+%%% Type exports
+-export_type([connection_ref/0,
+ channel_id/0
+ ]).
+
%%--------------------------------------------------------------------
-spec start() -> ok | {error, term()}.
-spec start(permanent | transient | temporary) -> ok | {error, term()}.
@@ -64,13 +72,36 @@ stop() ->
application:stop(ssh).
%%--------------------------------------------------------------------
--spec connect(string(), integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+-spec connect(port(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+
+-spec connect(port(), proplists:proplist(), timeout()) -> {ok, pid()} | {error, term()}
+ ; (string(), integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+
-spec connect(string(), integer(), proplists:proplist(), timeout()) -> {ok, pid()} | {error, term()}.
%%
%% Description: Starts an ssh connection.
%%--------------------------------------------------------------------
-connect(Host, Port, Options) ->
+connect(Socket, Options) ->
+ connect(Socket, Options, infinity).
+
+connect(Socket, Options, Timeout) when is_port(Socket) ->
+ case handle_options(Options) of
+ {error, Error} ->
+ {error, Error};
+ {_SocketOptions, SshOptions} ->
+ case valid_socket_to_use(Socket, Options) of
+ ok ->
+ {ok, {Host,_Port}} = inet:sockname(Socket),
+ Opts = [{user_pid,self()}, {host,fmt_host(Host)} | SshOptions],
+ ssh_connection_handler:start_connection(client, Socket, Opts, Timeout);
+ {error,SockError} ->
+ {error,SockError}
+ end
+ end;
+
+connect(Host, Port, Options) when is_integer(Port), Port>0 ->
connect(Host, Port, Options, infinity).
+
connect(Host, Port, Options, Timeout) ->
case handle_options(Options) of
{error, _Reason} = Error ->
@@ -81,7 +112,7 @@ connect(Host, Port, Options, Timeout) ->
ConnectionTimeout = proplists:get_value(connect_timeout, Options, infinity),
try Transport:connect(Host, Port, [ {active, false} | SocketOptions], ConnectionTimeout) of
{ok, Socket} ->
- Opts = [{user_pid, self()}, {host, Host} | fix_idle_time(SshOptions)],
+ Opts = [{user_pid,self()}, {host,Host} | SshOptions],
ssh_connection_handler:start_connection(client, Socket, Opts, Timeout);
{error, Reason} ->
{error, Reason}
@@ -119,7 +150,7 @@ channel_info(ConnectionRef, ChannelId, Options) ->
%%--------------------------------------------------------------------
-spec daemon(integer()) -> {ok, pid()} | {error, term()}.
--spec daemon(integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+-spec daemon(integer()|port(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
-spec daemon(any | inet:ip_address(), integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
%% Description: Starts a server listening for SSH connections
@@ -128,31 +159,32 @@ channel_info(ConnectionRef, ChannelId, Options) ->
daemon(Port) ->
daemon(Port, []).
-daemon(Port, Options) ->
- daemon(any, Port, Options).
+daemon(Port, Options) when is_integer(Port) ->
+ daemon(any, Port, Options);
+
+daemon(Socket, Options0) when is_port(Socket) ->
+ Options = daemon_shell_opt(Options0),
+ start_daemon(Socket, Options).
daemon(HostAddr, Port, Options0) ->
- Options1 = case proplists:get_value(shell, Options0) of
- undefined ->
- [{shell, {shell, start, []}} | Options0];
- _ ->
- Options0
- end,
-
- {Host, Inet, Options} = case HostAddr of
- any ->
- {ok, Host0} = inet:gethostname(),
- {Host0, proplists:get_value(inet, Options1, inet), Options1};
- {_,_,_,_} ->
- {HostAddr, inet,
- [{ip, HostAddr} | Options1]};
- {_,_,_,_,_,_,_,_} ->
- {HostAddr, inet6,
- [{ip, HostAddr} | Options1]}
- end,
+ Options1 = daemon_shell_opt(Options0),
+ {Host, Inet, Options} = daemon_host_inet_opt(HostAddr, Options1),
start_daemon(Host, Port, Options, Inet).
%%--------------------------------------------------------------------
+daemon_info(Pid) ->
+ case catch ssh_system_sup:acceptor_supervisor(Pid) of
+ AsupPid when is_pid(AsupPid) ->
+ [Port] =
+ [Prt || {{ssh_acceptor_sup,any,Prt,default},
+ _WorkerPid,worker,[ssh_acceptor]} <- supervisor:which_children(AsupPid)],
+ {ok, [{port,Port}]};
+
+ _ ->
+ {error,bad_daemon_ref}
+ end.
+
+%%--------------------------------------------------------------------
-spec stop_listener(pid()) -> ok.
-spec stop_listener(inet:ip_address(), integer()) -> ok.
%%
@@ -180,8 +212,8 @@ stop_daemon(Address, Port) ->
stop_daemon(Address, Port, Profile) ->
ssh_system_sup:stop_system(Address, Port, Profile).
%%--------------------------------------------------------------------
--spec shell(string()) -> _.
--spec shell(string(), proplists:proplist()) -> _.
+-spec shell(port() | string()) -> _.
+-spec shell(port() | string(), proplists:proplist()) -> _.
-spec shell(string(), integer(), proplists:proplist()) -> _.
%% Host = string()
@@ -193,27 +225,34 @@ stop_daemon(Address, Port, Profile) ->
%% and will not return until the remote shell is ended.(e.g. on
%% exit from the shell)
%%--------------------------------------------------------------------
+shell(Socket) when is_port(Socket) ->
+ shell(Socket, []);
shell(Host) ->
shell(Host, ?SSH_DEFAULT_PORT, []).
+
+shell(Socket, Options) when is_port(Socket) ->
+ start_shell( connect(Socket, Options) );
shell(Host, Options) ->
shell(Host, ?SSH_DEFAULT_PORT, Options).
+
shell(Host, Port, Options) ->
- case connect(Host, Port, Options) of
- {ok, ConnectionRef} ->
- case ssh_connection:session_channel(ConnectionRef, infinity) of
- {ok,ChannelId} ->
- success = ssh_connection:ptty_alloc(ConnectionRef, ChannelId, []),
- Args = [{channel_cb, ssh_shell},
- {init_args,[ConnectionRef, ChannelId]},
- {cm, ConnectionRef}, {channel_id, ChannelId}],
- {ok, State} = ssh_channel:init([Args]),
- ssh_channel:enter_loop(State);
- Error ->
- Error
- end;
+ start_shell( connect(Host, Port, Options) ).
+
+
+start_shell({ok, ConnectionRef}) ->
+ case ssh_connection:session_channel(ConnectionRef, infinity) of
+ {ok,ChannelId} ->
+ success = ssh_connection:ptty_alloc(ConnectionRef, ChannelId, []),
+ Args = [{channel_cb, ssh_shell},
+ {init_args,[ConnectionRef, ChannelId]},
+ {cm, ConnectionRef}, {channel_id, ChannelId}],
+ {ok, State} = ssh_channel:init([Args]),
+ ssh_channel:enter_loop(State);
Error ->
Error
- end.
+ end;
+start_shell(Error) ->
+ Error.
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
@@ -223,52 +262,110 @@ default_algorithms() ->
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-fix_idle_time(SshOptions) ->
- case proplists:get_value(idle_time, SshOptions) of
- undefined ->
- [{idle_time, infinity}|SshOptions];
- _ ->
- SshOptions
+valid_socket_to_use(Socket, Options) ->
+ case proplists:get_value(transport, Options, {tcp, gen_tcp, tcp_closed}) of
+ {tcp,_,_} ->
+ %% Is this tcp-socket a valid socket?
+ case {is_tcp_socket(Socket),
+ {ok,[{active,false}]} == inet:getopts(Socket, [active])
+ }
+ of
+ {true, true} ->
+ ok;
+ {true, false} ->
+ {error, not_passive_mode};
+ _ ->
+ {error, not_tcp_socket}
+ end;
+ {L4,_,_} ->
+ {error, {unsupported,L4}}
+ end.
+
+is_tcp_socket(Socket) -> {ok,[]} =/= inet:getopts(Socket, [delay_send]).
+
+
+
+daemon_shell_opt(Options) ->
+ case proplists:get_value(shell, Options) of
+ undefined ->
+ [{shell, {shell, start, []}} | Options];
+ _ ->
+ Options
+ end.
+
+daemon_host_inet_opt(HostAddr, Options1) ->
+ case HostAddr of
+ any ->
+ {ok, Host0} = inet:gethostname(),
+ {Host0, proplists:get_value(inet, Options1, inet), Options1};
+ {_,_,_,_} ->
+ {HostAddr, inet,
+ [{ip, HostAddr} | Options1]};
+ {_,_,_,_,_,_,_,_} ->
+ {HostAddr, inet6,
+ [{ip, HostAddr} | Options1]}
+ end.
+
+
+start_daemon(Socket, Options) ->
+ case handle_options(Options) of
+ {error, Error} ->
+ {error, Error};
+ {SocketOptions, SshOptions} ->
+ case valid_socket_to_use(Socket, Options) of
+ ok ->
+ try
+ do_start_daemon(Socket, [{role,server}|SshOptions], SocketOptions)
+ catch
+ throw:bad_fd -> {error,bad_fd};
+ _C:_E -> {error,{cannot_start_daemon,_C,_E}}
+ end;
+ {error,SockError} ->
+ {error,SockError}
+ end
end.
+
start_daemon(Host, Port, Options, Inet) ->
case handle_options(Options) of
{error, _Reason} = Error ->
Error;
{SocketOptions, SshOptions}->
try
- do_start_daemon(Host, Port,[{role, server} |SshOptions] , [Inet | SocketOptions])
+ do_start_daemon(Host, Port, [{role,server}|SshOptions] , [Inet|SocketOptions])
catch
throw:bad_fd -> {error,bad_fd};
_C:_E -> {error,{cannot_start_daemon,_C,_E}}
end
end.
-do_start_daemon(Host0, Port0, Options, SocketOptions) ->
- {Host,Port} = try
- case proplists:get_value(fd, SocketOptions) of
- undefined ->
- {Host0,Port0};
- Fd when Port0==0 ->
- find_hostport(Fd);
- _ ->
- {Host0,Port0}
- end
- catch
- _:_ -> throw(bad_fd)
- end,
- Profile = proplists:get_value(profile, Options, ?DEFAULT_PROFILE),
+do_start_daemon(Socket, SshOptions, SocketOptions) ->
+ {ok, {IP,Port}} =
+ try {ok,_} = inet:sockname(Socket)
+ catch
+ _:_ -> throw(bad_socket)
+ end,
+ Host = fmt_host(IP),
+ Profile = proplists:get_value(profile, SshOptions, ?DEFAULT_PROFILE),
+ Opts = [{asocket, Socket},
+ {asock_owner,self()},
+ {address, Host},
+ {port, Port},
+ {role, server},
+ {socket_opts, SocketOptions},
+ {ssh_opts, SshOptions}],
+ {_, Callback, _} = proplists:get_value(transport, SshOptions, {tcp, gen_tcp, tcp_closed}),
case ssh_system_sup:system_supervisor(Host, Port, Profile) of
undefined ->
%% It would proably make more sense to call the
%% address option host but that is a too big change at the
%% monent. The name is a legacy name!
- try sshd_sup:start_child([{address, Host},
- {port, Port}, {role, server},
- {socket_opts, SocketOptions},
- {ssh_opts, Options}]) of
+ try sshd_sup:start_child(Opts) of
{error, {already_started, _}} ->
{error, eaddrinuse};
- Result = {Code, _} when (Code == ok) or (Code == error) ->
+ Result = {ok,_} ->
+ ssh_acceptor:handle_connection(Callback, Host, Port, Opts, Socket),
+ Result;
+ Result = {error, _} ->
Result
catch
exit:{noproc, _} ->
@@ -276,19 +373,91 @@ do_start_daemon(Host0, Port0, Options, SocketOptions) ->
end;
Sup ->
AccPid = ssh_system_sup:acceptor_supervisor(Sup),
- case ssh_acceptor_sup:start_child(AccPid, [{address, Host},
- {port, Port}, {role, server},
- {socket_opts, SocketOptions},
- {ssh_opts, Options}]) of
+ case ssh_acceptor_sup:start_child(AccPid, Opts) of
{error, {already_started, _}} ->
{error, eaddrinuse};
{ok, _} ->
+ ssh_acceptor:handle_connection(Callback, Host, Port, Opts, Socket),
{ok, Sup};
Other ->
Other
end
end.
+do_start_daemon(Host0, Port0, SshOptions, SocketOptions) ->
+ {Host,Port1} =
+ try
+ case proplists:get_value(fd, SocketOptions) of
+ undefined ->
+ {Host0,Port0};
+ Fd when Port0==0 ->
+ find_hostport(Fd);
+ _ ->
+ {Host0,Port0}
+ end
+ catch
+ _:_ -> throw(bad_fd)
+ end,
+ Profile = proplists:get_value(profile, SshOptions, ?DEFAULT_PROFILE),
+ {Port, WaitRequestControl, Opts0} =
+ case Port1 of
+ 0 -> %% Allocate the socket here to get the port number...
+ {_, Callback, _} =
+ proplists:get_value(transport, SshOptions, {tcp, gen_tcp, tcp_closed}),
+ {ok,LSock} = ssh_acceptor:callback_listen(Callback, 0, SocketOptions),
+ {ok,{_,LPort}} = inet:sockname(LSock),
+ {LPort,
+ {LSock,Callback},
+ [{lsocket,LSock},{lsock_owner,self()}]
+ };
+ _ ->
+ {Port1, false, []}
+ end,
+ Opts = [{address, Host},
+ {port, Port},
+ {role, server},
+ {socket_opts, SocketOptions},
+ {ssh_opts, SshOptions} | Opts0],
+ case ssh_system_sup:system_supervisor(Host, Port, Profile) of
+ undefined ->
+ %% It would proably make more sense to call the
+ %% address option host but that is a too big change at the
+ %% monent. The name is a legacy name!
+ try sshd_sup:start_child(Opts) of
+ {error, {already_started, _}} ->
+ {error, eaddrinuse};
+ Result = {ok,_} ->
+ sync_request_control(WaitRequestControl),
+ Result;
+ Result = {error, _} ->
+ Result
+ catch
+ exit:{noproc, _} ->
+ {error, ssh_not_started}
+ end;
+ Sup ->
+ AccPid = ssh_system_sup:acceptor_supervisor(Sup),
+ case ssh_acceptor_sup:start_child(AccPid, Opts) of
+ {error, {already_started, _}} ->
+ {error, eaddrinuse};
+ {ok, _} ->
+ sync_request_control(WaitRequestControl),
+ {ok, Sup};
+ Other ->
+ Other
+ end
+ end.
+
+sync_request_control(false) ->
+ ok;
+sync_request_control({LSock,Callback}) ->
+ receive
+ {request_control,LSock,ReqPid} ->
+ ok = Callback:controlling_process(LSock, ReqPid),
+ ReqPid ! {its_yours,LSock},
+ ok
+ end.
+
find_hostport(Fd) ->
%% Using internal functions inet:open/8 and inet:close/0.
%% Don't try this at home unless you know what you are doing!
@@ -432,10 +601,13 @@ handle_option([{profile, _ID} = Opt|Rest], SocketOptions, SshOptions) ->
handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);
handle_option([{max_random_length_padding, _Bool} = Opt|Rest], SocketOptions, SshOptions) ->
handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);
+handle_option([{tstflg, _} = Opt|Rest], SocketOptions, SshOptions) ->
+ handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);
handle_option([Opt | Rest], SocketOptions, SshOptions) ->
handle_option(Rest, [handle_inet_option(Opt) | SocketOptions], SshOptions).
+handle_ssh_option({tstflg,_F} = Opt) -> Opt;
handle_ssh_option({minimal_remote_max_packet_size, Value} = Opt) when is_integer(Value), Value >=0 ->
Opt;
handle_ssh_option({system_dir, Value} = Opt) when is_list(Value) ->
@@ -790,3 +962,8 @@ handle_user_pref_pubkey_algs([H|T], Acc) ->
false ->
false
end.
+
+fmt_host({A,B,C,D}) ->
+ lists:concat([A,".",B,".",C,".",D]);
+fmt_host(T={_,_,_,_,_,_,_,_}) ->
+ lists:flatten(string:join([io_lib:format("~.16B",[A]) || A <- tuple_to_list(T)], ":")).
diff --git a/lib/ssh/src/ssh.hrl b/lib/ssh/src/ssh.hrl
index f88098819d..868f3a9181 100644
--- a/lib/ssh/src/ssh.hrl
+++ b/lib/ssh/src/ssh.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -70,8 +70,6 @@
-record(ssh,
{
- %%state, %% what it's waiting for
-
role, %% client | server
peer, %% string version of peer address
@@ -135,8 +133,8 @@
user,
service,
userauth_quiet_mode, % boolean()
- userauth_supported_methods, % string() eg "keyboard-interactive,password"
userauth_methods, % list( string() ) eg ["keyboard-interactive", "password"]
+ userauth_supported_methods, % string() eg "keyboard-interactive,password"
kb_tries_left = 0, % integer(), num tries left for "keyboard-interactive"
userauth_preference,
available_host_keys,
diff --git a/lib/ssh/src/ssh_acceptor.erl b/lib/ssh/src/ssh_acceptor.erl
index d94dedf1bf..9f3e60bd62 100644
--- a/lib/ssh/src/ssh_acceptor.erl
+++ b/lib/ssh/src/ssh_acceptor.erl
@@ -26,7 +26,9 @@
%% Internal application API
-export([start_link/5,
- number_of_connections/1]).
+ number_of_connections/1,
+ callback_listen/3,
+ handle_connection/5]).
%% spawn export
-export([acceptor_init/6, acceptor_loop/6]).
@@ -46,15 +48,39 @@ start_link(Port, Address, SockOpts, Opts, AcceptTimeout) ->
acceptor_init(Parent, Port, Address, SockOpts, Opts, AcceptTimeout) ->
{_, Callback, _} =
proplists:get_value(transport, Opts, {tcp, gen_tcp, tcp_closed}),
- case (catch do_socket_listen(Callback, Port, [{active, false} | SockOpts])) of
- {ok, ListenSocket} ->
+
+ SockOwner = proplists:get_value(lsock_owner, Opts),
+ LSock = proplists:get_value(lsocket, Opts),
+ UseExistingSocket =
+ case catch inet:sockname(LSock) of
+ {ok,{_,Port}} -> is_pid(SockOwner);
+ _ -> false
+ end,
+
+ case UseExistingSocket of
+ true ->
proc_lib:init_ack(Parent, {ok, self()}),
- acceptor_loop(Callback,
- Port, Address, Opts, ListenSocket, AcceptTimeout);
- Error ->
- proc_lib:init_ack(Parent, Error),
- error
+ request_ownership(LSock, SockOwner),
+ acceptor_loop(Callback, Port, Address, Opts, LSock, AcceptTimeout);
+
+ false ->
+ case (catch do_socket_listen(Callback, Port, SockOpts)) of
+ {ok, ListenSocket} ->
+ proc_lib:init_ack(Parent, {ok, self()}),
+ acceptor_loop(Callback,
+ Port, Address, Opts, ListenSocket, AcceptTimeout);
+ Error ->
+ proc_lib:init_ack(Parent, Error),
+ error
+ end
end.
+
+request_ownership(LSock, SockOwner) ->
+ SockOwner ! {request_control,LSock,self()},
+ receive
+ {its_yours,LSock} -> ok
+ end.
+
do_socket_listen(Callback, Port0, Opts) ->
Port =
@@ -62,6 +88,10 @@ do_socket_listen(Callback, Port0, Opts) ->
undefined -> Port0;
_ -> 0
end,
+ callback_listen(Callback, Port, Opts).
+
+callback_listen(Callback, Port, Opts0) ->
+ Opts = [{active, false}, {reuseaddr,true} | Opts0],
case Callback:listen(Port, Opts) of
{error, nxdomain} ->
Callback:listen(Port, lists:delete(inet6, Opts));
diff --git a/lib/ssh/src/ssh_acceptor_sup.erl b/lib/ssh/src/ssh_acceptor_sup.erl
index a3dc64850f..129f85a3e0 100644
--- a/lib/ssh/src/ssh_acceptor_sup.erl
+++ b/lib/ssh/src/ssh_acceptor_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,6 +36,8 @@
-define(DEFAULT_TIMEOUT, 50000).
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
%%%=========================================================================
%%% API
%%%=========================================================================
@@ -85,10 +87,7 @@ child_spec(ServerOpts) ->
Profile = proplists:get_value(profile, proplists:get_value(ssh_opts, ServerOpts), ?DEFAULT_PROFILE),
Name = id(Address, Port, Profile),
SocketOpts = proplists:get_value(socket_opts, ServerOpts),
- StartFunc = {ssh_acceptor, start_link, [Port, Address,
- [{active, false},
- {reuseaddr, true}] ++ SocketOpts,
- ServerOpts, Timeout]},
+ StartFunc = {ssh_acceptor, start_link, [Port, Address, SocketOpts, ServerOpts, Timeout]},
Restart = transient,
Shutdown = brutal_kill,
Modules = [ssh_acceptor],
diff --git a/lib/ssh/src/ssh_app.erl b/lib/ssh/src/ssh_app.erl
index 1a11938dd9..d3680e20da 100644
--- a/lib/ssh/src/ssh_app.erl
+++ b/lib/ssh/src/ssh_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_auth.erl b/lib/ssh/src/ssh_auth.erl
index 0c378d084b..fb5e086656 100644
--- a/lib/ssh/src/ssh_auth.erl
+++ b/lib/ssh/src/ssh_auth.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -197,9 +197,9 @@ init_userauth_request_msg(#ssh{opts = Opts} = Ssh) ->
service = "ssh-connection"});
{error, no_user} ->
ErrStr = "Could not determine the users name",
- throw(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_ILLEGAL_USER_NAME,
- description = ErrStr,
- language = "en"})
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_ILLEGAL_USER_NAME,
+ description = ErrStr})
end.
%%%----------------------------------------------------------------
@@ -399,10 +399,10 @@ handle_userauth_info_response(#ssh_msg_userauth_info_response{num_responses = 1,
handle_userauth_info_response(#ssh_msg_userauth_info_response{},
_Auth) ->
- throw(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
- description = "Server does not support"
- "keyboard-interactive",
- language = "en"}).
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
+ description = "Server does not support keyboard-interactive"
+ }).
%%--------------------------------------------------------------------
@@ -459,10 +459,10 @@ check_password(User, Password, Opts, Ssh) ->
{false,NewState} ->
{false, Ssh#ssh{pwdfun_user_state=NewState}};
disconnect ->
- throw(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
- description =
- "Unable to connect using the available authentication methods",
- language = ""})
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
+ description = "Unable to connect using the available authentication methods"
+ })
end
end.
diff --git a/lib/ssh/src/ssh_auth.hrl b/lib/ssh/src/ssh_auth.hrl
index 449bc4fa45..56314ca6d9 100644
--- a/lib/ssh/src/ssh_auth.hrl
+++ b/lib/ssh/src/ssh_auth.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_bits.erl b/lib/ssh/src/ssh_bits.erl
index 4da3a6018b..8bedaaf0c5 100644
--- a/lib/ssh/src/ssh_bits.erl
+++ b/lib/ssh/src/ssh_bits.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,52 +26,30 @@
-include("ssh.hrl").
--export([encode/2]).
--export([mpint/1, string/1, name_list/1]).
+-export([mpint/1, name_list/1]).
-export([random/1]).
--define(name_list(X),
- (fun(B) -> ?binary(B) end)(list_to_binary(name_concat(X)))).
-
-
-name_concat([Name]) when is_atom(Name) -> atom_to_list(Name);
-name_concat([Name]) when is_list(Name) -> Name;
-name_concat([Name|Ns]) ->
- if is_atom(Name) ->
- [atom_to_list(Name),"," | name_concat(Ns)];
- is_list(Name) ->
- [Name,"," | name_concat(Ns)]
- end;
-name_concat([]) -> [].
-
-
-name_list(Ns) ->
- ?name_list(Ns).
+%%%----------------------------------------------------------------
+name_list([Name]) -> to_bin(Name);
+name_list([Name|Ns]) -> <<(to_bin(Name))/binary, ",", (name_list(Ns))/binary>>;
+name_list([]) -> <<>>.
+
+to_bin(A) when is_atom(A) -> list_to_binary(atom_to_list(A));
+to_bin(S) when is_list(S) -> list_to_binary(S);
+to_bin(B) when is_binary(B) -> B.
+
+%%%----------------------------------------------------------------
+%%% Multi Precision Integer encoding
+mpint(-1) -> <<0,0,0,1,16#ff>>;
+mpint(0) -> <<0,0,0,0>>;
+mpint(X) when X < 0 -> mpint_neg(X,0,[]);
+mpint(X) -> mpint_pos(X,0,[]).
-
-string(Str) ->
- ?string(Str).
-
-
-%% MP representaion (SSH2)
-mpint(X) when X < 0 ->
- if X == -1 ->
- <<0,0,0,1,16#ff>>;
- true ->
- mpint_neg(X,0,[])
- end;
-mpint(X) ->
- if X == 0 ->
- <<0,0,0,0>>;
- true ->
- mpint_pos(X,0,[])
- end.
-
mpint_neg(-1,I,Ds=[MSB|_]) ->
if MSB band 16#80 =/= 16#80 ->
<<?UINT32((I+1)), (list_to_binary([255|Ds]))/binary>>;
true ->
- (<<?UINT32(I), (list_to_binary(Ds))/binary>>)
+ <<?UINT32(I), (list_to_binary(Ds))/binary>>
end;
mpint_neg(X,I,Ds) ->
mpint_neg(X bsr 8,I+1,[(X band 255)|Ds]).
@@ -80,96 +58,17 @@ mpint_pos(0,I,Ds=[MSB|_]) ->
if MSB band 16#80 == 16#80 ->
<<?UINT32((I+1)), (list_to_binary([0|Ds]))/binary>>;
true ->
- (<<?UINT32(I), (list_to_binary(Ds))/binary>>)
+ <<?UINT32(I), (list_to_binary(Ds))/binary>>
end;
mpint_pos(X,I,Ds) ->
mpint_pos(X bsr 8,I+1,[(X band 255)|Ds]).
-encode(List, Types) ->
- list_to_binary(enc(List, Types)).
-
-%%
-%% Encode record element
-%%
-enc(Xs, Ts) ->
- enc(Xs, Ts, 0).
-
-enc(Xs, [boolean|Ts], Offset) ->
- X = hd(Xs),
- [?boolean(X) | enc(tl(Xs), Ts, Offset+1)];
-enc(Xs, [byte|Ts], Offset) ->
- X = hd(Xs),
- [?byte(X) | enc(tl(Xs), Ts,Offset+1)];
-enc(Xs, [uint16|Ts], Offset) ->
- X = hd(Xs),
- [?uint16(X) | enc(tl(Xs), Ts,Offset+2)];
-enc(Xs, [uint32 |Ts], Offset) ->
- X = hd(Xs),
- [?uint32(X) | enc(tl(Xs), Ts,Offset+4)];
-enc(Xs, [uint64|Ts], Offset) ->
- X = hd(Xs),
- [?uint64(X) | enc(tl(Xs), Ts,Offset+8)];
-enc(Xs, [mpint|Ts], Offset) ->
- Y = mpint(hd(Xs)),
- [Y | enc(tl(Xs), Ts,Offset+size(Y))];
-enc(Xs, [string|Ts], Offset) ->
- X0 = hd(Xs),
- Y = ?string(X0),
- [Y | enc(tl(Xs),Ts,Offset+size(Y))];
-enc(Xs, [string_utf8|Ts], Offset) ->
- X0 = hd(Xs),
- Y = ?string_utf8(X0),
- [Y | enc(tl(Xs),Ts,Offset+size(Y))];
-enc(Xs, [binary|Ts], Offset) ->
- X0 = hd(Xs),
- Y = ?binary(X0),
- [Y | enc(tl(Xs), Ts,Offset+size(Y))];
-enc(Xs, [name_list|Ts], Offset) ->
- X0 = hd(Xs),
- Y = ?name_list(X0),
- [Y | enc(tl(Xs), Ts, Offset+size(Y))];
-enc(Xs, [cookie|Ts], Offset) ->
- [random(16) | enc(tl(Xs), Ts, Offset+16)];
-enc(Xs, [{pad,N}|Ts], Offset) ->
- K = (N - (Offset rem N)) rem N,
- [fill_bits(K,0) | enc(Xs, Ts, Offset+K)];
-enc(Xs, ['...'| []], _Offset) ->
- X = hd(Xs),
- if is_binary(X) ->
- [X];
- is_list(X) ->
- [list_to_binary(X)];
- X==undefined ->
- []
- end;
-enc([], [],_) ->
- [].
-
-
-%%
-%% Create a binary with constant bytes
-%%
-fill_bits(N,C) ->
- list_to_binary(fill(N,C)).
-
-fill(0,_C) -> [];
-fill(1,C) -> [C];
-fill(N,C) ->
- Cs = fill(N div 2, C),
- Cs1 = [Cs,Cs],
- if N band 1 == 0 ->
- Cs1;
- true ->
- [C,Cs,Cs]
- end.
-
-
+%%%----------------------------------------------------------------
%% random/1
%% Generate N random bytes
%%
-random(N) ->
- crypto:strong_rand_bytes(N).
+random(N) -> crypto:strong_rand_bytes(N).
diff --git a/lib/ssh/src/ssh_channel.erl b/lib/ssh/src/ssh_channel.erl
index d15a2c8eba..a8e6ebde16 100644
--- a/lib/ssh/src/ssh_channel.erl
+++ b/lib/ssh/src/ssh_channel.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -68,7 +68,7 @@
%% Internal application API
-export([cache_create/0, cache_lookup/2, cache_update/2,
cache_delete/1, cache_delete/2, cache_foldl/3,
- cache_find/2,
+ cache_info/2, cache_find/2,
get_print_info/1]).
-record(state, {
@@ -335,6 +335,9 @@ cache_delete(Cache) ->
cache_foldl(Fun, Acc, Cache) ->
ets:foldl(Fun, Acc, Cache).
+cache_info(num_entries, Cache) ->
+ proplists:get_value(size, ets:info(Cache)).
+
cache_find(ChannelPid, Cache) ->
case ets:match_object(Cache, #channel{user = ChannelPid}) of
[] ->
diff --git a/lib/ssh/src/ssh_channel_sup.erl b/lib/ssh/src/ssh_channel_sup.erl
index 7c381553b8..6b01dc334d 100644
--- a/lib/ssh/src/ssh_channel_sup.erl
+++ b/lib/ssh/src/ssh_channel_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -43,6 +43,8 @@ start_child(Sup, ChildSpec) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init(_Args) ->
RestartStrategy = one_for_one,
MaxR = 10,
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl
index 71f62a960e..74cd2e081a 100644
--- a/lib/ssh/src/ssh_cli.erl
+++ b/lib/ssh/src/ssh_cli.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,6 +47,21 @@
%%====================================================================
%% ssh_channel callbacks
%%====================================================================
+-spec init(Args :: term()) ->
+ {ok, State :: term()} | {ok, State :: term(), timeout() | hibernate} |
+ {stop, Reason :: term()} | ignore.
+
+-spec terminate(Reason :: (normal | shutdown | {shutdown, term()} |
+ term()),
+ State :: term()) ->
+ term().
+
+-spec handle_msg(Msg ::term(), State :: term()) ->
+ {ok, State::term()} | {stop, ChannelId::integer(), State::term()}.
+-spec handle_ssh_msg({ssh_cm, ConnectionRef::term(), SshMsg::term()},
+ State::term()) -> {ok, State::term()} |
+ {stop, ChannelId::integer(),
+ State::term()}.
%%--------------------------------------------------------------------
%% Function: init(Args) -> {ok, State}
diff --git a/lib/ssh/src/ssh_client_key.erl b/lib/ssh/src/ssh_client_key.erl
index 0758865ad1..5296ac2a02 100644
--- a/lib/ssh/src/ssh_client_key.erl
+++ b/lib/ssh/src/ssh_client_key.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_client_key_api.erl b/lib/ssh/src/ssh_client_key_api.erl
index 7fe97b6c13..6e994ff292 100644
--- a/lib/ssh/src/ssh_client_key_api.erl
+++ b/lib/ssh/src/ssh_client_key_api.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,14 +23,26 @@
-include_lib("public_key/include/public_key.hrl").
-include("ssh.hrl").
--callback is_host_key(PublicKey :: #'RSAPublicKey'{}| {integer(), #'Dss-Parms'{}}| term() , Host :: string(),
- Algorithm :: 'ssh-rsa'| 'ssh-dss'| atom(), ConnectOptions :: proplists:proplist()) ->
+-export_type([algorithm/0]).
+
+-type algorithm() :: 'ssh-rsa'
+ | 'ssh-dss'
+ | 'ecdsa-sha2-nistp256'
+ | 'ecdsa-sha2-nistp384'
+ | 'ecdsa-sha2-nistp521'
+ .
+
+-callback is_host_key(PublicKey :: public_key:public_key(),
+ Host :: string(),
+ Algorithm :: algorithm(),
+ ConnectOptions :: proplists:proplist()) ->
boolean().
--callback user_key(Algorithm :: 'ssh-rsa'| 'ssh-dss'| atom(), ConnectOptions :: proplists:proplist()) ->
- {ok, PrivateKey :: #'RSAPrivateKey'{}| #'DSAPrivateKey'{} | term()} | {error, string()}.
+-callback user_key(Algorithm :: algorithm(),
+ ConnectOptions :: proplists:proplist()) ->
+ {ok, PrivateKey::public_key:private_key()} | {error, term()}.
--callback add_host_key(Host :: string(), PublicKey :: #'RSAPublicKey'{}| {integer(), #'Dss-Parms'{}}| term(),
- Options :: list()) ->
+-callback add_host_key(Host :: string(), PublicKey :: public_key:public_key(),
+ Options :: proplists:proplist()) ->
ok | {error, Error::term()}.
diff --git a/lib/ssh/src/ssh_connect.hrl b/lib/ssh/src/ssh_connect.hrl
index 9f9f3de8fa..4fb6bc39f3 100644
--- a/lib/ssh/src/ssh_connect.hrl
+++ b/lib/ssh/src/ssh_connect.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,12 +22,15 @@
%%% Description : SSH connection protocol
--type channel_id() :: integer().
+-type role() :: client | server .
+-type connection_ref() :: pid().
+-type channel_id() :: pos_integer().
+
+-define(DEFAULT_PACKET_SIZE, 65536).
+-define(DEFAULT_WINDOW_SIZE, 10*?DEFAULT_PACKET_SIZE).
--define(DEFAULT_PACKET_SIZE, 32768).
--define(DEFAULT_WINDOW_SIZE, 2*?DEFAULT_PACKET_SIZE).
-define(DEFAULT_TIMEOUT, 5000).
--define(MAX_PROTO_VERSION, 255).
+-define(MAX_PROTO_VERSION, 255). % Max length of the hello string
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
@@ -240,7 +243,7 @@
-record(channel,
{
- type, %% "session", "x11", "forwarded-tcpip", "direct-tcpip"
+ type, %% "session"
sys, %% "none", "shell", "exec" "subsystem"
user, %% "user" process id (default to cm user)
flow_control,
diff --git a/lib/ssh/src/ssh_connection.erl b/lib/ssh/src/ssh_connection.erl
index a34478732c..d0f2d54c06 100644
--- a/lib/ssh/src/ssh_connection.erl
+++ b/lib/ssh/src/ssh_connection.erl
@@ -38,8 +38,7 @@
%% Potential API currently unsupported and not tested
-export([window_change/4, window_change/6,
- direct_tcpip/6, direct_tcpip/8, tcpip_forward/3,
- cancel_tcpip_forward/3, signal/3, exit_status/3]).
+ signal/3, exit_status/3]).
%% Internal application API
-export([channel_data/5, handle_msg/3, channel_eof_msg/1,
@@ -48,7 +47,7 @@
channel_adjust_window_msg/2, channel_data_msg/3,
channel_open_msg/5, channel_open_confirmation_msg/4,
channel_open_failure_msg/4, channel_request_msg/4,
- global_request_msg/3, request_failure_msg/0,
+ request_failure_msg/0,
request_success_msg/1, bind/4, unbind/3, unbind_channel/2,
bound_channel/3, encode_ip/1]).
@@ -232,52 +231,6 @@ exit_status(ConnectionHandler, Channel, Status) ->
ssh_connection_handler:request(ConnectionHandler, Channel,
"exit-status", false, [?uint32(Status)], 0).
-direct_tcpip(ConnectionHandler, RemoteHost,
- RemotePort, OrigIP, OrigPort, Timeout) ->
- direct_tcpip(ConnectionHandler, RemoteHost, RemotePort, OrigIP, OrigPort,
- ?DEFAULT_WINDOW_SIZE, ?DEFAULT_PACKET_SIZE, Timeout).
-
-direct_tcpip(ConnectionHandler, RemoteIP, RemotePort, OrigIP, OrigPort,
- InitialWindowSize, MaxPacketSize, Timeout) ->
- case {encode_ip(RemoteIP), encode_ip(OrigIP)} of
- {false, _} ->
- {error, einval};
- {_, false} ->
- {error, einval};
- {RIP, OIP} ->
- ssh_connection_handler:open_channel(ConnectionHandler,
- "direct-tcpip",
- [?string(RIP),
- ?uint32(RemotePort),
- ?string(OIP),
- ?uint32(OrigPort)],
- InitialWindowSize,
- MaxPacketSize,
- Timeout)
- end.
-
-tcpip_forward(ConnectionHandler, BindIP, BindPort) ->
- case encode_ip(BindIP) of
- false ->
- {error, einval};
- IPStr ->
- ssh_connection_handler:global_request(ConnectionHandler,
- "tcpip-forward", true,
- [?string(IPStr),
- ?uint32(BindPort)])
- end.
-
-cancel_tcpip_forward(ConnectionHandler, BindIP, Port) ->
- case encode_ip(BindIP) of
- false ->
- {error, einval};
- IPStr ->
- ssh_connection_handler:global_request(ConnectionHandler,
- "cancel-tcpip-forward", true,
- [?string(IPStr),
- ?uint32(Port)])
- end.
-
%%--------------------------------------------------------------------
%%% Internal API
%%--------------------------------------------------------------------
@@ -300,22 +253,11 @@ l2b([]) ->
channel_data(ChannelId, DataType, Data, Connection, From)
when is_list(Data)->
- channel_data(ChannelId, DataType,
-%% list_to_binary(Data), Connection, From);
- l2b(Data), Connection, From);
- %% try list_to_binary(Data)
- %% of
- %% B -> B
- %% catch
- %% _:_ -> io:format('BAD BINARY: ~p~n',[Data]),
- %% unicode:characters_to_binary(Data)
- %% end,
- %% Connection, From);
+ channel_data(ChannelId, DataType, l2b(Data), Connection, From);
channel_data(ChannelId, DataType, Data,
#connection{channel_cache = Cache} = Connection,
From) ->
-
case ssh_channel:cache_lookup(Cache, ChannelId) of
#channel{remote_id = Id, sent_close = false} = Channel0 ->
{SendList, Channel} =
@@ -331,8 +273,7 @@ channel_data(ChannelId, DataType, Data,
FlowCtrlMsgs = flow_control(Replies, Channel, Cache),
{{replies, Replies ++ FlowCtrlMsgs}, Connection};
_ ->
- gen_fsm:reply(From, {error, closed}),
- {noreply, Connection}
+ {{replies,[{channel_request_reply,From,{error,closed}}]}, Connection}
end.
handle_msg(#ssh_msg_channel_open_confirmation{recipient_channel = ChannelId,
@@ -499,7 +440,8 @@ handle_msg(#ssh_msg_channel_open{channel_type = "session" = Type,
handle_msg(#ssh_msg_channel_open{channel_type = "session",
sender_channel = RemoteId},
- Connection, client) ->
+ Connection,
+ client) ->
%% Client implementations SHOULD reject any session channel open
%% requests to make it more difficult for a corrupt server to attack the
%% client. See See RFC 4254 6.1.
@@ -509,73 +451,6 @@ handle_msg(#ssh_msg_channel_open{channel_type = "session",
{{replies, [{connection_reply, FailMsg}]},
Connection};
-handle_msg(#ssh_msg_channel_open{channel_type = "forwarded-tcpip" = Type,
- sender_channel = RemoteId,
- initial_window_size = RWindowSz,
- maximum_packet_size = RPacketSz,
- data = Data},
- #connection{channel_cache = Cache,
- options = SSHopts} = Connection0, server) ->
- <<?UINT32(ALen), Address:ALen/binary, ?UINT32(Port),
- ?UINT32(OLen), Orig:OLen/binary, ?UINT32(OrigPort)>> = Data,
-
- MinAcceptedPackSz = proplists:get_value(minimal_remote_max_packet_size, SSHopts, 0),
-
- if
- MinAcceptedPackSz =< RPacketSz ->
- case bound_channel(Address, Port, Connection0) of
- undefined ->
- FailMsg = channel_open_failure_msg(RemoteId,
- ?SSH_OPEN_CONNECT_FAILED,
- "Connection refused", "en"),
- {{replies,
- [{connection_reply, FailMsg}]}, Connection0};
- ChannelPid ->
- {ChannelId, Connection1} = new_channel_id(Connection0),
- LWindowSz = ?DEFAULT_WINDOW_SIZE,
- LPacketSz = ?DEFAULT_PACKET_SIZE,
- Channel = #channel{type = Type,
- sys = "none",
- user = ChannelPid,
- local_id = ChannelId,
- recv_window_size = LWindowSz,
- recv_packet_size = LPacketSz,
- send_window_size = RWindowSz,
- send_packet_size = RPacketSz,
- send_buf = queue:new()
- },
- ssh_channel:cache_update(Cache, Channel),
- OpenConfMsg = channel_open_confirmation_msg(RemoteId, ChannelId,
- LWindowSz, LPacketSz),
- {OpenMsg, Connection} =
- reply_msg(Channel, Connection1,
- {open, Channel, {forwarded_tcpip,
- decode_ip(Address), Port,
- decode_ip(Orig), OrigPort}}),
- {{replies, [{connection_reply, OpenConfMsg},
- OpenMsg]}, Connection}
- end;
-
- MinAcceptedPackSz > RPacketSz ->
- FailMsg = channel_open_failure_msg(RemoteId,
- ?SSH_OPEN_ADMINISTRATIVELY_PROHIBITED,
- lists:concat(["Maximum packet size below ",MinAcceptedPackSz,
- " not supported"]), "en"),
- {{replies, [{connection_reply, FailMsg}]}, Connection0}
- end;
-
-
-handle_msg(#ssh_msg_channel_open{channel_type = "forwarded-tcpip",
- sender_channel = RemoteId},
- Connection, client) ->
- %% Client implementations SHOULD reject direct TCP/IP open requests for
- %% security reasons. See RFC 4254 7.2.
- FailMsg = channel_open_failure_msg(RemoteId,
- ?SSH_OPEN_CONNECT_FAILED,
- "Connection refused", "en"),
- {{replies, [{connection_reply, FailMsg}]}, Connection};
-
-
handle_msg(#ssh_msg_channel_open{sender_channel = RemoteId}, Connection, _) ->
FailMsg = channel_open_failure_msg(RemoteId,
?SSH_OPEN_ADMINISTRATIVELY_PROHIBITED,
@@ -786,11 +661,11 @@ handle_msg(#ssh_msg_global_request{name = _Type,
handle_msg(#ssh_msg_request_failure{},
#connection{requests = [{_, From} | Rest]} = Connection, _) ->
- {{replies, [{channel_requst_reply, From, {failure, <<>>}}]},
+ {{replies, [{channel_request_reply, From, {failure, <<>>}}]},
Connection#connection{requests = Rest}};
handle_msg(#ssh_msg_request_success{data = Data},
#connection{requests = [{_, From} | Rest]} = Connection, _) ->
- {{replies, [{channel_requst_reply, From, {success, Data}}]},
+ {{replies, [{channel_request_reply, From, {success, Data}}]},
Connection#connection{requests = Rest}};
handle_msg(#ssh_msg_disconnect{code = Code,
@@ -886,10 +761,6 @@ channel_request_msg(ChannelId, Type, WantReply, Data) ->
want_reply = WantReply,
data = Data}.
-global_request_msg(Type, WantReply, Data) ->
- #ssh_msg_global_request{name = Type,
- want_reply = WantReply,
- data = Data}.
request_failure_msg() ->
#ssh_msg_request_failure{}.
@@ -1059,7 +930,7 @@ request_reply_or_data(#channel{local_id = ChannelId, user = ChannelPid},
Connection, Reply) ->
case lists:keysearch(ChannelId, 1, Requests) of
{value, {ChannelId, From}} ->
- {{channel_requst_reply, From, Reply},
+ {{channel_request_reply, From, Reply},
Connection#connection{requests =
lists:keydelete(ChannelId, 1, Requests)}};
false when (Reply == success) or (Reply == failure) ->
@@ -1351,11 +1222,6 @@ decode_pty_opts2(<<Code, ?UINT32(Value), Tail/binary>>) ->
end,
[{Op, Value} | decode_pty_opts2(Tail)].
-decode_ip(Addr) when is_binary(Addr) ->
- case inet_parse:address(binary_to_list(Addr)) of
- {error,_} -> Addr;
- {ok,A} -> A
- end.
backwards_compatible([], Acc) ->
Acc;
diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl
index b73f8b23d2..f9f4c82351 100644
--- a/lib/ssh/src/ssh_connection_handler.erl
+++ b/lib/ssh/src/ssh_connection_handler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,94 +28,90 @@
-module(ssh_connection_handler).
--behaviour(gen_fsm).
+-behaviour(gen_statem).
-include("ssh.hrl").
-include("ssh_transport.hrl").
-include("ssh_auth.hrl").
-include("ssh_connect.hrl").
--compile(export_all).
--export([start_link/3]).
-%% Internal application API
--export([open_channel/6, reply_request/3, request/6, request/7,
- global_request/4, send/5, send_eof/2, info/1, info/2,
- connection_info/2, channel_info/3,
- adjust_window/3, close/2, stop/1, renegotiate/1, renegotiate_data/1,
- start_connection/4,
- get_print_info/1]).
-
-%% gen_fsm callbacks
--export([hello/2, kexinit/2, key_exchange/2,
- key_exchange_dh_gex_init/2, key_exchange_dh_gex_reply/2,
- new_keys/2,
- service_request/2, connected/2,
- userauth/2,
- userauth_keyboard_interactive/2,
- userauth_keyboard_interactive_info_response/2,
- error/2]).
-
--export([init/1, handle_event/3,
- handle_sync_event/4, handle_info/3, terminate/3, format_status/2, code_change/4]).
-
--record(state, {
- role,
- client,
- starter,
- auth_user,
- connection_state,
- latest_channel_id = 0,
- idle_timer_ref,
- transport_protocol, % ex: tcp
- transport_cb,
- transport_close_tag,
- ssh_params, % #ssh{} - from ssh.hrl
- socket, % socket()
- decoded_data_buffer, % binary()
- encoded_data_buffer, % binary()
- undecoded_packet_length, % integer()
- key_exchange_init_msg, % #ssh_msg_kexinit{}
- renegotiate = false, % boolean()
- last_size_rekey = 0,
- event_queue = [],
- connection_queue,
- address,
- port,
- opts,
- recbuf
- }).
-
--type state_name() :: hello | kexinit | key_exchange | key_exchange_dh_gex_init |
- key_exchange_dh_gex_reply | new_keys | service_request |
- userauth | userauth_keyboard_interactive |
- userauth_keyboard_interactive_info_response |
- connection.
-
--type gen_fsm_state_return() :: {next_state, state_name(), term()} |
- {next_state, state_name(), term(), timeout()} |
- {stop, term(), term()}.
-
--type gen_fsm_sync_return() :: {next_state, state_name(), term()} |
- {next_state, state_name(), term(), timeout()} |
- {reply, term(), state_name(), term()} |
- {stop, term(), term(), term()}.
+%%====================================================================
+%%% Exports
+%%====================================================================
+
+%%% Start and stop
+-export([start_link/3,
+ stop/1
+ ]).
+
+%%% Internal application API
+-export([start_connection/4,
+ open_channel/6,
+ request/6, request/7,
+ reply_request/3,
+ send/5,
+ send_eof/2,
+ info/1, info/2,
+ connection_info/2,
+ channel_info/3,
+ adjust_window/3, close/2,
+ disconnect/1, disconnect/2,
+ get_print_info/1
+ ]).
+
+%%% Behaviour callbacks
+-export([handle_event/4, terminate/3, format_status/2, code_change/4]).
+
+%%% Exports not intended to be used :). They are used for spawning and tests
+-export([init_connection_handler/3, % proc_lib:spawn needs this
+ init_ssh_record/3, % Export of this internal function
+ % intended for low-level protocol test suites
+ renegotiate/1, renegotiate_data/1 % Export intended for test cases
+ ]).
%%====================================================================
-%% Internal application API
+%% Start / stop
%%====================================================================
+%%--------------------------------------------------------------------
+-spec start_link(role(),
+ inet:socket(),
+ proplists:proplist()
+ ) -> {ok, pid()}.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+start_link(Role, Socket, Options) ->
+ {ok, proc_lib:spawn_link(?MODULE, init_connection_handler, [Role, Socket, Options])}.
+
%%--------------------------------------------------------------------
--spec start_connection(client| server, port(), proplists:proplist(),
- timeout()) -> {ok, pid()} | {error, term()}.
+-spec stop(connection_ref()
+ ) -> ok | {error, term()}.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+stop(ConnectionHandler)->
+ case call(ConnectionHandler, stop) of
+ {error, closed} ->
+ ok;
+ Other ->
+ Other
+ end.
+
+%%====================================================================
+%% Internal application API
+%%====================================================================
+
+-define(DefaultTransport, {tcp, gen_tcp, tcp_closed} ).
+
%%--------------------------------------------------------------------
+-spec start_connection(role(),
+ inet:socket(),
+ proplists:proplist(),
+ timeout()
+ ) -> {ok, connection_ref()} | {error, term()}.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
start_connection(client = Role, Socket, Options, Timeout) ->
try
{ok, Pid} = sshc_sup:start_child([Role, Socket, Options]),
- {_, Callback, _} =
- proplists:get_value(transport, Options, {tcp, gen_tcp, tcp_closed}),
- ok = socket_control(Socket, Pid, Callback),
- Ref = erlang:monitor(process, Pid),
- handshake(Pid, Ref, Timeout)
+ ok = socket_control(Socket, Pid, Options),
+ handshake(Pid, erlang:monitor(process,Pid), Timeout)
catch
exit:{noproc, _} ->
{error, ssh_not_started};
@@ -128,8 +124,8 @@ start_connection(server = Role, Socket, Options, Timeout) ->
try
case proplists:get_value(parallel_login, SSH_Opts, false) of
true ->
- HandshakerPid =
- spawn_link(fun() ->
+ HandshakerPid =
+ spawn_link(fun() ->
receive
{do_handshake, Pid} ->
handshake(Pid, erlang:monitor(process,Pid), Timeout)
@@ -148,967 +144,1144 @@ start_connection(server = Role, Socket, Options, Timeout) ->
{error, Error}
end.
-start_the_connection_child(UserPid, Role, Socket, Options) ->
- Sups = proplists:get_value(supervisors, Options),
- ConnectionSup = proplists:get_value(connection_sup, Sups),
- Opts = [{supervisors, Sups}, {user_pid, UserPid} | proplists:get_value(ssh_opts, Options, [])],
- {ok, Pid} = ssh_connection_sup:start_child(ConnectionSup, [Role, Socket, Opts]),
- {_, Callback, _} = proplists:get_value(transport, Options, {tcp, gen_tcp, tcp_closed}),
- socket_control(Socket, Pid, Callback),
- Pid.
-
+%%--------------------------------------------------------------------
+%%% Some other module has decided to disconnect.
+-spec disconnect(#ssh_msg_disconnect{}) -> no_return().
+-spec disconnect(#ssh_msg_disconnect{}, iodata()) -> no_return().
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+disconnect(Msg = #ssh_msg_disconnect{}) ->
+ throw({keep_state_and_data,
+ [{next_event, internal, {disconnect, Msg, Msg#ssh_msg_disconnect.description}}]}).
-start_link(Role, Socket, Options) ->
- {ok, proc_lib:spawn_link(?MODULE, init, [[Role, Socket, Options]])}.
+disconnect(Msg = #ssh_msg_disconnect{}, ExtraInfo) ->
+ throw({keep_state_and_data,
+ [{next_event, internal, {disconnect, Msg, {Msg#ssh_msg_disconnect.description,ExtraInfo}}}]}).
-init([Role, Socket, SshOpts]) ->
- process_flag(trap_exit, true),
- {NumVsn, StrVsn} = ssh_transport:versions(Role, SshOpts),
- {Protocol, Callback, CloseTag} =
- proplists:get_value(transport, SshOpts, {tcp, gen_tcp, tcp_closed}),
- Cache = ssh_channel:cache_create(),
- State0 = #state{
- role = Role,
- connection_state = #connection{channel_cache = Cache,
- channel_id_seed = 0,
- port_bindings = [],
- requests = [],
- options = SshOpts},
- socket = Socket,
- decoded_data_buffer = <<>>,
- encoded_data_buffer = <<>>,
- transport_protocol = Protocol,
- transport_cb = Callback,
- transport_close_tag = CloseTag,
- opts = SshOpts
- },
-
- State = init_role(State0),
-
- try init_ssh(Role, NumVsn, StrVsn, SshOpts, Socket) of
- Ssh ->
- gen_fsm:enter_loop(?MODULE, [], hello,
- State#state{ssh_params = Ssh})
- catch
- _:Error ->
- gen_fsm:enter_loop(?MODULE, [], error, {Error, State})
- end.
-%% Temporary fix for the Nessus error. SYN-> <-SYNACK ACK-> RST-> ?
-error(_Event, {Error,State=#state{}}) ->
- case Error of
- {badmatch,{error,enotconn}} ->
- %% {error,enotconn} probably from inet:peername in
- %% init_ssh(server,..)/5 called from init/1
- {stop, {shutdown,"TCP connenction to server was prematurely closed by the client"}, State};
- _ ->
- {stop, {shutdown,{init,Error}}, State}
- end;
-error(Event, State) ->
- %% State deliberately not checked beeing #state. This is a panic-clause...
- {stop, {shutdown,{init,{spurious_error,Event}}}, State}.
-
-%%--------------------------------------------------------------------
--spec open_channel(pid(), string(), iodata(), integer(), integer(),
- timeout()) -> {open, channel_id()} | {error, term()}.
%%--------------------------------------------------------------------
-open_channel(ConnectionHandler, ChannelType, ChannelSpecificData,
- InitialWindowSize,
- MaxPacketSize, Timeout) ->
- sync_send_all_state_event(ConnectionHandler, {open, self(), ChannelType,
- InitialWindowSize, MaxPacketSize,
- ChannelSpecificData,
- Timeout}).
-%%--------------------------------------------------------------------
--spec request(pid(), pid(), channel_id(), string(), boolean(), iodata(),
- timeout()) -> success | failure | ok | {error, term()}.
+-spec open_channel(connection_ref(),
+ string(),
+ iodata(),
+ pos_integer(),
+ pos_integer(),
+ timeout()
+ ) -> {open, channel_id()} | {error, term()}.
+
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+open_channel(ConnectionHandler,
+ ChannelType, ChannelSpecificData, InitialWindowSize, MaxPacketSize,
+ Timeout) ->
+ call(ConnectionHandler,
+ {open,
+ self(),
+ ChannelType, InitialWindowSize, MaxPacketSize, ChannelSpecificData,
+ Timeout}).
+
%%--------------------------------------------------------------------
+-spec request(connection_ref(),
+ pid(),
+ channel_id(),
+ string(),
+ boolean(),
+ iodata(),
+ timeout()
+ ) -> success | failure | ok | {error,timeout}.
+
+-spec request(connection_ref(),
+ channel_id(),
+ string(),
+ boolean(),
+ iodata(),
+ timeout()
+ ) -> success | failure | ok | {error,timeout}.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
request(ConnectionHandler, ChannelPid, ChannelId, Type, true, Data, Timeout) ->
- sync_send_all_state_event(ConnectionHandler, {request, ChannelPid, ChannelId, Type, Data,
- Timeout});
+ call(ConnectionHandler, {request, ChannelPid, ChannelId, Type, Data, Timeout});
request(ConnectionHandler, ChannelPid, ChannelId, Type, false, Data, _) ->
- send_all_state_event(ConnectionHandler, {request, ChannelPid, ChannelId, Type, Data}).
+ cast(ConnectionHandler, {request, ChannelPid, ChannelId, Type, Data}).
-%%--------------------------------------------------------------------
--spec request(pid(), channel_id(), string(), boolean(), iodata(),
- timeout()) -> success | failure | {error, timeout}.
-%%--------------------------------------------------------------------
request(ConnectionHandler, ChannelId, Type, true, Data, Timeout) ->
- sync_send_all_state_event(ConnectionHandler, {request, ChannelId, Type, Data, Timeout});
+ call(ConnectionHandler, {request, ChannelId, Type, Data, Timeout});
request(ConnectionHandler, ChannelId, Type, false, Data, _) ->
- send_all_state_event(ConnectionHandler, {request, ChannelId, Type, Data}).
+ cast(ConnectionHandler, {request, ChannelId, Type, Data}).
%%--------------------------------------------------------------------
--spec reply_request(pid(), success | failure, channel_id()) -> ok.
-%%--------------------------------------------------------------------
+-spec reply_request(connection_ref(),
+ success | failure,
+ channel_id()
+ ) -> ok.
+
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
reply_request(ConnectionHandler, Status, ChannelId) ->
- send_all_state_event(ConnectionHandler, {reply_request, Status, ChannelId}).
-
-%%--------------------------------------------------------------------
--spec global_request(pid(), string(), boolean(), iolist()) -> ok | error.
-%%--------------------------------------------------------------------
-global_request(ConnectionHandler, Type, true = Reply, Data) ->
- case sync_send_all_state_event(ConnectionHandler,
- {global_request, self(), Type, Reply, Data}) of
- {ssh_cm, ConnectionHandler, {success, _}} ->
- ok;
- {ssh_cm, ConnectionHandler, {failure, _}} ->
- error
- end;
-global_request(ConnectionHandler, Type, false = Reply, Data) ->
- send_all_state_event(ConnectionHandler, {global_request, self(), Type, Reply, Data}).
+ cast(ConnectionHandler, {reply_request, Status, ChannelId}).
%%--------------------------------------------------------------------
--spec send(pid(), channel_id(), integer(), iodata(), timeout()) ->
- ok | {error, timeout} | {error, closed}.
-%%--------------------------------------------------------------------
+-spec send(connection_ref(),
+ channel_id(),
+ non_neg_integer(),
+ iodata(),
+ timeout()
+ ) -> ok | {error, timeout|closed}.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
send(ConnectionHandler, ChannelId, Type, Data, Timeout) ->
- sync_send_all_state_event(ConnectionHandler, {data, ChannelId, Type, Data, Timeout}).
+ call(ConnectionHandler, {data, ChannelId, Type, Data, Timeout}).
%%--------------------------------------------------------------------
--spec send_eof(pid(), channel_id()) -> ok | {error, closed}.
-%%--------------------------------------------------------------------
+-spec send_eof(connection_ref(),
+ channel_id()
+ ) -> ok | {error,closed}.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
send_eof(ConnectionHandler, ChannelId) ->
- sync_send_all_state_event(ConnectionHandler, {eof, ChannelId}).
+ call(ConnectionHandler, {eof, ChannelId}).
%%--------------------------------------------------------------------
--spec connection_info(pid(), [atom()]) -> proplists:proplist().
+-spec info(connection_ref()
+ ) -> {ok, [#channel{}]} .
+
+-spec info(connection_ref(),
+ pid() | all
+ ) -> {ok, [#channel{}]} .
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+info(ConnectionHandler) ->
+ info(ConnectionHandler, all).
+
+info(ConnectionHandler, ChannelProcess) ->
+ call(ConnectionHandler, {info, ChannelProcess}).
+
%%--------------------------------------------------------------------
+-type local_sock_info() :: {inet:ip_address(), non_neg_integer()} | string().
+-type peer_sock_info() :: {inet:ip_address(), non_neg_integer()} | string().
+-type state_info() :: iolist().
+
+-spec get_print_info(connection_ref()
+ ) -> {{local_sock_info(), peer_sock_info()},
+ state_info()
+ }.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
get_print_info(ConnectionHandler) ->
- sync_send_all_state_event(ConnectionHandler, get_print_info, 1000).
+ call(ConnectionHandler, get_print_info, 1000).
+%%--------------------------------------------------------------------
+-spec connection_info(connection_ref(),
+ [atom()]
+ ) -> proplists:proplist().
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
connection_info(ConnectionHandler, Options) ->
- sync_send_all_state_event(ConnectionHandler, {connection_info, Options}).
+ call(ConnectionHandler, {connection_info, Options}).
%%--------------------------------------------------------------------
--spec channel_info(pid(), channel_id(), [atom()]) -> proplists:proplist().
-%%--------------------------------------------------------------------
+-spec channel_info(connection_ref(),
+ channel_id(),
+ [atom()]
+ ) -> proplists:proplist().
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
channel_info(ConnectionHandler, ChannelId, Options) ->
- sync_send_all_state_event(ConnectionHandler, {channel_info, ChannelId, Options}).
+ call(ConnectionHandler, {channel_info, ChannelId, Options}).
%%--------------------------------------------------------------------
--spec adjust_window(pid(), channel_id(), integer()) -> ok.
-%%--------------------------------------------------------------------
+-spec adjust_window(connection_ref(),
+ channel_id(),
+ integer()
+ ) -> ok.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
adjust_window(ConnectionHandler, Channel, Bytes) ->
- send_all_state_event(ConnectionHandler, {adjust_window, Channel, Bytes}).
-%%--------------------------------------------------------------------
--spec renegotiate(pid()) -> ok.
-%%--------------------------------------------------------------------
-renegotiate(ConnectionHandler) ->
- send_all_state_event(ConnectionHandler, renegotiate).
+ cast(ConnectionHandler, {adjust_window, Channel, Bytes}).
%%--------------------------------------------------------------------
--spec renegotiate_data(pid()) -> ok.
-%%--------------------------------------------------------------------
-renegotiate_data(ConnectionHandler) ->
- send_all_state_event(ConnectionHandler, data_size).
-
-%%--------------------------------------------------------------------
--spec close(pid(), channel_id()) -> ok.
-%%--------------------------------------------------------------------
+-spec close(connection_ref(),
+ channel_id()
+ ) -> ok.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
close(ConnectionHandler, ChannelId) ->
- case sync_send_all_state_event(ConnectionHandler, {close, ChannelId}) of
+ case call(ConnectionHandler, {close, ChannelId}) of
ok ->
ok;
- {error, closed} ->
+ {error, closed} ->
ok
- end.
-
-%%--------------------------------------------------------------------
--spec stop(pid()) -> ok | {error, term()}.
-%%--------------------------------------------------------------------
-stop(ConnectionHandler)->
- case sync_send_all_state_event(ConnectionHandler, stop) of
- {error, closed} ->
- ok;
- Other ->
- Other
end.
-info(ConnectionHandler) ->
- info(ConnectionHandler, {info, all}).
+%%====================================================================
+%% Test support
+%%====================================================================
+%%--------------------------------------------------------------------
+-spec renegotiate(connection_ref()
+ ) -> ok.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+renegotiate(ConnectionHandler) ->
+ cast(ConnectionHandler, renegotiate).
-info(ConnectionHandler, ChannelProcess) ->
- sync_send_all_state_event(ConnectionHandler, {info, ChannelProcess}).
+%%--------------------------------------------------------------------
+-spec renegotiate_data(connection_ref()
+ ) -> ok.
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+renegotiate_data(ConnectionHandler) ->
+ cast(ConnectionHandler, data_size).
%%====================================================================
-%% gen_fsm callbacks
+%% Internal process state
%%====================================================================
+-record(data, {
+ starter :: pid(),
+ auth_user :: string()
+ | undefined,
+ connection_state :: #connection{},
+ latest_channel_id = 0 :: non_neg_integer(),
+ idle_timer_ref :: undefined
+ | infinity
+ | reference(),
+ idle_timer_value = infinity :: infinity
+ | pos_integer(),
+ transport_protocol :: atom(), % ex: tcp
+ transport_cb :: atom(), % ex: gen_tcp
+ transport_close_tag :: atom(), % ex: tcp_closed
+ ssh_params :: #ssh{}
+ | undefined,
+ socket :: inet:socket(),
+ decrypted_data_buffer = <<>> :: binary(),
+ encrypted_data_buffer = <<>> :: binary(),
+ undecrypted_packet_length :: undefined | non_neg_integer(),
+ key_exchange_init_msg :: #ssh_msg_kexinit{}
+ | undefined,
+ last_size_rekey = 0 :: non_neg_integer(),
+ event_queue = [] :: list(),
+ opts :: proplists:proplist(),
+ inet_initial_recbuf_size :: pos_integer()
+ | undefined
+ }).
+%%====================================================================
+%% Intitialisation
+%%====================================================================
%%--------------------------------------------------------------------
--spec hello(socket_control | {info_line, list()} | {version_exchange, list()},
- #state{}) -> gen_fsm_state_return().
+-spec init_connection_handler(role(),
+ inet:socket(),
+ proplists:proplist()
+ ) -> no_return().
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+init_connection_handler(Role, Socket, Opts) ->
+ process_flag(trap_exit, true),
+ S0 = init_process_state(Role, Socket, Opts),
+ try
+ {Protocol, Callback, CloseTag} =
+ proplists:get_value(transport, Opts, ?DefaultTransport),
+ S0#data{ssh_params = init_ssh_record(Role, Socket, Opts),
+ transport_protocol = Protocol,
+ transport_cb = Callback,
+ transport_close_tag = CloseTag
+ }
+ of
+ S ->
+ gen_statem:enter_loop(?MODULE,
+ [], %%[{debug,[trace,log,statistics,debug]} || Role==server],
+ handle_event_function,
+ {hello,Role},
+ S)
+ catch
+ _:Error ->
+ gen_statem:enter_loop(?MODULE,
+ [],
+ handle_event_function,
+ {init_error,Error},
+ S0)
+ end.
+
+
+init_process_state(Role, Socket, Opts) ->
+ D = #data{connection_state =
+ C = #connection{channel_cache = ssh_channel:cache_create(),
+ channel_id_seed = 0,
+ port_bindings = [],
+ requests = [],
+ options = Opts},
+ starter = proplists:get_value(user_pid, Opts),
+ socket = Socket,
+ opts = Opts
+ },
+ case Role of
+ client ->
+ %% Start the renegotiation timers
+ timer:apply_after(?REKEY_TIMOUT, gen_statem, cast, [self(), renegotiate]),
+ timer:apply_after(?REKEY_DATA_TIMOUT, gen_statem, cast, [self(), data_size]),
+ cache_init_idle_timer(D);
+ server ->
+ D#data{connection_state = init_connection(Role, C, Opts)}
+ end.
+
+
+init_connection(server, C = #connection{}, Opts) ->
+ Sups = proplists:get_value(supervisors, Opts),
+ SystemSup = proplists:get_value(system_sup, Sups),
+ SubSystemSup = proplists:get_value(subsystem_sup, Sups),
+ ConnectionSup = proplists:get_value(connection_sup, Sups),
+ Shell = proplists:get_value(shell, Opts),
+ Exec = proplists:get_value(exec, Opts),
+ CliSpec = proplists:get_value(ssh_cli, Opts, {ssh_cli, [Shell]}),
+ C#connection{cli_spec = CliSpec,
+ exec = Exec,
+ system_supervisor = SystemSup,
+ sub_system_supervisor = SubSystemSup,
+ connection_supervisor = ConnectionSup
+ }.
+
+
+init_ssh_record(Role, Socket, Opts) ->
+ {ok, PeerAddr} = inet:peername(Socket),
+ KeyCb = proplists:get_value(key_cb, Opts, ssh_file),
+ AuthMethods = proplists:get_value(auth_methods,
+ Opts,
+ case Role of
+ server -> ?SUPPORTED_AUTH_METHODS;
+ client -> undefined
+ end),
+ S0 = #ssh{role = Role,
+ key_cb = KeyCb,
+ opts = Opts,
+ userauth_supported_methods = AuthMethods,
+ available_host_keys = supported_host_keys(Role, KeyCb, Opts),
+ random_length_padding = proplists:get_value(max_random_length_padding,
+ Opts,
+ (#ssh{})#ssh.random_length_padding)
+ },
+
+ {Vsn, Version} = ssh_transport:versions(Role, Opts),
+ case Role of
+ client ->
+ PeerName = proplists:get_value(host, Opts),
+ S0#ssh{c_vsn = Vsn,
+ c_version = Version,
+ io_cb = case proplists:get_value(user_interaction, Opts, true) of
+ true -> ssh_io;
+ false -> ssh_no_io
+ end,
+ userauth_quiet_mode = proplists:get_value(quiet_mode, Opts, false),
+ peer = {PeerName, PeerAddr}
+ };
+
+ server ->
+ S0#ssh{s_vsn = Vsn,
+ s_version = Version,
+ io_cb = proplists:get_value(io_cb, Opts, ssh_io),
+ userauth_methods = string:tokens(AuthMethods, ","),
+ kb_tries_left = 3,
+ peer = {undefined, PeerAddr}
+ }
+ end.
+
+
+
+%%====================================================================
+%% gen_statem callbacks
+%%====================================================================
%%--------------------------------------------------------------------
+-type event_content() :: any().
+
+-type renegotiate_flag() :: init | renegotiate.
+
+-type state_name() ::
+ {init_error,any()}
+ | {hello, role()}
+ | {kexinit, role(), renegotiate_flag()}
+ | {key_exchange, role(), renegotiate_flag()}
+ | {key_exchange_dh_gex_init, server, renegotiate_flag()}
+ | {key_exchange_dh_gex_reply, client, renegotiate_flag()}
+ | {new_keys, role()}
+ | {service_request, role()}
+ | {userauth, role()}
+ | {userauth_keyboard_interactive, role()}
+ | {connected, role()}
+ .
+
+-type handle_event_result() :: gen_statem:handle_event_result().
+
+-spec handle_event(gen_statem:event_type(),
+ event_content(),
+ state_name(),
+ #data{}
+ ) -> handle_event_result().
+
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+
+%%% ######## Error in the initialisation ####
+
+handle_event(_, _Event, {init_error,Error}, _) ->
+ case Error of
+ {badmatch,{error,enotconn}} ->
+ %% Handles the abnormal sequence:
+ %% SYN->
+ %% <-SYNACK
+ %% ACK->
+ %% RST->
+ {stop, {shutdown,"TCP connenction to server was prematurely closed by the client"}};
+
+ OtherError ->
+ {stop, {shutdown,{init,OtherError}}}
+ end;
+
-hello(socket_control, #state{socket = Socket, ssh_params = Ssh} = State) ->
- VsnMsg = ssh_transport:hello_version_msg(string_version(Ssh)),
- send_msg(VsnMsg, State),
- case getopt(recbuf, Socket) of
- {ok, Size} ->
- inet:setopts(Socket, [{packet, line}, {active, once}, {recbuf, ?MAX_PROTO_VERSION}]),
- {next_state, hello, State#state{recbuf = Size}};
- {error, Reason} ->
- {stop, {shutdown, Reason}, State}
+%%% ######## {hello, client|server} ####
+%% The very first event that is sent when the we are set as controlling process of Socket
+handle_event(_, socket_control, {hello,_}, D) ->
+ VsnMsg = ssh_transport:hello_version_msg(string_version(D#data.ssh_params)),
+ ok = send_bytes(VsnMsg, D),
+ case inet:getopts(Socket=D#data.socket, [recbuf]) of
+ {ok, [{recbuf,Size}]} ->
+ %% Set the socket to the hello text line handling mode:
+ inet:setopts(Socket, [{packet, line},
+ {active, once},
+ % Expecting the version string which might
+ % be max ?MAX_PROTO_VERSION bytes:
+ {recbuf, ?MAX_PROTO_VERSION},
+ {nodelay,true}]),
+ {keep_state, D#data{inet_initial_recbuf_size=Size}};
+
+ Other ->
+ {stop, {shutdown,{unexpected_getopts_return, Other}}}
end;
-hello({info_line, _Line},#state{role = client, socket = Socket} = State) ->
- %% The server may send info lines before the version_exchange
- inet:setopts(Socket, [{active, once}]),
- {next_state, hello, State};
-
-hello({info_line, _Line},#state{role = server,
- socket = Socket,
- transport_cb = Transport } = State) ->
- %% as openssh
- Transport:send(Socket, "Protocol mismatch."),
- {stop, {shutdown,"Protocol mismatch in version exchange."}, State};
-
-hello({version_exchange, Version}, #state{ssh_params = Ssh0,
- socket = Socket,
- recbuf = Size} = State) ->
+handle_event(_, {info_line,_Line}, {hello,Role}, D) ->
+ case Role of
+ client ->
+ %% The server may send info lines to the client before the version_exchange
+ inet:setopts(D#data.socket, [{active, once}]),
+ keep_state_and_data;
+ server ->
+ %% But the client may NOT send them to the server. Openssh answers with cleartext,
+ %% and so do we
+ ok = send_bytes("Protocol mismatch.", D),
+ {stop, {shutdown,"Protocol mismatch in version exchange. Client sent info lines."}}
+ end;
+
+handle_event(_, {version_exchange,Version}, {hello,Role}, D) ->
{NumVsn, StrVsn} = ssh_transport:handle_hello_version(Version),
- case handle_version(NumVsn, StrVsn, Ssh0) of
+ case handle_version(NumVsn, StrVsn, D#data.ssh_params) of
{ok, Ssh1} ->
- inet:setopts(Socket, [{packet,0}, {mode,binary}, {active, once}, {recbuf, Size}]),
+ %% Since the hello part is finnished correctly, we set the
+ %% socket to the packet handling mode (including recbuf size):
+ inet:setopts(D#data.socket, [{packet,0},
+ {mode,binary},
+ {active, once},
+ {recbuf, D#data.inet_initial_recbuf_size}]),
{KeyInitMsg, SshPacket, Ssh} = ssh_transport:key_exchange_init_msg(Ssh1),
- send_msg(SshPacket, State),
- {next_state, kexinit, next_packet(State#state{ssh_params = Ssh,
- key_exchange_init_msg =
- KeyInitMsg})};
+ ok = send_bytes(SshPacket, D),
+ {next_state, {kexinit,Role,init}, D#data{ssh_params = Ssh,
+ key_exchange_init_msg = KeyInitMsg}};
not_supported ->
- DisconnectMsg =
- #ssh_msg_disconnect{code =
- ?SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED,
- description = "Protocol version " ++ StrVsn
- ++ " not supported",
- language = "en"},
- handle_disconnect(DisconnectMsg, State)
- end.
+ disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED,
+ description = ["Protocol version ",StrVsn," not supported"]},
+ {next_state, {hello,Role}, D})
+ end;
-%%--------------------------------------------------------------------
--spec kexinit({#ssh_msg_kexinit{}, binary()}, #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
-kexinit({#ssh_msg_kexinit{} = Kex, Payload},
- #state{ssh_params = #ssh{role = Role} = Ssh0,
- key_exchange_init_msg = OwnKex} =
- State) ->
- Ssh1 = ssh_transport:key_init(opposite_role(Role), Ssh0, Payload),
- case ssh_transport:handle_kexinit_msg(Kex, OwnKex, Ssh1) of
- {ok, NextKexMsg, Ssh} when Role == client ->
- send_msg(NextKexMsg, State),
- {next_state, key_exchange,
- next_packet(State#state{ssh_params = Ssh})};
- {ok, Ssh} when Role == server ->
- {next_state, key_exchange,
- next_packet(State#state{ssh_params = Ssh})}
- end.
+
+%%% ######## {kexinit, client|server, init|renegotiate} ####
-%%--------------------------------------------------------------------
--spec key_exchange(#ssh_msg_kexdh_init{} | #ssh_msg_kexdh_reply{} |
- #ssh_msg_kex_dh_gex_group{} | #ssh_msg_kex_dh_gex_request{} |
- #ssh_msg_kex_dh_gex_request{} | #ssh_msg_kex_dh_gex_reply{}, #state{})
- -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
+handle_event(_, {#ssh_msg_kexinit{}=Kex, Payload}, {kexinit,Role,ReNeg},
+ D = #data{key_exchange_init_msg = OwnKex}) ->
+ Ssh1 = ssh_transport:key_init(peer_role(Role), D#data.ssh_params, Payload),
+ Ssh = case ssh_transport:handle_kexinit_msg(Kex, OwnKex, Ssh1) of
+ {ok, NextKexMsg, Ssh2} when Role==client ->
+ ok = send_bytes(NextKexMsg, D),
+ Ssh2;
+ {ok, Ssh2} when Role==server ->
+ Ssh2
+ end,
+ {next_state, {key_exchange,Role,ReNeg}, D#data{ssh_params=Ssh}};
-key_exchange(#ssh_msg_kexdh_init{} = Msg,
- #state{ssh_params = #ssh{role = server} = Ssh0} = State) ->
- case ssh_transport:handle_kexdh_init(Msg, Ssh0) of
- {ok, KexdhReply, Ssh1} ->
- send_msg(KexdhReply, State),
- {ok, NewKeys, Ssh} = ssh_transport:new_keys_message(Ssh1),
- send_msg(NewKeys, State),
- {next_state, new_keys, next_packet(State#state{ssh_params = Ssh})}
- end;
-key_exchange(#ssh_msg_kexdh_reply{} = Msg,
- #state{ssh_params = #ssh{role = client} = Ssh0} = State) ->
- {ok, NewKeys, Ssh} = ssh_transport:handle_kexdh_reply(Msg, Ssh0),
- send_msg(NewKeys, State),
- {next_state, new_keys, next_packet(State#state{ssh_params = Ssh})};
-
-key_exchange(#ssh_msg_kex_dh_gex_request{} = Msg,
- #state{ssh_params = #ssh{role = server} = Ssh0} = State) ->
- {ok, GexGroup, Ssh} = ssh_transport:handle_kex_dh_gex_request(Msg, Ssh0),
- send_msg(GexGroup, State),
- {next_state, key_exchange_dh_gex_init, next_packet(State#state{ssh_params = Ssh})};
-
-key_exchange(#ssh_msg_kex_dh_gex_request_old{} = Msg,
- #state{ssh_params = #ssh{role = server} = Ssh0} = State) ->
- {ok, GexGroup, Ssh} = ssh_transport:handle_kex_dh_gex_request(Msg, Ssh0),
- send_msg(GexGroup, State),
- {next_state, key_exchange_dh_gex_init, next_packet(State#state{ssh_params = Ssh})};
-
-key_exchange(#ssh_msg_kex_dh_gex_group{} = Msg,
- #state{ssh_params = #ssh{role = client} = Ssh0} = State) ->
- {ok, KexGexInit, Ssh} = ssh_transport:handle_kex_dh_gex_group(Msg, Ssh0),
- send_msg(KexGexInit, State),
- {next_state, key_exchange_dh_gex_reply, next_packet(State#state{ssh_params = Ssh})};
-
-key_exchange(#ssh_msg_kex_ecdh_init{} = Msg,
- #state{ssh_params = #ssh{role = server} = Ssh0} = State) ->
- {ok, KexEcdhReply, Ssh1} = ssh_transport:handle_kex_ecdh_init(Msg, Ssh0),
- send_msg(KexEcdhReply, State),
+%%% ######## {key_exchange, client|server, init|renegotiate} ####
+
+%%%---- diffie-hellman
+handle_event(_, #ssh_msg_kexdh_init{} = Msg, {key_exchange,server,ReNeg}, D) ->
+ {ok, KexdhReply, Ssh1} = ssh_transport:handle_kexdh_init(Msg, D#data.ssh_params),
+ ok = send_bytes(KexdhReply, D),
{ok, NewKeys, Ssh} = ssh_transport:new_keys_message(Ssh1),
- send_msg(NewKeys, State),
- {next_state, new_keys, next_packet(State#state{ssh_params = Ssh})};
+ ok = send_bytes(NewKeys, D),
+ {next_state, {new_keys,server,ReNeg}, D#data{ssh_params=Ssh}};
+
+handle_event(_, #ssh_msg_kexdh_reply{} = Msg, {key_exchange,client,ReNeg}, D) ->
+ {ok, NewKeys, Ssh} = ssh_transport:handle_kexdh_reply(Msg, D#data.ssh_params),
+ ok = send_bytes(NewKeys, D),
+ {next_state, {new_keys,client,ReNeg}, D#data{ssh_params=Ssh}};
+
+%%%---- diffie-hellman group exchange
+handle_event(_, #ssh_msg_kex_dh_gex_request{} = Msg, {key_exchange,server,ReNeg}, D) ->
+ {ok, GexGroup, Ssh} = ssh_transport:handle_kex_dh_gex_request(Msg, D#data.ssh_params),
+ ok = send_bytes(GexGroup, D),
+ {next_state, {key_exchange_dh_gex_init,server,ReNeg}, D#data{ssh_params=Ssh}};
+
+handle_event(_, #ssh_msg_kex_dh_gex_request_old{} = Msg, {key_exchange,server,ReNeg}, D) ->
+ {ok, GexGroup, Ssh} = ssh_transport:handle_kex_dh_gex_request(Msg, D#data.ssh_params),
+ ok = send_bytes(GexGroup, D),
+ {next_state, {key_exchange_dh_gex_init,server,ReNeg}, D#data{ssh_params=Ssh}};
+
+handle_event(_, #ssh_msg_kex_dh_gex_group{} = Msg, {key_exchange,client,ReNeg}, D) ->
+ {ok, KexGexInit, Ssh} = ssh_transport:handle_kex_dh_gex_group(Msg, D#data.ssh_params),
+ ok = send_bytes(KexGexInit, D),
+ {next_state, {key_exchange_dh_gex_reply,client,ReNeg}, D#data{ssh_params=Ssh}};
+
+%%%---- elliptic curve diffie-hellman
+handle_event(_, #ssh_msg_kex_ecdh_init{} = Msg, {key_exchange,server,ReNeg}, D) ->
+ {ok, KexEcdhReply, Ssh1} = ssh_transport:handle_kex_ecdh_init(Msg, D#data.ssh_params),
+ ok = send_bytes(KexEcdhReply, D),
+ {ok, NewKeys, Ssh} = ssh_transport:new_keys_message(Ssh1),
+ ok = send_bytes(NewKeys, D),
+ {next_state, {new_keys,server,ReNeg}, D#data{ssh_params=Ssh}};
-key_exchange(#ssh_msg_kex_ecdh_reply{} = Msg,
- #state{ssh_params = #ssh{role = client} = Ssh0} = State) ->
- {ok, NewKeys, Ssh} = ssh_transport:handle_kex_ecdh_reply(Msg, Ssh0),
- send_msg(NewKeys, State),
- {next_state, new_keys, next_packet(State#state{ssh_params = Ssh})}.
+handle_event(_, #ssh_msg_kex_ecdh_reply{} = Msg, {key_exchange,client,ReNeg}, D) ->
+ {ok, NewKeys, Ssh} = ssh_transport:handle_kex_ecdh_reply(Msg, D#data.ssh_params),
+ ok = send_bytes(NewKeys, D),
+ {next_state, {new_keys,client,ReNeg}, D#data{ssh_params=Ssh}};
-%%--------------------------------------------------------------------
--spec key_exchange_dh_gex_init(#ssh_msg_kex_dh_gex_init{}, #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
-key_exchange_dh_gex_init(#ssh_msg_kex_dh_gex_init{} = Msg,
- #state{ssh_params = #ssh{role = server} = Ssh0} = State) ->
- {ok, KexGexReply, Ssh1} = ssh_transport:handle_kex_dh_gex_init(Msg, Ssh0),
- send_msg(KexGexReply, State),
+
+%%% ######## {key_exchange_dh_gex_init, server, init|renegotiate} ####
+
+handle_event(_, #ssh_msg_kex_dh_gex_init{} = Msg, {key_exchange_dh_gex_init,server,ReNeg}, D) ->
+ {ok, KexGexReply, Ssh1} = ssh_transport:handle_kex_dh_gex_init(Msg, D#data.ssh_params),
+ ok = send_bytes(KexGexReply, D),
{ok, NewKeys, Ssh} = ssh_transport:new_keys_message(Ssh1),
- send_msg(NewKeys, State),
- {next_state, new_keys, next_packet(State#state{ssh_params = Ssh})}.
+ ok = send_bytes(NewKeys, D),
+ {next_state, {new_keys,server,ReNeg}, D#data{ssh_params=Ssh}};
-%%--------------------------------------------------------------------
--spec key_exchange_dh_gex_reply(#ssh_msg_kex_dh_gex_reply{}, #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
-key_exchange_dh_gex_reply(#ssh_msg_kex_dh_gex_reply{} = Msg,
- #state{ssh_params = #ssh{role = client} = Ssh0} = State) ->
- {ok, NewKeys, Ssh1} = ssh_transport:handle_kex_dh_gex_reply(Msg, Ssh0),
- send_msg(NewKeys, State),
- {next_state, new_keys, next_packet(State#state{ssh_params = Ssh1})}.
-%%--------------------------------------------------------------------
--spec new_keys(#ssh_msg_newkeys{}, #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
+%%% ######## {key_exchange_dh_gex_reply, client, init|renegotiate} ####
-new_keys(#ssh_msg_newkeys{} = Msg, #state{ssh_params = Ssh0} = State0) ->
- {ok, Ssh} = ssh_transport:handle_new_keys(Msg, Ssh0),
- after_new_keys(next_packet(State0#state{ssh_params = Ssh})).
+handle_event(_, #ssh_msg_kex_dh_gex_reply{} = Msg, {key_exchange_dh_gex_reply,client,ReNeg}, D) ->
+ {ok, NewKeys, Ssh1} = ssh_transport:handle_kex_dh_gex_reply(Msg, D#data.ssh_params),
+ ok = send_bytes(NewKeys, D),
+ {next_state, {new_keys,client,ReNeg}, D#data{ssh_params=Ssh1}};
-%%--------------------------------------------------------------------
--spec service_request(#ssh_msg_service_request{} | #ssh_msg_service_accept{},
- #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
-service_request(#ssh_msg_service_request{name = "ssh-userauth"} = Msg,
- #state{ssh_params = #ssh{role = server,
- session_id = SessionId} = Ssh0} = State) ->
- {ok, {Reply, Ssh}} = ssh_auth:handle_userauth_request(Msg, SessionId, Ssh0),
- send_msg(Reply, State),
- {next_state, userauth, next_packet(State#state{ssh_params = Ssh})};
-
-service_request(#ssh_msg_service_accept{name = "ssh-userauth"},
- #state{ssh_params = #ssh{role = client,
- service = "ssh-userauth"} = Ssh0} =
- State) ->
+
+%%% ######## {new_keys, client|server} ####
+
+%% First key exchange round:
+handle_event(_, #ssh_msg_newkeys{} = Msg, {new_keys,Role,init}, D) ->
+ {ok, Ssh1} = ssh_transport:handle_new_keys(Msg, D#data.ssh_params),
+ Ssh = case Role of
+ client ->
+ {MsgReq, Ssh2} = ssh_auth:service_request_msg(Ssh1),
+ ok = send_bytes(MsgReq, D),
+ Ssh2;
+ server ->
+ Ssh1
+ end,
+ {next_state, {service_request,Role}, D#data{ssh_params=Ssh}};
+
+%% Subsequent key exchange rounds (renegotiation):
+handle_event(_, #ssh_msg_newkeys{}, {new_keys,Role,renegotiate}, D) ->
+ {next_state, {connected,Role}, D};
+
+%%% ######## {service_request, client|server}
+
+handle_event(_, Msg = #ssh_msg_service_request{name=ServiceName}, StateName = {service_request,server}, D) ->
+ case ServiceName of
+ "ssh-userauth" ->
+ Ssh0 = #ssh{session_id=SessionId} = D#data.ssh_params,
+ {ok, {Reply, Ssh}} = ssh_auth:handle_userauth_request(Msg, SessionId, Ssh0),
+ ok = send_bytes(Reply, D),
+ {next_state, {userauth,server}, D#data{ssh_params = Ssh}};
+
+ _ ->
+ disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
+ description = "Unknown service"},
+ StateName, D)
+ end;
+
+handle_event(_, #ssh_msg_service_accept{name = "ssh-userauth"}, {service_request,client},
+ #data{ssh_params = #ssh{service="ssh-userauth"} = Ssh0} = State) ->
{Msg, Ssh} = ssh_auth:init_userauth_request_msg(Ssh0),
- send_msg(Msg, State),
- {next_state, userauth, next_packet(State#state{auth_user = Ssh#ssh.user, ssh_params = Ssh})}.
+ ok = send_bytes(Msg, State),
+ {next_state, {userauth,client}, State#data{auth_user = Ssh#ssh.user, ssh_params = Ssh}};
-%%--------------------------------------------------------------------
--spec userauth(#ssh_msg_userauth_request{} | #ssh_msg_userauth_info_request{} |
- #ssh_msg_userauth_info_response{} | #ssh_msg_userauth_success{} |
- #ssh_msg_userauth_failure{} | #ssh_msg_userauth_banner{},
- #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
-userauth(#ssh_msg_userauth_request{service = "ssh-connection",
- method = "none"} = Msg,
- #state{ssh_params = #ssh{session_id = SessionId, role = server,
- service = "ssh-connection"} = Ssh0
- } = State) ->
- {not_authorized, {_User, _Reason}, {Reply, Ssh}} =
- ssh_auth:handle_userauth_request(Msg, SessionId, Ssh0),
- send_msg(Reply, State),
- {next_state, userauth, next_packet(State#state{ssh_params = Ssh})};
-
-userauth(#ssh_msg_userauth_request{service = "ssh-connection",
- method = Method} = Msg,
- #state{ssh_params = #ssh{session_id = SessionId, role = server,
- service = "ssh-connection",
- peer = {_, Address}} = Ssh0,
- opts = Opts, starter = Pid} = State) ->
- case lists:member(Method, Ssh0#ssh.userauth_methods) of
- true ->
- case ssh_auth:handle_userauth_request(Msg, SessionId, Ssh0) of
- {authorized, User, {Reply, Ssh}} ->
- send_msg(Reply, State),
- Pid ! ssh_connected,
- connected_fun(User, Address, Method, Opts),
- {next_state, connected,
- next_packet(State#state{auth_user = User, ssh_params = Ssh#ssh{authenticated = true}})};
- {not_authorized, {User, Reason}, {Reply, Ssh}} when Method == "keyboard-interactive" ->
- retry_fun(User, Address, Reason, Opts),
- send_msg(Reply, State),
- {next_state, userauth_keyboard_interactive, next_packet(State#state{ssh_params = Ssh})};
- {not_authorized, {User, Reason}, {Reply, Ssh}} ->
- retry_fun(User, Address, Reason, Opts),
- send_msg(Reply, State),
- {next_state, userauth, next_packet(State#state{ssh_params = Ssh})}
+
+%%% ######## {userauth, client|server} ####
+
+%%---- userauth request to server
+handle_event(_,
+ Msg = #ssh_msg_userauth_request{service = ServiceName, method = Method},
+ StateName = {userauth,server},
+ D = #data{ssh_params=Ssh0}) ->
+
+ case {ServiceName, Ssh0#ssh.service, Method} of
+ {"ssh-connection", "ssh-connection", "none"} ->
+ %% Probably the very first userauth_request but we deny unauthorized login
+ {not_authorized, _, {Reply,Ssh}} =
+ ssh_auth:handle_userauth_request(Msg, Ssh0#ssh.session_id, Ssh0),
+ ok = send_bytes(Reply, D),
+ {keep_state, D#data{ssh_params = Ssh}};
+
+ {"ssh-connection", "ssh-connection", Method} ->
+ %% Userauth request with a method like "password" or so
+ case lists:member(Method, Ssh0#ssh.userauth_methods) of
+ true ->
+ %% Yepp! we support this method
+ case ssh_auth:handle_userauth_request(Msg, Ssh0#ssh.session_id, Ssh0) of
+ {authorized, User, {Reply, Ssh}} ->
+ ok = send_bytes(Reply, D),
+ D#data.starter ! ssh_connected,
+ connected_fun(User, Method, D),
+ {next_state, {connected,server},
+ D#data{auth_user = User,
+ ssh_params = Ssh#ssh{authenticated = true}}};
+ {not_authorized, {User, Reason}, {Reply, Ssh}} when Method == "keyboard-interactive" ->
+ retry_fun(User, Reason, D),
+ ok = send_bytes(Reply, D),
+ {next_state, {userauth_keyboard_interactive,server}, D#data{ssh_params = Ssh}};
+ {not_authorized, {User, Reason}, {Reply, Ssh}} ->
+ retry_fun(User, Reason, D),
+ ok = send_bytes(Reply, D),
+ {keep_state, D#data{ssh_params = Ssh}}
+ end;
+ false ->
+ %% No we do not support this method (=/= none)
+ %% At least one non-erlang client does like this. Retry as the next event
+ {keep_state_and_data,
+ [{next_event, internal, Msg#ssh_msg_userauth_request{method="none"}}]
+ }
end;
- false ->
- userauth(Msg#ssh_msg_userauth_request{method="none"}, State)
+
+ %% {"ssh-connection", Expected, Method} when Expected =/= ServiceName -> Do what?
+ %% {ServiceName, Expected, Method} when Expected =/= ServiceName -> Do what?
+
+ {ServiceName, _, _} when ServiceName =/= "ssh-connection" ->
+ disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
+ description = "Unknown service"},
+ StateName, D)
end;
-userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client} = Ssh,
- starter = Pid} = State) ->
- Pid ! ssh_connected,
- {next_state, connected, next_packet(State#state{ssh_params =
- Ssh#ssh{authenticated = true}})};
-userauth(#ssh_msg_userauth_failure{},
- #state{ssh_params = #ssh{role = client,
- userauth_methods = []}}
- = State) ->
- Msg = #ssh_msg_disconnect{code =
- ?SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE,
+%%---- userauth success to client
+handle_event(_, #ssh_msg_userauth_success{}, {userauth,client}, D=#data{ssh_params = Ssh}) ->
+ D#data.starter ! ssh_connected,
+ {next_state, {connected,client}, D#data{ssh_params=Ssh#ssh{authenticated = true}}};
+
+
+%%---- userauth failure response to client
+handle_event(_, #ssh_msg_userauth_failure{}, {userauth,client}=StateName,
+ D = #data{ssh_params = #ssh{userauth_methods = []}}) ->
+ Msg = #ssh_msg_disconnect{code = ?SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE,
description = "Unable to connect using the available"
- " authentication methods",
- language = "en"},
- handle_disconnect(Msg, State);
-
-%% Server tells us which authentication methods that are allowed
-userauth(#ssh_msg_userauth_failure{authentications = Methodes},
- #state{ssh_params = #ssh{role = client,
- userauth_methods = none} = Ssh0} = State) ->
- AuthMethods = string:tokens(Methodes, ","),
- Ssh1 = Ssh0#ssh{userauth_methods = AuthMethods},
+ " authentication methods"},
+ disconnect(Msg, StateName, D);
+
+handle_event(_, #ssh_msg_userauth_failure{authentications = Methods}, StateName={userauth,client},
+ D = #data{ssh_params = Ssh0}) ->
+ %% The prefered authentication method failed try next method
+ Ssh1 = case Ssh0#ssh.userauth_methods of
+ none ->
+ %% Server tells us which authentication methods that are allowed
+ Ssh0#ssh{userauth_methods = string:tokens(Methods, ",")};
+ _ ->
+ %% We already know...
+ Ssh0
+ end,
case ssh_auth:userauth_request_msg(Ssh1) of
{disconnect, DisconnectMsg, {Msg, Ssh}} ->
- send_msg(Msg, State),
- handle_disconnect(DisconnectMsg, State#state{ssh_params = Ssh});
+ send_bytes(Msg, D),
+ disconnect(DisconnectMsg, StateName, D#data{ssh_params = Ssh});
{"keyboard-interactive", {Msg, Ssh}} ->
- send_msg(Msg, State),
- {next_state, userauth_keyboard_interactive, next_packet(State#state{ssh_params = Ssh})};
+ send_bytes(Msg, D),
+ {next_state, {userauth_keyboard_interactive,client}, D#data{ssh_params = Ssh}};
{_Method, {Msg, Ssh}} ->
- send_msg(Msg, State),
- {next_state, userauth, next_packet(State#state{ssh_params = Ssh})}
+ send_bytes(Msg, D),
+ {keep_state, D#data{ssh_params = Ssh}}
end;
-%% The prefered authentication method failed try next method
-userauth(#ssh_msg_userauth_failure{},
- #state{ssh_params = #ssh{role = client} = Ssh0} = State) ->
- case ssh_auth:userauth_request_msg(Ssh0) of
- {disconnect, DisconnectMsg,{Msg, Ssh}} ->
- send_msg(Msg, State),
- handle_disconnect(DisconnectMsg, State#state{ssh_params = Ssh});
- {"keyboard-interactive", {Msg, Ssh}} ->
- send_msg(Msg, State),
- {next_state, userauth_keyboard_interactive, next_packet(State#state{ssh_params = Ssh})};
- {_Method, {Msg, Ssh}} ->
- send_msg(Msg, State),
- {next_state, userauth, next_packet(State#state{ssh_params = Ssh})}
- end;
-
-userauth(#ssh_msg_userauth_banner{},
- #state{ssh_params = #ssh{userauth_quiet_mode = true,
- role = client}} = State) ->
- {next_state, userauth, next_packet(State)};
-userauth(#ssh_msg_userauth_banner{message = Msg},
- #state{ssh_params =
- #ssh{userauth_quiet_mode = false, role = client}} = State) ->
- io:format("~s", [Msg]),
- {next_state, userauth, next_packet(State)}.
+%%---- banner to client
+handle_event(_, #ssh_msg_userauth_banner{message = Msg}, {userauth,client}, D) ->
+ case D#data.ssh_params#ssh.userauth_quiet_mode of
+ false -> io:format("~s", [Msg]);
+ true -> ok
+ end,
+ keep_state_and_data;
+%%% ######## {userauth_keyboard_interactive, client|server}
-userauth_keyboard_interactive(#ssh_msg_userauth_info_request{} = Msg,
- #state{ssh_params = #ssh{role = client} = Ssh0} = State) ->
+handle_event(_, #ssh_msg_userauth_info_request{} = Msg, {userauth_keyboard_interactive, client},
+ #data{ssh_params = Ssh0} = D) ->
case ssh_auth:handle_userauth_info_request(Msg, Ssh0) of
{ok, {Reply, Ssh}} ->
- send_msg(Reply, State),
- {next_state, userauth_keyboard_interactive_info_response, next_packet(State#state{ssh_params = Ssh})};
+ send_bytes(Reply, D),
+ {next_state, {userauth_keyboard_interactive_info_response,client}, D#data{ssh_params = Ssh}};
not_ok ->
- userauth(Msg, State)
+ {next_state, {userauth,client}, D, [{next_event, internal, Msg}]}
end;
-userauth_keyboard_interactive(#ssh_msg_userauth_info_response{} = Msg,
- #state{ssh_params = #ssh{role = server,
- peer = {_, Address}} = Ssh0,
- opts = Opts, starter = Pid} = State) ->
- case ssh_auth:handle_userauth_info_response(Msg, Ssh0) of
+handle_event(_, #ssh_msg_userauth_info_response{} = Msg, {userauth_keyboard_interactive, server}, D) ->
+ case ssh_auth:handle_userauth_info_response(Msg, D#data.ssh_params) of
{authorized, User, {Reply, Ssh}} ->
- send_msg(Reply, State),
- Pid ! ssh_connected,
- connected_fun(User, Address, "keyboard-interactive", Opts),
- {next_state, connected,
- next_packet(State#state{auth_user = User, ssh_params = Ssh#ssh{authenticated = true}})};
+ send_bytes(Reply, D),
+ D#data.starter ! ssh_connected,
+ connected_fun(User, "keyboard-interactive", D),
+ {next_state, {connected,server}, D#data{auth_user = User,
+ ssh_params = Ssh#ssh{authenticated = true}}};
{not_authorized, {User, Reason}, {Reply, Ssh}} ->
- retry_fun(User, Address, Reason, Opts),
- send_msg(Reply, State),
- {next_state, userauth, next_packet(State#state{ssh_params = Ssh})}
+ retry_fun(User, Reason, D),
+ send_bytes(Reply, D),
+ {next_state, {userauth,server}, D#data{ssh_params = Ssh}}
end;
-userauth_keyboard_interactive(Msg = #ssh_msg_userauth_failure{},
- #state{ssh_params = Ssh0 =
- #ssh{role = client,
- userauth_preference = Prefs0}}
- = State) ->
- Prefs = [{Method,M,F,A} || {Method,M,F,A} <- Prefs0,
+
+handle_event(_, Msg = #ssh_msg_userauth_failure{}, {userauth_keyboard_interactive, client},
+ #data{ssh_params = Ssh0} = D0) ->
+ Prefs = [{Method,M,F,A} || {Method,M,F,A} <- Ssh0#ssh.userauth_preference,
Method =/= "keyboard-interactive"],
- userauth(Msg, State#state{ssh_params = Ssh0#ssh{userauth_preference=Prefs}}).
+ D = D0#data{ssh_params = Ssh0#ssh{userauth_preference=Prefs}},
+ {next_state, {userauth,client}, D, [{next_event, internal, Msg}]};
+handle_event(_, Msg=#ssh_msg_userauth_failure{}, {userauth_keyboard_interactive_info_response, client},
+ #data{ssh_params = Ssh0} = D0) ->
+ Opts = Ssh0#ssh.opts,
+ D = case proplists:get_value(password, Opts) of
+ undefined ->
+ D0;
+ _ ->
+ D0#data{ssh_params =
+ Ssh0#ssh{opts =
+ lists:keyreplace(password,1,Opts,
+ {password,not_ok})}} % FIXME:intermodule dependency
+ end,
+ {next_state, {userauth,client}, D, [{next_event, internal, Msg}]};
+handle_event(_, Msg=#ssh_msg_userauth_success{}, {userauth_keyboard_interactive_info_response, client}, D) ->
+ {next_state, {userauth,client}, D, [{next_event, internal, Msg}]};
-userauth_keyboard_interactive_info_response(Msg=#ssh_msg_userauth_failure{},
- #state{ssh_params = #ssh{role = client,
- opts = Opts} = Ssh0} = State0) ->
+handle_event(_, Msg=#ssh_msg_userauth_info_request{}, {userauth_keyboard_interactive_info_response, client}, D) ->
+ {next_state, {userauth_keyboard_interactive,client}, D, [{next_event, internal, Msg}]};
- State = case proplists:get_value(password, Opts) of
- undefined ->
- State0;
- _ ->
- State0#state{ssh_params =
- Ssh0#ssh{opts =
- lists:keyreplace(password,1,Opts,
- {password,not_ok})}}
- end,
- userauth(Msg, State);
-userauth_keyboard_interactive_info_response(Msg=#ssh_msg_userauth_success{},
- #state{ssh_params = #ssh{role = client}} = State) ->
- userauth(Msg, State);
-userauth_keyboard_interactive_info_response(Msg=#ssh_msg_userauth_info_request{},
- #state{ssh_params = #ssh{role = client}} = State) ->
- userauth_keyboard_interactive(Msg, State).
-%%--------------------------------------------------------------------
--spec connected({#ssh_msg_kexinit{}, binary()}, %%| %% #ssh_msg_kexdh_init{},
- #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
-connected({#ssh_msg_kexinit{}, _Payload} = Event, #state{ssh_params = Ssh0} = State0) ->
- {KeyInitMsg, SshPacket, Ssh} = ssh_transport:key_exchange_init_msg(Ssh0),
- State = State0#state{ssh_params = Ssh,
- key_exchange_init_msg = KeyInitMsg,
- renegotiate = true},
- send_msg(SshPacket, State),
- kexinit(Event, State).
+%%% ######## {connected, client|server} ####
-%%--------------------------------------------------------------------
--spec handle_event(#ssh_msg_disconnect{} | #ssh_msg_ignore{} | #ssh_msg_debug{} |
- #ssh_msg_unimplemented{} | {adjust_window, integer(), integer()} |
- {reply_request, success | failure, integer()} | renegotiate |
- data_size | {request, pid(), integer(), integer(), iolist()} |
- {request, integer(), integer(), iolist()}, state_name(),
- #state{}) -> gen_fsm_state_return().
+handle_event(_, {#ssh_msg_kexinit{},_} = Event, {connected,Role}, D0) ->
+ {KeyInitMsg, SshPacket, Ssh} = ssh_transport:key_exchange_init_msg(D0#data.ssh_params),
+ D = D0#data{ssh_params = Ssh,
+ key_exchange_init_msg = KeyInitMsg},
+ send_bytes(SshPacket, D),
+ {next_state, {kexinit,Role,renegotiate}, D, [{next_event, internal, Event}]};
-%%--------------------------------------------------------------------
-handle_event(#ssh_msg_disconnect{description = Desc} = DisconnectMsg, _StateName, #state{} = State) ->
- handle_disconnect(peer, DisconnectMsg, State),
- {stop, {shutdown, Desc}, State};
-
-handle_event(#ssh_msg_ignore{}, StateName, State) ->
- {next_state, StateName, next_packet(State)};
-
-handle_event(#ssh_msg_debug{always_display = Display, message = DbgMsg, language=Lang},
- StateName, #state{opts = Opts} = State) ->
- F = proplists:get_value(ssh_msg_debug_fun, Opts,
- fun(_ConnRef, _AlwaysDisplay, _Msg, _Language) -> ok end
- ),
- catch F(self(), Display, DbgMsg, Lang),
- {next_state, StateName, next_packet(State)};
-
-handle_event(#ssh_msg_unimplemented{}, StateName, State) ->
- {next_state, StateName, next_packet(State)};
-
-handle_event(renegotiate, connected, #state{ssh_params = Ssh0}
- = State) ->
- {KeyInitMsg, SshPacket, Ssh} = ssh_transport:key_exchange_init_msg(Ssh0),
- send_msg(SshPacket, State),
- timer:apply_after(?REKEY_TIMOUT, gen_fsm, send_all_state_event, [self(), renegotiate]),
- {next_state, kexinit,
- next_packet(State#state{ssh_params = Ssh,
- key_exchange_init_msg = KeyInitMsg,
- renegotiate = true})};
-
-handle_event(renegotiate, StateName, State) ->
+handle_event(_, #ssh_msg_disconnect{description=Desc} = Msg, StateName, D0) ->
+ {disconnect, _, {{replies,Replies}, _}} =
+ ssh_connection:handle_msg(Msg, D0#data.connection_state, role(StateName)),
+ {Actions,D} = send_replies(Replies, D0),
+ disconnect_fun(Desc, D),
+ {stop_and_reply, {shutdown,Desc}, Actions, D};
+
+handle_event(_, #ssh_msg_ignore{}, _, _) ->
+ keep_state_and_data;
+
+handle_event(_, #ssh_msg_unimplemented{}, _, _) ->
+ keep_state_and_data;
+
+handle_event(_, #ssh_msg_debug{} = Msg, _, D) ->
+ debug_fun(Msg, D),
+ keep_state_and_data;
+
+handle_event(internal, Msg=#ssh_msg_global_request{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_request_success{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_request_failure{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_open{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_open_confirmation{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_open_failure{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_window_adjust{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_data{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_extended_data{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_eof{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_close{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_request{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_success{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+handle_event(internal, Msg=#ssh_msg_channel_failure{}, StateName, D) ->
+ handle_connection_msg(Msg, StateName, D);
+
+
+handle_event(cast, renegotiate, {connected,Role}, D) ->
+ {KeyInitMsg, SshPacket, Ssh} = ssh_transport:key_exchange_init_msg(D#data.ssh_params),
+ send_bytes(SshPacket, D),
+ timer:apply_after(?REKEY_TIMOUT, gen_statem, cast, [self(), renegotiate]),
+ {next_state, {kexinit,Role,renegotiate}, D#data{ssh_params = Ssh,
+ key_exchange_init_msg = KeyInitMsg}};
+
+handle_event(cast, renegotiate, _, _) ->
%% Already in key-exchange so safe to ignore
- {next_state, StateName, State};
+ timer:apply_after(?REKEY_TIMOUT, gen_statem, cast, [self(), renegotiate]), % FIXME: not here in original
+ keep_state_and_data;
+
%% Rekey due to sent data limit reached?
-handle_event(data_size, connected, #state{ssh_params = Ssh0} = State) ->
- {ok, [{send_oct,Sent0}]} = inet:getstat(State#state.socket, [send_oct]),
- Sent = Sent0 - State#state.last_size_rekey,
- MaxSent = proplists:get_value(rekey_limit, State#state.opts, 1024000000),
- timer:apply_after(?REKEY_DATA_TIMOUT, gen_fsm, send_all_state_event, [self(), data_size]),
+handle_event(cast, data_size, {connected,Role}, D) ->
+ {ok, [{send_oct,Sent0}]} = inet:getstat(D#data.socket, [send_oct]),
+ Sent = Sent0 - D#data.last_size_rekey,
+ MaxSent = proplists:get_value(rekey_limit, D#data.opts, 1024000000),
+ timer:apply_after(?REKEY_DATA_TIMOUT, gen_statem, cast, [self(), data_size]),
case Sent >= MaxSent of
true ->
- {KeyInitMsg, SshPacket, Ssh} = ssh_transport:key_exchange_init_msg(Ssh0),
- send_msg(SshPacket, State),
- {next_state, kexinit,
- next_packet(State#state{ssh_params = Ssh,
- key_exchange_init_msg = KeyInitMsg,
- renegotiate = true,
- last_size_rekey = Sent0})};
+ {KeyInitMsg, SshPacket, Ssh} =
+ ssh_transport:key_exchange_init_msg(D#data.ssh_params),
+ send_bytes(SshPacket, D),
+ {next_state, {kexinit,Role,renegotiate}, D#data{ssh_params = Ssh,
+ key_exchange_init_msg = KeyInitMsg,
+ last_size_rekey = Sent0}};
_ ->
- {next_state, connected, next_packet(State)}
+ keep_state_and_data
end;
-handle_event(data_size, StateName, State) ->
+
+handle_event(cast, data_size, _, _) ->
%% Already in key-exchange so safe to ignore
- {next_state, StateName, State};
-
-handle_event(Event, StateName, State) when StateName /= connected ->
- Events = [{event, Event} | State#state.event_queue],
- {next_state, StateName, State#state{event_queue = Events}};
-
-handle_event({adjust_window, ChannelId, Bytes}, StateName,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State0) ->
- State =
- case ssh_channel:cache_lookup(Cache, ChannelId) of
- #channel{recv_window_size = WinSize,
- recv_window_pending = Pending,
- recv_packet_size = PktSize} = Channel
- when (WinSize-Bytes) >= 2*PktSize ->
- %% The peer can send at least two more *full* packet, no hurry.
- ssh_channel:cache_update(Cache,
- Channel#channel{recv_window_pending = Pending + Bytes}),
- State0;
-
- #channel{recv_window_size = WinSize,
- recv_window_pending = Pending,
- remote_id = Id} = Channel ->
- %% Now we have to update the window - we can't receive so many more pkts
- ssh_channel:cache_update(Cache,
- Channel#channel{recv_window_size =
- WinSize + Bytes + Pending,
- recv_window_pending = 0}),
- Msg = ssh_connection:channel_adjust_window_msg(Id, Bytes + Pending),
- send_replies([{connection_reply, Msg}], State0);
+ timer:apply_after(?REKEY_DATA_TIMOUT, gen_statem, cast, [self(), data_size]), % FIXME: not here in original
+ keep_state_and_data;
+
+
+
+handle_event(cast, _, StateName, _) when StateName /= {connected,server},
+ StateName /= {connected,client} ->
+ {keep_state_and_data, [postpone]};
+
+
+handle_event(cast, {adjust_window,ChannelId,Bytes}, {connected,_}, D) ->
+ case ssh_channel:cache_lookup(cache(D), ChannelId) of
+ #channel{recv_window_size = WinSize,
+ recv_window_pending = Pending,
+ recv_packet_size = PktSize} = Channel
+ when (WinSize-Bytes) >= 2*PktSize ->
+ %% The peer can send at least two more *full* packet, no hurry.
+ ssh_channel:cache_update(cache(D),
+ Channel#channel{recv_window_pending = Pending + Bytes}),
+ keep_state_and_data;
+
+ #channel{recv_window_size = WinSize,
+ recv_window_pending = Pending,
+ remote_id = Id} = Channel ->
+ %% Now we have to update the window - we can't receive so many more pkts
+ ssh_channel:cache_update(cache(D),
+ Channel#channel{recv_window_size =
+ WinSize + Bytes + Pending,
+ recv_window_pending = 0}),
+ Msg = ssh_connection:channel_adjust_window_msg(Id, Bytes + Pending),
+ {keep_state, send_msg(Msg,D)};
- undefined ->
- State0
- end,
- {next_state, StateName, next_packet(State)};
-
-handle_event({reply_request, success, ChannelId}, StateName,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State0) ->
- State = case ssh_channel:cache_lookup(Cache, ChannelId) of
- #channel{remote_id = RemoteId} ->
- Msg = ssh_connection:channel_success_msg(RemoteId),
- send_replies([{connection_reply, Msg}], State0);
- undefined ->
- State0
- end,
- {next_state, StateName, State};
-
-handle_event({request, ChannelPid, ChannelId, Type, Data}, StateName, State0) ->
- {{replies, Replies}, State1} = handle_request(ChannelPid, ChannelId,
- Type, Data,
- false, none, State0),
- State = send_replies(Replies, State1),
- {next_state, StateName, next_packet(State)};
-
-handle_event({request, ChannelId, Type, Data}, StateName, State0) ->
- {{replies, Replies}, State1} = handle_request(ChannelId, Type, Data,
- false, none, State0),
- State = send_replies(Replies, State1),
- {next_state, StateName, next_packet(State)};
-
-handle_event({unknown, Data}, StateName, State) ->
+ undefined ->
+ keep_state_and_data
+ end;
+
+handle_event(cast, {reply_request,success,ChannelId}, {connected,_}, D) ->
+ case ssh_channel:cache_lookup(cache(D), ChannelId) of
+ #channel{remote_id = RemoteId} ->
+ Msg = ssh_connection:channel_success_msg(RemoteId),
+ {keep_state, send_msg(Msg,D)};
+
+ undefined ->
+ keep_state_and_data
+ end;
+
+handle_event(cast, {request,ChannelPid, ChannelId, Type, Data}, {connected,_}, D) ->
+ {keep_state, handle_request(ChannelPid, ChannelId, Type, Data, false, none, D)};
+
+handle_event(cast, {request,ChannelId,Type,Data}, {connected,_}, D) ->
+ {keep_state, handle_request(ChannelId, Type, Data, false, none, D)};
+
+handle_event(cast, {unknown,Data}, {connected,_}, D) ->
Msg = #ssh_msg_unimplemented{sequence = Data},
- send_msg(Msg, State),
- {next_state, StateName, next_packet(State)}.
+ {keep_state, send_msg(Msg,D)};
-%%--------------------------------------------------------------------
--spec handle_sync_event({request, pid(), channel_id(), integer(), binary(), timeout()} |
- {request, channel_id(), integer(), binary(), timeout()} |
- {global_request, pid(), integer(), boolean(), binary()} | {eof, integer()} |
- {open, pid(), integer(), channel_id(), integer(), binary(), _} |
- {send_window, channel_id()} | {recv_window, channel_id()} |
- {connection_info, [client_version | server_version | peer |
- sockname]} | {channel_info, channel_id(), [recv_window |
- send_window]} |
- {close, channel_id()} | stop, term(), state_name(), #state{})
- -> gen_fsm_sync_return().
-%%--------------------------------------------------------------------
-handle_sync_event(get_print_info, _From, StateName, State) ->
+%%% Previously handle_sync_event began here
+handle_event({call,From}, get_print_info, StateName, D) ->
Reply =
try
- {inet:sockname(State#state.socket),
- inet:peername(State#state.socket)
+ {inet:sockname(D#data.socket),
+ inet:peername(D#data.socket)
}
of
- {{ok,Local}, {ok,Remote}} -> {{Local,Remote},io_lib:format("statename=~p",[StateName])};
- _ -> {{"-",0},"-"}
+ {{ok,Local}, {ok,Remote}} ->
+ {{Local,Remote},io_lib:format("statename=~p",[StateName])};
+ _ ->
+ {{"-",0},"-"}
catch
- _:_ -> {{"?",0},"?"}
+ _:_ ->
+ {{"?",0},"?"}
end,
- {reply, Reply, StateName, State};
-
-handle_sync_event({connection_info, Options}, _From, StateName, State) ->
- Info = ssh_info(Options, State, []),
- {reply, Info, StateName, State};
-
-handle_sync_event({channel_info, ChannelId, Options}, _From, StateName,
- #state{connection_state = #connection{channel_cache = Cache}} = State) ->
- case ssh_channel:cache_lookup(Cache, ChannelId) of
- #channel{} = Channel ->
- Info = ssh_channel_info(Options, Channel, []),
- {reply, Info, StateName, State};
+ {keep_state_and_data, [{reply,From,Reply}]};
+
+handle_event({call,From}, {connection_info, Options}, _, D) ->
+ Info = fold_keys(Options, fun conn_info/2, D),
+ {keep_state_and_data, [{reply,From,Info}]};
+
+handle_event({call,From}, {channel_info,ChannelId,Options}, _, D) ->
+ case ssh_channel:cache_lookup(cache(D), ChannelId) of
+ #channel{} = Channel ->
+ Info = fold_keys(Options, fun chann_info/2, Channel),
+ {keep_state_and_data, [{reply,From,Info}]};
undefined ->
- {reply, [], StateName, State}
+ {keep_state_and_data, [{reply,From,[]}]}
end;
-handle_sync_event({info, ChannelPid}, _From, StateName,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State) ->
+
+handle_event({call,From}, {info, all}, _, D) ->
+ Result = ssh_channel:cache_foldl(fun(Channel, Acc) ->
+ [Channel | Acc]
+ end,
+ [], cache(D)),
+ {keep_state_and_data, [{reply, From, {ok,Result}}]};
+
+handle_event({call,From}, {info, ChannelPid}, _, D) ->
Result = ssh_channel:cache_foldl(
- fun(Channel, Acc) when ChannelPid == all;
- Channel#channel.user == ChannelPid ->
+ fun(Channel, Acc) when Channel#channel.user == ChannelPid ->
[Channel | Acc];
(_, Acc) ->
Acc
- end, [], Cache),
- {reply, {ok, Result}, StateName, State};
+ end, [], cache(D)),
+ {keep_state_and_data, [{reply, From, {ok,Result}}]};
-handle_sync_event(stop, _, _StateName, #state{connection_state = Connection0,
- role = Role} = State0) ->
+handle_event({call,From}, stop, StateName, D0) ->
{disconnect, _Reason, {{replies, Replies}, Connection}} =
ssh_connection:handle_msg(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
- description = "User closed down connection",
- language = "en"}, Connection0, Role),
- State = send_replies(Replies, State0),
- {stop, normal, ok, State#state{connection_state = Connection}};
-
-
-handle_sync_event(Event, From, StateName, State) when StateName /= connected ->
- Events = [{sync, Event, From} | State#state.event_queue],
- {next_state, StateName, State#state{event_queue = Events}};
-
-handle_sync_event({request, ChannelPid, ChannelId, Type, Data, Timeout}, From, StateName, State0) ->
- {{replies, Replies}, State1} = handle_request(ChannelPid,
- ChannelId, Type, Data,
- true, From, State0),
- %% Note reply to channel will happen later when
- %% reply is recived from peer on the socket
- State = send_replies(Replies, State1),
- start_timeout(ChannelId, From, Timeout),
- handle_idle_timeout(State),
- {next_state, StateName, next_packet(State)};
-
-handle_sync_event({request, ChannelId, Type, Data, Timeout}, From, StateName, State0) ->
- {{replies, Replies}, State1} = handle_request(ChannelId, Type, Data,
- true, From, State0),
- %% Note reply to channel will happen later when
- %% reply is recived from peer on the socket
- State = send_replies(Replies, State1),
- start_timeout(ChannelId, From, Timeout),
- handle_idle_timeout(State),
- {next_state, StateName, next_packet(State)};
-
-handle_sync_event({global_request, Pid, _, _, _} = Request, From, StateName,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State0) ->
- State1 = handle_global_request(Request, State0),
- Channel = ssh_channel:cache_find(Pid, Cache),
- State = add_request(true, Channel#channel.local_id, From, State1),
- {next_state, StateName, next_packet(State)};
-
-handle_sync_event({data, ChannelId, Type, Data, Timeout}, From, StateName,
- #state{connection_state = #connection{channel_cache = _Cache}
- = Connection0} = State0) ->
-
- case ssh_connection:channel_data(ChannelId, Type, Data, Connection0, From) of
- {{replies, Replies}, Connection} ->
- State = send_replies(Replies, State0#state{connection_state = Connection}),
- start_timeout(ChannelId, From, Timeout),
- {next_state, StateName, next_packet(State)};
- {noreply, Connection} ->
- start_timeout(ChannelId, From, Timeout),
- {next_state, StateName, next_packet(State0#state{connection_state = Connection})}
- end;
-
-handle_sync_event({eof, ChannelId}, _From, StateName,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State0) ->
- case ssh_channel:cache_lookup(Cache, ChannelId) of
+ description = "User closed down connection"},
+ D0#data.connection_state,
+ role(StateName)),
+ {Repls,D} = send_replies(Replies, D0),
+ {stop_and_reply, normal, [{reply,From,ok}|Repls], D#data{connection_state=Connection}};
+
+handle_event({call,_}, _, StateName, _) when StateName /= {connected,server},
+ StateName /= {connected,client} ->
+ {keep_state_and_data, [postpone]};
+
+handle_event({call,From}, {request, ChannelPid, ChannelId, Type, Data, Timeout}, {connected,_}, D0) ->
+ D = handle_request(ChannelPid, ChannelId, Type, Data, true, From, D0),
+ %% Note reply to channel will happen later when reply is recived from peer on the socket
+ start_channel_request_timer(ChannelId, From, Timeout),
+ {keep_state, cache_request_idle_timer_check(D)};
+
+handle_event({call,From}, {request, ChannelId, Type, Data, Timeout}, {connected,_}, D0) ->
+ D = handle_request(ChannelId, Type, Data, true, From, D0),
+ %% Note reply to channel will happen later when reply is recived from peer on the socket
+ start_channel_request_timer(ChannelId, From, Timeout),
+ {keep_state, cache_request_idle_timer_check(D)};
+
+handle_event({call,From}, {data, ChannelId, Type, Data, Timeout}, {connected,_}, D0) ->
+ {{replies, Replies}, Connection} =
+ ssh_connection:channel_data(ChannelId, Type, Data, D0#data.connection_state, From),
+ {Repls,D} = send_replies(Replies, D0#data{connection_state = Connection}),
+ start_channel_request_timer(ChannelId, From, Timeout), % FIXME: No message exchange so why?
+ {keep_state, D, Repls};
+
+handle_event({call,From}, {eof, ChannelId}, {connected,_}, D0) ->
+ case ssh_channel:cache_lookup(cache(D0), ChannelId) of
#channel{remote_id = Id, sent_close = false} ->
- State = send_replies([{connection_reply,
- ssh_connection:channel_eof_msg(Id)}], State0),
- {reply, ok, StateName, next_packet(State)};
+ D = send_msg(ssh_connection:channel_eof_msg(Id), D0),
+ {keep_state, D, [{reply,From,ok}]};
_ ->
- {reply, {error,closed}, StateName, State0}
+ {keep_state, D0, [{reply,From,{error,closed}}]}
end;
-handle_sync_event({open, ChannelPid, Type, InitialWindowSize, MaxPacketSize, Data, Timeout},
- From, StateName, #state{connection_state =
- #connection{channel_cache = Cache}} = State0) ->
+handle_event({call,From},
+ {open, ChannelPid, Type, InitialWindowSize, MaxPacketSize, Data, Timeout},
+ {connected,_},
+ D0) ->
erlang:monitor(process, ChannelPid),
- {ChannelId, State1} = new_channel_id(State0),
- Msg = ssh_connection:channel_open_msg(Type, ChannelId,
- InitialWindowSize,
- MaxPacketSize, Data),
- State2 = send_replies([{connection_reply, Msg}], State1),
- Channel = #channel{type = Type,
- sys = "none",
- user = ChannelPid,
- local_id = ChannelId,
- recv_window_size = InitialWindowSize,
- recv_packet_size = MaxPacketSize,
- send_buf = queue:new()
- },
- ssh_channel:cache_update(Cache, Channel),
- State = add_request(true, ChannelId, From, State2),
- start_timeout(ChannelId, From, Timeout),
- {next_state, StateName, next_packet(remove_timer_ref(State))};
-
-handle_sync_event({send_window, ChannelId}, _From, StateName,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State) ->
- Reply = case ssh_channel:cache_lookup(Cache, ChannelId) of
+ {ChannelId, D1} = new_channel_id(D0),
+ D2 = send_msg(ssh_connection:channel_open_msg(Type, ChannelId,
+ InitialWindowSize,
+ MaxPacketSize, Data),
+ D1),
+ ssh_channel:cache_update(cache(D2),
+ #channel{type = Type,
+ sys = "none",
+ user = ChannelPid,
+ local_id = ChannelId,
+ recv_window_size = InitialWindowSize,
+ recv_packet_size = MaxPacketSize,
+ send_buf = queue:new()
+ }),
+ D = add_request(true, ChannelId, From, D2),
+ start_channel_request_timer(ChannelId, From, Timeout),
+ {keep_state, cache_cancel_idle_timer(D)};
+
+handle_event({call,From}, {send_window, ChannelId}, {connected,_}, D) ->
+ Reply = case ssh_channel:cache_lookup(cache(D), ChannelId) of
#channel{send_window_size = WinSize,
send_packet_size = Packsize} ->
{ok, {WinSize, Packsize}};
undefined ->
{error, einval}
end,
- {reply, Reply, StateName, next_packet(State)};
-
-handle_sync_event({recv_window, ChannelId}, _From, StateName,
- #state{connection_state = #connection{channel_cache = Cache}}
- = State) ->
+ {keep_state_and_data, [{reply,From,Reply}]};
- Reply = case ssh_channel:cache_lookup(Cache, ChannelId) of
+handle_event({call,From}, {recv_window, ChannelId}, {connected,_}, D) ->
+ Reply = case ssh_channel:cache_lookup(cache(D), ChannelId) of
#channel{recv_window_size = WinSize,
recv_packet_size = Packsize} ->
{ok, {WinSize, Packsize}};
undefined ->
{error, einval}
end,
- {reply, Reply, StateName, next_packet(State)};
-
-handle_sync_event({close, ChannelId}, _, StateName,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State0) ->
- State =
- case ssh_channel:cache_lookup(Cache, ChannelId) of
- #channel{remote_id = Id} = Channel ->
- State1 = send_replies([{connection_reply,
- ssh_connection:channel_close_msg(Id)}], State0),
- ssh_channel:cache_update(Cache, Channel#channel{sent_close = true}),
- handle_idle_timeout(State1),
- State1;
- undefined ->
- State0
- end,
- {reply, ok, StateName, next_packet(State)}.
+ {keep_state_and_data, [{reply,From,Reply}]};
-%%--------------------------------------------------------------------
--spec handle_info({atom(), port(), binary()} | {atom(), port()} |
- term (), state_name(), #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
+handle_event({call,From}, {close, ChannelId}, {connected,_}, D0) ->
+ case ssh_channel:cache_lookup(cache(D0), ChannelId) of
+ #channel{remote_id = Id} = Channel ->
+ D1 = send_msg(ssh_connection:channel_close_msg(Id), D0),
+ ssh_channel:cache_update(cache(D1), Channel#channel{sent_close = true}),
+ {keep_state, cache_request_idle_timer_check(D1), [{reply,From,ok}]};
+ undefined ->
+ {keep_state_and_data, [{reply,From,ok}]}
+ end;
-handle_info({Protocol, Socket, "SSH-" ++ _ = Version}, hello,
- #state{socket = Socket,
- transport_protocol = Protocol} = State ) ->
- event({version_exchange, Version}, hello, State);
-
-handle_info({Protocol, Socket, Info}, hello,
- #state{socket = Socket,
- transport_protocol = Protocol} = State) ->
- event({info_line, Info}, hello, State);
-
-handle_info({Protocol, Socket, Data}, StateName,
- #state{socket = Socket,
- transport_protocol = Protocol,
- ssh_params = Ssh0,
- decoded_data_buffer = DecData0,
- encoded_data_buffer = EncData0,
- undecoded_packet_length = RemainingSshPacketLen0} = State0) ->
- Encoded = <<EncData0/binary, Data/binary>>,
- try ssh_transport:handle_packet_part(DecData0, Encoded, RemainingSshPacketLen0, Ssh0)
+
+%%===== Reception of encrypted bytes, decryption and framing
+handle_event(info, {Proto, Sock, Info}, {hello,_}, #data{socket = Sock,
+ transport_protocol = Proto}) ->
+ case Info of
+ "SSH-" ++ _ ->
+ {keep_state_and_data, [{next_event, internal, {version_exchange,Info}}]};
+ _ ->
+ {keep_state_and_data, [{next_event, internal, {info_line,Info}}]}
+ end;
+
+handle_event(info, {Proto, Sock, NewData}, StateName, D0 = #data{socket = Sock,
+ transport_protocol = Proto}) ->
+ try ssh_transport:handle_packet_part(
+ D0#data.decrypted_data_buffer,
+ <<(D0#data.encrypted_data_buffer)/binary, NewData/binary>>,
+ D0#data.undecrypted_packet_length,
+ D0#data.ssh_params)
of
- {get_more, DecBytes, EncDataRest, RemainingSshPacketLen, Ssh1} ->
- {next_state, StateName,
- next_packet(State0#state{encoded_data_buffer = EncDataRest,
- decoded_data_buffer = DecBytes,
- undecoded_packet_length = RemainingSshPacketLen,
- ssh_params = Ssh1})};
- {decoded, MsgBytes, EncDataRest, Ssh1} ->
- generate_event(MsgBytes, StateName,
- State0#state{ssh_params = Ssh1,
- %% Important to be set for
- %% next_packet
-%%% FIXME: the following three seem to always be set in generate_event!
- decoded_data_buffer = <<>>,
- undecoded_packet_length = undefined,
- encoded_data_buffer = EncDataRest},
- EncDataRest);
+ {packet_decrypted, DecryptedBytes, EncryptedDataRest, Ssh1} ->
+ D = D0#data{ssh_params =
+ Ssh1#ssh{recv_sequence = ssh_transport:next_seqnum(Ssh1#ssh.recv_sequence)},
+ decrypted_data_buffer = <<>>,
+ undecrypted_packet_length = undefined,
+ encrypted_data_buffer = EncryptedDataRest},
+ try
+ ssh_message:decode(set_kex_overload_prefix(DecryptedBytes,D))
+ of
+ Msg = #ssh_msg_kexinit{} ->
+ {keep_state, D, [{next_event, internal, {Msg,DecryptedBytes}},
+ {next_event, internal, prepare_next_packet}
+ ]};
+ Msg ->
+ {keep_state, D, [{next_event, internal, Msg},
+ {next_event, internal, prepare_next_packet}
+ ]}
+ catch
+ _C:_E ->
+ disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = "Encountered unexpected input"},
+ StateName, D)
+ end;
+
+ {get_more, DecryptedBytes, EncryptedDataRest, RemainingSshPacketLen, Ssh1} ->
+ %% Here we know that there are not enough bytes in
+ %% EncryptedDataRest to use. We must wait for more.
+ inet:setopts(Sock, [{active, once}]),
+ {keep_state, D0#data{encrypted_data_buffer = EncryptedDataRest,
+ decrypted_data_buffer = DecryptedBytes,
+ undecrypted_packet_length = RemainingSshPacketLen,
+ ssh_params = Ssh1}};
+
{bad_mac, Ssh1} ->
- DisconnectMsg =
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "Bad mac",
- language = ""},
- handle_disconnect(DisconnectMsg, State0#state{ssh_params=Ssh1});
+ disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = "Bad mac"},
+ StateName, D0#data{ssh_params=Ssh1});
{error, {exceeds_max_size,PacketLen}} ->
- DisconnectMsg =
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "Bad packet length "
- ++ integer_to_list(PacketLen),
- language = ""},
- handle_disconnect(DisconnectMsg, State0)
+ disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = "Bad packet length "
+ ++ integer_to_list(PacketLen)},
+ StateName, D0)
catch
- _:_ ->
- DisconnectMsg =
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "Bad packet",
- language = ""},
- handle_disconnect(DisconnectMsg, State0)
+ _C:_E ->
+ disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = "Bad packet"},
+ StateName, D0)
end;
-
-handle_info({CloseTag, _Socket}, _StateName,
- #state{transport_close_tag = CloseTag,
- ssh_params = #ssh{role = _Role, opts = _Opts}} = State) ->
- DisconnectMsg =
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
- description = "Connection closed",
- language = "en"},
- handle_disconnect(DisconnectMsg, State);
-
-handle_info({timeout, {_, From} = Request}, Statename,
- #state{connection_state = #connection{requests = Requests} = Connection} = State) ->
+
+
+%%%====
+handle_event(internal, prepare_next_packet, _, D) ->
+ Enough = erlang:max(8, D#data.ssh_params#ssh.decrypt_block_size),
+ case size(D#data.encrypted_data_buffer) of
+ Sz when Sz >= Enough ->
+ self() ! {D#data.transport_protocol, D#data.socket, <<>>};
+ _ ->
+ ok
+ end,
+ inet:setopts(D#data.socket, [{active, once}]),
+ keep_state_and_data;
+
+handle_event(info, {CloseTag,Socket}, StateName,
+ D = #data{socket = Socket,
+ transport_close_tag = CloseTag}) ->
+ disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
+ description = "Connection closed"},
+ StateName, D);
+
+handle_event(info, {timeout, {_, From} = Request}, _,
+ #data{connection_state = #connection{requests = Requests} = C0} = D) ->
case lists:member(Request, Requests) of
true ->
- gen_fsm:reply(From, {error, timeout}),
- {next_state, Statename,
- State#state{connection_state =
- Connection#connection{requests =
- lists:delete(Request, Requests)}}};
+ %% A channel request is not answered in time. Answer {error,timeout}
+ %% to the caller
+ C = C0#connection{requests = lists:delete(Request, Requests)},
+ {keep_state, D#data{connection_state=C}, [{reply,From,{error,timeout}}]};
false ->
- {next_state, Statename, State}
+ %% The request is answered - just ignore the timeout
+ keep_state_and_data
end;
%%% Handle that ssh channels user process goes down
-handle_info({'DOWN', _Ref, process, ChannelPid, _Reason}, Statename, State0) ->
- {{replies, Replies}, State1} = handle_channel_down(ChannelPid, State0),
- State = send_replies(Replies, State1),
- {next_state, Statename, next_packet(State)};
+handle_event(info, {'DOWN', _Ref, process, ChannelPid, _Reason}, _, D0) ->
+ {{replies, Replies}, D1} = handle_channel_down(ChannelPid, D0),
+ {Repls, D} = send_replies(Replies, D1),
+ {keep_state, D, Repls};
%%% So that terminate will be run when supervisor is shutdown
-handle_info({'EXIT', _Sup, Reason}, _StateName, State) ->
- {stop, {shutdown, Reason}, State};
+handle_event(info, {'EXIT', _Sup, Reason}, _, _) ->
+ {stop, {shutdown, Reason}};
-handle_info({check_cache, _ , _},
- StateName, #state{connection_state =
- #connection{channel_cache = Cache}} = State) ->
- {next_state, StateName, check_cache(State, Cache)};
+handle_event(info, check_cache, _, D) ->
+ {keep_state, cache_check_set_idle_timer(D)};
-handle_info(UnexpectedMessage, StateName, #state{opts = Opts,
- ssh_params = SshParams} = State) ->
- case unexpected_fun(UnexpectedMessage, Opts, SshParams) of
+handle_event(info, UnexpectedMessage, StateName, D = #data{ssh_params = Ssh}) ->
+ case unexpected_fun(UnexpectedMessage, D) of
report ->
Msg = lists:flatten(
io_lib:format(
"Unexpected message '~p' received in state '~p'\n"
"Role: ~p\n"
"Peer: ~p\n"
- "Local Address: ~p\n", [UnexpectedMessage, StateName,
- SshParams#ssh.role, SshParams#ssh.peer,
- proplists:get_value(address, SshParams#ssh.opts)])),
- error_logger:info_report(Msg);
+ "Local Address: ~p\n", [UnexpectedMessage,
+ StateName,
+ Ssh#ssh.role,
+ Ssh#ssh.peer,
+ proplists:get_value(address, Ssh#ssh.opts)])),
+ error_logger:info_report(Msg),
+ keep_state_and_data;
skip ->
- ok;
+ keep_state_and_data;
Other ->
Msg = lists:flatten(
@@ -1117,200 +1290,179 @@ handle_info(UnexpectedMessage, StateName, #state{opts = Opts,
"Message: ~p\n"
"Role: ~p\n"
"Peer: ~p\n"
- "Local Address: ~p\n", [Other, UnexpectedMessage,
- SshParams#ssh.role,
- element(2,SshParams#ssh.peer),
- proplists:get_value(address, SshParams#ssh.opts)]
+ "Local Address: ~p\n", [Other,
+ UnexpectedMessage,
+ Ssh#ssh.role,
+ element(2,Ssh#ssh.peer),
+ proplists:get_value(address, Ssh#ssh.opts)]
)),
+ error_logger:error_report(Msg),
+ keep_state_and_data
+ end;
+
+handle_event(internal, {disconnect,Msg,_Reason}, StateName, D) ->
+ disconnect(Msg, StateName, D);
+
+handle_event(Type, Ev, StateName, D) ->
+ Descr =
+ case catch atom_to_list(element(1,Ev)) of
+ "ssh_msg_" ++_ when Type==internal ->
+ "Message in wrong state";
+ _ ->
+ "Internal error"
+ end,
+ disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = Descr},
+ StateName, D).
- error_logger:error_report(Msg)
- end,
- {next_state, StateName, State}.
%%--------------------------------------------------------------------
--spec terminate(Reason::term(), state_name(), #state{}) -> _.
-%%--------------------------------------------------------------------
-terminate(normal, _, #state{transport_cb = Transport,
- connection_state = Connection,
- socket = Socket}) ->
- terminate_subsystem(Connection),
- (catch Transport:close(Socket)),
- ok;
+-spec terminate(any(),
+ state_name(),
+ #data{}
+ ) -> finalize_termination_result() .
+
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+
+terminate(normal, StateName, State) ->
+ finalize_termination(StateName, State);
terminate({shutdown,{init,Reason}}, StateName, State) ->
error_logger:info_report(io_lib:format("Erlang ssh in connection handler init: ~p~n",[Reason])),
- terminate(normal, StateName, State);
-
-%% Terminated by supervisor
-terminate(shutdown, StateName, #state{ssh_params = Ssh0} = State) ->
- DisconnectMsg =
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
- description = "Application shutdown",
- language = "en"},
- {SshPacket, Ssh} = ssh_transport:ssh_packet(DisconnectMsg, Ssh0),
- send_msg(SshPacket, State),
- terminate(normal, StateName, State#state{ssh_params = Ssh});
-
-terminate({shutdown, #ssh_msg_disconnect{} = Msg}, StateName,
- #state{ssh_params = Ssh0} = State) ->
- {SshPacket, Ssh} = ssh_transport:ssh_packet(Msg, Ssh0),
- send_msg(SshPacket, State),
- terminate(normal, StateName, State#state{ssh_params = Ssh});
-
-terminate({shutdown, _}, StateName, State) ->
- terminate(normal, StateName, State);
-
-terminate(Reason, StateName, #state{ssh_params = Ssh0, starter = _Pid,
- connection_state = Connection} = State) ->
- terminate_subsystem(Connection),
- log_error(Reason),
- DisconnectMsg =
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
- description = "Internal error",
- language = "en"},
- {SshPacket, Ssh} = ssh_transport:ssh_packet(DisconnectMsg, Ssh0),
- send_msg(SshPacket, State),
- terminate(normal, StateName, State#state{ssh_params = Ssh}).
-
-
-terminate_subsystem(#connection{system_supervisor = SysSup,
- sub_system_supervisor = SubSysSup}) when is_pid(SubSysSup) ->
- ssh_system_sup:stop_subsystem(SysSup, SubSysSup);
-terminate_subsystem(_) ->
- ok.
+ finalize_termination(StateName, State);
+
+terminate(shutdown, StateName, State0) ->
+ %% Terminated by supervisor
+ State = send_msg(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
+ description = "Application shutdown"},
+ State0),
+ finalize_termination(StateName, State);
-format_status(normal, [_, State]) ->
- [{data, [{"StateData", State}]}];
-format_status(terminate, [_, State]) ->
- SshParams0 = (State#state.ssh_params),
- SshParams = SshParams0#ssh{c_keyinit = "***",
- s_keyinit = "***",
- send_mac_key = "***",
- send_mac_size = "***",
- recv_mac_key = "***",
- recv_mac_size = "***",
- encrypt_keys = "***",
- encrypt_ctx = "***",
- decrypt_keys = "***",
- decrypt_ctx = "***",
- compress_ctx = "***",
- decompress_ctx = "***",
- shared_secret = "***",
- exchanged_hash = "***",
- session_id = "***",
- keyex_key = "***",
- keyex_info = "***",
- available_host_keys = "***"},
- [{data, [{"StateData", State#state{decoded_data_buffer = "***",
- encoded_data_buffer = "***",
- key_exchange_init_msg = "***",
- opts = "***",
- recbuf = "***",
- ssh_params = SshParams
- }}]}].
+%% terminate({shutdown,Msg}, StateName, State0) when is_record(Msg,ssh_msg_disconnect)->
+%% State = send_msg(Msg, State0),
+%% finalize_termination(StateName, Msg, State);
+
+terminate({shutdown,_R}, StateName, State) ->
+ finalize_termination(StateName, State);
+
+terminate(Reason, StateName, State0) ->
+ %% Others, e.g undef, {badmatch,_}
+ log_error(Reason),
+ State = send_msg(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
+ description = "Internal error"},
+ State0),
+ finalize_termination(StateName, State).
%%--------------------------------------------------------------------
--spec code_change(OldVsn::term(), state_name(), Oldstate::term(), Extra::term()) ->
- {ok, state_name(), #state{}}.
+
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+
+format_status(normal, [_, _StateName, D]) ->
+ [{data, [{"State", D}]}];
+format_status(terminate, [_, _StateName, D]) ->
+ DataPropList0 = fmt_stat_rec(record_info(fields, data), D,
+ [decrypted_data_buffer,
+ encrypted_data_buffer,
+ key_exchange_init_msg,
+ user_passwords,
+ opts,
+ inet_initial_recbuf_size]),
+ SshPropList = fmt_stat_rec(record_info(fields, ssh), D#data.ssh_params,
+ [c_keyinit,
+ s_keyinit,
+ send_mac_key,
+ send_mac_size,
+ recv_mac_key,
+ recv_mac_size,
+ encrypt_keys,
+ encrypt_ctx,
+ decrypt_keys,
+ decrypt_ctx,
+ compress_ctx,
+ decompress_ctx,
+ shared_secret,
+ exchanged_hash,
+ session_id,
+ keyex_key,
+ keyex_info,
+ available_host_keys]),
+ DataPropList = lists:keyreplace(ssh_params, 1, DataPropList0,
+ {ssh_params,SshPropList}),
+ [{data, [{"State", DataPropList}]}].
+
+
+fmt_stat_rec(FieldNames, Rec, Exclude) ->
+ Values = tl(tuple_to_list(Rec)),
+ [P || {K,_} = P <- lists:zip(FieldNames, Values),
+ not lists:member(K, Exclude)].
+
%%--------------------------------------------------------------------
+-spec code_change(term() | {down,term()},
+ state_name(),
+ #data{},
+ term()
+ ) -> {gen_statem:callback_mode(), state_name(), #data{}}.
+
+%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+
code_change(_OldVsn, StateName, State, _Extra) ->
- {ok, StateName, State}.
+ {handle_event_function, StateName, State}.
+
+
+%%====================================================================
+%% Internal functions
+%%====================================================================
%%--------------------------------------------------------------------
-%%% Internal functions
-%%--------------------------------------------------------------------
-init_role(#state{role = client, opts = Opts} = State0) ->
- Pid = proplists:get_value(user_pid, Opts),
- TimerRef = get_idle_time(Opts),
- timer:apply_after(?REKEY_TIMOUT, gen_fsm, send_all_state_event, [self(), renegotiate]),
- timer:apply_after(?REKEY_DATA_TIMOUT, gen_fsm, send_all_state_event,
- [self(), data_size]),
- State0#state{starter = Pid,
- idle_timer_ref = TimerRef};
-init_role(#state{role = server, opts = Opts, connection_state = Connection} = State) ->
- Sups = proplists:get_value(supervisors, Opts),
- Pid = proplists:get_value(user_pid, Opts),
- SystemSup = proplists:get_value(system_sup, Sups),
- SubSystemSup = proplists:get_value(subsystem_sup, Sups),
+%% Starting
+
+start_the_connection_child(UserPid, Role, Socket, Options) ->
+ Sups = proplists:get_value(supervisors, Options),
ConnectionSup = proplists:get_value(connection_sup, Sups),
- Shell = proplists:get_value(shell, Opts),
- Exec = proplists:get_value(exec, Opts),
- CliSpec = proplists:get_value(ssh_cli, Opts, {ssh_cli, [Shell]}),
- State#state{starter = Pid, connection_state = Connection#connection{
- cli_spec = CliSpec,
- exec = Exec,
- system_supervisor = SystemSup,
- sub_system_supervisor = SubSystemSup,
- connection_supervisor = ConnectionSup
- }}.
-
-get_idle_time(SshOptions) ->
- case proplists:get_value(idle_time, SshOptions) of
- infinity ->
- infinity;
- _IdleTime -> %% We dont want to set the timeout on first connect
- undefined
- end.
+ Opts = [{supervisors, Sups}, {user_pid, UserPid} | proplists:get_value(ssh_opts, Options, [])],
+ {ok, Pid} = ssh_connection_sup:start_child(ConnectionSup, [Role, Socket, Opts]),
+ ok = socket_control(Socket, Pid, Options),
+ Pid.
-init_ssh(client = Role, Vsn, Version, Options, Socket) ->
- IOCb = case proplists:get_value(user_interaction, Options, true) of
- true ->
- ssh_io;
- false ->
- ssh_no_io
- end,
+%%--------------------------------------------------------------------
+%% Stopping
+-type finalize_termination_result() :: ok .
+
+finalize_termination(_StateName, #data{transport_cb = Transport,
+ connection_state = Connection,
+ socket = Socket}) ->
+ case Connection of
+ #connection{system_supervisor = SysSup,
+ sub_system_supervisor = SubSysSup} when is_pid(SubSysSup) ->
+ ssh_system_sup:stop_subsystem(SysSup, SubSysSup);
+ _ ->
+ do_nothing
+ end,
+ (catch Transport:close(Socket)),
+ ok.
- AuthMethods = proplists:get_value(auth_methods, Options,
- undefined),
- {ok, PeerAddr} = inet:peername(Socket),
-
- PeerName = proplists:get_value(host, Options),
- KeyCb = proplists:get_value(key_cb, Options, ssh_file),
-
- #ssh{role = Role,
- c_vsn = Vsn,
- c_version = Version,
- key_cb = KeyCb,
- io_cb = IOCb,
- userauth_quiet_mode = proplists:get_value(quiet_mode, Options, false),
- opts = Options,
- userauth_supported_methods = AuthMethods,
- peer = {PeerName, PeerAddr},
- available_host_keys = supported_host_keys(Role, KeyCb, Options),
- random_length_padding = proplists:get_value(max_random_length_padding,
- Options,
- (#ssh{})#ssh.random_length_padding)
- };
-
-init_ssh(server = Role, Vsn, Version, Options, Socket) ->
- AuthMethods = proplists:get_value(auth_methods, Options,
- ?SUPPORTED_AUTH_METHODS),
- AuthMethodsAsList = string:tokens(AuthMethods, ","),
- {ok, PeerAddr} = inet:peername(Socket),
- KeyCb = proplists:get_value(key_cb, Options, ssh_file),
-
- #ssh{role = Role,
- s_vsn = Vsn,
- s_version = Version,
- key_cb = KeyCb,
- io_cb = proplists:get_value(io_cb, Options, ssh_io),
- opts = Options,
- userauth_supported_methods = AuthMethods,
- userauth_methods = AuthMethodsAsList,
- kb_tries_left = 3,
- peer = {undefined, PeerAddr},
- available_host_keys = supported_host_keys(Role, KeyCb, Options),
- random_length_padding = proplists:get_value(max_random_length_padding,
- Options,
- (#ssh{})#ssh.random_length_padding)
- }.
+%%--------------------------------------------------------------------
+%% "Invert" the Role
+peer_role(client) -> server;
+peer_role(server) -> client.
+
+%%--------------------------------------------------------------------
+%% StateName to Role
+role({_,Role}) -> Role;
+role({_,Role,_}) -> Role.
+
+%%--------------------------------------------------------------------
+%% Check the StateName to see if we are in the renegotiation phase
+renegotiation({_,_,ReNeg}) -> ReNeg == renegotiation;
+renegotiation(_) -> false.
+%%--------------------------------------------------------------------
supported_host_keys(client, _, Options) ->
try
- case proplists:get_value(public_key,
+ case proplists:get_value(public_key,
proplists:get_value(preferred_algorithms,Options,[])
) of
- undefined ->
+ undefined ->
ssh_transport:default_algorithms(public_key);
L ->
L -- (L--ssh_transport:default_algorithms(public_key))
@@ -1325,7 +1477,7 @@ supported_host_keys(client, _, Options) ->
{stop, {shutdown, Reason}}
end;
supported_host_keys(server, KeyCb, Options) ->
- [atom_to_list(A) || A <- proplists:get_value(public_key,
+ [atom_to_list(A) || A <- proplists:get_value(public_key,
proplists:get_value(preferred_algorithms,Options,[]),
ssh_transport:default_algorithms(public_key)
),
@@ -1336,10 +1488,16 @@ supported_host_keys(server, KeyCb, Options) ->
available_host_key(KeyCb, Alg, Opts) ->
element(1, catch KeyCb:host_key(Alg, Opts)) == ok.
-send_msg(Msg, #state{socket = Socket, transport_cb = Transport}) ->
- Transport:send(Socket, Msg).
-handle_version({2, 0} = NumVsn, StrVsn, Ssh0) ->
+send_msg(Msg, State=#data{ssh_params=Ssh0}) when is_tuple(Msg) ->
+ {Bytes, Ssh} = ssh_transport:ssh_packet(Msg, Ssh0),
+ send_bytes(Bytes, State),
+ State#data{ssh_params=Ssh}.
+
+send_bytes(Bytes, #data{socket = Socket, transport_cb = Transport}) ->
+ Transport:send(Socket, Bytes).
+
+handle_version({2, 0} = NumVsn, StrVsn, Ssh0) ->
Ssh = counterpart_versions(NumVsn, StrVsn, Ssh0),
{ok, Ssh};
handle_version(_,_,_) ->
@@ -1350,523 +1508,376 @@ string_version(#ssh{role = client, c_version = Vsn}) ->
string_version(#ssh{role = server, s_version = Vsn}) ->
Vsn.
-send_event(FsmPid, Event) ->
- gen_fsm:send_event(FsmPid, Event).
-send_all_state_event(FsmPid, Event) ->
- gen_fsm:send_all_state_event(FsmPid, Event).
+cast(FsmPid, Event) ->
+ gen_statem:cast(FsmPid, Event).
-sync_send_all_state_event(FsmPid, Event) ->
- sync_send_all_state_event(FsmPid, Event, infinity).
+call(FsmPid, Event) ->
+ call(FsmPid, Event, infinity).
-sync_send_all_state_event(FsmPid, Event, Timeout) ->
- try gen_fsm:sync_send_all_state_event(FsmPid, Event, Timeout) of
- {closed, _Channel} ->
+call(FsmPid, Event, Timeout) ->
+ try gen_statem:call(FsmPid, Event, Timeout) of
+ {closed, _R} ->
+ {error, closed};
+ {killed, _R} ->
{error, closed};
Result ->
Result
catch
- exit:{noproc, _} ->
+ exit:{noproc, _R} ->
{error, closed};
- exit:{normal, _} ->
+ exit:{normal, _R} ->
{error, closed};
- exit:{{shutdown, _},_} ->
+ exit:{{shutdown, _R},_} ->
{error, closed}
end.
-%% simulate send_all_state_event(self(), Event)
-event(#ssh_msg_disconnect{} = Event, StateName, State) ->
- handle_event(Event, StateName, State);
-event(#ssh_msg_ignore{} = Event, StateName, State) ->
- handle_event(Event, StateName, State);
-event(#ssh_msg_debug{} = Event, StateName, State) ->
- handle_event(Event, StateName, State);
-event(#ssh_msg_unimplemented{} = Event, StateName, State) ->
- handle_event(Event, StateName, State);
-%% simulate send_event(self(), Event)
-event(Event, StateName, State) ->
- try
- ?MODULE:StateName(Event, State)
+
+handle_connection_msg(Msg, StateName, D0 = #data{starter = User,
+ connection_state = Connection0,
+ event_queue = Qev0}) ->
+ Renegotiation = renegotiation(StateName),
+ Role = role(StateName),
+ try ssh_connection:handle_msg(Msg, Connection0, Role) of
+ {{replies, Replies}, Connection} ->
+ {Repls, D} =
+ case StateName of
+ {connected,_} ->
+ send_replies(Replies, D0#data{connection_state=Connection});
+ _ ->
+ {ConnReplies, NonConnReplies} = lists:splitwith(fun not_connected_filter/1, Replies),
+ send_replies(NonConnReplies, D0#data{event_queue = Qev0 ++ ConnReplies})
+ end,
+ {keep_state, D, Repls};
+
+ {noreply, Connection} ->
+ {keep_state, D0#data{connection_state = Connection}};
+
+ {disconnect, Reason0, {{replies, Replies}, Connection}} ->
+ {Repls, D} = send_replies(Replies, D0#data{connection_state = Connection}),
+ case {Reason0,Role} of
+ {{_, Reason}, client} when ((StateName =/= {connected,client}) and (not Renegotiation)) ->
+ User ! {self(), not_connected, Reason};
+ _ ->
+ ok
+ end,
+ {stop_and_reply, {shutdown,normal}, Repls, D#data{connection_state = Connection}}
+
catch
- throw:#ssh_msg_disconnect{} = DisconnectMsg ->
- handle_disconnect(DisconnectMsg, State);
- throw:{ErrorToDisplay, #ssh_msg_disconnect{} = DisconnectMsg} ->
- handle_disconnect(DisconnectMsg, State, ErrorToDisplay);
- _C:_Error ->
- handle_disconnect(#ssh_msg_disconnect{code = error_code(StateName),
- description = "Invalid state",
- language = "en"}, State)
+ _:Error ->
+ {disconnect, _Reason, {{replies, Replies}, Connection}} =
+ ssh_connection:handle_msg(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
+ description = "Internal error"},
+ Connection0, Role),
+ {Repls, D} = send_replies(Replies, D0#data{connection_state = Connection}),
+ {stop_and_reply, {shutdown,Error}, Repls, D#data{connection_state = Connection}}
end.
-error_code(key_exchange) ->
- ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED;
-error_code(new_keys) ->
- ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED;
-error_code(_) ->
- ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE.
-
-generate_event(<<?BYTE(Byte), _/binary>> = Msg, StateName,
- #state{
- role = Role,
- starter = User,
- renegotiate = Renegotiation,
- connection_state = Connection0} = State0, EncData)
- when Byte == ?SSH_MSG_GLOBAL_REQUEST;
- Byte == ?SSH_MSG_REQUEST_SUCCESS;
- Byte == ?SSH_MSG_REQUEST_FAILURE;
- Byte == ?SSH_MSG_CHANNEL_OPEN;
- Byte == ?SSH_MSG_CHANNEL_OPEN_CONFIRMATION;
- Byte == ?SSH_MSG_CHANNEL_OPEN_FAILURE;
- Byte == ?SSH_MSG_CHANNEL_WINDOW_ADJUST;
- Byte == ?SSH_MSG_CHANNEL_DATA;
- Byte == ?SSH_MSG_CHANNEL_EXTENDED_DATA;
- Byte == ?SSH_MSG_CHANNEL_EOF;
- Byte == ?SSH_MSG_CHANNEL_CLOSE;
- Byte == ?SSH_MSG_CHANNEL_REQUEST;
- Byte == ?SSH_MSG_CHANNEL_SUCCESS;
- Byte == ?SSH_MSG_CHANNEL_FAILURE ->
- try
- ssh_message:decode(Msg)
- of
- ConnectionMsg ->
- State1 = generate_event_new_state(State0, EncData),
- try ssh_connection:handle_msg(ConnectionMsg, Connection0, Role) of
- {{replies, Replies0}, Connection} ->
- if StateName == connected ->
- Replies = Replies0,
- State2 = State1;
- true ->
- {ConnReplies, Replies} =
- lists:splitwith(fun not_connected_filter/1, Replies0),
- Q = State1#state.event_queue ++ ConnReplies,
- State2 = State1#state{ event_queue = Q }
- end,
- State = send_replies(Replies, State2#state{connection_state = Connection}),
- {next_state, StateName, next_packet(State)};
- {noreply, Connection} ->
- {next_state, StateName, next_packet(State1#state{connection_state = Connection})};
- {disconnect, {_, Reason}, {{replies, Replies}, Connection}} when
- Role == client andalso ((StateName =/= connected) and (not Renegotiation)) ->
- State = send_replies(Replies, State1#state{connection_state = Connection}),
- User ! {self(), not_connected, Reason},
- {stop, {shutdown, normal},
- next_packet(State#state{connection_state = Connection})};
- {disconnect, _Reason, {{replies, Replies}, Connection}} ->
- State = send_replies(Replies, State1#state{connection_state = Connection}),
- {stop, {shutdown, normal}, State#state{connection_state = Connection}}
- catch
- _:Error ->
- {disconnect, _Reason, {{replies, Replies}, Connection}} =
- ssh_connection:handle_msg(
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
- description = "Internal error",
- language = "en"}, Connection0, Role),
- State = send_replies(Replies, State1#state{connection_state = Connection}),
- {stop, {shutdown, Error}, State#state{connection_state = Connection}}
- end
- catch
- _:_ ->
- handle_disconnect(
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "Bad packet received",
- language = ""}, State0)
- end;
-generate_event(Msg, StateName, State0, EncData) ->
- try
- Event = ssh_message:decode(set_prefix_if_trouble(Msg,State0)),
- State = generate_event_new_state(State0, EncData),
- case Event of
- #ssh_msg_kexinit{} ->
- %% We need payload for verification later.
- event({Event, Msg}, StateName, State);
- _ ->
- event(Event, StateName, State)
- end
- catch
- _C:_E ->
- DisconnectMsg =
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "Encountered unexpected input",
- language = "en"},
- handle_disconnect(DisconnectMsg, State0)
- end.
-
-
-set_prefix_if_trouble(Msg = <<?BYTE(Op),_/binary>>, #state{ssh_params=SshParams})
+set_kex_overload_prefix(Msg = <<?BYTE(Op),_/binary>>, #data{ssh_params=SshParams})
when Op == 30;
Op == 31
->
case catch atom_to_list(kex(SshParams)) of
- "ecdh-sha2-" ++ _ ->
+ "ecdh-sha2-" ++ _ ->
<<"ecdh",Msg/binary>>;
"diffie-hellman-group-exchange-" ++ _ ->
<<"dh_gex",Msg/binary>>;
"diffie-hellman-group" ++ _ ->
<<"dh",Msg/binary>>;
- _ ->
+ _ ->
Msg
end;
-set_prefix_if_trouble(Msg, _) ->
+set_kex_overload_prefix(Msg, _) ->
Msg.
kex(#ssh{algorithms=#alg{kex=Kex}}) -> Kex;
kex(_) -> undefined.
+cache(#data{connection_state=C}) -> C#connection.channel_cache.
+
-handle_request(ChannelPid, ChannelId, Type, Data, WantReply, From,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State0) ->
- case ssh_channel:cache_lookup(Cache, ChannelId) of
+%%%----------------------------------------------------------------
+handle_request(ChannelPid, ChannelId, Type, Data, WantReply, From, D) ->
+ case ssh_channel:cache_lookup(cache(D), ChannelId) of
#channel{remote_id = Id} = Channel ->
- update_sys(Cache, Channel, Type, ChannelPid),
- Msg = ssh_connection:channel_request_msg(Id, Type,
- WantReply, Data),
- Replies = [{connection_reply, Msg}],
- State = add_request(WantReply, ChannelId, From, State0),
- {{replies, Replies}, State};
+ update_sys(cache(D), Channel, Type, ChannelPid),
+ send_msg(ssh_connection:channel_request_msg(Id, Type, WantReply, Data),
+ add_request(WantReply, ChannelId, From, D));
undefined ->
- {{replies, []}, State0}
+ D
end.
-handle_request(ChannelId, Type, Data, WantReply, From,
- #state{connection_state =
- #connection{channel_cache = Cache}} = State0) ->
- case ssh_channel:cache_lookup(Cache, ChannelId) of
- #channel{remote_id = Id} ->
- Msg = ssh_connection:channel_request_msg(Id, Type,
- WantReply, Data),
- Replies = [{connection_reply, Msg}],
- State = add_request(WantReply, ChannelId, From, State0),
- {{replies, Replies}, State};
+handle_request(ChannelId, Type, Data, WantReply, From, D) ->
+ case ssh_channel:cache_lookup(cache(D), ChannelId) of
+ #channel{remote_id = Id} ->
+ send_msg(ssh_connection:channel_request_msg(Id, Type, WantReply, Data),
+ add_request(WantReply, ChannelId, From, D));
undefined ->
- {{replies, []}, State0}
- end.
-
-handle_global_request({global_request, ChannelPid,
- "tcpip-forward" = Type, WantReply,
- <<?UINT32(IPLen),
- IP:IPLen/binary, ?UINT32(Port)>> = Data},
- #state{connection_state =
- #connection{channel_cache = Cache}
- = Connection0} = State) ->
- ssh_channel:cache_update(Cache, #channel{user = ChannelPid,
- type = "forwarded-tcpip",
- sys = none}),
- Connection = ssh_connection:bind(IP, Port, ChannelPid, Connection0),
- Msg = ssh_connection:global_request_msg(Type, WantReply, Data),
- send_replies([{connection_reply, Msg}], State#state{connection_state = Connection});
-
-handle_global_request({global_request, _Pid, "cancel-tcpip-forward" = Type,
- WantReply, <<?UINT32(IPLen),
- IP:IPLen/binary, ?UINT32(Port)>> = Data},
- #state{connection_state = Connection0} = State) ->
- Connection = ssh_connection:unbind(IP, Port, Connection0),
- Msg = ssh_connection:global_request_msg(Type, WantReply, Data),
- send_replies([{connection_reply, Msg}], State#state{connection_state = Connection});
-
-handle_global_request({global_request, _, "cancel-tcpip-forward" = Type,
- WantReply, Data}, State) ->
- Msg = ssh_connection:global_request_msg(Type, WantReply, Data),
- send_replies([{connection_reply, Msg}], State).
-
-handle_idle_timeout(#state{opts = Opts}) ->
- case proplists:get_value(idle_time, Opts, infinity) of
- infinity ->
- ok;
- IdleTime ->
- erlang:send_after(IdleTime, self(), {check_cache, [], []})
+ D
end.
-handle_channel_down(ChannelPid, #state{connection_state =
- #connection{channel_cache = Cache}} =
- State) ->
+%%%----------------------------------------------------------------
+handle_channel_down(ChannelPid, D) ->
ssh_channel:cache_foldl(
fun(Channel, Acc) when Channel#channel.user == ChannelPid ->
- ssh_channel:cache_delete(Cache,
+ ssh_channel:cache_delete(cache(D),
Channel#channel.local_id),
Acc;
(_,Acc) ->
Acc
- end, [], Cache),
- {{replies, []}, check_cache(State, Cache)}.
+ end, [], cache(D)),
+ {{replies, []}, cache_check_set_idle_timer(D)}.
+
update_sys(Cache, Channel, Type, ChannelPid) ->
ssh_channel:cache_update(Cache,
Channel#channel{sys = Type, user = ChannelPid}).
+
add_request(false, _ChannelId, _From, State) ->
State;
-add_request(true, ChannelId, From, #state{connection_state =
- #connection{requests = Requests0} =
- Connection} = State) ->
+add_request(true, ChannelId, From, #data{connection_state =
+ #connection{requests = Requests0} =
+ Connection} = State) ->
Requests = [{ChannelId, From} | Requests0],
- State#state{connection_state = Connection#connection{requests = Requests}}.
+ State#data{connection_state = Connection#connection{requests = Requests}}.
-new_channel_id(#state{connection_state = #connection{channel_id_seed = Id} =
- Connection}
+new_channel_id(#data{connection_state = #connection{channel_id_seed = Id} =
+ Connection}
= State) ->
- {Id, State#state{connection_state =
- Connection#connection{channel_id_seed = Id + 1}}}.
-
-generate_event_new_state(#state{ssh_params =
- #ssh{recv_sequence = SeqNum0}
- = Ssh} = State, EncData) ->
- SeqNum = ssh_transport:next_seqnum(SeqNum0),
- State#state{ssh_params = Ssh#ssh{recv_sequence = SeqNum},
- decoded_data_buffer = <<>>,
- encoded_data_buffer = EncData,
- undecoded_packet_length = undefined}.
-
-next_packet(#state{decoded_data_buffer = <<>>,
- encoded_data_buffer = Buff,
- ssh_params = #ssh{decrypt_block_size = BlockSize},
- socket = Socket,
- transport_protocol = Protocol} = State) when Buff =/= <<>> ->
- case size(Buff) >= erlang:max(8, BlockSize) of
- true ->
- %% Enough data from the next packet has been received to
- %% decode the length indicator, fake a socket-recive
- %% message so that the data will be processed
- self() ! {Protocol, Socket, <<>>};
- false ->
- inet:setopts(Socket, [{active, once}])
- end,
- State;
+ {Id, State#data{connection_state =
+ Connection#connection{channel_id_seed = Id + 1}}}.
-next_packet(#state{socket = Socket} = State) ->
- inet:setopts(Socket, [{active, once}]),
- State.
-
-after_new_keys(#state{renegotiate = true} = State) ->
- State1 = State#state{renegotiate = false, event_queue = []},
- lists:foldr(fun after_new_keys_events/2, {next_state, connected, State1}, State#state.event_queue);
-after_new_keys(#state{renegotiate = false,
- ssh_params = #ssh{role = client} = Ssh0} = State) ->
- {Msg, Ssh} = ssh_auth:service_request_msg(Ssh0),
- send_msg(Msg, State),
- {next_state, service_request, State#state{ssh_params = Ssh}};
-after_new_keys(#state{renegotiate = false,
- ssh_params = #ssh{role = server}} = State) ->
- {next_state, service_request, State}.
-
-after_new_keys_events({sync, _Event, From}, {stop, _Reason, _StateData}=Terminator) ->
- gen_fsm:reply(From, {error, closed}),
- Terminator;
-after_new_keys_events(_, {stop, _Reason, _StateData}=Terminator) ->
- Terminator;
-after_new_keys_events({sync, Event, From}, {next_state, StateName, StateData}) ->
- case handle_sync_event(Event, From, StateName, StateData) of
- {reply, Reply, NextStateName, NewStateData} ->
- gen_fsm:reply(From, Reply),
- {next_state, NextStateName, NewStateData};
- {next_state, NextStateName, NewStateData}->
- {next_state, NextStateName, NewStateData};
- {stop, Reason, Reply, NewStateData} ->
- gen_fsm:reply(From, Reply),
- {stop, Reason, NewStateData}
- end;
-after_new_keys_events({event, Event}, {next_state, StateName, StateData}) ->
- case handle_event(Event, StateName, StateData) of
- {next_state, NextStateName, NewStateData}->
- {next_state, NextStateName, NewStateData};
- {stop, Reason, NewStateData} ->
- {stop, Reason, NewStateData}
- end;
-after_new_keys_events({connection_reply, _Data} = Reply, {StateName, State}) ->
- NewState = send_replies([Reply], State),
- {next_state, StateName, NewState}.
-
-
-handle_disconnect(DisconnectMsg, State) ->
- handle_disconnect(own, DisconnectMsg, State).
-
-handle_disconnect(#ssh_msg_disconnect{} = DisconnectMsg, State, Error) ->
- handle_disconnect(own, DisconnectMsg, State, Error);
-handle_disconnect(Type, #ssh_msg_disconnect{description = Desc} = Msg, #state{connection_state = Connection0, role = Role} = State0) ->
- {disconnect, _, {{replies, Replies}, Connection}} = ssh_connection:handle_msg(Msg, Connection0, Role),
- State = send_replies(disconnect_replies(Type, Msg, Replies), State0),
- disconnect_fun(Desc, State#state.opts),
- {stop, {shutdown, Desc}, State#state{connection_state = Connection}}.
-
-handle_disconnect(Type, #ssh_msg_disconnect{description = Desc} = Msg, #state{connection_state = Connection0,
- role = Role} = State0, ErrorMsg) ->
- {disconnect, _, {{replies, Replies}, Connection}} = ssh_connection:handle_msg(Msg, Connection0, Role),
- State = send_replies(disconnect_replies(Type, Msg, Replies), State0),
- disconnect_fun(Desc, State#state.opts),
- {stop, {shutdown, {Desc, ErrorMsg}}, State#state{connection_state = Connection}}.
-
-disconnect_replies(own, Msg, Replies) ->
- [{connection_reply, Msg} | Replies];
-disconnect_replies(peer, _, Replies) ->
- Replies.
+%%%----------------------------------------------------------------
+%% %%% This server/client has decided to disconnect via the state machine:
+disconnect(Msg=#ssh_msg_disconnect{description=Description}, _StateName, State0) ->
+ State = send_msg(Msg, State0),
+ disconnect_fun(Description, State),
+ {stop, {shutdown,Description}, State}.
+%%%----------------------------------------------------------------
counterpart_versions(NumVsn, StrVsn, #ssh{role = server} = Ssh) ->
Ssh#ssh{c_vsn = NumVsn , c_version = StrVsn};
counterpart_versions(NumVsn, StrVsn, #ssh{role = client} = Ssh) ->
Ssh#ssh{s_vsn = NumVsn , s_version = StrVsn}.
-opposite_role(client) ->
- server;
-opposite_role(server) ->
- client.
-connected_fun(User, PeerAddr, Method, Opts) ->
- case proplists:get_value(connectfun, Opts) of
+%%%----------------------------------------------------------------
+conn_info(client_version, #data{ssh_params=S}) -> {S#ssh.c_vsn, S#ssh.c_version};
+conn_info(server_version, #data{ssh_params=S}) -> {S#ssh.s_vsn, S#ssh.s_version};
+conn_info(peer, #data{ssh_params=S}) -> S#ssh.peer;
+conn_info(user, D) -> D#data.auth_user;
+conn_info(sockname, D) -> {ok, SockName} = inet:sockname(D#data.socket),
+ SockName;
+%% dbg options ( = not documented):
+conn_info(socket, D) -> D#data.socket;
+conn_info(chan_ids, D) ->
+ ssh_channel:cache_foldl(fun(#channel{local_id=Id}, Acc) ->
+ [Id | Acc]
+ end, [], cache(D)).
+
+%%%----------------------------------------------------------------
+chann_info(recv_window, C) ->
+ {{win_size, C#channel.recv_window_size},
+ {packet_size, C#channel.recv_packet_size}};
+chann_info(send_window, C) ->
+ {{win_size, C#channel.send_window_size},
+ {packet_size, C#channel.send_packet_size}};
+%% dbg options ( = not documented):
+chann_info(pid, C) ->
+ C#channel.user.
+
+%%%----------------------------------------------------------------
+%% Assisting meta function for the *_info functions
+fold_keys(Keys, Fun, Extra) ->
+ lists:foldr(fun(Key, Acc) ->
+ try Fun(Key, Extra) of
+ Value -> [{Key,Value}|Acc]
+ catch
+ _:_ -> Acc
+ end
+ end, [], Keys).
+
+%%%----------------------------------------------------------------
+log_error(Reason) ->
+ Report = io_lib:format("Erlang ssh connection handler failed with reason:~n"
+ " ~p~n"
+ "Stacktrace:~n"
+ " ~p~n",
+ [Reason, erlang:get_stacktrace()]),
+ error_logger:error_report(Report).
+
+%%%----------------------------------------------------------------
+not_connected_filter({connection_reply, _Data}) -> true;
+not_connected_filter(_) -> false.
+
+%%%----------------------------------------------------------------
+send_replies(Repls, State) ->
+ lists:foldl(fun get_repl/2,
+ {[],State},
+ Repls).
+
+get_repl({connection_reply,Msg}, {CallRepls,S}) ->
+ {CallRepls, send_msg(Msg,S)};
+get_repl({channel_data,undefined,_Data}, Acc) ->
+ Acc;
+get_repl({channel_data,Pid,Data}, Acc) ->
+ Pid ! {ssh_cm, self(), Data},
+ Acc;
+get_repl({channel_request_reply,From,Data}, {CallRepls,S}) ->
+ {[{reply,From,Data}|CallRepls], S};
+get_repl({flow_control,Cache,Channel,From,Msg}, {CallRepls,S}) ->
+ ssh_channel:cache_update(Cache, Channel#channel{flow_control = undefined}),
+ {[{reply,From,Msg}|CallRepls], S};
+get_repl({flow_control,From,Msg}, {CallRepls,S}) ->
+ {[{reply,From,Msg}|CallRepls], S};
+get_repl(noreply, Acc) ->
+ Acc;
+get_repl(X, Acc) ->
+ exit({get_repl,X,Acc}).
+
+%%%----------------------------------------------------------------
+disconnect_fun({disconnect,Msg}, D) ->
+ disconnect_fun(Msg, D);
+disconnect_fun(Reason, #data{opts=Opts}) ->
+ case proplists:get_value(disconnectfun, Opts) of
undefined ->
ok;
Fun ->
- catch Fun(User, PeerAddr, Method)
+ catch Fun(Reason)
+ end.
+
+unexpected_fun(UnexpectedMessage, #data{opts = Opts,
+ ssh_params = #ssh{peer = {_,Peer} }
+ } ) ->
+ case proplists:get_value(unexpectedfun, Opts) of
+ undefined ->
+ report;
+ Fun ->
+ catch Fun(UnexpectedMessage, Peer)
end.
-retry_fun(_, _, undefined, _) ->
- ok;
-retry_fun(User, PeerAddr, {error, Reason}, Opts) ->
- case proplists:get_value(failfun, Opts) of
+debug_fun(#ssh_msg_debug{always_display = Display,
+ message = DbgMsg,
+ language = Lang},
+ #data{opts = Opts}) ->
+ case proplists:get_value(ssh_msg_debug_fun, Opts) of
undefined ->
ok;
Fun ->
- do_retry_fun(Fun, User, PeerAddr, Reason)
- end;
+ catch Fun(self(), Display, DbgMsg, Lang)
+ end.
+
-retry_fun(User, PeerAddr, Reason, Opts) ->
- case proplists:get_value(infofun, Opts) of
+connected_fun(User, Method, #data{ssh_params = #ssh{peer = {_,Peer}},
+ opts = Opts}) ->
+ case proplists:get_value(connectfun, Opts) of
undefined ->
ok;
- Fun ->
- do_retry_fun(Fun, User, PeerAddr, Reason)
+ Fun ->
+ catch Fun(User, Peer, Method)
end.
-do_retry_fun(Fun, User, PeerAddr, Reason) ->
- case erlang:fun_info(Fun, arity) of
+retry_fun(_, undefined, _) ->
+ ok;
+retry_fun(User, Reason, #data{ssh_params = #ssh{opts = Opts,
+ peer = {_,Peer}
+ }}) ->
+ {Tag,Info} =
+ case Reason of
+ {error, Error} ->
+ {failfun, Error};
+ _ ->
+ {infofun, Reason}
+ end,
+ Fun = proplists:get_value(Tag, Opts, fun(_,_)-> ok end),
+ try erlang:fun_info(Fun, arity)
+ of
{arity, 2} -> %% Backwards compatible
- catch Fun(User, Reason);
+ catch Fun(User, Info);
{arity, 3} ->
- catch Fun(User, PeerAddr, Reason)
+ catch Fun(User, Peer, Info);
+ _ ->
+ ok
+ catch
+ _:_ ->
+ ok
end.
-ssh_info([], _State, Acc) ->
- Acc;
-ssh_info([client_version | Rest], #state{ssh_params = #ssh{c_vsn = IntVsn,
- c_version = StringVsn}} = State, Acc) ->
- ssh_info(Rest, State, [{client_version, {IntVsn, StringVsn}} | Acc]);
-
-ssh_info([server_version | Rest], #state{ssh_params =#ssh{s_vsn = IntVsn,
- s_version = StringVsn}} = State, Acc) ->
- ssh_info(Rest, State, [{server_version, {IntVsn, StringVsn}} | Acc]);
-ssh_info([peer | Rest], #state{ssh_params = #ssh{peer = Peer}} = State, Acc) ->
- ssh_info(Rest, State, [{peer, Peer} | Acc]);
-ssh_info([sockname | Rest], #state{socket = Socket} = State, Acc) ->
- {ok, SockName} = inet:sockname(Socket),
- ssh_info(Rest, State, [{sockname, SockName}|Acc]);
-ssh_info([user | Rest], #state{auth_user = User} = State, Acc) ->
- ssh_info(Rest, State, [{user, User}|Acc]);
-ssh_info([ _ | Rest], State, Acc) ->
- ssh_info(Rest, State, Acc).
-
-ssh_channel_info([], _, Acc) ->
- Acc;
-
-ssh_channel_info([recv_window | Rest], #channel{recv_window_size = WinSize,
- recv_packet_size = Packsize
- } = Channel, Acc) ->
- ssh_channel_info(Rest, Channel, [{recv_window, {{win_size, WinSize},
- {packet_size, Packsize}}} | Acc]);
-ssh_channel_info([send_window | Rest], #channel{send_window_size = WinSize,
- send_packet_size = Packsize
- } = Channel, Acc) ->
- ssh_channel_info(Rest, Channel, [{send_window, {{win_size, WinSize},
- {packet_size, Packsize}}} | Acc]);
-ssh_channel_info([ _ | Rest], Channel, Acc) ->
- ssh_channel_info(Rest, Channel, Acc).
-
-log_error(Reason) ->
- Report = io_lib:format("Erlang ssh connection handler failed with reason: "
- "~p ~n, Stacktrace: ~p ~n",
- [Reason, erlang:get_stacktrace()]),
- error_logger:error_report(Report),
- "Internal error".
-
-not_connected_filter({connection_reply, _Data}) ->
- true;
-not_connected_filter(_) ->
- false.
-
-send_replies([], State) ->
- State;
-send_replies([{connection_reply, Data} | Rest], #state{ssh_params = Ssh0} = State) ->
- {Packet, Ssh} = ssh_transport:ssh_packet(Data, Ssh0),
- send_msg(Packet, State),
- send_replies(Rest, State#state{ssh_params = Ssh});
-send_replies([Msg | Rest], State) ->
- catch send_reply(Msg),
- send_replies(Rest, State).
-
-send_reply({channel_data, Pid, Data}) ->
- Pid ! {ssh_cm, self(), Data};
-send_reply({channel_requst_reply, From, Data}) ->
- gen_fsm:reply(From, Data);
-send_reply({flow_control, Cache, Channel, From, Msg}) ->
- ssh_channel:cache_update(Cache, Channel#channel{flow_control = undefined}),
- gen_fsm:reply(From, Msg);
-send_reply({flow_control, From, Msg}) ->
- gen_fsm:reply(From, Msg).
-
-disconnect_fun({disconnect,Msg}, Opts) ->
- disconnect_fun(Msg, Opts);
-disconnect_fun(_, undefined) ->
- ok;
-disconnect_fun(Reason, Opts) ->
- case proplists:get_value(disconnectfun, Opts) of
- undefined ->
- ok;
- Fun ->
- catch Fun(Reason)
- end.
+%%%----------------------------------------------------------------
+%%% Cache idle timer that closes the connection if there are no
+%%% channels open for a while.
-unexpected_fun(UnexpectedMessage, Opts, #ssh{peer={_,Peer}}) ->
- case proplists:get_value(unexpectedfun, Opts) of
- undefined ->
- report;
- Fun ->
- catch Fun(UnexpectedMessage, Peer)
+cache_init_idle_timer(D) ->
+ case proplists:get_value(idle_time, D#data.opts, infinity) of
+ infinity ->
+ D#data{idle_timer_value = infinity,
+ idle_timer_ref = infinity % A flag used later...
+ };
+ IdleTime ->
+ %% We dont want to set the timeout on first connect
+ D#data{idle_timer_value = IdleTime}
end.
-check_cache(#state{opts = Opts} = State, Cache) ->
- %% Check the number of entries in Cache
- case proplists:get_value(size, ets:info(Cache)) of
+cache_check_set_idle_timer(D = #data{idle_timer_ref = undefined,
+ idle_timer_value = IdleTime}) ->
+ %% No timer set - shall we set one?
+ case ssh_channel:cache_info(num_entries, cache(D)) of
+ 0 when IdleTime == infinity ->
+ %% No. Meaningless to set a timer that fires in an infinite time...
+ D;
0 ->
- case proplists:get_value(idle_time, Opts, infinity) of
- infinity ->
- State;
- Time ->
- handle_idle_timer(Time, State)
- end;
+ %% Yes, we'll set one since the cache is empty and it should not
+ %% be that for a specified time
+ D#data{idle_timer_ref =
+ erlang:send_after(IdleTime, self(), {'EXIT',[],"Timeout"})};
_ ->
- State
- end.
+ %% No - there are entries in the cache
+ D
+ end;
+cache_check_set_idle_timer(D) ->
+ %% There is already a timer set or the timeout time is infinite
+ D.
+
-handle_idle_timer(Time, #state{idle_timer_ref = undefined} = State) ->
- TimerRef = erlang:send_after(Time, self(), {'EXIT', [], "Timeout"}),
- State#state{idle_timer_ref=TimerRef};
-handle_idle_timer(_, State) ->
- State.
-
-remove_timer_ref(State) ->
- case State#state.idle_timer_ref of
- infinity -> %% If the timer is not activated
- State;
- undefined -> %% If we already has cancelled the timer
- State;
- TimerRef -> %% Timer is active
+cache_cancel_idle_timer(D) ->
+ case D#data.idle_timer_ref of
+ infinity ->
+ %% The timer is not activated
+ D;
+ undefined ->
+ %% The timer is already cancelled
+ D;
+ TimerRef ->
+ %% The timer is active
erlang:cancel_timer(TimerRef),
- State#state{idle_timer_ref = undefined}
+ D#data{idle_timer_ref = undefined}
end.
-socket_control(Socket, Pid, Transport) ->
- case Transport:controlling_process(Socket, Pid) of
+
+cache_request_idle_timer_check(D = #data{idle_timer_value = infinity}) ->
+ D;
+cache_request_idle_timer_check(D = #data{idle_timer_value = IdleTime}) ->
+ erlang:send_after(IdleTime, self(), check_cache),
+ D.
+
+%%%----------------------------------------------------------------
+start_channel_request_timer(_,_, infinity) ->
+ ok;
+start_channel_request_timer(Channel, From, Time) ->
+ erlang:send_after(Time, self(), {timeout, {Channel, From}}).
+
+%%%----------------------------------------------------------------
+%%% Connection start and initalization helpers
+
+socket_control(Socket, Pid, Options) ->
+ {_, TransportCallback, _} = % For example {_,gen_tcp,_}
+ proplists:get_value(transport, Options, ?DefaultTransport),
+ case TransportCallback:controlling_process(Socket, Pid) of
ok ->
- send_event(Pid, socket_control);
+ gen_statem:cast(Pid, socket_control);
{error, Reason} ->
{error, Reason}
end.
@@ -1895,16 +1906,3 @@ handshake(Pid, Ref, Timeout) ->
{error, timeout}
end.
-start_timeout(_,_, infinity) ->
- ok;
-start_timeout(Channel, From, Time) ->
- erlang:send_after(Time, self(), {timeout, {Channel, From}}).
-
-getopt(Opt, Socket) ->
- case inet:getopts(Socket, [Opt]) of
- {ok, [{Opt, Value}]} ->
- {ok, Value};
- Other ->
- {error, {unexpected_getopts_return, Other}}
- end.
-
diff --git a/lib/ssh/src/ssh_connection_sup.erl b/lib/ssh/src/ssh_connection_sup.erl
index e8d0d49668..0f54053f52 100644
--- a/lib/ssh/src/ssh_connection_sup.erl
+++ b/lib/ssh/src/ssh_connection_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,6 +45,8 @@ start_child(Sup, Args) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init(_) ->
RestartStrategy = simple_one_for_one,
MaxR = 0,
diff --git a/lib/ssh/src/ssh_daemon_channel.erl b/lib/ssh/src/ssh_daemon_channel.erl
index 560e8246de..6ca93eff44 100644
--- a/lib/ssh/src/ssh_daemon_channel.erl
+++ b/lib/ssh/src/ssh_daemon_channel.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_dbg.erl b/lib/ssh/src/ssh_dbg.erl
new file mode 100644
index 0000000000..bd6bc0335b
--- /dev/null
+++ b/lib/ssh/src/ssh_dbg.erl
@@ -0,0 +1,185 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%
+
+-module(ssh_dbg).
+
+-export([messages/0,
+ messages/1,
+ messages/2,
+ stop/0
+ ]).
+
+-include("ssh.hrl").
+-include("ssh_transport.hrl").
+-include("ssh_connect.hrl").
+-include("ssh_auth.hrl").
+
+-record(data, {
+ writer,
+ acc = []}).
+%%%================================================================
+messages() ->
+ messages(fun(String,_D) -> io:format(String) end).
+
+messages(Write) when is_function(Write,2) ->
+ messages(Write, fun(X) -> X end).
+
+messages(Write, MangleArg) when is_function(Write,2),
+ is_function(MangleArg,1) ->
+ catch dbg:start(),
+ setup_tracer(Write, MangleArg),
+ dbg:p(new,c),
+ dbg_ssh_messages().
+
+dbg_ssh_messages() ->
+ dbg:tp(ssh_message,encode,1, x),
+ dbg:tp(ssh_message,decode,1, x),
+ dbg:tpl(ssh_transport,select_algorithm,3, x).
+
+%%%----------------------------------------------------------------
+stop() ->
+ dbg:stop().
+
+%%%================================================================
+msg_formater({trace,Pid,call,{ssh_message,encode,[Msg]}}, D) ->
+ fmt("~nSEND ~p ~s~n", [Pid,wr_record(shrink_bin(Msg))], D);
+msg_formater({trace,_Pid,return_from,{ssh_message,encode,1},_Res}, D) ->
+ D;
+
+msg_formater({trace,_Pid,call,{ssh_message,decode,_}}, D) ->
+ D;
+msg_formater({trace,Pid,return_from,{ssh_message,decode,1},Msg}, D) ->
+ fmt("~n~p RECV ~s~n", [Pid,wr_record(shrink_bin(Msg))], D);
+
+msg_formater({trace,_Pid,call,{ssh_transport,select_algorithm,_}}, D) ->
+ D;
+msg_formater({trace,Pid,return_from,{ssh_transport,select_algorithm,3},{ok,Alg}}, D) ->
+ fmt("~n~p ALGORITHMS~n~s~n", [Pid, wr_record(Alg)], D);
+
+
+msg_formater({trace,Pid,send,{tcp,Sock,Bytes},Pid}, D) ->
+ fmt("~n~p TCP SEND on ~p~n ~p~n", [Pid,Sock, shrink_bin(Bytes)], D);
+
+msg_formater({trace,Pid,send,{tcp,Sock,Bytes},Dest}, D) ->
+ fmt("~n~p TCP SEND from ~p TO ~p~n ~p~n", [Pid,Sock,Dest, shrink_bin(Bytes)], D);
+
+msg_formater({trace,Pid,send,ErlangMsg,Dest}, D) ->
+ fmt("~n~p ERL MSG SEND TO ~p~n ~p~n", [Pid,Dest, shrink_bin(ErlangMsg)], D);
+
+
+msg_formater({trace,Pid,'receive',{tcp,Sock,Bytes}}, D) ->
+ fmt("~n~p TCP RECEIVE on ~p~n ~p~n", [Pid,Sock,shrink_bin(Bytes)], D);
+
+msg_formater({trace,Pid,'receive',ErlangMsg}, D) ->
+ fmt("~n~p ERL MSG RECEIVE~n ~p~n", [Pid,shrink_bin(ErlangMsg)], D);
+
+
+msg_formater(M, D) ->
+ fmt("~nDBG ~n~p~n", [shrink_bin(M)], D).
+
+%% msg_formater(_, D) ->
+%% D.
+
+
+fmt(Fmt, Args, D=#data{writer=Write,acc=Acc}) ->
+ D#data{acc = Write(io_lib:format(Fmt, Args), Acc)}.
+
+%%%----------------------------------------------------------------
+setup_tracer(Write, MangleArg) ->
+ Handler = fun(Arg, D) ->
+ msg_formater(MangleArg(Arg), D)
+ end,
+ InitialData = #data{writer = Write},
+ {ok,_} = dbg:tracer(process, {Handler, InitialData}),
+ ok.
+
+%%%----------------------------------------------------------------
+shrink_bin(B) when is_binary(B), size(B)>100 -> {'*** SHRINKED BIN',size(B),element(1,split_binary(B,20)),'***'};
+shrink_bin(L) when is_list(L) -> lists:map(fun shrink_bin/1, L);
+shrink_bin(T) when is_tuple(T) -> list_to_tuple(shrink_bin(tuple_to_list(T)));
+shrink_bin(X) -> X.
+
+%%%----------------------------------------------------------------
+-define(wr_record(N,BlackList), wr_record(R=#N{}) -> wr_record(R, record_info(fields,N), BlackList)).
+
+-define(wr_record(N), ?wr_record(N, [])).
+
+
+?wr_record(alg);
+
+?wr_record(ssh_msg_disconnect);
+?wr_record(ssh_msg_ignore);
+?wr_record(ssh_msg_unimplemented);
+?wr_record(ssh_msg_debug);
+?wr_record(ssh_msg_service_request);
+?wr_record(ssh_msg_service_accept);
+?wr_record(ssh_msg_kexinit);
+?wr_record(ssh_msg_kexdh_init);
+?wr_record(ssh_msg_kexdh_reply);
+?wr_record(ssh_msg_newkeys);
+?wr_record(ssh_msg_kex_dh_gex_request);
+?wr_record(ssh_msg_kex_dh_gex_request_old);
+?wr_record(ssh_msg_kex_dh_gex_group);
+?wr_record(ssh_msg_kex_dh_gex_init);
+?wr_record(ssh_msg_kex_dh_gex_reply);
+?wr_record(ssh_msg_kex_ecdh_init);
+?wr_record(ssh_msg_kex_ecdh_reply);
+
+?wr_record(ssh_msg_userauth_request);
+?wr_record(ssh_msg_userauth_failure);
+?wr_record(ssh_msg_userauth_success);
+?wr_record(ssh_msg_userauth_banner);
+?wr_record(ssh_msg_userauth_passwd_changereq);
+?wr_record(ssh_msg_userauth_pk_ok);
+?wr_record(ssh_msg_userauth_info_request);
+?wr_record(ssh_msg_userauth_info_response);
+
+?wr_record(ssh_msg_global_request);
+?wr_record(ssh_msg_request_success);
+?wr_record(ssh_msg_request_failure);
+?wr_record(ssh_msg_channel_open);
+?wr_record(ssh_msg_channel_open_confirmation);
+?wr_record(ssh_msg_channel_open_failure);
+?wr_record(ssh_msg_channel_window_adjust);
+?wr_record(ssh_msg_channel_data);
+?wr_record(ssh_msg_channel_extended_data);
+?wr_record(ssh_msg_channel_eof);
+?wr_record(ssh_msg_channel_close);
+?wr_record(ssh_msg_channel_request);
+?wr_record(ssh_msg_channel_success);
+?wr_record(ssh_msg_channel_failure);
+
+wr_record(R) -> io_lib:format('~p~n',[R]).
+
+
+wr_record(T, Fs, BL) when is_tuple(T) ->
+ wr_record(tuple_to_list(T), Fs, BL);
+wr_record([Name|Values], Fields, BlackL) ->
+ W = case Fields of
+ [] -> 0;
+ _ -> lists:max([length(atom_to_list(F)) || F<-Fields])
+ end,
+ [io_lib:format("~p:~n",[string:to_upper(atom_to_list(Name))])
+ | [io_lib:format(" ~*p: ~p~n",[W,Tag,Value]) || {Tag,Value} <- lists:zip(Fields,Values),
+ not lists:member(Tag,BlackL)
+ ]
+ ].
diff --git a/lib/ssh/src/ssh_file.erl b/lib/ssh/src/ssh_file.erl
index 3e066c453d..216f65f33a 100644
--- a/lib/ssh/src/ssh_file.erl
+++ b/lib/ssh/src/ssh_file.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -43,7 +43,28 @@
-define(PERM_644, 8#644).
-%% API
+%%% API
+
+%%% client
+-spec add_host_key(string(),
+ public_key:public_key(),
+ proplists:proplist()) -> ok | {error,term()}.
+
+-spec is_host_key(public_key:public_key(),
+ string(),
+ ssh_client_key_api:algorithm(),
+ proplists:proplist()) -> boolean().
+
+-spec user_key(ssh_client_key_api:algorithm(),
+ proplists:proplist()) -> {ok, public_key:private_key()} | {error,term()}.
+
+%%% server
+-spec host_key(ssh_server_key_api:algorithm(),
+ proplists:proplist()) -> {ok, public_key:private_key()} | {error,term()}.
+
+-spec is_auth_key(public_key:public_key(),
+ string(), proplists:proplist()) -> boolean().
+
%% Used by server
host_key(Algorithm, Opts) ->
diff --git a/lib/ssh/src/ssh_info.erl b/lib/ssh/src/ssh_info.erl
index 4e6e25bc70..0c24c09887 100644
--- a/lib/ssh/src/ssh_info.erl
+++ b/lib/ssh/src/ssh_info.erl
@@ -25,132 +25,174 @@
-module(ssh_info).
--compile(export_all).
+-export([print/0,
+ print/1,
+ string/0,
+ collect_pids/0
+ ]).
+
+-include("ssh_connect.hrl").
print() ->
- print(user).
+ io:format("~s", [string()]).
+print(File) when is_list(File) ->
+ {ok,D} = file:open(File, [write]),
+ print(D),
+ file:close(D);
print(D) ->
+ io:format(D, "~s", [string()]).
+
+string() ->
try supervisor:which_children(ssh_sup)
of
_ ->
- io:nl(D),
- print_general(D),
- io:nl(D),
- underline(D, "Client part", $=),
- print_clients(D),
- io:nl(D),
- underline(D, "Server part", $=),
- print_servers(D),
- io:nl(D),
- %% case os:type() of
- %% {unix,_} ->
- %% io:nl(),
- %% underline("Linux part", $=),
- %% underline("Listening"),
- %% catch io:format(os:cmd("netstat -tpln")),
- %% io:nl(),
- %% underline("Other"),
- %% catch io:format(os:cmd("netstat -tpn"));
- %% _ -> ok
- %% end,
- underline(D, "Supervisors", $=),
- walk_sups(D, ssh_sup),
- io:nl(D)
+ [io_lib:nl(),
+ print_general(),
+ io_lib:nl(),
+ underline("Client part", $=),
+ print_clients(),
+ io_lib:nl(),
+ underline("Server part", $=),
+ print_servers(),
+ io_lib:nl(),
+ underline("Supervisors", $=),
+ walk_sups(ssh_sup),
+ io_lib:nl()]
catch
_:_ ->
- io:format(D,"Ssh not found~n",[])
+ io_lib:format("Ssh not found~n",[])
end.
+
%%%================================================================
-print_general(D) ->
+-define(INDENT, " ").
+
+print_general() ->
{_Name, Slogan, Ver} = lists:keyfind(ssh,1,application:which_applications()),
- underline(D, io_lib:format("~s ~s", [Slogan, Ver]), $=),
- io:format(D, 'This printout is generated ~s. ~n',[datetime()]).
+ [underline(io_lib:format("~s ~s", [Slogan, Ver]), $=),
+ io_lib:format('This printout is generated ~s. ~n',[datetime()])
+ ].
-%%%================================================================
-print_clients(D) ->
- PrintClient = fun(X) -> print_client(D,X) end,
+print_clients() ->
try
- lists:foreach(PrintClient, supervisor:which_children(sshc_sup))
+ lists:map(fun print_client/1,
+ supervisor:which_children(sshc_sup))
catch
C:E ->
- io:format(D, '***FAILED: ~p:~p~n',[C,E])
+ io_lib:format('***print_clients FAILED: ~p:~p~n',[C,E])
end.
-print_client(D, {undefined,Pid,supervisor,[ssh_connection_handler]}) ->
+print_client({undefined,Pid,supervisor,[ssh_connection_handler]}) ->
{{Local,Remote},_Str} = ssh_connection_handler:get_print_info(Pid),
- io:format(D, " Local=~s Remote=~s ConnectionRef=~p~n",[fmt_host_port(Local),fmt_host_port(Remote),Pid]);
-print_client(D, Other) ->
- io:format(D, " [[Other 1: ~p]]~n",[Other]).
+ [io_lib:format(?INDENT"Local: ~s Remote: ~s ConnectionRef = ~p~n",
+ [fmt_host_port(Local), fmt_host_port(Remote), Pid]),
+ case channels(Pid) of
+ {ok,Channels=[_|_]} ->
+ [print_ch(ChPid) || #channel{user=ChPid} <- Channels];
+ _ ->
+ io_lib:format(?INDENT?INDENT?INDENT"No channels~n",[])
+ end];
+
+print_client(Other) ->
+ io_lib:format(" [[Other 1: ~p]]~n",[Other]).
%%%================================================================
-print_servers(D) ->
- PrintServer = fun(X) -> print_server(D,X) end,
+print_servers() ->
try
- lists:foreach(PrintServer, supervisor:which_children(sshd_sup))
+ lists:map(fun print_server/1,
+ supervisor:which_children(sshd_sup))
catch
C:E ->
- io:format(D, '***FAILED: ~p:~p~n',[C,E])
+ io_lib:format('***print_servers FAILED: ~p:~p~n',[C,E])
end.
-print_server(D, {{server,ssh_system_sup,LocalHost,LocalPort},Pid,supervisor,[ssh_system_sup]}) when is_pid(Pid) ->
- io:format(D, 'Local=~s (~p children)~n',[fmt_host_port({LocalHost,LocalPort}),
- ssh_acceptor:number_of_connections(Pid)]),
- PrintSystemSup = fun(X) -> print_system_sup(D,X) end,
- lists:foreach(PrintSystemSup, supervisor:which_children(Pid));
-print_server(D, Other) ->
- io:format(D, " [[Other 2: ~p]]~n",[Other]).
-
-print_system_sup(D, {Ref,Pid,supervisor,[ssh_subsystem_sup]}) when is_reference(Ref),
+
+print_server({{server,ssh_system_sup,LocalHost,LocalPort,Profile},Pid,supervisor,[ssh_system_sup]}) when is_pid(Pid) ->
+ Children = supervisor:which_children(Pid),
+ [io_lib:format(?INDENT"Listen: ~s (~p children) Profile ~p",[fmt_host_port({LocalHost,LocalPort}),
+ ssh_acceptor:number_of_connections(Pid),
+ Profile]),
+ case [AccPid
+ || {{ssh_acceptor_sup,_LocalHost,_LocalPort,_Profile}, AccPid, supervisor, [ssh_acceptor_sup]}
+ <- Children] of
+ AcceptorPids = [_|_] ->
+ [io_lib:format(" [Acceptor Pid", []),
+ [io_lib:format(" ~p",[AccPid]) || AccPid <- AcceptorPids],
+ io_lib:format("]~n", [])
+ ];
+ [] ->
+ io_lib:nl()
+ end,
+ lists:map(fun print_system_sup/1,
+ supervisor:which_children(Pid))
+ ].
+
+
+print_system_sup({Ref,Pid,supervisor,[ssh_subsystem_sup]}) when is_reference(Ref),
is_pid(Pid) ->
- PrintChannels = fun(X) -> print_channels(D,X) end,
- lists:foreach(PrintChannels, supervisor:which_children(Pid));
-print_system_sup(D, {{ssh_acceptor_sup,LocalHost,LocalPort}, Pid,supervisor, [ssh_acceptor_sup]}) when is_pid(Pid) ->
- io:format(D, " [Acceptor for ~s]~n",[fmt_host_port({LocalHost,LocalPort})]);
-print_system_sup(D, Other) ->
- io:format(D, " [[Other 3: ~p]]~n",[Other]).
-
-print_channels(D, {{server,ssh_channel_sup,_,_},Pid,supervisor,[ssh_channel_sup]}) when is_pid(Pid) ->
- PrintChannel = fun(X) -> print_channel(D,X) end,
- lists:foreach(PrintChannel, supervisor:which_children(Pid));
-print_channels(D, Other) ->
- io:format(D, " [[Other 4: ~p]]~n",[Other]).
-
-
-print_channel(D, {Ref,Pid,worker,[ssh_channel]}) when is_reference(Ref),
- is_pid(Pid) ->
- {{ConnManager,ChannelID}, Str} = ssh_channel:get_print_info(Pid),
- {{Local,Remote},StrM} = ssh_connection_handler:get_print_info(ConnManager),
- io:format(D, ' ch ~p: ~s ~s',[ChannelID, StrM, Str]),
- io:format(D, " Local=~s Remote=~s~n",[fmt_host_port(Local),fmt_host_port(Remote)]);
-print_channel(D, Other) ->
- io:format(D, " [[Other 5: ~p]]~n",[Other]).
-
+ lists:map(fun print_channels/1,
+ supervisor:which_children(Pid));
+
+print_system_sup({{ssh_acceptor_sup,_LocalHost,_LocalPort,_Profile}, Pid, supervisor, [ssh_acceptor_sup]}) when is_pid(Pid) ->
+ [].
+
+
+
+print_channels({{server,ssh_channel_sup,_,_},Pid,supervisor,[ssh_channel_sup]}) when is_pid(Pid) ->
+ Children = supervisor:which_children(Pid),
+ ChannelPids = [P || {R,P,worker,[ssh_channel]} <- Children,
+ is_pid(P),
+ is_reference(R)],
+ case ChannelPids of
+ [] -> io_lib:format(?INDENT?INDENT"No channels~n",[]);
+ [Ch1Pid|_] ->
+ {{ConnManager,_}, _Str} = ssh_channel:get_print_info(Ch1Pid),
+ {{_,Remote},_} = ssh_connection_handler:get_print_info(ConnManager),
+ [io_lib:format(?INDENT?INDENT"Remote: ~s ConnectionRef = ~p~n",[fmt_host_port(Remote),ConnManager]),
+ lists:map(fun print_ch/1, ChannelPids)
+ ]
+ end;
+print_channels({{server,ssh_connection_sup,_,_},Pid,supervisor,[ssh_connection_sup]}) when is_pid(Pid) ->
+ []. % The supervisor of the connections socket owning process
+
+print_ch(Pid) ->
+ try
+ {{ConnManager,ChannelID}, Str} = ssh_channel:get_print_info(Pid),
+ {_LocalRemote,StrM} = ssh_connection_handler:get_print_info(ConnManager),
+ io_lib:format(?INDENT?INDENT?INDENT"ch ~p ~p: ~s ~s~n",[ChannelID, Pid, StrM, Str])
+ catch
+ C:E ->
+ io_lib:format('****print_ch FAILED for ChanPid ~p: ~p:~p~n',[Pid, C, E])
+ end.
+
+
%%%================================================================
-define(inc(N), (N+4)).
-walk_sups(D, StartPid) ->
- io:format(D, "Start at ~p, ~s.~n",[StartPid,dead_or_alive(StartPid)]),
- walk_sups(D, children(StartPid), _Indent=?inc(0)).
+walk_sups(StartPid) ->
+ io_lib:format("Start at ~p, ~s.~n",[StartPid,dead_or_alive(StartPid)]),
+ walk_sups(children(StartPid), _Indent=?inc(0)).
-walk_sups(D, [H={_,Pid,_,_}|T], Indent) ->
- indent(D, Indent), io:format(D, '~200p ~p is ~s~n',[H,Pid,dead_or_alive(Pid)]),
- case H of
- {_,_,supervisor,[ssh_connection_handler]} -> ok;
- {_,Pid,supervisor,_} -> walk_sups(D, children(Pid), ?inc(Indent));
- _ -> ok
- end,
- walk_sups(D, T, Indent);
-walk_sups(_D, [], _) ->
- ok.
+walk_sups([H={_,Pid,_,_}|T], Indent) ->
+ [indent(Indent),
+ io_lib:format('~200p ~p is ~s~n',[H,Pid,dead_or_alive(Pid)]),
+ case H of
+ {_,_,supervisor,[ssh_connection_handler]} -> "";
+ {_,Pid,supervisor,_} -> walk_sups(children(Pid), ?inc(Indent));
+ _ -> ""
+ end,
+ walk_sups(T, Indent)
+ ];
+walk_sups([], _) ->
+ "".
dead_or_alive(Name) when is_atom(Name) ->
case whereis(Name) of
- undefined ->
+ undefined ->
"**UNDEFINED**";
- Pid ->
+ Pid ->
dead_or_alive(Pid)
end;
dead_or_alive(Pid) when is_pid(Pid) ->
@@ -159,7 +201,8 @@ dead_or_alive(Pid) when is_pid(Pid) ->
_ -> "alive"
end.
-indent(D, I) -> io:format(D,'~*c',[I,$ ]).
+indent(I) -> io_lib:format('~*c',[I,$ ]).
+
children(Pid) ->
Parent = self(),
@@ -170,23 +213,39 @@ children(Pid) ->
{Helper,L} when is_list(L) ->
L
after
- 2000 ->
+ 2000 ->
catch exit(Helper, kill),
[]
end.
-%%%================================================================
-underline(D, Str) ->
- underline(D, Str, $-).
+is_connection_handler(Pid) ->
+ try
+ {ssh_connection_handler,init,_} =
+ proplists:get_value(
+ '$initial_call',
+ proplists:get_value(
+ dictionary,
+ process_info(Pid, [dictionary])))
+ of
+ _ -> true
-underline(D, Str, LineChar) ->
- Len = lists:flatlength(Str),
- io:format(D, '~s~n',[Str]),
- line(D,Len,LineChar).
+ catch
+ _:_ ->
+ false
+ end.
+
+channels(Pid) ->
+ case is_connection_handler(Pid) of
+ true ->
+ ssh_connection_handler:info(Pid,all);
+ false ->
+ false
+ end.
+
+%%%================================================================
+underline(Str, LineChar) ->
+ io_lib:format('~s~n~*c~n',[Str, lists:flatlength(Str), LineChar]).
-line(D, Len, Char) ->
- io:format(D, '~*c~n', [Len,Char]).
-
datetime() ->
{{YYYY,MM,DD}, {H,M,S}} = calendar:now_to_universal_time(erlang:timestamp()),
@@ -196,8 +255,82 @@ datetime() ->
fmt_host_port({{A,B,C,D},Port}) -> io_lib:format('~p.~p.~p.~p:~p',[A,B,C,D,Port]);
fmt_host_port({Host,Port}) -> io_lib:format('~s:~p',[Host,Port]).
+%%%################################################################
+collect_pids() -> collect_pids(ssh_sup).
+
+collect_pids(P) ->
+ Collector = pcollect_pids(P, spawn(fun init_collector/0)),
+ Collector ! {get_values,self()},
+ receive
+ {values,Values} ->
+ Values
+ end.
+
+%%%----------------
+pcollect_pids(undefined, Collector) ->
+ Collector;
+
+pcollect_pids(A, Collector) when is_atom(A) ->
+ pcollect_pids(whereis(A), Collector);
+
+pcollect_pids(Pid, Collector) when is_pid(Pid) ->
+ Collector ! {expect,Pid},
+ spawn(fun() ->
+ lists:foreach(
+ fun(P2) ->
+ pcollect_pids(P2,Collector)
+ end, children(Pid)),
+ Collector ! {value,Pid,Pid}
+ end),
+ Collector;
+pcollect_pids({Ref,Pid,supervisor,_}, Collector) when is_pid(Pid),
+ is_reference(Ref) ->
+ pcollect_pids(Pid, Collector);
-nyi(D) ->
- io:format(D,'Not yet implemented~n',[]),
- nyi.
+pcollect_pids({sshc_sup,Pid,supervisor,_}, Collector) when is_pid(Pid) ->
+ pcollect_pids(Pid, Collector);
+
+pcollect_pids({sshd_sup,Pid,supervisor,_}, Collector) when is_pid(Pid) ->
+ pcollect_pids(Pid, Collector);
+
+pcollect_pids({{ssh_acceptor_sup,_,_,_},Pid,supervisor,_}, Collector) when is_pid(Pid) ->
+ pcollect_pids(Pid, Collector);
+
+pcollect_pids({{server,_,_,_},Pid,supervisor,_}, Collector) when is_pid(Pid) ->
+ pcollect_pids(Pid, Collector);
+
+pcollect_pids({{server,_,_,_,_},Pid,supervisor,_}, Collector) when is_pid(Pid) ->
+ pcollect_pids(Pid, Collector);
+
+pcollect_pids({undefined,Pid,supervisor,[ssh_connection_handler]}, Collector) ->
+ Collector ! {value,Pid,Pid},
+ case channels(Pid) of
+ {ok,L} ->
+ [Collector!{value,P,P} || #channel{user=P} <- L];
+ _ ->
+ ok
+ end,
+ Collector;
+
+pcollect_pids({_,Pid,_,_}, Collector) when is_pid(Pid) ->
+ Collector ! {value,Pid,Pid},
+ Collector;
+
+pcollect_pids(_, Collector) ->
+ Collector.
+
+%%%----------------
+init_collector() ->
+ loop_collector([],[]).
+
+loop_collector(Expects, Values) ->
+ receive
+ {expect, Ref} ->
+ loop_collector([Ref|Expects], Values);
+ {value, Ref, Val} ->
+ loop_collector(Expects--[Ref], [Val|Values]);
+ {get_values, From} when Expects==[] ->
+%% Values=/=[] ->
+ From ! {values,Values}
+ end.
diff --git a/lib/ssh/src/ssh_io.erl b/lib/ssh/src/ssh_io.erl
index 5e335c2063..1d8f370884 100644
--- a/lib/ssh/src/ssh_io.erl
+++ b/lib/ssh/src/ssh_io.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_message.erl b/lib/ssh/src/ssh_message.erl
index b6c4496be2..562f040477 100644
--- a/lib/ssh/src/ssh_message.erl
+++ b/lib/ssh/src/ssh_message.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,16 +32,46 @@
-export([encode/1, decode/1, decode_keyboard_interactive_prompts/2]).
+-define('2bin'(X), (if is_binary(X) -> X;
+ is_list(X) -> list_to_binary(X);
+ X==undefined -> <<>>
+ end) ).
+
+-define('E...'(X), ?'2bin'(X)/binary ).
+-define(Eboolean(X), ?BOOLEAN(case X of
+ true -> ?TRUE;
+ false -> ?FALSE
+ end) ).
+-define(Ebyte(X), ?BYTE(X) ).
+-define(Euint32(X), ?UINT32(X) ).
+-define(Estring(X), ?STRING(?'2bin'(X)) ).
+-define(Estring_utf8(X), ?string_utf8(X)/binary ).
+-define(Ename_list(X), ?STRING(ssh_bits:name_list(X)) ).
+-define(Empint(X), (ssh_bits:mpint(X))/binary ).
+-define(Ebinary(X), ?STRING(X) ).
+
+ucl(B) ->
+ try unicode:characters_to_list(B) of
+ L when is_list(L) -> L;
+ {error,_Matched,Rest} -> throw({error,{bad_unicode,Rest}})
+ catch
+ _:_ -> throw({error,bad_unicode})
+ end.
+
+-define(unicode_list(B), ucl(B)).
+
encode(#ssh_msg_global_request{
name = Name,
want_reply = Bool,
data = Data}) ->
- ssh_bits:encode([?SSH_MSG_GLOBAL_REQUEST,
- Name, Bool, Data], [byte, string, boolean, '...']);
+ <<?Ebyte(?SSH_MSG_GLOBAL_REQUEST), ?Estring(Name), ?Eboolean(Bool), ?'E...'(Data)>>;
+
encode(#ssh_msg_request_success{data = Data}) ->
- <<?BYTE(?SSH_MSG_REQUEST_SUCCESS), Data/binary>>;
+ <<?Ebyte(?SSH_MSG_REQUEST_SUCCESS), Data/binary>>;
+
encode(#ssh_msg_request_failure{}) ->
- <<?BYTE(?SSH_MSG_REQUEST_FAILURE)>>;
+ <<?Ebyte(?SSH_MSG_REQUEST_FAILURE)>>;
+
encode(#ssh_msg_channel_open{
channel_type = Type,
sender_channel = Sender,
@@ -49,9 +79,8 @@ encode(#ssh_msg_channel_open{
maximum_packet_size = Max,
data = Data
}) ->
- ssh_bits:encode([?SSH_MSG_CHANNEL_OPEN,
- Type, Sender, Window, Max, Data], [byte, string, uint32,
- uint32, uint32, '...']);
+ <<?Ebyte(?SSH_MSG_CHANNEL_OPEN), ?Estring(Type), ?Euint32(Sender), ?Euint32(Window), ?Euint32(Max), ?'E...'(Data)>>;
+
encode(#ssh_msg_channel_open_confirmation{
recipient_channel = Recipient,
sender_channel = Sender,
@@ -59,60 +88,63 @@ encode(#ssh_msg_channel_open_confirmation{
maximum_packet_size = MaxPacketSize,
data = Data
}) ->
- ssh_bits:encode([?SSH_MSG_CHANNEL_OPEN_CONFIRMATION, Recipient,
- Sender, InitWindowSize, MaxPacketSize, Data],
- [byte, uint32, uint32, uint32, uint32, '...']);
+ <<?Ebyte(?SSH_MSG_CHANNEL_OPEN_CONFIRMATION),
+ ?Euint32(Recipient), ?Euint32(Sender), ?Euint32(InitWindowSize), ?Euint32(MaxPacketSize),
+ ?'E...'(Data)>>;
+
encode(#ssh_msg_channel_open_failure{
recipient_channel = Recipient,
reason = Reason,
description = Desc,
lang = Lang
}) ->
- ssh_bits:encode([?SSH_MSG_CHANNEL_OPEN_FAILURE, Recipient,
- Reason, Desc, Lang], [byte, uint32, uint32, string, string]);
+ <<?Ebyte(?SSH_MSG_CHANNEL_OPEN_FAILURE), ?Euint32(Recipient),?Euint32(Reason), ?Estring(Desc), ?Estring(Lang)>>;
+
encode(#ssh_msg_channel_window_adjust{
recipient_channel = Recipient,
bytes_to_add = Bytes
}) ->
- ssh_bits:encode([?SSH_MSG_CHANNEL_WINDOW_ADJUST, Recipient, Bytes],
- [byte, uint32, uint32]);
+ <<?Ebyte(?SSH_MSG_CHANNEL_WINDOW_ADJUST), ?Euint32(Recipient), ?Euint32(Bytes)>>;
+
encode(#ssh_msg_channel_data{
recipient_channel = Recipient,
data = Data
}) ->
- ssh_bits:encode([?SSH_MSG_CHANNEL_DATA, Recipient, Data], [byte, uint32, binary]);
+ <<?Ebyte(?SSH_MSG_CHANNEL_DATA), ?Euint32(Recipient), ?Ebinary(Data)>>;
encode(#ssh_msg_channel_extended_data{
recipient_channel = Recipient,
data_type_code = DataType,
data = Data
}) ->
- ssh_bits:encode([?SSH_MSG_CHANNEL_EXTENDED_DATA, Recipient,
- DataType, Data], [byte, uint32, uint32, binary]);
+ <<?Ebyte(?SSH_MSG_CHANNEL_EXTENDED_DATA), ?Euint32(Recipient), ?Euint32(DataType), ?Ebinary(Data)>>;
encode(#ssh_msg_channel_eof{recipient_channel = Recipient
}) ->
- <<?BYTE(?SSH_MSG_CHANNEL_EOF), ?UINT32(Recipient)>>;
+ <<?Ebyte(?SSH_MSG_CHANNEL_EOF), ?Euint32(Recipient)>>;
+
encode(#ssh_msg_channel_close{
recipient_channel = Recipient
}) ->
- <<?BYTE(?SSH_MSG_CHANNEL_CLOSE), ?UINT32(Recipient)>>;
+ <<?Ebyte(?SSH_MSG_CHANNEL_CLOSE), ?Euint32(Recipient)>>;
+
encode(#ssh_msg_channel_request{
recipient_channel = Recipient,
request_type = Type,
want_reply = Bool,
data = Data
}) ->
- ssh_bits:encode([?SSH_MSG_CHANNEL_REQUEST, Recipient, Type, Bool, Data],
- [byte, uint32, string, boolean, '...']);
+ <<?Ebyte(?SSH_MSG_CHANNEL_REQUEST), ?Euint32(Recipient), ?Estring(Type), ?Eboolean(Bool), ?'E...'(Data)>>;
+
encode(#ssh_msg_channel_success{
recipient_channel = Recipient
}) ->
- <<?BYTE(?SSH_MSG_CHANNEL_SUCCESS), ?UINT32(Recipient)>>;
+ <<?Ebyte(?SSH_MSG_CHANNEL_SUCCESS), ?Euint32(Recipient)>>;
+
encode(#ssh_msg_channel_failure{
recipient_channel = Recipient
}) ->
- <<?BYTE(?SSH_MSG_CHANNEL_FAILURE), ?UINT32(Recipient)>>;
+ <<?Ebyte(?SSH_MSG_CHANNEL_FAILURE), ?Euint32(Recipient)>>;
encode(#ssh_msg_userauth_request{
user = User,
@@ -120,36 +152,33 @@ encode(#ssh_msg_userauth_request{
method = Method,
data = Data
}) ->
- ssh_bits:encode([?SSH_MSG_USERAUTH_REQUEST, User, Service, Method, Data],
- [byte, string_utf8, string, string, '...']);
+ <<?Ebyte(?SSH_MSG_USERAUTH_REQUEST), ?Estring_utf8(User), ?Estring(Service), ?Estring(Method), ?'E...'(Data)>>;
+
encode(#ssh_msg_userauth_failure{
authentications = Auths,
partial_success = Bool
}) ->
- ssh_bits:encode([?SSH_MSG_USERAUTH_FAILURE, Auths, Bool],
- [byte, string, boolean]);
+ <<?Ebyte(?SSH_MSG_USERAUTH_FAILURE), ?Estring(Auths), ?Eboolean(Bool)>>;
+
encode(#ssh_msg_userauth_success{}) ->
- <<?BYTE(?SSH_MSG_USERAUTH_SUCCESS)>>;
+ <<?Ebyte(?SSH_MSG_USERAUTH_SUCCESS)>>;
encode(#ssh_msg_userauth_banner{
message = Banner,
language = Lang
}) ->
- ssh_bits:encode([?SSH_MSG_USERAUTH_BANNER, Banner, Lang],
- [byte, string_utf8, string]);
+ <<?Ebyte(?SSH_MSG_USERAUTH_BANNER), ?Estring_utf8(Banner), ?Estring(Lang)>>;
encode(#ssh_msg_userauth_pk_ok{
algorithm_name = Alg,
key_blob = KeyBlob
}) ->
- ssh_bits:encode([?SSH_MSG_USERAUTH_PK_OK, Alg, KeyBlob],
- [byte, string, binary]);
+ <<?Ebyte(?SSH_MSG_USERAUTH_PK_OK), ?Estring(Alg), ?Ebinary(KeyBlob)>>;
encode(#ssh_msg_userauth_passwd_changereq{prompt = Prompt,
languge = Lang
})->
- ssh_bits:encode([?SSH_MSG_USERAUTH_PASSWD_CHANGEREQ, Prompt, Lang],
- [byte, string, string]);
+ <<?Ebyte(?SSH_MSG_USERAUTH_PASSWD_CHANGEREQ), ?Estring_utf8(Prompt), ?Estring(Lang)>>;
encode(#ssh_msg_userauth_info_request{
name = Name,
@@ -157,41 +186,37 @@ encode(#ssh_msg_userauth_info_request{
language_tag = Lang,
num_prompts = NumPromtps,
data = Data}) ->
- ssh_bits:encode([?SSH_MSG_USERAUTH_INFO_REQUEST, Name, Inst, Lang, NumPromtps, Data],
- [byte, string, string, string, uint32, '...']);
+ <<?Ebyte(?SSH_MSG_USERAUTH_INFO_REQUEST), ?Estring_utf8(Name), ?Estring_utf8(Inst), ?Estring(Lang),
+ ?Euint32(NumPromtps), ?'E...'(Data)>>;
encode(#ssh_msg_userauth_info_response{
num_responses = Num,
data = Data}) ->
- Responses = lists:map(fun("") ->
- <<>>;
- (Response) ->
- ssh_bits:encode([Response], [string])
- end, Data),
- Start = ssh_bits:encode([?SSH_MSG_USERAUTH_INFO_RESPONSE, Num],
- [byte, uint32]),
- iolist_to_binary([Start, Responses]);
+ lists:foldl(fun %%("", Acc) -> Acc; % commented out since it seem wrong
+ (Response, Acc) -> <<Acc/binary, ?Estring_utf8(Response)>>
+ end,
+ <<?Ebyte(?SSH_MSG_USERAUTH_INFO_RESPONSE), ?Euint32(Num)>>,
+ Data);
encode(#ssh_msg_disconnect{
code = Code,
description = Desc,
language = Lang
}) ->
- ssh_bits:encode([?SSH_MSG_DISCONNECT, Code, Desc, Lang],
- [byte, uint32, string, string]);
+ <<?Ebyte(?SSH_MSG_DISCONNECT), ?Euint32(Code), ?Estring_utf8(Desc), ?Estring(Lang)>>;
encode(#ssh_msg_service_request{
name = Service
}) ->
- ssh_bits:encode([?SSH_MSG_SERVICE_REQUEST, Service], [byte, string]);
+ <<?Ebyte(?SSH_MSG_SERVICE_REQUEST), ?Estring_utf8(Service)>>;
encode(#ssh_msg_service_accept{
name = Service
}) ->
- ssh_bits:encode([?SSH_MSG_SERVICE_ACCEPT, Service], [byte, string]);
+ <<?Ebyte(?SSH_MSG_SERVICE_ACCEPT), ?Estring_utf8(Service)>>;
encode(#ssh_msg_newkeys{}) ->
- <<?BYTE(?SSH_MSG_NEWKEYS)>>;
+ <<?Ebyte(?SSH_MSG_NEWKEYS)>>;
encode(#ssh_msg_kexinit{
cookie = Cookie,
@@ -208,19 +233,13 @@ encode(#ssh_msg_kexinit{
first_kex_packet_follows = Bool,
reserved = Reserved
}) ->
- ssh_bits:encode([?SSH_MSG_KEXINIT, Cookie, KeyAlgs, HostKeyAlgs, EncAlgC2S, EncAlgS2C,
- MacAlgC2S, MacAlgS2C, CompAlgS2C, CompAlgC2S, LangC2S, LangS2C, Bool,
- Reserved],
- [byte, cookie,
- name_list, name_list,
- name_list, name_list,
- name_list, name_list,
- name_list, name_list,
- name_list, name_list,
- boolean, uint32]);
+ <<?Ebyte(?SSH_MSG_KEXINIT), Cookie/binary,
+ ?Ename_list(KeyAlgs), ?Ename_list(HostKeyAlgs), ?Ename_list(EncAlgC2S), ?Ename_list(EncAlgS2C), ?Ename_list(MacAlgC2S),
+ ?Ename_list(MacAlgS2C), ?Ename_list(CompAlgS2C), ?Ename_list(CompAlgC2S), ?Ename_list(LangC2S), ?Ename_list(LangS2C),
+ ?Eboolean(Bool), ?Euint32(Reserved)>>;
encode(#ssh_msg_kexdh_init{e = E}) ->
- ssh_bits:encode([?SSH_MSG_KEXDH_INIT, E], [byte, mpint]);
+ <<?Ebyte(?SSH_MSG_KEXDH_INIT), ?Empint(E)>>;
encode(#ssh_msg_kexdh_reply{
public_host_key = Key,
@@ -229,25 +248,23 @@ encode(#ssh_msg_kexdh_reply{
}) ->
EncKey = public_key:ssh_encode(Key, ssh2_pubkey),
EncSign = encode_signature(Key, Signature),
- ssh_bits:encode([?SSH_MSG_KEXDH_REPLY, EncKey, F, EncSign], [byte, binary, mpint, binary]);
+ <<?Ebyte(?SSH_MSG_KEXDH_REPLY), ?Ebinary(EncKey), ?Empint(F), ?Ebinary(EncSign)>>;
encode(#ssh_msg_kex_dh_gex_request{
min = Min,
n = N,
max = Max
}) ->
- ssh_bits:encode([?SSH_MSG_KEX_DH_GEX_REQUEST, Min, N, Max],
- [byte, uint32, uint32, uint32]);
+ <<?Ebyte(?SSH_MSG_KEX_DH_GEX_REQUEST), ?Euint32(Min), ?Euint32(N), ?Euint32(Max)>>;
+
encode(#ssh_msg_kex_dh_gex_request_old{n = N}) ->
- ssh_bits:encode([?SSH_MSG_KEX_DH_GEX_REQUEST_OLD, N],
- [byte, uint32]);
+ <<?Ebyte(?SSH_MSG_KEX_DH_GEX_REQUEST_OLD), ?Euint32(N)>>;
encode(#ssh_msg_kex_dh_gex_group{p = Prime, g = Generator}) ->
- ssh_bits:encode([?SSH_MSG_KEX_DH_GEX_GROUP, Prime, Generator],
- [byte, mpint, mpint]);
+ <<?Ebyte(?SSH_MSG_KEX_DH_GEX_GROUP), ?Empint(Prime), ?Empint(Generator)>>;
encode(#ssh_msg_kex_dh_gex_init{e = Public}) ->
- ssh_bits:encode([?SSH_MSG_KEX_DH_GEX_INIT, Public], [byte, mpint]);
+ <<?Ebyte(?SSH_MSG_KEX_DH_GEX_INIT), ?Empint(Public)>>;
encode(#ssh_msg_kex_dh_gex_reply{
%% Will be private key encode_host_key extracts only the public part!
@@ -257,26 +274,26 @@ encode(#ssh_msg_kex_dh_gex_reply{
}) ->
EncKey = public_key:ssh_encode(Key, ssh2_pubkey),
EncSign = encode_signature(Key, Signature),
- ssh_bits:encode([?SSH_MSG_KEX_DH_GEX_REPLY, EncKey, F, EncSign], [byte, binary, mpint, binary]);
+ <<?Ebyte(?SSH_MSG_KEX_DH_GEX_REPLY), ?Ebinary(EncKey), ?Empint(F), ?Ebinary(EncSign)>>;
encode(#ssh_msg_kex_ecdh_init{q_c = Q_c}) ->
- ssh_bits:encode([?SSH_MSG_KEX_ECDH_INIT, Q_c], [byte, mpint]);
+ <<?Ebyte(?SSH_MSG_KEX_ECDH_INIT), ?Empint(Q_c)>>;
encode(#ssh_msg_kex_ecdh_reply{public_host_key = Key, q_s = Q_s, h_sig = Sign}) ->
EncKey = public_key:ssh_encode(Key, ssh2_pubkey),
EncSign = encode_signature(Key, Sign),
- ssh_bits:encode([?SSH_MSG_KEX_ECDH_REPLY, EncKey, Q_s, EncSign], [byte, binary, mpint, binary]);
+ <<?Ebyte(?SSH_MSG_KEX_ECDH_REPLY), ?Ebinary(EncKey), ?Empint(Q_s), ?Ebinary(EncSign)>>;
encode(#ssh_msg_ignore{data = Data}) ->
- ssh_bits:encode([?SSH_MSG_IGNORE, Data], [byte, string]);
+ <<?Ebyte(?SSH_MSG_IGNORE), ?Estring_utf8(Data)>>;
encode(#ssh_msg_unimplemented{sequence = Seq}) ->
- ssh_bits:encode([?SSH_MSG_UNIMPLEMENTED, Seq], [byte, uint32]);
+ <<?Ebyte(?SSH_MSG_UNIMPLEMENTED), ?Euint32(Seq)>>;
encode(#ssh_msg_debug{always_display = Bool,
message = Msg,
language = Lang}) ->
- ssh_bits:encode([?SSH_MSG_DEBUG, Bool, Msg, Lang], [byte, boolean, string, string]).
+ <<?Ebyte(?SSH_MSG_DEBUG), ?Eboolean(Bool), ?Estring_utf8(Msg), ?Estring(Lang)>>.
%% Connection Messages
@@ -315,7 +332,7 @@ decode(<<?BYTE(?SSH_MSG_CHANNEL_OPEN_FAILURE), ?UINT32(Recipient), ?UINT32(Reas
#ssh_msg_channel_open_failure{
recipient_channel = Recipient,
reason = Reason,
- description = unicode:characters_to_list(Desc),
+ description = ?unicode_list(Desc),
lang = Lang
};
decode(<<?BYTE(?SSH_MSG_CHANNEL_WINDOW_ADJUST), ?UINT32(Recipient), ?UINT32(Bytes)>>) ->
@@ -348,7 +365,7 @@ decode(<<?BYTE(?SSH_MSG_CHANNEL_REQUEST), ?UINT32(Recipient),
?DEC_BIN(RequestType,__0), ?BYTE(Bool), Data/binary>>) ->
#ssh_msg_channel_request{
recipient_channel = Recipient,
- request_type = unicode:characters_to_list(RequestType),
+ request_type = ?unicode_list(RequestType),
want_reply = erl_boolean(Bool),
data = Data
};
@@ -366,9 +383,9 @@ decode(<<?BYTE(?SSH_MSG_USERAUTH_REQUEST),
?DEC_BIN(User,__0), ?DEC_BIN(Service,__1), ?DEC_BIN(Method,__2),
Data/binary>>) ->
#ssh_msg_userauth_request{
- user = unicode:characters_to_list(User),
- service = unicode:characters_to_list(Service),
- method = unicode:characters_to_list(Method),
+ user = ?unicode_list(User),
+ service = ?unicode_list(Service),
+ method = ?unicode_list(Method),
data = Data
};
@@ -376,7 +393,7 @@ decode(<<?BYTE(?SSH_MSG_USERAUTH_FAILURE),
?DEC_BIN(Auths,__0),
?BYTE(Bool)>>) ->
#ssh_msg_userauth_failure {
- authentications = unicode:characters_to_list(Auths),
+ authentications = ?unicode_list(Auths),
partial_success = erl_boolean(Bool)
};
@@ -478,18 +495,18 @@ decode(<<"ecdh",?BYTE(?SSH_MSG_KEX_ECDH_REPLY),
decode(<<?SSH_MSG_SERVICE_REQUEST, ?DEC_BIN(Service,__0)>>) ->
#ssh_msg_service_request{
- name = unicode:characters_to_list(Service)
+ name = ?unicode_list(Service)
};
decode(<<?SSH_MSG_SERVICE_ACCEPT, ?DEC_BIN(Service,__0)>>) ->
#ssh_msg_service_accept{
- name = unicode:characters_to_list(Service)
+ name = ?unicode_list(Service)
};
decode(<<?BYTE(?SSH_MSG_DISCONNECT), ?UINT32(Code), ?DEC_BIN(Desc,__0), ?DEC_BIN(Lang,__1)>>) ->
#ssh_msg_disconnect{
code = Code,
- description = unicode:characters_to_list(Desc),
+ description = ?unicode_list(Desc),
language = Lang
};
@@ -497,7 +514,7 @@ decode(<<?BYTE(?SSH_MSG_DISCONNECT), ?UINT32(Code), ?DEC_BIN(Desc,__0), ?DEC_BIN
decode(<<?BYTE(?SSH_MSG_DISCONNECT), ?UINT32(Code), ?DEC_BIN(Desc,__0)>>) ->
#ssh_msg_disconnect{
code = Code,
- description = unicode:characters_to_list(Desc),
+ description = ?unicode_list(Desc),
language = <<"en">>
};
@@ -539,7 +556,7 @@ decode_kex_init(<<?BYTE(Bool)>>, Acc, 0) ->
X = 0,
list_to_tuple(lists:reverse([X, erl_boolean(Bool) | Acc]));
decode_kex_init(<<?DEC_BIN(Data,__0), Rest/binary>>, Acc, N) ->
- Names = string:tokens(unicode:characters_to_list(Data), ","),
+ Names = string:tokens(?unicode_list(Data), ","),
decode_kex_init(Rest, [Names | Acc], N -1).
@@ -553,10 +570,10 @@ decode_signature(<<?DEC_BIN(_Alg,__0), ?UINT32(_), Signature/binary>>) ->
encode_signature(#'RSAPublicKey'{}, Signature) ->
- ssh_bits:encode(["ssh-rsa", Signature],[string, binary]);
+ <<?Ebinary(<<"ssh-rsa">>), ?Ebinary(Signature)>>;
encode_signature({_, #'Dss-Parms'{}}, Signature) ->
- ssh_bits:encode(["ssh-dss", Signature],[string, binary]);
+ <<?Ebinary(<<"ssh-dss">>), ?Ebinary(Signature)>>;
encode_signature({#'ECPoint'{}, {namedCurve,OID}}, Signature) ->
CurveName = public_key:oid2ssh_curvename(OID),
- ssh_bits:encode([<<"ecdsa-sha2-",CurveName/binary>>, Signature], [binary,binary]).
+ <<?Ebinary(<<"ecdsa-sha2-",CurveName/binary>>), ?Ebinary(Signature)>>.
diff --git a/lib/ssh/src/ssh_no_io.erl b/lib/ssh/src/ssh_no_io.erl
index e8d1afd0ed..1da257ed99 100644
--- a/lib/ssh/src/ssh_no_io.erl
+++ b/lib/ssh/src/ssh_no_io.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,27 +27,39 @@
-export([yes_no/2, read_password/2, read_line/2, format/2]).
+
+-spec yes_no(any(), any()) -> no_return().
+
yes_no(_, _) ->
- throw({{no_io_allowed, yes_no},
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
- description = "User interaction is not allowed",
- language = "en"}}).
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
+ description = "User interaction is not allowed"},
+ {no_io_allowed, yes_no}).
+
+
+-spec read_password(any(), any()) -> no_return().
read_password(_, _) ->
- throw({{no_io_allowed, read_password},
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
- description = "User interaction is not allowed",
- language = "en"}}).
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
+ description = "User interaction is not allowed"},
+ {no_io_allowed, read_password}).
+
+
+-spec read_line(any(), any()) -> no_return().
read_line(_, _) ->
- throw({{no_io_allowed, read_line},
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
- description = "User interaction is not allowed",
- language = "en"}} ).
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
+ description = "User interaction is not allowed"},
+ {no_io_allowed, read_line}).
+
+
+-spec format(any(), any()) -> no_return().
format(_, _) ->
- throw({{no_io_allowed, format},
- #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
- description = "User interaction is not allowed",
- language = "en"}}).
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_SERVICE_NOT_AVAILABLE,
+ description = "User interaction is not allowed"},
+ {no_io_allowed, format}).
diff --git a/lib/ssh/src/ssh_server_key.erl b/lib/ssh/src/ssh_server_key.erl
index 4ab326374a..2ce0c7e3fe 100644
--- a/lib/ssh/src/ssh_server_key.erl
+++ b/lib/ssh/src/ssh_server_key.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_server_key_api.erl b/lib/ssh/src/ssh_server_key_api.erl
index 7c05d82c03..3f1b886fa7 100644
--- a/lib/ssh/src/ssh_server_key_api.erl
+++ b/lib/ssh/src/ssh_server_key_api.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,9 +23,16 @@
-include_lib("public_key/include/public_key.hrl").
-include("ssh.hrl").
--callback host_key(Algorithm :: 'ssh-rsa'| 'ssh-dss'| atom(), DaemonOptions :: proplists:proplist()) ->
- {ok, PrivateKey :: #'RSAPrivateKey'{}| #'DSAPrivateKey'{} | term()} | {error, string()}.
+-export_type([algorithm/0]).
--callback is_auth_key(PublicKey :: #'RSAPublicKey'{}| {integer(), #'Dss-Parms'{}}| term(),
- User :: string(), DaemonOptions :: proplists:proplist()) ->
+-type algorithm() :: ssh_client_key_api:algorithm().
+
+
+-callback host_key(Algorithm :: algorithm(),
+ DaemonOptions :: proplists:proplist()) ->
+ {ok, PrivateKey :: public_key:private_key()} | {error, term()}.
+
+-callback is_auth_key(PublicKey :: public_key:public_key(),
+ User :: string(),
+ DaemonOptions :: proplists:proplist()) ->
boolean().
diff --git a/lib/ssh/src/ssh_sftp.erl b/lib/ssh/src/ssh_sftp.erl
index dbacf730cc..afc2fb88ff 100644
--- a/lib/ssh/src/ssh_sftp.erl
+++ b/lib/ssh/src/ssh_sftp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -95,12 +95,35 @@
%%====================================================================
start_channel(Cm) when is_pid(Cm) ->
start_channel(Cm, []);
+start_channel(Socket) when is_port(Socket) ->
+ start_channel(Socket, []);
start_channel(Host) when is_list(Host) ->
start_channel(Host, []).
+
+start_channel(Socket, Options) when is_port(Socket) ->
+ Timeout =
+ %% A mixture of ssh:connect and ssh_sftp:start_channel:
+ case proplists:get_value(connect_timeout, Options, undefined) of
+ undefined ->
+ proplists:get_value(timeout, Options, infinity);
+ TO ->
+ TO
+ end,
+ case ssh:connect(Socket, Options, Timeout) of
+ {ok,Cm} ->
+ case start_channel(Cm, Options) of
+ {ok, Pid} ->
+ {ok, Pid, Cm};
+ Error ->
+ Error
+ end;
+ Error ->
+ Error
+ end;
start_channel(Cm, Opts) when is_pid(Cm) ->
Timeout = proplists:get_value(timeout, Opts, infinity),
- {_, SftpOpts} = handle_options(Opts, [], []),
- case ssh_xfer:attach(Cm, []) of
+ {_, ChanOpts, SftpOpts} = handle_options(Opts, [], [], []),
+ case ssh_xfer:attach(Cm, [], ChanOpts) of
{ok, ChannelId, Cm} ->
case ssh_channel:start(Cm, ChannelId,
?MODULE, [Cm, ChannelId, SftpOpts]) of
@@ -123,9 +146,9 @@ start_channel(Cm, Opts) when is_pid(Cm) ->
start_channel(Host, Opts) ->
start_channel(Host, 22, Opts).
start_channel(Host, Port, Opts) ->
- {SshOpts, SftpOpts} = handle_options(Opts, [], []),
+ {SshOpts, ChanOpts, SftpOpts} = handle_options(Opts, [], [], []),
Timeout = proplists:get_value(timeout, SftpOpts, infinity),
- case ssh_xfer:connect(Host, Port, SshOpts, Timeout) of
+ case ssh_xfer:connect(Host, Port, SshOpts, ChanOpts, Timeout) of
{ok, ChannelId, Cm} ->
case ssh_channel:start(Cm, ChannelId, ?MODULE, [Cm,
ChannelId, SftpOpts]) of
@@ -842,14 +865,18 @@ terminate(_Reason, State) ->
%%====================================================================
%% Internal functions
%%====================================================================
-handle_options([], Sftp, Ssh) ->
- {Ssh, Sftp};
-handle_options([{timeout, _} = Opt | Rest], Sftp, Ssh) ->
- handle_options(Rest, [Opt | Sftp], Ssh);
-handle_options([{sftp_vsn, _} = Opt| Rest], Sftp, Ssh) ->
- handle_options(Rest, [Opt | Sftp], Ssh);
-handle_options([Opt | Rest], Sftp, Ssh) ->
- handle_options(Rest, Sftp, [Opt | Ssh]).
+handle_options([], Sftp, Chan, Ssh) ->
+ {Ssh, Chan, Sftp};
+handle_options([{timeout, _} = Opt | Rest], Sftp, Chan, Ssh) ->
+ handle_options(Rest, [Opt|Sftp], Chan, Ssh);
+handle_options([{sftp_vsn, _} = Opt| Rest], Sftp, Chan, Ssh) ->
+ handle_options(Rest, [Opt|Sftp], Chan, Ssh);
+handle_options([{window_size, _} = Opt| Rest], Sftp, Chan, Ssh) ->
+ handle_options(Rest, Sftp, [Opt|Chan], Ssh);
+handle_options([{packet_size, _} = Opt| Rest], Sftp, Chan, Ssh) ->
+ handle_options(Rest, Sftp, [Opt|Chan], Ssh);
+handle_options([Opt|Rest], Sftp, Chan, Ssh) ->
+ handle_options(Rest, Sftp, Chan, [Opt|Ssh]).
call(Pid, Msg, TimeOut) ->
ssh_channel:call(Pid, {{timeout, TimeOut}, Msg}, infinity).
diff --git a/lib/ssh/src/ssh_sftpd.erl b/lib/ssh/src/ssh_sftpd.erl
index 819cba697e..dca018f20f 100644
--- a/lib/ssh/src/ssh_sftpd.erl
+++ b/lib/ssh/src/ssh_sftpd.erl
@@ -57,6 +57,22 @@
%%====================================================================
%% API
%%====================================================================
+-spec init(Args :: term()) ->
+ {ok, State :: term()} | {ok, State :: term(), timeout() | hibernate} |
+ {stop, Reason :: term()} | ignore.
+
+-spec terminate(Reason :: (normal | shutdown | {shutdown, term()} |
+ term()),
+ State :: term()) ->
+ term().
+
+-spec handle_msg(Msg ::term(), State :: term()) ->
+ {ok, State::term()} | {stop, ChannelId::integer(), State::term()}.
+-spec handle_ssh_msg({ssh_cm, ConnectionRef::term(), SshMsg::term()},
+ State::term()) -> {ok, State::term()} |
+ {stop, ChannelId::integer(),
+ State::term()}.
+
subsystem_spec(Options) ->
{"sftp", {?MODULE, Options}}.
diff --git a/lib/ssh/src/ssh_sftpd_file.erl b/lib/ssh/src/ssh_sftpd_file.erl
index a287e8891b..311cdc1a3d 100644
--- a/lib/ssh/src/ssh_sftpd_file.erl
+++ b/lib/ssh/src/ssh_sftpd_file.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_sftpd_file_api.erl b/lib/ssh/src/ssh_sftpd_file_api.erl
index c61d4e7ecf..78f452df67 100644
--- a/lib/ssh/src/ssh_sftpd_file_api.erl
+++ b/lib/ssh/src/ssh_sftpd_file_api.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_shell.erl b/lib/ssh/src/ssh_shell.erl
index 22ad4da948..17224b6ef4 100644
--- a/lib/ssh/src/ssh_shell.erl
+++ b/lib/ssh/src/ssh_shell.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,6 +45,21 @@
%%====================================================================
%% ssh_channel callbacks
%%====================================================================
+-spec init(Args :: term()) ->
+ {ok, State :: term()} | {ok, State :: term(), timeout() | hibernate} |
+ {stop, Reason :: term()} | ignore.
+
+-spec terminate(Reason :: (normal | shutdown | {shutdown, term()} |
+ term()),
+ State :: term()) ->
+ term().
+
+-spec handle_msg(Msg ::term(), State :: term()) ->
+ {ok, State::term()} | {stop, ChannelId::integer(), State::term()}.
+-spec handle_ssh_msg({ssh_cm, ConnectionRef::term(), SshMsg::term()},
+ State::term()) -> {ok, State::term()} |
+ {stop, ChannelId::integer(),
+ State::term()}.
%%--------------------------------------------------------------------
%% Function: init(Args) -> {ok, State}
diff --git a/lib/ssh/src/ssh_subsystem_sup.erl b/lib/ssh/src/ssh_subsystem_sup.erl
index ebe33ec7da..637f5f398f 100644
--- a/lib/ssh/src/ssh_subsystem_sup.erl
+++ b/lib/ssh/src/ssh_subsystem_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -51,6 +51,8 @@ channel_supervisor(SupPid) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init([Opts]) ->
RestartStrategy = one_for_all,
MaxR = 0,
diff --git a/lib/ssh/src/ssh_sup.erl b/lib/ssh/src/ssh_sup.erl
index 649ea00a06..8b57387589 100644
--- a/lib/ssh/src/ssh_sup.erl
+++ b/lib/ssh/src/ssh_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,6 +31,8 @@
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init([]) ->
SupFlags = {one_for_one, 10, 3600},
Children = children(),
diff --git a/lib/ssh/src/ssh_system_sup.erl b/lib/ssh/src/ssh_system_sup.erl
index 18a5d8071a..e97ac7b01a 100644
--- a/lib/ssh/src/ssh_system_sup.erl
+++ b/lib/ssh/src/ssh_system_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -125,11 +125,16 @@ restart_acceptor(Address, Port, Profile) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init([ServerOpts]) ->
RestartStrategy = one_for_one,
MaxR = 0,
MaxT = 3600,
- Children = child_specs(ServerOpts),
+ Children = case proplists:get_value(asocket,ServerOpts) of
+ undefined -> child_specs(ServerOpts);
+ _ -> []
+ end,
{ok, {{RestartStrategy, MaxR, MaxT}, Children}}.
%%%=========================================================================
@@ -192,6 +197,9 @@ stop_acceptor(Sup) ->
[{Name, AcceptorSup}] =
[{SupName, ASup} || {SupName, ASup, _, [ssh_acceptor_sup]} <-
supervisor:which_children(Sup)],
- supervisor:terminate_child(AcceptorSup, Name).
-
-
+ case supervisor:terminate_child(AcceptorSup, Name) of
+ ok ->
+ supervisor:delete_child(AcceptorSup, Name);
+ Error ->
+ Error
+ end.
diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl
index 18037b8461..7cb3b75ac0 100644
--- a/lib/ssh/src/ssh_transport.erl
+++ b/lib/ssh/src/ssh_transport.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,6 +52,14 @@
-export([pack/3]).
-export([decompress/2, decrypt_blocks/3, is_valid_mac/3 ]). % FIXME: remove
+-define(Estring(X), ?STRING((if is_binary(X) -> X;
+ is_list(X) -> list_to_binary(X);
+ X==undefined -> <<>>
+ end))).
+-define(Empint(X), (ssh_bits:mpint(X))/binary ).
+-define(Ebinary(X), ?STRING(X) ).
+-define(Euint32(X), ?UINT32(X) ).
+
%%%----------------------------------------------------------------------------
%%%
%%% There is a difference between supported and default algorithms. The
@@ -257,7 +265,8 @@ new_keys_message(Ssh0) ->
{SshPacket, Ssh} =
ssh_packet(#ssh_msg_newkeys{}, Ssh0),
{ok, SshPacket, Ssh}.
-
+
+
handle_kexinit_msg(#ssh_msg_kexinit{} = CounterPart, #ssh_msg_kexinit{} = Own,
#ssh{role = client} = Ssh0) ->
{ok, Algoritms} = select_algorithm(client, Own, CounterPart),
@@ -267,10 +276,10 @@ handle_kexinit_msg(#ssh_msg_kexinit{} = CounterPart, #ssh_msg_kexinit{} = Own,
Ssh0#ssh{algorithms = Algoritms});
_ ->
%% TODO: Correct code?
- throw(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Selection of key exchange"
- " algorithm failed",
- language = ""})
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Selection of key exchange algorithm failed"
+ })
end;
handle_kexinit_msg(#ssh_msg_kexinit{} = CounterPart, #ssh_msg_kexinit{} = Own,
@@ -280,10 +289,10 @@ handle_kexinit_msg(#ssh_msg_kexinit{} = CounterPart, #ssh_msg_kexinit{} = Own,
true ->
{ok, Ssh#ssh{algorithms = Algoritms}};
_ ->
- throw(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Selection of key exchange"
- " algorithm failed",
- language = ""})
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Selection of key exchange algorithm failed"
+ })
end.
@@ -363,12 +372,12 @@ handle_kexdh_init(#ssh_msg_kexdh_init{e = E},
session_id = sid(Ssh1, H)}};
true ->
- throw({{error,bad_e_from_peer},
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed, 'e' out of bounds",
- language = ""}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed, 'e' out of bounds"},
+ {error,bad_e_from_peer}
+ )
end.
handle_kexdh_reply(#ssh_msg_kexdh_reply{public_host_key = PeerPubHostKey,
@@ -388,21 +397,20 @@ handle_kexdh_reply(#ssh_msg_kexdh_reply{public_host_key = PeerPubHostKey,
exchanged_hash = H,
session_id = sid(Ssh, H)}};
Error ->
- throw({Error,
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed",
- language = "en"}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed"},
+ Error)
end;
true ->
- throw({{error,bad_f_from_peer},
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed, 'f' out of bounds",
- language = ""}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed, 'f' out of bounds"},
+ bad_f_from_peer
+ )
end.
@@ -427,10 +435,11 @@ handle_kex_dh_gex_request(#ssh_msg_kex_dh_gex_request{min = Min0,
keyex_info = {Min, Max, NBits}
}};
{error,_} ->
- throw(#ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "No possible diffie-hellman-group-exchange group found",
- language = ""})
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = "No possible diffie-hellman-group-exchange group found"
+ })
end;
handle_kex_dh_gex_request(#ssh_msg_kex_dh_gex_request_old{n = NBits},
@@ -461,19 +470,19 @@ handle_kex_dh_gex_request(#ssh_msg_kex_dh_gex_request_old{n = NBits},
keyex_info = {-1, -1, NBits} % flag for kex_h hash calc
}};
{error,_} ->
- throw(#ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "No possible diffie-hellman-group-exchange group found",
- language = ""})
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = "No possible diffie-hellman-group-exchange group found"
+ })
end;
handle_kex_dh_gex_request(_, _) ->
- throw({{error,bad_ssh_msg_kex_dh_gex_request},
+ ssh_connection_handler:disconnect(
#ssh_msg_disconnect{
code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed, bad values in ssh_msg_kex_dh_gex_request",
- language = ""}
- }).
+ description = "Key exchange failed, bad values in ssh_msg_kex_dh_gex_request"},
+ bad_ssh_msg_kex_dh_gex_request).
adjust_gex_min_max(Min0, Max0, Opts) ->
@@ -487,10 +496,11 @@ adjust_gex_min_max(Min0, Max0, Opts) ->
Min2 =< Max2 ->
{Min2, Max2};
Max2 < Min2 ->
- throw(#ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "No possible diffie-hellman-group-exchange group possible",
- language = ""})
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = "No possible diffie-hellman-group-exchange group possible"
+ })
end
end.
@@ -527,20 +537,18 @@ handle_kex_dh_gex_init(#ssh_msg_kex_dh_gex_init{e = E},
session_id = sid(Ssh, H)
}};
true ->
- throw({{error,bad_K},
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed, 'K' out of bounds",
- language = ""}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed, 'K' out of bounds"},
+ bad_K)
end;
true ->
- throw({{error,bad_e_from_peer},
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed, 'e' out of bounds",
- language = ""}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed, 'e' out of bounds"},
+ bad_e_from_peer)
end.
handle_kex_dh_gex_reply(#ssh_msg_kex_dh_gex_reply{public_host_key = PeerPubHostKey,
@@ -564,29 +572,28 @@ handle_kex_dh_gex_reply(#ssh_msg_kex_dh_gex_reply{public_host_key = PeerPubHostK
exchanged_hash = H,
session_id = sid(Ssh, H)}};
_Error ->
- throw(#ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed",
- language = ""}
- )
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed"
+ })
end;
true ->
- throw({{error,bad_K},
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed, 'K' out of bounds",
- language = ""}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed, 'K' out of bounds"},
+ bad_K)
end;
true ->
- throw({{error,bad_f_from_peer},
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed, 'f' out of bounds",
- language = ""}
- })
- end.
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed, 'f' out of bounds"},
+ bad_f_from_peer
+ )
+ end.
%%%----------------------------------------------------------------
%%%
@@ -616,12 +623,11 @@ handle_kex_ecdh_init(#ssh_msg_kex_ecdh_init{q_c = PeerPublic},
session_id = sid(Ssh1, H)}}
catch
_:_ ->
- throw({{error,invalid_peer_public_key},
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Peer ECDH public key is invalid",
- language = ""}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Peer ECDH public key is invalid"},
+ invalid_peer_public_key)
end.
handle_kex_ecdh_reply(#ssh_msg_kex_ecdh_reply{public_host_key = PeerPubHostKey,
@@ -642,21 +648,19 @@ handle_kex_ecdh_reply(#ssh_msg_kex_ecdh_reply{public_host_key = PeerPubHostKey,
exchanged_hash = H,
session_id = sid(Ssh, H)}};
Error ->
- throw({Error,
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Key exchange failed",
- language = ""}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Key exchange failed"},
+ Error)
end
catch
_:_ ->
- throw({{error,invalid_peer_public_key},
- #ssh_msg_disconnect{
- code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
- description = "Peer ECDH public key is invalid",
- language = ""}
- })
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{
+ code = ?SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
+ description = "Peer ECDH public key is invalid"},
+ invalid_peer_public_key)
end.
@@ -667,9 +671,10 @@ handle_new_keys(#ssh_msg_newkeys{}, Ssh0) ->
{ok, Ssh}
catch
_C:_Error -> %% TODO: Throw earlier ....
- throw(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = "Install alg failed",
- language = "en"})
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = "Install alg failed"
+ })
end.
%% select session id
@@ -921,9 +926,9 @@ select_all(CL, SL) when length(CL) + length(SL) < ?MAX_NUM_ALGORITHMS ->
lists:map(fun(ALG) -> list_to_atom(ALG) end, (CL -- A));
select_all(CL, SL) ->
Err = lists:concat(["Received too many algorithms (",length(CL),"+",length(SL)," >= ",?MAX_NUM_ALGORITHMS,")."]),
- throw(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
- description = Err,
- language = ""}).
+ ssh_connection_handler:disconnect(
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_PROTOCOL_ERROR,
+ description = Err}).
select([], []) ->
@@ -1034,7 +1039,7 @@ handle_packet_part(DecryptedPfx, EncryptedBuffer, TotalNeeded,
{bad_mac, Ssh1};
true ->
{Ssh, DecompressedPayload} = decompress(Ssh1, payload(DecryptedPacket)),
- {decoded, DecompressedPayload, NextPacketBytes, Ssh}
+ {packet_decrypted, DecompressedPayload, NextPacketBytes, Ssh}
end;
aead ->
PacketLenBin = DecryptedPfx,
@@ -1044,7 +1049,7 @@ handle_packet_part(DecryptedPfx, EncryptedBuffer, TotalNeeded,
{Ssh1, DecryptedSfx} ->
DecryptedPacket = <<DecryptedPfx/binary, DecryptedSfx/binary>>,
{Ssh, DecompressedPayload} = decompress(Ssh1, payload(DecryptedPacket)),
- {decoded, DecompressedPayload, NextPacketBytes, Ssh}
+ {packet_decrypted, DecompressedPayload, NextPacketBytes, Ssh}
end
end.
@@ -1084,7 +1089,7 @@ sign(SigData, Hash, #'DSAPrivateKey'{} = Key) ->
sign(SigData, Hash, Key = #'ECPrivateKey'{}) ->
DerEncodedSign = public_key:sign(SigData, Hash, Key),
#'ECDSA-Sig-Value'{r=R, s=S} = public_key:der_decode('ECDSA-Sig-Value', DerEncodedSign),
- ssh_bits:encode([R,S], [mpint,mpint]);
+ <<?Empint(R),?Empint(S)>>;
sign(SigData, Hash, Key) ->
public_key:sign(SigData, Hash, Key).
@@ -1584,21 +1589,16 @@ hash(K, H, Ki, N, HASH) ->
kex_h(SSH, Key, E, F, K) ->
KeyBin = public_key:ssh_encode(Key, ssh2_pubkey),
- L = ssh_bits:encode([SSH#ssh.c_version, SSH#ssh.s_version,
- SSH#ssh.c_keyinit, SSH#ssh.s_keyinit,
- KeyBin, E,F,K],
- [string,string,binary,binary,binary,
- mpint,mpint,mpint]),
+ L = <<?Estring(SSH#ssh.c_version), ?Estring(SSH#ssh.s_version),
+ ?Ebinary(SSH#ssh.c_keyinit), ?Ebinary(SSH#ssh.s_keyinit), ?Ebinary(KeyBin),
+ ?Empint(E), ?Empint(F), ?Empint(K)>>,
crypto:hash(sha((SSH#ssh.algorithms)#alg.kex), L).
-%% crypto:hash(sha,L).
kex_h(SSH, Curve, Key, Q_c, Q_s, K) ->
KeyBin = public_key:ssh_encode(Key, ssh2_pubkey),
- L = ssh_bits:encode([SSH#ssh.c_version, SSH#ssh.s_version,
- SSH#ssh.c_keyinit, SSH#ssh.s_keyinit,
- KeyBin, Q_c, Q_s, K],
- [string,string,binary,binary,binary,
- mpint,mpint,mpint]),
+ L = <<?Estring(SSH#ssh.c_version), ?Estring(SSH#ssh.s_version),
+ ?Ebinary(SSH#ssh.c_keyinit), ?Ebinary(SSH#ssh.s_keyinit), ?Ebinary(KeyBin),
+ ?Empint(Q_c), ?Empint(Q_s), ?Empint(K)>>,
crypto:hash(sha(Curve), L).
kex_h(SSH, Key, Min, NBits, Max, Prime, Gen, E, F, K) ->
@@ -1607,21 +1607,14 @@ kex_h(SSH, Key, Min, NBits, Max, Prime, Gen, E, F, K) ->
%% flag from 'ssh_msg_kex_dh_gex_request_old'
%% It was like this before that message was supported,
%% why?
- Ts = [string,string,binary,binary,binary,
- uint32,
- mpint,mpint,mpint,mpint,mpint],
- ssh_bits:encode([SSH#ssh.c_version,SSH#ssh.s_version,
- SSH#ssh.c_keyinit,SSH#ssh.s_keyinit,
- KeyBin, NBits, Prime, Gen, E,F,K],
- Ts);
+ <<?Estring(SSH#ssh.c_version), ?Estring(SSH#ssh.s_version),
+ ?Ebinary(SSH#ssh.c_keyinit), ?Ebinary(SSH#ssh.s_keyinit), ?Ebinary(KeyBin),
+ ?Empint(E), ?Empint(F), ?Empint(K)>>;
true ->
- Ts = [string,string,binary,binary,binary,
- uint32,uint32,uint32,
- mpint,mpint,mpint,mpint,mpint],
- ssh_bits:encode([SSH#ssh.c_version,SSH#ssh.s_version,
- SSH#ssh.c_keyinit,SSH#ssh.s_keyinit,
- KeyBin, Min, NBits, Max,
- Prime, Gen, E,F,K], Ts)
+ <<?Estring(SSH#ssh.c_version), ?Estring(SSH#ssh.s_version),
+ ?Ebinary(SSH#ssh.c_keyinit), ?Ebinary(SSH#ssh.s_keyinit), ?Ebinary(KeyBin),
+ ?Euint32(Min), ?Euint32(NBits), ?Euint32(Max),
+ ?Empint(Prime), ?Empint(Gen), ?Empint(E), ?Empint(F), ?Empint(K)>>
end,
crypto:hash(sha((SSH#ssh.algorithms)#alg.kex), L).
diff --git a/lib/ssh/src/ssh_transport.hrl b/lib/ssh/src/ssh_transport.hrl
index fd43326f0d..f91cb1dd63 100644
--- a/lib/ssh/src/ssh_transport.hrl
+++ b/lib/ssh/src/ssh_transport.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_userauth.hrl b/lib/ssh/src/ssh_userauth.hrl
index 935999b9d1..2cfc1f0f83 100644
--- a/lib/ssh/src/ssh_userauth.hrl
+++ b/lib/ssh/src/ssh_userauth.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/ssh_xfer.erl b/lib/ssh/src/ssh_xfer.erl
index b8dff1c533..e1680c120e 100644
--- a/lib/ssh/src/ssh_xfer.erl
+++ b/lib/ssh/src/ssh_xfer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@
-module(ssh_xfer).
--export([attach/2, connect/3, connect/4]).
+-export([attach/2, attach/3, connect/3, connect/4, connect/5]).
-export([open/6, opendir/3, readdir/3, close/3, read/5, write/5,
rename/5, remove/3, mkdir/4, rmdir/3, realpath/3, extended/4,
stat/4, fstat/4, lstat/4, setstat/4,
@@ -47,28 +47,38 @@
-define(is_set(F, Bits),
((F) band (Bits)) == (F)).
--define(XFER_PACKET_SIZE, 32768).
--define(XFER_WINDOW_SIZE, 4*?XFER_PACKET_SIZE).
+-define(XFER_PACKET_SIZE, 65536).
+-define(XFER_WINDOW_SIZE, 20*?XFER_PACKET_SIZE).
attach(CM, Opts) ->
- open_xfer(CM, Opts).
+ open_xfer(CM, Opts, []).
+
+attach(CM, Opts, ChanOpts) ->
+ open_xfer(CM, Opts, ChanOpts).
+
connect(Host, Port, Opts) ->
case ssh:connect(Host, Port, Opts) of
- {ok, CM} -> open_xfer(CM, Opts);
+ {ok, CM} -> open_xfer(CM, Opts, []);
Error -> Error
end.
connect(Host, Port, Opts, Timeout) ->
+ connect(Host, Port, Opts, [], Timeout).
+
+connect(Host, Port, Opts, ChanOpts, Timeout) ->
case ssh:connect(Host, Port, Opts, Timeout) of
- {ok, CM} -> open_xfer(CM, [{timeout, Timeout}|Opts]);
+ {ok, CM} -> open_xfer(CM, [{timeout, Timeout}|Opts], ChanOpts);
{error, Timeout} -> {error, timeout};
Error -> Error
end.
-open_xfer(CM, Opts) ->
+
+open_xfer(CM, Opts, ChanOpts) ->
TMO = proplists:get_value(timeout, Opts, infinity),
- case ssh_connection:session_channel(CM, ?XFER_WINDOW_SIZE, ?XFER_PACKET_SIZE, TMO) of
+ WindowSize = proplists:get_value(window_size, ChanOpts, ?XFER_WINDOW_SIZE),
+ PacketSize = proplists:get_value(packet_size, ChanOpts, ?XFER_PACKET_SIZE),
+ case ssh_connection:session_channel(CM, WindowSize, PacketSize, TMO) of
{ok, ChannelId} ->
{ok, ChannelId, CM};
Error ->
diff --git a/lib/ssh/src/ssh_xfer.hrl b/lib/ssh/src/ssh_xfer.hrl
index fe1405ccae..a76e9151db 100644
--- a/lib/ssh/src/ssh_xfer.hrl
+++ b/lib/ssh/src/ssh_xfer.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/src/sshc_sup.erl b/lib/ssh/src/sshc_sup.erl
index 8ee6aacfb5..15858f36e1 100644
--- a/lib/ssh/src/sshc_sup.erl
+++ b/lib/ssh/src/sshc_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -51,6 +51,8 @@ stop_child(Client) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init(Args) ->
RestartStrategy = simple_one_for_one,
MaxR = 0,
@@ -64,7 +66,7 @@ child_spec(_) ->
Name = undefined, % As simple_one_for_one is used.
StartFunc = {ssh_connection_handler, start_link, []},
Restart = temporary,
- Shutdown = infinity,
+ Shutdown = 4000,
Modules = [ssh_connection_handler],
- Type = supervisor,
+ Type = worker,
{Name, StartFunc, Restart, Shutdown, Type, Modules}.
diff --git a/lib/ssh/src/sshd_sup.erl b/lib/ssh/src/sshd_sup.erl
index 7975b146fb..04d2df30f7 100644
--- a/lib/ssh/src/sshd_sup.erl
+++ b/lib/ssh/src/sshd_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -75,6 +75,8 @@ system_name(SysSup) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init([Servers]) ->
RestartStrategy = one_for_one,
MaxR = 10,
diff --git a/lib/ssh/test/Makefile b/lib/ssh/test/Makefile
index 9cd98f069f..6ce6d6f537 100644
--- a/lib/ssh/test/Makefile
+++ b/lib/ssh/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2013. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -55,6 +55,7 @@ MODULES= \
ssh_relay
HRL_FILES_NEEDED_IN_TEST= \
+ $(ERL_TOP)/lib/ssh/test/ssh_test_lib.hrl \
$(ERL_TOP)/lib/ssh/src/ssh.hrl \
$(ERL_TOP)/lib/ssh/src/ssh_xfer.hrl
@@ -64,8 +65,7 @@ TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
DATA_DIRS = $(MODULES:%=%_data)
-INCLUDES = -I$(ERL_TOP)/lib/test_server/include \
- -I$(ERL_TOP)/lib/ssh/src \
+INCLUDES = -I$(ERL_TOP)/lib/ssh/src
EMAKEFILE=Emakefile
MAKE_EMAKE = $(wildcard $(ERL_TOP)/make/make_emakefile)
@@ -88,8 +88,7 @@ RELSYSDIR = $(RELEASE_PATH)/ssh_test
# The path to the test_server ebin dir is needed when
# running the target "targets".
# ----------------------------------------------------
-ERL_COMPILE_FLAGS += -pa ../../../internal_tools/test_server/ebin \
- $(INCLUDES)
+ERL_COMPILE_FLAGS += $(INCLUDES)
EBIN = .
diff --git a/lib/ssh/test/property_test/ssh_eqc_client_server.erl b/lib/ssh/test/property_test/ssh_eqc_client_server.erl
index 4fcb5aea69..39d0b4e410 100644
--- a/lib/ssh/test/property_test/ssh_eqc_client_server.erl
+++ b/lib/ssh/test/property_test/ssh_eqc_client_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/test/property_test/ssh_eqc_encode_decode.erl b/lib/ssh/test/property_test/ssh_eqc_encode_decode.erl
index 803c8aa2ad..dc3b7dc7e6 100644
--- a/lib/ssh/test/property_test/ssh_eqc_encode_decode.erl
+++ b/lib/ssh/test/property_test/ssh_eqc_encode_decode.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/test/property_test/ssh_eqc_subsys.erl b/lib/ssh/test/property_test/ssh_eqc_subsys.erl
index 3b395b9285..30b254b9c0 100644
--- a/lib/ssh/test/property_test/ssh_eqc_subsys.erl
+++ b/lib/ssh/test/property_test/ssh_eqc_subsys.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/test/ssh_algorithms_SUITE.erl b/lib/ssh/test/ssh_algorithms_SUITE.erl
index 49ed15698c..0f68130a05 100644
--- a/lib/ssh/test/ssh_algorithms_SUITE.erl
+++ b/lib/ssh/test/ssh_algorithms_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,11 +24,12 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("ssh/src/ssh_transport.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
--define(TIMEOUT, 50000).
+-define(TIMEOUT, 35000).
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
@@ -36,7 +37,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,10}}].
+ {timetrap,{seconds,40}}].
all() ->
%% [{group,kex},{group,cipher}... etc
@@ -70,30 +71,39 @@ two_way_tags() -> [cipher,mac,compression].
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- ct:log("os:getenv(\"HOME\") = ~p~n"
- "init:get_argument(home) = ~p",
- [os:getenv("HOME"), init:get_argument(home)]),
- ct:log("~n~n"
- "OS ssh:~n=======~n~p~n~n~n"
- "Erl ssh:~n========~n~p~n~n~n"
- "Installed ssh client:~n=====================~n~p~n~n~n"
- "Installed ssh server:~n=====================~n~p~n~n~n"
- "Misc values:~n============~n"
- " -- Default dh group exchange parameters ({min,def,max}): ~p~n"
- " -- dh_default_groups: ~p~n"
- " -- Max num algorithms: ~p~n"
- ,[os:cmd("ssh -V"),
- ssh:default_algorithms(),
- ssh_test_lib:default_algorithms(sshc),
- ssh_test_lib:default_algorithms(sshd),
- {?DEFAULT_DH_GROUP_MIN,?DEFAULT_DH_GROUP_NBITS,?DEFAULT_DH_GROUP_MAX},
- public_key:dh_gex_group_sizes(),
- ?MAX_NUM_ALGORITHMS
- ]),
- ct:log("all() ->~n ~p.~n~ngroups()->~n ~p.~n",[all(),groups()]),
- ssh:start(),
- [{std_simple_sftp_size,25000} % Sftp transferred data size
- | setup_pubkey(Config)].
+ ?CHECK_CRYPTO(
+ begin
+ ct:log("~n"
+ "Environment:~n============~n"
+ "os:getenv(\"HOME\") = ~p~n"
+ "init:get_argument(home) = ~p~n~n~n"
+ "OS ssh:~n=======~n~p~n~n~n"
+ "Erl ssh:~n========~n~p~n~n~n"
+ "crypto:info_lib():~n========~n~p~n~n~n"
+ "Installed ssh client:~n=====================~n~p~n~n~n"
+ "Installed ssh server:~n=====================~n~p~n~n~n"
+ "Misc values:~n============~n"
+ " -- Default dh group exchange parameters ({min,def,max}): ~p~n"
+ " -- dh_default_groups: ~p~n"
+ " -- Max num algorithms: ~p~n"
+ ,[os:getenv("HOME"),
+ init:get_argument(home),
+ os:cmd("ssh -V"),
+ ssh:default_algorithms(),
+ crypto:info_lib(),
+ ssh_test_lib:default_algorithms(sshc),
+ ssh_test_lib:default_algorithms(sshd),
+ {?DEFAULT_DH_GROUP_MIN,?DEFAULT_DH_GROUP_NBITS,?DEFAULT_DH_GROUP_MAX},
+ public_key:dh_gex_group_sizes(),
+ ?MAX_NUM_ALGORITHMS
+ ]),
+ ct:log("all() ->~n ~p.~n~ngroups()->~n ~p.~n",[all(),groups()]),
+ ssh:start(),
+ [{std_simple_sftp_size,25000} % Sftp transferred data size
+ | setup_pubkey(Config)]
+ end
+ ).
+
end_per_suite(_Config) ->
ssh:stop().
@@ -109,7 +119,7 @@ init_per_group(Group, Config) ->
false ->
%% An algorithm group
Tag = proplists:get_value(name,
- hd(?config(tc_group_path, Config))),
+ hd(proplists:get_value(tc_group_path, Config))),
Alg = Group,
PA =
case split(Alg) of
@@ -126,47 +136,45 @@ init_per_group(Group, Config) ->
end.
end_per_group(_Alg, Config) ->
- case ?config(srvr_pid,Config) of
+ case proplists:get_value(srvr_pid,Config) of
Pid when is_pid(Pid) ->
ssh:stop_daemon(Pid),
- ct:log("stopped ~p",[?config(srvr_addr,Config)]);
+ ct:log("stopped ~p",[proplists:get_value(srvr_addr,Config)]);
_ ->
ok
end.
-init_per_testcase(sshc_simple_exec, Config) ->
- start_pubkey_daemon([?config(pref_algs,Config)], Config);
-
+init_per_testcase(sshc_simple_exec_os_cmd, Config) ->
+ start_pubkey_daemon([proplists:get_value(pref_algs,Config)], Config);
init_per_testcase(_TC, Config) ->
Config.
-end_per_testcase(sshc_simple_exec, Config) ->
- case ?config(srvr_pid,Config) of
+end_per_testcase(sshc_simple_exec_os_cmd, Config) ->
+ case proplists:get_value(srvr_pid,Config) of
Pid when is_pid(Pid) ->
ssh:stop_daemon(Pid),
- ct:log("stopped ~p",[?config(srvr_addr,Config)]);
+ ct:log("stopped ~p",[proplists:get_value(srvr_addr,Config)]);
_ ->
ok
end;
end_per_testcase(_TC, Config) ->
Config.
-
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
%% A simple sftp transfer
simple_sftp(Config) ->
- {Host,Port} = ?config(srvr_addr, Config),
+ {Host,Port} = proplists:get_value(srvr_addr, Config),
ssh_test_lib:std_simple_sftp(Host, Port, Config).
%%--------------------------------------------------------------------
%% A simple exec call
simple_exec(Config) ->
- {Host,Port} = ?config(srvr_addr, Config),
+ {Host,Port} = proplists:get_value(srvr_addr, Config),
ssh_test_lib:std_simple_exec(Host, Port, Config).
%%--------------------------------------------------------------------
@@ -191,6 +199,9 @@ simple_exec_groups_no_match_too_large(Config) ->
%%--------------------------------------------------------------------
%% Testing all default groups
+
+simple_exec_groups() -> [{timetrap,{minutes,5}}].
+
simple_exec_groups(Config) ->
Sizes = interpolate( public_key:dh_gex_group_sizes() ),
lists:foreach(
@@ -217,21 +228,34 @@ interpolate(Is) ->
%%--------------------------------------------------------------------
%% Use the ssh client of the OS to connect
-sshc_simple_exec(Config) ->
+
+sshc_simple_exec_os_cmd(Config) ->
PrivDir = ?config(priv_dir, Config),
KnownHosts = filename:join(PrivDir, "known_hosts"),
{Host,Port} = ?config(srvr_addr, Config),
- Cmd = lists:concat(["ssh -p ",Port,
- " -C -o UserKnownHostsFile=",KnownHosts,
- " ",Host," 1+1."]),
- ct:log("~p",[Cmd]),
- SshPort = open_port({spawn, Cmd}, [binary]),
- Expect = <<"2\n">>,
+ Parent = self(),
+ Client = spawn(
+ fun() ->
+ Cmd = lists:concat(["ssh -p ",Port,
+ " -C"
+ " -o UserKnownHostsFile=",KnownHosts,
+ " -o StrictHostKeyChecking=no"
+ " ",Host," 1+1."]),
+ Result = os:cmd(Cmd),
+ ct:log("~p~n = ~p",[Cmd, Result]),
+ Parent ! {result, self(), Result, "2"}
+ end),
receive
- {SshPort, {data,Expect}} ->
- ct:log("Got expected ~p from ~p",[Expect,SshPort]),
- catch port_close(SshPort),
- ok
+ {result, Client, RawResult, Expect} ->
+ Lines = string:tokens(RawResult, "\r\n"),
+ case lists:any(fun(Line) -> Line==Expect end,
+ Lines) of
+ true ->
+ ok;
+ false ->
+ ct:log("Bad result: ~p~nExpected: ~p~nMangled result: ~p", [RawResult,Expect,Lines]),
+ {fail, "Bad result"}
+ end
after ?TIMEOUT ->
ct:fail("Did not receive answer")
end.
@@ -301,7 +325,7 @@ specific_test_cases(Tag, Alg, SshcAlgos, SshdAlgos) ->
true ->
case ssh_test_lib:ssh_type() of
openSSH ->
- [sshc_simple_exec];
+ [sshc_simple_exec_os_cmd];
_ ->
[]
end;
@@ -348,19 +372,21 @@ get_atoms(L) ->
%%% Test case related
%%%
start_std_daemon(Opts, Config) ->
+ ct:log("starting std_daemon",[]),
{Pid, Host, Port} = ssh_test_lib:std_daemon(Config, Opts),
ct:log("started ~p:~p ~p",[Host,Port,Opts]),
[{srvr_pid,Pid},{srvr_addr,{Host,Port}} | Config].
-start_pubkey_daemon(Opts, Config) ->
+start_pubkey_daemon(Opts0, Config) ->
+ Opts = [{auth_methods,"publickey"}|Opts0],
{Pid, Host, Port} = ssh_test_lib:std_daemon1(Config, Opts),
- ct:log("started1 ~p:~p ~p",[Host,Port,Opts]),
+ ct:log("started pubkey_daemon ~p:~p ~p",[Host,Port,Opts]),
[{srvr_pid,Pid},{srvr_addr,{Host,Port}} | Config].
setup_pubkey(Config) ->
- DataDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, UserDir),
ssh_test_lib:setup_rsa(DataDir, UserDir),
ssh_test_lib:setup_ecdsa("256", DataDir, UserDir),
@@ -370,7 +396,7 @@ setup_pubkey(Config) ->
simple_exec_group(I, Config) when is_integer(I) ->
simple_exec_group({I,I,I}, Config);
simple_exec_group({Min,I,Max}, Config) ->
- {Host,Port} = ?config(srvr_addr, Config),
+ {Host,Port} = proplists:get_value(srvr_addr, Config),
ssh_test_lib:std_simple_exec(Host, Port, Config,
[{dh_gex_limits,{Min,I,Max}}]).
diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl
index 96d424dc98..d52d453007 100644
--- a/lib/ssh/test/ssh_basic_SUITE.erl
+++ b/lib/ssh/test/ssh_basic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/inet.hrl").
-include_lib("kernel/include/file.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
%%-compile(export_all).
@@ -84,7 +85,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,10}}].
+ {timetrap,{seconds,40}}].
all() ->
[app_test,
@@ -142,28 +143,28 @@ basic_tests() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config.
+ ?CHECK_CRYPTO(Config).
end_per_suite(_Config) ->
ssh:stop().
%%--------------------------------------------------------------------
init_per_group(dsa_key, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, PrivDir),
Config;
init_per_group(rsa_key, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_rsa(DataDir, PrivDir),
Config;
init_per_group(ecdsa_sha2_nistp256_key, Config) ->
case lists:member('ecdsa-sha2-nistp256',
ssh_transport:default_algorithms(public_key)) of
true ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_ecdsa("256", DataDir, PrivDir),
Config;
false ->
@@ -173,8 +174,8 @@ init_per_group(ecdsa_sha2_nistp384_key, Config) ->
case lists:member('ecdsa-sha2-nistp384',
ssh_transport:default_algorithms(public_key)) of
true ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_ecdsa("384", DataDir, PrivDir),
Config;
false ->
@@ -184,28 +185,28 @@ init_per_group(ecdsa_sha2_nistp521_key, Config) ->
case lists:member('ecdsa-sha2-nistp521',
ssh_transport:default_algorithms(public_key)) of
true ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_ecdsa("521", DataDir, PrivDir),
Config;
false ->
{skip, unsupported_pub_key}
end;
init_per_group(rsa_pass_key, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_rsa_pass_pharse(DataDir, PrivDir, "Password"),
[{pass_phrase, {rsa_pass_phrase, "Password"}}| Config];
init_per_group(dsa_pass_key, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa_pass_pharse(DataDir, PrivDir, "Password"),
[{pass_phrase, {dsa_pass_phrase, "Password"}}| Config];
init_per_group(host_user_key_differs, Config) ->
- Data = ?config(data_dir, Config),
- Sys = filename:join(?config(priv_dir, Config), system_rsa),
+ Data = proplists:get_value(data_dir, Config),
+ Sys = filename:join(proplists:get_value(priv_dir, Config), system_rsa),
SysUsr = filename:join(Sys, user),
- Usr = filename:join(?config(priv_dir, Config), user_ecdsa_256),
+ Usr = filename:join(proplists:get_value(priv_dir, Config), user_ecdsa_256),
file:make_dir(Sys),
file:make_dir(SysUsr),
file:make_dir(Usr),
@@ -217,18 +218,18 @@ init_per_group(host_user_key_differs, Config) ->
ssh_test_lib:setup_rsa_known_host(Sys, Usr),
Config;
init_per_group(key_cb, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, PrivDir),
Config;
init_per_group(internal_error, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, PrivDir),
file:delete(filename:join(PrivDir, "system/ssh_host_dsa_key")),
Config;
init_per_group(dir_options, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Make unreadable dir:
Dir_unreadable = filename:join(PrivDir, "unread"),
ok = file:make_dir(Dir_unreadable),
@@ -273,27 +274,27 @@ init_per_group(_, Config) ->
Config.
end_per_group(dsa_key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(PrivDir),
Config;
end_per_group(rsa_key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_rsa(PrivDir),
Config;
end_per_group(dsa_pass_key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(PrivDir),
Config;
end_per_group(rsa_pass_key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_rsa(PrivDir),
Config;
end_per_group(key_cb, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(PrivDir),
Config;
end_per_group(internal_error, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(PrivDir),
Config;
@@ -302,9 +303,9 @@ end_per_group(_, Config) ->
%%--------------------------------------------------------------------
init_per_testcase(TC, Config) when TC==shell_no_unicode ;
TC==shell_unicode_string ->
- PrivDir = ?config(priv_dir, Config),
- UserDir = ?config(priv_dir, Config),
- SysDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
ssh:start(),
Sftpd = {_Pid, _Host, Port} =
ssh_test_lib:daemon([{system_dir, SysDir},
@@ -333,12 +334,12 @@ init_per_testcase(_TestCase, Config) ->
end_per_testcase(TestCase, Config) when TestCase == server_password_option;
TestCase == server_userpassword_option ->
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
ssh_test_lib:del_dirs(UserDir),
end_per_testcase(Config);
end_per_testcase(TC, Config) when TC==shell_no_unicode ;
TC==shell_unicode_string ->
- case ?config(sftpd, Config) of
+ case proplists:get_value(sftpd, Config) of
{Pid, _, _} ->
ssh:stop_daemon(Pid),
ssh:stop();
@@ -367,8 +368,8 @@ appup_test(Config) when is_list(Config) ->
%%% some options not yet present are not decided if we should support or
%%% if they need thier own test case.
misc_ssh_options(Config) when is_list(Config) ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
CMiscOpt0 = [{connect_timeout, 1000}, {user_dir, UserDir}],
CMiscOpt1 = [{connect_timeout, infinity}, {user_dir, UserDir}],
@@ -381,8 +382,8 @@ misc_ssh_options(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% Test configuring IPv4
inet_option(Config) when is_list(Config) ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
ClientOpts = [{silently_accept_hosts, true},
{user_dir, UserDir},
@@ -397,8 +398,8 @@ inet_option(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% Test configuring IPv6
inet6_option(Config) when is_list(Config) ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
ClientOpts = [{silently_accept_hosts, true},
{user_dir, UserDir},
@@ -414,8 +415,8 @@ inet6_option(Config) when is_list(Config) ->
%%% Test api function ssh_connection:exec
exec(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -461,8 +462,8 @@ exec_compressed(Config) when is_list(Config) ->
true ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},{user_dir, UserDir},
{preferred_algorithms,[{compression, [zlib]}]},
@@ -490,8 +491,8 @@ exec_compressed(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% Idle timeout test
idle_time(Config) ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -513,8 +514,8 @@ idle_time(Config) ->
%%% Test that ssh:shell/2 works
shell(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{_Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},{user_dir, UserDir},
{failfun, fun ssh_test_lib:failfun/2}]),
@@ -548,9 +549,9 @@ exec_key_differs(Config, UserPKAlgs) ->
of
[] ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system_rsa),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system_rsa),
SystemUserDir = filename:join(SystemDir, user),
- UserDir = filename:join(?config(priv_dir, Config), user_ecdsa_256),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), user_ecdsa_256),
{_Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, SystemUserDir},
@@ -582,9 +583,9 @@ exec_key_differs(Config, UserPKAlgs) ->
%%--------------------------------------------------------------------
exec_key_differs_fail(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system_rsa),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system_rsa),
SystemUserDir = filename:join(SystemDir, user),
- UserDir = filename:join(?config(priv_dir, Config), user_ecdsa_256),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), user_ecdsa_256),
{_Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, SystemUserDir},
@@ -609,10 +610,10 @@ exec_key_differs_fail(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
cli(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
- TmpDir = filename:join(?config(priv_dir,Config), "tmp"),
+ TmpDir = filename:join(proplists:get_value(priv_dir,Config), "tmp"),
ok = ssh_test_lib:del_dirs(TmpDir),
ok = file:make_dir(TmpDir),
@@ -651,8 +652,8 @@ cli(Config) when is_list(Config) ->
%%% Test that get correct error message if you try to start a daemon
%%% on an adress that already runs a daemon see also seq10667
daemon_already_started(Config) when is_list(Config) ->
- SystemDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -666,8 +667,8 @@ daemon_already_started(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% check that known_hosts is updated correctly
known_hosts(Config) when is_list(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{user_dir, PrivDir},{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2}]),
@@ -693,9 +694,9 @@ known_hosts(Config) when is_list(Config) ->
%%% Test that we can use keyes protected by pass phrases
pass_phrase(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
- PhraseArg = ?config(pass_phrase, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
+ PhraseArg = proplists:get_value(pass_phrase, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -712,8 +713,8 @@ pass_phrase(Config) when is_list(Config) ->
%%% Test that we can use key callback
key_callback(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
NoPubKeyDir = filename:join(UserDir, "nopubkey"),
file:make_dir(NoPubKeyDir),
@@ -736,8 +737,8 @@ key_callback(Config) when is_list(Config) ->
%%% Test that we can use key callback with callback options
key_callback_options(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
NoPubKeyDir = filename:join(UserDir, "nopubkey"),
file:make_dir(NoPubKeyDir),
@@ -763,8 +764,8 @@ key_callback_options(Config) when is_list(Config) ->
%%% Test that client does not hang if disconnects due to internal error
internal_error(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -780,8 +781,8 @@ internal_error(Config) when is_list(Config) ->
%%% Test ssh_connection:send/3
send(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -800,8 +801,8 @@ send(Config) when is_list(Config) ->
%%% Test ssh:connection_info([peername, sockname])
peername_sockname(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -850,8 +851,8 @@ ips(Name) when is_list(Name) ->
%%% Client receives close when server closes
close(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Server, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -873,8 +874,8 @@ close(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% Simulate that we try to close an already closed connection
double_close(Config) when is_list(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -893,8 +894,8 @@ double_close(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
daemon_opt_fd(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -920,8 +921,8 @@ daemon_opt_fd(Config) ->
%%--------------------------------------------------------------------
multi_daemon_opt_fd(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -955,8 +956,8 @@ multi_daemon_opt_fd(Config) ->
%%--------------------------------------------------------------------
packet_size_zero(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -986,7 +987,7 @@ packet_size_zero(Config) ->
%%--------------------------------------------------------------------
shell_no_unicode(Config) ->
- new_do_shell(?config(io,Config),
+ new_do_shell(proplists:get_value(io,Config),
[new_prompt,
{type,"io:format(\"hej ~p~n\",[42])."},
{expect,"hej 42"},
@@ -997,7 +998,7 @@ shell_no_unicode(Config) ->
%%--------------------------------------------------------------------
shell_unicode_string(Config) ->
- new_do_shell(?config(io,Config),
+ new_do_shell(proplists:get_value(io,Config),
[new_prompt,
{type,"io:format(\"こにちわ~ts~n\",[\"四二\"])."},
{expect,"こにちわ四二"},
@@ -1014,8 +1015,8 @@ openssh_zlib_basic_test(Config) ->
{skip, io_lib:format("~p compression is not supported",[L])};
true ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -1035,11 +1036,11 @@ openssh_zlib_basic_test(Config) ->
%%--------------------------------------------------------------------
ssh_info_print(Config) ->
%% Just check that ssh_print:info() crashes
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
PrintFile = filename:join(PrivDir,info),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
UnexpFun = fun(Msg,_Peer) ->
@@ -1181,8 +1182,8 @@ check_error(Error) ->
ct:fail(Error).
basic_test(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = proplists:get_value(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
{Pid, Host, Port} = ssh_test_lib:daemon(ServerOpts),
{ok, CM} = ssh:connect(Host, Port, ClientOpts),
diff --git a/lib/ssh/test/ssh_benchmark_SUITE.erl b/lib/ssh/test/ssh_benchmark_SUITE.erl
index fe90da3028..c2bfc48449 100644
--- a/lib/ssh/test/ssh_benchmark_SUITE.erl
+++ b/lib/ssh/test/ssh_benchmark_SUITE.erl
@@ -1,7 +1,7 @@
%%%-------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2015. All Rights Reserved.
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,7 +29,9 @@
-include_lib("ssh/src/ssh_userauth.hrl").
-suite() -> [{ct_hooks,[{ts_install_cth,[{nodenames,2}]}]}].
+suite() -> [{ct_hooks,[{ts_install_cth,[{nodenames,2}]}]},
+ {timetrap,{minutes,3}}
+ ].
%%suite() -> [{ct_hooks,[ts_install_cth]}].
all() -> [{group, opensshc_erld}
@@ -63,8 +65,8 @@ end_per_suite(_Config) ->
init_per_group(opensshc_erld, Config) ->
case ssh_test_lib:ssh_type() of
openSSH ->
- DataDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, UserDir),
ssh_test_lib:setup_rsa(DataDir, UserDir),
ssh_test_lib:setup_ecdsa("256", DataDir, UserDir),
@@ -97,14 +99,14 @@ end_per_testcase(_Func, _Conf) ->
init_sftp_dirs(Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
SrcDir = filename:join(UserDir, "sftp_src"),
ok = file:make_dir(SrcDir),
SrcFile = "big_data",
DstDir = filename:join(UserDir, "sftp_dst"),
ok = file:make_dir(DstDir),
N = 100 * 1024*1024,
- ok = file:write_file(filename:join(SrcDir,SrcFile), crypto:rand_bytes(N)),
+ ok = file:write_file(filename:join(SrcDir,SrcFile), crypto:strong_rand_bytes(N)),
[{sftp_src_dir,SrcDir}, {sftp_dst_dir,DstDir}, {src_file,SrcFile}, {sftp_size,N}
| Config].
@@ -127,8 +129,8 @@ openssh_client_shell(Config) ->
openssh_client_shell(Config, Options) ->
- SystemDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
KnownHosts = filename:join(UserDir, "known_hosts"),
{ok, TracerPid} = erlang_trace(),
@@ -184,7 +186,7 @@ openssh_client_shell(Config, Options) ->
end, Times),
ssh:stop_daemon(ServerPid),
ok
- after 10000 ->
+ after 60*1000 ->
ssh:stop_daemon(ServerPid),
exit(SlavePid, kill),
{fail, timeout}
@@ -200,11 +202,11 @@ openssh_client_sftp(Config) ->
openssh_client_sftp(Config, Options) ->
- SystemDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
- SftpSrcDir = ?config(sftp_src_dir, Config),
- SrcFile = ?config(src_file, Config),
- SrcSize = ?config(sftp_size, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
+ SftpSrcDir = proplists:get_value(sftp_src_dir, Config),
+ SrcFile = proplists:get_value(src_file, Config),
+ SrcSize = proplists:get_value(sftp_size, Config),
KnownHosts = filename:join(UserDir, "known_hosts"),
{ok, TracerPid} = erlang_trace(),
@@ -215,6 +217,7 @@ openssh_client_sftp(Config, Options) ->
{root, SftpSrcDir}])]},
{failfun, fun ssh_test_lib:failfun/2}
| Options]),
+ ct:pal("ServerPid = ~p",[ServerPid]),
ct:sleep(500),
Cmd = lists:concat(["sftp",
" -b -",
@@ -231,7 +234,7 @@ openssh_client_sftp(Config, Options) ->
end),
receive
{SlavePid, _ClientResponse} ->
- ct:pal("ClientResponse = ~p",[_ClientResponse]),
+ ct:pal("ClientResponse = ~p~nServerPid = ~p",[_ClientResponse,ServerPid]),
{ok, List} = get_trace_list(TracerPid),
%%ct:pal("List=~p",[List]),
Times = find_times(List, [channel_open_close]),
@@ -260,7 +263,7 @@ openssh_client_sftp(Config, Options) ->
end, Times),
ssh:stop_daemon(ServerPid),
ok
- after 10000 ->
+ after 2*60*1000 ->
ssh:stop_daemon(ServerPid),
exit(SlavePid, kill),
{fail, timeout}
@@ -274,7 +277,7 @@ variants(Tag, Config) ->
[A|_] when is_atom(A) -> two_way
end,
[ [{Tag,tag_value(TagType,Alg)}]
- || Alg <- proplists:get_value(Tag, ?config(common_algs,Config))
+ || Alg <- proplists:get_value(Tag, proplists:get_value(common_algs,Config))
].
tag_value(two_way, Alg) -> [Alg];
@@ -333,52 +336,64 @@ find_time(accept_to_hello, L) ->
[T0,T1] = find([fun(C=#call{mfa = {ssh_acceptor,handle_connection,5}}) ->
C#call.t_call
end,
- fun(C=#call{mfa = {ssh_connection_handler,hello,_},
- args = [socket_control|_]}) ->
- C#call.t_return
- end
+ ?LINE,
+ fun(C=#call{mfa = {ssh_connection_handler,handle_event,4},
+ args = [_, {version_exchange,_}, {hello,_}, _]}) ->
+ C#call.t_call
+ end,
+ ?LINE
], L, []),
{accept_to_hello, now2micro_sec(now_diff(T1,T0)), microsec};
find_time(kex, L) ->
- [T0,T1] = find([fun(C=#call{mfa = {ssh_connection_handler,hello,_},
- args = [socket_control|_]}) ->
+ [T0,T1] = find([fun(C=#call{mfa = {ssh_connection_handler,handle_event,4},
+ args = [_, {version_exchange,_}, {hello,_}, _]}) ->
C#call.t_call
end,
- ?send(#ssh_msg_newkeys{})
+ ?LINE,
+ ?send(#ssh_msg_newkeys{}),
+ ?LINE
], L, []),
{kex, now2micro_sec(now_diff(T1,T0)), microsec};
find_time(kex_to_auth, L) ->
[T0,T1] = find([?send(#ssh_msg_newkeys{}),
- ?recv(#ssh_msg_userauth_request{})
+ ?LINE,
+ ?recv(#ssh_msg_userauth_request{}),
+ ?LINE
], L, []),
{kex_to_auth, now2micro_sec(now_diff(T1,T0)), microsec};
find_time(auth, L) ->
[T0,T1] = find([?recv(#ssh_msg_userauth_request{}),
- ?send(#ssh_msg_userauth_success{})
+ ?LINE,
+ ?send(#ssh_msg_userauth_success{}),
+ ?LINE
], L, []),
{auth, now2micro_sec(now_diff(T1,T0)), microsec};
find_time(to_prompt, L) ->
[T0,T1] = find([fun(C=#call{mfa = {ssh_acceptor,handle_connection,5}}) ->
C#call.t_call
end,
- ?recv(#ssh_msg_channel_request{request_type="env"})
+ ?LINE,
+ ?recv(#ssh_msg_channel_request{request_type="env"}),
+ ?LINE
], L, []),
{to_prompt, now2micro_sec(now_diff(T1,T0)), microsec};
find_time(channel_open_close, L) ->
[T0,T1] = find([?recv(#ssh_msg_channel_request{request_type="subsystem"}),
- ?send(#ssh_msg_channel_close{})
+ ?LINE,
+ ?send(#ssh_msg_channel_close{}),
+ ?LINE
], L, []),
{channel_open_close, now2micro_sec(now_diff(T1,T0)), microsec}.
-find([F|Fs], [C|Cs], Acc) when is_function(F,1) ->
+find([F,Id|Fs], [C|Cs], Acc) when is_function(F,1) ->
try
F(C)
of
T -> find(Fs, Cs, [T|Acc])
catch
- _:_ -> find([F|Fs], Cs, Acc)
+ _:_ -> find([F,Id|Fs], Cs, Acc)
end;
find([], _, Acc) ->
lists:reverse(Acc).
@@ -433,10 +448,18 @@ increment({Alg,Sz,T},[]) ->
%%% API for the traceing
%%%
get_trace_list(TracerPid) ->
+ MonRef = monitor(process, TracerPid),
TracerPid ! {get_trace_list,self()},
receive
- {trace_list,L} -> {ok, pair_events(lists:reverse(L))}
- after 5000 -> {error,no_reply}
+ {trace_list,L} ->
+ demonitor(MonRef),
+ {ok, pair_events(lists:reverse(L))};
+ {'DOWN', MonRef, process, TracerPid, Info} ->
+ {error, {tracer_down,Info}}
+
+ after 3*60*1000 ->
+ demonitor(MonRef),
+ {error,no_reply}
end.
erlang_trace() ->
@@ -444,7 +467,7 @@ erlang_trace() ->
0 = erlang:trace(new, true, [call,timestamp,{tracer,TracerPid}]),
[init_trace(MFA, tp(MFA))
|| MFA <- [{ssh_acceptor,handle_connection,5},
- {ssh_connection_handler,hello,2},
+%% {ssh_connection_handler,hello,2},
{ssh_message,encode,1},
{ssh_message,decode,1},
{ssh_transport,select_algorithm,3},
@@ -454,6 +477,10 @@ erlang_trace() ->
{ssh_message,decode,1},
{public_key,dh_gex_group,4} % To find dh_gex group size
]],
+ init_trace({ssh_connection_handler,handle_event,4},
+ [{['_', {version_exchange,'_'}, {hello,'_'}, '_'],
+ [],
+ [return_trace]}]),
{ok, TracerPid}.
tp({_M,_F,Arity}) ->
diff --git a/lib/ssh/test/ssh_connection_SUITE.erl b/lib/ssh/test/ssh_connection_SUITE.erl
index 6e90faf0e8..bcf3b01824 100644
--- a/lib/ssh/test/ssh_connection_SUITE.erl
+++ b/lib/ssh/test/ssh_connection_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("ssh/src/ssh_connect.hrl").
+-include("ssh_test_lib.hrl").
-compile(export_all).
@@ -37,15 +38,20 @@
%% [{ct_hooks,[ts_install_cth]}].
suite() ->
- [{timetrap,{minutes,2}}].
+ [{timetrap,{seconds,40}}].
all() ->
[
{group, openssh},
+ small_interrupted_send,
interrupted_send,
start_shell,
start_shell_exec,
start_shell_exec_fun,
+ start_shell_sock_exec_fun,
+ start_shell_sock_daemon_exec,
+ connect_sock_not_tcp,
+ daemon_sock_not_tcp,
gracefull_invalid_version,
gracefull_invalid_start,
gracefull_invalid_long_start,
@@ -55,10 +61,11 @@ all() ->
max_channels_option
].
groups() ->
- [{openssh, [], payload() ++ ptty()}].
+ [{openssh, [], payload() ++ ptty() ++ sock()}].
payload() ->
[simple_exec,
+ simple_exec_sock,
small_cat,
big_cat,
send_after_exit].
@@ -68,9 +75,14 @@ ptty() ->
ptty_alloc,
ptty_alloc_pixel].
+sock() ->
+ [connect_sock_not_passive,
+ daemon_sock_not_passive
+ ].
+
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config.
+ ?CHECK_CRYPTO(Config).
end_per_suite(Config) ->
Config.
@@ -110,6 +122,18 @@ simple_exec() ->
simple_exec(Config) when is_list(Config) ->
ConnectionRef = ssh_test_lib:connect(?SSH_DEFAULT_PORT, [{silently_accept_hosts, true},
{user_interaction, false}]),
+ do_simple_exec(ConnectionRef).
+
+
+simple_exec_sock(_Config) ->
+ {ok, Sock} = gen_tcp:connect("localhost", ?SSH_DEFAULT_PORT, [{active,false}]),
+ {ok, ConnectionRef} = ssh:connect(Sock, [{silently_accept_hosts, true},
+ {user_interaction, false}]),
+ do_simple_exec(ConnectionRef).
+
+
+
+do_simple_exec(ConnectionRef) ->
{ok, ChannelId0} = ssh_connection:session_channel(ConnectionRef, infinity),
success = ssh_connection:exec(ConnectionRef, ChannelId0,
"echo testing", infinity),
@@ -142,6 +166,30 @@ simple_exec(Config) when is_list(Config) ->
end.
%%--------------------------------------------------------------------
+connect_sock_not_tcp(_Config) ->
+ {ok,Sock} = gen_udp:open(0, []),
+ {error, not_tcp_socket} = ssh:connect(Sock, []),
+ gen_udp:close(Sock).
+
+%%--------------------------------------------------------------------
+daemon_sock_not_tcp(_Config) ->
+ {ok,Sock} = gen_udp:open(0, []),
+ {error, not_tcp_socket} = ssh:daemon(Sock),
+ gen_udp:close(Sock).
+
+%%--------------------------------------------------------------------
+connect_sock_not_passive(_Config) ->
+ {ok,Sock} = gen_tcp:connect("localhost", ?SSH_DEFAULT_PORT, []),
+ {error, not_passive_mode} = ssh:connect(Sock, []),
+ gen_tcp:close(Sock).
+
+%%--------------------------------------------------------------------
+daemon_sock_not_passive(_Config) ->
+ {ok,Sock} = gen_tcp:connect("localhost", ?SSH_DEFAULT_PORT, []),
+ {error, not_passive_mode} = ssh:daemon(Sock),
+ gen_tcp:close(Sock).
+
+%%--------------------------------------------------------------------
small_cat() ->
[{doc, "Use 'cat' to echo small data block back to us."}].
@@ -314,58 +362,106 @@ ptty_alloc_pixel(Config) when is_list(Config) ->
ssh:close(ConnectionRef).
%%--------------------------------------------------------------------
-
-interrupted_send() ->
- [{doc, "Use a subsystem that echos n char and then sends eof to cause a channel exit partway through a large send."}].
-
-interrupted_send(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+small_interrupted_send(Config) ->
+ K = 1024,
+ M = K*K,
+ do_interrupted_send(Config, 10*M, 4*K).
+interrupted_send(Config) ->
+ M = 1024*1024,
+ do_interrupted_send(Config, 10*M, 4*M).
+
+do_interrupted_send(Config, SendSize, EchoSize) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
+ EchoSS_spec = {ssh_echo_server, [EchoSize,[{dbg,true}]]},
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
- {subsystems, [{"echo_n", {ssh_echo_server, [4000000]}}]}]),
-
+ {subsystems, [{"echo_n",EchoSS_spec}]}]),
+
+ ct:log("connect", []),
ConnectionRef = ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true},
{user, "foo"},
{password, "morot"},
{user_interaction, false},
{user_dir, UserDir}]),
-
- {ok, ChannelId} = ssh_connection:session_channel(ConnectionRef, infinity),
-
- success = ssh_connection:subsystem(ConnectionRef, ChannelId, "echo_n", infinity),
-
- %% build 10MB binary
- Data = << <<X:32>> || X <- lists:seq(1,2500000)>>,
-
- %% expect remote end to send us 4MB back
- <<ExpectedData:4000000/binary, _/binary>> = Data,
-
- %% pre-adjust receive window so the other end doesn't block
- ssh_connection:adjust_window(ConnectionRef, ChannelId, size(ExpectedData) + 1),
-
- case ssh_connection:send(ConnectionRef, ChannelId, Data, 10000) of
- {error, closed} ->
- ok;
- Msg ->
- ct:fail({expected,{error,closed}, got, Msg})
- end,
- receive_data(ExpectedData, ConnectionRef, ChannelId),
- ssh:close(ConnectionRef),
- ssh:stop_daemon(Pid).
+ ct:log("connected", []),
+
+ %% build big binary
+ Data = << <<X:32>> || X <- lists:seq(1,SendSize div 4)>>,
+
+ %% expect remote end to send us EchoSize back
+ <<ExpectedData:EchoSize/binary, _/binary>> = Data,
+
+ %% Spawn listener. Otherwise we could get a deadlock due to filled buffers
+ Parent = self(),
+ ResultPid = spawn(
+ fun() ->
+ ct:log("open channel",[]),
+ {ok, ChannelId} = ssh_connection:session_channel(ConnectionRef, infinity),
+ ct:log("start subsystem", []),
+ case ssh_connection:subsystem(ConnectionRef, ChannelId, "echo_n", infinity) of
+ success ->
+ Parent ! {self(), channelId, ChannelId},
+
+ Result =
+ try collect_data(ConnectionRef, ChannelId)
+ of
+ ExpectedData ->
+ ok;
+ _ ->
+ {fail,"unexpected result"}
+ catch
+ Class:Exception ->
+ {fail, io_lib:format("Exception ~p:~p",[Class,Exception])}
+ end,
+ Parent ! {self(), Result};
+ Other ->
+ Parent ! {self(), channelId, error, Other}
+ end
+ end),
+
+ receive
+ {ResultPid, channelId, ChannelId} ->
+ %% pre-adjust receive window so the other end doesn't block
+ ct:log("adjust window", []),
+ ssh_connection:adjust_window(ConnectionRef, ChannelId, size(ExpectedData) + 1),
+
+ ct:log("going to send ~p bytes", [size(Data)]),
+ case ssh_connection:send(ConnectionRef, ChannelId, Data, 30000) of
+ {error, closed} ->
+ ct:log("{error,closed} - That's what we expect :)", []),
+ ok;
+ Msg ->
+ ct:log("Got ~p - that's bad, very bad indeed",[Msg]),
+ ct:fail({expected,{error,closed}, got, Msg})
+ end,
+ ct:log("going to check the result (if it is available)", []),
+ receive
+ {ResultPid, Result} ->
+ ct:log("Got result: ~p", [Result]),
+ ssh:close(ConnectionRef),
+ ssh:stop_daemon(Pid),
+ Result
+ end;
+
+ {ResultPid, channelId, error, Other} ->
+ ssh:close(ConnectionRef),
+ ssh:stop_daemon(Pid),
+ {fail, io_lib:format("ssh_connection:subsystem: ~p",[Other])}
+ end.
%%--------------------------------------------------------------------
start_shell() ->
[{doc, "Start a shell"}].
start_shell(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -394,10 +490,10 @@ start_shell_exec() ->
[{doc, "start shell to exec command"}].
start_shell_exec(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -428,10 +524,10 @@ start_shell_exec_fun() ->
[{doc, "start shell to exec command"}].
start_shell_exec_fun(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -459,12 +555,85 @@ start_shell_exec_fun(Config) when is_list(Config) ->
ssh:stop_daemon(Pid).
%%--------------------------------------------------------------------
+start_shell_sock_exec_fun() ->
+ [{doc, "start shell on tcp-socket to exec command"}].
+
+start_shell_sock_exec_fun(Config) when is_list(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
+ file:make_dir(UserDir),
+ SysDir = proplists:get_value(data_dir, Config),
+ {Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
+ {user_dir, UserDir},
+ {password, "morot"},
+ {exec, fun ssh_exec/1}]),
+
+ {ok, Sock} = gen_tcp:connect(Host, Port, [{active,false}]),
+ {ok,ConnectionRef} = ssh:connect(Sock, [{silently_accept_hosts, true},
+ {user, "foo"},
+ {password, "morot"},
+ {user_interaction, true},
+ {user_dir, UserDir}]),
+
+ {ok, ChannelId0} = ssh_connection:session_channel(ConnectionRef, infinity),
+ success = ssh_connection:exec(ConnectionRef, ChannelId0,
+ "testing", infinity),
+
+ receive
+ {ssh_cm, ConnectionRef, {data, _ChannelId, 0, <<"testing\r\n">>}} ->
+ ok
+ after 5000 ->
+ ct:fail("Exec Timeout")
+ end,
+
+ ssh:close(ConnectionRef),
+ ssh:stop_daemon(Pid).
+
+%%--------------------------------------------------------------------
+start_shell_sock_daemon_exec(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
+ file:make_dir(UserDir),
+ SysDir = proplists:get_value(data_dir, Config),
+
+ {ok,Sl} = gen_tcp:listen(0, [{active,false}]),
+ {ok,{_IP,Port}} = inet:sockname(Sl), % _IP is likely to be {0,0,0,0}. Win don't like...
+
+ spawn_link(fun() ->
+ {ok,Ss} = gen_tcp:connect("localhost", Port, [{active,false}]),
+ {ok, _Pid} = ssh:daemon(Ss, [{system_dir, SysDir},
+ {user_dir, UserDir},
+ {password, "morot"},
+ {exec, fun ssh_exec/1}])
+ end),
+ {ok,Sc} = gen_tcp:accept(Sl),
+ {ok,ConnectionRef} = ssh:connect(Sc, [{silently_accept_hosts, true},
+ {user, "foo"},
+ {password, "morot"},
+ {user_interaction, true},
+ {user_dir, UserDir}]),
+
+ {ok, ChannelId0} = ssh_connection:session_channel(ConnectionRef, infinity),
+
+ success = ssh_connection:exec(ConnectionRef, ChannelId0,
+ "testing", infinity),
+
+ receive
+ {ssh_cm, ConnectionRef, {data, _ChannelId, 0, <<"testing\r\n">>}} ->
+ ok
+ after 5000 ->
+ ct:fail("Exec Timeout")
+ end,
+
+ ssh:close(ConnectionRef).
+
+%%--------------------------------------------------------------------
gracefull_invalid_version(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
@@ -484,10 +653,10 @@ gracefull_invalid_version(Config) when is_list(Config) ->
end.
gracefull_invalid_start(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"}]),
@@ -506,10 +675,10 @@ gracefull_invalid_start(Config) when is_list(Config) ->
end.
gracefull_invalid_long_start(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"}]),
@@ -529,10 +698,10 @@ gracefull_invalid_long_start(Config) when is_list(Config) ->
gracefull_invalid_long_start_no_nl(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"}]),
@@ -554,10 +723,10 @@ stop_listener() ->
[{doc, "start ssh daemon, setup connections, stop listener, restart listner"}].
stop_listener(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid0, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
@@ -613,10 +782,10 @@ stop_listener(Config) when is_list(Config) ->
end.
start_subsystem_on_closed_channel(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -642,10 +811,10 @@ max_channels_option() ->
[{doc, "Test max_channels option"}].
max_channels_option(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -659,15 +828,21 @@ max_channels_option(Config) when is_list(Config) ->
{user_interaction, true},
{user_dir, UserDir}]),
+ %% Allocate a number of ChannelId:s to play with. (This operation is not
+ %% counted by the max_channel option).
{ok, ChannelId0} = ssh_connection:session_channel(ConnectionRef, infinity),
{ok, ChannelId1} = ssh_connection:session_channel(ConnectionRef, infinity),
{ok, ChannelId2} = ssh_connection:session_channel(ConnectionRef, infinity),
{ok, ChannelId3} = ssh_connection:session_channel(ConnectionRef, infinity),
{ok, ChannelId4} = ssh_connection:session_channel(ConnectionRef, infinity),
{ok, ChannelId5} = ssh_connection:session_channel(ConnectionRef, infinity),
- {ok, _ChannelId6} = ssh_connection:session_channel(ConnectionRef, infinity),
+ {ok, ChannelId6} = ssh_connection:session_channel(ConnectionRef, infinity),
+ {ok, _ChannelId7} = ssh_connection:session_channel(ConnectionRef, infinity),
- %%%---- shell
+ %% Now start to open the channels (this is counted my max_channels) to check that
+ %% it gives a failure at right place
+
+ %%%---- Channel 1(3): shell
ok = ssh_connection:shell(ConnectionRef,ChannelId0),
receive
{ssh_cm,ConnectionRef, {data, ChannelId0, 0, <<"Eshell",_/binary>>}} ->
@@ -676,10 +851,10 @@ max_channels_option(Config) when is_list(Config) ->
ct:fail("CLI Timeout")
end,
- %%%---- subsystem "echo_n"
+ %%%---- Channel 2(3): subsystem "echo_n"
success = ssh_connection:subsystem(ConnectionRef, ChannelId1, "echo_n", infinity),
- %%%---- exec #1
+ %%%---- Channel 3(3): exec. This closes itself.
success = ssh_connection:exec(ConnectionRef, ChannelId2, "testing1.\n", infinity),
receive
{ssh_cm, ConnectionRef, {data, ChannelId2, 0, <<"testing1",_/binary>>}} ->
@@ -688,13 +863,13 @@ max_channels_option(Config) when is_list(Config) ->
ct:fail("Exec #1 Timeout")
end,
- %%%---- ptty
- success = ssh_connection:ptty_alloc(ConnectionRef, ChannelId3, []),
+ %%%---- Channel 3(3): subsystem "echo_n" (Note that ChannelId2 should be closed now)
+ ?wait_match(success, ssh_connection:subsystem(ConnectionRef, ChannelId3, "echo_n", infinity)),
- %%%---- exec #2
+ %%%---- Channel 4(3) !: exec This should fail
failure = ssh_connection:exec(ConnectionRef, ChannelId4, "testing2.\n", infinity),
- %%%---- close the shell
+ %%%---- close the shell (Frees one channel)
ok = ssh_connection:send(ConnectionRef, ChannelId0, "exit().\n", 5000),
%%%---- wait for the subsystem to terminate
@@ -707,14 +882,11 @@ max_channels_option(Config) when is_list(Config) ->
ct:fail("exit Timeout",[])
end,
- %%%---- exec #3
- success = ssh_connection:exec(ConnectionRef, ChannelId5, "testing3.\n", infinity),
- receive
- {ssh_cm, ConnectionRef, {data, ChannelId5, 0, <<"testing3",_/binary>>}} ->
- ok
- after 5000 ->
- ct:fail("Exec #3 Timeout")
- end,
+ %%---- Try that we can open one channel instead of the closed one
+ ?wait_match(success, ssh_connection:subsystem(ConnectionRef, ChannelId5, "echo_n", infinity)),
+
+ %%---- But not a fourth one...
+ failure = ssh_connection:subsystem(ConnectionRef, ChannelId6, "echo_n", infinity),
ssh:close(ConnectionRef),
ssh:stop_daemon(Pid).
@@ -737,20 +909,36 @@ big_cat_rx(ConnectionRef, ChannelId, Acc) ->
timeout
end.
-receive_data(ExpectedData, ConnectionRef, ChannelId) ->
- ExpectedData = collect_data(ConnectionRef, ChannelId).
-
collect_data(ConnectionRef, ChannelId) ->
- collect_data(ConnectionRef, ChannelId, []).
+ ct:log("Listener ~p running! ConnectionRef=~p, ChannelId=~p",[self(),ConnectionRef,ChannelId]),
+ collect_data(ConnectionRef, ChannelId, [], 0).
-collect_data(ConnectionRef, ChannelId, Acc) ->
+collect_data(ConnectionRef, ChannelId, Acc, Sum) ->
+ TO = 5000,
receive
- {ssh_cm, ConnectionRef, {data, ChannelId, 0, Data}} ->
- collect_data(ConnectionRef, ChannelId, [Data | Acc]);
+ {ssh_cm, ConnectionRef, {data, ChannelId, 0, Data}} when is_binary(Data) ->
+ ct:log("collect_data: received ~p bytes. total ~p bytes",[size(Data),Sum+size(Data)]),
+ collect_data(ConnectionRef, ChannelId, [Data | Acc], Sum+size(Data));
{ssh_cm, ConnectionRef, {eof, ChannelId}} ->
- iolist_to_binary(lists:reverse(Acc))
- after 5000 ->
- timeout
+ try
+ iolist_to_binary(lists:reverse(Acc))
+ of
+ Bin ->
+ ct:log("collect_data: received eof.~nGot in total ~p bytes",[size(Bin)]),
+ Bin
+ catch
+ C:E ->
+ ct:log("collect_data: received eof.~nAcc is strange...~nException=~p:~p~nAcc=~p",
+ [C,E,Acc]),
+ {error,{C,E}}
+ end;
+ Msg ->
+ ct:log("collect_data: ***** unexpected message *****~n~p",[Msg]),
+ collect_data(ConnectionRef, ChannelId, Acc, Sum)
+
+ after TO ->
+ ct:log("collect_data: ----- Nothing received for ~p seconds -----~n",[]),
+ collect_data(ConnectionRef, ChannelId, Acc, Sum)
end.
%%%-------------------------------------------------------------------
diff --git a/lib/ssh/test/ssh_echo_server.erl b/lib/ssh/test/ssh_echo_server.erl
index 96c9aad135..5387d21efd 100644
--- a/lib/ssh/test/ssh_echo_server.erl
+++ b/lib/ssh/test/ssh_echo_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,14 +26,29 @@
-record(state, {
n,
id,
- cm
+ cm,
+ dbg = false
}).
-export([init/1, handle_msg/2, handle_ssh_msg/2, terminate/2]).
+-define(DBG(State,Fmt,Args),
+ case State#state.dbg of
+ true -> ct:log("~p:~p ~p "++Fmt, [?MODULE,?LINE,self()|Args]);
+ false -> ok
+ end).
+
+
init([N]) ->
- {ok, #state{n = N}}.
+ {ok, #state{n = N}};
+init([N,Opts]) ->
+ State = #state{n = N,
+ dbg = proplists:get_value(dbg,Opts,false)
+ },
+ ?DBG(State, "init([~p])",[N]),
+ {ok, State}.
handle_msg({ssh_channel_up, ChannelId, ConnectionManager}, State) ->
+ ?DBG(State, "ssh_channel_up Cid=~p ConnMngr=~p",[ChannelId,ConnectionManager]),
{ok, State#state{id = ChannelId,
cm = ConnectionManager}}.
@@ -41,32 +56,39 @@ handle_ssh_msg({ssh_cm, CM, {data, ChannelId, 0, Data}}, #state{n = N} = State)
M = N - size(Data),
case M > 0 of
true ->
+ ?DBG(State, "ssh_cm data Cid=~p size(Data)=~p M=~p",[ChannelId,size(Data),M]),
ssh_connection:send(CM, ChannelId, Data),
{ok, State#state{n = M}};
false ->
<<SendData:N/binary, _/binary>> = Data,
+ ?DBG(State, "ssh_cm data Cid=~p size(Data)=~p M=~p size(SendData)=~p~nSend eof",[ChannelId,size(Data),M,size(SendData)]),
ssh_connection:send(CM, ChannelId, SendData),
ssh_connection:send_eof(CM, ChannelId),
{stop, ChannelId, State}
end;
handle_ssh_msg({ssh_cm, _ConnectionManager,
{data, _ChannelId, 1, Data}}, State) ->
+ ?DBG(State, "stderr: ~p",[Data]),
error_logger:format(standard_error, " ~p~n", [binary_to_list(Data)]),
{ok, State};
handle_ssh_msg({ssh_cm, _ConnectionManager, {eof, _ChannelId}}, State) ->
+ ?DBG(State, "{eof ~p}",[_ChannelId]),
{ok, State};
-handle_ssh_msg({ssh_cm, _, {signal, _, _}}, State) ->
+handle_ssh_msg({ssh_cm, _, _Sig={signal, _, _}}, State) ->
%% Ignore signals according to RFC 4254 section 6.9.
+ ?DBG(State, "~p",[_Sig]),
{ok, State};
-handle_ssh_msg({ssh_cm, _, {exit_signal, ChannelId, _, _Error, _}},
- State) ->
+handle_ssh_msg({ssh_cm, _, _Sig={exit_signal, ChannelId, _, _Error, _}}, State) ->
+ ?DBG(State, "~p",[_Sig]),
{stop, ChannelId, State};
-handle_ssh_msg({ssh_cm, _, {exit_status, ChannelId, _Status}}, State) ->
+handle_ssh_msg({ssh_cm, _, _Sig={exit_status, ChannelId, _Status}}, State) ->
+ ?DBG(State, "~p",[_Sig]),
{stop, ChannelId, State}.
terminate(_Reason, _State) ->
+ ?DBG(_State, "terminate ~p",[_Reason]),
ok.
diff --git a/lib/ssh/test/ssh_options_SUITE.erl b/lib/ssh/test/ssh_options_SUITE.erl
index ba0107efd6..61883c0647 100644
--- a/lib/ssh/test/ssh_options_SUITE.erl
+++ b/lib/ssh/test/ssh_options_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-
+-include("ssh_test_lib.hrl").
%%% Test cases
-export([connectfun_disconnectfun_client/1,
@@ -51,8 +51,8 @@
ssh_connect_arg4_timeout/1,
ssh_connect_negtimeout_parallel/1,
ssh_connect_negtimeout_sequential/1,
- ssh_connect_nonegtimeout_connected_parallel/1,
- ssh_connect_nonegtimeout_connected_sequential/1,
+ ssh_connect_nonegtimeout_connected_parallel/1,
+ ssh_connect_nonegtimeout_connected_sequential/1,
ssh_connect_timeout/1, connect/4,
ssh_daemon_minimal_remote_max_packet_size_option/1,
ssh_msg_debug_fun_option_client/1,
@@ -80,7 +80,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,6}}].
+ {timetrap,{seconds,30}}].
all() ->
[connectfun_disconnectfun_server,
@@ -126,19 +126,19 @@ groups() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config.
+ ?CHECK_CRYPTO(Config).
end_per_suite(_Config) ->
ssh:stop().
%%--------------------------------------------------------------------
init_per_group(hardening_tests, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, PrivDir),
Config;
init_per_group(dir_options, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Make unreadable dir:
Dir_unreadable = filename:join(PrivDir, "unread"),
ok = file:make_dir(Dir_unreadable),
@@ -193,7 +193,7 @@ end_per_testcase(TestCase, Config) when TestCase == server_password_option;
TestCase == server_userpassword_option;
TestCase == server_pwdfun_option;
TestCase == server_pwdfun_4_option ->
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
ssh_test_lib:del_dirs(UserDir),
end_per_testcase(Config);
end_per_testcase(_TestCase, Config) ->
@@ -210,10 +210,10 @@ end_per_testcase(_Config) ->
%%% validate to server that uses the 'password' option
server_password_option(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"}]),
@@ -243,10 +243,10 @@ server_password_option(Config) when is_list(Config) ->
%%% validate to server that uses the 'password' option
server_userpassword_option(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, PrivDir},
{user_passwords, [{"vego", "morot"}]}]),
@@ -278,10 +278,10 @@ server_userpassword_option(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% validate to server that uses the 'pwdfun' option
server_pwdfun_option(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
CHKPWD = fun("foo",Pwd) -> Pwd=="bar";
(_,_) -> false
end,
@@ -316,10 +316,10 @@ server_pwdfun_option(Config) ->
%%--------------------------------------------------------------------
%%% validate to server that uses the 'pwdfun/4' option
server_pwdfun_4_option(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
PWDFUN = fun("foo",Pwd,{_,_},undefined) -> Pwd=="bar";
("fie",Pwd,{_,_},undefined) -> {Pwd=="bar",new_state};
("bandit",_,_,_) -> disconnect;
@@ -376,10 +376,10 @@ server_pwdfun_4_option(Config) ->
%%--------------------------------------------------------------------
server_pwdfun_4_option_repeat(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
%% Test that the state works
Parent = self(),
PWDFUN = fun("foo",P="bar",_,S) -> Parent!{P,S},true;
@@ -471,10 +471,10 @@ user_dir_option(Config) ->
%%--------------------------------------------------------------------
%%% validate client that uses the 'ssh_msg_debug_fun' option
ssh_msg_debug_fun_option_client(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
@@ -491,7 +491,7 @@ ssh_msg_debug_fun_option_client(Config) ->
{user_interaction, false},
{ssh_msg_debug_fun,DbgFun}]),
%% Beware, implementation knowledge:
- gen_fsm:send_all_state_event(ConnectionRef,{ssh_msg_debug,false,<<"Hello">>,<<>>}),
+ gen_statem:cast(ConnectionRef,{ssh_msg_debug,false,<<"Hello">>,<<>>}),
receive
{msg_dbg,X={ConnectionRef,false,<<"Hello">>,<<>>}} ->
ct:log("Got expected dbg msg ~p",[X]),
@@ -511,10 +511,10 @@ ssh_msg_debug_fun_option_client(Config) ->
%%--------------------------------------------------------------------
connectfun_disconnectfun_server(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
Ref = make_ref(),
@@ -549,10 +549,10 @@ connectfun_disconnectfun_server(Config) ->
%%--------------------------------------------------------------------
connectfun_disconnectfun_client(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
Ref = make_ref(),
@@ -580,10 +580,10 @@ connectfun_disconnectfun_client(Config) ->
%%--------------------------------------------------------------------
%%% validate client that uses the 'ssh_msg_debug_fun' option
ssh_msg_debug_fun_option_server(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
DbgFun = fun(ConnRef,Displ,Msg,Lang) -> Parent ! {msg_dbg,{ConnRef,Displ,Msg,Lang}} end,
@@ -604,7 +604,7 @@ ssh_msg_debug_fun_option_server(Config) ->
receive
{connection_pid,Server} ->
%% Beware, implementation knowledge:
- gen_fsm:send_all_state_event(Server,{ssh_msg_debug,false,<<"Hello">>,<<>>}),
+ gen_statem:cast(Server,{ssh_msg_debug,false,<<"Hello">>,<<>>}),
receive
{msg_dbg,X={_,false,<<"Hello">>,<<>>}} ->
ct:log("Got expected dbg msg ~p",[X]),
@@ -624,10 +624,10 @@ ssh_msg_debug_fun_option_server(Config) ->
%%--------------------------------------------------------------------
disconnectfun_option_server(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
DisConnFun = fun(Reason) -> Parent ! {disconnect,Reason} end,
@@ -659,10 +659,10 @@ disconnectfun_option_server(Config) ->
%%--------------------------------------------------------------------
disconnectfun_option_client(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
DisConnFun = fun(Reason) -> Parent ! {disconnect,Reason} end,
@@ -693,10 +693,10 @@ disconnectfun_option_client(Config) ->
%%--------------------------------------------------------------------
unexpectedfun_option_server(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
ConnFun = fun(_,_,_) -> Parent ! {connection_pid,self()} end,
@@ -736,10 +736,10 @@ unexpectedfun_option_server(Config) ->
%%--------------------------------------------------------------------
unexpectedfun_option_client(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
UnexpFun = fun(Msg,Peer) ->
@@ -859,8 +859,8 @@ ms_passed(T0) ->
%%--------------------------------------------------------------------
ssh_daemon_minimal_remote_max_packet_size_option(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -957,8 +957,8 @@ ssh_connect_negtimeout_sequential(Config) -> ssh_connect_negtimeout(Config,false
ssh_connect_negtimeout(Config, Parallel) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
NegTimeOut = 2000, % ms
ct:log("Parallel: ~p",[Parallel]),
@@ -990,9 +990,9 @@ ssh_connect_nonegtimeout_connected_sequential(Config) ->
ssh_connect_nonegtimeout_connected(Config, Parallel) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
- NegTimeOut = 20000, % ms
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
+ NegTimeOut = 2000, % ms
ct:log("Parallel: ~p",[Parallel]),
{_Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},{user_dir, UserDir},
@@ -1067,7 +1067,7 @@ connect_fun(ssh__connect, Config) ->
fun(Host,Port) ->
ssh_test_lib:connect(Host, Port,
[{silently_accept_hosts, true},
- {user_dir, ?config(priv_dir,Config)},
+ {user_dir, proplists:get_value(priv_dir,Config)},
{user_interaction, false},
{user, "carni"},
{password, "meat"}
@@ -1092,8 +1092,8 @@ max_sessions(Config, ParallelLogin, Connect0) when is_function(Connect0,2) ->
ct:log("Connect(~p,~p) -> ~p",[Host,Port,R]),
R
end,
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
MaxSessions = 5,
{Pid, Host, Port} = ssh_test_lib:daemon([
{system_dir, SystemDir},
@@ -1123,21 +1123,7 @@ max_sessions(Config, ParallelLogin, Connect0) when is_function(Connect0,2) ->
%% This is expected
%% Now stop one connection and try to open one more
ok = ssh:close(hd(Connections)),
- receive after 250 -> ok end, % sleep so the supervisor has time to count down. Not nice...
- try Connect(Host,Port)
- of
- _ConnectionRef1 ->
- %% Step 3 ok: could set up one more connection after killing one
- %% Thats good.
- ssh:stop_daemon(Pid),
- ok
- catch
- error:{badmatch,{error,"Connection closed"}} ->
- %% Bad indeed. Could not set up one more connection even after killing
- %% one existing. Very bad.
- ssh:stop_daemon(Pid),
- {fail,"Does not decrease # active sessions"}
- end
+ try_to_connect(Connect, Host, Port, Pid)
end
catch
error:{badmatch,{error,"Connection closed"}} ->
@@ -1145,6 +1131,35 @@ max_sessions(Config, ParallelLogin, Connect0) when is_function(Connect0,2) ->
{fail,"Too few connections accepted"}
end.
+
+try_to_connect(Connect, Host, Port, Pid) ->
+ {ok,Tref} = timer:send_after(3000, timeout_no_connection), % give the supervisors some time...
+ try_to_connect(Connect, Host, Port, Pid, Tref, 1). % will take max 3300 ms after 11 tries
+
+try_to_connect(Connect, Host, Port, Pid, Tref, N) ->
+ try Connect(Host,Port)
+ of
+ _ConnectionRef1 ->
+ %% Step 3 ok: could set up one more connection after killing one
+ %% Thats good.
+ timer:cancel(Tref),
+ ssh:stop_daemon(Pid),
+ receive % flush.
+ timeout_no_connection -> ok
+ after 0 -> ok
+ end
+ catch
+ error:{badmatch,{error,"Connection closed"}} ->
+ %% Could not set up one more connection. Try again until timeout.
+ receive
+ timeout_no_connection ->
+ ssh:stop_daemon(Pid),
+ {fail,"Does not decrease # active sessions"}
+ after N*50 -> % retry after this time
+ try_to_connect(Connect, Host, Port, Pid, Tref, N+1)
+ end
+ end.
+
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
diff --git a/lib/ssh/test/ssh_peername_sockname_server.erl b/lib/ssh/test/ssh_peername_sockname_server.erl
index 88c96fe444..8731d80f62 100644
--- a/lib/ssh/test/ssh_peername_sockname_server.erl
+++ b/lib/ssh/test/ssh_peername_sockname_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/test/ssh_property_test_SUITE.erl b/lib/ssh/test/ssh_property_test_SUITE.erl
index 2278719f6a..c8aabcedb7 100644
--- a/lib/ssh/test/ssh_property_test_SUITE.erl
+++ b/lib/ssh/test/ssh_property_test_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -57,7 +57,7 @@ init_per_suite(Config) ->
%%% One group in this suite happens to support only QuickCheck, so skip it
%%% if we run proper.
init_per_group(client_server, Config) ->
- case ?config(property_test_tool,Config) of
+ case proplists:get_value(property_test_tool,Config) of
eqc -> Config;
X -> {skip, lists:concat([X," is not supported"])}
end;
diff --git a/lib/ssh/test/ssh_protocol_SUITE.erl b/lib/ssh/test/ssh_protocol_SUITE.erl
index 44da0f4d6f..4fac1f718a 100644
--- a/lib/ssh/test/ssh_protocol_SUITE.erl
+++ b/lib/ssh/test/ssh_protocol_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -26,6 +26,7 @@
-include_lib("ssh/src/ssh.hrl"). % ?UINT32, ?BYTE, #ssh{} ...
-include_lib("ssh/src/ssh_transport.hrl").
-include_lib("ssh/src/ssh_auth.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -43,7 +44,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,2}}].
+ {timetrap,{seconds,40}}].
all() ->
[{group,tool_tests},
@@ -87,7 +88,7 @@ groups() ->
init_per_suite(Config) ->
- start_std_daemon( setup_dirs( start_apps(Config))).
+ ?CHECK_CRYPTO(start_std_daemon( setup_dirs( start_apps(Config)))).
end_per_suite(Config) ->
stop_apps(Config).
@@ -107,11 +108,11 @@ init_per_testcase(TC, Config) when TC == gex_client_init_option_groups ;
gex_client_init_option_groups ->
[{dh_gex_groups, [{2345, 3, 41}]}];
gex_client_init_option_groups_file ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
F = filename:join(DataDir, "dh_group_test"),
[{dh_gex_groups, {file,F}}];
gex_client_init_option_groups_moduli_file ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
F = filename:join(DataDir, "dh_group_test.moduli"),
[{dh_gex_groups, {ssh_moduli_file,F}}];
_ when TC == gex_server_gex_limit ;
@@ -308,7 +309,7 @@ no_common_alg_client_disconnects(Config) ->
{send, hello},
{match, #ssh_msg_kexinit{_='_'}, receive_msg},
{send, #ssh_msg_kexinit{ % with unsupported "SOME-UNSUPPORTED"
- cookie = 247381486335508958743193106082599558706,
+ cookie = <<80,158,95,51,174,35,73,130,246,141,200,49,180,190,82,234>>,
kex_algorithms = ["diffie-hellman-group1-sha1"],
server_host_key_algorithms = ["SOME-UNSUPPORTED"], % SIC!
encryption_algorithms_client_to_server = ["aes128-ctr"],
@@ -589,21 +590,21 @@ stop_apps(_Config) ->
setup_dirs(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_rsa(DataDir, PrivDir),
Config.
-system_dir(Config) -> filename:join(?config(priv_dir, Config), system).
+system_dir(Config) -> filename:join(proplists:get_value(priv_dir, Config), system).
-user_dir(Config) -> ?config(priv_dir, Config).
+user_dir(Config) -> proplists:get_value(priv_dir, Config).
%%%----------------------------------------------------------------
start_std_daemon(Config) ->
start_std_daemon(Config, []).
start_std_daemon(Config, ExtraOpts) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
UserPasswords = [{"user1","pwd1"}],
diff --git a/lib/ssh/test/ssh_renegotiate_SUITE.erl b/lib/ssh/test/ssh_renegotiate_SUITE.erl
index 6d2c97aa68..b10ec3707f 100644
--- a/lib/ssh/test/ssh_renegotiate_SUITE.erl
+++ b/lib/ssh/test/ssh_renegotiate_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
-module(ssh_renegotiate_SUITE).
-include_lib("common_test/include/ct.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -31,8 +32,7 @@
%%--------------------------------------------------------------------
suite() -> [{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,12}}].
-
+ {timetrap,{seconds,40}}].
all() -> [{group,default_algs},
{group,aes_gcm}
@@ -46,7 +46,7 @@ tests() -> [rekey, rekey_limit, renegotiate1, renegotiate2].
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config.
+ ?CHECK_CRYPTO(Config).
end_per_suite(_Config) ->
ssh:stop().
@@ -83,7 +83,8 @@ end_per_testcase(_TestCase, _Config) ->
%%--------------------------------------------------------------------
%%% Idle timeout test
-
+rekey() -> [{timetrap,{seconds,90}}].
+
rekey(Config) ->
{Pid, Host, Port} =
ssh_test_lib:std_daemon(Config,
@@ -105,11 +106,13 @@ rekey(Config) ->
%%% Test rekeying by data volume
+rekey_limit() -> [{timetrap,{seconds,400}}].
+
rekey_limit(Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
DataFile = filename:join(UserDir, "rekey.data"),
- Algs = ?config(preferred_algorithms, Config),
+ Algs = proplists:get_value(preferred_algorithms, Config),
{Pid, Host, Port} = ssh_test_lib:std_daemon(Config,[{max_random_length_padding,0},
{preferred_algorithms,Algs}]),
@@ -152,10 +155,10 @@ rekey_limit(Config) ->
%%% Test rekeying with simulataneous send request
renegotiate1(Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
DataFile = filename:join(UserDir, "renegotiate1.data"),
- Algs = ?config(preferred_algorithms, Config),
+ Algs = proplists:get_value(preferred_algorithms, Config),
{Pid, Host, DPort} = ssh_test_lib:std_daemon(Config,[{max_random_length_padding,0},
{preferred_algorithms,Algs}]),
@@ -192,10 +195,10 @@ renegotiate1(Config) ->
%%% Test rekeying with inflight messages from peer
renegotiate2(Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
DataFile = filename:join(UserDir, "renegotiate2.data"),
- Algs = ?config(preferred_algorithms, Config),
+ Algs = proplists:get_value(preferred_algorithms, Config),
{Pid, Host, DPort} = ssh_test_lib:std_daemon(Config,[{max_random_length_padding,0},
{preferred_algorithms,Algs}]),
@@ -235,7 +238,7 @@ renegotiate2(Config) ->
%% get_kex_init - helper function to get key_exchange_init_msg
get_kex_init(Conn) ->
%% First, validate the key exchange is complete (StateName == connected)
- {connected,S} = sys:get_state(Conn),
+ {{connected,_},S} = sys:get_state(Conn),
%% Next, walk through the elements of the #state record looking
%% for the #ssh_msg_kexinit record. This method is robust against
%% changes to either record. The KEXINIT message contains a cookie
diff --git a/lib/ssh/test/ssh_sftp_SUITE.erl b/lib/ssh/test/ssh_sftp_SUITE.erl
index c2b04d7a05..19ad81e7da 100644
--- a/lib/ssh/test/ssh_sftp_SUITE.erl
+++ b/lib/ssh/test/ssh_sftp_SUITE.erl
@@ -1,7 +1,7 @@
-%%
+%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-
+-include("ssh_test_lib.hrl").
% Default timetrap timeout
-define(default_timeout, ?t:minutes(1)).
@@ -36,8 +36,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,2}}].
-
+ {timetrap,{seconds,40}}].
all() ->
[{group, not_unicode},
@@ -46,10 +45,13 @@ all() ->
init_per_suite(Config) ->
- ct:log("file:native_name_encoding() = ~p,~nio:getopts() = ~p",
- [file:native_name_encoding(),io:getopts()]),
- ssh:start(),
- Config.
+ ?CHECK_CRYPTO(
+ begin
+ ct:log("file:native_name_encoding() = ~p,~nio:getopts() = ~p",
+ [file:native_name_encoding(),io:getopts()]),
+ ssh:start(),
+ Config
+ end).
end_per_suite(_onfig) ->
ssh:stop().
@@ -87,42 +89,43 @@ groups() ->
write_file, write_file_iolist, write_big_file, sftp_read_big_file,
rename_file, mk_rm_dir, remove_file, links,
retrieve_attributes, set_attributes, async_read,
- async_write, position, pos_read, pos_write
+ async_write, position, pos_read, pos_write,
+ start_channel_sock
]}
].
init_per_group(not_unicode, Config) ->
ct:comment("Begin ~p",[grps(Config)]),
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
[{user, "Alladin"},
{passwd, "Sesame"},
{data, <<"Hello world!">>},
- {filename, filename:join(PrivDir, "sftp.txt")},
- {testfile, filename:join(PrivDir, "test.txt")},
- {linktest, filename:join(PrivDir, "link_test.txt")},
- {tar_filename, filename:join(PrivDir, "sftp_tar_test.tar")},
- {tar_F1_txt, "f1.txt"},
+ {filename, "sftp.txt"},
+ {testfile, "test.txt"},
+ {linktest, "link_test.txt"},
+ {tar_filename, "sftp_tar_test.tar"},
+ {tar_F1_txt, "f1.txt"},
{datadir_tar, filename:join(DataDir,"sftp_tar_test_data")}
| Config];
init_per_group(unicode, Config) ->
- case file:native_name_encoding() of
- utf8 ->
+ case (file:native_name_encoding() == utf8)
+ andalso ("四" == [22235])
+ of
+ true ->
ct:comment("Begin ~p",[grps(Config)]),
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
NewConfig =
[{user, "åke高兴"},
{passwd, "ärlig日本じん"},
{data, <<"foobar å 一二三四いちにさんち">>},
- {filename, filename:join(PrivDir, "sftp瑞点.txt")},
- {testfile, filename:join(PrivDir, "testハンス.txt")},
- {linktest, filename:join(PrivDir, "link_test語.txt")},
- {tar_filename, filename:join(PrivDir, "sftp_tar_test一二三.tar")},
- {tar_F1_txt, "F一.txt"},
- {tar_F3_txt, "f3.txt"},
- {tar_F4_txt, "g四.txt"},
+ {filename, "sftp瑞点.txt"},
+ {testfile, "testハンス.txt"},
+ {linktest, "link_test語.txt"},
+ {tar_filename, "sftp_tar_test一二三.tar"},
+ {tar_F1_txt, "F一.txt"},
+ {tar_F3_txt, "f3.txt"},
+ {tar_F4_txt, "g四.txt"},
{datadir_tar, filename:join(DataDir,"sftp_tar_test_data_高兴")}
| lists:foldl(fun(K,Cf) -> lists:keydelete(K,1,Cf) end,
Config,
@@ -132,7 +135,7 @@ init_per_group(unicode, Config) ->
]
)
],
- FN = fn(?config(tar_F1_txt,NewConfig), NewConfig),
+ FN = fn(proplists:get_value(tar_F1_txt,NewConfig), NewConfig),
case catch file:read_file(FN) of
{ok,FN_contents} ->
ct:log("Readable file:read_file(~tp) ->~n~tp",[FN,FN_contents]),
@@ -148,10 +151,10 @@ init_per_group(unicode, Config) ->
init_per_group(erlang_server, Config) ->
ct:comment("Begin ~p",[grps(Config)]),
- PrivDir = ?config(priv_dir, Config),
- SysDir = ?config(data_dir, Config),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
Sftpd = {_, HostX, PortX} =
ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, PrivDir},
@@ -177,12 +180,12 @@ init_per_group(openssh_server, Config) ->
init_per_group(remote_tar, Config) ->
ct:comment("Begin ~p",[grps(Config)]),
- {Host,Port} = ?config(peer, Config),
- ct:log("Server (~p) at ~p:~p",[?config(group,Config),Host,Port]),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ {Host,Port} = proplists:get_value(peer, Config),
+ ct:log("Server (~p) at ~p:~p",[proplists:get_value(group,Config),Host,Port]),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
{ok, Connection} =
- case ?config(group, Config) of
+ case proplists:get_value(group, Config) of
erlang_server ->
ssh:connect(Host, Port,
[{user, User},
@@ -217,10 +220,10 @@ end_per_group(_, Config) ->
%%--------------------------------------------------------------------
init_per_testcase(sftp_nonexistent_subsystem, Config) ->
- PrivDir = ?config(priv_dir, Config),
- SysDir = ?config(data_dir, Config),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
Sftpd = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, PrivDir},
{subsystems, []},
@@ -229,14 +232,14 @@ init_per_testcase(sftp_nonexistent_subsystem, Config) ->
]),
[{sftpd, Sftpd} | Config];
-init_per_testcase(version_option, Config) ->
- prep(Config),
+init_per_testcase(version_option, Config0) ->
+ Config = prepare(Config0),
TmpConfig0 = lists:keydelete(watchdog, 1, Config),
TmpConfig = lists:keydelete(sftp, 1, TmpConfig0),
Dog = ct:timetrap(?default_timeout),
- {_,Host, Port} = ?config(sftpd, Config),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ {_,Host, Port} = proplists:get_value(sftpd, Config),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
{ok, ChannelPid, Connection} =
ssh_sftp:start_channel(Host, Port,
[{sftp_vsn, 3},
@@ -247,18 +250,18 @@ init_per_testcase(version_option, Config) ->
Sftp = {ChannelPid, Connection},
[{sftp,Sftp}, {watchdog, Dog} | TmpConfig];
-init_per_testcase(Case, Config0) ->
- prep(Config0),
+init_per_testcase(Case, Config00) ->
+ Config0 = prepare(Config00),
Config1 = lists:keydelete(watchdog, 1, Config0),
Config2 = lists:keydelete(sftp, 1, Config1),
Dog = ct:timetrap(2 * ?default_timeout),
- User = ?config(user, Config0),
- Passwd = ?config(passwd, Config0),
+ User = proplists:get_value(user, Config0),
+ Passwd = proplists:get_value(passwd, Config0),
Config =
- case ?config(group,Config2) of
+ case proplists:get_value(group,Config2) of
erlang_server ->
- {_,Host, Port} = ?config(sftpd, Config2),
+ {_,Host, Port} = proplists:get_value(sftpd, Config2),
{ok, ChannelPid, Connection} =
ssh_sftp:start_channel(Host, Port,
[{user, User},
@@ -280,11 +283,11 @@ init_per_testcase(Case, Config0) ->
[{sftp, Sftp}, {watchdog, Dog} | Config2]
end,
- case catch ?config(remote_tar,Config) of
+ case catch proplists:get_value(remote_tar,Config) of
%% The 'catch' is for the case of Config={skip,...}
true ->
%% Provide a ChannelPid independent of the sftp-channel already opened.
- {ok,ChPid2} = ssh_sftp:start_channel(?config(connection,Config)),
+ {ok,ChPid2} = ssh_sftp:start_channel(proplists:get_value(connection,Config)),
[{channel_pid2,ChPid2} | Config];
_ ->
Config
@@ -293,17 +296,17 @@ init_per_testcase(Case, Config0) ->
end_per_testcase(sftp_nonexistent_subsystem, Config) ->
Config;
end_per_testcase(rename_file, Config) ->
- NewFileName = ?config(testfile, Config),
+ NewFileName = proplists:get_value(testfile, Config),
file:delete(NewFileName),
end_per_testcase(Config);
end_per_testcase(_, Config) ->
end_per_testcase(Config).
end_per_testcase(Config) ->
- {Sftp, Connection} = ?config(sftp, Config),
- ssh_sftp:stop_channel(Sftp),
- catch ssh_sftp:stop_channel(?config(channel_pid2, Config)),
- ssh:close(Connection).
+ {Sftp, Connection} = proplists:get_value(sftp, Config),
+ ok = ssh_sftp:stop_channel(Sftp),
+ catch ssh_sftp:stop_channel(proplists:get_value(channel_pid2, Config)),
+ ok = ssh:close(Connection).
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
@@ -311,9 +314,9 @@ end_per_testcase(Config) ->
open_close_file() ->
[{doc, "Test API functions open/3 and close/2"}].
open_close_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
+ FileName = proplists:get_value(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
ok = open_close_file(Sftp, FileName, [read]),
ok = open_close_file(Sftp, FileName, [write]),
@@ -330,9 +333,9 @@ open_close_file(Server, File, Mode) ->
open_close_dir() ->
[{doc, "Test API functions opendir/2 and close/2"}].
open_close_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Sftp, _} = ?config(sftp, Config),
- FileName = ?config(filename, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
{ok, Handle} = ssh_sftp:opendir(Sftp, PrivDir),
ok = ssh_sftp:close(Sftp, Handle),
@@ -342,8 +345,8 @@ open_close_dir(Config) when is_list(Config) ->
read_file() ->
[{doc, "Test API funtion read_file/2"}].
read_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Data} = ssh_sftp:read_file(Sftp, FileName),
{ok, Data} = ssh_sftp:read_file(Sftp, FileName),
{ok, Data} = file:read_file(FileName).
@@ -352,8 +355,8 @@ read_file(Config) when is_list(Config) ->
read_dir() ->
[{doc,"Test API function list_dir/2"}].
read_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Sftp, _} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Files} = ssh_sftp:list_dir(Sftp, PrivDir),
ct:log("sftp list dir: ~p~n", [Files]).
@@ -361,24 +364,24 @@ read_dir(Config) when is_list(Config) ->
write_file() ->
[{doc, "Test API function write_file/2"}].
write_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("Hej hopp!"),
- ssh_sftp:write_file(Sftp, FileName, [Data]),
+ ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
{ok, Data} = file:read_file(FileName).
%%--------------------------------------------------------------------
write_file_iolist() ->
[{doc, "Test API function write_file/2 with iolists"}].
write_file_iolist(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("Hej hopp!"),
lists:foreach(
fun(D) ->
- ssh_sftp:write_file(Sftp, FileName, [D]),
+ ok = ssh_sftp:write_file(Sftp, FileName, [D]),
Expected = if is_binary(D) -> D;
is_list(D) -> list_to_binary(D)
end,
@@ -393,48 +396,48 @@ write_file_iolist(Config) when is_list(Config) ->
write_big_file() ->
[{doc, "Test API function write_file/2 with big data"}].
write_big_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary(lists:duplicate(750000,"a")),
- ssh_sftp:write_file(Sftp, FileName, [Data]),
+ ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
{ok, Data} = file:read_file(FileName).
%%--------------------------------------------------------------------
sftp_read_big_file() ->
[{doc, "Test API function read_file/2 with big data"}].
sftp_read_big_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary(lists:duplicate(750000,"a")),
ct:log("Data size to write is ~p bytes",[size(Data)]),
- ssh_sftp:write_file(Sftp, FileName, [Data]),
+ ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
{ok, Data} = ssh_sftp:read_file(Sftp, FileName).
%%--------------------------------------------------------------------
remove_file() ->
[{doc,"Test API function delete/2"}].
remove_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Files} = ssh_sftp:list_dir(Sftp, PrivDir),
true = lists:member(filename:basename(FileName), Files),
ok = ssh_sftp:delete(Sftp, FileName),
{ok, NewFiles} = ssh_sftp:list_dir(Sftp, PrivDir),
false = lists:member(filename:basename(FileName), NewFiles),
- {error, _} = ssh_sftp:delete(Sftp, FileName).
+ {error, no_such_file} = ssh_sftp:delete(Sftp, FileName).
%%--------------------------------------------------------------------
rename_file() ->
[{doc, "Test API function rename_file/2"}].
rename_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- FileName = ?config(filename, Config),
- NewFileName = ?config(testfile, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ FileName = proplists:get_value(filename, Config),
+ NewFileName = proplists:get_value(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Files} = ssh_sftp:list_dir(Sftp, PrivDir),
ct:log("FileName: ~p, Files: ~p~n", [FileName, Files]),
true = lists:member(filename:basename(FileName), Files),
@@ -450,8 +453,8 @@ rename_file(Config) when is_list(Config) ->
mk_rm_dir() ->
[{doc,"Test API functions make_dir/2, del_dir/2"}].
mk_rm_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Sftp, _} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
DirName = filename:join(PrivDir, "test"),
ok = ssh_sftp:make_dir(Sftp, DirName),
@@ -468,9 +471,9 @@ links(Config) when is_list(Config) ->
{win32, _} ->
{skip, "Links are not fully supported by windows"};
_ ->
- {Sftp, _} = ?config(sftp, Config),
- FileName = ?config(filename, Config),
- LinkFileName = ?config(linktest, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ LinkFileName = proplists:get_value(linktest, Config),
ok = ssh_sftp:make_symlink(Sftp, LinkFileName, FileName),
{ok, FileName} = ssh_sftp:read_link(Sftp, LinkFileName)
@@ -480,9 +483,9 @@ links(Config) when is_list(Config) ->
retrieve_attributes() ->
[{doc, "Test API function read_file_info/3"}].
retrieve_attributes(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
+ FileName = proplists:get_value(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, FileInfo} = ssh_sftp:read_file_info(Sftp, FileName),
{ok, NewFileInfo} = file:read_file_info(FileName),
@@ -493,14 +496,14 @@ retrieve_attributes(Config) when is_list(Config) ->
set_attributes() ->
[{doc,"Test API function write_file_info/3"}].
set_attributes(Config) when is_list(Config) ->
- FileName = ?config(testfile, Config),
+ FileName = proplists:get_value(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok,Fd} = file:open(FileName, write),
io:put_chars(Fd,"foo"),
ok = ssh_sftp:write_file_info(Sftp, FileName, #file_info{mode=8#400}),
{error, eacces} = file:write_file(FileName, "hello again"),
- ssh_sftp:write_file_info(Sftp, FileName, #file_info{mode=8#600}),
+ ok = ssh_sftp:write_file_info(Sftp, FileName, #file_info{mode=8#600}),
ok = file:write_file(FileName, "hello again").
%%--------------------------------------------------------------------
@@ -508,9 +511,9 @@ set_attributes(Config) when is_list(Config) ->
async_read() ->
[{doc,"Test API aread/3"}].
async_read(Config) when is_list(Config) ->
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
- FileName = ?config(filename, Config),
+ FileName = proplists:get_value(filename, Config),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [read]),
{async, Ref} = ssh_sftp:aread(Sftp, Handle, 20),
@@ -527,8 +530,8 @@ async_read(Config) when is_list(Config) ->
async_write() ->
[{doc,"Test API awrite/3"}].
async_write(Config) when is_list(Config) ->
- {Sftp, _} = ?config(sftp, Config),
- FileName = ?config(testfile, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
+ FileName = proplists:get_value(testfile, Config),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [write]),
Data = list_to_binary("foobar"),
{async, Ref} = ssh_sftp:awrite(Sftp, Handle, Data),
@@ -545,11 +548,11 @@ async_write(Config) when is_list(Config) ->
position() ->
[{doc, "Test API functions position/3"}].
position(Config) when is_list(Config) ->
- FileName = ?config(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(testfile, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("1234567890"),
- ssh_sftp:write_file(Sftp, FileName, [Data]),
+ ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [read]),
{ok, 3} = ssh_sftp:position(Sftp, Handle, {bof, 3}),
@@ -574,10 +577,10 @@ position(Config) when is_list(Config) ->
pos_read() ->
[{doc,"Test API functions pread/3 and apread/3"}].
pos_read(Config) when is_list(Config) ->
- FileName = ?config(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(testfile, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("Hej hopp!"),
- ssh_sftp:write_file(Sftp, FileName, [Data]),
+ ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [read]),
{async, Ref} = ssh_sftp:apread(Sftp, Handle, {bof, 5}, 4),
@@ -601,13 +604,13 @@ pos_read(Config) when is_list(Config) ->
pos_write() ->
[{doc,"Test API functions pwrite/4 and apwrite/4"}].
pos_write(Config) when is_list(Config) ->
- FileName = ?config(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(testfile, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [write]),
Data = list_to_binary("Bye,"),
- ssh_sftp:write_file(Sftp, FileName, [Data]),
+ ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
NewData = list_to_binary(" see you tomorrow"),
{async, Ref} = ssh_sftp:apwrite(Sftp, Handle, {bof, 4}, NewData),
@@ -626,12 +629,65 @@ pos_write(Config) when is_list(Config) ->
{ok, NewData1} = ssh_sftp:read_file(Sftp, FileName).
%%--------------------------------------------------------------------
+start_channel_sock(Config) ->
+ LoginOpts =
+ case proplists:get_value(group,Config) of
+ erlang_server ->
+ [{user, proplists:get_value(user, Config)},
+ {password, proplists:get_value(passwd, Config)}];
+ openssh_server ->
+ [] % Use public key
+ end,
+
+ Opts = [{user_interaction, false},
+ {silently_accept_hosts, true}
+ | LoginOpts],
+
+ {Host,Port} = proplists:get_value(peer, Config),
+
+ %% Get a tcp socket
+ {ok, Sock} = gen_tcp:connect(Host, Port, [{active,false}]),
+
+ %% and open one channel on one new Connection
+ {ok, ChPid1, Conn} = ssh_sftp:start_channel(Sock, Opts),
+
+ %% Test that the channel is usable
+ FileName = proplists:get_value(filename, Config),
+ ok = open_close_file(ChPid1, FileName, [read]),
+ ok = open_close_file(ChPid1, FileName, [write]),
+
+ %% Try to open a second channel on the Connection
+ {ok, ChPid2} = ssh_sftp:start_channel(Conn, Opts),
+ ok = open_close_file(ChPid1, FileName, [read]),
+ ok = open_close_file(ChPid2, FileName, [read]),
+
+ %% Test that the second channel still works after closing the first one
+ ok = ssh_sftp:stop_channel(ChPid1),
+ ok = open_close_file(ChPid2, FileName, [write]),
+
+ %% Test the Connection survives that all channels are closed
+ ok = ssh_sftp:stop_channel(ChPid2),
+ {ok, ChPid3} = ssh_sftp:start_channel(Conn, Opts),
+ ok = open_close_file(ChPid3, FileName, [write]),
+
+ %% Test that a closed channel really is closed
+ {error, closed} = ssh_sftp:open(ChPid2, FileName, [write]),
+ ok = ssh_sftp:stop_channel(ChPid3),
+
+ %% Test that the socket is closed when the Connection closes
+ ok = ssh:close(Conn),
+ timer:sleep(400), %% Until the stop sequence is fixed
+ {error,einval} = inet:getopts(Sock, [active]),
+
+ ok.
+
+%%--------------------------------------------------------------------
sftp_nonexistent_subsystem() ->
[{doc, "Try to execute sftp subsystem on a server that does not support it"}].
sftp_nonexistent_subsystem(Config) when is_list(Config) ->
- {_,Host, Port} = ?config(sftpd, Config),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ {_,Host, Port} = proplists:get_value(sftpd, Config),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
{error,"server failed to start sftp subsystem"} =
ssh_sftp:start_channel(Host, Port,
[{user_interaction, false},
@@ -647,20 +703,20 @@ version_option(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
create_empty_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
erl_tar:close(Handle),
- {ChPid,_} = ?config(sftp,Config),
+ {ChPid,_} = proplists:get_value(sftp,Config),
{ok, #file_info{type=regular}} =
ssh_sftp:read_file_info(ChPid, TarFileName).
%%--------------------------------------------------------------------
files_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose]),
ok = erl_tar:add(Handle, fn("f2.txt",Config), "f2.txt", [verbose]),
ok = erl_tar:close(Handle),
@@ -668,8 +724,8 @@ files_to_tar(Config) ->
%%--------------------------------------------------------------------
ascii_filename_ascii_contents_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn("f2.txt",Config), "f2.txt", [verbose]),
ok = erl_tar:close(Handle),
@@ -677,12 +733,12 @@ ascii_filename_ascii_contents_to_tar(Config) ->
%%--------------------------------------------------------------------
ascii_filename_unicode_contents_to_tar(Config) ->
- case ?config(tar_F3_txt, Config) of
+ case proplists:get_value(tar_F3_txt, Config) of
undefined ->
{skip, "Unicode test"};
Fn ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn(Fn,Config), Fn, [verbose]),
ok = erl_tar:close(Handle),
@@ -691,12 +747,12 @@ ascii_filename_unicode_contents_to_tar(Config) ->
%%--------------------------------------------------------------------
unicode_filename_ascii_contents_to_tar(Config) ->
- case ?config(tar_F4_txt, Config) of
+ case proplists:get_value(tar_F4_txt, Config) of
undefined ->
{skip, "Unicode test"};
Fn ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn(Fn,Config), Fn, [verbose]),
ok = erl_tar:close(Handle),
@@ -705,8 +761,8 @@ unicode_filename_ascii_contents_to_tar(Config) ->
%%--------------------------------------------------------------------
big_file_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn("big.txt",Config), "big.txt", [verbose]),
ok = erl_tar:close(Handle),
@@ -715,18 +771,18 @@ big_file_to_tar(Config) ->
%%--------------------------------------------------------------------
files_chunked_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose,{chunks,2}]),
ok = erl_tar:close(Handle),
chk_tar([F1], Config).
%%--------------------------------------------------------------------
directory_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn("d1",Config), "d1", [verbose]),
ok = erl_tar:close(Handle),
@@ -734,8 +790,8 @@ directory_to_tar(Config) ->
%%--------------------------------------------------------------------
binaries_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
Bin = <<"A binary">>,
ok = erl_tar:add(Handle, Bin, "b1", [verbose]),
@@ -744,15 +800,15 @@ binaries_to_tar(Config) ->
%%--------------------------------------------------------------------
null_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
Cinit = fun() -> {ok, no_state, _SendSize=5} end,
Cenc = fun(Bin,CState) -> {ok,Bin,CState,_SendSize=5} end,
Cend = fun(Bin,_CState) -> {ok,Bin} end,
C = {Cinit,Cenc,Cend},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,C}]),
Bin = <<"A binary">>,
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, Bin, "b1", [verbose]),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose,{chunks,2}]),
ok = erl_tar:add(Handle, fn("big.txt",Config), "big.txt", [verbose,{chunks,15000}]),
@@ -761,16 +817,16 @@ null_crypto_tar(Config) ->
%%--------------------------------------------------------------------
simple_crypto_tar_small(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
Cinit = fun() -> {ok, no_state, _Size=6} end,
Cenc = fun(Bin,CState) -> {ok,stuff(Bin),CState,_SendSize=5} end,
Cdec = fun(Bin,CState) -> {ok,unstuff(Bin),CState,_Size=4} end,
Cend = fun(Bin,_CState) -> {ok,stuff(Bin)} end,
C = {Cinit,Cenc,Cend},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,C}]),
Bin = <<"A binary">>,
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, Bin, "b1", [verbose]),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose,{chunks,2}]),
ok = erl_tar:close(Handle),
@@ -778,16 +834,16 @@ simple_crypto_tar_small(Config) ->
%%--------------------------------------------------------------------
simple_crypto_tar_big(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
Cinit = fun() -> {ok, no_state, _SendSize=6} end,
Cenc = fun(Bin,CState) -> {ok,stuff(Bin),CState,_SendSize=5} end,
Cdec = fun(Bin,CState) -> {ok,unstuff(Bin),CState,_SendSize=4} end,
Cend = fun(Bin,_CState) -> {ok,stuff(Bin)} end,
C = {Cinit,Cenc,Cend},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,C}]),
Bin = <<"A binary">>,
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, Bin, "b1", [verbose]),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose,{chunks,2}]),
ok = erl_tar:add(Handle, fn("big.txt",Config), "big.txt", [verbose,{chunks,15000}]),
@@ -800,12 +856,12 @@ unstuff(Bin) -> << <<C>> || <<C,C>> <= Bin >>.
%%--------------------------------------------------------------------
read_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))}
]),
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose])
|| {Name,Bin} <- NameBins],
@@ -815,7 +871,7 @@ read_tar(Config) ->
%%--------------------------------------------------------------------
read_null_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))}
@@ -828,7 +884,7 @@ read_null_crypto_tar(Config) ->
Cw = {Cinitw,Cenc,Cendw},
Cr = {Cinitr,Cdec},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,Cw}]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose])
|| {Name,Bin} <- NameBins],
@@ -838,7 +894,7 @@ read_null_crypto_tar(Config) ->
%%--------------------------------------------------------------------
read_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))}
@@ -852,7 +908,7 @@ read_crypto_tar(Config) ->
Cw = {Cinitw,Cenc,Cendw},
Cr = {Cinitr,Cdec},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,Cw}]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose])
|| {Name,Bin} <- NameBins],
@@ -862,14 +918,14 @@ read_crypto_tar(Config) ->
%%--------------------------------------------------------------------
aes_cbc256_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))},
{"d1",fn("d1",Config)} % Dir
]),
Key = <<"This is a 256 bit key. Boring...">>,
- Ivec0 = crypto:rand_bytes(16),
+ Ivec0 = crypto:strong_rand_bytes(16),
DataSize = 1024, % data_size rem 16 = 0 for aes_cbc
Cinitw = fun() -> {ok, Ivec0, DataSize} end,
@@ -892,7 +948,7 @@ aes_cbc256_crypto_tar(Config) ->
end,
Cw = {Cinitw,Cenc,Cendw},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,Cw}]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose]) || {Name,Bin} <- NameBins],
ok = erl_tar:close(HandleWrite),
@@ -907,14 +963,14 @@ pad(BlockSize, Bin) ->
%%--------------------------------------------------------------------
aes_ctr_stream_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))},
{"d1",fn("d1",Config)} % Dir
]),
Key = <<"This is a 256 bit key. Boring...">>,
- Ivec0 = crypto:rand_bytes(16),
+ Ivec0 = crypto:strong_rand_bytes(16),
Cinitw = Cinitr = fun() -> {ok, crypto:stream_init(aes_ctr,Key,Ivec0)} end,
@@ -935,7 +991,7 @@ aes_ctr_stream_crypto_tar(Config) ->
end,
Cw = {Cinitw,Cenc,Cendw},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,Cw}]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose]) || {Name,Bin} <- NameBins],
ok = erl_tar:close(HandleWrite),
@@ -946,12 +1002,12 @@ aes_ctr_stream_crypto_tar(Config) ->
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
-prep(Config) ->
- DataDir = ?config(data_dir, Config),
- TestFile = ?config(filename, Config),
- TestFile1 = ?config(testfile, Config),
- TestLink = ?config(linktest, Config),
- TarFileName = ?config(tar_filename, Config),
+oldprep(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ TestFile = proplists:get_value(filename, Config),
+ TestFile1 = proplists:get_value(testfile, Config),
+ TestLink = proplists:get_value(linktest, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
file:delete(TestFile),
file:delete(TestFile1),
@@ -966,16 +1022,46 @@ prep(Config) ->
ok = file:write_file_info(TestFile,
FileInfo#file_info{mode = Mode}).
+prepare(Config0) ->
+ PrivDir = proplists:get_value(priv_dir, Config0),
+ Dir = filename:join(PrivDir, random_chars(10)),
+ file:make_dir(Dir),
+ Keys = [filename,
+ testfile,
+ linktest,
+ tar_filename],
+ Config1 = foldl_keydelete(Keys, Config0),
+ Config2 = lists:foldl(fun({Key,Name}, ConfAcc) ->
+ [{Key, filename:join(Dir,Name)} | ConfAcc]
+ end,
+ Config1,
+ lists:zip(Keys, [proplists:get_value(K,Config0) || K<-Keys])),
+
+ DataDir = proplists:get_value(data_dir, Config2),
+ FilenameSrc = filename:join(DataDir, "sftp.txt"),
+ FilenameDst = proplists:get_value(filename, Config2),
+ {ok,_} = file:copy(FilenameSrc, FilenameDst),
+ [{sftp_priv_dir,Dir} | Config2].
+
+
+random_chars(N) -> [crypto:rand_uniform($a,$z) || _<-lists:duplicate(N,x)].
+
+foldl_keydelete(Keys, L) ->
+ lists:foldl(fun(K,E) -> lists:keydelete(K,1,E) end,
+ L,
+ Keys).
+
+
chk_tar(Items, Config) ->
chk_tar(Items, Config, []).
chk_tar(Items, Config, Opts) ->
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
chk_tar(Items, TarFileName, Config, Opts).
chk_tar(Items, TarFileName, Config, Opts) when is_list(Opts) ->
tar_size(TarFileName, Config),
- {ChPid,_} = ?config(sftp,Config),
+ {ChPid,_} = proplists:get_value(sftp,Config),
{ok,HandleRead} = ssh_sftp:open_tar(ChPid, TarFileName, [read|Opts]),
{ok,NameValueList} = erl_tar:extract(HandleRead,[memory,verbose]),
ok = erl_tar:close(HandleRead),
@@ -1017,7 +1103,7 @@ analyze_report([], []) ->
"".
tar_size(TarFileName, Config) ->
- {ChPid,_} = ?config(sftp,Config),
+ {ChPid,_} = proplists:get_value(sftp,Config),
{ok,Data} = ssh_sftp:read_file(ChPid, TarFileName),
io:format('Tar file ~p is~n ~p bytes.~n',[TarFileName, size(Data)]).
@@ -1044,7 +1130,7 @@ read_item_contents(ItemName, FileName) ->
end.
fn(Name, Config) ->
- Dir = ?config(datadir_tar, Config),
+ Dir = proplists:get_value(datadir_tar, Config),
filename:join(Dir,Name).
fmt_host({A,B,C,D}) -> lists:concat([A,".",B,".",C,".",D]);
diff --git a/lib/ssh/test/ssh_sftpd_SUITE.erl b/lib/ssh/test/ssh_sftpd_SUITE.erl
index 45439ce0fa..52a26110c4 100644
--- a/lib/ssh/test/ssh_sftpd_SUITE.erl
+++ b/lib/ssh/test/ssh_sftpd_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@
-include_lib("kernel/include/file.hrl").
-include("ssh_xfer.hrl").
-include("ssh.hrl").
+-include("ssh_test_lib.hrl").
-define(USER, "Alladin").
-define(PASSWD, "Sesame").
@@ -45,7 +46,7 @@
%%--------------------------------------------------------------------
suite() ->
- [{timetrap,{minutes,3}}].
+ [{timetrap,{seconds,40}}].
all() ->
[open_close_file,
@@ -72,19 +73,22 @@ groups() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
- ssh_test_lib:setup_dsa(DataDir, PrivDir),
- %% to make sure we don't use public-key-auth
- %% this should be tested by other test suites
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
- file:make_dir(UserDir),
- Config.
+ ?CHECK_CRYPTO(
+ begin
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ ssh_test_lib:setup_dsa(DataDir, PrivDir),
+ %% to make sure we don't use public-key-auth
+ %% this should be tested by other test suites
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
+ file:make_dir(UserDir),
+ Config
+ end).
end_per_suite(Config) ->
- SysDir = ?config(priv_dir, Config),
+ SysDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(SysDir),
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
file:del_dir(UserDir),
ssh:stop().
@@ -101,11 +105,10 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(TestCase, Config) ->
ssh:start(),
prep(Config),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ClientUserDir = filename:join(PrivDir, nopubkey),
- SystemDir = filename:join(?config(priv_dir, Config), system),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
- Port = ssh_test_lib:inet_port(node()),
Options = [{system_dir, SystemDir},
{user_dir, PrivDir},
{user_passwords,[{?USER, ?PASSWD}]},
@@ -113,11 +116,13 @@ init_per_testcase(TestCase, Config) ->
{ok, Sftpd} = case TestCase of
ver6_basic ->
SubSystems = [ssh_sftpd:subsystem_spec([{sftpd_vsn, 6}])],
- ssh:daemon(Port, [{subsystems, SubSystems}|Options]);
+ ssh:daemon(0, [{subsystems, SubSystems}|Options]);
_ ->
SubSystems = [ssh_sftpd:subsystem_spec([])],
- ssh:daemon(Port, [{subsystems, SubSystems}|Options])
+ ssh:daemon(0, [{subsystems, SubSystems}|Options])
end,
+ {ok,Dinf} = ssh:daemon_info(Sftpd),
+ Port = proplists:get_value(port, Dinf),
Cm = ssh_test_lib:connect(Port,
[{user_dir, ClientUserDir},
@@ -153,8 +158,8 @@ init_per_testcase(TestCase, Config) ->
[{sftp, {Cm, Channel}}, {sftpd, Sftpd }| Config].
end_per_testcase(_TestCase, Config) ->
- ssh_sftpd:stop(?config(sftpd, Config)),
- {Cm, Channel} = ?config(sftp, Config),
+ ssh_sftpd:stop(proplists:get_value(sftpd, Config)),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ssh_connection:close(Cm, Channel),
ssh:close(Cm),
ssh:stop().
@@ -165,9 +170,9 @@ end_per_testcase(_TestCase, Config) ->
open_close_file() ->
[{doc, "Test SSH_FXP_OPEN and SSH_FXP_CLOSE commands"}].
open_close_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ReqId = 0,
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
@@ -195,9 +200,9 @@ open_close_file(Config) when is_list(Config) ->
ver3_open_flags() ->
[{doc, "Test open flags"}].
ver3_open_flags(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "not_exist.txt"),
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ReqId = 0,
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
@@ -229,8 +234,8 @@ ver3_open_flags(Config) when is_list(Config) ->
open_close_dir() ->
[{doc,"Test SSH_FXP_OPENDIR and SSH_FXP_CLOSE commands"}].
open_close_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Cm, Channel} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
@@ -256,11 +261,11 @@ open_close_dir(Config) when is_list(Config) ->
read_file() ->
[{doc, "Test SSH_FXP_READ command"}].
read_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
open_file(FileName, Cm, Channel, ReqId,
@@ -279,8 +284,8 @@ read_file(Config) when is_list(Config) ->
read_dir() ->
[{doc,"Test SSH_FXP_READDIR command"}].
read_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Cm, Channel} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ReqId = 0,
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
open_dir(PrivDir, Cm, Channel, ReqId),
@@ -290,11 +295,11 @@ read_dir(Config) when is_list(Config) ->
write_file() ->
[{doc, "Test SSH_FXP_WRITE command"}].
write_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
open_file(FileName, Cm, Channel, ReqId,
@@ -314,10 +319,10 @@ write_file(Config) when is_list(Config) ->
remove_file() ->
[{doc, "Test SSH_FXP_REMOVE command"}].
remove_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId),
?UINT32(?SSH_FX_OK), _/binary>>, _} =
@@ -335,11 +340,11 @@ remove_file(Config) when is_list(Config) ->
rename_file() ->
[{doc, "Test SSH_FXP_RENAME command"}].
rename_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
NewFileName = filename:join(PrivDir, "test1.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId),
?UINT32(?SSH_FX_OK), _/binary>>, _} =
@@ -372,8 +377,8 @@ rename_file(Config) when is_list(Config) ->
mk_rm_dir() ->
[{doc, "Test SSH_FXP_MKDIR and SSH_FXP_RMDIR command"}].
mk_rm_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Cm, Channel} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
DirName = filename:join(PrivDir, "test"),
ReqId = 0,
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId), ?UINT32(?SSH_FX_OK),
@@ -400,8 +405,8 @@ real_path(Config) when is_list(Config) ->
{skip, "Not a relevant test on windows"};
_ ->
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
- PrivDir = ?config(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
TestDir = filename:join(PrivDir, "ssh_test"),
ok = file:make_dir(TestDir),
@@ -426,8 +431,8 @@ links(Config) when is_list(Config) ->
{skip, "Links are not fully supported by windows"};
_ ->
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
- PrivDir = ?config(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
LinkFileName = filename:join(PrivDir, "link_test.txt"),
@@ -450,10 +455,10 @@ links(Config) when is_list(Config) ->
retrieve_attributes() ->
[{"Test SSH_FXP_STAT, SSH_FXP_LSTAT AND SSH_FXP_FSTAT commands"}].
retrieve_attributes(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, FileInfo} = file:read_file_info(FileName),
@@ -519,10 +524,10 @@ set_attributes(Config) when is_list(Config) ->
{win32, _} ->
{skip, "Known error bug in erts file:read_file_info"};
_ ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, FileInfo} = file:read_file_info(FileName),
@@ -573,11 +578,11 @@ set_attributes(Config) when is_list(Config) ->
ver3_rename() ->
[{doc, "Test that ver3 rename message is handled OTP 6352"}].
ver3_rename(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
NewFileName = filename:join(PrivDir, "test1.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId),
?UINT32(?SSH_FX_OK), _/binary>>, _} =
@@ -588,7 +593,7 @@ relpath() ->
[{doc, "Check that realpath works ok seq10670"}].
relpath(Config) when is_list(Config) ->
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
case os:type() of
{win32, _} ->
@@ -610,11 +615,11 @@ relpath(Config) when is_list(Config) ->
sshd_read_file() ->
[{doc,"Test SSH_FXP_READ command, using sshd-server"}].
sshd_read_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
open_file(FileName, Cm, Channel, ReqId,
@@ -632,9 +637,9 @@ sshd_read_file(Config) when is_list(Config) ->
ver6_basic() ->
[{doc, "Test SFTP Version 6"}].
ver6_basic(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%FileName = filename:join(PrivDir, "test.txt"),
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ReqId = 0,
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId), % Ver 6 we have 5
?UINT32(?SSH_FX_FILE_IS_A_DIRECTORY), _/binary>>, _} =
@@ -645,7 +650,7 @@ ver6_basic(Config) when is_list(Config) ->
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
prep(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
TestFile = filename:join(PrivDir, "test.txt"),
TestFile1 = filename:join(PrivDir, "test1.txt"),
@@ -653,7 +658,7 @@ prep(Config) ->
file:delete(TestFile1),
%% Initial config
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
FileName = filename:join(DataDir, "test.txt"),
file:copy(FileName, TestFile),
Mode = 8#00400 bor 8#00200 bor 8#00040, % read & write owner, read group
diff --git a/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl b/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl
index 02a2ac4cf9..56a33d6349 100644
--- a/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl
+++ b/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,6 +26,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
+-include("ssh_test_lib.hrl").
-define(USER, "Alladin").
-define(PASSWD, "Sesame").
@@ -37,8 +38,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,2}}].
-
+ {timetrap,{seconds,40}}].
all() ->
[close_file,
@@ -54,22 +54,25 @@ groups() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- catch ssh:stop(),
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
- FileAlt = filename:join(DataDir, "ssh_sftpd_file_alt.erl"),
- c:c(FileAlt),
- FileName = filename:join(DataDir, "test.txt"),
- {ok, FileInfo} = file:read_file_info(FileName),
- ok = file:write_file_info(FileName,
- FileInfo#file_info{mode = 8#400}),
- ssh_test_lib:setup_dsa(DataDir, PrivDir),
- Config.
+ ?CHECK_CRYPTO(
+ begin
+ catch ssh:stop(),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ FileAlt = filename:join(DataDir, "ssh_sftpd_file_alt.erl"),
+ c:c(FileAlt),
+ FileName = filename:join(DataDir, "test.txt"),
+ {ok, FileInfo} = file:read_file_info(FileName),
+ ok = file:write_file_info(FileName,
+ FileInfo#file_info{mode = 8#400}),
+ ssh_test_lib:setup_dsa(DataDir, PrivDir),
+ Config
+ end).
end_per_suite(Config) ->
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
file:del_dir(UserDir),
- SysDir = ?config(priv_dir, Config),
+ SysDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(SysDir),
ok.
@@ -84,7 +87,7 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(TestCase, Config) ->
ssh:start(),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
SystemDir = filename:join(PrivDir, system),
Options =
@@ -97,7 +100,7 @@ init_per_testcase(TestCase, Config) ->
{user_dir, PrivDir},
{subsystems, [Spec]}];
"root_dir" ->
- Privdir = ?config(priv_dir, Config),
+ Privdir = proplists:get_value(priv_dir, Config),
Root = filename:join(Privdir, root),
file:make_dir(Root),
Spec = ssh_sftpd:subsystem_spec([{root,Root}]),
@@ -133,8 +136,8 @@ init_per_testcase(TestCase, Config) ->
[{port, Port}, {sftp, {ChannelPid, Connection}}, {sftpd, Sftpd} | NewConfig].
end_per_testcase(_TestCase, Config) ->
- catch ssh_sftpd:stop(?config(sftpd, Config)),
- {Sftp, Connection} = ?config(sftp, Config),
+ catch ssh_sftpd:stop(proplists:get_value(sftpd, Config)),
+ {Sftp, Connection} = proplists:get_value(sftp, Config),
catch ssh_sftp:stop_channel(Sftp),
catch ssh:close(Connection),
ssh:stop().
@@ -147,10 +150,10 @@ close_file() ->
"transfer OTP-6350"}].
close_file(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
FileName = filename:join(DataDir, "test.txt"),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
NumOfPorts = length(erlang:ports()),
@@ -168,12 +171,12 @@ quit() ->
"client hanging. OTP-6349"}].
quit(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
FileName = filename:join(DataDir, "test.txt"),
- UserDir = ?config(priv_dir, Config),
- Port = ?config(port, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
+ Port = proplists:get_value(port, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, <<_/binary>>} = ssh_sftp:read_file(Sftp, FileName),
@@ -199,13 +202,13 @@ file_cb() ->
" the sftpds filehandling. OTP-6356"}].
file_cb(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(DataDir, "test.txt"),
register(sftpd_file_alt_tester, self()),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Bin} = ssh_sftp:read_file(Sftp, FileName),
alt_file_handler_check(alt_open),
@@ -243,7 +246,7 @@ file_cb(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
root_dir(Config) when is_list(Config) ->
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
FileName = "test.txt",
Bin = <<"Test file for root dir option">>,
ok = ssh_sftp:write_file(Sftp, FileName, Bin),
@@ -254,7 +257,7 @@ root_dir(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
list_dir_limited(Config) when is_list(Config) ->
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Listing} =
ssh_sftp:list_dir(Sftp, "."),
ct:log("Listing: ~p~n", [Listing]).
@@ -263,9 +266,9 @@ list_dir_limited(Config) when is_list(Config) ->
ver6_basic() ->
[{doc, "Test some version 6 features"}].
ver6_basic(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
NewDir = filename:join(PrivDir, "testdir2"),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
ok = ssh_sftp:make_dir(Sftp, NewDir),
%%Test file_is_a_directory
{error, file_is_a_directory} = ssh_sftp:delete(Sftp, NewDir).
diff --git a/lib/ssh/test/ssh_sftpd_erlclient_SUITE_data/ssh_sftpd_file_alt.erl b/lib/ssh/test/ssh_sftpd_erlclient_SUITE_data/ssh_sftpd_file_alt.erl
index 4f494cf829..6cfa8ee83f 100644
--- a/lib/ssh/test/ssh_sftpd_erlclient_SUITE_data/ssh_sftpd_file_alt.erl
+++ b/lib/ssh/test/ssh_sftpd_erlclient_SUITE_data/ssh_sftpd_file_alt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssh/test/ssh_sup_SUITE.erl b/lib/ssh/test/ssh_sup_SUITE.erl
index 18e91a9af3..ff53e1c4c6 100644
--- a/lib/ssh/test/ssh_sup_SUITE.erl
+++ b/lib/ssh/test/ssh_sup_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2015-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,21 +22,23 @@
-module(ssh_sup_SUITE).
-include_lib("common_test/include/ct.hrl").
-include_lib("ssh/src/ssh.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
--define(WAIT_FOR_SHUTDOWN, 500).
-define(USER, "Alladin").
-define(PASSWD, "Sesame").
+-define(WAIT_FOR_SHUTDOWN, 500).
+
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,1}}].
+ {timetrap,{seconds,100}}].
all() ->
[default_tree, sshc_subtree, sshd_subtree, sshd_subtree_profile].
@@ -51,18 +53,21 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_suite(Config) ->
- Port = ssh_test_lib:inet_port(node()),
- PrivDir = ?config(priv_dir, Config),
- UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
- file:make_dir(UserDir),
- [{userdir, UserDir},{port, Port}, {host, "localhost"}, {host_ip, any} | Config].
+ ?CHECK_CRYPTO(
+ begin
+ Port = ssh_test_lib:inet_port(node()),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
+ file:make_dir(UserDir),
+ [{userdir, UserDir},{port, Port}, {host, "localhost"}, {host_ip, any} | Config]
+ end).
end_per_suite(_) ->
ok.
init_per_testcase(sshc_subtree, Config) ->
ssh:start(),
- SystemDir = ?config(data_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2},
{user_passwords,
@@ -73,7 +78,7 @@ init_per_testcase(Case, Config) ->
ssh:start(),
Config.
end_per_testcase(sshc_subtree, Config) ->
- {Pid,_,_} = ?config(server, Config),
+ {Pid,_,_} = proplists:get_value(server, Config),
ssh:stop_daemon(Pid),
ssh:stop();
end_per_testcase(_, _Config) ->
@@ -92,106 +97,115 @@ default_tree(Config) when is_list(Config) ->
lists:keysearch(sshc_sup, 1, TopSupChildren),
{value, {sshd_sup, _,supervisor,[sshd_sup]}} =
lists:keysearch(sshd_sup, 1, TopSupChildren),
- [] = supervisor:which_children(sshc_sup),
- [] = supervisor:which_children(sshd_sup).
+ ?wait_match([], supervisor:which_children(sshc_sup)),
+ ?wait_match([], supervisor:which_children(sshd_sup)).
sshc_subtree() ->
[{doc, "Make sure the sshc subtree is correct"}].
sshc_subtree(Config) when is_list(Config) ->
- {_Pid, Host, Port} = ?config(server, Config),
- UserDir = ?config(userdir, Config),
+ {_Pid, Host, Port} = proplists:get_value(server, Config),
+ UserDir = proplists:get_value(userdir, Config),
+
+ ?wait_match([], supervisor:which_children(sshc_sup)),
- [] = supervisor:which_children(sshc_sup),
{ok, Pid1} = ssh:connect(Host, Port, [{silently_accept_hosts, true},
{user_interaction, false},
{user, ?USER}, {password, ?PASSWD},{user_dir, UserDir}]),
- [{_, _,supervisor,[ssh_connection_handler]}] =
- supervisor:which_children(sshc_sup),
+
+ ?wait_match([{_, _,worker,[ssh_connection_handler]}],
+ supervisor:which_children(sshc_sup)),
+
{ok, Pid2} = ssh:connect(Host, Port, [{silently_accept_hosts, true},
{user_interaction, false},
{user, ?USER}, {password, ?PASSWD}, {user_dir, UserDir}]),
- [{_,_,supervisor,[ssh_connection_handler]},
- {_,_,supervisor,[ssh_connection_handler]}] =
- supervisor:which_children(sshc_sup),
+ ?wait_match([{_,_,worker,[ssh_connection_handler]},
+ {_,_,worker,[ssh_connection_handler]}],
+ supervisor:which_children(sshc_sup)),
+
ssh:close(Pid1),
- [{_,_,supervisor,[ssh_connection_handler]}] =
- supervisor:which_children(sshc_sup),
+ ?wait_match([{_,_,worker,[ssh_connection_handler]}],
+ supervisor:which_children(sshc_sup)),
ssh:close(Pid2),
- ct:sleep(?WAIT_FOR_SHUTDOWN),
- [] = supervisor:which_children(sshc_sup).
+ ?wait_match([], supervisor:which_children(sshc_sup)).
sshd_subtree() ->
[{doc, "Make sure the sshd subtree is correct"}].
sshd_subtree(Config) when is_list(Config) ->
- HostIP = ?config(host_ip, Config),
- Port = ?config(port, Config),
- SystemDir = ?config(data_dir, Config),
+ HostIP = proplists:get_value(host_ip, Config),
+ Port = proplists:get_value(port, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
ssh:daemon(HostIP, Port, [{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2},
{user_passwords,
[{?USER, ?PASSWD}]}]),
- [{{server,ssh_system_sup, HostIP, Port, ?DEFAULT_PROFILE},
- Daemon, supervisor,
- [ssh_system_sup]}] =
- supervisor:which_children(sshd_sup),
+
+ ?wait_match([{{server,ssh_system_sup, HostIP, Port, ?DEFAULT_PROFILE},
+ Daemon, supervisor,
+ [ssh_system_sup]}],
+ supervisor:which_children(sshd_sup),
+ Daemon),
check_sshd_system_tree(Daemon, Config),
ssh:stop_daemon(HostIP, Port),
ct:sleep(?WAIT_FOR_SHUTDOWN),
- [] = supervisor:which_children(sshd_sup).
+ ?wait_match([], supervisor:which_children(sshd_sup)).
sshd_subtree_profile() ->
[{doc, "Make sure the sshd subtree using profile option is correct"}].
sshd_subtree_profile(Config) when is_list(Config) ->
- HostIP = ?config(host_ip, Config),
- Port = ?config(port, Config),
- Profile = ?config(profile, Config),
- SystemDir = ?config(data_dir, Config),
+ HostIP = proplists:get_value(host_ip, Config),
+ Port = proplists:get_value(port, Config),
+ Profile = proplists:get_value(profile, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
{ok, _} = ssh:daemon(HostIP, Port, [{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2},
{user_passwords,
[{?USER, ?PASSWD}]},
{profile, Profile}]),
- [{{server,ssh_system_sup, HostIP,Port,Profile},
- Daemon, supervisor,
- [ssh_system_sup]}] =
- supervisor:which_children(sshd_sup),
+ ?wait_match([{{server,ssh_system_sup, HostIP,Port,Profile},
+ Daemon, supervisor,
+ [ssh_system_sup]}],
+ supervisor:which_children(sshd_sup),
+ Daemon),
check_sshd_system_tree(Daemon, Config),
ssh:stop_daemon(HostIP, Port, Profile),
ct:sleep(?WAIT_FOR_SHUTDOWN),
- [] = supervisor:which_children(sshd_sup).
+ ?wait_match([], supervisor:which_children(sshd_sup)).
check_sshd_system_tree(Daemon, Config) ->
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- UserDir = ?config(userdir, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ UserDir = proplists:get_value(userdir, Config),
{ok, Client} = ssh:connect(Host, Port, [{silently_accept_hosts, true},
{user_interaction, false},
{user, ?USER}, {password, ?PASSWD},{user_dir, UserDir}]),
- [{_,SubSysSup, supervisor,[ssh_subsystem_sup]},
- {{ssh_acceptor_sup,_,_,_}, AccSup, supervisor,[ssh_acceptor_sup]}]
- = supervisor:which_children(Daemon),
+ ?wait_match([{_,SubSysSup, supervisor,[ssh_subsystem_sup]},
+ {{ssh_acceptor_sup,_,_,_}, AccSup, supervisor,[ssh_acceptor_sup]}],
+ supervisor:which_children(Daemon),
+ [SubSysSup,AccSup]),
- [{{server,ssh_connection_sup, _,_},
- ConnectionSup, supervisor,
- [ssh_connection_sup]},
- {{server,ssh_channel_sup,_ ,_},
- ChannelSup,supervisor,
- [ssh_channel_sup]}] = supervisor:which_children(SubSysSup),
+ ?wait_match([{{server,ssh_connection_sup, _,_},
+ ConnectionSup, supervisor,
+ [ssh_connection_sup]},
+ {{server,ssh_channel_sup,_ ,_},
+ ChannelSup,supervisor,
+ [ssh_channel_sup]}],
+ supervisor:which_children(SubSysSup),
+ [ConnectionSup,ChannelSup]),
- [{{ssh_acceptor_sup,_,_,_},_,worker,[ssh_acceptor]}] =
- supervisor:which_children(AccSup),
+ ?wait_match([{{ssh_acceptor_sup,_,_,_},_,worker,[ssh_acceptor]}],
+ supervisor:which_children(AccSup)),
- [{_, _, worker,[ssh_connection_handler]}] =
- supervisor:which_children(ConnectionSup),
+ ?wait_match([{_, _, worker,[ssh_connection_handler]}],
+ supervisor:which_children(ConnectionSup)),
- [] = supervisor:which_children(ChannelSup),
+ ?wait_match([], supervisor:which_children(ChannelSup)),
ssh_sftp:start_channel(Client),
- [{_, _,worker,[ssh_channel]}] =
- supervisor:which_children(ChannelSup),
+ ?wait_match([{_, _,worker,[ssh_channel]}],
+ supervisor:which_children(ChannelSup)),
ssh:close(Client).
diff --git a/lib/ssh/test/ssh_test_cli.erl b/lib/ssh/test/ssh_test_cli.erl
index 697ddb730d..f96b9967d2 100644
--- a/lib/ssh/test/ssh_test_cli.erl
+++ b/lib/ssh/test/ssh_test_cli.erl
@@ -75,10 +75,11 @@ terminate(_Why, _S) ->
run_portprog(User, cli, TmpDir) ->
Pty_bin = os:find_executable("cat"),
- open_port({spawn_executable, Pty_bin},
- [stream, {cd, TmpDir}, {env, [{"USER", User}]},
- {args, []}, binary,
- exit_status, use_stdio, stderr_to_stdout]).
+ ssh_test_lib:open_port({spawn_executable, Pty_bin},
+ [stream,
+ {cd, TmpDir},
+ {env, [{"USER", User}]},
+ {args, []}]).
get_ssh_user(Ref) ->
[{user, User}] = ssh:connection_info(Ref, [user]),
diff --git a/lib/ssh/test/ssh_test_lib.erl b/lib/ssh/test/ssh_test_lib.erl
index 5f91fb627a..6233680dce 100644
--- a/lib/ssh/test/ssh_test_lib.erl
+++ b/lib/ssh/test/ssh_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,15 +32,8 @@
-define(TIMEOUT, 50000).
-connect(Options) ->
- connect(hostname(), inet_port(), Options).
-
connect(Port, Options) when is_integer(Port) ->
- connect(hostname(), Port, Options);
-connect(any, Options) ->
- connect(hostname(), inet_port(), Options);
-connect(Host, Options) ->
- connect(Host, inet_port(), Options).
+ connect(hostname(), Port, Options).
connect(any, Port, Options) ->
connect(hostname(), Port, Options);
@@ -49,26 +42,36 @@ connect(Host, Port, Options) ->
ConnectionRef.
daemon(Options) ->
- daemon(any, inet_port(), Options).
+ daemon(any, 0, Options).
daemon(Port, Options) when is_integer(Port) ->
daemon(any, Port, Options);
daemon(Host, Options) ->
- daemon(Host, inet_port(), Options).
+ daemon(Host, 0, Options).
+
daemon(Host, Port, Options) ->
+ ct:log("~p:~p Calling ssh:daemon(~p, ~p, ~p)",[?MODULE,?LINE,Host,Port,Options]),
case ssh:daemon(Host, Port, Options) of
{ok, Pid} when Host == any ->
- {Pid, hostname(), Port};
+ ct:log("ssh:daemon ok (1)",[]),
+ {Pid, hostname(), daemon_port(Port,Pid)};
{ok, Pid} ->
- {Pid, Host, Port};
+ ct:log("ssh:daemon ok (2)",[]),
+ {Pid, Host, daemon_port(Port,Pid)};
Error ->
+ ct:log("ssh:daemon error ~p",[Error]),
Error
end.
+daemon_port(0, Pid) -> {ok,Dinf} = ssh:daemon_info(Pid),
+ proplists:get_value(port, Dinf);
+daemon_port(Port, _) -> Port.
+
+
std_daemon(Config, ExtraOpts) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
std_daemon1(Config,
@@ -77,13 +80,13 @@ std_daemon(Config, ExtraOpts) ->
{user_passwords, [{"usr1","pwd1"}]}]).
std_daemon1(Config, ExtraOpts) ->
- SystemDir = ?config(data_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
{_Server, _Host, _Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2}
| ExtraOpts]).
std_connect(Config, Host, Port, ExtraOpts) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
_ConnectionRef =
ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true},
{user_dir, UserDir},
@@ -96,11 +99,11 @@ std_simple_sftp(Host, Port, Config) ->
std_simple_sftp(Host, Port, Config, []).
std_simple_sftp(Host, Port, Config, Opts) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
DataFile = filename:join(UserDir, "test.data"),
ConnectionRef = ssh_test_lib:std_connect(Config, Host, Port, Opts),
{ok, ChannelRef} = ssh_sftp:start_channel(ConnectionRef),
- Data = crypto:rand_bytes(proplists:get_value(std_simple_sftp_size,Config,10)),
+ Data = crypto:strong_rand_bytes(proplists:get_value(std_simple_sftp_size,Config,10)),
ok = ssh_sftp:write_file(ChannelRef, DataFile, Data),
{ok,ReadData} = file:read_file(DataFile),
ok = ssh:close(ConnectionRef),
@@ -201,6 +204,35 @@ reply(TestCase, Result) ->
%%ct:log("reply ~p sending ~p ! ~p",[self(), TestCase, Result]),
TestCase ! Result.
+
+
+rcv_expected(Expect, SshPort, Timeout) ->
+ receive
+ {SshPort, Expect} ->
+ ct:log("Got expected ~p from ~p",[Expect,SshPort]),
+ catch port_close(SshPort),
+ rcv_lingering(50);
+ Other ->
+ ct:log("Got UNEXPECTED ~p~nExpect ~p",[Other, {SshPort,Expect}]),
+ rcv_expected(Expect, SshPort, Timeout)
+
+ after Timeout ->
+ catch port_close(SshPort),
+ ct:fail("Did not receive answer")
+ end.
+
+rcv_lingering(Timeout) ->
+ receive
+ Msg ->
+ ct:log("Got LINGERING ~p",[Msg]),
+ rcv_lingering(Timeout)
+
+ after Timeout ->
+ ct:log("No more lingering messages",[]),
+ ok
+ end.
+
+
receive_exec_result(Msg) ->
ct:log("Expect data! ~p", [Msg]),
receive
@@ -354,7 +386,7 @@ setup_rsa_pass_pharse(DataDir, UserDir, Phrase) ->
setup_pass_pharse(KeyBin, OutFile, Phrase) ->
[{KeyType, _,_} = Entry0] = public_key:pem_decode(KeyBin),
Key = public_key:pem_entry_decode(Entry0),
- Salt = crypto:rand_bytes(8),
+ Salt = crypto:strong_rand_bytes(8),
Entry = public_key:pem_entry_encode(KeyType, Key,
{{"DES-CBC", Salt}, Phrase}),
Pem = public_key:pem_encode([Entry]),
@@ -470,8 +502,9 @@ openssh_supports(ClientOrServer, Tag, Alg) when ClientOrServer == sshc ;
%% Check if we have a "newer" ssh client that supports these test cases
ssh_client_supports_Q() ->
- ErlPort = open_port({spawn, "ssh -Q cipher"}, [exit_status, stderr_to_stdout]),
- 0 == check_ssh_client_support2(ErlPort).
+ 0 == check_ssh_client_support2(
+ ?MODULE:open_port({spawn, "ssh -Q cipher"})
+ ).
check_ssh_client_support2(P) ->
receive
@@ -622,17 +655,48 @@ sshc(Tag) ->
).
ssh_type() ->
- case os:find_executable("ssh") of
- false -> not_found;
- _ ->
- case os:cmd("ssh -V") of
- "OpenSSH" ++ _ ->
- openSSH;
- Str ->
- ct:log("ssh client ~p is unknown",[Str]),
- unknown
- end
- end.
+ Parent = self(),
+ Pid = spawn(fun() ->
+ Parent ! {ssh_type,self(),ssh_type1()}
+ end),
+ MonitorRef = monitor(process, Pid),
+ receive
+ {ssh_type, Pid, Result} ->
+ demonitor(MonitorRef),
+ Result;
+ {'DOWN', MonitorRef, process, Pid, _Info} ->
+ ct:log("~p:~p Process DOWN",[?MODULE,?LINE]),
+ not_found
+ after
+ 10000 ->
+ ct:log("~p:~p Timeout",[?MODULE,?LINE]),
+ demonitor(MonitorRef),
+ not_found
+ end.
+
+
+ssh_type1() ->
+ try
+ case os:find_executable("ssh") of
+ false ->
+ ct:log("~p:~p Executable \"ssh\" not found",[?MODULE,?LINE]),
+ not_found;
+ _ ->
+ case os:cmd("ssh -V") of
+ "OpenSSH" ++ _ ->
+ openSSH;
+ Str ->
+ ct:log("ssh client ~p is unknown",[Str]),
+ unknown
+ end
+ end
+ catch
+ Class:Exception ->
+ ct:log("~p:~p Exception ~p:~p",[?MODULE,?LINE,Class,Exception]),
+ not_found
+ end.
+
+
algo_intersection([], _) -> [];
algo_intersection(_, []) -> [];
@@ -690,3 +754,16 @@ has_inet6_address() ->
catch
throw:6 -> true
end.
+
+%%%----------------------------------------------------------------
+open_port(Arg1) ->
+ ?MODULE:open_port(Arg1, []).
+
+open_port(Arg1, ExtraOpts) ->
+ erlang:open_port(Arg1,
+ [binary,
+ stderr_to_stdout,
+ exit_status,
+ use_stdio,
+ overlapped_io, hide %only affects windows
+ | ExtraOpts]).
diff --git a/lib/ssh/test/ssh_test_lib.hrl b/lib/ssh/test/ssh_test_lib.hrl
new file mode 100644
index 0000000000..54c93b7e87
--- /dev/null
+++ b/lib/ssh/test/ssh_test_lib.hrl
@@ -0,0 +1,37 @@
+%%-------------------------------------------------------------------------
+%% Check for usable crypt
+%%-------------------------------------------------------------------------
+-define(CHECK_CRYPTO(Available),
+ try crypto:start()
+ of _ -> Available
+ catch _:_ -> {skip, "Can't start crypto"}
+ end
+ ).
+
+%%-------------------------------------------------------------------------
+%% Help macro
+%%-------------------------------------------------------------------------
+-define(wait_match(Pattern, FunctionCall, Bind, Timeout, Ntries),
+ Bind =
+ (fun() ->
+ F = fun(N, F1) ->
+ case FunctionCall of
+ Pattern -> Bind;
+ _ when N>0 ->
+ ct:pal("Must sleep ~p ms at ~p:~p",[Timeout,?MODULE,?LINE]),
+ timer:sleep(Timeout),
+ F1(N-1, F1);
+ Other ->
+ ct:fail("Unexpected ~p:~p ~p",[?MODULE,?LINE,Other])
+ end
+ end,
+ F(Ntries, F)
+ end)()
+ ).
+
+-define(wait_match(Pattern, FunctionCall, Timeout, Ntries), ?wait_match(Pattern, FunctionCall, ok, Timeout, Ntries)).
+
+-define(wait_match(Pattern, FunctionCall, Bind), ?wait_match(Pattern, FunctionCall, Bind, 500, 10) ).
+
+-define(wait_match(Pattern, FunctionCall), ?wait_match(Pattern, FunctionCall, ok) ).
+
diff --git a/lib/ssh/test/ssh_to_openssh_SUITE.erl b/lib/ssh/test/ssh_to_openssh_SUITE.erl
index 2788bc6b58..a914938c41 100644
--- a/lib/ssh/test/ssh_to_openssh_SUITE.erl
+++ b/lib/ssh/test/ssh_to_openssh_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@
-module(ssh_to_openssh_SUITE).
-include_lib("common_test/include/ct.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -34,7 +35,7 @@
%%--------------------------------------------------------------------
suite() ->
- [{timetrap,{minutes,1}}].
+ [{timetrap,{seconds,20}}].
all() ->
case os:find_executable("ssh") of
@@ -50,30 +51,35 @@ groups() ->
[{erlang_client, [], [erlang_shell_client_openssh_server,
erlang_client_openssh_server_exec_compressed,
erlang_client_openssh_server_setenv,
- erlang_client_openssh_server_publickey_rsa,
erlang_client_openssh_server_publickey_dsa,
+ erlang_client_openssh_server_publickey_rsa,
erlang_client_openssh_server_password,
erlang_client_openssh_server_kexs,
erlang_client_openssh_server_nonexistent_subsystem
]},
- {erlang_server, [], [erlang_server_openssh_client_public_key_dsa]}
+ {erlang_server, [], [erlang_server_openssh_client_public_key_dsa,
+ erlang_server_openssh_client_public_key_rsa
+ ]}
].
init_per_suite(Config) ->
- case gen_tcp:connect("localhost", 22, []) of
- {error,econnrefused} ->
- {skip,"No openssh deamon"};
- _ ->
- ssh_test_lib:openssh_sanity_check(Config)
- end.
+ ?CHECK_CRYPTO(
+ case gen_tcp:connect("localhost", 22, []) of
+ {error,econnrefused} ->
+ {skip,"No openssh deamon"};
+ _ ->
+ ssh_test_lib:openssh_sanity_check(Config)
+ end
+ ).
end_per_suite(_Config) ->
ok.
init_per_group(erlang_server, Config) ->
- DataDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa_known_host(DataDir, UserDir),
+ ssh_test_lib:setup_rsa_known_host(DataDir, UserDir),
Config;
init_per_group(erlang_client, Config) ->
CommonAlgs = ssh_test_lib:algo_intersection(
@@ -84,8 +90,9 @@ init_per_group(_, Config) ->
Config.
end_per_group(erlang_server, Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(UserDir),
+ ssh_test_lib:clean_rsa(UserDir),
Config;
end_per_group(_, Config) ->
Config.
@@ -93,6 +100,8 @@ end_per_group(_, Config) ->
init_per_testcase(erlang_server_openssh_client_public_key_dsa, Config) ->
chk_key(sshc, 'ssh-dss', ".ssh/id_dsa", Config);
+init_per_testcase(erlang_server_openssh_client_public_key_rsa, Config) ->
+ chk_key(sshc, 'ssh-rsa', ".ssh/id_rsa", Config);
init_per_testcase(erlang_client_openssh_server_publickey_dsa, Config) ->
chk_key(sshd, 'ssh-dss', ".ssh/id_dsa", Config);
init_per_testcase(_TestCase, Config) ->
@@ -216,7 +225,7 @@ erlang_client_openssh_server_kexs() ->
[{doc, "Test that we can connect with different KEXs."}].
erlang_client_openssh_server_kexs(Config) when is_list(Config) ->
- KexAlgos = try proplists:get_value(kex, ?config(common_algs,Config))
+ KexAlgos = try proplists:get_value(kex, proplists:get_value(common_algs,Config))
catch _:_ -> []
end,
comment(KexAlgos),
@@ -347,14 +356,24 @@ erlang_client_openssh_server_publickey_dsa(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
erlang_server_openssh_client_public_key_dsa() ->
- [{doc, "Validate using dsa publickey."}].
+ [{timetrap, {seconds,(?TIMEOUT div 1000)+10}},
+ {doc, "Validate using dsa publickey."}].
erlang_server_openssh_client_public_key_dsa(Config) when is_list(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
- KnownHosts = filename:join(PrivDir, "known_hosts"),
+ erlang_server_openssh_client_public_key_X(Config, ssh_dsa).
+
+erlang_server_openssh_client_public_key_rsa() ->
+ [{timetrap, {seconds,(?TIMEOUT div 1000)+10}},
+ {doc, "Validate using rsa publickey."}].
+erlang_server_openssh_client_public_key_rsa(Config) when is_list(Config) ->
+ erlang_server_openssh_client_public_key_X(Config, ssh_rsa).
+
+erlang_server_openssh_client_public_key_X(Config, PubKeyAlg) ->
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ KnownHosts = filename:join(PrivDir, "known_hosts"),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
- {public_key_alg, ssh_dsa},
+ {public_key_alg, PubKeyAlg},
{failfun, fun ssh_test_lib:failfun/2}]),
ct:sleep(500),
@@ -362,18 +381,8 @@ erlang_server_openssh_client_public_key_dsa(Config) when is_list(Config) ->
Cmd = "ssh -p " ++ integer_to_list(Port) ++
" -o UserKnownHostsFile=" ++ KnownHosts ++
" " ++ Host ++ " 1+1.",
- SshPort = open_port({spawn, Cmd}, [binary, stderr_to_stdout]),
-
- receive
- {SshPort,{data, <<"2\n">>}} ->
- ok
- after ?TIMEOUT ->
- receive
- X -> ct:fail("Received: ~p",[X])
- after 0 ->
- ct:fail("Did not receive answer")
- end
- end,
+ OpenSsh = ssh_test_lib:open_port({spawn, Cmd}),
+ ssh_test_lib:rcv_expected({data,<<"2\n">>}, OpenSsh, ?TIMEOUT),
ssh:stop_daemon(Pid).
%%--------------------------------------------------------------------
@@ -381,7 +390,7 @@ erlang_client_openssh_server_password() ->
[{doc, "Test client password option"}].
erlang_client_openssh_server_password(Config) when is_list(Config) ->
%% to make sure we don't public-key-auth
- UserDir = ?config(data_dir, Config),
+ UserDir = proplists:get_value(data_dir, Config),
{error, Reason0} =
ssh:connect(any, ?SSH_DEFAULT_PORT, [{silently_accept_hosts, true},
{user, "foo"},
diff --git a/lib/ssh/test/ssh_to_openssh_SUITE_data/ssh_host_rsa_key b/lib/ssh/test/ssh_to_openssh_SUITE_data/ssh_host_rsa_key
new file mode 100644
index 0000000000..79968bdd7d
--- /dev/null
+++ b/lib/ssh/test/ssh_to_openssh_SUITE_data/ssh_host_rsa_key
@@ -0,0 +1,16 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQDCZX+4FBDwZIh9y/Uxee1VJnEXlowpz2yDKwj8semM4q843337
+zbNfxHmladB1lpz2NqyxI175xMIJuDxogyZdsOxGnFAzAnthR4dqL/RWRWzjaxSB
+6IAO9SPYVVlrpZ+1hsjLW79fwXK/yc8VdhRuWTeQiRgYY2ek8+OKbOqz4QIDAQAB
+AoGANmvJzJO5hkLuvyDZHKfAnGTtpifcR1wtSa9DjdKUyn8vhKF0mIimnbnYQEmW
+NUUb3gXCZLi9PvkpRSVRrASDOZwcjoU/Kvww163vBUVb2cOZfFhyn6o2Sk88Tt++
+udH3hdjpf9i7jTtUkUe+QYPsia+wgvvrmn4QrahLAH86+kECQQDx5gFeXTME3cnW
+WMpFz3PPumduzjqgqMMWEccX4FtQkMX/gyGa5UC7OHFyh0N/gSWvPbRHa8A6YgIt
+n8DO+fh5AkEAzbqX4DOn8NY6xJIi42q7l/2jIA0RkB6P7YugW5NblhqBZ0XDnpA5
+sMt+rz+K07u9XZtxgh1xi7mNfwY6lEAMqQJBAJBEauCKmRj35Z6OyeQku59SPsnY
++SJEREVvSNw2lH9SOKQQ4wPsYlTGbvKtNVZgAcen91L5MmYfeckYE/fdIZECQQCt
+64zxsTnM1I8iFxj/gP/OYlJBikrKt8udWmjaghzvLMEw+T2DExJyb9ZNeT53+UMB
+m6O+B/4xzU/djvp+0hbhAkAemIt+rA5kTmYlFndhpvzkSSM8a2EXsO4XIPgGWCTT
+tQKS/tTly0ADMjN/TVy11+9d6zcqadNVuHXHGtR4W0GR
+-----END RSA PRIVATE KEY-----
+
diff --git a/lib/ssh/test/ssh_to_openssh_SUITE_data/ssh_host_rsa_key.pub b/lib/ssh/test/ssh_to_openssh_SUITE_data/ssh_host_rsa_key.pub
new file mode 100644
index 0000000000..75d2025c71
--- /dev/null
+++ b/lib/ssh/test/ssh_to_openssh_SUITE_data/ssh_host_rsa_key.pub
@@ -0,0 +1,5 @@
+---- BEGIN SSH2 PUBLIC KEY ----
+AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCZX+4FBDwZIh9y/Uxee1VJnEXlowpz2yDKwj8
+semM4q843337zbNfxHmladB1lpz2NqyxI175xMIJuDxogyZdsOxGnFAzAnthR4dqL/RW
+RWzjaxSB6IAO9SPYVVlrpZ+1hsjLW79fwXK/yc8VdhRuWTeQiRgYY2ek8+OKbOqz4Q==
+---- END SSH2 PUBLIC KEY ----
diff --git a/lib/ssh/test/ssh_trpt_test_lib.erl b/lib/ssh/test/ssh_trpt_test_lib.erl
index 4269529ae8..e34071af99 100644
--- a/lib/ssh/test/ssh_trpt_test_lib.erl
+++ b/lib/ssh/test/ssh_trpt_test_lib.erl
@@ -294,12 +294,11 @@ instantiate(X, _S) ->
%%%================================================================
%%%
init_ssh(Role, Socket, Options0) ->
- Options = [{user_interaction,false}
+ Options = [{user_interaction, false},
+ {vsn, {2,0}},
+ {id_string, "ErlangTestLib"}
| Options0],
- ssh_connection_handler:init_ssh(Role,
- {2,0},
- lists:concat(["SSH-2.0-ErlangTestLib ",Role]),
- Options, Socket).
+ ssh_connection_handler:init_ssh_record(Role, Socket, Options).
mangle_opts(Options) ->
SysOpts = [{reuseaddr, true},
diff --git a/lib/ssh/test/ssh_upgrade_SUITE.erl b/lib/ssh/test/ssh_upgrade_SUITE.erl
index bf8874b118..b5b27c369a 100644
--- a/lib/ssh/test/ssh_upgrade_SUITE.erl
+++ b/lib/ssh/test/ssh_upgrade_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
+-include("ssh_test_lib.hrl").
-record(state, {
config,
@@ -39,7 +40,7 @@
%%% CommonTest callbacks
%%%
suite() ->
- [{timetrap,{minutes,2}}].
+ [{timetrap,{seconds,180}}].
all() ->
[
@@ -48,18 +49,20 @@ all() ->
].
init_per_suite(Config0) ->
- case ct_release_test:init(Config0) of
- {skip, Reason} ->
- {skip, Reason};
- Config ->
- ssh:start(),
- Config
- end.
+ ?CHECK_CRYPTO(
+ case ct_release_test:init(Config0) of
+ {skip, Reason} ->
+ {skip, Reason};
+ Config ->
+ ssh:start(),
+ Config
+ end
+ ).
end_per_suite(Config) ->
ct_release_test:cleanup(Config),
ssh:stop(),
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_rsa(UserDir).
init_per_testcase(_TestCase, Config) ->
@@ -138,15 +141,16 @@ test_soft(State0, FileName) ->
setup_server_client(#state{config=Config} = State) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FtpRootDir = filename:join(PrivDir, "ftp_root"),
catch file:make_dir(FtpRootDir),
SFTP = ssh_sftpd:subsystem_spec([{root,FtpRootDir},{cwd,FtpRootDir}]),
- {Server,Host,Port} = ssh_test_lib:daemon([{system_dir,DataDir},
+ {Server,Host,Port} = ssh_test_lib:daemon(ssh_test_lib:inet_port(), % when lower rel is 18.x
+ [{system_dir,DataDir},
{user_passwords,[{"hej","hopp"}]},
{subsystems,[SFTP]}]),
diff --git a/lib/ssh/vsn.mk b/lib/ssh/vsn.mk
index dc5e7092f8..575c1af3a9 100644
--- a/lib/ssh/vsn.mk
+++ b/lib/ssh/vsn.mk
@@ -1,5 +1,5 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
-SSH_VSN = 4.2.2.1
+SSH_VSN = 4.3.1
APP_VSN = "ssh-$(SSH_VSN)"
diff --git a/lib/ssl/Makefile b/lib/ssl/Makefile
index c3b7af5bcd..bd43794a36 100644
--- a/lib/ssl/Makefile
+++ b/lib/ssl/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2011. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ssl/doc/src/book.xml b/lib/ssl/doc/src/book.xml
index a0890a028d..056c958f0f 100644
--- a/lib/ssl/doc/src/book.xml
+++ b/lib/ssl/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssl/doc/src/notes.xml b/lib/ssl/doc/src/notes.xml
index 1e8de1a8a3..3b6f988a2d 100644
--- a/lib/ssl/doc/src/notes.xml
+++ b/lib/ssl/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,20 +28,154 @@
<p>This document describes the changes made to the SSL application.</p>
-<section><title>SSL 7.3.3.1</title>
+<section><title>SSL 8.0</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
- The TLS/SSL protocol version selection for the SSL server
- has been corrected to follow RFC 5246 Appendix E.1
- especially in case where the list of supported versions
- has gaps. Now the server selects the highest protocol
- version it supports that is not higher than what the
- client supports.</p>
+ Server now rejects, a not requested client cert, as an
+ incorrect handshake message and ends the connection.</p>
<p>
- Own Id: OTP-13753 Aux Id: seq13150 </p>
+ Own Id: OTP-13651</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Remove default support for DES cipher suites</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13195</p>
+ </item>
+ <item>
+ <p>
+ Deprecate the function <c>crypto:rand_bytes</c> and make
+ sure that <c>crypto:strong_rand_bytes</c> is used in all
+ places that are cryptographically significant.</p>
+ <p>
+ Own Id: OTP-13214</p>
+ </item>
+ <item>
+ <p>
+ Better error handling of user error during TLS upgrade.
+ ERL-69 is solved by gen_statem rewrite of ssl
+ application.</p>
+ <p>
+ Own Id: OTP-13255</p>
+ </item>
+ <item>
+ <p>
+ Provide user friendly error message when crypto rejects a
+ key</p>
+ <p>
+ Own Id: OTP-13256</p>
+ </item>
+ <item>
+ <p>
+ Add ssl:getstat/1 and ssl:getstat/2</p>
+ <p>
+ Own Id: OTP-13415</p>
+ </item>
+ <item>
+ <p>
+ TLS distribution connections now allow specifying the
+ options <c>verify_fun</c>, <c>crl_check</c> and
+ <c>crl_cache</c>. See the documentation. GitHub pull req
+ #956 contributed by Magnus Henoch.</p>
+ <p>
+ Own Id: OTP-13429 Aux Id: Pull#956 </p>
+ </item>
+ <item>
+ <p>
+ Remove confusing error message when closing a distributed
+ erlang node running over TLS</p>
+ <p>
+ Own Id: OTP-13431</p>
+ </item>
+ <item>
+ <p>
+ Remove default support for use of md5 in TLS 1.2
+ signature algorithms</p>
+ <p>
+ Own Id: OTP-13463</p>
+ </item>
+ <item>
+ <p>
+ ssl now uses gen_statem instead of gen_fsm to implement
+ the ssl connection process, this solves some timing
+ issues in addition to making the code more intuitive as
+ the behaviour can be used cleanly instead of having a lot
+ of workaround for shortcomings of the behaviour.</p>
+ <p>
+ Own Id: OTP-13464</p>
+ </item>
+ <item>
+ <p>
+ Phase out interoperability with clients that offer SSLv2.
+ By default they are no longer supported, but an option to
+ provide interoperability is offered.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13465</p>
+ </item>
+ <item>
+ <p>
+ OpenSSL has functions to generate short (eight hex
+ digits) hashes of issuers of certificates and CRLs. These
+ hashes are used by the "c_rehash" script to populate
+ directories of CA certificates and CRLs, e.g. in the
+ Apache web server. Add functionality to let an Erlang
+ program find the right CRL for a given certificate in
+ such a directory.</p>
+ <p>
+ Own Id: OTP-13530</p>
+ </item>
+ <item>
+ <p>
+ Some legacy TLS 1.0 software does not tolerate the 1/n-1
+ content split BEAST mitigation technique. Add a
+ beast_mitigation SSL option (defaulting to
+ one_n_minus_one) to select or disable the BEAST
+ mitigation technique.</p>
+ <p>
+ Own Id: OTP-13629</p>
+ </item>
+ <item>
+ <p>
+ Enhance error log messages to facilitate for users to
+ understand the error</p>
+ <p>
+ Own Id: OTP-13632</p>
+ </item>
+ <item>
+ <p>
+ Increased default DH params to 2048-bit</p>
+ <p>
+ Own Id: OTP-13636</p>
+ </item>
+ <item>
+ <p>
+ Propagate CRL unknown CA error so that public_key
+ validation process continues correctly and determines
+ what should happen.</p>
+ <p>
+ Own Id: OTP-13656</p>
+ </item>
+ <item>
+ <p>
+ Introduce a flight concept for handshake packages. This
+ is a preparation for enabling DTLS, however it can also
+ have a positive effects for TLS on slow and unreliable
+ networks.</p>
+ <p>
+ Own Id: OTP-13678</p>
</item>
</list>
</section>
diff --git a/lib/ssl/doc/src/pkix_certs.xml b/lib/ssl/doc/src/pkix_certs.xml
index a5793af5ca..f365acef4d 100644
--- a/lib/ssl/doc/src/pkix_certs.xml
+++ b/lib/ssl/doc/src/pkix_certs.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssl/doc/src/release_notes.xml b/lib/ssl/doc/src/release_notes.xml
index 4c9b18f900..2e263c69a7 100644
--- a/lib/ssl/doc/src/release_notes.xml
+++ b/lib/ssl/doc/src/release_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml
index e831f73530..abba5aaf59 100644
--- a/lib/ssl/doc/src/ssl.xml
+++ b/lib/ssl/doc/src/ssl.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1999</year><year>2015</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -48,7 +48,7 @@
<item><p><c>true | false</c></p></item>
<tag><c>option() =</c></tag>
- <item><p><c>socketoption() | ssloption() | transportoption()</c></p>
+ <item><p><c>socketoption() | ssl_option() | transport_option()</c></p>
</item>
<tag><c>socketoption() =</c></tag>
@@ -60,7 +60,7 @@
<seealso marker="kernel:gen_tcp">gen_tcp(3)</seealso> manual pages
in Kernel.</p></item>
- <tag><marker id="type-ssloption"/><c>ssloption() =</c></tag>
+ <tag><marker id="type-ssloption"/><c>ssl_option() =</c></tag>
<item>
<p><c>{verify, verify_type()}</c></p>
<p><c>| {verify_fun, {fun(), term()}}</c></p>
@@ -85,11 +85,11 @@
[binary()]} | {client | server, [binary()], binary()}}</c></p>
<p><c>| {log_alert, boolean()}</c></p>
<p><c>| {server_name_indication, hostname() | disable}</c></p>
- <p><c>| {sni_hosts, [{hostname(), ssloptions()}]}</c></p>
+ <p><c>| {sni_hosts, [{hostname(), [ssl_option()]}]}</c></p>
<p><c>| {sni_fun, SNIfun::fun()}</c></p>
</item>
- <tag><c>transportoption() =</c></tag>
+ <tag><c>transport_option() =</c></tag>
<item><p><c>{cb_info, {CallbackModule::atom(), DataTag::atom(),
ClosedTag::atom(), ErrTag:atom()}}</c></p>
@@ -168,7 +168,7 @@
| srp_4096 | srp_6144 | srp_8192</c></p></item>
<tag><c>SNIfun::fun()</c></tag>
- <item><p><c>= fun(ServerName :: string()) -> ssloptions()</c></p></item>
+ <item><p><c>= fun(ServerName :: string()) -> [ssl_option()]</c></p></item>
</taglist>
</section>
@@ -331,39 +331,88 @@ marker="public_key:public_key#pkix_path_validation-3">public_key:pkix_path_valid
<tag><c>{crl_check, boolean() | peer | best_effort }</c></tag>
<item>
- Perform CRL (Certificate Revocation List) verification
+ <p>Perform CRL (Certificate Revocation List) verification
<seealso marker="public_key:public_key#pkix_crls_validate-3">
(public_key:pkix_crls_validate/3)</seealso> on all the certificates during the path validation
<seealso
marker="public_key:public_key#pkix_path_validation-3">(public_key:pkix_path_validation/3)
</seealso>
- of the certificate chain. Defaults to false.
+ of the certificate chain. Defaults to <c>false</c>.</p>
- <p><c>peer</c> - check is only performed on
- the peer certificate.</p>
+ <taglist>
+ <tag><c>peer</c></tag>
+ <item>check is only performed on the peer certificate.</item>
- <p><c>best_effort</c> - if certificate revocation status can not be determined
- it will be accepted as valid.</p>
+ <tag><c>best_effort</c></tag>
+ <item>if certificate revocation status can not be determined
+ it will be accepted as valid.</item>
+ </taglist>
<p>The CA certificates specified for the connection will be used to
construct the certificate chain validating the CRLs.</p>
- <p>The CRLs will be fetched from a local or external cache see
+ <p>The CRLs will be fetched from a local or external cache. See
<seealso marker="ssl:ssl_crl_cache_api">ssl_crl_cache_api(3)</seealso>.</p>
</item>
<tag><c>{crl_cache, {Module :: atom(), {DbHandle :: internal | term(), Args :: list()}}}</c></tag>
<item>
- <p>Module defaults to ssl_crl_cache with <c> DbHandle </c> internal and an
- empty argument list. The following arguments may be specified for the internal cache.</p>
+ <p>Specify how to perform lookup and caching of certificate revocation lists.
+ <c>Module</c> defaults to <seealso marker="ssl:ssl_crl_cache">ssl_crl_cache</seealso>
+ with <c> DbHandle </c> being <c>internal</c> and an
+ empty argument list.</p>
+
+ <p>There are two implementations available:</p>
+
<taglist>
- <tag><c>{http, timeout()}</c></tag>
- <item><p>
- Enables fetching of CRLs specified as http URIs in<seealso
- marker="public_key:public_key_records"> X509 certificate extensions.</seealso>
- Requires the OTP inets application.</p>
- </item>
- </taglist>
+ <tag><c>ssl_crl_cache</c></tag>
+ <item>
+ <p>This module maintains a cache of CRLs. CRLs can be
+ added to the cache using the function <seealso
+ marker="ssl:ssl_crl_cache#insert-1">ssl_crl_cache:insert/1</seealso>,
+ and optionally automatically fetched through HTTP if the
+ following argument is specified:</p>
+
+ <taglist>
+ <tag><c>{http, timeout()}</c></tag>
+ <item><p>
+ Enables fetching of CRLs specified as http URIs in<seealso
+ marker="public_key:public_key_records">X509 certificate extensions</seealso>.
+ Requires the OTP inets application.</p>
+ </item>
+ </taglist>
+ </item>
+
+ <tag><c>ssl_crl_hash_dir</c></tag>
+ <item>
+ <p>This module makes use of a directory where CRLs are
+ stored in files named by the hash of the issuer name.</p>
+
+ <p>The file names consist of eight hexadecimal digits
+ followed by <c>.rN</c>, where <c>N</c> is an integer,
+ e.g. <c>1a2b3c4d.r0</c>. For the first version of the
+ CRL, <c>N</c> starts at zero, and for each new version,
+ <c>N</c> is incremented by one. The OpenSSL utility
+ <c>c_rehash</c> creates symlinks according to this
+ pattern.</p>
+
+ <p>For a given hash value, this module finds all
+ consecutive <c>.r*</c> files starting from zero, and those
+ files taken together make up the revocation list. CRL
+ files whose <c>nextUpdate</c> fields are in the past, or
+ that are issued by a different CA that happens to have the
+ same name hash, are excluded.</p>
+
+ <p>The following argument is required:</p>
+
+ <taglist>
+ <tag><c>{dir, string()}</c></tag>
+ <item><p>Specifies the directory in which the CRLs can be found.</p></item>
+ </taglist>
+
+ </item>
+ </taglist>
+
</item>
<tag><c>{partial_chain, fun(Chain::[DerCert]) -> {trusted_ca, DerCert} |
@@ -415,12 +464,29 @@ fun(srp, Username :: string(), UserState :: term()) ->
<tag><c>{padding_check, boolean()}</c></tag>
<item><p>Affects TLS-1.0 connections only.
If set to <c>false</c>, it disables the block cipher padding check
- to be able to interoperate with legacy software.</p></item>
+ to be able to interoperate with legacy software.</p>
+ <warning><p>Using <c>{padding_check, boolean()}</c> makes TLS
+ vulnerable to the Poodle attack.</p></warning>
+ </item>
- </taglist>
+
+
+ <tag><c>{beast_mitigation, one_n_minus_one | zero_n | disabled}</c></tag>
+ <item><p>Affects SSL-3.0 and TLS-1.0 connections only. Used to change the BEAST
+ mitigation strategy to interoperate with legacy software.
+ Defaults to <c>one_n_minus_one</c>.</p>
+
+ <p><c>one_n_minus_one</c> - Perform 1/n-1 BEAST mitigation.</p>
+
+ <p><c>zero_n</c> - Perform 0/n BEAST mitigation.</p>
+
+ <p><c>disabled</c> - Disable BEAST mitigation.</p>
+
+ <warning><p>Using <c>{beast_mitigation, disabled}</c> makes SSL or TLS
+ vulnerable to the BEAST attack.</p></warning>
+ </item>
+ </taglist>
- <warning><p>Using <c>{padding_check, boolean()}</c> makes TLS
- vulnerable to the Poodle attack.</p></warning>
</section>
<section>
@@ -532,7 +598,7 @@ fun(srp, Username :: string(), UserState :: term()) ->
TLS handshake. If no lower TLS versions than 1.2 are supported,
the client will send a TLS signature algorithm extension
with the algorithms specified by this option.
- Defaults to
+ Defaults to</p>
<code>[
%% SHA2
@@ -548,13 +614,11 @@ fun(srp, Username :: string(), UserState :: term()) ->
{sha, ecdsa},
{sha, rsa},
{sha, dsa},
-%% MD5
-{md5, rsa}
]</code>
-
+<p>
The algorithms should be in the preferred order.
Selected signature algorithm can restrict which hash functions
- that may be selected.
+ that may be selected. Default support for {md5, rsa} removed in ssl-8.0
</p>
</item>
</taglist>
@@ -652,7 +716,7 @@ fun(srp, Username :: string(), UserState :: term()) ->
selection. If set to <c>false</c> (the default), use the client
preference.</p></item>
- <tag><c>{sni_hosts, [{hostname(), ssloptions()}]}</c></tag>
+ <tag><c>{sni_hosts, [{hostname(), [ssl_option()]}]}</c></tag>
<item><p>If the server receives a SNI (Server Name Indication) from the client
matching a host listed in the <c>sni_hosts</c> option, the specific options for
that host will override previously specified options.
@@ -661,11 +725,11 @@ fun(srp, Username :: string(), UserState :: term()) ->
<tag><c>{sni_fun, SNIfun::fun()}</c></tag>
<item><p>If the server receives a SNI (Server Name Indication) from the client,
- the given function will be called to retrieve <c>ssloptions()</c> for the indicated server.
- These options will be merged into predefined <c>ssloptions()</c>.
+ the given function will be called to retrieve <c>[ssl_option()]</c> for the indicated server.
+ These options will be merged into predefined <c>[ssl_option()]</c>.
The function should be defined as:
- <c>fun(ServerName :: string()) -> ssloptions()</c>
+ <c>fun(ServerName :: string()) -> [ssl_option()]</c>
and can be specified as a fun or as named <c>fun module:function/1</c>
The option <c>sni_fun</c>, and <c>sni_hosts</c> are mutually exclusive.</p></item>
@@ -694,6 +758,12 @@ fun(srp, Username :: string(), UserState :: term()) ->
client certificate is requested. For more details see the <seealso marker="#client_signature_algs">corresponding client option</seealso>.
</p> </item>
+ <tag><c>{v2_hello_compatible, boolean()}</c></tag>
+ <item>If true, the server accepts clients that send hello messages on SSL-2.0 format but offers
+ supported SSL/TLS versions. Defaults to false, that is the server will not interoperate with clients that
+ offers SSL-2.0.
+ </item>
+
</taglist>
</section>
@@ -753,7 +823,7 @@ fun(srp, Username :: string(), UserState :: term()) ->
equivalent, connected socket to an SSL socket.</fsummary>
<type>
<v>Socket = socket()</v>
- <v>SslOptions = [ssloption()]</v>
+ <v>SslOptions = [ssl_option()]</v>
<v>Timeout = integer() | infinity</v>
<v>SslSocket = sslsocket()</v>
<v>Reason = term()</v>
@@ -883,6 +953,23 @@ fun(srp, Username :: string(), UserState :: term()) ->
</func>
<func>
+ <name>getstat(Socket) ->
+ {ok, OptionValues} | {error, inet:posix()}</name>
+ <name>getstat(Socket, OptionNames) ->
+ {ok, OptionValues} | {error, inet:posix()}</name>
+ <fsummary>Get one or more statistic options for a socket</fsummary>
+ <type>
+ <v>Socket = sslsocket()</v>
+ <v>OptionNames = [atom()]</v>
+ <v>OptionValues = [{inet:stat_option(), integer()}]</v>
+ </type>
+ <desc>
+ <p>Gets one or more statistic options for the underlying TCP socket.</p>
+ <p>See inet:getstat/2 for statistic options description.</p>
+ </desc>
+ </func>
+
+ <func>
<name>listen(Port, Options) ->
{ok, ListenSocket} | {error, Reason}</name>
<fsummary>Creates an SSL listen socket.</fsummary>
@@ -1066,7 +1153,7 @@ fun(srp, Username :: string(), UserState :: term()) ->
<fsummary>Performs server-side SSL/TLS handshake.</fsummary>
<type>
<v>Socket = socket() | sslsocket() </v>
- <v>SslOptions = ssloptions()</v>
+ <v>SslOptions = [ssl_option()]</v>
<v>Timeout = integer()</v>
<v>Reason = term()</v>
</type>
diff --git a/lib/ssl/doc/src/ssl_app.xml b/lib/ssl/doc/src/ssl_app.xml
index 6c82e32a74..a66e947bc1 100644
--- a/lib/ssl/doc/src/ssl_app.xml
+++ b/lib/ssl/doc/src/ssl_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>1999</year><year>2015</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -43,6 +43,10 @@
<item>For security reasons SSL-2.0 is not supported.</item>
<item>For security reasons SSL-3.0 is no longer supported by default,
but can be configured.</item>
+ <item>For security reasons DES cipher suites are no longer supported by default,
+ but can be configured.</item>
+ <item> Renegotiation Indication Extension <url href="http://www.ietf.org/rfc/rfc5746.txt">RFC 5746</url> is supported
+ </item>
<item>Ephemeral Diffie-Hellman cipher suites are supported,
but not Diffie Hellman Certificates cipher suites.</item>
<item>Elliptic Curve cipher suites are supported if the Crypto
@@ -53,10 +57,16 @@
<item>IDEA cipher suites are not supported as they have
become deprecated by the latest TLS specification so it is not
motivated to implement them.</item>
+ <item>Compression is not supported.</item>
<item>CRL validation is supported.</item>
<item>Policy certificate extensions are not supported.</item>
- <item>'Server Name Indication' extension client side
- (RFC 6066, Section 3) is supported.</item>
+ <item>'Server Name Indication' extension
+ (<url href="http://www.ietf.org/rfc/rfc6066.txt">RFC 6066</url>) is supported.</item>
+ <item>Application Layer Protocol Negotiation (ALPN) and its successor Next Protocol Negotiation (NPN)
+ are supported. </item>
+ <item>It is possible to use Pre-Shared Key (PSK) and Secure Remote Password (SRP)
+ cipher suites, but they are not enabled by default.
+ </item>
</list>
</description>
@@ -92,7 +102,10 @@
to <c>ssl:connect/[2,3]</c> and <c>ssl:listen/2</c>.</p></item>
<tag><c><![CDATA[session_lifetime = integer() <optional>]]></c></tag>
- <item><p>Maximum lifetime of the session data in seconds.</p></item>
+ <item><p>Maximum lifetime of the session data in seconds. Defaults to 24 hours which is the maximum
+ recommended lifetime by <url href="http://www.ietf.org/rfc/5246rfc.txt">RFC 5246</url>. However
+ sessions may be invalidated earlier due to the maximum limitation of the session cache table.
+ </p></item>
<tag><c><![CDATA[session_cb = atom() <optional>]]></c></tag>
<item><p>Name of the session cache callback module that implements
@@ -104,17 +117,25 @@
<item><p>List of extra user-defined arguments to the <c>init</c> function
in the session cache callback module. Defaults to <c>[]</c>.</p></item>
- <tag><c><![CDATA[session_cache_client_max = integer() <optional>]]></c><br/>
- <c><![CDATA[session_cache_server_max = integer() <optional>]]></c></tag>
- <item><p>Limits the growth of the clients/servers session cache,
- if the maximum number of sessions is reached, the current cache entries will
- be invalidated regardless of their remaining lifetime. Defaults to 1000.
- </p></item>
+ <tag><c><![CDATA[session_cache_client_max = integer() <optional>]]></c><br/></tag>
+ <item><p>Limits the growth of the clients session cache, that is
+ how many sessions towards servers that are cached to be used by
+ new client connections. If the maximum number of sessions is
+ reached, the current cache entries will be invalidated
+ regardless of their remaining lifetime. Defaults to
+ 1000.</p></item>
+
+ <tag> <c><![CDATA[session_cache_server_max = integer() <optional>]]></c></tag>
+ <item><p>Limits the growth of the servers session cache, that is
+ how many client sessions are cached by the server. If the
+ maximum number of sessions is reached, the current cache entries
+ will be invalidated regardless of their remaining
+ lifetime. Defaults to 1000.</p></item>
<tag><c><![CDATA[ssl_pem_cache_clean = integer() <optional>]]></c></tag>
<item>
<p>
- Number of milliseconds between PEM cache validations.
+ Number of milliseconds between PEM cache validations. Defaults to 2 minutes.
</p>
<seealso
marker="ssl#clear_pem_cache-0">ssl:clear_pem_cache/0</seealso>
@@ -129,8 +150,6 @@
shutdown gracefully. Defaults to 5000 milliseconds.
</p>
</item>
-
-
</taglist>
</section>
diff --git a/lib/ssl/doc/src/ssl_crl_cache_api.xml b/lib/ssl/doc/src/ssl_crl_cache_api.xml
index 03ac010bfe..7440b6ef04 100644
--- a/lib/ssl/doc/src/ssl_crl_cache_api.xml
+++ b/lib/ssl/doc/src/ssl_crl_cache_api.xml
@@ -76,10 +76,13 @@
</func>
<func>
+ <name>lookup(DistributionPoint, Issuer, DbHandle) -> not_available | CRLs </name>
<name>lookup(DistributionPoint, DbHandle) -> not_available | CRLs </name>
<fsummary> </fsummary>
<type>
<v> DistributionPoint = dist_point() </v>
+ <v> Issuer = <seealso
+ marker="public_key:public_key">public_key:issuer_name()</seealso> </v>
<v> DbHandle = cache_ref() </v>
<v> CRLs = [<seealso
marker="public_key:public_key">public_key:der_encoded()</seealso>] </v>
@@ -87,6 +90,18 @@
<desc> <p>Lookup the CRLs belonging to the distribution point <c> Distributionpoint</c>.
This function may choose to only look in the cache or to follow distribution point
links depending on how the cache is administrated. </p>
+
+ <p>The <c>Issuer</c> argument contains the issuer name of the
+ certificate to be checked. Normally the returned CRL should
+ be issued by this issuer, except if the <c>cRLIssuer</c> field
+ of <c>DistributionPoint</c> has a value, in which case that
+ value should be used instead.</p>
+
+ <p>In an earlier version of this API, the <c>lookup</c>
+ function received two arguments, omitting <c>Issuer</c>. For
+ compatibility, this is still supported: if there is no
+ <c>lookup/3</c> function in the callback module,
+ <c>lookup/2</c> is called instead.</p>
</desc>
</func>
diff --git a/lib/ssl/doc/src/ssl_distribution.xml b/lib/ssl/doc/src/ssl_distribution.xml
index dc04d446b0..4bd5f67202 100644
--- a/lib/ssl/doc/src/ssl_distribution.xml
+++ b/lib/ssl/doc/src/ssl_distribution.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -98,6 +98,7 @@
{stdlib,"1.18"},
{crypto, "2.0.3"},
{public_key, "0.12"},
+ {asn1, "4.0"},
{ssl, "5.0"}
]}.
</code>
@@ -196,6 +197,9 @@ Eshell V5.0 (abort with ^G)
<item><c>password</c></item>
<item><c>cacertfile</c></item>
<item><c>verify</c></item>
+ <item><c>verify_fun</c> (write as <c>{Module, Function, InitialUserState}</c>)</item>
+ <item><c>crl_check</c></item>
+ <item><c>crl_cache</c> (write as Erlang term)</item>
<item><c>reuse_sessions</c></item>
<item><c>secure_renegotiate</c></item>
<item><c>depth</c></item>
@@ -203,6 +207,10 @@ Eshell V5.0 (abort with ^G)
<item><c>ciphers</c> (use old string format)</item>
</list>
+ <p>Note that <c>verify_fun</c> needs to be written in a different
+ form than the corresponding SSL option, since funs are not
+ accepted on the command line.</p>
+
<p>The server can also take the options <c>dhfile</c> and
<c>fail_if_no_peer_cert</c> (also prefixed).</p>
@@ -210,10 +218,6 @@ Eshell V5.0 (abort with ^G)
initiates a connection to another node. <c>server_</c>-prefixed
options are used when accepting a connection from a remote node.</p>
- <p>More complex options, such as <c>verify_fun</c>, are currently not
- available, but a mechanism to handle such options may be added in
- a future release.</p>
-
<p>Raw socket options, such as <c>packet</c> and <c>size</c> must not
be specified on the command line.</p>
diff --git a/lib/ssl/doc/src/usersguide.xml b/lib/ssl/doc/src/usersguide.xml
index 7bd0ae5c4c..23ccf668c3 100644
--- a/lib/ssl/doc/src/usersguide.xml
+++ b/lib/ssl/doc/src/usersguide.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssl/doc/src/using_ssl.xml b/lib/ssl/doc/src/using_ssl.xml
index b6a4bb5bec..f84cd6e391 100644
--- a/lib/ssl/doc/src/using_ssl.xml
+++ b/lib/ssl/doc/src/using_ssl.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/ssl/examples/certs/Makefile b/lib/ssl/examples/certs/Makefile
index 797abb04ef..5c456c6a1a 100644
--- a/lib/ssl/examples/certs/Makefile
+++ b/lib/ssl/examples/certs/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ssl/examples/src/Makefile b/lib/ssl/examples/src/Makefile
index e14ef321c7..7335bb2bb8 100644
--- a/lib/ssl/examples/src/Makefile
+++ b/lib/ssl/examples/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/ssl/examples/src/client_server.erl b/lib/ssl/examples/src/client_server.erl
index 019b5130d2..c150f43bff 100644
--- a/lib/ssl/examples/src/client_server.erl
+++ b/lib/ssl/examples/src/client_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/Makefile b/lib/ssl/src/Makefile
index 7a7a373487..b625db0656 100644
--- a/lib/ssl/src/Makefile
+++ b/lib/ssl/src/Makefile
@@ -70,6 +70,7 @@ MODULES= \
ssl_session_cache \
ssl_crl\
ssl_crl_cache \
+ ssl_crl_hash_dir \
ssl_socket \
ssl_listen_tracker_sup \
tls_record \
diff --git a/lib/ssl/src/dtls.erl b/lib/ssl/src/dtls.erl
index 14aefd4989..cd705152a8 100644
--- a/lib/ssl/src/dtls.erl
+++ b/lib/ssl/src/dtls.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/dtls_connection.erl b/lib/ssl/src/dtls_connection.erl
index e490de7eeb..b8be686b99 100644
--- a/lib/ssl/src/dtls_connection.erl
+++ b/lib/ssl/src/dtls_connection.erl
@@ -21,7 +21,7 @@
%% Internal application API
--behaviour(gen_fsm).
+-behaviour(gen_statem).
-include("dtls_connection.hrl").
-include("dtls_handshake.hrl").
@@ -36,48 +36,49 @@
%% Internal application API
%% Setup
--export([start_fsm/8]).
+-export([start_fsm/8, start_link/7, init/1]).
%% State transition handling
--export([next_record/1, next_state/4%,
- %%next_state_connection/2
- ]).
+-export([next_record/1, next_event/3]).
%% Handshake handling
--export([%%renegotiate/1,
- send_handshake/2, send_change_cipher/2]).
+-export([%%renegotiate/2,
+ send_handshake/2, queue_handshake/2, queue_change_cipher/2]).
%% Alert and close handling
--export([send_alert/2, handle_own_alert/4, %%handle_close_alert/3,
- handle_normal_shutdown/3
- %%handle_unexpected_message/3,
- %%alert_user/5, alert_user/8
+-export([%%send_alert/2, handle_own_alert/4, handle_close_alert/3,
+ handle_normal_shutdown/3 %%, close/5
+ %%alert_user/6, alert_user/9
]).
%% Data handling
+
-export([%%write_application_data/3,
- read_application_data/2%%,
-%% passive_receive/2, next_record_if_active/1
+ read_application_data/2,
+ passive_receive/2, next_record_if_active/1%,
+ %%handle_common_event/4,
+ %handle_packet/3
]).
-%% Called by tls_connection_sup
--export([start_link/7]).
+%% gen_statem state functions
+-export([init/3, error/3, downgrade/3, %% Initiation and take down states
+ hello/3, certify/3, cipher/3, abbreviated/3, %% Handshake states
+ connection/3]).
+%% gen_statem callbacks
+-export([terminate/3, code_change/4, format_status/2]).
-%% gen_fsm callbacks
--export([init/1, hello/2, certify/2, cipher/2,
- abbreviated/2, connection/2, handle_event/3,
- handle_sync_event/4, handle_info/3, terminate/3, code_change/4]).
+-define(GEN_STATEM_CB_MODE, state_functions).
%%====================================================================
%% Internal application API
%%====================================================================
-start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = false},_} = Opts,
+start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = false},_, Tracker} = Opts,
User, {CbModule, _,_, _} = CbInfo,
Timeout) ->
try
{ok, Pid} = dtls_connection_sup:start_child([Role, Host, Port, Socket,
Opts, User, CbInfo]),
- {ok, SslSocket} = ssl_connection:socket_control(?MODULE, Socket, Pid, CbModule),
+ {ok, SslSocket} = ssl_connection:socket_control(?MODULE, Socket, Pid, CbModule, Tracker),
ok = ssl_connection:handshake(SslSocket, Timeout),
{ok, SslSocket}
catch
@@ -85,13 +86,13 @@ start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = false},_} = Opts,
Error
end;
-start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_} = Opts,
+start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_, Tracker} = Opts,
User, {CbModule, _,_, _} = CbInfo,
Timeout) ->
try
{ok, Pid} = dtls_connection_sup:start_child_dist([Role, Host, Port, Socket,
Opts, User, CbInfo]),
- {ok, SslSocket} = ssl_connection:socket_control(?MODULE, Socket, Pid, CbModule),
+ {ok, SslSocket} = ssl_connection:socket_control(?MODULE, Socket, Pid, CbModule, Tracker),
ok = ssl_connection:handshake(SslSocket, Timeout),
{ok, SslSocket}
catch
@@ -99,14 +100,37 @@ start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_} = Opts,
Error
end.
-send_handshake(Handshake, #state{negotiated_version = Version,
- tls_handshake_history = Hist0,
- connection_states = ConnectionStates0} = State0) ->
- {BinHandshake, ConnectionStates, Hist} =
+send_handshake(Handshake, State) ->
+ send_handshake_flight(queue_handshake(Handshake, State)).
+
+queue_flight_buffer(Msg, #state{negotiated_version = Version,
+ connection_states = #connection_states{
+ current_write =
+ #connection_state{epoch = Epoch}},
+ flight_buffer = Flight} = State) ->
+ State#state{flight_buffer = Flight ++ [{Version, Epoch, Msg}]}.
+
+queue_handshake(Handshake, #state{negotiated_version = Version,
+ tls_handshake_history = Hist0,
+ connection_states = ConnectionStates0} = State0) ->
+ {Frag, ConnectionStates, Hist} =
encode_handshake(Handshake, Version, ConnectionStates0, Hist0),
- send_flight(BinHandshake, State0#state{connection_states = ConnectionStates,
- tls_handshake_history = Hist
- }).
+ queue_flight_buffer(Frag, State0#state{connection_states = ConnectionStates,
+ tls_handshake_history = Hist}).
+
+send_handshake_flight(#state{socket = Socket,
+ transport_cb = Transport,
+ flight_buffer = Flight,
+ connection_states = ConnectionStates0} = State0) ->
+
+ {Encoded, ConnectionStates} =
+ encode_handshake_flight(Flight, ConnectionStates0),
+
+ Transport:send(Socket, Encoded),
+ State0#state{flight_buffer = [], connection_states = ConnectionStates}.
+
+queue_change_cipher(Msg, State) ->
+ queue_flight_buffer(Msg, State).
send_alert(Alert, #state{negotiated_version = Version,
socket = Socket,
@@ -117,15 +141,6 @@ send_alert(Alert, #state{negotiated_version = Version,
Transport:send(Socket, BinMsg),
State0#state{connection_states = ConnectionStates}.
-send_change_cipher(Msg, #state{connection_states = ConnectionStates0,
- socket = Socket,
- negotiated_version = Version,
- transport_cb = Transport} = State0) ->
- {BinChangeCipher, ConnectionStates} =
- encode_change_cipher(Msg, Version, ConnectionStates0),
- Transport:send(Socket, BinChangeCipher),
- State0#state{connection_states = ConnectionStates}.
-
%%====================================================================
%% tls_connection_sup API
%%====================================================================
@@ -141,83 +156,98 @@ send_change_cipher(Msg, #state{connection_states = ConnectionStates0,
start_link(Role, Host, Port, Socket, Options, User, CbInfo) ->
{ok, proc_lib:spawn_link(?MODULE, init, [[Role, Host, Port, Socket, Options, User, CbInfo]])}.
-init([Role, Host, Port, Socket, {SSLOpts0, _} = Options, User, CbInfo]) ->
+init([Role, Host, Port, Socket, Options, User, CbInfo]) ->
process_flag(trap_exit, true),
State0 = initial_state(Role, Host, Port, Socket, Options, User, CbInfo),
- Handshake = ssl_handshake:init_handshake_history(),
- TimeStamp = erlang:monotonic_time(),
- try ssl_config:init(SSLOpts0, Role) of
- {ok, Ref, CertDbHandle, FileRefHandle, CacheHandle, CRLDbInfo, OwnCert, Key, DHParams} ->
- Session = State0#state.session,
- State = State0#state{
- tls_handshake_history = Handshake,
- session = Session#session{own_certificate = OwnCert,
- time_stamp = TimeStamp},
- file_ref_db = FileRefHandle,
- cert_db_ref = Ref,
- cert_db = CertDbHandle,
- crl_db = CRLDbInfo,
- session_cache = CacheHandle,
- private_key = Key,
- diffie_hellman_params = DHParams},
- gen_fsm:enter_loop(?MODULE, [], hello, State, get_timeout(State))
+ try
+ State = ssl_connection:ssl_config(State0#state.ssl_options, Role, State0),
+ gen_statem:enter_loop(?MODULE, [], ?GEN_STATEM_CB_MODE, init, State)
catch
throw:Error ->
- gen_fsm:enter_loop(?MODULE, [], error, {Error,State0}, get_timeout(State0))
+ gen_statem:enter_loop(?MODULE, [], ?GEN_STATEM_CB_MODE, error, {Error,State0})
end.
%%--------------------------------------------------------------------
-%% Description:There should be one instance of this function for each
-%% possible state name. Whenever a gen_fsm receives an event sent
-%% using gen_fsm:send_event/2, the instance of this function with the
-%% same name as the current state name StateName is called to handle
-%% the event. It is also called if a timeout occurs.
-%%
-hello(start, #state{host = Host, port = Port, role = client,
- ssl_options = SslOpts,
- session = #session{own_certificate = Cert} = Session0,
- session_cache = Cache, session_cache_cb = CacheCb,
- transport_cb = Transport, socket = Socket,
- connection_states = ConnectionStates0,
- renegotiation = {Renegotiation, _}} = State0) ->
+%% State functionsconnection/2
+%%--------------------------------------------------------------------
+
+init({call, From}, {start, Timeout},
+ #state{host = Host, port = Port, role = client,
+ ssl_options = SslOpts,
+ session = #session{own_certificate = Cert} = Session0,
+ transport_cb = Transport, socket = Socket,
+ connection_states = ConnectionStates0,
+ renegotiation = {Renegotiation, _},
+ session_cache = Cache,
+ session_cache_cb = CacheCb
+ } = State0) ->
+ Timer = ssl_connection:start_or_recv_cancel_timer(Timeout, From),
Hello = dtls_handshake:client_hello(Host, Port, ConnectionStates0, SslOpts,
- Cache, CacheCb, Renegotiation, Cert),
+ Cache, CacheCb, Renegotiation, Cert),
Version = Hello#client_hello.client_version,
+ HelloVersion = dtls_record:lowest_protocol_version(SslOpts#ssl_options.versions),
Handshake0 = ssl_handshake:init_handshake_history(),
{BinMsg, ConnectionStates, Handshake} =
- encode_handshake(Hello, Version, ConnectionStates0, Handshake0),
+ encode_handshake(Hello, HelloVersion, ConnectionStates0, Handshake0),
Transport:send(Socket, BinMsg),
State1 = State0#state{connection_states = ConnectionStates,
negotiated_version = Version, %% Requested version
session =
Session0#session{session_id = Hello#client_hello.session_id},
- tls_handshake_history = Handshake},
+ tls_handshake_history = Handshake,
+ start_or_recv_from = From,
+ timer = Timer},
{Record, State} = next_record(State1),
- next_state(hello, hello, Record, State);
+ next_event(hello, Record, State);
+init(Type, Event, State) ->
+ ssl_connection:init(Type, Event, State, ?MODULE).
+
+error({call, From}, {start, _Timeout}, {Error, State}) ->
+ {stop_and_reply, normal, {reply, From, {error, Error}}, State};
+error({call, From}, Msg, State) ->
+ handle_call(Msg, From, error, State);
+error(_, _, _) ->
+ {keep_state_and_data, [postpone]}.
-hello(Hello = #client_hello{client_version = ClientVersion},
+%%--------------------------------------------------------------------
+-spec hello(gen_statem:event_type(),
+ #hello_request{} | #client_hello{} | #server_hello{} | term(),
+ #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+hello(internal, #client_hello{client_version = ClientVersion,
+ extensions = #hello_extensions{ec_point_formats = EcPointFormats,
+ elliptic_curves = EllipticCurves}} = Hello,
State = #state{connection_states = ConnectionStates0,
port = Port, session = #session{own_certificate = Cert} = Session0,
renegotiation = {Renegotiation, _},
session_cache = Cache,
session_cache_cb = CacheCb,
+ negotiated_protocol = CurrentProtocol,
+ key_algorithm = KeyExAlg,
ssl_options = SslOpts}) ->
+
case dtls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb,
- ConnectionStates0, Cert}, Renegotiation) of
- {Version, {Type, Session},
- ConnectionStates,
- #hello_extensions{ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves} = ServerHelloExt, HashSign} ->
- ssl_connection:hello({common_client_hello, Type, ServerHelloExt, HashSign},
- State#state{connection_states = ConnectionStates,
+ ConnectionStates0, Cert, KeyExAlg}, Renegotiation) of
+ #alert{} = Alert ->
+ handle_own_alert(Alert, ClientVersion, hello, State);
+ {Version, {Type, Session},
+ ConnectionStates, Protocol0, ServerHelloExt, HashSign} ->
+ Protocol = case Protocol0 of
+ undefined -> CurrentProtocol;
+ _ -> Protocol0
+ end,
+
+ ssl_connection:hello(internal, {common_client_hello, Type, ServerHelloExt},
+ State#state{connection_states = ConnectionStates,
negotiated_version = Version,
+ hashsign_algorithm = HashSign,
session = Session,
- client_ecc = {EllipticCurves, EcPointFormats}}, ?MODULE);
- #alert{} = Alert ->
- handle_own_alert(Alert, ClientVersion, hello, State)
+ client_ecc = {EllipticCurves, EcPointFormats},
+ negotiated_protocol = Protocol}, ?MODULE)
end;
-hello(Hello,
+hello(internal, #server_hello{} = Hello,
#state{connection_states = ConnectionStates0,
negotiated_version = ReqVersion,
role = client,
@@ -230,20 +260,30 @@ hello(Hello,
ssl_connection:handle_session(Hello,
Version, NewId, ConnectionStates, ProtoExt, Protocol, State)
end;
-
-hello(Msg, State) ->
- ssl_connection:hello(Msg, State, ?MODULE).
-
-abbreviated(Msg, State) ->
- ssl_connection:abbreviated(Msg, State, ?MODULE).
-
-certify(Msg, State) ->
- ssl_connection:certify(Msg, State, ?MODULE).
-
-cipher(Msg, State) ->
- ssl_connection:cipher(Msg, State, ?MODULE).
-
-connection(#hello_request{}, #state{host = Host, port = Port,
+hello(info, Event, State) ->
+ handle_info(Event, hello, State);
+
+hello(Type, Event, State) ->
+ ssl_connection:hello(Type, Event, State, ?MODULE).
+
+abbreviated(info, Event, State) ->
+ handle_info(Event, abbreviated, State);
+abbreviated(Type, Event, State) ->
+ ssl_connection:abbreviated(Type, Event, State, ?MODULE).
+
+certify(info, Event, State) ->
+ handle_info(Event, certify, State);
+certify(Type, Event, State) ->
+ ssl_connection:certify(Type, Event, State, ?MODULE).
+
+cipher(info, Event, State) ->
+ handle_info(Event, cipher, State);
+cipher(Type, Event, State) ->
+ ssl_connection:cipher(Type, Event, State, ?MODULE).
+
+connection(info, Event, State) ->
+ handle_info(Event, connection, State);
+connection(internal, #hello_request{}, #state{host = Host, port = Port,
session = #session{own_certificate = Cert} = Session0,
session_cache = Cache, session_cache_cb = CacheCb,
ssl_options = SslOpts,
@@ -251,46 +291,35 @@ connection(#hello_request{}, #state{host = Host, port = Port,
renegotiation = {Renegotiation, _}} = State0) ->
Hello = dtls_handshake:client_hello(Host, Port, ConnectionStates0, SslOpts,
Cache, CacheCb, Renegotiation, Cert),
- %% TODO DTLS version State1 = send_handshake(Hello, State0),
- State1 = State0,
+ State1 = send_handshake(Hello, State0),
{Record, State} =
next_record(
State1#state{session = Session0#session{session_id
= Hello#client_hello.session_id}}),
- next_state(connection, hello, Record, State);
+ next_event(hello, Record, State);
-connection(#client_hello{} = Hello, #state{role = server, allow_renegotiate = true} = State) ->
+connection(internal, #client_hello{} = Hello, #state{role = server, allow_renegotiate = true} = State) ->
%% Mitigate Computational DoS attack
%% http://www.educatedguesswork.org/2011/10/ssltls_and_computational_dos.html
%% http://www.thc.org/thc-ssl-dos/ Rather than disabling client
%% initiated renegotiation we will disallow many client initiated
%% renegotiations immediately after each other.
erlang:send_after(?WAIT_TO_ALLOW_RENEGOTIATION, self(), allow_renegotiate),
- hello(Hello, State#state{allow_renegotiate = false});
+ {next_state, hello, State#state{allow_renegotiate = false}, [{next_event, internal, Hello}]};
+
-connection(#client_hello{}, #state{role = server, allow_renegotiate = false} = State0) ->
+connection(internal, #client_hello{}, #state{role = server, allow_renegotiate = false} = State0) ->
Alert = ?ALERT_REC(?WARNING, ?NO_RENEGOTIATION),
- State = send_alert(Alert, State0),
- next_state_connection(connection, State);
+ State1 = send_alert(Alert, State0),
+ {Record, State} = ssl_connection:prepare_connection(State1, ?MODULE),
+ next_event(connection, Record, State);
-connection(Msg, State) ->
- ssl_connection:connection(Msg, State, tls_connection).
+connection(Type, Event, State) ->
+ ssl_connection:connection(Type, Event, State, ?MODULE).
-%%--------------------------------------------------------------------
-%% Description: Whenever a gen_fsm receives an event sent using
-%% gen_fsm:send_all_state_event/2, this function is called to handle
-%% the event. Not currently used!
-%%--------------------------------------------------------------------
-handle_event(_Event, StateName, State) ->
- {next_state, StateName, State, get_timeout(State)}.
+downgrade(Type, Event, State) ->
+ ssl_connection:downgrade(Type, Event, State, ?MODULE).
-%%--------------------------------------------------------------------
-%% Description: Whenever a gen_fsm receives an event sent using
-%% gen_fsm:sync_send_all_state_event/2,3, this function is called to handle
-%% the event.
-%%--------------------------------------------------------------------
-handle_sync_event(Event, From, StateName, State) ->
- ssl_connection:handle_sync_event(Event, From, StateName, State).
%%--------------------------------------------------------------------
%% Description: This function is called by a gen_fsm when it receives any
@@ -301,26 +330,38 @@ handle_sync_event(Event, From, StateName, State) ->
%% raw data from socket, unpack records
handle_info({Protocol, _, Data}, StateName,
#state{data_tag = Protocol} = State0) ->
- %% Simplify for now to avoid dialzer warnings before implementation is compleate
- %% case next_tls_record(Data, State0) of
- %% {Record, State} ->
- %% next_state(StateName, StateName, Record, State);
- %% #alert{} = Alert ->
- %% handle_normal_shutdown(Alert, StateName, State0),
- %% {stop, {shutdown, own_alert}, State0}
- %% end;
- {Record, State} = next_tls_record(Data, State0),
- next_state(StateName, StateName, Record, State);
-
+ case next_tls_record(Data, State0) of
+ {Record, State} ->
+ next_event(StateName, Record, State);
+ #alert{} = Alert ->
+ handle_normal_shutdown(Alert, StateName, State0),
+ {stop, {shutdown, own_alert}}
+ end;
handle_info({CloseTag, Socket}, StateName,
- #state{socket = Socket, close_tag = CloseTag,
- negotiated_version = _Version} = State) ->
+ #state{socket = Socket, close_tag = CloseTag,
+ negotiated_version = Version} = State) ->
+ %% Note that as of DTLS 1.2 (TLS 1.1),
+ %% failure to properly close a connection no longer requires that a
+ %% session not be resumed. This is a change from DTLS 1.0 to conform
+ %% with widespread implementation practice.
+ case Version of
+ {254, N} when N =< 253 ->
+ ok;
+ _ ->
+ %% As invalidate_sessions here causes performance issues,
+ %% we will conform to the widespread implementation
+ %% practice and go aginst the spec
+ %%invalidate_session(Role, Host, Port, Session)
+ ok
+ end,
handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), StateName, State),
- {stop, {shutdown, transport_closed}, State};
-
+ {stop, {shutdown, transport_closed}};
handle_info(Msg, StateName, State) ->
ssl_connection:handle_info(Msg, StateName, State).
+handle_call(Event, From, StateName, State) ->
+ ssl_connection:handle_call(Event, From, StateName, State, ?MODULE).
+
%%--------------------------------------------------------------------
%% Description:This function is called by a gen_fsm when it is about
%% to terminate. It should be the opposite of Module:init/1 and do any
@@ -335,154 +376,96 @@ terminate(Reason, StateName, State) ->
%% Description: Convert process state when code is changed
%%--------------------------------------------------------------------
code_change(_OldVsn, StateName, State, _Extra) ->
- {ok, StateName, State}.
+ {?GEN_STATEM_CB_MODE, StateName, State}.
+
+format_status(Type, Data) ->
+ ssl_connection:format_status(Type, Data).
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
encode_handshake(Handshake, Version, ConnectionStates0, Hist0) ->
- Seq = sequence(ConnectionStates0),
- {EncHandshake, FragmentedHandshake} = dtls_handshake:encode_handshake(Handshake, Version,
- Seq),
+ {Seq, ConnectionStates} = sequence(ConnectionStates0),
+ {EncHandshake, Frag} = dtls_handshake:encode_handshake(Handshake, Version, Seq),
Hist = ssl_handshake:update_handshake_history(Hist0, EncHandshake),
- {Encoded, ConnectionStates} =
- dtls_record:encode_handshake(FragmentedHandshake,
- Version, ConnectionStates0),
- {Encoded, ConnectionStates, Hist}.
+ {Frag, ConnectionStates, Hist}.
-next_record(#state{%%flight = #flight{state = finished},
- protocol_buffers =
- #protocol_buffers{dtls_packets = [], dtls_cipher_texts = [CT | Rest]}
- = Buffers,
- connection_states = ConnStates0} = State) ->
- case dtls_record:decode_cipher_text(CT, ConnStates0) of
- {Plain, ConnStates} ->
- {Plain, State#state{protocol_buffers =
- Buffers#protocol_buffers{dtls_cipher_texts = Rest},
- connection_states = ConnStates}};
- #alert{} = Alert ->
- {Alert, State}
- end;
-next_record(#state{socket = Socket,
- transport_cb = Transport} = State) -> %% when FlightState =/= finished
- ssl_socket:setopts(Transport, Socket, [{active,once}]),
- {no_record, State};
+encode_change_cipher(#change_cipher_spec{}, Version, ConnectionStates) ->
+ dtls_record:encode_change_cipher_spec(Version, ConnectionStates).
+encode_handshake_flight(Flight, ConnectionStates) ->
+ MSS = 1400,
+ encode_handshake_records(Flight, ConnectionStates, MSS, init_pack_records()).
-next_record(State) ->
- {no_record, State}.
+encode_handshake_records([], CS, _MSS, Recs) ->
+ {finish_pack_records(Recs), CS};
-next_state(Current,_, #alert{} = Alert, #state{negotiated_version = Version} = State) ->
- handle_own_alert(Alert, Version, Current, State);
-
-next_state(_,Next, no_record, State) ->
- {next_state, Next, State, get_timeout(State)};
-
-%% next_state(_,Next, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, State) ->
-%% Alerts = decode_alerts(EncAlerts),
-%% handle_alerts(Alerts, {next_state, Next, State, get_timeout(State)});
-
-next_state(Current, Next, #ssl_tls{type = ?HANDSHAKE, fragment = Data},
- State0 = #state{protocol_buffers =
- #protocol_buffers{dtls_handshake_buffer = Buf0} = Buffers,
- negotiated_version = Version}) ->
- Handle =
- fun({#hello_request{} = Packet, _}, {next_state, connection = SName, State}) ->
- %% This message should not be included in handshake
- %% message hashes. Starts new handshake (renegotiation)
- Hs0 = ssl_handshake:init_handshake_history(),
- ?MODULE:SName(Packet, State#state{tls_handshake_history=Hs0,
- renegotiation = {true, peer}});
- ({#hello_request{} = Packet, _}, {next_state, SName, State}) ->
- %% This message should not be included in handshake
- %% message hashes. Already in negotiation so it will be ignored!
- ?MODULE:SName(Packet, State);
- ({#client_hello{} = Packet, Raw}, {next_state, connection = SName, State}) ->
- Version = Packet#client_hello.client_version,
- Hs0 = ssl_handshake:init_handshake_history(),
- Hs1 = ssl_handshake:update_handshake_history(Hs0, Raw),
- ?MODULE:SName(Packet, State#state{tls_handshake_history=Hs1,
- renegotiation = {true, peer}});
- ({Packet, Raw}, {next_state, SName, State = #state{tls_handshake_history=Hs0}}) ->
- Hs1 = ssl_handshake:update_handshake_history(Hs0, Raw),
- ?MODULE:SName(Packet, State#state{tls_handshake_history=Hs1});
- (_, StopState) -> StopState
- end,
- try
- {Packets, Buf} = tls_handshake:get_tls_handshake(Version,Data,Buf0),
- State = State0#state{protocol_buffers =
- Buffers#protocol_buffers{dtls_packets = Packets,
- dtls_handshake_buffer = Buf}},
- handle_dtls_handshake(Handle, Next, State)
- catch throw:#alert{} = Alert ->
- handle_own_alert(Alert, Version, Current, State0)
+encode_handshake_records([{Version, _Epoch, Frag = #change_cipher_spec{}}|Tail], ConnectionStates0, MSS, Recs0) ->
+ {Encoded, ConnectionStates} =
+ encode_change_cipher(Frag, Version, ConnectionStates0),
+ Recs = append_pack_records([Encoded], MSS, Recs0),
+ encode_handshake_records(Tail, ConnectionStates, MSS, Recs);
+
+encode_handshake_records([{Version, Epoch, {MsgType, MsgSeq, Bin}}|Tail], CS0, MSS, Recs0 = {Buf0, _}) ->
+ Space = MSS - iolist_size(Buf0),
+ Len = byte_size(Bin),
+ {Encoded, CS} =
+ encode_handshake_record(Version, Epoch, Space, MsgType, MsgSeq, Len, Bin, 0, MSS, [], CS0),
+ Recs = append_pack_records(Encoded, MSS, Recs0),
+ encode_handshake_records(Tail, CS, MSS, Recs).
+
+%% TODO: move to dtls_handshake????
+encode_handshake_record(_Version, _Epoch, _Space, _MsgType, _MsgSeq, _Len, <<>>, _Offset, _MRS, Encoded, CS)
+ when length(Encoded) > 0 ->
+ %% make sure we encode at least one segment (for empty messages like Server Hello Done
+ {lists:reverse(Encoded), CS};
+
+encode_handshake_record(Version, Epoch, Space, MsgType, MsgSeq, Len, Bin,
+ Offset, MRS, Encoded0, CS0) ->
+ MaxFragmentLen = Space - 25,
+ case Bin of
+ <<BinFragment:MaxFragmentLen/bytes, Rest/binary>> ->
+ ok;
+ _ ->
+ BinFragment = Bin,
+ Rest = <<>>
+ end,
+ FragLength = byte_size(BinFragment),
+ Frag = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragLength), BinFragment],
+ %% TODO Real solution, now avoid dialyzer error {Encoded, CS} = ssl_record:encode_handshake({Epoch, Frag}, Version, CS0),
+ {Encoded, CS} = ssl_record:encode_handshake(Frag, Version, CS0),
+ encode_handshake_record(Version, Epoch, MRS, MsgType, MsgSeq, Len, Rest, Offset + FragLength, MRS, [Encoded|Encoded0], CS).
+
+init_pack_records() ->
+ {[], []}.
+
+append_pack_records([], MSS, Recs = {Buf0, Acc0}) ->
+ Remaining = MSS - iolist_size(Buf0),
+ if Remaining < 12 ->
+ {[], [lists:reverse(Buf0)|Acc0]};
+ true ->
+ Recs
end;
-
-next_state(_, StateName, #ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, State0) ->
- %% Simplify for now to avoid dialzer warnings before implementation is compleate
- %% case read_application_data(Data, State0) of
- %% Stop = {stop,_,_} ->
- %% Stop;
- %% {Record, State} ->
- %% next_state(StateName, StateName, Record, State)
- %% end;
- {Record, State} = read_application_data(Data, State0),
- next_state(StateName, StateName, Record, State);
-
-next_state(Current, Next, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = <<1>>} =
- _ChangeCipher,
- #state{connection_states = ConnectionStates0} = State0) ->
- ConnectionStates1 =
- ssl_record:activate_pending_connection_state(ConnectionStates0, read),
- {Record, State} = next_record(State0#state{connection_states = ConnectionStates1}),
- next_state(Current, Next, Record, State);
-next_state(Current, Next, #ssl_tls{type = _Unknown}, State0) ->
- %% Ignore unknown type
- {Record, State} = next_record(State0),
- next_state(Current, Next, Record, State).
-
-handle_dtls_handshake(Handle, StateName,
- #state{protocol_buffers =
- #protocol_buffers{dtls_packets = [Packet]} = Buffers} = State) ->
- FsmReturn = {next_state, StateName, State#state{protocol_buffers =
- Buffers#protocol_buffers{dtls_packets = []}}},
- Handle(Packet, FsmReturn);
-
-handle_dtls_handshake(Handle, StateName,
- #state{protocol_buffers =
- #protocol_buffers{dtls_packets = [Packet | Packets]} = Buffers} =
- State0) ->
- FsmReturn = {next_state, StateName, State0#state{protocol_buffers =
- Buffers#protocol_buffers{dtls_packets =
- Packets}}},
- case Handle(Packet, FsmReturn) of
- {next_state, NextStateName, State, _Timeout} ->
- handle_dtls_handshake(Handle, NextStateName, State);
- {stop, _,_} = Stop ->
- Stop
+append_pack_records([Head|Tail], MSS, {Buf0, Acc0}) ->
+ TotLen = iolist_size(Buf0) + iolist_size(Head),
+ if TotLen > MSS ->
+ append_pack_records(Tail, MSS, {[Head], [lists:reverse(Buf0)|Acc0]});
+ true ->
+ append_pack_records(Tail, MSS, {[Head|Buf0], Acc0})
end.
+finish_pack_records({[], Acc}) ->
+ lists:reverse(Acc);
+finish_pack_records({Buf, Acc}) ->
+ lists:reverse([lists:reverse(Buf)|Acc]).
-send_flight(Fragments, #state{transport_cb = Transport, socket = Socket,
- protocol_buffers = _PBuffers} = State) ->
- Transport:send(Socket, Fragments),
- %% Start retransmission
- %% State#state{protocol_buffers =
- %% (PBuffers#protocol_buffers){ #flight{state = waiting}}}}.
- State.
-
-handle_own_alert(_,_,_, State) -> %% Place holder
- {stop, {shutdown, own_alert}, State}.
-
-handle_normal_shutdown(_, _, _State) -> %% Place holder
- ok.
-
-encode_change_cipher(#change_cipher_spec{}, Version, ConnectionStates) ->
- dtls_record:encode_change_cipher_spec(Version, ConnectionStates).
+%% decode_alerts(Bin) ->
+%% ssl_alert:decode(Bin).
initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User,
{CbModule, DataTag, CloseTag, ErrorTag}) ->
- ConnectionStates = ssl_record:init_connection_states(Role),
+ #ssl_options{beast_mitigation = BeastMitigation} = SSLOptions,
+ ConnectionStates = ssl_record:init_connection_states(Role, BeastMitigation),
SessionCacheCb = case application:get_env(ssl, session_cb) of
{ok, Cb} when is_atom(Cb) ->
@@ -514,21 +497,139 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User,
renegotiation = {false, first},
allow_renegotiate = SSLOptions#ssl_options.client_renegotiation,
start_or_recv_from = undefined,
- send_queue = queue:new(),
protocol_cb = ?MODULE
}.
+
+next_tls_record(Data, #state{protocol_buffers = #protocol_buffers{
+ dtls_record_buffer = Buf0,
+ dtls_cipher_texts = CT0} = Buffers} = State0) ->
+ case dtls_record:get_dtls_records(Data, Buf0) of
+ {Records, Buf1} ->
+ CT1 = CT0 ++ Records,
+ next_record(State0#state{protocol_buffers =
+ Buffers#protocol_buffers{dtls_record_buffer = Buf1,
+ dtls_cipher_texts = CT1}});
+
+ #alert{} = Alert ->
+ Alert
+ end.
+
+next_record(#state{%%flight = #flight{state = finished},
+ protocol_buffers =
+ #protocol_buffers{dtls_packets = [], dtls_cipher_texts = [CT | Rest]}
+ = Buffers,
+ connection_states = ConnStates0} = State) ->
+ case dtls_record:decode_cipher_text(CT, ConnStates0) of
+ {Plain, ConnStates} ->
+ {Plain, State#state{protocol_buffers =
+ Buffers#protocol_buffers{dtls_cipher_texts = Rest},
+ connection_states = ConnStates}};
+ #alert{} = Alert ->
+ {Alert, State}
+ end;
+next_record(#state{socket = Socket,
+ transport_cb = Transport} = State) -> %% when FlightState =/= finished
+ ssl_socket:setopts(Transport, Socket, [{active,once}]),
+ {no_record, State};
+next_record(State) ->
+ {no_record, State}.
+
+next_record_if_active(State =
+ #state{socket_options =
+ #socket_options{active = false}}) ->
+ {no_record ,State};
+
+next_record_if_active(State) ->
+ next_record(State).
+
+passive_receive(State0 = #state{user_data_buffer = Buffer}, StateName) ->
+ case Buffer of
+ <<>> ->
+ {Record, State} = next_record(State0),
+ next_event(StateName, Record, State);
+ _ ->
+ {Record, State} = read_application_data(<<>>, State0),
+ next_event(StateName, Record, State)
+ end.
+
+next_event(StateName, Record, State) ->
+ next_event(StateName, Record, State, []).
+
+next_event(connection = StateName, no_record, State0, Actions) ->
+ case next_record_if_active(State0) of
+ {no_record, State} ->
+ ssl_connection:hibernate_after(StateName, State, Actions);
+ {#ssl_tls{} = Record, State} ->
+ {next_state, StateName, State, [{next_event, internal, {dtls_record, Record}} | Actions]};
+ {#alert{} = Alert, State} ->
+ {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
+ end;
+next_event(StateName, Record, State, Actions) ->
+ case Record of
+ no_record ->
+ {next_state, StateName, State, Actions};
+ #ssl_tls{} = Record ->
+ {next_state, StateName, State, [{next_event, internal, {dtls_record, Record}} | Actions]};
+ #alert{} = Alert ->
+ {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
+ end.
+
read_application_data(_,State) ->
{#ssl_tls{fragment = <<"place holder">>}, State}.
-
-next_tls_record(_, State) ->
- {#ssl_tls{fragment = <<"place holder">>}, State}.
-get_timeout(_) -> %% Place holder
- infinity.
+handle_own_alert(_,_,_, State) -> %% Place holder
+ {stop, {shutdown, own_alert}, State}.
-next_state_connection(_, State) -> %% Place holder
- {next_state, connection, State, get_timeout(State)}.
+handle_normal_shutdown(_, _, _State) -> %% Place holder
+ ok.
-sequence(_) ->
- %%TODO real imp
- 1.
+%% TODO This generates dialyzer warnings, has to be handled differently.
+%% handle_packet(Address, Port, Packet) ->
+%% try dtls_record:get_dtls_records(Packet, <<>>) of
+%% %% expect client hello
+%% {[#ssl_tls{type = ?HANDSHAKE, version = {254, _}} = Record], <<>>} ->
+%% handle_dtls_client_hello(Address, Port, Record);
+%% _Other ->
+%% {error, not_dtls}
+%% catch
+%% _Class:_Error ->
+%% {error, not_dtls}
+%% end.
+
+%% handle_dtls_client_hello(Address, Port,
+%% #ssl_tls{epoch = Epoch, sequence_number = Seq,
+%% version = Version} = Record) ->
+%% {[{Hello, _}], _} =
+%% dtls_handshake:get_dtls_handshake(Record,
+%% dtls_handshake:dtls_handshake_new_flight(undefined)),
+%% #client_hello{client_version = {Major, Minor},
+%% random = Random,
+%% session_id = SessionId,
+%% cipher_suites = CipherSuites,
+%% compression_methods = CompressionMethods} = Hello,
+%% CookieData = [address_to_bin(Address, Port),
+%% <<?BYTE(Major), ?BYTE(Minor)>>,
+%% Random, SessionId, CipherSuites, CompressionMethods],
+%% Cookie = crypto:hmac(sha, <<"secret">>, CookieData),
+
+%% case Hello of
+%% #client_hello{cookie = Cookie} ->
+%% accept;
+
+%% _ ->
+%% %% generate HelloVerifyRequest
+%% {RequestFragment, _} = dtls_handshake:encode_handshake(
+%% dtls_handshake:hello_verify_request(Cookie),
+%% Version, 0),
+%% HelloVerifyRequest =
+%% dtls_record:encode_tls_cipher_text(?HANDSHAKE, Version, Epoch, Seq, RequestFragment),
+%% {reply, HelloVerifyRequest}
+%% end.
+
+%% address_to_bin({A,B,C,D}, Port) ->
+%% <<0:80,16#ffff:16,A,B,C,D,Port:16>>;
+%% address_to_bin({A,B,C,D,E,F,G,H}, Port) ->
+%% <<A:16,B:16,C:16,D:16,E:16,F:16,G:16,H:16,Port:16>>.
+
+sequence(#connection_states{dtls_write_msg_seq = Seq} = CS) ->
+ {Seq, CS#connection_states{dtls_write_msg_seq = Seq + 1}}.
diff --git a/lib/ssl/src/dtls_connection.hrl b/lib/ssl/src/dtls_connection.hrl
index b74801b50a..ee3daa3c14 100644
--- a/lib/ssl/src/dtls_connection.hrl
+++ b/lib/ssl/src/dtls_connection.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@
-record(protocol_buffers, {
dtls_packets = [], %%::[binary()], % Not yet handled decode ssl/tls packets.
dtls_record_buffer = <<>>, %%:: binary(), % Buffer of incomplete records
+ dtls_fragment_state, %%:: [], % DTLS fragments
dtls_handshake_buffer = <<>>, %%:: binary(), % Buffer of incomplete handshakes
dtls_cipher_texts = [], %%:: [binary()],
dtls_cipher_texts_next %%:: [binary()] % Received for Epoch not yet active
diff --git a/lib/ssl/src/dtls_connection_sup.erl b/lib/ssl/src/dtls_connection_sup.erl
index cf50537869..dc7601a684 100644
--- a/lib/ssl/src/dtls_connection_sup.erl
+++ b/lib/ssl/src/dtls_connection_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/dtls_handshake.erl b/lib/ssl/src/dtls_handshake.erl
index 50c84b712f..5a799cf441 100644
--- a/lib/ssl/src/dtls_handshake.erl
+++ b/lib/ssl/src/dtls_handshake.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,8 +24,8 @@
-include("ssl_alert.hrl").
-export([client_hello/8, client_hello/9, hello/4,
- get_dtls_handshake/2,
- %%dtls_handshake_new_flight/1, dtls_handshake_new_epoch/1,
+ hello_verify_request/1, get_dtls_handshake/2,
+ dtls_handshake_new_flight/1, dtls_handshake_new_epoch/1,
encode_handshake/3]).
-type dtls_handshake() :: #client_hello{} | #hello_verify_request{} |
@@ -92,96 +92,135 @@ hello(#server_hello{server_version = Version, random = Random,
?ALERT_REC(?FATAL, ?PROTOCOL_VERSION)
end;
-hello(#client_hello{client_version = ClientVersion}, _Options, {_,_,_,_,ConnectionStates,_}, _Renegotiation) ->
- %% Return correct typ to make dialyzer happy until we have time to make the real imp.
- HashSigns = tls_v1:default_signature_algs(dtls_v1:corresponding_tls_version(ClientVersion)),
- {ClientVersion, {new, #session{}}, ConnectionStates, #hello_extensions{},
- %% Placeholder for real hasign handling
- hd(HashSigns)}.
-
-%% hello(Address, Port,
-%% #ssl_tls{epoch = _Epoch, sequence_number = _Seq,
-%% version = Version} = Record) ->
-%% case get_dtls_handshake(Record,
-%% dtls_handshake_new_flight(undefined)) of
-%% {[Hello | _], _} ->
-%% hello(Address, Port, Version, Hello);
-%% {retransmit, HandshakeState} ->
-%% {retransmit, HandshakeState}
-%% end.
-
-%% hello(Address, Port, Version, Hello) ->
-%% #client_hello{client_version = {Major, Minor},
-%% random = Random,
-%% session_id = SessionId,
-%% cipher_suites = CipherSuites,
-%% compression_methods = CompressionMethods} = Hello,
-%% CookieData = [address_to_bin(Address, Port),
-%% <<?BYTE(Major), ?BYTE(Minor)>>,
-%% Random, SessionId, CipherSuites, CompressionMethods],
-%% Cookie = crypto:hmac(sha, <<"secret">>, CookieData),
-
-%% case Hello of
-%% #client_hello{cookie = Cookie} ->
-%% accept;
-%% _ ->
-%% %% generate HelloVerifyRequest
-%% HelloVerifyRequest = enc_hs(#hello_verify_request{protocol_version = Version,
-%% cookie = Cookie},
-%% Version, 0, 1400),
-%% {reply, HelloVerifyRequest}
-%% end.
+hello(#client_hello{client_version = ClientVersion} = Hello,
+ #ssl_options{versions = Versions} = SslOpts,
+ Info, Renegotiation) ->
+ Version = ssl_handshake:select_version(dtls_record, ClientVersion, Versions),
+ %%
+ %% TODO: handle Cipher Fallback
+ %%
+ handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation).
+
+-spec hello_verify_request(binary()) -> #hello_verify_request{}.
+%%
+%% Description: Creates a hello verify request message sent by server to
+%% verify client
+%%--------------------------------------------------------------------
+hello_verify_request(Cookie) ->
+ %% TODO: DTLS Versions?????
+ #hello_verify_request{protocol_version = {254, 255}, cookie = Cookie}.
+
+%%--------------------------------------------------------------------
%% %%--------------------------------------------------------------------
encode_handshake(Handshake, Version, MsgSeq) ->
{MsgType, Bin} = enc_handshake(Handshake, Version),
Len = byte_size(Bin),
- EncHandshake = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(0), ?uint24(Len), Bin],
- FragmentedHandshake = dtls_fragment(erlang:iolist_size(EncHandshake), MsgType, Len, MsgSeq, Bin, 0, []),
- {EncHandshake, FragmentedHandshake}.
+ Enc = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(0), ?uint24(Len), Bin],
+ Frag = {MsgType, MsgSeq, Bin},
+ {Enc, Frag}.
%%--------------------------------------------------------------------
--spec get_dtls_handshake(#ssl_tls{}, #dtls_hs_state{} | binary()) ->
+-spec get_dtls_handshake(#ssl_tls{}, #dtls_hs_state{} | undefined) ->
{[dtls_handshake()], #dtls_hs_state{}} | {retransmit, #dtls_hs_state{}}.
%%
%% Description: Given a DTLS state and new data from ssl_record, collects
%% and returns it as a list of handshake messages, also returns a new
%% DTLS state
%%--------------------------------------------------------------------
-get_dtls_handshake(Record, <<>>) ->
- get_dtls_handshake_aux(Record, #dtls_hs_state{}); %% Init handshake state!?
-get_dtls_handshake(Record, HsState) ->
- get_dtls_handshake_aux(Record, HsState).
+get_dtls_handshake(Records, undefined) ->
+ HsState = #dtls_hs_state{highest_record_seq = 0,
+ starting_read_seq = 0,
+ fragments = gb_trees:empty(),
+ completed = []},
+ get_dtls_handshake(Records, HsState);
+get_dtls_handshake(Records, HsState0) when is_list(Records) ->
+ HsState1 = lists:foldr(fun get_dtls_handshake_aux/2, HsState0, Records),
+ get_dtls_handshake_completed(HsState1);
+get_dtls_handshake(Record, HsState0) when is_record(Record, ssl_tls) ->
+ HsState1 = get_dtls_handshake_aux(Record, HsState0),
+ get_dtls_handshake_completed(HsState1).
-%% %%--------------------------------------------------------------------
-%% -spec dtls_handshake_new_epoch(#dtls_hs_state{}) -> #dtls_hs_state{}.
-%% %%
-%% %% Description: Reset the DTLS decoder state for a new Epoch
-%% %%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
+-spec dtls_handshake_new_epoch(#dtls_hs_state{}) -> #dtls_hs_state{}.
+%%
+%% Description: Reset the DTLS decoder state for a new Epoch
+%%--------------------------------------------------------------------
%% dtls_handshake_new_epoch(<<>>) ->
%% dtls_hs_state_init();
-%% dtls_handshake_new_epoch(HsState) ->
-%% HsState#dtls_hs_state{highest_record_seq = 0,
-%% starting_read_seq = HsState#dtls_hs_state.current_read_seq,
-%% fragments = gb_trees:empty(), completed = []}.
-
-%% %--------------------------------------------------------------------
-%% -spec dtls_handshake_new_flight(integer() | undefined) -> #dtls_hs_state{}.
-%% %
-%% % Description: Init the DTLS decoder state for a new Flight
-%% dtls_handshake_new_flight(ExpectedReadReq) ->
-%% #dtls_hs_state{current_read_seq = ExpectedReadReq,
-%% highest_record_seq = 0,
-%% starting_read_seq = 0,
-%% fragments = gb_trees:empty(), completed = []}.
+dtls_handshake_new_epoch(HsState) ->
+ HsState#dtls_hs_state{highest_record_seq = 0,
+ starting_read_seq = HsState#dtls_hs_state.current_read_seq,
+ fragments = gb_trees:empty(), completed = []}.
+
+%--------------------------------------------------------------------
+-spec dtls_handshake_new_flight(integer() | undefined) -> #dtls_hs_state{}.
+%
+% Description: Init the DTLS decoder state for a new Flight
+dtls_handshake_new_flight(ExpectedReadReq) ->
+ #dtls_hs_state{current_read_seq = ExpectedReadReq,
+ highest_record_seq = 0,
+ starting_read_seq = 0,
+ fragments = gb_trees:empty(), completed = []}.
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+handle_client_hello(Version, #client_hello{session_id = SugesstedId,
+ cipher_suites = CipherSuites,
+ compression_methods = Compressions,
+ random = Random,
+ extensions = #hello_extensions{elliptic_curves = Curves,
+ signature_algs = ClientHashSigns} = HelloExt},
+ #ssl_options{versions = Versions,
+ signature_algs = SupportedHashSigns} = SslOpts,
+ {Port, Session0, Cache, CacheCb, ConnectionStates0, Cert, _}, Renegotiation) ->
+ case dtls_record:is_acceptable_version(Version, Versions) of
+ true ->
+ AvailableHashSigns = ssl_handshake:available_signature_algs(
+ ClientHashSigns, SupportedHashSigns, Cert,
+ dtls_v1:corresponding_tls_version(Version)),
+ ECCCurve = ssl_handshake:select_curve(Curves, ssl_handshake:supported_ecc(Version)),
+ {Type, #session{cipher_suite = CipherSuite} = Session1}
+ = ssl_handshake:select_session(SugesstedId, CipherSuites, AvailableHashSigns, Compressions,
+ Port, Session0#session{ecc = ECCCurve}, Version,
+ SslOpts, Cache, CacheCb, Cert),
+ case CipherSuite of
+ no_suite ->
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY);
+ _ ->
+ {KeyExAlg,_,_,_} = ssl_cipher:suite_definition(CipherSuite),
+ case ssl_handshake:select_hashsign(ClientHashSigns, Cert, KeyExAlg, SupportedHashSigns, Version) of
+ #alert{} = Alert ->
+ Alert;
+ HashSign ->
+ handle_client_hello_extensions(Version, Type, Random, CipherSuites, HelloExt,
+ SslOpts, Session1, ConnectionStates0,
+ Renegotiation, HashSign)
+ end
+ end;
+ false ->
+ ?ALERT_REC(?FATAL, ?PROTOCOL_VERSION)
+ end.
+
+handle_client_hello_extensions(Version, Type, Random, CipherSuites,
+ HelloExt, SslOpts, Session0, ConnectionStates0, Renegotiation, HashSign) ->
+ try ssl_handshake:handle_client_hello_extensions(dtls_record, Random, CipherSuites,
+ HelloExt, dtls_v1:corresponding_tls_version(Version),
+ SslOpts, Session0, ConnectionStates0, Renegotiation) of
+ #alert{} = Alert ->
+ Alert;
+ {Session, ConnectionStates, Protocol, ServerHelloExt} ->
+ {Version, {Type, Session}, ConnectionStates, Protocol, ServerHelloExt, HashSign}
+ catch throw:Alert ->
+ Alert
+ end.
+
handle_server_hello_extensions(Version, SessionId, Random, CipherSuite,
Compression, HelloExt, SslOpt, ConnectionStates0, Renegotiation) ->
case ssl_handshake:handle_server_hello_extensions(dtls_record, Random, CipherSuite,
- Compression, HelloExt, Version,
+ Compression, HelloExt,
+ dtls_v1:corresponding_tls_version(Version),
SslOpt, ConnectionStates0, Renegotiation) of
#alert{} = Alert ->
Alert;
@@ -189,16 +228,8 @@ handle_server_hello_extensions(Version, SessionId, Random, CipherSuite,
{Version, SessionId, ConnectionStates, ProtoExt, Protocol}
end.
-dtls_fragment(Mss, MsgType, Len, MsgSeq, Bin, Offset, Acc)
- when byte_size(Bin) + 12 < Mss ->
- FragmentLen = byte_size(Bin),
- BinMsg = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragmentLen), Bin],
- lists:reverse([BinMsg|Acc]);
-dtls_fragment(Mss, MsgType, Len, MsgSeq, Bin, Offset, Acc) ->
- FragmentLen = Mss - 12,
- <<Fragment:FragmentLen/bytes, Rest/binary>> = Bin,
- BinMsg = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragmentLen), Fragment],
- dtls_fragment(Mss, MsgType, Len, MsgSeq, Rest, Offset + FragmentLen, [BinMsg|Acc]).
+get_dtls_handshake_completed(HsState = #dtls_hs_state{completed = Completed}) ->
+ {lists:reverse(Completed), HsState#dtls_hs_state{completed = []}}.
get_dtls_handshake_aux(#ssl_tls{version = Version,
sequence_number = SeqNo,
@@ -214,25 +245,18 @@ get_dtls_handshake_aux(Version, SeqNo,
case reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq,
FragmentOffset, FragmentLength,
Body, HsState0) of
- {retransmit, HsState1} ->
- case Rest of
- <<>> ->
- {retransmit, HsState1};
- _ ->
- get_dtls_handshake_aux(Version, SeqNo, Rest, HsState1)
- end;
{HsState1, HighestSeqNo, MsgBody} ->
HsState2 = dec_dtls_fragment(Version, HighestSeqNo, Type, Length, MessageSeq, MsgBody, HsState1),
HsState3 = process_dtls_fragments(Version, HsState2),
get_dtls_handshake_aux(Version, SeqNo, Rest, HsState3);
+
HsState2 ->
HsState3 = process_dtls_fragments(Version, HsState2),
get_dtls_handshake_aux(Version, SeqNo, Rest, HsState3)
end;
get_dtls_handshake_aux(_Version, _SeqNo, <<>>, HsState) ->
- {lists:reverse(HsState#dtls_hs_state.completed),
- HsState#dtls_hs_state{completed = []}}.
+ HsState.
dec_dtls_fragment(Version, SeqNo, Type, Length, MessageSeq, MsgBody,
HsState = #dtls_hs_state{highest_record_seq = HighestSeqNo, completed = Acc}) ->
@@ -299,12 +323,6 @@ reassemble_dtls_fragment(SeqNo, _Type, Length, MessageSeq, 0, Length,
{HsState, SeqNo, Body};
reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, 0, Length,
- _Body, HsState =
- #dtls_hs_state{current_read_seq = CurrentReadSeq})
- when MessageSeq < CurrentReadSeq ->
- {retransmit, HsState};
-
-reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, 0, Length,
_Body, HsState = #dtls_hs_state{current_read_seq = CurrentReadSeq})
when MessageSeq < CurrentReadSeq ->
HsState;
@@ -419,6 +437,8 @@ enc_handshake(#hello_verify_request{protocol_version = {Major, Minor},
?BYTE(CookieLength),
Cookie/binary>>};
+enc_handshake(#hello_request{}, _Version) ->
+ {?HELLO_REQUEST, <<>>};
enc_handshake(#client_hello{client_version = {Major, Minor},
random = Random,
session_id = SessionID,
diff --git a/lib/ssl/src/dtls_handshake.hrl b/lib/ssl/src/dtls_handshake.hrl
index be32112120..0298fd3105 100644
--- a/lib/ssl/src/dtls_handshake.hrl
+++ b/lib/ssl/src/dtls_handshake.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/dtls_record.erl b/lib/ssl/src/dtls_record.erl
index 2530d66052..5387fcafa8 100644
--- a/lib/ssl/src/dtls_record.erl
+++ b/lib/ssl/src/dtls_record.erl
@@ -36,11 +36,12 @@
-export([decode_cipher_text/2]).
%% Encoding
--export([encode_plain_text/4, encode_handshake/3, encode_change_cipher_spec/2]).
+-export([encode_plain_text/4, encode_tls_cipher_text/5, encode_change_cipher_spec/2]).
%% Protocol version handling
--export([protocol_version/1, lowest_protocol_version/2,
- highest_protocol_version/1, supported_protocol_versions/0,
+-export([protocol_version/1, lowest_protocol_version/1, lowest_protocol_version/2,
+ highest_protocol_version/1, highest_protocol_version/2,
+ is_higher/2, supported_protocol_versions/0,
is_acceptable_version/2]).
%% DTLS Epoch handling
@@ -208,14 +209,6 @@ decode_cipher_text(#ssl_tls{type = Type, version = Version,
false ->
?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
end.
-%%--------------------------------------------------------------------
--spec encode_handshake(iolist(), dtls_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
-%%
-%% Description: Encodes a handshake message to send on the ssl-socket.
-%%--------------------------------------------------------------------
-encode_handshake(Frag, Version, ConnectionStates) ->
- encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates).
%%--------------------------------------------------------------------
-spec encode_change_cipher_spec(dtls_version(), #connection_states{}) ->
@@ -254,25 +247,56 @@ lowest_protocol_version(Version = {M,_}, {N, _}) when M > N ->
Version;
lowest_protocol_version(_,Version) ->
Version.
+
+%%--------------------------------------------------------------------
+-spec lowest_protocol_version([dtls_version()]) -> dtls_version().
+%%
+%% Description: Lowest protocol version present in a list
+%%--------------------------------------------------------------------
+lowest_protocol_version([]) ->
+ lowest_protocol_version();
+lowest_protocol_version(Versions) ->
+ [Ver | Vers] = Versions,
+ lowest_list_protocol_version(Ver, Vers).
+
%%--------------------------------------------------------------------
-spec highest_protocol_version([dtls_version()]) -> dtls_version().
%%
%% Description: Highest protocol version present in a list
%%--------------------------------------------------------------------
-highest_protocol_version([Ver | Vers]) ->
- highest_protocol_version(Ver, Vers).
+highest_protocol_version([]) ->
+ highest_protocol_version();
+highest_protocol_version(Versions) ->
+ [Ver | Vers] = Versions,
+ highest_list_protocol_version(Ver, Vers).
-highest_protocol_version(Version, []) ->
+%%--------------------------------------------------------------------
+-spec highest_protocol_version(dtls_version(), dtls_version()) -> dtls_version().
+%%
+%% Description: Highest protocol version of two given versions
+%%--------------------------------------------------------------------
+highest_protocol_version(Version = {M, N}, {M, O}) when N < O ->
+ Version;
+highest_protocol_version({M, _},
+ Version = {M, _}) ->
Version;
-highest_protocol_version(Version = {N, M}, [{N, O} | Rest]) when M < O ->
- highest_protocol_version(Version, Rest);
-highest_protocol_version({M, _}, [Version = {M, _} | Rest]) ->
- highest_protocol_version(Version, Rest);
-highest_protocol_version(Version = {M,_}, [{N,_} | Rest]) when M < N ->
- highest_protocol_version(Version, Rest);
-highest_protocol_version(_, [Version | Rest]) ->
- highest_protocol_version(Version, Rest).
+highest_protocol_version(Version = {M,_},
+ {N, _}) when M < N ->
+ Version;
+highest_protocol_version(_,Version) ->
+ Version.
+%%--------------------------------------------------------------------
+-spec is_higher(V1 :: dtls_version(), V2::dtls_version()) -> boolean().
+%%
+%% Description: Is V1 > V2
+%%--------------------------------------------------------------------
+is_higher({M, N}, {M, O}) when N < O ->
+ true;
+is_higher({M, _}, {N, _}) when M < N ->
+ true;
+is_higher(_, _) ->
+ false.
%%--------------------------------------------------------------------
-spec supported_protocol_versions() -> [dtls_version()].
@@ -289,21 +313,33 @@ supported_protocol_versions() ->
{ok, []} ->
lists:map(Fun, supported_protocol_versions([]));
{ok, Vsns} when is_list(Vsns) ->
- supported_protocol_versions(Vsns);
+ supported_protocol_versions(lists:map(Fun, Vsns));
{ok, Vsn} ->
- supported_protocol_versions([Vsn])
+ supported_protocol_versions([Fun(Vsn)])
end.
supported_protocol_versions([]) ->
- Vsns = supported_connection_protocol_versions([]),
+ Vsns = case sufficient_dtlsv1_2_crypto_support() of
+ true ->
+ ?ALL_DATAGRAM_SUPPORTED_VERSIONS;
+ false ->
+ ?MIN_DATAGRAM_SUPPORTED_VERSIONS
+ end,
application:set_env(ssl, dtls_protocol_version, Vsns),
Vsns;
supported_protocol_versions([_|_] = Vsns) ->
- Vsns.
-
-supported_connection_protocol_versions([]) ->
- ?ALL_DATAGRAM_SUPPORTED_VERSIONS.
+ case sufficient_dtlsv1_2_crypto_support() of
+ true ->
+ Vsns;
+ false ->
+ case Vsns -- ['dtlsv1.2'] of
+ [] ->
+ ?MIN_SUPPORTED_VERSIONS;
+ NewVsns ->
+ NewVsns
+ end
+ end.
%%--------------------------------------------------------------------
-spec is_acceptable_version(dtls_version(), Supported :: [dtls_version()]) -> boolean().
@@ -401,6 +437,18 @@ set_connection_state_by_epoch(ConnectionStates0 =
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+
+
+lowest_list_protocol_version(Ver, []) ->
+ Ver;
+lowest_list_protocol_version(Ver1, [Ver2 | Rest]) ->
+ lowest_list_protocol_version(lowest_protocol_version(Ver1, Ver2), Rest).
+
+highest_list_protocol_version(Ver, []) ->
+ Ver;
+highest_list_protocol_version(Ver1, [Ver2 | Rest]) ->
+ highest_list_protocol_version(highest_protocol_version(Ver1, Ver2), Rest).
+
encode_tls_cipher_text(Type, {MajVer, MinVer}, Epoch, Seq, Fragment) ->
Length = erlang:iolist_size(Fragment),
[<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Epoch),
@@ -414,6 +462,16 @@ calc_mac_hash(#connection_state{mac_secret = MacSecret,
mac_hash(Version, MacAlg, MacSecret, NewSeq, Type,
Length, Fragment).
+highest_protocol_version() ->
+ highest_protocol_version(supported_protocol_versions()).
+
+lowest_protocol_version() ->
+ lowest_protocol_version(supported_protocol_versions()).
+
+sufficient_dtlsv1_2_crypto_support() ->
+ CryptoSupport = crypto:supports(),
+ proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport)).
+
mac_hash(Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) ->
dtls_v1:mac_hash(Version, MacAlg, MacSecret, SeqNo, Type,
Length, Fragment).
diff --git a/lib/ssl/src/dtls_record.hrl b/lib/ssl/src/dtls_record.hrl
index ab59a5fea1..b9f84cbe7f 100644
--- a/lib/ssl/src/dtls_record.hrl
+++ b/lib/ssl/src/dtls_record.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/dtls_v1.erl b/lib/ssl/src/dtls_v1.erl
index 99cedd2adc..8c03bda513 100644
--- a/lib/ssl/src/dtls_v1.erl
+++ b/lib/ssl/src/dtls_v1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/inet_tls_dist.erl b/lib/ssl/src/inet_tls_dist.erl
index ec26142a75..0da4b3587f 100644
--- a/lib/ssl/src/inet_tls_dist.erl
+++ b/lib/ssl/src/inet_tls_dist.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -87,7 +87,8 @@ do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
case inet:getaddr(Address, Driver:family()) of
{ok, Ip} ->
Timer = dist_util:start_timer(SetupTime),
- case erl_epmd:port_please(Name, Ip) of
+ ErlEpmd = net_kernel:epmd_module(),
+ case ErlEpmd:port_please(Name, Ip) of
{port, TcpPort, Version} ->
?trace("port_please(~p) -> version ~p~n",
[Node,Version]),
diff --git a/lib/ssl/src/ssl.app.src b/lib/ssl/src/ssl.app.src
index 1a2bf90ccf..b26efbd88f 100644
--- a/lib/ssl/src/ssl.app.src
+++ b/lib/ssl/src/ssl.app.src
@@ -44,6 +44,7 @@
ssl_crl,
ssl_crl_cache,
ssl_crl_cache_api,
+ ssl_crl_hash_dir,
%% App structure
ssl_app,
ssl_sup,
@@ -54,7 +55,7 @@
{applications, [crypto, public_key, kernel, stdlib]},
{env, []},
{mod, {ssl_app, []}},
- {runtime_dependencies, ["stdlib-2.0","public_key-1.0","kernel-3.0",
+ {runtime_dependencies, ["stdlib-3.0","public_key-1.2","kernel-3.0",
"erts-7.0","crypto-3.3", "inets-5.10.7"]}]}.
diff --git a/lib/ssl/src/ssl.appup.src b/lib/ssl/src/ssl.appup.src
index 203a4f7d10..b6a6b00565 100644
--- a/lib/ssl/src/ssl.appup.src
+++ b/lib/ssl/src/ssl.appup.src
@@ -1,9 +1,6 @@
%% -*- erlang -*-
{"%VSN%",
[
- {<<"^7[.]3[.]3$">>,
- [{load_module, ssl_handshake, soft_purge, soft_purge, []}
- ]},
{<<"^7[.][^.].*">>, [{restart_application, ssl}]},
{<<"6\\..*">>, [{restart_application, ssl}]},
{<<"5\\..*">>, [{restart_application, ssl}]},
@@ -11,9 +8,6 @@
{<<"3\\..*">>, [{restart_application, ssl}]}
],
[
- {<<"^7[.]3[.]3$">>,
- [{load_module, ssl_handshake, soft_purge, soft_purge, []}
- ]},
{<<"^7[.][^.].*">>, [{restart_application, ssl}]},
{<<"6\\..*">>, [{restart_application, ssl}]},
{<<"5\\..*">>, [{restart_application, ssl}]},
@@ -21,4 +15,3 @@
{<<"3\\..*">>, [{restart_application, ssl}]}
]
}.
-
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index 97a1e2b5a8..d2aeb3258f 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,7 +34,8 @@
listen/2, transport_accept/1, transport_accept/2,
ssl_accept/1, ssl_accept/2, ssl_accept/3,
controlling_process/2, peername/1, peercert/1, sockname/1,
- close/1, close/2, shutdown/2, recv/2, recv/3, send/2, getopts/2, setopts/2
+ close/1, close/2, shutdown/2, recv/2, recv/3, send/2,
+ getopts/2, setopts/2, getstat/1, getstat/2
]).
%% SSL/TLS protocol handling
-export([cipher_suites/0, cipher_suites/1,
@@ -42,7 +43,7 @@
renegotiate/1, prf/5, negotiated_protocol/1, negotiated_next_protocol/1,
connection_information/1, connection_information/2]).
%% Misc
--export([random_bytes/1, handle_options/2]).
+-export([handle_options/2]).
-deprecated({negotiated_next_protocol, 1, next_major_release}).
-deprecated({connection_info, 1, next_major_release}).
@@ -400,24 +401,23 @@ negotiated_next_protocol(Socket) ->
end.
%%--------------------------------------------------------------------
+-spec cipher_suites() -> [ssl_cipher:erl_cipher_suite()] | [string()].
+%%--------------------------------------------------------------------
+cipher_suites() ->
+ cipher_suites(erlang).
+%%--------------------------------------------------------------------
-spec cipher_suites(erlang | openssl | all) -> [ssl_cipher:erl_cipher_suite()] |
[string()].
%% Description: Returns all supported cipher suites.
%%--------------------------------------------------------------------
cipher_suites(erlang) ->
- Version = tls_record:highest_protocol_version([]),
- ssl_cipher:filter_suites([ssl_cipher:erl_suite_definition(S)
- || S <- ssl_cipher:suites(Version)]);
+ [ssl_cipher:erl_suite_definition(Suite) || Suite <- available_suites(default)];
+
cipher_suites(openssl) ->
- Version = tls_record:highest_protocol_version([]),
- [ssl_cipher:openssl_suite_name(S)
- || S <- ssl_cipher:filter_suites(ssl_cipher:suites(Version))];
+ [ssl_cipher:openssl_suite_name(Suite) || Suite <- available_suites(default)];
+
cipher_suites(all) ->
- Version = tls_record:highest_protocol_version([]),
- ssl_cipher:filter_suites([ssl_cipher:erl_suite_definition(S)
- || S <-ssl_cipher:all_suites(Version)]).
-cipher_suites() ->
- cipher_suites(erlang).
+ [ssl_cipher:erl_suite_definition(Suite) || Suite <- available_suites(all)].
%%--------------------------------------------------------------------
-spec getopts(#sslsocket{}, [gen_tcp:option_name()]) ->
@@ -470,6 +470,32 @@ setopts(#sslsocket{}, Options) ->
{error, {options,{not_a_proplist, Options}}}.
%%---------------------------------------------------------------
+-spec getstat(Socket) ->
+ {ok, OptionValues} | {error, inet:posix()} when
+ Socket :: #sslsocket{},
+ OptionValues :: [{inet:stat_option(), integer()}].
+%%
+%% Description: Get all statistic options for a socket.
+%%--------------------------------------------------------------------
+getstat(Socket) ->
+ getstat(Socket, inet:stats()).
+
+%%---------------------------------------------------------------
+-spec getstat(Socket, Options) ->
+ {ok, OptionValues} | {error, inet:posix()} when
+ Socket :: #sslsocket{},
+ Options :: [inet:stat_option()],
+ OptionValues :: [{inet:stat_option(), integer()}].
+%%
+%% Description: Get one or more statistic options for a socket.
+%%--------------------------------------------------------------------
+getstat(#sslsocket{pid = {Listen, #config{transport_info = {Transport, _, _, _}}}}, Options) when is_port(Listen), is_list(Options) ->
+ ssl_socket:getstat(Transport, Listen, Options);
+
+getstat(#sslsocket{pid = Pid, fd = {Transport, Socket, _, _}}, Options) when is_pid(Pid), is_list(Options) ->
+ ssl_socket:getstat(Transport, Socket, Options).
+
+%%---------------------------------------------------------------
-spec shutdown(#sslsocket{}, read | write | read_write) -> ok | {error, reason()}.
%%
%% Description: Same as gen_tcp:shutdown/2
@@ -581,25 +607,19 @@ format_error(Error) ->
Other
end.
-%%--------------------------------------------------------------------
--spec random_bytes(integer()) -> binary().
-
-%%
-%% Description: Generates cryptographically secure random sequence if possible
-%% fallbacks on pseudo random function
-%%--------------------------------------------------------------------
-random_bytes(N) ->
- try crypto:strong_rand_bytes(N) of
- RandBytes ->
- RandBytes
- catch
- error:low_entropy ->
- crypto:rand_bytes(N)
- end.
-
%%%--------------------------------------------------------------
%%% Internal functions
%%%--------------------------------------------------------------------
+
+%% Possible filters out suites not supported by crypto
+available_suites(default) ->
+ Version = tls_record:highest_protocol_version([]),
+ ssl_cipher:filter_suites(ssl_cipher:suites(Version));
+
+available_suites(all) ->
+ Version = tls_record:highest_protocol_version([]),
+ ssl_cipher:filter_suites(ssl_cipher:all_suites(Version)).
+
do_connect(Address, Port,
#config{transport_info = CbInfo, inet_user = UserOpts, ssl = SslOpts,
emulated = EmOpts, inet_ssl = SocketOpts, connection_cb = ConnetionCb},
@@ -712,7 +732,7 @@ handle_options(Opts0, Role) ->
default_option_role(server, true, Role),
server, Role),
renegotiate_at = handle_option(renegotiate_at, Opts, ?DEFAULT_RENEGOTIATE_AT),
- hibernate_after = handle_option(hibernate_after, Opts, undefined),
+ hibernate_after = handle_option(hibernate_after, Opts, infinity),
erl_dist = handle_option(erl_dist, Opts, false),
alpn_advertised_protocols =
handle_option(alpn_advertised_protocols, Opts, undefined),
@@ -732,13 +752,15 @@ handle_options(Opts0, Role) ->
server, Role),
protocol = proplists:get_value(protocol, Opts, tls),
padding_check = proplists:get_value(padding_check, Opts, true),
+ beast_mitigation = handle_option(beast_mitigation, Opts, one_n_minus_one),
fallback = handle_option(fallback, Opts,
proplists:get_value(fallback, Opts,
default_option_role(client,
false, Role)),
client, Role),
crl_check = handle_option(crl_check, Opts, false),
- crl_cache = handle_option(crl_cache, Opts, {ssl_crl_cache, {internal, []}})
+ crl_cache = handle_option(crl_cache, Opts, {ssl_crl_cache, {internal, []}}),
+ v2_hello_compatible = handle_option(v2_hello_compatible, Opts, false)
},
CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}),
@@ -753,7 +775,7 @@ handle_options(Opts0, Role) ->
alpn_preferred_protocols, next_protocols_advertised,
client_preferred_next_protocols, log_alert,
server_name_indication, honor_cipher_order, padding_check, crl_check, crl_cache,
- fallback, signature_algs],
+ fallback, signature_algs, beast_mitigation, v2_hello_compatible],
SockOpts = lists:foldl(fun(Key, PropList) ->
proplists:delete(Key, PropList)
@@ -901,10 +923,13 @@ validate_option(client_renegotiation, Value) when is_boolean(Value) ->
validate_option(renegotiate_at, Value) when is_integer(Value) ->
erlang:min(Value, ?DEFAULT_RENEGOTIATE_AT);
-validate_option(hibernate_after, undefined) ->
- undefined;
+validate_option(hibernate_after, undefined) -> %% Backwards compatibility
+ infinity;
+validate_option(hibernate_after, infinity) ->
+ infinity;
validate_option(hibernate_after, Value) when is_integer(Value), Value >= 0 ->
Value;
+
validate_option(erl_dist,Value) when is_boolean(Value) ->
Value;
validate_option(Opt, Value)
@@ -990,6 +1015,12 @@ validate_option(crl_check, Value) when (Value == best_effort) or (Value == peer)
Value;
validate_option(crl_cache, {Cb, {_Handle, Options}} = Value) when is_atom(Cb) and is_list(Options) ->
Value;
+validate_option(beast_mitigation, Value) when Value == one_n_minus_one orelse
+ Value == zero_n orelse
+ Value == disabled ->
+ Value;
+validate_option(v2_hello_compatible, Value) when is_boolean(Value) ->
+ Value;
validate_option(Opt, Value) ->
throw({error, {options, {Opt, Value}}}).
diff --git a/lib/ssl/src/ssl_alert.erl b/lib/ssl/src/ssl_alert.erl
index 3e35e24527..db71b16d80 100644
--- a/lib/ssl/src/ssl_alert.erl
+++ b/lib/ssl/src/ssl_alert.erl
@@ -73,10 +73,14 @@ reason_code(#alert{description = Description}, _) ->
%%
%% Description: Returns the error string for given alert.
%%--------------------------------------------------------------------
-
-alert_txt(#alert{level = Level, description = Description, where = {Mod,Line}}) ->
+alert_txt(#alert{level = Level, description = Description, where = {Mod,Line}, reason = undefined}) ->
Mod ++ ":" ++ integer_to_list(Line) ++ ":" ++
- level_txt(Level) ++" "++ description_txt(Description).
+ level_txt(Level) ++" "++ description_txt(Description);
+alert_txt(#alert{reason = Reason} = Alert) ->
+ BaseTxt = alert_txt(Alert#alert{reason = undefined}),
+ FormatDepth = 9, % Some limit on printed representation of an error
+ ReasonTxt = lists:flatten(io_lib:format("~P", [Reason, FormatDepth])),
+ BaseTxt ++ " - " ++ ReasonTxt.
%%--------------------------------------------------------------------
%%% Internal functions
@@ -85,7 +89,7 @@ alert_txt(#alert{level = Level, description = Description, where = {Mod,Line}})
%% It is very unlikely that an correct implementation will send more than one alert at the time
%% So it there is more than 10 warning alerts we consider it an error
decode(<<?BYTE(Level), ?BYTE(_), _/binary>>, _, N) when Level == ?WARNING, N > ?MAX_ALERTS ->
- ?ALERT_REC(?FATAL, ?DECODE_ERROR);
+ ?ALERT_REC(?FATAL, ?DECODE_ERROR, too_many_remote_alerts);
decode(<<?BYTE(Level), ?BYTE(Description), Rest/binary>>, Acc, N) when Level == ?WARNING ->
Alert = ?ALERT_REC(Level, Description),
decode(Rest, [Alert | Acc], N + 1);
@@ -93,7 +97,7 @@ decode(<<?BYTE(Level), ?BYTE(Description), _Rest/binary>>, Acc, _) when Level ==
Alert = ?ALERT_REC(Level, Description),
lists:reverse([Alert | Acc]); %% No need to decode rest fatal alert will end the connection
decode(<<?BYTE(_Level), _/binary>>, _, _) ->
- ?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER);
+ ?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER, failed_to_decode_remote_alert);
decode(<<>>, Acc, _) ->
lists:reverse(Acc, []).
diff --git a/lib/ssl/src/ssl_alert.hrl b/lib/ssl/src/ssl_alert.hrl
index 8c4bd08d31..38facb964f 100644
--- a/lib/ssl/src/ssl_alert.hrl
+++ b/lib/ssl/src/ssl_alert.hrl
@@ -109,6 +109,7 @@
-define(NO_APPLICATION_PROTOCOL, 120).
-define(ALERT_REC(Level,Desc), #alert{level=Level,description=Desc,where={?FILE, ?LINE}}).
+-define(ALERT_REC(Level,Desc,Reason), #alert{level=Level,description=Desc,where={?FILE, ?LINE},reason=Reason}).
-define(MAX_ALERTS, 10).
@@ -116,6 +117,7 @@
-record(alert, {
level,
description,
- where = {?FILE, ?LINE}
+ where = {?FILE, ?LINE},
+ reason
}).
-endif. % -ifdef(ssl_alert).
diff --git a/lib/ssl/src/ssl_api.hrl b/lib/ssl/src/ssl_api.hrl
index ceef7b0438..2bd51cf91e 100644
--- a/lib/ssl/src/ssl_api.hrl
+++ b/lib/ssl/src/ssl_api.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_app.erl b/lib/ssl/src/ssl_app.erl
index 191300b0a1..62e8765d4a 100644
--- a/lib/ssl/src/ssl_app.erl
+++ b/lib/ssl/src/ssl_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_certificate.erl b/lib/ssl/src/ssl_certificate.erl
index e9dc5764a3..3ec3f50e05 100644
--- a/lib/ssl/src/ssl_certificate.erl
+++ b/lib/ssl/src/ssl_certificate.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015 All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016 All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_cipher.erl b/lib/ssl/src/ssl_cipher.erl
index af53d4abf9..e935c033c7 100644
--- a/lib/ssl/src/ssl_cipher.erl
+++ b/lib/ssl/src/ssl_cipher.erl
@@ -1,7 +1,7 @@
-%%
+%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -38,8 +38,9 @@
cipher_init/3, decipher/6, cipher/5, decipher_aead/6, cipher_aead/6,
suite/1, suites/1, all_suites/1,
ec_keyed_suites/0, anonymous_suites/1, psk_suites/1, srp_suites/0,
- rc4_suites/1, openssl_suite/1, openssl_suite_name/1, filter/2, filter_suites/1,
- hash_algorithm/1, sign_algorithm/1, is_acceptable_hash/2, is_fallback/1]).
+ rc4_suites/1, des_suites/1, openssl_suite/1, openssl_suite_name/1, filter/2, filter_suites/1,
+ hash_algorithm/1, sign_algorithm/1, is_acceptable_hash/2, is_fallback/1,
+ random_bytes/1]).
-export_type([cipher_suite/0,
erl_cipher_suite/0, openssl_cipher_suite/0,
@@ -49,7 +50,8 @@
| aes_128_cbc | aes_256_cbc | aes_128_gcm | aes_256_gcm | chacha20_poly1305.
-type hash() :: null | sha | md5 | sha224 | sha256 | sha384 | sha512.
-type sign_algo() :: rsa | dsa | ecdsa.
--type key_algo() :: null | rsa | dhe_rsa | dhe_dss | ecdhe_ecdsa| ecdh_ecdsa | ecdh_rsa| srp_rsa| srp_dss | psk | dhe_psk | rsa_psk | dh_anon | ecdh_anon | srp_anon.
+-type key_algo() :: null | rsa | dhe_rsa | dhe_dss | ecdhe_ecdsa| ecdh_ecdsa | ecdh_rsa| srp_rsa| srp_dss |
+ psk | dhe_psk | rsa_psk | dh_anon | ecdh_anon | srp_anon.
-type erl_cipher_suite() :: {key_algo(), cipher(), hash()} % Pre TLS 1.2
%% TLS 1.2, internally PRE TLS 1.2 will use default_prf
| {key_algo(), cipher(), hash(), hash() | default_prf}.
@@ -102,7 +104,7 @@ cipher_init(?RC4, IV, Key) ->
State = crypto:stream_init(rc4, Key),
#cipher_state{iv = IV, key = Key, state = State};
cipher_init(?AES_GCM, IV, Key) ->
- <<Nonce:64>> = ssl:random_bytes(8),
+ <<Nonce:64>> = random_bytes(8),
#cipher_state{iv = IV, key = Key, nonce = Nonce};
cipher_init(_BCA, IV, Key) ->
#cipher_state{iv = IV, key = Key}.
@@ -212,7 +214,7 @@ decipher(?RC4, HashSz, CipherState = #cipher_state{state = State0}, Fragment, _,
%% alerts may permit certain attacks against CBC mode as used in
%% TLS [CBCATT]. It is preferable to uniformly use the
%% bad_record_mac alert to hide the specific type of the error."
- ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC, decryption_failed)
end;
decipher(?DES, HashSz, CipherState, Fragment, Version, PaddingCheck) ->
@@ -270,7 +272,7 @@ block_decipher(Fun, #cipher_state{key=Key, iv=IV} = CipherState0,
%% alerts may permit certain attacks against CBC mode as used in
%% TLS [CBCATT]. It is preferable to uniformly use the
%% bad_record_mac alert to hide the specific type of the error."
- ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC, decryption_failed)
end.
aead_ciphertext_to_state(chacha20_poly1305, SeqNo, _IV, AAD0, Fragment, _Version) ->
@@ -294,11 +296,11 @@ aead_decipher(Type, #cipher_state{key = Key, iv = IV} = CipherState,
Content when is_binary(Content) ->
{Content, CipherState};
_ ->
- ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC, decryption_failed)
end
catch
_:_ ->
- ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC, decryption_failed)
end.
%%--------------------------------------------------------------------
@@ -316,7 +318,8 @@ all_suites(Version) ->
++ anonymous_suites(Version)
++ psk_suites(Version)
++ srp_suites()
- ++ rc4_suites(Version).
+ ++ rc4_suites(Version)
+ ++ des_suites(Version).
%%--------------------------------------------------------------------
-spec anonymous_suites(ssl_record:ssl_version() | integer()) -> [cipher_suite()].
%%
@@ -420,6 +423,16 @@ rc4_suites({3, N}) when N =< 3 ->
?TLS_RSA_WITH_RC4_128_MD5,
?TLS_ECDH_ECDSA_WITH_RC4_128_SHA,
?TLS_ECDH_RSA_WITH_RC4_128_SHA].
+%%--------------------------------------------------------------------
+-spec des_suites(Version::ssl_record:ssl_version()) -> [cipher_suite()].
+%%
+%% Description: Returns a list of the cipher suites
+%% with DES cipher, only supported if explicitly set by user.
+%% Are not considered secure any more.
+%%--------------------------------------------------------------------
+des_suites(_)->
+ [?TLS_DHE_RSA_WITH_DES_CBC_SHA,
+ ?TLS_RSA_WITH_DES_CBC_SHA].
%%--------------------------------------------------------------------
-spec suite_definition(cipher_suite()) -> erl_cipher_suite().
@@ -1461,6 +1474,16 @@ is_acceptable_prf(Prf, Algos) ->
is_fallback(CipherSuites)->
lists:member(?TLS_FALLBACK_SCSV, CipherSuites).
+
+%%--------------------------------------------------------------------
+-spec random_bytes(integer()) -> binary().
+
+%%
+%% Description: Generates cryptographically secure random sequence
+%%--------------------------------------------------------------------
+random_bytes(N) ->
+ crypto:strong_rand_bytes(N).
+
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
@@ -1701,7 +1724,7 @@ get_padding_aux(BlockSize, PadLength) ->
random_iv(IV) ->
IVSz = byte_size(IV),
- ssl:random_bytes(IVSz).
+ random_bytes(IVSz).
next_iv(Bin, IV) ->
BinSz = byte_size(Bin),
@@ -1729,7 +1752,8 @@ dhe_rsa_suites() ->
?TLS_DHE_RSA_WITH_DES_CBC_SHA,
?TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
?TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
- ?TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256].
+ ?TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
+ ].
psk_rsa_suites() ->
[?TLS_RSA_PSK_WITH_AES_256_GCM_SHA384,
diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl
index 0f0072ba34..adee59393e 100644
--- a/lib/ssl/src/ssl_connection.erl
+++ b/lib/ssl/src/ssl_connection.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -38,7 +38,7 @@
%% Setup
-export([connect/8, ssl_accept/7, handshake/2, handshake/3,
- socket_control/4, socket_control/5]).
+ socket_control/4, socket_control/5, start_or_recv_cancel_timer/2]).
%% User Events
-export([send/2, recv/3, close/2, shutdown/2,
@@ -47,12 +47,16 @@
connection_information/1
]).
--export([handle_session/7]).
+%% General gen_statem state functions with extra callback argument
+%% to determine if it is an SSL/TLS or DTLS gen_statem machine
+-export([init/4, hello/4, abbreviated/4, certify/4, cipher/4, connection/4, downgrade/4]).
-%% SSL FSM state functions
--export([hello/3, abbreviated/3, certify/3, cipher/3, connection/3]).
-%% SSL all state functions
--export([handle_sync_event/4, handle_info/3, terminate/3, format_status/2]).
+%% gen_statem callbacks
+-export([terminate/3, format_status/2]).
+
+%%
+-export([handle_info/3, handle_call/5, handle_session/7, ssl_config/3,
+ prepare_connection/2, hibernate_after/3]).
%%====================================================================
@@ -100,7 +104,7 @@ ssl_accept(Connection, Port, Socket, Opts, User, CbInfo, Timeout) ->
%% Description: Starts ssl handshake.
%%--------------------------------------------------------------------
handshake(#sslsocket{pid = Pid}, Timeout) ->
- case sync_send_all_state_event(Pid, {start, Timeout}) of
+ case call(Pid, {start, Timeout}) of
connected ->
ok;
Error ->
@@ -114,7 +118,7 @@ handshake(#sslsocket{pid = Pid}, Timeout) ->
%% Description: Starts ssl handshake with some new options
%%--------------------------------------------------------------------
handshake(#sslsocket{pid = Pid}, SslOptions, Timeout) ->
- case sync_send_all_state_event(Pid, {start, SslOptions, Timeout}) of
+ case call(Pid, {start, SslOptions, Timeout}) of
connected ->
ok;
Error ->
@@ -148,7 +152,7 @@ socket_control(Connection, Socket, Pid, Transport, ListenTracker) ->
%% Description: Sends data over the ssl connection
%%--------------------------------------------------------------------
send(Pid, Data) ->
- sync_send_all_state_event(Pid, {application_data,
+ call(Pid, {application_data,
%% iolist_to_binary should really
%% be called iodata_to_binary()
erlang:iolist_to_binary(Data)}).
@@ -160,7 +164,7 @@ send(Pid, Data) ->
%% Description: Receives data when active = false
%%--------------------------------------------------------------------
recv(Pid, Length, Timeout) ->
- sync_send_all_state_event(Pid, {recv, Length, Timeout}).
+ call(Pid, {recv, Length, Timeout}).
%%--------------------------------------------------------------------
-spec connection_information(pid()) -> {ok, list()} | {error, reason()}.
@@ -168,7 +172,7 @@ recv(Pid, Length, Timeout) ->
%% Description: Get the SNI hostname
%%--------------------------------------------------------------------
connection_information(Pid) when is_pid(Pid) ->
- sync_send_all_state_event(Pid, connection_information).
+ call(Pid, connection_information).
%%--------------------------------------------------------------------
-spec close(pid(), {close, Timeout::integer() |
@@ -178,7 +182,7 @@ connection_information(Pid) when is_pid(Pid) ->
%% Description: Close an ssl connection
%%--------------------------------------------------------------------
close(ConnectionPid, How) ->
- case sync_send_all_state_event(ConnectionPid, How) of
+ case call(ConnectionPid, How) of
{error, closed} ->
ok;
Other ->
@@ -190,7 +194,7 @@ close(ConnectionPid, How) ->
%% Description: Same as gen_tcp:shutdown/2
%%--------------------------------------------------------------------
shutdown(ConnectionPid, How) ->
- sync_send_all_state_event(ConnectionPid, {shutdown, How}).
+ call(ConnectionPid, {shutdown, How}).
%%--------------------------------------------------------------------
-spec new_user(pid(), pid()) -> ok | {error, reason()}.
@@ -199,7 +203,7 @@ shutdown(ConnectionPid, How) ->
%% or once.
%%--------------------------------------------------------------------
new_user(ConnectionPid, User) ->
- sync_send_all_state_event(ConnectionPid, {new_user, User}).
+ call(ConnectionPid, {new_user, User}).
%%--------------------------------------------------------------------
-spec negotiated_protocol(pid()) -> {ok, binary()} | {error, reason()}.
@@ -207,7 +211,7 @@ new_user(ConnectionPid, User) ->
%% Description: Returns the negotiated protocol
%%--------------------------------------------------------------------
negotiated_protocol(ConnectionPid) ->
- sync_send_all_state_event(ConnectionPid, negotiated_protocol).
+ call(ConnectionPid, negotiated_protocol).
%%--------------------------------------------------------------------
-spec get_opts(pid(), list()) -> {ok, list()} | {error, reason()}.
@@ -215,14 +219,14 @@ negotiated_protocol(ConnectionPid) ->
%% Description: Same as inet:getopts/2
%%--------------------------------------------------------------------
get_opts(ConnectionPid, OptTags) ->
- sync_send_all_state_event(ConnectionPid, {get_opts, OptTags}).
+ call(ConnectionPid, {get_opts, OptTags}).
%%--------------------------------------------------------------------
-spec set_opts(pid(), list()) -> ok | {error, reason()}.
%%
%% Description: Same as inet:setopts/2
%%--------------------------------------------------------------------
set_opts(ConnectionPid, Options) ->
- sync_send_all_state_event(ConnectionPid, {set_opts, Options}).
+ call(ConnectionPid, {set_opts, Options}).
%%--------------------------------------------------------------------
-spec session_info(pid()) -> {ok, list()} | {error, reason()}.
@@ -230,7 +234,7 @@ set_opts(ConnectionPid, Options) ->
%% Description: Returns info about the ssl session
%%--------------------------------------------------------------------
session_info(ConnectionPid) ->
- sync_send_all_state_event(ConnectionPid, session_info).
+ call(ConnectionPid, session_info).
%%--------------------------------------------------------------------
-spec peer_certificate(pid()) -> {ok, binary()| undefined} | {error, reason()}.
@@ -238,7 +242,7 @@ session_info(ConnectionPid) ->
%% Description: Returns the peer cert
%%--------------------------------------------------------------------
peer_certificate(ConnectionPid) ->
- sync_send_all_state_event(ConnectionPid, peer_certificate).
+ call(ConnectionPid, peer_certificate).
%%--------------------------------------------------------------------
-spec renegotiation(pid()) -> ok | {error, reason()}.
@@ -246,7 +250,7 @@ peer_certificate(ConnectionPid) ->
%% Description: Starts a renegotiation of the ssl session.
%%--------------------------------------------------------------------
renegotiation(ConnectionPid) ->
- sync_send_all_state_event(ConnectionPid, renegotiate).
+ call(ConnectionPid, renegotiate).
%%--------------------------------------------------------------------
-spec prf(pid(), binary() | 'master_secret', binary(),
@@ -256,9 +260,13 @@ renegotiation(ConnectionPid) ->
%% Description: use a ssl sessions TLS PRF to generate key material
%%--------------------------------------------------------------------
prf(ConnectionPid, Secret, Label, Seed, WantedLength) ->
- sync_send_all_state_event(ConnectionPid, {prf, Secret, Label, Seed, WantedLength}).
-
+ call(ConnectionPid, {prf, Secret, Label, Seed, WantedLength}).
+%%--------------------------------------------------------------------
+-spec handle_session(#server_hello{}, ssl_record:ssl_version(),
+ binary(), #connection_states{}, _,_, #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
handle_session(#server_hello{cipher_suite = CipherSuite,
compression_method = Compression},
Version, NewId, ConnectionStates, ProtoExt, Protocol0,
@@ -290,61 +298,104 @@ handle_session(#server_hello{cipher_suite = CipherSuite,
handle_resumed_session(NewId,
State#state{connection_states = ConnectionStates})
end.
-
+
%%--------------------------------------------------------------------
--spec hello(start | #hello_request{} | #server_hello{} | term(),
- #state{}, tls_connection | dtls_connection) ->
- gen_fsm_state_return().
+-spec ssl_config(#ssl_options{}, client | server, #state{}) -> #state{}.
%%--------------------------------------------------------------------
-hello(start, #state{role = server} = State0, Connection) ->
- {Record, State} = Connection:next_record(State0),
- Connection:next_state(hello, hello, Record, State);
+ssl_config(Opts, Role, State) ->
+ {ok, Ref, CertDbHandle, FileRefHandle, CacheHandle, CRLDbInfo,
+ OwnCert, Key, DHParams} =
+ ssl_config:init(Opts, Role),
+ Handshake = ssl_handshake:init_handshake_history(),
+ TimeStamp = erlang:monotonic_time(),
+ Session = State#state.session,
+ State#state{tls_handshake_history = Handshake,
+ session = Session#session{own_certificate = OwnCert,
+ time_stamp = TimeStamp},
+ file_ref_db = FileRefHandle,
+ cert_db_ref = Ref,
+ cert_db = CertDbHandle,
+ crl_db = CRLDbInfo,
+ session_cache = CacheHandle,
+ private_key = Key,
+ diffie_hellman_params = DHParams,
+ ssl_options = Opts}.
-hello(#hello_request{}, #state{role = client} = State0, Connection) ->
- {Record, State} = Connection:next_record(State0),
- Connection:next_state(hello, hello, Record, State);
+%%====================================================================
+%% gen_statem state functions
+%%====================================================================
+%%--------------------------------------------------------------------
+-spec init(gen_statem:event_type(),
+ {start, timeout()} | {start, {list(), list()}, timeout()}| term(),
+ #state{}, tls_connection | dtls_connection) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
-hello({common_client_hello, Type, ServerHelloExt},
- State, Connection) ->
+init({call, From}, {start, Timeout}, State0, Connection) ->
+ Timer = start_or_recv_cancel_timer(Timeout, From),
+ {Record, State} = Connection:next_record(State0#state{start_or_recv_from = From,
+ timer = Timer}),
+ Connection:next_event(hello, Record, State);
+init({call, From}, {start, {Opts, EmOpts}, Timeout},
+ #state{role = Role} = State0, Connection) ->
+ try
+ State = ssl_config(Opts, Role, State0),
+ init({call, From}, {start, Timeout},
+ State#state{ssl_options = Opts, socket_options = EmOpts}, Connection)
+ catch throw:Error ->
+ {stop_and_reply, normal, {reply, From, {error, Error}}}
+ end;
+init({call, From}, Msg, State, Connection) ->
+ handle_call(Msg, From, init, State, Connection);
+init(_Type, _Event, _State, _Connection) ->
+ {keep_state_and_data, [postpone]}.
+
+%%--------------------------------------------------------------------
+-spec hello(gen_statem:event_type(),
+ #hello_request{} | #server_hello{} | term(),
+ #state{}, tls_connection | dtls_connection) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+hello({call, From}, Msg, State, Connection) ->
+ handle_call(Msg, From, hello, State, Connection);
+hello(internal, {common_client_hello, Type, ServerHelloExt}, State, Connection) ->
do_server_hello(Type, ServerHelloExt, State, Connection);
-hello(timeout, State, _) ->
- {next_state, hello, State, hibernate};
-
-hello(Msg, State, Connection) ->
- Connection:handle_unexpected_message(Msg, hello, State).
+hello(info, Msg, State, _) ->
+ handle_info(Msg, hello, State);
+hello(Type, Msg, State, Connection) ->
+ handle_common_event(Type, Msg, hello, State, Connection).
%%--------------------------------------------------------------------
--spec abbreviated(#hello_request{} | #finished{} | term(),
+-spec abbreviated(gen_statem:event_type(),
+ #hello_request{} | #finished{} | term(),
#state{}, tls_connection | dtls_connection) ->
- gen_fsm_state_return().
+ gen_statem:state_function_result().
%%--------------------------------------------------------------------
-abbreviated(#hello_request{}, State0, Connection) ->
- {Record, State} = Connection:next_record(State0),
- Connection:next_state(abbreviated, hello, Record, State);
+abbreviated({call, From}, Msg, State, Connection) ->
+ handle_call(Msg, From, abbreviated, State, Connection);
-abbreviated(#finished{verify_data = Data} = Finished,
+abbreviated(internal, #finished{verify_data = Data} = Finished,
#state{role = server,
negotiated_version = Version,
expecting_finished = true,
tls_handshake_history = Handshake,
session = #session{master_secret = MasterSecret},
connection_states = ConnectionStates0} =
- State, Connection) ->
+ State0, Connection) ->
case ssl_handshake:verify_connection(Version, Finished, client,
get_current_prf(ConnectionStates0, write),
MasterSecret, Handshake) of
verified ->
ConnectionStates =
ssl_record:set_client_verify_data(current_both, Data, ConnectionStates0),
- Connection:next_state_connection(abbreviated,
- ack_connection(
- State#state{connection_states = ConnectionStates,
- expecting_finished = false}));
+ {Record, State} = prepare_connection(State0#state{connection_states = ConnectionStates,
+ expecting_finished = false}, Connection),
+ Connection:next_event(connection, Record, State);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, abbreviated, State)
+ Connection:handle_own_alert(Alert, Version, abbreviated, State0)
end;
-abbreviated(#finished{verify_data = Data} = Finished,
+abbreviated(internal, #finished{verify_data = Data} = Finished,
#state{role = client, tls_handshake_history = Handshake0,
session = #session{master_secret = MasterSecret},
negotiated_version = Version,
@@ -355,40 +406,49 @@ abbreviated(#finished{verify_data = Data} = Finished,
verified ->
ConnectionStates1 =
ssl_record:set_server_verify_data(current_read, Data, ConnectionStates0),
- State =
+ State1 =
finalize_handshake(State0#state{connection_states = ConnectionStates1},
abbreviated, Connection),
- Connection:next_state_connection(abbreviated,
- ack_connection(State#state{expecting_finished = false}));
- #alert{} = Alert ->
+ {Record, State} = prepare_connection(State1#state{expecting_finished = false}, Connection),
+ Connection:next_event(connection, Record, State);
+ #alert{} = Alert ->
Connection:handle_own_alert(Alert, Version, abbreviated, State0)
end;
%% only allowed to send next_protocol message after change cipher spec
%% & before finished message and it is not allowed during renegotiation
-abbreviated(#next_protocol{selected_protocol = SelectedProtocol},
+abbreviated(internal, #next_protocol{selected_protocol = SelectedProtocol},
#state{role = server, expecting_next_protocol_negotiation = true} = State0,
Connection) ->
- {Record, State} = Connection:next_record(State0#state{negotiated_protocol = SelectedProtocol}),
- Connection:next_state(abbreviated, abbreviated, Record, State#state{expecting_next_protocol_negotiation = false});
-
-abbreviated(timeout, State, _) ->
- {next_state, abbreviated, State, hibernate };
-
-abbreviated(Msg, State, Connection) ->
- Connection:handle_unexpected_message(Msg, abbreviated, State).
-
+ {Record, State} =
+ Connection:next_record(State0#state{negotiated_protocol = SelectedProtocol}),
+ Connection:next_event(abbreviated, Record,
+ State#state{expecting_next_protocol_negotiation = false});
+abbreviated(internal,
+ #change_cipher_spec{type = <<1>>}, #state{connection_states = ConnectionStates0} =
+ State0, Connection) ->
+ ConnectionStates1 =
+ ssl_record:activate_pending_connection_state(ConnectionStates0, read),
+ {Record, State} = Connection:next_record(State0#state{connection_states =
+ ConnectionStates1}),
+ Connection:next_event(abbreviated, Record, State#state{expecting_finished = true});
+abbreviated(info, Msg, State, _) ->
+ handle_info(Msg, abbreviated, State);
+abbreviated(Type, Msg, State, Connection) ->
+ handle_common_event(Type, Msg, abbreviated, State, Connection).
+
%%--------------------------------------------------------------------
--spec certify(#hello_request{} | #certificate{} | #server_key_exchange{} |
+-spec certify(gen_statem:event_type(),
+ #hello_request{} | #certificate{} | #server_key_exchange{} |
#certificate_request{} | #server_hello_done{} | #client_key_exchange{} | term(),
#state{}, tls_connection | dtls_connection) ->
- gen_fsm_state_return().
+ gen_statem:state_function_result().
%%--------------------------------------------------------------------
-certify(#hello_request{}, State0, Connection) ->
- {Record, State} = Connection:next_record(State0),
- Connection:next_state(certify, hello, Record, State);
-
-certify(#certificate{asn1_certificates = []},
+certify({call, From}, Msg, State, Connection) ->
+ handle_call(Msg, From, certify, State, Connection);
+certify(info, Msg, State, _) ->
+ handle_info(Msg, certify, State);
+certify(internal, #certificate{asn1_certificates = []},
#state{role = server, negotiated_version = Version,
ssl_options = #ssl_options{verify = verify_peer,
fail_if_no_peer_cert = true}} =
@@ -396,15 +456,24 @@ certify(#certificate{asn1_certificates = []},
Alert = ?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE),
Connection:handle_own_alert(Alert, Version, certify, State);
-certify(#certificate{asn1_certificates = []},
+certify(internal, #certificate{asn1_certificates = []},
#state{role = server,
ssl_options = #ssl_options{verify = verify_peer,
fail_if_no_peer_cert = false}} =
State0, Connection) ->
- {Record, State} = Connection:next_record(State0#state{client_certificate_requested = false}),
- Connection:next_state(certify, certify, Record, State);
+ {Record, State} =
+ Connection:next_record(State0#state{client_certificate_requested = false}),
+ Connection:next_event(certify, Record, State);
+
+certify(internal, #certificate{},
+ #state{role = server,
+ negotiated_version = Version,
+ ssl_options = #ssl_options{verify = verify_none}} =
+ State, Connection) ->
+ Alert = ?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE, unrequested_certificate),
+ Connection:handle_own_alert(Alert, Version, certify, State);
-certify(#certificate{} = Cert,
+certify(internal, #certificate{} = Cert,
#state{negotiated_version = Version,
role = Role,
cert_db = CertDbHandle,
@@ -426,7 +495,7 @@ certify(#certificate{} = Cert,
Connection:handle_own_alert(Alert, Version, certify, State)
end;
-certify(#server_key_exchange{exchange_keys = Keys},
+certify(internal, #server_key_exchange{exchange_keys = Keys},
#state{role = client, negotiated_version = Version,
key_algorithm = Alg,
public_key_info = PubKeyInfo,
@@ -438,44 +507,43 @@ certify(#server_key_exchange{exchange_keys = Keys},
Alg == srp_dss; Alg == srp_rsa; Alg == srp_anon ->
Params = ssl_handshake:decode_server_key(Keys, Alg, Version),
+
%% Use negotiated value if TLS-1.2 otherwhise return default
HashSign = negotiated_hashsign(Params#server_key_params.hashsign, Alg, PubKeyInfo, Version),
+
case is_anonymous(Alg) of
true ->
calculate_secret(Params#server_key_params.params,
State#state{hashsign_algorithm = HashSign}, Connection);
false ->
- case ssl_handshake:verify_server_key(Params, HashSign, ConnectionStates, Version, PubKeyInfo) of
+ case ssl_handshake:verify_server_key(Params, HashSign,
+ ConnectionStates, Version, PubKeyInfo) of
true ->
calculate_secret(Params#server_key_params.params,
- State#state{hashsign_algorithm = HashSign}, Connection);
+ State#state{hashsign_algorithm = HashSign},
+ Connection);
false ->
Connection:handle_own_alert(?ALERT_REC(?FATAL, ?DECRYPT_ERROR),
Version, certify, State)
end
end;
-certify(#server_key_exchange{} = Msg,
- #state{role = client, key_algorithm = rsa} = State, Connection) ->
- Connection:handle_unexpected_message(Msg, certify_server_keyexchange, State);
-
-certify(#certificate_request{hashsign_algorithms = HashSigns},
+certify(internal, #certificate_request{} = CertRequest,
#state{session = #session{own_certificate = Cert},
- key_algorithm = KeyExAlg,
+ role = client,
ssl_options = #ssl_options{signature_algs = SupportedHashSigns},
negotiated_version = Version} = State0, Connection) ->
-
- case ssl_handshake:select_hashsign(HashSigns, Cert, KeyExAlg, SupportedHashSigns, Version) of
+ case ssl_handshake:select_hashsign(CertRequest, Cert, SupportedHashSigns, Version) of
#alert {} = Alert ->
Connection:handle_own_alert(Alert, Version, certify, State0);
NegotiatedHashSign ->
{Record, State} = Connection:next_record(State0#state{client_certificate_requested = true}),
- Connection:next_state(certify, certify, Record,
+ Connection:next_event(certify, Record,
State#state{cert_hashsign_algorithm = NegotiatedHashSign})
end;
%% PSK and RSA_PSK might bypass the Server-Key-Exchange
-certify(#server_hello_done{},
+certify(internal, #server_hello_done{},
#state{session = #session{master_secret = undefined},
negotiated_version = Version,
psk_identity = PSKIdentity,
@@ -493,27 +561,29 @@ certify(#server_hello_done{},
client_certify_and_key_exchange(State, Connection)
end;
-certify(#server_hello_done{},
+certify(internal, #server_hello_done{},
#state{session = #session{master_secret = undefined},
ssl_options = #ssl_options{user_lookup_fun = PSKLookup},
- negotiated_version = {Major, Minor},
+ negotiated_version = {Major, Minor} = Version,
psk_identity = PSKIdentity,
premaster_secret = undefined,
role = client,
key_algorithm = Alg} = State0, Connection)
when Alg == rsa_psk ->
- Rand = ssl:random_bytes(?NUM_OF_PREMASTERSECRET_BYTES-2),
+ Rand = ssl_cipher:random_bytes(?NUM_OF_PREMASTERSECRET_BYTES-2),
RSAPremasterSecret = <<?BYTE(Major), ?BYTE(Minor), Rand/binary>>,
- case ssl_handshake:premaster_secret({Alg, PSKIdentity}, PSKLookup, RSAPremasterSecret) of
+ case ssl_handshake:premaster_secret({Alg, PSKIdentity}, PSKLookup,
+ RSAPremasterSecret) of
#alert{} = Alert ->
- Alert;
+ Connection:handle_own_alert(Alert, Version, certify, State0);
PremasterSecret ->
- State = master_secret(PremasterSecret, State0#state{premaster_secret = RSAPremasterSecret}),
+ State = master_secret(PremasterSecret,
+ State0#state{premaster_secret = RSAPremasterSecret}),
client_certify_and_key_exchange(State, Connection)
end;
%% Master secret was determined with help of server-key exchange msg
-certify(#server_hello_done{},
+certify(internal, #server_hello_done{},
#state{session = #session{master_secret = MasterSecret} = Session,
connection_states = ConnectionStates0,
negotiated_version = Version,
@@ -529,7 +599,7 @@ certify(#server_hello_done{},
end;
%% Master secret is calculated from premaster_secret
-certify(#server_hello_done{},
+certify(internal, #server_hello_done{},
#state{session = Session0,
connection_states = ConnectionStates0,
negotiated_version = Version,
@@ -546,14 +616,15 @@ certify(#server_hello_done{},
Connection:handle_own_alert(Alert, Version, certify, State0)
end;
-certify(#client_key_exchange{} = Msg,
+certify(internal = Type, #client_key_exchange{} = Msg,
#state{role = server,
client_certificate_requested = true,
- ssl_options = #ssl_options{fail_if_no_peer_cert = true}} = State, Connection) ->
+ ssl_options = #ssl_options{fail_if_no_peer_cert = true}} = State,
+ Connection) ->
%% We expect a certificate here
- Connection:handle_unexpected_message(Msg, certify_client_key_exchange, State);
+ handle_common_event(Type, Msg, certify, State, Connection);
-certify(#client_key_exchange{exchange_keys = Keys},
+certify(internal, #client_key_exchange{exchange_keys = Keys},
State = #state{key_algorithm = KeyAlg, negotiated_version = Version}, Connection) ->
try
certify_client_key_exchange(ssl_handshake:decode_client_key(Keys, KeyAlg, Version),
@@ -563,22 +634,23 @@ certify(#client_key_exchange{exchange_keys = Keys},
Connection:handle_own_alert(Alert, Version, certify, State)
end;
-certify(timeout, State, _) ->
- {next_state, certify, State, hibernate};
-
-certify(Msg, State, Connection) ->
- Connection:handle_unexpected_message(Msg, certify, State).
-
+certify(Type, Msg, State, Connection) ->
+ handle_common_event(Type, Msg, certify, State, Connection).
+
%%--------------------------------------------------------------------
--spec cipher(#hello_request{} | #certificate_verify{} | #finished{} | term(),
+-spec cipher(gen_statem:event_type(),
+ #hello_request{} | #certificate_verify{} | #finished{} | term(),
#state{}, tls_connection | dtls_connection) ->
- gen_fsm_state_return().
+ gen_statem:state_function_result().
%%--------------------------------------------------------------------
-cipher(#hello_request{}, State0, Connection) ->
- {Record, State} = Connection:next_record(State0),
- Connection:next_state(cipher, hello, Record, State);
+cipher({call, From}, Msg, State, Connection) ->
+ handle_call(Msg, From, cipher, State, Connection);
-cipher(#certificate_verify{signature = Signature, hashsign_algorithm = CertHashSign},
+cipher(info, Msg, State, _) ->
+ handle_info(Msg, cipher, State);
+
+cipher(internal, #certificate_verify{signature = Signature,
+ hashsign_algorithm = CertHashSign},
#state{role = server,
key_algorithm = KexAlg,
public_key_info = PublicKeyInfo,
@@ -593,19 +665,20 @@ cipher(#certificate_verify{signature = Signature, hashsign_algorithm = CertHashS
Version, HashSign, MasterSecret, Handshake) of
valid ->
{Record, State} = Connection:next_record(State0),
- Connection:next_state(cipher, cipher, Record,
+ Connection:next_event(cipher, Record,
State#state{cert_hashsign_algorithm = HashSign});
#alert{} = Alert ->
Connection:handle_own_alert(Alert, Version, cipher, State0)
end;
%% client must send a next protocol message if we are expecting it
-cipher(#finished{}, #state{role = server, expecting_next_protocol_negotiation = true,
- negotiated_protocol = undefined, negotiated_version = Version} = State0,
+cipher(internal, #finished{},
+ #state{role = server, expecting_next_protocol_negotiation = true,
+ negotiated_protocol = undefined, negotiated_version = Version} = State0,
Connection) ->
Connection:handle_own_alert(?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE), Version, cipher, State0);
-cipher(#finished{verify_data = Data} = Finished,
+cipher(internal, #finished{verify_data = Data} = Finished,
#state{negotiated_version = Version,
host = Host,
port = Port,
@@ -621,109 +694,166 @@ cipher(#finished{verify_data = Data} = Finished,
MasterSecret, Handshake0) of
verified ->
Session = register_session(Role, Host, Port, Session0),
- cipher_role(Role, Data, Session, State#state{expecting_finished = false}, Connection);
+ cipher_role(Role, Data, Session,
+ State#state{expecting_finished = false}, Connection);
#alert{} = Alert ->
Connection:handle_own_alert(Alert, Version, cipher, State)
end;
%% only allowed to send next_protocol message after change cipher spec
%% & before finished message and it is not allowed during renegotiation
-cipher(#next_protocol{selected_protocol = SelectedProtocol},
+cipher(internal, #next_protocol{selected_protocol = SelectedProtocol},
#state{role = server, expecting_next_protocol_negotiation = true,
expecting_finished = true} = State0, Connection) ->
- {Record, State} = Connection:next_record(State0#state{negotiated_protocol = SelectedProtocol}),
- Connection:next_state(cipher, cipher, Record, State#state{expecting_next_protocol_negotiation = false});
-
-cipher(timeout, State, _) ->
- {next_state, cipher, State, hibernate};
-
-cipher(Msg, State, Connection) ->
- Connection:handle_unexpected_message(Msg, cipher, State).
+ {Record, State} =
+ Connection:next_record(State0#state{negotiated_protocol = SelectedProtocol}),
+ Connection:next_event(cipher, Record,
+ State#state{expecting_next_protocol_negotiation = false});
+cipher(internal, #change_cipher_spec{type = <<1>>}, #state{connection_states = ConnectionStates0} =
+ State0, Connection) ->
+ ConnectionStates1 =
+ ssl_record:activate_pending_connection_state(ConnectionStates0, read),
+ {Record, State} = Connection:next_record(State0#state{connection_states =
+ ConnectionStates1}),
+ Connection:next_event(cipher, Record, State#state{expecting_finished = true});
+cipher(Type, Msg, State, Connection) ->
+ handle_common_event(Type, Msg, cipher, State, Connection).
%%--------------------------------------------------------------------
--spec connection(term(), #state{}, tls_connection | dtls_connection) ->
- gen_fsm_state_return().
+-spec connection(gen_statem:event_type(), term(),
+ #state{}, tls_connection | dtls_connection) ->
+ gen_statem:state_function_result().
%%--------------------------------------------------------------------
-connection(timeout, State, _) ->
- {next_state, connection, State, hibernate};
+connection({call, From}, {application_data, Data},
+ #state{protocol_cb = Connection} = State, Connection) ->
+ %% We should look into having a worker process to do this to
+ %% parallize send and receive decoding and not block the receiver
+ %% if sending is overloading the socket.
+ try
+ Connection:write_application_data(Data, From, State)
+ catch throw:Error ->
+ hibernate_after(connection, State, [{reply, From, Error}])
+ end;
+connection({call, RecvFrom}, {recv, N, Timeout},
+ #state{protocol_cb = Connection, socket_options =
+ #socket_options{active = false}} = State0, Connection) ->
+ Timer = start_or_recv_cancel_timer(Timeout, RecvFrom),
+ Connection:passive_receive(State0#state{bytes_to_read = N,
+ start_or_recv_from = RecvFrom,
+ timer = Timer}, connection);
+connection({call, From}, renegotiate, #state{protocol_cb = Connection} = State,
+ Connection) ->
+ Connection:renegotiate(State#state{renegotiation = {true, From}}, []);
+connection({call, From}, peer_certificate,
+ #state{session = #session{peer_certificate = Cert}} = State, _) ->
+ hibernate_after(connection, State, [{reply, From, {ok, Cert}}]);
+connection({call, From}, connection_information, State, _) ->
+ Info = connection_info(State),
+ hibernate_after(connection, State, [{reply, From, {ok, Info}}]);
+connection({call, From}, session_info, #state{session = #session{session_id = Id,
+ cipher_suite = Suite}} = State, _) ->
+ SessionInfo = [{session_id, Id},
+ {cipher_suite, ssl_cipher:erl_suite_definition(Suite)}],
+ hibernate_after(connection, State, [{reply, From, SessionInfo}]);
+connection({call, From}, negotiated_protocol,
+ #state{negotiated_protocol = undefined} = State, _) ->
+ hibernate_after(connection, State, [{reply, From, {error, protocol_not_negotiated}}]);
+connection({call, From}, negotiated_protocol,
+ #state{negotiated_protocol = SelectedProtocol} = State, _) ->
+ hibernate_after(connection, State,
+ [{reply, From, {ok, SelectedProtocol}}]);
+connection({call, From}, Msg, State, Connection) ->
+ handle_call(Msg, From, connection, State, Connection);
+connection(info, Msg, State, _) ->
+ handle_info(Msg, connection, State);
+connection(internal, {recv, _}, State, Connection) ->
+ Connection:passive_receive(State, connection);
+connection(Type, Msg, State, Connection) ->
+ handle_common_event(Type, Msg, connection, State, Connection).
-connection(Msg, State, Connection) ->
- Connection:handle_unexpected_message(Msg, connection, State).
+%%--------------------------------------------------------------------
+-spec downgrade(gen_statem:event_type(), term(),
+ #state{}, tls_connection | dtls_connection) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+downgrade(internal, #alert{description = ?CLOSE_NOTIFY},
+ #state{transport_cb = Transport, socket = Socket,
+ downgrade = {Pid, From}} = State, _) ->
+ ssl_socket:setopts(Transport, Socket, [{active, false}, {packet, 0}, {mode, binary}]),
+ Transport:controlling_process(Socket, Pid),
+ gen_statem:reply(From, {ok, Socket}),
+ {stop, normal, State};
+downgrade(timeout, downgrade, #state{downgrade = {_, From}} = State, _) ->
+ gen_statem:reply(From, {error, timeout}),
+ {stop, normal, State};
+downgrade(Type, Event, State, Connection) ->
+ handle_common_event(Type, Event, downgrade, State, Connection).
%%--------------------------------------------------------------------
-%% Description: Whenever a gen_fsm receives an event sent using
-%% gen_fsm:sync_send_all_state_event/2,3, this function is called to handle
-%% the event.
+%% Event handling functions called by state functions to handle
+%% common or unexpected events for the state.
%%--------------------------------------------------------------------
-handle_sync_event({application_data, Data}, From, connection,
- #state{protocol_cb = Connection} = State) ->
- %% We should look into having a worker process to do this to
- %% parallize send and receive decoding and not block the receiver
- %% if sending is overloading the socket.
- try
- Connection:write_application_data(Data, From, State)
- catch throw:Error ->
- {reply, Error, connection, State, get_timeout(State)}
+handle_common_event(internal, {handshake, {#hello_request{} = Handshake, _}}, connection = StateName,
+ #state{role = client} = State, _) ->
+ %% Should not be included in handshake history
+ {next_state, StateName, State#state{renegotiation = {true, peer}}, [{next_event, internal, Handshake}]};
+handle_common_event(internal, {handshake, {#hello_request{}, _}}, StateName, #state{role = client}, _)
+ when StateName =/= connection ->
+ {keep_state_and_data};
+handle_common_event(internal, {handshake, {Handshake, Raw}}, StateName,
+ #state{tls_handshake_history = Hs0} = State0, Connection) ->
+ %% This function handles client SNI hello extension when Handshake is
+ %% a client_hello, which needs to be determined by the connection callback.
+ %% In other cases this is a noop
+ State = Connection:handle_sni_extension(Handshake, State0),
+ HsHist = ssl_handshake:update_handshake_history(Hs0, Raw),
+ {next_state, StateName, State#state{tls_handshake_history = HsHist},
+ [{next_event, internal, Handshake}]};
+handle_common_event(internal, {tls_record, TLSRecord}, StateName, State, Connection) ->
+ Connection:handle_common_event(internal, TLSRecord, StateName, State);
+handle_common_event(timeout, hibernate, _, _, _) ->
+ {keep_state_and_data, [hibernate]};
+handle_common_event(internal, {application_data, Data}, StateName, State0, Connection) ->
+ case Connection:read_application_data(Data, State0) of
+ {stop, Reason, State} ->
+ {stop, Reason, State};
+ {Record, State} ->
+ Connection:next_event(StateName, Record, State)
end;
-handle_sync_event({application_data, Data}, From, StateName,
- #state{send_queue = Queue} = State) ->
+handle_common_event(internal, #change_cipher_spec{type = <<1>>}, StateName,
+ #state{negotiated_version = Version} = State, Connection) ->
+ Connection:handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE), Version,
+ StateName, State);
+handle_common_event(internal, _, _, _, _) ->
+ {keep_state_and_data, [postpone]};
+handle_common_event(_Type, Msg, StateName, #state{negotiated_version = Version} = State,
+ Connection) ->
+ Alert = ?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE),
+ Connection:handle_own_alert(Alert, Version, {StateName, Msg}, State).
+
+handle_call({application_data, _Data}, _, _, _, _) ->
%% In renegotiation priorities handshake, send data when handshake is finished
- {next_state, StateName,
- State#state{send_queue = queue:in({From, Data}, Queue)},
- get_timeout(State)};
-
-handle_sync_event({start, Timeout}, StartFrom, hello, #state{role = Role,
- protocol_cb = Connection,
- ssl_options = SSLOpts} = State0) ->
- try
- State = ssl_config(SSLOpts, Role, State0),
- Timer = start_or_recv_cancel_timer(Timeout, StartFrom),
- Connection:hello(start, State#state{start_or_recv_from = StartFrom,
- timer = Timer})
- catch throw:Error ->
- {stop, normal, {error, Error}, State0}
- end;
-
-handle_sync_event({start, {Opts, EmOpts}, Timeout}, From, StateName, State) ->
- try
- handle_sync_event({start, Timeout}, From, StateName, State#state{socket_options = EmOpts,
- ssl_options = Opts})
- catch throw:Error ->
- {stop, normal, {error, Error}, State}
- end;
-
-%% These two clauses below could happen if a server upgrades a socket in
-%% active mode. Note that in this case we are lucky that
-%% controlling_process has been evalueated before receiving handshake
-%% messages from client. The server should put the socket in passive
-%% mode before telling the client that it is willing to upgrade
-%% and before calling ssl:ssl_accept/2. These clauses are
-%% here to make sure it is the users problem and not owers if
-%% they upgrade an active socket.
-handle_sync_event({start,_}, _, connection, State) ->
- {reply, connected, connection, State, get_timeout(State)};
-
-handle_sync_event({start, Timeout}, StartFrom, StateName, #state{role = Role, ssl_options = SslOpts} = State0) ->
- try
- State = ssl_config(SslOpts, Role, State0),
- Timer = start_or_recv_cancel_timer(Timeout, StartFrom),
- {next_state, StateName, State#state{start_or_recv_from = StartFrom,
- timer = Timer}, get_timeout(State)}
- catch throw:Error ->
- {stop, normal, {error, Error}, State0}
- end;
-
-handle_sync_event({close, _} = Close, _, StateName, #state{protocol_cb = Connection} = State) ->
+ {keep_state_and_data, [postpone]};
+handle_call({close, {Pid, Timeout}}, From, StateName, State0, Connection) when is_pid(Pid) ->
+ %% terminate will send close alert to peer
+ State = State0#state{downgrade = {Pid, From}},
+ Connection:terminate(downgrade, StateName, State),
+ %% User downgrades connection
+ %% When downgrading an TLS connection to a transport connection
+ %% we must recive the close alert from the peer before releasing the
+ %% transport socket.
+ {next_state, downgrade, State, [{timeout, Timeout, downgrade}]};
+handle_call({close, _} = Close, From, StateName, State, Connection) ->
%% Run terminate before returning so that the reuseaddr
- %% inet-option and possible downgrade will work as intended.
+ %% inet-option
Result = Connection:terminate(Close, StateName, State),
- {stop, normal, Result, State#state{terminated = true}};
-
-handle_sync_event({shutdown, How0}, _, StateName,
- #state{transport_cb = Transport,
- negotiated_version = Version,
- connection_states = ConnectionStates,
- socket = Socket} = State) ->
+ {stop_and_reply, {shutdown, normal},
+ {reply, From, Result}, State};
+handle_call({shutdown, How0}, From, _,
+ #state{transport_cb = Transport,
+ negotiated_version = Version,
+ connection_states = ConnectionStates,
+ socket = Socket}, _) ->
case How0 of
How when How == write; How == both ->
Alert = ?ALERT_REC(?WARNING, ?CLOSE_NOTIFY),
@@ -733,89 +863,50 @@ handle_sync_event({shutdown, How0}, _, StateName,
_ ->
ok
end,
-
+
case Transport:shutdown(Socket, How0) of
ok ->
- {reply, ok, StateName, State, get_timeout(State)};
+ {keep_state_and_data, [{reply, From, ok}]};
Error ->
- {stop, normal, Error, State}
+ gen_statem:reply(From, {error, Error}),
+ {stop, normal}
end;
-handle_sync_event({recv, _N, _Timeout}, _RecvFrom, StateName,
- #state{socket_options = #socket_options{active = Active}} = State) when Active =/= false ->
- {reply, {error, einval}, StateName, State, get_timeout(State)};
-handle_sync_event({recv, N, Timeout}, RecvFrom, connection = StateName,
- #state{protocol_cb = Connection} = State0) ->
- Timer = start_or_recv_cancel_timer(Timeout, RecvFrom),
- Connection:passive_receive(State0#state{bytes_to_read = N,
- start_or_recv_from = RecvFrom, timer = Timer}, StateName);
-%% Doing renegotiate wait with handling request until renegotiate is
-%% finished. Will be handled by next_state_is_connection/2.
-handle_sync_event({recv, N, Timeout}, RecvFrom, StateName, State) ->
+handle_call({recv, _N, _Timeout}, From, _,
+ #state{socket_options =
+ #socket_options{active = Active}}, _) when Active =/= false ->
+ {keep_state_and_data, [{reply, From, {error, einval}}]};
+handle_call({recv, N, Timeout}, RecvFrom, StateName, State, _) ->
+ %% Doing renegotiate wait with handling request until renegotiate is
+ %% finished.
Timer = start_or_recv_cancel_timer(Timeout, RecvFrom),
{next_state, StateName, State#state{bytes_to_read = N, start_or_recv_from = RecvFrom,
- timer = Timer},
- get_timeout(State)};
-handle_sync_event({new_user, User}, _From, StateName,
- State =#state{user_application = {OldMon, _}}) ->
+ timer = Timer},
+ [{next_event, internal, {recv, RecvFrom}}]};
+handle_call({new_user, User}, From, StateName,
+ State =#state{user_application = {OldMon, _}}, _) ->
NewMon = erlang:monitor(process, User),
erlang:demonitor(OldMon, [flush]),
- {reply, ok, StateName, State#state{user_application = {NewMon,User}},
- get_timeout(State)};
-handle_sync_event({get_opts, OptTags}, _From, StateName,
+ {next_state, StateName, State#state{user_application = {NewMon,User}},
+ [{reply, From, ok}]};
+handle_call({get_opts, OptTags}, From, _,
#state{socket = Socket,
transport_cb = Transport,
- socket_options = SockOpts} = State) ->
+ socket_options = SockOpts}, _) ->
OptsReply = get_socket_opts(Transport, Socket, OptTags, SockOpts, []),
- {reply, OptsReply, StateName, State, get_timeout(State)};
-handle_sync_event(negotiated_protocol, _From, StateName, #state{negotiated_protocol = undefined} = State) ->
- {reply, {error, protocol_not_negotiated}, StateName, State, get_timeout(State)};
-handle_sync_event(negotiated_protocol, _From, StateName, #state{negotiated_protocol = SelectedProtocol} = State) ->
- {reply, {ok, SelectedProtocol}, StateName, State, get_timeout(State)};
-handle_sync_event({set_opts, Opts0}, _From, StateName0,
- #state{socket_options = Opts1,
- protocol_cb = Connection,
+ {keep_state_and_data, [{reply, From, OptsReply}]};
+handle_call({set_opts, Opts0}, From, StateName,
+ #state{socket_options = Opts1,
socket = Socket,
- transport_cb = Transport,
- user_data_buffer = Buffer} = State0) ->
+ transport_cb = Transport} = State0, _) ->
{Reply, Opts} = set_socket_opts(Transport, Socket, Opts0, Opts1, []),
- State1 = State0#state{socket_options = Opts},
- if
- Opts#socket_options.active =:= false ->
- {reply, Reply, StateName0, State1, get_timeout(State1)};
- Buffer =:= <<>>, Opts1#socket_options.active =:= false ->
- %% Need data, set active once
- {Record, State2} = Connection:next_record_if_active(State1),
- %% Note: Renogotiation may cause StateName0 =/= StateName
- case Connection:next_state(StateName0, StateName0, Record, State2) of
- {next_state, StateName, State, Timeout} ->
- {reply, Reply, StateName, State, Timeout};
- {stop, Reason, State} ->
- {stop, Reason, State}
- end;
- Buffer =:= <<>> ->
- %% Active once already set
- {reply, Reply, StateName0, State1, get_timeout(State1)};
- true ->
- case Connection:read_application_data(<<>>, State1) of
- Stop = {stop,_,_} ->
- Stop;
- {Record, State2} ->
- %% Note: Renogotiation may cause StateName0 =/= StateName
- case Connection:next_state(StateName0, StateName0, Record, State2) of
- {next_state, StateName, State, Timeout} ->
- {reply, Reply, StateName, State, Timeout};
- {stop, Reason, State} ->
- {stop, Reason, State}
- end
- end
- end;
-handle_sync_event(renegotiate, From, connection, #state{protocol_cb = Connection} = State) ->
- Connection:renegotiate(State#state{renegotiation = {true, From}});
-handle_sync_event(renegotiate, _, StateName, State) ->
- {reply, {error, already_renegotiating}, StateName, State, get_timeout(State)};
-handle_sync_event({prf, Secret, Label, Seed, WantedLength}, _, StateName,
- #state{connection_states = ConnectionStates,
- negotiated_version = Version} = State) ->
+ State = State0#state{socket_options = Opts},
+ handle_active_option(Opts#socket_options.active, StateName, From, Reply, State);
+
+handle_call(renegotiate, From, StateName, _, _) when StateName =/= connection ->
+ {keep_state_and_data, [{reply, From, {error, already_renegotiating}}]};
+handle_call({prf, Secret, Label, Seed, WantedLength}, From, _,
+ #state{connection_states = ConnectionStates,
+ negotiated_version = Version}, _) ->
ConnectionState =
ssl_record:current_connection_state(ConnectionStates, read),
SecParams = ConnectionState#connection_state.security_parameters,
@@ -838,27 +929,9 @@ handle_sync_event({prf, Secret, Label, Seed, WantedLength}, _, StateName,
exit:_ -> {error, badarg};
error:Reason -> {error, Reason}
end,
- {reply, Reply, StateName, State, get_timeout(State)};
-handle_sync_event(session_info, _, StateName,
- #state{session = #session{session_id = Id,
- cipher_suite = Suite}} = State) ->
- {reply, [{session_id, Id},
- {cipher_suite, ssl_cipher:erl_suite_definition(Suite)}],
- StateName, State, get_timeout(State)};
-handle_sync_event(peer_certificate, _, StateName,
- #state{session = #session{peer_certificate = Cert}}
- = State) ->
- {reply, {ok, Cert}, StateName, State, get_timeout(State)};
-handle_sync_event(connection_information, _, StateName, State) ->
- Info = connection_info(State),
- {reply, {ok, Info}, StateName, State, get_timeout(State)}.
-
-connection_info(#state{sni_hostname = SNIHostname,
- session = #session{cipher_suite = CipherSuite},
- negotiated_version = Version, ssl_options = Opts}) ->
- [{protocol, tls_record:protocol_version(Version)},
- {cipher_suite, ssl_cipher:erl_suite_definition(CipherSuite)},
- {sni_hostname, SNIHostname}] ++ ssl_options_list(Opts).
+ {keep_state_and_data, [{reply, From, Reply}]};
+handle_call(_,_,_,_,_) ->
+ {keep_state_and_data, [postpone]}.
handle_info({ErrorTag, Socket, econnaborted}, StateName,
#state{socket = Socket, transport_cb = Transport,
@@ -866,7 +939,8 @@ handle_info({ErrorTag, Socket, econnaborted}, StateName,
protocol_cb = Connection,
error_tag = ErrorTag,
tracker = Tracker} = State) when StateName =/= connection ->
- Connection:alert_user(Transport, Tracker,Socket, StartFrom, ?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), Role),
+ Connection:alert_user(Transport, Tracker,Socket,
+ StartFrom, ?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), Role),
{stop, normal, State};
handle_info({ErrorTag, Socket, Reason}, StateName, #state{socket = Socket,
@@ -889,47 +963,46 @@ handle_info({'EXIT', Socket, normal}, _StateName, #state{socket = Socket} = Stat
{stop, {shutdown, transport_closed}, State};
handle_info(allow_renegotiate, StateName, State) ->
- {next_state, StateName, State#state{allow_renegotiate = true}, get_timeout(State)};
+ {next_state, StateName, State#state{allow_renegotiate = true}};
handle_info({cancel_start_or_recv, StartFrom}, StateName,
#state{renegotiation = {false, first}} = State) when StateName =/= connection ->
- gen_fsm:reply(StartFrom, {error, timeout}),
- {stop, {shutdown, user_timeout}, State#state{timer = undefined}};
+ {stop_and_reply, {shutdown, user_timeout},
+ {reply, StartFrom, {error, timeout}}, State#state{timer = undefined}};
-handle_info({cancel_start_or_recv, RecvFrom}, StateName, #state{start_or_recv_from = RecvFrom} = State) ->
- gen_fsm:reply(RecvFrom, {error, timeout}),
+handle_info({cancel_start_or_recv, RecvFrom}, StateName,
+ #state{start_or_recv_from = RecvFrom} = State) when RecvFrom =/= undefined ->
{next_state, StateName, State#state{start_or_recv_from = undefined,
bytes_to_read = undefined,
- timer = undefined}, get_timeout(State)};
+ timer = undefined}, [{reply, RecvFrom, {error, timeout}}]};
handle_info({cancel_start_or_recv, _RecvFrom}, StateName, State) ->
- {next_state, StateName, State#state{timer = undefined}, get_timeout(State)};
+ {next_state, StateName, State#state{timer = undefined}};
handle_info(Msg, StateName, #state{socket = Socket, error_tag = Tag} = State) ->
Report = io_lib:format("SSL: Got unexpected info: ~p ~n", [{Msg, Tag, Socket}]),
error_logger:info_report(Report),
- {next_state, StateName, State, get_timeout(State)}.
-
+ {next_state, StateName, State}.
+%%--------------------------------------------------------------------
+%% gen_statem callbacks
+%%--------------------------------------------------------------------
terminate(_, _, #state{terminated = true}) ->
%% Happens when user closes the connection using ssl:close/1
%% we want to guarantee that Transport:close has been called
%% when ssl:close/1 returns.
ok;
+
terminate({shutdown, transport_closed} = Reason,
- _StateName, #state{send_queue = SendQueue, protocol_cb = Connection,
- socket = Socket, transport_cb = Transport,
- renegotiation = Renegotiate} = State) ->
+ _StateName, #state{protocol_cb = Connection,
+ socket = Socket, transport_cb = Transport} = State) ->
handle_trusted_certs_db(State),
- notify_senders(SendQueue),
- notify_renegotiater(Renegotiate),
Connection:close(Reason, Socket, Transport, undefined, undefined);
-terminate({shutdown, own_alert}, _StateName, #state{send_queue = SendQueue, protocol_cb = Connection,
- socket = Socket, transport_cb = Transport,
- renegotiation = Renegotiate} = State) ->
+terminate({shutdown, own_alert}, _StateName, #state{%%send_queue = SendQueue,
+ protocol_cb = Connection,
+ socket = Socket,
+ transport_cb = Transport} = State) ->
handle_trusted_certs_db(State),
- notify_senders(SendQueue),
- notify_renegotiater(Renegotiate),
case application:get_env(ssl, alert_timeout) of
{ok, Timeout} when is_integer(Timeout) ->
Connection:close({timeout, Timeout}, Socket, Transport, undefined, undefined);
@@ -940,26 +1013,22 @@ terminate(Reason, connection, #state{negotiated_version = Version,
protocol_cb = Connection,
connection_states = ConnectionStates0,
ssl_options = #ssl_options{padding_check = Check},
- transport_cb = Transport, socket = Socket,
- send_queue = SendQueue, renegotiation = Renegotiate} = State) ->
+ transport_cb = Transport, socket = Socket
+ } = State) ->
handle_trusted_certs_db(State),
- notify_senders(SendQueue),
- notify_renegotiater(Renegotiate),
{BinAlert, ConnectionStates} = terminate_alert(Reason, Version, ConnectionStates0),
Transport:send(Socket, BinAlert),
Connection:close(Reason, Socket, Transport, ConnectionStates, Check);
terminate(Reason, _StateName, #state{transport_cb = Transport, protocol_cb = Connection,
- socket = Socket, send_queue = SendQueue,
- renegotiation = Renegotiate} = State) ->
+ socket = Socket
+ } = State) ->
handle_trusted_certs_db(State),
- notify_senders(SendQueue),
- notify_renegotiater(Renegotiate),
Connection:close(Reason, Socket, Transport, undefined, undefined).
-format_status(normal, [_, State]) ->
- [{data, [{"StateData", State}]}];
-format_status(terminate, [_, State]) ->
+format_status(normal, [_, StateName, State]) ->
+ [{data, [{"State", {StateName, State}}]}];
+format_status(terminate, [_, StateName, State]) ->
SslOptions = (State#state.ssl_options),
NewOptions = SslOptions#ssl_options{password = ?SECRET_PRINTOUT,
cert = ?SECRET_PRINTOUT,
@@ -968,39 +1037,29 @@ format_status(terminate, [_, State]) ->
dh = ?SECRET_PRINTOUT,
psk_identity = ?SECRET_PRINTOUT,
srp_identity = ?SECRET_PRINTOUT},
- [{data, [{"StateData", State#state{connection_states = ?SECRET_PRINTOUT,
- protocol_buffers = ?SECRET_PRINTOUT,
- user_data_buffer = ?SECRET_PRINTOUT,
- tls_handshake_history = ?SECRET_PRINTOUT,
- session = ?SECRET_PRINTOUT,
- private_key = ?SECRET_PRINTOUT,
- diffie_hellman_params = ?SECRET_PRINTOUT,
- diffie_hellman_keys = ?SECRET_PRINTOUT,
- srp_params = ?SECRET_PRINTOUT,
- srp_keys = ?SECRET_PRINTOUT,
- premaster_secret = ?SECRET_PRINTOUT,
- ssl_options = NewOptions
- }}]}].
+ [{data, [{"State", {StateName, State#state{connection_states = ?SECRET_PRINTOUT,
+ protocol_buffers = ?SECRET_PRINTOUT,
+ user_data_buffer = ?SECRET_PRINTOUT,
+ tls_handshake_history = ?SECRET_PRINTOUT,
+ session = ?SECRET_PRINTOUT,
+ private_key = ?SECRET_PRINTOUT,
+ diffie_hellman_params = ?SECRET_PRINTOUT,
+ diffie_hellman_keys = ?SECRET_PRINTOUT,
+ srp_params = ?SECRET_PRINTOUT,
+ srp_keys = ?SECRET_PRINTOUT,
+ premaster_secret = ?SECRET_PRINTOUT,
+ ssl_options = NewOptions,
+ flight_buffer = ?SECRET_PRINTOUT}
+ }}]}].
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-ssl_config(Opts, Role, State) ->
- {ok, Ref, CertDbHandle, FileRefHandle, CacheHandle, CRLDbInfo, OwnCert, Key, DHParams} =
- ssl_config:init(Opts, Role),
- Handshake = ssl_handshake:init_handshake_history(),
- TimeStamp = erlang:monotonic_time(),
- Session = State#state.session,
- State#state{tls_handshake_history = Handshake,
- session = Session#session{own_certificate = OwnCert,
- time_stamp = TimeStamp},
- file_ref_db = FileRefHandle,
- cert_db_ref = Ref,
- cert_db = CertDbHandle,
- crl_db = CRLDbInfo,
- session_cache = CacheHandle,
- private_key = Key,
- diffie_hellman_params = DHParams,
- ssl_options = Opts}.
+connection_info(#state{sni_hostname = SNIHostname,
+ session = #session{cipher_suite = CipherSuite},
+ negotiated_version = Version, ssl_options = Opts}) ->
+ [{protocol, tls_record:protocol_version(Version)},
+ {cipher_suite, ssl_cipher:erl_suite_definition(CipherSuite)},
+ {sni_hostname, SNIHostname}] ++ ssl_options_list(Opts).
do_server_hello(Type, #hello_extensions{next_protocol_negotiation = NextProtocols} =
ServerHelloExt,
@@ -1034,7 +1093,7 @@ new_server_hello(#server_hello{cipher_suite = CipherSuite,
cipher_suite = CipherSuite,
compression_method = Compression},
{Record, State} = Connection:next_record(State2#state{session = Session}),
- Connection:next_state(hello, certify, Record, State)
+ Connection:next_event(certify, Record, State)
catch
#alert{} = Alert ->
Connection:handle_own_alert(Alert, Version, hello, State0)
@@ -1052,7 +1111,7 @@ resumed_server_hello(#state{session = Session,
State2 =
finalize_handshake(State1, abbreviated, Connection),
{Record, State} = Connection:next_record(State2),
- Connection:next_state(hello, abbreviated, Record, State);
+ Connection:next_event(abbreviated, Record, State);
#alert{} = Alert ->
Connection:handle_own_alert(Alert, Version, hello, State0)
end.
@@ -1060,7 +1119,7 @@ resumed_server_hello(#state{session = Session,
server_hello(ServerHello, State0, Connection) ->
CipherSuite = ServerHello#server_hello.cipher_suite,
{KeyAlgorithm, _, _, _} = ssl_cipher:suite_definition(CipherSuite),
- State = Connection:send_handshake(ServerHello, State0),
+ State = Connection:queue_handshake(ServerHello, State0),
State#state{key_algorithm = KeyAlgorithm}.
server_hello_done(State, Connection) ->
@@ -1077,7 +1136,7 @@ handle_peer_cert(Role, PeerCert, PublicKeyInfo,
State2 = handle_peer_cert_key(Role, PeerCert, PublicKeyInfo, KeyAlg, State1),
{Record, State} = Connection:next_record(State2),
- Connection:next_state(certify, certify, Record, State).
+ Connection:next_event(certify, Record, State).
handle_peer_cert_key(client, _,
{?'id-ecPublicKey', #'ECPoint'{point = _ECPoint} = PublicKey,
@@ -1106,7 +1165,7 @@ certify_client(#state{client_certificate_requested = true, role = client,
session = #session{own_certificate = OwnCert}}
= State, Connection) ->
Certificate = ssl_handshake:certificate(OwnCert, CertDbHandle, CertDbRef, client),
- Connection:send_handshake(Certificate, State);
+ Connection:queue_handshake(Certificate, State);
certify_client(#state{client_certificate_requested = false} = State, _) ->
State.
@@ -1122,7 +1181,7 @@ verify_client_cert(#state{client_certificate_requested = true, role = client,
case ssl_handshake:client_certificate_verify(OwnCert, MasterSecret,
Version, HashSign, PrivateKey, Handshake0) of
#certificate_verify{} = Verified ->
- Connection:send_handshake(Verified, State);
+ Connection:queue_handshake(Verified, State);
ignore ->
State;
#alert{} = Alert ->
@@ -1140,7 +1199,7 @@ client_certify_and_key_exchange(#state{negotiated_version = Version} =
%% Reinitialize
client_certificate_requested = false},
{Record, State} = Connection:next_record(State3),
- Connection:next_state(certify, cipher, Record, State)
+ Connection:next_event(cipher, Record, State)
catch
throw:#alert{} = Alert ->
Connection:handle_own_alert(Alert, Version, certify, State0)
@@ -1174,20 +1233,25 @@ certify_client_key_exchange(#client_ec_diffie_hellman_public{dh_public = ClientP
calculate_master_secret(PremasterSecret, State, Connection, certify, cipher);
certify_client_key_exchange(#client_psk_identity{} = ClientKey,
- #state{ssl_options = #ssl_options{user_lookup_fun = PSKLookup}} = State0, Connection) ->
+ #state{ssl_options =
+ #ssl_options{user_lookup_fun = PSKLookup}} = State0,
+ Connection) ->
PremasterSecret = ssl_handshake:premaster_secret(ClientKey, PSKLookup),
calculate_master_secret(PremasterSecret, State0, Connection, certify, cipher);
certify_client_key_exchange(#client_dhe_psk_identity{} = ClientKey,
#state{diffie_hellman_params = #'DHParameter'{} = Params,
diffie_hellman_keys = {_, ServerDhPrivateKey},
- ssl_options = #ssl_options{user_lookup_fun = PSKLookup}} = State0,
+ ssl_options =
+ #ssl_options{user_lookup_fun = PSKLookup}} = State0,
Connection) ->
- PremasterSecret = ssl_handshake:premaster_secret(ClientKey, ServerDhPrivateKey, Params, PSKLookup),
+ PremasterSecret =
+ ssl_handshake:premaster_secret(ClientKey, ServerDhPrivateKey, Params, PSKLookup),
calculate_master_secret(PremasterSecret, State0, Connection, certify, cipher);
certify_client_key_exchange(#client_rsa_psk_identity{} = ClientKey,
#state{private_key = Key,
- ssl_options = #ssl_options{user_lookup_fun = PSKLookup}} = State0,
+ ssl_options =
+ #ssl_options{user_lookup_fun = PSKLookup}} = State0,
Connection) ->
PremasterSecret = ssl_handshake:premaster_secret(ClientKey, Key, PSKLookup),
calculate_master_secret(PremasterSecret, State0, Connection, certify, cipher);
@@ -1199,8 +1263,11 @@ certify_client_key_exchange(#client_srp_public{} = ClientKey,
PremasterSecret = ssl_handshake:premaster_secret(ClientKey, Key, Params),
calculate_master_secret(PremasterSecret, State0, Connection, certify, cipher).
-certify_server(#state{key_algorithm = Algo} = State, _)
- when Algo == dh_anon; Algo == ecdh_anon; Algo == psk; Algo == dhe_psk; Algo == srp_anon ->
+certify_server(#state{key_algorithm = Algo} = State, _) when Algo == dh_anon;
+ Algo == ecdh_anon;
+ Algo == psk;
+ Algo == dhe_psk;
+ Algo == srp_anon ->
State;
certify_server(#state{cert_db = CertDbHandle,
@@ -1208,7 +1275,7 @@ certify_server(#state{cert_db = CertDbHandle,
session = #session{own_certificate = OwnCert}} = State, Connection) ->
case ssl_handshake:certificate(OwnCert, CertDbHandle, CertDbRef, server) of
Cert = #certificate{} ->
- Connection:send_handshake(Cert, State);
+ Connection:queue_handshake(Cert, State);
Alert = #alert{} ->
throw(Alert)
end.
@@ -1235,7 +1302,7 @@ key_exchange(#state{role = server, key_algorithm = Algo,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
- State = Connection:send_handshake(Msg, State0),
+ State = Connection:queue_handshake(Msg, State0),
State#state{diffie_hellman_keys = DHKeys};
key_exchange(#state{role = server, private_key = Key, key_algorithm = Algo} = State, _)
@@ -1260,7 +1327,7 @@ key_exchange(#state{role = server, key_algorithm = Algo,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
- State = Connection:send_handshake(Msg, State0),
+ State = Connection:queue_handshake(Msg, State0),
State#state{diffie_hellman_keys = ECDHKeys};
key_exchange(#state{role = server, key_algorithm = psk,
@@ -1282,7 +1349,7 @@ key_exchange(#state{role = server, key_algorithm = psk,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = server, key_algorithm = dhe_psk,
ssl_options = #ssl_options{psk_identity = PskIdentityHint},
@@ -1298,11 +1365,12 @@ key_exchange(#state{role = server, key_algorithm = dhe_psk,
SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = ssl_handshake:key_exchange(server, Version, {dhe_psk, PskIdentityHint, DHKeys, Params,
- HashSignAlgo, ClientRandom,
- ServerRandom,
- PrivateKey}),
- State = Connection:send_handshake(Msg, State0),
+ Msg = ssl_handshake:key_exchange(server, Version, {dhe_psk,
+ PskIdentityHint, DHKeys, Params,
+ HashSignAlgo, ClientRandom,
+ ServerRandom,
+ PrivateKey}),
+ State = Connection:queue_handshake(Msg, State0),
State#state{diffie_hellman_keys = DHKeys};
key_exchange(#state{role = server, key_algorithm = rsa_psk,
@@ -1324,7 +1392,7 @@ key_exchange(#state{role = server, key_algorithm = rsa_psk,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = server, key_algorithm = Algo,
ssl_options = #ssl_options{user_lookup_fun = LookupFun},
@@ -1353,7 +1421,7 @@ key_exchange(#state{role = server, key_algorithm = Algo,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
- State = Connection:send_handshake(Msg, State0),
+ State = Connection:queue_handshake(Msg, State0),
State#state{srp_params = SrpParams,
srp_keys = Keys};
@@ -1363,7 +1431,7 @@ key_exchange(#state{role = client,
negotiated_version = Version,
premaster_secret = PremasterSecret} = State0, Connection) ->
Msg = rsa_key_exchange(Version, PremasterSecret, PublicKeyInfo),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
key_algorithm = Algorithm,
@@ -1374,7 +1442,7 @@ key_exchange(#state{role = client,
Algorithm == dhe_rsa;
Algorithm == dh_anon ->
Msg = ssl_handshake:key_exchange(client, Version, {dh, DhPubKey}),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
key_algorithm = Algorithm,
@@ -1384,14 +1452,15 @@ key_exchange(#state{role = client,
Algorithm == ecdh_ecdsa; Algorithm == ecdh_rsa;
Algorithm == ecdh_anon ->
Msg = ssl_handshake:key_exchange(client, Version, {ecdh, Keys}),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
ssl_options = SslOpts,
key_algorithm = psk,
negotiated_version = Version} = State0, Connection) ->
- Msg = ssl_handshake:key_exchange(client, Version, {psk, SslOpts#ssl_options.psk_identity}),
- Connection:send_handshake(Msg, State0);
+ Msg = ssl_handshake:key_exchange(client, Version,
+ {psk, SslOpts#ssl_options.psk_identity}),
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
ssl_options = SslOpts,
@@ -1399,8 +1468,9 @@ key_exchange(#state{role = client,
negotiated_version = Version,
diffie_hellman_keys = {DhPubKey, _}} = State0, Connection) ->
Msg = ssl_handshake:key_exchange(client, Version,
- {dhe_psk, SslOpts#ssl_options.psk_identity, DhPubKey}),
- Connection:send_handshake(Msg, State0);
+ {dhe_psk,
+ SslOpts#ssl_options.psk_identity, DhPubKey}),
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
ssl_options = SslOpts,
key_algorithm = rsa_psk,
@@ -1410,7 +1480,7 @@ key_exchange(#state{role = client,
= State0, Connection) ->
Msg = rsa_psk_key_exchange(Version, SslOpts#ssl_options.psk_identity,
PremasterSecret, PublicKeyInfo),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
key_algorithm = Algorithm,
@@ -1421,7 +1491,7 @@ key_exchange(#state{role = client,
Algorithm == srp_rsa;
Algorithm == srp_anon ->
Msg = ssl_handshake:key_exchange(client, Version, {srp, ClientPubKey}),
- Connection:send_handshake(Msg, State0).
+ Connection:queue_handshake(Msg, State0).
rsa_key_exchange(Version, PremasterSecret, PublicKeyInfo = {Algorithm, _, _})
when Algorithm == ?rsaEncryption;
@@ -1437,9 +1507,10 @@ rsa_key_exchange(Version, PremasterSecret, PublicKeyInfo = {Algorithm, _, _})
{premaster_secret, PremasterSecret,
PublicKeyInfo});
rsa_key_exchange(_, _, _) ->
- throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE)).
+ throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE, pub_key_is_not_rsa)).
-rsa_psk_key_exchange(Version, PskIdentity, PremasterSecret, PublicKeyInfo = {Algorithm, _, _})
+rsa_psk_key_exchange(Version, PskIdentity, PremasterSecret,
+ PublicKeyInfo = {Algorithm, _, _})
when Algorithm == ?rsaEncryption;
Algorithm == ?md2WithRSAEncryption;
Algorithm == ?md5WithRSAEncryption;
@@ -1453,7 +1524,7 @@ rsa_psk_key_exchange(Version, PskIdentity, PremasterSecret, PublicKeyInfo = {Alg
{psk_premaster_secret, PskIdentity, PremasterSecret,
PublicKeyInfo});
rsa_psk_key_exchange(_, _, _, _) ->
- throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE)).
+ throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE, pub_key_is_not_rsa)).
request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer,
signature_algs = SupportedHashSigns},
@@ -1467,17 +1538,18 @@ request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer,
HashSigns = ssl_handshake:available_signature_algs(SupportedHashSigns, Version, [Version]),
Msg = ssl_handshake:certificate_request(CipherSuite, CertDbHandle, CertDbRef,
HashSigns, Version),
- State = Connection:send_handshake(Msg, State0),
+ State = Connection:queue_handshake(Msg, State0),
State#state{client_certificate_requested = true};
request_client_cert(#state{ssl_options = #ssl_options{verify = verify_none}} =
State, _) ->
State.
-calculate_master_secret(PremasterSecret, #state{negotiated_version = Version,
- connection_states = ConnectionStates0,
- session = Session0} = State0, Connection,
- Current, Next) ->
+calculate_master_secret(PremasterSecret,
+ #state{negotiated_version = Version,
+ connection_states = ConnectionStates0,
+ session = Session0} = State0, Connection,
+ _Current, Next) ->
case ssl_handshake:master_secret(record_cb(Connection), Version, PremasterSecret,
ConnectionStates0, server) of
{MasterSecret, ConnectionStates} ->
@@ -1485,7 +1557,7 @@ calculate_master_secret(PremasterSecret, #state{negotiated_version = Version,
State1 = State0#state{connection_states = ConnectionStates,
session = Session},
{Record, State} = Connection:next_record(State1),
- Connection:next_state(Current, Next, Record, State);
+ Connection:next_event(Next, Record, State);
#alert{} = Alert ->
Connection:handle_own_alert(Alert, Version, certify, State0)
end.
@@ -1510,10 +1582,10 @@ next_protocol(#state{expecting_next_protocol_negotiation = false} = State, _) ->
State;
next_protocol(#state{negotiated_protocol = NextProtocol} = State0, Connection) ->
NextProtocolMessage = ssl_handshake:next_protocol(NextProtocol),
- Connection:send_handshake(NextProtocolMessage, State0).
+ Connection:queue_handshake(NextProtocolMessage, State0).
cipher_protocol(State, Connection) ->
- Connection:send_change_cipher(#change_cipher_spec{}, State).
+ Connection:queue_change_cipher(#change_cipher_spec{}, State).
finished(#state{role = Role, negotiated_version = Version,
session = Session,
@@ -1536,31 +1608,36 @@ save_verify_data(client, #finished{verify_data = Data}, ConnectionStates, abbrev
save_verify_data(server, #finished{verify_data = Data}, ConnectionStates, abbreviated) ->
ssl_record:set_server_verify_data(current_write, Data, ConnectionStates).
-calculate_secret(#server_dh_params{dh_p = Prime, dh_g = Base, dh_y = ServerPublicDhKey} = Params,
- State, Connection) ->
+calculate_secret(#server_dh_params{dh_p = Prime, dh_g = Base,
+ dh_y = ServerPublicDhKey} = Params,
+ State, Connection) ->
Keys = {_, PrivateDhKey} = crypto:generate_key(dh, [Prime, Base]),
PremasterSecret =
ssl_handshake:premaster_secret(ServerPublicDhKey, PrivateDhKey, Params),
calculate_master_secret(PremasterSecret,
- State#state{diffie_hellman_keys = Keys}, Connection, certify, certify);
+ State#state{diffie_hellman_keys = Keys},
+ Connection, certify, certify);
calculate_secret(#server_ecdh_params{curve = ECCurve, public = ECServerPubKey},
State, Connection) ->
ECDHKeys = public_key:generate_key(ECCurve),
- PremasterSecret = ssl_handshake:premaster_secret(#'ECPoint'{point = ECServerPubKey}, ECDHKeys),
+ PremasterSecret =
+ ssl_handshake:premaster_secret(#'ECPoint'{point = ECServerPubKey}, ECDHKeys),
calculate_master_secret(PremasterSecret,
- State#state{diffie_hellman_keys = ECDHKeys}, Connection, certify, certify);
+ State#state{diffie_hellman_keys = ECDHKeys},
+ Connection, certify, certify);
calculate_secret(#server_psk_params{
- hint = IdentityHint},
+ hint = IdentityHint},
State0, Connection) ->
%% store for later use
{Record, State} = Connection:next_record(State0#state{psk_identity = IdentityHint}),
- Connection:next_state(certify, certify, Record, State);
+ Connection:next_event(certify, Record, State);
calculate_secret(#server_dhe_psk_params{
dh_params = #server_dh_params{dh_p = Prime, dh_g = Base}} = ServerKey,
- #state{ssl_options = #ssl_options{user_lookup_fun = PSKLookup}} = State, Connection) ->
+ #state{ssl_options = #ssl_options{user_lookup_fun = PSKLookup}} =
+ State, Connection) ->
Keys = {_, PrivateDhKey} =
crypto:generate_key(dh, [Prime, Base]),
PremasterSecret = ssl_handshake:premaster_secret(ServerKey, PrivateDhKey, PSKLookup),
@@ -1568,10 +1645,12 @@ calculate_secret(#server_dhe_psk_params{
Connection, certify, certify);
calculate_secret(#server_srp_params{srp_n = Prime, srp_g = Generator} = ServerKey,
- #state{ssl_options = #ssl_options{srp_identity = SRPId}} = State, Connection) ->
+ #state{ssl_options = #ssl_options{srp_identity = SRPId}} = State,
+ Connection) ->
Keys = generate_srp_client_keys(Generator, Prime, 0),
PremasterSecret = ssl_handshake:premaster_secret(ServerKey, Keys, SRPId),
- calculate_master_secret(PremasterSecret, State#state{srp_keys = Keys}, Connection, certify, certify).
+ calculate_master_secret(PremasterSecret, State#state{srp_keys = Keys}, Connection,
+ certify, certify).
master_secret(#alert{} = Alert, _) ->
Alert;
@@ -1627,21 +1706,23 @@ handle_srp_identity(Username, {Fun, UserState}) ->
end.
-cipher_role(client, Data, Session, #state{connection_states = ConnectionStates0} = State,
+cipher_role(client, Data, Session, #state{connection_states = ConnectionStates0} = State0,
Connection) ->
- ConnectionStates = ssl_record:set_server_verify_data(current_both, Data, ConnectionStates0),
- Connection:next_state_connection(cipher,
- ack_connection(
- State#state{session = Session,
- connection_states = ConnectionStates}));
-
+ ConnectionStates = ssl_record:set_server_verify_data(current_both, Data,
+ ConnectionStates0),
+ {Record, State} = prepare_connection(State0#state{session = Session,
+ connection_states = ConnectionStates},
+ Connection),
+ Connection:next_event(connection, Record, State);
cipher_role(server, Data, Session, #state{connection_states = ConnectionStates0} = State0,
Connection) ->
- ConnectionStates1 = ssl_record:set_client_verify_data(current_read, Data, ConnectionStates0),
- State =
+ ConnectionStates1 = ssl_record:set_client_verify_data(current_read, Data,
+ ConnectionStates0),
+ State1 =
finalize_handshake(State0#state{connection_states = ConnectionStates1,
session = Session}, cipher, Connection),
- Connection:next_state_connection(cipher, ack_connection(State#state{session = Session})).
+ {Record, State} = prepare_connection(State1, Connection),
+ Connection:next_event(connection, Record, State).
select_curve(#state{client_ecc = {[Curve|_], _}}) ->
{namedCurve, Curve};
@@ -1675,8 +1756,8 @@ record_cb(tls_connection) ->
record_cb(dtls_connection) ->
dtls_record.
-sync_send_all_state_event(FsmPid, Event) ->
- try gen_fsm:sync_send_all_state_event(FsmPid, Event, infinity)
+call(FsmPid, Event) ->
+ try gen_statem:call(FsmPid, Event)
catch
exit:{noproc, _} ->
{error, closed};
@@ -1732,38 +1813,42 @@ set_socket_opts(Transport, Socket, [], SockOpts, Other) ->
{{error, {options, {socket_options, Other, Error}}}, SockOpts}
end;
-set_socket_opts(Transport,Socket, [{mode, Mode}| Opts], SockOpts, Other) when Mode == list; Mode == binary ->
+set_socket_opts(Transport,Socket, [{mode, Mode}| Opts], SockOpts, Other)
+ when Mode == list; Mode == binary ->
set_socket_opts(Transport, Socket, Opts,
SockOpts#socket_options{mode = Mode}, Other);
set_socket_opts(_, _, [{mode, _} = Opt| _], SockOpts, _) ->
{{error, {options, {socket_options, Opt}}}, SockOpts};
-set_socket_opts(Transport,Socket, [{packet, Packet}| Opts], SockOpts, Other) when Packet == raw;
- Packet == 0;
- Packet == 1;
- Packet == 2;
- Packet == 4;
- Packet == asn1;
- Packet == cdr;
- Packet == sunrm;
- Packet == fcgi;
- Packet == tpkt;
- Packet == line;
- Packet == http;
- Packet == httph;
- Packet == http_bin;
- Packet == httph_bin ->
+set_socket_opts(Transport,Socket, [{packet, Packet}| Opts], SockOpts, Other)
+ when Packet == raw;
+ Packet == 0;
+ Packet == 1;
+ Packet == 2;
+ Packet == 4;
+ Packet == asn1;
+ Packet == cdr;
+ Packet == sunrm;
+ Packet == fcgi;
+ Packet == tpkt;
+ Packet == line;
+ Packet == http;
+ Packet == httph;
+ Packet == http_bin;
+ Packet == httph_bin ->
set_socket_opts(Transport, Socket, Opts,
SockOpts#socket_options{packet = Packet}, Other);
set_socket_opts(_, _, [{packet, _} = Opt| _], SockOpts, _) ->
{{error, {options, {socket_options, Opt}}}, SockOpts};
-set_socket_opts(Transport, Socket, [{header, Header}| Opts], SockOpts, Other) when is_integer(Header) ->
+set_socket_opts(Transport, Socket, [{header, Header}| Opts], SockOpts, Other)
+ when is_integer(Header) ->
set_socket_opts(Transport, Socket, Opts,
SockOpts#socket_options{header = Header}, Other);
set_socket_opts(_, _, [{header, _} = Opt| _], SockOpts, _) ->
{{error,{options, {socket_options, Opt}}}, SockOpts};
-set_socket_opts(Transport, Socket, [{active, Active}| Opts], SockOpts, Other) when Active == once;
- Active == true;
- Active == false ->
+set_socket_opts(Transport, Socket, [{active, Active}| Opts], SockOpts, Other)
+ when Active == once;
+ Active == true;
+ Active == false ->
set_socket_opts(Transport, Socket, Opts,
SockOpts#socket_options{active = Active}, Other);
set_socket_opts(_, _, [{active, _} = Opt| _], SockOpts, _) ->
@@ -1776,11 +1861,13 @@ start_or_recv_cancel_timer(infinity, _RecvFrom) ->
start_or_recv_cancel_timer(Timeout, RecvFrom) ->
erlang:send_after(Timeout, self(), {cancel_start_or_recv, RecvFrom}).
-get_timeout(#state{ssl_options=#ssl_options{hibernate_after = undefined}}) ->
- infinity;
-get_timeout(#state{ssl_options=#ssl_options{hibernate_after = HibernateAfter}}) ->
- HibernateAfter.
-
+hibernate_after(connection = StateName,
+ #state{ssl_options=#ssl_options{hibernate_after = HibernateAfter}} = State,
+ Actions) ->
+ {next_state, StateName, State, [{timeout, HibernateAfter, hibernate} | Actions]};
+hibernate_after(StateName, State, Actions) ->
+ {next_state, StateName, State, Actions}.
+
terminate_alert(normal, Version, ConnectionStates) ->
ssl_alert:encode(?ALERT_REC(?WARNING, ?CLOSE_NOTIFY),
Version, ConnectionStates);
@@ -1790,10 +1877,12 @@ terminate_alert({Reason, _}, Version, ConnectionStates) when Reason == close;
Version, ConnectionStates);
terminate_alert(_, Version, ConnectionStates) ->
- ssl_alert:encode(?ALERT_REC(?FATAL, ?INTERNAL_ERROR),
- Version, ConnectionStates).
+ {BinAlert, _} = ssl_alert:encode(?ALERT_REC(?FATAL, ?INTERNAL_ERROR),
+ Version, ConnectionStates),
+ BinAlert.
-handle_trusted_certs_db(#state{ssl_options = #ssl_options{cacertfile = <<>>, cacerts = []}}) ->
+handle_trusted_certs_db(#state{ssl_options =
+ #ssl_options{cacertfile = <<>>, cacerts = []}}) ->
%% No trusted certs specified
ok;
handle_trusted_certs_db(#state{cert_db_ref = Ref,
@@ -1803,7 +1892,8 @@ handle_trusted_certs_db(#state{cert_db_ref = Ref,
%% with other connections and it is safe to delete them when the connection ends.
ssl_pkix_db:remove_trusted_certs(Ref, CertDb);
handle_trusted_certs_db(#state{file_ref_db = undefined}) ->
- %% Something went wrong early (typically cacertfile does not exist) so there is nothing to handle
+ %% Something went wrong early (typically cacertfile does not
+ %% exist) so there is nothing to handle
ok;
handle_trusted_certs_db(#state{cert_db_ref = Ref,
file_ref_db = RefDb,
@@ -1815,29 +1905,31 @@ handle_trusted_certs_db(#state{cert_db_ref = Ref,
ok
end.
-notify_senders(SendQueue) ->
- lists:foreach(fun({From, _}) ->
- gen_fsm:reply(From, {error, closed})
- end, queue:to_list(SendQueue)).
-
-notify_renegotiater({true, From}) when not is_atom(From) ->
- gen_fsm:reply(From, {error, closed});
-notify_renegotiater(_) ->
- ok.
+prepare_connection(#state{renegotiation = Renegotiate,
+ start_or_recv_from = RecvFrom} = State0, Connection)
+ when Renegotiate =/= {false, first},
+ RecvFrom =/= undefined ->
+ State1 = Connection:reinit_handshake_data(State0),
+ {Record, State} = Connection:next_record(State1),
+ {Record, ack_connection(State)};
+prepare_connection(State0, Connection) ->
+ State = Connection:reinit_handshake_data(State0),
+ {no_record, ack_connection(State)}.
ack_connection(#state{renegotiation = {true, Initiater}} = State)
when Initiater == internal;
Initiater == peer ->
State#state{renegotiation = undefined};
ack_connection(#state{renegotiation = {true, From}} = State) ->
- gen_fsm:reply(From, ok),
+ gen_statem:reply(From, ok),
State#state{renegotiation = undefined};
ack_connection(#state{renegotiation = {false, first},
start_or_recv_from = StartFrom,
timer = Timer} = State) when StartFrom =/= undefined ->
- gen_fsm:reply(StartFrom, connected),
+ gen_statem:reply(StartFrom, connected),
cancel_timer(Timer),
- State#state{renegotiation = undefined, start_or_recv_from = undefined, timer = undefined};
+ State#state{renegotiation = undefined,
+ start_or_recv_from = undefined, timer = undefined};
ack_connection(State) ->
State.
@@ -1858,13 +1950,14 @@ register_session(server, _, Port, #session{is_resumable = new} = Session0) ->
register_session(_, _, _, Session) ->
Session. %% Already registered
-handle_new_session(NewId, CipherSuite, Compression, #state{session = Session0,
- protocol_cb = Connection} = State0) ->
+handle_new_session(NewId, CipherSuite, Compression,
+ #state{session = Session0,
+ protocol_cb = Connection} = State0) ->
Session = Session0#session{session_id = NewId,
cipher_suite = CipherSuite,
compression_method = Compression},
{Record, State} = Connection:next_record(State0#state{session = Session}),
- Connection:next_state(hello, certify, Record, State).
+ Connection:next_event(certify, Record, State).
handle_resumed_session(SessId, #state{connection_states = ConnectionStates0,
negotiated_version = Version,
@@ -1880,13 +1973,13 @@ handle_resumed_session(SessId, #state{connection_states = ConnectionStates0,
Connection:next_record(State0#state{
connection_states = ConnectionStates,
session = Session}),
- Connection:next_state(hello, abbreviated, Record, State);
+ Connection:next_event(abbreviated, Record, State);
#alert{} = Alert ->
Connection:handle_own_alert(Alert, Version, hello, State0)
end.
make_premaster_secret({MajVer, MinVer}, rsa) ->
- Rand = ssl:random_bytes(?NUM_OF_PREMASTERSECRET_BYTES-2),
+ Rand = ssl_cipher:random_bytes(?NUM_OF_PREMASTERSECRET_BYTES-2),
<<?BYTE(MajVer), ?BYTE(MinVer), Rand/binary>>;
make_premaster_secret(_, _) ->
undefined.
@@ -1927,4 +2020,39 @@ ssl_options_list([ciphers = Key | Keys], [Value | Values], Acc) ->
ssl_options_list([Key | Keys], [Value | Values], Acc) ->
ssl_options_list(Keys, Values, [{Key, Value} | Acc]).
-
+handle_active_option(false, connection = StateName, To, Reply, State) ->
+ hibernate_after(StateName, State, [{reply, To, Reply}]);
+
+handle_active_option(_, connection = StateName0, To, Reply, #state{protocol_cb = Connection,
+ user_data_buffer = <<>>} = State0) ->
+ %% Need data, set active once
+ {Record, State1} = Connection:next_record_if_active(State0),
+ %% Note: Renogotiation may cause StateName0 =/= StateName
+ case Connection:next_event(StateName0, Record, State1) of
+ {next_state, StateName, State} ->
+ hibernate_after(StateName, State, [{reply, To, Reply}]);
+ {next_state, StateName, State, Actions} ->
+ hibernate_after(StateName, State, [{reply, To, Reply} | Actions]);
+ {stop, Reason, State} ->
+ {stop, Reason, State}
+ end;
+handle_active_option(_, StateName, To, Reply, #state{user_data_buffer = <<>>} = State) ->
+ %% Active once already set
+ {next_state, StateName, State, [{reply, To, Reply}]};
+
+%% user_data_buffer =/= <<>>
+handle_active_option(_, StateName0, To, Reply, #state{protocol_cb = Connection} = State0) ->
+ case Connection:read_application_data(<<>>, State0) of
+ {stop, Reason, State} ->
+ {stop, Reason, State};
+ {Record, State1} ->
+ %% Note: Renogotiation may cause StateName0 =/= StateName
+ case Connection:next_event(StateName0, Record, State1) of
+ {next_state, StateName, State} ->
+ hibernate_after(StateName, State, [{reply, To, Reply}]);
+ {next_state, StateName, State, Actions} ->
+ hibernate_after(StateName, State, [{reply, To, Reply} | Actions]);
+ {stop, _, _} = Stop ->
+ Stop
+ end
+ end.
diff --git a/lib/ssl/src/ssl_connection.hrl b/lib/ssl/src/ssl_connection.hrl
index 9a58f2b8f7..4b54943ddf 100644
--- a/lib/ssl/src/ssl_connection.hrl
+++ b/lib/ssl/src/ssl_connection.hrl
@@ -48,41 +48,48 @@
socket_options :: #socket_options{},
connection_states :: #connection_states{} | secret_printout(),
protocol_buffers :: term() | secret_printout() , %% #protocol_buffers{} from tls_record.hrl or dtls_recor.hrl
- tls_handshake_history :: ssl_handshake:ssl_handshake_history() | secret_printout(),
- cert_db :: reference(),
+ tls_handshake_history :: ssl_handshake:ssl_handshake_history() | secret_printout()
+ | 'undefined',
+ cert_db :: reference() | 'undefined',
session :: #session{} | secret_printout(),
session_cache :: db_handle(),
session_cache_cb :: atom(),
crl_db :: term(),
- negotiated_version :: ssl_record:ssl_version(),
+ negotiated_version :: ssl_record:ssl_version() | 'undefined',
client_certificate_requested = false :: boolean(),
key_algorithm :: ssl_cipher:key_algo(),
hashsign_algorithm = {undefined, undefined},
cert_hashsign_algorithm,
- public_key_info :: ssl_handshake:public_key_info(),
- private_key :: public_key:private_key() | secret_printout(),
+ public_key_info :: ssl_handshake:public_key_info() | 'undefined',
+ private_key :: public_key:private_key() | secret_printout() | 'undefined',
diffie_hellman_params:: #'DHParameter'{} | undefined | secret_printout(),
diffie_hellman_keys :: {PublicKey :: binary(), PrivateKey :: binary()} | #'ECPrivateKey'{} | undefined | secret_printout(),
- psk_identity :: binary(), % server psk identity hint
- srp_params :: #srp_user{} | secret_printout(),
- srp_keys ::{PublicKey :: binary(), PrivateKey :: binary()} | secret_printout(),
- premaster_secret :: binary() | secret_printout() ,
+ psk_identity :: binary() | 'undefined', % server psk identity hint
+ srp_params :: #srp_user{} | secret_printout() | 'undefined',
+ srp_keys ::{PublicKey :: binary(), PrivateKey :: binary()} | secret_printout() | 'undefined',
+ premaster_secret :: binary() | secret_printout() | 'undefined',
file_ref_db :: db_handle(),
- cert_db_ref :: certdb_ref(),
+ cert_db_ref :: certdb_ref() | 'undefined',
bytes_to_read :: undefined | integer(), %% bytes to read in passive mode
user_data_buffer :: undefined | binary() | secret_printout(),
renegotiation :: undefined | {boolean(), From::term() | internal | peer},
start_or_recv_from :: term(),
timer :: undefined | reference(), % start_or_recive_timer
- send_queue :: queue:queue(),
+ %%send_queue :: queue:queue(),
terminated = false ::boolean(),
allow_renegotiate = true ::boolean(),
expecting_next_protocol_negotiation = false ::boolean(),
expecting_finished = false ::boolean(),
negotiated_protocol = undefined :: undefined | binary(),
client_ecc, % {Curves, PointFmt}
- tracker :: pid(), %% Tracker process for listen socket
- sni_hostname = undefined
+ tracker :: pid() | 'undefined', %% Tracker process for listen socket
+ sni_hostname = undefined,
+ downgrade,
+ flight_buffer = [] :: list() %% Buffer of TLS/DTLS records, used during the TLS handshake
+ %% to when possible pack more than on TLS record into the
+ %% underlaying packet format. Introduced by DTLS - RFC 4347.
+ %% The mecahnism is also usefull in TLS although we do not
+ %% need to worry about packet loss in TLS.
}).
-define(DEFAULT_DIFFIE_HELLMAN_PARAMS,
diff --git a/lib/ssl/src/ssl_crl.erl b/lib/ssl/src/ssl_crl.erl
index faf5007b16..d9f21e04ac 100644
--- a/lib/ssl/src/ssl_crl.erl
+++ b/lib/ssl/src/ssl_crl.erl
@@ -39,13 +39,12 @@ trusted_cert_and_path(CRL, {SerialNumber, Issuer},{Db, DbRef} = DbHandle) ->
end;
trusted_cert_and_path(CRL, issuer_not_found, {Db, DbRef} = DbHandle) ->
- try find_issuer(CRL, DbHandle) of
- OtpCert ->
+ case find_issuer(CRL, DbHandle) of
+ {ok, OtpCert} ->
{ok, Root, Chain} = ssl_certificate:certificate_chain(OtpCert, Db, DbRef),
- {ok, Root, lists:reverse(Chain)}
- catch
- throw:_ ->
- {error, issuer_not_found}
+ {ok, Root, lists:reverse(Chain)};
+ {error, issuer_not_found} ->
+ {ok, unknown_crl_ca, []}
end.
find_issuer(CRL, {Db,_}) ->
@@ -61,11 +60,10 @@ find_issuer(CRL, {Db,_}) ->
issuer_not_found ->
{error, issuer_not_found}
catch
- {ok, IssuerCert} ->
- IssuerCert
+ {ok, _} = Result ->
+ Result
end.
-
verify_crl_issuer(CRL, ErlCertCandidate, Issuer, NotIssuer) ->
TBSCert = ErlCertCandidate#'OTPCertificate'.tbsCertificate,
case public_key:pkix_normalize_name(TBSCert#'OTPTBSCertificate'.subject) of
diff --git a/lib/ssl/src/ssl_crl_cache.erl b/lib/ssl/src/ssl_crl_cache.erl
index 60e7427737..647e0465fe 100644
--- a/lib/ssl/src/ssl_crl_cache.erl
+++ b/lib/ssl/src/ssl_crl_cache.erl
@@ -28,7 +28,7 @@
-behaviour(ssl_crl_cache_api).
--export([lookup/2, select/2, fresh_crl/2]).
+-export([lookup/3, select/2, fresh_crl/2]).
-export([insert/1, insert/2, delete/1]).
%%====================================================================
@@ -36,9 +36,10 @@
%%====================================================================
lookup(#'DistributionPoint'{distributionPoint = {fullName, Names}},
+ _Issuer,
CRLDbInfo) ->
get_crls(Names, CRLDbInfo);
-lookup(_,_) ->
+lookup(_,_,_) ->
not_available.
select(Issuer, {{_Cache, Mapping},_}) ->
diff --git a/lib/ssl/src/ssl_crl_cache_api.erl b/lib/ssl/src/ssl_crl_cache_api.erl
index d7b31f280e..c3a57e2f49 100644
--- a/lib/ssl/src/ssl_crl_cache_api.erl
+++ b/lib/ssl/src/ssl_crl_cache_api.erl
@@ -24,8 +24,9 @@
-include_lib("public_key/include/public_key.hrl").
--type db_handle() :: term().
+-type db_handle() :: term().
+-type issuer_name() :: {rdnSequence, [#'AttributeTypeAndValue'{}]}.
--callback lookup(#'DistributionPoint'{}, db_handle()) -> not_available | [public_key:der_encoded()].
--callback select(term(), db_handle()) -> [public_key:der_encoded()].
+-callback lookup(#'DistributionPoint'{}, issuer_name(), db_handle()) -> not_available | [public_key:der_encoded()].
+-callback select(issuer_name(), db_handle()) -> [public_key:der_encoded()].
-callback fresh_crl(#'DistributionPoint'{}, public_key:der_encoded()) -> public_key:der_encoded().
diff --git a/lib/ssl/src/ssl_crl_hash_dir.erl b/lib/ssl/src/ssl_crl_hash_dir.erl
new file mode 100644
index 0000000000..bb62737232
--- /dev/null
+++ b/lib/ssl/src/ssl_crl_hash_dir.erl
@@ -0,0 +1,106 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+
+-module(ssl_crl_hash_dir).
+
+-include_lib("public_key/include/public_key.hrl").
+
+-behaviour(ssl_crl_cache_api).
+
+-export([lookup/3, select/2, fresh_crl/2]).
+
+lookup(#'DistributionPoint'{cRLIssuer = CRLIssuer} = DP, CertIssuer, CRLDbInfo) ->
+ Issuer =
+ case CRLIssuer of
+ asn1_NOVALUE ->
+ %% If the distribution point extension doesn't
+ %% indicate a CRL issuer, use the certificate issuer.
+ CertIssuer;
+ _ ->
+ CRLIssuer
+ end,
+ %% Find all CRLs for this issuer, and return those that match the
+ %% given distribution point.
+ AllCRLs = select(Issuer, CRLDbInfo),
+ lists:filter(fun(DER) ->
+ public_key:pkix_match_dist_point(DER, DP)
+ end, AllCRLs).
+
+fresh_crl(#'DistributionPoint'{}, CurrentCRL) ->
+ CurrentCRL.
+
+select(Issuer, {_DbHandle, [{dir, Dir}]}) ->
+ case find_crls(Issuer, Dir) of
+ [_|_] = DERs ->
+ DERs;
+ [] ->
+ %% That's okay, just report that we didn't find any CRL.
+ %% If the crl_check setting is best_effort, ssl_handshake
+ %% is happy with that, but if it's true, this is an error.
+ [];
+ {error, Error} ->
+ error_logger:error_report(
+ [{cannot_find_crl, Error},
+ {dir, Dir},
+ {module, ?MODULE},
+ {line, ?LINE}]),
+ []
+ end.
+
+find_crls(Issuer, Dir) ->
+ case filelib:is_dir(Dir) of
+ true ->
+ Hash = public_key:short_name_hash(Issuer),
+ find_crls(Issuer, Hash, Dir, 0, []);
+ false ->
+ {error, not_a_directory}
+ end.
+
+find_crls(Issuer, Hash, Dir, N, Acc) ->
+ Filename = filename:join(Dir, Hash ++ ".r" ++ integer_to_list(N)),
+ case file:read_file(Filename) of
+ {error, enoent} ->
+ Acc;
+ {ok, Bin} ->
+ try maybe_parse_pem(Bin) of
+ DER when is_binary(DER) ->
+ %% Found one file. Let's see if there are more.
+ find_crls(Issuer, Hash, Dir, N + 1, [DER] ++ Acc)
+ catch
+ error:Error ->
+ %% Something is wrong with the file. Report
+ %% it, and try the next one.
+ error_logger:error_report(
+ [{crl_parse_error, Error},
+ {filename, Filename},
+ {module, ?MODULE},
+ {line, ?LINE}]),
+ find_crls(Issuer, Hash, Dir, N + 1, Acc)
+ end
+ end.
+
+maybe_parse_pem(<<"-----BEGIN", _/binary>> = PEM) ->
+ %% It's a PEM encoded file. Need to extract the DER
+ %% encoded data.
+ [{'CertificateList', DER, not_encrypted}] = public_key:pem_decode(PEM),
+ DER;
+maybe_parse_pem(DER) when is_binary(DER) ->
+ %% Let's assume it's DER-encoded.
+ DER.
+
diff --git a/lib/ssl/src/ssl_dist_sup.erl b/lib/ssl/src/ssl_dist_sup.erl
index 435ad27a44..a6eb1be1f6 100644
--- a/lib/ssl/src/ssl_dist_sup.erl
+++ b/lib/ssl/src/ssl_dist_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl
index 43b0c42f8d..47af1f861c 100644
--- a/lib/ssl/src/ssl_handshake.erl
+++ b/lib/ssl/src/ssl_handshake.erl
@@ -65,7 +65,7 @@
%% Cipher suites handling
-export([available_suites/2, available_signature_algs/3, cipher_suites/2,
- select_session/11, supported_ecc/1]).
+ select_session/11, supported_ecc/1, available_signature_algs/4]).
%% Extensions handling
-export([client_hello_extensions/6,
@@ -74,7 +74,7 @@
]).
%% MISC
--export([select_version/3, prf/6, select_hashsign/5,
+-export([select_version/3, prf/6, select_hashsign/4, select_hashsign/5,
select_hashsign_algs/3,
premaster_secret/2, premaster_secret/3, premaster_secret/4]).
@@ -167,7 +167,7 @@ certificate(OwnCert, CertDbHandle, CertDbRef, server) ->
{ok, _, Chain} ->
#certificate{asn1_certificates = Chain};
{error, _} ->
- ?ALERT_REC(?FATAL, ?INTERNAL_ERROR)
+ ?ALERT_REC(?FATAL, ?INTERNAL_ERROR, server_has_no_suitable_certificates)
end.
%%--------------------------------------------------------------------
@@ -195,7 +195,7 @@ client_certificate_verify(OwnCert, MasterSecret, Version,
PrivateKey, {Handshake, _}) ->
case public_key:pkix_is_fixed_dh_cert(OwnCert) of
true ->
- ?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE);
+ ?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE, fixed_diffie_hellman_prohibited);
false ->
Hashes =
calc_certificate_verify(Version, HashAlgo, MasterSecret, Handshake),
@@ -353,7 +353,7 @@ verify_server_key(#server_key_params{params_bin = EncParams,
%% Description: Checks that the certificate_verify message is valid.
%%--------------------------------------------------------------------
certificate_verify(_, _, _, undefined, _, _) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, invalid_certificate_verify_message);
certificate_verify(Signature, PublicKeyInfo, Version,
HashSign = {HashAlgo, _}, MasterSecret, {_, Handshake}) ->
@@ -417,7 +417,7 @@ certify(#certificate{asn1_certificates = ASN1Certs}, CertDbHandle, CertDbRef,
catch
error:_ ->
%% ASN-1 decode of certificate somehow failed
- ?ALERT_REC(?FATAL, ?CERTIFICATE_UNKNOWN)
+ ?ALERT_REC(?FATAL, ?CERTIFICATE_UNKNOWN, failed_to_decode_certificate)
end.
%%--------------------------------------------------------------------
@@ -581,7 +581,7 @@ prf({3,_N}, PRFAlgo, Secret, Label, Seed, WantedLength) ->
{atom(), atom()} | undefined | #alert{}.
%%
-%% Description: Handles signature_algorithms extension
+%% Description: Handles signature_algorithms hello extension (server)
%%--------------------------------------------------------------------
select_hashsign(_, undefined, _, _, _Version) ->
{null, anon};
@@ -593,19 +593,22 @@ select_hashsign(HashSigns, Cert, KeyExAlgo,
select_hashsign(#hash_sign_algos{hash_sign_algos = HashSigns}, Cert, KeyExAlgo, SupportedHashSigns,
{Major, Minor}) when Major >= 3 andalso Minor >= 3 ->
#'OTPCertificate'{tbsCertificate = TBSCert} = public_key:pkix_decode_cert(Cert, otp),
- #'OTPSubjectPublicKeyInfo'{algorithm = {_,Algo, _}} = TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
- Sign = cert_sign(Algo),
- case lists:filter(fun({sha, dsa = S}) when S == Sign ->
- true;
- ({_, dsa}) ->
- false;
- ({_, _} = Algos) ->
- is_acceptable_hash_sign(Algos, Sign, KeyExAlgo, SupportedHashSigns);
+ #'OTPCertificate'{tbsCertificate = TBSCert,
+ signatureAlgorithm = {_,SignAlgo, _}} = public_key:pkix_decode_cert(Cert, otp),
+ #'OTPSubjectPublicKeyInfo'{algorithm = {_, SubjAlgo, _}} =
+ TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
+
+ Sign = sign_algo(SignAlgo),
+ SubSing = sign_algo(SubjAlgo),
+
+ case lists:filter(fun({_, S} = Algos) when S == Sign ->
+ is_acceptable_hash_sign(Algos, Sign,
+ SubSing, KeyExAlgo, SupportedHashSigns);
(_) ->
false
end, HashSigns) of
[] ->
- ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY);
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_signature_algorithm);
[HashSign | _] ->
HashSign
end;
@@ -613,6 +616,49 @@ select_hashsign(_, Cert, _, _, Version) ->
#'OTPCertificate'{tbsCertificate = TBSCert} = public_key:pkix_decode_cert(Cert, otp),
#'OTPSubjectPublicKeyInfo'{algorithm = {_,Algo, _}} = TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
select_hashsign_algs(undefined, Algo, Version).
+%%--------------------------------------------------------------------
+-spec select_hashsign(#certificate_request{}, binary(),
+ [atom()], ssl_record:ssl_version()) ->
+ {atom(), atom()} | #alert{}.
+
+%%
+%% Description: Handles signature algorithms selection for certificate requests (client)
+%%--------------------------------------------------------------------
+select_hashsign(#certificate_request{}, undefined, _, {Major, Minor}) when Major >= 3 andalso Minor >= 3->
+ %% There client does not have a certificate and will send an empty reply, the server may fail
+ %% or accept the connection by its own preference. No signature algorihms needed as there is
+ %% no certificate to verify.
+ {undefined, undefined};
+
+select_hashsign(#certificate_request{hashsign_algorithms = #hash_sign_algos{hash_sign_algos = HashSigns},
+ certificate_types = Types}, Cert, SupportedHashSigns,
+ {Major, Minor}) when Major >= 3 andalso Minor >= 3->
+ #'OTPCertificate'{tbsCertificate = TBSCert} = public_key:pkix_decode_cert(Cert, otp),
+ #'OTPCertificate'{tbsCertificate = TBSCert,
+ signatureAlgorithm = {_,SignAlgo, _}} = public_key:pkix_decode_cert(Cert, otp),
+ #'OTPSubjectPublicKeyInfo'{algorithm = {_, SubjAlgo, _}} =
+ TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
+
+ Sign = sign_algo(SignAlgo),
+ SubSign = sign_algo(SubjAlgo),
+
+ case is_acceptable_cert_type(SubSign, HashSigns, Types) andalso is_supported_sign(Sign, HashSigns) of
+ true ->
+ case lists:filter(fun({_, S} = Algos) when S == SubSign ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+ (_) ->
+ false
+ end, HashSigns) of
+ [] ->
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_signature_algorithm);
+ [HashSign | _] ->
+ HashSign
+ end;
+ false ->
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_signature_algorithm)
+ end;
+select_hashsign(#certificate_request{}, Cert, _, Version) ->
+ select_hashsign(undefined, Cert, undefined, undefined, Version).
%%--------------------------------------------------------------------
-spec select_hashsign_algs({atom(), atom()}| undefined, oid(), ssl_record:ssl_version()) ->
@@ -648,6 +694,7 @@ select_hashsign_algs(undefined, ?rsaEncryption, _) ->
select_hashsign_algs(undefined, ?'id-dsa', _) ->
{sha, dsa}.
+
%%--------------------------------------------------------------------
-spec master_secret(atom(), ssl_record:ssl_version(), #session{} | binary(), #connection_states{},
client | server) -> {binary(), #connection_states{}} | #alert{}.
@@ -664,11 +711,8 @@ master_secret(RecordCB, Version, #session{master_secret = Mastersecret},
try master_secret(RecordCB, Version, Mastersecret, SecParams,
ConnectionStates, Role)
catch
- exit:Reason ->
- Report = io_lib:format("Key calculation failed due to ~p",
- [Reason]),
- error_logger:error_report(Report),
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ exit:_ ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, key_calculation_failure)
end;
master_secret(RecordCB, Version, PremasterSecret, ConnectionStates, Role) ->
@@ -683,11 +727,8 @@ master_secret(RecordCB, Version, PremasterSecret, ConnectionStates, Role) ->
ClientRandom, ServerRandom),
SecParams, ConnectionStates, Role)
catch
- exit:Reason ->
- Report = io_lib:format("Master secret calculation failed"
- " due to ~p", [Reason]),
- error_logger:error_report(Report),
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ exit:_ ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, master_secret_calculation_failure)
end.
%%-------------Encode/Decode --------------------------------
@@ -958,8 +999,8 @@ decode_handshake(_Version, ?CLIENT_KEY_EXCHANGE, PKEPMS) ->
#client_key_exchange{exchange_keys = PKEPMS};
decode_handshake(_Version, ?FINISHED, VerifyData) ->
#finished{verify_data = VerifyData};
-decode_handshake(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+decode_handshake(_, Message, _) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, {unknown_or_malformed_handshake, Message})).
%%--------------------------------------------------------------------
-spec decode_hello_extensions({client, binary()} | binary()) -> #hello_extensions{}.
@@ -1031,8 +1072,8 @@ dec_server_key(<<?UINT16(NLen), N:NLen/binary,
params_bin = BinMsg,
hashsign = HashSign,
signature = Signature};
-dec_server_key(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+dec_server_key(_, KeyExchange, _) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, {unknown_or_malformed_key_exchange, KeyExchange})).
%%--------------------------------------------------------------------
-spec decode_suites('2_bytes'|'3_bytes', binary()) -> list().
@@ -1149,11 +1190,13 @@ certificate_types(_, {N, M}) when N >= 3 andalso M >= 3 ->
end;
certificate_types({KeyExchange, _, _, _}, _) when KeyExchange == rsa;
+ KeyExchange == dh_rsa;
KeyExchange == dhe_rsa;
KeyExchange == ecdhe_rsa ->
<<?BYTE(?RSA_SIGN)>>;
-certificate_types({KeyExchange, _, _, _}, _) when KeyExchange == dhe_dss;
+certificate_types({KeyExchange, _, _, _}, _) when KeyExchange == dh_dss;
+ KeyExchange == dhe_dss;
KeyExchange == srp_dss ->
<<?BYTE(?DSS_SIGN)>>;
@@ -1253,8 +1296,12 @@ handle_server_hello_extensions(RecordCB, Random, CipherSuite, Compression,
Protocol ->
{ConnectionStates, npn, Protocol}
end;
- _ -> %% {error, _Reason} or a list of 0/2+ protocols.
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ {error, Reason} ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, Reason);
+ [] ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, no_protocols_in_server_hello);
+ [_|_] ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, too_many_protocols_in_server_hello)
end.
select_version(RecordCB, ClientVersion, Versions) ->
@@ -1348,14 +1395,14 @@ handle_renegotiation_info(_RecordCB, client, #renegotiation_info{renegotiated_co
true ->
{ok, ConnectionStates};
false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, client_renegotiation)
end;
handle_renegotiation_info(_RecordCB, server, #renegotiation_info{renegotiated_connection = ClientVerify},
ConnectionStates, true, _, CipherSuites) ->
case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
true ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, {server_renegotiation, empty_renegotiation_info_scsv});
false ->
CS = ssl_record:current_connection_state(ConnectionStates, read),
Data = CS#connection_state.client_verify_data,
@@ -1363,7 +1410,7 @@ handle_renegotiation_info(_RecordCB, server, #renegotiation_info{renegotiated_co
true ->
{ok, ConnectionStates};
false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, server_renegotiation)
end
end;
@@ -1373,7 +1420,7 @@ handle_renegotiation_info(RecordCB, client, undefined, ConnectionStates, true, S
handle_renegotiation_info(RecordCB, server, undefined, ConnectionStates, true, SecureRenegotation, CipherSuites) ->
case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
true ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, {server_renegotiation, empty_renegotiation_info_scsv});
false ->
handle_renegotiation_info(RecordCB, ConnectionStates, SecureRenegotation)
end.
@@ -1382,7 +1429,7 @@ handle_renegotiation_info(_RecordCB, ConnectionStates, SecureRenegotation) ->
CS = ssl_record:current_connection_state(ConnectionStates, read),
case {SecureRenegotation, CS#connection_state.secure_renegotiation} of
{_, true} ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, already_secure);
{true, false} ->
?ALERT_REC(?FATAL, ?NO_RENEGOTIATION);
{false, false} ->
@@ -1555,8 +1602,8 @@ path_validation_alert({bad_cert, selfsigned_peer}) ->
?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
path_validation_alert({bad_cert, unknown_ca}) ->
?ALERT_REC(?FATAL, ?UNKNOWN_CA);
-path_validation_alert(_) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE).
+path_validation_alert(Reason) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, Reason).
encrypted_premaster_secret(Secret, RSAPublicKey) ->
try
@@ -1565,18 +1612,27 @@ encrypted_premaster_secret(Secret, RSAPublicKey) ->
rsa_pkcs1_padding}]),
#encrypted_premaster_secret{premaster_secret = PreMasterSecret}
catch
- _:_->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE))
+ _:_->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, premaster_encryption_failed))
+ end.
+
+digitally_signed(Version, Hashes, HashAlgo, PrivateKey) ->
+ try do_digitally_signed(Version, Hashes, HashAlgo, PrivateKey) of
+ Signature ->
+ Signature
+ catch
+ error:badkey->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, bad_key(PrivateKey)))
end.
-digitally_signed({3, Minor}, Hash, HashAlgo, Key) when Minor >= 3 ->
+do_digitally_signed({3, Minor}, Hash, HashAlgo, Key) when Minor >= 3 ->
public_key:sign({digest, Hash}, HashAlgo, Key);
-digitally_signed(_Version, Hash, HashAlgo, #'DSAPrivateKey'{} = Key) ->
+do_digitally_signed(_Version, Hash, HashAlgo, #'DSAPrivateKey'{} = Key) ->
public_key:sign({digest, Hash}, HashAlgo, Key);
-digitally_signed(_Version, Hash, _HashAlgo, #'RSAPrivateKey'{} = Key) ->
+do_digitally_signed(_Version, Hash, _HashAlgo, #'RSAPrivateKey'{} = Key) ->
public_key:encrypt_private(Hash, Key,
[{rsa_pad, rsa_pkcs1_padding}]);
-digitally_signed(_Version, Hash, HashAlgo, Key) ->
+do_digitally_signed(_Version, Hash, HashAlgo, Key) ->
public_key:sign({digest, Hash}, HashAlgo, Key).
calc_certificate_verify({3, 0}, HashAlgo, MasterSecret, Handshake) ->
@@ -1783,12 +1839,12 @@ dec_client_key(PKEPMS, ?KEY_EXCHANGE_RSA, {3, 0}) ->
dec_client_key(<<?UINT16(_), PKEPMS/binary>>, ?KEY_EXCHANGE_RSA, _) ->
#encrypted_premaster_secret{premaster_secret = PKEPMS};
dec_client_key(<<>>, ?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
- throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE));
+ throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE, empty_dh_public));
dec_client_key(<<?UINT16(DH_YLen), DH_Y:DH_YLen/binary>>,
?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
#client_diffie_hellman_public{dh_public = DH_Y};
dec_client_key(<<>>, ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, _) ->
- throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE));
+ throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE, empty_dh_public));
dec_client_key(<<?BYTE(DH_YLen), DH_Y:DH_YLen/binary>>,
?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, _) ->
#client_ec_diffie_hellman_public{dh_public = DH_Y};
@@ -1832,7 +1888,7 @@ dec_server_key_signature(Params, <<?UINT16(0)>>, _) ->
dec_server_key_signature(Params, <<?UINT16(Len), Signature:Len/binary>>, _) ->
{Params, undefined, Signature};
dec_server_key_signature(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, failed_to_decrypt_server_key_sign)).
dec_hello_extensions(<<>>, Acc) ->
Acc;
@@ -1987,8 +2043,8 @@ key_exchange_alg(_) ->
%%-------------Extension handling --------------------------------
%% Receive protocols, choose one from the list, return it.
-handle_alpn_extension(_, {error, _Reason}) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+handle_alpn_extension(_, {error, Reason}) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, Reason);
handle_alpn_extension([], _) ->
?ALERT_REC(?FATAL, ?NO_APPLICATION_PROTOCOL);
handle_alpn_extension([ServerProtocol|Tail], ClientProtocols) ->
@@ -2008,7 +2064,7 @@ handle_next_protocol(#next_protocol_negotiation{} = NextProtocols,
true ->
select_next_protocol(decode_next_protocols(NextProtocols), NextProtocolSelector);
false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE) % unexpected next protocol extension
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, unexpected_next_protocol_extension)
end.
@@ -2028,17 +2084,17 @@ handle_next_protocol_on_server(#next_protocol_negotiation{extension_data = <<>>}
Protocols;
handle_next_protocol_on_server(_Hello, _Renegotiation, _SSLOpts) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE). % unexpected next protocol extension
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, unexpected_next_protocol_extension).
next_protocol_extension_allowed(NextProtocolSelector, Renegotiating) ->
NextProtocolSelector =/= undefined andalso not Renegotiating.
-select_next_protocol({error, _Reason}, _NextProtocolSelector) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+select_next_protocol({error, Reason}, _NextProtocolSelector) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, Reason);
select_next_protocol(Protocols, NextProtocolSelector) ->
case NextProtocolSelector(Protocols) of
?NO_PROTOCOL ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, no_next_protocol);
Protocol when is_binary(Protocol) ->
Protocol
end.
@@ -2153,13 +2209,14 @@ crl_check_same_issuer(OtpCert, _, Dps, Options) ->
public_key:pkix_crls_validate(OtpCert, Dps, Options).
dps_and_crls(OtpCert, Callback, CRLDbHandle, ext) ->
- case public_key:pkix_dist_points(OtpCert) of
- [] ->
- no_dps;
- DistPoints ->
- distpoints_lookup(DistPoints, Callback, CRLDbHandle)
- end;
-
+ case public_key:pkix_dist_points(OtpCert) of
+ [] ->
+ no_dps;
+ DistPoints ->
+ Issuer = OtpCert#'OTPCertificate'.tbsCertificate#'OTPTBSCertificate'.issuer,
+ distpoints_lookup(DistPoints, Issuer, Callback, CRLDbHandle)
+ end;
+
dps_and_crls(OtpCert, Callback, CRLDbHandle, same_issuer) ->
DP = #'DistributionPoint'{distributionPoint = {fullName, GenNames}} =
public_key:pkix_dist_point(OtpCert),
@@ -2170,34 +2227,105 @@ dps_and_crls(OtpCert, Callback, CRLDbHandle, same_issuer) ->
end, GenNames),
[{DP, {CRL, public_key:der_decode('CertificateList', CRL)}} || CRL <- CRLs].
-distpoints_lookup([], _, _) ->
+distpoints_lookup([], _, _, _) ->
[];
-distpoints_lookup([DistPoint | Rest], Callback, CRLDbHandle) ->
- case Callback:lookup(DistPoint, CRLDbHandle) of
+distpoints_lookup([DistPoint | Rest], Issuer, Callback, CRLDbHandle) ->
+ Result =
+ try Callback:lookup(DistPoint, Issuer, CRLDbHandle)
+ catch
+ error:undef ->
+ %% The callback module still uses the 2-argument
+ %% version of the lookup function.
+ Callback:lookup(DistPoint, CRLDbHandle)
+ end,
+ case Result of
not_available ->
- distpoints_lookup(Rest, Callback, CRLDbHandle);
+ distpoints_lookup(Rest, Issuer, Callback, CRLDbHandle);
CRLs ->
[{DistPoint, {CRL, public_key:der_decode('CertificateList', CRL)}} || CRL <- CRLs]
end.
-cert_sign(?rsaEncryption) ->
+sign_algo(?rsaEncryption) ->
rsa;
-cert_sign(?'id-ecPublicKey') ->
+sign_algo(?'id-ecPublicKey') ->
ecdsa;
-cert_sign(?'id-dsa') ->
+sign_algo(?'id-dsa') ->
dsa;
-cert_sign(Alg) ->
+sign_algo(Alg) ->
{_, Sign} =public_key:pkix_sign_types(Alg),
Sign.
-is_acceptable_hash_sign({_, Sign} = Algos, Sign, _, SupportedHashSigns) ->
- is_acceptable_hash_sign(Algos, SupportedHashSigns);
-is_acceptable_hash_sign(Algos,_, KeyExAlgo, SupportedHashSigns) when KeyExAlgo == dh_ecdsa;
- KeyExAlgo == ecdh_rsa;
- KeyExAlgo == ecdh_ecdsa ->
+is_acceptable_hash_sign(Algos, _, _, KeyExAlgo, SupportedHashSigns) when
+ KeyExAlgo == dh_dss;
+ KeyExAlgo == dh_rsa;
+ KeyExAlgo == dh_ecdsa ->
+ %% dh_* could be called only dh in TLS-1.2
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign(Algos, rsa, ecdsa, ecdh_rsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, _, dhe_rsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, rsa, ecdhe_rsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, rsa, rsa, SupportedHashSigns) ->
is_acceptable_hash_sign(Algos, SupportedHashSigns);
-is_acceptable_hash_sign(_,_,_,_) ->
- false.
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, _, srp_rsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, _, rsa_psk, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, dsa} = Algos, dsa, _, dhe_dss, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, dsa} = Algos, dsa, _, srp_dss, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, ecdsa} = Algos, ecdsa, _, dhe_ecdsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, ecdsa} = Algos, ecdsa, ecdsa, ecdhe_ecdsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign(_, _, _, KeyExAlgo, _) when
+ KeyExAlgo == psk;
+ KeyExAlgo == dhe_psk;
+ KeyExAlgo == srp_anon;
+ KeyExAlgo == dh_anon;
+ KeyExAlgo == ecdhe_anon
+ ->
+ true;
+is_acceptable_hash_sign(_,_, _,_,_) ->
+ false.
+
is_acceptable_hash_sign(Algos, SupportedHashSigns) ->
lists:member(Algos, SupportedHashSigns).
+is_acceptable_cert_type(Sign, _HashSigns, Types) ->
+ lists:member(sign_type(Sign), binary_to_list(Types)).
+
+is_supported_sign(Sign, HashSigns) ->
+ [] =/= lists:dropwhile(fun({_, S}) when S =/= Sign ->
+ true;
+ (_)->
+ false
+ end, HashSigns).
+sign_type(rsa) ->
+ ?RSA_SIGN;
+sign_type(dsa) ->
+ ?DSS_SIGN;
+sign_type(ecdsa) ->
+ ?ECDSA_SIGN.
+
+
+bad_key(#'DSAPrivateKey'{}) ->
+ unacceptable_dsa_key;
+bad_key(#'RSAPrivateKey'{}) ->
+ unacceptable_rsa_key;
+bad_key(#'ECPrivateKey'{}) ->
+ unacceptable_ecdsa_key.
+
+available_signature_algs(undefined, SupportedHashSigns, _, {Major, Minor}) when
+ (Major >= 3) andalso (Minor >= 3) ->
+ SupportedHashSigns;
+available_signature_algs(#hash_sign_algos{hash_sign_algos = ClientHashSigns}, SupportedHashSigns,
+ _, {Major, Minor}) when (Major >= 3) andalso (Minor >= 3) ->
+ sets:to_list(sets:intersection(sets:from_list(ClientHashSigns),
+ sets:from_list(SupportedHashSigns)));
+available_signature_algs(_, _, _, _) ->
+ undefined.
+
diff --git a/lib/ssl/src/ssl_handshake.hrl b/lib/ssl/src/ssl_handshake.hrl
index b74a65939b..fde92035a2 100644
--- a/lib/ssl/src/ssl_handshake.hrl
+++ b/lib/ssl/src/ssl_handshake.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -53,7 +53,8 @@
-define(NUM_OF_SESSION_ID_BYTES, 32). % TSL 1.1 & SSL 3
-define(NUM_OF_PREMASTERSECRET_BYTES, 48).
-define(DEFAULT_DIFFIE_HELLMAN_GENERATOR, 2).
--define(DEFAULT_DIFFIE_HELLMAN_PRIME, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF).
+-define(DEFAULT_DIFFIE_HELLMAN_PRIME,
+ 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Handsake protocol - RFC 4346 section 7.4
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 20f0b7d0da..c19c1787ff 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -93,16 +93,16 @@
validate_extensions_fun,
depth :: integer(),
certfile :: binary(),
- cert :: public_key:der_encoded() | secret_printout(),
+ cert :: public_key:der_encoded() | secret_printout() | 'undefined',
keyfile :: binary(),
- key :: {'RSAPrivateKey' | 'DSAPrivateKey' | 'ECPrivateKey' | 'PrivateKeyInfo', public_key:der_encoded()} | secret_printout(),
- password :: string() | secret_printout(),
- cacerts :: [public_key:der_encoded()] | secret_printout(),
+ key :: {'RSAPrivateKey' | 'DSAPrivateKey' | 'ECPrivateKey' | 'PrivateKeyInfo', public_key:der_encoded()} | secret_printout() | 'undefined',
+ password :: string() | secret_printout() | 'undefined',
+ cacerts :: [public_key:der_encoded()] | secret_printout() | 'undefined',
cacertfile :: binary(),
dh :: public_key:der_encoded() | secret_printout(),
- dhfile :: binary() | secret_printout(),
+ dhfile :: binary() | secret_printout() | 'undefined',
user_lookup_fun, % server option, fun to lookup the user
- psk_identity :: binary() | secret_printout() ,
+ psk_identity :: binary() | secret_printout() | 'undefined',
srp_identity, % client option {User, Password}
ciphers, %
%% Local policy for the server if it want's to reuse the session
@@ -118,7 +118,7 @@
%% undefined if not hibernating, or number of ms of
%% inactivity after which ssl_connection will go into
%% hibernation
- hibernate_after :: boolean(),
+ hibernate_after :: timeout(),
%% This option should only be set to true by inet_tls_dist
erl_dist = false :: boolean(),
alpn_advertised_protocols = undefined :: [binary()] | undefined ,
@@ -133,10 +133,14 @@
%% the client?
honor_cipher_order = false :: boolean(),
padding_check = true :: boolean(),
+ %%Should we use 1/n-1 or 0/n splitting to mitigate BEAST, or disable
+ %%mitigation entirely?
+ beast_mitigation = one_n_minus_one :: one_n_minus_one | zero_n | disabled,
fallback = false :: boolean(),
crl_check :: boolean() | peer | best_effort,
crl_cache,
- signature_algs
+ signature_algs,
+ v2_hello_compatible :: boolean()
}).
-record(socket_options,
diff --git a/lib/ssl/src/ssl_listen_tracker_sup.erl b/lib/ssl/src/ssl_listen_tracker_sup.erl
index f9a0ba331e..7f685a2ead 100644
--- a/lib/ssl/src/ssl_listen_tracker_sup.erl
+++ b/lib/ssl/src/ssl_listen_tracker_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_manager.erl b/lib/ssl/src/ssl_manager.erl
index 8ed29cc6b0..c7dcbaabe9 100644
--- a/lib/ssl/src/ssl_manager.erl
+++ b/lib/ssl/src/ssl_manager.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -554,7 +554,7 @@ last_delay_timer({_,_}, TRef, {_, LastClient}) ->
new_id(_, 0, _, _) ->
<<>>;
new_id(Port, Tries, Cache, CacheCb) ->
- Id = crypto:rand_bytes(?NUM_OF_SESSION_ID_BYTES),
+ Id = ssl_cipher:random_bytes(?NUM_OF_SESSION_ID_BYTES),
case CacheCb:lookup(Cache, {Port, Id}) of
undefined ->
Now = erlang:monotonic_time(),
@@ -613,8 +613,8 @@ server_register_session(Port, Session, #state{session_cache_server_max = Max,
do_register_session(Key, Session, Max, Pid, Cache, CacheCb) ->
try CacheCb:size(Cache) of
- N when N > Max ->
- invalidate_session_cache(Pid, CacheCb, Cache);
+ Max ->
+ invalidate_session_cache(Pid, CacheCb, Cache);
_ ->
CacheCb:update(Cache, Key, Session),
Pid
diff --git a/lib/ssl/src/ssl_record.erl b/lib/ssl/src/ssl_record.erl
index ce6b8fb84f..5bb1c92c2d 100644
--- a/lib/ssl/src/ssl_record.erl
+++ b/lib/ssl/src/ssl_record.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
-include("ssl_alert.hrl").
%% Connection state handling
--export([init_connection_states/1,
+-export([init_connection_states/2,
current_connection_state/2, pending_connection_state/2,
activate_pending_connection_state/2,
set_security_params/3,
@@ -62,16 +62,18 @@
%%====================================================================
%%--------------------------------------------------------------------
--spec init_connection_states(client | server) -> #connection_states{}.
+-spec init_connection_states(client | server, one_n_minus_one | zero_n | disabled ) ->
+ #connection_states{}.
%%
%% Description: Creates a connection_states record with appropriate
%% values for the initial SSL connection setup.
%%--------------------------------------------------------------------
-init_connection_states(Role) ->
+init_connection_states(Role, BeastMitigation) ->
ConnectionEnd = record_protocol_role(Role),
- Current = initial_connection_state(ConnectionEnd),
- Pending = empty_connection_state(ConnectionEnd),
- #connection_states{current_read = Current,
+ Current = initial_connection_state(ConnectionEnd, BeastMitigation),
+ Pending = empty_connection_state(ConnectionEnd, BeastMitigation),
+ #connection_states{dtls_write_msg_seq = 1, % only used by dtls
+ current_read = Current,
pending_read = Pending,
current_write = Current,
pending_write = Pending
@@ -119,9 +121,10 @@ activate_pending_connection_state(States =
read) ->
NewCurrent = Pending#connection_state{epoch = dtls_next_epoch(Current),
sequence_number = 0},
+ BeastMitigation = Pending#connection_state.beast_mitigation,
SecParams = Pending#connection_state.security_parameters,
ConnectionEnd = SecParams#security_parameters.connection_end,
- EmptyPending = empty_connection_state(ConnectionEnd),
+ EmptyPending = empty_connection_state(ConnectionEnd, BeastMitigation),
SecureRenegotation = NewCurrent#connection_state.secure_renegotiation,
NewPending = EmptyPending#connection_state{secure_renegotiation = SecureRenegotation},
States#connection_states{current_read = NewCurrent,
@@ -134,9 +137,10 @@ activate_pending_connection_state(States =
write) ->
NewCurrent = Pending#connection_state{epoch = dtls_next_epoch(Current),
sequence_number = 0},
+ BeastMitigation = Pending#connection_state.beast_mitigation,
SecParams = Pending#connection_state.security_parameters,
ConnectionEnd = SecParams#security_parameters.connection_end,
- EmptyPending = empty_connection_state(ConnectionEnd),
+ EmptyPending = empty_connection_state(ConnectionEnd, BeastMitigation),
SecureRenegotation = NewCurrent#connection_state.secure_renegotiation,
NewPending = EmptyPending#connection_state{secure_renegotiation = SecureRenegotation},
States#connection_states{current_write = NewCurrent,
@@ -314,16 +318,28 @@ set_pending_cipher_state(#connection_states{pending_read = Read,
encode_handshake(Frag, Version,
#connection_states{current_write =
#connection_state{
+ beast_mitigation = BeastMitigation,
security_parameters =
#security_parameters{bulk_cipher_algorithm = BCA}}} =
- ConnectionStates) ->
+ ConnectionStates)
+when is_list(Frag) ->
case iolist_size(Frag) of
N when N > ?MAX_PLAIN_TEXT_LENGTH ->
- Data = split_bin(iolist_to_binary(Frag), ?MAX_PLAIN_TEXT_LENGTH, Version, BCA),
+ Data = split_bin(iolist_to_binary(Frag), ?MAX_PLAIN_TEXT_LENGTH, Version, BCA, BeastMitigation),
encode_iolist(?HANDSHAKE, Data, Version, ConnectionStates);
_ ->
encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates)
- end.
+ end;
+%% TODO: this is a workarround for DTLS
+%%
+%% DTLS need to select the connection write state based on Epoch it wants to
+%% send this fragment in. That Epoch does not nessarily has to be the same
+%% as the current_write epoch.
+%% The right solution might be to pass the WriteState instead of the ConnectionStates,
+%% however, this will require substantion API changes.
+encode_handshake(Frag, Version, ConnectionStates) ->
+ encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates).
+
%%--------------------------------------------------------------------
-spec encode_alert_record(#alert{}, ssl_version(), #connection_states{}) ->
{iolist(), #connection_states{}}.
@@ -352,10 +368,11 @@ encode_change_cipher_spec(Version, ConnectionStates) ->
%%--------------------------------------------------------------------
encode_data(Frag, Version,
#connection_states{current_write = #connection_state{
+ beast_mitigation = BeastMitigation,
security_parameters =
#security_parameters{bulk_cipher_algorithm = BCA}}} =
ConnectionStates) ->
- Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH, Version, BCA),
+ Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH, Version, BCA, BeastMitigation),
encode_iolist(?APPLICATION_DATA, Data, Version, ConnectionStates).
uncompress(?NULL, Data, CS) ->
@@ -447,9 +464,10 @@ decipher_aead(Version, CipherFragment,
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-empty_connection_state(ConnectionEnd) ->
+empty_connection_state(ConnectionEnd, BeastMitigation) ->
SecParams = empty_security_params(ConnectionEnd),
- #connection_state{security_parameters = SecParams}.
+ #connection_state{security_parameters = SecParams,
+ beast_mitigation = BeastMitigation}.
empty_security_params(ConnectionEnd = ?CLIENT) ->
#security_parameters{connection_end = ConnectionEnd,
@@ -460,7 +478,7 @@ empty_security_params(ConnectionEnd = ?SERVER) ->
random() ->
Secs_since_1970 = calendar:datetime_to_gregorian_seconds(
calendar:universal_time()) - 62167219200,
- Random_28_bytes = crypto:rand_bytes(28),
+ Random_28_bytes = ssl_cipher:random_bytes(28),
<<?UINT32(Secs_since_1970), Random_28_bytes/binary>>.
dtls_next_epoch(#connection_state{epoch = undefined}) -> %% SSL/TLS
@@ -478,10 +496,11 @@ record_protocol_role(client) ->
record_protocol_role(server) ->
?SERVER.
-initial_connection_state(ConnectionEnd) ->
+initial_connection_state(ConnectionEnd, BeastMitigation) ->
#connection_state{security_parameters =
initial_security_params(ConnectionEnd),
- sequence_number = 0
+ sequence_number = 0,
+ beast_mitigation = BeastMitigation
}.
initial_security_params(ConnectionEnd) ->
@@ -506,11 +525,17 @@ encode_iolist(Type, Data, Version, ConnectionStates0) ->
%% 1/n-1 splitting countermeasure Rizzo/Duong-Beast, RC4 chiphers are
%% not vulnerable to this attack.
-split_bin(<<FirstByte:8, Rest/binary>>, ChunkSize, Version, BCA) when
+split_bin(<<FirstByte:8, Rest/binary>>, ChunkSize, Version, BCA, one_n_minus_one) when
BCA =/= ?RC4 andalso ({3, 1} == Version orelse
{3, 0} == Version) ->
do_split_bin(Rest, ChunkSize, [[FirstByte]]);
-split_bin(Bin, ChunkSize, _, _) ->
+%% 0/n splitting countermeasure for clients that are incompatible with 1/n-1
+%% splitting.
+split_bin(Bin, ChunkSize, Version, BCA, zero_n) when
+ BCA =/= ?RC4 andalso ({3, 1} == Version orelse
+ {3, 0} == Version) ->
+ do_split_bin(Bin, ChunkSize, [[<<>>]]);
+split_bin(Bin, ChunkSize, _, _, _) ->
do_split_bin(Bin, ChunkSize, []).
do_split_bin(<<>>, _, Acc) ->
diff --git a/lib/ssl/src/ssl_record.hrl b/lib/ssl/src/ssl_record.hrl
index af77378f44..a41264ff9b 100644
--- a/lib/ssl/src/ssl_record.hrl
+++ b/lib/ssl/src/ssl_record.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -40,10 +40,14 @@
%% RFC 5746
secure_renegotiation,
client_verify_data,
- server_verify_data
+ server_verify_data,
+ %% How to do BEAST mitigation?
+ beast_mitigation
}).
-record(connection_states, {
+ dtls_write_msg_seq, %% Only used by DTLS
+
current_read,
pending_read,
current_write,
diff --git a/lib/ssl/src/ssl_session.erl b/lib/ssl/src/ssl_session.erl
index 2b24bff5ff..c9607489e9 100644
--- a/lib/ssl/src/ssl_session.erl
+++ b/lib/ssl/src/ssl_session.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_session_cache.erl b/lib/ssl/src/ssl_session_cache.erl
index 9585e613e6..c79ad1523b 100644
--- a/lib/ssl/src/ssl_session_cache.erl
+++ b/lib/ssl/src/ssl_session_cache.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_session_cache_api.erl b/lib/ssl/src/ssl_session_cache_api.erl
index 8f62c25be5..b68c75a09b 100644
--- a/lib/ssl/src/ssl_session_cache_api.erl
+++ b/lib/ssl/src/ssl_session_cache_api.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_socket.erl b/lib/ssl/src/ssl_socket.erl
index a5487bfb5c..b2aea2ba9c 100644
--- a/lib/ssl/src/ssl_socket.erl
+++ b/lib/ssl/src/ssl_socket.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@
-include("ssl_internal.hrl").
-include("ssl_api.hrl").
--export([socket/5, setopts/3, getopts/3, peername/2, sockname/2, port/2]).
+-export([socket/5, setopts/3, getopts/3, getstat/3, peername/2, sockname/2, port/2]).
-export([emulated_options/0, internal_inet_values/0, default_inet_values/0,
init/1, start_link/3, terminate/2, inherit_tracker/3, get_emulated_opts/1,
set_emulated_opts/2, get_all_opts/1, handle_call/3, handle_cast/2,
@@ -74,6 +74,11 @@ getopts(gen_tcp, Socket, Options) ->
getopts(Transport, Socket, Options) ->
Transport:getopts(Socket, Options).
+getstat(gen_tcp, Socket, Options) ->
+ inet:getstat(Socket, Options);
+getstat(Transport, Socket, Options) ->
+ Transport:getstat(Socket, Options).
+
peername(gen_tcp, Socket) ->
inet:peername(Socket);
peername(Transport, Socket) ->
diff --git a/lib/ssl/src/ssl_srp.hrl b/lib/ssl/src/ssl_srp.hrl
index f543866085..d6e45adeee 100644
--- a/lib/ssl/src/ssl_srp.hrl
+++ b/lib/ssl/src/ssl_srp.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_sup.erl b/lib/ssl/src/ssl_sup.erl
index 950a6e0944..7fa1f7dc9e 100644
--- a/lib/ssl/src/ssl_sup.erl
+++ b/lib/ssl/src/ssl_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_tls_dist_proxy.erl b/lib/ssl/src/ssl_tls_dist_proxy.erl
index 4c789793ec..a920f54ed2 100644
--- a/lib/ssl/src/ssl_tls_dist_proxy.erl
+++ b/lib/ssl/src/ssl_tls_dist_proxy.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -116,7 +116,8 @@ handle_call({listen, Driver, Name}, _From, State) ->
{ok, TcpAddress} = get_tcp_address(Socket),
{ok, WorldTcpAddress} = get_tcp_address(World),
{_,Port} = WorldTcpAddress#net_address.address,
- case erl_epmd:register_node(Name, Port) of
+ ErlEpmd = net_kernel:epmd_module(),
+ case ErlEpmd:register_node(Name, Port) of
{ok, Creation} ->
{reply, {ok, {Socket, TcpAddress, Creation}},
State#state{listen={Socket, World}}};
@@ -195,6 +196,11 @@ accept_loop(Proxy, erts = Type, Listen, Extra) ->
{_Kernel, unsupported_protocol} ->
exit(unsupported_protocol)
end;
+ {error, closed} ->
+ %% The listening socket is closed: the proxy process is
+ %% shutting down. Exit normally, to avoid generating a
+ %% spurious error report.
+ exit(normal);
Error ->
exit(Error)
end,
@@ -396,6 +402,18 @@ ssl_options(server, ["server_verify", Value|T]) ->
[{verify, atomize(Value)} | ssl_options(server,T)];
ssl_options(client, ["client_verify", Value|T]) ->
[{verify, atomize(Value)} | ssl_options(client,T)];
+ssl_options(server, ["server_verify_fun", Value|T]) ->
+ [{verify_fun, verify_fun(Value)} | ssl_options(server,T)];
+ssl_options(client, ["client_verify_fun", Value|T]) ->
+ [{verify_fun, verify_fun(Value)} | ssl_options(client,T)];
+ssl_options(server, ["server_crl_check", Value|T]) ->
+ [{crl_check, atomize(Value)} | ssl_options(server,T)];
+ssl_options(client, ["client_crl_check", Value|T]) ->
+ [{crl_check, atomize(Value)} | ssl_options(client,T)];
+ssl_options(server, ["server_crl_cache", Value|T]) ->
+ [{crl_cache, termify(Value)} | ssl_options(server,T)];
+ssl_options(client, ["client_crl_cache", Value|T]) ->
+ [{crl_cache, termify(Value)} | ssl_options(client,T)];
ssl_options(server, ["server_reuse_sessions", Value|T]) ->
[{reuse_sessions, atomize(Value)} | ssl_options(server,T)];
ssl_options(client, ["client_reuse_sessions", Value|T]) ->
@@ -420,14 +438,28 @@ ssl_options(server, ["server_dhfile", Value|T]) ->
[{dhfile, Value} | ssl_options(server,T)];
ssl_options(server, ["server_fail_if_no_peer_cert", Value|T]) ->
[{fail_if_no_peer_cert, atomize(Value)} | ssl_options(server,T)];
-ssl_options(_,_) ->
- exit(malformed_ssl_dist_opt).
+ssl_options(Type, Opts) ->
+ error(malformed_ssl_dist_opt, [Type, Opts]).
atomize(List) when is_list(List) ->
list_to_atom(List);
atomize(Atom) when is_atom(Atom) ->
Atom.
+termify(String) when is_list(String) ->
+ {ok, Tokens, _} = erl_scan:string(String ++ "."),
+ {ok, Term} = erl_parse:parse_term(Tokens),
+ Term.
+
+verify_fun(Value) ->
+ case termify(Value) of
+ {Mod, Func, State} when is_atom(Mod), is_atom(Func) ->
+ Fun = fun Mod:Func/3,
+ {Fun, State};
+ _ ->
+ error(malformed_ssl_dist_opt, [Value])
+ end.
+
flush_old_controller(Pid, Socket) ->
receive
{tcp, Socket, Data} ->
diff --git a/lib/ssl/src/ssl_v2.erl b/lib/ssl/src/ssl_v2.erl
index 1764da5c63..37134cbe5d 100644
--- a/lib/ssl/src/ssl_v2.erl
+++ b/lib/ssl/src/ssl_v2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/ssl_v3.erl b/lib/ssl/src/ssl_v3.erl
index f169059a75..82d165f995 100644
--- a/lib/ssl/src/ssl_v3.erl
+++ b/lib/ssl/src/ssl_v3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -143,9 +143,7 @@ suites() ->
?TLS_RSA_WITH_3DES_EDE_CBC_SHA,
?TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
?TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
- ?TLS_RSA_WITH_AES_128_CBC_SHA,
- ?TLS_DHE_RSA_WITH_DES_CBC_SHA,
- ?TLS_RSA_WITH_DES_CBC_SHA
+ ?TLS_RSA_WITH_AES_128_CBC_SHA
].
%%--------------------------------------------------------------------
diff --git a/lib/ssl/src/tls.erl b/lib/ssl/src/tls.erl
index d4cb8788bf..aa41cd1ba6 100644
--- a/lib/ssl/src/tls.erl
+++ b/lib/ssl/src/tls.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl
index 93716d31b8..9880befa94 100644
--- a/lib/ssl/src/tls_connection.erl
+++ b/lib/ssl/src/tls_connection.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
-module(tls_connection).
--behaviour(gen_fsm).
+-behaviour(gen_statem).
-include("tls_connection.hrl").
-include("tls_handshake.hrl").
@@ -43,31 +43,34 @@
%% Internal application API
%% Setup
--export([start_fsm/8]).
+-export([start_fsm/8, start_link/7, init/1]).
%% State transition handling
--export([next_record/1, next_state/4, next_state_connection/2]).
+-export([next_record/1, next_event/3]).
%% Handshake handling
--export([renegotiate/1, send_handshake/2, send_change_cipher/2]).
+-export([renegotiate/2, send_handshake/2,
+ queue_handshake/2, queue_change_cipher/2,
+ reinit_handshake_data/1, handle_sni_extension/2]).
%% Alert and close handling
-export([send_alert/2, handle_own_alert/4, handle_close_alert/3,
- handle_normal_shutdown/3, handle_unexpected_message/3,
+ handle_normal_shutdown/3,
close/5, alert_user/6, alert_user/9
]).
%% Data handling
-export([write_application_data/3, read_application_data/2,
- passive_receive/2, next_record_if_active/1]).
+ passive_receive/2, next_record_if_active/1, handle_common_event/4]).
-%% Called by tls_connection_sup
--export([start_link/7]).
-
-%% gen_fsm callbacks
--export([init/1, hello/2, certify/2, cipher/2,
- abbreviated/2, connection/2, handle_event/3,
- handle_sync_event/4, handle_info/3, terminate/3, code_change/4, format_status/2]).
+%% gen_statem state functions
+-export([init/3, error/3, downgrade/3, %% Initiation and take down states
+ hello/3, certify/3, cipher/3, abbreviated/3, %% Handshake states
+ connection/3]).
+%% gen_statem callbacks
+-export([terminate/3, code_change/4, format_status/2]).
+
+-define(GEN_STATEM_CB_MODE, state_functions).
%%====================================================================
%% Internal application API
@@ -100,17 +103,32 @@ start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_, Tracker} =
Error
end.
-send_handshake(Handshake, #state{negotiated_version = Version,
- socket = Socket,
- transport_cb = Transport,
- tls_handshake_history = Hist0,
- connection_states = ConnectionStates0} = State0) ->
+send_handshake(Handshake, State) ->
+ send_handshake_flight(queue_handshake(Handshake, State)).
+
+queue_handshake(Handshake, #state{negotiated_version = Version,
+ tls_handshake_history = Hist0,
+ flight_buffer = Flight0,
+ connection_states = ConnectionStates0} = State0) ->
{BinHandshake, ConnectionStates, Hist} =
encode_handshake(Handshake, Version, ConnectionStates0, Hist0),
- Transport:send(Socket, BinHandshake),
State0#state{connection_states = ConnectionStates,
- tls_handshake_history = Hist
- }.
+ tls_handshake_history = Hist,
+ flight_buffer = Flight0 ++ [BinHandshake]}.
+
+send_handshake_flight(#state{socket = Socket,
+ transport_cb = Transport,
+ flight_buffer = Flight} = State0) ->
+ Transport:send(Socket, Flight),
+ State0#state{flight_buffer = []}.
+
+queue_change_cipher(Msg, #state{negotiated_version = Version,
+ flight_buffer = Flight0,
+ connection_states = ConnectionStates0} = State0) ->
+ {BinChangeCipher, ConnectionStates} =
+ encode_change_cipher(Msg, Version, ConnectionStates0),
+ State0#state{connection_states = ConnectionStates,
+ flight_buffer = Flight0 ++ [BinChangeCipher]}.
send_alert(Alert, #state{negotiated_version = Version,
socket = Socket,
@@ -121,14 +139,15 @@ send_alert(Alert, #state{negotiated_version = Version,
Transport:send(Socket, BinMsg),
State0#state{connection_states = ConnectionStates}.
-send_change_cipher(Msg, #state{connection_states = ConnectionStates0,
- socket = Socket,
- negotiated_version = Version,
- transport_cb = Transport} = State0) ->
- {BinChangeCipher, ConnectionStates} =
- encode_change_cipher(Msg, Version, ConnectionStates0),
- Transport:send(Socket, BinChangeCipher),
- State0#state{connection_states = ConnectionStates}.
+reinit_handshake_data(State) ->
+ %% premaster_secret, public_key_info and tls_handshake_info
+ %% are only needed during the handshake phase.
+ %% To reduce memory foot print of a connection reinitialize them.
+ State#state{
+ premaster_secret = undefined,
+ public_key_info = undefined,
+ tls_handshake_history = ssl_handshake:init_handshake_history()
+ }.
%%====================================================================
%% tls_connection_sup API
@@ -147,23 +166,34 @@ start_link(Role, Host, Port, Socket, Options, User, CbInfo) ->
init([Role, Host, Port, Socket, Options, User, CbInfo]) ->
process_flag(trap_exit, true),
- State = initial_state(Role, Host, Port, Socket, Options, User, CbInfo),
- gen_fsm:enter_loop(?MODULE, [], hello, State, get_timeout(State)).
+ State0 = initial_state(Role, Host, Port, Socket, Options, User, CbInfo),
+ try
+ State = ssl_connection:ssl_config(State0#state.ssl_options, Role, State0),
+ gen_statem:enter_loop(?MODULE, [], ?GEN_STATEM_CB_MODE, init, State)
+ catch throw:Error ->
+ gen_statem:enter_loop(?MODULE, [], ?GEN_STATEM_CB_MODE, error, {Error, State0})
+ end.
%%--------------------------------------------------------------------
-%% Description:There should be one instance of this function for each
-%% possible state name. Whenever a gen_fsm receives an event sent
-%% using gen_fsm:send_event/2, the instance of this function with the
-%% same name as the current state name StateName is called to handle
-%% the event. It is also called if a timeout occurs.
-%%
-hello(start, #state{host = Host, port = Port, role = client,
- ssl_options = SslOpts,
- session = #session{own_certificate = Cert} = Session0,
- session_cache = Cache, session_cache_cb = CacheCb,
- transport_cb = Transport, socket = Socket,
- connection_states = ConnectionStates0,
- renegotiation = {Renegotiation, _}} = State0) ->
+%% State functions
+%%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
+-spec init(gen_statem:event_type(),
+ {start, timeout()} | term(), #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+
+init({call, From}, {start, Timeout},
+ #state{host = Host, port = Port, role = client,
+ ssl_options = SslOpts,
+ session = #session{own_certificate = Cert} = Session0,
+ transport_cb = Transport, socket = Socket,
+ connection_states = ConnectionStates0,
+ renegotiation = {Renegotiation, _},
+ session_cache = Cache,
+ session_cache_cb = CacheCb
+ } = State0) ->
+ Timer = ssl_connection:start_or_recv_cancel_timer(Timeout, From),
Hello = tls_handshake:client_hello(Host, Port, ConnectionStates0, SslOpts,
Cache, CacheCb, Renegotiation, Cert),
@@ -177,21 +207,44 @@ hello(start, #state{host = Host, port = Port, role = client,
negotiated_version = Version, %% Requested version
session =
Session0#session{session_id = Hello#client_hello.session_id},
- tls_handshake_history = Handshake},
+ tls_handshake_history = Handshake,
+ start_or_recv_from = From,
+ timer = Timer},
{Record, State} = next_record(State1),
- next_state(hello, hello, Record, State);
-
-hello(Hello = #client_hello{client_version = ClientVersion,
- extensions = #hello_extensions{ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves}},
- State = #state{connection_states = ConnectionStates0,
- port = Port, session = #session{own_certificate = Cert} = Session0,
- renegotiation = {Renegotiation, _},
- session_cache = Cache,
- session_cache_cb = CacheCb,
- negotiated_protocol = CurrentProtocol,
- key_algorithm = KeyExAlg,
- ssl_options = SslOpts}) ->
+ next_event(hello, Record, State);
+init(Type, Event, State) ->
+ ssl_connection:init(Type, Event, State, ?MODULE).
+
+%%--------------------------------------------------------------------
+-spec error(gen_statem:event_type(),
+ {start, timeout()} | term(), #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+
+error({call, From}, {start, _Timeout}, {Error, State}) ->
+ {stop_and_reply, normal, {reply, From, {error, Error}}, State};
+error({call, From}, Msg, State) ->
+ handle_call(Msg, From, error, State);
+error(_, _, _) ->
+ {keep_state_and_data, [postpone]}.
+
+%%--------------------------------------------------------------------
+-spec hello(gen_statem:event_type(),
+ #hello_request{} | #client_hello{} | #server_hello{} | term(),
+ #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+hello(internal, #client_hello{client_version = ClientVersion,
+ extensions = #hello_extensions{ec_point_formats = EcPointFormats,
+ elliptic_curves = EllipticCurves}} = Hello,
+ #state{connection_states = ConnectionStates0,
+ port = Port, session = #session{own_certificate = Cert} = Session0,
+ renegotiation = {Renegotiation, _},
+ session_cache = Cache,
+ session_cache_cb = CacheCb,
+ negotiated_protocol = CurrentProtocol,
+ key_algorithm = KeyExAlg,
+ ssl_options = SslOpts} = State) ->
case tls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb,
ConnectionStates0, Cert, KeyExAlg}, Renegotiation) of
@@ -203,7 +256,8 @@ hello(Hello = #client_hello{client_version = ClientVersion,
undefined -> CurrentProtocol;
_ -> Protocol0
end,
- ssl_connection:hello({common_client_hello, Type, ServerHelloExt},
+
+ ssl_connection:hello(internal, {common_client_hello, Type, ServerHelloExt},
State#state{connection_states = ConnectionStates,
negotiated_version = Version,
hashsign_algorithm = HashSign,
@@ -211,8 +265,7 @@ hello(Hello = #client_hello{client_version = ClientVersion,
client_ecc = {EllipticCurves, EcPointFormats},
negotiated_protocol = Protocol}, ?MODULE)
end;
-
-hello(Hello = #server_hello{},
+hello(internal, #server_hello{} = Hello,
#state{connection_states = ConnectionStates0,
negotiated_version = ReqVersion,
role = client,
@@ -225,25 +278,52 @@ hello(Hello = #server_hello{},
ssl_connection:handle_session(Hello,
Version, NewId, ConnectionStates, ProtoExt, Protocol, State)
end;
+hello(info, Event, State) ->
+ handle_info(Event, hello, State);
+hello(Type, Event, State) ->
+ ssl_connection:hello(Type, Event, State, ?MODULE).
-hello(Msg, State) ->
- ssl_connection:hello(Msg, State, ?MODULE).
-
-abbreviated(Msg, State) ->
- ssl_connection:abbreviated(Msg, State, ?MODULE).
+%%--------------------------------------------------------------------
+-spec abbreviated(gen_statem:event_type(), term(), #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+abbreviated(info, Event, State) ->
+ handle_info(Event, abbreviated, State);
+abbreviated(Type, Event, State) ->
+ ssl_connection:abbreviated(Type, Event, State, ?MODULE).
-certify(Msg, State) ->
- ssl_connection:certify(Msg, State, ?MODULE).
+%%--------------------------------------------------------------------
+-spec certify(gen_statem:event_type(), term(), #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+certify(info, Event, State) ->
+ handle_info(Event, certify, State);
+certify(Type, Event, State) ->
+ ssl_connection:certify(Type, Event, State, ?MODULE).
-cipher(Msg, State) ->
- ssl_connection:cipher(Msg, State, ?MODULE).
+%%--------------------------------------------------------------------
+-spec cipher(gen_statem:event_type(), term(), #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+cipher(info, Event, State) ->
+ handle_info(Event, cipher, State);
+cipher(Type, Event, State) ->
+ ssl_connection:cipher(Type, Event, State, ?MODULE).
-connection(#hello_request{}, #state{host = Host, port = Port,
- session = #session{own_certificate = Cert} = Session0,
- session_cache = Cache, session_cache_cb = CacheCb,
- ssl_options = SslOpts,
- connection_states = ConnectionStates0,
- renegotiation = {Renegotiation, _}} = State0) ->
+%%--------------------------------------------------------------------
+-spec connection(gen_statem:event_type(),
+ #hello_request{} | #client_hello{}| term(), #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+connection(info, Event, State) ->
+ handle_info(Event, connection, State);
+connection(internal, #hello_request{},
+ #state{role = client, host = Host, port = Port,
+ session = #session{own_certificate = Cert} = Session0,
+ session_cache = Cache, session_cache_cb = CacheCb,
+ ssl_options = SslOpts,
+ connection_states = ConnectionStates0,
+ renegotiation = {Renegotiation, _}} = State0) ->
Hello = tls_handshake:client_hello(Host, Port, ConnectionStates0, SslOpts,
Cache, CacheCb, Renegotiation, Cert),
State1 = send_handshake(Hello, State0),
@@ -251,58 +331,51 @@ connection(#hello_request{}, #state{host = Host, port = Port,
next_record(
State1#state{session = Session0#session{session_id
= Hello#client_hello.session_id}}),
- next_state(connection, hello, Record, State);
-
-connection(#client_hello{} = Hello, #state{role = server, allow_renegotiate = true} = State) ->
+ next_event(hello, Record, State);
+connection(internal, #client_hello{} = Hello,
+ #state{role = server, allow_renegotiate = true} = State0) ->
%% Mitigate Computational DoS attack
%% http://www.educatedguesswork.org/2011/10/ssltls_and_computational_dos.html
%% http://www.thc.org/thc-ssl-dos/ Rather than disabling client
%% initiated renegotiation we will disallow many client initiated
%% renegotiations immediately after each other.
erlang:send_after(?WAIT_TO_ALLOW_RENEGOTIATION, self(), allow_renegotiate),
- hello(Hello, State#state{allow_renegotiate = false});
-
-connection(#client_hello{}, #state{role = server, allow_renegotiate = false} = State0) ->
+ {Record, State} = next_record(State0#state{allow_renegotiate = false,
+ renegotiation = {true, peer}}),
+ next_event(hello, Record, State, [{next_event, internal, Hello}]);
+connection(internal, #client_hello{},
+ #state{role = server, allow_renegotiate = false} = State0) ->
Alert = ?ALERT_REC(?WARNING, ?NO_RENEGOTIATION),
- State = send_alert(Alert, State0),
- next_state_connection(connection, State);
-
-connection(Msg, State) ->
- ssl_connection:connection(Msg, State, tls_connection).
-
-%%--------------------------------------------------------------------
-%% Description: Whenever a gen_fsm receives an event sent using
-%% gen_fsm:send_all_state_event/2, this function is called to handle
-%% the event. Not currently used!
-%%--------------------------------------------------------------------
-handle_event(_Event, StateName, State) ->
- {next_state, StateName, State, get_timeout(State)}.
+ State1 = send_alert(Alert, State0),
+ {Record, State} = ssl_connection:prepare_connection(State1, ?MODULE),
+ next_event(connection, Record, State);
+connection(Type, Event, State) ->
+ ssl_connection:connection(Type, Event, State, ?MODULE).
%%--------------------------------------------------------------------
-%% Description: Whenever a gen_fsm receives an event sent using
-%% gen_fsm:sync_send_all_state_event/2,3, this function is called to handle
-%% the event.
+-spec downgrade(gen_statem:event_type(), term(), #state{}) ->
+ gen_statem:state_function_result().
%%--------------------------------------------------------------------
-handle_sync_event(Event, From, StateName, State) ->
- ssl_connection:handle_sync_event(Event, From, StateName, State).
+downgrade(Type, Event, State) ->
+ ssl_connection:downgrade(Type, Event, State, ?MODULE).
%%--------------------------------------------------------------------
-%% Description: This function is called by a gen_fsm when it receives any
-%% other message than a synchronous or asynchronous event
-%% (or a system message).
+%% Event handling functions called by state functions to handle
+%% common or unexpected events for the state.
%%--------------------------------------------------------------------
-
+handle_call(Event, From, StateName, State) ->
+ ssl_connection:handle_call(Event, From, StateName, State, ?MODULE).
+
%% raw data from socket, unpack records
handle_info({Protocol, _, Data}, StateName,
#state{data_tag = Protocol} = State0) ->
case next_tls_record(Data, State0) of
{Record, State} ->
- next_state(StateName, StateName, Record, State);
+ next_event(StateName, Record, State);
#alert{} = Alert ->
handle_normal_shutdown(Alert, StateName, State0),
- {stop, {shutdown, own_alert}, State0}
+ {stop, {shutdown, own_alert}}
end;
-
handle_info({CloseTag, Socket}, StateName,
#state{socket = Socket, close_tag = CloseTag,
negotiated_version = Version} = State) ->
@@ -321,32 +394,72 @@ handle_info({CloseTag, Socket}, StateName,
ok
end,
handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), StateName, State),
- {stop, {shutdown, transport_closed}, State};
-
+ {stop, {shutdown, transport_closed}};
handle_info(Msg, StateName, State) ->
ssl_connection:handle_info(Msg, StateName, State).
+handle_common_event(internal, #alert{} = Alert, StateName,
+ #state{negotiated_version = Version} = State) ->
+ handle_own_alert(Alert, Version, StateName, State);
+
+%%% TLS record protocol level handshake messages
+handle_common_event(internal, #ssl_tls{type = ?HANDSHAKE, fragment = Data},
+ StateName, #state{protocol_buffers =
+ #protocol_buffers{tls_handshake_buffer = Buf0} = Buffers,
+ negotiated_version = Version,
+ ssl_options = Options} = State0) ->
+ try
+ {Packets, Buf} = tls_handshake:get_tls_handshake(Version,Data,Buf0, Options),
+ State =
+ State0#state{protocol_buffers =
+ Buffers#protocol_buffers{tls_handshake_buffer = Buf}},
+ Events = tls_handshake_events(Packets),
+ case StateName of
+ connection ->
+ ssl_connection:hibernate_after(StateName, State, Events);
+ _ ->
+ {next_state, StateName, State, Events}
+ end
+ catch throw:#alert{} = Alert ->
+ handle_own_alert(Alert, Version, StateName, State0)
+ end;
+%%% TLS record protocol level application data messages
+handle_common_event(internal, #ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, StateName, State) ->
+ {next_state, StateName, State, [{next_event, internal, {application_data, Data}}]};
+%%% TLS record protocol level change cipher messages
+handle_common_event(internal, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = Data}, StateName, State) ->
+ {next_state, StateName, State, [{next_event, internal, #change_cipher_spec{type = Data}}]};
+%%% TLS record protocol level Alert messages
+handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, StateName,
+ #state{negotiated_version = Version} = State) ->
+ case decode_alerts(EncAlerts) of
+ Alerts = [_|_] ->
+ handle_alerts(Alerts, {next_state, StateName, State});
+ #alert{} = Alert ->
+ handle_own_alert(Alert, Version, StateName, State)
+ end;
+%% Ignore unknown TLS record level protocol messages
+handle_common_event(internal, #ssl_tls{type = _Unknown}, StateName, State) ->
+ {next_state, StateName, State}.
+
%%--------------------------------------------------------------------
-%% Description:This function is called by a gen_fsm when it is about
-%% to terminate. It should be the opposite of Module:init/1 and do any
-%% necessary cleaning up. When it returns, the gen_fsm terminates with
-%% Reason. The return value is ignored.
+%% gen_statem callbacks
%%--------------------------------------------------------------------
terminate(Reason, StateName, State) ->
catch ssl_connection:terminate(Reason, StateName, State).
+format_status(Type, Data) ->
+ ssl_connection:format_status(Type, Data).
+
%%--------------------------------------------------------------------
%% code_change(OldVsn, StateName, State, Extra) -> {ok, StateName, NewState}
%% Description: Convert process state when code is changed
%%--------------------------------------------------------------------
code_change(_OldVsn, StateName, State0, {Direction, From, To}) ->
State = convert_state(State0, Direction, From, To),
- {ok, StateName, State};
+ {?GEN_STATEM_CB_MODE, StateName, State};
code_change(_OldVsn, StateName, State, _) ->
- {ok, StateName, State}.
-
-format_status(Type, Data) ->
- ssl_connection:format_status(Type, Data).
+ {?GEN_STATEM_CB_MODE, StateName, State}.
%%--------------------------------------------------------------------
%%% Internal functions
@@ -366,7 +479,8 @@ decode_alerts(Bin) ->
initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions, Tracker}, User,
{CbModule, DataTag, CloseTag, ErrorTag}) ->
- ConnectionStates = ssl_record:init_connection_states(Role),
+ #ssl_options{beast_mitigation = BeastMitigation} = SSLOptions,
+ ConnectionStates = ssl_record:init_connection_states(Role, BeastMitigation),
SessionCacheCb = case application:get_env(ssl, session_cb) of
{ok, Cb} when is_atom(Cb) ->
@@ -396,9 +510,9 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions, Tracker}, Us
renegotiation = {false, first},
allow_renegotiate = SSLOptions#ssl_options.client_renegotiation,
start_or_recv_from = undefined,
- send_queue = queue:new(),
protocol_cb = ?MODULE,
- tracker = Tracker
+ tracker = Tracker,
+ flight_buffer = []
}.
@@ -418,80 +532,6 @@ update_ssl_options_from_sni(OrigSSLOptions, SNIHostname) ->
ssl:handle_options(SSLOption, OrigSSLOptions)
end.
-next_state(Current,_, #alert{} = Alert, #state{negotiated_version = Version} = State) ->
- handle_own_alert(Alert, Version, Current, State);
-
-next_state(_,Next, no_record, State) ->
- {next_state, Next, State, get_timeout(State)};
-
-next_state(Current, Next, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, #state{negotiated_version = Version} = State) ->
- case decode_alerts(EncAlerts) of
- Alerts = [_|_] ->
- handle_alerts(Alerts, {next_state, Next, State, get_timeout(State)});
- #alert{} = Alert ->
- handle_own_alert(Alert, Version, Current, State)
- end;
-next_state(Current, Next, #ssl_tls{type = ?HANDSHAKE, fragment = Data},
- State0 = #state{protocol_buffers =
- #protocol_buffers{tls_handshake_buffer = Buf0} = Buffers,
- negotiated_version = Version}) ->
- Handle =
- fun({#hello_request{} = Packet, _}, {next_state, connection = SName, State}) ->
- %% This message should not be included in handshake
- %% message hashes. Starts new handshake (renegotiation)
- Hs0 = ssl_handshake:init_handshake_history(),
- ?MODULE:SName(Packet, State#state{tls_handshake_history=Hs0,
- renegotiation = {true, peer}});
- ({#hello_request{} = Packet, _}, {next_state, SName, State}) ->
- %% This message should not be included in handshake
- %% message hashes. Already in negotiation so it will be ignored!
- ?MODULE:SName(Packet, State);
- ({#client_hello{} = Packet, Raw}, {next_state, connection = SName, HState0}) ->
- HState = handle_sni_extension(Packet, HState0),
- Version = Packet#client_hello.client_version,
- Hs0 = ssl_handshake:init_handshake_history(),
- Hs1 = ssl_handshake:update_handshake_history(Hs0, Raw),
- ?MODULE:SName(Packet, HState#state{tls_handshake_history=Hs1,
- renegotiation = {true, peer}});
- ({Packet, Raw}, {next_state, SName, HState0 = #state{tls_handshake_history=Hs0}}) ->
- HState = handle_sni_extension(Packet, HState0),
- Hs1 = ssl_handshake:update_handshake_history(Hs0, Raw),
- ?MODULE:SName(Packet, HState#state{tls_handshake_history=Hs1});
- (_, StopState) -> StopState
- end,
- try
- {Packets, Buf} = tls_handshake:get_tls_handshake(Version,Data,Buf0),
- State = State0#state{protocol_buffers =
- Buffers#protocol_buffers{tls_packets = Packets,
- tls_handshake_buffer = Buf}},
- handle_tls_handshake(Handle, Next, State)
- catch throw:#alert{} = Alert ->
- handle_own_alert(Alert, Version, Current, State0)
- end;
-
-next_state(_, StateName, #ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, State0) ->
- case read_application_data(Data, State0) of
- Stop = {stop,_,_} ->
- Stop;
- {Record, State} ->
- next_state(StateName, StateName, Record, State)
- end;
-next_state(Current, Next, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = <<1>>} =
- _ChangeCipher,
- #state{connection_states = ConnectionStates0} = State0)
- when Next == cipher; Next == abbreviated ->
- ConnectionStates1 =
- ssl_record:activate_pending_connection_state(ConnectionStates0, read),
- {Record, State} = next_record(State0#state{connection_states = ConnectionStates1}),
- next_state(Current, Next, Record, State#state{expecting_finished = true});
-next_state(Current, _Next, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = <<1>>} =
- _ChangeCipher, #state{negotiated_version = Version} = State) ->
- handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE), Version, Current, State);
-next_state(Current, Next, #ssl_tls{type = _Unknown}, State0) ->
- %% Ignore unknown type
- {Record, State} = next_record(State0),
- next_state(Current, Next, Record, State).
-
next_tls_record(Data, #state{protocol_buffers = #protocol_buffers{tls_record_buffer = Buf0,
tls_cipher_texts = CT0} = Buffers} = State0) ->
case tls_record:get_tls_records(Data, Buf0) of
@@ -504,11 +544,6 @@ next_tls_record(Data, #state{protocol_buffers = #protocol_buffers{tls_record_buf
Alert
end.
-next_record(#state{protocol_buffers = #protocol_buffers{tls_packets = [], tls_cipher_texts = []},
- socket = Socket,
- transport_cb = Transport} = State) ->
- ssl_socket:setopts(Transport, Socket, [{active,once}]),
- {no_record, State};
next_record(#state{protocol_buffers =
#protocol_buffers{tls_packets = [], tls_cipher_texts = [CT | Rest]}
= Buffers,
@@ -522,6 +557,11 @@ next_record(#state{protocol_buffers =
#alert{} = Alert ->
{Alert, State}
end;
+next_record(#state{protocol_buffers = #protocol_buffers{tls_packets = [], tls_cipher_texts = []},
+ socket = Socket,
+ transport_cb = Transport} = State) ->
+ ssl_socket:setopts(Transport, Socket, [{active,once}]),
+ {no_record, State};
next_record(State) ->
{no_record, State}.
@@ -533,55 +573,36 @@ next_record_if_active(State =
next_record_if_active(State) ->
next_record(State).
-next_state_connection(StateName, #state{send_queue = Queue0,
- negotiated_version = Version,
- socket = Socket,
- transport_cb = Transport,
- connection_states = ConnectionStates0
- } = State) ->
- %% Send queued up data that was queued while renegotiating
- case queue:out(Queue0) of
- {{value, {From, Data}}, Queue} ->
- {Msgs, ConnectionStates} =
- ssl_record:encode_data(Data, Version, ConnectionStates0),
- Result = Transport:send(Socket, Msgs),
- gen_fsm:reply(From, Result),
- next_state_connection(StateName,
- State#state{connection_states = ConnectionStates,
- send_queue = Queue});
- {empty, Queue0} ->
- next_state_is_connection(StateName, State)
- end.
-
-%% In next_state_is_connection/1: clear tls_handshake,
-%% premaster_secret and public_key_info (only needed during handshake)
-%% to reduce memory foot print of a connection.
-next_state_is_connection(_, State =
- #state{start_or_recv_from = RecvFrom,
- socket_options =
- #socket_options{active = false}}) when RecvFrom =/= undefined ->
- passive_receive(State#state{premaster_secret = undefined,
- public_key_info = undefined,
- tls_handshake_history = ssl_handshake:init_handshake_history()}, connection);
-
-next_state_is_connection(StateName, State0) ->
- {Record, State} = next_record_if_active(State0),
- next_state(StateName, connection, Record, State#state{premaster_secret = undefined,
- public_key_info = undefined,
- tls_handshake_history = ssl_handshake:init_handshake_history()}).
-
passive_receive(State0 = #state{user_data_buffer = Buffer}, StateName) ->
case Buffer of
<<>> ->
{Record, State} = next_record(State0),
- next_state(StateName, StateName, Record, State);
+ next_event(StateName, Record, State);
_ ->
- case read_application_data(<<>>, State0) of
- Stop = {stop, _, _} ->
- Stop;
- {Record, State} ->
- next_state(StateName, StateName, Record, State)
- end
+ {Record, State} = read_application_data(<<>>, State0),
+ next_event(StateName, Record, State)
+ end.
+
+next_event(StateName, Record, State) ->
+ next_event(StateName, Record, State, []).
+
+next_event(connection = StateName, no_record, State0, Actions) ->
+ case next_record_if_active(State0) of
+ {no_record, State} ->
+ ssl_connection:hibernate_after(StateName, State, Actions);
+ {#ssl_tls{} = Record, State} ->
+ {next_state, StateName, State, [{next_event, internal, {tls_record, Record}} | Actions]};
+ {#alert{} = Alert, State} ->
+ {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
+ end;
+next_event(StateName, Record, State, Actions) ->
+ case Record of
+ no_record ->
+ {next_state, StateName, State, Actions};
+ #ssl_tls{} = Record ->
+ {next_state, StateName, State, [{next_event, internal, {tls_record, Record}} | Actions]};
+ #alert{} = Alert ->
+ {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
end.
read_application_data(Data, #state{user_application = {_Mon, Pid},
@@ -625,11 +646,6 @@ read_application_data(Data, #state{user_application = {_Mon, Pid},
{stop, normal, State0}
end.
-get_timeout(#state{ssl_options=#ssl_options{hibernate_after = undefined}}) ->
- infinity;
-get_timeout(#state{ssl_options=#ssl_options{hibernate_after = HibernateAfter}}) ->
- HibernateAfter.
-
%% Picks ClientData
get_data(_, _, <<>>) ->
{more, <<>>};
@@ -736,7 +752,7 @@ header(N, Binary) ->
[ByteN | header(N-1, NewBinary)].
send_or_reply(false, _Pid, From, Data) when From =/= undefined ->
- gen_fsm:reply(From, Data);
+ gen_statem:reply(From, Data);
%% Can happen when handling own alert or tcp error/close and there is
%% no outstanding gen_fsm sync events
send_or_reply(false, no_pid, _, _) ->
@@ -747,51 +763,31 @@ send_or_reply(_, Pid, _From, Data) ->
send_user(Pid, Msg) ->
Pid ! Msg.
-handle_tls_handshake(Handle, StateName,
- #state{protocol_buffers =
- #protocol_buffers{tls_packets = [Packet]} = Buffers} = State) ->
- FsmReturn = {next_state, StateName, State#state{protocol_buffers =
- Buffers#protocol_buffers{tls_packets = []}}},
- Handle(Packet, FsmReturn);
-
-handle_tls_handshake(Handle, StateName,
- #state{protocol_buffers =
- #protocol_buffers{tls_packets = [Packet | Packets]} = Buffers} =
- State0) ->
- FsmReturn = {next_state, StateName, State0#state{protocol_buffers =
- Buffers#protocol_buffers{tls_packets =
- Packets}}},
- case Handle(Packet, FsmReturn) of
- {next_state, NextStateName, State, _Timeout} ->
- handle_tls_handshake(Handle, NextStateName, State);
- {next_state, NextStateName, State} ->
- handle_tls_handshake(Handle, NextStateName, State);
- {stop, _,_} = Stop ->
- Stop
- end;
-
-handle_tls_handshake(_Handle, _StateName, #state{}) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+tls_handshake_events([]) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, malformed_handshake));
+tls_handshake_events(Packets) ->
+ lists:map(fun(Packet) ->
+ {next_event, internal, {handshake, Packet}}
+ end, Packets).
write_application_data(Data0, From,
#state{socket = Socket,
negotiated_version = Version,
transport_cb = Transport,
connection_states = ConnectionStates0,
- send_queue = SendQueue,
socket_options = SockOpts,
ssl_options = #ssl_options{renegotiate_at = RenegotiateAt}} = State) ->
Data = encode_packet(Data0, SockOpts),
case time_to_renegotiate(Data, ConnectionStates0, RenegotiateAt) of
true ->
- renegotiate(State#state{send_queue = queue:in_r({From, Data}, SendQueue),
- renegotiation = {true, internal}});
+ renegotiate(State#state{renegotiation = {true, internal}},
+ [{next_event, {call, From}, {application_data, Data0}}]);
false ->
{Msgs, ConnectionStates} = ssl_record:encode_data(Data, Version, ConnectionStates0),
Result = Transport:send(Socket, Msgs),
- {reply, Result,
- connection, State#state{connection_states = ConnectionStates}, get_timeout(State)}
+ ssl_connection:hibernate_after(connection, State#state{connection_states = ConnectionStates},
+ [{reply, From, Result}])
end.
encode_packet(Data, #socket_options{packet=Packet}) ->
@@ -823,69 +819,73 @@ is_time_to_renegotiate(N, M) when N < M->
false;
is_time_to_renegotiate(_,_) ->
true.
-renegotiate(#state{role = client} = State) ->
+renegotiate(#state{role = client} = State, Actions) ->
%% Handle same way as if server requested
%% the renegotiation
Hs0 = ssl_handshake:init_handshake_history(),
- connection(#hello_request{}, State#state{tls_handshake_history = Hs0});
+ {next_state, connection, State#state{tls_handshake_history = Hs0},
+ [{next_event, internal, #hello_request{}} | Actions]};
+
renegotiate(#state{role = server,
socket = Socket,
transport_cb = Transport,
negotiated_version = Version,
- connection_states = ConnectionStates0} = State0) ->
+ connection_states = ConnectionStates0} = State0, Actions) ->
HelloRequest = ssl_handshake:hello_request(),
Frag = tls_handshake:encode_handshake(HelloRequest, Version),
Hs0 = ssl_handshake:init_handshake_history(),
{BinMsg, ConnectionStates} =
ssl_record:encode_handshake(Frag, Version, ConnectionStates0),
Transport:send(Socket, BinMsg),
- {Record, State} = next_record(State0#state{connection_states =
- ConnectionStates,
- tls_handshake_history = Hs0}),
- next_state(connection, hello, Record, State#state{allow_renegotiate = true}).
+ State1 = State0#state{connection_states =
+ ConnectionStates,
+ tls_handshake_history = Hs0},
+ {Record, State} = next_record(State1),
+ next_event(hello, Record, State, Actions).
handle_alerts([], Result) ->
Result;
-handle_alerts(_, {stop, _, _} = Stop) ->
- %% If it is a fatal alert immediately close
+handle_alerts(_, {stop,_} = Stop) ->
Stop;
-handle_alerts([Alert | Alerts], {next_state, StateName, State, _Timeout}) ->
- handle_alerts(Alerts, handle_alert(Alert, StateName, State)).
-
+handle_alerts([Alert | Alerts], {next_state, StateName, State}) ->
+ handle_alerts(Alerts, handle_alert(Alert, StateName, State));
+handle_alerts([Alert | Alerts], {next_state, StateName, State, _Actions}) ->
+ handle_alerts(Alerts, handle_alert(Alert, StateName, State)).
handle_alert(#alert{level = ?FATAL} = Alert, StateName,
#state{socket = Socket, transport_cb = Transport,
ssl_options = SslOpts, start_or_recv_from = From, host = Host,
port = Port, session = Session, user_application = {_Mon, Pid},
- role = Role, socket_options = Opts, tracker = Tracker} = State) ->
+ role = Role, socket_options = Opts, tracker = Tracker}) ->
invalidate_session(Role, Host, Port, Session),
log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
alert_user(Transport, Tracker, Socket, StateName, Opts, Pid, From, Alert, Role),
- {stop, normal, State};
+ {stop, normal};
handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
StateName, State) ->
handle_normal_shutdown(Alert, StateName, State),
- {stop, {shutdown, peer_close}, State};
+ {stop, {shutdown, peer_close}};
handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
#state{ssl_options = SslOpts, renegotiation = {true, internal}} = State) ->
log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
handle_normal_shutdown(Alert, StateName, State),
- {stop, {shutdown, peer_close}, State};
+ {stop, {shutdown, peer_close}};
handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
#state{ssl_options = SslOpts, renegotiation = {true, From}} = State0) ->
log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
- gen_fsm:reply(From, {error, renegotiation_rejected}),
+ gen_statem:reply(From, {error, renegotiation_rejected}),
{Record, State} = next_record(State0),
- next_state(StateName, connection, Record, State);
+ %% Go back to connection!
+ next_event(connection, Record, State);
%% Gracefully log and ignore all other warning alerts
handle_alert(#alert{level = ?WARNING} = Alert, StateName,
#state{ssl_options = SslOpts} = State0) ->
log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
{Record, State} = next_record(State0),
- next_state(StateName, StateName, Record, State).
+ next_event(StateName, Record, State).
alert_user(Transport, Tracker, Socket, connection, Opts, Pid, From, Alert, Role) ->
alert_user(Transport, Tracker, Socket, Opts#socket_options.active, Pid, From, Alert, Role);
@@ -895,7 +895,7 @@ alert_user(Transport, Tracker, Socket,_, _, _, From, Alert, Role) ->
alert_user(Transport, Tracker, Socket, From, Alert, Role) ->
alert_user(Transport, Tracker, Socket, false, no_pid, From, Alert, Role).
-alert_user(_, _, _, false = Active, Pid, From, Alert, Role) ->
+alert_user(_, _, _, false = Active, Pid, From, Alert, Role) when From =/= undefined ->
%% If there is an outstanding ssl_accept | recv
%% From will be defined and send_or_reply will
%% send the appropriate error message.
@@ -937,7 +937,7 @@ handle_own_alert(Alert, Version, StateName,
catch _:_ ->
ok
end,
- {stop, {shutdown, own_alert}, State}.
+ {stop, {shutdown, own_alert}}.
handle_normal_shutdown(Alert, _, #state{socket = Socket,
transport_cb = Transport,
@@ -954,11 +954,6 @@ handle_normal_shutdown(Alert, StateName, #state{socket = Socket,
start_or_recv_from = RecvFrom, role = Role}) ->
alert_user(Transport, Tracker, Socket, StateName, Opts, Pid, RecvFrom, Alert, Role).
-handle_unexpected_message(Msg, Info, #state{negotiated_version = Version} = State) ->
- Alert = ?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE),
- handle_own_alert(Alert, Version, {Info, Msg}, State).
-
-
handle_close_alert(Data, StateName, State0) ->
case next_tls_record(Data, State0) of
{#ssl_tls{type = ?ALERT, fragment = EncAlerts}, State} ->
@@ -979,27 +974,6 @@ invalidate_session(client, Host, Port, Session) ->
invalidate_session(server, _, Port, Session) ->
ssl_manager:invalidate_session(Port, Session).
-%% User downgrades connection
-%% When downgrading an TLS connection to a transport connection
-%% we must recive the close message before releasing the
-%% transport socket.
-close({close, {Pid, Timeout}}, Socket, Transport, ConnectionStates, Check) when is_pid(Pid) ->
- ssl_socket:setopts(Transport, Socket, [{active, false}, {packet, ssl_tls}]),
- case Transport:recv(Socket, 0, Timeout) of
- {ok, {ssl_tls, Socket, ?ALERT, Version, Fragment}} ->
- case tls_record:decode_cipher_text(#ssl_tls{type = ?ALERT,
- version = Version,
- fragment = Fragment
- }, ConnectionStates, Check) of
- {#ssl_tls{fragment = Plain}, _} ->
- [Alert| _] = decode_alerts(Plain),
- downgrade(Alert, Transport, Socket, Pid)
- end;
- {error, timeout} ->
- {error, timeout};
- _ ->
- {error, no_tls_close}
- end;
%% User closes or recursive call!
close({close, Timeout}, Socket, Transport = gen_tcp, _,_) ->
ssl_socket:setopts(Transport, Socket, [{active, false}]),
@@ -1020,15 +994,11 @@ close({shutdown, own_alert}, Socket, Transport = gen_tcp, ConnectionStates, Chec
%% with the network but we want to maximise the odds that
%% peer application gets all data sent on the tcp connection.
close({close, ?DEFAULT_TIMEOUT}, Socket, Transport, ConnectionStates, Check);
+close(downgrade, _,_,_,_) ->
+ ok;
%% Other
close(_, Socket, Transport, _,_) ->
Transport:close(Socket).
-downgrade(#alert{description = ?CLOSE_NOTIFY}, Transport, Socket, Pid) ->
- ssl_socket:setopts(Transport, Socket, [{active, false}, {packet, 0}, {mode, binary}]),
- Transport:controlling_process(Socket, Pid),
- {ok, Socket};
-downgrade(_, _,_,_) ->
- {error, no_tls_close}.
convert_state(#state{ssl_options = Options} = State, up, "5.3.5", "5.3.6") ->
State#state{ssl_options = convert_options_partial_chain(Options, up)};
@@ -1067,6 +1037,5 @@ handle_sni_extension(#client_hello{extensions = HelloExtensions}, State0) ->
}
end
end;
-handle_sni_extension(_, State0) ->
- State0.
-
+handle_sni_extension(_, State) ->
+ State.
diff --git a/lib/ssl/src/tls_connection.hrl b/lib/ssl/src/tls_connection.hrl
index 3a416401d8..0af2258932 100644
--- a/lib/ssl/src/tls_connection.hrl
+++ b/lib/ssl/src/tls_connection.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/tls_connection_sup.erl b/lib/ssl/src/tls_connection_sup.erl
index 34579a8803..d5b228dc94 100644
--- a/lib/ssl/src/tls_connection_sup.erl
+++ b/lib/ssl/src/tls_connection_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/tls_handshake.erl b/lib/ssl/src/tls_handshake.erl
index f34eebb0e4..566b7db332 100644
--- a/lib/ssl/src/tls_handshake.erl
+++ b/lib/ssl/src/tls_handshake.erl
@@ -33,7 +33,7 @@
-include_lib("public_key/include/public_key.hrl").
-export([client_hello/8, hello/4,
- get_tls_handshake/3, encode_handshake/2, decode_handshake/3]).
+ get_tls_handshake/4, encode_handshake/2, decode_handshake/4]).
-type tls_handshake() :: #client_hello{} | ssl_handshake:ssl_handshake().
@@ -133,17 +133,17 @@ encode_handshake(Package, Version) ->
[MsgType, ?uint24(Len), Bin].
%%--------------------------------------------------------------------
--spec get_tls_handshake(tls_record:tls_version(), binary(), binary() | iolist()) ->
+-spec get_tls_handshake(tls_record:tls_version(), binary(), binary() | iolist(), #ssl_options{}) ->
{[tls_handshake()], binary()}.
%%
%% Description: Given buffered and new data from ssl_record, collects
%% and returns it as a list of handshake messages, also returns leftover
%% data.
%%--------------------------------------------------------------------
-get_tls_handshake(Version, Data, <<>>) ->
- get_tls_handshake_aux(Version, Data, []);
-get_tls_handshake(Version, Data, Buffer) ->
- get_tls_handshake_aux(Version, list_to_binary([Buffer, Data]), []).
+get_tls_handshake(Version, Data, <<>>, Options) ->
+ get_tls_handshake_aux(Version, Data, Options, []);
+get_tls_handshake(Version, Data, Buffer, Options) ->
+ get_tls_handshake_aux(Version, list_to_binary([Buffer, Data]), Options, []).
%%--------------------------------------------------------------------
%%% Internal functions
@@ -159,7 +159,8 @@ handle_client_hello(Version, #client_hello{session_id = SugesstedId,
{Port, Session0, Cache, CacheCb, ConnectionStates0, Cert, _}, Renegotiation) ->
case tls_record:is_acceptable_version(Version, Versions) of
true ->
- AvailableHashSigns = available_signature_algs(ClientHashSigns, SupportedHashSigns, Cert, Version),
+ AvailableHashSigns = ssl_handshake:available_signature_algs(
+ ClientHashSigns, SupportedHashSigns, Cert, Version),
ECCCurve = ssl_handshake:select_curve(Curves, ssl_handshake:supported_ecc(Version)),
{Type, #session{cipher_suite = CipherSuite} = Session1}
= ssl_handshake:select_session(SugesstedId, CipherSuites, AvailableHashSigns, Compressions,
@@ -167,7 +168,7 @@ handle_client_hello(Version, #client_hello{session_id = SugesstedId,
SslOpts, Cache, CacheCb, Cert),
case CipherSuite of
no_suite ->
- ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY);
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_ciphers);
_ ->
{KeyExAlg,_,_,_} = ssl_cipher:suite_definition(CipherSuite),
case ssl_handshake:select_hashsign(ClientHashSigns, Cert, KeyExAlg, SupportedHashSigns, Version) of
@@ -184,24 +185,24 @@ handle_client_hello(Version, #client_hello{session_id = SugesstedId,
end.
get_tls_handshake_aux(Version, <<?BYTE(Type), ?UINT24(Length),
- Body:Length/binary,Rest/binary>>, Acc) ->
+ Body:Length/binary,Rest/binary>>, #ssl_options{v2_hello_compatible = V2Hello} = Opts, Acc) ->
Raw = <<?BYTE(Type), ?UINT24(Length), Body/binary>>,
- Handshake = decode_handshake(Version, Type, Body),
- get_tls_handshake_aux(Version, Rest, [{Handshake,Raw} | Acc]);
-get_tls_handshake_aux(_Version, Data, Acc) ->
+ Handshake = decode_handshake(Version, Type, Body, V2Hello),
+ get_tls_handshake_aux(Version, Rest, Opts, [{Handshake,Raw} | Acc]);
+get_tls_handshake_aux(_Version, Data, _, Acc) ->
{lists:reverse(Acc), Data}.
-decode_handshake(_, ?HELLO_REQUEST, <<>>) ->
+decode_handshake(_, ?HELLO_REQUEST, <<>>, _) ->
#hello_request{};
%% Client hello v2.
%% The server must be able to receive such messages, from clients that
%% are willing to use ssl v3 or higher, but have ssl v2 compatibility.
decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor),
- ?UINT16(CSLength), ?UINT16(0),
- ?UINT16(CDLength),
- CipherSuites:CSLength/binary,
- ChallengeData:CDLength/binary>>) ->
+ ?UINT16(CSLength), ?UINT16(0),
+ ?UINT16(CDLength),
+ CipherSuites:CSLength/binary,
+ ChallengeData:CDLength/binary>>, true) ->
#client_hello{client_version = {Major, Minor},
random = ssl_v2:client_random(ChallengeData, CDLength),
session_id = 0,
@@ -209,12 +210,18 @@ decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor),
compression_methods = [?NULL],
extensions = #hello_extensions{}
};
+decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(_), ?BYTE(_),
+ ?UINT16(CSLength), ?UINT16(0),
+ ?UINT16(CDLength),
+ _CipherSuites:CSLength/binary,
+ _ChallengeData:CDLength/binary>>, false) ->
+ throw(?ALERT_REC(?FATAL, ?PROTOCOL_VERSION, ssl_v2_client_hello_no_supported));
decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
- ?BYTE(SID_length), Session_ID:SID_length/binary,
- ?UINT16(Cs_length), CipherSuites:Cs_length/binary,
- ?BYTE(Cm_length), Comp_methods:Cm_length/binary,
- Extensions/binary>>) ->
-
+ ?BYTE(SID_length), Session_ID:SID_length/binary,
+ ?UINT16(Cs_length), CipherSuites:Cs_length/binary,
+ ?BYTE(Cm_length), Comp_methods:Cm_length/binary,
+ Extensions/binary>>, _) ->
+
DecodedExtensions = ssl_handshake:decode_hello_extensions({client, Extensions}),
#client_hello{
@@ -226,7 +233,7 @@ decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:3
extensions = DecodedExtensions
};
-decode_handshake(Version, Tag, Msg) ->
+decode_handshake(Version, Tag, Msg, _) ->
ssl_handshake:decode_handshake(Version, Tag, Msg).
enc_handshake(#hello_request{}, _Version) ->
@@ -278,14 +285,3 @@ handle_server_hello_extensions(Version, SessionId, Random, CipherSuite,
{Version, SessionId, ConnectionStates, ProtoExt, Protocol}
end.
-available_signature_algs(undefined, SupportedHashSigns, _, {Major, Minor}) when
- (Major >= 3) andalso (Minor >= 3) ->
- SupportedHashSigns;
-available_signature_algs(#hash_sign_algos{hash_sign_algos = ClientHashSigns}, SupportedHashSigns,
- _, {Major, Minor}) when (Major >= 3) andalso (Minor >= 3) ->
- sets:to_list(sets:intersection(sets:from_list(ClientHashSigns),
- sets:from_list(SupportedHashSigns)));
-available_signature_algs(_, _, _, _) ->
- undefined.
-
-
diff --git a/lib/ssl/src/tls_handshake.hrl b/lib/ssl/src/tls_handshake.hrl
index 5867f9f9ff..f6644f64af 100644
--- a/lib/ssl/src/tls_handshake.hrl
+++ b/lib/ssl/src/tls_handshake.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/tls_record.hrl b/lib/ssl/src/tls_record.hrl
index 3c5cdd3f7a..e296f23673 100644
--- a/lib/ssl/src/tls_record.hrl
+++ b/lib/ssl/src/tls_record.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/src/tls_v1.erl b/lib/ssl/src/tls_v1.erl
index 543bd33833..711db77708 100644
--- a/lib/ssl/src/tls_v1.erl
+++ b/lib/ssl/src/tls_v1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -209,9 +209,7 @@ suites(Minor) when Minor == 1; Minor == 2 ->
?TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
?TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
?TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
- ?TLS_RSA_WITH_AES_128_CBC_SHA,
- ?TLS_DHE_RSA_WITH_DES_CBC_SHA,
- ?TLS_RSA_WITH_DES_CBC_SHA
+ ?TLS_RSA_WITH_AES_128_CBC_SHA
];
suites(3) ->
[
@@ -300,9 +298,7 @@ default_signature_algs({3, 3} = Version) ->
%% SHA
{sha, ecdsa},
{sha, rsa},
- {sha, dsa},
- %% MD5
- {md5, rsa}],
+ {sha, dsa}],
signature_algs(Version, Default);
default_signature_algs(_) ->
undefined.
diff --git a/lib/ssl/test/Makefile b/lib/ssl/test/Makefile
index 999df320a3..a2eb4ce449 100644
--- a/lib/ssl/test/Makefile
+++ b/lib/ssl/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2015. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -81,7 +81,7 @@ HRL_FILES_NEEDED_IN_TEST = \
TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR))
-INCLUDES = -I. -I$(ERL_TOP)/lib/test_server/include/
+INCLUDES = -I.
DATADIRS = ssl_basic_SUITE_data
@@ -100,8 +100,7 @@ RELSYSDIR = $(RELEASE_PATH)/ssl_test
# The path to the test_server ebin dir is needed when
# running the target "targets".
# ----------------------------------------------------
-ERL_COMPILE_FLAGS += -pa ../../../internal_tools/test_server/ebin \
- $(INCLUDES)
+ERL_COMPILE_FLAGS += $(INCLUDES)
# ----------------------------------------------------
# Targets
diff --git a/lib/ssl/test/erl_make_certs.erl b/lib/ssl/test/erl_make_certs.erl
index f5cada9021..a6657be995 100644
--- a/lib/ssl/test/erl_make_certs.erl
+++ b/lib/ssl/test/erl_make_certs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/test/make_certs.erl b/lib/ssl/test/make_certs.erl
index 5eebf773a7..009bcd81ad 100644
--- a/lib/ssl/test/make_certs.erl
+++ b/lib/ssl/test/make_certs.erl
@@ -172,16 +172,29 @@ revoke(Root, CA, User, C) ->
gencrl(Root, CA, C).
gencrl(Root, CA, C) ->
+ %% By default, the CRL is valid for 24 hours from now.
+ gencrl(Root, CA, C, 24).
+
+gencrl(Root, CA, C, CrlHours) ->
CACnfFile = filename:join([Root, CA, "ca.cnf"]),
CACRLFile = filename:join([Root, CA, "crl.pem"]),
Cmd = [C#config.openssl_cmd, " ca"
" -gencrl ",
- " -crlhours 24",
+ " -crlhours ", integer_to_list(CrlHours),
" -out ", CACRLFile,
" -config ", CACnfFile],
Env = [{"ROOTDIR", filename:absname(Root)}],
cmd(Cmd, Env).
+can_generate_expired_crls(C) ->
+ %% OpenSSL can generate CRLs with an expiration date in the past,
+ %% if we pass a negative number for -crlhours. However, LibreSSL
+ %% rejects this with the error "invalid argument -24: too small".
+ %% Let's check which one we have.
+ Cmd = [C#config.openssl_cmd, " ca -crlhours -24"],
+ Output = os:cmd(Cmd),
+ 0 =:= string:str(Output, "too small").
+
verify(Root, CA, User, C) ->
CAFile = filename:join([Root, User, "cacerts.pem"]),
CACRLFile = filename:join([Root, CA, "crl.pem"]),
diff --git a/lib/ssl/test/ssl_ECC_SUITE.erl b/lib/ssl/test/ssl_ECC_SUITE.erl
index 75b639b23b..69ac9908fa 100644
--- a/lib/ssl/test/ssl_ECC_SUITE.erl
+++ b/lib/ssl/test/ssl_ECC_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -74,8 +74,8 @@ init_per_suite(Config0) ->
try crypto:start() of
ok ->
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config1 = ssl_test_lib:make_ecdsa_cert(Config0),
Config2 = ssl_test_lib:make_ecdh_rsa_cert(Config1),
ssl_test_lib:cert_options(Config2)
@@ -130,8 +130,8 @@ init_per_group(Group, Config) ->
common_init_per_group(GroupName, Config) ->
case ssl_test_lib:is_tls_version(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- [{tls_version, GroupName} | Config];
+ Config0 = ssl_test_lib:init_tls_version(GroupName, Config),
+ [{tls_version, GroupName} | Config0];
_ ->
openssl_check(GroupName, Config)
end.
@@ -142,7 +142,7 @@ end_per_group(_GroupName, Config) ->
%%--------------------------------------------------------------------
init_per_testcase(TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:log("Ciphers: ~p~n ", [ ssl:cipher_suites()]),
end_per_testcase(TestCase, Config),
ssl:start(),
@@ -158,43 +158,43 @@ end_per_testcase(_TestCase, Config) ->
%%--------------------------------------------------------------------
client_ecdh_server_ecdh(Config) when is_list(Config) ->
- COpts = ?config(client_ecdh_rsa_opts, Config),
- SOpts = ?config(server_ecdh_rsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdh_rsa_opts, Config),
+ SOpts = proplists:get_value(server_ecdh_rsa_opts, Config),
basic_test(COpts, SOpts, Config).
client_ecdh_server_rsa(Config) when is_list(Config) ->
- COpts = ?config(client_ecdh_rsa_opts, Config),
- SOpts = ?config(server_ecdh_rsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdh_rsa_opts, Config),
+ SOpts = proplists:get_value(server_opts, Config),
basic_test(COpts, SOpts, Config).
client_rsa_server_ecdh(Config) when is_list(Config) ->
- COpts = ?config(client_ecdh_rsa_opts, Config),
- SOpts = ?config(server_ecdh_rsa_verify_opts, Config),
+ COpts = proplists:get_value(client_opts, Config),
+ SOpts = proplists:get_value(server_ecdh_rsa_opts, Config),
basic_test(COpts, SOpts, Config).
client_rsa_server_rsa(Config) when is_list(Config) ->
- COpts = ?config(client_verification_opts, Config),
- SOpts = ?config(server_verification_opts, Config),
+ COpts = proplists:get_value(client_opts, Config),
+ SOpts = proplists:get_value(server_opts, Config),
basic_test(COpts, SOpts, Config).
client_ecdsa_server_ecdsa(Config) when is_list(Config) ->
- COpts = ?config(client_ecdsa_opts, Config),
- SOpts = ?config(server_ecdsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdsa_opts, Config),
+ SOpts = proplists:get_value(server_ecdsa_opts, Config),
basic_test(COpts, SOpts, Config).
client_ecdsa_server_rsa(Config) when is_list(Config) ->
- COpts = ?config(client_ecdsa_opts, Config),
- SOpts = ?config(server_ecdsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdsa_opts, Config),
+ SOpts = proplists:get_value(server_opts, Config),
basic_test(COpts, SOpts, Config).
client_rsa_server_ecdsa(Config) when is_list(Config) ->
- COpts = ?config(client_ecdsa_opts, Config),
- SOpts = ?config(server_ecdsa_verify_opts, Config),
+ COpts = proplists:get_value(client_opts, Config),
+ SOpts = proplists:get_value(server_ecdsa_opts, Config),
basic_test(COpts, SOpts, Config).
client_ecdsa_server_ecdsa_with_raw_key(Config) when is_list(Config) ->
- COpts = ?config(client_ecdsa_opts, Config),
- SOpts = ?config(server_ecdsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdsa_opts, Config),
+ SOpts = proplists:get_value(server_ecdsa_opts, Config),
ServerCert = proplists:get_value(certfile, SOpts),
ServerKeyFile = proplists:get_value(keyfile, SOpts),
{ok, PemBin} = file:read_file(ServerKeyFile),
@@ -205,8 +205,8 @@ client_ecdsa_server_ecdsa_with_raw_key(Config) when is_list(Config) ->
ClientCert = proplists:get_value(certfile, COpts),
ClientKey = proplists:get_value(keyfile, COpts),
ClientCA = proplists:get_value(cacertfile, COpts),
- SType = ?config(server_type, Config),
- CType = ?config(client_type, Config),
+ SType = proplists:get_value(server_type, Config),
+ CType = proplists:get_value(client_type, Config),
{Server, Port} = start_server_with_raw_key(SType,
ClientCA, ServerCA,
ServerCert,
@@ -231,8 +231,8 @@ basic_test(COpts, SOpts, Config) ->
Config).
basic_test(ClientCert, ClientKey, ClientCA, ServerCert, ServerKey, ServerCA, Config) ->
- SType = ?config(server_type, Config),
- CType = ?config(client_type, Config),
+ SType = proplists:get_value(server_type, Config),
+ CType = proplists:get_value(client_type, Config),
{Server, Port} = start_server(SType,
ClientCA, ServerCA,
ServerCert,
@@ -244,20 +244,20 @@ basic_test(ClientCert, ClientKey, ClientCA, ServerCert, ServerKey, ServerCA, Con
check_result(Server, SType, Client, CType),
close(Server, Client).
-start_client(openssl, Port, CA, OwnCa, Cert, Key, Config) ->
- PrivDir = ?config(priv_dir, Config),
- NewCA = new_ca(filename:join(PrivDir, "new_ca.pem"), CA, OwnCa),
+start_client(openssl, Port, PeerCA, OwnCa, Cert, Key, _Config) ->
+ CA = new_openssl_ca("openssl_client_ca", PeerCA, OwnCa),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
Exe = "openssl",
Args = ["s_client", "-verify", "2", "-port", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
- "-cert", Cert, "-CAfile", NewCA,
+ "-cert", Cert, "-CAfile", CA,
"-key", Key, "-host","localhost", "-msg", "-debug"],
OpenSslPort = ssl_test_lib:portable_open_port(Exe, Args),
true = port_command(OpenSslPort, "Hello world"),
OpenSslPort;
-start_client(erlang, Port, CA, _, Cert, Key, Config) ->
+start_client(erlang, Port, PeerCA, OwnCa, Cert, Key, Config) ->
+ CA = new_ca("erlang_client_ca", PeerCA, OwnCa),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -267,20 +267,19 @@ start_client(erlang, Port, CA, _, Cert, Key, Config) ->
{cacertfile, CA},
{certfile, Cert}, {keyfile, Key}]}]).
-start_server(openssl, CA, OwnCa, Cert, Key, Config) ->
- PrivDir = ?config(priv_dir, Config),
- NewCA = new_ca(filename:join(PrivDir, "new_ca.pem"), CA, OwnCa),
-
+start_server(openssl, PeerCA, OwnCa, Cert, Key, _Config) ->
+ CA = new_openssl_ca("openssl_server_ca", PeerCA, OwnCa),
Port = ssl_test_lib:inet_port(node()),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port), ssl_test_lib:version_flag(Version),
- "-verify", "2", "-cert", Cert, "-CAfile", NewCA,
+ "-verify", "2", "-cert", Cert, "-CAfile", CA,
"-key", Key, "-msg", "-debug"],
OpenSslPort = ssl_test_lib:portable_open_port(Exe, Args),
true = port_command(OpenSslPort, "Hello world"),
{OpenSslPort, Port};
-start_server(erlang, CA, _, Cert, Key, Config) ->
+start_server(erlang, PeerCA, OwnCa, Cert, Key, Config) ->
+ CA = new_ca("erlang_server_ca", PeerCA, OwnCa),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -291,7 +290,8 @@ start_server(erlang, CA, _, Cert, Key, Config) ->
[{verify, verify_peer}, {cacertfile, CA},
{certfile, Cert}, {keyfile, Key}]}]),
{Server, ssl_test_lib:inet_port(Server)}.
-start_server_with_raw_key(erlang, CA, _, Cert, Key, Config) ->
+start_server_with_raw_key(erlang, PeerCA, OwnCa, Cert, Key, Config) ->
+ CA = new_ca("erlang_server_ca", PeerCA, OwnCa),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -315,7 +315,7 @@ check_result(_,openssl, _, openssl) ->
openssl_check(erlang, Config) ->
Config;
openssl_check(_, Config) ->
- TLSVersion = ?config(tls_version, Config),
+ TLSVersion = proplists:get_value(tls_version, Config),
case ssl_test_lib:check_sane_openssl_version(TLSVersion) of
true ->
Config;
@@ -336,13 +336,29 @@ close(Client, Server) ->
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
-%% Work around OpenSSL bug, apparently the same bug as we had fixed in
-%% 11629690ba61f8e0c93ef9b2b6102fd279825977
new_ca(FileName, CA, OwnCa) ->
{ok, P1} = file:read_file(CA),
E1 = public_key:pem_decode(P1),
{ok, P2} = file:read_file(OwnCa),
E2 = public_key:pem_decode(P2),
- Pem = public_key:pem_encode(E2 ++E1),
+ Pem = public_key:pem_encode(E1 ++E2),
file:write_file(FileName, Pem),
FileName.
+
+new_openssl_ca(FileName, CA, OwnCa) ->
+ {ok, P1} = file:read_file(CA),
+ E1 = public_key:pem_decode(P1),
+ {ok, P2} = file:read_file(OwnCa),
+ E2 = public_key:pem_decode(P2),
+ case os:cmd("openssl version") of
+ "OpenSSL 1.0.1p-freebsd" ++ _ ->
+ Pem = public_key:pem_encode(E1 ++E2),
+ file:write_file(FileName, Pem);
+ "LibreSSL" ++ _ ->
+ Pem = public_key:pem_encode(E1 ++E2),
+ file:write_file(FileName, Pem);
+ _ ->
+ Pem = public_key:pem_encode(E2 ++E1),
+ file:write_file(FileName, Pem)
+ end,
+ FileName.
diff --git a/lib/ssl/test/ssl_alpn_handshake_SUITE.erl b/lib/ssl/test/ssl_alpn_handshake_SUITE.erl
index f5469ec8e0..da181faf64 100644
--- a/lib/ssl/test/ssl_alpn_handshake_SUITE.erl
+++ b/lib/ssl/test/ssl_alpn_handshake_SUITE.erl
@@ -72,8 +72,8 @@ init_per_suite(Config) ->
try crypto:start() of
ok ->
ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config),
- ?config(priv_dir, Config)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config),
+ proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -90,7 +90,7 @@ init_per_group(GroupName, Config) ->
true ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
+ ssl_test_lib:init_tls_version(GroupName, Config),
Config;
false ->
{skip, "Missing crypto support"}
@@ -104,7 +104,7 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 10}),
Config.
@@ -226,9 +226,9 @@ client_alpn_and_server_alpn_npn(Config) when is_list(Config) ->
client_renegotiate(Config) when is_list(Config) ->
Data = "hello world",
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = [{alpn_advertised_protocols, [<<"http/1.0">>]}] ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = [{alpn_preferred_protocols, [<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]}] ++ ServerOpts0,
ExpectedProtocol = {ok, <<"http/1.0">>},
@@ -250,9 +250,9 @@ client_renegotiate(Config) when is_list(Config) ->
%--------------------------------------------------------------------------------
session_reused(Config) when is_list(Config)->
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = [{alpn_advertised_protocols, [<<"http/1.0">>]}] ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = [{alpn_preferred_protocols, [<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]}] ++ ServerOpts0,
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -299,7 +299,7 @@ session_reused(Config) when is_list(Config)->
%--------------------------------------------------------------------------------
alpn_not_supported_client(Config) when is_list(Config) ->
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
PrefProtocols = {client_preferred_next_protocols,
{client, [<<"http/1.0">>], <<"http/1.1">>}},
ClientOpts = [PrefProtocols] ++ ClientOpts0,
@@ -315,7 +315,7 @@ alpn_not_supported_client(Config) when is_list(Config) ->
%--------------------------------------------------------------------------------
alpn_not_supported_server(Config) when is_list(Config)->
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
AdvProtocols = {next_protocols_advertised, [<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]},
ServerOpts = [AdvProtocols] ++ ServerOpts0,
@@ -326,8 +326,8 @@ alpn_not_supported_server(Config) when is_list(Config)->
%%--------------------------------------------------------------------
run_failing_handshake(Config, ClientExtraOpts, ServerExtraOpts, ExpectedResult) ->
- ClientOpts = ClientExtraOpts ++ ?config(client_opts, Config),
- ServerOpts = ServerExtraOpts ++ ?config(server_opts, Config),
+ ClientOpts = ClientExtraOpts ++ proplists:get_value(client_opts, Config),
+ ServerOpts = ServerExtraOpts ++ proplists:get_value(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -346,9 +346,9 @@ run_failing_handshake(Config, ClientExtraOpts, ServerExtraOpts, ExpectedResult)
run_handshake(Config, ClientExtraOpts, ServerExtraOpts, ExpectedProtocol) ->
Data = "hello world",
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = ClientExtraOpts ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = ServerExtraOpts ++ ServerOpts0,
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl
index a07739d3de..665dbb1df3 100644
--- a/lib/ssl/test/ssl_basic_SUITE.erl
+++ b/lib/ssl/test/ssl_basic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,8 +47,12 @@
all() ->
[
{group, basic},
+ {group, basic_tls},
{group, options},
+ {group, options_tls},
{group, session},
+ %%{group, 'dtlsv1.2'},
+ %%{group, 'dtlsv1'},
{group, 'tlsv1.2'},
{group, 'tlsv1.1'},
{group, 'tlsv1'},
@@ -57,19 +61,29 @@ all() ->
groups() ->
[{basic, [], basic_tests()},
+ {basic_tls, [], basic_tests_tls()},
{options, [], options_tests()},
- {'tlsv1.2', [], all_versions_groups() ++ [conf_signature_algs, no_common_signature_algs]},
- {'tlsv1.1', [], all_versions_groups()},
- {'tlsv1', [], all_versions_groups() ++ rizzo_tests()},
- {'sslv3', [], all_versions_groups() ++ rizzo_tests() ++ [ciphersuite_vs_version]},
+ {options_tls, [], options_tests_tls()},
+ %%{'dtlsv1.2', [], all_versions_groups()},
+ %%{'dtlsv1', [], all_versions_groups()},
+ {'tlsv1.2', [], all_versions_groups() ++ tls_versions_groups() ++ [conf_signature_algs, no_common_signature_algs]},
+ {'tlsv1.1', [], all_versions_groups() ++ tls_versions_groups()},
+ {'tlsv1', [], all_versions_groups() ++ tls_versions_groups() ++ rizzo_tests()},
+ {'sslv3', [], all_versions_groups() ++ tls_versions_groups() ++ rizzo_tests() ++ [tls_ciphersuite_vs_version]},
{api,[], api_tests()},
+ {api_tls,[], api_tests_tls()},
{session, [], session_tests()},
{renegotiate, [], renegotiate_tests()},
{ciphers, [], cipher_tests()},
{ciphers_ec, [], cipher_tests_ec()},
- {error_handling_tests, [], error_handling_tests()}
+ {error_handling_tests, [], error_handling_tests()},
+ {error_handling_tests_tls, [], error_handling_tests_tls()}
].
+tls_versions_groups ()->
+ [{group, api_tls},
+ {group, error_handling_tests_tls}].
+
all_versions_groups ()->
[{group, api},
{group, renegotiate},
@@ -82,7 +96,8 @@ basic_tests() ->
[app,
appup,
alerts,
- send_close,
+ alert_details,
+ alert_details_not_too_big,
version_option,
connect_twice,
connect_dist,
@@ -92,9 +107,12 @@ basic_tests() ->
cipher_format
].
+basic_tests_tls() ->
+ [tls_send_close
+ ].
+
options_tests() ->
[der_input,
- misc_ssl_options,
ssl_options_not_proplist,
raw_ssl_option,
socket_options,
@@ -113,13 +131,16 @@ options_tests() ->
empty_protocol_versions,
ipv6,
reuseaddr,
- tcp_reuseaddr,
honor_server_cipher_order,
honor_client_cipher_order,
unordered_protocol_versions_server,
unordered_protocol_versions_client
].
+options_tests_tls() ->
+ [tls_misc_ssl_options,
+ tls_tcp_reuseaddr].
+
api_tests() ->
[connection_info,
connection_information,
@@ -129,26 +150,30 @@ api_tests() ->
sockname,
versions,
controlling_process,
- upgrade,
- upgrade_with_timeout,
- downgrade,
+ getstat,
close_with_timeout,
- shutdown,
- shutdown_write,
- shutdown_both,
- shutdown_error,
hibernate,
hibernate_right_away,
listen_socket,
- ssl_accept_timeout,
ssl_recv_timeout,
- versions_option,
server_name_indication_option,
accept_pool,
new_options_in_accept,
prf
].
+api_tests_tls() ->
+ [tls_versions_option,
+ tls_upgrade,
+ tls_upgrade_with_timeout,
+ tls_ssl_accept_timeout,
+ tls_downgrade,
+ tls_shutdown,
+ tls_shutdown_write,
+ tls_shutdown_both,
+ tls_shutdown_error
+ ].
+
session_tests() ->
[reuse_session,
reuse_session_expired,
@@ -186,6 +211,8 @@ cipher_tests() ->
rc4_rsa_cipher_suites,
rc4_ecdh_rsa_cipher_suites,
rc4_ecdsa_cipher_suites,
+ des_rsa_cipher_suites,
+ des_ecdh_rsa_cipher_suites,
default_reject_anonymous].
cipher_tests_ec() ->
@@ -196,20 +223,26 @@ cipher_tests_ec() ->
error_handling_tests()->
[controller_dies,
- client_closes_socket,
- tcp_error_propagation_in_active_mode,
- tcp_connect,
- tcp_connect_big,
close_transport_accept,
recv_active,
recv_active_once,
- recv_error_handling,
- dont_crash_on_handshake_garbage
+ recv_error_handling
+ ].
+
+error_handling_tests_tls()->
+ [tls_client_closes_socket,
+ tls_tcp_error_propagation_in_active_mode,
+ tls_tcp_connect,
+ tls_tcp_connect_big,
+ tls_dont_crash_on_handshake_garbage
].
rizzo_tests() ->
[rizzo,
- no_rizzo_rc4].
+ no_rizzo_rc4,
+ rizzo_one_n_minus_one,
+ rizzo_zero_n,
+ rizzo_disabled].
%%--------------------------------------------------------------------
init_per_suite(Config0) ->
@@ -218,8 +251,8 @@ init_per_suite(Config0) ->
ok ->
ssl:start(),
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config1 = ssl_test_lib:make_dsa_cert(Config0),
Config2 = ssl_test_lib:make_ecdsa_cert(Config1),
Config = ssl_test_lib:make_ecdh_rsa_cert(Config2),
@@ -236,8 +269,7 @@ end_per_suite(_Config) ->
init_per_group(GroupName, Config) ->
case ssl_test_lib:is_tls_version(GroupName) andalso ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
_ ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
@@ -307,7 +339,7 @@ init_per_testcase(TestCase, Config) when TestCase == client_renegotiate;
TestCase == renegotiate_dos_mitigate_active;
TestCase == renegotiate_dos_mitigate_passive;
TestCase == renegotiate_dos_mitigate_absolute ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 30}),
Config;
@@ -315,24 +347,43 @@ init_per_testcase(TestCase, Config) when TestCase == psk_cipher_suites;
TestCase == psk_with_hint_cipher_suites;
TestCase == ciphers_rsa_signed_certs;
TestCase == ciphers_rsa_signed_certs_openssl_names;
+ TestCase == ciphers_dsa_signed_certs;
+ TestCase == ciphers_dsa_signed_certs_openssl_names;
+ TestCase == anonymous_cipher_suites;
TestCase == versions_option,
- TestCase == tcp_connect_big ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
-
- ct:timetrap({seconds, 30}),
+ TestCase == tls_tcp_connect_big ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
+ ct:timetrap({seconds, 60}),
Config;
+
init_per_testcase(rizzo, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 40}),
Config;
+
+init_per_testcase(rizzo_one_n_minus_one, Config) ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ct:timetrap({seconds, 40}),
+ rizzo_add_mitigation_option(one_n_minus_one, Config);
+
+init_per_testcase(rizzo_zero_n, Config) ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ct:timetrap({seconds, 40}),
+ rizzo_add_mitigation_option(zero_n, Config);
+
+init_per_testcase(rizzo_disabled, Config) ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ct:timetrap({seconds, 40}),
+ rizzo_add_mitigation_option(disabled, Config);
+
init_per_testcase(prf, Config) ->
ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
ct:timetrap({seconds, 40}),
- case ?config(tc_group_path, Config) of
+ case proplists:get_value(tc_group_path, Config) of
[] -> Prop = [];
[Prop] -> Prop
end,
- case ?config(name, Prop) of
+ case proplists:get_value(name, Prop) of
undefined -> TlsVersions = [sslv3, tlsv1, 'tlsv1.1', 'tlsv1.2'];
TlsVersion when is_atom(TlsVersion) ->
TlsVersions = [TlsVersion]
@@ -351,14 +402,19 @@ init_per_testcase(prf, Config) ->
TestPlan = prf_create_plan(TlsVersions, PRFS, ExpectedPrfResults),
[{prf_test_plan, TestPlan} | Config];
-init_per_testcase(TestCase, Config) when TestCase == ssl_accept_timeout;
- TestCase == client_closes_socket;
- TestCase == downgrade ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+init_per_testcase(TestCase, Config) when TestCase == tls_ssl_accept_timeout;
+ TestCase == tls_client_closes_socket;
+ TestCase == tls_downgrade ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 15}),
Config;
-init_per_testcase(clear_pem_cache, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+init_per_testcase(TestCase, Config) when TestCase == clear_pem_cache;
+ TestCase == der_input;
+ TestCase == defaults ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
+ %% White box test need clean start
+ ssl:stop(),
+ ssl:start(),
ct:timetrap({seconds, 20}),
Config;
init_per_testcase(raw_ssl_option, Config) ->
@@ -370,8 +426,18 @@ init_per_testcase(raw_ssl_option, Config) ->
{skip, "Raw options are platform-specific"}
end;
+init_per_testcase(accept_pool, Config) ->
+ ct:timetrap({seconds, 5}),
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ {skip, "Not yet supported on DTLS sockets"};
+ _ ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
+ Config
+ end;
+
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 5}),
Config.
@@ -422,17 +488,46 @@ alerts(Config) when is_list(Config) ->
end
end, Alerts).
%%--------------------------------------------------------------------
+alert_details() ->
+ [{doc, "Test that ssl_alert:alert_txt/1 result contains extendend error description"}].
+alert_details(Config) when is_list(Config) ->
+ Unique = make_ref(),
+ UniqueStr = lists:flatten(io_lib:format("~w", [Unique])),
+ Alert = ?ALERT_REC(?WARNING, ?CLOSE_NOTIFY, Unique),
+ case string:str(ssl_alert:alert_txt(Alert), UniqueStr) of
+ 0 ->
+ ct:fail(error_details_missing);
+ _ ->
+ ok
+ end.
+
+%%--------------------------------------------------------------------
+alert_details_not_too_big() ->
+ [{doc, "Test that ssl_alert:alert_txt/1 limits printed depth of extended error description"}].
+alert_details_not_too_big(Config) when is_list(Config) ->
+ Reason = lists:duplicate(10, lists:duplicate(10, lists:duplicate(10, {some, data}))),
+ Alert = ?ALERT_REC(?WARNING, ?CLOSE_NOTIFY, Reason),
+ case length(ssl_alert:alert_txt(Alert)) < 1000 of
+ true ->
+ ok;
+ false ->
+ ct:fail(ssl_alert_text_too_big)
+ end.
+
+%%--------------------------------------------------------------------
new_options_in_accept() ->
[{doc,"Test that you can set ssl options in ssl_accept/3 and not only in tcp upgrade"}].
new_options_in_accept(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts0 = ?config(server_dsa_opts, Config),
- [_ , _ | ServerSslOpts] = ?config(server_opts, Config), %% Remove non ssl opts
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_dsa_opts, Config),
+ [_ , _ | ServerSslOpts] = ssl_test_lib:ssl_options(server_opts, Config), %% Remove non ssl opts
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ Version = ssl_test_lib:protocol_options(Config, [{tls, sslv3}, {dtls, dtlsv1}]),
+ Cipher = ssl_test_lib:protocol_options(Config, [{tls, {rsa,rc4_128,sha}}, {dtls, {rsa,aes_128_cbc,sha}}]),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {ssl_extra_opts, [{versions, [sslv3]},
- {ciphers,[{rsa,rc4_128,sha}]} | ServerSslOpts]}, %% To be set in ssl_accept/3
+ {ssl_extra_opts, [{versions, [Version]},
+ {ciphers,[Cipher]} | ServerSslOpts]}, %% To be set in ssl_accept/3
{mfa, {?MODULE, connection_info_result, []}},
{options, proplists:delete(cacertfile, ServerOpts0)}]),
@@ -441,14 +536,13 @@ new_options_in_accept(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {?MODULE, connection_info_result, []}},
- {options, [{versions, [sslv3]},
- {ciphers,[{rsa,rc4_128,sha}
- ]} | ClientOpts]}]),
+ {options, [{versions, [Version]},
+ {ciphers,[Cipher]} | ClientOpts]}]),
ct:log("Testcase ~p, Client ~p Server ~p ~n",
[self(), Client, Server]),
- ServerMsg = ClientMsg = {ok, {sslv3, {rsa, rc4_128, sha}}},
+ ServerMsg = ClientMsg = {ok, {Version, Cipher}},
ssl_test_lib:check_result(Server, ServerMsg, Client, ClientMsg),
@@ -458,16 +552,16 @@ new_options_in_accept(Config) when is_list(Config) ->
prf() ->
[{doc,"Test that ssl:prf/5 uses the negotiated PRF."}].
prf(Config) when is_list(Config) ->
- TestPlan = ?config(prf_test_plan, Config),
+ TestPlan = proplists:get_value(prf_test_plan, Config),
case TestPlan of
[] -> ct:fail({error, empty_prf_test_plan});
_ -> lists:foreach(fun(Suite) ->
lists:foreach(
fun(Test) ->
- V = ?config(tls_ver, Test),
- C = ?config(ciphers, Test),
- E = ?config(expected, Test),
- P = ?config(prf, Test),
+ V = proplists:get_value(tls_ver, Test),
+ C = proplists:get_value(ciphers, Test),
+ E = proplists:get_value(expected, Test),
+ P = proplists:get_value(prf, Test),
prf_run_test(Config, V, C, E, P)
end, Suite)
end, TestPlan)
@@ -478,9 +572,10 @@ prf(Config) when is_list(Config) ->
connection_info() ->
[{doc,"Test the API function ssl:connection_information/1"}].
connection_info(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
{mfa, {?MODULE, connection_info_result, []}},
@@ -492,16 +587,15 @@ connection_info(Config) when is_list(Config) ->
{from, self()},
{mfa, {?MODULE, connection_info_result, []}},
{options,
- [{ciphers,[{rsa,des_cbc,sha}]} |
+ [{ciphers,[{rsa, aes_128_cbc, sha}]} |
ClientOpts]}]),
ct:log("Testcase ~p, Client ~p Server ~p ~n",
[self(), Client, Server]),
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
- ServerMsg = ClientMsg = {ok, {Version, {rsa, des_cbc, sha}}},
+ ServerMsg = ClientMsg = {ok, {Version, {rsa, aes_128_cbc, sha}}},
ssl_test_lib:check_result(Server, ServerMsg, Client, ClientMsg),
@@ -513,8 +607,8 @@ connection_info(Config) when is_list(Config) ->
connection_information() ->
[{doc,"Test the API function ssl:connection_information/1"}].
connection_information(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -559,8 +653,8 @@ controlling_process() ->
[{doc,"Test API function controlling_process/2"}].
controlling_process(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
ClientMsg = "Server hello",
ServerMsg = "Client hello",
@@ -606,11 +700,80 @@ controlling_process(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
+getstat() ->
+ [{doc,"Test API function getstat/2"}].
+
+getstat(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ Server1 =
+ ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib, send_recv_result, []}},
+ {options, [{active, false} | ServerOpts]}]),
+ Port1 = ssl_test_lib:inet_port(Server1),
+ Server2 =
+ ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib, send_recv_result, []}},
+ {options, [{active, false} | ServerOpts]}]),
+ Port2 = ssl_test_lib:inet_port(Server2),
+ {ok, ActiveC} = rpc:call(ClientNode, ssl, connect,
+ [Hostname,Port1,[{active, once}|ClientOpts]]),
+ {ok, PassiveC} = rpc:call(ClientNode, ssl, connect,
+ [Hostname,Port2,[{active, false}|ClientOpts]]),
+
+ ct:log("Testcase ~p, Client ~p Servers ~p, ~p ~n",
+ [self(), self(), Server1, Server2]),
+
+ %% We only check that the values are non-zero initially
+ %% (due to the handshake), and that sending more changes the values.
+
+ %% Passive socket.
+
+ {ok, InitialStats} = ssl:getstat(PassiveC),
+ ct:pal("InitialStats ~p~n", [InitialStats]),
+ [true] = lists:usort([0 =/= proplists:get_value(Name, InitialStats)
+ || Name <- [recv_cnt, recv_oct, recv_avg, recv_max, send_cnt, send_oct, send_avg, send_max]]),
+
+ ok = ssl:send(PassiveC, "Hello world"),
+ wait_for_send(PassiveC),
+ {ok, SStats} = ssl:getstat(PassiveC, [send_cnt, send_oct]),
+ ct:pal("SStats ~p~n", [SStats]),
+ [true] = lists:usort([proplists:get_value(Name, SStats) =/= proplists:get_value(Name, InitialStats)
+ || Name <- [send_cnt, send_oct]]),
+
+ %% Active socket.
+
+ {ok, InitialAStats} = ssl:getstat(ActiveC),
+ ct:pal("InitialAStats ~p~n", [InitialAStats]),
+ [true] = lists:usort([0 =/= proplists:get_value(Name, InitialAStats)
+ || Name <- [recv_cnt, recv_oct, recv_avg, recv_max, send_cnt, send_oct, send_avg, send_max]]),
+
+ _ = receive
+ {ssl, ActiveC, _} ->
+ ok
+ after
+ ?SLEEP ->
+ exit(timeout)
+ end,
+
+ ok = ssl:send(ActiveC, "Hello world"),
+ wait_for_send(ActiveC),
+ {ok, ASStats} = ssl:getstat(ActiveC, [send_cnt, send_oct]),
+ ct:pal("ASStats ~p~n", [ASStats]),
+ [true] = lists:usort([proplists:get_value(Name, ASStats) =/= proplists:get_value(Name, InitialAStats)
+ || Name <- [send_cnt, send_oct]]),
+
+ ok.
+
+%%--------------------------------------------------------------------
controller_dies() ->
[{doc,"Test that the socket is closed after controlling process dies"}].
controller_dies(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
ClientMsg = "Hello server",
ServerMsg = "Hello client",
@@ -698,11 +861,11 @@ controller_dies(Config) when is_list(Config) ->
ssl_test_lib:close(LastClient).
%%--------------------------------------------------------------------
-client_closes_socket() ->
+tls_client_closes_socket() ->
[{doc,"Test what happens when client closes socket before handshake is compleated"}].
-client_closes_socket(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+tls_client_closes_socket(Config) when is_list(Config) ->
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
@@ -729,9 +892,9 @@ connect_dist() ->
[{doc,"Test a simple connect as is used by distribution"}].
connect_dist(Config) when is_list(Config) ->
- ClientOpts0 = ?config(client_kc_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_kc_opts, Config),
ClientOpts = [{ssl_imp, new},{active, false}, {packet,4}|ClientOpts0],
- ServerOpts0 = ?config(server_kc_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_kc_opts, Config),
ServerOpts = [{ssl_imp, new},{active, false}, {packet,4}|ServerOpts0],
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -763,21 +926,27 @@ clear_pem_cache(Config) when is_list(Config) ->
State = ssl_test_lib:state(Prop),
[_,FilRefDb |_] = element(6, State),
{Server, Client} = basic_verify_test_no_close(Config),
- 2 = ets:info(FilRefDb, size),
+ CountReferencedFiles = fun({_,-1}, Acc) ->
+ Acc;
+ ({_, N}, Acc) ->
+ N + Acc
+ end,
+
+ 2 = ets:foldl(CountReferencedFiles, 0, FilRefDb),
ssl:clear_pem_cache(),
_ = sys:get_status(whereis(ssl_manager)),
{Server1, Client1} = basic_verify_test_no_close(Config),
- 4 = ets:info(FilRefDb, size),
+ 4 = ets:foldl(CountReferencedFiles, 0, FilRefDb),
ssl_test_lib:close(Server),
ssl_test_lib:close(Client),
- ct:sleep(5000),
+ ct:sleep(2000),
_ = sys:get_status(whereis(ssl_manager)),
- 2 = ets:info(FilRefDb, size),
+ 2 = ets:foldl(CountReferencedFiles, 0, FilRefDb),
ssl_test_lib:close(Server1),
ssl_test_lib:close(Client1),
- ct:sleep(5000),
+ ct:sleep(2000),
_ = sys:get_status(whereis(ssl_manager)),
- 0 = ets:info(FilRefDb, size).
+ 0 = ets:foldl(CountReferencedFiles, 0, FilRefDb).
%%--------------------------------------------------------------------
@@ -785,8 +954,8 @@ fallback() ->
[{doc, "Test TLS_FALLBACK_SCSV downgrade prevention"}].
fallback(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -820,8 +989,8 @@ peername() ->
[{doc,"Test API function peername/1"}].
peername(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -852,8 +1021,8 @@ peername(Config) when is_list(Config) ->
peercert() ->
[{doc,"Test API function peercert/1"}].
peercert(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
@@ -888,8 +1057,8 @@ peercert_result(Socket) ->
peercert_with_client_cert() ->
[{doc,"Test API function peercert/1"}].
peercert_with_client_cert(Config) when is_list(Config) ->
- ClientOpts = ?config(client_dsa_opts, Config),
- ServerOpts = ?config(server_dsa_verify_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_dsa_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_dsa_verify_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
@@ -923,8 +1092,8 @@ peercert_with_client_cert(Config) when is_list(Config) ->
sockname() ->
[{doc,"Test API function sockname/1"}].
sockname(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -938,7 +1107,16 @@ sockname(Config) when is_list(Config) ->
{options, [{port, 0} | ClientOpts]}]),
ClientPort = ssl_test_lib:inet_port(Client),
- ServerIp = ssl_test_lib:node_to_hostip(ServerNode),
+ ServerIp =
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ %% DTLS sockets are not connected on the server side,
+ %% so we can only get a ClientIP, ServerIP will always be 0.0.0.0
+ {0,0,0,0};
+ _ ->
+ ssl_test_lib:node_to_hostip(ServerNode)
+ end,
+
ClientIp = ssl_test_lib:node_to_hostip(ClientNode),
ServerMsg = {ok, {ServerIp, Port}},
ClientMsg = {ok, {ClientIp, ClientPort}},
@@ -971,8 +1149,8 @@ cipher_suites_mix() ->
cipher_suites_mix(Config) when is_list(Config) ->
CipherSuites = [{ecdh_rsa,aes_128_cbc,sha256,sha256}, {rsa,aes_128_cbc,sha}],
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -995,8 +1173,8 @@ socket_options() ->
[{doc,"Test API function getopts/2 and setopts/2"}].
socket_options(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Values = [{mode, list}, {packet, 0}, {header, 0},
{active, true}],
@@ -1050,8 +1228,8 @@ invalid_inet_get_option() ->
[{doc,"Test handling of invalid inet options in getopts"}].
invalid_inet_get_option(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1076,8 +1254,8 @@ invalid_inet_get_option_not_list() ->
[{doc,"Test handling of invalid type in getopts"}].
invalid_inet_get_option_not_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1108,8 +1286,8 @@ invalid_inet_get_option_improper_list() ->
[{doc,"Test handling of invalid type in getopts"}].
invalid_inet_get_option_improper_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1139,8 +1317,8 @@ invalid_inet_set_option() ->
[{doc,"Test handling of invalid inet options in setopts"}].
invalid_inet_set_option(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1171,8 +1349,8 @@ invalid_inet_set_option_not_list() ->
[{doc,"Test handling of invalid type in setopts"}].
invalid_inet_set_option_not_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1203,8 +1381,8 @@ invalid_inet_set_option_improper_list() ->
[{doc,"Test handling of invalid tye in setopts"}].
invalid_inet_set_option_improper_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1230,12 +1408,12 @@ set_invalid_inet_option_improper_list(Socket) ->
ok.
%%--------------------------------------------------------------------
-misc_ssl_options() ->
+tls_misc_ssl_options() ->
[{doc,"Test what happens when we give valid options"}].
-misc_ssl_options(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_misc_ssl_options(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% Check that ssl options not tested elsewhere are filtered away e.i. not passed to inet.
@@ -1305,8 +1483,8 @@ versions(Config) when is_list(Config) ->
send_recv() ->
[{doc,""}].
send_recv(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -1330,11 +1508,11 @@ send_recv(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-send_close() ->
+tls_send_close() ->
[{doc,""}].
-send_close(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_send_close(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -1357,7 +1535,7 @@ send_close(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
version_option() ->
[{doc, "Use version option and do no specify ciphers list. Bug specified incorrect ciphers"}].
-version_option(Config) when is_list(Config) ->
+version_option(Config) when is_list(Config) ->
Versions = proplists:get_value(supported, ssl:versions()),
[version_option_test(Config, Version) || Version <- Versions].
@@ -1366,7 +1544,7 @@ close_transport_accept() ->
[{doc,"Tests closing ssl socket when waiting on ssl:transport_accept/1"}].
close_transport_accept(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_ClientNode, ServerNode, _Hostname} = ssl_test_lib:run_where(Config),
Port = 0,
@@ -1387,8 +1565,8 @@ recv_active() ->
[{doc,"Test recv on active socket"}].
recv_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -1413,8 +1591,8 @@ recv_active_once() ->
[{doc,"Test recv on active socket"}].
recv_active_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -1439,9 +1617,9 @@ dh_params() ->
[{doc,"Test to specify DH-params file in server."}].
dh_params(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
- DataDir = ?config(data_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ DataDir = proplists:get_value(data_dir, Config),
DHParamFile = filename:join(DataDir, "dHParam.pem"),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -1465,12 +1643,12 @@ dh_params(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-upgrade() ->
+tls_upgrade() ->
[{doc,"Test that you can upgrade an tcp connection to an ssl connection"}].
-upgrade(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_upgrade(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
@@ -1514,12 +1692,12 @@ upgrade_result(Socket) ->
end.
%%--------------------------------------------------------------------
-upgrade_with_timeout() ->
+tls_upgrade_with_timeout() ->
[{doc,"Test ssl_accept/3"}].
-upgrade_with_timeout(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_upgrade_with_timeout(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
@@ -1549,23 +1727,23 @@ upgrade_with_timeout(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-downgrade() ->
+tls_downgrade() ->
[{doc,"Test that you can downgarde an ssl connection to an tcp connection"}].
-downgrade(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_downgrade(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, tls_downgrade, []}},
+ {mfa, {?MODULE, tls_downgrade_result, []}},
{options, [{active, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, tls_downgrade, []}},
+ {mfa, {?MODULE, tls_downgrade_result, []}},
{options, [{active, false} |ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
@@ -1576,8 +1754,8 @@ downgrade(Config) when is_list(Config) ->
close_with_timeout() ->
[{doc,"Test normal (not downgrade) ssl:close/2"}].
close_with_timeout(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -1596,11 +1774,11 @@ close_with_timeout(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
-tcp_connect() ->
+tls_tcp_connect() ->
[{doc,"Test what happens when a tcp tries to connect, i,e. a bad (ssl) packet is sent first"}].
-tcp_connect(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+tls_tcp_connect(Config) when is_list(Config) ->
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}, {active, false}],
@@ -1624,16 +1802,16 @@ tcp_connect(Config) when is_list(Config) ->
end
end.
%%--------------------------------------------------------------------
-tcp_connect_big() ->
+tls_tcp_connect_big() ->
[{doc,"Test what happens when a tcp tries to connect, i,e. a bad big (ssl) packet is sent first"}].
-tcp_connect_big(Config) when is_list(Config) ->
+tls_tcp_connect_big(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
- Rand = crypto:rand_bytes(?MAX_CIPHER_TEXT_LENGTH+1),
+ Rand = crypto:strong_rand_bytes(?MAX_CIPHER_TEXT_LENGTH+1),
Server = ssl_test_lib:start_upgrade_server_error([{node, ServerNode}, {port, 0},
{from, self()},
{timeout, 5000},
@@ -1669,8 +1847,8 @@ ipv6(Config) when is_list(Config) ->
case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
true ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} =
ssl_test_lib:run_where(Config, ipv6),
Server = ssl_test_lib:start_server([{node, ServerNode},
@@ -1702,8 +1880,8 @@ ipv6(Config) when is_list(Config) ->
invalid_keyfile() ->
[{doc,"Test what happens with an invalid key file"}].
invalid_keyfile(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- BadOpts = ?config(server_bad_key, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ BadOpts = ssl_test_lib:ssl_options(server_bad_key, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -1728,8 +1906,8 @@ invalid_certfile() ->
[{doc,"Test what happens with an invalid cert file"}].
invalid_certfile(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerBadOpts = ?config(server_bad_cert, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerBadOpts = ssl_test_lib:ssl_options(server_bad_cert, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -1754,8 +1932,8 @@ invalid_cacertfile() ->
[{doc,"Test what happens with an invalid cacert file"}].
invalid_cacertfile(Config) when is_list(Config) ->
- ClientOpts = [{reuseaddr, true}|?config(client_opts, Config)],
- ServerBadOpts = [{reuseaddr, true}|?config(server_bad_ca, Config)],
+ ClientOpts = [{reuseaddr, true}|ssl_test_lib:ssl_options(client_opts, Config)],
+ ServerBadOpts = [{reuseaddr, true}|ssl_test_lib:ssl_options(server_bad_ca, Config)],
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server0 =
@@ -1805,8 +1983,8 @@ invalid_options() ->
[{doc,"Test what happens when we give invalid options"}].
invalid_options(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Check = fun(Client, Server, {versions, [sslv2, sslv3]} = Option) ->
@@ -1859,15 +2037,15 @@ invalid_options(Config) when is_list(Config) ->
ok.
%%--------------------------------------------------------------------
-shutdown() ->
+tls_shutdown() ->
[{doc,"Test API function ssl:shutdown/2"}].
-shutdown(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_shutdown(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, shutdown_result, [server]}},
+ {mfa, {?MODULE, tls_shutdown_result, [server]}},
{options, [{exit_on_close, false},
{active, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
@@ -1875,7 +2053,7 @@ shutdown(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa,
- {?MODULE, shutdown_result, [client]}},
+ {?MODULE, tls_shutdown_result, [client]}},
{options,
[{exit_on_close, false},
{active, false} | ClientOpts]}]),
@@ -1886,50 +2064,50 @@ shutdown(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-shutdown_write() ->
+tls_shutdown_write() ->
[{doc,"Test API function ssl:shutdown/2 with option write."}].
-shutdown_write(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_shutdown_write(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, shutdown_write_result, [server]}},
+ {mfa, {?MODULE, tls_shutdown_write_result, [server]}},
{options, [{active, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, shutdown_write_result, [client]}},
+ {mfa, {?MODULE, tls_shutdown_write_result, [client]}},
{options, [{active, false} | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, {error, closed}).
%%--------------------------------------------------------------------
-shutdown_both() ->
+tls_shutdown_both() ->
[{doc,"Test API function ssl:shutdown/2 with option both."}].
-shutdown_both(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_shutdown_both(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, shutdown_both_result, [server]}},
+ {mfa, {?MODULE, tls_shutdown_both_result, [server]}},
{options, [{active, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, shutdown_both_result, [client]}},
+ {mfa, {?MODULE, tls_shutdown_both_result, [client]}},
{options, [{active, false} | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, {error, closed}).
%%--------------------------------------------------------------------
-shutdown_error() ->
+tls_shutdown_error() ->
[{doc,"Test ssl:shutdown/2 error handling"}].
-shutdown_error(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+tls_shutdown_error(Config) when is_list(Config) ->
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
Port = ssl_test_lib:inet_port(node()),
{ok, Listen} = ssl:listen(Port, ServerOpts),
{error, enotconn} = ssl:shutdown(Listen, read_write),
@@ -1941,9 +2119,7 @@ ciphers_rsa_signed_certs() ->
[{doc,"Test all rsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_rsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:rsa_suites(crypto),
ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]),
run_suites(Ciphers, Version, Config, rsa).
@@ -1952,8 +2128,7 @@ ciphers_rsa_signed_certs_openssl_names() ->
[{doc,"Test all rsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_rsa_signed_certs_openssl_names(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:openssl_rsa_suites(crypto),
ct:log("tls1 openssl cipher suites ~p~n", [Ciphers]),
run_suites(Ciphers, Version, Config, rsa).
@@ -1963,9 +2138,7 @@ ciphers_dsa_signed_certs() ->
[{doc,"Test all dsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_dsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:dsa_suites(),
ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]),
run_suites(Ciphers, Version, Config, dsa).
@@ -1974,9 +2147,7 @@ ciphers_dsa_signed_certs_openssl_names() ->
[{doc,"Test all dsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_dsa_signed_certs_openssl_names(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:openssl_dsa_suites(),
ct:log("tls1 openssl cipher suites ~p~n", [Ciphers]),
run_suites(Ciphers, Version, Config, dsa).
@@ -1984,56 +2155,56 @@ ciphers_dsa_signed_certs_openssl_names(Config) when is_list(Config) ->
anonymous_cipher_suites()->
[{doc,"Test the anonymous ciphersuites"}].
anonymous_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:anonymous_suites(),
run_suites(Ciphers, Version, Config, anonymous).
%%-------------------------------------------------------------------
psk_cipher_suites() ->
[{doc, "Test the PSK ciphersuites WITHOUT server supplied identity hint"}].
psk_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:psk_suites(),
run_suites(Ciphers, Version, Config, psk).
%%-------------------------------------------------------------------
psk_with_hint_cipher_suites()->
[{doc, "Test the PSK ciphersuites WITH server supplied identity hint"}].
psk_with_hint_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:psk_suites(),
run_suites(Ciphers, Version, Config, psk_with_hint).
%%-------------------------------------------------------------------
psk_anon_cipher_suites() ->
[{doc, "Test the anonymous PSK ciphersuites WITHOUT server supplied identity hint"}].
psk_anon_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:psk_anon_suites(),
run_suites(Ciphers, Version, Config, psk_anon).
%%-------------------------------------------------------------------
psk_anon_with_hint_cipher_suites()->
[{doc, "Test the anonymous PSK ciphersuites WITH server supplied identity hint"}].
psk_anon_with_hint_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:psk_anon_suites(),
run_suites(Ciphers, Version, Config, psk_anon_with_hint).
%%-------------------------------------------------------------------
srp_cipher_suites()->
[{doc, "Test the SRP ciphersuites"}].
srp_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:srp_suites(),
run_suites(Ciphers, Version, Config, srp).
%%-------------------------------------------------------------------
srp_anon_cipher_suites()->
[{doc, "Test the anonymous SRP ciphersuites"}].
srp_anon_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:srp_anon_suites(),
run_suites(Ciphers, Version, Config, srp_anon).
%%-------------------------------------------------------------------
srp_dsa_cipher_suites()->
[{doc, "Test the SRP DSA ciphersuites"}].
srp_dsa_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:srp_dss_suites(),
run_suites(Ciphers, Version, Config, srp_dsa).
%%-------------------------------------------------------------------
@@ -2062,13 +2233,30 @@ rc4_ecdsa_cipher_suites(Config) when is_list(Config) ->
Ciphers = ssl_test_lib:rc4_suites(NVersion),
run_suites(Ciphers, Version, Config, rc4_ecdsa).
+%%-------------------------------------------------------------------
+des_rsa_cipher_suites()->
+ [{doc, "Test the RC4 ciphersuites"}].
+des_rsa_cipher_suites(Config) when is_list(Config) ->
+ NVersion = tls_record:highest_protocol_version([]),
+ Version = tls_record:protocol_version(NVersion),
+ Ciphers = ssl_test_lib:des_suites(NVersion),
+ run_suites(Ciphers, Version, Config, des_rsa).
+%-------------------------------------------------------------------
+des_ecdh_rsa_cipher_suites()->
+ [{doc, "Test the RC4 ciphersuites"}].
+des_ecdh_rsa_cipher_suites(Config) when is_list(Config) ->
+ NVersion = tls_record:highest_protocol_version([]),
+ Version = tls_record:protocol_version(NVersion),
+ Ciphers = ssl_test_lib:des_suites(NVersion),
+ run_suites(Ciphers, Version, Config, des_dhe_rsa).
+
%%--------------------------------------------------------------------
default_reject_anonymous()->
[{doc,"Test that by default anonymous cipher suites are rejected "}].
default_reject_anonymous(Config) when is_list(Config) ->
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
[Cipher | _] = ssl_test_lib:anonymous_suites(),
@@ -2091,9 +2279,7 @@ ciphers_ecdsa_signed_certs() ->
[{doc, "Test all ecdsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_ecdsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:ecdsa_suites(),
ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]),
run_suites(Ciphers, Version, Config, ecdsa).
@@ -2102,8 +2288,7 @@ ciphers_ecdsa_signed_certs_openssl_names() ->
[{doc, "Test all ecdsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_ecdsa_signed_certs_openssl_names(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:openssl_ecdsa_suites(),
ct:log("tls1 openssl cipher suites ~p~n", [Ciphers]),
run_suites(Ciphers, Version, Config, ecdsa).
@@ -2112,9 +2297,7 @@ ciphers_ecdh_rsa_signed_certs() ->
[{doc, "Test all ecdh_rsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_ecdh_rsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:ecdh_rsa_suites(),
ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]),
run_suites(Ciphers, Version, Config, ecdh_rsa).
@@ -2123,8 +2306,7 @@ ciphers_ecdh_rsa_signed_certs_openssl_names() ->
[{doc, "Test all ecdh_rsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_ecdh_rsa_signed_certs_openssl_names(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:openssl_ecdh_rsa_suites(),
ct:log("tls1 openssl cipher suites ~p~n", [Ciphers]),
run_suites(Ciphers, Version, Config, ecdh_rsa).
@@ -2132,8 +2314,8 @@ ciphers_ecdh_rsa_signed_certs_openssl_names(Config) when is_list(Config) ->
reuse_session() ->
[{doc,"Test reuse of sessions (short handshake)"}].
reuse_session(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -2240,8 +2422,8 @@ reuse_session(Config) when is_list(Config) ->
reuse_session_expired() ->
[{doc,"Test sessions is not reused when it has expired"}].
reuse_session_expired(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -2325,8 +2507,8 @@ make_sure_expired(Host, Port, Id) ->
server_does_not_want_to_reuse_session() ->
[{doc,"Test reuse of sessions (short handshake)"}].
server_does_not_want_to_reuse_session(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -2374,8 +2556,8 @@ server_does_not_want_to_reuse_session(Config) when is_list(Config) ->
client_renegotiate() ->
[{doc,"Test ssl:renegotiate/1 on client."}].
client_renegotiate(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2403,8 +2585,8 @@ client_renegotiate(Config) when is_list(Config) ->
client_secure_renegotiate() ->
[{doc,"Test ssl:renegotiate/1 on client."}].
client_secure_renegotiate(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2434,8 +2616,8 @@ client_secure_renegotiate(Config) when is_list(Config) ->
server_renegotiate() ->
[{doc,"Test ssl:renegotiate/1 on server."}].
server_renegotiate(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2462,8 +2644,8 @@ server_renegotiate(Config) when is_list(Config) ->
client_renegotiate_reused_session() ->
[{doc,"Test ssl:renegotiate/1 on client when the ssl session will be reused."}].
client_renegotiate_reused_session(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2490,8 +2672,8 @@ client_renegotiate_reused_session(Config) when is_list(Config) ->
server_renegotiate_reused_session() ->
[{doc,"Test ssl:renegotiate/1 on server when the ssl session will be reused."}].
server_renegotiate_reused_session(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2521,13 +2703,13 @@ client_no_wrap_sequence_number() ->
" to lower treashold substantially."}].
client_no_wrap_sequence_number(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
ErlData = "From erlang to erlang",
- N = 10,
+ N = 12,
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2536,7 +2718,7 @@ client_no_wrap_sequence_number(Config) when is_list(Config) ->
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:highest_protocol_version(tls_record:supported_protocol_versions()),
+ Version = ssl_test_lib:protocol_version(Config, tuple),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -2558,13 +2740,13 @@ server_no_wrap_sequence_number() ->
" to lower treashold substantially."}].
server_no_wrap_sequence_number(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = "From erlang to erlang",
- N = 10,
+ N = 12,
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -2588,13 +2770,20 @@ der_input() ->
[{doc,"Test to input certs and key as der"}].
der_input(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
DHParamFile = filename:join(DataDir, "dHParam.pem"),
- SeverVerifyOpts = ?config(server_verification_opts, Config),
+ {status, _, _, StatusInfo} = sys:get_status(whereis(ssl_manager)),
+ [_, _,_, _, Prop] = StatusInfo,
+ State = ssl_test_lib:state(Prop),
+ [CADb | _] = element(6, State),
+
+ Size = ets:info(CADb, size),
+
+ SeverVerifyOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ServerCert, ServerKey, ServerCaCerts, DHParams} = der_input_opts([{dhfile, DHParamFile} |
SeverVerifyOpts]),
- ClientVerifyOpts = ?config(client_verification_opts, Config),
+ ClientVerifyOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{ClientCert, ClientKey, ClientCaCerts, DHParams} = der_input_opts([{dhfile, DHParamFile} |
ClientVerifyOpts]),
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true},
@@ -2618,13 +2807,8 @@ der_input(Config) when is_list(Config) ->
ssl_test_lib:check_result(Server, ok, Client, ok),
ssl_test_lib:close(Server),
ssl_test_lib:close(Client),
+ Size = ets:info(CADb, size).
- {status, _, _, StatusInfo} = sys:get_status(whereis(ssl_manager)),
- [_, _,_, _, Prop] = StatusInfo,
- State = ssl_test_lib:state(Prop),
- [CADb | _] = element(6, State),
- [] = ets:tab2list(CADb).
-
%%--------------------------------------------------------------------
der_input_opts(Opts) ->
Certfile = proplists:get_value(certfile, Opts),
@@ -2646,8 +2830,8 @@ der_input_opts(Opts) ->
%% ["Check that a CA can have a different signature algorithm than the peer cert."];
%% different_ca_peer_sign(Config) when is_list(Config) ->
-%% ClientOpts = ?config(client_mix_opts, Config),
-%% ServerOpts = ?config(server_mix_verify_opts, Config),
+%% ClientOpts = ssl_test_lib:ssl_options(client_mix_opts, Config),
+%% ServerOpts = ssl_test_lib:ssl_options(server_mix_verify_opts, Config),
%% {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2677,9 +2861,9 @@ no_reuses_session_server_restart_new_cert() ->
[{doc,"Check that a session is not reused if the server is restarted with a new cert."}].
no_reuses_session_server_restart_new_cert(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
- DsaServerOpts = ?config(server_dsa_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ DsaServerOpts = ssl_test_lib:ssl_options(server_dsa_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -2735,10 +2919,10 @@ no_reuses_session_server_restart_new_cert_file() ->
"cert contained in a file with the same name as the old cert."}].
no_reuses_session_server_restart_new_cert_file(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- DsaServerOpts = ?config(server_dsa_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ DsaServerOpts = ssl_test_lib:ssl_options(server_dsa_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
NewServerOpts = new_config(PrivDir, ServerOpts),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2798,14 +2982,19 @@ defaults(Config) when is_list(Config)->
true = lists:member(sslv3, Available),
false = lists:member(sslv3, Supported),
false = lists:member({rsa,rc4_128,sha}, ssl:cipher_suites()),
- true = lists:member({rsa,rc4_128,sha}, ssl:cipher_suites(all)).
+ true = lists:member({rsa,rc4_128,sha}, ssl:cipher_suites(all)),
+ false = lists:member({rsa,des_cbc,sha}, ssl:cipher_suites()),
+ true = lists:member({rsa,des_cbc,sha}, ssl:cipher_suites(all)),
+ false = lists:member({dhe_rsa,des_cbc,sha}, ssl:cipher_suites()),
+ true = lists:member({dhe_rsa,des_cbc,sha}, ssl:cipher_suites(all)).
+
%%--------------------------------------------------------------------
reuseaddr() ->
[{doc,"Test reuseaddr option"}].
reuseaddr(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2839,9 +3028,9 @@ reuseaddr(Config) when is_list(Config) ->
ssl_test_lib:close(Client1).
%%--------------------------------------------------------------------
-tcp_reuseaddr() ->
+tls_tcp_reuseaddr() ->
[{doc, "Reference test case."}].
-tcp_reuseaddr(Config) when is_list(Config) ->
+tls_tcp_reuseaddr(Config) when is_list(Config) ->
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2895,8 +3084,8 @@ honor_client_cipher_order(Config) when is_list(Config) ->
honor_cipher_order(Config, false, ServerCiphers, ClientCiphers, {rsa, aes_128_cbc, sha}).
honor_cipher_order(Config, Honor, ServerCiphers, ClientCiphers, Expected) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2913,8 +3102,7 @@ honor_cipher_order(Config, Honor, ServerCiphers, ClientCiphers, Expected) ->
{options, [{ciphers, ClientCiphers}, {honor_cipher_order, Honor}
| ClientOpts]}]),
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
ServerMsg = ClientMsg = {ok, {Version, Expected}},
@@ -2924,12 +3112,12 @@ honor_cipher_order(Config, Honor, ServerCiphers, ClientCiphers, Expected) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-ciphersuite_vs_version() ->
+tls_ciphersuite_vs_version() ->
[{doc,"Test a SSLv3 client can not negotiate a TLSv* cipher suite."}].
-ciphersuite_vs_version(Config) when is_list(Config) ->
+tls_ciphersuite_vs_version(Config) when is_list(Config) ->
{_ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -2949,7 +3137,7 @@ ciphersuite_vs_version(Config) when is_list(Config) ->
>>),
{ok, <<22, RecMajor:8, RecMinor:8, _RecLen:16, 2, HelloLen:24>>} = gen_tcp:recv(Socket, 9, 10000),
{ok, <<HelloBin:HelloLen/binary>>} = gen_tcp:recv(Socket, HelloLen, 5000),
- ServerHello = tls_handshake:decode_handshake({RecMajor, RecMinor}, 2, HelloBin),
+ ServerHello = tls_handshake:decode_handshake({RecMajor, RecMinor}, 2, HelloBin, false),
case ServerHello of
#server_hello{server_version = {3,0}, cipher_suite = <<0,57>>} ->
ok;
@@ -2961,8 +3149,8 @@ ciphersuite_vs_version(Config) when is_list(Config) ->
conf_signature_algs() ->
[{doc,"Test to set the signature_algs option on both client and server"}].
conf_signature_algs(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2991,8 +3179,8 @@ no_common_signature_algs() ->
[{doc,"Set the signature_algs option so that there client and server does not share any hash sign algorithms"}].
no_common_signature_algs(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3013,12 +3201,12 @@ no_common_signature_algs(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
-dont_crash_on_handshake_garbage() ->
+tls_dont_crash_on_handshake_garbage() ->
[{doc, "Ensure SSL server worker thows an alert on garbage during handshake "
"instead of crashing and exposing state to user code"}].
-dont_crash_on_handshake_garbage(Config) ->
- ServerOpts = ?config(server_opts, Config),
+tls_dont_crash_on_handshake_garbage(Config) ->
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3062,8 +3250,8 @@ hibernate() ->
"inactivity"}].
hibernate(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3081,6 +3269,7 @@ hibernate(Config) ->
{current_function, _} =
process_info(Pid, current_function),
+ ssl_test_lib:check_result(Server, ok, Client, ok),
timer:sleep(1100),
{current_function, {erlang, hibernate, 3}} =
@@ -3097,8 +3286,8 @@ hibernate_right_away() ->
"crashes"}].
hibernate_right_away(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3114,15 +3303,29 @@ hibernate_right_away(Config) ->
Server1 = ssl_test_lib:start_server(StartServerOpts),
Port1 = ssl_test_lib:inet_port(Server1),
- {Client1, #sslsocket{}} = ssl_test_lib:start_client(StartClientOpts ++
+ {Client1, #sslsocket{pid = Pid1}} = ssl_test_lib:start_client(StartClientOpts ++
[{port, Port1}, {options, [{hibernate_after, 0}|ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server1, ok, Client1, ok),
+
+ {current_function, {erlang, hibernate, 3}} =
+ process_info(Pid1, current_function),
+
ssl_test_lib:close(Server1),
ssl_test_lib:close(Client1),
Server2 = ssl_test_lib:start_server(StartServerOpts),
Port2 = ssl_test_lib:inet_port(Server2),
- {Client2, #sslsocket{}} = ssl_test_lib:start_client(StartClientOpts ++
+ {Client2, #sslsocket{pid = Pid2}} = ssl_test_lib:start_client(StartClientOpts ++
[{port, Port2}, {options, [{hibernate_after, 1}|ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server2, ok, Client2, ok),
+
+ ct:sleep(100), %% Schedule out
+
+ {current_function, {erlang, hibernate, 3}} =
+ process_info(Pid2, current_function),
+
ssl_test_lib:close(Server2),
ssl_test_lib:close(Client2).
@@ -3131,7 +3334,7 @@ listen_socket() ->
[{doc,"Check error handling and inet compliance when calling API functions with listen sockets."}].
listen_socket(Config) ->
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ok, ListenSocket} = ssl:listen(0, ServerOpts),
%% This can be a valid thing to do as
@@ -3152,12 +3355,12 @@ listen_socket(Config) ->
ok = ssl:close(ListenSocket).
%%--------------------------------------------------------------------
-ssl_accept_timeout() ->
+tls_ssl_accept_timeout() ->
[{doc,"Test ssl:ssl_accept timeout"}].
-ssl_accept_timeout(Config) ->
+tls_ssl_accept_timeout(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -3185,8 +3388,8 @@ ssl_recv_timeout() ->
[{doc,"Test ssl:ssl_accept timeout"}].
ssl_recv_timeout(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3212,8 +3415,8 @@ ssl_recv_timeout(Config) ->
connect_twice() ->
[{doc,""}].
connect_twice(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3257,8 +3460,8 @@ renegotiate_dos_mitigate_active() ->
[{doc, "Mitigate DOS computational attack by not allowing client to renegotiate many times in a row",
"immediately after each other"}].
renegotiate_dos_mitigate_active(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3266,7 +3469,7 @@ renegotiate_dos_mitigate_active(Config) when is_list(Config) ->
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
{mfa, {ssl_test_lib, send_recv_result_active, []}},
- {options, [ServerOpts]}]),
+ {options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
@@ -3285,8 +3488,8 @@ renegotiate_dos_mitigate_passive() ->
[{doc, "Mitigate DOS computational attack by not allowing client to renegotiate many times in a row",
"immediately after each other"}].
renegotiate_dos_mitigate_passive(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3312,8 +3515,8 @@ renegotiate_dos_mitigate_passive(Config) when is_list(Config) ->
renegotiate_dos_mitigate_absolute() ->
[{doc, "Mitigate DOS computational attack by not allowing client to initiate renegotiation"}].
renegotiate_dos_mitigate_absolute(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3337,11 +3540,11 @@ renegotiate_dos_mitigate_absolute(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-tcp_error_propagation_in_active_mode() ->
- [{doc,"Test that process recives {ssl_error, Socket, closed} when tcp error occurs"}].
-tcp_error_propagation_in_active_mode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_tcp_error_propagation_in_active_mode() ->
+ [{doc,"Test that process recives {ssl_error, Socket, closed} when tcp error ocurres"}].
+tls_tcp_error_propagation_in_active_mode(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3371,8 +3574,8 @@ tcp_error_propagation_in_active_mode(Config) when is_list(Config) ->
recv_error_handling() ->
[{doc,"Special case of call error handling"}].
recv_error_handling(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3397,7 +3600,7 @@ rizzo() ->
rizzo(Config) when is_list(Config) ->
Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128],
- Prop = ?config(tc_group_properties, Config),
+ Prop = proplists:get_value(tc_group_properties, Config),
Version = proplists:get_value(name, Prop),
run_send_recv_rizzo(Ciphers, Config, Version,
{?MODULE, send_recv_result_active_rizzo, []}).
@@ -3407,20 +3610,50 @@ no_rizzo_rc4() ->
no_rizzo_rc4(Config) when is_list(Config) ->
Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(),Y == rc4_128],
- Prop = ?config(tc_group_properties, Config),
+ Prop = proplists:get_value(tc_group_properties, Config),
Version = proplists:get_value(name, Prop),
run_send_recv_rizzo(Ciphers, Config, Version,
{?MODULE, send_recv_result_active_no_rizzo, []}).
+rizzo_one_n_minus_one() ->
+ [{doc,"Test that the 1/n-1-split mitigation of Rizzo/Dungon attack can be explicitly selected"}].
+
+rizzo_one_n_minus_one(Config) when is_list(Config) ->
+ Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128],
+ Prop = proplists:get_value(tc_group_properties, Config),
+ Version = proplists:get_value(name, Prop),
+ run_send_recv_rizzo(Ciphers, Config, Version,
+ {?MODULE, send_recv_result_active_rizzo, []}).
+
+rizzo_zero_n() ->
+ [{doc,"Test that the 0/n-split mitigation of Rizzo/Dungon attack can be explicitly selected"}].
+
+rizzo_zero_n(Config) when is_list(Config) ->
+ Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128],
+ Prop = proplists:get_value(tc_group_properties, Config),
+ Version = proplists:get_value(name, Prop),
+ run_send_recv_rizzo(Ciphers, Config, Version,
+ {?MODULE, send_recv_result_active_no_rizzo, []}).
+
+rizzo_disabled() ->
+ [{doc,"Test that the mitigation of Rizzo/Dungon attack can be explicitly disabled"}].
+
+rizzo_disabled(Config) when is_list(Config) ->
+ Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128],
+ Prop = proplists:get_value(tc_group_properties, Config),
+ Version = proplists:get_value(name, Prop),
+ run_send_recv_rizzo(Ciphers, Config, Version,
+ {?MODULE, send_recv_result_active_no_rizzo, []}).
+
%%--------------------------------------------------------------------
new_server_wants_peer_cert() ->
[{doc, "Test that server configured to do client certification does"
" not reuse session without a client certificate."}].
new_server_wants_peer_cert(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
VServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3481,11 +3714,11 @@ session_cache_process_mnesia(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
-versions_option() ->
+tls_versions_option() ->
[{doc,"Test API versions option to connect/listen."}].
-versions_option(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_versions_option(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
Supported = proplists:get_value(supported, ssl:versions()),
Available = proplists:get_value(available, ssl:versions()),
@@ -3523,8 +3756,8 @@ unordered_protocol_versions_server() ->
" when it is not first in the versions list."}].
unordered_protocol_versions_server(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3548,8 +3781,8 @@ unordered_protocol_versions_client() ->
" when it is not first in the versions list."}].
unordered_protocol_versions_client(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3573,8 +3806,8 @@ unordered_protocol_versions_client(Config) when is_list(Config) ->
server_name_indication_option() ->
[{doc,"Test API server_name_indication option to connect."}].
server_name_indication_option(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3611,8 +3844,8 @@ server_name_indication_option(Config) when is_list(Config) ->
accept_pool() ->
[{doc,"Test having an accept pool."}].
accept_pool(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server0 = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3643,7 +3876,7 @@ accept_pool(Config) when is_list(Config) ->
{mfa, {ssl_test_lib, send_recv_result_active, []}},
{options, ClientOpts}
]),
-
+
ssl_test_lib:check_ok([Server0, Server1, Server2, Client0, Client1, Client2]),
ssl_test_lib:close(Server0),
@@ -3667,8 +3900,8 @@ tcp_send_recv_result(Socket) ->
ok.
basic_verify_test_no_close(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3687,8 +3920,8 @@ basic_verify_test_no_close(Config) ->
{Server, Client}.
basic_test(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3749,8 +3982,8 @@ prf_run_test(_, TlsVer, [], _, Prf) ->
prf_run_test(Config, TlsVer, Ciphers, Expected, Prf) ->
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
BaseOpts = [{active, true}, {versions, [TlsVer]}, {ciphers, Ciphers}],
- ServerOpts = BaseOpts ++ ?config(server_opts, Config),
- ClientOpts = BaseOpts ++ ?config(client_opts, Config),
+ ServerOpts = BaseOpts ++ proplists:get_value(server_opts, Config),
+ ClientOpts = BaseOpts ++ proplists:get_value(client_opts, Config),
Server = ssl_test_lib:start_server(
[{node, ServerNode}, {port, 0}, {from, self()},
{mfa, {?MODULE, prf_verify_value, [TlsVer, Expected, Prf]}},
@@ -3885,6 +4118,18 @@ renegotiate_rejected(Socket) ->
ssl:send(Socket, "Hello world"),
ok.
+rizzo_add_mitigation_option(Value, Config) ->
+ lists:foldl(fun(Opt, Acc) ->
+ case proplists:get_value(Opt, Acc) of
+ undefined -> Acc;
+ C ->
+ N = lists:keystore(beast_mitigation, 1, C,
+ {beast_mitigation, Value}),
+ lists:keystore(Opt, 1, Acc, {Opt, N})
+ end
+ end, Config,
+ [client_opts, client_dsa_opts, server_opts, server_dsa_opts,
+ server_ecdsa_opts, server_ecdh_rsa_opts]).
new_config(PrivDir, ServerOpts0) ->
CaCertFile = proplists:get_value(cacertfile, ServerOpts0),
@@ -4153,70 +4398,78 @@ client_server_opts({KeyAlgo,_,_}, Config)
when KeyAlgo == rsa orelse
KeyAlgo == dhe_rsa orelse
KeyAlgo == ecdhe_rsa ->
- {?config(client_opts, Config),
- ?config(server_opts, Config)};
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_opts, Config)};
client_server_opts({KeyAlgo,_,_}, Config) when KeyAlgo == dss orelse KeyAlgo == dhe_dss ->
- {?config(client_dsa_opts, Config),
- ?config(server_dsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_dsa_opts, Config),
+ ssl_test_lib:ssl_options(server_dsa_opts, Config)};
client_server_opts({KeyAlgo,_,_}, Config) when KeyAlgo == ecdh_ecdsa orelse KeyAlgo == ecdhe_ecdsa ->
- {?config(client_opts, Config),
- ?config(server_ecdsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdsa_opts, Config)};
client_server_opts({KeyAlgo,_,_}, Config) when KeyAlgo == ecdh_rsa ->
- {?config(client_opts, Config),
- ?config(server_ecdh_rsa_opts, Config)}.
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdh_rsa_opts, Config)}.
run_suites(Ciphers, Version, Config, Type) ->
{ClientOpts, ServerOpts} =
case Type of
rsa ->
- {?config(client_opts, Config),
- ?config(server_opts, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_verification_opts, Config)};
dsa ->
- {?config(client_opts, Config),
- ?config(server_dsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_dsa_opts, Config)};
anonymous ->
%% No certs in opts!
- {?config(client_opts, Config),
- ?config(server_anon, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_anon, Config)};
psk ->
- {?config(client_psk, Config),
- ?config(server_psk, Config)};
+ {ssl_test_lib:ssl_options(client_psk, Config),
+ ssl_test_lib:ssl_options(server_psk, Config)};
psk_with_hint ->
- {?config(client_psk, Config),
- ?config(server_psk_hint, Config)};
+ {ssl_test_lib:ssl_options(client_psk, Config),
+ ssl_test_lib:ssl_options(server_psk_hint, Config)};
psk_anon ->
- {?config(client_psk, Config),
- ?config(server_psk_anon, Config)};
+ {ssl_test_lib:ssl_options(client_psk, Config),
+ ssl_test_lib:ssl_options(server_psk_anon, Config)};
psk_anon_with_hint ->
- {?config(client_psk, Config),
- ?config(server_psk_anon_hint, Config)};
+ {ssl_test_lib:ssl_options(client_psk, Config),
+ ssl_test_lib:ssl_options(server_psk_anon_hint, Config)};
srp ->
- {?config(client_srp, Config),
- ?config(server_srp, Config)};
+ {ssl_test_lib:ssl_options(client_srp, Config),
+ ssl_test_lib:ssl_options(server_srp, Config)};
srp_anon ->
- {?config(client_srp, Config),
- ?config(server_srp_anon, Config)};
+ {ssl_test_lib:ssl_options(client_srp, Config),
+ ssl_test_lib:ssl_options(server_srp_anon, Config)};
srp_dsa ->
- {?config(client_srp_dsa, Config),
- ?config(server_srp_dsa, Config)};
+ {ssl_test_lib:ssl_options(client_srp_dsa, Config),
+ ssl_test_lib:ssl_options(server_srp_dsa, Config)};
ecdsa ->
- {?config(client_opts, Config),
- ?config(server_ecdsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdsa_opts, Config)};
ecdh_rsa ->
- {?config(client_opts, Config),
- ?config(server_ecdh_rsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdh_rsa_opts, Config)};
rc4_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_opts, Config)]};
+ ssl_test_lib:ssl_options(server_verification_opts, Config)]};
rc4_ecdh_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_ecdh_rsa_opts, Config)]};
+ ssl_test_lib:ssl_options(server_ecdh_rsa_opts, Config)]};
rc4_ecdsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ [{ciphers, Ciphers} |
+ ssl_test_lib:ssl_options(server_ecdsa_opts, Config)]};
+ des_dhe_rsa ->
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ [{ciphers, Ciphers} |
+ ssl_test_lib:ssl_options(server_verification_opts, Config)]};
+ des_rsa ->
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_ecdsa_opts, Config)]}
+ ssl_test_lib:ssl_options(server_verification_opts, Config)]}
end,
Result = lists:map(fun(Cipher) ->
@@ -4239,6 +4492,7 @@ cipher(CipherSuite, Version, Config, ClientOpts, ServerOpts) ->
%% process_flag(trap_exit, true),
ct:log("Testing CipherSuite ~p~n", [CipherSuite]),
ct:log("Server Opts ~p~n", [ServerOpts]),
+ ct:log("Client Opts ~p~n", [ClientOpts]),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
ErlangCipherSuite = erlang_cipher_suite(CipherSuite),
@@ -4274,7 +4528,7 @@ connection_information_result(Socket) ->
{ok, Info = [_ | _]} = ssl:connection_information(Socket),
case length(Info) > 3 of
true ->
- %% Atleast one ssloption() is set
+ %% Atleast one ssl_option() is set
ct:log("Info ~p", [Info]),
ok;
false ->
@@ -4297,7 +4551,7 @@ connect_dist_c(S) ->
{ok, Test} = ssl:recv(S, 0, 10000),
ok.
-tls_downgrade(Socket) ->
+tls_downgrade_result(Socket) ->
ok = ssl_test_lib:send_recv_result(Socket),
case ssl:close(Socket, {self(), 10000}) of
{ok, TCPSocket} ->
@@ -4336,22 +4590,22 @@ get_invalid_inet_option(Socket) ->
{error, {options, {socket_options, foo, _}}} = ssl:getopts(Socket, [foo]),
ok.
-shutdown_result(Socket, server) ->
+tls_shutdown_result(Socket, server) ->
ssl:send(Socket, "Hej"),
ssl:shutdown(Socket, write),
{ok, "Hej hopp"} = ssl:recv(Socket, 8),
ok;
-shutdown_result(Socket, client) ->
+tls_shutdown_result(Socket, client) ->
{ok, "Hej"} = ssl:recv(Socket, 3),
ssl:send(Socket, "Hej hopp"),
ssl:shutdown(Socket, write),
ok.
-shutdown_write_result(Socket, server) ->
+tls_shutdown_write_result(Socket, server) ->
ct:sleep(?SLEEP),
ssl:shutdown(Socket, write);
-shutdown_write_result(Socket, client) ->
+tls_shutdown_write_result(Socket, client) ->
ssl:recv(Socket, 0).
dummy(_Socket) ->
@@ -4359,18 +4613,18 @@ dummy(_Socket) ->
%% due to fatal handshake failiure
exit(kill).
-shutdown_both_result(Socket, server) ->
+tls_shutdown_both_result(Socket, server) ->
ct:sleep(?SLEEP),
ssl:shutdown(Socket, read_write);
-shutdown_both_result(Socket, client) ->
+tls_shutdown_both_result(Socket, client) ->
ssl:recv(Socket, 0).
peername_result(S) ->
ssl:peername(S).
version_option_test(Config, Version) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -4416,4 +4670,6 @@ first_rsa_suite([{rsa, _, _, _} = Suite| _]) ->
first_rsa_suite([_ | Rest]) ->
first_rsa_suite(Rest).
-
+wait_for_send(Socket) ->
+ %% Make sure TLS process processed send message event
+ _ = ssl:connection_information(Socket).
diff --git a/lib/ssl/test/ssl_bench_SUITE.erl b/lib/ssl/test/ssl_bench_SUITE.erl
index 953356c87c..ed439a425f 100644
--- a/lib/ssl/test/ssl_bench_SUITE.erl
+++ b/lib/ssl/test/ssl_bench_SUITE.erl
@@ -1,7 +1,7 @@
%%%-------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/ssl/test/ssl_certificate_verify_SUITE.erl b/lib/ssl/test/ssl_certificate_verify_SUITE.erl
index d10506cb69..c83c513eb3 100644
--- a/lib/ssl/test/ssl_certificate_verify_SUITE.erl
+++ b/lib/ssl/test/ssl_certificate_verify_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,8 +52,8 @@ groups() ->
{error_handling, [],error_handling_tests()}].
tests() ->
- [server_verify_peer,
- server_verify_none,
+ [verify_peer,
+ verify_none,
server_require_peer_cert_ok,
server_require_peer_cert_fail,
server_require_peer_cert_partial_chain,
@@ -65,9 +65,10 @@ tests() ->
cert_expired,
invalid_signature_client,
invalid_signature_server,
- extended_key_usage_verify_peer,
- extended_key_usage_verify_none,
- critical_extension_verify_peer,
+ extended_key_usage_verify_client,
+ extended_key_usage_verify_server,
+ critical_extension_verify_client,
+ critical_extension_verify_server,
critical_extension_verify_none].
error_handling_tests()->
@@ -86,8 +87,8 @@ init_per_suite(Config0) ->
ok ->
ssl:start(),
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config = ssl_test_lib:make_dsa_cert(Config0),
ssl_test_lib:cert_options(Config)
catch _:_ ->
@@ -110,8 +111,21 @@ init_per_group(_, Config) ->
end_per_group(_GroupName, Config) ->
Config.
+init_per_testcase(TestCase, Config) when TestCase == cert_expired;
+ TestCase == invalid_signature_client;
+ TestCase == invalid_signature_server;
+ TestCase == extended_key_usage_verify_none;
+ TestCase == extended_key_usage_verify_peer;
+ TestCase == critical_extension_verify_none;
+ TestCase == critical_extension_verify_peer;
+ TestCase == no_authority_key_identifier;
+ TestCase == no_authority_key_identifier_and_nonstandard_encoding->
+ ssl:clear_pem_cache(),
+ init_per_testcase(common, Config);
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl:stop(),
+ ssl:start(),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 5}),
Config.
@@ -122,13 +136,13 @@ end_per_testcase(_TestCase, Config) ->
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
-server_verify_peer() ->
- [{doc,"Test server option verify_peer"}].
-server_verify_peer(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+verify_peer() ->
+ [{doc,"Test option verify_peer"}].
+verify_peer(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -147,14 +161,14 @@ server_verify_peer(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-server_verify_none() ->
- [{doc,"Test server option verify_none"}].
+verify_none() ->
+ [{doc,"Test option verify_none"}].
-server_verify_none(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+verify_none(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -179,10 +193,10 @@ server_verify_client_once() ->
[{doc,"Test server option verify_client_once"}].
server_verify_client_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -218,20 +232,23 @@ server_require_peer_cert_ok() ->
server_require_peer_cert_ok(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {ssl_test_lib,send_recv_result, []}},
- {options, [{active, false} | ServerOpts]}]),
+ {mfa, {ssl_test_lib, ReceiveFunction, []}},
+ {options, [{active, Active} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {ssl_test_lib, send_recv_result, []}},
- {options, [{active, false} | ClientOpts]}]),
+ {mfa, {ssl_test_lib, ReceiveFunction, []}},
+ {options, [{active, Active} | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
ssl_test_lib:close(Server),
@@ -244,8 +261,8 @@ server_require_peer_cert_fail() ->
server_require_peer_cert_fail(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- BadClientOpts = ?config(client_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ BadClientOpts = ssl_test_lib:ssl_options(client_opts, []),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
@@ -275,8 +292,8 @@ server_require_peer_cert_partial_chain() ->
server_require_peer_cert_partial_chain(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ClientCAs} = file:read_file(proplists:get_value(cacertfile, ClientOpts)),
@@ -310,12 +327,14 @@ server_require_peer_cert_allow_partial_chain() ->
server_require_peer_cert_allow_partial_chain(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
- {ok, ServerCAs} = file:read_file(proplists:get_value(cacertfile, ServerOpts)),
- [{_,_,_}, {_, IntermidiateCA, _}] = public_key:pem_decode(ServerCAs),
+ {ok, ClientCAs} = file:read_file(proplists:get_value(cacertfile, ClientOpts)),
+ [{_,_,_}, {_, IntermidiateCA, _}] = public_key:pem_decode(ClientCAs),
PartialChain = fun(CertChain) ->
case lists:member(IntermidiateCA, CertChain) of
@@ -328,16 +347,17 @@ server_require_peer_cert_allow_partial_chain(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {ssl_test_lib, send_recv_result_active, []}},
- {options, [{cacerts, [IntermidiateCA]},
+ {mfa, {ssl_test_lib, ReceiveFunction, []}},
+ {options, [{active, Active},
+ {cacerts, [IntermidiateCA]},
{partial_chain, PartialChain} |
proplists:delete(cacertfile, ServerOpts)]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {ssl_test_lib, send_recv_result_active, []}},
- {options, ClientOpts}]),
+ {mfa, {ssl_test_lib, ReceiveFunction, []}},
+ {options, [{active, Active} | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
@@ -349,8 +369,8 @@ server_require_peer_cert_do_not_allow_partial_chain() ->
server_require_peer_cert_do_not_allow_partial_chain(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ServerCAs} = file:read_file(proplists:get_value(cacertfile, ServerOpts)),
@@ -390,8 +410,8 @@ server_require_peer_cert_partial_chain_fun_fail() ->
server_require_peer_cert_partial_chain_fun_fail(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = proplists:get_value(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ServerCAs} = file:read_file(proplists:get_value(cacertfile, ServerOpts)),
@@ -430,8 +450,8 @@ verify_fun_always_run_client() ->
[{doc,"Verify that user verify_fun is always run (for valid and valid_peer not only unknown_extension)"}].
verify_fun_always_run_client(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -475,8 +495,8 @@ verify_fun_always_run_client(Config) when is_list(Config) ->
verify_fun_always_run_server() ->
[{doc,"Verify that user verify_fun is always run (for valid and valid_peer not only unknown_extension)"}].
verify_fun_always_run_server(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% If user verify fun is called correctly we fail the connection.
@@ -507,9 +527,7 @@ verify_fun_always_run_server(Config) when is_list(Config) ->
{from, self()},
{mfa, {ssl_test_lib,
no_result, []}},
- {options,
- [{verify, verify_peer}
- | ClientOpts]}]),
+ {options, ClientOpts}]),
%% Client error may be {tls_alert, "handshake failure" } or closed depending on timing
%% this is not a bug it is a circumstance of how tcp works!
@@ -522,39 +540,13 @@ verify_fun_always_run_server(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
-client_verify_none_passive() ->
- [{doc,"Test client option verify_none"}].
-
-client_verify_none_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
- {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
- {from, self()},
- {mfa, {ssl_test_lib, send_recv_result, []}},
- {options, [{active, false}
- | ServerOpts]}]),
- Port = ssl_test_lib:inet_port(Server),
-
- Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {mfa, {ssl_test_lib, send_recv_result, []}},
- {options, [{active, false},
- {verify, verify_none}
- | ClientOpts]}]),
-
- ssl_test_lib:check_result(Server, ok, Client, ok),
- ssl_test_lib:close(Server),
- ssl_test_lib:close(Client).
-%%--------------------------------------------------------------------
cert_expired() ->
[{doc,"Test server with expired certificate"}].
cert_expired(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -616,73 +608,15 @@ two_digits_str(N) ->
lists:flatten(io_lib:format("~p", [N])).
%%--------------------------------------------------------------------
+extended_key_usage_verify_server() ->
+ [{doc,"Test cert that has a critical extended_key_usage extension in verify_peer mode for server"}].
-client_verify_none_active() ->
- [{doc,"Test client option verify_none"}].
-
-client_verify_none_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
- {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
- {from, self()},
- {mfa, {ssl_test_lib,
- send_recv_result_active, []}},
- {options, [{active, true}
- | ServerOpts]}]),
- Port = ssl_test_lib:inet_port(Server),
- Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {mfa, {ssl_test_lib,
- send_recv_result_active, []}},
- {options, [{active, true},
- {verify, verify_none}
- | ClientOpts]}]),
-
- ssl_test_lib:check_result(Server, ok, Client, ok),
- ssl_test_lib:close(Server),
- ssl_test_lib:close(Client).
-
-%%--------------------------------------------------------------------
-client_verify_none_active_once() ->
- [{doc,"Test client option verify_none"}].
-
-client_verify_none_active_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
-
- {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
- {from, self()},
- {mfa, {ssl_test_lib, send_recv_result_active, []}},
- {options, [{active, once} | ServerOpts]}]),
- Port = ssl_test_lib:inet_port(Server),
-
- Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {mfa, {ssl_test_lib,
- send_recv_result_active_once,
- []}},
- {options, [{active, once},
- {verify, verify_none}
- | ClientOpts]}]),
-
- ssl_test_lib:check_result(Server, ok, Client, ok),
- ssl_test_lib:close(Server),
- ssl_test_lib:close(Client).
-
-%%--------------------------------------------------------------------
-extended_key_usage_verify_peer() ->
- [{doc,"Test cert that has a critical extended_key_usage extension in verify_peer mode"}].
-
-extended_key_usage_verify_peer(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+extended_key_usage_verify_server(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -727,7 +661,7 @@ extended_key_usage_verify_peer(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {ssl_test_lib, ReceiveFunction, []}},
- {options, [{verify, verify_peer}, {active, Active} |
+ {options, [{verify, verify_none}, {active, Active} |
NewClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
@@ -736,15 +670,15 @@ extended_key_usage_verify_peer(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-extended_key_usage_verify_none() ->
- [{doc,"Test cert that has a critical extended_key_usage extension in verify_none mode"}].
+extended_key_usage_verify_client() ->
+ [{doc,"Test cert that has a critical extended_key_usage extension in client verify_peer mode"}].
-extended_key_usage_verify_none(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+extended_key_usage_verify_client(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -797,15 +731,15 @@ extended_key_usage_verify_none(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-critical_extension_verify_peer() ->
+critical_extension_verify_server() ->
[{doc,"Test cert that has a critical unknown extension in verify_peer mode"}].
-critical_extension_verify_peer(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+critical_extension_verify_server(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
NewCertName = integer_to_list(erlang:unique_integer()) ++ ".pem",
@@ -833,7 +767,7 @@ critical_extension_verify_peer(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {ssl_test_lib, ReceiveFunction, []}},
- {options, [{verify, verify_peer}, {active, Active} | NewClientOpts]}]),
+ {options, [{verify, verify_none}, {active, Active} | NewClientOpts]}]),
%% This certificate has a critical extension that we don't
%% understand. Therefore, verification should fail.
@@ -842,17 +776,63 @@ critical_extension_verify_peer(Config) when is_list(Config) ->
ssl_test_lib:close(Server),
ok.
+%%--------------------------------------------------------------------
+
+critical_extension_verify_client() ->
+ [{doc,"Test cert that has a critical unknown extension in verify_peer mode"}].
+
+critical_extension_verify_client(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
+ KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
+ NewCertName = integer_to_list(erlang:unique_integer()) ++ ".pem",
+
+ ServerCertFile = proplists:get_value(certfile, ServerOpts),
+ NewServerCertFile = filename:join([PrivDir, "server", NewCertName]),
+ add_critical_netscape_cert_type(ServerCertFile, NewServerCertFile, KeyFile),
+ NewServerOpts = [{certfile, NewServerCertFile} | proplists:delete(certfile, ServerOpts)],
+
+ ClientCertFile = proplists:get_value(certfile, ClientOpts),
+ NewClientCertFile = filename:join([PrivDir, "client", NewCertName]),
+ add_critical_netscape_cert_type(ClientCertFile, NewClientCertFile, KeyFile),
+ NewClientOpts = [{certfile, NewClientCertFile} | proplists:delete(certfile, ClientOpts)],
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server_error(
+ [{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib, ReceiveFunction, []}},
+ {options, [{verify, verify_none}, {active, Active} | NewServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client_error(
+ [{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {ssl_test_lib, ReceiveFunction, []}},
+ {options, [{verify, verify_peer}, {active, Active} | NewClientOpts]}]),
+
+ %% This certificate has a critical extension that we don't
+ %% understand. Therefore, verification should fail.
+ tcp_delivery_workaround(Server, {error, {tls_alert, "unsupported certificate"}},
+ Client, {error, {tls_alert, "unsupported certificate"}}),
+
+ ssl_test_lib:close(Server),
+ ok.
%%--------------------------------------------------------------------
critical_extension_verify_none() ->
[{doc,"Test cert that has a critical unknown extension in verify_none mode"}].
critical_extension_verify_none(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
NewCertName = integer_to_list(erlang:unique_integer()) ++ ".pem",
@@ -917,9 +897,9 @@ no_authority_key_identifier() ->
" but are present in trusted certs db."}].
no_authority_key_identifier(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -973,9 +953,9 @@ no_authority_key_identifier_and_nonstandard_encoding() ->
" authorityKeyIdentifier extension but are present in trusted certs db."}].
no_authority_key_identifier_and_nonstandard_encoding(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -1034,9 +1014,9 @@ invalid_signature_server() ->
[{doc,"Test client with invalid signature"}].
invalid_signature_server(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "server/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -1071,9 +1051,9 @@ invalid_signature_client() ->
[{doc,"Test server with invalid signature"}].
invalid_signature_client(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "client/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -1109,8 +1089,8 @@ client_with_cert_cipher_suites_handshake() ->
[{doc, "Test that client with a certificate without keyEncipherment usage "
" extension can connect to a server with restricted cipher suites "}].
client_with_cert_cipher_suites_handshake(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts_digital_signature_only, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts_digital_signature_only, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1137,7 +1117,7 @@ client_with_cert_cipher_suites_handshake(Config) when is_list(Config) ->
server_verify_no_cacerts() ->
[{doc,"Test server must have cacerts if it wants to verify client"}].
server_verify_no_cacerts(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = proplists:delete(cacertfile, ssl_test_lib:ssl_options(server_opts, Config)),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1151,8 +1131,8 @@ server_verify_no_cacerts(Config) when is_list(Config) ->
unknown_server_ca_fail() ->
[{doc,"Test that the client fails if the ca is unknown in verify_peer mode"}].
unknown_server_ca_fail(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1195,8 +1175,8 @@ unknown_server_ca_fail(Config) when is_list(Config) ->
unknown_server_ca_accept_verify_none() ->
[{doc,"Test that the client succeds if the ca is unknown in verify_none mode"}].
unknown_server_ca_accept_verify_none(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1220,8 +1200,8 @@ unknown_server_ca_accept_verify_peer() ->
[{doc, "Test that the client succeds if the ca is unknown in verify_peer mode"
" with a verify_fun that accepts the unknown ca error"}].
unknown_server_ca_accept_verify_peer(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts =ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1259,8 +1239,8 @@ unknown_server_ca_accept_verify_peer(Config) when is_list(Config) ->
unknown_server_ca_accept_backwardscompatibility() ->
[{doc,"Test that old style verify_funs will work"}].
unknown_server_ca_accept_backwardscompatibility(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
diff --git a/lib/ssl/test/ssl_crl_SUITE.erl b/lib/ssl/test/ssl_crl_SUITE.erl
index 5b86027210..00636e5660 100644
--- a/lib/ssl/test/ssl_crl_SUITE.erl
+++ b/lib/ssl/test/ssl_crl_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -41,20 +41,26 @@ groups() ->
[
{check_true, [], [{group, v2_crl},
{group, v1_crl},
- {group, idp_crl}]},
+ {group, idp_crl},
+ {group, crl_hash_dir}]},
{check_peer, [], [{group, v2_crl},
{group, v1_crl},
- {group, idp_crl}]},
+ {group, idp_crl},
+ {group, crl_hash_dir}]},
{check_best_effort, [], [{group, v2_crl},
{group, v1_crl},
- {group, idp_crl}]},
+ {group, idp_crl},
+ {group, crl_hash_dir}]},
{v2_crl, [], basic_tests()},
{v1_crl, [], basic_tests()},
- {idp_crl, [], basic_tests()}].
+ {idp_crl, [], basic_tests()},
+ {crl_hash_dir, [], basic_tests() ++ crl_hash_dir_tests()}].
basic_tests() ->
[crl_verify_valid, crl_verify_revoked, crl_verify_no_crl].
+crl_hash_dir_tests() ->
+ [crl_hash_dir_collision, crl_hash_dir_expired].
init_per_suite(Config) ->
case os:find_executable("openssl") of
@@ -97,11 +103,28 @@ init_per_group(Group, Config0) ->
true ->
[{idp_crl, true} | Config0];
false ->
- DataDir = ?config(data_dir, Config0),
- CertDir = filename:join(?config(priv_dir, Config0), Group),
+ DataDir = proplists:get_value(data_dir, Config0),
+ CertDir = filename:join(proplists:get_value(priv_dir, Config0), Group),
{CertOpts, Config} = init_certs(CertDir, Group, Config0),
{ok, _} = make_certs:all(DataDir, CertDir, CertOpts),
- [{cert_dir, CertDir}, {idp_crl, false} | Config]
+ case Group of
+ crl_hash_dir ->
+ CrlDir = filename:join(CertDir, "crls"),
+ %% Copy CRLs to their hashed filenames.
+ %% Find the hashes with 'openssl crl -noout -hash -in crl.pem'.
+ populate_crl_hash_dir(CertDir, CrlDir,
+ [{"erlangCA", "d6134ed3"},
+ {"otpCA", "d4c8d7e5"}],
+ replace),
+ CrlCacheOpts = [{crl_cache,
+ {ssl_crl_hash_dir,
+ {internal, [{dir, CrlDir}]}}}];
+ _ ->
+ CrlCacheOpts = []
+ end,
+ [{crl_cache_opts, CrlCacheOpts},
+ {cert_dir, CertDir},
+ {idp_crl, false} | Config]
end.
end_per_group(_GroupName, Config) ->
@@ -109,23 +132,23 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(Case, Config0) ->
- case ?config(idp_crl, Config0) of
+ case proplists:get_value(idp_crl, Config0) of
true ->
end_per_testcase(Case, Config0),
inets:start(),
ssl:start(),
- ServerRoot = make_dir_path([?config(priv_dir, Config0), idp_crl, tmp]),
+ ServerRoot = make_dir_path([proplists:get_value(priv_dir, Config0), idp_crl, tmp]),
%% start a HTTP server to serve the CRLs
- {ok, Httpd} = inets:start(httpd, [{ipfamily, ?config(ipfamily, Config0)},
+ {ok, Httpd} = inets:start(httpd, [{ipfamily, proplists:get_value(ipfamily, Config0)},
{server_name, "localhost"}, {port, 0},
{server_root, ServerRoot},
{document_root,
- filename:join(?config(priv_dir, Config0), idp_crl)}
+ filename:join(proplists:get_value(priv_dir, Config0), idp_crl)}
]),
[{port,Port}] = httpd:info(Httpd, [port]),
Config = [{httpd_port, Port} | Config0],
- DataDir = ?config(data_dir, Config),
- CertDir = filename:join(?config(priv_dir, Config0), idp_crl),
+ DataDir = proplists:get_value(data_dir, Config),
+ CertDir = filename:join(proplists:get_value(priv_dir, Config0), idp_crl),
{CertOpts, Config} = init_certs(CertDir, idp_crl, Config),
{ok, _} = make_certs:all(DataDir, CertDir, CertOpts),
ct:timetrap({seconds, 6}),
@@ -137,7 +160,7 @@ init_per_testcase(Case, Config0) ->
end.
end_per_testcase(_, Config) ->
- case ?config(idp_crl, Config) of
+ case proplists:get_value(idp_crl, Config) of
true ->
ssl:stop(),
inets:stop();
@@ -152,21 +175,22 @@ end_per_testcase(_, Config) ->
crl_verify_valid() ->
[{doc,"Verify a simple valid CRL chain"}].
crl_verify_valid(Config) when is_list(Config) ->
- PrivDir = ?config(cert_dir, Config),
- Check = ?config(crl_check, Config),
+ PrivDir = proplists:get_value(cert_dir, Config),
+ Check = proplists:get_value(crl_check, Config),
ServerOpts = [{keyfile, filename:join([PrivDir, "server", "key.pem"])},
{certfile, filename:join([PrivDir, "server", "cert.pem"])},
{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])}],
- ClientOpts = case ?config(idp_crl, Config) of
+ ClientOpts = case proplists:get_value(idp_crl, Config) of
true ->
[{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])},
{crl_check, Check},
{crl_cache, {ssl_crl_cache, {internal, [{http, 5000}]}}},
{verify, verify_peer}];
false ->
- [{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])},
- {crl_check, Check},
- {verify, verify_peer}]
+ ?config(crl_cache_opts, Config) ++
+ [{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])},
+ {crl_check, Check},
+ {verify, verify_peer}]
end,
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -178,8 +202,8 @@ crl_verify_valid(Config) when is_list(Config) ->
crl_verify_revoked() ->
[{doc,"Verify a simple CRL chain when peer cert is reveoked"}].
crl_verify_revoked(Config) when is_list(Config) ->
- PrivDir = ?config(cert_dir, Config),
- Check = ?config(crl_check, Config),
+ PrivDir = proplists:get_value(cert_dir, Config),
+ Check = proplists:get_value(crl_check, Config),
ServerOpts = [{keyfile, filename:join([PrivDir, "revoked", "key.pem"])},
{certfile, filename:join([PrivDir, "revoked", "cert.pem"])},
{cacertfile, filename:join([PrivDir, "revoked", "cacerts.pem"])}],
@@ -189,16 +213,17 @@ crl_verify_revoked(Config) when is_list(Config) ->
ssl_crl_cache:insert({file, filename:join([PrivDir, "erlangCA", "crl.pem"])}),
ssl_crl_cache:insert({file, filename:join([PrivDir, "otpCA", "crl.pem"])}),
- ClientOpts = case ?config(idp_crl, Config) of
+ ClientOpts = case proplists:get_value(idp_crl, Config) of
true ->
[{cacertfile, filename:join([PrivDir, "revoked", "cacerts.pem"])},
{crl_cache, {ssl_crl_cache, {internal, [{http, 5000}]}}},
{crl_check, Check},
{verify, verify_peer}];
false ->
- [{cacertfile, filename:join([PrivDir, "revoked", "cacerts.pem"])},
- {crl_check, Check},
- {verify, verify_peer}]
+ ?config(crl_cache_opts, Config) ++
+ [{cacertfile, filename:join([PrivDir, "revoked", "cacerts.pem"])},
+ {crl_check, Check},
+ {verify, verify_peer}]
end,
crl_verify_error(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts,
@@ -207,12 +232,12 @@ crl_verify_revoked(Config) when is_list(Config) ->
crl_verify_no_crl() ->
[{doc,"Verify a simple CRL chain when the CRL is missing"}].
crl_verify_no_crl(Config) when is_list(Config) ->
- PrivDir = ?config(cert_dir, Config),
- Check = ?config(crl_check, Config),
+ PrivDir = proplists:get_value(cert_dir, Config),
+ Check = proplists:get_value(crl_check, Config),
ServerOpts = [{keyfile, filename:join([PrivDir, "server", "key.pem"])},
{certfile, filename:join([PrivDir, "server", "cert.pem"])},
{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])}],
- ClientOpts = case ?config(idp_crl, Config) of
+ ClientOpts = case proplists:get_value(idp_crl, Config) of
true ->
[{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])},
{crl_check, Check},
@@ -251,6 +276,134 @@ crl_verify_no_crl(Config) when is_list(Config) ->
crl_verify_valid(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts)
end.
+crl_hash_dir_collision() ->
+ [{doc,"Verify ssl_crl_hash_dir behaviour with hash collisions"}].
+crl_hash_dir_collision(Config) when is_list(Config) ->
+ PrivDir = ?config(cert_dir, Config),
+ Check = ?config(crl_check, Config),
+
+ %% Create two CAs whose names hash to the same value
+ CA1 = "hash-collision-0000000000",
+ CA2 = "hash-collision-0258497583",
+ CertsConfig = make_certs:make_config([]),
+ make_certs:intermediateCA(PrivDir, CA1, "erlangCA", CertsConfig),
+ make_certs:intermediateCA(PrivDir, CA2, "erlangCA", CertsConfig),
+
+ make_certs:enduser(PrivDir, CA1, "collision-client-1", CertsConfig),
+ make_certs:enduser(PrivDir, CA2, "collision-client-2", CertsConfig),
+
+ [ServerOpts1, ServerOpts2] =
+ [
+ [{keyfile, filename:join([PrivDir, EndUser, "key.pem"])},
+ {certfile, filename:join([PrivDir, EndUser, "cert.pem"])},
+ {cacertfile, filename:join([PrivDir, EndUser, "cacerts.pem"])}]
+ || EndUser <- ["collision-client-1", "collision-client-2"]],
+
+ %% Add CRLs for our new CAs into the CRL hash directory.
+ %% Find the hashes with 'openssl crl -noout -hash -in crl.pem'.
+ CrlDir = filename:join(PrivDir, "crls"),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA1, "b68fc624"},
+ {CA2, "b68fc624"}],
+ replace),
+
+ ClientOpts = ?config(crl_cache_opts, Config) ++
+ [{cacertfile, filename:join([PrivDir, "erlangCA", "cacerts.pem"])},
+ {crl_check, Check},
+ {verify, verify_peer}],
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ %% Neither certificate revoked; both succeed.
+ crl_verify_valid(Hostname, ServerNode, ServerOpts1, ClientNode, ClientOpts),
+ crl_verify_valid(Hostname, ServerNode, ServerOpts2, ClientNode, ClientOpts),
+
+ make_certs:revoke(PrivDir, CA1, "collision-client-1", CertsConfig),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA1, "b68fc624"},
+ {CA2, "b68fc624"}],
+ replace),
+
+ %% First certificate revoked; first fails, second succeeds.
+ crl_verify_error(Hostname, ServerNode, ServerOpts1, ClientNode, ClientOpts,
+ "certificate revoked"),
+ crl_verify_valid(Hostname, ServerNode, ServerOpts2, ClientNode, ClientOpts),
+
+ make_certs:revoke(PrivDir, CA2, "collision-client-2", CertsConfig),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA1, "b68fc624"},
+ {CA2, "b68fc624"}],
+ replace),
+
+ %% Second certificate revoked; both fail.
+ crl_verify_error(Hostname, ServerNode, ServerOpts1, ClientNode, ClientOpts,
+ "certificate revoked"),
+ crl_verify_error(Hostname, ServerNode, ServerOpts2, ClientNode, ClientOpts,
+ "certificate revoked"),
+
+ ok.
+
+crl_hash_dir_expired() ->
+ [{doc,"Verify ssl_crl_hash_dir behaviour with expired CRLs"}].
+crl_hash_dir_expired(Config) when is_list(Config) ->
+ PrivDir = ?config(cert_dir, Config),
+ Check = ?config(crl_check, Config),
+
+ CA = "CRL-maybe-expired-CA",
+ %% Add "issuing distribution point", to ensure that verification
+ %% fails if there is no valid CRL.
+ CertsConfig = make_certs:make_config([{issuing_distribution_point, true}]),
+ make_certs:can_generate_expired_crls(CertsConfig)
+ orelse throw({skip, "cannot generate CRLs with expiry date in the past"}),
+ make_certs:intermediateCA(PrivDir, CA, "erlangCA", CertsConfig),
+ EndUser = "CRL-maybe-expired",
+ make_certs:enduser(PrivDir, CA, EndUser, CertsConfig),
+
+ ServerOpts = [{keyfile, filename:join([PrivDir, EndUser, "key.pem"])},
+ {certfile, filename:join([PrivDir, EndUser, "cert.pem"])},
+ {cacertfile, filename:join([PrivDir, EndUser, "cacerts.pem"])}],
+ ClientOpts = ?config(crl_cache_opts, Config) ++
+ [{cacertfile, filename:join([PrivDir, CA, "cacerts.pem"])},
+ {crl_check, Check},
+ {verify, verify_peer}],
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ %% First make a CRL that expired yesterday.
+ make_certs:gencrl(PrivDir, CA, CertsConfig, -24),
+ CrlDir = filename:join(PrivDir, "crls"),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA, "1627b4b0"}],
+ replace),
+
+ %% Since the CRL has expired, it's treated as missing, and the
+ %% outcome depends on the crl_check setting.
+ case Check of
+ true ->
+ %% The error "revocation status undetermined" gets turned
+ %% into "bad certificate".
+ crl_verify_error(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts,
+ "bad certificate");
+ peer ->
+ crl_verify_error(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts,
+ "bad certificate");
+ best_effort ->
+ %% In "best effort" mode, we consider the certificate not
+ %% to be revoked if we can't find the appropriate CRL.
+ crl_verify_valid(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts)
+ end,
+
+ %% Now make a CRL that expires tomorrow.
+ make_certs:gencrl(PrivDir, CA, CertsConfig, 24),
+ CrlDir = filename:join(PrivDir, "crls"),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA, "1627b4b0"}],
+ add),
+
+ %% With a valid CRL, verification should always pass.
+ crl_verify_valid(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts),
+
+ ok.
+
crl_verify_valid(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts) ->
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -297,7 +450,7 @@ is_idp(_) ->
init_certs(_,v1_crl, Config) ->
{[{v2_crls, false}], Config};
init_certs(_, idp_crl, Config) ->
- Port = ?config(httpd_port, Config),
+ Port = proplists:get_value(httpd_port, Config),
{[{crl_port,Port},
{issuing_distribution_point, true}], Config
};
@@ -311,3 +464,31 @@ make_dir_path(PathComponents) ->
rename_crl(Filename) ->
file:rename(Filename, Filename ++ ".notfound").
+
+populate_crl_hash_dir(CertDir, CrlDir, CAsHashes, AddOrReplace) ->
+ ok = filelib:ensure_dir(filename:join(CrlDir, "crls")),
+ case AddOrReplace of
+ replace ->
+ %% Delete existing files, so we can override them.
+ [ok = file:delete(FileToDelete) ||
+ {_CA, Hash} <- CAsHashes,
+ FileToDelete <- filelib:wildcard(
+ filename:join(CrlDir, Hash ++ ".r*"))];
+ add ->
+ ok
+ end,
+ %% Create new files, incrementing suffix if needed to find unique names.
+ [{ok, _} =
+ file:copy(filename:join([CertDir, CA, "crl.pem"]),
+ find_free_name(CrlDir, Hash, 0))
+ || {CA, Hash} <- CAsHashes],
+ ok.
+
+find_free_name(CrlDir, Hash, N) ->
+ Name = filename:join(CrlDir, Hash ++ ".r" ++ integer_to_list(N)),
+ case filelib:is_file(Name) of
+ true ->
+ find_free_name(CrlDir, Hash, N + 1);
+ false ->
+ Name
+ end.
diff --git a/lib/ssl/test/ssl_dist_SUITE.erl b/lib/ssl/test/ssl_dist_SUITE.erl
index 00f9ee8e3c..8740e8c8f0 100644
--- a/lib/ssl/test/ssl_dist_SUITE.erl
+++ b/lib/ssl/test/ssl_dist_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
-module(ssl_dist_SUITE).
-include_lib("common_test/include/ct.hrl").
+-include_lib("public_key/include/public_key.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -41,7 +42,9 @@
%%--------------------------------------------------------------------
all() ->
[basic, payload, plain_options, plain_verify_options, nodelay_option,
- listen_port_options, listen_options, connect_options, use_interface].
+ listen_port_options, listen_options, connect_options, use_interface,
+ verify_fun_fail, verify_fun_pass, crl_check_pass, crl_check_fail,
+ crl_check_best_effort, crl_cache_check_pass, crl_cache_check_fail].
groups() ->
[].
@@ -106,11 +109,11 @@ common_end(_, _Config) ->
basic() ->
[{doc,"Test that two nodes can connect via ssl distribution"}].
basic(Config) when is_list(Config) ->
- NH1 = start_ssl_node(Config),
+ gen_dist_test(basic_test, Config).
+
+basic_test(NH1, NH2, _) ->
Node1 = NH1#node_handle.nodename,
- NH2 = start_ssl_node(Config),
Node2 = NH2#node_handle.nodename,
-
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
[Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
@@ -158,18 +161,16 @@ basic(Config) when is_list(Config) ->
ok
end
end)
- end,
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
+ end.
%%--------------------------------------------------------------------
payload() ->
[{doc,"Test that send a lot of data between the ssl distributed noes"}].
payload(Config) when is_list(Config) ->
- NH1 = start_ssl_node(Config),
+ gen_dist_test(payload_test, Config).
+
+payload_test(NH1, NH2, _) ->
Node1 = NH1#node_handle.nodename,
- NH2 = start_ssl_node(Config),
Node2 = NH2#node_handle.nodename,
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
@@ -194,17 +195,15 @@ payload(Config) when is_list(Config) ->
ok = apply_on_ssl_node(
NH2,
fun () ->
- Msg = crypto:rand_bytes(100000),
+ Msg = crypto:strong_rand_bytes(100000),
SslPid ! {self(), Msg},
receive
{SslPid, Msg} ->
ok
end
end)
- end,
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
+ end.
+
%%--------------------------------------------------------------------
plain_options() ->
[{doc,"Test specifying additional options"}].
@@ -215,20 +214,17 @@ plain_options(Config) when is_list(Config) ->
"client_verify verify_none server_verify verify_none "
"server_depth 1 client_depth 1 "
"server_hibernate_after 500 client_hibernate_after 500",
+ gen_dist_test(plain_options_test, [{additional_dist_opts, DistOpts} | Config]).
- NH1 = start_ssl_node([{additional_dist_opts, DistOpts} | Config]),
+plain_options_test(NH1, NH2, _) ->
Node1 = NH1#node_handle.nodename,
- NH2 = start_ssl_node([{additional_dist_opts, DistOpts} | Config]),
Node2 = NH2#node_handle.nodename,
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
[Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
- [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
%%--------------------------------------------------------------------
plain_verify_options() ->
[{doc,"Test specifying additional options"}].
@@ -237,20 +233,18 @@ plain_verify_options(Config) when is_list(Config) ->
"client_secure_renegotiate true "
"server_reuse_sessions true client_reuse_sessions true "
"server_hibernate_after 500 client_hibernate_after 500",
+ gen_dist_test(plain_verify_options_test, [{additional_dist_opts, DistOpts} | Config]).
- NH1 = start_ssl_node([{additional_dist_opts, DistOpts} | Config]),
+plain_verify_options_test(NH1, NH2, _) ->
Node1 = NH1#node_handle.nodename,
- NH2 = start_ssl_node([{additional_dist_opts, DistOpts} | Config]),
Node2 = NH2#node_handle.nodename,
-
+
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
-
+
[Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
- [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
%%--------------------------------------------------------------------
nodelay_option() ->
[{doc,"Test specifying dist_nodelay option"}].
@@ -262,6 +256,7 @@ nodelay_option(Config) ->
after
application:unset_env(kernel, dist_nodelay)
end.
+%%--------------------------------------------------------------------
listen_port_options() ->
[{doc, "Test specifying listening ports"}].
@@ -282,32 +277,39 @@ listen_port_options(Config) when is_list(Config) ->
#node_handle{} ->
%% If the node was able to start, it didn't take the port
%% option into account.
+ stop_ssl_node(NH1),
exit(unexpected_success)
catch
exit:{accept_failed, timeout} ->
%% The node failed to start, as expected.
ok
end,
-
+
%% Try again, now specifying a high max port.
PortOpt2 = "-kernel inet_dist_listen_min " ++ integer_to_list(Port1) ++
- " inet_dist_listen_max 65535",
+ " inet_dist_listen_max 65535",
NH2 = start_ssl_node([{additional_dist_opts, PortOpt2} | Config]),
- Node2 = NH2#node_handle.nodename,
- Name2 = lists:takewhile(fun(C) -> C =/= $@ end, atom_to_list(Node2)),
- {ok, NodesPorts2} = apply_on_ssl_node(NH2, fun net_adm:names/0),
- {Name2, Port2} = lists:keyfind(Name2, 1, NodesPorts2),
-
- %% The new port should be higher:
- if Port2 > Port1 ->
- ok;
- true ->
- error({port, Port2, not_higher_than, Port1})
+
+ try
+ Node2 = NH2#node_handle.nodename,
+ Name2 = lists:takewhile(fun(C) -> C =/= $@ end, atom_to_list(Node2)),
+ {ok, NodesPorts2} = apply_on_ssl_node(NH2, fun net_adm:names/0),
+ {Name2, Port2} = lists:keyfind(Name2, 1, NodesPorts2),
+
+ %% The new port should be higher:
+ if Port2 > Port1 ->
+ ok;
+ true ->
+ error({port, Port2, not_higher_than, Port1})
+ end
+ catch
+ _:Reason ->
+ stop_ssl_node(NH2),
+ ct:fail(Reason)
end,
-
- stop_ssl_node(NH1),
stop_ssl_node(NH2),
success(Config).
+
%%--------------------------------------------------------------------
listen_options() ->
[{doc, "Test inet_dist_listen_options"}].
@@ -326,28 +328,25 @@ do_listen_options(Prio, Config) ->
end,
Options = "-kernel inet_dist_listen_options " ++ PriorityString,
-
- NH1 = start_ssl_node([{additional_dist_opts, Options} | Config]),
- NH2 = start_ssl_node([{additional_dist_opts, Options} | Config]),
- Node2 = NH2#node_handle.nodename,
-
+ gen_dist_test(listen_options_test, [{prio, Prio}, {additional_dist_opts, Options} | Config]).
+
+listen_options_test(NH1, NH2, Config) ->
+ Prio = proplists:get_value(prio, Config),
+ Node2 = NH2#node_handle.nodename,
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
PrioritiesNode1 =
apply_on_ssl_node(NH1, fun get_socket_priorities/0),
PrioritiesNode2 =
apply_on_ssl_node(NH2, fun get_socket_priorities/0),
-
+
Elevated1 = [P || P <- PrioritiesNode1, P =:= Prio],
- ?t:format("Elevated1: ~p~n", [Elevated1]),
+ ct:pal("Elevated1: ~p~n", [Elevated1]),
Elevated2 = [P || P <- PrioritiesNode2, P =:= Prio],
- ?t:format("Elevated2: ~p~n", [Elevated2]),
+ ct:pal("Elevated2: ~p~n", [Elevated2]),
[_|_] = Elevated1,
- [_|_] = Elevated2,
+ [_|_] = Elevated2.
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
%%--------------------------------------------------------------------
connect_options() ->
[{doc, "Test inet_dist_connect_options"}].
@@ -366,9 +365,11 @@ do_connect_options(Prio, Config) ->
end,
Options = "-kernel inet_dist_connect_options " ++ PriorityString,
+ gen_dist_test(connect_options_test,
+ [{prio, Prio}, {additional_dist_opts, Options} | Config]).
- NH1 = start_ssl_node([{additional_dist_opts, Options} | Config]),
- NH2 = start_ssl_node([{additional_dist_opts, Options} | Config]),
+connect_options_test(NH1, NH2, Config) ->
+ Prio = proplists:get_value(prio, Config),
Node2 = NH2#node_handle.nodename,
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
@@ -379,17 +380,14 @@ do_connect_options(Prio, Config) ->
apply_on_ssl_node(NH2, fun get_socket_priorities/0),
Elevated1 = [P || P <- PrioritiesNode1, P =:= Prio],
- ?t:format("Elevated1: ~p~n", [Elevated1]),
+ ct:pal("Elevated1: ~p~n", [Elevated1]),
Elevated2 = [P || P <- PrioritiesNode2, P =:= Prio],
- ?t:format("Elevated2: ~p~n", [Elevated2]),
+ ct:pal("Elevated2: ~p~n", [Elevated2]),
%% Node 1 will have a socket with elevated priority.
[_|_] = Elevated1,
%% Node 2 will not, since it only applies to outbound connections.
- [] = Elevated2,
+ [] = Elevated2.
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
%%--------------------------------------------------------------------
use_interface() ->
[{doc, "Test inet_dist_use_interface"}].
@@ -400,28 +398,220 @@ use_interface(Config) when is_list(Config) ->
%% Start a node, and get the port number it's listening on.
NH1 = start_ssl_node([{additional_dist_opts, Options} | Config]),
- Node1 = NH1#node_handle.nodename,
- Name = lists:takewhile(fun(C) -> C =/= $@ end, atom_to_list(Node1)),
- {ok, NodesPorts} = apply_on_ssl_node(NH1, fun net_adm:names/0),
- {Name, Port} = lists:keyfind(Name, 1, NodesPorts),
-
- %% Now find the socket listening on that port, and check its sockname.
- Sockets = apply_on_ssl_node(
- NH1,
- fun() ->
- [inet:sockname(P) ||
- P <- erlang:ports(),
- {ok, Port} =:= (catch inet:port(P))]
- end),
- %% And check that it's actually listening on localhost.
- [{ok,{{127,0,0,1},Port}}] = Sockets,
-
+
+ try
+ Node1 = NH1#node_handle.nodename,
+ Name = lists:takewhile(fun(C) -> C =/= $@ end, atom_to_list(Node1)),
+ {ok, NodesPorts} = apply_on_ssl_node(NH1, fun net_adm:names/0),
+ {Name, Port} = lists:keyfind(Name, 1, NodesPorts),
+
+ %% Now find the socket listening on that port, and check its sockname.
+ Sockets = apply_on_ssl_node(
+ NH1,
+ fun() ->
+ [inet:sockname(P) ||
+ P <- inet_ports(),
+ {ok, Port} =:= (catch inet:port(P))]
+ end),
+ %% And check that it's actually listening on localhost.
+ [{ok,{{127,0,0,1},Port}}] = Sockets
+ catch
+ _:Reason ->
+ stop_ssl_node(NH1),
+ ct:fail(Reason)
+ end,
stop_ssl_node(NH1),
success(Config).
+%%--------------------------------------------------------------------
+verify_fun_fail() ->
+ [{doc,"Test specifying verify_fun with a function that always fails"}].
+verify_fun_fail(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt "
+ "server_verify verify_peer server_verify_fun "
+ "\"{ssl_dist_SUITE,verify_fail_always,{}}\" "
+ "client_verify verify_peer client_verify_fun "
+ "\"{ssl_dist_SUITE,verify_fail_always,{}}\" ",
+ gen_dist_test(verify_fun_fail_test, [{additional_dist_opts, DistOpts} | Config]).
+
+verify_fun_fail_test(NH1, NH2, _) ->
+ Node2 = NH2#node_handle.nodename,
+
+ pang = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [] = apply_on_ssl_node(NH2, fun () -> nodes() end),
+
+ %% Check that the function ran on the client node.
+ [{verify_fail_always_ran, true}] =
+ apply_on_ssl_node(NH1, fun () -> ets:tab2list(verify_fun_ran) end),
+ %% On the server node, it wouldn't run, because the server didn't
+ %% request a certificate from the client.
+ undefined =
+ apply_on_ssl_node(NH2, fun () -> ets:info(verify_fun_ran) end).
+
+
%%--------------------------------------------------------------------
+verify_fun_pass() ->
+ [{doc,"Test specifying verify_fun with a function that always succeeds"}].
+verify_fun_pass(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt "
+ "server_verify verify_peer server_verify_fun "
+ "\"{ssl_dist_SUITE,verify_pass_always,{}}\" "
+ "server_fail_if_no_peer_cert true "
+ "client_verify verify_peer client_verify_fun "
+ "\"{ssl_dist_SUITE,verify_pass_always,{}}\" ",
+ gen_dist_test(verify_fun_pass_test, [{additional_dist_opts, DistOpts} | Config]).
+
+verify_fun_pass_test(NH1, NH2, _) ->
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end),
+
+ %% Check that the function ran on the client node.
+ [{verify_pass_always_ran, true}] =
+ apply_on_ssl_node(NH1, fun () -> ets:tab2list(verify_fun_ran) end),
+ %% Check that it ran on the server node as well. The server
+ %% requested and verified the client's certificate because we
+ %% passed fail_if_no_peer_cert.
+ [{verify_pass_always_ran, true}] =
+ apply_on_ssl_node(NH2, fun () -> ets:tab2list(verify_fun_ran) end).
+
+%%--------------------------------------------------------------------
+crl_check_pass() ->
+ [{doc,"Test crl_check with non-revoked certificate"}].
+crl_check_pass(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt client_crl_check true",
+ NewConfig =
+ [{many_verify_opts, true}, {additional_dist_opts, DistOpts}] ++ Config,
+ gen_dist_test(crl_check_pass_test, NewConfig).
+
+crl_check_pass_test(NH1, NH2, Config) ->
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ PrivDir = ?config(priv_dir, Config),
+ cache_crls_on_ssl_nodes(PrivDir, ["erlangCA", "otpCA"], [NH1, NH2]),
+
+ %% The server's certificate is not revoked, so connection succeeds.
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
+%%--------------------------------------------------------------------
+crl_check_fail() ->
+ [{doc,"Test crl_check with revoked certificate"}].
+crl_check_fail(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt client_crl_check true",
+ NewConfig =
+ [{many_verify_opts, true},
+ %% The server uses a revoked certificate.
+ {server_cert_dir, "revoked"},
+ {additional_dist_opts, DistOpts}] ++ Config,
+ gen_dist_test(crl_check_fail_test, NewConfig).
+
+crl_check_fail_test(NH1, NH2, Config) ->
+ Node2 = NH2#node_handle.nodename,
+
+ PrivDir = ?config(priv_dir, Config),
+ cache_crls_on_ssl_nodes(PrivDir, ["erlangCA", "otpCA"], [NH1, NH2]),
+
+ %% The server's certificate is revoked, so connection fails.
+ pang = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
+%%--------------------------------------------------------------------
+crl_check_best_effort() ->
+ [{doc,"Test specifying crl_check as best_effort"}].
+crl_check_best_effort(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt "
+ "server_verify verify_peer server_crl_check best_effort",
+ NewConfig =
+ [{many_verify_opts, true}, {additional_dist_opts, DistOpts}] ++ Config,
+ gen_dist_test(crl_check_best_effort_test, NewConfig).
+
+crl_check_best_effort_test(NH1, NH2, _Config) ->
+ %% We don't have the correct CRL at hand, but since crl_check is
+ %% best_effort, we accept it anyway.
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
+%%--------------------------------------------------------------------
+crl_cache_check_pass() ->
+ [{doc,"Test specifying crl_check with custom crl_cache module"}].
+crl_cache_check_pass(Config) when is_list(Config) ->
+ PrivDir = ?config(priv_dir, Config),
+ NodeDir = filename:join([PrivDir, "Certs"]),
+ DistOpts = "-ssl_dist_opt "
+ "client_crl_check true "
+ "client_crl_cache "
+ "\"{ssl_dist_SUITE,{\\\"" ++ NodeDir ++ "\\\",[]}}\"",
+ NewConfig =
+ [{many_verify_opts, true}, {additional_dist_opts, DistOpts}] ++ Config,
+ gen_dist_test(crl_cache_check_pass_test, NewConfig).
+
+crl_cache_check_pass_test(NH1, NH2, _) ->
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
+%%--------------------------------------------------------------------
+crl_cache_check_fail() ->
+ [{doc,"Test custom crl_cache module with revoked certificate"}].
+crl_cache_check_fail(Config) when is_list(Config) ->
+ PrivDir = ?config(priv_dir, Config),
+ NodeDir = filename:join([PrivDir, "Certs"]),
+ DistOpts = "-ssl_dist_opt "
+ "client_crl_check true "
+ "client_crl_cache "
+ "\"{ssl_dist_SUITE,{\\\"" ++ NodeDir ++ "\\\",[]}}\"",
+ NewConfig =
+ [{many_verify_opts, true},
+ %% The server uses a revoked certificate.
+ {server_cert_dir, "revoked"},
+ {additional_dist_opts, DistOpts}] ++ Config,
+
+ gen_dist_test(crl_cache_check_fail_test, NewConfig).
+
+crl_cache_check_fail_test(NH1, NH2, _) ->
+ Node2 = NH2#node_handle.nodename,
+ pang = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+%%--------------------------------------------------------------------
%%% Internal functions -----------------------------------------------
%%--------------------------------------------------------------------
+gen_dist_test(Test, Config) ->
+ NH1 = start_ssl_node(Config),
+ NH2 = start_ssl_node(Config),
+ try
+ ?MODULE:Test(NH1, NH2, Config)
+ catch
+ _:Reason ->
+ stop_ssl_node(NH1),
+ stop_ssl_node(NH2),
+ ct:fail(Reason)
+ end,
+ stop_ssl_node(NH1),
+ stop_ssl_node(NH2),
+ success(Config).
%% ssl_node side api
%%
@@ -453,9 +643,11 @@ try_setting_priority(TestFun, Config) ->
get_socket_priorities() ->
[Priority ||
{ok,[{priority,Priority}]} <-
- [inet:getopts(Port, [priority]) ||
- Port <- erlang:ports(),
- element(2, erlang:port_info(Port, name)) =:= "tcp_inet"]].
+ [inet:getopts(Port, [priority]) || Port <- inet_ports()]].
+
+inet_ports() ->
+ [Port || Port <- erlang:ports(),
+ element(2, erlang:port_info(Port, name)) =:= "tcp_inet"].
%%
%% test_server side api
@@ -488,13 +680,15 @@ stop_ssl_node(#node_handle{connection_handler = Handler,
receive
{'DOWN', Mon, process, Handler, Reason} ->
case Reason of
- normal -> ok;
- _ -> exit(Reason)
+ normal ->
+ ok;
+ _ ->
+ ct:pal("Down ~p ~n", [Reason])
end
end;
Error ->
erlang:demonitor(Mon, [flush]),
- exit(Error)
+ ct:pal("Warning ~p ~n", [Error])
end.
start_ssl_node(Config) ->
@@ -502,7 +696,7 @@ start_ssl_node(Config) ->
start_ssl_node(Config, XArgs) ->
Name = mk_node_name(Config),
- SSL = ?config(ssl_opts, Config),
+ SSL = proplists:get_value(ssl_opts, Config),
SSLDistOpts = setup_dist_opts(Config),
start_ssl_node_raw(Name, SSL ++ " " ++ SSLDistOpts ++ XArgs).
@@ -528,6 +722,19 @@ start_ssl_node_raw(Name, Args) ->
exit({failed_to_start_node, Name, Error})
end.
+cache_crls_on_ssl_nodes(PrivDir, CANames, NHs) ->
+ [begin
+ File = filename:join([PrivDir, "Certs", CAName, "crl.pem"]),
+ {ok, PemBin} = file:read_file(File),
+ PemEntries = public_key:pem_decode(PemBin),
+ CRLs = [ CRL || {'CertificateList', CRL, not_encrypted}
+ <- PemEntries],
+ ok = apply_on_ssl_node(NH, ssl_manager, insert_crls,
+ ["no_distribution_point", CRLs, dist])
+ end
+ || NH <- NHs, CAName <- CANames],
+ ok.
+
%%
%% command line creation
%%
@@ -539,7 +746,7 @@ host_name() ->
mk_node_name(Config) ->
N = erlang:unique_integer([positive]),
- Case = ?config(testcase, Config),
+ Case = proplists:get_value(testcase, Config),
atom_to_list(?MODULE)
++ "_"
++ atom_to_list(Case)
@@ -563,11 +770,13 @@ mk_node_cmdline(ListenPort, Name, Args) ->
++ NameSw ++ " " ++ Name ++ " "
++ "-pa " ++ Pa ++ " "
++ "-run application start crypto -run application start public_key "
+ ++ "-eval 'net_kernel:verbose(1)' "
++ "-run " ++ atom_to_list(?MODULE) ++ " cnct2tstsrvr "
++ host_name() ++ " "
++ integer_to_list(ListenPort) ++ " "
++ Args ++ " "
++ "-env ERL_CRASH_DUMP " ++ Pwd ++ "/erl_crash_dump." ++ Name ++ " "
+ ++ "-kernel error_logger \"{file,\\\"" ++ Pwd ++ "/error_log." ++ Name ++ "\\\"}\" "
++ "-setcookie " ++ atom_to_list(erlang:get_cookie()).
%%
@@ -792,7 +1001,7 @@ do_append_files([F|Fs], RF) ->
do_append_files(Fs, RF).
setup_certs(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
NodeDir = filename:join([PrivDir, "Certs"]),
RGenDir = filename:join([NodeDir, "rand_gen"]),
ok = file:make_dir(NodeDir),
@@ -811,12 +1020,12 @@ setup_certs(Config) ->
append_files([CK, CC], CKC).
setup_dist_opts(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Dhfile = filename:join([DataDir, "dHParam.pem"]),
NodeDir = filename:join([PrivDir, "Certs"]),
- SDir = filename:join([NodeDir, "server"]),
- CDir = filename:join([NodeDir, "client"]),
+ SDir = filename:join([NodeDir, proplists:get_value(server_cert_dir, Config, "server")]),
+ CDir = filename:join([NodeDir, proplists:get_value(client_cert_dir, Config, "client")]),
SC = filename:join([SDir, "cert.pem"]),
SK = filename:join([SDir, "key.pem"]),
SKC = filename:join([SDir, "keycert.pem"]),
@@ -874,7 +1083,7 @@ add_ssl_opts_config(Config) ->
%% just point out ssl ebin with -pa.
%%
try
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
LibDir = code:lib_dir(),
Apps = application:which_applications(),
{value, {stdlib, _, STDL_VSN}} = lists:keysearch(stdlib, 1, Apps),
@@ -957,3 +1166,53 @@ vsn(App) ->
after
application:stop(ssl)
end.
+
+verify_fail_always(_Certificate, _Event, _State) ->
+ %% Create an ETS table, to record the fact that the verify function ran.
+ %% Spawn a new process, to avoid the ETS table disappearing.
+ Parent = self(),
+ spawn(
+ fun() ->
+ ets:new(verify_fun_ran, [public, named_table]),
+ ets:insert(verify_fun_ran, {verify_fail_always_ran, true}),
+ Parent ! go_ahead,
+ timer:sleep(infinity)
+ end),
+ receive go_ahead -> ok end,
+ {fail, bad_certificate}.
+
+verify_pass_always(_Certificate, _Event, State) ->
+ %% Create an ETS table, to record the fact that the verify function ran.
+ %% Spawn a new process, to avoid the ETS table disappearing.
+ Parent = self(),
+ spawn(
+ fun() ->
+ ets:new(verify_fun_ran, [public, named_table]),
+ ets:insert(verify_fun_ran, {verify_pass_always_ran, true}),
+ Parent ! go_ahead,
+ timer:sleep(infinity)
+ end),
+ receive go_ahead -> ok end,
+ {valid, State}.
+
+%% ssl_crl_cache_api callbacks
+lookup(_DistributionPoint, _DbHandle) ->
+ not_available.
+
+select({rdnSequence, NameParts}, {NodeDir, _}) ->
+ %% Extract the CN from the issuer name...
+ [CN] = [CN ||
+ [#'AttributeTypeAndValue'{
+ type = ?'id-at-commonName',
+ value = <<_, _, CN/binary>>}] <- NameParts],
+ %% ...and use that as the directory name to find the CRL.
+ error_logger:info_report([{found_cn, CN}]),
+ CRLFile = filename:join([NodeDir, CN, "crl.pem"]),
+ {ok, PemBin} = file:read_file(CRLFile),
+ PemEntries = public_key:pem_decode(PemBin),
+ CRLs = [ CRL || {'CertificateList', CRL, not_encrypted}
+ <- PemEntries],
+ CRLs.
+
+fresh_crl(_DistributionPoint, CRL) ->
+ CRL.
diff --git a/lib/ssl/test/ssl_handshake_SUITE.erl b/lib/ssl/test/ssl_handshake_SUITE.erl
index d050812208..a671e3e307 100644
--- a/lib/ssl/test/ssl_handshake_SUITE.erl
+++ b/lib/ssl/test/ssl_handshake_SUITE.erl
@@ -62,8 +62,8 @@ init_per_testcase(ignore_hassign_extension_pre_tls_1_2, Config0) ->
true ->
ssl:start(),
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config = ssl_test_lib:cert_options(Config0),
ct:timetrap({seconds, 5}),
Config;
@@ -99,7 +99,8 @@ decode_hello_handshake(_Config) ->
16#70, 16#64, 16#79, 16#2f, 16#32>>,
Version = {3, 0},
- {Records, _Buffer} = tls_handshake:get_tls_handshake(Version, HelloPacket, <<>>),
+ {Records, _Buffer} = tls_handshake:get_tls_handshake(Version, HelloPacket, <<>>,
+ #ssl_options{v2_hello_compatible = false}),
{Hello, _Data} = hd(Records),
#renegotiation_info{renegotiated_connection = <<0>>}
@@ -162,7 +163,7 @@ select_proper_tls_1_2_rsa_default_hashsign(_Config) ->
ignore_hassign_extension_pre_tls_1_2(Config) ->
- Opts = ?config(server_opts, Config),
+ Opts = proplists:get_value(server_opts, Config),
CertFile = proplists:get_value(certfile, Opts),
[{_, Cert, _}] = ssl_test_lib:pem_to_der(CertFile),
HashSigns = #hash_sign_algos{hash_sign_algos = [{sha512, rsa}, {sha, dsa}]},
diff --git a/lib/ssl/test/ssl_npn_handshake_SUITE.erl b/lib/ssl/test/ssl_npn_handshake_SUITE.erl
index 6b71fe6d28..c55fa73cfb 100644
--- a/lib/ssl/test/ssl_npn_handshake_SUITE.erl
+++ b/lib/ssl/test/ssl_npn_handshake_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -69,8 +69,8 @@ init_per_suite(Config) ->
try crypto:start() of
ok ->
ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config),
- ?config(priv_dir, Config)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config),
+ proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -86,8 +86,7 @@ init_per_group(GroupName, Config) ->
true ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
false ->
{skip, "Missing crypto support"}
end;
@@ -100,7 +99,7 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:log("Ciphers: ~p~n ", [ ssl:cipher_suites()]),
ct:timetrap({seconds, 10}),
Config.
@@ -192,10 +191,10 @@ client_negotiate_server_does_not_support(Config) when is_list(Config) ->
renegotiate_from_client_after_npn_handshake(Config) when is_list(Config) ->
Data = "hello world",
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = [{client_preferred_next_protocols,
{client, [<<"http/1.0">>], <<"http/1.1">>}}] ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts = [{next_protocols_advertised,
[<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]}] ++ ServerOpts0,
ExpectedProtocol = {ok, <<"http/1.0">>},
@@ -217,7 +216,7 @@ renegotiate_from_client_after_npn_handshake(Config) when is_list(Config) ->
%--------------------------------------------------------------------------------
npn_not_supported_client(Config) when is_list(Config) ->
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
PrefProtocols = {client_preferred_next_protocols,
{client, [<<"http/1.0">>], <<"http/1.1">>}},
ClientOpts = [PrefProtocols] ++ ClientOpts0,
@@ -232,7 +231,7 @@ npn_not_supported_client(Config) when is_list(Config) ->
%--------------------------------------------------------------------------------
npn_not_supported_server(Config) when is_list(Config)->
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
AdvProtocols = {next_protocols_advertised, [<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]},
ServerOpts = [AdvProtocols] ++ ServerOpts0,
@@ -240,10 +239,10 @@ npn_not_supported_server(Config) when is_list(Config)->
%--------------------------------------------------------------------------------
npn_handshake_session_reused(Config) when is_list(Config)->
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = [{client_preferred_next_protocols,
{client, [<<"http/1.0">>], <<"http/1.1">>}}] ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts =[{next_protocols_advertised,
[<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]}] ++ ServerOpts0,
@@ -294,9 +293,9 @@ npn_handshake_session_reused(Config) when is_list(Config)->
run_npn_handshake(Config, ClientExtraOpts, ServerExtraOpts, ExpectedProtocol) ->
Data = "hello world",
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = ClientExtraOpts ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts = ServerExtraOpts ++ ServerOpts0,
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
diff --git a/lib/ssl/test/ssl_npn_hello_SUITE.erl b/lib/ssl/test/ssl_npn_hello_SUITE.erl
index fa7187b6c0..00eb9fee4f 100644
--- a/lib/ssl/test/ssl_npn_hello_SUITE.erl
+++ b/lib/ssl/test/ssl_npn_hello_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,7 +42,7 @@ all() ->
create_server_hello_with_no_advertised_protocols_test].
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 5}),
Config.
@@ -53,35 +53,35 @@ end_per_testcase(_TestCase, Config) ->
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
-encode_and_decode_client_hello_test(_Config) ->
+encode_and_decode_client_hello_test(Config) ->
HandShakeData = create_client_handshake(undefined),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
{[{DecodedHandshakeMessage, _Raw}], _} =
- tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
+ tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>, #ssl_options{}),
NextProtocolNegotiation = (DecodedHandshakeMessage#client_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = undefined.
%%--------------------------------------------------------------------
-encode_and_decode_npn_client_hello_test(_Config) ->
+encode_and_decode_npn_client_hello_test(Config) ->
HandShakeData = create_client_handshake(#next_protocol_negotiation{extension_data = <<>>}),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
{[{DecodedHandshakeMessage, _Raw}], _} =
- tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
+ tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>, #ssl_options{}),
NextProtocolNegotiation = (DecodedHandshakeMessage#client_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = #next_protocol_negotiation{extension_data = <<>>}.
%%--------------------------------------------------------------------
-encode_and_decode_server_hello_test(_Config) ->
+encode_and_decode_server_hello_test(Config) ->
HandShakeData = create_server_handshake(undefined),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
{[{DecodedHandshakeMessage, _Raw}], _} =
- tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
+ tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>, #ssl_options{}),
NextProtocolNegotiation = (DecodedHandshakeMessage#server_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = undefined.
%%--------------------------------------------------------------------
-encode_and_decode_npn_server_hello_test(_Config) ->
+encode_and_decode_npn_server_hello_test(Config) ->
HandShakeData = create_server_handshake(#next_protocol_negotiation{extension_data = <<6, "spdy/2">>}),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
{[{DecodedHandshakeMessage, _Raw}], _} =
- tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
+ tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>, #ssl_options{}),
NextProtocolNegotiation = (DecodedHandshakeMessage#server_hello.extensions)#hello_extensions.next_protocol_negotiation,
ct:log("~p ~n", [NextProtocolNegotiation]),
NextProtocolNegotiation = #next_protocol_negotiation{extension_data = <<6, "spdy/2">>}.
diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl
index 08a66ec07a..e49d432c21 100644
--- a/lib/ssl/test/ssl_packet_SUITE.erl
+++ b/lib/ssl/test/ssl_packet_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -41,6 +41,10 @@
-define(MANY, 1000).
-define(SOME, 50).
+-define(BASE_TIMEOUT_SECONDS, 15).
+-define(SOME_SCALE, 20).
+-define(MANY_SCALE, 20).
+
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
@@ -137,8 +141,8 @@ init_per_suite(Config) ->
try crypto:start() of
ok ->
ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config),
- ?config(priv_dir, Config)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config),
+ proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -153,8 +157,7 @@ init_per_group(GroupName, Config) ->
true ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
false ->
{skip, "Missing crypto support"}
end;
@@ -168,7 +171,7 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_TestCase, Config) ->
- ct:timetrap({seconds, 15}),
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS}),
Config.
@@ -183,6 +186,7 @@ packet_raw_passive_many_small() ->
[{doc,"Test packet option {packet, raw} in passive mode."}].
packet_raw_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, raw}",
packet(Config, Data, send, passive_raw, ?MANY, raw, false).
@@ -192,6 +196,7 @@ packet_raw_passive_some_big() ->
[{doc,"Test packet option {packet, raw} in passive mode."}].
packet_raw_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, passive_raw, ?SOME, raw, false).
%%--------------------------------------------------------------------
@@ -199,6 +204,7 @@ packet_0_passive_many_small() ->
[{doc,"Test packet option {packet, 0} in passive mode."}].
packet_0_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 0}, equivalent to packet raw.",
packet(Config, Data, send, passive_raw, ?MANY, 0, false).
@@ -207,6 +213,7 @@ packet_0_passive_some_big() ->
[{doc,"Test packet option {packet, 0} in passive mode."}].
packet_0_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, passive_raw, ?SOME, 0, false).
@@ -215,6 +222,7 @@ packet_1_passive_many_small() ->
[{doc,"Test packet option {packet, 1} in passive mode."}].
packet_1_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 1}",
packet(Config, Data, send, passive_recv_packet, ?MANY, 1, false).
@@ -223,6 +231,7 @@ packet_1_passive_some_big() ->
[{doc,"Test packet option {packet, 1} in passive mode."}].
packet_1_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(255, "1")),
packet(Config, Data, send, passive_recv_packet, ?SOME, 1, false).
@@ -231,6 +240,7 @@ packet_2_passive_many_small() ->
[{doc,"Test packet option {packet, 2} in passive mode"}].
packet_2_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 2}",
packet(Config, Data, send, passive_recv_packet, ?MANY, 2, false).
@@ -239,6 +249,7 @@ packet_2_passive_some_big() ->
[{doc,"Test packet option {packet, 2} in passive mode"}].
packet_2_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, passive_recv_packet, ?SOME, 2, false).
@@ -247,6 +258,7 @@ packet_4_passive_many_small() ->
[{doc,"Test packet option {packet, 4} in passive mode"}].
packet_4_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 4}",
packet(Config, Data, send, passive_recv_packet, ?MANY, 4, false).
@@ -255,6 +267,7 @@ packet_4_passive_some_big() ->
[{doc,"Test packet option {packet, 4} in passive mode"}].
packet_4_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, passive_recv_packet, ?SOME, 4, false).
@@ -271,6 +284,7 @@ packet_raw_active_once_some_big() ->
[{doc,"Test packet option {packet, raw} in active once mode."}].
packet_raw_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send_raw, active_once_raw, ?SOME, raw, once).
@@ -279,6 +293,7 @@ packet_0_active_once_many_small() ->
[{doc,"Test packet option {packet, 0} in active once mode."}].
packet_0_active_once_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 0}",
packet(Config, Data, send_raw, active_once_raw, ?MANY, 0, once).
@@ -287,6 +302,7 @@ packet_0_active_once_some_big() ->
[{doc,"Test packet option {packet, 0} in active once mode."}].
packet_0_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send_raw, active_once_raw, ?SOME, 0, once).
@@ -303,6 +319,7 @@ packet_1_active_once_some_big() ->
[{doc,"Test packet option {packet, 1} in active once mode."}].
packet_1_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(255, "1")),
packet(Config, Data, send, active_once_packet, ?SOME, 1, once).
@@ -312,6 +329,7 @@ packet_2_active_once_many_small() ->
[{doc,"Test packet option {packet, 2} in active once mode"}].
packet_2_active_once_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 2}",
packet(Config, Data, send, active_once_packet, ?MANY, 2, once).
@@ -320,6 +338,7 @@ packet_2_active_once_some_big() ->
[{doc,"Test packet option {packet, 2} in active once mode"}].
packet_2_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, active_once_raw, ?SOME, 2, once).
@@ -329,6 +348,7 @@ packet_4_active_once_many_small() ->
packet_4_active_once_many_small(Config) when is_list(Config) ->
Data = "Packet option is {packet, 4}",
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
packet(Config, Data, send, active_once_packet, ?MANY, 4, once).
%%--------------------------------------------------------------------
@@ -336,6 +356,7 @@ packet_4_active_once_some_big() ->
[{doc,"Test packet option {packet, 4} in active once mode"}].
packet_4_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, active_once_packet, ?SOME, 4, once).
@@ -344,6 +365,7 @@ packet_raw_active_many_small() ->
[{doc,"Test packet option {packet, raw} in active mode."}].
packet_raw_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, raw}",
packet(Config, Data, send_raw, active_raw, ?MANY, raw, true).
@@ -352,6 +374,7 @@ packet_raw_active_some_big() ->
[{doc,"Test packet option {packet, raw} in active mode."}].
packet_raw_active_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send_raw, active_raw, ?SOME, raw, true).
@@ -360,6 +383,7 @@ packet_0_active_many_small() ->
[{doc,"Test packet option {packet, 0} in active mode."}].
packet_0_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 0}",
packet(Config, Data, send_raw, active_raw, ?MANY, 0, true).
@@ -376,6 +400,7 @@ packet_1_active_many_small() ->
[{doc,"Test packet option {packet, 1} in active mode."}].
packet_1_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 1}",
packet(Config, Data, send, active_packet, ?MANY, 1, true).
@@ -384,6 +409,7 @@ packet_1_active_some_big() ->
[{doc,"Test packet option {packet, 1} in active mode."}].
packet_1_active_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(255, "1")),
packet(Config, Data, send, active_packet, ?SOME, 1, true).
@@ -392,6 +418,7 @@ packet_2_active_many_small() ->
[{doc,"Test packet option {packet, 2} in active mode"}].
packet_2_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 2}",
packet(Config, Data, send, active_packet, ?MANY, 2, true).
@@ -408,6 +435,7 @@ packet_4_active_many_small() ->
[{doc,"Test packet option {packet, 4} in active mode"}].
packet_4_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 4}",
packet(Config, Data, send, active_packet, ?MANY, 4, true).
@@ -416,6 +444,7 @@ packet_4_active_some_big() ->
[{doc,"Test packet option {packet, 4} in active mode"}].
packet_4_active_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, active_packet, ?SOME, 4, true).
@@ -424,8 +453,8 @@ packet_send_to_large() ->
[{doc,"Test setting the packet option {packet, 2} on the send side"}].
packet_send_to_large(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = lists:append(lists:duplicate(30, "1234567890")),
@@ -452,8 +481,8 @@ packet_wait_active() ->
[{doc,"Test waiting when complete packages have not arrived"}].
packet_wait_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -485,8 +514,8 @@ packet_wait_passive() ->
[{doc,"Test waiting when complete packages have not arrived"}].
packet_wait_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -515,8 +544,8 @@ packet_baddata_active() ->
[{doc,"Test that if a bad packet arrives error msg is sent and socket is closed"}].
packet_baddata_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -548,8 +577,8 @@ packet_baddata_passive() ->
[{doc,"Test that if a bad packet arrives error msg is sent and socket is closed"}].
packet_baddata_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -583,8 +612,8 @@ packet_size_active() ->
packet_size arrives error msg is sent and socket is closed"}].
packet_size_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -617,8 +646,8 @@ packet_size_passive() ->
than packet_size arrives error msg is sent and socket is closed"}].
packet_size_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -649,8 +678,8 @@ packet_size_passive(Config) when is_list(Config) ->
packet_cdr_decode() ->
[{doc,"Test setting the packet option {packet, cdr}, {mode, binary}"}].
packet_cdr_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% A valid cdr packet
@@ -682,8 +711,8 @@ packet_cdr_decode(Config) when is_list(Config) ->
packet_cdr_decode_list() ->
[{doc,"Test setting the packet option {packet, cdr} {mode, list}"}].
packet_cdr_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% A valid cdr packet
@@ -717,8 +746,8 @@ packet_http_decode() ->
"(Body will be binary http strings are lists)"}].
packet_http_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Request = "GET / HTTP/1.1\r\n"
@@ -799,8 +828,8 @@ packet_http_decode_list() ->
[{doc, "Test setting the packet option {packet, http}, {mode, list}"
"(Body will be list too)"}].
packet_http_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Request = "GET / HTTP/1.1\r\n"
@@ -856,8 +885,8 @@ client_http_decode_list(Socket, HttpRequest) ->
packet_http_bin_decode_multi() ->
[{doc,"Test setting the packet option {packet, http_bin} with multiple requests"}].
packet_http_bin_decode_multi(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Request = <<"GET / HTTP/1.1\r\n"
@@ -946,8 +975,8 @@ packet_http_error_passive() ->
" with a incorrect http header."}].
packet_http_error_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Request = "GET / HTTP/1.1\r\n"
@@ -1006,8 +1035,8 @@ packet_httph_active() ->
[{doc,"Test setting the packet option {packet, httph}"}].
packet_httph_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1061,8 +1090,8 @@ client_http_decode_trailer_active(Socket) ->
packet_httph_bin_active() ->
[{doc,"Test setting the packet option {packet, httph_bin}"}].
packet_httph_bin_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1111,8 +1140,8 @@ packet_httph_active_once() ->
[{doc,"Test setting the packet option {packet, httph}"}].
packet_httph_active_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1164,8 +1193,8 @@ packet_httph_bin_active_once() ->
[{doc,"Test setting the packet option {packet, httph_bin}"}].
packet_httph_bin_active_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1218,8 +1247,8 @@ packet_httph_passive() ->
[{doc,"Test setting the packet option {packet, httph}"}].
packet_httph_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1258,8 +1287,8 @@ packet_httph_bin_passive() ->
[{doc,"Test setting the packet option {packet, httph_bin}"}].
packet_httph_bin_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1298,8 +1327,8 @@ packet_line_decode() ->
[{doc,"Test setting the packet option {packet, line}, {mode, binary}"}].
packet_line_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:flatten(io_lib:format("Line ends here.~n"
@@ -1334,8 +1363,8 @@ packet_line_decode_list() ->
[{doc,"Test setting the packet option {packet, line}, {mode, list}"}].
packet_line_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = lists:flatten(io_lib:format("Line ends here.~n"
@@ -1372,8 +1401,8 @@ packet_asn1_decode() ->
[{doc,"Test setting the packet option {packet, asn1}"}].
packet_asn1_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
File = proplists:get_value(certfile, ServerOpts),
@@ -1407,8 +1436,8 @@ packet_asn1_decode_list() ->
[{doc,"Test setting the packet option {packet, asn1}"}].
packet_asn1_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
File = proplists:get_value(certfile, ServerOpts),
@@ -1444,8 +1473,8 @@ packet_tpkt_decode() ->
[{doc,"Test setting the packet option {packet, tpkt}"}].
packet_tpkt_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(add_tpkt_header("TPKT data")),
@@ -1476,8 +1505,8 @@ packet_tpkt_decode_list() ->
[{doc,"Test setting the packet option {packet, tpkt}"}].
packet_tpkt_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = binary_to_list(list_to_binary(add_tpkt_header("TPKT data"))),
@@ -1509,8 +1538,8 @@ packet_tpkt_decode_list(Config) when is_list(Config) ->
%% [{doc,"Test setting the packet option {packet, fcgi}"}].
%% packet_fcgi_decode(Config) when is_list(Config) ->
-%% ClientOpts = ?config(client_opts, Config),
-%% ServerOpts = ?config(server_opts, Config),
+%% ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+%% ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
%% {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% Data = ...
@@ -1542,8 +1571,8 @@ packet_tpkt_decode_list(Config) when is_list(Config) ->
packet_sunrm_decode() ->
[{doc,"Test setting the packet option {packet, sunrm}"}].
packet_sunrm_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:32, "Hello world">>,
@@ -1574,8 +1603,8 @@ packet_sunrm_decode_list() ->
[{doc,"Test setting the packet option {packet, sunrm}"}].
packet_sunrm_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = binary_to_list(list_to_binary([<<11:32>>, "Hello world"])),
@@ -1606,8 +1635,8 @@ header_decode_one_byte_active() ->
[{doc,"Test setting the packet option {header, 1}"}].
header_decode_one_byte_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:8, "Hello world">>,
@@ -1639,8 +1668,8 @@ header_decode_two_bytes_active() ->
[{doc,"Test setting the packet option {header, 2}"}].
header_decode_two_bytes_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:8, "Hello world">>,
@@ -1673,8 +1702,8 @@ header_decode_two_bytes_two_sent_active() ->
[{doc,"Test setting the packet option {header, 2} and sending two byte"}].
header_decode_two_bytes_two_sent_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<"He">>,
@@ -1707,8 +1736,8 @@ header_decode_two_bytes_one_sent_active() ->
[{doc,"Test setting the packet option {header, 2} and sending one byte"}].
header_decode_two_bytes_one_sent_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<"H">>,
@@ -1740,8 +1769,8 @@ header_decode_one_byte_passive() ->
[{doc,"Test setting the packet option {header, 1}"}].
header_decode_one_byte_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:8, "Hello world">>,
@@ -1773,8 +1802,8 @@ header_decode_two_bytes_passive() ->
[{doc,"Test setting the packet option {header, 2}"}].
header_decode_two_bytes_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:8, "Hello world">>,
@@ -1807,8 +1836,8 @@ header_decode_two_bytes_two_sent_passive() ->
[{doc,"Test setting the packet option {header, 2} and sending two byte"}].
header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<"He">>,
@@ -1841,8 +1870,8 @@ header_decode_two_bytes_one_sent_passive() ->
[{doc,"Test setting the packet option {header, 2} and sending one byte"}].
header_decode_two_bytes_one_sent_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<"H">>,
@@ -1872,8 +1901,8 @@ header_decode_two_bytes_one_sent_passive(Config) when is_list(Config) ->
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
packet(Config, Data, Send, Recv, Quantity, Packet, Active) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
diff --git a/lib/ssl/test/ssl_payload_SUITE.erl b/lib/ssl/test/ssl_payload_SUITE.erl
index fb3890a811..cb0571d0a7 100644
--- a/lib/ssl/test/ssl_payload_SUITE.erl
+++ b/lib/ssl/test/ssl_payload_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -71,7 +71,7 @@ init_per_suite(Config) ->
try crypto:start() of
ok ->
ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config), ?config(priv_dir, Config)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config), proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -86,8 +86,7 @@ init_per_group(GroupName, Config) ->
true ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
false ->
{skip, "Missing crypto support"}
end;
@@ -132,8 +131,8 @@ server_echos_passive_small() ->
"sends them back, and closes."}].
server_echos_passive_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -148,8 +147,8 @@ server_echos_active_once_small() ->
" them, sends them back, and closes."}].
server_echos_active_once_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -164,8 +163,8 @@ server_echos_active_small() ->
"sends them back, and closes."}].
server_echos_active_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -179,8 +178,8 @@ client_echos_passive_small() ->
"sends them back, and closes."}].
client_echos_passive_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -194,8 +193,8 @@ client_echos_active_once_small() ->
"them, sends them back, and closes."].
client_echos_active_once_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -209,8 +208,8 @@ client_echos_active_small() ->
"sends them back, and closes."}].
client_echos_active_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -225,8 +224,8 @@ server_echos_passive_big() ->
"sends them back, and closes."}].
server_echos_passive_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -241,8 +240,8 @@ server_echos_active_once_big() ->
"them, sends them back, and closes."}].
server_echos_active_once_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -257,8 +256,8 @@ server_echos_active_big() ->
" them, sends them back, and closes."}].
server_echos_active_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -272,8 +271,8 @@ client_echos_passive_big() ->
"sends them back, and closes."}].
client_echos_passive_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -287,8 +286,8 @@ client_echos_active_once_big() ->
" them, sends them back, and closes."}].
client_echos_active_once_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -302,8 +301,8 @@ client_echos_active_big() ->
"sends them back, and closes."}].
client_echos_active_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -317,8 +316,8 @@ server_echos_passive_huge() ->
" them, sends them back, and closes."}].
server_echos_passive_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -332,8 +331,8 @@ server_echos_active_once_huge() ->
"them, sends them back, and closes."}].
server_echos_active_once_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -347,8 +346,8 @@ server_echos_active_huge() ->
"sends them back, and closes."}].
server_echos_active_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -362,8 +361,8 @@ client_echos_passive_huge() ->
"them, sends them back, and closes."}].
client_echos_passive_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -376,8 +375,8 @@ client_echos_active_once_huge() ->
"them, sends them back, and closes."}].
client_echos_active_once_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -390,8 +389,8 @@ client_echos_active_huge() ->
"sends them back, and closes."}].
client_echos_active_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
diff --git a/lib/ssl/test/ssl_pem_cache_SUITE.erl b/lib/ssl/test/ssl_pem_cache_SUITE.erl
index 3e96276258..13b0ce8ed9 100644
--- a/lib/ssl/test/ssl_pem_cache_SUITE.erl
+++ b/lib/ssl/test/ssl_pem_cache_SUITE.erl
@@ -45,8 +45,8 @@ init_per_suite(Config0) ->
ok ->
ssl:start(),
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config1 = ssl_test_lib:make_dsa_cert(Config0),
ssl_test_lib:cert_options(Config1)
catch _:_ ->
@@ -81,8 +81,8 @@ pem_cleanup() ->
[{doc, "Test pem cache invalidate mechanism"}].
pem_cleanup(Config)when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = proplists:get_value(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
diff --git a/lib/ssl/test/ssl_session_cache_SUITE.erl b/lib/ssl/test/ssl_session_cache_SUITE.erl
index 85345c814f..b352844ba0 100644
--- a/lib/ssl/test/ssl_session_cache_SUITE.erl
+++ b/lib/ssl/test/ssl_session_cache_SUITE.erl
@@ -60,8 +60,8 @@ init_per_suite(Config0) ->
ok ->
ssl:start(),
%% make rsa certs using
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config = ssl_test_lib:make_dsa_cert(Config0),
ssl_test_lib:cert_options(Config)
catch _:_ ->
@@ -118,7 +118,7 @@ init_customized_session_cache(Type, Config) ->
Config)),
ets:new(ssl_test, [named_table, public, set]),
ets:insert(ssl_test, {type, Type}),
- ct:timetrap({seconds, 5}),
+ ct:timetrap({seconds, 20}),
Config.
end_per_testcase(session_cache_process_list, Config) ->
@@ -154,8 +154,8 @@ client_unique_session() ->
"sets up many connections"}].
client_unique_session(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = proplists:get_value(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -185,8 +185,8 @@ session_cleanup() ->
"does not grow and grow ..."}].
session_cleanup(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -259,8 +259,8 @@ max_table_size() ->
[{doc,"Test max limit on session table"}].
max_table_size(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = proplists:get_value(client_verification_opts, Config),
+ ServerOpts = proplists:get_value(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
diff --git a/lib/ssl/test/ssl_sni_SUITE.erl b/lib/ssl/test/ssl_sni_SUITE.erl
index 90c2a49e61..34ef2e6af9 100644
--- a/lib/ssl/test/ssl_sni_SUITE.erl
+++ b/lib/ssl/test/ssl_sni_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2015-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,8 +42,8 @@ init_per_suite(Config0) ->
try crypto:start() of
ok ->
ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
ssl_test_lib:cert_options(Config0)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -54,7 +54,7 @@ end_per_suite(_) ->
application:stop(crypto).
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:log("Ciphers: ~p~n ", [ ssl:cipher_suites()]),
ct:timetrap({seconds, 5}),
Config.
@@ -139,15 +139,15 @@ run_sni_fun_handshake(Config, SNIHostname, ExpectedSNIHostname, ExpectedCN) ->
ct:log("Start running handshake for sni_fun, Config: ~p, SNIHostname: ~p, "
"ExpectedSNIHostname: ~p, ExpectedCN: ~p",
[Config, SNIHostname, ExpectedSNIHostname, ExpectedCN]),
- [{sni_hosts, ServerSNIConf}] = ?config(sni_server_opts, Config),
+ [{sni_hosts, ServerSNIConf}] = proplists:get_value(sni_server_opts, Config),
SNIFun = fun(Domain) -> proplists:get_value(Domain, ServerSNIConf, undefined) end,
- ServerOptions = ?config(server_opts, Config) ++ [{sni_fun, SNIFun}],
+ ServerOptions = proplists:get_value(server_opts, Config) ++ [{sni_fun, SNIFun}],
ClientOptions =
case SNIHostname of
undefined ->
- ?config(client_opts, Config);
+ proplists:get_value(client_opts, Config);
_ ->
- [{server_name_indication, SNIHostname}] ++ ?config(client_opts, Config)
+ [{server_name_indication, SNIHostname}] ++ proplists:get_value(client_opts, Config)
end,
ct:log("Options: ~p", [[ServerOptions, ClientOptions]]),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -167,13 +167,13 @@ run_handshake(Config, SNIHostname, ExpectedSNIHostname, ExpectedCN) ->
ct:log("Start running handshake, Config: ~p, SNIHostname: ~p, "
"ExpectedSNIHostname: ~p, ExpectedCN: ~p",
[Config, SNIHostname, ExpectedSNIHostname, ExpectedCN]),
- ServerOptions = ?config(sni_server_opts, Config) ++ ?config(server_opts, Config),
+ ServerOptions = proplists:get_value(sni_server_opts, Config) ++ proplists:get_value(server_opts, Config),
ClientOptions =
case SNIHostname of
undefined ->
- ?config(client_opts, Config);
+ proplists:get_value(client_opts, Config);
_ ->
- [{server_name_indication, SNIHostname}] ++ ?config(client_opts, Config)
+ [{server_name_indication, SNIHostname}] ++ proplists:get_value(client_opts, Config)
end,
ct:log("Options: ~p", [[ServerOptions, ClientOptions]]),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index ed4bd86665..fd8af5efaa 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -349,52 +349,54 @@ wait_for_result(Pid, Msg) ->
user_lookup(psk, _Identity, UserState) ->
{ok, UserState};
user_lookup(srp, Username, _UserState) ->
- Salt = ssl:random_bytes(16),
+ Salt = ssl_cipher:random_bytes(16),
UserPassHash = crypto:hash(sha, [Salt, crypto:hash(sha, [Username, <<$:>>, <<"secret">>])]),
{ok, {srp_1024, Salt, UserPassHash}}.
cert_options(Config) ->
- ClientCaCertFile = filename:join([?config(priv_dir, Config),
+ ClientCaCertFile = filename:join([proplists:get_value(priv_dir, Config),
"client", "cacerts.pem"]),
- ClientCertFile = filename:join([?config(priv_dir, Config),
+ ClientCertFile = filename:join([proplists:get_value(priv_dir, Config),
"client", "cert.pem"]),
- ClientCertFileDigitalSignatureOnly = filename:join([?config(priv_dir, Config),
+ ClientCertFileDigitalSignatureOnly = filename:join([proplists:get_value(priv_dir, Config),
"client", "digital_signature_only_cert.pem"]),
- ServerCaCertFile = filename:join([?config(priv_dir, Config),
+ ServerCaCertFile = filename:join([proplists:get_value(priv_dir, Config),
"server", "cacerts.pem"]),
- ServerCertFile = filename:join([?config(priv_dir, Config),
+ ServerCertFile = filename:join([proplists:get_value(priv_dir, Config),
"server", "cert.pem"]),
- ServerKeyFile = filename:join([?config(priv_dir, Config),
+ ServerKeyFile = filename:join([proplists:get_value(priv_dir, Config),
"server", "key.pem"]),
- ClientKeyFile = filename:join([?config(priv_dir, Config),
+ ClientKeyFile = filename:join([proplists:get_value(priv_dir, Config),
"client", "key.pem"]),
- ServerKeyCertFile = filename:join([?config(priv_dir, Config),
+ ServerKeyCertFile = filename:join([proplists:get_value(priv_dir, Config),
"server", "keycert.pem"]),
- ClientKeyCertFile = filename:join([?config(priv_dir, Config),
+ ClientKeyCertFile = filename:join([proplists:get_value(priv_dir, Config),
"client", "keycert.pem"]),
- BadCaCertFile = filename:join([?config(priv_dir, Config),
+ BadCaCertFile = filename:join([proplists:get_value(priv_dir, Config),
"badcacert.pem"]),
- BadCertFile = filename:join([?config(priv_dir, Config),
+ BadCertFile = filename:join([proplists:get_value(priv_dir, Config),
"badcert.pem"]),
- BadKeyFile = filename:join([?config(priv_dir, Config),
+ BadKeyFile = filename:join([proplists:get_value(priv_dir, Config),
"badkey.pem"]),
PskSharedSecret = <<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15>>,
- SNIServerACertFile = filename:join([?config(priv_dir, Config), "a.server", "cert.pem"]),
- SNIServerAKeyFile = filename:join([?config(priv_dir, Config), "a.server", "key.pem"]),
- SNIServerBCertFile = filename:join([?config(priv_dir, Config), "b.server", "cert.pem"]),
- SNIServerBKeyFile = filename:join([?config(priv_dir, Config), "b.server", "key.pem"]),
- [{client_opts, []},
- {client_verification_opts, [{cacertfile, ClientCaCertFile},
+ SNIServerACertFile = filename:join([proplists:get_value(priv_dir, Config), "a.server", "cert.pem"]),
+ SNIServerAKeyFile = filename:join([proplists:get_value(priv_dir, Config), "a.server", "key.pem"]),
+ SNIServerBCertFile = filename:join([proplists:get_value(priv_dir, Config), "b.server", "cert.pem"]),
+ SNIServerBKeyFile = filename:join([proplists:get_value(priv_dir, Config), "b.server", "key.pem"]),
+ [{client_opts, [{cacertfile, ClientCaCertFile},
+ {certfile, ClientCertFile},
+ {keyfile, ClientKeyFile}]},
+ {client_verification_opts, [{cacertfile, ServerCaCertFile},
{certfile, ClientCertFile},
{keyfile, ClientKeyFile},
{ssl_imp, new}]},
- {client_verification_opts_digital_signature_only, [{cacertfile, ClientCaCertFile},
+ {client_verification_opts_digital_signature_only, [{cacertfile, ServerCaCertFile},
{certfile, ClientCertFileDigitalSignatureOnly},
{keyfile, ClientKeyFile},
{ssl_imp, new}]},
- {server_opts, [{ssl_imp, new},{reuseaddr, true},
+ {server_opts, [{ssl_imp, new},{reuseaddr, true}, {cacertfile, ServerCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile}]},
{server_anon, [{ssl_imp, new},{reuseaddr, true}, {ciphers, anonymous_suites()}]},
{client_psk, [{ssl_imp, new},{reuseaddr, true},
@@ -426,7 +428,7 @@ cert_options(Config) ->
{user_lookup_fun, {fun user_lookup/3, undefined}},
{ciphers, srp_anon_suites()}]},
{server_verification_opts, [{ssl_imp, new},{reuseaddr, true},
- {cacertfile, ServerCaCertFile},
+ {cacertfile, ClientCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile}]},
{client_kc_opts, [{certfile, ClientKeyCertFile}, {ssl_imp, new}]},
{server_kc_opts, [{ssl_imp, new},{reuseaddr, true},
@@ -494,7 +496,7 @@ make_ecdsa_cert(Config) ->
{cacertfile, ServerCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile}]},
{server_ecdsa_verify_opts, [{ssl_imp, new},{reuseaddr, true},
- {cacertfile, ServerCaCertFile},
+ {cacertfile, ClientCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile},
{verify, verify_peer}]},
{client_ecdsa_opts, [{ssl_imp, new},{reuseaddr, true},
@@ -519,7 +521,7 @@ make_ecdh_rsa_cert(Config) ->
{cacertfile, ServerCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile}]},
{server_ecdh_rsa_verify_opts, [{ssl_imp, new},{reuseaddr, true},
- {cacertfile, ServerCaCertFile},
+ {cacertfile, ClientCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile},
{verify, verify_peer}]},
{client_ecdh_rsa_opts, [{ssl_imp, new},{reuseaddr, true},
@@ -552,11 +554,11 @@ make_cert_files(RoleStr, Config, Alg1, Alg2, Prefix) ->
Alg2Str = atom_to_list(Alg2),
CaInfo = {CaCert, _} = erl_make_certs:make_cert([{key, Alg1}]),
{Cert, CertKey} = erl_make_certs:make_cert([{key, Alg2}, {issuer, CaInfo}]),
- CaCertFile = filename:join([?config(priv_dir, Config),
+ CaCertFile = filename:join([proplists:get_value(priv_dir, Config),
RoleStr, Prefix ++ Alg1Str ++ "_cacerts.pem"]),
- CertFile = filename:join([?config(priv_dir, Config),
+ CertFile = filename:join([proplists:get_value(priv_dir, Config),
RoleStr, Prefix ++ Alg2Str ++ "_cert.pem"]),
- KeyFile = filename:join([?config(priv_dir, Config),
+ KeyFile = filename:join([proplists:get_value(priv_dir, Config),
RoleStr, Prefix ++ Alg2Str ++ "_key.pem"]),
der_to_pem(CaCertFile, [{'Certificate', CaCert, not_encrypted}]),
@@ -815,6 +817,12 @@ rsa_suites(CounterPart) ->
true;
({ecdhe_rsa, _, _}) when ECC == true ->
true;
+ ({rsa, _, _, _}) ->
+ true;
+ ({dhe_rsa, _, _,_}) ->
+ true;
+ ({ecdhe_rsa, _, _,_}) when ECC == true ->
+ true;
(_) ->
false
end,
@@ -981,6 +989,10 @@ rc4_suites(Version) ->
Suites = ssl_cipher:rc4_suites(Version),
ssl_cipher:filter_suites(Suites).
+des_suites(Version) ->
+ Suites = ssl_cipher:des_suites(Version),
+ ssl_cipher:filter_suites(Suites).
+
pem_to_der(File) ->
{ok, PemBin} = file:read_file(File),
public_key:pem_decode(PemBin).
@@ -1037,13 +1049,20 @@ receive_rizzo_duong_beast() ->
end
end.
-state([{data,[{"State", State}]} | _]) ->
- State;
-state([{data,[{"StateData", State}]} | _]) ->
+
+state([{data,[{"State", {_StateName, StateData}}]} | _]) -> %% gen_statem
+ StateData;
+state([{data,[{"State", State}]} | _]) -> %% gen_server
State;
+state([{data,[{"StateData", State}]} | _]) -> %% gen_fsm
+ State;
state([_ | Rest]) ->
state(Rest).
+is_tls_version('dtlsv1.2') ->
+ true;
+is_tls_version('dtlsv1') ->
+ true;
is_tls_version('tlsv1.2') ->
true;
is_tls_version('tlsv1.1') ->
@@ -1055,13 +1074,23 @@ is_tls_version('sslv3') ->
is_tls_version(_) ->
false.
-init_tls_version(Version) ->
+init_tls_version(Version, Config)
+ when Version == 'dtlsv1.2'; Version == 'dtlsv1' ->
+ ssl:stop(),
+ application:load(ssl),
+ application:set_env(ssl, dtls_protocol_version, Version),
+ ssl:start(),
+ [{protocol, dtls}, {protocol_opts, [{protocol, dtls}]}|Config];
+
+init_tls_version(Version, Config) ->
ssl:stop(),
application:load(ssl),
application:set_env(ssl, protocol_version, Version),
- ssl:start().
+ ssl:start(),
+ [{protocol, tls}|Config].
-sufficient_crypto_support('tlsv1.2') ->
+sufficient_crypto_support(Version)
+ when Version == 'tlsv1.2'; Version == 'dtlsv1.2' ->
CryptoSupport = crypto:supports(),
proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport));
sufficient_crypto_support(Group) when Group == ciphers_ec; %% From ssl_basic_SUITE
@@ -1287,3 +1316,40 @@ do_supports_ssl_tls_version(Port) ->
after 500 ->
true
end.
+
+ssl_options(Option, Config) ->
+ ProtocolOpts = proplists:get_value(protocol_opts, Config, []),
+ Opts = proplists:get_value(Option, Config, []),
+ Opts ++ ProtocolOpts.
+
+protocol_version(Config) ->
+ protocol_version(Config, atom).
+
+protocol_version(Config, tuple) ->
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ dtls_record:protocol_version(dtls_record:highest_protocol_version([]));
+ _ ->
+ tls_record:highest_protocol_version(tls_record:supported_protocol_versions())
+ end;
+
+protocol_version(Config, atom) ->
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ dtls_record:protocol_version(protocol_version(Config, tuple));
+ _ ->
+ tls_record:protocol_version(protocol_version(Config, tuple))
+ end.
+
+protocol_options(Config, Options) ->
+ Protocol = proplists:get_value(protocol, Config, tls),
+ {Protocol, Opts} = lists:keyfind(Protocol, 1, Options),
+ Opts.
+
+ct_log_supported_protocol_versions(Config) ->
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ ct:log("DTLS version ~p~n ", [dtls_record:supported_protocol_versions()]);
+ _ ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()])
+ end.
diff --git a/lib/ssl/test/ssl_to_openssl_SUITE.erl b/lib/ssl/test/ssl_to_openssl_SUITE.erl
index 6934d7f851..b3109b5de9 100644
--- a/lib/ssl/test/ssl_to_openssl_SUITE.erl
+++ b/lib/ssl/test/ssl_to_openssl_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -117,8 +117,8 @@ init_per_suite(Config0) ->
try crypto:start() of
ok ->
ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config1 = ssl_test_lib:make_dsa_cert(Config0),
Config = ssl_test_lib:cert_options(Config1),
ssl_test_lib:cipher_restriction(Config)
@@ -131,13 +131,19 @@ end_per_suite(_Config) ->
ssl:stop(),
application:stop(crypto).
+init_per_group(basic, Config) ->
+ case ssl_test_lib:supports_ssl_tls_version(sslv2) of
+ true ->
+ [{v2_hello_compatible, true} | Config];
+ false ->
+ [{v2_hello_compatible, false} | Config]
+ end;
init_per_group(GroupName, Config) ->
case ssl_test_lib:is_tls_version(GroupName) of
true ->
case ssl_test_lib:check_sane_openssl_version(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
false ->
{skip, openssl_does_not_support_version}
end;
@@ -163,7 +169,7 @@ init_per_testcase(TestCase, Config) when TestCase == ciphers_rsa_signed_certs;
special_init(TestCase, Config);
init_per_testcase(TestCase, Config) ->
- ct:timetrap({seconds, 10}),
+ ct:timetrap({seconds, 20}),
special_init(TestCase, Config).
special_init(TestCase, Config)
@@ -257,8 +263,8 @@ basic_erlang_client_openssl_server() ->
[{doc,"Test erlang client with openssl server"}].
basic_erlang_client_openssl_server(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -296,16 +302,19 @@ basic_erlang_server_openssl_client() ->
[{doc,"Test erlang server with openssl client"}].
basic_erlang_server_openssl_client(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ V2Compat = proplists:get_value(v2_hello_compatible, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
Data = "From openssl to erlang",
+ ct:pal("v2_hello_compatible: ~p", [V2Compat]),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, erlang_ssl_receive, [Data]}},
- {options, ServerOpts}]),
+ {mfa, {?MODULE, erlang_ssl_receive, [Data]}},
+ {options,[{v2_hello_compatible, V2Compat} | ServerOpts]}]),
+
Port = ssl_test_lib:inet_port(Server),
Exe = "openssl",
@@ -319,15 +328,15 @@ basic_erlang_server_openssl_client(Config) when is_list(Config) ->
%% Clean close down! Server needs to be closed first !!
ssl_test_lib:close(Server),
ssl_test_lib:close_port(OpenSslPort),
- process_flag(trap_exit, false),
- ok.
+ process_flag(trap_exit, false).
+
%%--------------------------------------------------------------------
erlang_client_openssl_server() ->
[{doc,"Test erlang client with openssl server"}].
erlang_client_openssl_server(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -336,7 +345,7 @@ erlang_client_openssl_server(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -366,7 +375,7 @@ erlang_server_openssl_client() ->
[{doc,"Test erlang server with openssl client"}].
erlang_server_openssl_client(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -377,7 +386,7 @@ erlang_server_openssl_client(Config) when is_list(Config) ->
{mfa, {?MODULE, erlang_ssl_receive, [Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-connect", "localhost: " ++ integer_to_list(Port),
@@ -398,8 +407,8 @@ erlang_client_openssl_server_dsa_cert() ->
[{doc,"Test erlang server with openssl client"}].
erlang_client_openssl_server_dsa_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_dsa_opts, Config),
- ServerOpts = ?config(server_dsa_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_dsa_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_dsa_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -409,7 +418,7 @@ erlang_client_openssl_server_dsa_cert(Config) when is_list(Config) ->
CaCertFile = proplists:get_value(cacertfile, ServerOpts),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -441,8 +450,8 @@ erlang_server_openssl_client_dsa_cert() ->
[{doc,"Test erlang server with openssl client"}].
erlang_server_openssl_client_dsa_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_dsa_opts, Config),
- ServerOpts = ?config(server_dsa_verify_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_dsa_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_dsa_verify_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -456,7 +465,7 @@ erlang_server_openssl_client_dsa_cert(Config) when is_list(Config) ->
{mfa, {?MODULE, erlang_ssl_receive, [Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-connect", "localhost: " ++ integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -481,7 +490,7 @@ erlang_server_openssl_client_reuse_session() ->
"same session id, to test reusing of sessions."}].
erlang_server_openssl_client_reuse_session(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -493,7 +502,7 @@ erlang_server_openssl_client_reuse_session(Config) when is_list(Config) ->
{reconnect_times, 5},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-connect", "localhost:" ++ integer_to_list(Port),
@@ -518,8 +527,8 @@ erlang_client_openssl_server_renegotiate() ->
[{doc,"Test erlang client when openssl server issuses a renegotiate"}].
erlang_client_openssl_server_renegotiate(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -529,7 +538,7 @@ erlang_client_openssl_server_renegotiate(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
@@ -568,8 +577,8 @@ erlang_client_openssl_server_nowrap_seqnum() ->
" to lower treashold substantially."}].
erlang_client_openssl_server_nowrap_seqnum(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -579,7 +588,7 @@ erlang_client_openssl_server_nowrap_seqnum(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -611,7 +620,7 @@ erlang_server_openssl_client_nowrap_seqnum() ->
" to lower treashold substantially."}].
erlang_server_openssl_client_nowrap_seqnum(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -625,7 +634,7 @@ erlang_server_openssl_client_nowrap_seqnum(Config) when is_list(Config) ->
trigger_renegotiate, [[Data, N+2]]}},
{options, [{renegotiate_at, N}, {reuse_sessions, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client","-connect", "localhost: " ++ integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -650,8 +659,8 @@ erlang_client_openssl_server_no_server_ca_cert() ->
"implicitly tested eleswhere."}].
erlang_client_openssl_server_no_server_ca_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -660,7 +669,7 @@ erlang_client_openssl_server_no_server_ca_cert(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -691,8 +700,8 @@ erlang_client_openssl_server_client_cert() ->
[{doc,"Test erlang client with openssl server when client sends cert"}].
erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_verification_opts, Config),
- ClientOpts = ?config(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -702,7 +711,7 @@ erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
CertFile = proplists:get_value(certfile, ServerOpts),
CaCertFile = proplists:get_value(cacertfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -734,8 +743,8 @@ erlang_server_openssl_client_client_cert() ->
[{doc,"Test erlang server with openssl client when client sends cert"}].
erlang_server_openssl_client_client_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_verification_opts, Config),
- ClientOpts = ?config(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -753,7 +762,7 @@ erlang_server_openssl_client_client_cert(Config) when is_list(Config) ->
CaCertFile = proplists:get_value(cacertfile, ClientOpts),
CertFile = proplists:get_value(certfile, ClientOpts),
KeyFile = proplists:get_value(keyfile, ClientOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-cert", CertFile,
"-CAfile", CaCertFile,
@@ -775,9 +784,9 @@ erlang_server_erlang_client_client_cert() ->
[{doc,"Test erlang server with erlang client when client sends cert"}].
erlang_server_erlang_client_client_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_verification_opts, Config),
- ClientOpts = ?config(client_verification_opts, Config),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ ServerOpts = proplists:get_value(server_verification_opts, Config),
+ ClientOpts = proplists:get_value(client_verification_opts, Config),
+ Version = ssl_test_lib:protocol_version(Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = "From erlang to erlang",
@@ -812,9 +821,7 @@ erlang_server_erlang_client_client_cert(Config) when is_list(Config) ->
ciphers_rsa_signed_certs() ->
[{doc,"Test cipher suites that uses rsa certs"}].
ciphers_rsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:rsa_suites(openssl),
run_suites(Ciphers, Version, Config, rsa).
%%--------------------------------------------------------------------
@@ -822,9 +829,7 @@ ciphers_rsa_signed_certs(Config) when is_list(Config) ->
ciphers_dsa_signed_certs() ->
[{doc,"Test cipher suites that uses dsa certs"}].
ciphers_dsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:dsa_suites(),
run_suites(Ciphers, Version, Config, dsa).
@@ -833,15 +838,15 @@ erlang_client_bad_openssl_server() ->
[{doc,"Test what happens if openssl server sends garbage to erlang ssl client"}].
erlang_client_bad_openssl_server(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_verification_opts, Config),
- ClientOpts = ?config(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port), ssl_test_lib:version_flag(Version),
"-cert", CertFile, "-key", KeyFile],
@@ -888,8 +893,8 @@ expired_session() ->
"better code coverage of the ssl_manager module"}].
expired_session(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
Port = ssl_test_lib:inet_port(node()),
@@ -942,7 +947,7 @@ ssl2_erlang_server_openssl_client() ->
ssl2_erlang_server_openssl_client(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -1220,11 +1225,11 @@ run_suites(Ciphers, Version, Config, Type) ->
{ClientOpts, ServerOpts} =
case Type of
rsa ->
- {?config(client_opts, Config),
- ?config(server_opts, Config)};
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_opts, Config)};
dsa ->
- {?config(client_opts, Config),
- ?config(server_dsa_opts, Config)}
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_dsa_opts, Config)}
end,
Result = lists:map(fun(Cipher) ->
@@ -1277,7 +1282,7 @@ send_and_hostname(SSLSocket) ->
erlang_server_openssl_client_sni_test(Config, SNIHostname, ExpectedSNIHostname, ExpectedCN) ->
ct:log("Start running handshake, Config: ~p, SNIHostname: ~p, ExpectedSNIHostname: ~p, ExpectedCN: ~p", [Config, SNIHostname, ExpectedSNIHostname, ExpectedCN]),
- ServerOptions = ?config(sni_server_opts, Config) ++ ?config(server_opts, Config),
+ ServerOptions = proplists:get_value(sni_server_opts, Config) ++ proplists:get_value(server_opts, Config),
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()}, {mfa, {?MODULE, send_and_hostname, []}},
@@ -1285,13 +1290,13 @@ erlang_server_openssl_client_sni_test(Config, SNIHostname, ExpectedSNIHostname,
Port = ssl_test_lib:inet_port(Server),
Exe = "openssl",
ClientArgs = case SNIHostname of
- undefined ->
- ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port)];
- _ ->
- ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port), "-servername", SNIHostname]
- end,
+ undefined ->
+ openssl_client_args(ssl_test_lib:supports_ssl_tls_version(sslv2), Hostname,Port);
+ _ ->
+ openssl_client_args(ssl_test_lib:supports_ssl_tls_version(sslv2), Hostname, Port, SNIHostname)
+ end,
ClientPort = ssl_test_lib:portable_open_port(Exe, ClientArgs),
-
+
%% Client check needs to be done befor server check,
%% or server check might consume client messages
ExpectedClientOutput = ["OK", "/CN=" ++ ExpectedCN ++ "/"],
@@ -1304,9 +1309,9 @@ erlang_server_openssl_client_sni_test(Config, SNIHostname, ExpectedSNIHostname,
erlang_server_openssl_client_sni_test_sni_fun(Config, SNIHostname, ExpectedSNIHostname, ExpectedCN) ->
ct:log("Start running handshake for sni_fun, Config: ~p, SNIHostname: ~p, ExpectedSNIHostname: ~p, ExpectedCN: ~p", [Config, SNIHostname, ExpectedSNIHostname, ExpectedCN]),
- [{sni_hosts, ServerSNIConf}] = ?config(sni_server_opts, Config),
+ [{sni_hosts, ServerSNIConf}] = proplists:get_value(sni_server_opts, Config),
SNIFun = fun(Domain) -> proplists:get_value(Domain, ServerSNIConf, undefined) end,
- ServerOptions = ?config(server_opts, Config) ++ [{sni_fun, SNIFun}],
+ ServerOptions = proplists:get_value(server_opts, Config) ++ [{sni_fun, SNIFun}],
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()}, {mfa, {?MODULE, send_and_hostname, []}},
@@ -1314,13 +1319,14 @@ erlang_server_openssl_client_sni_test_sni_fun(Config, SNIHostname, ExpectedSNIHo
Port = ssl_test_lib:inet_port(Server),
Exe = "openssl",
ClientArgs = case SNIHostname of
- undefined ->
- ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port)];
- _ ->
- ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port), "-servername", SNIHostname]
- end,
+ undefined ->
+ openssl_client_args(ssl_test_lib:supports_ssl_tls_version(sslv2), Hostname,Port);
+ _ ->
+ openssl_client_args(ssl_test_lib:supports_ssl_tls_version(sslv2), Hostname, Port, SNIHostname)
+ end,
+
ClientPort = ssl_test_lib:portable_open_port(Exe, ClientArgs),
-
+
%% Client check needs to be done befor server check,
%% or server check might consume client messages
ExpectedClientOutput = ["OK", "/CN=" ++ ExpectedCN ++ "/"],
@@ -1388,8 +1394,8 @@ cipher(CipherSuite, Version, Config, ClientOpts, ServerOpts) ->
start_erlang_client_and_openssl_server_with_opts(Config, ErlangClientOpts, OpensslServerOpts, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts0 = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = ErlangClientOpts ++ ClientOpts0,
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -1399,7 +1405,7 @@ start_erlang_client_and_openssl_server_with_opts(Config, ErlangClientOpts, Opens
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = case OpensslServerOpts of
@@ -1434,8 +1440,8 @@ start_erlang_client_and_openssl_server_with_opts(Config, ErlangClientOpts, Opens
start_erlang_client_and_openssl_server_for_alpn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts0 = ?config(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = [{alpn_advertised_protocols, [<<"spdy/2">>]} | ClientOpts0],
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -1445,7 +1451,7 @@ start_erlang_client_and_openssl_server_for_alpn_negotiation(Config, Data, Callba
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-msg", "-alpn", "http/1.1,spdy/2", "-accept", integer_to_list(Port), ssl_test_lib:version_flag(Version),
@@ -1470,7 +1476,7 @@ start_erlang_client_and_openssl_server_for_alpn_negotiation(Config, Data, Callba
start_erlang_server_and_openssl_client_for_alpn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = [{alpn_preferred_protocols, [<<"spdy/2">>]} | ServerOpts0],
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -1481,7 +1487,7 @@ start_erlang_server_and_openssl_client_for_alpn_negotiation(Config, Data, Callba
{mfa, {?MODULE, erlang_ssl_receive_and_assert_negotiated_protocol, [<<"spdy/2">>, Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-alpn", "http/1.0,spdy/2", "-msg", "-port",
@@ -1499,8 +1505,8 @@ start_erlang_server_and_openssl_client_for_alpn_negotiation(Config, Data, Callba
start_erlang_client_and_openssl_server_for_alpn_npn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts0 = ?config(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = [{alpn_advertised_protocols, [<<"spdy/2">>]},
{client_preferred_next_protocols, {client, [<<"spdy/3">>, <<"http/1.1">>]}} | ClientOpts0],
@@ -1511,7 +1517,7 @@ start_erlang_client_and_openssl_server_for_alpn_npn_negotiation(Config, Data, Ca
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-msg", "-alpn", "http/1.1,spdy/2", "-nextprotoneg",
@@ -1539,7 +1545,7 @@ start_erlang_client_and_openssl_server_for_alpn_npn_negotiation(Config, Data, Ca
start_erlang_server_and_openssl_client_for_alpn_npn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = [{alpn_preferred_protocols, [<<"spdy/2">>]},
{next_protocols_advertised, [<<"spdy/3">>, <<"http/1.1">>]} | ServerOpts0],
@@ -1551,7 +1557,7 @@ start_erlang_server_and_openssl_client_for_alpn_npn_negotiation(Config, Data, Ca
{mfa, {?MODULE, erlang_ssl_receive_and_assert_negotiated_protocol, [<<"spdy/2">>, Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-alpn", "http/1.1,spdy/2", "-nextprotoneg", "spdy/3",
"-msg", "-port", integer_to_list(Port), ssl_test_lib:version_flag(Version),
@@ -1566,8 +1572,8 @@ start_erlang_server_and_openssl_client_for_alpn_npn_negotiation(Config, Data, Ca
start_erlang_client_and_openssl_server_for_npn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts0 = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = [{client_preferred_next_protocols, {client, [<<"spdy/2">>], <<"http/1.1">>}} | ClientOpts0],
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -1577,7 +1583,7 @@ start_erlang_client_and_openssl_server_for_npn_negotiation(Config, Data, Callbac
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-msg", "-nextprotoneg", "http/1.1,spdy/2", "-accept", integer_to_list(Port),
@@ -1604,7 +1610,7 @@ start_erlang_client_and_openssl_server_for_npn_negotiation(Config, Data, Callbac
start_erlang_server_and_openssl_client_for_npn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts = [{next_protocols_advertised, [<<"spdy/2">>]}, ServerOpts0],
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -1615,7 +1621,7 @@ start_erlang_server_and_openssl_client_for_npn_negotiation(Config, Data, Callbac
{mfa, {?MODULE, erlang_ssl_receive_and_assert_negotiated_protocol, [<<"spdy/2">>, Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-nextprotoneg", "http/1.0,spdy/2", "-msg", "-connect", "localhost:"
@@ -1633,7 +1639,7 @@ start_erlang_server_and_openssl_client_for_npn_negotiation(Config, Data, Callbac
start_erlang_server_and_openssl_client_with_opts(Config, ErlangServerOpts, OpenSSLClientOpts, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts = ErlangServerOpts ++ ServerOpts0,
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -1644,7 +1650,7 @@ start_erlang_server_and_openssl_client_with_opts(Config, ErlangServerOpts, OpenS
{mfa, {?MODULE, erlang_ssl_receive, [Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client"] ++ OpenSSLClientOpts ++ ["-msg", "-connect", "localhost:" ++ integer_to_list(Port),
@@ -1782,3 +1788,15 @@ workaround_openssl_s_clinent() ->
_ ->
[]
end.
+
+openssl_client_args(false, Hostname, Port) ->
+ ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port)];
+openssl_client_args(true, Hostname, Port) ->
+ ["s_client", "-no_ssl2", "-connect", Hostname ++ ":" ++ integer_to_list(Port)].
+
+openssl_client_args(false, Hostname, Port, ServerName) ->
+ ["s_client", "-connect", Hostname ++ ":" ++
+ integer_to_list(Port), "-servername", ServerName];
+openssl_client_args(true, Hostname, Port, ServerName) ->
+ ["s_client", "-no_ssl2", "-connect", Hostname ++ ":" ++
+ integer_to_list(Port), "-servername", ServerName].
diff --git a/lib/ssl/test/ssl_upgrade_SUITE.erl b/lib/ssl/test/ssl_upgrade_SUITE.erl
index d65bdf6983..113b3b4158 100644
--- a/lib/ssl/test/ssl_upgrade_SUITE.erl
+++ b/lib/ssl/test/ssl_upgrade_SUITE.erl
@@ -40,20 +40,19 @@ all() ->
init_per_suite(Config0) ->
catch crypto:stop(),
- try {crypto:start(), erlang:system_info({wordsize, internal}) == erlang:system_info({wordsize, external})} of
- {ok, true} ->
- case ct_release_test:init(Config0) of
- {skip, Reason} ->
- {skip, Reason};
- Config ->
- {ok, _} = make_certs:all(?config(data_dir, Config),
- ?config(priv_dir, Config)),
- ssl_test_lib:cert_options(Config)
- end;
- {ok, false} ->
- {skip, "Test server will not handle halfwordemulator correctly. Skip as halfwordemulator is deprecated"}
+ try crypto:start() of
+ ok ->
+ case ct_release_test:init(Config0) of
+ {skip, Reason} ->
+ {skip, Reason};
+ Config ->
+ Result =
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config),
+ proplists:get_value(priv_dir, Config)),
+ ssl_test_lib:cert_options(Config)
+ end
catch _:_ ->
- {skip, "Crypto did not start"}
+ {skip, "Crypto did not start"}
end.
end_per_suite(Config) ->
@@ -61,7 +60,7 @@ end_per_suite(Config) ->
crypto:stop().
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({minutes, 1}),
Config.
@@ -140,8 +139,8 @@ use_connection(Socket) ->
end.
soft_start_connection(Config, ResulProxy) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = proplists:get_value(client_verification_opts, Config),
+ ServerOpts = proplists:get_value(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = start_server([{node, ServerNode}, {port, 0},
{from, ResulProxy},
@@ -157,8 +156,8 @@ soft_start_connection(Config, ResulProxy) ->
{Server, Client}.
restart_start_connection(Config, ResulProxy) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = proplists:get_value(client_verification_opts, Config),
+ ServerOpts = proplists:get_value(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = start_server([{node, ServerNode}, {port, 0},
{from, ResulProxy},
diff --git a/lib/ssl/vsn.mk b/lib/ssl/vsn.mk
index d9391ea543..6afac59109 100644
--- a/lib/ssl/vsn.mk
+++ b/lib/ssl/vsn.mk
@@ -1 +1 @@
-SSL_VSN = 7.3.3.1
+SSL_VSN = 8.0.1
diff --git a/lib/stdlib/Makefile b/lib/stdlib/Makefile
index 563a2defa2..3086d85445 100644
--- a/lib/stdlib/Makefile
+++ b/lib/stdlib/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/doc/src/Makefile b/lib/stdlib/doc/src/Makefile
index 196c86748f..26602764a6 100644
--- a/lib/stdlib/doc/src/Makefile
+++ b/lib/stdlib/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2015. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -68,6 +68,7 @@ XML_REF3_FILES = \
gen_event.xml \
gen_fsm.xml \
gen_server.xml \
+ gen_statem.xml \
io.xml \
io_lib.xml \
lib.xml \
diff --git a/lib/stdlib/doc/src/array.xml b/lib/stdlib/doc/src/array.xml
index 0f33e2621c..db0ab42372 100644
--- a/lib/stdlib/doc/src/array.xml
+++ b/lib/stdlib/doc/src/array.xml
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
<erlref>
-<header>
+ <header>
<copyright>
- <year>2007</year><year>2014</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -21,469 +22,541 @@
</legalnotice>
-<title>array</title>
-<prepared></prepared>
-<responsible></responsible>
-<docno>1</docno>
-<approved></approved>
-<checked></checked>
-<date></date>
-<rev>A</rev>
-<file>array.xml</file></header>
-<module>array</module>
-<modulesummary>Functional, extendible arrays.</modulesummary>
-<description>
-<p>Functional, extendible arrays. Arrays can have fixed size, or
-can grow automatically as needed. A default value is used for entries
-that have not been explicitly set.</p>
-
- <p>Arrays uses <em>zero</em> based indexing. This is a deliberate design
-choice and differs from other erlang datastructures, e.g. tuples.</p>
-
- <p>Unless specified by the user when the array is created, the default
- value is the atom <c>undefined</c>. There is no difference between an
- unset entry and an entry which has been explicitly set to the same
- value as the default one (cf. <seealso marker="#reset-2">reset/2</seealso>). If you need to
-differentiate between unset and set entries, you must make sure that
-the default value cannot be confused with the values of set entries.</p>
-
- <p>The array never shrinks automatically; if an index <c>I</c> has been used
- successfully to set an entry, all indices in the range [0,<c>I</c>] will
- stay accessible unless the array size is explicitly changed by
- calling <seealso marker="#resize-2">resize/2</seealso>.</p>
-
- <p>Examples:
- </p><pre> %% Create a fixed-size array with entries 0-9 set to 'undefined'
- A0 = array:new(10).
- 10 = array:size(A0).
-
- %% Create an extendible array and set entry 17 to 'true',
- %% causing the array to grow automatically
- A1 = array:set(17, true, array:new()).
- 18 = array:size(A1).
-
- %% Read back a stored value
- true = array:get(17, A1).
-
- %% Accessing an unset entry returns the default value
- undefined = array:get(3, A1).
-
- %% Accessing an entry beyond the last set entry also returns the
- %% default value, if the array does not have fixed size
- undefined = array:get(18, A1).
-
- %% "sparse" functions ignore default-valued entries
- A2 = array:set(4, false, A1).
- [{4, false}, {17, true}] = array:sparse_to_orddict(A2).
-
- %% An extendible array can be made fixed-size later
- A3 = array:fix(A2).
-
- %% A fixed-size array does not grow automatically and does not
- %% allow accesses beyond the last set entry
- {'EXIT',{badarg,_}} = (catch array:set(18, true, A3)).
- {'EXIT',{badarg,_}} = (catch array:get(18, A3)).</pre></description>
-<datatypes>
- <datatype>
- <name name="array" n_vars="1"/>
- <desc>
- <p>A functional, extendible array. The representation is
- not documented and is subject to change without notice. Note that
- arrays cannot be directly compared for equality.</p>
- </desc>
- </datatype>
- <datatype>
- <name name="array" n_vars="0"/>
- </datatype>
- <datatype>
- <name name="array_indx"/>
- </datatype>
- <datatype>
- <name name="array_opts"/>
- </datatype>
- <datatype>
- <name name="array_opt"/>
- </datatype>
- <datatype>
- <name name="indx_pairs"/>
- </datatype>
- <datatype>
- <name name="indx_pair"/>
- </datatype>
-</datatypes>
-
-<funcs>
-<func>
-<name name="default" arity="1"/>
-<fsummary>Get the value used for uninitialized entries.</fsummary>
-
-<desc><marker id="default-1"/>
-
-<p>Get the value used for uninitialized entries.
- </p>
-<p><em>See also:</em> <seealso marker="#new-2">new/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="fix" arity="1"/>
-<fsummary>Fix the size of the array.</fsummary>
-
-<desc><marker id="fix-1"/>
-
-<p>Fix the size of the array. This prevents it from growing
- automatically upon insertion; see also <seealso marker="#set-3">set/3</seealso>.</p>
-<p><em>See also:</em> <seealso marker="#relax-1">relax/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="foldl" arity="3"/>
-<fsummary>Fold the elements of the array using the given function and
- initial accumulator value.</fsummary>
-<desc><marker id="foldl-3"/>
-<p>Fold the elements of the array using the given function and
- initial accumulator value. The elements are visited in order from the
- lowest index to the highest. If <c><anno>Function</anno></c> is not a function, the
- call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldr-3">foldr/3</seealso>, <seealso marker="#map-2">map/2</seealso>, <seealso marker="#sparse_foldl-3">sparse_foldl/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="foldr" arity="3"/>
-<fsummary>Fold the elements of the array right-to-left using the given
- function and initial accumulator value.</fsummary>
-<desc><marker id="foldr-3"/>
-
-<p>Fold the elements of the array right-to-left using the given
- function and initial accumulator value. The elements are visited in
- order from the highest index to the lowest. If <c><anno>Function</anno></c> is not a
- function, the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldl-3">foldl/3</seealso>, <seealso marker="#map-2">map/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="from_list" arity="1"/>
-<fsummary>Equivalent to from_list(List, undefined).
-</fsummary>
-
-<desc><marker id="from_list-1"/>
-<p>Equivalent to <seealso marker="#from_list-2">from_list(<c><anno>List</anno></c>, undefined)</seealso>.</p>
-</desc></func>
-<func>
-<name name="from_list" arity="2"/>
-<fsummary>Convert a list to an extendible array.</fsummary>
-
-<desc><marker id="from_list-2"/>
-
-<p>Convert a list to an extendible array. <c><anno>Default</anno></c> is used as the value
- for uninitialized entries of the array. If <c><anno>List</anno></c> is not a proper list,
- the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#new-2">new/2</seealso>, <seealso marker="#to_list-1">to_list/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="from_orddict" arity="1"/>
-<fsummary>Equivalent to from_orddict(Orddict, undefined).
-</fsummary>
-
-<desc><marker id="from_orddict-1"/>
-<p>Equivalent to <seealso marker="#from_orddict-2">from_orddict(<c><anno>Orddict</anno></c>, undefined)</seealso>.</p>
-</desc></func>
-<func>
-<name name="from_orddict" arity="2"/>
-<fsummary>Convert an ordered list of pairs {Index, Value} to a
- corresponding extendible array.</fsummary>
-
-<desc><marker id="from_orddict-2"/>
-
-<p>Convert an ordered list of pairs <c>{Index, <anno>Value</anno>}</c> to a
- corresponding extendible array. <c><anno>Default</anno></c> is used as the value for
- uninitialized entries of the array. If <c><anno>Orddict</anno></c> is not a proper,
- ordered list of pairs whose first elements are nonnegative
- integers, the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#new-2">new/2</seealso>, <seealso marker="#to_orddict-1">to_orddict/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="get" arity="2"/>
-<fsummary>Get the value of entry I.</fsummary>
-
-<desc><marker id="get-2"/>
-
-<p>Get the value of entry <c><anno>I</anno></c>. If <c><anno>I</anno></c> is not a nonnegative
- integer, or if the array has fixed size and <c><anno>I</anno></c> is larger than the
- maximum index, the call fails with reason <c>badarg</c>.</p>
-
- <p>If the array does not have fixed size, this function will return the
- default value for any index <c><anno>I</anno></c> greater than <c>size(<anno>Array</anno>)-1</c>.</p>
-<p><em>See also:</em> <seealso marker="#set-3">set/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="is_array" arity="1"/>
-<fsummary>Returns true if X appears to be an array, otherwise false.</fsummary>
-
-<desc><marker id="is_array-1"/>
-
-<p>Returns <c>true</c> if <c><anno>X</anno></c> appears to be an array, otherwise <c>false</c>.
- Note that the check is only shallow; there is no guarantee that <c><anno>X</anno></c>
- is a well-formed array representation even if this function returns
- <c>true</c>.</p>
-</desc></func>
-<func>
-<name name="is_fix" arity="1"/>
-<fsummary>Check if the array has fixed size.</fsummary>
-
-<desc><marker id="is_fix-1"/>
-
-<p>Check if the array has fixed size.
- Returns <c>true</c> if the array is fixed, otherwise <c>false</c>.</p>
-<p><em>See also:</em> <seealso marker="#fix-1">fix/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="map" arity="2"/>
-<fsummary>Map the given function onto each element of the array.</fsummary>
-<desc><marker id="map-2"/>
-
-<p>Map the given function onto each element of the array. The
- elements are visited in order from the lowest index to the highest.
- If <c><anno>Function</anno></c> is not a function, the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldl-3">foldl/3</seealso>, <seealso marker="#foldr-3">foldr/3</seealso>, <seealso marker="#sparse_map-2">sparse_map/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="new" arity="0"/>
-<fsummary>Create a new, extendible array with initial size zero.</fsummary>
-
-<desc><marker id="new-0"/>
-
-<p>Create a new, extendible array with initial size zero.</p>
-<p><em>See also:</em> <seealso marker="#new-1">new/1</seealso>, <seealso marker="#new-2">new/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="new" arity="1"/>
-<fsummary>Create a new array according to the given options.</fsummary>
-
-<desc><marker id="new-1"/>
-
-<p>Create a new array according to the given options. By default,
-the array is extendible and has initial size zero. Array indices
-start at 0.</p>
-
- <p><c><anno>Options</anno></c> is a single term or a list of terms, selected from the
- following:
- </p><taglist>
- <tag><c>N::integer() >= 0</c> or <c>{size, N::integer() >= 0}</c></tag>
- <item><p>Specifies the initial size of the array; this also implies
- <c>{fixed, true}</c>. If <c>N</c> is not a nonnegative integer, the call
- fails with reason <c>badarg</c>.</p></item>
- <tag><c>fixed</c> or <c>{fixed, true}</c></tag>
- <item><p>Creates a fixed-size array; see also <seealso marker="#fix-1">fix/1</seealso>.</p></item>
- <tag><c>{fixed, false}</c></tag>
- <item><p>Creates an extendible (non fixed-size) array.</p></item>
- <tag><c>{default, Value}</c></tag>
- <item><p>Sets the default value for the array to <c>Value</c>.</p></item>
- </taglist><p>
-Options are processed in the order they occur in the list, i.e.,
-later options have higher precedence.</p>
-
- <p>The default value is used as the value of uninitialized entries, and
-cannot be changed once the array has been created.</p>
-
- <p>Examples:
- </p><pre> array:new(100)</pre><p> creates a fixed-size array of size 100.
- </p><pre> array:new({default,0})</pre><p> creates an empty, extendible array
- whose default value is 0.
- </p><pre> array:new([{size,10},{fixed,false},{default,-1}])</pre><p> creates an
- extendible array with initial size 10 whose default value is -1.
- </p>
-<p><em>See also:</em> <seealso marker="#fix-1">fix/1</seealso>, <seealso marker="#from_list-2">from_list/2</seealso>, <seealso marker="#get-2">get/2</seealso>, <seealso marker="#new-0">new/0</seealso>, <seealso marker="#new-2">new/2</seealso>, <seealso marker="#set-3">set/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="new" arity="2"/>
-<fsummary>Create a new array according to the given size and options.</fsummary>
-
-<desc><marker id="new-2"/>
-
-<p>Create a new array according to the given size and options. If
- <c><anno>Size</anno></c> is not a nonnegative integer, the call fails with reason
- <c>badarg</c>. By default, the array has fixed size. Note that any size
- specifications in <c><anno>Options</anno></c> will override the <c><anno>Size</anno></c> parameter.</p>
-
- <p>If <c><anno>Options</anno></c> is a list, this is simply equivalent to <c>new([{size,
- <anno>Size</anno>} | <anno>Options</anno>]</c>, otherwise it is equivalent to <c>new([{size, <anno>Size</anno>} |
- [<anno>Options</anno>]]</c>. However, using this function directly is more efficient.</p>
-
- <p>Example:
- </p><pre> array:new(100, {default,0})</pre><p> creates a fixed-size array of size
- 100, whose default value is 0.
- </p>
-<p><em>See also:</em> <seealso marker="#new-1">new/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="relax" arity="1"/>
-<fsummary>Make the array resizable.</fsummary>
-
-<desc><marker id="relax-1"/>
-
-<p>Make the array resizable. (Reverses the effects of <seealso marker="#fix-1">fix/1</seealso>.)</p>
-<p><em>See also:</em> <seealso marker="#fix-1">fix/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="reset" arity="2"/>
-<fsummary>Reset entry I to the default value for the array.</fsummary>
-
-<desc><marker id="reset-2"/>
-
-<p>Reset entry <c><anno>I</anno></c> to the default value for the array.
- If the value of entry <c><anno>I</anno></c> is the default value the array will be
- returned unchanged. Reset will never change size of the array.
- Shrinking can be done explicitly by calling <seealso marker="#resize-2">resize/2</seealso>.</p>
-
- <p>If <c><anno>I</anno></c> is not a nonnegative integer, or if the array has fixed size
- and <c><anno>I</anno></c> is larger than the maximum index, the call fails with reason
- <c>badarg</c>; cf. <seealso marker="#set-3">set/3</seealso>
- </p>
-<p><em>See also:</em> <seealso marker="#new-2">new/2</seealso>, <seealso marker="#set-3">set/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="resize" arity="1"/>
-<fsummary>Change the size of the array to that reported by sparse_size/1.</fsummary>
-
-<desc><marker id="resize-1"/>
-
-<p>Change the size of the array to that reported by <seealso marker="#sparse_size-1">sparse_size/1</seealso>. If the given array has fixed size, the resulting
- array will also have fixed size.</p>
-<p><em>See also:</em> <seealso marker="#resize-2">resize/2</seealso>, <seealso marker="#sparse_size-1">sparse_size/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="resize" arity="2"/>
-<fsummary>Change the size of the array.</fsummary>
-
-<desc><marker id="resize-2"/>
-
-<p>Change the size of the array. If <c><anno>Size</anno></c> is not a nonnegative
- integer, the call fails with reason <c>badarg</c>. If the given array has
- fixed size, the resulting array will also have fixed size.</p>
-</desc></func>
-<func>
-<name name="set" arity="3"/>
-<fsummary>Set entry I of the array to Value.</fsummary>
-
-<desc><marker id="set-3"/>
-
-<p>Set entry <c><anno>I</anno></c> of the array to <c><anno>Value</anno></c>. If <c><anno>I</anno></c> is not a
- nonnegative integer, or if the array has fixed size and <c><anno>I</anno></c> is larger
- than the maximum index, the call fails with reason <c>badarg</c>.</p>
-
- <p>If the array does not have fixed size, and <c><anno>I</anno></c> is greater than
- <c>size(<anno>Array</anno>)-1</c>, the array will grow to size <c><anno>I</anno>+1</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#get-2">get/2</seealso>, <seealso marker="#reset-2">reset/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="size" arity="1"/>
-<fsummary>Get the number of entries in the array.</fsummary>
-
-<desc><marker id="size-1"/>
-
-<p>Get the number of entries in the array. Entries are numbered
- from 0 to <c>size(<anno>Array</anno>)-1</c>; hence, this is also the index of the first
- entry that is guaranteed to not have been previously set.</p>
-<p><em>See also:</em> <seealso marker="#set-3">set/3</seealso>, <seealso marker="#sparse_size-1">sparse_size/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_foldl" arity="3"/>
-<fsummary>Fold the elements of the array using the given function and
- initial accumulator value, skipping default-valued entries.</fsummary>
-<desc><marker id="sparse_foldl-3"/>
-
-<p>Fold the elements of the array using the given function and
- initial accumulator value, skipping default-valued entries. The
- elements are visited in order from the lowest index to the highest.
- If <c><anno>Function</anno></c> is not a function, the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldl-3">foldl/3</seealso>, <seealso marker="#sparse_foldr-3">sparse_foldr/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_foldr" arity="3"/>
-<fsummary>Fold the elements of the array right-to-left using the given
- function and initial accumulator value, skipping default-valued
- entries.</fsummary>
-<desc><marker id="sparse_foldr-3"/>
-
-<p>Fold the elements of the array right-to-left using the given
- function and initial accumulator value, skipping default-valued
- entries. The elements are visited in order from the highest index to
- the lowest. If <c><anno>Function</anno></c> is not a function, the call fails with
- reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldr-3">foldr/3</seealso>, <seealso marker="#sparse_foldl-3">sparse_foldl/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_map" arity="2"/>
-<fsummary>Map the given function onto each element of the array, skipping
- default-valued entries.</fsummary>
-<desc><marker id="sparse_map-2"/>
-
-<p>Map the given function onto each element of the array, skipping
- default-valued entries. The elements are visited in order from the
- lowest index to the highest. If <c><anno>Function</anno></c> is not a function, the
- call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#map-2">map/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_size" arity="1"/>
-<fsummary>Get the number of entries in the array up until the last
- non-default valued entry.</fsummary>
-
-<desc><marker id="sparse_size-1"/>
-
-<p>Get the number of entries in the array up until the last
- non-default valued entry. In other words, returns <c>I+1</c> if <c>I</c> is the
- last non-default valued entry in the array, or zero if no such entry
- exists.</p>
-<p><em>See also:</em> <seealso marker="#resize-1">resize/1</seealso>, <seealso marker="#size-1">size/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_to_list" arity="1"/>
-<fsummary>Converts the array to a list, skipping default-valued entries.</fsummary>
-
-<desc><marker id="sparse_to_list-1"/>
-
-<p>Converts the array to a list, skipping default-valued entries.
- </p>
-<p><em>See also:</em> <seealso marker="#to_list-1">to_list/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_to_orddict" arity="1"/>
-<fsummary>Convert the array to an ordered list of pairs {Index, Value},
- skipping default-valued entries.</fsummary>
-
-<desc><marker id="sparse_to_orddict-1"/>
-
-<p>Convert the array to an ordered list of pairs <c>{Index, <anno>Value</anno>}</c>,
- skipping default-valued entries.
- </p>
-<p><em>See also:</em> <seealso marker="#to_orddict-1">to_orddict/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="to_list" arity="1"/>
-<fsummary>Converts the array to a list.</fsummary>
-
-<desc><marker id="to_list-1"/>
-
-<p>Converts the array to a list.
- </p>
-<p><em>See also:</em> <seealso marker="#from_list-2">from_list/2</seealso>, <seealso marker="#sparse_to_list-1">sparse_to_list/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="to_orddict" arity="1"/>
-<fsummary>Convert the array to an ordered list of pairs {Index, Value}.</fsummary>
-
-<desc><marker id="to_orddict-1"/>
-
-<p>Convert the array to an ordered list of pairs <c>{Index, <anno>Value</anno>}</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#from_orddict-2">from_orddict/2</seealso>, <seealso marker="#sparse_to_orddict-1">sparse_to_orddict/1</seealso>.</p>
-</desc></func></funcs>
-
+ <title>array</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno>1</docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>array.xml</file>
+ </header>
+ <module>array</module>
+ <modulesummary>Functional, extendible arrays.</modulesummary>
+ <description>
+ <p>Functional, extendible arrays. Arrays can have fixed size, or can grow
+ automatically as needed. A default value is used for entries that have not
+ been explicitly set.</p>
+
+ <p>Arrays uses <em>zero</em>-based indexing. This is a deliberate design
+ choice and differs from other Erlang data structures, for example,
+ tuples.</p>
+
+ <p>Unless specified by the user when the array is created, the default
+ value is the atom <c>undefined</c>. There is no difference between an
+ unset entry and an entry that has been explicitly set to the same value
+ as the default one (compare
+ <seealso marker="#reset-2"><c>reset/2</c></seealso>). If you need to
+ differentiate between unset and set entries, ensure that the default value
+ cannot be confused with the values of set entries.</p>
+
+ <p>The array never shrinks automatically. If an index <c>I</c> has been used
+ to set an entry successfully, all indices in the range [0,<c>I</c>] stay
+ accessible unless the array size is explicitly changed by calling
+ <seealso marker="#resize-2"><c>resize/2</c></seealso>.</p>
+
+ <p><em>Examples:</em></p>
+
+ <p>Create a fixed-size array with entries 0-9 set to <c>undefined</c>:</p>
+
+ <pre>
+A0 = array:new(10).
+10 = array:size(A0).</pre>
+
+ <p>Create an extendible array and set entry 17 to <c>true</c>, causing the
+ array to grow automatically:</p>
+
+ <pre>
+A1 = array:set(17, true, array:new()).
+18 = array:size(A1).</pre>
+
+ <p>Read back a stored value:</p>
+
+ <pre>
+true = array:get(17, A1).</pre>
+
+ <p>Accessing an unset entry returns default value:</p>
+
+ <pre>
+undefined = array:get(3, A1)</pre>
+
+ <p>Accessing an entry beyond the last set entry also returns the default
+ value, if the array does not have fixed size:</p>
+
+ <pre>
+undefined = array:get(18, A1).</pre>
+
+ <p>"Sparse" functions ignore default-valued entries:</p>
+
+ <pre>
+A2 = array:set(4, false, A1).
+[{4, false}, {17, true}] = array:sparse_to_orddict(A2).</pre>
+
+ <p>An extendible array can be made fixed-size later:</p>
+
+ <pre>
+A3 = array:fix(A2).</pre>
+
+ <p>A fixed-size array does not grow automatically and does not allow
+ accesses beyond the last set entry:</p>
+
+ <pre>
+{'EXIT',{badarg,_}} = (catch array:set(18, true, A3)).
+{'EXIT',{badarg,_}} = (catch array:get(18, A3)).</pre>
+ </description>
+
+ <datatypes>
+ <datatype>
+ <name name="array" n_vars="1"/>
+ <desc>
+ <p>A functional, extendible array. The representation is not documented
+ and is subject to change without notice. Notice that arrays cannot be
+ directly compared for equality.</p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="array" n_vars="0"/>
+ </datatype>
+ <datatype>
+ <name name="array_indx"/>
+ </datatype>
+ <datatype>
+ <name name="array_opts"/>
+ </datatype>
+ <datatype>
+ <name name="array_opt"/>
+ </datatype>
+ <datatype>
+ <name name="indx_pairs"/>
+ </datatype>
+ <datatype>
+ <name name="indx_pair"/>
+ </datatype>
+ </datatypes>
+
+ <funcs>
+ <func>
+ <name name="default" arity="1"/>
+ <fsummary>Get the value used for uninitialized entries.</fsummary>
+ <desc><marker id="default-1"/>
+ <p>Gets the value used for uninitialized entries.</p>
+ <p>See also <seealso marker="#new-2"><c>new/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="fix" arity="1"/>
+ <fsummary>Fix the array size.</fsummary>
+ <desc><marker id="fix-1"/>
+ <p>Fixes the array size. This prevents it from growing automatically
+ upon insertion.</p>
+ <p>See also <seealso marker="#set-3"><c>set/3</c></seealso> and
+ <seealso marker="#relax-1"><c>relax/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="foldl" arity="3"/>
+ <fsummary>Fold the array elements using the specified function and initial
+ accumulator value.</fsummary>
+ <desc><marker id="foldl-3"/>
+ <p>Folds the array elements using the specified function and initial
+ accumulator value. The elements are visited in order from the lowest
+ index to the highest. If <c><anno>Function</anno></c> is not a
+ function, the call fails with reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldr-3"><c>foldr/3</c></seealso>,
+ <seealso marker="#map-2"><c>map/2</c></seealso>,
+ <seealso marker="#sparse_foldl-3"><c>sparse_foldl/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="foldr" arity="3"/>
+ <fsummary>Fold the array elements right-to-left using the specified
+ function and initial accumulator value.</fsummary>
+ <desc><marker id="foldr-3"/>
+ <p>Folds the array elements right-to-left using the specified function
+ and initial accumulator value. The elements are visited in order from
+ the highest index to the lowest. If <c><anno>Function</anno></c> is
+ not a function, the call fails with reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldl-3"><c>foldl/3</c></seealso>,
+ <seealso marker="#map-2"><c>map/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="from_list" arity="1"/>
+ <fsummary>Equivalent to <c>from_list(List, undefined)</c>.</fsummary>
+ <desc><marker id="from_list-1"/>
+ <p>Equivalent to
+ <seealso marker="#from_list-2"><c>from_list(<anno>List</anno>, undefined)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="from_list" arity="2"/>
+ <fsummary>Convert a list to an extendible array.</fsummary>
+ <desc><marker id="from_list-2"/>
+ <p>Converts a list to an extendible array. <c><anno>Default</anno></c>
+ is used as the value for uninitialized entries of the array. If
+ <c><anno>List</anno></c> is not a proper list, the call fails with
+ reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#new-2"><c>new/2</c></seealso>,
+ <seealso marker="#to_list-1"><c>to_list/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="from_orddict" arity="1"/>
+ <fsummary>Equivalent to <c>from_orddict(Orddict, undefined)</c>.
+ </fsummary>
+ <desc><marker id="from_orddict-1"/>
+ <p>Equivalent to
+ <seealso marker="#from_orddict-2"><c>from_orddict(<anno>Orddict</anno>, undefined)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="from_orddict" arity="2"/>
+ <fsummary>Convert an ordered list of pairs <c>{Index, Value}</c> to a
+ corresponding extendible array.</fsummary>
+ <desc><marker id="from_orddict-2"/>
+ <p>Converts an ordered list of pairs <c>{Index, <anno>Value</anno>}</c>
+ to a corresponding extendible array. <c><anno>Default</anno></c> is
+ used as the value for uninitialized entries of the array. If
+ <c><anno>Orddict</anno></c> is not a proper, ordered list of pairs
+ whose first elements are non-negative integers, the call fails with
+ reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#new-2"><c>new/2</c></seealso>,
+ <seealso marker="#to_orddict-1"><c>to_orddict/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="get" arity="2"/>
+ <fsummary>Get the value of entry <c>I</c>.</fsummary>
+ <desc><marker id="get-2"/>
+ <p>Gets the value of entry <c><anno>I</anno></c>. If
+ <c><anno>I</anno></c> is not a non-negative integer, or if the array
+ has fixed size and <c><anno>I</anno></c> is larger than the maximum
+ index, the call fails with reason <c>badarg</c>.</p>
+ <p>If the array does not have fixed size, the default value for any
+ index <c><anno>I</anno></c> greater than
+ <c>size(<anno>Array</anno>)-1</c> is returned.</p>
+ <p>See also <seealso marker="#set-3"><c>set/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="is_array" arity="1"/>
+ <fsummary>Returns <c>true</c> if <c>X</c> is an array, otherwise
+ <c>false</c>.</fsummary>
+ <desc><marker id="is_array-1"/>
+ <p>Returns <c>true</c> if <c><anno>X</anno></c> is an array, otherwise
+ <c>false</c>. Notice that the check is only shallow, as there is no
+ guarantee that <c><anno>X</anno></c> is a well-formed array
+ representation even if this function returns <c>true</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="is_fix" arity="1"/>
+ <fsummary>Check if the array has fixed size.</fsummary>
+ <desc><marker id="is_fix-1"/>
+ <p>Checks if the array has fixed size. Returns <c>true</c> if the array
+ is fixed, otherwise <c>false</c>.</p>
+ <p>See also <seealso marker="#fix-1"><c>fix/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="map" arity="2"/>
+ <fsummary>Map the specified function onto each array element.</fsummary>
+ <desc><marker id="map-2"/>
+ <p>Maps the specified function onto each array element. The elements are
+ visited in order from the lowest index to the highest. If
+ <c><anno>Function</anno></c> is not a function, the call fails with
+ reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldl-3"><c>foldl/3</c></seealso>,
+ <seealso marker="#foldr-3"><c>foldr/3</c></seealso>,
+ <seealso marker="#sparse_map-2"><c>sparse_map/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="new" arity="0"/>
+ <fsummary>Create a new, extendible array with initial size zero.
+ </fsummary>
+ <desc><marker id="new-0"/>
+ <p>Creates a new, extendible array with initial size zero.</p>
+ <p>See also <seealso marker="#new-1"><c>new/1</c></seealso>,
+ <seealso marker="#new-2"><c>new/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="new" arity="1"/>
+ <fsummary>Create a new array according to the specified options.
+ </fsummary>
+ <desc><marker id="new-1"/>
+ <p>Creates a new array according to the specified otions. By default,
+ the array is extendible and has initial size zero. Array indices
+ start at <c>0</c>.</p>
+ <p><c><anno>Options</anno></c> is a single term or a list of terms,
+ selected from the following:</p>
+ <taglist>
+ <tag><c>N::integer() >= 0</c> or <c>{size, N::integer() >= 0}</c>
+ </tag>
+ <item><p>Specifies the initial array size; this also implies
+ <c>{fixed, true}</c>. If <c>N</c> is not a non-negative integer, the
+ call fails with reason <c>badarg</c>.</p></item>
+ <tag><c>fixed</c> or <c>{fixed, true}</c></tag>
+ <item><p>Creates a fixed-size array. See also
+ <seealso marker="#fix-1"><c>fix/1</c></seealso>.</p></item>
+ <tag><c>{fixed, false}</c></tag>
+ <item><p>Creates an extendible (non-fixed-size) array.</p></item>
+ <tag><c>{default, Value}</c></tag>
+ <item><p>Sets the default value for the array to <c>Value</c>.</p>
+ </item>
+ </taglist>
+ <p>Options are processed in the order they occur in the list, that is,
+ later options have higher precedence.</p>
+ <p>The default value is used as the value of uninitialized entries, and
+ cannot be changed once the array has been created.</p>
+ <p><em>Examples:</em></p>
+ <pre>
+array:new(100)</pre>
+ <p>creates a fixed-size array of size 100.</p>
+ <pre>
+array:new({default,0})</pre>
+ <p>creates an empty, extendible array whose default value is <c>0</c>.
+ </p>
+ <pre>
+array:new([{size,10},{fixed,false},{default,-1}])</pre>
+ <p>creates an extendible array with initial size 10 whose default value
+ is <c>-1</c>.</p>
+ <p>See also <seealso marker="#fix-1"><c>fix/1</c></seealso>,
+ <seealso marker="#from_list-2"><c>from_list/2</c></seealso>,
+ <seealso marker="#get-2"><c>get/2</c></seealso>,
+ <seealso marker="#new-0"><c>new/0</c></seealso>,
+ <seealso marker="#new-2"><c>new/2</c></seealso>,
+ <seealso marker="#set-3"><c>set/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="new" arity="2"/>
+ <fsummary>Create a new array according to the specified size and options.
+ </fsummary>
+ <desc><marker id="new-2"/>
+ <p>Creates a new array according to the specified size and options. If
+ <c><anno>Size</anno></c> is not a non-negative integer, the call fails
+ with reason <c>badarg</c>. By default, the array has fixed size.
+ Notice that any size specifications in <c><anno>Options</anno></c>
+ override parameter <c><anno>Size</anno></c>.</p>
+ <p>If <c><anno>Options</anno></c> is a list, this is equivalent to
+ <c>new([{size, <anno>Size</anno>} | <anno>Options</anno>]</c>,
+ otherwise it is equivalent to <c>new([{size, <anno>Size</anno>} |
+ [<anno>Options</anno>]]</c>. However, using this function directly is
+ more efficient.</p>
+ <p><em>Example:</em></p>
+ <pre>
+array:new(100, {default,0})</pre>
+ <p>creates a fixed-size array of size 100, whose default value is
+ <c>0</c>.</p>
+ <p>See also <seealso marker="#new-1"><c>new/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="relax" arity="1"/>
+ <fsummary>Make the array resizable.</fsummary>
+ <desc><marker id="relax-1"/>
+ <p>Makes the array resizable. (Reverses the effects of
+ <seealso marker="#fix-1"><c>fix/1</c></seealso>.)</p>
+ <p>See also <seealso marker="#fix-1"><c>fix/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="reset" arity="2"/>
+ <fsummary>Reset entry <c>I</c> to the default value for the array.
+ </fsummary>
+ <desc><marker id="reset-2"/>
+ <p>Resets entry <c><anno>I</anno></c> to the default value for the
+ array. If the value of entry <c><anno>I</anno></c> is the default
+ value, the array is returned unchanged. Reset never changes the array
+ size. Shrinking can be done explicitly by calling
+ <seealso marker="#resize-2"><c>resize/2</c></seealso>.</p>
+ <p>If <c><anno>I</anno></c> is not a non-negative integer, or if the
+ array has fixed size and <c><anno>I</anno></c> is larger than the
+ maximum index, the call fails with reason <c>badarg</c>; compare
+ <seealso marker="#set-3"><c>set/3</c></seealso></p>
+ <p>See also <seealso marker="#new-2"><c>new/2</c></seealso>,
+ <seealso marker="#set-3"><c>set/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="resize" arity="1"/>
+ <fsummary>Change the array size to that reported by <c>sparse_size/1</c>.
+ </fsummary>
+ <desc><marker id="resize-1"/>
+ <p>Changes the array size to that reported by
+ <seealso marker="#sparse_size-1"><c>sparse_size/1</c></seealso>. If
+ the specified array has fixed size, also the resulting array has fixed
+ size.</p>
+ <p>See also <seealso marker="#resize-2"><c>resize/2</c></seealso>,
+ <seealso marker="#sparse_size-1"><c>sparse_size/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="resize" arity="2"/>
+ <fsummary>Change the array size.</fsummary>
+ <desc><marker id="resize-2"/>
+ <p>Change the array size. If <c><anno>Size</anno></c> is not a
+ non-negative integer, the call fails with reason <c>badarg</c>. If
+ the specified array has fixed size, also the resulting array has fixed
+ size.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="set" arity="3"/>
+ <fsummary>Set entry <c>I</c> of the array to <c>Value</c>.</fsummary>
+ <desc><marker id="set-3"/>
+ <p>Sets entry <c><anno>I</anno></c> of the array to
+ <c><anno>Value</anno></c>. If <c><anno>I</anno></c> is not a
+ non-negative integer, or if the array has fixed size and
+ <c><anno>I</anno></c> is larger than the maximum index, the call
+ fails with reason <c>badarg</c>.</p>
+ <p>If the array does not have fixed size, and <c><anno>I</anno></c> is
+ greater than <c>size(<anno>Array</anno>)-1</c>, the array grows to
+ size <c><anno>I</anno>+1</c>.</p>
+ <p>See also <seealso marker="#get-2"><c>get/2</c></seealso>,
+ <seealso marker="#reset-2"><c>reset/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="size" arity="1"/>
+ <fsummary>Get the number of entries in the array.</fsummary>
+ <desc><marker id="size-1"/>
+ <p>Gets the number of entries in the array. Entries are numbered from
+ <c>0</c> to <c>size(<anno>Array</anno>)-1</c>. Hence, this is also the
+ index of the first entry that is guaranteed to not have been
+ previously set.</p>
+ <p>See also <seealso marker="#set-3"><c>set/3</c></seealso>,
+ <seealso marker="#sparse_size-1"><c>sparse_size/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_foldl" arity="3"/>
+ <fsummary>Fold the array elements using the specified function and initial
+ accumulator value, skipping default-valued entries.</fsummary>
+ <desc><marker id="sparse_foldl-3"/>
+ <p>Folds the array elements using the specified function and initial
+ accumulator value, skipping default-valued entries. The elements are
+ visited in order from the lowest index to the highest. If
+ <c><anno>Function</anno></c> is not a function, the call fails with
+ reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldl-3"><c>foldl/3</c></seealso>,
+ <seealso marker="#sparse_foldr-3"><c>sparse_foldr/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_foldr" arity="3"/>
+ <fsummary>Fold the array elements right-to-left using the specified
+ function and initial accumulator value, skipping default-valued
+ entries.</fsummary>
+ <desc><marker id="sparse_foldr-3"/>
+ <p>Folds the array elements right-to-left using the specified
+ function and initial accumulator value, skipping default-valued
+ entries. The elements are visited in order from the highest index to
+ the lowest. If <c><anno>Function</anno></c> is not a function, the
+ call fails with reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldr-3"><c>foldr/3</c></seealso>,
+ <seealso marker="#sparse_foldl-3"><c>sparse_foldl/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_map" arity="2"/>
+ <fsummary>Map the specified function onto each array element, skipping
+ default-valued entries.</fsummary>
+ <desc><marker id="sparse_map-2"/>
+ <p>Maps the specified function onto each array element, skipping
+ default-valued entries. The elements are visited in order from the
+ lowest index to the highest. If <c><anno>Function</anno></c> is not a
+ function, the call fails with reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#map-2"><c>map/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_size" arity="1"/>
+ <fsummary>Get the number of entries in the array up until the last
+ non-default-valued entry.</fsummary>
+ <desc><marker id="sparse_size-1"/>
+ <p>Gets the number of entries in the array up until the last
+ non-default-valued entry. That is, returns <c>I+1</c> if <c>I</c> is
+ the last non-default-valued entry in the array, or zero if no such
+ entry exists.</p>
+ <p>See also <seealso marker="#resize-1"><c>resize/1</c></seealso>,
+ <seealso marker="#size-1"><c>size/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_to_list" arity="1"/>
+ <fsummary>Convert the array to a list, skipping default-valued entries.
+ </fsummary>
+ <desc><marker id="sparse_to_list-1"/>
+ <p>Converts the array to a list, skipping default-valued entries.</p>
+ <p>See also <seealso marker="#to_list-1"><c>to_list/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_to_orddict" arity="1"/>
+ <fsummary>Convert the array to an ordered list of pairs <c>{Index,
+ Value}</c>, skipping default-valued entries.</fsummary>
+ <desc><marker id="sparse_to_orddict-1"/>
+ <p>Converts the array to an ordered list of pairs <c>{Index,
+ <anno>Value</anno>}</c>, skipping default-valued entries.</p>
+ <p>See also
+ <seealso marker="#to_orddict-1"><c>to_orddict/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="to_list" arity="1"/>
+ <fsummary>Convert the array to a list.</fsummary>
+ <desc><marker id="to_list-1"/>
+ <p>Converts the array to a list.</p>
+ <p>See also <seealso marker="#from_list-2"><c>from_list/2</c></seealso>,
+ <seealso marker="#sparse_to_list-1"><c>sparse_to_list/1</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="to_orddict" arity="1"/>
+ <fsummary>Convert the array to an ordered list of pairs <c>{Index,
+ Value}</c>.</fsummary>
+ <desc><marker id="to_orddict-1"/>
+ <p>Converts the array to an ordered list of pairs <c>{Index,
+ <anno>Value</anno>}</c>.</p>
+ <p>See also
+ <seealso marker="#from_orddict-2"><c>from_orddict/2</c></seealso>,
+ <seealso marker="#sparse_to_orddict-1"><c>sparse_to_orddict/1</c></seealso>.
+ </p>
+ </desc>
+ </func>
+ </funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/assert_hrl.xml b/lib/stdlib/doc/src/assert_hrl.xml
index ef4f928e57..e2dfc2ab9b 100644
--- a/lib/stdlib/doc/src/assert_hrl.xml
+++ b/lib/stdlib/doc/src/assert_hrl.xml
@@ -28,131 +28,134 @@
<date></date>
<rev></rev>
</header>
- <file>assert.hrl</file>
- <filesummary>Assert Macros</filesummary>
+ <file>assert.hrl.xml</file>
+ <filesummary>Assert macros.</filesummary>
<description>
<p>The include file <c>assert.hrl</c> provides macros for inserting
- assertions in your program code.</p>
- <p>These macros are defined in the Stdlib include file
- <c>assert.hrl</c>. Include the following directive in the module
- from which the function is called:</p>
- <code type="none">
+ assertions in your program code.</p>
+
+ <p>Include the following directive in the module from which the function is
+ called:</p>
+
+ <code type="none">
-include_lib("stdlib/include/assert.hrl").</code>
- <p>When an assertion succeeds, the assert macro yields the atom
- <c>ok</c>. When an assertion fails, an exception of type <c>error</c> is
- instead generated. The associated error term will have the form
- <c>{Macro, Info}</c>, where <c>Macro</c> is the name of the macro, for
- example <c>assertEqual</c>, and <c>Info</c> will be a list of tagged
- values such as <c>[{module, M}, {line, L}, ...]</c> giving more
- information about the location and cause of the exception. All entries
- in the <c>Info</c> list are optional, and you should not rely
- programatically on any of them being present.</p>
-
- <p>If the macro <c>NOASSERT</c> is defined when the <c>assert.hrl</c>
- include file is read by the compiler, the macros will be defined as
- equivalent to the atom <c>ok</c>. The test will not be performed, and
- there will be no cost at runtime.</p>
+
+ <p>When an assertion succeeds, the assert macro yields the atom <c>ok</c>.
+ When an assertion fails, an exception of type <c>error</c> is generated.
+ The associated error term has the form <c>{Macro, Info}</c>. <c>Macro</c>
+ is the macro name, for example, <c>assertEqual</c>. <c>Info</c> is a list
+ of tagged values, such as <c>[{module, M}, {line, L}, ...]</c>, which
+ gives more information about the location and cause of the exception. All
+ entries in the <c>Info</c> list are optional; do not rely programatically
+ on any of them being present.</p>
+
+ <p>If the macro <c>NOASSERT</c> is defined when <c>assert.hrl</c> is read
+ by the compiler, the macros are defined as equivalent to the atom
+ <c>ok</c>. The test is not performed and there is no cost at runtime.</p>
<p>For example, using <c>erlc</c> to compile your modules, the following
- will disable all assertions:</p>
- <code type="none">
+ disable all assertions:</p>
+
+ <code type="none">
erlc -DNOASSERT=true *.erl</code>
- <p>(The value of <c>NOASSERT</c> does not matter, only the fact that it
- is defined.)</p>
+
+ <p>The value of <c>NOASSERT</c> does not matter, only the fact that it is
+ defined.</p>
+
<p>A few other macros also have effect on the enabling or disabling of
- assertions:</p>
+ assertions:</p>
+
<list type="bulleted">
- <item>If <c>NODEBUG</c> is defined, it implies <c>NOASSERT</c>, unless
- <c>DEBUG</c> is also defined, which is assumed to take
- precedence.</item>
- <item>If <c>ASSERT</c> is defined, it overrides <c>NOASSERT</c>, that
- is, the assertions will remain enabled.</item>
+ <item><p>If <c>NODEBUG</c> is defined, it implies <c>NOASSERT</c>, unless
+ <c>DEBUG</c> is also defined, which is assumed to take precedence.</p>
+ </item>
+ <item><p>If <c>ASSERT</c> is defined, it overrides <c>NOASSERT</c>, that
+ is, the assertions remain enabled.</p></item>
</list>
- <p>If you prefer, you can thus use only <c>DEBUG</c>/<c>NODEBUG</c> as
- the main flags to control the behaviour of the assertions (which is
- useful if you have other compiler conditionals or debugging macros
- controlled by those flags), or you can use <c>ASSERT</c>/<c>NOASSERT</c>
- to control only the assert macros.</p>
+ <p>If you prefer, you can thus use only <c>DEBUG</c>/<c>NODEBUG</c> as the
+ main flags to control the behavior of the assertions (which is useful if
+ you have other compiler conditionals or debugging macros controlled by
+ those flags), or you can use <c>ASSERT</c>/<c>NOASSERT</c> to control only
+ the assert macros.</p>
</description>
<section>
<title>Macros</title>
<taglist>
<tag><c>assert(BoolExpr)</c></tag>
- <item><p>Tests that <c>BoolExpr</c> completes normally returning
- <c>true</c>.</p>
+ <item>
+ <p>Tests that <c>BoolExpr</c> completes normally returning
+ <c>true</c>.</p>
</item>
-
<tag><c>assertNot(BoolExpr)</c></tag>
- <item><p>Tests that <c>BoolExpr</c> completes normally returning
- <c>false</c>.</p>
+ <item>
+ <p>Tests that <c>BoolExpr</c> completes normally returning
+ <c>false</c>.</p>
</item>
-
<tag><c>assertMatch(GuardedPattern, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes normally yielding a value
- that matches <c>GuardedPattern</c>. For example:</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes normally yielding a value that
+ matches <c>GuardedPattern</c>, for example:</p>
<code type="none">
- ?assertMatch({bork, _}, f())</code>
- <p>Note that a guard <c>when ...</c> can be included:</p>
+?assertMatch({bork, _}, f())</code>
+ <p>Notice that a guard <c>when ...</c> can be included:</p>
<code type="none">
- ?assertMatch({bork, X} when X > 0, f())</code>
+?assertMatch({bork, X} when X > 0, f())</code>
</item>
-
<tag><c>assertNotMatch(GuardedPattern, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes normally yielding a value
- that does not match <c>GuardedPattern</c>.</p>
- <p>As in <c>assertMatch</c>, <c>GuardedPattern</c> can have a
- <c>when</c> part.</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes normally yielding a value that does
+ not match <c>GuardedPattern</c>.</p>
+ <p>As in <c>assertMatch</c>, <c>GuardedPattern</c> can have a
+ <c>when</c> part.</p>
</item>
-
<tag><c>assertEqual(ExpectedValue, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes normally yielding a value
- that is exactly equal to <c>ExpectedValue</c>.</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes normally yielding a value that is
+ exactly equal to <c>ExpectedValue</c>.</p>
</item>
-
<tag><c>assertNotEqual(ExpectedValue, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes normally yielding a value
- that is not exactly equal to <c>ExpectedValue</c>.</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes normally yielding a value that is
+ not exactly equal to <c>ExpectedValue</c>.</p>
</item>
-
<tag><c>assertException(Class, Term, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes abnormally with an exception
- of type <c>Class</c> and with the associated <c>Term</c>. The
- assertion fails if <c>Expr</c> raises a different exception or if it
- completes normally returning any value.</p>
- <p>Note that both <c>Class</c> and <c>Term</c> can be guarded
- patterns, as in <c>assertMatch</c>.</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes abnormally with an exception of type
+ <c>Class</c> and with the associated <c>Term</c>. The assertion fails
+ if <c>Expr</c> raises a different exception or if it completes
+ normally returning any value.</p>
+ <p>Notice that both <c>Class</c> and <c>Term</c> can be guarded
+ patterns, as in <c>assertMatch</c>.</p>
</item>
-
<tag><c>assertNotException(Class, Term, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> does not evaluate abnormally with an
- exception of type <c>Class</c> and with the associated <c>Term</c>.
- The assertion succeeds if <c>Expr</c> raises a different exception or
- if it completes normally returning any value.</p>
- <p>As in <c>assertException</c>, both <c>Class</c> and <c>Term</c>
- can be guarded patterns.</p>
+ <item>
+ <p>Tests that <c>Expr</c> does not evaluate abnormally with an
+ exception of type <c>Class</c> and with the associated <c>Term</c>.
+ The assertion succeeds if <c>Expr</c> raises a different exception or
+ if it completes normally returning any value.</p>
+ <p>As in <c>assertException</c>, both <c>Class</c> and <c>Term</c> can
+ be guarded patterns.</p>
</item>
-
<tag><c>assertError(Term, Expr)</c></tag>
- <item><p>Equivalent to <c>assertException(error, Term,
- Expr)</c></p>
+ <item>
+ <p>Equivalent to <c>assertException(error, Term, Expr)</c></p>
</item>
-
<tag><c>assertExit(Term, Expr)</c></tag>
- <item><p>Equivalent to <c>assertException(exit, Term, Expr)</c></p>
+ <item>
+ <p>Equivalent to <c>assertException(exit, Term, Expr)</c></p>
</item>
-
<tag><c>assertThrow(Term, Expr)</c></tag>
- <item><p>Equivalent to <c>assertException(throw, Term, Expr)</c></p>
+ <item>
+ <p>Equivalent to <c>assertException(throw, Term, Expr)</c></p>
</item>
-
</taglist>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="compiler:compile">compile(3)</seealso></p>
- <p><seealso marker="erts:erlc">erlc(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="compiler:compile"><c>compile(3)</c></seealso>,
+ <seealso marker="erts:erlc"><c>erlc(3)</c></seealso></p>
</section>
</fileref>
diff --git a/lib/stdlib/doc/src/base64.xml b/lib/stdlib/doc/src/base64.xml
index 276d28e174..cfa1ecc006 100644
--- a/lib/stdlib/doc/src/base64.xml
+++ b/lib/stdlib/doc/src/base64.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -27,50 +27,57 @@
<docno></docno>
<date>2007-02-22</date>
<rev></rev>
- <file>base64.sgml</file>
+ <file>base64.xml</file>
</header>
<module>base64</module>
- <modulesummary>Implements base 64 encode and decode, see RFC2045.</modulesummary>
+ <modulesummary>Provides base64 encode and decode, see
+ RFC 2045.</modulesummary>
<description>
- <p>Implements base 64 encode and decode, see RFC2045. </p>
+ <p>Provides base64 encode and decode, see
+ <url href="https://www.ietf.org/rfc/rfc2045.txt">RFC 2045</url>.</p>
</description>
+
<datatypes>
<datatype>
<name name="ascii_string"/>
</datatype>
<datatype>
<name name="ascii_binary"/>
- <desc><p>A <c>binary()</c> with ASCII characters in the range 1 to 255.</p>
+ <desc><p>A <c>binary()</c> with ASCII characters in the range 1 to
+ 255.</p>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="encode" arity="1"/>
- <name name="encode_to_string" arity="1"/>
- <fsummary>Encodes data into base64. </fsummary>
- <type variable="Data"/>
- <type variable="Base64" name_i="1"/>
- <type variable="Base64String"/>
- <desc>
- <p>Encodes a plain ASCII string into base64. The result will
- be 33% larger than the data.</p>
- </desc>
- </func>
- <func>
<name name="decode" arity="1"/>
<name name="decode_to_string" arity="1"/>
<name name="mime_decode" arity="1"/>
<name name="mime_decode_to_string" arity="1"/>
- <fsummary>Decodes a base64 encoded string to data. </fsummary>
+ <fsummary>Decode a base64 encoded string to data.</fsummary>
<type variable="Base64" name_i="1"/>
<type variable="Data" name_i="1"/>
<type variable="DataString" name_i="2"/>
<desc>
- <p>Decodes a base64 encoded string to plain ASCII. See RFC4648.
- <c>mime_decode/1</c> and <c>mime_decode_to_string/1</c>
- strips away illegal characters, while <c>decode/1</c> and
- <c>decode_to_string/1</c> only strips away whitespace characters.</p>
+ <p>Decodes a base64-encoded string to plain ASCII. See
+ <url href="https://www.ietf.org/html/rfc4648">RFC 4648</url>.</p>
+ <p><c>mime_decode/1</c> and <c>mime_decode_to_string/1</c> strip away
+ illegal characters, while <c>decode/1</c> and
+ <c>decode_to_string/1</c> only strip away whitespace characters.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="encode" arity="1"/>
+ <name name="encode_to_string" arity="1"/>
+ <fsummary>Encode data into base64.</fsummary>
+ <type variable="Data"/>
+ <type variable="Base64" name_i="1"/>
+ <type variable="Base64String"/>
+ <desc>
+ <p>Encodes a plain ASCII string into base64. The result is 33% larger
+ than the data.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/beam_lib.xml b/lib/stdlib/doc/src/beam_lib.xml
index 7c89c8b43e..d5ec90b060 100644
--- a/lib/stdlib/doc/src/beam_lib.xml
+++ b/lib/stdlib/doc/src/beam_lib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2015</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,137 +29,159 @@
<rev>PA1</rev>
</header>
<module>beam_lib</module>
- <modulesummary>An Interface To the BEAM File Format</modulesummary>
+ <modulesummary>An interface to the BEAM file format.</modulesummary>
<description>
- <p><c>beam_lib</c> provides an interface to files created by
- the BEAM compiler ("BEAM files"). The format used, a variant of
+ <p>This module provides an interface to files created by
+ the BEAM Compiler ("BEAM files"). The format used, a variant of
"EA IFF 1985" Standard for Interchange Format Files, divides data
into chunks.</p>
+
<p>Chunk data can be returned as binaries or as compound terms.
Compound terms are returned when chunks are referenced by names
- (atoms) rather than identifiers (strings). The names recognized
- and the corresponding identifiers are:</p>
+ (atoms) rather than identifiers (strings). The recognized names
+ and the corresponding identifiers are as follows:</p>
+
<list type="bulleted">
<item><c>abstract_code ("Abst")</c></item>
+ <item><c>atoms ("Atom")</c></item>
<item><c>attributes ("Attr")</c></item>
<item><c>compile_info ("CInf")</c></item>
<item><c>exports ("ExpT")</c></item>
- <item><c>labeled_exports ("ExpT")</c></item>
<item><c>imports ("ImpT")</c></item>
<item><c>indexed_imports ("ImpT")</c></item>
- <item><c>locals ("LocT")</c></item>
+ <item><c>labeled_exports ("ExpT")</c></item>
<item><c>labeled_locals ("LocT")</c></item>
- <item><c>atoms ("Atom")</c></item>
+ <item><c>locals ("LocT")</c></item>
</list>
</description>
<section>
<marker id="debug_info"></marker>
<title>Debug Information/Abstract Code</title>
- <p>The option <c>debug_info</c> can be given to the compiler (see
- <seealso marker="compiler:compile#debug_info">compile(3)</seealso>)
- in order to have debug information in the form of abstract code
- (see <seealso marker="erts:absform">The Abstract Format</seealso>
- in ERTS User's Guide) stored in the <c>abstract_code</c> chunk.
+ <p>Option <c>debug_info</c> can be specified to the Compiler (see
+ <seealso marker="compiler:compile#debug_info"><c>compile(3)</c></seealso>)
+ to have debug information in the form of abstract code (see section
+ <seealso marker="erts:absform">The Abstract Format</seealso> in the
+ ERTS User's Guide) stored in the <c>abstract_code</c> chunk.
Tools such as Debugger and Xref require the debug information to
be included.</p>
+
<warning>
<p>Source code can be reconstructed from the debug information.
- Use encrypted debug information (see below) to prevent this.</p>
+ To prevent this, use encrypted debug information (see below).</p>
</warning>
+
<p>The debug information can also be removed from BEAM files
- using <seealso marker="#strip/1">strip/1</seealso>,
- <seealso marker="#strip_files/1">strip_files/1</seealso> and/or
- <seealso marker="#strip_release/1">strip_release/1</seealso>.</p>
+ using <seealso marker="#strip/1"><c>strip/1</c></seealso>,
+ <seealso marker="#strip_files/1"><c>strip_files/1</c></seealso>, and/or
+ <seealso marker="#strip_release/1"><c>strip_release/1</c></seealso>.</p>
</section>
- <section>
- <title>Reconstructing source code</title>
- <p>Here is an example of how to reconstruct source code from
- the debug information in a BEAM file <c>Beam</c>:</p>
- <code type="none">
- {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(Beam,[abstract_code]).
- io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).</code>
- </section>
- <section>
- <title>Encrypted debug information</title>
- <p>The debug information can be encrypted in order to keep
- the source code secret, but still being able to use tools such as
- Xref or Debugger. </p>
- <p>To use encrypted debug information, a key must be provided to
- the compiler and <c>beam_lib</c>. The key is given as a string and
- it is recommended that it contains at least 32 characters and
- that both upper and lower case letters as well as digits and
- special characters are used.</p>
- <p>The default type -- and currently the only type -- of crypto
- algorithm is <c>des3_cbc</c>, three rounds of DES. The key string
- will be scrambled using <c>erlang:md5/1</c> to generate
- the actual keys used for <c>des3_cbc</c>.</p>
- <note>
- <p>As far as we know by the time of writing, it is
- infeasible to break <c>des3_cbc</c> encryption without any
- knowledge of the key. Therefore, as long as the key is kept
- safe and is unguessable, the encrypted debug information
- <em>should</em> be safe from intruders.</p>
- </note>
- <p>There are two ways to provide the key:</p>
- <list type="ordered">
- <item>
- <p>Use the compiler option <c>{debug_info,Key}</c>, see
- <seealso marker="compiler:compile#debug_info_key">compile(3)</seealso>,
- and the function
- <seealso marker="#crypto_key_fun/1">crypto_key_fun/1</seealso>
- to register a fun which returns the key whenever
- <c>beam_lib</c> needs to decrypt the debug information.</p>
- <p>If no such fun is registered, <c>beam_lib</c> will instead
- search for a <c>.erlang.crypt</c> file, see below.</p>
- </item>
- <item>
- <p>Store the key in a text file named <c>.erlang.crypt</c>.</p>
- <p>In this case, the compiler option <c>encrypt_debug_info</c>
- can be used, see
- <seealso marker="compiler:compile#encrypt_debug_info">compile(3)</seealso>.</p>
- </item>
- </list>
+
+ <section>
+ <title>Reconstruct Source Code</title>
+ <p>The following example shows how to reconstruct source code from
+ the debug information in a BEAM file <c>Beam</c>:</p>
+
+ <code type="none">
+{ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(Beam,[abstract_code]).
+io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).</code>
</section>
- <section>
- <title>.erlang.crypt</title>
- <p><c>beam_lib</c> searches for <c>.erlang.crypt</c> in the current
- directory and then the home directory for the current user. If
- the file is found and contains a key, <c>beam_lib</c> will
- implicitly create a crypto key fun and register it.</p>
- <p>The <c>.erlang.crypt</c> file should contain a single list of
- tuples:</p>
- <code type="none">
- {debug_info, Mode, Module, Key}</code>
- <p><c>Mode</c> is the type of crypto algorithm; currently, the only
- allowed value thus is <c>des3_cbc</c>. <c>Module</c> is either an
- atom, in which case <c>Key</c> will only be used for the module
- <c>Module</c>, or <c>[]</c>, in which case <c>Key</c> will be
- used for all modules. <c>Key</c> is the non-empty key string.</p>
- <p>The <c>Key</c> in the first tuple where both <c>Mode</c> and
- <c>Module</c> matches will be used.</p>
- <p>Here is an example of an <c>.erlang.crypt</c> file that returns
- the same key for all modules:</p>
- <code type="none"><![CDATA[
+
+ <section>
+ <title>Encrypted Debug Information</title>
+ <p>The debug information can be encrypted to keep
+ the source code secret, but still be able to use tools such as
+ Debugger or Xref.</p>
+
+ <p>To use encrypted debug information, a key must be provided to
+ the compiler and <c>beam_lib</c>. The key is specified as a string.
+ It is recommended that the string contains at least 32 characters and
+ that both upper and lower case letters as well as digits and
+ special characters are used.</p>
+
+ <p>The default type (and currently the only type) of crypto
+ algorithm is <c>des3_cbc</c>, three rounds of DES. The key string
+ is scrambled using
+ <seealso marker="erts:erlang#md5/1"><c>erlang:md5/1</c></seealso>
+ to generate the keys used for <c>des3_cbc</c>.</p>
+
+ <note>
+ <p>As far as we know by the time of writing, it is
+ infeasible to break <c>des3_cbc</c> encryption without any
+ knowledge of the key. Therefore, as long as the key is kept
+ safe and is unguessable, the encrypted debug information
+ <em>should</em> be safe from intruders.</p>
+ </note>
+
+ <p>The key can be provided in the following two ways:</p>
+
+ <list type="ordered">
+ <item>
+ <p>Use Compiler option <c>{debug_info,Key}</c>, see
+ <seealso marker="compiler:compile#debug_info_key"><c>compile(3)</c></seealso>
+ and function
+ <seealso marker="#crypto_key_fun/1"><c>crypto_key_fun/1</c></seealso>
+ to register a fun that returns the key whenever
+ <c>beam_lib</c> must decrypt the debug information.</p>
+ <p>If no such fun is registered, <c>beam_lib</c> instead
+ searches for an <c>.erlang.crypt</c> file, see the next section.</p>
+ </item>
+ <item>
+ <p>Store the key in a text file named <c>.erlang.crypt</c>.</p>
+ <p>In this case, Compiler option <c>encrypt_debug_info</c>
+ can be used, see
+ <seealso marker="compiler:compile#encrypt_debug_info"><c>compile(3)</c></seealso>.
+ </p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>.erlang.crypt</title>
+ <p><c>beam_lib</c> searches for <c>.erlang.crypt</c> in the current
+ directory and then the home directory for the current user. If
+ the file is found and contains a key, <c>beam_lib</c>
+ implicitly creates a crypto key fun and registers it.</p>
+
+ <p>File <c>.erlang.crypt</c> is to contain a single list of tuples:</p>
+
+ <code type="none">
+{debug_info, Mode, Module, Key}</code>
+
+ <p><c>Mode</c> is the type of crypto algorithm; currently, the only
+ allowed value is <c>des3_cbc</c>. <c>Module</c> is either an
+ atom, in which case <c>Key</c> is only used for the module
+ <c>Module</c>, or <c>[]</c>, in which case <c>Key</c> is
+ used for all modules. <c>Key</c> is the non-empty key string.</p>
+
+ <p><c>Key</c> in the first tuple where both <c>Mode</c> and
+ <c>Module</c> match is used.</p>
+
+ <p>The following is an example of an <c>.erlang.crypt</c> file that returns
+ the same key for all modules:</p>
+
+ <code type="none"><![CDATA[
[{debug_info, des3_cbc, [], "%>7}|pc/DM6Cga*68$Mw]L#&_Gejr]G^"}].]]></code>
- <p>And here is a slightly more complicated example of an
- <c>.erlang.crypt</c> which provides one key for the module
- <c>t</c>, and another key for all other modules:</p>
- <code type="none"><![CDATA[
+
+ <p>The following is a slightly more complicated example of an
+ <c>.erlang.crypt</c> providing one key for module
+ <c>t</c> and another key for all other modules:</p>
+
+ <code type="none"><![CDATA[
[{debug_info, des3_cbc, t, "My KEY"},
{debug_info, des3_cbc, [], "%>7}|pc/DM6Cga*68$Mw]L#&_Gejr]G^"}].]]></code>
- <note>
- <p>Do not use any of the keys in these examples. Use your own
- keys.</p>
- </note>
- </section>
+
+ <note>
+ <p>Do not use any of the keys in these examples. Use your own keys.</p>
+ </note>
+ </section>
<datatypes>
<datatype>
<name name="beam"/>
<desc>
<p>Each of the functions described below accept either the
- module name, the filename, or a binary containing the beam
+ module name, the filename, or a binary containing the BEAM
module.</p>
</desc>
</datatype>
@@ -167,7 +189,7 @@
<name name="chunkdata"/>
<desc>
<p>The list of attributes is sorted on <c>Attribute</c>
- (in attrib_entry()), and each
+ (in <c>attrib_entry()</c>) and each
attribute name occurs once in the list. The attribute values
occur in the same order as in the file. The lists of functions
are also sorted.</p>
@@ -186,8 +208,8 @@
<name name="abst_code"/>
<desc>
<p>It is not checked that the forms conform to the abstract format
- indicated by <c><anno>AbstVersion</anno></c>. <c>no_abstract_code</c> means
- that the <c>"Abst"</c> chunk is present, but empty.</p>
+ indicated by <c><anno>AbstVersion</anno></c>. <c>no_abstract_code</c>
+ means that chunk <c>"Abst"</c> is present, but empty.</p>
</desc>
</datatype>
<datatype>
@@ -230,78 +252,163 @@
<p>Reads chunk data for all chunks.</p>
</desc>
</func>
+
+ <func>
+ <name name="build_module" arity="1"/>
+ <fsummary>Create a BEAM module from a list of chunks.</fsummary>
+ <desc>
+ <p>Builds a BEAM module (as a binary) from a list of chunks.</p>
+ </desc>
+ </func>
+
<func>
<name name="chunks" arity="2"/>
- <fsummary>Read selected chunks from a BEAM file or binary</fsummary>
+ <fsummary>Read selected chunks from a BEAM file or binary.</fsummary>
<desc>
- <p>Reads chunk data for selected chunks refs. The order of
+ <p>Reads chunk data for selected chunks references. The order of
the returned list of chunk data is determined by the order
of the list of chunks references.</p>
</desc>
</func>
+
<func>
<name name="chunks" arity="3"/>
- <fsummary>Read selected chunks from a BEAM file or binary</fsummary>
+ <fsummary>Read selected chunks from a BEAM file or binary.</fsummary>
<desc>
- <p>Reads chunk data for selected chunks refs. The order of
+ <p>Reads chunk data for selected chunks references. The order of
the returned list of chunk data is determined by the order
of the list of chunks references.</p>
- <p>By default, if any requested chunk is missing in <c><anno>Beam</anno></c>,
- an <c>error</c> tuple is returned.
- However, if the option <c>allow_missing_chunks</c> has been given,
- a result will be returned even if chunks are missing.
- In the result list, any missing chunks will be represented as
+ <p>By default, if any requested chunk is missing in
+ <c><anno>Beam</anno></c>, an <c>error</c> tuple is returned.
+ However, if option <c>allow_missing_chunks</c> is specified,
+ a result is returned even if chunks are missing.
+ In the result list, any missing chunks are represented as
<c>{<anno>ChunkRef</anno>,missing_chunk}</c>.
- Note, however, that if the <c>"Atom"</c> chunk if missing, that is
- considered a fatal error and the return value will be an <c>error</c>
+ Notice however that if chunk <c>"Atom"</c> is missing, that is
+ considered a fatal error and the return value is an <c>error</c>
tuple.</p>
</desc>
</func>
+
<func>
- <name name="build_module" arity="1"/>
- <fsummary>Creates a BEAM module from a list of chunks</fsummary>
+ <name name="clear_crypto_key_fun" arity="0"/>
+ <fsummary>Unregister the current crypto key fun.</fsummary>
<desc>
- <p>Builds a BEAM module (as a binary) from a list of chunks.</p>
+ <p>Unregisters the crypto key fun and terminates the process
+ holding it, started by
+ <seealso marker="#crypto_key_fun/1"><c>crypto_key_fun/1</c></seealso>.
+ </p>
+ <p>Returns either <c>{ok, undefined}</c> if no crypto key fun is
+ registered, or <c>{ok, Term}</c>, where <c>Term</c> is
+ the return value from <c>CryptoKeyFun(clear)</c>, see
+ <c>crypto_key_fun/1</c>.</p>
</desc>
</func>
+
<func>
- <name name="version" arity="1"/>
- <fsummary>Read the BEAM file's module version</fsummary>
+ <name name="cmp" arity="2"/>
+ <fsummary>Compare two BEAM files.</fsummary>
+ <type name="cmp_rsn"/>
<desc>
- <p>Returns the module version(s). A version is defined by
- the module attribute <c>-vsn(Vsn)</c>. If this attribute is
- not specified, the version defaults to the checksum of
- the module. Note that if the version <c>Vsn</c> is not a list,
- it is made into one, that is <c>{ok,{Module,[Vsn]}}</c> is
- returned. If there are several <c>-vsn</c> module attributes,
- the result is the concatenated list of versions. Examples:</p>
- <pre>
-1> <input>beam_lib:version(a).</input> % -vsn(1).
-{ok,{a,[1]}}
-2> <input>beam_lib:version(b).</input> % -vsn([1]).
-{ok,{b,[1]}}
-3> <input>beam_lib:version(c).</input> % -vsn([1]). -vsn(2).
-{ok,{c,[1,2]}}
-4> <input>beam_lib:version(d).</input> % no -vsn attribute
-{ok,{d,[275613208176997377698094100858909383631]}}</pre>
+ <p>Compares the contents of two BEAM files. If the module names
+ are the same, and all chunks except for chunk <c>"CInf"</c>
+ (the chunk containing the compilation information that is
+ returned by <c>Module:module_info(compile)</c>)
+ have the same contents in both files,
+ <c>ok</c> is returned. Otherwise an error message is returned.</p>
</desc>
</func>
+
<func>
- <name name="md5" arity="1"/>
- <fsummary>Read the BEAM file's module version</fsummary>
+ <name name="cmp_dirs" arity="2"/>
+ <fsummary>Compare the BEAM files in two directories.</fsummary>
<desc>
- <p>Calculates an MD5 redundancy check for the code of the module
- (compilation date and other attributes are not included).</p>
+ <p>Compares the BEAM files in
+ two directories. Only files with extension <c>".beam"</c> are
+ compared. BEAM files that exist only in directory
+ <c><anno>Dir1</anno></c> (<c><anno>Dir2</anno></c>) are returned in
+ <c><anno>Only1</anno></c> (<c><anno>Only2</anno></c>).
+ BEAM files that exist in both directories but
+ are considered different by <c>cmp/2</c> are returned as
+ pairs {<c><anno>Filename1</anno></c>, <c><anno>Filename2</anno></c>},
+ where <c><anno>Filename1</anno></c> (<c><anno>Filename2</anno></c>)
+ exists in directory <c><anno>Dir1</anno></c>
+ (<c><anno>Dir2</anno></c>).</p>
</desc>
</func>
+
+ <func>
+ <name name="crypto_key_fun" arity="1"/>
+ <fsummary>Register a fun that provides a crypto key.</fsummary>
+ <type name="crypto_fun"/>
+ <type name="crypto_fun_arg"/>
+ <type name="mode"/>
+ <desc>
+ <p>Registers an unary fun
+ that is called if <c>beam_lib</c> must read an
+ <c>abstract_code</c> chunk that has been encrypted. The fun
+ is held in a process that is started by the function.</p>
+ <p>If a fun is already registered when attempting to
+ register a fun, <c>{error, exists}</c> is returned.</p>
+ <p>The fun must handle the following arguments:</p>
+ <code type="none">
+CryptoKeyFun(init) -> ok | {ok, NewCryptoKeyFun} | {error, Term}</code>
+ <p>Called when the fun is registered, in the process that holds
+ the fun. Here the crypto key fun can do any necessary
+ initializations. If <c>{ok, NewCryptoKeyFun}</c> is returned,
+ <c>NewCryptoKeyFun</c> is registered instead of
+ <c>CryptoKeyFun</c>. If <c>{error, Term}</c> is returned,
+ the registration is aborted and <c>crypto_key_fun/1</c>
+ also returns <c>{error, Term}</c>.</p>
+ <code type="none">
+CryptoKeyFun({debug_info, Mode, Module, Filename}) -> Key</code>
+ <p>Called when the key is needed for module <c>Module</c>
+ in the file named <c>Filename</c>. <c>Mode</c> is the type of
+ crypto algorithm; currently, the only possible value is
+ <c>des3_cbc</c>. The call is to fail (raise an exception) if
+ no key is available.</p>
+ <code type="none">
+CryptoKeyFun(clear) -> term()</code>
+ <p>Called before the fun is unregistered. Here any cleaning up
+ can be done. The return value is not important, but is passed
+ back to the caller of <c>clear_crypto_key_fun/0</c> as part
+ of its return value.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="diff_dirs" arity="2"/>
+ <fsummary>Compare the BEAM files in two directories.</fsummary>
+ <desc>
+ <p>Compares the BEAM files in two directories as
+ <seealso marker="#cmp_dirs/2"><c>cmp_dirs/2</c></seealso>, but the
+ names of files that exist in only one directory or are different are
+ presented on standard output.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="format_error" arity="1"/>
+ <fsummary>Return an English description of a BEAM read error reply.
+ </fsummary>
+ <desc>
+ <p>For a specified error returned by any function in this module,
+ this function returns a descriptive string
+ of the error in English. For file errors, function
+ <seealso marker="kernel:file#format_error/1"><c>file:format_error(Posix)</c></seealso>
+ is to be called.</p>
+ </desc>
+ </func>
+
<func>
<name name="info" arity="1"/>
- <fsummary>Information about a BEAM file</fsummary>
+ <fsummary>Information about a BEAM file.</fsummary>
<desc>
<p>Returns a list containing some information about a BEAM file
as tuples <c>{Item, Info}</c>:</p>
<taglist>
- <tag><c>{file, <anno>Filename</anno>} | {binary, <anno>Binary</anno>}</c></tag>
+ <tag><c>{file, <anno>Filename</anno>} | {binary,
+ <anno>Binary</anno>}</c></tag>
<item>
<p>The name (string) of the BEAM file, or the binary from
which the information was extracted.</p>
@@ -310,7 +417,8 @@
<item>
<p>The name (atom) of the module.</p>
</item>
- <tag><c>{chunks, [{<anno>ChunkId</anno>, <anno>Pos</anno>, <anno>Size</anno>}]}</c></tag>
+ <tag><c>{chunks, [{<anno>ChunkId</anno>, <anno>Pos</anno>,
+ <anno>Size</anno>}]}</c></tag>
<item>
<p>For each chunk, the identifier (string) and the position
and size of the chunk data, in bytes.</p>
@@ -318,135 +426,75 @@
</taglist>
</desc>
</func>
+
<func>
- <name name="cmp" arity="2"/>
- <fsummary>Compare two BEAM files</fsummary>
- <type name="cmp_rsn"/>
- <desc>
- <p>Compares the contents of two BEAM files. If the module names
- are the same, and all chunks except for the <c>"CInf"</c> chunk
- (the chunk containing the compilation information which is
- returned by <c>Module:module_info(compile)</c>)
- have the same contents in both files,
- <c>ok</c> is returned. Otherwise an error message is returned.</p>
- </desc>
- </func>
- <func>
- <name name="cmp_dirs" arity="2"/>
- <fsummary>Compare the BEAM files in two directories</fsummary>
- <desc>
- <p>The <c>cmp_dirs/2</c> function compares the BEAM files in
- two directories. Only files with extension <c>".beam"</c> are
- compared. BEAM files that exist in directory <c><anno>Dir1</anno></c>
- (<c><anno>Dir2</anno></c>) only are returned in <c><anno>Only1</anno></c>
- (<c><anno>Only2</anno></c>). BEAM files that exist on both directories but
- are considered different by <c>cmp/2</c> are returned as
- pairs {<c><anno>Filename1</anno></c>, <c><anno>Filename2</anno></c>} where
- <c><anno>Filename1</anno></c> (<c><anno>Filename2</anno></c>) exists in directory
- <c><anno>Dir1</anno></c> (<c><anno>Dir2</anno></c>).</p>
- </desc>
- </func>
- <func>
- <name name="diff_dirs" arity="2"/>
- <fsummary>Compare the BEAM files in two directories</fsummary>
+ <name name="md5" arity="1"/>
+ <fsummary>Read the module version of the BEAM file.</fsummary>
<desc>
- <p>The <c>diff_dirs/2</c> function compares the BEAM files in
- two directories the way <c>cmp_dirs/2</c> does, but names of
- files that exist in only one directory or are different are
- presented on standard output.</p>
+ <p>Calculates an MD5 redundancy check for the code of the module
+ (compilation date and other attributes are not included).</p>
</desc>
</func>
+
<func>
<name name="strip" arity="1"/>
- <fsummary>Removes chunks not needed by the loader from a BEAM file</fsummary>
+ <fsummary>Remove chunks not needed by the loader from a BEAM file.
+ </fsummary>
<desc>
- <p>The <c>strip/1</c> function removes all chunks from a BEAM
+ <p>Removes all chunks from a BEAM
file except those needed by the loader. In particular,
- the debug information (<c>abstract_code</c> chunk) is removed.</p>
+ the debug information (chunk <c>abstract_code</c>) is removed.</p>
</desc>
</func>
+
<func>
<name name="strip_files" arity="1"/>
- <fsummary>Removes chunks not needed by the loader from BEAM files</fsummary>
+ <fsummary>Removes chunks not needed by the loader from BEAM files.
+ </fsummary>
<desc>
- <p>The <c>strip_files/1</c> function removes all chunks except
+ <p>Removes all chunks except
those needed by the loader from BEAM files. In particular,
- the debug information (<c>abstract_code</c> chunk) is removed.
- The returned list contains one element for each given file
- name, in the same order as in <c>Files</c>.</p>
+ the debug information (chunk <c>abstract_code</c>) is removed.
+ The returned list contains one element for each specified filename,
+ in the same order as in <c>Files</c>.</p>
</desc>
</func>
+
<func>
<name name="strip_release" arity="1"/>
- <fsummary>Removes chunks not needed by the loader from all BEAM files of a release</fsummary>
+ <fsummary>Remove chunks not needed by the loader from all BEAM files of
+ a release.</fsummary>
<desc>
- <p>The <c>strip_release/1</c> function removes all chunks
+ <p>Removes all chunks
except those needed by the loader from the BEAM files of a
- release. <c><anno>Dir</anno></c> should be the installation root
+ release. <c><anno>Dir</anno></c> is to be the installation root
directory. For example, the current OTP release can be
stripped with the call
<c>beam_lib:strip_release(code:root_dir())</c>.</p>
</desc>
</func>
+
<func>
- <name name="format_error" arity="1"/>
- <fsummary>Return an English description of a BEAM read error reply</fsummary>
- <desc>
- <p>Given the error returned by any function in this module,
- the function <c>format_error</c> returns a descriptive string
- of the error in English. For file errors, the function
- <c>file:format_error(Posix)</c> should be called.</p>
- </desc>
- </func>
- <func>
- <name name="crypto_key_fun" arity="1"/>
- <fsummary>Register a fun that provides a crypto key</fsummary>
- <type name="crypto_fun"/>
- <type name="crypto_fun_arg"/>
- <type name="mode"/>
- <desc>
- <p>The <c>crypto_key_fun/1</c> function registers a unary fun
- that will be called if <c>beam_lib</c> needs to read an
- <c>abstract_code</c> chunk that has been encrypted. The fun
- is held in a process that is started by the function.</p>
- <p>If there already is a fun registered when attempting to
- register a fun, <c>{error, exists}</c> is returned.</p>
- <p>The fun must handle the following arguments:</p>
- <code type="none">
- CryptoKeyFun(init) -> ok | {ok, NewCryptoKeyFun} | {error, Term}</code>
- <p>Called when the fun is registered, in the process that holds
- the fun. Here the crypto key fun can do any necessary
- initializations. If <c>{ok, NewCryptoKeyFun}</c> is returned
- then <c>NewCryptoKeyFun</c> will be registered instead of
- <c>CryptoKeyFun</c>. If <c>{error, Term}</c> is returned,
- the registration is aborted and <c>crypto_key_fun/1</c>
- returns <c>{error, Term}</c> as well.</p>
- <code type="none">
- CryptoKeyFun({debug_info, Mode, Module, Filename}) -> Key</code>
- <p>Called when the key is needed for the module <c>Module</c>
- in the file named <c>Filename</c>. <c>Mode</c> is the type of
- crypto algorithm; currently, the only possible value thus is
- <c>des3_cbc</c>. The call should fail (raise an exception) if
- there is no key available.</p>
- <code type="none">
- CryptoKeyFun(clear) -> term()</code>
- <p>Called before the fun is unregistered. Here any cleaning up
- can be done. The return value is not important, but is passed
- back to the caller of <c>clear_crypto_key_fun/0</c> as part
- of its return value.</p>
- </desc>
- </func>
- <func>
- <name name="clear_crypto_key_fun" arity="0"/>
- <fsummary>Unregister the current crypto key fun</fsummary>
+ <name name="version" arity="1"/>
+ <fsummary>Read the module version of the BEAM file.</fsummary>
<desc>
- <p>Unregisters the crypto key fun and terminates the process
- holding it, started by <c>crypto_key_fun/1</c>.</p>
- <p>The <c>clear_crypto_key_fun/1</c> either returns
- <c>{ok, undefined}</c> if there was no crypto key fun
- registered, or <c>{ok, Term}</c>, where <c>Term</c> is
- the return value from <c>CryptoKeyFun(clear)</c>, see
- <c>crypto_key_fun/1</c>.</p>
+ <p>Returns the module version or versions. A version is defined by
+ module attribute <c>-vsn(Vsn)</c>. If this attribute is
+ not specified, the version defaults to the checksum of
+ the module. Notice that if version <c>Vsn</c> is not a list,
+ it is made into one, that is <c>{ok,{Module,[Vsn]}}</c> is
+ returned. If there are many <c>-vsn</c> module attributes,
+ the result is the concatenated list of versions.</p>
+ <p><em>Examples:</em></p>
+ <pre>
+1> <input>beam_lib:version(a).</input> % -vsn(1).
+{ok,{a,[1]}}
+2> <input>beam_lib:version(b).</input> % -vsn([1]).
+{ok,{b,[1]}}
+3> <input>beam_lib:version(c).</input> % -vsn([1]). -vsn(2).
+{ok,{c,[1,2]}}
+4> <input>beam_lib:version(d).</input> % no -vsn attribute
+{ok,{d,[275613208176997377698094100858909383631]}}</pre>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/binary.xml b/lib/stdlib/doc/src/binary.xml
index 2682198fe5..6a86d6c7ba 100644
--- a/lib/stdlib/doc/src/binary.xml
+++ b/lib/stdlib/doc/src/binary.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2014</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -35,285 +35,311 @@
<file>binary.xml</file>
</header>
<module>binary</module>
- <modulesummary>Library for handling binary data</modulesummary>
+ <modulesummary>Library for handling binary data.</modulesummary>
<description>
<p>This module contains functions for manipulating byte-oriented
- binaries. Although the majority of functions could be implemented
+ binaries. Although the majority of functions could be provided
using bit-syntax, the functions in this library are highly
optimized and are expected to either execute faster or consume
- less memory (or both) than a counterpart written in pure Erlang.</p>
+ less memory, or both, than a counterpart written in pure Erlang.</p>
- <p>The module is implemented according to the EEP (Erlang Enhancement Proposal) 31.</p>
+ <p>The module is provided according to Erlang Enhancement Proposal
+ (EEP) 31.</p>
<note>
- <p>
- The library handles byte-oriented data. Bitstrings that are not
- binaries (does not contain whole octets of bits) will result in a <c>badarg</c>
- exception being thrown from any of the functions in this
- module.
- </p>
+ <p>The library handles byte-oriented data. For bitstrings that are not
+ binaries (does not contain whole octets of bits) a <c>badarg</c>
+ exception is thrown from any of the functions in this module.</p>
</note>
</description>
+
<datatypes>
<datatype>
<name name="cp"/>
- <desc><p>Opaque data-type representing a compiled
- search-pattern. Guaranteed to be a tuple() to allow programs to
- distinguish it from non precompiled search patterns.</p>
+ <desc><p>Opaque data type representing a compiled
+ search pattern. Guaranteed to be a <c>tuple()</c> to allow programs to
+ distinguish it from non-precompiled search patterns.</p>
</desc>
</datatype>
<datatype>
<name name="part"/>
- <desc><p>A representaion of a part (or range) in a binary. Start is a
- zero-based offset into a binary() and Length is the length of
- that part. As input to functions in this module, a reverse
+ <desc><p>A representaion of a part (or range) in a binary. <c>Start</c> is
+ a zero-based offset into a <c>binary()</c> and <c>Length</c> is the
+ length of that part. As input to functions in this module, a reverse
part specification is allowed, constructed with a negative
- Length, so that the part of the binary begins at Start +
- Length and is -Length long. This is useful for referencing the
- last N bytes of a binary as {size(Binary), -N}. The functions
- in this module always return part()'s with positive Length.</p>
+ <c>Length</c>, so that the part of the binary begins at <c>Start</c> +
+ <c>Length</c> and is -<c>Length</c> long. This is useful for referencing
+ the last <c>N</c> bytes of a binary as <c>{size(Binary), -N}</c>. The
+ functions in this module always return <c>part()</c>s with positive
+ <c>Length</c>.</p>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="at" arity="2"/>
- <fsummary>Returns the byte at a specific position in a binary</fsummary>
+ <fsummary>Return the byte at a specific position in a binary.</fsummary>
<desc>
-
- <p>Returns the byte at position <c><anno>Pos</anno></c> (zero-based) in the binary
- <c><anno>Subject</anno></c> as an integer. If <c><anno>Pos</anno></c> &gt;= <c>byte_size(<anno>Subject</anno>)</c>,
- a <c>badarg</c>
- exception is raised.</p>
-
+ <p>Returns the byte at position <c><anno>Pos</anno></c> (zero-based) in
+ binary <c><anno>Subject</anno></c> as an integer. If
+ <c><anno>Pos</anno></c> &gt;= <c>byte_size(<anno>Subject</anno>)</c>,
+ a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="bin_to_list" arity="1"/>
- <fsummary>Convert a binary to a list of integers</fsummary>
+ <fsummary>Convert a binary to a list of integers.</fsummary>
<desc>
- <p>The same as <c>bin_to_list(<anno>Subject</anno>,{0,byte_size(<anno>Subject</anno>)})</c>.</p>
+ <p>Same as <c>bin_to_list(<anno>Subject</anno>, {0,byte_size(<anno>Subject</anno>)})</c>.</p>
</desc>
</func>
+
<func>
<name name="bin_to_list" arity="2"/>
- <fsummary>Convert a binary to a list of integers</fsummary>
+ <fsummary>Convert a binary to a list of integers.</fsummary>
<desc>
+ <p>Converts <c><anno>Subject</anno></c> to a list of <c>byte()</c>s, each
+ representing the value of one byte. <c>part()</c> denotes which part of
+ the <c>binary()</c> to convert.</p>
- <p>Converts <c><anno>Subject</anno></c> to a list of <c>byte()</c>s, each representing
- the value of one byte. The <c>part()</c> denotes which part of the
- <c>binary()</c> to convert. Example:</p>
+ <p><em>Example:</em></p>
<code>
-1> binary:bin_to_list(&lt;&lt;"erlang"&gt;&gt;,{1,3}).
+1> binary:bin_to_list(&lt;&lt;"erlang"&gt;&gt;, {1,3}).
"rla"
-%% or [114,108,97] in list notation.
-</code>
- <p>If <c><anno>PosLen</anno></c> in any way references outside the binary, a <c>badarg</c> exception is raised.</p>
+%% or [114,108,97] in list notation.</code>
+
+ <p>If <c><anno>PosLen</anno></c> in any way references outside the binary,
+ a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="bin_to_list" arity="3"/>
- <fsummary>Convert a binary to a list of integers</fsummary>
+ <fsummary>Convert a binary to a list of integers.</fsummary>
<desc>
- <p>The same as<c> bin_to_list(<anno>Subject</anno>,{<anno>Pos</anno>,<anno>Len</anno>})</c>.</p>
+ <p>Same as<c> bin_to_list(<anno>Subject</anno>, {<anno>Pos</anno>, <anno>Len</anno>})</c>.</p>
</desc>
</func>
+
<func>
<name name="compile_pattern" arity="1"/>
- <fsummary>Pre-compiles a binary search pattern</fsummary>
+ <fsummary>Precompile a binary search pattern.</fsummary>
<desc>
-
<p>Builds an internal structure representing a compilation of a
- search-pattern, later to be used in the <seealso marker="#match-3">match/3</seealso>,
- <seealso marker="#matches-3">matches/3</seealso>,
- <seealso marker="#split-3">split/3</seealso> or
- <seealso marker="#replace-4">replace/4</seealso>
- functions. The <c>cp()</c> returned is guaranteed to be a
- <c>tuple()</c> to allow programs to distinguish it from non
- pre-compiled search patterns</p>
-
- <p>When a list of binaries is given, it denotes a set of
- alternative binaries to search for. I.e if
+ search pattern, later to be used in functions
+ <seealso marker="#match-3"><c>match/3</c></seealso>,
+ <seealso marker="#matches-3"><c>matches/3</c></seealso>,
+ <seealso marker="#split-3"><c>split/3</c></seealso>, or
+ <seealso marker="#replace-4"><c>replace/4</c></seealso>.
+ The <c>cp()</c> returned is guaranteed to be a
+ <c>tuple()</c> to allow programs to distinguish it from
+ non-precompiled search patterns.</p>
+
+ <p>When a list of binaries is specified, it denotes a set of
+ alternative binaries to search for. For example, if
<c>[&lt;&lt;"functional"&gt;&gt;,&lt;&lt;"programming"&gt;&gt;]</c>
- is given as <c><anno>Pattern</anno></c>, this
- means "either <c>&lt;&lt;"functional"&gt;&gt;</c> or
+ is specified as <c><anno>Pattern</anno></c>, this
+ means either <c>&lt;&lt;"functional"&gt;&gt;</c> or
<c>&lt;&lt;"programming"&gt;&gt;</c>". The pattern is a set of
- alternatives; when only a single binary is given, the set has
- only one element. The order of alternatives in a pattern is not significant.</p>
-
- <p>The list of binaries used for search alternatives shall be flat and proper.</p>
+ alternatives; when only a single binary is specified, the set has
+ only one element. The order of alternatives in a pattern is
+ not significant.</p>
- <p>If <c><anno>Pattern</anno></c> is not a binary or a flat proper list of binaries with length &gt; 0,
- a <c>badarg</c> exception will be raised.</p>
+ <p>The list of binaries used for search alternatives must be flat and
+ proper.</p>
+ <p>If <c><anno>Pattern</anno></c> is not a binary or a flat proper list of
+ binaries with length &gt; 0, a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="copy" arity="1"/>
- <fsummary>Creates a duplicate of a binary</fsummary>
+ <fsummary>Create a duplicate of a binary.</fsummary>
<desc>
- <p>The same as <c>copy(<anno>Subject</anno>, 1)</c>.</p>
+ <p>Same as <c>copy(<anno>Subject</anno>, 1)</c>.</p>
</desc>
</func>
+
<func>
<name name="copy" arity="2"/>
- <fsummary>Duplicates a binary N times and creates a new</fsummary>
+ <fsummary>Duplicate a binary <c>N</c> times and create a new.</fsummary>
<desc>
- <p>Creates a binary with the content of <c><anno>Subject</anno></c> duplicated <c><anno>N</anno></c> times.</p>
+ <p>Creates a binary with the content of <c><anno>Subject</anno></c>
+ duplicated <c><anno>N</anno></c> times.</p>
- <p>This function will always create a new binary, even if <c><anno>N</anno> =
- 1</c>. By using <c>copy/1</c> on a binary referencing a larger binary, one
- might free up the larger binary for garbage collection.</p>
+ <p>This function always creates a new binary, even if <c><anno>N</anno> =
+ 1</c>. By using <seealso marker="#copy/1"><c>copy/1</c></seealso>
+ on a binary referencing a larger binary, one
+ can free up the larger binary for garbage collection.</p>
<note>
<p>By deliberately copying a single binary to avoid referencing
- a larger binary, one might, instead of freeing up the larger
+ a larger binary, one can, instead of freeing up the larger
binary for later garbage collection, create much more binary
data than needed. Sharing binary data is usually good. Only in
special cases, when small parts reference large binaries and the
large binaries are no longer used in any process, deliberate
- copying might be a good idea.</p> </note>
+ copying can be a good idea.</p>
+ </note>
- <p>If <c><anno>N</anno></c> &lt; <c>0</c>, a <c>badarg</c> exception is raised.</p>
+ <p>If <c><anno>N</anno></c> &lt; <c>0</c>, a <c>badarg</c> exception is
+ raised.</p>
</desc>
</func>
+
<func>
<name name="decode_unsigned" arity="1"/>
- <fsummary>Decode a whole binary into an integer of arbitrary size</fsummary>
+ <fsummary>Decode a whole binary into an integer of arbitrary size.
+ </fsummary>
<desc>
- <p>The same as <c>decode_unsigned(<anno>Subject</anno>, big)</c>.</p>
+ <p>Same as <c>decode_unsigned(<anno>Subject</anno>, big)</c>.</p>
</desc>
</func>
+
<func>
<name name="decode_unsigned" arity="2"/>
- <fsummary>Decode a whole binary into an integer of arbitrary size</fsummary>
+ <fsummary>Decode a whole binary into an integer of arbitrary size.
+ </fsummary>
<desc>
+ <p>Converts the binary digit representation, in big endian or little
+ endian, of a positive integer in <c><anno>Subject</anno></c> to an Erlang
+ <c>integer()</c>.</p>
- <p>Converts the binary digit representation, in big or little
- endian, of a positive integer in <c><anno>Subject</anno></c> to an Erlang <c>integer()</c>.</p>
-
- <p>Example:</p>
+ <p><em>Example:</em></p>
<code>
1> binary:decode_unsigned(&lt;&lt;169,138,199&gt;&gt;,big).
-11111111
- </code>
+11111111</code>
</desc>
</func>
+
<func>
<name name="encode_unsigned" arity="1"/>
- <fsummary>Encodes an unsigned integer into the minimal binary</fsummary>
+ <fsummary>Encode an unsigned integer into the minimal binary.</fsummary>
<desc>
- <p>The same as <c>encode_unsigned(<anno>Unsigned</anno>, big)</c>.</p>
+ <p>Same as <c>encode_unsigned(<anno>Unsigned</anno>, big)</c>.</p>
</desc>
</func>
+
<func>
<name name="encode_unsigned" arity="2"/>
- <fsummary>Encodes an unsigned integer into the minimal binary</fsummary>
+ <fsummary>Encode an unsigned integer into the minimal binary.</fsummary>
<desc>
-
<p>Converts a positive integer to the smallest possible
- representation in a binary digit representation, either big
+ representation in a binary digit representation, either big endian
or little endian.</p>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<code>
-1> binary:encode_unsigned(11111111,big).
-&lt;&lt;169,138,199&gt;&gt;
- </code>
+1> binary:encode_unsigned(11111111, big).
+&lt;&lt;169,138,199&gt;&gt;</code>
</desc>
</func>
+
<func>
<name name="first" arity="1"/>
- <fsummary>Returns the first byte of a binary</fsummary>
+ <fsummary>Return the first byte of a binary.</fsummary>
<desc>
-
- <p>Returns the first byte of the binary <c><anno>Subject</anno></c> as an integer. If the
- size of <c><anno>Subject</anno></c> is zero, a <c>badarg</c> exception is raised.</p>
-
+ <p>Returns the first byte of binary <c><anno>Subject</anno></c> as an
+ integer. If the size of <c><anno>Subject</anno></c> is zero, a
+ <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="last" arity="1"/>
- <fsummary>Returns the last byte of a binary</fsummary>
+ <fsummary>Return the last byte of a binary.</fsummary>
<desc>
-
- <p>Returns the last byte of the binary <c><anno>Subject</anno></c> as an integer. If the
- size of <c><anno>Subject</anno></c> is zero, a <c>badarg</c> exception is raised.</p>
-
+ <p>Returns the last byte of binary <c><anno>Subject</anno></c> as an
+ integer. If the size of <c><anno>Subject</anno></c> is zero, a
+ <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="list_to_bin" arity="1"/>
- <fsummary>Convert a list of integers and binaries to a binary</fsummary>
+ <fsummary>Convert a list of integers and binaries to a binary.</fsummary>
<desc>
- <p>Works exactly as <c>erlang:list_to_binary/1</c>, added for completeness.</p>
+ <p>Works exactly as
+ <seealso marker="erts:erlang#list_to_binary/1"><c>erlang:list_to_binary/1</c></seealso>,
+ added for completeness.</p>
</desc>
</func>
+
<func>
<name name="longest_common_prefix" arity="1"/>
- <fsummary>Returns length of longest common prefix for a set of binaries</fsummary>
+ <fsummary>Return length of longest common prefix for a set of binaries.
+ </fsummary>
<desc>
-
<p>Returns the length of the longest common prefix of the
- binaries in the list <c><anno>Binaries</anno></c>. Example:</p>
+ binaries in list <c><anno>Binaries</anno></c>.</p>
+
+ <p><em>Example:</em></p>
<code>
-1> binary:longest_common_prefix([&lt;&lt;"erlang"&gt;&gt;,&lt;&lt;"ergonomy"&gt;&gt;]).
+1> binary:longest_common_prefix([&lt;&lt;"erlang"&gt;&gt;, &lt;&lt;"ergonomy"&gt;&gt;]).
2
-2> binary:longest_common_prefix([&lt;&lt;"erlang"&gt;&gt;,&lt;&lt;"perl"&gt;&gt;]).
-0
-</code>
+2> binary:longest_common_prefix([&lt;&lt;"erlang"&gt;&gt;, &lt;&lt;"perl"&gt;&gt;]).
+0</code>
- <p>If <c><anno>Binaries</anno></c> is not a flat list of binaries, a <c>badarg</c> exception is raised.</p>
+ <p>If <c><anno>Binaries</anno></c> is not a flat list of binaries, a
+ <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="longest_common_suffix" arity="1"/>
- <fsummary>Returns length of longest common suffix for a set of binaries</fsummary>
+ <fsummary>Return length of longest common suffix for a set of binaries.
+ </fsummary>
<desc>
-
<p>Returns the length of the longest common suffix of the
- binaries in the list <c><anno>Binaries</anno></c>. Example:</p>
+ binaries in list <c><anno>Binaries</anno></c>.</p>
+
+ <p><em>Example:</em></p>
<code>
-1> binary:longest_common_suffix([&lt;&lt;"erlang"&gt;&gt;,&lt;&lt;"fang"&gt;&gt;]).
+1> binary:longest_common_suffix([&lt;&lt;"erlang"&gt;&gt;, &lt;&lt;"fang"&gt;&gt;]).
3
-2> binary:longest_common_suffix([&lt;&lt;"erlang"&gt;&gt;,&lt;&lt;"perl"&gt;&gt;]).
-0
-</code>
-
- <p>If <c>Binaries</c> is not a flat list of binaries, a <c>badarg</c> exception is raised.</p>
+2> binary:longest_common_suffix([&lt;&lt;"erlang"&gt;&gt;, &lt;&lt;"perl"&gt;&gt;]).
+0</code>
+ <p>If <c>Binaries</c> is not a flat list of binaries, a <c>badarg</c>
+ exception is raised.</p>
</desc>
</func>
+
<func>
<name name="match" arity="2"/>
- <fsummary>Searches for the first match of a pattern in a binary</fsummary>
+ <fsummary>Search for the first match of a pattern in a binary.</fsummary>
<desc>
- <p>The same as <c>match(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.</p>
+ <p>Same as <c>match(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.
+ </p>
</desc>
</func>
+
<func>
<name name="match" arity="3"/>
- <fsummary>Searches for the first match of a pattern in a binary</fsummary>
+ <fsummary>Search for the first match of a pattern in a binary.</fsummary>
<type name="part"/>
<desc>
+ <p>Searches for the first occurrence of <c><anno>Pattern</anno></c> in
+ <c><anno>Subject</anno></c> and returns the position and length.</p>
- <p>Searches for the first occurrence of <c><anno>Pattern</anno></c> in <c><anno>Subject</anno></c> and
- returns the position and length.</p>
+ <p>The function returns <c>{Pos, Length}</c> for the binary
+ in <c><anno>Pattern</anno></c>, starting at the lowest position in
+ <c><anno>Subject</anno></c>.</p>
- <p>The function will return <c>{Pos, Length}</c> for the binary
- in <c><anno>Pattern</anno></c> starting at the lowest position in
- <c><anno>Subject</anno></c>, Example:</p>
+ <p><em>Example:</em></p>
<code>
-1> binary:match(&lt;&lt;"abcde"&gt;&gt;, [&lt;&lt;"bcde"&gt;&gt;,&lt;&lt;"cd"&gt;&gt;],[]).
-{1,4}
-</code>
+1> binary:match(&lt;&lt;"abcde"&gt;&gt;, [&lt;&lt;"bcde"&gt;&gt;, &lt;&lt;"cd"&gt;&gt;],[]).
+{1,4}</code>
<p>Even though <c>&lt;&lt;"cd"&gt;&gt;</c> ends before
<c>&lt;&lt;"bcde"&gt;&gt;</c>, <c>&lt;&lt;"bcde"&gt;&gt;</c>
@@ -325,118 +351,129 @@
<taglist>
<tag>{scope, {<anno>Start</anno>, <anno>Length</anno>}}</tag>
- <item><p>Only the given part is searched. Return values still have
- offsets from the beginning of <c><anno>Subject</anno></c>. A negative <c>Length</c> is
- allowed as described in the <c>DATA TYPES</c> section of this manual.</p></item>
+ <item><p>Only the specified part is searched. Return values still have
+ offsets from the beginning of <c><anno>Subject</anno></c>. A negative
+ <c>Length</c> is allowed as described in section Data Types in this
+ manual.</p></item>
</taglist>
- <p>If none of the strings in
- <c><anno>Pattern</anno></c> is found, the atom <c>nomatch</c> is returned.</p>
+ <p>If none of the strings in <c><anno>Pattern</anno></c> is found, the
+ atom <c>nomatch</c> is returned.</p>
- <p>For a description of <c><anno>Pattern</anno></c>, see
- <seealso marker="#compile_pattern-1">compile_pattern/1</seealso>.</p>
+ <p>For a description of <c><anno>Pattern</anno></c>, see function
+ <seealso marker="#compile_pattern-1"><c>compile_pattern/1</c></seealso>.
+ </p>
- <p>If <c>{scope, {Start,Length}}</c> is given in the options
- such that <c>Start</c> is larger than the size of
- <c>Subject</c>, <c>Start + Length</c> is less than zero or
- <c>Start + Length</c> is larger than the size of
+ <p>If <c>{scope, {Start,Length}}</c> is specified in the options such
+ that <c>Start</c> &gt; size of <c>Subject</c>, <c>Start</c> +
+ <c>Length</c> &lt; 0 or <c>Start</c> + <c>Length</c> &gt; size of
<c>Subject</c>, a <c>badarg</c> exception is raised.</p>
-
</desc>
</func>
+
<func>
<name name="matches" arity="2"/>
- <fsummary>Searches for all matches of a pattern in a binary</fsummary>
+ <fsummary>Search for all matches of a pattern in a binary.</fsummary>
<desc>
- <p>The same as <c>matches(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.</p>
+ <p>Same as <c>matches(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.
+ </p>
</desc>
</func>
+
<func>
<name name="matches" arity="3"/>
- <fsummary>Searches for all matches of a pattern in a binary</fsummary>
+ <fsummary>Search for all matches of a pattern in a binary.</fsummary>
<type name="part"/>
<desc>
-
- <p>Works like <c>match/2</c>, but the <c><anno>Subject</anno></c> is searched until
+ <p>As <seealso marker="#match-2"><c>match/2</c></seealso>,
+ but <c><anno>Subject</anno></c> is searched until
exhausted and a list of all non-overlapping parts matching
- <c><anno>Pattern</anno></c> is returned (in order). </p>
+ <c><anno>Pattern</anno></c> is returned (in order).</p>
<p>The first and longest match is preferred to a shorter,
which is illustrated by the following example:</p>
<code>
1> binary:matches(&lt;&lt;"abcde"&gt;&gt;,
- [&lt;&lt;"bcde"&gt;&gt;,&lt;&lt;"bc"&gt;&gt;>,&lt;&lt;"de"&gt;&gt;],[]).
-[{1,4}]
-</code>
-
- <p>The result shows that &lt;&lt;"bcde"&gt;&gt; is selected instead of the
- shorter match &lt;&lt;"bc"&gt;&gt; (which would have given raise to one
- more match,&lt;&lt;"de"&gt;&gt;). This corresponds to the behavior of posix
- regular expressions (and programs like awk), but is not
- consistent with alternative matches in re (and Perl), where
+ [&lt;&lt;"bcde"&gt;&gt;,&lt;&lt;"bc"&gt;&gt;,&lt;&lt;"de"&gt;&gt;],[]).
+[{1,4}]</code>
+
+ <p>The result shows that &lt;&lt;"bcde"&gt;&gt; is selected instead of
+ the shorter match &lt;&lt;"bc"&gt;&gt; (which would have given raise to
+ one more match, &lt;&lt;"de"&gt;&gt;).
+ This corresponds to the behavior of
+ POSIX regular expressions (and programs like awk), but is not
+ consistent with alternative matches in <c>re</c> (and Perl), where
instead lexical ordering in the search pattern selects which
string matches.</p>
- <p>If none of the strings in pattern is found, an empty list is returned.</p>
-
- <p>For a description of <c><anno>Pattern</anno></c>, see <seealso marker="#compile_pattern-1">compile_pattern/1</seealso> and for a
- description of available options, see <seealso marker="#match-3">match/3</seealso>.</p>
+ <p>If none of the strings in a pattern is found, an empty list is
+ returned.</p>
- <p>If <c>{scope, {<anno>Start</anno>,<anno>Length</anno>}}</c> is given in the options such that
- <c><anno>Start</anno></c> is larger than the size of <c><anno>Subject</anno></c>, <c><anno>Start</anno> + <anno>Length</anno></c> is
- less than zero or <c><anno>Start</anno> + <anno>Length</anno></c> is larger than the size of
- <c><anno>Subject</anno></c>, a <c>badarg</c> exception is raised.</p>
+ <p>For a description of <c><anno>Pattern</anno></c>, see
+ <seealso marker="#compile_pattern-1"><c>compile_pattern/1</c></seealso>.
+ For a description of available options, see
+ <seealso marker="#match-3"><c>match/3</c></seealso>.</p>
+ <p>If <c>{scope, {<anno>Start</anno>,<anno>Length</anno>}}</c> is
+ specified in the options such that <c><anno>Start</anno></c> &gt; size
+ of <c><anno>Subject</anno></c>, <c><anno>Start</anno> +
+ <anno>Length</anno></c> &lt; 0 or <c><anno>Start</anno> +
+ <anno>Length</anno></c> is &gt; size of <c><anno>Subject</anno></c>,
+ a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="part" arity="2"/>
- <fsummary>Extracts a part of a binary</fsummary>
+ <fsummary>Extract a part of a binary.</fsummary>
<desc>
+ <p>Extracts the part of binary <c><anno>Subject</anno></c> described by
+ <c><anno>PosLen</anno></c>.</p>
- <p>Extracts the part of the binary <c><anno>Subject</anno></c> described by <c><anno>PosLen</anno></c>.</p>
-
- <p>Negative length can be used to extract bytes at the end of a binary:</p>
+ <p>A negative length can be used to extract bytes at the end of a
+ binary:</p>
<code>
1> Bin = &lt;&lt;1,2,3,4,5,6,7,8,9,10&gt;&gt;.
-2> binary:part(Bin,{byte_size(Bin), -5}).
-&lt;&lt;6,7,8,9,10&gt;&gt;
-</code>
+2> binary:part(Bin, {byte_size(Bin), -5}).
+&lt;&lt;6,7,8,9,10&gt;&gt;</code>
<note>
- <p><seealso marker="#part-2">part/2</seealso>and <seealso
- marker="#part-3">part/3</seealso> are also available in the
- <c>erlang</c> module under the names <c>binary_part/2</c> and
+ <p><seealso marker="#part-2">part/2</seealso> and
+ <seealso marker="#part-3">part/3</seealso> are also available in the
+ <seealso marker="erts:erlang"><c>erlang</c></seealso>
+ module under the names <c>binary_part/2</c> and
<c>binary_part/3</c>. Those BIFs are allowed in guard tests.</p>
</note>
- <p>If <c><anno>PosLen</anno></c> in any way references outside the binary, a <c>badarg</c> exception
- is raised.</p>
-
+ <p>If <c><anno>PosLen</anno></c> in any way references outside the binary,
+ a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="part" arity="3"/>
- <fsummary>Extracts a part of a binary</fsummary>
+ <fsummary>Extract a part of a binary.</fsummary>
<desc>
- <p>The same as <c>part(<anno>Subject</anno>, {<anno>Pos</anno>, <anno>Len</anno>})</c>.</p>
+ <p>Same as <c>part(<anno>Subject</anno>, {<anno>Pos</anno>,
+ <anno>Len</anno>})</c>.</p>
</desc>
</func>
+
<func>
<name name="referenced_byte_size" arity="1"/>
- <fsummary>Determines the size of the actual binary pointed out by a sub-binary</fsummary>
+ <fsummary>Determine the size of the binary pointed out by a subbinary.
+ </fsummary>
<desc>
+ <p>If a binary references a larger binary (often described as
+ being a subbinary), it can be useful to get the size of the
+ referenced binary. This function can be used in a program to trigger the
+ use of <seealso marker="#copy/1"><c>copy/1</c></seealso>. By copying a
+ binary, one can dereference the original, possibly large, binary that a
+ smaller binary is a reference to.</p>
- <p>If a binary references a larger binary (often described as
- being a sub-binary), it can be useful to get the size of the
- actual referenced binary. This function can be used in a program
- to trigger the use of <c>copy/1</c>. By copying a binary, one might
- dereference the original, possibly large, binary which a smaller
- binary is a reference to.</p>
-
- <p>Example:</p>
+ <p><em>Example:</em></p>
<code>
store(Binary, GBSet) ->
@@ -447,26 +484,24 @@ store(Binary, GBSet) ->
_ ->
Binary
end,
- gb_sets:insert(NewBin,GBSet).
- </code>
+ gb_sets:insert(NewBin,GBSet).</code>
<p>In this example, we chose to copy the binary content before
- inserting it in the <c>gb_sets:set()</c> if it references a binary more than
- twice the size of the data we're going to keep. Of course
- different rules for when copying will apply to different
- programs.</p>
+ inserting it in <c>gb_sets:set()</c> if it references a binary more than
+ twice the data size we want to keep. Of course,
+ different rules apply when copying to different programs.</p>
- <p>Binary sharing will occur whenever binaries are taken apart,
- this is the fundamental reason why binaries are fast,
+ <p>Binary sharing occurs whenever binaries are taken apart.
+ This is the fundamental reason why binaries are fast,
decomposition can always be done with O(1) complexity. In rare
circumstances this data sharing is however undesirable, why this
- function together with <c>copy/1</c> might be useful when optimizing
+ function together with <c>copy/1</c> can be useful when optimizing
for memory use.</p>
<p>Example of binary sharing:</p>
<code>
-1> A = binary:copy(&lt;&lt;1&gt;&gt;,100).
+1> A = binary:copy(&lt;&lt;1&gt;&gt;, 100).
&lt;&lt;1,1,1,1,1 ...
2> byte_size(A).
100
@@ -477,141 +512,138 @@ store(Binary, GBSet) ->
5> byte_size(B).
10
6> binary:referenced_byte_size(B)
-100
- </code>
+100</code>
<note>
<p>Binary data is shared among processes. If another process
still references the larger binary, copying the part this
- process uses only consumes more memory and will not free up the
+ process uses only consumes more memory and does not free up the
larger binary for garbage collection. Use this kind of intrusive
- functions with extreme care, and only if a real problem is
- detected.</p>
+ functions with extreme care and only if a real problem is detected.</p>
</note>
-
</desc>
</func>
+
<func>
<name name="replace" arity="3"/>
- <fsummary>Replaces bytes in a binary according to a pattern</fsummary>
+ <fsummary>Replace bytes in a binary according to a pattern.</fsummary>
<desc>
- <p>The same as <c>replace(<anno>Subject</anno>,<anno>Pattern</anno>,<anno>Replacement</anno>,[])</c>.</p>
+ <p>Same as <c>replace(<anno>Subject</anno>, <anno>Pattern</anno>, <anno>Replacement</anno>,[])</c>.</p>
</desc>
</func>
+
<func>
<name name="replace" arity="4"/>
- <fsummary>Replaces bytes in a binary according to a pattern</fsummary>
+ <fsummary>Replace bytes in a binary according to a pattern.</fsummary>
<type_desc variable="OnePos">An integer() =&lt; byte_size(<anno>Replacement</anno>)
</type_desc>
<desc>
-
<p>Constructs a new binary by replacing the parts in
- <c><anno>Subject</anno></c> matching <c><anno>Pattern</anno></c> with the content of
- <c><anno>Replacement</anno></c>.</p>
+ <c><anno>Subject</anno></c> matching <c><anno>Pattern</anno></c> with
+ the content of <c><anno>Replacement</anno></c>.</p>
+
+ <p>If the matching subpart of <c><anno>Subject</anno></c> giving raise
+ to the replacement is to be inserted in the result, option
+ <c>{insert_replaced, <anno>InsPos</anno>}</c> inserts the matching part
+ into <c><anno>Replacement</anno></c> at the specified position (or
+ positions) before inserting <c><anno>Replacement</anno></c> into
+ <c><anno>Subject</anno></c>.</p>
- <p>If the matching sub-part of <c><anno>Subject</anno></c> giving raise to the
- replacement is to be inserted in the result, the option
- <c>{insert_replaced, <anno>InsPos</anno>}</c> will insert the matching part into
- <c><anno>Replacement</anno></c> at the given position (or positions) before actually
- inserting <c><anno>Replacement</anno></c> into the <c><anno>Subject</anno></c>. Example:</p>
+ <p><em>Example:</em></p>
<code>
-1> binary:replace(&lt;&lt;"abcde"&gt;&gt;,&lt;&lt;"b"&gt;&gt;,&lt;&lt;"[]"&gt;&gt;,[{insert_replaced,1}]).
+1> binary:replace(&lt;&lt;"abcde"&gt;&gt;,&lt;&lt;"b"&gt;&gt;,&lt;&lt;"[]"&gt;&gt;, [{insert_replaced,1}]).
&lt;&lt;"a[b]cde"&gt;&gt;
-2> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[]"&gt;&gt;,
- [global,{insert_replaced,1}]).
+2> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[]"&gt;&gt;,[global,{insert_replaced,1}]).
&lt;&lt;"a[b]c[d]e"&gt;&gt;
-3> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[]"&gt;&gt;,
- [global,{insert_replaced,[1,1]}]).
+3> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[]"&gt;&gt;,[global,{insert_replaced,[1,1]}]).
&lt;&lt;"a[bb]c[dd]e"&gt;&gt;
-4> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[-]"&gt;&gt;,
- [global,{insert_replaced,[1,2]}]).
-&lt;&lt;"a[b-b]c[d-d]e"&gt;&gt;
-</code>
+4> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[-]"&gt;&gt;,[global,{insert_replaced,[1,2]}]).
+&lt;&lt;"a[b-b]c[d-d]e"&gt;&gt;</code>
- <p>If any position given in <c><anno>InsPos</anno></c> is greater than the size of the replacement binary, a <c>badarg</c> exception is raised.</p>
+ <p>If any position specified in <c><anno>InsPos</anno></c> &gt; size
+ of the replacement binary, a <c>badarg</c> exception is raised.</p>
- <p>The options <c>global</c> and <c>{scope, part()}</c> work as for <seealso marker="#split-3">split/3</seealso>. The return type is always a <c>binary()</c>.</p>
+ <p>Options <c>global</c> and <c>{scope, part()}</c> work as for
+ <seealso marker="#split-3"><c>split/3</c></seealso>.
+ The return type is always a <c>binary()</c>.</p>
- <p>For a description of <c><anno>Pattern</anno></c>, see <seealso marker="#compile_pattern-1">compile_pattern/1</seealso>.</p>
+ <p>For a description of <c><anno>Pattern</anno></c>, see
+ <seealso marker="#compile_pattern-1"><c>compile_pattern/1</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="split" arity="2"/>
- <fsummary>Splits a binary according to a pattern</fsummary>
+ <fsummary>Split a binary according to a pattern.</fsummary>
<desc>
- <p>The same as <c>split(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.</p>
+ <p>Same as <c>split(<anno>Subject</anno>, <anno>Pattern</anno>,
+ [])</c>.</p>
</desc>
</func>
+
<func>
<name name="split" arity="3"/>
- <fsummary>Splits a binary according to a pattern</fsummary>
+ <fsummary>Split a binary according to a pattern.</fsummary>
<desc>
+ <p>Splits <c><anno>Subject</anno></c> into a list of binaries based on
+ <c><anno>Pattern</anno></c>. If option <c>global</c> is not specified,
+ only the first occurrence of <c><anno>Pattern</anno></c> in
+ <c><anno>Subject</anno></c> gives rise to a split.</p>
- <p>Splits <c><anno>Subject</anno></c> into a list of binaries based on <c><anno>Pattern</anno></c>. If
- the option global is not given, only the first occurrence of
- <c><anno>Pattern</anno></c> in <c><anno>Subject</anno></c> will give rise to a split.</p>
+ <p>The parts of <c><anno>Pattern</anno></c> found in
+ <c><anno>Subject</anno></c> are not included in the result.</p>
- <p>The parts of <c><anno>Pattern</anno></c> actually found in <c><anno>Subject</anno></c> are not included in the result.</p>
-
- <p>Example:</p>
+ <p><em>Example:</em></p>
<code>
1> binary:split(&lt;&lt;1,255,4,0,0,0,2,3&gt;&gt;, [&lt;&lt;0,0,0&gt;&gt;,&lt;&lt;2&gt;&gt;],[]).
[&lt;&lt;1,255,4&gt;&gt;, &lt;&lt;2,3&gt;&gt;]
2> binary:split(&lt;&lt;0,1,0,0,4,255,255,9&gt;&gt;, [&lt;&lt;0,0&gt;&gt;, &lt;&lt;255,255&gt;&gt;],[global]).
-[&lt;&lt;0,1&gt;&gt;,&lt;&lt;4&gt;&gt;,&lt;&lt;9&gt;&gt;]
-</code>
+[&lt;&lt;0,1&gt;&gt;,&lt;&lt;4&gt;&gt;,&lt;&lt;9&gt;&gt;]</code>
<p>Summary of options:</p>
- <taglist>
+ <taglist>
<tag>{scope, part()}</tag>
-
- <item><p>Works as in <seealso marker="#match-3">match/3</seealso> and
- <seealso marker="#matches-3">matches/3</seealso>. Note that
+ <item><p>Works as in <seealso marker="#match-3"><c>match/3</c></seealso>
+ and <seealso marker="#matches-3"><c>matches/3</c></seealso>. Notice that
this only defines the scope of the search for matching strings,
- it does not cut the binary before splitting. The bytes before
- and after the scope will be kept in the result. See example
- below.</p></item>
-
+ it does not cut the binary before splitting. The bytes before and after
+ the scope are kept in the result. See the example below.</p></item>
<tag>trim</tag>
-
- <item><p>Removes trailing empty parts of the result (as does trim in <c>re:split/3</c>)</p></item>
-
+ <item><p>Removes trailing empty parts of the result (as does <c>trim</c>
+ in <seealso marker="re#split/3"><c>re:split/3</c></seealso>.</p></item>
<tag>trim_all</tag>
-
<item><p>Removes all empty parts of the result.</p></item>
-
<tag>global</tag>
-
- <item><p>Repeats the split until the <c><anno>Subject</anno></c> is
- exhausted. Conceptually the global option makes split work on
- the positions returned by <seealso marker="#matches-3">matches/3</seealso>,
- while it normally
- works on the position returned by
- <seealso marker="#match-3">match/3</seealso>.</p></item>
-
+ <item><p>Repeats the split until <c><anno>Subject</anno></c> is
+ exhausted. Conceptually option <c>global</c> makes split work
+ on the positions returned by
+ <seealso marker="#matches-3"><c>matches/3</c></seealso>, while it
+ normally works on the position returned by
+ <seealso marker="#match-3"><c>match/3</c></seealso>.</p></item>
</taglist>
<p>Example of the difference between a scope and taking the
binary apart before splitting:</p>
<code>
-1> binary:split(&lt;&lt;"banana"&gt;&gt;,[&lt;&lt;"a"&gt;&gt;],[{scope,{2,3}}]).
+1> binary:split(&lt;&lt;"banana"&gt;&gt;, [&lt;&lt;"a"&gt;&gt;],[{scope,{2,3}}]).
[&lt;&lt;"ban"&gt;&gt;,&lt;&lt;"na"&gt;&gt;]
-2> binary:split(binary:part(&lt;&lt;"banana"&gt;&gt;,{2,3}),[&lt;&lt;"a"&gt;&gt;],[]).
-[&lt;&lt;"n"&gt;&gt;,&lt;&lt;"n"&gt;&gt;]
-</code>
+2> binary:split(binary:part(&lt;&lt;"banana"&gt;&gt;,{2,3}), [&lt;&lt;"a"&gt;&gt;],[]).
+[&lt;&lt;"n"&gt;&gt;,&lt;&lt;"n"&gt;&gt;]</code>
<p>The return type is always a list of binaries that are all
- referencing <c><anno>Subject</anno></c>. This means that the data in <c><anno>Subject</anno></c> is not
- actually copied to new binaries and that <c><anno>Subject</anno></c> cannot be
- garbage collected until the results of the split are no longer
- referenced.</p>
-
- <p>For a description of <c><anno>Pattern</anno></c>, see <seealso marker="#compile_pattern-1">compile_pattern/1</seealso>.</p>
+ referencing <c><anno>Subject</anno></c>. This means that the data in
+ <c><anno>Subject</anno></c> is not copied to new binaries, and that
+ <c><anno>Subject</anno></c> cannot be garbage collected until the results
+ of the split are no longer referenced.</p>
+ <p>For a description of <c><anno>Pattern</anno></c>, see
+ <seealso marker="#compile_pattern-1"><c>compile_pattern/1</c></seealso>.
+ </p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/book.xml b/lib/stdlib/doc/src/book.xml
index 043f6cc19b..008d7f4319 100644
--- a/lib/stdlib/doc/src/book.xml
+++ b/lib/stdlib/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -27,7 +27,7 @@
<docno></docno>
<date>1997-05-02</date>
<rev>1.3</rev>
- <file>book.sgml</file>
+ <file>book.xml</file>
</header>
<insidecover>
</insidecover>
@@ -48,3 +48,4 @@
<index></index>
</book>
+
diff --git a/lib/stdlib/doc/src/c.xml b/lib/stdlib/doc/src/c.xml
index e5238fa7db..92ab59c6b0 100644
--- a/lib/stdlib/doc/src/c.xml
+++ b/lib/stdlib/doc/src/c.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -25,270 +25,310 @@
<title>c</title>
<prepared>Joe Armstrong</prepared>
<docno>1</docno>
- <date>96-10-30</date>
+ <date>1996-10-30</date>
<rev>B</rev>
</header>
<module>c</module>
- <modulesummary>Command Interface Module</modulesummary>
+ <modulesummary>Command interface module.</modulesummary>
<description>
- <p>The <c>c</c> module enables users to enter the short form of
+ <p>This module enables users to enter the short form of
some commonly used commands.</p>
<note>
- <p>These functions are are intended for interactive use in
- the Erlang shell only. The module prefix may be omitted.</p>
+ <p>These functions are intended for interactive use in
+ the Erlang shell only. The module prefix can be omitted.</p>
</note>
</description>
+
<funcs>
<func>
<name name="bt" arity="1"/>
- <fsummary>Stack backtrace for a process</fsummary>
+ <fsummary>Stack backtrace for a process.</fsummary>
<desc>
<p>Stack backtrace for a process. Equivalent to
<c>erlang:process_display(<anno>Pid</anno>, backtrace)</c>.</p>
</desc>
</func>
+
<func>
<name name="c" arity="1"/>
<name name="c" arity="2"/>
- <fsummary>Compile and load code in a file</fsummary>
+ <fsummary>Compile and load code in a file.</fsummary>
<desc>
- <p><c>c/1,2</c> compiles and then purges and loads the code for
- a file. <c><anno>Options</anno></c> defaults to []. Compilation is
+ <p>Compiles and then purges and loads the code for a file.
+ <c><anno>Options</anno></c> defaults to <c>[]</c>. Compilation is
equivalent to:</p>
<code type="none">
compile:file(<anno>File</anno>, <anno>Options</anno> ++ [report_errors, report_warnings])</code>
- <p>Note that purging the code means that any processes
+ <p>Notice that purging the code means that any processes
lingering in old code for the module are killed without
- warning. See <c>code/3</c> for more information.</p>
+ warning. For more information, see <c>code/3</c>.</p>
</desc>
</func>
+
<func>
<name name="cd" arity="1"/>
- <fsummary>Change working directory</fsummary>
+ <fsummary>Change working directory.</fsummary>
<desc>
- <p>Changes working directory to <c><anno>Dir</anno></c>, which may be a
+ <p>Changes working directory to <c><anno>Dir</anno></c>, which can be a
relative name, and then prints the name of the new working
directory.</p>
+ <p><em>Example:</em></p>
<pre>
2> <input>cd("../erlang").</input>
/home/ron/erlang</pre>
</desc>
</func>
+
<func>
<name name="flush" arity="0"/>
- <fsummary>Flush any messages sent to the shell</fsummary>
+ <fsummary>Flush any messages sent to the shell.</fsummary>
<desc>
<p>Flushes any messages sent to the shell.</p>
</desc>
</func>
+
<func>
<name name="help" arity="0"/>
- <fsummary>Help information</fsummary>
+ <fsummary>Help information.</fsummary>
<desc>
<p>Displays help information: all valid shell internal commands,
and commands in this module.</p>
</desc>
</func>
+
<func>
<name name="i" arity="0"/>
<name name="ni" arity="0"/>
- <fsummary>Information about the system</fsummary>
+ <fsummary>System information.</fsummary>
<desc>
- <p><c>i/0</c> displays information about the system, listing
+ <p><c>i/0</c> displays system information, listing
information about all processes. <c>ni/0</c> does the same,
but for all nodes the network.</p>
</desc>
</func>
+
<func>
<name name="i" arity="3"/>
- <fsummary>Information about pid &lt;X.Y.Z&gt;</fsummary>
+ <fsummary>Information about pid &lt;X.Y.Z&gt;.</fsummary>
<desc>
<p>Displays information about a process, Equivalent to
- <c>process_info(pid(<anno>X</anno>, <anno>Y</anno>, <anno>Z</anno>))</c>, but location transparent.</p>
+ <c>process_info(pid(<anno>X</anno>, <anno>Y</anno>,
+ <anno>Z</anno>))</c>, but location transparent.</p>
</desc>
</func>
+
<func>
<name name="l" arity="1"/>
- <fsummary>Load or reload module</fsummary>
+ <fsummary>Load or reload a module.</fsummary>
<desc>
<p>Purges and loads, or reloads, a module by calling
<c>code:purge(<anno>Module</anno>)</c> followed by
<c>code:load_file(<anno>Module</anno>)</c>.</p>
- <p>Note that purging the code means that any processes
+ <p>Notice that purging the code means that any processes
lingering in old code for the module are killed without
- warning. See <c>code/3</c> for more information.</p>
+ warning. For more information, see <c>code/3</c>.</p>
</desc>
</func>
+
<func>
<name>lc(Files) -> ok</name>
- <fsummary>Compile a list of files</fsummary>
+ <fsummary>Compile a list of files.</fsummary>
<type>
<v>Files = [File]</v>
- <v>File = <seealso marker="file#type-filename">file:filename()
- </seealso></v>
+ <v>File</v>
</type>
<desc>
- <p>Compiles a list of files by calling <c>compile:file(File, [report_errors, report_warnings])</c> for each <c>File</c>
- in <c>Files</c>.</p>
+ <p>Compiles a list of files by calling
+ <c>compile:file(File, [report_errors, report_warnings])</c> for each
+ <c>File</c> in <c>Files</c>.</p>
+ <p>For information about <c>File</c>, see
+ <seealso marker="file#type-filename"><c>file:filename()</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="ls" arity="0"/>
- <fsummary>List files in the current directory</fsummary>
+ <fsummary>List files in the current directory.</fsummary>
<desc>
<p>Lists files in the current directory.</p>
</desc>
</func>
+
<func>
<name name="ls" arity="1"/>
- <fsummary>List files in a directory or a single file</fsummary>
+ <fsummary>List files in a directory or a single file.</fsummary>
<desc>
- <p>Lists files in directory <c><anno>Dir</anno></c> or, if Dir is a file, only list it.</p>
+ <p>Lists files in directory <c><anno>Dir</anno></c> or, if <c>Dir</c>
+ is a file, only lists it.</p>
</desc>
</func>
+
<func>
<name name="m" arity="0"/>
- <fsummary>Which modules are loaded</fsummary>
+ <fsummary>Which modules are loaded.</fsummary>
<desc>
<p>Displays information about the loaded modules, including
the files from which they have been loaded.</p>
</desc>
</func>
+
<func>
<name name="m" arity="1"/>
- <fsummary>Information about a module</fsummary>
+ <fsummary>Information about a module.</fsummary>
<desc>
<p>Displays information about <c><anno>Module</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="memory" arity="0"/>
- <fsummary>Memory allocation information</fsummary>
+ <fsummary>Memory allocation information.</fsummary>
<desc>
<p>Memory allocation information. Equivalent to
- <seealso marker="erts:erlang#memory/0"><c>erlang:memory/0</c>
- </seealso>.</p>
+ <seealso marker="erts:erlang#memory/0"><c>erlang:memory/0</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="memory" arity="1" clause_i="1"/>
<name name="memory" arity="1" clause_i="2"/>
- <fsummary>Memory allocation information</fsummary>
+ <fsummary>Memory allocation information.</fsummary>
<desc>
<p>Memory allocation information. Equivalent to
- <seealso marker="erts:erlang#memory/1"><c>erlang:memory/1</c>
- </seealso>.</p>
+ <seealso marker="erts:erlang#memory/1"><c>erlang:memory/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="nc" arity="1"/>
<name name="nc" arity="2"/>
- <fsummary>Compile and load code in a file on all nodes</fsummary>
+ <fsummary>Compile and load code in a file on all nodes.</fsummary>
<desc>
<p>Compiles and then loads the code for a file on all nodes.
- <c><anno>Options</anno></c> defaults to []. Compilation is equivalent to:</p>
+ <c><anno>Options</anno></c> defaults to <c>[]</c>.
+ Compilation is equivalent to:</p>
<code type="none">
compile:file(<anno>File</anno>, <anno>Options</anno> ++ [report_errors, report_warnings])</code>
</desc>
</func>
+
<func>
<name name="nl" arity="1"/>
- <fsummary>Load module on all nodes</fsummary>
+ <fsummary>Load module on all nodes.</fsummary>
<desc>
<p>Loads <c><anno>Module</anno></c> on all nodes.</p>
</desc>
</func>
+
<func>
<name name="pid" arity="3"/>
- <fsummary>Convert X,Y,Z to a pid</fsummary>
+ <fsummary>Convert <c>X,Y,Z</c> to a pid.</fsummary>
<desc>
- <p>Converts <c><anno>X</anno></c>, <c><anno>Y</anno></c>, <c><anno>Z</anno></c> to the pid
- <c><![CDATA[<X.Y.Z>]]></c>. This function should only be used when
- debugging.</p>
+ <p>Converts <c><anno>X</anno></c>, <c><anno>Y</anno></c>,
+ <c><anno>Z</anno></c> to pid <c><![CDATA[<X.Y.Z>]]></c>.
+ This function is only to be used when debugging.</p>
</desc>
</func>
+
<func>
<name name="pwd" arity="0"/>
- <fsummary>Print working directory</fsummary>
+ <fsummary>Print working directory.</fsummary>
<desc>
<p>Prints the name of the working directory.</p>
</desc>
</func>
+
<func>
<name name="q" arity="0"/>
- <fsummary>Quit - shorthand for <c>init:stop()</c></fsummary>
+ <fsummary>Quit - shorthand for <c>init:stop()</c>.</fsummary>
<desc>
<p>This function is shorthand for <c>init:stop()</c>, that is,
it causes the node to stop in a controlled fashion.</p>
</desc>
</func>
+
<func>
<name name="regs" arity="0"/>
<name name="nregs" arity="0"/>
- <fsummary>Information about registered processes</fsummary>
+ <fsummary>Information about registered processes.</fsummary>
<desc>
<p><c>regs/0</c> displays information about all registered
processes. <c>nregs/0</c> does the same, but for all nodes
in the network.</p>
</desc>
</func>
+
<func>
<name name="uptime" arity="0"/>
- <fsummary>Print node uptime</fsummary>
+ <fsummary>Print node uptime.</fsummary>
<desc>
- <p>Prints the node uptime (as given by
- <c>erlang:statistics(wall_clock)</c>), in human-readable form.</p>
+ <p>Prints the node uptime (as specified by
+ <c>erlang:statistics(wall_clock)</c>) in human-readable form.</p>
</desc>
</func>
+
<func>
<name>xm(ModSpec) -> void()</name>
- <fsummary>Cross reference check a module</fsummary>
+ <fsummary>Cross-reference check a module.</fsummary>
<type>
<v>ModSpec = Module | Filename</v>
<v>&nbsp;Module = atom()</v>
<v>&nbsp;Filename = string()</v>
</type>
<desc>
- <p>This function finds undefined functions, unused functions,
+ <p>Finds undefined functions, unused functions,
and calls to deprecated functions in a module by calling
<c>xref:m/1</c>.</p>
</desc>
</func>
+
<func>
<name>y(File) -> YeccRet</name>
- <fsummary>Generate an LALR-1 parser</fsummary>
+ <fsummary>Generate an LALR-1 parser.</fsummary>
<type>
- <v>File = name() -- see filename(3)</v>
- <v>YeccRet = -- see yecc:file/2</v>
+ <v>File = name()</v>
+ <v>YeccRet</v>
</type>
<desc>
<p>Generates an LALR-1 parser. Equivalent to:</p>
<code type="none">
yecc:file(File)</code>
+ <p>For information about <c>File = name()</c>, see
+ <seealso marker="filename"><c>filename(3)</c></seealso>.
+ For information about <c>YeccRet</c>, see
+ <seealso marker="parsetools:yecc#file/1"><c>yecc:file/2</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name>y(File, Options) -> YeccRet</name>
- <fsummary>Generate an LALR-1 parser</fsummary>
+ <fsummary>Generate an LALR-1 parser.</fsummary>
<type>
- <v>File = name() -- see filename(3)</v>
- <v>Options, YeccRet = -- see yecc:file/2</v>
+ <v>File = name()</v>
+ <v>Options, YeccRet</v>
</type>
<desc>
<p>Generates an LALR-1 parser. Equivalent to:</p>
<code type="none">
yecc:file(File, Options)</code>
+ <p>For information about <c>File = name()</c>, see
+ <seealso marker="filename"><c>filename(3)</c></seealso>.
+ For information about <c>Options</c> and <c>YeccRet</c>, see
+ <seealso marker="parsetools:yecc#file/1"><c>yecc:file/2</c></seealso>.
+ </p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="compiler:compile">compile(3)</seealso>,
- <seealso marker="filename">filename(3)</seealso>,
- <seealso marker="erts:erlang">erlang(3)</seealso>,
- <seealso marker="parsetools:yecc">yecc(3)</seealso>,
- <seealso marker="tools:xref">xref(3)</seealso></p>
+ <p><seealso marker="filename"><c>filename(3)</c></seealso>,
+ <seealso marker="compiler:compile"><c>compile(3)</c></seealso>,
+ <seealso marker="erts:erlang"><c>erlang(3)</c></seealso>,
+ <seealso marker="parsetools:yecc"><c>yecc(3)</c></seealso>,
+ <seealso marker="tools:xref"><c>xref(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/calendar.xml b/lib/stdlib/doc/src/calendar.xml
index 853184dc0f..65b3edcdf6 100644
--- a/lib/stdlib/doc/src/calendar.xml
+++ b/lib/stdlib/doc/src/calendar.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,20 +29,21 @@
<rev>B</rev>
</header>
<module>calendar</module>
- <modulesummary>Local and universal time, day-of-the-week, date and time conversions</modulesummary>
+ <modulesummary>Local and universal time, day of the week, date and time
+ conversions.</modulesummary>
<description>
<p>This module provides computation of local and universal time,
- day-of-the-week, and several time conversion functions.</p>
+ day of the week, and many time conversion functions.</p>
<p>Time is local when it is adjusted in accordance with the current
time zone and daylight saving. Time is universal when it reflects
the time at longitude zero, without any adjustment for daylight
saving. Universal Coordinated Time (UTC) time is also called
Greenwich Mean Time (GMT).</p>
<p>The time functions <c>local_time/0</c> and
- <c>universal_time/0</c> provided in this module both return date
- and time. The reason for this is that separate functions for date
- and time may result in a date/time combination which is displaced
- by 24 hours. This happens if one of the functions is called
+ <c>universal_time/0</c> in this module both return date
+ and time. The is because separate functions for date
+ and time can result in a date/time combination that is displaced
+ by 24 hours. This occurs if one of the functions is called
before midnight, and the other after midnight. This problem also
applies to the Erlang BIFs <c>date/0</c> and <c>time/0</c>, and
their use is strongly discouraged if a reliable date/time stamp
@@ -56,22 +57,21 @@
<p>The Gregorian calendar in this module is extended back to year 0.
For a given date, the <em>gregorian days</em> is the number of
days up to and including the date specified. Similarly,
- the <em>gregorian seconds</em> for a given date and time, is
- the the number of seconds up to and including the specified date
+ the <em>gregorian seconds</em> for a specified date and time is
+ the number of seconds up to and including the specified date
and time.</p>
<p>For computing differences between epochs in time, use
the functions counting gregorian days or seconds. If epochs are
- given as local time, they must be converted to universal time, in
- order to get the correct value of the elapsed time between epochs.
- Use of the function <c>time_difference/2</c> is discouraged.</p>
- <p>There exists different definitions for the week of the year.
- The calendar module contains a week of the year implementation
- which conforms to the ISO 8601 standard. Since the week number for
- a given date can fall on the previous, the current or on the next
- year it is important to provide the information which year is it
- together with the week number. The function <c>iso_week_number/0</c>
- and <c>iso_week_number/1</c> returns a tuple of the year and the
- week number.</p>
+ specified as local time, they must be converted to universal time
+ to get the correct value of the elapsed time between epochs.
+ Use of function <c>time_difference/2</c> is discouraged.</p>
+ <p>Different definitions exist for the week of the year.
+ This module contains a week of the year implementation
+ conforming to the ISO 8601 standard. As the week number for a
+ specified date can fall on the previous, the current, or on the next
+ year, it is important to specify both the year and the week number.
+ Functions <c>iso_week_number/0</c> and <c>iso_week_number/1</c>
+ return a tuple of the year and the week number.</p>
</description>
<datatypes>
@@ -86,9 +86,9 @@
</datatype>
<datatype>
<name name="year"/>
- <desc><p>Year cannot be abbreviated. Example: 93 denotes year
- 93, not 1993. Valid range depends on the underlying OS. The
- date tuple must denote a valid date.</p>
+ <desc><p>Year cannot be abbreviated. For example, 93 denotes year
+ 93, not 1993. The valid range depends on the underlying operating
+ system. The date tuple must denote a valid date.</p>
</desc>
</datatype>
<datatype>
@@ -130,186 +130,221 @@
<func>
<name name="date_to_gregorian_days" arity="1"/>
<name name="date_to_gregorian_days" arity="3"/>
- <fsummary>Compute the number of days from year 0 up to the given date</fsummary>
+ <fsummary>Compute the number of days from year 0 up to the specified
+ date.</fsummary>
<type variable="Date" name_i="1"/>
<type variable="Year"/>
<type variable="Month"/>
<type variable="Day"/>
<desc>
- <p>This function computes the number of gregorian days starting
- with year 0 and ending at the given date.</p>
+ <p>Computes the number of gregorian days starting
+ with year 0 and ending at the specified date.</p>
</desc>
</func>
+
<func>
<name name="datetime_to_gregorian_seconds" arity="1"/>
- <fsummary>Compute the number of seconds from year 0 up to the given date and time</fsummary>
+ <fsummary>Compute the number of seconds from year 0 up to the specified
+ date and time.</fsummary>
<desc>
- <p>This function computes the number of gregorian seconds
- starting with year 0 and ending at the given date and time.</p>
+ <p>Computes the number of gregorian seconds starting
+ with year 0 and ending at the specified date and time.</p>
</desc>
</func>
+
<func>
<name name="day_of_the_week" arity="1"/>
<name name="day_of_the_week" arity="3"/>
- <fsummary>Compute the day of the week</fsummary>
+ <fsummary>Compute the day of the week.</fsummary>
<type variable="Date" name_i="1"/>
<type variable="Year"/>
<type variable="Month"/>
<type variable="Day"/>
<desc>
- <p>This function computes the day of the week given <c><anno>Year</anno></c>,
- <c><anno>Month</anno></c> and <c><anno>Day</anno></c>. The return value denotes the day
- of the week as <c>1</c>: Monday, <c>2</c>: Tuesday, and so on.</p>
+ <p>Computes the day of the week from the specified
+ <c><anno>Year</anno></c>, <c><anno>Month</anno></c>, and
+ <c><anno>Day</anno></c>. Returns the day of the week as
+ <c>1</c>: Monday, <c>2</c>: Tuesday, and so on.</p>
</desc>
</func>
+
<func>
<name name="gregorian_days_to_date" arity="1"/>
- <fsummary>Compute the date given the number of gregorian days</fsummary>
+ <fsummary>Compute the date from the number of gregorian days.</fsummary>
<desc>
- <p>This function computes the date given the number of
- gregorian days.</p>
+ <p>Computes the date from the specified number of gregorian days.</p>
</desc>
</func>
+
<func>
<name name="gregorian_seconds_to_datetime" arity="1"/>
- <fsummary>Compute the date given the number of gregorian days</fsummary>
+ <fsummary>Compute the date and time from the number of gregorian seconds.
+ </fsummary>
<desc>
- <p>This function computes the date and time from the given
+ <p>Computes the date and time from the specified
number of gregorian seconds.</p>
</desc>
</func>
+
<func>
<name name="is_leap_year" arity="1"/>
- <fsummary>Check if a year is a leap year</fsummary>
+ <fsummary>Check if the year is a leap year.</fsummary>
<desc>
- <p>This function checks if a year is a leap year.</p>
+ <p>Checks if the specified year is a leap year.</p>
</desc>
</func>
+
<func>
<name name="iso_week_number" arity="0"/>
- <fsummary>Compute the iso week number for the actual date</fsummary>
+ <fsummary>Compute the ISO week number for the actual date.</fsummary>
<desc>
- <p>This function returns the tuple {Year, WeekNum} representing
- the iso week number for the actual date. For determining the
- actual date, the function <c>local_time/0</c> is used.</p>
+ <p>Returns tuple <c>{Year, WeekNum}</c> representing
+ the ISO week number for the actual date. To determine the
+ actual date, use function
+ <seealso marker="#local_time/0"><c>local_time/0</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="iso_week_number" arity="1"/>
- <fsummary>Compute the iso week number for the given date</fsummary>
+ <fsummary>Compute the ISO week number for the specified date.</fsummary>
<desc>
- <p>This function returns the tuple {Year, WeekNum} representing
- the iso week number for the given date.</p>
+ <p>Returns tuple <c>{Year, WeekNum}</c> representing
+ the ISO week number for the specified date.</p>
</desc>
</func>
+
<func>
<name name="last_day_of_the_month" arity="2"/>
- <fsummary>Compute the number of days in a month</fsummary>
+ <fsummary>Compute the number of days in a month.</fsummary>
<desc>
- <p>This function computes the number of days in a month.</p>
+ <p>Computes the number of days in a month.</p>
</desc>
</func>
+
<func>
<name name="local_time" arity="0"/>
- <fsummary>Compute local time</fsummary>
+ <fsummary>Compute local time.</fsummary>
<desc>
- <p>This function returns the local time reported by
+ <p>Returns the local time reported by
the underlying operating system.</p>
</desc>
</func>
+
<func>
<name name="local_time_to_universal_time" arity="1"/>
- <fsummary>Convert from local time to universal time (deprecated)</fsummary>
+ <fsummary>Convert from local time to universal time (deprecated).
+ </fsummary>
<desc>
- <p>This function converts from local time to Universal
- Coordinated Time (UTC). <c><anno>DateTime1</anno></c> must refer to a local
+ <p>Converts from local time to Universal Coordinated Time (UTC).
+ <c><anno>DateTime1</anno></c> must refer to a local
date after Jan 1, 1970.</p>
<warning>
<p>This function is deprecated. Use
- <c>local_time_to_universal_time_dst/1</c> instead, as it
- gives a more correct and complete result. Especially for
- the period that does not exist since it gets skipped during
+ <seealso marker="#local_time_to_universal_time_dst/1">
+ <c>local_time_to_universal_time_dst/1</c></seealso>
+ instead, as it gives a more correct and complete result.
+ Especially for
+ the period that does not exist, as it is skipped during
the switch <em>to</em> daylight saving time, this function
still returns a result.</p>
</warning>
</desc>
</func>
+
<func>
<name name="local_time_to_universal_time_dst" arity="1"/>
- <fsummary>Convert from local time to universal time(s)</fsummary>
+ <fsummary>Convert from local time to universal time(s).</fsummary>
<desc>
- <p>This function converts from local time to Universal
- Coordinated Time (UTC). <c><anno>DateTime1</anno></c> must refer to a local
+ <p>Converts from local time to Universal Coordinated Time (UTC).
+ <c><anno>DateTime1</anno></c> must refer to a local
date after Jan 1, 1970.</p>
- <p>The return value is a list of 0, 1 or 2 possible UTC times:</p>
+ <p>The return value is a list of 0, 1, or 2 possible UTC times:</p>
<taglist>
<tag><c>[]</c></tag>
<item>
<p>For a local <c>{Date1, Time1}</c> during the period that
is skipped when switching <em>to</em> daylight saving
- time, there is no corresponding UTC since the local time
- is illegal - it has never happened.</p>
+ time, there is no corresponding UTC, as the local time
+ is illegal (it has never occured).</p>
</item>
<tag><c>[DstDateTimeUTC, DateTimeUTC]</c></tag>
<item>
<p>For a local <c>{Date1, Time1}</c> during the period that
is repeated when switching <em>from</em> daylight saving
- time, there are two corresponding UTCs. One for the first
+ time, two corresponding UTCs exist; one for the first
instance of the period when daylight saving time is still
active, and one for the second instance.</p>
</item>
<tag><c>[DateTimeUTC]</c></tag>
<item>
- <p>For all other local times there is only one
- corresponding UTC.</p>
+ <p>For all other local times only one corresponding UTC exists.</p>
</item>
</taglist>
</desc>
</func>
+
+ <func>
+ <name name="now_to_datetime" arity="1"/>
+ <fsummary>Convert now to date and time.</fsummary>
+ <desc>
+ <p>Returns Universal Coordinated Time (UTC)
+ converted from the return value from
+ <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
<func>
<name name="now_to_local_time" arity="1"/>
- <fsummary>Convert now to local date and time</fsummary>
+ <fsummary>Convert now to local date and time.</fsummary>
<desc>
- <p>This function returns local date and time converted from
- the return value from
- <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.</p>
+ <p>Returns local date and time converted from the return value from
+ <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="now_to_universal_time" arity="1"/>
- <name name="now_to_datetime" arity="1"/>
- <fsummary>Convert now to date and time</fsummary>
+ <fsummary>Convert now to date and time.</fsummary>
<desc>
- <p>This function returns Universal Coordinated Time (UTC)
- converted from the return value from
- <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.</p>
+ <p>Returns Universal Coordinated Time (UTC)
+ converted from the return value from
+ <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="seconds_to_daystime" arity="1"/>
- <fsummary>Compute days and time from seconds</fsummary>
+ <fsummary>Compute days and time from seconds.</fsummary>
<desc>
- <p>This function transforms a given number of seconds into days,
- hours, minutes, and seconds. The <c><anno>Time</anno></c> part is always
- non-negative, but <c><anno>Days</anno></c> is negative if the argument
+ <p>Converts a specified number of seconds into days, hours, minutes,
+ and seconds. <c><anno>Time</anno></c> is always non-negative, but
+ <c><anno>Days</anno></c> is negative if argument
<c><anno>Seconds</anno></c> is.</p>
</desc>
</func>
+
<func>
<name name="seconds_to_time" arity="1"/>
- <fsummary>Compute time from seconds</fsummary>
+ <fsummary>Compute time from seconds.</fsummary>
<type name="secs_per_day"/>
<desc>
- <p>This function computes the time from the given number of
- seconds. <c><anno>Seconds</anno></c> must be less than the number of
+ <p>Computes the time from the specified number of seconds.
+ <c><anno>Seconds</anno></c> must be less than the number of
seconds per day (86400).</p>
</desc>
</func>
+
<func>
<name name="time_difference" arity="2"/>
- <fsummary>Compute the difference between two times (deprecated)</fsummary>
+ <fsummary>Compute the difference between two times (deprecated).
+ </fsummary>
<desc>
- <p>This function returns the difference between two <c>{Date, Time}</c> tuples. <c><anno>T2</anno></c> should refer to an epoch later
+ <p>Returns the difference between two <c>{Date, Time}</c> tuples.
+ <c><anno>T2</anno></c> is to refer to an epoch later
than <c><anno>T1</anno></c>.</p>
<warning>
<p>This function is obsolete. Use the conversion functions for
@@ -317,33 +352,38 @@
</warning>
</desc>
</func>
+
<func>
<name name="time_to_seconds" arity="1"/>
- <fsummary>Compute the number of seconds since midnight up to the given time</fsummary>
+ <fsummary>Compute the number of seconds since midnight up to the
+ specified time.</fsummary>
<type name="secs_per_day"/>
<desc>
- <p>This function computes the number of seconds since midnight
+ <p>Returns the number of seconds since midnight
up to the specified time.</p>
</desc>
</func>
+
<func>
<name name="universal_time" arity="0"/>
- <fsummary>Compute universal time</fsummary>
+ <fsummary>Compute universal time.</fsummary>
<desc>
- <p>This function returns the Universal Coordinated Time (UTC)
- reported by the underlying operating system. Local time is
- returned if universal time is not available.</p>
+ <p>Returns the Universal Coordinated Time (UTC)
+ reported by the underlying operating system. Returns local time if
+ universal time is unavailable.</p>
</desc>
</func>
+
<func>
<name name="universal_time_to_local_time" arity="1"/>
- <fsummary>Convert from universal time to local time</fsummary>
+ <fsummary>Convert from universal time to local time.</fsummary>
<desc>
- <p>This function converts from Universal Coordinated Time (UTC)
- to local time. <c><anno>DateTime</anno></c> must refer to a date after Jan 1,
- 1970.</p>
+ <p>Converts from Universal Coordinated Time (UTC) to local time.
+ <c><anno>DateTime</anno></c> must refer to a date after Jan 1, 1970.
+ </p>
</desc>
</func>
+
<func>
<name name="valid_date" arity="1"/>
<name name="valid_date" arity="3"/>
@@ -362,31 +402,31 @@
<title>Leap Years</title>
<p>The notion that every fourth year is a leap year is not
completely true. By the Gregorian rule, a year Y is a leap year if
- either of the following rules is valid:</p>
+ one of the following rules is valid:</p>
<list type="bulleted">
<item>
- <p>Y is divisible by 4, but not by 100; or</p>
+ <p>Y is divisible by 4, but not by 100.</p>
</item>
<item>
<p>Y is divisible by 400.</p>
</item>
</list>
- <p>Accordingly, 1996 is a leap year, 1900 is not, but 2000 is.</p>
+ <p>Hence, 1996 is a leap year, 1900 is not, but 2000 is.</p>
</section>
<section>
<title>Date and Time Source</title>
<p>Local time is obtained from the Erlang BIF <c>localtime/0</c>.
Universal time is computed from the BIF <c>universaltime/0</c>.</p>
- <p>The following facts apply:</p>
+ <p>The following fapply:</p>
<list type="bulleted">
- <item>there are 86400 seconds in a day</item>
- <item>there are 365 days in an ordinary year</item>
- <item>there are 366 days in a leap year</item>
- <item>there are 1461 days in a 4 year period</item>
- <item>there are 36524 days in a 100 year period</item>
- <item>there are 146097 days in a 400 year period</item>
- <item>there are 719528 days between Jan 1, 0 and Jan 1, 1970.</item>
+ <item>There are 86400 seconds in a day.</item>
+ <item>There are 365 days in an ordinary year.</item>
+ <item>There are 366 days in a leap year.</item>
+ <item>There are 1461 days in a 4 year period.</item>
+ <item>There are 36524 days in a 100 year period.</item>
+ <item>There are 146097 days in a 400 year period.</item>
+ <item>There are 719528 days between Jan 1, 0 and Jan 1, 1970.</item>
</list>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/dets.xml b/lib/stdlib/doc/src/dets.xml
index 48400733d1..3b134d00b7 100644
--- a/lib/stdlib/doc/src/dets.xml
+++ b/lib/stdlib/doc/src/dets.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -26,82 +26,100 @@
<prepared>Claes Wikstr&ouml;m</prepared>
<responsible>Claes Wikstr&ouml;m</responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2001-06-06</date>
<rev>B</rev>
- <file>dets.sgml</file>
+ <file>dets.xml</file>
</header>
<module>dets</module>
- <modulesummary>A Disk Based Term Storage</modulesummary>
+ <modulesummary>A disk-based term storage.</modulesummary>
<description>
- <p>The module <c>dets</c> provides a term storage on file. The
+ <p>This module provides a term storage on file. The
stored terms, in this module called <em>objects</em>, are tuples
such that one element is defined to be the key. A Dets
<em>table</em> is a collection of objects with the key at the same
position stored on a file.</p>
- <p>Dets is used by the Mnesia application, and is provided as is
- for users who are interested in an efficient storage of Erlang
- terms on disk only. Many applications just need to store some
+
+ <p>This module is used by the Mnesia application, and is provided
+ "as is" for users who are interested in efficient storage of Erlang
+ terms on disk only. Many applications only need to store some
terms in a file. Mnesia adds transactions, queries, and
distribution. The size of Dets files cannot exceed 2 GB. If larger
- tables are needed, Mnesia's table fragmentation can be used.</p>
- <p>There are three types of Dets tables: set, bag and
- duplicate_bag. A table of type <em>set</em> has at most one object
- with a given key. If an object with a key already present in the
- table is inserted, the existing object is overwritten by the new
- object. A table of type <em>bag</em> has zero or more different
- objects with a given key. A table of type <em>duplicate_bag</em>
- has zero or more possibly matching objects with a given key.</p>
+ tables are needed, table fragmentation in Mnesia can be used.</p>
+
+ <p>Three types of Dets tables exist:</p>
+
+ <list type="bulleted">
+ <item><p><c>set</c>. A table of this type has at most one object with a
+ given key. If an object with a key already present in the
+ table is inserted, the existing object is overwritten by the new
+ object.</p>
+ </item>
+ <item><p><c>bag</c>. A table of this type has zero or more different
+ objects with a given key.</p>
+ </item>
+ <item><p><c>duplicate_bag</c>. A table of this type has zero or more
+ possibly matching objects with a given key.</p>
+ </item>
+ </list>
+
<p>Dets tables must be opened before they can be updated or read,
- and when finished they must be properly closed. If a table has not
- been properly closed, Dets will automatically repair the table.
+ and when finished they must be properly closed. If a table is not
+ properly closed, Dets automatically repairs the table.
This can take a substantial time if the table is large. A Dets
table is closed when the process which opened the table
- terminates. If several Erlang processes (users) open the same Dets
- table, they will share the table. The table is properly closed
+ terminates. If many Erlang processes (users) open the same Dets
+ table, they share the table. The table is properly closed
when all users have either terminated or closed the table. Dets
- tables are not properly closed if the Erlang runtime system is
- terminated abnormally.</p>
+ tables are not properly closed if the Erlang runtime system
+ terminates abnormally.</p>
+
<note>
- <p>A ^C command abnormally terminates an Erlang runtime
+ <p>A <c>^C</c> command abnormally terminates an Erlang runtime
system in a Unix environment with a break-handler.</p>
</note>
- <p>Since all operations performed by Dets are disk operations, it
+
+ <p>As all operations performed by Dets are disk operations, it
is important to realize that a single look-up operation involves a
- series of disk seek and read operations. For this reason, the Dets
- functions are much slower than the corresponding Ets functions,
+ series of disk seek and read operations. The Dets functions
+ are therefore much slower than the corresponding
+ <seealso marker="ets"><c>ets(3)</c></seealso> functions,
although Dets exports a similar interface.</p>
+
<p>Dets organizes data as a linear hash list and the hash list
grows gracefully as more data is inserted into the table. Space
management on the file is performed by what is called a buddy
system. The current implementation keeps the entire buddy system
in RAM, which implies that if the table gets heavily fragmented,
quite some memory can be used up. The only way to defragment a
- table is to close it and then open it again with the <c>repair</c>
- option set to <c>force</c>.</p>
- <p>It is worth noting that the ordered_set type present in Ets is
- not yet implemented by Dets, neither is the limited support for
- concurrent updates which makes a sequence of <c>first</c> and
- <c>next</c> calls safe to use on fixed Ets tables. Both these
- features will be implemented by Dets in a future release of
- Erlang/OTP. Until then, the Mnesia application (or some user
- implemented method for locking) has to be used to implement safe
- concurrency. Currently, no library of Erlang/OTP has support for
- ordered disk based term storage.</p>
+ table is to close it and then open it again with option <c>repair</c>
+ set to <c>force</c>.</p>
+
+ <p>Notice that type <c>ordered_set</c> in Ets is not yet
+ provided by Dets, neither is the limited support for
+ concurrent updates that makes a sequence of <c>first</c> and
+ <c>next</c> calls safe to use on fixed ETS tables. Both these
+ features will be provided by Dets in a future release of
+ Erlang/OTP. Until then, the Mnesia application (or some
+ user-implemented method for locking) must be used to implement safe
+ concurrency. Currently, no Erlang/OTP library has support for
+ ordered disk-based term storage.</p>
+
<p>Two versions of the format used for storing objects on file are
supported by Dets. The first version, 8, is the format always used
- for tables created by OTP R7 and earlier. The second version, 9,
- is the default version of tables created by OTP R8 (and later OTP
- releases). OTP R8 can create version 8 tables, and convert version
- 8 tables to version 9, and vice versa, upon request.
- </p>
+ for tables created by Erlang/OTP R7 and earlier. The second version, 9,
+ is the default version of tables created by Erlang/OTP R8 (and later
+ releases). Erlang/OTP R8 can create version 8 tables, and convert version
+ 8 tables to version 9, and conversely, upon request.</p>
<p>All Dets functions return <c>{error, Reason}</c> if an error
- occurs (<c>first/1</c> and <c>next/2</c> are exceptions, they exit
- the process with the error tuple). If given badly formed
- arguments, all functions exit the process with a <c>badarg</c>
+ occurs (<seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso> are exceptions, they
+ exit the process with the error tuple). If badly formed arguments are
+ specified, all functions exit the process with a <c>badarg</c>
message.</p>
</description>
+
<datatypes>
<datatype>
<name name="access"/>
@@ -130,10 +148,11 @@
<datatype>
<name name="match_spec"/>
<desc>
- <p>Match&nbsp;specifications, see the <seealso
- marker="erts:match_spec">match specification</seealso>
- documentation in the ERTS User's Guide and <seealso
- marker="ms_transform">ms_transform(3).</seealso></p>
+ <p>Match specifications, see section
+ <seealso marker="erts:match_spec">
+ Match Specification in Erlang</seealso> in ERTS User's Guide and the
+ <seealso marker="ms_transform"><c>ms_transform(3)</c></seealso>
+ module.</p>
</desc>
</datatype>
<datatype>
@@ -146,15 +165,15 @@
<name name="object_cont"/>
<desc>
<p>Opaque continuation used by <seealso marker="#match_object/1">
- <c>match_object/1</c></seealso> and <seealso marker="#match_object/3">
- <c>match_object/3</c></seealso>.</p>
+ <c>match_object/1</c></seealso> and
+ <seealso marker="#match_object/3"><c>match_object/3</c></seealso>.</p>
</desc>
</datatype>
<datatype>
<name name="pattern"/>
<desc>
- <p>See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.</p>
+ <p>For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
</desc>
</datatype>
<datatype>
@@ -175,67 +194,69 @@
<name name="version"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="all" arity="0"/>
- <fsummary>Return a list of the names of all open Dets tables on this node.</fsummary>
+ <fsummary>Return a list of the names of all open Dets tables on
+ this node.</fsummary>
<desc>
- <p>Returns a list of the names of all open tables on this
- node.</p>
+ <p>Returns a list of the names of all open tables on this node.</p>
</desc>
</func>
+
<func>
<name name="bchunk" arity="2"/>
- <fsummary>Return a chunk of objects stored in a Dets table.</fsummary>
+ <fsummary>Return a chunk of objects stored in a Dets table.
+ </fsummary>
<desc>
<p>Returns a list of objects stored in a table. The exact
representation of the returned objects is not public. The
- lists of data can be used for initializing a table by giving
- the value <c>bchunk</c> to the <c>format</c> option of the
+ lists of data can be used for initializing a table by specifying
+ value <c>bchunk</c> to option <c>format</c> of function
<seealso marker="#init_table/3"><c>init_table/3</c></seealso>
- function. The Mnesia application uses this
+ The Mnesia application uses this
function for copying open tables.</p>
<p>Unless the table is protected using <c>safe_fixtable/2</c>,
- calls to <c>bchunk/2</c> may not work as expected if
+ calls to <c>bchunk/2</c> do possibly not work as expected if
concurrent updates are made to the table.</p>
<p>The first time <c>bchunk/2</c> is called, an initial
continuation, the atom <c>start</c>, must be provided.</p>
- <p>The <c>bchunk/2</c> function returns a tuple
+ <p><c>bchunk/2</c> returns a tuple
<c>{<anno>Continuation2</anno>, <anno>Data</anno>}</c>,
where <c><anno>Data</anno></c> is a list of
objects. <c><anno>Continuation2</anno></c> is another continuation
- which is
- to be passed on to a subsequent call to <c>bchunk/2</c>. With
- a series of calls to <c>bchunk/2</c> it is possible to extract
- all objects of the table.
- </p>
+ that is to be passed on to a subsequent call to <c>bchunk/2</c>. With
+ a series of calls to <c>bchunk/2</c>, all table objects can be
+ extracted.</p>
<p><c>bchunk/2</c> returns <c>'$end_of_table'</c> when all
- objects have been returned, or <c>{error, <anno>Reason</anno>}</c>
- if an error occurs.
- </p>
+ objects are returned, or <c>{error, <anno>Reason</anno>}</c>
+ if an error occurs.</p>
</desc>
</func>
+
<func>
<name name="close" arity="1"/>
<fsummary>Close a Dets table.</fsummary>
<desc>
<p>Closes a table. Only processes that have opened a table are
- allowed to close it.
- </p>
+ allowed to close it.</p>
<p>All open tables must be closed before the system is
- stopped. If an attempt is made to open a table which has not
- been properly closed, Dets automatically tries to repair the
- table.</p>
+ stopped. If an attempt is made to open a table that is not
+ properly closed, Dets automatically tries to repair it.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Delete all objects with a given key from a Dets table.</fsummary>
+ <fsummary>Delete all objects with a specified key from a Dets
+ table.</fsummary>
<desc>
- <p>Deletes all objects with the key <c><anno>Key</anno></c> from
- the table <c><anno>Name</anno></c>.</p>
+ <p>Deletes all objects with key <c><anno>Key</anno></c> from
+ table <c><anno>Name</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete_all_objects" arity="1"/>
<fsummary>Delete all objects from a Dets table.</fsummary>
@@ -245,264 +266,275 @@
is equivalent to <c>match_delete(T, '_')</c>.</p>
</desc>
</func>
+
<func>
<name name="delete_object" arity="2"/>
- <fsummary>Delete a given object from a Dets table.</fsummary>
+ <fsummary>Delete a specified object from a Dets table.</fsummary>
<desc>
- <p>Deletes all instances of a given object from a table. If a
- table is of type <c>bag</c> or <c>duplicate_bag</c>, the
- <c>delete/2</c> function cannot be used to delete only some of
- the objects with a given key. This function makes this
- possible.</p>
+ <p>Deletes all instances of a specified object from a table. If a
+ table is of type <c>bag</c> or <c>duplicate_bag</c>, this
+ function can be used to delete only some of
+ the objects with a specified key.</p>
</desc>
</func>
+
<func>
<name name="first" arity="1"/>
<fsummary>Return the first key stored in a Dets table.</fsummary>
<desc>
- <p>Returns the first key stored in the table <c><anno>Name</anno></c>
- according to the table's internal order, or
+ <p>Returns the first key stored in table <c><anno>Name</anno></c>
+ according to the internal order of the table, or
<c>'$end_of_table'</c> if the table is empty.</p>
<p>Unless the table is protected using <c>safe_fixtable/2</c>,
subsequent calls to <seealso marker="#next/2"><c>next/2</c></seealso>
- may not work as expected if
+ do possibly not work as expected if
concurrent updates are made to the table.</p>
- <p>Should an error occur, the process is exited with an error
- tuple <c>{error, Reason}</c>. The reason for not returning the
- error tuple is that it cannot be distinguished from a key.</p>
+ <p>If an error occurs, the process is exited with an error
+ tuple <c>{error, Reason}</c>. The error tuple is not returned,
+ as it cannot be distinguished from a key.</p>
<p>There are two reasons why <c>first/1</c> and <c>next/2</c>
- should not be used: they are not very efficient, and they
- prevent the use of the key <c>'$end_of_table'</c> since this
- atom is used to indicate the end of the table. If possible,
- the <c>match</c>, <c>match_object</c>, and <c>select</c>
- functions should be used for traversing tables.</p>
+ are not to be used: they are not efficient, and they
+ prevent the use of key <c>'$end_of_table'</c>, as this atom
+ is used to indicate the end of the table. If possible, use functions
+ <seealso marker="#match/1"><c>match</c></seealso>,
+ <seealso marker="#match_object/1"><c>match_object</c></seealso>, and
+ <seealso marker="#select/1"><c>select</c></seealso>
+ for traversing tables.</p>
</desc>
</func>
+
<func>
<name name="foldl" arity="3"/>
<name name="foldr" arity="3"/>
<fsummary>Fold a function over a Dets table.</fsummary>
<desc>
<p>Calls <c><anno>Function</anno></c> on successive elements of
- the table <c><anno>Name</anno></c> together with an extra argument
- <c>AccIn</c>. The
- order in which the elements of the table are traversed is
- unspecified. <c><anno>Function</anno></c> must return a new
- accumulator which is passed to the next call.
- <c><anno>Acc0</anno></c> is returned if
- the table is empty.</p>
+ table <c><anno>Name</anno></c> together with an extra argument
+ <c>AccIn</c>. The table elements are traversed in unspecified
+ order. <c><anno>Function</anno></c> must return a new
+ accumulator that is passed to the next call.
+ <c><anno>Acc0</anno></c> is returned if the table is empty.</p>
</desc>
</func>
+
<func>
<name name="from_ets" arity="2"/>
- <fsummary>Replace the objects of a Dets table with the objects of an Ets table.</fsummary>
+ <fsummary>Replace the objects of a Dets table with the objects
+ of an ETS table.</fsummary>
<desc>
- <p>Deletes all objects of the table <c><anno>Name</anno></c> and then
- inserts all the objects of the Ets table <c><anno>EtsTab</anno></c>.
- The order in which the objects are inserted is not specified.
- Since <c>ets:safe_fixtable/2</c> is called the Ets table must
- be public or owned by the calling process.</p>
+ <p>Deletes all objects of table <c><anno>Name</anno></c> and then
+ inserts all the objects of the ETS table
+ <c><anno>EtsTab</anno></c>. The objects are inserted in unspecified
+ order. As <c>ets:safe_fixtable/2</c> is called, the ETS table
+ must be public or owned by the calling process.</p>
</desc>
</func>
+
<func>
<name name="info" arity="1"/>
<fsummary>Return information about a Dets table.</fsummary>
<desc>
- <p>Returns information about the table <c><anno>Name</anno></c>
- as a list of tuples:</p>
+ <p>Returns information about table <c><anno>Name</anno></c>
+ as a list of tuples:</p>
<list type="bulleted">
<item>
- <p><c>{file_size, integer() >= 0}</c>, the size of the file in
- bytes.</p>
+ <p><c>{file_size, integer() >= 0}}</c> - The file size, in
+ bytes.</p>
</item>
<item>
- <p><c>{filename, </c><seealso marker="file#type-name">file:name()</seealso><c>}</c>,
- the name of the file where objects are stored.</p>
+ <p><c>{filename, </c><seealso marker="file#type-name">
+ <c>file:name()</c></seealso><c>}</c> - The name of the file
+ where objects are stored.</p>
</item>
<item>
- <p><c>{keypos, </c><seealso marker="#type-keypos">keypos()</seealso>
- <c>}</c>, the position of the key.</p>
+ <p><c>{keypos, </c><seealso marker="#type-keypos">
+ <c>keypos()</c></seealso><c>}</c> - The key position.</p>
</item>
<item>
- <p><c>{size, integer() >= 0}</c>, the number of objects stored
- in the table.</p>
+ <p><c>{size, integer() >= 0}</c> - The number of objects
+ stored in the table.</p>
</item>
<item>
- <p><c>{type, </c><seealso marker="#type-type">type()</seealso>
- <c>}</c>, the type of the table.</p>
+ <p><c>{type, </c><seealso marker="#type-type">
+ <c>type()</c></seealso><c>}</c> - The table type.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="info" arity="2"/>
- <fsummary>Return the information associated with a given item for a Dets table.</fsummary>
+ <fsummary>Return the information associated with a specified item for
+ a Dets table.</fsummary>
<desc>
<p>Returns the information associated with <c><anno>Item</anno></c>
- for the table <c><anno>Name</anno></c>.
+ for table <c><anno>Name</anno></c>.
In addition to the <c>{<anno>Item</anno>, <anno>Value</anno>}</c>
- pairs defined for <c>info/1</c>, the following items are
- allowed:</p>
+ pairs defined for <seealso marker="#info/1"><c>info/1</c></seealso>,
+ the following items are allowed:</p>
<list type="bulleted">
<item>
- <p><c>{access, </c><seealso marker="#type-access">access()</seealso>
- <c>}</c>, the access mode.</p>
+ <p><c>{access, </c><seealso marker="#type-access">
+ <c>access()</c></seealso><c>}</c> - The access mode.</p>
</item>
<item>
<p><c>{auto_save, </c><seealso marker="#type-auto_save">
- auto_save()</seealso><c>}</c>, the auto save interval.</p>
+ <c>auto_save()</c></seealso><c>}</c> - The autosave interval.</p>
</item>
<item>
- <p><c>{bchunk_format, binary()}</c>, an opaque binary
+ <p><c>{bchunk_format, binary()}</c> - An opaque binary
describing the format of the objects returned by
<c>bchunk/2</c>. The binary can be used as argument to
<c>is_compatible_chunk_format/2</c>. Only available for
version 9 tables.</p>
</item>
<item>
- <p><c>{hash,</c> Hash<c>}</c>. Describes which BIF is
- used to calculate the hash values of the objects stored in
- the Dets table. Possible values of Hash are <c>hash</c>,
- which implies that the <c>erlang:hash/2</c> BIF is used,
- <c>phash</c>, which implies that the <c>erlang:phash/2</c>
- BIF is used, and <c>phash2</c>, which implies that the
- <c>erlang:phash2/1</c> BIF is used.</p>
+ <p><c>{hash, Hash}</c> - Describes which BIF is
+ used to calculate the hash values of the objects stored in the
+ <c>dets</c> table. Possible values of <c>Hash</c>:</p>
+ <list>
+ <item>
+ <p><c>hash</c> - Implies that the <c>erlang:hash/2</c> BIF
+ is used.</p>
+ </item>
+ <item>
+ <p><c>phash</c> - Implies that the <c>erlang:phash/2</c> BIF
+ is used.</p>
+ </item>
+ <item>
+ <p><c>phash2</c> - Implies that the <c>erlang:phash2/1</c> BIF
+ is used.</p>
+ </item>
+ </list>
</item>
<item>
- <p><c>{memory, integer() >= 0}</c>, the size of the file in
- bytes. The same value is associated with the item
- <c>file_size</c>.</p>
+ <p><c>{memory, integer() >= 0}</c> - The file size, in bytes.
+ The same value is associated with item <c>file_size</c>.</p>
</item>
<item>
- <p><c>{no_keys, integer >= 0()}</c>, the number of different
+ <p><c>{no_keys, integer >= 0()}</c> - The number of different
keys stored in the table. Only available for version 9
tables.</p>
</item>
<item>
- <p><c>{no_objects, integer >= 0()}</c>, the number of objects
+ <p><c>{no_objects, integer >= 0()}</c> - The number of objects
stored in the table.</p>
</item>
<item>
- <p><c>{no_slots, {</c>Min<c>, </c>Used<c>, </c>Max<c>}}</c>,
- the number of
- slots of the table. <c>Min</c> is the minimum number of
+ <p><c>{no_slots, {Min, Used, Max}}</c> - The
+ number of slots of the table. <c>Min</c> is the minimum number of
slots, <c>Used</c> is the number of currently used slots,
and <c>Max</c> is the maximum number of slots. Only
available for version 9 tables.</p>
</item>
<item>
- <p><c>{owner, pid()}</c>, the pid of the process that
+ <p><c>{owner, pid()}</c> - The pid of the process that
handles requests to the Dets table.</p>
</item>
<item>
- <p><c>{ram_file, boolean()}</c>, whether the table is
+ <p><c>{ram_file, boolean()}</c> - Whether the table is
kept in RAM.</p>
</item>
<item>
- <p><c>{safe_fixed_monotonic_time, SafeFixed}</c>. If the table
- is fixed, <c>SafeFixed</c> is a tuple <c>{FixedAtTime, [{Pid,RefCount}]}</c>.
- <c>FixedAtTime</c> is the time when
+ <p><c>{safe_fixed_monotonic_time, SafeFixed}</c> - If the table
+ is fixed, <c>SafeFixed</c> is a tuple
+ <c>{FixedAtTime, [{Pid,RefCount}]}</c>.
+ <c>FixedAtTime</c> is the time when
the table was first fixed, and <c>Pid</c> is the pid of
the process that fixes the table <c>RefCount</c> times.
- There may be any number of processes in the list. If the
- table is not fixed, SafeFixed is the atom <c>false</c>.</p>
- <p><c>FixedAtTime</c> will correspond to the result
- returned by
- <seealso marker="erts:erlang#monotonic_time/0">erlang:monotonic_time/0</seealso>
- at the time of fixation. The usage of <c>safe_fixed_monotonic_time</c> is
- <seealso marker="erts:time_correction#Time_Warp_Safe_Code">time warp
- safe</seealso>.</p>
+ There can be any number of processes in the list. If the table
+ is not fixed, <c>SafeFixed</c> is the atom <c>false</c>.</p>
+ <p><c>FixedAtTime</c> corresponds to the result returned by
+ <seealso marker="erts:erlang#monotonic_time/0">
+ <c>erlang:monotonic_time/0</c></seealso> at the time of fixation.
+ The use of <c>safe_fixed_monotonic_time</c> is
+ <seealso marker="erts:time_correction#Time_Warp_Safe_Code">
+ time warp safe</seealso>.</p>
</item>
<item>
- <p>
- <c>{safe_fixed, SafeFixed}</c>. The same as
- <c>{safe_fixed_monotonic_time, SafeFixed}</c> with the exception
- of the format and value of <c>FixedAtTime</c>.
- </p>
- <p>
- <c>FixedAtTime</c> will correspond to the result returned by
- <seealso marker="erts:erlang#timestamp/0">erlang:timestamp/0</seealso>
- at the time of fixation. Note that when the system is using
- single or multi
- <seealso marker="erts:time_correction#Time_Warp_Modes">time warp
- modes</seealso> this might produce strange results. This
- since the usage of <c>safe_fixed</c> is not
- <seealso marker="erts:time_correction#Time_Warp_Safe_Code">time warp
- safe</seealso>. Time warp safe code need to use
- <c>safe_fixed_monotonic_time</c> instead.</p>
+ <p><c>{safe_fixed, SafeFixed}</c> - The same as
+ <c>{safe_fixed_monotonic_time, SafeFixed}</c> except
+ the format and value of <c>FixedAtTime</c>.</p>
+ <p><c>FixedAtTime</c> corresponds to the result returned by
+ <seealso marker="erts:erlang#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso> at the time of fixation.
+ Notice that when the system uses single or multi
+ <seealso marker="erts:time_correction#Time_Warp_Modes">time warp
+ modes</seealso>, this can produce strange results. This is
+ because the use of <c>safe_fixed</c> is not
+ <seealso marker="erts:time_correction#Time_Warp_Safe_Code">
+ time warp safe</seealso>. Time warp safe code must use
+ <c>safe_fixed_monotonic_time</c> instead.</p>
</item>
<item>
- <p><c>{version, integer()}</c>, the version of the format of
+ <p><c>{version, integer()}</c> - The version of the format of
the table.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="init_table" arity="2"/>
<name name="init_table" arity="3"/>
<fsummary>Replace all objects of a Dets table.</fsummary>
<desc>
- <p>Replaces the existing objects of the table <c><anno>Name</anno></c>
+ <p>Replaces the existing objects of table <c><anno>Name</anno></c>
with objects created by calling the input function
<c><anno>InitFun</anno></c>,
see below. The reason for using this function rather than
- calling <c>insert/2</c> is that of efficiency. It should be
- noted that the input functions are called by the process that
+ calling <c>insert/2</c> is that of efficiency. Notice
+ that the input functions are called by the process that
handles requests to the Dets table, not by the calling
process.</p>
- <p>When called with the argument <c>read</c> the function
- <c><anno>InitFun</anno></c> is assumed to return
- <c>end_of_input</c> when
- there is no more input, or <c>{Objects, Fun}</c>, where
+ <p>When called with argument <c>read</c>, function
+ <c><anno>InitFun</anno></c> is assumed to return <c>end_of_input</c>
+ when there is no more input, or <c>{Objects, Fun}</c>, where
<c>Objects</c> is a list of objects and <c>Fun</c> is a new
- input function. Any other value Value is returned as an error
- <c>{error, {init_fun, Value}}</c>. Each input function will be
- called exactly once, and should an error occur, the last
- function is called with the argument <c>close</c>, the reply
+ input function. Any other value <c>Value</c> is returned as an error
+ <c>{error, {init_fun, Value}}</c>. Each input function is
+ called exactly once, and if an error occurs, the last
+ function is called with argument <c>close</c>, the reply
of which is ignored.</p>
- <p>If the type of the table is <c>set</c> and there is more
- than one object with a given key, one of the objects is
+ <p>If the table type is <c>set</c> and more
+ than one object exists with a given key, one of the objects is
chosen. This is not necessarily the last object with the given
key in the sequence of objects returned by the input
- functions. Duplicate keys should be avoided, or the file
- will be unnecessarily fragmented. This holds also for duplicated
+ functions. Avoid duplicate keys, otherwise the file becomes
+ unnecessarily fragmented. This holds also for duplicated
objects stored in tables of type <c>bag</c>.</p>
<p>It is important that the table has a sufficient number of
- slots for the objects. If not, the hash list will start to
- grow when <c>init_table/2</c> returns which will significantly
- slow down access to the table for a period of time. The
- minimum number of slots is set by the <c>open_file/2</c>
- option <c>min_no_slots</c> and returned by the <c>info/2</c>
- item <c>no_slots</c>. See also the <c>min_no_slots</c> option
- below.
- </p>
- <p>The <c><anno>Options</anno></c> argument is a list of
- <c>{Key, Val}</c>
- tuples where the following values are allowed:</p>
+ slots for the objects. If not, the hash list starts to
+ grow when <c>init_table/2</c> returns, which significantly
+ slows down access to the table for a period of time. The
+ minimum number of slots is set by the <c>open_file/2</c> option
+ <c>min_no_slots</c> and returned by the <c>info/2</c>
+ item <c>no_slots</c>. See also option <c>min_no_slots</c> below.</p>
+ <p>Argument <c><anno>Options</anno></c> is a list of <c>{Key, Val}</c>
+ tuples, where the following values are allowed:</p>
<list type="bulleted">
<item>
- <p><c>{min_no_slots, no_slots()}</c>. Specifies the
- estimated number of different keys that will be stored
- in the table. The <c>open_file</c> option with the same
- name is ignored unless the table is created, and in that
+ <p><c>{min_no_slots, no_slots()}</c> - Specifies the
+ estimated number of different keys to be stored
+ in the table. The <c>open_file/2</c> option with the same
+ name is ignored, unless the table is created, in which
case performance can be enhanced by supplying an
estimate when initializing the table.</p>
</item>
<item>
- <p><c>{format, Format}</c>. Specifies the format of the
- objects returned by the function <c><anno>InitFun</anno></c>. If
+ <p><c>{format, Format}</c> - Specifies the format of the
+ objects returned by function <c><anno>InitFun</anno></c>. If
<c>Format</c> is <c>term</c> (the default),
- <c><anno>InitFun</anno></c> is assumed to return a list of tuples. If
- <c>Format</c> is <c>bchunk</c>, <c><anno>InitFun</anno></c> is
+ <c><anno>InitFun</anno></c> is assumed to return a list of tuples.
+ If <c>Format</c> is <c>bchunk</c>, <c><anno>InitFun</anno></c> is
assumed to return <c><anno>Data</anno></c> as returned by
<seealso marker="#bchunk/2"><c>bchunk/2</c></seealso>.
- This option overrides the
- <c>min_no_slots</c> option.</p>
+ This option overrides option <c>min_no_slots</c>.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="insert" arity="2"/>
<fsummary>Insert one or more objects into a Dets table.</fsummary>
@@ -513,46 +545,50 @@
the old object will be replaced.</p>
</desc>
</func>
+
<func>
<name name="insert_new" arity="2"/>
<fsummary>Insert one or more objects into a Dets table.</fsummary>
<desc>
- <p>Inserts one or more objects into the table <c><anno>Name</anno></c>.
+ <p>Inserts one or more objects into table <c><anno>Name</anno></c>.
If there already exists some object with a key matching the key
- of any of the given objects the table is not updated and
- <c>false</c> is returned, otherwise the objects are inserted
+ of any of the specified objects, the table is not updated and
+ <c>false</c> is returned. Otherwise the objects are inserted
and <c>true</c> returned.</p>
</desc>
</func>
+
<func>
<name name="is_compatible_bchunk_format" arity="2"/>
- <fsummary>Test compatibility of a table's chunk data.</fsummary>
+ <fsummary>Test compatibility of chunk data of a table.</fsummary>
<desc>
<p>Returns <c>true</c> if it would be possible to initialize
- the table <c><anno>Name</anno></c>, using
- <seealso marker="#init_table/3"><c>init_table/3</c></seealso>
- with the
- option <c>{format,&nbsp;bchunk}</c>, with objects read with
+ table <c><anno>Name</anno></c>, using
+ <seealso marker="#init_table/3"><c>init_table/3</c></seealso> with
+ option <c>{format,&nbsp;bchunk}</c>, with objects read with
<seealso marker="#bchunk/2"><c>bchunk/2</c></seealso> from some
- table <c>T</c> such that calling
+ table <c>T</c>, such that calling
<c>info(T,&nbsp;bchunk_format)</c> returns
<c>BchunkFormat</c>.</p>
</desc>
</func>
+
<func>
<name name="is_dets_file" arity="1"/>
<fsummary>Test for a Dets table.</fsummary>
<desc>
- <p>Returns <c>true</c> if the file <c><anno>Filename</anno></c>
- is a Dets table, <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if file <c><anno>Filename</anno></c>
+ is a Dets table, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="lookup" arity="2"/>
- <fsummary>Return all objects with a given key stored in a Dets table.</fsummary>
+ <fsummary>Return all objects with a specified key stored in a
+ Dets table.</fsummary>
<desc>
- <p>Returns a list of all objects with the key <c><anno>Key</anno></c>
- stored in the table <c><anno>Name</anno></c>. For example:</p>
+ <p>Returns a list of all objects with key <c><anno>Key</anno></c>
+ stored in table <c><anno>Name</anno></c>, for example:</p>
<pre>
2> <input>dets:open_file(abc, [{type, bag}]).</input>
{ok,abc}
@@ -561,394 +597,419 @@ ok
4> <input>dets:insert(abc, {1,3,4}).</input>
ok
5> <input>dets:lookup(abc, 1).</input>
-[{1,2,3},{1,3,4}] </pre>
- <p>If the table is of type <c>set</c>, the function returns
+[{1,2,3},{1,3,4}]</pre>
+ <p>If the table type is <c>set</c>, the function returns
either the empty list or a list with one object, as there
cannot be more than one object with a given key. If the table
- is of type <c>bag</c> or <c>duplicate_bag</c>, the function
+ type is <c>bag</c> or <c>duplicate_bag</c>, the function
returns a list of arbitrary length.</p>
- <p>Note that the order of objects returned is unspecified. In
+ <p>Notice that the order of objects returned is unspecified. In
particular, the order in which objects were inserted is not
reflected.</p>
</desc>
</func>
+
<func>
<name name="match" arity="1"/>
- <fsummary>Match a chunk of objects stored in a Dets table and return a list of variable bindings.</fsummary>
+ <fsummary>Match a chunk of objects stored in a Dets table and
+ return a list of variable bindings.</fsummary>
<desc>
<p>Matches some objects stored in a table and returns a
- non-empty list of the bindings that match a given pattern in
+ non-empty list of the bindings matching a specified pattern in
some unspecified order. The table, the pattern, and the number
of objects that are matched are all defined by
- <c><anno>Continuation</anno></c>, which has been returned by a prior
- call to <c>match/1</c> or <c>match/3</c>.</p>
- <p>When all objects of the table have been matched,
+ <c><anno>Continuation</anno></c>, which has been returned by a
+ previous call to <c>match/1</c> or <c>match/3</c>.</p>
+ <p>When all table objects are matched,
<c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="match" arity="2"/>
- <fsummary>Match the objects stored in a Dets table and return a list of variable bindings.</fsummary>
+ <fsummary>Match the objects stored in a Dets table and return a
+ list of variable bindings.</fsummary>
<desc>
- <p>Returns for each object of the table <c><anno>Name</anno></c> that
- matches <c><anno>Pattern</anno></c> a list of bindings in some unspecified
- order. See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns. If the keypos'th element of
- <c><anno>Pattern</anno></c> is unbound, all objects of the table are
+ <p>Returns for each object of table <c><anno>Name</anno></c> that
+ matches <c><anno>Pattern</anno></c> a list of bindings in some
+ unspecified order. For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.
+ If the keypos'th element of
+ <c><anno>Pattern</anno></c> is unbound, all table objects are
matched. If the keypos'th element is bound, only the
- objects with the right key are matched.</p>
+ objects with the correct key are matched.</p>
</desc>
</func>
+
<func>
<name name="match" arity="3"/>
- <fsummary>Match the first chunk of objects stored in a Dets table and return a list of variable bindings.</fsummary>
+ <fsummary>Match the first chunk of objects stored in a Dets table
+ and return a list of variable bindings.</fsummary>
<desc>
- <p>Matches some or all objects of the table <c><anno>Name</anno></c> and
+ <p>Matches some or all objects of table <c><anno>Name</anno></c> and
returns a non-empty list of the bindings that match
<c><anno>Pattern</anno></c> in some unspecified order.
- See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.</p>
+ For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
<p>A tuple of the bindings and a continuation is returned,
unless the table is empty, in which case
<c>'$end_of_table'</c> is returned. The continuation is to be
used when matching further objects by calling
<seealso marker="#match/1"><c>match/1</c></seealso>.</p>
<p>If the keypos'th element of <c><anno>Pattern</anno></c> is bound,
- all objects of the table are matched. If the keypos'th element is
- unbound, all objects of the table are matched, <c><anno>N</anno></c>
+ all table objects are matched. If the keypos'th element is
+ unbound, all table objects are matched, <c><anno>N</anno></c>
objects at a time, until at least one object matches or the
- end of the table has been reached. The default, indicated by
- giving <c><anno>N</anno></c> the value <c>default</c>,
- is to let the number
- of objects vary depending on the sizes of the objects. If
- <c><anno>Name</anno></c> is a version 9 table, all objects with the same
- key are always matched at the same time which implies that
- more than <anno>N</anno> objects may sometimes be matched.
- </p>
- <p>The table should always be protected using
- <c>safe_fixtable/2</c> before calling <c>match/3</c>, or
- errors may occur when calling <c>match/1</c>.</p>
+ end of the table is reached. The default, indicated by
+ giving <c><anno>N</anno></c> the value <c>default</c>, is to let
+ the number of objects vary depending on the sizes of the objects. If
+ <c><anno>Name</anno></c> is a version 9 table, all objects with the
+ same key are always matched at the same time, which implies that
+ more than <anno>N</anno> objects can sometimes be matched.</p>
+ <p>The table is always to be protected using
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>
+ before calling <c>match/3</c>, otherwise
+ errors can occur when calling <c>match/1</c>.</p>
</desc>
</func>
+
<func>
<name name="match_delete" arity="2"/>
- <fsummary>Delete all objects that match a given pattern from a Dets table.</fsummary>
+ <fsummary>Delete all objects that match a given pattern from a
+ Dets table.</fsummary>
<desc>
- <p>Deletes all objects that match <c><anno>Pattern</anno></c> from the
- table <c><anno>Name</anno></c>.
- See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.</p>
+ <p>Deletes all objects that match <c><anno>Pattern</anno></c> from
+ table <c><anno>Name</anno></c>. For a description of patterns,
+ see <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
<p>If the keypos'th element of <c>Pattern</c> is bound,
- only the objects with the right key are matched.</p>
+ only the objects with the correct key are matched.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="1"/>
- <fsummary>Match a chunk of objects stored in a Dets table and return a list of objects.</fsummary>
+ <fsummary>Match a chunk of objects stored in a Dets table and
+ return a list of objects.</fsummary>
<desc>
<p>Returns a non-empty list of some objects stored in a table
that match a given pattern in some unspecified order. The
table, the pattern, and the number of objects that are matched
are all defined by <c><anno>Continuation</anno></c>, which has been
- returned by a prior call to <c>match_object/1</c> or
+ returned by a previous call to <c>match_object/1</c> or
<c>match_object/3</c>.</p>
- <p>When all objects of the table have been matched,
+ <p>When all table objects are matched,
<c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="2"/>
- <fsummary>Match the objects stored in a Dets table and return a list of objects.</fsummary>
+ <fsummary>Match the objects stored in a Dets table and return
+ a list of objects.</fsummary>
<desc>
- <p>Returns a list of all objects of the table <c><anno>Name</anno></c> that
+ <p>Returns a list of all objects of table <c><anno>Name</anno></c> that
match <c><anno>Pattern</anno></c> in some unspecified order.
- See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.
- </p>
+ For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
<p>If the keypos'th element of <c><anno>Pattern</anno></c> is
- unbound, all objects of the table are matched. If the
+ unbound, all table objects are matched. If the
keypos'th element of <c><anno>Pattern</anno></c> is bound, only the
- objects with the right key are matched.</p>
+ objects with the correct key are matched.</p>
<p>Using the <c>match_object</c> functions for traversing all
- objects of a table is more efficient than calling
+ table objects is more efficient than calling
<c>first/1</c> and <c>next/2</c> or <c>slot/2</c>.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="3"/>
- <fsummary>Match the first chunk of objects stored in a Dets table and return a list of objects.</fsummary>
+ <fsummary>Match the first chunk of objects stored in a Dets table
+ and return a list of objects.</fsummary>
<desc>
- <p>Matches some or all objects stored in the table <c><anno>Name</anno></c>
+ <p>Matches some or all objects stored in table <c><anno>Name</anno></c>
and returns a non-empty list of the objects that match
<c><anno>Pattern</anno></c> in some unspecified order.
- See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.</p>
+ For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
<p>A list of objects and a continuation is returned, unless
the table is empty, in which case <c>'$end_of_table'</c>
is returned. The continuation is to be used when matching
- further objects by calling <c>match_object/1</c>.</p>
- <p>If the keypos'th element of <c><anno>Pattern</anno></c> is bound, all
- objects of the table are matched. If the keypos'th element is
- unbound, all objects of the table are matched, <c><anno>N</anno></c>
+ further objects by calling
+ <seealso marker="#match_object/1"><c>match_object/1</c></seealso>.</p>
+ <p>If the keypos'th element of <c><anno>Pattern</anno></c> is bound,
+ all table objects are matched. If the keypos'th element is
+ unbound, all table objects are matched, <c><anno>N</anno></c>
objects at a time, until at least one object matches or the
- end of the table has been reached. The default, indicated by
- giving <c><anno>N</anno></c> the value <c>default</c>, is to let the number
+ end of the table is reached. The default, indicated by
+ giving <c><anno>N</anno></c> the value <c>default</c>,
+ is to let the number
of objects vary depending on the sizes of the objects. If
- <c><anno>Name</anno></c> is a version 9 table, all matching objects with
- the same key are always returned in the same reply which
- implies that more than <anno>N</anno> objects may sometimes be returned.
- </p>
- <p>The table should always be protected using
- <c>safe_fixtable/2</c> before calling <c>match_object/3</c>,
- or errors may occur when calling <c>match_object/1</c>.</p>
+ <c><anno>Name</anno></c> is a version 9 table, all matching objects
+ with the same key are always returned in the same reply, which implies
+ that more than <anno>N</anno> objects can sometimes be returned.</p>
+ <p>The table is always to be protected using
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>
+ before calling <c>match_object/3</c>, otherwise
+ errors can occur when calling <c>match_object/1</c>.</p>
</desc>
</func>
+
<func>
<name name="member" arity="2"/>
<fsummary>Test for occurrence of a key in a Dets table.</fsummary>
<desc>
- <p>Works like <c>lookup/2</c>, but does not return the
- objects. The function returns <c>true</c> if one or more
- elements of the table has the key <c><anno>Key</anno></c>, <c>false</c>
- otherwise.</p>
+ <p>Works like <seealso marker="#lookup/2"><c>lookup/2</c></seealso>,
+ but does not return the objects. Returns <c>true</c> if one or more
+ table elements has key <c><anno>Key</anno></c>, otherwise
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="next" arity="2"/>
<fsummary>Return the next key in a Dets table.</fsummary>
<desc>
- <p>Returns the key following <c><anno>Key1</anno></c> in the table
- <c><anno>Name</anno></c> according to the table's internal order, or
- <c>'$end_of_table'</c> if there is no next key.</p>
- <p>Should an error occur, the process is exited with an error
+ <p>Returns either the key following <c><anno>Key1</anno></c> in table
+ <c><anno>Name</anno></c> according to the internal order of the
+ table, or <c>'$end_of_table'</c> if there is no next key.</p>
+ <p>If an error occurs, the process is exited with an error
tuple <c>{error, Reason}</c>.</p>
- <p>Use <seealso marker="#first/1"><c>first/1</c></seealso> to find
- the first key in the table.</p>
+ <p>To find the first key in the table, use
+ <seealso marker="#first/1"><c>first/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="open_file" arity="1"/>
<fsummary>Open an existing Dets table.</fsummary>
<desc>
- <p>Opens an existing table. If the table has not been properly
- closed, it will be repaired. The returned reference is to be
- used as the name of the table. This function is most useful
- for debugging purposes.</p>
+ <p>Opens an existing table. If the table is not properly closed,
+ it is repaired. The returned reference is to be used as the table
+ name. This function is most useful for debugging purposes.</p>
</desc>
</func>
+
<func>
<name name="open_file" arity="2"/>
<fsummary>Open a Dets table.</fsummary>
<desc>
<p>Opens a table. An empty Dets table is created if no file
exists.</p>
- <p>The atom <c><anno>Name</anno></c> is the name of the table. The table
+ <p>The atom <c><anno>Name</anno></c> is the table name. The table
name must be provided in all subsequent operations on the
table. The name can be used by other processes as well, and
- several process can share one table.
- </p>
+ many processes can share one table.</p>
<p>If two processes open the same table by giving the same
- name and arguments, then the table will have two users. If one
- user closes the table, it still remains open until the second
- user closes the table.</p>
- <p>The <c><anno>Args</anno></c> argument is a list of <c>{Key, Val}</c>
- tuples where the following values are allowed:</p>
+ name and arguments, the table has two users. If one
+ user closes the table, it remains open until the second
+ user closes it.</p>
+ <p>Argument <c><anno>Args</anno></c> is a list of <c>{Key, Val}</c>
+ tuples, where the following values are allowed:</p>
<list type="bulleted">
<item>
<p><c>{access, </c><seealso marker="#type-access">
- access()</seealso><c>}</c>. It is possible to open
- existing tables in read-only mode. A table which is opened
+ <c>access()</c></seealso><c>}</c> - Existing tables can be
+ opened in read-only mode. A table that is opened
in read-only mode is not subjected to the automatic file
reparation algorithm if it is later opened after a crash.
- The default value is <c>read_write</c>.</p>
+ Defaults to <c>read_write</c>.</p>
</item>
<item>
<p><c>{auto_save, </c><seealso marker="#type-auto_save">
- auto_save()</seealso><c>}</c>, the auto save
+ <c>auto_save()</c></seealso><c>}</c> - The autosave
interval. If the interval is an integer <c>Time</c>, the
table is flushed to disk whenever it is not accessed for
<c>Time</c> milliseconds. A table that has been flushed
- will require no reparation when reopened after an
+ requires no reparation when reopened after an
uncontrolled emulator halt. If the interval is the atom
- <c>infinity</c>, auto save is disabled. The default value
- is 180000 (3 minutes).</p>
+ <c>infinity</c>, autosave is disabled. Defaults to
+ 180000 (3 minutes).</p>
</item>
<item>
<p><c>{estimated_no_objects, </c><seealso marker="#type-no_slots">
- no_slots()</seealso><c>}</c>. Equivalent to the
- <c>min_no_slots</c> option.</p>
+ <c>no_slots()</c></seealso><c>}</c> - Equivalent to option
+ <c>min_no_slots</c>.</p>
</item>
<item>
<p><c>{file, </c><seealso marker="file#type-name">
- file:name()</seealso><c>}</c>, the name of the file to be
- opened. The default value is the name of the table.</p>
+ <c>file:name()</c></seealso><c>}</c> - The name of the file to be
+ opened. Defaults to the table name.</p>
</item>
<item>
<p><c>{max_no_slots, </c><seealso marker="#type-no_slots">
- no_slots()</seealso><c>}</c>, the maximum number
- of slots that will be used. The default value as well as
- the maximal value is 32 M. Note that a higher value may
- increase the fragmentation of the table, and conversely,
- that a smaller value may decrease the fragmentation, at
+ <c>no_slots()</c></seealso><c>}</c> - The maximum number
+ of slots to be used. Defaults to 32 M, which is the
+ maximal value. Notice that a higher value can
+ increase the table fragmentation, and
+ a smaller value can decrease the fragmentation, at
the expense of execution time. Only available for version
9 tables.</p>
</item>
<item>
<p><c>{min_no_slots, </c><seealso marker="#type-no_slots">
- no_slots()</seealso><c>}</c>. Application
+ <c>no_slots()</c></seealso><c>}</c> - Application
performance can be enhanced with this flag by specifying,
when the table is created, the estimated number of
- different keys that will be stored in the table. The
- default value as well as the minimum value is 256.</p>
+ different keys to be stored in the table. Defaults to 256,
+ which is the minimum value.</p>
</item>
<item>
<p><c>{keypos, </c><seealso marker="#type-keypos">
- keypos()</seealso><c>}</c>, the position of the
- element of each object to be used as key. The default
- value is 1. The ability to explicitly state the key
+ <c>keypos()</c></seealso><c>}</c> - The position of the
+ element of each object to be used as key. Defaults to 1.
+ The ability to explicitly state the key
position is most convenient when we want to store Erlang
records in which the first position of the record is the
name of the record type.</p>
</item>
<item>
- <p><c>{ram_file, boolean()}</c>, whether the table is to
- be kept in RAM. Keeping the table in RAM may sound like an
+ <p><c>{ram_file, boolean()}</c> - Whether the table is to
+ be kept in RAM. Keeping the table in RAM can sound like an
anomaly, but can enhance the performance of applications
- which open a table, insert a set of objects, and then
+ that open a table, insert a set of objects, and then
close the table. When the table is closed, its contents
- are written to the disk file. The default value is
- <c>false</c>.</p>
+ are written to the disk file. Defaults to <c>false</c>.</p>
</item>
<item>
- <p><c>{repair, Value}</c>. <c>Value</c> can be either
+ <p><c>{repair, Value}</c> - <c>Value</c> can be either
a <c>boolean()</c> or the atom <c>force</c>. The flag
- specifies whether the Dets server should invoke the
- automatic file reparation algorithm. The default is
- <c>true</c>. If <c>false</c> is specified, there is no
- attempt to repair the file and <c>{error, {needs_repair,
- FileName}}</c> is returned if the table needs to be
- repaired.</p>
- <p>The value <c>force</c> means that a reparation will
- take place even if the table has been properly closed.
+ specifies if the Dets server is to invoke the
+ automatic file reparation algorithm. Defaults to
+ <c>true</c>. If <c>false</c> is specified, no attempt is
+ made to repair the file, and <c>{error, {needs_repair,
+ FileName}}</c> is returned if the table must be repaired.</p>
+ <p>Value <c>force</c> means that a reparation
+ is made even if the table is properly closed.
This is how to convert tables created by older versions of
STDLIB. An example is tables hashed with the deprecated
- <c>erlang:hash/2</c> BIF. Tables created with Dets from a
- STDLIB version of 1.8.2 and later use the
- <c>erlang:phash/2</c> function or the
- <c>erlang:phash2/1</c> function, which is preferred.</p>
- <p>The <c>repair</c> option is ignored if the table is
- already open.</p>
+ <c>erlang:hash/2</c> BIF. Tables created with Dets from
+ STDLIB version 1.8.2 or later use function
+ <c>erlang:phash/2</c> or function <c>erlang:phash2/1</c>,
+ which is preferred.</p>
+ <p>Option <c>repair</c> is ignored if the table is already open.</p>
</item>
<item>
- <p><c>{type, </c><seealso marker="#type-type">type()</seealso><c>}</c>,
- the type of the table. The default value is <c>set</c>.</p>
+ <p><c>{type, </c><seealso marker="#type-type">
+ <c>type()</c></seealso><c>}</c> - The table type. Defaults to
+ <c>set</c>.</p>
</item>
<item>
<p><c>{version, </c><seealso marker="#type-version">
- version()</seealso><c>}</c>, the version of the format
- used for the table. The default value is <c>9</c>. Tables
- on the format used before OTP R8 can be created by giving
- the value <c>8</c>. A version 8 table can be converted to
- a version 9 table by giving the options <c>{version,9}</c>
+ <c>version()</c></seealso><c>}</c> - The version of the format
+ used for the table. Defaults to <c>9</c>. Tables on the format
+ used before Erlang/OTP R8 can be created by specifying value
+ <c>8</c>. A version 8 table can be converted to a version 9
+ table by specifying options <c>{version,9}</c>
and <c>{repair,force}</c>.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="pid2name" arity="1"/>
<fsummary>Return the name of the Dets table handled by a pid.</fsummary>
<desc>
- <p>Returns the name of the table given the pid of a process
+ <p>Returns the table name given the pid of a process
that handles requests to a table, or <c>undefined</c> if
there is no such table.</p>
<p>This function is meant to be used for debugging only.</p>
</desc>
</func>
+
<func>
<name name="repair_continuation" arity="2"/>
- <fsummary>Repair a continuation from select/1 or select/3.</fsummary>
+ <fsummary>Repair a continuation from <c>select/1</c> or <c>select/3</c>.
+ </fsummary>
<desc>
<p>This function can be used to restore an opaque continuation
- returned by <c>select/3</c> or <c>select/1</c> if the
+ returned by
+ <seealso marker="#select/3"><c>select/3</c></seealso> or
+ <seealso marker="#select/1"><c>select/1</c></seealso> if the
continuation has passed through external term format (been
sent between nodes or stored on disk).</p>
<p>The reason for this function is that continuation terms
- contain compiled match specifications and therefore will be
+ contain compiled match specifications and therefore are
invalidated if converted to external term format. Given that
the original match specification is kept intact, the
continuation can be restored, meaning it can once again be
used in subsequent <c>select/1</c> calls even though it has
been stored on disk or on another node.</p>
- <p>See also <c>ets(3)</c> for further explanations and
- examples.
- </p>
+ <p>For more information and examples, see the
+ <seealso marker="ets"><c>ets(3)</c></seealso> module.</p>
<note>
- <p>This function is very rarely needed in application code. It
- is used by Mnesia to implement distributed <c>select/3</c>
+ <p>This function is rarely needed in application code. It is used by
+ application Mnesia to provide distributed <c>select/3</c>
and <c>select/1</c> sequences. A normal application would
either use Mnesia or keep the continuation from being
converted to external format.</p>
<p>The reason for not having an external representation of
- compiled match specifications is performance. It may be
+ compiled match specifications is performance. It can be
subject to change in future releases, while this interface
- will remain for backward compatibility.</p>
+ remains for backward compatibility.</p>
</note>
</desc>
</func>
+
<func>
<name name="safe_fixtable" arity="2"/>
<fsummary>Fix a Dets table for safe traversal.</fsummary>
<desc>
- <p>If <c><anno>Fix</anno></c> is <c>true</c>, the table
+ <p>If <c><anno>Fix</anno></c> is <c>true</c>, table
<c><anno>Name</anno></c> is
fixed (once more) by the calling process, otherwise the table
is released. The table is also released when a fixing process
- terminates.
- </p>
- <p>If several processes fix a table, the table will remain
+ terminates.</p>
+ <p>If many processes fix a table, the table remains
fixed until all processes have released it or terminated. A
reference counter is kept on a per process basis, and N
consecutive fixes require N releases to release the table.</p>
<p>It is not guaranteed that calls to <c>first/1</c>,
- <c>next/2</c>, select and match functions work as expected
- even if the table has been fixed; the limited support for
- concurrency implemented in Ets has not yet been implemented
- in Dets. Fixing a table currently only disables resizing of
+ <c>next/2</c>, or select and match functions work as expected
+ even if the table is fixed; the limited support for
+ concurrency provided by the
+ <seealso marker="ets"><c>ets(3)</c></seealso> module is not yet
+ provided by Dets.
+ Fixing a table currently only disables resizing of
the hash list of the table.</p>
<p>If objects have been added while the table was fixed, the
- hash list will start to grow when the table is released which
- will significantly slow down access to the table for a period
+ hash list starts to grow when the table is released, which
+ significantly slows down access to the table for a period
of time.</p>
</desc>
</func>
+
<func>
<name name="select" arity="1"/>
- <fsummary>Apply a match specification to some objects stored in a Dets table.</fsummary>
+ <fsummary>Apply a match specification to some objects stored in a
+ Dets table.</fsummary>
<desc>
<p>Applies a match specification to some objects stored in a
table and returns a non-empty list of the results. The
table, the match specification, and the number of objects
that are matched are all defined by <c><anno>Continuation</anno></c>,
- which has been returned by a prior call to <c>select/1</c>
- or <c>select/3</c>.</p>
+ which is returned by a previous call to
+ <seealso marker="#select/1"><c>select/1</c></seealso> or
+ <seealso marker="#select/3"><c>select/3</c></seealso>.</p>
<p>When all objects of the table have been matched,
<c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="select" arity="2"/>
- <fsummary>Apply a match specification to all objects stored in a Dets table.</fsummary>
+ <fsummary>Apply a match specification to all objects stored in a
+ Dets table.</fsummary>
<desc>
- <p>Returns the results of applying the match specification
- <c><anno>MatchSpec</anno></c> to all or some objects stored in the table
- <c><anno>Name</anno></c>. The order of the objects is not specified. See
- the ERTS User's Guide for a description of match
- specifications.</p>
+ <p>Returns the results of applying match specification
+ <c><anno>MatchSpec</anno></c> to all or some objects stored in table
+ <c><anno>Name</anno></c>. The order of the objects is not specified.
+ For a description of match specifications, see the
+ <seealso marker="erts:match_spec">ERTS User's Guide</seealso>.</p>
<p>If the keypos'th element of <c><anno>MatchSpec</anno></c> is
unbound, the match specification is applied to all objects of
the table. If the keypos'th element is bound, the match
- specification is applied to the objects with the right key(s)
+ specification is applied to the objects with the correct key(s)
only.</p>
<p>Using the <c>select</c> functions for traversing all
objects of a table is more efficient than calling
@@ -956,116 +1017,138 @@ ok
</p>
</desc>
</func>
+
<func>
<name name="select" arity="3"/>
- <fsummary>Apply a match specification to the first chunk of objects stored in a Dets table.</fsummary>
+ <fsummary>Apply a match specification to the first chunk of objects
+ stored in a Dets table.</fsummary>
<desc>
- <p>Returns the results of applying the match specification
- <c><anno>MatchSpec</anno></c> to some or all objects stored in the table
- <c><anno>Name</anno></c>. The order of the objects is not specified. See
- the ERTS User's Guide for a description of match
- specifications.</p>
+ <p>Returns the results of applying match specification
+ <c><anno>MatchSpec</anno></c> to some or all objects stored in table
+ <c><anno>Name</anno></c>. The order of the objects is not specified.
+ For a description of match specifications, see the
+ <seealso marker="erts:match_spec">ERTS User's Guide</seealso>.</p>
<p>A tuple of the results of applying the match specification
and a continuation is returned, unless the table is empty,
in which case <c>'$end_of_table'</c> is returned. The
- continuation is to be used when matching further objects by
- calling <c>select/1</c>.</p>
- <p>If the keypos'th element of <c><anno>MatchSpec</anno></c> is bound, the
- match specification is applied to all objects of the table
- with the right key(s). If the keypos'th element of
+ continuation is to be used when matching more objects by calling
+ <seealso marker="#select/1"><c>select/1</c></seealso>.</p>
+ <p>If the keypos'th element of <c><anno>MatchSpec</anno></c> is bound,
+ the match specification is applied to all objects of the table
+ with the correct key(s). If the keypos'th element of
<c><anno>MatchSpec</anno></c> is unbound, the match specification is
- applied to all objects of the table, <c><anno>N</anno></c> objects at a
- time, until at least one object matches or the end of the
- table has been reached. The default, indicated by giving
- <c><anno>N</anno></c> the value <c>default</c>, is to let the number of
- objects vary depending on the sizes of the objects. If
- <c><anno>Name</anno></c> is a version 9 table, all objects with the same
- key are always handled at the same time which implies that the
- match specification may be applied to more than <anno>N</anno> objects.
- </p>
- <p>The table should always be protected using
- <c>safe_fixtable/2</c> before calling <c>select/3</c>, or
- errors may occur when calling <c>select/1</c>.</p>
+ applied to all objects of the table, <c><anno>N</anno></c> objects at
+ a time, until at least one object matches or the end of the
+ table is reached. The default, indicated by giving
+ <c><anno>N</anno></c> the value <c>default</c>, is to let the number
+ of objects vary depending on the sizes of the objects. If
+ <c><anno>Name</anno></c> is a version 9 table, all objects with the
+ same key are always handled at the same time, which implies that the
+ match specification can be applied to more than <anno>N</anno>
+ objects.</p>
+ <p>The table is always to be protected using
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>
+ before calling <c>select/3</c>, otherwise
+ errors can occur when calling <c>select/1</c>.</p>
</desc>
</func>
+
<func>
<name name="select_delete" arity="2"/>
- <fsummary>Delete all objects that match a given pattern from a Dets table.</fsummary>
+ <fsummary>Delete all objects that match a given pattern from a
+ Dets table.</fsummary>
<desc>
- <p>Deletes each object from the table <c><anno>Name</anno></c> such that
- applying the match specification <c><anno>MatchSpec</anno></c> to the
- object returns the value <c>true</c>. See the ERTS
- User's Guide for a description of match
- specifications. Returns the number of deleted objects.</p>
+ <p>Deletes each object from table <c><anno>Name</anno></c> such that
+ applying match specification <c><anno>MatchSpec</anno></c> to the
+ object returns value <c>true</c>.
+ For a description of match specifications, see the
+ <seealso marker="erts:match_spec">ERTS User's Guide</seealso>.
+ Returns the number of deleted objects.</p>
<p>If the keypos'th element of <c><anno>MatchSpec</anno></c> is
bound, the match specification is applied to the objects
- with the right key(s) only.</p>
+ with the correct key(s) only.</p>
</desc>
</func>
+
<func>
<name name="slot" arity="2"/>
- <fsummary>Return the list of objects associated with a slot of a Dets table.</fsummary>
+ <fsummary>Return the list of objects associated with a slot of a
+ Dets table.</fsummary>
<desc>
<p>The objects of a table are distributed among slots,
- starting with slot <c>0</c> and ending with slot n. This
- function returns the list of objects associated with slot
- <c><anno>I</anno></c>. If <c><anno>I</anno></c> is greater than n
+ starting with slot <c>0</c> and ending with slot <c>n</c>.
+ Returns the list of objects associated with slot
+ <c><anno>I</anno></c>. If <c><anno>I</anno></c> &gt; <c>n</c>,
<c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="sync" arity="1"/>
- <fsummary>Ensure that all updates made to a Dets table are written to disk.</fsummary>
+ <fsummary>Ensure that all updates made to a Dets table are written
+ to disk.</fsummary>
<desc>
- <p>Ensures that all updates made to the table <c><anno>Name</anno></c> are
- written to disk. This also applies to tables which have been
- opened with the <c>ram_file</c> flag set to <c>true</c>. In
- this case, the contents of the RAM file are flushed to
- disk.</p>
- <p>Note that the space management data structures kept in RAM,
- the buddy system, is also written to the disk. This may take
+ <p>Ensures that all updates made to table <c><anno>Name</anno></c> are
+ written to disk. This also applies to tables that have been
+ opened with flag <c>ram_file</c> set to <c>true</c>. In
+ this case, the contents of the RAM file are flushed to disk.</p>
+ <p>Notice that the space management data structures kept in RAM,
+ the buddy system, is also written to the disk. This can take
some time if the table is fragmented.</p>
</desc>
</func>
+
<func>
<name name="table" arity="1"/>
<name name="table" arity="2"/>
<fsummary>Return a QLC query handle.</fsummary>
<desc>
- <p><marker id="qlc_table"></marker>Returns a QLC (Query List
- Comprehension) query handle. The module <c>qlc</c>
- implements a query language aimed mainly at Mnesia but Ets
- tables, Dets tables, and lists are also recognized by <c>qlc</c>
- as sources of data. Calling <c>dets:table/1,2</c> is the
- means to make the Dets table <c><anno>Name</anno></c> usable to <c>qlc</c>.</p>
- <p>When there are only simple restrictions on the key position
- <c>qlc</c> uses <c>dets:lookup/2</c> to look up the keys, but when
- that is not possible the whole table is traversed. The
- option <c>traverse</c> determines how this is done:</p>
+ <p>Returns a Query List
+ Comprehension (QLC) query handle. The
+ <seealso marker="qlc"><c>qlc(3)</c></seealso> module
+ provides a query language aimed mainly for Mnesia, but
+ ETS tables, Dets tables, and lists are also recognized
+ by <c>qlc</c> as sources of data. Calling
+ <seealso marker="dets#table/1"><c>dets:table/1,2</c></seealso> is the
+ means to make Dets table <c><anno>Name</anno></c> usable to
+ <c>qlc</c>.</p>
+ <p>When there are only simple restrictions on the key position,
+ <c>qlc</c> uses
+ <seealso marker="dets#lookup/2"><c>dets:lookup/2</c></seealso>
+ to look up the keys. When
+ that is not possible, the whole table is traversed.
+ Option <c>traverse</c> determines how this is done:</p>
<list type="bulleted">
<item>
- <p><c>first_next</c>. The table is traversed one key at
- a time by calling <c>dets:first/1</c> and
- <c>dets:next/2</c>.</p>
+ <p><c>first_next</c> - The table is traversed one key at
+ a time by calling <c>dets:first/1</c> and <c>dets:next/2</c>.</p>
</item>
<item>
- <p><c>select</c>. The table is traversed by calling
- <c>dets:select/3</c> and <c>dets:select/1</c>. The option
- <c>n_objects</c> determines the number of objects
+ <p><c>select</c> - The table is traversed by calling
+ <seealso marker="dets:select/3"><c>dets:select/3</c></seealso> and
+ <seealso marker="dets:select/1"><c>dets:select/1</c></seealso>.
+ Option <c>n_objects</c> determines the number of objects
returned (the third argument of <c>select/3</c>). The
match specification (the second argument of
- <c>select/3</c>) is assembled by <c>qlc</c>: simple filters are
- translated into equivalent match specifications while
- more complicated filters have to be applied to all
- objects returned by <c>select/3</c> given a match
- specification that matches all objects.</p>
+ <c>select/3</c>) is assembled by <c>qlc</c>:</p>
+ <list type="bulleted">
+ <item>
+ <p>Simple filters are translated into equivalent match
+ specifications.</p>
+ </item>
+ <item>
+ <p>More complicated filters must be applied to all
+ objects returned by <c>select/3</c> given a match
+ specification that matches all objects.</p>
+ </item>
+ </list>
</item>
<item>
<p><c>{select, </c><seealso marker="#type-match_spec">
- match_spec()</seealso><c>}</c>. As for <c>select</c>
+ match_spec()</seealso><c>}</c> - As for <c>select</c>,
the table is traversed by calling <c>dets:select/3</c>
and <c>dets:select/1</c>. The difference is that the
- match specification is explicitly given. This is how to
+ match specification is specified explicitly. This is how to
state match specifications that cannot easily be
expressed within the syntax provided by <c>qlc</c>.</p>
</item>
@@ -1076,70 +1159,79 @@ ok
1> <input>dets:open_file(t, []),</input>
<input>ok = dets:insert(t, [{1,a},{2,b},{3,c},{4,d}]),</input>
<input>MS = ets:fun2ms(fun({X,Y}) when (X > 1) or (X &lt; 5) -> {Y} end),</input>
-<input>QH1 = dets:table(t, [{traverse, {select, MS}}]).</input> </pre>
+<input>QH1 = dets:table(t, [{traverse, {select, MS}}]).</input></pre>
<p>An example with implicit match specification:</p>
<pre>
-2> <input>QH2 = qlc:q([{Y} || {X,Y} &lt;- dets:table(t), (X > 1) or (X &lt; 5)]).</input> </pre>
- <p>The latter example is in fact equivalent to the former which
- can be verified using the function <c>qlc:info/1</c>:</p>
+2> <input>QH2 = qlc:q([{Y} || {X,Y} &lt;- dets:table(t), (X > 1) or (X &lt; 5)]).</input></pre>
+ <p>The latter example is equivalent to the former, which
+ can be verified using function <c>qlc:info/1</c>:</p>
<pre>
3> <input>qlc:info(QH1) =:= qlc:info(QH2).</input>
-true </pre>
- <p><c>qlc:info/1</c> returns information about a query handle,
- and in this case identical information is returned for the
+true</pre>
+ <p><c>qlc:info/1</c> returns information about a query handle.
+ In this case identical information is returned for the
two query handles.</p>
</desc>
</func>
+
<func>
<name name="to_ets" arity="2"/>
- <fsummary>Insert all objects of a Dets table into an Ets table.</fsummary>
+ <fsummary>Insert all objects of a Dets table into an ETS
+ table.</fsummary>
<desc>
- <p>Inserts the objects of the Dets table <c><anno>Name</anno></c> into the
- Ets table <c><anno>EtsTab</anno></c>. The order in which the objects are
- inserted is not specified. The existing objects of the Ets
+ <p>Inserts the objects of the Dets table <c><anno>Name</anno></c>
+ into the ETS table <c><anno>EtsTab</anno></c>. The order in
+ which the objects are
+ inserted is not specified. The existing objects of the ETS
table are kept unless overwritten.</p>
</desc>
</func>
+
<func>
<name name="traverse" arity="2"/>
- <fsummary>Apply a function to all or some objects stored in a Dets table.</fsummary>
+ <fsummary>Apply a function to all or some objects stored in a Dets
+ table.</fsummary>
<desc>
- <p>Applies <c><anno>Fun</anno></c> to each object stored in the table
- <c><anno>Name</anno></c> in some unspecified order. Different actions are
+ <p>Applies <c><anno>Fun</anno></c> to each object stored in table
+ <c><anno>Name</anno></c> in some unspecified order. Different
+ actions are
taken depending on the return value of <c><anno>Fun</anno></c>. The
following <c><anno>Fun</anno></c> return values are allowed:</p>
<taglist>
<tag><c>continue</c></tag>
<item>
<p>Continue to perform the traversal. For example, the
- following function can be used to print out the contents
+ following function can be used to print the contents
of a table:</p>
<pre>
-fun(X) -> io:format("~p~n", [X]), continue end. </pre>
+fun(X) -> io:format("~p~n", [X]), continue end.</pre>
</item>
<tag><c>{continue, Val}</c></tag>
<item>
- <p>Continue the traversal and accumulate <c><anno>Val</anno></c>. The
- following function is supplied in order to collect all
- objects of a table in a list: </p>
+ <p>Continue the traversal and accumulate <c><anno>Val</anno></c>.
+ The following function is supplied to collect all
+ objects of a table in a list:</p>
<pre>
-fun(X) -> {continue, X} end. </pre>
+fun(X) -> {continue, X} end.</pre>
</item>
<tag><c>{done, <anno>Value</anno>}</c></tag>
<item>
- <p>Terminate the traversal and return <c>[<anno>Value</anno> | Acc]</c>.</p>
+ <p>Terminate the traversal and return
+ <c>[<anno>Value</anno> | Acc]</c>.</p>
</item>
</taglist>
- <p>Any other value <c><anno>OtherValue</anno></c> returned by <c><anno>Fun</anno></c> terminates the
- traversal and is immediately returned.
- </p>
+ <p>Any other value <c><anno>OtherValue</anno></c> returned by
+ <c><anno>Fun</anno></c> terminates the
+ traversal and is returned immediately.</p>
</desc>
</func>
+
<func>
<name name="update_counter" arity="3"/>
- <fsummary>Update a counter object stored in a Dets table.</fsummary>
+ <fsummary>Update a counter object stored in a Dets table.
+ </fsummary>
<desc>
- <p>Updates the object with key <c><anno>Key</anno></c> stored in the
+ <p>Updates the object with key <c><anno>Key</anno></c> stored in
table <c><anno>Name</anno></c> of type <c>set</c> by adding
<c><anno>Incr</anno></c> to the
element at the <c><anno>Pos</anno></c>:th position.
@@ -1148,7 +1240,7 @@ fun(X) -> {continue, X} end. </pre>
following the key is updated.</p>
<p>This functions provides a way of updating a counter,
without having to look up an object, update the object by
- incrementing an element and insert the resulting object into
+ incrementing an element, and insert the resulting object into
the table again.</p>
</desc>
</func>
@@ -1156,8 +1248,9 @@ fun(X) -> {continue, X} end. </pre>
<section>
<title>See Also</title>
- <p><seealso marker="ets">ets(3)</seealso>,
- mnesia(3),
- <seealso marker="qlc">qlc(3)</seealso></p>
+ <p><seealso marker="ets"><c>ets(3)</c></seealso>,
+ <seealso marker="mnesia:mnesia"><c>mnesia(3)</c></seealso>,
+ <seealso marker="qlc"><c>qlc(3)</c></seealso></p>
</section>
</erlref>
+
diff --git a/lib/stdlib/doc/src/dict.xml b/lib/stdlib/doc/src/dict.xml
index e10531caac..c926ff1b5b 100644
--- a/lib/stdlib/doc/src/dict.xml
+++ b/lib/stdlib/doc/src/dict.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,12 +29,13 @@
<rev>B</rev>
</header>
<module>dict</module>
- <modulesummary>Key-Value Dictionary</modulesummary>
+ <modulesummary>Key-value dictionary.</modulesummary>
<description>
- <p><c>Dict</c> implements a <c>Key</c> - <c>Value</c> dictionary.
+ <p>This module provides a <c>Key</c>-<c>Value</c> dictionary.
The representation of a dictionary is not defined.</p>
- <p>This module provides exactly the same interface as the module
- <c>orddict</c>. One difference is that while this module
+ <p>This module provides the same interface as the
+ <seealso marker="orddict"><c>orddict(3)</c></seealso> module.
+ One difference is that while this module
considers two keys as different if they do not match (<c>=:=</c>),
<c>orddict</c> considers two keys as different if and only if
they do not compare equal (<c>==</c>).</p>
@@ -43,211 +44,241 @@
<datatypes>
<datatype>
<name name="dict" n_vars="2"/>
- <desc><p>Dictionary as returned by <c>new/0</c>.</p></desc>
+ <desc><p>Dictionary as returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p>
+ </desc>
</datatype>
<datatype>
<name name="dict" n_vars="0"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="append" arity="3"/>
- <fsummary>Append a value to keys in a dictionary</fsummary>
+ <fsummary>Append a value to keys in a dictionary.</fsummary>
<desc>
- <p>This function appends a new <c><anno>Value</anno></c> to the current list
+ <p>Appends a new <c><anno>Value</anno></c> to the current list
of values associated with <c><anno>Key</anno></c>.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="append_list" arity="3"/>
- <fsummary>Append new values to keys in a dictionary</fsummary>
+ <fsummary>Append new values to keys in a dictionary.</fsummary>
<desc>
- <p>This function appends a list of values <c><anno>ValList</anno></c> to
+ <p>Appends a list of values <c><anno>ValList</anno></c> to
the current list of values associated with <c><anno>Key</anno></c>. An
exception is generated if the initial value associated with
<c><anno>Key</anno></c> is not a list of values.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="erase" arity="2"/>
- <fsummary>Erase a key from a dictionary</fsummary>
+ <fsummary>Erase a key from a dictionary.</fsummary>
<desc>
- <p>This function erases all items with a given key from a
- dictionary.</p>
+ <p>Erases all items with a given key from a dictionary.</p>
</desc>
</func>
+
<func>
<name name="fetch" arity="2"/>
- <fsummary>Look-up values in a dictionary</fsummary>
+ <fsummary>Look up values in a dictionary.</fsummary>
<desc>
- <p>This function returns the value associated with <c><anno>Key</anno></c>
- in the dictionary <c><anno>Dict</anno></c>. <c>fetch</c> assumes that
- the <c><anno>Key</anno></c> is present in the dictionary and an exception
+ <p>Returns the value associated with <c><anno>Key</anno></c>
+ in dictionary <c><anno>Dict</anno></c>. This function assumes that
+ <c><anno>Key</anno></c> is present in dictionary <c>Dict</c>,
+ and an exception
is generated if <c><anno>Key</anno></c> is not in the dictionary.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="fetch_keys" arity="1"/>
- <fsummary>Return all keys in a dictionary</fsummary>
+ <fsummary>Return all keys in a dictionary.</fsummary>
<desc>
- <p>This function returns a list of all keys in the dictionary.</p>
+ <p>Returns a list of all keys in dictionary <c>Dict</c>.</p>
</desc>
</func>
+
<func>
<name name="filter" arity="2"/>
- <fsummary>Choose elements which satisfy a predicate</fsummary>
+ <fsummary>Select elements that satisfy a predicate.</fsummary>
<desc>
<p><c><anno>Dict2</anno></c> is a dictionary of all keys and values in
- <c><anno>Dict1</anno></c> for which <c><anno>Pred</anno>(<anno>Key</anno>, <anno>Value</anno>)</c> is <c>true</c>.</p>
+ <c><anno>Dict1</anno></c> for which
+ <c><anno>Pred</anno>(<anno>Key</anno>, <anno>Value</anno>)</c> is
+ <c>true</c>.</p>
</desc>
</func>
+
<func>
<name name="find" arity="2"/>
- <fsummary>Search for a key in a dictionary</fsummary>
+ <fsummary>Search for a key in a dictionary.</fsummary>
<desc>
- <p>This function searches for a key in a dictionary. Returns
- <c>{ok, <anno>Value</anno>}</c> where <c><anno>Value</anno></c> is the value associated
- with <c><anno>Key</anno></c>, or <c>error</c> if the key is not present in
- the dictionary.</p>
+ <p>Searches for a key in dictionary <c>Dict</c>. Returns
+ <c>{ok, <anno>Value</anno>}</c>, where <c><anno>Value</anno></c> is
+ the value associated with <c><anno>Key</anno></c>, or <c>error</c>
+ if the key is not present in the dictionary.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="fold" arity="3"/>
- <fsummary>Fold a function over a dictionary</fsummary>
+ <fsummary>Fold a function over a dictionary.</fsummary>
<desc>
<p>Calls <c><anno>Fun</anno></c> on successive keys and values of
- <c><anno>Dict</anno></c> together with an extra argument <c>Acc</c>
+ dictionary <c><anno>Dict</anno></c> together with an extra argument
+ <c>Acc</c>
(short for accumulator). <c><anno>Fun</anno></c> must return a new
- accumulator which is passed to the next call. <c><anno>Acc0</anno></c> is
- returned if the dict is empty. The evaluation order is
+ accumulator that is passed to the next call. <c><anno>Acc0</anno></c>
+ is returned if the dictionary is empty. The evaluation order is
undefined.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list of pairs to a dictionary</fsummary>
+ <fsummary>Convert a list of pairs to a dictionary.</fsummary>
<desc>
- <p>This function converts the <c><anno>Key</anno></c> - <c><anno>Value</anno></c> list
- <c><anno>List</anno></c> to a dictionary.</p>
+ <p>Converts the <c><anno>Key</anno></c>-<c><anno>Value</anno></c> list
+ <c><anno>List</anno></c> to dictionary <c>Dict</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="is_empty" arity="1"/>
+ <fsummary>Return <c>true</c> if the dictionary is empty.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if dictionary <c><anno>Dict</anno></c> has no
+ elements, otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="is_key" arity="2"/>
- <fsummary>Test if a key is in a dictionary</fsummary>
+ <fsummary>Test if a key is in a dictionary.</fsummary>
<desc>
- <p>This function tests if <c><anno>Key</anno></c> is contained in
- the dictionary <c><anno>Dict</anno></c>.</p>
+ <p>Tests if <c><anno>Key</anno></c> is contained in
+ dictionary <c><anno>Dict</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="map" arity="2"/>
- <fsummary>Map a function over a dictionary</fsummary>
+ <fsummary>Map a function over a dictionary.</fsummary>
<desc>
- <p><c>map</c> calls <c><anno>Fun</anno></c> on successive keys and values
- of <c><anno>Dict1</anno></c> to return a new value for each key.
- The evaluation order is undefined.</p>
+ <p>Calls <c><anno>Fun</anno></c> on successive keys and values
+ of dictionary <c><anno>Dict1</anno></c> to return a new value for
+ each key. The evaluation order is undefined.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="3"/>
- <fsummary>Merge two dictionaries</fsummary>
+ <fsummary>Merge two dictionaries.</fsummary>
<desc>
- <p><c>merge</c> merges two dictionaries, <c><anno>Dict1</anno></c> and
- <c><anno>Dict2</anno></c>, to create a new dictionary. All the <c><anno>Key</anno></c>
- - <c><anno>Value</anno></c> pairs from both dictionaries are included in
- the new dictionary. If a key occurs in both dictionaries then
- <c><anno>Fun</anno></c> is called with the key and both values to return a
- new value. <c>merge</c> could be defined as:</p>
+ <p>Merges two dictionaries, <c><anno>Dict1</anno></c> and
+ <c><anno>Dict2</anno></c>, to create a new dictionary. All the
+ <c><anno>Key</anno></c>-<c><anno>Value</anno></c> pairs from both
+ dictionaries are included in the new dictionary. If a key occurs
+ in both dictionaries, <c><anno>Fun</anno></c> is called with the
+ key and both values to return a new value.
+ <c>merge</c> can be defined as follows, but is faster:</p>
<code type="none">
merge(Fun, D1, D2) ->
fold(fun (K, V1, D) ->
update(K, fun (V2) -> Fun(K, V1, V2) end, V1, D)
end, D2, D1).</code>
- <p>but is faster.</p>
</desc>
</func>
+
<func>
<name name="new" arity="0"/>
- <fsummary>Create a dictionary</fsummary>
+ <fsummary>Create a dictionary.</fsummary>
<desc>
- <p>This function creates a new dictionary.</p>
+ <p>Creates a new dictionary.</p>
</desc>
</func>
+
<func>
<name name="size" arity="1"/>
- <fsummary>Return the number of elements in a dictionary</fsummary>
+ <fsummary>Return the number of elements in a dictionary.</fsummary>
<desc>
- <p>Returns the number of elements in a <c><anno>Dict</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="is_empty" arity="1"/>
- <fsummary>Return true if the dictionary is empty</fsummary>
- <desc>
- <p>Returns <c>true</c> if <c><anno>Dict</anno></c> has no elements, <c>false</c> otherwise.</p>
+ <p>Returns the number of elements in dictionary
+ <c><anno>Dict</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="store" arity="3"/>
- <fsummary>Store a value in a dictionary</fsummary>
+ <fsummary>Store a value in a dictionary.</fsummary>
<desc>
- <p>This function stores a <c><anno>Key</anno></c> - <c><anno>Value</anno></c> pair in a
- dictionary. If the <c><anno>Key</anno></c> already exists in <c><anno>Dict1</anno></c>,
+ <p>Stores a <c><anno>Key</anno></c>-<c><anno>Value</anno></c> pair in
+ dictionary <c>Dict2</c>. If <c><anno>Key</anno></c> already exists in
+ <c><anno>Dict1</anno></c>,
the associated value is replaced by <c><anno>Value</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="to_list" arity="1"/>
- <fsummary>Convert a dictionary to a list of pairs</fsummary>
+ <fsummary>Convert a dictionary to a list of pairs.</fsummary>
<desc>
- <p>This function converts the dictionary to a list
- representation.</p>
+ <p>Converts dictionary <c>Dict</c> to a list representation.</p>
</desc>
</func>
+
<func>
<name name="update" arity="3"/>
- <fsummary>Update a value in a dictionary</fsummary>
+ <fsummary>Update a value in a dictionary.</fsummary>
<desc>
- <p>Update a value in a dictionary by calling <c><anno>Fun</anno></c> on
- the value to get a new value. An exception is generated if
+ <p>Updates a value in a dictionary by calling <c><anno>Fun</anno></c> on
+ the value to get a new value. An exception is generated if
<c><anno>Key</anno></c> is not present in the dictionary.</p>
</desc>
</func>
+
<func>
<name name="update" arity="4"/>
- <fsummary>Update a value in a dictionary</fsummary>
+ <fsummary>Update a value in a dictionary.</fsummary>
<desc>
- <p>Update a value in a dictionary by calling <c><anno>Fun</anno></c> on
- the value to get a new value. If <c><anno>Key</anno></c> is not present
- in the dictionary then <c><anno>Initial</anno></c> will be stored as
- the first value. For example <c>append/3</c> could be defined
- as:</p>
+ <p>Updates a value in a dictionary by calling <c><anno>Fun</anno></c> on
+ the value to get a new value. If <c><anno>Key</anno></c> is not
+ present in the dictionary, <c><anno>Initial</anno></c> is stored as
+ the first value. For example, <c>append/3</c> can be defined as:</p>
<code type="none">
append(Key, Val, D) ->
update(Key, fun (Old) -> Old ++ [Val] end, [Val], D).</code>
</desc>
</func>
+
<func>
<name name="update_counter" arity="3"/>
- <fsummary>Increment a value in a dictionary</fsummary>
+ <fsummary>Increment a value in a dictionary.</fsummary>
<desc>
- <p>Add <c><anno>Increment</anno></c> to the value associated with <c><anno>Key</anno></c>
- and store this value. If <c><anno>Key</anno></c> is not present in
- the dictionary then <c><anno>Increment</anno></c> will be stored as
- the first value.</p>
- <p>This could be defined as:</p>
+ <p>Adds <c><anno>Increment</anno></c> to the value associated with
+ <c><anno>Key</anno></c> and stores this value.
+ If <c><anno>Key</anno></c> is not present in the dictionary,
+ <c><anno>Increment</anno></c> is stored as the first value.</p>
+ <p>This can be defined as follows, but is faster:</p>
<code type="none">
update_counter(Key, Incr, D) ->
update(Key, fun (Old) -> Old + Incr end, Incr, D).</code>
- <p>but is faster.</p>
</desc>
</func>
</funcs>
<section>
<title>Notes</title>
- <p>The functions <c>append</c> and <c>append_list</c> are included
- so we can store keyed values in a list <em>accumulator</em>. For
+ <marker id="notes"/>
+ <p>Functions <c>append</c> and <c>append_list</c> are included
+ so that keyed values can be stored in a list <em>accumulator</em>, for
example:</p>
<pre>
> D0 = dict:new(),
@@ -256,19 +287,18 @@ update_counter(Key, Incr, D) ->
D3 = dict:append(files, f2, D2),
D4 = dict:append(files, f3, D3),
dict:fetch(files, D4).
-[f1,f2,f3] </pre>
+[f1,f2,f3]</pre>
<p>This saves the trouble of first fetching a keyed value,
appending a new value to the list of stored values, and storing
- the result.
- </p>
- <p>The function <c>fetch</c> should be used if the key is known to
- be in the dictionary, otherwise <c>find</c>.</p>
+ the result.</p>
+ <p>Function <c>fetch</c> is to be used if the key is known to
+ be in the dictionary, otherwise function <c>find</c>.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="gb_trees">gb_trees(3)</seealso>,
- <seealso marker="orddict">orddict(3)</seealso></p>
+ <p><seealso marker="gb_trees"><c>gb_trees(3)</c></seealso>,
+ <seealso marker="orddict"><c>orddict(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/digraph.xml b/lib/stdlib/doc/src/digraph.xml
index 291be6c08b..5332d7aba5 100644
--- a/lib/stdlib/doc/src/digraph.xml
+++ b/lib/stdlib/doc/src/digraph.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,64 +30,92 @@
<checked></checked>
<date>2001-08-27</date>
<rev>C</rev>
- <file>digraph.sgml</file>
+ <file>digraph.xml</file>
</header>
<module>digraph</module>
- <modulesummary>Directed Graphs</modulesummary>
+ <modulesummary>Directed graphs.</modulesummary>
<description>
- <p>The <c>digraph</c> module implements a version of labeled
- directed graphs. What makes the graphs implemented here
+ <p>This module provides a version of labeled
+ directed graphs. What makes the graphs provided here
non-proper directed graphs is that multiple edges between
vertices are allowed. However, the customary definition of
- directed graphs will be used in the text that follows.
- </p>
- <p>A <marker id="digraph"></marker><em>directed graph</em> (or just
- "digraph") is a pair (V,&nbsp;E) of a finite set V of
- <marker id="vertex"></marker><em>vertices</em> and a finite set E of
- <marker id="edge"></marker><em>directed edges</em> (or just "edges").
- The set of
- edges E is a subset of V&nbsp;&times;&nbsp;V (the Cartesian
- product of V with itself). In this module, V is allowed to be
- empty; the so obtained unique digraph is called the
- <marker id="empty_digraph"></marker><em>empty digraph</em>.
- Both vertices and edges are represented by unique Erlang terms.
- </p>
- <p>Digraphs can be annotated with additional information. Such
- information may be attached to the vertices and to the edges of
- the digraph. A digraph which has been annotated is called a
- <em>labeled digraph</em>, and the information attached to a
- vertex or an edge is called a <marker id="label"></marker>
- <em>label</em>. Labels are Erlang terms.
- </p>
- <p>An edge e&nbsp;=&nbsp;(v,&nbsp;w) is said to
- <marker id="emanate"></marker><em>emanate</em> from vertex v and
- to be <marker id="incident"></marker><em>incident</em> on vertex w.
- The <marker id="out_degree"></marker><em>out-degree</em> of a vertex
- is the number of edges emanating from that vertex.
- The <marker id="in_degree"></marker><em>in-degree</em> of a vertex
- is the number of edges incident on that vertex.
- If there is an edge emanating from v and incident on w, then w is
- said to be an <marker id="out_neighbour"></marker>
- <em>out-neighbour</em> of v, and v is said to be an
- <marker id="in_neighbour"></marker><em>in-neighbour</em> of w.
- A <marker id="path"></marker><em>path</em> P from v[1] to v[k]
- in a digraph (V,&nbsp;E) is a non-empty sequence
- v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] of vertices in V such that
- there is an edge (v[i],v[i+1]) in E for
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k.
- The <marker id="length"></marker><em>length</em> of the path P is k-1.
- P is <marker id="simple_path"></marker><em>simple</em> if all
- vertices are distinct, except that the first and the last vertices
- may be the same.
- P is a <marker id="cycle"></marker><em>cycle</em> if the length
- of P is not zero and v[1] = v[k].
- A <marker id="loop"></marker><em>loop</em> is a cycle of length one.
- A <marker id="simple_cycle"></marker><em>simple cycle</em> is a path
- that is both a cycle and simple.
- An <marker id="acyclic_digraph"></marker><em>acyclic digraph</em>
- is a digraph that has no cycles.
- </p>
+ directed graphs is used here.</p>
+
+ <list type="bulleted">
+ <item>
+ <p>A <marker id="digraph"></marker><em>directed graph</em> (or just
+ "digraph") is a pair (V,&nbsp;E) of a finite set V of
+ <marker id="vertex"></marker><em>vertices</em> and a finite set E of
+ <marker id="edge"></marker><em>directed edges</em> (or just "edges").
+ The set of edges E is a subset of V&nbsp;&times;&nbsp;V (the
+ Cartesian product of V with itself).</p>
+ <p>In this module, V is allowed to be empty. The so obtained unique
+ digraph is called the
+ <marker id="empty_digraph"></marker><em>empty digraph</em>. Both
+ vertices and edges are represented by unique Erlang terms.</p>
+ </item>
+ <item>
+ <p>Digraphs can be annotated with more information. Such information
+ can be attached to the vertices and to the edges of the digraph. An
+ annotated digraph is called a <em>labeled digraph</em>, and the
+ information attached to a vertex or an edge is called a
+ <marker id="label"></marker><em>label</em>. Labels are Erlang
+ terms.</p>
+ </item>
+ <item>
+ <p>An edge e&nbsp;=&nbsp;(v,&nbsp;w) is said to
+ <marker id="emanate"></marker><em>emanate</em> from vertex v and to
+ be <marker id="incident"></marker><em>incident</em> on vertex w.</p>
+ </item>
+ <item>
+ <p>The <marker id="out_degree"></marker><em>out-degree</em> of a vertex
+ is the number of edges emanating from that vertex.</p>
+ </item>
+ <item>
+ <p>The <marker id="in_degree"></marker><em>in-degree</em> of a vertex
+ is the number of edges incident on that vertex.</p>
+ </item>
+ <item>
+ <p>If an edge is emanating from v and incident on w, then w is
+ said to be an <marker id="out_neighbour"></marker>
+ <em>out-neighbor</em> of v, and v is said to be an
+ <marker id="in_neighbour"></marker><em>in-neighbor</em> of w.</p>
+ </item>
+ <item>
+ <p>A <marker id="path"></marker><em>path</em> P from v[1] to v[k]
+ in a digraph (V,&nbsp;E) is a non-empty sequence
+ v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] of vertices in V such that
+ there is an edge (v[i],v[i+1]) in E for
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k.</p>
+ </item>
+ <item>
+ <p>The <marker id="length"></marker><em>length</em> of path P is
+ k-1.</p>
+ </item>
+ <item>
+ <p>Path P is <marker id="simple_path"></marker><em>simple</em> if all
+ vertices are distinct, except that the first and the last vertices
+ can be the same.</p>
+ </item>
+ <item>
+ <p>Path P is a <marker id="cycle"></marker><em>cycle</em> if the
+ length of P is not zero and v[1] = v[k].</p>
+ </item>
+ <item>
+ <p>A <marker id="loop"></marker><em>loop</em> is a cycle of length
+ one.</p>
+ </item>
+ <item>
+ <p>A <marker id="simple_cycle"></marker><em>simple cycle</em> is a path
+ that is both a cycle and simple.</p>
+ </item>
+ <item>
+ <p>An <marker id="acyclic_digraph"></marker><em>acyclic digraph</em>
+ is a digraph without cycles.</p>
+ </item>
+ </list>
</description>
+
<datatypes>
<datatype>
<name name="d_type"/>
@@ -100,20 +128,20 @@
</datatype>
<datatype>
<name name="graph"/>
- <desc><p>A digraph as returned by <c>new/0,1</c>.</p></desc>
+ <desc><p>A digraph as returned by
+ <seealso marker="#new/0"><c>new/0,1</c></seealso>.</p></desc>
</datatype>
<datatype>
<name>edge()</name>
- <desc><p><marker id="type-edge"/></p></desc>
</datatype>
<datatype>
<name name="label"/>
</datatype>
<datatype>
<name>vertex()</name>
- <desc><p><marker id="type-vertex"/></p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="add_edge" arity="3"/>
@@ -122,291 +150,313 @@
<fsummary>Add an edge to a digraph.</fsummary>
<type name="add_edge_err_rsn"/>
<desc>
- <p><c>add_edge/5</c> creates (or modifies) the edge <c><anno>E</anno></c>
- of the digraph <c><anno>G</anno></c>, using <c><anno>Label</anno></c> as the (new)
- <seealso marker="#label">label</seealso> of the edge. The
+ <p><c>add_edge/5</c> creates (or modifies) edge <c><anno>E</anno></c>
+ of digraph <c><anno>G</anno></c>, using <c><anno>Label</anno></c> as
+ the (new) <seealso marker="#label">label</seealso> of the edge. The
edge is <seealso marker="#emanate">emanating</seealso> from
- <c><anno>V1</anno></c> and <seealso marker="#incident">incident</seealso>
- on <c><anno>V2</anno></c>. Returns <c><anno>E</anno></c>.
- </p>
- <p><c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>)</c> is
- equivalent to
+ <c><anno>V1</anno></c> and
+ <seealso marker="#incident">incident</seealso>
+ on <c><anno>V2</anno></c>. Returns <c><anno>E</anno></c>.</p>
+ <p><c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>)</c>
+ is equivalent to
<c>add_edge(<anno>G</anno>,&nbsp;<anno>E</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>)</c>,
where <c><anno>E</anno></c> is a created edge. The created edge is
- represented by the term <c>['$e'&nbsp;|&nbsp;N]</c>, where N
- is an integer&nbsp;&gt;=&nbsp;0.
- </p>
- <p><c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>)</c> is equivalent to
+ represented by term <c>['$e'&nbsp;|&nbsp;N]</c>, where <c>N</c>
+ is an integer&nbsp;&gt;=&nbsp;0.</p>
+ <p><c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>)</c>
+ is equivalent to
<c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;[])</c>.
- </p>
- <p>If the edge would create a cycle in
- an <seealso marker="#acyclic_digraph">acyclic digraph</seealso>,
- then <c>{error,&nbsp;{bad_edge,&nbsp;<anno>Path</anno>}}</c> is returned. If
- either of <c><anno>V1</anno></c> or <c><anno>V2</anno></c> is not a vertex of the
- digraph <c><anno>G</anno></c>, then
+ </p>
+ <p>If the edge would create a cycle in
+ an <seealso marker="#acyclic_digraph">acyclic digraph</seealso>,
+ <c>{error,&nbsp;{bad_edge,&nbsp;<anno>Path</anno>}}</c> is returned.
+ If either of <c><anno>V1</anno></c> or <c><anno>V2</anno></c> is not
+ a vertex of digraph <c><anno>G</anno></c>,
<c>{error,&nbsp;{bad_vertex,&nbsp;</c><anno>V</anno><c>}}</c> is
returned, <anno>V</anno>&nbsp;=&nbsp;<c><anno>V1</anno></c> or
- <anno>V</anno>&nbsp;=&nbsp;<c><anno>V2</anno></c>.
- </p>
+ <anno>V</anno>&nbsp;=&nbsp;<c><anno>V2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="add_vertex" arity="1"/>
<name name="add_vertex" arity="2"/>
<name name="add_vertex" arity="3"/>
<fsummary>Add or modify a vertex of a digraph.</fsummary>
<desc>
- <p><c>add_vertex/3</c> creates (or modifies) the vertex <c><anno>V</anno></c>
- of the digraph <c><anno>G</anno></c>, using <c><anno>Label</anno></c> as the (new)
+ <p><c>add_vertex/3</c> creates (or modifies) vertex
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>, using
+ <c><anno>Label</anno></c> as the (new)
<seealso marker="#label">label</seealso> of the
- vertex. Returns <c><anno>V</anno></c>.
- </p>
- <p><c>add_vertex(<anno>G</anno>,&nbsp;<anno>V</anno>)</c> is equivalent to
- <c>add_vertex(<anno>G</anno>,&nbsp;<anno>V</anno>,&nbsp;[])</c>.
- </p>
+ vertex. Returns <c><anno>V</anno></c>.</p>
+ <p><c>add_vertex(<anno>G</anno>,&nbsp;<anno>V</anno>)</c> is equivalent
+ to <c>add_vertex(<anno>G</anno>,&nbsp;<anno>V</anno>,&nbsp;[])</c>.
+ </p>
<p><c>add_vertex/1</c> creates a vertex using the empty list
as label, and returns the created vertex. The created vertex
- is represented by the term <c>['$v'&nbsp;|&nbsp;N]</c>,
- where N is an integer&nbsp;&gt;=&nbsp;0.
- </p>
+ is represented by term <c>['$v'&nbsp;|&nbsp;N]</c>,
+ where <c>N</c> is an integer&nbsp;&gt;=&nbsp;0.</p>
</desc>
</func>
+
<func>
<name name="del_edge" arity="2"/>
<fsummary>Delete an edge from a digraph.</fsummary>
<desc>
- <p>Deletes the edge <c><anno>E</anno></c> from the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Deletes edge <c><anno>E</anno></c> from digraph
+ <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="del_edges" arity="2"/>
<fsummary>Delete edges from a digraph.</fsummary>
<desc>
- <p>Deletes the edges in the list <c><anno>Edges</anno></c> from the digraph
- <c><anno>G</anno></c>.
- </p>
+ <p>Deletes the edges in list <c><anno>Edges</anno></c> from digraph
+ <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="del_path" arity="3"/>
<fsummary>Delete paths from a digraph.</fsummary>
<desc>
- <p>Deletes edges from the digraph <c><anno>G</anno></c> until there are no
- <seealso marker="#path">paths</seealso> from the vertex
- <c><anno>V1</anno></c> to the vertex <c><anno>V2</anno></c>.
- </p>
- <p>A sketch of the procedure employed: Find an arbitrary
- <seealso marker="#simple_path">simple path</seealso>
- v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] from <c><anno>V1</anno></c> to
- <c><anno>V2</anno></c> in <c><anno>G</anno></c>. Remove all edges of
- <c><anno>G</anno></c> <seealso marker="#emanate">emanating</seealso> from v[i]
- and <seealso marker="#incident">incident</seealso> to v[i+1] for
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k (including multiple
- edges). Repeat until there is no path between <c><anno>V1</anno></c> and
- <c><anno>V2</anno></c>.
- </p>
+ <p>Deletes edges from digraph <c><anno>G</anno></c> until there are no
+ <seealso marker="#path">paths</seealso> from vertex
+ <c><anno>V1</anno></c> to vertex <c><anno>V2</anno></c>.</p>
+ <p>A sketch of the procedure employed:</p>
+ <list type="bulleted">
+ <item>
+ <p>Find an arbitrary
+ <seealso marker="#simple_path">simple path</seealso>
+ v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] from <c><anno>V1</anno></c>
+ to <c><anno>V2</anno></c> in <c><anno>G</anno></c>.</p>
+ </item>
+ <item>
+ <p>Remove all edges of <c><anno>G</anno></c>
+ <seealso marker="#emanate">emanating</seealso> from v[i] and
+ <seealso marker="#incident">incident</seealso> to v[i+1] for
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k (including multiple
+ edges).</p>
+ </item>
+ <item>
+ <p>Repeat until there is no path between <c><anno>V1</anno></c>
+ and <c><anno>V2</anno></c>.</p>
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name name="del_vertex" arity="2"/>
<fsummary>Delete a vertex from a digraph.</fsummary>
<desc>
- <p>Deletes the vertex <c><anno>V</anno></c> from the digraph <c><anno>G</anno></c>. Any
- edges <seealso marker="#emanate">emanating</seealso> from
- <c><anno>V</anno></c> or <seealso marker="#incident">incident</seealso>
- on <c><anno>V</anno></c> are also deleted.
- </p>
+ <p>Deletes vertex <c><anno>V</anno></c> from digraph
+ <c><anno>G</anno></c>. Any edges
+ <seealso marker="#emanate">emanating</seealso> from
+ <c><anno>V</anno></c> or
+ <seealso marker="#incident">incident</seealso>
+ on <c><anno>V</anno></c> are also deleted.</p>
</desc>
</func>
+
<func>
<name name="del_vertices" arity="2"/>
<fsummary>Delete vertices from a digraph.</fsummary>
<desc>
- <p>Deletes the vertices in the list <c><anno>Vertices</anno></c> from the
- digraph <c><anno>G</anno></c>.
- </p>
+ <p>Deletes the vertices in list <c><anno>Vertices</anno></c> from
+ digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="1"/>
<fsummary>Delete a digraph.</fsummary>
<desc>
- <p>Deletes the digraph <c><anno>G</anno></c>. This call is important
- because digraphs are implemented with <c>ETS</c>. There is
- no garbage collection of <c>ETS</c> tables. The digraph
- will, however, be deleted if the process that created the
- digraph terminates.
- </p>
+ <p>Deletes digraph <c><anno>G</anno></c>. This call is important
+ as digraphs are implemented with ETS. There is
+ no garbage collection of ETS tables. However, the digraph
+ is deleted if the process that created the digraph terminates.</p>
</desc>
</func>
+
<func>
<name name="edge" arity="2"/>
- <fsummary>Return the vertices and the label of an edge of a digraph.</fsummary>
+ <fsummary>Return the vertices and the label of an edge of a digraph.
+ </fsummary>
<desc>
- <p>Returns <c>{<anno>E</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>}</c> where
- <c><anno>Label</anno></c> is the <seealso marker="#label">label</seealso>
- of the edge
- <c><anno>E</anno></c> <seealso marker="#emanate">emanating</seealso> from
- <c><anno>V1</anno></c> and <seealso marker="#incident">incident</seealso> on
- <c><anno>V2</anno></c> of the digraph <c><anno>G</anno></c>.
- If there is no edge <c><anno>E</anno></c> of the
- digraph <c><anno>G</anno></c>, then <c>false</c> is returned.
- </p>
+ <p>Returns
+ <c>{<anno>E</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>}</c>,
+ where <c><anno>Label</anno></c> is the
+ <seealso marker="#label">label</seealso> of edge
+ <c><anno>E</anno></c> <seealso marker="#emanate">emanating</seealso>
+ from <c><anno>V1</anno></c> and
+ <seealso marker="#incident">incident</seealso> on
+ <c><anno>V2</anno></c> of digraph <c><anno>G</anno></c>.
+ If no edge <c><anno>E</anno></c> of
+ digraph <c><anno>G</anno></c> exists, <c>false</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="edges" arity="1"/>
<fsummary>Return all edges of a digraph.</fsummary>
<desc>
- <p>Returns a list of all edges of the digraph <c><anno>G</anno></c>, in
- some unspecified order.
- </p>
+ <p>Returns a list of all edges of digraph <c><anno>G</anno></c>, in
+ some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="edges" arity="2"/>
- <fsummary>Return the edges emanating from or incident on a vertex of a digraph.</fsummary>
+ <fsummary>Return the edges emanating from or incident on a vertex of
+ a digraph.</fsummary>
<desc>
- <p>Returns a list of all
- edges <seealso marker="#emanate">emanating</seealso> from
- or <seealso marker="#incident">incident</seealso> on <c><anno>V</anno></c>
- of the digraph <c><anno>G</anno></c>, in some unspecified order.</p>
+ <p>Returns a list of all
+ edges <seealso marker="#emanate">emanating</seealso> from or
+ <seealso marker="#incident">incident</seealso> on<c><anno>V</anno></c>
+ of digraph <c><anno>G</anno></c>, in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="get_cycle" arity="2"/>
<fsummary>Find one cycle in a digraph.</fsummary>
<desc>
- <p>If there is
- a <seealso marker="#simple_cycle">simple cycle</seealso> of
- length two or more through the vertex
- <c><anno>V</anno></c>, then the cycle is returned as a list
- <c>[<anno>V</anno>,&nbsp;...,&nbsp;<anno>V</anno>]</c> of vertices, otherwise if there
- is a <seealso marker="#loop">loop</seealso> through
- <c><anno>V</anno></c>, then the loop is returned as a list <c>[<anno>V</anno>]</c>. If
- there are no cycles through <c><anno>V</anno></c>, then <c>false</c> is
- returned.
- </p>
- <p><c>get_path/3</c> is used for finding a simple cycle
- through <c><anno>V</anno></c>.
- </p>
+ <p>If a <seealso marker="#simple_cycle">simple cycle</seealso> of
+ length two or more exists through vertex <c><anno>V</anno></c>, the
+ cycle is returned as a list
+ <c>[<anno>V</anno>,&nbsp;...,&nbsp;<anno>V</anno>]</c> of vertices.
+ If a <seealso marker="#loop">loop</seealso> through
+ <c><anno>V</anno></c> exists, the loop is returned as a list
+ <c>[<anno>V</anno>]</c>. If no cycles through
+ <c><anno>V</anno></c> exist, <c>false</c> is returned.</p>
+ <p><seealso marker="#get_path/3"><c>get_path/3</c></seealso> is used
+ for finding a simple cycle through <c><anno>V</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="get_path" arity="3"/>
<fsummary>Find one path in a digraph.</fsummary>
<desc>
- <p>Tries to find
- a <seealso marker="#simple_path">simple path</seealso> from
- the vertex <c><anno>V1</anno></c> to the vertex
- <c><anno>V2</anno></c> of the digraph <c><anno>G</anno></c>. Returns the path as a
- list <c>[<anno>V1</anno>,&nbsp;...,&nbsp;<anno>V2</anno>]</c> of vertices, or
- <c>false</c> if no simple path from <c><anno>V1</anno></c> to <c><anno>V2</anno></c>
- of length one or more exists.
- </p>
- <p>The digraph <c><anno>G</anno></c> is traversed in a depth-first manner,
- and the first path found is returned.
- </p>
+ <p>Tries to find
+ a <seealso marker="#simple_path">simple path</seealso> from vertex
+ <c><anno>V1</anno></c> to vertex <c><anno>V2</anno></c> of digraph
+ <c><anno>G</anno></c>. Returns the path as a list
+ <c>[<anno>V1</anno>,&nbsp;...,&nbsp;<anno>V2</anno>]</c> of vertices,
+ or <c>false</c> if no simple path from <c><anno>V1</anno></c> to
+ <c><anno>V2</anno></c> of length one or more exists.</p>
+ <p>Digraph <c><anno>G</anno></c> is traversed in a depth-first manner,
+ and the first found path is returned.</p>
</desc>
</func>
+
<func>
<name name="get_short_cycle" arity="2"/>
<fsummary>Find one short cycle in a digraph.</fsummary>
<desc>
- <p>Tries to find an as short as
- possible <seealso marker="#simple_cycle">simple cycle</seealso> through
- the vertex <c><anno>V</anno></c> of the digraph <c>G</c>. Returns the cycle
- as a list <c>[<anno>V</anno>,&nbsp;...,&nbsp;<anno>V</anno>]</c> of vertices, or
+ <p>Tries to find an as short as possible
+ <seealso marker="#simple_cycle">simple cycle</seealso> through
+ vertex <c><anno>V</anno></c> of digraph <c>G</c>. Returns the cycle
+ as a list <c>[<anno>V</anno>,&nbsp;...,&nbsp;<anno>V</anno>]</c>
+ of vertices, or
<c>false</c> if no simple cycle through <c><anno>V</anno></c> exists.
- Note that a <seealso marker="#loop">loop</seealso> through
- <c><anno>V</anno></c> is returned as the list <c>[<anno>V</anno>,&nbsp;<anno>V</anno>]</c>.
- </p>
- <p><c>get_short_path/3</c> is used for finding a simple cycle
- through <c><anno>V</anno></c>.
- </p>
+ Notice that a <seealso marker="#loop">loop</seealso> through
+ <c><anno>V</anno></c> is returned as list
+ <c>[<anno>V</anno>,&nbsp;<anno>V</anno>]</c>.</p>
+ <p><seealso marker="#get_short_path/3"><c>get_short_path/3</c></seealso>
+ is used for finding a simple cycle through <c><anno>V</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="get_short_path" arity="3"/>
<fsummary>Find one short path in a digraph.</fsummary>
<desc>
- <p>Tries to find an as short as
- possible <seealso marker="#simple_path">simple path</seealso> from
- the vertex <c><anno>V1</anno></c> to the vertex <c><anno>V2</anno></c> of the digraph <c><anno>G</anno></c>.
- Returns the path as a list <c>[<anno>V1</anno>,&nbsp;...,&nbsp;<anno>V2</anno>]</c> of
- vertices, or <c>false</c> if no simple path from <c><anno>V1</anno></c>
- to <c><anno>V2</anno></c> of length one or more exists.
- </p>
- <p>The digraph <c><anno>G</anno></c> is traversed in a breadth-first
- manner, and the first path found is returned.
- </p>
+ <p>Tries to find an as short as possible
+ <seealso marker="#simple_path">simple path</seealso> from vertex
+ <c><anno>V1</anno></c> to vertex <c><anno>V2</anno></c> of digraph
+ <c><anno>G</anno></c>. Returns the path as a list
+ <c>[<anno>V1</anno>,&nbsp;...,&nbsp;<anno>V2</anno>]</c> of
+ vertices, or <c>false</c> if no simple path from
+ <c><anno>V1</anno></c>
+ to <c><anno>V2</anno></c> of length one or more exists.</p>
+ <p>Digraph <c><anno>G</anno></c> is traversed in a breadth-first
+ manner, and the first found path is returned.</p>
</desc>
</func>
+
<func>
<name name="in_degree" arity="2"/>
<fsummary>Return the in-degree of a vertex of a digraph.</fsummary>
<desc>
- <p>Returns the <seealso marker="#in_degree">in-degree</seealso> of the vertex
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Returns the <seealso marker="#in_degree">in-degree</seealso> of
+ vertex <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="in_edges" arity="2"/>
- <fsummary>Return all edges incident on a vertex of a digraph.</fsummary>
+ <fsummary>Return all edges incident on a vertex of a digraph.</fsummary>
<desc>
- <p>Returns a list of all
- edges <seealso marker="#incident">incident</seealso> on
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, in some unspecified order.
- </p>
+ <p>Returns a list of all
+ edges <seealso marker="#incident">incident</seealso> on
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="in_neighbours" arity="2"/>
- <fsummary>Return all in-neighbours of a vertex of a digraph.</fsummary>
+ <fsummary>Return all in-neighbors of a vertex of a digraph.</fsummary>
<desc>
- <p>Returns a list of
- all <seealso marker="#in_neighbour">in-neighbours</seealso> of
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, in some unspecified order.
- </p>
+ <p>Returns a list of
+ all <seealso marker="#in_neighbour">in-neighbors</seealso> of
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="info" arity="1"/>
<fsummary>Return information about a digraph.</fsummary>
<type name="d_cyclicity"/>
<type name="d_protection"/>
<desc>
- <p>Returns a list of <c>{Tag, Value}</c> pairs describing the
- digraph <c><anno>G</anno></c>. The following pairs are returned:
- </p>
+ <p>Returns a list of <c>{Tag, Value}</c> pairs describing
+ digraph <c><anno>G</anno></c>. The following pairs are returned:</p>
<list type="bulleted">
<item>
- <p><c>{cyclicity, <anno>Cyclicity</anno>}</c>, where <c><anno>Cyclicity</anno></c>
+ <p><c>{cyclicity, <anno>Cyclicity</anno>}</c>, where
+ <c><anno>Cyclicity</anno></c>
is <c>cyclic</c> or <c>acyclic</c>, according to the
options given to <c>new</c>.</p>
</item>
<item>
- <p><c>{memory, <anno>NoWords</anno>}</c>, where <c><anno>NoWords</anno></c> is
- the number of words allocated to the <c>ETS</c> tables.</p>
+ <p><c>{memory, <anno>NoWords</anno>}</c>, where
+ <c><anno>NoWords</anno></c> is
+ the number of words allocated to the ETS tables.</p>
</item>
<item>
- <p><c>{protection, <anno>Protection</anno>}</c>, where <c><anno>Protection</anno></c>
+ <p><c>{protection, <anno>Protection</anno>}</c>, where
+ <c><anno>Protection</anno></c>
is <c>protected</c> or <c>private</c>, according
to the options given to <c>new</c>.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="new" arity="0"/>
- <fsummary>Return a protected empty digraph, where cycles are allowed.</fsummary>
+ <fsummary>Return a protected empty digraph, where cycles are allowed.
+ </fsummary>
<desc>
- <p>Equivalent to <c>new([])</c>.
- </p>
+ <p>Equivalent to <c>new([])</c>.</p>
</desc>
</func>
+
<func>
<name name="new" arity="1"/>
<fsummary>Create a new empty digraph.</fsummary>
@@ -415,97 +465,103 @@
<type name="d_cyclicity"/>
<type name="d_protection"/>
<desc>
- <p>Returns
- an <seealso marker="#empty_digraph">empty digraph</seealso> with
- properties according to the options in <c><anno>Type</anno></c>:</p>
+ <p>Returns
+ an <seealso marker="#empty_digraph">empty digraph</seealso> with
+ properties according to the options in <c><anno>Type</anno></c>:</p>
<taglist>
<tag><c>cyclic</c></tag>
- <item>Allow <seealso marker="#cycle">cycles</seealso> in the
- digraph (default).</item>
+ <item><p>Allows <seealso marker="#cycle">cycles</seealso> in the
+ digraph (default).</p></item>
<tag><c>acyclic</c></tag>
- <item>The digraph is to be kept <seealso marker="#acyclic_digraph">acyclic</seealso>.</item>
+ <item><p>The digraph is to be kept
+ <seealso marker="#acyclic_digraph">acyclic</seealso>.</p></item>
<tag><c>protected</c></tag>
- <item>Other processes can read the digraph (default).</item>
+ <item><p>Other processes can read the digraph (default).</p></item>
<tag><c>private</c></tag>
- <item>The digraph can be read and modified by the creating
- process only.</item>
+ <item><p>The digraph can be read and modified by the creating
+ process only.</p></item>
</taglist>
- <p>If an unrecognized type option <c>T</c> is given or <c><anno>Type</anno></c>
- is not a proper list, there will be a <c>badarg</c> exception.
- </p>
+ <p>If an unrecognized type option <c>T</c> is specified or
+ <c><anno>Type</anno></c>
+ is not a proper list, a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="no_edges" arity="1"/>
- <fsummary>Return the number of edges of the a digraph.</fsummary>
+ <fsummary>Return the number of edges of a digraph.</fsummary>
<desc>
- <p>Returns the number of edges of the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Returns the number of edges of digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="no_vertices" arity="1"/>
<fsummary>Return the number of vertices of a digraph.</fsummary>
<desc>
- <p>Returns the number of vertices of the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Returns the number of vertices of digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="out_degree" arity="2"/>
<fsummary>Return the out-degree of a vertex of a digraph.</fsummary>
<desc>
- <p>Returns the <seealso marker="#out_degree">out-degree</seealso> of the vertex
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Returns the <seealso marker="#out_degree">out-degree</seealso> of
+ vertex <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="out_edges" arity="2"/>
- <fsummary>Return all edges emanating from a vertex of a digraph.</fsummary>
+ <fsummary>Return all edges emanating from a vertex of a digraph.
+ </fsummary>
<desc>
- <p>Returns a list of all
- edges <seealso marker="#emanate">emanating</seealso> from
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, in some unspecified order.
- </p>
+ <p>Returns a list of all
+ edges <seealso marker="#emanate">emanating</seealso> from
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="out_neighbours" arity="2"/>
- <fsummary>Return all out-neighbours of a vertex of a digraph.</fsummary>
+ <fsummary>Return all out-neighbors of a vertex of a digraph.</fsummary>
<desc>
<p>Returns a list of
- all <seealso marker="#out_neighbour">out-neighbours</seealso> of
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, in some unspecified order.
- </p>
+ all <seealso marker="#out_neighbour">out-neighbors</seealso> of
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="vertex" arity="2"/>
<fsummary>Return the label of a vertex of a digraph.</fsummary>
<desc>
- <p>Returns <c>{<anno>V</anno>,&nbsp;<anno>Label</anno>}</c> where <c><anno>Label</anno></c> is the
+ <p>Returns <c>{<anno>V</anno>,&nbsp;<anno>Label</anno>}</c>,
+ where <c><anno>Label</anno></c> is the
<seealso marker="#label">label</seealso> of the vertex
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, or <c>false</c> if there
- is no vertex <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>.
- </p>
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ or <c>false</c> if no vertex <c><anno>V</anno></c>
+ of digraph <c><anno>G</anno></c> exists.</p>
</desc>
</func>
+
<func>
<name name="vertices" arity="1"/>
<fsummary>Return all vertices of a digraph.</fsummary>
<desc>
- <p>Returns a list of all vertices of the digraph <c><anno>G</anno></c>, in
- some unspecified order.
- </p>
+ <p>Returns a list of all vertices of digraph <c><anno>G</anno></c>, in
+ some unspecified order.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="digraph_utils">digraph_utils(3)</seealso>,
- <seealso marker="ets">ets(3)</seealso></p>
+ <p><seealso marker="digraph_utils"><c>digraph_utils(3)</c></seealso>,
+ <seealso marker="ets"><c>ets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/digraph_utils.xml b/lib/stdlib/doc/src/digraph_utils.xml
index 639069543c..cb316e5b93 100644
--- a/lib/stdlib/doc/src/digraph_utils.xml
+++ b/lib/stdlib/doc/src/digraph_utils.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,345 +24,386 @@
<title>digraph_utils</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2001-08-27</date>
<rev>PA1</rev>
- <file>digraph_utils.sgml</file>
+ <file>digraph_utils.xml</file>
</header>
<module>digraph_utils</module>
- <modulesummary>Algorithms for Directed Graphs</modulesummary>
+ <modulesummary>Algorithms for directed graphs.</modulesummary>
<description>
- <p>The <c>digraph_utils</c> module implements some algorithms
- based on depth-first traversal of directed graphs. See the
- <c>digraph</c> module for basic functions on directed graphs.
- </p>
- <p>A <marker id="digraph"></marker><em>directed graph</em> (or
- just "digraph") is a pair (V,&nbsp;E) of a finite set V of
- <marker id="vertex"></marker><em>vertices</em> and a finite set E
- of <marker id="edge"></marker><em>directed edges</em> (or just
- "edges"). The set of edges E is a subset of V&nbsp;&times;&nbsp;V
- (the Cartesian product of V with itself).
- </p>
- <p>Digraphs can be annotated with additional information. Such
- information may be attached to the vertices and to the edges of
- the digraph. A digraph which has been annotated is called a
- <em>labeled digraph</em>, and the information attached to a
- vertex or an edge is called a <marker id="label"></marker>
- <em>label</em>.</p>
- <p>An edge e&nbsp;=&nbsp;(v,&nbsp;w) is said
- to <marker id="emanate"></marker><em>emanate</em> from vertex v and
- to be <marker id="incident"></marker><em>incident</em> on vertex w.
- If there is an edge emanating from v and incident on w, then w is
- said to be
- an <marker id="out_neighbour"></marker><em>out-neighbour</em> of v,
- and v is said to be
- an <marker id="in_neighbour"></marker><em>in-neighbour</em> of w.
- A <marker id="path"></marker><em>path</em> P from v[1] to v[k] in a
- digraph (V,&nbsp;E) is a non-empty sequence
- v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] of vertices in V such that
- there is an edge (v[i],v[i+1]) in E for
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k.
- The <marker id="length"></marker><em>length</em> of the path P is k-1.
- P is a <marker id="cycle"></marker><em>cycle</em> if the length of P
- is not zero and v[1] = v[k].
- A <marker id="loop"></marker><em>loop</em> is a cycle of length one.
- An <marker id="acyclic_digraph"></marker><em>acyclic digraph</em> is
- a digraph that has no cycles.
- </p>
+ <p>This module provides algorithms based on depth-first traversal of
+ directed graphs. For basic functions on directed graphs, see the
+ <seealso marker="digraph"><c>digraph(3)</c></seealso> module.</p>
- <p>A <marker id="depth_first_traversal"></marker> <em>depth-first
- traversal</em> of a directed digraph can be viewed as a process
- that visits all vertices of the digraph. Initially, all vertices
- are marked as unvisited. The traversal starts with an
- arbitrarily chosen vertex, which is marked as visited, and
- follows an edge to an unmarked vertex, marking that vertex. The
- search then proceeds from that vertex in the same fashion, until
- there is no edge leading to an unvisited vertex. At that point
- the process backtracks, and the traversal continues as long as
- there are unexamined edges. If there remain unvisited vertices
- when all edges from the first vertex have been examined, some
- hitherto unvisited vertex is chosen, and the process is
- repeated.
- </p>
- <p>A <marker id="partial_ordering"></marker><em>partial ordering</em> of
- a set S is a transitive, antisymmetric and reflexive relation
- between the objects of S. The problem
- of <marker id="topsort"></marker><em>topological sorting</em> is to
- find a total
- ordering of S that is a superset of the partial ordering. A
- digraph G&nbsp;=&nbsp;(V,&nbsp;E) is equivalent to a relation E
- on V (we neglect the fact that the version of directed graphs
- implemented in the <c>digraph</c> module allows multiple edges
- between vertices). If the digraph has no cycles of length two or
- more, then the reflexive and transitive closure of E is a
- partial ordering.
- </p>
- <p>A <marker id="subgraph"></marker><em>subgraph</em> G' of G is a
- digraph whose vertices and edges form subsets of the vertices
- and edges of G. G' is <em>maximal</em> with respect to a
- property P if all other subgraphs that include the vertices of
- G' do not have the property P. A <marker
- id="strong_components"></marker> <em>strongly connected
- component</em> is a maximal subgraph such that there is a path
- between each pair of vertices. A <marker
- id="components"></marker><em>connected component</em> is a
- maximal subgraph such that there is a path between each pair of
- vertices, considering all edges undirected. An <marker
- id="arborescence"></marker><em>arborescence</em> is an acyclic
- digraph with a vertex V, the <marker
- id="root"></marker><em>root</em>, such that there is a unique
- path from V to every other vertex of G. A <marker
- id="tree"></marker><em>tree</em> is an acyclic non-empty digraph
- such that there is a unique path between every pair of vertices,
- considering all edges undirected.</p>
+ <list type="bulleted">
+ <item>
+ <p>A <marker id="digraph"></marker><em>directed graph</em> (or just
+ "digraph") is a pair (V,&nbsp;E) of a finite set V of
+ <marker id="vertex"></marker><em>vertices</em> and a finite set E of
+ <marker id="edge"></marker><em>directed edges</em> (or just "edges").
+ The set of edges E is a subset of V&nbsp;&times;&nbsp;V (the
+ Cartesian product of V with itself).</p>
+ </item>
+ <item>
+ <p>Digraphs can be annotated with more information. Such information
+ can be attached to the vertices and to the edges of the digraph. An
+ annotated digraph is called a <em>labeled digraph</em>, and the
+ information attached to a vertex or an edge is called a
+ <marker id="label"></marker><em>label</em>.</p>
+ </item>
+ <item>
+ <p>An edge e&nbsp;=&nbsp;(v,&nbsp;w) is said to
+ <marker id="emanate"></marker><em>emanate</em> from vertex v and to
+ be <marker id="incident"></marker><em>incident</em> on vertex w.</p>
+ </item>
+ <item>
+ <p>If an edge is emanating from v and incident on w, then w is
+ said to be an <marker id="out_neighbour"></marker>
+ <em>out-neighbor</em> of v, and v is said to be an
+ <marker id="in_neighbour"></marker><em>in-neighbor</em> of w.</p>
+ </item>
+ <item>
+ <p>A <marker id="path"></marker><em>path</em> P from v[1] to v[k]
+ in a digraph (V,&nbsp;E) is a non-empty sequence
+ v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] of vertices in V such that
+ there is an edge (v[i],v[i+1]) in E for
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k.</p>
+ </item>
+ <item>
+ <p>The <marker id="length"></marker><em>length</em> of path P is
+ k-1.</p>
+ </item>
+ <item>
+ <p>Path P is a <marker id="cycle"></marker><em>cycle</em> if the
+ length of P is not zero and v[1] = v[k].</p>
+ </item>
+ <item>
+ <p>A <marker id="loop"></marker><em>loop</em> is a cycle of length
+ one.</p>
+ </item>
+ <item>
+ <p>An <marker id="acyclic_digraph"></marker><em>acyclic digraph</em>
+ is a digraph without cycles.</p>
+ </item>
+ <item>
+ <p>A <marker id="depth_first_traversal"></marker><em>depth-first
+ traversal</em> of a directed digraph can be viewed as a process
+ that visits all vertices of the digraph. Initially, all vertices
+ are marked as unvisited. The traversal starts with an
+ arbitrarily chosen vertex, which is marked as visited, and
+ follows an edge to an unmarked vertex, marking that vertex. The
+ search then proceeds from that vertex in the same fashion, until
+ there is no edge leading to an unvisited vertex. At that point
+ the process backtracks, and the traversal continues as long as
+ there are unexamined edges. If unvisited vertices remain
+ when all edges from the first vertex have been examined, some
+ so far unvisited vertex is chosen, and the process is repeated.</p>
+ </item>
+ <item>
+ <p>A <marker id="partial_ordering"></marker><em>partial ordering</em>
+ of a set S is a transitive, antisymmetric, and reflexive relation
+ between the objects of S.</p>
+ </item>
+ <item>
+ <p>The problem of
+ <marker id="topsort"></marker><em>topological sorting</em> is to find
+ a total ordering of S that is a superset of the partial ordering. A
+ digraph G&nbsp;=&nbsp;(V,&nbsp;E) is equivalent to a relation E
+ on V (we neglect that the version of directed graphs
+ provided by the <c>digraph</c> module allows multiple edges
+ between vertices). If the digraph has no cycles of length two or
+ more, the reflexive and transitive closure of E is a
+ partial ordering.</p>
+ </item>
+ <item>
+ <p>A <marker id="subgraph"></marker><em>subgraph</em> G' of G is a
+ digraph whose vertices and edges form subsets of the vertices
+ and edges of G.</p>
+ </item>
+ <item>
+ <p>G' is <em>maximal</em> with respect to a property P if all other
+ subgraphs that include the vertices of G' do not have property P.</p>
+ </item>
+ <item>
+ <p>A <marker id="strong_components"></marker><em>strongly connected
+ component</em> is a maximal subgraph such that there is a path
+ between each pair of vertices.</p>
+ </item>
+ <item>
+ <p>A <marker id="components"></marker><em>connected component</em>
+ is a maximal subgraph such that there is a path between each pair of
+ vertices, considering all edges undirected.</p>
+ </item>
+ <item>
+ <p>An <marker id="arborescence"></marker><em>arborescence</em> is an
+ acyclic digraph with a vertex V, the
+ <marker id="root"></marker><em>root</em>, such that there is a unique
+ path from V to every other vertex of G.</p>
+ </item>
+ <item>
+ <p>A <marker id="tree"></marker><em>tree</em> is an acyclic non-empty
+ digraph such that there is a unique path between every pair of
+ vertices, considering all edges undirected.</p>
+ </item>
+ </list>
</description>
- <datatypes>
- <datatype>
- <name>digraph()</name>
- <desc><p><marker id="type-digraph"/>
- A digraph as returned by <c>digraph:new/0,1</c>.</p></desc>
- </datatype>
- </datatypes>
<funcs>
<func>
<name name="arborescence_root" arity="1"/>
<fsummary>Check if a digraph is an arborescence.</fsummary>
<desc>
- <p>Returns <c>{yes, <anno>Root</anno>}</c> if <c><anno>Root</anno></c> is
- the <seealso marker="#root">root</seealso> of the arborescence
- <c><anno>Digraph</anno></c>, <c>no</c> otherwise.
- </p>
+ <p>Returns <c>{yes, <anno>Root</anno>}</c> if <c><anno>Root</anno></c>
+ is the <seealso marker="#root">root</seealso> of the arborescence
+ <c><anno>Digraph</anno></c>, otherwise <c>no</c>.</p>
</desc>
</func>
+
<func>
<name name="components" arity="1"/>
<fsummary>Return the components of a digraph.</fsummary>
<desc>
- <p>Returns a list
- of <seealso marker="#components">connected components</seealso>.
- Each component is represented by its
+ <p>Returns a list
+ of <seealso marker="#components">connected components.</seealso>.
+ Each component is represented by its
vertices. The order of the vertices and the order of the
- components are arbitrary. Each vertex of the digraph
- <c><anno>Digraph</anno></c> occurs in exactly one component.
- </p>
+ components are arbitrary. Each vertex of digraph
+ <c><anno>Digraph</anno></c> occurs in exactly one component.</p>
</desc>
</func>
+
<func>
<name name="condensation" arity="1"/>
<fsummary>Return a condensed graph of a digraph.</fsummary>
<desc>
- <p>Creates a digraph where the vertices are
- the <seealso marker="#strong_components">strongly connected
- components</seealso> of <c><anno>Digraph</anno></c> as returned by
- <c>strong_components/1</c>. If X and Y are two different strongly
- connected components, and there exist vertices x and y in X
- and Y respectively such that there is an
- edge <seealso marker="#emanate">emanating</seealso> from x
- and <seealso marker="#incident">incident</seealso> on y, then
- an edge emanating from X and incident on Y is created.
- </p>
+ <p>Creates a digraph where the vertices are
+ the <seealso marker="#strong_components">strongly connected
+ components</seealso> of <c><anno>Digraph</anno></c> as returned by
+ <seealso marker="#strong_components/1">
+ <c>strong_components/1</c></seealso>.
+ If X and Y are two different strongly
+ connected components, and vertices x and y exist in X
+ and Y, respectively, such that there is an
+ edge <seealso marker="#emanate">emanating</seealso> from x
+ and <seealso marker="#incident">incident</seealso> on y, then
+ an edge emanating from X and incident on Y is created.</p>
<p>The created digraph has the same type as <c><anno>Digraph</anno></c>.
- All vertices and edges have the
- default <seealso marker="#label">label</seealso> <c>[]</c>.
- </p>
- <p>Each and every <seealso marker="#cycle">cycle</seealso> is
- included in some strongly connected component, which implies
- that there always exists
- a <seealso marker="#topsort">topological ordering</seealso> of the
- created digraph.</p>
+ All vertices and edges have the
+ default <seealso marker="#label">label</seealso> <c>[]</c>.</p>
+ <p>Each <seealso marker="#cycle">cycle</seealso> is
+ included in some strongly connected component, which implies that
+ a <seealso marker="#topsort">topological ordering</seealso> of the
+ created digraph always exists.</p>
</desc>
</func>
+
<func>
<name name="cyclic_strong_components" arity="1"/>
<fsummary>Return the cyclic strong components of a digraph.</fsummary>
<desc>
- <p>Returns a list of <seealso marker="#strong_components">strongly
- connected components</seealso>.
- Each strongly component is represented
+ <p>Returns a list of <seealso marker="#strong_components">strongly
+ connected components</seealso>. Each strongly component is represented
by its vertices. The order of the vertices and the order of
the components are arbitrary. Only vertices that are
included in some <seealso marker="#cycle">cycle</seealso> in
- <c><anno>Digraph</anno></c> are returned, otherwise the returned list is
- equal to that returned by <c>strong_components/1</c>.
- </p>
+ <c><anno>Digraph</anno></c> are returned, otherwise the returned
+ list is equal to that returned by
+ <seealso marker="#strong_components/1">
+ <c>strong_components/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_acyclic" arity="1"/>
<fsummary>Check if a digraph is acyclic.</fsummary>
<desc>
- <p>Returns <c>true</c> if and only if the digraph
- <c><anno>Digraph</anno></c> is <seealso marker="#acyclic_digraph">acyclic</seealso>.</p>
+ <p>Returns <c>true</c> if and only if digraph
+ <c><anno>Digraph</anno></c> is
+ <seealso marker="#acyclic_digraph">acyclic</seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_arborescence" arity="1"/>
<fsummary>Check if a digraph is an arborescence.</fsummary>
<desc>
- <p>Returns <c>true</c> if and only if the digraph
+ <p>Returns <c>true</c> if and only if digraph
<c><anno>Digraph</anno></c> is
an <seealso marker="#arborescence">arborescence</seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_tree" arity="1"/>
<fsummary>Check if a digraph is a tree.</fsummary>
<desc>
- <p>Returns <c>true</c> if and only if the digraph
+ <p>Returns <c>true</c> if and only if digraph
<c><anno>Digraph</anno></c> is
- a <seealso marker="#tree">tree</seealso>.</p>
+ a <seealso marker="#tree">tree</seealso>.</p>
</desc>
</func>
+
<func>
<name name="loop_vertices" arity="1"/>
- <fsummary>Return the vertices of a digraph included in some loop.</fsummary>
+ <fsummary>Return the vertices of a digraph included in some loop.
+ </fsummary>
<desc>
- <p>Returns a list of all vertices of <c><anno>Digraph</anno></c> that are
- included in some <seealso marker="#loop">loop</seealso>.</p>
+ <p>Returns a list of all vertices of <c><anno>Digraph</anno></c> that
+ are included in some <seealso marker="#loop">loop</seealso>.</p>
</desc>
</func>
+
<func>
<name name="postorder" arity="1"/>
- <fsummary>Return the vertices of a digraph in post-order.</fsummary>
+ <fsummary>Return the vertices of a digraph in postorder.</fsummary>
<desc>
- <p>Returns all vertices of the digraph <c><anno>Digraph</anno></c>. The
- order is given by
- a <seealso marker="#depth_first_traversal">depth-first
- traversal</seealso> of the digraph, collecting visited
+ <p>Returns all vertices of digraph <c><anno>Digraph</anno></c>.
+ The order is given by
+ a <seealso marker="#depth_first_traversal">depth-first
+ traversal</seealso> of the digraph, collecting visited
vertices in postorder. More precisely, the vertices visited
while searching from an arbitrarily chosen vertex are
collected in postorder, and all those collected vertices are
- placed before the subsequently visited vertices.
- </p>
+ placed before the subsequently visited vertices.</p>
</desc>
</func>
+
<func>
<name name="preorder" arity="1"/>
- <fsummary>Return the vertices of a digraph in pre-order.</fsummary>
+ <fsummary>Return the vertices of a digraph in preorder.</fsummary>
<desc>
- <p>Returns all vertices of the digraph <c><anno>Digraph</anno></c>. The
- order is given by
- a <seealso marker="#depth_first_traversal">depth-first
- traversal</seealso> of the digraph, collecting visited
- vertices in pre-order.</p>
+ <p>Returns all vertices of digraph <c><anno>Digraph</anno></c>.
+ The order is given by
+ a <seealso marker="#depth_first_traversal">depth-first
+ traversal</seealso> of the digraph, collecting visited
+ vertices in preorder.</p>
</desc>
</func>
+
<func>
<name name="reachable" arity="2"/>
- <fsummary>Return the vertices reachable from some vertices of a digraph.</fsummary>
+ <fsummary>Return the vertices reachable from some vertices of a digraph.
+ </fsummary>
<desc>
<p>Returns an unsorted list of digraph vertices such that for
- each vertex in the list, there is
- a <seealso marker="#path">path</seealso> in <c><anno>Digraph</anno></c> from some
+ each vertex in the list, there is a
+ <seealso marker="#path">path</seealso> in <c><anno>Digraph</anno></c>
+ from some
vertex of <c><anno>Vertices</anno></c> to the vertex. In particular,
- since paths may have length zero, the vertices of
- <c><anno>Vertices</anno></c> are included in the returned list.
- </p>
+ as paths can have length zero, the vertices of
+ <c><anno>Vertices</anno></c> are included in the returned list.</p>
</desc>
</func>
+
<func>
<name name="reachable_neighbours" arity="2"/>
- <fsummary>Return the neighbours reachable from some vertices of a digraph.</fsummary>
+ <fsummary>Return the neighbors reachable from some vertices of a
+ digraph.</fsummary>
<desc>
<p>Returns an unsorted list of digraph vertices such that for
- each vertex in the list, there is
- a <seealso marker="#path">path</seealso> in <c><anno>Digraph</anno></c> of length
+ each vertex in the list, there is a
+ <seealso marker="#path">path</seealso> in <c><anno>Digraph</anno></c>
+ of length
one or more from some vertex of <c><anno>Vertices</anno></c> to the
- vertex. As a consequence, only those vertices
- of <c><anno>Vertices</anno></c> that are included in
- some <seealso marker="#cycle">cycle</seealso> are returned.
- </p>
+ vertex. As a consequence, only those vertices
+ of <c><anno>Vertices</anno></c> that are included in
+ some <seealso marker="#cycle">cycle</seealso> are returned.</p>
</desc>
</func>
+
<func>
<name name="reaching" arity="2"/>
- <fsummary>Return the vertices that reach some vertices of a digraph.</fsummary>
+ <fsummary>Return the vertices that reach some vertices of a digraph.
+ </fsummary>
<desc>
<p>Returns an unsorted list of digraph vertices such that for
- each vertex in the list, there is
- a <seealso marker="#path">path</seealso> from the vertex to some
- vertex of <c><anno>Vertices</anno></c>. In particular, since paths may have
- length zero, the vertices of <c><anno>Vertices</anno></c> are included in
- the returned list.
- </p>
+ each vertex in the list, there is
+ a <seealso marker="#path">path</seealso> from the vertex to some
+ vertex of <c><anno>Vertices</anno></c>. In particular, as paths
+ can have length zero, the vertices of <c><anno>Vertices</anno></c>
+ are included in the returned list.</p>
</desc>
</func>
+
<func>
<name name="reaching_neighbours" arity="2"/>
- <fsummary>Return the neighbours that reach some vertices of a digraph.</fsummary>
+ <fsummary>Return the neighbors that reach some vertices of a digraph.
+ </fsummary>
<desc>
<p>Returns an unsorted list of digraph vertices such that for
- each vertex in the list, there is
- a <seealso marker="#path">path</seealso> of length one or more
- from the vertex to some vertex of <c><anno>Vertices</anno></c>. As a consequence,
- only those vertices of <c><anno>Vertices</anno></c> that are included in
- some <seealso marker="#cycle">cycle</seealso> are returned.
- </p>
+ each vertex in the list, there is
+ a <seealso marker="#path">path</seealso> of length one or more
+ from the vertex to some vertex of <c><anno>Vertices</anno></c>.
+ Therefore only those vertices of <c><anno>Vertices</anno></c>
+ that are included
+ in some <seealso marker="#cycle">cycle</seealso> are returned.</p>
</desc>
</func>
+
<func>
<name name="strong_components" arity="1"/>
<fsummary>Return the strong components of a digraph.</fsummary>
<desc>
- <p>Returns a list of <seealso marker="#strong_components">strongly
- connected components</seealso>.
- Each strongly component is represented
+ <p>Returns a list of <seealso marker="#strong_components">strongly
+ connected components</seealso>.
+ Each strongly component is represented
by its vertices. The order of the vertices and the order of
- the components are arbitrary. Each vertex of the digraph
+ the components are arbitrary. Each vertex of digraph
<c><anno>Digraph</anno></c> occurs in exactly one strong component.
- </p>
+ </p>
</desc>
</func>
+
<func>
<name name="subgraph" arity="2"/>
<name name="subgraph" arity="3"/>
<fsummary>Return a subgraph of a digraph.</fsummary>
<desc>
- <p>Creates a maximal <seealso marker="#subgraph">subgraph</seealso> of <c>Digraph</c> having
+ <p>Creates a maximal <seealso marker="#subgraph">subgraph</seealso>
+ of <c>Digraph</c> having
as vertices those vertices of <c><anno>Digraph</anno></c> that are
- mentioned in <c><anno>Vertices</anno></c>.
- </p>
- <p>If the value of the option <c>type</c> is <c>inherit</c>,
- which is the default, then the type of <c><anno>Digraph</anno></c> is used
+ mentioned in <c><anno>Vertices</anno></c>.</p>
+ <p>If the value of option <c>type</c> is <c>inherit</c>, which is
+ the default, the type of <c><anno>Digraph</anno></c> is used
for the subgraph as well. Otherwise the option value of <c>type</c>
- is used as argument to <c>digraph:new/1</c>.
- </p>
- <p>If the value of the option <c>keep_labels</c> is <c>true</c>,
- which is the default, then
- the <seealso marker="#label">labels</seealso> of vertices and edges
- of <c><anno>Digraph</anno></c> are used for the subgraph as well. If the value
- is <c>false</c>, then the default label, <c>[]</c>, is used
- for the subgraph's vertices and edges.
- </p>
- <p><c>subgraph(<anno>Digraph</anno>, <anno>Vertices</anno>)</c> is equivalent to
- <c>subgraph(<anno>Digraph</anno>, <anno>Vertices</anno>, [])</c>.
- </p>
- <p>There will be a <c>badarg</c> exception if any of the arguments
- are invalid.
- </p>
+ is used as argument to
+ <seealso marker="digraph:new/1"><c>digraph:new/1</c></seealso>.</p>
+ <p>If the value of option <c>keep_labels</c> is <c>true</c>,
+ which is the default,
+ the <seealso marker="#label">labels</seealso> of vertices and edges
+ of <c><anno>Digraph</anno></c> are used for the subgraph as well. If
+ the value is <c>false</c>, default label <c>[]</c> is used
+ for the vertices and edges of the subgroup.</p>
+ <p><c>subgraph(<anno>Digraph</anno>, <anno>Vertices</anno>)</c> is
+ equivalent to
+ <c>subgraph(<anno>Digraph</anno>, <anno>Vertices</anno>, [])</c>.</p>
+ <p>If any of the arguments are invalid, a <c>badarg</c> exception is
+ raised.</p>
</desc>
</func>
+
<func>
<name name="topsort" arity="1"/>
- <fsummary>Return a topological sorting of the vertices of a digraph.</fsummary>
+ <fsummary>Return a topological sorting of the vertices of a digraph.
+ </fsummary>
<desc>
- <p>Returns a <seealso marker="#topsort">topological
- ordering</seealso> of the vertices of the digraph
- <c><anno>Digraph</anno></c> if such an ordering exists, <c>false</c>
- otherwise. For each vertex in the returned list, there are
- no <seealso marker="#out_neighbour">out-neighbours</seealso>
- that occur earlier in the list.</p>
+ <p>Returns a <seealso marker="#topsort">topological
+ ordering</seealso> of the vertices of digraph
+ <c><anno>Digraph</anno></c> if such an ordering exists, otherwise
+ <c>false</c>. For each vertex in the returned list,
+ no <seealso marker="#out_neighbour">out-neighbors</seealso>
+ occur earlier in the list.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="digraph">digraph(3)</seealso></p>
+ <p><seealso marker="digraph"><c>digraph(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/epp.xml b/lib/stdlib/doc/src/epp.xml
index 8c901f57ec..1dc0161398 100644
--- a/lib/stdlib/doc/src/epp.xml
+++ b/lib/stdlib/doc/src/epp.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,213 +28,241 @@
<docno>1</docno>
<approved>Kenneth Lundin</approved>
<checked></checked>
- <date>97-01-31</date>
+ <date>1997-01-31</date>
<rev>B</rev>
- <file>epp.sgml</file>
+ <file>epp.xml</file>
</header>
<module>epp</module>
- <modulesummary>An Erlang Code Preprocessor</modulesummary>
+ <modulesummary>An Erlang code preprocessor.</modulesummary>
<description>
- <p>The Erlang code preprocessor includes functions which are used
- by <c>compile</c> to preprocess macros and include files before
- the actual parsing takes place.</p>
+ <p>The Erlang code preprocessor includes functions that are used by the
+ <seealso marker="compiler:compile"><c>compile</c></seealso>
+ module to preprocess macros and include files before
+ the parsing takes place.</p>
+
<p>The Erlang source file <marker
id="encoding"/><em>encoding</em> is selected by a
comment in one of the first two lines of the source file. The
- first string that matches the regular expression
+ first string matching the regular expression
<c>coding\s*[:=]\s*([-a-zA-Z0-9])+</c> selects the encoding. If
- the matching string is not a valid encoding it is ignored. The
- valid encodings are <c>Latin-1</c> and <c>UTF-8</c> where the
- case of the characters can be chosen freely. Examples:</p>
- <pre>
+ the matching string is not a valid encoding, it is ignored. The
+ valid encodings are <c>Latin-1</c> and <c>UTF-8</c>, where the
+ case of the characters can be chosen freely.</p>
+
+ <p><em>Examples:</em></p>
+
+ <pre>
%% coding: utf-8</pre>
- <pre>
+
+ <pre>
%% For this file we have chosen encoding = Latin-1</pre>
- <pre>
+
+ <pre>
%% -*- coding: latin-1 -*-</pre>
</description>
+
<datatypes>
<datatype>
<name name="macros"></name>
</datatype>
<datatype>
<name name="epp_handle"></name>
- <desc><p>Handle to the epp server.</p></desc>
+ <desc><p>Handle to the <c>epp</c> server.</p></desc>
</datatype>
<datatype>
<name name="source_encoding"></name>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="open" arity="1"/>
- <fsummary>Open a file for preprocessing</fsummary>
+ <name name="close" arity="1"/>
+ <fsummary>Close the preprocessing of the file associated with <c>Epp</c>.
+ </fsummary>
<desc>
- <p>Opens a file for preprocessing.</p>
- <p>If <c>extra</c> is given in
- <c><anno>Options</anno></c>, the return value will be
- <c>{ok, <anno>Epp</anno>, <anno>Extra</anno>}</c> instead
- of <c>{ok, <anno>Epp</anno>}</c>.</p>
+ <p>Closes the preprocessing of a file.</p>
</desc>
</func>
+
<func>
- <name name="open" arity="2"/>
- <fsummary>Open a file for preprocessing</fsummary>
+ <name name="default_encoding" arity="0"/>
+ <fsummary>Return the default encoding of Erlang source files.</fsummary>
<desc>
- <p>Equivalent to <c>epp:open([{name, FileName}, {includes, IncludePath}])</c>.</p>
+ <p>Returns the default encoding of Erlang source files.</p>
</desc>
</func>
+
<func>
- <name name="open" arity="3"/>
- <fsummary>Open a file for preprocessing</fsummary>
+ <name name="encoding_to_string" arity="1"/>
+ <fsummary>Return a string representation of an encoding.</fsummary>
<desc>
- <p>Equivalent to <c>epp:open([{name, FileName}, {includes, IncludePath},
- {macros, PredefMacros}])</c>.</p>
+ <p>Returns a string representation of an encoding. The string
+ is recognized by
+ <seealso marker="#read_encoding/1"><c>read_encoding/1,2</c></seealso>,
+ <seealso marker="#read_encoding_from_binary/1">
+ <c>read_encoding_from_binary/1,2</c></seealso>, and
+ <seealso marker="#set_encoding/1"><c>set_encoding/1,2</c></seealso>
+ as a valid encoding.</p>
</desc>
</func>
+
<func>
- <name name="close" arity="1"/>
- <fsummary>Close the preprocessing of the file associated with <c>Epp</c></fsummary>
+ <name name="format_error" arity="1"/>
+ <fsummary>Format an error descriptor.</fsummary>
<desc>
- <p>Closes the preprocessing of a file.</p>
+ <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns
+ a string that
+ describes the error or warning. This function is usually
+ called implicitly when processing an <c>ErrorInfo</c>
+ structure (see section
+ <seealso marker="#errorinfo">Error Information</seealso>).</p>
</desc>
</func>
+
<func>
- <name name="parse_erl_form" arity="1"/>
- <fsummary>Return the next Erlang form from the opened Erlang source file</fsummary>
+ <name name="open" arity="1"/>
+ <fsummary>Open a file for preprocessing.</fsummary>
<desc>
- <p>Returns the next Erlang form from the opened Erlang source file.
- The tuple <c>{eof, <anno>Line</anno>}</c> is returned at end-of-file. The first
- form corresponds to an implicit attribute <c>-file(File,1).</c>, where
- <c>File</c> is the name of the file.</p>
+ <p>Opens a file for preprocessing.</p>
+ <p>If <c>extra</c> is specified in
+ <c><anno>Options</anno></c>, the return value is
+ <c>{ok, <anno>Epp</anno>, <anno>Extra</anno>}</c> instead
+ of <c>{ok, <anno>Epp</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="parse_file" arity="2"/>
- <fsummary>Preprocess and parse an Erlang source file</fsummary>
+ <name name="open" arity="2"/>
+ <fsummary>Open a file for preprocessing.</fsummary>
<desc>
- <p>Preprocesses and parses an Erlang source file.
- Note that the tuple <c>{eof, <anno>Line</anno>}</c> returned
- at end-of-file is included as a "form".</p>
- <p>If <c>extra</c> is given in
- <c><anno>Options</anno></c>, the return value will be
- <c>{ok, [<anno>Form</anno>], <anno>Extra</anno>}</c> instead
- of <c>{ok, [<anno>Form</anno>]}</c>.</p>
+ <p>Equivalent to
+ <c>epp:open([{name, FileName}, {includes, IncludePath}])</c>.</p>
</desc>
</func>
+
<func>
- <name name="parse_file" arity="3"/>
- <fsummary>Preprocess and parse an Erlang source file</fsummary>
+ <name name="open" arity="3"/>
+ <fsummary>Open a file for preprocessing.</fsummary>
<desc>
- <p>Equivalent to <c>epp:parse_file(FileName, [{includes, IncludePath},
- {macros, PredefMacros}])</c>.</p>
+ <p>Equivalent to <c>epp:open([{name, FileName}, {includes, IncludePath},
+ {macros, PredefMacros}])</c>.</p>
</desc>
</func>
+
<func>
- <name name="default_encoding" arity="0"/>
- <fsummary>Return the default encoding of Erlang source files</fsummary>
+ <name name="parse_erl_form" arity="1"/>
+ <fsummary>Return the next Erlang form from the opened Erlang source file.
+ </fsummary>
+ <type name="warning_info"/>
<desc>
- <p>Returns the default encoding of Erlang source files.</p>
+ <p>Returns the next Erlang form from the opened Erlang source file.
+ Tuple <c>{eof, <anno>Line</anno>}</c> is returned at the end of the
+ file. The first form corresponds to an implicit attribute
+ <c>-file(File,1).</c>, where <c>File</c> is the file name.</p>
</desc>
</func>
+
<func>
- <name name="encoding_to_string" arity="1"/>
- <fsummary>Return a string representation of an encoding</fsummary>
+ <name name="parse_file" arity="2"/>
+ <fsummary>Preprocess and parse an Erlang source file.</fsummary>
<desc>
- <p>Returns a string representation of an encoding. The string
- is recognized by <c>read_encoding/1,2</c>,
- <c>read_encoding_from_binary/1,2</c>, and
- <c>set_encoding/1,2</c> as a valid encoding.</p>
+ <p>Preprocesses and parses an Erlang source file.
+ Notice that tuple <c>{eof, <anno>Line</anno>}</c> returned at the
+ end of the file is included as a "form".</p>
+ <p>If <c>extra</c> is specified in
+ <c><anno>Options</anno></c>, the return value is
+ <c>{ok, [<anno>Form</anno>], <anno>Extra</anno>}</c> instead
+ of <c>{ok, [<anno>Form</anno>]}</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="parse_file" arity="3"/>
+ <fsummary>Preprocess and parse an Erlang source file.</fsummary>
+ <desc>
+ <p>Equivalent to <c>epp:parse_file(FileName, [{includes, IncludePath},
+ {macros, PredefMacros}])</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="read_encoding" arity="1"/>
<name name="read_encoding" arity="2"/>
- <fsummary>Read the encoding from a file</fsummary>
+ <fsummary>Read the encoding from a file.</fsummary>
<desc>
<p>Read the <seealso marker="#encoding">encoding</seealso> from
a file. Returns the read encoding, or <c>none</c> if no
- valid encoding was found.</p>
- <p>The option <c>in_comment_only</c> is <c>true</c> by
+ valid encoding is found.</p>
+ <p>Option <c>in_comment_only</c> is <c>true</c> by
default, which is correct for Erlang source files. If set to
- <c>false</c> the encoding string does not necessarily have to
+ <c>false</c>, the encoding string does not necessarily have to
occur in a comment.</p>
</desc>
</func>
+
<func>
<name name="read_encoding_from_binary" arity="1"/>
<name name="read_encoding_from_binary" arity="2"/>
- <fsummary>Read the encoding from a binary</fsummary>
+ <fsummary>Read the encoding from a binary.</fsummary>
<desc>
<p>Read the <seealso marker="#encoding">encoding</seealso> from
a binary. Returns the read encoding, or <c>none</c> if no
- valid encoding was found.</p>
- <p>The option <c>in_comment_only</c> is <c>true</c> by
+ valid encoding is found.</p>
+ <p>Option <c>in_comment_only</c> is <c>true</c> by
default, which is correct for Erlang source files. If set to
- <c>false</c> the encoding string does not necessarily have to
+ <c>false</c>, the encoding string does not necessarily have to
occur in a comment.</p>
</desc>
</func>
+
<func>
<name name="set_encoding" arity="1"/>
- <fsummary>Read and set the encoding of an IO device</fsummary>
+ <fsummary>Read and set the encoding of an I/O device.</fsummary>
<desc>
<p>Reads the <seealso marker="#encoding">encoding</seealso> from
- an IO device and sets the encoding of the device
- accordingly. The position of the IO device referenced by
+ an I/O device and sets the encoding of the device
+ accordingly. The position of the I/O device referenced by
<c><anno>File</anno></c> is not affected. If no valid
- encoding can be read from the IO device the encoding of the
- IO device is set to the default encoding.</p>
+ encoding can be read from the I/O device, the encoding of the
+ I/O device is set to the default encoding.</p>
<p>Returns the read encoding, or <c>none</c> if no valid
- encoding was found.</p>
+ encoding is found.</p>
</desc>
</func>
+
<func>
<name name="set_encoding" arity="2"/>
- <fsummary>Read and set the encoding of an IO device</fsummary>
+ <fsummary>Read and set the encoding of an I/O device.</fsummary>
<desc>
<p>Reads the <seealso marker="#encoding">encoding</seealso> from
- an IO device and sets the encoding of the device
- accordingly. The position of the IO device referenced by
+ an I/O device and sets the encoding of the device
+ accordingly. The position of the I/O device referenced by
<c><anno>File</anno></c> is not affected. If no valid
- encoding can be read from the IO device the encoding of the
- IO device is set to the
- <seealso marker="#encoding">encoding</seealso> given by
- <c><anno>Default</anno></c>.</p>
+ encoding can be read from the I/O device, the encoding of the
+ I/O device is set to the
+ <seealso marker="#encoding">encoding</seealso> specified by
+ <c><anno>Default</anno></c>.</p>
<p>Returns the read encoding, or <c>none</c> if no valid
- encoding was found.</p>
- </desc>
- </func>
- <func>
- <name name="format_error" arity="1"/>
- <fsummary>Format an error descriptor</fsummary>
- <desc>
- <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns
- a string which
- describes the error or warning. This function is usually
- called implicitly when processing an <c>ErrorInfo</c>
- structure (see below).</p>
+ encoding is found.</p>
</desc>
</func>
</funcs>
<section>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO
- modules. It has the following format:
- </p>
+ <marker id="errorinfo"/>
+ <p><c>ErrorInfo</c> is the standard <c>ErrorInfo</c> structure that is
+ returned from all I/O modules. The format is as follows:</p>
<code type="none">
- {ErrorLine, Module, ErrorDescriptor} </code>
- <p>A string which describes the error is obtained with the following call:
- </p>
+{ErrorLine, Module, ErrorDescriptor}</code>
+ <p>A string describing the error is obtained with the following call:</p>
<code type="none">
- Module:format_error(ErrorDescriptor) </code>
+Module:format_error(ErrorDescriptor)</code>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="erl_parse">erl_parse(3)</seealso></p>
+ <p><seealso marker="erl_parse"><c>erl_parse(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_anno.xml b/lib/stdlib/doc/src/erl_anno.xml
index ddc8b8c765..f316f63d98 100644
--- a/lib/stdlib/doc/src/erl_anno.xml
+++ b/lib/stdlib/doc/src/erl_anno.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2015</year>
- <year>2015</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -35,75 +35,81 @@
<file>erl_anno.xml</file>
</header>
<module>erl_anno</module>
-
- <modulesummary>
- Abstract Datatype for the Annotations of the Erlang Compiler
+ <modulesummary>Abstract datatype for the annotations of the Erlang Compiler.
</modulesummary>
<description>
- <p>This module implements an abstract type that is used by the
+ <p>This module provides an abstract type that is used by the
Erlang Compiler and its helper modules for holding data such as
column, line number, and text. The data type is a collection of
<marker id="annotations"/><em>annotations</em> as
described in the following.</p>
+
<p>The Erlang Token Scanner returns tokens with a subset of
the following annotations, depending on the options:</p>
+
<taglist>
<tag><c>column</c></tag>
<item><p>The column where the token begins.</p></item>
<tag><c>location</c></tag>
<item><p>The line and column where the token begins, or
- just the line if the column unknown.</p>
- </item>
+ just the line if the column is unknown.</p></item>
<tag><c>text</c></tag>
<item><p>The token's text.</p></item>
</taglist>
- <p>From the above the following annotation is derived:</p>
+
+ <p>From this, the following annotation is derived:</p>
+
<taglist>
<tag><c>line</c></tag>
<item><p>The line where the token begins.</p></item>
</taglist>
- <p>Furthermore, the following annotations are supported by
- this module, and used by various modules:</p>
+
+ <p>This module also supports the following annotations,
+ which are used by various modules:</p>
+
<taglist>
<tag><c>file</c></tag>
<item><p>A filename.</p></item>
<tag><c>generated</c></tag>
<item><p>A Boolean indicating if the abstract code is
- compiler generated. The Erlang Compiler does not emit warnings
- for such code.</p>
- </item>
+ compiler-generated. The Erlang Compiler does not emit warnings
+ for such code.</p></item>
<tag><c>record</c></tag>
<item><p>A Boolean indicating if the origin of the abstract
- code is a record. Used by Dialyzer to assign types to tuple
- elements.</p>
+ code is a record. Used by
+ <seealso marker="dialyzer:dialyzer">Dialyzer</seealso>
+ to assign types to tuple elements.</p>
</item>
</taglist>
+
<p>The functions
- <seealso marker="erl_scan#column/1">column()</seealso>,
- <seealso marker="erl_scan#end_location/1">end_location()</seealso>,
- <seealso marker="erl_scan#line/1">line()</seealso>,
- <seealso marker="erl_scan#location/1">location()</seealso>, and
- <seealso marker="erl_scan#text/1">text()</seealso>
+ <seealso marker="erl_scan#column/1"><c>column()</c></seealso>,
+ <seealso marker="erl_scan#end_location/1"><c>end_location()</c></seealso>,
+ <seealso marker="erl_scan#line/1"><c>line()</c></seealso>,
+ <seealso marker="erl_scan#location/1"><c>location()</c></seealso>, and
+ <seealso marker="erl_scan#text/1"><c>text()</c></seealso>
in the <c>erl_scan</c> module can be used for inspecting
annotations in tokens.</p>
+
<p>The functions
- <seealso marker="erl_parse#map_anno/2">map_anno()</seealso>,
- <seealso marker="erl_parse#fold_anno/3">fold_anno()</seealso>,
- <seealso marker="erl_parse#mapfold_anno/3">mapfold_anno()</seealso>,
- <seealso marker="erl_parse#new_anno/1">new_anno()</seealso>,
<seealso marker="erl_parse#anno_from_term/1">
- anno_from_term()</seealso>, and
+ <c>anno_from_term()</c></seealso>,
<seealso marker="erl_parse#anno_to_term/1">
- anno_to_term()</seealso> in the <c>erl_parse</c> module can be
- used for manipulating annotations in abstract code.
- </p>
+ <c>anno_to_term()</c></seealso>,
+ <seealso marker="erl_parse#fold_anno/3"><c>fold_anno()</c></seealso>,
+ <seealso marker="erl_parse#map_anno/2"><c>map_anno()</c></seealso>,
+ <seealso marker="erl_parse#mapfold_anno/3">
+ <c>mapfold_anno()</c></seealso>,
+ and <seealso marker="erl_parse#new_anno/1"><c>new_anno()</c></seealso>,
+ in the <c>erl_parse</c> module can be
+ used for manipulating annotations in abstract code.</p>
</description>
<datatypes>
<datatype>
<name>anno()</name>
- <desc><p><marker id="type-anno"/>A collection of annotations.</p>
+ <desc><p>A collection of annotations.</p>
</desc>
</datatype>
<datatype>
@@ -118,9 +124,6 @@
</datatype>
<datatype>
<name name="line"></name>
- <desc>
- <p>To be changed to a non-negative integer in Erlang/OTP 19.0.</p>
- </desc>
</datatype>
<datatype>
<name name="location"></name>
@@ -133,177 +136,169 @@
<funcs>
<func>
<name name="column" arity="1"/>
- <fsummary>Return the column</fsummary>
+ <fsummary>Return the column.</fsummary>
<type name="column"></type>
<desc>
- <p>Returns the column of the annotations <anno>Anno</anno>.
- </p>
+ <p>Returns the column of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="end_location" arity="1"/>
- <fsummary>Return the end location of the text</fsummary>
+ <fsummary>Return the end location of the text.</fsummary>
<type name="location"></type>
<desc>
<p>Returns the end location of the text of the
annotations <anno>Anno</anno>. If there is no text,
- <c>undefined</c> is returned.
- </p>
+ <c>undefined</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="file" arity="1"/>
- <fsummary>Return the filename</fsummary>
+ <fsummary>Return the filename.</fsummary>
<type name="filename"></type>
<desc>
<p>Returns the filename of the annotations <anno>Anno</anno>.
- If there is no filename, <c>undefined</c> is returned.
- </p>
+ If there is no filename, <c>undefined</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="from_term" arity="1"/>
- <fsummary>Return annotations given a term</fsummary>
+ <fsummary>Return annotations given a term.</fsummary>
<desc>
- <p>Returns annotations with the representation <anno>Term</anno>.
- </p>
- <!--
- <p>Although it is possible to create new annotations by calling
- <c>from_term/1</c>, the intention is that one should not do
- so - the proper way to create annotations is to call
- <c>new/1</c> and then modify the annotations
- by calling the <c>set_*</c> functions.</p>
- -->
- <p>See also <seealso marker="#to_term/1">to_term()</seealso>.
- </p>
+ <p>Returns annotations with representation <anno>Term</anno>.</p>
+ <p>See also <seealso marker="#to_term/1">to_term()</seealso>.</p>
</desc>
</func>
+
<func>
<name name="generated" arity="1"/>
- <fsummary>Return the generated Boolean</fsummary>
+ <fsummary>Return the generated Boolean.</fsummary>
<type name="generated"></type>
<desc>
- <p>Returns <c>true</c> if the annotations <anno>Anno</anno>
- has been marked as generated. The default is to return
- <c>false</c>.
- </p>
+ <p>Returns <c>true</c> if annotations <anno>Anno</anno>
+ is marked as generated. The default is to return
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_anno" arity="1"/>
- <fsummary>Test for a collection of annotations</fsummary>
+ <fsummary>Test for a collection of annotations.</fsummary>
<desc>
<p>Returns <c>true</c> if <anno>Term</anno> is a collection of
- annotations, <c>false</c> otherwise.</p>
+ annotations, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="line" arity="1"/>
- <fsummary>Return the line</fsummary>
+ <fsummary>Return the line.</fsummary>
<type name="line"></type>
<desc>
- <p>Returns the line of the annotations <anno>Anno</anno>.
- </p>
+ <p>Returns the line of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="location" arity="1"/>
- <fsummary>Return the location</fsummary>
+ <fsummary>Return the location.</fsummary>
<type name="location"></type>
<desc>
- <p>Returns the location of the annotations <anno>Anno</anno>.
- </p>
+ <p>Returns the location of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="new" arity="1"/>
- <fsummary>Create a new collection of annotations</fsummary>
+ <fsummary>Create a new collection of annotations.</fsummary>
<type name="location"></type>
<desc>
<p>Creates a new collection of annotations given a location.</p>
</desc>
</func>
+
<func>
<name name="set_file" arity="2"/>
- <fsummary>Modify the filename</fsummary>
+ <fsummary>Modify the filename.</fsummary>
<type name="filename"></type>
<desc>
- <p>Modifies the filename of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the filename of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="set_generated" arity="2"/>
- <fsummary>Modify the generated marker</fsummary>
+ <fsummary>Modify the generated marker.</fsummary>
<type name="generated"></type>
<desc>
- <p>Modifies the generated marker of the annotations
- <anno>Anno</anno>.
+ <p>Modifies the generated marker of the annotations <anno>Anno</anno>.
</p>
</desc>
</func>
+
<func>
<name name="set_line" arity="2"/>
- <fsummary>Modify the line</fsummary>
+ <fsummary>Modify the line.</fsummary>
<type name="line"></type>
<desc>
- <p>Modifies the line of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the line of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="set_location" arity="2"/>
- <fsummary>Modify the location</fsummary>
+ <fsummary>Modify the location.</fsummary>
<type name="location"></type>
<desc>
- <p>Modifies the location of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the location of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="set_record" arity="2"/>
- <fsummary>Modify the record marker</fsummary>
+ <fsummary>Modify the record marker.</fsummary>
<type name="record"></type>
<desc>
- <p>Modifies the record marker of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the record marker of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="set_text" arity="2"/>
- <fsummary>Modify the text</fsummary>
+ <fsummary>Modify the text.</fsummary>
<type name="text"></type>
<desc>
- <p>Modifies the text of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the text of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
<func>
+
<name name="text" arity="1"/>
- <fsummary>Return the text</fsummary>
+ <fsummary>Return the text.</fsummary>
<type name="text"></type>
<desc>
<p>Returns the text of the annotations <anno>Anno</anno>.
- If there is no text, <c>undefined</c> is returned.
- </p>
+ If there is no text, <c>undefined</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="to_term" arity="1"/>
- <fsummary>Return the term representing a collection of
- annotations</fsummary>
+ <fsummary>Return the term representing a collection of annotations.
+ </fsummary>
<desc>
- <p>Returns the term representing the annotations <anno>Anno</anno>.
- </p>
- <p>See also <seealso marker="#from_term/1">from_term()</seealso>.
- </p>
+ <p>Returns the term representing the annotations <anno>Anno</anno>.</p>
+ <p>See also <seealso marker="#from_term/1">from_term()</seealso>.</p>
</desc>
</func>
</funcs>
+
<section>
<title>See Also</title>
- <p><seealso marker="erl_scan">erl_scan(3)</seealso>,
- <seealso marker="erl_parse">erl_parse(3)</seealso>
- </p>
+ <p><seealso marker="erl_parse"><c>erl_parse(3)</c></seealso>,
+ <seealso marker="erl_scan"><c>erl_scan(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_eval.xml b/lib/stdlib/doc/src/erl_eval.xml
index ba988e7ca2..1c0f7f062f 100644
--- a/lib/stdlib/doc/src/erl_eval.xml
+++ b/lib/stdlib/doc/src/erl_eval.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,19 +28,19 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-21</date>
+ <date>1997-01-21</date>
<rev>B</rev>
- <file>erl_eval.sgml</file>
+ <file>erl_eval.xml</file>
</header>
<module>erl_eval</module>
- <modulesummary>The Erlang Meta Interpreter</modulesummary>
+ <modulesummary>The Erlang meta interpreter.</modulesummary>
<description>
<p>This module provides an interpreter for Erlang expressions. The
expressions are in the abstract syntax as returned by
<seealso marker="erl_parse"><c>erl_parse</c></seealso>,
- the Erlang parser, or <seealso marker="io">
- <c>io</c></seealso>.</p>
+ the Erlang parser, or <seealso marker="io"><c>io</c></seealso>.</p>
</description>
+
<datatypes>
<datatype>
<name name="bindings"/>
@@ -73,9 +73,9 @@
</datatype>
<datatype>
<name name="local_function_handler"/>
- <desc><p>Further described
- <seealso marker="#local_function_handler">below.</seealso></p>
- </desc>
+ <desc><p>Further described in section
+ <seealso marker="#local_function_handler">
+ Local Function Handler</seealso> in this module</p></desc>
</datatype>
<datatype>
<name name="name"/>
@@ -85,152 +85,164 @@
</datatype>
<datatype>
<name name="non_local_function_handler"/>
- <desc><p>Further described
- <seealso marker="#non_local_function_handler">below.</seealso></p>
- </desc>
+ <desc><p>Further described in section
+ <seealso marker="#non_local_function_handler">
+ Non-Local Function Handler</seealso> in this module.</p></desc>
</datatype>
<datatype>
<name name="value"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="exprs" arity="2"/>
- <name name="exprs" arity="3"/>
- <name name="exprs" arity="4"/>
- <fsummary>Evaluate expressions</fsummary>
+ <name name="add_binding" arity="3"/>
+ <fsummary>Add a binding.</fsummary>
<desc>
- <p>Evaluates <c><anno>Expressions</anno></c> with the set of bindings
- <c><anno>Bindings</anno></c>, where <c><anno>Expressions</anno></c>
- is a sequence of
- expressions (in abstract syntax) of a type which may be
- returned by <seealso marker="io#parse_erl_exprs/2">
- <c>io:parse_erl_exprs/2</c></seealso>. See below for an
- explanation of how and when to use the arguments
- <c><anno>LocalFunctionHandler</anno></c> and
- <c><anno>NonLocalFunctionHandler</anno></c>.
- </p>
- <p>Returns <c>{value, <anno>Value</anno>, <anno>NewBindings</anno>}</c>
- </p>
+ <p>Adds binding <c><anno>Name</anno>=<anno>Value</anno></c>
+ to <c><anno>BindingStruct</anno></c>.
+ Returns an updated binding structure.</p>
</desc>
</func>
+
+ <func>
+ <name name="binding" arity="2"/>
+ <fsummary>Return bindings.</fsummary>
+ <desc>
+ <p>Returns the binding of <c><anno>Name</anno></c>
+ in <c><anno>BindingStruct</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="bindings" arity="1"/>
+ <fsummary>Return bindings.</fsummary>
+ <desc>
+ <p>Returns the list of bindings contained in the binding
+ structure.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="del_binding" arity="2"/>
+ <fsummary>Delete a binding.</fsummary>
+ <desc>
+ <p>Removes the binding of <c><anno>Name</anno></c>
+ in <c><anno>BindingStruct</anno></c>.
+ Returns an updated binding structure.</p>
+ </desc>
+ </func>
+
<func>
<name name="expr" arity="2"/>
<name name="expr" arity="3"/>
<name name="expr" arity="4"/>
<name name="expr" arity="5"/>
- <fsummary>Evaluate expression</fsummary>
+ <fsummary>Evaluate expression.</fsummary>
<desc>
<p>Evaluates <c><anno>Expression</anno></c> with the set of bindings
- <c><anno>Bindings</anno></c>. <c><anno>Expression</anno></c>
- is an expression in
- abstract syntax. See below for an explanation of
- how and when to use the arguments
+ <c><anno>Bindings</anno></c>. <c><anno>Expression</anno></c> is an
+ expression in abstract syntax.
+ For an explanation of when and how to use arguments
<c><anno>LocalFunctionHandler</anno></c> and
- <c><anno>NonLocalFunctionHandler</anno></c>.
- </p>
- <p>Returns <c>{value, <anno>Value</anno>,
- <anno>NewBindings</anno>}</c> by default. But if the
- <c><anno>ReturnFormat</anno></c> is <c>value</c> only
- the <c><anno>Value</anno></c> is returned.</p>
+ <c><anno>NonLocalFunctionHandler</anno></c>, see sections
+ <seealso marker="#local_function_handler">
+ Local Function Handler</seealso> and
+ <seealso marker="#non_local_function_handler">
+ Non-Local Function Handler</seealso> in this module.</p>
+ <p>Returns <c>{value, <anno>Value</anno>, <anno>NewBindings</anno>}</c>
+ by default. If <c><anno>ReturnFormat</anno></c> is <c>value</c>,
+ only <c><anno>Value</anno></c> is returned.</p>
</desc>
</func>
+
<func>
<name name="expr_list" arity="2"/>
<name name="expr_list" arity="3"/>
<name name="expr_list" arity="4"/>
- <fsummary>Evaluate a list of expressions</fsummary>
+ <fsummary>Evaluate a list of expressions.</fsummary>
<desc>
<p>Evaluates a list of expressions in parallel, using the same
initial bindings for each expression. Attempts are made to
- merge the bindings returned from each evaluation. This
- function is useful in the <c>LocalFunctionHandler</c>. See below.
- </p>
+ merge the bindings returned from each evaluation. This
+ function is useful in <c>LocalFunctionHandler</c>, see section
+ <seealso marker="#local_function_handler">
+ Local Function Handler</seealso> in this module.</p>
<p>Returns <c>{<anno>ValueList</anno>, <anno>NewBindings</anno>}</c>.
</p>
</desc>
</func>
+
<func>
- <name name="new_bindings" arity="0"/>
- <fsummary>Return a bindings structure</fsummary>
- <desc>
- <p>Returns an empty binding structure.</p>
- </desc>
- </func>
- <func>
- <name name="bindings" arity="1"/>
- <fsummary>Return bindings</fsummary>
- <desc>
- <p>Returns the list of bindings contained in the binding
- structure.</p>
- </desc>
- </func>
- <func>
- <name name="binding" arity="2"/>
- <fsummary>Return bindings</fsummary>
- <desc>
- <p>Returns the binding of <c><anno>Name</anno></c>
- in <c><anno>BindingStruct</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="add_binding" arity="3"/>
- <fsummary>Add a binding</fsummary>
+ <name name="exprs" arity="2"/>
+ <name name="exprs" arity="3"/>
+ <name name="exprs" arity="4"/>
+ <fsummary>Evaluate expressions.</fsummary>
<desc>
- <p>Adds the binding <c><anno>Name</anno> = <anno>Value</anno></c>
- to <c><anno>BindingStruct</anno></c>.
- Returns an updated binding structure.</p>
+ <p>Evaluates <c><anno>Expressions</anno></c> with the set of bindings
+ <c><anno>Bindings</anno></c>, where <c><anno>Expressions</anno></c>
+ is a sequence of expressions (in abstract syntax) of a type that can
+ be returned by <seealso marker="io#parse_erl_exprs/2">
+ <c>io:parse_erl_exprs/2</c></seealso>.
+ For an explanation of when and how to use arguments
+ <c><anno>LocalFunctionHandler</anno></c> and
+ <c><anno>NonLocalFunctionHandler</anno></c>, see sections
+ <seealso marker="#local_function_handler">
+ Local Function Handler</seealso> and
+ <seealso marker="#non_local_function_handler">
+ Non-Local Function Handler</seealso> in this module.</p>
+ <p>Returns <c>{value, <anno>Value</anno>, <anno>NewBindings</anno>}</c>
+ </p>
</desc>
</func>
+
<func>
- <name name="del_binding" arity="2"/>
- <fsummary>Delete a binding</fsummary>
+ <name name="new_bindings" arity="0"/>
+ <fsummary>Return a bindings structure.</fsummary>
<desc>
- <p>Removes the binding of <c><anno>Name</anno></c>
- in <c><anno>BindingStruct</anno></c>.
- Returns an updated binding structure.</p>
+ <p>Returns an empty binding structure.</p>
</desc>
</func>
</funcs>
<section>
+ <marker id="local_function_handler"></marker>
<title>Local Function Handler</title>
- <p><marker id="local_function_handler"></marker>
- During evaluation of a function, no calls can be made to local
+ <p>During evaluation of a function, no calls can be made to local
functions. An undefined function error would be
generated. However, the optional argument
- <c>LocalFunctionHandler</c> may be used to define a function
- which is called when there is a call to a local function. The
+ <c>LocalFunctionHandler</c> can be used to define a function
+ that is called when there is a call to a local function. The
argument can have the following formats:</p>
<taglist>
<tag><c>{value,Func}</c></tag>
<item>
- <p>This defines a local function handler which is called with:</p>
+ <p>This defines a local function handler that is called with:</p>
<code type="none">
-Func(Name, Arguments) </code>
+Func(Name, Arguments)</code>
<p><c>Name</c> is the name of the local function (an atom) and
<c>Arguments</c> is a list of the <em>evaluated</em>
arguments. The function handler returns the value of the
- local function. In this case, it is not possible to access
- the current bindings. To signal an error, the function
- handler just calls <c>exit/1</c> with a suitable exit value.</p>
+ local function. In this case, the current bindings cannot be
+ accessed. To signal an error, the function
+ handler calls <c>exit/1</c> with a suitable exit value.</p>
</item>
<tag><c>{eval,Func}</c></tag>
<item>
- <p>This defines a local function handler which is called with:</p>
+ <p>This defines a local function handler that is called with:</p>
<code type="none">
-Func(Name, Arguments, Bindings) </code>
+Func(Name, Arguments, Bindings)</code>
<p><c>Name</c> is the name of the local function (an atom),
<c>Arguments</c> is a list of the <em>unevaluated</em>
arguments, and <c>Bindings</c> are the current variable
bindings. The function handler returns:</p>
<code type="none">
-{value,Value,NewBindings} </code>
+{value,Value,NewBindings}</code>
<p><c>Value</c> is the value of the local function and
<c>NewBindings</c> are the updated variable bindings. In
this case, the function handler must itself evaluate all the
function arguments and manage the bindings. To signal an
- error, the function handler just calls <c>exit/1</c> with a
+ error, the function handler calls <c>exit/1</c> with a
suitable exit value.</p>
</item>
<tag><c>none</c></tag>
@@ -241,55 +253,66 @@ Func(Name, Arguments, Bindings) </code>
</section>
<section>
- <title>Non-local Function Handler</title>
- <p><marker id="non_local_function_handler"></marker>
- The optional argument <c>NonlocalFunctionHandler</c> may be
- used to define a function which is called in the following
- cases: a functional object (fun) is called; a built-in function
- is called; a function is called using the M:F syntax, where M
- and F are atoms or expressions; an operator Op/A is called
- (this is handled as a call to the function <c>erlang:Op/A</c>).
- Exceptions are calls to <c>erlang:apply/2,3</c>; neither of the
- function handlers will be called for such calls.
+ <marker id="non_local_function_handler"></marker>
+ <title>Non-Local Function Handler</title>
+ <p>The optional argument <c>NonLocalFunctionHandler</c> can be
+ used to define a function that is called in the following
+ cases:</p>
+ <list type="bulleted">
+ <item><p>A functional object (fun) is called.</p></item>
+ <item><p>A built-in function is called.</p></item>
+ <item><p>A function is called using the <c>M:F</c> syntax, where <c>M</c>
+ and <c>F</c> are atoms or expressions.</p></item>
+ <item><p>An operator <c>Op/A</c> is called (this is handled as a call to
+ function <c>erlang:Op/A</c>).</p></item>
+ </list>
+ <p>Exceptions are calls to <c>erlang:apply/2,3</c>; neither of the
+ function handlers are called for such calls.
The argument can have the following formats:</p>
<taglist>
<tag><c>{value,Func}</c></tag>
<item>
- <p>This defines an nonlocal function handler which is called with:</p>
+ <p>This defines a non-local function handler that is called with:</p>
<code type="none">
-Func(FuncSpec, Arguments) </code>
+Func(FuncSpec, Arguments)</code>
<p><c>FuncSpec</c> is the name of the function on the form
<c>{Module,Function}</c> or a fun, and <c>Arguments</c> is a
list of the <em>evaluated</em> arguments. The function
handler returns the value of the function. To
- signal an error, the function handler just calls
+ signal an error, the function handler calls
<c>exit/1</c> with a suitable exit value.</p>
</item>
<tag><c>none</c></tag>
<item>
- <p>There is no nonlocal function handler.</p>
+ <p>There is no non-local function handler.</p>
</item>
</taglist>
<note>
<p>For calls such as <c>erlang:apply(Fun, Args)</c> or
- <c>erlang:apply(Module, Function, Args)</c> the call of the
+ <c>erlang:apply(Module, Function, Args)</c>, the call of the
non-local function handler corresponding to the call to
- <c>erlang:apply/2,3</c> itself--<c>Func({erlang, apply}, [Fun, Args])</c> or <c>Func({erlang, apply}, [Module, Function, Args])</c>--will never take place. The non-local function
- handler <em>will</em> however be called with the evaluated
- arguments of the call to <c>erlang:apply/2,3</c>: <c>Func(Fun, Args)</c> or <c>Func({Module, Function}, Args)</c> (assuming
+ <c>erlang:apply/2,3</c> itself
+ (<c>Func({erlang, apply}, [Fun, Args])</c> or
+ <c>Func({erlang, apply}, [Module, Function, Args])</c>)
+ never takes place.</p>
+ <p>The non-local function handler <em>is</em> however called with the
+ evaluated arguments of the call to
+ <c>erlang:apply/2,3</c>: <c>Func(Fun, Args)</c> or
+ <c>Func({Module, Function}, Args)</c> (assuming
that <c>{Module, Function}</c> is not <c>{erlang, apply}</c>).</p>
- <p>Calls to functions defined by evaluating fun expressions
+ <p>Calls to functions defined by evaluating fun expressions
<c>"fun ... end"</c> are also hidden from non-local function
- handlers.</p> </note>
- <p>The nonlocal function handler argument is probably not used as
+ handlers.</p>
+ </note>
+ <p>The non-local function handler argument is probably not used as
frequently as the local function handler argument. A possible
use is to call <c>exit/1</c> on calls to functions that for some
reason are not allowed to be called.</p>
</section>
<section>
- <title>Bugs</title>
- <p>Undocumented functions in <c>erl_eval</c> should not be used.</p>
+ <title>Known Limitation</title>
+ <p>Undocumented functions in this module are not to be used.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_expand_records.xml b/lib/stdlib/doc/src/erl_expand_records.xml
index 497b371434..7e4aa2db37 100644
--- a/lib/stdlib/doc/src/erl_expand_records.xml
+++ b/lib/stdlib/doc/src/erl_expand_records.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2005</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -26,33 +26,35 @@
<title>erl_expand_records</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2005-12-23</date>
<rev>PA1</rev>
- <file>erl_expand_records.sgml</file>
+ <file>erl_expand_records.xml</file>
</header>
<module>erl_expand_records</module>
- <modulesummary>Expands Records in a Module</modulesummary>
+ <modulesummary>Expands records in a module.</modulesummary>
<description>
+ <p>This module expands records in a module.</p>
</description>
+
<funcs>
<func>
<name name="module" arity="2"/>
- <fsummary>Expand all records in a module</fsummary>
+ <fsummary>Expand all records in a module.</fsummary>
<desc>
<p>Expands all records in a module. The returned module has no
- references to records, neither attributes nor code.</p>
+ references to records, attributes, or code.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p>The <seealso marker="erts:absform">abstract format</seealso>
- documentation in ERTS User's Guide</p>
+ <p>Section <seealso marker="erts:absform">The Abstract Format</seealso>
+ in ERTS User's Guide.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_id_trans.xml b/lib/stdlib/doc/src/erl_id_trans.xml
index 30eb213493..16952a9582 100644
--- a/lib/stdlib/doc/src/erl_id_trans.xml
+++ b/lib/stdlib/doc/src/erl_id_trans.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -30,30 +30,32 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-21</date>
+ <date>1997-01-21</date>
<rev>B</rev>
- <file>erl_id_trans.sgml</file>
+ <file>erl_id_trans.xml</file>
</header>
<module>erl_id_trans</module>
- <modulesummary>An Identity Parse Transform</modulesummary>
+ <modulesummary>An identity parse transform.</modulesummary>
<description>
<p>This module performs an identity parse transformation of Erlang code.
- It is included as an example for users who may wish to write their own
- parse transformers. If the option <c>{parse_transform,Module}</c> is passed
- to the compiler, a user written function <c>parse_transform/2</c>
- is called by the compiler before the code is checked for
- errors.</p>
+ It is included as an example for users who wants to write their own
+ parse transformers. If option <c>{parse_transform,Module}</c> is passed
+ to the compiler, a user-written function <c>parse_transform/2</c>
+ is called by the compiler before the code is checked for errors.</p>
</description>
+
<funcs>
<func>
<name>parse_transform(Forms, Options) -> Forms</name>
- <fsummary>Transform Erlang forms</fsummary>
+ <fsummary>Transform Erlang forms.</fsummary>
<type>
- <v>Forms = [<seealso marker="erl_parse#type-abstract_form">erl_parse:abstract_form()</seealso>]</v>
+ <v>Forms = [<seealso marker="erl_parse#type-abstract_form">erl_parse:abstract_form()</seealso>
+ | <seealso marker="erl_parse#type-form_info">erl_parse:form_info()</seealso>]</v>
<v>Options = [<seealso marker="compile#type-option">compile:option()</seealso>]</v>
</type>
<desc>
- <p>Performs an identity transformation on Erlang forms, as an example.</p>
+ <p>Performs an identity transformation on Erlang forms, as an example.
+ </p>
</desc>
</func>
</funcs>
@@ -62,17 +64,17 @@
<title>Parse Transformations</title>
<p>Parse transformations are used if a programmer wants to use
Erlang syntax, but with different semantics. The original Erlang
- code is then transformed into other Erlang code.
- </p>
+ code is then transformed into other Erlang code.</p>
<note>
- <p>Programmers are strongly advised not to engage in parse transformations and no support is offered for problems encountered.</p>
+ <p>Programmers are strongly advised not to engage in parse
+ transformations. No support is offered for problems encountered.</p>
</note>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="erl_parse">erl_parse(3)</seealso>,
- <seealso marker="compiler:compile">compile(3)</seealso>.</p>
+ <p><seealso marker="erl_parse"><c>erl_parse(3)</c></seealso>,
+ <seealso marker="compiler:compile"><c>compile(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_internal.xml b/lib/stdlib/doc/src/erl_internal.xml
index e1ee50b424..cf49df0972 100644
--- a/lib/stdlib/doc/src/erl_internal.xml
+++ b/lib/stdlib/doc/src/erl_internal.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -30,91 +30,100 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-21</date>
+ <date>1997-01-21</date>
<rev>B</rev>
- <file>erl_internal.sgml</file>
+ <file>erl_internal.xml</file>
</header>
<module>erl_internal</module>
- <modulesummary>Internal Erlang Definitions</modulesummary>
+ <modulesummary>Internal Erlang definitions.</modulesummary>
<description>
- <p>This module defines Erlang BIFs, guard tests and operators.
+ <p>This module defines Erlang BIFs, guard tests, and operators.
This module is only of interest to programmers who
manipulate Erlang code.</p>
</description>
+
<funcs>
<func>
- <name name="bif" arity="2"/>
- <fsummary>Test for an Erlang BIF</fsummary>
+ <name name="arith_op" arity="2"/>
+ <fsummary>Test for an arithmetic operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is an Erlang BIF
- which is automatically recognized by the compiler, otherwise
- <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is an arithmetic operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="guard_bif" arity="2"/>
- <fsummary>Test for an Erlang BIF allowed in guards</fsummary>
+ <name name="bif" arity="2"/>
+ <fsummary>Test for an Erlang BIF.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is an Erlang BIF
- which is allowed in guards, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c>
+ is an Erlang BIF that is automatically recognized by the compiler,
+ otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="type_test" arity="2"/>
- <fsummary>Test for a valid type test</fsummary>
+ <name name="bool_op" arity="2"/>
+ <fsummary>Test for a Boolean operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is a valid Erlang
- type test, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is a Boolean operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="arith_op" arity="2"/>
- <fsummary>Test for an arithmetic operator</fsummary>
+ <name name="comp_op" arity="2"/>
+ <fsummary>Test for a comparison operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is an arithmetic
- operator, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is a comparison operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="bool_op" arity="2"/>
- <fsummary>Test for a Boolean operator</fsummary>
+ <name name="guard_bif" arity="2"/>
+ <fsummary>Test for an Erlang BIF allowed in guards.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is a Boolean
- operator, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is
+ an Erlang BIF that is allowed in guards, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="comp_op" arity="2"/>
- <fsummary>Test for a comparison operator</fsummary>
+ <name name="list_op" arity="2"/>
+ <fsummary>Test for a list operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is a comparison
- operator, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is a list operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="list_op" arity="2"/>
- <fsummary>Test for a list operator</fsummary>
+ <name name="op_type" arity="2"/>
+ <fsummary>Return operator type.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is a list
- operator, otherwise <c>false</c>.</p>
+ <p>Returns the <c><anno>Type</anno></c> of operator that
+ <c><anno>OpName</anno>/<anno>Arity</anno></c> belongs to,
+ or generates a <c>function_clause</c> error if it is not an
+ operator.</p>
</desc>
</func>
+
<func>
<name name="send_op" arity="2"/>
- <fsummary>Test for a send operator</fsummary>
+ <fsummary>Test for a send operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is a send
- operator, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is a send operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="op_type" arity="2"/>
- <fsummary>Return operator type</fsummary>
+ <name name="type_test" arity="2"/>
+ <fsummary>Test for a valid type test.</fsummary>
<desc>
- <p>Returns the <c><anno>Type</anno></c> of operator that <c><anno>OpName</anno>/<anno>Arity</anno></c>
- belongs to,
- or generates a <c>function_clause</c> error if it is not an
- operator at all.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is
+ a valid Erlang type test, otherwise <c>false</c>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/erl_lint.xml b/lib/stdlib/doc/src/erl_lint.xml
index 318cb5ac19..77cb7a9916 100644
--- a/lib/stdlib/doc/src/erl_lint.xml
+++ b/lib/stdlib/doc/src/erl_lint.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,39 +28,45 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-27</date>
+ <date>1997-01-27</date>
<rev>B</rev>
- <file>erl_lint.sgml</file>
+ <file>erl_lint.xml</file>
</header>
<module>erl_lint</module>
- <modulesummary>The Erlang Code Linter</modulesummary>
+ <modulesummary>The Erlang code linter.</modulesummary>
<description>
<p>This module is used to check Erlang code for illegal syntax and
- other bugs. It also warns against coding practices which are
- not recommended. </p>
+ other bugs. It also warns against coding practices that are
+ not recommended.</p>
+
<p>The errors detected include:</p>
+
<list type="bulleted">
- <item>redefined and undefined functions</item>
- <item>unbound and unsafe variables</item>
- <item>illegal record usage.</item>
+ <item>Redefined and undefined functions</item>
+ <item>Unbound and unsafe variables</item>
+ <item>Illegal record use</item>
</list>
- <p>Warnings include:</p>
+
+ <p>The warnings detected include:</p>
+
<list type="bulleted">
- <item>unused functions and imports</item>
- <item>unused variables</item>
- <item>variables imported into matches</item>
- <item>variables exported from
- <c>if</c>/<c>case</c>/<c>receive</c></item>
- <item>variables shadowed in lambdas and list
- comprehensions.</item>
+ <item>Unused functions and imports</item>
+ <item>Unused variables</item>
+ <item>Variables imported into matches</item>
+ <item>Variables exported from
+ <c>if</c>/<c>case</c>/<c>receive</c></item>
+ <item>Variables shadowed in funs and list comprehensions</item>
</list>
+
<p>Some of the warnings are optional, and can be turned on by
- giving the appropriate option, described below.</p>
+ specifying the appropriate option, described below.</p>
+
<p>The functions in this module are invoked automatically by the
- Erlang compiler and there is no reason to invoke these
+ Erlang compiler. There is no reason to invoke these
functions separately unless you have written your own Erlang
compiler.</p>
</description>
+
<datatypes>
<datatype>
<name name="error_info"/>
@@ -69,86 +75,87 @@
<name name="error_description"/>
</datatype>
</datatypes>
+
<funcs>
<func>
+ <name name="format_error" arity="1"/>
+ <fsummary>Format an error descriptor.</fsummary>
+ <desc>
+ <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns a string
+ that describes the error or warning. This function is usually
+ called implicitly when processing an <c>ErrorInfo</c> structure
+ (see section
+ <seealso marker="#errorinfo">Error Information</seealso>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="is_guard_test" arity="1"/>
+ <fsummary>Test for a guard test.</fsummary>
+ <desc>
+ <p>Tests if <c><anno>Expr</anno></c> is a legal guard test.
+ <c><anno>Expr</anno></c> is an Erlang term representing the abstract
+ form for the expression. <seealso marker="erl_parse#parse_exprs/1">
+ <c>erl_parse:parse_exprs(Tokens)</c></seealso>
+ can be used to generate a list of <c><anno>Expr</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="module" arity="1"/>
<name name="module" arity="2"/>
<name name="module" arity="3"/>
- <fsummary>Check a module for errors</fsummary>
+ <fsummary>Check a module for errors.</fsummary>
<desc>
- <p>This function checks all the forms in a module for errors.
- It returns:
- </p>
+ <p>Checks all the forms in a module for errors. It returns:</p>
<taglist>
<tag><c>{ok,<anno>Warnings</anno>}</c></tag>
<item>
- <p>There were no errors in the module.</p>
+ <p>There are no errors in the module.</p>
</item>
<tag><c>{error,<anno>Errors</anno>,<anno>Warnings</anno>}</c></tag>
<item>
- <p>There were errors in the module.</p>
+ <p>There are errors in the module.</p>
</item>
</taglist>
- <p>Since this module is of interest only to the maintainers of
- the compiler, and to avoid having the same description in
- two places to avoid the usual maintenance nightmare, the
+ <p>As this module is of interest only to the maintainers of the
+ compiler, and to avoid the same description in two places, the
elements of <c>Options</c> that control the warnings are
- only described in <seealso marker="compiler:compile#erl_lint_options">compile(3)</seealso>.
- </p>
- <p>The <c><anno>AbsForms</anno></c> of a module which comes from a file
- that is read through <c>epp</c>, the Erlang pre-processor,
- can come from many files. This means that any references to
- errors must include the file name (see <seealso marker="epp">epp(3)</seealso>, or parser <seealso marker="erl_parse">erl_parse(3)</seealso>).
- The warnings and errors returned have the following format:
- </p>
+ only described in the
+ <seealso marker="compiler:compile#erl_lint_options">
+ <c>compile(3)</c></seealso> module.</p>
+ <p><c><anno>AbsForms</anno></c> of a module, which comes from a file
+ that is read through <c>epp</c>, the Erlang preprocessor, can come
+ from many files. This means that any references to errors must
+ include the filename, see the <seealso marker="epp">
+ <c>epp(3)</c></seealso> module or parser (see the
+ <seealso marker="erl_parse"><c>erl_parse(3)</c></seealso> module).
+ The returned errors and warnings have the following format:</p>
<code type="none">
- [{<anno>FileName2</anno>,[<anno>ErrorInfo</anno>]}] </code>
- <p>The errors and warnings are listed in the order in which
- they are encountered in the forms. This means that the
- errors from one file may be split into different entries in
- the list of errors.</p>
- </desc>
- </func>
- <func>
- <name name="is_guard_test" arity="1"/>
- <fsummary>Test for a guard test</fsummary>
- <desc>
- <p>This function tests if <c><anno>Expr</anno></c> is a legal guard test.
- <c><anno>Expr</anno></c> is an Erlang term representing the abstract form
- for the expression. <c>erl_parse:parse_exprs(Tokens)</c> can
- be used to generate a list of <c><anno>Expr</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="format_error" arity="1"/>
- <fsummary>Format an error descriptor</fsummary>
- <desc>
- <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns a string which
- describes the error or warning. This function is usually
- called implicitly when processing an <c>ErrorInfo</c>
- structure (see below).</p>
+[{<anno>FileName2</anno>,[<anno>ErrorInfo</anno>]}]</code>
+ <p>The errors and warnings are listed in the order in which they are
+ encountered in the forms. The errors from one file can therefore be
+ split into different entries in the list of errors.</p>
</desc>
</func>
</funcs>
<section>
+ <marker id="errorinfo"/>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO
- modules. It has the following format:
- </p>
+ <p><c>ErrorInfo</c> is the standard <c>ErrorInfo</c> structure that is
+ returned from all I/O modules. The format is as follows:</p>
<code type="none">
- {ErrorLine, Module, ErrorDescriptor} </code>
- <p>A string which describes the error is obtained with the following call:
- </p>
+{ErrorLine, Module, ErrorDescriptor}</code>
+ <p>A string describing the error is obtained with the following call:</p>
<code type="none">
- Module:format_error(ErrorDescriptor) </code>
+Module:format_error(ErrorDescriptor)</code>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="erl_parse">erl_parse(3)</seealso>,
- <seealso marker="epp">epp(3)</seealso></p>
+ <p><seealso marker="epp"><c>epp(3)</c></seealso>,
+ <seealso marker="erl_parse"><c>erl_parse(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_parse.xml b/lib/stdlib/doc/src/erl_parse.xml
index 0938b5dec3..647f36883c 100644
--- a/lib/stdlib/doc/src/erl_parse.xml
+++ b/lib/stdlib/doc/src/erl_parse.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2015</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,284 +28,315 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-24</date>
+ <date>1997-01-24</date>
<rev>B</rev>
- <file>erl_parse.sgml</file>
+ <file>erl_parse.xml</file>
</header>
<module>erl_parse</module>
- <modulesummary>The Erlang Parser</modulesummary>
+ <modulesummary>The Erlang parser.</modulesummary>
<description>
- <p>This module is the basic Erlang parser which converts tokens into
- the abstract form of either forms (i.e., top-level constructs),
+ <p>This module is the basic Erlang parser that converts tokens into
+ the abstract form of either forms (that is, top-level constructs),
expressions, or terms. The Abstract Format is described in the
<seealso marker="erts:absform">ERTS User's Guide</seealso>.
- Note that a token list must end with the <em>dot</em> token in order
- to be acceptable to the parse functions (see <seealso marker="erl_scan">erl_scan(3)</seealso>).</p>
+ Notice that a token list must end with the <em>dot</em> token to be
+ acceptable to the parse functions (see the <seealso marker="erl_scan">
+ <c>erl_scan(3)</c></seealso>) module.</p>
</description>
+
<datatypes>
<datatype>
- <name name="abstract_clause"></name>
- <desc><p>Parse tree for Erlang clause.</p>
+ <name>abstract_clause()</name>
+ <desc><p>Abstract form of an Erlang clause.</p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name>abstract_expr()</name>
+ <desc><p>Abstract form of an Erlang expression.</p>
</desc>
</datatype>
<datatype>
- <name name="abstract_expr"></name>
- <desc><p>Parse tree for Erlang expression.</p>
+ <name>abstract_form()</name>
+ <desc><p>Abstract form of an Erlang form.</p>
</desc>
</datatype>
<datatype>
- <name name="abstract_form"></name>
- <desc><p>Parse tree for Erlang form.</p>
+ <name>abstract_type()</name>
+ <desc><p>Abstract form of an Erlang type.</p>
</desc>
</datatype>
<datatype>
+ <name name="erl_parse_tree"></name>
+ </datatype>
+ <datatype>
<name name="error_description"></name>
</datatype>
<datatype>
<name name="error_info"></name>
</datatype>
<datatype>
+ <name name="form_info"></name>
+ <desc><p>Tuples <c>{error, error_info()}</c> and <c>{warning,
+ error_info()}</c>, denoting syntactically incorrect forms and
+ warnings, and <c>{eof, line()}</c>, denoting an end-of-stream
+ encountered before a complete form had been parsed.</p>
+ </desc>
+ </datatype>
+ <datatype>
<name name="token"></name>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="parse_form" arity="1"/>
- <fsummary>Parse an Erlang form</fsummary>
+ <name name="abstract" arity="1"/>
+ <fsummary>Convert an Erlang term into an abstract form.</fsummary>
<desc>
- <p>This function parses <c><anno>Tokens</anno></c> as if it were
- a form. It returns:</p>
- <taglist>
- <tag><c>{ok, <anno>AbsForm</anno>}</c></tag>
- <item>
- <p>The parsing was successful. <c><anno>AbsForm</anno></c> is the
- abstract form of the parsed form.</p>
- </item>
- <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
- <item>
- <p>An error occurred.</p>
- </item>
- </taglist>
+ <p>Converts the Erlang data structure <c><anno>Data</anno></c> into an
+ abstract form of type <c><anno>AbsTerm</anno></c>.
+ This function is the inverse of
+ <seealso marker="#normalise/1"><c>normalise/1</c></seealso>.</p>
+ <p><c>erl_parse:abstract(T)</c> is equivalent to
+ <c>erl_parse:abstract(T, 0)</c>.</p>
</desc>
</func>
+
<func>
- <name name="parse_exprs" arity="1"/>
- <fsummary>Parse Erlang expressions</fsummary>
+ <name name="abstract" arity="2"/>
+ <fsummary>Convert an Erlang term into an abstract form.</fsummary>
+ <type name="encoding_func"/>
<desc>
- <p>This function parses <c><anno>Tokens</anno></c> as if it were
- a list of expressions. It returns:</p>
- <taglist>
- <tag><c>{ok, <anno>ExprList</anno>}</c></tag>
- <item>
- <p>The parsing was successful. <c><anno>ExprList</anno></c> is a
- list of the abstract forms of the parsed expressions.</p>
- </item>
- <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
- <item>
- <p>An error occurred.</p>
- </item>
- </taglist>
+ <p>Converts the Erlang data structure <c><anno>Data</anno></c> into an
+ abstract form of type <c><anno>AbsTerm</anno></c>.</p>
+ <p>Option <c><anno>Line</anno></c> is the line to be
+ assigned to each node of <c><anno>AbsTerm</anno></c>.</p>
+ <p>Option <c><anno>Encoding</anno></c> is used for
+ selecting which integer lists to be considered
+ as strings. The default is to use the encoding returned by
+ function <seealso marker="epp#default_encoding/0">
+ <c>epp:default_encoding/0</c></seealso>.
+ Value <c>none</c> means that no integer lists are
+ considered as strings. <c>encoding_func()</c> is
+ called with one integer of a list at a time; if it
+ returns <c>true</c> for every integer, the list is
+ considered a string.</p>
</desc>
</func>
+
<func>
- <name name="parse_term" arity="1"/>
- <fsummary>Parse an Erlang term</fsummary>
+ <name name="anno_from_term" arity="1"/>
+ <fsummary>Return annotations as terms.</fsummary>
<desc>
- <p>This function parses <c><anno>Tokens</anno></c> as if it were
- a term. It returns:</p>
- <taglist>
- <tag><c>{ok, <anno>Term</anno>}</c></tag>
- <item>
- <p>The parsing was successful. <c><anno>Term</anno></c> is
- the Erlang term corresponding to the token list.</p>
- </item>
- <tag><c>{error, ErrorInfo}</c></tag>
- <item>
- <p>An error occurred.</p>
- </item>
- </taglist>
+ <p>Assumes that <c><anno>Term</anno></c> is a term with the same
+ structure as a <c>erl_parse</c> tree, but with terms,
+ say <c>T</c>, where a <c>erl_parse</c> tree has collections
+ of annotations. Returns a <c>erl_parse</c> tree where each
+ term <c>T</c> is replaced by the value returned by
+ <seealso marker="erl_anno#from_term/1">
+ <c>erl_anno:from_term(T)</c></seealso>. The term
+ <c><anno>Term</anno></c> is traversed in a depth-first,
+ left-to-right fashion.</p>
</desc>
</func>
+
<func>
- <name>format_error(ErrorDescriptor) -> Chars</name>
- <fsummary>Format an error descriptor</fsummary>
- <type>
- <v>ErrorDescriptor = <seealso
- marker="#type-error_info">error_description()</seealso></v>
- <v>Chars = [char() | Chars]</v>
- </type>
+ <name name="anno_to_term" arity="1"/>
+ <fsummary>Return the representation of annotations.</fsummary>
<desc>
- <p>Uses an <c>ErrorDescriptor</c> and returns a string
- which describes the error. This function is usually called
- implicitly when an <c>ErrorInfo</c> structure is processed
- (see below).</p>
+ <p>Returns a term where each collection of annotations
+ <c>Anno</c> of the nodes of the <c>erl_parse</c> tree
+ <c><anno>Abstr</anno></c> is replaced by the term
+ returned by <seealso marker="erl_anno#to_term/1">
+ <c>erl_anno:to_term(Anno)</c></seealso>. The
+ <c>erl_parse</c> tree is traversed in a depth-first,
+ left-to-right fashion.</p>
</desc>
</func>
+
<func>
- <name name="tokens" arity="1"/>
- <name name="tokens" arity="2"/>
- <fsummary>Generate a list of tokens for an expression</fsummary>
+ <name name="fold_anno" arity="3"/>
+ <fsummary>Fold a function over the annotations of an <c>erl_parse</c> tree.
+ </fsummary>
<desc>
- <p>This function generates a list of tokens representing the abstract
- form <c><anno>AbsTerm</anno></c> of an expression. Optionally, it
- appends <c><anno>MoreTokens</anno></c>.</p>
+ <p>Updates an accumulator by applying <c><anno>Fun</anno></c> on
+ each collection of annotations of the <c>erl_parse</c> tree
+ <c><anno>Abstr</anno></c>. The first call to
+ <c><anno>Fun</anno></c> has <c><anno>AccIn</anno></c> as
+ argument, the returned accumulator
+ <c><anno>AccOut</anno></c> is passed to the next call, and
+ so on. The final value of the accumulator is returned. The
+ <c>erl_parse</c> tree is traversed in a depth-first, left-to-right
+ fashion.</p>
</desc>
</func>
+
<func>
- <name name="normalise" arity="1"/>
- <fsummary>Convert abstract form to an Erlang term</fsummary>
+ <name>format_error(ErrorDescriptor) -> Chars</name>
+ <fsummary>Format an error descriptor.</fsummary>
+ <type>
+ <v>ErrorDescriptor = <seealso
+ marker="#type-error_info">error_description()</seealso></v>
+ <v>Chars = [char() | Chars]</v>
+ </type>
<desc>
- <p>Converts the abstract form <c><anno>AbsTerm</anno></c> of a
- term into a
- conventional Erlang data structure (i.e., the term itself).
- This is the inverse of <c>abstract/1</c>.</p>
+ <p>Uses an <c>ErrorDescriptor</c> and returns a string
+ that describes the error. This function is usually called
+ implicitly when an <c>ErrorInfo</c> structure is processed
+ (see section <seealso marker="#errorinfo">
+ Error Information</seealso>).</p>
</desc>
</func>
+
<func>
- <name name="abstract" arity="1"/>
- <fsummary>Convert an Erlang term into an abstract form</fsummary>
+ <name name="map_anno" arity="2"/>
+ <fsummary>Map a function over the annotations of an <c>erl_parse</c> tree.
+ </fsummary>
<desc>
- <p>Converts the Erlang data structure <c><anno>Data</anno></c> into an
- abstract form of type <c><anno>AbsTerm</anno></c>.
- This is the inverse of <c>normalise/1</c>.</p>
- <p><c>erl_parse:abstract(T)</c> is equivalent to
- <c>erl_parse:abstract(T, 0)</c>.</p>
+ <p>Modifies the <c>erl_parse</c> tree <c><anno>Abstr</anno></c>
+ by applying <c><anno>Fun</anno></c> on each collection of
+ annotations of the nodes of the <c>erl_parse</c> tree. The
+ <c>erl_parse</c> tree is traversed in a depth-first,
+ left-to-right fashion.</p>
</desc>
</func>
+
<func>
- <name name="abstract" arity="2"/>
- <fsummary>Convert an Erlang term into an abstract form</fsummary>
- <type name="encoding_func"/>
+ <name name="mapfold_anno" arity="3"/>
+ <fsummary>Map and fold a function over the annotations of an
+ <c>erl_parse</c> tree.</fsummary>
<desc>
- <p>Converts the Erlang data structure <c><anno>Data</anno></c> into an
- abstract form of type <c><anno>AbsTerm</anno></c>.</p>
- <p>The <c><anno>Line</anno></c> option is the line that will
- be assigned to each node of the abstract form.</p>
- <p>The <c><anno>Encoding</anno></c> option is used for
- selecting which integer lists will be considered
- as strings. The default is to use the encoding returned by
- <seealso marker="epp#default_encoding/0">
- <c>epp:default_encoding/0</c></seealso>.
- The value <c>none</c> means that no integer lists will be
- considered as strings. The <c>encoding_func()</c> will be
- called with one integer of a list at a time, and if it
- returns <c>true</c> for every integer the list will be
- considered a string.</p>
+ <p>Modifies the <c>erl_parse</c> tree <c><anno>Abstr</anno></c>
+ by applying <c><anno>Fun</anno></c> on each collection of
+ annotations of the nodes of the <c>erl_parse</c> tree, while
+ at the same time updating an accumulator. The first call to
+ <c><anno>Fun</anno></c> has <c><anno>AccIn</anno></c> as
+ second argument, the returned accumulator
+ <c><anno>AccOut</anno></c> is passed to the next call, and
+ so on. The modified <c>erl_parse</c> tree and the
+ final value of the accumulator are returned. The
+ <c>erl_parse</c> tree is traversed in a depth-first,
+ left-to-right fashion.</p>
</desc>
</func>
+
<func>
- <name name="map_anno" arity="2"/>
- <fsummary>
- Map a function over the annotations of an abstract form
- </fsummary>
+ <name name="new_anno" arity="1"/>
+ <fsummary>Create new annotations.</fsummary>
<desc>
- <p>Modifies the abstract form <anno>Abstr</anno> by applying
- <anno>Fun</anno> on every collection of annotations of the
- abstract form. The abstract form is traversed in a
- depth-first, left-to-right, fashion.
- </p>
+ <p>Assumes that <c><anno>Term</anno></c> is a term with the same
+ structure as a <c>erl_parse</c> tree, but with <seealso
+ marker="erl_anno#type-location">locations</seealso> where a
+ <c>erl_parse</c> tree has collections of annotations.
+ Returns a <c>erl_parse</c> tree where each location <c>L</c>
+ is replaced by the value returned by <seealso
+ marker="erl_anno#new/1"><c>erl_anno:new(L)</c></seealso>.
+ The term <c><anno>Term</anno></c> is traversed in a
+ depth-first, left-to-right fashion.</p>
</desc>
</func>
+
<func>
- <name name="fold_anno" arity="3"/>
- <fsummary>
- Fold a function over the annotations of an abstract form
- </fsummary>
+ <name name="normalise" arity="1"/>
+ <fsummary>Convert abstract form to an Erlang term.</fsummary>
<desc>
- <p>Updates an accumulator by applying <anno>Fun</anno> on
- every collection of annotations of the abstract form
- <anno>Abstr</anno>. The first call to <anno>Fun</anno> has
- <anno>AccIn</anno> as argument, and the returned accumulator
- <anno>AccOut</anno> is passed to the next call, and so on.
- The final value of the accumulator is returned. The abstract
- form is traversed in a depth-first, left-to-right, fashion.
- </p>
+ <p>Converts the abstract form <c><anno>AbsTerm</anno></c> of a
+ term into a conventional Erlang data structure (that is, the
+ term itself). This function is the inverse of
+ <seealso marker="#abstract/1"><c>abstract/1</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="mapfold_anno" arity="3"/>
- <fsummary>
- Map and fold a function over the annotations of an abstract form
- </fsummary>
+ <name name="parse_exprs" arity="1"/>
+ <fsummary>Parse Erlang expressions.</fsummary>
<desc>
- <p>Modifies the abstract form <anno>Abstr</anno> by applying
- <anno>Fun</anno> on every collection of annotations of the
- abstract form, while at the same time updating an
- accumulator. The first call to <anno>Fun</anno> has
- <anno>AccIn</anno> as second argument, and the returned
- accumulator <anno>AccOut</anno> is passed to the next call,
- and so on. The modified abstract form as well as the the
- final value of the accumulator is returned. The abstract
- form is traversed in a depth-first, left-to-right, fashion.
- </p>
+ <p>Parses <c><anno>Tokens</anno></c> as if it was a list of expressions.
+ Returns one of the following:</p>
+ <taglist>
+ <tag><c>{ok, <anno>ExprList</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful. <c><anno>ExprList</anno></c> is a
+ list of the abstract forms of the parsed expressions.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
+ <item>
+ <p>An error occurred.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
- <name name="new_anno" arity="1"/>
- <fsummary>
- Create new annotations
- </fsummary>
+ <name name="parse_form" arity="1"/>
+ <fsummary>Parse an Erlang form.</fsummary>
<desc>
- <p>Creates an abstract form from a term which has the same
- structure as an abstract form, but <seealso
- marker="erl_anno#type-location">locations</seealso> where the
- abstract form has annotations. For each location, <seealso
- marker="erl_anno#new/1"><c>erl_anno:new/1</c></seealso> is
- called, and the annotations replace the location.
- </p>
+ <p>Parses <c><anno>Tokens</anno></c> as if it was a form. Returns one
+ of the following:</p>
+ <taglist>
+ <tag><c>{ok, <anno>AbsForm</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful. <c><anno>AbsForm</anno></c> is the
+ abstract form of the parsed form.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
+ <item>
+ <p>An error occurred.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
- <name name="anno_from_term" arity="1"/>
- <fsummary>
- Return annotations as terms
- </fsummary>
+ <name name="parse_term" arity="1"/>
+ <fsummary>Parse an Erlang term.</fsummary>
<desc>
- <p>Assumes that <anno>Term</anno> is a term with the same
- structure as an abstract form, but with terms, T say, on
- those places where an abstract form has annotations. Returns
- an abstract form where every term T has been replaced by the
- value returned by calling <c>erl_anno:from_term(T)</c>. The
- term <anno>Term</anno> is traversed in a depth-first,
- left-to-right, fashion.
- </p>
+ <p>Parses <c><anno>Tokens</anno></c> as if it was a term. Returns
+ one of the following:</p>
+ <taglist>
+ <tag><c>{ok, <anno>Term</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful. <c><anno>Term</anno></c> is
+ the Erlang term corresponding to the token list.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
+ <item>
+ <p>An error occurred.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
- <name name="anno_to_term" arity="1"/>
- <fsummary>
- Return the representation of annotations
- </fsummary>
+ <name name="tokens" arity="1"/>
+ <name name="tokens" arity="2"/>
+ <fsummary>Generate a list of tokens for an expression.</fsummary>
<desc>
- <p>Returns a term where every collection of annotations Anno of
- <anno>Abstr</anno> has been replaced by the term returned by
- calling <c>erl_anno:to_term(Anno)</c>. The abstract form is
- traversed in a depth-first, left-to-right, fashion.
- </p>
+ <p>Generates a list of tokens representing the abstract
+ form <c><anno>AbsTerm</anno></c> of an expression. Optionally,
+ <c><anno>MoreTokens</anno></c> is appended.</p>
</desc>
</func>
</funcs>
<section>
+ <marker id="errorinfo"/>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO
- modules. It has the format:
- </p>
+ <p><c>ErrorInfo</c> is the standard <c>ErrorInfo</c> structure that is
+ returned from all I/O modules. The format is as follows:</p>
<code type="none">
- {ErrorLine, Module, ErrorDescriptor} </code>
- <p>A string which describes the error is obtained with the following call:
- </p>
+{ErrorLine, Module, ErrorDescriptor}</code>
+ <p>A string describing the error is obtained with the following call:</p>
<code type="none">
- Module:format_error(ErrorDescriptor) </code>
+Module:format_error(ErrorDescriptor)</code>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="io">io(3)</seealso>,
- <seealso marker="erl_anno">erl_anno(3)</seealso>,
- <seealso marker="erl_scan">erl_scan(3)</seealso>,
- <seealso marker="erts:absform">ERTS User's Guide</seealso></p>
+ <p><seealso marker="erl_anno"><c>erl_anno(3)</c></seealso>,
+ <seealso marker="erl_scan"><c>erl_scan(3)</c></seealso>,
+ <seealso marker="io"><c>io(3)</c></seealso>,
+ section <seealso marker="erts:absform">The Abstract Format</seealso>
+ in the ERTS User's Guide</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_pp.xml b/lib/stdlib/doc/src/erl_pp.xml
index 4b8a571c81..77a7f1e8d1 100644
--- a/lib/stdlib/doc/src/erl_pp.xml
+++ b/lib/stdlib/doc/src/erl_pp.xml
@@ -5,9 +5,9 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
+ </copyright>
<legalnotice>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -30,38 +30,37 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-24</date>
+ <date>1997-01-24</date>
<rev>B</rev>
- <file>erl_pp.sgml</file>
+ <file>erl_pp.xml</file>
</header>
<module>erl_pp</module>
- <modulesummary>The Erlang Pretty Printer</modulesummary>
+ <modulesummary>The Erlang pretty printer.</modulesummary>
<description>
<p>The functions in this module are used to generate
aesthetically attractive representations of abstract
- forms, which are suitable for printing. All functions return (possibly deep)
+ forms, which are suitable for printing.
+ All functions return (possibly deep)
lists of characters and generate an error if the form is wrong.</p>
- <p>All functions can have an optional argument which specifies a hook
+
+ <p>All functions can have an optional argument, which specifies a hook
that is called if an attempt is made to print an unknown form.</p>
</description>
+
<datatypes>
<datatype>
<name name="hook_function"/>
<desc>
- <p>The optional argument <marker id="hook_function"/>
- <c>HookFunction</c>, shown in the functions described below,
- defines a function which is called when an unknown form occurs where there
- should be a valid expression.</p>
-
- <p>If <c>HookFunction</c> is equal to <c>none</c> there is no hook
- function.</p>
-
- <p>The called hook function should return a (possibly deep) list
- of characters. <seealso marker="#expr/4"><c>expr/4</c></seealso>
- is useful in a hook.
- </p>
- <p>If <c><anno>CurrentIndentation</anno></c> is negative, there will be no line
- breaks and only a space is used as a separator.</p>
+ <p>Optional argument <marker id="hook_function"/><c>HookFunction</c>,
+ shown in the functions described in this module, defines a function
+ that is called when an unknown form occurs where there
+ is to be a valid expression. If <c>HookFunction</c> is equal to
+ <c>none</c>, there is no hook function.</p>
+ <p>The called hook function is to return a (possibly deep) list of
+ characters. Function <seealso marker="#expr/4"><c>expr/4</c></seealso>
+ is useful in a hook.</p>
+ <p>If <c><anno>CurrentIndentation</anno></c> is negative, there are no
+ line breaks and only a space is used as a separator.</p>
</desc>
</datatype>
<datatype>
@@ -71,78 +70,88 @@
<name name="options"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="form" arity="1"/>
- <name name="form" arity="2"/>
- <fsummary>Pretty print a form</fsummary>
+ <name name="attribute" arity="1"/>
+ <name name="attribute" arity="2"/>
+ <fsummary>Pretty print an attribute.</fsummary>
<desc>
- <p>Pretty prints a
- <c><anno>Form</anno></c> which is an abstract form of a type which is
- returned by <seealso marker="erl_parse#parse_form/1">
- <c>erl_parse:parse_form/1</c></seealso>.</p>
+ <p>Same as <seealso marker="#form/1"><c>form/1,2</c></seealso>,
+ but only for attribute <c><anno>Attribute</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="attribute" arity="1"/>
- <name name="attribute" arity="2"/>
- <fsummary>Pretty print an attribute</fsummary>
+ <name name="expr" arity="1"/>
+ <name name="expr" arity="2"/>
+ <name name="expr" arity="3"/>
+ <name name="expr" arity="4"/>
+ <fsummary>Pretty print one <c>Expression</c>.</fsummary>
<desc>
- <p>The same as <c>form</c>, but only for the attribute
- <c><anno>Attribute</anno></c>.</p>
+ <p>Prints one expression. It is useful for implementing hooks (see
+ section
+ <seealso marker="#knownlimitations">Known Limitations</seealso>).</p>
</desc>
</func>
+
<func>
- <name name="function" arity="1"/>
- <name name="function" arity="2"/>
- <fsummary>Pretty print a function</fsummary>
+ <name name="exprs" arity="1"/>
+ <name name="exprs" arity="2"/>
+ <name name="exprs" arity="3"/>
+ <fsummary>Pretty print <c>Expressions</c>.</fsummary>
<desc>
- <p>The same as <c>form</c>, but only for the function
- <c><anno>Function</anno></c>.</p>
+ <p>Same as <seealso marker="#form/1"><c>form/1,2</c></seealso>,
+ but only for the sequence of
+ expressions in <c><anno>Expressions</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="guard" arity="1"/>
- <name name="guard" arity="2"/>
- <fsummary>Pretty print a guard</fsummary>
+ <name name="form" arity="1"/>
+ <name name="form" arity="2"/>
+ <fsummary>Pretty print a form.</fsummary>
<desc>
- <p>The same as <c>form</c>, but only for the guard test
- <c><anno>Guard</anno></c>.</p>
+ <p>Pretty prints a
+ <c><anno>Form</anno></c>, which is an abstract form of a type that is
+ returned by <seealso marker="erl_parse#parse_form/1">
+ <c>erl_parse:parse_form/1</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="exprs" arity="1"/>
- <name name="exprs" arity="2"/>
- <name name="exprs" arity="3"/>
- <fsummary>Pretty print <c>Expressions</c></fsummary>
+ <name name="function" arity="1"/>
+ <name name="function" arity="2"/>
+ <fsummary>Pretty print a function.</fsummary>
<desc>
- <p>The same as <c>form</c>, but only for the sequence of
- expressions in <c><anno>Expressions</anno></c>.</p>
+ <p>Same as <seealso marker="#form/1"><c>form/1,2</c></seealso>,
+ but only for function <c><anno>Function</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="expr" arity="1"/>
- <name name="expr" arity="2"/>
- <name name="expr" arity="3"/>
- <name name="expr" arity="4"/>
- <fsummary>Pretty print one <c>Expression</c></fsummary>
+ <name name="guard" arity="1"/>
+ <name name="guard" arity="2"/>
+ <fsummary>Pretty print a guard.</fsummary>
<desc>
- <p>This function prints one expression. It is useful for implementing hooks (see below).</p>
+ <p>Same as <seealso marker="#form/1"><c>form/1,2</c></seealso>,
+ but only for the guard test <c><anno>Guard</anno></c>.</p>
</desc>
</func>
</funcs>
<section>
- <title>Bugs</title>
- <p>It should be possible to have hook functions for unknown forms
- at places other than expressions.</p>
+ <marker id="knownlimitations"/>
+ <title>Known Limitations</title>
+ <p>It is not possible to have hook functions for unknown forms
+ at other places than expressions.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="io">io(3)</seealso>,
- <seealso marker="erl_parse">erl_parse(3)</seealso>,
- <seealso marker="erl_eval">erl_eval(3)</seealso></p>
+ <p><seealso marker="erl_eval"><c>erl_eval(3)</c></seealso>,
+ <seealso marker="erl_parse"><c>erl_parse(3)</c></seealso>,
+ <seealso marker="io"><c>io(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_scan.xml b/lib/stdlib/doc/src/erl_scan.xml
index 342f491dd0..137ccd3416 100644
--- a/lib/stdlib/doc/src/erl_scan.xml
+++ b/lib/stdlib/doc/src/erl_scan.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2015</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,51 +28,28 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-24</date>
+ <date>1997-01-24</date>
<rev>B</rev>
- <file>erl_scan.sgml</file>
+ <file>erl_scan.xml</file>
</header>
<module>erl_scan</module>
- <modulesummary>The Erlang Token Scanner</modulesummary>
+ <modulesummary>The Erlang token scanner.</modulesummary>
<description>
- <p>This module contains functions for tokenizing characters into
+ <p>This module contains functions for tokenizing (scanning) characters into
Erlang tokens.</p>
</description>
+
<datatypes>
<datatype>
- <name name="attribute_info"></name>
- </datatype>
- <datatype>
- <name name="attributes"></name>
- </datatype>
- <datatype>
- <name name="attributes_data"></name>
- </datatype>
- <datatype>
<name name="category"></name>
</datatype>
<datatype>
- <name name="column"></name>
- </datatype>
- <datatype>
<name name="error_description"></name>
</datatype>
<datatype>
<name name="error_info"></name>
</datatype>
<datatype>
- <name name="info_line"></name>
- </datatype>
- <datatype>
- <name name="info_location"></name>
- </datatype>
- <datatype>
- <name name="line"></name>
- </datatype>
- <datatype>
- <name name="location"></name>
- </datatype>
- <datatype>
<name name="option"></name>
</datatype>
<datatype>
@@ -88,32 +65,102 @@
<name name="token"></name>
</datatype>
<datatype>
- <name name="token_info"></name>
- </datatype>
- <datatype>
<name name="tokens"></name>
</datatype>
<datatype>
<name name="tokens_result"></name>
</datatype>
</datatypes>
+
<funcs>
<func>
+ <name name="category" arity="1"/>
+ <fsummary>Return the category.</fsummary>
+ <desc>
+ <p>Returns the category of <c><anno>Token</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="column" arity="1"/>
+ <fsummary>Return the column.</fsummary>
+ <desc>
+ <p>Returns the column of <c><anno>Token</anno></c>'s
+ collection of annotations.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="end_location" arity="1"/>
+ <fsummary>Return the end location of the text.</fsummary>
+ <desc>
+ <p>Returns the end location of the text of
+ <c><anno>Token</anno></c>'s collection of annotations. If
+ there is no text, <c>undefined</c> is returned.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="format_error" arity="1"/>
+ <fsummary>Format an error descriptor.</fsummary>
+ <desc>
+ <p>Uses an <c><anno>ErrorDescriptor</anno></c> and returns a string
+ that describes the error or warning. This function is usually
+ called implicitly when an <c>ErrorInfo</c> structure is
+ processed (see section
+ <seealso marker="#errorinfo">Error Information</seealso>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="line" arity="1"/>
+ <fsummary>Return the line.</fsummary>
+ <desc>
+ <p>Returns the line of <c><anno>Token</anno></c>'s collection
+ of annotations.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="location" arity="1"/>
+ <fsummary>Return the location.</fsummary>
+ <desc>
+ <p>Returns the location of <c><anno>Token</anno></c>'s
+ collection of annotations.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="reserved_word" arity="1"/>
+ <fsummary>Test for a reserved word.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c><anno>Atom</anno></c> is an
+ Erlang reserved word, otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="string" arity="1"/>
<name name="string" arity="2"/>
<name name="string" arity="3"/>
- <fsummary>Scan a string and return the Erlang tokens</fsummary>
+ <fsummary>Scan a string and return the Erlang tokens.</fsummary>
<desc>
<p>Takes the list of characters <c><anno>String</anno></c> and tries to
- scan (tokenize) them. Returns <c>{ok, <anno>Tokens</anno>,
- <anno>EndLocation</anno>}</c>,
- where <c><anno>Tokens</anno></c> are the Erlang tokens from
- <c><anno>String</anno></c>. <c><anno>EndLocation</anno></c>
- is the first location after the last token.</p>
- <p><c>{error, <anno>ErrorInfo</anno>, <anno>ErrorLocation</anno>}</c>
- is returned if an error occurs.
- <c><anno>ErrorLocation</anno></c> is the first location after
- the erroneous token.</p>
+ scan (tokenize) them. Returns one of the following:</p>
+ <taglist>
+ <tag><c>{ok, <anno>Tokens</anno>, <anno>EndLocation</anno>}</c></tag>
+ <item>
+ <p><c><anno>Tokens</anno></c> are the Erlang tokens from
+ <c><anno>String</anno></c>. <c><anno>EndLocation</anno></c>
+ is the first location after the last token.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>,
+ <anno>ErrorLocation</anno>}</c></tag>
+ <item>
+ <p>An error occurred. <c><anno>ErrorLocation</anno></c> is the
+ first location after the erroneous token.</p>
+ </item>
+ </taglist>
<p><c>string(<anno>String</anno>)</c> is equivalent to
<c>string(<anno>String</anno>, 1)</c>, and
<c>string(<anno>String</anno>,
@@ -122,82 +169,102 @@
<anno>StartLocation</anno>, [])</c>.</p>
<p><c><anno>StartLocation</anno></c> indicates the initial location
when scanning starts. If <c><anno>StartLocation</anno></c> is a line,
- <c>attributes()</c> as well as <c><anno>EndLocation</anno></c> and
- <c><anno>ErrorLocation</anno></c> will be lines. If
- <c><anno>StartLocation</anno></c> is a pair of a line and a column
- <c>attributes()</c> takes the form of an opaque compound
+ <c>Anno</c>, <c><anno>EndLocation</anno></c>, and
+ <c><anno>ErrorLocation</anno></c> are lines. If
+ <c><anno>StartLocation</anno></c> is a pair of a line and a column,
+ <c>Anno</c> takes the form of an opaque compound
data type, and <c><anno>EndLocation</anno></c> and
<c><anno>ErrorLocation</anno></c>
- will be pairs of a line and a column. The <em>token
- attributes</em> contain information about the column and the
+ are pairs of a line and a column. The <em>token
+ annotations</em> contain information about the column and the
line where the token begins, as well as the text of the
- token (if the <c>text</c> option is given), all of which can
- be accessed by calling <seealso
- marker="#token_info/1">token_info/1,2</seealso>, <seealso
- marker="#attributes_info/1">attributes_info/1,2</seealso>,
- <seealso marker="#column/1">column/1</seealso>,
- <seealso marker="#line/1">line/1</seealso>,
- <seealso marker="#location/1">location/1</seealso>, and
- <seealso marker="#text/1">text/1</seealso>.</p>
+ token (if option <c>text</c> is specified), all of which can
+ be accessed by calling
+ <seealso marker="#column/1"><c>column/1</c></seealso>,
+ <seealso marker="#line/1"><c>line/1</c></seealso>,
+ <seealso marker="#location/1"><c>location/1</c></seealso>, and
+ <seealso marker="#text/1"><c>text/1</c></seealso>.</p>
<p>A <em>token</em> is a tuple containing information about
- syntactic category, the token attributes, and the actual
- terminal symbol. For punctuation characters (e.g. <c>;</c>,
+ syntactic category, the token annotations, and the
+ terminal symbol. For punctuation characters (such as <c>;</c> and
<c>|</c>) and reserved words, the category and the symbol
coincide, and the token is represented by a two-tuple.
- Three-tuples have one of the following forms: <c>{atom,
- Info, atom()}</c>,
- <c>{char, Info, integer()}</c>, <c>{comment, Info,
- string()}</c>, <c>{float, Info, float()}</c>, <c>{integer,
- Info, integer()}</c>, <c>{var, Info, atom()}</c>,
- and <c>{white_space, Info, string()}</c>.</p>
- <p>The valid options are:</p>
+ Three-tuples have one of the following forms:</p>
+ <list type="bulleted">
+ <item><c>{atom, Anno, atom()}</c></item>
+ <item><c>{char, Anno, char()}</c></item>
+ <item><c>{comment, Anno, string()}</c></item>
+ <item><c>{float, Anno, float()}</c></item>
+ <item><c>{integer, Anno, integer()}</c></item>
+ <item><c>{var, Anno, atom()}</c></item>
+ <item><c>{white_space, Anno, string()}</c></item>
+ </list>
+ <p>Valid options:</p>
<taglist>
- <tag><c>{reserved_word_fun, reserved_word_fun()}</c></tag>
- <item><p>A callback function that is called when the scanner
- has found an unquoted atom. If the function returns
- <c>true</c>, the unquoted atom itself will be the category
- of the token; if the function returns <c>false</c>,
- <c>atom</c> will be the category of the unquoted atom.</p>
- </item>
- <tag><c>return_comments</c></tag>
- <item><p>Return comment tokens.</p>
- </item>
- <tag><c>return_white_spaces</c></tag>
- <item><p>Return white space tokens. By convention, if there is
- a newline character, it is always the first character of the
- text (there cannot be more than one newline in a white space
- token).</p>
- </item>
- <tag><c>return</c></tag>
- <item><p>Short for <c>[return_comments, return_white_spaces]</c>.</p>
- </item>
- <tag><c>text</c></tag>
- <item><p>Include the token's text in the token attributes. The
- text is the part of the input corresponding to the token.</p>
- </item>
+ <tag><c>{reserved_word_fun, reserved_word_fun()}</c></tag>
+ <item><p>A callback function that is called when the scanner
+ has found an unquoted atom. If the function returns
+ <c>true</c>, the unquoted atom itself becomes the category
+ of the token. If the function returns <c>false</c>,
+ <c>atom</c> becomes the category of the unquoted atom.</p>
+ </item>
+ <tag><c>return_comments</c></tag>
+ <item><p>Return comment tokens.</p>
+ </item>
+ <tag><c>return_white_spaces</c></tag>
+ <item><p>Return white space tokens. By convention, a newline
+ character, if present, is always the first character of the
+ text (there cannot be more than one newline in a white space
+ token).</p>
+ </item>
+ <tag><c>return</c></tag>
+ <item><p>Short for <c>[return_comments, return_white_spaces]</c>.</p>
+ </item>
+ <tag><c>text</c></tag>
+ <item><p>Include the token text in the token annotation. The
+ text is the part of the input corresponding to the token.</p>
+ </item>
</taglist>
</desc>
</func>
+
+ <func>
+ <name name="symbol" arity="1"/>
+ <fsummary>Return the symbol.</fsummary>
+ <desc>
+ <p>Returns the symbol of <c><anno>Token</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="text" arity="1"/>
+ <fsummary>Return the text.</fsummary>
+ <desc>
+ <p>Returns the text of <c><anno>Token</anno></c>'s collection
+ of annotations. If there is no text, <c>undefined</c> is
+ returned.</p>
+ </desc>
+ </func>
+
<func>
<name name="tokens" arity="3"/>
<name name="tokens" arity="4"/>
- <fsummary>Re-entrant scanner</fsummary>
+ <fsummary>Re-entrant scanner.</fsummary>
<type name="char_spec"/>
<type name="return_cont"/>
- <type_desc name="return_cont">An opaque continuation</type_desc>
+ <type_desc name="return_cont">An opaque continuation.</type_desc>
<desc>
- <p>This is the re-entrant scanner which scans characters until
- a <em>dot</em> ('.' followed by a white space) or
- <c>eof</c> has been reached. It returns:</p>
+ <p>This is the re-entrant scanner, which scans characters until
+ either a <em>dot</em> ('.' followed by a white space) or
+ <c>eof</c> is reached. It returns:</p>
<taglist>
<tag><c>{done, <anno>Result</anno>, <anno>LeftOverChars</anno>}</c>
</tag>
<item>
- <p>This return indicates that there is sufficient input
+ <p>Indicates that there is sufficient input
data to get a result. <c><anno>Result</anno></c> is:</p>
<taglist>
- <tag><c>{ok, Tokens, EndLocation}</c>
- </tag>
+ <tag><c>{ok, Tokens, EndLocation}</c></tag>
<item>
<p>The scanning was successful. <c>Tokens</c>
is the list of tokens including <em>dot</em>.</p>
@@ -206,8 +273,7 @@
<item>
<p>End of file was encountered before any more tokens.</p>
</item>
- <tag><c>{error, ErrorInfo, EndLocation}</c>
- </tag>
+ <tag><c>{error, ErrorInfo, EndLocation}</c></tag>
<item>
<p>An error occurred. <c><anno>LeftOverChars</anno></c>
is the remaining characters of the input data,
@@ -223,254 +289,26 @@
</item>
</taglist>
<p>The <c><anno>CharSpec</anno></c> <c>eof</c> signals end of file.
- <c><anno>LeftOverChars</anno></c> will then take the value <c>eof</c>
+ <c><anno>LeftOverChars</anno></c> then takes the value <c>eof</c>
as well.</p>
<p><c>tokens(<anno>Continuation</anno>, <anno>CharSpec</anno>,
<anno>StartLocation</anno>)</c> is equivalent to
<c>tokens(<anno>Continuation</anno>, <anno>CharSpec</anno>,
<anno>StartLocation</anno>, [])</c>.</p>
- <p>See <seealso marker="#string/3">string/3</seealso> for a
- description of the various options.</p>
- </desc>
- </func>
- <func>
- <name name="reserved_word" arity="1"/>
- <fsummary>Test for a reserved word</fsummary>
- <desc>
- <p>Returns <c>true</c> if <c><anno>Atom</anno></c> is an Erlang
- reserved word, otherwise <c>false</c>.</p>
- </desc>
- </func>
- <func>
- <name name="category" arity="1"/>
- <fsummary>Return the category</fsummary>
- <desc>
- <p>Returns the category of <c><anno>Token</anno></c>.
- </p>
- </desc>
- </func>
- <func>
- <name name="symbol" arity="1"/>
- <fsummary>Return the symbol</fsummary>
- <desc>
- <p>Returns the symbol of <c><anno>Token</anno></c>.
- </p>
- </desc>
- </func>
- <func>
- <name name="column" arity="1"/>
- <fsummary>Return the column</fsummary>
- <desc>
- <p>Returns the column of <c><anno>Token</anno></c>'s
- collection of annotations.
- </p>
- </desc>
- </func>
- <func>
- <name name="end_location" arity="1"/>
- <fsummary>Return the end location of the text</fsummary>
- <desc>
- <p>Returns the end location of the text of
- <c><anno>Token</anno></c>'s collection of annotations. If
- there is no text,
- <c>undefined</c> is returned.
- </p>
- </desc>
- </func>
- <func>
- <name name="line" arity="1"/>
- <fsummary>Return the line</fsummary>
- <desc>
- <p>Returns the line of <c><anno>Token</anno></c>'s collection
- of annotations.
- </p>
- </desc>
- </func>
- <func>
- <name name="location" arity="1"/>
- <fsummary>Return the location</fsummary>
- <desc>
- <p>Returns the location of <c><anno>Token</anno></c>'s
- collection of annotations.
- </p>
- </desc>
- </func>
- <func>
- <name name="text" arity="1"/>
- <fsummary>Return the text</fsummary>
- <desc>
- <p>Returns the text of <c><anno>Token</anno></c>'s collection
- of annotations. If there is no text, <c>undefined</c> is
- returned.
- </p>
- </desc>
- </func>
- <func>
- <name name="token_info" arity="1"/>
- <fsummary>Return information about a token</fsummary>
- <desc>
- <p>Returns a list containing information about the token
- <c><anno>Token</anno></c>. The order of the
- <c><anno>TokenInfoTuple</anno></c>s is not
- defined. See <seealso
- marker="#token_info/2">token_info/2</seealso> for
- information about specific
- <c><anno>TokenInfoTuple</anno></c>s.</p>
- <p>Note that if <c>token_info(Token, TokenItem)</c> returns
- <c>undefined</c> for some <c>TokenItem</c>, the
- item is not included in <c><anno>TokenInfo</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="token_info" arity="2" clause_i="1"/>
- <name name="token_info" arity="2" clause_i="2"/>
- <fsummary>Return information about a token</fsummary>
- <type name="token_item"/>
- <type name="attribute_item"/>
- <desc>
- <p>Returns a list containing information about the token
- <c><anno>Token</anno></c>. If one single
- <c><anno>TokenItem</anno></c> is given the returned value is
- the corresponding
- <c>TokenInfoTuple</c>, or <c>undefined</c> if the
- <c>TokenItem</c> has no value. If a list of
- <c><anno>TokenItem</anno></c>s is given the result is a list of
- <c><anno>TokenInfoTuple</anno></c>. The
- <c><anno>TokenInfoTuple</anno></c>s will
- appear with the corresponding <c><anno>TokenItem</anno></c>s in
- the same order as the <c><anno>TokenItem</anno></c>s
- appear in the list of <c>TokenItem</c>s.
- <c><anno>TokenItem</anno></c>s with no value are not included
- in the list of <c><anno>TokenInfoTuple</anno></c>.</p>
- <p>The following <c><anno>TokenInfoTuple</anno></c>s with corresponding
- <c><anno>TokenItem</anno></c>s are valid:</p>
- <taglist>
- <tag><c>{category, </c><seealso marker="#type-category">
- category()</seealso><c>}</c></tag>
- <item><p>The category of the token.</p>
- </item>
- <tag><c>{column, </c><seealso marker="#type-column">
- column()</seealso><c>}</c></tag>
- <item><p>The column where the token begins.</p>
- </item>
- <tag><c>{length, integer() > 0}</c></tag>
- <item><p>The length of the token's text.</p>
- </item>
- <tag><c>{line, </c><seealso marker="#type-line">
- line()</seealso><c>}</c></tag>
- <item><p>The line where the token begins.</p>
- </item>
- <tag><c>{location, </c><seealso marker="#type-location">
- location()</seealso><c>}</c></tag>
- <item><p>The line and column where the token begins, or
- just the line if the column unknown.</p>
- </item>
- <tag><c>{symbol, </c><seealso marker="#type-symbol">
- symbol()</seealso><c>}</c></tag>
- <item><p>The token's symbol.</p>
- </item>
- <tag><c>{text, string()}</c></tag>
- <item><p>The token's text.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="attributes_info" arity="1"/>
- <fsummary>Return information about token attributes</fsummary>
- <desc>
- <p>Returns a list containing information about the token
- attributes <c><anno>Attributes</anno></c>. The order of the
- <c><anno>AttributeInfoTuple</anno></c>s is not defined.
- See <seealso
- marker="#attributes_info/2">attributes_info/2</seealso> for
- information about specific
- <c><anno>AttributeInfoTuple</anno></c>s.</p>
- <p>Note that if <c>attributes_info(Token, AttributeItem)</c>
- returns <c>undefined</c> for some <c>AttributeItem</c> in
- the list above, the item is not included in
- <c><anno>AttributesInfo</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="attributes_info" arity="2" clause_i="1"/>
- <name name="attributes_info" arity="2" clause_i="2"/>
- <fsummary>Return information about a token attributes</fsummary>
- <type name="attribute_item"/>
- <desc>
- <p>Returns a list containing information about the token
- attributes <c><anno>Attributes</anno></c>. If one single
- <c><anno>AttributeItem</anno></c> is given the returned value is the
- corresponding <c><anno>AttributeInfoTuple</anno></c>,
- or <c>undefined</c> if the <c><anno>AttributeItem</anno></c>
- has no value. If a list of <c><anno>AttributeItem</anno></c>
- is given the result is a list of
- <c><anno>AttributeInfoTuple</anno></c>.
- The <c><anno>AttributeInfoTuple</anno></c>s
- will appear with the corresponding <c><anno>AttributeItem</anno></c>s
- in the same order as the <c><anno>AttributeItem</anno></c>s
- appear in the list of <c><anno>AttributeItem</anno></c>s.
- <c><anno>AttributeItem</anno></c>s with no
- value are not included in the list of
- <c><anno>AttributeInfoTuple</anno></c>.</p>
- <p>The following <c><anno>AttributeInfoTuple</anno></c>s with
- corresponding <c><anno>AttributeItem</anno></c>s are valid:</p>
- <taglist>
- <tag><c>{column, </c><seealso marker="#type-column">
- column()</seealso><c>}</c></tag>
- <item><p>The column where the token begins.</p>
- </item>
- <tag><c>{length, integer() > 0}</c></tag>
- <item><p>The length of the token's text.</p>
- </item>
- <tag><c>{line, </c><seealso marker="#type-line">
- line()</seealso><c>}</c></tag>
- <item><p>The line where the token begins.</p>
- </item>
- <tag><c>{location, </c><seealso marker="#type-location">
- location()</seealso><c>}</c></tag>
- <item><p>The line and column where the token begins, or
- just the line if the column unknown.</p>
- </item>
- <tag><c>{text, string()}</c></tag>
- <item><p>The token's text.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="set_attribute" arity="3"/>
- <fsummary>Set a token attribute value</fsummary>
- <desc>
- <p>Sets the value of the <c>line</c> attribute of the token
- attributes <c><anno>Attributes</anno></c>.</p>
- <p>The <c><anno>SetAttributeFun</anno></c> is called with the value of
- the <c>line</c> attribute, and is to return the new value of
- the <c>line</c> attribute.</p>
- </desc>
- </func>
- <func>
- <name name="format_error" arity="1"/>
- <fsummary>Format an error descriptor</fsummary>
- <desc>
- <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns
- a string which
- describes the error or warning. This function is usually
- called implicitly when processing an <c>ErrorInfo</c>
- structure (see below).</p>
+ <p>For a description of the options, see
+ <seealso marker="#string/3"><c>string/3</c></seealso>.</p>
</desc>
</func>
</funcs>
<section>
+ <marker id="errorinfo"/>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO
- modules. It has the following format:</p>
+ <p><c>ErrorInfo</c> is the standard <c>ErrorInfo</c> structure that is
+ returned from all I/O modules. The format is as follows:</p>
<code type="none">
{ErrorLocation, Module, ErrorDescriptor}</code>
- <p>A string which describes the error is obtained with the
- following call:</p>
+ <p>A string describing the error is obtained with the following call:</p>
<code type="none">
Module:format_error(ErrorDescriptor)</code>
</section>
@@ -478,15 +316,15 @@ Module:format_error(ErrorDescriptor)</code>
<section>
<title>Notes</title>
<p>The continuation of the first call to the re-entrant input
- functions must be <c>[]</c>. Refer to Armstrong, Virding and
- Williams, 'Concurrent Programming in Erlang', Chapter 13, for a
- complete description of how the re-entrant input scheme works.</p>
+ functions must be <c>[]</c>. For a complete description of how the
+ re-entrant input scheme works, see Armstrong, Virding and
+ Williams: 'Concurrent Programming in Erlang', Chapter 13.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="io">io(3)</seealso>,
- <seealso marker="erl_anno">erl_anno(3)</seealso>,
- <seealso marker="erl_parse">erl_parse(3)</seealso></p>
+ <p><seealso marker="erl_anno"><c>erl_anno(3)</c></seealso>,
+ <seealso marker="erl_parse"><c>erl_parse(3)</c></seealso>,
+ <seealso marker="io"><c>io(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_tar.xml b/lib/stdlib/doc/src/erl_tar.xml
index 898b55df72..24e7b64b9e 100644
--- a/lib/stdlib/doc/src/erl_tar.xml
+++ b/lib/stdlib/doc/src/erl_tar.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,117 +28,146 @@
<docno>1</docno>
<approved>Kenneth Lundin</approved>
<checked></checked>
- <date>03-01-21</date>
+ <date>2003-01-21</date>
<rev>A</rev>
- <file>erl_tar.sgml</file>
+ <file>erl_tar.xml</file>
</header>
<module>erl_tar</module>
- <modulesummary>Unix 'tar' utility for reading and writing tar archives</modulesummary>
+ <modulesummary>Unix 'tar' utility for reading and writing tar archives.
+ </modulesummary>
<description>
- <p>The <c>erl_tar</c> module archives and extract files to and from
- a tar file. <c>erl_tar</c> supports the <c>ustar</c> format
+ <p>This module archives and extract files to and from
+ a tar file. This module supports the <c>ustar</c> format
(IEEE Std 1003.1 and ISO/IEC&nbsp;9945-1). All modern <c>tar</c>
programs (including GNU tar) can read this format. To ensure that
that GNU tar produces a tar file that <c>erl_tar</c> can read,
- give the <c>--format=ustar</c> option to GNU tar.</p>
- <p>By convention, the name of a tar file should end in "<c>.tar</c>".
- To abide to the convention, you'll need to add "<c>.tar</c>" yourself
- to the name.</p>
- <p>Tar files can be created in one operation using the
- <seealso marker="#create_2">create/2</seealso> or
- <seealso marker="#create_3">create/3</seealso> function.</p>
- <p>Alternatively, for more control, the
- <seealso marker="#open">open</seealso>,
- <seealso marker="#add">add/3,4</seealso>, and
- <seealso marker="#close">close/1</seealso> functions can be used.</p>
- <p>To extract all files from a tar file, use the
- <seealso marker="#extract_1">extract/1</seealso> function.
+ specify option <c>--format=ustar</c> to GNU tar.</p>
+
+ <p>By convention, the name of a tar file is to end in "<c>.tar</c>".
+ To abide to the convention, add "<c>.tar</c>" to the name.</p>
+
+ <p>Tar files can be created in one operation using function
+ <seealso marker="#create/2"><c>create/2</c></seealso> or
+ <seealso marker="#create/3"><c>create/3</c></seealso>.</p>
+
+ <p>Alternatively, for more control, use functions
+ <seealso marker="#open/2"><c>open/2</c></seealso>,
+ <seealso marker="#add/3"><c>add/3,4</c></seealso>, and
+ <seealso marker="#close/1"><c>close/1</c></seealso>.</p>
+
+ <p>To extract all files from a tar file, use function
+ <seealso marker="#extract/1"><c>extract/1</c></seealso>.
To extract only some files or to be able to specify some more options,
- use the <seealso marker="#extract_2">extract/2</seealso> function.</p>
+ use function <seealso marker="#extract/2"><c>extract/2</c></seealso>.</p>
+
<p>To return a list of the files in a tar file,
- use either the <seealso marker="#table_1">table/1</seealso> or
- <seealso marker="#table_2">table/2</seealso> function.
+ use function <seealso marker="#table/1"><c>table/1</c></seealso> or
+ <seealso marker="#table/2"><c>table/2</c></seealso>.
To print a list of files to the Erlang shell,
- use either the <seealso marker="#t_1">t/1</seealso> or
- <seealso marker="#tt_1">tt/1</seealso> function.</p>
+ use function <seealso marker="#t/1"><c>t/1</c></seealso> or
+ <seealso marker="#tt/1"><c>tt/1</c></seealso>.</p>
+
<p>To convert an error term returned from one of the functions
- above to a readable message, use the
- <seealso marker="#format_error_1">format_error/1</seealso> function.</p>
+ above to a readable message, use function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.</p>
</description>
<section>
- <title>UNICODE SUPPORT</title>
- <p>If <seealso
- marker="kernel:file#native_name_encoding/0">file:native_name_encoding/0</seealso>
- returns <c>utf8</c>, path names will be encoded in UTF-8 when
- creating tar files and path names will be assumed to be encoded in
- UTF-8 when extracting tar files.</p>
+ <title>Unicode Support</title>
+ <p>If <seealso marker="kernel:file#native_name_encoding/0">
+ <c>file:native_name_encoding/0</c></seealso>
+ returns <c>utf8</c>, path names are encoded in UTF-8 when
+ creating tar files, and path names are assumed to be encoded in
+ UTF-8 when extracting tar files.</p>
- <p>If <seealso
- marker="kernel:file#native_name_encoding/0">file:native_name_encoding/0</seealso>
- returns <c>latin1</c>, no translation of path names will be
- done.</p>
+ <p>If <seealso marker="kernel:file#native_name_encoding/0">
+ <c>file:native_name_encoding/0</c></seealso>
+ returns <c>latin1</c>, no translation of path names is done.</p>
</section>
<section>
- <title>OTHER STORAGE MEDIA</title>
- <p>The <c>erl_ftp</c> module normally accesses the tar-file on disk using the <seealso marker="kernel:file">file module</seealso>. When other needs arise, there is a way to define your own low-level Erlang functions to perform the writing and reading on the storage media. See <seealso marker="#init/3">init/3</seealso> for usage.</p>
- <p>An example of this is the sftp support in <seealso marker="ssh:ssh_sftp#open_tar/3">ssh_sftp:open_tar/3</seealso>. That function opens a tar file on a remote machine using an sftp channel.</p>
+ <title>Other Storage Media</title>
+ <p>The <seealso marker="inets:ftp"><c>ftp</c></seealso>
+ module (Inets) normally accesses the tar file on disk using
+ the <seealso marker="kernel:file"><c>file</c></seealso> module.
+ When other needs arise, you can define your own low-level Erlang
+ functions to perform the writing and reading on the storage media;
+ use function <seealso marker="#init/3"><c>init/3</c></seealso>.</p>
+
+ <p>An example of this is the SFTP support in
+ <seealso marker="ssh:ssh_sftp#open_tar/3">
+ <c>ssh_sftp:open_tar/3</c></seealso>. This function opens a tar file
+ on a remote machine using an SFTP channel.</p>
</section>
<section>
- <title>LIMITATIONS</title>
- <p>For maximum compatibility, it is safe to archive files with names
- up to 100 characters in length. Such tar files can generally be
- extracted by any <c>tar</c> program.</p>
- <p>If filenames exceed 100 characters in length, the resulting tar
- file can only be correctly extracted by a POSIX-compatible <c>tar</c>
- program (such as Solaris <c>tar</c>), not by GNU tar.</p>
- <p>File have longer names than 256 bytes cannot be stored at all.</p>
- <p>The filename of the file a symbolic link points is always limited
- to 100 characters.</p>
+ <title>Limitations</title>
+ <list type="bulleted">
+ <item>
+ <p>For maximum compatibility, it is safe to archive files with names
+ up to 100 characters in length. Such tar files can generally be
+ extracted by any <c>tar</c> program.</p>
+ </item>
+ <item>
+ <p>For filenames exceeding 100 characters in length, the resulting tar
+ file can only be correctly extracted by a POSIX-compatible <c>tar</c>
+ program (such as Solaris <c>tar</c> or a modern GNU <c>tar</c>).</p>
+ </item>
+ <item>
+ <p>Files with longer names than 256 bytes cannot be stored.</p>
+ </item>
+ <item>
+ <p>The file name a symbolic link points is always limited
+ to 100 characters.</p>
+ </item>
+ </list>
</section>
+
<funcs>
<func>
<name>add(TarDescriptor, Filename, Options) -> RetValue</name>
- <fsummary>Add a file to an open tar file</fsummary>
+ <fsummary>Add a file to an open tar file.</fsummary>
<type>
<v>TarDescriptor = term()</v>
<v>Filename = filename()</v>
<v>Options = [Option]</v>
<v>Option = dereference|verbose|{chunks,ChunkSize}</v>
- <v>ChunkSize = positive_integer()</v>
+ <v>ChunkSize = positive_integer()</v>
<v>RetValue = ok|{error,{Filename,Reason}}</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="add"></marker><c>add/3</c> function adds
- a file to a tar file that has been opened for writing by
- <seealso marker="#open">open/1</seealso>.</p>
+ <p>Adds a file to a tar file that has been opened for writing by
+ <seealso marker="#open/2"><c>open/1</c></seealso>.</p>
+ <p>Options:</p>
<taglist>
<tag><c>dereference</c></tag>
<item>
- <p>By default, symbolic links will be stored as symbolic links
- in the tar file. Use the <c>dereference</c> option to override the
- default and store the file that the symbolic link points to into
- the tar file.</p>
+ <p>By default, symbolic links are stored as symbolic links
+ in the tar file. To override the default and store the file
+ that the symbolic link points to into the tar file, use
+ option <c>dereference</c>.</p>
</item>
<tag><c>verbose</c></tag>
<item>
- <p>Print an informational message about the file being added.</p>
+ <p>Prints an informational message about the added file.</p>
+ </item>
+ <tag><c>{chunks,ChunkSize}</c></tag>
+ <item>
+ <p>Reads data in parts from the file. This is intended for
+ memory-limited machines that, for example, builds a tar file
+ on a remote machine over SFTP, see
+ <seealso marker="ssh:ssh_sftp#open_tar/3">
+ <c>ssh_sftp:open_tar/3</c></seealso>.</p>
</item>
- <tag><c>{chunks,ChunkSize}</c></tag>
- <item>
- <p>Read data in parts from the file. This is intended for memory-limited
- machines that for example builds a tar file on a remote machine over
- <seealso marker="ssh:ssh_sftp#open_tar/3">sftp</seealso>.</p>
- </item>
</taglist>
</desc>
</func>
+
<func>
- <name>add(TarDescriptor, FilenameOrBin, NameInArchive, Options) -> RetValue </name>
- <fsummary>Add a file to an open tar file</fsummary>
+ <name>add(TarDescriptor, FilenameOrBin, NameInArchive, Options) ->
+ RetValue </name>
+ <fsummary>Add a file to an open tar file.</fsummary>
<type>
<v>TarDescriptor = term()</v>
<v>FilenameOrBin = filename()|binary()</v>
@@ -150,53 +179,55 @@
<v>Reason = term()</v>
</type>
<desc>
- <p>The <c>add/4</c> function adds a file to a tar file
- that has been opened for writing by
- <seealso marker="#open">open/1</seealso>. It accepts the same
- options as <seealso marker="#add">add/3</seealso>.</p>
- <p><c>NameInArchive</c> is the name under which the file will
- be stored in the tar file. That is the name that the file will
- get when it will be extracted from the tar file.</p>
+ <p>Adds a file to a tar file that has been opened for writing by
+ <seealso marker="#open/2"><c>open/2</c></seealso>. This function
+ accepts the same options as
+ <seealso marker="#add/3"><c>add/3</c></seealso>.</p>
+ <p><c>NameInArchive</c> is the name under which the file becomes
+ stored in the tar file. The file gets this name when it is
+ extracted from the tar file.</p>
</desc>
</func>
+
<func>
<name>close(TarDescriptor)</name>
- <fsummary>Close an open tar file</fsummary>
+ <fsummary>Close an open tar file.</fsummary>
<type>
<v>TarDescriptor = term()</v>
</type>
<desc>
- <p>The <marker id="close"></marker><c>close/1</c> function
- closes a tar file
- opened by <seealso marker="#open">open/1</seealso>.</p>
+ <p>Closes a tar file
+ opened by <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>create(Name, FileList) ->RetValue </name>
- <fsummary>Create a tar archive</fsummary>
+ <fsummary>Create a tar archive.</fsummary>
<type>
<v>Name = filename()</v>
- <v>FileList = [Filename|{NameInArchive, binary()},{NameInArchive, Filename}]</v>
+ <v>FileList = [Filename|{NameInArchive, binary()},{NameInArchive,
+ Filename}]</v>
<v>Filename = filename()</v>
<v>NameInArchive = filename()</v>
<v>RetValue = ok|{error,{Name,Reason}}</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="create_2"></marker><c>create/2</c> function
- creates a tar file and
- archives the files whose names are given in <c>FileList</c> into it.
- The files may either be read from disk or given as
- binaries.</p>
+ <p>Creates a tar file and archives the files whose names are specified
+ in <c>FileList</c> into it. The files can either be read from disk
+ or be specified as binaries.</p>
</desc>
</func>
+
<func>
<name>create(Name, FileList, OptionList)</name>
- <fsummary>Create a tar archive with options</fsummary>
+ <fsummary>Create a tar archive with options.</fsummary>
<type>
<v>Name = filename()</v>
- <v>FileList = [Filename|{NameInArchive, binary()},{NameInArchive, Filename}]</v>
- <v>Filename = filename()</v>
+ <v>FileList = [Filename|{NameInArchive, binary()},{NameInArchive,
+ Filename}]</v>
+ <v>Filename = filename()</v>
<v>NameInArchive = filename()</v>
<v>OptionList = [Option]</v>
<v>Option = compressed|cooked|dereference|verbose</v>
@@ -204,68 +235,66 @@
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="create_3"></marker><c>create/3</c> function
- creates a tar file and archives the files whose names are given
- in <c>FileList</c> into it. The files may either be read from
- disk or given as binaries.</p>
- <p>The options in <c>OptionList</c> modify the defaults as follows.
- </p>
+ <p>Creates a tar file and archives the files whose names are specified
+ in <c>FileList</c> into it. The files can either be read from disk
+ or be specified as binaries.</p>
+ <p>The options in <c>OptionList</c> modify the defaults as follows:</p>
<taglist>
<tag><c>compressed</c></tag>
<item>
- <p>The entire tar file will be compressed, as if it has
+ <p>The entire tar file is compressed, as if it has
been run through the <c>gzip</c> program. To abide to the
- convention that a compressed tar file should end in "<c>.tar.gz</c>" or
- "<c>.tgz</c>", you'll need to add the appropriate extension yourself.</p>
+ convention that a compressed tar file is to end in
+ "<c>.tar.gz</c>" or "<c>.tgz</c>", add the appropriate
+ extension.</p>
</item>
<tag><c>cooked</c></tag>
<item>
- <p>By default, the <c>open/2</c> function will open the tar file
- in <c>raw</c> mode, which is faster but does not allow a remote (erlang)
- file server to be used. Adding <c>cooked</c> to the mode list will
- override the default and open the tar file without the <c>raw</c>
- option.</p>
+ <p>By default, function <c>open/2</c> opens the tar file in
+ <c>raw</c> mode, which is faster but does not allow a remote
+ (Erlang) file server to be used. Adding <c>cooked</c> to the
+ mode list overrides the default and opens the tar file without
+ option <c>raw</c>.</p>
</item>
<tag><c>dereference</c></tag>
<item>
- <p>By default, symbolic links will be stored as symbolic links
- in the tar file. Use the <c>dereference</c> option to override the
- default and store the file that the symbolic link points to into
- the tar file.</p>
+ <p>By default, symbolic links are stored as symbolic links in
+ the tar file. To override the default and store the file that
+ the symbolic link points to into the tar file, use
+ option <c>dereference</c>.</p>
</item>
<tag><c>verbose</c></tag>
<item>
- <p>Print an informational message about each file being added.</p>
+ <p>Prints an informational message about each added file.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name>extract(Name) -> RetValue</name>
- <fsummary>Extract all files from a tar file</fsummary>
+ <fsummary>Extract all files from a tar file.</fsummary>
<type>
<v>Name = filename()</v>
<v>RetValue = ok|{error,{Name,Reason}}</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="extract_1"></marker><c>extract/1</c> function
- extracts all files from a tar archive.</p>
- <p>If the <c>Name</c> argument is given as "<c>{binary,Binary}</c>",
- the contents of the binary is assumed to be a tar archive.
- </p>
- <p>If the <c>Name</c> argument is given as "<c>{file,Fd}</c>",
- <c>Fd</c> is assumed to be a file descriptor returned from
- the <c>file:open/2</c> function.
- </p>
- <p>Otherwise, <c>Name</c> should be a filename.</p>
+ <p>Extracts all files from a tar archive.</p>
+ <p>If argument <c>Name</c> is specified as <c>{binary,Binary}</c>,
+ the contents of the binary is assumed to be a tar archive.</p>
+ <p>If argument <c>Name</c> is specified as <c>{file,Fd}</c>,
+ <c>Fd</c> is assumed to be a file descriptor returned from function
+ <c>file:open/2</c>.</p>
+ <p>Otherwise, <c>Name</c> is to be a filename.</p>
</desc>
</func>
+
<func>
<name>extract(Name, OptionList)</name>
- <fsummary>Extract files from a tar file</fsummary>
+ <fsummary>Extract files from a tar file.</fsummary>
<type>
- <v>Name = filename() | {binary,Binary} | {file,Fd} </v>
+ <v>Name = filename() | {binary,Binary} | {file,Fd}</v>
<v>Binary = binary()</v>
<v>Fd = file_descriptor()</v>
<v>OptionList = [Option]</v>
@@ -278,272 +307,263 @@
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="extract_2"></marker><c>extract/2</c> function
- extracts files from a tar archive.</p>
- <p>If the <c>Name</c> argument is given as "<c>{binary,Binary}</c>",
- the contents of the binary is assumed to be a tar archive.
- </p>
- <p>If the <c>Name</c> argument is given as "<c>{file,Fd}</c>",
- <c>Fd</c> is assumed to be a file descriptor returned from
- the <c>file:open/2</c> function.
- </p>
- <p>Otherwise, <c>Name</c> should be a filename.
- </p>
+ <p>Extracts files from a tar archive.</p>
+ <p>If argument <c>Name</c> is specified as <c>{binary,Binary}</c>,
+ the contents of the binary is assumed to be a tar archive.</p>
+ <p>If argument <c>Name</c> is specified as <c>{file,Fd}</c>,
+ <c>Fd</c> is assumed to be a file descriptor returned from function
+ <c>file:open/2</c>.</p>
+ <p>Otherwise, <c>Name</c> is to be a filename.</p>
<p>The following options modify the defaults for the extraction as
- follows.</p>
+ follows:</p>
<taglist>
<tag><c>{cwd,Cwd}</c></tag>
<item>
- <p>Files with relative filenames will by default be extracted
- to the current working directory.
- Given the <c>{cwd,Cwd}</c> option, the <c>extract/2</c> function
- will extract into the directory <c>Cwd</c> instead of to the current
- working directory.</p>
+ <p>Files with relative filenames are by default extracted
+ to the current working directory. With this option, files are
+ instead extracted into directory <c>Cwd</c>.</p>
</item>
<tag><c>{files,FileList}</c></tag>
<item>
- <p>By default, all files will be extracted from the tar file.
- Given the <c>{files,Files}</c> option, the <c>extract/2</c> function
- will only extract the files whose names are included in <c>FileList</c>.</p>
+ <p>By default, all files are extracted from the tar file. With
+ this option, only those files are extracted whose names are
+ included in <c>FileList</c>.</p>
</item>
<tag><c>compressed</c></tag>
<item>
- <p>Given the <c>compressed</c> option, the <c>extract/2</c>
- function will uncompress the file while extracting
- If the tar file is not actually compressed, the <c>compressed</c>
- will effectively be ignored.</p>
+ <p>With this option, the file is uncompressed while extracting.
+ If the tar file is not compressed, this option is ignored.</p>
</item>
<tag><c>cooked</c></tag>
<item>
- <p>By default, the <c>open/2</c> function will open the tar file
- in <c>raw</c> mode, which is faster but does not allow a remote (erlang)
- file server to be used. Adding <c>cooked</c> to the mode list will
- override the default and open the tar file without the <c>raw</c>
- option.</p>
+ <p>By default, function <c>open/2</c> function opens the tar file
+ in <c>raw</c> mode, which is faster but does not allow a remote
+ (Erlang) file server to be used. Adding <c>cooked</c> to the mode
+ list overrides the default and opens the tar file without option
+ <c>raw</c>.</p>
</item>
<tag><c>memory</c></tag>
<item>
- <p>Instead of extracting to a directory, the memory option will
- give the result as a list of tuples {Filename, Binary}, where
- Binary is a binary containing the extracted data of the file named
- Filename in the tar file.</p>
+ <p>Instead of extracting to a directory, this option gives the
+ result as a list of tuples <c>{Filename, Binary}</c>, where
+ <c>Binary</c> is a binary containing the extracted data of the
+ file named <c>Filename</c> in the tar file.</p>
</item>
<tag><c>keep_old_files</c></tag>
<item>
- <p>By default, all existing files with the same name as file in
- the tar file will be overwritten
- Given the <c>keep_old_files</c> option, the <c>extract/2</c> function
- will not overwrite any existing files.</p>
+ <p>By default, all existing files with the same name as files in
+ the tar file are overwritten. With this option, existing
+ files are not overwriten.</p>
</item>
<tag><c>verbose</c></tag>
<item>
- <p>Print an informational message as each file is being extracted.</p>
+ <p>Prints an informational message for each extracted file.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name>format_error(Reason) -> string()</name>
- <fsummary>Convert error term to a readable string</fsummary>
+ <fsummary>Convert error term to a readable string.</fsummary>
<type>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="format_error_1"></marker><c>format_error/1</c>
- function converts
- an error reason term to a human-readable error message string.</p>
+ <p>Cconverts an error reason term to a human-readable error message
+ string.</p>
</desc>
</func>
+
<func>
- <name>open(Name, OpenModeList) -> RetValue</name>
- <fsummary>Open a tar file for writing.</fsummary>
+ <name>init(UserPrivate, AccessMode, Fun) ->
+ {ok,TarDescriptor} | {error,Reason}</name>
+ <fsummary>Create a <c>TarDescriptor</c> used in subsequent tar operations
+ when defining own low-level storage access functions.</fsummary>
<type>
- <v>Name = filename()</v>
- <v>OpenModeList = [OpenMode]</v>
- <v>Mode = write|compressed|cooked</v>
- <v>RetValue = {ok,TarDescriptor}|{error,{Name,Reason}}</v>
- <v>TarDescriptor = term()</v>
+ <v>UserPrivate = term()</v>
+ <v>AccessMode = [write] | [read]</v>
+ <v>Fun when AccessMode is [write] =
+ fun(write, {UserPrivate,DataToWrite})->...;
+ (position,{UserPrivate,Position})->...;
+ (close, UserPrivate)->... end</v>
+ <v>Fun when AccessMode is [read] =
+ fun(read2, {UserPrivate,Size})->...;
+ (position,{UserPrivate,Position})->...;
+ (close, UserPrivate)->... end</v>
+ <v>TarDescriptor = term()</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="open"></marker><c>open/2</c> function creates
- a tar file for writing.
- (Any existing file with the same name will be truncated.)</p>
- <p>By convention, the name of a tar file should end in "<c>.tar</c>".
- To abide to the convention, you'll need to add "<c>.tar</c>" yourself
- to the name.</p>
- <p>Except for the <c>write</c> atom the following atoms
- may be added to <c>OpenModeList</c>:</p>
+ <p>The <c>Fun</c> is the definition of what to do when the different
+ storage operations functions are to be called from the higher tar
+ handling functions (such as <c>add/3</c>, <c>add/4</c>, and
+ <c>close/1</c>).</p>
+ <p>The <c>Fun</c> is called when the tar function wants to do a
+ low-level operation, like writing a block to a file. The <c>Fun</c>
+ is called as <c>Fun(Op, {UserPrivate,Parameters...})</c>, where
+ <c>Op</c> is the operation name, <c>UserPrivate</c> is the term
+ passed as the first argument to <c>init/1</c> and
+ <c>Parameters...</c> are the data added by the tar function to be
+ passed down to the storage handling function.</p>
+ <p>Parameter <c>UserPrivate</c> is typically the result of opening a
+ low-level structure like a file descriptor or an SFTP channel id.
+ The different <c>Fun</c> clauses operate on that very term.</p>
+ <p>The following are the fun clauses parameter lists:</p>
<taglist>
- <tag><c>compressed</c></tag>
+ <tag><c>(write, {UserPrivate,DataToWrite})</c></tag>
<item>
- <p>The entire tar file will be compressed, as if it has
- been run through the <c>gzip</c> program. To abide to the
- convention that a compressed tar file should end in "<c>.tar.gz</c>" or
- "<c>.tgz</c>", you'll need to add the appropriate extension yourself.</p>
+ <p>Writes term <c>DataToWrite</c> using <c>UserPrivate</c>.</p>
</item>
- <tag><c>cooked</c></tag>
+ <tag><c>(close, UserPrivate)</c></tag>
+ <item>
+ <p>Closes the access.</p>
+ </item>
+ <tag><c>(read2, {UserPrivate,Size})</c></tag>
<item>
- <p>By default, the <c>open/2</c> function will open the tar file
- in <c>raw</c> mode, which is faster but does not allow a remote (erlang)
- file server to be used. Adding <c>cooked</c> to the mode list will
- override the default and open the tar file without the <c>raw</c>
- option.</p>
+ <p>Reads using <c>UserPrivate</c> but only <c>Size</c> bytes.
+ Notice that there is only an arity-2 read function, not an arity-1
+ function.</p>
+ </item>
+ <tag><c>(position,{UserPrivate,Position})</c></tag>
+ <item>
+ <p>Sets the position of <c>UserPrivate</c> as defined for files in
+ <seealso marker="kernel:file#position-2">
+ <c>file:position/2</c></seealso></p>
</item>
</taglist>
- <p>Use the <seealso marker="#add">add/3,4</seealso> functions
- to add one file at the time into an opened tar file. When you are
- finished adding files, use the <seealso marker="#close">close</seealso>
- function to close the tar file.</p>
+ <p><em>Example:</em></p>
+ <p>The following is a complete <c>Fun</c> parameter for reading and
+ writing on files using the
+ <seealso marker="kernel:file"><c>file</c></seealso> module:</p>
+ <code type="none">
+ExampleFun =
+ fun(write, {Fd,Data}) -> file:write(Fd, Data);
+ (position, {Fd,Pos}) -> file:position(Fd, Pos);
+ (read2, {Fd,Size}) -> file:read(Fd, Size);
+ (close, Fd) -> file:close(Fd)
+ end</code>
+ <p>Here <c>Fd</c> was specified to function <c>init/3</c> as:</p>
+ <code>
+{ok,Fd} = file:open(Name, ...).
+{ok,TarDesc} = erl_tar:init(Fd, [write], ExampleFun),</code>
+ <p><c>TarDesc</c> is then used:</p>
+ <code>
+erl_tar:add(TarDesc, SomeValueIwantToAdd, FileNameInTarFile),
+...,
+erl_tar:close(TarDesc)</code>
+ <p>When the <c>erl_tar</c> core wants to, for example, write a piece
+ of <c>Data</c>, it would call
+ <c>ExampleFun(write, {UserPrivate,Data})</c>.</p>
+ <note>
+ <p>This example with the <c>file</c> module operations is
+ not necessary to use directly, as that is what function
+ <seealso marker="#open/2"><c>open/2</c></seealso> in principle
+ does.</p>
+ </note>
<warning>
- <p>The <c>TarDescriptor</c> term is not a file descriptor.
- You should not rely on the specific contents of the <c>TarDescriptor</c>
- term, as it may change in future versions as more features are added
- to the <c>erl_tar</c> module.</p>
+ <p>The <c>TarDescriptor</c> term is not a file descriptor. You are
+ advised not to rely on the specific contents of this term, as it
+ can change in future Erlang/OTP releases when more features are
+ added to this module.</p>
</warning>
</desc>
</func>
<func>
- <name>init(UserPrivate, AccessMode, Fun) -> {ok,TarDescriptor} | {error,Reason}
-</name>
- <fsummary>Creates a TarDescriptor used in subsequent tar operations when
- defining own low-level storage access functions
- </fsummary>
+ <name>open(Name, OpenModeList) -> RetValue</name>
+ <fsummary>Open a tar file for writing.</fsummary>
<type>
- <v>UserPrivate = term()</v>
- <v>AccessMode = [write] | [read]</v>
- <v>Fun when AccessMode is [write] = fun(write, {UserPrivate,DataToWrite})->...;
- (position,{UserPrivate,Position})->...;
- (close, UserPrivate)->...
- end
- </v>
- <v>Fun when AccessMode is [read] = fun(read2, {UserPrivate,Size})->...;
- (position,{UserPrivate,Position})->...;
- (close, UserPrivate)->...
- end
- </v>
- <v>TarDescriptor = term()</v>
- <v>Reason = term()</v>
+ <v>Name = filename()</v>
+ <v>OpenModeList = [OpenMode]</v>
+ <v>Mode = write|compressed|cooked</v>
+ <v>RetValue = {ok,TarDescriptor}|{error,{Name,Reason}}</v>
+ <v>TarDescriptor = term()</v>
+ <v>Reason = term()</v>
</type>
<desc>
- <p>The <c>Fun</c> is the definition of what to do when the different
- storage operations functions are to be called from the higher tar
- handling functions (<c>add/3</c>, <c>add/4</c>, <c>close/1</c>...).
- </p>
- <p>The <c>Fun</c> will be called when the tar function wants to do
- a low-level operation, like writing a block to a file. The Fun is called
- as <c>Fun(Op,{UserPrivate,Parameters...})</c> where <c>Op</c> is the operation name,
- <c>UserPrivate</c> is the term passed as the first argument to <c>init/1</c> and
- <c>Parameters...</c> are the data added by the tar function to be passed down to
- the storage handling function.
- </p>
- <p>The parameter <c>UserPrivate</c> is typically the result of opening a low level
- structure like a file descriptor, a sftp channel id or such. The different <c>Fun</c>
- clauses operates on that very term.
- </p>
- <p>The fun clauses parameter lists are:</p>
- <taglist>
- <tag><c>(write, {UserPrivate,DataToWrite})</c></tag>
- <item>Write the term <c>DataToWrite</c> using <c>UserPrivate</c></item>
- <tag><c>(close, UserPrivate)</c></tag>
- <item>Close the access.</item>
- <tag><c>(read2, {UserPrivate,Size})</c></tag>
- <item>Read using <c>UserPrivate</c> but only <c>Size</c> bytes. Note that there is
- only an arity-2 read function, not an arity-1
- </item>
- <tag><c> (position,{UserPrivate,Position})</c></tag>
- <item>Sets the position of <c>UserPrivate</c> as defined for files in <seealso marker="kernel:file#position-2">file:position/2</seealso></item>
- <tag><c></c></tag>
- <item></item>
- </taglist>
- <p>A complete <c>Fun</c> parameter for reading and writing on files using the
- <seealso marker="kernel:file">file module</seealso> could be:
- </p>
- <code type="none">
- ExampleFun =
- fun(write, {Fd,Data}) -> file:write(Fd, Data);
- (position, {Fd,Pos}) -> file:position(Fd, Pos);
- (read2, {Fd,Size}) -> file:read(Fd,Size);
- (close, Fd) -> file:close(Fd)
- end
- </code>
- <p>where <c>Fd</c> was given to the <c>init/3</c> function as:</p>
- <code>
- {ok,Fd} = file:open(Name,...).
- {ok,TarDesc} = erl_tar:init(Fd, [write], ExampleFun),
- </code>
- <p>The <c>TarDesc</c> is then used:</p>
- <code>
- erl_tar:add(TarDesc, SomeValueIwantToAdd, FileNameInTarFile),
- ....,
- erl_tar:close(TarDesc)
- </code>
- <p>When the erl_tar core wants to e.g. write a piece of Data, it would call
- <c>ExampleFun(write,{UserPrivate,Data})</c>.
- </p>
- <note>
- <p>The example above with <c>file</c> module operations is not necessary to
- use directly since that is what the <seealso marker="#open">open</seealso> function
- in principle does.
- </p>
- </note>
+ <p>Creates a tar file for writing (any existing file with the same
+ name is truncated).</p>
+ <p>By convention, the name of a tar file is to end in "<c>.tar</c>".
+ To abide to the convention, add "<c>.tar</c>" to the name.</p>
+ <p>Except for the <c>write</c> atom, the following atoms
+ can be added to <c>OpenModeList</c>:</p>
+ <taglist>
+ <tag><c>compressed</c></tag>
+ <item>
+ <p>The entire tar file is compressed, as if it has been run
+ through the <c>gzip</c> program. To abide to the convention
+ that a compressed tar file is to end in "<c>.tar.gz</c>" or
+ "<c>.tgz</c>", add the appropriate extension.</p>
+ </item>
+ <tag><c>cooked</c></tag>
+ <item>
+ <p>By default, the tar file is opened in <c>raw</c> mode, which is
+ faster but does not allow a remote (Erlang) file server to be
+ used. Adding <c>cooked</c> to the mode list overrides the
+ default and opens the tar file without option <c>raw</c>.</p>
+ </item>
+ </taglist>
+ <p>To add one file at the time into an opened tar file, use function
+ <seealso marker="#add/3"><c>add/3,4</c></seealso>. When you are
+ finished adding files, use function <seealso marker="#close/1">
+ <c>close/1</c></seealso> to close the tar file.</p>
<warning>
- <p>The <c>TarDescriptor</c> term is not a file descriptor.
- You should not rely on the specific contents of the <c>TarDescriptor</c>
- term, as it may change in future versions as more features are added
- to the <c>erl_tar</c> module.</p>
+ <p>The <c>TarDescriptor</c> term is not a file descriptor. You are
+ advised not to rely on the specific contents of this term, as it
+ can change in future Erlang/OTP releases when more features are
+ added to this module..</p>
</warning>
</desc>
</func>
<func>
<name>table(Name) -> RetValue</name>
- <fsummary>Retrieve the name of all files in a tar file</fsummary>
+ <fsummary>Retrieve the name of all files in a tar file.</fsummary>
<type>
<v>Name = filename()</v>
<v>RetValue = {ok,[string()]}|{error,{Name,Reason}}</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="table_1"></marker><c>table/1</c> function
- retrieves the names of all files in the tar file <c>Name</c>.</p>
+ <p>Retrieves the names of all files in the tar file <c>Name</c>.</p>
</desc>
</func>
+
<func>
<name>table(Name, Options)</name>
- <fsummary>Retrieve name and information of all files in a tar file</fsummary>
+ <fsummary>Retrieve name and information of all files in a tar file.
+ </fsummary>
<type>
<v>Name = filename()</v>
</type>
<desc>
- <p>The <marker id="table_2"></marker><c>table/2</c> function
- retrieves the names of all files in the tar file <c>Name</c>.</p>
+ <p>Retrieves the names of all files in the tar file <c>Name</c>.</p>
</desc>
</func>
+
<func>
<name>t(Name)</name>
- <fsummary>Print the name of each file in a tar file</fsummary>
+ <fsummary>Print the name of each file in a tar file.</fsummary>
<type>
<v>Name = filename()</v>
</type>
<desc>
- <p>The <marker id="t_1"></marker><c>t/1</c> function prints the names
- of all files in the tar file <c>Name</c> to the Erlang shell.
- (Similar to "<c>tar&nbsp;t</c>".)</p>
+ <p>Prints the names of all files in the tar file <c>Name</c> to the
+ Erlang shell (similar to "<c>tar&nbsp;t</c>").</p>
</desc>
</func>
+
<func>
<name>tt(Name)</name>
- <fsummary>Print name and information for each file in a tar file</fsummary>
+ <fsummary>Print name and information for each file in a tar file.
+ </fsummary>
<type>
<v>Name = filename()</v>
</type>
<desc>
- <p>The <marker id="tt_1"></marker><c>tt/1</c> function prints
- names and
- information about all files in the tar file <c>Name</c> to
- the Erlang shell. (Similar to "<c>tar&nbsp;tv</c>".)</p>
+ <p>Prints names and information about all files in the tar file
+ <c>Name</c> to the Erlang shell (similar to "<c>tar&nbsp;tv</c>").</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/ets.xml b/lib/stdlib/doc/src/ets.xml
index 447fe51130..b8e262208d 100644
--- a/lib/stdlib/doc/src/ets.xml
+++ b/lib/stdlib/doc/src/ets.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,102 +29,131 @@
<rev></rev>
</header>
<module>ets</module>
- <modulesummary>Built-In Term Storage</modulesummary>
+ <modulesummary>Built-in term storage.</modulesummary>
<description>
<p>This module is an interface to the Erlang built-in term storage
BIFs. These provide the ability to store very large quantities of
data in an Erlang runtime system, and to have constant access
time to the data. (In the case of <c>ordered_set</c>, see below,
access time is proportional to the logarithm of the number of
- objects stored).</p>
+ stored objects.)</p>
+
<p>Data is organized as a set of dynamic tables, which can store
tuples. Each table is created by a process. When the process
terminates, the table is automatically destroyed. Every table has
access rights set at creation.</p>
+
<p>Tables are divided into four different types, <c>set</c>,
- <c>ordered_set</c>, <c>bag</c> and <c>duplicate_bag</c>.
+ <c>ordered_set</c>, <c>bag</c>, and <c>duplicate_bag</c>.
A <c>set</c> or <c>ordered_set</c> table can only have one object
- associated with each key. A <c>bag</c> or <c>duplicate_bag</c> can
+ associated with each key. A <c>bag</c> or <c>duplicate_bag</c> table can
have many objects associated with each key.</p>
+
<p>The number of tables stored at one Erlang node is limited.
- The current default limit is approximately 1400 tables. The upper
- limit can be increased by setting the environment variable
+ The current default limit is about 1400 tables. The upper
+ limit can be increased by setting environment variable
<c>ERL_MAX_ETS_TABLES</c> before starting the Erlang runtime
- system (i.e. with the <c>-env</c> option to
- <c>erl</c>/<c>werl</c>). The actual limit may be slightly higher
+ system (that is, with option <c>-env</c> to
+ <c>erl</c>/<c>werl</c>). The actual limit can be slightly higher
than the one specified, but never lower.</p>
- <p>Note that there is no automatic garbage collection for tables.
+
+ <p>Notice that there is no automatic garbage collection for tables.
Even if there are no references to a table from any process, it
- will not automatically be destroyed unless the owner process
- terminates. It can be destroyed explicitly by using
- <c>delete/1</c>. The default owner is the process that created the
- table. Table ownership can be transferred at process termination
- by using the <seealso marker="#heir">heir</seealso> option or explicitly
- by calling <seealso marker="#give_away/3">give_away/3</seealso>.</p>
+ is not automatically destroyed unless the owner process
+ terminates. To destroy a table explicitly, use function
+ <seealso marker="#delete/1"><c>delete/1</c></seealso>.
+ The default owner is the process that created the
+ table. To transfer table ownership at process termination, use
+ option <seealso marker="#heir"><c>heir</c></seealso> or call
+ <seealso marker="#give_away/3"><c>give_away/3</c></seealso>.</p>
+
<p>Some implementation details:</p>
+
<list type="bulleted">
- <item>In the current implementation, every object insert and
- look-up operation results in a copy of the object.</item>
- <item><c>'$end_of_table'</c> should not be used as a key since
- this atom is used to mark the end of the table when using
- <c>first</c>/<c>next</c>.</item>
+ <item><p>In the current implementation, every object insert and
+ look-up operation results in a copy of the object.</p></item>
+ <item><p><c>'$end_of_table'</c> is not to be used as a key, as
+ this atom is used to mark the end of the table when using functions
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p></item>
</list>
- <p>Also worth noting is the subtle difference between
+
+ <p>Notice the subtle difference between
<em>matching</em> and <em>comparing equal</em>, which is
- demonstrated by the different table types <c>set</c> and
- <c>ordered_set</c>. Two Erlang terms <c>match</c> if they are of
- the same type and have the same value, so that <c>1</c> matches
- <c>1</c>, but not <c>1.0</c> (as <c>1.0</c> is a <c>float()</c>
- and not an <c>integer()</c>). Two Erlang terms <em>compare equal</em> if they either are of the same type and value, or if
- both are numeric types and extend to the same value, so that
- <c>1</c> compares equal to both <c>1</c> and <c>1.0</c>. The
- <c>ordered_set</c> works on the <em>Erlang term order</em> and
- there is no defined order between an <c>integer()</c> and a
- <c>float()</c> that extends to the same value, hence the key
- <c>1</c> and the key <c>1.0</c> are regarded as equal in an
- <c>ordered_set</c> table.</p>
+ demonstrated by table types <c>set</c> and <c>ordered_set</c>:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>Two Erlang terms <c>match</c> if they are of
+ the same type and have the same value, so that <c>1</c> matches
+ <c>1</c>, but not <c>1.0</c> (as <c>1.0</c> is a <c>float()</c>
+ and not an <c>integer()</c>).</p>
+ </item>
+ <item>
+ <p>Two Erlang terms <em>compare equal</em>
+ if they either are of the same type and value, or if
+ both are numeric types and extend to the same value, so that
+ <c>1</c> compares equal to both <c>1</c> and <c>1.0</c>.</p>
+ </item>
+ <item>
+ <p>The <c>ordered_set</c> works on the <em>Erlang term order</em> and
+ no defined order exists between an <c>integer()</c> and a
+ <c>float()</c> that extends to the same value. Hence the key
+ <c>1</c> and the key <c>1.0</c> are regarded as equal in an
+ <c>ordered_set</c> table.</p>
+ </item>
+ </list>
</description>
+
<section>
<title>Failure</title>
- <p>In general, the functions below will exit with reason
- <c>badarg</c> if any argument is of the wrong format, if the
- table identifier is invalid or if the operation is denied due to
+ <p>The functions in this module exits with reason
+ <c>badarg</c> if any argument has the wrong format, if the
+ table identifier is invalid, or if the operation is denied because of
table access rights (<seealso marker="#protected">protected</seealso>
or <seealso marker="#private">private</seealso>).</p>
</section>
+
<section><marker id="concurrency"></marker>
<title>Concurrency</title>
<p>This module provides some limited support for concurrent access.
All updates to single objects are guaranteed to be both <em>atomic</em>
- and <em>isolated</em>. This means that an updating operation towards
- a single object will either succeed or fail completely without any
- effect at all (atomicy).
- Nor can any intermediate results of the update be seen by other
- processes (isolation). Some functions that update several objects
- state that they even guarantee atomicy and isolation for the entire
+ and <em>isolated</em>. This means that an updating operation to
+ a single object either succeeds or fails completely without any
+ effect (atomicity) and that
+ no intermediate results of the update can be seen by other
+ processes (isolation). Some functions that update many objects
+ state that they even guarantee atomicity and isolation for the entire
operation. In database terms the isolation level can be seen as
- "serializable", as if all isolated operations were carried out serially,
+ "serializable", as if all isolated operations are carried out serially,
one after the other in a strict order.</p>
- <p>No other support is available within ETS that would guarantee
- consistency between objects. However, the <c>safe_fixtable/2</c>
- function can be used to guarantee that a sequence of
- <c>first/1</c> and <c>next/2</c> calls will traverse the table
- without errors and that each existing object in the table is visited
- exactly once, even if another process (or the same process)
+
+ <p>No other support is available within this module that would guarantee
+ consistency between objects. However, function
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>
+ can be used to guarantee that a sequence of
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso> calls traverse the
+ table without errors and that each existing object in the table is
+ visited exactly once, even if another (or the same) process
simultaneously deletes or inserts objects into the table.
- Nothing more is guaranteed; in particular objects that are inserted
- or deleted during such a traversal may be visited once or not at all.
- Functions that internally traverse over a table, like <c>select</c>
- and <c>match</c>, will give the same guarantee as <c>safe_fixtable</c>.</p>
+ Nothing else is guaranteed; in particular objects that are inserted
+ or deleted during such a traversal can be visited once or not at all.
+ Functions that internally traverse over a table, like
+ <seealso marker="#select/1"><c>select</c></seealso> and
+ <seealso marker="#match/1"><c>match</c></seealso>,
+ give the same guarantee as
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable</c></seealso>.</p>
</section>
+
<section>
<marker id="match_spec"></marker>
<title>Match Specifications</title>
- <p>Some of the functions uses a <em>match specification</em>,
- match_spec. A brief explanation is given in
- <seealso marker="#select/2">select/2</seealso>. For a detailed
- description, see the chapter "Match specifications in Erlang" in
- <em>ERTS User's Guide</em>.</p>
+ <p>Some of the functions use a <em>match specification</em>,
+ <c>match_spec</c>. For a brief explanation, see
+ <seealso marker="#select/2"><c>select/2</c></seealso>. For a detailed
+ description, see section <seealso marker="erts:match_spec">
+ Match Specifications in Erlang</seealso> in ERTS User's Guide.</p>
</section>
<datatypes>
@@ -134,11 +163,9 @@
<datatype>
<name>continuation()</name>
<desc>
- <p><marker id="type-continuation"/>
- Opaque continuation used by <seealso marker="#select/1">
+ <p>Opaque continuation used by <seealso marker="#select/1">
<c>select/1,3</c></seealso>, <seealso marker="#select_reverse/1">
- <c>select_reverse/1,3</c></seealso>, <seealso
- marker="#match/1">
+ <c>select_reverse/1,3</c></seealso>, <seealso marker="#match/1">
<c>match/1,3</c></seealso>, and <seealso marker="#match_object/1">
<c>match_object/1,3</c></seealso>.</p>
</desc>
@@ -159,26 +186,30 @@
</datatype>
<datatype>
<name name="tid"/>
- <desc><p>A table identifier, as returned by new/2.</p></desc>
+ <desc><p>A table identifier, as returned by
+ <seealso marker="#new/2"><c>new/2</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="type"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="all" arity="0"/>
<fsummary>Return a list of all ETS tables.</fsummary>
<desc>
<p>Returns a list of all tables at the node. Named tables are
- given by their names, unnamed tables are given by their
+ specified by their names, unnamed tables are specified by their
table identifiers.</p>
- <p>There is no guarantee of consistency in the returned list. Tables created
- or deleted by other processes "during" the ets:all() call may or may
- not be included in the list. Only tables created/deleted <em>before</em>
- ets:all() is called are guaranteed to be included/excluded.</p>
+ <p>There is no guarantee of consistency in the returned list. Tables
+ created or deleted by other processes "during" the <c>ets:all()</c>
+ call either are or are not included in the list. Only tables
+ created/deleted <em>before</em> <c>ets:all()</c> is called are
+ guaranteed to be included/excluded.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="1"/>
<fsummary>Delete an entire ETS table.</fsummary>
@@ -186,175 +217,187 @@
<p>Deletes the entire table <c><anno>Tab</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Delete all objects with a given key from an ETS table.</fsummary>
+ <fsummary>Delete all objects with a specified key from an ETS
+ table.</fsummary>
<desc>
- <p>Deletes all objects with the key <c><anno>Key</anno></c> from the table
+ <p>Deletes all objects with key <c><anno>Key</anno></c> from table
<c><anno>Tab</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete_all_objects" arity="1"/>
<fsummary>Delete all objects in an ETS table.</fsummary>
<desc>
<p>Delete all objects in the ETS table <c><anno>Tab</anno></c>.
- The operation is guaranteed to be
- <seealso marker="#concurrency">atomic and isolated</seealso>.</p>
+ The operation is guaranteed to be
+ <seealso marker="#concurrency">atomic and isolated</seealso>.</p>
</desc>
</func>
+
<func>
<name name="delete_object" arity="2"/>
<fsummary>Deletes a specific from an ETS table.</fsummary>
<desc>
- <p>Delete the exact object <c><anno>Object</anno></c> from the ETS table,
+ <p>Delete the exact object <c><anno>Object</anno></c> from the
+ ETS table,
leaving objects with the same key but other differences
- (useful for type <c>bag</c>). In a <c>duplicate_bag</c>, all
- instances of the object will be deleted.</p>
+ (useful for type <c>bag</c>). In a <c>duplicate_bag</c> table, all
+ instances of the object are deleted.</p>
</desc>
</func>
+
<func>
<name name="file2tab" arity="1"/>
<fsummary>Read an ETS table from a file.</fsummary>
<desc>
- <p>Reads a file produced by <seealso
- marker="#tab2file/2">tab2file/2</seealso> or
- <seealso marker="#tab2file/3">tab2file/3</seealso> and creates the
- corresponding table <c><anno>Tab</anno></c>.</p>
- <p>Equivalent to <c>file2tab(<anno>Filename</anno>, [])</c>.</p>
+ <p>Reads a file produced by <seealso marker="#tab2file/2">
+ <c>tab2file/2</c></seealso> or
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso> and
+ creates the corresponding table <c><anno>Tab</anno></c>.</p>
+ <p>Equivalent to <c>file2tab(<anno>Filename</anno>, [])</c>.</p>
</desc>
</func>
+
<func>
<name name="file2tab" arity="2"/>
<fsummary>Read an ETS table from a file.</fsummary>
<desc>
- <p>Reads a file produced by <seealso
- marker="#tab2file/2">tab2file/2</seealso> or
- <seealso marker="#tab2file/3">tab2file/3</seealso> and creates the
+ <p>Reads a file produced by <seealso marker="#tab2file/2">
+ <c>tab2file/2</c></seealso> or <seealso marker="#tab2file/3">
+ <c>tab2file/3</c></seealso> and creates the
corresponding table <c><anno>Tab</anno></c>.</p>
- <p>The currently only supported option is <c>{verify,boolean()}</c>. If
- verification is turned on (by means of specifying
- <c>{verify,true}</c>), the function utilizes whatever
- information is present in the file to assert that the
- information is not damaged. How this is done depends on which
- <c>extended_info</c> was written using
- <seealso marker="#tab2file/3">tab2file/3</seealso>.</p>
- <p>If no <c>extended_info</c> is present in the file and
- <c>{verify,true}</c> is specified, the number of objects
- written is compared to the size of the original table when the
- dump was started. This might make verification fail if the
- table was
- <c>public</c> and objects were added or removed while the
- table was dumped to file. To avoid this type of problems,
- either do not verify files dumped while updated simultaneously
- or use the <c>{extended_info, [object_count]}</c> option to
- <seealso marker="#tab2file/3">tab2file/3</seealso>, which
- extends the information in the file with the number of objects
- actually written.</p>
- <p>If verification is turned on and the file was written with
- the option <c>{extended_info, [md5sum]}</c>, reading the file
- is slower and consumes radically more CPU time than
- otherwise.</p>
+ <p>The only supported option is <c>{verify,boolean()}</c>.
+ If verification is turned on (by specifying <c>{verify,true}</c>),
+ the function uses whatever information is present in the file to
+ assert that the information is not damaged. How this is done depends
+ on which <c>extended_info</c> was written using
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso>.</p>
+ <p>If no <c>extended_info</c> is present in the file and
+ <c>{verify,true}</c> is specified, the number of objects
+ written is compared to the size of the original table when the
+ dump was started. This can make verification fail if the table was
+ <c>public</c> and objects were added or removed while the
+ table was dumped to file. To avoid this problem,
+ either do not verify files dumped while updated simultaneously
+ or use option <c>{extended_info, [object_count]}</c> to
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso>, which
+ extends the information in the file with the number of objects
+ written.</p>
+ <p>If verification is turned on and the file was written with
+ option <c>{extended_info, [md5sum]}</c>, reading the file
+ is slower and consumes radically more CPU time than otherwise.</p>
<p><c>{verify,false}</c> is the default.</p>
</desc>
</func>
+
<func>
<name name="first" arity="1"/>
<fsummary>Return the first key in an ETS table.</fsummary>
<desc>
- <p>Returns the first key <c><anno>Key</anno></c> in the table <c><anno>Tab</anno></c>.
- If the table is of the <c>ordered_set</c> type, the first key
- in Erlang term order will be returned. If the table is of any
- other type, the first key according to the table's internal
- order will be returned. If the table is empty,
- <c>'$end_of_table'</c> will be returned.</p>
- <p>Use <c>next/2</c> to find subsequent keys in the table.</p>
+ <p>Returns the first key <c><anno>Key</anno></c> in table
+ <c><anno>Tab</anno></c>. For an <c>ordered_set</c> table, the first
+ key in Erlang term order is returned. For other
+ table types, the first key according to the internal
+ order of the table is returned. If the table is empty,
+ <c>'$end_of_table'</c> is returned.</p>
+ <p>To find subsequent keys in the table, use
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="foldl" arity="3"/>
- <fsummary>Fold a function over an ETS table</fsummary>
+ <fsummary>Fold a function over an ETS table.</fsummary>
<desc>
<p><c><anno>Acc0</anno></c> is returned if the table is empty.
- This function is similar to <c>lists:foldl/3</c>. The order in
- which the elements of the table are traversed is unspecified,
- except for tables of type <c>ordered_set</c>, for which they
- are traversed first to last.</p>
-
- <p>If <c><anno>Function</anno></c> inserts objects into the table, or another
- process inserts objects into the table, those objects <em>may</em>
- (depending on key ordering) be included in the traversal.</p>
+ This function is similar to
+ <seealso marker="lists#foldl/3"><c>lists:foldl/3</c></seealso>.
+ The table elements are traversed is unspecified order, except for
+ <c>ordered_set</c> tables, where they are traversed first to last.</p>
+ <p>If <c><anno>Function</anno></c> inserts objects into the table,
+ or another
+ process inserts objects into the table, those objects <em>can</em>
+ (depending on key ordering) be included in the traversal.</p>
</desc>
</func>
+
<func>
<name name="foldr" arity="3"/>
- <fsummary>Fold a function over an ETS table</fsummary>
+ <fsummary>Fold a function over an ETS table.</fsummary>
<desc>
<p><c><anno>Acc0</anno></c> is returned if the table is empty.
- This function is similar to <c>lists:foldr/3</c>. The order in
- which the elements of the table are traversed is unspecified,
- except for tables of type <c>ordered_set</c>, for which they
- are traversed last to first.</p>
-
- <p>If <c><anno>Function</anno></c> inserts objects into the table, or another
- process inserts objects into the table, those objects <em>may</em>
- (depending on key ordering) be included in the traversal.</p>
+ This function is similar to
+ <seealso marker="lists#foldr/3"><c>lists:foldr/3</c></seealso>.
+ The table elements are traversed is unspecified order, except for
+ <c>ordered_set</c> tables, where they are traversed last to first.</p>
+ <p>If <c><anno>Function</anno></c> inserts objects into the table,
+ or another
+ process inserts objects into the table, those objects <em>can</em>
+ (depending on key ordering) be included in the traversal.</p>
</desc>
</func>
+
<func>
<name name="from_dets" arity="2"/>
- <fsummary>Fill an ETS table with objects from a Dets table.</fsummary>
+ <fsummary>Fill an ETS table with objects from a Dets
+ table.</fsummary>
<desc>
<p>Fills an already created ETS table with the objects in the
- already opened Dets table named <c><anno>DetsTab</anno></c>. The existing
- objects of the ETS table are kept unless overwritten.</p>
- <p>Throws a badarg error if any of the tables does not exist or the
- dets table is not open.</p>
+ already opened Dets table <c><anno>DetsTab</anno></c>.
+ Existing objects in the ETS table are kept unless
+ overwritten.</p>
+ <p>If any of the tables does not exist or the Dets table is
+ not open, a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="fun2ms" arity="1"/>
- <fsummary>Pseudo function that transforms fun syntax to a match_spec.</fsummary>
+ <fsummary>Pseudo function that transforms fun syntax to a match
+ specification.</fsummary>
<desc>
- <p>Pseudo function that by means of a <c>parse_transform</c>
- translates <c><anno>LiteralFun</anno></c> typed as parameter in the
- function call to a
- <seealso marker="#match_spec">match_spec</seealso>. With
- "literal" is meant that the fun needs to textually be written
+ <p>Pseudo function that by a <c>parse_transform</c> translates
+ <c><anno>LiteralFun</anno></c> typed as parameter in the function
+ call to a
+ <seealso marker="#match_spec">match specification</seealso>.
+ With "literal" is meant that the fun must textually be written
as the parameter of the function, it cannot be held in a
- variable which in turn is passed to the function).</p>
- <p>The parse transform is implemented in the module
- <c>ms_transform</c> and the source <em>must</em> include the
- file <c>ms_transform.hrl</c> in STDLIB for this
+ variable that in turn is passed to the function.</p>
+ <p>The parse transform is provided in the <c>ms_transform</c>
+ module and the source <em>must</em> include
+ file <c>ms_transform.hrl</c> in <c>STDLIB</c> for this
pseudo function to work. Failing to include the hrl file in
- the source will result in a runtime error, not a compile
- time ditto. The include file is easiest included by adding
- the line
+ the source results in a runtime error, not a compile
+ time error. The include file is easiest included by adding line
<c>-include_lib("stdlib/include/ms_transform.hrl").</c> to
the source file.</p>
<p>The fun is very restricted, it can take only a single
parameter (the object to match): a sole variable or a
- tuple. It needs to use the <c>is_</c> guard tests.
- Language constructs that have no representation
- in a match_spec (like <c>if</c>, <c>case</c>, <c>receive</c>
- etc) are not allowed.</p>
- <p>The return value is the resulting match_spec.</p>
- <p>Example:</p>
+ tuple. It must use the <c>is_</c> guard tests.
+ Language constructs that have no representation in a match
+ specification (<c>if</c>, <c>case</c>, <c>receive</c>,
+ and so on) are not allowed.</p>
+ <p>The return value is the resulting match specification.</p>
+ <p><em>Example:</em></p>
<pre>
1> <input>ets:fun2ms(fun({M,N}) when N > 3 -> M end).</input>
[{{'$1','$2'},[{'>','$2',3}],['$1']}]</pre>
- <p>Variables from the environment can be imported, so that this
- works:</p>
+ <p>Variables from the environment can be imported, so that the
+ following works:</p>
<pre>
2> <input>X=3.</input>
3
3> <input>ets:fun2ms(fun({M,N}) when N > X -> M end).</input>
[{{'$1','$2'},[{'>','$2',{const,3}}],['$1']}]</pre>
- <p>The imported variables will be replaced by match_spec
+ <p>The imported variables are replaced by match specification
<c>const</c> expressions, which is consistent with the
- static scoping for Erlang funs. Local or global function
- calls can not be in the guard or body of the fun however.
- Calls to builtin match_spec functions of course is allowed:</p>
+ static scoping for Erlang funs. However, local or global function
+ calls cannot be in the guard or body of the fun. Calls to built-in
+ match specification functions is of course allowed:</p>
<pre>
4> <input>ets:fun2ms(fun({M,N}) when N > X, is_atomm(M) -> M end).</input>
Error: fun containing local Erlang function calls
@@ -362,724 +405,832 @@ Error: fun containing local Erlang function calls
{error,transform_error}
5> <input>ets:fun2ms(fun({M,N}) when N > X, is_atom(M) -> M end).</input>
[{{'$1','$2'},[{'>','$2',{const,3}},{is_atom,'$1'}],['$1']}]</pre>
- <p>As can be seen by the example, the function can be called
- from the shell too. The fun needs to be literally in the call
- when used from the shell as well. Other means than the
- parse_transform are used in the shell case, but more or less
- the same restrictions apply (the exception being records,
- as they are not handled by the shell).</p>
+ <p>As shown by the example, the function can be called
+ from the shell also. The fun must be literally in the call
+ when used from the shell as well.</p>
<warning>
- <p>If the parse_transform is not applied to a module which
- calls this pseudo function, the call will fail in runtime
- (with a <c>badarg</c>). The module <c>ets</c> actually
- exports a function with this name, but it should never
- really be called except for when using the function in the
+ <p>If the <c>parse_transform</c> is not applied to a module that
+ calls this pseudo function, the call fails in runtime
+ (with a <c>badarg</c>). The <c>ets</c> module
+ exports a function with this name, but it is never to
+ be called except when using the function in the
shell. If the <c>parse_transform</c> is properly applied by
- including the <c>ms_transform.hrl</c> header file, compiled
- code will never call the function, but the function call is
- replaced by a literal match_spec.</p>
+ including header file <c>ms_transform.hrl</c>, compiled
+ code never calls the function, but the function call is
+ replaced by a literal match specification.</p>
</warning>
- <p>For more information, see
- <seealso marker="ms_transform#top">ms_transform(3)</seealso>.</p>
+ <p>For more information, see <seealso marker="ms_transform#top">
+ <c>ms_transform(3)</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="give_away" arity="3"/>
<fsummary>Change owner of a table.</fsummary>
<desc>
- <p>Make process <c><anno>Pid</anno></c> the new owner of table <c><anno>Tab</anno></c>.
- If successful, the message
- <c>{'ETS-TRANSFER',<anno>Tab</anno>,FromPid,<anno>GiftData</anno>}</c> will be sent
- to the new owner.</p>
- <p>The process <c><anno>Pid</anno></c> must be alive, local and not already the
- owner of the table. The calling process must be the table owner.</p>
- <p>Note that <c>give_away</c> does not at all affect the
- <seealso marker="#heir">heir</seealso> option of the table. A table
- owner can for example set the <c>heir</c> to itself, give the table
- away and then get it back in case the receiver terminates.</p>
+ <p>Make process <c><anno>Pid</anno></c> the new owner of table
+ <c><anno>Tab</anno></c>. If successful, message
+ <c>{'ETS-TRANSFER',<anno>Tab</anno>,FromPid,<anno>GiftData</anno>}</c>
+ is sent to the new owner.</p>
+ <p>The process <c><anno>Pid</anno></c> must be alive, local, and not
+ already the owner of the table.
+ The calling process must be the table owner.</p>
+ <p>Notice that this function does not affect option
+ <seealso marker="#heir"><c>heir</c></seealso> of the table. A table
+ owner can, for example, set <c>heir</c> to itself, give the table
+ away, and then get it back if the receiver terminates.</p>
</desc>
</func>
+
<func>
<name name="i" arity="0"/>
- <fsummary>Display information about all ETS tables on tty.</fsummary>
+ <fsummary>Display information about all ETS tables on a terminal.
+ </fsummary>
<desc>
- <p>Displays information about all ETS tables on tty.</p>
+ <p>Displays information about all ETS tables on a terminal.</p>
</desc>
</func>
+
<func>
<name name="i" arity="1"/>
- <fsummary>Browse an ETS table on tty.</fsummary>
+ <fsummary>Browse an ETS table on a terminal.</fsummary>
<desc>
- <p>Browses the table <c><anno>Tab</anno></c> on tty.</p>
+ <p>Browses table <c><anno>Tab</anno></c> on a terminal.</p>
</desc>
</func>
+
<func>
<name name="info" arity="1"/>
- <fsummary>Return information about an ETS table.</fsummary>
+ <fsummary>Return information about an <c>table</c>.</fsummary>
<desc>
- <p>Returns information about the table <c><anno>Tab</anno></c> as a list of
+ <p>Returns information about table <c><anno>Tab</anno></c> as a list of
tuples. If <c><anno>Tab</anno></c> has the correct type
- for a table identifier, but does not refer to an existing ETS
- table, <c>undefined</c> is returned. If <c><anno>Tab</anno></c> is not of the
- correct type, this function fails with reason <c>badarg</c>.</p>
-
- <list type="bulleted">
- <item><c>{compressed, boolean()}</c> <br></br>
-
- Indicates if the table is compressed or not.</item>
- <item><c>{heir, pid() | none}</c> <br></br>
-
- The pid of the heir of the table, or <c>none</c> if no heir is set.</item>
- <item><c>{keypos, integer() >= 1}</c> <br></br>
-
- The key position.</item>
- <item><c>{memory, integer() >= 0</c> <br></br>
-
- The number of words allocated to the table.</item>
- <item><c>{name, atom()}</c> <br></br>
-
- The name of the table.</item>
- <item><c>{named_table, boolean()}</c> <br></br>
-
- Indicates if the table is named or not.</item>
- <item><c>{node, node()}</c> <br></br>
-
- The node where the table is stored. This field is no longer
- meaningful as tables cannot be accessed from other nodes.</item>
- <item><c>{owner, pid()}</c> <br></br>
-
- The pid of the owner of the table.</item>
- <item><c>{protection, </c><seealso marker="#type-access">access()</seealso><c>}</c> <br></br>
-
- The table access rights.</item>
- <item><c>{size, integer() >= 0</c> <br></br>
-
- The number of objects inserted in the table.</item>
- <item><c>{type, </c><seealso marker="#type-type">type()</seealso><c>}</c> <br></br>
-
- The table type.</item>
- <item><c>{read_concurrency, boolean()}</c> <br></br>
-
- Indicates whether the table uses read_concurrency or not.</item>
- <item><c>{write_concurrency, boolean()}</c> <br></br>
-
- Indicates whether the table uses write_concurrency or not.</item>
- </list>
+ for a table identifier, but does not refer to an existing ETS
+ table, <c>undefined</c> is returned. If <c><anno>Tab</anno></c> is
+ not of the correct type, a <c>badarg</c> exception is raised.</p>
+ <taglist>
+ <tag><c>{compressed, boolean()}</c></tag>
+ <item>
+ <p>Indicates if the table is compressed.</p>
+ </item>
+ <tag><c>{heir, pid() | none}</c></tag>
+ <item>
+ <p>The pid of the heir of the table, or <c>none</c> if no heir
+ is set.</p>
+ </item>
+ <tag><c>{keypos, integer() >= 1}</c></tag>
+ <item>
+ <p>The key position.</p>
+ </item>
+ <tag><c>{memory, integer() >= 0</c></tag>
+ <item>
+ <p>The number of words allocated to the table.</p>
+ </item>
+ <tag><c>{name, atom()}</c></tag>
+ <item>
+ <p>The table name.</p>
+ </item>
+ <tag><c>{named_table, boolean()}</c></tag>
+ <item>
+ <p>Indicates if the table is named.</p>
+ </item>
+ <tag><c>{node, node()}</c></tag>
+ <item>
+ <p>The node where the table is stored. This field is no longer
+ meaningful, as tables cannot be accessed from other nodes.</p>
+ </item>
+ <tag><c>{owner, pid()}</c></tag>
+ <item>
+ <p>The pid of the owner of the table.</p>
+ </item>
+ <tag><c>{protection,</c> <seealso marker="#type-access">
+ <c>access()</c></seealso><c>}</c></tag>
+ <item>
+ <p>The table access rights.</p>
+ </item>
+ <tag><c>{size, integer() >= 0</c></tag>
+ <item>
+ <p>The number of objects inserted in the table.</p>
+ </item>
+ <tag><c>{type,</c> <seealso marker="#type-type">
+ <c>type()</c></seealso><c>}</c></tag>
+ <item>
+ <p>The table type.</p>
+ </item>
+ <tag><c>{read_concurrency, boolean()}</c></tag>
+ <item>
+ <p>Indicates whether the table uses <c>read_concurrency</c> or
+ not.</p>
+ </item>
+ <tag><c>{write_concurrency, boolean()}</c></tag>
+ <item>
+ <p>Indicates whether the table uses <c>write_concurrency</c>.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
<name name="info" arity="2"/>
- <fsummary>Return the information associated with given item for an ETS table.</fsummary>
+ <fsummary>Return the information associated with the specified item for
+ an ETS table.</fsummary>
<desc>
- <p>Returns the information associated with <c>Item</c> for
- the table <c><anno>Tab</anno></c>, or returns <c>undefined</c> if <c>Tab</c>
- does not refer an existing ETS table.
- If <c><anno>Tab</anno></c> is not of the correct type, or if <c><anno>Item</anno></c> is not
- one of the allowed values, this function fails with reason <c>badarg</c>.</p>
-
- <warning><p>In R11B and earlier, this function would not fail but return
- <c>undefined</c> for invalid values for <c>Item</c>.</p>
- </warning>
-
- <p>In addition to the <c>{<anno>Item</anno>,<anno>Value</anno>}</c>
- pairs defined for <c>info/1</c>, the following items are
- allowed:</p>
+ <p>Returns the information associated with <c>Item</c> for table
+ <c><anno>Tab</anno></c>, or returns <c>undefined</c> if <c>Tab</c>
+ does not refer an existing ETS table. If
+ <c><anno>Tab</anno></c> is
+ not of the correct type, or if <c><anno>Item</anno></c> is not
+ one of the allowed values, a <c>badarg</c> exception is raised.</p>
+ <warning>
+ <p>In Erlang/OTP R11B and earlier, this function would not fail but
+ return <c>undefined</c> for invalid values for <c>Item</c>.</p>
+ </warning>
+ <p>In addition to the <c>{<anno>Item</anno>,<anno>Value</anno>}</c>
+ pairs defined for <seealso marker="#info/1"><c>info/1</c></seealso>,
+ the following items are allowed:</p>
<list type="bulleted">
- <item><c>Item=fixed, Value=boolean()</c> <br></br>
-
- Indicates if the table is fixed by any process or not.</item>
- <item><marker id="info_2_safe_fixed_monotonic_time"/>
- <p><c>Item=safe_fixed|safe_fixed_monotonic_time, Value={FixationTime,Info}|false</c> <br></br>
-</p>
+ <item>
+ <p><c>Item=fixed, Value=boolean()</c></p>
+ <p>Indicates if the table is fixed by any process.</p>
+ </item>
+ <item>
+ <p><marker id="info_2_safe_fixed_monotonic_time"/></p>
+ <p><c>Item=safe_fixed|safe_fixed_monotonic_time,
+ Value={FixationTime,Info}|false</c></p>
<p>If the table has been fixed using
- <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>,
+ <seealso marker="#safe_fixtable/2">
+ <c>safe_fixtable/2</c></seealso>,
the call returns a tuple where <c>FixationTime</c> is the
- time when the table was first fixed by a process, which
- may or may not be one of the processes it is fixed by
- right now.</p>
- <p>The format and value of <c>FixationTime</c> depends on
- <c>Item</c>:</p>
- <taglist>
- <tag><c>safe_fixed</c></tag>
- <item><p><c>FixationTime</c> will correspond to the result
- returned by
- <seealso marker="erts:erlang#timestamp/0">erlang:timestamp/0</seealso>
- at the time of fixation. Note that when the system is using
- single or multi
- <seealso marker="erts:time_correction#Time_Warp_Modes">time warp
- modes</seealso> this might produce strange results. This
- since the usage of <c>safe_fixed</c> is not
- <seealso marker="erts:time_correction#Time_Warp_Safe_Code">time warp
- safe</seealso>. Time warp safe code need to use
- <c>safe_fixed_monotonic_time</c> instead.</p></item>
-
- <tag><c>safe_fixed_monotonic_time</c></tag>
- <item><p><c>FixationTime</c> will correspond to the result
- returned by
- <seealso marker="erts:erlang#monotonic_time/0">erlang:monotonic_time/0</seealso>
- at the time of fixation. The usage of <c>safe_fixed_monotonic_time</c> is
- <seealso marker="erts:time_correction#Time_Warp_Safe_Code">time warp
- safe</seealso>.</p></item>
- </taglist>
+ time when the table was first fixed by a process, which either
+ is or is not one of the processes it is fixed by now.</p>
+ <p>The format and value of <c>FixationTime</c> depends on
+ <c>Item</c>:</p>
+ <taglist>
+ <tag><c>safe_fixed</c></tag>
+ <item>
+ <p><c>FixationTime</c> corresponds to the result returned by
+ <seealso marker="erts:erlang#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso> at the time of fixation.
+ Notice that when the system uses single or multi
+ <seealso marker="erts:time_correction#Time_Warp_Modes">time
+ warp modes</seealso> this can produce strange results, as
+ the use of <c>safe_fixed</c> is not
+ <seealso marker="erts:time_correction#Time_Warp_Safe_Code">
+ time warp safe</seealso>. Time warp safe code must use
+ <c>safe_fixed_monotonic_time</c> instead.</p>
+ </item>
+ <tag><c>safe_fixed_monotonic_time</c></tag>
+ <item>
+ <p><c>FixationTime</c> corresponds to the result returned by
+ <seealso marker="erts:erlang#monotonic_time/0">
+ <c>erlang:monotonic_time/0</c></seealso> at the time of
+ fixation. The use of <c>safe_fixed_monotonic_time</c> is
+ <seealso marker="erts:time_correction#Time_Warp_Safe_Code">
+ time warp safe</seealso>.</p>
+ </item>
+ </taglist>
<p><c>Info</c> is a possibly empty lists of tuples
<c>{Pid,RefCount}</c>, one tuple for every process the
- table is fixed by right now. <c>RefCount</c> is the value
- of the reference counter, keeping track of how many times
+ table is fixed by now. <c>RefCount</c> is the value
+ of the reference counter and it keeps track of how many times
the table has been fixed by the process.</p>
<p>If the table never has been fixed, the call returns
- <c>false</c>.</p></item>
- <item><p><c>Item=stats, Value=tuple()</c> <br></br>
- Returns internal statistics about set, bag and duplicate_bag tables on an internal format used by OTP test suites.
- Not for production use.</p></item>
+ <c>false</c>.</p>
+ </item>
+ <item>
+ <p><c>Item=stats, Value=tuple()</c></p>
+ <p>Returns internal statistics about <c>set</c>, <c>bag</c>, and
+ <c>duplicate_bag</c> tables on an internal format used by OTP
+ test suites. Not for production use.</p></item>
</list>
</desc>
</func>
+
<func>
<name name="init_table" arity="2"/>
<fsummary>Replace all objects of an ETS table.</fsummary>
<desc>
- <p>Replaces the existing objects of the table <c><anno>Tab</anno></c> with
- objects created by calling the input function <c><anno>InitFun</anno></c>,
+ <p>Replaces the existing objects of table <c><anno>Tab</anno></c> with
+ objects created by calling the input function
+ <c><anno>InitFun</anno></c>,
see below. This function is provided for compatibility with
the <c>dets</c> module, it is not more efficient than filling
- a table by using <c>ets:insert/2</c>.
- </p>
- <p>When called with the argument <c>read</c> the function
- <c><anno>InitFun</anno></c> is assumed to return <c>end_of_input</c> when
+ a table by using
+ <seealso marker="#insert/2"><c>insert/2</c></seealso>.</p>
+ <p>When called with argument <c>read</c>, the function
+ <c><anno>InitFun</anno></c> is assumed to return
+ <c>end_of_input</c> when
there is no more input, or <c>{<anno>Objects</anno>, Fun}</c>, where
- <c><anno>Objects</anno></c> is a list of objects and <c>Fun</c> is a new
- input function. Any other value Value is returned as an error
- <c>{error, {init_fun, Value}}</c>. Each input function will be
- called exactly once, and should an error occur, the last
- function is called with the argument <c>close</c>, the reply
+ <c><anno>Objects</anno></c> is a list of objects and <c>Fun</c> is a
+ new input function. Any other value <c>Value</c> is returned as an
+ error <c>{error, {init_fun, Value}}</c>. Each input function is
+ called exactly once, and if an error occur, the last
+ function is called with argument <c>close</c>, the reply
of which is ignored.</p>
- <p>If the type of the table is <c>set</c> and there is more
- than one object with a given key, one of the objects is
+ <p>If the table type is <c>set</c> and more than one object
+ exists with a given key, one of the objects is
chosen. This is not necessarily the last object with the given
key in the sequence of objects returned by the input
functions. This holds also for duplicated
objects stored in tables of type <c>bag</c>.</p>
</desc>
</func>
+
<func>
<name name="insert" arity="2"/>
<fsummary>Insert an object into an ETS table.</fsummary>
<desc>
- <p>Inserts the object or all of the objects in the list
- <c><anno>ObjectOrObjects</anno></c> into the table <c><anno>Tab</anno></c>.
- If the table is a <c>set</c> and the key of the inserted
- objects <em>matches</em> the key of any object in the table,
- the old object will be replaced. If the table is an
- <c>ordered_set</c> and the key of the inserted object
- <em>compares equal</em> to the key of any object in the
- table, the old object is also replaced. If the list contains
- more than one object with <em>matching</em> keys and the table is a
- <c>set</c>, one will be inserted, which one is
- not defined. The same thing holds for <c>ordered_set</c>, but
- will also happen if the keys <em>compare equal</em>.</p>
+ <p>Inserts the object or all of the objects in list
+ <c><anno>ObjectOrObjects</anno></c> into table
+ <c><anno>Tab</anno></c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If the table type is <c>set</c> and the key of the inserted
+ objects <em>matches</em> the key of any object in the table,
+ the old object is replaced.</p>
+ </item>
+ <item>
+ <p>If the table type is <c>ordered_set</c> and the key of the
+ inserted object <em>compares equal</em> to the key of any object
+ in the table, the old object is replaced.</p>
+ </item>
+ <item>
+ <p>If the list contains more than one object with
+ <em>matching</em> keys and the table type is <c>set</c>, one is
+ inserted, which one is not defined.
+ The same holds for table type <c>ordered_set</c>
+ if the keys <em>compare equal</em>.</p>
+ </item>
+ </list>
<p>The entire operation is guaranteed to be
<seealso marker="#concurrency">atomic and isolated</seealso>,
even when a list of objects is inserted.</p>
</desc>
</func>
+
<func>
<name name="insert_new" arity="2"/>
- <fsummary>Insert an object into an ETS table if the key is not already present.</fsummary>
+ <fsummary>Insert an object into an ETS table if the key is not
+ already present.</fsummary>
<desc>
- <p>This function works exactly like <c>insert/2</c>, with the
- exception that instead of overwriting objects with the same
- key (in the case of <c>set</c> or <c>ordered_set</c>) or
- adding more objects with keys already existing in the table
- (in the case of <c>bag</c> and <c>duplicate_bag</c>), it
- simply returns <c>false</c>. If <c><anno>ObjectOrObjects</anno></c> is a
- list, the function checks <em>every</em> key prior to
- inserting anything. Nothing will be inserted if not
+ <p>Same as <seealso marker="#insert/2"><c>insert/2</c></seealso>
+ except that instead of overwriting objects with the same key
+ (for <c>set</c> or <c>ordered_set</c>) or adding more objects with
+ keys already existing in the table (for <c>bag</c> and
+ <c>duplicate_bag</c>), <c>false</c> is returned.</p>
+ <p>If <c><anno>ObjectOrObjects</anno></c> is a
+ list, the function checks <em>every</em> key before
+ inserting anything. Nothing is inserted unless
<em>all</em> keys present in the list are absent from the
table. Like <c>insert/2</c>, the entire operation is guaranteed to be
<seealso marker="#concurrency">atomic and isolated</seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_compiled_ms" arity="1"/>
- <fsummary>Checks if an Erlang term is the result of ets:match_spec_compile</fsummary>
+ <fsummary>Check if an Erlang term is the result of
+ <c>match_spec_compile</c>.</fsummary>
<desc>
- <p>This function is used to check if a term is a valid
- compiled <seealso marker="#match_spec">match_spec</seealso>.
- The compiled match_spec is an opaque datatype which can
- <em>not</em> be sent between Erlang nodes nor be stored on
+ <p>Checks if a term is a valid
+ compiled <seealso marker="#match_spec">match specification</seealso>.
+ The compiled match specification is an opaque datatype that
+ <em>cannot</em> be sent between Erlang nodes or be stored on
disk. Any attempt to create an external representation of a
- compiled match_spec will result in an empty binary
- (<c><![CDATA[<<>>]]></c>). As an example, the following
- expression:</p>
+ compiled match specification results in an empty binary
+ (<c><![CDATA[<<>>]]></c>).</p>
+ <p><em>Examples:</em></p>
+ <p>The following expression yields <c>true</c>::</p>
<code type="none">
ets:is_compiled_ms(ets:match_spec_compile([{'_',[],[true]}])).</code>
- <p>will yield <c>true</c>, while the following expressions:</p>
+ <p>The following expressions yield <c>false</c>, as variable
+ <c>Broken</c> contains a compiled match specification that has
+ passed through external representation:</p>
<code type="none">
MS = ets:match_spec_compile([{'_',[],[true]}]),
Broken = binary_to_term(term_to_binary(MS)),
ets:is_compiled_ms(Broken).</code>
- <p>will yield false, as the variable <c>Broken</c> will contain
- a compiled match_spec that has passed through external
- representation.</p>
<note>
- <p>The fact that compiled match_specs has no external
- representation is for performance reasons. It may be subject
- to change in future releases, while this interface will
- still remain for backward compatibility reasons.</p>
+ <p>The reason for not having an external representation of
+ compiled match specifications is performance. It can be
+ subject to change in future releases, while this interface
+ remains for backward compatibility.</p>
</note>
</desc>
</func>
+
<func>
<name name="last" arity="1"/>
- <fsummary>Return the last key in an ETS table of type<c>ordered_set</c>.</fsummary>
+ <fsummary>Return the last key in an ETS table of type
+ <c>ordered_set</c>.</fsummary>
<desc>
- <p>Returns the last key <c><anno>Key</anno></c> according to Erlang term
- order in the table <c>Tab</c> of the <c>ordered_set</c> type.
- If the table is of any other type, the function is synonymous
- to <c>first/1</c>. If the table is empty,
- <c>'$end_of_table'</c> is returned.</p>
- <p>Use <c>prev/2</c> to find preceding keys in the table.</p>
+ <p>Returns the last key <c><anno>Key</anno></c> according to Erlang
+ term order in table <c>Tab</c> of type <c>ordered_set</c>. For
+ other table types, the function is synonymous to
+ <seealso marker="#first/1"><c>first/1</c></seealso>.
+ If the table is empty, <c>'$end_of_table'</c> is returned.</p>
+ <p>To find preceding keys in the table, use
+ <seealso marker="#prev/2"><c>prev/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="lookup" arity="2"/>
- <fsummary>Return all objects with a given key in an ETS table.</fsummary>
+ <fsummary>Return all objects with a specified key in an ETS table.
+ </fsummary>
<desc>
- <p>Returns a list of all objects with the key <c><anno>Key</anno></c> in
- the table <c><anno>Tab</anno></c>.</p>
- <p>In the case of <c>set, bag and duplicate_bag</c>, an object
- is returned only if the given key <em>matches</em> the key
- of the object in the table. If the table is an
- <c>ordered_set</c> however, an object is returned if the key
- given <em>compares equal</em> to the key of an object in the
- table. The difference being the same as between <c>=:=</c>
- and <c>==</c>. As an example, one might insert an object
- with the
+ <p>Returns a list of all objects with key <c><anno>Key</anno></c> in
+ table <c><anno>Tab</anno></c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>For tables of type <c>set</c>, <c>bag</c>, or
+ <c>duplicate_bag</c>, an object is returned only if the specified
+ key <em>matches</em> the key of the object in the table.</p>
+ </item>
+ <item>
+ <p>For tables of type <c>ordered_set</c>, an object is returned if
+ the specified key <em>compares equal</em> to the key of an object
+ in the table.</p>
+ </item>
+ </list>
+ <p>The difference is the same as between <c>=:=</c> and <c>==</c>.</p>
+ <p>As an example, one can insert an object with
<c>integer()</c> <c>1</c> as a key in an <c>ordered_set</c>
- and get the object returned as a result of doing a
- <c>lookup/2</c> with the <c>float()</c> <c>1.0</c> as the
- key to search for.</p>
- <p>If the table is of type <c>set</c> or <c>ordered_set</c>,
+ and get the object returned as a result of doing a <c>lookup/2</c>
+ with <c>float()</c> <c>1.0</c> as the key to search for.</p>
+ <p>For tables of type <c>set</c> or <c>ordered_set</c>,
the function returns either the empty list or a list with one
element, as there cannot be more than one object with the same
- key. If the table is of type <c>bag</c> or
- <c>duplicate_bag</c>, the function returns a list of
- arbitrary length.</p>
- <p>Note that the time order of object insertions is preserved;
- the first object inserted with the given key will be first
+ key. For tables of type <c>bag</c> or <c>duplicate_bag</c>, the
+ function returns a list of arbitrary length.</p>
+ <p>Notice that the time order of object insertions is preserved;
+ the first object inserted with the specified key is the first
in the resulting list, and so on.</p>
- <p>Insert and look-up times in tables of type <c>set</c>,
- <c>bag</c> and <c>duplicate_bag</c> are constant, regardless
- of the size of the table. For the <c>ordered_set</c>
- data-type, time is proportional to the (binary) logarithm of
+ <p>Insert and lookup times in tables of type <c>set</c>,
+ <c>bag</c>, and <c>duplicate_bag</c> are constant, regardless
+ of the table size. For the <c>ordered_set</c>
+ datatype, time is proportional to the (binary) logarithm of
the number of objects.</p>
</desc>
</func>
+
<func>
<name name="lookup_element" arity="3"/>
- <fsummary>Return the <c>Pos</c>:th element of all objects with a given key in an ETS table.</fsummary>
+ <fsummary>Return the <c>Pos</c>:th element of all objects with a
+ specified key in an ETS table.</fsummary>
<desc>
- <p>If the table <c><anno>Tab</anno></c> is of type <c>set</c> or
- <c>ordered_set</c>, the function returns the <c><anno>Pos</anno></c>:th
- element of the object with the key <c><anno>Key</anno></c>.</p>
- <p>If the table is of type <c>bag</c> or <c>duplicate_bag</c>,
- the functions returns a list with the <c><anno>Pos</anno></c>:th element of
- every object with the key <c><anno>Key</anno></c>.</p>
- <p>If no object with the key <c><anno>Key</anno></c> exists, the function
- will exit with reason <c>badarg</c>.</p>
- <p>The difference between <c>set</c>, <c>bag</c> and
+ <p>For a table <c><anno>Tab</anno></c> of type <c>set</c> or
+ <c>ordered_set</c>, the function returns the
+ <c><anno>Pos</anno></c>:th
+ element of the object with key <c><anno>Key</anno></c>.</p>
+ <p>For tables of type <c>bag</c> or <c>duplicate_bag</c>,
+ the functions returns a list with the <c><anno>Pos</anno></c>:th
+ element of every object with key <c><anno>Key</anno></c>.</p>
+ <p>If no object with key <c><anno>Key</anno></c> exists, the
+ function exits with reason <c>badarg</c>.</p>
+ <p>The difference between <c>set</c>, <c>bag</c>, and
<c>duplicate_bag</c> on one hand, and <c>ordered_set</c> on
- the other, regarding the fact that <c>ordered_set</c>'s
+ the other, regarding the fact that <c>ordered_set</c>
view keys as equal when they <em>compare equal</em>
- whereas the other table types only regard them equal when
- they <em>match</em>, naturally holds for
- <c>lookup_element</c> as well as for <c>lookup</c>.</p>
+ whereas the other table types regard them equal only when
+ they <em>match</em>, holds for <c>lookup_element/3</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="match" arity="1"/>
+ <fsummary>Continues matching objects in an ETS table.</fsummary>
+ <desc>
+ <p>Continues a match started with
+ <seealso marker="#match/3"><c>match/3</c></seealso>. The next
+ chunk of the size specified in the initial <c>match/3</c>
+ call is returned together with a new <c><anno>Continuation</anno></c>,
+ which can be used in subsequent calls to this function.</p>
+ <p>When there are no more objects in the table, <c>'$end_of_table'</c>
+ is returned.</p>
+ </desc>
+ </func>
+
<func>
<name name="match" arity="2"/>
- <fsummary>Match the objects in an ETS table against a pattern.</fsummary>
+ <fsummary>Match the objects in an ETS table against a pattern.
+ </fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> against the
+ <p>Matches the objects in table <c><anno>Tab</anno></c> against
pattern <c><anno>Pattern</anno></c>.</p>
- <p>A pattern is a term that may contain:</p>
+ <p>A pattern is a term that can contain:</p>
<list type="bulleted">
- <item>bound parts (Erlang terms),</item>
- <item><c>'_'</c> which matches any Erlang term, and</item>
- <item>pattern variables: <c>'$N'</c> where
- <c>N</c>=0,1,...</item>
+ <item>Bound parts (Erlang terms)</item>
+ <item><c>'_'</c> that matches any Erlang term</item>
+ <item>Pattern variables <c>'$N'</c>, where <c>N</c>=0,1,...</item>
</list>
<p>The function returns a list with one element for each
matching object, where each element is an ordered list of
- pattern variable bindings. An example:</p>
+ pattern variable bindings, for example:</p>
<pre>
-6> <input>ets:match(T, '$1').</input> % Matches every object in the table
+6> <input>ets:match(T, '$1').</input> % Matches every object in table
[[{rufsen,dog,7}],[{brunte,horse,5}],[{ludde,dog,5}]]
7> <input>ets:match(T, {'_',dog,'$1'}).</input>
[[7],[5]]
8> <input>ets:match(T, {'_',cow,'$1'}).</input>
[]</pre>
<p>If the key is specified in the pattern, the match is very
- efficient. If the key is not specified, i.e. if it is a
+ efficient. If the key is not specified, that is, if it is a
variable or an underscore, the entire table must be searched.
The search time can be substantial if the table is very large.</p>
- <p>On tables of the <c>ordered_set</c> type, the result is in
- the same order as in a <c>first/next</c> traversal.</p>
+ <p>For tables of type <c>ordered_set</c>, the result is in
+ the same order as in a <c>first</c>/<c>next</c> traversal.</p>
</desc>
</func>
+
<func>
<name name="match" arity="3"/>
- <fsummary>Match the objects in an ETS table against a pattern and returns part of the answers.</fsummary>
+ <fsummary>Match the objects in an ETS table against a pattern
+ and return part of the answers.</fsummary>
<desc>
- <p>Works like <c>ets:match/2</c> but only returns a limited
- (<c><anno>Limit</anno></c>) number of matching objects. The
- <c><anno>Continuation</anno></c> term can then be used in subsequent calls
- to <c>ets:match/1</c> to get the next chunk of matching
- objects. This is a space efficient way to work on objects in a
- table which is still faster than traversing the table object
- by object using <c>ets:first/1</c> and <c>ets:next/1</c>.</p>
- <p><c>'$end_of_table'</c> is returned if the table is empty.</p>
+ <p>Works like <seealso marker="#match/2"><c>match/2</c></seealso>,
+ but returns only a limited (<c><anno>Limit</anno></c>) number of
+ matching objects. Term <c><anno>Continuation</anno></c> can then
+ be used in subsequent calls to <seealso marker="#match/1">
+ <c>match/1</c></seealso> to get the next chunk of matching
+ objects. This is a space-efficient way to work on objects in a
+ table, which is faster than traversing the table object
+ by object using
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
+ <p>If the table is empty, <c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
- <name name="match" arity="1"/>
- <fsummary>Continues matching objects in an ETS table.</fsummary>
+ <name name="match_delete" arity="2"/>
+ <fsummary>Delete all objects that match a specified pattern from an
+ ETS table.</fsummary>
<desc>
- <p>Continues a match started with <c>ets:match/3</c>. The next
- chunk of the size given in the initial <c>ets:match/3</c>
- call is returned together with a new <c><anno>Continuation</anno></c>
- that can be used in subsequent calls to this function.</p>
- <p><c>'$end_of_table'</c> is returned when there are no more
- objects in the table.</p>
+ <p>Deletes all objects that match pattern <c><anno>Pattern</anno></c>
+ from table <c><anno>Tab</anno></c>. For a description of patterns,
+ see <seealso marker="#match/2"><c>match/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="match_delete" arity="2"/>
- <fsummary>Delete all objects which match a given pattern from an ETS table.</fsummary>
+ <name name="match_object" arity="1"/>
+ <fsummary>Continues matching objects in an ETS table.</fsummary>
<desc>
- <p>Deletes all objects which match the pattern <c><anno>Pattern</anno></c>
- from the table <c><anno>Tab</anno></c>. See <c>match/2</c> for a
- description of patterns.</p>
+ <p>Continues a match started with
+ <seealso marker="#match_object/3"><c>match_object/3</c></seealso>.
+ The next chunk of the size specified in the initial
+ <c>match_object/3</c> call is returned together with a new
+ <c><anno>Continuation</anno></c>, which can be used in subsequent
+ calls to this function.</p>
+ <p>When there are no more objects in the table, <c>'$end_of_table'</c>
+ is returned.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="2"/>
- <fsummary>Match the objects in an ETS table against a pattern.</fsummary>
+ <fsummary>Match the objects in an ETS table against a pattern.
+ </fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> against the
- pattern <c><anno>Pattern</anno></c>. See <c>match/2</c> for a description
- of patterns. The function returns a list of all objects which
+ <p>Matches the objects in table <c><anno>Tab</anno></c> against
+ pattern <c><anno>Pattern</anno></c>. For a description of patterns,
+ see <seealso marker="#match/2"><c>match/2</c></seealso>.
+ The function returns a list of all objects that
match the pattern.</p>
<p>If the key is specified in the pattern, the match is very
- efficient. If the key is not specified, i.e. if it is a
+ efficient. If the key is not specified, that is, if it is a
variable or an underscore, the entire table must be searched.
The search time can be substantial if the table is very large.</p>
- <p>On tables of the <c>ordered_set</c> type, the result is in
- the same order as in a <c>first/next</c> traversal.</p>
+ <p>For tables of type <c>ordered_set</c>, the result is in
+ the same order as in a <c>first</c>/<c>next</c> traversal.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="3"/>
- <fsummary>Match the objects in an ETS table against a pattern and returns part of the answers.</fsummary>
+ <fsummary>Match the objects in an ETS table against a pattern and
+ return part of the answers.</fsummary>
<desc>
- <p>Works like <c>ets:match_object/2</c> but only returns a
- limited (<c><anno>Limit</anno></c>) number of matching objects. The
- <c><anno>Continuation</anno></c> term can then be used in subsequent calls
- to <c>ets:match_object/1</c> to get the next chunk of matching
- objects. This is a space efficient way to work on objects in a
- table which is still faster than traversing the table object
- by object using <c>ets:first/1</c> and <c>ets:next/1</c>.</p>
- <p><c>'$end_of_table'</c> is returned if the table is empty.</p>
- </desc>
- </func>
- <func>
- <name name="match_object" arity="1"/>
- <fsummary>Continues matching objects in an ETS table.</fsummary>
- <desc>
- <p>Continues a match started with <c>ets:match_object/3</c>.
- The next chunk of the size given in the initial
- <c>ets:match_object/3</c> call is returned together with a
- new <c><anno>Continuation</anno></c> that can be used in subsequent calls
- to this function.</p>
- <p><c>'$end_of_table'</c> is returned when there are no more
- objects in the table.</p>
+ <p>Works like <seealso marker="#match_object/2">
+ <c>match_object/2</c></seealso>, but only returns a
+ limited (<c><anno>Limit</anno></c>) number of matching objects. Term
+ <c><anno>Continuation</anno></c> can then be used in subsequent
+ calls to <seealso marker="#match_object/1">
+ <c>match_object/1</c></seealso> to get the next chunk of matching
+ objects. This is a space-efficient way to work on objects in a
+ table, which is faster than traversing the table object
+ by object using
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
+ <p>If the table is empty, <c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="match_spec_compile" arity="1"/>
- <fsummary>Compiles a match specification into its internal representation</fsummary>
+ <fsummary>Compile a match specification into its internal representation.
+ </fsummary>
<desc>
- <p>This function transforms a
- <seealso marker="#match_spec">match_spec</seealso> into an
- internal representation that can be used in subsequent calls
- to <c>ets:match_spec_run/2</c>. The internal representation is
- opaque and can not be converted to external term format and
- then back again without losing its properties (meaning it can
- not be sent to a process on another node and still remain a
- valid compiled match_spec, nor can it be stored on disk).
- The validity of a compiled match_spec can be checked using
- <c>ets:is_compiled_ms/1</c>.</p>
- <p>If the term <c><anno>MatchSpec</anno></c> can not be compiled (does not
- represent a valid match_spec), a <c>badarg</c> fault is
- thrown.</p>
+ <p>Transforms a
+ <seealso marker="#match_spec">match specification</seealso> into an
+ internal representation that can be used in subsequent calls to
+ <seealso marker="#match_spec_run/2"><c>match_spec_run/2</c></seealso>.
+ The internal representation is
+ opaque and cannot be converted to external term format and
+ then back again without losing its properties (that is, it cannot
+ be sent to a process on another node and still remain a
+ valid compiled match specification, nor can it be stored on disk).
+ To check the validity of a compiled match specification, use
+ <seealso marker="#is_compiled_ms/1"><c>is_compiled_ms/1</c></seealso>.
+ </p>
+ <p>If term <c><anno>MatchSpec</anno></c> cannot be compiled (does not
+ represent a valid match specification), a <c>badarg</c> exception is
+ raised.</p>
<note>
- <p>This function has limited use in normal code, it is used by
- Dets to perform the <c>dets:select</c> operations.</p>
+ <p>This function has limited use in normal code. It is used by the
+ <seealso marker="dets"><c>dets</c></seealso> module
+ to perform the <c>dets:select()</c> operations.</p>
</note>
</desc>
</func>
+
<func>
<name name="match_spec_run" arity="2"/>
- <fsummary>Performs matching, using a compiled match_spec, on a list of tuples</fsummary>
+ <fsummary>Perform matching, using a compiled match specification on a
+ list of tuples.</fsummary>
<desc>
- <p>This function executes the matching specified in a
- compiled <seealso marker="#match_spec">match_spec</seealso> on
- a list of tuples. The <c><anno>CompiledMatchSpec</anno></c> term should be
- the result of a call to <c>ets:match_spec_compile/1</c> and
- is hence the internal representation of the match_spec one
- wants to use.</p>
- <p>The matching will be executed on each element in <c><anno>List</anno></c>
- and the function returns a list containing all results. If an
- element in <c><anno>List</anno></c> does not match, nothing is returned
+ <p>Executes the matching specified in a compiled
+ <seealso marker="#match_spec">match specification</seealso> on a list
+ of tuples. Term <c><anno>CompiledMatchSpec</anno></c> is to be
+ the result of a call to <seealso marker="#match_spec_compile/1">
+ <c>match_spec_compile/1</c></seealso> and is hence the internal
+ representation of the match specification one wants to use.</p>
+ <p>The matching is executed on each element in <c><anno>List</anno></c>
+ and the function returns a list containing all results. If an element
+ in <c><anno>List</anno></c> does not match, nothing is returned
for that element. The length of the result list is therefore
- equal or less than the the length of the parameter
- <c><anno>List</anno></c>. The two calls in the following example will give
- the same result (but certainly not the same execution
- time...):</p>
+ equal or less than the length of parameter <c><anno>List</anno></c>.
+ </p>
+ <p><em>Example:</em></p>
+ <p>The following two calls give the same result (but certainly not the
+ same execution time):</p>
<code type="none">
Table = ets:new...
-MatchSpec = ....
+MatchSpec = ...
% The following call...
ets:match_spec_run(ets:tab2list(Table),
ets:match_spec_compile(MatchSpec)),
-% ...will give the same result as the more common (and more efficient)
-ets:select(Table,MatchSpec),</code>
+% ...gives the same result as the more common (and more efficient)
+ets:select(Table, MatchSpec),</code>
<note>
- <p>This function has limited use in normal code, it is used by
- Dets to perform the <c>dets:select</c> operations and by
+ <p>This function has limited use in normal code. It is used by the
+ <seealso marker="dets"><c>dets</c></seealso> module
+ to perform the <c>dets:select()</c> operations and by
Mnesia during transactions.</p>
</note>
</desc>
</func>
+
<func>
<name name="member" arity="2"/>
- <fsummary>Tests for occurrence of a key in an ETS table</fsummary>
+ <fsummary>Tests for occurrence of a key in an ETS table.</fsummary>
<desc>
- <p>Works like <c>lookup/2</c>, but does not return the objects.
- The function returns <c>true</c> if one or more elements in
- the table has the key <c><anno>Key</anno></c>, <c>false</c> otherwise.</p>
+ <p>Works like <seealso marker="#lookup/2"><c>lookup/2</c></seealso>,
+ but does not return the objects. Returns <c>true</c> if one or more
+ elements in the table has key <c><anno>Key</anno></c>, otherwise
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="new" arity="2"/>
<fsummary>Create a new ETS table.</fsummary>
<desc>
- <p>Creates a new table and returns a table identifier which can
+ <p>Creates a new table and returns a table identifier that can
be used in subsequent operations. The table identifier can be
sent to other processes so that a table can be shared between
different processes within a node.</p>
- <p>The parameter <c><anno>Options</anno></c> is a list of atoms which
- specifies table type, access rights, key position and if the
- table is named or not. If one or more options are left out,
- the default values are used. This means that not specifying
- any options (<c>[]</c>) is the same as specifying
- <c>[set, protected, {keypos,1}, {heir,none}, {write_concurrency,false}, {read_concurrency,false}]</c>.</p>
- <list type="bulleted">
+ <p>Parameter <c><anno>Options</anno></c> is a list of atoms that
+ specifies table type, access rights, key position, and whether the
+ table is named. Default values are used for omitted options.
+ This means that not specifying any options (<c>[]</c>) is the same
+ as specifying <c>[set, protected, {keypos,1}, {heir,none},
+ {write_concurrency,false}, {read_concurrency,false}]</c>.</p>
+ <taglist>
+ <tag><c>set</c></tag>
<item>
- <p><c>set</c>
- The table is a <c>set</c> table - one key, one object,
+ <p>The table is a <c>set</c> table: one key, one object,
no order among objects. This is the default table type.</p>
</item>
+ <tag><c>ordered_set</c></tag>
<item>
- <p><c>ordered_set</c>
- The table is a <c>ordered_set</c> table - one key, one
+ <p>The table is a <c>ordered_set</c> table: one key, one
object, ordered in Erlang term order, which is the order
implied by the &lt; and &gt; operators. Tables of this type
have a somewhat different behavior in some situations
- than tables of the other types. Most notably the
+ than tables of other types. Most notably, the
<c>ordered_set</c> tables regard keys as equal when they
<em>compare equal</em>, not only when they match. This
- means that to an <c>ordered_set</c>, the
- <c>integer()</c> <c>1</c> and the <c>float()</c> <c>1.0</c> are regarded as equal. This also means that the
+ means that to an <c>ordered_set</c> table, <c>integer()</c>
+ <c>1</c> and <c>float()</c> <c>1.0</c> are regarded as equal.
+ This also means that the
key used to lookup an element not necessarily
- <em>matches</em> the key in the elements returned, if
+ <em>matches</em> the key in the returned elements, if
<c>float()</c>'s and <c>integer()</c>'s are mixed in
keys of a table.</p>
</item>
+ <tag><c>bag</c></tag>
<item>
- <p><c>bag</c>
- The table is a <c>bag</c> table which can have many
+ <p>The table is a <c>bag</c> table, which can have many
objects, but only one instance of each object, per key.</p>
</item>
+ <tag><c>duplicate_bag</c></tag>
<item>
- <p><c>duplicate_bag</c>
- The table is a <c>duplicate_bag</c> table which can have
+ <p>The table is a <c>duplicate_bag</c> table, which can have
many objects, including multiple copies of the same
object, per key.</p>
</item>
+ <tag><c>public</c></tag>
<item>
- <p><c>public</c>
- Any process may read or write to the table.</p>
+ <p>Any process can read or write to the table.</p>
+ <marker id="protected"></marker>
</item>
+ <tag><c>protected</c></tag>
<item>
- <marker id="protected"></marker>
- <p><c>protected</c>
- The owner process can read and write to the table. Other
+ <p>The owner process can read and write to the table. Other
processes can only read the table. This is the default
setting for the access rights.</p>
+ <marker id="private"></marker>
</item>
+ <tag><c>private</c></tag>
<item>
- <marker id="private"></marker>
- <p><c>private</c>
- Only the owner process can read or write to the table.</p>
+ <p>Only the owner process can read or write to the table.</p>
</item>
+ <tag><c>named_table</c></tag>
<item>
- <p><c>named_table</c>
- If this option is present, the name <c><anno>Name</anno></c> is
+ <p>If this option is present, name <c><anno>Name</anno></c> is
associated with the table identifier. The name can then
be used instead of the table identifier in subsequent
operations.</p>
</item>
+ <tag><c>{keypos,<anno>Pos</anno>}</c></tag>
<item>
- <p><c>{keypos,<anno>Pos</anno>}</c>
- Specifies which element in the stored tuples should be
- used as key. By default, it is the first element, i.e.
- <c><anno>Pos</anno>=1</c>. However, this is not always appropriate. In
+ <p>Specifies which element in the stored tuples to use
+ as key. By default, it is the first element, that is,
+ <c><anno>Pos</anno>=1</c>. However, this is not always
+ appropriate. In
particular, we do not want the first element to be the
key if we want to store Erlang records in a table.</p>
- <p>Note that any tuple stored in the table must have at
+ <p>Notice that any tuple stored in the table must have at
least <c><anno>Pos</anno></c> number of elements.</p>
- </item>
- <item>
<marker id="heir"></marker>
- <p><c>{heir,<anno>Pid</anno>,<anno>HeirData</anno>} | {heir,none}</c><br></br>
- Set a process as heir. The heir will inherit the table if
- the owner terminates. The message
- <c>{'ETS-TRANSFER',tid(),FromPid,<anno>HeirData</anno>}</c> will be sent to
- the heir when that happens. The heir must be a local process.
- Default heir is <c>none</c>, which will destroy the table when
- the owner terminates.</p>
</item>
+ <tag><c>{heir,<anno>Pid</anno>,<anno>HeirData</anno>} |
+ {heir,none}</c></tag>
<item>
+ <p>Set a process as heir. The heir inherits the table if
+ the owner terminates. Message
+ <c>{'ETS-TRANSFER',tid(),FromPid,<anno>HeirData</anno>}</c> is
+ sent to the heir when that occurs. The heir must be a local
+ process. Default heir is <c>none</c>, which destroys the table
+ when the owner terminates.</p>
<marker id="new_2_write_concurrency"></marker>
- <p><c>{write_concurrency,boolean()}</c>
- Performance tuning. Default is <c>false</c>, in which case an operation that
- mutates (writes to) the table will obtain exclusive access,
- blocking any concurrent access of the same table until finished.
- If set to <c>true</c>, the table is optimized towards concurrent
- write access. Different objects of the same table can be mutated
- (and read) by concurrent processes. This is achieved to some degree
- at the expense of memory consumption and the performance of
- sequential access and concurrent reading.
- The <c>write_concurrency</c> option can be combined with the
- <seealso marker="#new_2_read_concurrency">read_concurrency</seealso>
- option. You typically want to combine these when large concurrent
- read bursts and large concurrent write bursts are common (see the
- documentation of the
- <seealso marker="#new_2_read_concurrency">read_concurrency</seealso>
- option for more information).
- Note that this option does not change any guarantees about
- <seealso marker="#concurrency">atomicy and isolation</seealso>.
- Functions that makes such promises over several objects (like
- <c>insert/2</c>) will gain less (or nothing) from this option.</p>
- <p>In current implementation, table type <c>ordered_set</c> is not
- affected by this option. Also, the memory consumption inflicted by
- both <c>write_concurrency</c> and <c>read_concurrency</c> is a
- constant overhead per table. This overhead can be especially large
- when both options are combined.</p>
</item>
+ <tag><c>{write_concurrency,boolean()}</c></tag>
<item>
+ <p>Performance tuning. Defaults to <c>false</c>, in which case an
+ operation that
+ mutates (writes to) the table obtains exclusive access,
+ blocking any concurrent access of the same table until finished.
+ If set to <c>true</c>, the table is optimized to concurrent
+ write access. Different objects of the same table can be mutated
+ (and read) by concurrent processes. This is achieved to some
+ degree at the expense of memory consumption and the performance
+ of sequential access and concurrent reading.</p>
+ <p>Option <c>write_concurrency</c> can be combined with option
+ <seealso marker="#new_2_read_concurrency">
+ <c>read_concurrency</c></seealso>. You typically want to combine
+ these when large concurrent read bursts and large concurrent
+ write bursts are common; for more information, see option
+ <seealso marker="#new_2_read_concurrency">
+ <c>read_concurrency</c></seealso>.</p>
+ <p>Notice that this option does not change any guarantees about
+ <seealso marker="#concurrency">atomicity and isolation</seealso>.
+ Functions that makes such promises over many objects (like
+ <seealso marker="#insert/2"><c>insert/2</c></seealso>)
+ gain less (or nothing) from this option.</p>
+ <p>Table type <c>ordered_set</c> is not affected by this option.
+ Also, the memory consumption inflicted by
+ both <c>write_concurrency</c> and <c>read_concurrency</c> is a
+ constant overhead per table. This overhead can be especially
+ large when both options are combined.</p>
<marker id="new_2_read_concurrency"></marker>
- <p><c>{read_concurrency,boolean()}</c>
- Performance tuning. Default is <c>false</c>. When set to
- <c>true</c>, the table is optimized for concurrent read
- operations. When this option is enabled on a runtime system with
- SMP support, read operations become much cheaper; especially on
- systems with multiple physical processors. However, switching
- between read and write operations becomes more expensive. You
- typically want to enable this option when concurrent read
- operations are much more frequent than write operations, or when
- concurrent reads and writes comes in large read and write
- bursts (i.e., lots of reads not interrupted by writes, and lots
- of writes not interrupted by reads). You typically do
- <em>not</em> want to enable this option when the common access
- pattern is a few read operations interleaved with a few write
- operations repeatedly. In this case you will get a performance
- degradation by enabling this option. The <c>read_concurrency</c>
- option can be combined with the
- <seealso marker="#new_2_write_concurrency">write_concurrency</seealso>
- option. You typically want to combine these when large concurrent
- read bursts and large concurrent write bursts are common.</p>
</item>
+ <tag><c>{read_concurrency,boolean()}</c></tag>
<item>
+ <p>Performance tuning. Defaults to <c>false</c>. When set to
+ <c>true</c>, the table is optimized for concurrent read
+ operations. When this option is enabled on a runtime system with
+ SMP support, read operations become much cheaper; especially on
+ systems with multiple physical processors. However, switching
+ between read and write operations becomes more expensive.</p>
+ <p>You typically want to enable this option when concurrent read
+ operations are much more frequent than write operations, or when
+ concurrent reads and writes comes in large read and write bursts
+ (that is, many reads not interrupted by writes, and many
+ writes not interrupted by reads).</p>
+ <p>You typically do
+ <em>not</em> want to enable this option when the common access
+ pattern is a few read operations interleaved with a few write
+ operations repeatedly. In this case, you would get a performance
+ degradation by enabling this option.</p>
+ <p>Option <c>read_concurrency</c> can be combined with option
+ <seealso marker="#new_2_write_concurrency">
+ <c>write_concurrency</c></seealso>.
+ You typically want to combine these when large concurrent
+ read bursts and large concurrent write bursts are common.</p>
<marker id="new_2_compressed"></marker>
- <p><c>compressed</c>
- If this option is present, the table data will be stored in a more compact format to
- consume less memory. The downside is that it will make table operations slower.
- Especially operations that need to inspect entire objects,
- such as <c>match</c> and <c>select</c>, will get much slower. The key element
- is not compressed in current implementation.</p>
</item>
- </list>
+ <tag><c>compressed</c></tag>
+ <item>
+ <p>If this option is present, the table data is stored in a more
+ compact format to consume less memory. However, it will make
+ table operations slower. Especially operations that need to
+ inspect entire objects, such as <c>match</c> and <c>select</c>,
+ get much slower. The key element is not compressed.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
<name name="next" arity="2"/>
<fsummary>Return the next key in an ETS table.</fsummary>
<desc>
- <p>Returns the next key <c><anno>Key2</anno></c>, following the key
- <c><anno>Key1</anno></c> in the table <c><anno>Tab</anno></c>. If the table is of the
- <c>ordered_set</c> type, the next key in Erlang term order is
- returned. If the table is of any other type, the next key
- according to the table's internal order is returned. If there
- is no next key, <c>'$end_of_table'</c> is returned.</p>
- <p>Use <c>first/1</c> to find the first key in the table.</p>
- <p>Unless a table of type <c>set</c>, <c>bag</c> or
+ <p>Returns the next key <c><anno>Key2</anno></c>, following key
+ <c><anno>Key1</anno></c> in table <c><anno>Tab</anno></c>. For table
+ type <c>ordered_set</c>, the next key in Erlang term order is
+ returned. For other table types, the next key
+ according to the internal order of the table is returned. If no
+ next key exists, <c>'$end_of_table'</c> is returned.</p>
+ <p>To find the first key in the table, use
+ <seealso marker="#first/1"><c>first/1</c></seealso>.</p>
+ <p>Unless a table of type <c>set</c>, <c>bag</c>, or
<c>duplicate_bag</c> is protected using
- <c>safe_fixtable/2</c>, see below, a traversal may fail if
- concurrent updates are made to the table. If the table is of
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>,
+ a traversal can fail if
+ concurrent updates are made to the table. For table
type <c>ordered_set</c>, the function returns the next key in
order, even if the object does no longer exist.</p>
</desc>
</func>
+
<func>
<name name="prev" arity="2"/>
- <fsummary>Return the previous key in an ETS table of type<c>ordered_set</c>.</fsummary>
+ <fsummary>Return the previous key in an ETS table of type
+ <c>ordered_set</c>.</fsummary>
<desc>
- <p>Returns the previous key <c><anno>Key2</anno></c>, preceding the key
- <c><anno>Key1</anno></c> according the Erlang term order in the table
- <c><anno>Tab</anno></c> of the <c>ordered_set</c> type. If the table is of
- any other type, the function is synonymous to <c>next/2</c>.
- If there is no previous key, <c>'$end_of_table'</c> is
- returned.</p>
- <p>Use <c>last/1</c> to find the last key in the table.</p>
+ <p>Returns the previous key <c><anno>Key2</anno></c>, preceding key
+ <c><anno>Key1</anno></c> according to Erlang term order in table
+ <c><anno>Tab</anno></c> of type <c>ordered_set</c>. For other
+ table types, the function is synonymous to
+ <seealso marker="#next/2"><c>next/2</c></seealso>.
+ If no previous key exists, <c>'$end_of_table'</c> is returned.</p>
+ <p>To find the last key in the table, use
+ <seealso marker="#last/1"><c>last/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="rename" arity="2"/>
<fsummary>Rename a named ETS table.</fsummary>
<desc>
<p>Renames the named table <c><anno>Tab</anno></c> to the new name
- <c><anno>Name</anno></c>. Afterwards, the old name can not be used to
+ <c><anno>Name</anno></c>. Afterwards, the old name cannot be used to
access the table. Renaming an unnamed table has no effect.</p>
</desc>
</func>
+
<func>
<name name="repair_continuation" arity="2"/>
- <fsummary>Repair a continuation from ets:select/1 or ets:select/3 that has passed through external representation</fsummary>
+ <fsummary>Repair a continuation from <c>ets:select/1 or ets:select/3</c>
+ that has passed through external representation.</fsummary>
<desc>
- <p>This function can be used to restore an opaque continuation
- returned by <c>ets:select/3</c> or <c>ets:select/1</c> if the
+ <p>Restores an opaque continuation returned by
+ <seealso marker="#select/3"><c>select/3</c></seealso> or
+ <seealso marker="#select/1"><c>select/1</c></seealso> if the
continuation has passed through external term format (been
sent between nodes or stored on disk).</p>
<p>The reason for this function is that continuation terms
- contain compiled match_specs and therefore will be
- invalidated if converted to external term format. Given that
- the original match_spec is kept intact, the continuation can
+ contain compiled match specifications and therefore are
+ invalidated if converted to external term format. Given that the
+ original match specification is kept intact, the continuation can
be restored, meaning it can once again be used in subsequent
- <c>ets:select/1</c> calls even though it has been stored on
+ <c>select/1</c> calls even though it has been stored on
disk or on another node.</p>
- <p>As an example, the following sequence of calls will fail:</p>
+ <p><em>Examples:</em></p>
+ <p>The following sequence of calls fails:</p>
<code type="none">
T=ets:new(x,[]),
...
@@ -1089,7 +1240,9 @@ A
end),10),
Broken = binary_to_term(term_to_binary(C)),
ets:select(Broken).</code>
- <p>...while the following sequence will work:</p>
+ <p>The following sequence works, as the call to
+ <c>repair_continuation/2</c> reestablishes the (deliberately)
+ invalidated continuation <c>Broken</c>.</p>
<code type="none">
T=ets:new(x,[]),
...
@@ -1100,45 +1253,44 @@ end),
{_,C} = ets:select(T,MS,10),
Broken = binary_to_term(term_to_binary(C)),
ets:select(ets:repair_continuation(Broken,MS)).</code>
- <p>...as the call to <c>ets:repair_continuation/2</c> will
- reestablish the (deliberately) invalidated continuation
- <c>Broken</c>.</p>
<note>
- <p>This function is very rarely needed in application code. It
- is used by Mnesia to implement distributed <c>select/3</c>
+ <p>This function is rarely needed in application code. It is used
+ by Mnesia to provide distributed <c>select/3</c>
and <c>select/1</c> sequences. A normal application would
either use Mnesia or keep the continuation from being
converted to external format.</p>
<p>The reason for not having an external representation of a
- compiled match_spec is performance. It may be subject to
- change in future releases, while this interface will remain
+ compiled match specification is performance. It can be subject to
+ change in future releases, while this interface remains
for backward compatibility.</p>
</note>
</desc>
</func>
+
<func>
<name name="safe_fixtable" arity="2"/>
<fsummary>Fix an ETS table for safe traversal.</fsummary>
<desc>
- <p>Fixes a table of the <c>set</c>, <c>bag</c> or
- <c>duplicate_bag</c> table type for safe traversal.</p>
+ <p>Fixes a table of type <c>set</c>, <c>bag</c>, or
+ <c>duplicate_bag</c> for safe traversal.</p>
<p>A process fixes a table by calling
- <c>safe_fixtable(<anno>Tab</anno>, true)</c>. The table remains fixed until
- the process releases it by calling
+ <c>safe_fixtable(<anno>Tab</anno>, true)</c>. The table remains
+ fixed until the process releases it by calling
<c>safe_fixtable(<anno>Tab</anno>, false)</c>, or until the process
terminates.</p>
- <p>If several processes fix a table, the table will remain fixed
+ <p>If many processes fix a table, the table remains fixed
until all processes have released it (or terminated).
A reference counter is kept on a per process basis, and N
- consecutive fixes requires N releases to actually release
- the table.</p>
- <p>When a table is fixed, a sequence of <c>first/1</c> and
- <c>next/2</c> calls are guaranteed to succeed and each object in
- the table will only be returned once, even if objects
- are removed or inserted during the traversal.
- The keys for new objects inserted during the traversal <em>may</em>
- be returned by <seealso marker="#next/2">next/2</seealso>
- (it depends on the internal ordering of the keys). An example:</p>
+ consecutive fixes requires N releases to release the table.</p>
+ <p>When a table is fixed, a sequence of
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso> calls are
+ guaranteed to succeed, and each object in
+ the table is returned only once, even if objects
+ are removed or inserted during the traversal. The keys for new
+ objects inserted during the traversal <em>can</em> be returned by
+ <c>next/2</c> (it depends on the internal ordering of the keys).</p>
+ <p><em>Example:</em></p>
<code type="none">
clean_all_with_value(Tab,X) ->
safe_fixtable(Tab,true),
@@ -1155,218 +1307,205 @@ clean_all_with_value(Tab,X,Key) ->
true
end,
clean_all_with_value(Tab,X,ets:next(Tab,Key)).</code>
- <p>Note that no deleted objects are actually removed from a
+ <p>Notice that no deleted objects are removed from a
fixed table until it has been released. If a process fixes a
table but never releases it, the memory used by the deleted
- objects will never be freed. The performance of operations on
- the table will also degrade significantly.</p>
- <p>Use
- <seealso marker="#info_2_safe_fixed_monotonic_time"><c>info(Tab,
- safe_fixed_monotonic_time)</c></seealso> to retrieve information
- about which processes have fixed which tables. A system with a lot
- of processes fixing tables may need a monitor which sends alarms
+ objects is never freed. The performance of operations on
+ the table also degrades significantly.</p>
+ <p>To retrieve information about which processes have fixed which
+ tables, use <seealso marker="#info_2_safe_fixed_monotonic_time">
+ <c>info(Tab, safe_fixed_monotonic_time)</c></seealso>. A system with
+ many processes fixing tables can need a monitor that sends alarms
when tables have been fixed for too long.</p>
- <p>Note that for tables of the <c>ordered_set</c> type,
- <c>safe_fixtable/2</c> is not necessary as calls to
- <c>first/1</c> and <c>next/2</c> will always succeed.</p>
+ <p>Notice that for table type <c>ordered_set</c>,
+ <c>safe_fixtable/2</c> is not necessary, as calls to
+ <c>first/1</c> and <c>next/2</c> always succeed.</p>
</desc>
</func>
+
+ <func>
+ <name name="select" arity="1"/>
+ <fsummary>Continue matching objects in an ETS table.</fsummary>
+ <desc>
+ <p>Continues a match started with
+ <seealso marker="#select/3"><c>select/3</c></seealso>. The next
+ chunk of the size specified in the initial <c>select/3</c>
+ call is returned together with a new <c><anno>Continuation</anno></c>,
+ which can be used in subsequent calls to this function.</p>
+ <p>When there are no more objects in the table, <c>'$end_of_table'</c>
+ is returned.</p>
+ </desc>
+ </func>
+
<func>
<name name="select" arity="2"/>
- <fsummary>Match the objects in an ETS table against a match_spec.</fsummary>
+ <fsummary>Match the objects in an ETS table against a
+ match specification.</fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> using a
- <seealso marker="#match_spec">match_spec</seealso>. This is a
- more general call than the <c>ets:match/2</c> and
- <c>ets:match_object/2</c> calls. In its simplest forms the
- match_specs look like this:</p>
- <list type="bulleted">
- <item>MatchSpec = [MatchFunction]</item>
- <item>MatchFunction = {MatchHead, [Guard], [Result]}</item>
- <item>MatchHead = "Pattern as in ets:match"</item>
- <item>Guard = {"Guardtest name", ...}</item>
- <item>Result = "Term construct"</item>
- </list>
- <p>This means that the match_spec is always a list of one or
- more tuples (of arity 3). The tuples first element should be
- a pattern as described in the documentation of
- <c>ets:match/2</c>. The second element of the tuple should
+ <p>Matches the objects in table <c><anno>Tab</anno></c> using a
+ <seealso marker="#match_spec">match specification</seealso>.
+ This is a more general call than
+ <seealso marker="#match/2"><c>match/2</c></seealso> and
+ <seealso marker="#match_object/2"><c>match_object/2</c></seealso>
+ calls. In its simplest form, the match specification is as
+ follows:</p>
+ <code type="none">
+MatchSpec = [MatchFunction]
+MatchFunction = {MatchHead, [Guard], [Result]}
+MatchHead = "Pattern as in ets:match"
+Guard = {"Guardtest name", ...}
+Result = "Term construct"</code>
+ <p>This means that the match specification is always a list of one or
+ more tuples (of arity 3). The first element of the tuple is to be
+ a pattern as described in
+ <seealso marker="#match/2"><c>match/2</c></seealso>.
+ The second element of the tuple is to
be a list of 0 or more guard tests (described below). The
- third element of the tuple should be a list containing a
- description of the value to actually return. In almost all
- normal cases the list contains exactly one term which fully
+ third element of the tuple is to be a list containing a
+ description of the value to return. In almost all
+ normal cases, the list contains exactly one term that fully
describes the value to return for each object.</p>
<p>The return value is constructed using the "match variables"
- bound in the MatchHead or using the special match variables
+ bound in <c>MatchHead</c> or using the special match variables
<c>'$_'</c> (the whole matching object) and <c>'$$'</c> (all
match variables in a list), so that the following
- <c>ets:match/2</c> expression:</p>
+ <c>match/2</c> expression:</p>
<code type="none">
ets:match(Tab,{'$1','$2','$3'})</code>
<p>is exactly equivalent to:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$3'},[],['$$']}])</code>
- <p>- and the following <c>ets:match_object/2</c> call:</p>
+ <p>And that the following <c>match_object/2</c> call:</p>
<code type="none">
ets:match_object(Tab,{'$1','$2','$1'})</code>
<p>is exactly equivalent to</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$1'},[],['$_']}])</code>
<p>Composite terms can be constructed in the <c>Result</c> part
- either by simply writing a list, so that this code:</p>
+ either by simply writing a list, so that the following code:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$3'},[],['$$']}])</code>
<p>gives the same output as:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$3'},[],[['$1','$2','$3']]}])</code>
- <p>i.e. all the bound variables in the match head as a list. If
+ <p>That is, all the bound variables in the match head as a list. If
tuples are to be constructed, one has to write a tuple of
- arity 1 with the single element in the tuple being the tuple
- one wants to construct (as an ordinary tuple could be mistaken
- for a <c>Guard</c>). Therefore the following call:</p>
+ arity 1 where the single element in the tuple is the tuple
+ one wants to construct (as an ordinary tuple can be mistaken
+ for a <c>Guard</c>).</p>
+ <p>Therefore the following call:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$1'},[],['$_']}])</code>
<p>gives the same output as:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$1'},[],[{{'$1','$2','$3'}}]}])</code>
- <p>- this syntax is equivalent to the syntax used in the trace
- patterns (see
- <seealso marker="runtime_tools:dbg">dbg(3)</seealso>).</p>
- <p>The <c>Guard</c>s are constructed as tuples where the first
- element is the name of the test and the rest of the elements
- are the parameters of the test. To check for a specific type
+ <p>This syntax is equivalent to the syntax used in the trace
+ patterns (see the
+ <seealso marker="runtime_tools:dbg">
+ <c>dbg(3)</c></seealso>) module in Runtime_Tools.</p>
+ <p>The <c>Guard</c>s are constructed as tuples, where the first
+ element is the test name and the remaining elements
+ are the test parameters. To check for a specific type
(say a list) of the element bound to the match variable
<c>'$1'</c>, one would write the test as
<c>{is_list, '$1'}</c>. If the test fails, the object in the
- table will not match and the next <c>MatchFunction</c> (if
- any) will be tried. Most guard tests present in Erlang can be
+ table does not match and the next <c>MatchFunction</c> (if
+ any) is tried. Most guard tests present in Erlang can be
used, but only the new versions prefixed <c>is_</c> are
- allowed (like <c>is_float</c>, <c>is_atom</c> etc).</p>
+ allowed (<c>is_float</c>, <c>is_atom</c>, and so on).</p>
<p>The <c>Guard</c> section can also contain logic and
arithmetic operations, which are written with the same syntax
- as the guard tests (prefix notation), so that a guard test
- written in Erlang looking like this:</p>
+ as the guard tests (prefix notation), so that the following
+ guard test written in Erlang:</p>
<code type="none"><![CDATA[
is_integer(X), is_integer(Y), X + Y < 4711]]></code>
- <p>is expressed like this (X replaced with '$1' and Y with
- '$2'):</p>
+ <p>is expressed as follows (<c>X</c> replaced with <c>'$1'</c> and
+ <c>Y</c> with <c>'$2'</c>):</p>
<code type="none"><![CDATA[
[{is_integer, '$1'}, {is_integer, '$2'}, {'<', {'+', '$1', '$2'}, 4711}]]]></code>
- <p>On tables of the <c>ordered_set</c> type, objects are visited
- in the same order as in a <c>first/next</c>
- traversal. This means that the match specification will be
- executed against objects with keys in the <c>first/next</c>
- order and the corresponding result list will be in the order of that
+ <p>For tables of type <c>ordered_set</c>, objects are visited
+ in the same order as in a <c>first</c>/<c>next</c>
+ traversal. This means that the match specification is
+ executed against objects with keys in the <c>first</c>/<c>next</c>
+ order and the corresponding result list is in the order of that
execution.</p>
-
</desc>
</func>
+
<func>
<name name="select" arity="3"/>
- <fsummary>Match the objects in an ETS table against a match_spec and returns part of the answers.</fsummary>
+ <fsummary>Match the objects in an ETS table against a match
+ specification and return part of the answers.</fsummary>
<desc>
- <p>Works like <c>ets:select/2</c> but only returns a limited
- (<c><anno>Limit</anno></c>) number of matching objects. The
- <c><anno>Continuation</anno></c> term can then be used in subsequent calls
- to <c>ets:select/1</c> to get the next chunk of matching
- objects. This is a space efficient way to work on objects in a
- table which is still faster than traversing the table object
- by object using <c>ets:first/1</c> and <c>ets:next/1</c>.</p>
- <p><c>'$end_of_table'</c> is returned if the table is empty.</p>
- </desc>
- </func>
- <func>
- <name name="select" arity="1"/>
- <fsummary>Continue matching objects in an ETS table.</fsummary>
- <desc>
- <p>Continues a match started with
- <c>ets:select/3</c>. The next
- chunk of the size given in the initial <c>ets:select/3</c>
- call is returned together with a new <c><anno>Continuation</anno></c>
- that can be used in subsequent calls to this function.</p>
- <p><c>'$end_of_table'</c> is returned when there are no more
- objects in the table.</p>
+ <p>Works like <seealso marker="#select/2"><c>select/2</c></seealso>,
+ but only returns a limited
+ (<c><anno>Limit</anno></c>) number of matching objects. Term
+ <c><anno>Continuation</anno></c> can then be used in subsequent
+ calls to <seealso marker="#select/1"><c>select/1</c></seealso>
+ to get the next chunk of matching
+ objects. This is a space-efficient way to work on objects in a
+ table, which is still faster than traversing the table object by
+ object using <seealso marker="#first/1"><c>first/1</c></seealso>
+ and <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
+ <p>If the table is empty, <c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="select_count" arity="2"/>
- <fsummary>Match the objects in an ETS table against a match_spec and returns the number of objects for which the match_spec returned 'true'</fsummary>
+ <fsummary>Match the objects in an ETS table against a match
+ specification and return the number of objects for which the match
+ specification returned <c>true</c>.</fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> using a
- <seealso marker="#match_spec">match_spec</seealso>. If the
- match_spec returns <c>true</c> for an object, that object
+ <p>Matches the objects in table <c><anno>Tab</anno></c> using a
+ <seealso marker="#match_spec">match specificationc</seealso>. If the
+ match specification returns <c>true</c> for an object, that object
considered a match and is counted. For any other result from
- the match_spec the object is not considered a match and is
+ the match specification the object is not considered a match and is
therefore not counted.</p>
- <p>The function could be described as a <c>match_delete/2</c>
- that does not actually delete any elements, but only counts
- them.</p>
+ <p>This function can be described as a
+ <seealso marker="#match_delete/2"><c>match_delete/2</c></seealso>
+ function that does not delete any elements, but only counts them.</p>
<p>The function returns the number of objects matched.</p>
</desc>
</func>
+
<func>
<name name="select_delete" arity="2"/>
- <fsummary>Match the objects in an ETS table against a match_spec and deletes objects where the match_spec returns 'true'</fsummary>
+ <fsummary>Match the objects in an ETS table against a match
+ specification and delete objects where the match specification
+ returns <c>true</c>.</fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> using a
- <seealso marker="#match_spec">match_spec</seealso>. If the
- match_spec returns <c>true</c> for an object, that object is
- removed from the table. For any other result from the
- match_spec the object is retained. This is a more general
- call than the <c>ets:match_delete/2</c> call.</p>
- <p>The function returns the number of objects actually
+ <p>Matches the objects in table <c><anno>Tab</anno></c> using a
+ <seealso marker="#match_spec">match specification</seealso>. If the
+ match specification returns <c>true</c> for an object, that object is
+ removed from the table. For any other result from the match
+ specification the object is retained. This is a more general
+ call than the <seealso marker="#match_delete/2">
+ <c>match_delete/2</c></seealso> call.</p>
+ <p>The function returns the number of objects
deleted from the table.</p>
<note>
- <p>The <c>match_spec</c> has to return the atom <c>true</c> if
- the object is to be deleted. No other return value will get the
- object deleted, why one can not use the same match specification for
+ <p>The match specification has to return the atom <c>true</c> if
+ the object is to be deleted. No other return value gets the
+ object deleted. So one cannot use the same match specification for
looking up elements as for deleting them.</p>
</note>
</desc>
</func>
- <func>
- <name name="select_reverse" arity="2"/>
- <fsummary>Match the objects in an ETS table against a match_spec.</fsummary>
- <desc>
-
- <p>Works like <c>select/2</c>, but returns the list in reverse
- order for the <c>ordered_set</c> table type. For all other table
- types, the return value is identical to that of <c>select/2</c>.</p>
-
- </desc>
- </func>
- <func>
- <name name="select_reverse" arity="3"/>
- <fsummary>Match the objects in an ETS table against a match_spec and returns part of the answers.</fsummary>
- <desc>
-
- <p>Works like <c>select/3</c>, but for the <c>ordered_set</c>
- table type, traversing is done starting at the last object in
- Erlang term order and moves towards the first. For all other
- table types, the return value is identical to that of
- <c>select/3</c>.</p>
- <p>Note that this is <em>not</em> equivalent to
- reversing the result list of a <c>select/3</c> call, as the result list
- is not only reversed, but also contains the last <c><anno>Limit</anno></c>
- matching objects in the table, not the first.</p>
-
- </desc>
- </func>
<func>
<name name="select_reverse" arity="1"/>
<fsummary>Continue matching objects in an ETS table.</fsummary>
<desc>
-
- <p>Continues a match started with
- <c>ets:select_reverse/3</c>. If the table is an
- <c>ordered_set</c>, the traversal of the table will continue
- towards objects with keys earlier in the Erlang term order. The
- returned list will also contain objects with keys in reverse
- order.</p>
-
- <p>For all other table types, the behaviour is exactly that of <c>select/1</c>.</p>
- <p>Example:</p>
+ <p>Continues a match started with <seealso marker="#select_reverse/3">
+ <c>select_reverse/3</c></seealso>. For tables of type
+ <c>ordered_set</c>, the traversal of the table continues
+ to objects with keys earlier in the Erlang term order. The
+ returned list also contains objects with keys in reverse order.
+ For all other table types, the behavior is exactly that of
+ <seealso marker="#select/1"><c>select/1</c></seealso>.</p>
+ <p><em>Example:</em></p>
<code>
1> T = ets:new(x,[ordered_set]).
2> [ ets:insert(T,{N}) || N &lt;- lists:seq(1,10) ].
@@ -1384,217 +1523,288 @@ is_integer(X), is_integer(Y), X + Y < 4711]]></code>
8> R2.
[{2},{1}]
9> '$end_of_table' = ets:select_reverse(C2).
-...
- </code>
+...</code>
</desc>
</func>
+
+ <func>
+ <name name="select_reverse" arity="2"/>
+ <fsummary>Match the objects in an ETS table against a
+ match specification.</fsummary>
+ <desc>
+ <p>Works like <seealso marker="#select/2"><c>select/2</c></seealso>,
+ but returns the list in reverse order for table type <c>ordered_set</c>.
+ For all other table types, the return value is identical to that of
+ <c>select/2</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="select_reverse" arity="3"/>
+ <fsummary>Match the objects in an ETS table against a
+ match specification and return part of the answers.</fsummary>
+ <desc>
+ <p>Works like <seealso marker="#select/3"><c>select/3</c></seealso>,
+ but for table type <c>ordered_set</c>
+ traversing is done starting at the last object in
+ Erlang term order and moves to the first. For all other table
+ types, the return value is identical to that of <c>select/3</c>.</p>
+ <p>Notice that this is <em>not</em> equivalent to
+ reversing the result list of a <c>select/3</c> call, as the result list
+ is not only reversed, but also contains the last
+ <c><anno>Limit</anno></c>
+ matching objects in the table, not the first.</p>
+ </desc>
+ </func>
+
<func>
<name name="setopts" arity="2"/>
<fsummary>Set table options.</fsummary>
<desc>
- <p>Set table options. The only option that currently is allowed to be
- set after the table has been created is
- <seealso marker="#heir">heir</seealso>. The calling process must be
- the table owner.</p>
+ <p>Sets table options. The only allowed option to be set after the
+ table has been created is
+ <seealso marker="#heir"><c>heir</c></seealso>.
+ The calling process must be the table owner.</p>
</desc>
</func>
+
<func>
<name name="slot" arity="2"/>
- <fsummary>Return all objects in a given slot of an ETS table.</fsummary>
+ <fsummary>Return all objects in a specified slot of an ETS table.
+ </fsummary>
<desc>
<p>This function is mostly for debugging purposes, Normally
- one should use <c>first/next</c> or <c>last/prev</c> instead.</p>
- <p>Returns all objects in the <c><anno>I</anno></c>:th slot of the table
- <c><anno>Tab</anno></c>. A table can be traversed by repeatedly calling
- the function, starting with the first slot <c><anno>I</anno>=0</c> and
+ <c>first</c>/<c>next</c> or <c>last</c>/<c>prev</c> are to be used
+ instead.</p>
+ <p>Returns all objects in slot <c><anno>I</anno></c> of table
+ <c><anno>Tab</anno></c>. A table can be traversed by repeatedly
+ calling the function,
+ starting with the first slot <c><anno>I</anno>=0</c> and
ending when <c>'$end_of_table'</c> is returned.
- The function will fail with reason <c>badarg</c> if the
- <c><anno>I</anno></c> argument is out of range.</p>
- <p>Unless a table of type <c>set</c>, <c>bag</c> or
+ If argument <c><anno>I</anno></c> is out of range,
+ the function fails with reason <c>badarg</c>.</p>
+ <p>Unless a table of type <c>set</c>, <c>bag</c>, or
<c>duplicate_bag</c> is protected using
- <c>safe_fixtable/2</c>, see above, a traversal may fail if
- concurrent updates are made to the table. If the table is of
- type <c>ordered_set</c>, the function returns a list
- containing the <c><anno>I</anno></c>:th object in Erlang term order.</p>
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>,
+ a traversal can fail if
+ concurrent updates are made to the table. For table type
+ <c>ordered_set</c>, the function returns a list containing
+ object <c><anno>I</anno></c> in Erlang term order.</p>
</desc>
</func>
+
<func>
<name name="tab2file" arity="2"/>
<fsummary>Dump an ETS table to a file.</fsummary>
<desc>
- <p>Dumps the table <c><anno>Tab</anno></c> to the file <c><anno>Filename</anno></c>.</p>
- <p>Equivalent to <c>tab2file(<anno>Tab</anno>, <anno>Filename</anno>,[])</c></p>
-
+ <p>Dumps table <c><anno>Tab</anno></c> to file
+ <c><anno>Filename</anno></c>.</p>
+ <p>Equivalent to
+ <c>tab2file(<anno>Tab</anno>, <anno>Filename</anno>,[])</c></p>
</desc>
</func>
+
<func>
<name name="tab2file" arity="3"/>
<fsummary>Dump an ETS table to a file.</fsummary>
<desc>
- <p>Dumps the table <c><anno>Tab</anno></c> to the file <c><anno>Filename</anno></c>.</p>
- <p>When dumping the table, certain information about the table
- is dumped to a header at the beginning of the dump. This
- information contains data about the table type,
- name, protection, size, version and if it's a named table. It
- also contains notes about what extended information is added
- to the file, which can be a count of the objects in the file
- or a MD5 sum of the header and records in the file.</p>
- <p>The size field in the header might not correspond to the
- actual number of records in the file if the table is public
- and records are added or removed from the table during
- dumping. Public tables updated during dump, and that one wants
- to verify when reading, needs at least one field of extended
- information for the read verification process to be reliable
- later.</p>
- <p>The <c>extended_info</c> option specifies what extra
- information is written to the table dump:</p>
- <taglist>
- <tag><c>object_count</c></tag>
- <item><p>The number of objects actually written to the file is
- noted in the file footer, why verification of file truncation
- is possible even if the file was updated during
- dump.</p></item>
- <tag><c>md5sum</c></tag>
- <item><p>The header and objects in the file are checksummed using
- the built in MD5 functions. The MD5 sum of all objects is
- written in the file footer, so that verification while reading
- will detect the slightest bitflip in the file data. Using this
- costs a fair amount of CPU time.</p></item>
- </taglist>
- <p>Whenever the <c>extended_info</c> option is used, it
- results in a file not readable by versions of ets prior to
- that in stdlib-1.15.1</p>
- <p>The <c>sync</c> option, if set to <c>true</c>, ensures that
- the content of the file is actually written to the disk before
- <c>tab2file</c> returns. Default is <c>{sync, false}</c>.</p>
+ <p>Dumps table <c><anno>Tab</anno></c> to file
+ <c><anno>Filename</anno></c>.</p>
+ <p>When dumping the table, some information about the table
+ is dumped to a header at the beginning of the dump. This
+ information contains data about the table type,
+ name, protection, size, version, and if it is a named table. It
+ also contains notes about what extended information is added
+ to the file, which can be a count of the objects in the file
+ or a MD5 sum of the header and records in the file.</p>
+ <p>The size field in the header might not correspond to the
+ number of records in the file if the table is public
+ and records are added or removed from the table during
+ dumping. Public tables updated during dump, and that one wants
+ to verify when reading, needs at least one field of extended
+ information for the read verification process to be reliable
+ later.</p>
+ <p>Option <c>extended_info</c> specifies what extra
+ information is written to the table dump:</p>
+ <taglist>
+ <tag><c>object_count</c></tag>
+ <item>
+ <p>The number of objects written to the file is
+ noted in the file footer, so file truncation can be
+ verified even if the file was updated during dump.</p>
+ </item>
+ <tag><c>md5sum</c></tag>
+ <item>
+ <p>The header and objects in the file are checksummed using
+ the built-in MD5 functions. The MD5 sum of all objects is
+ written in the file footer, so that verification while reading
+ detects the slightest bitflip in the file data. Using this
+ costs a fair amount of CPU time.</p>
+ </item>
+ </taglist>
+ <p>Whenever option <c>extended_info</c> is used, it
+ results in a file not readable by versions of ETS before
+ that in <c>STDLIB</c> 1.15.1</p>
+ <p>If option <c>sync</c> is set to <c>true</c>, it ensures that
+ the content of the file is written to the disk before
+ <c>tab2file</c> returns. Defaults to <c>{sync, false}</c>.</p>
</desc>
</func>
+
<func>
<name name="tab2list" arity="1"/>
<fsummary>Return a list of all objects in an ETS table.</fsummary>
<desc>
- <p>Returns a list of all objects in the table <c><anno>Tab</anno></c>.</p>
+ <p>Returns a list of all objects in table <c><anno>Tab</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="tabfile_info" arity="1"/>
<fsummary>Return a list of all objects in an ETS table.</fsummary>
<desc>
- <p>Returns information about the table dumped to file by
- <seealso marker="#tab2file/2">tab2file/2</seealso> or
- <seealso marker="#tab2file/3">tab2file/3</seealso></p>
- <p>The following items are returned:</p>
- <taglist>
- <tag>name</tag>
- <item><p>The name of the dumped table. If the table was a
- named table, a table with the same name cannot exist when the
- table is loaded from file with
- <seealso marker="#file2tab/2">file2tab/2</seealso>. If the table is
- not saved as a named table, this field has no significance
- at all when loading the table from file.</p></item>
- <tag>type</tag>
- <item>The ets type of the dumped table (i.e. <c>set</c>, <c>bag</c>,
- <c>duplicate_bag</c> or <c>ordered_set</c>). This type will be used
- when loading the table again.</item>
- <tag>protection</tag>
- <item>The protection of the dumped table (i.e. <c>private</c>,
- <c>protected</c> or <c>public</c>). A table loaded from the file
- will get the same protection.</item>
- <tag>named_table</tag>
- <item><c>true</c> if the table was a named table when dumped
- to file, otherwise <c>false</c>. Note that when a named table
- is loaded from a file, there cannot exist a table in the
- system with the same name.</item>
- <tag>keypos</tag>
- <item>The <c>keypos</c> of the table dumped to file, which
- will be used when loading the table again.</item>
- <tag>size</tag>
- <item>The number of objects in the table when the table dump
- to file started, which in case of a <c>public</c> table need
- not correspond to the number of objects actually saved to the
- file, as objects might have been added or deleted by another
- process during table dump.</item>
- <tag>extended_info</tag>
- <item>The extended information written in the file footer to
- allow stronger verification during table loading from file, as
- specified to <seealso
- marker="#tab2file/3">tab2file/3</seealso>. Note that this
- function only tells <em>which</em> information is present, not
- the values in the file footer. The value is a list containing
- one or more of the atoms <c>object_count</c> and
- <c>md5sum</c>.</item>
- <tag>version</tag>
- <item>A tuple <c>{<anno>Major</anno>,<anno>Minor</anno>}</c> containing the major and
- minor version of the file format for ets table dumps. This
- version field was added beginning with stdlib-1.5.1, files
- dumped with older versions will return <c>{0,0}</c> in this
- field.</item>
- </taglist>
- <p>An error is returned if the file is inaccessible,
- badly damaged or not an file produced with <seealso
- marker="#tab2file/2">tab2file/2</seealso> or <seealso
- marker="#tab2file/3">tab2file/3</seealso>.</p>
+ <p>Returns information about the table dumped to file by
+ <seealso marker="#tab2file/2"><c>tab2file/2</c></seealso> or
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso>.</p>
+ <p>The following items are returned:</p>
+ <taglist>
+ <tag><c>name</c></tag>
+ <item>
+ <p>The name of the dumped table. If the table was a
+ named table, a table with the same name cannot exist when the
+ table is loaded from file with
+ <seealso marker="#file2tab/2"><c>file2tab/2</c></seealso>.
+ If the table is
+ not saved as a named table, this field has no significance
+ when loading the table from file.</p>
+ </item>
+ <tag><c>type</c></tag>
+ <item>
+ <p>The ETS type of the dumped table (that is, <c>set</c>,
+ <c>bag</c>, <c>duplicate_bag</c>, or <c>ordered_set</c>). This
+ type is used when loading the table again.</p>
+ </item>
+ <tag><c>protection</c></tag>
+ <item>
+ <p>The protection of the dumped table (that is, <c>private</c>,
+ <c>protected</c>, or <c>public</c>). A table loaded from the
+ file gets the same protection.</p>
+ </item>
+ <tag><c>named_table</c></tag>
+ <item>
+ <p><c>true</c> if the table was a named table when dumped
+ to file, otherwise <c>false</c>. Notice that when a named table
+ is loaded from a file, there cannot exist a table in the
+ system with the same name.</p>
+ </item>
+ <tag><c>keypos</c></tag>
+ <item>
+ <p>The <c>keypos</c> of the table dumped to file, which
+ is used when loading the table again.</p>
+ </item>
+ <tag><c>size</c></tag>
+ <item>
+ <p>The number of objects in the table when the table dump
+ to file started. For a <c>public</c> table, this number
+ does not need to correspond to the number of objects saved to
+ the file, as objects can have been added or deleted by another
+ process during table dump.</p>
+ </item>
+ <tag><c>extended_info</c></tag>
+ <item>
+ <p>The extended information written in the file footer to
+ allow stronger verification during table loading from file, as
+ specified to <seealso marker="#tab2file/3">
+ <c>tab2file/3</c></seealso>. Notice that this
+ function only tells <em>which</em> information is present, not
+ the values in the file footer. The value is a list containing one
+ or more of the atoms <c>object_count</c> and <c>md5sum</c>.</p>
+ </item>
+ <tag><c>version</c></tag>
+ <item>
+ <p>A tuple <c>{<anno>Major</anno>,<anno>Minor</anno>}</c>
+ containing the major and
+ minor version of the file format for ETS table dumps. This
+ version field was added beginning with <c>STDLIB</c> 1.5.1.
+ Files dumped with older versions return <c>{0,0}</c> in this
+ field.</p>
+ </item>
+ </taglist>
+ <p>An error is returned if the file is inaccessible,
+ badly damaged, or not produced with
+ <seealso marker="#tab2file/2"><c>tab2file/2</c></seealso> or
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="table" arity="1"/>
<name name="table" arity="2"/>
<fsummary>Return a QLC query handle.</fsummary>
<desc>
- <p><marker id="qlc_table"></marker>Returns a QLC (Query List
- Comprehension) query handle. The module <c>qlc</c> implements
- a query language aimed mainly at Mnesia but ETS tables, Dets
- tables, and lists are also recognized by QLC as sources of
- data. Calling <c>ets:table/1,2</c> is the means to make the
+ <p>Returns a Query List
+ Comprehension (QLC) query handle. The
+ <seealso marker="qlc"><c>qlc</c></seealso> module provides
+ a query language aimed mainly at Mnesia, but ETS
+ tables, Dets tables,
+ and lists are also recognized by QLC as sources of
+ data. Calling <c>table/1,2</c> is the means to make the
ETS table <c>Tab</c> usable to QLC.</p>
- <p>When there are only simple restrictions on the key position
- QLC uses <c>ets:lookup/2</c> to look up the keys, but when
- that is not possible the whole table is traversed. The
- option <c>traverse</c> determines how this is done:</p>
- <list type="bulleted">
+ <p>When there are only simple restrictions on the key position,
+ QLC uses <seealso marker="#lookup/2"><c>lookup/2</c></seealso>
+ to look up the keys. When
+ that is not possible, the whole table is traversed.
+ Option <c>traverse</c> determines how this is done:</p>
+ <taglist>
+ <tag><c>first_next</c></tag>
<item>
- <p><c>first_next</c>. The table is traversed one key at
- a time by calling <c>ets:first/1</c> and
- <c>ets:next/2</c>.</p>
+ <p>The table is traversed one key at a time by calling
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
</item>
+ <tag><c>last_prev</c></tag>
<item>
- <p><c>last_prev</c>. The table is traversed one key at
- a time by calling <c>ets:last/1</c> and
- <c>ets:prev/2</c>.</p>
+ <p>The table is traversed one key at a time by calling
+ <seealso marker="#last/1"><c>last/1</c></seealso> and
+ <seealso marker="#prev/2"><c>prev/2</c></seealso>.</p>
</item>
+ <tag><c>select</c></tag>
<item>
- <p><c>select</c>. The table is traversed by calling
- <c>ets:select/3</c> and <c>ets:select/1</c>. The option
- <c>n_objects</c> determines the number of objects
+ <p>The table is traversed by calling
+ <seealso marker="#select/3"><c>select/3</c></seealso> and
+ <seealso marker="#select/1"><c>select/1</c></seealso>.
+ Option <c>n_objects</c> determines the number of objects
returned (the third argument of <c>select/3</c>); the
default is to return <c>100</c> objects at a time. The
- <seealso marker="#match_spec">match_spec</seealso> (the
- second argument of <c>select/3</c>) is assembled by QLC:
- simple filters are translated into equivalent match_specs
- while more complicated filters have to be applied to all
- objects returned by <c>select/3</c> given a match_spec
+ <seealso marker="#match_spec">match specification</seealso> (the
+ second argument of <c>select/3</c>) is assembled by QLC: simple
+ filters are translated into equivalent match specifications
+ while more complicated filters must be applied to all
+ objects returned by <c>select/3</c> given a match specification
that matches all objects.</p>
</item>
+ <tag><c>{select, <anno>MatchSpec</anno>}</c></tag>
<item>
- <p><c>{select, <anno>MatchSpec</anno>}</c>. As for <c>select</c>
- the table is traversed by calling <c>ets:select/3</c> and
- <c>ets:select/1</c>. The difference is that the
- match_spec is explicitly given. This is how to state
- match_specs that cannot easily be expressed within the
- syntax provided by QLC.</p>
+ <p>As for <c>select</c>, the table is traversed by calling
+ <seealso marker="#select/3"><c>select/3</c></seealso> and
+ <seealso marker="#select/1"><c>select/1</c></seealso>.
+ The difference is that the match specification is explicitly
+ specified. This is how to state match specifications that cannot
+ easily be expressed within the syntax provided by QLC.</p>
</item>
- </list>
- <p>The following example uses an explicit match_spec to
- traverse the table:</p>
+ </taglist>
+ <p><em>Examples:</em></p>
+ <p>An explicit match specification is here used to traverse the
+ table:</p>
<pre>
9> <input>true = ets:insert(Tab = ets:new(t, []), [{1,a},{2,b},{3,c},{4,d}]),</input>
<input>MS = ets:fun2ms(fun({X,Y}) when (X > 1) or (X &lt; 5) -> {Y} end),</input>
<input>QH1 = ets:table(Tab, [{traverse, {select, MS}}]).</input></pre>
- <p>An example with implicit match_spec:</p>
+ <p>An example with an implicit match specification:</p>
<pre>
10> <input>QH2 = qlc:q([{Y} || {X,Y} &lt;- ets:table(Tab), (X > 1) or (X &lt; 5)]).</input></pre>
- <p>The latter example is in fact equivalent to the former which
- can be verified using the function <c>qlc:info/1</c>:</p>
+ <p>The latter example is equivalent to the former, which
+ can be verified using function <c>qlc:info/1</c>:</p>
<pre>
11> <input>qlc:info(QH1) =:= qlc:info(QH2).</input>
true</pre>
@@ -1603,50 +1813,60 @@ true</pre>
two query handles.</p>
</desc>
</func>
+
<func>
- <name name="test_ms" arity="2"/>
- <fsummary>Test a match_spec for use in ets:select/2.</fsummary>
+ <name name="take" arity="2"/>
+ <fsummary>Return and remove all objects with a specified key from an
+ ETS table.</fsummary>
<desc>
- <p>This function is a utility to test a
- <seealso marker="#match_spec">match_spec</seealso> used in
- calls to <c>ets:select/2</c>. The function both tests
- <c><anno>MatchSpec</anno></c> for "syntactic" correctness and runs the
- match_spec against the object <c><anno>Tuple</anno></c>. If the match_spec
- contains errors, the tuple <c>{error, <anno>Errors</anno>}</c> is returned
- where <c><anno>Errors</anno></c> is a list of natural language
- descriptions of what was wrong with the match_spec. If the
- match_spec is syntactically OK, the function returns
- <c>{ok,<anno>Result</anno>}</c> where <c><anno>Result</anno></c> is what would have been
- the result in a real <c>ets:select/2</c> call or <c>false</c>
- if the match_spec does not match the object <c><anno>Tuple</anno></c>.</p>
- <p>This is a useful debugging and test tool, especially when
- writing complicated <c>ets:select/2</c> calls.</p>
+ <p>Returns and removes a list of all objects with key
+ <c><anno>Key</anno></c> in table <c><anno>Tab</anno></c>.</p>
+ <p>The specified <c><anno>Key</anno></c> is used to identify the object
+ by either <em>comparing equal</em> the key of an object in an
+ <c>ordered_set</c> table, or <em>matching</em> in other types of
+ tables (for details on the difference, see
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso> and
+ <seealso marker="#new/2"><c>new/2</c></seealso>).</p>
</desc>
</func>
<func>
- <name name="take" arity="2"/>
- <fsummary>Return and remove all objects with a given key from an ETS
- table.</fsummary>
+ <name name="test_ms" arity="2"/>
+ <fsummary>Test a match specification for use in <c>select/2</c>.
+ </fsummary>
<desc>
- <p>Returns a list of all objects with the key <c><anno>Key</anno></c> in
- the table <c><anno>Tab</anno></c> and removes.</p>
- <p>The given <c><anno>Key</anno></c> is used to identify the object by
- either <em>comparing equal</em> the key of an object in an
- <c>ordered_set</c> table, or <em>matching</em> in other types of
- tables (see <seealso marker="#lookup/2">lookup/2</seealso> and
- <seealso marker="#new/2">new/2</seealso> for details on the
- difference).</p>
+ <p>This function is a utility to test a
+ <seealso marker="#match_spec">match specification</seealso> used in
+ calls to <seealso marker="#select/2"><c>select/2</c></seealso>.
+ The function both tests <c><anno>MatchSpec</anno></c> for "syntactic"
+ correctness and runs the match specification against object
+ <c><anno>Tuple</anno></c>.</p>
+ <p>If the match specification is syntactically correct, the function
+ either returns <c>{ok,<anno>Result</anno>}</c>, where
+ <c><anno>Result</anno></c> is what would have been the result in a
+ real <c>select/2</c> call, or <c>false</c> if the match specification
+ does not match object <c><anno>Tuple</anno></c>.</p>
+ <p>If the match specification contains errors, tuple
+ <c>{error, <anno>Errors</anno>}</c> is returned,
+ where <c><anno>Errors</anno></c> is a list of natural language
+ descriptions of what was wrong with the match specification.</p>
+ <p>This is a useful debugging and test tool, especially when
+ writing complicated <c>select/2</c> calls.</p>
+ <p>See also: <seealso marker="erts:erlang#match_spec_test/3">
+ erlang:match_spec_test/3</seealso>.</p>
</desc>
</func>
+
<func>
<name name="to_dets" arity="2"/>
- <fsummary>Fill a Dets table with objects from an ETS table.</fsummary>
+ <fsummary>Fill a Dets table with objects from an ETS table.
+ </fsummary>
<desc>
<p>Fills an already created/opened Dets table with the objects
- in the already opened ETS table named <c><anno>Tab</anno></c>. The Dets
- table is emptied before the objects are inserted.</p>
+ in the already opened ETS table named <c><anno>Tab</anno></c>.
+ The Dets table is emptied before the objects are inserted.</p>
</desc>
</func>
+
<func>
<name name="update_counter" arity="3" clause_i="1"/>
<name name="update_counter" arity="4" clause_i="1"/>
@@ -1664,107 +1884,112 @@ true</pre>
<type variable="Default"/>
<desc>
<p>This function provides an efficient way to update one or more
- counters, without the hassle of having to look up an object, update
- the object by incrementing an element and insert the resulting object
- into the table again. (The update is done atomically; i.e. no process
- can access the ets table in the middle of the operation.)
- </p>
- <p>It will destructively update the object with key <c><anno>Key</anno></c>
- in the table <c><anno>Tab</anno></c> by adding <c><anno>Incr</anno></c> to the element
- at the <c><anno>Pos</anno></c>:th position. The new counter value is
+ counters, without the trouble of having to look up an object, update
+ the object by incrementing an element, and insert the resulting
+ object into the table again. (The update is done atomically,
+ that is, no process
+ can access the ETS table in the middle of the operation.)</p>
+ <p>This function destructively update the object with key
+ <c><anno>Key</anno></c> in table <c><anno>Tab</anno></c> by adding
+ <c><anno>Incr</anno></c> to the element at position
+ <c><anno>Pos</anno></c>. The new counter value is
returned. If no position is specified, the element directly
- following the key (<c><![CDATA[<keypos>+1]]></c>) is updated.</p>
- <p>If a <c><anno>Threshold</anno></c> is specified, the counter will be
- reset to the value <c><anno>SetValue</anno></c> if the following
+ following key (<c><![CDATA[<keypos>+1]]></c>) is updated.</p>
+ <p>If a <c><anno>Threshold</anno></c> is specified, the counter is
+ reset to value <c><anno>SetValue</anno></c> if the following
conditions occur:</p>
<list type="bulleted">
- <item>The <c><anno>Incr</anno></c> is not negative (<c>>= 0</c>) and the
- result would be greater than (<c>></c>) <c><anno>Threshold</anno></c></item>
- <item>The <c><anno>Incr</anno></c> is negative (<c><![CDATA[< 0]]></c>) and the
- result would be less than (<c><![CDATA[<]]></c>)
- <c><anno>Threshold</anno></c></item>
+ <item><p><c><anno>Incr</anno></c> is not negative (<c>>= 0</c>) and
+ the result would be greater than (<c>></c>)
+ <c><anno>Threshold</anno></c>.</p>
+ </item>
+ <item><p><c><anno>Incr</anno></c> is negative
+ (<c><![CDATA[< 0]]></c>) and the result would be less than
+ (<c><![CDATA[<]]></c>) <c><anno>Threshold</anno></c>.</p>
+ </item>
</list>
- <p>A list of <c><anno>UpdateOp</anno></c> can be supplied to do several update
- operations within the object. The operations are carried out in the
- order specified in the list. If the same counter position occurs
- more than one time in the list, the corresponding counter will thus
- be updated several times, each time based on the previous result.
- The return value is a list of the new counter values from each
- update operation in the same order as in the operation list. If an
- empty list is specified, nothing is updated and an empty list is
- returned. If the function should fail, no updates will be done at
- all.
- </p>
- <p>The given <c><anno>Key</anno></c> is used to identify the object by either
- <em>matching</em> the key of an object in a <c>set</c> table,
- or <em>compare equal</em> to the key of an object in an
- <c>ordered_set</c> table (see
- <seealso marker="#lookup/2">lookup/2</seealso> and
- <seealso marker="#new/2">new/2</seealso>
- for details on the difference).</p>
- <p>If a default object <c><anno>Default</anno></c> is given, it is used
+ <p>A list of <c><anno>UpdateOp</anno></c> can be supplied to do many
+ update operations within the object.
+ The operations are carried out in the
+ order specified in the list. If the same counter position occurs
+ more than once in the list, the corresponding counter is thus
+ updated many times, each time based on the previous result.
+ The return value is a list of the new counter values from each
+ update operation in the same order as in the operation list. If an
+ empty list is specified, nothing is updated and an empty list is
+ returned. If the function fails, no updates is done.</p>
+ <p>The specified <c><anno>Key</anno></c> is used to identify the object
+ by either <em>matching</em> the key of an object in a <c>set</c>
+ table, or <em>compare equal</em> to the key of an object in an
+ <c>ordered_set</c> table (for details on the difference, see
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso> and
+ <seealso marker="#new/2"><c>new/2</c></seealso>).</p>
+ <p>If a default object <c><anno>Default</anno></c> is specified,
+ it is used
as the object to be updated if the key is missing from the table. The
value in place of the key is ignored and replaced by the proper key
value. The return value is as if the default object had not been used,
- that is a single updated element or a list of them.</p>
- <p>The function will fail with reason <c>badarg</c> if:</p>
+ that is, a single updated element or a list of them.</p>
+ <p>The function fails with reason <c>badarg</c> in the following
+ situations:</p>
<list type="bulleted">
- <item>the table is not of type <c>set</c> or
- <c>ordered_set</c>,</item>
- <item>no object with the right key exists and no default object were
- supplied,</item>
- <item>the object has the wrong arity,</item>
- <item>the default object arity is smaller than
- <c><![CDATA[<keypos>]]></c></item>
- <item>any field from the default object being updated is not an
- integer</item>
- <item>the element to update is not an integer,</item>
- <item>the element to update is also the key, or,</item>
- <item>any of <c><anno>Pos</anno></c>, <c><anno>Incr</anno></c>, <c><anno>Threshold</anno></c> or
- <c><anno>SetValue</anno></c> is not an integer</item>
+ <item>The table type is not <c>set</c> or
+ <c>ordered_set</c>.</item>
+ <item>No object with the correct key exists and no default object was
+ supplied.</item>
+ <item>The object has the wrong arity.</item>
+ <item>The default object arity is smaller than
+ <c><![CDATA[<keypos>]]></c>.</item>
+ <item>Any field from the default object that is updated is not an
+ integer.</item>
+ <item>The element to update is not an integer.</item>
+ <item>The element to update is also the key.</item>
+ <item>Any of <c><anno>Pos</anno></c>, <c><anno>Incr</anno></c>,
+ <c><anno>Threshold</anno></c>, or <c><anno>SetValue</anno></c>
+ is not an integer.</item>
</list>
</desc>
</func>
+
<func>
<name name="update_element" arity="3" clause_i="1"/>
<name name="update_element" arity="3" clause_i="2"/>
- <fsummary>Updates the <c>Pos</c>:th element of the object with a given key in an ETS table.</fsummary>
+ <fsummary>Update the <c>Pos</c>:th element of the object with a
+ specified key in an ETS table.</fsummary>
<type variable="Tab"/>
<type variable="Key"/>
<type variable="Value"/>
<type variable="Pos"/>
<desc>
<p>This function provides an efficient way to update one or more
- elements within an object, without the hassle of having to look up,
- update and write back the entire object.
- </p>
- <p>It will destructively update the object with key <c><anno>Key</anno></c>
- in the table <c><anno>Tab</anno></c>. The element at the <c><anno>Pos</anno></c>:th position
- will be given the value <c><anno>Value</anno></c>. </p>
- <p>A list of <c>{<anno>Pos</anno>,<anno>Value</anno>}</c> can be supplied to update several
- elements within the same object. If the same position occurs more
- than one in the list, the last value in the list will be written. If
- the list is empty or the function fails, no updates will be done at
- all. The function is also atomic in the sense that other processes
- can never see any intermediate results.
- </p>
- <p>The function returns <c>true</c> if an object with the key
- <c><anno>Key</anno></c> was found, <c>false</c> otherwise.
- </p>
- <p>The given <c><anno>Key</anno></c> is used to identify the object by either
- <em>matching</em> the key of an object in a <c>set</c> table,
- or <em>compare equal</em> to the key of an object in an
- <c>ordered_set</c> table (see
- <seealso marker="#lookup/2">lookup/2</seealso> and
- <seealso marker="#new/2">new/2</seealso>
- for details on the difference).</p>
- <p>The function will fail with reason <c>badarg</c> if:</p>
+ elements within an object, without the trouble of having to look up,
+ update, and write back the entire object.</p>
+ <p>This function destructively updates the object with key
+ <c><anno>Key</anno></c> in table <c><anno>Tab</anno></c>.
+ The element at position <c><anno>Pos</anno></c> is given
+ the value <c><anno>Value</anno></c>.</p>
+ <p>A list of <c>{<anno>Pos</anno>,<anno>Value</anno>}</c> can be
+ supplied to update many
+ elements within the same object. If the same position occurs more
+ than once in the list, the last value in the list is written. If
+ the list is empty or the function fails, no updates are done.
+ The function is also atomic in the sense that other processes
+ can never see any intermediate results.</p>
+ <p>Returns <c>true</c> if an object with key <c><anno>Key</anno></c>
+ is found, otherwise <c>false</c>.</p>
+ <p>The specified <c><anno>Key</anno></c> is used to identify the object
+ by either <em>matching</em> the key of an object in a <c>set</c>
+ table, or <em>compare equal</em> to the key of an object in an
+ <c>ordered_set</c> table (for details on the difference, see
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso> and
+ <seealso marker="#new/2"><c>new/2</c></seealso>).</p>
+ <p>The function fails with reason <c>badarg</c> in the following
+ situations:</p>
<list type="bulleted">
- <item>the table is not of type <c>set</c> or
- <c>ordered_set</c>,</item>
- <item><c><anno>Pos</anno></c> is less than 1 or greater than the object
- arity, or,</item>
- <item>the element to update is also the key</item>
+ <item>The table type is not <c>set</c> or <c>ordered_set</c>.</item>
+ <item><c><anno>Pos</anno></c> &lt; 1.</item>
+ <item><c><anno>Pos</anno></c> &gt; object arity.</item>
+ <item>The element to update is also the key.</item>
</list>
</desc>
</func>
diff --git a/lib/stdlib/doc/src/file_sorter.xml b/lib/stdlib/doc/src/file_sorter.xml
index f033eebec7..e988d58c2f 100644
--- a/lib/stdlib/doc/src/file_sorter.xml
+++ b/lib/stdlib/doc/src/file_sorter.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,125 +24,150 @@
<title>file_sorter</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2001-03-13</date>
<rev>PA1</rev>
- <file>file_sorter.sgml</file>
+ <file>file_sorter.xml</file>
</header>
<module>file_sorter</module>
- <modulesummary>File Sorter</modulesummary>
+ <modulesummary>File sorter.</modulesummary>
<description>
- <p>The functions of this module sort terms on files, merge already
- sorted files, and check files for sortedness. Chunks containing
- binary terms are read from a sequence of files, sorted
+ <p>This module contains functions for sorting terms on files, merging
+ already sorted files, and checking files for sortedness. Chunks
+ containing binary terms are read from a sequence of files, sorted
internally in memory and written on temporary files, which are
merged producing one sorted file as output. Merging is provided
as an optimization; it is faster when the files are already
- sorted, but it always works to sort instead of merge.
- </p>
+ sorted, but it always works to sort instead of merge.</p>
+
<p>On a file, a term is represented by a header and a binary. Two
- options define the format of terms on files:
- </p>
- <list type="bulleted">
- <item><c>{header, HeaderLength}</c>. HeaderLength determines the
- number of bytes preceding each binary and containing the
- length of the binary in bytes. Default is 4. The order of the
- header bytes is defined as follows: if <c>B</c> is a binary
- containing a header only, the size <c>Size</c> of the binary
- is calculated as
- <c><![CDATA[<<Size:HeaderLength/unit:8>> = B]]></c>.
+ options define the format of terms on files:</p>
+
+ <taglist>
+ <tag><c>{header, HeaderLength}</c></tag>
+ <item>
+ <p><c>HeaderLength</c> determines the
+ number of bytes preceding each binary and containing the
+ length of the binary in bytes. Defaults to 4. The order of the
+ header bytes is defined as follows: if <c>B</c> is a binary
+ containing a header only, size <c>Size</c> of the binary
+ is calculated as
+ <c><![CDATA[<<Size:HeaderLength/unit:8>> = B]]></c>.</p>
</item>
- <item><c>{format, Format}</c>. The format determines the
- function that is applied to binaries in order to create the
- terms that will be sorted. The default value is
- <c>binary_term</c>, which is equivalent to
- <c>fun&nbsp;binary_to_term/1</c>. The value <c>binary</c> is
- equivalent to <c>fun(X) -> X end</c>, which means that the
- binaries will be sorted as they are. This is the fastest
- format. If <c>Format</c> is <c>term</c>, <c>io:read/2</c> is
- called to read terms. In that case only the default value of
- the <c>header</c> option is allowed. The <c>format</c> option
- also determines what is written to the sorted output file: if
- <c>Format</c> is <c>term</c> then <c>io:format/3</c> is called
- to write each term, otherwise the binary prefixed by a header
- is written. Note that the binary written is the same binary
- that was read; the results of applying the <c>Format</c>
- function are thrown away as soon as the terms have been
- sorted. Reading and writing terms using the <c>io</c> module
- is very much slower than reading and writing binaries.
+ <tag><c>{format, Format}</c></tag>
+ <item>
+ <p>Option <c>Format</c> determines the
+ function that is applied to binaries to create the
+ terms to be sorted. Defaults to
+ <c>binary_term</c>, which is equivalent to
+ <c>fun&nbsp;binary_to_term/1</c>. Value <c>binary</c> is
+ equivalent to <c>fun(X) -> X end</c>, which means that the
+ binaries are sorted as they are. This is the fastest
+ format. If <c>Format</c> is <c>term</c>, <c>io:read/2</c> is
+ called to read terms. In that case, only the default value of
+ option <c>header</c> is allowed.</p>
+ <p>Option <c>format</c> also determines what is written to the
+ sorted output file: if
+ <c>Format</c> is <c>term</c>, then <c>io:format/3</c> is called
+ to write each term, otherwise the binary prefixed by a header
+ is written. Notice that the binary written is the same binary
+ that was read; the results of applying function <c>Format</c>
+ are thrown away when the terms have been sorted.
+ Reading and writing terms using the <c>io</c> module
+ is much slower than reading and writing binaries.</p>
</item>
- </list>
- <p>Other options are:
- </p>
- <list type="bulleted">
- <item><c>{order, Order}</c>. The default is to sort terms in
- ascending order, but that can be changed by the value
- <c>descending</c> or by giving an ordering function <c>Fun</c>.
- An ordering function is antisymmetric, transitive and total.
- <c>Fun(A,&nbsp;B)</c> should return <c>true</c> if <c>A</c>
- comes before <c>B</c> in the ordering, <c>false</c> otherwise.
- An example of a typical ordering function is less than or equal
- to, <c>=&lt;/2</c>.
- Using an ordering function will slow down the sort
- considerably. The <c>keysort</c>, <c>keymerge</c> and
- <c>keycheck</c> functions do not accept ordering functions.
+ </taglist>
+
+ <p>Other options are:</p>
+
+ <taglist>
+ <tag><c>{order, Order}</c></tag>
+ <item>
+ <p>The default is to sort terms in
+ ascending order, but that can be changed by value
+ <c>descending</c> or by specifying an ordering function <c>Fun</c>.
+ An ordering function is antisymmetric, transitive, and total.
+ <c>Fun(A,&nbsp;B)</c> is to return <c>true</c> if <c>A</c>
+ comes before <c>B</c> in the ordering, otherwise <c>false</c>.
+ An example of a typical ordering function is less than or equal
+ to, <c>=&lt;/2</c>. Using an ordering function slows down the sort
+ considerably. Functions <c>keysort</c>, <c>keymerge</c> and
+ <c>keycheck</c> do not accept ordering functions.</p>
</item>
- <item><c>{unique, boolean()}</c>. When sorting or merging files,
- only the first of a sequence of terms that compare equal (<c>==</c>)
- is output if this option is set to <c>true</c>. The default
- value is <c>false</c> which implies that all terms that
- compare equal are output. When checking files for
- sortedness, a check that no pair of consecutive terms
- compares equal is done if this option is set to <c>true</c>.
+ <tag><c>{unique, boolean()}</c></tag>
+ <item>
+ <p>When sorting or merging files,
+ only the first of a sequence of terms that compare equal (<c>==</c>)
+ is output if this option is set to <c>true</c>. Defaults
+ to <c>false</c>, which implies that all terms that
+ compare equal are output. When checking files for
+ sortedness, a check that no pair of consecutive terms
+ compares equal is done if this option is set to <c>true</c>.</p>
</item>
- <item><c>{tmpdir, TempDirectory}</c>. The directory where
- temporary files are put can be chosen explicitly. The
- default, implied by the value <c>""</c>, is to put temporary
- files on the same directory as the sorted output file. If
- output is a function (see below), the directory returned by
- <c>file:get_cwd()</c> is used instead. The names of
- temporary files are derived from the Erlang nodename
- (<c>node()</c>), the process identifier of the current Erlang
- emulator (<c>os:getpid()</c>), and a unique integer
- (<c>erlang:unique_integer([positive])</c>); a typical name would be
- <c>fs_mynode@myhost_1763_4711.17</c>, where
- <c>17</c> is a sequence number. Existing files will be
- overwritten. Temporary files are deleted unless some
- uncaught EXIT signal occurs.
+ <tag><c>{tmpdir, TempDirectory}</c></tag>
+ <item>
+ <p>The directory where
+ temporary files are put can be chosen explicitly. The
+ default, implied by value <c>""</c>, is to put temporary
+ files on the same directory as the sorted output file. If
+ output is a function (see below), the directory returned by
+ <c>file:get_cwd()</c> is used instead. The names of
+ temporary files are derived from the Erlang nodename
+ (<c>node()</c>), the process identifier of the current Erlang
+ emulator (<c>os:getpid()</c>), and a unique integer
+ (<c>erlang:unique_integer([positive])</c>). A typical name is
+ <c>fs_mynode@myhost_1763_4711.17</c>, where
+ <c>17</c> is a sequence number. Existing files are
+ overwritten. Temporary files are deleted unless some
+ uncaught <c>EXIT</c> signal occurs.</p>
</item>
- <item><c>{compressed, boolean()}</c>. Temporary files and the
- output file may be compressed. The default value
- <c>false</c> implies that written files are not
- compressed. Regardless of the value of the <c>compressed</c>
- option, compressed files can always be read. Note that
- reading and writing compressed files is significantly slower
- than reading and writing uncompressed files.
+ <tag><c>{compressed, boolean()}</c></tag>
+ <item>
+ <p>Temporary files and the output file can be compressed. Defaults
+ <c>false</c>, which implies that written files are not
+ compressed. Regardless of the value of option <c>compressed</c>,
+ compressed files can always be read. Notice that
+ reading and writing compressed files are significantly slower
+ than reading and writing uncompressed files.</p>
</item>
- <item><c>{size, Size}</c>. By default approximately 512*1024
- bytes read from files are sorted internally. This option
- should rarely be needed.
+ <tag><c>{size, Size}</c></tag>
+ <item>
+ <p>By default about 512*1024 bytes read from files are sorted
+ internally. This option is rarely needed.</p>
</item>
- <item><c>{no_files, NoFiles}</c>. By default 16 files are
- merged at a time. This option should rarely be needed.
+ <tag><c>{no_files, NoFiles}</c></tag>
+ <item>
+ <p>By default 16 files are merged at a time. This option is rarely
+ needed.</p>
</item>
- </list>
+ </taglist>
+
<p>As an alternative to sorting files, a function of one argument
- can be given as input. When called with the argument <c>read</c>
- the function is assumed to return <c>end_of_input</c> or
- <c>{end_of_input, Value}}</c> when there is no more input
- (<c>Value</c> is explained below), or <c>{Objects, Fun}</c>,
- where <c>Objects</c> is a list of binaries or terms depending on
- the format and <c>Fun</c> is a new input function. Any other
- value is immediately returned as value of the current call to
- <c>sort</c> or <c>keysort</c>. Each input function will be
- called exactly once, and should an error occur, the last
- function is called with the argument <c>close</c>, the reply of
- which is ignored.
- </p>
- <p>A function of one argument can be given as output. The results
+ can be specified as input. When called with argument <c>read</c>,
+ the function is assumed to return either of the following:</p>
+
+ <list type="bulleted">
+ <item>
+ <p><c>end_of_input</c> or <c>{end_of_input, Value}}</c> when there
+ is no more input (<c>Value</c> is explained below).</p>
+ </item>
+ <item>
+ <p><c>{Objects, Fun}</c>, where <c>Objects</c> is a list of binaries
+ or terms depending on the format, and <c>Fun</c> is a new input
+ function.</p>
+ </item>
+ </list>
+
+ <p>Any other value is immediately returned as value of the current call
+ to <c>sort</c> or <c>keysort</c>. Each input function is
+ called exactly once. If an error occurs, the last
+ function is called with argument <c>close</c>, the reply of
+ which is ignored.</p>
+
+ <p>A function of one argument can be specified as output. The results
of sorting or merging the input is collected in a non-empty
sequence of variable length lists of binaries or terms depending
on the format. The output function is called with one list at a
@@ -151,18 +176,20 @@
call to the sort or merge function. Each output function is
called exactly once. When some output function has been applied
to all of the results or an error occurs, the last function is
- called with the argument <c>close</c>, and the reply is returned
- as value of the current call to the sort or merge function. If a
- function is given as input and the last input function returns
- <c>{end_of_input, Value}</c>, the function given as output will
- be called with the argument <c>{value, Value}</c>. This makes it
+ called with argument <c>close</c>, and the reply is returned
+ as value of the current call to the sort or merge function.</p>
+
+ <p>If a function is specified as input and the last input function
+ returns <c>{end_of_input, Value}</c>, the function specified as output
+ is called with argument <c>{value, Value}</c>. This makes it
easy to initiate the sequence of output functions with a value
- calculated by the input functions.
- </p>
+ calculated by the input functions.</p>
+
<p>As an example, consider sorting the terms on a disk log file.
A function that reads chunks from the disk log and returns a
list of binaries is used as input. The results are collected in
a list of terms.</p>
+
<pre>
sort(Log) ->
{ok, _} = disk_log:open([{name,Log}, {mode,read_only}]),
@@ -193,29 +220,32 @@ output(L) ->
lists:append(lists:reverse(L));
(Terms) ->
output([Terms | L])
- end. </pre>
- <p>Further examples of functions as input and output can be found
- at the end of the <c>file_sorter</c> module; the <c>term</c>
- format is implemented with functions.
- </p>
+ end.</pre>
+
+ <p>For more examples of functions as input and output, see
+ the end of the <c>file_sorter</c> module; the <c>term</c>
+ format is implemented with functions.</p>
+
<p>The possible values of <c>Reason</c> returned when an error
occurs are:</p>
+
<list type="bulleted">
<item>
- <p><c>bad_object</c>, <c>{bad_object, FileName}</c>.
+ <p><c>bad_object</c>, <c>{bad_object, FileName}</c> -
Applying the format function failed for some binary,
or the key(s) could not be extracted from some term.</p>
</item>
<item>
- <p><c>{bad_term, FileName}</c>. <c>io:read/2</c> failed
+ <p><c>{bad_term, FileName}</c> - <c>io:read/2</c> failed
to read some term.</p>
</item>
<item>
- <p><c>{file_error, FileName, file:posix()}</c>. See
- <c>file(3)</c> for an explanation of <c>file:posix()</c>.</p>
+ <p><c>{file_error, FileName, file:posix()}</c> - For an
+ explanation of <c>file:posix()</c>, see
+ <seealso marker="kernel:file"><c>file(3)</c></seealso>.</p>
</item>
<item>
- <p><c>{premature_eof, FileName}</c>. End-of-file was
+ <p><c>{premature_eof, FileName}</c> - End-of-file was
encountered inside some binary term.</p>
</item>
</list>
@@ -304,30 +334,53 @@ output(L) ->
<funcs>
<func>
- <name name="sort" arity="1"/>
- <fsummary>Sort terms on files.</fsummary>
+ <name name="check" arity="1"/>
+ <name name="check" arity="2"/>
+ <fsummary>Check whether terms on files are sorted.</fsummary>
<desc>
- <p>Sorts terms on files. <c>sort(FileName)</c> is equivalent
- to <c>sort([FileName], FileName)</c>.</p>
+ <p>Checks files for sortedness. If a file is not sorted, the
+ first out-of-order element is returned. The first term on a
+ file has position 1.</p>
+ <p><c>check(FileName)</c> is equivalent to
+ <c>check([FileName], [])</c>.</p>
</desc>
</func>
+
<func>
- <name name="sort" arity="2"/>
- <name name="sort" arity="3"/>
- <fsummary>Sort terms on files.</fsummary>
+ <name name="keycheck" arity="2"/>
+ <name name="keycheck" arity="3"/>
+ <fsummary>Check whether terms on files are sorted by key.</fsummary>
<desc>
- <p>Sorts terms on files. <c>sort(Input, Output)</c> is
- equivalent to <c>sort(Input, Output, [])</c>.</p>
+ <p>Checks files for sortedness. If a file is not sorted, the
+ first out-of-order element is returned. The first term on a
+ file has position 1.</p>
+ <p><c>keycheck(KeyPos, FileName)</c> is equivalent
+ to <c>keycheck(KeyPos, [FileName], [])</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="keymerge" arity="3"/>
+ <name name="keymerge" arity="4"/>
+ <fsummary>Merge terms on files by key.</fsummary>
+ <desc>
+ <p>Merges tuples on files. Each input file is assumed to be
+ sorted on key(s).</p>
+ <p><c>keymerge(KeyPos, FileNames, Output)</c> is equivalent
+ to <c>keymerge(KeyPos, FileNames, Output, [])</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="keysort" arity="2"/>
<fsummary>Sort terms on files by key.</fsummary>
<desc>
- <p>Sorts tuples on files. <c>keysort(N, FileName)</c> is
+ <p>Sorts tuples on files.</p>
+ <p><c>keysort(N, FileName)</c> is
equivalent to <c>keysort(N, [FileName], FileName)</c>.</p>
</desc>
</func>
+
<func>
<name name="keysort" arity="3"/>
<name name="keysort" arity="4"/>
@@ -335,13 +388,14 @@ output(L) ->
<desc>
<p>Sorts tuples on files. The sort is performed on the
element(s) mentioned in <c><anno>KeyPos</anno></c>. If two
- tuples compare equal (<c>==</c>) on one element, next
+ tuples compare equal (<c>==</c>) on one element, the next
element according to <c><anno>KeyPos</anno></c>
is compared. The sort is stable.</p>
<p><c>keysort(N, Input, Output)</c> is equivalent to
<c>keysort(N, Input, Output, [])</c>.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="2"/>
<name name="merge" arity="3"/>
@@ -353,39 +407,25 @@ output(L) ->
<c>merge(FileNames, Output, [])</c>.</p>
</desc>
</func>
+
<func>
- <name name="keymerge" arity="3"/>
- <name name="keymerge" arity="4"/>
- <fsummary>Merge terms on files by key.</fsummary>
- <desc>
- <p>Merges tuples on files. Each input file is assumed to be
- sorted on key(s).</p>
- <p><c>keymerge(KeyPos, FileNames, Output)</c> is equivalent
- to <c>keymerge(KeyPos, FileNames, Output, [])</c>.</p>
- </desc>
- </func>
- <func>
- <name name="check" arity="1"/>
- <name name="check" arity="2"/>
- <fsummary>Check whether terms on files are sorted.</fsummary>
+ <name name="sort" arity="1"/>
+ <fsummary>Sort terms on files.</fsummary>
<desc>
- <p>Checks files for sortedness. If a file is not sorted, the
- first out-of-order element is returned. The first term on a
- file has position 1.</p>
- <p><c>check(FileName)</c> is equivalent to
- <c>check([FileName], [])</c>.</p>
+ <p>Sorts terms on files.</p>
+ <p><c>sort(FileName)</c> is equivalent
+ to <c>sort([FileName], FileName)</c>.</p>
</desc>
</func>
+
<func>
- <name name="keycheck" arity="2"/>
- <name name="keycheck" arity="3"/>
- <fsummary>Check whether terms on files are sorted by key.</fsummary>
+ <name name="sort" arity="2"/>
+ <name name="sort" arity="3"/>
+ <fsummary>Sort terms on files.</fsummary>
<desc>
- <p>Checks files for sortedness. If a file is not sorted, the
- first out-of-order element is returned. The first term on a
- file has position 1.</p>
- <p><c>keycheck(KeyPos, FileName)</c> is equivalent
- to <c>keycheck(KeyPos, [FileName], [])</c>.</p>
+ <p>Sorts terms on files.</p>
+ <p><c>sort(Input, Output)</c> is
+ equivalent to <c>sort(Input, Output, [])</c>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/filelib.xml b/lib/stdlib/doc/src/filelib.xml
index 2cf9490f4b..7c6380ce28 100644
--- a/lib/stdlib/doc/src/filelib.xml
+++ b/lib/stdlib/doc/src/filelib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,19 +28,23 @@
<docno>1</docno>
<approved>Kenneth Lundin</approved>
<checked></checked>
- <date>03-01-21</date>
+ <date>2003-01-21</date>
<rev>A</rev>
- <file>filelib.sgml</file>
+ <file>filelib.xml</file>
</header>
<module>filelib</module>
- <modulesummary>File utilities, such as wildcard matching of filenames</modulesummary>
+ <modulesummary>File utilities, such as wildcard matching of filenames.
+ </modulesummary>
<description>
- <p>This module contains utilities on a higher level than the <c>file</c>
- module.</p>
- <p>This module does not support "raw" file names (i.e. files whose names
- do not comply with the expected encoding). Such files will be ignored
- by the functions in this module.</p>
- <p>For more information about raw file names, see the <seealso marker="kernel:file">file</seealso> module.</p>
+ <p>This module contains utilities on a higher level than the
+ <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
+
+ <p>This module does not support "raw" filenames (that is, files whose
+ names do not comply with the expected encoding). Such files are ignored
+ by the functions in this module.</p>
+
+ <p>For more information about raw filenames, see the
+ <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
</description>
<datatypes>
@@ -61,93 +65,99 @@
<funcs>
<func>
<name name="ensure_dir" arity="1"/>
- <fsummary>Ensure that all parent directories for a file or directory exist.</fsummary>
+ <fsummary>Ensure that all parent directories for a file or directory
+ exist.</fsummary>
<desc>
- <p>The <c>ensure_dir/1</c> function ensures that all parent
- directories for the given file or directory name <c><anno>Name</anno></c>
+ <p>Ensures that all parent directories for the specified file or
+ directory name <c><anno>Name</anno></c>
exist, trying to create them if necessary.</p>
<p>Returns <c>ok</c> if all parent directories already exist
- or could be created, or <c>{error, <anno>Reason</anno>}</c> if some parent
- directory does not exist and could not be created for some
- reason.</p>
+ or can be created. Returns <c>{error, <anno>Reason</anno>}</c> if
+ some parent directory does not exist and cannot be created.</p>
</desc>
</func>
+
<func>
<name name="file_size" arity="1"/>
- <fsummary>Return the size in bytes of the file.</fsummary>
+ <fsummary>Return the size in bytes of a file.</fsummary>
<desc>
- <p>The <c>file_size</c> function returns the size of the given file.</p>
+ <p>Returns the size of the specified file.</p>
</desc>
</func>
+
<func>
<name name="fold_files" arity="5"/>
<fsummary>Fold over all files matching a regular expression.</fsummary>
<desc>
- <p>The <c>fold_files/5</c> function folds the function
- <c><anno>Fun</anno></c> over all (regular) files <c><anno>F</anno></c> in the
- directory <c><anno>Dir</anno></c> that match the regular expression <c><anno>RegExp</anno></c>
- (see the <seealso marker="re">re</seealso> module for a description
- of the allowed regular expressions).
- If <c><anno>Recursive</anno></c> is true all sub-directories to <c>Dir</c>
- are processed. The regular expression matching is done on just
- the filename without the directory part.</p>
-
- <p>If Unicode file name translation is in effect and the file
- system is completely transparent, file names that cannot be
- interpreted as Unicode may be encountered, in which case the
- <c>fun()</c> must be prepared to handle raw file names
- (i.e. binaries). If the regular expression contains
- codepoints beyond 255, it will not match file names that do
- not conform to the expected character encoding (i.e. are not
- encoded in valid UTF-8).</p>
-
- <p>For more information about raw file names, see the
- <seealso marker="kernel:file">file</seealso> module.</p>
+ <p>Folds function <c><anno>Fun</anno></c> over all (regular) files
+ <c><anno>F</anno></c> in directory <c><anno>Dir</anno></c> that match
+ the regular expression <c><anno>RegExp</anno></c> (for a description
+ of the allowed regular expressions,
+ see the <seealso marker="re"><c>re</c></seealso> module).
+ If <c><anno>Recursive</anno></c> is <c>true</c>, all subdirectories
+ to <c>Dir</c>
+ are processed. The regular expression matching is only done on
+ the filename without the directory part.</p>
+ <p>If Unicode filename translation is in effect and the file
+ system is transparent, filenames that cannot be
+ interpreted as Unicode can be encountered, in which case the
+ <c>fun()</c> must be prepared to handle raw filenames
+ (that is, binaries). If the regular expression contains
+ codepoints &gt; 255, it does not match filenames that do
+ not conform to the expected character encoding (that is, are not
+ encoded in valid UTF-8).</p>
+ <p>For more information about raw filenames, see the
+ <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
</desc>
</func>
+
<func>
<name name="is_dir" arity="1"/>
- <fsummary>Test whether Name refer to a directory or not</fsummary>
+ <fsummary>Test whether <c>Name</c> refers to a directory.</fsummary>
<desc>
- <p>The <c>is_dir/1</c> function returns <c>true</c> if <c><anno>Name</anno></c>
- refers to a directory, and <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno></c>
+ refers to a directory, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_file" arity="1"/>
- <fsummary>Test whether Name refer to a file or directory.</fsummary>
+ <fsummary>Test whether <c>Name</c> refers to a file or directory.
+ </fsummary>
<desc>
- <p>The <c>is_file/1</c> function returns <c>true</c> if <c><anno>Name</anno></c>
- refers to a file or a directory, and <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno></c>
+ refers to a file or a directory, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_regular" arity="1"/>
- <fsummary>Test whether Name refer to a (regular) file.</fsummary>
+ <fsummary>Test whether <c>Name</c> refers to a (regular) file.</fsummary>
<desc>
- <p>The <c>is_regular/1</c> function returns <c>true</c> if <c><anno>Name</anno></c>
- refers to a file (regular file), and <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno></c>
+ refers to a (regular) file, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="last_modified" arity="1"/>
- <fsummary>Return the local date and time when a file was last modified.</fsummary>
+ <fsummary>Return the local date and time when a file was last modified.
+ </fsummary>
<desc>
- <p>The <c>last_modified/1</c> function returns the date and time the
- given file or directory was last modified, or 0 if the file
- does not exist.</p>
+ <p>Returns the date and time the specified file or directory was last
+ modified, or <c>0</c> if the file does not exist.</p>
</desc>
</func>
+
<func>
<name name="wildcard" arity="1"/>
<fsummary>Match filenames using Unix-style wildcards.</fsummary>
<desc>
- <p>The <c>wildcard/1</c> function returns a list of all files
- that match Unix-style wildcard-string <c><anno>Wildcard</anno></c>.</p>
+ <p>Returns a list of all files that match Unix-style wildcard string
+ <c><anno>Wildcard</anno></c>.</p>
<p>The wildcard string looks like an ordinary filename, except
- that certain "wildcard characters" are interpreted in a special
- way. The following characters are special:
- </p>
+ that the following "wildcard characters" are interpreted in a special
+ way:</p>
<taglist>
<tag>?</tag>
<item>
@@ -160,14 +170,14 @@
</item>
<tag>**</tag>
<item>
- <p>Two adjacent <c>*</c>'s used as a single pattern will
- match all files and zero or more directories and subdirectories.</p>
+ <p>Two adjacent <c>*</c> used as a single pattern match
+ all files and zero or more directories and subdirectories.</p>
</item>
<tag>[Character1,Character2,...]</tag>
<item>
<p>Matches any of the characters listed. Two characters
- separated by a hyphen will match a range of characters.
- Example: <c>[A-Z]</c> will match any uppercase letter.</p>
+ separated by a hyphen match a range of characters.
+ Example: <c>[A-Z]</c> matches any uppercase letter.</p>
</item>
<tag>{Item,...}</tag>
<item>
@@ -175,49 +185,45 @@
</item>
</taglist>
<p>Other characters represent themselves. Only filenames that
- have exactly the same character in the same position will match.
- (Matching is case-sensitive; i.e. "a" will not match "A").
- </p>
- <p>Note that multiple "*" characters are allowed
- (as in Unix wildcards, but opposed to Windows/DOS wildcards).
- </p>
- <p>Examples:</p>
+ have exactly the same character in the same position match.
+ Matching is case-sensitive, for example, "a" does not match "A".</p>
+ <p>Notice that multiple "*" characters are allowed
+ (as in Unix wildcards, but opposed to Windows/DOS wildcards).</p>
+ <p><em>Examples:</em></p>
<p>The following examples assume that the current directory is the
- top of an Erlang/OTP installation.
- </p>
- <p>To find all <c>.beam</c> files in all applications, the following
- line can be used:</p>
+ top of an Erlang/OTP installation.</p>
+ <p>To find all <c>.beam</c> files in all applications, use the
+ following line:</p>
<code type="none">
- filelib:wildcard("lib/*/ebin/*.beam"). </code>
- <p>To find either <c>.erl</c> or <c>.hrl</c> in all applications
- <c>src</c> directories, the following</p>
+filelib:wildcard("lib/*/ebin/*.beam").</code>
+ <p>To find <c>.erl</c> or <c>.hrl</c> in all applications <c>src</c>
+ directories, use either of the following lines:</p>
<code type="none">
- filelib:wildcard("lib/*/src/*.?rl") </code>
- <p>or the following line</p>
+filelib:wildcard("lib/*/src/*.?rl")</code>
<code type="none">
- filelib:wildcard("lib/*/src/*.{erl,hrl}") </code>
- <p>can be used.</p>
- <p>To find all <c>.hrl</c> files in either <c>src</c> or <c>include</c>
- directories, use:</p>
+filelib:wildcard("lib/*/src/*.{erl,hrl}")</code>
+ <p>To find all <c>.hrl</c> files in <c>src</c> or <c>include</c>
+ directories:</p>
<code type="none">
- filelib:wildcard("lib/*/{src,include}/*.hrl"). </code>
+filelib:wildcard("lib/*/{src,include}/*.hrl").</code>
<p>To find all <c>.erl</c> or <c>.hrl</c> files in either
- <c>src</c> or <c>include</c> directories, use:</p>
+ <c>src</c> or <c>include</c> directories:</p>
<code type="none">
- filelib:wildcard("lib/*/{src,include}/*.{erl,hrl}") </code>
- <p>To find all <c>.erl</c> or <c>.hrl</c> files in any
- subdirectory, use:</p>
+filelib:wildcard("lib/*/{src,include}/*.{erl,hrl}")</code>
+ <p>To find all <c>.erl</c> or <c>.hrl</c> files in any subdirectory:</p>
<code type="none">
- filelib:wildcard("lib/**/*.{erl,hrl}") </code>
+filelib:wildcard("lib/**/*.{erl,hrl}")</code>
</desc>
</func>
+
<func>
<name name="wildcard" arity="2"/>
- <fsummary>Match filenames using Unix-style wildcards starting at a specified directory.</fsummary>
+ <fsummary>Match filenames using Unix-style wildcards starting at a
+ specified directory.</fsummary>
<desc>
- <p>The <c>wildcard/2</c> function works like <c>wildcard/1</c>,
- except that instead of the actual working directory, <c><anno>Cwd</anno></c>
- will be used.</p>
+ <p>Same as <seealso marker="#wildcard/1"><c>wildcard/1</c></seealso>,
+ except that <c><anno>Cwd</anno></c> is used instead of the working
+ directory.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/filename.xml b/lib/stdlib/doc/src/filename.xml
index 1d4ffc10f9..2a413835d0 100644
--- a/lib/stdlib/doc/src/filename.xml
+++ b/lib/stdlib/doc/src/filename.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -25,39 +25,55 @@
<title>filename</title>
<prepared>Kenneth Lundin</prepared>
<docno>1</docno>
- <date>97-11-13</date>
+ <date>1997-11-13</date>
<rev>B</rev>
</header>
<module>filename</module>
- <modulesummary>Filename Manipulation Functions</modulesummary>
+ <modulesummary>Filename manipulation functions.</modulesummary>
<description>
- <p>The module <c>filename</c> provides a number of useful functions
- for analyzing and manipulating file names. These functions are
+ <p>This module provides functions
+ for analyzing and manipulating filenames. These functions are
designed so that the Erlang code can work on many different
- platforms with different formats for file names. With file name
- is meant all strings that can be used to denote a file. They can
- be short relative names like <c>foo.erl</c>, very long absolute
- name which include a drive designator and directory names like
+ platforms with different filename formats. With filename
+ is meant all strings that can be used to denote a file. The filename
+ can be a short relative name like <c>foo.erl</c>, a long absolute
+ name including a drive designator, a directory name like
<c>D:\usr/local\bin\erl/lib\tools\foo.erl</c>, or any variations
in between.</p>
- <p>In Windows, all functions return file names with forward slashes
- only, even if the arguments contain back slashes. Use
- <c>join/1</c> to normalize a file name by removing redundant
- directory separators.</p>
- <p>The module supports raw file names in the way that if a binary is present, or the file name cannot be interpreted according to the return value of
- <seealso marker="kernel:file#native_name_encoding/0">file:native_name_encoding/0</seealso>, a raw file name will also be returned. For example filename:join/1 provided with a path component being a binary (and also not being possible to interpret under the current native file name encoding) will result in a raw file name being returned (the join operation will have been performed of course). For more information about raw file names, see the <seealso marker="kernel:file">file</seealso> module.</p>
- </description>
+ <p>In Windows, all functions return filenames with forward slashes
+ only, even if the arguments contain backslashes. To normalize a
+ filename by removing redundant directory separators, use
+ <seealso marker="#join/1"><c>join/1</c></seealso>.</p>
+
+ <p>The module supports raw filenames in the way that if a binary is
+ present, or the filename cannot be interpreted according to the return
+ value of <seealso marker="kernel:file#native_name_encoding/0">
+ <c>file:native_name_encoding/0</c></seealso>, a raw filename is also
+ returned. For example, <c>join/1</c> provided with a path component
+ that is a binary (and cannot be interpreted under the current
+ native filename encoding) results in a raw filename that is returned
+ (the join operation is performed of course). For more information
+ about raw filenames, see the
+ <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
+ </description>
+ <datatypes>
+ <datatype>
+ <name name="basedir_type"/>
+ </datatype>
+ </datatypes>
+
<funcs>
<func>
<name name="absname" arity="1"/>
- <fsummary>Convert a filename to an absolute name, relative the working directory</fsummary>
+ <fsummary>Convert a filename to an absolute name, relative the working
+ directory.</fsummary>
<desc>
- <p>Converts a relative <c><anno>Filename</anno></c> and returns an absolute
- name. No attempt is made to create the shortest absolute name,
- because this can give incorrect results on file systems which
+ <p>Converts a relative <c><anno>Filename</anno></c> and returns an
+ absolute name. No attempt is made to create the shortest absolute
+ name, as this can give incorrect results on file systems that
allow links.</p>
- <p>Unix examples:</p>
+ <p><em>Unix examples:</em></p>
<pre>
1> <input>pwd().</input>
"/usr/local"
@@ -67,7 +83,7 @@
"/usr/local/../x"
4> <input>filename:absname("/").</input>
"/"</pre>
- <p>Windows examples:</p>
+ <p><em>Windows examples:</em></p>
<pre>
1> <input>pwd().</input>
"D:/usr/local"
@@ -79,35 +95,191 @@
"D:/"</pre>
</desc>
</func>
+
<func>
<name name="absname" arity="2"/>
- <fsummary>Convert a filename to an absolute name, relative a specified directory</fsummary>
+ <fsummary>Convert a filename to an absolute name, relative a specified
+ directory.</fsummary>
<desc>
- <p>This function works like <c>absname/1</c>, except that
- the directory to which the file name should be made relative
- is given explicitly in the <c><anno>Dir</anno></c> argument.</p>
+ <p>Same as <seealso marker="#absname/1"><c>absname/1</c></seealso>,
+ except that the directory to which the filename is to be made
+ relative is specified in argument <c><anno>Dir</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="absname_join" arity="2"/>
- <fsummary>Join an absolute directory with a relative filename</fsummary>
+ <fsummary>Join an absolute directory with a relative filename.</fsummary>
<desc>
- <p>Joins an absolute directory with a relative filename.
- Similar to <c>join/2</c>, but on platforms with tight
- restrictions on raw filename length and no support for
- symbolic links (read: VxWorks), leading parent directory
- components in <c><anno>Filename</anno></c> are matched against trailing
- directory components in <c><anno>Dir</anno></c> so they can be removed
- from the result - minimizing its length.</p>
+ <p>Joins an absolute directory with a relative filename. Similar to
+ <seealso marker="#join/2"><c>join/2</c></seealso>, but on platforms
+ with tight restrictions on raw filename length and no support for
+ symbolic links (read: VxWorks), leading parent directory components
+ in <c><anno>Filename</anno></c> are matched against trailing
+ directory components in <c><anno>Dir</anno></c> so they can be
+ removed from the result - minimizing its length.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="basedir" arity="2"/>
+ <fsummary>Equivalent to <c>basedir(<anno>Type</anno>,<anno>Application</anno>,#{})</c>.</fsummary>
+ <desc>
+ <p>
+ Equivalent to <seealso marker="#basedir-3">
+ basedir(<anno>Type</anno>, <anno>Application</anno>, #{})</seealso>.
+ </p>
+ </desc>
+ </func>
+ <func>
+ <name name="basedir" arity="3"/>
+ <fsummary></fsummary>
+ <desc><marker id="basedir-3"/>
+ <p>
+ Returns a suitable path, or paths, for a given type. If
+ <c>os</c> is not set in <c><anno>Opts</anno></c> the
+ function will default to the native option, that is
+ <c>'linux'</c>, <c>'darwin'</c> or <c>'windows'</c>, as
+ understood by <c>os:type/0</c>. Anything not recognized
+ as <c>'darwin'</c> or <c>'windows'</c> is interpreted as
+ <c>'linux'</c>.</p>
+ <p>
+ The options <c>'author'</c> and <c>'version'</c> are only used with <c>'windows'</c> option mode.
+ </p>
+ <list type="bulleted">
+ <item><c>user_cache</c>
+ <p>The path location is intended for transient data files on a local machine.</p>
+ <p>
+ On Linux:
+ Respects the os environment variable <c>XDG_CACHE_HOME</c>.
+ </p>
+ <pre>
+1> <input>filename:basedir(user_cache, "my_application", #{os=>linux}).</input>
+"/home/otptest/.cache/my_application"</pre>
+ On Darwin: <pre>
+1> <input>filename:basedir(user_cache, "my_application", #{os=>darwin}).</input>
+"/home/otptest/Library/Caches/my_application"</pre>
+ On Windows: <pre>
+1> <input>filename:basedir(user_cache, "My App").</input>
+"c:/Users/otptest/AppData/Local/My App/Cache"
+2> <input>filename:basedir(user_cache, "My App").</input>
+"c:/Users/otptest/AppData/Local/My App/Cache"
+3> <input>filename:basedir(user_cache, "My App", #{author=>"Erlang"}).</input>
+"c:/Users/otptest/AppData/Local/Erlang/My App/Cache"
+4> <input>filename:basedir(user_cache, "My App", #{version=>"1.2"}).</input>
+"c:/Users/otptest/AppData/Local/My App/1.2/Cache"
+5> <input>filename:basedir(user_cache, "My App", #{author=>"Erlang",version=>"1.2"}).</input>
+"c:/Users/otptest/AppData/Local/Erlang/My App/1.2/Cache"</pre>
+ </item>
+ <item><c>user_config</c>
+ <p>
+ The path location is intended for persistent configuration files.
+ </p>
+ <p>
+ On Linux:
+ Respects the os environment variable <c>XDG_CONFIG_HOME</c>.
+ </p>
+ <pre>
+2> <input>filename:basedir(user_config, "my_application", #{os=>linux}).</input>
+"/home/otptest/.config/my_application"</pre>
+ On Darwin:<pre>
+2> <input>filename:basedir(user_config, "my_application", #{os=>darwin}).</input>
+"/home/otptest/Library/Application Support/my_application"</pre>
+ On Windows:<pre>
+1> <input>filename:basedir(user_config, "My App").</input>
+"c:/Users/otptest/AppData/Roaming/My App"
+2> <input>filename:basedir(user_config, "My App", #{author=>"Erlang", version=>"1.2"}).</input>
+"c:/Users/otptest/AppData/Roaming/Erlang/My App/1.2"</pre>
+ </item>
+ <item><c>user_data</c>
+ <p>
+ The path location is intended for persistent data files.
+ </p>
+ <p>
+ On Linux:
+ Respects the os environment variable <c>XDG_DATA_HOME</c>.
+ </p>
+ <pre>
+3> <input>filename:basedir(user_data, "my_application", #{os=>linux}).</input>
+"/home/otptest/.local/my_application"</pre>
+ On Darwin:<pre>
+3> <input>filename:basedir(user_data, "my_application", #{os=>darwin}).</input>
+"/home/otptest/Library/Application Support/my_application"</pre>
+ On Windows:<pre>
+8> <input>filename:basedir(user_data, "My App").</input>
+"c:/Users/otptest/AppData/Local/My App"
+9> <input>filename:basedir(user_data, "My App",#{author=>"Erlang",version=>"1.2"}).</input>
+"c:/Users/otptest/AppData/Local/Erlang/My App/1.2"</pre>
+ </item>
+ <item><c>user_log</c>
+ <p>The path location is intended for transient log files on a local machine.</p>
+ <p>
+ On Linux:
+ Respects the os environment variable <c>XDG_CACHE_HOME</c>.</p>
+ <pre>
+4> <input>filename:basedir(user_log, "my_application", #{os=>linux}).</input>
+"/home/otptest/.cache/my_application/log"</pre>
+ On Darwin:<pre>
+4> <input>filename:basedir(user_log, "my_application", #{os=>darwin}).</input>
+"/home/otptest/Library/Caches/my_application"</pre>
+ On Windows:<pre>
+12> <input>filename:basedir(user_log, "My App").</input>
+"c:/Users/otptest/AppData/Local/My App/Logs"
+13> <input>filename:basedir(user_log, "My App",#{author=>"Erlang",version=>"1.2"}).</input>
+"c:/Users/otptest/AppData/Local/Erlang/My App/1.2/Logs"</pre>
+ </item>
+ <item><c>site_config</c><p>
+ On Linux:
+ Respects the os environment variable <c>XDG_CONFIG_DIRS</c>.</p>
+<pre>
+5> <input>filename:basedir(site_data, "my_application", #{os=>linux}).</input>
+["/usr/local/share/my_application",
+ "/usr/share/my_application"]
+6> <input>os:getenv("XDG_CONFIG_DIRS").</input>
+"/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg"
+7> <input>filename:basedir(site_config, "my_application", #{os=>linux}).</input>
+["/etc/xdg/xdg-ubuntu/my_application",
+ "/usr/share/upstart/xdg/my_application",
+ "/etc/xdg/my_application"]
+8> <input>os:unsetenv("XDG_CONFIG_DIRS").</input>
+true
+9> <input>filename:basedir(site_config, "my_application", #{os=>linux}).</input>
+["/etc/xdg/my_application"]</pre>
+ On Darwin:<pre>
+5> <input>filename:basedir(site_config, "my_application", #{os=>darwin}).</input>
+["/Library/Application Support/my_application"]</pre>
+ </item>
+ <item><c>site_data</c><p>
+ On Linux:
+ Respects the os environment variable <c>XDG_DATA_DIRS</c>.</p>
+ <pre>
+10> <input>os:getenv("XDG_DATA_DIRS").</input>
+"/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/"
+11> <input>filename:basedir(site_data, "my_application", #{os=>linux}).</input>
+["/usr/share/ubuntu/my_application",
+ "/usr/share/gnome/my_application",
+ "/usr/local/share/my_application",
+ "/usr/share/my_application"]
+12> <input>os:unsetenv("XDG_DATA_DIRS").</input>
+true
+13> <input>filename:basedir(site_data, "my_application", #{os=>linux}).</input>
+["/usr/local/share/my_application",
+ "/usr/share/my_application"]</pre>
+ On Darwin:<pre>
+5> <input>filename:basedir(site_data, "my_application", #{os=>darwin}).</input>
+["/Library/Application Support/my_application"]</pre>
+ </item>
+ </list>
</desc>
</func>
<func>
<name name="basename" arity="1"/>
- <fsummary>Return the last component of a filename</fsummary>
+ <fsummary>Return the last component of a filename.</fsummary>
<desc>
<p>Returns the last component of <c><anno>Filename</anno></c>, or
- <c><anno>Filename</anno></c> itself if it does not contain any directory
- separators.</p>
+ <c><anno>Filename</anno></c> itself if it does not contain any
+ directory separators.</p>
+ <p><em>Examples:</em></p>
<pre>
5> <input>filename:basename("foo").</input>
"foo"
@@ -117,15 +289,18 @@
[]</pre>
</desc>
</func>
+
<func>
<name name="basename" arity="2"/>
- <fsummary>Return the last component of a filename, stripped of the specified extension</fsummary>
+ <fsummary>Return the last component of a filename, stripped of the
+ specified extension.</fsummary>
<desc>
- <p>Returns the last component of <c><anno>Filename</anno></c> with the
- extension <c><anno>Ext</anno></c> stripped. This function should be used
- to remove a specific extension which might, or might not, be
- there. Use <c>rootname(basename(Filename))</c> to remove an
- extension that exists, but you are not sure which one it is.</p>
+ <p>Returns the last component of <c><anno>Filename</anno></c> with
+ extension <c><anno>Ext</anno></c> stripped. This function is to be
+ used to remove a (possible) specific extension. To remove an
+ existing extension when you are unsure which one it is, use
+ <c>rootname(basename(Filename))</c>.</p>
+ <p><em>Examples:</em></p>
<pre>
8> <input>filename:basename("~/src/kalle.erl", ".erl").</input>
"kalle"
@@ -139,27 +314,32 @@
"kalle"</pre>
</desc>
</func>
+
<func>
<name name="dirname" arity="1"/>
- <fsummary>Return the directory part of a path name</fsummary>
+ <fsummary>Return the directory part of a path name.</fsummary>
<desc>
<p>Returns the directory part of <c><anno>Filename</anno></c>.</p>
+ <p><em>Examples:</em></p>
<pre>
13> <input>filename:dirname("/usr/src/kalle.erl").</input>
"/usr/src"
14> <input>filename:dirname("kalle.erl").</input>
-"."
-
+"."</pre>
+ <pre>
5> <input>filename:dirname("\\usr\\src/kalle.erl").</input> % Windows
"/usr/src"</pre>
</desc>
</func>
+
<func>
<name name="extension" arity="1"/>
- <fsummary>Return the file extension</fsummary>
+ <fsummary>Return the file extension.</fsummary>
<desc>
- <p>Returns the file extension of <c><anno>Filename</anno></c>, including
- the period. Returns an empty string if there is no extension.</p>
+ <p>Returns the file extension of <c><anno>Filename</anno></c>,
+ including the period. Returns an empty string if no extension
+ exists.</p>
+ <p><em>Examples:</em></p>
<pre>
15> <input>filename:extension("foo.erl").</input>
".erl"
@@ -167,69 +347,123 @@
[]</pre>
</desc>
</func>
+
+ <func>
+ <name name="find_src" arity="1"/>
+ <name name="find_src" arity="2"/>
+ <fsummary>Find the filename and compiler options for a module.</fsummary>
+ <desc>
+ <p>Finds the source filename and compiler options for a module.
+ The result can be fed to <seealso marker="compiler:compile#file/2">
+ <c>compile:file/2</c></seealso> to compile the file again.</p>
+ <warning><p>It is not recommended to use this function. If possible,
+ use the <seealso marker="beam_lib"><c>beam_lib(3)</c></seealso>
+ module to extract the abstract code format from the Beam file and
+ compile that instead.</p></warning>
+ <p>Argument <c><anno>Beam</anno></c>, which can be a string or an atom,
+ specifies either the module name or the path to the source
+ code, with or without extension <c>".erl"</c>. In either
+ case, the module must be known by the code server, that is,
+ <c>code:which(<anno>Module</anno>)</c> must succeed.</p>
+ <p><c><anno>Rules</anno></c> describes how the source directory can be
+ found when the object code directory is known. It is a list of
+ tuples <c>{<anno>BinSuffix</anno>, <anno>SourceSuffix</anno>}</c> and
+ is interpreted as follows: if the end of the directory name where the
+ object is located matches <c><anno>BinSuffix</anno></c>, then the
+ source code directory has the same name, but with
+ <c><anno>BinSuffix</anno></c> replaced by
+ <c><anno>SourceSuffix</anno></c>. <c><anno>Rules</anno></c> defaults
+ to:</p>
+ <code type="none">
+[{"", ""}, {"ebin", "src"}, {"ebin", "esrc"}]</code>
+ <p>If the source file is found in the resulting directory, the function
+ returns that location together with <c><anno>Options</anno></c>.
+ Otherwise the next rule is tried, and so on.</p>
+ <p>The function returns <c>{<anno>SourceFile</anno>,
+ <anno>Options</anno>}</c> if it succeeds.
+ <c><anno>SourceFile</anno></c> is the absolute path to the source
+ file without extension <c>".erl"</c>. <c><anno>Options</anno></c>
+ includes the options that are necessary to recompile the file with
+ <c>compile:file/2</c>, but excludes options such as <c>report</c>
+ and <c>verbose</c>, which do not change the way code is generated.
+ The paths in options <c>{outdir, <anno>Path</anno>}</c> and
+ <c>{i, Path}</c> are guaranteed to be absolute.</p>
+ </desc>
+ </func>
+
<func>
<name name="flatten" arity="1"/>
- <fsummary>Convert a filename to a flat string</fsummary>
+ <fsummary>Convert a filename to a flat string.</fsummary>
<desc>
<p>Converts a possibly deep list filename consisting of
characters and atoms into the corresponding flat string
filename.</p>
</desc>
</func>
+
<func>
<name name="join" arity="1"/>
- <fsummary>Join a list of filename components with directory separators</fsummary>
+ <fsummary>Join a list of filename components with directory separators.
+ </fsummary>
<desc>
- <p>Joins a list of file name <c><anno>Components</anno></c> with directory
- separators. If one of the elements of <c><anno>Components</anno></c>
- includes an absolute path, for example <c>"/xxx"</c>,
+ <p>Joins a list of filename <c><anno>Components</anno></c> with
+ directory separators.
+ If one of the elements of <c><anno>Components</anno></c>
+ includes an absolute path, such as <c>"/xxx"</c>,
the preceding elements, if any, are removed from the result.</p>
<p>The result is "normalized":</p>
<list type="bulleted">
<item>Redundant directory separators are removed.</item>
<item>In Windows, all directory separators are forward
- slashes and the drive letter is in lower case.</item>
+ slashes and the drive letter is in lower case.</item>
</list>
+ <p><em>Examples:</em></p>
<pre>
17> <input>filename:join(["/usr", "local", "bin"]).</input>
"/usr/local/bin"
18> <input>filename:join(["a/b///c/"]).</input>
-"a/b/c"
-
+"a/b/c"</pre>
+ <pre>
6> <input>filename:join(["B:a\\b///c/"]).</input> % Windows
"b:a/b/c"</pre>
</desc>
</func>
+
<func>
<name name="join" arity="2"/>
- <fsummary>Join two filename components with directory separators</fsummary>
+ <fsummary>Join two filename components with directory separators.
+ </fsummary>
<desc>
- <p>Joins two file name components with directory separators.
- Equivalent to <c>join([<anno>Name1</anno>, <anno>Name2</anno>])</c>.</p>
+ <p>Joins two filename components with directory separators.
+ Equivalent to <c>join([<anno>Name1</anno>, <anno>Name2</anno>])</c>.
+ </p>
</desc>
</func>
+
<func>
<name name="nativename" arity="1"/>
- <fsummary>Return the native form of a file path</fsummary>
+ <fsummary>Return the native form of a file path.</fsummary>
<desc>
- <p>Converts <c><anno>Path</anno></c> to a form accepted by the command shell
- and native applications on the current platform. On Windows,
+ <p>Converts <c><anno>Path</anno></c> to a form accepted by the command
+ shell and native applications on the current platform. On Windows,
forward slashes are converted to backward slashes. On all
- platforms, the name is normalized as done by <c>join/1</c>.</p>
+ platforms, the name is normalized as done by
+ <seealso marker="#join/1"><c>join/1</c></seealso>.</p>
+ <p><em>Examples:</em></p>
<pre>
19> <input>filename:nativename("/usr/local/bin/").</input> % Unix
-"/usr/local/bin"
-
+"/usr/local/bin"</pre>
+ <pre>
7> <input>filename:nativename("/usr/local/bin/").</input> % Windows
"\\usr\\local\\bin"</pre>
</desc>
</func>
+
<func>
<name name="pathtype" arity="1"/>
- <fsummary>Return the type of a path</fsummary>
+ <fsummary>Return the path type.</fsummary>
<desc>
- <p>Returns the type of path, one of <c>absolute</c>,
- <c>relative</c>, or <c>volumerelative</c>.</p>
+ <p>Returns the path type, which is one of the following:</p>
<taglist>
<tag><c>absolute</c></tag>
<item>
@@ -254,14 +488,16 @@
</taglist>
</desc>
</func>
+
<func>
<name name="rootname" arity="1"/>
<name name="rootname" arity="2"/>
- <fsummary>Remove a filename extension</fsummary>
+ <fsummary>Remove a filename extension.</fsummary>
<desc>
- <p>Remove a filename extension. <c>rootname/2</c> works as
+ <p>Removes a filename extension. <c>rootname/2</c> works as
<c>rootname/1</c>, except that the extension is removed only
if it is <c><anno>Ext</anno></c>.</p>
+ <p><em>Examples:</em></p>
<pre>
20> <input>filename:rootname("/beam.src/kalle").</input>
/beam.src/kalle"
@@ -273,12 +509,14 @@
"/beam.src/foo.beam"</pre>
</desc>
</func>
+
<func>
<name name="split" arity="1"/>
- <fsummary>Split a filename into its path components</fsummary>
+ <fsummary>Split a filename into its path components.</fsummary>
<desc>
<p>Returns a list whose elements are the path components of
<c><anno>Filename</anno></c>.</p>
+ <p><em>Examples:</em></p>
<pre>
24> <input>filename:split("/usr/local/bin").</input>
["/","usr","local","bin"]
@@ -288,50 +526,6 @@
["a:/","msdev","include"]</pre>
</desc>
</func>
- <func>
- <name name="find_src" arity="1"/>
- <name name="find_src" arity="2"/>
- <fsummary>Find the filename and compiler options for a module</fsummary>
- <desc>
- <p>Finds the source filename and compiler options for a module.
- The result can be fed to <c>compile:file/2</c> in order to
- compile the file again.</p>
-
- <warning><p>We don't recommend using this function. If possible,
- use <seealso marker="beam_lib">beam_lib(3)</seealso> to extract
- the abstract code format from the BEAM file and compile that
- instead.</p></warning>
-
- <p>The <c><anno>Beam</anno></c> argument, which can be a string or an atom,
- specifies either the module name or the path to the source
- code, with or without the <c>".erl"</c> extension. In either
- case, the module must be known by the code server, i.e.
- <c>code:which(<anno>Module</anno>)</c> must succeed.</p>
- <p><c><anno>Rules</anno></c> describes how the source directory can be found,
- when the object code directory is known. It is a list of
- tuples <c>{<anno>BinSuffix</anno>, <anno>SourceSuffix</anno>}</c> and is interpreted
- as follows: If the end of the directory name where the object
- is located matches <c><anno>BinSuffix</anno></c>, then the source code
- directory has the same name, but with <c><anno>BinSuffix</anno></c>
- replaced by <c><anno>SourceSuffix</anno></c>. <c><anno>Rules</anno></c> defaults to:</p>
- <code type="none">
-[{"", ""}, {"ebin", "src"}, {"ebin", "esrc"}]</code>
- <p>If the source file is found in the resulting directory, then
- the function returns that location together with
- <c><anno>Options</anno></c>. Otherwise, the next rule is tried, and so on.</p>
-
- <p>The function returns <c>{<anno>SourceFile</anno>, <anno>Options</anno>}</c> if it succeeds.
- <c><anno>SourceFile</anno></c> is the absolute path to the source file
- without the <c>".erl"</c> extension. <c><anno>Options</anno></c> include
- the options which are necessary to recompile the file with
- <c>compile:file/2</c>, but excludes options such as
- <c>report</c> or <c>verbose</c> which do not change the way
- code is generated. The paths in the <c>{outdir, <anno>Path</anno>}</c>
- and <c>{i, Path}</c> options are guaranteed to be
- absolute.</p>
-
- </desc>
- </func>
</funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/gb_sets.xml b/lib/stdlib/doc/src/gb_sets.xml
index 84609a0f7c..d677dd6f83 100644
--- a/lib/stdlib/doc/src/gb_sets.xml
+++ b/lib/stdlib/doc/src/gb_sets.xml
@@ -29,87 +29,75 @@
<rev></rev>
</header>
<module>gb_sets</module>
- <modulesummary>General Balanced Trees</modulesummary>
+ <modulesummary>General balanced trees.</modulesummary>
<description>
- <p>An implementation of ordered sets using Prof. Arne Andersson's
- General Balanced Trees. This can be much more efficient than
+ <p>This module provides ordered sets using Prof. Arne Andersson's
+ General Balanced Trees. Ordered sets can be much more efficient than
using ordered lists, for larger sets, but depends on the
application.</p>
+
<p>This module considers two elements as different if and only if
they do not compare equal (<c>==</c>).</p>
</description>
<section>
- <title>Complexity note</title>
- <p>The complexity on set operations is bounded by either O(|S|) or
- O(|T| * log(|S|)), where S is the largest given set, depending
+ <title>Complexity Note</title>
+ <p>The complexity on set operations is bounded by either <em>O(|S|)</em> or
+ <em>O(|T| * log(|S|))</em>, where S is the largest given set, depending
on which is fastest for any particular function call. For
operating on sets of almost equal size, this implementation is
about 3 times slower than using ordered-list sets directly. For
sets of very different sizes, however, this solution can be
- arbitrarily much faster; in practical cases, often between 10
- and 100 times. This implementation is particularly suited for
+ arbitrarily much faster; in practical cases, often
+ 10-100 times. This implementation is particularly suited for
accumulating elements a few at a time, building up a large set
- (more than 100-200 elements), and repeatedly testing for
+ (&gt; 100-200 elements), and repeatedly testing for
membership in the current set.</p>
+
<p>As with normal tree structures, lookup (membership testing),
- insertion and deletion have logarithmic complexity.</p>
+ insertion, and deletion have logarithmic complexity.</p>
</section>
<section>
<title>Compatibility</title>
- <p>All of the following functions in this module also exist
- and do the same thing in the <c>sets</c> and <c>ordsets</c>
+ <p>The following functions in this module also exist and provides
+ the same functionality in the
+ <seealso marker="sets"><c>sets(3)</c></seealso> and
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso>
modules. That is, by only changing the module name for each call,
you can try out different set representations.</p>
<list type="bulleted">
- <item>
- <p><c>add_element/2</c></p>
+ <item><seealso marker="#add_element/2"><c>add_element/2</c></seealso>
</item>
- <item>
- <p><c>del_element/2</c></p>
+ <item><seealso marker="#del_element/2"><c>del_element/2</c></seealso>
</item>
- <item>
- <p><c>filter/2</c></p>
+ <item><seealso marker="#filter/2"><c>filter/2</c></seealso>
</item>
- <item>
- <p><c>fold/3</c></p>
+ <item><seealso marker="#fold/3"><c>fold/3</c></seealso>
</item>
- <item>
- <p><c>from_list/1</c></p>
+ <item><seealso marker="#from_list/1"><c>from_list/1</c></seealso>
</item>
- <item>
- <p><c>intersection/1</c></p>
+ <item><seealso marker="#intersection/1"><c>intersection/1</c></seealso>
</item>
- <item>
- <p><c>intersection/2</c></p>
+ <item><seealso marker="#intersection/2"><c>intersection/2</c></seealso>
</item>
- <item>
- <p><c>is_element/2</c></p>
+ <item><seealso marker="#is_element/2"><c>is_element/2</c></seealso>
</item>
- <item>
- <p><c>is_set/1</c></p>
+ <item><seealso marker="#is_set/1"><c>is_set/1</c></seealso>
</item>
- <item>
- <p><c>is_subset/2</c></p>
+ <item><seealso marker="#is_subset/2"><c>is_subset/2</c></seealso>
</item>
- <item>
- <p><c>new/0</c></p>
+ <item><seealso marker="#new/0"><c>new/0</c></seealso>
</item>
- <item>
- <p><c>size/1</c></p>
+ <item><seealso marker="#size/1"><c>size/1</c></seealso>
</item>
- <item>
- <p><c>subtract/2</c></p>
+ <item><seealso marker="#subtract/2"><c>subtract/2</c></seealso>
</item>
- <item>
- <p><c>to_list/1</c></p>
+ <item><seealso marker="#to_list/1"><c>to_list/1</c></seealso>
</item>
- <item>
- <p><c>union/1</c></p>
+ <item><seealso marker="#union/1"><c>union/1</c></seealso>
</item>
- <item>
- <p><c>union/2</c></p>
+ <item><seealso marker="#union/2"><c>union/2</c></seealso>
</item>
</list>
</section>
@@ -117,290 +105,369 @@
<datatypes>
<datatype>
<name name="set" n_vars="1"/>
- <desc><p>A GB set.</p></desc>
+ <desc><p>A general balanced set.</p></desc>
</datatype>
<datatype>
<name name="set" n_vars="0"/>
</datatype>
<datatype>
<name name="iter" n_vars="1"/>
- <desc><p>A GB set iterator.</p></desc>
+ <desc><p>A general balanced set iterator.</p></desc>
</datatype>
<datatype>
<name name="iter" n_vars="0"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="add" arity="2"/>
<name name="add_element" arity="2"/>
- <fsummary>Add a (possibly existing) element to a set</fsummary>
+ <fsummary>Add a (possibly existing) element to a set.</fsummary>
<desc>
<p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> inserted. If <c><anno>Element</anno></c> is already an
+ <c><anno>Element</anno></c> inserted. If <c><anno>Element</anno></c>
+ is already an
element in <c><anno>Set1</anno></c>, nothing is changed.</p>
</desc>
</func>
+
<func>
<name name="balance" arity="1"/>
- <fsummary>Rebalance tree representation of a set</fsummary>
+ <fsummary>Rebalance tree representation of a set.</fsummary>
<desc>
- <p>Rebalances the tree representation of <c><anno>Set1</anno></c>. Note that
- this is rarely necessary, but may be motivated when a large
+ <p>Rebalances the tree representation of <c><anno>Set1</anno></c>.
+ Notice that
+ this is rarely necessary, but can be motivated when a large
number of elements have been deleted from the tree without
- further insertions. Rebalancing could then be forced in order
- to minimise lookup times, since deletion only does not
+ further insertions. Rebalancing can then be forced
+ to minimise lookup times, as deletion does not
rebalance the tree.</p>
</desc>
</func>
+
+ <func>
+ <name name="del_element" arity="2"/>
+ <fsummary>Remove a (possibly non-existing) element from a set.</fsummary>
+ <desc>
+ <p>Returns a new set formed from <c><anno>Set1</anno></c> with
+ <c><anno>Element</anno></c> removed. If <c><anno>Element</anno></c>
+ is not an element
+ in <c><anno>Set1</anno></c>, nothing is changed.</p>
+ </desc>
+ </func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Remove an element from a set</fsummary>
+ <fsummary>Remove an element from a set.</fsummary>
<desc>
<p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> removed. Assumes that <c><anno>Element</anno></c> is present
+ <c><anno>Element</anno></c> removed. Assumes that
+ <c><anno>Element</anno></c> is present
in <c><anno>Set1</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete_any" arity="2"/>
- <name name="del_element" arity="2"/>
- <fsummary>Remove a (possibly non-existing) element from a set</fsummary>
+ <fsummary>Remove a (possibly non-existing) element from a set.</fsummary>
<desc>
<p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> removed. If <c><anno>Element</anno></c> is not an element
+ <c><anno>Element</anno></c> removed. If <c><anno>Element</anno></c>
+ is not an element
in <c><anno>Set1</anno></c>, nothing is changed.</p>
</desc>
</func>
+
<func>
<name name="difference" arity="2"/>
- <name name="subtract" arity="2"/>
- <fsummary>Return the difference of two sets</fsummary>
+ <fsummary>Return the difference of two sets.</fsummary>
<desc>
- <p>Returns only the elements of <c><anno>Set1</anno></c> which are not also
- elements of <c><anno>Set2</anno></c>.</p>
+ <p>Returns only the elements of <c><anno>Set1</anno></c> that are not
+ also elements of <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="empty" arity="0"/>
- <name name="new" arity="0"/>
- <fsummary>Return an empty set</fsummary>
+ <fsummary>Return an empty set.</fsummary>
<desc>
<p>Returns a new empty set.</p>
</desc>
</func>
+
<func>
<name name="filter" arity="2"/>
- <fsummary>Filter set elements</fsummary>
+ <fsummary>Filter set elements.</fsummary>
<desc>
<p>Filters elements in <c><anno>Set1</anno></c> using predicate function
<c><anno>Pred</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="fold" arity="3"/>
- <fsummary>Fold over set elements</fsummary>
+ <fsummary>Fold over set elements.</fsummary>
<desc>
- <p>Folds <c><anno>Function</anno></c> over every element in <c><anno>Set</anno></c>
+ <p>Folds <c><anno>Function</anno></c> over every element in
+ <c><anno>Set</anno></c>
returning the final value of the accumulator.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list into a set</fsummary>
+ <fsummary>Convert a list into a set.</fsummary>
<desc>
<p>Returns a set of the elements in <c><anno>List</anno></c>, where
- <c><anno>List</anno></c> may be unordered and contain duplicates.</p>
+ <c><anno>List</anno></c> can be unordered and contain duplicates.</p>
</desc>
</func>
+
<func>
<name name="from_ordset" arity="1"/>
- <fsummary>Make a set from an ordset list</fsummary>
+ <fsummary>Make a set from an ordset list.</fsummary>
<desc>
- <p>Turns an ordered-set list <c><anno>List</anno></c> into a set. The list
- must not contain duplicates.</p>
+ <p>Turns an ordered-set list <c><anno>List</anno></c> into a set.
+ The list must not contain duplicates.</p>
</desc>
</func>
+
<func>
<name name="insert" arity="2"/>
- <fsummary>Add a new element to a set</fsummary>
+ <fsummary>Add a new element to a set.</fsummary>
<desc>
<p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> inserted. Assumes that <c><anno>Element</anno></c> is not
+ <c><anno>Element</anno></c> inserted. Assumes that
+ <c><anno>Element</anno></c> is not
present in <c><anno>Set1</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="2"/>
- <fsummary>Return the intersection of two sets</fsummary>
+ <name name="intersection" arity="1"/>
+ <fsummary>Return the intersection of a list of sets.</fsummary>
<desc>
- <p>Returns the intersection of <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
+ <p>Returns the intersection of the non-empty list of sets.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="1"/>
- <fsummary>Return the intersection of a list of sets</fsummary>
+ <name name="intersection" arity="2"/>
+ <fsummary>Return the intersection of two sets.</fsummary>
<desc>
- <p>Returns the intersection of the non-empty list of sets.</p>
+ <p>Returns the intersection of <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="is_disjoint" arity="2"/>
- <fsummary>Check whether two sets are disjoint</fsummary>
+ <fsummary>Check whether two sets are disjoint.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Set1</anno></c> and
<c><anno>Set2</anno></c> are disjoint (have no elements in common),
- and <c>false</c> otherwise.</p>
+ otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="is_element" arity="2"/>
+ <fsummary>Test for membership of a set.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
+ <c><anno>Set</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_empty" arity="1"/>
- <fsummary>Test for empty set</fsummary>
+ <fsummary>Test for empty set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Set</anno></c> is an empty set, and
- <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Set</anno></c> is an empty set,
+ otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_member" arity="2"/>
- <name name="is_element" arity="2"/>
- <fsummary>Test for membership of a set</fsummary>
+ <fsummary>Test for membership of a set.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
<c><anno>Set</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_set" arity="1"/>
- <fsummary>Test for a set</fsummary>
+ <fsummary>Test for a set.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> appears to be a set,
otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_subset" arity="2"/>
- <fsummary>Test for subset</fsummary>
+ <fsummary>Test for subset.</fsummary>
<desc>
<p>Returns <c>true</c> when every element of <c><anno>Set1</anno></c> is
also a member of <c><anno>Set2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="iterator" arity="1"/>
- <fsummary>Return an iterator for a set</fsummary>
+ <fsummary>Return an iterator for a set.</fsummary>
<desc>
- <p>Returns an iterator that can be used for traversing the
- entries of <c><anno>Set</anno></c>; see <c>next/1</c>. The implementation
+ <p>Returns an iterator that can be used for traversing the entries of
+ <c><anno>Set</anno></c>; see
+ <seealso marker="#next/1"><c>next/1</c></seealso>. The implementation
of this is very efficient; traversing the whole set using
- <c>next/1</c> is only slightly slower than getting the list
- of all elements using <c>to_list/1</c> and traversing that.
+ <c>next/1</c> is only slightly slower than getting the list of all
+ elements using <seealso marker="#to_list/1"><c>to_list/1</c></seealso>
+ and traversing that.
The main advantage of the iterator approach is that it does
not require the complete list of all elements to be built in
memory at one time.</p>
</desc>
</func>
+
<func>
<name name="iterator_from" arity="2"/>
- <fsummary>Return an iterator for a set starting from a specified element</fsummary>
+ <fsummary>Return an iterator for a set starting from a specified element.
+ </fsummary>
<desc>
<p>Returns an iterator that can be used for traversing the
- entries of <c><anno>Set</anno></c>; see <c>next/1</c>.
+ entries of <c><anno>Set</anno></c>; see
+ <seealso marker="#next/1"><c>next/1</c></seealso>.
The difference as compared to the iterator returned by
- <c>iterator/1</c> is that the first element greater than
+ <seealso marker="#iterator/1"><c>iterator/1</c></seealso>
+ is that the first element greater than
or equal to <c><anno>Element</anno></c> is returned.</p>
</desc>
</func>
+
<func>
<name name="largest" arity="1"/>
- <fsummary>Return largest element</fsummary>
+ <fsummary>Return largest element.</fsummary>
<desc>
<p>Returns the largest element in <c><anno>Set</anno></c>. Assumes that
- <c><anno>Set</anno></c> is nonempty.</p>
+ <c><anno>Set</anno></c> is not empty.</p>
</desc>
</func>
+
+ <func>
+ <name name="new" arity="0"/>
+ <fsummary>Return an empty set.</fsummary>
+ <desc>
+ <p>Returns a new empty set.</p>
+ </desc>
+ </func>
+
<func>
<name name="next" arity="1"/>
- <fsummary>Traverse a set with an iterator</fsummary>
+ <fsummary>Traverse a set with an iterator.</fsummary>
<desc>
- <p>Returns <c>{<anno>Element</anno>, <anno>Iter2</anno>}</c> where <c><anno>Element</anno></c> is the
- smallest element referred to by the iterator <c><anno>Iter1</anno></c>,
+ <p>Returns <c>{<anno>Element</anno>, <anno>Iter2</anno>}</c>, where
+ <c><anno>Element</anno></c> is the smallest element referred to by
+ iterator <c><anno>Iter1</anno></c>,
and <c><anno>Iter2</anno></c> is the new iterator to be used for
traversing the remaining elements, or the atom <c>none</c> if
no elements remain.</p>
</desc>
</func>
+
<func>
<name name="singleton" arity="1"/>
- <fsummary>Return a set with one element</fsummary>
+ <fsummary>Return a set with one element.</fsummary>
<desc>
- <p>Returns a set containing only the element <c><anno>Element</anno></c>.</p>
+ <p>Returns a set containing only element <c><anno>Element</anno></c>.
+ </p>
</desc>
</func>
+
<func>
<name name="size" arity="1"/>
- <fsummary>Return the number of elements in a set</fsummary>
+ <fsummary>Return the number of elements in a set.</fsummary>
<desc>
<p>Returns the number of elements in <c><anno>Set</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="smallest" arity="1"/>
- <fsummary>Return smallest element</fsummary>
+ <fsummary>Return smallest element.</fsummary>
<desc>
<p>Returns the smallest element in <c><anno>Set</anno></c>. Assumes that
- <c><anno>Set</anno></c> is nonempty.</p>
+ <c><anno>Set</anno></c> is not empty.</p>
</desc>
</func>
+
+ <func>
+ <name name="subtract" arity="2"/>
+ <fsummary>Return the difference of two sets.</fsummary>
+ <desc>
+ <p>Returns only the elements of <c><anno>Set1</anno></c> that are not
+ also elements of <c><anno>Set2</anno></c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="take_largest" arity="1"/>
- <fsummary>Extract largest element</fsummary>
+ <fsummary>Extract largest element.</fsummary>
<desc>
- <p>Returns <c>{<anno>Element</anno>, <anno>Set2</anno>}</c>, where <c><anno>Element</anno></c> is the
- largest element in <c><anno>Set1</anno></c>, and <c><anno>Set2</anno></c> is this set
- with <c><anno>Element</anno></c> deleted. Assumes that <c><anno>Set1</anno></c> is
- nonempty.</p>
+ <p>Returns <c>{<anno>Element</anno>, <anno>Set2</anno>}</c>, where
+ <c><anno>Element</anno></c> is the largest element in
+ <c><anno>Set1</anno></c>, and <c><anno>Set2</anno></c> is this set
+ with <c><anno>Element</anno></c> deleted. Assumes that
+ <c><anno>Set1</anno></c> is not empty.</p>
</desc>
</func>
+
<func>
<name name="take_smallest" arity="1"/>
- <fsummary>Extract smallest element</fsummary>
+ <fsummary>Extract smallest element.</fsummary>
<desc>
- <p>Returns <c>{<anno>Element</anno>, <anno>Set2</anno>}</c>, where <c><anno>Element</anno></c> is the
- smallest element in <c><anno>Set1</anno></c>, and <c><anno>Set2</anno></c> is this set
- with <c><anno>Element</anno></c> deleted. Assumes that <c><anno>Set1</anno></c> is
- nonempty.</p>
+ <p>Returns <c>{<anno>Element</anno>, <anno>Set2</anno>}</c>, where
+ <c><anno>Element</anno></c> is the smallest element in
+ <c><anno>Set1</anno></c>, and <c><anno>Set2</anno></c> is this set
+ with <c><anno>Element</anno></c> deleted. Assumes that
+ <c><anno>Set1</anno></c> is not empty.</p>
</desc>
</func>
+
<func>
<name name="to_list" arity="1"/>
- <fsummary>Convert a set into a list</fsummary>
+ <fsummary>Convert a set into a list.</fsummary>
<desc>
<p>Returns the elements of <c><anno>Set</anno></c> as a list.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="2"/>
- <fsummary>Return the union of two sets</fsummary>
+ <name name="union" arity="1"/>
+ <fsummary>Return the union of a list of sets.</fsummary>
<desc>
- <p>Returns the merged (union) set of <c><anno>Set1</anno></c> and
- <c><anno>Set2</anno></c>.</p>
+ <p>Returns the merged (union) set of the list of sets.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="1"/>
- <fsummary>Return the union of a list of sets</fsummary>
+ <name name="union" arity="2"/>
+ <fsummary>Return the union of two sets.</fsummary>
<desc>
- <p>Returns the merged (union) set of the list of sets.</p>
+ <p>Returns the merged (union) set of <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c>.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gb_trees">gb_trees(3)</seealso>,
- <seealso marker="ordsets">ordsets(3)</seealso>,
- <seealso marker="sets">sets(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="gb_trees"><c>gb_trees(3)</c></seealso>,
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso>,
+ <seealso marker="sets"><c>sets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gb_trees.xml b/lib/stdlib/doc/src/gb_trees.xml
index 5d1f27c014..9a49d66820 100644
--- a/lib/stdlib/doc/src/gb_trees.xml
+++ b/lib/stdlib/doc/src/gb_trees.xml
@@ -29,277 +29,320 @@
<rev></rev>
</header>
<module>gb_trees</module>
- <modulesummary>General Balanced Trees</modulesummary>
+ <modulesummary>General balanced trees.</modulesummary>
<description>
- <p>An efficient implementation of Prof. Arne Andersson's General
+ <p>This module provides Prof. Arne Andersson's General
Balanced Trees. These have no storage overhead compared to
- unbalanced binary trees, and their performance is in general
+ unbalanced binary trees, and their performance is
better than AVL trees.</p>
+
<p>This module considers two keys as different if and only if
they do not compare equal (<c>==</c>).</p>
</description>
<section>
- <title>Data structure</title>
- <p>Data structure:</p>
+ <title>Data Structure</title>
<code type="none">
-
-- {Size, Tree}, where `Tree' is composed of nodes of the form:
- - {Key, Value, Smaller, Bigger}, and the "empty tree" node:
- - nil.</code>
- <p>There is no attempt to balance trees after deletions. Since
+{Size, Tree}</code>
+
+ <p><c>Tree</c> is composed of nodes of the form <c>{Key, Value, Smaller,
+ Bigger}</c> and the "empty tree" node <c>nil</c>.</p>
+
+ <p>There is no attempt to balance trees after deletions. As
deletions do not increase the height of a tree, this should be OK.</p>
- <p>Original balance condition <em>h(T) &lt;= ceil(c * log(|T|))</em>
+
+ <p>The original balance condition <em>h(T) &lt;= ceil(c * log(|T|))</em>
has been changed to the similar (but not quite equivalent)
condition <em>2 ^ h(T) &lt;= |T| ^ c</em>. This should also be OK.</p>
- <p>Performance is comparable to the AVL trees in the Erlang book
- (and faster in general due to less overhead); the difference is
- that deletion works for these trees, but not for the book's
- trees. Behaviour is logarithmic (as it should be).</p>
</section>
<datatypes>
<datatype>
<name name="tree" n_vars="2"/>
- <desc><p>A GB tree.</p></desc>
+ <desc><p>A general balanced tree.</p></desc>
</datatype>
<datatype>
<name name="tree" n_vars="0"/>
</datatype>
<datatype>
<name name="iter" n_vars="2"/>
- <desc><p>A GB tree iterator.</p></desc>
+ <desc><p>A general balanced tree iterator.</p></desc>
</datatype>
<datatype>
<name name="iter" n_vars="0"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="balance" arity="1"/>
- <fsummary>Rebalance a tree</fsummary>
+ <fsummary>Rebalance a tree.</fsummary>
<desc>
- <p>Rebalances <c><anno>Tree1</anno></c>. Note that this is rarely necessary,
- but may be motivated when a large number of nodes have been
+ <p>Rebalances <c><anno>Tree1</anno></c>. Notice that this is
+ rarely necessary,
+ but can be motivated when many nodes have been
deleted from the tree without further insertions. Rebalancing
- could then be forced in order to minimise lookup times, since
- deletion only does not rebalance the tree.</p>
+ can then be forced to minimize lookup times, as
+ deletion does not rebalance the tree.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Remove a node from a tree</fsummary>
+ <fsummary>Remove a node from a tree.</fsummary>
<desc>
- <p>Removes the node with key <c><anno>Key</anno></c> from <c><anno>Tree1</anno></c>;
- returns new tree. Assumes that the key is present in the tree,
- crashes otherwise.</p>
+ <p>Removes the node with key <c><anno>Key</anno></c> from
+ <c><anno>Tree1</anno></c> and returns the new tree. Assumes that the
+ key is present in the tree, crashes otherwise.</p>
</desc>
</func>
+
<func>
<name name="delete_any" arity="2"/>
- <fsummary>Remove a (possibly non-existing) node from a tree</fsummary>
+ <fsummary>Remove a (possibly non-existing) node from a tree.</fsummary>
<desc>
- <p>Removes the node with key <c><anno>Key</anno></c> from <c><anno>Tree1</anno></c> if
- the key is present in the tree, otherwise does nothing;
- returns new tree.</p>
+ <p>Removes the node with key <c><anno>Key</anno></c> from
+ <c><anno>Tree1</anno></c> if
+ the key is present in the tree, otherwise does nothing.
+ Returns the new tree.</p>
</desc>
</func>
+
<func>
<name name="empty" arity="0"/>
- <fsummary>Return an empty tree</fsummary>
+ <fsummary>Return an empty tree.</fsummary>
<desc>
- <p>Returns a new empty tree</p>
+ <p>Returns a new empty tree.</p>
</desc>
</func>
+
<func>
<name name="enter" arity="3"/>
- <fsummary>Insert or update key with value in a tree</fsummary>
+ <fsummary>Insert or update key with value in a tree.</fsummary>
<desc>
- <p>Inserts <c><anno>Key</anno></c> with value <c><anno>Value</anno></c> into <c><anno>Tree1</anno></c> if
- the key is not present in the tree, otherwise updates
- <c><anno>Key</anno></c> to value <c><anno>Value</anno></c> in <c><anno>Tree1</anno></c>. Returns the
+ <p>Inserts <c><anno>Key</anno></c> with value <c><anno>Value</anno></c>
+ into <c><anno>Tree1</anno></c> if the key is not present in the tree,
+ otherwise updates <c><anno>Key</anno></c> to value
+ <c><anno>Value</anno></c> in <c><anno>Tree1</anno></c>. Returns the
new tree.</p>
</desc>
</func>
+
<func>
<name name="from_orddict" arity="1"/>
- <fsummary>Make a tree from an orddict</fsummary>
+ <fsummary>Make a tree from an orddict.</fsummary>
<desc>
- <p>Turns an ordered list <c><anno>List</anno></c> of key-value tuples into a
- tree. The list must not contain duplicate keys.</p>
+ <p>Turns an ordered list <c><anno>List</anno></c> of key-value tuples
+ into a tree. The list must not contain duplicate keys.</p>
</desc>
</func>
+
<func>
<name name="get" arity="2"/>
- <fsummary>Look up a key in a tree, if present</fsummary>
+ <fsummary>Look up a key in a tree, if present.</fsummary>
<desc>
- <p>Retrieves the value stored with <c><anno>Key</anno></c> in <c><anno>Tree</anno></c>.
+ <p>Retrieves the value stored with <c><anno>Key</anno></c> in
+ <c><anno>Tree</anno></c>.
Assumes that the key is present in the tree, crashes
otherwise.</p>
</desc>
</func>
+
<func>
<name name="insert" arity="3"/>
- <fsummary>Insert a new key and value in a tree</fsummary>
+ <fsummary>Insert a new key and value in a tree.</fsummary>
<desc>
- <p>Inserts <c><anno>Key</anno></c> with value <c><anno>Value</anno></c> into <c><anno>Tree1</anno></c>;
+ <p>Inserts <c><anno>Key</anno></c> with value <c><anno>Value</anno></c>
+ into <c><anno>Tree1</anno></c> and
returns the new tree. Assumes that the key is not present in
the tree, crashes otherwise.</p>
</desc>
</func>
+
<func>
<name name="is_defined" arity="2"/>
- <fsummary>Test for membership of a tree</fsummary>
+ <fsummary>Test for membership of a tree.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Key</anno></c> is present in <c><anno>Tree</anno></c>,
- otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Key</anno></c> is present in
+ <c><anno>Tree</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_empty" arity="1"/>
- <fsummary>Test for empty tree</fsummary>
+ <fsummary>Test for empty tree.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Tree</anno></c> is an empty tree, and
- <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Tree</anno></c> is an empty tree,
+ othwewise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="iterator" arity="1"/>
- <fsummary>Return an iterator for a tree</fsummary>
+ <fsummary>Return an iterator for a tree.</fsummary>
<desc>
<p>Returns an iterator that can be used for traversing the
- entries of <c><anno>Tree</anno></c>; see <c>next/1</c>. The implementation
+ entries of <c><anno>Tree</anno></c>; see
+ <seealso marker="#next/1"><c>next/1</c></seealso>. The implementation
of this is very efficient; traversing the whole tree using
<c>next/1</c> is only slightly slower than getting the list
- of all elements using <c>to_list/1</c> and traversing that.
+ of all elements using
+ <seealso marker="#to_list/1"><c>to_list/1</c></seealso>
+ and traversing that.
The main advantage of the iterator approach is that it does
not require the complete list of all elements to be built in
memory at one time.</p>
</desc>
</func>
+
<func>
<name name="iterator_from" arity="2"/>
- <fsummary>Return an iterator for a tree starting from specified key</fsummary>
+ <fsummary>Return an iterator for a tree starting from a specified key.
+ </fsummary>
<desc>
<p>Returns an iterator that can be used for traversing the
- entries of <c><anno>Tree</anno></c>; see <c>next/1</c>.
- The difference as compared to the iterator returned by
- <c>iterator/1</c> is that the first key greater than
- or equal to <c><anno>Key</anno></c> is returned.</p>
+ entries of <c><anno>Tree</anno></c>; see
+ <seealso marker="#next/1"><c>next/1</c></seealso>.
+ The difference as compared to the iterator returned by
+ <seealso marker="#iterator/1"><c>iterator/1</c></seealso>
+ is that the first key greater than
+ or equal to <c><anno>Key</anno></c> is returned.</p>
</desc>
</func>
+
<func>
<name name="keys" arity="1"/>
- <fsummary>Return a list of the keys in a tree</fsummary>
+ <fsummary>Return a list of the keys in a tree.</fsummary>
<desc>
<p>Returns the keys in <c><anno>Tree</anno></c> as an ordered list.</p>
</desc>
</func>
+
<func>
<name name="largest" arity="1"/>
- <fsummary>Return largest key and value</fsummary>
+ <fsummary>Return largest key and value.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>}</c>, where <c><anno>Key</anno></c> is the largest
- key in <c><anno>Tree</anno></c>, and <c><anno>Value</anno></c> is the value associated
- with this key. Assumes that the tree is nonempty.</p>
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>}</c>, where
+ <c><anno>Key</anno></c> is the largest
+ key in <c><anno>Tree</anno></c>, and <c><anno>Value</anno></c> is
+ the value associated
+ with this key. Assumes that the tree is not empty.</p>
</desc>
</func>
+
<func>
<name name="lookup" arity="2"/>
- <fsummary>Look up a key in a tree</fsummary>
+ <fsummary>Look up a key in a tree.</fsummary>
<desc>
- <p>Looks up <c><anno>Key</anno></c> in <c><anno>Tree</anno></c>; returns
- <c>{value, <anno>Value</anno>}</c>, or <c>none</c> if <c><anno>Key</anno></c> is not
- present.</p>
+ <p>Looks up <c><anno>Key</anno></c> in <c><anno>Tree</anno></c>.
+ Returns <c>{value, <anno>Value</anno>}</c>, or <c>none</c> if
+ <c><anno>Key</anno></c> is not present.</p>
</desc>
</func>
+
<func>
<name name="map" arity="2"/>
- <fsummary>Return largest key and value</fsummary>
- <desc><p>Maps the function F(<anno>K</anno>, <anno>V1</anno>) -> <anno>V2</anno> to all key-value pairs
- of the tree <c><anno>Tree1</anno></c> and returns a new tree <c><anno>Tree2</anno></c> with the same set of keys
- as <c><anno>Tree1</anno></c> and the new set of values <c><anno>V2</anno></c>.</p>
+ <fsummary>Return largest key and value.</fsummary>
+ <desc>
+ <p>Maps function F(<anno>K</anno>, <anno>V1</anno>) -> <anno>V2</anno>
+ to all key-value pairs of tree <c><anno>Tree1</anno></c>. Returns a
+ new tree <c><anno>Tree2</anno></c> with the same set of keys as
+ <c><anno>Tree1</anno></c> and the new set of values
+ <c><anno>V2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="next" arity="1"/>
- <fsummary>Traverse a tree with an iterator</fsummary>
+ <fsummary>Traverse a tree with an iterator.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>, <anno>Iter2</anno>}</c> where <c><anno>Key</anno></c> is the
- smallest key referred to by the iterator <c><anno>Iter1</anno></c>, and
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>,
+ <anno>Iter2</anno>}</c>, where <c><anno>Key</anno></c> is the
+ smallest key referred to by iterator <c><anno>Iter1</anno></c>, and
<c><anno>Iter2</anno></c> is the new iterator to be used for
traversing the remaining nodes, or the atom <c>none</c> if no
nodes remain.</p>
</desc>
</func>
+
<func>
<name name="size" arity="1"/>
- <fsummary>Return the number of nodes in a tree</fsummary>
+ <fsummary>Return the number of nodes in a tree.</fsummary>
<desc>
<p>Returns the number of nodes in <c><anno>Tree</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="smallest" arity="1"/>
- <fsummary>Return smallest key and value</fsummary>
+ <fsummary>Return smallest key and value.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>}</c>, where <c><anno>Key</anno></c> is the smallest
- key in <c><anno>Tree</anno></c>, and <c><anno>Value</anno></c> is the value associated
- with this key. Assumes that the tree is nonempty.</p>
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>}</c>, where
+ <c><anno>Key</anno></c> is the smallest
+ key in <c><anno>Tree</anno></c>, and <c><anno>Value</anno></c> is
+ the value associated
+ with this key. Assumes that the tree is not empty.</p>
</desc>
</func>
+
<func>
<name name="take_largest" arity="1"/>
- <fsummary>Extract largest key and value</fsummary>
+ <fsummary>Extract largest key and value.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>, <anno>Tree2</anno>}</c>, where <c><anno>Key</anno></c> is the
- largest key in <c><anno>Tree1</anno></c>, <c><anno>Value</anno></c> is the value
- associated with this key, and <c><anno>Tree2</anno></c> is this tree with
- the corresponding node deleted. Assumes that the tree is
- nonempty.</p>
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>,
+ <anno>Tree2</anno>}</c>, where <c><anno>Key</anno></c> is the
+ largest key in <c><anno>Tree1</anno></c>, <c><anno>Value</anno></c>
+ is the value associated with this key, and <c><anno>Tree2</anno></c>
+ is this tree with the corresponding node deleted. Assumes that the
+ tree is not empty.</p>
</desc>
</func>
+
<func>
<name name="take_smallest" arity="1"/>
- <fsummary>Extract smallest key and value</fsummary>
+ <fsummary>Extract smallest key and value.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>, <anno>Tree2</anno>}</c>, where <c><anno>Key</anno></c> is the
- smallest key in <c><anno>Tree1</anno></c>, <c><anno>Value</anno></c> is the value
- associated with this key, and <c><anno>Tree2</anno></c> is this tree with
- the corresponding node deleted. Assumes that the tree is
- nonempty.</p>
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>,
+ <anno>Tree2</anno>}</c>, where <c><anno>Key</anno></c> is the
+ smallest key in <c><anno>Tree1</anno></c>, <c><anno>Value</anno></c>
+ is the value associated with this key, and <c><anno>Tree2</anno></c>
+ is this tree with the corresponding node deleted. Assumes that the
+ tree is not empty.</p>
</desc>
</func>
+
<func>
<name name="to_list" arity="1"/>
- <fsummary>Convert a tree into a list</fsummary>
+ <fsummary>Convert a tree into a list.</fsummary>
<desc>
<p>Converts a tree into an ordered list of key-value tuples.</p>
</desc>
</func>
+
<func>
<name name="update" arity="3"/>
- <fsummary>Update a key to new value in a tree</fsummary>
+ <fsummary>Update a key to new value in a tree.</fsummary>
<desc>
- <p>Updates <c><anno>Key</anno></c> to value <c><anno>Value</anno></c> in <c><anno>Tree1</anno></c>;
- returns the new tree. Assumes that the key is present in the
- tree.</p>
+ <p>Updates <c><anno>Key</anno></c> to value <c><anno>Value</anno></c>
+ in <c><anno>Tree1</anno></c> and
+ returns the new tree. Assumes that the key is present in the tree.</p>
</desc>
</func>
+
<func>
<name name="values" arity="1"/>
- <fsummary>Return a list of the values in a tree</fsummary>
+ <fsummary>Return a list of the values in a tree.</fsummary>
<desc>
- <p>Returns the values in <c><anno>Tree</anno></c> as an ordered list, sorted
- by their corresponding keys. Duplicates are not removed.</p>
+ <p>Returns the values in <c><anno>Tree</anno></c> as an ordered list,
+ sorted by their corresponding keys. Duplicates are not removed.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gb_sets">gb_sets(3)</seealso>,
- <seealso marker="dict">dict(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="dict"><c>dict(3)</c></seealso>,
+ <seealso marker="gb_sets"><c>gb_sets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gen_event.xml b/lib/stdlib/doc/src/gen_event.xml
index c4bab45781..c24542002a 100644
--- a/lib/stdlib/doc/src/gen_event.xml
+++ b/lib/stdlib/doc/src/gen_event.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,19 +29,23 @@
<rev></rev>
</header>
<module>gen_event</module>
- <modulesummary>Generic Event Handling Behaviour</modulesummary>
+ <modulesummary>Generic event handling behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing event handling functionality.
- The OTP event handling model consists of a generic event manager
- process with an arbitrary number of event handlers which are added and
- deleted dynamically.</p>
- <p>An event manager implemented using this module will have a standard
- set of interface functions and include functionality for tracing and
- error reporting. It will also fit into an OTP supervision tree.
- Refer to <em>OTP Design Principles</em> for more information.</p>
+ <p>This behavior module provides event handling functionality. It
+ consists of a generic event manager process with any number of
+ event handlers that are added and deleted dynamically.</p>
+
+ <p>An event manager implemented using this module has a standard
+ set of interface functions and includes functionality for tracing and
+ error reporting. It also fits into an OTP supervision tree. For more
+ information, see
+ <seealso marker="doc/design_principles:events">OTP Design Principles</seealso>.
+ </p>
+
<p>Each event handler is implemented as a callback module exporting
- a pre-defined set of functions. The relationship between the behaviour
- functions and the callback functions can be illustrated as follows:</p>
+ a predefined set of functions. The relationship between the behavior
+ functions and the callback functions is as follows:</p>
+
<pre>
gen_event module Callback module
---------------- ---------------
@@ -69,39 +73,46 @@ gen_event:which_handlers -----> -
gen_event:stop -----> Module:terminate/2
- -----> Module:code_change/3</pre>
- <p>Since each event handler is one callback module, an event manager
- will have several callback modules which are added and deleted
- dynamically. Therefore <c>gen_event</c> is more tolerant of callback
- module errors than the other behaviours. If a callback function for
+
+ <p>As each event handler is one callback module, an event manager
+ has many callback modules that are added and deleted
+ dynamically. <c>gen_event</c> is therefore more tolerant of callback
+ module errors than the other behaviors. If a callback function for
an installed event handler fails with <c>Reason</c>, or returns a
- bad value <c>Term</c>, the event manager will not fail. It will delete
- the event handler by calling the callback function
- <c>Module:terminate/2</c> (see below), giving as argument
+ bad value <c>Term</c>, the event manager does not fail. It deletes
+ the event handler by calling callback function
+ <seealso marker="#Module:terminate/2"><c>Module:terminate/2</c></seealso>,
+ giving as argument
<c>{error,{'EXIT',Reason}}</c> or <c>{error,Term}</c>, respectively.
- No other event handler will be affected.</p>
- <p>A gen_event process handles system messages as documented in
- <seealso marker="sys">sys(3)</seealso>. The <c>sys</c> module
+ No other event handler is affected.</p>
+
+ <p>A <c>gen_event</c> process handles system messages as described in
+ <seealso marker="sys"><c>sys(3)</c></seealso>. The <c>sys</c> module
can be used for debugging an event manager.</p>
- <p>Note that an event manager <em>does</em> trap exit signals
+
+ <p>Notice that an event manager <em>does</em> trap exit signals
automatically.</p>
- <p>The gen_event process can go into hibernation
- (see <seealso marker="erts:erlang#erlang:hibernate/3">erlang(3)</seealso>) if a callback
- function in a handler module specifies <c>'hibernate'</c> in its return value.
- This might be useful if the server is expected to be idle for a long
- time. However this feature should be used with care as hibernation
- implies at least two garbage collections (when hibernating and
- shortly after waking up) and is not something you'd want to do
- between each event handled by a busy event manager.</p>
-
- <p>It's also worth noting that when multiple event handlers are
- invoked, it's sufficient that one single event handler returns a
- <c>'hibernate'</c> request for the whole event manager to go into
- hibernation.</p>
+
+ <p>The <c>gen_event</c> process can go into hibernation
+ (see <seealso marker="erts:erlang#hibernate/3">
+ <c>erlang:hibernate/3</c></seealso>) if a callback function in
+ a handler module specifies <c>hibernate</c> in its return value.
+ This can be useful if the server is expected to be idle for a long
+ time. However, use this feature with care, as hibernation
+ implies at least two garbage collections (when hibernating and
+ shortly after waking up) and is not something you want to do
+ between each event handled by a busy event manager.</p>
+
+ <p>Notice that when multiple event handlers are
+ invoked, it is sufficient that one single event handler returns a
+ <c>hibernate</c> request for the whole event manager to go into
+ hibernation.</p>
<p>Unless otherwise stated, all functions in this module fail if
the specified event manager does not exist or if bad arguments are
- given.</p>
+ specified.</p>
</description>
+
<datatypes>
<datatype>
<name name="handler"/>
@@ -116,66 +127,9 @@ gen_event:stop -----> Module:terminate/2
<name name="del_handler_ret"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name>start_link() -> Result</name>
- <name>start_link(EventMgrName) -> Result</name>
- <fsummary>Create a generic event manager process in a supervision tree.</fsummary>
- <type>
- <v>EventMgrName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Result = {ok,Pid} | {error,{already_started,Pid}}</v>
- <v>&nbsp;Pid = pid()</v>
- </type>
- <desc>
- <p>Creates an event manager process as part of a supervision
- tree. The function should be called, directly or indirectly,
- by the supervisor. It will, among other things, ensure that
- the event manager is linked to the supervisor.</p>
- <p>If <c>EventMgrName={local,Name}</c>, the event manager is
- registered locally as <c>Name</c> using <c>register/2</c>.
- If <c>EventMgrName={global,GlobalName}</c>, the event manager is
- registered globally as <c>GlobalName</c> using
- <c>global:register_name/2</c>. If no name is provided,
- the event manager is not registered.
- If <c>EventMgrName={via,Module,ViaName}</c>, the event manager will
- register with the registry represented by <c>Module</c>.
- The <c>Module</c> callback should export the functions
- <c>register_name/2</c>, <c>unregister_name/1</c>,
- <c>whereis_name/1</c> and <c>send/2</c>, which should behave like the
- corresponding functions in <c>global</c>. Thus,
- <c>{via,global,GlobalName}</c> is a valid reference.</p>
- <p>If the event manager is successfully created the function
- returns <c>{ok,Pid}</c>, where <c>Pid</c> is the pid of
- the event manager. If there already exists a process with
- the specified <c>EventMgrName</c> the function returns
- <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
- the pid of that process.</p>
- </desc>
- </func>
- <func>
- <name>start() -> Result</name>
- <name>start(EventMgrName) -> Result</name>
- <fsummary>Create a stand-alone event manager process.</fsummary>
- <type>
- <v>EventMgrName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Result = {ok,Pid} | {error,{already_started,Pid}}</v>
- <v>&nbsp;Pid = pid()</v>
- </type>
- <desc>
- <p>Creates a stand-alone event manager process, i.e. an event
- manager which is not part of a supervision tree and thus has
- no supervisor.</p>
- <p>See <c>start_link/0,1</c> for a description of arguments and
- return values.</p>
- </desc>
- </func>
- <func>
<name>add_handler(EventMgrRef, Handler, Args) -> Result</name>
<fsummary>Add an event handler to a generic event manager.</fsummary>
<type>
@@ -191,26 +145,27 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Adds a new event handler to the event manager <c>EventMgrRef</c>.
- The event manager will call <c>Module:init/1</c> to initiate
- the event handler and its internal state.</p>
- <p><c>EventMgrRef</c> can be:</p>
+ <p>Adds a new event handler to event manager <c>EventMgrRef</c>.
+ The event manager calls
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ to initiate the event handler and its internal state.</p>
+ <p><c>EventMgrRef</c> can be any of the following:</p>
<list type="bulleted">
- <item>the pid,</item>
- <item><c>Name</c>, if the event manager is locally registered,</item>
+ <item>The pid</item>
+ <item><c>Name</c>, if the event manager is locally registered</item>
<item><c>{Name,Node}</c>, if the event manager is locally
- registered at another node, or</item>
+ registered at another node</item>
<item><c>{global,GlobalName}</c>, if the event manager is globally
- registered.</item>
- <item><c>{via,Module,ViaName}</c>, if the event manager is registered
- through an alternative process registry.</item>
+ registered</item>
+ <item><c>{via,Module,ViaName}</c>, if the event manager is registered
+ through an alternative process registry</item>
</list>
<p><c>Handler</c> is the name of the callback module <c>Module</c> or
a tuple <c>{Module,Id}</c>, where <c>Id</c> is any term.
The <c>{Module,Id}</c> representation makes it possible to
- identify a specific event handler when there are several event
- handlers using the same callback module.</p>
- <p><c>Args</c> is an arbitrary term which is passed as the argument
+ identify a specific event handler when many event handlers
+ use the same callback module.</p>
+ <p><c>Args</c> is any term that is passed as the argument
to <c>Module:init/1</c>.</p>
<p>If <c>Module:init/1</c> returns a correct value indicating
successful completion, the event manager adds the event
@@ -221,9 +176,11 @@ gen_event:stop -----> Module:terminate/2
<c>{error,Reason}</c>, respectively.</p>
</desc>
</func>
+
<func>
<name>add_sup_handler(EventMgrRef, Handler, Args) -> Result</name>
- <fsummary>Add a supervised event handler to a generic event manager.</fsummary>
+ <fsummary>Add a supervised event handler to a generic event manager.
+ </fsummary>
<type>
<v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
| {via,Module,ViaName} | pid()</v>
@@ -237,63 +194,52 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Adds a new event handler in the same way as <c>add_handler/3</c>
- but will also supervise the connection between the event handler
+ <p>Adds a new event handler in the same way as
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>,
+ but also supervises the connection between the event handler
and the calling process.</p>
<list type="bulleted">
<item>If the calling process later terminates with <c>Reason</c>,
- the event manager will delete the event handler by calling
- <c>Module:terminate/2</c> with <c>{stop,Reason}</c> as argument.</item>
+ the event manager deletes the event handler by calling
+ <seealso marker="#Module:terminate/2">
+ <c>Module:terminate/2</c></seealso>
+ with <c>{stop,Reason}</c> as argument.
+ </item>
<item>
- <p>If the event handler later is deleted, the event manager
+ <p>If the event handler is deleted later, the event manager
sends a message<c>{gen_event_EXIT,Handler,Reason}</c> to
the calling process. <c>Reason</c> is one of the following:</p>
<list type="bulleted">
- <item><c>normal</c>, if the event handler has been removed due to a
- call to <c>delete_handler/3</c>, or <c>remove_handler</c>
- has been returned by a callback function (see below).</item>
- <item><c>shutdown</c>, if the event handler has been removed
- because the event manager is terminating.</item>
- <item><c>{swapped,NewHandler,Pid}</c>, if the process <c>Pid</c>
- has replaced the event handler with another event handler
- <c>NewHandler</c> using a call to <c>swap_handler/3</c> or
- <c>swap_sup_handler/3</c>.</item>
- <item>a term, if the event handler is removed due to an error.
- Which term depends on the error.</item>
+ <item>
+ <p><c>normal</c>, if the event handler has been removed
+ because of a
+ call to <c>delete_handler/3</c>, or <c>remove_handler</c>
+ has been returned by a callback function (see below).</p>
+ </item>
+ <item>
+ <p><c>shutdown</c>, if the event handler has been removed
+ because the event manager is terminating.</p>
+ </item>
+ <item>
+ <p><c>{swapped,NewHandler,Pid}</c>, if the process <c>Pid</c>
+ has replaced the event handler with another event handler
+ <c>NewHandler</c> using a call to
+ <seealso marker="#swap_handler/3">
+ <c>swap_handler/3</c></seealso> or
+ <seealso marker="#swap_sup_handler/3">
+ <c>swap_sup_handler/3</c></seealso>.</p>
+ </item>
+ <item>
+ <p>A term, if the event handler is removed because of an error.
+ Which term depends on the error.</p></item>
</list>
</item>
</list>
- <p>See <c>add_handler/3</c> for a description of the arguments
- and return values.</p>
- </desc>
- </func>
- <func>
- <name>notify(EventMgrRef, Event) -> ok</name>
- <name>sync_notify(EventMgrRef, Event) -> ok</name>
- <fsummary>Notify an event manager about an event.</fsummary>
- <type>
- <v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>&nbsp;Name = Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Event = term()</v>
- </type>
- <desc>
- <p>Sends an event notification to the event manager
- <c>EventMgrRef</c>. The event manager will call
- <c>Module:handle_event/2</c> for each installed event handler to
- handle the event.</p>
- <p><c>notify</c> is asynchronous and will return immediately after
- the event notification has been sent. <c>sync_notify</c> is
- synchronous in the sense that it will return <c>ok</c> after
- the event has been handled by all event handlers.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>.</p>
- <p><c>Event</c> is an arbitrary term which is passed as one of
- the arguments to <c>Module:handle_event/2</c>.</p>
- <p><c>notify</c> will not fail even if the specified event manager
- does not exist, unless it is specified as <c>Name</c>.</p>
+ <p>For a description of the arguments and return values, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>call(EventMgrRef, Handler, Request) -> Result</name>
<name>call(EventMgrRef, Handler, Request, Timeout) -> Result</name>
@@ -314,18 +260,18 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Makes a synchronous call to the event handler <c>Handler</c>
- installed in the event manager <c>EventMgrRef</c> by sending a
- request and waiting until a reply arrives or a timeout occurs.
- The event manager will call <c>Module:handle_call/2</c> to handle
- the request.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>
- and <c>Handler</c>.</p>
- <p><c>Request</c> is an arbitrary term which is passed as one of
+ <p>Makes a synchronous call to event handler <c>Handler</c>
+ installed in event manager <c>EventMgrRef</c> by sending a
+ request and waiting until a reply arrives or a time-out occurs.
+ The event manager calls <seealso marker="#Module:handle_call/2">
+ <c>Module:handle_call/2</c></seealso> to handle the request.</p>
+ <p>For a description of <c>EventMgrRef</c> and <c>Handler</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
+ <p><c>Request</c> is any term that is passed as one of
the arguments to <c>Module:handle_call/2</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which specifies
+ <p><c>Timeout</c> is an integer greater than zero that specifies
how many milliseconds to wait for a reply, or the atom
- <c>infinity</c> to wait indefinitely. Default value is 5000.
+ <c>infinity</c> to wait indefinitely. Defaults to 5000.
If no reply is received within the specified time, the function
call fails.</p>
<p>The return value <c>Reply</c> is defined in the return value of
@@ -337,7 +283,8 @@ gen_event:stop -----> Module:terminate/2
respectively.</p>
</desc>
</func>
- <func>
+
+ <func>
<name>delete_handler(EventMgrRef, Handler, Args) -> Result</name>
<fsummary>Delete an event handler from a generic event manager.</fsummary>
<type>
@@ -353,12 +300,14 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Deletes an event handler from the event manager
- <c>EventMgrRef</c>. The event manager will call
- <c>Module:terminate/2</c> to terminate the event handler.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>
- and <c>Handler</c>.</p>
- <p><c>Args</c> is an arbitrary term which is passed as one of
+ <p>Deletes an event handler from event manager
+ <c>EventMgrRef</c>. The event manager calls
+ <seealso marker="#Module:terminate/2">
+ <c>Module:terminate/2</c></seealso> to terminate the event
+ handler.</p>
+ <p>For a description of <c>EventMgrRef</c> and <c>Handler</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
+ <p><c>Args</c> is any term that is passed as one of
the arguments to <c>Module:terminate/2</c>.</p>
<p>The return value is the return value of <c>Module:terminate/2</c>.
If the specified event handler is not installed, the function
@@ -367,6 +316,148 @@ gen_event:stop -----> Module:terminate/2
<c>{'EXIT',Reason}</c>.</p>
</desc>
</func>
+
+ <func>
+ <name>notify(EventMgrRef, Event) -> ok</name>
+ <name>sync_notify(EventMgrRef, Event) -> ok</name>
+ <fsummary>Notify an event manager about an event.</fsummary>
+ <type>
+ <v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
+ | {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Name = Node = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Event = term()</v>
+ </type>
+ <desc>
+ <p>Sends an event notification to event manager
+ <c>EventMgrRef</c>. The event manager calls
+ <seealso marker="#Module:handle_event/2">
+ <c>Module:handle_event/2</c></seealso>
+ for each installed event handler to handle the event.</p>
+ <p><c>notify/2</c> is asynchronous and returns immediately after
+ the event notification has been sent. <c>sync_notify/2</c> is
+ synchronous in the sense that it returns <c>ok</c> after
+ the event has been handled by all event handlers.</p>
+ <p>For a description of <c>EventMgrRef</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
+ <p><c>Event</c> is any term that is passed as one of
+ the arguments to <seealso marker="#Module:handle_event/2">
+ <c>Module:handle_event/2</c></seealso>.</p>
+ <p><c>notify/1</c> does not fail even if the specified event manager
+ does not exist, unless it is specified as <c>Name</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start() -> Result</name>
+ <name>start(EventMgrName) -> Result</name>
+ <fsummary>Create a stand-alone event manager process.</fsummary>
+ <type>
+ <v>EventMgrName = {local,Name} | {global,GlobalName}
+ | {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Result = {ok,Pid} | {error,{already_started,Pid}}</v>
+ <v>&nbsp;Pid = pid()</v>
+ </type>
+ <desc>
+ <p>Creates a stand-alone event manager process, that is, an event
+ manager that is not part of a supervision tree and thus has
+ no supervisor.</p>
+ <p>For a description of the arguments and return values, see
+ <seealso marker="#start_link/0"><c>start_link/0,1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start_link() -> Result</name>
+ <name>start_link(EventMgrName) -> Result</name>
+ <fsummary>Create a generic event manager process in a supervision tree.
+ </fsummary>
+ <type>
+ <v>EventMgrName = {local,Name} | {global,GlobalName}
+ | {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Result = {ok,Pid} | {error,{already_started,Pid}}</v>
+ <v>&nbsp;Pid = pid()</v>
+ </type>
+ <desc>
+ <p>Creates an event manager process as part of a supervision
+ tree. The function is to be called, directly or indirectly,
+ by the supervisor. For example, it ensures that
+ the event manager is linked to the supervisor.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>EventMgrName={local,Name}</c>, the event manager is
+ registered locally as <c>Name</c> using <c>register/2</c>.</p>
+ </item>
+ <item>
+ <p>If <c>EventMgrName={global,GlobalName}</c>, the event manager is
+ registered globally as <c>GlobalName</c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso>.
+ If no name is provided, the event manager is not registered.</p>
+ </item>
+ <item>
+ <p>If <c>EventMgrName={via,Module,ViaName}</c>, the event manager
+ registers with the registry represented by <c>Module</c>.
+ The <c>Module</c> callback is to export the functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>,
+ <c>whereis_name/1</c>, and <c>send/2</c>, which are to behave
+ as the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p>If the event manager is successfully created, the function
+ returns <c>{ok,Pid}</c>, where <c>Pid</c> is the pid of
+ the event manager. If a process with the specified
+ <c>EventMgrName</c> exists already, the function returns
+ <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
+ the pid of that process.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>stop(EventMgrRef) -> ok</name>
+ <name>stop(EventMgrRef, Reason, Timeout) -> ok</name>
+ <fsummary>Terminate a generic event manager.</fsummary>
+ <type>
+ <v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
+ | {via,Module,ViaName} | pid()</v>
+ <v>Name = Node = atom()</v>
+ <v>GlobalName = ViaName = term()</v>
+ <v>Reason = term()</v>
+ <v>Timeout = int()>0 | infinity</v>
+ </type>
+ <desc>
+ <p>Orders event manager <c>EventMgrRef</c> to exit with
+ the specifies <c>Reason</c> and waits for it to
+ terminate. Before terminating, <c>gen_event</c> calls
+ <seealso marker="#Module:terminate/2">
+ <c>Module:terminate(stop,...)</c></seealso>
+ for each installed event handler.</p>
+ <p>The function returns <c>ok</c> if the event manager terminates
+ with the expected reason. Any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c> causes an
+ error report to be issued using
+ <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.
+ The default <c>Reason</c> is <c>normal</c>.</p>
+ <p><c>Timeout</c> is an integer greater than zero that
+ specifies how many milliseconds to wait for the event manager to
+ terminate, or the atom <c>infinity</c> to wait
+ indefinitely. Defaults to <c>infinity</c>. If the
+ event manager has not terminated within the specified time, a
+ <c>timeout</c> exception is raised.</p>
+ <p>If the process does not exist, a <c>noproc</c> exception
+ is raised.</p>
+ <p>For a description of <c>EventMgrRef</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
+ </desc>
+ </func>
+
<func>
<name>swap_handler(EventMgrRef, {Handler1,Args1}, {Handler2,Args2}) -> Result</name>
<fsummary>Replace an event handler in a generic event manager.</fsummary>
@@ -385,34 +476,35 @@ gen_event:stop -----> Module:terminate/2
</type>
<desc>
<p>Replaces an old event handler with a new event handler in
- the event manager <c>EventMgrRef</c>.</p>
- <p>See <c>add_handler/3</c> for a description of the arguments.</p>
+ event manager <c>EventMgrRef</c>.</p>
+ <p>For a description of the arguments, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
<p>First the old event handler <c>Handler1</c> is deleted.
The event manager calls <c>Module1:terminate(Args1, ...)</c>,
where <c>Module1</c> is the callback module of <c>Handler1</c>,
and collects the return value.</p>
<p>Then the new event handler <c>Handler2</c> is added and initiated
by calling <c>Module2:init({Args2,Term})</c>, where <c>Module2</c>
- is the callback module of <c>Handler2</c> and <c>Term</c>
+ is the callback module of <c>Handler2</c> and <c>Term</c> is
the return value of <c>Module1:terminate/2</c>. This makes it
possible to transfer information from <c>Handler1</c> to
<c>Handler2</c>.</p>
- <p>The new handler will be added even if the the specified old event
- handler is not installed in which case <c>Term=error</c>, or if
- <c>Module1:terminate/2</c> fails with <c>Reason</c> in which case
- <c>Term={'EXIT',Reason}</c>.
- The old handler will be deleted even if <c>Module2:init/1</c>
- fails.</p>
+ <p>The new handler is added even if the the specified old event
+ handler is not installed, in which case <c>Term=error</c>, or if
+ <c>Module1:terminate/2</c> fails with <c>Reason</c>,
+ in which case <c>Term={'EXIT',Reason}</c>.
+ The old handler is deleted even if <c>Module2:init/1</c> fails.</p>
<p>If there was a supervised connection between <c>Handler1</c> and
- a process <c>Pid</c>, there will be a supervised connection
+ a process <c>Pid</c>, there is a supervised connection
between <c>Handler2</c> and <c>Pid</c> instead.</p>
<p>If <c>Module2:init/1</c> returns a correct value, this function
returns <c>ok</c>. If <c>Module2:init/1</c> fails with
- <c>Reason</c> or returns an unexpected value <c>Term</c>, this
+ <c>Reason</c> or returns an unexpected value <c>Term</c>,
this function returns <c>{error,{'EXIT',Reason}}</c> or
<c>{error,Term}</c>, respectively.</p>
</desc>
</func>
+
<func>
<name>swap_sup_handler(EventMgrRef, {Handler1,Args1}, {Handler2,Args2}) -> Result</name>
<fsummary>Replace an event handler in a generic event manager.</fsummary>
@@ -430,16 +522,18 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Replaces an event handler in the event manager <c>EventMgrRef</c>
- in the same way as <c>swap_handler/3</c> but will also supervise
+ <p>Replaces an event handler in event manager <c>EventMgrRef</c>
+ in the same way as <c>swap_handler/3</c>, but also supervises
the connection between <c>Handler2</c> and the calling process.</p>
- <p>See <c>swap_handler/3</c> for a description of the arguments
- and return values.</p>
+ <p>For a description of the arguments and return values, see
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>which_handlers(EventMgrRef) -> [Handler]</name>
- <fsummary>Return all event handlers installed in a generic event manager.</fsummary>
+ <fsummary>Return all event handlers installed in a generic event manager.
+ </fsummary>
<type>
<v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
| {via,Module,ViaName} | pid()</v>
@@ -450,132 +544,106 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;Id = term()</v>
</type>
<desc>
- <p>Returns a list of all event handlers installed in the event
+ <p>Returns a list of all event handlers installed in event
manager <c>EventMgrRef</c>.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>
- and <c>Handler</c>.</p>
- </desc>
- </func>
- <func>
- <name>stop(EventMgrRef) -> ok</name>
- <name>stop(EventMgrRef, Reason, Timeout) -> ok</name>
- <fsummary>Terminate a generic event manager.</fsummary>
- <type>
- <v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>Name = Node = atom()</v>
- <v>GlobalName = ViaName = term()</v>
- <v>Reason = term()</v>
- <v>Timeout = int()>0 | infinity</v>
- </type>
- <desc>
- <p>Orders the event manager <c>EventMgrRef</c> to exit with
- the given <c>Reason</c> and waits for it to
- terminate. Before terminating, the gen_event will call
- <seealso marker="#Module:terminate/2">Module:terminate(stop,...)</seealso>
- for each installed event handler.</p>
- <p>The function returns <c>ok</c> if the event manager terminates
- with the expected reason. Any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> will cause an
- error report to be issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.
- The default <c>Reason</c> is <c>normal</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
- specifies how many milliseconds to wait for the event manager to
- terminate, or the atom <c>infinity</c> to wait
- indefinitely. The default value is <c>infinity</c>. If the
- event manager has not terminated within the specified time, a
- <c>timeout</c> exception is raised.</p>
- <p>If the process does not exist, a <c>noproc</c> exception
- is raised.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>.</p>
+ <p>For a description of <c>EventMgrRef</c> and <c>Handler</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
</desc>
</func>
</funcs>
<section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions should be exported from a <c>gen_event</c>
+ <title>Callback Functions</title>
+ <p>The following functions are to be exported from a <c>gen_event</c>
callback module.</p>
</section>
+
<funcs>
<func>
- <name>Module:init(InitArgs) -> {ok,State} | {ok,State,hibernate} | {error,Reason}</name>
- <fsummary>Initialize an event handler.</fsummary>
+ <name>Module:code_change(OldVsn, State, Extra) -> {ok, NewState}</name>
+ <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
<type>
- <v>InitArgs = Args | {Args,Term}</v>
- <v>&nbsp;Args = Term = term()</v>
- <v>State = term()</v>
- <v>Reason = term()</v>
+ <v>OldVsn = Vsn | {down, Vsn}</v>
+ <v>&nbsp;&nbsp;Vsn = term()</v>
+ <v>State = NewState = term()</v>
+ <v>Extra = term()</v>
</type>
<desc>
- <p>Whenever a new event handler is added to an event manager,
- this function is called to initialize the event handler.</p>
- <p>If the event handler is added due to a call to
- <c>gen_event:add_handler/3</c> or
- <c>gen_event:add_sup_handler/3</c>, <c>InitArgs</c> is
- the <c>Args</c> argument of these functions.</p>
- <p>If the event handler is replacing another event handler due to
- a call to <c>gen_event:swap_handler/3</c> or
- <c>gen_event:swap_sup_handler/3</c>, or due to a <c>swap</c>
- return tuple from one of the other callback functions,
- <c>InitArgs</c> is a tuple <c>{Args,Term}</c> where <c>Args</c> is
- the argument provided in the function call/return tuple and
- <c>Term</c> is the result of terminating the old event handler,
- see <c>gen_event:swap_handler/3</c>.</p>
- <p>If successful, the function should return <c>{ok,State}</c>
- or <c>{ok,State,hibernate}</c> where <c>State</c> is the
- initial internal state of the event handler.</p>
- <p>If <c>{ok,State,hibernate}</c> is returned, the event
- manager will go into hibernation (by calling <seealso
- marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>),
- waiting for the next event to occur.</p>
+ <p>This function is called for an installed event handler that
+ is to update its internal state during a release
+ upgrade/downgrade, that is, when the instruction
+ <c>{update,Module,Change,...}</c>, where
+ <c>Change={advanced,Extra}</c>, is specified in the <c>.appup</c>
+ file. For more information, see <seealso
+ marker="doc/design_principles:users_guide">OTP Design Principles</seealso>.</p>
+ <p>For an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and for a downgrade,
+ <c>OldVsn</c> is <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the
+ <c>vsn</c> attribute(s) of the old version of the callback module
+ <c>Module</c>. If no such attribute is defined, the version
+ is the checksum of the Beam file.</p>
+ <p><c>State</c> is the internal state of the event handler.</p>
+ <p><c>Extra</c> is passed "as is" from the <c>{advanced,Extra}</c>
+ part of the update instruction.</p>
+ <p>The function is to return the updated internal state.</p>
</desc>
</func>
+
<func>
- <name>Module:handle_event(Event, State) -> Result</name>
- <fsummary>Handle an event.</fsummary>
+ <name>Module:format_status(Opt, [PDict, State]) -> Status</name>
+ <fsummary>Optional function for providing a term describing the
+ current event handler state.</fsummary>
<type>
- <v>Event = term()</v>
+ <v>Opt = normal | terminate</v>
+ <v>PDict = [{Key, Value}]</v>
<v>State = term()</v>
- <v>Result = {ok,NewState} | {ok,NewState,hibernate} </v>
- <v>&nbsp;&nbsp;| {swap_handler,Args1,NewState,Handler2,Args2} | remove_handler</v>
- <v>&nbsp;NewState = term()</v>
- <v>&nbsp;Args1 = Args2 = term()</v>
- <v>&nbsp;Handler2 = Module2 | {Module2,Id}</v>
- <v>&nbsp;&nbsp;Module2 = atom()</v>
- <v>&nbsp;&nbsp;Id = term()</v>
+ <v>Status = term()</v>
</type>
<desc>
- <p>Whenever an event manager receives an event sent using
- <c>gen_event:notify/2</c> or <c>gen_event:sync_notify/2</c>, this
- function is called for each installed event handler to handle
- the event.</p>
- <p><c>Event</c> is the <c>Event</c> argument of
- <c>notify</c>/<c>sync_notify</c>.</p>
+ <note>
+ <p>This callback is optional, so event handler modules need
+ not export it. If a handler does not export this function,
+ the <c>gen_event</c> module uses the handler state directly for
+ the purposes described below.</p>
+ </note>
+ <p>This function is called by a <c>gen_event</c> process in the
+ following situations:</p>
+ <list type="bulleted">
+ <item>One of <seealso marker="sys#get_status/1">
+ <c>sys:get_status/1,2</c></seealso>
+ is invoked to get the <c>gen_event</c> status. <c>Opt</c> is set
+ to the atom <c>normal</c> for this case.</item>
+ <item>The event handler terminates abnormally and <c>gen_event</c>
+ logs an error. <c>Opt</c> is set to the
+ atom <c>terminate</c> for this case.</item>
+ </list>
+ <p>This function is useful for changing the form and
+ appearance of the event handler state for these cases. An
+ event handler callback module wishing to change the
+ the <c>sys:get_status/1,2</c> return value as well as how
+ its state appears in termination error logs, exports an
+ instance of <c>format_status/2</c> that returns a term
+ describing the current state of the event handler.</p>
+ <p><c>PDict</c> is the current value of the
+ process dictionary of <c>gen_event</c>.</p>
<p><c>State</c> is the internal state of the event handler.</p>
- <p>If the function returns <c>{ok,NewState}</c> or <c>{ok,NewState,hibernate}</c>
- the event handler
- will remain in the event manager with the possible updated
- internal state <c>NewState</c>.</p>
- <p>If <c>{ok,NewState,hibernate}</c> is returned, the event
- manager will also go into hibernation (by calling <seealso
- marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>),
- waiting for the next event to occur. It is sufficient that one of the event
- handlers return <c>{ok,NewState,hibernate}</c> for the whole event manager
- process to hibernate.</p>
- <p>If the function returns
- <c>{swap_handler,Args1,NewState,Handler2,Args2}</c> the event
- handler will be replaced by <c>Handler2</c> by first calling
- <c>Module:terminate(Args1,NewState)</c> and then
- <c>Module2:init({Args2,Term})</c> where <c>Term</c> is the return
- value of <c>Module:terminate/2</c>.
- See <c>gen_event:swap_handler/3</c> for more information.</p>
- <p>If the function returns <c>remove_handler</c> the event handler
- will be deleted by calling
- <c>Module:terminate(remove_handler,State)</c>.</p>
+ <p>The function is to return <c>Status</c>, a term that
+ change the details of the current state of the event
+ handler. Any term is allowed for <c>Status</c>. The
+ <c>gen_event</c> module uses <c>Status</c> as follows:</p>
+ <list type="bulleted">
+ <item><p>When <c>sys:get_status/1,2</c> is called, <c>gen_event</c>
+ ensures that its return value contains <c>Status</c> in
+ place of the state term of the event handler.</p></item>
+ <item><p>When an event handler terminates abnormally, <c>gen_event</c>
+ logs <c>Status</c> in place of the state term of the
+ event handler.</p></item>
+ </list>
+ <p>One use for this function is to return compact alternative
+ state representations to avoid that large state terms
+ are printed in log files.</p>
</desc>
</func>
+
<func>
<name>Module:handle_call(Request, State) -> Result</name>
<fsummary>Handle a synchronous request.</fsummary>
@@ -594,15 +662,77 @@ gen_event:stop -----> Module:terminate/2
</type>
<desc>
<p>Whenever an event manager receives a request sent using
- <c>gen_event:call/3,4</c>, this function is called for
+ <seealso marker="#call/3"><c>call/3,4</c></seealso>,
+ this function is called for
the specified event handler to handle the request.</p>
- <p><c>Request</c> is the <c>Request</c> argument of <c>call</c>.</p>
+ <p><c>Request</c> is the <c>Request</c> argument of <c>call/3,4</c>.</p>
+ <p><c>State</c> is the internal state of the event handler.</p>
+ <p>The return values are the same as for
+ <seealso marker="#Module:handle_event/2">
+ <c>Module:handle_event/2</c></seealso>
+ except that they also contain a term <c>Reply</c>, which is the reply
+ to the client as the return value of <c>call/3,4</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:handle_event(Event, State) -> Result</name>
+ <fsummary>Handle an event.</fsummary>
+ <type>
+ <v>Event = term()</v>
+ <v>State = term()</v>
+ <v>Result = {ok,NewState} | {ok,NewState,hibernate} </v>
+ <v>&nbsp;&nbsp;| {swap_handler,Args1,NewState,Handler2,Args2}
+ | remove_handler</v>
+ <v>&nbsp;NewState = term()</v>
+ <v>&nbsp;Args1 = Args2 = term()</v>
+ <v>&nbsp;Handler2 = Module2 | {Module2,Id}</v>
+ <v>&nbsp;&nbsp;Module2 = atom()</v>
+ <v>&nbsp;&nbsp;Id = term()</v>
+ </type>
+ <desc>
+ <p>Whenever an event manager receives an event sent using
+ <seealso marker="#notify/2"><c>notify/2</c></seealso> or
+ <seealso marker="#sync_notify/2"><c>sync_notify/2</c></seealso>,
+ this function is called for each installed event handler to handle
+ the event.</p>
+ <p><c>Event</c> is the <c>Event</c> argument of
+ <c>notify/2</c>/<c>sync_notify/2</c>.</p>
<p><c>State</c> is the internal state of the event handler.</p>
- <p>The return values are the same as for <c>handle_event/2</c>
- except they also contain a term <c>Reply</c> which is the reply
- given back to the client as the return value of <c>call</c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>{ok,NewState}</c> or <c>{ok,NewState,hibernate}</c>
+ is returned, the event handler
+ remains in the event manager with the possible updated
+ internal state <c>NewState</c>.</p>
+ </item>
+ <item>
+ <p>If <c>{ok,NewState,hibernate}</c> is returned, the event
+ manager also goes into hibernation (by calling
+ <seealso marker="proc_lib#hibernate/3">
+ <c>proc_lib:hibernate/3</c></seealso>), waiting for the next
+ event to occur. It is sufficient that one of the
+ event handlers return <c>{ok,NewState,hibernate}</c> for the
+ whole event manager process to hibernate.</p>
+ </item>
+ <item>
+ <p>If <c>{swap_handler,Args1,NewState,Handler2,Args2}</c> is
+ returned, the event handler is replaced by <c>Handler2</c> by
+ first calling <c>Module:terminate(Args1,NewState)</c> and then
+ <c>Module2:init({Args2,Term})</c>, where <c>Term</c> is the return
+ value of <c>Module:terminate/2</c>. For more information, see
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso>.
+ </p>
+ </item>
+ <item>
+ <p>If <c>remove_handler</c> is returned, the event handler is
+ deleted by calling
+ <c>Module:terminate(remove_handler,State)</c>.</p>
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name>Module:handle_info(Info, State) -> Result</name>
<fsummary>Handle an incoming message.</fsummary>
@@ -610,7 +740,8 @@ gen_event:stop -----> Module:terminate/2
<v>Info = term()</v>
<v>State = term()</v>
<v>Result = {ok,NewState} | {ok,NewState,hibernate}</v>
- <v>&nbsp;| {swap_handler,Args1,NewState,Handler2,Args2} | remove_handler</v>
+ <v>&nbsp;| {swap_handler,Args1,NewState,Handler2,Args2}
+ | remove_handler</v>
<v>&nbsp;NewState = term()</v>
<v>&nbsp;Args1 = Args2 = term()</v>
<v>&nbsp;Handler2 = Module2 | {Module2,Id}</v>
@@ -622,10 +753,49 @@ gen_event:stop -----> Module:terminate/2
an event manager receives any other message than an event or
a synchronous request (or a system message).</p>
<p><c>Info</c> is the received message.</p>
- <p>See <c>Module:handle_event/2</c> for a description of State
- and possible return values.</p>
+ <p>For a description of <c>State</c> and possible return values, see
+ <seealso marker="#Module:handle_event/2">
+ <c>Module:handle_event/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:init(InitArgs) -> {ok,State} | {ok,State,hibernate} | {error,Reason}</name>
+ <fsummary>Initialize an event handler.</fsummary>
+ <type>
+ <v>InitArgs = Args | {Args,Term}</v>
+ <v>&nbsp;Args = Term = term()</v>
+ <v>State = term()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Whenever a new event handler is added to an event manager,
+ this function is called to initialize the event handler.</p>
+ <p>If the event handler is added because of a call to
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso> or
+ <seealso marker="#add_sup_handler/3">
+ <c>add_sup_handler/3</c></seealso>, <c>InitArgs</c> is
+ the <c>Args</c> argument of these functions.</p>
+ <p>If the event handler replaces another event handler because of
+ a call to
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso> or
+ <seealso marker="#swap_sup_handler/3">
+ <c>swap_sup_handler/3</c></seealso>, or because of a <c>swap</c>
+ return tuple from one of the other callback functions,
+ <c>InitArgs</c> is a tuple <c>{Args,Term}</c>, where <c>Args</c> is
+ the argument provided in the function call/return tuple and
+ <c>Term</c> is the result of terminating the old event handler, see
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso>.</p>
+ <p>If successful, the function returns <c>{ok,State}</c>
+ or <c>{ok,State,hibernate}</c>, where <c>State</c> is the
+ initial internal state of the event handler.</p>
+ <p>If <c>{ok,State,hibernate}</c> is returned, the event
+ manager goes into hibernation (by calling <seealso
+ marker="proc_lib#hibernate/3"><c>proc_lib:hibernate/3</c></seealso>),
+ waiting for the next event to occur.</p>
</desc>
</func>
+
<func>
<name>Module:terminate(Arg, State) -> term()</name>
<fsummary>Clean up before deletion.</fsummary>
@@ -636,22 +806,25 @@ gen_event:stop -----> Module:terminate/2
</type>
<desc>
<p>Whenever an event handler is deleted from an event manager,
- this function is called. It should be the opposite of
- <c>Module:init/1</c> and do any necessary cleaning up.</p>
- <p>If the event handler is deleted due to a call to
- <c>gen_event:delete_handler</c>, <c>gen_event:swap_handler/3</c>
- or <c>gen_event:swap_sup_handler/3</c>, <c>Arg</c> is
+ this function is called. It is to be the opposite of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ and do any necessary cleaning up.</p>
+ <p>If the event handler is deleted because of a call to
+ <seealso marker="#delete_handler/3"><c>delete_handler/3</c></seealso>,
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso>, or
+ <seealso marker="#swap_sup_handler/3">
+ <c>swap_sup_handler/3</c></seealso>, <c>Arg</c> is
the <c>Args</c> argument of this function call.</p>
<p><c>Arg={stop,Reason}</c> if the event handler has a supervised
- connection to a process which has terminated with reason
+ connection to a process that has terminated with reason
<c>Reason</c>.</p>
<p><c>Arg=stop</c> if the event handler is deleted because
the event manager is terminating.</p>
- <p>The event manager will terminate if it is part of a supervision
- tree and it is ordered by its supervisor to terminate.
- Even if it is <em>not</em> part of a supervision tree, it will
- terminate if it receives an <c>'EXIT'</c> message from
- its parent.</p>
+ <p>The event manager terminates if it is part of a supervision
+ tree and it is ordered by its supervisor to terminate.
+ Even if it is <em>not</em> part of a supervision tree, it
+ terminates if it receives an <c>'EXIT'</c> message from
+ its parent.</p>
<p><c>Arg=remove_handler</c> if the event handler is deleted because
another callback function has returned <c>remove_handler</c> or
<c>{remove_handler,Reply}</c>.</p>
@@ -660,104 +833,20 @@ gen_event:stop -----> Module:terminate/2
or <c>Arg={error,{'EXIT',Reason}}</c> if a callback function
failed.</p>
<p><c>State</c> is the internal state of the event handler.</p>
- <p>The function may return any term. If the event handler is
- deleted due to a call to <c>gen_event:delete_handler</c>,
- the return value of that function will be the return value of this
+ <p>The function can return any term. If the event handler is
+ deleted because of a call to <c>gen_event:delete_handler/3</c>,
+ the return value of that function becomes the return value of this
function. If the event handler is to be replaced with another event
- handler due to a swap, the return value will be passed to
+ handler because of a swap, the return value is passed to
the <c>init</c> function of the new event handler. Otherwise
the return value is ignored.</p>
</desc>
</func>
- <func>
- <name>Module:code_change(OldVsn, State, Extra) -> {ok, NewState}</name>
- <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
- <type>
- <v>OldVsn = Vsn | {down, Vsn}</v>
- <v>&nbsp;&nbsp;Vsn = term()</v>
- <v>State = NewState = term()</v>
- <v>Extra = term()</v>
- </type>
- <desc>
- <p>This function is called for an installed event handler which
- should update its internal state during a release
- upgrade/downgrade, i.e. when the instruction
- <c>{update,Module,Change,...}</c> where
- <c>Change={advanced,Extra}</c> is given in the <c>.appup</c>
- file. See <em>OTP Design Principles</em> for more
- information.</p>
- <p>In the case of an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
- in the case of a downgrade, <c>OldVsn</c> is
- <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
- attribute(s) of the old version of the callback module
- <c>Module</c>. If no such attribute is defined, the version
- is the checksum of the BEAM file.</p>
- <p><c>State</c> is the internal state of the event handler.</p>
- <p><c>Extra</c> is passed as-is from the <c>{advanced,Extra}</c>
- part of the update instruction.</p>
- <p>The function should return the updated internal state.</p>
- </desc>
- </func>
- <func>
- <name>Module:format_status(Opt, [PDict, State]) -> Status</name>
- <fsummary>Optional function for providing a term describing the
- current event handler state.</fsummary>
- <type>
- <v>Opt = normal | terminate</v>
- <v>PDict = [{Key, Value}]</v>
- <v>State = term()</v>
- <v>Status = term()</v>
- </type>
- <desc>
- <note>
- <p>This callback is optional, so event handler modules need
- not export it. If a handler does not export this function,
- the gen_event module uses the handler state directly for
- the purposes described below.</p>
- </note>
- <p>This function is called by a gen_event process when:</p>
- <list type="bulleted">
- <item>One
- of <seealso marker="sys#get_status/1">sys:get_status/1,2</seealso>
- is invoked to get the gen_event status. <c>Opt</c> is set
- to the atom <c>normal</c> for this case.</item>
- <item>The event handler terminates abnormally and gen_event
- logs an error. <c>Opt</c> is set to the
- atom <c>terminate</c> for this case.</item>
- </list>
- <p>This function is useful for customising the form and
- appearance of the event handler state for these cases. An
- event handler callback module wishing to customise
- the <c>sys:get_status/1,2</c> return value as well as how
- its state appears in termination error logs exports an
- instance of <c>format_status/2</c> that returns a term
- describing the current state of the event handler.</p>
- <p><c>PDict</c> is the current value of the gen_event's
- process dictionary.</p>
- <p><c>State</c> is the internal state of the event
- handler.</p>
- <p>The function should return <c>Status</c>, a term that
- customises the details of the current state of the event
- handler. Any term is allowed for <c>Status</c>. The
- gen_event module uses <c>Status</c> as follows:</p>
- <list type="bulleted">
- <item>When <c>sys:get_status/1,2</c> is called, gen_event
- ensures that its return value contains <c>Status</c> in
- place of the event handler's actual state term.</item>
- <item>When an event handler terminates abnormally, gen_event
- logs <c>Status</c> in place of the event handler's actual
- state term.</item>
- </list>
- <p>One use for this function is to return compact alternative
- state representations to avoid having large state terms
- printed in logfiles.</p>
- </desc>
- </func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="supervisor">supervisor(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gen_fsm.xml b/lib/stdlib/doc/src/gen_fsm.xml
index 4d594b8eb2..de06987d38 100644
--- a/lib/stdlib/doc/src/gen_fsm.xml
+++ b/lib/stdlib/doc/src/gen_fsm.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,18 +29,30 @@
<rev></rev>
</header>
<module>gen_fsm</module>
- <modulesummary>Generic Finite State Machine Behaviour</modulesummary>
+ <modulesummary>Generic finite state machine behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing a finite state machine.
- A generic finite state machine process (gen_fsm) implemented
- using this module will have a standard set of interface functions
- and include functionality for tracing and error reporting. It will
- also fit into an OTP supervision tree. Refer to
- <seealso marker="doc/design_principles:fsm">OTP Design Principles</seealso> for more information.</p>
- <p>A gen_fsm assumes all specific parts to be located in a callback
- module exporting a pre-defined set of functions. The relationship
- between the behaviour functions and the callback functions can be
- illustrated as follows:</p>
+ <note>
+ <p>
+ There is a new behaviour
+ <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ that is intended to replace <c>gen_fsm</c> for new code.
+ <c>gen_fsm</c> will not be removed for the foreseeable future
+ to keep old state machine implementations running.
+ </p>
+ </note>
+ <p>This behavior module provides a finite state machine.
+ A generic finite state machine process (<c>gen_fsm</c>) implemented
+ using this module has a standard set of interface functions
+ and includes functionality for tracing and error reporting. It
+ also fits into an OTP supervision tree. For more information, see
+ <seealso marker="doc/design_principles:fsm">OTP Design Principles</seealso>.
+ </p>
+
+ <p>A <c>gen_fsm</c> process assumes all specific parts to be located in a
+ callback module exporting a predefined set of functions. The relationship
+ between the behavior functions and the callback functions is as
+ follows:</p>
+
<pre>
gen_fsm module Callback module
-------------- ---------------
@@ -62,34 +74,261 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
- -----> Module:terminate/3
- -----> Module:code_change/4</pre>
- <p>If a callback function fails or returns a bad value, the gen_fsm
- will terminate.</p>
- <p>A gen_fsm handles system messages as documented in
- <seealso marker="sys">sys(3)</seealso>. The <c>sys</c> module
- can be used for debugging a gen_fsm.</p>
- <p>Note that a gen_fsm does not trap exit signals automatically,
- this must be explicitly initiated in the callback module.</p>
+
+ <p>If a callback function fails or returns a bad value, the <c>gen_fsm</c>
+ process terminates.</p>
+
+ <p>A <c>gen_fsm</c> process handles system messages as described in
+ <seealso marker="sys"><c>sys(3)</c></seealso>. The <c>sys</c> module
+ can be used for debugging a <c>gen_fsm</c> process.</p>
+
+ <p>Notice that a <c>gen_fsm</c> process does not trap exit signals
+ automatically, this must be explicitly initiated in the callback
+ module.</p>
+
<p>Unless otherwise stated, all functions in this module fail if
- the specified gen_fsm does not exist or if bad arguments are
- given.</p>
- <p>The gen_fsm process can go into hibernation
- (see <seealso marker="erts:erlang#erlang:hibernate/3">erlang(3)</seealso>) if a callback
- function specifies <c>'hibernate'</c> instead of a timeout value. This
- might be useful if the server is expected to be idle for a long
- time. However this feature should be used with care as hibernation
- implies at least two garbage collections (when hibernating and
- shortly after waking up) and is not something you'd want to do
- between each call to a busy state machine.</p>
+ the specified <c>gen_fsm</c> process does not exist or if bad arguments
+ are specified.</p>
+ <p>The <c>gen_fsm</c> process can go into hibernation
+ (see <seealso marker="erts:erlang#hibernate/3">
+ <c>erlang:hibernate/3</c></seealso>) if a callback function
+ specifies <c>'hibernate'</c> instead of a time-out value. This
+ can be useful if the server is expected to be idle for a long
+ time. However, use this feature with care, as hibernation
+ implies at least two garbage collections (when hibernating and
+ shortly after waking up) and is not something you want to do
+ between each call to a busy state machine.</p>
</description>
+
<funcs>
<func>
+ <name>cancel_timer(Ref) -> RemainingTime | false</name>
+ <fsummary>Cancel an internal timer in a generic FSM.</fsummary>
+ <type>
+ <v>Ref = reference()</v>
+ <v>RemainingTime = integer()</v>
+ </type>
+ <desc>
+ <p>Cancels an internal timer referred by <c>Ref</c> in the
+ <c>gen_fsm</c> process that calls this function.</p>
+ <p><c>Ref</c> is a reference returned from
+ <seealso marker="#send_event_after/2">
+ <c>send_event_after/2</c></seealso> or
+ <seealso marker="#start_timer/2"><c>start_timer/2</c></seealso>.</p>
+ <p>If the timer has already timed out, but the event not yet
+ been delivered, it is cancelled as if it had <em>not</em>
+ timed out, so there is no false timer event after
+ returning from this function.</p>
+ <p>Returns the remaining time in milliseconds until the timer would
+ have expired if <c>Ref</c> referred to an active timer, otherwise
+ <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>enter_loop(Module, Options, StateName, StateData)</name>
+ <name>enter_loop(Module, Options, StateName, StateData, FsmName)</name>
+ <name>enter_loop(Module, Options, StateName, StateData, Timeout)</name>
+ <name>enter_loop(Module, Options, StateName, StateData, FsmName, Timeout)</name>
+ <fsummary>Enter the <c>gen_fsm</c> receive loop.</fsummary>
+ <type>
+ <v>Module = atom()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>StateName = atom()</v>
+ <v>StateData = term()</v>
+ <v>FsmName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Timeout = int() | infinity</v>
+ </type>
+ <desc>
+ <p>Makes an existing process into a <c>gen_fsm</c> process.
+ Does not return,
+ instead the calling process enters the <c>gen_fsm</c> receive
+ loop and becomes a <c>gen_fsm</c> process. The process <em>must</em>
+ have been started using one of the start functions in
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>. The user is
+ responsible for any initialization of the process, including
+ registering a name for it.</p>
+ <p>This function is useful when a more complex initialization
+ procedure is needed than the <c>gen_fsm</c> behavior provides.</p>
+ <p><c>Module</c>, <c>Options</c>, and <c>FsmName</c> have
+ the same meanings as when calling
+ <seealso marker="#start_link/3"><c>start[_link]/3,4</c></seealso>.
+ However, if <c>FsmName</c> is specified, the process must have
+ been registered accordingly <em>before</em> this function is
+ called.</p>
+ <p><c>StateName</c>, <c>StateData</c>, and <c>Timeout</c> have
+ the same meanings as in the return value of
+ <seealso marker="#Moduleinit"><c>Module:init/1</c></seealso>.
+ The callback module <c>Module</c> does not need to
+ export an <c>init/1</c> function.</p>
+ <p>The function fails if the calling process was not started by a
+ <c>proc_lib</c> start function, or if it is not registered
+ according to <c>FsmName</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>reply(Caller, Reply) -> Result</name>
+ <fsummary>Send a reply to a caller.</fsummary>
+ <type>
+ <v>Caller - see below</v>
+ <v>Reply = term()</v>
+ <v>Result = term()</v>
+ </type>
+ <desc>
+ <p>This function can be used by a <c>gen_fsm</c> process to
+ explicitly send a reply to a client process that called
+ <seealso marker="#sync_send_event/2">
+ <c>sync_send_event/2,3</c></seealso> or
+ <seealso marker="#sync_send_all_state_event/2">
+ <c>sync_send_all_state_event/2,3</c></seealso>
+ when the reply cannot be defined in the return value of
+ <seealso marker="#Module:StateName/3">
+ <c>Module:StateName/3</c></seealso> or
+ <seealso marker="#Module:handle_sync_event/4">
+ <c>Module:handle_sync_event/4</c></seealso>.</p>
+ <p><c>Caller</c> must be the <c>From</c> argument provided to
+ the callback function. <c>Reply</c> is any term
+ given back to the client as the return value of
+ <c>sync_send_event/2,3</c> or
+ <c>sync_send_all_state_event/2,3</c>.</p>
+ <p>Return value <c>Result</c> is not further defined, and
+ is always to be ignored.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_all_state_event(FsmRef, Event) -> ok</name>
+ <fsummary>Send an event asynchronously to a generic FSM.</fsummary>
+ <type>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Name = Node = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Event = term()</v>
+ </type>
+ <desc>
+ <p>Sends an event asynchronously to the <c>FsmRef</c> of the
+ <c>gen_fsm</c> process and returns <c>ok</c> immediately.
+ The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:handle_event/3">
+ <c>Module:handle_event/3</c></seealso> to handle the event.</p>
+ <p>For a description of the arguments, see
+ <seealso marker="#send_event/2"><c>send_event/2</c></seealso>.</p>
+ <p>The difference between <c>send_event/2</c> and
+ <c>send_all_state_event/2</c> is which callback function is
+ used to handle the event. This function is useful when
+ sending events that are handled the same way in every state,
+ as only one <c>handle_event</c> clause is needed to handle
+ the event instead of one clause in each state name function.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_event(FsmRef, Event) -> ok</name>
+ <fsummary>Send an event asynchronously to a generic FSM.</fsummary>
+ <type>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Name = Node = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Event = term()</v>
+ </type>
+ <desc>
+ <p>Sends an event asynchronously to the <c>FsmRef</c> of the
+ <c>gen_fsm</c> process
+ and returns <c>ok</c> immediately. The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso> to handle the event, where
+ <c>StateName</c> is the name of the current state of
+ the <c>gen_fsm</c> process.</p>
+ <p><c>FsmRef</c> can be any of the following:</p>
+ <list type="bulleted">
+ <item>The pid</item>
+ <item><c>Name</c>, if the <c>gen_fsm</c> process is locally
+ registered</item>
+ <item><c>{Name,Node}</c>, if the <c>gen_fsm</c> process is locally
+ registered at another node</item>
+ <item><c>{global,GlobalName}</c>, if the <c>gen_fsm</c> process is
+ globally registered</item>
+ <item><c>{via,Module,ViaName}</c>, if the <c>gen_fsm</c> process is
+ registered through an alternative process registry</item>
+ </list>
+ <p><c>Event</c> is any term that is passed as one of
+ the arguments to <c>Module:StateName/2</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_event_after(Time, Event) -> Ref</name>
+ <fsummary>Send a delayed event internally in a generic FSM.</fsummary>
+ <type>
+ <v>Time = integer()</v>
+ <v>Event = term()</v>
+ <v>Ref = reference()</v>
+ </type>
+ <desc>
+ <p>Sends a delayed event internally in the <c>gen_fsm</c> process
+ that calls this function after <c>Time</c> milliseconds.
+ Returns immediately a
+ reference that can be used to cancel the delayed send using
+ <seealso marker="#cancel_timer/1"><c>cancel_timer/1</c></seealso>.</p>
+ <p>The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso> to handle
+ the event, where <c>StateName</c> is the name of the current
+ state of the <c>gen_fsm</c> process at the time the delayed event is
+ delivered.</p>
+ <p><c>Event</c> is any term that is passed as one of
+ the arguments to <c>Module:StateName/2</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start(Module, Args, Options) -> Result</name>
+ <name>start(FsmName, Module, Args, Options) -> Result</name>
+ <fsummary>Create a standalone <c>gen_fsm</c> process.</fsummary>
+ <type>
+ <v>FsmName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Module = atom()</v>
+ <v>Args = term()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>&nbsp;&nbsp;SOpts = [term()]</v>
+ <v>Result = {ok,Pid} | ignore | {error,Error}</v>
+ <v>&nbsp;Pid = pid()</v>
+ <v>&nbsp;Error = {already_started,Pid} | term()</v>
+ </type>
+ <desc>
+ <p>Creates a standalone <c>gen_fsm</c> process, that is, a process that
+ is not part of a supervision tree and thus has no supervisor.</p>
+ <p>For a description of arguments and return values, see
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
<name>start_link(Module, Args, Options) -> Result</name>
<name>start_link(FsmName, Module, Args, Options) -> Result</name>
- <fsummary>Create a gen_fsm process in a supervision tree.</fsummary>
+ <fsummary>Create a <c>gen_fsm</c> process in a supervision tree.
+ </fsummary>
<type>
- <v>FsmName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
+ <v>FsmName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
<v>&nbsp;Name = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Module = atom()</v>
@@ -106,54 +345,64 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>&nbsp;Error = {already_started,Pid} | term()</v>
</type>
<desc>
- <p>Creates a gen_fsm process as part of a supervision tree.
- The function should be called, directly or indirectly, by
- the supervisor. It will, among other things, ensure that
- the gen_fsm is linked to the supervisor.</p>
- <p>The gen_fsm process calls <c>Module:init/1</c> to
- initialize. To ensure a synchronized start-up procedure,
+ <p>Creates a <c>gen_fsm</c> process as part of a supervision tree.
+ The function is to be called, directly or indirectly, by
+ the supervisor. For example, it ensures that
+ the <c>gen_fsm</c> process is linked to the supervisor.</p>
+ <p>The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> to
+ initialize. To ensure a synchronized startup procedure,
<c>start_link/3,4</c> does not return until
<c>Module:init/1</c> has returned.</p>
- <p>If <c>FsmName={local,Name}</c>, the gen_fsm is registered
- locally as <c>Name</c> using <c>register/2</c>.
- If <c>FsmName={global,GlobalName}</c>, the gen_fsm is
- registered globally as <c>GlobalName</c> using
- <c>global:register_name/2</c>.
- If <c>FsmName={via,Module,ViaName}</c>, the gen_fsm will
- register with the registry represented by <c>Module</c>.
- The <c>Module</c> callback should export the functions
- <c>register_name/2</c>, <c>unregister_name/1</c>,
- <c>whereis_name/1</c> and <c>send/2</c>, which should behave like the
- corresponding functions in <c>global</c>. Thus,
- <c>{via,global,GlobalName}</c> is a valid reference.</p>
- <p>If no name is provided,
- the gen_fsm is not registered.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>FsmName={local,Name}</c>, the <c>gen_fsm</c> process is
+ registered locally as <c>Name</c> using <c>register/2</c>.</p>
+ </item>
+ <item>
+ <p>If <c>FsmName={global,GlobalName}</c>, the <c>gen_fsm</c> process
+ is registered globally as <c>GlobalName</c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If <c>FsmName={via,Module,ViaName}</c>, the <c>gen_fsm</c>
+ process registers with the registry represented by <c>Module</c>.
+ The <c>Module</c> callback is to export the functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>,
+ <c>whereis_name/1</c>, and <c>send/2</c>, which are to behave
+ like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p>If no name is provided, the <c>gen_fsm</c> process is not
+ registered.</p>
<p><c>Module</c> is the name of the callback module.</p>
- <p><c>Args</c> is an arbitrary term which is passed as
+ <p><c>Args</c> is any term that is passed as
the argument to <c>Module:init/1</c>.</p>
- <p>If the option <c>{timeout,Time}</c> is present, the gen_fsm
- is allowed to spend <c>Time</c> milliseconds initializing
- or it will be terminated and the start function will return
+ <p>If option <c>{timeout,Time}</c> is present, the <c>gen_fsm</c>
+ process is allowed to spend <c>Time</c> milliseconds initializing
+ or it terminates and the start function returns
<c>{error,timeout}</c>.</p>
- <p>If the option <c>{debug,Dbgs}</c> is present,
- the corresponding <c>sys</c> function will be called for each
- item in <c>Dbgs</c>. See
- <seealso marker="sys">sys(3)</seealso>.</p>
- <p>If the option <c>{spawn_opt,SOpts}</c> is present,
- <c>SOpts</c> will be passed as option list to
- the <c>spawn_opt</c> BIF which is used to spawn the gen_fsm
- process. See
- <seealso marker="erts:erlang#spawn_opt/2">erlang(3)</seealso>.</p>
+ <p>If option <c>{debug,Dbgs}</c> is present, the corresponding
+ <c>sys</c> function is called for each item in <c>Dbgs</c>; see
+ <seealso marker="sys"><c>sys(3)</c></seealso>.</p>
+ <p>If option <c>{spawn_opt,SOpts}</c> is present, <c>SOpts</c> is
+ passed as option list to the <c>spawn_opt</c> BIF that is used to
+ spawn the <c>gen_fsm</c> process; see
+ <seealso marker="erts:erlang#spawn_opt/2">
+ <c>spawn_opt/2</c></seealso>.</p>
<note>
- <p>Using the spawn option <c>monitor</c> is currently not
- allowed, but will cause the function to fail with reason
+ <p>Using spawn option <c>monitor</c> is not
+ allowed, it causes the function to fail with reason
<c>badarg</c>.</p>
</note>
- <p>If the gen_fsm is successfully created and initialized
- the function returns <c>{ok,Pid}</c>, where <c>Pid</c> is
- the pid of the gen_fsm. If there already exists a process with
- the specified <c>FsmName</c>, the function returns
- <c>{error,{already_started,Pid}}</c> where <c>Pid</c> is
+ <p>If the <c>gen_fsm</c> process is successfully created and
+ initialized, the function returns <c>{ok,Pid}</c>, where <c>Pid</c>
+ is the pid of the <c>gen_fsm</c> process. If a process with the
+ specified <c>FsmName</c> exists already, the function returns
+ <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
the pid of that process.</p>
<p>If <c>Module:init/1</c> fails with <c>Reason</c>,
the function returns <c>{error,Reason}</c>. If
@@ -162,129 +411,106 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
returns <c>{error,Reason}</c> or <c>ignore</c>, respectively.</p>
</desc>
</func>
+
<func>
- <name>start(Module, Args, Options) -> Result</name>
- <name>start(FsmName, Module, Args, Options) -> Result</name>
- <fsummary>Create a stand-alone gen_fsm process.</fsummary>
+ <name>start_timer(Time, Msg) -> Ref</name>
+ <fsummary>Send a time-out event internally in a generic FSM.</fsummary>
<type>
- <v>FsmName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Module = atom()</v>
- <v>Args = term()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
- <v>&nbsp;&nbsp;SOpts = [term()]</v>
- <v>Result = {ok,Pid} | ignore | {error,Error}</v>
- <v>&nbsp;Pid = pid()</v>
- <v>&nbsp;Error = {already_started,Pid} | term()</v>
+ <v>Time = integer()</v>
+ <v>Msg = term()</v>
+ <v>Ref = reference()</v>
</type>
<desc>
- <p>Creates a stand-alone gen_fsm process, i.e. a gen_fsm which
- is not part of a supervision tree and thus has no supervisor.</p>
- <p>See <seealso marker="#start_link/3">start_link/3,4</seealso>
- for a description of arguments and return values.</p>
+ <p>Sends a time-out event internally in the <c>gen_fsm</c>
+ process that calls this function after <c>Time</c> milliseconds.
+ Returns immediately a
+ reference that can be used to cancel the timer using
+ <seealso marker="#cancel_timer/1"><c>cancel_timer/1</c></seealso>.</p>
+ <p>The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso> to handle
+ the event, where <c>StateName</c> is the name of the current
+ state of the <c>gen_fsm</c> process at the time the time-out
+ message is delivered.</p>
+ <p><c>Msg</c> is any term that is passed in the
+ time-out message, <c>{timeout, Ref, Msg}</c>, as one of
+ the arguments to <c>Module:StateName/2</c>.</p>
</desc>
</func>
+
<func>
<name>stop(FsmRef) -> ok</name>
<name>stop(FsmRef, Reason, Timeout) -> ok</name>
<fsummary>Synchronously stop a generic FSM.</fsummary>
<type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
<v>&nbsp;Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Reason = term()</v>
<v>Timeout = int()>0 | infinity</v>
</type>
<desc>
- <p>Orders a generic FSM to exit with the given <c>Reason</c>
- and waits for it to terminate. The gen_fsm will call
- <seealso marker="#Module:terminate/3">Module:terminate/3</seealso>
- before exiting.</p>
- <p>The function returns <c>ok</c> if the generic FSM terminates
- with the expected reason. Any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> will cause an
+ <p>Orders a generic finite state machine to exit with the specified
+ <c>Reason</c> and waits for it to terminate. The <c>gen_fsm</c>
+ process calls <seealso marker="#Module:terminate/3">
+ <c>Module:terminate/3</c></seealso> before exiting.</p>
+ <p>The function returns <c>ok</c> if the generic finite state machine
+ terminates with the expected reason. Any other reason than
+ <c>normal</c>, <c>shutdown</c>, or <c>{shutdown,Term}</c> causes an
error report to be issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.
- The default <c>Reason</c> is <c>normal</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
+ <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.
+ The default <c>Reason</c> is <c>normal</c>.</p>
+ <p><c>Timeout</c> is an integer greater than zero that
specifies how many milliseconds to wait for the generic FSM
to terminate, or the atom <c>infinity</c> to wait
indefinitely. The default value is <c>infinity</c>. If the
- generic FSM has not terminated within the specified time, a
- <c>timeout</c> exception is raised.</p>
- <p>If the process does not exist, a <c>noproc</c> exception
- is raised.</p>
- </desc>
- </func>
- <func>
- <name>send_event(FsmRef, Event) -> ok</name>
- <fsummary>Send an event asynchronously to a generic FSM.</fsummary>
- <type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>&nbsp;Name = Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Event = term()</v>
- </type>
- <desc>
- <p>Sends an event asynchronously to the gen_fsm <c>FsmRef</c>
- and returns <c>ok</c> immediately. The gen_fsm will call
- <c>Module:StateName/2</c> to handle the event, where
- <c>StateName</c> is the name of the current state of
- the gen_fsm.</p>
- <p><c>FsmRef</c> can be:</p>
- <list type="bulleted">
- <item>the pid,</item>
- <item><c>Name</c>, if the gen_fsm is locally registered,</item>
- <item><c>{Name,Node}</c>, if the gen_fsm is locally
- registered at another node, or</item>
- <item><c>{global,GlobalName}</c>, if the gen_fsm is globally
- registered.</item>
- <item><c>{via,Module,ViaName}</c>, if the gen_fsm is registered
- through an alternative process registry.</item>
- </list>
- <p><c>Event</c> is an arbitrary term which is passed as one of
- the arguments to <c>Module:StateName/2</c>.</p>
+ generic finite state machine has not terminated within the specified
+ time, a <c>timeout</c> exception is raised.</p>
+ <p>If the process does not exist, a <c>noproc</c> exception
+ is raised.</p>
</desc>
</func>
+
<func>
- <name>send_all_state_event(FsmRef, Event) -> ok</name>
- <fsummary>Send an event asynchronously to a generic FSM.</fsummary>
+ <name>sync_send_all_state_event(FsmRef, Event) -> Reply</name>
+ <name>sync_send_all_state_event(FsmRef, Event, Timeout) -> Reply</name>
+ <fsummary>Send an event synchronously to a generic FSM.</fsummary>
<type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
<v>&nbsp;Name = Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Event = term()</v>
+ <v>Timeout = int()>0 | infinity</v>
+ <v>Reply = term()</v>
</type>
<desc>
- <p>Sends an event asynchronously to the gen_fsm <c>FsmRef</c>
- and returns <c>ok</c> immediately. The gen_fsm will call
- <c>Module:handle_event/3</c> to handle the event.</p>
- <p>See <seealso marker="#send_event/2">send_event/2</seealso>
- for a description of the arguments.</p>
- <p>The difference between <c>send_event</c> and
- <c>send_all_state_event</c> is which callback function is
- used to handle the event. This function is useful when
- sending events that are handled the same way in every state,
- as only one <c>handle_event</c> clause is needed to handle
- the event instead of one clause in each state name function.</p>
+ <p>Sends an event to the <c>FsmRef</c> of the <c>gen_fsm</c>
+ process and waits until a reply arrives or a time-out occurs.
+ The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:handle_sync_event/4">
+ <c>Module:handle_sync_event/4</c></seealso> to handle the event.</p>
+ <p>For a description of <c>FsmRef</c> and <c>Event</c>, see
+ <seealso marker="#send_event/2">send_event/2</seealso>.
+ For a description of <c>Timeout</c> and <c>Reply</c>, see
+ <seealso marker="#sync_send_event/3">
+ <c>sync_send_event/3</c></seealso>.</p>
+ <p>For a discussion about the difference between
+ <c>sync_send_event</c> and <c>sync_send_all_state_event</c>, see
+ <seealso marker="#send_all_state_event/2">
+ <c>send_all_state_event/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>sync_send_event(FsmRef, Event) -> Reply</name>
<name>sync_send_event(FsmRef, Event, Timeout) -> Reply</name>
<fsummary>Send an event synchronously to a generic FSM.</fsummary>
<type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
<v>&nbsp;Name = Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Event = term()</v>
@@ -292,210 +518,231 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>Reply = term()</v>
</type>
<desc>
- <p>Sends an event to the gen_fsm <c>FsmRef</c> and waits until a
- reply arrives or a timeout occurs. The gen_fsm will call
- <c>Module:StateName/3</c> to handle the event, where
+ <p>Sends an event to the <c>FsmRef</c> of the <c>gen_fsm</c>
+ process and waits until a reply arrives or a time-out occurs.
+ <c>The gen_fsm</c> process calls
+ <seealso marker="#Module:StateName/3">
+ <c>Module:StateName/3</c></seealso> to handle the event, where
<c>StateName</c> is the name of the current state of
- the gen_fsm.</p>
- <p>See <seealso marker="#send_event/2">send_event/2</seealso>
- for a description of <c>FsmRef</c> and <c>Event</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
+ the <c>gen_fsm</c> process.</p>
+ <p>For a description of <c>FsmRef</c> and <c>Event</c>, see
+ <seealso marker="#send_event/2"><c>send_event/2</c></seealso>.</p>
+ <p><c>Timeout</c> is an integer greater than zero that
specifies how many milliseconds to wait for a reply, or
- the atom <c>infinity</c> to wait indefinitely. Default value
- is 5000. If no reply is received within the specified time,
+ the atom <c>infinity</c> to wait indefinitely. Defaults
+ to 5000. If no reply is received within the specified time,
the function call fails.</p>
- <p>The return value <c>Reply</c> is defined in the return value
+ <p>Return value <c>Reply</c> is defined in the return value
of <c>Module:StateName/3</c>.</p>
- <p>The ancient behaviour of sometimes consuming the server
+ <note>
+ <p>The ancient behavior of sometimes consuming the server
exit message if the server died during the call while
- linked to the client has been removed in OTP R12B/Erlang 5.6.</p>
+ linked to the client was removed in Erlang 5.6/OTP R12B.</p>
+ </note>
</desc>
</func>
+ </funcs>
+
+ <section>
+ <title>Callback Functions</title>
+ <p>The following functions are to be exported from a <c>gen_fsm</c>
+ callback module.</p>
+
+ <p><em>state name</em> denotes a state of the state machine.</p>
+
+ <p><em>state data</em> denotes the internal state of the Erlang process
+ that implements the state machine.</p>
+ </section>
+
+ <funcs>
<func>
- <name>sync_send_all_state_event(FsmRef, Event) -> Reply</name>
- <name>sync_send_all_state_event(FsmRef, Event, Timeout) -> Reply</name>
- <fsummary>Send an event synchronously to a generic FSM.</fsummary>
+ <name>Module:code_change(OldVsn, StateName, StateData, Extra) -> {ok, NextStateName, NewStateData}</name>
+ <fsummary>Update the internal state data during upgrade/downgrade.
+ </fsummary>
<type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>&nbsp;Name = Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Event = term()</v>
- <v>Timeout = int()>0 | infinity</v>
- <v>Reply = term()</v>
+ <v>OldVsn = Vsn | {down, Vsn}</v>
+ <v>&nbsp;&nbsp;Vsn = term()</v>
+ <v>StateName = NextStateName = atom()</v>
+ <v>StateData = NewStateData = term()</v>
+ <v>Extra = term()</v>
</type>
<desc>
- <p>Sends an event to the gen_fsm <c>FsmRef</c> and waits until a
- reply arrives or a timeout occurs. The gen_fsm will call
- <c>Module:handle_sync_event/4</c> to handle the event.</p>
- <p>See <seealso marker="#send_event/2">send_event/2</seealso>
- for a description of <c>FsmRef</c> and <c>Event</c>. See
- <seealso marker="#sync_send_event/3">sync_send_event/3</seealso>
- for a description of <c>Timeout</c> and <c>Reply</c>.</p>
- <p>See
- <seealso marker="#send_all_state_event/2">send_all_state_event/2</seealso>
- for a discussion about the difference between
- <c>sync_send_event</c> and <c>sync_send_all_state_event</c>.</p>
+ <p>This function is called by a <c>gen_fsm</c> process when it is to
+ update its internal state data during a release upgrade/downgrade,
+ that is, when instruction <c>{update,Module,Change,...}</c>,
+ where <c>Change={advanced,Extra}</c>, is given in
+ the <c>appup</c> file; see section
+ <seealso marker="doc/design_principles:release_handling#instr">
+ Release Handling Instructions</seealso> in OTP Design Principles.</p>
+ <p>For an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and for a downgrade,
+ <c>OldVsn</c> is <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the
+ <c>vsn</c> attribute(s) of the old version of the callback module
+ <c>Module</c>. If no such attribute is defined, the version is
+ the checksum of the Beam file.</p>
+ <p><c>StateName</c> is the current state name and <c>StateData</c> the
+ internal state data of the <c>gen_fsm</c> process.</p>
+ <p><c>Extra</c> is passed "as is" from the <c>{advanced,Extra}</c>
+ part of the update instruction.</p>
+ <p>The function is to return the new current state name and
+ updated internal data.</p>
</desc>
</func>
+
<func>
- <name>reply(Caller, Reply) -> Result</name>
- <fsummary>Send a reply to a caller.</fsummary>
+ <name>Module:format_status(Opt, [PDict, StateData]) -> Status</name>
+ <fsummary>Optional function for providing a term describing the
+ current <c>gen_fsm</c> process status.</fsummary>
<type>
- <v>Caller - see below</v>
- <v>Reply = term()</v>
- <v>Result = term()</v>
+ <v>Opt = normal | terminate</v>
+ <v>PDict = [{Key, Value}]</v>
+ <v>StateData = term()</v>
+ <v>Status = term()</v>
</type>
<desc>
- <p>This function can be used by a gen_fsm to explicitly send a
- reply to a client process that called
- <seealso marker="#sync_send_event/2">sync_send_event/2,3</seealso>
- or
- <seealso marker="#sync_send_all_state_event/2">sync_send_all_state_event/2,3</seealso>,
- when the reply cannot be defined in the return value of
- <c>Module:State/3</c> or <c>Module:handle_sync_event/4</c>.</p>
- <p><c>Caller</c> must be the <c>From</c> argument provided to
- the callback function. <c>Reply</c> is an arbitrary term,
- which will be given back to the client as the return value of
- <c>sync_send_event/2,3</c> or
- <c>sync_send_all_state_event/2,3</c>.</p>
- <p>The return value <c>Result</c> is not further defined, and
- should always be ignored.</p>
+ <note>
+ <p>This callback is optional, so callback modules need not
+ export it. The <c>gen_fsm</c> module provides a default
+ implementation of this function that returns the callback
+ module state data.</p>
+ </note>
+ <p>This function is called by a <c>gen_fsm</c> process in the
+ following situations:</p>
+ <list type="bulleted">
+ <item>One of <seealso marker="sys#get_status/1">
+ <c>sys:get_status/1,2</c></seealso>
+ is invoked to get the <c>gen_fsm</c> status. <c>Opt</c> is set to
+ the atom <c>normal</c> for this case.</item>
+ <item>The <c>gen_fsm</c> process terminates abnormally and logs an
+ error. <c>Opt</c> is set to the atom <c>terminate</c> for
+ this case.</item>
+ </list>
+ <p>This function is useful for changing the form and
+ appearance of the <c>gen_fsm</c> status for these cases. A callback
+ module wishing to change the <c>sys:get_status/1,2</c>
+ return value as well as how its status appears in
+ termination error logs, exports an instance
+ of <c>format_status/2</c> that returns a term describing the
+ current status of the <c>gen_fsm</c> process.</p>
+ <p><c>PDict</c> is the current value of the process dictionary of the
+ <c>gen_fsm</c> process.</p>
+ <p><c>StateData</c> is the internal state data of the
+ <c>gen_fsm</c> process.</p>
+ <p>The function is to return <c>Status</c>, a term that
+ change the details of the current state and status of
+ the <c>gen_fsm</c> process. There are no restrictions on the
+ form <c>Status</c> can take, but for
+ the <c>sys:get_status/1,2</c> case (when <c>Opt</c>
+ is <c>normal</c>), the recommended form for
+ the <c>Status</c> value is <c>[{data, [{"StateData",
+ Term}]}]</c>, where <c>Term</c> provides relevant details of
+ the <c>gen_fsm</c> state data. Following this recommendation is not
+ required, but it makes the callback module status
+ consistent with the rest of the <c>sys:get_status/1,2</c>
+ return value.</p>
+ <p>One use for this function is to return compact alternative
+ state data representations to avoid that large state terms
+ are printed in log files.</p>
</desc>
</func>
+
<func>
- <name>send_event_after(Time, Event) -> Ref</name>
- <fsummary>Send a delayed event internally in a generic FSM.</fsummary>
+ <name>Module:handle_event(Event, StateName, StateData) -> Result</name>
+ <fsummary>Handle an asynchronous event.</fsummary>
<type>
- <v>Time = integer()</v>
<v>Event = term()</v>
- <v>Ref = reference()</v>
- </type>
- <desc>
- <p>Sends a delayed event internally in the gen_fsm that calls
- this function after <c>Time</c> ms. Returns immediately a
- reference that can be used to cancel the delayed send using
- <seealso marker="#cancel_timer/1">cancel_timer/1</seealso>.</p>
- <p>The gen_fsm will call <c>Module:StateName/2</c> to handle
- the event, where <c>StateName</c> is the name of the current
- state of the gen_fsm at the time the delayed event is
- delivered.</p>
- <p><c>Event</c> is an arbitrary term which is passed as one of
- the arguments to <c>Module:StateName/2</c>.</p>
- </desc>
- </func>
- <func>
- <name>start_timer(Time, Msg) -> Ref</name>
- <fsummary>Send a timeout event internally in a generic FSM.</fsummary>
- <type>
- <v>Time = integer()</v>
- <v>Msg = term()</v>
- <v>Ref = reference()</v>
+ <v>StateName = atom()</v>
+ <v>StateData = term()</v>
+ <v>Result = {next_state,NextStateName,NewStateData}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
+ <v>&nbsp;NextStateName = atom()</v>
+ <v>&nbsp;NewStateData = term()</v>
+ <v>&nbsp;Timeout = int()>0 | infinity</v>
+ <v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Sends a timeout event internally in the gen_fsm that calls
- this function after <c>Time</c> ms. Returns immediately a
- reference that can be used to cancel the timer using
- <seealso marker="#cancel_timer/1">cancel_timer/1</seealso>.</p>
- <p>The gen_fsm will call <c>Module:StateName/2</c> to handle
- the event, where <c>StateName</c> is the name of the current
- state of the gen_fsm at the time the timeout message is
- delivered.</p>
- <p><c>Msg</c> is an arbitrary term which is passed in the
- timeout message, <c>{timeout, Ref, Msg}</c>, as one of
- the arguments to <c>Module:StateName/2</c>.</p>
+ <p>Whenever a <c>gen_fsm</c> process receives an event sent using
+ <seealso marker="#send_all_state_event/2">
+ <c>send_all_state_event/2</c></seealso>,
+ this function is called to handle the event.</p>
+ <p><c>StateName</c> is the current state name of the <c>gen_fsm</c>
+ process.</p>
+ <p>For a description of the other arguments and possible return values,
+ see <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>cancel_timer(Ref) -> RemainingTime | false</name>
- <fsummary>Cancel an internal timer in a generic FSM.</fsummary>
+ <name>Module:handle_info(Info, StateName, StateData) -> Result</name>
+ <fsummary>Handle an incoming message.</fsummary>
<type>
- <v>Ref = reference()</v>
- <v>RemainingTime = integer()</v>
+ <v>Info = term()</v>
+ <v>StateName = atom()</v>
+ <v>StateData = term()</v>
+ <v>Result = {next_state,NextStateName,NewStateData}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
+ <v>&nbsp;NextStateName = atom()</v>
+ <v>&nbsp;NewStateData = term()</v>
+ <v>&nbsp;Timeout = int()>0 | infinity</v>
+ <v>&nbsp;Reason = normal | term()</v>
</type>
<desc>
- <p>Cancels an internal timer referred by <c>Ref</c> in the
- gen_fsm that calls this function.</p>
- <p><c>Ref</c> is a reference returned from
- <seealso marker="#send_event_after/2">send_event_after/2</seealso>
- or
- <seealso marker="#start_timer/2">start_timer/2</seealso>.</p>
- <p>If the timer has already timed out, but the event not yet
- been delivered, it is cancelled as if it had <em>not</em>
- timed out, so there will be no false timer event after
- returning from this function.</p>
- <p>Returns the remaining time in ms until the timer would
- have expired if <c>Ref</c> referred to an active timer,
- <c>false</c> otherwise.</p>
+ <p>This function is called by a <c>gen_fsm</c> process when it receives
+ any other message than a synchronous or asynchronous event (or a
+ system message).</p>
+ <p><c>Info</c> is the received message.</p>
+ <p>For a description of the other arguments and possible return values,
+ see <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>enter_loop(Module, Options, StateName, StateData)</name>
- <name>enter_loop(Module, Options, StateName, StateData, FsmName)</name>
- <name>enter_loop(Module, Options, StateName, StateData, Timeout)</name>
- <name>enter_loop(Module, Options, StateName, StateData, FsmName, Timeout)</name>
- <fsummary>Enter the gen_fsm receive loop</fsummary>
+ <name>Module:handle_sync_event(Event, From, StateName, StateData) -> Result</name>
+ <fsummary>Handle a synchronous event.</fsummary>
<type>
- <v>Module = atom()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>Event = term()</v>
+ <v>From = {pid(),Tag}</v>
<v>StateName = atom()</v>
<v>StateData = term()</v>
- <v>FsmName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Timeout = int() | infinity</v>
+ <v>Result = {reply,Reply,NextStateName,NewStateData}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {stop,Reason,Reply,NewStateData} | {stop,Reason,NewStateData}</v>
+ <v>&nbsp;Reply = term()</v>
+ <v>&nbsp;NextStateName = atom()</v>
+ <v>&nbsp;NewStateData = term()</v>
+ <v>&nbsp;Timeout = int()>0 | infinity</v>
+ <v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Makes an existing process into a gen_fsm. Does not return,
- instead the calling process will enter the gen_fsm receive
- loop and become a gen_fsm process. The process <em>must</em>
- have been started using one of the start functions in
- <c>proc_lib</c>, see
- <seealso marker="proc_lib">proc_lib(3)</seealso>. The user is
- responsible for any initialization of the process, including
- registering a name for it.</p>
- <p>This function is useful when a more complex initialization
- procedure is needed than the gen_fsm behaviour provides.</p>
- <p><c>Module</c>, <c>Options</c> and <c>FsmName</c> have
- the same meanings as when calling
- <seealso marker="#start_link/3">start[_link]/3,4</seealso>.
- However, if <c>FsmName</c> is specified, the process must have
- been registered accordingly <em>before</em> this function is
- called.</p>
- <p><c>StateName</c>, <c>StateData</c> and <c>Timeout</c> have
- the same meanings as in the return value of
- <seealso marker="#Moduleinit">Module:init/1</seealso>.
- Also, the callback module <c>Module</c> does not need to
- export an <c>init/1</c> function.</p>
- <p>Failure: If the calling process was not started by a
- <c>proc_lib</c> start function, or if it is not registered
- according to <c>FsmName</c>.</p>
+ <p>Whenever a <c>gen_fsm</c> process receives an event sent using
+ <seealso marker="#sync_send_all_state_event/2">
+ <c>sync_send_all_state_event/2,3</c></seealso>,
+ this function is called to handle the event.</p>
+ <p><c>StateName</c> is the current state name of the <c>gen_fsm</c>
+ process.</p>
+ <p>For a description of the other arguments and possible return values,
+ see <seealso marker="#Module:StateName/3">
+ <c>Module:StateName/3</c></seealso>.</p>
</desc>
</func>
- </funcs>
- <section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions should be exported from a <c>gen_fsm</c>
- callback module.</p>
- <p>In the description, the expression <em>state name</em> is used to
- denote a state of the state machine. <em>state data</em> is used
- to denote the internal state of the Erlang process which
- implements the state machine.</p>
- </section>
- <funcs>
<func>
<name>Module:init(Args) -> Result</name>
- <fsummary>Initialize process and internal state name and state data.</fsummary>
+ <fsummary>Initialize process and internal state name and state data.
+ </fsummary>
<type>
<v>Args = term()</v>
<v>Result = {ok,StateName,StateData} | {ok,StateName,StateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {ok,StateName,StateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {ok,StateName,StateData,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason} | ignore</v>
<v>&nbsp;StateName = atom()</v>
<v>&nbsp;StateData = term()</v>
@@ -504,33 +751,36 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
</type>
<desc>
<marker id="Moduleinit"></marker>
- <p>Whenever a gen_fsm is started using
- <seealso marker="#start/3">gen_fsm:start/3,4</seealso> or
- <seealso marker="#start_link/3">gen_fsm:start_link/3,4</seealso>,
+ <p>Whenever a <c>gen_fsm</c> process is started using
+ <seealso marker="#start/3"><c>start/3,4</c></seealso> or
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>,
this function is called by the new process to initialize.</p>
<p><c>Args</c> is the <c>Args</c> argument provided to the start
function.</p>
- <p>If initialization is successful, the function should return
- <c>{ok,StateName,StateData}</c>,
- <c>{ok,StateName,StateData,Timeout}</c> or <c>{ok,StateName,StateData,hibernate}</c>,
- where <c>StateName</c>
+ <p>If initialization is successful, the function is to return
+ <c>{ok,StateName,StateData}</c>,
+ <c>{ok,StateName,StateData,Timeout}</c>, or
+ <c>{ok,StateName,StateData,hibernate}</c>, where <c>StateName</c>
is the initial state name and <c>StateData</c> the initial
- state data of the gen_fsm.</p>
- <p>If an integer timeout value is provided, a timeout will occur
+ state data of the <c>gen_fsm</c> process.</p>
+ <p>If an integer time-out value is provided, a time-out occurs
unless an event or a message is received within <c>Timeout</c>
- milliseconds. A timeout is represented by the atom
- <c>timeout</c> and should be handled by
- the <c>Module:StateName/2</c> callback functions. The atom
+ milliseconds. A time-out is represented by the atom
+ <c>timeout</c> and is to be handled by the
+ <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso> callback functions. The atom
<c>infinity</c> can be used to wait indefinitely, this is
the default value.</p>
- <p>If <c>hibernate</c> is specified instead of a timeout value, the process will go
- into hibernation when waiting for the next message to arrive (by calling
- <seealso marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>).</p>
- <p>If something goes wrong during the initialization
- the function should return <c>{stop,Reason}</c>, where
- <c>Reason</c> is any term, or <c>ignore</c>.</p>
+ <p>If <c>hibernate</c> is specified instead of a time-out value, the
+ process goes into hibernation when waiting for the next message
+ to arrive (by calling <seealso marker="proc_lib#hibernate/3">
+ <c>proc_lib:hibernate/3</c></seealso>).</p>
+ <p>If the initialization fails, the function returns
+ <c>{stop,Reason}</c>, where <c>Reason</c> is any term,
+ or <c>ignore</c>.</p>
</desc>
</func>
+
<func>
<name>Module:StateName(Event, StateData) -> Result</name>
<fsummary>Handle an asynchronous event.</fsummary>
@@ -538,8 +788,8 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>Event = timeout | term()</v>
<v>StateData = term()</v>
<v>Result = {next_state,NextStateName,NewStateData} </v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
<v>&nbsp;NextStateName = atom()</v>
<v>&nbsp;NewStateData = term()</v>
@@ -547,56 +797,33 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>There should be one instance of this function for each
- possible state name. Whenever a gen_fsm receives an event
- sent using
- <seealso marker="#send_event/2">gen_fsm:send_event/2</seealso>,
+ <p>There is to be one instance of this function for each
+ possible state name. Whenever a <c>gen_fsm</c> process receives
+ an event sent using
+ <seealso marker="#send_event/2"><c>send_event/2</c></seealso>,
the instance of this function with the same name as
the current state name <c>StateName</c> is called to handle
- the event. It is also called if a timeout occurs.</p>
- <p><c>Event</c> is either the atom <c>timeout</c>, if a timeout
+ the event. It is also called if a time-out occurs.</p>
+ <p><c>Event</c> is either the atom <c>timeout</c>, if a time-out
has occurred, or the <c>Event</c> argument provided to
<c>send_event/2</c>.</p>
- <p><c>StateData</c> is the state data of the gen_fsm.</p>
+ <p><c>StateData</c> is the state data of the <c>gen_fsm</c> process.</p>
<p>If the function returns
<c>{next_state,NextStateName,NewStateData}</c>,
- <c>{next_state,NextStateName,NewStateData,Timeout}</c> or
- <c>{next_state,NextStateName,NewStateData,hibernate}</c>,
- the gen_fsm will continue executing with the current state
+ <c>{next_state,NextStateName,NewStateData,Timeout}</c>, or
+ <c>{next_state,NextStateName,NewStateData,hibernate}</c>, the
+ <c>gen_fsm</c> process continues executing with the current state
name set to <c>NextStateName</c> and with the possibly
- updated state data <c>NewStateData</c>. See
- <c>Module:init/1</c> for a description of <c>Timeout</c> and <c>hibernate</c>.</p>
+ updated state data <c>NewStateData</c>. For a description of
+ <c>Timeout</c> and <c>hibernate</c>, see
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.</p>
<p>If the function returns <c>{stop,Reason,NewStateData}</c>,
- the gen_fsm will call
+ the <c>gen_fsm</c> process calls
<c>Module:terminate(Reason,StateName,NewStateData)</c> and
- terminate.</p>
- </desc>
- </func>
- <func>
- <name>Module:handle_event(Event, StateName, StateData) -> Result</name>
- <fsummary>Handle an asynchronous event.</fsummary>
- <type>
- <v>Event = term()</v>
- <v>StateName = atom()</v>
- <v>StateData = term()</v>
- <v>Result = {next_state,NextStateName,NewStateData} </v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
- <v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
- <v>&nbsp;NextStateName = atom()</v>
- <v>&nbsp;NewStateData = term()</v>
- <v>&nbsp;Timeout = int()>0 | infinity</v>
- <v>&nbsp;Reason = term()</v>
- </type>
- <desc>
- <p>Whenever a gen_fsm receives an event sent using
- <seealso marker="#send_all_state_event/2">gen_fsm:send_all_state_event/2</seealso>,
- this function is called to handle the event.</p>
- <p><c>StateName</c> is the current state name of the gen_fsm.</p>
- <p>See <c>Module:StateName/2</c> for a description of the other
- arguments and possible return values.</p>
+ terminates.</p>
</desc>
</func>
+
<func>
<name>Module:StateName(Event, From, StateData) -> Result</name>
<fsummary>Handle a synchronous event.</fsummary>
@@ -605,11 +832,11 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>From = {pid(),Tag}</v>
<v>StateData = term()</v>
<v>Result = {reply,Reply,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,hibernate}</v>
<v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason,Reply,NewStateData} | {stop,Reason,NewStateData}</v>
<v>&nbsp;Reply = term()</v>
<v>&nbsp;NextStateName = atom()</v>
@@ -618,102 +845,56 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>&nbsp;Reason = normal | term()</v>
</type>
<desc>
- <p>There should be one instance of this function for each
- possible state name. Whenever a gen_fsm receives an event
- sent using
- <seealso marker="#sync_send_event/2">gen_fsm:sync_send_event/2,3</seealso>,
+ <p>There is to be one instance of this function for each
+ possible state name. Whenever a <c>gen_fsm</c> process receives an
+ event sent using <seealso marker="#sync_send_event/2">
+ <c>sync_send_event/2,3</c></seealso>,
the instance of this function with the same name as
the current state name <c>StateName</c> is called to handle
the event.</p>
<p><c>Event</c> is the <c>Event</c> argument provided to
- <c>sync_send_event</c>.</p>
+ <c>sync_send_event/2,3</c>.</p>
<p><c>From</c> is a tuple <c>{Pid,Tag}</c> where <c>Pid</c> is
- the pid of the process which called <c>sync_send_event/2,3</c>
+ the pid of the process that called <c>sync_send_event/2,3</c>
and <c>Tag</c> is a unique tag.</p>
- <p><c>StateData</c> is the state data of the gen_fsm.</p>
- <p>If the function returns
- <c>{reply,Reply,NextStateName,NewStateData}</c>,
- <c>{reply,Reply,NextStateName,NewStateData,Timeout}</c> or
- <c>{reply,Reply,NextStateName,NewStateData,hibernate}</c>,
- <c>Reply</c> will be given back to <c>From</c> as the return
- value of <c>sync_send_event/2,3</c>. The gen_fsm then
- continues executing with the current state name set to
- <c>NextStateName</c> and with the possibly updated state data
- <c>NewStateData</c>. See <c>Module:init/1</c> for a
- description of <c>Timeout</c> and <c>hibernate</c>.</p>
- <p>If the function returns
- <c>{next_state,NextStateName,NewStateData}</c>,
- <c>{next_state,NextStateName,NewStateData,Timeout}</c> or
- <c>{next_state,NextStateName,NewStateData,hibernate}</c>,
- the gen_fsm will continue executing in <c>NextStateName</c>
- with <c>NewStateData</c>. Any reply to <c>From</c> must be
- given explicitly using
- <seealso marker="#reply/2">gen_fsm:reply/2</seealso>.</p>
- <p>If the function returns
- <c>{stop,Reason,Reply,NewStateData}</c>, <c>Reply</c> will be
- given back to <c>From</c>. If the function returns
- <c>{stop,Reason,NewStateData}</c>, any reply to <c>From</c>
- must be given explicitly using <c>gen_fsm:reply/2</c>.
- The gen_fsm will then call
- <c>Module:terminate(Reason,StateName,NewStateData)</c> and
- terminate.</p>
- </desc>
- </func>
- <func>
- <name>Module:handle_sync_event(Event, From, StateName, StateData) -> Result</name>
- <fsummary>Handle a synchronous event.</fsummary>
- <type>
- <v>Event = term()</v>
- <v>From = {pid(),Tag}</v>
- <v>StateName = atom()</v>
- <v>StateData = term()</v>
- <v>Result = {reply,Reply,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,hibernate}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
- <v>&nbsp;&nbsp;| {stop,Reason,Reply,NewStateData} | {stop,Reason,NewStateData}</v>
- <v>&nbsp;Reply = term()</v>
- <v>&nbsp;NextStateName = atom()</v>
- <v>&nbsp;NewStateData = term()</v>
- <v>&nbsp;Timeout = int()>0 | infinity</v>
- <v>&nbsp;Reason = term()</v>
- </type>
- <desc>
- <p>Whenever a gen_fsm receives an event sent using
- <seealso marker="#sync_send_all_state_event/2">gen_fsm:sync_send_all_state_event/2,3</seealso>,
- this function is called to handle the event.</p>
- <p><c>StateName</c> is the current state name of the gen_fsm.</p>
- <p>See <c>Module:StateName/3</c> for a description of the other
- arguments and possible return values.</p>
- </desc>
- </func>
- <func>
- <name>Module:handle_info(Info, StateName, StateData) -> Result</name>
- <fsummary>Handle an incoming message.</fsummary>
- <type>
- <v>Info = term()</v>
- <v>StateName = atom()</v>
- <v>StateData = term()</v>
- <v>Result = {next_state,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
- <v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
- <v>&nbsp;NextStateName = atom()</v>
- <v>&nbsp;NewStateData = term()</v>
- <v>&nbsp;Timeout = int()>0 | infinity</v>
- <v>&nbsp;Reason = normal | term()</v>
- </type>
- <desc>
- <p>This function is called by a gen_fsm when it receives any
- other message than a synchronous or asynchronous event (or a
- system message).</p>
- <p><c>Info</c> is the received message.</p>
- <p>See <c>Module:StateName/2</c> for a description of the other
- arguments and possible return values.</p>
+ <p><c>StateData</c> is the state data of the <c>gen_fsm</c> process.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>{reply,Reply,NextStateName,NewStateData}</c>,
+ <c>{reply,Reply,NextStateName,NewStateData,Timeout}</c>, or
+ <c>{reply,Reply,NextStateName,NewStateData,hibernate}</c> is
+ returned, <c>Reply</c> is given back to <c>From</c> as the return
+ value of <c>sync_send_event/2,3</c>. The <c>gen_fsm</c> process
+ then continues executing with the current state name set to
+ <c>NextStateName</c> and with the possibly updated state data
+ <c>NewStateData</c>. For a description of <c>Timeout</c> and
+ <c>hibernate</c>, see
+ <seealso marker="#Module:init/1">
+ <c>Module:init/1</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If <c>{next_state,NextStateName,NewStateData}</c>,
+ <c>{next_state,NextStateName,NewStateData,Timeout}</c>, or
+ <c>{next_state,NextStateName,NewStateData,hibernate}</c> is
+ returned, the <c>gen_fsm</c> process continues executing in
+ <c>NextStateName</c> with <c>NewStateData</c>.
+ Any reply to <c>From</c> must be specified explicitly using
+ <seealso marker="#reply/2"><c>reply/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If the function returns
+ <c>{stop,Reason,Reply,NewStateData}</c>, <c>Reply</c> is
+ given back to <c>From</c>. If the function returns
+ <c>{stop,Reason,NewStateData}</c>, any reply to <c>From</c>
+ must be specified explicitly using <c>reply/2</c>.
+ The <c>gen_fsm</c> process then calls
+ <c>Module:terminate(Reason,StateName,NewStateData)</c> and
+ terminates.</p>
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name>Module:terminate(Reason, StateName, StateData)</name>
<fsummary>Clean up before termination.</fsummary>
@@ -723,133 +904,56 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>StateData = term()</v>
</type>
<desc>
- <p>This function is called by a gen_fsm when it is about to
- terminate. It should be the opposite of <c>Module:init/1</c>
- and do any necessary cleaning up. When it returns, the gen_fsm
- terminates with <c>Reason</c>. The return value is ignored.</p>
+ <p>This function is called by a <c>gen_fsm</c> process when it is about
+ to terminate. It is to be the opposite of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ and do any necessary cleaning up. When it returns, the <c>gen_fsm</c>
+ process terminates with <c>Reason</c>. The return value is ignored.
+ </p>
<p><c>Reason</c> is a term denoting the stop reason,
<c>StateName</c> is the current state name, and
- <c>StateData</c> is the state data of the gen_fsm.</p>
- <p><c>Reason</c> depends on why the gen_fsm is terminating. If
+ <c>StateData</c> is the state data of the <c>gen_fsm</c> process.</p>
+ <p><c>Reason</c> depends on why the <c>gen_fsm</c> process is
+ terminating. If
it is because another callback function has returned a stop
- tuple <c>{stop,..}</c>, <c>Reason</c> will have the value
- specified in that tuple. If it is due to a failure,
+ tuple <c>{stop,..}</c>, <c>Reason</c> has the value
+ specified in that tuple. If it is because of a failure,
<c>Reason</c> is the error reason.</p>
- <p>If the gen_fsm is part of a supervision tree and is ordered
- by its supervisor to terminate, this function will be called
+ <p>If the <c>gen_fsm</c> process is part of a supervision tree and is
+ ordered by its supervisor to terminate, this function is called
with <c>Reason=shutdown</c> if the following conditions apply:</p>
<list type="bulleted">
- <item>the gen_fsm has been set to trap exit signals, and</item>
- <item>the shutdown strategy as defined in the supervisor's
- child specification is an integer timeout value, not
- <c>brutal_kill</c>.</item>
+ <item>
+ <p>The <c>gen_fsm</c> process has been set to trap exit signals.</p>
+ </item>
+ <item>
+ <p>The shutdown strategy as defined in the child specification of
+ the supervisor is an integer time-out value, not
+ <c>brutal_kill</c>.</p>
+ </item>
</list>
- <p>Even if the gen_fsm is <em>not</em> part of a supervision tree,
- this function will be called if it receives an <c>'EXIT'</c>
- message from its parent. <c>Reason</c> will be the same as in
- the <c>'EXIT'</c> message.</p>
- <p>Otherwise, the gen_fsm will be immediately terminated.</p>
- <p>Note that for any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> the gen_fsm is
- assumed to terminate due to an error and
- an error report is issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.</p>
- </desc>
- </func>
- <func>
- <name>Module:code_change(OldVsn, StateName, StateData, Extra) -> {ok, NextStateName, NewStateData}</name>
- <fsummary>Update the internal state data during upgrade/downgrade.</fsummary>
- <type>
- <v>OldVsn = Vsn | {down, Vsn}</v>
- <v>&nbsp;&nbsp;Vsn = term()</v>
- <v>StateName = NextStateName = atom()</v>
- <v>StateData = NewStateData = term()</v>
- <v>Extra = term()</v>
- </type>
- <desc>
- <p>This function is called by a gen_fsm when it should update
- its internal state data during a release upgrade/downgrade,
- i.e. when the instruction <c>{update,Module,Change,...}</c>
- where <c>Change={advanced,Extra}</c> is given in
- the <c>appup</c> file. See
- <seealso marker="doc/design_principles:release_handling#instr">OTP Design Principles</seealso>.</p>
- <p>In the case of an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
- in the case of a downgrade, <c>OldVsn</c> is
- <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
- attribute(s) of the old version of the callback module
- <c>Module</c>. If no such attribute is defined, the version is
- the checksum of the BEAM file.</p>
- <p><c>StateName</c> is the current state name and
- <c>StateData</c> the internal state data of the gen_fsm.</p>
- <p><c>Extra</c> is passed as-is from the <c>{advanced,Extra}</c>
- part of the update instruction.</p>
- <p>The function should return the new current state name and
- updated internal data.</p>
- </desc>
- </func>
- <func>
- <name>Module:format_status(Opt, [PDict, StateData]) -> Status</name>
- <fsummary>Optional function for providing a term describing the
- current gen_fsm status.</fsummary>
- <type>
- <v>Opt = normal | terminate</v>
- <v>PDict = [{Key, Value}]</v>
- <v>StateData = term()</v>
- <v>Status = term()</v>
- </type>
- <desc>
- <note>
- <p>This callback is optional, so callback modules need not
- export it. The gen_fsm module provides a default
- implementation of this function that returns the callback
- module state data.</p>
- </note>
- <p>This function is called by a gen_fsm process when:</p>
- <list type="bulleted">
- <item>One
- of <seealso marker="sys#get_status/1">sys:get_status/1,2</seealso>
- is invoked to get the gen_fsm status. <c>Opt</c> is set to
- the atom <c>normal</c> for this case.</item>
- <item>The gen_fsm terminates abnormally and logs an
- error. <c>Opt</c> is set to the atom <c>terminate</c> for
- this case.</item>
- </list>
- <p>This function is useful for customising the form and
- appearance of the gen_fsm status for these cases. A callback
- module wishing to customise the <c>sys:get_status/1,2</c>
- return value as well as how its status appears in
- termination error logs exports an instance
- of <c>format_status/2</c> that returns a term describing the
- current status of the gen_fsm.</p>
- <p><c>PDict</c> is the current value of the gen_fsm's
- process dictionary.</p>
- <p><c>StateData</c> is the internal state data of the
- gen_fsm.</p>
- <p>The function should return <c>Status</c>, a term that
- customises the details of the current state and status of
- the gen_fsm. There are no restrictions on the
- form <c>Status</c> can take, but for
- the <c>sys:get_status/1,2</c> case (when <c>Opt</c>
- is <c>normal</c>), the recommended form for
- the <c>Status</c> value is <c>[{data, [{"StateData",
- Term}]}]</c> where <c>Term</c> provides relevant details of
- the gen_fsm state data. Following this recommendation isn't
- required, but doing so will make the callback module status
- consistent with the rest of the <c>sys:get_status/1,2</c>
- return value.</p>
- <p>One use for this function is to return compact alternative
- state data representations to avoid having large state terms
- printed in logfiles.</p>
+ <p>Even if the <c>gen_fsm</c> process is <em>not</em> part of a
+ supervision tree,
+ this function is called if it receives an <c>'EXIT'</c>
+ message from its parent. <c>Reason</c> is the same as in
+ the <c>'EXIT'</c> message.</p>
+ <p>Otherwise, the <c>gen_fsm</c> process terminates immediately.</p>
+ <p>Notice that for any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c> the <c>gen_fsm</c> process
+ is assumed to terminate because of an error and an error report is
+ issued using <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gen_event">gen_event(3)</seealso>,
- <seealso marker="gen_server">gen_server(3)</seealso>,
- <seealso marker="supervisor">supervisor(3)</seealso>,
- <seealso marker="proc_lib">proc_lib(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="gen_server"><c>gen_server(3)</c></seealso>,
+ <seealso marker="gen_statem"><c>gen_statem(3)</c></seealso>,
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>,
+ <seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gen_server.xml b/lib/stdlib/doc/src/gen_server.xml
index 6d04771cd4..4a7dd60858 100644
--- a/lib/stdlib/doc/src/gen_server.xml
+++ b/lib/stdlib/doc/src/gen_server.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,18 +29,21 @@
<rev></rev>
</header>
<module>gen_server</module>
- <modulesummary>Generic Server Behaviour</modulesummary>
+ <modulesummary>Generic server behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing the server of a client-server
- relation. A generic server process (gen_server) implemented using
- this module will have a standard set of interface functions and
- include functionality for tracing and error reporting. It will
- also fit into an OTP supervision tree. Refer to
- <seealso marker="doc/design_principles:gen_server_concepts">OTP Design Principles</seealso> for more information.</p>
- <p>A gen_server assumes all specific parts to be located in a
- callback module exporting a pre-defined set of functions.
- The relationship between the behaviour functions and the callback
- functions can be illustrated as follows:</p>
+ <p>This behavior module provides the server of a client-server
+ relation. A generic server process (<c>gen_server</c>) implemented using
+ this module has a standard set of interface functions and
+ includes functionality for tracing and error reporting. It also
+ fits into an OTP supervision tree. For more information, see section
+ <seealso marker="doc/design_principles:gen_server_concepts">
+ gen_server Behaviour</seealso> in OTP Design Principles.</p>
+
+ <p>A <c>gen_server</c> process assumes all specific parts to be located in
+ a callback module exporting a predefined set of functions.
+ The relationship between the behavior functions and the callback
+ functions is as follows:</p>
+
<pre>
gen_server module Callback module
----------------- ---------------
@@ -59,175 +62,65 @@ gen_server:abcast -----> Module:handle_cast/2
- -----> Module:terminate/2
-- -----> Module:code_change/3 </pre>
- <p>If a callback function fails or returns a bad value,
- the gen_server will terminate.</p>
- <p>A gen_server handles system messages as documented in
- <seealso marker="sys">sys(3)</seealso>. The <c>sys</c> module
- can be used for debugging a gen_server.</p>
- <p>Note that a gen_server does not trap exit signals automatically,
- this must be explicitly initiated in the callback module.</p>
+- -----> Module:code_change/3</pre>
+
+ <p>If a callback function fails or returns a bad value, the
+ <c>gen_server</c> process terminates.</p>
+
+ <p>A <c>gen_server</c> process handles system messages as described in
+ <seealso marker="sys"><c>sys(3)</c></seealso>. The <c>sys</c> module
+ can be used for debugging a <c>gen_server</c> process.</p>
+
+ <p>Notice that a <c>gen_server</c> process does not trap exit signals
+ automatically, this must be explicitly initiated in the callback
+ module.</p>
+
<p>Unless otherwise stated, all functions in this module fail if
- the specified gen_server does not exist or if bad arguments are
- given.</p>
-
- <p>The gen_server process can go into hibernation
- (see <seealso marker="erts:erlang#erlang:hibernate/3">erlang(3)</seealso>) if a callback
- function specifies <c>'hibernate'</c> instead of a timeout value. This
- might be useful if the server is expected to be idle for a long
- time. However this feature should be used with care as hibernation
- implies at least two garbage collections (when hibernating and
- shortly after waking up) and is not something you'd want to do
- between each call to a busy server.</p>
+ the specified <c>gen_server</c> process does not exist or if bad
+ arguments are specified.</p>
+ <p>The <c>gen_server</c> process can go into hibernation
+ (see <seealso marker="erts:erlang#hibernate/3">
+ <c>erlang:hibernate/3</c></seealso>) if a callback
+ function specifies <c>'hibernate'</c> instead of a time-out value. This
+ can be useful if the server is expected to be idle for a long
+ time. However, use this feature with care, as hibernation
+ implies at least two garbage collections (when hibernating and
+ shortly after waking up) and is not something you want to do
+ between each call to a busy server.</p>
</description>
+
<funcs>
<func>
- <name>start_link(Module, Args, Options) -> Result</name>
- <name>start_link(ServerName, Module, Args, Options) -> Result</name>
- <fsummary>Create a gen_server process in a supervision tree.</fsummary>
- <type>
- <v>ServerName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Module = atom()</v>
- <v>Args = term()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}</v>
- <v>&nbsp;&nbsp;SOpts = [term()]</v>
- <v>Result = {ok,Pid} | ignore | {error,Error}</v>
- <v>&nbsp;Pid = pid()</v>
- <v>&nbsp;Error = {already_started,Pid} | term()</v>
- </type>
- <desc>
- <p>Creates a gen_server process as part of a supervision tree.
- The function should be called, directly or indirectly, by
- the supervisor. It will, among other things, ensure that
- the gen_server is linked to the supervisor.</p>
- <p>The gen_server process calls <c>Module:init/1</c> to
- initialize. To ensure a synchronized start-up procedure,
- <c>start_link/3,4</c> does not return until
- <c>Module:init/1</c> has returned.</p>
- <p>If <c>ServerName={local,Name}</c> the gen_server is
- registered locally as <c>Name</c> using <c>register/2</c>.
- If <c>ServerName={global,GlobalName}</c> the gen_server is
- registered globally as <c>GlobalName</c> using
- <c>global:register_name/2</c>. If no name is provided,
- the gen_server is not registered.
- If <c>ServerName={via,Module,ViaName}</c>, the gen_server will
- register with the registry represented by <c>Module</c>.
- The <c>Module</c> callback should export the functions
- <c>register_name/2</c>, <c>unregister_name/1</c>,
- <c>whereis_name/1</c> and <c>send/2</c>, which should behave like the
- corresponding functions in <c>global</c>. Thus,
- <c>{via,global,GlobalName}</c> is a valid reference.</p>
- <p><c>Module</c> is the name of the callback module.</p>
- <p><c>Args</c> is an arbitrary term which is passed as
- the argument to <c>Module:init/1</c>.</p>
- <p>If the option <c>{timeout,Time}</c> is present,
- the gen_server is allowed to spend <c>Time</c> milliseconds
- initializing or it will be terminated and the start function
- will return <c>{error,timeout}</c>.
- </p>
- <p>If the option <c>{debug,Dbgs}</c> is present,
- the corresponding <c>sys</c> function will be called for each
- item in <c>Dbgs</c>. See
- <seealso marker="sys">sys(3)</seealso>.</p>
- <p>If the option <c>{spawn_opt,SOpts}</c> is present,
- <c>SOpts</c> will be passed as option list to
- the <c>spawn_opt</c> BIF which is used to spawn
- the gen_server. See
- <seealso marker="erts:erlang#spawn_opt/2">erlang(3)</seealso>.</p>
- <note>
- <p>Using the spawn option <c>monitor</c> is currently not
- allowed, but will cause the function to fail with reason
- <c>badarg</c>.</p>
- </note>
- <p>If the gen_server is successfully created and initialized
- the function returns <c>{ok,Pid}</c>, where <c>Pid</c> is
- the pid of the gen_server. If there already exists a process
- with the specified <c>ServerName</c> the function returns
- <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
- the pid of that process.</p>
- <p>If <c>Module:init/1</c> fails with <c>Reason</c>,
- the function returns <c>{error,Reason}</c>. If
- <c>Module:init/1</c> returns <c>{stop,Reason}</c> or
- <c>ignore</c>, the process is terminated and the function
- returns <c>{error,Reason}</c> or <c>ignore</c>, respectively.</p>
- </desc>
- </func>
- <func>
- <name>start(Module, Args, Options) -> Result</name>
- <name>start(ServerName, Module, Args, Options) -> Result</name>
- <fsummary>Create a stand-alone gen_server process.</fsummary>
- <type>
- <v>ServerName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Module = atom()</v>
- <v>Args = term()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}</v>
- <v>&nbsp;&nbsp;SOpts = [term()]</v>
- <v>Result = {ok,Pid} | ignore | {error,Error}</v>
- <v>&nbsp;Pid = pid()</v>
- <v>&nbsp;Error = {already_started,Pid} | term()</v>
- </type>
- <desc>
- <p>Creates a stand-alone gen_server process, i.e. a gen_server
- which is not part of a supervision tree and thus has no
- supervisor.</p>
- <p>See <seealso marker="#start_link/3">start_link/3,4</seealso>
- for a description of arguments and return values.</p>
- </desc>
- </func>
- <func>
- <name>stop(ServerRef) -> ok</name>
- <name>stop(ServerRef, Reason, Timeout) -> ok</name>
- <fsummary>Synchronously stop a generic server.</fsummary>
+ <name>abcast(Name, Request) -> abcast</name>
+ <name>abcast(Nodes, Name, Request) -> abcast</name>
+ <fsummary>Send an asynchronous request to many generic servers.</fsummary>
<type>
- <v>ServerRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>Nodes = [Node]</v>
<v>&nbsp;Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Reason = term()</v>
- <v>Timeout = int()>0 | infinity</v>
+ <v>Name = atom()</v>
+ <v>Request = term()</v>
</type>
<desc>
- <p>Orders a generic server to exit with the
- given <c>Reason</c> and waits for it to terminate. The
- gen_server will call
- <seealso marker="#Module:terminate/2">Module:terminate/2</seealso>
- before exiting.</p>
- <p>The function returns <c>ok</c> if the server terminates
- with the expected reason. Any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> will cause an
- error report to be issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.
- The default <c>Reason</c> is <c>normal</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
- specifies how many milliseconds to wait for the server to
- terminate, or the atom <c>infinity</c> to wait
- indefinitely. The default value is <c>infinity</c>. If the
- server has not terminated within the specified time, a
- <c>timeout</c> exception is raised.</p>
- <p>If the process does not exist, a <c>noproc</c> exception
- is raised.</p>
+ <p>Sends an asynchronous request to the <c>gen_server</c> processes
+ locally registered as <c>Name</c> at the specified nodes. The function
+ returns immediately and ignores nodes that do not exist, or
+ where the <c>gen_server</c> <c>Name</c> does not exist.
+ The <c>gen_server</c> processes call
+ <seealso marker="#Module:handle_cast/2">
+ <c>Module:handle_cast/2</c></seealso> to handle the request.</p>
+ <p>For a description of the arguments, see
+ <seealso marker="#multi_call/2"><c>multi_call/2,3,4</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>call(ServerRef, Request) -> Reply</name>
<name>call(ServerRef, Request, Timeout) -> Reply</name>
<fsummary>Make a synchronous call to a generic server.</fsummary>
<type>
- <v>ServerRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>ServerRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
<v>&nbsp;Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Request = term()</v>
@@ -235,47 +128,126 @@ gen_server:abcast -----> Module:handle_cast/2
<v>Reply = term()</v>
</type>
<desc>
- <p>Makes a synchronous call to the gen_server <c>ServerRef</c>
+ <p>Makes a synchronous call to the <c>ServerRef</c> of the
+ <c>gen_server</c> process
by sending a request and waiting until a reply arrives or a
- timeout occurs. The gen_server will call
- <c>Module:handle_call/3</c> to handle the request.</p>
- <p><c>ServerRef</c> can be:</p>
+ time-out occurs. The <c>gen_server</c> process calls
+ <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso> to handle the request.</p>
+ <p><c>ServerRef</c> can be any of the following:</p>
<list type="bulleted">
- <item>the pid,</item>
- <item><c>Name</c>, if the gen_server is locally registered,</item>
- <item><c>{Name,Node}</c>, if the gen_server is locally
- registered at another node, or</item>
- <item><c>{global,GlobalName}</c>, if the gen_server is
- globally registered.</item>
- <item><c>{via,Module,ViaName}</c>, if the gen_server is
- registered through an alternative process registry.</item>
+ <item>The pid</item>
+ <item><c>Name</c>, if the <c>gen_server</c> process is locally
+ registered</item>
+ <item><c>{Name,Node}</c>, if the <c>gen_server</c> process is locally
+ registered at another node</item>
+ <item><c>{global,GlobalName}</c>, if the <c>gen_server</c> process is
+ globally registered</item>
+ <item><c>{via,Module,ViaName}</c>, if the <c>gen_server</c> process is
+ registered through an alternative process registry</item>
</list>
- <p><c>Request</c> is an arbitrary term which is passed as one of
+ <p><c>Request</c> is any term that is passed as one of
the arguments to <c>Module:handle_call/3</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
+ <p><c>Timeout</c> is an integer greater than zero that
specifies how many milliseconds to wait for a reply, or
- the atom <c>infinity</c> to wait indefinitely. Default value
- is 5000. If no reply is received within the specified time,
+ the atom <c>infinity</c> to wait indefinitely. Defaults to
+ 5000. If no reply is received within the specified time,
the function call fails. If the caller catches the failure
and continues running, and the server is just late with the reply,
- it may arrive at any time later into the caller's message queue.
+ it can arrive at any time later into the message queue of the caller.
The caller must in this case be prepared for this
and discard any such garbage messages that are two element
tuples with a reference as the first element.</p>
<p>The return value <c>Reply</c> is defined in the return value
of <c>Module:handle_call/3</c>.</p>
- <p>The call may fail for several reasons, including timeout and
- the called gen_server dying before or during the call.</p>
- <p>The ancient behaviour of sometimes consuming the server
+ <p>The call can fail for many reasons, including time-out and the
+ called <c>gen_server</c> process dying before or during the call.</p>
+ <note>
+ <p>The ancient behavior of sometimes consuming the server
exit message if the server died during the call while
- linked to the client has been removed in OTP R12B/Erlang 5.6.</p>
+ linked to the client was removed in Erlang 5.6/OTP R12B.</p>
+ </note>
</desc>
</func>
+
+ <func>
+ <name>cast(ServerRef, Request) -> ok</name>
+ <fsummary>Send an asynchronous request to a generic server.</fsummary>
+ <type>
+ <v>ServerRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Node = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Request = term()</v>
+ </type>
+ <desc>
+ <p>Sends an asynchronous request to the <c>ServerRef</c> of the
+ <c>gen_server</c> process
+ and returns <c>ok</c> immediately, ignoring
+ if the destination node or <c>gen_server</c> process does not exist.
+ The <c>gen_server</c> process calls
+ <seealso marker="#Module:handle_cast/2">
+ <c>Module:handle_cast/2</c></seealso> to handle the request.</p>
+ <p>For a description of <c>ServerRef</c>, see
+ <seealso marker="#call/2"><c>call/2,3</c></seealso>.</p>
+ <p><c>Request</c> is any term that is passed as one
+ of the arguments to <c>Module:handle_cast/2</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>enter_loop(Module, Options, State)</name>
+ <name>enter_loop(Module, Options, State, ServerName)</name>
+ <name>enter_loop(Module, Options, State, Timeout)</name>
+ <name>enter_loop(Module, Options, State, ServerName, Timeout)</name>
+ <fsummary>Enter the <c>gen_server</c> receive loop.</fsummary>
+ <type>
+ <v>Module = atom()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>State = term()</v>
+ <v>ServerName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Timeout = int() | infinity</v>
+ </type>
+ <desc>
+ <p>Makes an existing process into a <c>gen_server</c> process. Does not
+ return, instead the calling process enters the <c>gen_server</c>
+ process receive
+ loop and becomes a <c>gen_server</c> process. The process
+ <em>must</em> have been started using one of the start functions in
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>. The user is
+ responsible for any initialization of the process, including
+ registering a name for it.</p>
+ <p>This function is useful when a more complex initialization procedure
+ is needed than the <c>gen_server</c> process behavior provides.</p>
+ <p><c>Module</c>, <c>Options</c>, and <c>ServerName</c> have
+ the same meanings as when calling
+ <seealso marker="#start_link/3"><c>start[_link]/3,4</c></seealso>.
+ However, if <c>ServerName</c> is specified, the process must
+ have been registered accordingly <em>before</em> this function
+ is called.</p>
+ <p><c>State</c> and <c>Timeout</c> have the same meanings as in
+ the return value of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.
+ The callback module <c>Module</c> does not need to
+ export an <c>init/1</c> function.</p>
+ <p>The function fails if the calling process was not started by a
+ <c>proc_lib</c> start function, or if it is not registered
+ according to <c>ServerName</c>.</p>
+ </desc>
+ </func>
+
<func>
<name>multi_call(Name, Request) -> Result</name>
<name>multi_call(Nodes, Name, Request) -> Result</name>
<name>multi_call(Nodes, Name, Request, Timeout) -> Result</name>
- <fsummary>Make a synchronous call to several generic servers.</fsummary>
+ <fsummary>Make a synchronous call to many generic servers.</fsummary>
<type>
<v>Nodes = [Node]</v>
<v>&nbsp;Node = atom()</v>
@@ -288,203 +260,339 @@ gen_server:abcast -----> Module:handle_cast/2
<v>BadNodes = [Node]</v>
</type>
<desc>
- <p>Makes a synchronous call to all gen_servers locally
+ <p>Makes a synchronous call to all <c>gen_server</c> processes locally
registered as <c>Name</c> at the specified nodes by first
- sending a request to every node and then waiting for
- the replies. The gen_servers will call
- <c>Module:handle_call/3</c> to handle the request.</p>
- <p>The function returns a tuple <c>{Replies,BadNodes}</c> where
+ sending a request to every node and then waits for
+ the replies. The <c>gen_server</c> process calls
+ <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso> to handle the request.</p>
+ <p>The function returns a tuple <c>{Replies,BadNodes}</c>, where
<c>Replies</c> is a list of <c>{Node,Reply}</c> and
<c>BadNodes</c> is a list of node that either did not exist,
- or where the gen_server <c>Name</c> did not exist or did not
+ or where the <c>gen_server</c> <c>Name</c> did not exist or did not
reply.</p>
<p><c>Nodes</c> is a list of node names to which the request
- should be sent. Default value is the list of all known nodes
+ is to be sent. Default value is the list of all known nodes
<c>[node()|nodes()]</c>.</p>
<p><c>Name</c> is the locally registered name of each
- gen_server.</p>
- <p><c>Request</c> is an arbitrary term which is passed as one of
+ <c>gen_server</c> process.</p>
+ <p><c>Request</c> is any term that is passed as one of
the arguments to <c>Module:handle_call/3</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
+ <p><c>Timeout</c> is an integer greater than zero that
specifies how many milliseconds to wait for each reply, or
- the atom <c>infinity</c> to wait indefinitely. Default value
- is <c>infinity</c>. If no reply is received from a node within
+ the atom <c>infinity</c> to wait indefinitely. Defaults
+ to <c>infinity</c>. If no reply is received from a node within
the specified time, the node is added to <c>BadNodes</c>.</p>
- <p>When a reply <c>Reply</c> is received from the gen_server at
- a node <c>Node</c>, <c>{Node,Reply}</c> is added to
+ <p>When a reply <c>Reply</c> is received from the <c>gen_server</c>
+ process at a node <c>Node</c>, <c>{Node,Reply}</c> is added to
<c>Replies</c>. <c>Reply</c> is defined in the return value of
<c>Module:handle_call/3</c>.</p>
<warning>
- <p>If one of the nodes is not capable of process monitors,
- for example C or Java nodes, and the gen_server is not started
- when the requests are sent, but starts within 2 seconds,
- this function waits the whole <c>Timeout</c>,
- which may be infinity.</p>
+ <p>If one of the nodes cannot process monitors, for example,
+ C or Java nodes, and the <c>gen_server</c> process is not started
+ when the requests are sent, but starts within 2 seconds,
+ this function waits the whole <c>Timeout</c>,
+ which may be infinity.</p>
<p>This problem does not exist if all nodes are Erlang nodes.</p>
</warning>
- <p>To prevent late answers (after the timeout) from polluting
- the caller's message queue, a middleman process is used to
- do the actual calls. Late answers will then be discarded
+ <p>To prevent late answers (after the time-out) from polluting
+ the message queue of the caller, a middleman process is used to
+ do the calls. Late answers are then discarded
when they arrive to a terminated process.</p>
</desc>
</func>
+
<func>
- <name>cast(ServerRef, Request) -> ok</name>
- <fsummary>Send an asynchronous request to a generic server.</fsummary>
+ <name>reply(Client, Reply) -> Result</name>
+ <fsummary>Send a reply to a client.</fsummary>
<type>
- <v>ServerRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>&nbsp;Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Request = term()</v>
+ <v>Client - see below</v>
+ <v>Reply = term()</v>
+ <v>Result = term()</v>
</type>
<desc>
- <p>Sends an asynchronous request to the gen_server
- <c>ServerRef</c> and returns <c>ok</c> immediately, ignoring
- if the destination node or gen_server does not exist.
- The gen_server will call <c>Module:handle_cast/2</c> to
- handle the request.</p>
- <p>See <seealso marker="#call/2">call/2,3</seealso> for a
- description of <c>ServerRef</c>.</p>
- <p><c>Request</c> is an arbitrary term which is passed as one
- of the arguments to <c>Module:handle_cast/2</c>.</p>
+ <p>This function can be used by a <c>gen_server</c> process to
+ explicitly send a reply to a client that called
+ <seealso marker="#call/2"><c>call/2,3</c></seealso> or
+ <seealso marker="#multi_call/2"><c>multi_call/2,3,4</c></seealso>,
+ when the reply cannot be defined in the return value of
+ <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso>.</p>
+ <p><c>Client</c> must be the <c>From</c> argument provided to
+ the callback function. <c>Reply</c> is any term
+ given back to the client as the return value of
+ <c>call/2,3</c> or <c>multi_call/2,3,4</c>.</p>
+ <p>The return value <c>Result</c> is not further defined, and
+ is always to be ignored.</p>
</desc>
</func>
+
<func>
- <name>abcast(Name, Request) -> abcast</name>
- <name>abcast(Nodes, Name, Request) -> abcast</name>
- <fsummary>Send an asynchronous request to several generic servers.</fsummary>
+ <name>start(Module, Args, Options) -> Result</name>
+ <name>start(ServerName, Module, Args, Options) -> Result</name>
+ <fsummary>Create a standalone <c>gen_server</c> process.</fsummary>
<type>
- <v>Nodes = [Node]</v>
- <v>&nbsp;Node = atom()</v>
- <v>Name = atom()</v>
- <v>Request = term()</v>
+ <v>ServerName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Module = atom()</v>
+ <v>Args = term()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>&nbsp;&nbsp;SOpts = [term()]</v>
+ <v>Result = {ok,Pid} | ignore | {error,Error}</v>
+ <v>&nbsp;Pid = pid()</v>
+ <v>&nbsp;Error = {already_started,Pid} | term()</v>
</type>
<desc>
- <p>Sends an asynchronous request to the gen_servers locally
- registered as <c>Name</c> at the specified nodes. The function
- returns immediately and ignores nodes that do not exist, or
- where the gen_server <c>Name</c> does not exist.
- The gen_servers will call <c>Module:handle_cast/2</c> to
- handle the request.</p>
- <p>See
- <seealso marker="#multi_call/2">multi_call/2,3,4</seealso>
- for a description of the arguments.</p>
+ <p>Creates a standalone <c>gen_server</c> process, that is, a
+ <c>gen_server</c> process that is not part of a supervision tree
+ and thus has no supervisor.</p>
+ <p>For a description of arguments and return values, see
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>reply(Client, Reply) -> Result</name>
- <fsummary>Send a reply to a client.</fsummary>
+ <name>start_link(Module, Args, Options) -> Result</name>
+ <name>start_link(ServerName, Module, Args, Options) -> Result</name>
+ <fsummary>Create a <c>gen_server</c> process in a supervision tree.
+ </fsummary>
<type>
- <v>Client - see below</v>
- <v>Reply = term()</v>
- <v>Result = term()</v>
+ <v>ServerName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Module = atom()</v>
+ <v>Args = term()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>&nbsp;&nbsp;SOpts = [term()]</v>
+ <v>Result = {ok,Pid} | ignore | {error,Error}</v>
+ <v>&nbsp;Pid = pid()</v>
+ <v>&nbsp;Error = {already_started,Pid} | term()</v>
</type>
<desc>
- <p>This function can be used by a gen_server to explicitly send
- a reply to a client that called <c>call/2,3</c> or
- <c>multi_call/2,3,4</c>, when the reply cannot be defined in
- the return value of <c>Module:handle_call/3</c>.</p>
- <p><c>Client</c> must be the <c>From</c> argument provided to
- the callback function. <c>Reply</c> is an arbitrary term,
- which will be given back to the client as the return value of
- <c>call/2,3</c> or <c>multi_call/2,3,4</c>.</p>
- <p>The return value <c>Result</c> is not further defined, and
- should always be ignored.</p>
+ <p>Creates a <c>gen_server</c> process as part of a supervision tree.
+ This function is to be called, directly or indirectly, by
+ the supervisor. For example, it ensures that
+ the <c>gen_server</c> process is linked to the supervisor.</p>
+ <p>The <c>gen_server</c> process calls
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> to
+ initialize. To ensure a synchronized startup procedure,
+ <c>start_link/3,4</c> does not return until
+ <c>Module:init/1</c> has returned.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>ServerName={local,Name}</c>, the <c>gen_server</c> process
+ is registered locally as <c>Name</c> using <c>register/2</c>.</p>
+ </item>
+ <item>
+ <p>If <c>ServerName={global,GlobalName}</c>, the <c>gen_server</c>
+ process id registered globally as <c>GlobalName</c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso> If no name is
+ provided, the <c>gen_server</c> process is not registered.</p>
+ </item>
+ <item>
+ <p>If <c>ServerName={via,Module,ViaName}</c>, the <c>gen_server</c>
+ process registers with the registry represented by <c>Module</c>.
+ The <c>Module</c> callback is to export the functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>,
+ <c>whereis_name/1</c>, and <c>send/2</c>, which are to behave
+ like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p><c>Module</c> is the name of the callback module.</p>
+ <p><c>Args</c> is any term that is passed as
+ the argument to
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If option <c>{timeout,Time}</c> is present, the <c>gen_server</c>
+ process is allowed to spend <c>Time</c> milliseconds
+ initializing or it is terminated and the start function
+ returns <c>{error,timeout}</c>.</p>
+ </item>
+ <item>
+ <p>If option <c>{debug,Dbgs}</c> is present,
+ the corresponding <c>sys</c> function is called for each
+ item in <c>Dbgs</c>; see
+ <seealso marker="sys"><c>sys(3)</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If option <c>{spawn_opt,SOpts}</c> is present,
+ <c>SOpts</c> is passed as option list to
+ the <c>spawn_opt</c> BIF, which is used to spawn
+ the <c>gen_server</c> process; see
+ <seealso marker="erts:erlang#spawn_opt/2">
+ <c>spawn_opt/2</c></seealso>.</p>
+ </item>
+ </list>
+ <note>
+ <p>Using spawn option <c>monitor</c> is not
+ allowed, it causes the function to fail with reason
+ <c>badarg</c>.</p>
+ </note>
+ <p>If the <c>gen_server</c> process is successfully created and
+ initialized, the function returns <c>{ok,Pid}</c>, where <c>Pid</c>
+ is the pid of the <c>gen_server</c> process. If a process with the
+ specified <c>ServerName</c> exists already, the function returns
+ <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
+ the pid of that process.</p>
+ <p>If <c>Module:init/1</c> fails with <c>Reason</c>,
+ the function returns <c>{error,Reason}</c>. If
+ <c>Module:init/1</c> returns <c>{stop,Reason}</c> or
+ <c>ignore</c>, the process is terminated and the function
+ returns <c>{error,Reason}</c> or <c>ignore</c>, respectively.</p>
</desc>
</func>
+
<func>
- <name>enter_loop(Module, Options, State)</name>
- <name>enter_loop(Module, Options, State, ServerName)</name>
- <name>enter_loop(Module, Options, State, Timeout)</name>
- <name>enter_loop(Module, Options, State, ServerName, Timeout)</name>
- <fsummary>Enter the gen_server receive loop</fsummary>
+ <name>stop(ServerRef) -> ok</name>
+ <name>stop(ServerRef, Reason, Timeout) -> ok</name>
+ <fsummary>Synchronously stop a generic server.</fsummary>
<type>
- <v>Module = atom()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
- <v>State = term()</v>
- <v>ServerName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
+ <v>ServerRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Timeout = int() | infinity</v>
+ <v>Reason = term()</v>
+ <v>Timeout = int()>0 | infinity</v>
</type>
<desc>
- <p>Makes an existing process into a gen_server. Does not return,
- instead the calling process will enter the gen_server receive
- loop and become a gen_server process. The process
- <em>must</em> have been started using one of the start
- functions in <c>proc_lib</c>, see
- <seealso marker="proc_lib">proc_lib(3)</seealso>. The user is
- responsible for any initialization of the process, including
- registering a name for it.</p>
- <p>This function is useful when a more complex initialization
- procedure is needed than the gen_server behaviour provides.</p>
- <p><c>Module</c>, <c>Options</c> and <c>ServerName</c> have
- the same meanings as when calling
- <seealso marker="#start_link/3">gen_server:start[_link]/3,4</seealso>.
- However, if <c>ServerName</c> is specified, the process must
- have been registered accordingly <em>before</em> this function
- is called.</p>
- <p><c>State</c> and <c>Timeout</c> have the same meanings as in
- the return value of
- <seealso marker="#Moduleinit">Module:init/1</seealso>.
- Also, the callback module <c>Module</c> does not need to
- export an <c>init/1</c> function. </p>
- <p>Failure: If the calling process was not started by a
- <c>proc_lib</c> start function, or if it is not registered
- according to <c>ServerName</c>.</p>
+ <p>Orders a generic server to exit with the specified <c>Reason</c>
+ and waits for it to terminate. The <c>gen_server</c> process calls
+ <seealso marker="#Module:terminate/2">
+ <c>Module:terminate/2</c></seealso> before exiting.</p>
+ <p>The function returns <c>ok</c> if the server terminates
+ with the expected reason. Any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c> causes an
+ error report to be issued using
+ <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.
+ The default <c>Reason</c> is <c>normal</c>.</p>
+ <p><c>Timeout</c> is an integer greater than zero that
+ specifies how many milliseconds to wait for the server to
+ terminate, or the atom <c>infinity</c> to wait
+ indefinitely. Defaults to <c>infinity</c>. If the
+ server has not terminated within the specified time, a
+ <c>timeout</c> exception is raised.</p>
+ <p>If the process does not exist, a <c>noproc</c> exception
+ is raised.</p>
</desc>
</func>
</funcs>
<section>
- <title>CALLBACK FUNCTIONS</title>
+ <title>Callback Functions</title>
<p>The following functions
- should be exported from a <c>gen_server</c> callback module.</p>
+ are to be exported from a <c>gen_server</c> callback module.</p>
</section>
+
<funcs>
<func>
- <name>Module:init(Args) -> Result</name>
- <fsummary>Initialize process and internal state.</fsummary>
+ <name>Module:code_change(OldVsn, State, Extra) -> {ok, NewState} | {error, Reason}</name>
+ <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
<type>
- <v>Args = term()</v>
- <v>Result = {ok,State} | {ok,State,Timeout} | {ok,State,hibernate}</v>
- <v>&nbsp;| {stop,Reason} | ignore</v>
- <v>&nbsp;State = term()</v>
- <v>&nbsp;Timeout = int()>=0 | infinity</v>
- <v>&nbsp;Reason = term()</v>
+ <v>OldVsn = Vsn | {down, Vsn}</v>
+ <v>&nbsp;&nbsp;Vsn = term()</v>
+ <v>State = NewState = term()</v>
+ <v>Extra = term()</v>
+ <v>Reason = term()</v>
</type>
<desc>
- <marker id="Moduleinit"></marker>
- <p>Whenever a gen_server is started using
- <seealso marker="#start/3">gen_server:start/3,4</seealso> or
- <seealso marker="#start_link/3">gen_server:start_link/3,4</seealso>,
- this function is called by the new process to initialize.</p>
- <p><c>Args</c> is the <c>Args</c> argument provided to the start
- function.</p>
- <p>If the initialization is successful, the function should
- return <c>{ok,State}</c>, <c>{ok,State,Timeout}</c> or <c>{ok,State,hibernate}</c>, where
- <c>State</c> is the internal state of the gen_server.</p>
- <p>If an integer timeout value is provided, a timeout will occur
- unless a request or a message is received within
- <c>Timeout</c> milliseconds. A timeout is represented by
- the atom <c>timeout</c> which should be handled by
- the <c>handle_info/2</c> callback function. The atom
- <c>infinity</c> can be used to wait indefinitely, this is
- the default value.</p>
- <p>If <c>hibernate</c> is specified instead of a timeout value, the process will go
- into hibernation when waiting for the next message to arrive (by calling
- <seealso marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>).</p>
- <p>If something goes wrong during the initialization
- the function should return <c>{stop,Reason}</c> where
- <c>Reason</c> is any term, or <c>ignore</c>.</p>
+ <p>This function is called by a <c>gen_server</c> process when it is
+ to update its internal state during a release upgrade/downgrade,
+ that is, when the instruction <c>{update,Module,Change,...}</c>,
+ where <c>Change={advanced,Extra}</c>, is specifed in
+ the <c>appup</c> file. For more information, see section
+ <seealso marker="doc/design_principles:release_handling#instr">
+ Release Handling Instructions</seealso> in OTP Design Principles.</p>
+ <p>For an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
+ for a downgrade, <c>OldVsn</c> is
+ <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
+ attribute(s) of the old version of the callback module
+ <c>Module</c>. If no such attribute is defined, the version
+ is the checksum of the Beam file.</p>
+ <p><c>State</c> is the internal state of the <c>gen_server</c>
+ process.</p>
+ <p><c>Extra</c> is passed "as is" from the <c>{advanced,Extra}</c>
+ part of the update instruction.</p>
+ <p>If successful, the function must return the updated
+ internal state.</p>
+ <p>If the function returns <c>{error,Reason}</c>, the ongoing
+ upgrade fails and rolls back to the old release.</p>
</desc>
</func>
+
+ <func>
+ <name>Module:format_status(Opt, [PDict, State]) -> Status</name>
+ <fsummary>Optional function for providing a term describing the
+ current <c>gen_server</c> status.</fsummary>
+ <type>
+ <v>Opt = normal | terminate</v>
+ <v>PDict = [{Key, Value}]</v>
+ <v>State = term()</v>
+ <v>Status = term()</v>
+ </type>
+ <desc>
+ <note>
+ <p>This callback is optional, so callback modules need not
+ export it. The <c>gen_server</c> module provides a default
+ implementation of this function that returns the callback
+ module state.</p>
+ </note>
+ <p>This function is called by a <c>gen_server</c> process in the
+ following situations:</p>
+ <list type="bulleted">
+ <item>
+ <p>One of <seealso marker="sys#get_status/1">
+ <c>sys:get_status/1,2</c></seealso>
+ is invoked to get the <c>gen_server</c> status. <c>Opt</c> is set
+ to the atom <c>normal</c>.</p>
+ </item>
+ <item>
+ <p>The <c>gen_server</c> process terminates abnormally and logs an
+ error. <c>Opt</c> is set to the atom <c>terminate</c>.</p>
+ </item>
+ </list>
+ <p>This function is useful for changing the form and
+ appearance of the <c>gen_server</c> status for these cases. A
+ callback module wishing to change
+ the <c>sys:get_status/1,2</c> return value, as well as how
+ its status appears in termination error logs, exports an
+ instance of <c>format_status/2</c> that returns a term
+ describing the current status of the <c>gen_server</c> process.</p>
+ <p><c>PDict</c> is the current value of the process dictionary of
+ the <c>gen_server</c> process..</p>
+ <p><c>State</c> is the internal state of the <c>gen_server</c>
+ process.</p>
+ <p>The function is to return <c>Status</c>, a term that
+ changes the details of the current state and status of
+ the <c>gen_server</c> process. There are no restrictions on the
+ form <c>Status</c> can take, but for
+ the <c>sys:get_status/1,2</c> case (when <c>Opt</c>
+ is <c>normal</c>), the recommended form for
+ the <c>Status</c> value is <c>[{data, [{"State",
+ Term}]}]</c>, where <c>Term</c> provides relevant details of
+ the <c>gen_server</c> state. Following this recommendation is not
+ required, but it makes the callback module status
+ consistent with the rest of the <c>sys:get_status/1,2</c>
+ return value.</p>
+ <p>One use for this function is to return compact alternative
+ state representations to avoid that large state terms are
+ printed in log files.</p>
+ </desc>
+ </func>
+
<func>
<name>Module:handle_call(Request, From, State) -> Result</name>
<fsummary>Handle a synchronous request.</fsummary>
@@ -493,9 +601,9 @@ gen_server:abcast -----> Module:handle_cast/2
<v>From = {pid(),Tag}</v>
<v>State = term()</v>
<v>Result = {reply,Reply,NewState} | {reply,Reply,NewState,Timeout}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NewState,hibernate}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NewState,hibernate}</v>
<v>&nbsp;&nbsp;| {noreply,NewState} | {noreply,NewState,Timeout}</v>
- <v>&nbsp;&nbsp;| {noreply,NewState,hibernate}</v>
+ <v>&nbsp;&nbsp;| {noreply,NewState,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason,Reply,NewState} | {stop,Reason,NewState}</v>
<v>&nbsp;Reply = term()</v>
<v>&nbsp;NewState = term()</v>
@@ -503,38 +611,52 @@ gen_server:abcast -----> Module:handle_cast/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Whenever a gen_server receives a request sent using
- <seealso marker="#call/2">gen_server:call/2,3</seealso> or
- <seealso marker="#multi_call/2">gen_server:multi_call/2,3,4</seealso>,
+ <p>Whenever a <c>gen_server</c> process receives a request sent using
+ <seealso marker="#call/2"><c>call/2,3</c></seealso> or
+ <seealso marker="#multi_call/2"><c>multi_call/2,3,4</c></seealso>,
this function is called to handle the request.</p>
<p><c>Request</c> is the <c>Request</c> argument provided
to <c>call</c> or <c>multi_call</c>.</p>
- <p><c>From</c> is a tuple <c>{Pid,Tag}</c> where <c>Pid</c> is
+ <p><c>From</c> is a tuple <c>{Pid,Tag}</c>, where <c>Pid</c> is
the pid of the client and <c>Tag</c> is a unique tag.</p>
- <p><c>State</c> is the internal state of the gen_server.</p>
- <p>If the function returns <c>{reply,Reply,NewState}</c>,
- <c>{reply,Reply,NewState,Timeout}</c> or
- <c>{reply,Reply,NewState,hibernate}</c>, <c>Reply</c> will be
- given back to <c>From</c> as the return value of
- <c>call/2,3</c> or included in the return value of
- <c>multi_call/2,3,4</c>. The gen_server then continues
- executing with the possibly updated internal state
- <c>NewState</c>. See <c>Module:init/1</c> for a description
- of <c>Timeout</c> and <c>hibernate</c>.</p>
- <p>If the functions returns <c>{noreply,NewState}</c>,
- <c>{noreply,NewState,Timeout}</c> or <c>{noreply,NewState,hibernate}</c>,
- the gen_server will
- continue executing with <c>NewState</c>. Any reply to
- <c>From</c> must be given explicitly using
- <seealso marker="#reply/2">gen_server:reply/2</seealso>.</p>
- <p>If the function returns <c>{stop,Reason,Reply,NewState}</c>,
- <c>Reply</c> will be given back to <c>From</c>. If
- the function returns <c>{stop,Reason,NewState}</c>, any reply
- to <c>From</c> must be given explicitly using
- <c>gen_server:reply/2</c>. The gen_server will then call
- <c>Module:terminate(Reason,NewState)</c> and terminate.</p>
+ <p><c>State</c> is the internal state of the <c>gen_server</c>
+ process.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>{reply,Reply,NewState}</c> is returned,
+ <c>{reply,Reply,NewState,Timeout}</c> or
+ <c>{reply,Reply,NewState,hibernate}</c>, <c>Reply</c> is
+ given back to <c>From</c> as the return value of
+ <c>call/2,3</c> or included in the return value of
+ <c>multi_call/2,3,4</c>. The <c>gen_server</c> process then
+ continues executing with the possibly updated internal state
+ <c>NewState</c>.</p>
+ <p>For a description of <c>Timeout</c> and <c>hibernate</c>, see
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If <c>{noreply,NewState}</c> is returned,
+ <c>{noreply,NewState,Timeout}</c>, or
+ <c>{noreply,NewState,hibernate}</c>, the <c>gen_server</c>
+ process continues executing with <c>NewState</c>. Any reply to
+ <c>From</c> must be specified explicitly using
+ <seealso marker="#reply/2"><c>reply/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If <c>{stop,Reason,Reply,NewState}</c> is returned,
+ <c>Reply</c> is given back to <c>From</c>.</p>
+ </item>
+ <item>
+ <p>If <c>{stop,Reason,NewState}</c> is returned, any reply
+ to <c>From</c> must be specified explicitly using
+ <seealso marker="#reply/2"><c>reply/2</c></seealso>.
+ The <c>gen_server</c> process then calls
+ <c>Module:terminate(Reason,NewState)</c> and terminates.</p>
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name>Module:handle_cast(Request, State) -> Result</name>
<fsummary>Handle an asynchronous request.</fsummary>
@@ -549,37 +671,82 @@ gen_server:abcast -----> Module:handle_cast/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Whenever a gen_server receives a request sent using
- <seealso marker="#cast/2">gen_server:cast/2</seealso> or
- <seealso marker="#abcast/2">gen_server:abcast/2,3</seealso>,
+ <p>Whenever a <c>gen_server</c> process receives a request sent using
+ <seealso marker="#cast/2"><c>cast/2</c></seealso> or
+ <seealso marker="#abcast/2"><c>abcast/2,3</c></seealso>,
this function is called to handle the request.</p>
- <p>See <c>Module:handle_call/3</c> for a description of
- the arguments and possible return values.</p>
+ <p>For a description of the arguments and possible return values, see
+ <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>Module:handle_info(Info, State) -> Result</name>
<fsummary>Handle an incoming message.</fsummary>
<type>
<v>Info = timeout | term()</v>
<v>State = term()</v>
- <v>Result = {noreply,NewState} | {noreply,NewState,Timeout} </v>
- <v>&nbsp;&nbsp;| {noreply,NewState,hibernate}</v>
+ <v>Result = {noreply,NewState} | {noreply,NewState,Timeout}</v>
+ <v>&nbsp;&nbsp;| {noreply,NewState,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason,NewState}</v>
<v>&nbsp;NewState = term()</v>
<v>&nbsp;Timeout = int()>=0 | infinity</v>
<v>&nbsp;Reason = normal | term()</v>
</type>
<desc>
- <p>This function is called by a gen_server when a timeout
- occurs or when it receives any other message than a
+ <p>This function is called by a <c>gen_server</c> process when a
+ time-out occurs or when it receives any other message than a
synchronous or asynchronous request (or a system message).</p>
- <p><c>Info</c> is either the atom <c>timeout</c>, if a timeout
+ <p><c>Info</c> is either the atom <c>timeout</c>, if a time-out
has occurred, or the received message.</p>
- <p>See <c>Module:handle_call/3</c> for a description of
- the other arguments and possible return values.</p>
+ <p>For a description of the other arguments and possible return values,
+ see <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:init(Args) -> Result</name>
+ <fsummary>Initialize process and internal state.</fsummary>
+ <type>
+ <v>Args = term()</v>
+ <v>Result = {ok,State} | {ok,State,Timeout} | {ok,State,hibernate}</v>
+ <v>&nbsp;| {stop,Reason} | ignore</v>
+ <v>&nbsp;State = term()</v>
+ <v>&nbsp;Timeout = int()>=0 | infinity</v>
+ <v>&nbsp;Reason = term()</v>
+ </type>
+ <desc>
+ <p>Whenever a <c>gen_server</c> process is started using
+ <seealso marker="#start/3"><c>start/3,4</c></seealso> or
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>,
+ this function is called by the new process to initialize.</p>
+ <p><c>Args</c> is the <c>Args</c> argument provided to the start
+ function.</p>
+ <p>If the initialization is successful, the function is to
+ return <c>{ok,State}</c>, <c>{ok,State,Timeout}</c>, or
+ <c>{ok,State,hibernate}</c>, where <c>State</c> is the internal
+ state of the <c>gen_server</c> process.</p>
+ <p>If an integer time-out value is provided, a time-out occurs
+ unless a request or a message is received within
+ <c>Timeout</c> milliseconds. A time-out is represented by
+ the atom <c>timeout</c>, which is to be handled by the
+ <seealso marker="#Module:handle_info/2">
+ <c>Module:handle_info/2</c></seealso> callback function. The atom
+ <c>infinity</c> can be used to wait indefinitely, this is
+ the default value.</p>
+ <p>If <c>hibernate</c> is specified instead of a time-out value,
+ the process goes into
+ hibernation when waiting for the next message to arrive (by calling
+ <seealso marker="proc_lib#hibernate/3">
+ <c>proc_lib:hibernate/3</c></seealso>).</p>
+ <p>If the initialization fails, the function is to return
+ <c>{stop,Reason}</c>, where <c>Reason</c> is any term, or
+ <c>ignore</c>.</p>
</desc>
</func>
+
<func>
<name>Module:terminate(Reason, State)</name>
<fsummary>Clean up before termination.</fsummary>
@@ -588,136 +755,57 @@ gen_server:abcast -----> Module:handle_cast/2
<v>State = term()</v>
</type>
<desc>
- <p>This function is called by a gen_server when it is about to
- terminate. It should be the opposite of <c>Module:init/1</c>
+ <p>This function is called by a <c>gen_server</c> process when it is
+ about to terminate. It is to be the opposite of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
and do any necessary cleaning up. When it returns,
- the gen_server terminates with <c>Reason</c>. The return
- value is ignored.</p>
- <p><c>Reason</c> is a term denoting the stop reason and
- <c>State</c> is the internal state of the gen_server.</p>
- <p><c>Reason</c> depends on why the gen_server is terminating.
- If it is because another callback function has returned a
- stop tuple <c>{stop,..}</c>, <c>Reason</c> will have
- the value specified in that tuple. If it is due to a failure,
+ the <c>gen_server</c> process terminates with <c>Reason</c>.
+ The return value is ignored.</p>
+ <p><c>Reason</c> is a term denoting the stop reason and <c>State</c>
+ is the internal state of the <c>gen_server</c> process.</p>
+ <p><c>Reason</c> depends on why the <c>gen_server</c> process is
+ terminating. If it is because another callback function has returned
+ a stop tuple <c>{stop,..}</c>, <c>Reason</c> has
+ the value specified in that tuple. If it is because of a failure,
<c>Reason</c> is the error reason.</p>
- <p>If the gen_server is part of a supervision tree and is
- ordered by its supervisor to terminate, this function will be
+ <p>If the <c>gen_server</c> process is part of a supervision tree and
+ is ordered by its supervisor to terminate, this function is
called with <c>Reason=shutdown</c> if the following
conditions apply:</p>
<list type="bulleted">
- <item>the gen_server has been set to trap exit signals, and</item>
- <item>the shutdown strategy as defined in the supervisor's
- child specification is an integer timeout value, not
- <c>brutal_kill</c>.</item>
+ <item>
+ <p>The <c>gen_server</c> process has been set to trap exit
+ signals.</p>
+ </item>
+ <item>
+ <p>The shutdown strategy as defined in the child specification
+ of the supervisor is an integer time-out value, not
+ <c>brutal_kill</c>.</p>
+ </item>
</list>
- <p>Even if the gen_server is <em>not</em> part of a supervision tree,
- this function will be called if it receives an <c>'EXIT'</c>
- message from its parent. <c>Reason</c> will be the same as in
- the <c>'EXIT'</c> message.</p>
- <p>Otherwise, the gen_server will be immediately terminated.</p>
- <p>Note that for any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> the gen_server is
- assumed to terminate due to an error and
- an error report is issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.</p>
- </desc>
- </func>
- <func>
- <name>Module:code_change(OldVsn, State, Extra) -> {ok, NewState} | {error, Reason}</name>
- <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
- <type>
- <v>OldVsn = Vsn | {down, Vsn}</v>
- <v>&nbsp;&nbsp;Vsn = term()</v>
- <v>State = NewState = term()</v>
- <v>Extra = term()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
- <p>This function is called by a gen_server when it should
- update its internal state during a release upgrade/downgrade,
- i.e. when the instruction <c>{update,Module,Change,...}</c>
- where <c>Change={advanced,Extra}</c> is given in
- the <c>appup</c> file. See
- <seealso marker="doc/design_principles:release_handling#instr">OTP Design Principles</seealso>
- for more information.</p>
- <p>In the case of an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
- in the case of a downgrade, <c>OldVsn</c> is
- <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
- attribute(s) of the old version of the callback module
- <c>Module</c>. If no such attribute is defined, the version
- is the checksum of the BEAM file.</p>
- <p><c>State</c> is the internal state of the gen_server.</p>
- <p><c>Extra</c> is passed as-is from the <c>{advanced,Extra}</c>
- part of the update instruction.</p>
- <p>If successful, the function shall return the updated
- internal state.</p>
- <p>If the function returns <c>{error,Reason}</c>, the ongoing
- upgrade will fail and roll back to the old release.</p>
- </desc>
- </func>
- <func>
- <name>Module:format_status(Opt, [PDict, State]) -> Status</name>
- <fsummary>Optional function for providing a term describing the
- current gen_server status.</fsummary>
- <type>
- <v>Opt = normal | terminate</v>
- <v>PDict = [{Key, Value}]</v>
- <v>State = term()</v>
- <v>Status = term()</v>
- </type>
- <desc>
- <note>
- <p>This callback is optional, so callback modules need not
- export it. The gen_server module provides a default
- implementation of this function that returns the callback
- module state.</p>
- </note>
- <p>This function is called by a gen_server process when:</p>
- <list type="bulleted">
- <item>One
- of <seealso marker="sys#get_status/1">sys:get_status/1,2</seealso>
- is invoked to get the gen_server status. <c>Opt</c> is set
- to the atom <c>normal</c> for this case.</item>
- <item>The gen_server terminates abnormally and logs an
- error. <c>Opt</c> is set to the atom <c>terminate</c> for this
- case.</item>
- </list>
- <p>This function is useful for customising the form and
- appearance of the gen_server status for these cases. A
- callback module wishing to customise
- the <c>sys:get_status/1,2</c> return value as well as how
- its status appears in termination error logs exports an
- instance of <c>format_status/2</c> that returns a term
- describing the current status of the gen_server.</p>
- <p><c>PDict</c> is the current value of the gen_server's
- process dictionary.</p>
- <p><c>State</c> is the internal state of the gen_server.</p>
- <p>The function should return <c>Status</c>, a term that
- customises the details of the current state and status of
- the gen_server. There are no restrictions on the
- form <c>Status</c> can take, but for
- the <c>sys:get_status/1,2</c> case (when <c>Opt</c>
- is <c>normal</c>), the recommended form for
- the <c>Status</c> value is <c>[{data, [{"State",
- Term}]}]</c> where <c>Term</c> provides relevant details of
- the gen_server state. Following this recommendation isn't
- required, but doing so will make the callback module status
- consistent with the rest of the <c>sys:get_status/1,2</c>
- return value.</p>
- <p>One use for this function is to return compact alternative
- state representations to avoid having large state terms
- printed in logfiles.</p>
+ <p>Even if the <c>gen_server</c> process is <em>not</em> part of a
+ supervision tree, this function is called if it receives an
+ <c>'EXIT'</c> message from its parent. <c>Reason</c> is the same
+ as in the <c>'EXIT'</c> message.</p>
+ <p>Otherwise, the <c>gen_server</c> process terminates immediately.</p>
+ <p>Notice that for any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c>, the <c>gen_server</c>
+ process is assumed to terminate because of an error and
+ an error report is issued using
+ <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gen_event">gen_event(3)</seealso>,
- <seealso marker="gen_fsm">gen_fsm(3)</seealso>,
- <seealso marker="supervisor">supervisor(3)</seealso>,
- <seealso marker="proc_lib">proc_lib(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="gen_fsm"><c>gen_fsm(3)</c></seealso>,
+ <seealso marker="gen_statem"><c>gen_statem(3)</c></seealso>,
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>,
+ <seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gen_statem.xml b/lib/stdlib/doc/src/gen_statem.xml
new file mode 100644
index 0000000000..ed44eef912
--- /dev/null
+++ b/lib/stdlib/doc/src/gen_statem.xml
@@ -0,0 +1,1679 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title>gen_statem</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date></date>
+ <rev></rev>
+ </header>
+ <module>gen_statem</module>
+ <modulesummary>Generic state machine behavior.</modulesummary>
+ <description>
+ <p>
+ This behavior module provides a state machine. Two
+ <seealso marker="#type-callback_mode"><em>callback modes</em></seealso>
+ are supported:
+ </p>
+ <list type="bulleted">
+ <item>
+ <p>One for finite-state machines
+ (<seealso marker="gen_fsm"><c>gen_fsm</c></seealso> like),
+ which requires the state to be an atom and uses that state as
+ the name of the current callback function
+ </p>
+ </item>
+ <item>
+ <p>One without restriction on the state data type
+ that uses one callback function for all states
+ </p>
+ </item>
+ </list>
+ <note>
+ <p>
+ This is a new behavior in Erlang/OTP 19.0.
+ It has been thoroughly reviewed, is stable enough
+ to be used by at least two heavy OTP applications, and is here to stay.
+ Depending on user feedback, we do not expect
+ but can find it necessary to make minor
+ not backward compatible changes into Erlang/OTP 20.0.
+ </p>
+ </note>
+ <p>
+ The <c>gen_statem</c> behavior is intended to replace
+ <seealso marker="gen_fsm"><c>gen_fsm</c></seealso> for new code.
+ It has the same features and adds some really useful:
+ </p>
+ <list type="bulleted">
+ <item>State code is gathered.</item>
+ <item>The state can be any term.</item>
+ <item>Events can be postponed.</item>
+ <item>Events can be self-generated.</item>
+ <item>A reply can be sent from a later state.</item>
+ <item>There can be multiple <c>sys</c> traceable replies.</item>
+ </list>
+ <p>
+ The callback model(s) for <c>gen_statem</c> differs from
+ the one for <seealso marker="gen_fsm"><c>gen_fsm</c></seealso>,
+ but it is still fairly easy to rewrite
+ from <c>gen_fsm</c> to <c>gen_statem</c>.
+ </p>
+ <p>
+ A generic state machine process (<c>gen_statem</c>) implemented
+ using this module has a standard set of interface functions
+ and includes functionality for tracing and error reporting.
+ It also fits into an OTP supervision tree. For more information, see
+ <seealso marker="doc/design_principles:statem">OTP Design Principles</seealso>.
+ </p>
+ <p>
+ A <c>gen_statem</c> assumes all specific parts to be located in a
+ callback module exporting a predefined set of functions.
+ The relationship between the behavior functions and the callback
+ functions is as follows:</p>
+ <pre>
+gen_statem module Callback module
+----------------- ---------------
+gen_statem:start
+gen_statem:start_link -----> Module:init/1
+
+gen_statem:stop -----> Module:terminate/3
+
+gen_statem:call
+gen_statem:cast
+erlang:send
+erlang:'!' -----> Module:StateName/3
+ Module:handle_event/4
+
+- -----> Module:terminate/3
+
+- -----> Module:code_change/4</pre>
+ <p>
+ Events are of different
+ <seealso marker="#type-event_type">types</seealso>,
+ so the callback functions can know the origin of an event
+ and how to respond.
+ </p>
+ <p>
+ If a callback function fails or returns a bad value,
+ the <c>gen_statem</c> terminates. However, an exception of class
+ <seealso marker="erts:erlang#throw/1"><c>throw</c></seealso>
+ is not regarded as an error but as a valid return.
+ </p>
+ <marker id="state_function"/>
+ <p>
+ The "<em>state function</em>" for a specific
+ <seealso marker="#type-state">state</seealso>
+ in a <c>gen_statem</c> is the callback function that is called
+ for all events in this state. It is selected depending on which
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ that the implementation specifies when the server starts.
+ </p>
+ <p>
+ When the
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ is <c>state_functions</c>, the state must be an atom and
+ is used as the state function name; see
+ <seealso marker="#Module:StateName/3"><c>Module:StateName/3</c></seealso>.
+ This gathers all code for a specific state
+ in one function as the <c>gen_statem</c> engine
+ branches depending on state name.
+ Notice that in this mode the mandatory callback function
+ <seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso>
+ makes the state name <c>terminate</c> unusable.
+ </p>
+ <p>
+ When the
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ is <c>handle_event_function</c>, the state can be any term
+ and the state function name is
+ <seealso marker="#Module:handle_event/4"><c>Module:handle_event/4</c></seealso>.
+ This makes it easy to branch depending on state or event as you desire.
+ Be careful about which events you handle in which
+ states so that you do not accidentally postpone an event
+ forever creating an infinite busy loop.
+ </p>
+ <p>
+ The <c>gen_statem</c> enqueues incoming events in order of arrival
+ and presents these to the
+ <seealso marker="#state_function">state function</seealso>
+ in that order. The state function can postpone an event
+ so it is not retried in the current state.
+ After a state change the queue restarts with the postponed events.
+ </p>
+ <p>
+ The <c>gen_statem</c> event queue model is sufficient
+ to emulate the normal process message queue with selective receive.
+ Postponing an event corresponds to not matching it
+ in a receive statement, and changing states corresponds
+ to entering a new receive statement.
+ </p>
+ <p>
+ The <seealso marker="#state_function">state function</seealso>
+ can insert events using the
+ <seealso marker="#type-action"><c>action()</c></seealso>
+ <c>next_event</c>
+ and such an event is inserted as the next to present
+ to the state function. That is, as if it is
+ the oldest incoming event. A dedicated
+ <seealso marker="#type-event_type"><c>event_type()</c></seealso>
+ <c>internal</c> can be used for such events making them impossible
+ to mistake for external events.
+ </p>
+ <p>
+ Inserting an event replaces the trick of calling your own
+ state handling functions that you often would have to
+ resort to in, for example,
+ <seealso marker="gen_fsm"><c>gen_fsm</c></seealso>
+ to force processing an inserted event before others.
+ </p>
+ <note>
+ <p>If you in <c>gen_statem</c>, for example, postpone
+ an event in one state and then call another state function
+ of yours, you have not changed states and hence the postponed event
+ is not retried, which is logical but can be confusing.
+ </p>
+ </note>
+ <p>
+ For the details of a state transition, see type
+ <seealso marker="#type-transition_option"><c>transition_option()</c></seealso>.
+ </p>
+ <p>
+ A <c>gen_statem</c> handles system messages as described in
+ <seealso marker="sys"><c>sys</c></seealso>.
+ The <c>sys</c> module can be used for debugging a <c>gen_statem</c>.
+ </p>
+ <p>
+ Notice that a <c>gen_statem</c> does not trap exit signals
+ automatically, this must be explicitly initiated in
+ the callback module (by calling
+ <seealso marker="erts:erlang#process_flag/2"><c>process_flag(trap_exit, true)</c></seealso>.
+ </p>
+ <p>
+ Unless otherwise stated, all functions in this module fail if
+ the specified <c>gen_statem</c> does not exist or
+ if bad arguments are specified.
+ </p>
+ <p>
+ The <c>gen_statem</c> process can go into hibernation; see
+ <seealso marker="proc_lib#hibernate/3"><c>proc_lib:hibernate/3</c></seealso>.
+ It is done when a
+ <seealso marker="#state_function">state function</seealso> or
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ specifies <c>hibernate</c> in the returned
+ <seealso marker="#type-action"><c>Actions</c></seealso>
+ list. This feature can be useful to reclaim process heap memory
+ while the server is expected to be idle for a long time.
+ However, use this feature with care,
+ as hibernation can be too costly
+ to use after every event; see
+ <seealso marker="erts:erlang#hibernate/3"><c>erlang:hibernate/3</c></seealso>.
+ </p>
+ </description>
+
+ <section>
+ <title>Example</title>
+ <p>
+ The following example shows a simple pushbutton model
+ for a toggling pushbutton implemented with
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ <c>state_functions</c>.
+ You can push the button and it replies if it went on or off,
+ and you can ask for a count of how many times it has been
+ pushed to switch on.
+ </p>
+ <p>The following is the complete callback module file
+ <c>pushbutton.erl</c>:</p>
+ <code type="erl">
+-module(pushbutton).
+-behaviour(gen_statem).
+
+-export([start/0,push/0,get_count/0,stop/0]).
+-export([terminate/3,code_change/4,init/1]).
+-export([on/3,off/3]).
+
+name() -> pushbutton_statem. % The registered server name
+callback_mode() -> state_functions.
+
+%% API. This example uses a registered name name()
+%% and does not link to the caller.
+start() ->
+ gen_statem:start({local,name()}, ?MODULE, [], []).
+push() ->
+ gen_statem:call(name(), push).
+get_count() ->
+ gen_statem:call(name(), get_count).
+stop() ->
+ gen_statem:stop(name()).
+
+%% Mandatory callback functions
+terminate(_Reason, _State, _Data) ->
+ void.
+code_change(_Vsn, State, Data, _Extra) ->
+ {callback_mode(),State,Data}.
+init([]) ->
+ %% Set the callback mode and initial state + data.
+ %% Data is used only as a counter.
+ State = off, Data = 0,
+ {callback_mode(),State,Data}.
+
+
+%%% State functions
+
+off({call,From}, push, Data) ->
+ %% Go to 'on', increment count and reply
+ %% that the resulting status is 'on'
+ {next_state,on,Data+1,[{reply,From,on}]};
+off(EventType, EventContent, Data) ->
+ handle_event(EventType, EventContent, Data).
+
+on({call,From}, push, Data) ->
+ %% Go to 'off' and reply that the resulting status is 'off'
+ {next_state,off,Data,[{reply,From,off}]};
+on(EventType, EventContent, Data) ->
+ handle_event(EventType, EventContent, Data).
+
+%% Handle events common to all states
+handle_event({call,From}, get_count, Data) ->
+ %% Reply with the current count
+ {keep_state,Data,[{reply,From,Data}]};
+handle_event(_, _, Data) ->
+ %% Ignore all other events
+ {keep_state,Data}.
+ </code>
+ <p>The following is a shell session when running it:</p>
+ <pre>
+1> pushbutton:start().
+{ok,&lt;0.36.0>}
+2> pushbutton:get_count().
+0
+3> pushbutton:push().
+on
+4> pushbutton:get_count().
+1
+5> pushbutton:push().
+off
+6> pushbutton:get_count().
+1
+7> pushbutton:stop().
+ok
+8> pushbutton:push().
+** exception exit: {noproc,{gen_statem,call,[pushbutton_statem,push,infinity]}}
+ in function gen:do_for_proc/2 (gen.erl, line 261)
+ in call from gen_statem:call/3 (gen_statem.erl, line 386)
+ </pre>
+ <p>
+ To compare styles, here follows the same example using
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ <c>state_functions</c>, or rather the code to replace
+ from function <c>init/1</c> of the <c>pushbutton.erl</c>
+ example file above:
+ </p>
+ <code type="erl">
+init([]) ->
+ %% Set the callback mode and initial state + data.
+ %% Data is used only as a counter.
+ State = off, Data = 0,
+ {handle_event_function,State,Data}.
+
+
+%%% Event handling
+
+handle_event({call,From}, push, off, Data) ->
+ %% Go to 'on', increment count and reply
+ %% that the resulting status is 'on'
+ {next_state,on,Data+1,[{reply,From,on}]};
+handle_event({call,From}, push, on, Data) ->
+ %% Go to 'off' and reply that the resulting status is 'off'
+ {next_state,off,Data,[{reply,From,off}]};
+%%
+%% Event handling common to all states
+handle_event({call,From}, get_count, State, Data) ->
+ %% Reply with the current count
+ {next_state,State,Data,[{reply,From,Data}]};
+handle_event(_, _, State, Data) ->
+ %% Ignore all other events
+ {next_state,State,Data}.
+ </code>
+ </section>
+
+ <datatypes>
+ <datatype>
+ <name name="server_name"/>
+ <desc>
+ <p>
+ Name specification to use when starting
+ a <c>gen_statem</c> server. See
+ <seealso marker="#start_link/3"><c>start_link/3</c></seealso>
+ and
+ <seealso marker="#type-server_ref"><c>server_ref()</c></seealso>
+ below.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="server_ref"/>
+ <desc>
+ <p>
+ Server specification to use when addressing
+ a <c>gen_statem</c> server.
+ See <seealso marker="#call/2"><c>call/2</c></seealso> and
+ <seealso marker="#type-server_name"><c>server_name()</c></seealso>
+ above.
+ </p>
+ <p>It can be:</p>
+ <taglist>
+ <tag><c>pid() | LocalName</c></tag>
+ <item>
+ <p>
+ The <c>gen_statem</c> is locally registered.
+ </p>
+ </item>
+ <tag><c>{Name,Node}</c></tag>
+ <item>
+ <p>
+ The <c>gen_statem</c> is locally registered
+ on another node.
+ </p>
+ </item>
+ <tag><c>{global,GlobalName}</c></tag>
+ <item>
+ <p>
+ The <c>gen_statem</c> is globally registered in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ </p>
+ </item>
+ <tag><c>{via,RegMod,ViaName}</c></tag>
+ <item>
+ <p>
+ The <c>gen_statem</c> is registered in
+ an alternative process registry.
+ The registry callback module <c>RegMod</c>
+ is to export functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>,
+ <c>whereis_name/1</c>, and <c>send/2</c>,
+ which are to behave like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is the same as
+ <c>{global,GlobalName}</c>.
+ </p>
+ </item>
+ </taglist>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="debug_opt"/>
+ <desc>
+ <p>
+ Debug option that can be used when starting
+ a <c>gen_statem</c> server through, for example,
+ <seealso marker="#enter_loop/5"><c>enter_loop/5</c></seealso>.
+ </p>
+ <p>
+ For every entry in <c><anno>Dbgs</anno></c>,
+ the corresponding function in
+ <seealso marker="sys"><c>sys</c></seealso> is called.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="start_opt"/>
+ <desc>
+ <p>
+ Options that can be used when starting
+ a <c>gen_statem</c> server through, for example,
+ <seealso marker="#start_link/3"><c>start_link/3</c></seealso>.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="start_ret"/>
+ <desc>
+ <p>
+ Return value from the start functions, for example,
+ <seealso marker="#start_link/3"><c>start_link/3</c></seealso>.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="from"/>
+ <desc>
+ <p>
+ Destination to use when replying through, for example, the
+ <seealso marker="#type-action"><c>action()</c></seealso>
+ <c>{reply,From,Reply}</c>
+ to a process that has called the <c>gen_statem</c> server using
+ <seealso marker="#call/2"><c>call/2</c></seealso>.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="state"/>
+ <desc>
+ <p>
+ After a state change (<c>NextState =/= State</c>),
+ all postponed events are retried.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="state_name"/>
+ <desc>
+ <p>
+ If the
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ is <c>state_functions</c>,
+ the state must be of this type.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="data"/>
+ <desc>
+ <p>
+ A term in which the state machine implementation
+ is to store any server data it needs. The difference between
+ this and the <seealso marker="#type-state"><c>state()</c></seealso>
+ itself is that a change in this data does not cause
+ postponed events to be retried. Hence, if a change
+ in this data would change the set of events that
+ are handled, then that data item is to be made
+ a part of the state.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="event_type"/>
+ <desc>
+ <p>
+ External events are of three types:
+ <c>{call,<anno>From</anno>}</c>, <c>cast</c>, or <c>info</c>.
+ <seealso marker="#call/2">Calls</seealso>
+ (synchronous) and
+ <seealso marker="#cast/2">casts</seealso>
+ originate from the corresponding API functions.
+ For calls, the event contains whom to reply to.
+ Type <c>info</c> originates from regular process messages sent
+ to the <c>gen_statem</c>. Also, the state machine
+ implementation can generate events of types
+ <c>timeout</c> and <c>internal</c> to itself.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="callback_mode"/>
+ <desc>
+ <p>
+ The <em>callback mode</em> is selected when starting the
+ <c>gen_statem</c> using the return value from
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ or when calling
+ <seealso marker="#enter_loop/5"><c>enter_loop/5,6,7</c></seealso>,
+ and with the return value from
+ <seealso marker="#Module:code_change/4"><c>Module:code_change/4</c></seealso>.
+ </p>
+ <taglist>
+ <tag><c>state_functions</c></tag>
+ <item>
+ <p>
+ The state must be of type
+ <seealso marker="#type-state_name"><c>state_name()</c></seealso>
+ and one callback function per state, that is,
+ <seealso marker="#Module:StateName/3"><c>Module:StateName/3</c></seealso>,
+ is used.
+ </p>
+ </item>
+ <tag><c>handle_event_function</c></tag>
+ <item>
+ <p>
+ The state can be any term and the callback function
+ <seealso marker="#Module:handle_event/4"><c>Module:handle_event/4</c></seealso>
+ is used for all states.
+ </p>
+ </item>
+ </taglist>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="transition_option"/>
+ <desc>
+ <p>
+ Transition options can be set by
+ <seealso marker="#type-action">actions</seealso>
+ and they modify the following in how
+ the state transition is done:
+ </p>
+ <list type="ordered">
+ <item>
+ <p>
+ All
+ <seealso marker="#type-action">actions</seealso>
+ are processed in order of appearance.
+ </p>
+ </item>
+ <item>
+ <p>
+ If
+ <seealso marker="#type-postpone"><c>postpone()</c></seealso>
+ is <c>true</c>,
+ the current event is postponed.
+ </p>
+ </item>
+ <item>
+ <p>
+ If the state changes, the queue of incoming events
+ is reset to start with the oldest postponed.
+ </p>
+ </item>
+ <item>
+ <p>
+ All events stored with
+ <seealso marker="#type-action"><c>action()</c></seealso>
+ <c>next_event</c>
+ are inserted in the queue to be processed before
+ all other events.
+ </p>
+ </item>
+ <item>
+ <p>
+ If an
+ <seealso marker="#type-event_timeout"><c>event_timeout()</c></seealso>
+ is set through
+ <seealso marker="#type-action"><c>action()</c></seealso>
+ <c>timeout</c>,
+ an event timer can be started or a time-out zero event
+ can be enqueued.
+ </p>
+ </item>
+ <item>
+ <p>
+ The (possibly new)
+ <seealso marker="#state_function">state function</seealso>
+ is called with the oldest enqueued event if there is any,
+ otherwise the <c>gen_statem</c> goes into <c>receive</c>
+ or hibernation
+ (if
+ <seealso marker="#type-hibernate"><c>hibernate()</c></seealso>
+ is <c>true</c>)
+ to wait for the next message. In hibernation the next
+ non-system event awakens the <c>gen_statem</c>, or rather
+ the next incoming message awakens the <c>gen_statem</c>,
+ but if it is a system event
+ it goes right back into hibernation.
+ </p>
+ </item>
+ </list>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="postpone"/>
+ <desc>
+ <p>
+ If <c>true</c>, postpones the current event and retries
+ it when the state changes
+ (<c>NextState =/= State</c>).
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="hibernate"/>
+ <desc>
+ <p>
+ If <c>true</c>, hibernates the <c>gen_statem</c>
+ by calling
+ <seealso marker="proc_lib#hibernate/3"><c>proc_lib:hibernate/3</c></seealso>
+ before going into <c>receive</c>
+ to wait for a new external event.
+ If there are enqueued events,
+ to prevent receiving any new event, an
+ <seealso marker="erts:erlang#garbage_collect/0"><c>erlang:garbage_collect/0</c></seealso>
+ is done instead to simulate
+ that the <c>gen_statem</c> entered hibernation
+ and immediately got awakened by the oldest enqueued event.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="event_timeout"/>
+ <desc>
+ <p>
+ Generates an event of
+ <seealso marker="#type-event_type"><c>event_type()</c></seealso>
+ <c>timeout</c>
+ after this time (in milliseconds) unless another
+ event arrives in which case this time-out is cancelled.
+ Notice that a retried or inserted event
+ counts like a new in this respect.
+ </p>
+ <p>
+ If the value is <c>infinity</c>, no timer is started, as
+ it never triggers anyway.
+ </p>
+ <p>
+ If the value is <c>0</c>, the time-out event is immediately enqueued
+ unless there already are enqueued events, as the
+ time-out is then immediately cancelled.
+ This is a feature ensuring that a time-out <c>0</c> event
+ is processed before any not yet received external event.
+ </p>
+ <p>
+ Notice that it is not possible or needed to cancel this time-out,
+ as it is cancelled automatically by any other event.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="action"/>
+ <desc>
+ <p>
+ These state transition actions can be invoked by
+ returning them from the
+ <seealso marker="#state_function">state function</seealso>, from
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ or by giving them to
+ <seealso marker="#enter_loop/6"><c>enter_loop/6,7</c></seealso>.
+ </p>
+ <p>
+ Actions are executed in the containing list order.
+ </p>
+ <p>
+ Actions that set
+ <seealso marker="#type-transition_option">transition options</seealso>
+ override any previous of the same type,
+ so the last in the containing list wins.
+ For example, the last
+ <seealso marker="#type-event_timeout"><c>event_timeout()</c></seealso>
+ overrides any other <c>event_timeout()</c> in the list.
+ </p>
+ <taglist>
+ <tag><c>postpone</c></tag>
+ <item>
+ <p>
+ Sets the
+ <seealso marker="#type-transition_option"><c>transition_option()</c></seealso>
+ <seealso marker="#type-postpone"><c>postpone()</c></seealso>
+ for this state transition.
+ This action is ignored when returned from
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ or given to
+ <seealso marker="#enter_loop/5"><c>enter_loop/5,6</c></seealso>,
+ as there is no event to postpone in those cases.
+ </p>
+ </item>
+ <tag><c>hibernate</c></tag>
+ <item>
+ <p>
+ Sets the
+ <seealso marker="#type-transition_option"><c>transition_option()</c></seealso>
+ <seealso marker="#type-hibernate"><c>hibernate()</c></seealso>
+ for this state transition.
+ </p>
+ </item>
+ <tag><c>Timeout</c></tag>
+ <item>
+ <p>
+ Short for <c>{timeout,Timeout,Timeout}</c>, that is,
+ the time-out message is the time-out time.
+ This form exists to make the
+ <seealso marker="#state_function">state function</seealso>
+ return value <c>{next_state,NextState,NewData,Timeout}</c>
+ allowed like for <c>gen_fsm</c>'s
+ <seealso marker="gen_fsm#Module:StateName/2"><c>Module:StateName/2</c></seealso>.
+ </p>
+ </item>
+ <tag><c>timeout</c></tag>
+ <item>
+ <p>
+ Sets the
+ <seealso marker="#type-transition_option"><c>transition_option()</c></seealso>
+ <seealso marker="#type-event_timeout"><c>event_timeout()</c></seealso>
+ to <c><anno>Time</anno></c> with <c><anno>EventContent</anno></c>.
+ </p>
+ </item>
+ <tag><c>reply_action()</c></tag>
+ <item>
+ <p>
+ Replies to a caller.
+ </p>
+ </item>
+ <tag><c>next_event</c></tag>
+ <item>
+ <p>
+ Stores the specified <c><anno>EventType</anno></c>
+ and <c><anno>EventContent</anno></c> for insertion after all
+ actions have been executed.
+ </p>
+ <p>
+ The stored events are inserted in the queue as the next to process
+ before any already queued events. The order of these stored events
+ is preserved, so the first <c>next_event</c> in the containing
+ list becomes the first to process.
+ </p>
+ <p>
+ An event of type
+ <seealso marker="#type-event_type"><c>internal</c></seealso>
+ is to be used when you want to reliably distinguish
+ an event inserted this way from any external event.
+ </p>
+ </item>
+ </taglist>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="reply_action"/>
+ <desc>
+ <p>
+ Replies to a caller waiting for a reply in
+ <seealso marker="#call/2"><c>call/2</c></seealso>.
+ <c><anno>From</anno></c> must be the term from argument
+ <seealso marker="#type-event_type"><c>{call,<anno>From</anno>}</c></seealso>
+ to the
+ <seealso marker="#state_function">state function</seealso>.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="state_function_result"/>
+ <desc>
+ <taglist>
+ <tag><c>next_state</c></tag>
+ <item>
+ <p>
+ The <c>gen_statem</c> does a state transition to
+ <c><anno>NextStateName</anno></c>
+ (which can be the same as the current state),
+ sets <c><anno>NewData</anno></c>,
+ and executes all <c><anno>Actions</anno></c>.
+ </p>
+ </item>
+ </taglist>
+ <p>
+ All these terms are tuples or atoms and this property
+ will hold in any future version of <c>gen_statem</c>.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="handle_event_result"/>
+ <desc>
+ <taglist>
+ <tag><c>next_state</c></tag>
+ <item>
+ <p>
+ The <c>gen_statem</c> does a state transition to
+ <c><anno>NextState</anno></c>
+ (which can be the same as the current state),
+ sets <c><anno>NewData</anno></c>,
+ and executes all <c><anno>Actions</anno></c>.
+ </p>
+ </item>
+ </taglist>
+ <p>
+ All these terms are tuples or atoms and this property
+ will hold in any future version of <c>gen_statem</c>.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="common_state_callback_result"/>
+ <desc>
+ <taglist>
+ <tag><c>stop</c></tag>
+ <item>
+ <p>
+ Terminates the <c>gen_statem</c> by calling
+ <seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso>
+ with <c>Reason</c> and
+ <c><anno>NewData</anno></c>, if specified.
+ </p>
+ </item>
+ <tag><c>stop_and_reply</c></tag>
+ <item>
+ <p>
+ Sends all <c><anno>Replies</anno></c>,
+ then terminates the <c>gen_statem</c> by calling
+ <seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso>
+ with <c>Reason</c> and
+ <c><anno>NewData</anno></c>, if specified.
+ </p>
+ </item>
+ <tag><c>keep_state</c></tag>
+ <item>
+ <p>
+ The <c>gen_statem</c> keeps the current state, or
+ does a state transition to the current state if you like,
+ sets <c><anno>NewData</anno></c>,
+ and executes all <c><anno>Actions</anno></c>.
+ This is the same as
+ <c>{next_state,CurrentState,<anno>NewData</anno>,<anno>Actions</anno>}</c>.
+ </p>
+ </item>
+ <tag><c>keep_state_and_data</c></tag>
+ <item>
+ <p>
+ The <c>gen_statem</c> keeps the current state or
+ does a state transition to the current state if you like,
+ keeps the current server data,
+ and executes all <c><anno>Actions</anno></c>.
+ This is the same as
+ <c>{next_state,CurrentState,CurrentData,<anno>Actions</anno>}</c>.
+ </p>
+ </item>
+ </taglist>
+ <p>
+ All these terms are tuples or atoms and this property
+ will hold in any future version of <c>gen_statem</c>.
+ </p>
+ </desc>
+ </datatype>
+ </datatypes>
+
+ <funcs>
+ <func>
+ <name name="call" arity="2"/>
+ <name name="call" arity="3"/>
+ <fsummary>Make a synchronous call to a <c>gen_statem</c>.</fsummary>
+ <desc>
+ <p>
+ Makes a synchronous call to the <c>gen_statem</c>
+ <seealso marker="#type-server_ref"><c><anno>ServerRef</anno></c></seealso>
+ by sending a request
+ and waiting until its reply arrives.
+ The <c>gen_statem</c> calls the
+ <seealso marker="#state_function">state function</seealso> with
+ <seealso marker="#type-event_type"><c>event_type()</c></seealso>
+ <c>{call,From}</c> and event content
+ <c><anno>Request</anno></c>.
+ </p>
+ <p>
+ A <c><anno>Reply</anno></c> is generated when a
+ <seealso marker="#state_function">state function</seealso>
+ returns with
+ <c>{reply,From,<anno>Reply</anno>}</c> as one
+ <seealso marker="#type-action"><c>action()</c></seealso>,
+ and that <c><anno>Reply</anno></c> becomes the return value
+ of this function.
+ </p>
+ <p>
+ <c><anno>Timeout</anno></c> is an integer &gt; 0,
+ which specifies how many milliseconds to wait for a reply,
+ or the atom <c>infinity</c> to wait indefinitely,
+ which is the default. If no reply is received within
+ the specified time, the function call fails.
+ </p>
+ <note>
+ <p>
+ To avoid getting a late reply in the caller's
+ inbox, this function spawns a proxy process that
+ does the call. A late reply gets delivered to the
+ dead proxy process, hence gets discarded. This is
+ less efficient than using
+ <c><anno>Timeout</anno> =:= infinity</c>.
+ </p>
+ </note>
+ <p>
+ The call can fail, for example, if the <c>gen_statem</c> dies
+ before or during this function call.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="cast" arity="2"/>
+ <fsummary>Send an asynchronous event to a <c>gen_statem</c>.</fsummary>
+ <desc>
+ <p>
+ Sends an asynchronous event to the <c>gen_statem</c>
+ <seealso marker="#type-server_ref"><c><anno>ServerRef</anno></c></seealso>
+ and returns <c>ok</c> immediately,
+ ignoring if the destination node or <c>gen_statem</c>
+ does not exist.
+ The <c>gen_statem</c> calls the
+ <seealso marker="#state_function">state function</seealso> with
+ <seealso marker="#type-event_type"><c>event_type()</c></seealso>
+ <c>cast</c> and event content
+ <c><anno>Msg</anno></c>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="enter_loop" arity="5"/>
+ <fsummary>Enter the <c>gen_statem</c> receive loop.</fsummary>
+ <desc>
+ <p>
+ The same as
+ <seealso marker="#enter_loop/7"><c>enter_loop/7</c></seealso>
+ except that no
+ <seealso marker="#type-server_name"><c>server_name()</c></seealso>
+ must have been registered.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="enter_loop" arity="6"/>
+ <fsummary>Enter the <c>gen_statem</c> receive loop.</fsummary>
+ <desc>
+ <p>
+ If <c><anno>Server_or_Actions</anno></c> is a <c>list()</c>,
+ the same as
+ <seealso marker="#enter_loop/7"><c>enter_loop/7</c></seealso>
+ except that no
+ <seealso marker="#type-server_name"><c>server_name()</c></seealso>
+ must have been registered and
+ <c>Actions = <anno>Server_or_Actions</anno></c>.
+ </p>
+ <p>
+ Otherwise the same as
+ <seealso marker="#enter_loop/7"><c>enter_loop/7</c></seealso>
+ with
+ <c>Server = <anno>Server_or_Actions</anno></c> and
+ <c>Actions = []</c>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="enter_loop" arity="7"/>
+ <fsummary>Enter the <c>gen_statem</c> receive loop.</fsummary>
+ <desc>
+ <p>
+ Makes the calling process become a <c>gen_statem</c>.
+ Does not return, instead the calling process enters
+ the <c>gen_statem</c> receive loop and becomes
+ a <c>gen_statem</c> server.
+ The process <em>must</em> have been started
+ using one of the start functions in
+ <seealso marker="proc_lib"><c>proc_lib</c></seealso>.
+ The user is responsible for any initialization of the process,
+ including registering a name for it.
+ </p>
+ <p>
+ This function is useful when a more complex initialization
+ procedure is needed than
+ the <c>gen_statem</c> behavior provides.
+ </p>
+ <p>
+ <c><anno>Module</anno></c>, <c><anno>Opts</anno></c>, and
+ <c><anno>Server</anno></c> have the same meanings
+ as when calling
+ <seealso marker="#start_link/3"><c>start[_link]/3,4</c></seealso>.
+ However, the
+ <seealso marker="#type-server_name"><c>server_name()</c></seealso>
+ name must have been registered accordingly
+ <em>before</em> this function is called.</p>
+ <p>
+ <c><anno>CallbackMode</anno></c>, <c><anno>State</anno></c>,
+ <c><anno>Data</anno></c>, and <c><anno>Actions</anno></c>
+ have the same meanings as in the return value of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.
+ Also, the callback module <c><anno>Module</anno></c>
+ does not need to export an <c>init/1</c> function.
+ </p>
+ <p>
+ The function fails if the calling process was not started by a
+ <seealso marker="proc_lib"><c>proc_lib</c></seealso>
+ start function, or if it is not registered
+ according to
+ <seealso marker="#type-server_name"><c>server_name()</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="reply" arity="1"/>
+ <name name="reply" arity="2"/>
+ <fsummary>Reply to a caller.</fsummary>
+ <desc>
+ <p>
+ This function can be used by a <c>gen_statem</c>
+ to explicitly send a reply to a process that waits in
+ <seealso marker="#call/2"><c>call/2</c></seealso>
+ when the reply cannot be defined in
+ the return value of a
+ <seealso marker="#state_function">state function</seealso>.
+ </p>
+ <p>
+ <c><anno>From</anno></c> must be the term from argument
+ <seealso marker="#type-event_type"><c>{call,<anno>From</anno>}</c></seealso>
+ to the
+ <seealso marker="#state_function">state function</seealso>.
+ <c><anno>From</anno></c> and <c><anno>Reply</anno></c>
+ can also be specified using a
+ <seealso marker="#type-reply_action"><c>reply_action()</c></seealso>
+ and multiple replies with a list of them.
+ </p>
+ <note>
+ <p>
+ A reply sent with this function is not visible
+ in <seealso marker="sys"><c>sys</c></seealso> debug output.
+ </p>
+ </note>
+ </desc>
+ </func>
+
+ <func>
+ <name name="start" arity="3"/>
+ <name name="start" arity="4"/>
+ <fsummary>Create a standalone <c>gen_statem</c> process.</fsummary>
+ <desc>
+ <p>
+ Creates a standalone <c>gen_statem</c> process according to
+ OTP design principles (using
+ <seealso marker="proc_lib"><c>proc_lib</c></seealso>
+ primitives).
+ As it does not get linked to the calling process,
+ this start function cannot be used by a supervisor
+ to start a child.
+ </p>
+ <p>
+ For a description of arguments and return values, see
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="start_link" arity="3"/>
+ <name name="start_link" arity="4"/>
+ <fsummary>Create a linked <c>gen_statem</c> process.</fsummary>
+ <desc>
+ <p>
+ Creates a <c>gen_statem</c> process according
+ to OTP design principles
+ (using
+ <seealso marker="proc_lib"><c>proc_lib</c></seealso>
+ primitives)
+ that is linked to the calling process.
+ This is essential when the <c>gen_statem</c> must be part of
+ a supervision tree so it gets linked to its supervisor.
+ </p>
+ <p>
+ The <c>gen_statem</c> process calls
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ to initialize the server. To ensure a synchronized startup
+ procedure, <c>start_link/3,4</c> does not return until
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ has returned.
+ </p>
+ <p>
+ <c><anno>ServerName</anno></c> specifies the
+ <seealso marker="#type-server_name"><c>server_name()</c></seealso>
+ to register for the <c>gen_statem</c>.
+ If the <c>gen_statem</c> is started with <c>start_link/3</c>,
+ no <c><anno>ServerName</anno></c> is provided and
+ the <c>gen_statem</c> is not registered.
+ </p>
+ <p><c><anno>Module</anno></c> is the name of the callback module.</p>
+ <p>
+ <c><anno>Args</anno></c> is an arbitrary term that is passed as
+ the argument to
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.
+ </p>
+ <list type="bulleted">
+ <item>
+ <p>
+ If option <c>{timeout,Time}</c> is present in
+ <c><anno>Opts</anno></c>, the <c>gen_statem</c>
+ is allowed to spend <c>Time</c> milliseconds initializing
+ or it terminates and the start function returns
+ <seealso marker="#type-start_ret"><c>{error,timeout}</c></seealso>.
+ </p>
+ </item>
+ <item>
+ <p>
+ If option
+ <seealso marker="#type-debug_opt"><c>{debug,Dbgs}</c></seealso>
+ is present in <c><anno>Opts</anno></c>, debugging through
+ <seealso marker="sys"><c>sys</c></seealso> is activated.
+ </p>
+ </item>
+ <item>
+ <p>
+ If option <c>{spawn_opt,SpawnOpts}</c> is present in
+ <c><anno>Opts</anno></c>, <c>SpawnOpts</c> is passed
+ as option list to
+ <seealso marker="erts:erlang#spawn_opt/2"><c>erlang:spawn_opt/2</c></seealso>,
+ which is used to spawn the <c>gen_statem</c> process.
+ </p>
+ </item>
+ </list>
+ <note>
+ <p>
+ Using spawn option <c>monitor</c> is not
+ allowed, it causes this function to fail with reason
+ <c>badarg</c>.
+ </p>
+ </note>
+ <p>
+ If the <c>gen_statem</c> is successfully created
+ and initialized, this function returns
+ <seealso marker="#type-start_ret"><c>{ok,Pid}</c></seealso>,
+ where <c>Pid</c> is the <c>pid()</c>
+ of the <c>gen_statem</c>.
+ If a process with the specified <c><anno>ServerName</anno></c>
+ exists already, this function returns
+ <seealso marker="#type-start_ret"><c>{error,{already_started,Pid}}</c></seealso>,
+ where <c>Pid</c> is the <c>pid()</c> of that process.
+ </p>
+ <p>
+ If <c>Module:init/1</c> fails with <c>Reason</c>,
+ this function returns
+ <seealso marker="#type-start_ret"><c>{error,Reason}</c></seealso>.
+ If <c>Module:init/1</c> returns
+ <seealso marker="#type-start_ret"><c>{stop,Reason}</c></seealso>
+ or
+ <seealso marker="#type-start_ret"><c>ignore</c></seealso>,
+ the process is terminated and this function
+ returns
+ <seealso marker="#type-start_ret"><c>{error,Reason}</c></seealso>
+ or
+ <seealso marker="#type-start_ret"><c>ignore</c></seealso>,
+ respectively.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="stop" arity="1"/>
+ <fsummary>Synchronously stop a generic server.</fsummary>
+ <desc>
+ <p>
+ The same as
+ <seealso marker="#stop/3"><c>stop(<anno>ServerRef</anno>, normal, infinity)</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="stop" arity="3"/>
+ <fsummary>Synchronously stop a generic server.</fsummary>
+ <desc>
+ <p>
+ Orders the <c>gen_statem</c>
+ <seealso marker="#type-server_ref"><c><anno>ServerRef</anno></c></seealso>
+ to exit with the specified <c><anno>Reason</anno></c>
+ and waits for it to terminate.
+ The <c>gen_statem</c> calls
+ <seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso>
+ before exiting.
+ </p>
+ <p>
+ This function returns <c>ok</c> if the server terminates
+ with the expected reason. Any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c> causes an
+ error report to be issued through
+ <seealso marker="kernel:error_logger#format/2"><c>error_logger:format/2</c></seealso>.
+ The default <c><anno>Reason</anno></c> is <c>normal</c>.
+ </p>
+ <p>
+ <c><anno>Timeout</anno></c> is an integer &gt; 0,
+ which specifies how many milliseconds to wait for the server to
+ terminate, or the atom <c>infinity</c> to wait indefinitely.
+ Defaults to <c>infinity</c>.
+ If the server does not terminate within the specified time,
+ a <c>timeout</c> exception is raised.
+ </p>
+ <p>
+ If the process does not exist, a <c>noproc</c> exception
+ is raised.
+ </p>
+ </desc>
+ </func>
+ </funcs>
+
+ <section>
+ <title>Callback Functions</title>
+ <p>
+ The following functions are to be exported from a
+ <c>gen_statem</c> callback module.
+ </p>
+ </section>
+
+ <funcs>
+ <func>
+ <name>Module:code_change(OldVsn, OldState, OldData, Extra) ->
+ Result
+ </name>
+ <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
+ <type>
+ <v>OldVsn = Vsn | {down,Vsn}</v>
+ <v>&nbsp;&nbsp;Vsn = term()</v>
+ <v>OldState = NewState = term()</v>
+ <v>Extra = term()</v>
+ <v>Result = {CallbackMode,NewState,NewData} | Reason</v>
+ <v>
+ CallbackMode =
+ <seealso marker="#type-callback_mode">callback_mode()</seealso>
+ </v>
+ <v>
+ OldState = NewState =
+ <seealso marker="#type-state">state()</seealso>
+ </v>
+ <v>
+ OldData = NewData =
+ <seealso marker="#type-data">data()</seealso>
+ </v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>
+ This function is called by a <c>gen_statem</c> when it is to
+ update its internal state during a release upgrade/downgrade,
+ that is, when the instruction <c>{update,Module,Change,...}</c>,
+ where <c>Change={advanced,Extra}</c>, is specified in the
+ <seealso marker="sasl:appup"><c>appup</c></seealso>
+ file. For more information, see
+ <seealso marker="doc/design_principles:release_handling#instr">OTP Design Principles</seealso>.
+ </p>
+ <p>
+ For an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
+ for a downgrade, <c>OldVsn</c> is
+ <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
+ attribute(s) of the old version of the callback module
+ <c>Module</c>. If no such attribute is defined, the version
+ is the checksum of the Beam file.
+ </p>
+ <note>
+ <p>
+ If you would dare to change
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ during release upgrade/downgrade, the upgrade is no problem,
+ as the new code surely knows what <em>callback mode</em>
+ it needs. However, for a downgrade this function must
+ know from argument <c>Extra</c> that comes from the
+ <seealso marker="sasl:appup"><c>sasl:appup</c></seealso>
+ file what <em>callback mode</em> the old code did use.
+ It can also be possible to figure this out
+ from argument <c>{down,Vsn}</c>, as <c>Vsn</c>
+ in effect defines the old callback module version.
+ </p>
+ </note>
+ <p>
+ <c>OldState</c> and <c>OldData</c> is the internal state
+ of the <c>gen_statem</c>.
+ </p>
+ <p>
+ <c>Extra</c> is passed "as is" from the <c>{advanced,Extra}</c>
+ part of the update instruction.
+ </p>
+ <p>
+ If successful, the function must return the updated
+ internal state in an
+ <c>{CallbackMode,NewState,NewData}</c> tuple.
+ </p>
+ <p>
+ If the function returns a failure <c>Reason</c>, the ongoing
+ upgrade fails and rolls back to the old release.
+ Note that <c>Reason</c> can not be a 3-tuple since that
+ will be regarded as a
+ <c>{CallbackMode,NewState,NewData}</c> tuple,
+ and that a tuple matching <c>{ok,_}</c>
+ is an invalid failure <c>Reason</c>.
+ It is recommended to use an atom as <c>Reason</c> since
+ it will be wrapped in an <c>{error,Reason}</c> tuple.
+ </p>
+ <p>
+ This function can use
+ <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>
+ to return <c>Result</c> or <c>Reason</c>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:init(Args) -> Result</name>
+ <fsummary>Initialize process and internal state.</fsummary>
+ <type>
+ <v>Args = term()</v>
+ <v>Result = {CallbackMode,State,Data}</v>
+ <v>&nbsp;| {CallbackMode,State,Data,Actions}</v>
+ <v>&nbsp;| {stop,Reason} | ignore</v>
+ <v>
+ CallbackMode =
+ <seealso marker="#type-callback_mode">callback_mode()</seealso>
+ </v>
+ <v>State = <seealso marker="#type-state">state()</seealso></v>
+ <v>
+ Data = <seealso marker="#type-data">data()</seealso>
+ </v>
+ <v>
+ Actions =
+ [<seealso marker="#type-action">action()</seealso>] |
+ <seealso marker="#type-action">action()</seealso>
+ </v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <marker id="Module:init-1"/>
+ <p>
+ Whenever a <c>gen_statem</c> is started using
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>
+ or
+ <seealso marker="#start/3"><c>start/3,4</c></seealso>,
+ this function is called by the new process to initialize
+ the implementation state and server data.
+ </p>
+ <p>
+ <c>Args</c> is the <c>Args</c> argument provided to the start
+ function.
+ </p>
+ <p>
+ If the initialization is successful, the function is to
+ return <c>{CallbackMode,State,Data}</c> or
+ <c>{CallbackMode,State,Data,Actions}</c>.
+ <c>CallbackMode</c> selects the
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ of the <c>gen_statem</c>.
+ <c>State</c> is the initial
+ <seealso marker="#type-state"><c>state()</c></seealso>
+ and <c>Data</c> the initial server
+ <seealso marker="#type-data"><c>data()</c></seealso>.
+ </p>
+ <p>
+ The <seealso marker="#type-action"><c>Actions</c></seealso>
+ are executed when entering the first
+ <seealso marker="#type-state">state</seealso> just as for a
+ <seealso marker="#state_function">state function</seealso>.
+ </p>
+ <p>
+ If the initialization fails,
+ the function is to return <c>{stop,Reason}</c>
+ or <c>ignore</c>; see
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>.
+ </p>
+ <p>
+ This function can use
+ <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>
+ to return <c>Result</c>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:format_status(Opt, [PDict,State,Data]) ->
+ Status
+ </name>
+ <fsummary>Optional function for providing a term describing the
+ current <c>gen_statem</c> status.</fsummary>
+ <type>
+ <v>Opt = normal | terminate</v>
+ <v>PDict = [{Key, Value}]</v>
+ <v>
+ State =
+ <seealso marker="#type-state">state()</seealso>
+ </v>
+ <v>
+ Data =
+ <seealso marker="#type-data">data()</seealso>
+ </v>
+ <v>Key = term()</v>
+ <v>Value = term()</v>
+ <v>Status = term()</v>
+ </type>
+ <desc>
+ <note>
+ <p>
+ This callback is optional, so a callback module does not need
+ to export it. The <c>gen_statem</c> module provides a default
+ implementation of this function that returns
+ <c>{State,Data}</c>. If this callback fails, the default
+ function returns <c>{State,Info}</c>,
+ where <c>Info</c> informs of the crash but no details,
+ to hide possibly sensitive data.
+ </p>
+ </note>
+ <p>This function is called by a <c>gen_statem</c> process when
+ any of the following apply:</p>
+ <list type="bulleted">
+ <item>
+ One of
+ <seealso marker="sys#get_status/1"><c>sys:get_status/1,2</c></seealso>
+ is invoked to get the <c>gen_statem</c> status. <c>Opt</c> is set
+ to the atom <c>normal</c> for this case.
+ </item>
+ <item>
+ The <c>gen_statem</c> terminates abnormally and logs an error.
+ <c>Opt</c> is set to the atom <c>terminate</c> for this case.
+ </item>
+ </list>
+ <p>
+ This function is useful for changing the form and
+ appearance of the <c>gen_statem</c> status for these cases. A
+ callback module wishing to change the
+ <seealso marker="sys#get_status/1"><c>sys:get_status/1,2</c></seealso>
+ return value and how
+ its status appears in termination error logs exports an
+ instance of <c>format_status/2</c>, which returns a term
+ describing the current status of the <c>gen_statem</c>.
+ </p>
+ <p>
+ <c>PDict</c> is the current value of the process dictionary
+ of the <c>gen_statem</c>.
+ </p>
+ <p>
+ <seealso marker="#type-state"><c>State</c></seealso>
+ is the internal state of the <c>gen_statem</c>.
+ </p>
+ <p>
+ <seealso marker="#type-data"><c>Data</c></seealso>
+ is the internal server data of the <c>gen_statem</c>.
+ </p>
+ <p>
+ The function is to return <c>Status</c>, a term that
+ changes the details of the current state and status of
+ the <c>gen_statem</c>. There are no restrictions on the
+ form <c>Status</c> can take, but for the
+ <seealso marker="sys#get_status/1"><c>sys:get_status/1,2</c></seealso>
+ case (when <c>Opt</c>
+ is <c>normal</c>), the recommended form for
+ the <c>Status</c> value is <c>[{data, [{"State",
+ Term}]}]</c>, where <c>Term</c> provides relevant details of
+ the <c>gen_statem</c> state. Following this recommendation is not
+ required, but it makes the callback module status
+ consistent with the rest of the
+ <seealso marker="sys#get_status/1"><c>sys:get_status/1,2</c></seealso>
+ return value.
+ </p>
+ <p>
+ One use for this function is to return compact alternative
+ state representations to avoid having large state terms
+ printed in log files. Another use is to hide sensitive data from
+ being written to the error log.
+ </p>
+ <p>
+ This function can use
+ <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>
+ to return <c>Status</c>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:StateName(EventType, EventContent, Data) ->
+ StateFunctionResult
+ </name>
+ <name>Module:handle_event(EventType, EventContent,
+ State, Data) -> HandleEventResult
+ </name>
+ <fsummary>Handle an event.</fsummary>
+ <type>
+ <v>
+ EventType =
+ <seealso marker="#type-event_type">event_type()</seealso>
+ </v>
+ <v>EventContent = term()</v>
+ <v>
+ State =
+ <seealso marker="#type-state">state()</seealso>
+ </v>
+ <v>
+ Data = NewData =
+ <seealso marker="#type-data">data()</seealso>
+ </v>
+ <v>
+ StateFunctionResult =
+ <seealso marker="#type-state_function_result">state_function_result()</seealso>
+ </v>
+ <v>
+ HandleEventResult =
+ <seealso marker="#type-handle_event_result">handle_event_result()</seealso>
+ </v>
+ </type>
+ <desc>
+ <p>
+ Whenever a <c>gen_statem</c> receives an event from
+ <seealso marker="#call/2"><c>call/2</c></seealso>,
+ <seealso marker="#cast/2"><c>cast/2</c></seealso>, or
+ as a normal process message, one of these functions is called. If
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ is <c>state_functions</c>, <c>Module:StateName/3</c> is called,
+ and if it is <c>handle_event_function</c>,
+ <c>Module:handle_event/4</c> is called.
+ </p>
+ <p>
+ If <c>EventType</c> is
+ <seealso marker="#type-event_type"><c>{call,From}</c></seealso>,
+ the caller waits for a reply. The reply can be sent
+ from this or from any other
+ <seealso marker="#state_function">state function</seealso>
+ by returning with <c>{reply,From,Reply}</c> in
+ <seealso marker="#type-action"><c>Actions</c></seealso>, in
+ <seealso marker="#type-reply_action"><c>Replies</c></seealso>,
+ or by calling
+ <seealso marker="#reply/2"><c>reply(From, Reply)</c></seealso>.
+ </p>
+ <p>
+ If this function returns with a next state that
+ does not match equal (<c>=/=</c>) to the current state,
+ all postponed events are retried in the next state.
+ </p>
+ <p>
+ The only difference between <c>StateFunctionResult</c> and
+ <c>HandleEventResult</c> is that for <c>StateFunctionResult</c>
+ the next state must be an atom, but for <c>HandleEventResult</c>
+ there is no restriction on the next state.
+ </p>
+ <p>
+ For options that can be set and actions that can be done
+ by <c>gen_statem</c> after returning from this function,
+ see <seealso marker="#type-action"><c>action()</c></seealso>.
+ </p>
+ <p>
+ These functions can use
+ <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>,
+ to return the result.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:terminate(Reason, State, Data) -> Ignored</name>
+ <fsummary>Clean up before termination.</fsummary>
+ <type>
+ <v>Reason = normal | shutdown | {shutdown,term()} | term()</v>
+ <v>State = <seealso marker="#type-state">state()</seealso></v>
+ <v>Data = <seealso marker="#type-data">data()</seealso></v>
+ <v>Ignored = term()</v>
+ </type>
+ <desc>
+ <p>
+ This function is called by a <c>gen_statem</c>
+ when it is about to terminate. It is to be the opposite of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ and do any necessary cleaning up. When it returns,
+ the <c>gen_statem</c> terminates with <c>Reason</c>. The return
+ value is ignored.</p>
+ <p>
+ <c>Reason</c> is a term denoting the stop reason and
+ <seealso marker="#type-state"><c>State</c></seealso>
+ is the internal state of the <c>gen_statem</c>.
+ </p>
+ <p>
+ <c>Reason</c> depends on why the <c>gen_statem</c>
+ is terminating.
+ If it is because another callback function has returned, a
+ stop tuple <c>{stop,Reason}</c> in
+ <seealso marker="#type-action"><c>Actions</c></seealso>,
+ <c>Reason</c> has the value specified in that tuple.
+ If it is because of a failure, <c>Reason</c> is the error reason.
+ </p>
+ <p>
+ If the <c>gen_statem</c> is part of a supervision tree and is
+ ordered by its supervisor to terminate, this function is
+ called with <c>Reason = shutdown</c> if both the following
+ conditions apply:</p>
+ <list type="bulleted">
+ <item>
+ <p>
+ The <c>gen_statem</c> has been set
+ to trap exit signals.
+ </p>
+ </item>
+ <item>
+ <p>
+ The shutdown strategy as defined in the supervisor's
+ child specification is an integer time-out value, not
+ <c>brutal_kill</c>.
+ </p>
+ </item>
+ </list>
+ <p>
+ Even if the <c>gen_statem</c> is <em>not</em>
+ part of a supervision tree, this function is called
+ if it receives an <c>'EXIT'</c> message from its parent.
+ <c>Reason</c> is the same as
+ in the <c>'EXIT'</c> message.
+ </p>
+ <p>
+ Otherwise, the <c>gen_statem</c> is immediately terminated.
+ </p>
+ <p>
+ Notice that for any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c>,
+ the <c>gen_statem</c> is assumed to terminate because of an error
+ and an error report is issued using
+ <seealso marker="kernel:error_logger#format/2"><c>error_logger:format/2</c></seealso>.
+ </p>
+ <p>
+ This function can use
+ <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>
+ to return <c>Ignored</c>, which is ignored anyway.
+ </p>
+ </desc>
+ </func>
+ </funcs>
+
+ <section>
+ <title>See Also</title>
+ <p>
+ <seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="gen_fsm"><c>gen_fsm(3)</c></seealso>,
+ <seealso marker="gen_server"><c>gen_server(3)</c></seealso>,
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>,
+ <seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso>.
+ </p>
+ </section>
+</erlref>
diff --git a/lib/stdlib/doc/src/introduction.xml b/lib/stdlib/doc/src/introduction.xml
new file mode 100644
index 0000000000..5bf545c65f
--- /dev/null
+++ b/lib/stdlib/doc/src/introduction.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>1999</year>
+ <year>2013</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title>Introduction</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>2016-03-04</date>
+ <rev>PA1</rev>
+ <file>introduction.xml</file>
+ </header>
+
+ <section>
+ <title>Scope</title>
+ <p>The Standard Erlang Libraries application, <em>STDLIB</em>, is mandatory
+ in the sense that the minimal system based on Erlang/OTP consists of
+ <em>STDLIB</em> and <em>Kernel</em>.</p>
+
+ <p><em>STDLIB</em> contains the following functional areas:</p>
+
+ <list type="bulleted">
+ <item>Erlang shell</item>
+ <item>Command interface</item>
+ <item>Query interface</item>
+ <item>Interface to standard Erlang I/O servers</item>
+ <item>Interface to the Erlang built-in term storage BIFs</item>
+ <item>Regular expression matching functions for strings and binaries</item>
+ <item>Finite state machine</item>
+ <item>Event handling</item>
+ <item>Functions for the server of a client-server relation</item>
+ <item>Function to control applications in a distributed manner</item>
+ <item>Start and control of slave nodes</item>
+ <item>Operations on finite sets and relations represented as sets</item>
+ <item>Library for handling binary data</item>
+ <item>Disk-based term storage</item>
+ <item>List processing</item>
+ <item>Maps processing</item>
+ </list>
+ </section>
+
+ <section>
+ <title>Prerequisites</title>
+ <p>It is assumed that the reader is familiar with the Erlang programming
+ language.</p>
+ </section>
+</chapter>
+
+
diff --git a/lib/stdlib/doc/src/io.xml b/lib/stdlib/doc/src/io.xml
index 4655c8662f..11a64c7f8a 100644
--- a/lib/stdlib/doc/src/io.xml
+++ b/lib/stdlib/doc/src/io.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,48 +29,50 @@
<rev></rev>
</header>
<module>io</module>
- <modulesummary>Standard I/O Server Interface Functions</modulesummary>
+ <modulesummary>Standard I/O server interface functions.</modulesummary>
<description>
<p>This module provides an interface to standard Erlang I/O servers.
The output functions all return <c>ok</c> if they are successful,
or exit if they are not.</p>
- <p>In the following description, all functions have an optional
+
+ <p>All functions in this module have an optional
parameter <c>IoDevice</c>. If included, it must be the pid of a
- process which handles the IO protocols. Normally, it is the
+ process that handles the I/O protocols. Normally, it is the
<c>IoDevice</c> returned by
- <seealso marker="kernel:file#open/2">file:open/2</seealso>.</p>
- <p>For a description of the IO protocols refer to the <seealso marker="io_protocol">STDLIB User's Guide</seealso>.</p>
- <warning>
-
- <p>As of R13A, data supplied to the <seealso
- marker="#put_chars/2">put_chars</seealso> function should be in the
- <seealso marker="unicode#type-chardata"><c>unicode:chardata()</c></seealso> format. This means that programs
- supplying binaries to this function need to convert them to UTF-8
- before trying to output the data on an IO device.</p>
-
- <p>If an IO device is set in binary mode, the functions <seealso
- marker="#get_chars/3">get_chars</seealso> and <seealso
- marker="#get_line/2">get_line</seealso> may return binaries
- instead of lists. The binaries will, as of R13A, be encoded in
- UTF-8.</p>
+ <seealso marker="kernel:file#open/2"><c>file:open/2</c></seealso>.</p>
- <p>To work with binaries in ISO-latin-1 encoding, use the <seealso
- marker="kernel:file">file</seealso> module instead.</p>
-
- <p>For conversion functions between character encodings, see the <seealso
- marker="stdlib:unicode">unicode</seealso> module.</p>
+ <p>For a description of the I/O protocols, see section
+ <seealso marker="io_protocol">The Erlang I/O Protocol</seealso>
+ in the User's Guide.</p>
+ <warning>
+ <p>As from Erlang/OTP R13A, data supplied to function
+ <seealso marker="#put_chars/2"><c>put_chars/2</c></seealso>
+ is to be in the <seealso marker="unicode#type-chardata">
+ <c>unicode:chardata()</c></seealso> format. This means that programs
+ supplying binaries to this function must convert them to UTF-8
+ before trying to output the data on an I/O device.</p>
+ <p>If an I/O device is set in binary mode, functions
+ <seealso marker="#get_chars/2"><c>get_chars/2,3</c></seealso> and
+ <seealso marker="#get_line/1"><c>get_line/1,2</c></seealso>
+ can return binaries instead of lists.
+ The binaries are, as from Erlang/OTP R13A,
+ encoded in UTF-8.</p>
+ <p>To work with binaries in ISO Latin-1 encoding, use the
+ <seealso marker="kernel:file"><c>file</c></seealso> module instead.</p>
+ <p>For conversion functions between character encodings, see the
+ <seealso marker="stdlib:unicode"><c>unicode</c></seealso> module.</p>
</warning>
-
</description>
<datatypes>
<datatype>
<name name="device"/>
<desc>
- <p>An IO device. Either <c>standard_io</c>, <c>standard_error</c>, a
- registered name, or a pid handling IO protocols (returned from
- <seealso marker="kernel:file#open/2">file:open/2</seealso>).</p>
+ <p>An I/O device, either <c>standard_io</c>, <c>standard_error</c>, a
+ registered name, or a pid handling I/O protocols (returned from
+ <seealso marker="kernel:file#open/2"><c>file:open/2</c></seealso>).
+ </p>
</desc>
</datatype>
<datatype>
@@ -96,7 +98,7 @@
</datatype>
<datatype>
<name name="server_no_data"/>
- <desc><p>What the I/O-server sends when there is no data.</p></desc>
+ <desc><p>What the I/O server sends when there is no data.</p></desc>
</datatype>
</datatypes>
@@ -104,329 +106,93 @@
<func>
<name name="columns" arity="0"/>
<name name="columns" arity="1"/>
- <fsummary>Get the number of columns of an IO device</fsummary>
- <desc>
- <p>Retrieves the number of columns of the
- <c><anno>IoDevice</anno></c> (i.e. the width of a terminal). The function
- only succeeds for terminal devices, for all other IO devices
- the function returns <c>{error, enotsup}</c></p>
- </desc>
- </func>
- <func>
- <name name="put_chars" arity="1"/>
- <name name="put_chars" arity="2"/>
- <fsummary>Write a list of characters</fsummary>
- <desc>
- <p>Writes the characters of <c><anno>CharData</anno></c> to the I/O server
- (<c><anno>IoDevice</anno></c>).</p>
- </desc>
- </func>
- <func>
- <name name="nl" arity="0"/>
- <name name="nl" arity="1"/>
- <fsummary>Write a newline</fsummary>
- <desc>
- <p>Writes new line to the standard output (<c><anno>IoDevice</anno></c>).</p>
- </desc>
- </func>
- <func>
- <name name="get_chars" arity="2"/>
- <name name="get_chars" arity="3"/>
- <fsummary>Read a specified number of characters</fsummary>
- <type name="server_no_data"/>
- <desc>
- <p>Reads <c><anno>Count</anno></c> characters from standard input
- (<c><anno>IoDevice</anno></c>), prompting it with <c><anno>Prompt</anno></c>. It
- returns:</p>
- <taglist>
- <tag><c><anno>Data</anno></c></tag>
- <item>
- <p>The input characters. If the IO device supports Unicode,
- the data may represent codepoints larger than 255 (the
- latin1 range). If the I/O server is set to deliver
- binaries, they will be encoded in UTF-8 (regardless of if
- the IO device actually supports Unicode or not).</p>
- </item>
- <tag><c>eof</c></tag>
- <item>
- <p>End of file was encountered.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="get_line" arity="1"/>
- <name name="get_line" arity="2"/>
- <fsummary>Read a line</fsummary>
- <type name="server_no_data"/>
- <desc>
- <p>Reads a line from the standard input (<c><anno>IoDevice</anno></c>),
- prompting it with <c><anno>Prompt</anno></c>. It returns:</p>
- <taglist>
- <tag><c><anno>Data</anno></c></tag>
- <item>
- <p>The characters in the line terminated by a LF (or end of
- file). If the IO device supports Unicode,
- the data may represent codepoints larger than 255 (the
- latin1 range). If the I/O server is set to deliver
- binaries, they will be encoded in UTF-8 (regardless of if
- the IO device actually supports Unicode or not).</p>
- </item>
- <tag><c>eof</c></tag>
- <item>
- <p>End of file was encountered.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="getopts" arity="0"/>
- <name name="getopts" arity="1"/>
- <fsummary>Get the supported options and values from an I/O-server</fsummary>
+ <fsummary>Get the number of columns of an I/O device.</fsummary>
<desc>
- <p>This function requests all available options and their current values for a specific IO device. Example:</p>
-<pre>
-1> <input>{ok,F} = file:open("/dev/null",[read]).</input>
-{ok,&lt;0.42.0&gt;}
-2> <input>io:getopts(F).</input>
-[{binary,false},{encoding,latin1}]</pre>
- <p>Here the file I/O-server returns all available options for a file,
- which are the expected ones, <c>encoding</c> and <c>binary</c>. The standard shell however has some more options:</p>
-<pre>
-3> io:getopts().
-[{expand_fun,#Fun&lt;group.0.120017273&gt;},
- {echo,true},
- {binary,false},
- {encoding,unicode}]</pre>
- <p>This example is, as can be seen, run in an environment where the terminal supports Unicode input and output.</p>
+ <p>Retrieves the number of columns of the
+ <c><anno>IoDevice</anno></c> (that is, the width of a terminal).
+ The function succeeds for terminal devices and returns
+ <c>{error, enotsup}</c> for all other I/O devices.</p>
</desc>
</func>
- <func>
- <name name="printable_range" arity="0"/>
- <fsummary>Get user requested printable character range</fsummary>
- <desc>
- <p>Return the user requested range of printable Unicode characters.</p>
- <p>The user can request a range of characters that are to be considered printable in heuristic detection of strings by the shell and by the formatting functions. This is done by supplying <c>+pc &lt;range&gt;</c> when starting Erlang.</p>
- <p>Currently the only valid values for <c>&lt;range&gt;</c> are <c>latin1</c> and <c>unicode</c>. <c>latin1</c> means that only code points below 256 (with the exception of control characters etc) will be considered printable. <c>unicode</c> means that all printable characters in all unicode character ranges are considered printable by the io functions.</p>
- <p>By default, Erlang is started so that only the <c>latin1</c> range of characters will indicate that a list of integers is a string.</p>
- <p>The simplest way to utilize the setting is to call <seealso marker="io_lib#printable_list/1">io_lib:printable_list/1</seealso>, which will use the return value of this function to decide if a list is a string of printable characters or not.</p>
- <note><p>In the future, this function may return more values and ranges. It is recommended to use the io_lib:printable_list/1 function to avoid compatibility problems.</p></note>
- </desc>
- </func>
- <func>
- <name name="setopts" arity="1"/>
- <name name="setopts" arity="2"/>
- <fsummary>Set options</fsummary>
- <desc>
- <p>Set options for the standard IO device (<c><anno>IoDevice</anno></c>).</p>
- <p>Possible options and values vary depending on the actual
- IO device. For a list of supported options and their current values
- on a specific IO device, use the <seealso
- marker="#getopts/1">getopts/1</seealso> function.</p>
-
- <p>The options and values supported by the current OTP IO devices are:</p>
- <taglist>
- <tag><c>binary, list or {binary, boolean()}</c></tag>
- <item>
- <p>If set in binary mode (<c>binary</c> or <c>{binary, true}</c>), the I/O server sends binary data (encoded in UTF-8) as answers to the <c>get_line</c>, <c>get_chars</c> and, if possible, <c>get_until</c> requests (see the I/O protocol description in <seealso marker="io_protocol">STDLIB User's Guide</seealso> for details). The immediate effect is that <c>get_chars/2,3</c> and <c>get_line/1,2</c> return UTF-8 binaries instead of lists of chars for the affected IO device.</p>
- <p>By default, all IO devices in OTP are set in list mode, but the I/O functions can handle any of these modes and so should other, user written, modules behaving as clients to I/O-servers.</p>
- <p>This option is supported by the standard shell (<c>group.erl</c>), the 'oldshell' (<c>user.erl</c>) and the file I/O servers.</p>
- </item>
- <tag><c>{echo, boolean()}</c></tag>
- <item>
- <p>Denotes if the terminal should echo input. Only supported for the standard shell I/O-server (<c>group.erl</c>)</p>
- </item>
- <tag><c>{expand_fun, expand_fun()}</c></tag>
- <item>
- <p>Provide a function for tab-completion (expansion)
- like the Erlang shell. This function is called
- when the user presses the TAB key. The expansion is
- active when calling line-reading functions such as
- <c>get_line/1,2</c>.</p>
- <p>The function is called with the current line, upto
- the cursor, as a reversed string. It should return a
- three-tuple: <c>{yes|no, string(), [string(), ...]}</c>. The
- first element gives a beep if <c>no</c>, otherwise the
- expansion is silent, the second is a string that will be
- entered at the cursor position, and the third is a list of
- possible expansions. If this list is non-empty, the list
- will be printed and the current input line will be written
- once again.</p>
- <p>Trivial example (beep on anything except empty line, which
- is expanded to <c>"quit"</c>):</p>
- <code type="none">
- fun("") -> {yes, "quit", []};
- (_) -> {no, "", ["quit"]} end</code>
- <p>This option is supported by the standard shell only (<c>group.erl</c>).</p>
- </item>
- <tag><c>{encoding, latin1 | unicode}</c></tag>
- <item>
- <p>Specifies how characters are input or output from or to the actual IO device, implying that i.e. a terminal is set to handle Unicode input and output or a file is set to handle UTF-8 data encoding.</p>
- <p>The option <em>does not</em> affect how data is returned from the I/O functions or how it is sent in the I/O-protocol, it only affects how the IO device is to handle Unicode characters towards the &quot;physical&quot; device.</p>
- <p>The standard shell will be set for either Unicode or latin1 encoding when the system is started. The actual encoding is set with the help of the <c>LANG</c> or <c>LC_CTYPE</c> environment variables on Unix-like system or by other means on other systems. The bottom line is that the user can input Unicode characters and the IO device will be in <c>{encoding, unicode}</c> mode if the IO device supports it. The mode can be changed, if the assumption of the runtime system is wrong, by setting this option.</p>
- <p>The IO device used when Erlang is started with the "-oldshell" or "-noshell" flags is by default set to latin1 encoding, meaning that any characters beyond codepoint 255 will be escaped and that input is expected to be plain 8-bit ISO-latin-1. If the encoding is changed to Unicode, input and output from the standard file descriptors will be in UTF-8 (regardless of operating system).</p>
- <p>Files can also be set in <c>{encoding, unicode}</c>, meaning that data is written and read as UTF-8. More encodings are possible for files, see below.</p>
- <p><c>{encoding, unicode | latin1}</c> is supported by both the standard shell (<c>group.erl</c> including <c>werl</c> on Windows&reg;), the 'oldshell' (<c>user.erl</c>) and the file I/O servers.</p>
- </item>
- <tag><c>{encoding, utf8 | utf16 | utf32 | {utf16,big} | {utf16,little} | {utf32,big} | {utf32,little}}</c></tag>
- <item>
- <p>For disk files, the encoding can be set to various UTF variants. This will have the effect that data is expected to be read as the specified encoding from the file and the data will be written in the specified encoding to the disk file.</p>
- <p><c>{encoding, utf8}</c> will have the same effect as <c>{encoding, unicode}</c> on files.</p>
- <p>The extended encodings are only supported on disk files (opened by the <seealso marker="kernel:file#open/2">file:open/2</seealso> function)</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="write" arity="1"/>
- <name name="write" arity="2"/>
- <fsummary>Write a term</fsummary>
- <desc>
- <p>Writes the term <c><anno>Term</anno></c> to the standard output
- (<c><anno>IoDevice</anno></c>).</p>
- </desc>
- </func>
<func>
- <name name="read" arity="1"/>
- <name name="read" arity="2"/>
- <fsummary>Read a term</fsummary>
- <type name="server_no_data"/>
- <desc>
- <p>Reads a term <c><anno>Term</anno></c> from the standard input
- (<c><anno>IoDevice</anno></c>), prompting it with <c><anno>Prompt</anno></c>. It
- returns:</p>
- <taglist>
- <tag><c>{ok, <anno>Term</anno>}</c></tag>
- <item>
- <p>The parsing was successful.</p>
- </item>
- <tag><c>eof</c></tag>
- <item>
- <p>End of file was encountered.</p>
- </item>
- <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
- <item>
- <p>The parsing failed.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="read" arity="3"/>
- <name name="read" arity="4"/>
- <fsummary>Read a term</fsummary>
- <type name="server_no_data"/>
- <desc>
- <p>Reads a term <c><anno>Term</anno></c> from <c><anno>IoDevice</anno></c>, prompting it
- with <c><anno>Prompt</anno></c>. Reading starts at location
- <c><anno>StartLocation</anno></c>. The argument
- <c><anno>Options</anno></c> is passed on as the <c>Options</c>
- argument of the <c>erl_scan:tokens/4</c> function. It returns:</p>
- <taglist>
- <tag><c>{ok, Term, <anno>EndLocation</anno>}</c></tag>
- <item>
- <p>The parsing was successful.</p>
- </item>
- <tag><c>{eof, <anno>EndLocation</anno>}</c></tag>
- <item>
- <p>End of file was encountered.</p>
- </item>
- <tag><c>{error, <anno>ErrorInfo</anno>, <anno>ErrorLocation</anno>}</c></tag>
- <item>
- <p>The parsing failed.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="fwrite" arity="1"/>
- <name name="fwrite" arity="2"/>
- <name name="fwrite" arity="3"/>
<name name="format" arity="1"/>
<name name="format" arity="2"/>
<name name="format" arity="3"/>
- <fsummary>Write formatted output</fsummary>
+ <name name="fwrite" arity="1"/>
+ <name name="fwrite" arity="2"/>
+ <name name="fwrite" arity="3"/>
+ <fsummary>Write formatted output.</fsummary>
<desc>
- <p>Writes the items in <c><anno>Data</anno></c> (<c>[]</c>) on the standard
- output (<c><anno>IoDevice</anno></c>) in accordance with <c><anno>Format</anno></c>.
- <c><anno>Format</anno></c> contains plain characters which are copied to
+ <p>Writes the items in <c><anno>Data</anno></c> (<c>[]</c>) on the
+ standard output (<c><anno>IoDevice</anno></c>) in accordance with
+ <c><anno>Format</anno></c>. <c><anno>Format</anno></c> contains
+ plain characters that are copied to
the output device, and control sequences for formatting, see
- below. If <c><anno>Format</anno></c> is an atom or a binary, it is first
- converted to a list with the aid of <c>atom_to_list/1</c>
- or <c>binary_to_list/1</c>.</p>
+ below. If <c><anno>Format</anno></c> is an atom or a binary, it is
+ first converted to a list with the aid of <c>atom_to_list/1</c> or
+ <c>binary_to_list/1</c>. Example:</p>
<pre>
1> <input>io:fwrite("Hello world!~n", []).</input>
Hello world!
ok</pre>
- <p>The general format of a control sequence is <c>~F.P.PadModC</c>.
- The character <c>C</c> determines the type of control sequence
+ <p>The general format of a control sequence is <c>~F.P.PadModC</c>.</p>
+ <p>Character <c>C</c> determines the type of control sequence
to be used, <c>F</c> and <c>P</c> are optional numeric
arguments. If <c>F</c>, <c>P</c>, or <c>Pad</c> is <c>*</c>,
the next argument in <c>Data</c> is used as the numeric value
of <c>F</c> or <c>P</c>.</p>
- <p><c>F</c> is the <c>field width</c> of the printed argument. A
- negative value means that the argument will be left justified
- within the field, otherwise it will be right justified. If no
- field width is specified, the required print width will be
- used. If the field width specified is too small, then the
- whole field will be filled with <c>*</c> characters.</p>
- <p><c>P</c> is the <c>precision</c> of the printed argument. A
- default value is used if no precision is specified. The
- interpretation of precision depends on the control sequences.
- Unless otherwise specified, the argument <c>within</c> is used
- to determine print width.</p>
- <p><c>Pad</c> is the padding character. This is the character
- used to pad the printed representation of the argument so that
- it conforms to the specified field width and precision. Only
- one padding character can be specified and, whenever
- applicable, it is used for both the field width and precision.
- The default padding character is <c>' '</c> (space).</p>
- <p><c>Mod</c> is the control sequence modifier. It is either a
- single character (currently only <c>t</c>, for Unicode
- translation, and <c>l</c>, for stopping <c>p</c> and
- <c>P</c> from detecting printable characters, are supported)
- that changes the interpretation of Data.</p>
- <p>The following control sequences are available:</p>
+ <list type="bulleted">
+ <item>
+ <p><c>F</c> is the <c>field width</c> of the printed argument. A
+ negative value means that the argument is left-justified
+ within the field, otherwise right-justified. If no
+ field width is specified, the required print width is
+ used. If the field width specified is too small, the
+ whole field is filled with <c>*</c> characters.</p>
+ </item>
+ <item>
+ <p><c>P</c> is the <c>precision</c> of the printed argument. A
+ default value is used if no precision is specified. The
+ interpretation of precision depends on the control sequences.
+ Unless otherwise specified, argument <c>within</c> is used
+ to determine print width.</p>
+ </item>
+ <item>
+ <p><c>Pad</c> is the padding character. This is the character
+ used to pad the printed representation of the argument so that
+ it conforms to the specified field width and precision. Only
+ one padding character can be specified and, whenever
+ applicable, it is used for both the field width and precision.
+ The default padding character is <c>' '</c> (space).</p>
+ </item>
+ <item>
+ <p><c>Mod</c> is the control sequence modifier. It is either a
+ single character (<c>t</c>, for Unicode
+ translation, and <c>l</c>, for stopping <c>p</c> and
+ <c>P</c> from detecting printable characters)
+ that changes the interpretation of <c>Data</c>.</p>
+ </item>
+ </list>
+ <p><em>Available control sequences:</em></p>
<taglist>
<tag><c>~</c></tag>
<item>
- <p>The character <c>~</c> is written.</p>
+ <p>Character <c>~</c> is written.</p>
</item>
<tag><c>c</c></tag>
<item>
- <p>The argument is a number that will be interpreted as an
+ <p>The argument is a number that is interpreted as an
ASCII code. The precision is the number of times the
- character is printed and it defaults to the field width,
- which in turn defaults to 1. The following example
- illustrates:</p>
+ character is printed and defaults to the field width,
+ which in turn defaults to 1. Example:</p>
<pre>
1> <input>io:fwrite("|~10.5c|~-10.5c|~5c|~n", [$a, $b, $c]).</input>
| aaaaa|bbbbb |ccccc|
ok</pre>
<p>If the Unicode translation modifier (<c>t</c>) is in effect,
the integer argument can be any number representing a
- valid Unicode codepoint, otherwise it should be an integer
+ valid Unicode codepoint, otherwise it is to be an integer
less than or equal to 255, otherwise it is masked with 16#FF:</p>
<pre>
2> <input>io:fwrite("~tc~n",[1024]).</input>
@@ -435,29 +201,28 @@ ok
3> <input>io:fwrite("~c~n",[1024]).</input>
^@
ok</pre>
-
</item>
<tag><c>f</c></tag>
<item>
- <p>The argument is a float which is written as
+ <p>The argument is a float that is written as
<c>[-]ddd.ddd</c>, where the precision is the number of
digits after the decimal point. The default precision is 6
- and it cannot be less than 1.</p>
+ and it cannot be &lt; 1.</p>
</item>
<tag><c>e</c></tag>
<item>
- <p>The argument is a float which is written as
+ <p>The argument is a float that is written as
<c>[-]d.ddde+-ddd</c>, where the precision is the number
of digits written. The default precision is 6 and it
- cannot be less than 2.</p>
+ cannot be &lt; 2.</p>
</item>
<tag><c>g</c></tag>
<item>
- <p>The argument is a float which is written as <c>f</c>, if
+ <p>The argument is a float that is written as <c>f</c>, if
it is &gt;= 0.1 and &lt; 10000.0. Otherwise, it is written
in the <c>e</c> format. The precision is the number of
- significant digits. It defaults to 6 and should not be
- less than 2. If the absolute value of the float does not
+ significant digits. It defaults to 6 and is not to be
+ &lt; 2. If the absolute value of the float does not
allow it to be written in the <c>f</c> format with the
desired number of significant digits, it is also written
in the <c>e</c> format.</p>
@@ -471,8 +236,9 @@ ok</pre>
the argument is <c>unicode:chardata()</c>, meaning that
binaries are in UTF-8. The characters
are printed without quotes. The string is first truncated
- by the given precision and then padded and justified
- to the given field width. The default precision is the field width.</p>
+ by the specified precision and then padded and justified to the
+ specified field width. The default precision is the field width.
+ </p>
<p>This format can be used for printing any object and
truncating the output so it fits a specified field:</p>
<pre>
@@ -484,7 +250,8 @@ ok
3> <input>io:fwrite("|~-10.8s|~n", [io_lib:write({hey, hey, hey})]).</input>
|{hey,hey |
ok</pre>
- <p>A list with integers larger than 255 is considered an error if the Unicode translation modifier is not given:</p>
+ <p>A list with integers &gt; 255 is considered an error if the
+ Unicode translation modifier is not specified:</p>
<pre>
4> <input>io:fwrite("~ts~n",[[1024]]).</input>
\x{400}
@@ -497,8 +264,8 @@ ok
<item>
<p>Writes data with the standard syntax. This is used to
output Erlang terms. Atoms are printed within quotes if
- they contain embedded non-printable characters, and
- floats are printed accurately as the shortest, correctly
+ they contain embedded non-printable characters.
+ Floats are printed accurately as the shortest, correctly
rounded string.</p>
</item>
<tag><c>p</c></tag>
@@ -506,11 +273,11 @@ ok
<p>Writes the data with standard syntax in the same way as
<c>~w</c>, but breaks terms whose printed representation
is longer than one line into many lines and indents each
- line sensibly. Left justification is not supported.
+ line sensibly. Left-justification is not supported.
It also tries to detect lists of
printable characters and to output these as strings. The
Unicode translation modifier is used for determining
- what characters are printable. For example:</p>
+ what characters are printable, for example:</p>
<pre>
1> <input>T = [{attributes,[[{id,age,1.50000},{mode,explicit},</input>
<input>{typename,"INTEGER"}], [{id,cho},{mode,explicit},{typename,'Cho'}]]},</input>
@@ -531,12 +298,13 @@ ok
{tag,{'PRIVATE',3}},
{mode,implicit}]
ok</pre>
- <p>The field width specifies the maximum line length. It
- defaults to 80. The precision specifies the initial
+ <p>The field width specifies the maximum line length.
+ Defaults to 80. The precision specifies the initial
indentation of the term. It defaults to the number of
- characters printed on this line in the <c>same</c> call to
- <c>io:fwrite</c> or <c>io:format</c>. For example, using
- <c>T</c> above:</p>
+ characters printed on this line in the <em>same</em> call to
+ <seealso marker="#write/1"><c>write/1</c></seealso> or
+ <seealso marker="#format/1"><c>format/1,2,3</c></seealso>.
+ For example, using <c>T</c> above:</p>
<pre>
4> <input>io:fwrite("Here T = ~62p~n", [T]).</input>
Here T = [{attributes,[[{id,age,1.5},
@@ -549,8 +317,8 @@ Here T = [{attributes,[[{id,age,1.5},
{tag,{'PRIVATE',3}},
{mode,implicit}]
ok</pre>
- <p>When the modifier <c>l</c> is given no detection of
- printable character lists will take place. For example:</p>
+ <p>When the modifier <c>l</c> is specified, no detection of
+ printable character lists takes place, for example:</p>
<pre>
5> <input>S = [{a,"a"}, {b, "b"}].</input>
6> <input>io:fwrite("~15p~n", [S]).</input>
@@ -561,9 +329,9 @@ ok
[{a,[97]},
{b,[98]}]
ok</pre>
- <p>Binaries that look like UTF-8 encoded strings will be
+ <p>Binaries that look like UTF-8 encoded strings are
output with the string syntax if the Unicode translation
- modifier is given:</p>
+ modifier is specified:</p>
<pre>
9> <input>io:fwrite("~p~n",[[1024]]).</input>
[1024]
@@ -578,7 +346,7 @@ ok</pre>
<tag><c>W</c></tag>
<item>
<p>Writes data in the same way as <c>~w</c>, but takes an
- extra argument which is the maximum depth to which terms
+ extra argument that is the maximum depth to which terms
are printed. Anything below this depth is replaced with
<c>...</c>. For example, using <c>T</c> above:</p>
<pre>
@@ -587,17 +355,17 @@ ok</pre>
[{id,cho},{mode,...},{...}]]},{typename,'Person'},
{tag,{'PRIVATE',3}},{mode,implicit}]
ok</pre>
- <p>If the maximum depth has been reached, then it is
- impossible to read in the resultant output. Also, the
+ <p>If the maximum depth is reached, it cannot
+ be read in the resultant output. Also, the
<c>,...</c> form in a tuple denotes that there are more
elements in the tuple but these are below the print depth.</p>
</item>
<tag><c>P</c></tag>
<item>
<p>Writes data in the same way as <c>~p</c>, but takes an
- extra argument which is the maximum depth to which terms
+ extra argument that is the maximum depth to which terms
are printed. Anything below this depth is replaced with
- <c>...</c>. For example:</p>
+ <c>...</c>, for example:</p>
<pre>
9> <input>io:fwrite("~62P~n", [T,9]).</input>
[{attributes,[[{id,age,1.5},{mode,explicit},{typename,...}],
@@ -609,9 +377,9 @@ ok</pre>
</item>
<tag><c>B</c></tag>
<item>
- <p>Writes an integer in base 2..36, the default base is
+ <p>Writes an integer in base 2-36, the default base is
10. A leading dash is printed for negative integers.</p>
- <p>The precision field selects base. For example:</p>
+ <p>The precision field selects base, for example:</p>
<pre>
1> <input>io:fwrite("~.16B~n", [31]).</input>
1F
@@ -629,7 +397,7 @@ ok</pre>
prefix to insert before the number, but after the leading
dash, if any.</p>
<p>The prefix can be a possibly deep list of characters or
- an atom.</p>
+ an atom. Example:</p>
<pre>
1> <input>io:fwrite("~X~n", [31,"10#"]).</input>
10#31
@@ -641,7 +409,7 @@ ok</pre>
<tag><c>#</c></tag>
<item>
<p>Like <c>B</c>, but prints the number with an Erlang style
- <c>#</c>-separated base prefix.</p>
+ <c>#</c>-separated base prefix. Example:</p>
<pre>
1> <input>io:fwrite("~.10#~n", [31]).</input>
10#31
@@ -671,14 +439,14 @@ ok</pre>
<p>Ignores the next term.</p>
</item>
</taglist>
- <p>Returns:</p>
+ <p>The function returns:</p>
<taglist>
<tag><c>ok</c></tag>
<item>
<p>The formatting succeeded.</p>
</item>
</taglist>
- <p>If an error occurs, there is no output. For example:</p>
+ <p>If an error occurs, there is no output. Example:</p>
<pre>
1> <input>io:fwrite("~s ~w ~i ~w ~c ~n",['abc def', 'abc def', {foo, 1},{foo, 1}, 65]).</input>
abc def 'abc def' {foo,1} A
@@ -692,45 +460,57 @@ ok
in function io:o_request/2</pre>
<p>In this example, an attempt was made to output the single
character 65 with the aid of the string formatting directive
- "~s".</p>
+ <c>"~s"</c>.</p>
</desc>
</func>
+
<func>
<name name="fread" arity="2"/>
<name name="fread" arity="3"/>
- <fsummary>Read formatted input</fsummary>
+ <fsummary>Read formatted input.</fsummary>
<type name="server_no_data"/>
<desc>
- <p>Reads characters from the standard input (<c><anno>IoDevice</anno></c>),
- prompting it with <c><anno>Prompt</anno></c>. Interprets the characters in
- accordance with <c><anno>Format</anno></c>. <c><anno>Format</anno></c> contains control
- sequences which directs the interpretation of the input.</p>
- <p><c><anno>Format</anno></c> may contain:</p>
+ <p>Reads characters from the standard input
+ (<c><anno>IoDevice</anno></c>), prompting it with
+ <c><anno>Prompt</anno></c>. Interprets the characters in accordance
+ with <c><anno>Format</anno></c>. <c><anno>Format</anno></c> contains
+ control sequences that directs the interpretation of the input.</p>
+ <p><c><anno>Format</anno></c> can contain the following:</p>
<list type="bulleted">
<item>
- <p>White space characters (SPACE, TAB and NEWLINE) which
- cause input to be read to the next non-white space
- character.</p>
+ <p>Whitespace characters (<em>Space</em>, <em>Tab</em>, and
+ <em>Newline</em>) that cause input to be read to the next
+ non-whitespace character.</p>
</item>
<item>
- <p>Ordinary characters which must match the next input
+ <p>Ordinary characters that must match the next input
character.</p>
</item>
<item>
-
<p>Control sequences, which have the general format
- <c>~*FMC</c>. The character <c>*</c> is an optional
- return suppression character. It provides a method to
- specify a field which is to be omitted. <c>F</c> is the
- <c>field width</c> of the input field, <c>M</c> is an optional
- translation modifier (of which <c>t</c> is the only currently
- supported, meaning Unicode translation) and <c>C</c>
- determines the type of control sequence.</p>
-
- <p>Unless otherwise specified, leading white-space is
+ <c>~*FMC</c>, where:</p>
+ <list type="bulleted">
+ <item>
+ <p>Character <c>*</c> is an optional return suppression
+ character. It provides a method to specify a field that
+ is to be omitted.</p>
+ </item>
+ <item>
+ <p><c>F</c> is the <c>field width</c> of the input field.</p>
+ </item>
+ <item>
+ <p><c>M</c> is an optional translation modifier (of which
+ <c>t</c> is the only supported, meaning Unicode
+ translation).</p>
+ </item>
+ <item>
+ <p><c>C</c> determines the type of control sequence.</p>
+ </item>
+ </list>
+ <p>Unless otherwise specified, leading whitespace is
ignored for all control sequences. An input field cannot
- be more than one line wide. The following control
- sequences are available:</p>
+ be more than one line wide.</p>
+ <p><em>Available control sequences:</em></p>
<taglist>
<tag><c>~</c></tag>
<item>
@@ -742,22 +522,22 @@ ok
</item>
<tag><c>u</c></tag>
<item>
- <p>An unsigned integer in base 2..36 is expected. The
+ <p>An unsigned integer in base 2-36 is expected. The
field width parameter is used to specify base. Leading
- white-space characters are not skipped.</p>
+ whitespace characters are not skipped.</p>
</item>
<tag><c>-</c></tag>
<item>
<p>An optional sign character is expected. A sign
- character <c>-</c> gives the return value <c>-1</c>. Sign
+ character <c>-</c> gives return value <c>-1</c>. Sign
character <c>+</c> or none gives <c>1</c>. The field width
- parameter is ignored. Leading white-space characters
+ parameter is ignored. Leading whitespace characters
are not skipped.</p>
</item>
<tag><c>#</c></tag>
<item>
- <p>An integer in base 2..36 with Erlang-style base
- prefix (for example <c>"16#ffff"</c>) is expected.</p>
+ <p>An integer in base 2-36 with Erlang-style base
+ prefix (for example, <c>"16#ffff"</c>) is expected.</p>
</item>
<tag><c>f</c></tag>
<item>
@@ -766,18 +546,15 @@ ok
</item>
<tag><c>s</c></tag>
<item>
- <p>A string of non-white-space characters is read. If a
+ <p>A string of non-whitespace characters is read. If a
field width has been specified, this number of
- characters are read and all trailing white-space
+ characters are read and all trailing whitespace
characters are stripped. An Erlang string (list of
characters) is returned.</p>
-
- <p>If Unicode translation is in effect (<c>~ts</c>),
- characters larger than 255 are accepted, otherwise
- not. With the translation modifier, the list
- returned may as a consequence also contain
- integers larger than 255:</p>
-
+ <p>If Unicode translation is in effect (<c>~ts</c>),
+ characters &gt; 255 are accepted, otherwise
+ not. With the translation modifier, the returned
+ list can as a consequence also contain integers &gt; 255:</p>
<pre>
1> <input>io:fread("Prompt> ","~s").</input>
Prompt> <input>&lt;Characters beyond latin1 range not printable in this medium&gt;</input>
@@ -785,22 +562,23 @@ Prompt> <input>&lt;Characters beyond latin1 range not printable in this medium&g
2> <input>io:fread("Prompt> ","~ts").</input>
Prompt> <input>&lt;Characters beyond latin1 range not printable in this medium&gt;</input>
{ok,[[1091,1085,1080,1094,1086,1076,1077]]}</pre>
-
</item>
<tag><c>a</c></tag>
<item>
<p>Similar to <c>s</c>, but the resulting string is
converted into an atom.</p>
- <p>The Unicode translation modifier is not allowed (atoms can not contain characters beyond the latin1 range).</p>
+ <p>The Unicode translation modifier is not allowed (atoms
+ cannot contain characters beyond the <c>latin1</c> range).</p>
</item>
<tag><c>c</c></tag>
<item>
<p>The number of characters equal to the field width are
read (default is 1) and returned as an Erlang string.
- However, leading and trailing white-space characters
+ However, leading and trailing whitespace characters
are not omitted as they are with <c>s</c>. All
characters are returned.</p>
- <p>The Unicode translation modifier works as with <c>s</c>:</p>
+ <p>The Unicode translation modifier works as with <c>s</c>:
+ </p>
<pre>
1> <input>io:fread("Prompt> ","~c").</input>
Prompt> <input>&lt;Character beyond latin1 range not printable in this medium&gt;</input>
@@ -808,21 +586,20 @@ Prompt> <input>&lt;Character beyond latin1 range not printable in this medium&gt
2> <input>io:fread("Prompt> ","~tc").</input>
Prompt> <input>&lt;Character beyond latin1 range not printable in this medium&gt;</input>
{ok,[[1091]]}</pre>
-
</item>
<tag><c>l</c></tag>
<item>
- <p>Returns the number of characters which have been
- scanned up to that point, including white-space
+ <p>Returns the number of characters that have been
+ scanned up to that point, including whitespace
characters.</p>
</item>
</taglist>
- <p>It returns:</p>
+ <p>The function returns:</p>
<taglist>
<tag><c>{ok, <anno>Terms</anno>}</c></tag>
<item>
- <p>The read was successful and <c><anno>Terms</anno></c> is the list
- of successfully matched and read items.</p>
+ <p>The read was successful and <c><anno>Terms</anno></c> is
+ the list of successfully matched and read items.</p>
</item>
<tag><c>eof</c></tag>
<item>
@@ -835,13 +612,14 @@ Prompt> <input>&lt;Character beyond latin1 range not printable in this medium&gt
</item>
<tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
<item>
- <p>The read operation failed and the parameter
- <c><anno>ErrorDescription</anno></c> gives a hint about the error.</p>
+ <p>The read operation failed and parameter
+ <c><anno>ErrorDescription</anno></c> gives a hint about
+ the error.</p>
</item>
</taglist>
</item>
</list>
- <p>Examples:</p>
+ <p><em>Examples:</em></p>
<pre>
20> <input>io:fread('enter>', "~f~f~f").</input>
enter><input>1.9 35.5e3 15.0</input>
@@ -854,104 +632,127 @@ enter><input>:</input> <input>alan</input> <input>:</input> <input>joe</in
{ok, ["alan", " joe "]}</pre>
</desc>
</func>
+
<func>
- <name name="rows" arity="0"/>
- <name name="rows" arity="1"/>
- <fsummary>Get the number of rows of an IO device</fsummary>
+ <name name="get_chars" arity="2"/>
+ <name name="get_chars" arity="3"/>
+ <fsummary>Read a specified number of characters.</fsummary>
+ <type name="server_no_data"/>
<desc>
- <p>Retrieves the number of rows of the
- <c><anno>IoDevice</anno></c> (i.e. the height of a terminal). The function
- only succeeds for terminal devices, for all other IO devices
- the function returns <c>{error, enotsup}</c></p>
+ <p>Reads <c><anno>Count</anno></c> characters from standard input
+ (<c><anno>IoDevice</anno></c>), prompting it with
+ <c><anno>Prompt</anno></c>.</p>
+ <p>The function returns:</p>
+ <taglist>
+ <tag><c><anno>Data</anno></c></tag>
+ <item>
+ <p>The input characters. If the I/O device supports Unicode,
+ the data can represent codepoints &gt; 255 (the
+ <c>latin1</c> range). If the I/O server is set to deliver
+ binaries, they are encoded in UTF-8 (regardless of whether
+ the I/O device supports Unicode).</p>
+ </item>
+ <tag><c>eof</c></tag>
+ <item>
+ <p>End of file was encountered.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
- <name name="scan_erl_exprs" arity="1"/>
- <name name="scan_erl_exprs" arity="2"/>
- <name name="scan_erl_exprs" arity="3"/>
- <name name="scan_erl_exprs" arity="4"/>
- <fsummary>Read and tokenize Erlang expressions</fsummary>
+ <name name="get_line" arity="1"/>
+ <name name="get_line" arity="2"/>
+ <fsummary>Read a line.</fsummary>
<type name="server_no_data"/>
<desc>
- <p>Reads data from the standard input (<c>IoDevice</c>),
- prompting it with <c>Prompt</c>. Reading starts at location
- <c>StartLocation</c> (<c>1</c>). The argument <c><anno>Options</anno></c>
- is passed on as the <c>Options</c> argument of the
- <c>erl_scan:tokens/4</c> function. The data is tokenized as if
- it were a
- sequence of Erlang expressions until a final dot (<c>.</c>) is
- reached. This token is also returned. It returns:</p>
+ <p>Reads a line from the standard input (<c><anno>IoDevice</anno></c>),
+ prompting it with <c><anno>Prompt</anno></c>.</p>
+ <p>The function returns:</p>
<taglist>
- <tag><c>{ok, Tokens, EndLocation}</c></tag>
+ <tag><c><anno>Data</anno></c></tag>
<item>
- <p>The tokenization succeeded.</p>
- </item>
- <tag><c>{eof, EndLocation}</c></tag>
- <item>
- <p>End of file was encountered by the tokenizer.</p>
+ <p>The characters in the line terminated by a line feed (or end of
+ file). If the I/O device supports Unicode,
+ the data can represent codepoints &gt; 255 (the
+ <c>latin1</c> range). If the I/O server is set to deliver
+ binaries, they are encoded in UTF-8 (regardless of if
+ the I/O device supports Unicode).</p>
</item>
<tag><c>eof</c></tag>
<item>
- <p>End of file was encountered by the I/O-server.</p>
+ <p>End of file was encountered.</p>
</item>
- <tag><c>{error, ErrorInfo, ErrorLocation}</c></tag>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
<item>
- <p>An error occurred while tokenizing.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
</item>
</taglist>
- <p>Example:</p>
- <pre>
-23> <input>io:scan_erl_exprs('enter>').</input>
-enter><input>abc(), "hey".</input>
-{ok,[{atom,1,abc},{'(',1},{')',1},{',',1},{string,1,"hey"},{dot,1}],2}
-24> <input>io:scan_erl_exprs('enter>').</input>
-enter><input>1.0er.</input>
-{error,{1,erl_scan,{illegal,float}},2}</pre>
</desc>
</func>
+
<func>
- <name name="scan_erl_form" arity="1"/>
- <name name="scan_erl_form" arity="2"/>
- <name name="scan_erl_form" arity="3"/>
- <name name="scan_erl_form" arity="4"/>
- <fsummary>Read and tokenize an Erlang form</fsummary>
- <type name="server_no_data"/>
+ <name name="getopts" arity="0"/>
+ <name name="getopts" arity="1"/>
+ <fsummary>Get the supported options and values from an I/O server.
+ </fsummary>
<desc>
- <p>Reads data from the standard input (<c><anno>IoDevice</anno></c>),
- prompting it with <c><anno>Prompt</anno></c>. Starts reading
- at location <c><anno>StartLocation</anno></c> (<c>1</c>). The
- argument <c><anno>Options</anno></c> is passed on as the
- <c>Options</c> argument of the <c>erl_scan:tokens/4</c>
- function. The data is tokenized as if it were an
- Erlang form - one of the valid Erlang expressions in an
- Erlang source file - until a final dot (<c>.</c>) is reached.
- This last token is also returned. The return values are the
- same as for <c>scan_erl_exprs/1,2,3</c> above.</p>
+ <p>Requests all available options and their current
+ values for a specific I/O device, for example:</p>
+<pre>
+1> <input>{ok,F} = file:open("/dev/null",[read]).</input>
+{ok,&lt;0.42.0&gt;}
+2> <input>io:getopts(F).</input>
+[{binary,false},{encoding,latin1}]</pre>
+ <p>Here the file I/O server returns all available options for a file,
+ which are the expected ones, <c>encoding</c> and <c>binary</c>.
+ However, the standard shell has some more options:</p>
+<pre>
+3> io:getopts().
+[{expand_fun,#Fun&lt;group.0.120017273&gt;},
+ {echo,true},
+ {binary,false},
+ {encoding,unicode}]</pre>
+ <p>This example is, as can be seen, run in an environment where the
+ terminal supports Unicode input and output.</p>
</desc>
</func>
+
+ <func>
+ <name name="nl" arity="0"/>
+ <name name="nl" arity="1"/>
+ <fsummary>Write a newline.</fsummary>
+ <desc>
+ <p>Writes new line to the standard output
+ (<c><anno>IoDevice</anno></c>).</p>
+ </desc>
+ </func>
+
<func>
<name name="parse_erl_exprs" arity="1"/>
<name name="parse_erl_exprs" arity="2"/>
<name name="parse_erl_exprs" arity="3"/>
<name name="parse_erl_exprs" arity="4"/>
- <fsummary>Read, tokenize and parse Erlang expressions</fsummary>
+ <fsummary>Read, tokenize, and parse Erlang expressions.</fsummary>
<type name="parse_ret"/>
<type name="server_no_data"/>
<desc>
<p>Reads data from the standard input
(<c><anno>IoDevice</anno></c>), prompting it with
<c><anno>Prompt</anno></c>. Starts reading at location
- <c><anno>StartLocation</anno></c> (<c>1</c>). The argument
- <c><anno>Options</anno></c> is passed on as the
- <c>Options</c> argument of the <c>erl_scan:tokens/4</c>
- function. The data is tokenized and parsed as if it were a
- sequence of Erlang expressions until a final dot (<c>.</c>) is reached.
- It returns:</p>
+ <c><anno>StartLocation</anno></c> (<c>1</c>). Argument
+ <c><anno>Options</anno></c> is passed on as argument
+ <c>Options</c> of function <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>. The data is tokenized and parsed
+ as if it was a sequence of Erlang expressions until a final dot
+ (<c>.</c>) is reached.</p>
+ <p>The function returns:</p>
<taglist>
<tag><c>{ok, ExprList, EndLocation}</c></tag>
<item>
@@ -963,17 +764,17 @@ enter><input>1.0er.</input>
</item>
<tag><c>eof</c></tag>
<item>
- <p>End of file was encountered by the I/O-server.</p>
+ <p>End of file was encountered by the I/O server.</p>
</item>
<tag><c>{error, ErrorInfo, ErrorLocation}</c></tag>
<item>
<p>An error occurred while tokenizing or parsing.</p>
</item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
</taglist>
<p>Example:</p>
<pre>
@@ -985,24 +786,25 @@ enter><input>abc("hey".</input>
{error,{1,erl_parse,["syntax error before: ",["'.'"]]},2}</pre>
</desc>
</func>
+
<func>
<name name="parse_erl_form" arity="1"/>
<name name="parse_erl_form" arity="2"/>
<name name="parse_erl_form" arity="3"/>
<name name="parse_erl_form" arity="4"/>
- <fsummary>Read, tokenize and parse an Erlang form</fsummary>
+ <fsummary>Read, tokenize, and parse an Erlang form.</fsummary>
<type name="parse_form_ret"/>
<type name="server_no_data"/>
<desc>
<p>Reads data from the standard input (<c><anno>IoDevice</anno></c>),
prompting it with <c><anno>Prompt</anno></c>. Starts reading at
- location <c><anno>StartLocation</anno></c> (<c>1</c>). The argument
- <c><anno>Options</anno></c> is passed on as the
- <c>Options</c> argument of the <c>erl_scan:tokens/4</c>
- function. The data is tokenized and parsed as if
- it were an Erlang form - one of the valid Erlang expressions
- in an Erlang source file - until a final dot (<c>.</c>) is reached. It
- returns:</p>
+ location <c><anno>StartLocation</anno></c> (<c>1</c>). Argument
+ <c><anno>Options</anno></c> is passed on as argument
+ <c>Options</c> of function <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>. The data is tokenized and parsed
+ as if it was an Erlang form (one of the valid Erlang expressions
+ in an Erlang source file) until a final dot (<c>.</c>) is reached.</p>
+ <p>The function returns:</p>
<taglist>
<tag><c>{ok, AbsForm, EndLocation}</c></tag>
<item>
@@ -1014,32 +816,353 @@ enter><input>abc("hey".</input>
</item>
<tag><c>eof</c></tag>
<item>
- <p>End of file was encountered by the I/O-server.</p>
+ <p>End of file was encountered by the I/O server.</p>
</item>
<tag><c>{error, ErrorInfo, ErrorLocation}</c></tag>
<item>
<p>An error occurred while tokenizing or parsing.</p>
</item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="printable_range" arity="0"/>
+ <fsummary>Get user-requested printable character range.</fsummary>
+ <desc>
+ <p>Returns the user-requested range of printable Unicode characters.</p>
+ <p>The user can request a range of characters that are to be considered
+ printable in heuristic detection of strings by the shell and by the
+ formatting functions. This is done by supplying
+ <c>+pc &lt;range&gt;</c> when starting Erlang.</p>
+ <p>The only valid values for <c>&lt;range&gt;</c> are
+ <c>latin1</c> and <c>unicode</c>. <c>latin1</c> means that only code
+ points &lt; 256 (except control characters, and so on)
+ are considered printable. <c>unicode</c> means that all printable
+ characters in all Unicode character ranges are considered printable
+ by the I/O functions.</p>
+ <p>By default, Erlang is started so that only the <c>latin1</c> range
+ of characters indicate that a list of integers is a string.</p>
+ <p>The simplest way to use the setting is to call
+ <seealso marker="io_lib#printable_list/1">
+ <c>io_lib:printable_list/1</c></seealso>, which uses the return
+ value of this function to decide if a list is a string of printable
+ characters.</p>
+ <note>
+ <p>In a future release, this function may return more values and
+ ranges. To avoid compatibility problems, it is recommended to use
+ function <seealso marker="io_lib#printable_list/1">
+ <c>io_lib:printable_list/1</c></seealso>.</p></note>
+ </desc>
+ </func>
+
+ <func>
+ <name name="put_chars" arity="1"/>
+ <name name="put_chars" arity="2"/>
+ <fsummary>Write a list of characters.</fsummary>
+ <desc>
+ <p>Writes the characters of <c><anno>CharData</anno></c> to the I/O
+ server (<c><anno>IoDevice</anno></c>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="read" arity="1"/>
+ <name name="read" arity="2"/>
+ <fsummary>Read a term.</fsummary>
+ <type name="server_no_data"/>
+ <desc>
+ <p>Reads a term <c><anno>Term</anno></c> from the standard input
+ (<c><anno>IoDevice</anno></c>), prompting it with
+ <c><anno>Prompt</anno></c>.</p>
+ <p>The function returns:</p>
+ <taglist>
+ <tag><c>{ok, <anno>Term</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful.</p>
+ </item>
+ <tag><c>eof</c></tag>
+ <item>
+ <p>End of file was encountered.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
+ <item>
+ <p>The parsing failed.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="read" arity="3"/>
+ <name name="read" arity="4"/>
+ <fsummary>Read a term.</fsummary>
+ <type name="server_no_data"/>
+ <desc>
+ <p>Reads a term <c><anno>Term</anno></c> from
+ <c><anno>IoDevice</anno></c>, prompting it
+ with <c><anno>Prompt</anno></c>. Reading starts at location
+ <c><anno>StartLocation</anno></c>. Argument
+ <c><anno>Options</anno></c> is passed on as argument <c>Options</c>
+ of function <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>.</p>
+ <p>The function returns:</p>
+ <taglist>
+ <tag><c>{ok, Term, <anno>EndLocation</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful.</p>
+ </item>
+ <tag><c>{eof, <anno>EndLocation</anno>}</c></tag>
+ <item>
+ <p>End of file was encountered.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>,
+ <anno>ErrorLocation</anno>}</c></tag>
+ <item>
+ <p>The parsing failed.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="rows" arity="0"/>
+ <name name="rows" arity="1"/>
+ <fsummary>Get the number of rows of an I/O device.</fsummary>
+ <desc>
+ <p>Retrieves the number of rows of <c><anno>IoDevice</anno></c>
+ (that is, the height of a terminal). The function
+ only succeeds for terminal devices, for all other I/O devices
+ the function returns <c>{error, enotsup}</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="scan_erl_exprs" arity="1"/>
+ <name name="scan_erl_exprs" arity="2"/>
+ <name name="scan_erl_exprs" arity="3"/>
+ <name name="scan_erl_exprs" arity="4"/>
+ <fsummary>Read and tokenize Erlang expressions.</fsummary>
+ <type name="server_no_data"/>
+ <desc>
+ <p>Reads data from the standard input (<c>IoDevice</c>),
+ prompting it with <c>Prompt</c>. Reading starts at location
+ <c>StartLocation</c> (<c>1</c>). Argument <c><anno>Options</anno></c>
+ is passed on as argument <c>Options</c> of function
+ <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>. The data is tokenized as if it
+ were a sequence of Erlang expressions until a final dot (<c>.</c>) is
+ reached. This token is also returned.</p>
+ <p>The function returns:</p>
+ <taglist>
+ <tag><c>{ok, Tokens, EndLocation}</c></tag>
+ <item>
+ <p>The tokenization succeeded.</p>
+ </item>
+ <tag><c>{eof, EndLocation}</c></tag>
+ <item>
+ <p>End of file was encountered by the tokenizer.</p>
+ </item>
+ <tag><c>eof</c></tag>
+ <item>
+ <p>End of file was encountered by the I/O server.</p>
+ </item>
+ <tag><c>{error, ErrorInfo, ErrorLocation}</c></tag>
+ <item>
+ <p>An error occurred while tokenizing.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
+ <p><em>Example:</em></p>
+ <pre>
+23> <input>io:scan_erl_exprs('enter>').</input>
+enter><input>abc(), "hey".</input>
+{ok,[{atom,1,abc},{'(',1},{')',1},{',',1},{string,1,"hey"},{dot,1}],2}
+24> <input>io:scan_erl_exprs('enter>').</input>
+enter><input>1.0er.</input>
+{error,{1,erl_scan,{illegal,float}},2}</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name name="scan_erl_form" arity="1"/>
+ <name name="scan_erl_form" arity="2"/>
+ <name name="scan_erl_form" arity="3"/>
+ <name name="scan_erl_form" arity="4"/>
+ <fsummary>Read and tokenize an Erlang form.</fsummary>
+ <type name="server_no_data"/>
+ <desc>
+ <p>Reads data from the standard input (<c><anno>IoDevice</anno></c>),
+ prompting it with <c><anno>Prompt</anno></c>. Starts reading
+ at location <c><anno>StartLocation</anno></c> (<c>1</c>).
+ Argument <c><anno>Options</anno></c> is passed on as argument
+ <c>Options</c> of function <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>. The data is tokenized as if it
+ was an Erlang form (one of the valid Erlang expressions in an
+ Erlang source file) until a final dot (<c>.</c>) is reached.
+ This last token is also returned.</p>
+ <p>The return values are the same as for
+ <seealso marker="#scan_erl_exprs/1">
+ <c>scan_erl_exprs/1,2,3,4</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="setopts" arity="1"/>
+ <name name="setopts" arity="2"/>
+ <fsummary>Set options.</fsummary>
+ <desc>
+ <p>Set options for the standard I/O device
+ (<c><anno>IoDevice</anno></c>).</p>
+ <p>Possible options and values vary depending on the
+ I/O device. For a list of supported options and their current values
+ on a specific I/O device, use function
+ <seealso marker="#getopts/1"><c>getopts/1</c></seealso>.</p>
+ <p>The options and values supported by the OTP I/O devices
+ are as follows:</p>
+ <taglist>
+ <tag><c>binary</c>, <c>list</c>, or <c>{binary, boolean()}</c></tag>
+ <item>
+ <p>If set in binary mode (<c>binary</c> or <c>{binary, true}</c>),
+ the I/O server sends binary data (encoded in UTF-8) as answers
+ to the <c>get_line</c>, <c>get_chars</c>, and, if possible,
+ <c>get_until</c> requests (for details, see section
+ <seealso marker="io_protocol">The Erlang I/O Protocol</seealso>)
+ in the User's Guide). The immediate effect is that
+ <seealso marker="#get_chars/2"><c>get_chars/2,3</c></seealso> and
+ <seealso marker="#get_line/1"><c>get_line/1,2</c></seealso>
+ return UTF-8 binaries instead of lists of characters
+ for the affected I/O device.</p>
+ <p>By default, all I/O devices in OTP are set in <c>list</c> mode.
+ However, the I/O functions can handle any of these modes and so
+ should other, user-written, modules behaving as clients to I/O
+ servers.</p>
+ <p>This option is supported by the standard shell
+ (<c>group.erl</c>), the 'oldshell' (<c>user.erl</c>), and the
+ file I/O servers.</p>
+ </item>
+ <tag><c>{echo, boolean()}</c></tag>
+ <item>
+ <p>Denotes if the terminal is to echo input. Only supported for
+ the standard shell I/O server (<c>group.erl</c>)</p>
+ </item>
+ <tag><c>{expand_fun, expand_fun()}</c></tag>
+ <item>
+ <p>Provides a function for tab-completion (expansion)
+ like the Erlang shell. This function is called
+ when the user presses the <em>Tab</em> key. The expansion is
+ active when calling line-reading functions, such as
+ <seealso marker="#get_line/1"><c>get_line/1,2</c></seealso>.</p>
+ <p>The function is called with the current line, up to
+ the cursor, as a reversed string. It is to return a
+ three-tuple: <c>{yes|no, string(), [string(), ...]}</c>. The
+ first element gives a beep if <c>no</c>, otherwise the
+ expansion is silent; the second is a string that will be
+ entered at the cursor position; the third is a list of
+ possible expansions. If this list is not empty,
+ it is printed and the current input line is written
+ once again.</p>
+ <p>Trivial example (beep on anything except empty line, which
+ is expanded to <c>"quit"</c>):</p>
+ <code type="none">
+fun("") -> {yes, "quit", []};
+ (_) -> {no, "", ["quit"]} end</code>
+ <p>This option is only supported by the standard shell
+ (<c>group.erl</c>).</p>
+ </item>
+ <tag><c>{encoding, latin1 | unicode}</c></tag>
+ <item>
+ <p>Specifies how characters are input or output from or to the I/O
+ device, implying that, for example, a terminal is set to handle
+ Unicode input and output or a file is set to handle UTF-8 data
+ encoding.</p>
+ <p>The option <em>does not</em> affect how data is returned from the
+ I/O functions or how it is sent in the I/O protocol, it only
+ affects how the I/O device is to handle Unicode characters to the
+ &quot;physical&quot; device.</p>
+ <p>The standard shell is set for <c>unicode</c> or <c>latin1</c>
+ encoding when
+ the system is started. The encoding is set with the help of the
+ <c>LANG</c> or <c>LC_CTYPE</c> environment variables on Unix-like
+ system or by other means on other systems.
+ So, the user can input Unicode characters and the I/O device
+ is in <c>{encoding, unicode}</c> mode if the I/O device supports
+ it. The mode can be changed, if the assumption of the runtime
+ system is wrong, by setting this option.</p>
+ <p>The I/O device used when Erlang is started with the "-oldshell"
+ or "-noshell" flags is by default set to <c>latin1</c> encoding,
+ meaning that any characters &gt; codepoint 255 are escaped
+ and that input is expected to be plain 8-bit ISO Latin-1.
+ If the encoding is changed to Unicode, input and output from
+ the standard file descriptors are in UTF-8 (regardless of
+ operating system).</p>
+ <p>Files can also be set in <c>{encoding, unicode}</c>, meaning
+ that data is written and read as UTF-8. More encodings are
+ possible for files, see below.</p>
+ <p><c>{encoding, unicode | latin1}</c> is supported by both the
+ standard shell (<c>group.erl</c> including <c>werl</c> on
+ Windows), the 'oldshell' (<c>user.erl</c>), and the file I/O
+ servers.</p>
+ </item>
+ <tag><c>{encoding, utf8 | utf16 | utf32 | {utf16,big} |
+ {utf16,little} | {utf32,big} | {utf32,little}}</c></tag>
+ <item>
+ <p>For disk files, the encoding can be set to various UTF variants.
+ This has the effect that data is expected to be read as the
+ specified encoding from the file, and the data is written in the
+ specified encoding to the disk file.</p>
+ <p><c>{encoding, utf8}</c> has the same effect as
+ <c>{encoding, unicode}</c> on files.</p>
+ <p>The extended encodings are only supported on disk files
+ (opened by function
+ <seealso marker="kernel:file#open/2">
+ <c>file:open/2</c></seealso>).</p>
+ </item>
</taglist>
</desc>
</func>
+
+ <func>
+ <name name="write" arity="1"/>
+ <name name="write" arity="2"/>
+ <fsummary>Write a term.</fsummary>
+ <desc>
+ <p>Writes term <c><anno>Term</anno></c> to the standard output
+ (<c><anno>IoDevice</anno></c>).</p>
+ </desc>
+ </func>
</funcs>
<section>
<title>Standard Input/Output</title>
- <p>All Erlang processes have a default standard IO device. This
+ <p>All Erlang processes have a default standard I/O device. This
device is used when no <c>IoDevice</c> argument is specified in
- the above function calls. However, it is sometimes desirable to
- use an explicit <c>IoDevice</c> argument which refers to the
- default IO device. This is the case with functions that can
- access either a file or the default IO device. The atom
+ the function calls in this module. However, it is sometimes desirable to
+ use an explicit <c>IoDevice</c> argument that refers to the
+ default I/O device. This is the case with functions that can
+ access either a file or the default I/O device. The atom
<c>standard_io</c> has this special meaning. The following example
illustrates this:</p>
+
<pre>
27> <input>io:read('enter>').</input>
enter><input>foo.</input>
@@ -1047,30 +1170,37 @@ enter><input>foo.</input>
28> <input>io:read(standard_io, 'enter>').</input>
enter><input>bar.</input>
{ok,bar}</pre>
+
<p>There is always a process registered under the name of
<c>user</c>. This can be used for sending output to the user.</p>
</section>
+
<section>
<title>Standard Error</title>
- <p>In certain situations, especially when the standard output is redirected, access to an I/O-server specific for error messages might be convenient. The IO device <c>standard_error</c> can be used to direct output to whatever the current operating system considers a suitable IO device for error output. Example on a Unix-like operating system:</p>
+ <p>In certain situations, especially when the standard output is
+ redirected, access to an I/O server specific for error messages can be
+ convenient. The I/O device <c>standard_error</c> can be used to direct
+ output to whatever the current operating system considers a suitable
+ I/O device for error output. Example on a Unix-like operating system:</p>
+
<pre>
$ <input>erl -noshell -noinput -eval 'io:format(standard_error,"Error: ~s~n",["error 11"]),'\</input>
<input>'init:stop().' > /dev/null</input>
Error: error 11</pre>
-
-
-
</section>
<section>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO modules.
- It has the format:</p>
+ <p>The <c>ErrorInfo</c> mentioned in this module is the standard
+ <c>ErrorInfo</c> structure that is returned from all I/O modules.
+ It has the following format:</p>
+
<code type="none">
{ErrorLocation, Module, ErrorDescriptor}</code>
- <p>A string which describes the error is obtained with the following
+
+ <p>A string that describes the error is obtained with the following
call:</p>
+
<code type="none">
Module:format_error(ErrorDescriptor)</code>
</section>
diff --git a/lib/stdlib/doc/src/io_lib.xml b/lib/stdlib/doc/src/io_lib.xml
index cd58090dcd..931e50f6f2 100644
--- a/lib/stdlib/doc/src/io_lib.xml
+++ b/lib/stdlib/doc/src/io_lib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,14 +29,16 @@
<rev></rev>
</header>
<module>io_lib</module>
- <modulesummary>IO Library Functions</modulesummary>
+ <modulesummary>I/O library functions.</modulesummary>
<description>
<p>This module contains functions for converting to and from
strings (lists of characters). They are used for implementing the
- functions in the <c>io</c> module. There is no guarantee that the
+ functions in the <seealso marker="io"><c>io</c></seealso> module.
+ There is no guarantee that the
character lists returned from some of the functions are flat,
- they can be deep lists. <c>lists:flatten/1</c> can be used for
- flattening deep lists.</p>
+ they can be deep lists. Function
+ <seealso marker="lists#flatten/1"><c>lists:flatten/1</c></seealso>
+ can be used for flattening deep lists.</p>
</description>
<datatypes>
@@ -45,7 +47,8 @@
</datatype>
<datatype>
<name name="continuation"/>
- <desc><p>A continuation as returned by <seealso marker="#fread/3"><c>fread/3</c></seealso>.</p>
+ <desc><p>A continuation as returned by
+ <seealso marker="#fread/3"><c>fread/3</c></seealso>.</p>
</desc>
</datatype>
<datatype>
@@ -62,338 +65,377 @@
</datatype>
<datatype>
<name name="format_spec"/>
- <desc><p>Description:</p>
+ <desc><p>Where:</p>
<list type="bulleted">
<item><p><c>control_char</c> is the type of control
- sequence: <c>$P</c>, <c>$w</c>, and so on;</p>
+ sequence: <c>$P</c>, <c>$w</c>, and so on.</p>
</item>
<item><p><c>args</c> is a list of the arguments used by the
control sequence, or an empty list if the control sequence
- does not take any arguments;</p>
+ does not take any arguments.</p>
</item>
- <item><p><c>width</c> is the field width;</p>
+ <item><p><c>width</c> is the field width.</p>
</item>
- <item><p><c>adjust</c> is the adjustment;</p>
+ <item><p><c>adjust</c> is the adjustment.</p>
</item>
<item><p><c>precision</c> is the precision of the printed
- argument;</p>
+ argument.</p>
</item>
- <item><p><c>pad_char</c> is the padding character;</p>
+ <item><p><c>pad_char</c> is the padding character.</p>
</item>
- <item><p><c>encoding</c> is set to <c>true</c> if the translation
- modifier <c>t</c> is present;</p>
+ <item><p><c>encoding</c> is set to <c>true</c> if translation
+ modifier <c>t</c> is present.</p>
</item>
- <item><p><c>strings</c> is set to <c>false</c> if the modifier
+ <item><p><c>strings</c> is set to <c>false</c> if modifier
<c>l</c> is present.</p>
</item>
</list>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="nl" arity="0"/>
- <fsummary>Write a newline</fsummary>
+ <name name="build_text" arity="1"/>
+ <fsummary>Build the output text for a preparsed format list.</fsummary>
<desc>
- <p>Returns a character list which represents a new line
- character.</p>
+ <p>For details, see
+ <seealso marker="#scan_format/2"><c>scan_format/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="write" arity="1"/>
- <name name="write" arity="2"/>
- <fsummary>Write a term</fsummary>
+ <name name="char_list" arity="1"/>
+ <fsummary>Test for a list of characters.</fsummary>
<desc>
- <p>Returns a character list which represents <c><anno>Term</anno></c>. The
- <c><anno>Depth</anno></c> (-1) argument controls the depth of the
- structures written. When the specified depth is reached,
- everything below this level is replaced by "...". For
- example:</p>
- <pre>
-1> <input>lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9})).</input>
-"{1,[2],[3],[4,5],6,7,8,9}"
-2> <input>lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9}, 5)).</input>
-"{1,[2],[3],[...],...}"</pre>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ characters in the Unicode range, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="print" arity="1"/>
- <name name="print" arity="4"/>
- <fsummary>Pretty print a term</fsummary>
+ <name name="deep_char_list" arity="1"/>
+ <fsummary>Test for a deep list of characters.</fsummary>
<desc>
- <p>Also returns a list of characters which represents
- <c><anno>Term</anno></c>, but breaks representations which are longer than
- one line into many lines and indents each line sensibly. It
- also tries to detect and output lists of printable characters
- as strings. <c><anno>Column</anno></c> is the starting column (1),
- <c><anno>LineLength</anno></c> the maximum line length (80), and
- <c><anno>Depth</anno></c> (-1) the maximum print depth.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a, possibly deep,
+ list of characters in the Unicode range, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="fwrite" arity="2"/>
- <name name="format" arity="2"/>
- <fsummary>Write formatted output</fsummary>
+ <name name="deep_latin1_char_list" arity="1"/>
+ <fsummary>Test for a deep list of characters.</fsummary>
<desc>
- <p>Returns a character list which represents <c><anno>Data</anno></c>
- formatted in accordance with <c><anno>Format</anno></c>. See
- <seealso marker="io#fwrite/1">io:fwrite/1,2,3</seealso> for a detailed
- description of the available formatting options. A fault is
- generated if there is an error in the format string or
- argument list.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a, possibly deep,
+ list of characters in the ISO Latin-1 range, otherwise
+ <c>false</c>.</p>
+ </desc>
+ </func>
- <p>If (and only if) the Unicode translation modifier is used
- in the format string (i.e. ~ts or ~tc), the resulting list
- may contain characters beyond the ISO-latin-1 character
- range (in other words, numbers larger than 255). If so, the
- result is not an ordinary Erlang string(), but can well be
- used in any context where Unicode data is allowed.</p>
-
+ <func>
+ <name name="format" arity="2"/>
+ <name name="fwrite" arity="2"/>
+ <fsummary>Write formatted output.</fsummary>
+ <desc>
+ <p>Returns a character list that represents <c><anno>Data</anno></c>
+ formatted in accordance with <c><anno>Format</anno></c>.
+ For a detailed description of the available formatting options, see
+ <seealso marker="io#fwrite/1"><c>io:fwrite/1,2,3</c></seealso>.
+ If the format string or argument list contains an error, a fault is
+ generated.</p>
+ <p>If and only if the Unicode translation modifier is used in the
+ format string (that is, <c>~ts</c> or <c>~tc</c>), the resulting list
+ can contain characters beyond the ISO Latin-1 character range
+ (that is, numbers &gt; 255). If so, the
+ result is not an ordinary Erlang <c>string()</c>, but can well be
+ used in any context where Unicode data is allowed.</p>
</desc>
</func>
+
<func>
<name name="fread" arity="2"/>
- <fsummary>Read formatted input</fsummary>
+ <fsummary>Read formatted input.</fsummary>
<desc>
- <p>Tries to read <c><anno>String</anno></c> in accordance with the control
- sequences in <c><anno>Format</anno></c>. See
- <seealso marker="io#fread/3">io:fread/3</seealso> for a detailed
- description of the available formatting options. It is
- assumed that <c><anno>String</anno></c> contains whole lines. It returns:</p>
+ <p>Tries to read <c><anno>String</anno></c> in accordance with the
+ control sequences in <c><anno>Format</anno></c>.
+ For a detailed description of the available formatting options, see
+ <seealso marker="io#fread/3"><c>io:fread/3</c></seealso>. It is
+ assumed that <c><anno>String</anno></c> contains whole lines.</p>
+ <p>The function returns:</p>
<taglist>
- <tag><c>{ok, <anno>InputList</anno>, <anno>LeftOverChars</anno>}</c></tag>
+ <tag><c>{ok, <anno>InputList</anno>,
+ <anno>LeftOverChars</anno>}</c></tag>
<item>
- <p>The string was read. <c><anno>InputList</anno></c> is the list of
- successfully matched and read items, and
- <c><anno>LeftOverChars</anno></c> are the input characters not used.</p>
+ <p>The string was read. <c><anno>InputList</anno></c> is the list
+ of successfully matched and read items, and
+ <c><anno>LeftOverChars</anno></c> are the input characters not
+ used.</p>
</item>
- <tag><c>{more, <anno>RestFormat</anno>, <anno>Nchars</anno>, <anno>InputStack</anno>}</c></tag>
+ <tag><c>{more, <anno>RestFormat</anno>, <anno>Nchars</anno>,
+ <anno>InputStack</anno>}</c></tag>
<item>
- <p>The string was read, but more input is needed in order
- to complete the original format string. <c><anno>RestFormat</anno></c>
- is the remaining format string, <c><anno>Nchars</anno></c> the number
+ <p>The string was read, but more input is needed to complete the
+ original format string. <c><anno>RestFormat</anno></c> is the
+ remaining format string, <c><anno>Nchars</anno></c> is the number
of characters scanned, and <c><anno>InputStack</anno></c> is the
reversed list of inputs matched up to that point.</p>
</item>
<tag><c>{error, <anno>What</anno>}</c></tag>
<item>
- <p>The read operation failed and the parameter <c><anno>What</anno></c>
+ <p>The read operation failed and parameter <c><anno>What</anno></c>
gives a hint about the error.</p>
</item>
</taglist>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
3> <input>io_lib:fread("~f~f~f", "15.6 17.3e-6 24.5").</input>
{ok,[15.6,1.73e-5,24.5],[]}</pre>
</desc>
</func>
+
<func>
<name name="fread" arity="3"/>
<fsummary>Re-entrant formatted reader</fsummary>
<desc>
<p>This is the re-entrant formatted reader. The continuation of
- the first call to the functions must be <c>[]</c>. Refer to
- Armstrong, Virding, Williams, 'Concurrent Programming in
- Erlang', Chapter 13 for a complete description of how the
- re-entrant input scheme works.</p>
+ the first call to the functions must be <c>[]</c>. For a complete
+ description of how the re-entrant input scheme works, see
+ Armstrong, Virding, Williams: 'Concurrent Programming in
+ Erlang', Chapter 13.</p>
<p>The function returns:</p>
<taglist>
- <tag><c>{done, <anno>Result</anno>, <anno>LeftOverChars</anno>}</c></tag>
+ <tag><c>{done, <anno>Result</anno>,
+ <anno>LeftOverChars</anno>}</c></tag>
<item>
- <p>The input is complete. The result is one of the
- following:</p>
+ <p>The input is complete. The result is one of the following:</p>
<taglist>
<tag><c>{ok, <anno>InputList</anno>}</c></tag>
<item>
- <p>The string was read. <c><anno>InputList</anno></c> is the list of
- successfully matched and read items, and
- <c><anno>LeftOverChars</anno></c> are the remaining characters.</p>
+ <p>The string was read. <c><anno>InputList</anno></c> is the
+ list of successfully matched and read items, and
+ <c><anno>LeftOverChars</anno></c> are the remaining
+ characters.</p>
</item>
<tag><c>eof</c></tag>
<item>
- <p>End of file has been encountered.
+ <p>End of file was encountered.
<c><anno>LeftOverChars</anno></c> are the input characters not
used.</p>
</item>
<tag><c>{error, <anno>What</anno>}</c></tag>
<item>
- <p>An error occurred and the parameter <c><anno>What</anno></c> gives
- a hint about the error.</p>
+ <p>An error occurred and parameter <c><anno>What</anno></c>
+ gives a hint about the error.</p>
</item>
</taglist>
</item>
<tag><c>{more, <anno>Continuation</anno>}</c></tag>
<item>
<p>More data is required to build a term.
- <c><anno>Continuation</anno></c> must be passed to <c>fread/3</c>,
+ <c><anno>Continuation</anno></c> must be passed to <c>fread/3</c>
when more data becomes available.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
- <name name="write_atom" arity="1"/>
- <fsummary>Write an atom</fsummary>
+ <name name="indentation" arity="2"/>
+ <fsummary>Indentation after printing string.</fsummary>
<desc>
- <p>Returns the list of characters needed to print the atom
- <c><anno>Atom</anno></c>.</p>
+ <p>Returns the indentation if <c><anno>String</anno></c> has been
+ printed, starting at <c><anno>StartIndent</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="write_string" arity="1"/>
- <fsummary>Write a string</fsummary>
+ <name name="latin1_char_list" arity="1"/>
+ <fsummary>Test for a list of ISO Latin-1 characters.</fsummary>
<desc>
- <p>Returns the list of characters needed to print
- <c><anno>String</anno></c> as a string.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ characters in the ISO Latin-1 range, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="write_string_as_latin1" arity="1"/>
- <fsummary>Write a string</fsummary>
+ <name name="nl" arity="0"/>
+ <fsummary>Write a newline.</fsummary>
<desc>
- <p>Returns the list of characters needed to print
- <c><anno>String</anno></c> as a string. Non-Latin-1
- characters are escaped.</p>
+ <p>Returns a character list that represents a new line character.</p>
</desc>
</func>
+
<func>
- <name name="write_latin1_string" arity="1"/>
- <fsummary>Write an ISO-latin-1 string</fsummary>
+ <name name="print" arity="1"/>
+ <name name="print" arity="4"/>
+ <fsummary>Pretty print a term.</fsummary>
<desc>
- <p>Returns the list of characters needed to print
- <c><anno>Latin1String</anno></c> as a string.</p>
+ <p>Returns a list of characters that represents
+ <c><anno>Term</anno></c>, but breaks representations longer
+ than one line into many lines and indents each line sensibly.
+ Also tries to detect and output lists of printable characters
+ as strings.</p>
+ <list type="bulleted">
+ <item><c><anno>Column</anno></c> is the starting column; defaults
+ to 1.</item>
+ <item><c><anno>LineLength</anno></c> is the maximum line length;
+ defaults to 80.</item>
+ <item><c><anno>Depth</anno></c> is the maximum print depth;
+ defaults to -1, which means no limitation.</item>
+ </list>
</desc>
</func>
+
<func>
- <name name="write_char" arity="1"/>
- <fsummary>Write a character</fsummary>
+ <name name="printable_latin1_list" arity="1"/>
+ <fsummary>Test for a list of printable ISO Latin-1 characters.</fsummary>
<desc>
- <p>Returns the list of characters needed to print a character
- constant in the Unicode character set.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ printable ISO Latin-1 characters, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="write_char_as_latin1" arity="1"/>
- <fsummary>Write a character</fsummary>
+ <name name="printable_list" arity="1"/>
+ <fsummary>Test for a list of printable characters.</fsummary>
<desc>
- <p>Returns the list of characters needed to print a character
- constant in the Unicode character set. Non-Latin-1 characters
- are escaped.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ printable characters, otherwise <c>false</c>.</p>
+ <p>What is a printable character in this case is determined by
+ startup flag <c>+pc</c> to the Erlang VM; see
+ <seealso marker="io#printable_range/0">
+ <c>io:printable_range/0</c></seealso> and
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="write_latin1_char" arity="1"/>
- <fsummary>Write an ISO-latin-1 character</fsummary>
+ <name name="printable_unicode_list" arity="1"/>
+ <fsummary>Test for a list of printable Unicode characters.</fsummary>
<desc>
- <p>Returns the list of characters needed to print a character
- constant in the ISO-latin-1 character set.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ printable Unicode characters, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="scan_format" arity="2"/>
- <fsummary>Parse all control sequences in the format string</fsummary>
+ <fsummary>Parse all control sequences in the format string.</fsummary>
<desc>
- <p>Returns a list corresponding to the given format string,
+ <p>Returns a list corresponding to the specified format string,
where control sequences have been replaced with
- corresponding tuples. This list can be passed to <seealso
- marker="#build_text/1">io_lib:build_text/1</seealso> to have
- the same effect as <c>io_lib:format(Format, Args)</c>, or to
- <seealso
- marker="#unscan_format/1">io_lib:unscan_format/1</seealso>
- in order to get the corresponding pair of <c>Format</c> and
- <c>Args</c> (with every <c>*</c> and corresponding argument
- expanded to numeric values).</p>
+ corresponding tuples. This list can be passed to:</p>
+ <list type="bulleted">
+ <item>
+ <p><seealso marker="#build_text/1"><c>build_text/1</c></seealso>
+ to have the same effect as <c>format(Format, Args)</c></p>
+ </item>
+ <item>
+ <p><seealso marker="#unscan_format/1">
+ <c>unscan_format/1</c></seealso> to get the corresponding pair
+ of <c>Format</c> and <c>Args</c> (with every <c>*</c> and
+ corresponding argument expanded to numeric values)</p>
+ </item>
+ </list>
<p>A typical use of this function is to replace unbounded-size
control sequences like <c>~w</c> and <c>~p</c> with the
depth-limited variants <c>~W</c> and <c>~P</c> before
- formatting to text, e.g. in a logger.</p>
+ formatting to text in, for example, a logger.</p>
</desc>
</func>
+
<func>
<name name="unscan_format" arity="1"/>
- <fsummary>Revert a pre-parsed format list to a plain character list
- and a list of arguments</fsummary>
- <desc>
- <p>See <seealso
- marker="#scan_format/2">io_lib:scan_format/2</seealso> for
- details.</p>
- </desc>
- </func>
- <func>
- <name name="build_text" arity="1"/>
- <fsummary>Build the output text for a pre-parsed format list</fsummary>
+ <fsummary>Revert a preparsed format list to a plain character list
+ and a list of arguments.</fsummary>
<desc>
- <p>See <seealso
- marker="#scan_format/2">io_lib:scan_format/2</seealso> for
- details.</p>
+ <p>For details, see
+ <seealso marker="#scan_format/2"><c>scan_format/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="indentation" arity="2"/>
- <fsummary>Indentation after printing string</fsummary>
+ <name name="write" arity="1"/>
+ <name name="write" arity="2"/>
+ <fsummary>Write a term.</fsummary>
<desc>
- <p>Returns the indentation if <c><anno>String</anno></c> has been printed,
- starting at <c><anno>StartIndent</anno></c>.</p>
+ <p>Returns a character list that represents <c><anno>Term</anno></c>.
+ Argument <c><anno>Depth</anno></c> controls the depth of the
+ structures written. When the specified depth is reached,
+ everything below this level is replaced by "<c>...</c>".
+ <c><anno>Depth</anno></c> defaults to -1, which means
+ no limitation.</p>
+ <p><em>Example:</em></p>
+ <pre>
+1> <input>lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9})).</input>
+"{1,[2],[3],[4,5],6,7,8,9}"
+2> <input>lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9}, 5)).</input>
+"{1,[2],[3],[...],...}"</pre>
</desc>
</func>
+
<func>
- <name name="char_list" arity="1"/>
- <fsummary>Test for a list of characters</fsummary>
+ <name name="write_atom" arity="1"/>
+ <fsummary>Write an atom.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- characters in the Unicode range, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print atom
+ <c><anno>Atom</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="latin1_char_list" arity="1"/>
- <fsummary>Test for a list of ISO-latin-1 characters</fsummary>
+ <name name="write_char" arity="1"/>
+ <fsummary>Write a character.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- characters in the ISO-latin-1 range, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print a character
+ constant in the Unicode character set.</p>
</desc>
</func>
+
<func>
- <name name="deep_char_list" arity="1"/>
- <fsummary>Test for a deep list of characters</fsummary>
+ <name name="write_char_as_latin1" arity="1"/>
+ <fsummary>Write a character.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a, possibly deep, list
- of characters in the Unicode range, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print a character
+ constant in the Unicode character set. Non-Latin-1 characters
+ are escaped.</p>
</desc>
</func>
+
<func>
- <name name="deep_latin1_char_list" arity="1"/>
- <fsummary>Test for a deep list of characters</fsummary>
+ <name name="write_latin1_char" arity="1"/>
+ <fsummary>Write an ISO Latin-1 character.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a, possibly deep, list
- of characters in the ISO-latin-1 range, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print a character
+ constant in the ISO Latin-1 character set.</p>
</desc>
</func>
+
<func>
- <name name="printable_list" arity="1"/>
- <fsummary>Test for a list of printable characters</fsummary>
+ <name name="write_latin1_string" arity="1"/>
+ <fsummary>Write an ISO Latin-1 string.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- printable characters, otherwise it returns <c>false</c>.</p>
- <p>What is a printable character in this case is determined by the
- <c>+pc</c> start up flag to the Erlang VM. See
- <seealso marker="io#printable_range/0">io:printable_range/0</seealso>
- and <seealso marker="erts:erl#erl">erl(1)</seealso>.</p>
+ <p>Returns the list of characters needed to print
+ <c><anno>Latin1String</anno></c> as a string.</p>
</desc>
</func>
+
<func>
- <name name="printable_latin1_list" arity="1"/>
- <fsummary>Test for a list of printable ISO-latin-1 characters</fsummary>
+ <name name="write_string" arity="1"/>
+ <fsummary>Write a string.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- printable ISO-latin-1 characters, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print
+ <c><anno>String</anno></c> as a string.</p>
</desc>
</func>
+
<func>
- <name name="printable_unicode_list" arity="1"/>
- <fsummary>Test for a list of printable Unicode characters</fsummary>
+ <name name="write_string_as_latin1" arity="1"/>
+ <fsummary>Write a string.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- printable Unicode characters, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print
+ <c><anno>String</anno></c> as a string. Non-Latin-1
+ characters are escaped.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/io_protocol.xml b/lib/stdlib/doc/src/io_protocol.xml
index 170dab17ca..84b5f62c7f 100644
--- a/lib/stdlib/doc/src/io_protocol.xml
+++ b/lib/stdlib/doc/src/io_protocol.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -23,7 +23,7 @@
</legalnotice>
- <title>The Erlang I/O-protocol</title>
+ <title>The Erlang I/O Protocol</title>
<prepared>Patrik Nyblom</prepared>
<responsible></responsible>
<docno></docno>
@@ -34,183 +34,217 @@
<file>io_protocol.xml</file>
</header>
-
-<p>The I/O-protocol in Erlang specifies a way for a client to communicate
-with an I/O server and vice versa. The I/O server is a process that handles
-the requests and performs the requested task on e.g. an IO device. The
-client is any Erlang process wishing to read or write data from/to the
-IO device.</p>
-
-<p>The common I/O-protocol has been present in OTP since the
-beginning, but has been fairly undocumented and has also somewhat
-evolved over the years. In an addendum to Robert Virdings rationale
-the original I/O-protocol is described. This document describes the
-current I/O-protocol.</p>
-
-<p>The original I/O-protocol was simple and flexible. Demands for spacial
-and execution time efficiency has triggered extensions to the protocol
-over the years, making the protocol larger and somewhat less easy to
-implement than the original. It can certainly be argued that the
-current protocol is too complex, but this text describes how it looks
-today, not how it should have looked.</p>
-
-<p>The basic ideas from the original protocol still hold. The I/O server
-and client communicate with one single, rather simplistic protocol and
-no server state is ever present in the client. Any I/O server can be
-used together with any client code and client code need not be aware
-of the actual IO device the I/O server communicates with.</p>
-
-<section>
-<title>Protocol Basics</title>
-
-<p>As described in Robert's paper, I/O servers and clients communicate using
-<c>io_request</c>/<c>io_reply</c> tuples as follows:</p>
-
-<p><em>{io_request, From, ReplyAs, Request}</em><br/>
-<em>{io_reply, ReplyAs, Reply}</em></p>
-
-<p>The client sends an <c>io_request</c> tuple to the I/O server and
-the server eventually sends a corresponding <c>io_reply</c> tuple.</p>
-
-<list type="bulleted">
-<item><c>From</c> is the <c>pid()</c> of the client, the process which
-the I/O server sends the IO reply to.</item>
-
-<item><c>ReplyAs</c> can be any datum and is returned in the corresponding
-<c>io_reply</c>. The <seealso marker="stdlib:io">io</seealso> module monitors
-the I/O server, and uses the monitor reference as the <c>ReplyAs</c> datum.
-A more complicated client
-could have several outstanding I/O requests to the same I/O server and
-would then use different references (or something else) to differentiate among
-the incoming IO replies. The <c>ReplyAs</c> element should be considered
-opaque by the I/O server. Note that the <c>pid()</c> of the I/O server is not
-explicitly present in the <c>io_reply</c> tuple. The reply can be sent from any
-process, not necessarily the actual I/O server. The <c>ReplyAs</c> element is
-the only thing that connects one I/O request with an I/O-reply.</item>
-
-<item><c>Request</c> and <c>Reply</c> are described below.</item>
-</list>
-
-<p>When an I/O server receives an <c>io_request</c> tuple, it acts upon the actual
-<c>Request</c> part and eventually sends an <c>io_reply</c> tuple with the corresponding
-<c>Reply</c> part.</p>
-</section>
-<section>
-<title>Output Requests</title>
-
-<p>To output characters on an IO device, the following <c>Request</c>s exist:</p>
-
-<p>
-<em>{put_chars, Encoding, Characters}</em><br/>
-<em>{put_chars, Encoding, Module, Function, Args}</em>
-</p>
-<list type="bulleted">
-<item><c>Encoding</c> is either <c>unicode</c> or <c>latin1</c>, meaning that the
- characters are (in case of binaries) encoded as either UTF-8 or
- ISO-latin-1 (pure bytes). A well behaved I/O server should also
- return error if list elements contain integers > 255 when
- <c>Encoding</c> is set to <c>latin1</c>. Note that this does not in any way tell
- how characters should be put on the actual IO device or how the
- I/O server should handle them. Different I/O servers may handle the
- characters however they want, this simply tells the I/O server which
- format the data is expected to have. In the <c>Module</c>/<c>Function</c>/<c>Args</c>
- case, <c>Encoding</c> tells which format the designated function
- produces. Note that byte-oriented data is simplest sent using the ISO-latin-1
- encoding.</item>
-
-<item>Characters are the data to be put on the IO device. If <c>Encoding</c> is
- <c>latin1</c>, this is an <c>iolist()</c>. If <c>Encoding</c> is <c>unicode</c>, this is an
- Erlang standard mixed Unicode list (one integer in a list per
- character, characters in binaries represented as UTF-8).</item>
-
-<item><c>Module</c>, <c>Function</c>, and <c>Args</c> denote a function which will be called to
- produce the data (like <c>io_lib:format/2</c>). <c>Args</c> is a list of arguments
- to the function. The function should produce data in the given
- <c>Encoding</c>. The I/O server should call the function as
- <c>apply(Mod, Func, Args)</c> and will put the returned data on the IO device as if it was sent
- in a <c>{put_chars, Encoding, Characters}</c> request. If the function
- returns anything else than a binary or list or throws an exception,
- an error should be sent back to the client.</item>
-</list>
-
-<p>The I/O server replies to the client with an <c>io_reply</c> tuple where the <c>Reply</c>
-element is one of:</p>
-<p>
-<em>ok</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<list type="bulleted">
-<item><c>Error</c> describes the error to the client, which may do whatever
- it wants with it. The Erlang <seealso marker="stdlib:io">io</seealso>
- module typically returns it as is.</item>
-</list>
-
-<p>For backward compatibility the following <c>Request</c>s should also be
-handled by an I/O server (these requests should not be present after
-R15B of OTP):</p>
-<p>
-<em>{put_chars, Characters}</em><br/>
-<em>{put_chars, Module, Function, Args}</em>
-</p>
-
-<p>These should behave as <c>{put_chars, latin1, Characters}</c> and
-<c>{put_chars, latin1, Module, Function, Args}</c> respectively. </p>
-</section>
-<section>
-<title>Input Requests</title>
-
-<p>To read characters from an IO device, the following <c>Request</c>s exist:</p>
-
-<p><em>{get_until, Encoding, Prompt, Module, Function, ExtraArgs}</em></p>
-
-<list type="bulleted">
-<item><c>Encoding</c> denotes how data is to be sent back to the client and
- what data is sent to the function denoted by
- <c>Module</c>/<c>Function</c>/<c>ExtraArgs</c>. If the function supplied returns data as a
- list, the data is converted to this encoding. If however the
- function supplied returns data in some other format, no conversion
- can be done and it is up to the client supplied function to return
- data in a proper way. If <c>Encoding</c> is <c>latin1</c>, lists of integers
- 0..255 or binaries containing plain bytes are sent back to the
- client when possible; if <c>Encoding</c> is <c>unicode</c>, lists with integers in
- the whole Unicode range or binaries encoded in UTF-8 are sent to the
- client. The user supplied function will always see lists of integers, never
- binaries, but the list may contain numbers > 255 if the <c>Encoding</c> is
- <c>unicode</c>.</item>
-
-<item><c>Prompt</c> is a list of characters (not mixed, no binaries) or an atom
- to be output as a prompt for input on the IO device. <c>Prompt</c> is
- often ignored by the I/O server and if set to <c>''</c> it should always
- be ignored (and result in nothing being written to the IO device).</item>
-
-<item><p><c>Module</c>, <c>Function</c>, and <c>ExtraArgs</c> denote a function and arguments to
- determine when enough data is written. The function should take two
- additional arguments, the last state, and a list of characters. The
- function should return one of:</p>
-<p>
-<em>{done, Result, RestChars}</em><br/>
-<em>{more, Continuation}</em>
-</p>
- <p>The <c>Result</c> can be any Erlang term, but if it is a <c>list()</c>, the
- I/O server may convert it to a <c>binary()</c> of appropriate format before
- returning it to the client, if the I/O server is set in binary mode (see
- below).</p>
-
- <p>The function will be called with the data the I/O server finds on
- its IO device, returning <c>{done, Result, RestChars}</c> when enough data is
- read (in which case <c>Result</c> is sent to the client and <c>RestChars</c> is
- kept in the I/O server as a buffer for subsequent input) or
- <c>{more, Continuation}</c>, indicating that more characters are needed to
- complete the request. The <c>Continuation</c> will be sent as the state in
- subsequent calls to the function when more characters are
- available. When no more characters are available, the function
- shall return <c>{done, eof, Rest}</c>.
- The initial state is the empty list and the data when an
- end of file is reached on the IO device is the atom <c>eof</c>. An emulation
- of the <c>get_line</c> request could be (inefficiently) implemented using
- the following functions:</p>
-<code>
+ <p>The I/O protocol in Erlang enables bi-directional communication between
+ clients and servers.</p>
+
+ <list type="bulleted">
+ <item>
+ <p>The I/O server is a process that handles the requests and performs
+ the requested task on, for example, an I/O device.</p>
+ </item>
+ <item>
+ <p>The client is any Erlang process wishing to read or write data from/to
+ the I/O device.</p>
+ </item>
+ </list>
+
+ <p>The common I/O protocol has been present in OTP since the beginning, but
+ has been undocumented and has also evolved over the years. In an
+ addendum to Robert Virding's rationale, the original I/O protocol is
+ described. This section describes the current I/O protocol.</p>
+
+ <p>The original I/O protocol was simple and flexible. Demands for memory
+ efficiency and execution time efficiency have triggered extensions
+ to the protocol over the years, making the protocol larger and somewhat
+ less easy to implement than the original. It can certainly be argued that
+ the current protocol is too complex, but this section describes how it
+ looks today, not how it should have looked.</p>
+
+ <p>The basic ideas from the original protocol still hold. The I/O server
+ and client communicate with one single, rather simplistic protocol and no
+ server state is ever present in the client. Any I/O server can be used
+ together with any client code, and the client code does not need to be
+ aware of the I/O device that the I/O server communicates with.</p>
+
+ <section>
+ <title>Protocol Basics</title>
+ <p>As described in Robert's paper, I/O servers and clients communicate
+ using <c>io_request</c>/<c>io_reply</c> tuples as follows:</p>
+
+ <pre>
+{io_request, From, ReplyAs, Request}
+{io_reply, ReplyAs, Reply}</pre>
+
+ <p>The client sends an <c>io_request</c> tuple to the I/O server and the
+ server eventually sends a corresponding <c>io_reply</c> tuple.</p>
+
+ <list type="bulleted">
+ <item>
+ <p><c>From</c> is the <c>pid()</c> of the client, the process which
+ the I/O server sends the I/O reply to.</p>
+ </item>
+ <item>
+ <p><c>ReplyAs</c> can be any datum and is returned in the
+ corresponding <c>io_reply</c>. The
+ <seealso marker="stdlib:io"><c>io</c></seealso> module monitors the
+ the I/O server and uses the monitor reference as the <c>ReplyAs</c>
+ datum. A more complicated client can have many outstanding I/O
+ requests to the same I/O server and can use different references (or
+ something else) to differentiate among the incoming I/O replies.
+ Element <c>ReplyAs</c> is to be considered opaque by the I/O
+ server.</p>
+ <p>Notice that the <c>pid()</c> of the I/O server is not explicitly
+ present in tuple <c>io_reply</c>. The reply can be sent from any
+ process, not necessarily the actual I/O server.</p>
+ </item>
+ <item>
+ <p><c>Request</c> and <c>Reply</c> are described below.</p>
+ </item>
+ </list>
+
+ <p>When an I/O server receives an <c>io_request</c> tuple, it acts upon the
+ <c>Request</c> part and eventually sends an <c>io_reply</c> tuple with
+ the corresponding <c>Reply</c> part.</p>
+ </section>
+
+ <section>
+ <title>Output Requests</title>
+ <p>To output characters on an I/O device, the following <c>Request</c>s
+ exist:</p>
+
+ <pre>
+{put_chars, Encoding, Characters}
+{put_chars, Encoding, Module, Function, Args}</pre>
+
+ <list type="bulleted">
+ <item>
+ <p><c>Encoding</c> is <c>unicode</c> or <c>latin1</c>, meaning that the
+ characters are (in case of binaries) encoded as UTF-8 or ISO Latin-1
+ (pure bytes). A well-behaved I/O server is also to return an error
+ indication if list elements contain integers &gt; 255
+ when <c>Encoding</c> is set to <c>latin1</c>.</p>
+ <p>Notice that this does not in any way tell how characters are to be
+ put on the I/O device or handled by the I/O server. Different I/O
+ servers can handle the characters however they want, this only tells
+ the I/O server which format the data is expected to have. In the
+ <c>Module</c>/<c>Function</c>/<c>Args</c> case, <c>Encoding</c> tells
+ which format the designated function produces.</p>
+ <p>Notice also that byte-oriented data is simplest sent using the ISO
+ Latin-1 encoding.</p>
+ </item>
+ <item>
+ <p><c>Characters</c> are the data to be put on the I/O device. If
+ <c>Encoding</c> is <c>latin1</c>, this is an <c>iolist()</c>. If
+ <c>Encoding</c> is <c>unicode</c>, this is an Erlang standard mixed
+ Unicode list (one integer in a list per character, characters in
+ binaries represented as UTF-8).</p>
+ </item>
+ <item>
+ <p><c>Module</c>, <c>Function</c>, and <c>Args</c> denote a function
+ that is called to produce the data (like
+ <seealso marker="stdlib:io_lib#format/2"><c>io_lib:format/2</c></seealso>).
+ </p>
+ <p><c>Args</c> is a list of arguments to the function. The function is
+ to produce data in the specified <c>Encoding</c>. The I/O server is
+ to call the function as <c>apply(Mod, Func, Args)</c> and put the
+ returned data on the I/O device as if it was sent in a
+ <c>{put_chars, Encoding, Characters}</c> request. If the function
+ returns anything else than a binary or list, or throws an exception,
+ an error is to be sent back to the client.</p>
+ </item>
+ </list>
+
+ <p>The I/O server replies to the client with an <c>io_reply</c> tuple, where
+ element <c>Reply</c> is one of:</p>
+
+ <pre>
+ok
+{error, Error}</pre>
+
+ <list type="bulleted">
+ <item><c>Error</c> describes the error to the client, which can do
+ whatever it wants with it. The
+ <seealso marker="stdlib:io"><c>io</c></seealso> module typically
+ returns it "as is".</item>
+ </list>
+
+ <p>For backward compatibility, the following <c>Request</c>s are also to be
+ handled by an I/O server (they are not to be present after
+ Erlang/OTP R15B):</p>
+
+ <pre>
+{put_chars, Characters}
+{put_chars, Module, Function, Args}</pre>
+
+ <p>These are to behave as <c>{put_chars, latin1, Characters}</c> and
+ <c>{put_chars, latin1, Module, Function, Args}</c>, respectively.</p>
+ </section>
+
+ <section>
+ <title>Input Requests</title>
+ <p>To read characters from an I/O device, the following <c>Request</c>s
+ exist:</p>
+
+ <pre>
+{get_until, Encoding, Prompt, Module, Function, ExtraArgs}</pre>
+
+ <list type="bulleted">
+ <item>
+ <p><c>Encoding</c> denotes how data is to be sent back to the client
+ and what data is sent to the function denoted by
+ <c>Module</c>/<c>Function</c>/<c>ExtraArgs</c>. If the function
+ supplied returns data as a list, the data is converted to this
+ encoding. If the function supplied returns data in some other format,
+ no conversion can be done, and it is up to the client-supplied
+ function to return data in a proper way.</p>
+ <p>If <c>Encoding</c> is <c>latin1</c>, lists of integers <c>0..255</c>
+ or binaries containing plain bytes are sent back to the client when
+ possible. If <c>Encoding</c> is <c>unicode</c>, lists with integers
+ in the whole Unicode range or binaries encoded in UTF-8 are sent to
+ the client. The user-supplied function always sees lists of
+ integers, never binaries, but the list can contain numbers &gt; 255
+ if <c>Encoding</c> is <c>unicode</c>.</p>
+ </item>
+ <item>
+ <p><c>Prompt</c> is a list of characters (not mixed, no binaries) or an
+ atom to be output as a prompt for input on the I/O device.
+ <c>Prompt</c> is often ignored by the I/O server; if set to <c>''</c>,
+ it is always to be ignored (and results in nothing being written to
+ the I/O device).</p>
+ </item>
+ <item>
+ <p><c>Module</c>, <c>Function</c>, and <c>ExtraArgs</c> denote a
+ function and arguments to determine when enough data is written. The
+ function is to take two more arguments, the last state, and a list of
+ characters. The function is to return one of:</p>
+ <pre>
+{done, Result, RestChars}
+{more, Continuation}</pre>
+ <p><c>Result</c> can be any Erlang term, but if it is a <c>list()</c>,
+ the I/O server can convert it to a <c>binary()</c> of appropriate
+ format before returning it to the client, if the I/O server is set in
+ binary mode (see below).</p>
+ <p>The function is called with the data the I/O server finds on its I/O
+ device, returning one of:</p>
+ <list type="bulleted">
+ <item>
+ <p><c>{done, Result, RestChars}</c> when enough data is read. In
+ this case <c>Result</c> is sent to the client and <c>RestChars</c>
+ is kept in the I/O server as a buffer for later input.</p>
+ </item>
+ <item>
+ <p><c>{more, Continuation}</c>, which indicates that more
+ characters are needed to complete the request.</p>
+ </item>
+ </list>
+ <p><c>Continuation</c> is sent as the state in later calls to the
+ function when more characters are available. When no more characters
+ are available, the function must return <c>{done, eof, Rest}</c>. The
+ initial state is the empty list. The data when an end of file is
+ reached on the IO device is the atom <c>eof</c>.</p>
+ <p>An emulation of the <c>get_line</c> request can be (inefficiently)
+ implemented using the following functions:</p>
+ <code>
-module(demo).
-export([until_newline/3, get_line/1]).
@@ -234,226 +268,253 @@ get_line(IoServer) -&gt;
receive
{io_reply, IoServer, Data} -&gt;
Data
- end.
-</code>
- <p>Note especially that the last element in the <c>Request</c> tuple (<c>[$\n]</c>)
- is appended to the argument list when the function is called. The
- function should be called like
- <c>apply(Module, Function, [ State, Data | ExtraArgs ])</c> by the I/O server</p>
-</item>
-</list>
-
-<p>A fixed number of characters is requested using this <c>Request</c>:</p>
-<p>
-<em>{get_chars, Encoding, Prompt, N}</em>
-</p>
-
-<list type="bulleted">
-<item><c>Encoding</c> and <c>Prompt</c> as for <c>get_until</c>.</item>
-
-<item><c>N</c> is the number of characters to be read from the IO device.</item>
-</list>
-
-<p>A single line (like in the example above) is requested with this <c>Request</c>:</p>
-<p>
-<em>{get_line, Encoding, Prompt}</em>
-</p>
-
-<list type="bulleted">
-<item><c>Encoding</c> and <c>Prompt</c> as above.</item>
-</list>
-
-<p>Obviously, the <c>get_chars</c> and <c>get_line</c> could be implemented with the
-<c>get_until</c> request (and indeed they were originally), but demands for
-efficiency has made these additions necessary.</p>
-
-<p>The I/O server replies to the client with an <c>io_reply</c> tuple where the <c>Reply</c>
-element is one of:</p>
-<p>
-<em>Data</em><br/>
-<em>eof</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<list type="bulleted">
-<item><c>Data</c> is the characters read, in either list or binary form
- (depending on the I/O server mode, see below).</item>
-<item><c>Error</c> describes the error to the client, which may do whatever it
- wants with it. The Erlang <seealso marker="stdlib:io">io</seealso>
- module typically returns it as is.</item>
-<item><c>eof</c> is returned when input end is reached and no more data is
-available to the client process.</item>
-</list>
-
-<p>For backward compatibility the following <c>Request</c>s should also be
-handled by an I/O server (these reqeusts should not be present after
-R15B of OTP):</p>
-
-<p>
-<em>{get_until, Prompt, Module, Function, ExtraArgs}</em><br/>
-<em>{get_chars, Prompt, N}</em><br/>
-<em>{get_line, Prompt}</em><br/>
-</p>
-
-<p>These should behave as <c>{get_until, latin1, Prompt, Module, Function,
-ExtraArgs}</c>, <c>{get_chars, latin1, Prompt, N}</c> and <c>{get_line, latin1,
-Prompt}</c> respectively.</p>
-</section>
-<section>
-<title>I/O-server Modes</title>
-
-<p>Demands for efficiency when reading data from an I/O server has not
-only lead to the addition of the <c>get_line</c> and <c>get_chars</c> requests, but
-has also added the concept of I/O server options. No options are
-mandatory to implement, but all I/O servers in the Erlang standard
-libraries honor the <c>binary</c> option, which allows the <c>Data</c> element of the
-<c>io_reply</c> tuple to be a binary instead of a list <em>when possible</em>.
-If the data is sent as a binary, Unicode data will be sent in the
-standard Erlang Unicode
-format, i.e. UTF-8 (note that the function of the <c>get_until</c> request still gets
-list data regardless of the I/O server mode).</p>
-
-<p>Note that i.e. the <c>get_until</c> request allows for a function with the data specified as always being a list. Also the return value data from such a function can be of any type (as is indeed the case when an <c>io:fread</c> request is sent to an I/O server). The client has to be prepared for data received as answers to those requests to be in a variety of forms, but the I/O server should convert the results to binaries whenever possible (i.e. when the function supplied to <c>get_until</c> actually returns a list). The example shown later in this text does just that.</p>
-
-<p>An I/O-server in binary mode will affect the data sent to the client,
-so that it has to be able to handle binary data. For convenience, it
-is possible to set and retrieve the modes of an I/O server using the
-following I/O requests:</p>
-
-<p>
-<em>{setopts, Opts}</em>
-</p>
-
-
-<list type="bulleted">
-<item><c>Opts</c> is a list of options in the format recognized by <seealso marker="stdlib:proplists">proplists</seealso> (and
- of course by the I/O server itself).</item>
-</list>
-<p>As an example, the I/O server for the interactive shell (in <c>group.erl</c>)
-understands the following options:</p>
-<p>
-<em>{binary, boolean()}</em> (or <em>binary</em>/<em>list</em>)<br/>
-<em>{echo, boolean()}</em><br/>
-<em>{expand_fun, fun()}</em><br/>
-<em>{encoding, unicode/latin1}</em> (or <em>unicode</em>/<em>latin1</em>)
-</p>
-
-<p>- of which the <c>binary</c> and <c>encoding</c> options are common for all
-I/O servers in OTP, while <c>echo</c> and <c>expand</c> are valid only for this
-I/O server. It is worth noting that the <c>unicode</c> option notifies how
-characters are actually put on the physical IO device, i.e. if the
-terminal per se is Unicode aware, it does not affect how characters
-are sent in the I/O-protocol, where each request contains encoding
-information for the provided or returned data.</p>
-
-<p>The I/O server should send one of the following as <c>Reply</c>:</p>
-<p>
-<em>ok</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<p>An error (preferably <c>enotsup</c>) is to be expected if the option is
-not supported by the I/O server (like if an <c>echo</c> option is sent in a
-<c>setopts</c> request to a plain file).</p>
-
-<p>To retrieve options, this request is used:</p>
-<p>
-<em>getopts</em>
-</p>
-
-<p>The <c>getopts</c> request asks for a complete list of all options
-supported by the I/O server as well as their current values.</p>
-
-<p>The I/O server replies:</p>
-<p>
-<em>OptList</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<list type="bulleted">
-<item><c>OptList</c> is a list of tuples <c>{Option, Value}</c> where <c>Option</c> is always
- an atom.</item>
-</list>
-</section>
-<section>
-<title>Multiple I/O Requests</title>
-
-<p>The <c>Request</c> element can in itself contain several <c>Request</c>s by using
-the following format:</p>
-<p>
-<em>{requests, Requests}</em>
-</p>
-<list type="bulleted">
-<item><c>Requests</c> is a list of valid <c>io_request</c> tuples for the protocol, they
- shall be executed in the order in which they appear in the list and
- the execution should continue until one of the requests result in an
- error or the list is consumed. The result of the last request is
- sent back to the client.</item>
-</list>
-
-<p>The I/O server can for a list of requests send any of the valid results in
-the reply:</p>
-
-<p>
-<em>ok</em><br/>
-<em>{ok, Data}</em><br/>
-<em>{ok, Options}</em><br/>
-<em>{error, Error}</em>
-</p>
-<p>- depending on the actual requests in the list.</p>
-</section>
-<section>
-<title>Optional I/O Requests</title>
-
-<p>The following I/O request is optional to implement and a client
-should be prepared for an error return:</p>
-<p>
-<em>{get_geometry, Geometry}</em>
-</p>
-<list type="bulleted">
-<item><c>Geometry</c> is either the atom <c>rows</c> or the atom <c>columns</c>.</item>
-</list>
-<p>The I/O server should send the <c>Reply</c> as:</p>
-<p>
-<em>{ok, N}</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<list type="bulleted">
-<item><c>N</c> is the number of character rows or columns the IO device has, if
- applicable to the IO device the I/O server handles, otherwise <c>{error,
- enotsup}</c> is a good answer.</item>
-</list>
-</section>
-<section>
-<title>Unimplemented Request Types</title>
-
-<p>If an I/O server encounters a request it does not recognize (i.e. the
-<c>io_request</c> tuple is in the expected format, but the actual <c>Request</c> is
-unknown), the I/O server should send a valid reply with the error tuple:</p>
-<p>
-<em>{error, request}</em>
-</p>
-
-<p>This makes it possible to extend the protocol with optional requests
-and for the clients to be somewhat backwards compatible.</p>
-</section>
-<section>
-<title>An Annotated and Working Example I/O Server</title>
-
-<p>An I/O server is any process capable of handling the I/O protocol. There is
-no generic I/O server behavior, but could well be. The framework is
-simple enough, a process handling incoming requests, usually both
-I/O-requests and other IO device-specific requests (for i.e. positioning,
-closing etc.).</p>
-
-<p>Our example I/O server stores characters in an ETS table, making up a
-fairly crude ram-file (it is probably not useful, but working).</p>
-
-<p>The module begins with the usual directives, a function to start the
-I/O server and a main loop handling the requests:</p>
-
-<code>
+ end.</code>
+ <p>Notice that the last element in the <c>Request</c> tuple
+ (<c>[$\n]</c>) is appended to the argument list when the function is
+ called. The function is to be called like
+ <c>apply(Module, Function, [ State, Data | ExtraArgs ])</c> by the
+ I/O server.</p>
+ </item>
+ </list>
+
+ <p>A fixed number of characters is requested using the following
+ <c>Request</c>:</p>
+
+ <pre>
+{get_chars, Encoding, Prompt, N}</pre>
+
+ <list type="bulleted">
+ <item>
+ <p><c>Encoding</c> and <c>Prompt</c> as for <c>get_until</c>.</p>
+ </item>
+ <item>
+ <p><c>N</c> is the number of characters to be read from the I/O
+ device.</p>
+ </item>
+ </list>
+
+ <p>A single line (as in former example) is requested with the
+ following <c>Request</c>:</p>
+
+ <pre>
+{get_line, Encoding, Prompt}</pre>
+
+ <list type="bulleted">
+ <item><c>Encoding</c> and <c>Prompt</c> as for <c>get_until</c>.</item>
+ </list>
+
+ <p>Clearly, <c>get_chars</c> and <c>get_line</c> could be implemented with
+ the <c>get_until</c> request (and indeed they were originally), but
+ demands for efficiency have made these additions necessary.</p>
+
+ <p>The I/O server replies to the client with an <c>io_reply</c> tuple, where
+ element <c>Reply</c> is one of:</p>
+
+ <pre>
+Data
+eof
+{error, Error}</pre>
+
+ <list type="bulleted">
+ <item>
+ <p><c>Data</c> is the characters read, in list or binary form
+ (depending on the I/O server mode, see the next section).</p>
+ </item>
+ <item>
+ <p><c>eof</c> is returned when input end is reached and no more data is
+ available to the client process.</p>
+ </item>
+ <item>
+ <p><c>Error</c> describes the error to the client, which can do
+ whatever it wants with it. The
+ <seealso marker="stdlib:io"><c>io</c></seealso> module typically
+ returns it as is.</p>
+ </item>
+ </list>
+
+ <p>For backward compatibility, the following <c>Request</c>s are also to be
+ handled by an I/O server (they are not to be present after
+ Erlang/OTP R15B):</p>
+
+ <pre>
+{get_until, Prompt, Module, Function, ExtraArgs}
+{get_chars, Prompt, N}
+{get_line, Prompt}</pre>
+
+ <p>These are to behave as
+ <c>{get_until, latin1, Prompt, Module, Function, ExtraArgs}</c>,
+ <c>{get_chars, latin1, Prompt, N}</c>, and
+ <c>{get_line, latin1, Prompt}</c>, respectively.</p>
+ </section>
+
+ <section>
+ <title>I/O Server Modes</title>
+ <p>Demands for efficiency when reading data from an I/O server has not only
+ lead to the addition of the <c>get_line</c> and <c>get_chars</c> requests,
+ but has also added the concept of I/O server options. No options are
+ mandatory to implement, but all I/O servers in the Erlang standard
+ libraries honor the <c>binary</c> option, which allows element
+ <c>Data</c> of the <c>io_reply</c> tuple to be a binary instead of a list
+ <em>when possible</em>. If the data is sent as a binary, Unicode data is
+ sent in the standard Erlang Unicode format, that is, UTF-8 (notice that
+ the function of the <c>get_until</c> request still gets list data
+ regardless of the I/O server mode).</p>
+
+ <p>Notice that the <c>get_until</c> request allows for a function with the
+ data specified as always being a list. Also, the return value data from
+ such a function can be of any type (as is indeed the case when an
+ <seealso marker="stdlib:io#fread/2"><c>io:fread/2,3</c></seealso>
+ request is sent to an I/O server).
+ The client must be prepared for data received as
+ answers to those requests to be in various forms. However, the I/O
+ server is to convert the results to binaries whenever possible (that is,
+ when the function supplied to <c>get_until</c> returns a list). This is
+ done in the example in section
+ <seealso marker="#example_io_server">An Annotated and Working Example I/O Server</seealso>.
+ </p>
+
+ <p>An I/O server in binary mode affects the data sent to the client, so that
+ it must be able to handle binary data. For convenience, the modes of an
+ I/O server can be set and retrieved using the following I/O requests:</p>
+
+ <pre>
+{setopts, Opts}</pre>
+
+ <list type="bulleted">
+ <item><c>Opts</c> is a list of options in the format recognized by the
+ <seealso marker="stdlib:proplists"><c>proplists</c></seealso> module
+ (and by the I/O server).</item>
+ </list>
+
+ <p>As an example, the I/O server for the interactive shell (in
+ <c>group.erl</c>) understands the following options:</p>
+
+ <pre>
+{binary, boolean()} (or binary/list)
+{echo, boolean()}
+{expand_fun, fun()}
+{encoding, unicode/latin1} (or unicode/latin1)</pre>
+
+ <p>Options <c>binary</c> and <c>encoding</c> are common for all I/O servers
+ in OTP, while <c>echo</c> and <c>expand</c> are valid only for this I/O
+ server. Option <c>unicode</c> notifies how characters are put on the
+ physical I/O device, that is, if the terminal itself is Unicode-aware.
+ It does not affect how characters are sent in the I/O protocol, where
+ each request contains encoding information for the provided or returned
+ data.</p>
+
+ <p>The I/O server is to send one of the following as <c>Reply</c>:</p>
+
+ <pre>
+ok
+{error, Error}</pre>
+
+ <p>An error (preferably <c>enotsup</c>) is to be expected if the option is
+ not supported by the I/O server (like if an <c>echo</c> option is sent in
+ a <c>setopts</c> request to a plain file).</p>
+
+ <p>To retrieve options, the following request is used:</p>
+
+ <pre>
+getopts</pre>
+
+ <p>This request asks for a complete list of all options supported by the
+ I/O server as well as their current values.</p>
+
+ <p>The I/O server replies:</p>
+
+ <pre>
+OptList
+{error, Error}</pre>
+
+ <list type="bulleted">
+ <item><c>OptList</c> is a list of tuples <c>{Option, Value}</c>, where
+ <c>Option</c> always is an atom.</item>
+ </list>
+ </section>
+
+ <section>
+ <title>Multiple I/O Requests</title>
+ <p>The <c>Request</c> element can in itself contain many <c>Request</c>s
+ by using the following format:</p>
+
+ <pre>
+{requests, Requests}</pre>
+
+ <list type="bulleted">
+ <item><c>Requests</c> is a list of valid <c>io_request</c> tuples for the
+ protocol. They must be executed in the order that they appear in
+ the list. The execution is to continue until one of the requests results
+ in an error or the list is consumed. The result of the last request is
+ sent back to the client.</item>
+ </list>
+
+ <p>The I/O server can, for a list of requests, send any of the following
+ valid results in the reply, depending on the requests in the list:</p>
+
+ <pre>
+ok
+{ok, Data}
+{ok, Options}
+{error, Error}</pre>
+ </section>
+
+ <section>
+ <title>Optional I/O Request</title>
+ <p>The following I/O request is optional to implement and a client is to
+ be prepared for an error return:</p>
+
+ <pre>
+{get_geometry, Geometry}</pre>
+
+ <list type="bulleted">
+ <item><c>Geometry</c> is the atom <c>rows</c> or the atom
+ <c>columns</c>.</item>
+ </list>
+
+ <p>The I/O server is to send the <c>Reply</c> as:</p>
+
+ <pre>
+{ok, N}
+{error, Error}</pre>
+
+ <list type="bulleted">
+ <item><c>N</c> is the number of character rows or columns that the I/O
+ device has, if applicable to the I/O device handled by the I/O server,
+ otherwise <c>{error, enotsup}</c> is a good answer.</item>
+ </list>
+ </section>
+
+ <section>
+ <title>Unimplemented Request Types</title>
+ <p>If an I/O server encounters a request that it does not recognize (that
+ is, the <c>io_request</c> tuple has the expected format, but the
+ <c>Request</c> is unknown), the I/O server is to send a valid reply with
+ the error tuple:</p>
+
+ <pre>
+{error, request}</pre>
+
+ <p>This makes it possible to extend the protocol with optional requests
+ and for the clients to be somewhat backward compatible.</p>
+ </section>
+
+ <section>
+ <title>An Annotated and Working Example I/O Server</title>
+ <marker id="example_io_server"/>
+ <p>An I/O server is any process capable of handling the I/O protocol. There
+ is no generic I/O server behavior, but could well be. The framework is
+ simple, a process handling incoming requests, usually both I/O-requests
+ and other I/O device-specific requests (positioning, closing, and so on).
+ </p>
+
+ <p>The example I/O server stores characters in an ETS table, making
+ up a fairly crude RAM file.</p>
+
+ <p>The module begins with the usual directives, a function to start the
+ I/O server and a main loop handling the requests:</p>
+
+ <code>
-module(ets_io_server).
-export([start_link/0, init/0, loop/1, until_newline/3, until_enough/3]).
@@ -490,39 +551,34 @@ loop(State) -&gt;
?MODULE:loop(State#state{position = 0});
_Unknown -&gt;
?MODULE:loop(State)
- end.
-</code>
-
-<p>The main loop receives messages from the client (which might be using
-the <seealso marker="stdlib:io">io</seealso> module to send requests).
-For each request the function
-<c>request/2</c> is called and a reply is eventually sent using the <c>reply/3</c>
-function.</p>
+ end.</code>
-<p>The &quot;private&quot; message <c>{From, rewind}</c> results in the
-current position in the pseudo-file to be reset to 0 (the beginning of
-the &quot;file&quot;). This is a typical example of IO device-specific
-messages not being part of the I/O-protocol. It is usually a bad idea
-to embed such private messages in <c>io_request</c> tuples, as that might be
-confusing to the reader.</p>
+ <p>The main loop receives messages from the client (which can use the
+ the <seealso marker="stdlib:io"><c>io</c></seealso> module to send
+ requests). For each request, the function <c>request/2</c> is called and a
+ reply is eventually sent using function <c>reply/3</c>.</p>
-<p>Let us look at the reply function first...</p>
+ <p>The &quot;private&quot; message <c>{From, rewind}</c> results in the
+ current position in the pseudo-file to be reset to <c>0</c> (the beginning
+ of the &quot;file&quot;). This is a typical example of I/O device-specific
+ messages not being part of the I/O protocol. It is usually a bad idea to
+ embed such private messages in <c>io_request</c> tuples, as that can
+ confuse the reader.</p>
-<code>
+ <p>First, we examine the reply function:</p>
+ <code>
reply(From, ReplyAs, Reply) -&gt;
- From ! {io_reply, ReplyAs, Reply}.
+ From ! {io_reply, ReplyAs, Reply}.</code>
-</code>
+ <p>It sends the <c>io_reply</c> tuple back to the client, providing element
+ <c>ReplyAs</c> received in the request along with the result of the
+ request, as described earlier.</p>
-<p>Simple enough, it sends the <c>io_reply</c> tuple back to the client,
-providing the <c>ReplyAs</c> element received in the request along with the
-result of the request, as described above.</p>
+ <p>We need to handle some requests. First the requests for writing
+ characters:</p>
-<p>Now look at the different requests we need to handle. First the
-requests for writing characters:</p>
-
-<code>
+ <code>
request({put_chars, Encoding, Chars}, State) -&gt;
put_chars(unicode:characters_to_list(Chars,Encoding),State);
request({put_chars, Encoding, Module, Function, Args}, State) -&gt;
@@ -531,23 +587,22 @@ request({put_chars, Encoding, Module, Function, Args}, State) -&gt;
catch
_:_ -&gt;
{error, {error,Function}, State}
- end;
-</code>
+ end;</code>
-<p>The <c>Encoding</c> tells us how the characters in the request are
-represented. We want to store the characters as lists in the
-ETS table, so we convert them to lists using the
-<seealso marker="stdlib:unicode#characters_to_list/2"><c>unicode:characters_to_list/2</c></seealso> function. The conversion function
-conveniently accepts the encoding types <c>unicode</c> or <c>latin1</c>, so we can
-use <c>Encoding</c> directly.</p>
+ <p>The <c>Encoding</c> says how the characters in the request are
+ represented. We want to store the characters as lists in the ETS
+ table, so we convert them to lists using function
+ <seealso marker="stdlib:unicode#characters_to_list/2"><c>unicode:characters_to_list/2</c></seealso>.
+ The conversion function conveniently accepts the encoding types
+ <c>unicode</c> and <c>latin1</c>, so we can use <c>Encoding</c> directly.</p>
-<p>When <c>Module</c>, <c>Function</c> and <c>Arguments</c> are provided, we simply apply it
-and do the same thing with the result as if the data was provided
-directly.</p>
+ <p>When <c>Module</c>, <c>Function</c>, and <c>Arguments</c> are provided,
+ we apply it and do the same with the result as if the data was provided
+ directly.</p>
-<p>Let us handle the requests for retrieving data too:</p>
+ <p>We handle the requests for retrieving data:</p>
-<code>
+ <code>
request({get_until, Encoding, _Prompt, M, F, As}, State) -&gt;
get_until(Encoding, M, F, As, State);
request({get_chars, Encoding, _Prompt, N}, State) -&gt;
@@ -555,17 +610,16 @@ request({get_chars, Encoding, _Prompt, N}, State) -&gt;
get_until(Encoding, ?MODULE, until_enough, [N], State);
request({get_line, Encoding, _Prompt}, State) -&gt;
%% To simplify the code, get_line is implemented using get_until
- get_until(Encoding, ?MODULE, until_newline, [$\n], State);
-</code>
+ get_until(Encoding, ?MODULE, until_newline, [$\n], State);</code>
-<p>Here we have cheated a little by more or less only implementing
-<c>get_until</c> and using internal helpers to implement <c>get_chars</c> and
-<c>get_line</c>. In production code, this might be too inefficient, but that
-of course depends on the frequency of the different requests. Before
-we start actually implementing the functions <c>put_chars/2</c> and
-<c>get_until/5</c>, let us look into the few remaining requests:</p>
+ <p>Here we have cheated a little by more or less only implementing
+ <c>get_until</c> and using internal helpers to implement <c>get_chars</c>
+ and <c>get_line</c>. In production code, this can be inefficient, but
+ that depends on the frequency of the different requests. Before we start
+ implementing functions <c>put_chars/2</c> and <c>get_until/5</c>, we
+ examine the few remaining requests:</p>
-<code>
+ <code>
request({get_geometry,_}, State) -&gt;
{error, {error,enotsup}, State};
request({setopts, Opts}, State) -&gt;
@@ -573,23 +627,23 @@ request({setopts, Opts}, State) -&gt;
request(getopts, State) -&gt;
getopts(State);
request({requests, Reqs}, State) -&gt;
- multi_request(Reqs, {ok, ok, State});
-</code>
+ multi_request(Reqs, {ok, ok, State});</code>
-<p>The <c>get_geometry</c> request has no meaning for this I/O server, so the
-reply will be <c>{error, enotsup}</c>. The only option we handle is the
-<c>binary</c>/<c>list</c> option, which is done in separate functions.</p>
+ <p>Request <c>get_geometry</c> has no meaning for this I/O server, so the
+ reply is <c>{error, enotsup}</c>. The only option we handle is
+ <c>binary</c>/<c>list</c>, which is done in separate functions.</p>
-<p>The multi-request tag (<c>requests</c>) is handled in a separate loop
-function applying the requests in the list one after another,
-returning the last result.</p>
+ <p>The multi-request tag (<c>requests</c>) is handled in a separate loop
+ function applying the requests in the list one after another, returning
+ the last result.</p>
-<p>What is left is to handle backward compatibility and the <seealso marker="kernel:file">file</seealso> module
-(which uses the old requests until backward compatibility with pre-R13
-nodes is no longer needed). Note that the I/O server will not work with
-a simple <c>file:write/2</c> if these are not added:</p>
+ <p>We need to handle backward compatibility and the
+ <seealso marker="kernel:file"><c>file</c></seealso> module (which
+ uses the old requests until backward compatibility with pre-R13 nodes is
+ no longer needed). Notice that the I/O server does not work with a simple
+ <c>file:write/2</c> if these are not added:</p>
-<code>
+ <code>
request({put_chars,Chars}, State) -&gt;
request({put_chars,latin1,Chars}, State);
request({put_chars,M,F,As}, State) -&gt;
@@ -599,38 +653,35 @@ request({get_chars,Prompt,N}, State) -&gt;
request({get_line,Prompt}, State) -&gt;
request({get_line,latin1,Prompt}, State);
request({get_until, Prompt,M,F,As}, State) -&gt;
- request({get_until,latin1,Prompt,M,F,As}, State);
-</code>
+ request({get_until,latin1,Prompt,M,F,As}, State);</code>
-<p>OK, what is left now is to return <c>{error, request}</c> if the request is
-not recognized:</p>
+ <p><c>{error, request}</c> must be returned if the request is not
+ recognized:</p>
-<code>
+ <code>
request(_Other, State) -&gt;
- {error, {error, request}, State}.
-</code>
+ {error, {error, request}, State}.</code>
-<p>Let us move further and actually handle the different requests, first
-the fairly generic multi-request type:</p>
+ <p>Next we handle the different requests, first the fairly generic
+ multi-request type:</p>
-<code>
+ <code>
multi_request([R|Rs], {ok, _Res, State}) -&gt;
multi_request(Rs, request(R, State));
multi_request([_|_], Error) -&gt;
Error;
multi_request([], Result) -&gt;
- Result.
-</code>
+ Result.</code>
-<p>We loop through the requests one at the time, stopping when we either
-encounter an error or the list is exhausted. The last return value is
-sent back to the client (it is first returned to the main loop and then
-sent back by the function <c>io_reply</c>).</p>
+ <p>We loop through the requests one at the time, stopping when we either
+ encounter an error or the list is exhausted. The last return value is
+ sent back to the client (it is first returned to the main loop and then
+ sent back by function <c>io_reply</c>).</p>
-<p>The <c>getopts</c> and <c>setopts</c> requests are also simple to handle, we just
-change or read our state record:</p>
+ <p>Requests <c>getopts</c> and <c>setopts</c> are also simple to handle.
+ We only change or read the state record:</p>
-<code>
+ <code>
setopts(Opts0,State) -&gt;
Opts = proplists:unfold(
proplists:substitute_negations(
@@ -662,46 +713,44 @@ getopts(#state{mode=M} = S) -&gt;
true;
_ -&gt;
false
- end}],S}.
-</code>
+ end}],S}.</code>
-<p>As a convention, all I/O servers handle both <c>{setopts, [binary]}</c>,
-<c>{setopts, [list]}</c> and <c>{setopts,[{binary, boolean()}]}</c>, hence the trick
-with <c>proplists:substitute_negations/2</c> and <c>proplists:unfold/1</c>. If
-invalid options are sent to us, we send <c>{error, enotsup}</c> back to the
-client.</p>
+ <p>As a convention, all I/O servers handle both <c>{setopts, [binary]}</c>,
+ <c>{setopts, [list]}</c>, and <c>{setopts,[{binary, boolean()}]}</c>,
+ hence the trick with <c>proplists:substitute_negations/2</c> and
+ <c>proplists:unfold/1</c>. If invalid options are sent to us, we send
+ <c>{error, enotsup}</c> back to the client.</p>
-<p>The <c>getopts</c> request should return a list of <c>{Option, Value}</c> tuples,
-which has the twofold function of providing both the current values
-and the available options of this I/O server. We have only one option,
-and hence return that.</p>
+ <p>Request <c>getopts</c> is to return a list of <c>{Option, Value}</c>
+ tuples. This has the twofold function of providing both the current values
+ and the available options of this I/O server. We have only one option, and
+ hence return that.</p>
-<p>So far our I/O server has been fairly generic (except for the <c>rewind</c>
-request handled in the main loop and the creation of an ETS table).
-Most I/O servers contain code similar to the one above.</p>
+ <p>So far this I/O server is fairly generic (except for request
+ <c>rewind</c> handled in the main loop and the creation of an ETS
+ table). Most I/O servers contain code similar to this one.</p>
-<p>To make the example runnable, we now start implementing the actual
-reading and writing of the data to/from the ETS table. First the
-<c>put_chars/3</c> function:</p>
+ <p>To make the example runnable, we start implementing the reading and
+ writing of the data to/from the ETS table. First function
+ <c>put_chars/3</c>:</p>
-<code>
+ <code>
put_chars(Chars, #state{table = T, position = P} = State) -&gt;
R = P div ?CHARS_PER_REC,
C = P rem ?CHARS_PER_REC,
[ apply_update(T,U) || U &lt;- split_data(Chars, R, C) ],
- {ok, ok, State#state{position = (P + length(Chars))}}.
-</code>
+ {ok, ok, State#state{position = (P + length(Chars))}}.</code>
-<p>We already have the data as (Unicode) lists and therefore just split
-the list in runs of a predefined size and put each run in the
-table at the current position (and forward). The functions
-<c>split_data/3</c> and <c>apply_update/2</c> are implemented below.</p>
+ <p>We already have the data as (Unicode) lists and therefore only split
+ the list in runs of a predefined size and put each run in the table at
+ the current position (and forward). Functions <c>split_data/3</c> and
+ <c>apply_update/2</c> are implemented below.</p>
-<p>Now we want to read data from the table. The <c>get_until/5</c> function reads
-data and applies the function until it says it is done. The result is
-sent back to the client:</p>
+ <p>Now we want to read data from the table. Function <c>get_until/5</c>
+ reads data and applies the function until it says that it is done. The
+ result is sent back to the client:</p>
-<code>
+ <code>
get_until(Encoding, Mod, Func, As,
#state{position = P, mode = M, table = T} = State) -&gt;
case get_loop(Mod,Func,As,T,P,[]) of
@@ -737,34 +786,34 @@ get_loop(M,F,A,T,P,C) -&gt;
get_loop(M,F,A,T,NewP,NewC);
_ -&gt;
{error,F}
- end.
-</code>
-
-<p>Here we also handle the mode (<c>binary</c> or <c>list</c>) that can be set by
-the <c>setopts</c> request. By default, all OTP I/O servers send data back to
-the client as lists, but switching mode to <c>binary</c> might increase
-efficiency if the I/O server handles it in an appropriate way. The
-implementation of <c>get_until</c> is hard to get efficient as the supplied
-function is defined to take lists as arguments, but <c>get_chars</c> and
-<c>get_line</c> can be optimized for binary mode. This example does not
-optimize anything however. It is important though that the returned
-data is of the right type depending on the options set, so we convert
-the lists to binaries in the correct encoding <em>if possible</em>
-before returning. The function supplied in the <c>get_until</c> request tuple may,
-as its final result return anything, so only functions actually
-returning lists can get them converted to binaries. If the request
-contained the encoding tag <c>unicode</c>, the lists can contain all Unicode
-codepoints and the binaries should be in UTF-8, if the encoding tag
-was <c>latin1</c>, the client should only get characters in the range
-0..255. The function <c>check/2</c> takes care of not returning arbitrary
-Unicode codepoints in lists if the encoding was given as <c>latin1</c>. If
-the function did not return a list, the check cannot be performed and
-the result will be that of the supplied function untouched.</p>
-
-<p>Now we are more or less done. We implement the utility functions below
-to actually manipulate the table:</p>
-
-<code>
+ end.</code>
+
+ <p>Here we also handle the mode (<c>binary</c> or <c>list</c>) that can be
+ set by request <c>setopts</c>. By default, all OTP I/O servers send data
+ back to the client as lists, but switching mode to <c>binary</c> can
+ increase efficiency if the I/O server handles it in an appropriate way.
+ The implementation of <c>get_until</c> is difficult to get efficient, as
+ the supplied function is defined to take lists as arguments, but
+ <c>get_chars</c> and <c>get_line</c> can be optimized for binary mode.
+ However, this example does not optimize anything.</p>
+
+ <p>It is important though that the returned data is of the correct type
+ depending on the options set. We therefore convert the lists to binaries
+ in the correct encoding <em>if possible</em> before returning. The
+ function supplied in the <c>get_until</c> request tuple can, as its final
+ result return anything, so only functions returning lists can get them
+ converted to binaries. If the request contains encoding tag
+ <c>unicode</c>, the lists can contain all Unicode code points and the
+ binaries are to be in UTF-8. If the encoding tag is <c>latin1</c>, the
+ client is only to get characters in the range <c>0..255</c>. Function
+ <c>check/2</c> takes care of not returning arbitrary Unicode code points
+ in lists if the encoding was specified as <c>latin1</c>. If the function
+ does not return a list, the check cannot be performed and the result is
+ that of the supplied function untouched.</p>
+
+ <p>To manipulate the table we implement the following utility functions:</p>
+
+ <code>
check(unicode, List) -&gt;
List;
check(latin1, List) -&gt;
@@ -775,18 +824,16 @@ check(latin1, List) -&gt;
catch
throw:_ -&gt;
{error,{cannot_convert, unicode, latin1}}
- end.
-</code>
+ end.</code>
-<p>The function check takes care of providing an error tuple if Unicode
-codepoints above 255 is to be returned if the client requested
-latin1.</p>
+ <p>The function check provides an error tuple if Unicode code points &gt;
+ 255 are to be returned if the client requested <c>latin1</c>.</p>
-<p>The two functions <c>until_newline/3</c> and <c>until_enough/3</c> are helpers used
-together with the <c>get_until/5</c> function to implement <c>get_chars</c> and
-<c>get_line</c> (inefficiently):</p>
-
-<code>
+ <p>The two functions <c>until_newline/3</c> and <c>until_enough/3</c> are
+ helpers used together with function <c>get_until/5</c> to implement
+ <c>get_chars</c> and <c>get_line</c> (inefficiently):</p>
+
+ <code>
until_newline([],eof,_MyStopCharacter) -&gt;
{done,eof,[]};
until_newline(ThisFar,eof,_MyStopCharacter) -&gt;
@@ -810,16 +857,15 @@ until_enough(ThisFar,CharList,N)
{Res,Rest} = my_split(N,ThisFar ++ CharList, []),
{done,Res,Rest};
until_enough(ThisFar,CharList,_N) -&gt;
- {more,ThisFar++CharList}.
-</code>
+ {more,ThisFar++CharList}.</code>
-<p>As can be seen, the functions above are just the type of functions
-that should be provided in <c>get_until</c> requests.</p>
+ <p>As can be seen, the functions above are just the type of functions that
+ are to be provided in <c>get_until</c> requests.</p>
-<p>Now we only need to read and write the table in an appropriate way to
-complete the I/O server:</p>
+ <p>To complete the I/O server, we only need to read and write the table in
+ an appropriate way:</p>
-<code>
+ <code>
get(P,Tab) -&gt;
R = P div ?CHARS_PER_REC,
C = P rem ?CHARS_PER_REC,
@@ -856,18 +902,16 @@ apply_update(Table, {Row, Col, List}) -&gt;
{Part1,_} = my_split(Col,OldData,[]),
{_,Part2} = my_split(Col+length(List),OldData,[]),
ets:insert(Table,{Row, Part1 ++ List ++ Part2})
- end.
-</code>
-
-<p>The table is read or written in chunks of <c>?CHARS_PER_REC</c>, overwriting
-when necessary. The implementation is obviously not efficient, it is
-just working.</p>
-
-<p>This concludes the example. It is fully runnable and you can read or
-write to the I/O server by using i.e. the <seealso marker="stdlib:io">io</seealso> module or even the <seealso marker="kernel:file">file</seealso>
-module. It is as simple as that to implement a fully fledged I/O server
-in Erlang.</p>
-</section>
+ end.</code>
+
+ <p>The table is read or written in chunks of <c>?CHARS_PER_REC</c>,
+ overwriting when necessary. The implementation is clearly not efficient,
+ it is just working.</p>
+
+ <p>This concludes the example. It is fully runnable and you can read or
+ write to the I/O server by using, for example, the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module or even the
+ <seealso marker="kernel:file"><c>file</c></seealso> module. It is
+ as simple as that to implement a fully fledged I/O server in Erlang.</p>
+ </section>
</chapter>
-
-
diff --git a/lib/stdlib/doc/src/lib.xml b/lib/stdlib/doc/src/lib.xml
index f4dddf646d..58dad7c9e0 100644
--- a/lib/stdlib/doc/src/lib.xml
+++ b/lib/stdlib/doc/src/lib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,68 +29,73 @@
<rev></rev>
</header>
<module>lib</module>
- <modulesummary>A number of useful library functions</modulesummary>
+ <modulesummary>Useful library functions.</modulesummary>
<description>
<warning>
- <p>This module is retained for compatibility. It may disappear
- without warning in a future release.</p>
+ <p>This module is retained for backward compatibility. It can disappear
+ without warning in a future Erlang/OTP release.</p>
</warning>
</description>
+
<funcs>
<func>
- <name name="flush_receive" arity="0"/>
- <fsummary>Flush messages</fsummary>
- <desc>
- <p>Flushes the message buffer of the current process.</p>
- </desc>
- </func>
- <func>
<name name="error_message" arity="2"/>
- <fsummary>Print error message</fsummary>
+ <fsummary>Print error message.</fsummary>
<desc>
<p>Prints error message <c><anno>Args</anno></c> in accordance with
- <c><anno>Format</anno></c>. Similar to <c>io:format/2</c>, see
- <seealso marker="io#fwrite/1">io(3)</seealso>.</p>
+ <c><anno>Format</anno></c>. Similar to
+ <seealso marker="io#format/1"><c>io:format/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="progname" arity="0"/>
- <fsummary>Return name of Erlang start script</fsummary>
+ <name name="flush_receive" arity="0"/>
+ <fsummary>Flush messages.</fsummary>
<desc>
- <p>Returns the name of the script that started the current
- Erlang session.</p>
+ <p>Flushes the message buffer of the current process.</p>
</desc>
</func>
+
<func>
<name name="nonl" arity="1"/>
- <fsummary>Remove last newline</fsummary>
+ <fsummary>Remove last newline.</fsummary>
<desc>
<p>Removes the last newline character, if any, in
<c><anno>String1</anno></c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="progname" arity="0"/>
+ <fsummary>Return name of Erlang start script.</fsummary>
+ <desc>
+ <p>Returns the name of the script that started the current
+ Erlang session.</p>
+ </desc>
+ </func>
+
<func>
<name name="send" arity="2"/>
- <fsummary>Send a message</fsummary>
+ <fsummary>Send a message.</fsummary>
<desc>
- <p>This function to makes it possible to send a message using
- the <c>apply/3</c> BIF.</p>
+ <p>Makes it possible to send a message using the <c>apply/3</c> BIF.</p>
</desc>
</func>
+
<func>
<name name="sendw" arity="2"/>
- <fsummary>Send a message and wait for an answer</fsummary>
+ <fsummary>Send a message and wait for an answer.</fsummary>
<desc>
- <p>As <c>send/2</c>, but waits for an answer. It is implemented
- as follows:</p>
+ <p>As <seealso marker="#send/2"><c>send/2</c></seealso>,
+ but waits for an answer. It is implemented as follows:</p>
<code type="none">
sendw(To, Msg) ->
To ! {self(),Msg},
receive
Reply -> Reply
end.</code>
- <p>The message returned is not necessarily a reply to the
- message sent.</p>
+ <p>The returned message is not necessarily a reply to the sent
+ message.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/lists.xml b/lib/stdlib/doc/src/lists.xml
index 89ba5238b5..60dbae70c2 100644
--- a/lib/stdlib/doc/src/lists.xml
+++ b/lib/stdlib/doc/src/lists.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -25,11 +25,11 @@
<title>lists</title>
<prepared>Robert Virding</prepared>
<docno>1</docno>
- <date>96-09-28</date>
+ <date>1996-09-28</date>
<rev>A</rev>
</header>
<module>lists</module>
- <modulesummary>List Processing Functions</modulesummary>
+ <modulesummary>List processing functions.</modulesummary>
<description>
<p>This module contains functions for list processing.</p>
@@ -44,132 +44,156 @@
<p>Whenever an <marker
id="ordering_function"></marker><em>ordering function</em>
<c>F</c> is expected as argument, it is assumed that the
- following properties hold of <c>F</c> for all x, y and z:</p>
+ following properties hold of <c>F</c> for all x, y, and z:</p>
+
<list type="bulleted">
- <item><p>if x <c>F</c> y and y <c>F</c> x then x = y (<c>F</c>
- is antisymmetric);</p>
+ <item><p>If x <c>F</c> y and y <c>F</c> x, then x = y (<c>F</c>
+ is antisymmetric).</p>
</item>
- <item><p>if x <c>F</c> y and y <c>F</c> z then x <c>F</c> z
- (<c>F</c> is transitive);</p>
+ <item><p>If x <c>F</c> y and y <c>F</c> z, then x <c>F</c> z
+ (<c>F</c> is transitive).</p>
</item>
<item><p>x <c>F</c> y or y <c>F</c> x (<c>F</c> is total).</p>
</item>
</list>
- <p>An example of a typical ordering function is less than or equal
- to, <c>=&lt;/2</c>.</p>
+ <p>An example of a typical ordering function is less than or equal
+ to: <c>=&lt;/2</c>.</p>
</description>
+
<funcs>
<func>
<name name="all" arity="2"/>
- <fsummary>Return true if all elements in the list satisfy<c>Pred</c></fsummary>
+ <fsummary>Return <c>true</c> if all elements in a list satisfy
+ <c>Pred</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns
- <c>true</c> for all elements <c><anno>Elem</anno></c> in <c><anno>List</anno></c>,
- otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Pred</anno>(<anno>Elem</anno>)</c>
+ returns <c>true</c> for all elements <c><anno>Elem</anno></c> in
+ <c><anno>List</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="any" arity="2"/>
- <fsummary>Return true if any of the elements in the list satisfies<c>Pred</c></fsummary>
+ <fsummary>Return <c>true</c> if any of the elements in a list
+ satisfies <c>Pred</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns
- <c>true</c> for at least one element <c><anno>Elem</anno></c> in
- <c><anno>List</anno></c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Pred</anno>(<anno>Elem</anno>)</c>
+ returns <c>true</c> for at least one element <c><anno>Elem</anno></c>
+ in <c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="append" arity="1"/>
- <fsummary>Append a list of lists</fsummary>
+ <fsummary>Append a list of lists.</fsummary>
<desc>
- <p>Returns a list in which all the sub-lists of
- <c><anno>ListOfLists</anno></c> have been appended. For example:</p>
+ <p>Returns a list in which all the sublists of
+ <c><anno>ListOfLists</anno></c> have been appended.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:append([[1, 2, 3], [a, b], [4, 5, 6]]).</input>
[1,2,3,a,b,4,5,6]</pre>
</desc>
</func>
+
<func>
<name name="append" arity="2"/>
- <fsummary>Append two lists</fsummary>
+ <fsummary>Append two lists.</fsummary>
<desc>
- <p>Returns a new list <c><anno>List3</anno></c> which is made from
+ <p>Returns a new list <c><anno>List3</anno></c>, which is made from
the elements of <c><anno>List1</anno></c> followed by the elements of
- <c><anno>List2</anno></c>. For example:</p>
+ <c><anno>List2</anno></c>.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:append("abc", "def").</input>
"abcdef"</pre>
<p><c>lists:append(A, B)</c> is equivalent to <c>A ++ B</c>.</p>
</desc>
</func>
+
<func>
<name name="concat" arity="1"/>
- <fsummary>Concatenate a list of atoms</fsummary>
+ <fsummary>Concatenate a list of atoms.</fsummary>
<desc>
- <p>Concatenates the text representation of the elements
- of <c><anno>Things</anno></c>. The elements of <c><anno>Things</anno></c> can be atoms,
- integers, floats or strings.</p>
+ <p>Concatenates the text representation of the elements of
+ <c><anno>Things</anno></c>. The elements of <c><anno>Things</anno></c>
+ can be atoms, integers, floats, or strings.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:concat([doc, '/', file, '.', 3]).</input>
"doc/file.3"</pre>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Delete an element from a list</fsummary>
+ <fsummary>Delete an element from a list.</fsummary>
<desc>
<p>Returns a copy of <c><anno>List1</anno></c> where the first element
matching <c><anno>Elem</anno></c> is deleted, if there is such an
element.</p>
</desc>
</func>
+
<func>
<name name="droplast" arity="1"/>
- <fsummary>Drop the last element of a list</fsummary>
+ <fsummary>Drop the last element of a list.</fsummary>
<desc>
- <p>Drops the last element of a <c><anno>List</anno></c>. The list should
- be non-empty, otherwise the function will crash with a <c>function_clause</c></p>
+ <p>Drops the last element of a <c><anno>List</anno></c>. The list is to
+ be non-empty, otherwise the function crashes with a
+ <c>function_clause</c>.</p>
</desc>
</func>
+
<func>
<name name="dropwhile" arity="2"/>
- <fsummary>Drop elements from a list while a predicate is true</fsummary>
+ <fsummary>Drop elements from a list while a predicate is <c>true</c>.
+ </fsummary>
<desc>
- <p>Drops elements <c><anno>Elem</anno></c> from <c><anno>List1</anno></c> while
- <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c> and returns
- the remaining list.</p>
+ <p>Drops elements <c><anno>Elem</anno></c> from
+ <c><anno>List1</anno></c> while
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c> and
+ returns the remaining list.</p>
</desc>
</func>
+
<func>
<name name="duplicate" arity="2"/>
- <fsummary>Make N copies of element</fsummary>
+ <fsummary>Make <c>N</c> copies of element.</fsummary>
<desc>
- <p>Returns a list which contains <c><anno>N</anno></c> copies of the term
- <c><anno>Elem</anno></c>. For example:</p>
+ <p>Returns a list containing <c><anno>N</anno></c> copies of term
+ <c><anno>Elem</anno></c>.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:duplicate(5, xx).</input>
[xx,xx,xx,xx,xx]</pre>
</desc>
</func>
+
<func>
<name name="filter" arity="2"/>
- <fsummary>Choose elements which satisfy a predicate</fsummary>
+ <fsummary>Select elements that satisfy a predicate.</fsummary>
<desc>
- <p><c><anno>List2</anno></c> is a list of all elements <c><anno>Elem</anno></c> in
- <c><anno>List1</anno></c> for which <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns
- <c>true</c>.</p>
+ <p><c><anno>List2</anno></c> is a list of all elements
+ <c><anno>Elem</anno></c> in <c><anno>List1</anno></c> for which
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c>.</p>
</desc>
</func>
+
<func>
<name name="filtermap" arity="2"/>
- <fsummary>Filter and map elements which satisfy a function</fsummary>
- <desc>
- <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>)</c> on successive elements <c>Elem</c>
- of <c><anno>List1</anno></c>. <c><anno>Fun</anno>/2</c> must return either a boolean
- or a tuple <c>{true, <anno>Value</anno>}</c>. The function returns the list of elements
- for which <c><anno>Fun</anno></c> returns a new value, where a value of <c>true</c>
- is synonymous with <c>{true, <anno>Elem</anno>}</c>.</p>
- <p>That is, <c>filtermap</c> behaves as if it had been defined as follows:</p>
+ <fsummary>Filter and map elements that satisfy a function.</fsummary>
+ <desc>
+ <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>)</c> on successive
+ elements <c>Elem</c> of <c><anno>List1</anno></c>.
+ <c><anno>Fun</anno>/2</c> must return either a Boolean or a tuple
+ <c>{true, <anno>Value</anno>}</c>. The function returns the list of
+ elements for which <c><anno>Fun</anno></c> returns a new value, where
+ a value of <c>true</c> is synonymous with
+ <c>{true, <anno>Elem</anno>}</c>.</p>
+ <p>That is, <c>filtermap</c> behaves as if it had been defined as
+ follows:</p>
<code type="none">
filtermap(Fun, List1) ->
lists:foldr(fun(Elem, Acc) ->
@@ -179,26 +203,29 @@ filtermap(Fun, List1) ->
{true,Value} -> [Value|Acc]
end
end, [], List1).</code>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:filtermap(fun(X) -> case X rem 2 of 0 -> {true, X div 2}; _ -> false end end, [1,2,3,4,5]).</input>
[1,2]</pre>
</desc>
</func>
+
<func>
<name name="flatlength" arity="1"/>
- <fsummary>Length of flattened deep list</fsummary>
+ <fsummary>Length of flattened deep list.</fsummary>
<desc>
- <p>Equivalent to <c>length(flatten(<anno>DeepList</anno>))</c>, but more
- efficient.</p>
+ <p>Equivalent to <c>length(flatten(<anno>DeepList</anno>))</c>, but
+ more efficient.</p>
</desc>
</func>
+
<func>
<name name="flatmap" arity="2"/>
- <fsummary>Map and flatten in one pass</fsummary>
+ <fsummary>Map and flatten in one pass.</fsummary>
<desc>
- <p>Takes a function from <c><anno>A</anno></c>s to lists of <c><anno>B</anno></c>s, and a
- list of <c><anno>A</anno></c>s (<c><anno>List1</anno></c>) and produces a list of
+ <p>Takes a function from <c><anno>A</anno></c>s to lists of
+ <c><anno>B</anno></c>s, and a list of <c><anno>A</anno></c>s
+ (<c><anno>List1</anno></c>) and produces a list of
<c><anno>B</anno></c>s by applying the function to every element in
<c><anno>List1</anno></c> and appending the resulting lists.</p>
<p>That is, <c>flatmap</c> behaves as if it had been defined as
@@ -206,37 +233,42 @@ filtermap(Fun, List1) ->
<code type="none">
flatmap(Fun, List1) ->
append(map(Fun, List1)).</code>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:flatmap(fun(X)->[X,X] end, [a,b,c]).</input>
[a,a,b,b,c,c]</pre>
</desc>
</func>
+
<func>
<name name="flatten" arity="1"/>
- <fsummary>Flatten a deep list</fsummary>
+ <fsummary>Flatten a deep list.</fsummary>
<desc>
<p>Returns a flattened version of <c><anno>DeepList</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="flatten" arity="2"/>
- <fsummary>Flatten a deep list</fsummary>
+ <fsummary>Flatten a deep list.</fsummary>
<desc>
- <p>Returns a flattened version of <c><anno>DeepList</anno></c> with the tail
+ <p>Returns a flattened version of <c><anno>DeepList</anno></c> with tail
<c><anno>Tail</anno></c> appended.</p>
</desc>
</func>
+
<func>
<name name="foldl" arity="3"/>
- <fsummary>Fold a function over a list</fsummary>
- <desc>
- <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>, <anno>AccIn</anno>)</c> on successive elements <c>A</c>
- of <c><anno>List</anno></c>, starting with <c><anno>AccIn</anno> == <anno>Acc0</anno></c>.
- <c><anno>Fun</anno>/2</c> must return a new accumulator which is passed to
- the next call. The function returns the final value of
- the accumulator. <c><anno>Acc0</anno></c> is returned if the list is empty.
- For example:</p>
+ <fsummary>Fold a function over a list.</fsummary>
+ <desc>
+ <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>, <anno>AccIn</anno>)</c>
+ on successive elements <c>A</c> of <c><anno>List</anno></c>, starting
+ with <c><anno>AccIn</anno> == <anno>Acc0</anno></c>.
+ <c><anno>Fun</anno>/2</c> must return a new accumulator, which is
+ passed to the next call. The function returns the final value of
+ the accumulator. <c><anno>Acc0</anno></c> is returned if the list is
+ empty.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).</input>
15
@@ -244,12 +276,14 @@ flatmap(Fun, List1) ->
120</pre>
</desc>
</func>
+
<func>
<name name="foldr" arity="3"/>
- <fsummary>Fold a function over a list</fsummary>
+ <fsummary>Fold a function over a list.</fsummary>
<desc>
- <p>Like <c>foldl/3</c>, but the list is traversed from right to
- left. For example:</p>
+ <p>Like <seealso marker="#foldl/3"><c>foldl/3</c></seealso>, but the
+ list is traversed from right to left.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>P = fun(A, AccIn) -> io:format("~p ", [A]), AccIn end.</input>
#Fun&lt;erl_eval.12.2225172&gt;
@@ -257,51 +291,74 @@ flatmap(Fun, List1) ->
1 2 3 void
> <input>lists:foldr(P, void, [1,2,3]).</input>
3 2 1 void</pre>
- <p><c>foldl/3</c> is tail recursive and would usually be
- preferred to <c>foldr/3</c>.</p>
+ <p><c>foldl/3</c> is tail recursive and is usually preferred to
+ <c>foldr/3</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="join" arity="2"/>
+ <fsummary>Insert an element between elements in a list</fsummary>
+ <desc>
+ <p>Inserts <c><anno>Sep</anno></c> between each element in <c><anno>List1</anno></c>. Has no
+ effect on the empty list and on a singleton list. For example:</p>
+ <pre>
+> <input>lists:join(x, [a,b,c]).</input>
+[a,x,b,x,c]
+> <input>lists:join(x, [a]).</input>
+[a]
+> <input>lists:join(x, []).</input>
+[]</pre>
</desc>
</func>
<func>
<name name="foreach" arity="2"/>
- <fsummary>Apply a function to each element of a list</fsummary>
+ <fsummary>Apply a function to each element of a list.</fsummary>
<desc>
- <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>)</c> for each element <c><anno>Elem</anno></c> in
- <c><anno>List</anno></c>. This function is used for its side effects and
+ <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>)</c> for each element
+ <c><anno>Elem</anno></c> in <c><anno>List</anno></c>. This function
+ is used for its side effects and
the evaluation order is defined to be the same as the order
of the elements in the list.</p>
</desc>
</func>
+
<func>
<name name="keydelete" arity="3"/>
- <fsummary>Delete an element from a list of tuples</fsummary>
+ <fsummary>Delete an element from a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns a copy of <c><anno>TupleList1</anno></c> where the first
- occurrence of a tuple whose <c><anno>N</anno></c>th element compares equal to
+ occurrence of a tuple whose <c><anno>N</anno></c>th element compares
+ equal to
<c><anno>Key</anno></c> is deleted, if there is such a tuple.</p>
</desc>
</func>
+
<func>
<name name="keyfind" arity="3"/>
- <fsummary>Search for an element in a list of tuples</fsummary>
+ <fsummary>Search for an element in a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Searches the list of tuples <c><anno>TupleList</anno></c> for a
- tuple whose <c><anno>N</anno></c>th element compares equal to <c><anno>Key</anno></c>.
+ tuple whose <c><anno>N</anno></c>th element compares equal to
+ <c><anno>Key</anno></c>.
Returns <c><anno>Tuple</anno></c> if such a tuple is found,
otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="keymap" arity="3"/>
- <fsummary>Map a function over a list of tuples</fsummary>
+ <fsummary>Map a function over a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns a list of tuples where, for each tuple in
- <c><anno>TupleList1</anno></c>, the <c><anno>N</anno></c>th element <c><anno>Term1</anno></c> of the tuple
+ <c><anno>TupleList1</anno></c>, the <c><anno>N</anno></c>th element
+ <c><anno>Term1</anno></c> of the tuple
has been replaced with the result of calling
<c><anno>Fun</anno>(<anno>Term1</anno>)</c>.</p>
- <p>Examples:</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>Fun = fun(Atom) -> atom_to_list(Atom) end.</input>
#Fun&lt;erl_eval.6.10732646&gt;
@@ -309,33 +366,37 @@ flatmap(Fun, List1) ->
[{name,"jane",22},{name,"lizzie",20},{name,"lydia",15}]</pre>
</desc>
</func>
+
<func>
<name name="keymember" arity="3"/>
- <fsummary>Test for membership of a list of tuples</fsummary>
+ <fsummary>Test for membership of a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns <c>true</c> if there is a tuple in <c><anno>TupleList</anno></c>
- whose <c><anno>N</anno></c>th element compares equal to <c><anno>Key</anno></c>, otherwise
- <c>false</c>.</p>
+ <p>Returns <c>true</c> if there is a tuple in
+ <c><anno>TupleList</anno></c> whose <c><anno>N</anno></c>th element
+ compares equal to <c><anno>Key</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="keymerge" arity="3"/>
- <fsummary>Merge two key-sorted lists of tuples</fsummary>
+ <fsummary>Merge two key-sorted lists of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>TupleList1</anno></c>
- and <c><anno>TupleList2</anno></c>. The merge is performed on
- the <c><anno>N</anno></c>th element of each tuple. Both <c><anno>TupleList1</anno></c> and
- <c><anno>TupleList2</anno></c> must be key-sorted prior to evaluating this
- function. When two tuples compare equal, the tuple from
+ <p>Returns the sorted list formed by merging
+ <c><anno>TupleList1</anno></c> and <c><anno>TupleList2</anno></c>.
+ The merge is performed on the <c><anno>N</anno></c>th element of each
+ tuple. Both <c><anno>TupleList1</anno></c> and
+ <c><anno>TupleList2</anno></c> must be key-sorted before evaluating
+ this function. When two tuples compare equal, the tuple from
<c><anno>TupleList1</anno></c> is picked before the tuple from
<c><anno>TupleList2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="keyreplace" arity="4"/>
- <fsummary>Replace an element in a list of tuples</fsummary>
+ <fsummary>Replace an element in a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns a copy of <c><anno>TupleList1</anno></c> where the first
@@ -344,193 +405,226 @@ flatmap(Fun, List1) ->
<c><anno>NewTuple</anno></c>, if there is such a tuple <c>T</c>.</p>
</desc>
</func>
+
<func>
<name name="keysearch" arity="3"/>
- <fsummary>Search for an element in a list of tuples</fsummary>
+ <fsummary>Search for an element in a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Searches the list of tuples <c><anno>TupleList</anno></c> for a
- tuple whose <c><anno>N</anno></c>th element compares equal to <c><anno>Key</anno></c>.
+ tuple whose <c><anno>N</anno></c>th element compares equal to
+ <c><anno>Key</anno></c>.
Returns <c>{value, <anno>Tuple</anno>}</c> if such a tuple is found,
otherwise <c>false</c>.</p>
- <note><p>This function is retained for backward compatibility.
- The function <c>lists:keyfind/3</c> (introduced in R13A)
- is in most cases more convenient.</p></note>
+ <note>
+ <p>This function is retained for backward compatibility. Function
+ <seealso marker="#keyfind/3"><c>keyfind/3</c></seealso>
+ is usually more convenient.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="keysort" arity="2"/>
- <fsummary>Sort a list of tuples</fsummary>
+ <fsummary>Sort a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns a list containing the sorted elements of the list
- <c><anno>TupleList1</anno></c>. Sorting is performed on the <c><anno>N</anno></c>th
- element of the tuples. The sort is stable.</p>
+ <p>Returns a list containing the sorted elements of list
+ <c><anno>TupleList1</anno></c>. Sorting is performed on the
+ <c><anno>N</anno></c>th element of the tuples. The sort is stable.</p>
</desc>
</func>
+
<func>
<name name="keystore" arity="4"/>
- <fsummary>Store an element in a list of tuples</fsummary>
+ <fsummary>Store an element in a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns a copy of <c><anno>TupleList1</anno></c> where the first
occurrence of a tuple <c>T</c> whose <c><anno>N</anno></c>th element
compares equal to <c><anno>Key</anno></c> is replaced with
- <c><anno>NewTuple</anno></c>, if there is such a tuple <c>T</c>. If there
- is no such tuple <c>T</c> a copy of <c><anno>TupleList1</anno></c> where
+ <c><anno>NewTuple</anno></c>, if there is such a tuple <c>T</c>.
+ If there is no such tuple <c>T</c>, a copy of
+ <c><anno>TupleList1</anno></c> where
[<c><anno>NewTuple</anno></c>] has been appended to the end is
returned.</p>
</desc>
</func>
+
<func>
<name name="keytake" arity="3"/>
- <fsummary>Extract an element from a list of tuples</fsummary>
+ <fsummary>Extract an element from a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Searches the list of tuples <c><anno>TupleList1</anno></c> for a tuple
- whose <c><anno>N</anno></c>th element compares equal to <c><anno>Key</anno></c>.
- Returns <c>{value, <anno>Tuple</anno>, <anno>TupleList2</anno>}</c> if such a tuple is
- found, otherwise <c>false</c>. <c><anno>TupleList2</anno></c> is a copy
+ <p>Searches the list of tuples <c><anno>TupleList1</anno></c> for a
+ tuple whose <c><anno>N</anno></c>th element compares equal to
+ <c><anno>Key</anno></c>. Returns <c>{value, <anno>Tuple</anno>,
+ <anno>TupleList2</anno>}</c> if such a tuple is found, otherwise
+ <c>false</c>. <c><anno>TupleList2</anno></c> is a copy
of <c><anno>TupleList1</anno></c> where the first occurrence of
<c><anno>Tuple</anno></c> has been removed.</p>
</desc>
</func>
+
<func>
<name name="last" arity="1"/>
- <fsummary>Return last element in a list</fsummary>
+ <fsummary>Return last element in a list.</fsummary>
<desc>
<p>Returns the last element in <c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="map" arity="2"/>
- <fsummary>Map a function over a list</fsummary>
+ <fsummary>Map a function over a list.</fsummary>
<desc>
- <p>Takes a function from <c><anno>A</anno></c>s to <c><anno>B</anno></c>s, and a list of
- <c><anno>A</anno></c>s and produces a list of <c><anno>B</anno></c>s by applying
+ <p>Takes a function from <c><anno>A</anno></c>s to
+ <c><anno>B</anno></c>s, and a list of <c><anno>A</anno></c>s and
+ produces a list of <c><anno>B</anno></c>s by applying
the function to every element in the list. This function is
- used to obtain the return values. The evaluation order is
- implementation dependent.</p>
+ used to obtain the return values. The evaluation order depends on
+ the implementation.</p>
</desc>
</func>
+
<func>
<name name="mapfoldl" arity="3"/>
- <fsummary>Map and fold in one pass</fsummary>
+ <fsummary>Map and fold in one pass.</fsummary>
<desc>
- <p><c>mapfoldl</c> combines the operations of <c>map/2</c> and
- <c>foldl/3</c> into one pass. An example, summing
- the elements in a list and double them at the same time:</p>
+ <p>Combines the operations of
+ <seealso marker="#map/2"><c>map/2</c></seealso> and
+ <seealso marker="#foldl/3"><c>foldl/3</c></seealso> into one pass.</p>
+ <p><em>Example:</em></p>
+ <p>Summing the elements in a list and double them at the same time:</p>
<pre>
> <input>lists:mapfoldl(fun(X, Sum) -> {2*X, X+Sum} end,</input>
<input>0, [1,2,3,4,5]).</input>
{[2,4,6,8,10],15}</pre>
</desc>
</func>
+
<func>
<name name="mapfoldr" arity="3"/>
- <fsummary>Map and fold in one pass</fsummary>
+ <fsummary>Map and fold in one pass.</fsummary>
<desc>
- <p><c>mapfoldr</c> combines the operations of <c>map/2</c> and
- <c>foldr/3</c> into one pass.</p>
+ <p>Combines the operations of
+ <seealso marker="#map/2"><c>map/2</c></seealso> and
+ <seealso marker="#foldr/3"><c>foldr/3</c></seealso> into one pass.</p>
</desc>
</func>
+
<func>
<name name="max" arity="1"/>
- <fsummary>Return maximum element of a list</fsummary>
+ <fsummary>Return maximum element of a list.</fsummary>
<desc>
<p>Returns the first element of <c><anno>List</anno></c> that compares
greater than or equal to all other elements of
<c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="member" arity="2"/>
- <fsummary>Test for membership of a list</fsummary>
+ <fsummary>Test for membership of a list.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Elem</anno></c> matches some element of
- <c><anno>List</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Elem</anno></c> matches some element
+ of <c><anno>List</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="1"/>
- <fsummary>Merge a list of sorted lists</fsummary>
+ <fsummary>Merge a list of sorted lists.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging all the sub-lists
- of <c><anno>ListOfLists</anno></c>. All sub-lists must be sorted prior to
+ <p>Returns the sorted list formed by merging all the sublists of
+ <c><anno>ListOfLists</anno></c>. All sublists must be sorted before
evaluating this function. When two elements compare equal,
- the element from the sub-list with the lowest position in
- <c><anno>ListOfLists</anno></c> is picked before the other element.</p>
+ the element from the sublist with the lowest position in
+ <c><anno>ListOfLists</anno></c> is picked before the other
+ element.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="2"/>
- <fsummary>Merge two sorted lists</fsummary>
+ <fsummary>Merge two sorted lists.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>List1</anno></c> and
- <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and <c><anno>List2</anno></c> must be
- sorted prior to evaluating this function. When two elements
+ <p>Returns the sorted list formed by merging <c><anno>List1</anno></c>
+ and <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and
+ <c><anno>List2</anno></c> must be
+ sorted before evaluating this function. When two elements
compare equal, the element from <c><anno>List1</anno></c> is picked
before the element from <c><anno>List2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="3"/>
- <fsummary>Merge two sorted list</fsummary>
+ <fsummary>Merge two sorted list.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>List1</anno></c> and
- <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and <c><anno>List2</anno></c> must be
- sorted according to the <seealso
+ <p>Returns the sorted list formed by merging <c><anno>List1</anno></c>
+ and <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and
+ <c><anno>List2</anno></c> must be sorted according to the <seealso
marker="#ordering_function">ordering function</seealso>
- <c><anno>Fun</anno></c> prior to evaluating this function. <c><anno>Fun</anno>(<anno>A</anno>,
- <anno>B</anno>)</c> should return <c>true</c> if <c><anno>A</anno></c> compares less
- than or equal to <c><anno>B</anno></c> in the ordering, <c>false</c>
- otherwise. When two elements compare equal, the element from
+ <c><anno>Fun</anno></c> before evaluating this function.
+ <c><anno>Fun</anno>(<anno>A</anno>, <anno>B</anno>)</c> is to return
+ <c>true</c> if <c><anno>A</anno></c> compares less
+ than or equal to <c><anno>B</anno></c> in the ordering, otherwise
+ <c>false</c>. When two elements compare equal, the element from
<c><anno>List1</anno></c> is picked before the element from
<c><anno>List2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="merge3" arity="3"/>
- <fsummary>Merge three sorted lists</fsummary>
+ <fsummary>Merge three sorted lists.</fsummary>
<desc>
<p>Returns the sorted list formed by merging <c><anno>List1</anno></c>,
- <c><anno>List2</anno></c> and <c><anno>List3</anno></c>. All of <c><anno>List1</anno></c>,
- <c><anno>List2</anno></c> and <c><anno>List3</anno></c> must be sorted prior to
- evaluating this function. When two elements compare equal,
- the element from <c><anno>List1</anno></c>, if there is such an element,
+ <c><anno>List2</anno></c>, and <c><anno>List3</anno></c>. All of
+ <c><anno>List1</anno></c>, <c><anno>List2</anno></c>, and
+ <c><anno>List3</anno></c> must be sorted before evaluating this
+ function. When two elements compare equal, the element from
+ <c><anno>List1</anno></c>, if there is such an element,
is picked before the other element, otherwise the element
from <c><anno>List2</anno></c> is picked before the element from
<c><anno>List3</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="min" arity="1"/>
- <fsummary>Return minimum element of a list</fsummary>
+ <fsummary>Return minimum element of a list.</fsummary>
<desc>
<p>Returns the first element of <c><anno>List</anno></c> that compares
less than or equal to all other elements of
<c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="nth" arity="2"/>
- <fsummary>Return the Nth element of a list</fsummary>
+ <fsummary>Return the <c>N</c>th element of a list.</fsummary>
<type_desc variable="N">1..length(<anno>List</anno>)</type_desc>
<desc>
- <p>Returns the <c><anno>N</anno></c>th element of <c><anno>List</anno></c>. For example:</p>
+ <p>Returns the <c><anno>N</anno></c>th element of
+ <c><anno>List</anno></c>.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:nth(3, [a, b, c, d, e]).</input>
c</pre>
</desc>
</func>
+
<func>
<name name="nthtail" arity="2"/>
- <fsummary>Return the Nth tail of a list</fsummary>
+ <fsummary>Return the <c>N</c>th tail of a list.</fsummary>
<type_desc variable="N">0..length(<anno>List</anno>)</type_desc>
<desc>
- <p>Returns the <c><anno>N</anno></c>th tail of <c><anno>List</anno></c>, that is, the sublist of
- <c><anno>List</anno></c> starting at <c><anno>N</anno>+1</c> and continuing up to
- the end of the list. For example:</p>
+ <p>Returns the <c><anno>N</anno></c>th tail of <c><anno>List</anno></c>,
+ that is, the sublist of <c><anno>List</anno></c> starting at
+ <c><anno>N</anno>+1</c> and continuing up to the end of the list.</p>
+ <p><em>Example</em></p>
<pre>
> <input>lists:nthtail(3, [a, b, c, d, e]).</input>
[d,e]
@@ -542,70 +636,91 @@ c</pre>
[]</pre>
</desc>
</func>
+
<func>
<name name="partition" arity="2"/>
- <fsummary>Partition a list into two lists based on a predicate</fsummary>
- <desc>
- <p>Partitions <c><anno>List</anno></c> into two lists, where the first list
- contains all elements for which <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns
- <c>true</c>, and the second list contains all elements for
- which <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>false</c>.</p>
- <p>Examples:</p>
+ <fsummary>Partition a list into two lists based on a predicate.</fsummary>
+ <desc>
+ <p>Partitions <c><anno>List</anno></c> into two lists, where the first
+ list contains all elements for which
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c>,
+ and the second list contains all elements for which
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>false</c>.</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:partition(fun(A) -> A rem 2 == 1 end, [1,2,3,4,5,6,7]).</input>
{[1,3,5,7],[2,4,6]}
> <input>lists:partition(fun(A) -> is_atom(A) end, [a,b,1,c,d,2,3,4,e]).</input>
{[a,b,c,d,e],[1,2,3,4]}</pre>
- <p>See also <c>splitwith/2</c> for a different way to partition
- a list.</p>
+ <p>For a different way to partition a list, see
+ <seealso marker="#splitwith/2"><c>splitwith/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="prefix" arity="2"/>
- <fsummary>Test for list prefix</fsummary>
+ <fsummary>Test for list prefix.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>List1</anno></c> is a prefix of
<c><anno>List2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="reverse" arity="1"/>
- <fsummary>Reverse a list</fsummary>
+ <fsummary>Reverse a list.</fsummary>
<desc>
<p>Returns a list with the elements in <c><anno>List1</anno></c>
in reverse order.</p>
</desc>
</func>
+
<func>
<name name="reverse" arity="2"/>
- <fsummary>Reverse a list appending a tail</fsummary>
+ <fsummary>Reverse a list appending a tail.</fsummary>
<desc>
<p>Returns a list with the elements in <c><anno>List1</anno></c>
- in reverse order, with the tail <c><anno>Tail</anno></c> appended. For
- example:</p>
+ in reverse order, with tail <c><anno>Tail</anno></c> appended.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:reverse([1, 2, 3, 4], [a, b, c]).</input>
[4,3,2,1,a,b,c]</pre>
</desc>
</func>
+
<func>
<name name="seq" arity="2"/>
<name name="seq" arity="3"/>
- <fsummary>Generate a sequence of integers</fsummary>
+ <fsummary>Generate a sequence of integers.</fsummary>
<desc>
- <p>Returns a sequence of integers which starts with <c><anno>From</anno></c>
- and contains the successive results of adding <c><anno>Incr</anno></c> to
- the previous element, until <c><anno>To</anno></c> has been reached or
- passed (in the latter case, <c><anno>To</anno></c> is not an element of
+ <p>Returns a sequence of integers that starts with
+ <c><anno>From</anno></c> and contains the successive results of
+ adding <c><anno>Incr</anno></c> to the previous element, until
+ <c><anno>To</anno></c> is reached or passed (in the latter case,
+ <c><anno>To</anno></c> is not an element of
the sequence). <c><anno>Incr</anno></c> defaults to 1.</p>
- <p>Failure: If <c><anno>To</anno>&lt;<anno>From</anno>-<anno>Incr</anno></c> and <c><anno>Incr</anno></c>
- is positive, or if <c><anno>To</anno>><anno>From</anno>-<anno>Incr</anno></c> and <c><anno>Incr</anno></c> is
- negative, or if <c><anno>Incr</anno>==0</c> and <c><anno>From</anno>/=<anno>To</anno></c>.</p>
+ <p>Failures:</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c><anno>To</anno> &lt;
+ <anno>From</anno> - <anno>Incr</anno></c>
+ and <c><anno>Incr</anno> &gt; 0</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>To</anno> &gt;
+ <anno>From</anno> - <anno>Incr</anno></c> and
+ <c><anno>Incr</anno> &lt; 0</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Incr</anno> =:= 0</c> and
+ <c><anno>From</anno> =/= <anno>To</anno></c>.</p>
+ </item>
+ </list>
<p>The following equalities hold for all sequences:</p>
<code type="none">
-length(lists:seq(From, To)) == To-From+1
-length(lists:seq(From, To, Incr)) == (To-From+Incr) div Incr</code>
- <p>Examples:</p>
+length(lists:seq(From, To)) =:= To - From + 1
+length(lists:seq(From, To, Incr)) =:= (To - From + Incr) div Incr</code>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:seq(1, 10).</input>
[1,2,3,4,5,6,7,8,9,10]
@@ -619,74 +734,87 @@ length(lists:seq(From, To, Incr)) == (To-From+Incr) div Incr</code>
[1]</pre>
</desc>
</func>
+
<func>
<name name="sort" arity="1"/>
- <fsummary>Sort a list</fsummary>
+ <fsummary>Sort a list.</fsummary>
<desc>
<p>Returns a list containing the sorted elements of
<c><anno>List1</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="sort" arity="2"/>
- <fsummary>Sort a list</fsummary>
+ <fsummary>Sort a list.</fsummary>
<desc>
<p>Returns a list containing the sorted elements of
<c><anno>List1</anno></c>, according to the <seealso
marker="#ordering_function">ordering function</seealso>
- <c><anno>Fun</anno></c>. <c><anno>Fun</anno>(<anno>A</anno>, <anno>B</anno>)</c> should return <c>true</c> if
- <c><anno>A</anno></c> compares less than or equal to <c><anno>B</anno></c> in the
- ordering, <c>false</c> otherwise.</p>
+ <c><anno>Fun</anno></c>. <c><anno>Fun</anno>(<anno>A</anno>,
+ <anno>B</anno>)</c> is to return <c>true</c> if <c><anno>A</anno></c>
+ compares less than or equal to <c><anno>B</anno></c> in the
+ ordering, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="split" arity="2"/>
- <fsummary>Split a list into two lists</fsummary>
+ <fsummary>Split a list into two lists.</fsummary>
<type_desc variable="N">0..length(<anno>List1</anno>)</type_desc>
<desc>
- <p>Splits <c><anno>List1</anno></c> into <c><anno>List2</anno></c> and <c><anno>List3</anno></c>.
- <c><anno>List2</anno></c> contains the first <c><anno>N</anno></c> elements and
- <c><anno>List3</anno></c> the rest of the elements (the <c><anno>N</anno></c>th tail).</p>
+ <p>Splits <c><anno>List1</anno></c> into <c><anno>List2</anno></c> and
+ <c><anno>List3</anno></c>. <c><anno>List2</anno></c> contains the
+ first <c><anno>N</anno></c> elements and <c><anno>List3</anno></c>
+ the remaining elements (the <c><anno>N</anno></c>th tail).</p>
</desc>
</func>
+
<func>
<name name="splitwith" arity="2"/>
- <fsummary>Split a list into two lists based on a predicate</fsummary>
+ <fsummary>Split a list into two lists based on a predicate.</fsummary>
<desc>
<p>Partitions <c><anno>List</anno></c> into two lists according to
- <c><anno>Pred</anno></c>. <c>splitwith/2</c> behaves as if it is defined
- as follows:</p>
+ <c><anno>Pred</anno></c>. <c>splitwith/2</c> behaves as if it is
+ defined as follows:</p>
<code type="none">
splitwith(Pred, List) ->
{takewhile(Pred, List), dropwhile(Pred, List)}.</code>
- <p>Examples:</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:splitwith(fun(A) -> A rem 2 == 1 end, [1,2,3,4,5,6,7]).</input>
{[1],[2,3,4,5,6,7]}
> <input>lists:splitwith(fun(A) -> is_atom(A) end, [a,b,1,c,d,2,3,4,e]).</input>
{[a,b],[1,c,d,2,3,4,e]}</pre>
- <p>See also <c>partition/2</c> for a different way to partition
- a list.</p>
+ <p>For a different way to partition a list, see
+ <seealso marker="#partition/2"><c>partition/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="sublist" arity="2"/>
- <fsummary>Return a sub-list of a certain length, starting at the first position</fsummary>
+ <fsummary>Return a sublist of a certain length, starting at the first
+ position.</fsummary>
<desc>
- <p>Returns the sub-list of <c><anno>List1</anno></c> starting at position 1
- and with (max) <c><anno>Len</anno></c> elements. It is not an error for
- <c><anno>Len</anno></c> to exceed the length of the list, in that case
- the whole list is returned.</p>
+ <p>Returns the sublist of <c><anno>List1</anno></c> starting at
+ position 1 and with (maximum) <c><anno>Len</anno></c> elements. It is
+ not an error for <c><anno>Len</anno></c> to exceed the length of the
+ list, in that case the whole list is returned.</p>
</desc>
</func>
+
<func>
<name name="sublist" arity="3"/>
- <fsummary>Return a sub-list starting at a given position and with a given number of elements</fsummary>
+ <fsummary>Return a sublist starting at a specified position and with a
+ specified number of elements.</fsummary>
<type_desc variable="Start">1..(length(<anno>List1</anno>)+1)</type_desc>
<desc>
- <p>Returns the sub-list of <c><anno>List1</anno></c> starting at <c><anno>Start</anno></c>
- and with (max) <c><anno>Len</anno></c> elements. It is not an error for
- <c><anno>Start</anno>+<anno>Len</anno></c> to exceed the length of the list.</p>
+ <p>Returns the sublist of <c><anno>List1</anno></c> starting at
+ <c><anno>Start</anno></c> and with (maximum) <c><anno>Len</anno></c>
+ elements. It is not an error for
+ <c><anno>Start</anno>+<anno>Len</anno></c> to exceed the length of
+ the list.</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:sublist([1,2,3,4], 2, 2).</input>
[2,3]
@@ -696,142 +824,163 @@ splitwith(Pred, List) ->
[]</pre>
</desc>
</func>
+
<func>
<name name="subtract" arity="2"/>
- <fsummary>Subtract the element in one list from another list</fsummary>
+ <fsummary>Subtract the element in one list from another list.</fsummary>
<desc>
- <p>Returns a new list <c><anno>List3</anno></c> which is a copy of
- <c><anno>List1</anno></c>, subjected to the following procedure: for each
- element in <c><anno>List2</anno></c>, its first occurrence in <c><anno>List1</anno></c>
- is deleted. For example:</p>
+ <p>Returns a new list <c><anno>List3</anno></c> that is a copy of
+ <c><anno>List1</anno></c>, subjected to the following procedure:
+ for each element in <c><anno>List2</anno></c>, its first occurrence
+ in <c><anno>List1</anno></c> is deleted.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:subtract("123212", "212").</input>
"312".</pre>
<p><c>lists:subtract(A, B)</c> is equivalent to <c>A -- B</c>.</p>
- <warning><p>The complexity of <c>lists:subtract(A, B)</c> is proportional
- to <c>length(A)*length(B)</c>, meaning that it will be very slow if
- both <c>A</c> and <c>B</c> are long lists.
- (Using ordered lists and
- <seealso marker="ordsets#subtract/2">ordsets:subtract/2</seealso>
- is a much better choice if both lists are long.)</p></warning>
+ <warning>
+ <p>The complexity of <c>lists:subtract(A, B)</c> is proportional to
+ <c>length(A)*length(B)</c>, meaning that it is very slow if both
+ <c>A</c> and <c>B</c> are long lists. (If both lists are long, it
+ is a much better choice to use ordered lists and
+ <seealso marker="ordsets#subtract/2">
+ <c>ordsets:subtract/2</c></seealso>.</p>
+ </warning>
</desc>
</func>
+
<func>
<name name="suffix" arity="2"/>
- <fsummary>Test for list suffix</fsummary>
+ <fsummary>Test for list suffix.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>List1</anno></c> is a suffix of
<c><anno>List2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="sum" arity="1"/>
- <fsummary>Return sum of elements in a list</fsummary>
+ <fsummary>Return the sum of elements in a list.</fsummary>
<desc>
<p>Returns the sum of the elements in <c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="takewhile" arity="2"/>
- <fsummary>Take elements from a list while a predicate is true</fsummary>
+ <fsummary>Take elements from a list while a predicate is <c>true</c>.
+ </fsummary>
<desc>
- <p>Takes elements <c><anno>Elem</anno></c> from <c><anno>List1</anno></c> while
- <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c>, that is,
- the function returns the longest prefix of the list for which
+ <p>Takes elements <c><anno>Elem</anno></c> from
+ <c><anno>List1</anno></c> while
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c>, that
+ is, the function returns the longest prefix of the list for which
all elements satisfy the predicate.</p>
</desc>
</func>
+
<func>
<name name="ukeymerge" arity="3"/>
- <fsummary>Merge two key-sorted lists of tuples, removing duplicates</fsummary>
+ <fsummary>Merge two key-sorted lists of tuples, removing duplicates.
+ </fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>TupleList1</anno></c>
- and <c><anno>TupleList2</anno></c>. The merge is performed on the
- <c><anno>N</anno></c>th element of each tuple. Both <c><anno>TupleList1</anno></c> and
- <c><anno>TupleList2</anno></c> must be key-sorted without duplicates
- prior to evaluating this function. When two tuples compare
- equal, the tuple from <c><anno>TupleList1</anno></c> is picked and the
- one from <c><anno>TupleList2</anno></c> deleted.</p>
+ <p>Returns the sorted list formed by merging
+ <c><anno>TupleList1</anno></c> and
+ <c><anno>TupleList2</anno></c>. The merge is performed on the
+ <c><anno>N</anno></c>th element of each tuple. Both
+ <c><anno>TupleList1</anno></c> and <c><anno>TupleList2</anno></c>
+ must be key-sorted without duplicates before evaluating this function.
+ When two tuples compare equal, the tuple from
+ <c><anno>TupleList1</anno></c> is picked and the
+ one from <c><anno>TupleList2</anno></c> is deleted.</p>
</desc>
</func>
+
<func>
<name name="ukeysort" arity="2"/>
- <fsummary>Sort a list of tuples, removing duplicates</fsummary>
+ <fsummary>Sort a list of tuples, removing duplicates.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns a list containing the sorted elements of the list
- <c><anno>TupleList1</anno></c> where all but the first tuple of the
- tuples comparing equal have been deleted. Sorting is
+ <p>Returns a list containing the sorted elements of list
+ <c><anno>TupleList1</anno></c> where all except the first tuple of
+ the tuples comparing equal have been deleted. Sorting is
performed on the <c><anno>N</anno></c>th element of the tuples.</p>
</desc>
</func>
+
<func>
<name name="umerge" arity="1"/>
- <fsummary>Merge a list of sorted lists, removing duplicates</fsummary>
+ <fsummary>Merge a list of sorted lists, removing duplicates.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging all the sub-lists
- of <c><anno>ListOfLists</anno></c>. All sub-lists must be sorted and
- contain no duplicates prior to evaluating this function.
- When two elements compare equal, the element from the
- sub-list with the lowest position in <c><anno>ListOfLists</anno></c> is
- picked and the other one deleted.</p>
+ <p>Returns the sorted list formed by merging all the sublists
+ of <c><anno>ListOfLists</anno></c>. All sublists must be sorted and
+ contain no duplicates before evaluating this function.
+ When two elements compare equal, the element from the sublist
+ with the lowest position in <c><anno>ListOfLists</anno></c> is
+ picked and the other is deleted.</p>
</desc>
</func>
+
<func>
<name name="umerge" arity="2"/>
- <fsummary>Merge two sorted lists, removing duplicates</fsummary>
+ <fsummary>Merge two sorted lists, removing duplicates.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>List1</anno></c> and
- <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and <c><anno>List2</anno></c> must be
- sorted and contain no duplicates prior to evaluating this
+ <p>Returns the sorted list formed by merging <c><anno>List1</anno></c>
+ and <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and
+ <c><anno>List2</anno></c> must be
+ sorted and contain no duplicates before evaluating this
function. When two elements compare equal, the element from
- <c><anno>List1</anno></c> is picked and the one from <c><anno>List2</anno></c>
- deleted.</p>
+ <c><anno>List1</anno></c> is picked and the one from
+ <c><anno>List2</anno></c> is deleted.</p>
</desc>
</func>
+
<func>
<name name="umerge" arity="3"/>
- <fsummary>Merge two sorted lists, removing duplicates</fsummary>
+ <fsummary>Merge two sorted lists, removing duplicates.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>List1</anno></c> and
- <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and <c><anno>List2</anno></c> must be
- sorted according to the <seealso
+ <p>Returns the sorted list formed by merging <c><anno>List1</anno></c>
+ and <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and
+ <c><anno>List2</anno></c> must be sorted according to the <seealso
marker="#ordering_function">ordering function</seealso>
- <c>Fun</c> and contain no duplicates prior to evaluating
- this function. <c><anno>Fun</anno>(<anno>A</anno>, <anno>B</anno>)</c> should return <c>true</c> if
- <c><anno>A</anno></c> compares less than or equal to <c><anno>B</anno></c> in the
- ordering, <c>false</c> otherwise. When two elements compare
- equal, the element from
- <c><anno>List1</anno></c> is picked and the one from <c><anno>List2</anno></c>
- deleted.</p>
+ <c>Fun</c> and contain no duplicates before evaluating this function.
+ <c><anno>Fun</anno>(<anno>A</anno>, <anno>B</anno>)</c> is to return
+ <c>true</c> if <c><anno>A</anno></c> compares less than or equal to
+ <c><anno>B</anno></c> in the ordering, otherwise <c>false</c>. When
+ two elements compare equal, the element from <c><anno>List1</anno></c>
+ is picked and the one from <c><anno>List2</anno></c> is deleted.</p>
</desc>
</func>
+
<func>
<name name="umerge3" arity="3"/>
- <fsummary>Merge three sorted lists, removing duplicates</fsummary>
+ <fsummary>Merge three sorted lists, removing duplicates.</fsummary>
<desc>
<p>Returns the sorted list formed by merging <c><anno>List1</anno></c>,
- <c><anno>List2</anno></c> and <c><anno>List3</anno></c>. All of <c><anno>List1</anno></c>,
- <c><anno>List2</anno></c> and <c><anno>List3</anno></c> must be sorted and contain no
- duplicates prior to evaluating this function. When two
+ <c><anno>List2</anno></c>, and <c><anno>List3</anno></c>. All of
+ <c><anno>List1</anno></c>, <c><anno>List2</anno></c>, and
+ <c><anno>List3</anno></c> must be sorted and contain no
+ duplicates before evaluating this function. When two
elements compare equal, the element from <c><anno>List1</anno></c> is
- picked if there is such an element, otherwise the element
- from <c><anno>List2</anno></c> is picked, and the other one deleted.</p>
+ picked if there is such an element, otherwise the element from
+ <c><anno>List2</anno></c> is picked, and the other is deleted.</p>
</desc>
</func>
+
<func>
<name name="unzip" arity="1"/>
- <fsummary>Unzip a list of two-tuples into two lists</fsummary>
+ <fsummary>Unzip a list of two-tuples into two lists.</fsummary>
<desc>
<p>"Unzips" a list of two-tuples into two lists, where the first
list contains the first element of each tuple, and the second
list contains the second element of each tuple.</p>
</desc>
</func>
+
<func>
<name name="unzip3" arity="1"/>
- <fsummary>Unzip a list of three-tuples into three lists</fsummary>
+ <fsummary>Unzip a list of three-tuples into three lists.</fsummary>
<desc>
<p>"Unzips" a list of three-tuples into three lists, where
the first list contains the first element of each tuple,
@@ -839,76 +988,84 @@ splitwith(Pred, List) ->
the third list contains the third element of each tuple.</p>
</desc>
</func>
+
<func>
<name name="usort" arity="1"/>
- <fsummary>Sort a list, removing duplicates</fsummary>
+ <fsummary>Sort a list, removing duplicates.</fsummary>
<desc>
<p>Returns a list containing the sorted elements of
- <c><anno>List1</anno></c> where all but the first element of the elements
- comparing equal have been deleted.</p>
+ <c><anno>List1</anno></c> where all except the first element of the
+ elements comparing equal have been deleted.</p>
</desc>
</func>
+
<func>
<name name="usort" arity="2"/>
- <fsummary>Sort a list, removing duplicates</fsummary>
+ <fsummary>Sort a list, removing duplicates.</fsummary>
<desc>
- <p>Returns a list which contains the sorted elements of
- <c><anno>List1</anno></c> where all but the first element of the elements
- comparing equal according to the <seealso
+ <p>Returns a list containing the sorted elements of
+ <c><anno>List1</anno></c> where all except the first element of the
+ elements comparing equal according to the <seealso
marker="#ordering_function">ordering function</seealso>
- <c><anno>Fun</anno></c> have been deleted. <c><anno>Fun</anno>(A, B)</c> should return
+ <c><anno>Fun</anno></c> have been deleted.
+ <c><anno>Fun</anno>(A, B)</c> is to return
<c>true</c> if <c>A</c> compares less than or equal to
- <c>B</c> in the ordering, <c>false</c> otherwise.</p>
+ <c>B</c> in the ordering, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="zip" arity="2"/>
- <fsummary>Zip two lists into a list of two-tuples</fsummary>
+ <fsummary>Zip two lists into a list of two-tuples.</fsummary>
<desc>
<p>"Zips" two lists of equal length into one list of two-tuples,
where the first element of each tuple is taken from the first
- list and the second element is taken from corresponding
+ list and the second element is taken from the corresponding
element in the second list.</p>
</desc>
</func>
+
<func>
<name name="zip3" arity="3"/>
- <fsummary>Zip three lists into a list of three-tuples</fsummary>
+ <fsummary>Zip three lists into a list of three-tuples.</fsummary>
<desc>
<p>"Zips" three lists of equal length into one list of
three-tuples, where the first element of each tuple is taken
from the first list, the second element is taken from
- corresponding element in the second list, and the third
- element is taken from the corresponding element in the third
- list.</p>
+ the corresponding element in the second list, and the third
+ element is taken from the corresponding element in the third list.</p>
</desc>
</func>
+
<func>
<name name="zipwith" arity="3"/>
- <fsummary>Zip two lists into one list according to a fun</fsummary>
+ <fsummary>Zip two lists into one list according to a fun.</fsummary>
<desc>
- <p>Combine the elements of two lists of equal length into one
- list. For each pair <c><anno>X</anno>, <anno>Y</anno></c> of list elements from the two
- lists, the element in the result list will be
+ <p>Combines the elements of two lists of equal length into one list.
+ For each pair <c><anno>X</anno>, <anno>Y</anno></c> of list elements
+ from the two lists, the element in the result list is
<c><anno>Combine</anno>(<anno>X</anno>, <anno>Y</anno>)</c>.</p>
<p><c>zipwith(fun(X, Y) -> {X,Y} end, List1, List2)</c> is
equivalent to <c>zip(List1, List2)</c>.</p>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:zipwith(fun(X, Y) -> X+Y end, [1,2,3], [4,5,6]).</input>
[5,7,9]</pre>
</desc>
</func>
+
<func>
<name name="zipwith3" arity="4"/>
- <fsummary>Zip three lists into one list according to a fun</fsummary>
- <desc>
- <p>Combine the elements of three lists of equal length into one
- list. For each triple <c><anno>X</anno>, <anno>Y</anno>, <anno>Z</anno></c> of list elements from
- the three lists, the element in the result list will be
- <c><anno>Combine</anno>(<anno>X</anno>, <anno>Y</anno>, <anno>Z</anno>)</c>.</p>
- <p><c>zipwith3(fun(X, Y, Z) -> {X,Y,Z} end, List1, List2, List3)</c> is equivalent to <c>zip3(List1, List2, List3)</c>.</p>
- <p>Examples:</p>
+ <fsummary>Zip three lists into one list according to a fun.</fsummary>
+ <desc>
+ <p>Combines the elements of three lists of equal length into one
+ list. For each triple <c><anno>X</anno>, <anno>Y</anno>,
+ <anno>Z</anno></c> of list elements from the three lists, the element
+ in the result list is <c><anno>Combine</anno>(<anno>X</anno>,
+ <anno>Y</anno>, <anno>Z</anno>)</c>.</p>
+ <p><c>zipwith3(fun(X, Y, Z) -> {X,Y,Z} end, List1, List2, List3)</c> is
+ equivalent to <c>zip3(List1, List2, List3)</c>.</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:zipwith3(fun(X, Y, Z) -> X+Y+Z end, [1,2,3], [4,5,6], [7,8,9]).</input>
[12,15,18]
diff --git a/lib/stdlib/doc/src/log_mf_h.xml b/lib/stdlib/doc/src/log_mf_h.xml
index eccda516ba..edc3d31025 100644
--- a/lib/stdlib/doc/src/log_mf_h.xml
+++ b/lib/stdlib/doc/src/log_mf_h.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -32,48 +32,56 @@
<checked>Martin Bj&ouml;rklund</checked>
<date>1996-10-31</date>
<rev>A</rev>
- <file>log_mf_h.sgml</file>
+ <file>log_mf_h.xml</file>
</header>
<module>log_mf_h</module>
- <modulesummary>An Event Handler which Logs Events to Disk</modulesummary>
+ <modulesummary>An event handler that logs events to disk.</modulesummary>
<description>
- <p>The <c>log_mf_h</c> is a <c>gen_event</c> handler module which
- can be installed in any <c>gen_event</c> process. It logs onto disk all events
- which are sent to an event manager. Each event is written as a
- binary which makes the logging very fast. However, a tool such as the <c>Report Browser</c> (<c>rb</c>) must be used in order to read the files. The events are written to multiple files. When all files have been used, the first one is re-used and overwritten. The directory location, the number of files, and the size of each file are configurable. The directory will include one file called <c>index</c>, and
- report files <c>1, 2, ....</c>.
- </p>
+ <p>This module is a <c>gen_event</c> handler module that can be installed
+ in any <c>gen_event</c> process. It logs onto disk all events that are
+ sent to an event manager. Each event is written as a binary, which makes
+ the logging very fast. However, a tool such as the Report Browser
+ (<seealso marker="sasl:rb"><c>rb(3)</c></seealso>) must be used to read
+ the files. The events are written to multiple files. When all files have
+ been used, the first one is reused and overwritten. The directory
+ location, the number of files, and the size of each file are configurable.
+ The directory will include one file called <c>index</c>, and report files
+ <c>1, 2, ...</c>.</p>
</description>
+
<datatypes>
<datatype>
<name name="args"/>
<desc><p>Term to be sent to <seealso marker="gen_event#add_handler/3">
- gen_event:add_handler/3</seealso>.</p></desc>
+ <c>gen_event:add_handler/3</c></seealso>.</p>
+ </desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="init" arity="3"/>
<name name="init" arity="4"/>
- <fsummary>Initiate the event handler</fsummary>
+ <fsummary>Initiate the event handler.</fsummary>
<desc>
- <p>Initiates the event handler. This function returns
- <c><anno>Args</anno></c>, which should be used in a call to
+ <p>Initiates the event handler. Returns <c><anno>Args</anno></c>, which
+ is to be used in a call to
<c>gen_event:add_handler(EventMgr, log_mf_h, <anno>Args</anno>)</c>.
- </p>
+ </p>
<p><c><anno>Dir</anno></c> specifies which directory to use for the log
- files. <c><anno>MaxBytes</anno></c> specifies the size of each individual
- file. <c><anno>MaxFiles</anno></c> specifies how many files are
- used. <c><anno>Pred</anno></c> is a predicate function used to filter the
- events. If no predicate function is specified, all events are
- logged.</p>
+ files. <c><anno>MaxBytes</anno></c> specifies the size of each
+ individual file. <c><anno>MaxFiles</anno></c> specifies how many
+ files are used. <c><anno>Pred</anno></c> is a predicate function used
+ to filter the events. If no predicate function is specified, all
+ events are logged.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="gen_event">gen_event(3)</seealso>, rb(3) </p>
+ <p><seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="sasl:rb"><c>rb(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/maps.xml b/lib/stdlib/doc/src/maps.xml
index 48c1abc2f8..e1edbadcd3 100644
--- a/lib/stdlib/doc/src/maps.xml
+++ b/lib/stdlib/doc/src/maps.xml
@@ -2,12 +2,12 @@
<!DOCTYPE erlref SYSTEM "erlref.dtd">
<erlref>
- <header>
- <copyright>
- <year>2013</year><year>2014</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
+ <header>
+ <copyright>
+ <year>2013</year><year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
@@ -19,394 +19,427 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- </legalnotice>
- <title>maps</title>
- <prepared>Björn-Egil Dahlberg</prepared>
- <docno>1</docno>
- <date>2014-02-28</date>
- <rev>A</rev>
- </header>
- <module>maps</module>
- <modulesummary>Maps Processing Functions</modulesummary>
- <description>
- <p>This module contains functions for maps processing.</p>
- </description>
- <funcs>
+ </legalnotice>
- <func>
- <name name="filter" arity="2"/>
- <fsummary>Choose pairs which satisfy a predicate</fsummary>
- <desc>
- <p>
- Returns a map <c><anno>Map2</anno></c> for which predicate
- <c><anno>Pred</anno></c> holds true in <c><anno>Map1</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if
- <c><anno>Map1</anno></c> is not a map or with <c>badarg</c> if
- <c><anno>Pred</anno></c> is not a function of arity 2.
- </p>
- <p>Example:</p>
- <code type="none">
+ <title>maps</title>
+ <prepared>Björn-Egil Dahlberg</prepared>
+ <docno>1</docno>
+ <date>2014-02-28</date>
+ <rev>A</rev>
+ </header>
+ <module>maps</module>
+ <modulesummary>Maps processing functions.</modulesummary>
+ <description>
+ <p>This module contains functions for maps processing.</p>
+ </description>
+
+ <funcs>
+ <func>
+ <name name="filter" arity="2"/>
+ <fsummary>Select pairs that satisfy a predicate.</fsummary>
+ <desc>
+ <p>Returns a map <c><anno>Map2</anno></c> for which predicate
+ <c><anno>Pred</anno></c> holds true in <c><anno>Map1</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map, or with <c>badarg</c> if
+ <c><anno>Pred</anno></c> is not a function of arity 2.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> M = #{a => 2, b => 3, c=> 4, "a" => 1, "b" => 2, "c" => 4},
Pred = fun(K,V) -> is_atom(K) andalso (V rem 2) =:= 0 end,
maps:filter(Pred,M).
-#{a => 2,c => 4} </code>
- </desc>
- </func>
+#{a => 2,c => 4}</code>
+ </desc>
+ </func>
- <func>
- <name name="find" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a tuple <c>{ok, Value}</c> where <c><anno>Value</anno></c> is the value associated with <c><anno>Key</anno></c>,
- or <c>error</c> if no value is associated with <c><anno>Key</anno></c> in <c><anno>Map</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="find" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a tuple <c>{ok, Value}</c>, where <c><anno>Value</anno></c>
+ is the value associated with <c><anno>Key</anno></c>, or <c>error</c>
+ if no value is associated with <c><anno>Key</anno></c> in
+ <c><anno>Map</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"hi" => 42},
Key = "hi",
maps:find(Key,Map).
-{ok,42} </code>
- </desc>
- </func>
+{ok,42}</code>
+ </desc>
+ </func>
- <func>
- <name name="fold" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Calls <c>F(K, V, AccIn)</c> for every <c><anno>K</anno></c> to value <c><anno>V</anno></c>
- association in <c><anno>Map</anno></c> in
- arbitrary order. The function <c>fun F/3</c> must return a new accumulator
- which is passed to the next successive call. <c>maps:fold/3</c> returns the final
- value of the accumulator. The initial accumulator value <c><anno>Init</anno></c> is returned if
- the map is empty.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="fold" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Calls <c>F(K, V, AccIn)</c> for every <c><anno>K</anno></c> to value
+ <c><anno>V</anno></c> association in <c><anno>Map</anno></c> in
+ any order. Function <c>fun F/3</c> must return a new
+ accumulator, which is passed to the next successive call.
+ This function returns the final value of the accumulator. The initial
+ accumulator value <c><anno>Init</anno></c> is returned if the map is
+ empty.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Fun = fun(K,V,AccIn) when is_list(K) -> AccIn + V end,
Map = #{"k1" => 1, "k2" => 2, "k3" => 3},
maps:fold(Fun,0,Map).
6</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="from_list" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function takes a list of key-value tuples elements and builds a
- map. The associations may be in any order and both keys and values in the
- association may be of any term. If the same key appears more than once,
- the latter (rightmost) value is used and the previous values are ignored.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="from_list" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Takes a list of key-value tuples elements and builds a map. The
+ associations can be in any order, and both keys and values in the
+ association can be of any term. If the same key appears more than
+ once, the latter (right-most) value is used and the previous values
+ are ignored.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> List = [{"a",ignored},{1337,"value two"},{42,value_three},{"a",1}],
maps:from_list(List).
#{42 => value_three,1337 => "value two","a" => 1}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="get" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns the value <c><anno>Value</anno></c> associated with <c><anno>Key</anno></c> if
- <c><anno>Map</anno></c> contains <c><anno>Key</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map,
- or with a <c>{badkey,Key}</c> exception if no value is associated with <c><anno>Key</anno></c>.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="get" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns value <c><anno>Value</anno></c> associated with
+ <c><anno>Key</anno></c> if <c><anno>Map</anno></c> contains
+ <c><anno>Key</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map, or with a <c>{badkey,Key}</c>
+ exception if no value is associated with <c><anno>Key</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Key = 1337,
Map = #{42 => value_two,1337 => "value one","a" => 1},
maps:get(Key,Map).
"value one"</code>
- </desc>
- </func>
-
- <func>
- <name name="get" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns the value <c><anno>Value</anno></c> associated with <c><anno>Key</anno></c> if
- <c><anno>Map</anno></c> contains <c><anno>Key</anno></c>.
- If no value is associated with <c><anno>Key</anno></c> then returns <c><anno>Default</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
+ </desc>
+ </func>
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="get" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns value <c><anno>Value</anno></c> associated with
+ <c><anno>Key</anno></c> if <c><anno>Map</anno></c> contains
+ <c><anno>Key</anno></c>. If no value is associated with
+ <c><anno>Key</anno></c>, <c><anno>Default</anno></c> is returned.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{ key1 => val1, key2 => val2 }.
#{key1 => val1,key2 => val2}
> maps:get(key1, Map, "Default value").
val1
> maps:get(key3, Map, "Default value").
"Default value"</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="is_key" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns <c>true</c> if map <c><anno>Map</anno></c> contains <c><anno>Key</anno></c> and returns
- <c>false</c> if it does not contain the <c><anno>Key</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="is_key" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns <c>true</c> if map <c><anno>Map</anno></c> contains
+ <c><anno>Key</anno></c> and returns <c>false</c> if it does not
+ contain the <c><anno>Key</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"42" => value}.
#{"42"> => value}
> maps:is_key("42",Map).
true
> maps:is_key(value,Map).
false</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="keys" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a complete list of keys, in arbitrary order, which resides within <c><anno>Map</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="keys" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a complete list of keys, in any order, which resides
+ within <c><anno>Map</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
maps:keys(Map).
[42,1337,"a"]</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="map" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function produces a new map <c><anno>Map2</anno></c> by calling the function <c>fun F(K, V1)</c> for
- every <c><anno>K</anno></c> to value <c><anno>V1</anno></c> association in <c><anno>Map1</anno></c> in arbitrary order.
- The function <c>fun F/2</c> must return the value <c><anno>V2</anno></c> to be associated with key <c><anno>K</anno></c> for
- the new map <c><anno>Map2</anno></c>.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="map" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Produces a new map <c><anno>Map2</anno></c> by calling function
+ <c>fun F(K, V1)</c> for every <c><anno>K</anno></c> to value
+ <c><anno>V1</anno></c> association in <c><anno>Map1</anno></c> in
+ any order. Function <c>fun F/2</c> must return value
+ <c><anno>V2</anno></c> to be associated with key <c><anno>K</anno></c>
+ for the new map <c><anno>Map2</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Fun = fun(K,V1) when is_list(K) -> V1*2 end,
Map = #{"k1" => 1, "k2" => 2, "k3" => 3},
maps:map(Fun,Map).
#{"k1" => 2,"k2" => 4,"k3" => 6}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="merge" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Merges two maps into a single map <c><anno>Map3</anno></c>. If two keys exists in both maps the
- value in <c><anno>Map1</anno></c> will be superseded by the value in <c><anno>Map2</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> or
- <c><anno>Map2</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="merge" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Merges two maps into a single map <c><anno>Map3</anno></c>. If two
+ keys exist in both maps, the value in <c><anno>Map1</anno></c> is
+ superseded by the value in <c><anno>Map2</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> or <c><anno>Map2</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map1 = #{a => "value_one", b => "value_two"},
Map2 = #{a => 1, c => 2},
maps:merge(Map1,Map2).
#{a => 1,b => "value_two",c => 2}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="new" arity="0"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a new empty map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="new" arity="0"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a new empty map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> maps:new().
#{}</code>
- </desc>
- </func>
-
- <func>
- <name name="put" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Associates <c><anno>Key</anno></c> with value <c><anno>Value</anno></c> and inserts the association into map <c>Map2</c>.
- If key <c><anno>Key</anno></c> already exists in map <c><anno>Map1</anno></c>, the old associated value is
- replaced by value <c><anno>Value</anno></c>. The function returns a new map <c><anno>Map2</anno></c> containing the new association and
- the old associations in <c><anno>Map1</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> is not a map.
- </p>
+ </desc>
+ </func>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="put" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Associates <c><anno>Key</anno></c> with value
+ <c><anno>Value</anno></c> and inserts the association into map
+ <c>Map2</c>. If key <c><anno>Key</anno></c> already exists in map
+ <c><anno>Map1</anno></c>, the old associated value is replaced by
+ value <c><anno>Value</anno></c>. The function returns a new map
+ <c><anno>Map2</anno></c> containing the new association and the old
+ associations in <c><anno>Map1</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"a" => 1}.
#{"a" => 1}
> maps:put("a", 42, Map).
#{"a" => 42}
> maps:put("b", 1337, Map).
#{"a" => 1,"b" => 1337}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="remove" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function removes the <c><anno>Key</anno></c>, if it exists, and its associated value from
- <c><anno>Map1</anno></c> and returns a new map <c><anno>Map2</anno></c> without key <c><anno>Key</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="remove" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Removes the <c><anno>Key</anno></c>, if it exists, and its
+ associated value from <c><anno>Map1</anno></c> and returns a new map
+ <c><anno>Map2</anno></c> without key <c><anno>Key</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"a" => 1}.
#{"a" => 1}
> maps:remove("a",Map).
#{}
> maps:remove("b",Map).
#{"a" => 1}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="size" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function returns the number of key-value associations in the <c><anno>Map</anno></c>.
- This operation happens in constant time.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="size" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns the number of key-value associations in
+ <c><anno>Map</anno></c>. This operation occurs in constant time.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_two,1337 => "value one","a" => 1},
maps:size(Map).
3</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="to_list" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The fuction returns a list of pairs representing the key-value associations of <c><anno>Map</anno></c>,
- where the pairs, <c>[{K1,V1}, ..., {Kn,Vn}]</c>, are returned in arbitrary order.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="take" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>The function removes the <c><anno>Key</anno></c>, if it
+ exists, and its associated value from <c><anno>Map1</anno></c>
+ and returns a tuple with the removed <c><anno>Value</anno></c>
+ and the new map <c><anno>Map2</anno></c> without key
+ <c><anno>Key</anno></c>. If the key does not exist
+ <c>error</c> is returned.
+ </p>
+ <p>The call will fail with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map.
+ </p>
+ <p>Example:</p>
+ <code type="none">
+> Map = #{"a" => "hello", "b" => "world"}.
+#{"a" => "hello", "b" => "world"}
+> maps:take("a",Map).
+{"hello",#{"b" => "world"}}
+> maps:take("does not exist",Map).
+error</code>
+ </desc>
+ </func>
+
+ <func>
+ <name name="to_list" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a list of pairs representing the key-value associations of
+ <c><anno>Map</anno></c>, where the pairs
+ <c>[{K1,V1}, ..., {Kn,Vn}]</c> are returned in arbitrary order.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
maps:to_list(Map).
[{42,value_three},{1337,"value two"},{"a",1}]</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="update" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>
- If <c><anno>Key</anno></c> exists in <c><anno>Map1</anno></c> the old associated value is
- replaced by value <c><anno>Value</anno></c>. The function returns a new map <c><anno>Map2</anno></c> containing
- the new associated value.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> is not a map,
- or with a <c>{badkey,Key}</c> exception if no value is associated with <c><anno>Key</anno></c>.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="update" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>If <c><anno>Key</anno></c> exists in <c><anno>Map1</anno></c>, the
+ old associated value is replaced by value <c><anno>Value</anno></c>.
+ The function returns a new map <c><anno>Map2</anno></c> containing
+ the new associated value.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map, or with a <c>{badkey,Key}</c>
+ exception if no value is associated with <c><anno>Key</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"a" => 1}.
#{"a" => 1}
> maps:update("a", 42, Map).
#{"a" => 42}</code>
- </desc>
- </func>
+ </desc>
+ </func>
+
+ <func>
+ <name name="update_with" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Update a value in a <c><anno>Map1</anno></c> associated
+ with <c><anno>Key</anno></c> by calling
+ <c><anno>Fun</anno></c> on the old value to get a new
+ value. An exception <c>{badkey,<anno>Key</anno>}</c> is
+ generated if <c><anno>Key</anno></c> is not present in the
+ map.</p>
+ <p>Example:</p>
+ <code type="none">
+> Map = #{"counter" => 1},
+ Fun = fun(V) -> V + 1 end,
+ maps:update_with("counter",Fun,Map).
+#{"counter" => 2}</code>
+ </desc>
+ </func>
+
+ <func>
+ <name name="update_with" arity="4"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Update a value in a <c><anno>Map1</anno></c> associated
+ with <c><anno>Key</anno></c> by calling
+ <c><anno>Fun</anno></c> on the old value to get a new value.
+ If <c><anno>Key</anno></c> is not present in
+ <c><anno>Map1</anno></c> then <c><anno>Init</anno></c> will be
+ associated with <c><anno>Key</anno></c>.
+ </p>
+ <p>Example:</p>
+ <code type="none">
+> Map = #{"counter" => 1},
+ Fun = fun(V) -> V + 1 end,
+ maps:update_with("new counter",Fun,42,Map).
+#{"counter" => 1,"new counter" => 42}</code>
+ </desc>
+ </func>
- <func>
- <name name="values" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a complete list of values, in arbitrary order, contained in map <c>Map</c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="values" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a complete list of values, in arbitrary order, contained in
+ map <c>Map</c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
maps:values(Map).
[value_three,"value two",1]</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="with" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a new map <c><anno>Map2</anno></c> with the keys <c>K1</c> through <c>Kn</c> and their associated values from map <c><anno>Map1</anno></c>.
- Any key in <c><anno>Ks</anno></c> that does not exist in <c><anno>Map1</anno></c> are ignored.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="with" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a new map <c><anno>Map2</anno></c> with the keys <c>K1</c>
+ through <c>Kn</c> and their associated values from map
+ <c><anno>Map1</anno></c>. Any key in <c><anno>Ks</anno></c> that does
+ not exist in <c><anno>Map1</anno></c> is ignored.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
Ks = ["a",42,"other key"],
maps:with(Ks,Map).
#{42 => value_three,"a" => 1}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="without" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a new map <c><anno>Map2</anno></c> without the keys <c>K1</c> through <c>Kn</c> and their associated values from map <c><anno>Map1</anno></c>.
- Any key in <c><anno>Ks</anno></c> that does not exist in <c><anno>Map1</anno></c> are ignored.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="without" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a new map <c><anno>Map2</anno></c> without keys <c>K1</c>
+ through <c>Kn</c> and their associated values from map
+ <c><anno>Map1</anno></c>. Any key in <c><anno>Ks</anno></c> that does
+ not exist in <c><anno>Map1</anno></c> is ignored</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
Ks = ["a",42,"other key"],
maps:without(Ks,Map).
#{1337 => "value two"}</code>
- </desc>
- </func>
- </funcs>
+ </desc>
+ </func>
+ </funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/math.xml b/lib/stdlib/doc/src/math.xml
index aee6c3f238..1358ce5cbf 100644
--- a/lib/stdlib/doc/src/math.xml
+++ b/lib/stdlib/doc/src/math.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -30,78 +30,86 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-15</date>
+ <date>1997-01-15</date>
<rev>B</rev>
- <file>math.sgml</file>
+ <file>math.xml</file>
</header>
<module>math</module>
- <modulesummary>Mathematical Functions</modulesummary>
+ <modulesummary>Mathematical functions.</modulesummary>
<description>
<p>This module provides an interface to a number of mathematical
functions.</p>
+
<note>
- <p>Not all functions are implemented on all platforms. In particular,
- the <c>erf/1</c> and <c>erfc/1</c> functions are not implemented on Windows.</p>
+ <p>Not all functions are provided on all platforms. In particular,
+ the <seealso marker="#erf/1"><c>erf/1</c></seealso> and
+ <seealso marker="#erfc/1"><c>erfc/1</c></seealso> functions
+ are not provided on Windows.</p>
</note>
</description>
+
<funcs>
<func>
- <name name="pi" arity="0"/>
- <fsummary>A useful number</fsummary>
- <desc>
- <p>A useful number.</p>
- </desc>
- </func>
- <func>
- <name name="sin" arity="1"/>
- <name name="cos" arity="1"/>
- <name name="tan" arity="1"/>
- <name name="asin" arity="1"/>
<name name="acos" arity="1"/>
+ <name name="acosh" arity="1"/>
+ <name name="asin" arity="1"/>
+ <name name="asinh" arity="1"/>
<name name="atan" arity="1"/>
<name name="atan2" arity="2"/>
- <name name="sinh" arity="1"/>
- <name name="cosh" arity="1"/>
- <name name="tanh" arity="1"/>
- <name name="asinh" arity="1"/>
- <name name="acosh" arity="1"/>
<name name="atanh" arity="1"/>
+ <name name="cos" arity="1"/>
+ <name name="cosh" arity="1"/>
<name name="exp" arity="1"/>
<name name="log" arity="1"/>
- <name name="log2" arity="1"/>
<name name="log10" arity="1"/>
+ <name name="log2" arity="1"/>
<name name="pow" arity="2"/>
+ <name name="sin" arity="1"/>
+ <name name="sinh" arity="1"/>
<name name="sqrt" arity="1"/>
- <fsummary>Diverse math functions</fsummary>
- <type variable="X" name_i="7"/>
- <type variable="Y" name_i="7"/>
+ <name name="tan" arity="1"/>
+ <name name="tanh" arity="1"/>
+ <fsummary>Diverse math functions.</fsummary>
+ <type variable="X" name_i="6"/>
+ <type variable="Y" name_i="6"/>
<desc>
- <p>A collection of math functions which return floats. Arguments
- are numbers. </p>
+ <p>A collection of mathematical functions that return floats. Arguments
+ are numbers.</p>
</desc>
</func>
+
<func>
<name name="erf" arity="1"/>
<fsummary>Error function.</fsummary>
<desc>
- <p>Returns the error function of <c><anno>X</anno></c>, where</p>
+ <p>Returns the error function of <c><anno>X</anno></c>, where:</p>
<pre>
-erf(X) = 2/sqrt(pi)*integral from 0 to X of exp(-t*t) dt. </pre>
+erf(X) = 2/sqrt(pi)*integral from 0 to X of exp(-t*t) dt.</pre>
</desc>
</func>
+
<func>
<name name="erfc" arity="1"/>
- <fsummary>Another error function</fsummary>
+ <fsummary>Another error function.</fsummary>
<desc>
- <p><c>erfc(X)</c> returns <c>1.0 - erf(X)</c>, computed by
- methods that avoid cancellation for large <c><anno>X</anno></c>. </p>
+ <p><c>erfc(X)</c> returns <c>1.0</c> - <c>erf(X)</c>, computed by
+ methods that avoid cancellation for large <c><anno>X</anno></c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="pi" arity="0"/>
+ <fsummary>A useful number.</fsummary>
+ <desc>
+ <p>A useful number.</p>
+ </desc>
+ </func>
+
</funcs>
<section>
- <title>Bugs</title>
- <p>As these are the C library, the bugs are the same.</p>
+ <title>Limitations</title>
+ <p>As these are the C library, the same limitations apply.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/ms_transform.xml b/lib/stdlib/doc/src/ms_transform.xml
index 22cb39c576..0a05fa37c5 100644
--- a/lib/stdlib/doc/src/ms_transform.xml
+++ b/lib/stdlib/doc/src/ms_transform.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,65 +28,81 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>99-02-09</date>
+ <date>1999-02-09</date>
<rev>C</rev>
- <file>ms_transform.sgml</file>
+ <file>ms_transform.xml</file>
</header>
<module>ms_transform</module>
- <modulesummary>Parse_transform that translates fun syntax into match specifications. </modulesummary>
+ <modulesummary>A parse transformation that translates fun syntax into match
+ specifications.</modulesummary>
<description>
<marker id="top"></marker>
- <p>This module implements the parse_transform that makes calls to
- <c>ets</c> and <c>dbg</c>:<c>fun2ms/1</c> translate into literal
- match specifications. It also implements the back end for the same
- functions when called from the Erlang shell.</p>
- <p>The translations from fun's to match_specs
- is accessed through the two "pseudo
- functions" <c>ets:fun2ms/1</c> and <c>dbg:fun2ms/1</c>.</p>
- <p>Actually this introduction is more or less an introduction to the
- whole concept of match specifications. Since everyone trying to use
- <c>ets:select</c> or <c>dbg</c> seems to end up reading
- this page, it seems in good place to explain a little more than
- just what this module does.</p>
- <p>There are some caveats one should be aware of, please read through
- the whole manual page if it's the first time you're using the
- transformations. </p>
- <p>Match specifications are used more or less as filters.
- They resemble usual Erlang matching in a list comprehension or in
- a <c>fun</c> used in conjunction with <c>lists:foldl</c> etc. The
- syntax of pure match specifications is somewhat awkward though, as
- they are made up purely by Erlang terms and there is no syntax in the
- language to make the match specifications more readable.</p>
- <p>As the match specifications execution and structure is quite like
- that of a fun, it would for most programmers be more straight forward
- to simply write it using the familiar fun syntax and having that
- translated into a match specification automatically. Of course a real
- fun is more powerful than the match specifications allow, but bearing
- the match specifications in mind, and what they can do, it's still
+ <p>This module provides the parse transformation that makes calls to
+ <seealso marker="ets"><c>ets</c></seealso> and
+ <seealso marker="runtime_tools:dbg#fun2ms/1"><c>dbg:fun2ms/1</c></seealso>
+ translate into literal match specifications. It also provides the back end
+ for the same functions when called from the Erlang shell.</p>
+
+ <p>The translation from funs to match specifications
+ is accessed through the two "pseudo functions"
+ <seealso marker="ets#fun2ms/1"><c>ets:fun2ms/1</c></seealso> and
+ <seealso marker="runtime_tools:dbg#fun2ms/1"><c>dbg:fun2ms/1</c></seealso>.</p>
+
+ <p>As everyone trying to use
+ <seealso marker="ets#select/1"><c>ets:select/2</c></seealso> or
+ <seealso marker="runtime_tools:dbg"><c>dbg</c></seealso> seems to end up
+ reading this manual page, this description is an introduction to the
+ concept of match specifications.</p>
+
+ <p>Read the whole manual page if it is the first time you are using
+ the transformations.</p>
+
+ <p>Match specifications are used more or less as filters. They resemble
+ usual Erlang matching in a list comprehension or in a fun used with
+ <seealso marker="lists#foldl/3"><c>lists:foldl/3</c></seealso>, and so on.
+ However, the syntax of pure match specifications is awkward, as
+ they are made up purely by Erlang terms, and the language has no
+ syntax to make the match specifications more readable.</p>
+
+ <p>As the execution and structure of the match specifications are like
+ that of a fun, it is more straightforward
+ to write it using the familiar fun syntax and to have that
+ translated into a match specification automatically. A real fun is
+ clearly more powerful than the match specifications allow, but bearing
+ the match specifications in mind, and what they can do, it is still
more convenient to write it all as a fun. This module contains the
- code that simply translates the fun syntax into match_spec terms.</p>
- <p>Let's start with an ets example. Using <c>ets:select</c> and
- a match specification, one can filter out rows of a table and construct
- a list of tuples containing relevant parts of the data in these
- rows. Of course one could use <c>ets:foldl</c> instead, but the
- select call is far more efficient. Without the translation, one has to
- struggle with writing match specifications terms to accommodate this,
- or one has to resort to the less powerful
- <c>ets:match(_object)</c> calls, or simply give up and use
- the more inefficient method of <c>ets:foldl</c>. Using the
- <c>ets:fun2ms</c> transformation, a <c>ets:select</c> call
- is at least as easy to write as any of the alternatives.</p>
- <p>As an example, consider a simple table of employees:</p>
+ code that translates the fun syntax into match specification
+ terms.</p>
+ </description>
+
+ <section>
+ <title>Example 1</title>
+ <p>Using <seealso marker="ets#select/2"><c>ets:select/2</c></seealso>
+ and a match specification, one can filter out rows of
+ a table and construct a list of tuples containing relevant parts
+ of the data in these rows.
+ One can use <seealso marker="ets#foldl/3"><c>ets:foldl/3</c></seealso>
+ instead, but the <c>ets:select/2</c> call is far more efficient.
+ Without the translation provided by <c>ms_transform</c>,
+ one must struggle with writing match specifications terms
+ to accommodate this.</p>
+
+ <p>Consider a simple table of employees:</p>
+
<code type="none">
-record(emp, {empno, %Employee number as a string, the key
surname, %Surname of the employee
givenname, %Given name of employee
- dept, %Department one of {dev,sales,prod,adm}
- empyear}). %Year the employee was employed </code>
+ dept, %Department, one of {dev,sales,prod,adm}
+ empyear}). %Year the employee was employed</code>
+
<p>We create the table using:</p>
+
<code type="none">
-ets:new(emp_tab,[{keypos,#emp.empno},named_table,ordered_set]). </code>
- <p>Let's also fill it with some randomly chosen data for the examples:</p>
+ets:new(emp_tab, [{keypos,#emp.empno},named_table,ordered_set]).</code>
+
+ <p>We fill the table with randomly chosen data:</p>
+
<code type="none">
[{emp,"011103","Black","Alfred",sales,2000},
{emp,"041231","Doe","John",prod,2001},
@@ -96,167 +112,204 @@ ets:new(emp_tab,[{keypos,#emp.empno},named_table,ordered_set]). </code>
{emp,"535216","Chalker","Samuel",adm,1998},
{emp,"789789","Harrysson","Joe",adm,1996},
{emp,"963721","Scott","Juliana",dev,2003},
- {emp,"989891","Brown","Gabriel",prod,1999}] </code>
- <p>Now, the amount of data in the table is of course to small to justify
- complicated ets searches, but on real tables, using <c>select</c> to get
- exactly the data you want will increase efficiency remarkably.</p>
- <p>Lets say for example that we'd want the employee numbers of
- everyone in the sales department. One might use <c>ets:match</c>
- in such a situation:</p>
+ {emp,"989891","Brown","Gabriel",prod,1999}]</code>
+
+ <p>Assuming that we want the employee numbers of everyone in the sales
+ department, there are several ways.</p>
+
+ <p><c>ets:match/2</c> can be used:</p>
+
<pre>
1> <input>ets:match(emp_tab, {'_', '$1', '_', '_', sales, '_'}).</input>
-[["011103"],["076324"]] </pre>
- <p>Even though <c>ets:match</c> does not require a full match
- specification, but a simpler type, it's still somewhat unreadable, and
- one has little control over the returned result, it's always a list of
- lists. OK, one might use <c>ets:foldl</c> or
- <c>ets:foldr</c> instead:</p>
+[["011103"],["076324"]]</pre>
+
+ <p><c>ets:match/2</c> uses a simpler type of match specification,
+ but it is still unreadable, and one has little control over the
+ returned result. It is always a list of lists.</p>
+
+ <p><seealso marker="ets#foldl/3"><c>ets:foldl/3</c></seealso> or
+ <seealso marker="ets#foldr/3"><c>ets:foldr/3</c></seealso> can be used to avoid the nested lists:</p>
+
<code type="none">
ets:foldr(fun(#emp{empno = E, dept = sales},Acc) -> [E | Acc];
(_,Acc) -> Acc
end,
[],
- emp_tab). </code>
- <p>Running that would result in <c>["011103","076324"]</c>
- , which at least gets rid of the extra lists. The fun is also quite
+ emp_tab).</code>
+
+ <p>The result is <c>["011103","076324"]</c>. The fun is
straightforward, so the only problem is that all the data from the
- table has to be transferred from the table to the calling process for
- filtering. That's inefficient compared to the <c>ets:match</c>
+ table must be transferred from the table to the calling process for
+ filtering. That is inefficient compared to the <c>ets:match/2</c>
call where the filtering can be done "inside" the emulator and only
- the result is transferred to the process. Remember that ets tables are
- all about efficiency, if it wasn't for efficiency all of ets could be
- implemented in Erlang, as a process receiving requests and sending
- answers back. One uses ets because one wants performance, and
- therefore one wouldn't want all of the table transferred to the
- process for filtering. OK, let's look at a pure
- <c>ets:select</c> call that does what the <c>ets:foldr</c>
- does:</p>
+ the result is transferred to the process.</p>
+
+ <p>Consider a "pure" <c>ets:select/2</c> call that does what
+ <c>ets:foldr</c> does:</p>
+
<code type="none">
-ets:select(emp_tab,[{#emp{empno = '$1', dept = sales, _='_'},[],['$1']}]). </code>
- <p>Even though the record syntax is used, it's still somewhat hard to
+ets:select(emp_tab, [{#emp{empno = '$1', dept = sales, _='_'},[],['$1']}]).</code>
+
+ <p>Although the record syntax is used, it is still hard to
read and even harder to write. The first element of the tuple,
- <c>#emp{empno = '$1', dept = sales, _='_'}</c> tells what to
- match, elements not matching this will not be returned at all, as in
- the <c>ets:match</c> example. The second element, the empty list
- is a list of guard expressions, which we need none, and the third
+ <c>#emp{empno = '$1', dept = sales, _='_'}</c>, tells what to
+ match. Elements not matching this are not returned, as in
+ the <c>ets:match/2</c> example. The second element, the empty list,
+ is a list of guard expressions, which we do not need. The third
element is the list of expressions constructing the return value (in
- ets this almost always is a list containing one single term). In our
- case <c>'$1'</c> is bound to the employee number in the head
- (first element of tuple), and hence it is the employee number that is
- returned. The result is <c>["011103","076324"]</c>, just as in
- the <c>ets:foldr</c> example, but the result is retrieved much
- more efficiently in terms of execution speed and memory consumption.</p>
- <p>We have one efficient but hardly readable way of doing it and one
- inefficient but fairly readable (at least to the skilled Erlang
- programmer) way of doing it. With the use of <c>ets:fun2ms</c>,
- one could have something that is as efficient as possible but still is
- written as a filter using the fun syntax:</p>
+ ETS this is almost always a list containing one single term).
+ In our case <c>'$1'</c> is bound to the employee number in the head
+ (first element of the tuple), and hence the employee number is
+ returned. The result is <c>["011103","076324"]</c>, as in
+ the <c>ets:foldr/3</c> example, but the result is retrieved much
+ more efficiently in terms of execution speed and
+ memory consumption.</p>
+
+ <p>Using <c>ets:fun2ms/1</c>, we can combine the ease of use of
+ the <c>ets:foldr/3</c> and the efficiency of the pure
+ <c>ets:select/2</c> example:</p>
+
<code type="none">
-include_lib("stdlib/include/ms_transform.hrl").
-% ...
-
ets:select(emp_tab, ets:fun2ms(
fun(#emp{empno = E, dept = sales}) ->
E
- end)). </code>
- <p>This may not be the shortest of the expressions, but it requires no
- special knowledge of match specifications to read. The fun's head
- should simply match what you want to filter out and the body returns
- what you want returned. As long as the fun can be kept within the
- limits of the match specifications, there is no need to transfer all
- data of the table to the process for filtering as in the
- <c>ets:foldr</c> example. In fact it's even easier to read then
- the <c>ets:foldr</c> example, as the select call in itself
- discards anything that doesn't match, while the fun of the
- <c>foldr</c> call needs to handle both the elements matching and
- the ones not matching.</p>
- <p>It's worth noting in the above <c>ets:fun2ms</c> example that one
- needs to include <c>ms_transform.hrl</c> in the source code, as this is
- what triggers the parse transformation of the <c>ets:fun2ms</c> call
- to a valid match specification. This also implies that the
- transformation is done at compile time (except when called from the
- shell of course) and therefore will take no resources at all in
- runtime. So although you use the more intuitive fun syntax, it gets as
- efficient in runtime as writing match specifications by hand.</p>
- <p>Let's look at some more <c>ets</c> examples. Let's say one
- wants to get all the employee numbers of any employee hired before the
- year 2000. Using <c>ets:match</c> isn't an alternative here as
- relational operators cannot be expressed there. Once again, an
- <c>ets:foldr</c> could do it (slowly, but correct):</p>
+ end)).</code>
+
+ <p>This example requires no special knowledge of match
+ specifications to understand. The head of the fun matches what
+ you want to filter out and the body returns what you want
+ returned. As long as the fun can be kept within the limits of the
+ match specifications, there is no need to transfer all table data
+ to the process for filtering as in the <c>ets:foldr/3</c>
+ example. It is easier to read than the <c>ets:foldr/3</c> example,
+ as the select call in itself discards anything that does not
+ match, while the fun of the <c>ets:foldr/3</c> call needs to
+ handle both the elements matching and the ones not matching.</p>
+
+ <p>In the <c>ets:fun2ms/1</c> example above, it is needed to
+ include <c>ms_transform.hrl</c> in the source code, as this is
+ what triggers the parse transformation of the <c>ets:fun2ms/1</c>
+ call to a valid match specification. This also implies that the
+ transformation is done at compile time (except when called from
+ the shell) and therefore takes no resources in runtime. That is,
+ although you use the more intuitive fun syntax, it gets as
+ efficient in runtime as writing match specifications by hand.</p>
+ </section>
+
+ <section>
+ <title>Example 2</title>
+ <p>Assume that we want to get all the employee numbers of employees
+ hired before year 2000. Using <c>ets:match/2</c> is not
+ an alternative here, as relational operators cannot be
+ expressed there.
+ Once again, <c>ets:foldr/3</c> can do it (slowly, but correct):</p>
+
<code type="none"><![CDATA[
ets:foldr(fun(#emp{empno = E, empyear = Y},Acc) when Y < 2000 -> [E | Acc];
(_,Acc) -> Acc
end,
[],
emp_tab). ]]></code>
- <p>The result will be
- <c>["052341","076324","535216","789789","989891"]</c>, as
- expected. Now the equivalent expression using a handwritten match
- specification would look something like this:</p>
+
+ <p>The result is <c>["052341","076324","535216","789789","989891"]</c>,
+ as expected. The equivalent expression using a handwritten match
+ specification would look like this:</p>
+
<code type="none"><![CDATA[
-ets:select(emp_tab,[{#emp{empno = '$1', empyear = '$2', _='_'},
+ets:select(emp_tab, [{#emp{empno = '$1', empyear = '$2', _='_'},
[{'<', '$2', 2000}],
['$1']}]). ]]></code>
- <p>This gives the same result, the <c><![CDATA[[{'<', '$2', 2000}]]]></c> is in
- the guard part and therefore discards anything that does not have a
- empyear (bound to '$2' in the head) less than 2000, just as the guard
- in the <c>foldl</c> example. Lets jump on to writing it using
- <c>ets:fun2ms</c></p>
+
+ <p>This gives the same result. <c><![CDATA[[{'<', '$2', 2000}]]]></c> is in
+ the guard part and therefore discards anything that does not have an
+ <c>empyear</c> (bound to <c>'$2'</c> in the head) less than 2000, as
+ the guard in the <c>foldr/3</c> example.</p>
+
+ <p>We write it using <c>ets:fun2ms/1</c>:</p>
+
<code type="none"><![CDATA[
-include_lib("stdlib/include/ms_transform.hrl").
-% ...
-
ets:select(emp_tab, ets:fun2ms(
fun(#emp{empno = E, empyear = Y}) when Y < 2000 ->
- E
+ E
end)). ]]></code>
- <p>Obviously readability is gained by using the parse transformation.</p>
- <p>I'll show some more examples without the tiresome
- comparing-to-alternatives stuff. Let's say we'd want the whole object
- matching instead of only one element. We could of course assign a
- variable to every part of the record and build it up once again in the
- body of the <c>fun</c>, but it's easier to do like this:</p>
+ </section>
+
+ <section>
+ <title>Example 3</title>
+ <p>Assume that we want the whole object matching instead of only one
+ element. One alternative is to assign a variable to every part
+ of the record and build it up once again in the body of the fun, but
+ the following is easier:</p>
+
<code type="none"><![CDATA[
ets:select(emp_tab, ets:fun2ms(
fun(Obj = #emp{empno = E, empyear = Y})
when Y < 2000 ->
Obj
- end)). ]]></code>
- <p>Just as in ordinary Erlang matching, you can bind a variable to the
- whole matched object using a "match in then match", i.e. a
- <c>=</c>. Unfortunately this is not general in <c>fun's</c> translated
- to match specifications, only on the "top level", i.e. matching the
- <em>whole</em> object arriving to be matched into a separate variable,
- is it allowed. For the one's used to writing match specifications by
- hand, I'll have to mention that the variable A will simply be
- translated into '$_'. It's not general, but it has very common usage,
- why it is handled as a special, but useful, case. If this bothers you,
- the pseudo function <c>object</c> also returns the whole matched
- object, see the part about caveats and limitations below.</p>
- <p>Let's do something in the <c>fun</c>'s body too: Let's say
- that someone realizes that there are a few people having an employee
- number beginning with a zero (<c>0</c>), which shouldn't be
- allowed. All those should have their numbers changed to begin with a
- one (<c>1</c>) instead and one wants the
- list <c><![CDATA[[{<Old empno>,<New empno>}]]]></c> created:</p>
+ end)).]]></code>
+
+ <p>As in ordinary Erlang matching, you can bind a variable to the
+ whole matched object using a "match inside the match", that is, a
+ <c>=</c>. Unfortunately in funs translated to match specifications,
+ it is allowed only at the "top-level", that is,
+ matching the <em>whole</em> object arriving to be matched
+ into a separate variable.
+ If you are used to writing match specifications by hand, we
+ mention that variable A is simply translated into '$_'.
+ Alternatively, pseudo function <c>object/0</c>
+ also returns the whole matched object, see section
+ <seealso marker="#warnings_and_restrictions">
+ Warnings and Restrictions</seealso>.</p>
+ </section>
+
+ <section>
+ <title>Example 4</title>
+ <p>This example concerns the body of the fun. Assume that all employee
+ numbers beginning with zero (<c>0</c>) must be changed to begin with
+ one (<c>1</c>) instead, and that we want to create the list
+ <c><![CDATA[[{<Old empno>,<New empno>}]]]></c>:</p>
+
<code type="none">
ets:select(emp_tab, ets:fun2ms(
fun(#emp{empno = [$0 | Rest] }) ->
{[$0|Rest],[$1|Rest]}
- end)). </code>
- <p>As a matter of fact, this query hits the feature of partially bound
- keys in the table type <c>ordered_set</c>, so that not the whole
- table need be searched, only the part of the table containing keys
- beginning with <c>0</c> is in fact looked into. </p>
- <p>The fun of course can have several clauses, so that if one could do
- the following: For each employee, if he or she is hired prior to 1997,
- return the tuple <c><![CDATA[{inventory, <employee number>}]]></c>, for each hired 1997
- or later, but before 2001, return <c><![CDATA[{rookie, <employee number>}]]></c>, for all others return <c><![CDATA[{newbie, <employee number>}]]></c>. All except for the ones named <c>Smith</c> as
- they would be affronted by anything other than the tag
- <c>guru</c> and that is also what's returned for their numbers;
- <c><![CDATA[{guru, <employee number>}]]></c>:</p>
+ end)).</code>
+
+ <p>This query hits the feature of partially bound
+ keys in table type <c>ordered_set</c>, so that not the whole
+ table needs to be searched, only the part containing keys
+ beginning with <c>0</c> is looked into.</p>
+ </section>
+
+ <section>
+ <title>Example 5</title>
+ <p>The fun can have many clauses. Assume that we want to do
+ the following:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>If an employee started before 1997, return the tuple
+ <c><![CDATA[{inventory, <employee number>}]]></c>.</p>
+ </item>
+ <item>
+ <p>If an employee started 1997 or later, but before 2001, return
+ <c><![CDATA[{rookie, <employee number>}]]></c>.</p>
+ </item>
+ <item>
+ <p>For all other employees, return
+ <c><![CDATA[{newbie, <employee number>}]]></c>, except for those
+ named <c>Smith</c> as they would be affronted by anything other
+ than the tag <c>guru</c> and that is also what is returned for their
+ numbers: <c><![CDATA[{guru, <employee number>}]]></c>.</p>
+ </item>
+ </list>
+
+ <p>This is accomplished as follows:</p>
+
<code type="none"><![CDATA[
ets:select(emp_tab, ets:fun2ms(
fun(#emp{empno = E, surname = "Smith" }) ->
@@ -268,7 +321,9 @@ ets:select(emp_tab, ets:fun2ms(
(#emp{empno = E, empyear = Y}) -> % 1997 -- 2001
{rookie, E}
end)). ]]></code>
- <p>The result will be:</p>
+
+ <p>The result is as follows:</p>
+
<code type="none">
[{rookie,"011103"},
{rookie,"041231"},
@@ -278,162 +333,207 @@ ets:select(emp_tab, ets:fun2ms(
{rookie,"535216"},
{inventory,"789789"},
{newbie,"963721"},
- {rookie,"989891"}] </code>
- <p>and so the Smith's will be happy...</p>
- <p>So, what more can you do? Well, the simple answer would be; look
- in the documentation of match specifications in ERTS users
- guide. However let's briefly go through the most useful "built in
- functions" that you can use when the <c>fun</c> is to be
- translated into a match specification by <c>ets:fun2ms</c> (it's
- worth mentioning, although it might be obvious to some, that calling
- other functions than the one's allowed in match specifications cannot
- be done. No "usual" Erlang code can be executed by the <c>fun</c> being
- translated by <c>fun2ms</c>, the <c>fun</c> is after all limited
+ {rookie,"989891"}]</code>
+ </section>
+
+ <section>
+ <title>Useful BIFs</title>
+ <p>What more can you do? A simple answer is: see the documentation of
+ <seealso marker="erts:match_spec">match specifications</seealso>
+ in ERTS User's Guide.
+ However, the following is a brief overview of the most useful "built-in
+ functions" that you can use when the fun is to be translated into a match
+ specification by
+ <seealso marker="ets#fun2ms/1"> <c>ets:fun2ms/1</c></seealso>. It is not
+ possible to call other functions than those allowed in match
+ specifications. No "usual" Erlang code can be executed by the fun that
+ is translated by <c>ets:fun2ms/1</c>. The fun is limited
exactly to the power of the match specifications, which is
- unfortunate, but the price one has to pay for the execution speed of
- an <c>ets:select</c> compared to <c>ets:foldl/foldr</c>).</p>
- <p>The head of the <c>fun</c> is obviously a head matching (or mismatching)
- <em>one</em> parameter, one object of the table we <c>select</c>
+ unfortunate, but the price one must pay for the execution speed of
+ <c>ets:select/2</c> compared to <c>ets:foldl/foldr</c>.</p>
+
+ <p>The head of the fun is a head matching (or mismatching)
+ <em>one</em> parameter, one object of the table we select
from. The object is always a single variable (can be <c>_</c>) or
- a tuple, as that's what's in <c>ets, dets</c> and
- <c>mnesia</c> tables (the match specification returned by
- <c>ets:fun2ms</c> can of course be used with
- <c>dets:select</c> and <c>mnesia:select</c> as well as
- with <c>ets:select</c>). The use of <c>=</c> in the head
- is allowed (and encouraged) on the top level.</p>
+ a tuple, as ETS, Dets, and Mnesia tables include
+ that. The match specification returned by <c>ets:fun2ms/1</c> can
+ be used with <c>dets:select/2</c> and <c>mnesia:select/2</c>, and
+ with <c>ets:select/2</c>. The use of <c>=</c> in the head
+ is allowed (and encouraged) at the top-level.</p>
+
<p>The guard section can contain any guard expression of Erlang.
- Even the "old" type test are allowed on the toplevel of the guard
- (<c>integer(X)</c> instead of <c>is_integer(X)</c>). As the new type tests (the
- <c>is_</c> tests) are in practice just guard bif's they can also
- be called from within the body of the fun, but so they can in ordinary
- Erlang code. Also arithmetics is allowed, as well as ordinary guard
- bif's. Here's a list of bif's and expressions:</p>
+ The following is a list of BIFs and expressions:</p>
+
<list type="bulleted">
- <item>The type tests: is_atom, is_float, is_integer,
- is_list, is_number, is_pid, is_port, is_reference, is_tuple,
- is_binary, is_function, is_record</item>
- <item>The boolean operators: not, and, or, andalso, orelse </item>
- <item>The relational operators: >, >=, &lt;, =&lt;, =:=, ==, =/=, /=</item>
- <item>Arithmetics: +, -, *, div, rem</item>
- <item>Bitwise operators: band, bor, bxor, bnot, bsl, bsr</item>
- <item>The guard bif's: abs, element, hd, length, node, round, size, tl,
- trunc, self</item>
- <item>The obsolete type test (only in guards):
- atom, float, integer,
- list, number, pid, port, reference, tuple,
- binary, function, record</item>
+ <item>
+ <p>Type tests: <c>is_atom</c>, <c>is_float</c>, <c>is_integer</c>,
+ <c>is_list</c>, <c>is_number</c>, <c>is_pid</c>, <c>is_port</c>,
+ <c>is_reference</c>, <c>is_tuple</c>, <c>is_binary</c>,
+ <c>is_function</c>, <c>is_record</c></p>
+ </item>
+ <item>
+ <p>Boolean operators: <c>not</c>, <c>and</c>, <c>or</c>,
+ <c>andalso</c>, <c>orelse</c></p>
+ </item>
+ <item>
+ <p>Relational operators: &gt;, &gt;=, &lt;, =&lt;, =:=, ==, =/=, /=</p>
+ </item>
+ <item>
+ <p>Arithmetics: <c>+</c>, <c>-</c>, <c>*</c>,
+ <c>div</c>, <c>rem</c></p>
+ </item>
+ <item>
+ <p>Bitwise operators: <c>band</c>, <c>bor</c>, <c>bxor</c>, <c>bnot</c>,
+ <c>bsl</c>, <c>bsr</c></p>
+ </item>
+ <item>
+ <p>The guard BIFs: <c>abs</c>, <c>element</c>,
+ <c>hd</c>, <c>length</c>,
+ <c>node</c>, <c>round</c>, <c>size</c>, <c>tl</c>, <c>trunc</c>,
+ <c>self</c></p>
+ </item>
</list>
+
<p>Contrary to the fact with "handwritten" match specifications, the
<c>is_record</c> guard works as in ordinary Erlang code.</p>
- <p>Semicolons (<c>;</c>) in guards are allowed, the result will be (as
- expected) one "match_spec-clause" for each semicolon-separated
- part of the guard. The semantics being identical to the Erlang
+
+ <p>Semicolons (<c>;</c>) in guards are allowed, the result is (as
+ expected) one "match specification clause" for each semicolon-separated
+ part of the guard. The semantics is identical to the Erlang
semantics.</p>
- <p>The body of the <c>fun</c> is used to construct the
- resulting value. When selecting from tables one usually just construct
+
+ <p>The body of the fun is used to construct the
+ resulting value. When selecting from tables, one usually construct
a suiting term here, using ordinary Erlang term construction, like
- tuple parentheses, list brackets and variables matched out in the
- head, possibly in conjunction with the occasional constant. Whatever
- expressions are allowed in guards are also allowed here, but there are
- no special functions except <c>object</c> and
+ tuple parentheses, list brackets, and variables matched out in the
+ head, possibly with the occasional constant. Whatever
+ expressions are allowed in guards are also allowed here, but no special
+ functions exist except <c>object</c> and
<c>bindings</c> (see further down), which returns the whole
- matched object and all known variable bindings respectively.</p>
+ matched object and all known variable bindings, respectively.</p>
+
<p>The <c>dbg</c> variants of match specifications have an
- imperative approach to the match specification body, the ets dialect
- hasn't. The fun body for <c>ets:fun2ms</c> returns the result
- without side effects, and as matching (<c>=</c>) in the body of
+ imperative approach to the match specification body, the ETS
+ dialect has not. The fun body for <c>ets:fun2ms/1</c> returns the result
+ without side effects. As matching (<c>=</c>) in the body of
the match specifications is not allowed (for performance reasons) the
- only thing left, more or less, is term construction...</p>
- <p>Let's move on to the <c>dbg</c> dialect, the slightly
- different match specifications translated by <c>dbg:fun2ms</c>. </p>
- <p>The same reasons for using the parse transformation applies to
- <c>dbg</c>, maybe even more so as filtering using Erlang code is
- simply not a good idea when tracing (except afterwards, if you trace
- to file). The concept is similar to that of <c>ets:fun2ms</c>
- except that you usually use it directly from the shell (which can also
- be done with <c>ets:fun2ms</c>). </p>
- <p>Let's manufacture a toy module to trace on </p>
+ only thing left, more or less, is term construction.</p>
+ </section>
+
+ <section>
+ <title>Example with dbg</title>
+ <p>This section describes the slightly different match specifications
+ translated by <seealso marker="runtime_tools:dbg#fun2ms/1">
+ <c>dbg:fun2ms/1</c></seealso>.</p>
+
+ <p>The same reasons for using the parse transformation apply to
+ <c>dbg</c>, maybe even more, as filtering using Erlang code is
+ not a good idea when tracing (except afterwards, if you trace
+ to file). The concept is similar to that of <c>ets:fun2ms/1</c>
+ except that you usually use it directly from the shell
+ (which can also be done with <c>ets:fun2ms/1</c>).</p>
+
+ <p>The following is an example module to trace on:</p>
+
<code type="none">
-module(toy).
-export([start/1, store/2, retrieve/1]).
start(Args) ->
- toy_table = ets:new(toy_table,Args).
+ toy_table = ets:new(toy_table, Args).
store(Key, Value) ->
- ets:insert(toy_table,{Key,Value}).
+ ets:insert(toy_table, {Key,Value}).
retrieve(Key) ->
- [{Key, Value}] = ets:lookup(toy_table,Key),
- Value. </code>
- <p>During model testing, the first test bails out with a
+ [{Key, Value}] = ets:lookup(toy_table, Key),
+ Value.</code>
+
+ <p>During model testing, the first test results in
<c>{badmatch,16}</c> in <c>{toy,start,1}</c>, why?</p>
- <p>We suspect the ets call, as we match hard on the return value, but
- want only the particular <c>new</c> call with
- <c>toy_table</c> as first parameter.
- So we start a default tracer on the node:</p>
+
+ <p>We suspect the <c>ets:new/2</c> call, as we match hard on the
+ return value, but want only the particular <c>new/2</c> call with
+ <c>toy_table</c> as first parameter. So we start a default tracer
+ on the node:</p>
+
<pre>
1> <input>dbg:tracer().</input>
{ok,&lt;0.88.0>}</pre>
- <p>And so we turn on call tracing for all processes, we are going to
- make a pretty restrictive trace pattern, so there's no need to call
- trace only a few processes (it usually isn't):</p>
+
+ <p>We turn on call tracing for all processes, we want to
+ make a pretty restrictive trace pattern, so there is no need to call
+ trace only a few processes (usually it is not):</p>
+
<pre>
2> <input>dbg:p(all,call).</input>
-{ok,[{matched,nonode@nohost,25}]} </pre>
- <p>It's time to specify the filter. We want to view calls that resemble
- <c><![CDATA[ets:new(toy_table,<something>)]]></c>:</p>
+{ok,[{matched,nonode@nohost,25}]}</pre>
+
+ <p>We specify the filter, we want to view calls that resemble
+ <c><![CDATA[ets:new(toy_table, <something>)]]></c>:</p>
+
<pre>
3> <input>dbg:tp(ets,new,dbg:fun2ms(fun([toy_table,_]) -> true end)).</input>
-{ok,[{matched,nonode@nohost,1},{saved,1}]} </pre>
- <p>As can be seen, the <c>fun</c>'s used with
- <c>dbg:fun2ms</c> takes a single list as parameter instead of a
+{ok,[{matched,nonode@nohost,1},{saved,1}]}</pre>
+
+ <p>As can be seen, the fun used with
+ <c>dbg:fun2ms/1</c> takes a single list as parameter instead of a
single tuple. The list matches a list of the parameters to the traced
- function. A single variable may also be used of course. The body
- of the fun expresses in a more imperative way actions to be taken if
- the fun head (and the guards) matches. I return <c>true</c> here, but it's
- only because the body of a fun cannot be empty, the return value will
- be discarded. </p>
- <p>When we run the test of our module now, we get the following trace
- output:</p>
+ function. A single variable can also be used. The body
+ of the fun expresses, in a more imperative way, actions to be taken if
+ the fun head (and the guards) matches. <c>true</c> is returned here,
+ only because the body of a fun cannot be empty. The return value
+ is discarded.</p>
+
+ <p>The following trace output is received during test:</p>
+
<code type="none"><![CDATA[
-(<0.86.0>) call ets:new(toy_table,[ordered_set]) ]]></code>
- <p>Let's play we haven't spotted the problem yet, and want to see what
- <c>ets:new</c> returns. We do a slightly different trace
- pattern:</p>
+(<0.86.0>) call ets:new(toy_table, [ordered_set]) ]]></code>
+
+ <p>Assume that we have not found the problem yet, and want to see what
+ <c>ets:new/2</c> returns. We use a slightly different trace pattern:</p>
+
<pre>
4> <input>dbg:tp(ets,new,dbg:fun2ms(fun([toy_table,_]) -> return_trace() end)).</input></pre>
- <p>Resulting in the following trace output when we run the test:</p>
+
+ <p>The following trace output is received during test:</p>
+
<code type="none"><![CDATA[
(<0.86.0>) call ets:new(toy_table,[ordered_set])
(<0.86.0>) returned from ets:new/2 -> 24 ]]></code>
- <p>The call to <c>return_trace</c>, makes a trace message appear
+
+ <p>The call to <c>return_trace</c> results in a trace message
when the function returns. It applies only to the specific function call
triggering the match specification (and matching the head/guards of
- the match specification). This is the by far the most common call in the
+ the match specification). This is by far the most common call in the
body of a <c>dbg</c> match specification.</p>
- <p>As the test now fails with <c>{badmatch,24}</c>, it's obvious
- that the badmatch is because the atom <c>toy_table</c> does not
- match the number returned for an unnamed table. So we spotted the
- problem, the table should be named and the arguments supplied by our
- test program does not include <c>named_table</c>. We rewrite the
- start function to:</p>
+
+ <p>The test now fails with <c>{badmatch,24}</c> because the atom
+ <c>toy_table</c> does not match the number returned for an unnamed table.
+ So, the problem is found, the table is to be named, and the arguments
+ supplied by the test program do not include <c>named_table</c>. We
+ rewrite the start function:</p>
+
<code type="none">
start(Args) ->
- toy_table = ets:new(toy_table,[named_table |Args]). </code>
- <p>And with the same tracing turned on, we get the following trace
- output:</p>
+ toy_table = ets:new(toy_table, [named_table|Args]).</code>
+
+ <p>With the same tracing turned on, the following trace output is
+ received:</p>
+
<code type="none"><![CDATA[
(<0.86.0>) call ets:new(toy_table,[named_table,ordered_set])
(<0.86.0>) returned from ets:new/2 -> toy_table ]]></code>
- <p>Very well. Let's say the module now passes all testing and goes into
- the system. After a while someone realizes that the table
- <c>toy_table</c> grows while the system is running and that for some
- reason there are a lot of elements with atom's as keys. You had
- expected only integer keys and so does the rest of the system. Well,
- obviously not all of the system. You turn on call tracing and try to
- see calls to your module with an atom as the key:</p>
+
+ <p>Assume that the module now passes all testing and goes into
+ the system. After a while, it is found that table
+ <c>toy_table</c> grows while the system is running and that
+ there are many elements with atoms as keys. We expected
+ only integer keys and so does the rest of the system, but
+ clearly not the entire system. We turn on call tracing and try to
+ see calls to the module with an atom as the key:</p>
+
<pre>
1> <input>dbg:tracer().</input>
{ok,&lt;0.88.0>}
@@ -441,80 +541,101 @@ start(Args) ->
{ok,[{matched,nonode@nohost,25}]}
3> <input>dbg:tpl(toy,store,dbg:fun2ms(fun([A,_]) when is_atom(A) -> true end)).</input>
{ok,[{matched,nonode@nohost,1},{saved,1}]}</pre>
- <p>We use <c>dbg:tpl</c> here to make sure to catch local calls
- (let's say the module has grown since the smaller version and we're
- not sure this inserting of atoms is not done locally...). When in
- doubt always use local call tracing.</p>
- <p>Let's say nothing happens when we trace in this way. Our function
- is never called with these parameters. We make the conclusion that
- someone else (some other module) is doing it and we realize that we
- must trace on ets:insert and want to see the calling function. The
- calling function may be retrieved using the match specification
- function <c>caller</c> and to get it into the trace message, one
- has to use the match spec function <c>message</c>. The filter
- call looks like this (looking for calls to <c>ets:insert</c>):</p>
+
+ <p>We use <c>dbg:tpl/3</c> to ensure to catch local calls
+ (assume that the module has grown since the smaller version and we are
+ unsure if this inserting of atoms is not done locally). When in
+ doubt, always use local call tracing.</p>
+
+ <p>Assume that nothing happens when tracing in this way. The function
+ is never called with these parameters. We conclude that
+ someone else (some other module) is doing it and realize that we
+ must trace on <c>ets:insert/2</c> and want to see the calling function.
+ The calling function can be retrieved using the match specification
+ function <c>caller</c>. To get it into the trace message, the match
+ specification function <c>message</c> must be used. The filter
+ call looks like this (looking for calls to <c>ets:insert/2</c>):</p>
+
<pre>
4> <input>dbg:tpl(ets,insert,dbg:fun2ms(fun([toy_table,{A,_}]) when is_atom(A) -> </input>
<input> message(caller()) </input>
<input> end)). </input>
-{ok,[{matched,nonode@nohost,1},{saved,2}]} </pre>
- <p>The caller will now appear in the "additional message" part of the
- trace output, and so after a while, the following output comes:</p>
+{ok,[{matched,nonode@nohost,1},{saved,2}]}</pre>
+
+ <p>The caller is now displayed in the "additional message" part of the
+ trace output, and the following is displayed after a while:</p>
+
<code type="none"><![CDATA[
(<0.86.0>) call ets:insert(toy_table,{garbage,can}) ({evil_mod,evil_fun,2}) ]]></code>
- <p>You have found out that the function <c>evil_fun</c> of the
- module <c>evil_mod</c>, with arity <c>2</c>, is the one
- causing all this trouble.</p>
- <p>This was just a toy example, but it illustrated the most used
- calls in match specifications for <c>dbg</c> The other, more
- esotheric calls are listed and explained in the <em>Users guide of the ERTS application</em>, they really are beyond the scope of this
- document.</p>
- <p>To end this chatty introduction with something more precise, here
- follows some parts about caveats and restrictions concerning the fun's
- used in conjunction with <c>ets:fun2ms</c> and
- <c>dbg:fun2ms</c>:</p>
+
+ <p>You have realized that function <c>evil_fun</c> of the
+ <c>evil_mod</c> module, with arity <c>2</c>, is causing all this trouble.
+ </p>
+
+ <p>This example illustrates the most used calls in match specifications for
+ <c>dbg</c>. The other, more esoteric, calls are listed and explained in
+ <seealso marker="erts:match_spec">Match specifications in Erlang</seealso>
+ in ERTS User's Guide, as they are beyond
+ the scope of this description.</p>
+ </section>
+
+ <section>
+ <title>Warnings and Restrictions</title>
+ <marker id="warnings_and_restrictions"/>
+ <p>The following warnings and restrictions apply to the funs used in
+ with <c>ets:fun2ms/1</c> and <c>dbg:fun2ms/1</c>.</p>
+
<warning>
- <p>To use the pseudo functions triggering the translation, one
- <em>has to</em> include the header file <c>ms_transform.hrl</c>
- in the source code. Failure to do so will possibly result in
- runtime errors rather than compile time, as the expression may
+ <p>To use the pseudo functions triggering the translation,
+ ensure to include the header file <c>ms_transform.hrl</c>
+ in the source code. Failure to do so possibly results in
+ runtime errors rather than compile time, as the expression can
be valid as a plain Erlang program without translation.</p>
</warning>
+
<warning>
- <p>The <c>fun</c> has to be literally constructed inside the
- parameter list to the pseudo functions. The <c>fun</c> cannot
+ <p>The fun must be literally constructed inside the
+ parameter list to the pseudo functions. The fun cannot
be bound to a variable first and then passed to
- <c>ets:fun2ms</c> or <c>dbg:fun2ms</c>, i.e this
- will work: <c>ets:fun2ms(fun(A) -> A end)</c> but not this:
- <c>F = fun(A) -> A end, ets:fun2ms(F)</c>. The later will result
- in a compile time error if the header is included, otherwise a
- runtime error. Even if the later construction would ever
- appear to work, it really doesn't, so don't ever use it.</p>
+ <c>ets:fun2ms/1</c> or <c>dbg:fun2ms/1</c>. For example,
+ <c>ets:fun2ms(fun(A) -> A end)</c> works, but not
+ <c>F = fun(A) -> A end, ets:fun2ms(F)</c>. The latter results
+ in a compile-time error if the header is included, otherwise a
+ runtime error.</p>
</warning>
- <p>Several restrictions apply to the fun that is being translated
- into a match_spec. To put it simple you cannot use anything in
- the fun that you cannot use in a match_spec. This means that,
+
+ <p>Many restrictions apply to the fun that is translated into a match
+ specification. To put it simple: you cannot use anything in the fun
+ that you cannot use in a match specification. This means that,
among others, the following restrictions apply to the fun itself:</p>
+
<list type="bulleted">
- <item>Functions written in Erlang cannot be called, neither
- local functions, global functions or real fun's</item>
- <item>Everything that is written as a function call will be
- translated into a match_spec call to a builtin function, so that
- the call <c>is_list(X)</c> will be translated to <c>{'is_list', '$1'}</c> (<c>'$1'</c> is just an example, the numbering may
- vary). If one tries to call a function that is not a match_spec
- builtin, it will cause an error.</item>
- <item>Variables occurring in the head of the <c>fun</c> will be
- replaced by match_spec variables in the order of occurrence, so
- that the fragment <c>fun({A,B,C})</c> will be replaced by
- <c>{'$1', '$2', '$3'}</c> etc. Every occurrence of such a
- variable later in the match_spec will be replaced by a
- match_spec variable in the same way, so that the fun
- <c>fun({A,B}) when is_atom(A) -> B end</c> will be translated into
- <c>[{{'$1','$2'},[{is_atom,'$1'}],['$2']}]</c>.</item>
<item>
- <p>Variables that are not appearing in the head are imported
- from the environment and made into
- match_spec <c>const</c> expressions. Example from the shell:</p>
+ <p>Functions written in Erlang cannot be called, neither can
+ local functions, global functions, or real funs.</p>
+ </item>
+ <item>
+ <p>Everything that is written as a function call is translated
+ into a match specification call to a built-in function, so that
+ the call <c>is_list(X)</c> is translated to <c>{'is_list', '$1'}</c>
+ (<c>'$1'</c> is only an example, the numbering can vary).
+ If one tries to call a function that is not a match specification
+ built-in, it causes an error.</p>
+ </item>
+ <item>
+ <p>Variables occurring in the head of the fun are replaced by
+ match specification variables in the order of occurrence, so
+ that fragment <c>fun({A,B,C})</c> is replaced by
+ <c>{'$1', '$2', '$3'}</c>, and so on. Every occurrence of such a
+ variable in the match specification is replaced by a match
+ specification variable in the same way, so that the fun
+ <c>fun({A,B}) when is_atom(A) -> B end</c> is translated into
+ <c>[{{'$1','$2'},[{is_atom,'$1'}],['$2']}]</c>.</p>
+ </item>
+ <item>
+ <p>Variables that are not included in the head are imported
+ from the environment and made into match specification
+ <c>const</c> expressions. Example from the shell:</p>
<pre>
1> <input>X = 25.</input>
25
@@ -523,7 +644,7 @@ start(Args) ->
</item>
<item>
<p>Matching with <c>=</c> cannot be used in the body. It can only
- be used on the top level in the head of the fun.
+ be used on the top-level in the head of the fun.
Example from the shell again:</p>
<pre>
1> <input>ets:fun2ms(fun({A,[B|C]} = D) when A > B -> D end).</input>
@@ -534,106 +655,125 @@ match_spec
{error,transform_error}
3> <input>ets:fun2ms(fun({A,[B|C]}) when A > B -> D = [B|C], D end).</input>
Error: fun with body matching ('=' in body) is illegal as match_spec
-{error,transform_error} </pre>
- <p>All variables are bound in the head of a match_spec, so the
- translator can not allow multiple bindings. The special case
- when matching is done on the top level makes the variable bind
- to <c>'$_'</c> in the resulting match_spec, it is to allow a more
- natural access to the whole matched object. The pseudo
- function <c>object()</c> could be used instead, see below.
- The following expressions are translated equally: </p>
+{error,transform_error}</pre>
+ <p>All variables are bound in the head of a match specification, so
+ the translator cannot allow multiple bindings. The special case
+ when matching is done on the top-level makes the variable bind
+ to <c>'$_'</c> in the resulting match specification. It is to allow
+ a more natural access to the whole matched object. Pseudo
+ function <c>object()</c> can be used instead, see below.</p>
+ <p>The following expressions are translated equally:</p>
<code type="none">
ets:fun2ms(fun({a,_} = A) -> A end).
ets:fun2ms(fun({a,_}) -> object() end).</code>
</item>
<item>
- <p>The special match_spec variables <c>'$_'</c> and <c>'$*'</c>
+ <p>The special match specification variables <c>'$_'</c> and <c>'$*'</c>
can be accessed through the pseudo functions <c>object()</c>
(for <c>'$_'</c>) and <c>bindings()</c> (for <c>'$*'</c>).
- as an example, one could translate the following
- <c>ets:match_object/2</c> call to a <c>ets:select</c> call:</p>
+ As an example, one can translate the following
+ <c>ets:match_object/2</c> call to a <c>ets:select/2</c> call:</p>
<code type="none">
ets:match_object(Table, {'$1',test,'$2'}). </code>
- <p>...is the same as...</p>
+ <p>This is the same as:</p>
<code type="none">
ets:select(Table, ets:fun2ms(fun({A,test,B}) -> object() end)).</code>
- <p>(This was just an example, in this simple case the former
- expression is probably preferable in terms of readability).
- The <c>ets:select/2</c> call will conceptually look like this
+ <p>In this simple case, the former
+ expression is probably preferable in terms of readability.</p>
+ <p>The <c>ets:select/2</c> call conceptually looks like this
in the resulting code:</p>
<code type="none">
ets:select(Table, [{{'$1',test,'$2'},[],['$_']}]).</code>
- <p>Matching on the top level of the fun head might feel like a
+ <p>Matching on the top-level of the fun head can be a
more natural way to access <c>'$_'</c>, see above.</p>
</item>
- <item>Term constructions/literals are translated as much as is
- needed to get them into valid match_specs, so that tuples are
- made into match_spec tuple constructions (a one element tuple
- containing the tuple) and constant expressions are used when
- importing variables from the environment. Records are also
- translated into plain tuple constructions, calls to element
- etc. The guard test <c>is_record/2</c> is translated into
- match_spec code using the three parameter version that's built
- into match_specs, so that <c>is_record(A,t)</c> is translated
- into <c>{is_record,'$1',t,5}</c> given that the record size of
- record type <c>t</c> is 5.</item>
- <item>Language constructions like <c>case</c>, <c>if</c>,
- <c>catch</c> etc that are not present in match_specs are not
- allowed.</item>
- <item>If the header file <c>ms_transform.hrl</c> is not included,
- the fun won't be translated, which may result in a
- <em>runtime error</em> (depending on if the fun is valid in a
- pure Erlang context). Be absolutely sure that the header is
- included when using <c>ets</c> and <c>dbg:fun2ms/1</c> in
- compiled code.</item>
- <item>If the pseudo function triggering the translation is
- <c>ets:fun2ms/1</c>, the fun's head must contain a single
- variable or a single tuple. If the pseudo function is
- <c>dbg:fun2ms/1</c> the fun's head must contain a single
- variable or a single list.</item>
+ <item>
+ <p>Term constructions/literals are translated as much as is needed to
+ get them into valid match specification. This way tuples are made
+ into match specification tuple constructions (a one element tuple
+ containing the tuple) and constant expressions are used when
+ importing variables from the environment. Records are also
+ translated into plain tuple constructions, calls to element,
+ and so on. The guard test <c>is_record/2</c> is translated into
+ match specification code using the three parameter version that is
+ built into match specification, so that <c>is_record(A,t)</c> is
+ translated into <c>{is_record,'$1',t,5}</c> if the record
+ size of record type <c>t</c> is 5.</p>
+ </item>
+ <item>
+ <p>Language constructions such as <c>case</c>, <c>if</c>, and
+ <c>catch</c> that are not present in match specifications are not
+ allowed.</p>
+ </item>
+ <item>
+ <p>If header file <c>ms_transform.hrl</c> is not included,
+ the fun is not translated, which can result in a
+ <em>runtime error</em> (depending on whether the fun is
+ valid in a pure Erlang context).</p>
+ <p>Ensure that the header is included when using <c>ets</c> and
+ <c>dbg:fun2ms/1</c> in compiled code.</p>
+ </item>
+ <item>
+ <p>If pseudo function triggering the translation is
+ <c>ets:fun2ms/1</c>, the head of the fun must contain a single
+ variable or a single tuple. If the pseudo function is
+ <c>dbg:fun2ms/1</c>, the head of the fun must contain a single
+ variable or a single list.</p>
+ </item>
</list>
- <p>The translation from fun's to match_specs is done at compile
+ <p>The translation from funs to match specifications is done at compile
time, so runtime performance is not affected by using these pseudo
- functions. The compile time might be somewhat longer though. </p>
- <p>For more information about match_specs, please read about them
- in <em>ERTS users guide</em>.</p>
- </description>
+ functions.</p>
+ <p>For more information about match specifications, see the
+ <seealso marker="erts:match_spec">Match specifications in Erlang</seealso>
+ in ERTS User's Guide.</p>
+ </section>
+
<funcs>
<func>
- <name name="parse_transform" arity="2"/>
- <fsummary>Transforms Erlang abstract format containing calls to ets/dbg:fun2ms into literal match specifications.</fsummary>
- <type_desc variable="Options">Option list, required but not used.</type_desc>
+ <name name="format_error" arity="1"/>
+ <fsummary>Error formatting function as required by the parse transformation interface.</fsummary>
<desc>
- <p>Implements the actual transformation at compile time. This
- function is called by the compiler to do the source code
- transformation if and when the <c>ms_transform.hrl</c> header
- file is included in your source code. See the <c>ets</c> and
- <c>dbg</c>:<c>fun2ms/1</c> function manual pages for
- documentation on how to use this parse_transform, see the
- <c>match_spec</c> chapter in <c>ERTS</c> users guide for a
- description of match specifications. </p>
+ <p>Takes an error code returned by one of the other functions
+ in the module and creates a textual description of the
+ error.</p>
</desc>
</func>
+
<func>
- <name name="transform_from_shell" arity="3"/>
- <fsummary>Used when transforming fun's created in the shell into match_specifications.</fsummary>
- <type_desc variable="BoundEnvironment">List of variable bindings in the shell environment.</type_desc>
+ <name name="parse_transform" arity="2"/>
+ <fsummary>Transforms Erlang abstract format containing calls to
+ ets/dbg:fun2ms/1 into literal match specifications.</fsummary>
+ <type_desc variable="Options">Option list, required but not used.
+ </type_desc>
<desc>
- <p>Implements the actual transformation when the <c>fun2ms</c>
- functions are called from the shell. In this case the abstract
- form is for one single fun (parsed by the Erlang shell), and
- all imported variables should be in the key-value list passed
- as <c><anno>BoundEnvironment</anno></c>. The result is a term, normalized,
- i.e. not in abstract format.</p>
+ <p>Implements the transformation at compile time. This
+ function is called by the compiler to do the source code
+ transformation if and when header file <c>ms_transform.hrl</c>
+ is included in the source code.</p>
+ <p>For information about how to use this parse transformation, see
+ <seealso marker="ets"><c>ets</c></seealso> and
+ <seealso marker="runtime_tools:dbg#fun2ms/1">
+ <c>dbg:fun2ms/1</c></seealso>.</p>
+ <p>For a description of match specifications, see section
+ <seealso marker="erts:match_spec">
+ Match Specification in Erlang</seealso> in ERTS User's Guide.</p>
</desc>
</func>
+
<func>
- <name name="format_error" arity="1"/>
- <fsummary>Error formatting function as required by the parse_transform interface.</fsummary>
+ <name name="transform_from_shell" arity="3"/>
+ <fsummary>Used when transforming funs created in the shell into
+ match_specifications.</fsummary>
+ <type_desc variable="BoundEnvironment">List of variable bindings in the
+ shell environment.</type_desc>
<desc>
- <p>Takes an error code returned by one of the other functions
- in the module and creates a textual description of the
- error. Fairly uninteresting function actually.</p>
+ <p>Implements the transformation when the <c>fun2ms/1</c>
+ functions are called from the shell. In this case, the abstract
+ form is for one single fun (parsed by the Erlang shell).
+ All imported variables are to be in the key-value list passed
+ as <c><anno>BoundEnvironment</anno></c>. The result is a term,
+ normalized, that is, not in abstract format.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/notes.xml b/lib/stdlib/doc/src/notes.xml
index 5d4f9d912f..d8fec1147f 100644
--- a/lib/stdlib/doc/src/notes.xml
+++ b/lib/stdlib/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,335 @@
</header>
<p>This document describes the changes made to the STDLIB application.</p>
+<section><title>STDLIB 3.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> Correct a bug regarding typed records in the Erlang
+ shell. The bug was introduced in OTP-19.0. </p>
+ <p>
+ Own Id: OTP-13719 Aux Id: ERL-182 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>STDLIB 3.0</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> Fix a race bug affecting <c>dets:open_file/2</c>.
+ </p>
+ <p>
+ Own Id: OTP-13260 Aux Id: seq13002 </p>
+ </item>
+ <item>
+ <p>Don't search for non-existing Map keys twice</p>
+ <p>For <c>maps:get/2,3</c> and <c>maps:find/2</c>,
+ searching for an immediate key, e.g. an atom, in a small
+ map, the search was performed twice if the key did not
+ exist.</p>
+ <p>
+ Own Id: OTP-13459</p>
+ </item>
+ <item>
+ <p>
+ Avoid stray corner-case math errors on Solaris, e.g. an
+ error is thrown on underflows in exp() and pow() when it
+ shouldn't be.</p>
+ <p>
+ Own Id: OTP-13531</p>
+ </item>
+ <item>
+ <p>Fix linting of map key variables</p>
+ <p>Map keys cannot be unbound and then used in parallel
+ matching.</p>
+ <p>Example: <c> #{ K := V } = #{ k := K } = M.</c> This
+ is illegal if <c>'K'</c> is not bound.</p>
+ <p>
+ Own Id: OTP-13534 Aux Id: ERL-135 </p>
+ </item>
+ <item>
+ <p>
+ Fixed a bug in re on openbsd where sometimes re:run would
+ return an incorrect result.</p>
+ <p>
+ Own Id: OTP-13602</p>
+ </item>
+ <item>
+ <p>
+ To avoid potential timer bottleneck on supervisor
+ restart, timer server is no longer used when the
+ supervisor is unable to restart a child.</p>
+ <p>
+ Own Id: OTP-13618 Aux Id: PR-1001 </p>
+ </item>
+ <item>
+ <p> The Erlang code preprocessor (<c>epp</c>) can handle
+ file names spanning over many tokens. Example:
+ <c>-include("a" "file" "name").</c>. </p>
+ <p>
+ Own Id: OTP-13662 Aux Id: seq13136 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>The types of The Abstract Format in the
+ <c>erl_parse</c> module have been refined. </p>
+ <p>
+ Own Id: OTP-10292</p>
+ </item>
+ <item>
+ <p> Undocumented syntax for function specifications,
+ <c>-spec F/A :: Domain -&gt; Range</c>, has been removed
+ (without deprecation). </p> <p> Using the
+ <c>is_subtype(V, T)</c> syntax for constraints (in
+ function specifications) is no longer documented, and the
+ newer syntax <c>V :: T</c> should be used instead. The
+ Erlang Parser still recognizes the <c>is_subtype</c>
+ syntax, and will continue to do so for some time. </p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-11879</p>
+ </item>
+ <item>
+ <p>The '<c>random</c>' module has been deprecated. Use
+ the '<c>rand</c>' module instead.</p>
+ <p>
+ Own Id: OTP-12502 Aux Id: OTP-12501 </p>
+ </item>
+ <item>
+ <p>Background: In record fields with a type declaration
+ but without an initializer, the Erlang parser inserted
+ automatically the singleton type <c>'undefined'</c> to
+ the list of declared types, if that value was not present
+ there. That is, the record declaration:</p>
+ <p>
+ -record(rec, {f1 :: float(), f2 = 42 :: integer(), f3 ::
+ some_mod:some_typ()}).</p>
+ <p>was translated by the parser to:</p>
+ <p>
+ -record(rec, {f1 :: float() | 'undefined', f2 = 42 ::
+ integer(), f3 :: some_mod:some_typ() | 'undefined'}).</p>
+ <p>The rationale for this was that creation of a "dummy"
+ <c>#rec{}</c> record should not result in a warning from
+ dialyzer that, for example, the implicit initialization
+ of the <c>#rec.f1</c> field violates its type
+ declaration.</p>
+ <p>Problems: This seemingly innocent action has some
+ unforeseen consequences.</p>
+ <p>For starters, there is no way for programmers to
+ declare that e.g. only floats make sense for the
+ <c>f1</c> field of <c>#rec{}</c> records when there is no
+ "obvious" default initializer for this field. (This also
+ affects tools like PropEr that use these declarations
+ produced by the Erlang parser to generate random
+ instances of records for testing purposes.)</p>
+ <p>It also means that dialyzer does not warn if e.g. an
+ <c>is_atom/1</c> test or something more exotic like an
+ <c>atom_to_list/1</c> call is performed on the value of
+ the <c>f1</c> field.</p>
+ <p>Similarly, there is no way to extend dialyzer to warn
+ if it finds record constructions where <c>f1</c> is not
+ initialized to some float.</p>
+ <p>Last but not least, it is semantically problematic
+ when the type of the field is an opaque type: creating a
+ union of an opaque and a structured type is very
+ problematic for analysis because it fundamentally breaks
+ the opacity of the term at that point.</p>
+ <p>Change: To solve these problems the parser will not
+ automatically insert the <c>'undefined'</c> value
+ anymore; instead the user has the option to choose the
+ places where this value makes sense (for the field) and
+ where it does not and insert the <c>| 'undefined'</c>
+ there manually.</p>
+ <p>Consequences of this change: This change means that
+ dialyzer will issue a warning for all places where
+ records with uninitialized fields are created and those
+ fields have a declared type that is incompatible with
+ <c>'undefined'</c> (e.g. <c>float()</c>). This warning
+ can be suppressed easily by adding <c>| 'undefined'</c>
+ to the type of this field. This also adds documentation
+ that the user really intends to create records where this
+ field is uninitialized.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-12719</p>
+ </item>
+ <item>
+ <p> Remove deprecated functions in the modules
+ <c>erl_scan</c> and <c>erl_parse</c>. </p>
+ <p>
+ Own Id: OTP-12861</p>
+ </item>
+ <item>
+ <p>The pre-processor can now expand the ?FUNCTION_NAME
+ and ?FUNCTION_ARITY macros.</p>
+ <p>
+ Own Id: OTP-13059</p>
+ </item>
+ <item>
+ <p> A new behaviour <c>gen_statem</c> has been
+ implemented. It has been thoroughly reviewed, is stable
+ enough to be used by at least two heavy OTP applications,
+ and is here to stay. But depending on user feedback, we
+ do not expect but might find it necessary to make minor
+ not backwards compatible changes into OTP-20.0, so its
+ state can be designated as "not quite experimental"...
+ </p> <p> The <c>gen_statem</c> behaviour is intended to
+ replace <c>gen_fsm</c> for new code. It has the same
+ features and add some really useful: </p> <list
+ type="bulleted"> <item>State code is gathered</item>
+ <item>The state can be any term</item> <item>Events can
+ be postponed</item> <item>Events can be self
+ generated</item> <item>A reply can be sent from a later
+ state</item> <item>There can be multiple sys traceable
+ replies</item> </list> <p> The callback model(s) for
+ <c>gen_statem</c> differs from the one for
+ <c>gen_fsm</c>, but it is still fairly easy to rewrite
+ from <c>gen_fsm</c> to <c>gen_statem</c>. </p>
+ <p>
+ Own Id: OTP-13065 Aux Id: PR-960 </p>
+ </item>
+ <item>
+ <p>
+ Optimize binary:split/2 and binary:split/3 with native
+ BIF implementation.</p>
+ <p>
+ Own Id: OTP-13082</p>
+ </item>
+ <item>
+ <p>Background: The types of record fields have since R12B
+ been put in a separate form by <c>epp:parse_file()</c>,
+ leaving the record declaration form untyped. The separate
+ form, however, does not follow the syntax of type
+ declarations, and parse transforms inspecting
+ <c>-type()</c> attributes need to know about the special
+ syntax. Since the compiler stores the return value of
+ <c>epp:parse_file()</c> as debug information in the
+ abstract code chunk (<c>"Abst"</c> or
+ <c>abstract_code</c>), tools too need to know about the
+ special syntax, if they inspect <c>-type()</c> attributes
+ in abstract code.</p>
+ <p>Change: No separate type form is created by
+ <c>epp:parse_file()</c>, but the type information is kept
+ in the record fields. This means that all parse
+ transforms and all tools inspecting <c>-record()</c>
+ declarations need to recognize <c>{typed_record_field,
+ Field, Type}</c>.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13148</p>
+ </item>
+ <item>
+ <p>
+ Unsized fields of the type <c>bytes</c> in binary
+ generators are now forbidden. (The other ways of writing
+ unsized fields, such as <c>binary</c>, are already
+ forbidden.)</p>
+ <p>
+ Own Id: OTP-13152</p>
+ </item>
+ <item>
+ <p> The type <c>map()</c> is built-in, and cannot be
+ redefined. </p>
+ <p>
+ Own Id: OTP-13153</p>
+ </item>
+ <item>
+ <p> Let <c>dets:open_file()</c> exit with a <c>badarg</c>
+ message if given a raw file name (a binary). </p>
+ <p>
+ Own Id: OTP-13229 Aux Id: ERL-55 </p>
+ </item>
+ <item>
+ <p> Add <c>filename:basedir/2,3</c></p> <p>basedir
+ returns suitable path(s) for 'user_cache', 'user_config',
+ 'user_data', 'user_log', 'site_config' and 'site_data'.
+ On linux and linux like systems the paths will respect
+ the XDG environment variables.</p>
+ <p>
+ Own Id: OTP-13392</p>
+ </item>
+ <item>
+ <p>There are new preprocessor directives
+ <c>-error(Term)</c> and <c>-warning(Term)</c> to cause a
+ compilation error or a compilation warning,
+ respectively.</p>
+ <p>
+ Own Id: OTP-13476</p>
+ </item>
+ <item>
+ <p>
+ Optimize <c>'++'</c> operator and <c>lists:append/2</c>
+ by using a single pass to build a new list while checking
+ for properness.</p>
+ <p>
+ Own Id: OTP-13487</p>
+ </item>
+ <item>
+ <p>
+ Add <c>maps:update_with/3,4</c> and <c>maps:take/2</c></p>
+ <p>
+ Own Id: OTP-13522 Aux Id: PR-1025 </p>
+ </item>
+ <item>
+ <p><c>lists:join/2</c> has been added. Similar to
+ <c>string:join/2</c> but works with arbitrary lists.</p>
+ <p>
+ Own Id: OTP-13523</p>
+ </item>
+ <item>
+ <p>Obfuscate asserts to make Dialyzer shut up.</p>
+ <p>
+ Own Id: OTP-13524 Aux Id: PR-1002 </p>
+ </item>
+ <item>
+ <p>
+ Supervisors now explicitly add their callback module in
+ the return from sys:get_status/1,2. This is to simplify
+ custom supervisor implementations. The Misc part of the
+ return value from sys:get_status/1,2 for a supervisor is
+ now:</p>
+ <p>
+ [{data, [{"State",
+ State}]},{supervisor,[{"Callback",Module}]}]</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13619 Aux Id: PR-1000 </p>
+ </item>
+ <item>
+ <p>
+ Relax translation of initial calls in <c>proc_lib</c>,
+ i.e. remove the restriction to only do the translation
+ for <c>gen_server</c> and <c>gen_fsm</c>. This enables
+ user defined <c>gen</c> based generic callback modules to
+ be displayed nicely in <c>c:i()</c> and observer.</p>
+ <p>
+ Own Id: OTP-13623</p>
+ </item>
+ <item>
+ <p>The function <c>queue:lait/1</c> (misspelling of
+ <c>liat/1</c>) is now deprecated.</p>
+ <p>
+ Own Id: OTP-13658</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>STDLIB 2.8</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/stdlib/doc/src/notes_history.xml b/lib/stdlib/doc/src/notes_history.xml
index 25641fdf3a..efcb5ac7df 100644
--- a/lib/stdlib/doc/src/notes_history.xml
+++ b/lib/stdlib/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/stdlib/doc/src/orddict.xml b/lib/stdlib/doc/src/orddict.xml
index 950f688735..076b06fc38 100644
--- a/lib/stdlib/doc/src/orddict.xml
+++ b/lib/stdlib/doc/src/orddict.xml
@@ -24,33 +24,35 @@
<title>orddict</title>
<prepared>Robert Virding</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2007-04-16</date>
<rev>B</rev>
- <file>orddict.sgml</file>
+ <file>orddict.xml</file>
</header>
<module>orddict</module>
- <modulesummary>Key-Value Dictionary as Ordered List</modulesummary>
+ <modulesummary>Key-value dictionary as ordered list.</modulesummary>
<description>
- <p><c>Orddict</c> implements a <c>Key</c> - <c>Value</c> dictionary.
+ <p>This module provides a <c>Key</c>-<c>Value</c> dictionary.
An <c>orddict</c> is a representation of a dictionary, where a
list of pairs is used to store the keys and values. The list is
ordered after the keys.</p>
- <p>This module provides exactly the same interface as the module
- <c>dict</c> but with a defined representation. One difference is
+
+ <p>This module provides the same interface as the
+ <seealso marker="dict"><c>dict(3)</c></seealso> module
+ but with a defined representation. One difference is
that while <c>dict</c> considers two keys as different if they
do not match (<c>=:=</c>), this module considers two keys as
- different if and only if they do not compare equal
- (<c>==</c>).</p>
+ different if and only if they do not compare equal (<c>==</c>).</p>
</description>
<datatypes>
<datatype>
<name name="orddict" n_vars="2"/>
- <desc><p>Dictionary as returned by <c>new/0</c>.</p></desc>
+ <desc><p>Dictionary as returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="orddict" n_vars="0"/>
@@ -60,202 +62,229 @@
<funcs>
<func>
<name name="append" arity="3"/>
- <fsummary>Append a value to keys in a dictionary</fsummary>
+ <fsummary>Append a value to keys in a dictionary.</fsummary>
<desc>
- <p>This function appends a new <c><anno>Value</anno></c> to the current list
- of values associated with <c><anno>Key</anno></c>. An exception is
- generated if the initial value associated with <c><anno>Key</anno></c> is
- not a list of values.</p>
+ <p>Appends a new <c><anno>Value</anno></c> to the current list
+ of values associated with <c><anno>Key</anno></c>. An exception is
+ generated if the initial value associated with <c><anno>Key</anno></c>
+ is not a list of values.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="append_list" arity="3"/>
- <fsummary>Append new values to keys in a dictionary</fsummary>
+ <fsummary>Append new values to keys in a dictionary.</fsummary>
<desc>
- <p>This function appends a list of values <c><anno>ValList</anno></c> to
- the current list of values associated with <c><anno>Key</anno></c>. An
- exception is generated if the initial value associated with
+ <p>Appends a list of values <c><anno>ValList</anno></c> to
+ the current list of values associated with <c><anno>Key</anno></c>.
+ An exception is generated if the initial value associated with
<c><anno>Key</anno></c> is not a list of values.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="erase" arity="2"/>
- <fsummary>Erase a key from a dictionary</fsummary>
+ <fsummary>Erase a key from a dictionary.</fsummary>
<desc>
- <p>This function erases all items with a given key from a
- dictionary.</p>
+ <p>Erases all items with a specified key from a dictionary.</p>
</desc>
</func>
+
<func>
<name name="fetch" arity="2"/>
- <fsummary>Look-up values in a dictionary</fsummary>
+ <fsummary>Look up values in a dictionary.</fsummary>
<desc>
- <p>This function returns the value associated with <c><anno>Key</anno></c>
- in the dictionary <c><anno>Orddict</anno></c>. <c>fetch</c> assumes that
- the <c><anno>Key</anno></c> is present in the dictionary and an exception
+ <p>Returns the value associated with <c><anno>Key</anno></c>
+ in dictionary <c><anno>Orddict</anno></c>. This function assumes that
+ the <c><anno>Key</anno></c> is present in the dictionary. An exception
is generated if <c><anno>Key</anno></c> is not in the dictionary.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="fetch_keys" arity="1"/>
- <fsummary>Return all keys in a dictionary</fsummary>
+ <fsummary>Return all keys in a dictionary.</fsummary>
<desc>
- <p>This function returns a list of all keys in the dictionary.</p>
+ <p>Returns a list of all keys in a dictionary.</p>
</desc>
</func>
+
<func>
<name name="filter" arity="2"/>
- <fsummary>Choose elements which satisfy a predicate</fsummary>
+ <fsummary>Select elements that satisfy a predicate.</fsummary>
<desc>
- <p><c><anno>Orddict2</anno></c> is a dictionary of all keys and values in
- <c><anno>Orddict1</anno></c> for which <c><anno>Pred</anno>(<anno>Key</anno>, <anno>Value</anno>)</c> is <c>true</c>.</p>
+ <p><c><anno>Orddict2</anno></c> is a dictionary of all keys and values
+ in <c><anno>Orddict1</anno></c> for which
+ <c><anno>Pred</anno>(<anno>Key</anno>, <anno>Value</anno>)</c> is
+ <c>true</c>.</p>
</desc>
</func>
+
<func>
<name name="find" arity="2"/>
- <fsummary>Search for a key in a dictionary</fsummary>
+ <fsummary>Search for a key in a dictionary.</fsummary>
<desc>
- <p>This function searches for a key in a dictionary. Returns
- <c>{ok, <anno>Value</anno>}</c> where <c><anno>Value</anno></c> is the value associated
- with <c><anno>Key</anno></c>, or <c>error</c> if the key is not present in
- the dictionary.</p>
+ <p>Searches for a key in a dictionary. Returns
+ <c>{ok, <anno>Value</anno>}</c>, where <c><anno>Value</anno></c> is
+ the value associated with <c><anno>Key</anno></c>, or <c>error</c> if
+ the key is not present in the dictionary.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="fold" arity="3"/>
- <fsummary>Fold a function over a dictionary</fsummary>
+ <fsummary>Fold a function over a dictionary.</fsummary>
<desc>
<p>Calls <c><anno>Fun</anno></c> on successive keys and values of
<c><anno>Orddict</anno></c> together with an extra argument <c>Acc</c>
(short for accumulator). <c><anno>Fun</anno></c> must return a new
- accumulator which is passed to the next call. <c><anno>Acc0</anno></c> is
- returned if the list is empty.</p>
+ accumulator that is passed to the next call. <c><anno>Acc0</anno></c>
+ is returned if the list is empty.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list of pairs to a dictionary</fsummary>
+ <fsummary>Convert a list of pairs to a dictionary.</fsummary>
<desc>
- <p>This function converts the <c><anno>Key</anno></c> - <c><anno>Value</anno></c> list
+ <p>Converts the <c><anno>Key</anno></c>-<c><anno>Value</anno></c> list
<c><anno>List</anno></c> to a dictionary.</p>
</desc>
</func>
+
+ <func>
+ <name name="is_empty" arity="1"/>
+ <fsummary>Return true if the dictionary is empty.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c><anno>Orddict</anno></c> has no elements,
+ otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="is_key" arity="2"/>
- <fsummary>Test if a key is in a dictionary</fsummary>
+ <fsummary>Test if a key is in a dictionary.</fsummary>
<desc>
- <p>This function tests if <c><anno>Key</anno></c> is contained in
- the dictionary <c><anno>Orddict</anno></c>.</p>
+ <p>Tests if <c><anno>Key</anno></c> is contained in
+ dictionary <c><anno>Orddict</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="map" arity="2"/>
- <fsummary>Map a function over a dictionary</fsummary>
+ <fsummary>Map a function over a dictionary.</fsummary>
<desc>
- <p><c>map</c> calls <c><anno>Fun</anno></c> on successive keys and values
- of <c><anno>Orddict1</anno></c> to return a new value for each key.</p>
+ <p>Calls <c><anno>Fun</anno></c> on successive keys and values of
+ <c><anno>Orddict1</anno></c> tvo return a new value for each key.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="3"/>
- <fsummary>Merge two dictionaries</fsummary>
+ <fsummary>Merge two dictionaries.</fsummary>
<desc>
- <p><c>merge</c> merges two dictionaries, <c><anno>Orddict1</anno></c> and
- <c><anno>Orddict2</anno></c>, to create a new dictionary. All the <c><anno>Key</anno></c>
- - <c><anno>Value</anno></c> pairs from both dictionaries are included in
- the new dictionary. If a key occurs in both dictionaries then
- <c><anno>Fun</anno></c> is called with the key and both values to return a
- new value. <c>merge</c> could be defined as:</p>
+ <p>Merges two dictionaries, <c><anno>Orddict1</anno></c> and
+ <c><anno>Orddict2</anno></c>, to create a new dictionary. All the
+ <c><anno>Key</anno></c>-<c><anno>Value</anno></c> pairs from both
+ dictionaries are included in the new dictionary. If a key occurs in
+ both dictionaries, <c><anno>Fun</anno></c> is called with the key and
+ both values to return a new value.
+ <c>merge/3</c> can be defined as follows, but is faster:</p>
<code type="none">
merge(Fun, D1, D2) ->
fold(fun (K, V1, D) ->
update(K, fun (V2) -> Fun(K, V1, V2) end, V1, D)
end, D2, D1).</code>
- <p>but is faster.</p>
</desc>
</func>
+
<func>
<name name="new" arity="0"/>
- <fsummary>Create a dictionary</fsummary>
+ <fsummary>Create a dictionary.</fsummary>
<desc>
- <p>This function creates a new dictionary.</p>
+ <p>Creates a new dictionary.</p>
</desc>
</func>
+
<func>
<name name="size" arity="1"/>
- <fsummary>Return the number of elements in an ordered dictionary</fsummary>
+ <fsummary>Return the number of elements in an ordered dictionary.
+ </fsummary>
<desc>
<p>Returns the number of elements in an <c><anno>Orddict</anno></c>.</p>
</desc>
</func>
- <func>
- <name name="is_empty" arity="1"/>
- <fsummary>Return true if the dictionary is empty</fsummary>
- <desc>
- <p>Returns <c>true</c> if <c><anno>Orddict</anno></c> has no elements, <c>false</c> otherwise.</p>
- </desc>
- </func>
+
<func>
<name name="store" arity="3"/>
- <fsummary>Store a value in a dictionary</fsummary>
+ <fsummary>Store a value in a dictionary.</fsummary>
<desc>
- <p>This function stores a <c><anno>Key</anno></c> - <c><anno>Value</anno></c> pair in a
- dictionary. If the <c><anno>Key</anno></c> already exists in <c><anno>Orddict1</anno></c>,
+ <p>Stores a <c><anno>Key</anno></c>-<c><anno>Value</anno></c> pair in a
+ dictionary. If the <c><anno>Key</anno></c> already exists in
+ <c><anno>Orddict1</anno></c>,
the associated value is replaced by <c><anno>Value</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="to_list" arity="1"/>
- <fsummary>Convert a dictionary to a list of pairs</fsummary>
+ <fsummary>Convert a dictionary to a list of pairs.</fsummary>
<desc>
- <p>This function converts the dictionary to a list
- representation.</p>
+ <p>Converts a dictionary to a list representation.</p>
</desc>
</func>
+
<func>
<name name="update" arity="3"/>
- <fsummary>Update a value in a dictionary</fsummary>
+ <fsummary>Update a value in a dictionary.</fsummary>
<desc>
- <p>Update a value in a dictionary by calling <c><anno>Fun</anno></c> on
- the value to get a new value. An exception is generated if
+ <p>Updates a value in a dictionary by calling <c><anno>Fun</anno></c>
+ on the value to get a new value. An exception is generated if
<c><anno>Key</anno></c> is not present in the dictionary.</p>
</desc>
</func>
+
<func>
<name name="update" arity="4"/>
- <fsummary>Update a value in a dictionary</fsummary>
+ <fsummary>Update a value in a dictionary.</fsummary>
<desc>
- <p>Update a value in a dictionary by calling <c><anno>Fun</anno></c> on
- the value to get a new value. If <c><anno>Key</anno></c> is not present
- in the dictionary then <c><anno>Initial</anno></c> will be stored as
- the first value. For example <c>append/3</c> could be defined
- as:</p>
+ <p>Updates a value in a dictionary by calling <c><anno>Fun</anno></c>
+ on the value to get a new value. If <c><anno>Key</anno></c> is not
+ present in the dictionary, <c><anno>Initial</anno></c> is stored as
+ the first value. For example, <c>append/3</c> can be defined
+ as follows:</p>
<code type="none">
append(Key, Val, D) ->
update(Key, fun (Old) -> Old ++ [Val] end, [Val], D).</code>
</desc>
</func>
+
<func>
<name name="update_counter" arity="3"/>
- <fsummary>Increment a value in a dictionary</fsummary>
+ <fsummary>Increment a value in a dictionary.</fsummary>
<desc>
- <p>Add <c><anno>Increment</anno></c> to the value associated with <c><anno>Key</anno></c>
- and store this value. If <c><anno>Key</anno></c> is not present in
- the dictionary then <c><anno>Increment</anno></c> will be stored as
+ <p>Adds <c><anno>Increment</anno></c> to the value associated with
+ <c><anno>Key</anno></c>
+ and store this value. If <c><anno>Key</anno></c> is not present in
+ the dictionary, <c><anno>Increment</anno></c> is stored as
the first value.</p>
- <p>This could be defined as:</p>
+ <p>This can be defined as follows, but is faster:</p>
<code type="none">
update_counter(Key, Incr, D) ->
update(Key, fun (Old) -> Old + Incr end, Incr, D).</code>
- <p>but is faster.</p>
</desc>
</func>
</funcs>
<section>
<title>Notes</title>
- <p>The functions <c>append</c> and <c>append_list</c> are included
- so we can store keyed values in a list <em>accumulator</em>. For
+ <marker id="notes"/>
+ <p>Functions <c>append/3</c> and <c>append_list/3</c> are included
+ so that keyed values can be stored in a list <em>accumulator</em>, for
example:</p>
<pre>
> D0 = orddict:new(),
@@ -264,19 +293,18 @@ update_counter(Key, Incr, D) ->
D3 = orddict:append(files, f2, D2),
D4 = orddict:append(files, f3, D3),
orddict:fetch(files, D4).
-[f1,f2,f3] </pre>
+[f1,f2,f3]</pre>
<p>This saves the trouble of first fetching a keyed value,
appending a new value to the list of stored values, and storing
- the result.
- </p>
- <p>The function <c>fetch</c> should be used if the key is known to
- be in the dictionary, otherwise <c>find</c>.</p>
+ the result.</p>
+ <p>Function <c>fetch/2</c> is to be used if the key is known to
+ be in the dictionary, otherwise function <c>find/2</c>.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="dict">dict(3)</seealso>,
- <seealso marker="gb_trees">gb_trees(3)</seealso></p>
+ <p><seealso marker="dict"><c>dict(3)</c></seealso>,
+ <seealso marker="gb_trees"><c>gb_trees(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/ordsets.xml b/lib/stdlib/doc/src/ordsets.xml
index 639e041d79..148281fcf7 100644
--- a/lib/stdlib/doc/src/ordsets.xml
+++ b/lib/stdlib/doc/src/ordsets.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,23 +24,26 @@
<title>ordsets</title>
<prepared>Robert Virding</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>99-07-27</date>
+ <date>1999-07-27</date>
<rev>A</rev>
- <file>ordsets.sgml</file>
+ <file>ordsets.xml</file>
</header>
<module>ordsets</module>
- <modulesummary>Functions for Manipulating Sets as Ordered Lists</modulesummary>
+ <modulesummary>Functions for manipulating sets as ordered lists.
+ </modulesummary>
<description>
<p>Sets are collections of elements with no duplicate elements.
An <c>ordset</c> is a representation of a set, where an ordered
list is used to store the elements of the set. An ordered list
is more efficient than an unordered list.</p>
- <p>This module provides exactly the same interface as the module
- <c>sets</c> but with a defined representation. One difference is
+
+ <p>This module provides the same interface as the
+ <seealso marker="sets"><c>sets(3)</c></seealso> module
+ but with a defined representation. One difference is
that while <c>sets</c> considers two elements as different if they
do not match (<c>=:=</c>), this module considers two elements as
different if and only if they do not compare equal (<c>==</c>).</p>
@@ -49,146 +52,168 @@
<datatypes>
<datatype>
<name name="ordset" n_vars="1"/>
- <desc><p>As returned by new/0.</p></desc>
+ <desc><p>As returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="new" arity="0"/>
- <fsummary>Return an empty set</fsummary>
+ <name name="add_element" arity="2"/>
+ <fsummary>Add an element to an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns a new empty ordered set.</p>
+ <p>Returns a new ordered set formed from <c><anno>Ordset1</anno></c>
+ with <c><anno>Element</anno></c> inserted.</p>
</desc>
</func>
+
<func>
- <name name="is_set" arity="1"/>
- <fsummary>Test for an <c>Ordset</c></fsummary>
+ <name name="del_element" arity="2"/>
+ <fsummary>Remove an element from an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Ordset</anno></c> is an ordered set of
- elements, otherwise <c>false</c>.</p>
+ <p>Returns <c><anno>Ordset1</anno></c>, but with
+ <c><anno>Element</anno></c> removed.</p>
</desc>
</func>
+
<func>
- <name name="size" arity="1"/>
- <fsummary>Return the number of elements in a set</fsummary>
+ <name name="filter" arity="2"/>
+ <fsummary>Filter set elements.</fsummary>
<desc>
- <p>Returns the number of elements in <c><anno>Ordset</anno></c>.</p>
+ <p>Filters elements in <c><anno>Ordset1</anno></c> with boolean function
+ <c><anno>Pred</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="to_list" arity="1"/>
- <fsummary>Convert an <c>Ordset</c>into a list</fsummary>
+ <name name="fold" arity="3"/>
+ <fsummary>Fold over set elements.</fsummary>
<desc>
- <p>Returns the elements of <c><anno>Ordset</anno></c> as a list.</p>
+ <p>Folds <c><anno>Function</anno></c> over every element in
+ <c><anno>Ordset</anno></c> and returns the final value of the
+ accumulator.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list into an <c>Ordset</c></fsummary>
+ <fsummary>Convert a list into an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns an ordered set of the elements in <c><anno>List</anno></c>.</p>
+ <p>Returns an ordered set of the elements in <c><anno>List</anno></c>.
+ </p>
</desc>
</func>
+
<func>
- <name name="is_element" arity="2"/>
- <fsummary>Test for membership of an <c>Ordset</c></fsummary>
+ <name name="intersection" arity="1"/>
+ <fsummary>Return the intersection of a list of <c>Ordsets</c></fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
- <c><anno>Ordset</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns the intersection of the non-empty list of sets.</p>
</desc>
</func>
+
<func>
- <name name="add_element" arity="2"/>
- <fsummary>Add an element to an <c>Ordset</c></fsummary>
+ <name name="intersection" arity="2"/>
+ <fsummary>Return the intersection of two <c>Ordsets</c>.</fsummary>
<desc>
- <p>Returns a new ordered set formed from <c><anno>Ordset1</anno></c> with
- <c><anno>Element</anno></c> inserted.</p>
+ <p>Returns the intersection of <c><anno>Ordset1</anno></c> and
+ <c><anno>Ordset2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="del_element" arity="2"/>
- <fsummary>Remove an element from an <c>Ordset</c></fsummary>
+ <name name="is_disjoint" arity="2"/>
+ <fsummary>Check whether two <c>Ordsets</c> are disjoint.</fsummary>
<desc>
- <p>Returns <c><anno>Ordset1</anno></c>, but with <c><anno>Element</anno></c> removed.</p>
+ <p>Returns <c>true</c> if <c><anno>Ordset1</anno></c> and
+ <c><anno>Ordset2</anno></c> are disjoint (have no elements in common),
+ otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="2"/>
- <fsummary>Return the union of two <c>Ordsets</c></fsummary>
+ <name name="is_element" arity="2"/>
+ <fsummary>Test for membership of an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns the merged (union) set of <c><anno>Ordset1</anno></c> and
- <c><anno>Ordset2</anno></c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
+ <c><anno>Ordset</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="1"/>
- <fsummary>Return the union of a list of <c>Ordsets</c></fsummary>
+ <name name="is_set" arity="1"/>
+ <fsummary>Test for an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns the merged (union) set of the list of sets.</p>
+ <p>Returns <c>true</c> if <c><anno>Ordset</anno></c> is an ordered set
+ of elements, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="2"/>
- <fsummary>Return the intersection of two <c>Ordsets</c></fsummary>
+ <name name="is_subset" arity="2"/>
+ <fsummary>Test for subset.</fsummary>
<desc>
- <p>Returns the intersection of <c><anno>Ordset1</anno></c> and
- <c><anno>Ordset2</anno></c>.</p>
+ <p>Returns <c>true</c> when every element of <c><anno>Ordset1</anno></c>
+ is also a member of <c><anno>Ordset2</anno></c>, otherwise
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="1"/>
- <fsummary>Return the intersection of a list of <c>Ordsets</c></fsummary>
+ <name name="new" arity="0"/>
+ <fsummary>Return an empty set.</fsummary>
<desc>
- <p>Returns the intersection of the non-empty list of sets.</p>
+ <p>Returns a new empty ordered set.</p>
</desc>
</func>
+
<func>
- <name name="is_disjoint" arity="2"/>
- <fsummary>Check whether two <c>Ordsets</c> are disjoint</fsummary>
+ <name name="size" arity="1"/>
+ <fsummary>Return the number of elements in a set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Ordset1</anno></c> and
- <c><anno>Ordset2</anno></c> are disjoint (have no elements in common),
- and <c>false</c> otherwise.</p>
+ <p>Returns the number of elements in <c><anno>Ordset</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="subtract" arity="2"/>
- <fsummary>Return the difference of two <c>Ordsets</c></fsummary>
+ <fsummary>Return the difference of two <c>Ordsets</c>.</fsummary>
<desc>
- <p>Returns only the elements of <c><anno>Ordset1</anno></c> which are not
+ <p>Returns only the elements of <c><anno>Ordset1</anno></c> that are not
also elements of <c><anno>Ordset2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="is_subset" arity="2"/>
- <fsummary>Test for subset</fsummary>
+ <name name="to_list" arity="1"/>
+ <fsummary>Convert an <c>Ordset</c> into a list.</fsummary>
<desc>
- <p>Returns <c>true</c> when every element of <c><anno>Ordset1</anno></c> is
- also a member of <c><anno>Ordset2</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns the elements of <c><anno>Ordset</anno></c> as a list.</p>
</desc>
</func>
+
<func>
- <name name="fold" arity="3"/>
- <fsummary>Fold over set elements</fsummary>
+ <name name="union" arity="1"/>
+ <fsummary>Return the union of a list of <c>Ordsets</c>.</fsummary>
<desc>
- <p>Fold <c><anno>Function</anno></c> over every element in <c><anno>Ordset</anno></c>
- returning the final value of the accumulator.</p>
+ <p>Returns the merged (union) set of the list of sets.</p>
</desc>
</func>
+
<func>
- <name name="filter" arity="2"/>
- <fsummary>Filter set elements</fsummary>
+ <name name="union" arity="2"/>
+ <fsummary>Return the union of two <c>Ordsets</c>.</fsummary>
<desc>
- <p>Filter elements in <c><anno>Ordset1</anno></c> with boolean function
- <c><anno>Pred</anno></c>.</p>
+ <p>Returns the merged (union) set of <c><anno>Ordset1</anno></c> and
+ <c><anno>Ordset2</anno></c>.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="gb_sets">gb_sets(3)</seealso>,
- <seealso marker="sets">sets(3)</seealso></p>
+ <p><seealso marker="gb_sets"><c>gb_sets(3)</c></seealso>,
+ <seealso marker="sets"><c>sets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/part.xml b/lib/stdlib/doc/src/part.xml
index f7074d3404..93c47405bf 100644
--- a/lib/stdlib/doc/src/part.xml
+++ b/lib/stdlib/doc/src/part.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -31,9 +31,10 @@
<rev>1.0</rev>
<file>part.xml</file>
</header>
- <description>
- <p>The Erlang standard library <em>STDLIB</em>.</p>
- </description>
+
+ <description></description>
+
+ <xi:include href="introduction.xml"/>
<xi:include href="io_protocol.xml"/>
<xi:include href="unicode_usage.xml"/>
</part>
diff --git a/lib/stdlib/doc/src/part_notes.xml b/lib/stdlib/doc/src/part_notes.xml
index 6ceead1af5..461de749dd 100644
--- a/lib/stdlib/doc/src/part_notes.xml
+++ b/lib/stdlib/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/stdlib/doc/src/part_notes_history.xml b/lib/stdlib/doc/src/part_notes_history.xml
index 36792b12e1..8fd048a41e 100644
--- a/lib/stdlib/doc/src/part_notes_history.xml
+++ b/lib/stdlib/doc/src/part_notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/stdlib/doc/src/pool.xml b/lib/stdlib/doc/src/pool.xml
index e9c574038c..05d12ade28 100644
--- a/lib/stdlib/doc/src/pool.xml
+++ b/lib/stdlib/doc/src/pool.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,89 +29,103 @@
<rev></rev>
</header>
<module>pool</module>
- <modulesummary>Load Distribution Facility</modulesummary>
+ <modulesummary>Load distribution facility.</modulesummary>
<description>
- <p><c>pool</c> can be used to run a set of Erlang nodes as a pool
+ <p>This module can be used to run a set of Erlang nodes as a pool
of computational processors. It is organized as a master and a
set of slave nodes and includes the following features:</p>
+
<list type="bulleted">
<item>The slave nodes send regular reports to the master about
- their current load.</item>
+ their current load.</item>
<item>Queries can be sent to the master to determine which node
- will have the least load.</item>
+ will have the least load.</item>
</list>
+
<p>The BIF <c>statistics(run_queue)</c> is used for estimating
future loads. It returns the length of the queue of ready to run
processes in the Erlang runtime system.</p>
- <p>The slave nodes are started with the <c>slave</c> module. This
- effects, tty IO, file IO, and code loading.</p>
- <p>If the master node fails, the entire pool will exit.</p>
+
+ <p>The slave nodes are started with the
+ <seealso marker="slave"><c>slave(3)</c></seealso> module. This
+ effects terminal I/O, file I/O, and code loading.</p>
+ <p>If the master node fails, the entire pool exits.</p>
</description>
+
<funcs>
<func>
- <name name="start" arity="1"/>
- <name name="start" arity="2"/>
- <fsummary>>Start a new pool</fsummary>
- <desc>
- <p>Starts a new pool. The file <c>.hosts.erlang</c> is read to
- find host names where the pool nodes can be started. See
- section <seealso marker="#files">Files</seealso> below. The
- start-up procedure fails if the file is not found.</p>
- <p>The slave nodes are started with <c>slave:start/2,3</c>,
- passing along <c><anno>Name</anno></c> and, if provided,
- <c><anno>Args</anno></c>.
- <c><anno>Name</anno></c> is used as the first part of the node names,
- <c><anno>Args</anno></c> is used to specify command line arguments. See
- <seealso marker="slave#start/2">slave(3)</seealso>.</p>
- <p>Access rights must be set so that all nodes in the pool have
- the authority to access each other.</p>
- <p>The function is synchronous and all the nodes, as well as
- all the system servers, are running when it returns a value.</p>
- </desc>
- </func>
- <func>
<name name="attach" arity="1"/>
- <fsummary>Ensure that a pool master is running</fsummary>
+ <fsummary>Ensure that a pool master is running.</fsummary>
<desc>
- <p>This function ensures that a pool master is running and
- includes <c><anno>Node</anno></c> in the pool master's pool of nodes.</p>
+ <p>Ensures that a pool master is running and includes
+ <c><anno>Node</anno></c> in the pool master's pool of nodes.</p>
</desc>
</func>
+
<func>
- <name name="stop" arity="0"/>
- <fsummary>Stop the pool and kill all the slave nodes</fsummary>
+ <name name="get_node" arity="0"/>
+ <fsummary>Return the node with the expected lowest future load.</fsummary>
<desc>
- <p>Stops the pool and kills all the slave nodes.</p>
+ <p>Returns the node with the expected lowest future load.</p>
</desc>
</func>
+
<func>
<name name="get_nodes" arity="0"/>
- <fsummary>Return a list of the current member nodes of the pool</fsummary>
+ <fsummary>Return a list of the current member nodes of the pool.
+ </fsummary>
<desc>
<p>Returns a list of the current member nodes of the pool.</p>
</desc>
</func>
+
<func>
<name name="pspawn" arity="3"/>
- <fsummary>Spawn a process on the pool node with expected lowest future load</fsummary>
+ <fsummary>Spawn a process on the pool node with expected lowest future
+ load.</fsummary>
<desc>
- <p>Spawns a process on the pool node which is expected to have
+ <p>Spawns a process on the pool node that is expected to have
the lowest future load.</p>
</desc>
</func>
+
<func>
<name name="pspawn_link" arity="3"/>
- <fsummary>Spawn and link to a process on the pool node with expected lowest future load</fsummary>
+ <fsummary>Spawn and link to a process on the pool node with expected
+ lowest future load.</fsummary>
<desc>
- <p>Spawn links a process on the pool node which is expected to
+ <p>Spawns and links to a process on the pool node that is expected to
have the lowest future load.</p>
</desc>
</func>
+
<func>
- <name name="get_node" arity="0"/>
- <fsummary>Return the node with the expected lowest future load</fsummary>
+ <name name="start" arity="1"/>
+ <name name="start" arity="2"/>
+ <fsummary>>Start a new pool.</fsummary>
<desc>
- <p>Returns the node with the expected lowest future load.</p>
+ <p>Starts a new pool. The file <c>.hosts.erlang</c> is read to
+ find host names where the pool nodes can be started; see
+ section <seealso marker="#files">Files</seealso>. The
+ startup procedure fails if the file is not found.</p>
+ <p>The slave nodes are started with
+ <seealso marker="slave#start/2"><c>slave:start/2,3</c></seealso>,
+ passing along <c><anno>Name</anno></c> and, if provided,
+ <c><anno>Args</anno></c>. <c><anno>Name</anno></c> is used as the
+ first part of the node names, <c><anno>Args</anno></c> is used to
+ specify command-line arguments.</p>
+ <p>Access rights must be set so that all nodes in the pool have
+ the authority to access each other.</p>
+ <p>The function is synchronous and all the nodes, and
+ all the system servers, are running when it returns a value.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="stop" arity="0"/>
+ <fsummary>Stop the pool and kill all the slave nodes.</fsummary>
+ <desc>
+ <p>Stops the pool and kills all the slave nodes.</p>
</desc>
</func>
</funcs>
@@ -120,12 +134,12 @@
<marker id="files"></marker>
<title>Files</title>
<p><c>.hosts.erlang</c> is used to pick hosts where nodes can
- be started. See
- <seealso marker="kernel:net_adm#host_file/0">net_adm(3)</seealso>
- for information about format and location of this file.</p>
- <p><c>$HOME/.erlang.slave.out.HOST</c> is used for all additional IO
- that may come from the slave nodes on standard IO. If the start-up
- procedure does not work, this file may indicate the reason.</p>
+ be started. For information about format and location of this file, see
+ <seealso marker="kernel:net_adm#host_file/0">
+ <c>net_adm:host_file/0</c></seealso>.</p>
+ <p><c>$HOME/.erlang.slave.out.HOST</c> is used for all extra I/O
+ that can come from the slave nodes on standard I/O. If the startup
+ procedure does not work, this file can indicate the reason.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/proc_lib.xml b/lib/stdlib/doc/src/proc_lib.xml
index 85f0c0c908..58ca5644cf 100644
--- a/lib/stdlib/doc/src/proc_lib.xml
+++ b/lib/stdlib/doc/src/proc_lib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,55 +29,194 @@
<rev></rev>
</header>
<module>proc_lib</module>
- <modulesummary>Functions for asynchronous and synchronous start of processes adhering to the OTP design principles.</modulesummary>
+ <modulesummary>Functions for asynchronous and synchronous start of processes
+ adhering to the OTP design principles.</modulesummary>
<description>
<p>This module is used to start processes adhering to
- the <seealso marker="doc/design_principles:des_princ">OTP Design Principles</seealso>. Specifically, the functions in this
- module are used by the OTP standard behaviors (<c>gen_server</c>,
- <c>gen_fsm</c>, ...) when starting new processes. The functions
- can also be used to start <em>special processes</em>, user
- defined processes which comply to the OTP design principles. See
- <seealso marker="doc/design_principles:spec_proc">Sys and Proc_Lib</seealso> in OTP Design Principles for an example.</p>
+ the <seealso marker="doc/design_principles:des_princ">
+ OTP Design Principles</seealso>. Specifically, the functions in this
+ module are used by the OTP standard behaviors (for example,
+ <c>gen_server</c>, <c>gen_fsm</c>, and <c>gen_statem</c>)
+ when starting new processes. The functions
+ can also be used to start <em>special processes</em>, user-defined
+ processes that comply to the OTP design principles. For an example,
+ see section <seealso marker="doc/design_principles:spec_proc">
+ sys and proc_lib</seealso> in OTP Design Principles.</p>
+
+
<p>Some useful information is initialized when a process starts.
The registered names, or the process identifiers, of the parent
process, and the parent ancestors, are stored together with
information about the function initially called in the process.</p>
- <p>While in "plain Erlang" a process is said to terminate normally
- only for the exit reason <c>normal</c>, a process started
+
+ <p>While in "plain Erlang", a process is said to terminate normally
+ only for exit reason <c>normal</c>, a process started
using <c>proc_lib</c> is also said to terminate normally if it
exits with reason <c>shutdown</c> or <c>{shutdown,Term}</c>.
<c>shutdown</c> is the reason used when
an application (supervision tree) is stopped.</p>
- <p>When a process started using <c>proc_lib</c> terminates
- abnormally -- that is, with another exit reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> -- a <em>crash report</em>
- is generated, which is written to terminal by the default SASL
+
+ <p>When a process that is started using <c>proc_lib</c> terminates
+ abnormally (that is, with another exit reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c>), a <em>crash report</em>
+ is generated, which is written to terminal by the default <c>SASL</c>
event handler. That is, the crash report is normally only visible
- if the SASL application is started. See
- <seealso marker="sasl:sasl_app">sasl(6)</seealso> and
- <seealso marker="sasl:error_logging">SASL User's Guide</seealso>.</p>
- <p>The crash report contains the previously stored information such
+ if the <c>SASL</c> application is started; see
+ <seealso marker="sasl:sasl_app"><c>sasl(6)</c></seealso> and section
+ <seealso marker="sasl:error_logging">SASL Error Logging</seealso>
+ in the SASL User's Guide.</p>
+
+ <p>The crash report contains the previously stored information, such
as ancestors and initial function, the termination reason, and
- information regarding other processes which terminate as a result
+ information about other processes that terminate as a result
of this process terminating.</p>
</description>
+
<datatypes>
<datatype>
<name name="spawn_option"/>
<desc>
<p>See <seealso marker="erts:erlang#spawn_opt/4">
- erlang:spawn_opt/2,3,4,5</seealso>.</p>
+ <c>erlang:spawn_opt/2,3,4,5</c></seealso>.</p>
</desc>
</datatype>
<datatype>
<name name="priority_level"/>
</datatype>
<datatype>
+ <name name="max_heap_size"/>
+ <desc>
+ <p>See <seealso marker="erts:erlang#process_flag_max_heap_size">
+ erlang:process_flag(max_heap_size, MaxHeapSize)</seealso>.</p>
+ </desc>
+ </datatype>
+ <datatype>
<name name="dict_or_pid"/>
</datatype>
</datatypes>
+
<funcs>
<func>
+ <name name="format" arity="1"/>
+ <fsummary>Format a crash report.</fsummary>
+ <desc>
+ <p>Equivalent to <seealso marker="#format/2">
+ <c>format(<anno>CrashReport</anno>, latin1)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="format" arity="2"/>
+ <fsummary>Format a crash report.</fsummary>
+ <desc>
+ <p>This function can be used by a user-defined event handler to
+ format a crash report. The crash report is sent using
+ <seealso marker="kernel:error_logger#error_report/2">
+ <c>error_logger:error_report(crash_report,
+ <anno>CrashReport</anno>)</c></seealso>.
+ That is, the event to be handled is of the format
+ <c>{error_report, GL, {Pid, crash_report,
+ <anno>CrashReport</anno>}}</c>,
+ where <c>GL</c> is the group leader pid of process
+ <c>Pid</c> that sent the crash report.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="format" arity="3"/>
+ <fsummary>Format a crash report.</fsummary>
+ <desc>
+ <p>This function can be used by a user-defined event handler to
+ format a crash report. When <anno>Depth</anno> is specified as a
+ positive integer, it is used in the format string to
+ limit the output as follows: <c>io_lib:format("~P",
+ [Term,<anno>Depth</anno>])</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="hibernate" arity="3"/>
+ <fsummary>Hibernate a process until a message is sent to it.</fsummary>
+ <desc>
+ <p>This function does the same as (and does call) the
+ <seealso marker="erts:erlang#erlang:hibernate/3">
+ <c>hibernate/3</c></seealso> BIF,
+ but ensures that exception handling and logging continues to
+ work as expected when the process wakes up.</p>
+ <p>Always use this function instead of the BIF for processes started
+ using <c>proc_lib</c> functions.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="init_ack" arity="1"/>
+ <name name="init_ack" arity="2"/>
+ <fsummary>Used by a process when it has started.</fsummary>
+ <desc>
+ <p>This function must be used by a process that has been started by
+ a <seealso marker="#start/3"><c>start[_link]/3,4,5</c></seealso>
+ function. It tells <c><anno>Parent</anno></c> that the process has
+ initialized itself, has started, or has failed to initialize
+ itself.</p>
+ <p>Function <c>init_ack/1</c> uses the parent value
+ previously stored by the start function used.</p>
+ <p>If this function is not called, the start function
+ returns an error tuple (if a link and/or a time-out is used) or
+ hang otherwise.</p>
+ <p>The following example illustrates how this function and
+ <c>proc_lib:start_link/3</c> are used:</p>
+ <code type="none">
+-module(my_proc).
+-export([start_link/0]).
+-export([init/1]).
+
+start_link() ->
+ proc_lib:start_link(my_proc, init, [self()]).
+
+init(Parent) ->
+ case do_initialization() of
+ ok ->
+ proc_lib:init_ack(Parent, {ok, self()});
+ {error, Reason} ->
+ exit(Reason)
+ end,
+ loop().
+
+...</code>
+ </desc>
+ </func>
+
+ <func>
+ <name name="initial_call" arity="1"/>
+ <fsummary>Extract the initial call of a <c>proc_lib</c>spawned process.
+ </fsummary>
+ <desc>
+ <p>Extracts the initial call of a process that was started
+ using one of the spawn or start functions in this module.
+ <c><anno>Process</anno></c> can either be a pid, an integer tuple
+ (from which a pid can be created), or the process information of a
+ process <c>Pid</c> fetched through an
+ <c>erlang:process_info(Pid)</c> function call.</p>
+ <note>
+ <p>The list <c><anno>Args</anno></c> no longer contains the
+ arguments, but the same number of atoms as the number of arguments;
+ the first atom is <c>'Argument__1'</c>, the second
+ <c>'Argument__2'</c>, and so on. The reason is that the argument
+ list could waste a significant amount of memory, and if the
+ argument list contained funs, it could be impossible to upgrade the
+ code for the module.</p>
+ <p>If the process was spawned using a fun, <c>initial_call/1</c> no
+ longer returns the fun, but the module, function for the
+ local function implementing the fun, and the arity, for example,
+ <c>{some_module,-work/3-fun-0-,0}</c> (meaning that the fun was
+ created in function <c>some_module:work/3</c>). The reason is that
+ keeping the fun would prevent code upgrade for the module, and that
+ a significant amount of memory could be wasted.</p>
+ </note>
+ </desc>
+ </func>
+
+ <func>
<name name="spawn" arity="1"/>
<name name="spawn" arity="2"/>
<name name="spawn" arity="3"/>
@@ -89,11 +228,12 @@
<type variable="Function"/>
<type variable="Args"/>
<desc>
- <p>Spawns a new process and initializes it as described above.
- The process is spawned using the
- <seealso marker="erts:erlang#spawn/1">spawn</seealso> BIFs.</p>
+ <p>Spawns a new process and initializes it as described in the
+ beginning of this manual page. The process is spawned using the
+ <seealso marker="erts:erlang#spawn/1"><c>spawn</c></seealso> BIFs.</p>
</desc>
</func>
+
<func>
<name name="spawn_link" arity="1"/>
<name name="spawn_link" arity="2"/>
@@ -106,18 +246,19 @@
<type variable="Function"/>
<type variable="Args"/>
<desc>
- <p>Spawns a new process and initializes it as described above.
- The process is spawned using the
- <seealso marker="erts:erlang#spawn_link/1">spawn_link</seealso>
+ <p>Spawns a new process and initializes it as described in the
+ beginning of this manual page. The process is spawned using the
+ <seealso marker="erts:erlang#spawn_link/1"><c>spawn_link</c></seealso>
BIFs.</p>
</desc>
</func>
+
<func>
<name name="spawn_opt" arity="2"/>
<name name="spawn_opt" arity="3"/>
<name name="spawn_opt" arity="4"/>
<name name="spawn_opt" arity="5"/>
- <fsummary>Spawn a new process with given options.</fsummary>
+ <fsummary>Spawn a new process with specified options.</fsummary>
<type variable="Node"/>
<type variable="Fun" name_i="1"/>
<type variable="Module"/>
@@ -125,17 +266,18 @@
<type variable="Args"/>
<type variable="SpawnOpts"/>
<desc>
- <p>Spawns a new process and initializes it as described above.
- The process is spawned using the
- <seealso marker="erts:erlang#spawn_opt/2">spawn_opt</seealso>
+ <p>Spawns a new process and initializes it as described in the
+ beginning of this manual page. The process is spawned using the
+ <seealso marker="erts:erlang#spawn_opt/2"><c>spawn_opt</c></seealso>
BIFs.</p>
<note>
- <p>Using the spawn option <c>monitor</c> is currently not
- allowed, but will cause the function to fail with reason
+ <p>Using spawn option <c>monitor</c> is not
+ allowed. It causes the function to fail with reason
<c>badarg</c>.</p>
</note>
</desc>
</func>
+
<func>
<name name="start" arity="3"/>
<name name="start" arity="4"/>
@@ -146,151 +288,94 @@
<fsummary>Start a new process synchronously.</fsummary>
<desc>
<p>Starts a new process synchronously. Spawns the process and
- waits for it to start. When the process has started, it
+ waits for it to start. When the process has started, it
<em>must</em> call
- <seealso marker="#init_ack/2">init_ack(Parent,Ret)</seealso>
- or <seealso marker="#init_ack/1">init_ack(Ret)</seealso>,
+ <seealso marker="#init_ack/2"><c>init_ack(Parent, Ret)</c></seealso>
+ or <seealso marker="#init_ack/1"><c>init_ack(Ret)</c></seealso>,
where <c>Parent</c> is the process that evaluates this
- function. At this time, <c>Ret</c> is returned.</p>
- <p>If the <c>start_link/3,4,5</c> function is used and
+ function. At this time, <c>Ret</c> is returned.</p>
+ <p>If function <c>start_link/3,4,5</c> is used and
the process crashes before it has called <c>init_ack/1,2</c>,
- <c>{error, <anno>Reason</anno>}</c> is returned if the calling process
- traps exits.</p>
- <p>If <c><anno>Time</anno></c> is specified as an integer, this function
- waits for <c><anno>Time</anno></c> milliseconds for the new process to call
- <c>init_ack</c>, or <c>{error, timeout}</c> is returned, and
- the process is killed.</p>
- <p>The <c><anno>SpawnOpts</anno></c> argument, if given, will be passed
- as the last argument to the <c>spawn_opt/2,3,4,5</c> BIF.</p>
+ <c>{error, <anno>Reason</anno>}</c> is returned if the calling
+ process traps exits.</p>
+ <p>If <c><anno>Time</anno></c> is specified as an integer, this
+ function waits for <c><anno>Time</anno></c> milliseconds for the
+ new process to call <c>init_ack</c>, or <c>{error, timeout}</c> is
+ returned, and the process is killed.</p>
+ <p>Argument <c><anno>SpawnOpts</anno></c>, if specified, is passed
+ as the last argument to the <seealso marker="erts:erlang#spawn_opt/2">
+ <c>spawn_opt/2,3,4,5</c></seealso> BIF.</p>
<note>
- <p>Using the spawn option <c>monitor</c> is currently not
- allowed, but will cause the function to fail with reason
+ <p>Using spawn option <c>monitor</c> is not
+ allowed. It causes the function to fail with reason
<c>badarg</c>.</p>
</note>
</desc>
</func>
- <func>
- <name name="init_ack" arity="1"/>
- <name name="init_ack" arity="2"/>
- <fsummary>Used by a process when it has started.</fsummary>
- <desc>
- <p>This function must be used by a process that has been started by
- a <seealso marker="#start/3">start[_link]/3,4,5</seealso>
- function. It tells <c><anno>Parent</anno></c> that the process has
- initialized itself, has started, or has failed to initialize
- itself.</p>
- <p>The <c>init_ack/1</c> function uses the parent value
- previously stored by the start function used.</p>
- <p>If this function is not called, the start function will
- return an error tuple (if a link and/or a timeout is used) or
- hang otherwise.</p>
- <p>The following example illustrates how this function and
- <c>proc_lib:start_link/3</c> are used.</p>
- <code type="none">
--module(my_proc).
--export([start_link/0]).
--export([init/1]).
-
-start_link() ->
- proc_lib:start_link(my_proc, init, [self()]).
-
-init(Parent) ->
- case do_initialization() of
- ok ->
- proc_lib:init_ack(Parent, {ok, self()});
- {error, Reason} ->
- exit(Reason)
- end,
- loop().
-...</code>
- </desc>
- </func>
<func>
- <name name="format" arity="1"/>
- <fsummary>Format a crash report.</fsummary>
+ <name name="stop" arity="1"/>
+ <fsummary>Terminate a process synchronously.</fsummary>
+ <type variable="Process"/>
<desc>
- <p>Equivalent to <c>format(<anno>CrashReport</anno>, latin1)</c>.</p>
- </desc>
- </func>
- <func>
- <name name="format" arity="2"/>
- <fsummary>Format a crash report.</fsummary>
- <desc>
- <p>This function can be used by a user defined event handler to
- format a crash report. The crash report is sent using
- <c>error_logger:error_report(crash_report, <anno>CrashReport</anno>)</c>.
- That is, the event to be handled is of the format
- <c>{error_report, GL, {Pid, crash_report, <anno>CrashReport</anno>}}</c>
- where <c>GL</c> is the group leader pid of the process
- <c>Pid</c> which sent the crash report.</p>
+ <p>Equivalent to <seealso marker="#stop/3">
+ <c>stop(Process, normal, infinity)</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="format" arity="3"/>
- <fsummary>Format a crash report.</fsummary>
+ <name name="stop" arity="3"/>
+ <fsummary>Terminate a process synchronously.</fsummary>
+ <type variable="Process"/>
+ <type variable="Reason"/>
+ <type variable="Timeout"/>
<desc>
- <p>This function can be used by a user defined event handler to
- format a crash report. When <anno>Depth</anno> is given as an
- positive integer, it will be used in the format string to
- limit the output as follows: <c>io_lib:format("~P",
- [Term,<anno>Depth</anno>])</c>.</p>
+ <p>Orders the process to exit with the specified <c>Reason</c> and
+ waits for it to terminate.</p>
+ <p>Returns <c>ok</c> if the process exits with
+ the specified <c>Reason</c> within <c>Timeout</c> milliseconds.</p>
+ <p>If the call times out, a <c>timeout</c> exception is raised.</p>
+ <p>If the process does not exist, a <c>noproc</c>
+ exception is raised.</p>
+ <p>The implementation of this function is based on the
+ <c>terminate</c> system message, and requires that the
+ process handles system messages correctly.
+ For information about system messages, see
+ <seealso marker="sys"><c>sys(3)</c></seealso> and section
+ <seealso marker="doc/design_principles:spec_proc">
+ sys and proc_lib</seealso> in OTP Design Principles.</p>
</desc>
</func>
- <func>
- <name name="initial_call" arity="1"/>
- <fsummary>Extract the initial call of a <c>proc_lib</c>spawned process.</fsummary>
- <desc>
- <p>Extracts the initial call of a process that was started
- using one of the spawn or start functions described above.
- <c><anno>Process</anno></c> can either be a pid, an integer tuple (from
- which a pid can be created), or the process information of a
- process <c>Pid</c> fetched through an
- <c>erlang:process_info(Pid)</c> function call.</p>
-
- <note><p>The list <c><anno>Args</anno></c> no longer contains the actual arguments,
- but the same number of atoms as the number of arguments; the first atom
- is always <c>'Argument__1'</c>, the second <c>'Argument__2'</c>, and
- so on. The reason is that the argument list could waste a significant
- amount of memory, and if the argument list contained funs, it could
- be impossible to upgrade the code for the module.</p>
- <p>If the process was spawned using a fun, <c>initial_call/1</c> no
- longer returns the actual fun, but the module, function for the local
- function implementing the fun, and the arity, for instance
- <c>{some_module,-work/3-fun-0-,0}</c> (meaning that the fun was
- created in the function <c>some_module:work/3</c>).
- The reason is that keeping the fun would prevent code upgrade for the
- module, and that a significant amount of memory could be wasted.</p>
- </note>
- </desc>
- </func>
<func>
<name name="translate_initial_call" arity="1"/>
- <fsummary>Extract and translate the initial call of a <c>proc_lib</c>spawned process.</fsummary>
+ <fsummary>Extract and translate the initial call of a
+ <c>proc_lib</c>spawned process.</fsummary>
<desc>
- <p>This function is used by the <c>c:i/0</c> and
- <c>c:regs/0</c> functions in order to present process
- information.</p>
- <p>Extracts the initial call of a process that was started
- using one of the spawn or start functions described above,
- and translates it to more useful information. <c><anno>Process</anno></c>
+ <p>This function is used by functions
+ <seealso marker="c#i/0"><c>c:i/0</c></seealso> and
+ <seealso marker="c#regs/0"><c>c:regs/0</c></seealso>
+ to present process information.</p>
+ <p>This function extracts the initial call of a process that was
+ started using one of the spawn or start functions in this module,
+ and translates it to more useful information.
+ <c><anno>Process</anno></c>
can either be a pid, an integer tuple (from which a pid can
be created), or the process information of a process
<c>Pid</c> fetched through an <c>erlang:process_info(Pid)</c>
function call.</p>
- <p>If the initial call is to one of the system defined behaviors
+ <p>If the initial call is to one of the system-defined behaviors
such as <c>gen_server</c> or <c>gen_event</c>, it is
translated to more useful information. If a <c>gen_server</c>
is spawned, the returned <c><anno>Module</anno></c> is the name of
the callback module and <c><anno>Function</anno></c> is <c>init</c>
(the function that initiates the new server).</p>
<p>A <c>supervisor</c> and a <c>supervisor_bridge</c> are also
- <c>gen_server</c> processes. In order to return information
+ <c>gen_server</c> processes. To return information
that this process is a supervisor and the name of the
- call-back module, <c><anno>Module</anno></c> is <c>supervisor</c> and
+ callback module, <c><anno>Module</anno></c> is <c>supervisor</c> and
<c><anno>Function</anno></c> is the name of the supervisor callback
- module. <c><anno>Arity</anno></c> is <c>1</c> since the <c>init/1</c>
+ module. <c><anno>Arity</anno></c> is <c>1</c>, as the <c>init/1</c>
function is called initially in the callback module.</p>
<p>By default, <c>{proc_lib,init_p,5}</c> is returned if no
information about the initial call can be found. It is
@@ -298,57 +383,12 @@ init(Parent) ->
spawned with the <c>proc_lib</c> module.</p>
</desc>
</func>
- <func>
- <name name="hibernate" arity="3"/>
- <fsummary>Hibernate a process until a message is sent to it</fsummary>
- <desc>
- <p>This function does the same as (and does call) the BIF
- <seealso marker="erts:erlang#erlang:hibernate/3">hibernate/3</seealso>,
- but ensures that exception handling and logging continues to
- work as expected when the process wakes up. Always use this
- function instead of the BIF for processes started using
- <c>proc_lib</c> functions.</p>
- </desc>
- </func>
- <func>
- <name name="stop" arity="1"/>
- <fsummary>Terminate a process synchronously.</fsummary>
- <type variable="Process"/>
- <desc>
- <p>Equivalent to <seealso marker="#stop/3">stop(Process,
- normal, infinity)</seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="stop" arity="3"/>
- <fsummary>Terminate a process synchronously.</fsummary>
- <type variable="Process"/>
- <type variable="Reason"/>
- <type variable="Timeout"/>
- <desc>
- <p>Orders the process to exit with the given <c>Reason</c> and
- waits for it to terminate.</p>
- <p>The function returns <c>ok</c> if the process exits with
- the given <c>Reason</c> within <c>Timeout</c>
- milliseconds.</p>
- <p>If the call times out, a <c>timeout</c> exception is
- raised.</p>
- <p>If the process does not exist, a <c>noproc</c>
- exception is raised.</p>
- <p>The implementation of this function is based on the
- <c>terminate</c> system message, and requires that the
- process handles system messages correctly.
- See <seealso marker="sys">sys(3)</seealso>
- and <seealso marker="doc/design_principles:spec_proc">OTP
- Design Principles</seealso> for information about system
- messages.</p>
- </desc>
- </func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="kernel:error_logger">error_logger(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="kernel:error_logger">
+ <c>error_logger(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/proplists.xml b/lib/stdlib/doc/src/proplists.xml
index de4fbd3a7f..fe6b8cc3bf 100644
--- a/lib/stdlib/doc/src/proplists.xml
+++ b/lib/stdlib/doc/src/proplists.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,51 +30,66 @@
<checked></checked>
<date>2002-09-28</date>
<rev>A</rev>
- <file>proplists.sgml</file>
+ <file>proplists.xml</file>
</header>
<module>proplists</module>
- <modulesummary>Support functions for property lists</modulesummary>
+ <modulesummary>Support functions for property lists.</modulesummary>
<description>
<p>Property lists are ordinary lists containing entries in the form
of either tuples, whose first elements are keys used for lookup and
- insertion, or atoms, which work as shorthand for tuples <c>{Atom, true}</c>. (Other terms are allowed in the lists, but are ignored
- by this module.) If there is more than one entry in a list for a
+ insertion, or atoms, which work as shorthand for tuples
+ <c>{Atom, true}</c>. (Other terms are allowed in the lists, but are
+ ignored by this module.) If there is more than one entry in a list for a
certain key, the first occurrence normally overrides any later
(irrespective of the arity of the tuples).</p>
+
<p>Property lists are useful for representing inherited properties,
- such as options passed to a function where a user may specify options
+ such as options passed to a function where a user can specify options
overriding the default settings, object properties, annotations,
- etc.</p>
- <p>Two keys are considered equal if they match (<c>=:=</c>). In other
- words, numbers are compared literally rather than by value, so that,
- for instance, <c>1</c> and <c>1.0</c> are different keys.</p>
+ and so on.</p>
+
+ <p>Two keys are considered equal if they match (<c>=:=</c>). That is,
+ numbers are compared literally rather than by value, so that,
+ for example, <c>1</c> and <c>1.0</c> are different keys.</p>
</description>
+
<datatypes>
<datatype>
<name name="property"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="append_values" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Similar to <c>get_all_values/2</c>, but each value is
- wrapped in a list unless it is already itself a list, and the
- resulting list of lists is concatenated. This is often useful for
- "incremental" options; e.g., <c>append_values(a, [{a, [1,2]}, {b, 0}, {a, 3}, {c, -1}, {a, [4]}])</c> will return the list
- <c>[1,2,3,4]</c>.</p>
+ <p>Similar to
+ <seealso marker="#get_all_values/2"><c>get_all_values/2</c></seealso>,
+ but each value is wrapped in a list unless it is already itself a
+ list. The resulting list of lists is concatenated. This is often
+ useful for "incremental" options.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+append_values(a, [{a, [1,2]}, {b, 0}, {a, 3}, {c, -1}, {a, [4]}])</code>
+ <p>returns:</p>
+ <code type="none">
+[1,2,3,4]</code>
</desc>
</func>
+
<func>
<name name="compact" arity="1"/>
<fsummary></fsummary>
<desc>
<p>Minimizes the representation of all entries in the list. This is
equivalent to <c><![CDATA[[property(P) || P <- ListIn]]]></c>.</p>
- <p>See also: <c>property/1</c>, <c>unfold/1</c>.</p>
+ <p>See also
+ <seealso marker="#property/1"><c>property/1</c></seealso>,
+ <seealso marker="#unfold/1"><c>unfold/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
<fsummary></fsummary>
@@ -83,96 +98,111 @@
<c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="expand" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Expands particular properties to corresponding sets of
- properties (or other terms). For each pair <c>{<anno>Property</anno>, <anno>Expansion</anno>}</c> in <c><anno>Expansions</anno></c>, if <c>E</c> is
- the first entry in <c><anno>ListIn</anno></c> with the same key as
- <c><anno>Property</anno></c>, and <c>E</c> and <c><anno>Property</anno></c>
- have equivalent normal forms, then <c>E</c> is replaced with
- the terms in <c><anno>Expansion</anno></c>, and any following entries with
- the same key are deleted from <c><anno>ListIn</anno></c>.</p>
- <p>For example, the following expressions all return <c>[fie, bar, baz, fum]</c>:</p>
+ properties (or other terms). For each pair <c>{<anno>Property</anno>,
+ <anno>Expansion</anno>}</c> in <c><anno>Expansions</anno></c>: if
+ <c>E</c> is the first entry in <c><anno>ListIn</anno></c> with the
+ same key as <c><anno>Property</anno></c>, and <c>E</c> and
+ <c><anno>Property</anno></c> have equivalent normal forms, then
+ <c>E</c> is replaced with the terms in <c><anno>Expansion</anno></c>,
+ and any following entries with the same key are deleted from
+ <c><anno>ListIn</anno></c>.</p>
+ <p>For example, the following expressions all return
+ <c>[fie, bar, baz, fum]</c>:</p>
<code type="none">
- expand([{foo, [bar, baz]}],
- [fie, foo, fum])
- expand([{{foo, true}, [bar, baz]}],
- [fie, foo, fum])
- expand([{{foo, false}, [bar, baz]}],
- [fie, {foo, false}, fum])</code>
- <p>However, no expansion is done in the following call:</p>
+expand([{foo, [bar, baz]}], [fie, foo, fum])
+expand([{{foo, true}, [bar, baz]}], [fie, foo, fum])
+expand([{{foo, false}, [bar, baz]}], [fie, {foo, false}, fum])</code>
+ <p>However, no expansion is done in the following call
+ because <c>{foo, false}</c> shadows <c>foo</c>:</p>
<code type="none">
- expand([{{foo, true}, [bar, baz]}],
- [{foo, false}, fie, foo, fum])</code>
- <p>because <c>{foo, false}</c> shadows <c>foo</c>.</p>
- <p>Note that if the original property term is to be preserved in the
+expand([{{foo, true}, [bar, baz]}], [{foo, false}, fie, foo, fum])</code>
+ <p>Notice that if the original property term is to be preserved in the
result when expanded, it must be included in the expansion list. The
inserted terms are not expanded recursively. If
- <c><anno>Expansions</anno></c> contains more than one property with the same
- key, only the first occurrence is used.</p>
- <p>See also: <c>normalize/2</c>.</p>
+ <c><anno>Expansions</anno></c> contains more than one property with
+ the same key, only the first occurrence is used.</p>
+ <p>See also
+ <seealso marker="#normalize/2"><c>normalize/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="get_all_values" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Similar to <c>get_value/2</c>, but returns the list of
- values for <em>all</em> entries <c>{Key, Value}</c> in
- <c><anno>List</anno></c>. If no such entry exists, the result is the empty
- list.</p>
- <p>See also: <c>get_value/2</c>.</p>
+ <p>Similar to
+ <seealso marker="#get_value/2"><c>get_value/2</c></seealso>,
+ but returns the list of values for <em>all</em> entries
+ <c>{Key, Value}</c> in <c><anno>List</anno></c>. If no such entry
+ exists, the result is the empty list.</p>
</desc>
</func>
+
<func>
<name name="get_bool" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Returns the value of a boolean key/value option. If
- <c>lookup(<anno>Key</anno>, <anno>List</anno>)</c> would yield <c>{<anno>Key</anno>, true}</c>,
- this function returns <c>true</c>; otherwise <c>false</c>
- is returned.</p>
- <p>See also: <c>get_value/2</c>, <c>lookup/2</c>.</p>
+ <c>lookup(<anno>Key</anno>, <anno>List</anno>)</c> would yield
+ <c>{<anno>Key</anno>, true}</c>, this function returns <c>true</c>,
+ otherwise <c>false</c>.</p>
+ <p>See also
+ <seealso marker="#get_value/2"><c>get_value/2</c></seealso>,
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="get_keys" arity="1"/>
<fsummary></fsummary>
<desc>
- <p>Returns an unordered list of the keys used in <c><anno>List</anno></c>,
- not containing duplicates.</p>
+ <p>Returns an unordered list of the keys used in
+ <c><anno>List</anno></c>, not containing duplicates.</p>
</desc>
</func>
+
<func>
<name name="get_value" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Equivalent to <c>get_value(<anno>Key</anno>, <anno>List</anno>, undefined)</c>.</p>
+ <p>Equivalent to
+ <c>get_value(<anno>Key</anno>, <anno>List</anno>, undefined)</c>.</p>
</desc>
</func>
+
<func>
<name name="get_value" arity="3"/>
<fsummary></fsummary>
<desc>
<p>Returns the value of a simple key/value property in
- <c><anno>List</anno></c>. If <c>lookup(<anno>Key</anno>, <anno>List</anno>)</c> would yield
- <c>{<anno>Key</anno>, Value}</c>, this function returns the corresponding
- <c>Value</c>, otherwise <c><anno>Default</anno></c> is returned.</p>
- <p>See also: <c>get_all_values/2</c>, <c>get_bool/2</c>,
- <c>get_value/2</c>, <c>lookup/2</c>.</p>
+ <c><anno>List</anno></c>. If <c>lookup(<anno>Key</anno>,
+ <anno>List</anno>)</c> would yield <c>{<anno>Key</anno>, Value}</c>,
+ this function returns the corresponding <c>Value</c>, otherwise
+ <c><anno>Default</anno></c>.</p>
+ <p>See also
+ <seealso marker="#get_all_values/2"><c>get_all_values/2</c></seealso>,
+ <seealso marker="#get_bool/2"><c>get_bool/2</c></seealso>,
+ <seealso marker="#get_value/2"><c>get_value/2</c></seealso>,
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_defined" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>List</anno></c> contains at least
one entry associated with <c><anno>Key</anno></c>, otherwise
- <c>false</c> is returned.</p>
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="lookup" arity="2"/>
<fsummary></fsummary>
@@ -181,128 +211,160 @@
<c><anno>List</anno></c>, if one exists, otherwise returns
<c>none</c>. For an atom <c>A</c> in the list, the tuple
<c>{A, true}</c> is the entry associated with <c>A</c>.</p>
- <p>See also: <c>get_bool/2</c>, <c>get_value/2</c>,
- <c>lookup_all/2</c>.</p>
+ <p>See also
+ <seealso marker="#get_bool/2"><c>get_bool/2</c></seealso>,
+ <seealso marker="#get_value/2"><c>get_value/2</c></seealso>,
+ <seealso marker="#lookup_all/2"><c>lookup_all/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="lookup_all" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Returns the list of all entries associated with <c><anno>Key</anno></c>
- in <c><anno>List</anno></c>. If no such entry exists, the result is the
- empty list.</p>
- <p>See also: <c>lookup/2</c>.</p>
+ <p>Returns the list of all entries associated with
+ <c><anno>Key</anno></c> in <c><anno>List</anno></c>. If no such entry
+ exists, the result is the empty list.</p>
+ <p>See also
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="normalize" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Passes <c><anno>ListIn</anno></c> through a sequence of
substitution/expansion stages. For an <c>aliases</c> operation,
- the function <c>substitute_aliases/2</c> is applied using the
- given list of aliases; for a <c>negations</c> operation,
- <c>substitute_negations/2</c> is applied using the given
- negation list; for an <c>expand</c> operation, the function
- <c>expand/2</c> is applied using the given list of expansions.
- The final result is automatically compacted (cf.
- <c>compact/1</c>).</p>
+ function <seealso marker="#substitute_aliases/2">
+ <c>substitute_aliases/2</c></seealso> is applied using the
+ specified list of aliases:</p>
+ <list type="bulleted">
+ <item>
+ <p>For a <c>negations</c> operation, <c>substitute_negations/2</c>
+ is applied using the specified negation list.</p>
+ </item>
+ <item>
+ <p>For an <c>expand</c> operation, function
+ <seealso marker="#expand/2"><c>expand/2</c></seealso>
+ is applied using the specified list of expansions.</p>
+ </item>
+ </list>
+ <p>The final result is automatically compacted (compare
+ <seealso marker="#compact/1"><c>compact/1</c></seealso>).</p>
<p>Typically you want to substitute negations first, then aliases,
then perform one or more expansions (sometimes you want to pre-expand
particular entries before doing the main expansion). You might want
to substitute negations and/or aliases repeatedly, to allow such
forms in the right-hand side of aliases and expansion lists.</p>
- <p>See also: <c>compact/1</c>, <c>expand/2</c>,
- <c>substitute_aliases/2</c>, <c>substitute_negations/2</c>.</p>
+ <p>See also <seealso marker="#substitute_negations/2">
+ <c>substitute_negations/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="property" arity="1"/>
<fsummary></fsummary>
<desc>
<p>Creates a normal form (minimal) representation of a property. If
- <c><anno>PropertyIn</anno></c> is <c>{Key, true}</c> where
- <c>Key</c> is an atom, this returns <c>Key</c>, otherwise
- the whole term <c><anno>PropertyIn</anno></c> is returned.</p>
- <p>See also: <c>property/2</c>.</p>
+ <c><anno>PropertyIn</anno></c> is <c>{Key, true}</c>, where
+ <c>Key</c> is an atom, <c>Key</c> is returned, otherwise
+ the whole term <c><anno>PropertyIn</anno></c> is returned.</p>
+ <p>See also
+ <seealso marker="#property/2"><c>property/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="property" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Creates a normal form (minimal) representation of a simple
- key/value property. Returns <c><anno>Key</anno></c> if <c><anno>Value</anno></c> is
- <c>true</c> and <c><anno>Key</anno></c> is an atom, otherwise a tuple
- <c>{<anno>Key</anno>, <anno>Value</anno>}</c> is returned.</p>
- <p>See also: <c>property/1</c>.</p>
+ <p>Creates a normal form (minimal) representation of a simple key/value
+ property. Returns <c><anno>Key</anno></c> if <c><anno>Value</anno></c>
+ is <c>true</c> and <c><anno>Key</anno></c> is an atom, otherwise a
+ tuple <c>{<anno>Key</anno>, <anno>Value</anno>}</c> is returned.</p>
+ <p>See also
+ <seealso marker="#property/1"><c>property/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="split" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Partitions <c><anno>List</anno></c> into a list of sublists and a
- remainder. <c><anno>Lists</anno></c> contains one sublist for each key in
- <c><anno>Keys</anno></c>, in the corresponding order. The relative order of
- the elements in each sublist is preserved from the original
- <c><anno>List</anno></c>. <c><anno>Rest</anno></c> contains the elements in
- <c><anno>List</anno></c> that are not associated with any of the given keys,
+ remainder. <c><anno>Lists</anno></c> contains one sublist for each key
+ in <c><anno>Keys</anno></c>, in the corresponding order. The relative
+ order of the elements in each sublist is preserved from the original
+ <c><anno>List</anno></c>. <c><anno>Rest</anno></c> contains the
+ elements in <c><anno>List</anno></c> that are not associated with any
+ of the specified keys,
also with their original relative order preserved.</p>
- <p>Example:
- split([{c, 2}, {e, 1}, a, {c, 3, 4}, d, {b, 5}, b], [a, b, c])</p>
- <p>returns</p>
- <p>{[[a], [{b, 5}, b],[{c, 2}, {c, 3, 4}]], [{e, 1}, d]}</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+split([{c, 2}, {e, 1}, a, {c, 3, 4}, d, {b, 5}, b], [a, b, c])</code>
+ <p>returns:</p>
+ <code type="none">
+{[[a], [{b, 5}, b],[{c, 2}, {c, 3, 4}]], [{e, 1}, d]}</code>
</desc>
</func>
+
<func>
<name name="substitute_aliases" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Substitutes keys of properties. For each entry in
- <c><anno>ListIn</anno></c>, if it is associated with some key <c>K1</c>
- such that <c>{K1, K2}</c> occurs in <c><anno>Aliases</anno></c>, the
+ <c><anno>ListIn</anno></c>, if it is associated with some key
+ <c>K1</c> such that <c>{K1, K2}</c> occurs in
+ <c><anno>Aliases</anno></c>, the
key of the entry is changed to <c>K2</c>. If the same
<c>K1</c> occurs more than once in <c><anno>Aliases</anno></c>, only
the first occurrence is used.</p>
- <p>Example: <c>substitute_aliases([{color, colour}], L)</c>
- will replace all tuples <c>{color, ...}</c> in <c>L</c>
+ <p>For example, <c>substitute_aliases([{color, colour}], L)</c>
+ replaces all tuples <c>{color, ...}</c> in <c>L</c>
with <c>{colour, ...}</c>, and all atoms <c>color</c>
with <c>colour</c>.</p>
- <p>See also: <c>normalize/2</c>, <c>substitute_negations/2</c>.</p>
+ <p>See also
+ <seealso marker="#normalize/2"><c>normalize/2</c></seealso>,
+ <seealso marker="#substitute_negations/2">
+ <c>substitute_negations/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="substitute_negations" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Substitutes keys of boolean-valued properties and
simultaneously negates their values. For each entry in
- <c><anno>ListIn</anno></c>, if it is associated with some key <c>K1</c>
- such that <c>{K1, K2}</c> occurs in <c><anno>Negations</anno></c>, then
- if the entry was <c>{K1, true}</c> it will be replaced with
- <c>{K2, false}</c>, otherwise it will be replaced with
- <c>{K2, true}</c>, thus changing the name of the option and
- simultaneously negating the value given by
- <c>get_bool(ListIn)</c>. If the same <c>K1</c> occurs more
- than once in <c><anno>Negations</anno></c>, only the first occurrence is
- used.</p>
- <p>Example: <c>substitute_negations([{no_foo, foo}], L)</c>
- will replace any atom <c>no_foo</c> or tuple
+ <c><anno>ListIn</anno></c>, if it is associated with some key
+ <c>K1</c> such that <c>{K1, K2}</c> occurs in
+ <c><anno>Negations</anno></c>: if the entry was
+ <c>{K1, true}</c>, it is replaced with <c>{K2, false}</c>, otherwise
+ with <c>{K2, true}</c>, thus changing the name of the option and
+ simultaneously negating the value specified by
+ <seealso marker="#get_bool/2">
+ <c>get_bool(Key, <anno>ListIn</anno></c></seealso>.
+ If the same <c>K1</c> occurs more than once in
+ <c><anno>Negations</anno></c>, only the first occurrence is used.</p>
+ <p>For example, <c>substitute_negations([{no_foo, foo}], L)</c>
+ replaces any atom <c>no_foo</c> or tuple
<c>{no_foo, true}</c> in <c>L</c> with <c>{foo, false}</c>,
- and any other tuple <c>{no_foo, ...}</c> with
- <c>{foo, true}</c>.</p>
- <p>See also: <c>get_bool/2</c>, <c>normalize/2</c>,
- <c>substitute_aliases/2</c>.</p>
+ and any other tuple <c>{no_foo, ...}</c> with <c>{foo, true}</c>.</p>
+ <p>See also
+ <seealso marker="#get_bool/2"><c>get_bool/2</c></seealso>,
+ <seealso marker="#normalize/2"><c>normalize/2</c></seealso>,
+ <seealso marker="#substitute_aliases/2">
+ <c>substitute_aliases/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="unfold" arity="1"/>
<fsummary></fsummary>
<desc>
- <p>Unfolds all occurrences of atoms in <c><anno>ListIn</anno></c> to tuples
- <c>{Atom, true}</c>.</p>
+ <p>Unfolds all occurrences of atoms in <c><anno>ListIn</anno></c> to
+ tuples <c>{Atom, true}</c>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/qlc.xml b/lib/stdlib/doc/src/qlc.xml
index 8101b6458c..fe14a6334c 100644
--- a/lib/stdlib/doc/src/qlc.xml
+++ b/lib/stdlib/doc/src/qlc.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,102 +24,121 @@
<title>qlc</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2004-08-25</date>
<rev>PA1</rev>
- <file>qlc.sgml</file>
+ <file>qlc.xml</file>
</header>
<module>qlc</module>
- <modulesummary>Query Interface to Mnesia, ETS, Dets, etc</modulesummary>
+ <modulesummary>Query interface to Mnesia, ETS, Dets, and so on.
+ </modulesummary>
<description>
- <p>The <c>qlc</c> module provides a query interface to Mnesia, ETS,
- Dets and other data structures that implement an iterator style
- traversal of objects. </p>
+ <p>This module provides a query interface to
+ <seealso marker="mnesia:mnesia">Mnesia</seealso>,
+ <seealso marker="ets">ETS</seealso>,
+ <seealso marker="dets">Dets</seealso>,
+ and other data structures that provide an iterator style
+ traversal of objects.</p>
</description>
- <section><title>Overview</title>
-
- <p>The <c>qlc</c> module implements a query interface to <em>QLC
- tables</em>. Typical QLC tables are ETS, Dets, and Mnesia
- tables. There is also support for user defined tables, see the
- <seealso marker="#implementing_a_qlc_table">Implementing a QLC
- table</seealso> section. <marker
- id="query_list_comprehension"></marker>
- A <em>query</em> is stated using
+ <section>
+ <title>Overview</title>
+ <p>This module provides a query interface to <em>QLC
+ tables</em>. Typical QLC tables are Mnesia, ETS, and
+ Dets tables. Support is also provided for user-defined tables, see section
+ <seealso marker="#implementing_a_qlc_table">
+ Implementing a QLC Table</seealso>.
+ <marker id="query_list_comprehension"></marker>
+ A <em>query</em> is expressed using
<em>Query List Comprehensions</em> (QLCs). The answers to a
query are determined by data in QLC tables that fulfill the
constraints expressed by the QLCs of the query. QLCs are similar
- to ordinary list comprehensions as described in the Erlang
- Reference Manual and Programming Examples except that variables
- introduced in patterns cannot be used in list expressions. In
- fact, in the absence of optimizations and options such as
- <c>cache</c> and <c>unique</c> (see below), every QLC free of
- QLC tables evaluates to the same list of answers as the
+ to ordinary list comprehensions as described in
+ <seealso marker="doc/reference_manual:expressions#lcs">
+ Erlang Reference Manual</seealso> and
+ <seealso marker="doc/programming_examples:list_comprehensions">
+ Programming Examples</seealso>, except that variables
+ introduced in patterns cannot be used in list expressions.
+ In the absence of optimizations and options such as
+ <c>cache</c> and <c>unique</c> (see section
+ <seealso marker="#common_options">Common Options</seealso>, every
+ QLC free of QLC tables evaluates to the same list of answers as the
identical ordinary list comprehension.</p>
<p>While ordinary list comprehensions evaluate to lists, calling
- <seealso marker="#q">qlc:q/1,2</seealso> returns a <marker
- id="query_handle"></marker><em> Query
- Handle</em>. To obtain all the answers to a query, <seealso
- marker="#eval">qlc:eval/1,2</seealso> should be called with the
+ <seealso marker="#q/1"><c>q/1,2</c></seealso> returns a
+ <marker id="query_handle"></marker><em>query handle</em>.
+ To obtain all the answers to a query, <seealso marker="#eval/1">
+ <c>eval/1,2</c></seealso> is to be called with the
query handle as first argument. Query handles are essentially
- functional objects ("funs") created in the module calling <c>q/1,2</c>.
- As the funs refer to the module's code, one should
- be careful not to keep query handles too long if the module's
- code is to be replaced.
- Code replacement is described in the <seealso
- marker="doc/reference_manual:code_loading">Erlang Reference
- Manual</seealso>. The list of answers can also be traversed in
- chunks by use of a <marker
- id="query_cursor"></marker><em>Query Cursor</em>. Query cursors are
- created by calling <seealso
- marker="#cursor">qlc:cursor/1,2</seealso> with a query handle as
- first argument. Query cursors are essentially Erlang processes.
+ functional objects (funs) created in the module calling <c>q/1,2</c>.
+ As the funs refer to the module code, be careful not to keep query
+ handles too long if the module code is to be replaced.
+ Code replacement is described in section
+ <seealso marker="doc/reference_manual:code_loading">
+ Compilation and Code Loading</seealso> in the Erlang Reference Manual.
+ The list of answers can also be traversed in chunks by use of a
+ <marker id="query_cursor"></marker><em>query cursor</em>.
+ Query cursors are created by calling
+ <seealso marker="#cursor/1"><c>cursor/1,2</c></seealso> with a query
+ handle as first argument. Query cursors are essentially Erlang processes.
One answer at a time is sent from the query cursor process to
the process that created the cursor.</p>
-
</section>
- <section><title>Syntax</title>
-
+ <section>
+ <title>Syntax</title>
<p>Syntactically QLCs have the same parts as ordinary list
comprehensions:</p>
- <code type="none">[Expression || Qualifier1, Qualifier2, ...]</code>
+ <code type="none">
+[Expression || Qualifier1, Qualifier2, ...]</code>
- <p><c>Expression</c> (the <em>template</em>) is an arbitrary
+ <p><c>Expression</c> (the <em>template</em>) is any
Erlang expression. Qualifiers are either <em>filters</em> or
<em>generators</em>. Filters are Erlang expressions returning
- <c>bool()</c>. Generators have the form
+ <c>boolean()</c>. Generators have the form
<c><![CDATA[Pattern <- ListExpression]]></c>, where
<c>ListExpression</c> is an expression evaluating to a query
handle or a list. Query handles are returned from
- <c>qlc:table/2</c>, <c>qlc:append/1,2</c>, <c>qlc:sort/1,2</c>,
- <c>qlc:keysort/2,3</c>, <c>qlc:q/1,2</c>, and
- <c>qlc:string_to_handle/1,2,3</c>.</p>
-
+ <seealso marker="#append/1"><c>append/1,2</c></seealso>,
+ <seealso marker="#keysort/2"><c>keysort/2,3</c></seealso>,
+ <seealso marker="#q/1"><c>q/1,2</c></seealso>,
+ <seealso marker="#sort/1"><c>sort/1,2</c></seealso>,
+ <seealso marker="#string_to_handle/1">
+ <c>string_to_handle/1,2,3</c></seealso>, and
+ <seealso marker="#table/2"><c>table/2</c></seealso>.</p>
</section>
- <section><title>Evaluation</title>
-
- <p>The evaluation of a query handle begins by the inspection of
- options and the collection of information about tables. As a
- result qualifiers are modified during the optimization phase.
- Next all list expressions are evaluated. If a cursor has been
- created evaluation takes place in the cursor process. For those
- list expressions that are QLCs, the list expressions of the
- QLCs' generators are evaluated as well. One has to be careful if
- list expressions have side effects since the order in which list
- expressions are evaluated is unspecified. Finally the answers
- are found by evaluating the qualifiers from left to right,
- backtracking when some filter returns <c>false</c>, or
- collecting the template when all filters return <c>true</c>.</p>
-
- <p>Filters that do not return <c>bool()</c> but fail are handled
- differently depending on their syntax: if the filter is a guard
+ <section>
+ <title>Evaluation</title>
+ <p>A query handle is evaluated in the following order:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>Inspection of options and the collection of information about
+ tables. As a result, qualifiers are modified during the optimization
+ phase.</p>
+ </item>
+ <item>
+ <p>All list expressions are evaluated. If a cursor has been created,
+ evaluation takes place in the cursor process. For list expressions
+ that are QLCs, the list expressions of the generators of the QLCs
+ are evaluated as well. Be careful if list expressions have side
+ effects, as list expressions are evaluated in unspecified order.</p>
+ </item>
+ <item>
+ <p>The answers are found by evaluating the qualifiers from left to
+ right, backtracking when some filter returns <c>false</c>, or
+ collecting the template when all filters return <c>true</c>.</p>
+ </item>
+ </list>
+
+ <p>Filters that do not return <c>boolean()</c> but fail are handled
+ differently depending on their syntax: if the filter is a guard,
it returns <c>false</c>, otherwise the query evaluation fails.
This behavior makes it possible for the <c>qlc</c> module to do
some optimizations without affecting the meaning of a query. For
@@ -131,302 +150,311 @@
candidate objects can often be found by looking up some key
values of the table or by traversing the table using a match
specification. It is necessary to place the guard filters
- immediately after the table's generator, otherwise the candidate
- objects will not be restricted to a small set. The reason is
+ immediately after the table generator, otherwise the candidate
+ objects are not restricted to a small set. The reason is
that objects that could make the query evaluation fail must not
- be excluded by looking up a key or running a match
- specification.</p>
-
+ be excluded by looking up a key or running a match specification.</p>
</section>
- <section><title>Join</title>
-
+ <section>
+ <title>Join</title>
<p>The <c>qlc</c> module supports fast join of two query handles.
Fast join is possible if some position <c>P1</c> of one query
handler and some position <c>P2</c> of another query handler are
- tested for equality. Two fast join methods have been
- implemented:</p>
+ tested for equality. Two fast join methods are provided:</p>
<list type="bulleted">
- <item>Lookup join traverses all objects of one query handle and
- finds objects of the other handle (a QLC table) such that the
+ <item><p><em>Lookup join</em> traverses all objects of one query handle
+ and finds objects of the other handle (a QLC table) such that the
values at <c>P1</c> and <c>P2</c> match or compare equal.
The <c>qlc</c> module does not create
- any indices but looks up values using the key position and
- the indexed positions of the QLC table.
+ any indexes but looks up values using the key position and
+ the indexed positions of the QLC table.</p>
</item>
- <item>Merge join sorts the objects of each query handle if
+ <item><p><em>Merge join</em> sorts the objects of each query handle if
necessary and filters out objects where the values at
- <c>P1</c> and <c>P2</c> do not compare equal. If there are
- many objects with the same value of <c>P2</c> a temporary
- file will be used for the equivalence classes.
+ <c>P1</c> and <c>P2</c> do not compare equal. If
+ many objects with the same value of <c>P2</c> exist, a temporary
+ file is used for the equivalence classes.</p>
</item>
</list>
<p>The <c>qlc</c> module warns at compile time if a QLC
combines query handles in such a way that more than one join is
- possible. In other words, there is no query planner that can
- choose a good order between possible join operations. It is up
+ possible. That is, no query planner is provided that can
+ select a good order between possible join operations. It is up
to the user to order the joins by introducing query handles.</p>
<p>The join is to be expressed as a guard filter. The filter must
be placed immediately after the two joined generators, possibly
after guard filters that use variables from no other generators
- but the two joined generators. The <c>qlc</c> module inspects
+ but the two joined generators. The <c>qlc</c> module inspects
the operands of
<c>=:=/2</c>, <c>==/2</c>, <c>is_record/2</c>, <c>element/2</c>,
and logical operators (<c>and/2</c>, <c>or/2</c>,
<c>andalso/2</c>, <c>orelse/2</c>, <c>xor/2</c>) when
determining which joins to consider.</p>
-
</section>
- <section><title>Common options</title>
-
- <p>The following options are accepted by <c>cursor/2</c>,
- <c>eval/2</c>, <c>fold/4</c>, and <c>info/2</c>:</p>
+ <section>
+ <marker id="common_options"></marker>
+ <title>Common Options</title>
+ <p>The following options are accepted by
+ <seealso marker="#cursor/2"><c>cursor/2</c></seealso>,
+ <seealso marker="#eval/2"><c>eval/2</c></seealso>,
+ <seealso marker="#fold/4"><c>fold/4</c></seealso>, and
+ <seealso marker="#info/2"><c>info/2</c></seealso>:</p>
<list type="bulleted">
- <item><c>{cache_all, Cache}</c> where <c>Cache</c> is
+ <item><p><c>{cache_all, Cache}</c>, where <c>Cache</c> is
equal to <c>ets</c> or <c>list</c> adds a
<c>{cache,&nbsp;Cache}</c> option to every list expression
- of the query except tables and lists. Default is
- <c>{cache_all,&nbsp;no}</c>. The option <c>cache_all</c> is
- equivalent to <c>{cache_all,&nbsp;ets}</c>.
+ of the query except tables and lists. Defaults to
+ <c>{cache_all,&nbsp;no}</c>. Option <c>cache_all</c> is
+ equivalent to <c>{cache_all,&nbsp;ets}</c>.</p>
</item>
- <item><c>{max_list_size, MaxListSize}</c> <marker
- id="max_list_size"></marker> where <c>MaxListSize</c> is the
+ <item><p><marker id="max_list_size"></marker><c>{max_list_size,
+ MaxListSize}</c>, where <c>MaxListSize</c> is the
size in bytes of terms on the external format. If the
accumulated size of collected objects exceeds
- <c>MaxListSize</c> the objects are written onto a temporary
- file. This option is used by the <c>{cache,&nbsp;list}</c>
- option as well as by the merge join method. Default is
- 512*1024 bytes.
+ <c>MaxListSize</c>, the objects are written onto a temporary
+ file. This option is used by option <c>{cache,&nbsp;list}</c>
+ and by the merge join method. Defaults to 512*1024 bytes.</p>
</item>
- <item><c>{tmpdir_usage, TmpFileUsage}</c> determines the
+ <item><p><c>{tmpdir_usage, TmpFileUsage}</c> determines the
action taken when <c>qlc</c> is about to create temporary
- files on the directory set by the <c>tmpdir</c> option. If the
- value is <c>not_allowed</c> an error tuple is returned,
+ files on the directory set by option <c>tmpdir</c>. If the
+ value is <c>not_allowed</c>, an error tuple is returned,
otherwise temporary files are created as needed. Default is
- <c>allowed</c> which means that no further action is taken.
+ <c>allowed</c>, which means that no further action is taken.
The values <c>info_msg</c>, <c>warning_msg</c>, and
<c>error_msg</c> mean that the function with the corresponding
- name in the module <c>error_logger</c> is called for printing
- some information (currently the stacktrace).
+ name in module
+ <seealso marker="kernel:error_logger"><c>error_logger</c></seealso>
+ is called for printing some information (currently the stacktrace).</p>
</item>
- <item><c>{tmpdir, TempDirectory}</c> sets the directory used by
- merge join for temporary files and by the
- <c>{cache,&nbsp;list}</c> option. The option also overrides
- the <c>tmpdir</c> option of <c>keysort/3</c> and
- <c>sort/2</c>. The default value is <c>""</c> which means that
- the directory returned by <c>file:get_cwd()</c> is used.
+ <item><p><c>{tmpdir, TempDirectory}</c> sets the directory used by
+ merge join for temporary files and by option
+ <c>{cache,&nbsp;list}</c>. The option also overrides
+ option <c>tmpdir</c> of
+ <seealso marker="#keysort/3"><c>keysort/3</c></seealso> and
+ <seealso marker="#sort/2"><c>sort/2</c></seealso>.
+ Defaults to <c>""</c>, which means that
+ the directory returned by <c>file:get_cwd()</c> is used.</p>
</item>
- <item><c>{unique_all, true}</c> adds a
+ <item><p><c>{unique_all, true}</c> adds a
<c>{unique,&nbsp;true}</c> option to every list expression of
- the query. Default is <c>{unique_all,&nbsp;false}</c>. The
- option <c>unique_all</c> is equivalent to
- <c>{unique_all,&nbsp;true}</c>.
+ the query. Defaults to <c>{unique_all,&nbsp;false}</c>.
+ Option <c>unique_all</c> is equivalent to
+ <c>{unique_all,&nbsp;true}</c>.</p>
</item>
</list>
-
</section>
- <section><title>Getting started</title>
-
- <p><marker id="getting_started"></marker> As already mentioned
- queries are stated in the list comprehension syntax as described
- in the <seealso marker="doc/reference_manual:expressions">Erlang
- Reference Manual</seealso>. In the following some familiarity
- with list comprehensions is assumed. There are examples in
- <seealso
- marker="doc/programming_examples:list_comprehensions">Programming
- Examples</seealso> that can get you started. It should be
- stressed that list comprehensions do not add any computational
+ <section>
+ <marker id="getting_started"></marker>
+ <title>Getting Started</title>
+ <p>As mentioned earlier,
+ queries are expressed in the list comprehension syntax as described
+ in section
+ <seealso marker="doc/reference_manual:expressions">Expressions</seealso>
+ in Erlang Reference Manual. In the following, some familiarity
+ with list comprehensions is assumed. The examples in section
+ <seealso marker="doc/programming_examples:list_comprehensions">
+ List Comprehensions</seealso> in Programming Examples can get you
+ started. Notice that list comprehensions do not add any computational
power to the language; anything that can be done with list
- comprehensions can also be done without them. But they add a
- syntax for expressing simple search problems which is compact
+ comprehensions can also be done without them. But they add
+ syntax for expressing simple search problems, which is compact
and clear once you get used to it.</p>
<p>Many list comprehension expressions can be evaluated by the
- <c>qlc</c> module. Exceptions are expressions such that
+ <c>qlc</c> module. Exceptions are expressions, such that
variables introduced in patterns (or filters) are used in some
- generator later in the list comprehension. As an example
- consider an implementation of lists:append(L):
- <c><![CDATA[[X ||Y <- L, X <- Y]]]></c>.
- Y is introduced in the first generator and used in the second.
+ generator later in the list comprehension. As an example,
+ consider an implementation of <c>lists:append(L)</c>:
+ <c><![CDATA[[X ||Y <- L, X <- Y]]]></c>.
+ <c>Y</c> is introduced in the first generator and used in the second.
The ordinary list comprehension is normally to be preferred when
there is a choice as to which to use. One difference is that
- <c>qlc:eval/1,2</c> collects answers in a list which is finally
+ <seealso marker="#eval/1"><c>eval/1,2</c></seealso>
+ collects answers in a list that is finally
reversed, while list comprehensions collect answers on the stack
- which is finally unwound.</p>
+ that is finally unwound.</p>
<p>What the <c>qlc</c> module primarily adds to list
comprehensions is that data can be read from QLC tables in small
- chunks. A QLC table is created by calling <c>qlc:table/2</c>.
+ chunks. A QLC table is created by calling
+ <seealso marker="#table/2"><c>qlc:table/2</c></seealso>.
Usually <c>qlc:table/2</c> is not called directly from the query
- but via an interface function of some data structure. There are
- a few examples of such functions in Erlang/OTP:
- <c>mnesia:table/1,2</c>, <c>ets:table/1,2</c>, and
- <c>dets:table/1,2</c>. For a given data structure there can be
- several functions that create QLC tables, but common for all
- these functions is that they return a query handle created by
- <c>qlc:table/2</c>. Using the QLC tables provided by OTP is
- probably sufficient in most cases, but for the more advanced
- user the section <seealso
- marker="#implementing_a_qlc_table">Implementing a QLC
- table</seealso> describes the implementation of a function
+ but through an interface function of some data structure.
+ Erlang/OTP includes a few examples of such functions:
+ <seealso marker="mnesia:mnesia#table/1"><c>mnesia:table/1,2</c></seealso>,
+ <seealso marker="ets#table/1"><c>ets:table/1,2</c></seealso>, and
+ <seealso marker="dets#table/1"><c>dets:table/1,2</c></seealso>.
+ For a given data structure, many functions can create QLC tables, but
+ common for these functions is that they return a query handle created by
+ <seealso marker="#table/2"><c>qlc:table/2</c></seealso>.
+ Using the QLC tables provided by Erlang/OTP is usually
+ probably sufficient, but for the more advanced user section
+ <seealso marker="#implementing_a_qlc_table">Implementing a QLC
+ Table</seealso> describes the implementation of a function
calling <c>qlc:table/2</c>.</p>
- <p>Besides <c>qlc:table/2</c> there are other functions that
- return query handles. They might not be used as often as tables,
- but are useful from time to time. <c>qlc:append</c> traverses
- objects from several tables or lists after each other. If, for
- instance, you want to traverse all answers to a query QH and
+ <p>Besides <c>qlc:table/2</c>, other functions
+ return query handles. They are used more seldom than tables,
+ but are sometimes useful.
+ <seealso marker="#append/1"><c>qlc:append/1,2</c></seealso> traverses
+ objects from many tables or lists after each other. If, for
+ example, you want to traverse all answers to a query <c>QH</c> and
then finish off by a term <c>{finished}</c>, you can do that by
- calling <c>qlc:append(QH, [{finished}])</c>. <c>append</c> first
- returns all objects of QH, then <c>{finished}</c>. If there is
- one tuple <c>{finished}</c> among the answers to QH it will be
- returned twice from <c>append</c>.</p>
+ calling <c>qlc:append(QH, [{finished}])</c>. <c>append/2</c> first
+ returns all objects of <c>QH</c>, then <c>{finished}</c>. If a tuple
+ <c>{finished}</c> exists among the answers to <c>QH</c>, it is
+ returned twice from <c>append/2</c>.</p>
<p>As another example, consider concatenating the answers to two
- queries QH1 and QH2 while removing all duplicates. The means to
- accomplish this is to use the <c>unique</c> option:</p>
+ queries <c>QH1</c> and <c>QH2</c> while removing all duplicates. This is
+ accomplished by using option <c>unique</c>:</p>
- <code type="none"><![CDATA[
-qlc:q([X || X <- qlc:append(QH1, QH2)], {unique, true})]]></code>
+ <code type="none">
+<![CDATA[qlc:q([X || X <- qlc:append(QH1, QH2)], {unique, true})]]></code>
- <p>The cost is substantial: every returned answer will be stored
- in an ETS table. Before returning an answer it is looked up in
+ <p>The cost is substantial: every returned answer is stored
+ in an ETS table. Before returning an answer, it is looked up in
the ETS table to check if it has already been returned. Without
- the <c>unique</c> options all answers to QH1 would be returned
- followed by all answers to QH2. The <c>unique</c> options keeps
+ the <c>unique</c> option, all answers to <c>QH1</c> would be returned
+ followed by all answers to <c>QH2</c>. The <c>unique</c> option keeps
the order between the remaining answers.</p>
- <p>If the order of the answers is not important there is the
- alternative to sort the answers uniquely:</p>
+ <p>If the order of the answers is not important, there is an
+ alternative to the <c>unique</c> option, namely to sort the
+ answers uniquely:</p>
- <code type="none"><![CDATA[
-qlc:sort(qlc:q([X || X <- qlc:append(QH1, QH2)], {unique, true})).]]></code>
+ <code type="none">
+<![CDATA[qlc:sort(qlc:q([X || X <- qlc:append(QH1, QH2)], {unique, true})).]]></code>
- <p>This query also removes duplicates but the answers will be
- sorted. If there are many answers temporary files will be used.
- Note that in order to get the first unique answer all answers
- have to be found and sorted. Both alternatives find duplicates
- by comparing answers, that is, if A1 and A2 are answers found in
- that order, then A2 is a removed if A1 == A2.</p>
+ <p>This query also removes duplicates but the answers are
+ sorted. If there are many answers, temporary files are used.
+ Notice that to get the first unique answer, all answers
+ must be found and sorted. Both alternatives find duplicates by comparing
+ answers, that is, if <c>A1</c> and <c>A2</c> are answers found in
+ that order, then <c>A2</c> is a removed if <c>A1 == A2</c>.</p>
- <p>To return just a few answers cursors can be used. The following
+ <p>To return only a few answers, cursors can be used. The following
code returns no more than five answers using an ETS table for
storing the unique answers:</p>
- <code type="none"><![CDATA[
-C = qlc:cursor(qlc:q([X || X <- qlc:append(QH1, QH2)],{unique,true})),
+ <code type="none">
+<![CDATA[C = qlc:cursor(qlc:q([X || X <- qlc:append(QH1, QH2)],{unique,true})),
R = qlc:next_answers(C, 5),
ok = qlc:delete_cursor(C),
R.]]></code>
- <p>Query list comprehensions are convenient for stating
- constraints on data from two or more tables. An example that
+ <p>QLCs are convenient for stating
+ constraints on data from two or more tables. The following example
does a natural join on two query handles on position 2:</p>
- <code type="none"><![CDATA[
-qlc:q([{X1,X2,X3,Y1} ||
+ <code type="none">
+<![CDATA[qlc:q([{X1,X2,X3,Y1} ||
{X1,X2,X3} <- QH1,
{Y1,Y2} <- QH2,
X2 =:= Y2])]]></code>
- <p>The <c>qlc</c> module will evaluate this differently depending on
- the query
- handles <c>QH1</c> and <c>QH2</c>. If, for example, <c>X2</c> is
- matched against the key of a QLC table the lookup join method
- will traverse the objects of <c>QH2</c> while looking up key
- values in the table. On the other hand, if neither <c>X2</c> nor
+ <p>The <c>qlc</c> module evaluates this differently depending on the
+ query handles <c>QH1</c> and <c>QH2</c>. If, for example, <c>X2</c> is
+ matched against the key of a QLC table, the lookup join method
+ traverses the objects of <c>QH2</c> while looking up key
+ values in the table. However, if not <c>X2</c> or
<c>Y2</c> is matched against the key or an indexed position of a
- QLC table, the merge join method will make sure that <c>QH1</c>
+ QLC table, the merge join method ensures that <c>QH1</c>
and <c>QH2</c> are both sorted on position 2 and next do the
join by traversing the objects one by one.</p>
- <p>The <c>join</c> option can be used to force the <c>qlc</c> module
- to use a
- certain join method. For the rest of this section it is assumed
+ <p>Option <c>join</c> can be used to force the <c>qlc</c> module to use
+ a certain join method. For the rest of this section it is assumed
that the excessively slow join method called "nested loop" has
been chosen:</p>
- <code type="none"><![CDATA[
-qlc:q([{X1,X2,X3,Y1} ||
+ <code type="none">
+<![CDATA[qlc:q([{X1,X2,X3,Y1} ||
{X1,X2,X3} <- QH1,
{Y1,Y2} <- QH2,
X2 =:= Y2],
{join, nested_loop})]]></code>
- <p>In this case the filter will be applied to every possible pair
- of answers to QH1 and QH2, one at a time. If there are M answers
- to QH1 and N answers to QH2 the filter will be run M*N
- times.</p>
-
- <p>If QH2 is a call to the function for <c>gb_trees</c> as defined
- in the <seealso marker="#implementing_a_qlc_table">Implementing
- a QLC table</seealso> section, <c>gb_table:table/1</c>, the
- iterator for the gb-tree will be initiated for each answer to
- QH1 after which the objects of the gb-tree will be returned one
+ <p>In this case the filter is applied to every possible pair
+ of answers to <c>QH1</c> and <c>QH2</c>, one at a time.
+ If there are M answers to <c>QH1</c> and N answers to <c>QH2</c>,
+ the filter is run M*N times.</p>
+
+ <p>If <c>QH2</c> is a call to the function for
+ <seealso marker="gb_trees"><c>gb_trees</c></seealso>, as defined
+ in section <seealso marker="#implementing_a_qlc_table">Implementing
+ a QLC Table</seealso>, then <c>gb_table:table/1</c>, the
+ iterator for the gb-tree is initiated for each answer to
+ <c>QH1</c>. The objects of the gb-tree are then returned one
by one. This is probably the most efficient way of traversing
- the table in that case since it takes minimal computational
- power to get the following object. But if QH2 is not a table but
- a more complicated QLC, it can be more efficient use some RAM
+ the table in that case, as it takes minimal computational
+ power to get the following object. But if <c>QH2</c> is not a table but
+ a more complicated QLC, it can be more efficient to use some RAM
memory for collecting the answers in a cache, particularly if
there are only a few answers. It must then be assumed that
- evaluating QH2 has no side effects so that the meaning of the
- query does not change if QH2 is evaluated only once. One way of
- caching the answers is to evaluate QH2 first of all and
- substitute the list of answers for QH2 in the query. Another way
- is to use the <c>cache</c> option. It is stated like this:</p>
-
- <code type="none"><![CDATA[
-QH2' = qlc:q([X || X <- QH2], {cache, ets})]]></code>
-
- <p>or just</p>
-
- <code type="none"><![CDATA[
-QH2' = qlc:q([X || X <- QH2], cache)]]></code>
-
- <p>The effect of the <c>cache</c> option is that when the
- generator QH2' is run the first time every answer is stored in
- an ETS table. When next answer of QH1 is tried, answers to QH2'
- are copied from the ETS table which is very fast. As for the
- <c>unique</c> option the cost is a possibly substantial amount
- of RAM memory. The <c>{cache,&nbsp;list}</c> option offers the
+ evaluating <c>QH2</c> has no side effects so that the meaning of the
+ query does not change if <c>QH2</c> is evaluated only once. One way of
+ caching the answers is to evaluate <c>QH2</c> first of all and
+ substitute the list of answers for <c>QH2</c> in the query. Another way
+ is to use option <c>cache</c>. It is expressed like this:</p>
+
+ <code type="none">
+<![CDATA[QH2' = qlc:q([X || X <- QH2], {cache, ets})]]></code>
+
+ <p>or only</p>
+
+ <code type="none">
+<![CDATA[QH2' = qlc:q([X || X <- QH2], cache)]]></code>
+
+ <p>The effect of option <c>cache</c> is that when
+ generator <c>QH2'</c> is run the first time, every answer is stored in
+ an ETS table. When the next answer of <c>QH1</c> is tried,
+ answers to <c>QH2'</c>
+ are copied from the ETS table, which is very fast. As for
+ option <c>unique</c> the cost is a possibly substantial amount
+ of RAM memory.</p>
+
+ <p>Option <c>{cache,&nbsp;list}</c> offers the
possibility to store the answers in a list on the process heap.
- While this has the potential of being faster than ETS tables
- since there is no need to copy answers from the table it can
- often result in slower evaluation due to more garbage
- collections of the process' heap as well as increased RAM memory
- consumption due to larger heaps. Another drawback with cache
- lists is that if the size of the list exceeds a limit a
- temporary file will be used. Reading the answers from a file is
- very much slower than copying them from an ETS table. But if the
- available RAM memory is scarce setting the <seealso
+ This has the potential of being faster than ETS tables,
+ as there is no need to copy answers from the table. However, it can
+ often result in slower evaluation because of more garbage
+ collections of the process heap and increased RAM memory
+ consumption because of larger heaps. Another drawback with cache
+ lists is that if the list size exceeds a limit, a
+ temporary file is used. Reading the answers from a file is
+ much slower than copying them from an ETS table. But if the
+ available RAM memory is scarce, setting the <seealso
marker="#max_list_size">limit</seealso> to some low value is an
alternative.</p>
- <p>There is an option <c>cache_all</c> that can be set to
+ <p>Option <c>cache_all</c> can be set to
<c>ets</c> or <c>list</c> when evaluating a query. It adds a
<c>cache</c> or <c>{cache,&nbsp;list}</c> option to every list
expression except QLC tables and lists on all levels of the
query. This can be used for testing if caching would improve
- efficiency at all. If the answer is yes further testing is
- needed to pinpoint the generators that should be cached.</p>
-
+ efficiency at all. If the answer is yes, further testing is
+ needed to pinpoint the generators that are to be cached.</p>
</section>
- <section><title>Implementing a QLC table</title>
-
- <p><marker id="implementing_a_qlc_table"></marker>As an example of
- how to use the <seealso marker="#q">qlc:table/2</seealso>
- function the implementation of a QLC table for the <seealso
- marker="gb_trees">gb_trees</seealso> module is given:</p>
+ <section>
+ <marker id="implementing_a_qlc_table"></marker>
+ <title>Implementing a QLC Table</title>
+ <p>As an example of
+ how to use function <seealso marker="#table/2"><c>table/2</c></seealso>,
+ the implementation of a QLC table for the <seealso
+ marker="gb_trees"><c>gb_trees</c></seealso> module is given:</p>
- <code type="none"><![CDATA[
--module(gb_table).
+ <code type="none">
+<![CDATA[-module(gb_table).
-export([table/1]).
@@ -486,65 +514,64 @@ gb_iter(I0, N, EFun) ->
<p><c>TF</c> is the traversal function. The <c>qlc</c> module
requires that there is a way of traversing all objects of the
- data structure; in <c>gb_trees</c> there is an iterator function
- suitable for that purpose. Note that for each object returned a
+ data structure. <c>gb_trees</c> has an iterator function
+ suitable for that purpose. Notice that for each object returned, a
new fun is created. As long as the list is not terminated by
- <c>[]</c> it is assumed that the tail of the list is a nullary
+ <c>[]</c>, it is assumed that the tail of the list is a nullary
function and that calling the function returns further objects
(and functions).</p>
<p>The lookup function is optional. It is assumed that the lookup
function always finds values much faster than it would take to
traverse the table. The first argument is the position of the
- key. Since <c>qlc_next</c> returns the objects as
- {Key,&nbsp;Value} pairs the position is 1. Note that the lookup
- function should return {Key,&nbsp;Value} pairs, just as the
- traversal function does.</p>
+ key. As <c>qlc_next/1</c> returns the objects as <c>{Key,&nbsp;Value}</c>
+ pairs, the position is 1. Notice that the lookup function is to return
+ <c>{Key,&nbsp;Value}</c> pairs, as the traversal function does.</p>
<p>The format function is also optional. It is called by
- <c>qlc:info</c> to give feedback at runtime of how the query
- will be evaluated. One should try to give as good feedback as
- possible without showing too much details. In the example at
- most 7 objects of the table are shown. The format function
+ <seealso marker="#info/1"><c>info/1,2</c></seealso>
+ to give feedback at runtime of how the query
+ is to be evaluated. Try to give as good feedback as
+ possible without showing too much details. In the example, at
+ most seven objects of the table are shown. The format function
handles two cases: <c>all</c> means that all objects of the
- table will be traversed; <c>{lookup,&nbsp;1,&nbsp;KeyValues}</c>
- means that the lookup function will be used for looking up key
+ table are traversed; <c>{lookup,&nbsp;1,&nbsp;KeyValues}</c>
+ means that the lookup function is used for looking up key
values.</p>
- <p>Whether the whole table will be traversed or just some keys
- looked up depends on how the query is stated. If the query has
+ <p>Whether the whole table is traversed or only some keys
+ looked up depends on how the query is expressed. If the query has
the form</p>
- <code type="none"><![CDATA[
-qlc:q([T || P <- LE, F])]]></code>
+ <code type="none">
+<![CDATA[qlc:q([T || P <- LE, F])]]></code>
- <p>and P is a tuple, the <c>qlc</c> module analyzes P and F in
- compile time to find positions of the tuple P that are tested
+ <p>and <c>P</c> is a tuple, the <c>qlc</c> module analyzes
+ <c>P</c> and <c>F</c> in
+ compile time to find positions of tuple <c>P</c> that are tested
for equality to constants. If such a position at runtime turns
out to be the key position, the lookup function can be used,
- otherwise all objects of the table have to be traversed. It is
- the info function <c>InfoFun</c> that returns the key position.
+ otherwise all objects of the table must be traversed.
+ The info function <c>InfoFun</c> returns the key position.
There can be indexed positions as well, also returned by the
info function. An index is an extra table that makes lookup on
- some position fast. Mnesia maintains indices upon request,
- thereby introducing so called secondary keys. The <c>qlc</c>
+ some position fast. Mnesia maintains indexes upon request,
+ and introduces so called secondary keys. The <c>qlc</c>
module prefers to look up objects using the key before secondary
keys regardless of the number of constants to look up.</p>
-
</section>
- <section><title>Key equality</title>
-
- <p>In Erlang there are two operators for testing term equality,
- namely <c>==/2</c> and <c>=:=/2</c>. The difference between them
- is all about the integers that can be represented by floats. For
- instance, <c>2 == 2.0</c> evaluates to
+ <section>
+ <title>Key Equality</title>
+ <p>Erlang/OTP has two operators for testing term equality: <c>==/2</c>
+ and <c>=:=/2</c>. The difference is all about the integers that can be
+ represented by floats. For example, <c>2 == 2.0</c> evaluates to
<c>true</c> while <c>2 =:= 2.0</c> evaluates to <c>false</c>.
Normally this is a minor issue, but the <c>qlc</c> module cannot
ignore the difference, which affects the user's choice of
operators in QLCs.</p>
- <p>If the <c>qlc</c> module can find out at compile time that some
+ <p>If the <c>qlc</c> module at compile time can determine that some
constant is free of integers, it does not matter which one of
<c>==/2</c> or <c>=:=/2</c> is used:</p>
@@ -560,16 +587,16 @@ ets:match_spec_run(lists:flatmap(fun(V) ->
[a,2.71]),
ets:match_spec_compile([{{'$1'},[],['$1']}]))</pre>
- <p>In the example the <c>==/2</c> operator has been handled
- exactly as <c>=:=/2</c> would have been handled. On the other
- hand, if it cannot be determined at compile time that some
- constant is free of integers and the table uses <c>=:=/2</c>
- when comparing keys for equality (see the option <seealso
- marker="#key_equality">key_equality</seealso>), the
- <c>qlc</c> module will not try to look up the constant. The
+ <p>In the example, operator <c>==/2</c> has been handled
+ exactly as <c>=:=/2</c> would have been handled. However,
+ if it cannot be determined at compile time that some
+ constant is free of integers, and the table uses <c>=:=/2</c>
+ when comparing keys for equality (see option <seealso
+ marker="#key_equality">key_equality</seealso>), then the
+ <c>qlc</c> module does not try to look up the constant. The
reason is that there is in the general case no upper limit on
the number of key values that can compare equal to such a
- constant; every combination of integers and floats has to be
+ constant; every combination of integers and floats must be
looked up:</p>
<pre>
@@ -586,11 +613,11 @@ ets:table(53264,
3> <input>lists:sort(qlc:e(Q2)).</input>
[a,b,c]</pre>
- <p>Looking up just <c>{2,2}</c> would not return <c>b</c> and
+ <p>Looking up only <c>{2,2}</c> would not return <c>b</c> and
<c>c</c>.</p>
<p>If the table uses <c>==/2</c> when comparing keys for equality,
- the <c>qlc</c> module will look up the constant regardless of
+ the <c>qlc</c> module looks up the constant regardless of
which operator is used in the QLC. However, <c>==/2</c> is to
be preferred:</p>
@@ -608,19 +635,18 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
[b]</pre>
<p>Lookup join is handled analogously to lookup of constants in a
- table: if the join operator is <c>==/2</c> and the table where
+ table: if the join operator is <c>==/2</c>, and the table where
constants are to be looked up uses <c>=:=/2</c> when testing
- keys for equality, the <c>qlc</c> module will not consider
+ keys for equality, then the <c>qlc</c> module does not consider
lookup join for that table.</p>
-
</section>
<datatypes>
<datatype>
<name name="abstract_expr"></name>
- <desc><p>Parse trees for Erlang expression, see the <seealso
- marker="erts:absform">abstract format</seealso>
- documentation in the ERTS User's Guide.</p></desc>
+ <desc><p>Parse trees for Erlang expression, see section <seealso
+ marker="erts:absform">The Abstract Format</seealso>
+ in the ERTS User's Guide.</p></desc>
</datatype>
<datatype>
<name name="answer"></name>
@@ -633,14 +659,14 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
</datatype>
<datatype>
<name name="match_expression"></name>
- <desc><p>Match&nbsp;specification, see the <seealso
- marker="erts:match_spec">match specification</seealso>
- documentation in the ERTS User's Guide and <seealso
- marker="ms_transform">ms_transform(3).</seealso></p></desc>
+ <desc><p>Match&nbsp;specification, see section <seealso
+ marker="erts:match_spec">Match Specifications in Erlang</seealso>
+ in the ERTS User's Guide and <seealso
+ marker="ms_transform"><c>ms_transform(3)</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="no_files"></name>
- <desc><p>Actually an integer > 1.</p></desc>
+ <desc><p>An integer &gt; 1.</p></desc>
</datatype>
<datatype>
<name name="key_pos"></name>
@@ -671,7 +697,7 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
<name name="query_list_comprehension"></name>
<desc><p>A literal
<seealso marker="#query_list_comprehension">query
- list comprehension</seealso>.</p></desc>
+ list comprehension</seealso>.</p></desc>
</datatype>
<datatype>
<name name="spawn_options"></name>
@@ -682,7 +708,7 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
<datatype>
<name name="sort_option"></name>
<desc><p>See <seealso
- marker="file_sorter">file_sorter(3)</seealso>.</p></desc>
+ marker="file_sorter"><c>file_sorter(3)</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="tmp_directory"></name>
@@ -693,15 +719,14 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
</datatypes>
<funcs>
-
<func>
<name name="append" arity="1"/>
<fsummary>Return a query handle.</fsummary>
<desc>
- <p>Returns a query handle. When evaluating the query handle
- <c><anno>QH</anno></c> all answers to the first query handle in
- <c><anno>QHL</anno></c> are returned followed by all answers
- to the rest of the query handles in <c><anno>QHL</anno></c>.</p>
+ <p>Returns a query handle. When evaluating query handle
+ <c><anno>QH</anno></c>, all answers to the first query handle in
+ <c><anno>QHL</anno></c> are returned, followed by all answers
+ to the remaining query handles in <c><anno>QHL</anno></c>.</p>
</desc>
</func>
@@ -709,11 +734,10 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
<name name="append" arity="2"/>
<fsummary>Return a query handle.</fsummary>
<desc>
- <p>Returns a query handle. When evaluating the query handle
- <c><anno>QH3</anno></c> all answers to
- <c><anno>QH1</anno></c> are returned followed by all answers
+ <p>Returns a query handle. When evaluating query handle
+ <c><anno>QH3</anno></c>, all answers to
+ <c><anno>QH1</anno></c> are returned, followed by all answers
to <c><anno>QH2</anno></c>.</p>
-
<p><c>append(QH1,&nbsp;QH2)</c> is equivalent to
<c>append([QH1,&nbsp;QH2])</c>.</p>
</desc>
@@ -724,15 +748,18 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
<name name="cursor" arity="2"/>
<fsummary>Create a query cursor.</fsummary>
<desc>
- <p><marker id="cursor"></marker>Creates a query cursor and
+ <p>Creates a query cursor and
makes the calling process the owner of the cursor. The
- cursor is to be used as argument to <c>next_answers/1,2</c>
- and (eventually) <c>delete_cursor/1</c>. Calls
- <c>erlang:spawn_opt</c> to spawn and link a process which
- will evaluate the query handle. The value of the option
+ cursor is to be used as argument to
+ <seealso marker="#next_answers/1">
+ <c>next_answers/1,2</c></seealso> and (eventually)
+ <seealso marker="#delete_cursor/1"><c>delete_cursor/1</c></seealso>.
+ Calls <seealso marker="erts:erlang#spawn_opt/2">
+ <c>erlang:spawn_opt/2</c></seealso> to spawn and link to
+ a process that evaluates the query handle. The value of option
<c>spawn_options</c> is used as last argument when calling
- <c>spawn_opt</c>. The default value is <c>[link]</c>.</p>
-
+ <c>spawn_opt/2</c>. Defaults to <c>[link]</c>.</p>
+ <p><em>Example:</em></p>
<pre>
1> <input>QH = qlc:q([{X,Y} || X &lt;- [a,b], Y &lt;- [1,2]]),</input>
<input>QC = qlc:cursor(QH),</input>
@@ -759,15 +786,15 @@ ok</pre>
</func>
<func>
- <name name="eval" arity="1"/>
- <name name="eval" arity="2"/>
<name name="e" arity="1"/>
<name name="e" arity="2"/>
+ <name name="eval" arity="1"/>
+ <name name="eval" arity="2"/>
<fsummary>Return all answers to a query.</fsummary>
<desc>
- <p><marker id="eval"></marker>Evaluates a query handle in the
+ <p>Evaluates a query handle in the
calling process and collects all answers in a list.</p>
-
+ <p><em>Example:</em></p>
<pre>
1> <input>QH = qlc:q([{X,Y} || X &lt;- [a,b], Y &lt;- [1,2]]),</input>
<input>qlc:eval(QH).</input>
@@ -786,11 +813,11 @@ ok</pre>
the query handle together with an extra argument
<c><anno>AccIn</anno></c>. The query handle and the function
are evaluated in the calling process.
- <c><anno>Function</anno></c> must return a new accumulator
+ <c><anno>Function</anno></c> must return a new accumulator,
which is passed to the next call.
<c><anno>Acc0</anno></c> is returned if there are no answers
to the query handle.</p>
-
+ <p><em>Example:</em></p>
<pre>
1> <input>QH = [1,2,3,4,5,6],</input>
<input>qlc:fold(fun(X, Sum) -> X + Sum end, 0, QH).</input>
@@ -818,30 +845,46 @@ ok</pre>
<name name="info" arity="2"/>
<fsummary>Return code describing a query handle.</fsummary>
<desc>
- <p><marker id="info"></marker>Returns information about a
+ <p>Returns information about a
query handle. The information describes the simplifications
and optimizations that are the results of preparing the
- query for evaluation. This function is probably useful
- mostly during debugging.</p>
-
+ query for evaluation. This function is probably mainly useful
+ during debugging.</p>
<p>The information has the form of an Erlang expression where
QLCs most likely occur. Depending on the format functions of
- mentioned QLC tables it may not be absolutely accurate.</p>
-
- <p>The default is to return a sequence of QLCs in a block, but
- if the option <c>{flat,&nbsp;false}</c> is given, one single
- QLC is returned. The default is to return a string, but if
- the option <c>{format,&nbsp;abstract_code}</c> is given,
- abstract code is returned instead. In the abstract code
- port identifiers, references, and pids are represented by
- strings. The default is to return
- all elements in lists, but if the
- <c>{n_elements,&nbsp;NElements}</c> option is given, only a
- limited number of elements are returned. The default is to
- show all of objects and match specifications, but if the
- <c>{depth,&nbsp;Depth}</c> option is given, parts of terms
- below a certain depth are replaced by <c>'...'</c>.</p>
-
+ mentioned QLC tables, it is not certain that the information
+ is absolutely accurate.</p>
+ <p>Options:</p>
+ <list type="bulleted">
+ <item>
+ <p>The default is to return a sequence of QLCs in a block, but
+ if option <c>{flat,&nbsp;false}</c> is specified, one single
+ QLC is returned.</p>
+ </item>
+ <item>
+ <p>The default is to return a string, but if
+ option <c>{format,&nbsp;abstract_code}</c> is specified,
+ abstract code is returned instead. In the abstract code,
+ port identifiers, references, and pids are represented by
+ strings.</p>
+ </item>
+ <item>
+ <p>The default is to return all elements in lists, but if
+ option <c>{n_elements,&nbsp;NElements}</c> is specified, only
+ a limited number of elements are returned.</p>
+ </item>
+ <item>
+ <p>The default is to show all parts of
+ objects and match specifications,
+ but if option <c>{depth,&nbsp;Depth}</c> is specified, parts
+ of terms below a certain depth are replaced by <c>'...'</c>.</p>
+ </item>
+ </list>
+ <p><c>info(<anno>QH</anno>)</c> is equivalent to
+ <c>info(<anno>QH</anno>, [])</c>.</p>
+ <p><em>Examples:</em></p>
+ <p>In the following example two simple QLCs are inserted only to
+ hold option <c>{unique,&nbsp;true}</c>:</p>
<pre>
1> <input>QH = qlc:q([{X,Y} || X &lt;- [x,y], Y &lt;- [a,b]]),</input>
<input>io:format("~s~n", [qlc:info(QH, unique_all)]).</input>
@@ -865,10 +908,11 @@ begin
],
[{unique,true}])
end</pre>
-
- <p>In this example two simple QLCs have been inserted just to
- hold the <c>{unique,&nbsp;true}</c> option.</p>
-
+ <p>In the following example QLC <c>V2</c> has
+ been inserted to show the joined generators and the join
+ method chosen. A convention is used for lookup join: the
+ first generator (<c>G2</c>) is the one traversed, the second
+ (<c>G1</c>) is the table where constants are looked up.</p>
<pre>
1> <input>E1 = ets:new(e1, []),</input>
<input>E2 = ets:new(e2, []),</input>
@@ -898,15 +942,6 @@ begin
[{X,Z}|{W,Y}] &lt;- V2
])
end</pre>
-
- <p>In this example the query list comprehension <c>V2</c> has
- been inserted to show the joined generators and the join
- method chosen. A convention is used for lookup join: the
- first generator (<c>G2</c>) is the one traversed, the second
- one (<c>G1</c>) is the table where constants are looked up.</p>
-
- <p><c>info(<anno>QH</anno>)</c> is equivalent to
- <c>info(<anno>QH</anno>, [])</c>.</p>
</desc>
</func>
@@ -915,18 +950,16 @@ end</pre>
<name name="keysort" arity="3"/>
<fsummary>Return a query handle.</fsummary>
<desc>
- <p>Returns a query handle. When evaluating the query handle
- <c><anno>QH2</anno></c> the answers to the query handle
+ <p>Returns a query handle. When evaluating query handle
+ <c><anno>QH2</anno></c>, the answers to query handle
<c><anno>QH1</anno></c> are sorted by <seealso
- marker="file_sorter">file_sorter:keysort/4</seealso>
+ marker="file_sorter#keysort/4"><c>file_sorter:keysort/4</c></seealso>
according to the options.</p>
-
- <p>The sorter will use temporary files only if
+ <p>The sorter uses temporary files only if
<c><anno>QH1</anno></c> does not evaluate to a list and the
size of the binary representation of the answers exceeds
- <c>Size</c> bytes, where <c>Size</c> is the value of the
- <c>size</c> option.</p>
-
+ <c>Size</c> bytes, where <c>Size</c> is the value of option
+ <c>size</c>.</p>
<p><c>keysort(<anno>KeyPos</anno>, <anno>QH1</anno>)</c>
is equivalent to
<c>keysort(<anno>KeyPos</anno>, <anno>QH1</anno>, [])</c>.</p>
@@ -941,10 +974,10 @@ end</pre>
<p>Returns some or all of the remaining answers to a query
cursor. Only the owner of <c><anno>QueryCursor</anno></c> can
retrieve answers.</p>
- <p>The optional argument <c>NumberOfAnswers</c>determines the
- maximum number of answers returned. The default value is
+ <p>Optional argument <c>NumberOfAnswers</c> determines the
+ maximum number of answers returned. Defaults to
<c>10</c>. If less than the requested number of answers is
- returned, subsequent calls to <c>next_answers</c> will
+ returned, subsequent calls to <c>next_answers</c>
return <c>[]</c>.</p>
</desc>
</func>
@@ -954,92 +987,87 @@ end</pre>
<name name="q" arity="2"/>
<fsummary>Return a handle for a query list comprehension.</fsummary>
<desc>
- <p><marker id="q"></marker>Returns a query handle for a query
- list comprehension. The query list comprehension must be the
- first argument to <c>qlc:q/1,2</c> or it will be evaluated
- as an ordinary list comprehension. It is also necessary to
- add the line</p>
-
+ <p>Returns a query handle for a QLC.
+ The QLC must be the first argument to this function, otherwise
+ it is evaluated as an ordinary list comprehension. It is also
+ necessary to add the following line to the source code:</p>
<code type="none">
-include_lib("stdlib/include/qlc.hrl").</code>
-
- <p>to the source file. This causes a parse transform to
- substitute a fun for the query list comprehension. The
- (compiled) fun will be called when the query handle is
- evaluated.</p>
-
- <p>When calling <c>qlc:q/1,2</c> from the Erlang shell the
- parse transform is automatically called. When this happens
- the fun substituted for the query list comprehension is not
- compiled but will be evaluated by <c>erl_eval(3)</c>. This
- is also true when expressions are evaluated by means of
+ <p>This causes a parse transform to substitute a fun for the QLC. The
+ (compiled) fun is called when the query handle is evaluated.</p>
+ <p>When calling <c>qlc:q/1,2</c> from the Erlang shell, the
+ parse transform is automatically called. When this occurs, the fun
+ substituted for the QLC is not compiled but is evaluated by
+ <seealso marker="erl_eval"><c>erl_eval(3)</c></seealso>. This
+ is also true when expressions are evaluated by
<c>file:eval/1,2</c> or in the debugger.</p>
-
- <p>To be very explicit, this will not work:</p>
-
+ <p>To be explicit, this does not work:</p>
<pre>
...
A = [X || {X} &lt;- [{1},{2}]],
QH = qlc:q(A),
...</pre>
-
- <p>The variable <c>A</c> will be bound to the evaluated value
+ <p>Variable <c>A</c> is bound to the evaluated value
of the list comprehension (<c>[1,2]</c>). The compiler
complains with an error message ("argument is not a query
list comprehension"); the shell process stops with a
<c>badarg</c> reason.</p>
-
<p><c>q(<anno>QLC</anno>)</c> is equivalent to
<c>q(<anno>QLC</anno>, [])</c>.</p>
-
- <p>The <c>{cache,&nbsp;ets}</c> option can be used to cache
- the answers to a query list comprehension. The answers are
- stored in one ETS table for each cached query list
- comprehension. When a cached query list comprehension is
- evaluated again, answers are fetched from the table without
- any further computations. As a consequence, when all answers
- to a cached query list comprehension have been found, the
- ETS tables used for caching answers to the query list
- comprehension's qualifiers can be emptied. The option
- <c>cache</c> is equivalent to <c>{cache,&nbsp;ets}</c>.</p>
-
- <p>The <c>{cache,&nbsp;list}</c> option can be used to cache
- the answers to a query list comprehension just like
- <c>{cache,&nbsp;ets}</c>. The difference is that the answers
- are kept in a list (on the process heap). If the answers
- would occupy more than a certain amount of RAM memory a
- temporary file is used for storing the answers. The option
- <c>max_list_size</c> sets the limit in bytes and the temporary
- file is put on the directory set by the <c>tmpdir</c> option.</p>
-
- <p>The <c>cache</c> option has no effect if it is known that
- the query list comprehension will be evaluated at most once.
- This is always true for the top-most query list
- comprehension and also for the list expression of the first
- generator in a list of qualifiers. Note that in the presence
- of side effects in filters or callback functions the answers
- to query list comprehensions can be affected by the
- <c>cache</c> option.</p>
-
- <p>The <c>{unique,&nbsp;true}</c> option can be used to remove
- duplicate answers to a query list comprehension. The unique
- answers are stored in one ETS table for each query list
- comprehension. The table is emptied every time it is known
- that there are no more answers to the query list
- comprehension. The option <c>unique</c> is equivalent to
- <c>{unique,&nbsp;true}</c>. If the <c>unique</c> option is
- combined with the <c>{cache,&nbsp;ets}</c> option, two ETS
- tables are used, but the full answers are stored in one
- table only. If the <c>unique</c> option is combined with the
- <c>{cache,&nbsp;list}</c> option the answers are sorted
- twice using <c>keysort/3</c>; once to remove duplicates, and
- once to restore the order.</p>
-
- <p>The <c>cache</c> and <c>unique</c> options apply not only
- to the query list comprehension itself but also to the
- results of looking up constants, running match
- specifications, and joining handles. </p>
-
+ <p>Options:</p>
+ <list type="bulleted">
+ <item>
+ <p>Option <c>{cache,&nbsp;ets}</c> can be used to cache
+ the answers to a QLC. The answers are stored in one ETS
+ table for each cached QLC. When a cached QLC is
+ evaluated again, answers are fetched from the table without
+ any further computations. Therefore, when all answers to a
+ cached QLC have been found, the ETS tables used for
+ caching answers to the qualifiers of the QLC can be emptied.
+ Option <c>cache</c> is equivalent to <c>{cache,&nbsp;ets}</c>.</p>
+ </item>
+ <item>
+ <p>Option <c>{cache,&nbsp;list}</c> can be used to cache
+ the answers to a QLC like
+ <c>{cache,&nbsp;ets}</c>. The difference is that the answers
+ are kept in a list (on the process heap). If the answers
+ would occupy more than a certain amount of RAM memory, a
+ temporary file is used for storing the answers. Option
+ <c>max_list_size</c> sets the limit in bytes and the temporary
+ file is put on the directory set by option <c>tmpdir</c>.</p>
+ <p>Option <c>cache</c> has no effect if it is known that
+ the QLC is to be evaluated at most once.
+ This is always true for the top-most QLC
+ and also for the list expression of the first
+ generator in a list of qualifiers. Notice that in the presence
+ of side effects in filters or callback functions, the answers
+ to QLCs can be affected by option <c>cache</c>.</p>
+ </item>
+ <item>
+ <p>Option <c>{unique,&nbsp;true}</c> can be used to remove
+ duplicate answers to a QLC. The unique
+ answers are stored in one ETS table for each QLC.
+ The table is emptied every time it is known
+ that there are no more answers to the QLC.
+ Option <c>unique</c> is equivalent to
+ <c>{unique,&nbsp;true}</c>. If option <c>unique</c> is
+ combined with option <c>{cache,&nbsp;ets}</c>, two ETS
+ tables are used, but the full answers are stored in one
+ table only. If option <c>unique</c> is combined with option
+ <c>{cache,&nbsp;list}</c>, the answers are sorted
+ twice using
+ <seealso marker="#keysort/3"><c>keysort/3</c></seealso>;
+ once to remove duplicates and once to restore the order.</p>
+ </item>
+ </list>
+ <p>Options <c>cache</c> and <c>unique</c> apply not only
+ to the QLC itself but also to the results of looking up constants,
+ running match specifications, and joining handles.</p>
+ <p><em>Example:</em></p>
+ <p>In the following example the cached results of the merge join are
+ traversed for each value of <c>A</c>. Notice that without option
+ <c>cache</c> the join would have been carried out
+ three times, once for each value of <c>A</c>.</p>
<pre>
1> <input>Q = qlc:q([{A,X,Z,W} ||</input>
<input>A &lt;- [a,b,c],</input>
@@ -1076,29 +1104,31 @@ begin
X =:= Y
])
end</pre>
-
- <p>In this example the cached results of the merge join are
- traversed for each value of <c>A</c>. Note that without the
- <c>cache</c> option the join would have been carried out
- three times, once for each value of <c>A</c></p>
-
- <p><c>sort/1,2</c> and <c>keysort/2,3</c> can also be used for
+ <p><seealso marker="#sort/1"><c>sort/1,2</c></seealso> and
+ <seealso marker="#keysort/2"><c>keysort/2,3</c></seealso>
+ can also be used for
caching answers and for removing duplicates. When sorting
answers are cached in a list, possibly stored on a temporary
file, and no ETS tables are used.</p>
-
<p>Sometimes (see <seealso
- marker="#lookup_fun">qlc:table/2</seealso> below) traversal
+ marker="#table/2"><c>table/2</c></seealso>) traversal
of tables can be done by looking up key values, which is
- assumed to be fast. Under certain (rare) circumstances it
- could happen that there are too many key values to look up.
- <marker id="max_lookup"></marker> The
- <c>{max_lookup,&nbsp;MaxLookup}</c> option can then be used
+ assumed to be fast. Under certain (rare) circumstances
+ there can be too many key values to look up.
+ <marker id="max_lookup"></marker>
+ Option <c>{max_lookup,&nbsp;MaxLookup}</c> can then be used
to limit the number of lookups: if more than
- <c>MaxLookup</c> lookups would be required no lookups are
- done but the table traversed instead. The default value is
- <c>infinity</c> which means that there is no limit on the
+ <c>MaxLookup</c> lookups would be required, no lookups are
+ done but the table is traversed instead. Defaults to
+ <c>infinity</c>, which means that there is no limit on the
number of keys to look up.</p>
+ <p><em>Example:</em></p>
+ <p>In the following example, using the <c>gb_table</c> module from
+ section <seealso marker="#implementing_a_qlc_table">Implementing a
+ QLC Table</seealso>, there are six keys to look up:
+ <c>{1,a}</c>, <c>{1,b}</c>, <c>{1,c}</c>, <c>{2,a}</c>,
+ <c>{2,b}</c>, and <c>{2,c}</c>. The reason is that the two
+ elements of key <c>{X,&nbsp;Y}</c> are compared separately.</p>
<pre>
1> <input>T = gb_trees:empty(),</input>
<input>QH = qlc:q([X || {{X,Y},_} &lt;- gb_table:table(T),</input>
@@ -1119,39 +1149,41 @@ ets:match_spec_run(
end,
[{1,a},{1,b},{1,c},{2,a},{2,b},{2,c}]),
ets:match_spec_compile([{{{'$1','$2'},'_'},[],['$1']}]))</pre>
-
- <p>In this example using the <c>gb_table</c> module from the
- <seealso marker="#implementing_a_qlc_table">Implementing a
- QLC table</seealso> section there are six keys to look up:
- <c>{1,a}</c>, <c>{1,b}</c>, <c>{1,c}</c>, <c>{2,a}</c>,
- <c>{2,b}</c>, and <c>{2,c}</c>. The reason is that the two
- elements of the key {X,&nbsp;Y} are compared separately.</p>
-
- <p>The <c>{lookup,&nbsp;true}</c> option can be used to ensure
- that the <c>qlc</c> module will look up constants in some
- QLC table. If there
- are more than one QLC table among the generators' list
- expressions, constants have to be looked up in at least one
- of the tables. The evaluation of the query fails if there
- are no constants to look up. This option is useful in
- situations when it would be unacceptable to traverse all
- objects in some table. Setting the <c>lookup</c> option to
- <c>false</c> ensures that no constants will be looked up
- (<c>{max_lookup,&nbsp;0}</c> has the same effect). The
- default value is <c>any</c> which means that constants will
- be looked up whenever possible.</p>
-
- <p>The <c>{join,&nbsp;Join}</c> option can be used to ensure
- that a certain join method will be used:
- <c>{join,&nbsp;lookup}</c> invokes the lookup join method;
- <c>{join,&nbsp;merge}</c> invokes the merge join method; and
- <c>{join,&nbsp;nested_loop}</c> invokes the method of
- matching every pair of objects from two handles. The last
- method is mostly very slow. The evaluation of the query
- fails if the <c>qlc</c> module cannot carry out the chosen
- join method. The
- default value is <c>any</c> which means that some fast join
- method will be used if possible.</p>
+ <p>Options:</p>
+ <list type="bulleted">
+ <item>
+ <p>Option <c>{lookup,&nbsp;true}</c> can be used to ensure
+ that the <c>qlc</c> module looks up constants in some
+ QLC table. If there are more than one QLC table among the
+ list expressions of the generators,
+ constants must be looked up in at least one
+ of the tables. The evaluation of the query fails if there
+ are no constants to look up. This option is useful
+ when it would be unacceptable to traverse all
+ objects in some table. Setting option <c>lookup</c> to
+ <c>false</c> ensures that no constants are looked up
+ (<c>{max_lookup,&nbsp;0}</c> has the same effect).
+ Defaults to <c>any</c>, which means that constants are
+ looked up whenever possible.</p>
+ </item>
+ <item>
+ <p>Option <c>{join,&nbsp;Join}</c> can be used to ensure
+ that a certain join method is used:</p>
+ <list type="bulleted">
+ <item><c>{join,&nbsp;lookup}</c> invokes the lookup join
+ method.</item>
+ <item><c>{join,&nbsp;merge}</c> invokes the merge join
+ method.</item>
+ <item><c>{join,&nbsp;nested_loop}</c> invokes the method of
+ matching every pair of objects from two handles. This
+ method is mostly very slow.</item>
+ </list>
+ <p>The evaluation of the query fails if the <c>qlc</c> module
+ cannot carry out the chosen join method. Defaults to
+ <c>any</c>, which means that some fast join
+ method is used if possible.</p>
+ </item>
+ </list>
</desc>
</func>
@@ -1160,21 +1192,18 @@ ets:match_spec_run(
<name name="sort" arity="2"/>
<fsummary>Return a query handle.</fsummary>
<desc>
- <p>Returns a query handle. When evaluating the query handle
- <c><anno>QH2</anno></c> the answers to the query handle
+ <p>Returns a query handle. When evaluating query handle
+ <c><anno>QH2</anno></c>, the answers to query handle
<c><anno>QH1</anno></c> are sorted by <seealso
- marker="file_sorter">file_sorter:sort/3</seealso> according
- to the options.</p>
-
- <p>The sorter will use temporary files only if
+ marker="file_sorter#sort/3"><c>file_sorter:sort/3</c></seealso>
+ according to the options.</p>
+ <p>The sorter uses temporary files only if
<c><anno>QH1</anno></c> does not evaluate to a list and the
size of the binary representation of the answers exceeds
- <c>Size</c> bytes, where <c>Size</c> is the value of the
- <c>size</c> option.</p>
-
+ <c>Size</c> bytes, where <c>Size</c> is the value of option
+ <c>size</c>.</p>
<p><c>sort(<anno>QH1</anno>)</c> is equivalent to
<c>sort(<anno>QH1</anno>, [])</c>.</p>
-
</desc>
</func>
@@ -1184,31 +1213,27 @@ ets:match_spec_run(
<name name="string_to_handle" arity="3"/>
<fsummary>Return a handle for a query list comprehension.</fsummary>
<desc>
- <p>A string version of <c>qlc:q/1,2</c>. When the query handle
- is evaluated the fun created by the parse transform is
- interpreted by <c>erl_eval(3)</c>. The query string is to be
- one single query list comprehension terminated by a
- period.</p>
-
+ <p>A string version of <seealso marker="#q/1"><c>q/1,2</c></seealso>.
+ When the query handle is evaluated, the fun created by the parse
+ transform is interpreted by
+ <seealso marker="erl_eval"><c>erl_eval(3)</c></seealso>.
+ The query string is to be one single QLC terminated by a period.</p>
+ <p><em>Example:</em></p>
<pre>
1> <input>L = [1,2,3],</input>
<input>Bs = erl_eval:add_binding('L', L, erl_eval:new_bindings()),</input>
<input>QH = qlc:string_to_handle("[X+1 || X &lt;- L].", [], Bs),</input>
<input>qlc:eval(QH).</input>
[2,3,4]</pre>
-
<p><c>string_to_handle(<anno>QueryString</anno>)</c>
is equivalent to
<c>string_to_handle(<anno>QueryString</anno>, [])</c>.</p>
-
<p><c>string_to_handle(<anno>QueryString</anno>,
- <anno>Options</anno>)</c>
- is equivalent to
+ <anno>Options</anno>)</c> is equivalent to
<c>string_to_handle(<anno>QueryString</anno>,
<anno>Options</anno>, erl_eval:new_bindings())</c>.</p>
-
- <p>This function is probably useful mostly when called from
- outside of Erlang, for instance from a driver written in C.</p>
+ <p>This function is probably mainly useful when called from
+ outside of Erlang, for example from a driver written in C.</p>
</desc>
</func>
@@ -1216,199 +1241,222 @@ ets:match_spec_run(
<name name="table" arity="2"/>
<fsummary>Return a query handle for a table.</fsummary>
<desc>
- <p><marker id="table"></marker>Returns a query handle for a
- QLC table. In Erlang/OTP there is support for ETS, Dets and
- Mnesia tables, but it is also possible to turn many other
- data structures into QLC tables. The way to accomplish this
- is to let function(s) in the module implementing the data
- structure create a query handle by calling
- <c>qlc:table/2</c>. The different ways to traverse the table
- as well as properties of the table are handled by callback
+ <p>Returns a query handle for a QLC table.
+ In Erlang/OTP there is support for ETS, Dets, and
+ Mnesia tables, but many other data structures can be turned
+ into QLC tables. This is accomplished by letting function(s) in the
+ module implementing the data structure create a query handle by
+ calling <c>qlc:table/2</c>. The different ways to traverse the table
+ and properties of the table are handled by callback
functions provided as options to <c>qlc:table/2</c>.</p>
-
- <p>The callback function <c><anno>TraverseFun</anno></c> is
- used for traversing the table. It is to return a list of
- objects terminated by either <c>[]</c> or a nullary fun to
- be used for traversing the not yet traversed objects of the
- table. Any other return value is immediately returned as
- value of the query evaluation. Unary
- <c><anno>TraverseFun</anno></c>s are to accept a match
- specification as argument. The match specification is
- created by the parse transform by analyzing the pattern of
- the generator calling <c>qlc:table/2</c> and filters using
- variables introduced in the pattern. If the parse transform
- cannot find a match specification equivalent to the pattern
- and filters, <c><anno>TraverseFun</anno></c> will be called
- with a match specification returning every object. Modules
- that can utilize match specifications for optimized
- traversal of tables should call <c>qlc:table/2</c> with a
- unary
- <c><anno>TraverseFun</anno></c> while other modules can
- provide a nullary
- <c><anno>TraverseFun</anno></c>. <c>ets:table/2</c> is an
- example of the former; <c>gb_table:table/1</c> in the
- <seealso marker="#implementing_a_qlc_table">Implementing a
- QLC table</seealso> section is an example of the latter.</p>
-
- <p><c><anno>PreFun</anno></c> is a unary callback function
- that is called once before the table is read for the first
- time. If the call fails, the query evaluation fails.
- Similarly, the nullary callback function
- <c><anno>PostFun</anno></c> is called once after the table
- was last read. The return value, which is caught, is
- ignored. If <c><anno>PreFun</anno></c> has been called for a
- table,
- <c><anno>PostFun</anno></c> is guaranteed to be called for
- that table, even if the evaluation of the query fails for
- some reason. The order in which pre (post) functions for
- different tables are evaluated is not specified. Other table
- access than reading, such as calling
- <c><anno>InfoFun</anno></c>, is assumed to be OK at any
- time. The argument <c><anno>PreArgs</anno></c> is a list of
- tagged values. Currently there are two tags,
- <c>parent_value</c> and <c>stop_fun</c>, used by Mnesia for
- managing transactions. The value of <c>parent_value</c> is
- the value returned by <c><anno>ParentFun</anno></c>, or
- <c>undefined</c> if there is no <c>ParentFun</c>.
- <c><anno>ParentFun</anno></c> is called once just before the
- call of
- <c><anno>PreFun</anno></c> in the context of the process
- calling
- <c>eval</c>, <c>fold</c>, or
- <c>cursor</c>. The value of <c>stop_fun</c> is a nullary fun
- that deletes the cursor if called from the parent, or
- <c>undefined</c> if there is no cursor.</p>
-
- <p><marker id="lookup_fun"></marker>The binary callback
- function <c><anno>LookupFun</anno></c> is used for looking
- up objects in the table. The first argument
- <c><anno>Position</anno></c> is the key position or an
- indexed position and the second argument
- <c><anno>Keys</anno></c> is a sorted list of unique values.
- The return value is to be a list of all objects (tuples)
- such that the element at <c>Position</c> is a member of
- <c><anno>Keys</anno></c>. Any other return value is
- immediately returned as value of the query evaluation.
- <c><anno>LookupFun</anno></c> is called instead of
- traversing the table if the parse transform at compile time
- can find out that the filters match and compare the element
- at <c><anno>Position</anno></c> in such a way that only
- <c><anno>Keys</anno></c> need to be looked up in order to
- find all potential answers. The key position is obtained by
- calling
- <c><anno>InfoFun</anno>(keypos)</c> and the indexed
- positions by calling
- <c><anno>InfoFun</anno>(indices)</c>. If the key position
- can be used for lookup it is always chosen, otherwise the
- indexed position requiring the least number of lookups is
- chosen. If there is a tie between two indexed positions the
- one occurring first in the list returned by
- <c><anno>InfoFun</anno></c> is chosen. Positions requiring
- more than <seealso marker="#max_lookup">max_lookup</seealso>
- lookups are ignored.</p>
-
- <p>The unary callback function <c><anno>InfoFun</anno></c> is
- to return information about the table. <c>undefined</c>
- should be returned if the value of some tag is unknown:</p>
-
<list type="bulleted">
- <item><c>indices</c>. Returns a list of indexed
- positions, a list of positive integers.
- </item>
- <item><c>is_unique_objects</c>. Returns <c>true</c> if
- the objects returned by <c>TraverseFun</c> are unique.
+ <item>
+ <p>Callback function <c><anno>TraverseFun</anno></c> is
+ used for traversing the table. It is to return a list of
+ objects terminated by either <c>[]</c> or a nullary fun to
+ be used for traversing the not yet traversed objects of the
+ table. Any other return value is immediately returned as
+ value of the query evaluation. Unary
+ <c><anno>TraverseFun</anno></c>s are to accept a match
+ specification as argument. The match specification is
+ created by the parse transform by analyzing the pattern of
+ the generator calling <c>qlc:table/2</c> and filters using
+ variables introduced in the pattern. If the parse transform
+ cannot find a match specification equivalent to the pattern
+ and filters, <c><anno>TraverseFun</anno></c> is called
+ with a match specification returning every object.</p>
+ <list type="bulleted">
+ <item>
+ <p>Modules that can use match specifications for optimized
+ traversal of tables are to call <c>qlc:table/2</c> with an unary
+ <c><anno>TraverseFun</anno></c>. An example is
+ <seealso marker="ets#table/2">
+ <c>ets:table/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>Other modules can provide a nullary
+ <c><anno>TraverseFun</anno></c>. An example is
+ <c>gb_table:table/1</c> in section
+ <seealso marker="#implementing_a_qlc_table">Implementing a
+ QLC Table</seealso>.</p>
+ </item>
+ </list>
</item>
- <item><c>keypos</c>. Returns the position of the table's
- key, a positive integer.
+ <item>
+ <p>Unary callback function <c><anno>PreFun</anno></c> is
+ called once before the table is read for the first time.
+ If the call fails, the query evaluation fails.</p>
+ <p>Argument <c><anno>PreArgs</anno></c> is a list of tagged values.
+ There are two tags, <c>parent_value</c> and <c>stop_fun</c>, used
+ by Mnesia for managing transactions.</p>
+ <list type="bulleted">
+ <item>
+ <p>The value of <c>parent_value</c> is
+ the value returned by <c><anno>ParentFun</anno></c>, or
+ <c>undefined</c> if there is no <c>ParentFun</c>.
+ <c><anno>ParentFun</anno></c> is called once just before the
+ call of <c><anno>PreFun</anno></c> in the context of the
+ process calling
+ <seealso marker="#eval/1"><c>eval/1,2</c></seealso>,
+ <seealso marker="#fold/3"><c>fold/3,4</c></seealso>, or
+ <seealso marker="#cursor/1"><c>cursor/1,2</c></seealso>.
+ </p>
+ </item>
+ <item>
+ <p>The value of <c>stop_fun</c> is a nullary fun
+ that deletes the cursor if called from the parent, or
+ <c>undefined</c> if there is no cursor.</p>
+ </item>
+ </list>
</item>
- <item><c>is_sorted_key</c>. Returns <c>true</c> if
- the objects returned by <c>TraverseFun</c> are sorted
- on the key.
+ <item>
+ <p>Nullary callback function
+ <c><anno>PostFun</anno></c> is called once after the table
+ was last read. The return value, which is caught, is ignored.
+ If <c><anno>PreFun</anno></c> has been called for a table,
+ <c><anno>PostFun</anno></c> is guaranteed to be called for
+ that table, even if the evaluation of the query fails for
+ some reason.</p>
+ <p>The pre (post) functions for different tables are evaluated in
+ unspecified order.</p>
+ <p>Other table access than reading, such as calling
+ <c><anno>InfoFun</anno></c>, is assumed to be OK at any time.</p>
</item>
- <item><c>num_of_objects</c>. Returns the number of
- objects in the table, a non-negative integer.
+ <item>
+ <p><marker id="lookup_fun"></marker>Binary callback
+ function <c><anno>LookupFun</anno></c> is used for looking
+ up objects in the table. The first argument
+ <c><anno>Position</anno></c> is the key position or an
+ indexed position and the second argument
+ <c><anno>Keys</anno></c> is a sorted list of unique values.
+ The return value is to be a list of all objects (tuples),
+ such that the element at <c>Position</c> is a member of
+ <c><anno>Keys</anno></c>. Any other return value is
+ immediately returned as value of the query evaluation.
+ <c><anno>LookupFun</anno></c> is called instead of
+ traversing the table if the parse transform at compile time
+ can determine that the filters match and compare the element
+ at <c><anno>Position</anno></c> in such a way that only
+ <c><anno>Keys</anno></c> need to be looked up to
+ find all potential answers.</p>
+ <p>The key position is obtained by calling
+ <c><anno>InfoFun</anno>(keypos)</c> and the indexed
+ positions by calling
+ <c><anno>InfoFun</anno>(indices)</c>. If the key position
+ can be used for lookup, it is always chosen, otherwise the
+ indexed position requiring the least number of lookups is
+ chosen. If there is a tie between two indexed positions, the
+ one occurring first in the list returned by
+ <c><anno>InfoFun</anno></c> is chosen. Positions requiring
+ more than <seealso marker="#max_lookup">max_lookup</seealso>
+ lookups are ignored.</p>
</item>
- </list>
-
- <p>The unary callback function <c><anno>FormatFun</anno></c>
- is used by <seealso marker="#info">qlc:info/1,2</seealso>
- for displaying the call that created the table's query
- handle. The default value, <c>undefined</c>, means that
- <c>info/1,2</c> displays a call to <c>'$MOD':'$FUN'/0</c>.
- It is up to <c><anno>FormatFun</anno></c> to present the
- selected objects of the table in a suitable way. However, if
- a character list is chosen for presentation it must be an
- Erlang expression that can be scanned and parsed (a trailing
- dot will be added by <c>qlc:info</c> though).
- <c><anno>FormatFun</anno></c> is called with an argument
- that describes the selected objects based on optimizations
- done as a result of analyzing the filters of the QLC where
- the call to
- <c>qlc:table/2</c> occurs. The possible values of the
- argument are:</p>
-
- <list type="bulleted">
- <item><c>{lookup, Position, Keys, NElements, DepthFun}</c>.
- <c>LookupFun</c> is used for looking up objects in the
- table.
+ <item>
+ <p>Unary callback function <c><anno>InfoFun</anno></c> is
+ to return information about the table. <c>undefined</c>
+ is to be returned if the value of some tag is unknown:</p>
+ <taglist>
+ <tag><c>indices</c></tag>
+ <item>Returns a list of indexed positions, a list of positive
+ integers.</item>
+ <tag><c>is_unique_objects</c></tag>
+ <item>Returns <c>true</c> if the objects returned by
+ <c>TraverseFun</c> are unique.
+ </item>
+ <tag><c>keypos</c></tag>
+ <item>Returns the position of the table key, a positive integer.
+ </item>
+ <tag><c>is_sorted_key</c></tag>
+ <item>Returns <c>true</c> if the objects returned by
+ <c>TraverseFun</c> are sorted on the key.
+ </item>
+ <tag><c>num_of_objects</c></tag>
+ <item>Returns the number of objects in the table, a non-negative
+ integer.
+ </item>
+ </taglist>
</item>
- <item><c>{match_spec, MatchExpression}</c>. No way of
- finding all possible answers by looking up keys was
- found, but the filters could be transformed into a
- match specification. All answers are found by calling
- <c>TraverseFun(MatchExpression)</c>.
+ <item>
+ <p>Unary callback function <c><anno>FormatFun</anno></c>
+ is used by <seealso marker="#info/1"><c>info/1,2</c></seealso>
+ for displaying the call that created the query handle of the
+ table. Defaults to <c>undefined</c>, which means that
+ <c>info/1,2</c> displays a call to <c>'$MOD':'$FUN'/0</c>.
+ It is up to <c><anno>FormatFun</anno></c> to present the
+ selected objects of the table in a suitable way. However, if
+ a character list is chosen for presentation, it must be an
+ Erlang expression that can be scanned and parsed (a trailing
+ dot is added by <c>info/1,2</c> though).</p>
+ <p><c><anno>FormatFun</anno></c> is called with an argument
+ that describes the selected objects based on optimizations
+ done as a result of analyzing the filters of the QLC where
+ the call to <c>qlc:table/2</c> occurs. The argument can have the
+ following values:</p>
+ <taglist>
+ <tag><c>{lookup, Position, Keys, NElements, DepthFun}</c>.</tag>
+ <item>
+ <p><c>LookupFun</c> is used for looking up objects in the
+ table.</p>
+ </item>
+ <tag><c>{match_spec, MatchExpression}</c></tag>
+ <item>
+ <p>No way of finding all possible answers by looking up keys
+ was found, but the filters could be transformed into a
+ match specification. All answers are found by calling
+ <c>TraverseFun(MatchExpression)</c>.</p>
+ </item>
+ <tag><c>{all, NElements, DepthFun}</c></tag>
+ <item>
+ <p>No optimization was found. A match specification matching
+ all objects is used if <c>TraverseFun</c> is unary.</p>
+ <p><c>NElements</c> is the value of the <c>info/1,2</c> option
+ <c>n_elements</c>.</p>
+ <p><c>DepthFun</c> is a function that can be used for
+ limiting the size of terms; calling
+ <c>DepthFun(Term)</c> substitutes <c>'...'</c> for
+ parts of <c>Term</c> below the depth specified by the
+ <c>info/1,2</c> option <c>depth</c>.</p>
+ <p>If calling <c><anno>FormatFun</anno></c> with an
+ argument including <c>NElements</c> and
+ <c>DepthFun</c> fails, <c><anno>FormatFun</anno></c>
+ is called once again with an argument excluding
+ <c>NElements</c> and <c>DepthFun</c>
+ (<c>{lookup,&nbsp;Position,&nbsp;Keys}</c> or
+ <c>all</c>).</p>
+ </item>
+ </taglist>
</item>
- <item><c>{all, NElements, DepthFun}</c>. No optimization was
- found. A match specification matching all objects will be
- used if <c>TraverseFun</c> is unary.
+ <item><p><marker id="key_equality"></marker>The value of option
+ <c>key_equality</c> is to be <c>'=:='</c> if the table
+ considers two keys equal if they match, and to be
+ <c>'=='</c> if two keys are equal if they compare equal.
+ Defaults to <c>'=:='</c>.</p>
</item>
</list>
-
- <p><c>NElements</c> is the value of the <c>info/1,2</c> option
- <c>n_elements</c>, and <c>DepthFun</c> is a function that
- can be used for limiting the size of terms; calling
- <c>DepthFun(Term)</c> substitutes <c>'...'</c> for parts of
- <c>Term</c> below the depth specified by the <c>info/1,2</c>
- option <c>depth</c>. If calling
- <c><anno>FormatFun</anno></c> with an argument including
- <c>NElements</c> and <c>DepthFun</c> fails,
- <c><anno>FormatFun</anno></c> is called once again with an
- argument excluding
- <c>NElements</c> and <c>DepthFun</c>
- (<c>{lookup,&nbsp;Position,&nbsp;Keys}</c> or
- <c>all</c>).</p>
-
- <p><marker id="key_equality"></marker>The value of
- <c>key_equality</c> is to be <c>'=:='</c> if the table
- considers two keys equal if they match, and to be
- <c>'=='</c> if two keys are equal if they compare equal. The
- default is <c>'=:='</c>.</p>
-
- <p>See <seealso marker="ets#qlc_table">ets(3)</seealso>,
- <seealso marker="dets#qlc_table">dets(3)</seealso> and
- <seealso marker="mnesia:mnesia#qlc_table">mnesia(3)</seealso>
- for the various options recognized by <c>table/1,2</c> in
- respective module.</p>
+ <p>For the various options recognized by <c>table/1,2</c>
+ in respective module, see
+ <seealso marker="ets#table/1"><c>ets(3)</c></seealso>,
+ <seealso marker="dets#table/1"><c>dets(3)</c></seealso>, and
+ <seealso marker="mnesia:mnesia#table/1"><c>mnesia(3)</c></seealso>.
+ </p>
</desc>
</func>
-
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="dets">dets(3)</seealso>,
+ <p><seealso marker="dets"><c>dets(3)</c></seealso>,
+ <seealso marker="erl_eval"><c>erl_eval(3)</c></seealso>,
+ <seealso marker="erts:erlang"><c>erlang(3)</c></seealso>,
+ <seealso marker="kernel:error_logger"><c>error_logger(3)</c></seealso>,
+ <seealso marker="ets"><c>ets(3)</c></seealso>,
+ <seealso marker="kernel:file"><c>file(3)</c></seealso>,
+ <seealso marker="file_sorter"><c>file_sorter(3)</c></seealso>,
+ <seealso marker="mnesia:mnesia"><c>mnesia(3)</c></seealso>,
+ <seealso marker="shell"><c>shell(3)</c></seealso>,
<seealso marker="doc/reference_manual:users_guide">
- Erlang Reference Manual</seealso>,
- <seealso marker="erl_eval">erl_eval(3)</seealso>,
- <seealso marker="erts:erlang">erlang(3)</seealso>,
- <seealso marker="ets">ets(3)</seealso>,
- <seealso marker="kernel:file">file(3)</seealso>,
- <seealso marker="error_logger:file">error_logger(3)</seealso>,
- <seealso marker="file_sorter">file_sorter(3)</seealso>,
- <seealso marker="mnesia:mnesia">mnesia(3)</seealso>,
+ Erlang Reference Manual</seealso>,
<seealso marker="doc/programming_examples:users_guide">
- Programming Examples</seealso>,
- <seealso marker="shell">shell(3)</seealso></p>
+ Programming Examples</seealso></p>
</section>
</erlref>
-
diff --git a/lib/stdlib/doc/src/queue.xml b/lib/stdlib/doc/src/queue.xml
index c1665a1ed4..a46ca47033 100644
--- a/lib/stdlib/doc/src/queue.xml
+++ b/lib/stdlib/doc/src/queue.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,63 +28,74 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-15</date>
+ <date>1997-01-15</date>
<rev>B</rev>
- <file>queue.sgml</file>
+ <file>queue.xml</file>
</header>
<module>queue</module>
- <modulesummary>Abstract Data Type for FIFO Queues</modulesummary>
+ <modulesummary>Abstract data type for FIFO queues.</modulesummary>
<description>
- <p>This module implements (double ended) FIFO queues
+ <p>This module provides (double-ended) FIFO queues
in an efficient manner.</p>
+
<p>All functions fail with reason <c>badarg</c> if arguments
- are of wrong type, for example queue arguments are not
- queues, indexes are not integers, list arguments are
+ are of wrong type, for example, queue arguments are not
+ queues, indexes are not integers, and list arguments are
not lists. Improper lists cause internal crashes.
An index out of range for a queue also causes
a failure with reason <c>badarg</c>.</p>
+
<p>Some functions, where noted, fail with reason <c>empty</c>
for an empty queue.</p>
+
<p>The data representing a queue as used by this module
- should be regarded as opaque by other modules. Any code
+ is to be regarded as opaque by other modules. Any code
assuming knowledge of the format is running on thin ice.</p>
+
<p>All operations has an amortized O(1) running time, except
- <c>len/1</c>, <c>join/2</c>, <c>split/2</c>, <c>filter/2</c>
- and <c>member/2</c> that have O(n).
+ <seealso marker="#filter/2"><c>filter/2</c></seealso>,
+ <seealso marker="#join/2"><c>join/2</c></seealso>,
+ <seealso marker="#len/1"><c>len/1</c></seealso>,
+ <seealso marker="#member/2"><c>member/2</c></seealso>,
+ <seealso marker="#split/2"><c>split/2</c></seealso> that have O(n).
To minimize the size of a queue minimizing
the amount of garbage built by queue operations, the queues
do not contain explicit length information, and that is
why <c>len/1</c> is O(n). If better performance for this
particular operation is essential, it is easy for
the caller to keep track of the length.</p>
- <p>Queues are double ended. The mental picture of
+
+ <p>Queues are double-ended. The mental picture of
a queue is a line of people (items) waiting for
their turn. The queue front is the end with the item
that has waited the longest. The queue rear is the end
an item enters when it starts to wait. If instead using
the mental picture of a list, the front is called head
and the rear is called tail.</p>
+
<p>Entering at the front and exiting at the rear
are reverse operations on the queue.</p>
- <p>The module has several sets of interface functions. The
- "Original API", the "Extended API" and the "Okasaki API".</p>
+
+ <p>This module has three sets of interface functions: the
+ "Original API", the "Extended API", and the "Okasaki API".</p>
+
<p>The "Original API" and the "Extended API" both use the
- mental picture of a waiting line of items. Both also
+ mental picture of a waiting line of items. Both
have reverse operations suffixed "_r".</p>
+
<p>The "Original API" item removal functions return compound
terms with both the removed item and the resulting queue.
- The "Extended API" contain alternative functions that build
- less garbage as well as functions for just inspecting the
+ The "Extended API" contains alternative functions that build
+ less garbage and functions for just inspecting the
queue ends. Also the "Okasaki API" functions build less garbage.</p>
- <p>The "Okasaki API" is inspired by "Purely Functional Data structures"
+
+ <p>The "Okasaki API" is inspired by "Purely Functional Data Structures"
by Chris Okasaki. It regards queues as lists.
- The API is by many regarded as strange and avoidable.
- For example many reverse operations have lexically reversed names,
+ This API is by many regarded as strange and avoidable.
+ For example, many reverse operations have lexically reversed names,
some with more readable but perhaps less understandable aliases.</p>
</description>
-
-
<section>
<title>Original API</title>
</section>
@@ -92,7 +103,8 @@
<datatypes>
<datatype>
<name name="queue" n_vars="1"/>
- <desc><p>As returned by <c>new/0</c>.</p></desc>
+ <desc><p>As returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="queue" n_vars="0"/>
@@ -101,205 +113,229 @@
<funcs>
<func>
- <name name="new" arity="0"/>
- <fsummary>Create an empty queue</fsummary>
+ <name name="filter" arity="2"/>
+ <fsummary>Filter a queue.</fsummary>
<desc>
- <p>Returns an empty queue.</p>
+ <p>Returns a queue <c><anno>Q2</anno></c> that is the result of calling
+ <c><anno>Fun</anno>(<anno>Item</anno>)</c> on all items in
+ <c><anno>Q1</anno></c>, in order from front to rear.</p>
+ <p>If <c><anno>Fun</anno>(<anno>Item</anno>)</c> returns <c>true</c>,
+ <c>Item</c> is copied to the result queue. If it returns <c>false</c>,
+ <c><anno>Item</anno></c> is not copied. If it returns a list,
+ the list elements are inserted instead of <c>Item</c> in the
+ result queue.</p>
+ <p>So, <c><anno>Fun</anno>(<anno>Item</anno>)</c> returning
+ <c>[<anno>Item</anno>]</c> is thereby
+ semantically equivalent to returning <c>true</c>, just
+ as returning <c>[]</c> is semantically equivalent to
+ returning <c>false</c>. But returning a list builds
+ more garbage than returning an atom.</p>
</desc>
</func>
+
<func>
- <name name="is_queue" arity="1"/>
- <fsummary>Test if a term is a queue</fsummary>
+ <name name="from_list" arity="1"/>
+ <fsummary>Convert a list to a queue.</fsummary>
<desc>
- <p>Tests if <c><anno>Term</anno></c> is a queue and returns <c>true</c> if so and
- <c>false</c> otherwise.</p>
+ <p>Returns a queue containing the items in <c><anno>L</anno></c> in the
+ same order; the head item of the list becomes the front
+ item of the queue.</p>
</desc>
</func>
+
<func>
- <name name="is_empty" arity="1"/>
- <fsummary>Test if a queue is empty</fsummary>
+ <name name="in" arity="2"/>
+ <fsummary>Insert an item at the rear of a queue.</fsummary>
<desc>
- <p>Tests if <c><anno>Q</anno></c> is empty and returns <c>true</c> if so and
- <c>false</c> otherwise.</p>
+ <p>Inserts <c><anno>Item</anno></c> at the rear of queue
+ <c><anno>Q1</anno></c>.
+ Returns the resulting queue <c><anno>Q2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="len" arity="1"/>
- <fsummary>Get the length of a queue</fsummary>
+ <name name="in_r" arity="2"/>
+ <fsummary>Insert an item at the front of a queue.</fsummary>
<desc>
- <p>Calculates and returns the length of queue <c><anno>Q</anno></c>.</p>
+ <p>Inserts <c><anno>Item</anno></c> at the front of queue
+ <c><anno>Q1</anno></c>.
+ Returns the resulting queue <c><anno>Q2</anno></c>.</p>
</desc>
</func>
<func>
- <name name="in" arity="2"/>
- <fsummary>Insert an item at the rear of a queue</fsummary>
+ <name name="is_empty" arity="1"/>
+ <fsummary>Test if a queue is empty.</fsummary>
<desc>
- <p>Inserts <c><anno>Item</anno></c> at the rear of queue <c><anno>Q1</anno></c>.
- Returns the resulting queue <c><anno>Q2</anno></c>.</p>
+ <p>Tests if <c><anno>Q</anno></c> is empty and returns <c>true</c> if
+ so, otherwise otherwise.</p>
</desc>
</func>
+
<func>
- <name name="in_r" arity="2"/>
- <fsummary>Insert an item at the front of a queue</fsummary>
+ <name name="is_queue" arity="1"/>
+ <fsummary>Test if a term is a queue.</fsummary>
<desc>
- <p>Inserts <c><anno>Item</anno></c> at the front of queue <c><anno>Q1</anno></c>.
- Returns the resulting queue <c><anno>Q2</anno></c>.</p>
+ <p>Tests if <c><anno>Term</anno></c> is a queue and returns <c>true</c>
+ if so, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="out" arity="1"/>
- <fsummary>Remove the front item from a queue</fsummary>
+ <name name="join" arity="2"/>
+ <fsummary>Join two queues.</fsummary>
<desc>
- <p>Removes the item at the front of queue <c><anno>Q1</anno></c>. Returns the
- tuple <c>{{value, <anno>Item</anno>}, <anno>Q2</anno>}</c>, where <c><anno>Item</anno></c> is the
- item removed and <c><anno>Q2</anno></c> is the resulting queue. If <c><anno>Q1</anno></c> is
- empty, the tuple <c>{empty, <anno>Q1</anno>}</c> is returned.</p>
+ <p>Returns a queue <c><anno>Q3</anno></c> that is the result of joining
+ <c><anno>Q1</anno></c> and <c><anno>Q2</anno></c> with
+ <c><anno>Q1</anno></c> in front of <c><anno>Q2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="out_r" arity="1"/>
- <fsummary>Remove the rear item from a queue</fsummary>
+ <name name="len" arity="1"/>
+ <fsummary>Get the length of a queue.</fsummary>
<desc>
- <p>Removes the item at the rear of the queue <c><anno>Q1</anno></c>. Returns the
- tuple <c>{{value, <anno>Item</anno>}, <anno>Q2</anno>}</c>, where <c><anno>Item</anno></c> is the
- item removed and <c><anno>Q2</anno></c> is the new queue. If <c><anno>Q1</anno></c> is
- empty, the tuple <c>{empty, <anno>Q1</anno>}</c> is returned. </p>
+ <p>Calculates and returns the length of queue <c><anno>Q</anno></c>.</p>
</desc>
</func>
<func>
- <name name="from_list" arity="1"/>
- <fsummary>Convert a list to a queue</fsummary>
+ <name name="member" arity="2"/>
+ <fsummary>Test if an item is in a queue.</fsummary>
<desc>
- <p>Returns a queue containing the items in <c><anno>L</anno></c> in the
- same order; the head item of the list will become the front
- item of the queue.</p>
+ <p>Returns <c>true</c> if <c><anno>Item</anno></c> matches some element
+ in <c><anno>Q</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="to_list" arity="1"/>
- <fsummary>Convert a queue to a list</fsummary>
+ <name name="new" arity="0"/>
+ <fsummary>Create an empty queue.</fsummary>
<desc>
- <p>Returns a list of the items in the queue in the same order;
- the front item of the queue will become the head of the list.</p>
+ <p>Returns an empty queue.</p>
</desc>
</func>
<func>
- <name name="reverse" arity="1"/>
- <fsummary>Reverse a queue</fsummary>
+ <name name="out" arity="1"/>
+ <fsummary>Remove the front item from a queue.</fsummary>
<desc>
- <p>Returns a queue <c><anno>Q2</anno></c> that contains the items of
- <c><anno>Q1</anno></c> in the reverse order.</p>
+ <p>Removes the item at the front of queue <c><anno>Q1</anno></c>.
+ Returns tuple <c>{{value, <anno>Item</anno>}, <anno>Q2</anno>}</c>,
+ where <c><anno>Item</anno></c> is the item removed and
+ <c><anno>Q2</anno></c> is the resulting queue. If
+ <c><anno>Q1</anno></c> is empty, tuple
+ <c>{empty, <anno>Q1</anno>}</c> is returned.</p>
</desc>
</func>
+
<func>
- <name name="split" arity="2"/>
- <fsummary>Split a queue in two</fsummary>
+ <name name="out_r" arity="1"/>
+ <fsummary>Remove the rear item from a queue.</fsummary>
<desc>
- <p>Splits <c><anno>Q1</anno></c> in two. The <c><anno>N</anno></c> front items
- are put in <c><anno>Q2</anno></c> and the rest in <c><anno>Q3</anno></c></p>
+ <p>Removes the item at the rear of queue <c><anno>Q1</anno></c>.
+ Returns tuple <c>{{value, <anno>Item</anno>}, <anno>Q2</anno>}</c>,
+ where <c><anno>Item</anno></c> is the item removed and
+ <c><anno>Q2</anno></c> is the new queue. If <c><anno>Q1</anno></c> is
+ empty, tuple <c>{empty, <anno>Q1</anno>}</c> is returned.</p>
</desc>
</func>
+
<func>
- <name name="join" arity="2"/>
- <fsummary>Join two queues</fsummary>
+ <name name="reverse" arity="1"/>
+ <fsummary>Reverse a queue.</fsummary>
<desc>
- <p>Returns a queue <c><anno>Q3</anno></c> that is the result of joining
- <c><anno>Q1</anno></c> and <c><anno>Q2</anno></c> with <c><anno>Q1</anno></c> in front of
- <c><anno>Q2</anno></c>.</p>
+ <p>Returns a queue <c><anno>Q2</anno></c> containing the items of
+ <c><anno>Q1</anno></c> in the reverse order.</p>
</desc>
</func>
+
<func>
- <name name="filter" arity="2"/>
- <fsummary>Filter a queue</fsummary>
+ <name name="split" arity="2"/>
+ <fsummary>Split a queue in two.</fsummary>
<desc>
- <p>Returns a queue <c><anno>Q2</anno></c> that is the result of calling
- <c><anno>Fun</anno>(<anno>Item</anno>)</c> on all items in <c><anno>Q1</anno></c>,
- in order from front to rear.</p>
- <p>If <c><anno>Fun</anno>(<anno>Item</anno>)</c> returns <c>true</c>, <c>Item</c>
- is copied to the result queue. If it returns <c>false</c>,
- <c><anno>Item</anno></c> is not copied. If it returns a list
- the list elements are inserted instead of <c>Item</c> in the
- result queue.</p>
- <p>So, <c><anno>Fun</anno>(<anno>Item</anno>)</c> returning <c>[<anno>Item</anno>]</c> is thereby
- semantically equivalent to returning <c>true</c>, just
- as returning <c>[]</c> is semantically equivalent to
- returning <c>false</c>. But returning a list builds
- more garbage than returning an atom.</p>
+ <p>Splits <c><anno>Q1</anno></c> in two. The <c><anno>N</anno></c>
+ front items are put in <c><anno>Q2</anno></c> and the rest in
+ <c><anno>Q3</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="member" arity="2"/>
- <fsummary>Test if an item is in a queue</fsummary>
+ <name name="to_list" arity="1"/>
+ <fsummary>Convert a queue to a list.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Item</anno></c> matches some element
- in <c><anno>Q</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns a list of the items in the queue in the same order;
+ the front item of the queue becomes the head of the list.</p>
</desc>
</func>
</funcs>
-
-
<section>
<title>Extended API</title>
</section>
<funcs>
<func>
- <name name="get" arity="1"/>
- <fsummary>Return the front item of a queue</fsummary>
- <desc>
- <p>Returns <c><anno>Item</anno></c> at the front of queue <c><anno>Q</anno></c>.</p>
- <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
- </desc>
- </func>
- <func>
- <name name="get_r" arity="1"/>
- <fsummary>Return the rear item of a queue</fsummary>
- <desc>
- <p>Returns <c><anno>Item</anno></c> at the rear of queue <c><anno>Q</anno></c>.</p>
- <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
- </desc>
- </func>
- <func>
<name name="drop" arity="1"/>
- <fsummary>Remove the front item from a queue</fsummary>
+ <fsummary>Remove the front item from a queue.</fsummary>
<desc>
<p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
the front item from <c><anno>Q1</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
</desc>
</func>
+
<func>
<name name="drop_r" arity="1"/>
- <fsummary>Remove the rear item from a queue</fsummary>
+ <fsummary>Remove the rear item from a queue.</fsummary>
<desc>
<p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
the rear item from <c><anno>Q1</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
</desc>
</func>
+
+ <func>
+ <name name="get" arity="1"/>
+ <fsummary>Return the front item of a queue.</fsummary>
+ <desc>
+ <p>Returns <c><anno>Item</anno></c> at the front of queue
+ <c><anno>Q</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="get_r" arity="1"/>
+ <fsummary>Return the rear item of a queue.</fsummary>
+ <desc>
+ <p>Returns <c><anno>Item</anno></c> at the rear of queue
+ <c><anno>Q</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ </desc>
+ </func>
+
<func>
<name name="peek" arity="1"/>
- <fsummary>Return the front item of a queue</fsummary>
+ <fsummary>Return the front item of a queue.</fsummary>
<desc>
- <p>Returns the tuple <c>{value, <anno>Item</anno>}</c> where <c><anno>Item</anno></c> is the
- front item of <c><anno>Q</anno></c>, or <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ <p>Returns tuple <c>{value, <anno>Item</anno>}</c>, where
+ <c><anno>Item</anno></c> is the front item of <c><anno>Q</anno></c>,
+ or <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
</desc>
</func>
+
<func>
<name name="peek_r" arity="1"/>
- <fsummary>Return the rear item of a queue</fsummary>
+ <fsummary>Return the rear item of a queue.</fsummary>
<desc>
- <p>Returns the tuple <c>{value, <anno>Item</anno>}</c> where <c><anno>Item</anno></c> is the
- rear item of <c><anno>Q</anno></c>, or <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ <p>Returns tuple <c>{value, <anno>Item</anno>}</c>, where
+ <c><anno>Item</anno></c> is the rear item of <c><anno>Q</anno></c>,
+ or <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
</desc>
</func>
</funcs>
-
<section>
<title>Okasaki API</title>
</section>
@@ -307,58 +343,92 @@
<funcs>
<func>
<name name="cons" arity="2"/>
- <fsummary>Insert an item at the head of a queue</fsummary>
+ <fsummary>Insert an item at the head of a queue.</fsummary>
<desc>
- <p>Inserts <c><anno>Item</anno></c> at the head of queue <c><anno>Q1</anno></c>. Returns
+ <p>Inserts <c><anno>Item</anno></c> at the head of queue
+ <c><anno>Q1</anno></c>. Returns
the new queue <c><anno>Q2</anno></c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="daeh" arity="1"/>
+ <fsummary>Return the tail item of a queue.</fsummary>
+ <desc>
+ <p>Returns the tail item of queue <c><anno>Q</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ </desc>
+ </func>
+
<func>
<name name="head" arity="1"/>
- <fsummary>Return the item at the head of a queue</fsummary>
+ <fsummary>Return the item at the head of a queue.</fsummary>
<desc>
- <p>Returns <c><anno>Item</anno></c> from the head of queue <c><anno>Q</anno></c>.</p>
+ <p>Returns <c><anno>Item</anno></c> from the head of queue
+ <c><anno>Q</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
</desc>
</func>
+
<func>
- <name name="tail" arity="1"/>
- <fsummary>Remove the head item from a queue</fsummary>
+ <name name="init" arity="1"/>
+ <fsummary>Remove the tail item from a queue.</fsummary>
<desc>
<p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
- the head item from <c><anno>Q1</anno></c>.</p>
+ the tail item from <c><anno>Q1</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
</desc>
</func>
+
<func>
- <name name="snoc" arity="2"/>
- <fsummary>Insert an item at the tail of a queue</fsummary>
+ <name name="lait" arity="1"/>
+ <fsummary>Remove the tail item from a queue.</fsummary>
<desc>
- <p>Inserts <c><anno>Item</anno></c> as the tail item of queue <c><anno>Q1</anno></c>. Returns
- the new queue <c><anno>Q2</anno></c>.</p>
+ <p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
+ the tail item from <c><anno>Q1</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
+ <p>The name <c>lait/1</c> is a misspelling - do not use it anymore.</p>
</desc>
</func>
+
<func>
- <name name="daeh" arity="1"/>
<name name="last" arity="1"/>
- <fsummary>Return the tail item of a queue</fsummary>
+ <fsummary>Return the tail item of a queue.</fsummary>
<desc>
<p>Returns the tail item of queue <c><anno>Q</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
</desc>
</func>
+
<func>
- <name name="liat" arity="1"/>
- <name name="init" arity="1"/>
- <name name="lait" arity="1"/>
- <fsummary>Remove the tail item from a queue</fsummary>
+ <name name="liat" arity="1"/>v
+ <fsummary>Remove the tail item from a queue.</fsummary>
<desc>
<p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
the tail item from <c><anno>Q1</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
- <p>The name <c>lait/1</c> is a misspelling - do not use it anymore.</p>
</desc>
</func>
- </funcs>
+ <func>
+ <name name="snoc" arity="2"/>
+ <fsummary>Insert an item at the tail of a queue.</fsummary>
+ <desc>
+ <p>Inserts <c><anno>Item</anno></c> as the tail item of queue
+ <c><anno>Q1</anno></c>. Returns
+ the new queue <c><anno>Q2</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="tail" arity="1"/>
+ <fsummary>Remove the head item from a queue.</fsummary>
+ <desc>
+ <p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
+ the head item from <c><anno>Q1</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
+ </desc>
+ </func>
+ </funcs>
</erlref>
+
diff --git a/lib/stdlib/doc/src/rand.xml b/lib/stdlib/doc/src/rand.xml
index 50057259c6..1dcc3de000 100644
--- a/lib/stdlib/doc/src/rand.xml
+++ b/lib/stdlib/doc/src/rand.xml
@@ -33,215 +33,231 @@
<file>rand.xml</file>
</header>
<module>rand</module>
- <modulesummary>Pseudo random number generation</modulesummary>
+ <modulesummary>Pseudo random number generation.</modulesummary>
<description>
- <p>Random number generator.</p>
-
- <p>The module contains several different algorithms and can be
- extended with more in the future. The current uniform
- distribution algorithms uses the
- <url href="http://xorshift.di.unimi.it">
- scrambled Xorshift algorithms by Sebastiano Vigna</url> and the
- normal distribution algorithm uses the
- <url href="http://www.jstatsoft.org/v05/i08">
- Ziggurat Method by Marsaglia and Tsang</url>.
- </p>
-
- <p>The implemented algorithms are:</p>
+ <p>This module provides a random number generator. The module contains
+ a number of algorithms. The uniform distribution algorithms use the
+ <url href="http://xorshift.di.unimi.it">scrambled Xorshift algorithms by
+ Sebastiano Vigna</url>. The normal distribution algorithm uses the
+ <url href="http://www.jstatsoft.org/v05/i08">Ziggurat Method by Marsaglia
+ and Tsang</url>.</p>
+
+ <p>The following algorithms are provided:</p>
+
<taglist>
- <tag><c>exsplus</c></tag> <item>Xorshift116+, 58 bits precision and period of 2^116-1.</item>
- <tag><c>exs64</c></tag> <item>Xorshift64*, 64 bits precision and a period of 2^64-1.</item>
- <tag><c>exs1024</c></tag> <item>Xorshift1024*, 64 bits precision and a period of 2^1024-1.</item>
+ <tag><c>exsplus</c></tag>
+ <item>
+ <p>Xorshift116+, 58 bits precision and period of 2^116-1</p>
+ </item>
+ <tag><c>exs64</c></tag>
+ <item>
+ <p>Xorshift64*, 64 bits precision and a period of 2^64-1</p>
+ </item>
+ <tag><c>exs1024</c></tag>
+ <item>
+ <p>Xorshift1024*, 64 bits precision and a period of 2^1024-1</p>
+ </item>
</taglist>
- <p>The current default algorithm is <c>exsplus</c>. The default
- may change in future. If a specific algorithm is required make
- sure to always use <seealso marker="#seed-1">seed/1</seealso>
- to initialize the state.
- </p>
+ <p>The default algorithm is <c>exsplus</c>. If a specific algorithm is
+ required, ensure to always use <seealso marker="#seed-1">
+ <c>seed/1</c></seealso> to initialize the state.</p>
<p>Every time a random number is requested, a state is used to
- calculate it and a new state produced. The state can either be
- implicit or it can be an explicit argument and return value.
- </p>
+ calculate it and a new state is produced. The state can either be
+ implicit or be an explicit argument and return value.</p>
<p>The functions with implicit state use the process dictionary
- variable <c>rand_seed</c> to remember the current state.</p>
+ variable <c>rand_seed</c> to remember the current state.</p>
+
+ <p>If a process calls
+ <seealso marker="#uniform-0"><c>uniform/0</c></seealso> or
+ <seealso marker="#uniform-1"><c>uniform/1</c></seealso> without
+ setting a seed first, <seealso marker="#seed-1"><c>seed/1</c></seealso>
+ is called automatically with the default algorithm and creates a
+ non-constant seed.</p>
+
+ <p>The functions with explicit state never use the process dictionary.</p>
+
+ <p><em>Examples:</em></p>
+
+ <p>Simple use; creates and seeds the default algorithm
+ with a non-constant seed if not already done:</p>
+
+ <pre>
+R0 = rand:uniform(),
+R1 = rand:uniform(),</pre>
- <p>If a process calls <seealso marker="#uniform-0">uniform/0</seealso> or
- <seealso marker="#uniform-1">uniform/1</seealso> without
- setting a seed first, <seealso marker="#seed-1">seed/1</seealso>
- is called automatically with the default algorithm and creates a
- non-constant seed.</p>
+ <p>Use a specified algorithm:</p>
- <p>The functions with explicit state never use the process
- dictionary.</p>
+ <pre>
+_ = rand:seed(exs1024),
+R2 = rand:uniform(),</pre>
+
+ <p>Use a specified algorithm with a constant seed:</p>
- <p>Examples:</p>
<pre>
- %% Simple usage. Creates and seeds the default algorithm
- %% with a non-constant seed if not already done.
- R0 = rand:uniform(),
- R1 = rand:uniform(),
-
- %% Use a given algorithm.
- _ = rand:seed(exs1024),
- R2 = rand:uniform(),
-
- %% Use a given algorithm with a constant seed.
- _ = rand:seed(exs1024, {123, 123534, 345345}),
- R3 = rand:uniform(),
-
- %% Use the functional api with non-constant seed.
- S0 = rand:seed_s(exsplus),
- {R4, S1} = rand:uniform_s(S0),
-
- %% Create a standard normal deviate.
- {SND0, S2} = rand:normal_s(S1),
- </pre>
-
- <note><p>This random number generator is not cryptographically
- strong. If a strong cryptographic random number generator is
- needed, use one of functions in the
- <seealso marker="crypto:crypto">crypto</seealso>
- module, for example <c>crypto:strong_rand_bytes/1</c>.</p></note>
+_ = rand:seed(exs1024, {123, 123534, 345345}),
+R3 = rand:uniform(),</pre>
+
+ <p>Use the functional API with a non-constant seed:</p>
+
+ <pre>
+S0 = rand:seed_s(exsplus),
+{R4, S1} = rand:uniform_s(S0),</pre>
+
+ <p>Create a standard normal deviate:</p>
+
+ <pre>
+{SND0, S2} = rand:normal_s(S1),</pre>
+
+ <note>
+ <p>This random number generator is not cryptographically
+ strong. If a strong cryptographic random number generator is
+ needed, use one of functions in the
+ <seealso marker="crypto:crypto"><c>crypto</c></seealso>
+ module, for example, <seealso marker="crypto:crypto">
+ <c>crypto:strong_rand_bytes/1</c></seealso>.</p>
+ </note>
+
</description>
<datatypes>
<datatype>
<name name="alg"/>
</datatype>
-
<datatype>
<name name="state"/>
- <desc><p>Algorithm dependent state.</p></desc>
+ <desc><p>Algorithm-dependent state.</p></desc>
</datatype>
-
<datatype>
<name name="export_state"/>
- <desc><p>Algorithm dependent state which can be printed or saved to file.</p></desc>
+ <desc><p>Algorithm-dependent state that can be printed or saved to
+ file.</p></desc>
</datatype>
</datatypes>
<funcs>
<func>
- <name name="seed" arity="1"/>
- <fsummary>Seed random number generator</fsummary>
- <desc>
- <marker id="seed-1"/>
- <p>Seeds random number generation with the given algorithm and time dependent
- data if <anno>AlgOrExpState</anno> is an algorithm.</p>
- <p>Otherwise recreates the exported seed in the process
- dictionary, and returns the state.
- <em>See also:</em> <seealso marker="#export_seed-0">export_seed/0</seealso>.</p>
+ <name name="export_seed" arity="0"/>
+ <fsummary>Export the random number generation state.</fsummary>
+ <desc><marker id="export_seed-0"/>
+ <p>Returns the random number state in an external format.
+ To be used with <seealso marker="#seed-1"><c>seed/1</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="seed_s" arity="1"/>
- <fsummary>Seed random number generator</fsummary>
- <desc>
- <p>Seeds random number generation with the given algorithm and time dependent
- data if <anno>AlgOrExpState</anno> is an algorithm.</p>
- <p>Otherwise recreates the exported seed and returns the state.
- <em>See also:</em> <seealso marker="#export_seed-0">export_seed/0</seealso>.</p>
+ <name name="export_seed_s" arity="1"/>
+ <fsummary>Export the random number generation state.</fsummary>
+ <desc><marker id="export_seed_s-1"/>
+ <p>Returns the random number generator state in an external format.
+ To be used with <seealso marker="#seed-1"><c>seed/1</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="seed" arity="2"/>
- <fsummary>Seed the random number generation</fsummary>
+ <name name="normal" arity="0"/>
+ <fsummary>Return a standard normal distributed random float.</fsummary>
<desc>
- <p>Seeds random number generation with the given algorithm and
- integers in the process dictionary and returns
- the state.</p>
+ <p>Returns a standard normal deviate float (that is, the mean
+ is 0 and the standard deviation is 1) and updates the state in
+ the process dictionary.</p>
</desc>
</func>
+
<func>
- <name name="seed_s" arity="2"/>
- <fsummary>Seed the random number generation</fsummary>
+ <name name="normal_s" arity="1"/>
+ <fsummary>Return a standard normal distributed random float.</fsummary>
<desc>
- <p>Seeds random number generation with the given algorithm and
- integers and returns the state.</p>
+ <p>Returns, for a specified state, a standard normal
+ deviate float (that is, the mean is 0 and the standard
+ deviation is 1) and a new state.</p>
</desc>
</func>
<func>
- <name name="export_seed" arity="0"/>
- <fsummary>Export the random number generation state</fsummary>
- <desc><marker id="export_seed-0"/>
- <p>Returns the random number state in an external format.
- To be used with <seealso marker="#seed-1">seed/1</seealso>.</p>
+ <name name="seed" arity="1"/>
+ <fsummary>Seed random number generator.</fsummary>
+ <desc>
+ <marker id="seed-1"/>
+ <p>Seeds random number generation with the specifed algorithm and
+ time-dependent data if <anno>AlgOrExpState</anno> is an algorithm.</p>
+ <p>Otherwise recreates the exported seed in the process dictionary,
+ and returns the state. See also
+ <seealso marker="#export_seed-0"><c>export_seed/0</c></seealso>.</p>
</desc>
</func>
<func>
- <name name="export_seed_s" arity="1"/>
- <fsummary>Export the random number generation state</fsummary>
- <desc><marker id="export_seed_s-1"/>
- <p>Returns the random number generator state in an external format.
- To be used with <seealso marker="#seed-1">seed/1</seealso>.</p>
+ <name name="seed" arity="2"/>
+ <fsummary>Seed the random number generation.</fsummary>
+ <desc>
+ <p>Seeds random number generation with the specified algorithm and
+ integers in the process dictionary and returns the state.</p>
</desc>
</func>
<func>
- <name name="uniform" arity="0"/>
- <fsummary>Return a random float</fsummary>
+ <name name="seed_s" arity="1"/>
+ <fsummary>Seed random number generator.</fsummary>
<desc>
- <marker id="uniform-0"/>
- <p>Returns a random float uniformly distributed in the value
- range <c>0.0 &lt; <anno>X</anno> &lt; 1.0 </c> and
- updates the state in the process dictionary.</p>
+ <p>Seeds random number generation with the specifed algorithm and
+ time-dependent data if <anno>AlgOrExpState</anno> is an algorithm.</p>
+ <p>Otherwise recreates the exported seed and returns the state.
+ See also <seealso marker="#export_seed-0">
+ <c>export_seed/0</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="uniform_s" arity="1"/>
- <fsummary>Return a random float</fsummary>
+ <name name="seed_s" arity="2"/>
+ <fsummary>Seed the random number generation.</fsummary>
<desc>
- <p>Given a state, <c>uniform_s/1</c> returns a random float
- uniformly distributed in the value range <c>0.0 &lt;
- <anno>X</anno> &lt; 1.0</c> and a new state.</p>
+ <p>Seeds random number generation with the specified algorithm and
+ integers and returns the state.</p>
</desc>
</func>
<func>
- <name name="uniform" arity="1"/>
- <fsummary>Return a random integer</fsummary>
- <desc>
- <marker id="uniform-1"/>
- <p>Given an integer <c><anno>N</anno> >= 1</c>,
- <c>uniform/1</c> returns a random integer uniformly
- distributed in the value range
- <c>1 &lt;= <anno>X</anno> &lt;= <anno>N</anno></c> and
- updates the state in the process dictionary.</p>
+ <name name="uniform" arity="0"/>
+ <fsummary>Return a random float.</fsummary>
+ <desc><marker id="uniform-0"/>
+ <p>Returns a random float uniformly distributed in the value
+ range <c>0.0 &lt; <anno>X</anno> &lt; 1.0</c> and
+ updates the state in the process dictionary.</p>
</desc>
</func>
+
<func>
- <name name="uniform_s" arity="2"/>
- <fsummary>Return a random integer</fsummary>
- <desc>
- <p>Given an integer <c><anno>N</anno> >= 1</c> and a state,
- <c>uniform_s/2</c> returns a random integer uniformly
- distributed in the value range <c>1 &lt;= <anno>X</anno> &lt;=
- <anno>N</anno></c> and a new state.</p>
+ <name name="uniform" arity="1"/>
+ <fsummary>Return a random integer.</fsummary>
+ <desc><marker id="uniform-1"/>
+ <p>Returns, for a specified integer <c><anno>N</anno> >= 1</c>,
+ a random integer uniformly distributed in the value range
+ <c>1 &lt;= <anno>X</anno> &lt;= <anno>N</anno></c> and
+ updates the state in the process dictionary.</p>
</desc>
</func>
<func>
- <name name="normal" arity="0"/>
- <fsummary>Return a standard normal distributed random float</fsummary>
+ <name name="uniform_s" arity="1"/>
+ <fsummary>Return a random float.</fsummary>
<desc>
- <p>Returns a standard normal deviate float (that is, the mean
- is 0 and the standard deviation is 1) and updates the state in
- the process dictionary.</p>
+ <p>Returns, for a specified state, random float
+ uniformly distributed in the value range <c>0.0 &lt;
+ <anno>X</anno> &lt; 1.0</c> and a new state.</p>
</desc>
</func>
+
<func>
- <name name="normal_s" arity="1"/>
- <fsummary>Return a standard normal distributed random float</fsummary>
+ <name name="uniform_s" arity="2"/>
+ <fsummary>Return a random integer.</fsummary>
<desc>
- <p>Given a state, <c>normal_s/1</c> returns a standard normal
- deviate float (that is, the mean is 0 and the standard
- deviation is 1) and a new state.</p>
+ <p>Returns, for a specified integer <c><anno>N</anno> >= 1</c>
+ and a state, a random integer uniformly distributed in the value
+ range <c>1 &lt;= <anno>X</anno> &lt;= <anno>N</anno></c> and a
+ new state.</p>
</desc>
</func>
-
</funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/random.xml b/lib/stdlib/doc/src/random.xml
index fc4f796863..8d090d20b3 100644
--- a/lib/stdlib/doc/src/random.xml
+++ b/lib/stdlib/doc/src/random.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,116 +24,140 @@
<title>random</title>
<prepared>Joe Armstrong</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>96-09-09</date>
+ <date>1996-09-09</date>
<rev>A</rev>
- <file>random.sgml</file>
+ <file>random.xml</file>
</header>
<module>random</module>
- <modulesummary>Pseudo random number generation</modulesummary>
+ <modulesummary>Pseudo-random number generation.</modulesummary>
<description>
- <p>Random number generator. The method is attributed to
- B.A. Wichmann and I.D.Hill, in 'An efficient and portable
+ <p>This module provides a random number generator. The method is attributed
+ to B.A. Wichmann and I.D. Hill in 'An efficient and portable
pseudo-random number generator', Journal of Applied
- Statistics. AS183. 1982. Also Byte March 1987. </p>
- <p>The current algorithm is a modification of the version attributed
- to Richard A O'Keefe in the standard Prolog library.</p>
+ Statistics. AS183. 1982. Also Byte March 1987.</p>
+
+ <p>The algorithm is a modification of the version attributed
+ to Richard A. O'Keefe in the standard Prolog library.</p>
+
<p>Every time a random number is requested, a state is used to calculate
- it, and a new state produced. The state can either be implicit (kept
+ it, and a new state is produced. The state can either be implicit (kept
in the process dictionary) or be an explicit argument and return value.
In this implementation, the state (the type <c>ran()</c>) consists of a
tuple of three integers.</p>
- <p>It should be noted that this random number generator is not cryptographically
- strong. If a strong cryptographic random number generator is needed for
- example <c>crypto:strong_rand_bytes/1</c> could be used instead.</p>
- <note><p>The new and improved <seealso
- marker="stdlib:rand">rand</seealso> module should be used
- instead of this module.</p></note>
+
+ <note>
+ <p>This random number generator is not cryptographically
+ strong. If a strong cryptographic random number generator is
+ needed, use one of functions in the
+ <seealso marker="crypto:crypto"><c>crypto</c></seealso>
+ module, for example, <seealso marker="crypto:crypto">
+ <c>crypto:strong_rand_bytes/1</c></seealso>.</p>
+ </note>
+
+ <note>
+ <p>The improved <seealso marker="rand"><c>rand</c></seealso>
+ module is to be used instead of this module.</p>
+ </note>
</description>
+
<datatypes>
<datatype>
<name name="ran"/>
<desc><p>The state.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="seed" arity="0"/>
- <fsummary>Seeds random number generation with default values</fsummary>
+ <fsummary>Seed random number generation with default values.</fsummary>
<desc>
<p>Seeds random number generation with default (fixed) values
- in the process dictionary, and returns the old state.</p>
+ in the process dictionary and returns the old state.</p>
</desc>
</func>
+
+ <func>
+ <name name="seed" arity="1"/>
+ <fsummary>Seed random number generator.</fsummary>
+ <desc>
+ <p><c>seed({<anno>A1</anno>, <anno>A2</anno>, <anno>A3</anno>})</c>
+ is equivalent to
+ <c>seed(<anno>A1</anno>, <anno>A2</anno>, <anno>A3</anno>)</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="seed" arity="3"/>
- <fsummary>Seeds random number generator</fsummary>
+ <fsummary>Seed random number generator.</fsummary>
<desc>
<p>Seeds random number generation with integer values in the process
- dictionary, and returns the old state.</p>
- <p>One easy way of obtaining a unique value to seed with is to:</p>
+ dictionary and returns the old state.</p>
+ <p>The following is an easy way of obtaining a unique value to seed
+ with:</p>
<code type="none">
random:seed(erlang:phash2([node()]),
erlang:monotonic_time(),
erlang:unique_integer())</code>
- <p>See <seealso marker="erts:erlang#phash2/1">
- erlang:phash2/1</seealso>, <seealso marker="erts:erlang#node/0">
- node/0</seealso>, <seealso marker="erts:erlang#monotonic_time/0">
- erlang:monotonic_time/0</seealso>, and
+ <p>For details, see
+ <seealso marker="erts:erlang#phash2/1">
+ <c>erlang:phash2/1</c></seealso>,
+ <seealso marker="erts:erlang#node/0">
+ <c>erlang:node/0</c></seealso>,
+ <seealso marker="erts:erlang#monotonic_time/0">
+ <c>erlang:monotonic_time/0</c></seealso>, and
<seealso marker="erts:erlang#unique_integer/0">
- erlang:unique_integer/0</seealso>) for details.</p>
- </desc>
- </func>
- <func>
- <name name="seed" arity="1"/>
- <fsummary>Seeds random number generator</fsummary>
- <desc>
- <p>
- <c>seed({<anno>A1</anno>, <anno>A2</anno>, <anno>A3</anno>})</c> is equivalent to <c>seed(<anno>A1</anno>, <anno>A2</anno>, <anno>A3</anno>)</c>.
- </p>
+ <c>erlang:unique_integer/0</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="seed0" arity="0"/>
- <fsummary>Return default state for random number generation</fsummary>
+ <fsummary>Return default state for random number generation.</fsummary>
<desc>
<p>Returns the default state.</p>
</desc>
</func>
+
<func>
<name name="uniform" arity="0"/>
- <fsummary>Return a random float</fsummary>
+ <fsummary>Return a random float.</fsummary>
<desc>
<p>Returns a random float uniformly distributed between <c>0.0</c>
and <c>1.0</c>, updating the state in the process dictionary.</p>
</desc>
</func>
+
<func>
<name name="uniform" arity="1"/>
- <fsummary>Return a random integer</fsummary>
+ <fsummary>Return a random integer.</fsummary>
<desc>
- <p>Given an integer <c><anno>N</anno> >= 1</c>, <c>uniform/1</c> returns a
- random integer uniformly distributed between <c>1</c> and
- <c><anno>N</anno></c>, updating the state in the process dictionary.</p>
+ <p>Returns, for a specified integer <c><anno>N</anno> >= 1</c>,
+ a random integer uniformly distributed between <c>1</c> and
+ <c><anno>N</anno></c>, updating the state in the process
+ dictionary.</p>
</desc>
</func>
+
<func>
<name name="uniform_s" arity="1"/>
- <fsummary>Return a random float</fsummary>
+ <fsummary>Return a random float.</fsummary>
<desc>
- <p>Given a state, <c>uniform_s/1</c>returns a random float uniformly
+ <p>Returns, for a specified state, a random float uniformly
distributed between <c>0.0</c> and <c>1.0</c>, and a new state.</p>
</desc>
</func>
+
<func>
<name name="uniform_s" arity="2"/>
- <fsummary>Return a random integer</fsummary>
+ <fsummary>Return a random integer.</fsummary>
<desc>
- <p>Given an integer <c><anno>N</anno> >= 1</c> and a state, <c>uniform_s/2</c>
- returns a random integer uniformly distributed between <c>1</c> and
+ <p>Returns, for a specified integer <c><anno>N</anno> >= 1</c> and a
+ state, a random integer uniformly distributed between <c>1</c> and
<c><anno>N</anno></c>, and a new state.</p>
</desc>
</func>
@@ -143,12 +167,18 @@ random:seed(erlang:phash2([node()]),
<title>Note</title>
<p>Some of the functions use the process dictionary variable
<c>random_seed</c> to remember the current seed.</p>
- <p>If a process calls <c>uniform/0</c> or <c>uniform/1</c> without
- setting a seed first, <c>seed/0</c> is called automatically.</p>
- <p>The implementation changed in R15. Upgrading to R15 will break
- applications that expect a specific output for a given seed. The output
- is still deterministic number series, but different compared to releases
- older than R15. The seed <c>{0,0,0}</c> will, for example, no longer
+
+ <p>If a process calls
+ <seealso marker="#uniform/0"><c>uniform/0</c></seealso> or
+ <seealso marker="#uniform/1"><c>uniform/1</c></seealso>
+ without setting a seed first,
+ <seealso marker="#seed/0"><c>seed/0</c></seealso>
+ is called automatically.</p>
+
+ <p>The implementation changed in Erlang/OTP R15. Upgrading to R15 breaks
+ applications that expect a specific output for a specified seed. The
+ output is still deterministic number series, but different compared to
+ releases older than R15. Seed <c>{0,0,0}</c> does, for example, no longer
produce a flawed series of only zeros.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/re.xml b/lib/stdlib/doc/src/re.xml
index 8c19926b10..7f4f0aa18c 100644
--- a/lib/stdlib/doc/src/re.xml
+++ b/lib/stdlib/doc/src/re.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -35,39 +35,37 @@
<file>re.xml</file>
</header>
<module>re</module>
- <modulesummary>Perl like regular expressions for Erlang</modulesummary>
+ <modulesummary>Perl-like regular expressions for Erlang.</modulesummary>
<description>
-
<p>This module contains regular expression matching functions for
- strings and binaries.</p>
+ strings and binaries.</p>
<p>The <seealso marker="#regexp_syntax">regular expression</seealso>
- syntax and semantics resemble that of Perl.</p>
+ syntax and semantics resemble that of Perl.</p>
- <p>The library's matching algorithms are currently based on the
- PCRE library, but not all of the PCRE library is interfaced and
- some parts of the library go beyond what PCRE offers. The sections of
- the PCRE documentation which are relevant to this module are included
- here.</p>
+ <p>The matching algorithms of the library are based on the
+ PCRE library, but not all of the PCRE library is interfaced and
+ some parts of the library go beyond what PCRE offers. The sections of
+ the PCRE documentation that are relevant to this module are included
+ here.</p>
<note>
- <p>The Erlang literal syntax for strings uses the &quot;\&quot;
- (backslash) character as an escape code. You need to escape
- backslashes in literal strings, both in your code and in the shell,
- with an additional backslash, i.e.: &quot;\\&quot;.</p>
+ <p>The Erlang literal syntax for strings uses the &quot;\&quot;
+ (backslash) character as an escape code. You need to escape
+ backslashes in literal strings, both in your code and in the shell,
+ with an extra backslash, that is, &quot;\\&quot;.</p>
</note>
-
-
</description>
+
<datatypes>
<datatype>
<name name="mp"/>
<desc>
- <p>Opaque datatype containing a compiled regular expression.
- The mp() is guaranteed to be a tuple() having the atom
- 're_pattern' as its first element, to allow for matching in
- guards. The arity of the tuple() or the content of the other fields
- may change in future releases.</p>
+ <p>Opaque data type containing a compiled regular expression.
+ <c>mp()</c> is guaranteed to be a tuple() having the atom
+ <c>re_pattern</c> as its first element, to allow for matching in
+ guards. The arity of the tuple or the content of the other fields
+ can change in future Erlang/OTP releases.</p>
</desc>
</datatype>
<datatype>
@@ -77,6 +75,7 @@
<name name="compile_option"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="compile" arity="1"/>
@@ -85,90 +84,214 @@
<p>The same as <c>compile(<anno>Regexp</anno>,[])</c></p>
</desc>
</func>
+
<func>
<name name="compile" arity="2"/>
- <fsummary>Compile a regular expression into a match program</fsummary>
+ <fsummary>Compile a regular expression into a match program.</fsummary>
<desc>
- <p>This function compiles a regular expression with the syntax
- described below into an internal format to be used later as a
- parameter to the run/2,3 functions.</p>
- <p>Compiling the regular expression before matching is useful if
- the same expression is to be used in matching against multiple
- subjects during the program's lifetime. Compiling once and
- executing many times is far more efficient than compiling each
- time one wants to match.</p>
- <p>When the unicode option is given, the regular expression should be given as a valid Unicode <c>charlist()</c>, otherwise as any valid <c>iodata()</c>.</p>
-
- <p><marker id="compile_options"/>The options have the following meanings:</p>
- <taglist>
- <tag><c>unicode</c></tag>
- <item>The regular expression is given as a Unicode <c>charlist()</c> and the resulting regular expression code is to be run against a valid Unicode <c>charlist()</c> subject. Also consider the <c>ucp</c> option when using Unicode characters.</item>
- <tag><c>anchored</c></tag>
- <item>The pattern is forced to be "anchored", that is, it is constrained to match only at the first matching point in the string that is being searched (the "subject string"). This effect can also be achieved by appropriate constructs in the pattern itself.</item>
- <tag><c>caseless</c></tag>
- <item>Letters in the pattern match both upper and lower case letters. It is equivalent to Perl's /i option, and it can be changed within a pattern by a (?i) option setting. Uppercase and lowercase letters are defined as in the ISO-8859-1 character set.</item>
- <tag><c>dollar_endonly</c></tag>
- <item>A dollar metacharacter in the pattern matches only at the end of the subject string. Without this option, a dollar also matches immediately before a newline at the end of the string (but not before any other newlines). The <c>dollar_endonly</c> option is ignored if <c>multiline</c> is given. There is no equivalent option in Perl, and no way to set it within a pattern.</item>
- <tag><c>dotall</c></tag>
- <item>A dot in the pattern matches all characters, including those that indicate newline. Without it, a dot does not match when the current position is at a newline. This option is equivalent to Perl's /s option, and it can be changed within a pattern by a (?s) option setting. A negative class such as [^a] always matches newline characters, independent of this option's setting.</item>
- <tag><c>extended</c></tag>
- <item>Whitespace data characters in the pattern are ignored except when escaped or inside a character class. Whitespace does not include the VT character (ASCII 11). In addition, characters between an unescaped # outside a character class and the next newline, inclusive, are also ignored. This is equivalent to Perl's /x option, and it can be changed within a pattern by a (?x) option setting.
-
-This option makes it possible to include comments inside complicated patterns. Note, however, that this applies only to data characters. Whitespace characters may never appear within special character sequences in a pattern, for example within the sequence <c>(?(</c> which introduces a conditional subpattern.</item>
- <tag><c>firstline</c></tag>
- <item>An unanchored pattern is required to match before or at the first newline in the subject string, though the matched text may continue over the newline.</item>
- <tag><c>multiline</c></tag>
- <item><p>By default, PCRE treats the subject string as consisting of a single line of characters (even if it actually contains newlines). The "start of line" metacharacter (^) matches only at the start of the string, while the "end of line" metacharacter ($) matches only at the end of the string, or before a terminating newline (unless <c>dollar_endonly</c> is given). This is the same as Perl.</p>
-
-<p>When <c>multiline</c> is given, the "start of line" and "end of line" constructs match immediately following or immediately before internal newlines in the subject string, respectively, as well as at the very start and end. This is equivalent to Perl's /m option, and it can be changed within a pattern by a (?m) option setting. If there are no newlines in a subject string, or no occurrences of ^ or $ in a pattern, setting <c>multiline</c> has no effect.</p> </item>
- <tag><c>no_auto_capture</c></tag>
- <item>Disables the use of numbered capturing parentheses in the pattern. Any opening parenthesis that is not followed by ? behaves as if it were followed by ?: but named parentheses can still be used for capturing (and they acquire numbers in the usual way). There is no equivalent of this option in Perl.
-</item>
- <tag><c>dupnames</c></tag>
- <item>Names used to identify capturing subpatterns need not be unique. This can be helpful for certain types of pattern when it is known that only one instance of the named subpattern can ever be matched. There are more details of named subpatterns below</item>
- <tag><c>ungreedy</c></tag>
- <item>This option inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by "?". It is not compatible with Perl. It can also be set by a (?U) option setting within the pattern.</item>
- <tag><c>{newline, NLSpec}</c></tag>
- <item>
- <p>Override the default definition of a newline in the subject string, which is LF (ASCII 10) in Erlang.</p>
- <taglist>
- <tag><c>cr</c></tag>
- <item>Newline is indicated by a single character CR (ASCII 13)</item>
- <tag><c>lf</c></tag>
- <item>Newline is indicated by a single character LF (ASCII 10), the default</item>
- <tag><c>crlf</c></tag>
- <item>Newline is indicated by the two-character CRLF (ASCII 13 followed by ASCII 10) sequence.</item>
- <tag><c>anycrlf</c></tag>
- <item>Any of the three preceding sequences should be recognized.</item>
- <tag><c>any</c></tag>
- <item>Any of the newline sequences above, plus the Unicode sequences VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS (paragraph separator, U+2029). </item>
- </taglist>
- </item>
- <tag><c>bsr_anycrlf</c></tag>
- <item>Specifies specifically that \R is to match only the cr, lf or crlf sequences, not the Unicode specific newline characters.</item>
- <tag><c>bsr_unicode</c></tag>
- <item>Specifies specifically that \R is to match all the Unicode newline characters (including crlf etc, the default).</item>
- <tag><c>no_start_optimize</c></tag>
- <item>This option disables optimization that may malfunction if "Special start-of-pattern items" are present in the regular expression. A typical example would be when matching "DEFABC" against "(*COMMIT)ABC", where the start optimization of PCRE would skip the subject up to the "A" and would never realize that the (*COMMIT) instruction should have made the matching fail. This option is only relevant if you use "start-of-pattern items", as discussed in the section "PCRE regular expression details" below.</item>
- <tag><c>ucp</c></tag>
- <item>Specifies that Unicode Character Properties should be used when
- resolving \B, \b, \D, \d, \S, \s, \W and \w. Without this flag, only
- ISO-Latin-1 properties are used. Using Unicode properties hurts
- performance, but is semantically correct when working with Unicode
- characters beyond the ISO-Latin-1 range.</item>
- <tag><c>never_utf</c></tag>
- <item>Specifies that the (*UTF) and/or (*UTF8) "start-of-pattern items" are forbidden. This flag can not be combined with <c>unicode</c>. Useful if ISO-Latin-1 patterns from an external source are to be compiled.</item>
- </taglist>
- </desc>
+ <p>Compiles a regular expression, with the syntax
+ described below, into an internal format to be used later as a
+ parameter to
+ <seealso marker="#run/2"><c>run/2</c></seealso> and
+ <seealso marker="#run/3"><c>run/3</c></seealso>.</p>
+ <p>Compiling the regular expression before matching is useful if
+ the same expression is to be used in matching against multiple
+ subjects during the lifetime of the program. Compiling once and
+ executing many times is far more efficient than compiling each
+ time one wants to match.</p>
+ <p>When option <c>unicode</c> is specified, the regular expression
+ is to be specified as a valid Unicode <c>charlist()</c>, otherwise as
+ any valid <c>iodata()</c>.</p>
+ <marker id="compile_options"/>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>unicode</c></tag>
+ <item>
+ <p>The regular expression is specified as a Unicode
+ <c>charlist()</c> and the resulting regular expression code is to
+ be run against a valid Unicode <c>charlist()</c> subject. Also
+ consider option <c>ucp</c> when using Unicode characters.</p>
+ </item>
+ <tag><c>anchored</c></tag>
+ <item>
+ <p>The pattern is forced to be "anchored", that is, it is
+ constrained to match only at the first matching point in the
+ string that is searched (the "subject string"). This effect can
+ also be achieved by appropriate constructs in the pattern
+ itself.</p>
+ </item>
+ <tag><c>caseless</c></tag>
+ <item>
+ <p>Letters in the pattern match both uppercase and lowercase
+ letters. It is equivalent to Perl option <c>/i</c> and can be
+ changed within a pattern by a <c>(?i)</c> option setting.
+ Uppercase and lowercase letters are defined as in the ISO 8859-1
+ character set.</p>
+ </item>
+ <tag><c>dollar_endonly</c></tag>
+ <item>
+ <p>A dollar metacharacter in the pattern matches only at the end of
+ the subject string. Without this option, a dollar also matches
+ immediately before a newline at the end of the string (but not
+ before any other newlines). This option is ignored if option
+ <c>multiline</c> is specified. There is no equivalent option in
+ Perl, and it cannot be set within a pattern.</p>
+ </item>
+ <tag><c>dotall</c></tag>
+ <item>
+ <p>A dot in the pattern matches all characters, including those
+ indicating newline. Without it, a dot does not match when the
+ current position is at a newline. This option is equivalent to
+ Perl option <c>/s</c> and it can be changed within a pattern by a
+ <c>(?s)</c> option setting. A negative class, such as <c>[^a]</c>,
+ always matches newline characters, independent of the setting of
+ this option.</p>
+ </item>
+ <tag><c>extended</c></tag>
+ <item>
+ <p>Whitespace data characters in the pattern are ignored except
+ when escaped or inside a character class. Whitespace does not
+ include character 'vt' (ASCII 11). Characters between an
+ unescaped <c>#</c> outside a character class and the next newline,
+ inclusive, are also ignored. This is equivalent to Perl option
+ <c>/x</c> and can be changed within a pattern by a <c>(?x)</c>
+ option setting.</p>
+ <p>With this option, comments inside complicated patterns can be
+ included. However, notice that this applies only to data
+ characters. Whitespace characters can never appear within special
+ character sequences in a pattern, for example within sequence
+ <c>(?(</c> that introduces a conditional subpattern.</p>
+ </item>
+ <tag><c>firstline</c></tag>
+ <item>
+ <p>An unanchored pattern is required to match before or at the first
+ newline in the subject string, although the matched text can
+ continue over the newline.</p>
+ </item>
+ <tag><c>multiline</c></tag>
+ <item>
+ <p>By default, PCRE treats the subject string as consisting of a
+ single line of characters (even if it contains newlines). The
+ "start of line" metacharacter (<c>^</c>) matches only at the
+ start of the string, while the "end of line" metacharacter
+ (<c>$</c>) matches only at the end of the string, or before a
+ terminating newline (unless option <c>dollar_endonly</c> is
+ specified). This is the same as in Perl.</p>
+ <p>When this option is specified, the "start of line" and "end of
+ line" constructs match immediately following or immediately
+ before internal newlines in the subject string, respectively, as
+ well as at the very start and end. This is equivalent to Perl
+ option <c>/m</c> and can be changed within a pattern by a
+ <c>(?m)</c> option setting. If there are no newlines in a subject
+ string, or no occurrences of <c>^</c> or <c>$</c> in a pattern,
+ setting <c>multiline</c> has no effect.</p> </item>
+ <tag><c>no_auto_capture</c></tag>
+ <item>
+ <p>Disables the use of numbered capturing parentheses in the
+ pattern. Any opening parenthesis that is not followed by <c>?</c>
+ behaves as if it is followed by <c>?:</c>. Named parentheses can
+ still be used for capturing (and they acquire numbers in the
+ usual way). There is no equivalent option in Perl.</p>
+ </item>
+ <tag><c>dupnames</c></tag>
+ <item>
+ <p>Names used to identify capturing subpatterns need not be unique.
+ This can be helpful for certain types of pattern when it is known
+ that only one instance of the named subpattern can ever be
+ matched. More details of named subpatterns are provided below.</p>
+ </item>
+ <tag><c>ungreedy</c></tag>
+ <item>
+ <p>Inverts the "greediness" of the quantifiers so that they are not
+ greedy by default, but become greedy if followed by "?". It is
+ not compatible with Perl. It can also be set by a <c>(?U)</c>
+ option setting within the pattern.</p>
+ </item>
+ <tag><c>{newline, NLSpec}</c></tag>
+ <item>
+ <p>Overrides the default definition of a newline in the subject
+ string, which is LF (ASCII 10) in Erlang.</p>
+ <taglist>
+ <tag><c>cr</c></tag>
+ <item>
+ <p>Newline is indicated by a single character <c>cr</c>
+ (ASCII 13).</p>
+ </item>
+ <tag><c>lf</c></tag>
+ <item>
+ <p>Newline is indicated by a single character LF (ASCII 10), the
+ default.</p>
+ </item>
+ <tag><c>crlf</c></tag>
+ <item>
+ <p>Newline is indicated by the two-character CRLF (ASCII 13
+ followed by ASCII 10) sequence.</p>
+ </item>
+ <tag><c>anycrlf</c></tag>
+ <item>
+ <p>Any of the three preceding sequences is to be recognized.</p>
+ </item>
+ <tag><c>any</c></tag>
+ <item>
+ <p>Any of the newline sequences above, and the Unicode sequences
+ VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL (next
+ line, U+0085), LS (line separator, U+2028), and PS (paragraph
+ separator, U+2029).</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>bsr_anycrlf</c></tag>
+ <item>
+ <p>Specifies specifically that \R is to match only the CR,
+ LF, or CRLF sequences, not the Unicode-specific newline
+ characters.</p>
+ </item>
+ <tag><c>bsr_unicode</c></tag>
+ <item>
+ <p>Specifies specifically that \R is to match all the Unicode
+ newline characters (including CRLF, and so on, the default).</p>
+ </item>
+ <tag><c>no_start_optimize</c></tag>
+ <item>
+ <p>Disables optimization that can malfunction if "Special
+ start-of-pattern items" are present in the regular expression. A
+ typical example would be when matching "DEFABC" against
+ "(*COMMIT)ABC", where the start optimization of PCRE would skip
+ the subject up to "A" and never realize that the (*COMMIT)
+ instruction is to have made the matching fail. This option is only
+ relevant if you use "start-of-pattern items", as discussed in
+ section <seealso marker="#regexp_syntax_details">PCRE Regular Expression
+ Details</seealso>.</p>
+ </item>
+ <tag><c>ucp</c></tag>
+ <item>
+ <p>Specifies that Unicode character properties are to be used when
+ resolving \B, \b, \D, \d, \S, \s, \W and \w. Without this flag,
+ only ISO Latin-1 properties are used. Using Unicode properties
+ hurts performance, but is semantically correct when working with
+ Unicode characters beyond the ISO Latin-1 range.</p>
+ </item>
+ <tag><c>never_utf</c></tag>
+ <item>
+ <p>Specifies that the (*UTF) and/or (*UTF8) "start-of-pattern
+ items" are forbidden. This flag cannot be combined with option
+ <c>unicode</c>. Useful if ISO Latin-1 patterns from an external
+ source are to be compiled.</p>
+ </item>
+ </taglist>
+ </desc>
</func>
<func>
<name name="inspect" arity="2"/>
- <fsummary>Inspects a compiled regular expression</fsummary>
+ <fsummary>Inspects a compiled regular expression.</fsummary>
<desc>
- <p>This function takes a compiled regular expression and an item, returning the relevant data from the regular expression. Currently the only supported item is <c>namelist</c>, which returns the tuple <c>{namelist, [ binary()]}</c>, containing the names of all (unique) named subpatterns in the regular expression.</p>
- <p>Example:</p>
- <code type="none">
+ <p>Takes a compiled regular expression and an item, and returns the
+ relevant data from the regular expression. The only
+ supported item is <c>namelist</c>, which returns the tuple
+ <c>{namelist, [binary()]}</c>, containing the names of all (unique)
+ named subpatterns in the regular expression. For example:</p>
+ <code type="none">
1&gt; {ok,MP} = re:compile("(?&lt;A&gt;A)|(?&lt;B&gt;B)|(?&lt;C&gt;C)").
{ok,{re_pattern,3,0,0,
&lt;&lt;69,82,67,80,119,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,
@@ -181,8 +304,15 @@ This option makes it possible to include comments inside complicated patterns. N
255,255,...&gt;&gt;}}
4&gt; re:inspect(MPD,namelist).
{namelist,[&lt;&lt;"B"&gt;&gt;,&lt;&lt;"C"&gt;&gt;]}</code>
- <p>Note specifically in the second example that the duplicate name only occurs once in the returned list, and that the list is in alphabetical order regardless of where the names are positioned in the regular expression. The order of the names is the same as the order of captured subexpressions if <c>{capture, all_names}</c> is given as an option to <c>re:run/3</c>. You can therefore create a name-to-value mapping from the result of <c>re:run/3</c> like this:</p>
-<code>
+ <p>Notice in the second example that the duplicate name only occurs
+ once in the returned list, and that the list is in alphabetical order
+ regardless of where the names are positioned in the regular
+ expression. The order of the names is the same as the order of
+ captured subexpressions if <c>{capture, all_names}</c> is specified as
+ an option to <seealso marker="#run/3"><c>run/3</c></seealso>.
+ You can therefore create a name-to-value mapping from the result of
+ <c>run/3</c> like this:</p>
+ <code>
1&gt; {ok,MP} = re:compile("(?&lt;A&gt;A)|(?&lt;B&gt;B)|(?&lt;C&gt;C)").
{ok,{re_pattern,3,0,0,
&lt;&lt;69,82,67,80,119,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,
@@ -193,249 +323,318 @@ This option makes it possible to include comments inside complicated patterns. N
{match,[&lt;&lt;"A"&gt;&gt;,&lt;&lt;&gt;&gt;,&lt;&lt;&gt;&gt;]}
4&gt; NameMap = lists:zip(N,L).
[{&lt;&lt;"A"&gt;&gt;,&lt;&lt;"A"&gt;&gt;},{&lt;&lt;"B"&gt;&gt;,&lt;&lt;&gt;&gt;},{&lt;&lt;"C"&gt;&gt;,&lt;&lt;&gt;&gt;}]</code>
- <p>More items are expected to be added in the future.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="replace" arity="3"/>
+ <fsummary>Match a subject against regular expression and replace matching
+ elements with Replacement.</fsummary>
+ <desc>
+ <p>Same as <c>replace(<anno>Subject</anno>, <anno>RE</anno>,
+ <anno>Replacement</anno>, [])</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="replace" arity="4"/>
+ <fsummary>Match a subject against regular expression and replace matching
+ elements with Replacement.</fsummary>
+ <desc>
+ <p>Replaces the matched part of the <c><anno>Subject</anno></c> string
+ with the contents of <c><anno>Replacement</anno></c>.</p>
+ <p>The permissible options are the same as for
+ <seealso marker="#run/3"><c>run/3</c></seealso>, except that option<c>
+ capture</c> is not allowed. Instead a <c>{return,
+ <anno>ReturnType</anno>}</c> is present. The default return type is
+ <c>iodata</c>, constructed in a way to minimize copying. The
+ <c>iodata</c> result can be used directly in many I/O operations. If a
+ flat <c>list()</c> is desired, specify <c>{return, list}</c>. If a
+ binary is desired, specify <c>{return, binary}</c>.</p>
+ <p>As in function <c>run/3</c>, an <c>mp()</c> compiled with option
+ <c>unicode</c> requires <c><anno>Subject</anno></c> to be a Unicode
+ <c>charlist()</c>. If compilation is done implicitly and the
+ <c>unicode</c> compilation option is specified to this function, both
+ the regular expression and <c><anno>Subject</anno></c> are to
+ specified as valid Unicode <c>charlist()</c>s.</p>
+ <p>The replacement string can contain the special character
+ <c>&amp;</c>, which inserts the whole matching expression in the
+ result, and the special sequence <c>\</c>N (where N is an integer &gt;
+ 0), <c>\g</c>N, or <c>\g{</c>N<c>}</c>, resulting in the subexpression
+ number N, is inserted in the result. If no subexpression with that
+ number is generated by the regular expression, nothing is
+ inserted.</p>
+ <p>To insert an &amp; or a \ in the result, precede it
+ with a \. Notice that Erlang already gives a special meaning to
+ \ in literal strings, so a single \ must be written as
+ <c>"\\"</c> and therefore a double \ as <c>"\\\\"</c>.</p>
+ <p><em>Example:</em></p>
+ <code>
+re:replace("abcd","c","[&amp;]",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+"ab[c]d"</code>
+ <p>while</p>
+ <code>
+re:replace("abcd","c","[\\&amp;]",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+"ab[&amp;]d"</code>
+ <p>As with <c>run/3</c>, compilation errors raise the <c>badarg</c>
+ exception. <seealso marker="#compile/2"><c>compile/2</c></seealso>
+ can be used to get more information about the error.</p>
+ </desc>
+ </func>
+
<func>
<name name="run" arity="2"/>
- <fsummary>Match a subject against regular expression and capture subpatterns</fsummary>
+ <fsummary>Match a subject against regular expression and capture
+ subpatterns.</fsummary>
<desc>
- <p>The same as <c>run(<anno>Subject</anno>,<anno>RE</anno>,[])</c>.</p>
+ <p>Same as <c>run(<anno>Subject</anno>,<anno>RE</anno>,[])</c>.</p>
</desc>
</func>
+
<func>
<name name="run" arity="3"/>
- <fsummary>Match a subject against regular expression and capture subpatterns</fsummary>
- <type_desc variable="CompileOpt">See <seealso marker="#compile_options">compile/2</seealso> above.</type_desc>
+ <fsummary>Match a subject against regular expression and capture
+ subpatterns.</fsummary>
+ <type_desc variable="CompileOpt">See <seealso marker="#compile_options">
+ <c>compile/2</c></seealso>.</type_desc>
<desc>
-
- <p>Executes a regexp matching, returning <c>match/{match,
- <anno>Captured</anno>}</c> or <c>nomatch</c>. The regular expression can be
- given either as <c>iodata()</c> in which case it is
- automatically compiled (as by <c>re:compile/2</c>) and executed,
- or as a pre-compiled <c>mp()</c> in which case it is executed
- against the subject directly.</p>
-
- <p>When compilation is involved, the exception <c>badarg</c> is
- thrown if a compilation error occurs. Call <c>re:compile/2</c>
- to get information about the location of the error in the
- regular expression.</p>
-
- <p>If the regular expression is previously compiled, the option
- list can only contain the options <c>anchored</c>,
- <c>global</c>, <c>notbol</c>, <c>noteol</c>, <c>report_errors</c>,
- <c>notempty</c>, <c>notempty_atstart</c>, <c>{offset, integer() >= 0}</c>,
- <c>{match_limit, integer() >= 0}</c>,
- <c>{match_limit_recursion, integer() >= 0}</c>,
- <c>{newline,
- <anno>NLSpec</anno>}</c> and
- <c>{capture, <anno>ValueSpec</anno>}/{capture, <anno>ValueSpec</anno>,
- <anno>Type</anno>}</c>. Otherwise all options valid for the
- <c>re:compile/2</c> function are allowed as well. Options
- allowed both for compilation and execution of a match, namely
- <c>anchored</c> and <c>{newline, <anno>NLSpec</anno>}</c>,
- will affect both
- the compilation and execution if present together with a non
- pre-compiled regular expression.</p>
-
- <p>If the regular expression was previously compiled with the
- option <c>unicode</c>, the <c><anno>Subject</anno></c> should be provided as
- a valid Unicode <c>charlist()</c>, otherwise any <c>iodata()</c>
- will do. If compilation is involved and the option
- <c>unicode</c> is given, both the <c><anno>Subject</anno></c> and the regular
- expression should be given as valid Unicode
- <c>charlists()</c>.</p>
-
- <p>The <c>{capture, <anno>ValueSpec</anno>}/{capture, <anno>ValueSpec</anno>, <anno>Type</anno>}</c>
- defines what to return from the function upon successful
- matching. The <c>capture</c> tuple may contain both a
- value specification telling which of the captured
- substrings are to be returned, and a type specification, telling
- how captured substrings are to be returned (as index tuples,
- lists or binaries). The <c>capture</c> option makes the function
- quite flexible and powerful. The different options are described
- in detail below.</p>
-
- <p>If the capture options describe that no substring capturing
- at all is to be done (<c>{capture, none}</c>), the function will
- return the single atom <c>match</c> upon successful matching,
- otherwise the tuple
- <c>{match, <anno>ValueList</anno>}</c> is returned. Disabling capturing can
- be done either by specifying <c>none</c> or an empty list as
- <c><anno>ValueSpec</anno></c>.</p>
-
- <p>The <c>report_errors</c> option adds the possibility that an
- error tuple is returned. The tuple will either indicate a
- matching error (<c>match_limit</c> or
- <c>match_limit_recursion</c>) or a compilation error, where the
- error tuple has the format <c>{error, {compile,
- <anno>CompileErr</anno>}}</c>. Note that if the option
- <c>report_errors</c> is not given, the function never returns
- error tuples, but will report compilation errors as a badarg
- exception and failed matches due to exceeded match limits simply
- as <c>nomatch</c>.</p>
-
- <p>The options relevant for execution are:</p>
-
- <taglist>
- <tag><c>anchored</c></tag>
-
- <item>Limits <c>re:run/3</c> to matching at the first matching
- position. If a pattern was compiled with <c>anchored</c>, or
- turned out to be anchored by virtue of its contents, it cannot
- be made unanchored at matching time, hence there is no
- <c>unanchored</c> option.</item>
-
- <tag><c>global</c></tag>
- <item>
-
- <p>Implements global (repetitive) search (the <c>g</c> flag in
- Perl). Each match is returned as a separate
- <c>list()</c> containing the specific match as well as any
- matching subexpressions (or as specified by the <c>capture
- option</c>). The <c><anno>Captured</anno></c> part of the return value will
- hence be a <c>list()</c> of <c>list()</c>s when this
- option is given.</p>
-
- <p>The interaction of the global option with a regular
- expression which matches an empty string surprises some users.
- When the global option is given, <c>re:run/3</c> handles empty
- matches in the same way as Perl: a zero-length match at any
- point will be retried with the options <c>[anchored,
- notempty_atstart]</c> as well. If that search gives a result of length
- &gt; 0, the result is included. For example:</p>
-
-<code> re:run("cat","(|at)",[global]).</code>
-
- <p>The following matching will be performed:</p>
- <taglist>
- <tag>At offset <c>0</c></tag>
- <item>The regexp <c>(|at)</c> will first match at the initial
- position of the string <c>cat</c>, giving the result set
- <c>[{0,0},{0,0}]</c> (the second <c>{0,0}</c> is due to the
- subexpression marked by the parentheses). As the length of the
- match is 0, we don't advance to the next position yet.</item>
- <tag>At offset <c>0</c> with <c>[anchored, notempty_atstart]</c></tag>
- <item> The search is retried
- with the options <c>[anchored, notempty_atstart]</c> at the same
- position, which does not give any interesting result of longer
- length, so the search position is now advanced to the next
- character (<c>a</c>).</item>
- <tag>At offset <c>1</c></tag>
- <item>This time, the search results in
- <c>[{1,0},{1,0}]</c>, so this search will also be repeated
- with the extra options.</item>
- <tag>At offset <c>1</c> with <c>[anchored, notempty_atstart]</c></tag>
- <item>Now the <c>ab</c> alternative
- is found and the result will be [{1,2},{1,2}]. The result is
- added to the list of results and the position in the
- search string is advanced two steps.</item>
- <tag>At offset <c>3</c></tag>
- <item>The search now once again
- matches the empty string, giving <c>[{3,0},{3,0}]</c>.</item>
- <tag>At offset <c>1</c> with <c>[anchored, notempty_atstart]</c></tag>
- <item>This will give no result of length &gt; 0 and we are at
- the last position, so the global search is complete.</item>
- </taglist>
- <p>The result of the call is:</p>
-
-<code> {match,[[{0,0},{0,0}],[{1,0},{1,0}],[{1,2},{1,2}],[{3,0},{3,0}]]}</code>
-</item>
-
- <tag><c>notempty</c></tag>
- <item>
- <p>An empty string is not considered to be a valid match if this
- option is given. If there are alternatives in the pattern, they
- are tried. If all the alternatives match the empty string, the
- entire match fails. For example, if the pattern</p>
-<code> a?b?</code>
- <p>is applied to a string not beginning with "a" or "b", it
- would normally match the empty string at the start of the
- subject. With the <c>notempty</c> option, this match is not
- valid, so re:run/3 searches further into the string for
- occurrences of "a" or "b".</p>
- </item>
- <tag><c>notempty_atstart</c></tag>
- <item>
- <p>This is like <c>notempty</c>, except that an empty string
- match that is not at the start of the subject is permitted. If
- the pattern is anchored, such a match can occur only if the
- pattern contains \K.</p>
- <p>Perl has no direct equivalent of <c>notempty</c> or <c>notempty_atstart</c>, but it does
- make a special case of a pattern match of the empty string
- within its split() function, and when using the /g modifier. It
- is possible to emulate Perl's behavior after matching a null
- string by first trying the match again at the same offset with
- <c>notempty_atstart</c> and <c>anchored</c>, and then, if that fails, by
- advancing the starting offset (see below) and trying an ordinary
- match again.</p>
- </item>
- <tag><c>notbol</c></tag>
-
- <item>This option specifies that the first character of the subject
- string is not the beginning of a line, so the circumflex
- metacharacter should not match before it. Setting this without
- <c>multiline</c> (at compile time) causes circumflex never to
- match. This option only affects the behavior of the circumflex
- metacharacter. It does not affect \A.</item>
-
- <tag><c>noteol</c></tag>
-
- <item>This option specifies that the end of the subject string
- is not the end of a line, so the dollar metacharacter should not
- match it nor (except in multiline mode) a newline immediately
- before it. Setting this without <c>multiline</c> (at compile time)
- causes dollar never to match. This option affects only the
- behavior of the dollar metacharacter. It does not affect \Z or
- \z.</item>
-
- <tag><c>report_errors</c></tag>
-
- <item><p>This option gives better control of the error handling in <c>re:run/3</c>. When it is given, compilation errors (if the regular expression isn't already compiled) as well as run-time errors are explicitly returned as an error tuple.</p>
- <p>The possible run-time errors are:</p>
- <taglist>
- <tag><c>match_limit</c></tag>
-
- <item>The PCRE library sets a limit on how many times the
- internal match function can be called. The default value for
- this is 10000000 in the library compiled for Erlang. If
- <c>{error, match_limit}</c> is returned, it means that the
- execution of the regular expression has reached this
- limit. Normally this is to be regarded as a <c>nomatch</c>,
- which is the default return value when this happens, but by
- specifying <c>report_errors</c>, you will get informed when
- the match fails due to to many internal calls.</item>
-
- <tag><c>match_limit_recursion</c></tag>
-
- <item>This error is very similar to <c>match_limit</c>, but
- occurs when the internal match function of PCRE is
- "recursively" called more times than the
- "match_limit_recursion" limit, which is by default 10000000 as
- well. Note that as long as the <c>match_limit</c> and
- <c>match_limit_default</c> values are kept at the default
- values, the <c>match_limit_recursion</c> error can not occur,
- as the <c>match_limit</c> error will occur before that (each
- recursive call is also a call, but not vice versa). Both
- limits can however be changed, either by setting limits
- directly in the regular expression string (see reference
- section below) or by giving options to <c>re:run/3</c></item>
-
- </taglist>
- <p>It is important to understand that what is referred to as
- "recursion" when limiting matches is not actually recursion on
- the C stack of the Erlang machine, neither is it recursion on
- the Erlang process stack. The version of PCRE compiled into the
- Erlang VM uses machine "heap" memory to store values that needs to be
- kept over recursion in regular expression matches.</p>
- </item>
- <tag><c>{match_limit, integer() >= 0}</c></tag>
-
- <item><p>This option limits the execution time of a match in an
- implementation-specific way. It is described in the following
- way by the PCRE documentation:</p>
-
- <code>
+ <p>Executes a regular expression matching, and returns
+ <c>match/{match, <anno>Captured</anno>}</c> or <c>nomatch</c>. The
+ regular expression can be specified either as <c>iodata()</c> in
+ which case it is automatically compiled (as by <c>compile/2</c>) and
+ executed, or as a precompiled <c>mp()</c> in which case it is executed
+ against the subject directly.</p>
+ <p>When compilation is involved, exception <c>badarg</c> is thrown if a
+ compilation error occurs. Call <c>compile/2</c> to get information
+ about the location of the error in the regular expression.</p>
+ <p>If the regular expression is previously compiled, the option list can
+ only contain the following options:</p>
+ <list type="bulleted">
+ <item><c>anchored</c></item>
+ <item><c>{capture, <anno>ValueSpec</anno>}/{capture,
+ <anno>ValueSpec</anno>, <anno>Type</anno>}</c></item>
+ <item><c>global</c></item>
+ <item><c>{match_limit, integer() >= 0}</c></item>
+ <item><c>{match_limit_recursion, integer() >= 0}</c></item>
+ <item><c>{newline, <anno>NLSpec</anno>}</c></item>
+ <item><c>notbol</c></item>
+ <item><c>notempty</c></item>
+ <item><c>notempty_atstart</c></item>
+ <item><c>noteol</c></item>
+ <item><c>{offset, integer() >= 0}</c></item>
+ <item><c>report_errors</c></item>
+ </list>
+ <p>Otherwise all options valid for function <c>compile/2</c> are also
+ allowed. Options allowed both for compilation and execution of a
+ match, namely <c>anchored</c> and <c>{newline,
+ <anno>NLSpec</anno>}</c>, affect both the compilation and execution if
+ present together with a non-precompiled regular expression.</p>
+ <p>If the regular expression was previously compiled with option
+ <c>unicode</c>, <c><anno>Subject</anno></c> is to be provided as a
+ valid Unicode <c>charlist()</c>, otherwise any <c>iodata()</c> will
+ do. If compilation is involved and option <c>unicode</c> is specified,
+ both <c><anno>Subject</anno></c> and the regular expression are to be
+ specified as valid Unicode <c>charlists()</c>.</p>
+ <p><c>{capture, <anno>ValueSpec</anno>}/{capture,
+ <anno>ValueSpec</anno>, <anno>Type</anno>}</c> defines what to return
+ from the function upon successful matching. The <c>capture</c> tuple
+ can contain both a value specification, telling which of the captured
+ substrings are to be returned, and a type specification, telling how
+ captured substrings are to be returned (as index tuples, lists, or
+ binaries). The options are described in detail below.</p>
+ <p>If the capture options describe that no substring capturing is to be
+ done (<c>{capture, none}</c>), the function returns the single atom
+ <c>match</c> upon successful matching, otherwise the tuple
+ <c>{match, <anno>ValueList</anno>}</c>. Disabling capturing can be
+ done either by specifying <c>none</c> or an empty list as
+ <c><anno>ValueSpec</anno></c>.</p>
+ <p>Option <c>report_errors</c> adds the possibility that an error tuple
+ is returned. The tuple either indicates a matching error
+ (<c>match_limit</c> or <c>match_limit_recursion</c>), or a compilation
+ error, where the error tuple has the format <c>{error, {compile,
+ <anno>CompileErr</anno>}}</c>. Notice that if option
+ <c>report_errors</c> is not specified, the function never returns
+ error tuples, but reports compilation errors as a <c>badarg</c>
+ exception and failed matches because of exceeded match limits simply
+ as <c>nomatch</c>.</p>
+ <p>The following options are relevant for execution:</p>
+ <taglist>
+ <tag><c>anchored</c></tag>
+ <item>
+ <p>Limits <c>run/3</c> to matching at the first matching
+ position. If a pattern was compiled with <c>anchored</c>, or
+ turned out to be anchored by virtue of its contents, it cannot
+ be made unanchored at matching time, hence there is no
+ <c>unanchored</c> option.</p></item>
+ <tag><c>global</c></tag>
+ <item>
+ <p>Implements global (repetitive) search (flag <c>g</c> in Perl).
+ Each match is returned as a separate <c>list()</c> containing the
+ specific match and any matching subexpressions (or as specified
+ by option <c>capture</c>. The <c><anno>Captured</anno></c> part
+ of the return value is hence a <c>list()</c> of <c>list()</c>s
+ when this option is specified.</p>
+ <p>The interaction of option <c>global</c> with a regular
+ expression that matches an empty string surprises some users.
+ When option <c>global</c> is specified, <c>run/3</c> handles
+ empty matches in the same way as Perl: a zero-length match at any
+ point is also retried with options <c>[anchored,
+ notempty_atstart]</c>. If that search gives a result of length
+ &gt; 0, the result is included. Example:</p>
+ <code>
+re:run("cat","(|at)",[global]).</code>
+ <p>The following matchings are performed:</p>
+ <taglist>
+ <tag>At offset <c>0</c></tag>
+ <item>
+ <p>The regular expression <c>(|at)</c> first match at the
+ initial position of string <c>cat</c>, giving the result set
+ <c>[{0,0},{0,0}]</c> (the second <c>{0,0}</c> is because of
+ the subexpression marked by the parentheses). As the length
+ of the match is 0, we do not advance to the next position
+ yet.</p>
+ </item>
+ <tag>At offset <c>0</c> with <c>[anchored,
+ notempty_atstart]</c></tag>
+ <item>
+ <p>The search is retried with options <c>[anchored,
+ notempty_atstart]</c> at the same position, which does not
+ give any interesting result of longer length, so the search
+ position is advanced to the next character (<c>a</c>).</p>
+ </item>
+ <tag>At offset <c>1</c></tag>
+ <item>
+ <p>The search results in <c>[{1,0},{1,0}]</c>, so this search is
+ also repeated with the extra options.</p>
+ </item>
+ <tag>At offset <c>1</c> with <c>[anchored,
+ notempty_atstart]</c></tag>
+ <item>
+ <p>Alternative <c>ab</c> is found and the result is
+ [{1,2},{1,2}]. The result is added to the list of results and
+ the position in the search string is advanced two steps.</p>
+ </item>
+ <tag>At offset <c>3</c></tag>
+ <item>
+ <p>The search once again matches the empty string, giving
+ <c>[{3,0},{3,0}]</c>.</p>
+ </item>
+ <tag>At offset <c>1</c> with <c>[anchored,
+ notempty_atstart]</c></tag>
+ <item>
+ <p>This gives no result of length &gt; 0 and we are at the last
+ position, so the global search is complete.</p>
+ </item>
+ </taglist>
+ <p>The result of the call is:</p>
+ <code>
+{match,[[{0,0},{0,0}],[{1,0},{1,0}],[{1,2},{1,2}],[{3,0},{3,0}]]}</code>
+ </item>
+ <tag><c>notempty</c></tag>
+ <item>
+ <p>An empty string is not considered to be a valid match if this
+ option is specified. If alternatives in the pattern exist, they
+ are tried. If all the alternatives match the empty string, the
+ entire match fails.</p>
+ <p><em>Example:</em></p>
+ <p>If the following pattern is applied to a string not beginning
+ with "a" or "b", it would normally match the empty string at the
+ start of the subject:</p>
+ <code>
+a?b?</code>
+ <p>With option <c>notempty</c>, this match is invalid, so
+ <c>run/3</c> searches further into the string for occurrences of
+ "a" or "b".</p>
+ </item>
+ <tag><c>notempty_atstart</c></tag>
+ <item>
+ <p>Like <c>notempty</c>, except that an empty string match that is
+ not at the start of the subject is permitted. If the pattern is
+ anchored, such a match can occur only if the pattern contains
+ \K.</p>
+ <p>Perl has no direct equivalent of <c>notempty</c> or
+ <c>notempty_atstart</c>, but it does make a special case of a
+ pattern match of the empty string within its split() function,
+ and when using modifier <c>/g</c>. The Perl behavior can be
+ emulated after matching a null string by first trying the
+ match again at the same offset with <c>notempty_atstart</c> and
+ <c>anchored</c>, and then, if that fails, by advancing the
+ starting offset (see below) and trying an ordinary match
+ again.</p>
+ </item>
+ <tag><c>notbol</c></tag>
+ <item>
+ <p>Specifies that the first character of the subject string is not
+ the beginning of a line, so the circumflex metacharacter is not
+ to match before it. Setting this without <c>multiline</c> (at
+ compile time) causes circumflex never to match. This option only
+ affects the behavior of the circumflex metacharacter. It does not
+ affect \A.</p>
+ </item>
+ <tag><c>noteol</c></tag>
+ <item>
+ <p>Specifies that the end of the subject string is not the end of a
+ line, so the dollar metacharacter is not to match it nor (except
+ in multiline mode) a newline immediately before it. Setting this
+ without <c>multiline</c> (at compile time) causes dollar never to
+ match. This option affects only the behavior of the dollar
+ metacharacter. It does not affect \Z or \z.</p>
+ </item>
+ <tag><c>report_errors</c></tag>
+ <item>
+ <p>Gives better control of the error handling in <c>run/3</c>. When
+ specified, compilation errors (if the regular expression is not
+ already compiled) and runtime errors are explicitly returned as
+ an error tuple.</p>
+ <p>The following are the possible runtime errors:</p>
+ <taglist>
+ <tag><c>match_limit</c></tag>
+ <item>
+ <p>The PCRE library sets a limit on how many times the internal
+ match function can be called. Defaults to 10,000,000 in the
+ library compiled for Erlang. If <c>{error, match_limit}</c>
+ is returned, the execution of the regular expression has
+ reached this limit. This is normally to be regarded as a
+ <c>nomatch</c>, which is the default return value when this
+ occurs, but by specifying <c>report_errors</c>, you are
+ informed when the match fails because of too many internal
+ calls.</p>
+ </item>
+ <tag><c>match_limit_recursion</c></tag>
+ <item>
+ <p>This error is very similar to <c>match_limit</c>, but occurs
+ when the internal match function of PCRE is "recursively"
+ called more times than the <c>match_limit_recursion</c> limit,
+ which defaults to 10,000,000 as well. Notice that as long as
+ the <c>match_limit</c>
+ and <c>match_limit_default</c> values are
+ kept at the default values, the <c>match_limit_recursion</c>
+ error cannot occur, as the <c>match_limit</c> error occurs
+ before that (each recursive call is also a call, but not
+ conversely). Both limits can however be changed, either by
+ setting limits directly in the regular expression string (see
+ section <seealso marker="#regexp_syntax_details">PCRE Regular
+ Eexpression Details</seealso>) or by specifying options to
+ <c>run/3</c>.</p>
+ </item>
+ </taglist>
+ <p>It is important to understand that what is referred to as
+ "recursion" when limiting matches is not recursion on the C stack
+ of the Erlang machine or on the Erlang process stack. The PCRE
+ version compiled into the Erlang VM uses machine "heap" memory to
+ store values that must be kept over recursion in regular
+ expression matches.</p>
+ </item>
+ <tag><c>{match_limit, integer() >= 0}</c></tag>
+ <item>
+ <p>Limits the execution time of a match in an
+ implementation-specific way. It is described as follows by the
+ PCRE documentation:</p>
+ <code>
The match_limit field provides a means of preventing PCRE from using
up a vast amount of resources when running patterns that are not going
to match, but which have a very large number of possibilities in their
@@ -448,26 +647,22 @@ imposed on the number of times this function is called during a match,
which has the effect of limiting the amount of backtracking that can
take place. For patterns that are not anchored, the count restarts
from zero for each position in the subject string.</code>
-
- <p>This means that runaway regular expression matches can fail
- faster if the limit is lowered using this option. The default
- value compiled into the Erlang virtual machine is 10000000</p>
-
- <note><p>This option does in no way affect the execution of the
- Erlang virtual machine in terms of "long running
- BIF's". <c>re:run</c> always give control back to the scheduler
- of Erlang processes at intervals that ensures the real time
- properties of the Erlang system.</p></note>
- </item>
-
- <tag><c>{match_limit_recursion, integer() >= 0}</c></tag>
-
- <item><p>This option limits the execution time and memory
- consumption of a match in an implementation-specific way, very
- similar to <c>match_limit</c>. It is described in the following
- way by the PCRE documentation:</p>
-
- <code>
+ <p>This means that runaway regular expression matches can fail
+ faster if the limit is lowered using this option. The default
+ value 10,000,000 is compiled into the Erlang VM.</p>
+ <note>
+ <p>This option does in no way affect the execution of the Erlang
+ VM in terms of "long running BIFs". <c>run/3</c> always gives
+ control back to the scheduler of Erlang processes at intervals
+ that ensures the real-time properties of the Erlang system.</p>
+ </note>
+ </item>
+ <tag><c>{match_limit_recursion, integer() >= 0}</c></tag>
+ <item>
+ <p>Limits the execution time and memory consumption of a match in an
+ implementation-specific way, very similar to <c>match_limit</c>.
+ It is described as follows by the PCRE documentation:</p>
+ <code>
The match_limit_recursion field is similar to match_limit, but instead
of limiting the total number of times that match() is called, it
limits the depth of recursion. The recursion depth is a smaller number
@@ -477,3273 +672,3535 @@ match_limit.
Limiting the recursion depth limits the amount of machine stack that
can be used, or, when PCRE has been compiled to use memory on the heap
-instead of the stack, the amount of heap memory that can be
-used.</code>
-
- <p>The Erlang virtual machine uses a PCRE library where heap
- memory is used when regular expression match recursion happens,
- why this limits the usage of machine heap, not C stack.</p>
-
- <p>Specifying a lower value may result in matches with deep recursion failing, when they should actually have matched:</p>
- <code type="none">
+instead of the stack, the amount of heap memory that can be used.</code>
+ <p>The Erlang VM uses a PCRE library where heap memory is used when
+ regular expression match recursion occurs. This therefore limits
+ the use of machine heap, not C stack.</p>
+ <p>Specifying a lower value can result in matches with deep
+ recursion failing, when they should have matched:</p>
+ <code type="none">
1&gt; re:run("aaaaaaaaaaaaaz","(a+)*z").
{match,[{0,14},{0,13}]}
2&gt; re:run("aaaaaaaaaaaaaz","(a+)*z",[{match_limit_recursion,5}]).
nomatch
3&gt; re:run("aaaaaaaaaaaaaz","(a+)*z",[{match_limit_recursion,5},report_errors]).
{error,match_limit_recursion}</code>
-
- <p>This option, as well as the <c>match_limit</c> option should
- only be used in very rare cases. Understanding of the PCRE
- library internals is recommended before tampering with these
- limits.</p>
- </item>
-
- <tag><c>{offset, integer() >= 0}</c></tag>
-
- <item>Start matching at the offset (position) given in the
- subject string. The offset is zero-based, so that the default is
- <c>{offset,0}</c> (all of the subject string).</item>
-
- <tag><c>{newline, <anno>NLSpec</anno>}</c></tag>
- <item>
- <p>Override the default definition of a newline in the subject string, which is LF (ASCII 10) in Erlang.</p>
- <taglist>
- <tag><c>cr</c></tag>
- <item>Newline is indicated by a single character CR (ASCII 13)</item>
- <tag><c>lf</c></tag>
- <item>Newline is indicated by a single character LF (ASCII 10), the default</item>
- <tag><c>crlf</c></tag>
- <item>Newline is indicated by the two-character CRLF (ASCII 13 followed by ASCII 10) sequence.</item>
- <tag><c>anycrlf</c></tag>
- <item>Any of the three preceding sequences should be recognized.</item>
- <tag><c>any</c></tag>
- <item>Any of the newline sequences above, plus the Unicode sequences VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS (paragraph separator, U+2029). </item>
- </taglist>
- </item>
- <tag><c>bsr_anycrlf</c></tag>
- <item>Specifies specifically that \R is to match only the cr, lf or crlf sequences, not the Unicode specific newline characters. (overrides compilation option)</item>
- <tag><c>bsr_unicode</c></tag>
- <item>Specifies specifically that \R is to match all the Unicode newline characters (including crlf etc, the default).(overrides compilation option)</item>
-
- <tag><c>{capture, <anno>ValueSpec</anno>}</c>/<c>{capture, <anno>ValueSpec</anno>, <anno>Type</anno>}</c></tag>
- <item>
-
- <p>Specifies which captured substrings are returned and in what
- format. By default,
- <c>re:run/3</c> captures all of the matching part of the
- substring as well as all capturing subpatterns (all of the
- pattern is automatically captured). The default return type is
- (zero-based) indexes of the captured parts of the string, given as
- <c>{Offset,Length}</c> pairs (the <c>index</c> <c><anno>Type</anno></c> of
- capturing).</p>
-
- <p>As an example of the default behavior, the following call:</p>
-
- <code> re:run("ABCabcdABC","abcd",[]).</code>
-
- <p>returns, as first and only captured string the matching part of the subject ("abcd" in the middle) as a index pair <c>{3,4}</c>, where character positions are zero based, just as in offsets. The return value of the call above would then be:</p>
- <code> {match,[{3,4}]}</code>
- <p>Another (and quite common) case is where the regular expression matches all of the subject, as in:</p>
- <code> re:run("ABCabcdABC",".*abcd.*",[]).</code>
- <p>where the return value correspondingly will point out all of the string, beginning at index 0 and being 10 characters long:</p>
- <code> {match,[{0,10}]}</code>
-
- <p>If the regular expression contains capturing subpatterns,
- like in the following case:</p>
-
- <code> re:run("ABCabcdABC",".*(abcd).*",[]).</code>
-
- <p>all of the matched subject is captured, as
- well as the captured substrings:</p>
-
- <code> {match,[{0,10},{3,4}]}</code>
-
- <p>the complete matching pattern always giving the first return value in the
- list and the rest of the subpatterns being added in the
- order they occurred in the regular expression.</p>
-
- <p>The capture tuple is built up as follows:</p>
- <taglist>
- <tag><c><anno>ValueSpec</anno></c></tag>
- <item><p>Specifies which captured (sub)patterns are to be returned. The <c><anno>ValueSpec</anno></c> can either be an atom describing a predefined set of return values, or a list containing either the indexes or the names of specific subpatterns to return.</p>
- <p>The predefined sets of subpatterns are:</p>
- <taglist>
- <tag><c>all</c></tag>
- <item>All captured subpatterns including the complete matching string. This is the default.</item>
- <tag><c>all_names</c></tag>
- <item>All <em>named</em> subpatterns in the regular expression, as if a <c>list()</c>
- of all the names <em>in alphabetical order</em> was given. The list of all names can also be retrieved with the <seealso marker="#inspect/2">inspect/2</seealso> function.</item>
- <tag><c>first</c></tag>
- <item>Only the first captured subpattern, which is always the complete matching part of the subject. All explicitly captured subpatterns are discarded.</item>
- <tag><c>all_but_first</c></tag>
- <item>All but the first matching subpattern, i.e. all explicitly captured subpatterns, but not the complete matching part of the subject string. This is useful if the regular expression as a whole matches a large part of the subject, but the part you're interested in is in an explicitly captured subpattern. If the return type is <c>list</c> or <c>binary</c>, not returning subpatterns you're not interested in is a good way to optimize.</item>
- <tag><c>none</c></tag>
- <item>Do not return matching subpatterns at all, yielding the single atom <c>match</c> as the return value of the function when matching successfully instead of the <c>{match, list()}</c> return. Specifying an empty list gives the same behavior.</item>
- </taglist>
- <p>The value list is a list of indexes for the subpatterns to return, where index 0 is for all of the pattern, and 1 is for the first explicit capturing subpattern in the regular expression, and so forth. When using named captured subpatterns (see below) in the regular expression, one can use <c>atom()</c>s or <c>string()</c>s to specify the subpatterns to be returned. For example, consider the regular expression:</p>
- <code> ".*(abcd).*"</code>
- <p>matched against the string "ABCabcdABC", capturing only the "abcd" part (the first explicit subpattern):</p>
- <code> re:run("ABCabcdABC",".*(abcd).*",[{capture,[1]}]).</code>
- <p>The call will yield the following result:</p>
- <code> {match,[{3,4}]}</code>
- <p>as the first explicitly captured subpattern is "(abcd)", matching "abcd" in the subject, at (zero-based) position 3, of length 4.</p>
- <p>Now consider the same regular expression, but with the subpattern explicitly named 'FOO':</p>
- <code> ".*(?&lt;FOO&gt;abcd).*"</code>
- <p>With this expression, we could still give the index of the subpattern with the following call:</p>
- <code> re:run("ABCabcdABC",".*(?&lt;FOO&gt;abcd).*",[{capture,[1]}]).</code>
- <p>giving the same result as before. But, since the subpattern is named, we can also specify its name in the value list:</p>
- <code> re:run("ABCabcdABC",".*(?&lt;FOO&gt;abcd).*",[{capture,['FOO']}]).</code>
- <p>which would yield the same result as the earlier examples, namely:</p>
- <code> {match,[{3,4}]}</code>
-
- <p>The values list might specify indexes or names not present in
- the regular expression, in which case the return values vary
- depending on the type. If the type is <c>index</c>, the tuple
- <c>{-1,0}</c> is returned for values having no corresponding
- subpattern in the regexp, but for the other types
- (<c>binary</c> and <c>list</c>), the values are the empty binary
- or list respectively.</p>
-
- </item>
- <tag><c><anno>Type</anno></c></tag>
- <item><p>Optionally specifies how captured substrings are to be returned. If omitted, the default of <c>index</c> is used. The <c><anno>Type</anno></c> can be one of the following:</p>
- <taglist>
- <tag><c>index</c></tag>
- <item>Return captured substrings as pairs of byte indexes into the subject string and length of the matching string in the subject (as if the subject string was flattened with <c>iolist_to_binary/1</c> or <c>unicode:characters_to_binary/2</c> prior to matching). Note that the <c>unicode</c> option results in <em>byte-oriented</em> indexes in a (possibly virtual) <em>UTF-8 encoded</em> binary. A byte index tuple <c>{0,2}</c> might therefore represent one or two characters when <c>unicode</c> is in effect. This might seem counter-intuitive, but has been deemed the most effective and useful way to way to do it. To return lists instead might result in simpler code if that is desired. This return type is the default.</item>
- <tag><c>list</c></tag>
- <item>Return matching substrings as lists of characters (Erlang <c>string()</c>s). It the <c>unicode</c> option is used in combination with the \C sequence in the regular expression, a captured subpattern can contain bytes that are not valid UTF-8 (\C matches bytes regardless of character encoding). In that case the <c>list</c> capturing may result in the same types of tuples that <c>unicode:characters_to_list/2</c> can return, namely three-tuples with the tag <c>incomplete</c> or <c>error</c>, the successfully converted characters and the invalid UTF-8 tail of the conversion as a binary. The best strategy is to avoid using the \C sequence when capturing lists.</item>
- <tag><c>binary</c></tag>
- <item>Return matching substrings as binaries. If the <c>unicode</c> option is used, these binaries are in UTF-8. If the \C sequence is used together with <c>unicode</c> the binaries may be invalid UTF-8.</item>
+ <p>This option and option <c>match_limit</c> are only to be used in
+ rare cases. Understanding of the PCRE library internals is
+ recommended before tampering with these limits.</p>
+ </item>
+ <tag><c>{offset, integer() >= 0}</c></tag>
+ <item>
+ <p>Start matching at the offset (position) specified in the
+ subject string. The offset is zero-based, so that the default is
+ <c>{offset,0}</c> (all of the subject string).</p>
+ </item>
+ <tag><c>{newline, <anno>NLSpec</anno>}</c></tag>
+ <item>
+ <p>Overrides the default definition of a newline in the subject
+ string, which is LF (ASCII 10) in Erlang.</p>
+ <taglist>
+ <tag><c>cr</c></tag>
+ <item>
+ <p>Newline is indicated by a single character CR (ASCII 13).</p>
+ </item>
+ <tag><c>lf</c></tag>
+ <item>
+ <p>Newline is indicated by a single character LF (ASCII 10),
+ the default.</p>
+ </item>
+ <tag><c>crlf</c></tag>
+ <item>
+ <p>Newline is indicated by the two-character CRLF (ASCII 13
+ followed by ASCII 10) sequence.</p>
+ </item>
+ <tag><c>anycrlf</c></tag>
+ <item>
+ <p>Any of the three preceding sequences is be recognized.</p>
+ </item>
+ <tag><c>any</c></tag>
+ <item>
+ <p>Any of the newline sequences above, and the Unicode
+ sequences VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL
+ (next line, U+0085), LS (line separator, U+2028), and PS
+ (paragraph separator, U+2029).</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>bsr_anycrlf</c></tag>
+ <item>
+ <p>Specifies specifically that \R is to match only the CR
+ LF, or CRLF sequences, not the Unicode-specific newline
+ characters. (Overrides the compilation option.)</p>
+ </item>
+ <tag><c>bsr_unicode</c></tag>
+ <item>
+ <p>Specifies specifically that \R is to match all the Unicode
+ newline characters (including CRLF, and so on, the default).
+ (Overrides the compilation option.)</p>
+ </item>
+ <tag><c>{capture, <anno>ValueSpec</anno>}</c>/<c>{capture,
+ <anno>ValueSpec</anno>, <anno>Type</anno>}</c></tag>
+ <item>
+ <p>Specifies which captured substrings are returned and in what
+ format. By default, <c>run/3</c> captures all of the matching
+ part of the substring and all capturing subpatterns (all of the
+ pattern is automatically captured). The default return type is
+ (zero-based) indexes of the captured parts of the string,
+ specified as <c>{Offset,Length}</c> pairs (the <c>index</c>
+ <c><anno>Type</anno></c> of capturing).</p>
+ <p>As an example of the default behavior, the following call
+ returns, as first and only captured string, the matching part of
+ the subject ("abcd" in the middle) as an index pair <c>{3,4}</c>,
+ where character positions are zero-based, just as in offsets:</p>
+ <code>
+re:run("ABCabcdABC","abcd",[]).</code>
+ <p>The return value of this call is:</p>
+ <code>
+{match,[{3,4}]}</code>
+ <p>Another (and quite common) case is where the regular expression
+ matches all of the subject:</p>
+ <code>
+re:run("ABCabcdABC",".*abcd.*",[]).</code>
+ <p>Here the return value correspondingly points out all of the
+ string, beginning at index 0, and it is 10 characters long:</p>
+ <code>
+{match,[{0,10}]}</code>
+ <p>If the regular expression contains capturing subpatterns, like
+ in:</p>
+ <code>
+re:run("ABCabcdABC",".*(abcd).*",[]).</code>
+ <p>all of the matched subject is captured, as well as the captured
+ substrings:</p>
+ <code>
+{match,[{0,10},{3,4}]}</code>
+ <p>The complete matching pattern always gives the first return
+ value in the list and the remaining subpatterns are added in the
+ order they occurred in the regular expression.</p>
+ <p>The capture tuple is built up as follows:</p>
+ <taglist>
+ <tag><c><anno>ValueSpec</anno></c></tag>
+ <item>
+ <p>Specifies which captured (sub)patterns are to be returned.
+ <c><anno>ValueSpec</anno></c> can either be an atom describing
+ a predefined set of return values, or a list containing the
+ indexes or the names of specific subpatterns to return.</p>
+ <p>The following are the predefined sets of subpatterns:</p>
+ <taglist>
+ <tag><c>all</c></tag>
+ <item>
+ <p>All captured subpatterns including the complete matching
+ string. This is the default.</p>
+ </item>
+ <tag><c>all_names</c></tag>
+ <item>
+ <p>All <em>named</em> subpatterns in the regular expression,
+ as if a <c>list()</c> of all the names <em>in
+ alphabetical order</em> was specified. The list of all
+ names can also be retrieved with
+ <seealso marker="#inspect/2">
+ <c>inspect/2</c></seealso>.</p>
+ </item>
+ <tag><c>first</c></tag>
+ <item>
+ <p>Only the first captured subpattern, which is always the
+ complete matching part of the subject. All explicitly
+ captured subpatterns are discarded.</p>
+ </item>
+ <tag><c>all_but_first</c></tag>
+ <item>
+ <p>All but the first matching subpattern, that is, all
+ explicitly captured subpatterns, but not the complete
+ matching part of the subject string. This is useful if
+ the regular expression as a whole matches a large part of
+ the subject, but the part you are interested in is in an
+ explicitly captured subpattern. If the return type is
+ <c>list</c> or <c>binary</c>, not returning subpatterns
+ you are not interested in is a good way to optimize.</p>
+ </item>
+ <tag><c>none</c></tag>
+ <item>
+ <p>Returns no matching subpatterns, gives the single
+ atom <c>match</c> as the return value of the function
+ when matching successfully instead of the <c>{match,
+ list()}</c> return. Specifying an empty list gives the
+ same behavior.</p>
+ </item>
+ </taglist>
+ <p>The value list is a list of indexes for the subpatterns to
+ return, where index 0 is for all of the pattern, and 1 is for
+ the first explicit capturing subpattern in the regular
+ expression, and so on. When using named captured subpatterns
+ (see below) in the regular expression, one can use
+ <c>atom()</c>s or <c>string()</c>s to specify the subpatterns
+ to be returned. For example, consider the regular
+ expression:</p>
+ <code>
+".*(abcd).*"</code>
+ <p>matched against string "ABCabcdABC", capturing only the
+ "abcd" part (the first explicit subpattern):</p>
+ <code>
+re:run("ABCabcdABC",".*(abcd).*",[{capture,[1]}]).</code>
+ <p>The call gives the following result, as the first explicitly
+ captured subpattern is "(abcd)", matching "abcd" in the
+ subject, at (zero-based) position 3, of length 4:</p>
+ <code>
+{match,[{3,4}]}</code>
+ <p>Consider the same regular expression, but with the subpattern
+ explicitly named 'FOO':</p>
+ <code>
+".*(?&lt;FOO&gt;abcd).*"</code>
+ <p>With this expression, we could still give the index of the
+ subpattern with the following call:</p>
+ <code>
+re:run("ABCabcdABC",".*(?&lt;FOO&gt;abcd).*",[{capture,[1]}]).</code>
+ <p>giving the same result as before. But, as the subpattern is
+ named, we can also specify its name in the value list:</p>
+ <code>
+re:run("ABCabcdABC",".*(?&lt;FOO&gt;abcd).*",[{capture,['FOO']}]).</code>
+ <p>This would give the same result as the earlier examples,
+ namely:</p>
+ <code>
+{match,[{3,4}]}</code>
+ <p>The values list can specify indexes or names not present in
+ the regular expression, in which case the return values vary
+ depending on the type. If the type is <c>index</c>, the tuple
+ <c>{-1,0}</c> is returned for values with no corresponding
+ subpattern in the regular expression, but for the other types
+ (<c>binary</c> and <c>list</c>), the values are the empty
+ binary or list, respectively.</p>
+ </item>
+ <tag><c><anno>Type</anno></c></tag>
+ <item>
+ <p>Optionally specifies how captured substrings are to be
+ returned. If omitted, the default of <c>index</c> is used.</p>
+ <p><c><anno>Type</anno></c> can be one of the following:</p>
+ <taglist>
+ <tag><c>index</c></tag>
+ <item>
+ <p>Returns captured substrings as pairs of byte indexes
+ into the subject string and length of the matching string
+ in the subject (as if the subject string was flattened
+ with <seealso marker="erts:erlang#iolist_to_binary/1">
+ <c>erlang:iolist_to_binary/1</c></seealso> or
+ <seealso marker="unicode#characters_to_binary/2">
+ <c>unicode:characters_to_binary/2</c></seealso> before
+ matching). Notice that option <c>unicode</c> results in
+ <em>byte-oriented</em> indexes in a (possibly virtual)
+ <em>UTF-8 encoded</em> binary. A byte index tuple
+ <c>{0,2}</c> can therefore represent one or two
+ characters when <c>unicode</c> is in effect. This can seem
+ counter-intuitive, but has been deemed the most effective
+ and useful way to do it. To return lists instead can
+ result in simpler code if that is desired. This return
+ type is the default.</p>
+ </item>
+ <tag><c>list</c></tag>
+ <item>
+ <p>Returns matching substrings as lists of characters
+ (Erlang <c>string()</c>s). It option <c>unicode</c> is
+ used in combination with the \C sequence in the
+ regular expression, a captured subpattern can contain
+ bytes that are not valid UTF-8 (\C matches bytes
+ regardless of character encoding). In that case the
+ <c>list</c> capturing can result in the same types of
+ tuples that
+ <seealso marker="unicode#characters_to_list/2">
+ <c>unicode:characters_to_list/2</c></seealso> can return,
+ namely three-tuples with tag <c>incomplete</c> or
+ <c>error</c>, the successfully converted characters and
+ the invalid UTF-8 tail of the conversion as a binary. The
+ best strategy is to avoid using the \C sequence
+ when capturing lists.</p>
+ </item>
+ <tag><c>binary</c></tag>
+ <item>
+ <p>Returns matching substrings as binaries. If option
+ <c>unicode</c> is used, these binaries are in UTF-8. If
+ the \C sequence is used together with
+ <c>unicode</c>, the binaries can be invalid UTF-8.</p>
+ </item>
+ </taglist>
+ </item>
+ </taglist>
+ <p>In general, subpatterns that were not assigned a value in the
+ match are returned as the tuple <c>{-1,0}</c> when <c>type</c> is
+ <c>index</c>. Unassigned subpatterns are returned as the empty
+ binary or list, respectively, for other return types. Consider
+ the following regular expression:</p>
+ <code>
+".*((?&lt;FOO&gt;abdd)|a(..d)).*"</code>
+ <p>There are three explicitly capturing subpatterns, where the
+ opening parenthesis position determines the order in the result,
+ hence <c>((?&lt;FOO&gt;abdd)|a(..d))</c> is subpattern index 1,
+ <c>(?&lt;FOO&gt;abdd)</c> is subpattern index 2, and <c>(..d)</c>
+ is subpattern index 3. When matched against the following
+ string:</p>
+ <code>
+"ABCabcdABC"</code>
+ <p>the subpattern at index 2 does not match, as "abdd" is not
+ present in the string, but the complete pattern matches (because
+ of the alternative <c>a(..d)</c>). The subpattern at index 2 is
+ therefore unassigned and the default return value is:</p>
+ <code>
+{match,[{0,10},{3,4},{-1,0},{4,3}]}</code>
+ <p>Setting the capture <c><anno>Type</anno></c> to <c>binary</c>
+ gives:</p>
+ <code>
+{match,[&lt;&lt;"ABCabcdABC"&gt;&gt;,&lt;&lt;"abcd"&gt;&gt;,&lt;&lt;&gt;&gt;,&lt;&lt;"bcd"&gt;&gt;]}</code>
+ <p>Here the empty binary (<c>&lt;&lt;&gt;&gt;</c>) represents the
+ unassigned subpattern. In the <c>binary</c> case, some information
+ about the matching is therefore lost, as
+ <c>&lt;&lt;&gt;&gt;</c> can
+ also be an empty string captured.</p>
+ <p>If differentiation between empty matches and non-existing
+ subpatterns is necessary, use the <c>type</c> <c>index</c> and do
+ the conversion to the final type in Erlang code.</p>
+ <p>When option <c>global</c> is speciified, the <c>capture</c>
+ specification affects each match separately, so that:</p>
+ <code>
+re:run("cacb","c(a|b)",[global,{capture,[1],list}]).</code>
+ <p>gives</p>
+ <code>
+{match,[["a"],["b"]]}</code>
+ </item>
</taglist>
- </item>
- </taglist>
- <p>In general, subpatterns that were not assigned a value in the match are returned as the tuple <c>{-1,0}</c> when <c>type</c> is <c>index</c>. Unassigned subpatterns are returned as the empty binary or list, respectively, for other return types. Consider the regular expression:</p>
-<code> ".*((?&lt;FOO&gt;abdd)|a(..d)).*"</code>
- <p>There are three explicitly capturing subpatterns, where the opening parenthesis position determines the order in the result, hence <c>((?&lt;FOO&gt;abdd)|a(..d))</c> is subpattern index 1, <c>(?&lt;FOO&gt;abdd)</c> is subpattern index 2 and <c>(..d)</c> is subpattern index 3. When matched against the following string:</p>
-<code> "ABCabcdABC"</code>
- <p>the subpattern at index 2 won't match, as "abdd" is not present in the string, but the complete pattern matches (due to the alternative <c>a(..d)</c>. The subpattern at index 2 is therefore unassigned and the default return value will be:</p>
-<code> {match,[{0,10},{3,4},{-1,0},{4,3}]}</code>
- <p>Setting the capture <c><anno>Type</anno></c> to <c>binary</c> would give the following:</p>
-<code> {match,[&lt;&lt;"ABCabcdABC"&gt;&gt;,&lt;&lt;"abcd"&gt;&gt;,&lt;&lt;&gt;&gt;,&lt;&lt;"bcd"&gt;&gt;]}</code>
- <p>where the empty binary (<c>&lt;&lt;&gt;&gt;</c>) represents the unassigned subpattern. In the <c>binary</c> case, some information about the matching is therefore lost, the <c>&lt;&lt;&gt;&gt;</c> might just as well be an empty string captured.</p>
- <p>If differentiation between empty matches and non existing subpatterns is necessary, use the <c>type</c> <c>index</c>
- and do the conversion to the final type in Erlang code.</p>
-
- <p>When the option <c>global</c> is given, the <c>capture</c>
- specification affects each match separately, so that:</p>
-
- <code> re:run("cacb","c(a|b)",[global,{capture,[1],list}]).</code>
-
- <p>gives the result:</p>
-
- <code> {match,[["a"],["b"]]}</code>
-
- </item>
- </taglist>
- <p>The options solely affecting the compilation step are described in the <c>re:compile/2</c> function.</p>
- </desc>
- </func>
- <func>
- <name name="replace" arity="3"/>
- <fsummary>Match a subject against regular expression and replace matching elements with Replacement</fsummary>
- <desc>
- <p>The same as <c>replace(<anno>Subject</anno>,<anno>RE</anno>,<anno>Replacement</anno>,[])</c>.</p>
- </desc>
- </func>
- <func>
- <name name="replace" arity="4"/>
- <fsummary>Match a subject against regular expression and replace matching elements with Replacement</fsummary>
- <desc>
- <p>Replaces the matched part of the <c><anno>Subject</anno></c> string with the contents of <c><anno>Replacement</anno></c>.</p>
- <p>The permissible options are the same as for <c>re:run/3</c>, except that the <c>capture</c> option is not allowed.
- Instead a <c>{return, <anno>ReturnType</anno>}</c> is present. The default return type is <c>iodata</c>, constructed in a
- way to minimize copying. The <c>iodata</c> result can be used directly in many I/O-operations. If a flat <c>list()</c> is
- desired, specify <c>{return, list}</c> and if a binary is preferred, specify <c>{return, binary}</c>.</p>
-
- <p>As in the <c>re:run/3</c> function, an <c>mp()</c> compiled
- with the <c>unicode</c> option requires the <c><anno>Subject</anno></c> to be
- a Unicode <c>charlist()</c>. If compilation is done implicitly
- and the <c>unicode</c> compilation option is given to this
- function, both the regular expression and the <c><anno>Subject</anno></c>
- should be given as valid Unicode <c>charlist()</c>s.</p>
-
- <p>The replacement string can contain the special character
- <c>&amp;</c>, which inserts the whole matching expression in the
- result, and the special sequence <c>\</c>N (where N is an integer &gt; 0),
- <c>\g</c>N or <c>\g{</c>N<c>}</c> resulting in the subexpression number N will be
- inserted in the result. If no subexpression with that number is
- generated by the regular expression, nothing is inserted.</p>
- <p>To insert an <c>&amp;</c> or <c>\</c> in the result, precede it
- with a <c>\</c>. Note that Erlang already gives a special
- meaning to <c>\</c> in literal strings, so a single <c>\</c>
- has to be written as <c>"\\"</c> and therefore a double <c>\</c>
- as <c>"\\\\"</c>. Example:</p>
- <code> re:replace("abcd","c","[&amp;]",[{return,list}]).</code>
- <p>gives</p>
- <code> "ab[c]d"</code>
- <p>while</p>
- <code> re:replace("abcd","c","[\\&amp;]",[{return,list}]).</code>
- <p>gives</p>
- <code> "ab[&amp;]d"</code>
- <p>As with <c>re:run/3</c>, compilation errors raise the <c>badarg</c>
- exception, <c>re:compile/2</c> can be used to get more information
- about the error.</p>
+ <p>For a descriptions of options only affecting the compilation step,
+ see <seealso marker="#compile/2"><c>compile/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="split" arity="2"/>
- <fsummary>Split a string by tokens specified as a regular expression</fsummary>
+ <fsummary>Split a string by tokens specified as a regular expression.
+ </fsummary>
<desc>
- <p>The same as <c>split(<anno>Subject</anno>,<anno>RE</anno>,[])</c>.</p>
+ <p>Same as <c>split(<anno>Subject</anno>, <anno>RE</anno>, [])</c>.</p>
</desc>
</func>
<func>
<name name="split" arity="3"/>
<fsummary>Split a string by tokens specified as a regular expression</fsummary>
- <type_desc variable="CompileOpt">See <seealso marker="#compile_options">compile/2</seealso> above.</type_desc>
+ <type_desc variable="CompileOpt">See <seealso marker="#compile_options">
+ <c>compile/2</c></seealso>.</type_desc>
<desc>
- <p>This function splits the input into parts by finding tokens
- according to the regular expression supplied.</p>
-
- <p>The splitting is done basically by running a global regexp match and
- dividing the initial string wherever a match occurs. The matching part
- of the string is removed from the output.</p>
-
- <p>As in the <c>re:run/3</c> function, an <c>mp()</c> compiled
- with the <c>unicode</c> option requires the <c><anno>Subject</anno></c> to be
- a Unicode <c>charlist()</c>. If compilation is done implicitly
- and the <c>unicode</c> compilation option is given to this
- function, both the regular expression and the <c><anno>Subject</anno></c>
- should be given as valid Unicode <c>charlist()</c>s.</p>
-
- <p>The result is given as a list of &quot;strings&quot;, the
- preferred datatype given in the <c>return</c> option (default iodata).</p>
- <p>If subexpressions are given in the regular expression, the
- matching subexpressions are returned in the resulting list as
- well. An example:</p>
-
-<code> re:split("Erlang","[ln]",[{return,list}]).</code>
-
- <p>will yield the result:</p>
-
-<code> ["Er","a","g"]</code>
-
- <p>while</p>
-
-<code> re:split("Erlang","([ln])",[{return,list}]).</code>
-
- <p>will yield</p>
-
-<code> ["Er","l","a","n","g"]</code>
-
- <p>The text matching the subexpression (marked by the parentheses
- in the regexp) is
- inserted in the result list where it was found. In effect this means
- that concatenating the result of a split where the whole regexp is a
- single subexpression (as in the example above) will always result in
- the original string.</p>
-
- <p>As there is no matching subexpression for the last part in
- the example (the &quot;g&quot;), there is nothing inserted after
- that. To make the group of strings and the parts matching the
- subexpressions more obvious, one might use the <c>group</c>
- option, which groups together the part of the subject string with the
- parts matching the subexpressions when the string was split:</p>
-
-<code> re:split("Erlang","([ln])",[{return,list},group]).</code>
-
- <p>gives:</p>
-
-<code> [["Er","l"],["a","n"],["g"]]</code>
-
- <p>Here the regular expression matched first the &quot;l&quot;,
- causing &quot;Er&quot; to be the first part in the result. When
- the regular expression matched, the (only) subexpression was
- bound to the &quot;l&quot;, so the &quot;l&quot; is inserted
- in the group together with &quot;Er&quot;. The next match is of
- the &quot;n&quot;, making &quot;a&quot; the next part to be
- returned. Since the subexpression is bound to the substring
- &quot;n&quot; in this case, the &quot;n&quot; is inserted into
- this group. The last group consists of the rest of the string,
- as no more matches are found.</p>
-
-
- <p>By default, all parts of the string, including the empty
- strings, are returned from the function. For example:</p>
-
-<code> re:split("Erlang","[lg]",[{return,list}]).</code>
-
- <p>will return:</p>
-
-<code> ["Er","an",[]]</code>
-
- <p>since the matching of the &quot;g&quot; in the end of the string
- leaves an empty rest which is also returned. This behaviour
- differs from the default behaviour of the split function in
- Perl, where empty strings at the end are by default removed. To
- get the
- &quot;trimming&quot; default behavior of Perl, specify
- <c>trim</c> as an option:</p>
-
-<code> re:split("Erlang","[lg]",[{return,list},trim]).</code>
-
- <p>The result will be:</p>
-
-<code> ["Er","an"]</code>
-
- <p>The &quot;trim&quot; option in effect says; &quot;give me as
- many parts as possible except the empty ones&quot;, which might
- be useful in some circumstances. You can also specify how many
- parts you want, by specifying <c>{parts,</c>N<c>}</c>:</p>
-
-<code> re:split("Erlang","[lg]",[{return,list},{parts,2}]).</code>
-
- <p>This will give:</p>
-
-<code> ["Er","ang"]</code>
-
- <p>Note that the last part is &quot;ang&quot;, not
- &quot;an&quot;, as we only specified splitting into two parts,
- and the splitting stops when enough parts are given, which is
- why the result differs from that of <c>trim</c>.</p>
-
- <p>More than three parts are not possible with this indata, so</p>
-
-<code> re:split("Erlang","[lg]",[{return,list},{parts,4}]).</code>
-
- <p>will give the same result as the default, which is to be
- viewed as &quot;an infinite number of parts&quot;.</p>
-
- <p>Specifying <c>0</c> as the number of parts gives the same
- effect as the option <c>trim</c>. If subexpressions are
- captured, empty subexpression matches at the end are also
- stripped from the result if <c>trim</c> or <c>{parts,0}</c> is
- specified.</p>
+ <p>Splits the input into parts by finding tokens according to the
+ regular expression supplied. The splitting is basically done by
+ running a global regular expression match and dividing the initial
+ string wherever a match occurs. The matching part of the string is
+ removed from the output.</p>
+ <p>As in <seealso marker="#run/3"><c>run/3</c></seealso>, an <c>mp()</c>
+ compiled with option <c>unicode</c> requires
+ <c><anno>Subject</anno></c> to be a Unicode <c>charlist()</c>. If
+ compilation is done implicitly and the <c>unicode</c> compilation
+ option is specified to this function, both the regular expression and
+ <c><anno>Subject</anno></c> are to be specified as valid Unicode
+ <c>charlist()</c>s.</p>
+ <p>The result is given as a list of &quot;strings&quot;, the preferred
+ data type specified in option <c>return</c> (default
+ <c>iodata</c>).</p>
+ <p>If subexpressions are specified in the regular expression, the
+ matching subexpressions are returned in the resulting list as
+ well. For example:</p>
+ <code>
+re:split("Erlang","[ln]",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+["Er","a","g"]</code>
+ <p>while</p>
+ <code>
+re:split("Erlang","([ln])",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+["Er","l","a","n","g"]</code>
+ <p>The text matching the subexpression (marked by the parentheses in the
+ regular expression) is inserted in the result list where it was found.
+ This means that concatenating the result of a split where the whole
+ regular expression is a single subexpression (as in the last example)
+ always results in the original string.</p>
+ <p>As there is no matching subexpression for the last part in the
+ example (the &quot;g&quot;), nothing is inserted after that. To make
+ the group of strings and the parts matching the subexpressions more
+ obvious, one can use option <c>group</c>, which groups together the
+ part of the subject string with the parts matching the subexpressions
+ when the string was split:</p>
+ <code>
+re:split("Erlang","([ln])",[{return,list},group]).</code>
+ <p>gives</p>
+ <code>
+[["Er","l"],["a","n"],["g"]]</code>
+ <p>Here the regular expression first matched the &quot;l&quot;,
+ causing &quot;Er&quot; to be the first part in the result. When
+ the regular expression matched, the (only) subexpression was
+ bound to the &quot;l&quot;, so the &quot;l&quot; is inserted
+ in the group together with &quot;Er&quot;. The next match is of
+ the &quot;n&quot;, making &quot;a&quot; the next part to be
+ returned. As the subexpression is bound to substring
+ &quot;n&quot; in this case, the &quot;n&quot; is inserted into
+ this group. The last group consists of the remaining string,
+ as no more matches are found.</p>
+ <p>By default, all parts of the string, including the empty strings,
+ are returned from the function, for example:</p>
+ <code>
+re:split("Erlang","[lg]",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+["Er","an",[]]</code>
+ <p>as the matching of the &quot;g&quot; in the end of the string
+ leaves an empty rest, which is also returned. This behavior
+ differs from the default behavior of the split function in
+ Perl, where empty strings at the end are by default removed. To
+ get the &quot;trimming&quot; default behavior of Perl, specify
+ <c>trim</c> as an option:</p>
+ <code>
+re:split("Erlang","[lg]",[{return,list},trim]).</code>
+ <p>gives</p>
+ <code>
+["Er","an"]</code>
+ <p>The &quot;trim&quot; option says; &quot;give me as many parts as
+ possible except the empty ones&quot;, which sometimes can be
+ useful. You can also specify how many parts you want, by specifying
+ <c>{parts,</c>N<c>}</c>:</p>
+ <code>
+re:split("Erlang","[lg]",[{return,list},{parts,2}]).</code>
+ <p>gives</p>
+ <code>
+["Er","ang"]</code>
+ <p>Notice that the last part is &quot;ang&quot;, not
+ &quot;an&quot;, as splitting was specified into two parts,
+ and the splitting stops when enough parts are given, which is
+ why the result differs from that of <c>trim</c>.</p>
+ <p>More than three parts are not possible with this indata, so</p>
+ <code>
+re:split("Erlang","[lg]",[{return,list},{parts,4}]).</code>
+ <p>gives the same result as the default, which is to be
+ viewed as &quot;an infinite number of parts&quot;.</p>
+ <p>Specifying <c>0</c> as the number of parts gives the same
+ effect as option <c>trim</c>. If subexpressions are
+ captured, empty subexpressions matched at the end are also
+ stripped from the result if <c>trim</c> or <c>{parts,0}</c> is
+ specified.</p>
+ <p>The <c>trim</c> behavior corresponds exactly to the Perl default.
+ <c>{parts,N}</c>, where N is a positive integer, corresponds
+ exactly to the Perl behavior with a positive numerical third
+ parameter. The default behavior of <c>split/3</c> corresponds
+ to the Perl behavior when a negative integer is specified as
+ the third parameter for the Perl routine.</p>
+ <p>Summary of options not previously described for function
+ <c>run/3</c>:</p>
+ <taglist>
+ <tag><c>{return,<anno>ReturnType</anno>}</c></tag>
+ <item>
+ <p>Specifies how the parts of the original string are presented in
+ the result list. Valid types:</p>
+ <taglist>
+ <tag><c>iodata</c></tag>
+ <item>
+ <p>The variant of <c>iodata()</c> that gives the least copying
+ of data with the current implementation (often a binary, but
+ do not depend on it).</p></item>
+ <tag><c>binary</c></tag>
+ <item>
+ <p>All parts returned as binaries.</p></item>
+ <tag><c>list</c></tag>
+ <item>
+ <p>All parts returned as lists of characters
+ (&quot;strings&quot;).</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>group</c></tag>
+ <item>
+ <p>Groups together the part of the string with
+ the parts of the string matching the subexpressions of the
+ regular expression.</p>
+ <p>The return value from the function is in this case a
+ <c>list()</c> of <c>list()</c>s. Each sublist begins with the
+ string picked out of the subject string, followed by the parts
+ matching each of the subexpressions in order of occurrence in the
+ regular expression.</p>
+ </item>
+ <tag><c>{parts,N}</c></tag>
+ <item>
+ <p>Specifies the number of parts the subject string is to be
+ split into.</p>
+ <p>The number of parts is to be a positive integer for a specific
+ maximum number of parts, and <c>infinity</c> for the
+ maximum number of parts possible (the default). Specifying
+ <c>{parts,0}</c> gives as many parts as possible disregarding
+ empty parts at the end, the same as specifying <c>trim</c>.</p>
+ </item>
+ <tag><c>trim</c></tag>
+ <item>
+ <p>Specifies that empty parts at the end of the result list are
+ to be disregarded. The same as specifying <c>{parts,0}</c>. This
+ corresponds to the default behavior of the <c>split</c>
+ built-in function in Perl.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+ </funcs>
- <p>If you are familiar with Perl, the <c>trim</c>
- behaviour corresponds exactly to the Perl default, the
- <c>{parts,N}</c> where N is a positive integer corresponds
- exactly to the Perl behaviour with a positive numerical third
- parameter and the default behaviour of <c>re:split/3</c> corresponds
- to that when the Perl routine is given a negative integer as the
- third parameter.</p>
+ <section>
+ <marker id="regexp_syntax"></marker>
+ <title>Perl-Like Regular Expression Syntax</title>
+ <p>The following sections contain reference material for the regular
+ expressions used by this module. The information is based on the PCRE
+ documentation, with changes where this module behaves differently to
+ the PCRE library.</p>
+ </section>
- <p>Summary of options not previously described for the <c>re:run/3</c> function:</p>
- <taglist>
- <tag>{return,<anno>ReturnType</anno>}</tag>
- <item><p>Specifies how the parts of the original string are presented in the result list. The possible types are:</p>
- <taglist>
- <tag>iodata</tag>
- <item>The variant of <c>iodata()</c> that gives the least copying of data with the current implementation (often a binary, but don't depend on it).</item>
- <tag>binary</tag>
- <item>All parts returned as binaries.</item>
- <tag>list</tag>
- <item>All parts returned as lists of characters (&quot;strings&quot;).</item>
- </taglist>
+ <section>
+ <marker id="regexp_syntax_details"></marker>
+ <title>PCRE Regular Expression Details</title>
+ <p>The syntax and semantics of the regular expressions supported by PCRE are
+ described in detail in the following sections. Perl's regular expressions
+ are described in its own documentation, and regular expressions in general
+ are covered in many books, some with copious examples.
+ Jeffrey Friedl's "Mastering Regular Expressions", published by O'Reilly,
+ covers regular expressions in great detail. This description of the PCRE
+ regular expressions is intended as reference material.</p>
+
+ <p>The reference material is divided into the following sections:</p>
+
+ <list type="bulleted">
+ <item><seealso marker="#sect1">Special Start-of-Pattern Items</seealso>
</item>
- <tag>group</tag>
- <item>
-
- <p>Groups together the part of the string with
- the parts of the string matching the subexpressions of the
- regexp.</p>
- <p>The return value from the function will in this case be a
- <c>list()</c> of <c>list()</c>s. Each sublist begins with the
- string picked out of the subject string, followed by the parts
- matching each of the subexpressions in order of occurrence in the
- regular expression.</p>
-
+ <item><seealso marker="#sect2">Characters and Metacharacters</seealso>
</item>
- <tag>{parts,N}</tag>
- <item>
-
- <p>Specifies the number of parts the subject string is to be
- split into.</p>
-
- <p>The number of parts should be a positive integer for a specific maximum on the
- number of parts and <c>infinity</c> for the maximum number of
- parts possible (the default). Specifying <c>{parts,0}</c> gives as many parts as
- possible disregarding empty parts at the end, the same as
- specifying <c>trim</c></p>
+ <item><seealso marker="#sect3">Backslash</seealso></item>
+ <item><seealso marker="#sect4">Circumflex and Dollar</seealso></item>
+ <item><seealso marker="#sect5">Full Stop (Period, Dot) and \N</seealso>
</item>
- <tag>trim</tag>
- <item>
-
- <p>Specifies that empty parts at the end of the result list are
- to be disregarded. The same as specifying <c>{parts,0}</c>. This
- corresponds to the default behaviour of the <c>split</c>
- built in function in Perl.</p>
+ <item><seealso marker="#sect6">Matching a Single Data Unit</seealso>
+ </item>
+ <item><seealso marker="#sect7">Square Brackets and Character
+ Classes</seealso></item>
+ <item><seealso marker="#sect8">Posix Character Classes</seealso></item>
+ <item><seealso marker="#sect9">Vertical Bar</seealso></item>
+ <item><seealso marker="#sect10">Internal Option Setting</seealso></item>
+ <item><seealso marker="#sect11">Subpatterns</seealso></item>
+ <item><seealso marker="#sect12">Duplicate Subpattern Numbers</seealso>
+ </item>
+ <item><seealso marker="#sect13">Named Subpatterns</seealso></item>
+ <item><seealso marker="#sect14">Repetition</seealso></item>
+ <item><seealso marker="#sect15">Atomic Grouping and Possessive
+ Quantifiers</seealso></item>
+ <item><seealso marker="#sect16">Back References</seealso></item>
+ <item><seealso marker="#sect17">Assertions</seealso></item>
+ <item><seealso marker="#sect18">Conditional Subpatterns</seealso></item>
+ <item><seealso marker="#sect19">Comments</seealso></item>
+ <item><seealso marker="#sect20">Recursive Patterns</seealso></item>
+ <item><seealso marker="#sect21">Subpatterns as Subroutines</seealso>
</item>
- </taglist>
+ <item><seealso marker="#sect22">Oniguruma Subroutine Syntax</seealso>
+ </item>
+ <item><seealso marker="#sect23">Backtracking Control</seealso></item>
+ </list>
+ </section>
- </desc>
- </func>
- </funcs>
-
<section>
- <title>PERL LIKE REGULAR EXPRESSIONS SYNTAX</title>
- <p><marker id="regexp_syntax"></marker>
- The following sections contain reference material for the
- regular expressions used by this module. The regular expression
- reference is based on the PCRE documentation, with changes in
- cases where the re module behaves differently to the PCRE library.</p>
+ <marker id="sect1"></marker>
+ <title>Special Start-of-Pattern Items</title>
+ <p>Some options that can be passed to <seealso marker="#compile/2">
+ <c>compile/2</c></seealso> can also be set by special items at the start
+ of a pattern. These are not Perl-compatible, but are provided to make
+ these options accessible to pattern writers who are not able to change
+ the program that processes the pattern. Any number of these items can
+ appear, but they must all be together right at the start of the
+ pattern string, and the letters must be in upper case.</p>
+
+ <p><em>UTF Support</em></p>
+
+ <p>Unicode support is basically UTF-8 based. To use Unicode characters, you
+ either call <seealso marker="#compile/2"><c>compile/2</c></seealso> or
+ <seealso marker="#run/3"><c>run/3</c></seealso> with option
+ <c>unicode</c>, or the pattern must start with one of these special
+ sequences:</p>
+
+ <code>
+(*UTF8)
+(*UTF)</code>
+
+ <p>Both options give the same effect, the input string is interpreted as
+ UTF-8. Notice that with these instructions, the automatic conversion of
+ lists to UTF-8 is not performed by the <c>re</c> functions. Therefore,
+ using these sequences is not recommended.
+ Add option <c>unicode</c> when running
+ <seealso marker="#compile/2"><c>compile/2</c></seealso> instead.</p>
+
+ <p>Some applications that allow their users to supply patterns can wish to
+ restrict them to non-UTF data for security reasons. If option
+ <c>never_utf</c> is set at compile time, (*UTF), and so on, are not
+ allowed, and their appearance causes an error.</p>
+
+ <p><em>Unicode Property Support</em></p>
+
+ <p>The following is another special sequence that can appear at the start of
+ a pattern:</p>
+
+ <code>
+(*UCP)</code>
+
+ <p>This has the same effect as setting option <c>ucp</c>: it causes
+ sequences such as \d and \w to use Unicode properties to
+ determine character types, instead of recognizing only characters with
+ codes &lt; 256 through a lookup table.</p>
+
+ <p><em>Disabling Startup Optimizations</em></p>
+
+ <p>If a pattern starts with <c>(*NO_START_OPT)</c>,
+ it has the same effect as
+ setting option <c>no_start_optimize</c> at compile time.</p>
+
+ <p><em>Newline Conventions</em></p>
+ <marker id="newline_conventions"></marker>
+
+ <p>PCRE supports five conventions for indicating line breaks in strings: a
+ single CR (carriage return) character, a single LF (line feed) character,
+ the two-character sequence CRLF, any of the three preceding, and any
+ Unicode newline sequence.</p>
+
+ <p>A newline convention can also be specified by starting a pattern string
+ with one of the following five sequences:</p>
+
+ <taglist>
+ <tag>(*CR)</tag><item>Carriage return</item>
+ <tag>(*LF)</tag><item>Line feed</item>
+ <tag>(*CRLF)</tag><item>>Carriage return followed by
+ line feed</item>
+ <tag>(*ANYCRLF)</tag><item>Any of the three above</item>
+ <tag>(*ANY)</tag><item>All Unicode newline sequences</item>
+ </taglist>
+
+ <p>These override the default and the options specified to
+ <seealso marker="#compile/2"><c>compile/2</c></seealso>. For example, the
+ following pattern changes the convention to CR:</p>
+
+ <code>
+(*CR)a.b</code>
+
+ <p>This pattern matches <c>a\nb</c>, as LF is no longer a newline.
+ If more than one of them is present, the last one is used.</p>
+
+ <p>The newline convention affects where the circumflex and dollar assertions
+ are true. It also affects the interpretation of the dot metacharacter when
+ <c>dotall</c> is not set, and the behavior of \N. However, it does not
+ affect what the \R escape sequence matches. By default, this is any
+ Unicode newline sequence, for Perl compatibility. However, this can be
+ changed; see the description of \R in section
+ <seealso marker="#newline_sequences">Newline Sequences</seealso>. A change
+ of the \R setting can be combined with a change of the newline
+ convention.</p>
+
+ <p><em>Setting Match and Recursion Limits</em></p>
+
+ <p>The caller of <seealso marker="#run/3"><c>run/3</c></seealso> can set a
+ limit on the number of times the internal match() function is called and
+ on the maximum depth of recursive calls. These facilities are provided to
+ catch runaway matches that are provoked by patterns with huge matching
+ trees (a typical example is a pattern with nested unlimited repeats) and
+ to avoid running out of system stack by too much recursion. When one of
+ these limits is reached, <c>pcre_exec()</c> gives an error return. The
+ limits can also be set by items at the start of the pattern of the
+ following forms:</p>
+
+ <code>
+(*LIMIT_MATCH=d)
+(*LIMIT_RECURSION=d)</code>
+
+ <p>Here d is any number of decimal digits. However, the value of the setting
+ must be less than the value set by the caller of <c>run/3</c> for it to
+ have any effect. That is, the pattern writer can lower the limit set by
+ the programmer, but not raise it. If there is more than one setting of one
+ of these limits, the lower value is used.</p>
+
+ <p>The default value for both the limits is 10,000,000 in the Erlang
+ VM. Notice that the recursion limit does not affect the stack depth of the
+ VM, as PCRE for Erlang is compiled in such a way that the match function
+ never does recursion on the C stack.</p>
</section>
-<section><title>PCRE regular expression details</title>
-
-<p>The syntax and semantics of the regular expressions that are supported by PCRE
-are described in detail below. Perl's regular expressions are described in its own documentation, and
-regular expressions in general are covered in a number of books, some of which
-have copious examples. Jeffrey Friedl's "Mastering Regular Expressions",
-published by O'Reilly, covers regular expressions in great detail. This
-description of PCRE's regular expressions is intended as reference material.</p>
-<p>The reference material is divided into the following sections:</p>
-<list>
-<item><seealso marker="#sect1">Special start-of-pattern items</seealso></item>
-<item><seealso marker="#sect2">Characters and metacharacters</seealso></item>
-<item><seealso marker="#sect3">Backslash</seealso></item>
-<item><seealso marker="#sect4">Circumflex and dollar</seealso></item>
-<item><seealso marker="#sect5">Full stop (period, dot) and \N</seealso></item>
-<item><seealso marker="#sect6">Matching a single data unit</seealso></item>
-<item><seealso marker="#sect7">Square brackets and character classes</seealso></item>
-<item><seealso marker="#sect8">POSIX character classes</seealso></item>
-<item><seealso marker="#sect9">Vertical bar</seealso></item>
-<item><seealso marker="#sect10">Internal option setting</seealso></item>
-<item><seealso marker="#sect11">Subpatterns</seealso></item>
-<item><seealso marker="#sect12">Duplicate subpattern numbers</seealso></item>
-<item><seealso marker="#sect13">Named subpatterns</seealso></item>
-<item><seealso marker="#sect14">Repetition</seealso></item>
-<item><seealso marker="#sect15">Atomic grouping and possessive quantifiers</seealso></item>
-<item><seealso marker="#sect16">Back references</seealso></item>
-<item><seealso marker="#sect17">Assertions</seealso></item>
-<item><seealso marker="#sect18">Conditional subpatterns</seealso></item>
-<item><seealso marker="#sect19">Comments</seealso></item>
-<item><seealso marker="#sect20">Recursive patterns</seealso></item>
-<item><seealso marker="#sect21">Subpatterns as subroutines</seealso></item>
-<item><seealso marker="#sect22">Oniguruma subroutine syntax</seealso></item>
-<!-- XXX C Interface
-<item><seealso marker="#sect22">Callouts</seealso></item>
--->
-<item><seealso marker="#sect23">Backtracking control</seealso></item>
-</list>
-
-</section>
-
-
-<section><marker id="sect1"></marker><title>Special start-of-pattern items</title>
-
-<p>A number of options that can be passed to <c>re:compile/2</c> can also be set
-by special items at the start of a pattern. These are not Perl-compatible, but
-are provided to make these options accessible to pattern writers who are not
-able to change the program that processes the pattern. Any number of these
-items may appear, but they must all be together right at the start of the
-pattern string, and the letters must be in upper case.</p>
-
-<p><em>UTF support</em></p>
-<p>
-Unicode support is basically UTF-8 based. To use Unicode characters, you either
-call <c>re:compile/2</c>/<c>re:run/3</c> with the <c>unicode</c> option, or the
- pattern must start with one of these special sequences:</p>
-<quote>
-<p> (*UTF8)</p>
-<p> (*UTF)</p>
-</quote>
-
-<p>Both options give the same effect, the input string is interpreted
-as UTF-8. Note that with these instructions, the automatic conversion
-of lists to UTF-8 is not performed by the <c>re</c> functions, why
-using these options is not recommended. Add the <c>unicode</c> option
-when running <c>re:compile/2</c> instead.</p>
-
-<p>
-Some applications that allow their users to supply patterns may wish to
-restrict them to non-UTF data for security reasons. If the <c>never_utf</c>
-option is set at compile time, (*UTF) etc. are not allowed, and their
-appearance causes an error.
-</p>
-
-<p><em>Unicode property support</em></p>
-<p>Another special sequence that may appear at the start of a pattern is</p>
-<quote>
-<p> (*UCP)</p>
-</quote>
-<p>This has the same effect as setting the <c>ucp</c> option: it causes sequences
-such as \d and \w to use Unicode properties to determine character types,
-instead of recognizing only characters with codes less than 256 via a lookup
-table.
-</p>
-
-<p><em>Disabling start-up optimizations</em></p>
-<p>
-If a pattern starts with (*NO_START_OPT), it has the same effect as setting the
-<c>no_Start_optimize</c> option at compile time.</p>
-
-<p><em>Newline conventions</em></p>
-
-<p>PCRE supports
-five
-different conventions for indicating line breaks in
-strings: a single CR (carriage return) character, a single LF (linefeed)
-character, the two-character sequence CRLF
-, any of the three preceding, or any
-Unicode newline sequence.</p>
-
-<p>It is also possible to specify a newline convention by starting a pattern
-string with one of the following five sequences:</p>
-
-<taglist>
- <tag>(*CR)</tag> <item>carriage return</item>
- <tag>(*LF)</tag> <item>linefeed</item>
- <tag>(*CRLF)</tag> <item>carriage return, followed by linefeed</item>
- <tag>(*ANYCRLF)</tag> <item>any of the three above</item>
- <tag>(*ANY)</tag> <item>all Unicode newline sequences</item>
-</taglist>
-
-<p>These override the default and the options given to <c>re:compile/2</c>. For
-example, the pattern:</p>
-
-<quote>
-<p> (*CR)a.b</p>
-</quote>
-
-<p>changes the convention to CR. That pattern matches "a\nb" because LF is no
-longer a newline. If more than one of them is present, the last one
-is used.</p>
-
-<p>The newline convention affects where the circumflex and dollar assertions are
-true. It also affects the interpretation of the dot metacharacter when
-<c>dotall</c> is not set, and the behaviour of \N. However, it does not affect
-what the \R escape sequence matches. By default, this is any Unicode newline
-sequence, for Perl compatibility. However, this can be changed; see the
-description of \R in the section entitled
-
-<em>"Newline sequences"</em>
-
-below. A change of \R setting can be combined with a change of newline
-convention.</p>
-
-<p><em>Setting match and recursion limits</em></p>
-
-<p>The caller of <c>re:run/3</c> can set a limit on the number of times the internal match() function is called and on the maximum depth of recursive calls. These facilities are provided to catch runaway matches that are provoked by patterns with huge matching trees (a typical example is a pattern with nested unlimited repeats) and to avoid running out of system stack by too much recursion. When one of these limits is reached, pcre_exec() gives an error return. The limits can also be set by items at the start of the pattern of the form</p>
-<quote>
-<p> (*LIMIT_MATCH=d)</p>
-<p> (*LIMIT_RECURSION=d)</p>
-</quote>
-<p>where d is any number of decimal digits. However, the value of the setting must be less than the value set by the caller of <c>re:run/3</c> for it to have any effect. In other words, the pattern writer can lower the limit set by the programmer, but not raise it. If there is more than one setting of one of these limits, the lower value is used.</p>
-
-<p>The current default value for both the limits are 10000000 in the Erlang
-VM. Note that the recursion limit does not actually affect the stack
-depth of the VM, as PCRE for Erlang is compiled in such a way that the
-match function never does recursion on the "C-stack".</p>
-
-</section>
-
-<section><marker id="sect2"></marker><title>Characters and metacharacters</title>
-<!-- .rs -->
-
-<p>A regular expression is a pattern that is matched against a subject
-string from left to right. Most characters stand for themselves in a
-pattern, and match the corresponding characters in the subject. As a
-trivial example, the pattern</p>
-
-<quote>
-<p> The quick brown fox</p>
-</quote>
-
-<p>matches a portion of a subject string that is identical to
-itself. When caseless matching is specified (the <c>caseless</c>
-option), letters are matched independently of case.</p>
-
-<p>The power of regular expressions comes from the ability to include
-alternatives and repetitions in the pattern. These are encoded in the
-pattern by the use of <em>metacharacters</em>, which do not stand for
-themselves but instead are interpreted in some special way.</p>
-
-<p>There are two different sets of metacharacters: those that are recognized
-anywhere in the pattern except within square brackets, and those that are
-recognized within square brackets. Outside square brackets, the metacharacters
-are as follows:</p>
-
-<taglist>
- <tag>\</tag> <item>general escape character with several uses</item>
- <tag>^</tag> <item>assert start of string (or line, in multiline mode)</item>
- <tag>$</tag> <item>assert end of string (or line, in multiline mode)</item>
- <tag>.</tag> <item>match any character except newline (by default)</item>
- <tag>[</tag> <item>start character class definition</item>
- <tag>|</tag> <item>start of alternative branch</item>
- <tag>(</tag> <item>start subpattern</item>
- <tag>)</tag> <item>end subpattern</item>
- <tag>?</tag> <item>extends the meaning of (,
- also 0 or 1 quantifier,
- also quantifier minimizer</item>
- <tag>*</tag> <item>0 or more quantifier</item>
- <tag>+</tag> <item>1 or more quantifier,
- also "possessive quantifier"</item>
- <tag>{</tag> <item>start min/max quantifier</item>
-</taglist>
-
-<p>Part of a pattern that is in square brackets is called a "character class". In
-a character class the only metacharacters are:</p>
-
-<taglist>
- <tag>\</tag> <item>general escape character</item>
- <tag>^</tag> <item>negate the class, but only if the first character</item>
- <tag>-</tag> <item>indicates character range</item>
- <tag>[</tag> <item>POSIX character class (only if followed by POSIX
- syntax)</item>
- <tag>]</tag> <item>terminates the character class</item>
+ <section>
+ <marker id="sect2"></marker>
+ <title>Characters and Metacharacters</title>
+ <!-- .rs -->
+ <p>A regular expression is a pattern that is matched against a subject
+ string from left to right. Most characters stand for themselves in a
+ pattern and match the corresponding characters in the subject. As a
+ trivial example, the following pattern matches a portion of a subject
+ string that is identical to itself:</p>
+
+ <code>
+The quick brown fox</code>
+
+ <p>When caseless matching is specified (option <c>caseless</c>), letters
+ are matched independently of case.</p>
+
+ <p>The power of regular expressions comes from the ability to include
+ alternatives and repetitions in the pattern. These are encoded in the
+ pattern by the use of <em>metacharacters</em>, which do not stand for
+ themselves but instead are interpreted in some special way.</p>
+
+ <p>Two sets of metacharacters exist: those that are recognized anywhere in
+ the pattern except within square brackets, and those that are recognized
+ within square brackets. Outside square brackets, the metacharacters are
+ as follows:</p>
+
+ <taglist>
+ <tag>\</tag><item>General escape character with many uses</item>
+ <tag>^</tag><item>Assert start of string (or line, in multiline mode)
+ </item>
+ <tag>$</tag><item>Assert end of string (or line, in multiline mode)</item>
+ <tag>.</tag><item>Match any character except newline (by default)</item>
+ <tag>[</tag><item>Start character class definition</item>
+ <tag>|</tag><item>Start of alternative branch</item>
+ <tag>(</tag><item>Start subpattern</item>
+ <tag>)</tag><item>End subpattern</item>
+ <tag>?</tag><item>Extends the meaning of (, also 0 or 1 quantifier, also
+ quantifier minimizer</item>
+ <tag>*</tag><item>0 or more quantifiers</item>
+ <tag>+</tag><item>1 or more quantifier, also "possessive quantifier"
+ </item>
+ <tag>{</tag><item>Start min/max quantifier</item>
</taglist>
-<p>The following sections describe the use of each of the metacharacters.</p>
-
-
-</section>
-
-<section><marker id="sect3"></marker><title>Backslash</title>
+ <p>Part of a pattern within square brackets is called a "character class".
+ The following are the only metacharacters in a character class:</p>
+ <taglist>
+ <tag>\</tag><item>General escape character</item>
+ <tag>^</tag><item>Negate the class, but only if the first character</item>
+ <tag>-</tag><item>Indicates character range</item>
+ <tag>[</tag><item>Posix character class (only if followed by Posix syntax)
+ </item>
+ <tag>]</tag><item>Terminates the character class</item>
+ </taglist>
-<p>The backslash character has several uses. Firstly, if it is followed by a
-character that is not a number or a letter, it takes away any special meaning that character
-may have. This use of backslash as an escape character applies both inside and
-outside character classes.</p>
-
-<p>For example, if you want to match a * character, you write \* in the pattern.
-This escaping action applies whether or not the following character would
-otherwise be interpreted as a metacharacter, so it is always safe to precede a
-non-alphanumeric with backslash to specify that it stands for itself. In
-particular, if you want to match a backslash, you write \\.</p>
-
-<p>In <c>unicode</c> mode, only ASCII numbers and letters have any special meaning after a
-backslash. All other characters (in particular, those whose codepoints are
-greater than 127) are treated as literals.</p>
+ <p>The following sections describe the use of each metacharacter.</p>
+ </section>
-<p>If a pattern is compiled with the <c>extended</c> option, white space in the
-pattern (other than in a character class) and characters between a # outside
-a character class and the next newline are ignored. An escaping backslash can
-be used to include a white space or # character as part of the pattern.</p>
+ <section>
+ <marker id="sect3"></marker>
+ <title>Backslash</title>
+ <p>The backslash character has many uses. First, if it is followed by a
+ character that is not a number or a letter, it takes away any special
+ meaning that a character can have. This use of backslash as an escape
+ character applies both inside and outside character classes.</p>
+
+ <p>For example, if you want to match a * character, you write \* in the
+ pattern. This escaping action applies if the following character would
+ otherwise be interpreted as a metacharacter, so it is always safe to
+ precede a non-alphanumeric with backslash to specify that it stands for
+ itself. In particular, if you want to match a backslash, write \\.</p>
+
+ <p>In <c>unicode</c> mode, only ASCII numbers and letters have any special
+ meaning after a backslash. All other characters (in particular, those
+ whose code points are &gt; 127) are treated as literals.</p>
+
+ <p>If a pattern is compiled with option <c>extended</c>, whitespace in the
+ pattern (other than in a character class) and characters between a #
+ outside a character class and the next newline are ignored. An escaping
+ backslash can be used to include a whitespace or # character as part of
+ the pattern.</p>
+
+ <p>To remove the special meaning from a sequence of characters, put them
+ between \Q and \E. This is different from Perl in that $ and @ are
+ handled as literals in \Q...\E sequences in PCRE, while $ and @ cause
+ variable interpolation in Perl. Notice the following examples:</p>
-<p>If you want to remove the special meaning from a sequence of characters, you
-can do so by putting them between \Q and \E. This is different from Perl in
-that $ and @ are handled as literals in \Q...\E sequences in PCRE, whereas in
-Perl, $ and @ cause variable interpolation. Note the following examples:</p>
<code type="none">
- Pattern PCRE matches Perl matches
-
- \Qabc$xyz\E abc$xyz abc followed by the contents of $xyz
- \Qabc\$xyz\E abc\$xyz abc\$xyz
- \Qabc\E\$\Qxyz\E abc$xyz abc$xyz</code>
-
-
-<p>The \Q...\E sequence is recognized both inside and outside
-character classes. An isolated \E that is not preceded by \Q is
-ignored. If \Q is not followed by \E later in the pattern, the literal
-interpretation continues to the end of the pattern (that is, \E is
-assumed at the end). If the isolated \Q is inside a character class,
-this causes an error, because the character class is not
-terminated.</p>
-
-<p><em>Non-printing characters</em></p>
-
-<p>A second use of backslash provides a way of encoding non-printing characters
-in patterns in a visible manner. There is no restriction on the appearance of
-non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is often easier to use
-one of the following escape sequences than the binary character it represents:</p>
-
-<taglist>
- <tag>\a</tag> <item>alarm, that is, the BEL character (hex 07)</item>
- <tag>\cx</tag> <item>"control-x", where x is any ASCII character</item>
- <tag>\e </tag> <item>escape (hex 1B)</item>
- <tag>\f</tag> <item>form feed (hex 0C)</item>
- <tag>\n</tag> <item>linefeed (hex 0A)</item>
- <tag>\r</tag> <item>carriage return (hex 0D)</item>
- <tag>\t </tag> <item>tab (hex 09)</item>
- <tag>\ddd</tag> <item>character with octal code ddd, or back reference</item>
- <tag>\xhh </tag> <item>character with hex code hh</item>
- <tag>\x{hhh..}</tag> <item>character with hex code hhh..</item>
-</taglist>
-
-<p>The precise effect of \cx on ASCII characters is as follows: if x is a lower
-case letter, it is converted to upper case. Then bit 6 of the character (hex
-40) is inverted. Thus \cA to \cZ become hex 01 to hex 1A (A is 41, Z is 5A),
-but \c{ becomes hex 3B ({ is 7B), and \c; becomes hex 7B (; is 3B). If the
-data item (byte or 16-bit value) following \c has a value greater than 127, a
-compile-time error occurs. This locks out non-ASCII characters in all modes.</p>
-
-<p>The \c facility was designed for use with ASCII characters, but with the
-extension to Unicode it is even less useful than it once was.</p>
-
-<p>By default, after \x, from zero to two hexadecimal digits are read (letters
-can be in upper or lower case). Any number of hexadecimal digits may appear
-between \x{ and }, but the character code is constrained as follows:</p>
-<taglist>
- <tag>8-bit non-Unicode mode</tag> <item>less than 0x100</item>
- <tag>8-bit UTF-8 mode</tag> <item>less than 0x10ffff and a valid codepoint</item>
-</taglist>
-<p>Invalid Unicode codepoints are the range 0xd800 to 0xdfff (the so-called
-"surrogate" codepoints), and 0xffef.</p>
-
-<p>If characters other than hexadecimal digits appear between \x{ and }, or if
-there is no terminating }, this form of escape is not recognized. Instead, the
-initial \x will be interpreted as a basic hexadecimal escape, with no
-following digits, giving a character whose value is zero.</p>
-
-<p>Characters whose value is less than 256 can be defined by either of the two
-syntaxes for \x. There is no difference in the way they are handled. For
-example, \xdc is exactly the same as \x{dc}.</p>
-
-<p>After \0 up to two further octal digits are read. If there are fewer than two
-digits, just those that are present are used. Thus the sequence \0\x\07
-specifies two binary zeros followed by a BEL character (code value 7). Make
-sure you supply two digits after the initial zero if the pattern character that
-follows is itself an octal digit.</p>
-
-<p>The handling of a backslash followed by a digit other than 0 is complicated.
-Outside a character class, PCRE reads it and any following digits as a decimal
-number. If the number is less than 10, or if there have been at least that many
-previous capturing left parentheses in the expression, the entire sequence is
-taken as a <em>back reference</em>. A description of how this works is given
-later, following the discussion of parenthesized subpatterns.</p>
-
-
-<p>Inside a character class, or if the decimal number is greater than 9 and there
-have not been that many capturing subpatterns, PCRE re-reads up to three octal
-digits following the backslash, and uses them to generate a data character. Any
-subsequent digits stand for themselves. The value of the character is
-constrained in the same way as characters specified in hexadecimal.
-For example:</p>
-
-<taglist>
- <tag>\040</tag> <item>is another way of writing a ASCII space</item>
-
- <tag>\40</tag> <item>is the same, provided there are fewer than 40
- previous capturing subpatterns</item>
- <tag>\7</tag> <item>is always a back reference</item>
-
- <tag>\11</tag> <item> might be a back reference, or another way of
- writing a tab</item>
- <tag>\011</tag> <item>is always a tab</item>
- <tag>\0113</tag> <item>is a tab followed by the character "3"</item>
-
- <tag>\113</tag> <item>might be a back reference, otherwise the
- character with octal code 113</item>
-
- <tag>\377</tag> <item>might be a back reference, otherwise
- the value 255 (decimal)</item>
-
- <tag>\81</tag> <item>is either a back reference, or a binary zero
- followed by the two characters "8" and "1"</item>
-</taglist>
-
-<p>Note that octal values of 100 or greater must not be introduced by
-a leading zero, because no more than three octal digits are ever
-read.</p>
-
-<p>All the sequences that define a single character value can be used both inside
-and outside character classes. In addition, inside a character class, \b is
-interpreted as the backspace character (hex 08).</p>
-<p>\N is not allowed in a character class. \B, \R, and \X are not special
-inside a character class. Like other unrecognized escape sequences, they are
-treated as the literal characters "B", "R", and "X". Outside a character class, these
-sequences have different meanings.</p>
-
-<p><em>Unsupported escape sequences</em></p>
-
-<p>In Perl, the sequences \l, \L, \u, and \U are recognized by its string
-handler and used to modify the case of following characters. PCRE
-does not support these escape sequences.</p>
-
-<p><em>Absolute and relative back references</em></p>
-
-<p>The sequence \g followed by an unsigned or a negative number,
-optionally enclosed in braces, is an absolute or relative back
-reference. A named back reference can be coded as \g{name}. Back
-references are discussed later, following the discussion of
-parenthesized subpatterns.</p>
-
-<p><em>Absolute and relative subroutine calls</em></p>
-<p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a name or
-a number enclosed either in angle brackets or single quotes, is an alternative
-syntax for referencing a subpattern as a "subroutine". Details are discussed
-later.
-Note that \g{...} (Perl syntax) and \g&lt;...&gt; (Oniguruma syntax) are <em>not</em>
-synonymous. The former is a back reference; the latter is a
-subroutine call.</p>
-
-<p><em>Generic character types</em></p>
-
-<p>Another use of backslash is for specifying generic character types:</p>
-
-<taglist>
- <tag>\d</tag> <item>any decimal digit</item>
- <tag>\D</tag> <item>any character that is not a decimal digit</item>
- <tag>\h</tag> <item>any horizontal white space character</item>
- <tag>\H</tag> <item>any character that is not a horizontal white space character</item>
- <tag>\s</tag> <item>any white space character</item>
- <tag>\S</tag> <item>any character that is not a white space character</item>
- <tag>\v</tag> <item>any vertical white space character</item>
- <tag>\V</tag> <item>any character that is not a vertical white space character</item>
- <tag>\w</tag> <item>any "word" character</item>
- <tag>\W</tag> <item>any "non-word" character</item>
-</taglist>
-
-<p>There is also the single sequence \N, which matches a non-newline character.
-This is the same as the "." metacharacter
-when <c>dotall</c> is not set. Perl also uses \N to match characters by name;
-PCRE does not support this.</p>
-
-<p>Each pair of lower and upper case escape sequences partitions the complete set
-of characters into two disjoint sets. Any given character matches one, and only
-one, of each pair. The sequences can appear both inside and outside character
-classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, because
-there is no character to match.</p>
-
-<p>For compatibility with Perl, \s does not match the VT character (code 11).
-This makes it different from the POSIX "space" class. The \s characters
-are HT (9), LF (10), FF (12), CR (13), and space (32). If "use locale;" is
-included in a Perl script, \s may match the VT character. In PCRE, it never
-does.</p>
-
-<p>A "word" character is an underscore or any character that is a letter or digit.
-By default, the definition of letters and digits is controlled by PCRE's
-low-valued character tables, in Erlang's case (and without the <c>unicode</c> option),
-the ISO-Latin-1 character set.</p>
-
-<p>By default, in <c>unicode</c> mode, characters with values greater than 255,
-i.e. all characters outside the ISO-Latin-1 character set, never match
-\d, \s, or \w, and always match \D, \S, and \W. These sequences retain
-their original meanings from before UTF support was available, mainly for
-efficiency reasons. However, if the <c>ucp</c> option is set, the behaviour is changed so that Unicode
-properties are used to determine character types, as follows:</p>
-<taglist>
- <tag>\d</tag> <item>any character that \p{Nd} matches (decimal digit)</item>
- <tag>\s</tag> <item>any character that \p{Z} matches, plus HT, LF, FF, CR)</item>
- <tag> \w</tag> <item>any character that \p{L} or \p{N} matches, plus underscore)</item>
-</taglist>
-<p>The upper case escapes match the inverse sets of characters. Note that \d
-matches only decimal digits, whereas \w matches any Unicode digit, as well as
-any Unicode letter, and underscore. Note also that <c>ucp</c> affects \b, and
-\B because they are defined in terms of \w and \W. Matching these sequences
-is noticeably slower when <c>ucp</c> is set.</p>
-
-<p>The sequences \h, \H, \v, and \V are features that were added to Perl at
-release 5.10. In contrast to the other sequences, which match only ASCII
-characters by default, these always match certain high-valued codepoints,
-whether or not <c>ucp</c> is set. The horizontal space characters are:</p>
-
-<taglist>
- <tag>U+0009</tag> <item>Horizontal tab (HT)</item>
- <tag>U+0020</tag> <item>Space</item>
- <tag>U+00A0</tag> <item>Non-break space</item>
- <tag>U+1680</tag> <item>Ogham space mark</item>
- <tag>U+180E</tag> <item>Mongolian vowel separator</item>
- <tag>U+2000</tag> <item>En quad</item>
- <tag>U+2001</tag> <item>Em quad</item>
- <tag>U+2002</tag> <item>En space</item>
- <tag>U+2003</tag> <item>Em space</item>
- <tag>U+2004</tag> <item>Three-per-em space</item>
- <tag>U+2005</tag> <item>Four-per-em space</item>
- <tag>U+2006</tag> <item>Six-per-em space</item>
- <tag>U+2007</tag> <item>Figure space</item>
- <tag>U+2008</tag> <item>Punctuation space</item>
- <tag>U+2009</tag> <item>Thin space</item>
- <tag>U+200A</tag> <item>Hair space</item>
- <tag>U+202F</tag> <item>Narrow no-break space</item>
- <tag>U+205F</tag> <item>Medium mathematical space</item>
- <tag>U+3000</tag> <item>Ideographic space</item>
-</taglist>
-
-<p>The vertical space characters are:</p>
-
-<taglist>
- <tag>U+000A</tag> <item>Linefeed (LF)</item>
- <tag>U+000B</tag> <item>Vertical tab (VT)</item>
- <tag>U+000C</tag> <item>Form feed (FF)</item>
- <tag>U+000D</tag> <item>Carriage return (CR)</item>
- <tag>U+0085</tag> <item>Next line (NEL)</item>
- <tag>U+2028</tag> <item>Line separator</item>
- <tag>U+2029</tag> <item>Paragraph separator</item>
-</taglist>
-
-<p>In 8-bit, non-UTF-8 mode, only the characters with codepoints less than 256 are
-relevant.</p>
-
-<p><em>Newline sequences</em></p>
-
-<p>Outside a character class, by default, the escape sequence \R matches any
-Unicode newline sequence. In non-UTF-8 mode \R is
-equivalent to the following:</p>
-
-<quote><p> (?&gt;\r\n|\n|\x0b|\f|\r|\x85)</p></quote>
-
-<p>This is an example of an "atomic group", details of which are given below.</p>
-
-<p>This particular group matches either the two-character sequence CR followed by
-LF, or one of the single characters LF (linefeed, U+000A), VT (vertical tab,
-U+000B), FF (form feed, U+000C), CR (carriage return, U+000D), or NEL (next
-line, U+0085). The two-character sequence is treated as a single unit that
-cannot be split.</p>
-
-<p>In Unicode mode, two additional characters whose codepoints are greater than 255
-are added: LS (line separator, U+2028) and PS (paragraph separator, U+2029).
-Unicode character property support is not needed for these characters to be
-recognized.</p>
-
-
-<p>It is possible to restrict \R to match only CR, LF, or CRLF (instead of the
-complete set of Unicode line endings) by setting the option <c>bsr_anycrlf</c>
-either at compile time or when the pattern is matched. (BSR is an abbreviation
-for "backslash R".) This can be made the default when PCRE is built; if this is
-the case, the other behaviour can be requested via the <c>bsr_unicode</c> option.
-It is also possible to specify these settings by starting a pattern string with
-one of the following sequences:</p>
-
-<p> (*BSR_ANYCRLF) CR, LF, or CRLF only
- (*BSR_UNICODE) any Unicode newline sequence</p>
-
-<p>These override the default and the options given to the compiling function, but
-they can themselves be overridden by options given to a matching function. Note
-that these special settings, which are not Perl-compatible, are recognized only
-at the very start of a pattern, and that they must be in upper case. If more
-than one of them is present, the last one is used. They can be combined with a
-change of newline convention; for example, a pattern can start with:</p>
-
-<p> (*ANY)(*BSR_ANYCRLF)</p>
-
-<p>They can also be combined with the (*UTF8), (*UTF) or
-(*UCP) special sequences. Inside a character class, \R is treated as an
-unrecognized escape sequence, and so matches the letter "R" by default.</p>
-
-<p><em>Unicode character properties</em></p>
-
-<p>Three additional
-escape sequences that match characters with specific properties are available.
-When in 8-bit non-UTF-8 mode, these sequences are of course limited to testing
-characters whose codepoints are less than 256, but they do work in this mode.
-The extra escape sequences are:</p>
-<taglist>
-<tag>\p{<em>xx</em>}</tag> <item>a character with the <em>xx</em> property</item>
-<tag>\P{<em>xx</em>}</tag> <item>a character without the <em>xx</em> property</item>
-<tag>\X</tag> <item>a Unicode extended grapheme cluster</item>
-</taglist>
-
-<p>The property names represented by <i>xx</i> above are limited to the Unicode
-script names, the general category properties, "Any", which matches any
-character (including newline), and some special PCRE properties (described
-in the next section).
-Other Perl properties such as "InMusicalSymbols" are not currently supported by
-PCRE. Note that \P{Any} does not match any characters, so always causes a
-match failure.</p>
-
-<p>Sets of Unicode characters are defined as belonging to certain scripts. A
-character from one of these sets can be matched using a script name. For
-example:</p>
-
-<p> \p{Greek}
- \P{Han}</p>
-
-<p>Those that are not part of an identified script are lumped together as
-"Common". The current list of scripts is:</p>
-
-<list>
-<item>Arabic</item>
-<item>Armenian</item>
-<item>Avestan</item>
-<item>Balinese</item>
-<item>Bamum</item>
-<item>Batak</item>
-<item>Bengali</item>
-<item>Bopomofo</item>
-<item>Braille</item>
-<item>Buginese</item>
-<item>Buhid</item>
-<item>Canadian_Aboriginal</item>
-<item>Carian</item>
-<item>Chakma</item>
-<item>Cham</item>
-<item>Cherokee</item>
-<item>Common</item>
-<item>Coptic</item>
-<item>Cuneiform</item>
-<item>Cypriot</item>
-<item>Cyrillic</item>
-<item>Deseret</item>
-<item>Devanagari</item>
-<item>Egyptian_Hieroglyphs</item>
-<item>Ethiopic</item>
-<item>Georgian</item>
-<item>Glagolitic</item>
-<item>Gothic</item>
-<item>Greek</item>
-<item>Gujarati</item>
-<item>Gurmukhi</item>
-<item>Han</item>
-<item>Hangul</item>
-<item>Hanunoo</item>
-<item>Hebrew</item>
-<item>Hiragana</item>
-<item>Imperial_Aramaic</item>
-<item>Inherited</item>
-<item>Inscriptional_Pahlavi</item>
-<item>Inscriptional_Parthian</item>
-<item>Javanese</item>
-<item>Kaithi</item>
-<item>Kannada</item>
-<item>Katakana</item>
-<item>Kayah_Li</item>
-<item>Kharoshthi</item>
-<item>Khmer</item>
-<item>Lao</item>
-<item>Latin</item>
-<item>Lepcha</item>
-<item>Limbu</item>
-<item>Linear_B</item>
-<item>Lisu</item>
-<item>Lycian</item>
-<item>Lydian</item>
-<item>Malayalam</item>
-<item>Mandaic</item>
-<item>Meetei_Mayek</item>
-<item>Meroitic_Cursive</item>
-<item>Meroitic_Hieroglyphs</item>
-<item>Miao</item>
-<item>Mongolian</item>
-<item>Myanmar</item>
-<item>New_Tai_Lue</item>
-<item>Nko</item>
-<item>Ogham</item>
-<item>Old_Italic</item>
-<item>Old_Persian</item>
-<item>Oriya</item>
-<item>Old_South_Arabian</item>
-<item>Old_Turkic</item>
-<item>Ol_Chiki</item>
-<item>Osmanya</item>
-<item>Phags_Pa</item>
-<item>Phoenician</item>
-<item>Rejang</item>
-<item>Runic</item>
-<item>Samaritan</item>
-<item>Saurashtra</item>
-<item>Sharada</item>
-<item>Shavian</item>
-<item>Sinhala</item>
-<item>Sora_Sompeng</item>
-<item>Sundanese</item>
-<item>Syloti_Nagri</item>
-<item>Syriac</item>
-<item>Tagalog</item>
-<item>Tagbanwa</item>
-<item>Tai_Le</item>
-<item>Tai_Tham</item>
-<item>Tai_Viet</item>
-<item>Takri</item>
-<item>Tamil</item>
-<item>Telugu</item>
-<item>Thaana</item>
-<item>Thai</item>
-<item>Tibetan</item>
-<item>Tifinagh</item>
-<item>Ugaritic</item>
-<item>Vai</item>
-<item>Yi</item>
-</list>
-
-<p>Each character has exactly one Unicode general category property, specified by
-a two-letter abbreviation. For compatibility with Perl, negation can be
-specified by including a circumflex between the opening brace and the property
-name. For example, \p{^Lu} is the same as \P{Lu}.</p>
-
-<p>If only one letter is specified with \p or \P, it includes all the general
-category properties that start with that letter. In this case, in the absence
-of negation, the curly brackets in the escape sequence are optional; these two
-examples have the same effect:</p>
-
-<list><item>\p{L}</item>
- <item>\pL</item></list>
-
-<p>The following general category property codes are supported:</p>
-
-<taglist>
- <tag>C</tag> <item>Other</item>
- <tag>Cc</tag> <item>Control</item>
- <tag>Cf</tag> <item>Format</item>
- <tag>Cn</tag> <item>Unassigned</item>
- <tag>Co</tag> <item>Private use</item>
- <tag>Cs</tag> <item>Surrogate</item>
-</taglist>
-
-<taglist>
- <tag>L</tag> <item>Letter</item>
- <tag>Ll</tag> <item>Lower case letter</item>
- <tag>Lm</tag> <item>Modifier letter</item>
- <tag>Lo</tag> <item>Other letter</item>
- <tag>Lt</tag> <item>Title case letter</item>
- <tag>Lu</tag> <item>Upper case letter</item>
-</taglist>
-
-
-<taglist>
- <tag>M</tag> <item>Mark</item>
- <tag>Mc</tag> <item>Spacing mark</item>
- <tag>Me</tag> <item>Enclosing mark</item>
- <tag>Mn</tag> <item>Non-spacing mark</item>
-</taglist>
+Pattern PCRE matches Perl matches
+
+\Qabc$xyz\E abc$xyz abc followed by the contents of $xyz
+\Qabc\$xyz\E abc\$xyz abc\$xyz
+\Qabc\E\$\Qxyz\E abc$xyz abc$xyz</code>
+
+
+ <p>The \Q...\E sequence is recognized both inside and outside character
+ classes. An isolated \E that is not preceded by \Q is ignored. If \Q is
+ not followed by \E later in the pattern, the literal interpretation
+ continues to the end of the pattern (that is, \E is assumed at the end).
+ If the isolated \Q is inside a character class, this causes an error, as
+ the character class is not terminated.</p>
+
+ <p><em>Non-Printing Characters</em></p>
+ <marker id="non_printing_characters"></marker>
+
+ <p>A second use of backslash provides a way of encoding non-printing
+ characters in patterns in a visible manner. There is no restriction on the
+ appearance of non-printing characters, apart from the binary zero that
+ terminates a pattern. When a pattern is prepared by text editing, it is
+ often easier to use one of the following escape sequences than the binary
+ character it represents:</p>
+
+ <taglist>
+ <tag>\a</tag><item>Alarm, that is, the BEL character (hex 07)</item>
+ <tag>\cx</tag><item>"Control-x", where x is any ASCII character</item>
+ <tag>\e</tag><item>Escape (hex 1B)</item>
+ <tag>\f</tag><item>Form feed (hex 0C)</item>
+ <tag>\n</tag><item>Line feed (hex 0A)</item>
+ <tag>\r</tag><item>Carriage return (hex 0D)</item>
+ <tag>\t</tag><item>Tab (hex 09)</item>
+ <tag>\ddd</tag><item>Character with octal code ddd, or back reference
+ </item>
+ <tag>\xhh</tag><item>Character with hex code hh</item>
+ <tag>\x{hhh..}</tag><item>Character with hex code hhh..</item>
+ </taglist>
+
+ <p>The precise effect of \cx on ASCII characters is as follows: if x is a
+ lowercase letter, it is converted to upper case. Then bit 6 of the
+ character (hex 40) is inverted. Thus \cA to \cZ become hex 01 to hex 1A
+ (A is 41, Z is 5A), but \c{ becomes hex 3B ({ is 7B), and \c; becomes
+ hex 7B (; is 3B). If the data item (byte or 16-bit value) following \c
+ has a value &gt; 127, a compile-time error occurs. This locks out
+ non-ASCII characters in all modes.</p>
+
+ <p>The \c facility was designed for use with ASCII characters, but with the
+ extension to Unicode it is even less useful than it once was.</p>
+
+ <p>By default, after \x, from zero to two hexadecimal digits are read
+ (letters can be in upper or lower case). Any number of hexadecimal digits
+ can appear between \x{ and }, but the character code is constrained as
+ follows:</p>
+
+ <taglist>
+ <tag>8-bit non-Unicode mode</tag>
+ <item>&lt; 0x100</item>
+ <tag>8-bit UTF-8 mode</tag>
+ <item>&lt; 0x10ffff and a valid code point</item>
+ </taglist>
+
+ <p>Invalid Unicode code points are the range 0xd800 to 0xdfff (the so-called
+ "surrogate" code points), and 0xffef.</p>
+
+ <p>If characters other than hexadecimal digits appear between \x{ and },
+ or if there is no terminating }, this form of escape is not recognized.
+ Instead, the initial \x is interpreted as a basic hexadecimal escape,
+ with no following digits, giving a character whose value is zero.</p>
+
+ <p>Characters whose value is &lt; 256 can be defined by either of the two
+ syntaxes for \x. There is no difference in the way they are handled. For
+ example, \xdc is the same as \x{dc}.</p>
+
+ <p>After \0 up to two further octal digits are read. If there are fewer than
+ two digits, only those that are present are used. Thus the sequence
+ \0\x\07 specifies two binary zeros followed by a BEL character (code value
+ 7). Ensure to supply two digits after the initial zero if the pattern
+ character that follows is itself an octal digit.</p>
+
+ <p>The handling of a backslash followed by a digit other than 0 is
+ complicated. Outside a character class, PCRE reads it and any following
+ digits as a decimal number. If the number is &lt; 10, or if there have
+ been at least that many previous capturing left parentheses in the
+ expression, the entire sequence is taken as a <em>back reference</em>. A
+ description of how this works is provided later, following the discussion
+ of parenthesized subpatterns.</p>
+
+ <p>Inside a character class, or if the decimal number is &gt; 9 and there
+ have not been that many capturing subpatterns, PCRE re-reads up to three
+ octal digits following the backslash, and uses them to generate a data
+ character. Any subsequent digits stand for themselves. The value of the
+ character is constrained in the same way as characters specified in
+ hexadecimal. For example:</p>
+
+ <taglist>
+ <tag>\040</tag>
+ <item>Another way of writing an ASCII space</item>
+ <tag>\40</tag>
+ <item>The same, provided there are &lt; 40 previous capturing
+ subpatterns</item>
+ <tag>\7</tag>
+ <item>Always a back reference</item>
+ <tag>\11</tag>
+ <item>Can be a back reference, or another way of writing a tab</item>
+ <tag>\011</tag>
+ <item>Always a tab</item>
+ <tag>\0113</tag>
+ <item>A tab followed by character "3"</item>
+ <tag>\113</tag>
+ <item>Can be a back reference, otherwise the character with octal code
+ 113 </item>
+ <tag>\377</tag>
+ <item>Can be a back reference, otherwise value 255 (decimal)</item>
+ <tag>\81</tag>
+ <item>Either a back reference, or a binary zero followed by the two
+ characters "8" and "1"</item>
+ </taglist>
+
+ <p>Notice that octal values &gt;= 100 must not be introduced by a leading
+ zero, as no more than three octal digits are ever read.</p>
+
+ <p>All the sequences that define a single character value can be used both
+ inside and outside character classes. Also, inside a character class, \b
+ is interpreted as the backspace character (hex 08).</p>
+
+ <p>\N is not allowed in a character class. \B, \R, and \X are not special
+ inside a character class. Like other unrecognized escape sequences, they
+ are treated as the literal characters "B", "R", and "X". Outside a
+ character class, these sequences have different meanings.</p>
+
+ <p><em>Unsupported Escape Sequences</em></p>
+
+ <p>In Perl, the sequences \l, \L, \u, and \U are recognized by its string
+ handler and used to modify the case of following characters. PCRE does not
+ support these escape sequences.</p>
+
+ <p><em>Absolute and Relative Back References</em></p>
+
+ <p>The sequence \g followed by an unsigned or a negative number, optionally
+ enclosed in braces, is an absolute or relative back reference. A named
+ back reference can be coded as \g{name}. Back references are discussed
+ later, following the discussion of parenthesized subpatterns.</p>
+
+ <p><em>Absolute and Relative Subroutine Calls</em></p>
+
+ <p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a
+ name or a number enclosed either in angle brackets or single quotes, is
+ alternative syntax for referencing a subpattern as a "subroutine".
+ Details are discussed later. Notice that \g{...} (Perl syntax) and
+ \g&lt;...&gt; (Oniguruma syntax) are <em>not</em> synonymous. The former
+ is a back reference and the latter is a subroutine call.</p>
+
+ <p><em>Generic Character Types</em></p>
+ <marker id="generic_character_types"></marker>
+
+ <p>Another use of backslash is for specifying generic character types:</p>
+
+ <taglist>
+ <tag>\d</tag><item>Any decimal digit</item>
+ <tag>\D</tag><item>Any character that is not a decimal digit</item>
+ <tag>\h</tag><item>Any horizontal whitespace character</item>
+ <tag>\H</tag><item>Any character that is not a horizontal whitespace
+ character</item>
+ <tag>\s</tag><item>Any whitespace character</item>
+ <tag>\S</tag><item>Any character that is not a whitespace character
+ </item>
+ <tag>\v</tag><item>Any vertical whitespace character</item>
+ <tag>\V</tag><item>Any character that is not a vertical whitespace
+ character</item>
+ <tag>\w</tag><item>Any "word" character</item>
+ <tag>\W</tag><item>Any "non-word" character</item>
+ </taglist>
+
+ <p>There is also the single sequence \N, which matches a non-newline
+ character. This is the same as the "." metacharacter when <c>dotall</c>
+ is not set. Perl also uses \N to match characters by name, but PCRE does
+ not support this.</p>
+
+ <p>Each pair of lowercase and uppercase escape sequences partitions the
+ complete set of characters into two disjoint sets. Any given character
+ matches one, and only one, of each pair. The sequences can appear both
+ inside and outside character classes. They each match one character of the
+ appropriate type. If the current matching point is at the end of the
+ subject string, all fail, as there is no character to match.</p>
+
+ <p>For compatibility with Perl, \s does not match the VT character
+ (code 11). This makes it different from the Posix "space" class. The \s
+ characters are HT (9), LF (10), FF (12), CR (13), and space (32). If "use
+ locale;" is included in a Perl script, \s can match the VT character. In
+ PCRE, it never does.</p>
+
+ <p>A "word" character is an underscore or any character that is a letter or
+ a digit. By default, the definition of letters and digits is controlled by
+ the PCRE low-valued character tables, in Erlang's case (and without option
+ <c>unicode</c>), the ISO Latin-1 character set.</p>
+
+ <p>By default, in <c>unicode</c> mode, characters with values &gt; 255, that
+ is, all characters outside the ISO Latin-1 character set, never match \d,
+ \s, or \w, and always match \D, \S, and \W. These sequences retain their
+ original meanings from before UTF support was available, mainly for
+ efficiency reasons. However, if option <c>ucp</c> is set, the behavior is
+ changed so that Unicode properties are used to determine character types,
+ as follows:</p>
+
+ <taglist>
+ <tag>\d</tag><item>Any character that \p{Nd} matches (decimal digit)
+ </item>
+ <tag>\s</tag><item>Any character that \p{Z} matches, plus HT, LF, FF, CR
+ </item>
+ <tag>\w</tag><item>Any character that \p{L} or \p{N} matches, plus
+ underscore</item>
+ </taglist>
+
+ <p>The uppercase escapes match the inverse sets of characters. Notice that
+ \d matches only decimal digits, while \w matches any Unicode digit, any
+ Unicode letter, and underscore. Notice also that <c>ucp</c> affects \b and
+ \B, as they are defined in terms of \w and \W. Matching these sequences is
+ noticeably slower when <c>ucp</c> is set.</p>
+
+ <p>The sequences \h, \H, \v, and \V are features that were added to Perl in
+ release 5.10. In contrast to the other sequences, which match only ASCII
+ characters by default, these always match certain high-valued code points,
+ regardless if <c>ucp</c> is set.</p>
+
+ <p>The following are the horizontal space characters:</p>
+
+ <taglist>
+ <tag>U+0009</tag><item>Horizontal tab (HT)</item>
+ <tag>U+0020</tag><item>Space</item>
+ <tag>U+00A0</tag><item>Non-break space</item>
+ <tag>U+1680</tag><item>Ogham space mark</item>
+ <tag>U+180E</tag><item>Mongolian vowel separator</item>
+ <tag>U+2000</tag><item>En quad</item>
+ <tag>U+2001</tag><item>Em quad</item>
+ <tag>U+2002</tag><item>En space</item>
+ <tag>U+2003</tag><item>Em space</item>
+ <tag>U+2004</tag><item>Three-per-em space</item>
+ <tag>U+2005</tag><item>Four-per-em space</item>
+ <tag>U+2006</tag><item>Six-per-em space</item>
+ <tag>U+2007</tag><item>Figure space</item>
+ <tag>U+2008</tag><item>Punctuation space</item>
+ <tag>U+2009</tag><item>Thin space</item>
+ <tag>U+200A</tag><item>Hair space</item>
+ <tag>U+202F</tag><item>Narrow no-break space</item>
+ <tag>U+205F</tag><item>Medium mathematical space</item>
+ <tag>U+3000</tag><item>Ideographic space</item>
+ </taglist>
+
+ <p>The following are the vertical space characters:</p>
+
+ <taglist>
+ <tag>U+000A</tag><item>Line feed (LF)</item>
+ <tag>U+000B</tag><item>Vertical tab (VT)</item>
+ <tag>U+000C</tag><item>Form feed (FF)</item>
+ <tag>U+000D</tag><item>Carriage return (CR)</item>
+ <tag>U+0085</tag><item>Next line (NEL)</item>
+ <tag>U+2028</tag><item>Line separator</item>
+ <tag>U+2029</tag><item>Paragraph separator</item>
+ </taglist>
+
+ <p>In 8-bit, non-UTF-8 mode, only the characters with code points &lt; 256
+ are relevant.</p>
+
+ <p><em>Newline Sequences</em></p>
+ <marker id="newline_sequences"></marker>
+
+ <p>Outside a character class, by default, the escape sequence \R matches any
+ Unicode newline sequence. In non-UTF-8 mode, \R is equivalent to the
+ following:</p>
+
+ <code>
+(?&gt;\r\n|\n|\x0b|\f|\r|\x85)</code>
+
+ <p>This is an example of an "atomic group", details are provided below.</p>
+
+ <p>This particular group matches either the two-character sequence CR
+ followed by LF, or one of the single characters LF (line feed, U+000A),
+ VT (vertical tab, U+000B), FF (form feed, U+000C), CR (carriage return,
+ U+000D), or NEL (next line, U+0085). The two-character sequence is
+ treated as a single unit that cannot be split.</p>
+
+ <p>In Unicode mode, two more characters whose code points are &gt; 255 are
+ added: LS (line separator, U+2028) and PS (paragraph separator, U+2029).
+ Unicode character property support is not needed for these characters to
+ be recognized.</p>
+
+ <p>\R can be restricted to match only CR, LF, or CRLF (instead of the
+ complete set of Unicode line endings) by setting option <c>bsr_anycrlf</c>
+ either at compile time or when the pattern is matched. (BSR is an acronym
+ for "backslash R".) This can be made the default when PCRE is built; if
+ so, the other behavior can be requested through option
+ <c>bsr_unicode</c>. These settings can also be specified by starting a
+ pattern string with one of the following sequences:</p>
+
+ <taglist>
+ <tag>(*BSR_ANYCRLF)</tag>
+ <item>CR, LF, or CRLF only</item>
+ <tag>(*BSR_UNICODE)</tag>
+ <item>Any Unicode newline sequence</item>
+ </taglist>
+
+ <p>These override the default and the options specified to the compiling
+ function, but they can themselves be overridden by options specified to a
+ matching function. Notice that these special settings, which are not
+ Perl-compatible, are recognized only at the very start of a pattern, and
+ that they must be in upper case. If more than one of them is present, the
+ last one is used. They can be combined with a change of newline
+ convention; for example, a pattern can start with:</p>
+
+ <code>
+(*ANY)(*BSR_ANYCRLF)</code>
+
+ <p>They can also be combined with the (*UTF8), (*UTF), or (*UCP) special
+ sequences. Inside a character class, \R is treated as an unrecognized
+ escape sequence, and so matches the letter "R" by default.</p>
+
+ <p><em>Unicode Character Properties</em></p>
+
+ <p>Three more escape sequences that match characters with specific
+ properties are available. When in 8-bit non-UTF-8 mode, these sequences
+ are limited to testing characters whose code points are &lt;
+ 256, but they do work in this mode. The following are the extra escape
+ sequences:</p>
+
+ <taglist>
+ <tag>\p{<em>xx</em>}</tag>
+ <item>A character with property <em>xx</em></item>
+ <tag>\P{<em>xx</em>}</tag>
+ <item>A character without property <em>xx</em></item>
+ <tag>\X</tag>
+ <item>A Unicode extended grapheme cluster</item>
+ </taglist>
+
+ <p>The property names represented by <em>xx</em> above are limited to the
+ Unicode script names, the general category properties, "Any", which
+ matches any character (including newline), and some special PCRE
+ properties (described in the next section). Other Perl properties, such as
+ "InMusicalSymbols", are currently not supported by PCRE. Notice that
+ \P{Any} does not match any characters and always causes a match
+ failure.</p>
+
+ <p>Sets of Unicode characters are defined as belonging to certain scripts.
+ A character from one of these sets can be matched using a script name, for
+ example:</p>
+
+ <code>
+\p{Greek} \P{Han}</code>
+
+ <p>Those that are not part of an identified script are lumped together as
+ "Common". The following is the current list of scripts:</p>
+
+ <list type="bulleted">
+ <item>Arabic</item>
+ <item>Armenian</item>
+ <item>Avestan</item>
+ <item>Balinese</item>
+ <item>Bamum</item>
+ <item>Batak</item>
+ <item>Bengali</item>
+ <item>Bopomofo</item>
+ <item>Braille</item>
+ <item>Buginese</item>
+ <item>Buhid</item>
+ <item>Canadian_Aboriginal</item>
+ <item>Carian</item>
+ <item>Chakma</item>
+ <item>Cham</item>
+ <item>Cherokee</item>
+ <item>Common</item>
+ <item>Coptic</item>
+ <item>Cuneiform</item>
+ <item>Cypriot</item>
+ <item>Cyrillic</item>
+ <item>Deseret</item>
+ <item>Devanagari</item>
+ <item>Egyptian_Hieroglyphs</item>
+ <item>Ethiopic</item>
+ <item>Georgian</item>
+ <item>Glagolitic</item>
+ <item>Gothic</item>
+ <item>Greek</item>
+ <item>Gujarati</item>
+ <item>Gurmukhi</item>
+ <item>Han</item>
+ <item>Hangul</item>
+ <item>Hanunoo</item>
+ <item>Hebrew</item>
+ <item>Hiragana</item>
+ <item>Imperial_Aramaic</item>
+ <item>Inherited</item>
+ <item>Inscriptional_Pahlavi</item>
+ <item>Inscriptional_Parthian</item>
+ <item>Javanese</item>
+ <item>Kaithi</item>
+ <item>Kannada</item>
+ <item>Katakana</item>
+ <item>Kayah_Li</item>
+ <item>Kharoshthi</item>
+ <item>Khmer</item>
+ <item>Lao</item>
+ <item>Latin</item>
+ <item>Lepcha</item>
+ <item>Limbu</item>
+ <item>Linear_B</item>
+ <item>Lisu</item>
+ <item>Lycian</item>
+ <item>Lydian</item>
+ <item>Malayalam</item>
+ <item>Mandaic</item>
+ <item>Meetei_Mayek</item>
+ <item>Meroitic_Cursive</item>
+ <item>Meroitic_Hieroglyphs</item>
+ <item>Miao</item>
+ <item>Mongolian</item>
+ <item>Myanmar</item>
+ <item>New_Tai_Lue</item>
+ <item>Nko</item>
+ <item>Ogham</item>
+ <item>Old_Italic</item>
+ <item>Old_Persian</item>
+ <item>Oriya</item>
+ <item>Old_South_Arabian</item>
+ <item>Old_Turkic</item>
+ <item>Ol_Chiki</item>
+ <item>Osmanya</item>
+ <item>Phags_Pa</item>
+ <item>Phoenician</item>
+ <item>Rejang</item>
+ <item>Runic</item>
+ <item>Samaritan</item>
+ <item>Saurashtra</item>
+ <item>Sharada</item>
+ <item>Shavian</item>
+ <item>Sinhala</item>
+ <item>Sora_Sompeng</item>
+ <item>Sundanese</item>
+ <item>Syloti_Nagri</item>
+ <item>Syriac</item>
+ <item>Tagalog</item>
+ <item>Tagbanwa</item>
+ <item>Tai_Le</item>
+ <item>Tai_Tham</item>
+ <item>Tai_Viet</item>
+ <item>Takri</item>
+ <item>Tamil</item>
+ <item>Telugu</item>
+ <item>Thaana</item>
+ <item>Thai</item>
+ <item>Tibetan</item>
+ <item>Tifinagh</item>
+ <item>Ugaritic</item>
+ <item>Vai</item>
+ <item>Yi</item>
+ </list>
+
+ <p>Each character has exactly one Unicode general category property,
+ specified by a two-letter acronym. For compatibility with Perl, negation
+ can be specified by including a circumflex between the opening brace and
+ the property name. For example, \p{^Lu} is the same as \P{Lu}.</p>
+
+ <p>If only one letter is specified with \p or \P, it includes all the
+ general category properties that start with that letter. In this case, in
+ the absence of negation, the curly brackets in the escape sequence are
+ optional. The following two examples have the same effect:</p>
+
+ <code>
+\p{L}
+\pL</code>
+
+ <p>The following general category property codes are supported:</p>
+
+ <taglist>
+ <tag>C</tag><item>Other</item>
+ <tag>Cc</tag><item>Control</item>
+ <tag>Cf</tag><item>Format</item>
+ <tag>Cn</tag><item>Unassigned</item>
+ <tag>Co</tag><item>Private use</item>
+ <tag>Cs</tag><item>Surrogate</item>
+ <tag>L</tag><item>Letter</item>
+ <tag>Ll</tag><item>Lowercase letter</item>
+ <tag>Lm</tag><item>Modifier letter</item>
+ <tag>Lo</tag><item>Other letter</item>
+ <tag>Lt</tag><item>Title case letter</item>
+ <tag>Lu</tag><item>Uppercase letter</item>
+ <tag>M</tag><item>Mark</item>
+ <tag>Mc</tag><item>Spacing mark</item>
+ <tag>Me</tag><item>Enclosing mark</item>
+ <tag>Mn</tag><item>Non-spacing mark</item>
+ <tag>N</tag><item>Number</item>
+ <tag>Nd</tag><item>Decimal number</item>
+ <tag>Nl</tag><item>Letter number</item>
+ <tag>No</tag><item>Other number</item>
+ <tag>P</tag><item>Punctuation</item>
+ <tag>Pc</tag><item>Connector punctuation</item>
+ <tag>Pd</tag><item>Dash punctuation</item>
+ <tag>Pe</tag><item>Close punctuation</item>
+ <tag>Pf</tag><item>Final punctuation</item>
+ <tag>Pi</tag><item>Initial punctuation</item>
+ <tag>Po</tag><item>Other punctuation</item>
+ <tag>Ps</tag><item>Open punctuation</item>
+ <tag>S</tag><item>Symbol</item>
+ <tag>Sc</tag><item>Currency symbol</item>
+ <tag>Sk</tag><item>Modifier symbol</item>
+ <tag>Sm</tag><item>Mathematical symbol</item>
+ <tag>So</tag><item>Other symbol</item>
+ <tag>Z</tag><item>Separator</item>
+ <tag>Zl</tag><item>Line separator</item>
+ <tag>Zp</tag><item>Paragraph separator</item>
+ <tag>Zs</tag><item>Space separator</item>
+ </taglist>
+
+ <p>The special property L&amp; is also supported. It matches a character
+ that has the Lu, Ll, or Lt property, that is, a letter that is not
+ classified as a modifier or "other".</p>
+
+ <p>The Cs (Surrogate) property applies only to characters in the range
+ U+D800 to U+DFFF. Such characters are invalid in Unicode strings and so
+ cannot be tested by PCRE. Perl does not support the Cs property.</p>
+
+ <p>The long synonyms for property names supported by Perl (such as
+ \p{Letter}) are not supported by PCRE. It is not permitted to prefix any
+ of these properties with "Is".</p>
+
+ <p>No character in the Unicode table has the Cn (unassigned) property.
+ This property is instead assumed for any code point that is not in the
+ Unicode table.</p>
+
+ <p>Specifying caseless matching does not affect these escape sequences. For
+ example, \p{Lu} always matches only uppercase letters. This is different
+ from the behavior of current versions of Perl.</p>
+
+ <p>Matching characters by Unicode property is not fast, as PCRE must do a
+ multistage table lookup to find a character property. That is why the
+ traditional escape sequences such as \d and \w do not use Unicode
+ properties in PCRE by default. However, you can make them do so by setting
+ option <c>ucp</c> or by starting the pattern with (*UCP).</p>
+
+ <p><em>Extended Grapheme Clusters</em></p>
+
+ <p>The \X escape matches any number of Unicode characters that form an
+ "extended grapheme cluster", and treats the sequence as an atomic group
+ (see below). Up to and including release 8.31, PCRE matched an earlier,
+ simpler definition that was equivalent to <c>(?&gt;\PM\pM*)</c>. That is,
+ it matched a character without the "mark" property, followed by zero or
+ more characters with the "mark" property. Characters with the "mark"
+ property are typically non-spacing accents that affect the preceding
+ character.</p>
+
+ <p>This simple definition was extended in Unicode to include more
+ complicated kinds of composite character by giving each character a
+ grapheme breaking property, and creating rules that use these properties
+ to define the boundaries of extended grapheme clusters. In PCRE releases
+ later than 8.31, \X matches one of these clusters.</p>
+
+ <p>\X always matches at least one character. Then it decides whether to add
+ more characters according to the following rules for ending a cluster:</p>
+
+ <list type="ordered">
+ <item>
+ <p>End at the end of the subject string.</p>
+ </item>
+ <item>
+ <p>Do not end between CR and LF; otherwise end after any control
+ character.</p>
+ </item>
+ <item>
+ <p>Do not break Hangul (a Korean script) syllable sequences. Hangul
+ characters are of five types: L, V, T, LV, and LVT. An L character can
+ be followed by an L, V, LV, or LVT character. An LV or V character can
+ be followed by a V or T character. An LVT or T character can be
+ followed only by a T character.</p>
+ </item>
+ <item>
+ <p>Do not end before extending characters or spacing marks. Characters
+ with the "mark" property always have the "extend" grapheme breaking
+ property.</p>
+ </item>
+ <item>
+ <p>Do not end after prepend characters.</p>
+ </item>
+ <item>
+ <p>Otherwise, end the cluster.</p>
+ </item>
+ </list>
-<taglist>
- <tag>N</tag> <item>Number</item>
- <tag>Nd</tag> <item>Decimal number</item>
- <tag>Nl</tag> <item>Letter number</item>
- <tag>No</tag> <item>Other number</item>
-</taglist>
+ <p><em>PCRE Additional Properties</em></p>
-<taglist>
- <tag>P</tag> <item>Punctuation</item>
- <tag>Pc</tag> <item>Connector punctuation</item>
- <tag>Pd</tag> <item>Dash punctuation</item>
- <tag>Pe</tag> <item>Close punctuation</item>
- <tag>Pf</tag> <item>Final punctuation</item>
- <tag>Pi</tag> <item>Initial punctuation</item>
- <tag>Po</tag> <item>Other punctuation</item>
- <tag>Ps</tag> <item>Open punctuation</item>
-</taglist>
+ <p>In addition to the standard Unicode properties described earlier, PCRE
+ supports four more that make it possible to convert traditional escape
+ sequences, such as \w and \s, and Posix character classes to use Unicode
+ properties. PCRE uses these non-standard, non-Perl properties internally
+ when <c>PCRE_UCP</c> is set. However, they can also be used explicitly.
+ The properties are as follows:</p>
-<taglist>
- <tag>S</tag> <item>Symbol</item>
- <tag>Sc</tag> <item>Currency symbol</item>
- <tag>Sk</tag> <item>Modifier symbol</item>
- <tag>Sm</tag> <item>Mathematical symbol</item>
- <tag>So</tag> <item>Other symbol</item>
-</taglist>
+ <taglist>
+ <tag>Xan</tag>
+ <item>
+ <p>Any alphanumeric character. Matches characters that have either the
+ L (letter) or the N (number) property.</p>
+ </item>
+ <tag>Xps</tag>
+ <item>
+ <p>Any Posix space character. Matches the characters tab, line feed,
+ vertical tab, form feed, carriage return, and any other character
+ that has the Z (separator) property.</p>
+ </item>
+ <tag>Xsp</tag>
+ <item>
+ <p>Any Perl space character. Matches the same as Xps, except that
+ vertical tab is excluded.</p>
+ </item>
+ <tag>Xwd</tag>
+ <item>
+ <p>Any Perl "word" character. Matches the same characters as Xan, plus
+ underscore.</p>
+ </item>
+ </taglist>
+
+ <p>There is another non-standard property, Xuc, which matches any character
+ that can be represented by a Universal Character Name in C++ and other
+ programming languages. These are the characters $, @, ` (grave accent),
+ and all characters with Unicode code points &gt;= U+00A0, except for the
+ surrogates U+D800 to U+DFFF. Notice that most base (ASCII) characters are
+ excluded. (Universal Character Names are of the form \uHHHH or \UHHHHHHHH,
+ where H is a hexadecimal digit. Notice that the Xuc property does not
+ match these sequences but the characters that they represent.)</p>
+
+ <p><em>Resetting the Match Start</em></p>
+
+ <p>The escape sequence \K causes any previously matched characters not to
+ be included in the final matched sequence. For example, the following
+ pattern matches "foobar", but reports that it has matched "bar":</p>
+
+ <code>
+foo\Kbar</code>
+
+ <p>This feature is similar to a lookbehind assertion
+ <!-- HTML &lt;a href="#lookbehind"&gt; -->
+ <!-- &lt;/a&gt; -->
+ (described below). However, in this case, the part of the subject before
+ the real match does not have to be of fixed length, as lookbehind
+ assertions do. The use of \K does not interfere with the setting of
+ captured substrings. For example, when the following pattern matches
+ "foobar", the first substring is still set to "foo":</p>
-<taglist>
- <tag>Z</tag> <item>Separator</item>
- <tag>Zl</tag> <item>Line separator</item>
- <tag>Zp</tag> <item>Paragraph separator</item>
- <tag>Zs</tag> <item>Space separator</item>
-</taglist>
+<code>
+(foo)\Kbar</code>
+
+ <p>Perl documents that the use of \K within assertions is "not well
+ defined". In PCRE, \K is acted upon when it occurs inside positive
+ assertions, but is ignored in negative assertions.</p>
+
+ <p><em>Simple Assertions</em></p>
+
+ <p>The final use of backslash is for certain simple assertions. An
+ assertion specifies a condition that must be met at a particular point in
+ a match, without consuming any characters from the subject string. The
+ use of subpatterns for more complicated assertions is described below. The
+ following are the backslashed assertions:</p>
+
+ <taglist>
+ <tag>\b</tag><item>Matches at a word boundary.</item>
+ <tag>\B</tag><item>Matches when not at a word boundary.</item>
+ <tag>\A</tag><item>Matches at the start of the subject.</item>
+ <tag>\Z</tag><item>Matches at the end of the subject, and before a newline
+ at the end of the subject.</item>
+ <tag>\z</tag><item>Matches only at the end of the subject.</item>
+ <tag>\G</tag><item>Matches at the first matching position in the subject.
+ </item>
+ </taglist>
+
+ <p>Inside a character class, \b has a different meaning; it matches the
+ backspace character. If any other of these assertions appears in a
+ character class, by default it matches the corresponding literal character
+ (for example, \B matches the letter B).</p>
+
+ <p>A word boundary is a position in the subject string where the current
+ character and the previous character do not both match \w or \W (that is,
+ one matches \w and the other matches \W), or the start or end of the
+ string if the first or last character matches \w, respectively. In UTF
+ mode, the meanings of \w and \W can be changed by setting option
+ <c>ucp</c>. When this is done, it also affects \b and \B. PCRE and Perl do
+ not have a separate "start of word" or "end of word" metasequence.
+ However, whatever follows \b normally determines which it is. For example,
+ the fragment \ba matches "a" at the start of a word.</p>
+
+ <p>The \A, \Z, and \z assertions differ from the traditional circumflex and
+ dollar (described in the next section) in that they only ever match at the
+ very start and end of the subject string, whatever options are set. Thus,
+ they are independent of multiline mode. These three assertions are not
+ affected by options <c>notbol</c> or <c>noteol</c>, which affect only the
+ behavior of the circumflex and dollar metacharacters. However, if argument
+ <c>startoffset</c> of <seealso marker="#run/3"><c>run/3</c></seealso> is
+ non-zero, indicating that matching is to start at a point other than the
+ beginning of the subject, \A can never match. The difference between \Z
+ and \z is that \Z matches before a newline at the end of the string and
+ at the very end, while \z matches only at the end.</p>
+
+ <p>The \G assertion is true only when the current matching position is at
+ the start point of the match, as specified by argument <c>startoffset</c>
+ of <c>run/3</c>. It differs from \A when the value of <c>startoffset</c>
+ is non-zero. By calling <c>run/3</c> multiple times with appropriate
+ arguments, you can mimic the Perl option <c>/g</c>, and it is in this
+ kind of implementation where \G can be useful.</p>
+
+ <p>Notice, however, that the PCRE interpretation of \G, as the start of the
+ current match, is subtly different from Perl, which defines it as the end
+ of the previous match. In Perl, these can be different when the previously
+ matched string was empty. As PCRE does only one match at a time, it cannot
+ reproduce this behavior.</p>
+
+ <p>If all the alternatives of a pattern begin with \G, the expression is
+ anchored to the starting match position, and the "anchored" flag is set in
+ the compiled regular expression.</p>
+ </section>
-<p>The special property L&amp; is also supported: it matches a character that has
-the Lu, Ll, or Lt property, in other words, a letter that is not classified as
-a modifier or "other".</p>
-
-<p>The Cs (Surrogate) property applies only to characters in the range U+D800 to
-U+DFFF. Such characters are not valid in Unicode strings and so
-cannot be tested by PCRE. Perl does not support the Cs property</p>
-
-<p>The long synonyms for property names that Perl supports (such as \p{Letter})
-are not supported by PCRE, nor is it permitted to prefix any of these
-properties with "Is".</p>
-
-<p>No character that is in the Unicode table has the Cn (unassigned) property.
-Instead, this property is assumed for any code point that is not in the
-Unicode table.</p>
-
-<p>Specifying caseless matching does not affect these escape sequences. For
-example, \p{Lu} always matches only upper case letters. This is different from
-the behaviour of current versions of Perl.</p>
-<p>Matching characters by Unicode property is not fast, because PCRE has to do a
-multistage table lookup in order to find a character's property. That is why
-the traditional escape sequences such as \d and \w do not use Unicode
-properties in PCRE by default, though you can make them do so by setting the
-<c>ucp</c> option or by starting the pattern with (*UCP).</p>
-
-<p><em>Extended grapheme clusters</em></p>
-<p>The \X escape matches any number of Unicode characters that form an "extended
-grapheme cluster", and treats the sequence as an atomic group (see below).
-Up to and including release 8.31, PCRE matched an earlier, simpler definition
-that was equivalent to</p>
-
-<quote><p> (?&gt;\PM\pM*)</p></quote>
-
-<p>That is, it matched a character without the "mark" property, followed by zero
-or more characters with the "mark" property. Characters with the "mark"
-property are typically non-spacing accents that affect the preceding character.</p>
-
-<p>This simple definition was extended in Unicode to include more complicated
-kinds of composite character by giving each character a grapheme breaking
-property, and creating rules that use these properties to define the boundaries
-of extended grapheme clusters. In releases of PCRE later than 8.31, \X matches
-one of these clusters.</p>
-
-<p>\X always matches at least one character. Then it decides whether to add
-additional characters according to the following rules for ending a cluster:</p>
-<taglist>
-<tag>1.</tag> <item>End at the end of the subject string.</item>
-<tag>2.</tag> <item>Do not end between CR and LF; otherwise end after any control character.</item>
-<tag>3.</tag> <item>Do not break Hangul (a Korean script) syllable sequences. Hangul characters
-are of five types: L, V, T, LV, and LVT. An L character may be followed by an
-L, V, LV, or LVT character; an LV or V character may be followed by a V or T
-character; an LVT or T character may be follwed only by a T character.</item>
-<tag>4.</tag> <item>Do not end before extending characters or spacing marks. Characters with
-the "mark" property always have the "extend" grapheme breaking property.</item>
-<tag>5.</tag> <item>Do not end after prepend characters.</item>
-<tag>6.</tag> <item>Otherwise, end the cluster.</item>
-</taglist>
+ <section>
+ <marker id="sect4"></marker>
+ <title>Circumflex and Dollar</title>
+ <p>The circumflex and dollar metacharacters are zero-width assertions. That
+ is, they test for a particular condition to be true without consuming any
+ characters from the subject string.</p>
+
+ <p>Outside a character class, in the default matching mode, the circumflex
+ character is an assertion that is true only if the current matching point
+ is at the start of the subject string. If argument <c>startoffset</c> of
+ <seealso marker="#run/3"><c>run/3</c></seealso> is non-zero, circumflex
+ can never match if option <c>multiline</c> is unset. Inside a character
+ class, circumflex has an entirely different meaning (see below).</p>
+
+ <p>Circumflex needs not to be the first character of the pattern if
+ some alternatives are involved, but it is to be the first thing in
+ each alternative in which it appears if the pattern is ever to match that
+ branch. If all possible alternatives start with a circumflex, that is, if
+ the pattern is constrained to match only at the start of the subject, it
+ is said to be an "anchored" pattern. (There are also other constructs that
+ can cause a pattern to be anchored.)</p>
+
+ <p>The dollar character is an assertion that is true only if the current
+ matching point is at the end of the subject string, or immediately before
+ a newline at the end of the string (by default). Notice however that it
+ does not match the newline. Dollar needs not to be the last character of
+ the pattern if some alternatives are involved, but it is to be the
+ last item in any branch in which it appears. Dollar has no special meaning
+ in a character class.</p>
+
+ <p>The meaning of dollar can be changed so that it matches only at the very
+ end of the string, by setting option <c>dollar_endonly</c> at compile
+ time. This does not affect the \Z assertion.</p>
+
+ <p>The meanings of the circumflex and dollar characters are changed if
+ option <c>multiline</c> is set. When this is the case, a circumflex
+ matches immediately after internal newlines and at the start of the
+ subject string. It does not match after a newline that ends the string. A
+ dollar matches before any newlines in the string, and at the very end,
+ when <c>multiline</c> is set. When newline is specified as the
+ two-character sequence CRLF, isolated CR and LF characters do not
+ indicate newlines.</p>
+
+ <p>For example, the pattern /^abc$/ matches the subject string "def\nabc"
+ (where \n represents a newline) in multiline mode, but not otherwise.
+ So, patterns that are anchored in single-line mode because all
+ branches start with ^ are not anchored in multiline mode, and a match for
+ circumflex is possible when argument <em>startoffset</em> of <c>run/3</c>
+ is non-zero. Option <c>dollar_endonly</c> is ignored if <c>multiline</c>
+ is set.</p>
+
+ <p>Notice that the sequences \A, \Z, and \z can be used to match the start
+ and end of the subject in both modes. If all branches of a pattern start
+ with \A, it is always anchored, regardless if <c>multiline</c> is set.</p>
+ </section>
-<p><em>PCRE's additional properties</em></p>
-
-<p>As well as the standard Unicode properties described above, PCRE supports four
-more that make it possible to convert traditional escape sequences such as \w
-and \s and POSIX character classes to use Unicode properties. PCRE uses these
-non-standard, non-Perl properties internally when PCRE_UCP is set. However,
-they may also be used explicitly. These properties are:</p>
-<taglist>
- <tag>Xan</tag> <item>Any alphanumeric character</item>
- <tag>Xps</tag> <item>Any POSIX space character</item>
- <tag>Xsp</tag> <item>Any Perl space character</item>
- <tag>Xwd</tag> <item>Any Perl "word" character</item>
-</taglist>
-<p>Xan matches characters that have either the L (letter) or the N (number)
-property. Xps matches the characters tab, linefeed, vertical tab, form feed, or
-carriage return, and any other character that has the Z (separator) property.
-Xsp is the same as Xps, except that vertical tab is excluded. Xwd matches the
-same characters as Xan, plus underscore.</p>
-
-<p>There is another non-standard property, Xuc, which matches any character that
-can be represented by a Universal Character Name in C++ and other programming
-languages. These are the characters $, @, ` (grave accent), and all characters
-with Unicode code points greater than or equal to U+00A0, except for the
-surrogates U+D800 to U+DFFF. Note that most base (ASCII) characters are
-excluded. (Universal Character Names are of the form \uHHHH or \UHHHHHHHH
-where H is a hexadecimal digit. Note that the Xuc property does not match these
-sequences but the characters that they represent.)</p>
-
-<p><em>Resetting the match start</em></p>
-
-<p>The escape sequence \K causes any previously matched characters not to be
-included in the final matched sequence. For example, the pattern:</p>
-
-<quote><p> foo\Kbar</p></quote>
-
-<p>matches "foobar", but reports that it has matched "bar". This feature is
-similar to a lookbehind assertion
-<!-- HTML &lt;a href="#lookbehind"&gt; -->
-<!-- &lt;/a&gt; -->
-(described below).
-
-However, in this case, the part of the subject before the real match does not
-have to be of fixed length, as lookbehind assertions do. The use of \K does
-not interfere with the setting of
-captured substrings.
-For example, when the pattern</p>
-
-<quote><p> (foo)\Kbar</p></quote>
-
-<p>matches "foobar", the first substring is still set to "foo".</p>
-
-<p>Perl documents that the use of \K within assertions is "not well defined". In
-PCRE, \K is acted upon when it occurs inside positive assertions, but is
-ignored in negative assertions.</p>
-
-<p><em>Simple assertions</em></p>
-
-<p>The final use of backslash is for certain simple assertions. An
-assertion specifies a condition that has to be met at a particular
-point in a match, without consuming any characters from the subject
-string. The use of subpatterns for more complicated assertions is
-described below. The backslashed assertions are:</p>
-
-<taglist>
- <tag>\b</tag> <item>matches at a word boundary</item>
- <tag>\B</tag> <item>matches when not at a word boundary</item>
- <tag>\A</tag> <item>matches at the start of the subject</item>
- <tag>\Z</tag> <item>matches at the end of the subject
- also matches before a newline at the end of
- the subject</item>
- <tag>\z</tag> <item>matches only at the end of the subject</item>
- <tag>\G</tag> <item>matches at the first matching position in the
- subject</item>
-</taglist>
+ <section>
+ <marker id="sect5"></marker>
+ <title>Full Stop (Period, Dot) and \N</title>
+ <p>Outside a character class, a dot in the pattern matches any character in
+ the subject string except (by default) a character that signifies the end
+ of a line.</p>
+
+ <p>When a line ending is defined as a single character, dot never matches
+ that character. When the two-character sequence CRLF is used, dot does not
+ match CR if it is immediately followed by LF, otherwise it matches all
+ characters (including isolated CRs and LFs). When any Unicode line endings
+ are recognized, dot does not match CR, LF, or any of the other
+ line-ending characters.</p>
+
+ <p>The behavior of dot regarding newlines can be changed. If option
+ <c>dotall</c> is set, a dot matches any character, without exception. If
+ the two-character sequence CRLF is present in the subject string, it takes
+ two dots to match it.</p>
+
+ <p>The handling of dot is entirely independent of the handling of circumflex
+ and dollar, the only relationship is that both involve newlines. Dot has
+ no special meaning in a character class.</p>
+
+ <p>The escape sequence \N behaves like a dot, except that it is not affected
+ by option <c>PCRE_DOTALL</c>. That is, it matches any character except one
+ that signifies the end of a line. Perl also uses \N to match characters by
+ name but PCRE does not support this.</p>
+ </section>
-<p>Inside a character class, \b has a different meaning; it matches the backspace
-character. If any other of these assertions appears in a character class, by
-default it matches the corresponding literal character (for example, \B
-matches the letter B). </p>
-
-<p>A word boundary is a position in the subject string where the current character
-and the previous character do not both match \w or \W (i.e. one matches
-\w and the other matches \W), or the start or end of the string if the
-first or last character matches \w, respectively. In a UTF mode, the meanings
-of \w and \W can be changed by setting the <c>ucp</c> option. When this is
-done, it also affects \b and \B. Neither PCRE nor Perl has a separate "start
-of word" or "end of word" metasequence. However, whatever follows \b normally
-determines which it is. For example, the fragment \ba matches "a" at the start
-of a word.</p>
-
-<p>The \A, \Z, and \z assertions differ from the traditional circumflex and
-dollar (described in the next section) in that they only ever match at the very
-start and end of the subject string, whatever options are set. Thus, they are
-independent of multiline mode. These three assertions are not affected by the
-<c>notbol</c> or <c>noteol</c> options, which affect only the behaviour of the
-circumflex and dollar metacharacters. However, if the <em>startoffset</em>
-argument of <c>re:run/3</c> is non-zero, indicating that matching is to start
-at a point other than the beginning of the subject, \A can never match. The
-difference between \Z and \z is that \Z matches before a newline at the end
-of the string as well as at the very end, whereas \z matches only at the end.</p>
-
-<p>The \G assertion is true only when the current matching position is at the
-start point of the match, as specified by the <em>startoffset</em> argument of
-<c>re:run/3</c>. It differs from \A when the value of <em>startoffset</em> is
-non-zero. By calling <c>re:run/3</c> multiple times with appropriate
-arguments, you can mimic Perl's /g option, and it is in this kind of
-implementation where \G can be useful.</p>
-
-<p>Note, however, that PCRE's interpretation of \G, as the start of the current
-match, is subtly different from Perl's, which defines it as the end of the
-previous match. In Perl, these can be different when the previously matched
-string was empty. Because PCRE does just one match at a time, it cannot
-reproduce this behaviour.</p>
-
-<p>If all the alternatives of a pattern begin with \G, the expression is anchored
-to the starting match position, and the "anchored" flag is set in the compiled
-regular expression.</p>
-
-</section>
-
-<section><marker id="sect4"></marker><title>Circumflex and dollar</title>
-
-<p>The circumflex and dollar metacharacters are zero-width assertions. That is,
-they test for a particular condition being true without consuming any
-characters from the subject string.</p>
-
-<p>Outside a character class, in the default matching mode, the circumflex
-character is an assertion that is true only if the current matching point is at
-the start of the subject string. If the <i>startoffset</i> argument of
-<c>re:run/3</c> is non-zero, circumflex can never match if the <c>multiline</c>
-option is unset. Inside a character class, circumflex has an entirely different
-meaning (see below).</p>
-
-<p>Circumflex need not be the first character of the pattern if a number of
-alternatives are involved, but it should be the first thing in each alternative
-in which it appears if the pattern is ever to match that branch. If all
-possible alternatives start with a circumflex, that is, if the pattern is
-constrained to match only at the start of the subject, it is said to be an
-"anchored" pattern. (There are also other constructs that can cause a pattern
-to be anchored.)</p>
-
-<p>The dollar character is an assertion that is true only if the current matching
-point is at the end of the subject string, or immediately before a newline at
-the end of the string (by default). Note, however, that it does not actually
-match the newline. Dollar need not be the last character of the pattern if a
-number of alternatives are involved, but it should be the last item in any
-branch in which it appears. Dollar has no special meaning in a character class.</p>
-
-<p>The meaning of dollar can be changed so that it matches only at the
-very end of the string, by setting the <c>dollar_endonly</c> option at
-compile time. This does not affect the \Z assertion.</p>
-
-<p>The meanings of the circumflex and dollar characters are changed if the
-<c>multiline</c> option is set. When this is the case, a circumflex matches
-immediately after internal newlines as well as at the start of the subject
-string. It does not match after a newline that ends the string. A dollar
-matches before any newlines in the string, as well as at the very end, when
-<c>multiline</c> is set. When newline is specified as the two-character
-sequence CRLF, isolated CR and LF characters do not indicate newlines.</p>
-
-<p>For example, the pattern /^abc$/ matches the subject string
-"def\nabc" (where \n represents a newline) in multiline mode, but
-not otherwise. Consequently, patterns that are anchored in single line
-mode because all branches start with ^ are not anchored in multiline
-mode, and a match for circumflex is possible when the
-<em>startoffset</em> argument of <c>re:run/3</c> is non-zero. The
-<c>dollar_endonly</c> option is ignored if <c>multiline</c> is set.</p>
-
-<p>Note that the sequences \A, \Z, and \z can be used to match the start and
-end of the subject in both modes, and if all branches of a pattern start with
-\A it is always anchored, whether or not <c>multiline</c> is set.</p>
-
-
-</section>
-
-<section><marker id="sect5"></marker><title>Full stop (period, dot) and \N</title>
-
-<p>Outside a character class, a dot in the pattern matches any one character in
-the subject string except (by default) a character that signifies the end of a
-line.
-</p>
-
-<p>When a line ending is defined as a single character, dot never matches that
-character; when the two-character sequence CRLF is used, dot does not match CR
-if it is immediately followed by LF, but otherwise it matches all characters
-(including isolated CRs and LFs).
-When any Unicode line endings are being
-recognized, dot does not match CR or LF or any of the other line ending
-characters.
-</p>
-
-<p>The behaviour of dot with regard to newlines can be changed. If
-the <c>dotall</c> option is set, a dot matches any one character,
-without exception. If the two-character sequence CRLF is present in
-the subject string, it takes two dots to match it.</p>
-
-<p>The handling of dot is entirely independent of the handling of
-circumflex and dollar, the only relationship being that they both
-involve newlines. Dot has no special meaning in a character class.</p>
-
-<p>The escape sequence \N behaves like a dot, except that it is not affected by
-the PCRE_DOTALL option. In other words, it matches any character except one
-that signifies the end of a line. Perl also uses \N to match characters by
-name; PCRE does not support this.</p>
-
-</section>
-
-<section><marker id="sect6"></marker><title>Matching a single data unit</title>
-
-<p>Outside a character class, the escape sequence \C matches any one data unit,
-whether or not a UTF mode is set. One data unit is one
-byte. Unlike a dot, \C always
-matches line-ending characters. The feature is provided in Perl in order to
-match individual bytes in UTF-8 mode, but it is unclear how it can usefully be
-used. Because \C breaks up characters into individual data units, matching one
-unit with \C in a UTF mode means that the rest of the string may start with a
-malformed UTF character. This has undefined results, because PCRE assumes that
-it is dealing with valid UTF strings.</p>
-
-<p>PCRE does not allow \C to appear in lookbehind assertions (described below)
-in a UTF mode, because this would make it impossible to calculate the length of
-the lookbehind.</p>
-
-<p>In general, the \C escape sequence is best avoided. However, one
-way of using it that avoids the problem of malformed UTF characters is to use a
-lookahead to check the length of the next character, as in this pattern, which
-could be used with a UTF-8 string (ignore white space and line breaks):</p>
+ <section>
+ <marker id="sect6"></marker>
+ <title>Matching a Single Data Unit</title>
+ <p>Outside a character class, the escape sequence \C matches any data unit,
+ regardless if a UTF mode is set. One data unit is one byte. Unlike a dot,
+ \C always matches line-ending characters. The feature is provided in Perl
+ to match individual bytes in UTF-8 mode, but it is unclear how it can
+ usefully be used. As \C breaks up characters into individual data units,
+ matching one unit with \C in a UTF mode means that the remaining string
+ can start with a malformed UTF character. This has undefined results, as
+ PCRE assumes that it deals with valid UTF strings.</p>
+
+ <p>PCRE does not allow \C to appear in lookbehind assertions (described
+ below) in a UTF mode, as this would make it impossible to calculate the
+ length of the lookbehind.</p>
+
+ <p>The \C escape sequence is best avoided. However, one way of using it that
+ avoids the problem of malformed UTF characters is to use a lookahead to
+ check the length of the next character, as in the following pattern, which
+ can be used with a UTF-8 string (ignore whitespace and line breaks):</p>
<code type="none">
- (?| (?=[\x00-\x7f])(\C) |
- (?=[\x80-\x{7ff}])(\C)(\C) |
- (?=[\x{800}-\x{ffff}])(\C)(\C)(\C) |
- (?=[\x{10000}-\x{1fffff}])(\C)(\C)(\C)(\C))</code>
-
-<p>A group that starts with (?| resets the capturing parentheses numbers in each
-alternative (see "Duplicate Subpattern Numbers"
-below). The assertions at the start of each branch check the next UTF-8
-character for values whose encoding uses 1, 2, 3, or 4 bytes, respectively. The
-character's individual bytes are then captured by the appropriate number of
-groups.</p>
-
-</section>
-
-<section><marker id="sect7"></marker><title>Square brackets and character classes</title>
-
-<p>An opening square bracket introduces a character class, terminated by a closing
-square bracket. A closing square bracket on its own is not special by default.
-However, if the PCRE_JAVASCRIPT_COMPAT option is set, a lone closing square
-bracket causes a compile-time error. If a closing square bracket is required as
-a member of the class, it should be the first data character in the class
-(after an initial circumflex, if present) or escaped with a backslash.</p>
-
-<p>A character class matches a single character in the subject. In a UTF mode, the
-character may be more than one data unit long. A matched character must be in
-the set of characters defined by the class, unless the first character in the
-class definition is a circumflex, in which case the subject character must not
-be in the set defined by the class. If a circumflex is actually required as a
-member of the class, ensure it is not the first character, or escape it with a
-backslash.</p>
-
-<p>For example, the character class [aeiou] matches any lower case vowel, while
-[^aeiou] matches any character that is not a lower case vowel. Note that a
-circumflex is just a convenient notation for specifying the characters that
-are in the class by enumerating those that are not. A class that starts with a
-circumflex is not an assertion; it still consumes a character from the subject
-string, and therefore it fails if the current pointer is at the end of the
-string.</p>
-
-<p>In UTF-8 mode, characters with values greater than 255 (0xffff)
-can be included in a class as a literal string of data units, or by using the
-\x{ escaping mechanism.</p>
-
-<p>When caseless matching is set, any letters in a class represent both their
-upper case and lower case versions, so for example, a caseless [aeiou] matches
-"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would. In a UTF mode, PCRE always understands the concept of
-case for characters whose values are less than 256, so caseless matching is
-always possible. For characters with higher values, the concept of case is
-supported if PCRE is compiled with Unicode property support, but not otherwise.
-If you want to use caseless matching in a UTF mode for characters 256 and
-above, you must ensure that PCRE is compiled with Unicode property support as
-well as with UTF support.</p>
-
-<p>Characters that might indicate line breaks are never treated in any special way
-when matching character classes, whatever line-ending sequence is in use, and
-whatever setting of the PCRE_DOTALL and PCRE_MULTILINE options is used. A class
-such as [^a] always matches one of these characters.</p>
-
-<p>The minus (hyphen) character can be used to specify a range of characters in a
-character class. For example, [d-m] matches any letter between d and m,
-inclusive. If a minus character is required in a class, it must be escaped with
-a backslash or appear in a position where it cannot be interpreted as
-indicating a range, typically as the first or last character in the class.</p>
-
-<p>It is not possible to have the literal character "]" as the end character of a
-range. A pattern such as [W-]46] is interpreted as a class of two characters
-("W" and "-") followed by a literal string "46]", so it would match "W46]" or
-"-46]". However, if the "]" is escaped with a backslash it is interpreted as
-the end of range, so [W-\]46] is interpreted as a class containing a range
-followed by two other characters. The octal or hexadecimal representation of
-"]" can also be used to end a range.</p>
-
-<p>Ranges operate in the collating sequence of character values. They can also be
-used for characters specified numerically, for example [\000-\037]. Ranges
-can include any characters that are valid for the current mode.</p>
-
-<p>If a range that includes letters is used when caseless matching is set, it
-matches the letters in either case. For example, [W-c] is equivalent to
-[][\\^_`wxyzabc], matched caselessly, and in a non-UTF mode, if character
-tables for a French locale are in use, [\xc8-\xcb] matches accented E
-characters in both cases. In UTF modes, PCRE supports the concept of case for
-characters with values greater than 255 only when it is compiled with Unicode
-property support.</p>
-
-<p>The character escape sequences \d, \D, \h, \H, \p, \P, \s, \S, \v,
-\V, \w, and \W may appear in a character class, and add the characters that
-they match to the class. For example, [\dABCDEF] matches any hexadecimal
-digit. In UTF modes, the <c>ucp</c> option affects the meanings of \d, \s, \w
-and their upper case partners, just as it does when they appear outside a
-character class, as described in the section entitled
-"Generic character types"
-above. The escape sequence \b has a different meaning inside a character
-class; it matches the backspace character. The sequences \B, \N, \R, and \X
-are not special inside a character class. Like any other unrecognized escape
-sequences, they are treated as the literal characters "B", "N", "R", and "X".</p>
-
-<p>A circumflex can conveniently be used with the upper case character types to
-specify a more restricted set of characters than the matching lower case type.
-For example, the class [^\W_] matches any letter or digit, but not underscore,
-whereas [\w] includes underscore. A positive character class should be read as
-"something OR something OR ..." and a negative class as "NOT something AND NOT
-something AND NOT ...".</p>
-
-<p>The only metacharacters that are recognized in character classes
-are backslash, hyphen (only where it can be interpreted as specifying
-a range), circumflex (only at the start), opening square bracket (only
-when it can be interpreted as introducing a POSIX class name - see the
-next section), and the terminating closing square bracket. However,
-escaping other non-alphanumeric characters does no harm.</p>
-</section>
-
-<section><marker id="sect8"></marker><title>POSIX character classes</title>
-
-<p>Perl supports the POSIX notation for character classes. This uses names
-enclosed by [: and :] within the enclosing square brackets. PCRE also supports
-this notation. For example,</p>
-
-<quote><p> [01[:alpha:]%]</p></quote>
-
-<p>matches "0", "1", any alphabetic character, or "%". The supported class names
-are:</p>
-
-<taglist>
- <tag>alnum</tag> <item>letters and digits</item>
- <tag>alpha</tag> <item>letters</item>
- <tag>ascii</tag> <item>character codes 0 - 127</item>
- <tag>blank</tag> <item>space or tab only</item>
- <tag>cntrl</tag> <item>control characters</item>
- <tag>digit</tag> <item>decimal digits (same as \d)</item>
- <tag>graph</tag> <item>printing characters, excluding space</item>
- <tag>lower</tag> <item>lower case letters</item>
- <tag>print</tag> <item>printing characters, including space</item>
- <tag>punct</tag> <item>printing characters, excluding letters and digits and space</item>
- <tag>space</tag> <item>whitespace (not quite the same as \s)</item>
- <tag>upper</tag> <item>upper case letters</item>
- <tag>word</tag> <item>"word" characters (same as \w)</item>
- <tag>xdigit</tag> <item>hexadecimal digits</item>
-</taglist>
-
-<p>The "space" characters are HT (9), LF (10), VT (11), FF (12), CR (13), and
-space (32). Notice that this list includes the VT character (code 11). This
-makes "space" different to \s, which does not include VT (for Perl
-compatibility).</p>
-
-<p>The name "word" is a Perl extension, and "blank" is a GNU extension
-from Perl 5.8. Another Perl extension is negation, which is indicated
-by a ^ character after the colon. For example,</p>
-
-<quote><p> [12[:^digit:]]</p></quote>
-
-<p>matches "1", "2", or any non-digit. PCRE (and Perl) also recognize the POSIX
-syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
-supported, and an error is given if they are encountered.</p>
-
-<p>By default, in UTF modes, characters with values greater than 255 do not match
-any of the POSIX character classes. However, if the PCRE_UCP option is passed
-to <em>pcre_compile()</em>, some of the classes are changed so that Unicode
-character properties are used. This is achieved by replacing the POSIX classes
-by other sequences, as follows:</p>
-
-<taglist>
- <tag>[:alnum:]</tag> <item>becomes <em>\p{Xan}</em></item>
- <tag>[:alpha:]</tag> <item>becomes <em>\p{L}</em></item>
- <tag>[:blank:]</tag> <item>becomes <em>\h</em></item>
- <tag>[:digit:]</tag> <item>becomes <em>\p{Nd}</em></item>
- <tag>[:lower:]</tag> <item>becomes <em>\p{Ll}</em></item>
- <tag>[:space:]</tag> <item>becomes <em>\p{Xps}</em></item>
- <tag>[:upper:]</tag> <item>becomes <em>\p{Lu}</em></item>
- <tag>[:word:]</tag> <item>becomes <em>\p{Xwd}</em></item>
-</taglist>
-
-<p>Negated versions, such as [:^alpha:] use \P instead of \p. The other POSIX
-classes are unchanged, and match only characters with code points less than
-256.</p>
-
-</section>
-
-
-<section><marker id="sect9"></marker><title>Vertical bar</title>
-
-<p>Vertical bar characters are used to separate alternative
-patterns. For example, the pattern</p>
-
-<quote><p> gilbert|sullivan</p></quote>
-
-<p>matches either "gilbert" or "sullivan". Any number of alternatives
-may appear, and an empty alternative is permitted (matching the empty
-string). The matching process tries each alternative in turn, from
-left to right, and the first one that succeeds is used. If the
-alternatives are within a subpattern (defined below), "succeeds" means
-matching the rest of the main pattern as well as the alternative in
-the subpattern.</p>
-
-</section>
-
-<section><marker id="sect10"></marker><title>Internal option setting</title>
-
-<p>The settings of the <c>caseless</c>, <c>multiline</c>, <c>dotall</c>, and
-<c>extended</c> options (which are Perl-compatible) can be changed from within
-the pattern by a sequence of Perl option letters enclosed between "(?" and ")".
-The option letters are</p>
-
-<taglist>
- <tag>i</tag> <item>for <c>caseless</c></item>
- <tag>m</tag> <item>for <c>multiline</c></item>
- <tag>s</tag> <item>for <c>dotall</c></item>
- <tag>x</tag> <item>for <c>extended</c></item>
-</taglist>
-
-<p>For example, (?im) sets caseless, multiline matching. It is also possible to
-unset these options by preceding the letter with a hyphen, and a combined
-setting and unsetting such as (?im-sx), which sets <c>caseless</c> and
-<c>multiline</c> while unsetting <c>dotall</c> and <c>extended</c>, is also
-permitted. If a letter appears both before and after the hyphen, the option is
-unset.</p>
-
-<p>The PCRE-specific options <c>dupnames</c>, <c>ungreedy</c>, and
-<c>extra</c> can be changed in the same way as the Perl-compatible
-options by using the characters J, U and X respectively.</p>
-
-<p>When one of these option changes occurs at top level (that is, not inside
-subpattern parentheses), the change applies to the remainder of the pattern
-that follows. If the change is placed right at the start of a pattern, PCRE
-extracts it into the global options.</p>
-
-<p>An option change within a subpattern (see below for a description of
-subpatterns) affects only that part of the subpattern that follows it, so</p>
-
-<quote><p> (a(?i)b)c</p></quote>
-
-<p>matches abc and aBc and no other strings (assuming <c>caseless</c>
-is not used). By this means, options can be made to have different
-settings in different parts of the pattern. Any changes made in one
-alternative do carry on into subsequent branches within the same
-subpattern. For example,</p>
-
-<quote><p> (a(?i)b|c)</p></quote>
-
-<p>matches "ab", "aB", "c", and "C", even though when matching "C" the first
-branch is abandoned before the option setting. This is because the effects of
-option settings happen at compile time. There would be some very weird
-behaviour otherwise.</p>
-
-<p><em>Note:</em> There are other PCRE-specific options that can be set by the
-application when the compiling or matching functions are called. In some cases
-the pattern can contain special leading sequences such as (*CRLF) to override
-what the application has set or what has been defaulted. Details are given in
-the section entitled "Newline sequences"
-above. There are also the (*UTF8) and (*UCP) leading
-sequences that can be used to set UTF and Unicode property modes; they are
-equivalent to setting the <c>unicode</c> and the <c>ucp</c>
-options, respectively. The (*UTF) sequence is a generic version that can be
-used with any of the libraries. However, the application can set the
-<c>never_utf</c> option, which locks out the use of the (*UTF) sequences.</p>
-
-</section>
-
-<section><marker id="sect11"></marker><title>Subpatterns</title>
-
-<p>Subpatterns are delimited by parentheses (round brackets), which
-can be nested. Turning part of a pattern into a subpattern does two
-things:</p>
-
-<p>1. It localizes a set of alternatives. For example, the pattern</p>
-
-<quote><p> cat(aract|erpillar|)</p></quote>
-
-<p>matches "cataract", "caterpillar", or "cat". Without the parentheses, it would
-match "cataract", "erpillar" or an empty string.</p>
-
-<p>2. It sets up the subpattern as a capturing subpattern. This means that, when
-the complete pattern matches, that portion of the subject string that matched the
-subpattern is passed back to the caller via the return value of
-<c>re:run/3</c>.</p>
-
-<p>Opening parentheses are counted from left to right (starting
-from 1) to obtain numbers for the capturing subpatterns.For example, if the string
-"the red king" is matched against the pattern</p>
-
-<quote><p> the ((red|white) (king|queen))</p></quote>
-
-<p>the captured substrings are "red king", "red", and "king", and are numbered 1,
-2, and 3, respectively.</p>
-
-<p>The fact that plain parentheses fulfil two functions is not always helpful.
-There are often times when a grouping subpattern is required without a
-capturing requirement. If an opening parenthesis is followed by a question mark
-and a colon, the subpattern does not do any capturing, and is not counted when
-computing the number of any subsequent capturing subpatterns. For example, if
-the string "the white queen" is matched against the pattern</p>
-
-<quote><p> the ((?:red|white) (king|queen))</p></quote>
-
-<p>the captured substrings are "white queen" and "queen", and are numbered 1 and
-2. The maximum number of capturing subpatterns is 65535.</p>
-
-<p>As a convenient shorthand, if any option settings are required at the start of
-a non-capturing subpattern, the option letters may appear between the "?" and
-the ":". Thus the two patterns</p>
+(?| (?=[\x00-\x7f])(\C) |
+ (?=[\x80-\x{7ff}])(\C)(\C) |
+ (?=[\x{800}-\x{ffff}])(\C)(\C)(\C) |
+ (?=[\x{10000}-\x{1fffff}])(\C)(\C)(\C)(\C))</code>
+
+ <p>A group that starts with (?| resets the capturing parentheses numbers in
+ each alternative (see section <seealso marker="#sect12">Duplicate
+ Subpattern Numbers</seealso>). The assertions at the start of each branch
+ check the next UTF-8 character for values whose encoding uses 1, 2, 3, or
+ 4 bytes, respectively. The individual bytes of the character are then
+ captured by the appropriate number of groups.</p>
+ </section>
-<list>
-<item>(?i:saturday|sunday)</item>
-<item>(?:(?i)saturday|sunday)</item>
-</list>
+ <section>
+ <marker id="sect7"></marker>
+ <title>Square Brackets and Character Classes</title>
+ <p>An opening square bracket introduces a character class, terminated by a
+ closing square bracket. A closing square bracket on its own is not special
+ by default. However, if option <c>PCRE_JAVASCRIPT_COMPAT</c> is set, a
+ lone closing square bracket causes a compile-time error. If a closing
+ square bracket is required as a member of the class, it is to be the first
+ data character in the class (after an initial circumflex, if present) or
+ escaped with a backslash.</p>
+
+ <p>A character class matches a single character in the subject. In a UTF
+ mode, the character can be more than one data unit long. A matched
+ character must be in the set of characters defined by the class, unless
+ the first character in the class definition is a circumflex, in which case
+ the subject character must not be in the set defined by the class. If a
+ circumflex is required as a member of the class, ensure that it is not the
+ first character, or escape it with a backslash.</p>
+
+ <p>For example, the character class <c>[aeiou]</c> matches any lowercase
+ vowel, while <c>[^aeiou]</c> matches any character that is not a lowercase
+ vowel. Notice that a circumflex is just a convenient notation for
+ specifying the characters that are in the class by enumerating those that
+ are not. A class that starts with a circumflex is not an assertion; it
+ still consumes a character from the subject string, and therefore it fails
+ if the current pointer is at the end of the string.</p>
+
+ <p>In UTF-8 mode, characters with values &gt; 255 (0xffff) can be included
+ in a class as a literal string of data units, or by using the \x{ escaping
+ mechanism.</p>
+
+ <p>When caseless matching is set, any letters in a class represent both
+ their uppercase and lowercase versions. For example, a caseless
+ <c>[aeiou]</c> matches "A" and "a", and a caseless <c>[^aeiou]</c> does
+ not match "A", but a caseful version would. In a UTF mode, PCRE always
+ understands the concept of case for characters whose values are &lt; 256,
+ so caseless matching is always possible. For characters with higher
+ values, the concept of case is supported only if PCRE is compiled with
+ Unicode property support. If you want to use caseless matching in a UTF
+ mode for characters &gt;=, ensure that PCRE is compiled with Unicode
+ property support and with UTF support.</p>
+
+ <p>Characters that can indicate line breaks are never treated in any special
+ way when matching character classes, whatever line-ending sequence is in
+ use, and whatever setting of options <c>PCRE_DOTALL</c> and
+ <c>PCRE_MULTILINE</c> is used. A class such as [^a] always matches one of
+ these characters.</p>
+
+ <p>The minus (hyphen) character can be used to specify a range of characters
+ in a character class. For example, [d-m] matches any letter between d and
+ m, inclusive. If a minus character is required in a class, it must be
+ escaped with a backslash or appear in a position where it cannot be
+ interpreted as indicating a range, typically as the first or last
+ character in the class.</p>
+
+ <p>The literal character "]" cannot be the end character of a range. A
+ pattern such as [W-]46] is interpreted as a class of two characters ("W"
+ and "-") followed by a literal string "46]", so it would match "W46]" or
+ "-46]". However, if "]" is escaped with a backslash, it is interpreted as
+ the end of range, so [W-\]46] is interpreted as a class containing a range
+ followed by two other characters. The octal or hexadecimal representation
+ of "]" can also be used to end a range.</p>
+
+ <p>Ranges operate in the collating sequence of character values. They can
+ also be used for characters specified numerically, for example,
+ [\000-\037]. Ranges can include any characters that are valid for the
+ current mode.</p>
+
+ <p>If a range that includes letters is used when caseless matching is set,
+ it matches the letters in either case. For example, [W-c] is equivalent to
+ [][\\^_`wxyzabc], matched caselessly. In a non-UTF mode, if character
+ tables for a French locale are in use, [\xc8-\xcb] matches accented E
+ characters in both cases. In UTF modes, PCRE supports the concept of case
+ for characters with values &gt; 255 only when it is compiled with Unicode
+ property support.</p>
+
+ <p>The character escape sequences \d, \D, \h, \H, \p, \P, \s, \S, \v, \V,
+ \w, and \W can appear in a character class, and add the characters that
+ they match to the class. For example, [\dABCDEF] matches any hexadecimal
+ digit. In UTF modes, option <c>ucp</c> affects the meanings of \d, \s, \w
+ and their uppercase partners, just as it does when they appear outside a
+ character class, as described in section
+ <seealso marker="#generic_character_types">Generic Character
+ Types</seealso> earlier. The escape sequence \b has a different meaning
+ inside a character class; it matches the backspace character. The
+ sequences \B, \N, \R, and \X are not special inside a character class.
+ Like any other unrecognized escape sequences, they are treated as the
+ literal characters "B", "N", "R", and "X".</p>
+
+ <p>A circumflex can conveniently be used with the uppercase character types
+ to specify a more restricted set of characters than the matching lowercase
+ type. For example, class [^\W_] matches any letter or digit, but not
+ underscore, while [\w] includes underscore. A positive character class
+ is to be read as "something OR something OR ..." and a negative class as
+ "NOT something AND NOT something AND NOT ...".</p>
+
+ <p>Only the following metacharacters are recognized in character
+ classes:</p>
+
+ <list type="bulleted">
+ <item>Backslash</item>
+ <item>Hyphen (only where it can be interpreted as specifying a
+ range)</item>
+ <item>Circumflex (only at the start)</item>
+ <item>Opening square bracket (only when it can be interpreted as
+ introducing a Posix class name; see the next section)</item>
+ <item>Terminating closing square bracket</item>
+ </list>
+
+ <p>However, escaping other non-alphanumeric characters does no harm.</p>
+ </section>
-<p>match exactly the same set of strings. Because alternative branches are tried
-from left to right, and options are not reset until the end of the subpattern
-is reached, an option setting in one branch does affect subsequent branches, so
-the above patterns match "SUNDAY" as well as "Saturday".</p>
+ <section>
+ <marker id="sect8"></marker>
+ <title>Posix Character Classes</title>
+ <p>Perl supports the Posix notation for character classes. This uses names
+ enclosed by [: and :] within the enclosing square brackets. PCRE also
+ supports this notation. For example, the following matches "0", "1", any
+ alphabetic character, or "%":</p>
+
+ <code>
+[01[:alpha:]%]</code>
+
+ <p>The following are the supported class names:</p>
+
+ <taglist>
+ <tag>alnum</tag><item>Letters and digits</item>
+ <tag>alpha</tag><item>Letters</item>
+ <tag>ascii</tag><item>Character codes 0-127</item>
+ <tag>blank</tag><item>Space or tab only</item>
+ <tag>cntrl</tag><item>Control characters</item>
+ <tag>digit</tag><item>Decimal digits (same as \d)</item>
+ <tag>graph</tag><item>Printing characters, excluding space</item>
+ <tag>lower</tag><item>Lowercase letters</item>
+ <tag>print</tag><item>Printing characters, including space</item>
+ <tag>punct</tag><item>Printing characters, excluding letters, digits, and
+ space</item>
+ <tag>space</tag><item>Whitespace (not quite the same as \s)</item>
+ <tag>upper</tag><item>Uppercase letters</item>
+ <tag>word</tag><item>"Word" characters (same as \w)</item>
+ <tag>xdigit</tag><item>Hexadecimal digits</item>
+ </taglist>
+
+ <p>The "space" characters are HT (9), LF (10), VT (11), FF (12), CR (13),
+ and space (32). Notice that this list includes the VT character (code 11).
+ This makes "space" different to \s, which does not include VT (for Perl
+ compatibility).</p>
+
+ <p>The name "word" is a Perl extension, and "blank" is a GNU extension from
+ Perl 5.8. Another Perl extension is negation, which is indicated by a ^
+ character after the colon. For example, the following matches "1", "2",
+ or any non-digit:</p>
+
+ <code>
+[12[:^digit:]]</code>
+
+ <p>PCRE (and Perl) also recognize the Posix syntax [.ch.] and [=ch=] where
+ "ch" is a "collating element", but these are not supported, and an error
+ is given if they are encountered.</p>
+
+ <p>By default, in UTF modes, characters with values &gt; 255 do not match
+ any of the Posix character classes. However, if option <c>PCRE_UCP</c> is
+ passed to <c>pcre_compile()</c>, some of the classes are changed so that
+ Unicode character properties are used. This is achieved by replacing the
+ Posix classes by other sequences, as follows:</p>
+
+ <taglist>
+ <tag>[:alnum:]</tag><item>Becomes <em>\p{Xan}</em></item>
+ <tag>[:alpha:]</tag><item>Becomes <em>\p{L}</em></item>
+ <tag>[:blank:]</tag><item>Becomes <em>\h</em></item>
+ <tag>[:digit:]</tag><item>Becomes <em>\p{Nd}</em></item>
+ <tag>[:lower:]</tag><item>Becomes <em>\p{Ll}</em></item>
+ <tag>[:space:]</tag><item>Becomes <em>\p{Xps}</em></item>
+ <tag>[:upper:]</tag><item>Becomes <em>\p{Lu}</em></item>
+ <tag>[:word:]</tag><item>Becomes <em>\p{Xwd}</em></item>
+ </taglist>
+
+ <p>Negated versions, such as [:^alpha:], use \P instead of \p. The other
+ Posix classes are unchanged, and match only characters with code points
+ &lt; 256.</p>
+ </section>
-</section>
+ <section>
+ <marker id="sect9"></marker>
+ <title>Vertical Bar</title>
+ <p>Vertical bar characters are used to separate alternative patterns. For
+ example, the following pattern matches either "gilbert" or "sullivan":</p>
+
+ <code>
+gilbert|sullivan</code>
+
+ <p>Any number of alternatives can appear, and an empty alternative is
+ permitted (matching the empty string). The matching process tries each
+ alternative in turn, from left to right, and the first that succeeds is
+ used. If the alternatives are within a subpattern (defined in section
+ <seealso marker="#sect11">Subpatterns</seealso>), "succeeds" means
+ matching the remaining main pattern and the alternative in the
+ subpattern.</p>
+ </section>
-<section><marker id="sect12"></marker><title>Duplicate subpattern numbers</title>
+ <section>
+ <marker id="sect10"></marker>
+ <title>Internal Option Setting</title>
+ <p>The settings of the Perl-compatible options <c>caseless</c>,
+ <c>multiline</c>, <c>dotall</c>, and <c>extended</c> can be changed from
+ within the pattern by a sequence of Perl option letters enclosed between
+ "(?" and ")". The option letters are as follows:</p>
+
+ <taglist>
+ <tag>i</tag><item>For <c>caseless</c></item>
+ <tag>m</tag><item>For <c>multiline</c></item>
+ <tag>s</tag><item>For <c>dotall</c></item>
+ <tag>x</tag><item>For <c>extended</c></item>
+ </taglist>
+
+ <p>For example, <c>(?im)</c> sets caseless, multiline matching. These
+ options can also be unset by preceding the letter with a hyphen. A
+ combined setting and unsetting such as <c>(?im-sx)</c>, which sets
+ <c>caseless</c> and <c>multiline</c>, while unsetting <c>dotall</c> and
+ <c>extended</c>, is also permitted. If a letter appears both before and
+ after the hyphen, the option is unset.</p>
+
+ <p>The PCRE-specific options <c>dupnames</c>, <c>ungreedy</c>, and
+ <c>extra</c> can be changed in the same way as the Perl-compatible
+ options by using the characters J, U, and X respectively.</p>
+
+ <p>When one of these option changes occurs at top-level (that is, not inside
+ subpattern parentheses), the change applies to the remainder of the
+ pattern that follows. If the change is placed right at the start of a
+ pattern, PCRE extracts it into the global options.</p>
+ <p>An option change within a subpattern (see section
+ <seealso marker="#sect11">Subpatterns</seealso>) affects only that part of
+ the subpattern that follows it. So, the following matches abc and aBc and
+ no other strings (assuming <c>caseless</c> is not used):</p>
+
+ <code>
+(a(?i)b)c</code>
+
+ <p>By this means, options can be made to have different settings in
+ different parts of the pattern. Any changes made in one alternative do
+ carry on into subsequent branches within the same subpattern. For
+ example:</p>
+
+ <code>
+(a(?i)b|c)</code>
+
+ <p>matches "ab", "aB", "c", and "C", although when matching "C" the first
+ branch is abandoned before the option setting. This is because the effects
+ of option settings occur at compile time. There would be some weird
+ behavior otherwise.</p>
-<p>Perl 5.10 introduced a feature whereby each alternative in a subpattern uses
-the same numbers for its capturing parentheses. Such a subpattern starts with
-(?| and is itself a non-capturing subpattern. For example, consider this
-pattern:</p>
+ <note>
+ <p>Other PCRE-specific options can be set by the application when the
+ compiling or matching functions are called. Sometimes the pattern can
+ contain special leading sequences, such as (*CRLF), to override what
+ the application has set or what has been defaulted. Details are provided
+ in section <seealso marker="#newline_sequences">
+ Newline Sequences</seealso> earlier.</p>
+ <p>The (*UTF8) and (*UCP) leading sequences can be used to set UTF and
+ Unicode property modes. They are equivalent to setting options
+ <c>unicode</c> and <c>ucp</c>, respectively. The (*UTF) sequence is a
+ generic version that can be used with any of the libraries. However,
+ the application can set option <c>never_utf</c>, which locks out the
+ use of the (*UTF) sequences.</p>
+ </note>
+ </section>
-<quote><p> (?|(Sat)ur|(Sun))day</p></quote>
+ <section>
+ <marker id="sect11"></marker>
+ <title>Subpatterns</title>
+ <p>Subpatterns are delimited by parentheses (round brackets), which can be
+ nested. Turning part of a pattern into a subpattern does two things:</p>
-<p>Because the two alternatives are inside a (?| group, both sets of capturing
-parentheses are numbered one. Thus, when the pattern matches, you can look
-at captured substring number one, whichever alternative matched. This construct
-is useful when you want to capture part, but not all, of one of a number of
-alternatives. Inside a (?| group, parentheses are numbered as usual, but the
-number is reset at the start of each branch. The numbers of any capturing
-parentheses that follow the subpattern start after the highest number used in
-any branch. The following example is taken from the Perl documentation. The
-numbers underneath show in which buffer the captured content will be stored.</p>
+ <taglist>
+ <tag>1.</tag>
+ <item>
+ <p>It localizes a set of alternatives. For example, the following
+ pattern matches "cataract", "caterpillar", or "cat":</p>
+ <code>
+cat(aract|erpillar|)</code>
+ <p>Without the parentheses, it would match "cataract", "erpillar", or an
+ empty string.</p>
+ </item>
+ <tag>2.</tag>
+ <item>
+ <p>It sets up the subpattern as a capturing subpattern. That is, when
+ the complete pattern matches, that portion of the subject string that
+ matched the subpattern is passed back to the caller through the
+ return value of <seealso marker="#run/3"><c>run/3</c></seealso>.</p>
+ </item>
+ </taglist>
+
+ <p>Opening parentheses are counted from left to right (starting from 1) to
+ obtain numbers for the capturing subpatterns. For example, if the string
+ "the red king" is matched against the following pattern, the captured
+ substrings are "red king", "red", and "king", and are numbered 1, 2, and
+ 3, respectively:</p>
+
+ <code>
+the ((red|white) (king|queen))</code>
+
+ <p>It is not always helpful that plain parentheses fulfill two functions.
+ Often a grouping subpattern is required without a capturing requirement.
+ If an opening parenthesis is followed by a question mark and a colon, the
+ subpattern does not do any capturing, and is not counted when computing
+ the number of any subsequent capturing subpatterns. For example, if the
+ string "the white queen" is matched against the following pattern, the
+ captured substrings are "white queen" and "queen", and are numbered 1 and
+ 2:</p>
+
+ <code>
+the ((?:red|white) (king|queen))</code>
+
+ <p>The maximum number of capturing subpatterns is 65535.</p>
+
+ <p>As a convenient shorthand, if any option settings are required at the
+ start of a non-capturing subpattern, the option letters can appear between
+ "?" and ":". Thus, the following two patterns match the same set of
+ strings:</p>
+
+ <code>
+(?i:saturday|sunday)
+(?:(?i)saturday|sunday)</code>
+
+ <p>As alternative branches are tried from left to right, and options are not
+ reset until the end of the subpattern is reached, an option setting in one
+ branch does affect subsequent branches, so the above patterns match both
+ "SUNDAY" and "Saturday".</p>
+ </section>
-<code type="none">
- # before ---------------branch-reset----------- after
- / ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x
- # 1 2 2 3 2 3 4</code>
-
-<p>A back reference to a numbered subpattern uses the most recent value that is
-set for that number by any subpattern. The following pattern matches "abcabc"
-or "defdef":</p>
-
-<quote><p> /(?|(abc)|(def))\1/</p></quote>
-
-<p>In contrast, a subroutine call to a numbered subpattern always refers to the
-first one in the pattern with the given number. The following pattern matches
-"abcabc" or "defabc":</p>
-
-<quote><p> /(?|(abc)|(def))(?1)/</p></quote>
-
-<p>If a condition test
-for a subpattern's having matched refers to a non-unique number, the test is
-true if any of the subpatterns of that number have matched.</p>
-
-<p>An alternative approach to using this "branch reset" feature is to use
-duplicate named subpatterns, as described in the next section.</p>
-
-</section>
-
-<section><marker id="sect13"></marker><title>Named subpatterns</title>
-
-<p>Identifying capturing parentheses by number is simple, but it can be very hard
-to keep track of the numbers in complicated regular expressions. Furthermore,
-if an expression is modified, the numbers may change. To help with this
-difficulty, PCRE supports the naming of subpatterns. This feature was not
-added to Perl until release 5.10. Python had the feature earlier, and PCRE
-introduced it at release 4.0, using the Python syntax. PCRE now supports both
-the Perl and the Python syntax. Perl allows identically numbered subpatterns to
-have different names, but PCRE does not.</p>
-
-<p>In PCRE, a subpattern can be named in one of three ways:
-(?&lt;name&gt;...) or (?'name'...) as in Perl, or (?P&lt;name&gt;...)
-as in Python. References to capturing parentheses from other parts of
-the pattern, such as back references, recursion, and conditions, can be
-made by name as well as by number.</p>
-
-<p>Names consist of up to 32 alphanumeric characters and underscores. Named
-capturing parentheses are still allocated numbers as well as names, exactly as
-if the names were not present.
-<!-- XXX C Interface
-The PCRE API provides function calls for
-extracting the name-to-number translation table from a compiled pattern. There
-is also a convenience function for extracting a captured substring by name.
--->
-The <c>capture</c> specification to <c>re:run/3</c> can use named values if they are present in the regular expression.
-</p>
-
-<p>By default, a name must be unique within a pattern, but it is possible to relax
-this constraint by setting the <c>dupnames</c> option at compile time. (Duplicate
-names are also always permitted for subpatterns with the same number, set up as
-described in the previous section.) Duplicate names can be useful for patterns
-where only one instance of the named parentheses can match. Suppose you want to
-match the name of a weekday, either as a 3-letter abbreviation or as the full
-name, and in both cases you want to extract the abbreviation. This pattern
-(ignoring the line breaks) does the job:</p>
+ <section>
+ <marker id="sect12"></marker>
+ <title>Duplicate Subpattern Numbers</title>
+ <p>Perl 5.10 introduced a feature where each alternative in a subpattern
+ uses the same numbers for its capturing parentheses. Such a subpattern
+ starts with <c>(?|</c> and is itself a non-capturing subpattern. For
+ example, consider the following pattern:</p>
+
+ <code>
+(?|(Sat)ur|(Sun))day</code>
+
+ <p>As the two alternatives are inside a <c>(?|</c> group, both sets of
+ capturing parentheses are numbered one. Thus, when the pattern matches,
+ you can look at captured substring number one, whichever alternative
+ matched. This construct is useful when you want to capture a part, but
+ not all, of one of many alternatives. Inside a <c>(?|</c> group,
+ parentheses are numbered as usual, but the number is reset at the start
+ of each branch. The numbers of any capturing parentheses that follow the
+ subpattern start after the highest number used in any branch.
+ The following example is from the Perl documentation; the numbers
+ underneath show in which buffer the captured content is stored:</p>
<code type="none">
- (?&lt;DN&gt;Mon|Fri|Sun)(?:day)?|
- (?&lt;DN&gt;Tue)(?:sday)?|
- (?&lt;DN&gt;Wed)(?:nesday)?|
- (?&lt;DN&gt;Thu)(?:rsday)?|
- (?&lt;DN&gt;Sat)(?:urday)?</code>
-
-<p>There are five capturing substrings, but only one is ever set after a match.
-(An alternative way of solving this problem is to use a "branch reset"
-subpattern, as described in the previous section.)</p>
-
-<!-- XXX C Interface
-
-<p>The convenience function for extracting the data by name returns the substring
-for the first (and in this example, the only) subpattern of that name that
-matched. This saves searching to find which numbered subpattern it was. If you
-make a reference to a non-unique named subpattern from elsewhere in the
-pattern, the one that corresponds to the lowest number is used. For further
-details of the interfaces for handling named subpatterns, see the
-<em>pcreapi</em>
-
-documentation.</p>
--->
-
-<p>In case of capturing named subpatterns which names are not unique, the first matching occurrence (counted from left to right in the subject) is returned from <c>re:exec/3</c>, if the name is specified in the <c>values</c> part of the <c>capture</c> statement. The <c>all_names</c> capturing value will match all of the names in the same way.</p>
-
-<p><em>Warning:</em> You cannot use different names to distinguish between two
-subpatterns with the same number because PCRE uses only the numbers when
-matching. For this reason, an error is given at compile time if different names
-are given to subpatterns with the same number. However, you can give the same
-name to subpatterns with the same number, even when <c>dupnames</c> is not set.</p>
-
-</section>
-
-<section><marker id="sect14"></marker><title>Repetition</title>
-
-<p>Repetition is specified by quantifiers, which can follow any of the
-following items:</p>
-
-<list>
- <item>a literal data character</item>
- <item>the dot metacharacter</item>
- <item>the \C escape sequence</item>
- <item>the \X escape sequence</item>
- <item>the \R escape sequence</item>
- <item>an escape such as \d or \pL that matches a single character</item>
- <item>a character class</item>
- <item>a back reference (see next section)</item>
- <item>a parenthesized subpattern (including assertions)</item>
- <item>a subroutine call to a subpattern (recursive or otherwise)</item>
-</list>
-
-<p>The general repetition quantifier specifies a minimum and maximum number of
-permitted matches, by giving the two numbers in curly brackets (braces),
-separated by a comma. The numbers must be less than 65536, and the first must
-be less than or equal to the second. For example:</p>
-
-<quote><p> z{2,4}</p></quote>
-
-<p>matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special
-character. If the second number is omitted, but the comma is present, there is
-no upper limit; if the second number and the comma are both omitted, the
-quantifier specifies an exact number of required matches. Thus</p>
-
-<quote><p> [aeiou]{3,}</p></quote>
-
-<p>matches at least 3 successive vowels, but may match many more, while</p>
-
-<quote><p> \d{8}</p></quote>
-
-<p>matches exactly 8 digits. An opening curly bracket that appears in a position
-where a quantifier is not allowed, or one that does not match the syntax of a
-quantifier, is taken as a literal character. For example, {,6} is not a
-quantifier, but a literal string of four characters.</p>
-
-<p>In Unicode mode, quantifiers apply to characters rather than to individual data
-units. Thus, for example, \x{100}{2} matches two characters, each of
-which is represented by a two-byte sequence in a UTF-8 string. Similarly,
-\X{3} matches three Unicode extended grapheme clusters, each of which may be
-several data units long (and they may be of different lengths).</p>
-<p>The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present. This may be useful for
-subpatterns that are referenced as subroutines
-from elsewhere in the pattern (but see also the section entitled
-"Defining subpatterns for use by reference only"
-below). Items other than subpatterns that have a {0} quantifier are omitted
-from the compiled pattern.</p>
-
-<p>For convenience, the three most common quantifiers have single-character
-abbreviations:</p>
-
-<taglist>
- <tag>*</tag> <item>is equivalent to {0,}</item>
- <tag>+</tag> <item>is equivalent to {1,}</item>
- <tag>?</tag> <item>is equivalent to {0,1}</item>
-</taglist>
-
-<p>It is possible to construct infinite loops by following a
-subpattern that can match no characters with a quantifier that has no
-upper limit, for example:</p>
-
-<quote><p> (a?)*</p></quote>
-
-<p>Earlier versions of Perl and PCRE used to give an error at compile time for
-such patterns. However, because there are cases where this can be useful, such
-patterns are now accepted, but if any repetition of the subpattern does in fact
-match no characters, the loop is forcibly broken.</p>
-
-<p>By default, the quantifiers are "greedy", that is, they match as much as
-possible (up to the maximum number of permitted times), without causing the
-rest of the pattern to fail. The classic example of where this gives problems
-is in trying to match comments in C programs. These appear between /* and */
-and within the comment, individual * and / characters may appear. An attempt to
-match C comments by applying the pattern</p>
-
-<quote><p> /\*.*\*/</p></quote>
-
-<p>to the string</p>
-
-<quote><p> /* first comment */ not comment /* second comment */</p></quote>
-
-<p>fails, because it matches the entire string owing to the greediness of the .*
-item.</p>
-
-<p>However, if a quantifier is followed by a question mark, it ceases to be
-greedy, and instead matches the minimum number of times possible, so the
-pattern</p>
-
-<quote><p> /\*.*?\*/</p></quote>
-
-<p>does the right thing with the C comments. The meaning of the various
-quantifiers is not otherwise changed, just the preferred number of matches.
-Do not confuse this use of question mark with its use as a quantifier in its
-own right. Because it has two uses, it can sometimes appear doubled, as in</p>
-
-<quote><p> \d??\d</p></quote>
-
-<p>which matches one digit by preference, but can match two if that is the only
-way the rest of the pattern matches.</p>
-
-<p>If the <c>ungreedy</c> option is set (an option that is not available in Perl),
-the quantifiers are not greedy by default, but individual ones can be made
-greedy by following them with a question mark. In other words, it inverts the
-default behaviour.</p>
-
-<p>When a parenthesized subpattern is quantified with a minimum repeat count that
-is greater than 1 or with a limited maximum, more memory is required for the
-compiled pattern, in proportion to the size of the minimum or maximum.</p>
-
-<p>If a pattern starts with .* or .{0,} and the <c>dotall</c> option (equivalent
-to Perl's /s) is set, thus allowing the dot to match newlines, the pattern is
-implicitly anchored, because whatever follows will be tried against every
-character position in the subject string, so there is no point in retrying the
-overall match at any position after the first. PCRE normally treats such a
-pattern as though it were preceded by \A.</p>
-
-<p>In cases where it is known that the subject string contains no newlines, it is
-worth setting <c>dotall</c> in order to obtain this optimization, or
-alternatively using ^ to indicate anchoring explicitly.</p>
-
-<p>However, there are some cases where the optimization cannot be used. When .*
-is inside capturing parentheses that are the subject of a back reference
-elsewhere in the pattern, a match at the start may fail where a later one
-succeeds. Consider, for example:</p>
-
-<quote><p> (.*)abc\1</p></quote>
-
-<p>If the subject is "xyz123abc123" the match point is the fourth character. For
-this reason, such a pattern is not implicitly anchored.</p>
-
-<p>Another case where implicit anchoring is not applied is when the leading .* is
-inside an atomic group. Once again, a match at the start may fail where a later
-one succeeds. Consider this pattern:</p>
-
-<quote><p> (?&gt;.*?a)b</p></quote>
-
-<p>It matches "ab" in the subject "aab". The use of the backtracking control verbs
-(*PRUNE) and (*SKIP) also disable this optimization.</p>
-
-<p>When a capturing subpattern is repeated, the value captured is the substring
-that matched the final iteration. For example, after</p>
-
-<quote><p> (tweedle[dume]{3}\s*)+</p></quote>
-
-<p>has matched "tweedledum tweedledee" the value of the captured substring is
-"tweedledee". However, if there are nested capturing subpatterns, the
-corresponding captured values may have been set in previous iterations. For
-example, after</p>
-
-<quote><p> /(a|(b))+/</p></quote>
-
-<p>matches "aba" the value of the second captured substring is "b".</p>
-
-
-</section>
-
-<section><marker id="sect15"></marker><title>Atomic grouping and possessive quantifiers</title>
+# before ---------------branch-reset----------- after
+/ ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x
+# 1 2 2 3 2 3 4</code>
-<p>With both maximizing ("greedy") and minimizing ("ungreedy" or "lazy")
-repetition, failure of what follows normally causes the repeated item to be
-re-evaluated to see if a different number of repeats allows the rest of the
-pattern to match. Sometimes it is useful to prevent this, either to change the
-nature of the match, or to cause it fail earlier than it otherwise might, when
-the author of the pattern knows there is no point in carrying on.</p>
+ <p>A back reference to a numbered subpattern uses the most recent value that
+ is set for that number by any subpattern. The following pattern matches
+ "abcabc" or "defdef":</p>
-<p>Consider, for example, the pattern \d+foo when applied to the subject line</p>
+ <code>
+/(?|(abc)|(def))\1/</code>
-<quote><p> 123456bar</p></quote>
+ <p>In contrast, a subroutine call to a numbered subpattern always refers to
+ the first one in the pattern with the given number. The following pattern
+ matches "abcabc" or "defabc":</p>
-<p>After matching all 6 digits and then failing to match "foo", the normal
-action of the matcher is to try again with only 5 digits matching the \d+
-item, and then with 4, and so on, before ultimately failing. "Atomic grouping"
-(a term taken from Jeffrey Friedl's book) provides the means for specifying
-that once a subpattern has matched, it is not to be re-evaluated in this way.</p>
+ <code>
+/(?|(abc)|(def))(?1)/</code>
-<p>If we use atomic grouping for the previous example, the matcher gives up
-immediately on failing to match "foo" the first time. The notation is a kind of
-special parenthesis, starting with (?&gt; as in this example:</p>
+ <p>If a condition test for a subpattern having matched refers to a
+ non-unique number, the test is true if any of the subpatterns of that
+ number have matched.</p>
-<quote><p> (?&gt;\d+)foo</p></quote>
-
-<p>This kind of parenthesis "locks up" the part of the pattern it contains once
-it has matched, and a failure further into the pattern is prevented from
-backtracking into it. Backtracking past it to previous items, however, works as
-normal.</p>
-
-<p>An alternative description is that a subpattern of this type matches the string
-of characters that an identical standalone pattern would match, if anchored at
-the current point in the subject string.</p>
-
-<p>Atomic grouping subpatterns are not capturing subpatterns. Simple cases such as
-the above example can be thought of as a maximizing repeat that must swallow
-everything it can. So, while both \d+ and \d+? are prepared to adjust the
-number of digits they match in order to make the rest of the pattern match,
-(?&gt;\d+) can only match an entire sequence of digits.</p>
-
-<p>Atomic groups in general can of course contain arbitrarily complicated
-subpatterns, and can be nested. However, when the subpattern for an atomic
-group is just a single repeated item, as in the example above, a simpler
-notation, called a "possessive quantifier" can be used. This consists of an
-additional + character following a quantifier. Using this notation, the
-previous example can be rewritten as</p>
-
-<quote><p> \d++foo</p></quote>
-
-<p>Note that a possessive quantifier can be used with an entire group, for
-example:</p>
-
-<quote><p> (abc|xyz){2,3}+</p></quote>
-
-<p>Possessive quantifiers are always greedy; the setting of the <c>ungreedy</c>
-option is ignored. They are a convenient notation for the simpler forms of
-atomic group. However, there is no difference in the meaning of a possessive
-quantifier and the equivalent atomic group, though there may be a performance
-difference; possessive quantifiers should be slightly faster.</p>
-
-<p>The possessive quantifier syntax is an extension to the Perl 5.8 syntax.
-Jeffrey Friedl originated the idea (and the name) in the first edition of his
-book. Mike McCloskey liked it, so implemented it when he built Sun's Java
-package, and PCRE copied it from there. It ultimately found its way into Perl
-at release 5.10.</p>
-
-<p>PCRE has an optimization that automatically "possessifies" certain simple
-pattern constructs. For example, the sequence A+B is treated as A++B because
-there is no point in backtracking into a sequence of A's when B must follow.</p>
+ <p>An alternative approach using this "branch reset" feature is to use
+ duplicate named subpatterns, as described in the next section.</p>
+ </section>
-<p>When a pattern contains an unlimited repeat inside a subpattern that can itself
-be repeated an unlimited number of times, the use of an atomic group is the
-only way to avoid some failing matches taking a very long time indeed. The
-pattern</p>
+ <section>
+ <marker id="sect13"></marker>
+ <title>Named Subpatterns</title>
+ <p>Identifying capturing parentheses by number is simple, but it can be
+ hard to keep track of the numbers in complicated regular expressions.
+ Also, if an expression is modified, the numbers can change. To help with
+ this difficulty, PCRE supports the naming of subpatterns. This feature was
+ not added to Perl until release 5.10. Python had the feature earlier, and
+ PCRE introduced it at release 4.0, using the Python syntax. PCRE now
+ supports both the Perl and the Python syntax. Perl allows identically
+ numbered subpatterns to have different names, but PCRE does not.</p>
+
+ <p>In PCRE, a subpattern can be named in one of three ways:
+ <c>(?&lt;name&gt;...)</c> or <c>(?'name'...)</c> as in Perl, or
+ <c>(?P&lt;name&gt;...)</c> as in Python. References to capturing
+ parentheses from other parts of the pattern, such as back references,
+ recursion, and conditions, can be made by name and by number.</p>
+
+ <p>Names consist of up to 32 alphanumeric characters and underscores. Named
+ capturing parentheses are still allocated numbers as well as names,
+ exactly as if the names were not present.
+ The <c>capture</c> specification to <seealso marker="#run/3">
+ <c>run/3</c></seealso> can use named values if they are present in the
+ regular expression.</p>
-<quote><p> (\D+|&lt;\d+&gt;)*[!?]</p></quote>
+ <p>By default, a name must be unique within a pattern, but this constraint
+ can be relaxed by setting option <c>dupnames</c> at compile time.
+ (Duplicate names are also always permitted for subpatterns with the same
+ number, set up as described in the previous section.) Duplicate names can
+ be useful for patterns where only one instance of the named parentheses
+ can match. Suppose that you want to match the name of a weekday, either as
+ a 3-letter abbreviation or as the full name, and in both cases you want to
+ extract the abbreviation. The following pattern (ignoring the line
+ breaks) does the job:</p>
+
+ <code type="none">
+(?&lt;DN&gt;Mon|Fri|Sun)(?:day)?|
+(?&lt;DN&gt;Tue)(?:sday)?|
+(?&lt;DN&gt;Wed)(?:nesday)?|
+(?&lt;DN&gt;Thu)(?:rsday)?|
+(?&lt;DN&gt;Sat)(?:urday)?</code>
+
+ <p>There are five capturing substrings, but only one is ever set after a
+ match. (An alternative way of solving this problem is to use a "branch
+ reset" subpattern, as described in the previous section.)</p>
+
+ <p>For capturing named subpatterns which names are not unique, the first
+ matching occurrence (counted from left to right in the subject) is
+ returned from <seealso marker="#run/3"><c>run/3</c></seealso>, if the name
+ is specified in the <c>values</c> part of the <c>capture</c> statement.
+ The <c>all_names</c> capturing value matches all the names in the same
+ way.</p>
-<p>matches an unlimited number of substrings that either consist of non-digits, or
-digits enclosed in &lt;&gt;, followed by either ! or ?. When it matches, it runs
-quickly. However, if it is applied to</p>
+ <note>
+ <p>You cannot use different names to distinguish between two subpatterns
+ with the same number, as PCRE uses only the numbers when matching. For
+ this reason, an error is given at compile time if different names are
+ specified to subpatterns with the same number. However, you can specify
+ the same name to subpatterns with the same number, even when
+ <c>dupnames</c> is not set.</p>
+ </note>
+ </section>
-<quote><p> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p></quote>
+ <section>
+ <marker id="sect14"></marker>
+ <title>Repetition</title>
+ <p>Repetition is specified by quantifiers, which can follow any of the
+ following items:</p>
+
+ <list type="bulleted">
+ <item>A literal data character</item>
+ <item>The dot metacharacter</item>
+ <item>The \C escape sequence</item>
+ <item>The \X escape sequence</item>
+ <item>The \R escape sequence</item>
+ <item>An escape such as \d or \pL that matches a single character</item>
+ <item>A character class</item>
+ <item>A back reference (see the next section)</item>
+ <item>A parenthesized subpattern (including assertions)</item>
+ <item>A subroutine call to a subpattern (recursive or otherwise)</item>
+ </list>
+
+ <p>The general repetition quantifier specifies a minimum and maximum number
+ of permitted matches, by giving the two numbers in curly brackets
+ (braces), separated by a comma. The numbers must be &lt; 65536, and the
+ first must be less than or equal to the second. For example, the following
+ matches "zz", "zzz", or "zzzz":</p>
+
+ <code>
+z{2,4}</code>
+
+ <p>A closing brace on its own is not a special character. If the second
+ number is omitted, but the comma is present, there is no upper limit. If
+ the second number and the comma are both omitted, the quantifier specifies
+ an exact number of required matches. Thus, the following matches at least
+ three successive vowels, but can match many more:</p>
+
+ <code>
+[aeiou]{3,}</code>
+
+ <p>The following matches exactly eight digits:</p>
+
+ <code>
+\d{8}</code>
+
+ <p>An opening curly bracket that appears in a position where a quantifier is
+ not allowed, or one that does not match the syntax of a quantifier, is
+ taken as a literal character. For example, {,6} is not a quantifier, but a
+ literal string of four characters.</p>
+
+ <p>In Unicode mode, quantifiers apply to characters rather than to
+ individual data units. Thus, for example, \x{100}{2} matches two
+ characters, each of which is represented by a 2-byte sequence in a
+ UTF-8 string. Similarly, \X{3} matches three Unicode extended grapheme
+ clusters, each of which can be many data units long (and they can be of
+ different lengths).</p>
+
+ <p>The quantifier {0} is permitted, causing the expression to behave as if
+ the previous item and the quantifier were not present. This can be useful
+ for subpatterns that are referenced as subroutines from elsewhere in the
+ pattern (but see also section <seealso marker="#defining_subpatterns">
+ Defining Subpatterns for Use by Reference Only</seealso>). Items other
+ than subpatterns that have a {0} quantifier are omitted from the compiled
+ pattern.</p>
+
+ <p>For convenience, the three most common quantifiers have single-character
+ abbreviations:</p>
+
+ <taglist>
+ <tag>*</tag><item>Equivalent to {0,}</item>
+ <tag>+</tag><item>Equivalent to {1,}</item>
+ <tag>?</tag><item>Equivalent to {0,1}</item>
+ </taglist>
+
+ <p>Infinite loops can be constructed by following a subpattern that can
+ match no characters with a quantifier that has no upper limit, for
+ example:</p>
+
+ <code>
+(a?)*</code>
+
+ <p>Earlier versions of Perl and PCRE used to give an error at compile time
+ for such patterns. However, as there are cases where this can be useful,
+ such patterns are now accepted. However, if any repetition of the
+ subpattern matches no characters, the loop is forcibly broken.</p>
+
+ <p>By default, the quantifiers are "greedy", that is, they match as much as
+ possible (up to the maximum number of permitted times), without causing
+ the remaining pattern to fail. The classic example of where this gives
+ problems is in trying to match comments in C programs. These appear
+ between /* and */. Within the comment, individual * and / characters can
+ appear. An attempt to match C comments by applying the pattern</p>
+
+ <code>
+/\*.*\*/</code>
+
+ <p>to the string</p>
+
+ <code>
+/* first comment */ not comment /* second comment */</code>
+
+ <p>fails, as it matches the entire string owing to the greediness of the .*
+ item.</p>
+
+ <p>However, if a quantifier is followed by a question mark, it ceases to be
+ greedy, and instead matches the minimum number of times possible, so the
+ following pattern does the right thing with the C comments:</p>
+
+ <code>
+/\*.*?\*/</code>
+
+ <p>The meaning of the various quantifiers is not otherwise changed, only
+ the preferred number of matches. Do not confuse this use of question mark
+ with its use as a quantifier in its own right. As it has two uses, it can
+ sometimes appear doubled, as in</p>
+
+ <code>
+\d??\d</code>
+
+ <p>which matches one digit by preference, but can match two if that is the
+ only way the remaining pattern matches.</p>
-<p>it takes a long time before reporting failure. This is because the string can
-be divided between the internal \D+ repeat and the external * repeat in a
-large number of ways, and all have to be tried. (The example uses [!?] rather
-than a single character at the end, because both PCRE and Perl have an
-optimization that allows for fast failure when a single character is used. They
-remember the last single character that is required for a match, and fail early
-if it is not present in the string.) If the pattern is changed so that it uses
-an atomic group, like this:</p>
+ <p>If option <c>ungreedy</c> is set (an option that is not available in
+ Perl), the quantifiers are not greedy by default, but individual ones can
+ be made greedy by following them with a question mark. That is, it inverts
+ the default behavior.</p>
-<quote><p> ((?&gt;\D+)|&lt;\d+&gt;)*[!?]</p></quote>
+ <p>When a parenthesized subpattern is quantified with a minimum repeat count
+ that is &gt; 1 or with a limited maximum, more memory is required for the
+ compiled pattern, in proportion to the size of the minimum or maximum.</p>
-<p>sequences of non-digits cannot be broken, and failure happens quickly.</p>
-
-</section>
-
-<section><marker id="sect16"></marker><title>Back references</title>
-
-<p>Outside a character class, a backslash followed by a digit greater than 0 (and
-possibly further digits) is a back reference to a capturing subpattern earlier
-(that is, to its left) in the pattern, provided there have been that many
-previous capturing left parentheses.</p>
-
-<p>However, if the decimal number following the backslash is less than 10, it is
-always taken as a back reference, and causes an error only if there are not
-that many capturing left parentheses in the entire pattern. In other words, the
-parentheses that are referenced need not be to the left of the reference for
-numbers less than 10. A "forward back reference" of this type can make sense
-when a repetition is involved and the subpattern to the right has participated
-in an earlier iteration.</p>
-
-<p>It is not possible to have a numerical "forward back reference" to
-a subpattern whose number is 10 or more using this syntax because a
-sequence such as \50 is interpreted as a character defined in
-octal. See the subsection entitled "Non-printing characters" above for
-further details of the handling of digits following a backslash. There
-is no such problem when named parentheses are used. A back reference
-to any subpattern is possible using named parentheses (see below).</p>
-
-<p>Another way of avoiding the ambiguity inherent in the use of digits following a
-backslash is to use the \g escape sequence. This escape must be followed by an
-unsigned number or a negative number, optionally enclosed in braces. These
-examples are all identical:</p>
-
-<list>
- <item>(ring), \1</item>
- <item>(ring), \g1</item>
- <item>(ring), \g{1}</item>
-</list>
-
-<p>An unsigned number specifies an absolute reference without the
-ambiguity that is present in the older syntax. It is also useful when
-literal digits follow the reference. A negative number is a relative
-reference. Consider this example:</p>
-
-<quote><p> (abc(def)ghi)\g{-1}</p></quote>
-
-<p>The sequence \g{-1} is a reference to the most recently started capturing
-subpattern before \g, that is, is it equivalent to \2 in this example.
-Similarly, \g{-2} would be equivalent to \1. The use of relative references
-can be helpful in long patterns, and also in patterns that are created by
-joining together fragments that contain references within themselves.</p>
-
-<p>A back reference matches whatever actually matched the capturing
-subpattern in the current subject string, rather than anything
-matching the subpattern itself (see "Subpatterns as subroutines" below
-for a way of doing that). So the pattern</p>
-
-<quote><p> (sens|respons)e and \1ibility</p></quote>
-
-<p>matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If caseful matching is in force at the time of the
-back reference, the case of letters is relevant. For example,</p>
-
-<quote><p> ((?i)rah)\s+\1</p></quote>
-
-<p>matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original
-capturing subpattern is matched caselessly.</p>
-
-<p>There are several different ways of writing back references to named
-subpatterns. The .NET syntax \k{name} and the Perl syntax \k&lt;name&gt; or
-\k'name' are supported, as is the Python syntax (?P=name). Perl 5.10's unified
-back reference syntax, in which \g can be used for both numeric and named
-references, is also supported. We could rewrite the above example in any of
-the following ways:</p>
-
-<list>
- <item>(?&lt;p1&gt;(?i)rah)\s+\k&lt;p1&gt;</item>
- <item>(?'p1'(?i)rah)\s+\k{p1}</item>
- <item>(?P&lt;p1&gt;(?i)rah)\s+(?P=p1)</item>
- <item>(?&lt;p1&gt;(?i)rah)\s+\g{p1}</item>
-</list>
-
-<p>A subpattern that is referenced by name may appear in the pattern before or
-after the reference.</p>
-
-<p>There may be more than one back reference to the same subpattern. If a
-subpattern has not actually been used in a particular match, any back
-references to it always fail. For example, the pattern</p>
-
-<quote><p> (a|(bc))\2</p></quote>
-
-<p>always fails if it starts to match "a" rather than "bc". Because
-there may be many capturing parentheses in a pattern, all digits
-following the backslash are taken as part of a potential back
-reference number. If the pattern continues with a digit character,
-some delimiter must be used to terminate the back reference. If the
-<c>extended</c> option is set, this can be whitespace. Otherwise an
-empty comment (see "Comments" below) can be used.</p>
-
-<p><em>Recursive back references</em></p>
-
-<p>A back reference that occurs inside the parentheses to which it refers fails
-when the subpattern is first used, so, for example, (a\1) never matches.
-However, such references can be useful inside repeated subpatterns. For
-example, the pattern</p>
-
-<quote><p> (a|b\1)+</p></quote>
-
-<p>matches any number of "a"s and also "aba", "ababbaa" etc. At each iteration of
-the subpattern, the back reference matches the character string corresponding
-to the previous iteration. In order for this to work, the pattern must be such
-that the first iteration does not need to match the back reference. This can be
-done using alternation, as in the example above, or by a quantifier with a
-minimum of zero.</p>
-
-<p>Back references of this type cause the group that they reference to be treated
-as an atomic group.
-Once the whole group has been matched, a subsequent matching failure cannot
-cause backtracking into the middle of the group.</p>
-
-</section>
-
-<section><marker id="sect17"></marker><title>Assertions</title>
-
-<p>An assertion is a test on the characters following or preceding the current
-matching point that does not actually consume any characters. The simple
-assertions coded as \b, \B, \A, \G, \Z, \z, ^ and $ are described
-above.</p>
-
-
-<p>More complicated assertions are coded as subpatterns. There are two kinds:
-those that look ahead of the current position in the subject string, and those
-that look behind it. An assertion subpattern is matched in the normal way,
-except that it does not cause the current matching position to be changed.</p>
-
-<p>Assertion subpatterns are not capturing subpatterns. If such an assertion
-contains capturing subpatterns within it, these are counted for the purposes of
-numbering the capturing subpatterns in the whole pattern. However, substring
-capturing is carried out only for positive assertions. (Perl sometimes, but not
-always, does do capturing in negative assertions.)</p>
-
-<p>For compatibility with Perl, assertion subpatterns may be repeated; though
-it makes no sense to assert the same thing several times, the side effect of
-capturing parentheses may occasionally be useful. In practice, there only three
-cases:</p>
-
-<taglist>
-<tag>(1)</tag> <item>If the quantifier is {0}, the assertion is never obeyed during matching.
-However, it may contain internal capturing parenthesized groups that are called
-from elsewhere via the subroutine mechanism.</item>
-<tag>(2)</tag> <item>If quantifier is {0,n} where n is greater than zero, it is treated as if it
-were {0,1}. At run time, the rest of the pattern match is tried with and
-without the assertion, the order depending on the greediness of the quantifier.</item>
-<tag>(3)</tag> <item>If the minimum repetition is greater than zero, the quantifier is ignored.
-The assertion is obeyed just once when encountered during matching.</item>
-</taglist>
+ <p>If a pattern starts with .* or .{0,} and option <c>dotall</c> (equivalent
+ to Perl option <c>/s</c>) is set, thus allowing the dot to match newlines,
+ the pattern is implicitly anchored, because whatever follows is tried
+ against every character position in the subject string. So, there is no
+ point in retrying the overall match at any position after the first. PCRE
+ normally treats such a pattern as if it was preceded by \A.</p>
-<p><em>Lookahead assertions</em></p>
+ <p>In cases where it is known that the subject string contains no newlines,
+ it is worth setting <c>dotall</c> to obtain this optimization, or
+ alternatively using ^ to indicate anchoring explicitly.</p>
-<p>Lookahead assertions start with (?= for positive assertions and (?! for
-negative assertions. For example,</p>
+ <p>However, there are some cases where the optimization cannot be used. When
+ .* is inside capturing parentheses that are the subject of a back
+ reference elsewhere in the pattern, a match at the start can fail where a
+ later one succeeds. Consider, for example:</p>
+
+ <code>
+(.*)abc\1</code>
-<quote><p> \w+(?=;)</p></quote>
+ <p>If the subject is "xyz123abc123", the match point is the fourth
+ character. Therefore, such a pattern is not implicitly anchored.</p>
-<p>matches a word followed by a semicolon, but does not include the semicolon in
-the match, and</p>
+ <p>Another case where implicit anchoring is not applied is when the leading
+ .* is inside an atomic group. Once again, a match at the start can fail
+ where a later one succeeds. Consider the following pattern:</p>
-<quote><p> foo(?!bar)</p></quote>
+ <code>
+(?&gt;.*?a)b</code>
-<p>matches any occurrence of "foo" that is not followed by "bar". Note that the
-apparently similar pattern</p>
+ <p>It matches "ab" in the subject "aab". The use of the backtracking control
+ verbs (*PRUNE) and (*SKIP) also disable this optimization.</p>
-<quote><p> (?!foo)bar</p></quote>
+ <p>When a capturing subpattern is repeated, the value captured is the
+ substring that matched the final iteration. For example, after</p>
-<p>does not find an occurrence of "bar" that is preceded by something other than
-"foo"; it finds any occurrence of "bar" whatsoever, because the assertion
-(?!foo) is always true when the next three characters are "bar". A
-lookbehind assertion is needed to achieve the other effect.</p>
+ <code>
+(tweedle[dume]{3}\s*)+</code>
-<p>If you want to force a matching failure at some point in a pattern, the most
-convenient way to do it is with (?!) because an empty string always matches, so
-an assertion that requires there not to be an empty string must always fail.
-The backtracking control verb (*FAIL) or (*F) is a synonym for (?!).</p>
+ <p>has matched "tweedledum tweedledee", the value of the captured substring
+ is "tweedledee". However, if there are nested capturing subpatterns, the
+ corresponding captured values can have been set in previous iterations.
+ For example, after</p>
+ <code>
+/(a|(b))+/</code>
-<p><em>Lookbehind assertions</em></p>
+ <p>matches "aba", the value of the second captured substring is "b".</p>
+ </section>
-<p>Lookbehind assertions start with (?&lt;= for positive assertions and (?&lt;! for
-negative assertions. For example,</p>
+ <section>
+ <marker id="sect15"></marker>
+ <title>Atomic Grouping and Possessive Quantifiers</title>
+ <p>With both maximizing ("greedy") and minimizing ("ungreedy" or "lazy")
+ repetition, failure of what follows normally causes the repeated item to
+ be re-evaluated to see if a different number of repeats allows the
+ remaining pattern to match. Sometimes it is useful to prevent this, either
+ to change the nature of the match, or to cause it to fail earlier than it
+ otherwise might, when the author of the pattern knows that there is no
+ point in carrying on.</p>
+
+ <p>Consider, for example, the pattern \d+foo when applied to the following
+ subject line:</p>
+
+ <code>
+123456bar</code>
+
+ <p>After matching all six digits and then failing to match "foo", the normal
+ action of the matcher is to try again with only five digits matching item
+ \d+, and then with four, and so on, before ultimately failing. "Atomic
+ grouping" (a term taken from Jeffrey Friedl's book) provides the means for
+ specifying that once a subpattern has matched, it is not to be
+ re-evaluated in this way.</p>
+
+ <p>If atomic grouping is used for the previous example, the matcher gives up
+ immediately on failing to match "foo" the first time. The notation is a
+ kind of special parenthesis, starting with <c>(?&gt;</c> as in the
+ following example:</p>
+
+ <code>
+(?&gt;\d+)foo</code>
+
+ <p>This kind of parenthesis "locks up" the part of the pattern it contains
+ once it has matched, and a failure further into the pattern is prevented
+ from backtracking into it. Backtracking past it to previous items,
+ however, works as normal.</p>
+
+ <p>An alternative description is that a subpattern of this type matches the
+ string of characters that an identical standalone pattern would match, if
+ anchored at the current point in the subject string.</p>
+
+ <p>Atomic grouping subpatterns are not capturing subpatterns. Simple cases
+ such as the above example can be thought of as a maximizing repeat that
+ must swallow everything it can. So, while both \d+ and \d+? are prepared
+ to adjust the number of digits they match to make the remaining pattern
+ match, <c>(?&gt;\d+)</c> can only match an entire sequence of digits.</p>
+
+ <p>Atomic groups in general can contain any complicated
+ subpatterns, and can be nested. However, when the subpattern for an atomic
+ group is just a single repeated item, as in the example above, a simpler
+ notation, called a "possessive quantifier" can be used. This consists of
+ an extra + character following a quantifier. Using this notation, the
+ previous example can be rewritten as</p>
+
+ <code>
+\d++foo</code>
+
+ <p>Notice that a possessive quantifier can be used with an entire group,
+ for example:</p>
+
+ <code>
+(abc|xyz){2,3}+</code>
+
+ <p>Possessive quantifiers are always greedy; the setting of option
+ <c>ungreedy</c> is ignored. They are a convenient notation for the simpler
+ forms of an atomic group. However, there is no difference in the meaning
+ of a possessive quantifier and the equivalent atomic group, but there can
+ be a performance difference; possessive quantifiers are probably slightly
+ faster.</p>
+
+ <p>The possessive quantifier syntax is an extension to the Perl 5.8 syntax.
+ Jeffrey Friedl originated the idea (and the name) in the first edition of
+ his book. Mike McCloskey liked it, so implemented it when he built the
+ Sun Java package, and PCRE copied it from there. It ultimately found its
+ way into Perl at release 5.10.</p>
+
+ <p>PCRE has an optimization that automatically "possessifies" certain simple
+ pattern constructs. For example, the sequence A+B is treated as A++B, as
+ there is no point in backtracking into a sequence of A:s when B must
+ follow.</p>
+
+ <p>When a pattern contains an unlimited repeat inside a subpattern that can
+ itself be repeated an unlimited number of times, the use of an atomic
+ group is the only way to avoid some failing matches taking a long time.
+ The pattern</p>
+
+ <code>
+(\D+|&lt;\d+&gt;)*[!?]</code>
+
+ <p>matches an unlimited number of substrings that either consist of
+ non-digits, or digits enclosed in &lt;&gt;, followed by ! or ?. When it
+ matches, it runs quickly. However, if it is applied to</p>
+
+ <code>
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</code>
+
+ <p>it takes a long time before reporting failure. This is because the string
+ can be divided between the internal \D+ repeat and the external * repeat
+ in many ways, and all must be tried. (The example uses [!?] rather than a
+ single character at the end, as both PCRE and Perl have an optimization
+ that allows for fast failure when a single character is used. They
+ remember the last single character that is required for a match, and fail
+ early if it is not present in the string.) If the pattern is changed so
+ that it uses an atomic group, like the following, sequences of non-digits
+ cannot be broken, and failure happens quickly:</p>
+
+ <code>
+((?&gt;\D+)|&lt;\d+&gt;)*[!?]</code>
+ </section>
-<quote><p> (?&lt;!foo)bar</p></quote>
+ <section>
+ <marker id="sect16"></marker>
+ <title>Back References</title>
+ <p>Outside a character class, a backslash followed by a digit &gt; 0 (and
+ possibly further digits) is a back reference to a capturing subpattern
+ earlier (that is, to its left) in the pattern, provided there have been
+ that many previous capturing left parentheses.</p>
+
+ <p>However, if the decimal number following the backslash is &lt; 10, it is
+ always taken as a back reference, and causes an error only if there are
+ not that many capturing left parentheses in the entire pattern. That is,
+ the parentheses that are referenced do need not be to the left of the
+ reference for numbers &lt; 10. A "forward back reference" of this type can
+ make sense when a repetition is involved and the subpattern to the right
+ has participated in an earlier iteration.</p>
+
+ <p>It is not possible to have a numerical "forward back reference" to a
+ subpattern whose number is 10 or more using this syntax, as a sequence
+ such as \50 is interpreted as a character defined in octal. For more
+ details of the handling of digits following a backslash, see section
+ <seealso marker="#non_printing_characters">Non-Printing
+ Characters</seealso> earlier. There is no such problem when named
+ parentheses are used. A back reference to any subpattern is possible
+ using named parentheses (see below).</p>
+
+ <p>Another way to avoid the ambiguity inherent in the use of digits
+ following a backslash is to use the \g escape sequence. This escape must
+ be followed by an unsigned number or a negative number, optionally
+ enclosed in braces. The following examples are identical:</p>
+
+ <code>
+(ring), \1
+(ring), \g1
+(ring), \g{1}</code>
+
+ <p>An unsigned number specifies an absolute reference without the ambiguity
+ that is present in the older syntax. It is also useful when literal digits
+ follow the reference. A negative number is a relative reference. Consider
+ the following example:</p>
+
+ <code>
+(abc(def)ghi)\g{-1}</code>
+
+ <p>The sequence \g{-1} is a reference to the most recently started capturing
+ subpattern before \g, that is, it is equivalent to \2 in this example.
+ Similarly, \g{-2} would be equivalent to \1. The use of relative
+ references can be helpful in long patterns, and also in patterns that are
+ created by joining fragments containing references within themselves.</p>
+
+ <p>A back reference matches whatever matched the capturing subpattern in the
+ current subject string, rather than anything matching the subpattern
+ itself (section <seealso marker="#sect21">Subpattern as
+ Subroutines</seealso> describes a way of doing that). So, the
+ following pattern matches "sense and sensibility" and "response and
+ responsibility", but not "sense and responsibility":</p>
+
+ <code>
+(sens|respons)e and \1ibility</code>
+
+ <p>If caseful matching is in force at the time of the back reference, the
+ case of letters is relevant. For example, the following matches "rah rah"
+ and "RAH RAH", but not "RAH rah", although the original capturing
+ subpattern is matched caselessly:</p>
+
+ <code>
+((?i)rah)\s+\1</code>
+
+ <p>There are many different ways of writing back references to named
+ subpatterns. The .NET syntax <c>\k{name}</c> and the Perl syntax
+ <c>\k&lt;name&gt;</c> or <c>\k'name'</c> are supported, as is the Python
+ syntax <c>(?P=name)</c>. The unified back reference syntax in Perl 5.10,
+ in which \g can be used for both numeric and named references, is also
+ supported. The previous example can be rewritten in the following
+ ways:</p>
+
+ <code>
+(?&lt;p1&gt;(?i)rah)\s+\k&lt;p1&gt;
+(?'p1'(?i)rah)\s+\k{p1}
+(?P&lt;p1&gt;(?i)rah)\s+(?P=p1)
+(?&lt;p1&gt;(?i)rah)\s+\g{p1}</code>
+
+ <p>A subpattern that is referenced by name can appear in the pattern before
+ or after the reference.</p>
+
+ <p>There can be more than one back reference to the same subpattern. If a
+ subpattern has not been used in a particular match, any back references to
+ it always fails. For example, the following pattern always fails if it
+ starts to match "a" rather than "bc":</p>
+
+ <code>
+(a|(bc))\2</code>
+
+ <p>As there can be many capturing parentheses in a pattern, all digits
+ following the backslash are taken as part of a potential back reference
+ number. If the pattern continues with a digit character, some delimiter
+ must be used to terminate the back reference. If option <c>extended</c> is
+ set, this can be whitespace. Otherwise an empty comment (see section
+ <seealso marker="#sect19">Comments</seealso>) can be used.</p>
+
+ <p><em>Recursive Back References</em></p>
+
+ <p>A back reference that occurs inside the parentheses to which it refers
+ fails when the subpattern is first used, so, for example, (a\1) never
+ matches. However, such references can be useful inside repeated
+ subpatterns. For example, the following pattern matches any number of
+ "a"s and also "aba", "ababbaa", and so on:</p>
+
+ <code>
+(a|b\1)+</code>
+
+ <p>At each iteration of the subpattern, the back reference matches the
+ character string corresponding to the previous iteration. In order for
+ this to work, the pattern must be such that the first iteration does not
+ need to match the back reference. This can be done using alternation, as
+ in the example above, or by a quantifier with a minimum of zero.</p>
+
+ <p>Back references of this type cause the group that they reference to be
+ treated as an atomic group. Once the whole group has been matched, a
+ subsequent matching failure cannot cause backtracking into the middle of
+ the group.</p>
+ </section>
-<p>does find an occurrence of "bar" that is not preceded by "foo". The contents of
-a lookbehind assertion are restricted such that all the strings it matches must
-have a fixed length. However, if there are several top-level alternatives, they
-do not all have to have the same fixed length. Thus</p>
+ <section>
+ <marker id="sect17"></marker>
+ <title>Assertions</title>
+ <p>An assertion is a test on the characters following or preceding the
+ current matching point that does not consume any characters. The simple
+ assertions coded as \b, \B, \A, \G, \Z, \z, ^, and $ are described in
+ the previous sections.</p>
+
+ <p>More complicated assertions are coded as subpatterns. There are two
+ kinds: those that look ahead of the current position in the subject
+ string, and those that look behind it. An assertion subpattern is matched
+ in the normal way, except that it does not cause the current matching
+ position to be changed.</p>
+
+ <p>Assertion subpatterns are not capturing subpatterns. If such an assertion
+ contains capturing subpatterns within it, these are counted for the
+ purposes of numbering the capturing subpatterns in the whole pattern.
+ However, substring capturing is done only for positive assertions. (Perl
+ sometimes, but not always, performs capturing in negative assertions.)</p>
+
+ <p>For compatibility with Perl, assertion subpatterns can be repeated.
+ However, it makes no sense to assert the same thing many times, the side
+ effect of capturing parentheses can occasionally be useful. In practice,
+ there are only three cases:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>If the quantifier is {0}, the assertion is never obeyed during
+ matching. However, it can contain internal capturing parenthesized
+ groups that are called from elsewhere through the subroutine
+ mechanism.</p>
+ </item>
+ <item>
+ <p>If quantifier is {0,n}, where n &gt; 0, it is treated as if it was
+ {0,1}. At runtime, the remaining pattern match is tried with and
+ without the assertion, the order depends on the greediness of the
+ quantifier.</p>
+ </item>
+ <item>
+ <p>If the minimum repetition is &gt; 0, the quantifier is ignored. The
+ assertion is obeyed only once when encountered during matching.</p>
+ </item>
+ </list>
-<quote><p> (?&lt;=bullock|donkey)</p></quote>
+ <p><em>Lookahead Assertions</em></p>
-<p>is permitted, but</p>
+ <p>Lookahead assertions start with (?= for positive assertions and (?! for
+ negative assertions. For example, the following matches a word followed by
+ a semicolon, but does not include the semicolon in the match:</p>
-<quote><p> (?&lt;!dogs?|cats?)</p></quote>
+ <code>
+\w+(?=;)</code>
-<p>causes an error at compile time. Branches that match different length strings
-are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl, which requires all branches to
-match the same length of string. An assertion such as</p>
+ <p>The following matches any occurrence of "foo" that is not followed by
+ "bar":</p>
-<quote><p> (?&lt;=ab(c|de))</p></quote>
+ <code>
+foo(?!bar)</code>
-<p>is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable to PCRE if rewritten to use two top-level
-branches:</p>
+ <p>Notice that the apparently similar pattern</p>
-<quote><p> (?&lt;=abc|abde)</p></quote>
+ <code>
+(?!foo)bar</code>
-<p>In some cases, the escape sequence \K (see above) can be
-used instead of a lookbehind assertion to get round the fixed-length
-restriction.</p>
+ <p>does not find an occurrence of "bar" that is preceded by something other
+ than "foo". It finds any occurrence of "bar" whatsoever, as the assertion
+ (?!foo) is always true when the next three characters are "bar". A
+ lookbehind assertion is needed to achieve the other effect.</p>
-<p>The implementation of lookbehind assertions is, for each alternative, to
-temporarily move the current position back by the fixed length and then try to
-match. If there are insufficient characters before the current position, the
-assertion fails.</p>
+ <p>If you want to force a matching failure at some point in a pattern, the
+ most convenient way to do it is with (?!), as an empty string always
+ matches. So, an assertion that requires there is not to be an empty
+ string must always fail. The backtracking control verb (*FAIL) or (*F) is
+ a synonym for (?!).</p>
-<p>In a UTF mode, PCRE does not allow the \C escape (which matches a single data
-unit even in a UTF mode) to appear in lookbehind assertions, because it makes
-it impossible to calculate the length of the lookbehind. The \X and \R
-escapes, which can match different numbers of data units, are also not
-permitted.</p>
-<p>"Subroutine" calls (see below) such as (?2) or (?&amp;X) are permitted in lookbehinds, as long
-as the subpattern matches a fixed-length string. Recursion,
-however, is not supported.</p>
+ <p><em>Lookbehind Assertions</em></p>
-<p>Possessive quantifiers can be used in conjunction with lookbehind assertions to
-specify efficient matching of fixed-length strings at the end of subject
-strings. Consider a simple pattern such as</p>
+ <p>Lookbehind assertions start with (?&lt;= for positive assertions and
+ (?&lt;! for negative assertions. For example, the following finds an
+ occurrence of "bar" that is not preceded by "foo":</p>
-<quote><p> abcd$</p></quote>
+ <code>
+(?&lt;!foo)bar</code>
-<p>when applied to a long string that does not match. Because matching proceeds
-from left to right, PCRE will look for each "a" in the subject and then see if
-what follows matches the rest of the pattern. If the pattern is specified as</p>
+ <p>The contents of a lookbehind assertion are restricted such that all the
+ strings it matches must have a fixed length. However, if there are many
+ top-level alternatives, they do not all have to have the same fixed
+ length. Thus, the following is permitted:</p>
-<quote><p> ^.*abcd$</p></quote>
+ <code>
+(?&lt;=bullock|donkey)</code>
-<p>the initial .* matches the entire string at first, but when this fails (because
-there is no following "a"), it backtracks to match all but the last character,
-then all but the last two characters, and so on. Once again the search for "a"
-covers the entire string, from right to left, so we are no better off. However,
-if the pattern is written as</p>
+ <p>The following causes an error at compile time:</p>
-<quote><p> ^.*+(?&lt;=abcd)</p></quote>
+ <code>
+(?&lt;!dogs?|cats?)</code>
-<p>there can be no backtracking for the .*+ item; it can match only the entire
-string. The subsequent lookbehind assertion does a single test on the last four
-characters. If it fails, the match fails immediately. For long strings, this
-approach makes a significant difference to the processing time.</p>
+ <p>Branches that match different length strings are permitted only at the
+ top-level of a lookbehind assertion. This is an extension compared with
+ Perl, which requires all branches to match the same length of string. An
+ assertion such as the following is not permitted, as its single top-level
+ branch can match two different lengths:</p>
-<p><em>Using multiple assertions</em></p>
+ <code>
+(?&lt;=ab(c|de))</code>
-<p>Several assertions (of any sort) may occur in succession. For example,</p>
+ <p>However, it is acceptable to PCRE if rewritten to use two top-level
+ branches:</p>
-<quote><p> (?&lt;=\d{3})(?&lt;!999)foo</p></quote>
+ <code>
+(?&lt;=abc|abde)</code>
-<p>matches "foo" preceded by three digits that are not "999". Notice
-that each of the assertions is applied independently at the same point
-in the subject string. First there is a check that the previous three
-characters are all digits, and then there is a check that the same
-three characters are not "999". This pattern does <em>not</em> match
-"foo" preceded by six characters, the first of which are digits and
-the last three of which are not "999". For example, it doesn't match
-"123abcfoo". A pattern to do that is</p>
+ <p>Sometimes the escape sequence \K (see above) can be used instead of
+ a lookbehind assertion to get round the fixed-length restriction.</p>
-<quote><p> (?&lt;=\d{3}...)(?&lt;!999)foo</p></quote>
+ <p>The implementation of lookbehind assertions is, for each alternative, to
+ move the current position back temporarily by the fixed length and then
+ try to match. If there are insufficient characters before the current
+ position, the assertion fails.</p>
-<p>This time the first assertion looks at the preceding six
-characters, checking that the first three are digits, and then the
-second assertion checks that the preceding three characters are not
-"999".</p>
+ <p>In a UTF mode, PCRE does not allow the \C escape (which matches a single
+ data unit even in a UTF mode) to appear in lookbehind assertions, as it
+ makes it impossible to calculate the length of the lookbehind. The \X and
+ \R escapes, which can match different numbers of data units, are not
+ permitted either.</p>
-<p>Assertions can be nested in any combination. For example,</p>
+ <p>"Subroutine" calls (see below), such as (?2) or (?&amp;X), are permitted
+ in lookbehinds, as long as the subpattern matches a fixed-length string.
+ Recursion, however, is not supported.</p>
-<quote><p> (?&lt;=(?&lt;!foo)bar)baz</p></quote>
+ <p>Possessive quantifiers can be used with lookbehind
+ assertions to specify efficient matching of fixed-length strings at the
+ end of subject strings. Consider the following simple pattern when applied
+ to a long string that does not match:</p>
-<p>matches an occurrence of "baz" that is preceded by "bar" which in
-turn is not preceded by "foo", while</p>
+ <code>
+abcd$</code>
-<quote><p> (?&lt;=\d{3}(?!999)...)foo</p></quote>
+ <p>As matching proceeds from left to right, PCRE looks for each "a" in the
+ subject and then sees if what follows matches the remaining pattern. If
+ the pattern is specified as</p>
-<p>is another pattern that matches "foo" preceded by three digits and any three
-characters that are not "999".</p>
+ <code>
+^.*abcd$</code>
-</section>
+ <p>the initial .* matches the entire string at first. However, when this
+ fails (as there is no following "a"), it backtracks to match all but the
+ last character, then all but the last two characters, and so on. Once
+ again the search for "a" covers the entire string, from right to left, so
+ we are no better off. However, if the pattern is written as</p>
-<section><marker id="sect18"></marker><title>Conditional subpatterns</title>
+ <code>
+^.*+(?&lt;=abcd)</code>
-<p>It is possible to cause the matching process to obey a subpattern
-conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a specific capturing subpattern has
-already been matched. The two possible forms of conditional subpattern are:</p>
+ <p>there can be no backtracking for the .*+ item; it can match only the
+ entire string. The subsequent lookbehind assertion does a single test on
+ the last four characters. If it fails, the match fails immediately. For
+ long strings, this approach makes a significant difference to the
+ processing time.</p>
-<list>
-<item>(?(condition)yes-pattern)</item>
-<item>(?(condition)yes-pattern|no-pattern)</item>
-</list>
+ <p><em>Using Multiple Assertions</em></p>
-<p>If the condition is satisfied, the yes-pattern is used; otherwise the
-no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs. Each of the two alternatives may
-itself contain nested subpatterns of any form, including conditional
-subpatterns; the restriction to two alternatives applies only at the level of
-the condition. This pattern fragment is an example where the alternatives are
-complex:</p>
+ <p>Many assertions (of any sort) can occur in succession. For example, the
+ following matches "foo" preceded by three digits that are not "999":</p>
-<quote><p> (?(1) (A|B|C) | (D | (?(2)E|F) | E) )</p></quote>
+ <code>
+(?&lt;=\d{3})(?&lt;!999)foo</code>
-<p>There are four kinds of condition: references to subpatterns, references to
-recursion, a pseudo-condition called DEFINE, and assertions.</p>
+ <p>Notice that each of the assertions is applied independently at the same
+ point in the subject string. First there is a check that the previous
+ three characters are all digits, and then there is a check that the same
+ three characters are not "999". This pattern does <em>not</em> match
+ "foo" preceded by six characters, the first of which are digits and the
+ last three of which are not "999". For example, it does not match
+ "123abcfoo". A pattern to do that is the following:</p>
+ <code>
+(?&lt;=\d{3}...)(?&lt;!999)foo</code>
-<p><em>Checking for a used subpattern by number</em></p>
+ <p>This time the first assertion looks at the preceding six characters,
+ checks that the first three are digits, and then the second assertion
+ checks that the preceding three characters are not "999".</p>
-<p>If the text between the parentheses consists of a sequence of
-digits, the condition is true if a capturing subpattern of that number has previously
-matched. If there is more than one capturing subpattern with the same number
-(see the earlier section about duplicate subpattern numbers),
-the condition is true if any of them have matched. An alternative notation is
-to precede the digits with a plus or minus sign. In this case, the subpattern
-number is relative rather than absolute. The most recently opened parentheses
-can be referenced by (?(-1), the next most recent by (?(-2), and so on. Inside
-loops it can also make sense to refer to subsequent groups. The next
-parentheses to be opened can be referenced as (?(+1), and so on. (The value
-zero in any of these forms is not used; it provokes a compile-time error.)</p>
+ <p>Assertions can be nested in any combination. For example, the following
+ matches an occurrence of "baz" that is preceded by "bar", which in turn is
+ not preceded by "foo":</p>
-<p>Consider the following pattern, which contains non-significant
-whitespace to make it more readable (assume the <c>extended</c>
-option) and to divide it into three parts for ease of discussion:</p>
+ <code>
+(?&lt;=(?&lt;!foo)bar)baz</code>
-<quote><p> ( \( )? [^()]+ (?(1) \) )</p></quote>
+ <p>The following pattern matches "foo" preceded by three digits and any
+ three characters that are not "999":</p>
-<p>The first part matches an optional opening parenthesis, and if that
-character is present, sets it as the first captured substring. The second part
-matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether or not the first set of parentheses matched
-or not. If they did, that is, if subject started with an opening parenthesis,
-the condition is true, and so the yes-pattern is executed and a closing
-parenthesis is required. Otherwise, since no-pattern is not present, the
-subpattern matches nothing. In other words, this pattern matches a sequence of
-non-parentheses, optionally enclosed in parentheses.</p>
+ <code>
+(?&lt;=\d{3}(?!999)...)foo</code>
+ </section>
-<p>If you were embedding this pattern in a larger one, you could use a relative
-reference:</p>
+ <section>
+ <marker id="sect18"></marker>
+ <title>Conditional Subpatterns</title>
+ <p>It is possible to cause the matching process to obey a subpattern
+ conditionally or to choose between two alternative subpatterns, depending
+ on the result of an assertion, or whether a specific capturing subpattern
+ has already been matched. The following are the two possible forms of
+ conditional subpattern:</p>
+
+ <code>
+(?(condition)yes-pattern)
+(?(condition)yes-pattern|no-pattern)</code>
+
+ <p>If the condition is satisfied, the yes-pattern is used, otherwise the
+ no-pattern (if present). If more than two alternatives exist in the
+ subpattern, a compile-time error occurs. Each of the two alternatives can
+ itself contain nested subpatterns of any form, including conditional
+ subpatterns; the restriction to two alternatives applies only at the level
+ of the condition. The following pattern fragment is an example where the
+ alternatives are complex:</p>
+
+ <code>
+(?(1) (A|B|C) | (D | (?(2)E|F) | E) )</code>
+
+ <p>There are four kinds of condition: references to subpatterns, references
+ to recursion, a pseudo-condition called DEFINE, and assertions.</p>
+
+ <p><em>Checking for a Used Subpattern By Number</em></p>
+
+ <p>If the text between the parentheses consists of a sequence of digits,
+ the condition is true if a capturing subpattern of that number has
+ previously matched. If more than one capturing subpattern with the same
+ number exists (see section <seealso marker="#sect12">
+ Duplicate Subpattern Numbers</seealso> earlier), the condition is true if
+ any of them have matched. An alternative notation is to precede the
+ digits with a plus or minus sign. In this case, the subpattern number is
+ relative rather than absolute. The most recently opened parentheses can be
+ referenced by (?(-1), the next most recent by (?(-2), and so on. Inside
+ loops, it can also make sense to refer to subsequent groups. The next
+ parentheses to be opened can be referenced as (?(+1), and so on. (The
+ value zero in any of these forms is not used; it provokes a compile-time
+ error.)</p>
+
+ <p>Consider the following pattern, which contains non-significant whitespace
+ to make it more readable (assume option <c>extended</c>) and to divide it
+ into three parts for ease of discussion:</p>
+
+ <code>
+( \( )? [^()]+ (?(1) \) )</code>
+
+ <p>The first part matches an optional opening parenthesis, and if that
+ character is present, sets it as the first captured substring. The second
+ part matches one or more characters that are not parentheses. The third
+ part is a conditional subpattern that tests whether the first set of
+ parentheses matched or not. If they did, that is, if subject started with
+ an opening parenthesis, the condition is true, and so the yes-pattern is
+ executed and a closing parenthesis is required. Otherwise, as no-pattern
+ is not present, the subpattern matches nothing. That is, this pattern
+ matches a sequence of non-parentheses, optionally enclosed in
+ parentheses.</p>
+
+ <p>If this pattern is embedded in a larger one, a relative reference can be
+ used:</p>
+
+ <code>
+...other stuff... ( \( )? [^()]+ (?(-1) \) ) ...</code>
+
+ <p>This makes the fragment independent of the parentheses in the larger
+ pattern.</p>
+
+ <p><em>Checking for a Used Subpattern By Name</em></p>
+
+ <p>Perl uses the syntax (?(&lt;name&gt;)...) or (?('name')...) to test for a
+ used subpattern by name. For compatibility with earlier versions of PCRE,
+ which had this facility before Perl, the syntax (?(name)...) is also
+ recognized. However, there is a possible ambiguity with this syntax, as
+ subpattern names can consist entirely of digits. PCRE looks first for a
+ named subpattern; if it cannot find one and the name consists entirely of
+ digits, PCRE looks for a subpattern of that number, which must be &gt; 0.
+ Using subpattern names that consist entirely of digits is not
+ recommended.</p>
+
+ <p>Rewriting the previous example to use a named subpattern gives:</p>
+
+ <code>
+(?&lt;OPEN&gt; \( )? [^()]+ (?(&lt;OPEN&gt;) \) )</code>
+
+ <p>If the name used in a condition of this kind is a duplicate, the test is
+ applied to all subpatterns of the same name, and is true if any one of
+ them has matched.</p>
+
+ <p><em>Checking for Pattern Recursion</em></p>
+
+ <p>If the condition is the string (R), and there is no subpattern with the
+ name R, the condition is true if a recursive call to the whole pattern or
+ any subpattern has been made. If digits or a name preceded by ampersand
+ follow the letter R, for example:</p>
+
+ <code>
+(?(R3)...) or (?(R&amp;name)...)</code>
+
+ <p>the condition is true if the most recent recursion is into a subpattern
+ whose number or name is given. This condition does not check the entire
+ recursion stack. If the name used in a condition of this kind is a
+ duplicate, the test is applied to all subpatterns of the same name, and is
+ true if any one of them is the most recent recursion.</p>
+
+ <p>At "top-level", all these recursion test conditions are false. The syntax
+ for recursive patterns is described below.</p>
+
+ <p><em>Defining Subpatterns for Use By Reference Only</em></p>
+ <marker id="defining_subpatterns"/>
+
+ <p>If the condition is the string (DEFINE), and there is no subpattern with
+ the name DEFINE, the condition is always false. In this case, there can be
+ only one alternative in the subpattern. It is always skipped if control
+ reaches this point in the pattern. The idea of DEFINE is that it can be
+ used to define "subroutines" that can be referenced from elsewhere. (The
+ use of subroutines is described below.) For example, a pattern to match
+ an IPv4 address, such as "192.168.23.245", can be written like this
+ (ignore whitespace and line breaks):</p>
+
+ <code>
+(?(DEFINE) (?&lt;byte&gt; 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) ) \b (?&amp;byte) (\.(?&amp;byte)){3} \b</code>
+
+ <p>The first part of the pattern is a DEFINE group inside which is a another
+ group named "byte" is defined. This matches an individual component of an
+ IPv4 address (a number &lt; 256). When matching takes place, this part of
+ the pattern is skipped, as DEFINE acts like a false condition. The
+ remaining pattern uses references to the named group to match the four
+ dot-separated components of an IPv4 address, insisting on a word boundary
+ at each end.</p>
+
+ <p><em>Assertion Conditions</em></p>
+
+ <p>If the condition is not in any of the above formats, it must be an
+ assertion. This can be a positive or negative lookahead or lookbehind
+ assertion. Consider the following pattern, containing non-significant
+ whitespace, and with the two alternatives on the second line:</p>
+
+ <code type="none">
+(?(?=[^a-z]*[a-z])
+\d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )</code>
+
+ <p>The condition is a positive lookahead assertion that matches an optional
+ sequence of non-letters followed by a letter. That is, it tests for the
+ presence of at least one letter in the subject. If a letter is found, the
+ subject is matched against the first alternative, otherwise it is matched
+ against the second. This pattern matches strings in one of the two forms
+ dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.</p>
+ </section>
-<quote><p> ...other stuff... ( \( )? [^()]+ (?(-1) \) ) ...</p></quote>
+ <section>
+ <marker id="sect19"></marker>
+ <title>Comments</title>
+ <p>There are two ways to include comments in patterns that are processed by
+ PCRE. In both cases, the start of the comment must not be in a character
+ class, or in the middle of any other sequence of related characters such
+ as (?: or a subpattern name or number. The characters that make up a
+ comment play no part in the pattern matching.</p>
+
+ <p>The sequence (?# marks the start of a comment that continues up to the
+ next closing parenthesis. Nested parentheses are not permitted. If option
+ PCRE_EXTENDED is set, an unescaped # character also introduces a comment,
+ which in this case continues to immediately after the next newline
+ character or character sequence in the pattern. Which characters are
+ interpreted as newlines is controlled by the options passed to a
+ compiling function or by a special sequence at the start of the pattern,
+ as described in section <seealso marker="#newline_conventions">
+ Newline Conventions</seealso> earlier.</p>
+
+ <p>Notice that the end of this type of comment is a literal newline sequence
+ in the pattern; escape sequences that happen to represent a newline do not
+ count. For example, consider the following pattern when <c>extended</c> is
+ set, and the default newline convention is in force:</p>
+
+ <code>
+abc #comment \n still comment</code>
+
+ <p>On encountering character #, <c>pcre_compile()</c> skips along, looking
+ for a newline in the pattern. The sequence \n is still literal at this
+ stage, so it does not terminate the comment. Only a character with code
+ value 0x0a (the default newline) does so.</p>
+ </section>
-<p>This makes the fragment independent of the parentheses in the larger pattern.</p>
+ <section>
+ <marker id="sect20"></marker>
+ <title>Recursive Patterns</title>
+ <p>Consider the problem of matching a string in parentheses, allowing for
+ unlimited nested parentheses. Without the use of recursion, the best that
+ can be done is to use a pattern that matches up to some fixed depth of
+ nesting. It is not possible to handle an arbitrary nesting depth.</p>
+
+ <p>For some time, Perl has provided a facility that allows regular
+ expressions to recurse (among other things). It does this by
+ interpolating Perl code in the expression at runtime, and the code can
+ refer to the expression itself. A Perl pattern using code interpolation to
+ solve the parentheses problem can be created like this:</p>
+
+ <code>
+$re = qr{\( (?: (?&gt;[^()]+) | (?p{$re}) )* \)}x;</code>
+
+ <p>Item (?p{...}) interpolates Perl code at runtime, and in this case refers
+ recursively to the pattern in which it appears.</p>
+
+ <p>Obviously, PCRE cannot support the interpolation of Perl code. Instead,
+ it supports special syntax for recursion of the entire pattern, and for
+ individual subpattern recursion. After its introduction in PCRE and
+ Python, this kind of recursion was later introduced into Perl at
+ release 5.10.</p>
+
+ <p>A special item that consists of (? followed by a number &gt; 0 and a
+ closing parenthesis is a recursive subroutine call of the subpattern of
+ the given number, if it occurs inside that subpattern. (If not,
+ it is a non-recursive subroutine call, which is described in the next
+ section.) The special item (?R) or (?0) is a recursive call of the entire
+ regular expression.</p>
-<p><em>Checking for a used subpattern by name</em></p>
+ <p>This PCRE pattern solves the nested parentheses problem (assume that
+ option <c>extended</c> is set so that whitespace is ignored):</p>
+
+ <code>
+\( ( [^()]++ | (?R) )* \)</code>
+
+ <p>First it matches an opening parenthesis. Then it matches any number of
+ substrings, which can either be a sequence of non-parentheses or a
+ recursive match of the pattern itself (that is, a correctly parenthesized
+ substring). Finally there is a closing parenthesis. Notice the use of a
+ possessive quantifier to avoid backtracking into sequences of
+ non-parentheses.</p>
+
+ <p>If this was part of a larger pattern, you would not want to recurse the
+ entire pattern, so instead you can use:</p>
+
+ <code>
+( \( ( [^()]++ | (?1) )* \) )</code>
+
+ <p>The pattern is here within parentheses so that the recursion refers to
+ them instead of the whole pattern.</p>
+
+ <p>In a larger pattern, keeping track of parenthesis numbers can be tricky.
+ This is made easier by the use of relative references. Instead of (?1) in
+ the pattern above, you can write (?-2) to refer to the second most
+ recently opened parentheses preceding the recursion. That is, a negative
+ number counts capturing parentheses leftwards from the point at which it
+ is encountered.</p>
+
+ <p>It is also possible to refer to later opened parentheses, by
+ writing references such as (?+2). However, these cannot be recursive, as
+ the reference is not inside the parentheses that are referenced. They are
+ always non-recursive subroutine calls, as described in the next
+ section.</p>
+
+ <p>An alternative approach is to use named parentheses instead. The Perl
+ syntax for this is (?&amp;name). The earlier PCRE syntax (?P&gt;name) is
+ also supported. We can rewrite the above example as follows:</p>
+
+ <code>
+(?&lt;pn&gt; \( ( [^()]++ | (?&amp;pn) )* \) )</code>
+
+ <p>If there is more than one subpattern with the same name, the earliest
+ one is used.</p>
+
+ <p>This particular example pattern that we have studied contains nested
+ unlimited repeats, and so the use of a possessive quantifier for matching
+ strings of non-parentheses is important when applying the pattern to
+ strings that do not match. For example, when this pattern is applied
+ to</p>
+
+ <code>
+(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()</code>
+
+ <p>it gives "no match" quickly. However, if a possessive quantifier is not
+ used, the match runs for a long time, as there are so many different
+ ways the + and * repeats can carve up the subject, and all must be tested
+ before failure can be reported.</p>
+
+ <p>At the end of a match, the values of capturing parentheses are those from
+ the outermost level. If the pattern above is matched against</p>
+
+ <code>
+(ab(cd)ef)</code>
+
+ <p>the value for the inner capturing parentheses (numbered 2) is "ef",
+ which is the last value taken on at the top-level. If a capturing
+ subpattern is not matched at the top level, its final captured value is
+ unset, even if it was (temporarily) set at a deeper level during the
+ matching process.</p>
+
+ <p>Do not confuse item (?R) with condition (R), which tests for recursion.
+ Consider the following pattern, which matches text in angle brackets,
+ allowing for arbitrary nesting. Only digits are allowed in nested brackets
+ (that is, when recursing), while any characters are permitted at the
+ outer level.</p>
+
+ <code>
+&lt; (?: (?(R) \d++ | [^&lt;&gt;]*+) | (?R)) * &gt;</code>
+
+ <p>Here (?(R) is the start of a conditional subpattern, with two different
+ alternatives for the recursive and non-recursive cases. Item (?R) is the
+ actual recursive call.</p>
+
+ <p><em>Differences in Recursion Processing between PCRE and Perl</em></p>
+
+ <p>Recursion processing in PCRE differs from Perl in two important ways. In
+ PCRE (like Python, but unlike Perl), a recursive subpattern call is always
+ treated as an atomic group. That is, once it has matched some of the
+ subject string, it is never re-entered, even if it contains untried
+ alternatives and there is a subsequent matching failure. This can be
+ illustrated by the following pattern, which means to match a palindromic
+ string containing an odd number of characters (for example, "a", "aba",
+ "abcba", "abcdcba"):</p>
+
+ <code>
+^(.|(.)(?1)\2)$</code>
+
+ <p>The idea is that it either matches a single character, or two identical
+ characters surrounding a subpalindrome. In Perl, this pattern works; in
+ PCRE it does not work if the pattern is longer than three characters.
+ Consider the subject string "abcba".</p>
+
+ <p>At the top level, the first character is matched, but as it is not at
+ the end of the string, the first alternative fails, the second
+ alternative is taken, and the recursion kicks in. The recursive call to
+ subpattern 1 successfully matches the next character ("b"). (Notice that
+ the beginning and end of line tests are not part of the recursion.)</p>
+
+ <p>Back at the top level, the next character ("c") is compared with what
+ subpattern 2 matched, which was "a". This fails. As the recursion is
+ treated as an atomic group, there are now no backtracking points, and so
+ the entire match fails. (Perl can now re-enter the recursion
+ and try the second alternative.) However, if the pattern is written with
+ the alternatives in the other order, things are different:</p>
+
+ <code>
+^((.)(?1)\2|.)$</code>
+
+ <p>This time, the recursing alternative is tried first, and continues to
+ recurse until it runs out of characters, at which point the recursion
+ fails. But this time we have another alternative to try at the higher
+ level. That is the significant difference: in the previous case the
+ remaining alternative is at a deeper recursion level, which PCRE cannot
+ use.</p>
+
+ <p>To change the pattern so that it matches all palindromic strings, not
+ only those with an odd number of characters, it is tempting to change the
+ pattern to this:</p>
+
+ <code>
+^((.)(?1)\2|.?)$</code>
+
+ <p>Again, this works in Perl, but not in PCRE, and for the same reason. When
+ a deeper recursion has matched a single character, it cannot be entered
+ again to match an empty string. The solution is to separate the two cases,
+ and write out the odd and even cases as alternatives at the higher
+ level:</p>
+
+ <code>
+^(?:((.)(?1)\2|)|((.)(?3)\4|.))</code>
+
+ <p>If you want to match typical palindromic phrases, the pattern must ignore
+ all non-word characters, which can be done as follows:</p>
+
+ <code>
+^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$</code>
+
+ <p>If run with option <c>caseless</c>, this pattern matches phrases such as
+ "A man, a plan, a canal: Panama!" and it works well in both PCRE and Perl.
+ Notice the use of the possessive quantifier *+ to avoid backtracking into
+ sequences of non-word characters. Without this, PCRE takes much longer
+ (10 times or more) to match typical phrases, and Perl takes so long that
+ you think it has gone into a loop.</p>
-<p>Perl uses the syntax (?(&lt;name&gt;)...) or (?('name')...) to test
-for a used subpattern by name. For compatibility with earlier versions
-of PCRE, which had this facility before Perl, the syntax (?(name)...)
-is also recognized. However, there is a possible ambiguity with this
-syntax, because subpattern names may consist entirely of digits. PCRE
-looks first for a named subpattern; if it cannot find one and the name
-consists entirely of digits, PCRE looks for a subpattern of that
-number, which must be greater than zero. Using subpattern names that
-consist entirely of digits is not recommended.</p>
+ <note>
+ <p>The palindrome-matching patterns above work only if the subject string
+ does not start with a palindrome that is shorter than the entire string.
+ For example, although "abcba" is correctly matched, if the subject is
+ "ababa", PCRE finds palindrome "aba" at the start, and then fails at top
+ level, as the end of the string does not follow. Once again, it cannot
+ jump back into the recursion to try other alternatives, so the entire
+ match fails.</p>
+ </note>
-<p>Rewriting the above example to use a named subpattern gives this:</p>
+ <p>The second way in which PCRE and Perl differ in their recursion
+ processing is in the handling of captured values. In Perl, when a
+ subpattern is called recursively or as a subpattern (see the next
+ section), it has no access to any values that were captured outside the
+ recursion. In PCRE these values can be referenced. Consider the following
+ pattern:</p>
+
+ <code>
+^(.)(\1|a(?2))</code>
+
+ <p>In PCRE, it matches "bab". The first capturing parentheses match "b",
+ then in the second group, when the back reference \1 fails to match "b",
+ the second alternative matches "a", and then recurses. In the recursion,
+ \1 does now match "b" and so the whole match succeeds. In Perl, the
+ pattern fails to match because inside the recursive call \1 cannot access
+ the externally set value.</p>
+ </section>
-<quote><p> (?&lt;OPEN&gt; \( )? [^()]+ (?(&lt;OPEN&gt;) \) )</p></quote>
+ <section>
+ <marker id="sect21"></marker>
+ <title>Subpatterns as Subroutines</title>
+ <p>If the syntax for a recursive subpattern call (either by number or by
+ name) is used outside the parentheses to which it refers, it operates
+ like a subroutine in a programming language. The called subpattern can be
+ defined before or after the reference. A numbered reference can be
+ absolute or relative, as in the following examples:</p>
+
+ <code>
+(...(absolute)...)...(?2)...
+(...(relative)...)...(?-1)...
+(...(?+1)...(relative)...</code>
+
+ <p>An earlier example pointed out that the following pattern matches "sense
+ and sensibility" and "response and responsibility", but not "sense and
+ responsibility":</p>
+
+ <code>
+(sens|respons)e and \1ibility</code>
+
+ <p>If instead the following pattern is used, it matches "sense and
+ responsibility" and the other two strings:</p>
+
+ <code>
+(sens|respons)e and (?1)ibility</code>
+
+ <p>Another example is provided in the discussion of DEFINE earlier.</p>
+
+ <p>All subroutine calls, recursive or not, are always treated as atomic
+ groups. That is, once a subroutine has matched some of the subject string,
+ it is never re-entered, even if it contains untried alternatives and there
+ is a subsequent matching failure. Any capturing parentheses that are set
+ during the subroutine call revert to their previous values afterwards.</p>
+
+ <p>Processing options such as case-independence are fixed when a subpattern
+ is defined, so if it is used as a subroutine, such options cannot be
+ changed for different calls. For example, the following pattern matches
+ "abcabc" but not "abcABC", as the change of processing option does not
+ affect the called subpattern:</p>
+
+ <code>
+(abc)(?i:(?-1))</code>
+ </section>
-<p>If the name used in a condition of this kind is a duplicate, the test is
-applied to all subpatterns of the same name, and is true if any one of them has
-matched.</p>
+ <section>
+ <marker id="sect22"></marker>
+ <title>Oniguruma Subroutine Syntax</title>
+ <p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a
+ name or a number enclosed either in angle brackets or single quotes, is
+ alternative syntax for referencing a subpattern as a subroutine, possibly
+ recursively. Here follows two of the examples used above, rewritten using
+ this syntax:</p>
+
+ <code>
+(?&lt;pn&gt; \( ( (?&gt;[^()]+) | \g&lt;pn&gt; )* \) )
+(sens|respons)e and \g'1'ibility</code>
+
+ <p>PCRE supports an extension to Oniguruma: if a number is preceded by a
+ plus or minus sign, it is taken as a relative reference, for example:</p>
+
+ <code>
+(abc)(?i:\g&lt;-1&gt;)</code>
+
+ <p>Notice that \g{...} (Perl syntax) and \g&lt;...&gt; (Oniguruma syntax)
+ are <em>not</em> synonymous. The former is a back reference; the latter
+ is a subroutine call.</p>
+ </section>
-<p><em>Checking for pattern recursion</em></p>
+ <section>
+ <marker id="sect23"></marker>
+ <title>Backtracking Control</title>
+ <p>Perl 5.10 introduced some "Special Backtracking Control Verbs",
+ which are still described in the Perl documentation as "experimental and
+ subject to change or removal in a future version of Perl". It goes on to
+ say: "Their usage in production code should be noted to avoid problems
+ during upgrades." The same remarks apply to the PCRE features described
+ in this section.</p>
+
+ <p>The new verbs make use of what was previously invalid syntax: an opening
+ parenthesis followed by an asterisk. They are generally of the form
+ (*VERB) or (*VERB:NAME). Some can take either form, possibly behaving
+ differently depending on whether a name is present. A name is any sequence
+ of characters that does not include a closing parenthesis. The maximum
+ name length is 255 in the 8-bit library and 65535 in the 16-bit and 32-bit
+ libraries. If the name is empty, that is, if the closing parenthesis
+ immediately follows the colon, the effect is as if the colon was not
+ there. Any number of these verbs can occur in a pattern.</p>
+
+ <p>The behavior of these verbs in repeated groups, assertions, and in
+ subpatterns called as subroutines (whether or not recursively) is
+ described below.</p>
+
+ <p><em>Optimizations That Affect Backtracking Verbs</em></p>
+
+ <p>PCRE contains some optimizations that are used to speed up matching by
+ running some checks at the start of each match attempt. For example, it
+ can know the minimum length of matching subject, or that a particular
+ character must be present. When one of these optimizations bypasses the
+ running of a match, any included backtracking verbs are not processed.
+ processed. You can suppress the start-of-match optimizations by setting
+ option <c>no_start_optimize</c> when calling
+ <seealso marker="#compile/2"><c>compile/2</c></seealso> or
+ <seealso marker="#run/3"><c>run/3</c></seealso>, or by starting the
+ pattern with (*NO_START_OPT).</p>
+
+ <p>Experiments with Perl suggest that it too has similar optimizations,
+ sometimes leading to anomalous results.</p>
+
+ <p><em>Verbs That Act Immediately</em></p>
+
+ <p>The following verbs act as soon as they are encountered. They must not
+ be followed by a name.</p>
+
+ <code>
+(*ACCEPT)</code>
+
+ <p>This verb causes the match to end successfully, skipping the remainder of
+ the pattern. However, when it is inside a subpattern that is called as a
+ subroutine, only that subpattern is ended successfully. Matching then
+ continues at the outer level. If (*ACCEPT) is triggered in a positive
+ assertion, the assertion succeeds; in a negative assertion, the assertion
+ fails.</p>
+
+ <p>If (*ACCEPT) is inside capturing parentheses, the data so far is
+ captured. For example, the following matches "AB", "AAD", or "ACD". When
+ it matches "AB", "B" is captured by the outer parentheses.</p>
+
+ <code>
+A((?:A|B(*ACCEPT)|C)D)</code>
+
+ <p>The following verb causes a matching failure, forcing backtracking to
+ occur. It is equivalent to (?!) but easier to read.</p>
+
+ <code>
+(*FAIL) or (*F)</code>
+
+ <p>The Perl documentation states that it is probably useful only when
+ combined with (?{}) or (??{}). Those are Perl features that
+ are not present in PCRE.</p>
+
+ <p>A match with the string "aaaa" always fails, but the callout is taken
+ before each backtrack occurs (in this example, 10 times).</p>
+
+ <p><em>Recording Which Path Was Taken</em></p>
+
+ <p>The main purpose of this verb is to track how a match was arrived at,
+ although it also has a secondary use in with advancing the match
+ starting point (see (*SKIP) below).</p>
-<p>If the condition is the string (R), and there is no subpattern with
-the name R, the condition is true if a recursive call to the whole
-pattern or any subpattern has been made. If digits or a name preceded
-by ampersand follow the letter R, for example:</p>
+ <note>
+ <p>In Erlang, there is no interface to retrieve a mark with
+ <seealso marker="#run/2"><c>run/2,3</c></seealso>, so only the secondary
+ purpose is relevant to the Erlang programmer.</p>
-<quote><p> (?(R3)...) or (?(R&amp;name)...)</p></quote>
+ <p>The rest of this section is therefore deliberately not adapted for
+ reading by the Erlang programmer, but the examples can help in
+ understanding NAMES as they can be used by (*SKIP).</p>
+ </note>
-<p>the condition is true if the most recent recursion is into a
-subpattern whose number or name is given. This condition does not
-check the entire recursion stack. If the name used in a condition of this kind is a duplicate, the test is
-applied to all subpatterns of the same name, and is true if any one of them is
-the most recent recursion.</p>
+ <code>
+(*MARK:NAME) or (*:NAME)</code>
-<p>At "top level", all these recursion test conditions are false. The syntax for recursive
-patterns is described below.</p>
-
-<p><em>Defining subpatterns for use by reference only</em></p>
-
-<p>If the condition is the string (DEFINE), and there is no subpattern with the
-name DEFINE, the condition is always false. In this case, there may be only one
-alternative in the subpattern. It is always skipped if control reaches this
-point in the pattern; the idea of DEFINE is that it can be used to define
-"subroutines" that can be referenced from elsewhere. (The use of subroutines
-is described below.) For example, a pattern to match an IPv4 address such as
-"192.168.23.245" could be
-written like this (ignore whitespace and line breaks):</p>
+ <p>A name is always required with this verb. There can be as many instances
+ of (*MARK) as you like in a pattern, and their names do not have to be
+ unique.</p>
-<quote><p> (?(DEFINE) (?&lt;byte&gt; 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) )
- \b (?&amp;byte) (\.(?&amp;byte)){3} \b</p></quote>
-
-<p>The first part of the pattern is a DEFINE group inside which a
-another group named "byte" is defined. This matches an individual
-component of an IPv4 address (a number less than 256). When matching
-takes place, this part of the pattern is skipped because DEFINE acts
-like a false condition. The rest of the pattern uses references to the
-named group to match the four dot-separated components of an IPv4
-address, insisting on a word boundary at each end.</p>
-
-<p><em>Assertion conditions</em></p>
+ <p>When a match succeeds, the name of the last encountered (*MARK:NAME),
+ (*PRUNE:NAME), or (*THEN:NAME) on the matching path is passed back to the
+ caller as described in section "Extra data for <c>pcre_exec()</c>" in the
+ <c>pcreapi</c> documentation. In the following example of <c>pcretest</c>
+ output, the /K modifier requests the retrieval and outputting of (*MARK)
+ data:</p>
-<p>If the condition is not in any of the above formats, it must be an
-assertion. This may be a positive or negative lookahead or lookbehind
-assertion. Consider this pattern, again containing non-significant
-whitespace, and with the two alternatives on the second line:</p>
+<code>
+ re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
+data&gt; XY
+ 0: XY
+MK: A
+XZ
+ 0: XZ
+MK: B</code>
+
+ <p>The (*MARK) name is tagged with "MK:" in this output, and in this example
+ it indicates which of the two alternatives matched. This is a more
+ efficient way of obtaining this information than putting each alternative
+ in its own capturing parentheses.</p>
+
+ <p>If a verb with a name is encountered in a positive assertion that is
+ true, the name is recorded and passed back if it is the last encountered.
+ This does not occur for negative assertions or failing positive
+ assertions.</p>
+
+ <p>After a partial match or a failed match, the last encountered name in the
+ entire match process is returned, for example:</p>
+
+ <code>
+ re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
+data&gt; XP
+No match, mark = B</code>
+
+ <p>Notice that in this unanchored example, the mark is retained from the
+ match attempt that started at letter "X" in the subject. Subsequent match
+ attempts starting at "P" and then with an empty string do not get as far
+ as the (*MARK) item, nevertheless do not reset it.</p>
+
+ <p><em>Verbs That Act after Backtracking</em></p>
+
+ <p>The following verbs do nothing when they are encountered. Matching
+ continues with what follows, but if there is no subsequent match, causing
+ a backtrack to the verb, a failure is forced. That is, backtracking cannot
+ pass to the left of the verb. However, when one of these verbs appears
+ inside an atomic group or an assertion that is true, its effect is
+ confined to that group, as once the group has been matched, there is never
+ any backtracking into it. In this situation, backtracking can "jump back"
+ to the left of the entire atomic group or assertion. (Remember also, as
+ stated above, that this localization also applies in subroutine
+ calls.)</p>
+
+ <p>These verbs differ in exactly what kind of failure occurs when
+ backtracking reaches them. The behavior described below is what occurs
+ when the verb is not in a subroutine or an assertion. Subsequent sections
+ cover these special cases.</p>
+
+ <p>The following verb, which must not be followed by a name, causes the
+ whole match to fail outright if there is a later matching failure that
+ causes backtracking to reach it. Even if the pattern is unanchored, no
+ further attempts to find a match by advancing the starting point take
+ place.</p>
+
+ <code>
+(*COMMIT)</code>
+
+ <p>If (*COMMIT) is the only backtracking verb that is encountered, once it
+ has been passed, <seealso marker="#run/2"><c>run/2,3</c></seealso> is
+ committed to find a match at the current starting point, or not at all,
+ for example:</p>
+
+ <code>
+a+(*COMMIT)b</code>
+
+ <p>This matches "xxaab" but not "aacaab". It can be thought of as a kind of
+ dynamic anchor, or "I've started, so I must finish". The name of the most
+ recently passed (*MARK) in the path is passed back when (*COMMIT) forces
+ a match failure.</p>
+
+ <p>If more than one backtracking verb exists in a pattern, a different one
+ that follows (*COMMIT) can be triggered first, so merely passing (*COMMIT)
+ during a match does not always guarantee that a match must be at this
+ starting point.</p>
+
+ <p>Notice that (*COMMIT) at the start of a pattern is not the same as an
+ anchor, unless the PCRE start-of-match optimizations are turned off, as
+ shown in the following example:</p>
<code type="none">
- (?(?=[^a-z]*[a-z])
- \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )</code>
-
-<p>The condition is a positive lookahead assertion that matches an optional
-sequence of non-letters followed by a letter. In other words, it tests for the
-presence of at least one letter in the subject. If a letter is found, the
-subject is matched against the first alternative; otherwise it is matched
-against the second. This pattern matches strings in one of the two forms
-dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.</p>
-
-
-</section>
-
-<section><marker id="sect19"></marker><title>Comments</title>
-
-<p>There are two ways of including comments in patterns that are processed by
-PCRE. In both cases, the start of the comment must not be in a character class,
-nor in the middle of any other sequence of related characters such as (?: or a
-subpattern name or number. The characters that make up a comment play no part
-in the pattern matching.</p>
-
-<p>The sequence (?# marks the start of a comment that continues up to the next
-closing parenthesis. Nested parentheses are not permitted. If the PCRE_EXTENDED
-option is set, an unescaped # character also introduces a comment, which in
-this case continues to immediately after the next newline character or
-character sequence in the pattern. Which characters are interpreted as newlines
-is controlled by the options passed to a compiling function or by a special
-sequence at the start of the pattern, as described in the section entitled
-"Newline conventions"
-above. Note that the end of this type of comment is a literal newline sequence
-in the pattern; escape sequences that happen to represent a newline do not
-count. For example, consider this pattern when <c>extended</c> is set, and the
-default newline convention is in force:</p>
-
-<quote><p> abc #comment \n still comment</p></quote>
-
-<p>On encountering the # character, <em>pcre_compile()</em> skips along, looking for
-a newline in the pattern. The sequence \n is still literal at this stage, so
-it does not terminate the comment. Only an actual character with the code value
-0x0a (the default newline) does so.</p>
-
-</section>
-
-<section><marker id="sect20"></marker><title>Recursive patterns</title>
+1&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list}]).
+{match,["abc"]}
+2&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list},no_start_optimize]).
+nomatch</code>
+
+ <p>PCRE knows that any match must start with "a", so the optimization skips
+ along the subject to "a" before running the first match attempt, which
+ succeeds. When the optimization is disabled by option
+ <c>no_start_optimize</c>, the match starts at "x" and so the (*COMMIT)
+ causes it to fail without trying any other starting points.</p>
+
+ <p>The following verb causes the match to fail at the current starting
+ position in the subject if there is a later matching failure that causes
+ backtracking to reach it:</p>
+
+ <code>
+(*PRUNE) or (*PRUNE:NAME)</code>
+
+ <p>If the pattern is unanchored, the normal "bumpalong" advance to the next
+ starting character then occurs. Backtracking can occur as usual to the
+ left of (*PRUNE), before it is reached, or when matching to the right of
+ (*PRUNE), but if there is no match to the right, backtracking cannot
+ cross (*PRUNE). In simple cases, the use of (*PRUNE) is just an
+ alternative to an atomic group or possessive quantifier, but there are
+ some uses of (*PRUNE) that cannot be expressed in any other way. In an
+ anchored pattern, (*PRUNE) has the same effect as (*COMMIT).</p>
+
+ <p>The behavior of (*PRUNE:NAME) is the not the same as
+ (*MARK:NAME)(*PRUNE). It is like (*MARK:NAME) in that the name is
+ remembered for passing back to the caller. However, (*SKIP:NAME) searches
+ only for names set with (*MARK).</p>
-<p>Consider the problem of matching a string in parentheses, allowing for
-unlimited nested parentheses. Without the use of recursion, the best that can
-be done is to use a pattern that matches up to some fixed depth of nesting. It
-is not possible to handle an arbitrary nesting depth.</p>
-
-<p>For some time, Perl has provided a facility that allows regular
-expressions to recurse (amongst other things). It does this by
-interpolating Perl code in the expression at run time, and the code
-can refer to the expression itself. A Perl pattern using code
-interpolation to solve the parentheses problem can be created like
-this:</p>
-
-<quote><p> $re = qr{\( (?: (?&gt;[^()]+) | (?p{$re}) )* \)}x;</p></quote>
-
-<p>The (?p{...}) item interpolates Perl code at run time, and in this
-case refers recursively to the pattern in which it appears.</p>
-
-<p>Obviously, PCRE cannot support the interpolation of Perl code. Instead, it
-supports special syntax for recursion of the entire pattern, and also for
-individual subpattern recursion. After its introduction in PCRE and Python,
-this kind of recursion was subsequently introduced into Perl at release 5.10.</p>
-
-<p>A special item that consists of (? followed by a number greater
-than zero and a closing parenthesis is a recursive subroutine call of the
-subpattern of the given number, provided that it occurs inside that
-subpattern. (If not, it is a non-recursive subroutine call, which is described in
-the next section.) The special item (?R) or (?0) is a recursive call
-of the entire regular expression.</p>
-
-<p>This PCRE pattern solves the nested parentheses problem (assume the
-<c>extended</c> option is set so that whitespace is ignored):</p>
-
-<quote><p> \( ( [^()]++ | (?R) )* \)</p></quote>
-
-<p>First it matches an opening parenthesis. Then it matches any number
-of substrings which can either be a sequence of non-parentheses, or a
-recursive match of the pattern itself (that is, a correctly
-parenthesized substring). Finally there is a closing
-parenthesis. Note the use of a possessive quantifier to avoid
-backtracking into sequences of non-parentheses.</p>
-
-<p>If this were part of a larger pattern, you would not want to
-recurse the entire pattern, so instead you could use this:</p>
-
-<quote><p> ( \( ( [^()]++ | (?1) )* \) )</p></quote>
-
-<p>We have put the pattern into parentheses, and caused the recursion
-to refer to them instead of the whole pattern.</p>
-
-<p>In a larger pattern, keeping track of parenthesis numbers can be tricky. This
-is made easier by the use of relative references. Instead of (?1) in the
-pattern above you can write (?-2) to refer to the second most recently opened
-parentheses preceding the recursion. In other words, a negative number counts
-capturing parentheses leftwards from the point at which it is encountered.</p>
-
-<p>It is also possible to refer to subsequently opened parentheses, by
-writing references such as (?+2). However, these cannot be recursive
-because the reference is not inside the parentheses that are
-referenced. They are always non-recursive subroutine calls, as described in the
-next section.</p>
-
-<p>An alternative approach is to use named parentheses instead. The
-Perl syntax for this is (?&amp;name); PCRE's earlier syntax
-(?P&gt;name) is also supported. We could rewrite the above example as
-follows:</p>
-
-<quote><p> (?&lt;pn&gt; \( ( [^()]++ | (?&amp;pn) )* \) )</p></quote>
-
-<p>If there is more than one subpattern with the same name, the earliest one is
-used.</p>
-
-<p>This particular example pattern that we have been looking at contains nested
-unlimited repeats, and so the use of a possessive quantifier for matching
-strings of non-parentheses is important when applying the pattern to strings
-that do not match. For example, when this pattern is applied to</p>
-
-<quote><p> (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()</p></quote>
-
-<p>it yields "no match" quickly. However, if a possessive quantifier is not used,
-the match runs for a very long time indeed because there are so many different
-ways the + and * repeats can carve up the subject, and all have to be tested
-before failure can be reported.</p>
-
-<p>At the end of a match, the values of capturing parentheses are those from
-the outermost level. If the pattern above is matched against</p>
-
-<quote><p> (ab(cd)ef)</p></quote>
-
-<p>the value for the inner capturing parentheses (numbered 2) is "ef", which is
-the last value taken on at the top level. If a capturing subpattern is not
-matched at the top level, its final captured value is unset, even if it was
-(temporarily) set at a deeper level during the matching process.</p>
-
-<p>Do not confuse the (?R) item with the condition (R), which tests for recursion.
-Consider this pattern, which matches text in angle brackets, allowing for
-arbitrary nesting. Only digits are allowed in nested brackets (that is, when
-recursing), whereas any characters are permitted at the outer level.</p>
-
-<quote><p> &lt; (?: (?(R) \d++ | [^&lt;&gt;]*+) | (?R)) * &gt;</p></quote>
-
-<p>In this pattern, (?(R) is the start of a conditional subpattern, with two
-different alternatives for the recursive and non-recursive cases. The (?R) item
-is the actual recursive call.</p>
-
-<p><em>Differences in recursion processing between PCRE and Perl</em></p>
-
-<p>Recursion processing in PCRE differs from Perl in two important ways. In PCRE
-(like Python, but unlike Perl), a recursive subpattern call is always treated
-as an atomic group. That is, once it has matched some of the subject string, it
-is never re-entered, even if it contains untried alternatives and there is a
-subsequent matching failure. This can be illustrated by the following pattern,
-which purports to match a palindromic string that contains an odd number of
-characters (for example, "a", "aba", "abcba", "abcdcba"):</p>
-
-<quote><p> ^(.|(.)(?1)\2)$</p></quote>
-
-<p>The idea is that it either matches a single character, or two identical
-characters surrounding a sub-palindrome. In Perl, this pattern works; in PCRE
-it does not if the pattern is longer than three characters. Consider the
-subject string "abcba":</p>
-
-<p>At the top level, the first character is matched, but as it is not at the end
-of the string, the first alternative fails; the second alternative is taken
-and the recursion kicks in. The recursive call to subpattern 1 successfully
-matches the next character ("b"). (Note that the beginning and end of line
-tests are not part of the recursion).</p>
-
-<p>Back at the top level, the next character ("c") is compared with what
-subpattern 2 matched, which was "a". This fails. Because the recursion is
-treated as an atomic group, there are now no backtracking points, and so the
-entire match fails. (Perl is able, at this point, to re-enter the recursion and
-try the second alternative.) However, if the pattern is written with the
-alternatives in the other order, things are different:</p>
-
-<quote><p> ^((.)(?1)\2|.)$</p></quote>
-
-<p>This time, the recursing alternative is tried first, and continues to recurse
-until it runs out of characters, at which point the recursion fails. But this
-time we do have another alternative to try at the higher level. That is the big
-difference: in the previous case the remaining alternative is at a deeper
-recursion level, which PCRE cannot use.</p>
-
-<p>To change the pattern so that it matches all palindromic strings, not just
-those with an odd number of characters, it is tempting to change the pattern to
-this:</p>
-
-<quote><p> ^((.)(?1)\2|.?)$</p></quote>
-
-<p>Again, this works in Perl, but not in PCRE, and for the same reason. When a
-deeper recursion has matched a single character, it cannot be entered again in
-order to match an empty string. The solution is to separate the two cases, and
-write out the odd and even cases as alternatives at the higher level:</p>
-
-<quote><p> ^(?:((.)(?1)\2|)|((.)(?3)\4|.))</p></quote>
-
-<p>If you want to match typical palindromic phrases, the pattern has to ignore all
-non-word characters, which can be done like this:</p>
-
- <quote><p> ^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$</p></quote>
-
-<p>If run with the <c>caseless</c> option, this pattern matches phrases such as "A
-man, a plan, a canal: Panama!" and it works well in both PCRE and Perl. Note
-the use of the possessive quantifier *+ to avoid backtracking into sequences of
-non-word characters. Without this, PCRE takes a great deal longer (ten times or
-more) to match typical phrases, and Perl takes so long that you think it has
-gone into a loop.</p>
-
-<p><em>WARNING</em>: The palindrome-matching patterns above work only if the subject
-string does not start with a palindrome that is shorter than the entire string.
-For example, although "abcba" is correctly matched, if the subject is "ababa",
-PCRE finds the palindrome "aba" at the start, then fails at top level because
-the end of the string does not follow. Once again, it cannot jump back into the
-recursion to try other alternatives, so the entire match fails.</p>
-
-<p>The second way in which PCRE and Perl differ in their recursion processing is
-in the handling of captured values. In Perl, when a subpattern is called
-recursively or as a subpattern (see the next section), it has no access to any
-values that were captured outside the recursion, whereas in PCRE these values
-can be referenced. Consider this pattern:</p>
-
-<quote><p> ^(.)(\1|a(?2))</p></quote>
-
-<p>In PCRE, this pattern matches "bab". The first capturing parentheses match "b",
-then in the second group, when the back reference \1 fails to match "b", the
-second alternative matches "a" and then recurses. In the recursion, \1 does
-now match "b" and so the whole match succeeds. In Perl, the pattern fails to
-match because inside the recursive call \1 cannot access the externally set
-value.</p>
-
-</section>
-
-<section><marker id="sect21"></marker><title>Subpatterns as subroutines</title>
-
-<p>If the syntax for a recursive subpattern call (either by number or by
-name) is used outside the parentheses to which it refers, it operates like a
-subroutine in a programming language. The called subpattern may be defined
-before or after the reference. A numbered reference can be absolute or
-relative, as in these examples:</p>
-
-<list>
- <item>(...(absolute)...)...(?2)...</item>
- <item>(...(relative)...)...(?-1)...</item>
- <item>(...(?+1)...(relative)...</item>
-</list>
-
-<p>An earlier example pointed out that the pattern</p>
-
-<quote><p> (sens|respons)e and \1ibility</p></quote>
-
-<p>matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If instead the pattern</p>
-
-<quote><p> (sens|respons)e and (?1)ibility</p></quote>
-
-<p>is used, it does match "sense and responsibility" as well as the other two
-strings. Another example is given in the discussion of DEFINE above.</p>
-
-<p>All subroutine calls, whether recursive or not, are always treated as atomic
-groups. That is, once a subroutine has matched some of the subject string, it
-is never re-entered, even if it contains untried alternatives and there is a
-subsequent matching failure. Any capturing parentheses that are set during the
-subroutine call revert to their previous values afterwards.</p>
-
-<p>Processing options such as case-independence are fixed when a subpattern is
-defined, so if it is used as a subroutine, such options cannot be changed for
-different calls. For example, consider this pattern:</p>
-<quote><p> (abc)(?i:(?-1))</p></quote>
-
-<p>It matches "abcabc". It does not match "abcABC" because the change of
-processing option does not affect the called subpattern.</p>
-
-</section>
-
-<section><marker id="sect22"></marker><title>Oniguruma subroutine syntax</title>
-<p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a name or
-a number enclosed either in angle brackets or single quotes, is an alternative
-syntax for referencing a subpattern as a subroutine, possibly recursively. Here
-are two of the examples used above, rewritten using this syntax:</p>
-<quote>
- <p> (?&lt;pn&gt; \( ( (?&gt;[^()]+) | \g&lt;pn&gt; )* \) )</p>
- <p> (sens|respons)e and \g'1'ibility</p>
-</quote>
-<p>PCRE supports an extension to Oniguruma: if a number is preceded by a
-plus or a minus sign it is taken as a relative reference. For example:</p>
-
- <quote><p> (abc)(?i:\g&lt;-1&gt;)</p></quote>
-
-<p>Note that \g{...} (Perl syntax) and \g&lt;...&gt; (Oniguruma syntax) are <i>not</i>
-synonymous. The former is a back reference; the latter is a subroutine call.</p>
-
-</section>
-<!-- XXX C interface
-
-<section> <marker id="sect22"><title>Callouts</title></marker>
-
-<p>Perl has a feature whereby using the sequence (?{...}) causes arbitrary Perl
-code to be obeyed in the middle of matching a regular expression. This makes it
-possible, amongst other things, to extract different substrings that match the
-same pair of parentheses when there is a repetition.</p>
-
-<p>PCRE provides a similar feature, but of course it cannot obey arbitrary Perl
-code. The feature is called "callout". The caller of PCRE provides an external
-function by putting its entry point in the global variable <em>pcre_callout</em>.
-By default, this variable contains NULL, which disables all calling out.</p>
-
-<p>Within a regular expression, (?C) indicates the points at which the external
-function is to be called. If you want to identify different callout points, you
-can put a number less than 256 after the letter C. The default value is zero.
-For example, this pattern has two callout points:</p>
-
-<quote><p> (?C1)abc(?C2)def</p></quote>
-
-
-<p>If the <c>AUTO_CALLOUT</c> flag is passed to <c>re:compile/2</c>, callouts are
-automatically installed before each item in the pattern. They are all numbered
-255.</p>
+ <note>
+ <p>The fact that (*PRUNE:NAME) remembers the name is useless to the Erlang
+ programmer, as names cannot be retrieved.</p>
+ </note>
-<p>During matching, when PCRE reaches a callout point (and <em>pcre_callout</em> is
-set), the external function is called. It is provided with the number of the
-callout, the position in the pattern, and, optionally, one item of data
-originally supplied by the caller of <c>re:run/3</c>. The callout function
-may cause matching to proceed, to backtrack, or to fail altogether. A complete
-description of the interface to the callout function is given in the
-<em>pcrecallout</em>
-documentation.</p>
+ <p>The following verb, when specified without a name, is like (*PRUNE),
+ except that if the pattern is unanchored, the "bumpalong" advance is not
+ to the next character, but to the position in the subject where (*SKIP)
+ was encountered.</p>
+ <code>
+(*SKIP)</code>
-</section>
--->
+ <p>(*SKIP) signifies that whatever text was matched leading up to it cannot
+ be part of a successful match. Consider:</p>
-<section><marker id="sect23"></marker><title>Backtracking control</title>
-
-<p>Perl 5.10 introduced a number of "Special Backtracking Control Verbs", which
-are still described in the Perl documentation as "experimental and subject to
-change or removal in a future version of Perl". It goes on to say: "Their usage
-in production code should be noted to avoid problems during upgrades." The same
-remarks apply to the PCRE features described in this section.</p>
-
-<p>The new verbs make use of what was previously invalid syntax: an opening
-parenthesis followed by an asterisk. They are generally of the form
-(*VERB) or (*VERB:NAME). Some may take either form, possibly behaving
-differently depending on whether or not a name is present. A name is any
-sequence of characters that does not include a closing parenthesis. The maximum
-length of name is 255 in the 8-bit library and 65535 in the 16-bit and 32-bit
-libraries. If the name is empty, that is, if the closing parenthesis
-immediately follows the colon, the effect is as if the colon were not there.
-Any number of these verbs may occur in a pattern.</p>
-
-<!-- XXX C interface
-<p>Since these verbs are specifically related to backtracking, most of them can be
-used only when the pattern is to be matched using one of the traditional
-matching functions, because these use a backtracking algorithm. With the
-exception of (*FAIL), which behaves like a failing negative assertion, the
-backtracking control verbs cause an error if encountered by a DFA matching
-function.</p>
--->
-<p>The behaviour of these verbs in
-repeated groups, assertions,
-and in subpatterns called as subroutines
-(whether or not recursively) is documented below.</p>
-
-<p><em>Optimizations that affect backtracking verbs</em></p>
-
-<p>PCRE contains some optimizations that are used to speed up matching by running
-some checks at the start of each match attempt. For example, it may know the
-minimum length of matching subject, or that a particular character must be
-present. When one of these optimizations bypasses the running of a match, any
-included backtracking verbs will not, of course, be processed. You can suppress
-the start-of-match optimizations by setting the <c>no_start_optimize</c> option
-when calling <c>re:compile/2</c> or <c>re:run/3</c>, or by starting the
-pattern with (*NO_START_OPT).</p>
-
-<p>Experiments with Perl suggest that it too has similar optimizations, sometimes
-leading to anomalous results.</p>
-
-<p><em>Verbs that act immediately</em></p>
-
-<p>The following verbs act as soon as they are encountered. They may not be
-followed by a name.</p>
-
-<quote><p> (*ACCEPT)</p></quote>
-
-<p>This verb causes the match to end successfully, skipping the remainder of the
-pattern. However, when it is inside a subpattern that is called as a
-subroutine, only that subpattern is ended successfully. Matching then continues
-at the outer level. If (*ACCEPT) in triggered in a positive assertion, the
-assertion succeeds; in a negative assertion, the assertion fails.</p>
-
-<p>If (*ACCEPT) is inside capturing parentheses, the data so far is captured. For
-example:</p>
-
-<quote><p> A((?:A|B(*ACCEPT)|C)D)</p></quote>
-
-<p>This matches "AB", "AAD", or "ACD"; when it matches "AB", "B" is captured by
-the outer parentheses.</p>
-
-<quote><p> (*FAIL) or (*F)</p></quote>
-
-<p>This verb causes a matching failure, forcing backtracking to occur. It is
-equivalent to (?!) but easier to read. The Perl documentation notes that it is
-probably useful only when combined with (?{}) or (??{}). Those are, of course,
-Perl features that are not present in PCRE. The nearest equivalent is the
-callout feature, as for example in this pattern:</p>
-
-<quote><p> a+(?C)(*FAIL)</p></quote>
-
-<p>A match with the string "aaaa" always fails, but the callout is taken before
-each backtrack happens (in this example, 10 times).</p>
-
-<p><em>Recording which path was taken</em></p>
-
-<p>There is one verb whose main purpose is to track how a match was arrived at,
-though it also has a secondary use in conjunction with advancing the match
-starting point (see (*SKIP) below).</p>
-
-<warning>
-<p>In Erlang, there is no interface to retrieve a mark with <c>re:run/{2,3]</c>,
-so only the secondary purpose is relevant to the Erlang programmer!</p>
-<p>The rest of this section is therefore deliberately not adapted for reading
-by the Erlang programmer, however the examples might help in understanding NAMES as
-they can be used by (*SKIP).</p>
-</warning>
-
-<quote><p> (*MARK:NAME) or (*:NAME)</p></quote>
-
-<p>A name is always required with this verb. There may be as many instances of
-(*MARK) as you like in a pattern, and their names do not have to be unique.</p>
-
-<p>When a match succeeds, the name of the last-encountered (*MARK:NAME),
-(*PRUNE:NAME), or (*THEN:NAME) on the matching path is passed back to the
-caller as described in the section entitled "Extra data for <c>pcre_exec()</c>"
-in the <c>pcreapi</c>
-documentation. Here is an example of <c>pcretest</c> output, where the /K
-modifier requests the retrieval and outputting of (*MARK) data:</p>
-<code>
- re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
- data&gt; XY
- 0: XY
- MK: A
- XZ
- 0: XZ
- MK: B</code>
-
-<p>The (*MARK) name is tagged with "MK:" in this output, and in this example it
-indicates which of the two alternatives matched. This is a more efficient way
-of obtaining this information than putting each alternative in its own
-capturing parentheses.</p>
-
-<p>If a verb with a name is encountered in a positive assertion that is true, the
-name is recorded and passed back if it is the last-encountered. This does not
-happen for negative assertions or failing positive assertions.</p>
-
-<p>After a partial match or a failed match, the last encountered name in the
-entire match process is returned. For example:</p>
-<code>
- re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
- data&gt; XP
- No match, mark = B</code>
-
-<p>Note that in this unanchored example the mark is retained from the match
-attempt that started at the letter "X" in the subject. Subsequent match
-attempts starting at "P" and then with an empty string do not get as far as the
-(*MARK) item, but nevertheless do not reset it.</p>
-
-<!--
-<p>If you are interested in (*MARK) values after failed matches, you should
-probably set the PCRE_NO_START_OPTIMIZE option
-(see above)
-to ensure that the match is always attempted.</p>
--->
-
-<p><em>Verbs that act after backtracking</em></p>
-
-<p>The following verbs do nothing when they are encountered. Matching continues
-with what follows, but if there is no subsequent match, causing a backtrack to
-the verb, a failure is forced. That is, backtracking cannot pass to the left of
-the verb. However, when one of these verbs appears inside an atomic group or an
-assertion that is true, its effect is confined to that group, because once the
-group has been matched, there is never any backtracking into it. In this
-situation, backtracking can "jump back" to the left of the entire atomic group
-or assertion. (Remember also, as stated above, that this localization also
-applies in subroutine calls.)</p>
-
-<p>These verbs differ in exactly what kind of failure occurs when backtracking
-reaches them. The behaviour described below is what happens when the verb is
-not in a subroutine or an assertion. Subsequent sections cover these special
-cases.</p>
-
-<quote><p> (*COMMIT)</p></quote>
-
-<p>This verb, which may not be followed by a name, causes the whole match to fail
-outright if there is a later matching failure that causes backtracking to reach
-it. Even if the pattern is unanchored, no further attempts to find a match by
-advancing the starting point take place. If (*COMMIT) is the only backtracking
-verb that is encountered, once it has been passed <c>re:run/{2,3}</c> is
-committed to finding a match at the current starting point, or not at all. For
-example:</p>
-
-<quote><p> a+(*COMMIT)b</p></quote>
-
-<p>This matches "xxaab" but not "aacaab". It can be thought of as a kind of
-dynamic anchor, or "I've started, so I must finish." The name of the most
-recently passed (*MARK) in the path is passed back when (*COMMIT) forces a
-match failure.</p>
-
-<p>If there is more than one backtracking verb in a pattern, a different one that
-follows (*COMMIT) may be triggered first, so merely passing (*COMMIT) during a
-match does not always guarantee that a match must be at this starting point.</p>
-
-<p>Note that (*COMMIT) at the start of a pattern is not the same as an anchor,
-unless PCRE's start-of-match optimizations are turned off, as shown in this
- example:</p>
-<code type="none">
- 1&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list}]).
- {match,["abc"]}
- 2&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list},no_start_optimize]).
- nomatch</code>
-
-<p>PCRE knows that any match must start with "a", so the optimization skips along
-the subject to "a" before running the first match attempt, which succeeds. When
-the optimization is disabled by the <c>no_start_optimize</c> option, the match
-starts at "x" and so the (*COMMIT) causes it to fail without trying any other
-starting points.</p>
-
-<quote><p> (*PRUNE) or (*PRUNE:NAME)</p></quote>
-
-<p>This verb causes the match to fail at the current starting position in the
-subject if there is a later matching failure that causes backtracking to reach
-it. If the pattern is unanchored, the normal "bumpalong" advance to the next
-starting character then happens. Backtracking can occur as usual to the left of
-(*PRUNE), before it is reached, or when matching to the right of (*PRUNE), but
-if there is no match to the right, backtracking cannot cross (*PRUNE). In
-simple cases, the use of (*PRUNE) is just an alternative to an atomic group or
-possessive quantifier, but there are some uses of (*PRUNE) that cannot be
-expressed in any other way. In an anchored pattern (*PRUNE) has the same effect
-as (*COMMIT).</p>
-
-<p>The behaviour of (*PRUNE:NAME) is the not the same as (*MARK:NAME)(*PRUNE).
-It is like (*MARK:NAME) in that the name is remembered for passing back to the
-caller. However, (*SKIP:NAME) searches only for names set with (*MARK).</p>
-
-<warning>
-<p>The fact that (*PRUNE:NAME) remembers the name is useless to the Erlang programmer,
-as names can not be retrieved.</p>
-</warning>
-
-<quote><p> (*SKIP)</p></quote>
-
-<p>This verb, when given without a name, is like (*PRUNE), except that if the
-pattern is unanchored, the "bumpalong" advance is not to the next character,
-but to the position in the subject where (*SKIP) was encountered. (*SKIP)
-signifies that whatever text was matched leading up to it cannot be part of a
-successful match. Consider:</p>
-
-<quote><p> a+(*SKIP)b</p></quote>
-
-<p>If the subject is "aaaac...", after the first match attempt fails (starting at
-the first character in the string), the starting point skips on to start the
-next attempt at "c". Note that a possessive quantifer does not have the same
-effect as this example; although it would suppress backtracking during the
-first match attempt, the second attempt would start at the second character
-instead of skipping on to "c".</p>
-
-<quote><p> (*SKIP:NAME)</p></quote>
-
-<p>When (*SKIP) has an associated name, its behaviour is modified. When it is
-triggered, the previous path through the pattern is searched for the most
-recent (*MARK) that has the same name. If one is found, the "bumpalong" advance
-is to the subject position that corresponds to that (*MARK) instead of to where
-(*SKIP) was encountered. If no (*MARK) with a matching name is found, the
-(*SKIP) is ignored.</p>
-
-<p>Note that (*SKIP:NAME) searches only for names set by (*MARK:NAME). It ignores
-names that are set by (*PRUNE:NAME) or (*THEN:NAME).</p>
-
-<quote><p> (*THEN) or (*THEN:NAME)</p></quote>
-
-<p>This verb causes a skip to the next innermost alternative when backtracking
-reaches it. That is, it cancels any further backtracking within the current
-alternative. Its name comes from the observation that it can be used for a
-pattern-based if-then-else block:</p>
-
-<quote><p> ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...</p></quote>
+ <code>
+a+(*SKIP)b</code>
-<p>If the COND1 pattern matches, FOO is tried (and possibly further items after
-the end of the group if FOO succeeds); on failure, the matcher skips to the
-second alternative and tries COND2, without backtracking into COND1. If that
-succeeds and BAR fails, COND3 is tried. If subsequently BAZ fails, there are no
-more alternatives, so there is a backtrack to whatever came before the entire
-group. If (*THEN) is not inside an alternation, it acts like (*PRUNE).</p>
-
-<p>The behaviour of (*THEN:NAME) is the not the same as (*MARK:NAME)(*THEN).
-It is like (*MARK:NAME) in that the name is remembered for passing back to the
-caller. However, (*SKIP:NAME) searches only for names set with (*MARK).</p>
-
-<warning>
-<p>The fact that (*THEN:NAME) remembers the name is useless to the Erlang programmer,
-as names can not be retrieved.</p>
-</warning>
-
-<p>A subpattern that does not contain a | character is just a part of the
-enclosing alternative; it is not a nested alternation with only one
-alternative. The effect of (*THEN) extends beyond such a subpattern to the
-enclosing alternative. Consider this pattern, where A, B, etc. are complex
-pattern fragments that do not contain any | characters at this level:</p>
-
-<quote><p> A (B(*THEN)C) | D</p></quote>
+ <p>If the subject is "aaaac...", after the first match attempt fails
+ (starting at the first character in the string), the starting point skips
+ on to start the next attempt at "c". Notice that a possessive quantifier
+ does not have the same effect as this example; although it would suppress
+ backtracking during the first match attempt, the second attempt would
+ start at the second character instead of skipping on to "c".</p>
-<p>If A and B are matched, but there is a failure in C, matching does not
-backtrack into A; instead it moves to the next alternative, that is, D.
-However, if the subpattern containing (*THEN) is given an alternative, it
-behaves differently:</p>
-
-<quote><p> A (B(*THEN)C | (*FAIL)) | D</p></quote>
+ <p>When (*SKIP) has an associated name, its behavior is modified:</p>
-<p>The effect of (*THEN) is now confined to the inner subpattern. After a failure
-in C, matching moves to (*FAIL), which causes the whole subpattern to fail
-because there are no more alternatives to try. In this case, matching does now
-backtrack into A.</p>
+ <code>
+(*SKIP:NAME)</code>
-<p>Note that a conditional subpattern is not considered as having two
-alternatives, because only one is ever used. In other words, the | character in
-a conditional subpattern has a different meaning. Ignoring white space,
-consider:</p>
+ <p>When this is triggered, the previous path through the pattern is searched
+ for the most recent (*MARK) that has the same name. If one is found, the
+ "bumpalong" advance is to the subject position that corresponds to that
+ (*MARK) instead of to where (*SKIP) was encountered. If no (*MARK) with a
+ matching name is found, (*SKIP) is ignored.</p>
-<quote><p> ^.*? (?(?=a) a | b(*THEN)c )</p></quote>
+ <p>Notice that (*SKIP:NAME) searches only for names set by (*MARK:NAME). It
+ ignores names that are set by (*PRUNE:NAME) or (*THEN:NAME).</p>
-<p>If the subject is "ba", this pattern does not match. Because .*? is ungreedy,
-it initially matches zero characters. The condition (?=a) then fails, the
-character "b" is matched, but "c" is not. At this point, matching does not
-backtrack to .*? as might perhaps be expected from the presence of the |
-character. The conditional subpattern is part of the single alternative that
-comprises the whole pattern, and so the match fails. (If there was a backtrack
-into .*?, allowing it to match "b", the match would succeed.)</p>
+ <p>The following verb causes a skip to the next innermost alternative when
+ backtracking reaches it. That is, it cancels any further backtracking
+ within the current alternative.</p>
-<p>The verbs just described provide four different "strengths" of control when
-subsequent matching fails. (*THEN) is the weakest, carrying on the match at the
-next alternative. (*PRUNE) comes next, failing the match at the current
-starting position, but allowing an advance to the next character (for an
-unanchored pattern). (*SKIP) is similar, except that the advance may be more
-than one character. (*COMMIT) is the strongest, causing the entire match to
-fail.</p>
+ <code>
+(*THEN) or (*THEN:NAME)</code>
+ <p>The verb name comes from the observation that it can be used for a
+ pattern-based if-then-else block:</p>
-<p><em>More than one backtracking verb</em></p>
+ <code>
+( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...</code>
-<p>If more than one backtracking verb is present in a pattern, the one that is
-backtracked onto first acts. For example, consider this pattern, where A, B,
-etc. are complex pattern fragments:</p>
+ <p>If the COND1 pattern matches, FOO is tried (and possibly further items
+ after the end of the group if FOO succeeds). On failure, the matcher skips
+ to the second alternative and tries COND2, without backtracking into
+ COND1. If that succeeds and BAR fails, COND3 is tried. If BAZ then fails,
+ there are no more alternatives, so there is a backtrack to whatever
+ came before the entire group. If (*THEN) is not inside an alternation, it
+ acts like (*PRUNE).</p>
-<quote><p> (A(*COMMIT)B(*THEN)C|ABD)</p></quote>
+ <p>The behavior of (*THEN:NAME) is the not the same as (*MARK:NAME)(*THEN).
+ It is like (*MARK:NAME) in that the name is remembered for passing back to
+ the caller. However, (*SKIP:NAME) searches only for names set with
+ (*MARK).</p>
-<p>If A matches but B fails, the backtrack to (*COMMIT) causes the entire match to
-fail. However, if A and B match, but C fails, the backtrack to (*THEN) causes
-the next alternative (ABD) to be tried. This behaviour is consistent, but is
-not always the same as Perl's. It means that if two or more backtracking verbs
-appear in succession, all the the last of them has no effect. Consider this
-example:</p>
+ <note>
+ <p>The fact that (*THEN:NAME) remembers the name is useless to the Erlang
+ programmer, as names cannot be retrieved.</p>
+ </note>
-<quote><p> ...(*COMMIT)(*PRUNE)...</p></quote>
+ <p>A subpattern that does not contain a | character is just a part of the
+ enclosing alternative; it is not a nested alternation with only one
+ alternative. The effect of (*THEN) extends beyond such a subpattern to the
+ enclosing alternative. Consider the following pattern, where A, B, and so
+ on, are complex pattern fragments that do not contain any | characters at
+ this level:</p>
+
+ <code>
+A (B(*THEN)C) | D</code>
+
+ <p>If A and B are matched, but there is a failure in C, matching does not
+ backtrack into A; instead it moves to the next alternative, that is, D.
+ However, if the subpattern containing (*THEN) is given an alternative, it
+ behaves differently:</p>
+
+ <code>
+A (B(*THEN)C | (*FAIL)) | D</code>
+
+ <p>The effect of (*THEN) is now confined to the inner subpattern. After a
+ failure in C, matching moves to (*FAIL), which causes the whole subpattern
+ to fail, as there are no more alternatives to try. In this case, matching
+ does now backtrack into A.</p>
+
+ <p>Notice that a conditional subpattern is not considered as having two
+ alternatives, as only one is ever used. That is, the | character in a
+ conditional subpattern has a different meaning. Ignoring whitespace,
+ consider:</p>
+
+ <code>
+^.*? (?(?=a) a | b(*THEN)c )</code>
+
+ <p>If the subject is "ba", this pattern does not match. As .*? is ungreedy,
+ it initially matches zero characters. The condition (?=a) then fails, the
+ character "b" is matched, but "c" is not. At this point, matching does not
+ backtrack to .*? as can perhaps be expected from the presence of the |
+ character. The conditional subpattern is part of the single alternative
+ that comprises the whole pattern, and so the match fails. (If there was a
+ backtrack into .*?, allowing it to match "b", the match would
+ succeed.)</p>
+
+ <p>The verbs described above provide four different "strengths" of control
+ when subsequent matching fails:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>(*THEN) is the weakest, carrying on the match at the next
+ alternative.</p>
+ </item>
+ <item>
+ <p>(*PRUNE) comes next, fails the match at the current starting
+ position, but allows an advance to the next character (for an
+ unanchored pattern).</p>
+ </item>
+ <item>
+ <p>(*SKIP) is similar, except that the advance can be more than one
+ character.</p>
+ </item>
+ <item>
+ <p>(*COMMIT) is the strongest, causing the entire match to fail.</p>
+ </item>
+ </list>
-<p>If there is a matching failure to the right, backtracking onto (*PRUNE) cases
-it to be triggered, and its action is taken. There can never be a backtrack
-onto (*COMMIT).</p>
+ <p><em>More than One Backtracking Verb</em></p>
-<p><em>Backtracking verbs in repeated groups</em></p>
+ <p>If more than one backtracking verb is present in a pattern, the one that
+ is backtracked onto first acts. For example, consider the following
+ pattern, where A, B, and so on, are complex pattern fragments:</p>
-<p>PCRE differs from Perl in its handling of backtracking verbs in repeated
-groups. For example, consider:</p>
+ <code>
+(A(*COMMIT)B(*THEN)C|ABD)</code>
-<quote><p> /(a(*COMMIT)b)+ac/</p></quote>
+ <p>If A matches but B fails, the backtrack to (*COMMIT) causes the entire
+ match to fail. However, if A and B match, but C fails, the backtrack to
+ (*THEN) causes the next alternative (ABD) to be tried. This behavior is
+ consistent, but is not always the same as in Perl. It means that if two or
+ more backtracking verbs appear in succession, the last of them has no
+ effect. Consider the following example:</p>
-<p>If the subject is "abac", Perl matches, but PCRE fails because the (*COMMIT) in
-the second repeat of the group acts.</p>
+ <code>
+...(*COMMIT)(*PRUNE)...</code>
-<p><em>Backtracking verbs in assertions</em></p>
+ <p>If there is a matching failure to the right, backtracking onto (*PRUNE)
+ cases it to be triggered, and its action is taken. There can never be a
+ backtrack onto (*COMMIT).</p>
-<p>(*FAIL) in an assertion has its normal effect: it forces an immediate backtrack.</p>
+ <p><em>Backtracking Verbs in Repeated Groups</em></p>
-<p>(*ACCEPT) in a positive assertion causes the assertion to succeed without any
-further processing. In a negative assertion, (*ACCEPT) causes the assertion to
-fail without any further processing.</p>
+ <p>PCRE differs from Perl in its handling of backtracking verbs in repeated
+ groups. For example, consider:</p>
-<p>The other backtracking verbs are not treated specially if they appear in a
-positive assertion. In particular, (*THEN) skips to the next alternative in the
-innermost enclosing group that has alternations, whether or not this is within
-the assertion.</p>
+ <code>
+/(a(*COMMIT)b)+ac/</code>
-<p>Negative assertions are, however, different, in order to ensure that changing a
-positive assertion into a negative assertion changes its result. Backtracking
-into (*COMMIT), (*SKIP), or (*PRUNE) causes a negative assertion to be true,
-without considering any further alternative branches in the assertion.
-Backtracking into (*THEN) causes it to skip to the next enclosing alternative
-within the assertion (the normal behaviour), but if the assertion does not have
-such an alternative, (*THEN) behaves like (*PRUNE).</p>
+ <p>If the subject is "abac", Perl matches, but PCRE fails because the
+ (*COMMIT) in the second repeat of the group acts.</p>
-<p><em>Backtracking verbs in subroutines</em></p>
+ <p><em>Backtracking Verbs in Assertions</em></p>
-<p>These behaviours occur whether or not the subpattern is called recursively.
-Perl's treatment of subroutines is different in some cases.</p>
+ <p>(*FAIL) in an assertion has its normal effect: it forces an immediate
+ backtrack.</p>
-<p>(*FAIL) in a subpattern called as a subroutine has its normal effect: it forces
-an immediate backtrack.</p>
+ <p>(*ACCEPT) in a positive assertion causes the assertion to succeed without
+ any further processing. In a negative assertion, (*ACCEPT) causes the
+ assertion to fail without any further processing.</p>
-<p>(*ACCEPT) in a subpattern called as a subroutine causes the subroutine match to
-succeed without any further processing. Matching then continues after the
-subroutine call.</p>
+ <p>The other backtracking verbs are not treated specially if they appear in
+ a positive assertion. In particular, (*THEN) skips to the next alternative
+ in the innermost enclosing group that has alternations, regardless if this
+ is within the assertion.</p>
-<p>(*COMMIT), (*SKIP), and (*PRUNE) in a subpattern called as a subroutine cause
-the subroutine match to fail.</p>
+ <p>Negative assertions are, however, different, to ensure that changing a
+ positive assertion into a negative assertion changes its result.
+ Backtracking into (*COMMIT), (*SKIP), or (*PRUNE) causes a negative
+ assertion to be true, without considering any further alternative branches
+ in the assertion. Backtracking into (*THEN) causes it to skip to the next
+ enclosing alternative within the assertion (the normal behavior), but if
+ the assertion does not have such an alternative, (*THEN) behaves like
+ (*PRUNE).</p>
-<p>(*THEN) skips to the next alternative in the innermost enclosing group within
-the subpattern that has alternatives. If there is no such group within the
-subpattern, (*THEN) causes the subroutine match to fail.</p>
+ <p><em>Backtracking Verbs in Subroutines</em></p>
-</section>
+ <p>These behaviors occur regardless if the subpattern is called recursively.
+ The treatment of subroutines in Perl is different in some cases.</p>
+ <list type="bulleted">
+ <item>
+ <p>(*FAIL) in a subpattern called as a subroutine has its normal effect:
+ it forces an immediate backtrack.</p>
+ </item>
+ <item>
+ <p>(*ACCEPT) in a subpattern called as a subroutine causes the
+ subroutine match to succeed without any further processing. Matching
+ then continues after the subroutine call.</p>
+ </item>
+ <item>
+ <p>(*COMMIT), (*SKIP), and (*PRUNE) in a subpattern called as a
+ subroutine cause the subroutine match to fail.</p>
+ </item>
+ <item>
+ <p>(*THEN) skips to the next alternative in the innermost enclosing
+ group within the subpattern that has alternatives. If there is no such
+ group within the subpattern, (*THEN) causes the subroutine match to
+ fail.</p>
+ </item>
+ </list>
+ </section>
</erlref>
diff --git a/lib/stdlib/doc/src/ref_man.xml b/lib/stdlib/doc/src/ref_man.xml
index 82ad78e675..878a3babc5 100644
--- a/lib/stdlib/doc/src/ref_man.xml
+++ b/lib/stdlib/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2015</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,9 +30,6 @@
<file>application.xml</file>
</header>
<description>
- <p>The Standard Erlang Libraries application, <em>STDLIB</em>,
- contains modules for manipulating lists, strings and files etc.</p>
- <br></br>
</description>
<xi:include href="stdlib_app.xml"/>
<xi:include href="array.xml"/>
@@ -66,6 +63,7 @@
<xi:include href="gen_event.xml"/>
<xi:include href="gen_fsm.xml"/>
<xi:include href="gen_server.xml"/>
+ <xi:include href="gen_statem.xml"/>
<xi:include href="io.xml"/>
<xi:include href="io_lib.xml"/>
<xi:include href="lib.xml"/>
diff --git a/lib/stdlib/doc/src/sets.xml b/lib/stdlib/doc/src/sets.xml
index 531d18fbef..f7668af1ed 100644
--- a/lib/stdlib/doc/src/sets.xml
+++ b/lib/stdlib/doc/src/sets.xml
@@ -24,21 +24,23 @@
<title>sets</title>
<prepared>Robert Virding</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>99-07-27</date>
+ <date>1999-07-27</date>
<rev>A</rev>
- <file>sets.sgml</file>
+ <file>sets.xml</file>
</header>
<module>sets</module>
- <modulesummary>Functions for Set Manipulation</modulesummary>
+ <modulesummary>Functions for set manipulation.</modulesummary>
<description>
<p>Sets are collections of elements with no duplicate elements.
- The representation of a set is not defined.</p>
- <p>This module provides exactly the same interface as the module
- <c>ordsets</c> but with a defined representation. One difference is
+ The representation of a set is undefined.</p>
+
+ <p>This module provides the same interface as the
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso> module
+ but with a defined representation. One difference is
that while this module considers two elements as different if they
do not match (<c>=:=</c>), <c>ordsets</c> considers two elements as
different if and only if they do not compare equal (<c>==</c>).</p>
@@ -47,151 +49,170 @@
<datatypes>
<datatype>
<name name="set" n_vars="1"/>
- <desc><p>As returned by <c>new/0</c>.</p></desc>
+ <desc><p>As returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="set" n_vars="0"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="new" arity="0"/>
- <fsummary>Return an empty set</fsummary>
+ <name name="add_element" arity="2"/>
+ <fsummary>Add an element to a <c>Set</c>.</fsummary>
<desc>
- <p>Returns a new empty set.</p>
+ <p>Returns a new set formed from <c><anno>Set1</anno></c> with
+ <c><anno>Element</anno></c> inserted.</p>
</desc>
</func>
+
<func>
- <name name="is_set" arity="1"/>
- <fsummary>Test for a <c>Set</c></fsummary>
+ <name name="del_element" arity="2"/>
+ <fsummary>Remove an element from a <c>Set</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Set</anno></c> is a set of
- elements, otherwise <c>false</c>.</p>
+ <p>Returns <c><anno>Set1</anno></c>, but with
+ <c><anno>Element</anno></c> removed.</p>
</desc>
</func>
+
<func>
- <name name="size" arity="1"/>
- <fsummary>Return the number of elements in a set</fsummary>
+ <name name="filter" arity="2"/>
+ <fsummary>Filter set elements.</fsummary>
<desc>
- <p>Returns the number of elements in <c><anno>Set</anno></c>.</p>
+ <p>Filters elements in <c><anno>Set1</anno></c> with boolean function
+ <c><anno>Pred</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="to_list" arity="1"/>
- <fsummary>Convert a <c>Set</c>into a list</fsummary>
+ <name name="fold" arity="3"/>
+ <fsummary>Fold over set elements.</fsummary>
<desc>
- <p>Returns the elements of <c><anno>Set</anno></c> as a list.
- The order of the returned elements is undefined.</p>
+ <p>Folds <c><anno>Function</anno></c> over every element in
+ <c><anno>Set</anno></c> and returns the final value of the
+ accumulator. The evaluation order is undefined.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list into a <c>Set</c></fsummary>
+ <fsummary>Convert a list into a <c>Set</c>.</fsummary>
<desc>
<p>Returns a set of the elements in <c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="is_element" arity="2"/>
- <fsummary>Test for membership of a <c>Set</c></fsummary>
+ <name name="intersection" arity="1"/>
+ <fsummary>Return the intersection of a list of <c>Sets</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
- <c><anno>Set</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns the intersection of the non-empty list of sets.</p>
</desc>
</func>
+
<func>
- <name name="add_element" arity="2"/>
- <fsummary>Add an element to a <c>Set</c></fsummary>
+ <name name="intersection" arity="2"/>
+ <fsummary>Return the intersection of two <c>Sets</c>.</fsummary>
<desc>
- <p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> inserted.</p>
+ <p>Returns the intersection of <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="del_element" arity="2"/>
- <fsummary>Remove an element from a <c>Set</c></fsummary>
+ <name name="is_disjoint" arity="2"/>
+ <fsummary>Check whether two <c>Sets</c> are disjoint.</fsummary>
<desc>
- <p>Returns <c><anno>Set1</anno></c>, but with <c><anno>Element</anno></c> removed.</p>
+ <p>Returns <c>true</c> if <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c> are disjoint (have no elements in common),
+ otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="2"/>
- <fsummary>Return the union of two <c>Sets</c></fsummary>
+ <name name="is_element" arity="2"/>
+ <fsummary>Test for membership of a <c>Set</c>.</fsummary>
<desc>
- <p>Returns the merged (union) set of <c><anno>Set1</anno></c> and
- <c><anno>Set2</anno></c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
+ <c><anno>Set</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="1"/>
- <fsummary>Return the union of a list of <c>Sets</c></fsummary>
+ <name name="is_set" arity="1"/>
+ <fsummary>Test for a <c>Set</c>.</fsummary>
<desc>
- <p>Returns the merged (union) set of the list of sets.</p>
+ <p>Returns <c>true</c> if <c><anno>Set</anno></c> is a set of
+ elements, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="2"/>
- <fsummary>Return the intersection of two <c>Sets</c></fsummary>
+ <name name="is_subset" arity="2"/>
+ <fsummary>Test for subset.</fsummary>
<desc>
- <p>Returns the intersection of <c><anno>Set1</anno></c> and
- <c><anno>Set2</anno></c>.</p>
+ <p>Returns <c>true</c> when every element of <c><anno>Set1</anno></c> is
+ also a member of <c><anno>Set2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="1"/>
- <fsummary>Return the intersection of a list of <c>Sets</c></fsummary>
+ <name name="new" arity="0"/>
+ <fsummary>Return an empty set.</fsummary>
<desc>
- <p>Returns the intersection of the non-empty list of sets.</p>
+ <p>Returns a new empty set.</p>
</desc>
</func>
+
<func>
- <name name="is_disjoint" arity="2"/>
- <fsummary>Check whether two <c>Sets</c> are disjoint</fsummary>
+ <name name="size" arity="1"/>
+ <fsummary>Return the number of elements in a set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Set1</anno></c> and
- <c><anno>Set2</anno></c> are disjoint (have no elements in common),
- and <c>false</c> otherwise.</p>
+ <p>Returns the number of elements in <c><anno>Set</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="subtract" arity="2"/>
- <fsummary>Return the difference of two <c>Sets</c></fsummary>
+ <fsummary>Return the difference of two <c>Sets</c>.</fsummary>
<desc>
- <p>Returns only the elements of <c><anno>Set1</anno></c> which are not
+ <p>Returns only the elements of <c><anno>Set1</anno></c> that are not
also elements of <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="is_subset" arity="2"/>
- <fsummary>Test for subset</fsummary>
+ <name name="to_list" arity="1"/>
+ <fsummary>Convert a <c>Set</c>into a list.</fsummary>
<desc>
- <p>Returns <c>true</c> when every element of <c><anno>Set1</anno></c>1 is
- also a member of <c><anno>Set2</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns the elements of <c><anno>Set</anno></c> as a list.
+ The order of the returned elements is undefined.</p>
</desc>
</func>
+
<func>
- <name name="fold" arity="3"/>
- <fsummary>Fold over set elements</fsummary>
+ <name name="union" arity="1"/>
+ <fsummary>Return the union of a list of <c>Sets</c>.</fsummary>
<desc>
- <p>Fold <c><anno>Function</anno></c> over every element in <c><anno>Set</anno></c>
- returning the final value of the accumulator.
- The evaluation order is undefined.</p>
+ <p>Returns the merged (union) set of the list of sets.</p>
</desc>
</func>
+
<func>
- <name name="filter" arity="2"/>
- <fsummary>Filter set elements</fsummary>
+ <name name="union" arity="2"/>
+ <fsummary>Return the union of two <c>Sets</c>.</fsummary>
<desc>
- <p>Filter elements in <c><anno>Set1</anno></c> with boolean function
- <c><anno>Pred</anno></c>.</p>
+ <p>Returns the merged (union) set of <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c>.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="ordsets">ordsets(3)</seealso>,
- <seealso marker="gb_sets">gb_sets(3)</seealso></p>
+ <p><seealso marker="gb_sets"><c>gb_sets(3)</c></seealso>,
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/shell.xml b/lib/stdlib/doc/src/shell.xml
index 22a3321298..d6e8036d4e 100644
--- a/lib/stdlib/doc/src/shell.xml
+++ b/lib/stdlib/doc/src/shell.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,87 +24,96 @@
<title>shell</title>
<prepared>Bjorn Gustavsson</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-24</date>
+ <date>1997-01-24</date>
<rev>A</rev>
- <file>shell.sgml</file>
+ <file>shell.xml</file>
</header>
<module>shell</module>
- <modulesummary>The Erlang Shell</modulesummary>
+ <modulesummary>The Erlang shell.</modulesummary>
<description>
- <p>The module <c>shell</c> implements an Erlang shell.
- </p>
- <p>The shell is a user interface program
+ <p>This module provides an Erlang shell.</p>
+
+ <p>The shell is a user interface program
for entering expression sequences. The expressions are
- evaluated and a value is returned.
+ evaluated and a value is returned.
A history mechanism saves previous commands and their
values, which can then be incorporated in later commands.
How many commands and results to save can be determined by the user,
- either interactively, by calling <c>shell:history/1</c> and
- <c>shell:results/1</c>, or by setting the application configuration
+ either interactively, by calling
+ <seealso marker="#history/1"><c>history/1</c></seealso> and
+ <seealso marker="#results/1"><c>results/1</c></seealso>,
+ or by setting the application configuration
parameters <c>shell_history_length</c> and
- <c>shell_saved_results</c> for the application STDLIB.
- </p>
- <p>The shell uses a helper process for evaluating commands in
- order to protect the history mechanism from exceptions. By
+ <c>shell_saved_results</c> for the STDLIB application.</p>
+
+ <p>The shell uses a helper process for evaluating commands
+ to protect the history mechanism from exceptions. By
default the evaluator process is killed when an exception
- occurs, but by calling <c>shell:catch_exception/1</c> or by
+ occurs, but by calling <seealso marker="#catch_exception/1">
+ <c>catch_exception/1</c></seealso> or by
setting the application configuration parameter
- <c>shell_catch_exception</c> for the application STDLIB
- this behavior can be changed. See also the example below.
- </p>
+ <c>shell_catch_exception</c> for the STDLIB application
+ this behavior can be changed. See also the example below.</p>
+
<p>Variable bindings, and local process dictionary changes
- which are generated in user expressions are preserved, and the variables
+ that are generated in user expressions are preserved, and the variables
can be used in later commands to access their values. The
- bindings can also be forgotten so the variables can be re-used.
- </p>
+ bindings can also be forgotten so the variables can be reused.</p>
+
<p>The special shell commands all have the syntax of (local)
function calls. They are evaluated as
normal function calls and many commands can be used in one
- expression sequence.
- </p>
+ expression sequence.</p>
+
<p>If a command (local function call) is not recognized by the
- shell, an attempt is first made to find the function in the
+ shell, an attempt is first made to find the function in
module <c>user_default</c>, where customized local commands
- can be placed. If found, then the function is evaluated.
- Otherwise, an attempt is made to evaluate the function in the
- module <c>shell_default</c>. The module
- <c>user_default</c> must be explicitly loaded.
- </p>
+ can be placed. If found, the function is evaluated,
+ otherwise an attempt is made to evaluate the function in
+ module <c>shell_default</c>. Module
+ <c>user_default</c> must be explicitly loaded.</p>
+
<p>The shell also permits the user to start multiple concurrent
- jobs. A job can be regarded as a set of processes which can
- communicate with the shell.
- </p>
+ jobs. A job can be regarded as a set of processes that can
+ communicate with the shell.</p>
+
<p>There is some support for reading and printing records in
the shell. During compilation record expressions are translated
to tuple expressions. In runtime it is not known whether a tuple
- actually represents a record. Nor are the record definitions
- used by compiler available at runtime. So in order to read the
+ represents a record, and the record definitions
+ used by the compiler are unavailable at runtime. So, to read the
record syntax and print tuples as records when possible, record
- definitions have to be maintained by the shell itself. The shell
- commands for reading, defining, forgetting, listing, and
- printing records are described below. Note that each job has its
- own set of record definitions. To facilitate matters record
- definitions in the modules <c>shell_default</c> and
+ definitions must be maintained by the shell itself.</p>
+
+ <p>The shell commands for reading, defining, forgetting, listing, and
+ printing records are described below. Notice that each job has its
+ own set of record definitions. To facilitate matters, record
+ definitions in modules <c>shell_default</c> and
<c>user_default</c> (if loaded) are read each time a new job is
- started. For instance, adding the line</p>
+ started. For example, adding the following line
+ to <c>user_default</c> makes the definition of <c>file_info</c>
+ readily available in the shell:</p>
+
<code type="none">
- -include_lib("kernel/include/file.hrl").</code>
- <p>to <c>user_default</c> makes the definition of <c>file_info</c>
- readily available in the shell.
- </p>
- <p>The shell runs in two modes: </p>
+-include_lib("kernel/include/file.hrl").</code>
+
+ <p>The shell runs in two modes:</p>
+
<list type="bulleted">
- <item><c>Normal (possibly restricted)</c> mode, in which
- commands can be edited and expressions evaluated.
+ <item>
+ <p><c>Normal (possibly restricted)</c> mode, in which
+ commands can be edited and expressions evaluated</p>
</item>
- <item>Job Control Mode <c>JCL</c>, in which jobs can be
- started, killed, detached and connected.
+ <item>
+ <p>Job Control Mode, <c>JCL</c>, in which jobs can be
+ started, killed, detached, and connected</p>
</item>
</list>
+
<p>Only the currently connected job can 'talk' to the shell.</p>
</description>
@@ -117,60 +126,51 @@
</item>
<tag><c>f()</c></tag>
<item>
- <p>Removes all variable bindings.
- </p>
+ <p>Removes all variable bindings.</p>
</item>
<tag><c>f(X)</c></tag>
<item>
- <p>Removes the binding of variable <c>X</c>.
- </p>
+ <p>Removes the binding of variable <c>X</c>.</p>
</item>
<tag><c>h()</c></tag>
<item>
- <p>Prints the history list.
- </p>
+ <p>Prints the history list.</p>
</item>
<tag><c>history(N)</c></tag>
<item>
<p>Sets the number of previous commands to keep in the
history list to <c>N</c>. The previous number is returned.
- The default number is 20.
- </p>
+ Defaults to 20.</p>
</item>
<tag><c>results(N)</c></tag>
<item>
<p>Sets the number of results from previous commands to keep in
the history list to <c>N</c>. The previous number is returned.
- The default number is 20.
- </p>
+ Defaults to 20.</p>
</item>
<tag><c>e(N)</c></tag>
<item>
- <p>Repeats the command <c>N</c>, if <c>N</c> is positive. If
+ <p>Repeats command <c>N</c>, if <c>N</c> is positive. If
it is negative, the <c>N</c>th previous command is repeated
- (i.e., <c>e(-1)</c> repeats the previous command).
- </p>
+ (that is, <c>e(-1)</c> repeats the previous command).</p>
</item>
<tag><c>v(N)</c></tag>
<item>
- <p>Uses the return value of the command <c>N</c> in the
+ <p>Uses the return value of command <c>N</c> in the
current command, if <c>N</c> is positive. If it is negative,
the return value of the <c>N</c>th previous command is used
- (i.e., <c>v(-1)</c> uses the value of the previous command).
- </p>
+ (that is, <c>v(-1)</c> uses the value of the previous command).</p>
</item>
<tag><c>help()</c></tag>
<item>
- <p>Evaluates <c>shell_default:help()</c>.
- </p>
+ <p>Evaluates <c>shell_default:help()</c>.</p>
</item>
<tag><c>c(File)</c></tag>
<item>
<p>Evaluates <c>shell_default:c(File)</c>. This compiles
and loads code in <c>File</c> and purges old versions of
code, if necessary. Assumes that the file and module names
- are the same.
- </p>
+ are the same.</p>
</item>
<tag><c>catch_exception(Bool)</c></tag>
<item>
@@ -179,161 +179,264 @@
(<c>false</c>) is to kill the evaluator process when an
exception occurs, which causes the shell to create a new
evaluator process. When the exception handling is set to
- <c>true</c> the evaluator process lives on which means that
- for instance ports and ETS tables as well as processes
- linked to the evaluator process survive the exception.
- </p>
+ <c>true</c>, the evaluator process lives on. This means,
+ for example, that ports and ETS tables as well as processes
+ linked to the evaluator process survive the exception.</p>
</item>
<tag><c>rd(RecordName, RecordDefinition)</c></tag>
<item>
<p>Defines a record in the shell. <c>RecordName</c> is
an atom and <c>RecordDefinition</c> lists the field names
and the default values. Usually record definitions are made
- known to the shell by use of the <c>rr</c> commands
+ known to the shell by use of the <c>rr/1,2,3</c> commands
described below, but sometimes it is handy to define records
- on the fly.
- </p>
+ on the fly.</p>
</item>
<tag><c>rf()</c></tag>
<item>
<p>Removes all record definitions, then reads record
definitions from the modules <c>shell_default</c> and
<c>user_default</c> (if loaded). Returns the names of the
- records defined.
- </p>
+ records defined.</p>
</item>
<tag><c>rf(RecordNames)</c></tag>
<item>
<p>Removes selected record definitions.
<c>RecordNames</c> is a record name or a list of record names.
- Use <c>'_'</c> to remove all record definitions.
- </p>
+ To remove all record definitions, use <c>'_'</c>.</p>
</item>
<tag><c>rl()</c></tag>
<item>
- <p>Prints all record definitions.
- </p>
+ <p>Prints all record definitions.</p>
</item>
<tag><c>rl(RecordNames)</c></tag>
<item>
<p>Prints selected record definitions.
- <c>RecordNames</c> is a record name or a list of record names.
- </p>
+ <c>RecordNames</c> is a record name or a list of record names.</p>
</item>
<tag><c>rp(Term)</c></tag>
<item>
<p>Prints a term using the record definitions known to the
shell. All of <c>Term</c> is printed; the depth is not
- limited as is the case when a return value is printed.
- </p>
+ limited as is the case when a return value is printed.</p>
</item>
<tag><c>rr(Module)</c></tag>
<item>
<p>Reads record definitions from a module's BEAM file. If
there are no record definitions in the BEAM file, the
source file is located and read instead. Returns the names
- of the record definitions read. <c>Module</c> is an atom.
- </p>
+ of the record definitions read. <c>Module</c> is an atom.</p>
</item>
<tag><c>rr(Wildcard)</c></tag>
<item>
<p>Reads record definitions from files. Existing
definitions of any of the record names read are replaced.
<c>Wildcard</c> is a wildcard string as defined in
- <c>filelib(3)</c> but not an atom.
- </p>
+ <seealso marker="filelib"><c>filelib(3)</c></seealso>,
+ but not an atom.</p>
</item>
<tag><c>rr(WildcardOrModule, RecordNames)</c></tag>
<item>
<p>Reads record definitions from files but
discards record names not mentioned in <c>RecordNames</c> (a
- record name or a list of record names).
- </p>
+ record name or a list of record names).</p>
</item>
<tag><c>rr(WildcardOrModule, RecordNames, Options)</c></tag>
<item>
<p>Reads record definitions from files. The compiler
options <c>{i,&nbsp;Dir}</c>, <c>{d,&nbsp;Macro}</c>, and
<c>{d,&nbsp;Macro,&nbsp;Value}</c> are recognized and used
- for setting up the include path and macro definitions. Use
- <c>'_'</c> as value of <c>RecordNames</c> to read all record
- definitions.
- </p>
+ for setting up the include path and macro definitions.
+ To read all record definitions, use
+ <c>'_'</c> as value of <c>RecordNames</c>.</p>
</item>
</taglist>
</section>
<section>
<title>Example</title>
- <p>The following example is a long dialogue with the shell. Commands
+ <p>The following example is a long dialog with the shell. Commands
starting with <c>></c> are inputs to the shell. All other lines
- are output from the shell. All commands in this example are explained at the end of the dialogue.
- .</p>
+ are output from the shell.</p>
+
<pre>
strider 1> <input>erl</input>
Erlang (BEAM) emulator version 5.3 [hipe] [threads:0]
Eshell V5.3 (abort with ^G)
-1><input>Str = "abcd".</input>
-"abcd"
+1> <input>Str = "abcd".</input>
+"abcd"</pre>
+
+ <p>Command 1 sets variable <c>Str</c> to string <c>"abcd"</c>.</p>
+
+ <pre>
2> <input>L = length(Str).</input>
-4
+4</pre>
+
+ <p>Command 2 sets <c>L</c> to the length of string <c>Str</c>.</p>
+
+ <pre>
3> <input>Descriptor = {L, list_to_atom(Str)}.</input>
-{4,abcd}
+{4,abcd}</pre>
+
+ <p>Command 3 builds the tuple <c>Descriptor</c>, evaluating the BIF
+ <seealso marker="erts:erlang#list_to_atom/1"><c>list_to_atom/1</c>
+ </seealso>.</p>
+
+ <pre>
4> <input>L.</input>
-4
+4</pre>
+
+ <p>Command 4 prints the value of variable <c>L</c>.</p>
+
+ <pre>
5> <input>b().</input>
Descriptor = {4,abcd}
L = 4
Str = "abcd"
-ok
+ok</pre>
+
+ <p>Command 5 evaluates the internal shell command <c>b()</c>, which
+ is an abbreviation of "bindings". This prints
+ the current shell variables and their bindings. <c>ok</c> at
+ the end is the return value of function <c>b()</c>.</p>
+
+ <pre>
6> <input>f(L).</input>
-ok
+ok</pre>
+
+ <p>Command 6 evaluates the internal shell command <c>f(L)</c> (abbreviation
+ of "forget"). The value of variable <c>L</c> is removed.</p>
+
+ <pre>
7> <input>b().</input>
Descriptor = {4,abcd}
Str = "abcd"
-ok
+ok</pre>
+
+ <p>Command 7 prints the new bindings.</p>
+
+ <pre>
8> <input>f(L).</input>
-ok
+ok</pre>
+
+ <p>Command 8 has no effect, as <c>L</c> has no value.</p>
+
+ <pre>
9> <input>{L, _} = Descriptor.</input>
-{4,abcd}
+{4,abcd}</pre>
+
+ <p>Command 9 performs a pattern matching operation on
+ <c>Descriptor</c>, binding a new value to <c>L</c>.</p>
+
+ <pre>
10> <input>L.</input>
-4
+4</pre>
+
+ <p>Command 10 prints the current value of <c>L</c>.</p>
+
+ <pre>
11> <input>{P, Q, R} = Descriptor.</input>
-** exception error: no match of right hand side value {4,abcd}
+** exception error: no match of right hand side value {4,abcd}</pre>
+
+ <p>Command 11 tries to match <c>{P, Q, R}</c> against
+ <c>Descriptor</c>, which is <c>{4, abc}</c>. The match fails and
+ none of the new variables become bound. The printout starting
+ with "<c>** exception error:</c>" is not the value of the
+ expression (the expression had no value because its evaluation
+ failed), but a warning printed by the system to inform
+ the user that an error has occurred. The values of the other
+ variables (<c>L</c>, <c>Str</c>, and so on) are unchanged.</p>
+
+ <pre>
12> <input>P.</input>
-* 1: variable 'P' is unbound **
+* 1: variable 'P' is unbound
13> <input>Descriptor.</input>
-{4,abcd}
+{4,abcd}</pre>
+
+ <p>Commands 12 and 13 show that <c>P</c> is unbound because the
+ previous command failed, and that <c>Descriptor</c> has not
+ changed.</p>
+
+ <pre>
14><input>{P, Q} = Descriptor.</input>
{4,abcd}
15> <input>P.</input>
-4
+4</pre>
+
+ <p>Commands 14 and 15 show a correct match where <c>P</c> and
+ <c>Q</c> are bound.</p>
+
+ <pre>
16> <input>f().</input>
-ok
+ok</pre>
+
+ <p>Command 16 clears all bindings.</p>
+
+ <p>The next few commands assume that <c>test1:demo(X)</c> is
+ defined as follows:</p>
+
+ <p><c>demo(X) -></c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>put(aa, worked),</c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>X = 1,</c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>X + 10.</c></p>
+
+ <pre>
17> <input>put(aa, hello).</input>
undefined
18> <input>get(aa).</input>
-hello
+hello</pre>
+
+ <p>Commands 17 and 18 set and inspect the value of item
+ <c>aa</c> in the process dictionary.</p>
+
+ <pre>
19> <input>Y = test1:demo(1).</input>
-11
+11</pre>
+
+ <p>Command 19 evaluates <c>test1:demo(1)</c>. The evaluation
+ succeeds and the changes made in the process dictionary become
+ visible to the shell. The new value of dictionary item
+ <c>aa</c> can be seen in command 20.</p>
+
+ <pre>
20> <input>get().</input>
[{aa,worked}]
21> <input>put(aa, hello).</input>
worked
22> <input>Z = test1:demo(2).</input>
** exception error: no match of right hand side value 1
- in function test1:demo/1
+ in function test1:demo/1</pre>
+
+ <p>Commands 21 and 22 change the value of dictionary item
+ <c>aa</c> to <c>hello</c> and call <c>test1:demo(2)</c>. Evaluation
+ fails and the changes made to the dictionary in
+ <c>test1:demo(2)</c>, before the error occurred, are discarded.</p>
+
+ <pre>
23> <input>Z.</input>
-* 1: variable 'Z' is unbound **
+* 1: variable 'Z' is unbound
24> <input>get(aa).</input>
-hello
+hello</pre>
+
+ <p>Commands 23 and 24 show that <c>Z</c> was not bound and that
+ dictionary item <c>aa</c> has retained its original value.</p>
+
+ <pre>
25> <input>erase(), put(aa, hello).</input>
undefined
26> <input>spawn(test1, demo, [1]).</input>
&lt;0.57.0>
27> <input>get(aa).</input>
-hello
+hello</pre>
+
+ <p>Commands 25, 26, and 27 show the effect of evaluating
+ <c>test1:demo(1)</c> in the background. In this case, the
+ expression is evaluated in a newly spawned process. Any
+ changes made in the process dictionary are local to the newly
+ spawned process and therefore not visible to the shell.</p>
+
+ <pre>
28> <input>io:format("hello hello\n").</input>
hello hello
ok
@@ -341,31 +444,96 @@ ok
hello hello
ok
30> <input>v(28).</input>
-ok
+ok</pre>
+
+ <p>Commands 28, 29 and 30 use the history facilities of the shell.
+ Command 29 re-evaluates command 28. Command 30 uses the value (result)
+ of command 28. In the cases of a pure function (a function
+ with no side effects), the result is the same. For a function
+ with side effects, the result can be different.</p>
+
+ <p>The next few commands show some record manipulation. It is
+ assumed that <c>ex.erl</c> defines a record as follows:</p>
+
+ <p><c>-record(rec, {a, b = val()}).</c></p>
+ <p><c>val() -></c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>3.</c></p>
+
+ <pre>
31> <input>c(ex).</input>
{ok,ex}
32> <input>rr(ex).</input>
-[rec]
+[rec]</pre>
+
+ <p>Commands 31 and 32 compile file <c>ex.erl</c> and read
+ the record definitions in <c>ex.beam</c>. If the compiler did not
+ output any record definitions on the BEAM file, <c>rr(ex)</c>
+ tries to read record definitions from the source file instead.</p>
+
+ <pre>
33> <input>rl(rec).</input>
-record(rec,{a,b = val()}).
-ok
+ok</pre>
+
+ <p>Command 33 prints the definition of the record named
+ <c>rec</c>.</p>
+
+ <pre>
34> <input>#rec{}.</input>
-** exception error: undefined shell command val/0
+** exception error: undefined shell command val/0</pre>
+
+ <p>Command 34 tries to create a <c>rec</c> record, but fails
+ as function <c>val/0</c> is undefined.</p>
+
+ <pre>
35> <input>#rec{b = 3}.</input>
-#rec{a = undefined,b = 3}
+#rec{a = undefined,b = 3}</pre>
+
+ <p>Command 35 shows the workaround: explicitly assign values to record
+ fields that cannot otherwise be initialized.</p>
+
+ <pre>
36> <input>rp(v(-1)).</input>
#rec{a = undefined,b = 3}
-ok
+ok</pre>
+
+ <p>Command 36 prints the newly created record using record
+ definitions maintained by the shell.</p>
+
+ <pre>
37> <input>rd(rec, {f = orddict:new()}).</input>
-rec
+rec</pre>
+
+ <p>Command 37 defines a record directly in the shell. The
+ definition replaces the one read from file <c>ex.beam</c>.</p>
+
+ <pre>
38> <input>#rec{}.</input>
#rec{f = []}
-ok
+ok</pre>
+
+ <p>Command 38 creates a record using the new definition, and
+ prints the result.</p>
+
+ <pre>
39> <input>rd(rec, {c}), A.</input>
-* 1: variable 'A' is unbound **
+* 1: variable 'A' is unbound
40> <input>#rec{}.</input>
#rec{c = undefined}
-ok
+ok</pre>
+
+ <p>Command 39 and 40 show that record definitions are updated
+ as side effects. The evaluation of the command fails, but
+ the definition of <c>rec</c> has been carried out.</p>
+
+ <p>For the next command, it is assumed that <c>test1:loop(N)</c> is
+ defined as follows:</p>
+
+ <p><c>loop(N) -></c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>io:format("Hello Number: ~w~n", [N]),</c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>loop(N+1).</c></p>
+
+ <pre>
41> <input>test1:loop(0).</input>
Hello Number: 0
Hello Number: 1
@@ -383,225 +551,122 @@ Hello Number: 3375
Hello Number: 3376
Hello Number: 3377
Hello Number: 3378
-** exception exit: killed
+** exception exit: killed</pre>
+
+ <p>Command 41 evaluates <c>test1:loop(0)</c>, which puts the
+ system into an infinite loop. At this point the user types
+ <c>^G</c> (Control G), which suspends output from the
+ current process,
+ which is stuck in a loop, and activates <c>JCL</c> mode. In <c>JCL</c>
+ mode the user can start and stop jobs.</p>
+
+ <p>In this particular case, command <c>i</c> ("interrupt")
+ terminates the looping program, and command <c>c</c>
+ connects to the shell again. As the process was
+ running in the background before we killed it, more
+ printouts occur before message "<c>** exception exit: killed</c>"
+ is shown.</p>
+
+ <pre>
42> <input>E = ets:new(t, []).</input>
-17
+17</pre>
+
+ <p>Command 42 creates an ETS table.</p>
+
+ <pre>
43> <input>ets:insert({d,1,2}).</input>
-** exception error: undefined function ets:insert/1
+** exception error: undefined function ets:insert/1</pre>
+
+ <p>Command 43 tries to insert a tuple into the ETS table, but the
+ first argument (the table) is missing. The exception kills the
+ evaluator process.</p>
+
+ <pre>
44> <input>ets:insert(E, {d,1,2}).</input>
** exception error: argument is of wrong type
in function ets:insert/2
- called as ets:insert(16,{d,1,2})
+ called as ets:insert(16,{d,1,2})</pre>
+
+ <p>Command 44 corrects the mistake, but the ETS table has been
+ destroyed as it was owned by the killed evaluator process.</p>
+
+ <pre>
45> <input>f(E).</input>
ok
46> <input>catch_exception(true).</input>
-false
+false</pre>
+
+ <p>Command 46 sets the exception handling of the evaluator process
+ to <c>true</c>. The exception handling can also be set when
+ starting Erlang by <c>erl -stdlib shell_catch_exception true</c>.</p>
+
+ <pre>
47> <input>E = ets:new(t, []).</input>
18
48> <input>ets:insert({d,1,2}).</input>
-* exception error: undefined function ets:insert/1
-49> <input>ets:insert(E, {d,1,2}).</input>
-true
-50> <input>halt().</input>
-strider 2></pre>
- </section>
+* exception error: undefined function ets:insert/1</pre>
- <section>
- <title>Comments</title>
- <p>Command 1 sets the variable <c>Str</c> to the string
- <c>"abcd"</c>.
- </p>
- <p>Command 2 sets <c>L</c> to the length of the string evaluating
- the BIF <c>atom_to_list</c>.
- </p>
- <p>Command 3 builds the tuple <c>Descriptor</c>.
- </p>
- <p>Command 4 prints the value of the variable <c>L</c>.
- </p>
- <p>Command 5 evaluates the internal shell command <c>b()</c>, which
- is an abbreviation of "bindings". This prints
- the current shell variables and their bindings. The <c>ok</c> at
- the end is the return value of the <c>b()</c> function.
- </p>
- <p>Command 6 <c>f(L)</c> evaluates the internal shell command
- <c>f(L)</c> (abbreviation of "forget"). The value of the variable
- <c>L</c> is removed.
- </p>
- <p>Command 7 prints the new bindings.
- </p>
- <p>Command 8 has no effect since <c>L</c> has no value.</p>
- <p>Command 9 performs a pattern matching operation on
- <c>Descriptor</c>, binding a new value to <c>L</c>.
- </p>
- <p>Command 10 prints the current value of <c>L</c>.
- </p>
- <p>Command 11 tries to match <c>{P, Q, R}</c> against
- <c>Descriptor</c> which is <c>{4, abc}</c>. The match fails and
- none of the new variables become bound. The printout starting
- with "<c>** exception error:</c>" is not the value of the
- expression (the expression had no value because its evaluation
- failed), but rather a warning printed by the system to inform
- the user that an error has occurred. The values of the other
- variables (<c>L</c>, <c>Str</c>, etc.) are unchanged.
- </p>
- <p>Commands 12 and 13 show that <c>P</c> is unbound because the
- previous command failed, and that <c>Descriptor</c> has not
- changed.
- </p>
- <p>Commands 14 and 15 show a correct match where <c>P</c> and
- <c>Q</c> are bound.
- </p>
- <p>Command 16 clears all bindings.
- </p>
- <p>The next few commands assume that <c>test1:demo(X)</c> is
- defined in the following way:</p>
- <pre>
-demo(X) ->
- put(aa, worked),
- X = 1,
- X + 10. </pre>
- <p>Commands 17 and 18 set and inspect the value of the item
- <c>aa</c> in the process dictionary.
- </p>
- <p>Command 19 evaluates <c>test1:demo(1)</c>. The evaluation
- succeeds and the changes made in the process dictionary become
- visible to the shell. The new value of the dictionary item
- <c>aa</c> can be seen in command 20.
- </p>
- <p>Commands 21 and 22 change the value of the dictionary item
- <c>aa</c> to <c>hello</c> and call <c>test1:demo(2)</c>. Evaluation
- fails and the changes made to the dictionary in
- <c>test1:demo(2)</c>, before the error occurred, are discarded.
- </p>
- <p>Commands 23 and 24 show that <c>Z</c> was not bound and that the
- dictionary item <c>aa</c> has retained its original value.
- </p>
- <p>Commands 25, 26 and 27 show the effect of evaluating
- <c>test1:demo(1)</c> in the background. In this case, the
- expression is evaluated in a newly spawned process. Any
- changes made in the process dictionary are local to the newly
- spawned process and therefore not visible to the shell.
- </p>
- <p>Commands 28, 29 and 30 use the history facilities of the shell.
- </p>
- <p>Command 29 is <c>e(28)</c>. This re-evaluates command
- 28. Command 30 is <c>v(28)</c>. This uses the value (result) of
- command 28. In the cases of a pure function (a function
- with no side effects), the result is the same. For a function
- with side effects, the result can be different.
- </p>
- <p>The next few commands show some record manipulation. It is
- assumed that <c>ex.erl</c> defines a record like this:</p>
- <pre>
--record(rec, {a, b = val()}).
-
-val() ->
- 3. </pre>
- <p>Commands 31 and 32 compiles the file <c>ex.erl</c> and reads
- the record definitions in <c>ex.beam</c>. If the compiler did not
- output any record definitions on the BEAM file, <c>rr(ex)</c>
- tries to read record definitions from the source file instead.
- </p>
- <p>Command 33 prints the definition of the record named
- <c>rec</c>.
- </p>
- <p>Command 34 tries to create a <c>rec</c> record, but fails
- since the function <c>val/0</c> is undefined. Command 35 shows
- the workaround: explicitly assign values to record fields that
- cannot otherwise be initialized.
- </p>
- <p>Command 36 prints the newly created record using record
- definitions maintained by the shell.
- </p>
- <p>Command 37 defines a record directly in the shell. The
- definition replaces the one read from the file <c>ex.beam</c>.
- </p>
- <p>Command 38 creates a record using the new definition, and
- prints the result.
- </p>
- <p>Command 39 and 40 show that record definitions are updated
- as side effects. The evaluation of the command fails but
- the definition of <c>rec</c> has been carried out.
- </p>
- <p>For the next command, it is assumed that <c>test1:loop(N)</c> is
- defined in the following way:</p>
- <pre>
-loop(N) ->
- io:format("Hello Number: ~w~n", [N]),
- loop(N+1).</pre>
- <p>Command 41 evaluates <c>test1:loop(0)</c>, which puts the
- system into an infinite loop. At this point the user types
- <c>Control G</c>, which suspends output from the current process,
- which is stuck in a loop, and activates <c>JCL</c> mode. In <c>JCL</c>
- mode the user can start and stop jobs.
- </p>
- <p>In this particular case, the <c>i</c> command ("interrupt") is
- used to terminate the looping program, and the <c>c</c> command
- is used to connect to the shell again. Since the process was
- running in the background before we killed it, there will be
- more printouts before the "<c>** exception exit: killed</c>"
- message is shown.
- </p>
- <p>Command 42 creates an ETS table.</p>
- <p>Command 43 tries to insert a tuple into the ETS table but the
- first argument (the table) is missing. The exception kills the
- evaluator process.</p>
- <p>Command 44 corrects the mistake, but the ETS table has been
- destroyed since it was owned by the killed evaluator process.</p>
- <p>Command 46 sets the exception handling of the evaluator process
- to <c>true</c>. The exception handling can also be set when
- starting Erlang, like this: <c>erl -stdlib shell_catch_exception
- true</c>.</p>
<p>Command 48 makes the same mistake as in command 43, but this time
the evaluator process lives on. The single star at the beginning
of the printout signals that the exception has been caught.</p>
+
+ <pre>
+49> <input>ets:insert(E, {d,1,2}).</input>
+true</pre>
+
<p>Command 49 successfully inserts the tuple into the ETS table.</p>
- <p>The <c>halt()</c> command exits the Erlang runtime system.
- </p>
+
+ <pre>
+50> <input>halt().</input>
+strider 2></pre>
+
+ <p>Command 50 exits the Erlang runtime system.</p>
</section>
<section>
<title>JCL Mode</title>
<p>When the shell starts, it starts a single evaluator
- process. This process, together with any local processes which
+ process. This process, together with any local processes that
it spawns, is referred to as a <c>job</c>. Only the current job,
which is said to be <c>connected</c>, can perform operations
- with standard IO. All other jobs, which are said to be <c>detached</c>, are
- <c>blocked</c> if they attempt to use standard IO.
- </p>
- <p>All jobs which do not use standard IO run in the normal way.
- </p>
- <p>The shell escape key <em><c>^G</c></em> (Control G) detaches the current job
- and activates <c>JCL</c> mode. The <c>JCL</c> mode prompt is <c>"-->"</c>. If <c>"?"</c> is entered at the prompt, the following help message is
- displayed:</p>
- <pre>
- --> ?
- c [nn] - connect to job
- i [nn] - interrupt job
- k [nn] - kill job
- j - list all jobs
- s [shell] - start local shell
- r [node [shell]] - start remote shell
- q - quit erlang
- ? | h - this message </pre>
+ with standard I/O. All other jobs, which are said to be <c>detached</c>,
+ are <c>blocked</c> if they attempt to use standard I/O.</p>
+
+ <p>All jobs that do not use standard I/O run in the normal way.</p>
+
+ <p>The shell escape key <c>^G</c> (Control G) detaches the current
+ job and activates <c>JCL</c> mode. The <c>JCL</c> mode prompt is
+ <c>"-->"</c>. If <c>"?"</c> is entered at the prompt, the following help
+ message is displayed:</p>
+
+ <pre>
+--> ?
+c [nn] - connect to job
+i [nn] - interrupt job
+k [nn] - kill job
+j - list all jobs
+s [shell] - start local shell
+r [node [shell]] - start remote shell
+q - quit erlang
+? | h - this message</pre>
+
<p>The <c>JCL</c> commands have the following meaning:</p>
+
<taglist>
<tag><c>c [nn]</c></tag>
<item>
<p>Connects to job number <c><![CDATA[<nn>]]></c> or the current
- job. The standard shell is resumed. Operations which use
- standard IO by the current job will be interleaved with
- user inputs to the shell.
- </p>
+ job. The standard shell is resumed. Operations that use
+ standard I/O by the current job are interleaved with
+ user inputs to the shell.</p>
</item>
<tag><c>i [nn]</c></tag>
<item>
<p>Stops the current evaluator process for job number
<c>nn</c> or the current job, but does not kill the shell
- process. Accordingly, any variable bindings and the process dictionary
- will be preserved and the job can be connected again.
- This command can be used to interrupt an endless loop.
- </p>
+ process. So, any variable bindings and the process
+ dictionary are preserved and the job can be connected again.
+ This command can be used to interrupt an endless loop.</p>
</item>
<tag><c>k [nn]</c></tag>
<item>
@@ -609,135 +674,166 @@ loop(N) ->
job. All spawned processes in the job are
killed, provided they have not evaluated the
<c>group_leader/1</c> BIF and are located on
- the local machine. Processes spawned on remote nodes will
- not be killed.
- </p>
+ the local machine. Processes spawned on remote nodes
+ are not killed.</p>
</item>
<tag><c>j</c></tag>
<item>
<p>Lists all jobs. A list of all known jobs is
- printed. The current job name is prefixed with '*'.
- </p>
+ printed. The current job name is prefixed with '*'.</p>
</item>
<tag><c>s</c></tag>
<item>
- <p>Starts a new job. This will be assigned the new index
- <c>[nn]</c> which can be used in references.
- </p>
+ <p>Starts a new job. This is assigned the new index
+ <c>[nn]</c>, which can be used in references.</p>
</item>
<tag><c>s [shell]</c></tag>
<item>
- <p>Starts a new job. This will be assigned the new index
- <c>[nn]</c> which can be used in references.
- If the optional argument <c>shell</c> is given, it is assumed
- to be a module that implements an alternative shell.
- </p>
+ <p>Starts a new job. This is assigned the new index
+ <c>[nn]</c>, which can be used in references.
+ If optional argument <c>shell</c> is specified, it is assumed
+ to be a module that implements an alternative shell.</p>
</item>
<tag><c>r [node]</c></tag>
<item>
<p>Starts a remote job on <c>node</c>. This is used in
distributed Erlang to allow a shell running on one node to
- control a number of applications running on a network of
- nodes.
- If the optional argument <c>shell</c> is given, it is assumed
- to be a module that implements an alternative shell.
- </p>
+ control a number of applications running on a network of nodes.
+ If optional argument <c>shell</c> is specified, it is assumed
+ to be a module that implements an alternative shell.</p>
</item>
<tag><c>q</c></tag>
<item>
- <p>Quits Erlang. Note that this option is disabled if
- Erlang is started with the ignore break, <c>+Bi</c>,
- system flag (which may be useful e.g. when running
- a restricted shell, see below).
- </p>
+ <p>Quits Erlang. Notice that this option is disabled if
+ Erlang is started with the ignore break, <c>+Bi</c>,
+ system flag (which can be useful, for example when running
+ a restricted shell, see the next section).</p>
</item>
<tag><c>?</c></tag>
<item>
- <p>Displays this message.</p>
+ <p>Displays the help message above.</p>
</item>
</taglist>
- <p>It is possible to alter the behavior of shell escape by means
- of the STDLIB application variable <c>shell_esc</c>. The value of
+
+ <p>The behavior of shell escape can be changed by the STDLIB
+ application variable <c>shell_esc</c>. The value of
the variable can be either <c>jcl</c> (<c>erl -stdlib shell_esc jcl</c>)
or <c>abort</c> (<c>erl -stdlib shell_esc abort</c>). The
- first option sets ^G to activate <c>JCL</c> mode (which is also
- default behavior). The latter sets ^G to terminate the current
- shell and start a new one. <c>JCL</c> mode cannot be invoked when
- <c>shell_esc</c> is set to <c>abort</c>. </p>
- <p>If you want an Erlang node to have a remote job active from the start
- (rather than the default local job), you start Erlang with the
- <c>-remsh</c> flag. Example: <c>erl -sname this_node -remsh other_node@other_host</c></p>
+ first option sets <c>^G</c> to activate <c>JCL</c> mode (which
+ is also default behavior). The latter sets <c>^G</c> to
+ terminate the current shell and start a new one.
+ <c>JCL</c> mode cannot be invoked when
+ <c>shell_esc</c> is set to <c>abort</c>.</p>
+
+ <p>If you want an Erlang node to have a remote job active from the start
+ (rather than the default local job), start Erlang with flag
+ <c>-remsh</c>, for example,
+ <c>erl -sname this_node -remsh other_node@other_host</c></p>
</section>
<section>
<title>Restricted Shell</title>
- <p>The shell may be started in a
+ <p>The shell can be started in a
restricted mode. In this mode, the shell evaluates a function call
only if allowed. This feature makes it possible to, for example,
prevent a user from accidentally calling a function from the
prompt that could harm a running system (useful in combination
- with the the system flag <em><c>+Bi</c></em>).</p>
+ with system flag <c>+Bi</c>).</p>
+
<p>When the restricted shell evaluates an expression and
- encounters a function call or an operator application,
+ encounters a function call or an operator application,
it calls a callback function (with
information about the function call in question). This callback
function returns <c>true</c> to let the shell go ahead with the
evaluation, or <c>false</c> to abort it. There are two possible
callback functions for the user to implement:</p>
- <p><em><c>local_allowed(Func, ArgList, State) -> {true,NewState} | {false,NewState}</c></em></p>
- <p>to determine if the call to the local function <c>Func</c>
- with arguments <c>ArgList</c> should be allowed.</p>
- <p><em><c>non_local_allowed(FuncSpec, ArgList, State) -> {true,NewState} | {false,NewState} | {{redirect,NewFuncSpec,NewArgList},NewState}</c></em></p>
- <p>to determine if the call to non-local function
- <c>FuncSpec</c> (<c>{Module,Func}</c> or a fun) with arguments
- <c>ArgList</c> should be allowed. The return value
- <c>{redirect,NewFuncSpec,NewArgList}</c> can be used to let
- the shell evaluate some other function than the one specified by
- <c>FuncSpec</c> and <c>ArgList</c>.</p>
- <p>These callback functions are in fact called from local and
+
+ <list type="bulleted">
+ <item>
+ <p><c>local_allowed(Func, ArgList, State) -> {boolean(),NewState}</c></p>
+ <p>This is used to determine if the call to the local function
+ <c>Func</c> with arguments <c>ArgList</c> is to be allowed.</p>
+ </item>
+ <item>
+ <p><c>non_local_allowed(FuncSpec, ArgList, State)
+ -> {boolean(),NewState}
+ | {{redirect,NewFuncSpec,NewArgList},NewState}</c></p>
+ <p>This is used to determine if the call to non-local function
+ <c>FuncSpec</c> (<c>{Module,Func}</c> or a fun) with arguments
+ <c>ArgList</c> is to be allowed. The return value
+ <c>{redirect,NewFuncSpec,NewArgList}</c> can be used to let
+ the shell evaluate some other function than the one specified by
+ <c>FuncSpec</c> and <c>ArgList</c>.</p>
+ </item>
+ </list>
+
+ <p>These callback functions are called from local and
non-local evaluation function handlers, described in the
- <seealso marker="erl_eval">erl_eval</seealso>
+ <seealso marker="erl_eval"><c>erl_eval</c></seealso>
manual page. (Arguments in <c>ArgList</c> are evaluated before the
callback functions are called.)</p>
- <p>The <c>State</c> argument is a tuple
+
+ <p>Argument <c>State</c> is a tuple
<c>{ShellState,ExprState}</c>. The return value <c>NewState</c>
- has the same form. This may be used to carry a state between calls
+ has the same form. This can be used to carry a state between calls
to the callback functions. Data saved in <c>ShellState</c> lives
through an entire shell session. Data saved in <c>ExprState</c>
lives only through the evaluation of the current expression.</p>
+
<p>There are two ways to start a restricted shell session:</p>
+
<list type="bulleted">
- <item>Use the STDLIB application variable <c>restricted_shell</c>
- and specify, as its value, the name of the callback
- module. Example (with callback functions implemented in
- callback_mod.erl): <c>$ erl -stdlib restricted_shell callback_mod</c></item>
- <item>From a normal shell session, call function
- <c>shell:start_restricted/1</c>. This exits the current evaluator
- and starts a new one in restricted mode.</item>
+ <item>
+ <p>Use STDLIB application variable <c>restricted_shell</c>
+ and specify, as its value, the name of the callback
+ module. Example (with callback functions implemented in
+ <c>callback_mod.erl</c>):
+ <c>$ erl -stdlib restricted_shell callback_mod</c>.</p>
+ </item>
+ <item>
+ <p>From a normal shell session, call function
+ <seealso marker="#start_restricted/1">
+ <c>start_restricted/1</c></seealso>. This exits the current evaluator
+ and starts a new one in restricted mode.</p>
+ </item>
</list>
+
<p><em>Notes:</em></p>
<list type="bulleted">
- <item>When restricted shell mode is activated or
- deactivated, new jobs started on the node will run in restricted
- or normal mode respectively.</item>
- <item>If restricted mode has been enabled on a
- particular node, remote shells connecting to this node will also
- run in restricted mode.</item>
- <item>The callback functions cannot be used to allow or disallow
- execution of functions called from compiled code (only functions
- called from expressions entered at the shell prompt).</item>
+ <item>
+ <p>When restricted shell mode is activated or
+ deactivated, new jobs started on the node run in restricted
+ or normal mode, respectively.</p>
+ </item>
+ <item>
+ <p>If restricted mode has been enabled on a
+ particular node, remote shells connecting to this node also
+ run in restricted mode.</p>
+ </item>
+ <item>
+ <p>The callback functions cannot be used to allow or disallow
+ execution of functions called from compiled code (only functions
+ called from expressions entered at the shell prompt).</p>
+ </item>
</list>
+
<p>Errors when loading the callback module is handled in different
ways depending on how the restricted shell is activated:</p>
+
<list type="bulleted">
- <item>If the restricted shell is activated by setting the kernel
- variable during emulator startup and the callback module cannot be
- loaded, a default restricted shell allowing only the commands
- <c>q()</c> and <c>init:stop()</c> is used as fallback.</item>
- <item>If the restricted shell is activated using
- <c>shell:start_restricted/1</c> and the callback module cannot be
- loaded, an error report is sent to the error logger and the call
- returns <c>{error,Reason}</c>.</item>
+ <item>
+ <p>If the restricted shell is activated by setting the STDLIB
+ variable during emulator startup, and the callback module cannot be
+ loaded, a default restricted shell allowing only the commands
+ <c>q()</c> and <c>init:stop()</c> is used as fallback.</p>
+ </item>
+ <item>
+ <p>If the restricted shell is activated using
+ <seealso marker="#start_restricted/1">
+ <c>start_restricted/1</c></seealso> and the callback module cannot
+ be loaded, an error report is sent to the error logger and the call
+ returns <c>{error,Reason}</c>.</p>
+ </item>
</list>
</section>
@@ -746,44 +842,27 @@ loop(N) ->
<p>The default shell prompt function displays the name of the node
(if the node can be part of a distributed system) and the
current command number. The user can customize the prompt
- function by calling
- <c>shell:prompt_func/1</c> or by setting the application
+ function by calling <seealso marker="#prompt_func/1">
+ <c>prompt_func/1</c></seealso> or by setting application
configuration parameter <c>shell_prompt_func</c> for the
- application STDLIB.</p>
+ STDLIB application.</p>
+
<p>A customized prompt function is stated as a tuple
<c>{Mod,&nbsp;Func}</c>. The function is called as
<c>Mod:Func(L)</c>, where <c>L</c> is a list of key-value pairs
created by the shell. Currently there is only one pair:
- <c>{history, N}</c>, where N is the current command number. The
- function should return a list of characters or an atom. This
- constraint is due to the Erlang I/O-protocol. Unicode characters
- beyond codepoint 255 are allowed in the list. Note
+ <c>{history, N}</c>, where <c>N</c> is the current command number. The
+ function is to return a list of characters or an atom. This
+ constraint is because of the Erlang I/O protocol. Unicode characters
+ beyond code point 255 are allowed in the list. Notice
that in restricted mode the call <c>Mod:Func(L)</c> must be
- allowed or the default shell prompt function will be called.</p>
- </section>
+ allowed or the default shell prompt function is called.</p>
+ </section>
<funcs>
<func>
- <name name="history" arity="1"/>
- <fsummary>Sets the number of previous commands to keep</fsummary>
- <desc>
- <p>Sets the number of previous commands to keep in the
- history list to <c><anno>N</anno></c>. The previous number is returned.
- The default number is 20.</p>
- </desc>
- </func>
- <func>
- <name name="results" arity="1"/>
- <fsummary>Sets the number of previous results to keep</fsummary>
- <desc>
- <p>Sets the number of results from previous commands to keep in
- the history list to <c><anno>N</anno></c>. The previous number is returned.
- The default number is 20.</p>
- </desc>
- </func>
- <func>
<name>catch_exception(Bool) -> boolean()</name>
- <fsummary>Sets the exception handling of the shell</fsummary>
+ <fsummary>Set the exception handling of the shell.</fsummary>
<type>
<v>Bool = boolean()</v>
</type>
@@ -793,52 +872,76 @@ loop(N) ->
(<c>false</c>) is to kill the evaluator process when an
exception occurs, which causes the shell to create a new
evaluator process. When the exception handling is set to
- <c>true</c> the evaluator process lives on which means that
- for instance ports and ETS tables as well as processes
+ <c>true</c>, the evaluator process lives on, which means that,
+ for example, ports and ETS tables as well as processes
linked to the evaluator process survive the exception.</p>
</desc>
</func>
+
+ <func>
+ <name name="history" arity="1"/>
+ <fsummary>Set the number of previous commands to keep.</fsummary>
+ <desc>
+ <p>Sets the number of previous commands to keep in the
+ history list to <c><anno>N</anno></c>. The previous number is
+ returned. Defaults to 20.</p>
+ </desc>
+ </func>
+
<func>
<name name="prompt_func" arity="1"/>
- <fsummary>Sets the shell prompt</fsummary>
+ <fsummary>Set the shell prompt.</fsummary>
<desc>
<p>Sets the shell prompt function to <c><anno>PromptFunc</anno></c>.
The previous prompt function is returned.</p>
</desc>
</func>
+
+ <func>
+ <name name="results" arity="1"/>
+ <fsummary>Set the number of previous results to keep.</fsummary>
+ <desc>
+ <p>Sets the number of results from previous commands to keep in
+ the history list to <c><anno>N</anno></c>. The previous number is
+ returned. Defaults to 20.</p>
+ </desc>
+ </func>
+
<func>
<name name="start_restricted" arity="1"/>
- <fsummary>Exits a normal shell and starts a restricted shell.</fsummary>
+ <fsummary>Exit a normal shell and starts a restricted shell.</fsummary>
<desc>
- <p>Exits a normal shell and starts a restricted
- shell. <c><anno>Module</anno></c> specifies the callback module for the
+ <p>Exits a normal shell and starts a restricted shell.
+ <c><anno>Module</anno></c> specifies the callback module for the
functions <c>local_allowed/3</c> and <c>non_local_allowed/3</c>.
The function is meant to be called from the shell.</p>
<p>If the callback module cannot be loaded, an error tuple is
returned. The <c><anno>Reason</anno></c> in the error tuple is the one
- returned by the code loader when trying to load the code of the callback
- module.</p>
+ returned by the code loader when trying to load the code of the
+ callback module.</p>
</desc>
</func>
+
<func>
<name name="stop_restricted" arity="0"/>
- <fsummary>Exits a restricted shell and starts a normal shell.</fsummary>
+ <fsummary>Exit a restricted shell and starts a normal shell.</fsummary>
<desc>
<p>Exits a restricted shell and starts a normal shell. The function
is meant to be called from the shell.</p>
</desc>
</func>
+
<func>
<name name="strings" arity="1"/>
- <fsummary>Sets the shell's string recognition flag.</fsummary>
+ <fsummary>Set the shell's string recognition flag.</fsummary>
<desc>
<p>Sets pretty printing of lists to <c><anno>Strings</anno></c>.
The previous value of the flag is returned.</p>
<p>The flag can also be set by the STDLIB application variable
- <c>shell_strings</c>. The default is
- <c>true</c> which means that lists of integers will be
- printed using the string syntax, when possible. The value
- <c>false</c> means that no lists will be printed using the
+ <c>shell_strings</c>. Defaults to
+ <c>true</c>, which means that lists of integers are
+ printed using the string syntax, when possible. Value
+ <c>false</c> means that no lists are printed using the
string syntax.</p>
</desc>
</func>
diff --git a/lib/stdlib/doc/src/shell_default.xml b/lib/stdlib/doc/src/shell_default.xml
index 51cd3b62d3..81c99bce10 100644
--- a/lib/stdlib/doc/src/shell_default.xml
+++ b/lib/stdlib/doc/src/shell_default.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -32,25 +32,27 @@
<checked>Joe Armstrong</checked>
<date>1996-09-09</date>
<rev>A</rev>
- <file>shell_default.sgml</file>
+ <file>shell_default.xml</file>
</header>
<module>shell_default</module>
- <modulesummary>Customizing the Erlang Environment</modulesummary>
+ <modulesummary>Customizing the Erlang environment.</modulesummary>
<description>
- <p>The functions in <c>shell_default</c> are called when no module
- name is given in a shell command.
- </p>
- <p>Consider the following shell dialogue:</p>
+ <p>The functions in this module are called when no module name is
+ specified in a shell command.</p>
+
+ <p>Consider the following shell dialog:</p>
+
<pre>
-1 > <input>lists:reverse("abc").</input>
+1> <input>lists:reverse("abc").</input>
"cba"
-2 > <input>c(foo).</input>
-{ok, foo} </pre>
- <p>In command one, the module <c>lists</c> is called. In command
- two, no module name is specified. The shell searches the modules
- <c>user_default</c> followed by <c>shell_default</c> for the
- function <c>foo/1</c>.
- </p>
+2> <input>c(foo).</input>
+{ok, foo}</pre>
+
+ <p>In command one, module <seealso marker="lists"><c>lists</c></seealso> is
+ called. In command two, no module name is specified. The shell searches
+ module <c>user_default</c> followed by module <c>shell_default</c> for
+ function <c>foo/1</c>.</p>
+
<p><c>shell_default</c> is intended for "system wide"
customizations to the shell. <c>user_default</c> is intended for
"local" or individual user customizations.</p>
@@ -60,10 +62,12 @@
<title>Hint</title>
<p>To add your own commands to the shell, create a module called
<c>user_default</c> and add the commands you want. Then add the
- following line as the <em>first</em> line in your <c>.erlang</c> file in your
- home directory. </p>
+ following line as the <em>first</em> line in your <c>.erlang</c> file in
+ your home directory.</p>
+
<pre>
-code:load_abs("$PATH/user_default"). </pre>
+code:load_abs("$PATH/user_default").</pre>
+
<p><c>$PATH</c> is the directory where your
<c>user_default</c> module can be found.</p>
</section>
diff --git a/lib/stdlib/doc/src/slave.xml b/lib/stdlib/doc/src/slave.xml
index 8c16cbf5b1..e53ec8231b 100644
--- a/lib/stdlib/doc/src/slave.xml
+++ b/lib/stdlib/doc/src/slave.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,89 +29,139 @@
<rev></rev>
</header>
<module>slave</module>
- <modulesummary>Functions to Starting and Controlling Slave Nodes</modulesummary>
+ <modulesummary>Functions for starting and controlling slave nodes.
+ </modulesummary>
<description>
<p>This module provides functions for starting Erlang slave nodes.
- All slave nodes which are started by a master will terminate
- automatically when the master terminates. All TTY output produced
- at the slave will be sent back to the master node. File I/O is
- done via the master.</p>
+ All slave nodes that are started by a master terminate
+ automatically when the master terminates. All terminal output produced
+ at the slave is sent back to the master node. File I/O is
+ done through the master.</p>
+
<p>Slave nodes on other hosts than the current one are started with
- the program <c>rsh</c>. The user must be allowed to <c>rsh</c> to
+ the <c>rsh</c> program. The user must be allowed to <c>rsh</c> to
the remote hosts without being prompted for a password. This can
- be arranged in a number of ways (refer to the <c>rsh</c>
- documentation for details). A slave node started on the same host
+ be arranged in a number of ways (for details, see the <c>rsh</c>
+ documentation). A slave node started on the same host
as the master inherits certain environment values from the master,
such as the current directory and the environment variables. For
what can be assumed about the environment when a slave is started
- on another host, read the documentation for the <c>rsh</c>
+ on another host, see the documentation for the <c>rsh</c>
program.</p>
+
<p>An alternative to the <c>rsh</c> program can be specified on
- the command line to <c>erl</c> as follows: <c>-rsh Program</c>.</p>
- <p>The slave node should use the same file system at the master. At
- least, Erlang/OTP should be installed in the same place on both
- computers and the same version of Erlang should be used.</p>
- <p>Currently, a node running on Windows NT can only start slave
+ the command line to
+ <seealso marker="erts:erl#erl"><c>erl(1)</c></seealso> as follows:</p>
+
+ <pre>
+-rsh Program</pre>
+
+ <p>The slave node is to use the same file system at the master. At
+ least, Erlang/OTP is to be installed in the same place on both
+ computers and the same version of Erlang is to be used.</p>
+
+ <p>A node running on Windows can only start slave
nodes on the host on which it is running.</p>
+
<p>The master node must be alive.</p>
</description>
+
<funcs>
<func>
+ <name>pseudo([Master | ServerList]) -> ok</name>
+ <fsummary>Start a number of pseudo servers.</fsummary>
+ <type>
+ <v>Master = node()</v>
+ <v>ServerList = [atom()]</v>
+ </type>
+ <desc>
+ <p>Calls <c>pseudo(Master, ServerList)</c>. If you want to start
+ a node from the command line and set up a number of pseudo
+ servers, an Erlang runtime system can be started as follows:</p>
+ <pre>
+% erl -name abc -s slave pseudo klacke@super x --</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name name="pseudo" arity="2"/>
+ <fsummary>Start a number of pseudo servers.</fsummary>
+ <desc>
+ <p>Starts a number of pseudo servers. A pseudo server is a
+ server with a registered name that does nothing
+ but pass on all message to the real server that executes at a
+ master node. A pseudo server is an intermediary that only has
+ the same registered name as the real server.</p>
+ <p>For example, if you have started a slave node <c>N</c> and
+ want to execute <c>pxw</c> graphics code on this node, you can
+ start server <c>pxw_server</c> as a pseudo server at
+ the slave node. This is illustrated as follows:</p>
+ <code type="none">
+rpc:call(N, slave, pseudo, [node(), [pxw_server]]).</code>
+ </desc>
+ </func>
+
+ <func>
+ <name name="relay" arity="1"/>
+ <fsummary>Run a pseudo server.</fsummary>
+ <desc>
+ <p>Runs a pseudo server. This function never returns any value
+ and the process that executes the function receives
+ messages. All messages received are simply passed on to
+ <c><anno>Pid</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="start" arity="1"/>
<name name="start" arity="2"/>
<name name="start" arity="3"/>
- <fsummary>Start a slave node on a host</fsummary>
+ <fsummary>Start a slave node on a host.</fsummary>
<desc>
- <p>Starts a slave node on the host <c><anno>Host</anno></c>. Host names need
- not necessarily be specified as fully qualified names; short
+ <p>Starts a slave node on host <c><anno>Host</anno></c>. Host names
+ need not necessarily be specified as fully qualified names; short
names can also be used. This is the same condition that
applies to names of distributed Erlang nodes.</p>
- <p>The name of the started node will be <c><anno>Name</anno>@<anno>Host</anno></c>. If no
- name is provided, the name will be the same as the node which
- executes the call (with the exception of the host name part of
- the node name).</p>
+ <p>The name of the started node becomes
+ <c><anno>Name</anno>@<anno>Host</anno></c>. If no
+ name is provided, the name becomes the same as the node that
+ executes the call (except the host name part of the node name).</p>
<p>The slave node resets its <c>user</c> process so that all
- terminal I/O which is produced at the slave is automatically
- relayed to the master. Also, the file process will be relayed
+ terminal I/O that is produced at the slave is automatically
+ relayed to the master. Also, the file process is relayed
to the master.</p>
- <p>The <c><anno>Args</anno></c> argument is used to set <c>erl</c> command
- line arguments. If provided, it is passed to the new node and
- can be used for a variety of purposes. See
- <seealso marker="erts:erl#erl">erl(1)</seealso></p>
- <p>As an example, suppose that we want to start a slave node at
- host <c>H</c> with the node name <c>Name@H</c>, and we also
+ <p>Argument <c><anno>Args</anno></c> is used to set <c>erl</c>
+ command-line arguments. If provided, it is passed to the new
+ node and can be used for a variety of purposes; see
+ <seealso marker="erts:erl#erl"><c>erl(1)</c></seealso>.</p>
+ <p>As an example, suppose that you want to start a slave node at
+ host <c>H</c> with node name <c>Name@H</c> and
want the slave node to have the following properties:</p>
<list type="bulleted">
- <item>
- <p>directory <c>Dir</c> should be added to the code path;</p>
- </item>
- <item>
- <p>the Mnesia directory should be set to <c>M</c>;</p>
- </item>
- <item>
- <p>the unix <c>DISPLAY</c> environment variable should be
- set to the display of the master node.</p>
- </item>
+ <item>Directory <c>Dir</c> is to be added to the code path.</item>
+ <item>The Mnesia directory is to be set to <c>M</c>.</item>
+ <item>The Unix <c>DISPLAY</c> environment variable is to be
+ set to the display of the master node.</item>
</list>
<p>The following code is executed to achieve this:</p>
<code type="none">
E = " -env DISPLAY " ++ net_adm:localhost() ++ ":0 ",
Arg = "-mnesia_dir " ++ M ++ " -pa " ++ Dir ++ E,
slave:start(H, Name, Arg).</code>
- <p>If successful, the function returns <c>{ok, <anno>Node</anno>}</c>,
- where <c><anno>Node</anno></c> is the name of the new node. Otherwise it
- returns <c>{error, <anno>Reason</anno>}</c>, where <c><anno>Reason</anno></c> can be
- one of:</p>
+ <p>The function returns <c>{ok, <anno>Node</anno>}</c>, where
+ <c><anno>Node</anno></c> is the name of the new node, otherwise
+ <c>{error, <anno>Reason</anno>}</c>, where <c><anno>Reason</anno></c>
+ can be one of:</p>
<taglist>
<tag><c>timeout</c></tag>
<item>
<p>The master node failed to get in contact with the slave
- node. This can happen in a number of circumstances:</p>
+ node. This can occur in a number of circumstances:</p>
<list type="bulleted">
- <item>Erlang/OTP is not installed on the remote host</item>
- <item>the file system on the other host has a different
- structure to the the master</item>
- <item>the Erlang nodes have different cookies.</item>
+ <item>Erlang/OTP is not installed on the remote host.</item>
+ <item>The file system on the other host has a different
+ structure to the the master.</item>
+ <item>The Erlang nodes have different cookies.</item>
</list>
</item>
<tag><c>no_rsh</c></tag>
@@ -120,75 +170,35 @@ slave:start(H, Name, Arg).</code>
</item>
<tag><c>{already_running, <anno>Node</anno>}</c></tag>
<item>
- <p>A node with the name <c><anno>Name</anno>@<anno>Host</anno></c> already exists.</p>
+ <p>A node with name <c><anno>Name</anno>@<anno>Host</anno></c>
+ already exists.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name name="start_link" arity="1"/>
<name name="start_link" arity="2"/>
<name name="start_link" arity="3"/>
- <fsummary>Start and link to a slave node on a host</fsummary>
+ <fsummary>Start and link to a slave node on a host.</fsummary>
<desc>
<p>Starts a slave node in the same way as <c>start/1,2,3</c>,
except that the slave node is linked to the currently
executing process. If that process terminates, the slave node
also terminates.</p>
- <p>See <c>start/1,2,3</c> for a description of arguments and
- return values.</p>
+ <p>For a description of arguments and return values, see
+ <seealso marker="#start/1"><c>start/1,2,3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="stop" arity="1"/>
- <fsummary>Stop (kill) a node</fsummary>
+ <fsummary>Stop (kill) a node.</fsummary>
<desc>
<p>Stops (kills) a node.</p>
</desc>
</func>
- <func>
- <name>pseudo([Master | ServerList]) -> ok</name>
- <fsummary>Start a number of pseudo servers</fsummary>
- <type>
- <v>Master = node()</v>
- <v>ServerList = [atom()]</v>
- </type>
- <desc>
- <p>Calls <c>pseudo(Master, ServerList)</c>. If we want to start
- a node from the command line and set up a number of pseudo
- servers, an Erlang runtime system can be started as
- follows:</p>
- <pre>
-% erl -name abc -s slave pseudo klacke@super x --</pre>
- </desc>
- </func>
- <func>
- <name name="pseudo" arity="2"/>
- <fsummary>Start a number of pseudo servers</fsummary>
- <desc>
- <p>Starts a number of pseudo servers. A pseudo server is a
- server with a registered name which does absolutely nothing
- but pass on all message to the real server which executes at a
- master node. A pseudo server is an intermediary which only has
- the same registered name as the real server.</p>
- <p>For example, if we have started a slave node <c>N</c> and
- want to execute <c>pxw</c> graphics code on this node, we can
- start the server <c>pxw_server</c> as a pseudo server at
- the slave node. The following code illustrates:</p>
- <code type="none">
-rpc:call(N, slave, pseudo, [node(), [pxw_server]]).</code>
- </desc>
- </func>
- <func>
- <name name="relay" arity="1"/>
- <fsummary>Run a pseudo server</fsummary>
- <desc>
- <p>Runs a pseudo server. This function never returns any value
- and the process which executes the function will receive
- messages. All messages received will simply be passed on to
- <c><anno>Pid</anno></c>.</p>
- </desc>
- </func>
</funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/sofs.xml b/lib/stdlib/doc/src/sofs.xml
index 53f6ca957a..4cf1984d46 100644
--- a/lib/stdlib/doc/src/sofs.xml
+++ b/lib/stdlib/doc/src/sofs.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,260 +24,284 @@
<title>sofs</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2001-08-25</date>
<rev>PA1</rev>
- <file>sofs.sgml</file>
+ <file>sofs.xml</file>
</header>
<module>sofs</module>
- <modulesummary>Functions for Manipulating Sets of Sets</modulesummary>
+ <modulesummary>Functions for manipulating sets of sets.</modulesummary>
<description>
- <p>The <c>sofs</c> module implements operations on finite sets and
+ <p>This module provides operations on finite sets and
relations represented as sets. Intuitively, a set is a
collection of elements; every element belongs to the set, and
the set contains every element.</p>
+
<p>Given a set A and a sentence S(x), where x is a free variable,
a new set B whose elements are exactly those elements of A for
which S(x) holds can be formed, this is denoted B&nbsp;=
{x&nbsp;in&nbsp;A&nbsp;: S(x)}. Sentences are expressed using
the logical operators "for some" (or "there exists"), "for all",
"and", "or", "not". If the existence of a set containing all the
- specified elements is known (as will always be the case in this
- module), we write B&nbsp;= {x&nbsp;: S(x)}. </p>
- <p>The <em>unordered set</em> containing the elements a, b and c
- is denoted {a,&nbsp;b,&nbsp;c}. This notation is not to be
- confused with tuples. The <em>ordered pair</em> of a and b, with
- first <em>coordinate</em> a and second coordinate b, is denoted
- (a,&nbsp;b). An ordered pair is an <em>ordered set</em> of two
- elements. In this module ordered sets can contain one, two or
- more elements, and parentheses are used to enclose the elements.
- Unordered sets and ordered sets are orthogonal, again in this
- module; there is no unordered set equal to any ordered set.</p>
- <p>The set that contains no elements is called the <em>empty set</em>.
- If two sets A and B contain the same elements, then A
- is <marker id="equal"></marker><em>equal</em> to B, denoted
- A&nbsp;=&nbsp;B. Two ordered sets are equal if they contain the
- same number of elements and have equal elements at each
- coordinate. If a set A contains all elements that B contains,
- then B is a <marker id="subset"></marker><em>subset</em> of A.
- The <marker id="union"></marker><em>union</em> of two sets A and B is
- the smallest set that contains all elements of A and all elements of
- B. The <marker id="intersection"></marker><em>intersection</em> of two
- sets A and B is the set that contains all elements of A that
- belong to B.
- Two sets are <marker id="disjoint"></marker><em>disjoint</em> if their
- intersection is the empty set.
- The <marker id="difference"></marker><em>difference</em> of
- two sets A and B is the set that contains all elements of A that
- do not belong to B.
- The <marker id="symmetric_difference"></marker><em>symmetric
- difference</em> of
- two sets is the set that contains those element that belong to
- either of the two sets, but not both.
- The <marker id="union_n"></marker><em>union</em> of a collection
- of sets is the smallest set that contains all the elements that
- belong to at least one set of the collection.
- The <marker id="intersection_n"></marker><em>intersection</em> of
- a non-empty collection of sets is the set that contains all elements
- that belong to every set of the collection.</p>
- <p>The <marker id="Cartesian_product"></marker><em>Cartesian
- product</em> of
- two sets X and Y, denoted X&nbsp;&times;&nbsp;Y, is the set
- {a&nbsp;: a&nbsp;= (x,&nbsp;y) for some x&nbsp;in&nbsp;X and for
- some y&nbsp;in&nbsp;Y}.
- A <marker id="relation"></marker><em>relation</em> is a subset of
- X&nbsp;&times;&nbsp;Y. Let R be a relation. The fact that
- (x,&nbsp;y) belongs to R is written as x&nbsp;R&nbsp;y. Since
- relations are sets, the definitions of the last paragraph
- (subset, union, and so on) apply to relations as well.
- The <marker id="domain"></marker><em>domain</em> of R is the
- set {x&nbsp;: x&nbsp;R&nbsp;y for some y&nbsp;in&nbsp;Y}.
- The <marker id="range"></marker><em>range</em> of R is the
- set {y&nbsp;: x&nbsp;R&nbsp;y for some x&nbsp;in&nbsp;X}.
- The <marker id="converse"></marker><em>converse</em> of R is the
- set {a&nbsp;: a&nbsp;= (y,&nbsp;x) for some
- (x,&nbsp;y)&nbsp;in&nbsp;R}. If A is a subset of X, then
- the <marker id="image"></marker><em>image</em> of
- A under R is the set {y&nbsp;: x&nbsp;R&nbsp;y for some
- x&nbsp;in&nbsp;A}, and if B is a subset of Y, then
- the <marker id="inverse_image"></marker><em>inverse image</em> of B is
- the set {x&nbsp;: x&nbsp;R&nbsp;y for some y&nbsp;in&nbsp;B}. If R is a
- relation from X to Y and S is a relation from Y to Z, then
- the <marker id="relative_product"></marker><em>relative product</em> of
- R and S is the relation T from X to Z defined so that x&nbsp;T&nbsp;z
- if and only if there exists an element y in Y such that
- x&nbsp;R&nbsp;y and y&nbsp;S&nbsp;z.
- The <marker id="restriction"></marker><em>restriction</em> of R to A is
- the set S defined so that x&nbsp;S&nbsp;y if and only if there exists an
- element x in A such that x&nbsp;R&nbsp;y. If S is a restriction
- of R to A, then R is
- an <marker id="extension"></marker><em>extension</em> of S to X.
- If X&nbsp;=&nbsp;Y then we call R a relation <em>in</em> X.
- The <marker id="field"></marker><em>field</em> of a relation R in X
- is the union of the domain of R and the range of R.
- If R is a relation in X, and
- if S is defined so that x&nbsp;S&nbsp;y if x&nbsp;R&nbsp;y and
- not x&nbsp;=&nbsp;y, then S is
- the <marker id="strict_relation"></marker><em>strict</em> relation
- corresponding to
- R, and vice versa, if S is a relation in X, and if R is defined
- so that x&nbsp;R&nbsp;y if x&nbsp;S&nbsp;y or x&nbsp;=&nbsp;y,
- then R is the <marker id="weak_relation"></marker><em>weak</em> relation
- corresponding to S. A relation R in X is <em>reflexive</em> if
- x&nbsp;R&nbsp;x for every element x of X; it is
- <em>symmetric</em> if x&nbsp;R&nbsp;y implies that
- y&nbsp;R&nbsp;x; and it is <em>transitive</em> if
- x&nbsp;R&nbsp;y and y&nbsp;R&nbsp;z imply that x&nbsp;R&nbsp;z.</p>
- <p>A <marker id="function"></marker><em>function</em> F is a relation, a
- subset of X&nbsp;&times;&nbsp;Y, such that the domain of F is
- equal to X and such that for every x in X there is a unique
- element y in Y with (x,&nbsp;y) in F. The latter condition can
- be formulated as follows: if x&nbsp;F&nbsp;y and x&nbsp;F&nbsp;z
- then y&nbsp;=&nbsp;z. In this module, it will not be required
- that the domain of F be equal to X for a relation to be
- considered a function. Instead of writing
- (x,&nbsp;y)&nbsp;in&nbsp;F or x&nbsp;F&nbsp;y, we write
- F(x)&nbsp;=&nbsp;y when F is a function, and say that F maps x
- onto y, or that the value of F at x is y. Since functions are
- relations, the definitions of the last paragraph (domain, range,
- and so on) apply to functions as well. If the converse of a
- function F is a function F', then F' is called
- the <marker id="inverse"></marker><em>inverse</em> of F.
- The relative product of two functions F1 and F2 is called
- the <marker id="composite"></marker><em>composite</em> of F1 and F2
- if the range of F1 is a subset of the domain of F2. </p>
- <p>Sometimes, when the range of a function is more important than
- the function itself, the function is called a <em>family</em>.
- The domain of a family is called the <em>index set</em>, and the
- range is called the <em>indexed set</em>. If x is a family from
- I to X, then x[i] denotes the value of the function at index i.
- The notation "a family in X" is used for such a family. When the
- indexed set is a set of subsets of a set X, then we call x
- a <marker id="family"></marker><em>family of subsets</em> of X. If x
- is a family of subsets of X, then the union of the range of x is
- called the <em>union of the family</em> x. If x is non-empty
- (the index set is non-empty),
- the <em>intersection of the family</em> x is the intersection of
- the range of x. In this
- module, the only families that will be considered are families
- of subsets of some set X; in the following the word "family"
- will be used for such families of subsets.</p>
- <p>A <marker id="partition"></marker><em>partition</em> of a set X is a
- collection S of non-empty subsets of X whose union is X and
- whose elements are pairwise disjoint. A relation in a set is an
- <em>equivalence relation</em> if it is reflexive, symmetric and
- transitive. If R is an equivalence relation in X, and x is an
- element of X,
- the <marker id="equivalence_class"></marker><em>equivalence
- class</em> of x with respect to R is the set of all those
- elements y of X for which x&nbsp;R&nbsp;y holds. The equivalence
- classes constitute a partitioning of X. Conversely, if C is a
- partition of X, then the relation that holds for any two
- elements of X if they belong to the same equivalence class, is
- an equivalence relation induced by the partition C. If R is an
- equivalence relation in X, then
- the <marker id="canonical_map"></marker><em>canonical map</em> is
- the function that maps every element of X onto its equivalence class.
- </p>
- <p><marker id="binary_relation"></marker>Relations as defined above
- (as sets of ordered pairs) will from now on be referred to as
- <em>binary relations</em>. We call a set of ordered sets
- (x[1],&nbsp;...,&nbsp;x[n]) an <marker id="n_ary_relation"></marker>
- <em>(n-ary) relation</em>, and say that the relation is a subset of
- the <marker id="Cartesian_product_tuple"></marker>Cartesian product
- X[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;X[n] where x[i] is
- an element of X[i], 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n.
- The <marker id="projection"></marker><em>projection</em> of an n-ary
- relation R onto coordinate i is the set {x[i]&nbsp;:
- (x[1],&nbsp;...,&nbsp;x[i],&nbsp;...,&nbsp;x[n]) in R for some
- x[j]&nbsp;in&nbsp;X[j], 1&nbsp;&lt;=&nbsp;j&nbsp;&lt;=&nbsp;n
- and not i&nbsp;=&nbsp;j}. The projections of a binary relation R
- onto the first and second coordinates are the domain and the
- range of R respectively. The relative product of binary
- relations can be generalized to n-ary relations as follows. Let
- TR be an ordered set (R[1],&nbsp;...,&nbsp;R[n]) of binary
- relations from X to Y[i] and S a binary relation from
- (Y[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;Y[n]) to Z.
- The <marker id="tuple_relative_product"></marker><em>relative
- product</em> of
- TR and S is the binary relation T from X to Z defined so that
- x&nbsp;T&nbsp;z if and only if there exists an element y[i] in
- Y[i] for each 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n such that
- x&nbsp;R[i]&nbsp;y[i] and
- (y[1],&nbsp;...,&nbsp;y[n])&nbsp;S&nbsp;z. Now let TR be a an
- ordered set (R[1],&nbsp;...,&nbsp;R[n]) of binary relations from
- X[i] to Y[i] and S a subset of
- X[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;X[n].
- The <marker id="multiple_relative_product"></marker><em>multiple
- relative product</em> of TR and S is defined to be the
- set {z&nbsp;: z&nbsp;= ((x[1],&nbsp;...,&nbsp;x[n]), (y[1],...,y[n]))
- for some (x[1],&nbsp;...,&nbsp;x[n])&nbsp;in&nbsp;S and for some
- (x[i],&nbsp;y[i]) in R[i],
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n}.
- The <marker id="natural_join"></marker><em>natural join</em> of
- an n-ary relation R
- and an m-ary relation S on coordinate i and j is defined to be
- the set {z&nbsp;: z&nbsp;= (x[1],&nbsp;...,&nbsp;x[n],&nbsp;
- y[1],&nbsp;...,&nbsp;y[j-1],&nbsp;y[j+1],&nbsp;...,&nbsp;y[m])
- for some (x[1],&nbsp;...,&nbsp;x[n])&nbsp;in&nbsp;R and for some
- (y[1],&nbsp;...,&nbsp;y[m])&nbsp;in&nbsp;S such that
- x[i]&nbsp;=&nbsp;y[j]}.</p>
- <p><marker id="sets_definition"></marker>The sets recognized by this
- module will be represented by elements of the relation Sets, defined as
- the smallest set such that:</p>
+ specified elements is known (as is always the case in this
+ module), this is denoted B&nbsp;= {x&nbsp;: S(x)}.</p>
+
<list type="bulleted">
- <item>for every atom T except '_' and for every term X,
- (T,&nbsp;X) belongs to Sets (<em>atomic sets</em>);
+ <item>
+ <p>The <em>unordered set</em> containing the elements a, b, and c is
+ denoted {a,&nbsp;b,&nbsp;c}. This notation is not to be confused with
+ tuples.</p>
+ <p>The <em>ordered pair</em> of a and b, with first <em>coordinate</em>
+ a and second coordinate b, is denoted (a,&nbsp;b). An ordered pair
+ is an <em>ordered set</em> of two elements. In this module, ordered
+ sets can contain one, two, or more elements, and parentheses are
+ used to enclose the elements.</p>
+ <p>Unordered sets and ordered sets are orthogonal, again in this
+ module; there is no unordered set equal to any ordered set.</p>
</item>
- <item>(['_'],&nbsp;[]) belongs to Sets (the <em>untyped empty set</em>);
+ <item>
+ <p>The <em>empty set</em> contains no elements.</p>
+ <p>Set A is <marker id="equal"></marker><em>equal</em> to set B if they
+ contain the same elements, which is denoted A&nbsp;=&nbsp;B. Two
+ ordered sets are equal if they contain the same number of elements
+ and have equal elements at each coordinate.</p>
+ <p>Set B is a <marker id="subset"></marker><em>subset</em> of set A
+ if A contains all elements that B contains.</p>
+ <p>The <marker id="union"></marker><em>union</em> of two sets A and B
+ is the smallest set that contains all elements of A and all elements
+ of B.</p>
+ <p>The <marker id="intersection"></marker><em>intersection</em> of two
+ sets A and B is the set that contains all elements of A that belong
+ to B.</p>
+ <p>Two sets are <marker id="disjoint"></marker><em>disjoint</em> if
+ their intersection is the empty set.</p>
+ <p>The <marker id="difference"></marker><em>difference</em> of two sets
+ A and B is the set that contains all elements of A that do not belong
+ to B.</p>
+ <p>The <marker id="symmetric_difference"></marker><em>symmetric
+ difference</em> of two sets is the set that contains those element
+ that belong to either of the two sets, but not both.</p>
+ <p>The <marker id="union_n"></marker><em>union</em> of a collection
+ of sets is the smallest set that contains all the elements that
+ belong to at least one set of the collection.</p>
+ <p>The <marker id="intersection_n"></marker><em>intersection</em> of
+ a non-empty collection of sets is the set that contains all elements
+ that belong to every set of the collection.</p>
</item>
- <item>for every tuple T&nbsp;= {T[1],&nbsp;...,&nbsp;T[n]} and
- for every tuple X&nbsp;= {X[1],&nbsp;...,&nbsp;X[n]}, if
- (T[i],&nbsp;X[i]) belongs to Sets for every
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n then (T,&nbsp;X) belongs
- to Sets (<em>ordered sets</em>);
+ <item>
+ <p>The <marker id="Cartesian_product"></marker><em>Cartesian
+ product</em> of two sets X and Y, denoted X&nbsp;&times;&nbsp;Y, is
+ the set {a&nbsp;: a&nbsp;= (x,&nbsp;y) for some x&nbsp;in&nbsp;X and
+ for some y&nbsp;in&nbsp;Y}.</p>
+ <p>A <marker id="relation"></marker><em>relation</em> is a subset of
+ X&nbsp;&times;&nbsp;Y. Let R be a relation. The fact that (x,&nbsp;y)
+ belongs to R is written as x&nbsp;R&nbsp;y. As relations are sets,
+ the definitions of the last item (subset, union, and so on) apply to
+ relations as well.</p>
+ <p>The <marker id="domain"></marker><em>domain</em> of R is the set
+ {x&nbsp;: x&nbsp;R&nbsp;y for some y&nbsp;in&nbsp;Y}.</p>
+ <p>The <marker id="range"></marker><em>range</em> of R is the set
+ {y&nbsp;: x&nbsp;R&nbsp;y for some x&nbsp;in&nbsp;X}.</p>
+ <p>The <marker id="converse"></marker><em>converse</em> of R is the
+ set {a&nbsp;: a&nbsp;= (y,&nbsp;x) for some
+ (x,&nbsp;y)&nbsp;in&nbsp;R}.</p>
+ <p>If A is a subset of X, the <marker id="image"></marker><em>image</em>
+ of A under R is the set {y&nbsp;: x&nbsp;R&nbsp;y for some
+ x&nbsp;in&nbsp;A}. If B is a subset of Y, the
+ <marker id="inverse_image"></marker><em>inverse image</em> of B is the
+ set {x&nbsp;: x&nbsp;R&nbsp;y for some y&nbsp;in&nbsp;B}.</p>
+ <p>If R is a relation from X to Y, and S is a relation from Y to Z, the
+ <marker id="relative_product"></marker><em>relative product</em> of R
+ and S is the relation T from X to Z defined so that x&nbsp;T&nbsp;z
+ if and only if there exists an element y in Y such that
+ x&nbsp;R&nbsp;y and y&nbsp;S&nbsp;z.</p>
+ <p>The <marker id="restriction"></marker><em>restriction</em> of R to A
+ is the set S defined so that x&nbsp;S&nbsp;y if and only if there
+ exists an element x in A such that x&nbsp;R&nbsp;y.</p>
+ <p>If S is a restriction of R to A, then R is an
+ <marker id="extension"></marker><em>extension</em> of S to X.</p>
+ <p>If X&nbsp;=&nbsp;Y, then R is called a relation <em>in</em> X.</p>
+ <p>The <marker id="field"></marker><em>field</em> of a relation R in X
+ is the union of the domain of R and the range of R.</p>
+ <p>If R is a relation in X, and if S is defined so that x&nbsp;S&nbsp;y
+ if x&nbsp;R&nbsp;y and not x&nbsp;=&nbsp;y, then S is the
+ <marker id="strict_relation"></marker><em>strict</em> relation
+ corresponding to R. Conversely, if S is a relation in X, and if R is
+ defined so that x&nbsp;R&nbsp;y if x&nbsp;S&nbsp;y or x&nbsp;=&nbsp;y,
+ then R is the <marker id="weak_relation"></marker><em>weak</em>
+ relation corresponding to S.</p>
+ <p>A relation R in X is <em>reflexive</em> if x&nbsp;R&nbsp;x for every
+ element x of X, it is <em>symmetric</em> if x&nbsp;R&nbsp;y implies
+ that y&nbsp;R&nbsp;x, and it is <em>transitive</em> if
+ x&nbsp;R&nbsp;y and y&nbsp;R&nbsp;z imply that x&nbsp;R&nbsp;z.</p>
+ </item>
+ <item>
+ <p>A <marker id="function"></marker><em>function</em> F is a relation,
+ a subset of X&nbsp;&times;&nbsp;Y, such that the domain of F is equal
+ to X and such that for every x in X there is a unique element y in Y
+ with (x,&nbsp;y) in F. The latter condition can be formulated as
+ follows: if x&nbsp;F&nbsp;y and x&nbsp;F&nbsp;z, then y&nbsp;=&nbsp;z.
+ In this module, it is not required that the domain of F is equal to X
+ for a relation to be considered a function.</p>
+ <p>Instead of writing (x,&nbsp;y)&nbsp;in&nbsp;F or x&nbsp;F&nbsp;y, we
+ write F(x)&nbsp;=&nbsp;y when F is a function, and say that F maps x
+ onto y, or that the value of F at x is y.</p>
+ <p>As functions are relations, the definitions of the last item (domain,
+ range, and so on) apply to functions as well.</p>
+ <p>If the converse of a function F is a function F', then F' is called
+ the <marker id="inverse"></marker><em>inverse</em> of F.</p>
+ <p>The relative product of two functions F1 and F2 is called
+ the <marker id="composite"></marker><em>composite</em> of F1 and F2
+ if the range of F1 is a subset of the domain of F2.</p>
+ </item>
+ <item>
+ <p>Sometimes, when the range of a function is more important than the
+ function itself, the function is called a <em>family</em>.</p>
+ <p>The domain of a family is called the <em>index set</em>, and the
+ range is called the <em>indexed set</em>.</p>
+ <p>If x is a family from I to X, then x[i] denotes the value of the
+ function at index i. The notation "a family in X" is used for such a
+ family.</p>
+ <p>When the indexed set is a set of subsets of a set X, we call x a
+ <marker id="family"></marker><em>family of subsets</em> of X.</p>
+ <p>If x is a family of subsets of X, the union of the range of x is
+ called the <em>union of the family</em> x.</p>
+ <p>If x is non-empty (the index set is non-empty), the <em>intersection
+ of the family</em> x is the intersection of the range of x.</p>
+ <p>In this module, the only families that are considered are families
+ of subsets of some set X; in the following, the word "family" is
+ used for such families of subsets.</p>
+ </item>
+ <item>
+ <p>A <marker id="partition"></marker><em>partition</em> of a set X is a
+ collection S of non-empty subsets of X whose union is X and whose
+ elements are pairwise disjoint.</p>
+ <p>A relation in a set is an <em>equivalence relation</em> if it is
+ reflexive, symmetric, and transitive.</p>
+ <p>If R is an equivalence relation in X, and x is an element of X, the
+ <marker id="equivalence_class"></marker><em>equivalence class</em> of
+ x with respect to R is the set of all those elements y of X for which
+ x&nbsp;R&nbsp;y holds. The equivalence classes constitute a
+ partitioning of X. Conversely, if C is a partition of X, the relation
+ that holds for any two elements of X if they belong to the same
+ equivalence class, is an equivalence relation induced by the
+ partition C.</p>
+ <p>If R is an equivalence relation in X, the
+ <marker id="canonical_map"></marker><em>canonical map</em> is the
+ function that maps every element of X onto its equivalence class.</p>
+ </item>
+ <item>
+ <p><marker id="binary_relation"></marker>Relations as defined above
+ (as sets of ordered pairs) are from now on referred to as <em>binary
+ relations</em>.</p>
+ <p>We call a set of ordered sets (x[1],&nbsp;...,&nbsp;x[n]) an
+ <marker id="n_ary_relation"></marker><em>(n-ary) relation</em>, and
+ say that the relation is a subset of the
+ <marker id="Cartesian_product_tuple"></marker>Cartesian product
+ X[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;X[n], where x[i] is
+ an element of X[i], 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n.</p>
+ <p>The <marker id="projection"></marker><em>projection</em> of an n-ary
+ relation R onto coordinate i is the set {x[i]&nbsp;:
+ (x[1],&nbsp;...,&nbsp;x[i],&nbsp;...,&nbsp;x[n]) in R for some
+ x[j]&nbsp;in&nbsp;X[j], 1&nbsp;&lt;=&nbsp;j&nbsp;&lt;=&nbsp;n and
+ not i&nbsp;=&nbsp;j}. The projections of a binary relation R onto the
+ first and second coordinates are the domain and the range of R,
+ respectively.</p>
+ <p>The relative product of binary relations can be generalized to n-ary
+ relations as follows. Let TR be an ordered set
+ (R[1],&nbsp;...,&nbsp;R[n]) of binary relations from X to Y[i]
+ and S a binary relation from
+ (Y[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;Y[n]) to Z. The
+ <marker id="tuple_relative_product"></marker><em>relative product</em>
+ of TR and S is the binary relation T from X to Z defined so that
+ x&nbsp;T&nbsp;z if and only if there exists an element y[i] in Y[i]
+ for each 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n such that
+ x&nbsp;R[i]&nbsp;y[i] and
+ (y[1],&nbsp;...,&nbsp;y[n])&nbsp;S&nbsp;z. Now let TR be a an
+ ordered set (R[1],&nbsp;...,&nbsp;R[n]) of binary relations from
+ X[i] to Y[i] and S a subset of
+ X[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;X[n].
+ The <marker id="multiple_relative_product"></marker><em>multiple
+ relative product</em> of TR and S is defined to be the set
+ {z&nbsp;: z&nbsp;= ((x[1],&nbsp;...,&nbsp;x[n]), (y[1],...,y[n]))
+ for some (x[1],&nbsp;...,&nbsp;x[n])&nbsp;in&nbsp;S and for some
+ (x[i],&nbsp;y[i]) in R[i], 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n}.</p>
+ <p>The <marker id="natural_join"></marker><em>natural join</em> of an
+ n-ary relation R and an m-ary relation S on coordinate i and j is
+ defined to be the set
+ {z&nbsp;: z&nbsp;= (x[1],&nbsp;...,&nbsp;x[n],&nbsp;
+ y[1],&nbsp;...,&nbsp;y[j-1],&nbsp;y[j+1],&nbsp;...,&nbsp;y[m])
+ for some (x[1],&nbsp;...,&nbsp;x[n])&nbsp;in&nbsp;R and for some
+ (y[1],&nbsp;...,&nbsp;y[m])&nbsp;in&nbsp;S such that
+ x[i]&nbsp;=&nbsp;y[j]}.</p>
+ </item>
+ <item>
+ <p><marker id="sets_definition"></marker>The sets recognized by this
+ module are represented by elements of the relation Sets, which is
+ defined as the smallest set such that:</p>
+ <list type="bulleted">
+ <item>
+ <p>For every atom T, except '_', and for every term X,
+ (T,&nbsp;X) belongs to Sets (<em>atomic sets</em>).</p>
+ </item>
+ <item>
+ <p>(['_'],&nbsp;[]) belongs to Sets (the <em>untyped empty
+ set</em>).</p>
+ </item>
+ <item>
+ <p>For every tuple T&nbsp;= {T[1],&nbsp;...,&nbsp;T[n]} and
+ for every tuple X&nbsp;= {X[1],&nbsp;...,&nbsp;X[n]}, if
+ (T[i],&nbsp;X[i]) belongs to Sets for every
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n, then (T,&nbsp;X) belongs
+ to Sets (<em>ordered sets</em>).</p>
+ </item>
+ <item>
+ <p>For every term T, if X is the empty list or a non-empty
+ sorted list [X[1],&nbsp;...,&nbsp;X[n]] without duplicates
+ such that (T,&nbsp;X[i]) belongs to Sets for every
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n, then ([T],&nbsp;X)
+ belongs to Sets (<em>typed unordered sets</em>).</p>
+ </item>
+ </list>
+ <p>An <marker id="external_set"></marker><em>external set</em> is an
+ element of the range of Sets.</p>
+ <p>A <marker id="type"></marker><em>type</em> is an element of the
+ domain of Sets.</p>
+ <p>If S is an element (T,&nbsp;X) of Sets, then T is a
+ <marker id="valid_type"></marker><em>valid type</em> of X, T is the
+ type of S, and X is the external set of S.
+ <seealso marker="#from_term/2"><c>from_term/2</c></seealso> creates a
+ set from a type and an Erlang term turned into an external set.</p>
+ <p>The sets represented by Sets are the elements of the range of
+ function Set from Sets to Erlang terms and sets of Erlang terms:</p>
+ <list type="bulleted">
+ <item>Set(T,Term)&nbsp;= Term, where T is an atom</item>
+ <item>Set({T[1],&nbsp;...,&nbsp;T[n]},&nbsp;{X[1],&nbsp;...,
+ &nbsp;X[n]})&nbsp;= (Set(T[1],&nbsp;X[1]),&nbsp;...,&nbsp;
+ Set(T[n],&nbsp;X[n]))</item>
+ <item>Set([T],&nbsp;[X[1],&nbsp;...,&nbsp;X[n]])&nbsp;=
+ {Set(T,&nbsp;X[1]),&nbsp;...,&nbsp;Set(T,&nbsp;X[n])}</item>
+ <item>Set([T],&nbsp;[])&nbsp;= {}</item>
+ </list>
+ <p>When there is no risk of confusion, elements of Sets are identified
+ with the sets they represent. For example, if U is the result of
+ calling <seealso marker="#union/2"><c>union/2</c></seealso> with S1
+ and S2 as arguments, then U is said to be the union of S1 and S2.
+ A more precise formulation is that Set(U) is the union of Set(S1)
+ and Set(S2).</p>
</item>
- <item>for every term T, if X is the empty list or a non-empty
- sorted list [X[1],&nbsp;...,&nbsp;X[n]] without duplicates
- such that (T,&nbsp;X[i]) belongs to Sets for every
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n, then ([T],&nbsp;X)
- belongs to Sets (<em>typed unordered sets</em>).</item>
- </list>
- <p>An <marker id="external_set"></marker><em>external set</em> is an
- element of the range of Sets.
- A <marker id="type"></marker><em>type</em>
- is an element of the domain of Sets. If S is an element
- (T,&nbsp;X) of Sets, then T is
- a <marker id="valid_type"></marker><em>valid type</em> of X,
- T is the type of S, and X is the external set
- of S. <seealso marker="#from_term">from_term/2</seealso> creates a
- set from a type and an Erlang term turned into an external set.</p>
- <p>The actual sets represented by Sets are the elements of the
- range of the function Set from Sets to Erlang terms and sets of
- Erlang terms:</p>
- <list type="bulleted">
- <item>Set(T,Term)&nbsp;= Term, where T is an atom;</item>
- <item>Set({T[1],&nbsp;...,&nbsp;T[n]},&nbsp;{X[1],&nbsp;...,&nbsp;X[n]})
- &nbsp;= (Set(T[1],&nbsp;X[1]),&nbsp;...,&nbsp;Set(T[n],&nbsp;X[n]));</item>
- <item>Set([T],&nbsp;[X[1],&nbsp;...,&nbsp;X[n]])
- &nbsp;= {Set(T,&nbsp;X[1]),&nbsp;...,&nbsp;Set(T,&nbsp;X[n])};</item>
- <item>Set([T],&nbsp;[])&nbsp;= {}.</item>
</list>
- <p>When there is no risk of confusion, elements of Sets will be
- identified with the sets they represent. For instance, if U is
- the result of calling <c>union/2</c> with S1 and S2 as
- arguments, then U is said to be the union of S1 and S2. A more
- precise formulation would be that Set(U) is the union of Set(S1)
- and Set(S2).</p>
+
<p>The types are used to implement the various conditions that
- sets need to fulfill. As an example, consider the relative
+ sets must fulfill. As an example, consider the relative
product of two sets R and S, and recall that the relative
product of R and S is defined if R is a binary relation to Y and
- S is a binary relation from Y. The function that implements the relative
- product, <seealso marker="#relprod_impl">relative_product/2</seealso>, checks
+ S is a binary relation from Y. The function that implements the
+ relative product, <seealso marker="#relative_product/2">
+ <c>relative_product/2</c></seealso>, checks
that the arguments represent binary relations by matching [{A,B}]
against the type of the first argument (Arg1 say), and [{C,D}]
against the type of the second argument (Arg2 say). The fact
@@ -290,33 +314,51 @@
ensure that W is equal to Y. The untyped empty set is handled
separately: its type, ['_'], matches the type of any unordered
set.</p>
- <p>A few functions of this module (<c>drestriction/3</c>,
- <c>family_projection/2</c>, <c>partition/2</c>,
- <c>partition_family/2</c>, <c>projection/2</c>,
- <c>restriction/3</c>, <c>substitution/2</c>) accept an Erlang
+
+ <p>A few functions of this module
+ (<seealso marker="#drestriction/3"><c>drestriction/3</c></seealso>,
+ <seealso marker="#family_projection/2"><c>family_projection/2</c></seealso>,
+ <seealso marker="#partition/2"><c>partition/2</c></seealso>,
+ <seealso marker="#partition_family/2"><c>partition_family/2</c></seealso>,
+ <seealso marker="#projection/2"><c>projection/2</c></seealso>,
+ <seealso marker="#restriction/3"><c>restriction/3</c></seealso>,
+ <seealso marker="#substitution/2"><c>substitution/2</c></seealso>)
+ accept an Erlang
function as a means to modify each element of a given unordered
set. <marker id="set_fun"></marker>Such a function, called
- SetFun in the following, can be
- specified as a functional object (fun), a tuple
- <c>{external,&nbsp;Fun}</c>, or an integer. If SetFun is
- specified as a fun, the fun is applied to each element of the
- given set and the return value is assumed to be a set. If SetFun
- is specified as a tuple <c>{external, Fun}</c>, Fun is applied
- to the external set of each element of the given set and the
- return value is assumed to be an external set. Selecting the
- elements of an unordered set as external sets and assembling a
- new unordered set from a list of external sets is in the present
- implementation more efficient than modifying each element as a
- set. However, this optimization can only be utilized when the
- elements of the unordered set are atomic or ordered sets. It
- must also be the case that the type of the elements matches some
- clause of Fun (the type of the created set is the result of
- applying Fun to the type of the given set), and that Fun does
- nothing but selecting, duplicating or rearranging parts of the
- elements. Specifying a SetFun as an integer I is equivalent to
- specifying <c>{external, fun(X)&nbsp;-> element(I,&nbsp;X)&nbsp;end}</c>,
- but is to be preferred since it makes it possible to handle this
- case even more efficiently. Examples of SetFuns:</p>
+ SetFun in the following, can be specified as a functional object (fun),
+ a tuple <c>{external,&nbsp;Fun}</c>, or an integer:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>If SetFun is specified as a fun, the fun is applied to each element
+ of the given set and the return value is assumed to be a set.</p>
+ </item>
+ <item>
+ <p>If SetFun is specified as a tuple <c>{external, Fun}</c>, Fun is
+ applied to the external set of each element of the given set and the
+ return value is assumed to be an external set. Selecting the
+ elements of an unordered set as external sets and assembling a
+ new unordered set from a list of external sets is in the present
+ implementation more efficient than modifying each element as a
+ set. However, this optimization can only be used when the
+ elements of the unordered set are atomic or ordered sets. It
+ must also be the case that the type of the elements matches some
+ clause of Fun (the type of the created set is the result of
+ applying Fun to the type of the given set), and that Fun does
+ nothing but selecting, duplicating, or rearranging parts of the
+ elements.</p>
+ </item>
+ <item>
+ <p>Specifying a SetFun as an integer I is equivalent to
+ specifying <c>{external, fun(X)&nbsp;->
+ element(I,&nbsp;X)&nbsp;end}</c>, but is to be preferred, as it
+ makes it possible to handle this case even more efficiently.</p>
+ </item>
+ </list>
+
+ <p>Examples of SetFuns:</p>
+
<pre>
fun sofs:union/1
fun(S) -> sofs:partition(1, S) end
@@ -325,22 +367,31 @@ fun(S) -> sofs:partition(1, S) end
{external, fun({_,{_,C}}) -> C end}
{external, fun({_,{_,{_,E}=C}}) -> {E,{E,C}} end}
2</pre>
+
<p>The order in which a SetFun is applied to the elements of an
- unordered set is not specified, and may change in future
- versions of sofs.</p>
+ unordered set is not specified, and can change in future
+ versions of this module.</p>
+
<p>The execution time of the functions of this module is dominated
by the time it takes to sort lists. When no sorting is needed,
the execution time is in the worst case proportional to the sum
of the sizes of the input arguments and the returned value. A
- few functions execute in constant time: <c>from_external</c>,
- <c>is_empty_set</c>, <c>is_set</c>, <c>is_sofs_set</c>,
- <c>to_external</c>, <c>type</c>.</p>
+ few functions execute in constant time:
+ <seealso marker="#from_external/2"><c>from_external/2</c></seealso>,
+ <seealso marker="#is_empty_set/1"><c>is_empty_set/1</c></seealso>,
+ <seealso marker="#is_set/1"><c>is_set/1</c></seealso>,
+ <seealso marker="#is_sofs_set/1"><c>is_sofs_set/1</c></seealso>,
+ <seealso marker="#to_external/1"><c>to_external/1</c></seealso>
+ <seealso marker="#type/1"><c>type/1</c></seealso>.</p>
+
<p>The functions of this module exit the process with a
<c>badarg</c>, <c>bad_function</c>, or <c>type_mismatch</c>
message when given badly formed arguments or sets the types of
which are not compatible.</p>
- <p>When comparing external sets the operator <c>==/2</c> is used.</p>
+
+ <p>When comparing external sets, operator <c>==/2</c> is used.</p>
</description>
+
<datatypes>
<datatype>
<name name="anyset"></name>
@@ -399,10 +450,10 @@ fun(S) -> sofs:partition(1, S) end
<datatype>
<!-- Parameterized opaque types are NYI: -->
<name>tuple_of(T)</name>
- <desc><p><marker id="type-tuple_of"/>
- A tuple where the elements are of type <c>T</c>.</p></desc>
+ <desc><p>A tuple where the elements are of type <c>T</c>.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="a_function" arity="1"/>
@@ -411,24 +462,25 @@ fun(S) -> sofs:partition(1, S) end
<desc>
<p>Creates a <seealso marker="#function">function</seealso>.
<c>a_function(F,&nbsp;T)</c> is equivalent to
- <c>from_term(F,&nbsp;T)</c>, if the result is a function. If
+ <c>from_term(F,&nbsp;T)</c> if the result is a function. If
no <seealso marker="#type">type</seealso> is explicitly
- given, <c>[{atom,&nbsp;atom}]</c> is used as type of the
- function.</p>
+ specified, <c>[{atom,&nbsp;atom}]</c> is used as the
+ function type.</p>
</desc>
</func>
+
<func>
<name name="canonical_relation" arity="1"/>
<fsummary>Return the canonical map.</fsummary>
<desc>
<p>Returns the binary relation containing the elements
- (E,&nbsp;Set) such that Set belongs to <anno>SetOfSets</anno> and E
- belongs to Set. If SetOfSets is
- a <seealso marker="#partition">partition</seealso> of a set X and
- R is the equivalence relation in X induced by SetOfSets, then the
- returned relation is
- the <seealso marker="#canonical_map">canonical map</seealso> from
- X onto the equivalence classes with respect to R.</p>
+ (E,&nbsp;Set) such that Set belongs to <c><anno>SetOfSets</anno></c>
+ and E belongs to Set. If <c>SetOfSets</c> is
+ a <seealso marker="#partition">partition</seealso> of a set X and
+ R is the equivalence relation in X induced by <c>SetOfSets</c>,
+ then the returned relation is
+ the <seealso marker="#canonical_map">canonical map</seealso> from
+ X onto the equivalence classes with respect to R.</p>
<pre>
1> <input>Ss = sofs:from_term([[a,b],[b,c]]),</input>
<input>CR = sofs:canonical_relation(Ss),</input>
@@ -436,13 +488,14 @@ fun(S) -> sofs:partition(1, S) end
[{a,[a,b]},{b,[a,b]},{b,[b,c]},{c,[b,c]}]</pre>
</desc>
</func>
+
<func>
<name name="composite" arity="2"/>
<fsummary>Return the composite of two functions.</fsummary>
<desc>
<p>Returns the <seealso marker="#composite">composite</seealso> of
- the functions <anno>Function1</anno> and
- <anno>Function2</anno>.</p>
+ the functions <c><anno>Function1</anno></c> and
+ <c><anno>Function2</anno></c>.</p>
<pre>
1> <input>F1 = sofs:a_function([{a,1},{b,2},{c,2}]),</input>
<input>F2 = sofs:a_function([{1,x},{2,y},{3,z}]),</input>
@@ -451,13 +504,14 @@ fun(S) -> sofs:partition(1, S) end
[{a,x},{b,y},{c,y}]</pre>
</desc>
</func>
+
<func>
<name name="constant_function" arity="2"/>
- <fsummary>Create the function that maps each element of a
+ <fsummary>Create the function that maps each element of a
set onto another set.</fsummary>
<desc>
<p>Creates the <seealso marker="#function">function</seealso>
- that maps each element of the set Set onto AnySet.</p>
+ that maps each element of set <c>Set</c> onto <c>AnySet</c>.</p>
<pre>
1> <input>S = sofs:set([a,b]),</input>
<input>E = sofs:from_term(1),</input>
@@ -466,12 +520,13 @@ fun(S) -> sofs:partition(1, S) end
[{a,1},{b,1}]</pre>
</desc>
</func>
+
<func>
<name name="converse" arity="1"/>
<fsummary>Return the converse of a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#converse">converse</seealso>
- of the binary relation <anno>BinRel1</anno>.</p>
+ of the binary relation <c><anno>BinRel1</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,a}]),</input>
<input>R2 = sofs:converse(R1),</input>
@@ -479,39 +534,42 @@ fun(S) -> sofs:partition(1, S) end
[{a,1},{a,3},{b,2}]</pre>
</desc>
</func>
+
<func>
<name name="difference" arity="2"/>
<fsummary>Return the difference of two sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#difference">difference</seealso> of
- the sets <anno>Set1</anno> and <anno>Set2</anno>.</p>
+ <p>Returns the <seealso marker="#difference">difference</seealso> of
+ the sets <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="digraph_to_family" arity="1"/>
<name name="digraph_to_family" arity="2"/>
<fsummary>Create a family from a directed graph.</fsummary>
<desc>
<p>Creates a <seealso marker="#family">family</seealso> from
- the directed graph <anno>Graph</anno>. Each vertex a of
- <anno>Graph</anno> is
- represented by a pair (a,&nbsp;{b[1],&nbsp;...,&nbsp;b[n]})
- where the b[i]'s are the out-neighbours of a. If no type is
- explicitly given, [{atom,&nbsp;[atom]}] is used as type of
- the family. It is assumed that <anno>Type</anno> is
- a <seealso marker="#valid_type">valid type</seealso> of the
- external set of the family.</p>
+ the directed graph <c><anno>Graph</anno></c>. Each vertex a of
+ <c><anno>Graph</anno></c> is
+ represented by a pair (a,&nbsp;{b[1],&nbsp;...,&nbsp;b[n]}),
+ where the b[i]:s are the out-neighbors of a. If no type is
+ explicitly specified, [{atom,&nbsp;[atom]}] is used as type of
+ the family. It is assumed that <c><anno>Type</anno></c> is
+ a <seealso marker="#valid_type">valid type</seealso> of the
+ external set of the family.</p>
<p>If G is a directed graph, it holds that the vertices and
edges of G are the same as the vertices and edges of
<c>family_to_digraph(digraph_to_family(G))</c>.</p>
</desc>
</func>
+
<func>
<name name="domain" arity="1"/>
<fsummary>Return the domain of a binary relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#domain">domain</seealso> of
- the binary relation <anno>BinRel</anno>.</p>
+ <p>Returns the <seealso marker="#domain">domain</seealso> of
+ the binary relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{1,b},{2,b},{2,c}]),</input>
<input>S = sofs:domain(R),</input>
@@ -519,14 +577,15 @@ fun(S) -> sofs:partition(1, S) end
[1,2]</pre>
</desc>
</func>
+
<func>
<name name="drestriction" arity="2"/>
<fsummary>Return a restriction of a binary relation.</fsummary>
<desc>
<p>Returns the difference between the binary relation
- <anno>BinRel1</anno>
+ <c><anno>BinRel1</anno></c>
and the <seealso marker="#restriction">restriction</seealso>
- of <anno>BinRel1</anno> to <anno>Set</anno>.</p>
+ of <c><anno>BinRel1</anno></c> to <c><anno>Set</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>S = sofs:set([2,4,6]),</input>
@@ -537,14 +596,15 @@ fun(S) -> sofs:partition(1, S) end
<c>difference(R,&nbsp;restriction(R,&nbsp;S))</c>.</p>
</desc>
</func>
+
<func>
<name name="drestriction" arity="3"/>
<fsummary>Return a restriction of a relation.</fsummary>
<desc>
- <p>Returns a subset of <anno>Set1</anno> containing those elements
- that do
- not yield an element in <anno>Set2</anno> as the result of applying
- <anno>SetFun</anno>.</p>
+ <p>Returns a subset of <c><anno>Set1</anno></c> containing those
+ elements that do not give
+ an element in <c><anno>Set2</anno></c> as the result of applying
+ <c><anno>SetFun</anno></c>.</p>
<pre>
1> <input>SetFun = {external, fun({_A,B,C}) -> {B,C} end},</input>
<input>R1 = sofs:relation([{a,aa,1},{b,bb,2},{c,cc,3}]),</input>
@@ -556,24 +616,27 @@ fun(S) -> sofs:partition(1, S) end
<c>difference(S1,&nbsp;restriction(F,&nbsp;S1,&nbsp;S2))</c>.</p>
</desc>
</func>
+
<func>
<name name="empty_set" arity="0"/>
<fsummary>Return the untyped empty set.</fsummary>
<desc>
- <p>Returns the <seealso marker="#sets_definition">untyped empty
+ <p>Returns the <seealso marker="#sets_definition">untyped empty
set</seealso>. <c>empty_set()</c> is equivalent to
<c>from_term([],&nbsp;['_'])</c>.</p>
</desc>
</func>
+
<func>
<name name="extension" arity="3"/>
<fsummary>Extend the domain of a binary relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#extension">extension</seealso> of
- <anno>BinRel1</anno> such that
- for each element E in <anno>Set</anno> that does not belong to the
- <seealso marker="#domain">domain</seealso> of <anno>BinRel1</anno>,
- <anno>BinRel2</anno> contains the pair (E,&nbsp;AnySet).</p>
+ <p>Returns the <seealso marker="#extension">extension</seealso> of
+ <c><anno>BinRel1</anno></c> such that for
+ each element E in <c><anno>Set</anno></c> that does not belong to the
+ <seealso marker="#domain">domain</seealso> of
+ <c><anno>BinRel1</anno></c>, <c><anno>BinRel2</anno></c> contains the
+ pair (E,&nbsp;<c>AnySet</c>).</p>
<pre>
1> <input>S = sofs:set([b,c]),</input>
<input>A = sofs:empty_set(),</input>
@@ -583,31 +646,33 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2]},{b,[3]},{c,[]}]</pre>
</desc>
</func>
+
<func>
<name name="family" arity="1"/>
<name name="family" arity="2"/>
<fsummary>Create a family of subsets.</fsummary>
<desc>
- <p>Creates a <seealso marker="#family">family of subsets</seealso>.
- <c>family(F,&nbsp;T)</c> is equivalent to
- <c>from_term(F,&nbsp;T)</c>, if the result is a family. If
+ <p>Creates a <seealso marker="#family">family of subsets</seealso>.
+ <c>family(F,&nbsp;T)</c> is equivalent to
+ <c>from_term(F,&nbsp;T)</c> if the result is a family. If
no <seealso marker="#type">type</seealso> is explicitly
- given, <c>[{atom,&nbsp;[atom]}]</c> is used as type of the
- family.</p>
+ specified, <c>[{atom,&nbsp;[atom]}]</c> is used as the
+ family type.</p>
</desc>
</func>
+
<func>
<name name="family_difference" arity="2"/>
<fsummary>Return the difference of two families.</fsummary>
<desc>
- <p>If <anno>Family1</anno> and <anno>Family2</anno>
- are <seealso marker="#family">families</seealso>, then
- <anno>Family3</anno> is the family
+ <p>If <c><anno>Family1</anno></c> and <c><anno>Family2</anno></c>
+ are <seealso marker="#family">families</seealso>, then
+ <c><anno>Family3</anno></c> is the family
such that the index set is equal to the index set of
- <anno>Family1</anno>, and <anno>Family3</anno>[i] is the
- difference between <anno>Family1</anno>[i]
- and <anno>Family2</anno>[i] if <anno>Family2</anno> maps i,
- <anno>Family1</anno>[i] otherwise.</p>
+ <c><anno>Family1</anno></c>, and <c><anno>Family3</anno></c>[i] is
+ the difference between <c><anno>Family1</anno></c>[i]
+ and <c><anno>Family2</anno></c>[i] if <c><anno>Family2</anno></c>
+ maps i, otherwise <c><anno>Family1</anno>[i]</c>.</p>
<pre>
1> <input>F1 = sofs:family([{a,[1,2]},{b,[3,4]}]),</input>
<input>F2 = sofs:family([{b,[4,5]},{c,[6,7]}]),</input>
@@ -616,19 +681,20 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2]},{b,[3]}]</pre>
</desc>
</func>
+
<func>
<name name="family_domain" arity="1"/>
<fsummary>Return a family of domains.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a binary relation for every i
- in the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a binary relation for every i
+ in the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#domain">domain</seealso> of
- <anno>Family1</anno>[i].</p>
+ <c><anno>Family1</anno>[i]</c>.</p>
<pre>
1> <input>FR = sofs:from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),</input>
<input>F = sofs:family_domain(FR),</input>
@@ -636,43 +702,46 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2,3]},{b,[]},{c,[4,5]}]</pre>
</desc>
</func>
+
<func>
<name name="family_field" arity="1"/>
<fsummary>Return a family of fields.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a binary relation for every i
- in the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a binary relation for every i
+ in the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#field">field</seealso> of
- <anno>Family1</anno>[i].</p>
+ <c><anno>Family1</anno></c>[i].</p>
<pre>
1> <input>FR = sofs:from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),</input>
<input>F = sofs:family_field(FR),</input>
<input>sofs:to_external(F).</input>
[{a,[1,2,3,a,b,c]},{b,[]},{c,[4,5,d,e]}]</pre>
<p><c>family_field(Family1)</c> is equivalent to
- <c>family_union(family_domain(Family1), family_range(Family1))</c>.</p>
+ <c>family_union(family_domain(Family1),
+ family_range(Family1))</c>.</p>
</desc>
</func>
+
<func>
<name name="family_intersection" arity="1"/>
<fsummary>Return the intersection of a family
of sets of sets.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a set of sets for every i in
- the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a set of sets for every i in
+ the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#intersection_n">intersection</seealso>
- of <anno>Family1</anno>[i].</p>
- <p>If <anno>Family1</anno>[i] is an empty set for some i, then
+ of <c><anno>Family1</anno></c>[i].</p>
+ <p>If <c><anno>Family1</anno></c>[i] is an empty set for some i,
the process exits with a <c>badarg</c> message.</p>
<pre>
1> <input>F1 = sofs:from_term([{a,[[1,2,3],[2,3,4]]},{b,[[x,y,z],[x,y]]}]),</input>
@@ -681,17 +750,18 @@ fun(S) -> sofs:partition(1, S) end
[{a,[2,3]},{b,[x,y]}]</pre>
</desc>
</func>
+
<func>
<name name="family_intersection" arity="2"/>
<fsummary>Return the intersection of two families.</fsummary>
<desc>
- <p>If <anno>Family1</anno> and <anno>Family2</anno>
- are <seealso marker="#family">families</seealso>,
- then <anno>Family3</anno> is the family such that the index
- set is the intersection of <anno>Family1</anno>'s and
- <anno>Family2</anno>'s index sets,
- and <anno>Family3</anno>[i] is the intersection of
- <anno>Family1</anno>[i] and <anno>Family2</anno>[i].</p>
+ <p>If <c><anno>Family1</anno></c> and <c><anno>Family2</anno></c>
+ are <seealso marker="#family">families</seealso>,
+ then <c><anno>Family3</anno></c> is the family such that the index
+ set is the intersection of <c><anno>Family1</anno></c>:s and
+ <c><anno>Family2</anno></c>:s index sets,
+ and <c><anno>Family3</anno></c>[i] is the intersection of
+ <c><anno>Family1</anno></c>[i] and <c><anno>Family2</anno></c>[i].</p>
<pre>
1> <input>F1 = sofs:family([{a,[1,2]},{b,[3,4]},{c,[5,6]}]),</input>
<input>F2 = sofs:family([{b,[4,5]},{c,[7,8]},{d,[9,10]}]),</input>
@@ -700,17 +770,18 @@ fun(S) -> sofs:partition(1, S) end
[{b,[4]},{c,[]}]</pre>
</desc>
</func>
+
<func>
<name name="family_projection" arity="2"/>
<fsummary>Return a family of modified subsets.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
- a <seealso marker="#family">family</seealso>
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is the result of
- calling <anno>SetFun</anno> with <anno>Family1</anno>[i] as
- argument.</p>
+ <p>If <c><anno>Family1</anno></c> is
+ a <seealso marker="#family">family</seealso>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is the result of
+ calling <c><anno>SetFun</anno></c> with <c><anno>Family1</anno></c>[i]
+ as argument.</p>
<pre>
1> <input>F1 = sofs:from_term([{a,[[1,2],[2,3]]},{b,[[]]}]),</input>
<input>F2 = sofs:family_projection(fun sofs:union/1, F1),</input>
@@ -718,19 +789,20 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2,3]},{b,[]}]</pre>
</desc>
</func>
+
<func>
<name name="family_range" arity="1"/>
<fsummary>Return a family of ranges.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a binary relation for every i
- in the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a binary relation for every i
+ in the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#range">range</seealso> of
- <anno>Family1</anno>[i].</p>
+ <c><anno>Family1</anno></c>[i].</p>
<pre>
1> <input>FR = sofs:from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),</input>
<input>F = sofs:family_range(FR),</input>
@@ -738,22 +810,23 @@ fun(S) -> sofs:partition(1, S) end
[{a,[a,b,c]},{b,[]},{c,[d,e]}]</pre>
</desc>
</func>
+
<func>
<name name="family_specification" arity="2"/>
<fsummary>Select a subset of a family using a predicate.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>,
- then <anno>Family2</anno> is
+ then <c><anno>Family2</anno></c> is
the <seealso marker="#restriction">restriction</seealso> of
- <anno>Family1</anno> to those elements i of the index set
- for which <anno>Fun</anno> applied
- to <anno>Family1</anno>[i] returns
- <c>true</c>. If <anno>Fun</anno> is a
- tuple <c>{external,&nbsp;Fun2}</c>, Fun2 is applied to
+ <c><anno>Family1</anno></c> to those elements i of the index set
+ for which <c><anno>Fun</anno></c> applied
+ to <c><anno>Family1</anno></c>[i] returns
+ <c>true</c>. If <c><anno>Fun</anno></c> is a
+ tuple <c>{external,&nbsp;Fun2}</c>, then <c>Fun2</c> is applied to
the <seealso marker="#external_set">external set</seealso>
- of <anno>Family1</anno>[i], otherwise <anno>Fun</anno> is
- applied to <anno>Family1</anno>[i].</p>
+ of <c><anno>Family1</anno></c>[i], otherwise <c><anno>Fun</anno></c>
+ is applied to <c><anno>Family1</anno></c>[i].</p>
<pre>
1> <input>F1 = sofs:family([{a,[1,2,3]},{b,[1,2]},{c,[1]}]),</input>
<input>SpecFun = fun(S) -> sofs:no_elements(S) =:= 2 end,</input>
@@ -762,23 +835,24 @@ fun(S) -> sofs:partition(1, S) end
[{b,[1,2]}]</pre>
</desc>
</func>
+
<func>
<name name="family_to_digraph" arity="1"/>
<name name="family_to_digraph" arity="2"/>
<fsummary>Create a directed graph from a family.</fsummary>
<desc>
- <p>Creates a directed graph from
- the <seealso marker="#family">family</seealso> <anno>Family</anno>.
+ <p>Creates a directed graph from
+ <seealso marker="#family">family</seealso> <c><anno>Family</anno></c>.
For each pair (a,&nbsp;{b[1],&nbsp;...,&nbsp;b[n]})
- of <anno>Family</anno>, the vertex
- a as well the edges (a,&nbsp;b[i]) for
+ of <c><anno>Family</anno></c>, vertex
+ a and the edges (a,&nbsp;b[i]) for
1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n are added to a newly
created directed graph.</p>
- <p>If no graph type is given <seealso marker="digraph#new/0">
- digraph:new/0</seealso> is used for
- creating the directed graph, otherwise the <anno>GraphType</anno>
- argument is passed on as second argument to
- <seealso marker="digraph#new/1">digraph:new/1</seealso>.</p>
+ <p>If no graph type is specified, <seealso marker="digraph#new/0">
+ <c>digraph:new/0</c></seealso> is used for
+ creating the directed graph, otherwise argument
+ <c><anno>GraphType</anno></c> is passed on as second argument to
+ <seealso marker="digraph#new/1"><c>digraph:new/1</c></seealso>.</p>
<p>It F is a family, it holds that F is a subset of
<c>digraph_to_family(family_to_digraph(F),&nbsp;type(F))</c>.
Equality holds if <c>union_of_family(F)</c> is a subset of
@@ -787,16 +861,17 @@ fun(S) -> sofs:partition(1, S) end
a <c>cyclic</c> message.</p>
</desc>
</func>
+
<func>
<name name="family_to_relation" arity="1"/>
<fsummary>Create a binary relation from a family.</fsummary>
<desc>
- <p>If <anno>Family</anno> is
+ <p>If <c><anno>Family</anno></c> is
a <seealso marker="#family">family</seealso>,
- then <anno>BinRel</anno> is the binary relation containing
+ then <c><anno>BinRel</anno></c> is the binary relation containing
all pairs (i,&nbsp;x) such that i belongs to the index set
- of <anno>Family</anno> and x belongs
- to <anno>Family</anno>[i].</p>
+ of <c><anno>Family</anno></c> and x belongs
+ to <c><anno>Family</anno></c>[i].</p>
<pre>
1> <input>F = sofs:family([{a,[]}, {b,[1]}, {c,[2,3]}]),</input>
<input>R = sofs:family_to_relation(F),</input>
@@ -804,19 +879,20 @@ fun(S) -> sofs:partition(1, S) end
[{b,1},{c,2},{c,3}]</pre>
</desc>
</func>
+
<func>
<name name="family_union" arity="1"/>
<fsummary>Return the union of a family of sets of sets.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a set of sets for each i in
- the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a set of sets for each i in
+ the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#union_n">union</seealso> of
- <anno>Family1</anno>[i].</p>
+ <c><anno>Family1</anno></c>[i].</p>
<pre>
1> <input>F1 = sofs:from_term([{a,[[1,2],[2,3]]},{b,[[]]}]),</input>
<input>F2 = sofs:family_union(F1),</input>
@@ -826,19 +902,20 @@ fun(S) -> sofs:partition(1, S) end
<c>family_projection(fun sofs:union/1,&nbsp;F)</c>.</p>
</desc>
</func>
+
<func>
<name name="family_union" arity="2"/>
<fsummary>Return the union of two families.</fsummary>
<desc>
- <p>If <anno>Family1</anno> and <anno>Family2</anno>
- are <seealso marker="#family">families</seealso>,
- then <anno>Family3</anno> is the family such that the index
- set is the union of <anno>Family1</anno>'s
- and <anno>Family2</anno>'s index sets,
- and <anno>Family3</anno>[i] is the union
- of <anno>Family1</anno>[i] and <anno>Family2</anno>[i] if
- both maps i, <anno>Family1</anno>[i]
- or <anno>Family2</anno>[i] otherwise.</p>
+ <p>If <c><anno>Family1</anno></c> and <c><anno>Family2</anno></c>
+ are <seealso marker="#family">families</seealso>,
+ then <c><anno>Family3</anno></c> is the family such that the index
+ set is the union of <c><anno>Family1</anno></c>:s
+ and <c><anno>Family2</anno></c>:s index sets,
+ and <c><anno>Family3</anno></c>[i] is the union
+ of <c><anno>Family1</anno></c>[i] and <c><anno>Family2</anno></c>[i]
+ if both map i, otherwise <c><anno>Family1</anno></c>[i]
+ or <c><anno>Family2</anno></c>[i].</p>
<pre>
1> <input>F1 = sofs:family([{a,[1,2]},{b,[3,4]},{c,[5,6]}]),</input>
<input>F2 = sofs:family([{b,[4,5]},{c,[7,8]},{d,[9,10]}]),</input>
@@ -847,40 +924,43 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2]},{b,[3,4,5]},{c,[5,6,7,8]},{d,[9,10]}]</pre>
</desc>
</func>
+
<func>
<name name="field" arity="1"/>
<fsummary>Return the field of a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#field">field</seealso> of the
- binary relation <anno>BinRel</anno>.</p>
+ binary relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{1,b},{2,b},{2,c}]),</input>
<input>S = sofs:field(R),</input>
<input>sofs:to_external(S).</input>
[1,2,a,b,c]</pre>
- <p><c>field(R)</c> is equivalent
- to <c>union(domain(R), range(R))</c>.</p>
+ <p><c>field(R)</c> is equivalent
+ to <c>union(domain(R), range(R))</c>.</p>
</desc>
</func>
+
<func>
<name name="from_external" arity="2"/>
<fsummary>Create a set.</fsummary>
<desc>
<p>Creates a set from the <seealso marker="#external_set">external
- set</seealso> <anno>ExternalSet</anno>
- and the <seealso marker="#type">type</seealso> <anno>Type</anno>.
- It is assumed that <anno>Type</anno> is
+ set</seealso> <c><anno>ExternalSet</anno></c> and
+ the <seealso marker="#type">type</seealso> <c><anno>Type</anno></c>.
+ It is assumed that <c><anno>Type</anno></c> is
a <seealso marker="#valid_type">valid
- type</seealso> of <anno>ExternalSet</anno>.</p>
+ type</seealso> of <c><anno>ExternalSet</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="from_sets" arity="1" clause_i="1"/>
<fsummary>Create a set out of a list of sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#sets_definition">unordered
- set</seealso> containing the sets of the list
- <anno>ListOfSets</anno>.</p>
+ <p>Returns the <seealso marker="#sets_definition">unordered
+ set</seealso> containing the sets of list
+ <c><anno>ListOfSets</anno></c>.</p>
<pre>
1> <input>S1 = sofs:relation([{a,1},{b,2}]),</input>
<input>S2 = sofs:relation([{x,3},{y,4}]),</input>
@@ -889,31 +969,33 @@ fun(S) -> sofs:partition(1, S) end
[[{a,1},{b,2}],[{x,3},{y,4}]]</pre>
</desc>
</func>
+
<func>
<name name="from_sets" arity="1" clause_i="2"/>
<fsummary>Create an ordered set out of a tuple of sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#sets_definition">ordered
- set</seealso> containing the sets of the non-empty tuple
- <anno>TupleOfSets</anno>.</p>
+ <p>Returns the <seealso marker="#sets_definition">ordered
+ set</seealso> containing the sets of the non-empty tuple
+ <c><anno>TupleOfSets</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="from_term" arity="1"/>
<name name="from_term" arity="2"/>
<fsummary>Create a set.</fsummary>
<desc>
- <p><marker id="from_term"></marker>Creates an element
- of <seealso marker="#sets_definition">Sets</seealso> by
- traversing the term <anno>Term</anno>, sorting lists,
- removing duplicates and
- deriving or verifying a <seealso marker="#valid_type">valid
- type</seealso> for the so obtained external set. An
- explicitly given <seealso marker="#type">type</seealso>
- <anno>Type</anno>
+ <p><marker id="from_term"></marker>Creates an element
+ of <seealso marker="#sets_definition">Sets</seealso> by
+ traversing term <c><anno>Term</anno></c>, sorting lists,
+ removing duplicates, and
+ deriving or verifying a <seealso marker="#valid_type">valid
+ type</seealso> for the so obtained external set. An
+ explicitly specified <seealso marker="#type">type</seealso>
+ <c><anno>Type</anno></c>
can be used to limit the depth of the traversal; an atomic
- type stops the traversal, as demonstrated by this example
- where "foo" and {"foo"} are left unmodified:</p>
+ type stops the traversal, as shown by the following example
+ where <c>"foo"</c> and <c>{"foo"}</c> are left unmodified:</p>
<pre>
1> <input>S = sofs:from_term([{{"foo"},[1,1]},{"foo",[2,2]}],
[{atom,[atom]}]),</input>
@@ -921,12 +1003,12 @@ fun(S) -> sofs:partition(1, S) end
[{{"foo"},[1]},{"foo",[2]}]</pre>
<p><c>from_term</c> can be used for creating atomic or ordered
sets. The only purpose of such a set is that of later
- building unordered sets since all functions in this module
+ building unordered sets, as all functions in this module
that <em>do</em> anything operate on unordered sets.
Creating unordered sets from a collection of ordered sets
- may be the way to go if the ordered sets are big and one
+ can be the way to go if the ordered sets are big and one
does not want to waste heap by rebuilding the elements of
- the unordered set. An example showing that a set can be
+ the unordered set. The following example shows that a set can be
built "layer by layer":</p>
<pre>
1> <input>A = sofs:from_term(a),</input>
@@ -936,19 +1018,25 @@ fun(S) -> sofs:partition(1, S) end
<input>Ss = sofs:from_sets([P1,P2]),</input>
<input>sofs:to_external(Ss).</input>
[{a,[1,2,3]},{b,[4,5,6]}]</pre>
- <p>Other functions that create sets are <c>from_external/2</c>
- and <c>from_sets/1</c>. Special cases of <c>from_term/2</c>
- are <c>a_function/1,2</c>, <c>empty_set/0</c>,
- <c>family/1,2</c>, <c>relation/1,2</c>, and <c>set/1,2</c>.</p>
+ <p>Other functions that create sets are
+ <seealso marker="#from_external/2"><c>from_external/2</c></seealso>
+ and <seealso marker="#from_sets/1"><c>from_sets/1</c></seealso>.
+ Special cases of <c>from_term/2</c> are
+ <seealso marker="#a_function/1"><c>a_function/1,2</c></seealso>,
+ <seealso marker="#empty_set/0"><c>empty_set/0</c></seealso>,
+ <seealso marker="#family/1"><c>family/1,2</c></seealso>,
+ <seealso marker="#relation/1"><c>relation/1,2</c></seealso>, and
+ <seealso marker="#set/1"><c>set/1,2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="image" arity="2"/>
<fsummary>Return the image of a set under a binary relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#image">image</seealso> of the
- set <anno>Set1</anno> under the binary
- relation <anno>BinRel</anno>.</p>
+ <p>Returns the <seealso marker="#image">image</seealso> of
+ set <c><anno>Set1</anno></c> under the binary
+ relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{2,b},{2,c},{3,d}]),</input>
<input>S1 = sofs:set([1,2]),</input>
@@ -957,32 +1045,35 @@ fun(S) -> sofs:partition(1, S) end
[a,b,c]</pre>
</desc>
</func>
+
<func>
<name name="intersection" arity="1"/>
<fsummary>Return the intersection of a set of sets.</fsummary>
<desc>
- <p>Returns
- the <seealso marker="#intersection_n">intersection</seealso> of
- the set of sets <anno>SetOfSets</anno>.</p>
+ <p>Returns
+ the <seealso marker="#intersection_n">intersection</seealso> of
+ the set of sets <c><anno>SetOfSets</anno></c>.</p>
<p>Intersecting an empty set of sets exits the process with a
<c>badarg</c> message.</p>
</desc>
</func>
+
<func>
<name name="intersection" arity="2"/>
<fsummary>Return the intersection of two sets.</fsummary>
<desc>
- <p>Returns
- the <seealso marker="#intersection">intersection</seealso> of
- <anno>Set1</anno> and <anno>Set2</anno>.</p>
+ <p>Returns
+ the <seealso marker="#intersection">intersection</seealso> of
+ <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="intersection_of_family" arity="1"/>
<fsummary>Return the intersection of a family.</fsummary>
<desc>
- <p>Returns the intersection of
- the <seealso marker="#family">family</seealso> <anno>Family</anno>.
+ <p>Returns the intersection of
+ <seealso marker="#family">family</seealso> <c><anno>Family</anno></c>.
</p>
<p>Intersecting an empty family exits the process with a
<c>badarg</c> message.</p>
@@ -993,12 +1084,13 @@ fun(S) -> sofs:partition(1, S) end
[2]</pre>
</desc>
</func>
+
<func>
<name name="inverse" arity="1"/>
<fsummary>Return the inverse of a function.</fsummary>
<desc>
<p>Returns the <seealso marker="#inverse">inverse</seealso>
- of the function <anno>Function1</anno>.</p>
+ of function <c><anno>Function1</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>R2 = sofs:inverse(R1),</input>
@@ -1006,14 +1098,15 @@ fun(S) -> sofs:partition(1, S) end
[{a,1},{b,2},{c,3}]</pre>
</desc>
</func>
+
<func>
<name name="inverse_image" arity="2"/>
- <fsummary>Return the inverse image of a set under
+ <fsummary>Return the inverse image of a set under
a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#inverse_image">inverse
- image</seealso> of <anno>Set1</anno> under the binary
- relation <anno>BinRel</anno>.</p>
+ image</seealso> of <c><anno>Set1</anno></c> under the binary
+ relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{2,b},{2,c},{3,d}]),</input>
<input>S1 = sofs:set([c,d,e]),</input>
@@ -1022,42 +1115,46 @@ fun(S) -> sofs:partition(1, S) end
[2,3]</pre>
</desc>
</func>
+
<func>
<name name="is_a_function" arity="1"/>
<fsummary>Test for a function.</fsummary>
<desc>
- <p>Returns <c>true</c> if the binary relation <anno>BinRel</anno>
+ <p>Returns <c>true</c> if the binary relation <c><anno>BinRel</anno></c>
is a <seealso marker="#function">function</seealso> or the
- untyped empty set, <c>false</c> otherwise.</p>
+ untyped empty set, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_disjoint" arity="2"/>
<fsummary>Test for disjoint sets.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>Set1</anno>
- and <anno>Set2</anno>
- are <seealso marker="#disjoint">disjoint</seealso>, <c>false</c>
- otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Set1</anno></c>
+ and <c><anno>Set2</anno></c>
+ are <seealso marker="#disjoint">disjoint</seealso>, otherwise
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_empty_set" arity="1"/>
<fsummary>Test for an empty set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>AnySet</anno> is an empty
- unordered set, <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>AnySet</anno></c> is an empty
+ unordered set, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_equal" arity="2"/>
<fsummary>Test two sets for equality.</fsummary>
<desc>
- <p>Returns <c>true</c> if the <anno>AnySet1</anno>
- and <anno>AnySet2</anno>
- are <seealso marker="#equal">equal</seealso>, <c>false</c>
- otherwise. This example shows that <c>==/2</c> is used when
- comparing sets for equality:</p>
+ <p>Returns <c>true</c> if <c><anno>AnySet1</anno></c>
+ and <c><anno>AnySet2</anno></c>
+ are <seealso marker="#equal">equal</seealso>, otherwise
+ <c>false</c>. The following example shows that <c>==/2</c> is
+ used when comparing sets for equality:</p>
<pre>
1> <input>S1 = sofs:set([1.0]),</input>
<input>S2 = sofs:set([1]),</input>
@@ -1065,50 +1162,55 @@ fun(S) -> sofs:partition(1, S) end
true</pre>
</desc>
</func>
+
<func>
<name name="is_set" arity="1"/>
<fsummary>Test for an unordered set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>AnySet</anno> is
- an <seealso marker="#sets_definition">unordered set</seealso>, and
- <c>false</c> if <anno>AnySet</anno> is an ordered set or an
+ <p>Returns <c>true</c> if <c><anno>AnySet</anno></c> is
+ an <seealso marker="#sets_definition">unordered set</seealso>, and
+ <c>false</c> if <c><anno>AnySet</anno></c> is an ordered set or an
atomic set.</p>
</desc>
</func>
+
<func>
<name name="is_sofs_set" arity="1"/>
<fsummary>Test for an unordered set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>Term</anno> is
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is
an <seealso marker="#sets_definition">unordered set</seealso>, an
- ordered set or an atomic set, <c>false</c> otherwise.</p>
+ ordered set, or an atomic set, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_subset" arity="2"/>
<fsummary>Test two sets for subset.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>Set1</anno> is
- a <seealso marker="#subset">subset</seealso>
- of <anno>Set2</anno>, <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Set1</anno></c> is
+ a <seealso marker="#subset">subset</seealso>
+ of <c><anno>Set2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_type" arity="1"/>
<fsummary>Test for a type.</fsummary>
<desc>
- <p>Returns <c>true</c> if the term <anno>Term</anno> is
- a <seealso marker="#type">type</seealso>.</p>
+ <p>Returns <c>true</c> if term <c><anno>Term</anno></c> is
+ a <seealso marker="#type">type</seealso>.</p>
</desc>
</func>
+
<func>
<name name="join" arity="4"/>
<fsummary>Return the join of two relations.</fsummary>
<desc>
- <p>Returns the <seealso marker="#natural_join">natural
- join</seealso> of the relations <anno>Relation1</anno>
- and <anno>Relation2</anno> on coordinates <anno>I</anno> and
- <anno>J</anno>.</p>
+ <p>Returns the <seealso marker="#natural_join">natural
+ join</seealso> of the relations <c><anno>Relation1</anno></c>
+ and <c><anno>Relation2</anno></c> on coordinates <c><anno>I</anno></c>
+ and <c><anno>J</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{a,x,1},{b,y,2}]),</input>
<input>R2 = sofs:relation([{1,f,g},{1,h,i},{2,3,4}]),</input>
@@ -1117,18 +1219,19 @@ true</pre>
[{a,x,1,f,g},{a,x,1,h,i},{b,y,2,3,4}]</pre>
</desc>
</func>
+
<func>
<name name="multiple_relative_product" arity="2"/>
- <fsummary>Return the multiple relative product of a tuple of binary
+ <fsummary>Return the multiple relative product of a tuple of binary
relations and a relation.</fsummary>
<desc>
- <p>If <anno>TupleOfBinRels</anno> is a non-empty tuple
+ <p>If <c><anno>TupleOfBinRels</anno></c> is a non-empty tuple
{R[1],&nbsp;...,&nbsp;R[n]} of binary relations
- and <anno>BinRel1</anno> is a binary relation,
- then <anno>BinRel2</anno> is
- the <seealso marker="#multiple_relative_product">multiple relative
- product</seealso> of the ordered set
- (R[i],&nbsp;...,&nbsp;R[n]) and <anno>BinRel1</anno>.</p>
+ and <c><anno>BinRel1</anno></c> is a binary relation,
+ then <c><anno>BinRel2</anno></c> is
+ the <seealso marker="#multiple_relative_product">multiple relative
+ product</seealso> of the ordered set
+ (R[i],&nbsp;...,&nbsp;R[n]) and <c><anno>BinRel1</anno></c>.</p>
<pre>
1> <input>Ri = sofs:relation([{a,1},{b,2},{c,3}]),</input>
<input>R = sofs:relation([{a,b},{b,c},{c,a}]),</input>
@@ -1137,22 +1240,24 @@ true</pre>
[{1,2},{2,3},{3,1}]</pre>
</desc>
</func>
+
<func>
<name name="no_elements" arity="1"/>
<fsummary>Return the number of elements of a set.</fsummary>
<desc>
<p>Returns the number of elements of the ordered or unordered
- set <anno>ASet</anno>.</p>
+ set <c><anno>ASet</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="partition" arity="1"/>
<fsummary>Return the coarsest partition given a set of sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#partition">partition</seealso> of
- the union of the set of sets <anno>SetOfSets</anno> such that two
- elements are considered equal if they belong to the same
- elements of <anno>SetOfSets</anno>.</p>
+ <p>Returns the <seealso marker="#partition">partition</seealso> of
+ the union of the set of sets <c><anno>SetOfSets</anno></c> such that
+ two elements are considered equal if they belong to the same
+ elements of <c><anno>SetOfSets</anno></c>.</p>
<pre>
1> <input>Sets1 = sofs:from_term([[a,b,c],[d,e,f],[g,h,i]]),</input>
<input>Sets2 = sofs:from_term([[b,c,d],[e,f,g],[h,i,j]]),</input>
@@ -1161,13 +1266,14 @@ true</pre>
[[a],[b,c],[d],[e,f],[g],[h,i],[j]]</pre>
</desc>
</func>
+
<func>
<name name="partition" arity="2"/>
<fsummary>Return a partition of a set.</fsummary>
<desc>
- <p>Returns the <seealso marker="#partition">partition</seealso> of
- <anno>Set</anno> such that two elements are considered equal
- if the results of applying <anno>SetFun</anno> are equal.</p>
+ <p>Returns the <seealso marker="#partition">partition</seealso> of
+ <c><anno>Set</anno></c> such that two elements are considered equal
+ if the results of applying <c><anno>SetFun</anno></c> are equal.</p>
<pre>
1> <input>Ss = sofs:from_term([[a],[b],[c,d],[e,f]]),</input>
<input>SetFun = fun(S) -> sofs:from_term(sofs:no_elements(S)) end,</input>
@@ -1176,17 +1282,18 @@ true</pre>
[[[a],[b]],[[c,d],[e,f]]]</pre>
</desc>
</func>
+
<func>
<name name="partition" arity="3"/>
<fsummary>Return a partition of a set.</fsummary>
<desc>
<p>Returns a pair of sets that, regarded as constituting a
- set, forms a <seealso marker="#partition">partition</seealso> of
- <anno>Set1</anno>. If the
- result of applying <anno>SetFun</anno> to an element
- of <anno>Set1</anno> yields an element in <anno>Set2</anno>,
- the element belongs to <anno>Set3</anno>, otherwise the
- element belongs to <anno>Set4</anno>.</p>
+ set, forms a <seealso marker="#partition">partition</seealso> of
+ <c><anno>Set1</anno></c>. If the
+ result of applying <c><anno>SetFun</anno></c> to an element of
+ <c><anno>Set1</anno></c> gives an element in <c><anno>Set2</anno></c>,
+ the element belongs to <c><anno>Set3</anno></c>, otherwise the
+ element belongs to <c><anno>Set4</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>S = sofs:set([2,4,6]),</input>
@@ -1194,23 +1301,23 @@ true</pre>
<input>{sofs:to_external(R2),sofs:to_external(R3)}.</input>
{[{2,b}],[{1,a},{3,c}]}</pre>
<p><c>partition(F,&nbsp;S1,&nbsp;S2)</c> is equivalent to
- <c>{restriction(F,&nbsp;S1,&nbsp;S2),
+ <c>{restriction(F,&nbsp;S1,&nbsp;S2),
drestriction(F,&nbsp;S1,&nbsp;S2)}</c>.</p>
</desc>
</func>
+
<func>
<name name="partition_family" arity="2"/>
<fsummary>Return a family indexing a partition.</fsummary>
<desc>
- <p>Returns the <seealso marker="#family">family</seealso>
- <anno>Family</anno> where the indexed set is
- a <seealso marker="#partition">partition</seealso>
- of <anno>Set</anno> such that two elements are considered
- equal if the results of applying <anno>SetFun</anno> are the
- same value i. This i is the index that <anno>Family</anno>
- maps onto
- the <seealso marker="#equivalence_class">equivalence
- class</seealso>.</p>
+ <p>Returns <seealso marker="#family">family</seealso>
+ <c><anno>Family</anno></c> where the indexed set is
+ a <seealso marker="#partition">partition</seealso>
+ of <c><anno>Set</anno></c> such that two elements are considered
+ equal if the results of applying <c><anno>SetFun</anno></c> are the
+ same value i. This i is the index that <c><anno>Family</anno></c>
+ maps onto the <seealso marker="#equivalence_class">equivalence
+ class</seealso>.</p>
<pre>
1> <input>S = sofs:relation([{a,a,a,a},{a,a,b,b},{a,b,b,b}]),</input>
<input>SetFun = {external, fun({A,_,C,_}) -> {A,C} end},</input>
@@ -1219,16 +1326,16 @@ true</pre>
[{{a,a},[{a,a,a,a}]},{{a,b},[{a,a,b,b},{a,b,b,b}]}]</pre>
</desc>
</func>
+
<func>
<name name="product" arity="1"/>
<fsummary>Return the Cartesian product of a tuple of sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#Cartesian_product_tuple">Cartesian
- product</seealso> of the non-empty tuple of sets
- <anno>TupleOfSets</anno>. If (x[1],&nbsp;...,&nbsp;x[n]) is
- an element of the n-ary relation <anno>Relation</anno>, then
- x[i] is drawn from element i
- of <anno>TupleOfSets</anno>.</p>
+ <p>Returns the <seealso marker="#Cartesian_product_tuple">Cartesian
+ product</seealso> of the non-empty tuple of sets
+ <c><anno>TupleOfSets</anno></c>. If (x[1],&nbsp;...,&nbsp;x[n]) is
+ an element of the n-ary relation <c><anno>Relation</anno></c>, then
+ x[i] is drawn from element i of <c><anno>TupleOfSets</anno></c>.</p>
<pre>
1> <input>S1 = sofs:set([a,b]),</input>
<input>S2 = sofs:set([1,2]),</input>
@@ -1238,13 +1345,14 @@ true</pre>
[{a,1,x},{a,1,y},{a,2,x},{a,2,y},{b,1,x},{b,1,y},{b,2,x},{b,2,y}]</pre>
</desc>
</func>
+
<func>
<name name="product" arity="2"/>
<fsummary>Return the Cartesian product of two sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#Cartesian_product">Cartesian
- product</seealso> of <anno>Set1</anno>
- and <anno>Set2</anno>.</p>
+ <p>Returns the <seealso marker="#Cartesian_product">Cartesian
+ product</seealso> of <c><anno>Set1</anno></c>
+ and <c><anno>Set2</anno></c>.</p>
<pre>
1> <input>S1 = sofs:set([1,2]),</input>
<input>S2 = sofs:set([a,b]),</input>
@@ -1255,17 +1363,18 @@ true</pre>
<c>product({S1,&nbsp;S2})</c>.</p>
</desc>
</func>
+
<func>
<name name="projection" arity="2"/>
<fsummary>Return a set of substituted elements.</fsummary>
<desc>
<p>Returns the set created by substituting each element of
- <anno>Set1</anno> by the result of
- applying <anno>SetFun</anno> to the element.</p>
- <p>If <anno>SetFun</anno> is a number i&nbsp;&gt;=&nbsp;1 and
- <anno>Set1</anno> is a relation, then the returned set is
+ <c><anno>Set1</anno></c> by the result of
+ applying <c><anno>SetFun</anno></c> to the element.</p>
+ <p>If <c><anno>SetFun</anno></c> is a number i&nbsp;&gt;=&nbsp;1 and
+ <c><anno>Set1</anno></c> is a relation, then the returned set is
the <seealso marker="#projection">projection</seealso> of
- <anno>Set1</anno> onto coordinate i.</p>
+ <c><anno>Set1</anno></c> onto coordinate i.</p>
<pre>
1> <input>S1 = sofs:from_term([{1,a},{2,b},{3,a}]),</input>
<input>S2 = sofs:projection(2, S1),</input>
@@ -1273,12 +1382,13 @@ true</pre>
[a,b]</pre>
</desc>
</func>
+
<func>
<name name="range" arity="1"/>
<fsummary>Return the range of a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#range">range</seealso> of the
- binary relation <anno>BinRel</anno>.</p>
+ binary relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{1,b},{2,b},{2,c}]),</input>
<input>S = sofs:range(R),</input>
@@ -1286,6 +1396,7 @@ true</pre>
[a,b,c]</pre>
</desc>
</func>
+
<func>
<name name="relation" arity="1"/>
<name name="relation" arity="2"/>
@@ -1293,27 +1404,28 @@ true</pre>
<desc>
<p>Creates a <seealso marker="#relation">relation</seealso>.
<c>relation(R,&nbsp;T)</c> is equivalent to
- <c>from_term(R,&nbsp;T)</c>, if T is
- a <seealso marker="#type">type</seealso> and the result is a
- relation. If <anno>Type</anno> is an integer N, then
- <c>[{atom,&nbsp;...,&nbsp;atom}])</c>, where the size of the
- tuple is N, is used as type of the relation. If no type is
- explicitly given, the size of the first tuple of
- <anno>Tuples</anno> is
+ <c>from_term(R,&nbsp;T)</c>, if T is
+ a <seealso marker="#type">type</seealso> and the result is a
+ relation. If <c><anno>Type</anno></c> is an integer N, then
+ <c>[{atom,&nbsp;...,&nbsp;atom}])</c>, where the tuple size
+ is N, is used as type of the relation. If no type is
+ explicitly specified, the size of the first tuple of
+ <c><anno>Tuples</anno></c> is
used if there is such a tuple. <c>relation([])</c> is
equivalent to <c>relation([],&nbsp;2)</c>.</p>
</desc>
</func>
+
<func>
<name name="relation_to_family" arity="1"/>
<fsummary>Create a family from a binary relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#family">family</seealso>
- <anno>Family</anno> such that the index set is equal to
- the <seealso marker="#domain">domain</seealso> of the binary
- relation <anno>BinRel</anno>, and <anno>Family</anno>[i] is
- the <seealso marker="#image">image</seealso> of the set of i
- under <anno>BinRel</anno>.</p>
+ <p>Returns <seealso marker="#family">family</seealso>
+ <c><anno>Family</anno></c> such that the index set is equal to
+ the <seealso marker="#domain">domain</seealso> of the binary
+ relation <c><anno>BinRel</anno></c>, and <c><anno>Family</anno></c>[i]
+ is the <seealso marker="#image">image</seealso> of the set of i
+ under <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{b,1},{c,2},{c,3}]),</input>
<input>F = sofs:relation_to_family(R),</input>
@@ -1321,20 +1433,21 @@ true</pre>
[{b,[1]},{c,[2,3]}]</pre>
</desc>
</func>
+
<func>
<name name="relative_product" arity="1"/>
<name name="relative_product" arity="2" clause_i="1"/>
<fsummary>Return the relative product of a list of binary relations
- and a binary relation.</fsummary>
+ and a binary relation.</fsummary>
<desc>
- <p>If <anno>ListOfBinRels</anno> is a non-empty list
+ <p>If <c><anno>ListOfBinRels</anno></c> is a non-empty list
[R[1],&nbsp;...,&nbsp;R[n]] of binary relations and
- <anno>BinRel1</anno>
- is a binary relation, then <anno>BinRel2</anno> is the <seealso
- marker="#tuple_relative_product">relative product</seealso>
+ <c><anno>BinRel1</anno></c>
+ is a binary relation, then <c><anno>BinRel2</anno></c> is the
+ <seealso marker="#tuple_relative_product">relative product</seealso>
of the ordered set (R[i],&nbsp;...,&nbsp;R[n]) and
- <anno>BinRel1</anno>.</p>
- <p>If <anno>BinRel1</anno> is omitted, the relation of equality
+ <c><anno>BinRel1</anno></c>.</p>
+ <p>If <c><anno>BinRel1</anno></c> is omitted, the relation of equality
between the elements of
the <seealso marker="#Cartesian_product_tuple">Cartesian
product</seealso> of the ranges of R[i],
@@ -1346,33 +1459,33 @@ true</pre>
<input>R2 = sofs:relative_product([TR, R1]),</input>
<input>sofs:to_external(R2).</input>
[{1,{a,u}},{1,{aa,u}},{2,{b,v}}]</pre>
- <p>Note that <c>relative_product([R1],&nbsp;R2)</c> is
+ <p>Notice that <c>relative_product([R1],&nbsp;R2)</c> is
different from <c>relative_product(R1,&nbsp;R2)</c>; the
- list of one element is not identified with the element
- itself.</p>
+ list of one element is not identified with the element itself.</p>
</desc>
</func>
+
<func>
<name name="relative_product" arity="2" clause_i="2"/>
- <fsummary>Return the relative product of
+ <fsummary>Return the relative product of
two binary relations.</fsummary>
<desc>
- <p><marker id="relprod_impl"></marker>Returns
- the <seealso marker="#relative_product">relative
- product</seealso> of the binary relations <anno>BinRel1</anno>
- and <anno>BinRel2</anno>.</p>
+ <p>Returns the <seealso marker="#relative_product">relative
+ product</seealso> of the binary relations <c><anno>BinRel1</anno></c>
+ and <c><anno>BinRel2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="relative_product1" arity="2"/>
- <fsummary>Return the relative_product of
+ <fsummary>Return the relative_product of
two binary relations.</fsummary>
<desc>
- <p>Returns the <seealso marker="#relative_product">relative
- product</seealso> of
- the <seealso marker="#converse">converse</seealso> of the
- binary relation <anno>BinRel1</anno> and the binary
- relation <anno>BinRel2</anno>.</p>
+ <p>Returns the <seealso marker="#relative_product">relative
+ product</seealso> of
+ the <seealso marker="#converse">converse</seealso> of the
+ binary relation <c><anno>BinRel1</anno></c> and the binary
+ relation <c><anno>BinRel2</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{1,aa},{2,b}]),</input>
<input>R2 = sofs:relation([{1,u},{2,v},{3,c}]),</input>
@@ -1383,13 +1496,14 @@ true</pre>
<c>relative_product(converse(R1),&nbsp;R2)</c>.</p>
</desc>
</func>
+
<func>
<name name="restriction" arity="2"/>
<fsummary>Return a restriction of a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#restriction">restriction</seealso> of
- the binary relation <anno>BinRel1</anno>
- to <anno>Set</anno>.</p>
+ the binary relation <c><anno>BinRel1</anno></c>
+ to <c><anno>Set</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>S = sofs:set([1,2,4]),</input>
@@ -1398,13 +1512,14 @@ true</pre>
[{1,a},{2,b}]</pre>
</desc>
</func>
+
<func>
<name name="restriction" arity="3"/>
<fsummary>Return a restriction of a set.</fsummary>
<desc>
- <p>Returns a subset of <anno>Set1</anno> containing those
- elements that yield an element in <anno>Set2</anno> as the
- result of applying <anno>SetFun</anno>.</p>
+ <p>Returns a subset of <c><anno>Set1</anno></c> containing those
+ elements that gives an element in <c><anno>Set2</anno></c> as the
+ result of applying <c><anno>SetFun</anno></c>.</p>
<pre>
1> <input>S1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>S2 = sofs:set([b,c,d]),</input>
@@ -1413,28 +1528,30 @@ true</pre>
[{2,b},{3,c}]</pre>
</desc>
</func>
+
<func>
<name name="set" arity="1"/>
<name name="set" arity="2"/>
<fsummary>Create a set of atoms or any type of sets.</fsummary>
<desc>
- <p>Creates an <seealso marker="#sets_definition">unordered
- set</seealso>. <c>set(L,&nbsp;T)</c> is equivalent to
+ <p>Creates an <seealso marker="#sets_definition">unordered
+ set</seealso>. <c>set(L,&nbsp;T)</c> is equivalent to
<c>from_term(L,&nbsp;T)</c>, if the result is an unordered
set. If no <seealso marker="#type">type</seealso> is
- explicitly given, <c>[atom]</c> is used as type of the set.</p>
+ explicitly specified, <c>[atom]</c> is used as the set type.</p>
</desc>
</func>
+
<func>
<name name="specification" arity="2"/>
<fsummary>Select a subset using a predicate.</fsummary>
<desc>
<p>Returns the set containing every element
- of <anno>Set1</anno> for which <anno>Fun</anno>
- returns <c>true</c>. If <anno>Fun</anno> is a tuple
- <c>{external,&nbsp;Fun2}</c>, Fun2 is applied to the
+ of <c><anno>Set1</anno></c> for which <c><anno>Fun</anno></c>
+ returns <c>true</c>. If <c><anno>Fun</anno></c> is a tuple
+ <c>{external,&nbsp;Fun2}</c>, <c>Fun2</c> is applied to the
<seealso marker="#external_set">external set</seealso> of
- each element, otherwise <anno>Fun</anno> is applied to each
+ each element, otherwise <c><anno>Fun</anno></c> is applied to each
element.</p>
<pre>
1> <input>R1 = sofs:relation([{a,1},{b,2}]),</input>
@@ -1445,14 +1562,15 @@ true</pre>
[[{a,1},{b,2}]]</pre>
</desc>
</func>
+
<func>
<name name="strict_relation" arity="1"/>
- <fsummary>Return the strict relation corresponding to
+ <fsummary>Return the strict relation corresponding to
a given relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#strict_relation">strict
+ <p>Returns the <seealso marker="#strict_relation">strict
relation</seealso> corresponding to the binary
- relation <anno>BinRel1</anno>.</p>
+ relation <c><anno>BinRel1</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,1},{1,2},{2,1},{2,2}]),</input>
<input>R2 = sofs:strict_relation(R1),</input>
@@ -1460,13 +1578,14 @@ true</pre>
[{1,2},{2,1}]</pre>
</desc>
</func>
+
<func>
<name name="substitution" arity="2"/>
<fsummary>Return a function with a given set as domain.</fsummary>
<desc>
<p>Returns a function, the domain of which
- is <anno>Set1</anno>. The value of an element of the domain
- is the result of applying <anno>SetFun</anno> to the
+ is <c><anno>Set1</anno></c>. The value of an element of the domain
+ is the result of applying <c><anno>SetFun</anno></c> to the
element.</p>
<pre>
1> <input>L = [{a,1},{b,2}].</input>
@@ -1483,24 +1602,24 @@ true</pre>
1> <input>I = sofs:substitution(fun(A) -> A end, sofs:set([a,b,c])),</input>
<input>sofs:to_external(I).</input>
[{a,a},{b,b},{c,c}]</pre>
- <p>Let SetOfSets be a set of sets and BinRel a binary
- relation. The function that maps each element Set of
- SetOfSets onto the <seealso marker="#image">image</seealso>
- of Set under BinRel is returned by this function:</p>
+ <p>Let <c>SetOfSets</c> be a set of sets and <c>BinRel</c> a binary
+ relation. The function that maps each element <c>Set</c> of
+ <c>SetOfSets</c> onto the <seealso marker="#image">image</seealso>
+ of <c>Set</c> under <c>BinRel</c> is returned by the following
+ function:</p>
<pre>
images(SetOfSets, BinRel) ->
Fun = fun(Set) -> sofs:image(BinRel, Set) end,
sofs:substitution(Fun, SetOfSets).</pre>
- <p>Here might be the place to reveal something that was more
- or less stated before, namely that external unordered sets
- are represented as sorted lists. As a consequence, creating
- the image of a set under a relation R may traverse all
+ <p>External unordered sets are represented as sorted lists. So,
+ creating the image of a set under a relation R can traverse all
elements of R (to that comes the sorting of results, the
- image). In <c>images/2</c>, BinRel will be traversed once
- for each element of SetOfSets, which may take too long. The
- following efficient function could be used instead under the
- assumption that the image of each element of SetOfSets under
- BinRel is non-empty:</p>
+ image). In <seealso marker="#image/2"><c>image/2</c></seealso>,
+ <c>BinRel</c> is traversed once
+ for each element of <c>SetOfSets</c>, which can take too long. The
+ following efficient function can be used instead under the
+ assumption that the image of each element of <c>SetOfSets</c> under
+ <c>BinRel</c> is non-empty:</p>
<pre>
images2(SetOfSets, BinRel) ->
CR = sofs:canonical_relation(SetOfSets),
@@ -1508,13 +1627,14 @@ images2(SetOfSets, BinRel) ->
sofs:relation_to_family(R).</pre>
</desc>
</func>
+
<func>
<name name="symdiff" arity="2"/>
<fsummary>Return the symmetric difference of two sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#symmetric_difference">symmetric
+ <p>Returns the <seealso marker="#symmetric_difference">symmetric
difference</seealso> (or the Boolean sum)
- of <anno>Set1</anno> and <anno>Set2</anno>.</p>
+ of <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
<pre>
1> <input>S1 = sofs:set([1,2,3]),</input>
<input>S2 = sofs:set([2,3,4]),</input>
@@ -1523,68 +1643,81 @@ images2(SetOfSets, BinRel) ->
[1,4]</pre>
</desc>
</func>
+
<func>
<name name="symmetric_partition" arity="2"/>
<fsummary>Return a partition of two sets.</fsummary>
<desc>
- <p>Returns a triple of sets: <anno>Set3</anno> contains the
- elements of <anno>Set1</anno> that do not belong
- to <anno>Set2</anno>; <anno>Set4</anno> contains the
- elements of <anno>Set1</anno> that belong
- to <anno>Set2</anno>; <anno>Set5</anno> contains the
- elements of <anno>Set2</anno> that do not belong
- to <anno>Set1</anno>.</p>
+ <p>Returns a triple of sets:</p>
+ <list type="bulleted">
+ <item><c><anno>Set3</anno></c> contains the elements of
+ <c><anno>Set1</anno></c> that do not belong to
+ <c><anno>Set2</anno></c>.
+ </item>
+ <item><c><anno>Set4</anno></c> contains the elements of
+ <c><anno>Set1</anno></c> that belong to <c><anno>Set2</anno></c>.
+ </item>
+ <item><c><anno>Set5</anno></c> contains the elements of
+ <c><anno>Set2</anno></c> that do not belong to
+ <c><anno>Set1</anno></c>.
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name name="to_external" arity="1"/>
<fsummary>Return the elements of a set.</fsummary>
<desc>
- <p>Returns the <seealso marker="#external_set">external
- set</seealso> of an atomic, ordered or unordered set.</p>
+ <p>Returns the <seealso marker="#external_set">external
+ set</seealso> of an atomic, ordered, or unordered set.</p>
</desc>
</func>
+
<func>
<name name="to_sets" arity="1"/>
- <fsummary>Return a list or a tuple of the elements of set.</fsummary>
+ <fsummary>Return a list or a tuple of the elements of a set.</fsummary>
<desc>
- <p>Returns the elements of the ordered set <anno>ASet</anno>
+ <p>Returns the elements of the ordered set <c><anno>ASet</anno></c>
as a tuple of sets, and the elements of the unordered set
- <anno>ASet</anno> as a sorted list of sets without
+ <c><anno>ASet</anno></c> as a sorted list of sets without
duplicates.</p>
</desc>
</func>
+
<func>
<name name="type" arity="1"/>
<fsummary>Return the type of a set.</fsummary>
<desc>
<p>Returns the <seealso marker="#type">type</seealso> of an
- atomic, ordered or unordered set.</p>
+ atomic, ordered, or unordered set.</p>
</desc>
</func>
+
<func>
<name name="union" arity="1"/>
<fsummary>Return the union of a set of sets.</fsummary>
<desc>
<p>Returns the <seealso marker="#union_n">union</seealso> of the
- set of sets <anno>SetOfSets</anno>.</p>
+ set of sets <c><anno>SetOfSets</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="union" arity="2"/>
<fsummary>Return the union of two sets.</fsummary>
<desc>
<p>Returns the <seealso marker="#union">union</seealso> of
- <anno>Set1</anno> and <anno>Set2</anno>.</p>
+ <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="union_of_family" arity="1"/>
<fsummary>Return the union of a family.</fsummary>
<desc>
- <p>Returns the union of
- the <seealso marker="#family">family</seealso> <anno>Family</anno>.
- </p>
+ <p>Returns the union of <seealso marker="#family">family</seealso>
+ <c><anno>Family</anno></c>.</p>
<pre>
1> <input>F = sofs:family([{a,[0,2,4]},{b,[0,1,2]},{c,[2,3]}]),</input>
<input>S = sofs:union_of_family(F),</input>
@@ -1592,16 +1725,17 @@ images2(SetOfSets, BinRel) ->
[0,1,2,3,4]</pre>
</desc>
</func>
+
<func>
<name name="weak_relation" arity="1"/>
- <fsummary>Return the weak relation corresponding to
+ <fsummary>Return the weak relation corresponding to
a given relation.</fsummary>
<desc>
<p>Returns a subset S of the <seealso marker="#weak_relation">weak
relation</seealso> W
- corresponding to the binary relation <anno>BinRel1</anno>.
+ corresponding to the binary relation <c><anno>BinRel1</anno></c>.
Let F be the <seealso marker="#field">field</seealso> of
- <anno>BinRel1</anno>. The
+ <c><anno>BinRel1</anno></c>. The
subset S is defined so that x S y if x W y for some x in F
and for some y in F.</p>
<pre>
@@ -1615,11 +1749,11 @@ images2(SetOfSets, BinRel) ->
<section>
<title>See Also</title>
- <p><seealso marker="dict">dict(3)</seealso>,
- <seealso marker="digraph">digraph(3)</seealso>,
- <seealso marker="orddict">orddict(3)</seealso>,
- <seealso marker="ordsets">ordsets(3)</seealso>,
- <seealso marker="sets">sets(3)</seealso></p>
+ <p><seealso marker="dict"><c>dict(3)</c></seealso>,
+ <seealso marker="digraph"><c>digraph(3)</c></seealso>,
+ <seealso marker="orddict"><c>orddict(3)</c></seealso>,
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso>,
+ <seealso marker="sets"><c>sets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/specs.xml b/lib/stdlib/doc/src/specs.xml
index 0418bf7b22..45b207b13d 100644
--- a/lib/stdlib/doc/src/specs.xml
+++ b/lib/stdlib/doc/src/specs.xml
@@ -30,6 +30,7 @@
<xi:include href="../specs/specs_gen_event.xml"/>
<xi:include href="../specs/specs_gen_fsm.xml"/>
<xi:include href="../specs/specs_gen_server.xml"/>
+ <xi:include href="../specs/specs_gen_statem.xml"/>
<xi:include href="../specs/specs_io.xml"/>
<xi:include href="../specs/specs_io_lib.xml"/>
<xi:include href="../specs/specs_lib.xml"/>
diff --git a/lib/stdlib/doc/src/stdlib_app.xml b/lib/stdlib/doc/src/stdlib_app.xml
index 43bcad9098..cde73269a8 100644
--- a/lib/stdlib/doc/src/stdlib_app.xml
+++ b/lib/stdlib/doc/src/stdlib_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>2005</year><year>2013</year>
+ <year>2005</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,38 +29,38 @@
<rev></rev>
</header>
<app>STDLIB</app>
- <appsummary>The STDLIB Application</appsummary>
+ <appsummary>The STDLIB application.</appsummary>
<description>
- <p>The STDLIB is mandatory in the sense that the minimal system
- based on Erlang/OTP consists of Kernel and STDLIB. The STDLIB
- application contains no services.</p>
+ <p>The <c>STDLIB</c> application is mandatory in the sense that the minimal
+ system based on Erlang/OTP consists of <c>Kernel</c> and <c>STDLIB</c>.
+ The <c>STDLIB</c> application contains no services.</p>
</description>
<section>
<title>Configuration</title>
- <p>The following configuration parameters are defined for the STDLIB
- application. See <c>app(4)</c> for more information about
- configuration parameters.</p>
+ <p>The following configuration parameters are defined for the <c>STDLIB</c>
+ application. For more information about configuration parameters, see the
+ <seealso marker="kernel:app"><c>app(4)</c></seealso> module in Kernel.</p>
+
<taglist>
<tag><c>shell_esc = icl | abort</c></tag>
<item>
- <p>This parameter can be used to alter the behaviour of
- the Erlang shell when ^G is pressed.</p>
+ <p>Can be used to change the behavior of the Erlang shell when
+ <em>^G</em> is pressed.</p>
</item>
<tag><c>restricted_shell = module()</c></tag>
<item>
- <p>This parameter can be used to run the Erlang shell
- in restricted mode.</p>
+ <p>Can be used to run the Erlang shell in restricted mode.</p>
</item>
<tag><c>shell_catch_exception = boolean()</c></tag>
<item>
- <p>This parameter can be used to set the exception handling
- of the Erlang shell's evaluator process.</p>
+ <p>Can be used to set the exception handling of the evaluator process of
+ Erlang shell.</p>
</item>
<tag><c>shell_history_length = integer() >= 0</c></tag>
<item>
- <p>This parameter can be used to determine how many
- commands are saved by the Erlang shell.</p>
+ <p>Can be used to determine how many commands are saved by the Erlang
+ shell.</p>
</item>
<tag><c>shell_prompt_func = {Mod, Func} | default</c></tag>
<item>
@@ -69,27 +69,26 @@
<item><c>Mod = atom()</c></item>
<item><c>Func = atom()</c></item>
</list>
- <p>This parameter can be used to set a customized
- Erlang shell prompt function.</p>
+ <p>Can be used to set a customized Erlang shell prompt function.</p>
</item>
<tag><c>shell_saved_results = integer() >= 0</c></tag>
<item>
- <p>This parameter can be used to determine how many
- results are saved by the Erlang shell.</p>
+ <p>Can be used to determine how many results are saved by the Erlang
+ shell.</p>
</item>
<tag><c>shell_strings = boolean()</c></tag>
<item>
- <p>This parameter can be used to determine how the Erlang
- shell outputs lists of integers.</p>
+ <p>Can be used to determine how the Erlang shell outputs lists of
+ integers.</p>
</item>
</taglist>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="kernel:app">app(4)</seealso>,
- <seealso marker="kernel:application">application(3)</seealso>,
- <seealso marker="shell">shell(3)</seealso>, </p>
+ <p><seealso marker="kernel:app"><c>app(4)</c></seealso>,
+ <seealso marker="kernel:application"><c>application(3)</c></seealso>,
+ <seealso marker="shell">shell(3)</seealso></p>
</section>
</appref>
diff --git a/lib/stdlib/doc/src/string.xml b/lib/stdlib/doc/src/string.xml
index d64db6c7ee..dddedf1132 100644
--- a/lib/stdlib/doc/src/string.xml
+++ b/lib/stdlib/doc/src/string.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,306 +24,372 @@
<title>string</title>
<prepared>Robert Virding</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>96-09-28</date>
+ <date>1996-09-28</date>
<rev>A</rev>
- <file>string.sgml</file>
+ <file>string.xml</file>
</header>
<module>string</module>
- <modulesummary>String Processing Functions</modulesummary>
+ <modulesummary>String processing functions.</modulesummary>
<description>
- <p>This module contains functions for string processing.</p>
+ <p>This module provides functions for string processing.</p>
</description>
+
<funcs>
<func>
- <name name="len" arity="1"/>
- <fsummary>Return the length of a string</fsummary>
+ <name name="centre" arity="2"/>
+ <name name="centre" arity="3"/>
+ <fsummary>Center a string.</fsummary>
<desc>
- <p>Returns the number of characters in the string.</p>
+ <p>Returns a string, where <c><anno>String</anno></c> is centered in the
+ string and surrounded by blanks or <c><anno>Character</anno></c>.
+ The resulting string has length <c><anno>Number</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="equal" arity="2"/>
- <fsummary>Test string equality</fsummary>
+ <name name="chars" arity="2"/>
+ <name name="chars" arity="3"/>
+ <fsummary>Returns a string consisting of numbers of characters.</fsummary>
<desc>
- <p>Tests whether two strings are equal. Returns <c>true</c> if
- they are, otherwise <c>false</c>.</p>
+ <p>Returns a string consisting of <c><anno>Number</anno></c> characters
+ <c><anno>Character</anno></c>. Optionally, the string can end with
+ string <c><anno>Tail</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="concat" arity="2"/>
- <fsummary>Concatenate two strings</fsummary>
+ <name name="chr" arity="2"/>
+ <fsummary>Return the index of the first occurrence of
+ a character in a string.</fsummary>
<desc>
- <p>Concatenates two strings to form a new string. Returns the
- new string.</p>
+ <p>Returns the index of the first occurrence of
+ <c><anno>Character</anno></c> in <c><anno>String</anno></c>. Returns
+ <c>0</c> if <c><anno>Character</anno></c> does not occur.</p>
</desc>
</func>
+
<func>
- <name name="chr" arity="2"/>
- <name name="rchr" arity="2"/>
- <fsummary>Return the index of the first/last occurrence of<c>Character</c>in <c>String</c></fsummary>
+ <name name="concat" arity="2"/>
+ <fsummary>Concatenate two strings.</fsummary>
<desc>
- <p>Returns the index of the first/last occurrence of
- <c><anno>Character</anno></c> in <c><anno>String</anno></c>. <c>0</c> is returned if <c><anno>Character</anno></c> does not
- occur.</p>
+ <p>Concatenates <c><anno>String1</anno></c> and
+ <c><anno>String2</anno></c> to form a new string
+ <c><anno>String3</anno></c>, which is returned.</p>
</desc>
</func>
+
<func>
- <name name="str" arity="2"/>
- <name name="rstr" arity="2"/>
- <fsummary>Find the index of a substring</fsummary>
+ <name name="copies" arity="2"/>
+ <fsummary>Copy a string.</fsummary>
<desc>
- <p>Returns the position where the first/last occurrence of
- <c><anno>SubString</anno></c> begins in <c><anno>String</anno></c>. <c>0</c> is returned if <c><anno>SubString</anno></c>
- does not exist in <c><anno>String</anno></c>.
- For example:</p>
- <code type="none">
-> string:str(" Hello Hello World World ", "Hello World").
-8 </code>
+ <p>Returns a string containing <c><anno>String</anno></c> repeated
+ <c><anno>Number</anno></c> times.</p>
</desc>
</func>
+
<func>
- <name name="span" arity="2"/>
<name name="cspan" arity="2"/>
- <fsummary>Span characters at start of string</fsummary>
+ <fsummary>Span characters at start of a string.</fsummary>
<desc>
<p>Returns the length of the maximum initial segment of
- <c><anno>String</anno></c>, which consists entirely of characters from (not
- from) <c><anno>Chars</anno></c>.</p>
- <p>For example:</p>
+ <c><anno>String</anno></c>, which consists entirely of characters
+ not from <c><anno>Chars</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> string:span("\t abcdef", " \t").
-5
> string:cspan("\t abcdef", " \t").
-0 </code>
+0</code>
</desc>
</func>
+
<func>
- <name name="substr" arity="2"/>
- <name name="substr" arity="3"/>
- <fsummary>Return a substring of <c>String</c></fsummary>
+ <name name="equal" arity="2"/>
+ <fsummary>Test string equality.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c><anno>String1</anno></c> and
+ <c><anno>String2</anno></c> are equal, otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="join" arity="2"/>
+ <fsummary>Join a list of strings with separator.</fsummary>
<desc>
- <p>Returns a substring of <c><anno>String</anno></c>, starting at the
- position <c><anno>Start</anno></c>, and ending at the end of the string or
- at length <c><anno>Length</anno></c>.</p>
- <p>For example:</p>
+ <p>Returns a string with the elements of <c><anno>StringList</anno></c>
+ separated by the string in <c><anno>Separator</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> substr("Hello World", 4, 5).
-"lo Wo" </code>
+> join(["one", "two", "three"], ", ").
+"one, two, three"</code>
</desc>
</func>
+
<func>
- <name name="tokens" arity="2"/>
- <fsummary>Split string into tokens</fsummary>
+ <name name="left" arity="2"/>
+ <name name="left" arity="3"/>
+ <fsummary>Adjust left end of a string.</fsummary>
<desc>
- <p>Returns a list of tokens in <c><anno>String</anno></c>, separated by the
- characters in <c><anno>SeparatorList</anno></c>.</p>
- <p>For example:</p>
+ <p>Returns <c><anno>String</anno></c> with the length adjusted in
+ accordance with <c><anno>Number</anno></c>. The left margin is
+ fixed. If <c>length(<anno>String</anno>)</c> &lt;
+ <c><anno>Number</anno></c>, then <c><anno>String</anno></c> is padded
+ with blanks or <c><anno>Character</anno></c>s.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> tokens("abc defxxghix jkl", "x ").
-["abc", "def", "ghi", "jkl"] </code>
- <p>Note that, as shown in the example above, two or more
- adjacent separator characters in <c><anno>String</anno></c>
- will be treated as one. That is, there will not be any empty
- strings in the resulting list of tokens.</p>
+> string:left("Hello",10,$.).
+"Hello....."</code>
</desc>
</func>
+
<func>
- <name name="join" arity="2"/>
- <fsummary>Join a list of strings with separator</fsummary>
+ <name name="len" arity="1"/>
+ <fsummary>Return the length of a string.</fsummary>
<desc>
- <p>Returns a string with the elements of <c><anno>StringList</anno></c>
- separated by the string in <c><anno>Separator</anno></c>.</p>
- <p>For example:</p>
- <code type="none">
-> join(["one", "two", "three"], ", ").
-"one, two, three" </code>
+ <p>Returns the number of characters in <c><anno>String</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="chars" arity="2"/>
- <name name="chars" arity="3"/>
- <fsummary>Returns a string consisting of numbers of characters</fsummary>
+ <name name="rchr" arity="2"/>
+ <fsummary>Return the index of the last occurrence of
+ a character in a string.</fsummary>
<desc>
- <p>Returns a string consisting of <c><anno>Number</anno></c> of characters
- <c><anno>Character</anno></c>. Optionally, the string can end with the
- string <c><anno>Tail</anno></c>.</p>
+ <p>Returns the index of the last occurrence of
+ <c><anno>Character</anno></c> in <c><anno>String</anno></c>. Returns
+ <c>0</c> if <c><anno>Character</anno></c> does not occur.</p>
</desc>
</func>
+
<func>
- <name name="copies" arity="2"/>
- <fsummary>Copy a string</fsummary>
+ <name name="right" arity="2"/>
+ <name name="right" arity="3"/>
+ <fsummary>Adjust right end of a string.</fsummary>
<desc>
- <p>Returns a string containing <c><anno>String</anno></c> repeated
- <c><anno>Number</anno></c> times.</p>
+ <p>Returns <c><anno>String</anno></c> with the length adjusted in
+ accordance with <c><anno>Number</anno></c>. The right margin is
+ fixed. If the length of <c>(<anno>String</anno>)</c> &lt;
+ <c><anno>Number</anno></c>, then <c><anno>String</anno></c> is padded
+ with blanks or <c><anno>Character</anno></c>s.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> string:right("Hello", 10, $.).
+".....Hello"</code>
</desc>
</func>
+
<func>
- <name name="words" arity="1"/>
- <name name="words" arity="2"/>
- <fsummary>Count blank separated words</fsummary>
+ <name name="rstr" arity="2"/>
+ <fsummary>Find the index of a substring.</fsummary>
<desc>
- <p>Returns the number of words in <c><anno>String</anno></c>, separated by
- blanks or <c><anno>Character</anno></c>.</p>
- <p>For example:</p>
+ <p>Returns the position where the last occurrence of
+ <c><anno>SubString</anno></c> begins in <c><anno>String</anno></c>.
+ Returns <c>0</c> if <c><anno>SubString</anno></c>
+ does not exist in <c><anno>String</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> words(" Hello old boy!", $o).
-4 </code>
+> string:rstr(" Hello Hello World World ", "Hello World").
+8</code>
</desc>
</func>
+
<func>
- <name name="sub_word" arity="2"/>
- <name name="sub_word" arity="3"/>
- <fsummary>Extract subword</fsummary>
+ <name name="span" arity="2"/>
+ <fsummary>Span characters at start of a string.</fsummary>
<desc>
- <p>Returns the word in position <c><anno>Number</anno></c> of <c><anno>String</anno></c>.
- Words are separated by blanks or <c><anno>Character</anno></c>s.</p>
- <p>For example:</p>
+ <p>Returns the length of the maximum initial segment of
+ <c><anno>String</anno></c>, which consists entirely of characters
+ from <c><anno>Chars</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> string:sub_word(" Hello old boy !",3,$o).
-"ld b" </code>
+> string:span("\t abcdef", " \t").
+5</code>
</desc>
</func>
+
+ <func>
+ <name name="str" arity="2"/>
+ <fsummary>Find the index of a substring.</fsummary>
+ <desc>
+ <p>Returns the position where the first occurrence of
+ <c><anno>SubString</anno></c> begins in <c><anno>String</anno></c>.
+ Returns <c>0</c> if <c><anno>SubString</anno></c>
+ does not exist in <c><anno>String</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> string:str(" Hello Hello World World ", "Hello World").
+8</code>
+ </desc>
+ </func>
+
<func>
<name name="strip" arity="1"/>
<name name="strip" arity="2"/>
<name name="strip" arity="3"/>
- <fsummary>Strip leading or trailing characters</fsummary>
+ <fsummary>Strip leading or trailing characters.</fsummary>
<desc>
<p>Returns a string, where leading and/or trailing blanks or a
number of <c><anno>Character</anno></c> have been removed.
- <c><anno>Direction</anno></c> can be <c>left</c>, <c>right</c>, or
- <c>both</c> and indicates from which direction blanks are to be
- removed. The function <c>strip/1</c> is equivalent to
+ <c><anno>Direction</anno></c>, which can be <c>left</c>, <c>right</c>,
+ or <c>both</c>, indicates from which direction blanks are to be
+ removed. <c>strip/1</c> is equivalent to
<c>strip(String, both)</c>.</p>
- <p>For example:</p>
+ <p><em>Example:</em></p>
<code type="none">
> string:strip("...Hello.....", both, $.).
-"Hello" </code>
+"Hello"</code>
</desc>
</func>
+
<func>
- <name name="left" arity="2"/>
- <name name="left" arity="3"/>
- <fsummary>Adjust left end of string</fsummary>
+ <name name="sub_string" arity="2"/>
+ <name name="sub_string" arity="3"/>
+ <fsummary>Extract a substring.</fsummary>
<desc>
- <p>Returns the <c><anno>String</anno></c> with the length adjusted in
- accordance with <c><anno>Number</anno></c>. The left margin is
- fixed. If the <c>length(<anno>String</anno>)</c> &lt; <c><anno>Number</anno></c>,
- <c><anno>String</anno></c> is padded with blanks or <c><anno>Character</anno></c>s.</p>
- <p>For example:</p>
+ <p>Returns a substring of <c><anno>String</anno></c>, starting at
+ position <c><anno>Start</anno></c> to the end of the string, or to
+ and including position <c><anno>Stop</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> string:left("Hello",10,$.).
-"Hello....." </code>
+sub_string("Hello World", 4, 8).
+"lo Wo"</code>
</desc>
</func>
+
<func>
- <name name="right" arity="2"/>
- <name name="right" arity="3"/>
- <fsummary>Adjust right end of string</fsummary>
+ <name name="substr" arity="2"/>
+ <name name="substr" arity="3"/>
+ <fsummary>Return a substring of a string.</fsummary>
<desc>
- <p>Returns the <c><anno>String</anno></c> with the length adjusted in
- accordance with <c><anno>Number</anno></c>. The right margin is
- fixed. If the length of <c>(<anno>String</anno>)</c> &lt; <c><anno>Number</anno></c>,
- <c><anno>String</anno></c> is padded with blanks or <c><anno>Character</anno></c>s.</p>
- <p>For example:</p>
+ <p>Returns a substring of <c><anno>String</anno></c>, starting at
+ position <c><anno>Start</anno></c>, and ending at the end of the
+ string or at length <c><anno>Length</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> string:right("Hello", 10, $.).
-".....Hello" </code>
- </desc>
- </func>
- <func>
- <name name="centre" arity="2"/>
- <name name="centre" arity="3"/>
- <fsummary>Center a string</fsummary>
- <desc>
- <p>Returns a string, where <c><anno>String</anno></c> is centred in the
- string and surrounded by blanks or characters. The resulting
- string will have the length <c><anno>Number</anno></c>.</p>
+> substr("Hello World", 4, 5).
+"lo Wo"</code>
</desc>
</func>
+
<func>
- <name name="sub_string" arity="2"/>
- <name name="sub_string" arity="3"/>
- <fsummary>Extract a substring</fsummary>
+ <name name="sub_word" arity="2"/>
+ <name name="sub_word" arity="3"/>
+ <fsummary>Extract subword.</fsummary>
<desc>
- <p>Returns a substring of <c><anno>String</anno></c>, starting at the
- position <c><anno>Start</anno></c> to the end of the string, or to and
- including the <c><anno>Stop</anno></c> position.</p>
- <p>For example:</p>
+ <p>Returns the word in position <c><anno>Number</anno></c> of
+ <c><anno>String</anno></c>. Words are separated by blanks or
+ <c><anno>Character</anno></c>s.</p>
+ <p><em>Example:</em></p>
<code type="none">
-sub_string("Hello World", 4, 8).
-"lo Wo" </code>
+> string:sub_word(" Hello old boy !",3,$o).
+"ld b"</code>
</desc>
</func>
+
<func>
<name name="to_float" arity="1"/>
- <fsummary>Returns a float whose text representation is the integers (ASCII values) in String.</fsummary>
+ <fsummary>Returns a float whose text representation is the integers
+ (ASCII values) in a string.</fsummary>
<desc>
- <p>Argument <c><anno>String</anno></c> is expected to start with a valid text
- represented float (the digits being ASCII values). Remaining characters
- in the string after the float are returned in <c><anno>Rest</anno></c>.</p>
- <p>Example:</p>
+ <p>Argument <c><anno>String</anno></c> is expected to start with a
+ valid text represented float (the digits are ASCII values).
+ Remaining characters in the string after the float are returned in
+ <c><anno>Rest</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
- > {F1,Fs} = string:to_float("1.0-1.0e-1"),
- > {F2,[]} = string:to_float(Fs),
- > F1+F2.
- 0.9
- > string:to_float("3/2=1.5").
- {error,no_float}
- > string:to_float("-1.5eX").
- {-1.5,"eX"}</code>
+> {F1,Fs} = string:to_float("1.0-1.0e-1"),
+> {F2,[]} = string:to_float(Fs),
+> F1+F2.
+0.9
+> string:to_float("3/2=1.5").
+{error,no_float}
+> string:to_float("-1.5eX").
+{-1.5,"eX"}</code>
</desc>
</func>
+
<func>
<name name="to_integer" arity="1"/>
- <fsummary>Returns an integer whose text representation is the integers (ASCII values) in String.</fsummary>
+ <fsummary>Returns an integer whose text representation is the integers
+ (ASCII values) in a string.</fsummary>
<desc>
- <p>Argument <c><anno>String</anno></c> is expected to start with a valid text
- represented integer (the digits being ASCII values). Remaining characters
- in the string after the integer are returned in <c><anno>Rest</anno></c>.</p>
- <p>Example:</p>
+ <p>Argument <c><anno>String</anno></c> is expected to start with a
+ valid text represented integer (the digits are ASCII values).
+ Remaining characters in the string after the integer are returned in
+ <c><anno>Rest</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
- > {I1,Is} = string:to_integer("33+22"),
- > {I2,[]} = string:to_integer(Is),
- > I1-I2.
- 11
- > string:to_integer("0.5").
- {0,".5"}
- > string:to_integer("x=2").
- {error,no_integer}</code>
+> {I1,Is} = string:to_integer("33+22"),
+> {I2,[]} = string:to_integer(Is),
+> I1-I2.
+11
+> string:to_integer("0.5").
+{0,".5"}
+> string:to_integer("x=2").
+{error,no_integer}</code>
</desc>
</func>
+
<func>
<name name="to_lower" arity="1" clause_i="1"/>
<name name="to_lower" arity="1" clause_i="2"/>
<name name="to_upper" arity="1" clause_i="1"/>
<name name="to_upper" arity="1" clause_i="2"/>
- <fsummary>Convert case of string (ISO/IEC 8859-1)</fsummary>
+ <fsummary>Convert case of string (ISO/IEC 8859-1).</fsummary>
<type variable="String" name_i="1"/>
<type variable="Result" name_i="1"/>
<type variable="Char"/>
<type variable="CharResult"/>
<desc>
- <p>The given string or character is case-converted. Note that
- the supported character set is ISO/IEC 8859-1 (a.k.a. Latin 1),
- all values outside this set is unchanged</p>
+ <p>The specified string or character is case-converted. Notice that
+ the supported character set is ISO/IEC 8859-1 (also called Latin 1);
+ all values outside this set are unchanged</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="tokens" arity="2"/>
+ <fsummary>Split string into tokens.</fsummary>
+ <desc>
+ <p>Returns a list of tokens in <c><anno>String</anno></c>, separated
+ by the characters in <c><anno>SeparatorList</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> tokens("abc defxxghix jkl", "x ").
+["abc", "def", "ghi", "jkl"]</code>
+ <p>Notice that, as shown in this example, two or more
+ adjacent separator characters in <c><anno>String</anno></c>
+ are treated as one. That is, there are no empty
+ strings in the resulting list of tokens.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="words" arity="1"/>
+ <name name="words" arity="2"/>
+ <fsummary>Count blank separated words.</fsummary>
+ <desc>
+ <p>Returns the number of words in <c><anno>String</anno></c>, separated
+ by blanks or <c><anno>Character</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> words(" Hello old boy!", $o).
+4</code>
</desc>
</func>
</funcs>
<section>
<title>Notes</title>
- <p>Some of the general string functions may seem to overlap each
- other. The reason for this is that this string package is the
- combination of two earlier packages and all the functions of
- both packages have been retained.
- </p>
+ <p>Some of the general string functions can seem to overlap each
+ other. The reason is that this string package is the
+ combination of two earlier packages and all functions of
+ both packages have been retained.</p>
+
<note>
- <p>Any undocumented functions in <c>string</c> should not be used.</p>
+ <p>Any undocumented functions in <c>string</c> are not to be used.</p>
</note>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/supervisor.xml b/lib/stdlib/doc/src/supervisor.xml
index 815bf4a489..294196f746 100644
--- a/lib/stdlib/doc/src/supervisor.xml
+++ b/lib/stdlib/doc/src/supervisor.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2014</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,124 +29,138 @@
<rev></rev>
</header>
<module>supervisor</module>
- <modulesummary>Generic Supervisor Behaviour</modulesummary>
+ <modulesummary>Generic supervisor behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing a supervisor, a process which
+ <p>This behavior module provides a supervisor, a process that
supervises other processes called child processes. A child
process can either be another supervisor or a worker process.
- Worker processes are normally implemented using one of
- the <c>gen_event</c>, <c>gen_fsm</c>, or <c>gen_server</c>
- behaviours. A supervisor implemented using this module will have
+ Worker processes are normally implemented using one of the
+ <seealso marker="gen_event"><c>gen_event</c></seealso>,
+ <seealso marker="gen_fsm"><c>gen_fsm</c></seealso>,
+ <seealso marker="gen_server"><c>gen_server</c></seealso>, or
+ <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ behaviors. A supervisor implemented using this module has
a standard set of interface functions and include functionality
for tracing and error reporting. Supervisors are used to build a
hierarchical process structure called a supervision tree, a
- nice way to structure a fault tolerant application. Refer to
- <em>OTP Design Principles</em> for more information.</p>
+ nice way to structure a fault-tolerant application. For more
+ information, see <seealso marker="doc/design_principles:sup_princ">
+ Supervisor Behaviour</seealso> in OTP Design Principles.</p>
+
<p>A supervisor expects the definition of which child processes to
supervise to be specified in a callback module exporting a
- pre-defined set of functions.</p>
- <p>Unless otherwise stated, all functions in this module will fail
+ predefined set of functions.</p>
+
+ <p>Unless otherwise stated, all functions in this module fail
if the specified supervisor does not exist or if bad arguments
- are given.</p>
+ are specified.</p>
</description>
<section>
+ <marker id="supervision_princ"/>
<title>Supervision Principles</title>
- <p>The supervisor is responsible for starting, stopping and
+ <p>The supervisor is responsible for starting, stopping, and
monitoring its child processes. The basic idea of a supervisor is
- that it shall keep its child processes alive by restarting them
+ that it must keep its child processes alive by restarting them
when necessary.</p>
+
<p>The children of a supervisor are defined as a list of
<em>child specifications</em>. When the supervisor is started, the child
processes are started in order from left to right according to
this list. When the supervisor terminates, it first terminates
its child processes in reversed start order, from right to left.</p>
+
<marker id="sup_flags"/>
- <p>The properties of a supervisor are defined by the supervisor
- flags. This is the type definition for the supervisor flags:
- </p>
- <pre>sup_flags() = #{strategy => strategy(), % optional
+ <p>The supervisor properties are defined by the supervisor flags.
+ The type definition for the supervisor flags is as follows:</p>
+
+ <pre>
+sup_flags() = #{strategy => strategy(), % optional
intensity => non_neg_integer(), % optional
- period => pos_integer()} % optional
- </pre>
- <p>A supervisor can have one of the following <em>restart
- strategies</em>, specified with the <c>strategy</c> key in the
- above map:
- </p>
+ period => pos_integer()} % optional</pre>
+
+ <p>A supervisor can have one of the following <em>restart strategies</em>
+ specified with the <c>strategy</c> key in the above map:</p>
+
<list type="bulleted">
<item>
- <p><c>one_for_one</c> - if one child process terminates and
- should be restarted, only that child process is
+ <p><c>one_for_one</c> - If one child process terminates and
+ is to be restarted, only that child process is
affected. This is the default restart strategy.</p>
</item>
<item>
- <p><c>one_for_all</c> - if one child process terminates and
- should be restarted, all other child processes are terminated
+ <p><c>one_for_all</c> - If one child process terminates and
+ is to be restarted, all other child processes are terminated
and then all child processes are restarted.</p>
</item>
<item>
- <p><c>rest_for_one</c> - if one child process terminates and
- should be restarted, the 'rest' of the child processes --
- i.e. the child processes after the terminated child process
- in the start order -- are terminated. Then the terminated
+ <p><c>rest_for_one</c> - If one child process terminates and
+ is to be restarted, the 'rest' of the child processes (that
+ is, the child processes after the terminated child process
+ in the start order) are terminated. Then the terminated
child process and all child processes after it are restarted.</p>
</item>
<item>
- <p><c>simple_one_for_one</c> - a simplified <c>one_for_one</c>
+ <p><c>simple_one_for_one</c> - A simplified <c>one_for_one</c>
supervisor, where all child processes are dynamically added
- instances of the same process type, i.e. running the same
+ instances of the same process type, that is, running the same
code.</p>
- <p>The functions <c>delete_child/2</c>
- and <c>restart_child/2</c> are invalid for
- <c>simple_one_for_one</c> supervisors and will return
+ <p>Functions
+ <seealso marker="#delete_child/2"><c>delete_child/2</c></seealso> and
+ <seealso marker="#restart_child/2"><c>restart_child/2</c></seealso>
+ are invalid for <c>simple_one_for_one</c> supervisors and return
<c>{error,simple_one_for_one}</c> if the specified supervisor
uses this restart strategy.</p>
- <p>The function <c>terminate_child/2</c> can be used for
+ <p>Function <seealso marker="#terminate_child/2">
+ <c>terminate_child/2</c></seealso> can be used for
children under <c>simple_one_for_one</c> supervisors by
- giving the child's <c>pid()</c> as the second argument. If
+ specifying the child's <c>pid()</c> as the second argument. If
instead the child specification identifier is used,
- <c>terminate_child/2</c> will return
+ <c>terminate_child/2</c> return
<c>{error,simple_one_for_one}</c>.</p>
- <p>Because a <c>simple_one_for_one</c> supervisor could have
+ <p>As a <c>simple_one_for_one</c> supervisor can have
many children, it shuts them all down asynchronously. This
- means that the children will do their cleanup in parallel,
+ means that the children do their cleanup in parallel,
and therefore the order in which they are stopped is not
defined.</p>
</item>
</list>
+
<p>To prevent a supervisor from getting into an infinite loop of
child process terminations and restarts, a <em>maximum restart
intensity</em> is defined using two integer values specified
- with the <c>intensity</c> and <c>period</c> keys in the above
+ with keys <c>intensity</c> and <c>period</c> in the above
map. Assuming the values <c>MaxR</c> for <c>intensity</c>
- and <c>MaxT</c> for <c>period</c>, then if more than <c>MaxR</c>
- restarts occur within <c>MaxT</c> seconds, the supervisor will
- terminate all child processes and then itself. The default value
- for <c>intensity</c> is <c>1</c>, and the default value
- for <c>period</c> is <c>5</c>.
- </p>
+ and <c>MaxT</c> for <c>period</c>, then, if more than <c>MaxR</c>
+ restarts occur within <c>MaxT</c> seconds, the supervisor
+ terminates all child processes and then itself. <c>intensity</c>
+ defaults to <c>1</c> and <c>period</c> defaults to <c>5</c>.</p>
+
<marker id="child_spec"/>
- <p>This is the type definition of a child specification:</p>
- <pre>child_spec() = #{id => child_id(), % mandatory
+ <p>The type definition of a child specification is as follows:</p>
+
+ <pre>
+child_spec() = #{id => child_id(), % mandatory
start => mfargs(), % mandatory
restart => restart(), % optional
shutdown => shutdown(), % optional
type => worker(), % optional
modules => modules()} % optional</pre>
+
<p>The old tuple format is kept for backwards compatibility,
see <seealso marker="#type-child_spec">child_spec()</seealso>,
- but the map is preferred.
- </p>
+ but the map is preferred.</p>
+
<list type="bulleted">
<item>
<p><c>id</c> is used to identify the child
specification internally by the supervisor.</p>
<p>The <c>id</c> key is mandatory.</p>
- <p>Note that this identifier on occations has been called
- "name". As far as possible, the terms "identifier" or "id"
- are now used but in order to keep backwards compatibility,
- some occurences of "name" can still be found, for example
- in error messages.</p>
+ <p>Notice that this identifier on occations has been called
+ "name". As far as possible, the terms "identifier" or "id"
+ are now used but to keep backward compatibility,
+ some occurences of "name" can still be found, for example
+ in error messages.</p>
</item>
<item>
<p><c>start</c> defines the function call used to start the
@@ -154,83 +168,86 @@
tuple <c>{M,F,A}</c> used as <c>apply(M,F,A)</c>.</p>
<p>The start function <em>must create and link to</em> the child
process, and must return <c>{ok,Child}</c> or
- <c>{ok,Child,Info}</c> where <c>Child</c> is the pid of
- the child process and <c>Info</c> an arbitrary term which is
+ <c>{ok,Child,Info}</c>, where <c>Child</c> is the pid of
+ the child process and <c>Info</c> any term that is
ignored by the supervisor.</p>
<p>The start function can also return <c>ignore</c> if the child
process for some reason cannot be started, in which case
- the child specification will be kept by the supervisor
- (unless it is a temporary child) but the non-existing child
- process will be ignored.</p>
- <p>If something goes wrong, the function may also return an
+ the child specification is kept by the supervisor
+ (unless it is a temporary child) but the non-existing child
+ process is ignored.</p>
+ <p>If something goes wrong, the function can also return an
error tuple <c>{error,Error}</c>.</p>
- <p>Note that the <c>start_link</c> functions of the different
- behaviour modules fulfill the above requirements.</p>
- <p>The <c>start</c> key is mandatory.</p>
+ <p>Notice that the <c>start_link</c> functions of the different
+ behavior modules fulfill the above requirements.</p>
+ <p>The <c>start</c> key is mandatory.</p>
</item>
<item>
<p><c>restart</c> defines when a terminated child process
- shall be restarted. A <c>permanent</c> child process will
- always be restarted, a <c>temporary</c> child process will
- never be restarted (even when the supervisor's restart strategy
+ must be restarted. A <c>permanent</c> child process is
+ always restarted. A <c>temporary</c> child process is
+ never restarted (even when the supervisor's restart strategy
is <c>rest_for_one</c> or <c>one_for_all</c> and a sibling's
- death causes the temporary process to be terminated) and a
- <c>transient</c> child process will be restarted only if
- it terminates abnormally, i.e. with another exit reason
- than <c>normal</c>, <c>shutdown</c> or <c>{shutdown,Term}</c>.</p>
- <p>The <c>restart</c> key is optional. If it is not given, the
- default value <c>permanent</c> will be used.</p>
+ death causes the temporary process to be terminated).
+ A <c>transient</c> child process is restarted only if
+ it terminates abnormally, that is, with another exit reason
+ than <c>normal</c>, <c>shutdown</c>, or <c>{shutdown,Term}</c>.</p>
+ <p>The <c>restart</c> key is optional. If it is not specified,
+ it defaults to <c>permanent</c>.</p>
</item>
<item>
- <p><c>shutdown</c> defines how a child process shall be
- terminated. <c>brutal_kill</c> means the child process will
- be unconditionally terminated using <c>exit(Child,kill)</c>.
- An integer timeout value means that the supervisor will tell
+ <p><c>shutdown</c> defines how a child process must be
+ terminated. <c>brutal_kill</c> means that the child process
+ is unconditionally terminated using <c>exit(Child,kill)</c>.
+ An integer time-out value means that the supervisor tells
the child process to terminate by calling
<c>exit(Child,shutdown)</c> and then wait for an exit signal
- with reason <c>shutdown</c> back from the child process. If
- no exit signal is received within the specified number of milliseconds,
+ with reason <c>shutdown</c> back from the child process. If no
+ exit signal is received within the specified number of milliseconds,
the child process is unconditionally terminated using
<c>exit(Child,kill)</c>.</p>
<p>If the child process is another supervisor, the shutdown time
- should be set to <c>infinity</c> to give the subtree ample
+ is to be set to <c>infinity</c> to give the subtree ample
time to shut down. It is also allowed to set it to <c>infinity</c>,
if the child process is a worker.</p>
<warning>
<p>Be careful when setting the shutdown time to
- <c>infinity</c> when the child process is a worker. Because, in this
- situation, the termination of the supervision tree depends on the
- child process, it must be implemented in a safe way and its cleanup
- procedure must always return.</p>
+ <c>infinity</c> when the child process is a worker. Because, in this
+ situation, the termination of the supervision tree depends on the
+ child process, it must be implemented in a safe way and its cleanup
+ procedure must always return.</p>
</warning>
- <p>Note that all child processes implemented using the standard
- OTP behaviour modules automatically adhere to the shutdown
+ <p>Notice that all child processes implemented using the standard
+ OTP behavior modules automatically adhere to the shutdown
protocol.</p>
- <p>The <c>shutdown</c> key is optional. If it is not given,
- the default value <c>5000</c> will be used if the child is
- of type <c>worker</c>; and <c>infinity</c> will be used if
- the child is of type <c>supervisor</c>.</p>
+ <p>The <c>shutdown</c> key is optional. If it is not specified,
+ it defaults to <c>5000</c> if the child is
+ of type <c>worker</c> and it defaults to <c>infinity</c> if
+ the child is of type <c>supervisor</c>.</p>
</item>
<item>
<p><c>type</c> specifies if the child process is a supervisor or
a worker.</p>
- <p>The <c>type</c> key is optional. If it is not given, the
- default value <c>worker</c> will be used.</p>
+ <p>The <c>type</c> key is optional. If it is not specified,
+ it defaults to <c>worker</c>.</p>
</item>
<item>
<p><c>modules</c> is used by the release handler during code
replacement to determine which processes are using a certain
module. As a rule of thumb, if the child process is a
- <c>supervisor</c>, <c>gen_server</c>, or <c>gen_fsm</c>,
- this should be a list with one element <c>[Module]</c>,
- where <c>Module</c> is the callback module. If the child
- process is an event manager (<c>gen_event</c>) with a
- dynamic set of callback modules, the value <c>dynamic</c>
- shall be used. See <em>OTP Design Principles</em> for more
- information about release handling.</p>
- <p>The <c>modules</c> key is optional. If it is not given, it
- defaults to <c>[M]</c>, where <c>M</c> comes from the
- child's start <c>{M,F,A}</c></p>
+ <c>supervisor</c>, <c>gen_server</c>,
+ <c>gen_statem</c>, or <c>gen_fsm</c>,
+ this is to be a list with one element <c>[Module]</c>,
+ where <c>Module</c> is the callback module. If the child
+ process is an event manager (<c>gen_event</c>) with a
+ dynamic set of callback modules, value <c>dynamic</c>
+ must be used. For more information about release handling, see
+ <seealso marker="doc/design_principles:release_handling">
+ Release Handling</seealso>
+ in OTP Design Principles.</p>
+ <p>The <c>modules</c> key is optional. If it is not specified, it
+ defaults to <c>[M]</c>, where <c>M</c> comes from the
+ child's start <c>{M,F,A}</c>.</p>
</item>
<item>
<p>Internally, the supervisor also keeps track of the pid
@@ -239,6 +256,7 @@
</item>
</list>
</section>
+
<datatypes>
<datatype>
<name name="child"/>
@@ -249,20 +267,18 @@
</datatype>
<datatype>
<name name="child_spec"/>
- <desc><p>The tuple format is kept for backwards compatibility
- only. A map is preferred; see more details
- <seealso marker="#child_spec">above</seealso>.</p></desc>
+ <desc><p>The tuple format is kept for backward compatibility
+ only. A map is preferred; see more details
+ <seealso marker="#child_spec">above</seealso>.</p></desc>
</datatype>
<datatype>
<name name="mfargs"/>
- <desc>
- <p>The value <c>undefined</c> for <c><anno>A</anno></c> (the
- argument list) is only to be used internally
- in <c>supervisor</c>. If the restart type of the child
- is <c>temporary</c>, then the process is never to be
- restarted and therefore there is no need to store the real
- argument list. The value <c>undefined</c> will then be
- stored instead.</p>
+ <desc><p>Value <c>undefined</c> for <c><anno>A</anno></c> (the
+ argument list) is only to be used internally
+ in <c>supervisor</c>. If the restart type of the child
+ is <c>temporary</c>, the process is never to be
+ restarted and therefore there is no need to store the real
+ argument list. Value <c>undefined</c> is then stored instead.</p>
</desc>
</datatype>
<datatype>
@@ -279,9 +295,9 @@
</datatype>
<datatype>
<name name="sup_flags"/>
- <desc><p>The tuple format is kept for backwards compatibility
- only. A map is preferred; see more details
- <seealso marker="#sup_flags">above</seealso>.</p></desc>
+ <desc><p>The tuple format is kept for backward compatibility
+ only. A map is preferred; see more details
+ <seealso marker="#sup_flags">above</seealso>.</p></desc>
</datatype>
<datatype>
<name name="sup_ref"/>
@@ -290,307 +306,355 @@
<name name="worker"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="start_link" arity="2"/>
- <name name="start_link" arity="3"/>
- <fsummary>Create a supervisor process.</fsummary>
- <type name="startlink_ret"/>
- <type name="startlink_err"/>
- <type name="sup_name"/>
+ <name name="check_childspecs" arity="1"/>
+ <fsummary>Check if children specifications are syntactically correct.
+ </fsummary>
<desc>
- <p>Creates a supervisor process as part of a supervision tree.
- The function will, among other things, ensure that
- the supervisor is linked to the calling process (its
- supervisor).</p>
- <p>The created supervisor process calls <c><anno>Module</anno>:init/1</c> to
- find out about restart strategy, maximum restart intensity
- and child processes. To ensure a synchronized start-up
- procedure, <c>start_link/2,3</c> does not return until
- <c><anno>Module</anno>:init/1</c> has returned and all child processes
- have been started.</p>
- <p>If <c><anno>SupName</anno>={local,Name}</c>, the supervisor is registered
- locally as <c>Name</c> using <c>register/2</c>. If
- <c><anno>SupName</anno>={global,Name}</c> the supervisor is registered
- globally as <c>Name</c> using <c>global:register_name/2</c>. If
- <c><anno>SupName</anno>={via,<anno>Module</anno>,<anno>Name</anno>}</c> the supervisor
- is registered as <c>Name</c> using the registry represented by
- <c>Module</c>. The <c>Module</c> callback must export the functions
- <c>register_name/2</c>, <c>unregister_name/1</c> and <c>send/2</c>,
- which shall behave like the corresponding functions in <c>global</c>.
- Thus, <c>{via,global,<anno>Name</anno>}</c> is a valid reference.</p>
- <p>If no name is provided, the supervisor is not registered.</p>
- <p><c><anno>Module</anno></c> is the name of the callback module.</p>
- <p><c><anno>Args</anno></c> is an arbitrary term which is passed as
- the argument to <c><anno>Module</anno>:init/1</c>.</p>
- <p>If the supervisor and its child processes are successfully
- created (i.e. if all child process start functions return
- <c>{ok,Child}</c>, <c>{ok,Child,Info}</c>, or <c>ignore</c>),
- the function returns <c>{ok,Pid}</c>, where <c>Pid</c> is
- the pid of the supervisor. If there already exists a process
- with the specified <c><anno>SupName</anno></c>, the function returns
- <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
- the pid of that process.</p>
- <p>If <c><anno>Module</anno>:init/1</c> returns <c>ignore</c>, this function
- returns <c>ignore</c> as well, and the supervisor terminates
- with reason <c>normal</c>.
- If <c><anno>Module</anno>:init/1</c> fails or returns an incorrect value,
- this function returns <c>{error,Term}</c> where <c>Term</c>
- is a term with information about the error, and the supervisor
- terminates with reason <c>Term</c>.</p>
- <p>If any child process start function fails or returns an error
- tuple or an erroneous value, the supervisor will first terminate
- all already started child processes with reason <c>shutdown</c>
- and then terminate itself and return
- <c>{error, {shutdown, Reason}}</c>.</p>
+ <p>Takes a list of child specification as argument
+ and returns <c>ok</c> if all of them are syntactically
+ correct, otherwise <c>{error,<anno>Error</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="start_child" arity="2"/>
- <fsummary>Dynamically add a child process to a supervisor.</fsummary>
- <type name="startchild_ret"/>
- <type name="startchild_err"/>
+ <name name="count_children" arity="1"/>
+ <fsummary>Return counts for the number of child specifications,
+ active children, supervisors, and workers.</fsummary>
<desc>
- <p>Dynamically adds a child specification to the supervisor
- <c><anno>SupRef</anno></c> which starts the corresponding child process.</p>
- <p><marker id="SupRef"/><c><anno>SupRef</anno></c> can be:</p>
+ <p>Returns a property list (see <seealso marker="proplists">
+ <c>proplists</c></seealso>) containing the
+ counts for each of the following elements of the supervisor's
+ child specifications and managed processes:</p>
<list type="bulleted">
- <item>the pid,</item>
- <item><c>Name</c>, if the supervisor is locally registered,</item>
- <item><c>{Name,Node}</c>, if the supervisor is locally
- registered at another node, or</item>
- <item><c>{global,Name}</c>, if the supervisor is globally
- registered.</item>
- <item><c>{via,Module,Name}</c>, if the supervisor is registered
- through an alternative process registry.</item>
+ <item>
+ <p><c>specs</c> - The total count of children, dead or alive.</p>
+ </item>
+ <item>
+ <p><c>active</c> - The count of all actively running child
+ processes managed by this supervisor. For a
+ <c>simple_one_for_one</c> supervisors, no check is done to ensure
+ that each child process is still alive, although the result
+ provided here is likely to be very
+ accurate unless the supervisor is heavily overloaded.</p>
+ </item>
+ <item>
+ <p><c>supervisors</c> - The count of all children marked as
+ <c>child_type = supervisor</c> in the specification list,
+ regardless if the child process is still alive.</p>
+ </item>
+ <item>
+ <p><c>workers</c> - The count of all children marked as
+ <c>child_type = worker</c> in the specification list,
+ regardless if the child process is still alive.</p>
+ </item>
</list>
- <p><c><anno>ChildSpec</anno></c> must be a valid child specification
- (unless the supervisor is a <c>simple_one_for_one</c>
- supervisor; see below). The child process will be started by
- using the start function as defined in the child
- specification.</p>
- <p>In the case of a <c>simple_one_for_one</c> supervisor,
- the child specification defined in <c>Module:init/1</c> will
- be used, and <c><anno>ChildSpec</anno></c> shall instead be an arbitrary
- list of terms <c><anno>List</anno></c>. The child process will then be
- started by appending <c><anno>List</anno></c> to the existing start
- function arguments, i.e. by calling
- <c>apply(M, F, A++<anno>List</anno>)</c> where <c>{M,F,A}</c> is the start
- function defined in the child specification.</p>
- <p>If there already exists a child specification with
- the specified identifier, <c><anno>ChildSpec</anno></c> is discarded, and
- the function returns <c>{error,already_present}</c> or
- <c>{error,{already_started,<anno>Child</anno>}}</c>, depending on if
- the corresponding child process is running or not.</p>
- <p>If the child process start function returns <c>{ok,<anno>Child</anno>}</c>
- or <c>{ok,<anno>Child</anno>,<anno>Info</anno>}</c>, the child specification and pid are
- added to the supervisor and the function returns the same
- value.</p>
- <p>If the child process start function returns <c>ignore</c>,
- the child specification is added to the supervisor (unless the
- supervisor is a <c>simple_one_for_one</c> supervisor, see below),
- the pid is set to <c>undefined</c> and the function returns
- <c>{ok,undefined}</c>.
- </p>
- <p>In the case of a <c>simple_one_for_one</c> supervisor, when a child
- process start function returns <c>ignore</c> the functions returns
- <c>{ok,undefined}</c> and no child is added to the supervisor.
- </p>
- <p>If the child process start function returns an error tuple or
- an erroneous value, or if it fails, the child specification is
- discarded, and the function returns <c>{error,Error}</c> where
- <c>Error</c> is a term containing information about the error
- and child specification.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
</desc>
</func>
- <func>
- <name name="terminate_child" arity="2"/>
- <fsummary>Terminate a child process belonging to a supervisor.</fsummary>
- <desc>
- <p>Tells the supervisor <c><anno>SupRef</anno></c> to terminate the given
- child.</p>
-
- <p>If the supervisor is not <c>simple_one_for_one</c>,
- <c><anno>Id</anno></c> must be the child specification
- identifier. The process, if there is one, is terminated and,
- unless it is a temporary child, the child specification is
- kept by the supervisor. The child process may later be
- restarted by the supervisor. The child process can also be
- restarted explicitly by calling
- <c>restart_child/2</c>. Use <c>delete_child/2</c> to remove
- the child specification.</p>
-
- <p>If the child is temporary, the child specification is deleted as
- soon as the process terminates. This means
- that <c>delete_child/2</c> has no meaning,
- and <c>restart_child/2</c> can not be used for these
- children.</p>
- <p>If the supervisor is <c>simple_one_for_one</c>, <c><anno>Id</anno></c>
- must be the child process' <c>pid()</c>. If the specified
- process is alive, but is not a child of the given
- supervisor, the function will return
- <c>{error,not_found}</c>. If the child specification
- identifier is given instead of a <c>pid()</c>, the
- function will return <c>{error,simple_one_for_one}</c>.</p>
- <p>If successful, the function returns <c>ok</c>. If there is
- no child specification with the specified <c><anno>Id</anno></c>, the
- function returns <c>{error,not_found}</c>.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c><anno>SupRef</anno></c>.</p>
- </desc>
- </func>
<func>
<name name="delete_child" arity="2"/>
<fsummary>Delete a child specification from a supervisor.</fsummary>
<desc>
- <p>Tells the supervisor <c><anno>SupRef</anno></c> to delete the child
- specification identified by <c><anno>Id</anno></c>. The corresponding child
- process must not be running. Use <c>terminate_child/2</c> to
- terminate it.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c><anno>SupRef</anno></c>.</p>
+ <p>Tells supervisor <c><anno>SupRef</anno></c> to delete the child
+ specification identified by <c><anno>Id</anno></c>. The corresponding
+ child process must not be running. Use
+ <seealso marker="#terminate_child/2">
+ <c>terminate_child/2</c></seealso> to terminate it.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
<p>If successful, the function returns <c>ok</c>. If the child
- specification identified by <c><anno>Id</anno></c> exists but
- the corresponding child process is running or about to be restarted,
- the function returns <c>{error,running}</c> or
- <c>{error,restarting}</c>, respectively. If the child specification
+ specification identified by <c><anno>Id</anno></c> exists but the
+ corresponding child process is running or is about to be restarted,
+ the function returns <c>{error,running}</c> or
+ <c>{error,restarting}</c>, respectively. If the child specification
identified by <c><anno>Id</anno></c> does not exist, the function
- returns <c>{error,not_found}</c>.</p>
+ returns <c>{error,not_found}</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="get_childspec" arity="2"/>
+ <fsummary>Return the child specification map for the specified
+ child.</fsummary>
+ <desc>
+ <p>Returns the child specification map for the child identified
+ by <c>Id</c> under supervisor <c>SupRef</c>. The returned
+ map contains all keys, both mandatory and optional.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="restart_child" arity="2"/>
- <fsummary>Restart a terminated child process belonging to a supervisor.</fsummary>
+ <fsummary>Restart a terminated child process belonging to a supervisor.
+ </fsummary>
<desc>
- <p>Tells the supervisor <c><anno>SupRef</anno></c> to restart
+ <p>Tells supervisor <c><anno>SupRef</anno></c> to restart
a child process corresponding to the child specification
identified by <c><anno>Id</anno></c>. The child
specification must exist, and the corresponding child process
must not be running.</p>
- <p>Note that for temporary children, the child specification
- is automatically deleted when the child terminates; thus
- it is not possible to restart such children.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c>SupRef</c>.</p>
+ <p>Notice that for temporary children, the child specification
+ is automatically deleted when the child terminates; thus,
+ it is not possible to restart such children.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
<p>If the child specification identified
by <c><anno>Id</anno></c> does not exist, the function
returns <c>{error,not_found}</c>. If the child specification
exists but the corresponding process is already running, the
- function returns
- <c>{error,running}</c>.</p>
+ function returns <c>{error,running}</c>.</p>
<p>If the child process start function
returns <c>{ok,<anno>Child</anno>}</c>
or <c>{ok,<anno>Child</anno>,<anno>Info</anno>}</c>, the pid
is added to the supervisor and the function returns the same
value.</p>
<p>If the child process start function returns <c>ignore</c>,
- the pid remains set to <c>undefined</c>, and the function
+ the pid remains set to <c>undefined</c> and the function
returns <c>{ok,undefined}</c>.</p>
<p>If the child process start function returns an error tuple
or an erroneous value, or if it fails, the function returns
- <c>{error,<anno>Error</anno>}</c>
+ <c>{error,<anno>Error</anno>}</c>,
where <c><anno>Error</anno></c> is a term containing
information about the error.</p>
</desc>
</func>
+
<func>
- <name name="which_children" arity="1"/>
- <fsummary>Return information about all children specifications and
- child processes belonging to a supervisor.</fsummary>
+ <name name="start_child" arity="2"/>
+ <fsummary>Dynamically add a child process to a supervisor.</fsummary>
+ <type name="startchild_ret"/>
+ <type name="startchild_err"/>
<desc>
- <p>Returns a newly created list with information about all child
- specifications and child processes belonging to
- the supervisor <c><anno>SupRef</anno></c>.</p>
- <p>Note that calling this function when supervising a large
- number of children under low memory conditions can cause an
- out of memory exception.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso> for a description of
- <c>SupRef</c>.</p>
- <p>The information given for each child specification/process
- is:</p>
+ <p>Dynamically adds a child specification to supervisor
+ <c><anno>SupRef</anno></c>, which starts the corresponding child
+ process.</p>
+ <p><marker id="SupRef"/><c><anno>SupRef</anno></c> can be any of the
+ following:</p>
+ <list type="bulleted">
+ <item>The pid</item>
+ <item><c>Name</c>, if the supervisor is locally registered</item>
+ <item><c>{Name,Node}</c>, if the supervisor is locally
+ registered at another node</item>
+ <item><c>{global,Name}</c>, if the supervisor is globally
+ registered</item>
+ <item><c>{via,Module,Name}</c>, if the supervisor is registered
+ through an alternative process registry</item>
+ </list>
+ <p><c><anno>ChildSpec</anno></c> must be a valid child specification
+ (unless the supervisor is a <c>simple_one_for_one</c>
+ supervisor; see below). The child process is started by
+ using the start function as defined in the child specification.</p>
+ <p>For a <c>simple_one_for_one</c> supervisor,
+ the child specification defined in <c>Module:init/1</c> is used,
+ and <c><anno>ChildSpec</anno></c> must instead be an arbitrary
+ list of terms <c><anno>List</anno></c>. The child process is then
+ started by appending <c><anno>List</anno></c> to the existing start
+ function arguments, that is, by calling
+ <c>apply(M, F, A++<anno>List</anno>)</c>, where <c>{M,F,A}</c> is the
+ start function defined in the child specification.</p>
<list type="bulleted">
<item>
- <p><c><anno>Id</anno></c> - as defined in the child specification or
- <c>undefined</c> in the case of a
- <c>simple_one_for_one</c> supervisor.</p>
- </item>
- <item>
- <p><c><anno>Child</anno></c> - the pid of the corresponding child
- process, the atom <c>restarting</c> if the process is about to be
- restarted, or <c>undefined</c> if there is no such process.</p>
+ <p>If there already exists a child specification with the specified
+ identifier, <c><anno>ChildSpec</anno></c> is discarded, and
+ the function returns <c>{error,already_present}</c> or
+ <c>{error,{already_started,<anno>Child</anno>}}</c>, depending on
+ if the corresponding child process is running or not.</p>
</item>
<item>
- <p><c><anno>Type</anno></c> - as defined in the child specification.</p>
+ <p>If the child process start function returns
+ <c>{ok,<anno>Child</anno>}</c> or
+ <c>{ok,<anno>Child</anno>,<anno>Info</anno>}</c>, the child
+ specification and pid are added to the supervisor and the
+ function returns the same value.</p>
</item>
<item>
- <p><c><anno>Modules</anno></c> - as defined in the child specification.</p>
+ <p>If the child process start function returns <c>ignore</c>,
+ the child specification is added to the supervisor (unless the
+ supervisor is a <c>simple_one_for_one</c> supervisor, see below),
+ the pid is set to <c>undefined</c>, and the function returns
+ <c>{ok,undefined}</c>.</p>
</item>
</list>
+ <p>For a <c>simple_one_for_one</c> supervisor, when a child
+ process start function returns <c>ignore</c>, the functions returns
+ <c>{ok,undefined}</c> and no child is added to the supervisor.</p>
+ <p>If the child process start function returns an error tuple or
+ an erroneous value, or if it fails, the child specification is
+ discarded, and the function returns <c>{error,Error}</c>, where
+ <c>Error</c> is a term containing information about the error
+ and child specification.</p>
</desc>
</func>
+
<func>
- <name name="count_children" arity="1"/>
- <fsummary>Return counts for the number of child specifications,
- active children, supervisors, and workers.</fsummary>
+ <name name="start_link" arity="2"/>
+ <name name="start_link" arity="3"/>
+ <fsummary>Create a supervisor process.</fsummary>
+ <type name="startlink_ret"/>
+ <type name="startlink_err"/>
+ <type name="sup_name"/>
<desc>
- <p>Returns a property list (see <c>proplists</c>) containing the
- counts for each of the following elements of the supervisor's
- child specifications and managed processes:</p>
+ <p>Creates a supervisor process as part of a supervision tree.
+ For example, the function ensures that the supervisor is linked to
+ the calling process (its supervisor).</p>
+ <p>The created supervisor process calls
+ <c><anno>Module</anno>:init/1</c> to
+ find out about restart strategy, maximum restart intensity,
+ and child processes. To ensure a synchronized startup
+ procedure, <c>start_link/2,3</c> does not return until
+ <c><anno>Module</anno>:init/1</c> has returned and all child
+ processes have been started.</p>
<list type="bulleted">
<item>
- <p><c>specs</c> - the total count of children, dead or alive.</p>
+ <p>If <c><anno>SupName</anno>={local,Name}</c>, the supervisor is
+ registered locally as <c>Name</c> using <c>register/2</c>.</p>
</item>
<item>
- <p><c>active</c> - the count of all actively running child processes
- managed by this supervisor. In the case of <c>simple_one_for_one</c>
- supervisors, no check is carried out to ensure that each child process
- is still alive, though the result provided here is likely to be very
- accurate unless the supervisor is heavily overloaded.</p>
+ <p>If <c><anno>SupName</anno>={global,Name}</c>, the supervisor is
+ registered globally as <c>Name</c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso>.</p>
</item>
<item>
- <p><c>supervisors</c> - the count of all children marked as
- child_type = supervisor in the spec list, whether or not the
- child process is still alive.</p>
+ <p>If
+ <c><anno>SupName</anno>={via,<anno>Module</anno>,<anno>Name</anno>}</c>,
+ the supervisor is registered as <c>Name</c> using the registry
+ represented by <c>Module</c>. The <c>Module</c> callback must
+ export the functions <c>register_name/2</c>,
+ <c>unregister_name/1</c>, and <c>send/2</c>, which must behave
+ like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>. Thus,
+ <c>{via,global,<anno>Name</anno>}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p>If no name is provided, the supervisor is not registered.</p>
+ <p><c><anno>Module</anno></c> is the name of the callback module.</p>
+ <p><c><anno>Args</anno></c> is any term that is passed as
+ the argument to <c><anno>Module</anno>:init/1</c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If the supervisor and its child processes are successfully
+ created (that is, if all child process start functions return
+ <c>{ok,Child}</c>, <c>{ok,Child,Info}</c>, or <c>ignore</c>),
+ the function returns <c>{ok,Pid}</c>, where <c>Pid</c> is
+ the pid of the supervisor.</p>
</item>
<item>
- <p><c>workers</c> - the count of all children marked as
- child_type = worker in the spec list, whether or not the child
- process is still alive.</p>
+ <p>If there already exists a process with the specified
+ <c><anno>SupName</anno></c>, the function returns
+ <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
+ the pid of that process.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Module</anno>:init/1</c> returns <c>ignore</c>, this
+ function returns <c>ignore</c> as well, and the supervisor
+ terminates with reason <c>normal</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Module</anno>:init/1</c> fails or returns an
+ incorrect value, this function returns <c>{error,Term}</c>, where
+ <c>Term</c> is a term with information about the error, and the
+ supervisor terminates with reason <c>Term</c>.</p>
+ </item>
+ <item>
+ <p>If any child process start function fails or returns an error
+ tuple or an erroneous value, the supervisor first terminates
+ all already started child processes with reason <c>shutdown</c>
+ and then terminate itself and returns
+ <c>{error, {shutdown, Reason}}</c>.</p>
</item>
</list>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c><anno>SupRef</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="check_childspecs" arity="1"/>
- <fsummary>Check if children specifications are syntactically correct.</fsummary>
+ <name name="terminate_child" arity="2"/>
+ <fsummary>Terminate a child process belonging to a supervisor.</fsummary>
<desc>
- <p>This function takes a list of child specification as argument
- and returns <c>ok</c> if all of them are syntactically
- correct, or <c>{error,<anno>Error</anno>}</c> otherwise.</p>
+ <p>Tells supervisor <c><anno>SupRef</anno></c> to terminate the
+ specified child.</p>
+ <p>If the supervisor is not <c>simple_one_for_one</c>,
+ <c><anno>Id</anno></c> must be the child specification
+ identifier. The process, if any, is terminated and,
+ unless it is a temporary child, the child specification is
+ kept by the supervisor. The child process can later be
+ restarted by the supervisor. The child process can also be
+ restarted explicitly by calling
+ <seealso marker="#restart_child/2"><c>restart_child/2</c></seealso>.
+ Use
+ <seealso marker="#delete_child/2"><c>delete_child/2</c></seealso>
+ to remove the child specification.</p>
+ <p>If the child is temporary, the child specification is deleted as
+ soon as the process terminates. This means
+ that <c>delete_child/2</c> has no meaning
+ and <c>restart_child/2</c> cannot be used for these children.</p>
+ <p>If the supervisor is <c>simple_one_for_one</c>,
+ <c><anno>Id</anno></c>
+ must be the <c>pid()</c> of the child process. If the specified
+ process is alive, but is not a child of the specified
+ supervisor, the function returns
+ <c>{error,not_found}</c>. If the child specification
+ identifier is specified instead of a <c>pid()</c>, the
+ function returns <c>{error,simple_one_for_one}</c>.</p>
+ <p>If successful, the function returns <c>ok</c>. If there is
+ no child specification with the specified <c><anno>Id</anno></c>, the
+ function returns <c>{error,not_found}</c>.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="get_childspec" arity="2"/>
- <fsummary>Return the child specification map for the given
- child.</fsummary>
+ <name name="which_children" arity="1"/>
+ <fsummary>Return information about all children specifications and
+ child processes belonging to a supervisor.</fsummary>
<desc>
- <p>Returns the child specification map for the child identified
- by <c>Id</c> under supervisor <c>SupRef</c>. The returned
- map contains all keys, both mandatory and optional.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c><anno>SupRef</anno></c>.</p>
+ <p>Returns a newly created list with information about all child
+ specifications and child processes belonging to
+ supervisor <c><anno>SupRef</anno></c>.</p>
+ <p>Notice that calling this function when supervising many
+ childrens under low memory conditions can cause an
+ out of memory exception.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
+ <p>The following information is given for each child
+ specification/process:</p>
+ <list type="bulleted">
+ <item>
+ <p><c><anno>Id</anno></c> - As defined in the child specification or
+ <c>undefined</c> for a <c>simple_one_for_one</c> supervisor.</p>
+ </item>
+ <item>
+ <p><c><anno>Child</anno></c> - The pid of the corresponding child
+ process, the atom <c>restarting</c> if the process is about to be
+ restarted, or <c>undefined</c> if there is no such process.</p>
+ </item>
+ <item>
+ <p><c><anno>Type</anno></c> - As defined in the child
+ specification.</p>
+ </item>
+ <item>
+ <p><c><anno>Modules</anno></c> - As defined in the child
+ specification.</p>
+ </item>
+ </list>
</desc>
</func>
</funcs>
<section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions must be exported from a
+ <title>Callback Functions</title>
+ <p>The following function must be exported from a
<c>supervisor</c> callback module.</p>
</section>
+
<funcs>
<func>
<name>Module:init(Args) -> Result</name>
@@ -598,46 +662,52 @@
<type>
<v>Args = term()</v>
<v>Result = {ok,{SupFlags,[ChildSpec]}} | ignore</v>
- <v>&nbsp;SupFlags = <seealso marker="#type-sup_flags">sup_flags()</seealso></v>
- <v>&nbsp;ChildSpec = <seealso marker="#type-child_spec">child_spec()</seealso></v>
+ <v>&nbsp;SupFlags =
+ <seealso marker="#type-sup_flags"><c>sup_flags()</c></seealso></v>
+ <v>&nbsp;ChildSpec =
+ <seealso marker="#type-child_spec"><c>child_spec()</c></seealso></v>
</type>
<desc>
<p>Whenever a supervisor is started using
- <c>supervisor:start_link/2,3</c>, this function is called by
+ <seealso marker="#start_link/2"><c>start_link/2,3</c></seealso>,
+ this function is called by
the new process to find out about restart strategy, maximum
restart intensity, and child specifications.</p>
<p><c>Args</c> is the <c>Args</c> argument provided to the start
function.</p>
<p><c>SupFlags</c> is the supervisor flags defining the
- restart strategy and max restart intensity for the
+ restart strategy and maximum restart intensity for the
supervisor. <c>[ChildSpec]</c> is a list of valid child
specifications defining which child processes the supervisor
- shall start and monitor. See the discussion about
- Supervision Principles above.</p>
- <p>Note that when the restart strategy is
+ must start and monitor. See the discussion in section
+ <seealso marker="#supervision_princ">
+ <c>Supervision Principles</c></seealso> earlier.</p>
+ <p>Notice that when the restart strategy is
<c>simple_one_for_one</c>, the list of child specifications
must be a list with one child specification only.
- (The child specification identifier is ignored.) No child process is then started
+ (The child specification identifier is ignored.)
+ No child process is then started
during the initialization phase, but all children are assumed
to be started dynamically using
- <c>supervisor:start_child/2</c>.</p>
- <p>The function may also return <c>ignore</c>.</p>
- <p>Note that this function might also be called as a part of a
- code upgrade procedure. For this reason, the function should
- not have any side effects. See
- <seealso marker="doc/design_principles:appup_cookbook#sup">Design
- Principles</seealso> for more information about code upgrade
- of supervisors.</p>
+ <seealso marker="#start_child/2"><c>start_child/2</c></seealso>.</p>
+ <p>The function can also return <c>ignore</c>.</p>
+ <p>Notice that this function can also be called as a part of a code
+ upgrade procedure. Therefore, the function is not to have any side
+ effects. For more information about code upgrade of supervisors, see
+ section
+ <seealso marker="doc/design_principles:appup_cookbook#sup">Changing
+ a Supervisor</seealso> in OTP Design Principles.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gen_event">gen_event(3)</seealso>,
- <seealso marker="gen_fsm">gen_fsm(3)</seealso>,
- <seealso marker="gen_server">gen_server(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="gen_fsm"><c>gen_fsm(3)</c></seealso>,
+ <seealso marker="gen_statem"><c>gen_statem(3)</c></seealso>,
+ <seealso marker="gen_server"><c>gen_server(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/supervisor_bridge.xml b/lib/stdlib/doc/src/supervisor_bridge.xml
index d356b4b57e..c4c1b37548 100644
--- a/lib/stdlib/doc/src/supervisor_bridge.xml
+++ b/lib/stdlib/doc/src/supervisor_bridge.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -31,73 +31,106 @@
<rev></rev>
</header>
<module>supervisor_bridge</module>
- <modulesummary>Generic Supervisor Bridge Behaviour.</modulesummary>
+ <modulesummary>Generic supervisor bridge behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing a supervisor_bridge, a process
- which connects a subsystem not designed according to the OTP design
- principles to a supervision tree. The supervisor_bridge sits between
+ <p>This behavior module provides a supervisor bridge, a process
+ that connects a subsystem not designed according to the OTP design
+ principles to a supervision tree. The supervisor bridge sits between
a supervisor and the subsystem. It behaves like a real supervisor to
its own supervisor, but has a different interface than a real
- supervisor to the subsystem. Refer to <em>OTP Design Principles</em>
- for more information.</p>
- <p>A supervisor_bridge assumes the functions for starting and stopping
+ supervisor to the subsystem. For more information, see
+ <seealso marker="doc/design_principles:sup_princ">
+ Supervisor Behaviour</seealso> in OTP Design Principles.
+ </p>
+
+ <p>A supervisor bridge assumes the functions for starting and stopping
the subsystem to be located in a callback module exporting a
- pre-defined set of functions.</p>
- <p>The <c>sys</c> module can be used for debugging a
- supervisor_bridge.</p>
- <p>Unless otherwise stated, all functions in this module will fail if
- the specified supervisor_bridge does not exist or if bad arguments are
- given.</p>
+ predefined set of functions.</p>
+
+ <p>The <seealso marker="sys"><c>sys(3)</c></seealso> module can be used
+ for debugging a supervisor bridge.</p>
+
+ <p>Unless otherwise stated, all functions in this module fail if
+ the specified supervisor bridge does not exist or if bad arguments are
+ specified.</p>
</description>
+
<funcs>
<func>
<name name="start_link" arity="2"/>
<name name="start_link" arity="3"/>
<fsummary>Create a supervisor bridge process.</fsummary>
<desc>
- <p>Creates a supervisor_bridge process, linked to the calling
- process, which calls <c><anno>Module</anno>:init/1</c> to start the subsystem.
- To ensure a synchronized start-up procedure, this function does
+ <p>Creates a supervisor bridge process, linked to the calling process,
+ which calls <c><anno>Module</anno>:init/1</c> to start the subsystem.
+ To ensure a synchronized startup procedure, this function does
not return until <c><anno>Module</anno>:init/1</c> has returned.</p>
- <p>If <c><anno>SupBridgeName</anno>={local,<anno>Name</anno>}</c> the supervisor_bridge is
- registered locally as <c><anno>Name</anno></c> using <c>register/2</c>.
- If <c><anno>SupBridgeName</anno>={global,<anno>Name</anno>}</c> the supervisor_bridge is
- registered globally as <c><anno>Name</anno></c> using
- <c>global:register_name/2</c>.
- If <c><anno>SupBridgeName</anno>={via,<anno>Module</anno>,<anno>Name</anno>}</c> the supervisor_bridge is
- registered as <c><anno>Name</anno></c> using a registry represented
- by <anno>Module</anno>. The <c>Module</c> callback should export
- the functions <c>register_name/2</c>, <c>unregister_name/1</c>
- and <c>send/2</c>, which should behave like the
- corresponding functions in <c>global</c>. Thus,
- <c>{via,global,GlobalName}</c> is a valid reference.
- If no name is provided, the supervisor_bridge is not registered.
- If there already exists a process with the specified
- <c><anno>SupBridgeName</anno></c> the function returns
- <c>{error,{already_started,<anno>Pid</anno>}}</c>, where <c><anno>Pid</anno></c> is the pid
- of that process.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c><anno>SupBridgeName</anno>={local,<anno>Name</anno>}</c>,
+ the supervisor bridge is registered locally as
+ <c><anno>Name</anno></c> using <c>register/2</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>SupBridgeName</anno>={global,<anno>Name</anno>}</c>,
+ the supervisor bridge is registered globally as
+ <c><anno>Name</anno></c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If
+ <c><anno>SupBridgeName</anno>={via,<anno>Module</anno>,<anno>Name</anno>}</c>,
+ the supervisor bridge is registered as <c><anno>Name</anno></c>
+ using a registry represented by <anno>Module</anno>. The
+ <c>Module</c> callback is to export functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>, and <c>send/2</c>,
+ which are to behave like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p>If no name is provided, the supervisor bridge is not registered.</p>
<p><c><anno>Module</anno></c> is the name of the callback module.</p>
- <p><c><anno>Args</anno></c> is an arbitrary term which is passed as the argument
- to <c><anno>Module</anno>:init/1</c>.</p>
- <p>If the supervisor_bridge and the subsystem are successfully
- started the function returns <c>{ok,<anno>Pid</anno>}</c>, where <c><anno>Pid</anno></c> is
- is the pid of the supervisor_bridge.</p>
- <p>If <c><anno>Module</anno>:init/1</c> returns <c>ignore</c>, this function
- returns <c>ignore</c> as well and the supervisor_bridge terminates
- with reason <c>normal</c>.
- If <c><anno>Module</anno>:init/1</c> fails or returns an error tuple or an
- incorrect value, this function returns <c>{error,<anno>Error</anno>r}</c> where
- <c><anno>Error</anno></c> is a term with information about the error, and
- the supervisor_bridge terminates with reason <c><anno>Error</anno></c>.</p>
+ <p><c><anno>Args</anno></c> is an arbitrary term that is passed as the
+ argument to <c><anno>Module</anno>:init/1</c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If the supervisor bridge and the subsystem are successfully
+ started, the function returns <c>{ok,<anno>Pid</anno>}</c>, where
+ <c><anno>Pid</anno></c> is is the pid of the supervisor
+ bridge.</p>
+ </item>
+ <item>
+ <p>If there already exists a process with the specified
+ <c><anno>SupBridgeName</anno></c>, the function returns
+ <c>{error,{already_started,<anno>Pid</anno>}}</c>, where
+ <c><anno>Pid</anno></c> is the pid of that process.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Module</anno>:init/1</c> returns <c>ignore</c>, this
+ function returns <c>ignore</c> as well and the supervisor bridge
+ terminates with reason <c>normal</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Module</anno>:init/1</c> fails or returns an error
+ tuple or an incorrect value, this function returns
+ <c>{error,<anno>Error</anno>r}</c>, where
+ <c><anno>Error</anno></c> is a term with information about the
+ error, and the supervisor bridge
+ terminates with reason <c><anno>Error</anno></c>.</p>
+ </item>
+ </list>
</desc>
</func>
</funcs>
<section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions should be exported from a
+ <title>Callback Functions</title>
+ <p>The following functions must be exported from a
<c>supervisor_bridge</c> callback module.</p>
</section>
+
<funcs>
<func>
<name>Module:init(Args) -> Result</name>
@@ -110,25 +143,26 @@
<v>&nbsp;Error = term()</v>
</type>
<desc>
- <p>Whenever a supervisor_bridge is started using
- <c>supervisor_bridge:start_link/2,3</c>, this function is called
+ <p>Whenever a supervisor bridge is started using
+ <seealso marker="#start_link/2"><c>start_link/2,3</c></seealso>,
+ this function is called
by the new process to start the subsystem and initialize.</p>
<p><c>Args</c> is the <c>Args</c> argument provided to the start
function.</p>
- <p>The function should return <c>{ok,Pid,State}</c> where <c>Pid</c>
+ <p>The function is to return <c>{ok,Pid,State}</c>, where <c>Pid</c>
is the pid of the main process in the subsystem and <c>State</c>
is any term.</p>
<p>If later <c>Pid</c> terminates with a reason <c>Reason</c>,
- the supervisor bridge will terminate with reason <c>Reason</c> as
- well.
- If later the supervisor_bridge is stopped by its supervisor with
- reason <c>Reason</c>, it will call
+ the supervisor bridge terminates with reason <c>Reason</c> as well.
+ If later the supervisor bridge is stopped by its supervisor with
+ reason <c>Reason</c>, it calls
<c>Module:terminate(Reason,State)</c> to terminate.</p>
- <p>If something goes wrong during the initialization the function
- should return <c>{error,Error}</c> where <c>Error</c> is any
- term, or <c>ignore</c>.</p>
+ <p>If the initialization fails, the function is to return
+ <c>{error,Error}</c>, where <c>Error</c> is any term,
+ or <c>ignore</c>.</p>
</desc>
</func>
+
<func>
<name>Module:terminate(Reason, State)</name>
<fsummary>Clean up and stop subsystem.</fsummary>
@@ -137,15 +171,15 @@
<v>State = term()</v>
</type>
<desc>
- <p>This function is called by the supervisor_bridge when it is about
- to terminate. It should be the opposite of <c>Module:init/1</c>
+ <p>This function is called by the supervisor bridge when it is about
+ to terminate. It is to be the opposite of <c>Module:init/1</c>
and stop the subsystem and do any necessary cleaning up.
The return value is ignored.</p>
- <p><c>Reason</c> is <c>shutdown</c> if the supervisor_bridge is
- terminated by its supervisor. If the supervisor_bridge terminates
+ <p><c>Reason</c> is <c>shutdown</c> if the supervisor bridge is
+ terminated by its supervisor. If the supervisor bridge terminates
because a a linked process (apart from the main process of
the subsystem) has terminated with reason <c>Term</c>,
- <c>Reason</c> will be <c>Term</c>.</p>
+ then <c>Reason</c> becomes <c>Term</c>.</p>
<p><c>State</c> is taken from the return value of
<c>Module:init/1</c>.</p>
</desc>
@@ -153,9 +187,9 @@
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="supervisor">supervisor(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/sys.xml b/lib/stdlib/doc/src/sys.xml
index d400f72e1d..1120b926d5 100644
--- a/lib/stdlib/doc/src/sys.xml
+++ b/lib/stdlib/doc/src/sys.xml
@@ -30,62 +30,67 @@
<checked></checked>
<date>1996-06-06</date>
<rev></rev>
- <file>sys.sgml</file>
+ <file>sys.xml</file>
</header>
<module>sys</module>
- <modulesummary>A Functional Interface to System Messages</modulesummary>
+ <modulesummary>A functional interface to system messages.</modulesummary>
<description>
- <p>This module contains functions for sending system messages used by programs, and messages used for debugging purposes.
- </p>
- <p>Functions used for implementation of processes
- should also understand system messages such as debugging
- messages and code change. These functions must be used to implement the use of system messages for a process; either directly, or through standard behaviours, such as <c>gen_server</c>.</p>
- <p>The default timeout is 5000 ms, unless otherwise specified. The
- <c>timeout</c> defines the time period to wait for the process to
+ <p>This module contains functions for sending system messages used by
+ programs, and messages used for debugging purposes.</p>
+ <p>Functions used for implementation of processes are also expected to
+ understand system messages, such as debug messages and code change. These
+ functions must be used to implement the use of system messages for a
+ process; either directly, or through standard behaviors, such as
+ <seealso marker="gen_server"><c>gen_server</c></seealso>.</p>
+ <p>The default time-out is 5000 ms, unless otherwise specified.
+ <c>timeout</c> defines the time to wait for the process to
respond to a request. If the process does not respond, the
function evaluates <c>exit({timeout, {M, F, A}})</c>.
</p>
- <p><marker id="dbg_opt"/>The functions make reference to a debug structure.
- The debug structure is a list of <c>dbg_opt()</c>.
- <c>dbg_opt()</c> is an internal data type used by the
- <c>handle_system_msg/6</c> function. No debugging is performed if it is an empty list.
- </p>
+ <marker id="dbg_opt"/>
+ <p>The functions make references to a debug structure.
+ The debug structure is a list of <c>dbg_opt()</c>, which is an internal
+ data type used by function <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso>. No debugging is performed if it is
+ an empty list.</p>
</description>
<section>
<title>System Messages</title>
- <p>Processes which are not implemented as one of the standard
- behaviours must still understand system
- messages. There are three different messages which must be
- understood:
- </p>
+ <p>Processes that are not implemented as one of the standard
+ behaviors must still understand system messages. The following
+ three messages must be understood:</p>
<list type="bulleted">
<item>
<p>Plain system messages. These are received as
<c>{system, From, Msg}</c>. The content and meaning of
this message are not interpreted by the
- receiving process module. When a system message has been
- received, the function <c>sys:handle_system_msg/6</c>
- is called in order to handle the request.
- </p>
+ receiving process module. When a system message is received, function
+ <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso>
+ is called to handle the request.</p>
</item>
<item>
<p>Shutdown messages. If the process traps exits, it must
- be able to handle an shut-down request from its parent, the
+ be able to handle a shutdown request from its parent, the
supervisor. The message <c>{'EXIT', Parent, Reason}</c>
- from the parent is an order to terminate. The process must terminate when this message is received, normally with the
+ from the parent is an order to terminate. The process must
+ terminate when this message is received, normally with the
same <c>Reason</c> as <c>Parent</c>.
</p>
</item>
<item>
- <p>There is one more message which the process must understand if the modules used to implement the process change dynamically during runtime. An example of such a process is the <c>gen_event</c> processes. This message is <c>{get_modules, From}</c>. The reply to this message is <c>From ! {modules, Modules}</c>,
- where <c>Modules</c> is a list of the currently active modules in the process.
- </p>
+ <p>If the modules used to implement the process change dynamically
+ during runtime, the process must understand one more message. An
+ example is the <seealso marker="gen_event"><c>gen_event</c></seealso>
+ processes. The message is <c>{get_modules, From}</c>.
+ The reply to this message is <c>From ! {modules, Modules}</c>, where
+ <c>Modules</c> is a list of the currently active modules in the
+ process.</p>
<p>This message is used by the release handler to find which
- processes execute a certain module. The process may at a
- later time be suspended and ordered to perform a code change
- for one of its modules.
- </p>
+ processes that execute a certain module. The process can later be
+ suspended and ordered to perform a code change for one of its
+ modules.</p>
</item>
</list>
</section>
@@ -93,15 +98,16 @@
<section>
<title>System Events</title>
<p>When debugging a process with the functions of this
- module, the process generates <em>system_events</em> which are
+ module, the process generates <em>system_events</em>, which are
then treated in the debug function. For example, <c>trace</c>
- formats the system events to the tty.
+ formats the system events to the terminal.
</p>
- <p>There are three predefined system events which are used when a
+ <p>Three predefined system events are used when a
process receives or sends a message. The process can also define its
own system events. It is always up to the process itself
to format these events.</p>
</section>
+
<datatypes>
<datatype>
<name name="name"/>
@@ -111,7 +117,7 @@
</datatype>
<datatype>
<name name="dbg_opt"/>
- <desc><p>See <seealso marker="#dbg_opt">above</seealso>.</p></desc>
+ <desc><p>See the introduction of this manual page.</p></desc>
</datatype>
<datatype>
<name name="dbg_fun"/>
@@ -120,410 +126,594 @@
<name name="format_fun"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="log" arity="2"/>
- <name name="log" arity="3"/>
- <fsummary>Log system events in memory</fsummary>
- <desc>
- <p>Turns the logging of system events On or Off. If On, a
- maximum of <c><anno>N</anno></c> events are kept in the
- debug structure (the default is 10). If <c><anno>Flag</anno></c> is <c>get</c>, a list of all
- logged events is returned. If <c><anno>Flag</anno></c> is <c>print</c>, the
- logged events are printed to <c>standard_io</c>. The events are
- formatted with a function that is defined by the process that
- generated the event (with a call to
- <c>sys:handle_debug/4</c>).</p>
- </desc>
- </func>
- <func>
- <name name="log_to_file" arity="2"/>
- <name name="log_to_file" arity="3"/>
- <fsummary>Log system events to the specified file</fsummary>
- <desc>
- <p>Enables or disables the logging of all system events in textual
- format to the file. The events are formatted with a function that is
- defined by the process that generated the event (with a call
- to <c>sys:handle_debug/4</c>).</p>
- </desc>
- </func>
- <func>
- <name name="statistics" arity="2"/>
- <name name="statistics" arity="3"/>
- <fsummary>Enable or disable the collections of statistics</fsummary>
+ <name name="change_code" arity="4"/>
+ <name name="change_code" arity="5"/>
+ <fsummary>Send the code change system message to the process.</fsummary>
<desc>
- <p>Enables or disables the collection of statistics. If <c><anno>Flag</anno></c> is
- <c>get</c>, the statistical collection is returned.</p>
+ <p>Tells the process to change code. The process must be
+ suspended to handle this message. Argument <c><anno>Extra</anno></c>
+ is reserved for each process to use as its own. Function
+ <c><anno>Module</anno>:system_code_change/4</c> is called.
+ <c><anno>OldVsn</anno></c> is the old version of the
+ <c><anno>Module</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="trace" arity="2"/>
- <name name="trace" arity="3"/>
- <fsummary>Print all system events on <c>standard_io</c></fsummary>
+ <name name="get_state" arity="1"/>
+ <name name="get_state" arity="2"/>
+ <fsummary>Get the state of the process.</fsummary>
<desc>
- <p>Prints all system events on <c>standard_io</c>. The events are
- formatted with a function that is defined by the process that
- generated the event (with a call to
- <c>sys:handle_debug/4</c>).</p>
+ <p>Gets the state of the process.</p>
+ <note>
+ <p>These functions are intended only to help with debugging. They are
+ provided for convenience, allowing developers to avoid having to
+ create their own state extraction functions and also avoid having
+ to interactively extract the state from the return values of
+ <seealso marker="#get_status-1"><c>get_status/1</c></seealso> or
+ <seealso marker="#get_status-2"><c>get_status/2</c></seealso>
+ while debugging.</p>
+ </note>
+ <p>The value of <c><anno>State</anno></c> varies for different types of
+ processes, as follows:</p>
+ <list type="bulleted">
+ <item>
+ <p>For a
+ <seealso marker="gen_server"><c>gen_server</c></seealso>
+ process, the returned <c><anno>State</anno></c>
+ is the state of the callback module.</p>
+ </item>
+ <item>
+ <p>For a
+ <seealso marker="gen_fsm"><c>gen_fsm</c></seealso>
+ process, <c><anno>State</anno></c> is the tuple
+ <c>{CurrentStateName, CurrentStateData}</c>.</p>
+ </item>
+ <item>
+ <p>For a
+ <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ process, <c><anno>State</anno></c> is the tuple
+ <c>{CurrentState,CurrentData}</c>.</p>
+ </item>
+ <item>
+ <p>For a
+ <seealso marker="gen_event"><c>gen_event</c></seealso>
+ process, <c><anno>State</anno></c> is a list of tuples,
+ where each tuple corresponds to an event handler registered
+ in the process and contains <c>{Module, Id, HandlerState}</c>,
+ as follows:</p>
+ <taglist>
+ <tag><c>Module</c></tag>
+ <item>
+ <p>The module name of the event handler.</p>
+ </item>
+ <tag><c>Id</c></tag>
+ <item>
+ <p>The ID of the handler (which is <c>false</c> if it was
+ registered without an ID).</p>
+ </item>
+ <tag><c>HandlerState</c></tag>
+ <item>
+ <p>The state of the handler.</p>
+ </item>
+ </taglist>
+ </item>
+ </list>
+ <p>If the callback module exports a function <c>system_get_state/1</c>,
+ it is called in the target process to get its state. Its argument is
+ the same as the <c>Misc</c> value returned by
+ <seealso marker="#get_status-1"><c>get_status/1,2</c></seealso>, and
+ function <seealso marker="#Module:system_get_state/1">
+ <c>Module:system_get_state/1</c></seealso> is expected to extract the
+ state of the callback module from it. Function
+ <c>system_get_state/1</c> must return <c>{ok, State}</c>, where
+ <c>State</c> is the state of the callback module.</p>
+ <p>If the callback module does not export a <c>system_get_state/1</c>
+ function, <c>get_state/1,2</c> assumes that the <c>Misc</c> value is
+ the state of the callback module and returns it directly instead.</p>
+ <p>If the callback module's <c>system_get_state/1</c> function crashes
+ or throws an exception, the caller exits with error
+ <c>{callback_failed, {Module, system_get_state}, {Class, Reason}}</c>,
+ where <c>Module</c> is the name of the callback module and
+ <c>Class</c> and <c>Reason</c> indicate details of the exception.</p>
+ <p>Function <c>system_get_state/1</c> is primarily useful for
+ user-defined behaviors and modules that implement OTP
+ <seealso marker="#special_process">special processes</seealso>.
+ The <c>gen_server</c>, <c>gen_fsm</c>,
+ <c>gen_statem</c>, and <c>gen_event</c> OTP
+ behavior modules export this function, so callback modules for those
+ behaviors need not to supply their own.</p>
+ <p>For more information about a process, including its state, see
+ <seealso marker="#get_status-1"><c>get_status/1</c></seealso> and
+ <seealso marker="#get_status-2"><c>get_status/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="no_debug" arity="1"/>
- <name name="no_debug" arity="2"/>
- <fsummary>Turn off debugging</fsummary>
+ <name name="get_status" arity="1"/>
+ <name name="get_status" arity="2"/>
+ <fsummary>Get the status of the process.</fsummary>
<desc>
- <p>Turns off all debugging for the process. This includes
- functions that have been installed explicitly with the
- <c>install</c> function, for example triggers.</p>
+ <p>Gets the status of the process.</p>
+ <p>The value of <c><anno>Misc</anno></c> varies for different types of
+ processes, for example:</p>
+ <list type="bulleted">
+ <item>
+ <p>A <seealso marker="gen_server"><c>gen_server</c></seealso>
+ process returns the state of the callback module.</p>
+ </item>
+ <item>
+ <p>A <seealso marker="gen_fsm"><c>gen_fsm</c></seealso>
+ process returns information, such as its current
+ state name and state data.</p>
+ </item>
+ <item>
+ <p>A <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ process returns information, such as its current
+ state name and state data.</p>
+ </item>
+ <item>
+ <p>A <seealso marker="gen_event"><c>gen_event</c></seealso>
+ process returns information about each of its
+ registered handlers.</p>
+ </item>
+ </list>
+ <p>Callback modules for <c>gen_server</c>,
+ <c>gen_fsm</c>, <c>gen_statem</c>, and <c>gen_event</c>
+ can also change the value of <c><anno>Misc</anno></c>
+ by exporting a function <c>format_status/2</c>, which contributes
+ module-specific information. For details, see
+ <seealso marker="gen_server#Module:format_status/2">
+ <c>gen_server:format_status/2</c></seealso>,
+ <seealso marker="gen_fsm#Module:format_status/2">
+ <c>gen_fsm:format_status/2</c></seealso>,
+ <seealso marker="gen_statem#Module:format_status/2">
+ <c>gen_statem:format_status/2</c></seealso>, and
+ <seealso marker="gen_event#Module:format_status/2">
+ <c>gen_event:format_status/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="suspend" arity="1"/>
- <name name="suspend" arity="2"/>
- <fsummary>Suspend the process</fsummary>
+ <name name="install" arity="2"/>
+ <name name="install" arity="3"/>
+ <fsummary>Install a debug function in the process.</fsummary>
<desc>
- <p>Suspends the process. When the process is suspended, it
- will only respond to other system messages, but not other
- messages.</p>
+ <p>Enables installation of alternative debug functions. An example of
+ such a function is a trigger, a function that waits for some
+ special event and performs some action when the event is
+ generated. For example, turning on low-level tracing.</p>
+ <p><c><anno>Func</anno></c> is called whenever a system event is
+ generated. This function is to return <c>done</c>, or a new
+ <c>Func</c> state. In the first case, the function is removed. It is
+ also removed if the function fails.</p>
</desc>
</func>
+
<func>
- <name name="resume" arity="1"/>
- <name name="resume" arity="2"/>
- <fsummary>Resume a suspended process</fsummary>
+ <name name="log" arity="2"/>
+ <name name="log" arity="3"/>
+ <fsummary>Log system events in memory.</fsummary>
<desc>
- <p>Resumes a suspended process.</p>
+ <p>Turns the logging of system events on or off. If on, a
+ maximum of <c><anno>N</anno></c> events are kept in the
+ debug structure (default is 10).</p>
+ <p>If <c><anno>Flag</anno></c> is <c>get</c>, a list of all logged
+ events is returned.</p>
+ <p>If <c><anno>Flag</anno></c> is <c>print</c>, the logged events
+ are printed to <c>standard_io</c>.</p>
+ <p>The events are formatted with a function that is defined by the
+ process that generated the event (with a call to
+ <seealso marker="#handle_debug/4">
+ <c>handle_debug/4</c>)</seealso>.</p>
</desc>
</func>
+
<func>
- <name name="change_code" arity="4"/>
- <name name="change_code" arity="5"/>
- <fsummary>Send the code change system message to the process</fsummary>
+ <name name="log_to_file" arity="2"/>
+ <name name="log_to_file" arity="3"/>
+ <fsummary>Log system events to the specified file.</fsummary>
<desc>
- <p>Tells the process to change code. The process must be
- suspended to handle this message. The <c><anno>Extra</anno></c> argument is
- reserved for each process to use as its own. The function
- <c><anno>Module</anno>:system_code_change/4</c> is called. <c><anno>OldVsn</anno></c> is
- the old version of the <c><anno>Module</anno></c>.</p>
+ <p>Enables or disables the logging of all system events in text
+ format to the file. The events are formatted with a function that is
+ defined by the process that generated the event (with a call to
+ <seealso marker="#handle_debug/4"><c>handle_debug/4</c></seealso>).
+ </p>
</desc>
</func>
+
<func>
- <name name="get_status" arity="1"/>
- <name name="get_status" arity="2"/>
- <fsummary>Get the status of the process</fsummary>
+ <name name="no_debug" arity="1"/>
+ <name name="no_debug" arity="2"/>
+ <fsummary>Turn off debugging.</fsummary>
<desc>
- <p>Gets the status of the process.</p>
- <p>The value of <c><anno>Misc</anno></c> varies for different types of
- processes. For example, a <c>gen_server</c> process returns
- the callback module's state, a <c>gen_fsm</c> process
- returns information such as its current state name and state data,
- and a <c>gen_event</c> process returns information about each of its
- registered handlers. Callback modules for <c>gen_server</c>,
- <c>gen_fsm</c>, and <c>gen_event</c> can also customise the value
- of <c><anno>Misc</anno></c> by exporting a <c>format_status/2</c>
- function that contributes module-specific information;
- see <seealso marker="gen_server#Module:format_status/2">gen_server:format_status/2</seealso>,
- <seealso marker="gen_fsm#Module:format_status/2">gen_fsm:format_status/2</seealso>, and
- <seealso marker="gen_event#Module:format_status/2">gen_event:format_status/2</seealso>
- for more details.</p>
+ <p>Turns off all debugging for the process. This includes
+ functions that are installed explicitly with function
+ <seealso marker="#install/2"><c>install/2,3</c></seealso>,
+ for example, triggers.</p>
</desc>
</func>
+
<func>
- <name name="get_state" arity="1"/>
- <name name="get_state" arity="2"/>
- <fsummary>Get the state of the process</fsummary>
+ <name name="remove" arity="2"/>
+ <name name="remove" arity="3"/>
+ <fsummary>Remove a debug function from the process.</fsummary>
<desc>
- <p>Gets the state of the process.</p>
- <note>
- <p>These functions are intended only to help with debugging. They are provided for
- convenience, allowing developers to avoid having to create their own state extraction
- functions and also avoid having to interactively extract state from the return values of
- <seealso marker="#get_status-1"><c>get_status/1</c></seealso> or
- <seealso marker="#get_status-2"><c>get_status/2</c></seealso> while debugging.</p>
- </note>
- <p>The value of <c><anno>State</anno></c> varies for different types of
- processes. For a <c>gen_server</c> process, the returned <c><anno>State</anno></c>
- is simply the callback module's state. For a <c>gen_fsm</c> process,
- <c><anno>State</anno></c> is the tuple <c>{CurrentStateName, CurrentStateData}</c>.
- For a <c>gen_event</c> process, <c><anno>State</anno></c> a list of tuples,
- where each tuple corresponds to an event handler registered in the process and contains
- <c>{Module, Id, HandlerState}</c>, where <c>Module</c> is the event handler's module name,
- <c>Id</c> is the handler's ID (which is the value <c>false</c> if it was registered without
- an ID), and <c>HandlerState</c> is the handler's state.</p>
- <p>If the callback module exports a <c>system_get_state/1</c> function, it will be called in the
- target process to get its state. Its argument is the same as the <c>Misc</c> value returned by
- <seealso marker="#get_status-1">get_status/1,2</seealso>, and the <c>system_get_state/1</c>
- function is expected to extract the callback module's state from it. The <c>system_get_state/1</c>
- function must return <c>{ok, State}</c> where <c>State</c> is the callback module's state.</p>
- <p>If the callback module does not export a <c>system_get_state/1</c> function, <c>get_state/1,2</c>
- assumes the <c>Misc</c> value is the callback module's state and returns it directly instead.</p>
- <p>If the callback module's <c>system_get_state/1</c> function crashes or throws an exception, the
- caller exits with error <c>{callback_failed, {Module, system_get_state}, {Class, Reason}}</c> where
- <c>Module</c> is the name of the callback module and <c>Class</c> and <c>Reason</c> indicate
- details of the exception.</p>
- <p>The <c>system_get_state/1</c> function is primarily useful for user-defined
- behaviours and modules that implement OTP <seealso marker="#special_process">special
- processes</seealso>. The <c>gen_server</c>, <c>gen_fsm</c>, and <c>gen_event</c> OTP
- behaviour modules export this function, and so callback modules for those behaviours
- need not supply their own.</p>
- <p>To obtain more information about a process, including its state, see
- <seealso marker="#get_status-1">get_status/1</seealso> and
- <seealso marker="#get_status-2">get_status/2</seealso>.</p>
+ <p>Removes an installed debug function from the
+ process. <c><anno>Func</anno></c> must be the same as previously
+ installed.</p>
</desc>
</func>
+
<func>
<name name="replace_state" arity="2"/>
<name name="replace_state" arity="3"/>
- <fsummary>Replace the state of the process</fsummary>
+ <fsummary>Replace the state of the process.</fsummary>
<desc>
<p>Replaces the state of the process, and returns the new state.</p>
<note>
- <p>These functions are intended only to help with debugging, and they should not be
- be called from normal code. They are provided for convenience, allowing developers
- to avoid having to create their own custom state replacement functions.</p>
+ <p>These functions are intended only to help with debugging, and are
+ not to be called from normal code. They are provided for
+ convenience, allowing developers to avoid having to create their own
+ custom state replacement functions.</p>
</note>
- <p>The <c><anno>StateFun</anno></c> function provides a new state for the process.
- The <c><anno>State</anno></c> argument and <c><anno>NewState</anno></c> return value
- of <c><anno>StateFun</anno></c> vary for different types of processes. For a
- <c>gen_server</c> process, <c><anno>State</anno></c> is simply the callback module's
- state, and <c><anno>NewState</anno></c> is a new instance of that state. For a
- <c>gen_fsm</c> process, <c><anno>State</anno></c> is the tuple
- <c>{CurrentStateName, CurrentStateData}</c>, and <c><anno>NewState</anno></c>
- is a similar tuple that may contain a new state name, new state data, or both.
- For a <c>gen_event</c> process, <c><anno>State</anno></c> is the tuple
- <c>{Module, Id, HandlerState}</c> where <c>Module</c> is the event handler's module name,
- <c>Id</c> is the handler's ID (which is the value <c>false</c> if it was registered without
- an ID), and <c>HandlerState</c> is the handler's state. <c><anno>NewState</anno></c> is a
- similar tuple where <c>Module</c> and <c>Id</c> shall have the same values as in
- <c><anno>State</anno></c> but the value of <c>HandlerState</c> may be different. Returning
- a <c><anno>NewState</anno></c> whose <c>Module</c> or <c>Id</c> values differ from those of
- <c><anno>State</anno></c> will result in the event handler's state remaining unchanged. For a
- <c>gen_event</c> process, <c><anno>StateFun</anno></c> is called once for each event handler
- registered in the <c>gen_event</c> process.</p>
- <p>If a <c><anno>StateFun</anno></c> function decides not to effect any change in process
- state, then regardless of process type, it may simply return its <c><anno>State</anno></c>
- argument.</p>
- <p>If a <c><anno>StateFun</anno></c> function crashes or throws an exception, then
- for <c>gen_server</c> and <c>gen_fsm</c> processes, the original state of the process is
- unchanged. For <c>gen_event</c> processes, a crashing or failing <c><anno>StateFun</anno></c>
- function means that only the state of the particular event handler it was working on when it
- failed or crashed is unchanged; it can still succeed in changing the states of other event
+ <p>Function <c><anno>StateFun</anno></c> provides a new state for the
+ process. Argument <c><anno>State</anno></c> and the
+ <c><anno>NewState</anno></c> return value of
+ <c><anno>StateFun</anno></c> vary for different types of
+ processes as follows:</p>
+ <list type="bulleted">
+ <item>
+ <p>For a <seealso marker="gen_server"><c>gen_server</c></seealso>
+ process, <c><anno>State</anno></c> is the state of the callback
+ module and <c><anno>NewState</anno></c>
+ is a new instance of that state.</p>
+ </item>
+ <item>
+ <p>For a <seealso marker="gen_fsm"><c>gen_fsm</c></seealso> process,
+ <c><anno>State</anno></c> is the tuple <c>{CurrentStateName,
+ CurrentStateData}</c>, and <c><anno>NewState</anno></c> is a
+ similar tuple, which can contain
+ a new state name, new state data, or both.</p>
+ </item>
+ <item>
+ <p>For a <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ process, <c><anno>State</anno></c> is the
+ tuple <c>{CurrentState,CurrentData}</c>,
+ and <c><anno>NewState</anno></c> is a
+ similar tuple, which can contain
+ a new current state, new state data, or both.</p>
+ </item>
+ <item>
+ <p>For a <seealso marker="gen_event"><c>gen_event</c></seealso>
+ process, <c><anno>State</anno></c> is the
+ tuple <c>{Module, Id, HandlerState}</c> as follows:</p>
+ <taglist>
+ <tag><c>Module</c></tag>
+ <item>
+ <p>The module name of the event handler.</p>
+ </item>
+ <tag><c>Id</c></tag>
+ <item>
+ <p>The ID of the handler (which is <c>false</c> if it was
+ registered without an ID).</p>
+ </item>
+ <tag><c>HandlerState</c></tag>
+ <item>
+ <p>The state of the handler.</p>
+ </item>
+ </taglist>
+ <p><c><anno>NewState</anno></c> is a similar tuple where
+ <c>Module</c> and <c>Id</c> are to have the same values as in
+ <c><anno>State</anno></c>, but the value of <c>HandlerState</c>
+ can be different. Returning a <c><anno>NewState</anno></c>, whose
+ <c>Module</c> or <c>Id</c> values differ from those of
+ <c><anno>State</anno></c>, leaves the state of the event handler
+ unchanged. For a <c>gen_event</c> process,
+ <c><anno>StateFun</anno></c> is called once for each event handler
+ registered in the <c>gen_event</c> process.</p>
+ </item>
+ </list>
+ <p>If a <c><anno>StateFun</anno></c> function decides not to effect any
+ change in process state, then regardless of process type, it can
+ return its <c><anno>State</anno></c> argument.</p>
+ <p>If a <c><anno>StateFun</anno></c> function crashes or throws an
+ exception, the original state of the process is unchanged for
+ <c>gen_server</c>, <c>gen_fsm</c>, and <c>gen_statem</c> processes.
+ For <c>gen_event</c> processes, a crashing or
+ failing <c><anno>StateFun</anno></c> function
+ means that only the state of the particular event handler it was
+ working on when it failed or crashed is unchanged; it can still
+ succeed in changing the states of other event
handlers registered in the same <c>gen_event</c> process.</p>
- <p>If the callback module exports a <c>system_replace_state/2</c> function, it will be called in the
- target process to replace its state using <c>StateFun</c>. Its two arguments are <c>StateFun</c>
- and <c>Misc</c>, where <c>Misc</c> is the same as the <c>Misc</c> value returned by
- <seealso marker="#get_status-1">get_status/1,2</seealso>. A <c>system_replace_state/2</c> function
- is expected to return <c>{ok, NewState, NewMisc}</c> where <c>NewState</c> is the callback module's
- new state obtained by calling <c>StateFun</c>, and <c>NewMisc</c> is a possibly new value used to
- replace the original <c>Misc</c> (required since <c>Misc</c> often contains the callback
- module's state within it).</p>
- <p>If the callback module does not export a <c>system_replace_state/2</c> function,
- <c>replace_state/2,3</c> assumes the <c>Misc</c> value is the callback module's state, passes it
- to <c>StateFun</c> and uses the return value as both the new state and as the new value of
- <c>Misc</c>.</p>
- <p>If the callback module's <c>system_replace_state/2</c> function crashes or throws an exception,
- the caller exits with error <c>{callback_failed, {Module, system_replace_state}, {Class, Reason}}</c>
- where <c>Module</c> is the name of the callback module and <c>Class</c> and <c>Reason</c> indicate details
- of the exception. If the callback module does not provide a <c>system_replace_state/2</c> function and
- <c>StateFun</c> crashes or throws an exception, the caller exits with error
+ <p>If the callback module exports a
+ <seealso marker="#Module:system_replace_state/2">
+ <c>system_replace_state/2</c></seealso> function, it is called in the
+ target process to replace its state using <c>StateFun</c>. Its two
+ arguments are <c>StateFun</c> and <c>Misc</c>, where
+ <c>Misc</c> is the same as the <c>Misc</c> value returned by
+ <seealso marker="#get_status-1"><c>get_status/1,2</c></seealso>.
+ A <c>system_replace_state/2</c> function is expected to return
+ <c>{ok, NewState, NewMisc}</c>, where <c>NewState</c> is the new state
+ of the callback module, obtained by calling <c>StateFun</c>, and
+ <c>NewMisc</c> is
+ a possibly new value used to replace the original <c>Misc</c>
+ (required as <c>Misc</c> often contains the state of the callback
+ module within it).</p>
+ <p>If the callback module does not export a
+ <c>system_replace_state/2</c> function,
+ <seealso marker="#replace_state/2"><c>replace_state/2,3</c></seealso>
+ assumes that <c>Misc</c> is the state of the callback module,
+ passes it to <c>StateFun</c> and uses the return value as
+ both the new state and as the new value of <c>Misc</c>.</p>
+ <p>If the callback module's function <c>system_replace_state/2</c>
+ crashes or throws an exception, the caller exits with error
+ <c>{callback_failed, {Module, system_replace_state}, {Class,
+ Reason}}</c>, where <c>Module</c> is the name of the callback module
+ and <c>Class</c> and <c>Reason</c> indicate details of the exception.
+ If the callback module does not provide a
+ <c>system_replace_state/2</c> function and <c>StateFun</c> crashes or
+ throws an exception, the caller exits with error
<c>{callback_failed, StateFun, {Class, Reason}}</c>.</p>
- <p>The <c>system_replace_state/2</c> function is primarily useful for user-defined behaviours and
- modules that implement OTP <seealso marker="#special_process">special processes</seealso>. The
- <c>gen_server</c>, <c>gen_fsm</c>, and <c>gen_event</c> OTP behaviour modules export this function,
- and so callback modules for those behaviours need not supply their own.</p>
+ <p>Function <c>system_replace_state/2</c> is primarily useful for
+ user-defined behaviors and modules that implement OTP
+ <seealso marker="#special_process">special processes</seealso>. The
+ OTP behavior modules <c>gen_server</c>,
+ <c>gen_fsm</c>, <c>gen_statem</c>, and <c>gen_event</c>
+ export this function, so callback modules for those
+ behaviors need not to supply their own.</p>
</desc>
</func>
+
<func>
- <name name="install" arity="2"/>
- <name name="install" arity="3"/>
- <fsummary>Install a debug function in the process</fsummary>
+ <name name="resume" arity="1"/>
+ <name name="resume" arity="2"/>
+ <fsummary>Resume a suspended process.</fsummary>
<desc>
- <p>This function makes it possible to install other debug
- functions than the ones defined above. An example of such a
- function is a trigger, a function that waits for some
- special event and performs some action when the event is
- generated. This could, for example, be turning on low level tracing.
- </p>
- <p><c><anno>Func</anno></c> is called whenever a system event is
- generated. This function should return <c>done</c>, or a new
- func state. In the first case, the function is removed. It is removed
- if the function fails.</p>
+ <p>Resumes a suspended process.</p>
</desc>
</func>
+
<func>
- <name name="remove" arity="2"/>
- <name name="remove" arity="3"/>
- <fsummary>Remove a debug function from the process</fsummary>
+ <name name="statistics" arity="2"/>
+ <name name="statistics" arity="3"/>
+ <fsummary>Enable or disable the collections of statistics.</fsummary>
<desc>
- <p>Removes a previously installed debug function from the
- process. <c><anno>Func</anno></c> must be the same as previously
- installed.</p>
+ <p>Enables or disables the collection of statistics. If
+ <c><anno>Flag</anno></c> is <c>get</c>,
+ the statistical collection is returned.</p>
</desc>
</func>
+
+ <func>
+ <name name="suspend" arity="1"/>
+ <name name="suspend" arity="2"/>
+ <fsummary>Suspend the process.</fsummary>
+ <desc>
+ <p>Suspends the process. When the process is suspended, it
+ only responds to other system messages, but not other
+ messages.</p>
+ </desc>
+ </func>
+
<func>
<name name="terminate" arity="2"/>
<name name="terminate" arity="3"/>
- <fsummary>Terminate the process</fsummary>
+ <fsummary>Terminate the process.</fsummary>
<desc>
- <p>This function orders the process to terminate with the
- given <c><anno>Reason</anno></c>. The termination is done
- asynchronously, so there is no guarantee that the process is
- actually terminated when the function returns.</p>
+ <p>Orders the process to terminate with the
+ specified <c><anno>Reason</anno></c>. The termination is done
+ asynchronously, so it is not guaranteed that the process is
+ terminated when the function returns.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="trace" arity="2"/>
+ <name name="trace" arity="3"/>
+ <fsummary>Print all system events on <c>standard_io</c>.</fsummary>
+ <desc>
+ <p>Prints all system events on <c>standard_io</c>. The events are
+ formatted with a function that is defined by the process that
+ generated the event (with a call to
+ <seealso marker="#handle_debug/4"><c>handle_debug/4</c></seealso>).
+ </p>
</desc>
</func>
</funcs>
<section>
<title>Process Implementation Functions</title>
- <p><marker id="special_process"/>The following functions are used when implementing a
- special process. This is an ordinary process which does not use a
- standard behaviour, but a process which understands the standard system messages.</p>
+ <marker id="special_process"/>
+ <p>The following functions are used when implementing a
+ special process. This is an ordinary process, which does not use a
+ standard behavior, but a process that understands the standard system
+ messages.</p>
</section>
+
<funcs>
<func>
<name name="debug_options" arity="1"/>
- <fsummary>Convert a list of options to a debug structure</fsummary>
+ <fsummary>Convert a list of options to a debug structure.</fsummary>
<desc>
- <p>This function can be used by a process that initiates a debug
- structure from a list of options. The values of the
- <c><anno>Opt</anno></c> argument are the same as the corresponding
+ <p>Can be used by a process that initiates a debug
+ structure from a list of options. The values of argument
+ <c><anno>Opt</anno></c> are the same as for the corresponding
functions.</p>
</desc>
</func>
+
<func>
<name name="get_debug" arity="3"/>
- <fsummary>Get the data associated with a debug option</fsummary>
+ <fsummary>Get the data associated with a debug option.</fsummary>
<desc>
- <p>This function gets the data associated with a debug option. <c><anno>Default</anno></c> is returned if the
- <c><anno>Item</anno></c> is not found. Can be
- used by the process to retrieve debug data for printing
- before it terminates.</p>
+ <p>Gets the data associated with a debug option.
+ <c><anno>Default</anno></c>
+ is returned if <c><anno>Item</anno></c> is not found. Can be
+ used by the process to retrieve debug data for printing before it
+ terminates.</p>
</desc>
</func>
+
<func>
<name name="handle_debug" arity="4"/>
- <fsummary>Generate a system event</fsummary>
+ <fsummary>Generate a system event.</fsummary>
<desc>
<p>This function is called by a process when it generates a
- system event. <c><anno>FormFunc</anno></c> is a formatting
- function which is called as <c><anno>FormFunc</anno>(Device,
- <anno>Event</anno>, <anno>Extra</anno>)</c> in order to print
- the events, which is necessary if tracing is activated.
- <c><anno>Extra</anno></c> is any extra information which the
- process needs in the format function, for example the name
- of the process.</p>
+ system event. <c><anno>FormFunc</anno></c> is a formatting
+ function, called as <c><anno>FormFunc</anno>(Device,
+ <anno>Event</anno>, <anno>Extra</anno>)</c> to print the events,
+ which is necessary if tracing is activated.
+ <c><anno>Extra</anno></c> is any extra information that the
+ process needs in the format function, for example, the process
+ name.</p>
</desc>
</func>
+
<func>
<name name="handle_system_msg" arity="6"/>
- <fsummary>Take care of system messages</fsummary>
+ <fsummary>Take care of system messages.</fsummary>
<desc>
- <p>This function is used by a process module that wishes to take care of system
- messages. The process receives a <c>{system, <anno>From</anno>, <anno>Msg</anno>}</c>
- message and passes the <c><anno>Msg</anno></c> and <c><anno>From</anno></c> to this
- function.
- </p>
- <p>This function <em>never</em> returns. It calls the function
- <c><anno>Module</anno>:system_continue(<anno>Parent</anno>, NDebug, <anno>Misc</anno>)</c> where the
- process continues the execution, or
- <c><anno>Module</anno>:system_terminate(Reason, <anno>Parent</anno>, <anno>Debug</anno>, <anno>Misc</anno>)</c> if
- the process should terminate. The <c><anno>Module</anno></c> must export
- <c>system_continue/3</c>, <c>system_terminate/4</c>,
- <c>system_code_change/4</c>, <c>system_get_state/1</c> and
- <c>system_replace_state/2</c> (see below).
- </p>
- <p>The <c><anno>Misc</anno></c> argument can be used to save internal data
- in a process, for example its state. It is sent to
+ <p>This function is used by a process module to take care of system
+ messages. The process receives a
+ <c>{system, <anno>From</anno>, <anno>Msg</anno>}</c> message and
+ passes <c><anno>Msg</anno></c> and <c><anno>From</anno></c> to this
+ function.</p>
+ <p>This function <em>never</em> returns. It calls either of the
+ following functions:</p>
+ <list type="bulleted">
+ <item>
+ <p><c><anno>Module</anno>:system_continue(<anno>Parent</anno>,
+ NDebug, <anno>Misc</anno>)</c>,
+ where the process continues the execution.</p>
+ </item>
+ <item>
+ <p><c><anno>Module</anno>:system_terminate(Reason,
+ <anno>Parent</anno>, <anno>Debug</anno>, <anno>Misc</anno>)</c>,
+ if the process is to terminate.</p>
+ </item>
+ </list>
+ <p><c><anno>Module</anno></c> must export the following:</p>
+ <list type="bulleted">
+ <item><c>system_continue/3</c></item>
+ <item><c>system_terminate/4</c></item>
+ <item><c>system_code_change/4</c></item>
+ <item><c>system_get_state/1</c></item>
+ <item><c>system_replace_state/2</c></item>
+ </list>
+ <p>Argument <c><anno>Misc</anno></c> can be used to save internal data
+ in a process, for example, its state. It is sent to
<c><anno>Module</anno>:system_continue/3</c> or
- <c><anno>Module</anno>:system_terminate/4</c></p>
+ <c><anno>Module</anno>:system_terminate/4</c>.</p>
</desc>
</func>
+
<func>
<name name="print_log" arity="1"/>
- <fsummary>Print the logged events in the debug structure</fsummary>
+ <fsummary>Print the logged events in the debug structure.</fsummary>
<desc>
- <p>Prints the logged system events in the debug structure
+ <p>Prints the logged system events in the debug structure,
using <c>FormFunc</c> as defined when the event was
- generated by a call to <c>handle_debug/4</c>.</p>
+ generated by a call to
+ <seealso marker="#handle_debug/4"><c>handle_debug/4</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>Mod:system_continue(Parent, Debug, Misc) -> none()</name>
- <fsummary>Called when the process should continue its execution</fsummary>
+ <name>Module:system_code_change(Misc, Module, OldVsn, Extra) ->
+ {ok, NMisc}</name>
+ <fsummary>Called when the process is to perform a code change.</fsummary>
<type>
- <v>Parent = pid()</v>
- <v>Debug = [<seealso marker="#type-dbg_opt">dbg_opt()</seealso>]</v>
<v>Misc = term()</v>
+ <v>OldVsn = undefined | term()</v>
+ <v>Module = atom()</v>
+ <v>Extra = term()</v>
+ <v>NMisc = term()</v>
</type>
<desc>
- <p>This function is called from <c>sys:handle_system_msg/6</c> when the process
- should continue its execution (for example after it has been
- suspended). This function never returns.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso> when the process is to perform a
+ code change. The code change is used when the
+ internal data structure has changed. This function
+ converts argument <c>Misc</c> to the new data
+ structure. <c>OldVsn</c> is attribute <em>vsn</em> of the
+ old version of the <c>Module</c>. If no such attribute is
+ defined, the atom <c>undefined</c> is sent.</p>
</desc>
</func>
+
<func>
- <name>Mod:system_terminate(Reason, Parent, Debug, Misc) -> none()</name>
- <fsummary>Called when the process should terminate</fsummary>
+ <name>Module:system_continue(Parent, Debug, Misc) -> none()</name>
+ <fsummary>Called when the process is to continue its execution.</fsummary>
<type>
- <v>Reason = term()</v>
<v>Parent = pid()</v>
<v>Debug = [<seealso marker="#type-dbg_opt">dbg_opt()</seealso>]</v>
<v>Misc = term()</v>
</type>
<desc>
- <p>This function is called from <c>sys:handle_system_msg/6</c> when the process
- should terminate. For example, this function is called when
- the process is suspended and its parent orders shut-down.
- It gives the process a chance to do a clean-up. This function never
- returns.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso> when the process is to continue
+ its execution (for example, after it has been
+ suspended). This function never returns.</p>
</desc>
</func>
+
<func>
- <name>Mod:system_code_change(Misc, Module, OldVsn, Extra) -> {ok, NMisc}</name>
- <fsummary>Called when the process should perform a code change</fsummary>
+ <name>Module:system_get_state(Misc) -> {ok, State}</name>
+ <fsummary>Called when the process is to return its current state.
+ </fsummary>
<type>
<v>Misc = term()</v>
- <v>OldVsn = undefined | term()</v>
- <v>Module = atom()</v>
- <v>Extra = term()</v>
- <v>NMisc = term()</v>
+ <v>State = term()</v>
</type>
<desc>
- <p>Called from <c>sys:handle_system_msg/6</c> when the process
- should perform a code change. The code change is used when the
- internal data structure has changed. This function
- converts the <c>Misc</c> argument to the new data
- structure. <c>OldVsn</c> is the <em>vsn</em> attribute of the
- old version of the <c>Module</c>. If no such attribute was
- defined, the atom <c>undefined</c> is sent.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso>
+ when the process is to return a term that reflects its current state.
+ <c>State</c> is the value returned by
+ <seealso marker="#get_state/2"><c>get_state/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>Mod:system_get_state(Misc) -> {ok, State}</name>
- <fsummary>Called when the process should return its current state</fsummary>
+ <name>Module:system_replace_state(StateFun, Misc) ->
+ {ok, NState, NMisc}</name>
+ <fsummary>Called when the process is to replace its current state.
+ </fsummary>
<type>
+ <v>StateFun = fun((State :: term()) -> NState)</v>
<v>Misc = term()</v>
- <v>State = term()</v>
- </type>
+ <v>NState = term()</v>
+ <v>NMisc = term()</v>
+ </type>
<desc>
- <p>This function is called from <c>sys:handle_system_msg/6</c> when the process
- should return a term that reflects its current state. <c>State</c> is the
- value returned by <c>sys:get_state/2</c>.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso> when the process is to replace
+ its current state. <c>NState</c> is the value returned by
+ <seealso marker="#replace_state/3"><c>replace_state/3</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
- <name>Mod:system_replace_state(StateFun, Misc) -> {ok, NState, NMisc}</name>
- <fsummary>Called when the process should replace its current state</fsummary>
+ <name>Module:system_terminate(Reason, Parent, Debug, Misc) -> none()</name>
+ <fsummary>Called when the process is to terminate.</fsummary>
<type>
- <v>StateFun = fun((State :: term()) -> NState)</v>
+ <v>Reason = term()</v>
+ <v>Parent = pid()</v>
+ <v>Debug = [<seealso marker="#type-dbg_opt">dbg_opt()</seealso>]</v>
<v>Misc = term()</v>
- <v>NState = term()</v>
- <v>NMisc = term()</v>
- </type>
+ </type>
<desc>
- <p>This function is called from <c>sys:handle_system_msg/6</c> when the process
- should replace its current state. <c>NState</c> is the value returned by
- <c>sys:replace_state/3</c>.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso> when the process is to terminate.
+ For example, this function is called when
+ the process is suspended and its parent orders shutdown.
+ It gives the process a chance to do a cleanup. This function never
+ returns.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/timer.xml b/lib/stdlib/doc/src/timer.xml
index 7609487300..8f2ce36b06 100644
--- a/lib/stdlib/doc/src/timer.xml
+++ b/lib/stdlib/doc/src/timer.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,26 +30,25 @@
<checked></checked>
<date>1998-09-09</date>
<rev>D</rev>
- <file>timer.sgml</file>
+ <file>timer.xml</file>
</header>
<module>timer</module>
- <modulesummary>Timer Functions</modulesummary>
+ <modulesummary>Timer functions.</modulesummary>
<description>
<p>This module provides useful functions related to time. Unless otherwise
- stated, time is always measured in <c>milliseconds</c>. All
- timer functions return immediately, regardless of work carried
- out by another process.
- </p>
- <p>Successful evaluations of the timer functions yield return values
- containing a timer reference, denoted <c>TRef</c> below. By using
- <c>cancel/1</c>, the returned reference can be used to cancel any
- requested action. A <c>TRef</c> is an Erlang term, the contents
- of which must not be altered.
- </p>
- <p>The timeouts are not exact, but should be <c>at least</c> as long
- as requested.
- </p>
+ stated, time is always measured in <em>milliseconds</em>. All
+ timer functions return immediately, regardless of work done by another
+ process.</p>
+ <p>Successful evaluations of the timer functions give return values
+ containing a timer reference, denoted <c>TRef</c>. By using
+ <seealso marker="#cancel/1"><c>cancel/1</c></seealso>,
+ the returned reference can be used to cancel any
+ requested action. A <c>TRef</c> is an Erlang term, which contents
+ must not be changed.</p>
+ <p>The time-outs are not exact, but are <em>at least</em> as long
+ as requested.</p>
</description>
+
<datatypes>
<datatype>
<name name="time"/>
@@ -60,231 +59,286 @@
<desc><p>A timer reference.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="start" arity="0"/>
- <fsummary>Start a global timer server (named <c>timer_server</c>).</fsummary>
+ <name name="apply_after" arity="4"/>
+ <fsummary>Apply <c>Module:Function(Arguments)</c> after a specified
+ <c>Time</c>.</fsummary>
<desc>
- <p>Starts the timer server. Normally, the server does not need
- to be started explicitly. It is started dynamically if it
- is needed. This is useful during development, but in a
- target system the server should be started explicitly. Use
- configuration parameters for <c>kernel</c> for this.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Arguments</anno>)</c> after <c><anno>Time</anno></c>
+ milliseconds.</p>
+ <p>Returns <c>{ok, <anno>TRef</anno>}</c> or
+ <c>{error, <anno>Reason</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="apply_after" arity="4"/>
- <fsummary>Apply <c>Module:Function(Arguments)</c>after a specified <c>Time</c>.</fsummary>
+ <name name="apply_interval" arity="4"/>
+ <fsummary>Evaluate <c>Module:Function(Arguments)</c> repeatedly at
+ intervals of <c>Time</c>.</fsummary>
<desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Arguments</anno>)</c> after <c><anno>Time</anno></c> amount of time
- has elapsed. Returns <c>{ok, <anno>TRef</anno>}</c>, or <c>{error, <anno>Reason</anno>}</c>.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Arguments</anno>)</c> repeatedly at intervals of
+ <c><anno>Time</anno></c>.</p>
+ <p>Returns <c>{ok, <anno>TRef</anno>}</c> or
+ <c>{error, <anno>Reason</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="send_after" arity="2"/>
- <name name="send_after" arity="3"/>
- <fsummary>Send <c>Message</c>to <c>Pid</c>after a specified <c>Time</c>.</fsummary>
+ <name name="cancel" arity="1"/>
+ <fsummary>Cancel a previously requested time-out identified by
+ <c>TRef</c>.</fsummary>
<desc>
- <taglist>
- <tag><c>send_after/3</c></tag>
- <item>
- <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c> after <c><anno>Time</anno></c> amount
- of time has elapsed. (<c><anno>Pid</anno></c> can also be an atom of a
- registered name.) Returns <c>{ok, <anno>TRef</anno>}</c>, or
- <c>{error, <anno>Reason</anno>}</c>.</p>
- </item>
- <tag><c>send_after/2</c></tag>
- <item>
- <p>Same as <c>send_after(<anno>Time</anno>, self(), <anno>Message</anno>)</c>.</p>
- </item>
- </taglist>
+ <p>Cancels a previously requested time-out. <c><anno>TRef</anno></c> is
+ a unique
+ timer reference returned by the related timer function.</p>
+ <p>Returns <c>{ok, cancel}</c>, or <c>{error, <anno>Reason</anno>}</c>
+ when <c><anno>TRef</anno></c> is not a timer reference.</p>
</desc>
</func>
+
<func>
- <name name="kill_after" arity="1"/>
- <name name="kill_after" arity="2"/>
<name name="exit_after" arity="2"/>
<name name="exit_after" arity="3"/>
- <fsummary>Send an exit signal with <c>Reason</c>after a specified <c>Time</c>.</fsummary>
+ <fsummary>Send an exit signal with <c>Reason</c> after a specified
+ <c>Time</c>.</fsummary>
+ <desc>
+ <p><c>exit_after/2</c> is the same as
+ <c>exit_after(<anno>Time</anno>, self(),
+ <anno>Reason1</anno>)</c>.</p>
+ <p><c>exit_after/3</c> sends an exit signal with reason
+ <c><anno>Reason1</anno></c> to
+ pid <c><anno>Pid</anno></c>. Returns <c>{ok, <anno>TRef</anno>}</c>
+ or <c>{error, <anno>Reason2</anno>}</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="hms" arity="3"/>
+ <fsummary>Convert <c>Hours</c>+<c>Minutes</c>+<c>Seconds</c> to
+ <c>Milliseconds</c>.</fsummary>
+ <desc>
+ <p>Returns the number of milliseconds in <c><anno>Hours</anno> +
+ <anno>Minutes</anno> + <anno>Seconds</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="hours" arity="1"/>
+ <fsummary>Convert <c>Hours</c> to <c>Milliseconds</c>.</fsummary>
+ <desc>
+ <p>Returns the number of milliseconds in <c><anno>Hours</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="kill_after" arity="1"/>
+ <name name="kill_after" arity="2"/>
+ <fsummary>Send an exit signal with <c>Reason</c> after a specified
+ <c>Time</c>.</fsummary>
+ <desc>
+ <p><c>kill_after/1</c> is the same as
+ <c>exit_after(<anno>Time</anno>, self(), kill)</c>.</p>
+ <p><c>kill_after/2</c> is the same as
+ <c>exit_after(<anno>Time</anno>, <anno>Pid</anno>, kill)</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="minutes" arity="1"/>
+ <fsummary>Converts <c>Minutes</c> to <c>Milliseconds</c>.</fsummary>
+ <desc>
+ <p>Returns the number of milliseconds in
+ <c><anno>Minutes</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="now_diff" arity="2"/>
+ <fsummary>Calculate time difference between time stamps.</fsummary>
+ <type_desc variable="Tdiff">In microseconds</type_desc>
+ <desc>
+ <p>Calculates the time difference <c><anno>Tdiff</anno> =
+ <anno>T2</anno> - <anno>T1</anno></c> in <em>microseconds</em>,
+ where <c><anno>T1</anno></c> and <c><anno>T2</anno></c>
+ are time-stamp tuples on the same format as returned from
+ <seealso marker="erts:erlang#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso> or
+ <seealso marker="kernel:os#timestamp/0">
+ <c>os:timestamp/0</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="seconds" arity="1"/>
+ <fsummary>Convert <c>Seconds</c> to <c>Milliseconds</c>.</fsummary>
+ <desc>
+ <p>Returns the number of milliseconds in
+ <c><anno>Seconds</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="send_after" arity="2"/>
+ <name name="send_after" arity="3"/>
+ <fsummary>Send <c>Message</c> to <c>Pid</c> after a specified
+ <c>Time</c>.</fsummary>
<desc>
<taglist>
- <tag><c>exit_after/3</c></tag>
- <item>
- <p>Send an exit signal with reason <c><anno>Reason1</anno></c> to Pid
- <c><anno>Pid</anno></c>. Returns <c>{ok, <anno>TRef</anno>}</c>, or
- <c>{error, <anno>Reason2</anno>}</c>.</p>
- </item>
- <tag><c>exit_after/2</c></tag>
- <item>
- <p>Same as <c>exit_after(<anno>Time</anno>, self(), <anno>Reason1</anno>)</c>. </p>
- </item>
- <tag><c>kill_after/2</c></tag>
+ <tag><c>send_after/3</c></tag>
<item>
- <p>Same as <c>exit_after(<anno>Time</anno>, <anno>Pid</anno>, kill)</c>. </p>
+ <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c> after
+ <c><anno>Time</anno></c> milliseconds. (<c><anno>Pid</anno></c>
+ can also be an atom of a registered name.)</p>
+ <p>Returns <c>{ok, <anno>TRef</anno>}</c> or
+ <c>{error, <anno>Reason</anno>}</c>.</p>
</item>
- <tag><c>kill_after/1</c></tag>
+ <tag><c>send_after/2</c></tag>
<item>
- <p>Same as <c>exit_after(<anno>Time</anno>, self(), kill)</c>. </p>
+ <p>Same as <c>send_after(<anno>Time</anno>, self(),
+ <anno>Message</anno>)</c>.</p>
</item>
</taglist>
</desc>
</func>
- <func>
- <name name="apply_interval" arity="4"/>
- <fsummary>Evaluate <c>Module:Function(Arguments)</c>repeatedly at intervals of <c>Time</c>.</fsummary>
- <desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Arguments</anno>)</c> repeatedly at
- intervals of <c><anno>Time</anno></c>. Returns <c>{ok, <anno>TRef</anno>}</c>, or
- <c>{error, <anno>Reason</anno>}</c>.</p>
- </desc>
- </func>
+
<func>
<name name="send_interval" arity="2"/>
<name name="send_interval" arity="3"/>
- <fsummary>Send <c>Message</c>repeatedly at intervals of <c>Time</c>.</fsummary>
+ <fsummary>Send <c>Message</c> repeatedly at intervals of <c>Time</c>.
+ </fsummary>
<desc>
<taglist>
<tag><c>send_interval/3</c></tag>
<item>
- <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c> repeatedly after <c><anno>Time</anno></c>
- amount of time has elapsed. (<c><anno>Pid</anno></c> can also be an atom of
- a registered name.) Returns <c>{ok, <anno>TRef</anno>}</c> or
+ <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c>
+ repeatedly after <c><anno>Time</anno></c> milliseconds.
+ (<c><anno>Pid</anno></c> can also be
+ an atom of a registered name.)</p>
+ <p>Returns <c>{ok, <anno>TRef</anno>}</c> or
<c>{error, <anno>Reason</anno>}</c>.</p>
</item>
<tag><c>send_interval/2</c></tag>
<item>
- <p>Same as <c>send_interval(<anno>Time</anno>, self(), <anno>Message</anno>)</c>.</p>
+ <p>Same as <c>send_interval(<anno>Time</anno>, self(),
+ <anno>Message</anno>)</c>.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
- <name name="cancel" arity="1"/>
- <fsummary>Cancel a previously requested timeout identified by <c>TRef</c>.</fsummary>
+ <name name="sleep" arity="1"/>
+ <fsummary>Suspend the calling process for <c>Time</c> milliseconds.
+ </fsummary>
<desc>
- <p>Cancels a previously requested timeout. <c><anno>TRef</anno></c> is a unique
- timer reference returned by the timer function in question. Returns
- <c>{ok, cancel}</c>, or <c>{error, <anno>Reason</anno>}</c> when <c><anno>TRef</anno></c>
- is not a timer reference.</p>
+ <p>Suspends the process calling this function for
+ <c><anno>Time</anno></c> milliseconds and then returns <c>ok</c>,
+ or suspends the process forever if <c><anno>Time</anno></c> is the
+ atom <c>infinity</c>. Naturally, this
+ function does <em>not</em> return immediately.</p>
</desc>
</func>
+
<func>
- <name name="sleep" arity="1"/>
- <fsummary>Suspend the calling process for <c>Time</c>amount of milliseconds.</fsummary>
+ <name name="start" arity="0"/>
+ <fsummary>Start a global timer server (named <c>timer_server</c>).
+ </fsummary>
<desc>
- <p>Suspends the process calling this function for <c><anno>Time</anno></c> amount
- of milliseconds and then returns <c>ok</c>, or suspend the process
- forever if <c><anno>Time</anno></c> is the atom <c>infinity</c>. Naturally, this
- function does <em>not</em> return immediately.</p>
+ <p>Starts the timer server. Normally, the server does not need
+ to be started explicitly. It is started dynamically if it
+ is needed. This is useful during development, but in a
+ target system the server is to be started explicitly. Use
+ configuration parameters for
+ <seealso marker="kernel:index"><c>Kernel</c></seealso> for this.</p>
</desc>
</func>
+
<func>
<name name="tc" arity="1"/>
<name name="tc" arity="2"/>
<name name="tc" arity="3"/>
<fsummary>Measure the real time it takes to evaluate <c>apply(Module,
- Function, Arguments)</c> or <c>apply(Fun, Arguments)</c></fsummary>
+ Function, Arguments)</c> or <c>apply(Fun, Arguments)</c>.</fsummary>
<type_desc variable="Time">In microseconds</type_desc>
<desc>
<taglist>
<tag><c>tc/3</c></tag>
<item>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Arguments</anno>)</c> and measures
- the elapsed real time as reported by <c>os:timestamp/0</c>.
- Returns <c>{<anno>Time</anno>, <anno>Value</anno>}</c>, where
- <c><anno>Time</anno></c> is the elapsed real time in <em>microseconds</em>,
- and <c><anno>Value</anno></c> is what is returned from the apply.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Arguments</anno>)</c> and measures the elapsed real time as
+ reported by <seealso marker="os:timestamp/0">
+ <c>os:timestamp/0</c></seealso>.</p>
+ <p>Returns <c>{<anno>Time</anno>, <anno>Value</anno>}</c>, where
+ <c><anno>Time</anno></c> is the elapsed real time in
+ <em>microseconds</em>, and <c><anno>Value</anno></c> is what is
+ returned from the apply.</p>
</item>
<tag><c>tc/2</c></tag>
<item>
- <p>Evaluates <c>apply(<anno>Fun</anno>, <anno>Arguments</anno>)</c>. Otherwise works
- like <c>tc/3</c>.</p>
+ <p>Evaluates <c>apply(<anno>Fun</anno>, <anno>Arguments</anno>)</c>.
+ Otherwise the same as <c>tc/3</c>.</p>
</item>
<tag><c>tc/1</c></tag>
<item>
- <p>Evaluates <c><anno>Fun</anno>()</c>. Otherwise works like <c>tc/2</c>.</p>
+ <p>Evaluates <c><anno>Fun</anno>()</c>. Otherwise the same as
+ <c>tc/2</c>.</p>
</item>
-
</taglist>
</desc>
</func>
- <func>
- <name name="now_diff" arity="2"/>
- <fsummary>Calculate time difference between timestamps</fsummary>
- <type_desc variable="Tdiff">In microseconds</type_desc>
- <desc>
- <p>Calculates the time difference <c><anno>Tdiff</anno> = <anno>T2</anno> - <anno>T1</anno></c> in
- <em>microseconds</em>, where <c><anno>T1</anno></c> and <c><anno>T2</anno></c>
- are timestamp tuples on the same format as returned from
- <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>,
- or <seealso marker="kernel:os#timestamp/0"><c>os:timestamp/0</c></seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="seconds" arity="1"/>
- <fsummary>Convert <c>Seconds</c>to <c>Milliseconds</c>.</fsummary>
- <desc>
- <p>Returns the number of milliseconds in <c><anno>Seconds</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="minutes" arity="1"/>
- <fsummary>Converts <c>Minutes</c> to <c>Milliseconds</c>.</fsummary>
- <desc>
- <p>Return the number of milliseconds in <c><anno>Minutes</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="hours" arity="1"/>
- <fsummary>Convert <c>Hours</c>to <c>Milliseconds</c>.</fsummary>
- <desc>
- <p>Returns the number of milliseconds in <c><anno>Hours</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="hms" arity="3"/>
- <fsummary>Convert <c>Hours</c>+<c>Minutes</c>+<c>Seconds</c>to <c>Milliseconds</c>.</fsummary>
- <desc>
- <p>Returns the number of milliseconds in <c><anno>Hours</anno> + <anno>Minutes</anno> + <anno>Seconds</anno></c>.</p>
- </desc>
- </func>
</funcs>
<section>
<title>Examples</title>
- <p>This example illustrates how to print out "Hello World!" in 5 seconds:</p>
+ <p><em>Example 1</em></p>
+ <p>The following example shows how to print "Hello World!" in 5 seconds:</p>
<pre>
- 1> <input>timer:apply_after(5000, io, format, ["~nHello World!~n", []]).</input>
- {ok,TRef}
- Hello World!</pre>
- <p>The following coding example illustrates a process which performs a
- certain action and if this action is not completed within a certain
- limit, then the process is killed.</p>
+1> <input>timer:apply_after(5000, io, format, ["~nHello World!~n", []]).</input>
+{ok,TRef}
+Hello World!</pre>
+
+ <p><em>Example 2</em></p>
+ <p>The following example shows a process performing a
+ certain action, and if this action is not completed within a certain
+ limit, the process is killed:</p>
<code type="none">
- Pid = spawn(mod, fun, [foo, bar]),
- %% If pid is not finished in 10 seconds, kill him
- {ok, R} = timer:kill_after(timer:seconds(10), Pid),
- ...
- %% We change our mind...
- timer:cancel(R),
- ...</code>
+Pid = spawn(mod, fun, [foo, bar]),
+%% If pid is not finished in 10 seconds, kill him
+{ok, R} = timer:kill_after(timer:seconds(10), Pid),
+...
+%% We change our mind...
+timer:cancel(R),
+...</code>
</section>
<section>
- <title>WARNING</title>
- <p>A timer can always be removed by calling <c>cancel/1</c>.
- </p>
- <p>An interval timer, i.e. a timer created by evaluating any of the
- functions <c>apply_interval/4</c>, <c>send_interval/3</c>, and
- <c>send_interval/2</c>, is linked to the process towards which
- the timer performs its task.
- </p>
- <p>A one-shot timer, i.e. a timer created by evaluating any of the
- functions <c>apply_after/4</c>, <c>send_after/3</c>,
- <c>send_after/2</c>, <c>exit_after/3</c>, <c>exit_after/2</c>,
- <c>kill_after/2</c>, and <c>kill_after/1</c> is not linked to any
- process. Hence, such a timer is removed only when it reaches its
- timeout, or if it is explicitly removed by a call to <c>cancel/1</c>.</p>
+ <title>Notes</title>
+ <p>A timer can always be removed by calling
+ <seealso marker="#cancel/1"><c>cancel/1</c></seealso>.</p>
+
+ <p>An interval timer, that is, a timer created by evaluating any of the
+ functions
+ <seealso marker="#apply_interval/4"><c>apply_interval/4</c></seealso>,
+ <seealso marker="#send_interval/3"><c>send_interval/3</c></seealso>, and
+ <seealso marker="#send_interval/2"><c>send_interval/2</c></seealso>
+ is linked to the process to which the timer performs its task.</p>
+
+ <p>A one-shot timer, that is, a timer created by evaluating any of the
+ functions
+ <seealso marker="#apply_after/4"><c>apply_after/4</c></seealso>,
+ <seealso marker="#send_after/3"><c>send_after/3</c></seealso>,
+ <seealso marker="#send_after/2"><c>send_after/2</c></seealso>,
+ <seealso marker="#exit_after/3"><c>exit_after/3</c></seealso>,
+ <seealso marker="#exit_after/2"><c>exit_after/2</c></seealso>,
+ <seealso marker="#kill_after/2"><c>kill_after/2</c></seealso>, and
+ <seealso marker="#kill_after/1"><c>kill_after/1</c></seealso>
+ is not linked to any process. Hence, such a timer is removed only
+ when it reaches its time-out, or if it is explicitly removed by a call to
+ <seealso marker="#cancel/1"><c>cancel/1</c></seealso>.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/unicode.xml b/lib/stdlib/doc/src/unicode.xml
index 966eec49f5..93d0d37456 100644
--- a/lib/stdlib/doc/src/unicode.xml
+++ b/lib/stdlib/doc/src/unicode.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -31,12 +31,27 @@
<rev></rev>
</header>
<module>unicode</module>
- <modulesummary>Functions for converting Unicode characters</modulesummary>
+ <modulesummary>Functions for converting Unicode characters.</modulesummary>
<description>
- <p>This module contains functions for converting between different character representations. Basically it converts between ISO-latin-1 characters and Unicode ditto, but it can also convert between different Unicode encodings (like UTF-8, UTF-16 and UTF-32).</p>
- <p>The default Unicode encoding in Erlang is in binaries UTF-8, which is also the format in which built in functions and libraries in OTP expect to find binary Unicode data. In lists, Unicode data is encoded as integers, each integer representing one character and encoded simply as the Unicode codepoint for the character.</p>
- <p>Other Unicode encodings than integers representing codepoints or UTF-8 in binaries are referred to as &quot;external encodings&quot;. The ISO-latin-1 encoding is in binaries and lists referred to as latin1-encoding.</p>
- <p>It is recommended to only use external encodings for communication with external entities where this is required. When working inside the Erlang/OTP environment, it is recommended to keep binaries in UTF-8 when representing Unicode characters. Latin1 encoding is supported both for backward compatibility and for communication with external entities not supporting Unicode character sets.</p>
+ <p>This module contains functions for converting between different character
+ representations. It converts between ISO Latin-1 characters and Unicode
+ characters, but it can also convert between different Unicode encodings
+ (like UTF-8, UTF-16, and UTF-32).</p>
+ <p>The default Unicode encoding in Erlang is in binaries UTF-8, which is also
+ the format in which built-in functions and libraries in OTP expect to find
+ binary Unicode data. In lists, Unicode data is encoded as integers, each
+ integer representing one character and encoded simply as the Unicode code
+ point for the character.</p>
+ <p>Other Unicode encodings than integers representing code points or UTF-8
+ in binaries are referred to as &quot;external encodings&quot;. The ISO
+ Latin-1 encoding
+ is in binaries and lists referred to as latin1-encoding.</p>
+ <p>It is recommended to only use external encodings for communication with
+ external entities where this is required. When working inside the
+ Erlang/OTP environment, it is recommended to keep binaries in UTF-8 when
+ representing Unicode characters. ISO Latin-1 encoding is supported both
+ for backward compatibility and for communication
+ with external entities not supporting Unicode character sets.</p>
</description>
<datatypes>
@@ -49,7 +64,8 @@
<datatype>
<name name="unicode_binary"/>
<desc>
- <p>A <c>binary()</c> with characters encoded in the UTF-8 coding standard.</p>
+ <p>A <c>binary()</c> with characters encoded in the UTF-8 coding
+ standard.</p>
</desc>
</datatype>
<datatype>
@@ -61,8 +77,8 @@
<datatype>
<name name="external_unicode_binary"/>
<desc>
- <p>A <c>binary()</c> with characters coded in a user specified Unicode
- encoding other than UTF-8 (UTF-16 or UTF-32).</p>
+ <p>A <c>binary()</c> with characters coded in a user-specified Unicode
+ encoding other than UTF-8 (that is, UTF-16 or UTF-32).</p>
</desc>
</datatype>
<datatype>
@@ -73,23 +89,23 @@
</datatype>
<datatype>
<name name="latin1_binary"/>
- <desc><p>A <c>binary()</c> with characters coded in ISO-latin-1.</p>
+ <desc><p>A <c>binary()</c> with characters coded in ISO Latin-1.</p>
</desc>
</datatype>
<datatype>
<name name="latin1_char"/>
- <desc><p>An <c>integer()</c> representing valid latin1
+ <desc><p>An <c>integer()</c> representing a valid ISO Latin-1
character (0-255).</p>
</desc>
</datatype>
<datatype>
<name name="latin1_chardata"/>
- <desc><p>The same as <c>iodata()</c>.</p>
+ <desc><p>Same as <c>iodata()</c>.</p>
</desc>
</datatype>
<datatype>
<name name="latin1_charlist"/>
- <desc><p>The same as <c>iolist()</c>.</p>
+ <desc><p>Same as <c>iolist()</c>.</p>
</desc>
</datatype>
</datatypes>
@@ -100,197 +116,224 @@
<fsummary>Identify UTF byte order marks in a binary.</fsummary>
<type name="endian"/>
<type_desc variable="Bin">
- A <c>binary()</c> such that <c>byte_size(<anno>Bin</anno>) >= 4</c>.
+ A <c>binary()</c> such that <c>byte_size(<anno>Bin</anno>) &gt;= 4</c>.
</type_desc>
<desc>
-
- <p>Check for a UTF byte order mark (BOM) in the beginning of a
- binary. If the supplied binary <c><anno>Bin</anno></c> begins with a valid
- byte order mark for either UTF-8, UTF-16 or UTF-32, the function
- returns the encoding identified along with the length of the BOM
- in bytes.</p>
-
- <p>If no BOM is found, the function returns <c>{latin1,0}</c></p>
+ <p>Checks for a UTF Byte Order Mark (BOM) in the beginning of a
+ binary. If the supplied binary <c><anno>Bin</anno></c> begins with a
+ valid BOM for either UTF-8, UTF-16, or UTF-32, the function
+ returns the encoding identified along with the BOM length
+ in bytes.</p>
+ <p>If no BOM is found, the function returns <c>{latin1,0}</c>.</p>
</desc>
</func>
+
<func>
- <name name="characters_to_list" arity="1"/>
- <fsummary>Convert a collection of characters to list of Unicode characters</fsummary>
+ <name name="characters_to_binary" arity="1"/>
+ <fsummary>Convert a collection of characters to a UTF-8 binary.</fsummary>
<desc>
- <p>Same as <c>characters_to_list(<anno>Data</anno>, unicode)</c>.</p>
+ <p>Same as <c>characters_to_binary(<anno>Data</anno>, unicode,
+ unicode)</c>.</p>
</desc>
</func>
- <func>
- <name name="characters_to_list" arity="2"/>
- <fsummary>Convert a collection of characters to list of Unicode characters</fsummary>
- <desc>
-
- <p>Converts a possibly deep list of integers and
- binaries into a list of integers representing Unicode
- characters. The binaries in the input may have characters
- encoded as latin1 (0 - 255, one character per byte), in which
- case the <c><anno>InEncoding</anno></c> parameter should be given as
- <c>latin1</c>, or have characters encoded as one of the
- UTF-encodings, which is given as the <c><anno>InEncoding</anno></c>
- parameter. Only when the <c><anno>InEncoding</anno></c> is one of the UTF
- encodings, integers in the list are allowed to be greater than
- 255.</p>
-
- <p>If <c><anno>InEncoding</anno></c> is <c>latin1</c>, the <c><anno>Data</anno></c> parameter
- corresponds to the <c>iodata()</c> type, but for <c>unicode</c>,
- the <c><anno>Data</anno></c> parameter can contain integers greater than 255
- (Unicode characters beyond the ISO-latin-1 range), which would
- make it invalid as <c>iodata()</c>.</p>
-
- <p>The purpose of the function is mainly to be able to convert
- combinations of Unicode characters into a pure Unicode
- string in list representation for further processing. For
- writing the data to an external entity, the reverse function
- <seealso
- marker="#characters_to_binary/3"><c>characters_to_binary/3</c></seealso>
- comes in handy.</p>
-
- <p>The option <c>unicode</c> is an alias for <c>utf8</c>, as this is the
- preferred encoding for Unicode characters in
- binaries. <c>utf16</c> is an alias for <c>{utf16,big}</c> and
- <c>utf32</c> is an alias for <c>{utf32,big}</c>. The <c>big</c>
- and <c>little</c> atoms denote big or little endian
- encoding.</p>
- <p>If for some reason, the data cannot be converted, either
- because of illegal Unicode/latin1 characters in the list, or
- because of invalid UTF encoding in any binaries, an error
- tuple is returned. The error tuple contains the tag
- <c>error</c>, a list representing the characters that could be
- converted before the error occurred and a representation of the
- characters including and after the offending integer/bytes. The
- last part is mostly for debugging as it still constitutes a
- possibly deep and/or mixed list, not necessarily of the same
- depth as the original data. The error occurs when traversing the
- list and whatever is left to decode is simply returned as is.</p>
-
- <p>However, if the input <c><anno>Data</anno></c> is a pure binary, the third
- part of the error tuple is guaranteed to be a binary as
- well.</p>
-
- <p>Errors occur for the following reasons:</p>
- <list type="bulleted">
-
- <item>Integers out of range - If <c><anno>InEncoding</anno></c> is
- <c>latin1</c>, an error occurs whenever an integer greater
- than 255 is found in the lists. If <c><anno>InEncoding</anno></c> is
- of a Unicode type, an error occurs whenever an integer
- <list type="bulleted">
- <item>greater than <c>16#10FFFF</c>
- (the maximum Unicode character),</item>
- <item>in the range <c>16#D800</c> to <c>16#DFFF</c>
- (invalid range reserved for UTF-16 surrogate pairs)</item>
- </list>
- is found.
- </item>
-
- <item>UTF encoding incorrect - If <c><anno>InEncoding</anno></c> is
- one of the UTF types, the bytes in any binaries have to be valid
- in that encoding. Errors can occur for various
- reasons, including &quot;pure&quot; decoding errors
- (like the upper
- bits of the bytes being wrong), the bytes are decoded to a
- too large number, the bytes are decoded to a code-point in the
- invalid Unicode
- range, or encoding is &quot;overlong&quot;, meaning that a
- number should have been encoded in fewer bytes. The
- case of a truncated UTF is handled specially, see the
- paragraph about incomplete binaries below. If
- <c><anno>InEncoding</anno></c> is <c>latin1</c>, binaries are always valid
- as long as they contain whole bytes,
- as each byte falls into the valid ISO-latin-1 range.</item>
-
- </list>
-
- <p>A special type of error is when no actual invalid integers or
- bytes are found, but a trailing <c>binary()</c> consists of too
- few bytes to decode the last character. This error might occur
- if bytes are read from a file in chunks or binaries in other
- ways are split on non UTF character boundaries. In this case an
- <c>incomplete</c> tuple is returned instead of the <c>error</c>
- tuple. It consists of the same parts as the <c>error</c> tuple, but
- the tag is <c>incomplete</c> instead of <c>error</c> and the
- last element is always guaranteed to be a binary consisting of
- the first part of a (so far) valid UTF character.</p>
-
- <p>If one UTF characters is split over two consecutive
- binaries in the <c><anno>Data</anno></c>, the conversion succeeds. This means
- that a character can be decoded from a range of binaries as long
- as the whole range is given as input without errors
- occurring. Example:</p>
-
-<code>
- decode_data(Data) ->
- case unicode:characters_to_list(Data,unicode) of
- {incomplete,Encoded, Rest} ->
- More = get_some_more_data(),
- Encoded ++ decode_data([Rest, More]);
- {error,Encoded,Rest} ->
- handle_error(Encoded,Rest);
- List ->
- List
- end.
-</code>
- <p>Bit-strings that are not whole bytes are however not allowed,
- so a UTF character has to be split along 8-bit boundaries to
- ever be decoded.</p>
-
- <p>If any parameters are of the wrong type, the list structure
- is invalid (a number as tail) or the binaries do not contain
- whole bytes (bit-strings), a <c>badarg</c> exception is
- thrown.</p>
-
+ <func>
+ <name name="characters_to_binary" arity="2"/>
+ <fsummary>Convert a collection of characters to a UTF-8 binary.</fsummary>
+ <desc>
+ <p>Same as <c>characters_to_binary(<anno>Data</anno>,
+ <anno>InEncoding</anno>, unicode)</c>.</p>
</desc>
</func>
+
<func>
- <name name="characters_to_binary" arity="1"/>
- <fsummary>Convert a collection of characters to a UTF-8 binary</fsummary>
+ <name name="characters_to_binary" arity="3"/>
+ <fsummary>Convert a collection of characters to a UTF-8 binary.</fsummary>
<desc>
- <p>Same as <c>characters_to_binary(<anno>Data</anno>, unicode, unicode)</c>.</p>
+ <p>Behaves as <seealso marker="#characters_to_list/2">
+ <c>characters_to_list/2</c></seealso>, but produces a binary
+ instead of a Unicode list.</p>
+ <p><c><anno>InEncoding</anno></c> defines how input is to be interpreted
+ if binaries are present in <c>Data</c></p>
+ <p><c><anno>OutEncoding</anno></c> defines in what format output is to
+ be generated.</p>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>unicode</c></tag>
+ <item>
+ <p>An alias for <c>utf8</c>, as this is the preferred encoding for
+ Unicode characters in binaries.</p>
+ </item>
+ <tag><c>utf16</c></tag>
+ <item>
+ <p>An alias for <c>{utf16,big}</c>.</p>
+ </item>
+ <tag><c>utf32</c></tag>
+ <item>
+ <p>An alias for <c>{utf32,big}</c>.</p>
+ </item>
+ </taglist>
+ <p>The atoms <c>big</c> and <c>little</c> denote big- or little-endian
+ encoding.</p>
+ <p>Errors and exceptions occur as in
+ <seealso marker="#characters_to_list/2">
+ <c>characters_to_list/2</c></seealso>, but the second element
+ in tuple <c>error</c> or <c>incomplete</c> is a <c>binary()</c>
+ and not a <c>list()</c>.</p>
</desc>
</func>
- <func>
- <name name="characters_to_binary" arity="2"/>
- <fsummary>Convert a collection of characters to a UTF-8 binary</fsummary>
+ <func>
+ <name name="characters_to_list" arity="1"/>
+ <fsummary>Convert a collection of characters to a list of Unicode
+ characters.</fsummary>
<desc>
- <p>Same as <c>characters_to_binary(<anno>Data</anno>, <anno>InEncoding</anno>, unicode)</c>.</p>
+ <p>Same as <c>characters_to_list(<anno>Data</anno>, unicode)</c>.</p>
</desc>
- </func>
+ </func>
+
<func>
- <name name="characters_to_binary" arity="3"/>
- <fsummary>Convert a collection of characters to a UTF-8 binary</fsummary>
+ <name name="characters_to_list" arity="2"/>
+ <fsummary>Convert a collection of characters to a list of Unicode
+ characters.</fsummary>
<desc>
-
- <p>Behaves as <seealso marker="#characters_to_list/2">
- <c>characters_to_list/2</c></seealso>, but produces an binary
- instead of a Unicode list. The
- <c><anno>InEncoding</anno></c> defines how input is to be interpreted if
- binaries are present in the <c>Data</c>, while
- <c><anno>OutEncoding</anno></c> defines in what format output is to be
- generated.</p>
-
- <p>The option <c>unicode</c> is an alias for <c>utf8</c>, as this is the
- preferred encoding for Unicode characters in
- binaries. <c>utf16</c> is an alias for <c>{utf16,big}</c> and
- <c>utf32</c> is an alias for <c>{utf32,big}</c>. The <c>big</c>
- and <c>little</c> atoms denote big or little endian
- encoding.</p>
-
- <p>Errors and exceptions occur as in <seealso
- marker="#characters_to_list/2">
- <c>characters_to_list/2</c></seealso>, but the second element
- in the <c>error</c> or
- <c>incomplete</c> tuple will be a <c>binary()</c> and not a
- <c>list()</c>.</p>
-
+ <p>Converts a possibly deep list of integers and
+ binaries into a list of integers representing Unicode
+ characters. The binaries in the input can have characters
+ encoded as one of the following:</p>
+ <list type="bulleted">
+ <item>
+ <p>ISO Latin-1 (0-255, one character per byte). Here,
+ case parameter <c><anno>InEncoding</anno></c> is to be specified
+ as <c>latin1</c>.</p>
+ </item>
+ <item>
+ <p>One of the UTF-encodings, which is specified as parameter
+ <c><anno>InEncoding</anno></c>.</p>
+ </item>
+ </list>
+ <p>Only when <c><anno>InEncoding</anno></c> is one of the UTF
+ encodings, integers in the list are allowed to be &gt; 255.</p>
+ <p>If <c><anno>InEncoding</anno></c> is <c>latin1</c>, parameter
+ <c><anno>Data</anno></c> corresponds to the <c>iodata()</c> type,
+ but for <c>unicode</c>, parameter <c><anno>Data</anno></c> can
+ contain integers &gt; 255
+ (Unicode characters beyond the ISO Latin-1 range), which
+ makes it invalid as <c>iodata()</c>.</p>
+ <p>The purpose of the function is mainly to convert
+ combinations of Unicode characters into a pure Unicode
+ string in list representation for further processing. For
+ writing the data to an external entity, the reverse function
+ <seealso marker="#characters_to_binary/3">
+ <c>characters_to_binary/3</c></seealso>
+ comes in handy.</p>
+ <p>Option <c>unicode</c> is an alias for <c>utf8</c>, as this is the
+ preferred encoding for Unicode characters in
+ binaries. <c>utf16</c> is an alias for <c>{utf16,big}</c> and
+ <c>utf32</c> is an alias for <c>{utf32,big}</c>. The atoms <c>big</c>
+ and <c>little</c> denote big- or little-endian encoding.</p>
+ <p>If the data cannot be converted, either
+ because of illegal Unicode/ISO Latin-1 characters in the list,
+ or because of invalid UTF encoding in any binaries, an error
+ tuple is returned. The error tuple contains the tag
+ <c>error</c>, a list representing the characters that could be
+ converted before the error occurred and a representation of the
+ characters including and after the offending integer/bytes. The
+ last part is mostly for debugging, as it still constitutes a
+ possibly deep or mixed list, or both, not necessarily of the same
+ depth as the original data. The error occurs when traversing the
+ list and whatever is left to decode is returned "as is".</p>
+ <p>However, if the input <c><anno>Data</anno></c> is a pure binary,
+ the third part of the error tuple is guaranteed to be a binary as
+ well.</p>
+ <p>Errors occur for the following reasons:</p>
+ <list type="bulleted">
+ <item>
+ <p>Integers out of range.</p>
+ <p>If <c><anno>InEncoding</anno></c> is <c>latin1</c>,
+ an error occurs whenever an integer &gt; 255 is found
+ in the lists.</p>
+ <p>If <c><anno>InEncoding</anno></c> is of a Unicode type,
+ an error occurs whenever either of the following is found:</p>
+ <list type="bulleted">
+ <item>
+ <p>An integer &gt; 16#10FFFF
+ (the maximum Unicode character)</p>
+ </item>
+ <item>
+ <p>An integer in the range 16#D800 to 16#DFFF (invalid range
+ reserved for UTF-16 surrogate pairs)</p>
+ </item>
+ </list>
+ </item>
+ <item>
+ <p>Incorrect UTF encoding.</p>
+ <p>If <c><anno>InEncoding</anno></c> is one of the UTF types,
+ the bytes in any binaries must be valid in that encoding.</p>
+ <p>Errors can occur for various reasons, including the
+ following:</p>
+ <list type="bulleted">
+ <item>
+ <p>&quot;Pure&quot; decoding errors
+ (like the upper bits of the bytes being wrong).</p>
+ </item>
+ <item>
+ <p>The bytes are decoded to a too large number.</p>
+ </item>
+ <item>
+ <p>The bytes are decoded to a code point in the invalid
+ Unicode range.</p>
+ </item>
+ <item>
+ <p>Encoding is &quot;overlong&quot;, meaning that a number
+ should have been encoded in fewer bytes.</p>
+ </item>
+ </list>
+ <p>The case of a truncated UTF is handled specially, see the
+ paragraph about incomplete binaries below.</p>
+ <p>If <c><anno>InEncoding</anno></c> is <c>latin1</c>, binaries are
+ always valid as long as they contain whole bytes,
+ as each byte falls into the valid ISO Latin-1 range.</p>
+ </item>
+ </list>
+ <p>A special type of error is when no actual invalid integers or
+ bytes are found, but a trailing <c>binary()</c> consists of too
+ few bytes to decode the last character. This error can occur
+ if bytes are read from a file in chunks or if binaries in other
+ ways are split on non-UTF character boundaries. An <c>incomplete</c>
+ tuple is then returned instead of the <c>error</c> tuple.
+ It consists of the same parts as the <c>error</c> tuple, but
+ the tag is <c>incomplete</c> instead of <c>error</c> and the
+ last element is always guaranteed to be a binary consisting of
+ the first part of a (so far) valid UTF character.</p>
+ <p>If one UTF character is split over two consecutive binaries in
+ the <c><anno>Data</anno></c>, the conversion succeeds. This means
+ that a character can be decoded from a range of binaries as long
+ as the whole range is specified as input without errors occurring.</p>
+ <p><em>Example:</em></p>
+ <code>
+decode_data(Data) ->
+ case unicode:characters_to_list(Data,unicode) of
+ {incomplete,Encoded, Rest} ->
+ More = get_some_more_data(),
+ Encoded ++ decode_data([Rest, More]);
+ {error,Encoded,Rest} ->
+ handle_error(Encoded,Rest);
+ List ->
+ List
+ end.</code>
+ <p>However, bit strings that are not whole bytes are not allowed,
+ so a UTF character must be split along 8-bit boundaries to
+ ever be decoded.</p>
+ <p>A <c>badarg</c> exception is thrown for the following cases:</p>
+ <list type="bulleted">
+ <item>Any parameters are of the wrong type.</item>
+ <item>The list structure is invalid (a number as tail).</item>
+ <item>The binaries do not contain whole bytes (bit strings).</item>
+ </list>
</desc>
</func>
+
<func>
<name name="encoding_to_bom" arity="1"/>
<fsummary>Create a binary UTF byte order mark from encoding.</fsummary>
@@ -298,20 +341,15 @@
A <c>binary()</c> such that <c>byte_size(<anno>Bin</anno>) >= 4</c>.
</type_desc>
<desc>
-
- <p>Create a UTF byte order mark (BOM) as a binary from the
- supplied <c><anno>InEncoding</anno></c>. The BOM is, if supported at all,
- expected to be placed first in UTF encoded files or
- messages.</p>
-
- <p>The function returns <c>&lt;&lt;&gt;&gt;</c> for the
- <c>latin1</c> encoding as there is no BOM for ISO-latin-1.</p>
-
- <p>It can be noted that the BOM for UTF-8 is seldom used, and it
- is really not a <em>byte order</em> mark. There are obviously no
- byte order issues with UTF-8, so the BOM is only there to
- differentiate UTF-8 encoding from other UTF formats.</p>
-
+ <p>Creates a UTF Byte Order Mark (BOM) as a binary from the
+ supplied <c><anno>InEncoding</anno></c>. The BOM is, if supported at
+ all, expected to be placed first in UTF encoded files or messages.</p>
+ <p>The function returns <c>&lt;&lt;&gt;&gt;</c> for
+ <c>latin1</c> encoding, as there is no BOM for ISO Latin-1.</p>
+ <p>Notice that the BOM for UTF-8 is seldom used, and it
+ is really not a <em>byte order</em> mark. There are obviously no
+ byte order issues with UTF-8, so the BOM is only there to
+ differentiate UTF-8 encoding from other UTF formats.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/unicode_usage.xml b/lib/stdlib/doc/src/unicode_usage.xml
index c4cb193b07..7f79ac88a1 100644
--- a/lib/stdlib/doc/src/unicode_usage.xml
+++ b/lib/stdlib/doc/src/unicode_usage.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1999</year>
- <year>2014</year>
+ <year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,427 +33,495 @@
<rev>PA1</rev>
<file>unicode_usage.xml</file>
</header>
-<section>
-<title>Unicode Implementation</title>
- <p>Implementing support for Unicode character sets is an ongoing
- process. The Erlang Enhancement Proposal (EEP) 10 outlined the
- basics of Unicode support and also specified a default encoding in
- binaries that all Unicode-aware modules should handle in the
- future.</p>
-
- <p>The functionality described in EEP10 was implemented in Erlang/OTP
- R13A, but that was by no means the end of it. In Erlang/OTP R14B01 support
- for Unicode file names was added, although it was in no way complete
- and was by default disabled on platforms where no guarantee was given
- for the file name encoding. With Erlang/OTP R16A came support for UTF-8 encoded
- source code, among with enhancements to many of the applications to
- support both Unicode encoded file names as well as support for UTF-8
- encoded files in several circumstances. Most notable is the support
- for UTF-8 in files read by <c>file:consult/1</c>, release handler support
- for UTF-8 and more support for Unicode character sets in the
- I/O-system. In Erlang/OTP 17.0, the encoding default for Erlang source files was
- switched to UTF-8.</p>
-
- <p>This guide outlines the current Unicode support and gives a couple
- of recipes for working with Unicode data.</p>
-</section>
-<section>
-<title>Understanding Unicode</title>
- <p>Experience with the Unicode support in Erlang has made it
- painfully clear that understanding Unicode characters and encodings
- is not as easy as one would expect. The complexity of the field as
- well as the implications of the standard requires thorough
- understanding of concepts rarely before thought of.</p>
-
- <p>Furthermore the Erlang implementation requires understanding of
- concepts that never were an issue for many (Erlang) programmers. To
- understand and use Unicode characters requires that you study the
- subject thoroughly, even if you're an experienced programmer.</p>
-
- <p>As an example, one could contemplate the issue of converting
- between upper and lower case letters. Reading the standard will make
- you realize that, to begin with, there's not a simple one to one
- mapping in all scripts. Take German as an example, where there's a
- letter "ß" (Sharp s) in lower case, but the uppercase equivalent is
- "SS". Or Greek, where "Σ" has two different lowercase forms: "ς" in
- word-final position and "σ" elsewhere. Or Turkish where dotted and
- dot-less "i" both exist in lower case and upper case forms, or
- Cyrillic "I" which usually has no lowercase form. Or of course
- languages that have no concept of upper case (or lower case). So, a
- conversion function will need to know not only one character at a
- time, but possibly the whole sentence, maybe the natural language
- the translation should be in and also take into account differences
- in input and output string length and so on. There is at the time of
- writing no Unicode to_upper/to_lower functionality in Erlang/OTP, but
- there are publicly available libraries that address these issues.</p>
-
- <p>Another example is the accented characters where the same glyph
- has two different representations. Let's look at the Swedish
- "ö". There's a code point for that in the Unicode standard, but you
- can also write it as "o" followed by U+0308 (Combining Diaeresis,
- with the simplified meaning that the last letter should have a "¨"
- above). They have exactly the same glyph. They are for most
- purposes the same, but they have completely different
- representations. For example MacOS X converts all file names to use
- Combining Diaeresis, while most other programs (including Erlang)
- try to hide that by doing the opposite when for example listing
- directories. However it's done, it's usually important to normalize
- such characters to avoid utter confusion.</p>
-
- <p>The list of examples can be made as long as the Unicode standard, I
- suspect. The point is that one need a kind of knowledge that was
- never needed when programs only took one or two languages into
- account. The complexity of human languages and scripts, certainly
- has made this a challenge when constructing a universal
- standard. Supporting Unicode properly in your program <em>will</em> require
- effort.</p>
-
-</section>
-<section>
-<title>What Unicode Is</title>
- <p>Unicode is a standard defining code points (numbers) for all
- known, living or dead, scripts. In principle, every known symbol
- used in any language has a Unicode code point.</p>
- <p>Unicode code points are defined and published by the <em>Unicode
- Consortium</em>, which is a non profit organization.</p>
- <p>Support for Unicode is increasing throughout the world of
- computing, as the benefits of one common character set are
- overwhelming when programs are used in a global environment.</p>
- <p>Along with the base of the standard: the code points for all the
- scripts, there are a couple of <em>encoding standards</em> available.</p>
- <p>It is vital to understand the difference between encodings and
- Unicode characters. Unicode characters are code points according to
- the Unicode standard, while the encodings are ways to represent such
- code points. An encoding is just a standard for representation,
- UTF-8 can for example be used to represent a very limited part of
- the Unicode character set (e.g. ISO-Latin-1), or the full Unicode
- range. It's just an encoding format.</p>
- <p>As long as all character sets were limited to 256 characters,
- each character could be stored in one single byte, so there was more
- or less only one practical encoding for the characters. Encoding
- each character in one byte was so common that the encoding wasn't
- even named. When we now, with the Unicode system, have a lot more
- than 256 characters, we need a common way to represent these. The
- common ways of representing the code points are the encodings. This
- means a whole new concept to the programmer, the concept of
- character representation, which was before a non-issue.</p>
-
- <p>Different operating systems and tools support different
- encodings. For example Linux and MacOS X has chosen the UTF-8
- encoding, which is backwards compatible with 7-bit ASCII and
- therefore affects programs written in plain English the
- least. Windows on the other hand supports a limited version of
- UTF-16, namely all the code planes where the characters can be
- stored in one single 16-bit entity, which includes most living
- languages.</p>
-
- <p>The most widely spread encodings are:</p>
- <taglist>
- <tag>Bytewise representation</tag>
- <item>This is not a proper Unicode representation, but the
- representation used for characters before the Unicode standard. It
- can still be used to represent character code points in the Unicode
- standard that have numbers below 256, which corresponds exactly to
- the ISO-Latin-1 character set. In Erlang, this is commonly denoted
- <c>latin1</c> encoding, which is slightly misleading as ISO-Latin-1 is
- a character code range, not an encoding.</item>
- <tag>UTF-8</tag>
- <item>Each character is stored in one to four bytes depending on
- code point. The encoding is backwards compatible with bytewise
- representation of 7-bit ASCII as all 7-bit characters are stored
- in one single byte in UTF-8. The characters beyond code point 127
- are stored in more bytes, letting the most significant bit in the
- first character indicate a multi-byte character. For details on
- the encoding, the RFC is publicly available. Note that UTF-8 is
- <em>not</em> compatible with bytewise representation for
- code points between 128 and 255, so a ISO-Latin-1 bytewise
- representation is not generally compatible with UTF-8.</item>
- <tag>UTF-16</tag>
- <item>This encoding has many similarities to UTF-8, but the basic
- unit is a 16-bit number. This means that all characters occupy at
- least two bytes, some high numbers even four bytes. Some programs,
- libraries and operating systems claiming to use UTF-16 only allows
- for characters that can be stored in one 16-bit entity, which is
- usually sufficient to handle living languages. As the basic unit
- is more than one byte, byte-order issues occur, why UTF-16 exists
- in both a big-endian and little-endian variant. In Erlang, the
- full UTF-16 range is supported when applicable, like in the
- <c>unicode</c> module and in the bit syntax.</item>
- <tag>UTF-32</tag>
- <item>The most straight forward representation. Each character is
- stored in one single 32-bit number. There is no need for escapes
- or any variable amount of entities for one character, all Unicode
- code points can be stored in one single 32-bit entity. As with
- UTF-16, there are byte-order issues, UTF-32 can be both big- and
- little-endian.</item>
- <tag>UCS-4</tag>
- <item>Basically the same as UTF-32, but without some Unicode
- semantics, defined by IEEE and has little use as a separate
- encoding standard. For all normal (and possibly abnormal) usages,
- UTF-32 and UCS-4 are interchangeable.</item>
- </taglist>
- <p>Certain ranges of numbers are left unused in the Unicode standard
- and certain ranges are even deemed invalid. The most notable invalid
- range is 16#D800 - 16#DFFF, as the UTF-16 encoding does not allow
- for encoding of these numbers. It can be speculated that the UTF-16
- encoding standard was, from the beginning, expected to be able to
- hold all Unicode characters in one 16-bit entity, but then had to be
- extended, leaving a hole in the Unicode range to cope with backward
- compatibility.</p>
- <p>Additionally, the code point 16#FEFF is used for byte order marks
- (BOM's) and use of that character is not encouraged in other
- contexts than that. It actually is valid though, as the character
- "ZWNBS" (Zero Width Non Breaking Space). BOM's are used to identify
- encodings and byte order for programs where such parameters are not
- known in advance. Byte order marks are more seldom used than one
- could expect, but their use might become more widely spread as they
- provide the means for programs to make educated guesses about the
- Unicode format of a certain file.</p>
-</section>
-<section>
- <title>Areas of Unicode Support</title>
- <p>To support Unicode in Erlang, problems in several areas have been
- addressed. Each area is described briefly in this section and more
- thoroughly further down in this document:</p>
- <taglist>
- <tag>Representation</tag>
- <item>To handle Unicode characters in Erlang, we have to have a
- common representation both in lists and binaries. The EEP (10) and
- the subsequent initial implementation in Erlang/OTP R13A settled a standard
- representation of Unicode characters in Erlang.</item>
- <tag>Manipulation</tag>
- <item>The Unicode characters need to be processed by the Erlang
- program, why library functions need to be able to handle them. In
- some cases functionality was added to already existing interfaces
- (as the string module now can handle lists with arbitrary code points),
- in some cases new functionality or options need to be added (as in
- the <c>io</c>-module, the file handling, the <c>unicode</c> module
- and the bit syntax). Today most modules in kernel and STDLIB, as
- well as the VM are Unicode aware.</item>
- <tag>File I/O</tag>
- <item>I/O is by far the most problematic area for Unicode. A file
- is an entity where bytes are stored and the lore of programming
- has been to treat characters and bytes as interchangeable. With
- Unicode characters, you need to decide on an encoding as soon as
- you want to store the data in a file. In Erlang you can open a
- text file with an encoding option, so that you can read characters
- from it rather than bytes, but you can also open a file for
- bytewise I/O. The I/O-system of Erlang has been designed (or at
- least used) in a way where you expect any I/O-server to be
- able to cope with any string data, but that is no longer the case
- when you work with Unicode characters. Handling the fact that you
- need to know the capabilities of the device where your data ends
- up is something new to the Erlang programmer. Furthermore, ports
- in Erlang are byte oriented, so an arbitrary string of (Unicode)
- characters can not be sent to a port without first converting it
- to an encoding of choice.</item>
- <tag>Terminal I/O</tag>
- <item>Terminal I/O is slightly easier than file I/O. The output is
- meant for human reading and is usually Erlang syntax (e.g. in the
- shell). There exists syntactic representation of any Unicode
- character without actually displaying the glyph (instead written
- as <c>\x{</c>HHH<c>}</c>), so Unicode data can usually be displayed
- even if the terminal as such do not support the whole Unicode
- range.</item>
- <tag>File names</tag>
- <item>File names can be stored as Unicode strings, in different
- ways depending on the underlying OS and file system. This can be
- handled fairly easy by a program. The problems arise when the file
- system is not consistent in it's encodings, like for example
- Linux. Linux allows files to be named with any sequence of bytes,
- leaving to each program to interpret those bytes. On systems where
- these "transparent" file names are used, Erlang has to be informed
- about the file name encoding by a startup flag. The default is
- bytewise interpretation, which is actually usually wrong, but
- allows for interpretation of <em>all</em> file names. The concept
- of "raw file names" can be used to handle wrongly encoded
- file names if one enables Unicode file name translation
- (<c>+fnu</c>) on platforms where this is not the default.</item>
- <tag>Source code encoding</tag>
- <item>When it comes to the Erlang source code, there is support
- for the UTF-8 encoding and bytewise encoding. The default in
- Erlang/OTP R16B was bytewise (or latin1) encoding; in Erlang/OTP 17.0
- it was changed to UTF-8. You can control the encoding by a comment like:
-<code>
-%% -*- coding: utf-8 -*-
-</code>
- in the beginning of the file. This of course requires your editor to
- support UTF-8 as well. The same comment is also interpreted by
- functions like <c>file:consult/1</c>, the release handler etc, so that
- you can have all text files in your source directories in UTF-8
- encoding.
- </item>
- <tag>The language</tag>
- <item>Having the source code in UTF-8 also allows you to write
- string literals containing Unicode characters with code points &gt;
- 255, although atoms, module names and function names are
- restricted to the ISO-Latin-1 range. Binary
- literals where you use the <c>/utf8</c> type, can also be
- expressed using Unicode characters &gt; 255. Having module names
- using characters other than 7-bit ASCII can cause trouble on
- operating systems with inconsistent file naming schemes, and might
- also hurt portability, so it's not really recommended. It is
- suggested in EEP 40 that the language should also allow for
- Unicode characters &gt; 255 in variable names. Whether to
- implement that EEP or not is yet to be decided.</item>
- </taglist>
-</section>
-<section>
- <title>Standard Unicode Representation</title>
- <p>In Erlang, strings are actually lists of integers. A string was
- up until Erlang/OTP R13 defined to be encoded in the ISO-latin-1 (ISO8859-1)
- character set, which is, code point by code point, a sub-range of
- the Unicode character set.</p>
- <p>The standard list encoding for strings was therefore easily
- extended to cope with the whole Unicode range: A Unicode string in
- Erlang is simply a list containing integers, each integer being a
- valid Unicode code point and representing one character in the
- Unicode character set.</p>
- <p>Erlang strings in ISO-latin-1 are a subset of Unicode
- strings.</p>
- <p>Only if a string contains code points &lt; 256, can it be
- directly converted to a binary by using
- i.e. <c>erlang:iolist_to_binary/1</c> or can be sent directly to a
- port. If the string contains Unicode characters &gt; 255, an
- encoding has to be decided upon and the string should be converted
- to a binary in the preferred encoding using
- <c>unicode:characters_to_binary/{1,2,3}</c>. Strings are not
- generally lists of bytes, as they were before Erlang/OTP R13. They are lists of
- characters. Characters are not generally bytes, they are Unicode
- code points.</p>
-
- <p>Binaries are more troublesome. For performance reasons, programs
- often store textual data in binaries instead of lists, mainly
- because they are more compact (one byte per character instead of two
- words per character, as is the case with lists). Using
- <c>erlang:list_to_binary/1</c>, an ISO-Latin-1 Erlang string could
- be converted into a binary, effectively using bytewise encoding -
- one byte per character. This was very convenient for those limited
- Erlang strings, but cannot be done for arbitrary Unicode lists.</p>
- <p>As the UTF-8 encoding is widely spread and provides some backward
- compatibility in the 7-bit ASCII range, it is selected as the
- standard encoding for Unicode characters in binaries for Erlang.</p>
- <p>The standard binary encoding is used whenever a library function
- in Erlang should cope with Unicode data in binaries, but is of
- course not enforced when communicating externally. Functions and
- bit-syntax exist to encode and decode both UTF-8, UTF-16 and UTF-32
- in binaries. Library functions dealing with binaries and Unicode in
- general, however, only deal with the default encoding.</p>
-
- <p>Character data may be combined from several sources, sometimes
- available in a mix of strings and binaries. Erlang has for long had
- the concept of <c>iodata</c> or <c>iolist</c>s, where binaries and
- lists can be combined to represent a sequence of bytes. In the same
- way, the Unicode aware modules often allow for combinations of
- binaries and lists where the binaries have characters encoded in
- UTF-8 and the lists contain such binaries or numbers representing
- Unicode code points:</p>
- <code type="none">
+ <section>
+ <title>Unicode Implementation</title>
+ <p>Implementing support for Unicode character sets is an ongoing process.
+ The Erlang Enhancement Proposal (EEP) 10 outlined the basics of Unicode
+ support and specified a default encoding in binaries that all
+ Unicode-aware modules are to handle in the future.</p>
+
+ <p>Here is an overview what has been done so far:</p>
+
+ <list type="bulleted">
+ <item><p>The functionality described in EEP10 was implemented
+ in Erlang/OTP R13A.</p></item>
+
+ <item><p>Erlang/OTP R14B01 added support for Unicode
+ filenames, but it was not complete and was by default
+ disabled on platforms where no guarantee was given for the
+ filename encoding.</p></item>
+
+ <item><p>With Erlang/OTP R16A came support for UTF-8 encoded
+ source code, with enhancements to many of the applications to
+ support both Unicode encoded filenames and support for UTF-8
+ encoded files in many circumstances. Most notable is the
+ support for UTF-8 in files read by <seealso
+ marker="kernel:file#consult/1"><c>file:consult/1</c></seealso>,
+ release handler support for UTF-8, and more support for
+ Unicode character sets in the I/O system.</p></item>
+
+ <item><p>In Erlang/OTP 17.0, the encoding default for Erlang
+ source files was switched to UTF-8.</p></item>
+ </list>
+
+ <p>This section outlines the current Unicode support and gives some
+ recipes for working with Unicode data.</p>
+ </section>
+
+ <section>
+ <title>Understanding Unicode</title>
+ <p>Experience with the Unicode support in Erlang has made it clear that
+ understanding Unicode characters and encodings is not as easy as one
+ would expect. The complexity of the field and the implications of the
+ standard require thorough understanding of concepts rarely before
+ thought of.</p>
+
+ <p>Also, the Erlang implementation requires understanding of
+ concepts that were never an issue for many (Erlang) programmers. To
+ understand and use Unicode characters requires that you study the
+ subject thoroughly, even if you are an experienced programmer.</p>
+
+ <p>As an example, contemplate the issue of converting between upper and
+ lower case letters. Reading the standard makes you realize that there is
+ not a simple one to one mapping in all scripts, for example:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>In German, the letter "ß" (sharp s) is in lower case, but the
+ uppercase equivalent is "SS".</p>
+ </item>
+ <item>
+ <p>In Greek, the letter "Σ" has two different lowercase forms,
+ "ς" in word-final position and "σ" elsewhere.</p>
+ </item>
+ <item>
+ <p>In Turkish, both dotted and dotless "i" exist in lower case and
+ upper case forms.</p>
+ </item>
+ <item>
+ <p>Cyrillic "I" has usually no lowercase form.</p>
+ </item>
+ <item>
+ <p>Languages with no concept of upper case (or lower case).</p>
+ </item>
+ </list>
+
+ <p>So, a conversion function must know not only one character at a time,
+ but possibly the whole sentence, the natural language to translate to,
+ the differences in input and output string length, and so on.
+ Erlang/OTP has currently no Unicode <c>to_upper</c>/<c>to_lower</c>
+ functionality, but publicly available libraries address these issues.</p>
+
+ <p>Another example is the accented characters, where the same glyph has two
+ different representations. The Swedish letter "ö" is one example.
+ The Unicode standard has a code point for it, but you can also write it
+ as "o" followed by "U+0308" (Combining Diaeresis, with the simplified
+ meaning that the last letter is to have "¨" above). They have the same
+ glyph. They are for most purposes the same, but have different
+ representations. For example, MacOS X converts all filenames to use
+ Combining Diaeresis, while most other programs (including Erlang) try to
+ hide that by doing the opposite when, for example, listing directories.
+ However it is done, it is usually important to normalize such
+ characters to avoid confusion.</p>
+
+ <p>The list of examples can be made long. One need a kind of knowledge that
+ was not needed when programs only considered one or two languages. The
+ complexity of human languages and scripts has certainly made this a
+ challenge when constructing a universal standard. Supporting Unicode
+ properly in your program will require effort.</p>
+ </section>
+
+ <section>
+ <title>What Unicode Is</title>
+ <p>Unicode is a standard defining code points (numbers) for all known,
+ living or dead, scripts. In principle, every symbol used in any
+ language has a Unicode code point. Unicode code points are defined and
+ published by the Unicode Consortium, which is a non-profit
+ organization.</p>
+
+ <p>Support for Unicode is increasing throughout the world of computing, as
+ the benefits of one common character set are overwhelming when programs
+ are used in a global environment. Along with the base of the standard,
+ the code points for all the scripts, some <em>encoding standards</em> are
+ available.</p>
+
+ <p>It is vital to understand the difference between encodings and Unicode
+ characters. Unicode characters are code points according to the Unicode
+ standard, while the encodings are ways to represent such code points. An
+ encoding is only a standard for representation. UTF-8 can, for example,
+ be used to represent a very limited part of the Unicode character set
+ (for example ISO-Latin-1) or the full Unicode range. It is only an
+ encoding format.</p>
+
+ <p>As long as all character sets were limited to 256 characters, each
+ character could be stored in one single byte, so there was more or less
+ only one practical encoding for the characters. Encoding each character
+ in one byte was so common that the encoding was not even named. With the
+ Unicode system there are much more than 256 characters, so a common way
+ is needed to represent these. The common ways of representing the code
+ points are the encodings. This means a whole new concept to the
+ programmer, the concept of character representation, which was a
+ non-issue earlier.</p>
+
+ <p>Different operating systems and tools support different encodings. For
+ example, Linux and MacOS X have chosen the UTF-8 encoding, which is
+ backward compatible with 7-bit ASCII and therefore affects programs
+ written in plain English the least. Windows supports a limited version
+ of UTF-16, namely all the code planes where the characters can be
+ stored in one single 16-bit entity, which includes most living
+ languages.</p>
+
+ <p>The following are the most widely spread encodings:</p>
+
+ <taglist>
+ <tag>Bytewise representation</tag>
+ <item>
+ <p>This is not a proper Unicode representation, but the representation
+ used for characters before the Unicode standard. It can still be used
+ to represent character code points in the Unicode standard with
+ numbers &lt; 256, which exactly corresponds to the ISO Latin-1
+ character set. In Erlang, this is commonly denoted <c>latin1</c>
+ encoding, which is slightly misleading as ISO Latin-1 is a
+ character code range, not an encoding.</p>
+ </item>
+ <tag>UTF-8</tag>
+ <item>
+ <p>Each character is stored in one to four bytes depending on code
+ point. The encoding is backward compatible with bytewise
+ representation of 7-bit ASCII, as all 7-bit characters are stored in
+ one single byte in UTF-8. The characters beyond code point 127 are
+ stored in more bytes, letting the most significant bit in the first
+ character indicate a multi-byte character. For details on the
+ encoding, the RFC is publicly available.</p>
+ <p>Notice that UTF-8 is <em>not</em> compatible with bytewise
+ representation for code points from 128 through 255, so an ISO
+ Latin-1 bytewise representation is generally incompatible with
+ UTF-8.</p>
+ </item>
+ <tag>UTF-16</tag>
+ <item>
+ <p>This encoding has many similarities to UTF-8, but the basic
+ unit is a 16-bit number. This means that all characters occupy
+ at least two bytes, and some high numbers four bytes. Some
+ programs, libraries, and operating systems claiming to use
+ UTF-16 only allow for characters that can be stored in one
+ 16-bit entity, which is usually sufficient to handle living
+ languages. As the basic unit is more than one byte, byte-order
+ issues occur, which is why UTF-16 exists in both a big-endian
+ and a little-endian variant.</p>
+ <p>In Erlang, the full UTF-16 range is supported when applicable, like
+ in the <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
+ module and in the bit syntax.</p>
+ </item>
+ <tag>UTF-32</tag>
+ <item>
+ <p>The most straightforward representation. Each character is stored in
+ one single 32-bit number. There is no need for escapes or any
+ variable number of entities for one character. All Unicode code
+ points can be stored in one single 32-bit entity. As with UTF-16,
+ there are byte-order issues. UTF-32 can be both big-endian and
+ little-endian.</p>
+ </item>
+ <tag>UCS-4</tag>
+ <item>
+ <p>Basically the same as UTF-32, but without some Unicode semantics,
+ defined by IEEE, and has little use as a separate encoding standard.
+ For all normal (and possibly abnormal) use, UTF-32 and UCS-4 are
+ interchangeable.</p>
+ </item>
+ </taglist>
+
+ <p>Certain number ranges are unused in the Unicode standard and certain
+ ranges are even deemed invalid. The most notable invalid range is
+ 16#D800-16#DFFF, as the UTF-16 encoding does not allow for encoding of
+ these numbers. This is possibly because the UTF-16 encoding standard,
+ from the beginning, was expected to be able to hold all Unicode
+ characters in one 16-bit entity, but was then extended, leaving a hole
+ in the Unicode range to handle backward compatibility.</p>
+
+ <p>Code point 16#FEFF is used for Byte Order Marks (BOMs) and use of that
+ character is not encouraged in other contexts. It is valid though, as
+ the character "ZWNBS" (Zero Width Non Breaking Space). BOMs are used to
+ identify encodings and byte order for programs where such parameters are
+ not known in advance. BOMs are more seldom used than expected, but can
+ become more widely spread as they provide the means for programs to make
+ educated guesses about the Unicode format of a certain file.</p>
+ </section>
+
+ <section>
+ <title>Areas of Unicode Support</title>
+ <p>To support Unicode in Erlang, problems in various areas have been
+ addressed. This section describes each area briefly and more
+ thoroughly later in this User's Guide.</p>
+
+ <taglist>
+ <tag>Representation</tag>
+ <item>
+ <p>To handle Unicode characters in Erlang, a common representation
+ in both lists and binaries is needed. EEP (10) and the subsequent
+ initial implementation in Erlang/OTP R13A settled a standard
+ representation of Unicode characters in Erlang.</p>
+ </item>
+ <tag>Manipulation</tag>
+ <item>
+ <p>The Unicode characters need to be processed by the Erlang
+ program, which is why library functions must be able to handle
+ them. In some cases functionality has been added to already
+ existing interfaces (as the <seealso
+ marker="stdlib:string"><c>string</c></seealso> module now can
+ handle lists with any code points). In some cases new
+ functionality or options have been added (as in the <seealso
+ marker="stdlib:io"><c>io</c></seealso> module, the file
+ handling, the <seealso
+ marker="stdlib:unicode"><c>unicode</c></seealso> module, and
+ the bit syntax). Today most modules in <c>Kernel</c> and
+ <c>STDLIB</c>, as well as the VM are Unicode-aware.</p>
+ </item>
+ <tag>File I/O</tag>
+ <item>
+ <p>I/O is by far the most problematic area for Unicode. A file is an
+ entity where bytes are stored, and the lore of programming has been
+ to treat characters and bytes as interchangeable. With Unicode
+ characters, you must decide on an encoding when you want to store
+ the data in a file. In Erlang, you can open a text file with an
+ encoding option, so that you can read characters from it rather than
+ bytes, but you can also open a file for bytewise I/O.</p>
+ <p>The Erlang I/O-system has been designed (or at least used) in a way
+ where you expect any I/O server to handle any string data.
+ That is, however, no longer the case when working with Unicode
+ characters. The Erlang programmer must now know the
+ capabilities of the device where the data ends up. Also, ports in
+ Erlang are byte-oriented, so an arbitrary string of (Unicode)
+ characters cannot be sent to a port without first converting it to an
+ encoding of choice.</p>
+ </item>
+ <tag>Terminal I/O</tag>
+ <item>
+ <p>Terminal I/O is slightly easier than file I/O. The output is meant
+ for human reading and is usually Erlang syntax (for example, in the
+ shell). There exists syntactic representation of any Unicode
+ character without displaying the glyph (instead written as
+ <c>\x</c>{<c>HHH</c>}). Unicode data can therefore usually be
+ displayed even if the terminal as such does not support the whole
+ Unicode range.</p>
+ </item>
+ <tag>Filenames</tag>
+ <item>
+ <p>Filenames can be stored as Unicode strings in different ways
+ depending on the underlying operating system and file system. This
+ can be handled fairly easy by a program. The problems arise when the
+ file system is inconsistent in its encodings. For example, Linux
+ allows files to be named with any sequence of bytes, leaving to each
+ program to interpret those bytes. On systems where these
+ "transparent" filenames are used, Erlang must be informed about the
+ filename encoding by a startup flag. The default is bytewise
+ interpretation, which is usually wrong, but allows for interpretation
+ of <em>all</em> filenames.</p>
+ <p>The concept of "raw filenames" can be used to handle wrongly encoded
+ filenames if one enables Unicode filename translation (<c>+fnu</c>)
+ on platforms where this is not the default.</p>
+ </item>
+ <tag>Source code encoding</tag>
+ <item>
+ <p>The Erlang source code has support for the UTF-8 encoding
+ and bytewise encoding. The default in Erlang/OTP R16B was bytewise
+ (<c>latin1</c>) encoding. It was changed to UTF-8 in Erlang/OTP 17.0.
+ You can control the encoding by a comment like the following in the
+ beginning of the file:</p>
+ <code>
+%% -*- coding: utf-8 -*-</code>
+ <p>This of course requires your editor to support UTF-8 as well. The
+ same comment is also interpreted by functions like
+ <seealso marker="kernel:file#consult/1"><c>file:consult/1</c></seealso>,
+ the release handler, and so on, so that you can have all text files
+ in your source directories in UTF-8 encoding.</p>
+ </item>
+ <tag>The language</tag>
+ <item>
+ <p>Having the source code in UTF-8 also allows you to write string
+ literals containing Unicode characters with code points &gt; 255,
+ although atoms, module names, and function names are restricted to
+ the ISO Latin-1 range. Binary literals, where you use type
+ <c>/utf8</c>, can also be expressed using Unicode characters &gt; 255.
+ Having module names using characters other than 7-bit ASCII can cause
+ trouble on operating systems with inconsistent file naming schemes,
+ and can hurt portability, so it is not recommended.</p>
+ <p>EEP 40 suggests that the language is also to allow for Unicode
+ characters &gt; 255 in variable names. Whether to implement that EEP
+ is yet to be decided.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>Standard Unicode Representation</title>
+ <p>In Erlang, strings are lists of integers. A string was until
+ Erlang/OTP R13 defined to be encoded in the ISO Latin-1 (ISO 8859-1)
+ character set, which is, code point by code point, a subrange of the
+ Unicode character set.</p>
+
+ <p>The standard list encoding for strings was therefore easily extended to
+ handle the whole Unicode range. A Unicode string in Erlang is a list
+ containing integers, where each integer is a valid Unicode code point and
+ represents one character in the Unicode character set.</p>
+
+ <p>Erlang strings in ISO Latin-1 are a subset of Unicode strings.</p>
+
+ <p>Only if a string contains code points &lt; 256, can it be directly
+ converted to a binary by using, for example,
+ <seealso marker="erts:erlang#iolist_to_binary/1"><c>erlang:iolist_to_binary/1</c></seealso>
+ or can be sent directly to a port. If the string contains Unicode
+ characters &gt; 255, an encoding must be decided upon and the string is to
+ be converted to a binary in the preferred encoding using
+ <seealso marker="stdlib:unicode#characters_to_binary/1"><c>unicode:characters_to_binary/1,2,3</c></seealso>.
+ Strings are not generally lists of bytes, as they were before
+ Erlang/OTP R13, they are lists of characters. Characters are not
+ generally bytes, they are Unicode code points.</p>
+
+ <p>Binaries are more troublesome. For performance reasons, programs often
+ store textual data in binaries instead of lists, mainly because they are
+ more compact (one byte per character instead of two words per character,
+ as is the case with lists). Using
+ <seealso marker="erts:erlang#list_to_binary/1"><c>erlang:list_to_binary/1</c></seealso>,
+ an ISO Latin-1 Erlang string can be converted into a binary, effectively
+ using bytewise encoding: one byte per character. This was convenient for
+ those limited Erlang strings, but cannot be done for arbitrary Unicode
+ lists.</p>
+
+ <p>As the UTF-8 encoding is widely spread and provides some backward
+ compatibility in the 7-bit ASCII range, it is selected as the standard
+ encoding for Unicode characters in binaries for Erlang.</p>
+
+ <p>The standard binary encoding is used whenever a library function in
+ Erlang is to handle Unicode data in binaries, but is of course not
+ enforced when communicating externally. Functions and bit syntax exist to
+ encode and decode both UTF-8, UTF-16, and UTF-32 in binaries. However,
+ library functions dealing with binaries and Unicode in general only deal
+ with the default encoding.</p>
+
+ <p>Character data can be combined from many sources, sometimes available in
+ a mix of strings and binaries. Erlang has for long had the concept of
+ <c>iodata</c> or <c>iolist</c>s, where binaries and lists can be combined
+ to represent a sequence of bytes. In the same way, the Unicode-aware
+ modules often allow for combinations of binaries and lists, where the
+ binaries have characters encoded in UTF-8 and the lists contain such
+ binaries or numbers representing Unicode code points:</p>
+
+ <code type="none">
unicode_binary() = binary() with characters encoded in UTF-8 coding standard
chardata() = charlist() | unicode_binary()
charlist() = maybe_improper_list(char() | unicode_binary() | charlist(),
- unicode_binary() | nil())</code>
- <p>The module <seealso
- marker="stdlib:unicode"><c>unicode</c></seealso> in STDLIB even
- supports similar mixes with binaries containing other encodings than
- UTF-8, but that is a special case to allow for conversions to and
- from external data:</p>
- <code type="none">
-external_unicode_binary() = binary() with characters coded in
- a user specified Unicode encoding other than UTF-8 (UTF-16 or UTF-32)
+ unicode_binary() | nil())</code>
+
+ <p>The module <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
+ even supports similar mixes with binaries containing other encodings than
+ UTF-8, but that is a special case to allow for conversions to and from
+ external data:</p>
+
+ <code type="none">
+external_unicode_binary() = binary() with characters coded in a user-specified
+ Unicode encoding other than UTF-8 (UTF-16 or UTF-32)
external_chardata() = external_charlist() | external_unicode_binary()
-external_charlist() = maybe_improper_list(char() |
- external_unicode_binary() |
- external_charlist(),
- external_unicode_binary() | nil())</code>
-</section>
-<section>
- <title>Basic Language Support</title>
- <p><marker id="unicode_in_erlang"/>As of Erlang/OTP R16 Erlang
- source files can be written in either UTF-8 or bytewise encoding
- (a.k.a. <c>latin1</c> encoding). The details on how to state the encoding
- of an Erlang source file can be found in
- <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>. Strings and comments
- can be written using Unicode, but functions still have to be named
- using characters from the ISO-latin-1 character set and atoms are
- restricted to the same ISO-latin-1 range. These restrictions in the
- language are of course independent of the encoding of the source
- file.</p>
+external_charlist() = maybe_improper_list(char() | external_unicode_binary() |
+ external_charlist(), external_unicode_binary() | nil())</code>
+ </section>
+
<section>
- <title>Bit-syntax</title>
- <p>The bit-syntax contains types for coping with binary data in the
- three main encodings. The types are named <c>utf8</c>, <c>utf16</c>
- and <c>utf32</c> respectively. The <c>utf16</c> and <c>utf32</c> types
- can be in a big- or little-endian variant:</p>
- <code>
+ <title>Basic Language Support</title>
+ <p><marker id="unicode_in_erlang"/>As from Erlang/OTP R16, Erlang source
+ files can be written in UTF-8 or bytewise (<c>latin1</c>) encoding. For
+ information about how to state the encoding of an Erlang source file, see
+ the <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso> module.
+ Strings and comments can be written using Unicode, but functions must
+ still be named using characters from the ISO Latin-1 character set, and
+ atoms are restricted to the same ISO Latin-1 range. These restrictions in
+ the language are of course independent of the encoding of the source
+ file.</p>
+
+ <section>
+ <title>Bit Syntax</title>
+ <p>The bit syntax contains types for handling binary data in the
+ three main encodings. The types are named <c>utf8</c>, <c>utf16</c>,
+ and <c>utf32</c>. The <c>utf16</c> and <c>utf32</c> types can be in a
+ big-endian or a little-endian variant:</p>
+
+ <code>
&lt;&lt;Ch/utf8,_/binary&gt;&gt; = Bin1,
&lt;&lt;Ch/utf16-little,_/binary&gt;&gt; = Bin2,
Bin3 = &lt;&lt;$H/utf32-little, $e/utf32-little, $l/utf32-little, $l/utf32-little,
$o/utf32-little&gt;&gt;,</code>
- <p>For convenience, literal strings can be encoded with a Unicode
- encoding in binaries using the following (or similar) syntax:</p>
- <code>
+
+ <p>For convenience, literal strings can be encoded with a Unicode
+ encoding in binaries using the following (or similar) syntax:</p>
+
+ <code>
Bin4 = &lt;&lt;"Hello"/utf16&gt;&gt;,</code>
- </section>
- <section>
- <title>String and Character Literals</title>
- <p>For source code, there is an extension to the <c>\</c>OOO
- (backslash followed by three octal numbers) and <c>\x</c>HH
- (backslash followed by <c>x</c>, followed by two hexadecimal
- characters) syntax, namely <c>\x{</c>H ...<c>}</c> (a backslash
- followed by an <c>x</c>, followed by left curly bracket, any
- number of hexadecimal digits and a terminating right curly
- bracket). This allows for entering characters of any code point
- literally in a string even when the encoding of the source file is
- bytewise (<c>latin1</c>).</p>
- <p>In the shell, if using a Unicode input device, or in source
- code stored in UTF-8, <c>$</c> can be followed directly by a
- Unicode character producing an integer. In the following example
- the code point of a Cyrillic <c>с</c> is output:</p>
- <pre>
+ </section>
+
+ <section>
+ <title>String and Character Literals</title>
+ <p>For source code, there is an extension to syntax <c>\</c>OOO
+ (backslash followed by three octal numbers) and <c>\x</c>HH (backslash
+ followed by <c>x</c>, followed by two hexadecimal characters), namely
+ <c>\x{</c>H ...<c>}</c> (backslash followed by <c>x</c>, followed by
+ left curly bracket, any number of hexadecimal digits, and a terminating
+ right curly bracket). This allows for entering characters of any code
+ point literally in a string even when the encoding of the source file
+ is bytewise (<c>latin1</c>).</p>
+
+ <p>In the shell, if using a Unicode input device, or in source code
+ stored in UTF-8, <c>$</c> can be followed directly by a Unicode
+ character producing an integer. In the following example, the code
+ point of a Cyrillic <c>с</c> is output:</p>
+
+ <pre>
7> <input>$с.</input>
1089</pre>
- </section>
- <section>
- <title>Heuristic String Detection</title>
- <p>In certain output functions and in the output of return values
- in the shell, Erlang tries to heuristically detect string data in
- lists and binaries. Typically you will see heuristic detection in
- a situation like this:</p>
- <pre>
+ </section>
+
+ <section>
+ <title>Heuristic String Detection</title>
+ <p>In certain output functions and in the output of return values in
+ the shell, Erlang tries to detect string data in lists and binaries
+ heuristically. Typically you will see heuristic detection in a
+ situation like this:</p>
+
+ <pre>
1> <input>[97,98,99].</input>
"abc"
2> <input>&lt;&lt;97,98,99&gt;&gt;.</input>
&lt;&lt;"abc"&gt;&gt;
3> <input>&lt;&lt;195,165,195,164,195,182&gt;&gt;.</input>
&lt;&lt;"åäö"/utf8&gt;&gt;</pre>
- <p>Here the shell will detect lists containing printable
- characters or binaries containing printable characters either in
- bytewise or UTF-8 encoding. The question here is: what is a
- printable character? One view would be that anything the Unicode
- standard thinks is printable, will also be printable according to
- the heuristic detection. The result would be that almost any list
- of integers will be deemed a string, resulting in all sorts of
- characters being printed, maybe even characters your terminal does
- not have in its font set (resulting in some generic output you
- probably will not appreciate). Another way is to keep it backwards
- compatible so that only the ISO-Latin-1 character set is used to
- detect a string. A third way would be to let the user decide
- exactly what Unicode ranges are to be viewed as characters. Since
- Erlang/OTP R16B you can select either the whole Unicode range or the
- ISO-Latin-1 range by supplying the startup flag <c>+pc
- </c><i>Range</i>, where <i>Range</i> is either <c>latin1</c> or
- <c>unicode</c>. For backwards compatibility, the default is
- <c>latin1</c>. This only controls how heuristic string detection
- is done. In the future, more ranges are expected to be added, so
- that one can tailor the heuristics to the language and region
- relevant to the user.</p>
- <p>Lets look at an example with the two different startup options:</p>
-<pre>
+
+ <p>Here the shell detects lists containing printable characters or
+ binaries containing printable characters in bytewise or UTF-8 encoding.
+ But what is a printable character? One view is that anything the Unicode
+ standard thinks is printable, is also printable according to the
+ heuristic detection. The result is then that almost any list of
+ integers are deemed a string, and all sorts of characters are printed,
+ maybe also characters that your terminal lacks in its font set
+ (resulting in some unappreciated generic output).
+ Another way is to keep it backward compatible so that only the ISO
+ Latin-1 character set is used to detect a string. A third way is to let
+ the user decide exactly what Unicode ranges that are to be viewed as
+ characters.</p>
+
+ <p>As from Erlang/OTP R16B you can select the ISO Latin-1 range or the
+ whole Unicode range by supplying startup flag <c>+pc latin1</c> or
+ <c>+pc unicode</c>, respectively. For backward compatibility,
+ <c>latin1</c> is default. This only controls how heuristic string
+ detection is done. More ranges are expected to be added in the future,
+ enabling tailoring of the heuristics to the language and region
+ relevant to the user.</p>
+
+ <p>The following examples show the two startup options:</p>
+
+ <pre>
$ <input>erl +pc latin1</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -467,9 +535,9 @@ Eshell V5.10.1 (abort with ^G)
4> <input>&lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;.</input>
&lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;
5> <input>&lt;&lt;229/utf8,228/utf8,246/utf8&gt;&gt;.</input>
-&lt;&lt;"åäö"/utf8&gt;&gt;
-</pre>
-<pre>
+&lt;&lt;"åäö"/utf8&gt;&gt;</pre>
+
+ <pre>
$ <input>erl +pc unicode</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -483,78 +551,88 @@ Eshell V5.10.1 (abort with ^G)
4> <input>&lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;.</input>
&lt;&lt;"Юникод"/utf8&gt;&gt;
5> <input>&lt;&lt;229/utf8,228/utf8,246/utf8&gt;&gt;.</input>
-&lt;&lt;"åäö"/utf8&gt;&gt;
-</pre>
- <p>In the examples, we can see that the default Erlang shell will
- only interpret characters from the ISO-Latin1 range as printable
- and will only detect lists or binaries with those "printable"
- characters as containing string data. The valid UTF-8 binary
- containing "Юникод", will not be printed as a string. When, on the
- other hand, started with all Unicode characters printable (<c>+pc
- unicode</c>), the shell will output anything containing printable
- Unicode data (in binaries either UTF-8 or bytewise encoded) as
- string data.</p>
-
- <p>These heuristics are also used by
- <c>io</c>(<c>_lib</c>)<c>:format/2</c> and friends when the
- <c>t</c> modifier is used in conjunction with <c>~p</c> or
- <c>~P</c>:</p>
-<pre>
+&lt;&lt;"åäö"/utf8&gt;&gt;</pre>
+
+ <p>In the examples, you can see that the default Erlang shell interprets
+ only characters from the ISO Latin1 range as printable and only detects
+ lists or binaries with those "printable" characters as containing
+ string data. The valid UTF-8 binary containing the Russian word
+ "Юникод", is not printed as a string. When started with all Unicode
+ characters printable (<c>+pc unicode</c>), the shell outputs anything
+ containing printable Unicode data (in binaries, either UTF-8 or
+ bytewise encoded) as string data.</p>
+
+ <p>These heuristics are also used by
+ <seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>,
+ <seealso marker="stdlib:io_lib#format/2"><c>io_lib:format/2</c></seealso>,
+ and friends when modifier <c>t</c> is used with <c>~p</c> or
+ <c>~P</c>:</p>
+
+ <pre>
$ <input>erl +pc latin1</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.10.1 (abort with ^G)
1> <input>io:format("~tp~n",[{&lt;&lt;"åäö"&gt;&gt;, &lt;&lt;"åäö"/utf8&gt;&gt;, &lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;}]).</input>
{&lt;&lt;"åäö"&gt;&gt;,&lt;&lt;"åäö"/utf8&gt;&gt;,&lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;}
-ok
-</pre>
-<pre>
+ok</pre>
+
+ <pre>
$ <input>erl +pc unicode</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.10.1 (abort with ^G)
1> <input>io:format("~tp~n",[{&lt;&lt;"åäö"&gt;&gt;, &lt;&lt;"åäö"/utf8&gt;&gt;, &lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;}]).</input>
{&lt;&lt;"åäö"&gt;&gt;,&lt;&lt;"åäö"/utf8&gt;&gt;,&lt;&lt;"Юникод"/utf8&gt;&gt;}
-ok
-</pre>
- <p>Please observe that this only affects <i>heuristic</i> interpretation
- of lists and binaries on output. For example the <c>~ts</c> format
- sequence does always output a valid lists of characters,
- regardless of the <c>+pc</c> setting, as the programmer has
- explicitly requested string output.</p>
+ok</pre>
+
+ <p>Notice that this only affects <em>heuristic</em> interpretation of
+ lists and binaries on output. For example, the <c>~ts</c> format
+ sequence always outputs a valid list of characters, regardless of the
+ <c>+pc</c> setting, as the programmer has explicitly requested string
+ output.</p>
+ </section>
</section>
-</section>
-<section>
- <title>The Interactive Shell</title>
- <p>The interactive Erlang shell, when started towards a terminal or
- started using the <c>werl</c> command on windows, can support
- Unicode input and output.</p>
- <p>On Windows, proper operation requires that a suitable font
- is installed and selected for the Erlang application to use. If no
- suitable font is available on your system, try installing the DejaVu
- fonts (<c>dejavu-fonts.org</c>), which are freely available and then
- select that font in the Erlang shell application.</p>
- <p>On Unix-like operating systems, the terminal should be able
- to handle UTF-8 on input and output (modern versions of XTerm, KDE
- konsole and the Gnome terminal do for example) and your locale
- settings have to be proper. As an example, my <c>LANG</c>
- environment variable is set as this:</p>
- <pre>
+
+ <section>
+ <title>The Interactive Shell</title>
+ <p>The interactive Erlang shell, when started to a terminal or started
+ using command <c>werl</c> on Windows, can support Unicode input and
+ output.</p>
+
+ <p>On Windows, proper operation requires that a suitable font is
+ installed and selected for the Erlang application to use. If no suitable
+ font is available on your system, try installing the
+ <url href="http://dejavu-fonts.org">DejaVu fonts</url>, which are freely
+ available, and then select that font in the Erlang shell application.</p>
+
+ <p>On Unix-like operating systems, the terminal is to be able to handle
+ UTF-8 on input and output (this is done by, for example, modern versions
+ of XTerm, KDE Konsole, and the Gnome terminal)
+ and your locale settings must be proper. As
+ an example, a <c>LANG</c> environment variable can be set as follows:</p>
+
+ <pre>
$ <input>echo $LANG</input>
en_US.UTF-8</pre>
- <p>Actually, most systems handle the <c>LC_CTYPE</c> variable before
- <c>LANG</c>, so if that is set, it has to be set to
- <c>UTF-8</c>:</p>
- <pre>
+
+ <p>Most systems handle variable <c>LC_CTYPE</c> before <c>LANG</c>, so if
+ that is set, it must be set to <c>UTF-8</c>:</p>
+
+ <pre>
$ echo <input>$LC_CTYPE</input>
en_US.UTF-8</pre>
- <p>The <c>LANG</c> or <c>LC_CTYPE</c> setting should be consistent
- with what the terminal is capable of, there is no portable way for
- Erlang to ask the actual terminal about its UTF-8 capacity, we have
- to rely on the language and character type settings.</p>
- <p>To investigate what Erlang thinks about the terminal, the
- <c>io:getopts()</c> call can be used when the shell is started:</p>
- <pre>
+
+ <p>The <c>LANG</c> or <c>LC_CTYPE</c> setting are to be consistent with
+ what the terminal is capable of. There is no portable way for Erlang to
+ ask the terminal about its UTF-8 capacity, we have to rely on the
+ language and character type settings.</p>
+
+ <p>To investigate what Erlang thinks about the terminal, the call
+ <seealso marker="stdlib:io#getopts/1"><c>io:getopts()</c></seealso>
+ can be used when the shell is started:</p>
+
+ <pre>
$ <input>LC_CTYPE=en_US.ISO-8859-1 erl</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -571,27 +649,31 @@ Eshell V5.10.1 (abort with ^G)
{encoding,unicode}
2></pre>
- <p>When (finally?) everything is in order with the locale settings,
- fonts and the terminal emulator, you probably also have discovered a
- way to input characters in the script you desire. For testing, the
- simplest way is to add some keyboard mappings for other languages,
- usually done with some applet in your desktop environment. In my KDE
- environment, I start the KDE Control Center (Personal Settings),
- select "Regional and Accessibility" and then "Keyboard Layout". On
- Windows XP, I start Control Panel->Regional and Language
- Options, select the Language tab and click the Details... button in
- the square named "Text services and input Languages". Your
- environment probably provides similar means of changing the keyboard
- layout. Make sure you have a way to easily switch back and forth
- between keyboards if you are not used to this, entering commands
- using a Cyrillic character set is, as an example, not easily done in
- the Erlang shell.</p>
-
- <p>Now you are set up for some Unicode input and output. The
- simplest thing to do is of course to enter a string in the
- shell:</p>
-
- <pre>
+ <p>When (finally?) everything is in order with the locale settings, fonts.
+ and the terminal emulator, you have probably found a way to input
+ characters in the script you desire. For testing, the simplest way is to
+ add some keyboard mappings for other languages, usually done with some
+ applet in your desktop environment.</p>
+
+ <p>In a KDE environment, select <em>KDE Control Center (Personal
+ Settings)</em> > <em>Regional and Accessibility</em> > <em>Keyboard
+ Layout</em>.</p>
+
+ <p>On Windows XP, select <em>Control Panel</em> > <em>Regional and Language
+ Options</em>, select tab <em>Language</em>, and click button
+ <em>Details...</em> in the square named <em>Text Services and Input
+ Languages</em>.</p>
+
+ <p>Your environment
+ probably provides similar means of changing the keyboard layout. Ensure
+ that you have a way to switch back and forth between keyboards easily if
+ you are not used to this. For example, entering commands using a Cyrillic
+ character set is not easily done in the Erlang shell.</p>
+
+ <p>Now you are set up for some Unicode input and output. The simplest thing
+ to do is to enter a string in the shell:</p>
+
+ <pre>
$ <input>erl</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -603,12 +685,13 @@ Eshell V5.10.1 (abort with ^G)
3> <input>io:format("~ts~n", [v(2)]).</input>
Юникод
ok
-4> </pre>
- <p>While strings can be input as Unicode characters, the language
- elements are still limited to the ISO-latin-1 character set. Only
- character constants and strings are allowed to be beyond that
- range:</p>
- <pre>
+4></pre>
+
+ <p>While strings can be input as Unicode characters, the language elements
+ are still limited to the ISO Latin-1 character set. Only character
+ constants and strings are allowed to be beyond that range:</p>
+
+ <pre>
$ <input>erl</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -618,371 +701,398 @@ Eshell V5.10.1 (abort with ^G)
2> <input>Юникод.</input>
* 1: illegal character
2> </pre>
-</section>
-<section>
- <title>Unicode File Names</title>
- <marker id="unicode_file_names"/>
- <p>Most modern operating systems support Unicode file names in some
- way or another. There are several different ways to do this and
- Erlang by default treats the different approaches differently:</p>
- <taglist>
- <tag>Mandatory Unicode file naming</tag>
- <item>
- <p>Windows and, for most common uses, MacOS X enforces Unicode
- support for file names. All files created in the file system have
- names that can consistently be interpreted. In MacOS X, all file
- names are retrieved in UTF-8 encoding, while Windows has
- selected an approach where each system call handling file names
- has a special Unicode aware variant, giving much the same
- effect. There are no file names on these systems that are not
- Unicode file names, why the default behavior of the Erlang VM is
- to work in &quot;Unicode file name translation mode&quot;,
- meaning that a file name can be given as a Unicode list and that
- will be automatically translated to the proper name encoding for
- the underlying operating and file system.</p>
- <p>Doing i.e. a <c>file:list_dir/1</c> on one of these systems
- may return Unicode lists with code points beyond 255, depending
- on the content of the actual file system.</p>
- <p>As the feature is fairly new, you may still stumble upon non
- core applications that cannot handle being provided with file
- names containing characters with code points larger than 255, but
- the core Erlang system should have no problems with Unicode file
- names.</p>
- </item>
- <tag>Transparent file naming</tag>
- <item>
- <p>Most Unix operating systems have adopted a simpler approach,
- namely that Unicode file naming is not enforced, but by
- convention. Those systems usually use UTF-8 encoding for Unicode
- file names, but do not enforce it. On such a system, a file name
- containing characters having code points between 128 and 255 may
- be named either as plain ISO-latin-1 or using UTF-8 encoding. As
- no consistency is enforced, the Erlang VM can do no consistent
- translation of all file names.</p>
-
- <p>By default on such systems, Erlang starts in <c>utf8</c> file
- name mode if the terminal supports UTF-8, otherwise in
- <c>latin1</c> mode.</p>
-
- <p>In the <c>latin1</c> mode, file names are bytewise endcoded.
- This allows for list representation of all file names in
- the system, but, for example, a file named "Östersund.txt", will
- appear in <c>file:list_dir/1</c> as either "Östersund.txt" (if
- the file name was encoded in bytewise ISO-Latin-1 by the program
- creating the file, or more probably as
- <c>[195,150,115,116,101,114,115,117,110,100]</c>, which is a
- list containing UTF-8 bytes - not what you would want... If you
- on the other hand use Unicode file name translation on such a
- system, non-UTF-8 file names will simply be ignored by functions
- like <c>file:list_dir/1</c>. They can be retrieved with
- <c>file:list_dir_all/1</c>, but wrongly encoded file names will
- appear as &quot;raw file names&quot;.</p>
-
- </item>
- </taglist>
-
- <p>The Unicode file naming support was introduced with Erlang/OTP
- R14B01. A VM operating in Unicode file name translation mode can
- work with files having names in any language or character set (as
- long as it is supported by the underlying OS and file system). The
- Unicode character list is used to denote file or directory names and
- if the file system content is listed, you will also get
- Unicode lists as return value. The support lies in the Kernel and
- STDLIB modules, why most applications (that does not explicitly
- require the file names to be in the ISO-latin-1 range) will benefit
- from the Unicode support without change.</p>
-
- <p>On operating systems with mandatory Unicode file names, this
- means that you more easily conform to the file names of other (non
- Erlang) applications, and you can also process file names that, at
- least on Windows, were completely inaccessible (due to having names
- that could not be represented in ISO-latin-1). Also you will avoid
- creating incomprehensible file names on MacOS X as the vfs layer of
- the OS will accept all your file names as UTF-8 and will not rewrite
- them.</p>
-
- <p>For most systems, turning on Unicode file name translation is no
- problem even if it uses transparent file naming. Very few systems
- have mixed file name encodings. A consistent UTF-8 named system will
- work perfectly in Unicode file name mode. It was still however
- considered experimental in Erlang/OTP R14B01 and is still not the default on
- such systems. Unicode file name translation is turned on with the
- <c>+fnu</c> switch to the On Linux, a VM started without explicitly
- stating the file name translation mode will default to <c>latin1</c>
- as the native file name encoding. On Windows and MacOS X, the
- default behavior is that of Unicode file name translation, why the
- <c>file:native_name_encoding/0</c> by default returns <c>utf8</c> on
- those systems (the fact that Windows actually does not use UTF-8 on
- the file system level can safely be ignored by the Erlang
- programmer). The default behavior can, as stated before, be
- changed using the <c>+fnu</c> or <c>+fnl</c> options to the VM, see
- the <seealso marker="erts:erl"><c>erl</c></seealso> program. If the
- VM is started in Unicode file name translation mode,
- <c>file:native_name_encoding/0</c> will return the atom
- <c>utf8</c>. The <c>+fnu</c> switch can be followed by <c>w</c>,
- <c>i</c> or <c>e</c>, to control how wrongly encoded file names are
- to be reported. <c>w</c> means that a warning is sent to the
- <c>error_logger</c> whenever a wrongly encoded file name is
- "skipped" in directory listings, <c>i</c> means that those wrongly
- encoded file names are silently ignored and <c>e</c> means that the
- API function will return an error whenever a wrongly encoded file
- (or directory) name is encountered. <c>w</c> is the default. Note
- that <c>file:read_link/1</c> will always return an error if the link
- points to an invalid file name.</p>
-
- <p>In Unicode file name mode, file names given to the BIF
- <c>open_port/2</c> with the option <c>{spawn_executable,...}</c> are
- also interpreted as Unicode. So is the parameter list given in the
- <c>args</c> option available when using <c>spawn_executable</c>. The
- UTF-8 translation of arguments can be avoided using binaries, see
- the discussion about raw file names below.</p>
-
- <p>It is worth noting that the file <c>encoding</c> options given
- when opening a file has nothing to do with the file <em>name</em>
- encoding convention. You can very well open files containing data
- encoded in UTF-8 but having file names in bytewise (<c>latin1</c>) encoding
- or vice versa.</p>
-
- <note><p>Erlang drivers and NIF shared objects still can not be
- named with names containing code points beyond 127. This is a known
- limitation to be removed in a future release. Erlang modules however
- can, but it is definitely not a good idea and is still considered
- experimental.</p></note>
-
-<section>
- <title>Notes About Raw File Names</title>
- <marker id="notes-about-raw-filenames"/>
- <p>Raw file names were introduced together with Unicode file name
- support in erts-5.8.2 (Erlang/OTP R14B01). The reason &quot;raw file
- names&quot; was introduced in the system was to be able to
- consistently represent file names given in different encodings on
- the same system. Having the VM automatically translate a file name
- that is not in UTF-8 to a list of Unicode characters might seem
- practical, but this would open up for both duplicate file names and
- other inconsistent behavior. Consider a directory containing a file
- named &quot;björn&quot; in ISO-latin-1, while the Erlang VM is
- operating in Unicode file name mode (and therefore expecting UTF-8
- file naming). The ISO-latin-1 name is not valid UTF-8 and one could
- be tempted to think that automatic conversion in for example
- <c>file:list_dir/1</c> is a good idea. But what would happen if we
- later tried to open the file and have the name as a Unicode list
- (magically converted from the ISO-latin-1 file name)? The VM will
- convert the file name given to UTF-8, as this is the encoding
- expected. Effectively this means trying to open the file named
- &lt;&lt;&quot;björn&quot;/utf8&gt;&gt;. This file does not exist,
- and even if it existed it would not be the same file as the one that
- was listed. We could even create two files named &quot;björn&quot;,
- one named in the UTF-8 encoding and one not. If
- <c>file:list_dir/1</c> would automatically convert the ISO-latin-1
- file name to a list, we would get two identical file names as the
- result. To avoid this, we need to differentiate between file names
- being properly encoded according to the Unicode file naming
- convention (i.e. UTF-8) and file names being invalid under the
- encoding. By the common <c>file:list_dir/1</c> function, the wrongly
- encoded file names are simply ignored in Unicode file name
- translation mode, but by the <c>file:list_dir_all/1</c> function,
- the file names with invalid encoding are returned as &quot;raw&quot;
- file names, i.e. as binaries.</p>
-
- <p>The Erlang <c>file</c> module accepts raw file names as
- input. <c>open_port({spawn_executable, ...} ...)</c> also accepts
- them. As mentioned earlier, the arguments given in the option list
- to <c>open_port({spawn_executable, ...} ...)</c> undergo the same
- conversion as the file names, meaning that the executable will be
- provided with arguments in UTF-8 as well. This translation is
- avoided consistently with how the file names are treated, by giving
- the argument as a binary.</p>
-
- <p>To force Unicode file name translation mode on systems where this
- is not the default was considered experimental in Erlang/OTP R14B01 due to
- the fact that the initial implementation did not ignore wrongly
- encoded file names, so that raw file names could spread unexpectedly
- throughout the system. Beginning with Erlang/OTP R16B, the wrongly encoded file
- names are only retrieved by special functions
- (e.g. <c>file:list_dir_all/1</c>), so the impact on existing code is
- much lower, why it is now supported. Unicode file name translation
- is expected to be default in future releases.</p>
-
- <p>Even if you are operating without Unicode file naming translation
- automatically done by the VM, you can access and create files with
- names in UTF-8 encoding by using raw file names encoded as
- UTF-8. Enforcing the UTF-8 encoding regardless of the mode the
- Erlang VM is started in might, in some circumstances be a good idea,
- as the convention of using UTF-8 file names is spreading.</p>
-</section>
-<section>
- <title>Notes About MacOS X</title>
- <p>MacOS X's vfs layer enforces UTF-8 file names in a quite
- aggressive way. Older versions did this by simply refusing to create
- non UTF-8 conforming file names, while newer versions replace
- offending bytes with the sequence &quot;%HH&quot;, where HH is the
- original character in hexadecimal notation. As Unicode translation
- is enabled by default on MacOS X, the only way to come up against
- this is to either start the VM with the <c>+fnl</c> flag or to use a
- raw file name in bytewise (<c>latin1</c>) encoding. If using a raw
- filename, with a bytewise encoding containing characters between 127
- and 255, to create a file, the file can not be opened using the same
- name as the one used to create it. There is no remedy for this
- behaviour, other than keeping the file names in the right
- encoding.</p>
-
- <p>MacOS X also reorganizes the names of files so that the
- representation of accents etc is using the "combining characters",
- i.e. the character <c>ö</c> is represented as the code points
- [111,776], where 111 is the character <c>o</c> and 776 is the
- special accent character "combining diaeresis". This way of
- normalizing Unicode is otherwise very seldom used and Erlang
- normalizes those file names in the opposite way upon retrieval, so
- that file names using combining accents are not passed up to the
- Erlang application. In Erlang the file name &quot;björn&quot; is
- retrieved as [98,106,246,114,110], not as [98,106,117,776,114,110],
- even though the file system might think differently. The
- normalization into combining accents are redone when actually
- accessing files, so this can usually be ignored by the Erlang
- programmer.</p>
-</section>
-</section>
-<section>
- <title>Unicode in Environment and Parameters</title>
- <marker id="unicode_in_environment_and_parameters"/>
- <p>Environment variables and their interpretation is handled much in
- the same way as file names. If Unicode file names are enabled,
- environment variables as well as parameters to the Erlang VM are
- expected to be in Unicode.</p>
- <p>If Unicode file names are enabled, the calls to
- <seealso marker="kernel:os#getenv/0"><c>os:getenv/0</c></seealso>,
- <seealso marker="kernel:os#getenv/1"><c>os:getenv/1</c></seealso>,
- <seealso marker="kernel:os#putenv/2"><c>os:putenv/2</c></seealso> and
- <seealso marker="kernel:os#unsetenv/1"><c>os:unsetenv/1</c></seealso>
- will handle Unicode strings. On Unix-like platforms, the built-in
- functions will translate environment variables in UTF-8 to/from
- Unicode strings, possibly with code points > 255. On Windows the
- Unicode versions of the environment system API will be used, also
- allowing for code points > 255.</p>
- <p>On Unix-like operating systems, parameters are expected to be
- UTF-8 without translation if Unicode file names are enabled.</p>
-</section>
-<section>
- <title>Unicode-aware Modules</title>
- <p>Most of the modules in Erlang/OTP are of course Unicode-unaware
- in the sense that they have no notion of Unicode and really should
- not have. Typically they handle non-textual or byte-oriented data
- (like <c>gen_tcp</c> etc).</p>
- <p>Modules that actually handle textual data (like <c>io_lib</c>,
- <c>string</c> etc) are sometimes subject to conversion or extension
- to be able to handle Unicode characters.</p>
- <p>Fortunately, most textual data has been stored in lists and range
- checking has been sparse, why modules like <c>string</c> works well
- for Unicode lists with little need for conversion or extension.</p>
- <p>Some modules are however changed to be explicitly
- Unicode-aware. These modules include:</p>
- <taglist>
- <tag><c>unicode</c></tag>
- <item>
- <p>The module <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
- is obviously Unicode-aware. It contains functions for conversion
- between different Unicode formats as well as some utilities for
- identifying byte order marks. Few programs handling Unicode data
- will survive without this module.</p>
- </item>
- <tag><c>io</c></tag>
- <item>
- <p>The <seealso marker="stdlib:io"><c>io</c></seealso> module has been
- extended along with the actual I/O-protocol to handle Unicode
- data. This means that several functions require binaries to be
- in UTF-8 and there are modifiers to formatting control sequences
- to allow for outputting of Unicode strings.</p>
- </item>
- <tag><c>file</c>, <c>group</c>, <c>user</c></tag>
- <item>
- <p>I/O-servers throughout the system are able to handle
- Unicode data and has options for converting data upon actual
- output or input to/from the device. As shown earlier, the
- <seealso marker="stdlib:shell"><c>shell</c></seealso> has support for
- Unicode terminals and the <seealso
- marker="kernel:file"><c>file</c></seealso> module allows for
- translation to and from various Unicode formats on disk.</p>
- <p>The actual reading and writing of files with Unicode data is
- however not best done with the <c>file</c> module as its
- interface is byte oriented. A file opened with a Unicode
- encoding (like UTF-8), is then best read or written using the
- <seealso marker="stdlib:io"><c>io</c></seealso> module.</p>
- </item>
- <tag><c>re</c></tag>
- <item>
- <p>The <seealso marker="stdlib:re"><c>re</c></seealso> module allows
- for matching Unicode strings as a special option. As the library
- is actually centered on matching in binaries, the Unicode
- support is UTF-8-centered.</p>
- </item>
- <tag><c>wx</c></tag>
- <item>
- <p>The <seealso marker="wx:wx"><c>wx</c></seealso> graphical library
- has extensive support for Unicode text</p>
- </item>
- </taglist>
- <p>The module <seealso
- marker="stdlib:string"><c>string</c></seealso> works perfectly for
- Unicode strings as well as for ISO-latin-1 strings with the
- exception of the language-dependent <seealso
- marker="stdlib:string#to_upper/1"><c>to_upper</c></seealso> and
- <seealso marker="stdlib:string#to_lower/1"><c>to_lower</c></seealso>
- functions, which are only correct for the ISO-latin-1 character
- set. Actually they can never function correctly for Unicode
- characters in their current form, as there are language and locale
- issues as well as multi-character mappings to consider when
- converting text between cases. Converting case in an international
- environment is a big subject not yet addressed in OTP.</p>
-</section>
-<section>
- <title>Unicode Data in Files</title>
- <p>The fact that Erlang as such can handle Unicode data in many forms
- does not automatically mean that the content of any file can be
- Unicode text. The external entities such as ports or I/O-servers are
- not generally Unicode capable.</p>
- <p>Ports are always byte oriented, so before sending data that you
- are not sure is bytewise encoded to a port, make sure to encode it
- in a proper Unicode encoding. Sometimes this will mean that only
- part of the data shall be encoded as e.g. UTF-8, some parts may be
- binary data (like a length indicator) or something else that shall
- not undergo character encoding, so no automatic translation is
- present.</p>
- <p>I/O-servers behave a little differently. The I/O-servers connected
- to terminals (or stdout) can usually cope with Unicode data
- regardless of the <c>encoding</c> option. This is convenient when
- one expects a modern environment but do not want to crash when
- writing to a archaic terminal or pipe. Files on the other hand are
- more picky. A file can have an encoding option which makes it
- generally usable by the io-module (e.g. <c>{encoding,utf8}</c>), but
- is by default opened as a byte oriented file. The <seealso
- marker="kernel:file"><c>file</c></seealso> module is byte oriented, why only
- ISO-Latin-1 characters can be written using that module. The
- <seealso marker="stdlib:io"><c>io</c></seealso> module is the one to use if
- Unicode data is to be output to a file with other <c>encoding</c>
- than <c>latin1</c> (a.k.a. bytewise encoding). It is slightly
- confusing that a file opened with
- e.g. <c>file:open(Name,[read,{encoding,utf8}])</c>, cannot be
- properly read using <c>file:read(File,N)</c> but you have to use the
- <c>io</c> module to retrieve the Unicode data from it. The reason is
- that <c>file:read</c> and <c>file:write</c> (and friends) are purely
- byte oriented, and should so be, as that is the way to access
- files other than text files - byte by byte. Just as with ports, you
- can of course write encoded data into a file by "manually" converting
- the data to the encoding of choice (using the <seealso
- marker="stdlib:unicode"><c>unicode</c></seealso> module or the bit syntax)
- and then output it on a bytewise encoded (<c>latin1</c>) file.</p>
- <p>The rule of thumb is that the <seealso
- marker="kernel:file"><c>file</c></seealso> module should be used for files
- opened for bytewise access (<c>{encoding,latin1}</c>) and the
- <seealso marker="stdlib:io"><c>io</c></seealso> module should be used when
- accessing files with any other encoding
- (e.g. <c>{encoding,uf8}</c>).</p>
-
- <p>Functions reading Erlang syntax from files generally recognize
- the <c>coding:</c> comment and can therefore handle Unicode data on
- input. When writing Erlang Terms to a file, you should insert
- such comments when applicable:</p>
- <pre>
+ </section>
+
+ <section>
+ <title>Unicode Filenames</title>
+ <marker id="unicode_file_names"/>
+ <p>Most modern operating systems support Unicode filenames in some way.
+ There are many different ways to do this and Erlang by default treats the
+ different approaches differently:</p>
+
+ <taglist>
+ <tag>Mandatory Unicode file naming</tag>
+ <item>
+ <p>Windows and, for most common uses, MacOS X enforce Unicode support
+ for filenames. All files created in the file system have names that
+ can consistently be interpreted. In MacOS X, all filenames are
+ retrieved in UTF-8 encoding. In Windows, each system call handling
+ filenames has a special Unicode-aware variant, giving much the same
+ effect. There are no filenames on these systems that are not Unicode
+ filenames. So, the default behavior of the Erlang VM is to work in
+ &quot;Unicode filename translation mode&quot;. This means that a
+ filename can be specified as a Unicode list, which is automatically
+ translated to the proper name encoding for the underlying operating
+ system and file system.</p>
+ <p>Doing, for example, a
+ <seealso marker="kernel:file#list_dir/1"><c>file:list_dir/1</c></seealso>
+ on one of these systems can return Unicode lists with code points
+ &gt; 255, depending on the content of the file system.</p>
+ </item>
+ <tag>Transparent file naming</tag>
+ <item>
+ <p>Most Unix operating systems have adopted a simpler approach, namely
+ that Unicode file naming is not enforced, but by convention. Those
+ systems usually use UTF-8 encoding for Unicode filenames, but do not
+ enforce it. On such a system, a filename containing characters with
+ code points from 128 through 255 can be named as plain ISO Latin-1 or
+ use UTF-8 encoding. As no consistency is enforced, the Erlang VM
+ cannot do consistent translation of all filenames.</p>
+ <p>By default on such systems, Erlang starts in <c>utf8</c> filename
+ mode if the terminal supports UTF-8, otherwise in <c>latin1</c>
+ mode.</p>
+ <p>In <c>latin1</c> mode, filenames are bytewise encoded. This allows
+ for list representation of all filenames in the system. However, a
+ a file named "Östersund.txt", appears in
+ <seealso marker="kernel:file#list_dir/1"><c>file:list_dir/1</c></seealso>
+ either as "Östersund.txt" (if the filename was encoded in bytewise
+ ISO Latin-1 by the program creating the file) or more probably as
+ <c>[195,150,115,116,101,114,115,117,110,100]</c>, which is a list
+ containing UTF-8 bytes (not what you want). If you use Unicode
+ filename translation on such a system, non-UTF-8 filenames are
+ ignored by functions like <c>file:list_dir/1</c>. They can be
+ retrieved with function
+ <seealso marker="kernel:file#list_dir_all/1"><c>file:list_dir_all/1</c></seealso>,
+ but wrongly encoded filenames appear as &quot;raw filenames&quot;.
+ </p>
+ </item>
+ </taglist>
+
+ <p>The Unicode file naming support was introduced in Erlang/OTP
+ R14B01. A VM operating in Unicode filename translation mode can
+ work with files having names in any language or character set (as
+ long as it is supported by the underlying operating system and
+ file system). The Unicode character list is used to denote
+ filenames or directory names. If the file system content is
+ listed, you also get Unicode lists as return value. The support
+ lies in the <c>Kernel</c> and <c>STDLIB</c> modules, which is why
+ most applications (that does not explicitly require the filenames
+ to be in the ISO Latin-1 range) benefit from the Unicode support
+ without change.</p>
+
+ <p>On operating systems with mandatory Unicode filenames, this means that
+ you more easily conform to the filenames of other (non-Erlang)
+ applications. You can also process filenames that, at least on Windows,
+ were inaccessible (because of having names that could not be represented
+ in ISO Latin-1). Also, you avoid creating incomprehensible filenames
+ on MacOS X, as the <c>vfs</c> layer of the operating system accepts all
+ your filenames as UTF-8 does not rewrite them.</p>
+
+ <p>For most systems, turning on Unicode filename translation is no problem
+ even if it uses transparent file naming. Very few systems have mixed
+ filename encodings. A consistent UTF-8 named system works perfectly in
+ Unicode filename mode. It was still, however, considered experimental in
+ Erlang/OTP R14B01 and is still not the default on such systems.</p>
+
+ <p>Unicode filename translation is turned on with switch <c>+fnu</c>. On
+ Linux, a VM started without explicitly stating the filename translation
+ mode defaults to <c>latin1</c> as the native filename encoding. On
+ Windows and MacOS X, the default behavior is that of Unicode filename
+ translation. Therefore
+ <seealso marker="kernel:file#native_name_encoding/0"><c>file:native_name_encoding/0</c></seealso>
+ by default returns <c>utf8</c> on those systems (Windows does not use
+ UTF-8 on the file system level, but this can safely be ignored by the
+ Erlang programmer). The default behavior can, as stated earlier, be
+ changed using option <c>+fnu</c> or <c>+fnl</c> to the VM, see the
+ <seealso marker="erts:erl"><c>erl</c></seealso> program. If the VM is
+ started in Unicode filename translation mode,
+ <c>file:native_name_encoding/0</c> returns atom <c>utf8</c>. Switch
+ <c>+fnu</c> can be followed by <c>w</c>, <c>i</c>, or <c>e</c> to control
+ how wrongly encoded filenames are to be reported.</p>
+
+ <list type="bulleted">
+ <item>
+ <p><c>w</c> means that a warning is sent to the <c>error_logger</c>
+ whenever a wrongly encoded filename is "skipped" in directory
+ listings. <c>w</c> is the default.</p>
+ </item>
+ <item>
+ <p><c>i</c> means that wrongly encoded filenames are silently ignored.
+ </p>
+ </item>
+ <item>
+ <p><c>e</c> means that the API function returns an error whenever a
+ wrongly encoded filename (or directory name) is encountered.</p>
+ </item>
+ </list>
+
+ <p>Notice that
+ <seealso marker="kernel:file#read_link/1"><c>file:read_link/1</c></seealso>
+ always returns an error if the link points to an invalid filename.</p>
+
+ <p>In Unicode filename mode, filenames given to BIF <c>open_port/2</c> with
+ option <c>{spawn_executable,...}</c> are also interpreted as Unicode. So
+ is the parameter list specified in option <c>args</c> available when
+ using <c>spawn_executable</c>. The UTF-8 translation of arguments can be
+ avoided using binaries, see section
+ <seealso marker="#notes-about-raw-filenames">Notes About Raw Filenames</seealso>.
+ </p>
+
+ <p>Notice that the file encoding options specified when opening a file has
+ nothing to do with the filename encoding convention. You can very well
+ open files containing data encoded in UTF-8, but having filenames in
+ bytewise (<c>latin1</c>) encoding or conversely.</p>
+
+ <note><p>Erlang drivers and NIF-shared objects still cannot be named with
+ names containing code points &gt; 127. This limitation will be removed in
+ a future release. However, Erlang modules can, but it is definitely not a
+ good idea and is still considered experimental.</p>
+ </note>
+
+ <section>
+ <title>Notes About Raw Filenames</title>
+ <marker id="notes-about-raw-filenames"/>
+ <p>Raw filenames were introduced together with Unicode filename support
+ in <c>ERTS</c> 5.8.2 (Erlang/OTP R14B01). The reason &quot;raw
+ filenames&quot; were introduced in the system was
+ to be able to represent
+ filenames, specified in different encodings on the same system,
+ consistently. It can seem practical to have the VM automatically
+ translate a filename that is not in UTF-8 to a list of Unicode
+ characters, but this would open up for both duplicate filenames and
+ other inconsistent behavior.</p>
+
+ <p>Consider a directory containing a file named &quot;björn&quot; in ISO
+ Latin-1, while the Erlang VM is operating in Unicode filename mode (and
+ therefore expects UTF-8 file naming). The ISO Latin-1 name is not valid
+ UTF-8 and one can be tempted to think that automatic conversion in, for
+ example,
+ <seealso marker="kernel:file#list_dir/1"><c>file:list_dir/1</c></seealso>
+ is a good idea. But what would happen if we later tried to open the file
+ and have the name as a Unicode list (magically converted from the ISO
+ Latin-1 filename)? The VM converts the filename to UTF-8, as this is
+ the encoding expected. Effectively this means trying to open the file
+ named &lt;&lt;&quot;björn&quot;/utf8&gt;&gt;. This file does not exist,
+ and even if it existed it would not be the same file as the one that was
+ listed. We could even create two files named &quot;björn&quot;, one
+ named in UTF-8 encoding and one not. If <c>file:list_dir/1</c> would
+ automatically convert the ISO Latin-1 filename to a list, we would get
+ two identical filenames as the result. To avoid this, we must
+ differentiate between filenames that are properly encoded according to
+ the Unicode file naming convention (that is, UTF-8) and filenames that
+ are invalid under the encoding. By the common function
+ <c>file:list_dir/1</c>, the wrongly encoded filenames are ignored in
+ Unicode filename translation mode, but by function
+ <seealso marker="kernel:file#list_dir_all/1"><c>file:list_dir_all/1</c></seealso>
+ the filenames with invalid encoding are returned as &quot;raw&quot;
+ filenames, that is, as binaries.</p>
+
+ <p>The <c>file</c> module accepts raw filenames as input.
+ <c>open_port({spawn_executable, ...} ...)</c> also accepts them. As
+ mentioned earlier, the arguments specified in the option list to
+ <c>open_port({spawn_executable, ...} ...)</c> undergo the same
+ conversion as the filenames, meaning that the executable is provided
+ with arguments in UTF-8 as well. This translation is avoided
+ consistently with how the filenames are treated, by giving the argument
+ as a binary.</p>
+
+ <p>To force Unicode filename translation mode on systems where this is not
+ the default was considered experimental in Erlang/OTP R14B01. This was
+ because the initial implementation did not ignore wrongly encoded
+ filenames, so that raw filenames could spread unexpectedly throughout
+ the system. As from Erlang/OTP R16B, the wrongly encoded
+ filenames are only retrieved by special functions (such as
+ <c>file:list_dir_all/1</c>). Since the impact on existing code is
+ therefore much lower it is now supported.
+ Unicode filename translation is
+ expected to be default in future releases.</p>
+
+ <p>Even if you are operating without Unicode file naming translation
+ automatically done by the VM, you can access and create files with
+ names in UTF-8 encoding by using raw filenames encoded as UTF-8.
+ Enforcing the UTF-8 encoding regardless of the mode the Erlang VM is
+ started in can in some circumstances be a good idea, as the convention
+ of using UTF-8 filenames is spreading.</p>
+ </section>
+
+ <section>
+ <title>Notes About MacOS X</title>
+ <p>The <c>vfs</c> layer of MacOS X enforces UTF-8 filenames in an
+ aggressive way. Older versions did this by refusing to create non-UTF-8
+ conforming filenames, while newer versions replace offending bytes with
+ the sequence &quot;%HH&quot;, where HH is the original character in
+ hexadecimal notation. As Unicode translation is enabled by default on
+ MacOS X, the only way to come up against this is to either start the VM
+ with flag <c>+fnl</c> or to use a raw filename in bytewise
+ (<c>latin1</c>) encoding. If using a raw filename, with a bytewise
+ encoding containing characters from 127 through 255, to create a file,
+ the file cannot be opened using the same name as the one used to create
+ it. There is no remedy for this behavior, except keeping the filenames
+ in the correct encoding.</p>
+
+ <p>MacOS X reorganizes the filenames so that the representation of
+ accents, and so on, uses the "combining characters". For example,
+ character <c>ö</c> is represented as code points <c>[111,776]</c>,
+ where <c>111</c> is character <c>o</c> and <c>776</c> is the special
+ accent character "Combining Diaeresis". This way of normalizing Unicode
+ is otherwise very seldom used. Erlang normalizes those filenames in the
+ opposite way upon retrieval, so that filenames using combining accents
+ are not passed up to the Erlang application. In Erlang, filename
+ &quot;björn&quot; is retrieved as <c>[98,106,246,114,110]</c>, not as
+ <c>[98,106,117,776,114,110]</c>, although the file system can think
+ differently. The normalization into combining accents is redone when
+ accessing files, so this can usually be ignored by the Erlang
+ programmer.</p>
+ </section>
+ </section>
+
+ <section>
+ <title>Unicode in Environment and Parameters</title>
+ <marker id="unicode_in_environment_and_parameters"/>
+ <p>Environment variables and their interpretation are handled much in the
+ same way as filenames. If Unicode filenames are enabled, environment
+ variables as well as parameters to the Erlang VM are expected to be in
+ Unicode.</p>
+
+ <p>If Unicode filenames are enabled, the calls to
+ <seealso marker="kernel:os#getenv/0"><c>os:getenv/0,1</c></seealso>,
+ <seealso marker="kernel:os#putenv/2"><c>os:putenv/2</c></seealso>, and
+ <seealso marker="kernel:os#unsetenv/1"><c>os:unsetenv/1</c></seealso>
+ handle Unicode strings. On Unix-like platforms, the built-in functions
+ translate environment variables in UTF-8 to/from Unicode strings, possibly
+ with code points &gt; 255. On Windows, the Unicode versions of the
+ environment system API are used, and code points &gt; 255 are allowed.</p>
+ <p>On Unix-like operating systems, parameters are expected to be UTF-8
+ without translation if Unicode filenames are enabled.</p>
+ </section>
+
+ <section>
+ <title>Unicode-Aware Modules</title>
+ <p>Most of the modules in Erlang/OTP are Unicode-unaware in the sense that
+ they have no notion of Unicode and should not have. Typically they handle
+ non-textual or byte-oriented data (such as <c>gen_tcp</c>).</p>
+
+ <p>Modules handling textual data (such as
+ <seealso marker="stdlib:io_lib"><c>io_lib</c></seealso> and
+ <seealso marker="stdlib:string"><c>string</c></seealso> are sometimes
+ subject to conversion or extension to be able to handle Unicode
+ characters.</p>
+
+ <p>Fortunately, most textual data has been stored in lists and range
+ checking has been sparse, so modules like <c>string</c> work well for
+ Unicode lists with little need for conversion or extension.</p>
+
+ <p>Some modules are, however, changed to be explicitly Unicode-aware. These
+ modules include:</p>
+
+ <taglist>
+ <tag><c>unicode</c></tag>
+ <item>
+ <p>The <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
+ module is clearly Unicode-aware. It contains functions for conversion
+ between different Unicode formats and some utilities for identifying
+ byte order marks. Few programs handling Unicode data survive without
+ this module.</p>
+ </item>
+ <tag><c>io</c></tag>
+ <item>
+ <p>The <seealso marker="stdlib:io"><c>io</c></seealso> module has been
+ extended along with the actual I/O protocol to handle Unicode data.
+ This means that many functions require binaries to be in UTF-8, and
+ there are modifiers to format control sequences to allow for output
+ of Unicode strings.</p>
+ </item>
+ <tag><c>file</c>, <c>group</c>, <c>user</c></tag>
+ <item>
+ <p>I/O-servers throughout the system can handle Unicode data and have
+ options for converting data upon output or input to/from the device.
+ As shown earlier, the
+ <seealso marker="stdlib:shell"><c>shell</c></seealso> module has
+ support for Unicode terminals and the
+ <seealso marker="kernel:file"><c>file</c></seealso> module
+ allows for translation to and from various Unicode formats on
+ disk.</p>
+ <p>Reading and writing of files with Unicode data is, however, not best
+ done with the <c>file</c> module, as its interface is
+ byte-oriented. A file opened with a Unicode encoding (like UTF-8) is
+ best read or written using the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module.</p>
+ </item>
+ <tag><c>re</c></tag>
+ <item>
+ <p>The <seealso marker="stdlib:re"><c>re</c></seealso> module allows
+ for matching Unicode strings as a special option. As the library is
+ centered on matching in binaries, the Unicode support is
+ UTF-8-centered.</p>
+ </item>
+ <tag><c>wx</c></tag>
+ <item>
+ <p>The graphical library <seealso marker="wx:wx"><c>wx</c></seealso>
+ has extensive support for Unicode text.</p></item>
+ </taglist>
+
+ <p>The <seealso marker="stdlib:string"><c>string</c></seealso> module works
+ perfectly for Unicode strings and ISO Latin-1 strings, except the
+ language-dependent functions
+ <seealso marker="stdlib:string#to_upper/1"><c>string:to_upper/1</c></seealso>
+ and
+ <seealso marker="stdlib:string#to_lower/1"><c>string:to_lower/1</c></seealso>,
+ which are only correct for the ISO Latin-1 character set. These two
+ functions can never function correctly for Unicode characters in their
+ current form, as there are language and locale issues as well as
+ multi-character mappings to consider when converting text between cases.
+ Converting case in an international environment is a large subject not
+ yet addressed in OTP.</p>
+ </section>
+
+ <section>
+ <title>Unicode Data in Files</title>
+ <p>Although Erlang can handle Unicode data in many forms does not
+ automatically mean that the content of any file can be Unicode text. The
+ external entities, such as ports and I/O servers, are not generally
+ Unicode capable.</p>
+
+ <p>Ports are always byte-oriented, so before sending data that you are not
+ sure is bytewise-encoded to a port, ensure to encode it in a proper
+ Unicode encoding. Sometimes this means that only part of the data must
+ be encoded as, for example, UTF-8. Some parts can be binary data (like a
+ length indicator) or something else that must not undergo character
+ encoding, so no automatic translation is present.</p>
+
+ <p>I/O servers behave a little differently. The I/O servers connected to
+ terminals (or <c>stdout</c>) can usually cope with Unicode data
+ regardless of the encoding option. This is convenient when one expects
+ a modern environment but do not want to crash when writing to an archaic
+ terminal or pipe.</p>
+
+ <p>A file can have an encoding option that makes it generally usable by the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module (for example
+ <c>{encoding,utf8}</c>), but is by default opened as a byte-oriented file.
+ The <seealso marker="kernel:file"><c>file</c></seealso> module is
+ byte-oriented, so only ISO Latin-1 characters can be written using that
+ module. Use the <c>io</c> module if Unicode data is to be output to a
+ file with other <c>encoding</c> than <c>latin1</c> (bytewise encoding).
+ It is slightly confusing that a file opened with, for example,
+ <c>file:open(Name,[read,{encoding,utf8}])</c> cannot be properly read
+ using <c>file:read(File,N)</c>, but using the <c>io</c> module to retrieve
+ the Unicode data from it. The reason is that <c>file:read</c> and
+ <c>file:write</c> (and friends) are purely byte-oriented, and should be,
+ as that is the way to access files other than text files, byte by byte.
+ As with ports, you can write encoded data into a file by "manually"
+ converting the data to the encoding of choice (using the
+ <seealso marker="stdlib:unicode"><c>unicode</c></seealso> module or the
+ bit syntax) and then output it on a bytewise (<c>latin1</c>) encoded
+ file.</p>
+
+ <p>Recommendations:</p>
+
+ <list type="bulleted">
+ <item><p>Use the
+ <seealso marker="kernel:file"><c>file</c></seealso> module for
+ files opened for bytewise access (<c>{encoding,latin1}</c>).</p>
+ </item>
+ <item><p>Use the <seealso marker="stdlib:io"><c>io</c></seealso> module
+ when accessing files with any other encoding (for example
+ <c>{encoding,uf8}</c>).</p>
+ </item>
+ </list>
+
+ <p>Functions reading Erlang syntax from files recognize the <c>coding:</c>
+ comment and can therefore handle Unicode data on input. When writing
+ Erlang terms to a file, you are advised to insert such comments when
+ applicable:</p>
+
+ <pre>
$ <input>erl +fna +pc unicode</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -990,202 +1100,224 @@ Eshell V5.10.1 (abort with ^G)
1> <input>file:write_file("test.term",&lt;&lt;"%% coding: utf-8\n[{\"Юникод\",4711}].\n"/utf8&gt;&gt;).</input>
ok
2> <input>file:consult("test.term").</input>
-{ok,[[{"Юникод",4711}]]}
- </pre>
-</section>
-<section>
- <title>Summary of Options</title>
- <marker id="unicode_options_summary"/>
- <p>The Unicode support is controlled by both command line switches,
- some standard environment variables and the version of OTP you are
- using. Most options affect mainly the way Unicode data is displayed,
- not the actual functionality of the API's in the standard
- libraries. This means that Erlang programs usually do not
- need to concern themselves with these options, they are more for the
- development environment. An Erlang program can be written so that it
- works well regardless of the type of system or the Unicode options
- that are in effect.</p>
-
- <p>Here follows a summary of the settings affecting Unicode:</p>
- <taglist>
- <tag>The <c>LANG</c> and <c>LC_CTYPE</c> environment variables</tag>
- <item>
- <p>The language setting in the OS mainly affects the shell. The
- terminal (i.e. the group leader) will operate with <c>{encoding,
- unicode}</c> only if the environment tells it that UTF-8 is
- allowed. This setting should correspond to the actual terminal
- you are using.</p>
- <p>The environment can also affect file name interpretation, if
- Erlang is started with the <c>+fna</c> flag (which is default from
- Erlang/OTP 17.0).</p>
- <p>You can check the setting of this by calling
- <c>io:getopts()</c>, which will give you an option list
- containing <c>{encoding,unicode}</c> or
- <c>{encoding,latin1}</c>.</p>
- </item>
- <tag>The <c>+pc </c>{<c>unicode</c>|<c>latin1</c>} flag to
- <seealso marker="erts:erl"><c>erl(1)</c></seealso></tag>
- <item>
- <p>This flag affects what is interpreted as string data when
- doing heuristic string detection in the shell and in
- <c>io</c>/<c>io_lib:format</c> with the <c>"~tp"</c> and
- <c>~tP</c> formatting instructions, as described above.</p>
- <p>You can check this option by calling io:printable_range/0,
- which will return <c>unicode</c> or <c>latin1</c>. To be
- compatible with future (expected) extensions to the settings,
- one should rather use <c>io_lib:printable_list/1</c> to check if
- a list is printable according to the setting. That function will
- take into account new possible settings returned from
- <c>io:printable_range/0</c>.</p>
- </item>
- <tag>The <c>+fn</c>{<c>l</c>|<c>a</c>|<c>u</c>}
- [{<c>w</c>|<c>i</c>|<c>e</c>}]
- flag to <seealso marker="erts:erl"><c>erl(1)</c></seealso></tag>
- <item>
- <p>This flag affects how the file names are to be interpreted. On
- operating systems with transparent file naming, this has to be
- specified to allow for file naming in Unicode characters (and
- for correct interpretation of file names containing characters
- &gt; 255.</p>
- <p><c>+fnl</c> means bytewise interpretation of file names, which
- was the usual way to represent ISO-Latin-1 file names before
- UTF-8 file naming got widespread.</p>
- <p><c>+fnu</c> means that file names are encoded in UTF-8, which
- is nowadays the common scheme (although not enforced).</p>
- <p><c>+fna</c> means that you automatically select between
- <c>+fnl</c> and <c>+fnu</c>, based on the <c>LANG</c> and
- <c>LC_CTYPE</c> environment variables. This is optimistic
- heuristics indeed, nothing enforces a user to have a terminal
- with the same encoding as the file system, but usually, this is
- the case. This is the default on all Unix-like operating
- systems except MacOS X.</p>
-
- <p>The file name translation mode can be read with the
- <c>file:native_name_encoding/0</c> function, which returns
- <c>latin1</c> (meaning bytewise encoding) or <c>utf8</c>.</p>
- </item>
- <tag><seealso marker="stdlib:epp#default_encoding/0">
- <c>epp:default_encoding/0</c></seealso></tag>
- <item>
- <p>This function returns the default encoding for Erlang source
- files (if no encoding comment is present) in the currently
- running release. In Erlang/OTP R16B <c>latin1</c> was returned (meaning
- bytewise encoding). In Erlang/OTP 17.0 and forward it returns
- <c>utf8</c>.</p>
- <p>The encoding of each file can be specified using comments as
- described in
- <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>.</p>
- </item>
- <tag><seealso marker="stdlib:io#setopts/1"><c>io:setopts/</c>{<c>1</c>,<c>2</c>}</seealso> and the <c>-oldshell</c>/<c>-noshell</c> flags.</tag>
- <item>
- <p>When Erlang is started with <c>-oldshell</c> or
- <c>-noshell</c>, the I/O-server for <c>standard_io</c> is default
- set to bytewise encoding, while an interactive shell defaults to
- what the environment variables says.</p>
- <p>With the <c>io:setopts/2</c> function you can set the
- encoding of a file or other I/O-server. This can also be set when
- opening a file. Setting the terminal (or other
- <c>standard_io</c> server) unconditionally to the option
- <c>{encoding,utf8}</c> will for example make UTF-8 encoded characters
- being written to the device regardless of how Erlang was started or
- the users environment.</p>
- <p>Opening files with <c>encoding</c> option is convenient when
- writing or reading text files in a known encoding.</p>
- <p>You can retrieve the <c>encoding</c> setting for an I/O-server
- using <seealso
- marker="stdlib:io#getopts/1"><c>io:getopts()</c></seealso>.</p>
- </item>
- </taglist>
-</section>
-<section>
- <title>Recipes</title>
- <p>When starting with Unicode, one often stumbles over some common
- issues. I try to outline some methods of dealing with Unicode data
- in this section.</p>
+{ok,[[{"Юникод",4711}]]}</pre>
+ </section>
+
+ <section>
+ <title>Summary of Options</title>
+ <marker id="unicode_options_summary"/>
+ <p>The Unicode support is controlled by both command-line switches, some
+ standard environment variables, and the OTP version you are using. Most
+ options affect mainly how Unicode data is displayed, not the
+ functionality of the APIs in the standard libraries. This means that
+ Erlang programs usually do not need to concern themselves with these
+ options, they are more for the development environment. An Erlang program
+ can be written so that it works well regardless of the type of system or
+ the Unicode options that are in effect.</p>
+
+ <p>Here follows a summary of the settings affecting Unicode:</p>
+
+ <taglist>
+ <tag>The <c>LANG</c> and <c>LC_CTYPE</c> environment variables</tag>
+ <item>
+ <p>The language setting in the operating system mainly affects the
+ shell. The terminal (that is, the group leader) operates with
+ <c>{encoding, unicode}</c> only if the environment tells it that
+ UTF-8 is allowed. This setting is to correspond to the terminal you
+ are using.</p>
+ <p>The environment can also affect filename interpretation, if Erlang
+ is started with flag <c>+fna</c> (which is default from
+ Erlang/OTP 17.0).</p>
+ <p>You can check the setting of this by calling
+ <seealso marker="stdlib:io#getopts/1"><c>io:getopts()</c></seealso>,
+ which gives you an option list containing <c>{encoding,unicode}</c>
+ or <c>{encoding,latin1}</c>.</p>
+ </item>
+ <tag>The <c>+pc</c> {<c>unicode</c>|<c>latin1</c>} flag to
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso></tag>
+ <item>
+ <p>This flag affects what is interpreted as string data when doing
+ heuristic string detection in the shell and in
+ <seealso marker="stdlib:io"><c>io</c></seealso>/
+ <seealso marker="stdlib:io_lib#format/2"><c>io_lib:format</c></seealso>
+ with the <c>"~tp"</c> and <c>~tP</c> formatting instructions, as
+ described earlier.</p>
+ <p>You can check this option by calling
+ <seealso marker="stdlib:io#printable_range/0"><c>io:printable_range/0</c></seealso>,
+ which returns <c>unicode</c> or <c>latin1</c>. To be compatible with
+ future (expected) extensions to the settings, rather use
+ <seealso marker="stdlib:io_lib#printable_list/1"><c>io_lib:printable_list/1</c></seealso>
+ to check if a list is printable according to the setting. That
+ function takes into account new possible settings returned from
+ <c>io:printable_range/0</c>.</p>
+ </item>
+ <tag>The <c>+fn</c>{<c>l</c>|<c>u</c>|<c>a</c>}
+ [{<c>w</c>|<c>i</c>|<c>e</c>}] flag to
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso></tag>
+ <item>
+ <p>This flag affects how the filenames are to be interpreted. On
+ operating systems with transparent file naming, this must be
+ specified to allow for file naming in Unicode characters (and for
+ correct interpretation of filenames containing characters &gt; 255).
+ </p>
+ <list type="bulleted">
+ <item>
+ <p><c>+fnl</c> means bytewise interpretation of filenames, which was
+ the usual way to represent ISO Latin-1 filenames before UTF-8
+ file naming got widespread.</p>
+ </item>
+ <item>
+ <p><c>+fnu</c> means that filenames are encoded in UTF-8, which is
+ nowadays the common scheme (although not enforced).</p>
+ </item>
+ <item>
+ <p><c>+fna</c> means that you automatically select between
+ <c>+fnl</c> and <c>+fnu</c>, based on environment variables
+ <c>LANG</c> and <c>LC_CTYPE</c>. This is optimistic
+ heuristics indeed, nothing enforces a user to have a terminal with
+ the same encoding as the file system, but this is usually the
+ case. This is the default on all Unix-like operating systems,
+ except MacOS X.</p>
+ </item>
+ </list>
+ <p>The filename translation mode can be read with function
+ <seealso marker="kernel:file#native_name_encoding/0"><c>file:native_name_encoding/0</c></seealso>,
+ which returns <c>latin1</c> (bytewise encoding) or <c>utf8</c>.</p>
+ </item>
+ <tag><seealso marker="stdlib:epp#default_encoding/0"><c>epp:default_encoding/0</c></seealso></tag>
+ <item>
+ <p>This function returns the default encoding for Erlang source files
+ (if no encoding comment is present) in the currently running release.
+ In Erlang/OTP R16B, <c>latin1</c> (bytewise encoding) was returned.
+ As from Erlang/OTP 17.0, <c>utf8</c> is returned.</p>
+ <p>The encoding of each file can be specified using comments as
+ described in the
+ <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso> module.
+ </p>
+ </item>
+ <tag><seealso marker="stdlib:io#setopts/1"><c>io:setopts/1,2</c></seealso>
+ and flags <c>-oldshell</c>/<c>-noshell</c></tag>
+ <item>
+ <p>When Erlang is started with <c>-oldshell</c> or <c>-noshell</c>, the
+ I/O server for <c>standard_io</c> is by default set to bytewise
+ encoding, while an interactive shell defaults to what the
+ environment variables says.</p>
+ <p>You can set the encoding of a file or other I/O server with function
+ <seealso marker="stdlib:io#setopts/1"><c>io:setopts/2</c></seealso>.
+ This can also be set when opening a file. Setting the terminal (or
+ other <c>standard_io</c> server) unconditionally to option
+ <c>{encoding,utf8}</c> implies that UTF-8 encoded characters are
+ written to the device, regardless of how Erlang was started or the
+ user's environment.</p>
+ <p>Opening files with option <c>encoding</c> is convenient when
+ writing or reading text files in a known encoding.</p>
+ <p>You can retrieve the <c>encoding</c> setting for an I/O server with
+ function
+ <seealso marker="stdlib:io#getopts/1"><c>io:getopts()</c></seealso>.
+ </p>
+ </item>
+ </taglist>
+ </section>
+
<section>
- <title>Byte Order Marks</title>
- <p>A common method of identifying encoding in text-files is to put
- a byte order mark (BOM) first in the file. The BOM is the
- code point 16#FEFF encoded in the same way as the rest of the
- file. If such a file is to be read, the first few bytes (depending
- on encoding) is not part of the actual text. This code outlines
- how to open a file which is believed to have a BOM and set the
- files encoding and position for further sequential reading
- (preferably using the <seealso marker="stdlib:io"><c>io</c></seealso>
- module). Note that error handling is omitted from the code:</p>
-<code>
+ <title>Recipes</title>
+ <p>When starting with Unicode, one often stumbles over some common issues.
+ This section describes some methods of dealing with Unicode data.</p>
+
+ <section>
+ <title>Byte Order Marks</title>
+ <p>A common method of identifying encoding in text files is to put a Byte
+ Order Mark (BOM) first in the file. The BOM is the code point 16#FEFF
+ encoded in the same way as the remaining file. If such a file is to be
+ read, the first few bytes (depending on encoding) are not part of the
+ text. This code outlines how to open a file that is believed to
+ have a BOM, and sets the files encoding and position for further
+ sequential reading (preferably using the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module).</p>
+
+ <p>Notice that error handling is omitted from the code:</p>
+
+ <code>
open_bom_file_for_reading(File) -&gt;
{ok,F} = file:open(File,[read,binary]),
{ok,Bin} = file:read(F,4),
{Type,Bytes} = unicode:bom_to_encoding(Bin),
file:position(F,Bytes),
io:setopts(F,[{encoding,Type}]),
- {ok,F}.
-</code>
- <p>The <c>unicode:bom_to_encoding/1</c> function identifies the
- encoding from a binary of at least four bytes. It returns, along
- with an term suitable for setting the encoding of the file, the
- actual length of the BOM, so that the file position can be set
- accordingly. Note that <c>file:position/2</c> always works on
- byte-offsets, so that the actual byte-length of the BOM is
- needed.</p>
- <p>To open a file for writing and putting the BOM first is even
- simpler:</p>
-<code>
+ {ok,F}.</code>
+
+ <p>Function
+ <seealso marker="stdlib:unicode#bom_to_encoding/1"><c>unicode:bom_to_encoding/1</c></seealso>
+ identifies the encoding from a binary of at least four bytes. It
+ returns, along with a term suitable for setting the encoding of the
+ file, the byte length of the BOM, so that the file position can be set
+ accordingly. Notice that function
+ <seealso marker="kernel:file#position/2"><c>file:position/2</c></seealso>
+ always works on byte-offsets, so that the byte length of the BOM is
+ needed.</p>
+
+ <p>To open a file for writing and place the BOM first is even simpler:</p>
+
+ <code>
open_bom_file_for_writing(File,Encoding) -&gt;
{ok,F} = file:open(File,[write,binary]),
ok = file:write(File,unicode:encoding_to_bom(Encoding)),
io:setopts(F,[{encoding,Encoding}]),
- {ok,F}.
-</code>
- <p>In both cases the file is then best processed using the
- <c>io</c> module, as the functions in <c>io</c> can handle code
- points beyond the ISO-latin-1 range.</p>
- </section>
- <section>
- <title>Formatted I/O</title>
- <p>When reading and writing to Unicode-aware entities, like the
- User or a file opened for Unicode translation, you will probably
- want to format text strings using the functions in <seealso
- marker="stdlib:io"><c>io</c></seealso> or <seealso
- marker="stdlib:io_lib"><c>io_lib</c></seealso>. For backward
- compatibility reasons, these functions do not accept just any list
- as a string, but require a special <em>translation modifier</em>
- when working with Unicode texts. The modifier is <c>t</c>. When
- applied to the <c>s</c> control character in a formatting string,
- it accepts all Unicode code points and expect binaries to be in
- UTF-8:</p>
- <pre>
+ {ok,F}.</code>
+
+ <p>The file is in both these cases then best processed using the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module, as the functions
+ in that module can handle code points beyond the ISO Latin-1 range.</p>
+ </section>
+
+ <section>
+ <title>Formatted I/O</title>
+ <p>When reading and writing to Unicode-aware entities, like a
+ file opened for Unicode translation, you probably want to format text
+ strings using the functions in the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module or the
+ <seealso marker="stdlib:io_lib"><c>io_lib</c></seealso> module. For
+ backward compatibility reasons, these functions do not accept any list
+ as a string, but require a special <em>translation modifier</em> when
+ working with Unicode texts. The modifier is <c>t</c>. When applied to
+ control character <c>s</c> in a formatting string, it accepts all
+ Unicode code points and expects binaries to be in UTF-8:</p>
+
+ <pre>
1> <input>io:format("~ts~n",[&lt;&lt;"åäö"/utf8&gt;&gt;]).</input>
åäö
ok
2> <input>io:format("~s~n",[&lt;&lt;"åäö"/utf8&gt;&gt;]).</input>
åäö
ok</pre>
- <p>Obviously the second <c>io:format/2</c> gives undesired output
- because the UTF-8 binary is not in latin1. For backward
- compatibility, the non prefixed <c>s</c> control character expects
- bytewise encoded ISO-latin-1 characters in binaries and lists
- containing only code points &lt; 256.</p>
- <p>As long as the data is always lists, the <c>t</c> modifier can
- be used for any string, but when binary data is involved, care
- must be taken to make the right choice of formatting characters. A
- bytewise encoded binary will also be interpreted as a string and
- printed even when using <c>~ts</c>, but it might be mistaken for a
- valid UTF-8 string and one should therefore avoid using the
- <c>~ts</c> control if the binary contains bytewise encoded
- characters and not UTF-8.</p>
- <p>The function <c>format/2</c> in <c>io_lib</c> behaves
- similarly. This function is defined to return a deep list of
- characters and the output could easily be converted to binary data
- for outputting on a device of any kind by a simple
- <c>erlang:list_to_binary/1</c>. When the translation modifier is
- used, the list can however contain characters that cannot be
- stored in one byte. The call to <c>erlang:list_to_binary/1</c>
- will in that case fail. However, if the I/O server you want to
- communicate with is Unicode-aware, the list returned can still be
- used directly:</p>
-<pre>
+
+ <p>Clearly, the second <c>io:format/2</c> gives undesired output, as the
+ UTF-8 binary is not in <c>latin1</c>. For backward compatibility, the
+ non-prefixed control character <c>s</c> expects bytewise-encoded ISO
+ Latin-1 characters in binaries and lists containing only code points
+ &lt; 256.</p>
+
+ <p>As long as the data is always lists, modifier <c>t</c> can be used for
+ any string, but when binary data is involved, care must be taken to
+ make the correct choice of formatting characters. A bytewise-encoded
+ binary is also interpreted as a string, and printed even when using
+ <c>~ts</c>, but it can be mistaken for a valid UTF-8 string. Avoid
+ therefore using the <c>~ts</c> control if the binary contains
+ bytewise-encoded characters and not UTF-8.</p>
+
+ <p>Function
+ <seealso marker="stdlib:io_lib#format/2"><c>io_lib:format/2</c></seealso>
+ behaves similarly. It is defined to return a deep list of characters
+ and the output can easily be converted to binary data for outputting on
+ any device by a simple
+ <seealso marker="erts:erlang#list_to_binary/1"><c>erlang:list_to_binary/1</c></seealso>.
+ When the translation modifier is used, the list can, however, contain
+ characters that cannot be stored in one byte. The call to
+ <c>erlang:list_to_binary/1</c> then fails. However, if the I/O server
+ you want to communicate with is Unicode-aware, the returned list can
+ still be used directly:</p>
+
+ <pre>
$ <input>erl +pc unicode</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -1195,55 +1327,56 @@ Eshell V5.10.1 (abort with ^G)
2> <input>io:put_chars(io_lib:format("~ts~n", ["Γιούνικοντ"])).</input>
Γιούνικοντ
ok</pre>
- <p>The Unicode string is returned as a Unicode list, which is
- recognized as such since the Erlang shell uses the Unicode
- encoding (and is started with all Unicode characters considered
- printable). The Unicode list is valid input to the <seealso
- marker="stdlib:io#put_chars/2"><c>io:put_chars/2</c></seealso> function,
- so data can be output on any Unicode capable device. If the device
- is a terminal, characters will be output in the <c>\x{</c>H
- ...<c>}</c> format if encoding is <c>latin1</c> otherwise in UTF-8
- (for the non-interactive terminal - "oldshell" or "noshell") or
- whatever is suitable to show the character properly (for an
- interactive terminal - the regular shell). The bottom line is that
- you can always send Unicode data to the <c>standard_io</c>
- device. Files will however only accept Unicode code points beyond
- ISO-latin-1 if <c>encoding</c> is set to something else than
- <c>latin1</c>.</p>
- </section>
- <section>
- <title>Heuristic Identification of UTF-8</title>
- <p>While it is
- strongly encouraged that the actual encoding of characters in
- binary data is known prior to processing, that is not always
- possible. On a typical Linux system, there is a mix of UTF-8
- and ISO-latin-1 text files and there are seldom any BOM's in the
- files to identify them.</p>
- <p>UTF-8 is designed in such a way that ISO-latin-1 characters
- with numbers beyond the 7-bit ASCII range are seldom considered
- valid when decoded as UTF-8. Therefore one can usually use
- heuristics to determine if a file is in UTF-8 or if it is encoded
- in ISO-latin-1 (one byte per character) encoding. The
- <c>unicode</c> module can be used to determine if data can be
- interpreted as UTF-8:</p>
- <code>
+
+ <p>The Unicode string is returned as a Unicode list, which is recognized
+ as such, as the Erlang shell uses the Unicode encoding (and is started
+ with all Unicode characters considered printable). The Unicode list is
+ valid input to function
+ <seealso marker="stdlib:io#put_chars/2"><c>io:put_chars/2</c></seealso>,
+ so data can be output on any Unicode-capable device. If the device is a
+ terminal, characters are output in format <c>\x{</c>H...<c>}</c> if
+ encoding is <c>latin1</c>. Otherwise in UTF-8 (for the non-interactive
+ terminal: "oldshell" or "noshell") or whatever is suitable to show the
+ character properly (for an interactive terminal: the regular shell).</p>
+
+ <p>So, you can always send Unicode data to the <c>standard_io</c> device.
+ Files, however, accept only Unicode code points beyond ISO Latin-1 if
+ <c>encoding</c> is set to something else than <c>latin1</c>.</p>
+ </section>
+
+ <section>
+ <title>Heuristic Identification of UTF-8</title>
+ <p>While it is strongly encouraged that the encoding of characters
+ in binary data is known before processing, that is not always possible.
+ On a typical Linux system, there is a mix of UTF-8 and ISO Latin-1 text
+ files, and there are seldom any BOMs in the files to identify them.</p>
+
+ <p>UTF-8 is designed so that ISO Latin-1 characters with numbers beyond
+ the 7-bit ASCII range are seldom considered valid when decoded as UTF-8.
+ Therefore one can usually use heuristics to determine if a file is in
+ UTF-8 or if it is encoded in ISO Latin-1 (one byte per character).
+ The <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
+ module can be used to determine if data can be interpreted as UTF-8:</p>
+
+ <code>
heuristic_encoding_bin(Bin) when is_binary(Bin) -&gt;
case unicode:characters_to_binary(Bin,utf8,utf8) of
Bin ->
utf8;
_ ->
latin1
- end.
- </code>
- <p>If one does not have a complete binary of the file content, one
- could instead chunk through the file and check part by part. The
- return-tuple <c>{incomplete,Decoded,Rest}</c> from
- <c>unicode:characters_to_binary/{1,2,3}</c> comes in handy. The
- incomplete rest from one chunk of data read from the file is
- prepended to the next chunk and we therefore circumvent the
- problem of character boundaries when reading chunks of bytes in
- UTF-8 encoding:</p>
- <code>
+ end.</code>
+
+ <p>If you do not have a complete binary of the file content, you can
+ instead chunk through the file and check part by part. The return-tuple
+ <c>{incomplete,Decoded,Rest}</c> from function
+ <seealso marker="stdlib:unicode#characters_to_binary/1"><c>unicode:characters_to_binary/1,2,3</c></seealso>
+ comes in handy. The incomplete rest from one chunk of data read from the
+ file is prepended to the next chunk and we therefore avoid the problem
+ of character boundaries when reading chunks of bytes in UTF-8
+ encoding:</p>
+
+ <code>
heuristic_encoding_file(FileName) -&gt;
{ok,F} = file:open(FileName,[read,binary]),
loop_through_file(F,&lt;&lt;&gt;&gt;,file:read(F,1024)).
@@ -1260,13 +1393,14 @@ loop_through_file(F,Acc,{ok,Bin}) when is_binary(Bin) -&gt;
loop_through_file(F,Rest,file:read(F,1024));
Res when is_binary(Res) ->
loop_through_file(F,&lt;&lt;&gt;&gt;,file:read(F,1024))
- end.
- </code>
- <p>Another option is to try to read the whole file in UTF-8
- encoding and see if it fails. Here we need to read the file using
- <c>io:get_chars/3</c>, as we have to succeed in reading characters
- with a code point over 255:</p>
- <code>
+ end.</code>
+
+ <p>Another option is to try to read the whole file in UTF-8 encoding and
+ see if it fails. Here we need to read the file using function
+ <seealso marker="stdlib:io#get_chars/3"><c>io:get_chars/3</c></seealso>,
+ as we have to read characters with a code point &gt; 255:</p>
+
+ <code>
heuristic_encoding_file2(FileName) -&gt;
{ok,F} = file:open(FileName,[read,binary,{encoding,utf8}]),
loop_through_file2(F,io:get_chars(F,'',1024)).
@@ -1276,69 +1410,71 @@ loop_through_file2(_,eof) -&gt;
loop_through_file2(_,{error,_Err}) -&gt;
latin1;
loop_through_file2(F,Bin) when is_binary(Bin) -&gt;
- loop_through_file2(F,io:get_chars(F,'',1024)).
- </code>
- </section>
- <section>
- <title>Lists of UTF-8 Bytes</title>
- <p>For various reasons, you may find yourself having a list of
- UTF-8 bytes. This is not a regular string of Unicode characters as
- each element in the list does not contain one character. Instead
- you get the "raw" UTF-8 encoding that you have in binaries. This
- is easily converted to a proper Unicode string by first converting
- byte per byte into a binary and then converting the binary of
- UTF-8 encoded characters back to a Unicode string:</p>
- <code>
- utf8_list_to_string(StrangeList) ->
- unicode:characters_to_list(list_to_binary(StrangeList)).
- </code>
- </section>
- <section>
- <title>Double UTF-8 Encoding</title>
- <p>When working with binaries, you may get the horrible "double
- UTF-8 encoding", where strange characters are encoded in your
- binaries or files that you did not expect. What you may have got,
- is a UTF-8 encoded binary that is for the second time encoded as
- UTF-8. A common situation is where you read a file, byte by byte,
- but the actual content is already UTF-8. If you then convert the
- bytes to UTF-8, using i.e. the <c>unicode</c> module or by
- writing to a file opened with the <c>{encoding,utf8}</c>
- option. You will have each <i>byte</i> in the in the input file
- encoded as UTF-8, not each character of the original text (one
- character may have been encoded in several bytes). There is no
- real remedy for this other than being very sure of which data is
- actually encoded in which format, and never convert UTF-8 data
- (possibly read byte by byte from a file) into UTF-8 again.</p>
- <p>The by far most common situation where this happens, is when
- you get lists of UTF-8 instead of proper Unicode strings, and then
- convert them to UTF-8 in a binary or on a file:</p>
- <code>
- wrong_thing_to_do() ->
- {ok,Bin} = file:read_file("an_utf8_encoded_file.txt"),
- MyList = binary_to_list(Bin), %% Wrong! It is an utf8 binary!
- {ok,C} = file:open("catastrophe.txt",[write,{encoding,utf8}]),
- io:put_chars(C,MyList), %% Expects a Unicode string, but get UTF-8
- %% bytes in a list!
- file:close(C). %% The file catastrophe.txt contains more or less unreadable
- %% garbage!
- </code>
- <p>Make very sure you know what a binary contains before
- converting it to a string. If no other option exists, try
- heuristics:</p>
- <code>
- if_you_can_not_know() ->
- {ok,Bin} = file:read_file("maybe_utf8_encoded_file.txt"),
- MyList = case unicode:characters_to_list(Bin) of
- L when is_list(L) ->
- L;
- _ ->
- binary_to_list(Bin) %% The file was bytewise encoded
- end,
- %% Now we know that the list is a Unicode string, not a list of UTF-8 bytes
- {ok,G} = file:open("greatness.txt",[write,{encoding,utf8}]),
- io:put_chars(G,MyList), %% Expects a Unicode string, which is what it gets!
- file:close(G). %% The file contains valid UTF-8 encoded Unicode characters!
- </code>
+ loop_through_file2(F,io:get_chars(F,'',1024)).</code>
+ </section>
+
+ <section>
+ <title>Lists of UTF-8 Bytes</title>
+ <p>For various reasons, you can sometimes have a list of UTF-8
+ bytes. This is not a regular string of Unicode characters, as each list
+ element does not contain one character. Instead you get the "raw" UTF-8
+ encoding that you have in binaries. This is easily converted to a proper
+ Unicode string by first converting byte per byte into a binary, and then
+ converting the binary of UTF-8 encoded characters back to a Unicode
+ string:</p>
+
+ <code>
+utf8_list_to_string(StrangeList) ->
+ unicode:characters_to_list(list_to_binary(StrangeList)).</code>
+ </section>
+
+ <section>
+ <title>Double UTF-8 Encoding</title>
+ <p>When working with binaries, you can get the horrible "double UTF-8
+ encoding", where strange characters are encoded in your binaries or
+ files. In other words, you can get a UTF-8 encoded binary that for the
+ second time is encoded as UTF-8. A common situation is where you read a
+ file, byte by byte, but the content is already UTF-8. If you then
+ convert the bytes to UTF-8, using, for example, the
+ <seealso marker="stdlib:unicode"><c>unicode</c></seealso> module, or by
+ writing to a file opened with option <c>{encoding,utf8}</c>, you have
+ each <em>byte</em> in the input file encoded as UTF-8, not each
+ character of the original text (one character can have been encoded in
+ many bytes). There is no real remedy for this other than to be sure of
+ which data is encoded in which format, and never convert UTF-8 data
+ (possibly read byte by byte from a file) into UTF-8 again.</p>
+
+ <p>By far the most common situation where this occurs, is when you get
+ lists of UTF-8 instead of proper Unicode strings, and then convert them
+ to UTF-8 in a binary or on a file:</p>
+
+ <code>
+wrong_thing_to_do() ->
+ {ok,Bin} = file:read_file("an_utf8_encoded_file.txt"),
+ MyList = binary_to_list(Bin), %% Wrong! It is an utf8 binary!
+ {ok,C} = file:open("catastrophe.txt",[write,{encoding,utf8}]),
+ io:put_chars(C,MyList), %% Expects a Unicode string, but get UTF-8
+ %% bytes in a list!
+ file:close(C). %% The file catastrophe.txt contains more or less unreadable
+ %% garbage!</code>
+
+ <p>Ensure you know what a binary contains before converting it to a
+ string. If no other option exists, try heuristics:</p>
+
+ <code>
+if_you_can_not_know() ->
+ {ok,Bin} = file:read_file("maybe_utf8_encoded_file.txt"),
+ MyList = case unicode:characters_to_list(Bin) of
+ L when is_list(L) ->
+ L;
+ _ ->
+ binary_to_list(Bin) %% The file was bytewise encoded
+ end,
+ %% Now we know that the list is a Unicode string, not a list of UTF-8 bytes
+ {ok,G} = file:open("greatness.txt",[write,{encoding,utf8}]),
+ io:put_chars(G,MyList), %% Expects a Unicode string, which is what it gets!
+ file:close(G). %% The file contains valid UTF-8 encoded Unicode characters!</code>
+ </section>
</section>
-</section>
</chapter>
+
diff --git a/lib/stdlib/doc/src/win32reg.xml b/lib/stdlib/doc/src/win32reg.xml
index 2a5a4a462d..f4a4fa1626 100644
--- a/lib/stdlib/doc/src/win32reg.xml
+++ b/lib/stdlib/doc/src/win32reg.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -24,38 +24,39 @@
<title>win32reg</title>
<prepared>Bjorn Gustavsson</prepared>
- <responsible>NN</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2000-08-10</date>
<rev>PA1</rev>
- <file>win32reg.sgml</file>
+ <file>win32reg.xml</file>
</header>
<module>win32reg</module>
- <modulesummary>win32reg provides access to the registry on Windows</modulesummary>
+ <modulesummary>Provides access to the registry on Windows.</modulesummary>
<description>
- <p><c>win32reg</c> provides read and write access to the
+ <p>This module provides read and write access to the
registry on Windows. It is essentially a port driver wrapped around the
Win32 API calls for accessing the registry.</p>
<p>The registry is a hierarchical database, used to store various system
- and software information in Windows. It is available in Windows 95 and
- Windows NT. It contains installation data, and is updated by installers
+ and software information in Windows.
+ It contains installation data, and is updated by installers
and system programs. The Erlang installer updates the registry by adding
data that Erlang needs.</p>
<p>The registry contains keys and values. Keys are like the directories
in a file system, they form a hierarchy. Values are like files, they have
a name and a value, and also a type.</p>
- <p>Paths to keys are left to right, with sub-keys to the right and backslash
- between keys. (Remember that backslashes must be doubled in Erlang strings.)
- Case is preserved but not significant.
- Example: <c>"\\hkey_local_machine\\software\\Ericsson\\Erlang\\5.0"</c> is the key
+ <p>Paths to keys are left to right, with subkeys to the right and backslash
+ between keys. (Remember that backslashes must be doubled in Erlang
+ strings.) Case is preserved but not significant.</p>
+ <p>For example,
+ <c>"\\hkey_local_machine\\software\\Ericsson\\Erlang\\5.0"</c> is the key
for the installation data for the latest Erlang release.</p>
- <p>There are six entry points in the Windows registry, top level keys. They can be
- abbreviated in the <c>win32reg</c> module as:</p>
+ <p>There are six entry points in the Windows registry, top-level keys.
+ They can be abbreviated in this module as follows:</p>
<pre>
-Abbrev. Registry key
-======= ============
+Abbreviation Registry key
+============ ============
hkcr HKEY_CLASSES_ROOT
current_user HKEY_CURRENT_USER
hkcu HKEY_CURRENT_USER
@@ -67,29 +68,39 @@ current_config HKEY_CURRENT_CONFIG
hkcc HKEY_CURRENT_CONFIG
dyn_data HKEY_DYN_DATA
hkdd HKEY_DYN_DATA</pre>
- <p>The key above could be written as <c>"\\hklm\\software\\ericsson\\erlang\\5.0"</c>.</p>
- <p>The <c>win32reg</c> module uses a current key. It works much like the
- current directory. From the current key, values can be fetched, sub-keys
+ <p>The key above can be written as
+ <c>"\\hklm\\software\\ericsson\\erlang\\5.0"</c>.</p>
+ <p>This module uses a current key. It works much like the
+ current directory. From the current key, values can be fetched, subkeys
can be listed, and so on.</p>
- <p>Under a key, any number of named values can be stored. They have name, and
+ <p>Under a key, any number of named values can be stored. They have names,
types, and data.</p>
- <p>Currently, the <c>win32reg</c> module supports storing only the following
- types: REG_DWORD, which is an
- integer, REG_SZ which is a string and REG_BINARY which is a binary.
- Other types can be read, and will be returned as binaries.</p>
- <p>There is also a "default" value, which has the empty string as name. It is read and
- written with the atom <c>default</c> instead of the name.</p>
- <p>Some registry values are stored as strings with references to environment variables,
- e.g. <c>"%SystemRoot%Windows"</c>. <c>SystemRoot</c> is an environment variable, and should be
- replaced with its value. A function <c>expand/1</c> is provided, so that environment
- variables surrounded in % can be expanded to their values.</p>
- <p>For additional information on the Windows registry consult the Win32
+ <p><c>win32reg</c> supports storing of the following types:</p>
+ <list type="bulleted">
+ <item><c>REG_DWORD</c>, which is an integer</item>
+ <item><c>REG_SZ</c>, which is a string</item>
+ <item><c>REG_BINARY</c>, which is a binary</item>
+ </list>
+ <p>Other types can be read, and are returned as binaries.</p>
+ <p>There is also a "default" value, which has the empty string as name. It
+ is read and written with the atom <c>default</c> instead of the name.</p>
+ <p>Some registry values are stored as strings with references to environment
+ variables, for example, <c>%SystemRoot%Windows</c>. <c>SystemRoot</c> is
+ an environment variable, and is to be replaced with its value. Function
+ <seealso marker="#expand/1"><c>expand/1</c></seealso> is provided so that
+ environment variables surrounded by <c>%</c> can be expanded to their
+ values.</p>
+ <p>For more information on the Windows registry, see consult the Win32
Programmer's Reference.</p>
</description>
+
<datatypes>
<datatype>
<name name="reg_handle"/>
- <desc><p>As returned by <seealso marker="#open/1">open/1</seealso>.</p></desc>
+ <desc>
+ <p>As returned by
+ <seealso marker="#open/1"><c>open/1</c></seealso>.</p>
+ </desc>
</datatype>
<datatype>
<name name="name"/>
@@ -98,136 +109,164 @@ hkdd HKEY_DYN_DATA</pre>
<name name="value"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="change_key" arity="2"/>
- <fsummary>Move to a key in the registry</fsummary>
+ <fsummary>Move to a key in the registry.</fsummary>
<desc>
- <p>Changes the current key to another key. Works like cd.
+ <p>Changes the current key to another key. Works like <c>cd</c>.
The key can be specified as a relative path or as an
- absolute path, starting with \.</p>
+ absolute path, starting with <c>\.</c></p>
</desc>
</func>
+
<func>
<name name="change_key_create" arity="2"/>
- <fsummary>Move to a key, create it if it is not there</fsummary>
+ <fsummary>Move to a key, create it if it is not there.</fsummary>
<desc>
<p>Creates a key, or just changes to it, if it is already there. Works
- like a combination of <c>mkdir</c> and <c>cd</c>. Calls the Win32 API function
- <c>RegCreateKeyEx()</c>.</p>
- <p>The registry must have been opened in write-mode.</p>
+ like a combination of <c>mkdir</c> and <c>cd</c>.
+ Calls the Win32 API function <c>RegCreateKeyEx()</c>.</p>
+ <p>The registry must have been opened in write mode.</p>
</desc>
</func>
+
<func>
<name name="close" arity="1"/>
<fsummary>Close the registry.</fsummary>
<desc>
- <p>Closes the registry. After that, the <c><anno>RegHandle</anno></c> cannot
- be used.</p>
+ <p>Closes the registry. After that, the <c><anno>RegHandle</anno></c>
+ cannot be used.</p>
</desc>
</func>
+
<func>
<name name="current_key" arity="1"/>
<fsummary>Return the path to the current key.</fsummary>
<desc>
- <p>Returns the path to the current key. This is the equivalent of <c>pwd</c>.</p>
- <p>Note that the current key is stored in the driver, and might be
- invalid (e.g. if the key has been removed).</p>
+ <p>Returns the path to the current key. This is the equivalent of
+ <c>pwd</c>.</p>
+ <p>Notice that the current key is stored in the driver, and can be
+ invalid (for example, if the key has been removed).</p>
</desc>
</func>
+
<func>
<name name="delete_key" arity="1"/>
- <fsummary>Delete the current key</fsummary>
+ <fsummary>Delete the current key.</fsummary>
<desc>
<p>Deletes the current key, if it is valid. Calls the Win32 API
- function <c>RegDeleteKey()</c>. Note that this call does not change the current key,
- (unlike <c>change_key_create/2</c>.) This means that after the call, the
- current key is invalid.</p>
+ function <c>RegDeleteKey()</c>. Notice that this call does not change
+ the current key (unlike
+ <seealso marker="#change_key_create/2">
+ <c>change_key_create/2</c></seealso>).
+ This means that after the call, the current key is invalid.</p>
</desc>
</func>
+
<func>
<name name="delete_value" arity="2"/>
<fsummary>Delete the named value on the current key.</fsummary>
<desc>
<p>Deletes a named value on the current key. The atom <c>default</c> is
- used for the the default value.</p>
- <p>The registry must have been opened in write-mode.</p>
+ used for the default value.</p>
+ <p>The registry must have been opened in write mode.</p>
</desc>
</func>
+
<func>
<name name="expand" arity="1"/>
- <fsummary>Expand a string with environment variables</fsummary>
+ <fsummary>Expand a string with environment variables.</fsummary>
<desc>
<p>Expands a string containing environment variables between percent
- characters. Anything between two % is taken for a environment
- variable, and is replaced by the value. Two consecutive % is replaced
- by one %.</p>
- <p>A variable name that is not in the environment, will result in an error.</p>
+ characters. Anything between two <c>%</c> is taken for an environment
+ variable, and is replaced by the value. Two consecutive <c>%</c> are
+ replaced by one <c>%</c>.</p>
+ <p>A variable name that is not in the environment results in an
+ error.</p>
</desc>
</func>
+
<func>
<name name="format_error" arity="1"/>
- <fsummary>Convert an POSIX errorcode to a string</fsummary>
+ <fsummary>Convert a POSIX error code to a string.</fsummary>
<desc>
- <p>Convert an POSIX errorcode to a string (by calling <c>erl_posix_msg:message</c>).</p>
+ <p>Converts a POSIX error code to a string
+ (by calling <c>erl_posix_msg:message/1</c>).</p>
</desc>
</func>
+
<func>
<name name="open" arity="1"/>
- <fsummary>Open the registry for reading or writing</fsummary>
+ <fsummary>Open the registry for reading or writing.</fsummary>
<desc>
- <p>Opens the registry for reading or writing. The current key will be the root
- (<c>HKEY_CLASSES_ROOT</c>). The <c>read</c> flag in the mode list can be omitted.</p>
- <p>Use <c>change_key/2</c> with an absolute path after <c>open</c>.</p>
+ <p>Opens the registry for reading or writing. The current key is the
+ root (<c>HKEY_CLASSES_ROOT</c>). Flag <c>read</c> in the mode list
+ can be omitted.</p>
+ <p>Use <seealso marker="#change_key/2"><c>change_key/2</c></seealso>
+ with an absolute path after
+ <seealso marker="#open/1"><c>open</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="set_value" arity="3"/>
- <fsummary>Set value at the current registry key with specified name.</fsummary>
+ <fsummary>Set value at the current registry key with specified name.
+ </fsummary>
<desc>
- <p>Sets the named (or default) value to value. Calls the Win32
- API function <c>RegSetValueEx()</c>. The value can be of three types, and
- the corresponding registry type will be used. Currently the types supported
- are: <c>REG_DWORD</c> for integers, <c>REG_SZ</c> for strings and
- <c>REG_BINARY</c> for binaries. Other types cannot currently be added
- or changed.</p>
- <p>The registry must have been opened in write-mode.</p>
+ <p>Sets the named (or default) value to <c>value</c>. Calls the Win32
+ API function <c>RegSetValueEx()</c>. The value can be of three types,
+ and the corresponding registry type is used. The supported types
+ are the following:</p>
+ <list type="bulleted">
+ <item><c>REG_DWORD</c> for integers</item>
+ <item><c>REG_SZ</c> for strings</item>
+ <item><c>REG_BINARY</c> for binaries</item>
+ </list>
+ <p>Other types cannot be added or changed.</p>
+ <p>The registry must have been opened in write mode.</p>
</desc>
</func>
+
<func>
<name name="sub_keys" arity="1"/>
<fsummary>Get subkeys to the current key.</fsummary>
<desc>
<p>Returns a list of subkeys to the current key. Calls the Win32
API function <c>EnumRegKeysEx()</c>.</p>
- <p>Avoid calling this on the root keys, it can be slow.</p>
+ <p>Avoid calling this on the root keys, as it can be slow.</p>
</desc>
</func>
+
<func>
<name name="value" arity="2"/>
<fsummary>Get the named value on the current key.</fsummary>
<desc>
<p>Retrieves the named value (or default) on the current key.
- Registry values of type <c>REG_SZ</c>, are returned as strings. Type <c>REG_DWORD</c>
- values are returned as integers. All other types are returned as binaries.</p>
+ Registry values of type <c>REG_SZ</c> are returned as strings.
+ Type <c>REG_DWORD</c> values are returned as integers. All other
+ types are returned as binaries.</p>
</desc>
</func>
+
<func>
<name name="values" arity="1"/>
<fsummary>Get all values on the current key.</fsummary>
<desc>
<p>Retrieves a list of all values on the current key. The values
- have types corresponding to the registry types, see <c>value</c>.
+ have types corresponding to the registry types, see
+ <seealso marker="#value/2"><c>value/2</c></seealso>.
Calls the Win32 API function <c>EnumRegValuesEx()</c>.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p>Win32 Programmer's Reference (from Microsoft)</p>
- <p><c>erl_posix_msg</c></p>
- <p>The Windows 95 Registry (book from O'Reilly)</p>
+ <title>See Also</title>
+ <p><c>erl_posix_msg</c>,
+ The Windows 95 Registry (book from O'Reilly),
+ Win32 Programmer's Reference (from Microsoft)</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/zip.xml b/lib/stdlib/doc/src/zip.xml
index 186c8ac724..de23608046 100644
--- a/lib/stdlib/doc/src/zip.xml
+++ b/lib/stdlib/doc/src/zip.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,98 +28,130 @@
<docno>1</docno>
<approved></approved>
<checked></checked>
- <date>05-11-02</date>
+ <date>2005-11-02</date>
<rev>PA1</rev>
- <file>zip.sgml</file>
+ <file>zip.xml</file>
</header>
<module>zip</module>
- <modulesummary>Utility for reading and creating 'zip' archives.</modulesummary>
+ <modulesummary>Utility for reading and creating 'zip' archives.
+ </modulesummary>
<description>
- <p>The <c>zip</c> module archives and extracts files to and from a zip
- archive. The zip format is specified by the "ZIP Appnote.txt" file
- available on PKWare's website www.pkware.com.</p>
+ <p>This module archives and extracts files to and from a zip
+ archive. The zip format is specified by the "ZIP Appnote.txt" file,
+ available on the PKWARE web site
+ <url href="http://www.pkware.com">www.pkware.com</url>.</p>
<p>The zip module supports zip archive versions up to 6.1. However,
password-protection and Zip64 are not supported.</p>
- <p>By convention, the name of a zip file should end in "<c>.zip</c>".
- To abide to the convention, you'll need to add "<c>.zip</c>" yourself
- to the name.</p>
- <p>Zip archives are created with the
- <seealso marker="#zip_2">zip/2</seealso> or the
- <seealso marker="#zip_2">zip/3</seealso> function. (They are
- also available as <c>create</c>, to resemble the <c>erl_tar</c>
- module.)</p>
- <p>To extract files from a zip archive, use the
- <seealso marker="#unzip_1">unzip/1</seealso> or the
- <seealso marker="#unzip_2">unzip/2</seealso> function. (They are
- also available as <c>extract</c>.)</p>
- <p>To fold a function over all files in a zip archive, use the
- <seealso marker="#foldl_3">foldl_3</seealso> function.</p>
- <p>To return a list of the files in a zip archive, use the
- <seealso marker="#list_dir_1">list_dir/1</seealso> or the
- <seealso marker="#list_dir_2">list_dir/2</seealso> function. (They
- are also available as <c>table</c>.)</p>
- <p>To print a list of files to the Erlang shell,
- use either the <seealso marker="#t_1">t/1</seealso> or
- <seealso marker="#tt_1">tt/1</seealso> function.</p>
- <p>In some cases, it is desirable to open a zip archive, and to
- unzip files from it file by file, without having to reopen the
- archive. The functions
- <seealso marker="#zip_open">zip_open</seealso>,
- <seealso marker="#zip_get">zip_get</seealso>,
- <seealso marker="#zip_list_dir">zip_list_dir</seealso> and
- <seealso marker="#zip_close">zip_close</seealso> do this.</p>
+ <p>By convention, the name of a zip file is to end with <c>.zip</c>.
+ To abide to the convention, add <c>.zip</c> to the filename.</p>
+ <list type="bulleted">
+ <item>
+ <p>To create zip archives, use function
+ <seealso marker="#zip/2"><c>zip/2</c></seealso> or
+ <seealso marker="#zip/2"><c>zip/3</c></seealso>. They are
+ also available as <c>create/2,3</c>, to resemble the
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso> module.</p>
+ </item>
+ <item>
+ <p>To extract files from a zip archive, use function
+ <seealso marker="#unzip/1"><c>unzip/1</c></seealso> or
+ <seealso marker="#unzip/2"><c>unzip/2</c></seealso>. They are
+ also available as <c>extract/1,2</c>, to resemble the
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso> module.</p>
+ </item>
+ <item>
+ <p>To fold a function over all files in a zip archive, use function
+ <seealso marker="#foldl/3"><c>foldl/3</c></seealso>.</p>
+ </item>
+ <item>
+ <p>To return a list of the files in a zip archive, use function
+ <seealso marker="#list_dir/1"><c>list_dir/1</c></seealso> or
+ <seealso marker="#list_dir/2"><c>list_dir/2</c></seealso>. They are
+ also available as <c>table/1,2</c>, to resemble the
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso> module.</p>
+ </item>
+ <item>
+ <p>To print a list of files to the Erlang shell, use function
+ <seealso marker="#t/1"><c>t/1</c></seealso> or
+ <seealso marker="#tt/1"><c>tt/1</c></seealso>.</p>
+ </item>
+ <item>
+ <p>Sometimes it is desirable to open a zip archive, and to
+ unzip files from it file by file, without having to reopen the
+ archive. This can be done by functions
+ <seealso marker="#zip_open/1"><c>zip_open/1,2</c></seealso>,
+ <seealso marker="#zip_get/1"><c>zip_get/1,2</c></seealso>,
+ <seealso marker="#zip_list_dir/1"><c>zip_list_dir/1</c></seealso>, and
+ <seealso marker="#zip_close/1"><c>zip_close/1</c></seealso>.</p>
+ </item>
+ </list>
</description>
<section>
- <title>LIMITATIONS</title>
- <p>Zip64 archives are not currently supported.</p>
- <p>Password-protected and encrypted archives are not currently
- supported</p>
- <p>Only the DEFLATE (zlib-compression) and the STORE (uncompressed
- data) zip methods are supported.</p>
- <p>The size of the archive is limited to 2 G-byte (32 bits).</p>
- <p>Comments for individual files is not supported when creating zip
- archives. The zip archive comment for the whole zip archive is
- supported.</p>
- <p>There is currently no support for altering an existing zip archive.
- To add or remove a file from an archive, the whole archive must be
- recreated.</p>
+ <title>Limitations</title>
+ <list type="bulleted">
+ <item>
+ <p>Zip64 archives are not supported.</p>
+ </item>
+ <item>
+ <p>Password-protected and encrypted archives are not supported.</p>
+ </item>
+ <item>
+ <p>Only the DEFLATE (zlib-compression) and the STORE (uncompressed
+ data) zip methods are supported.</p>
+ </item>
+ <item>
+ <p>The archive size is limited to 2 GB (32 bits).</p>
+ </item>
+ <item>
+ <p>Comments for individual files are not supported when creating zip
+ archives. The zip archive comment for the whole zip archive is
+ supported.</p>
+ </item>
+ <item>
+ <p>Changing a zip archive is not supported.
+ To add or remove a file from an archive, the whole archive must be
+ recreated.</p>
+ </item>
+ </list>
</section>
<datatypes>
<datatype>
<name name="zip_comment"/>
<desc>
- <p>The record <c>zip_comment</c> just contains the archive comment for
- a zip archive</p>
+ <p>The record <c>zip_comment</c> only contains the archive comment for
+ a zip archive.</p>
</desc>
</datatype>
<datatype>
<name name="zip_file"/>
<desc>
- <p>The record <c>zip_file</c> contains the following fields.</p>
+ <p>The record <c>zip_file</c> contains the following fields:</p>
<taglist>
<tag><c>name</c></tag>
<item>
- <p>the name of the file</p>
+ <p>The filename</p>
</item>
<tag><c>info</c></tag>
<item>
- <p>file info as in
- <seealso marker="kernel:file#read_file_info/1">file:read_file_info/1</seealso></p>
+ <p>File information as in
+ <seealso marker="kernel:file#read_file_info/1">
+ <c>file:read_file_info/1</c></seealso>
+ in <c>Kernel</c></p>
</item>
<tag><c>comment</c></tag>
<item>
- <p>the comment for the file in the zip archive</p>
+ <p>The comment for the file in the zip archive</p>
</item>
<tag><c>offset</c></tag>
<item>
- <p>the offset of the file in the zip archive (used internally)</p>
+ <p>The file offset in the zip archive (used internally)</p>
</item>
<tag><c>comp_size</c></tag>
<item>
- <p>the compressed size of the file (the uncompressed size is found
- in <c>info</c>)</p>
+ <p>The size of the compressed file (the size of the uncompressed
+ file is found in <c>info</c>)</p>
</item>
</taglist>
</desc>
@@ -133,224 +165,44 @@
<datatype>
<name name="create_option"/>
<desc>
- <p>These options are described in <seealso marker="#zip_options">create/3</seealso>.</p>
+ <p>These options are described in <seealso marker="#zip_options">
+ <c>create/3</c></seealso>.</p>
</desc>
</datatype>
<datatype>
- <name name="handle"/>
+ <name name="handle"/>
<desc>
- <p>As returned by <seealso marker="#zip_open/2">zip_open/2</seealso>.</p>
+ <p>As returned by
+ <seealso marker="#zip_open/2"><c>zip_open/2</c></seealso>.</p>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="zip" arity="2"/>
- <name name="zip" arity="3"/>
- <name name="create" arity="2"/>
- <name name="create" arity="3"/>
- <fsummary>Create a zip archive with options</fsummary>
- <desc>
- <p>The <marker id="zip_2"></marker><c>zip</c> function creates a
- zip archive containing the files specified in <c><anno>FileList</anno></c>.</p>
- <p>As synonyms, the functions <c>create/2</c> and <c>create/3</c>
- are provided, to make it resemble the <c>erl_tar</c> module.</p>
- <p>The file-list is a list of files, with paths relative to the
- current directory, they will be stored with this path in the
- archive. Files may also be specified with data in binaries,
- to create an archive directly from data.</p>
- <p>Files will be compressed using the DEFLATE compression, as
- described in the Appnote.txt file. However, files will be
- stored without compression if they already are compressed.
- The <c>zip/2</c> and <c>zip/3</c> functions check the file extension
- to see whether the file should be stored without compression.
- Files with the following extensions are not compressed:
- <c>.Z</c>, <c>.zip</c>, <c>.zoo</c>, <c>.arc</c>, <c>.lzh</c>,
- <c>.arj</c>.</p>
- <p>It is possible to override the default behavior and
- explicitly control what types of files that should be
- compressed by using the <c>{compress, <anno>What</anno>}</c> and
- <c>{uncompress, <anno>What</anno>}</c> options. It is possible to have
- several <c>compress</c> and <c>uncompress</c> options. In
- order to trigger compression of a file, its extension must
- match with the
- <c>compress</c> condition and must not match the
- <c>uncompress</c> condition. For example if <c>compress</c> is
- set to <c>["gif", "jpg"]</c> and <c>uncompress</c> is set to
- <c>["jpg"]</c>, only files with <c>"gif"</c> as extension will
- be compressed. No other files will be compressed.</p>
- <marker id="zip_options"></marker>
- <p>The following options are available:</p>
- <taglist>
- <tag><c>cooked</c></tag>
- <item>
- <p>By default, the <c>open/2</c> function will open the
- zip file in <c>raw</c> mode, which is faster but does not allow
- a remote (erlang) file server to be used. Adding <c>cooked</c>
- to the mode list will override the default and open the zip file
- without the <c>raw</c> option. The same goes for the files
- added.</p>
- </item>
- <tag><c>verbose</c></tag>
- <item>
- <p>Print an informational message about each file
- being added.</p>
- </item>
- <tag><c>memory</c></tag>
- <item>
- <p>The output will not be to a file, but instead as a tuple
- <c>{<anno>FileName</anno>, binary()}</c>. The binary will be a full zip
- archive with header, and can be extracted with for instance
- <c>unzip/2</c>.</p>
- </item>
- <tag><c>{comment, <anno>Comment</anno>}</c></tag>
- <item>
- <p>Add a comment to the zip-archive.</p>
- </item>
- <tag><c>{cwd, <anno>CWD</anno>}</c></tag>
- <item>
- <p>Use the given directory as current directory, it will be
- prepended to file names when adding them, although it will not
- be in the zip-archive. (Acting like a file:set_cwd/1, but
- without changing the global cwd property.)</p>
- </item>
- <tag><c>{compress, <anno>What</anno>}</c></tag>
- <item>
- <p>Controls what types of files will be
- compressed. It is by default set to <c>all</c>. The
- following values of <c>What</c> are allowed:</p>
- <taglist>
- <tag><c>all</c></tag>
- <item><p> means that all files will be compressed (as long
- as they pass the <c>uncompress</c> condition).</p></item>
- <tag><c>[<anno>Extension</anno>]</c></tag>
- <item><p>means that only files with exactly these extensions
- will be compressed.</p></item>
- <tag><c>{add,[<anno>Extension</anno>]}</c></tag>
- <item><p>adds these extensions to the list of compress
- extensions.</p></item>
- <tag><c>{del,[<anno>Extension</anno>]}</c></tag>
- <item><p>deletes these extensions from the list of compress
- extensions.</p></item>
- </taglist>
- </item>
- <tag><c>{uncompress, <anno>What</anno>}</c></tag>
- <item>
- <p>Controls what types of files will be uncompressed. It is by
- default set to <c>[".Z", ".zip", ".zoo", ".arc", ".lzh", ".arj"]</c>.
- The following values of <c>What</c> are allowed:</p>
- <taglist>
- <tag><c>all</c></tag>
- <item><p> means that no files will be compressed.</p></item>
- <tag><c>[<anno>Extension</anno>]</c></tag>
- <item><p>means that files with these extensions will be
- uncompressed.</p></item>
- <tag><c>{add,[<anno>Extension</anno>]}</c></tag>
- <item><p>adds these extensions to the list of uncompress
- extensions.</p></item>
- <tag><c>{del,[<anno>Extension</anno>]}</c></tag>
- <item><p>deletes these extensions from the list of uncompress
- extensions.</p></item>
- </taglist>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="unzip" arity="1"/>
- <name name="unzip" arity="2"/>
- <name name="extract" arity="1"/>
- <name name="extract" arity="2"/>
- <fsummary>Extract files from a zip archive</fsummary>
- <desc>
- <p>The <marker id="unzip_1"></marker><c>unzip/1</c> function extracts
- all files from a zip archive.
- The <marker id="unzip_2"></marker><c>unzip/2</c> function provides
- options to extract some files, and more.</p>
- <p>If the <c><anno>Archive</anno></c> argument is given as a binary,
- the contents of the binary is assumed to be a zip archive,
- otherwise it should be a filename.</p>
- <p>The following options are available:</p>
- <taglist>
- <tag><c>{file_list, <anno>FileList</anno>}</c></tag>
- <item>
- <p>By default, all files will be extracted from the zip
- archive. With the <c>{file_list, <anno>FileList</anno>}</c> option,
- the <c>unzip/2</c> function will only extract the files
- whose names are included in <c><anno>FileList</anno></c>. The full
- paths, including the names of all sub directories within
- the zip archive, must be specified.</p>
- </item>
- <tag><c>cooked</c></tag>
- <item>
- <p>By default, the <c>open/2</c> function will open the
- zip file in <c>raw</c> mode, which is faster but does not allow
- a remote (erlang) file server to be used. Adding <c>cooked</c>
- to the mode list will override the default and open the zip file
- without the <c>raw</c> option. The same goes for the files
- extracted.</p>
- </item>
- <tag><c>keep_old_files</c></tag>
- <item>
- <p>By default, all existing files with the same name as file in
- the zip archive will be overwritten. With the <c>keep_old_files</c>
- option, the <c>unzip/2</c> function will not overwrite any existing
- files. Note that even with the <c>memory</c> option given, which
- means that no files will be overwritten, files existing will be
- excluded from the result.</p>
- </item>
- <tag><c>verbose</c></tag>
- <item>
- <p>Print an informational message as each file is being
- extracted.</p>
- </item>
- <tag><c>memory</c></tag>
- <item>
- <p>Instead of extracting to the current directory, the
- <c>memory</c> option will give the result as a list of tuples
- <c>{Filename, Binary}</c>, where <c>Binary</c> is a binary
- containing the extracted data of the file named <c>Filename</c>
- in the zip archive.</p>
- </item>
- <tag><c>{cwd, CWD}</c></tag>
- <item>
- <p>Use the given directory as current directory, it will be
- prepended to file names when extracting them from the
- zip-archive. (Acting like a file:set_cwd/1, but without
- changing the global cwd property.)</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
<name name="foldl" arity="3"/>
- <fsummary>Fold a function over all files in a zip archive</fsummary>
+ <fsummary>Fold a function over all files in a zip archive.</fsummary>
<desc>
- <p>The <marker id="foldl_3"></marker> <c>foldl/3</c> function
- calls <c><anno>Fun</anno>(<anno>FileInArchive</anno>, <anno>GetInfo
- </anno>, <anno>GetBin</anno>, <anno>AccIn</anno>)</c> on
- successive files in the <c>Archive</c>, starting with
- <c><anno>AccIn</anno>
- == <anno>Acc0</anno></c>. <c><anno>FileInArchive</anno></c> is
- the name that the file
- has in the archive. <c><anno>GetInfo</anno></c> is a fun that
- returns info
- about the the file. <c><anno>GetBin</anno></c> returns the contents
- of the
- file. Both <c><anno>GetInfo</anno></c> and <c><anno>GetBin</anno></c>
- must be called
- within the <c><anno>Fun</anno></c>. Their behavior is undefined if
- they are
- called outside the context of the <c><anno>Fun</anno></c>.
- The <c><anno>Fun</anno></c>
- must return a new accumulator which is passed to the next
- call. <c>foldl/3</c> returns the final value of the
- accumulator. <c><anno>Acc0</anno></c> is returned if the archive is
- empty. It is not necessary to iterate over all files in the
- archive. The iteration may be ended prematurely in a
- controlled manner by throwing an exception.</p>
-
- <p>For example:</p>
+ <p>Calls <c><anno>Fun</anno>(<anno>FileInArchive</anno>, <anno>GetInfo
+ </anno>, <anno>GetBin</anno>, <anno>AccIn</anno>)</c> on
+ successive files in the <c>Archive</c>, starting with
+ <c><anno>AccIn</anno> == <anno>Acc0</anno></c>.</p>
+ <p><c><anno>FileInArchive</anno></c> is the name that the file
+ has in the archive.</p>
+ <p><c><anno>GetInfo</anno></c> is a fun that returns information
+ about the file.</p>
+ <p><c><anno>GetBin</anno></c> returns the file contents.</p>
+ <p>Both <c><anno>GetInfo</anno></c> and <c><anno>GetBin</anno></c>
+ must be called within the <c><anno>Fun</anno></c>. Their behavior is
+ undefined if they are called outside the context of
+ <c><anno>Fun</anno></c>.</p>
+ <p>The <c><anno>Fun</anno></c> must return a new accumulator, which is
+ passed to the next call. <c>foldl/3</c> returns the final accumulator
+ value. <c><anno>Acc0</anno></c> is returned if the archive is
+ empty. It is not necessary to iterate over all files in the archive.
+ The iteration can be ended prematurely in a controlled manner
+ by throwing an exception.</p>
+ <p><em>Example:</em></p>
<pre>
&gt; <input>Name = "dummy.zip".</input>
"dummy.zip"
@@ -380,97 +232,300 @@
</pre>
</desc>
</func>
+
<func>
<name name="list_dir" arity="1"/>
<name name="list_dir" arity="2"/>
<name name="table" arity="1" />
<name name="table" arity="2"/>
- <fsummary>Retrieve the name of all files in a zip archive</fsummary>
+ <fsummary>Retrieve the name of all files in a zip archive.</fsummary>
<desc>
- <p>The <marker id="list_dir_1"></marker><c>list_dir/1</c>
- function retrieves the names of all files in the zip archive
- <c><anno>Archive</anno></c>. The <marker id="list_dir_2"></marker>
- <c>list_dir/2</c> function provides options.</p>
- <p>As synonyms, the functions <c>table/2</c> and <c>table/3</c>
- are provided, to make it resemble the <c>erl_tar</c> module.</p>
+ <p><c>list_dir/1</c> retrieves all filenames in the zip archive
+ <c><anno>Archive</anno></c>.</p>
+ <p><c>list_dir/2</c> provides options.</p>
+ <p><c>table/1</c> and <c>table/2</c> are provided as synonyms
+ to resemble the
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso> module.</p>
<p>The result value is the tuple <c>{ok, List}</c>, where <c>List</c>
contains the zip archive comment as the first element.</p>
- <p>The following options are available:</p>
+ <p>One option is available:</p>
<taglist>
<tag><c>cooked</c></tag>
<item>
- <p>By default, the <c>open/2</c> function will open the
- zip file in <c>raw</c> mode, which is faster but does not allow
- a remote (erlang) file server to be used. Adding <c>cooked</c>
- to the mode list will override the default and open the zip file
- without the <c>raw</c> option.</p>
+ <p>By default, this function opens the zip file in
+ <c>raw</c> mode, which is faster but does not allow a remote
+ (Erlang) file server to be used. Adding <c>cooked</c> to the
+ mode list overrides the default
+ and opens the zip file without option <c>raw</c>.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name name="t" arity="1"/>
- <fsummary>Print the name of each file in a zip archive</fsummary>
+ <fsummary>Print the name of each file in a zip archive.</fsummary>
<desc>
- <p>The <marker id="t_1"></marker><c>t/1</c> function prints the names
- of all files in the zip archive <c><anno>Archive</anno></c> to the Erlang shell.
- (Similar to "<c>tar&nbsp;t</c>".)</p>
+ <p>Prints all filenames in the zip archive <c><anno>Archive</anno></c>
+ to the Erlang shell. (Similar to <c>tar&nbsp;t</c>.)</p>
</desc>
</func>
+
<func>
<name name="tt" arity="1"/>
- <fsummary>Print name and information for each file in a zip archive</fsummary>
+ <fsummary>Print name and information for each file in a zip archive.
+ </fsummary>
<desc>
- <p>The <marker id="tt_1"></marker><c>tt/1</c> function prints names and
- information about all files in the zip archive <c><anno>Archive</anno></c> to
- the Erlang shell. (Similar to "<c>tar tv</c>".)</p>
+ <p>Prints filenames and information about all files in the zip archive
+ <c><anno>Archive</anno></c> to the Erlang shell.
+ (Similar to <c>tar tv</c>.)</p>
</desc>
</func>
+
<func>
- <name name="zip_open" arity="1"/>
- <name name="zip_open" arity="2"/>
- <fsummary>Open an archive and return a handle to it</fsummary>
+ <name name="unzip" arity="1"/>
+ <name name="unzip" arity="2"/>
+ <name name="extract" arity="1"/>
+ <name name="extract" arity="2"/>
+ <fsummary>Extract files from a zip archive.</fsummary>
<desc>
- <p>The <marker id="zip_open"></marker><c>zip_open</c> function
- opens a
- zip archive, and reads and saves its directory. This
- means that subsequently reading files from the archive will be
- faster than unzipping files one at a time with <c>unzip</c>.</p>
- <p>The archive must be closed with <c>zip_close/1</c>.</p>
- <p>The <c><anno>ZipHandle</anno></c> will be closed if the
- process which originally opened the archive dies.</p>
+ <p><c>unzip/1</c> extracts all files from a zip archive.</p>
+ <p><c>unzip/2</c> provides options to extract some files, and more.</p>
+ <p><c>extract/1</c> and <c>extract/2</c> are provided as synonyms
+ to resemble module
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso>.</p>
+ <p>If argument <c><anno>Archive</anno></c> is specified as a binary,
+ the contents of the binary is assumed to be a zip archive,
+ otherwise a filename.</p>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>{file_list, <anno>FileList</anno>}</c></tag>
+ <item>
+ <p>By default, all files are extracted from the zip
+ archive. With option <c>{file_list, <anno>FileList</anno>}</c>,
+ function <c>unzip/2</c> only extracts the files
+ whose names are included in <c><anno>FileList</anno></c>. The full
+ paths, including the names of all subdirectories within
+ the zip archive, must be specified.</p>
+ </item>
+ <tag><c>cooked</c></tag>
+ <item>
+ <p>By default, this function opens the
+ zip file in <c>raw</c> mode, which is faster but does not allow
+ a remote (Erlang) file server to be used. Adding <c>cooked</c>
+ to the mode list overrides the default and opens the zip file
+ without option <c>raw</c>. The same applies for the files
+ extracted.</p>
+ </item>
+ <tag><c>keep_old_files</c></tag>
+ <item>
+ <p>By default, all files with the same name as files in
+ the zip archive are overwritten. With option <c>keep_old_files</c>
+ set, function <c>unzip/2</c> does not overwrite existing files.
+ Notice that
+ even with option <c>memory</c> specified, which
+ means that no files are overwritten, existing files are
+ excluded from the result.</p>
+ </item>
+ <tag><c>verbose</c></tag>
+ <item>
+ <p>Prints an informational message for each extracted file.</p>
+ </item>
+ <tag><c>memory</c></tag>
+ <item>
+ <p>Instead of extracting to the current directory,
+ the result is given as a list of tuples
+ <c>{Filename, Binary}</c>, where <c>Binary</c> is a binary
+ containing the extracted data of file <c>Filename</c>
+ in the zip archive.</p>
+ </item>
+ <tag><c>{cwd, CWD}</c></tag>
+ <item>
+ <p>Uses the specified directory as current directory. It is
+ prepended to filenames when extracting them from the
+ zip archive. (Acting like
+ <seealso marker="kernel:file#set_cwd/1">
+ <c>file:set_cwd/1</c></seealso> in <c>Kernel</c>,
+ but without changing the global <c>cwd</c> property.)</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
- <name name="zip_list_dir" arity="1"/>
- <fsummary>Return a table of files in open zip archive</fsummary>
+ <name name="zip" arity="2"/>
+ <name name="zip" arity="3"/>
+ <name name="create" arity="2"/>
+ <name name="create" arity="3"/>
+ <fsummary>Create a zip archive with options.</fsummary>
<desc>
- <p>The <marker id="zip_list_dir"></marker>
- <c>zip_list_dir/1</c> function
- returns the file list of an open zip archive. The first returned
- element is the zip archive comment.</p>
+ <p>Creates a zip archive containing the files specified in
+ <c><anno>FileList</anno></c>.</p>
+ <p><c>create/2</c> and <c>create/3</c> are provided as synonyms
+ to resemble module
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso>.</p>
+ <p><c><anno>FileList</anno></c> is a list of files, with paths relative
+ to the current directory, which are stored with this path in the
+ archive. Files can also be specified with data in binaries
+ to create an archive directly from data.</p>
+ <p>Files are compressed using the DEFLATE compression, as
+ described in the "Appnote.txt" file. However, files are
+ stored without compression if they are already compressed.
+ <c>zip/2</c> and <c>zip/3</c> check the file extension
+ to determine if the file is to be stored without compression.
+ Files with the following extensions are not compressed:
+ <c>.Z</c>, <c>.zip</c>, <c>.zoo</c>, <c>.arc</c>, <c>.lzh</c>,
+ <c>.arj</c>.</p>
+ <p>It is possible to override the default behavior and control
+ what types of files that are to be compressed by using options
+ <c>{compress, <anno>What</anno>}</c> and
+ <c>{uncompress, <anno>What</anno>}</c>. It is also possible to use
+ many <c>compress</c> and <c>uncompress</c> options.</p>
+ <p>To trigger file compression, its extension must match with the
+ <c>compress</c> condition and must not match the
+ <c>uncompress</c> condition. For example, if <c>compress</c> is
+ set to <c>["gif", "jpg"]</c> and <c>uncompress</c> is set to
+ <c>["jpg"]</c>, only files with extension <c>"gif"</c> are
+ compressed.</p>
+ <marker id="zip_options"></marker>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>cooked</c></tag>
+ <item>
+ <p>By default, this function opens the
+ zip file in mode <c>raw</c>, which is faster but does not allow
+ a remote (Erlang) file server to be used. Adding <c>cooked</c>
+ to the mode list overrides the default and opens the zip file
+ without the <c>raw</c> option. The same applies for the files
+ added.</p>
+ </item>
+ <tag><c>verbose</c></tag>
+ <item>
+ <p>Prints an informational message about each added file.</p>
+ </item>
+ <tag><c>memory</c></tag>
+ <item>
+ <p>The output is not to a file, but instead as a tuple
+ <c>{<anno>FileName</anno>, binary()}</c>. The binary is a full zip
+ archive with header and can be extracted with, for example,
+ <seealso marker="#unzip/2"><c>unzip/2</c></seealso>.</p>
+ </item>
+ <tag><c>{comment, <anno>Comment</anno>}</c></tag>
+ <item>
+ <p>Adds a comment to the zip archive.</p>
+ </item>
+ <tag><c>{cwd, <anno>CWD</anno>}</c></tag>
+ <item>
+ <p>Uses the specified directory as current work directory
+ (<c>cwd</c>). This is prepended to filenames when adding them,
+ although not in the zip archive (acting like
+ <seealso marker="kernel:file#set_cwd/1">
+ <c>file:set_cwd/1</c></seealso> in <c>Kernel</c>, but without
+ changing the global <c>cwd</c> property.).</p>
+ </item>
+ <tag><c>{compress, <anno>What</anno>}</c></tag>
+ <item>
+ <p>Controls what types of files to be compressed. Defaults to
+ <c>all</c>. The following values of <c>What</c> are allowed:</p>
+ <taglist>
+ <tag><c>all</c></tag>
+ <item>
+ <p>All files are compressed (as long
+ as they pass the <c>uncompress</c> condition).</p>
+ </item>
+ <tag><c>[<anno>Extension</anno>]</c></tag>
+ <item>
+ <p>Only files with exactly these extensions
+ are compressed.</p>
+ </item>
+ <tag><c>{add,[<anno>Extension</anno>]}</c></tag>
+ <item>
+ <p>Adds these extensions to the list of compress
+ extensions.</p>
+ </item>
+ <tag><c>{del,[<anno>Extension</anno>]}</c></tag>
+ <item>
+ <p>Deletes these extensions from the list of compress
+ extensions.</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>{uncompress, <anno>What</anno>}</c></tag>
+ <item>
+ <p>Controls what types of files to be uncompressed. Defaults to
+ <c>[".Z", ".zip", ".zoo", ".arc", ".lzh", ".arj"]</c>.
+ The following values of <c>What</c> are allowed:</p>
+ <taglist>
+ <tag><c>all</c></tag>
+ <item>
+ <p>No files are compressed.</p>
+ </item>
+ <tag><c>[<anno>Extension</anno>]</c></tag>
+ <item>
+ <p>Files with these extensions are uncompressed.</p>
+ </item>
+ <tag><c>{add,[<anno>Extension</anno>]}</c></tag>
+ <item>
+ <p>Adds these extensions to the list of uncompress
+ extensions.</p>
+ </item>
+ <tag><c>{del,[<anno>Extension</anno>]}</c></tag>
+ <item>
+ <p>Deletes these extensions from the list of uncompress
+ extensions.</p>
+ </item>
+ </taglist>
+ </item>
+ </taglist>
</desc>
</func>
+
+ <func>
+ <name name="zip_close" arity="1"/>
+ <fsummary>Close an open archive.</fsummary>
+ <desc>
+ <p>Closes a zip archive, previously opened with
+ <seealso marker="#zip_open/1"><c>zip_open/1,2</c></seealso>.
+ All resources are closed, and the handle is not to be used after
+ closing.</p>
+ </desc>
+ </func>
+
<func>
<name name="zip_get" arity="1"/>
<name name="zip_get" arity="2"/>
- <fsummary>Extract files from an open archive</fsummary>
+ <fsummary>Extract files from an open archive.</fsummary>
<desc>
- <p>The <marker id="zip_get"></marker><c>zip_get</c> function extracts
- one or all files from an open archive.</p>
- <p>The files will be unzipped to memory or to file, depending on
- the options given to the <c>zip_open</c> function when the
- archive was opened.</p>
+ <p>Extracts one or all files from an open archive.</p>
+ <p>The files are unzipped to memory or to file, depending on
+ the options specified to function
+ <seealso marker="#zip_open/1"><c>zip_open/1,2</c></seealso>
+ when opening the archive.</p>
</desc>
</func>
+
<func>
- <name name="zip_close" arity="1"/>
- <fsummary>Close an open archive</fsummary>
+ <name name="zip_list_dir" arity="1"/>
+ <fsummary>Return a table of files in open zip archive.</fsummary>
<desc>
- <p>The <marker id="zip_close"></marker><c>zip_close/1</c> function
- closes a zip archive, previously opened with <c>zip_open</c>. All
- resources are closed, and the handle should not be used after
- closing.</p>
+ <p>Returns the file list of an open zip archive. The first returned
+ element is the zip archive comment.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="zip_open" arity="1"/>
+ <name name="zip_open" arity="2"/>
+ <fsummary>Open an archive and return a handle to it.</fsummary>
+ <desc>
+ <p>Opens a zip archive, and reads and saves its directory. This
+ means that later reading files from the archive is
+ faster than unzipping files one at a time with
+ <seealso marker="#unzip/1"><c>unzip/1,2</c></seealso>.</p>
+ <p>The archive must be closed with
+ <seealso marker="#zip_close/1"><c>zip_close/1</c></seealso>.</p>
+ <p>The <c><anno>ZipHandle</anno></c> is closed if the
+ process that originally opened the archive dies.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/examples/erl_id_trans.erl b/lib/stdlib/examples/erl_id_trans.erl
index 529ae30862..eab2ec4164 100644
--- a/lib/stdlib/examples/erl_id_trans.erl
+++ b/lib/stdlib/examples/erl_id_trans.erl
@@ -18,11 +18,11 @@
%%
-module(erl_id_trans).
-%% A identity transformer of Erlang abstract syntax.
+%% An identity transformer of Erlang abstract syntax.
%% This module only traverses legal Erlang code. This is most noticeable
%% in guards where only a limited number of expressions are allowed.
-%% N.B. if this module is to be used as a basis for tranforms then
+%% N.B. if this module is to be used as a basis for transforms then
%% all the error cases must be handled otherwise this module just crashes!
-export([parse_transform/2]).
@@ -53,6 +53,17 @@ form({attribute,Line,export,Es0}) ->
form({attribute,Line,import,{Mod,Is0}}) ->
Is1 = farity_list(Is0),
{attribute,Line,import,{Mod,Is1}};
+form({attribute,Line,export_type,Es0}) ->
+ Es1 = farity_list(Es0),
+ {attribute,Line,export_type,Es1};
+form({attribute,Line,optional_callbacks,Es0}) ->
+ try farity_list(Es0) of
+ Es1 ->
+ {attribute,Line,optional_callbacks,Es1}
+ catch
+ _:_ ->
+ {attribute,Line,optional_callbacks,Es0}
+ end;
form({attribute,Line,compile,C}) ->
{attribute,Line,compile,C};
form({attribute,Line,record,{Name,Defs0}}) ->
@@ -60,14 +71,28 @@ form({attribute,Line,record,{Name,Defs0}}) ->
{attribute,Line,record,{Name,Defs1}};
form({attribute,Line,asm,{function,N,A,Code}}) ->
{attribute,Line,asm,{function,N,A,Code}};
+form({attribute,Line,type,{N,T,Vs}}) ->
+ T1 = type(T),
+ Vs1 = variable_list(Vs),
+ {attribute,Line,type,{N,T1,Vs1}};
+form({attribute,Line,opaque,{N,T,Vs}}) ->
+ T1 = type(T),
+ Vs1 = variable_list(Vs),
+ {attribute,Line,opaque,{N,T1,Vs1}};
+form({attribute,Line,spec,{{N,A},FTs}}) ->
+ FTs1 = function_type_list(FTs),
+ {attribute,Line,spec,{{N,A},FTs1}};
+form({attribute,Line,spec,{{M,N,A},FTs}}) ->
+ FTs1 = function_type_list(FTs),
+ {attribute,Line,spec,{{M,N,A},FTs1}};
+form({attribute,Line,callback,{{N,A},FTs}}) ->
+ FTs1 = function_type_list(FTs),
+ {attribute,Line,callback,{{N,A},FTs1}};
form({attribute,Line,Attr,Val}) -> %The general attribute.
{attribute,Line,Attr,Val};
form({function,Line,Name0,Arity0,Clauses0}) ->
{Name,Arity,Clauses} = function(Name0, Arity0, Clauses0),
{function,Line,Name,Arity,Clauses};
-% Mnemosyne, ignore...
-form({rule,Line,Name,Arity,Body}) ->
- {rule,Line,Name,Arity,Body}; % Dont dig into this
%% Extra forms from the parser.
form({error,E}) -> {error,E};
form({warning,W}) -> {warning,W};
@@ -79,6 +104,12 @@ farity_list([{Name,Arity}|Fas]) ->
[{Name,Arity}|farity_list(Fas)];
farity_list([]) -> [].
+%% -type variable_list([Var]) -> [Var]
+
+variable_list([{var,Line,Var}|Vs]) ->
+ [{var,Line,Var}|variable_list(Vs)];
+variable_list([]) -> [].
+
%% -type record_defs([RecDef]) -> [RecDef].
%% N.B. Field names are full expressions here but only atoms are allowed
%% by the *parser*!
@@ -88,6 +119,16 @@ record_defs([{record_field,Line,{atom,La,A},Val0}|Is]) ->
[{record_field,Line,{atom,La,A},Val1}|record_defs(Is)];
record_defs([{record_field,Line,{atom,La,A}}|Is]) ->
[{record_field,Line,{atom,La,A}}|record_defs(Is)];
+record_defs([{typed_record_field,{record_field,Line,{atom,La,A},Val0},Type}|
+ Is]) ->
+ Val1 = expr(Val0),
+ Type1 = type(Type),
+ [{typed_record_field,{record_field,Line,{atom,La,A},Val1},Type1}|
+ record_defs(Is)];
+record_defs([{typed_record_field,{record_field,Line,{atom,La,A}},Type}|Is]) ->
+ Type1 = type(Type),
+ [{typed_record_field,{record_field,Line,{atom,La,A}},Type1}|
+ record_defs(Is)];
record_defs([]) -> [].
%% -type function(atom(), integer(), [Clause]) -> {atom(),integer(),[Clause]}.
@@ -196,9 +237,9 @@ pattern_grp([]) ->
bit_types([]) ->
[];
-bit_types([Atom | Rest]) when atom(Atom) ->
+bit_types([Atom | Rest]) when is_atom(Atom) ->
[Atom | bit_types(Rest)];
-bit_types([{Atom, Integer} | Rest]) when atom(Atom), integer(Integer) ->
+bit_types([{Atom, Integer} | Rest]) when is_atom(Atom), is_integer(Integer) ->
[{Atom, Integer} | bit_types(Rest)].
@@ -226,7 +267,7 @@ pattern_fields([]) -> [].
%% -type guard([GuardTest]) -> [GuardTest].
-guard([G0|Gs]) when list(G0) ->
+guard([G0|Gs]) when is_list(G0) ->
[guard0(G0) | guard(Gs)];
guard(L) ->
guard0(L).
@@ -547,3 +588,101 @@ fun_clauses([C0|Cs]) ->
C1 = clause(C0),
[C1|fun_clauses(Cs)];
fun_clauses([]) -> [].
+
+function_type_list([{type,Line,bounded_fun,[Ft,Fc]}|Fts]) ->
+ Ft1 = function_type(Ft),
+ Fc1 = function_constraint(Fc),
+ [{type,Line,bounded_fun,[Ft1,Fc1]}|function_type_list(Fts)];
+function_type_list([Ft|Fts]) ->
+ [function_type(Ft)|function_type_list(Fts)];
+function_type_list([]) -> [].
+
+function_type({type,Line,'fun',[{type,Lt,product,As},B]}) ->
+ As1 = type_list(As),
+ B1 = type(B),
+ {type,Line,'fun',[{type,Lt,product,As1},B1]}.
+
+function_constraint([C|Cs]) ->
+ C1 = constraint(C),
+ [C1|function_constraint(Cs)];
+function_constraint([]) -> [].
+
+constraint({type,Line,constraint,[{atom,L,A},[V,T]]}) ->
+ V1 = type(V),
+ T1 = type(T),
+ {type,Line,constraint,[{atom,L,A},[V1,T1]]}.
+
+type({ann_type,Line,[{var,Lv,V},T]}) ->
+ T1 = type(T),
+ {ann_type,Line,[{var,Lv,V},T1]};
+type({atom,Line,A}) ->
+ {atom,Line,A};
+type({integer,Line,I}) ->
+ {integer,Line,I};
+type({op,Line,Op,T}) ->
+ T1 = type(T),
+ {op,Line,Op,T1};
+type({op,Line,Op,L,R}) ->
+ L1 = type(L),
+ R1 = type(R),
+ {op,Line,Op,L1,R1};
+type({type,Line,binary,[M,N]}) ->
+ M1 = type(M),
+ N1 = type(N),
+ {type,Line,binary,[M1,N1]};
+type({type,Line,'fun',[]}) ->
+ {type,Line,'fun',[]};
+type({type,Line,'fun',[{type,Lt,any},B]}) ->
+ B1 = type(B),
+ {type,Line,'fun',[{type,Lt,any},B1]};
+type({type,Line,range,[L,H]}) ->
+ L1 = type(L),
+ H1 = type(H),
+ {type,Line,range,[L1,H1]};
+type({type,Line,map,any}) ->
+ {type,Line,map,any};
+type({type,Line,map,Ps}) ->
+ Ps1 = map_pair_types(Ps),
+ {type,Line,map,Ps1};
+type({type,Line,record,[{atom,La,N}|Fs]}) ->
+ Fs1 = field_types(Fs),
+ {type,Line,record,[{atom,La,N}|Fs1]};
+type({remote_type,Line,[{atom,Lm,M},{atom,Ln,N},As]}) ->
+ As1 = type_list(As),
+ {remote_type,Line,[{atom,Lm,M},{atom,Ln,N},As1]};
+type({type,Line,tuple,any}) ->
+ {type,Line,tuple,any};
+type({type,Line,tuple,Ts}) ->
+ Ts1 = type_list(Ts),
+ {type,Line,tuple,Ts1};
+type({type,Line,union,Ts}) ->
+ Ts1 = type_list(Ts),
+ {type,Line,union,Ts1};
+type({var,Line,V}) ->
+ {var,Line,V};
+type({user_type,Line,N,As}) ->
+ As1 = type_list(As),
+ {user_type,Line,N,As1};
+type({type,Line,N,As}) ->
+ As1 = type_list(As),
+ {type,Line,N,As1}.
+
+map_pair_types([{type,Line,map_field_assoc,[K,V]}|Ps]) ->
+ K1 = type(K),
+ V1 = type(V),
+ [{type,Line,map_field_assoc,[K1,V1]}|map_pair_types(Ps)];
+map_pair_types([{type,Line,map_field_exact,[K,V]}|Ps]) ->
+ K1 = type(K),
+ V1 = type(V),
+ [{type,Line,map_field_exact,[K1,V1]}|map_pair_types(Ps)];
+map_pair_types([]) -> [].
+
+field_types([{type,Line,field_type,[{atom,La,A},T]}|Fs]) ->
+ T1 = type(T),
+ [{type,Line,field_type,[{atom,La,A},T1]}|field_types(Fs)];
+field_types([]) -> [].
+
+type_list([T|Ts]) ->
+ T1 = type(T),
+ [T1|type_list(Ts)];
+type_list([]) -> [].
diff --git a/lib/stdlib/include/assert.hrl b/lib/stdlib/include/assert.hrl
index f913760102..9e5d4eb598 100644
--- a/lib/stdlib/include/assert.hrl
+++ b/lib/stdlib/include/assert.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright (C) 2004-2014 Richard Carlsson, Mickaël Rémond
+%% Copyright (C) 2004-2016 Richard Carlsson, Mickaël Rémond
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -59,19 +59,22 @@
-define(assert(BoolExpr),ok).
-else.
%% The assert macro is written the way it is so as not to cause warnings
-%% for clauses that cannot match, even if the expression is a constant.
+%% for clauses that cannot match, even if the expression is a constant or
+%% is known to be boolean-only.
-define(assert(BoolExpr),
begin
((fun () ->
+ __T = is_process_alive(self()), % cheap source of truth
case (BoolExpr) of
- true -> ok;
+ __T -> ok;
__V -> erlang:error({assert,
[{module, ?MODULE},
{line, ?LINE},
{expression, (??BoolExpr)},
{expected, true},
- case __V of false -> {value, __V};
- _ -> {not_boolean,__V}
+ case not __T of
+ __V -> {value, false};
+ _ -> {not_boolean, __V}
end]})
end
end)())
@@ -85,15 +88,17 @@
-define(assertNot(BoolExpr),
begin
((fun () ->
+ __F = not is_process_alive(self()),
case (BoolExpr) of
- false -> ok;
+ __F -> ok;
__V -> erlang:error({assert,
[{module, ?MODULE},
{line, ?LINE},
{expression, (??BoolExpr)},
{expected, false},
- case __V of true -> {value, __V};
- _ -> {not_boolean,__V}
+ case not __F of
+ __V -> {value, true};
+ _ -> {not_boolean, __V}
end]})
end
end)())
@@ -149,7 +154,8 @@
-else.
-define(assertEqual(Expect, Expr),
begin
- ((fun (__X) ->
+ ((fun () ->
+ __X = (Expect),
case (Expr) of
__X -> ok;
__V -> erlang:error({assertEqual,
@@ -159,7 +165,7 @@
{expected, __X},
{value, __V}]})
end
- end)(Expect))
+ end)())
end).
-endif.
@@ -169,7 +175,8 @@
-else.
-define(assertNotEqual(Unexpected, Expr),
begin
- ((fun (__X) ->
+ ((fun () ->
+ __X = (Unexpected),
case (Expr) of
__X -> erlang:error({assertNotEqual,
[{module, ?MODULE},
@@ -178,7 +185,7 @@
{value, __X}]});
_ -> ok
end
- end)(Unexpected))
+ end)())
end).
-endif.
diff --git a/lib/stdlib/include/erl_bits.hrl b/lib/stdlib/include/erl_bits.hrl
index 8405a55d55..2a54587a17 100644
--- a/lib/stdlib/include/erl_bits.hrl
+++ b/lib/stdlib/include/erl_bits.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2015. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@
-type bt_unit() :: 1..256.
-record(bittype, {
- type :: bt_type(),
- unit :: bt_unit(), %% element unit
- sign :: bt_sign(),
- endian :: bt_endian()
+ type :: bt_type() | 'undefined',
+ unit :: bt_unit() | 'undefined', %% element unit
+ sign :: bt_sign() | 'undefined',
+ endian :: bt_endian() | 'undefined'
}).
-record(bitdefault, {
diff --git a/lib/stdlib/include/erl_compile.hrl b/lib/stdlib/include/erl_compile.hrl
index c5fb491308..1c45613716 100644
--- a/lib/stdlib/include/erl_compile.hrl
+++ b/lib/stdlib/include/erl_compile.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/include/ms_transform.hrl b/lib/stdlib/include/ms_transform.hrl
index f8a2d35394..0d2c19fd4e 100644
--- a/lib/stdlib/include/ms_transform.hrl
+++ b/lib/stdlib/include/ms_transform.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/include/qlc.hrl b/lib/stdlib/include/qlc.hrl
index e3513314a0..60cd92aab0 100644
--- a/lib/stdlib/include/qlc.hrl
+++ b/lib/stdlib/include/qlc.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/include/zip.hrl b/lib/stdlib/include/zip.hrl
index 5f5abf9df3..2d0ee56f87 100644
--- a/lib/stdlib/include/zip.hrl
+++ b/lib/stdlib/include/zip.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/Makefile b/lib/stdlib/src/Makefile
index 9f4a446ea0..302834f9d0 100644
--- a/lib/stdlib/src/Makefile
+++ b/lib/stdlib/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2015. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -85,6 +85,7 @@ MODULES= \
gen_event \
gen_fsm \
gen_server \
+ gen_statem \
io \
io_lib \
io_lib_format \
diff --git a/lib/stdlib/src/array.erl b/lib/stdlib/src/array.erl
index c749dd008b..d5757dda5b 100644
--- a/lib/stdlib/src/array.erl
+++ b/lib/stdlib/src/array.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/base64.erl b/lib/stdlib/src/base64.erl
index ac532f7ee0..bf259e6691 100644
--- a/lib/stdlib/src/base64.erl
+++ b/lib/stdlib/src/base64.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/beam_lib.erl b/lib/stdlib/src/beam_lib.erl
index 503a2b416f..fe9df601eb 100644
--- a/lib/stdlib/src/beam_lib.erl
+++ b/lib/stdlib/src/beam_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@
terminate/2,code_change/3]).
-export([make_crypto_key/2, get_crypto_key/1]). %Utilities used by compiler
--export_type([attrib_entry/0, compinfo_entry/0, labeled_entry/0]).
+-export_type([attrib_entry/0, compinfo_entry/0, labeled_entry/0, label/0]).
-import(lists, [append/1, delete/2, foreach/2, keysort/2,
member/2, reverse/1, sort/1, splitwith/2]).
@@ -872,7 +872,7 @@ mandatory_chunks() ->
%%% can use it.
%%% ====================================================================
--record(state, {crypto_key_f :: crypto_fun()}).
+-record(state, {crypto_key_f :: crypto_fun() | 'undefined'}).
-define(CRYPTO_KEY_SERVER, beam_lib__crypto_key_server).
@@ -904,7 +904,11 @@ anno_from_term({Tag, Forms}) when Tag =:= abstract_v1; Tag =:= abstract_v2 ->
anno_from_term(T) ->
T.
-anno_from_forms(Forms) ->
+anno_from_forms(Forms0) ->
+ %% Forms with record field types created before OTP 19.0 are
+ %% replaced by well-formed record forms holding the type
+ %% information.
+ Forms = epp:restore_typed_record_fields(Forms0),
[erl_parse:anno_from_term(Form) || Form <- Forms].
start_crypto() ->
@@ -975,9 +979,7 @@ handle_call({get_crypto_key, What}, From, #state{crypto_key_f=F}=S) ->
handle_call({crypto_key_fun, F}, {_,_} = From, S) ->
case S#state.crypto_key_f of
undefined ->
- %% Don't allow tuple funs here. (They weren't allowed before,
- %% so there is no reason to allow them now.)
- if is_function(F), is_function(F, 1) ->
+ if is_function(F, 1) ->
{Result, Fun, Reply} =
case catch F(init) of
ok ->
diff --git a/lib/stdlib/src/binary.erl b/lib/stdlib/src/binary.erl
index af00410572..ccc827ca2d 100644
--- a/lib/stdlib/src/binary.erl
+++ b/lib/stdlib/src/binary.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
-module(binary).
%%
%% Implemented in this module:
--export([split/2,split/3,replace/3,replace/4]).
+-export([replace/3,replace/4]).
-export_type([cp/0]).
@@ -34,7 +34,8 @@
decode_unsigned/2, encode_unsigned/1, encode_unsigned/2,
first/1, last/1, list_to_bin/1, longest_common_prefix/1,
longest_common_suffix/1, match/2, match/3, matches/2,
- matches/3, part/2, part/3, referenced_byte_size/1]).
+ matches/3, part/2, part/3, referenced_byte_size/1,
+ split/2, split/3]).
-spec at(Subject, Pos) -> byte() when
Subject :: binary(),
@@ -198,19 +199,13 @@ part(_, _, _) ->
referenced_byte_size(_) ->
erlang:nif_error(undef).
-%%% End of BIFs.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% split
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-spec split(Subject, Pattern) -> Parts when
Subject :: binary(),
Pattern :: binary() | [binary()] | cp(),
Parts :: [binary()].
-split(H,N) ->
- split(H,N,[]).
+split(_, _) ->
+ erlang:nif_error(undef).
-spec split(Subject, Pattern, Options) -> Parts when
Subject :: binary(),
@@ -219,53 +214,10 @@ split(H,N) ->
Option :: {scope, part()} | trim | global | trim_all,
Parts :: [binary()].
-split(Haystack,Needles,Options) ->
- try
- {Part,Global,Trim,TrimAll} =
- get_opts_split(Options,{no,false,false,false}),
- Moptlist = case Part of
- no ->
- [];
- {A,B} ->
- [{scope,{A,B}}]
- end,
- MList = if
- Global ->
- binary:matches(Haystack,Needles,Moptlist);
- true ->
- case binary:match(Haystack,Needles,Moptlist) of
- nomatch -> [];
- Match -> [Match]
- end
- end,
- do_split(Haystack,MList,0,Trim,TrimAll)
- catch
- _:_ ->
- erlang:error(badarg)
- end.
-
-do_split(H,[],N,true,_) when N >= byte_size(H) ->
- [];
-do_split(H,[],N,_,true) when N >= byte_size(H) ->
- [];
-do_split(H,[],N,_,_) ->
- [binary:part(H,{N,byte_size(H)-N})];
-do_split(H,[{A,B}|T],N,Trim,TrimAll) ->
- case binary:part(H,{N,A-N}) of
- <<>> when TrimAll == true ->
- do_split(H,T,A+B,Trim,TrimAll);
- <<>> ->
- Rest = do_split(H,T,A+B,Trim,TrimAll),
- case {Trim, Rest} of
- {true,[]} ->
- [];
- _ ->
- [<<>> | Rest]
- end;
- Oth ->
- [Oth | do_split(H,T,A+B,Trim,TrimAll)]
- end.
+split(_, _, _) ->
+ erlang:nif_error(undef).
+%%% End of BIFs.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% replace
@@ -352,19 +304,6 @@ splitat(H,N,[I|T]) ->
%% Simple helper functions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_opts_split([],{Part,Global,Trim,TrimAll}) ->
- {Part,Global,Trim,TrimAll};
-get_opts_split([{scope,{A,B}} | T],{_Part,Global,Trim,TrimAll}) ->
- get_opts_split(T,{{A,B},Global,Trim,TrimAll});
-get_opts_split([global | T],{Part,_Global,Trim,TrimAll}) ->
- get_opts_split(T,{Part,true,Trim,TrimAll});
-get_opts_split([trim | T],{Part,Global,_Trim,TrimAll}) ->
- get_opts_split(T,{Part,Global,true,TrimAll});
-get_opts_split([trim_all | T],{Part,Global,Trim,_TrimAll}) ->
- get_opts_split(T,{Part,Global,Trim,true});
-get_opts_split(_,_) ->
- throw(badopt).
-
get_opts_replace([],{Part,Global,Insert}) ->
{Part,Global,Insert};
get_opts_replace([{scope,{A,B}} | T],{_Part,Global,Insert}) ->
diff --git a/lib/stdlib/src/c.erl b/lib/stdlib/src/c.erl
index a8844d757d..ad4915eabe 100644
--- a/lib/stdlib/src/c.erl
+++ b/lib/stdlib/src/c.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/calendar.erl b/lib/stdlib/src/calendar.erl
index 074c504e00..55a0cfc9a1 100644
--- a/lib/stdlib/src/calendar.erl
+++ b/lib/stdlib/src/calendar.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/dets.erl b/lib/stdlib/src/dets.erl
index 2d037ff795..bf22949870 100644
--- a/lib/stdlib/src/dets.erl
+++ b/lib/stdlib/src/dets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1124,7 +1124,9 @@ repl({delayed_write, {Delay,Size} = C}, Defs)
Defs#open_args{delayed_write = C};
repl({estimated_no_objects, I}, Defs) ->
repl({min_no_slots, I}, Defs);
-repl({file, File}, Defs) ->
+repl({file, File}, Defs) when is_list(File) ->
+ Defs#open_args{file = File};
+repl({file, File}, Defs) when is_atom(File) ->
Defs#open_args{file = to_list(File)};
repl({keypos, P}, Defs) when is_integer(P), P > 0 ->
Defs#open_args{keypos =P};
@@ -1289,7 +1291,15 @@ init(Parent, Server) ->
open_file_loop(#head{parent = Parent, server = Server}).
open_file_loop(Head) ->
- open_file_loop(Head, 0).
+ %% The Dets server pretends the file is open before
+ %% internal_open() has been called, which means that unless the
+ %% internal_open message is applied first, other processes can
+ %% find the pid by calling dets_server:get_pid() and do things
+ %% before Head has been initialized properly.
+ receive
+ ?DETS_CALL(From, {internal_open, _Ref, _Args}=Op) ->
+ do_apply_op(Op, From, Head, 0)
+ end.
open_file_loop(Head, N) when element(1, Head#head.update_mode) =:= error ->
open_file_loop2(Head, N);
diff --git a/lib/stdlib/src/dets.hrl b/lib/stdlib/src/dets.hrl
index be51e1a89c..6ebeb96156 100644
--- a/lib/stdlib/src/dets.hrl
+++ b/lib/stdlib/src/dets.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/dets_server.erl b/lib/stdlib/src/dets_server.erl
index e3c9447c6f..b02d6ae159 100644
--- a/lib/stdlib/src/dets_server.erl
+++ b/lib/stdlib/src/dets_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/dets_sup.erl b/lib/stdlib/src/dets_sup.erl
index e0087c58b4..43609cb8a1 100644
--- a/lib/stdlib/src/dets_sup.erl
+++ b/lib/stdlib/src/dets_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/digraph_utils.erl b/lib/stdlib/src/digraph_utils.erl
index ef4c2e94fe..4aa9ae810d 100644
--- a/lib/stdlib/src/digraph_utils.erl
+++ b/lib/stdlib/src/digraph_utils.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/edlin.erl b/lib/stdlib/src/edlin.erl
index 0e9c457de2..71e8471c45 100644
--- a/lib/stdlib/src/edlin.erl
+++ b/lib/stdlib/src/edlin.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/edlin_expand.erl b/lib/stdlib/src/edlin_expand.erl
index 6dd736da4c..ec64470461 100644
--- a/lib/stdlib/src/edlin_expand.erl
+++ b/lib/stdlib/src/edlin_expand.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/epp.erl b/lib/stdlib/src/epp.erl
index d3124ac593..40eba4ad67 100644
--- a/lib/stdlib/src/epp.erl
+++ b/lib/stdlib/src/epp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -40,16 +40,26 @@
-type ifdef() :: 'ifdef' | 'ifndef' | 'else'.
--type name() :: {'atom', atom()}.
+-type name() :: atom().
-type argspec() :: 'none' %No arguments
| non_neg_integer(). %Number of arguments
+-type argnames() :: [atom()].
-type tokens() :: [erl_scan:token()].
+-type predef() :: 'undefined' | {'none', tokens()}.
+-type userdef() :: {argspec(), {argnames(), tokens()}}.
-type used() :: {name(), argspec()}.
+-type function_name_type() :: 'undefined'
+ | {atom(),non_neg_integer()}
+ | tokens().
+
+-type warning_info() :: {erl_anno:location(), module(), term()}.
+
-define(DEFAULT_ENCODING, utf8).
%% Epp state record.
--record(epp, {file :: file:io_device(), %Current file
+-record(epp, {file :: file:io_device()
+ | 'undefined', %Current file
location=1, %Current location
delta=0 :: non_neg_integer(), %Offset from Location (-file)
name="" :: file:name(), %Current file name
@@ -57,21 +67,15 @@
istk=[] :: [ifdef()], %Ifdef stack
sstk=[] :: [#epp{}], %State stack
path=[] :: [file:name()], %Include-path
- macs = dict:new() %Macros (don't care locations)
- :: dict:dict(name(), {argspec(), tokens()}),
- uses = dict:new() %Macro use structure
- :: dict:dict(name(), [{argspec(), [used()]}]),
+ macs = #{} %Macros (don't care locations)
+ :: #{name() => predef() | [userdef()]},
+ uses = #{} %Macro use structure
+ :: #{name() => [{argspec(), [used()]}]},
default_encoding = ?DEFAULT_ENCODING :: source_encoding(),
- pre_opened = false :: boolean()
+ pre_opened = false :: boolean(),
+ fname = [] :: function_name_type()
}).
-%%% Note on representation: as tokens, both {var, Location, Name} and
-%%% {atom, Location, Name} can occur as macro identifiers. However, keeping
-%%% this distinction here is done for historical reasons only: previously,
-%%% ?FOO and ?'FOO' were not the same, but now they are. Removing the
-%%% distinction in the internal representation would simplify the code
-%%% a little.
-
%% open(Options)
%% open(FileName, IncludePath)
%% open(FileName, IncludePath, PreDefMacros)
@@ -156,11 +160,13 @@ scan_erl_form(Epp) ->
epp_request(Epp, scan_erl_form).
-spec parse_erl_form(Epp) ->
- {'ok', AbsForm} | {'eof', Line} | {error, ErrorInfo} when
+ {'ok', AbsForm} | {error, ErrorInfo} |
+ {'warning',WarningInfo} | {'eof',Line} when
Epp :: epp_handle(),
AbsForm :: erl_parse:abstract_form(),
Line :: erl_anno:line(),
- ErrorInfo :: erl_scan:error_info() | erl_parse:error_info().
+ ErrorInfo :: erl_scan:error_info() | erl_parse:error_info(),
+ WarningInfo :: warning_info().
parse_erl_form(Epp) ->
case epp_request(Epp, scan_erl_form) of
@@ -211,8 +217,16 @@ format_error({include,W,F}) ->
io_lib:format("can't find include ~s \"~s\"", [W,F]);
format_error({illegal,How,What}) ->
io_lib:format("~s '-~s'", [How,What]);
+format_error({illegal_function,Macro}) ->
+ io_lib:format("?~s can only be used within a function", [Macro]);
+format_error({illegal_function_usage,Macro}) ->
+ io_lib:format("?~s must not begin a form", [Macro]);
format_error({'NYI',What}) ->
io_lib:format("not yet implemented '~s'", [What]);
+format_error({error,Term}) ->
+ io_lib:format("-error(~p).", [Term]);
+format_error({warning,Term}) ->
+ io_lib:format("-warning(~p).", [Term]);
format_error(E) -> file:format_error(E).
-spec parse_file(FileName, IncludePath, PredefMacros) ->
@@ -257,29 +271,20 @@ parse_file(Ifile, Options) ->
-spec parse_file(Epp) -> [Form] when
Epp :: epp_handle(),
- Form :: erl_parse:abstract_form() | {'error', ErrorInfo} | {'eof',Line},
+ Form :: erl_parse:abstract_form() | {'error', ErrorInfo} |
+ {'warning',WarningInfo} | {'eof',Line},
Line :: erl_anno:line(),
- ErrorInfo :: erl_scan:error_info() | erl_parse:error_info().
+ ErrorInfo :: erl_scan:error_info() | erl_parse:error_info(),
+ WarningInfo :: warning_info().
parse_file(Epp) ->
case parse_erl_form(Epp) of
{ok,Form} ->
- case Form of
- {attribute,La,record,{Record, Fields}} ->
- case normalize_typed_record_fields(Fields) of
- {typed, NewFields} ->
- [{attribute, La, record, {Record, NewFields}},
- {attribute, La, type,
- {{record, Record}, Fields, []}}
- |parse_file(Epp)];
- not_typed ->
- [Form|parse_file(Epp)]
- end;
- _ ->
- [Form|parse_file(Epp)]
- end;
+ [Form|parse_file(Epp)];
{error,E} ->
[{error,E}|parse_file(Epp)];
+ {warning,W} ->
+ [{warning,W}|parse_file(Epp)];
{eof,Location} ->
[{eof,erl_anno:new(Location)}]
end.
@@ -549,7 +554,8 @@ init_server(Pid, Name, Options, St0) ->
default_encoding=DefEncoding},
From = wait_request(St),
Anno = erl_anno:new(AtLocation),
- enter_file_reply(From, Name, Anno, AtLocation, code),
+ enter_file_reply(From, file_name(Name), Anno,
+ AtLocation, code),
wait_req_scan(St);
{error,E} ->
epp_reply(Pid, {error,E})
@@ -560,18 +566,20 @@ init_server(Pid, Name, Options, St0) ->
%% FILE, LINE, MODULE as undefined, MACHINE and MACHINE value.
predef_macros(File) ->
- Machine = list_to_atom(erlang:system_info(machine)),
- Anno = line1(),
- dict:from_list([
- {{atom,'FILE'}, {none,[{string,Anno,File}]}},
- {{atom,'LINE'}, {none,[{integer,Anno,1}]}},
- {{atom,'MODULE'}, undefined},
- {{atom,'MODULE_STRING'}, undefined},
- {{atom,'BASE_MODULE'}, undefined},
- {{atom,'BASE_MODULE_STRING'}, undefined},
- {{atom,'MACHINE'}, {none,[{atom,Anno,Machine}]}},
- {{atom,Machine}, {none,[{atom,Anno,true}]}}
- ]).
+ Machine = list_to_atom(erlang:system_info(machine)),
+ Anno = line1(),
+ Defs = [{'FILE', {none,[{string,Anno,File}]}},
+ {'FUNCTION_NAME', undefined},
+ {'FUNCTION_ARITY', undefined},
+ {'LINE', {none,[{integer,Anno,1}]}},
+ {'MODULE', undefined},
+ {'MODULE_STRING', undefined},
+ {'BASE_MODULE', undefined},
+ {'BASE_MODULE_STRING', undefined},
+ {'MACHINE', {none,[{atom,Anno,Machine}]}},
+ {Machine, {none,[{atom,Anno,true}]}}
+ ],
+ maps:from_list(Defs).
%% user_predef(PreDefMacros, Macros) ->
%% {ok,MacroDict} | {error,E}
@@ -580,28 +588,21 @@ predef_macros(File) ->
user_predef([{M,Val,redefine}|Pdm], Ms) when is_atom(M) ->
Exp = erl_parse:tokens(erl_parse:abstract(Val)),
- user_predef(Pdm, dict:store({atom,M}, {none,Exp}, Ms));
+ user_predef(Pdm, Ms#{M=>{none,Exp}});
user_predef([{M,Val}|Pdm], Ms) when is_atom(M) ->
- case dict:find({atom,M}, Ms) of
- {ok,_Defs} when is_list(_Defs) -> %% User defined macros
+ case Ms of
+ #{M:=Defs} when is_list(Defs) ->
+ %% User defined macros.
{error,{redefine,M}};
- {ok,_Def} -> %% Predefined macros
+ #{M:=_Defs} ->
+ %% Predefined macros.
{error,{redefine_predef,M}};
- error ->
+ _ ->
Exp = erl_parse:tokens(erl_parse:abstract(Val)),
- user_predef(Pdm, dict:store({atom,M}, [{none, {none,Exp}}], Ms))
+ user_predef(Pdm, Ms#{M=>[{none,{none,Exp}}]})
end;
user_predef([M|Pdm], Ms) when is_atom(M) ->
- case dict:find({atom,M}, Ms) of
- {ok,_Defs} when is_list(_Defs) -> %% User defined macros
- {error,{redefine,M}};
- {ok,_Def} -> %% Predefined macros
- {error,{redefine_predef,M}};
- error ->
- A = line1(),
- user_predef(Pdm,
- dict:store({atom,M}, [{none, {none,[{atom,A,true}]}}], Ms))
- end;
+ user_predef([{M,true}|Pdm], Ms);
user_predef([Md|_Pdm], _Ms) -> {error,{bad,Md}};
user_predef([], Ms) -> {ok,Ms}.
@@ -615,7 +616,9 @@ wait_request(St) ->
receive
{epp_request,From,scan_erl_form} -> From;
{epp_request,From,macro_defs} ->
- epp_reply(From, dict:to_list(St#epp.macs)),
+ %% Return the old format to avoid any incompability issues.
+ Defs = [{{atom,K},V} || {K,V} <- maps:to_list(St#epp.macs)],
+ epp_reply(From, Defs),
wait_request(St);
{epp_request,From,close} ->
close_file(St),
@@ -667,7 +670,8 @@ enter_file(NewName, Inc, From, St) ->
enter_file2(NewF, Pname, From, St0, AtLocation) ->
Anno = erl_anno:new(AtLocation),
enter_file_reply(From, Pname, Anno, AtLocation, code),
- Ms = dict:store({atom,'FILE'}, {none,[{string,Anno,Pname}]}, St0#epp.macs),
+ Ms0 = St0#epp.macs,
+ Ms = Ms0#{'FILE':={none,[{string,Anno,Pname}]}},
%% update the head of the include path to be the directory of the new
%% source file, so that an included file can always include other files
%% relative to its current location (this is also how C does it); note
@@ -688,7 +692,7 @@ enter_file_reply(From, Name, LocationAnno, AtLocation, Where) ->
generated -> erl_anno:set_generated(true, Anno0)
end,
Rep = {ok, [{'-',Anno},{atom,Anno,file},{'(',Anno},
- {string,Anno,file_name(Name)},{',',Anno},
+ {string,Anno,Name},{',',Anno},
{integer,Anno,get_line(LocationAnno)},{')',LocationAnno},
{dot,Anno}]},
epp_reply(From, Rep).
@@ -719,9 +723,8 @@ leave_file(From, St) ->
name2=OldName2} = OldSt,
CurrLoc = add_line(OldLoc, Delta),
Anno = erl_anno:new(CurrLoc),
- Ms = dict:store({atom,'FILE'},
- {none,[{string,Anno,OldName2}]},
- St#epp.macs),
+ Ms0 = St#epp.macs,
+ Ms = Ms0#{'FILE':={none,[{string,Anno,OldName2}]}},
NextSt = OldSt#epp{sstk=Sts,macs=Ms,uses=St#epp.uses},
enter_file_reply(From, OldName, Anno, CurrLoc, code),
case OldName2 =:= OldName of
@@ -761,6 +764,10 @@ scan_toks([{'-',_Lh},{atom,_Ld,define}=Define|Toks], From, St) ->
scan_define(Toks, Define, From, St);
scan_toks([{'-',_Lh},{atom,_Ld,undef}=Undef|Toks], From, St) ->
scan_undef(Toks, Undef, From, St);
+scan_toks([{'-',_Lh},{atom,_Ld,error}=Error|Toks], From, St) ->
+ scan_err_warn(Toks, Error, From, St);
+scan_toks([{'-',_Lh},{atom,_Ld,warning}=Warn|Toks], From, St) ->
+ scan_err_warn(Toks, Warn, From, St);
scan_toks([{'-',_Lh},{atom,_Li,include}=Inc|Toks], From, St) ->
scan_include(Toks, Inc, From, St);
scan_toks([{'-',_Lh},{atom,_Li,include_lib}=IncLib|Toks], From, St) ->
@@ -778,7 +785,7 @@ scan_toks([{'-',_Lh},{atom,_Le,elif}=Elif|Toks], From, St) ->
scan_toks([{'-',_Lh},{atom,_Le,endif}=Endif|Toks], From, St) ->
scan_endif(Toks, Endif, From, St);
scan_toks([{'-',_Lh},{atom,_Lf,file}=FileToken|Toks0], From, St) ->
- case catch expand_macros(Toks0, {St#epp.macs, St#epp.uses}) of
+ case catch expand_macros(Toks0, St) of
Toks1 when is_list(Toks1) ->
scan_file(Toks1, FileToken, From, St);
{error,ErrL,What} ->
@@ -786,7 +793,7 @@ scan_toks([{'-',_Lh},{atom,_Lf,file}=FileToken|Toks0], From, St) ->
wait_req_scan(St)
end;
scan_toks(Toks0, From, St) ->
- case catch expand_macros(Toks0, {St#epp.macs, St#epp.uses}) of
+ case catch expand_macros(Toks0, St#epp{fname=Toks0}) of
Toks1 when is_list(Toks1) ->
epp_reply(From, {ok,Toks1}),
wait_req_scan(St#epp{macs=scan_module(Toks1, St#epp.macs)});
@@ -796,91 +803,66 @@ scan_toks(Toks0, From, St) ->
end.
scan_module([{'-',_Lh},{atom,_Lm,module},{'(',_Ll}|Ts], Ms) ->
- scan_module_1(Ts, [], Ms);
+ scan_module_1(Ts, Ms);
scan_module([{'-',_Lh},{atom,_Lm,extends},{'(',_Ll}|Ts], Ms) ->
- scan_extends(Ts, [], Ms);
+ scan_extends(Ts, Ms);
scan_module(_Ts, Ms) -> Ms.
-scan_module_1([{atom,_,_}=A,{',',L}|Ts], As, Ms) ->
+scan_module_1([{atom,_,_}=A,{',',L}|Ts], Ms) ->
%% Parameterized modules.
- scan_module_1([A,{')',L}|Ts], As, Ms);
-scan_module_1([{atom,Ln,A},{')',_Lr}|_Ts], As, Ms0) ->
- Mod = lists:concat(lists:reverse([A|As])),
- Ms = dict:store({atom,'MODULE'},
- {none,[{atom,Ln,list_to_atom(Mod)}]}, Ms0),
- dict:store({atom,'MODULE_STRING'}, {none,[{string,Ln,Mod}]}, Ms);
-scan_module_1([{atom,_Ln,A},{'.',_Lr}|Ts], As, Ms) ->
- scan_module_1(Ts, [".",A|As], Ms);
-scan_module_1([{'.',_Lr}|Ts], As, Ms) ->
- scan_module_1(Ts, As, Ms);
-scan_module_1(_Ts, _As, Ms) -> Ms.
-
-scan_extends([{atom,Ln,A},{')',_Lr}|_Ts], As, Ms0) ->
- Mod = lists:concat(lists:reverse([A|As])),
- Ms = dict:store({atom,'BASE_MODULE'},
- {none,[{atom,Ln,list_to_atom(Mod)}]}, Ms0),
- dict:store({atom,'BASE_MODULE_STRING'}, {none,[{string,Ln,Mod}]}, Ms);
-scan_extends([{atom,_Ln,A},{'.',_Lr}|Ts], As, Ms) ->
- scan_extends(Ts, [".",A|As], Ms);
-scan_extends([{'.',_Lr}|Ts], As, Ms) ->
- scan_extends(Ts, As, Ms);
-scan_extends(_Ts, _As, Ms) -> Ms.
+ scan_module_1([A,{')',L}|Ts], Ms);
+scan_module_1([{atom,Ln,A}=ModAtom,{')',_Lr}|_Ts], Ms0) ->
+ ModString = atom_to_list(A),
+ Ms = Ms0#{'MODULE':={none,[ModAtom]}},
+ Ms#{'MODULE_STRING':={none,[{string,Ln,ModString}]}};
+scan_module_1(_Ts, Ms) -> Ms.
+
+scan_extends([{atom,Ln,A}=ModAtom,{')',_Lr}|_Ts], Ms0) ->
+ ModString = atom_to_list(A),
+ Ms = Ms0#{'BASE_MODULE':={none,[ModAtom]}},
+ Ms#{'BASE_MODULE_STRING':={none,[{string,Ln,ModString}]}};
+scan_extends(_Ts, Ms) -> Ms.
+
+scan_err_warn([{'(',_}|_]=Toks0, {atom,_,Tag}=Token, From, St) ->
+ try expand_macros(Toks0, St) of
+ Toks when is_list(Toks) ->
+ case erl_parse:parse_term(Toks) of
+ {ok,Term} ->
+ epp_reply(From, {Tag,{loc(Token),epp,{Tag,Term}}});
+ {error,_} ->
+ epp_reply(From, {error,{loc(Token),epp,{bad,Tag}}})
+ end
+ catch
+ _:_ ->
+ epp_reply(From, {error,{loc(Token),epp,{bad,Tag}}})
+ end,
+ wait_req_scan(St);
+scan_err_warn(_Toks, {atom,_,Tag}=Token, From, St) ->
+ epp_reply(From, {error,{loc(Token),epp,{bad,Tag}}}),
+ wait_req_scan(St).
%% scan_define(Tokens, DefineToken, From, EppState)
-scan_define([{'(',_Lp},{Type,_Lm,M}=Mac,{',',_}=Comma|Toks], _Def, From, St)
+scan_define([{'(',_Lp},{Type,_Lm,_}=Mac|Toks], Def, From, St)
when Type =:= atom; Type =:= var ->
+ scan_define_1(Toks, Mac, Def, From, St);
+scan_define(_Toks, Def, From, St) ->
+ epp_reply(From, {error,{loc(Def),epp,{bad,define}}}),
+ wait_req_scan(St).
+
+scan_define_1([{',',_}=Comma|Toks], Mac,_Def, From, St) ->
case catch macro_expansion(Toks, Comma) of
Expansion when is_list(Expansion) ->
- case dict:find({atom,M}, St#epp.macs) of
- {ok, Defs} when is_list(Defs) ->
- %% User defined macros: can be overloaded
- case proplists:is_defined(none, Defs) of
- true ->
- epp_reply(From, {error,{loc(Mac),epp,{redefine,M}}}),
- wait_req_scan(St);
- false ->
- scan_define_cont(From, St,
- {atom, M},
- {none, {none,Expansion}})
- end;
- {ok, _PreDef} ->
- %% Predefined macros: cannot be overloaded
- epp_reply(From, {error,{loc(Mac),epp,{redefine_predef,M}}}),
- wait_req_scan(St);
- error ->
- scan_define_cont(From, St,
- {atom, M},
- {none, {none,Expansion}})
- end;
+ scan_define_2(none, {none,Expansion}, Mac, From, St);
{error,ErrL,What} ->
epp_reply(From, {error,{ErrL,epp,What}}),
wait_req_scan(St)
end;
-scan_define([{'(',_Lp},{Type,_Lm,M}=Mac,{'(',_Lc}|Toks], Def, From, St)
- when Type =:= atom; Type =:= var ->
+scan_define_1([{'(',_Lc}|Toks], Mac, Def, From, St) ->
case catch macro_pars(Toks, []) of
- {ok, {As,Me}} ->
+ {ok,{As,_}=MacroDef} ->
Len = length(As),
- case dict:find({atom,M}, St#epp.macs) of
- {ok, Defs} when is_list(Defs) ->
- %% User defined macros: can be overloaded
- case proplists:is_defined(Len, Defs) of
- true ->
- epp_reply(From,{error,{loc(Mac),epp,{redefine,M}}}),
- wait_req_scan(St);
- false ->
- scan_define_cont(From, St, {atom, M},
- {Len, {As, Me}})
- end;
- {ok, _PreDef} ->
- %% Predefined macros: cannot be overloaded
- %% (There are currently no predefined F(...) macros.)
- epp_reply(From, {error,{loc(Mac),epp,{redefine_predef,M}}}),
- wait_req_scan(St);
- error ->
- scan_define_cont(From, St, {atom, M}, {Len, {As, Me}})
- end;
+ scan_define_2(Len, MacroDef, Mac, From, St);
{error,ErrL,What} ->
epp_reply(From, {error,{ErrL,epp,What}}),
wait_req_scan(St);
@@ -888,10 +870,29 @@ scan_define([{'(',_Lp},{Type,_Lm,M}=Mac,{'(',_Lc}|Toks], Def, From, St)
epp_reply(From, {error,{loc(Def),epp,{bad,define}}}),
wait_req_scan(St)
end;
-scan_define(_Toks, Def, From, St) ->
+scan_define_1(_Toks, _Mac, Def, From, St) ->
epp_reply(From, {error,{loc(Def),epp,{bad,define}}}),
wait_req_scan(St).
+scan_define_2(Arity, Def, {_,_,Key}=Mac, From, #epp{macs=Ms}=St) ->
+ case Ms of
+ #{Key:=Defs} when is_list(Defs) ->
+ %% User defined macros: can be overloaded
+ case proplists:is_defined(Arity, Defs) of
+ true ->
+ epp_reply(From, {error,{loc(Mac),epp,{redefine,Key}}}),
+ wait_req_scan(St);
+ false ->
+ scan_define_cont(From, St, Key, Defs, Arity, Def)
+ end;
+ #{Key:=_} ->
+ %% Predefined macros: cannot be overloaded
+ epp_reply(From, {error,{loc(Mac),epp,{redefine_predef,Key}}}),
+ wait_req_scan(St);
+ _ ->
+ scan_define_cont(From, St, Key, [], Arity, Def)
+ end.
+
%%% Detection of circular macro expansions (which would either keep
%%% the compiler looping forever, or run out of memory):
%%% When a macro is defined, we store the names of other macros it
@@ -901,11 +902,17 @@ scan_define(_Toks, Def, From, St) ->
%%% the information from St#epp.uses is traversed, and if a circularity
%%% is detected, an error message is thrown.
-scan_define_cont(F, St, M, {Arity, Def}) ->
- Ms = dict:append_list(M, [{Arity, Def}], St#epp.macs),
- try dict:append_list(M, [{Arity, macro_uses(Def)}], St#epp.uses) of
+scan_define_cont(F, #epp{macs=Ms0}=St, M, Defs, Arity, Def) ->
+ Ms = Ms0#{M=>[{Arity,Def}|Defs]},
+ try macro_uses(Def) of
U ->
- scan_toks(F, St#epp{uses=U, macs=Ms})
+ Uses0 = St#epp.uses,
+ Val = [{Arity,U}|case Uses0 of
+ #{M:=UseList} -> UseList;
+ _ -> []
+ end],
+ Uses = Uses0#{M=>Val},
+ scan_toks(F, St#epp{uses=Uses,macs=Ms})
catch
{error, Line, Reason} ->
epp_reply(F, {error,{Line,epp,Reason}}),
@@ -923,23 +930,23 @@ macro_ref([{'?', _}, {'?', _} | Rest]) ->
macro_ref([{'?', _}, {atom, _, A}=Atom | Rest]) ->
Lm = loc(Atom),
Arity = count_args(Rest, Lm, A),
- [{{atom, A}, Arity} | macro_ref(Rest)];
+ [{A,Arity} | macro_ref(Rest)];
macro_ref([{'?', _}, {var, _, A}=Var | Rest]) ->
Lm = loc(Var),
Arity = count_args(Rest, Lm, A),
- [{{atom, A}, Arity} | macro_ref(Rest)];
+ [{A,Arity} | macro_ref(Rest)];
macro_ref([_Token | Rest]) ->
macro_ref(Rest).
%% scan_undef(Tokens, UndefToken, From, EppState)
scan_undef([{'(',_Llp},{atom,_Lm,M},{')',_Lrp},{dot,_Ld}], _Undef, From, St) ->
- Macs = dict:erase({atom,M}, St#epp.macs),
- Uses = dict:erase({atom,M}, St#epp.uses),
+ Macs = maps:remove(M, St#epp.macs),
+ Uses = maps:remove(M, St#epp.uses),
scan_toks(From, St#epp{macs=Macs, uses=Uses});
scan_undef([{'(',_Llp},{var,_Lm,M},{')',_Lrp},{dot,_Ld}], _Undef, From,St) ->
- Macs = dict:erase({atom,M}, St#epp.macs),
- Uses = dict:erase({atom,M}, St#epp.uses),
+ Macs = maps:remove(M, St#epp.macs),
+ Uses = maps:remove(M, St#epp.uses),
scan_toks(From, St#epp{macs=Macs, uses=Uses});
scan_undef(_Toks, Undef, From, St) ->
epp_reply(From, {error,{loc(Undef),epp,{bad,undef}}}),
@@ -947,11 +954,15 @@ scan_undef(_Toks, Undef, From, St) ->
%% scan_include(Tokens, IncludeToken, From, St)
-scan_include([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}], Inc,
- From, St) ->
+scan_include(Tokens0, Inc, From, St) ->
+ Tokens = coalesce_strings(Tokens0),
+ scan_include1(Tokens, Inc, From, St).
+
+scan_include1([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}], Inc,
+ From, St) ->
NewName = expand_var(NewName0),
enter_file(NewName, Inc, From, St);
-scan_include(_Toks, Inc, From, St) ->
+scan_include1(_Toks, Inc, From, St) ->
epp_reply(From, {error,{loc(Inc),epp,{bad,include}}}),
wait_req_scan(St).
@@ -960,29 +971,38 @@ scan_include(_Toks, Inc, From, St) ->
%% normal search path, if not we assume that the first directory name
%% is a library name, find its true directory and try with that.
-find_lib_dir(NewName) ->
- [Lib | Rest] = filename:split(NewName),
- {code:lib_dir(list_to_atom(Lib)), Rest}.
+expand_lib_dir(Name) ->
+ try
+ [App|Path] = filename:split(Name),
+ LibDir = code:lib_dir(list_to_atom(App)),
+ {ok,fname_join([LibDir|Path])}
+ catch
+ _:_ ->
+ error
+ end.
+
+scan_include_lib(Tokens0, Inc, From, St) ->
+ Tokens = coalesce_strings(Tokens0),
+ scan_include_lib1(Tokens, Inc, From, St).
-scan_include_lib([{'(',_Llp},{string,_Lf,_NewName0},{')',_Lrp},{dot,_Ld}],
- Inc, From, St)
+scan_include_lib1([{'(',_Llp},{string,_Lf,_NewName0},{')',_Lrp},{dot,_Ld}],
+ Inc, From, St)
when length(St#epp.sstk) >= 8 ->
epp_reply(From, {error,{loc(Inc),epp,{depth,"include_lib"}}}),
wait_req_scan(St);
-scan_include_lib([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}],
- Inc, From, St) ->
+scan_include_lib1([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}],
+ Inc, From, St) ->
NewName = expand_var(NewName0),
Loc = start_loc(St#epp.location),
case file:path_open(St#epp.path, NewName, [read]) of
{ok,NewF,Pname} ->
wait_req_scan(enter_file2(NewF, Pname, From, St, Loc));
{error,_E1} ->
- case catch find_lib_dir(NewName) of
- {LibDir, Rest} when is_list(LibDir) ->
- LibName = fname_join([LibDir | Rest]),
- case file:open(LibName, [read]) of
+ case expand_lib_dir(NewName) of
+ {ok,Header} ->
+ case file:open(Header, [read]) of
{ok,NewF} ->
- wait_req_scan(enter_file2(NewF, LibName, From,
+ wait_req_scan(enter_file2(NewF, Header, From,
St, Loc));
{error,_E2} ->
epp_reply(From,
@@ -990,13 +1010,13 @@ scan_include_lib([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}],
{include,lib,NewName}}}),
wait_req_scan(St)
end;
- _Error ->
+ error ->
epp_reply(From, {error,{loc(Inc),epp,
{include,lib,NewName}}}),
wait_req_scan(St)
end
end;
-scan_include_lib(_Toks, Inc, From, St) ->
+scan_include_lib1(_Toks, Inc, From, St) ->
epp_reply(From, {error,{loc(Inc),epp,{bad,include_lib}}}),
wait_req_scan(St).
@@ -1006,17 +1026,17 @@ scan_include_lib(_Toks, Inc, From, St) ->
%% Report a badly formed if[n]def test and then treat as undefined macro.
scan_ifdef([{'(',_Llp},{atom,_Lm,M},{')',_Lrp},{dot,_Ld}], _IfD, From, St) ->
- case dict:find({atom,M}, St#epp.macs) of
- {ok,_Def} ->
+ case St#epp.macs of
+ #{M:=_Def} ->
scan_toks(From, St#epp{istk=[ifdef|St#epp.istk]});
- error ->
+ _ ->
skip_toks(From, St, [ifdef])
end;
scan_ifdef([{'(',_Llp},{var,_Lm,M},{')',_Lrp},{dot,_Ld}], _IfD, From, St) ->
- case dict:find({atom,M}, St#epp.macs) of
- {ok,_Def} ->
+ case St#epp.macs of
+ #{M:=_Def} ->
scan_toks(From, St#epp{istk=[ifdef|St#epp.istk]});
- error ->
+ _ ->
skip_toks(From, St, [ifdef])
end;
scan_ifdef(_Toks, IfDef, From, St) ->
@@ -1024,17 +1044,17 @@ scan_ifdef(_Toks, IfDef, From, St) ->
wait_req_skip(St, [ifdef]).
scan_ifndef([{'(',_Llp},{atom,_Lm,M},{')',_Lrp},{dot,_Ld}], _IfnD, From, St) ->
- case dict:find({atom,M}, St#epp.macs) of
- {ok,_Def} ->
+ case St#epp.macs of
+ #{M:=_Def} ->
skip_toks(From, St, [ifndef]);
- error ->
+ _ ->
scan_toks(From, St#epp{istk=[ifndef|St#epp.istk]})
end;
scan_ifndef([{'(',_Llp},{var,_Lm,M},{')',_Lrp},{dot,_Ld}], _IfnD, From, St) ->
- case dict:find({atom,M}, St#epp.macs) of
- {ok,_Def} ->
+ case St#epp.macs of
+ #{M:=_Def} ->
skip_toks(From, St, [ifndef]);
- error ->
+ _ ->
scan_toks(From, St#epp{istk=[ifndef|St#epp.istk]})
end;
scan_ifndef(_Toks, IfnDef, From, St) ->
@@ -1098,16 +1118,21 @@ scan_endif(_Toks, Endif, From, St) ->
%% Set the current file and line to the given file and line.
%% Note that the line of the attribute itself is kept.
-scan_file([{'(',_Llp},{string,_Ls,Name},{',',_Lc},{integer,_Li,Ln},{')',_Lrp},
- {dot,_Ld}], Tf, From, St) ->
+scan_file(Tokens0, Tf, From, St) ->
+ Tokens = coalesce_strings(Tokens0),
+ scan_file1(Tokens, Tf, From, St).
+
+scan_file1([{'(',_Llp},{string,_Ls,Name},{',',_Lc},{integer,_Li,Ln},{')',_Lrp},
+ {dot,_Ld}], Tf, From, St) ->
Anno = erl_anno:new(Ln),
enter_file_reply(From, Name, Anno, loc(Tf), generated),
- Ms = dict:store({atom,'FILE'}, {none,[{string,line1(),Name}]}, St#epp.macs),
+ Ms0 = St#epp.macs,
+ Ms = Ms0#{'FILE':={none,[{string,line1(),Name}]}},
Locf = loc(Tf),
NewLoc = new_location(Ln, St#epp.location, Locf),
Delta = get_line(element(2, Tf))-Ln + St#epp.delta,
wait_req_scan(St#epp{name2=Name,location=NewLoc,delta=Delta,macs=Ms});
-scan_file(_Toks, Tf, From, St) ->
+scan_file1(_Toks, Tf, From, St) ->
epp_reply(From, {error,{loc(Tf),epp,{bad,file}}}),
wait_req_scan(St).
@@ -1185,45 +1210,47 @@ macro_expansion([T|Ts], _Anno0) ->
[T|macro_expansion(Ts, T)];
macro_expansion([], Anno0) -> throw({error,loc(Anno0),premature_end}).
-%% expand_macros(Tokens, Macros)
+%% expand_macros(Tokens, St)
%% expand_macro(Tokens, MacroToken, RestTokens)
%% Expand the macros in a list of tokens, making sure that an expansion
%% gets the same location as the macro call.
-expand_macros(Type, MacT, M, Toks, Ms0) ->
- %% (Type will always be 'atom')
- {Ms, U} = Ms0,
+expand_macros(MacT, M, Toks, St) ->
+ #epp{macs=Ms,uses=U} = St,
Lm = loc(MacT),
Tinfo = element(2, MacT),
- case expand_macro1(Type, Lm, M, Toks, Ms) of
+ case expand_macro1(Lm, M, Toks, Ms) of
{ok,{none,Exp}} ->
- check_uses([{{Type,M}, none}], [], U, Lm),
- Toks1 = expand_macros(expand_macro(Exp, Tinfo, [], dict:new()), Ms0),
- expand_macros(Toks1++Toks, Ms0);
+ check_uses([{M,none}], [], U, Lm),
+ Toks1 = expand_macros(expand_macro(Exp, Tinfo, [], #{}), St),
+ expand_macros(Toks1++Toks, St);
{ok,{As,Exp}} ->
- check_uses([{{Type,M}, length(As)}], [], U, Lm),
- {Bs,Toks1} = bind_args(Toks, Lm, M, As, dict:new()),
- expand_macros(expand_macro(Exp, Tinfo, Toks1, Bs), Ms0)
+ check_uses([{M,length(As)}], [], U, Lm),
+ {Bs,Toks1} = bind_args(Toks, Lm, M, As, #{}),
+ expand_macros(expand_macro(Exp, Tinfo, Toks1, Bs), St)
end.
-expand_macro1(Type, Lm, M, Toks, Ms) ->
+expand_macro1(Lm, M, Toks, Ms) ->
Arity = count_args(Toks, Lm, M),
- case dict:find({Type,M}, Ms) of
- error -> %% macro not found
+ case Ms of
+ #{M:=undefined} ->
+ %% Predefined macro without definition.
throw({error,Lm,{undefined,M,Arity}});
- {ok, undefined} -> %% Predefined macro without definition
- throw({error,Lm,{undefined,M,Arity}});
- {ok, [{none, Def}]} ->
- {ok, Def};
- {ok, Defs} when is_list(Defs) ->
- case proplists:get_value(Arity, Defs) of
+ #{M:=[{none,Def}]} ->
+ {ok,Def};
+ #{M:=Defs} when is_list(Defs) ->
+ case proplists:get_value(Arity, Defs) of
undefined ->
throw({error,Lm,{mismatch,M}});
Def ->
- {ok, Def}
+ {ok,Def}
end;
- {ok, PreDef} -> %% Predefined macro
- {ok, PreDef}
+ #{M:=PreDef} ->
+ %% Predefined macro.
+ {ok,PreDef};
+ _ ->
+ %% Macro not found.
+ throw({error,Lm,{undefined,M,Arity}})
end.
check_uses([], _Anc, _U, _Lm) ->
@@ -1231,7 +1258,7 @@ check_uses([], _Anc, _U, _Lm) ->
check_uses([M|Rest], Anc, U, Lm) ->
case lists:member(M, Anc) of
true ->
- {{_, Name},Arity} = M,
+ {Name,Arity} = M,
throw({error,Lm,{circular,Name,Arity}});
false ->
L = get_macro_uses(M, U),
@@ -1240,25 +1267,41 @@ check_uses([M|Rest], Anc, U, Lm) ->
end.
get_macro_uses({M,Arity}, U) ->
- case dict:find(M, U) of
- error ->
- [];
- {ok, L} ->
- proplists:get_value(Arity, L, proplists:get_value(none, L, []))
+ case U of
+ #{M:=L} ->
+ proplists:get_value(Arity, L, proplists:get_value(none, L, []));
+ _ ->
+ []
end.
%% Macro expansion
%% Note: io:scan_erl_form() does not return comments or white spaces.
-expand_macros([{'?',_Lq},{atom,_Lm,M}=MacT|Toks], Ms) ->
- expand_macros(atom, MacT, M, Toks, Ms);
+expand_macros([{'?',_Lq},{atom,_Lm,M}=MacT|Toks], St) ->
+ expand_macros(MacT, M, Toks, St);
%% Special macros
-expand_macros([{'?',_Lq},{var,Lm,'LINE'}=Tok|Toks], Ms) ->
+expand_macros([{'?',_Lq},{var,Lm,'FUNCTION_NAME'}=Token|Toks], St0) ->
+ St = update_fun_name(Token, St0),
+ case St#epp.fname of
+ undefined ->
+ [{'?',_Lq},Token];
+ {Name,_} ->
+ [{atom,Lm,Name}]
+ end ++ expand_macros(Toks, St);
+expand_macros([{'?',_Lq},{var,Lm,'FUNCTION_ARITY'}=Token|Toks], St0) ->
+ St = update_fun_name(Token, St0),
+ case St#epp.fname of
+ undefined ->
+ [{'?',_Lq},Token];
+ {_,Arity} ->
+ [{integer,Lm,Arity}]
+ end ++ expand_macros(Toks, St);
+expand_macros([{'?',_Lq},{var,Lm,'LINE'}=Tok|Toks], St) ->
Line = erl_scan:line(Tok),
- [{integer,Lm,Line}|expand_macros(Toks, Ms)];
-expand_macros([{'?',_Lq},{var,_Lm,M}=MacT|Toks], Ms) ->
- expand_macros(atom, MacT, M, Toks, Ms);
+ [{integer,Lm,Line}|expand_macros(Toks, St)];
+expand_macros([{'?',_Lq},{var,_Lm,M}=MacT|Toks], St) ->
+ expand_macros(MacT, M, Toks, St);
%% Illegal macros
-expand_macros([{'?',_Lq},Token|_Toks], _Ms) ->
+expand_macros([{'?',_Lq},Token|_Toks], _St) ->
T = case erl_scan:text(Token) of
Text when is_list(Text) ->
Text;
@@ -1267,9 +1310,9 @@ expand_macros([{'?',_Lq},Token|_Toks], _Ms) ->
io_lib:write(Symbol)
end,
throw({error,loc(Token),{call,[$?|T]}});
-expand_macros([T|Ts], Ms) ->
- [T|expand_macros(Ts, Ms)];
-expand_macros([], _Ms) -> [].
+expand_macros([T|Ts], St) ->
+ [T|expand_macros(Ts, St)];
+expand_macros([], _St) -> [].
%% bind_args(Tokens, MacroLocation, MacroName, ArgumentVars, Bindings)
%% Collect the arguments to a macro call.
@@ -1295,7 +1338,7 @@ macro_args(_Toks, Lm, M, _As, _Bs) ->
store_arg(L, M, _A, [], _Bs) ->
throw({error,L,{mismatch,M}});
store_arg(_L, _M, A, Arg, Bs) ->
- dict:store(A, Arg, Bs).
+ Bs#{A=>Arg}.
%% count_args(Tokens, MacroLine, MacroName)
%% Count the number of arguments in a macro call.
@@ -1368,19 +1411,17 @@ macro_arg([], _E, Arg) ->
%% and then the macro arguments, i.e. simulate textual expansion.
expand_macro([{var,_Lv,V}|Ts], L, Rest, Bs) ->
- case dict:find(V, Bs) of
- {ok,Val} ->
- %% lists:append(Val, expand_macro(Ts, L, Rest, Bs));
+ case Bs of
+ #{V:=Val} ->
expand_arg(Val, Ts, L, Rest, Bs);
- error ->
+ _ ->
[{var,L,V}|expand_macro(Ts, L, Rest, Bs)]
end;
expand_macro([{'?', _}, {'?', _}, {var,_Lv,V}|Ts], L, Rest, Bs) ->
- case dict:find(V, Bs) of
- {ok,Val} ->
- %% lists:append(Val, expand_macro(Ts, L, Rest, Bs));
+ case Bs of
+ #{V:=Val} ->
expand_arg(stringify(Val, L), Ts, L, Rest, Bs);
- error ->
+ _ ->
[{var,L,V}|expand_macro(Ts, L, Rest, Bs)]
end;
expand_macro([T|Ts], L, Rest, Bs) ->
@@ -1394,6 +1435,93 @@ expand_arg([A|As], Ts, _L, Rest, Bs) ->
expand_arg([], Ts, L, Rest, Bs) ->
expand_macro(Ts, L, Rest, Bs).
+%%%
+%%% Here follows support for the ?FUNCTION_NAME and ?FUNCTION_ARITY
+%%% macros. Since the parser has not been run yet, we don't know the
+%%% name and arity of the current function. Therefore, we will need to
+%%% scan the beginning of the current form to extract the name and
+%%% arity of the function.
+%%%
+
+update_fun_name(Token, #epp{fname=Toks0}=St) when is_list(Toks0) ->
+ %% ?FUNCTION_NAME or ?FUNCTION_ARITY is used for the first time in
+ %% a function. First expand macros (except ?FUNCTION_NAME and
+ %% ?FUNCTION_ARITY) in the form.
+
+ Toks1 = (catch expand_macros(Toks0, St#epp{fname=undefined})),
+
+ %% Now extract the name and arity from the stream of tokens, and store
+ %% the result in the #epp{} record so we don't have to do it
+ %% again.
+
+ case Toks1 of
+ [{atom,_,Name},{'(',_}|Toks] ->
+ %% This is the beginning of a function definition.
+ %% Scan the token stream up to the matching right
+ %% parenthesis and count the number of arguments.
+ FA = update_fun_name_1(Toks, 1, {Name,0}, St),
+ St#epp{fname=FA};
+ [{'?',_}|_] ->
+ %% ?FUNCTION_NAME/?FUNCTION_ARITY used at the beginning
+ %% of a form. Does not make sense.
+ {var,_,Macro} = Token,
+ throw({error,loc(Token),{illegal_function_usage,Macro}});
+ _ when is_list(Toks1) ->
+ %% Not the beginning of a function (an attribute or a
+ %% syntax error).
+ {var,_,Macro} = Token,
+ throw({error,loc(Token),{illegal_function,Macro}});
+ _ ->
+ %% A macro expansion error. Return a dummy value and
+ %% let the caller notice and handle the error.
+ St#epp{fname={'_',0}}
+ end;
+update_fun_name(_Token, St) ->
+ St.
+
+update_fun_name_1([Tok|Toks], L, FA, St) ->
+ case classify_token(Tok) of
+ comma ->
+ if
+ L =:= 1 ->
+ {Name,Arity} = FA,
+ update_fun_name_1(Toks, L, {Name,Arity+1}, St);
+ true ->
+ update_fun_name_1(Toks, L, FA, St)
+ end;
+ left ->
+ update_fun_name_1(Toks, L+1, FA, St);
+ right when L =:= 1 ->
+ FA;
+ right ->
+ update_fun_name_1(Toks, L-1, FA, St);
+ other ->
+ case FA of
+ {Name,0} ->
+ update_fun_name_1(Toks, L, {Name,1}, St);
+ {_,_} ->
+ update_fun_name_1(Toks, L, FA, St)
+ end
+ end;
+update_fun_name_1([], _, FA, _) ->
+ %% Syntax error, but never mind.
+ FA.
+
+classify_token({C,_}) -> classify_token_1(C);
+classify_token(_) -> other.
+
+classify_token_1(',') -> comma;
+classify_token_1('(') -> left;
+classify_token_1('{') -> left;
+classify_token_1('[') -> left;
+classify_token_1('<<') -> left;
+classify_token_1(')') -> right;
+classify_token_1('}') -> right;
+classify_token_1(']') -> right;
+classify_token_1('>>') -> right;
+classify_token_1(_) -> other.
+
+
%%% stringify(Ts, L) returns a list of one token: a string which when
%%% tokenized would yield the token list Ts.
@@ -1421,6 +1549,18 @@ stringify(Ts, L) ->
[$\s | S] = lists:flatten(stringify1(Ts)),
[{string, L, S}].
+coalesce_strings([{string,A,S} | Tokens]) ->
+ coalesce_strings(Tokens, A, [S]);
+coalesce_strings([T | Tokens]) ->
+ [T | coalesce_strings(Tokens)];
+coalesce_strings([]) ->
+ [].
+
+coalesce_strings([{string,_,S}|Tokens], A, S0) ->
+ coalesce_strings(Tokens, A, [S | S0]);
+coalesce_strings(Tokens, A, S) ->
+ [{string,A,lists:append(lists:reverse(S))} | coalesce_strings(Tokens)].
+
%% epp_request(Epp)
%% epp_request(Epp, Request)
%% epp_reply(From, Reply)
diff --git a/lib/stdlib/src/erl_anno.erl b/lib/stdlib/src/erl_anno.erl
index 143318aa55..d32c34dabd 100644
--- a/lib/stdlib/src/erl_anno.erl
+++ b/lib/stdlib/src/erl_anno.erl
@@ -33,7 +33,7 @@
-export_type([anno_term/0]).
--define(LN(L), is_integer(L)).
+-define(LN(L), is_integer(L), L >= 0).
-define(COL(C), (is_integer(C) andalso C >= 1)).
%% Location.
@@ -52,13 +52,13 @@
| {'record', record()}
| {'text', string()}.
--type anno() :: location() | [annotation(), ...].
+-opaque anno() :: location() | [annotation(), ...].
-type anno_term() :: term().
-type column() :: pos_integer().
-type generated() :: boolean().
-type filename() :: file:filename_all().
--type line() :: integer().
+-type line() :: non_neg_integer().
-type location() :: line() | {line(), column()}.
-type record() :: boolean().
-type text() :: string().
@@ -90,9 +90,13 @@ to_term(Anno) ->
-ifdef(DEBUG).
from_term(Term) when is_list(Term) ->
Term;
+from_term(Line) when is_integer(Line), Line < 0 -> % Before OTP 19
+ set_generated(true, new(-Line));
from_term(Term) ->
[{location, Term}].
-else.
+from_term(Line) when is_integer(Line), Line < 0 -> % Before OTP 19
+ set_generated(true, new(-Line));
from_term(Term) ->
Term.
-endif.
@@ -198,18 +202,11 @@ file(Anno) ->
Anno :: anno().
generated(Line) when ?ALINE(Line) ->
- Line =< 0;
+ false;
generated({Line, Column}) when ?ALINE(Line), ?ACOLUMN(Column) ->
- Line =< 0;
+ false;
generated(Anno) ->
- _ = anno_info(Anno, generated, false),
- {location, Location} = lists:keyfind(location, 1, Anno),
- case Location of
- {Line, _Column} ->
- Line =< 0;
- Line ->
- Line =< 0
- end.
+ anno_info(Anno, generated, false).
-spec line(Anno) -> line() when
Anno :: anno().
@@ -226,18 +223,11 @@ line(Anno) ->
Anno :: anno().
location(Line) when ?ALINE(Line) ->
- abs(Line);
-location({Line, Column}) when ?ALINE(Line), ?ACOLUMN(Column) ->
- {abs(Line), Column};
+ Line;
+location({Line, Column}=Location) when ?ALINE(Line), ?ACOLUMN(Column) ->
+ Location;
location(Anno) ->
- case anno_info(Anno, location) of
- Line when Line < 0 ->
- -Line;
- {Line, Column} when Line < 0 ->
- {-Line, Column};
- Location ->
- Location
- end.
+ anno_info(Anno, location).
-spec record(Anno) -> record() when
Anno :: anno().
@@ -270,31 +260,8 @@ set_file(File, Anno) ->
Generated :: generated(),
Anno :: anno().
-set_generated(true, Line) when ?ALINE(Line) ->
- -abs(Line);
-set_generated(false, Line) when ?ALINE(Line) ->
- abs(Line);
-set_generated(true, {Line, Column}) when ?ALINE(Line),
- ?ACOLUMN(Column) ->
- {-abs(Line),Column};
-set_generated(false, {Line, Column}) when ?ALINE(Line),
- ?ACOLUMN(Column) ->
- {abs(Line),Column};
set_generated(Generated, Anno) ->
- _ = set(generated, Generated, Anno),
- {location, Location} = lists:keyfind(location, 1, Anno),
- NewLocation =
- case Location of
- {Line, Column} when Generated ->
- {-abs(Line), Column};
- {Line, Column} when not Generated ->
- {abs(Line), Column};
- Line when Generated ->
- -abs(Line);
- Line when not Generated ->
- abs(Line)
- end,
- lists:keyreplace(location, 1, Anno, {location, NewLocation}).
+ set(generated, Generated, Anno).
-spec set_line(Line, Anno) -> Anno when
Line :: line(),
@@ -313,38 +280,17 @@ set_line(Line, Anno) ->
Anno :: anno().
set_location(Line, L) when ?ALINE(L), ?LLINE(Line) ->
- new_location(fix_line(Line, L));
+ new_location(Line);
set_location(Line, {L, Column}) when ?ALINE(L), ?ACOLUMN(Column),
?LLINE(Line) ->
- new_location(fix_line(Line, L));
+ new_location(Line);
set_location({L, C}=Loc, Line) when ?ALINE(Line), ?LLINE(L), ?LCOLUMN(C) ->
- new_location(fix_location(Loc, Line));
+ new_location(Loc);
set_location({L, C}=Loc, {Line, Column}) when ?ALINE(Line), ?ACOLUMN(Column),
?LLINE(L), ?LCOLUMN(C) ->
- new_location(fix_location(Loc, Line));
+ new_location(Loc);
set_location(Location, Anno) ->
- _ = set(location, Location, Anno),
- {location, OldLocation} = lists:keyfind(location, 1, Anno),
- NewLocation =
- case {Location, OldLocation} of
- {{_Line, _Column}=Loc, {L, _C}} ->
- fix_location(Loc, L);
- {Line, {L, _C}} ->
- fix_line(Line, L);
- {{_Line, _Column}=Loc, L} ->
- fix_location(Loc, L);
- {Line, L} ->
- fix_line(Line, L)
- end,
- lists:keyreplace(location, 1, Anno, {location, NewLocation}).
-
-fix_location({Line, Column}, OldLine) ->
- {fix_line(Line, OldLine), Column}.
-
-fix_line(Line, OldLine) when OldLine < 0, Line > 0 ->
- -Line;
-fix_line(Line, _OldLine) ->
- Line.
+ set(location, Location, Anno).
-spec set_record(Record, Anno) -> Anno when
Record :: record(),
@@ -383,7 +329,7 @@ set_anno(Item, Value, Anno) ->
_ ->
lists:keyreplace(Item, 1, Anno, {Item, Value})
end,
- simplify(R)
+ reset_simplify(R)
end.
reset(Anno, Item) ->
diff --git a/lib/stdlib/src/erl_bits.erl b/lib/stdlib/src/erl_bits.erl
index ddcfcfdf02..5851401026 100644
--- a/lib/stdlib/src/erl_bits.erl
+++ b/lib/stdlib/src/erl_bits.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/erl_compile.erl b/lib/stdlib/src/erl_compile.erl
index 5ca233cde7..a6ae398d03 100644
--- a/lib/stdlib/src/erl_compile.erl
+++ b/lib/stdlib/src/erl_compile.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -60,6 +60,7 @@ compile_cmdline() ->
_ -> my_halt(2)
end.
+-spec my_halt(_) -> no_return().
my_halt(Reason) ->
erlang:halt(Reason).
diff --git a/lib/stdlib/src/erl_expand_records.erl b/lib/stdlib/src/erl_expand_records.erl
index bcfeef7321..ebcbc54ab1 100644
--- a/lib/stdlib/src/erl_expand_records.erl
+++ b/lib/stdlib/src/erl_expand_records.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -33,59 +33,31 @@
vcount=0, % Variable counter
imports=[], % Imports
records=dict:new(), % Record definitions
- trecords=sets:new(), % Typed records
- uses_types=false, % Are there -spec or -type in the module
strict_ra=[], % strict record accesses
checked_ra=[] % successfully accessed records
}).
--spec(module(AbsForms, CompileOptions) -> AbsForms when
+-spec(module(AbsForms, CompileOptions) -> AbsForms2 when
AbsForms :: [erl_parse:abstract_form()],
+ AbsForms2 :: [erl_parse:abstract_form()],
CompileOptions :: [compile:option()]).
%% Is is assumed that Fs is a valid list of forms. It should pass
%% erl_lint without errors.
module(Fs0, Opts0) ->
Opts = compiler_options(Fs0) ++ Opts0,
- TRecs = typed_records(Fs0),
- UsesTypes = uses_types(Fs0),
- St0 = #exprec{compile = Opts, trecords = TRecs, uses_types = UsesTypes},
+ St0 = #exprec{compile = Opts},
{Fs,_St} = forms(Fs0, St0),
Fs.
compiler_options(Forms) ->
lists:flatten([C || {attribute,_,compile,C} <- Forms]).
-typed_records(Fs) ->
- typed_records(Fs, sets:new()).
-
-typed_records([{attribute,_L,type,{{record, Name},_Defs,[]}} | Fs], Trecs) ->
- typed_records(Fs, sets:add_element(Name, Trecs));
-typed_records([_|Fs], Trecs) ->
- typed_records(Fs, Trecs);
-typed_records([], Trecs) ->
- Trecs.
-
-uses_types([{attribute,_L,spec,_}|_]) -> true;
-uses_types([{attribute,_L,type,_}|_]) -> true;
-uses_types([{attribute,_L,opaque,_}|_]) -> true;
-uses_types([_|Fs]) -> uses_types(Fs);
-uses_types([]) -> false.
-
-forms([{attribute,L,record,{Name,Defs}} | Fs], St0) ->
+forms([{attribute,_,record,{Name,Defs}}=Attr | Fs], St0) ->
NDefs = normalise_fields(Defs),
St = St0#exprec{records=dict:store(Name, NDefs, St0#exprec.records)},
{Fs1, St1} = forms(Fs, St),
- %% Check if we need to keep the record information for usage in types.
- case St#exprec.uses_types of
- true ->
- case sets:is_element(Name, St#exprec.trecords) of
- true -> {Fs1, St1};
- false -> {[{attribute,L,type,{{record,Name},Defs,[]}}|Fs1], St1}
- end;
- false ->
- {Fs1, St1}
- end;
+ {[Attr | Fs1], St1};
forms([{attribute,L,import,Is} | Fs0], St0) ->
St1 = import(Is, St0),
{Fs,St2} = forms(Fs0, St1),
@@ -513,7 +485,6 @@ lc_tq(Line, [F0 | Qs0], St0) ->
lc_tq(_Line, [], St0) ->
{[],St0#exprec{checked_ra = []}}.
-
%% normalise_fields([RecDef]) -> [Field].
%% Normalise the field definitions to always have a default value. If
%% none has been given then use 'undefined'.
diff --git a/lib/stdlib/src/erl_internal.erl b/lib/stdlib/src/erl_internal.erl
index f7711d0ad7..c08328b4b7 100644
--- a/lib/stdlib/src/erl_internal.erl
+++ b/lib/stdlib/src/erl_internal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index 62b3169a6c..e9332ce069 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -31,12 +31,8 @@
-export([is_guard_expr/1]).
-export([bool_option/4,value_option/3,value_option/7]).
--export([modify_line/2]).
-
-import(lists, [member/2,map/2,foldl/3,foldr/3,mapfoldl/3,all/2,reverse/1]).
--deprecated([{modify_line, 2, next_major_release}]).
-
%% bool_option(OnOpt, OffOpt, Default, Options) -> boolean().
%% value_option(Flag, Default, Options) -> Value.
%% value_option(Flag, Default, OnOpt, OnVal, OffOpt, OffVal, Options) ->
@@ -79,7 +75,7 @@ value_option(Flag, Default, On, OnVal, Off, OffVal, Opts) ->
%%-define(DEBUGF(X,Y), io:format(X, Y)).
-define(DEBUGF(X,Y), void).
--type line() :: erl_anno:line(). % a convenient alias
+-type line() :: erl_anno:anno(). % a convenient alias
-type fa() :: {atom(), arity()}. % function+arity
-type ta() :: {atom(), arity()}. % type+arity
@@ -103,7 +99,7 @@ value_option(Flag, Default, On, OnVal, Off, OffVal, Opts) ->
module='', %Module
behaviour=[], %Behaviour
exports=gb_sets:empty() :: gb_sets:set(fa()),%Exports
- imports=[] :: [fa()], %Imports, an orddict()
+ imports=[] :: orddict:orddict(fa(), module()),%Imports
compile=[], %Compile flags
records=dict:new() %Record definitions
:: dict:dict(atom(), {line(),Fields :: term()}),
@@ -238,6 +234,9 @@ format_error({removed, MFA, ReplacementMFA, Rel}) ->
"use ~s", [format_mfa(MFA), Rel, format_mfa(ReplacementMFA)]);
format_error({removed, MFA, String}) when is_list(String) ->
io_lib:format("~s: ~s", [format_mfa(MFA), String]);
+format_error({removed_type, MNA, ReplacementMNA, Rel}) ->
+ io_lib:format("the type ~s was removed in ~s; use ~s instead",
+ [format_mna(MNA), Rel, format_mna(ReplacementMNA)]);
format_error({obsolete_guard, {F, A}}) ->
io_lib:format("~p/~p obsolete", [F, A]);
format_error({too_many_arguments,Arity}) ->
@@ -361,6 +360,9 @@ format_error({redefine_type, {TypeName, Arity}}) ->
[TypeName, gen_type_paren(Arity)]);
format_error({type_syntax, Constr}) ->
io_lib:format("bad ~w type", [Constr]);
+format_error(old_abstract_code) ->
+ io_lib:format("abstract code generated before Erlang/OTP 19.0 and "
+ "having typed record fields cannot be compiled", []);
format_error({redefine_spec, {M, F, A}}) ->
io_lib:format("spec for ~w:~w/~w already defined", [M, F, A]);
format_error({redefine_spec, {F, A}}) ->
@@ -374,9 +376,9 @@ format_error({spec_fun_undefined, {F, A}}) ->
format_error({missing_spec, {F,A}}) ->
io_lib:format("missing specification for function ~w/~w", [F, A]);
format_error(spec_wrong_arity) ->
- "spec has the wrong arity";
+ "spec has wrong arity";
format_error(callback_wrong_arity) ->
- "callback has the wrong arity";
+ "callback has wrong arity";
format_error({deprecated_builtin_type, {Name, Arity},
Replacement, Rel}) ->
UseS = case Replacement of
@@ -416,6 +418,9 @@ format_mfa({M, F, A}) when is_integer(A) ->
format_mf(M, F, ArityString) when is_atom(M), is_atom(F) ->
atom_to_list(M) ++ ":" ++ atom_to_list(F) ++ "/" ++ ArityString.
+format_mna({M, N, A}) when is_integer(A) ->
+ atom_to_list(M) ++ ":" ++ atom_to_list(N) ++ gen_type_paren(A).
+
format_where(L) when is_integer(L) ->
io_lib:format("(line ~p)", [L]);
format_where({L,C}) when is_integer(L), is_integer(C) ->
@@ -462,7 +467,7 @@ used_vars(Exprs, BindingsList) ->
%% really all ordsets!
-spec(module(AbsForms) -> {ok, Warnings} | {error, Errors, Warnings} when
- AbsForms :: [erl_parse:abstract_form()],
+ AbsForms :: [erl_parse:abstract_form() | erl_parse:form_info()],
Warnings :: [{file:filename(),[ErrorInfo]}],
Errors :: [{FileName2 :: file:filename(),[ErrorInfo]}],
ErrorInfo :: error_info()).
@@ -474,7 +479,7 @@ module(Forms) ->
-spec(module(AbsForms, FileName) ->
{ok, Warnings} | {error, Errors, Warnings} when
- AbsForms :: [erl_parse:abstract_form()],
+ AbsForms :: [erl_parse:abstract_form() | erl_parse:form_info()],
FileName :: atom() | string(),
Warnings :: [{file:filename(),[ErrorInfo]}],
Errors :: [{FileName2 :: file:filename(),[ErrorInfo]}],
@@ -487,7 +492,7 @@ module(Forms, FileName) ->
-spec(module(AbsForms, FileName, CompileOptions) ->
{ok, Warnings} | {error, Errors, Warnings} when
- AbsForms :: [erl_parse:abstract_form()],
+ AbsForms :: [erl_parse:abstract_form() | erl_parse:form_info()],
FileName :: atom() | string(),
CompileOptions :: [compile:option()],
Warnings :: [{file:filename(),[ErrorInfo]}],
@@ -694,7 +699,12 @@ set_form_file({function,L,N,A,C}, File) ->
set_form_file(Form, _File) ->
Form.
+set_file(Ts, File) when is_list(Ts) ->
+ [anno_set_file(T, File) || T <- Ts];
set_file(T, File) ->
+ anno_set_file(T, File).
+
+anno_set_file(T, File) ->
F = fun(Anno) -> erl_anno:set_file(File, Anno) end,
erl_parse:map_anno(F, T).
@@ -1136,7 +1146,7 @@ check_untyped_records(Forms, St0) ->
RecNames = dict:fetch_keys(St0#lint.records),
%% these are the records with field(s) containing type info
TRecNames = [Name ||
- {attribute,_,type,{{record,Name},Fields,_}} <- Forms,
+ {attribute,_,record,{Name,Fields}} <- Forms,
lists:all(fun ({typed_record_field,_,_}) -> true;
(_) -> false
end, Fields)],
@@ -1146,7 +1156,8 @@ check_untyped_records(Forms, St0) ->
[] -> St; % exclude records with no fields
[_|_] -> add_warning(L, {untyped_record, N}, St)
end
- end, St0, RecNames -- TRecNames);
+ end, St0, ordsets:subtract(ordsets:from_list(RecNames),
+ ordsets:from_list(TRecNames)));
false ->
St0
end.
@@ -1491,7 +1502,7 @@ pattern({op,_Line,'++',{string,_Li,_S},R}, Vt, Old, Bvt, St) ->
pattern({match,_Line,Pat1,Pat2}, Vt, Old, Bvt, St0) ->
{Lvt,Bvt1,St1} = pattern(Pat1, Vt, Old, Bvt, St0),
{Rvt,Bvt2,St2} = pattern(Pat2, Vt, Old, Bvt, St1),
- St3 = reject_bin_alias(Pat1, Pat2, St2),
+ St3 = reject_invalid_alias(Pat1, Pat2, Vt, St2),
{vtmerge_pat(Lvt, Rvt),vtmerge_pat(Bvt1,Bvt2),St3};
%% Catch legal constant expressions, including unary +,-.
pattern(Pat, _Vt, _Old, _Bvt, St) ->
@@ -1506,56 +1517,77 @@ pattern_list(Ps, Vt, Old, Bvt0, St) ->
{vtmerge_pat(Pvt, Psvt),vtmerge_pat(Bvt,Bvt1),St1}
end, {[],[],St}, Ps).
-%% reject_bin_alias(Pat, Expr, St) -> St'
+
+
+%% reject_invalid_alias(Pat, Expr, Vt, St) -> St'
%% Reject aliases for binary patterns at the top level.
+%% Reject aliases for maps patterns at the top level.
+%% The variables table (Vt) are for maps checkking.
-reject_bin_alias_expr({bin,_,_}=P, {match,_,P0,E}, St0) ->
- St = reject_bin_alias(P, P0, St0),
- reject_bin_alias_expr(P, E, St);
-reject_bin_alias_expr({match,_,_,_}=P, {match,_,P0,E}, St0) ->
- St = reject_bin_alias(P, P0, St0),
- reject_bin_alias_expr(P, E, St);
-reject_bin_alias_expr(_, _, St) -> St.
+reject_invalid_alias_expr({bin,_,_}=P, {match,_,P0,E}, Vt, St0) ->
+ St = reject_invalid_alias(P, P0, Vt, St0),
+ reject_invalid_alias_expr(P, E, Vt, St);
+reject_invalid_alias_expr({map,_,_}=P, {match,_,P0,E}, Vt, St0) ->
+ St = reject_invalid_alias(P, P0, Vt, St0),
+ reject_invalid_alias_expr(P, E, Vt, St);
+reject_invalid_alias_expr({match,_,_,_}=P, {match,_,P0,E}, Vt, St0) ->
+ St = reject_invalid_alias(P, P0, Vt, St0),
+ reject_invalid_alias_expr(P, E, Vt, St);
+reject_invalid_alias_expr(_, _, _, St) -> St.
-%% reject_bin_alias(Pat1, Pat2, St) -> St'
+
+%% reject_invalid_alias(Pat1, Pat2, St) -> St'
%% Aliases of binary patterns, such as <<A:8>> = <<B:4,C:4>> or even
%% <<A:8>> = <<A:8>>, are not allowed. Traverse the patterns in parallel
%% and generate an error if any binary aliases are found.
%% We generate an error even if is obvious that the overall pattern can't
%% possibly match, for instance, {a,<<A:8>>,c}={x,<<A:8>>} WILL generate an
%% error.
+%% Maps should reject unbound variables here.
-reject_bin_alias({bin,Line,_}, {bin,_,_}, St) ->
+reject_invalid_alias({bin,Line,_}, {bin,_,_}, _, St) ->
add_error(Line, illegal_bin_pattern, St);
-reject_bin_alias({cons,_,H1,T1}, {cons,_,H2,T2}, St0) ->
- St = reject_bin_alias(H1, H2, St0),
- reject_bin_alias(T1, T2, St);
-reject_bin_alias({tuple,_,Es1}, {tuple,_,Es2}, St) ->
- reject_bin_alias_list(Es1, Es2, St);
-reject_bin_alias({record,_,Name1,Pfs1}, {record,_,Name2,Pfs2},
+reject_invalid_alias({map,_Line,Ps1}, {map,_,Ps2}, Vt, St0) ->
+ Fun = fun ({map_field_exact,L,{var,_,K},_V}, Sti) ->
+ case is_var_bound(K,Vt) of
+ true ->
+ Sti;
+ false ->
+ add_error(L, {unbound_var,K}, Sti)
+ end;
+ ({map_field_exact,_L,_K,_V}, Sti) ->
+ Sti
+ end,
+ foldl(Fun, foldl(Fun, St0, Ps1), Ps2);
+reject_invalid_alias({cons,_,H1,T1}, {cons,_,H2,T2}, Vt, St0) ->
+ St = reject_invalid_alias(H1, H2, Vt, St0),
+ reject_invalid_alias(T1, T2, Vt, St);
+reject_invalid_alias({tuple,_,Es1}, {tuple,_,Es2}, Vt, St) ->
+ reject_invalid_alias_list(Es1, Es2, Vt, St);
+reject_invalid_alias({record,_,Name1,Pfs1}, {record,_,Name2,Pfs2}, Vt,
#lint{records=Recs}=St) ->
case {dict:find(Name1, Recs),dict:find(Name2, Recs)} of
{{ok,{_Line1,Fields1}},{ok,{_Line2,Fields2}}} ->
- reject_bin_alias_rec(Pfs1, Pfs2, Fields1, Fields2, St);
+ reject_invalid_alias_rec(Pfs1, Pfs2, Fields1, Fields2, Vt, St);
{_,_} ->
%% One or more non-existing records. (An error messages has
%% already been generated, so we are done here.)
St
end;
-reject_bin_alias({match,_,P1,P2}, P, St0) ->
- St = reject_bin_alias(P1, P, St0),
- reject_bin_alias(P2, P, St);
-reject_bin_alias(P, {match,_,_,_}=M, St) ->
- reject_bin_alias(M, P, St);
-reject_bin_alias(_P1, _P2, St) -> St.
-
-reject_bin_alias_list([E1|Es1], [E2|Es2], St0) ->
- St = reject_bin_alias(E1, E2, St0),
- reject_bin_alias_list(Es1, Es2, St);
-reject_bin_alias_list(_, _, St) -> St.
-
-reject_bin_alias_rec(PfsA0, PfsB0, FieldsA0, FieldsB0, St) ->
+reject_invalid_alias({match,_,P1,P2}, P, Vt, St0) ->
+ St = reject_invalid_alias(P1, P, Vt, St0),
+ reject_invalid_alias(P2, P, Vt, St);
+reject_invalid_alias(P, {match,_,_,_}=M, Vt, St) ->
+ reject_invalid_alias(M, P, Vt, St);
+reject_invalid_alias(_P1, _P2, _Vt, St) -> St.
+
+reject_invalid_alias_list([E1|Es1], [E2|Es2], Vt, St0) ->
+ St = reject_invalid_alias(E1, E2, Vt, St0),
+ reject_invalid_alias_list(Es1, Es2, Vt, St);
+reject_invalid_alias_list(_, _, _, St) -> St.
+
+reject_invalid_alias_rec(PfsA0, PfsB0, FieldsA0, FieldsB0, Vt, St) ->
%% We treat records as if they have been converted to tuples.
PfsA1 = rbia_field_vars(PfsA0),
PfsB1 = rbia_field_vars(PfsB0),
@@ -1571,7 +1603,7 @@ reject_bin_alias_rec(PfsA0, PfsB0, FieldsA0, FieldsB0, St) ->
D = sofs:projection({external,fun({_,_,P1,_,P2}) -> {P1,P2} end}, C),
E = sofs:to_external(D),
{Ps1,Ps2} = lists:unzip(E),
- reject_bin_alias_list(Ps1, Ps2, St).
+ reject_invalid_alias_list(Ps1, Ps2, Vt, St).
rbia_field_vars(Fs) ->
[{Name,Pat} || {record_field,_,{atom,_,Name},Pat} <- Fs].
@@ -2273,7 +2305,7 @@ expr({'catch',Line,E}, Vt, St0) ->
expr({match,_Line,P,E}, Vt, St0) ->
{Evt,St1} = expr(E, Vt, St0),
{Pvt,Bvt,St2} = pattern(P, vtupdate(Evt, Vt), St1),
- St = reject_bin_alias_expr(P, E, St2),
+ St = reject_invalid_alias_expr(P, E, Vt, St2),
{vtupdate(Bvt, vtmerge(Evt, Pvt)),St};
%% No comparison or boolean operators yet.
expr({op,_Line,_Op,A}, Vt, St) ->
@@ -2370,7 +2402,7 @@ is_valid_call(Call) ->
_ -> true
end.
-%% is_valid_map_key(K,St) -> true | false
+%% is_valid_map_key(K) -> true | false
%% variables are allowed for patterns only at the top of the tree
is_valid_map_key({var,_,_}) -> true;
@@ -2436,7 +2468,10 @@ record_def(Line, Name, Fs0, St0) ->
true -> add_error(Line, {redefine_record,Name}, St0);
false ->
{Fs1,St1} = def_fields(normalise_fields(Fs0), Name, St0),
- St1#lint{records=dict:store(Name, {Line,Fs1}, St1#lint.records)}
+ St2 = St1#lint{records=dict:store(Name, {Line,Fs1},
+ St1#lint.records)},
+ Types = [T || {typed_record_field, _, T} <- Fs0],
+ check_type({type, nowarn(), product, Types}, St2)
end.
%% def_fields([RecDef], RecordName, State) -> {[DefField],State}.
@@ -2639,11 +2674,8 @@ find_field(_F, []) -> error.
%% Attr :: 'type' | 'opaque'
%% Checks that a type definition is valid.
-type_def(_Attr, _Line, {record, _RecName}, Fields, [], St0) ->
- %% The record field names and such are checked in the record format.
- %% We only need to check the types.
- Types = [T || {typed_record_field, _, T} <- Fields],
- check_type({type, nowarn(), product, Types}, St0);
+-dialyzer({no_match, type_def/6}).
+
type_def(Attr, Line, TypeName, ProtoType, Args, St0) ->
TypeDefs = St0#lint.types,
Arity = length(Args),
@@ -2705,8 +2737,6 @@ check_type(Types, St) ->
check_type({ann_type, _L, [_Var, Type]}, SeenVars, St) ->
check_type(Type, SeenVars, St);
-check_type({paren_type, _L, [Type]}, SeenVars, St) ->
- check_type(Type, SeenVars, St);
check_type({remote_type, L, [{atom, _, Mod}, {atom, _, Name}, Args]},
SeenVars, St0) ->
St = deprecated_type(L, Mod, Name, Args, St0),
@@ -2746,10 +2776,8 @@ check_type({type, L, range, [From, To]}, SeenVars, St) ->
_ -> add_error(L, {type_syntax, range}, St)
end,
{SeenVars, St1};
-check_type({type, L, map, any}, SeenVars, St) ->
- %% To get usage right while map/0 is a newly_introduced_builtin_type.
- St1 = used_type({map, 0}, L, St),
- {SeenVars, St1};
+check_type({type, _L, map, any}, SeenVars, St) ->
+ {SeenVars, St};
check_type({type, _L, map, Pairs}, SeenVars, St) ->
lists:foldl(fun(Pair, {AccSeenVars, AccSt}) ->
check_type(Pair, AccSeenVars, AccSt)
@@ -2806,6 +2834,8 @@ check_type({user_type, L, TypeName, Args}, SeenVars, St) ->
lists:foldl(fun(T, {AccSeenVars, AccSt}) ->
check_type(T, AccSeenVars, AccSt)
end, {SeenVars, St1}, Args);
+check_type([{typed_record_field,Field,_T}|_], SeenVars, St) ->
+ {SeenVars, add_error(element(2, Field), old_abstract_code, St)};
check_type(I, SeenVars, St) ->
case erl_eval:partial_eval(I) of
{integer,_ILn,_Integer} -> {SeenVars, St};
@@ -2855,7 +2885,6 @@ used_type(TypePair, L, #lint{usage = Usage, file = File} = St) ->
is_default_type({Name, NumberOfTypeVariables}) ->
erl_internal:is_type(Name, NumberOfTypeVariables).
-is_newly_introduced_builtin_type({map, 0}) -> true;
is_newly_introduced_builtin_type({Name, _}) when is_atom(Name) -> false.
is_obsolete_builtin_type(TypePair) ->
@@ -2876,7 +2905,7 @@ spec_decl(Line, MFA0, TypeSpecs, St0 = #lint{specs = Specs, module = Mod}) ->
St1 = St0#lint{specs = dict:store(MFA, Line, Specs)},
case dict:is_key(MFA, Specs) of
true -> add_error(Line, {redefine_spec, MFA0}, St1);
- false -> check_specs(TypeSpecs, Arity, St1)
+ false -> check_specs(TypeSpecs, spec_wrong_arity, Arity, St1)
end.
%% callback_decl(Line, Fun, Types, State) -> State.
@@ -2890,7 +2919,8 @@ callback_decl(Line, MFA0, TypeSpecs,
St1 = St0#lint{callbacks = dict:store(MFA, Line, Callbacks)},
case dict:is_key(MFA, Callbacks) of
true -> add_error(Line, {redefine_callback, MFA0}, St1);
- false -> check_specs(TypeSpecs, Arity, St1)
+ false -> check_specs(TypeSpecs, callback_wrong_arity,
+ Arity, St1)
end
end.
@@ -2927,7 +2957,7 @@ is_fa({FuncName, Arity})
when is_atom(FuncName), is_integer(Arity), Arity >= 0 -> true;
is_fa(_) -> false.
-check_specs([FunType|Left], Arity, St0) ->
+check_specs([FunType|Left], ETag, Arity, St0) ->
{FunType1, CTypes} =
case FunType of
{type, _, bounded_fun, [FT = {type, _, 'fun', _}, Cs]} ->
@@ -2935,18 +2965,16 @@ check_specs([FunType|Left], Arity, St0) ->
{FT, lists:append(Types0)};
{type, _, 'fun', _} = FT -> {FT, []}
end,
- SpecArity =
- case FunType1 of
- {type, L, 'fun', [any, _]} -> any;
- {type, L, 'fun', [{type, _, product, D}, _]} -> length(D)
- end,
+ {type, L, 'fun', [{type, _, product, D}, _]} = FunType1,
+ SpecArity = length(D),
St1 = case Arity =:= SpecArity of
true -> St0;
- false -> add_error(L, spec_wrong_arity, St0)
+ false -> %% Cannot happen if called from the compiler.
+ add_error(L, ETag, St0)
end,
St2 = check_type({type, nowarn(), product, [FunType1|CTypes]}, St1),
- check_specs(Left, Arity, St2);
-check_specs([], _Arity, St) ->
+ check_specs(Left, ETag, Arity, St2);
+check_specs([], _ETag, _Arity, St) ->
St.
nowarn() ->
@@ -2988,9 +3016,10 @@ add_missing_spec_warnings(Forms, St0, Type) ->
[{FA,L} || {function,L,F,A,_} <- Forms,
not lists:member(FA = {F,A}, Specs)];
exported ->
- Exps = gb_sets:to_list(St0#lint.exports) -- pseudolocals(),
+ Exps0 = gb_sets:to_list(St0#lint.exports) -- pseudolocals(),
+ Exps = Exps0 -- Specs,
[{FA,L} || {function,L,F,A,_} <- Forms,
- member(FA = {F,A}, Exps -- Specs)]
+ member(FA = {F,A}, Exps)]
end,
foldl(fun ({FA,L}, St) ->
add_warning(L, {missing_spec,FA}, St)
@@ -3003,7 +3032,9 @@ check_unused_types(Forms, #lint{usage=Usage, types=Ts, exp_types=ExpTs}=St) ->
L = gb_sets:to_list(ExpTs) ++ dict:fetch_keys(D),
UsedTypes = gb_sets:from_list(L),
FoldFun =
- fun(Type, #typeinfo{line = FileLine}, AccSt) ->
+ fun({{record, _}=_Type, 0}, _, AccSt) ->
+ AccSt; % Before Erlang/OTP 19.0
+ (Type, #typeinfo{line = FileLine}, AccSt) ->
case loc(FileLine, AccSt) of
{FirstFile, _} ->
case gb_sets:is_member(Type, UsedTypes) of
@@ -3190,8 +3221,8 @@ handle_generator(P,E,Vt,Uvt,St0) ->
handle_bitstring_gen_pat({bin,_,Segments=[_|_]},St) ->
case lists:last(Segments) of
{bin_element,Line,{var,_,_},default,Flags} when is_list(Flags) ->
- case member(binary, Flags) orelse member(bits, Flags)
- orelse member(bitstring, Flags) of
+ case member(binary, Flags) orelse member(bytes, Flags)
+ orelse member(bits, Flags) orelse member(bitstring, Flags) of
true ->
add_error(Line, unsized_binary_in_bin_gen_pattern, St);
false ->
@@ -3403,6 +3434,14 @@ warn_unused_vars(U, Vt, St0) ->
UVt = map(fun ({V,{State,_,Ls}}) -> {V,{State,used,Ls}} end, U),
{vtmerge(Vt, UVt), St1}.
+
+is_var_bound(V, Vt) ->
+ case orddict:find(V, Vt) of
+ {ok,{bound,_Usage,_}} -> true;
+ _ -> false
+ end.
+
+
%% vtupdate(UpdVarTable, VarTable) -> VarTable.
%% Add the variables in the updated vartable to VarTable. The variables
%% will be updated with their property in UpdVarTable. The state of
@@ -3485,13 +3524,6 @@ vt_no_unused(Vt) -> [V || {_,{_,U,_L}}=V <- Vt, U =/= unused].
copy_expr(Expr, Anno) ->
erl_parse:map_anno(fun(_A) -> Anno end, Expr).
-%% modify_line(Form, Fun) -> Form
-%% modify_line(Expression, Fun) -> Expression
-%% Applies Fun to each line number occurrence.
-
-modify_line(T, F0) ->
- erl_parse:map_anno(F0, T).
-
%% Check a record_info call. We have already checked that it is not
%% shadowed by an import.
@@ -3574,6 +3606,8 @@ deprecated_type(L, M, N, As, St) ->
false ->
St
end;
+ {removed, Replacement, Rel} ->
+ add_warning(L, {removed_type, {M,N,NAs}, Replacement, Rel}, St);
no ->
St
end.
diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl
index e82282421e..85b2816451 100644
--- a/lib/stdlib/src/erl_parse.yrl
+++ b/lib/stdlib/src/erl_parse.yrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -85,10 +85,6 @@ type_spec -> '(' spec_fun type_sigs ')' : {'$2', '$3'}.
spec_fun -> atom : '$1'.
spec_fun -> atom ':' atom : {'$1', '$3'}.
-%% The following two are retained only for backwards compatibility;
-%% they are not part of the EEP syntax and should be removed.
-spec_fun -> atom '/' integer '::' : {'$1', '$3'}.
-spec_fun -> atom ':' atom '/' integer '::' : {'$1', '$3', '$5'}.
typed_attr_val -> expr ',' typed_record_fields : {typed_record, '$1', '$3'}.
typed_attr_val -> expr '::' top_type : {type_def, '$1', '$3'}.
@@ -176,7 +172,11 @@ fun_type -> '(' top_types ')' '->' top_type
map_pair_types -> map_pair_type : ['$1'].
map_pair_types -> map_pair_type ',' map_pair_types : ['$1'|'$3'].
-map_pair_type -> top_type '=>' top_type : {type, ?anno('$2'), map_field_assoc,['$1','$3']}.
+
+map_pair_type -> top_type '=>' top_type : {type, ?anno('$2'),
+ map_field_assoc,['$1','$3']}.
+map_pair_type -> top_type ':=' top_type : {type, ?anno('$2'),
+ map_field_exact,['$1','$3']}.
field_types -> field_type : ['$1'].
field_types -> field_type ',' field_types : ['$1'|'$3'].
@@ -315,7 +315,7 @@ bit_size_expr -> expr_max : '$1'.
list_comprehension -> '[' expr '||' lc_exprs ']' :
{lc,?anno('$1'),'$2','$4'}.
-binary_comprehension -> '<<' binary '||' lc_exprs '>>' :
+binary_comprehension -> '<<' expr_max '||' lc_exprs '>>' :
{bc,?anno('$1'),'$2','$4'}.
lc_exprs -> lc_expr : ['$1'].
lc_exprs -> lc_expr ',' lc_exprs : ['$1'|'$3'].
@@ -525,23 +525,431 @@ Erlang code.
-export([type_inop_prec/1,type_preop_prec/1]).
-export([map_anno/2, fold_anno/3, mapfold_anno/3,
new_anno/1, anno_to_term/1, anno_from_term/1]).
--export([set_line/2,get_attribute/2,get_attributes/1]).
-
--deprecated([{set_line, 2, next_major_release},
- {get_attribute, 2, next_major_release},
- {get_attributes, 1, next_major_release}]).
%% The following directive is needed for (significantly) faster compilation
%% of the generated .erl file by the HiPE compiler. Please do not remove.
-compile([{hipe,[{regalloc,linear_scan}]}]).
-export_type([abstract_clause/0, abstract_expr/0, abstract_form/0,
- error_info/0]).
+ abstract_type/0, form_info/0, error_info/0]).
+
+%% Start of Abstract Format
+
+-type anno() :: erl_anno:anno().
+
+-type abstract_form() :: af_module()
+ | af_behavior()
+ | af_behaviour()
+ | af_export()
+ | af_import()
+ | af_export_type()
+ | af_compile()
+ | af_file()
+ | af_record_decl()
+ | af_type_decl()
+ | af_function_spec()
+ | af_wild_attribute()
+ | af_function_decl().
+
+-type af_module() :: {'attribute', anno(), 'module', module()}.
+
+-type af_behavior() :: {'attribute', anno(), 'behavior', behaviour()}.
+
+-type af_behaviour() :: {'attribute', anno(), 'behaviour', behaviour()}.
+
+-type behaviour() :: atom().
+
+-type af_export() :: {'attribute', anno(), 'export', af_fa_list()}.
+
+-type af_import() :: {'attribute', anno(), 'import', af_fa_list()}.
+
+-type af_fa_list() :: [{function_name(), arity()}].
+
+-type af_export_type() :: {'attribute', anno(), 'export_type', af_ta_list()}.
+
+-type af_ta_list() :: [{type_name(), arity()}].
+
+-type af_compile() :: {'attribute', anno(), 'compile', any()}.
+
+-type af_file() :: {'attribute', anno(), 'file', {string(), anno()}}.
+
+-type af_record_decl() ::
+ {'attribute', anno(), 'record', {record_name(), [af_field_decl()]}}.
+
+-type af_field_decl() :: af_typed_field() | af_field().
+
+-type af_typed_field() ::
+ {'typed_record_field', af_field(), abstract_type()}.
+
+-type af_field() :: {'record_field', anno(), af_field_name()}
+ | {'record_field', anno(), af_field_name(), abstract_expr()}.
+
+-type af_type_decl() :: {'attribute', anno(), type_attr(),
+ {type_name(), abstract_type(), [af_variable()]}}.
+
+-type type_attr() :: 'opaque' | 'type'.
+
+-type af_function_spec() :: {'attribute', anno(), spec_attr(),
+ {{function_name(), arity()},
+ af_function_type_list()}}
+ | {'attribute', anno(), 'spec',
+ {{module(), function_name(), arity()},
+ af_function_type_list()}}.
+
+-type spec_attr() :: 'callback' | 'spec'.
+
+-type af_wild_attribute() :: {'attribute', anno(), atom(), any()}.
+
+-type af_function_decl() ::
+ {'function', anno(), function_name(), arity(), af_clause_seq()}.
+
+-type abstract_expr() :: af_literal()
+ | af_match(abstract_expr())
+ | af_variable()
+ | af_tuple(abstract_expr())
+ | af_nil()
+ | af_cons(abstract_expr())
+ | af_bin(abstract_expr())
+ | af_binary_op(abstract_expr())
+ | af_unary_op(abstract_expr())
+ | af_record_access(abstract_expr())
+ | af_record_update(abstract_expr())
+ | af_record_index()
+ | af_record_field_access(abstract_expr())
+ | af_map_access(abstract_expr())
+ | af_map_update(abstract_expr())
+ | af_catch()
+ | af_local_call()
+ | af_remote_call()
+ | af_list_comprehension()
+ | af_binary_comprehension()
+ | af_block()
+ | af_if()
+ | af_case()
+ | af_try()
+ | af_receive()
+ | af_local_fun()
+ | af_remote_fun()
+ | af_fun()
+ | af_named_fun().
+
+-type af_record_update(T) :: {'record',
+ anno(),
+ abstract_expr(),
+ record_name(),
+ [af_record_field(T)]}.
+
+-type af_catch() :: {'catch', anno(), abstract_expr()}.
+
+-type af_local_call() :: {'call', anno(), af_local_function(), af_args()}.
+
+-type af_remote_call() :: {'call', anno(), af_remote_function(), af_args()}.
+
+-type af_args() :: [abstract_expr()].
+
+-type af_local_function() :: abstract_expr().
+
+-type af_remote_function() ::
+ {'remote', anno(), abstract_expr(), abstract_expr()}.
+
+-type af_list_comprehension() ::
+ {'lc', anno(), af_template(), af_qualifier_seq()}.
+
+-type af_binary_comprehension() ::
+ {'bc', anno(), af_template(), af_qualifier_seq()}.
+
+-type af_template() :: abstract_expr().
+
+-type af_qualifier_seq() :: [af_qualifier()].
+
+-type af_qualifier() :: af_generator() | af_filter().
+
+-type af_generator() :: {'generate', anno(), af_pattern(), abstract_expr()}
+ | {'b_generate', anno(), af_pattern(), abstract_expr()}.
+
+-type af_filter() :: abstract_expr().
+
+-type af_block() :: {'block', anno(), af_body()}.
+
+-type af_if() :: {'if', anno(), af_clause_seq()}.
+
+-type af_case() :: {'case', anno(), abstract_expr(), af_clause_seq()}.
+
+-type af_try() :: {'try',
+ anno(),
+ af_body() | [],
+ af_clause_seq() | [],
+ af_clause_seq() | [],
+ af_body() | []}.
+
+-type af_clause_seq() :: [af_clause(), ...].
+
+-type af_receive() ::
+ {'receive', anno(), af_clause_seq()}
+ | {'receive', anno(), af_clause_seq(), abstract_expr(), af_body()}.
+
+-type af_local_fun() ::
+ {'fun', anno(), {'function', function_name(), arity()}}.
+
+-type af_remote_fun() ::
+ {'fun', anno(), {'function', module(), function_name(), arity()}}
+ | {'fun', anno(), {'function', af_atom(), af_atom(), af_integer()}}.
+
+-type af_fun() :: {'fun', anno(), {'clauses', af_clause_seq()}}.
+
+-type af_named_fun() :: {'named_fun', anno(), fun_name(), af_clause_seq()}.
+
+-type fun_name() :: atom().
+
+-type abstract_clause() :: af_clause().
+
+-type af_clause() ::
+ {'clause', anno(), [af_pattern()], af_guard_seq(), af_body()}.
+
+-type af_body() :: [abstract_expr(), ...].
+
+-type af_guard_seq() :: [af_guard()].
+
+-type af_guard() :: [af_guard_test(), ...].
+
+-type af_guard_test() :: af_literal()
+ | af_variable()
+ | af_tuple(af_guard_test())
+ | af_nil()
+ | af_cons(af_guard_test())
+ | af_bin(af_guard_test())
+ | af_binary_op(af_guard_test())
+ | af_unary_op(af_guard_test())
+ | af_record_access(af_guard_test())
+ | af_record_index()
+ | af_record_field_access(af_guard_test())
+ | af_map_access(abstract_expr()) % FIXME
+ | af_map_update(abstract_expr()) % FIXME
+ | af_guard_call()
+ | af_remote_guard_call().
+
+-type af_record_field_access(T) ::
+ {'record_field', anno(), T, record_name(), af_field_name()}.
+
+-type af_map_access(T) :: {'map', anno(), [af_map_field(T)]}.
+
+-type af_map_update(T) :: {'map', anno(), T, [af_map_field(T)]}.
+
+-type af_map_field(T) :: af_map_field_assoc(T) | af_map_field_exact(T).
+
+-type af_map_field_assoc(T) :: {'map_field_assoc', anno(), T, T}.
+
+-type af_map_field_exact(T) :: {'map_field_exact', anno(), T, T}.
+
+-type af_guard_call() :: {'call', anno(), function_name(), [af_guard_test()]}.
+
+-type af_remote_guard_call() ::
+ {'call', anno(),
+ {'remote', anno(), af_lit_atom('erlang'), af_atom()},
+ [af_guard_test()]}.
+
+-type af_pattern() :: af_literal()
+ | af_match(af_pattern())
+ | af_variable()
+ | af_tuple(af_pattern())
+ | af_nil()
+ | af_cons(af_pattern())
+ | af_bin(af_pattern())
+ | af_binary_op(af_pattern())
+ | af_unary_op(af_pattern())
+ | af_record_access(af_pattern())
+ | af_record_index()
+ | af_map_pattern().
+
+-type af_record_index() ::
+ {'record_index', anno(), record_name(), af_field_name()}.
+
+-type af_record_access(T) ::
+ {'record', anno(), record_name(), [af_record_field(T)]}.
+
+-type af_record_field(T) :: {'record_field', anno(), af_field_name(), T}.
+
+-type af_map_pattern() ::
+ {'map', anno(), [af_map_field_exact(abstract_expr)]}. % FIXME?
+
+-type abstract_type() :: af_annotated_type()
+ | af_atom()
+ | af_bitstring_type()
+ | af_empty_list_type()
+ | af_fun_type()
+ | af_integer_range_type()
+ | af_map_type()
+ | af_predefined_type()
+ | af_record_type()
+ | af_remote_type()
+ | af_singleton_integer_type()
+ | af_tuple_type()
+ | af_type_union()
+ | af_type_variable()
+ | af_user_defined_type().
+
+-type af_annotated_type() ::
+ {'ann_type', anno(), [af_anno() | abstract_type()]}. % [Var, Type]
+
+-type af_anno() :: af_variable().
+
+-type af_bitstring_type() ::
+ {'type', anno(), 'binary', [af_singleton_integer_type()]}.
+
+-type af_empty_list_type() :: {'type', anno(), 'nil', []}.
+
+-type af_fun_type() :: {'type', anno(), 'fun', []}
+ | {'type', anno(), 'fun', [{'type', anno(), 'any'} |
+ abstract_type()]}
+ | {'type', anno(), 'fun', af_function_type()}.
+
+-type af_integer_range_type() ::
+ {'type', anno(), 'range', [af_singleton_integer_type()]}.
+
+-type af_map_type() :: {'type', anno(), 'map', 'any'}
+ | {'type', anno(), 'map', [af_map_pair_type()]}.
+
+-type af_map_pair_type() ::
+ {'type', anno(), 'map_field_assoc', [abstract_type()]}
+ | {'type', anno(), 'map_field_exact', [abstract_type()]}.
+
+-type af_predefined_type() ::
+ {'type', anno(), type_name(), [abstract_type()]}.
+
+-type af_record_type() ::
+ {'type', anno(), 'record', [(Name :: af_atom()) % [Name, T1, ... Tk]
+ | af_record_field_type()]}.
+
+-type af_record_field_type() ::
+ {'type', anno(), 'field_type', [(Name :: af_atom()) |
+ abstract_type()]}. % [Name, Type]
+
+-type af_remote_type() ::
+ {'remote_type', anno(), [(Module :: af_atom()) |
+ (TypeName :: af_atom()) |
+ [abstract_type()]]}. % [Module, Name, [T]]
+
+-type af_tuple_type() :: {'type', anno(), 'tuple', 'any'}
+ | {'type', anno(), 'tuple', [abstract_type()]}.
+
+-type af_type_union() :: {'type', anno(), 'union', [abstract_type()]}.
+
+-type af_type_variable() :: {'var', anno(), atom()}. % except '_'
+
+-type af_user_defined_type() ::
+ {'user_type', anno(), type_name(), [abstract_type()]}.
+
+-type af_function_type_list() :: [af_constrained_function_type() |
+ af_function_type()].
+
+-type af_constrained_function_type() ::
+ {'type', anno(), 'bounded_fun', [af_function_type() | % [Ft, Fc]
+ af_function_constraint()]}.
+
+-type af_function_type() ::
+ {'type', anno(), 'fun',
+ [{'type', anno(), 'product', [abstract_type()]} | abstract_type()]}.
+
+-type af_function_constraint() :: [af_constraint()].
+
+-type af_constraint() :: {'type', anno(), 'constraint',
+ af_lit_atom('is_subtype'),
+ [af_type_variable() | abstract_type()]}. % [V, T]
+
+-type af_singleton_integer_type() :: af_integer()
+ | af_unary_op(af_singleton_integer_type())
+ | af_binary_op(af_singleton_integer_type()).
+
+-type af_literal() :: af_atom()
+ | af_character()
+ | af_float()
+ | af_integer()
+ | af_string().
+
+-type af_atom() :: af_lit_atom(atom()).
+
+-type af_lit_atom(A) :: {'atom', anno(), A}.
+
+-type af_character() :: {'char', anno(), char()}.
+
+-type af_float() :: {'float', anno(), float()}.
+
+-type af_integer() :: {'integer', anno(), non_neg_integer()}.
+
+-type af_string() :: {'string', anno(), string()}.
+
+-type af_match(T) :: {'match', anno(), af_pattern(), T}.
+
+-type af_variable() :: {'var', anno(), atom()}. % | af_anon_variable()
+
+%-type af_anon_variable() :: {'var', anno(), '_'}.
+
+-type af_tuple(T) :: {'tuple', anno(), [T]}.
+
+-type af_nil() :: {'nil', anno()}.
+
+-type af_cons(T) :: {'cons', anno(), T, T}.
+
+-type af_bin(T) :: {'bin', anno(), [af_binelement(T)]}.
+
+-type af_binelement(T) :: {'bin_element',
+ anno(),
+ T,
+ af_binelement_size(),
+ type_specifier_list()}.
+
+-type af_binelement_size() :: 'default' | abstract_expr().
+
+-type af_binary_op(T) :: {'op', anno(), binary_op(), T, T}.
+
+-type binary_op() :: '/' | '*' | 'div' | 'rem' | 'band' | 'and' | '+' | '-'
+ | 'bor' | 'bxor' | 'bsl' | 'bsr' | 'or' | 'xor' | '++'
+ | '--' | '==' | '/=' | '=<' | '<' | '>=' | '>' | '=:='
+ | '=/='.
+
+-type af_unary_op(T) :: {'op', anno(), unary_op(), T}.
+
+-type unary_op() :: '+' | '*' | 'bnot' | 'not'.
+
+%% See also lib/stdlib/{src/erl_bits.erl,include/erl_bits.hrl}.
+-type type_specifier_list() :: 'default' | [type_specifier(), ...].
+
+-type type_specifier() :: type()
+ | signedness()
+ | endianness()
+ | unit().
+
+-type type() :: 'integer'
+ | 'float'
+ | 'binary'
+ | 'bytes'
+ | 'bitstring'
+ | 'bits'
+ | 'utf8'
+ | 'utf16'
+ | 'utf32'.
+
+-type signedness() :: 'signed' | 'unsigned'.
+
+-type endianness() :: 'big' | 'little' | 'native'.
+
+-type unit() :: {'unit', 1..256}.
+
+-type record_name() :: atom().
+
+-type af_field_name() :: af_atom().
+
+-type function_name() :: atom().
+
+-type type_name() :: atom().
+
+-type form_info() :: {'eof', erl_anno:line()}
+ | {'error', erl_scan:error_info() | error_info()}
+ | {'warning', erl_scan:error_info() | error_info()}.
+
+%% End of Abstract Format
%% XXX. To be refined.
--type abstract_clause() :: term().
--type abstract_expr() :: term().
--type abstract_form() :: term().
-type error_description() :: term().
-type error_info() :: {erl_anno:line(), module(), error_description()}.
-type token() :: erl_scan:token().
@@ -639,14 +1047,8 @@ build_type_spec({Kind,Aa}, {SpecFun, TypeSpecs})
{atom, _, Fun} ->
{Fun, find_arity_from_specs(TypeSpecs)};
{{atom,_, Mod}, {atom,_, Fun}} ->
- {Mod,Fun,find_arity_from_specs(TypeSpecs)};
- {{atom, _, Fun}, {integer, _, Arity}} ->
- %% Old style spec. Allow this for now.
- {Fun,Arity};
- {{atom,_, Mod}, {atom, _, Fun}, {integer, _, Arity}} ->
- %% Old style spec. Allow this for now.
- {Mod,Fun,Arity}
- end,
+ {Mod,Fun,find_arity_from_specs(TypeSpecs)}
+ end,
{attribute,Aa,Kind,{NewSpecFun, TypeSpecs}}.
find_arity_from_specs([Spec|_]) ->
@@ -795,31 +1197,11 @@ record_fields([{match,_Am,{atom,Aa,A},Expr}|Fields]) ->
[{record_field,Aa,{atom,Aa,A},Expr}|record_fields(Fields)];
record_fields([{typed,Expr,TypeInfo}|Fields]) ->
[Field] = record_fields([Expr]),
- TypeInfo1 =
- case Expr of
- {match, _, _, _} -> TypeInfo; %% If we have an initializer.
- {atom, Aa, _} ->
- case has_undefined(TypeInfo) of
- false ->
- lift_unions(abstract2(undefined, Aa), TypeInfo);
- true ->
- TypeInfo
- end
- end,
- [{typed_record_field,Field,TypeInfo1}|record_fields(Fields)];
+ [{typed_record_field,Field,TypeInfo}|record_fields(Fields)];
record_fields([Other|_Fields]) ->
ret_err(?anno(Other), "bad record field");
record_fields([]) -> [].
-has_undefined({atom,_,undefined}) ->
- true;
-has_undefined({ann_type,_,[_,T]}) ->
- has_undefined(T);
-has_undefined({type,_,union,Ts}) ->
- lists:any(fun has_undefined/1, Ts);
-has_undefined(_) ->
- false.
-
term(Expr) ->
try normalise(Expr)
catch _:_R -> ret_err(?anno(Expr), "bad attribute")
@@ -1118,47 +1500,31 @@ type_preop_prec('-') -> {600,700};
type_preop_prec('bnot') -> {600,700};
type_preop_prec('#') -> {700,800}.
-%%% [Experimental]. The parser just copies the attributes of the
-%%% scanner tokens to the abstract format. This design decision has
-%%% been hidden to some extent: use set_line() and get_attribute() to
-%%% access the second element of (almost all) of the abstract format
-%%% tuples. A typical use is to negate line numbers to prevent the
-%%% compiler from emitting warnings and errors. The second element can
-%%% (of course) be set to any value, but then these functions no
-%%% longer apply. To get all present attributes as a property list
-%%% get_attributes() should be used.
-
--compile({nowarn_deprecated_function,{erl_scan,set_attribute,3}}).
-set_line(L, F) ->
- erl_scan:set_attribute(line, L, F).
-
--compile({nowarn_deprecated_function,{erl_scan,attributes_info,2}}).
-get_attribute(L, Name) ->
- erl_scan:attributes_info(L, Name).
-
--compile({nowarn_deprecated_function,{erl_scan,attributes_info,1}}).
-get_attributes(L) ->
- erl_scan:attributes_info(L).
+-type erl_parse_tree() :: abstract_clause()
+ | abstract_expr()
+ | abstract_form()
+ | abstract_type().
-spec map_anno(Fun, Abstr) -> NewAbstr when
- Fun :: fun((Anno) -> Anno),
+ Fun :: fun((Anno) -> NewAnno),
Anno :: erl_anno:anno(),
- Abstr :: abstract_form() | abstract_expr(),
- NewAbstr :: abstract_form() | abstract_expr().
+ NewAnno :: erl_anno:anno(),
+ Abstr :: erl_parse_tree(),
+ NewAbstr :: erl_parse_tree().
map_anno(F0, Abstr) ->
F = fun(A, Acc) -> {F0(A), Acc} end,
{NewAbstr, []} = modify_anno1(Abstr, [], F),
NewAbstr.
--spec fold_anno(Fun, Acc0, Abstr) -> NewAbstr when
+-spec fold_anno(Fun, Acc0, Abstr) -> Acc1 when
Fun :: fun((Anno, AccIn) -> AccOut),
Anno :: erl_anno:anno(),
Acc0 :: term(),
+ Acc1 :: term(),
AccIn :: term(),
AccOut :: term(),
- Abstr :: abstract_form() | abstract_expr(),
- NewAbstr :: abstract_form() | abstract_expr().
+ Abstr :: erl_parse_tree().
fold_anno(F0, Acc0, Abstr) ->
F = fun(A, Acc) -> {A, F0(A, Acc)} end,
@@ -1166,32 +1532,35 @@ fold_anno(F0, Acc0, Abstr) ->
NewAcc.
-spec mapfold_anno(Fun, Acc0, Abstr) -> {NewAbstr, Acc1} when
- Fun :: fun((Anno, AccIn) -> {Anno, AccOut}),
+ Fun :: fun((Anno, AccIn) -> {NewAnno, AccOut}),
Anno :: erl_anno:anno(),
+ NewAnno :: erl_anno:anno(),
Acc0 :: term(),
Acc1 :: term(),
AccIn :: term(),
AccOut :: term(),
- Abstr :: abstract_form() | abstract_expr(),
- NewAbstr :: abstract_form() | abstract_expr().
+ Abstr :: erl_parse_tree(),
+ NewAbstr :: erl_parse_tree().
mapfold_anno(F, Acc0, Abstr) ->
modify_anno1(Abstr, Acc0, F).
-spec new_anno(Term) -> Abstr when
Term :: term(),
- Abstr :: abstract_form() | abstract_expr().
+ Abstr :: erl_parse_tree().
new_anno(Term) ->
- map_anno(fun erl_anno:new/1, Term).
+ F = fun(L, Acc) -> {erl_anno:new(L), Acc} end,
+ {NewAbstr, []} = modify_anno1(Term, [], F),
+ NewAbstr.
-spec anno_to_term(Abstr) -> term() when
- Abstr :: abstract_form() | abstract_expr().
+ Abstr :: erl_parse_tree().
anno_to_term(Abstract) ->
map_anno(fun erl_anno:to_term/1, Abstract).
--spec anno_from_term(Term) -> abstract_form() | abstract_expr() when
+-spec anno_from_term(Term) -> erl_parse_tree() when
Term :: term().
anno_from_term(Term) ->
diff --git a/lib/stdlib/src/erl_posix_msg.erl b/lib/stdlib/src/erl_posix_msg.erl
index 5eac230631..bfafca1ff7 100644
--- a/lib/stdlib/src/erl_posix_msg.erl
+++ b/lib/stdlib/src/erl_posix_msg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/erl_pp.erl b/lib/stdlib/src/erl_pp.erl
index c5177aca90..d30cd508c1 100644
--- a/lib/stdlib/src/erl_pp.erl
+++ b/lib/stdlib/src/erl_pp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -70,19 +70,19 @@
%%%
-spec(form(Form) -> io_lib:chars() when
- Form :: erl_parse:abstract_form()).
+ Form :: erl_parse:abstract_form() | erl_parse:form_info()).
form(Thing) ->
form(Thing, none).
-spec(form(Form, Options) -> io_lib:chars() when
- Form :: erl_parse:abstract_form(),
+ Form :: erl_parse:abstract_form() | erl_parse:form_info(),
Options :: options()).
form(Thing, Options) ->
?TEST(Thing),
State = state(Options),
- frmt(lform(Thing, options(Options), State), State).
+ frmt(lform(Thing, options(Options)), State).
-spec(attribute(Attribute) -> io_lib:chars() when
Attribute :: erl_parse:abstract_form()).
@@ -97,7 +97,7 @@ attribute(Thing) ->
attribute(Thing, Options) ->
?TEST(Thing),
State = state(Options),
- frmt(lattribute(Thing, options(Options), State), State).
+ frmt(lattribute(Thing, options(Options)), State).
-spec(function(Function) -> io_lib:chars() when
Function :: erl_parse:abstract_form()).
@@ -217,55 +217,55 @@ encoding(Options) ->
unicode -> unicode
end.
-lform({attribute,Line,Name,Arg}, Opts, State) ->
- lattribute({attribute,Line,Name,Arg}, Opts, State);
-lform({function,Line,Name,Arity,Clauses}, Opts, _State) ->
+lform({attribute,Line,Name,Arg}, Opts) ->
+ lattribute({attribute,Line,Name,Arg}, Opts);
+lform({function,Line,Name,Arity,Clauses}, Opts) ->
lfunction({function,Line,Name,Arity,Clauses}, Opts);
%% These are specials to make it easier for the compiler.
-lform({error,E}, _Opts, _State) ->
+lform({error,E}, _Opts) ->
leaf(format("~p\n", [{error,E}]));
-lform({warning,W}, _Opts, _State) ->
+lform({warning,W}, _Opts) ->
leaf(format("~p\n", [{warning,W}]));
-lform({eof,_Line}, _Opts, _State) ->
+lform({eof,_Line}, _Opts) ->
$\n.
-lattribute({attribute,_Line,type,Type}, Opts, _State) ->
+lattribute({attribute,_Line,type,Type}, Opts) ->
[typeattr(type, Type, Opts),leaf(".\n")];
-lattribute({attribute,_Line,opaque,Type}, Opts, _State) ->
+lattribute({attribute,_Line,opaque,Type}, Opts) ->
[typeattr(opaque, Type, Opts),leaf(".\n")];
-lattribute({attribute,_Line,spec,Arg}, _Opts, _State) ->
+lattribute({attribute,_Line,spec,Arg}, _Opts) ->
[specattr(spec, Arg),leaf(".\n")];
-lattribute({attribute,_Line,callback,Arg}, _Opts, _State) ->
+lattribute({attribute,_Line,callback,Arg}, _Opts) ->
[specattr(callback, Arg),leaf(".\n")];
-lattribute({attribute,_Line,Name,Arg}, Opts, State) ->
- [lattribute(Name, Arg, Opts, State),leaf(".\n")].
+lattribute({attribute,_Line,Name,Arg}, Opts) ->
+ [lattribute(Name, Arg, Opts),leaf(".\n")].
-lattribute(module, {M,Vs}, _Opts, _State) ->
+lattribute(module, {M,Vs}, _Opts) ->
A = a0(),
attr("module",[{var,A,pname(M)},
foldr(fun(V, C) -> {cons,A,{var,A,V},C}
end, {nil,A}, Vs)]);
-lattribute(module, M, _Opts, _State) ->
+lattribute(module, M, _Opts) ->
attr("module", [{var,a0(),pname(M)}]);
-lattribute(export, Falist, _Opts, _State) ->
+lattribute(export, Falist, _Opts) ->
call({var,a0(),"-export"}, [falist(Falist)], 0, options(none));
-lattribute(import, Name, _Opts, _State) when is_list(Name) ->
+lattribute(import, Name, _Opts) when is_list(Name) ->
attr("import", [{var,a0(),pname(Name)}]);
-lattribute(import, {From,Falist}, _Opts, _State) ->
+lattribute(import, {From,Falist}, _Opts) ->
attr("import",[{var,a0(),pname(From)},falist(Falist)]);
-lattribute(export_type, Talist, _Opts, _State) ->
+lattribute(export_type, Talist, _Opts) ->
call({var,a0(),"-export_type"}, [falist(Talist)], 0, options(none));
-lattribute(optional_callbacks, Falist, Opts, _State) ->
+lattribute(optional_callbacks, Falist, Opts) ->
ArgL = try falist(Falist)
catch _:_ -> abstract(Falist, Opts)
end,
call({var,a0(),"-optional_callbacks"}, [ArgL], 0, options(none));
-lattribute(file, {Name,Line}, _Opts, State) ->
- attr("file", [{var,a0(),(State#pp.string_fun)(Name)},{integer,a0(),Line}]);
-lattribute(record, {Name,Is}, Opts, _State) ->
+lattribute(file, {Name,Line}, _Opts) ->
+ attr("file", [{string,a0(),Name},{integer,a0(),Line}]);
+lattribute(record, {Name,Is}, Opts) ->
Nl = leaf(format("-record(~w,", [Name])),
[{first,Nl,record_fields(Is, Opts)},$)];
-lattribute(Name, Arg, Options, _State) ->
+lattribute(Name, Arg, Options) ->
attr(write(Name), [abstract(Arg, Options)]).
abstract(Arg, #options{encoding = Encoding}) ->
@@ -348,7 +348,9 @@ map_pair_types(Fs) ->
tuple_type(Fs, fun map_pair_type/2).
map_pair_type({type,_Line,map_field_assoc,[KType,VType]}, Prec) ->
- {list,[{cstep,[ltype(KType, Prec),leaf(" =>")],ltype(VType, Prec)}]}.
+ {list,[{cstep,[ltype(KType, Prec),leaf(" =>")],ltype(VType, Prec)}]};
+map_pair_type({type,_Line,map_field_exact,[KType,VType]}, Prec) ->
+ {list,[{cstep,[ltype(KType, Prec),leaf(" :=")],ltype(VType, Prec)}]}.
record_type(Name, Fields) ->
{first,[record_name(Name)],field_types(Fields)}.
diff --git a/lib/stdlib/src/erl_scan.erl b/lib/stdlib/src/erl_scan.erl
index d2f53816b8..47223b129c 100644
--- a/lib/stdlib/src/erl_scan.erl
+++ b/lib/stdlib/src/erl_scan.erl
@@ -52,25 +52,15 @@
%%% External exports
-export([string/1,string/2,string/3,tokens/3,tokens/4,
- format_error/1,reserved_word/1,
- token_info/1,token_info/2,
- attributes_info/1,attributes_info/2,set_attribute/3]).
+ format_error/1,reserved_word/1]).
-export([column/1,end_location/1,line/1,location/1,text/1,
category/1,symbol/1]).
--deprecated([{attributes_info, 1, next_major_release},
- {attributes_info, 2, next_major_release},
- {set_attribute, 3, next_major_release},
- {token_info, 1, next_major_release},
- {token_info, 2, next_major_release}]).
-
%%% Private
-export([continuation_location/1]).
-export_type([error_info/0,
- line/0,
- location/0,
options/0,
return_cont/0,
token/0,
@@ -85,29 +75,18 @@
-define(ALINE(L), is_integer(L)).
-define(STRING(S), is_list(S)).
-define(RESWORDFUN(F), is_function(F, 1)).
--define(SETATTRFUN(F), is_function(F, 1)).
-type category() :: atom().
--type column() :: pos_integer(). % Deprecated
--type line() :: integer(). % Deprecated
--type location() :: line() | {line(),column()}. % Deprecated
-type resword_fun() :: fun((atom()) -> boolean()).
-type option() :: 'return' | 'return_white_spaces' | 'return_comments'
| 'text' | {'reserved_word_fun', resword_fun()}.
-type options() :: option() | [option()].
-type symbol() :: atom() | float() | integer() | string().
--type info_line() :: integer() | term().
--type attributes_data()
- :: [{'column', column()} | {'line', info_line()} | {'text', string()}]
- | {line(), column()}.
-%% The fact that {line(),column()} is a possible attributes() type
-%% is hidden.
--type attributes() :: line() | attributes_data().
--type token() :: {category(), attributes(), symbol()}
- | {category(), attributes()}.
+-type token() :: {category(), Anno :: erl_anno:anno(), symbol()}
+ | {category(), Anno :: erl_anno:anno()}.
-type tokens() :: [token()].
-type error_description() :: term().
--type error_info() :: {location(), module(), error_description()}.
+-type error_info() :: {erl_anno:location(), module(), error_description()}.
%%% Local record.
-record(erl_scan,
@@ -136,8 +115,8 @@ format_error(Other) ->
String :: string(),
Return :: {'ok', Tokens :: tokens(), EndLocation}
| {'error', ErrorInfo :: error_info(), ErrorLocation},
- EndLocation :: location(),
- ErrorLocation :: location().
+ EndLocation :: erl_anno:location(),
+ ErrorLocation :: erl_anno:location().
string(String) ->
string(String, 1, []).
@@ -145,9 +124,9 @@ string(String) ->
String :: string(),
Return :: {'ok', Tokens :: tokens(), EndLocation}
| {'error', ErrorInfo :: error_info(), ErrorLocation},
- StartLocation :: location(),
- EndLocation :: location(),
- ErrorLocation :: location().
+ StartLocation :: erl_anno:location(),
+ EndLocation :: erl_anno:location(),
+ ErrorLocation :: erl_anno:location().
string(String, StartLocation) ->
string(String, StartLocation, []).
@@ -156,9 +135,9 @@ string(String, StartLocation) ->
Options :: options(),
Return :: {'ok', Tokens :: tokens(), EndLocation}
| {'error', ErrorInfo :: error_info(), ErrorLocation},
- StartLocation :: location(),
- EndLocation :: location(),
- ErrorLocation :: location().
+ StartLocation :: erl_anno:location(),
+ EndLocation :: erl_anno:location(),
+ ErrorLocation :: erl_anno:location().
string(String, Line, Options) when ?STRING(String), ?ALINE(Line) ->
string1(String, options(Options), Line, no_col, []);
string(String, {Line,Column}, Options) when ?STRING(String),
@@ -167,20 +146,23 @@ string(String, {Line,Column}, Options) when ?STRING(String),
string1(String, options(Options), Line, Column, []).
-type char_spec() :: string() | 'eof'.
--type cont_fun() :: fun((char_spec(), #erl_scan{}, line(), column(),
+-type cont_fun() :: fun((char_spec(), #erl_scan{},
+ erl_anno:line(), erl_anno:column(),
tokens(), any()) -> any()).
-opaque return_cont() :: {erl_scan_continuation,
- string(), column(), tokens(), line(),
+ string(), erl_anno:column(), tokens(),
+ erl_anno:line(),
#erl_scan{}, any(), cont_fun()}.
--type tokens_result() :: {'ok', Tokens :: tokens(), EndLocation :: location()}
- | {'eof', EndLocation :: location()}
+-type tokens_result() :: {'ok', Tokens :: tokens(),
+ EndLocation :: erl_anno:location()}
+ | {'eof', EndLocation :: erl_anno:location()}
| {'error', ErrorInfo :: error_info(),
- EndLocation :: location()}.
+ EndLocation :: erl_anno:location()}.
-spec tokens(Continuation, CharSpec, StartLocation) -> Return when
Continuation :: return_cont() | [],
CharSpec :: char_spec(),
- StartLocation :: location(),
+ StartLocation :: erl_anno:location(),
Return :: {'done',Result :: tokens_result(),LeftOverChars :: char_spec()}
| {'more', Continuation1 :: return_cont()}.
tokens(Cont, CharSpec, StartLocation) ->
@@ -189,7 +171,7 @@ tokens(Cont, CharSpec, StartLocation) ->
-spec tokens(Continuation, CharSpec, StartLocation, Options) -> Return when
Continuation :: return_cont() | [],
CharSpec :: char_spec(),
- StartLocation :: location(),
+ StartLocation :: erl_anno:location(),
Options :: options(),
Return :: {'done',Result :: tokens_result(),LeftOverChars :: char_spec()}
| {'more', Continuation1 :: return_cont()}.
@@ -257,155 +239,6 @@ symbol({_Category,_Anno,Symbol}) ->
symbol(T) ->
erlang:error(badarg, [T]).
--type attribute_item() :: 'column' | 'length' | 'line'
- | 'location' | 'text'.
--type info_location() :: location() | term().
--type attribute_info() :: {'column', column()}| {'length', pos_integer()}
- | {'line', info_line()}
- | {'location', info_location()}
- | {'text', string()}.
--type token_item() :: 'category' | 'symbol' | attribute_item().
--type token_info() :: {'category', category()} | {'symbol', symbol()}
- | attribute_info().
-
--spec token_info(Token) -> TokenInfo when
- Token :: token(),
- TokenInfo :: [TokenInfoTuple :: token_info()].
-token_info(Token) ->
- Items = [category,column,length,line,symbol,text], % undefined order
- token_info(Token, Items).
-
--spec token_info(Token, TokenItem) -> TokenInfoTuple | 'undefined' when
- Token :: token(),
- TokenItem :: token_item(),
- TokenInfoTuple :: token_info();
- (Token, TokenItems) -> TokenInfo when
- Token :: token(),
- TokenItems :: [TokenItem :: token_item()],
- TokenInfo :: [TokenInfoTuple :: token_info()].
-token_info(_Token, []) ->
- [];
-token_info(Token, [Item|Items]) when is_atom(Item) ->
- case token_info(Token, Item) of
- undefined ->
- token_info(Token, Items);
- TokenInfo when is_tuple(TokenInfo) ->
- [TokenInfo|token_info(Token, Items)]
- end;
-token_info({Category,_Attrs}, category=Item) ->
- {Item,Category};
-token_info({Category,_Attrs,_Symbol}, category=Item) ->
- {Item,Category};
-token_info({Category,_Attrs}, symbol=Item) ->
- {Item,Category};
-token_info({_Category,_Attrs,Symbol}, symbol=Item) ->
- {Item,Symbol};
-token_info({_Category,Attrs}, Item) ->
- attributes_info(Attrs, Item);
-token_info({_Category,Attrs,_Symbol}, Item) ->
- attributes_info(Attrs, Item).
-
--spec attributes_info(Attributes) -> AttributesInfo when
- Attributes :: attributes(),
- AttributesInfo :: [AttributeInfoTuple :: attribute_info()].
-attributes_info(Attributes) ->
- Items = [column,length,line,text], % undefined order
- attributes_info(Attributes, Items).
-
--spec attributes_info
- (Attributes, AttributeItem) -> AttributeInfoTuple | 'undefined' when
- Attributes :: attributes(),
- AttributeItem :: attribute_item(),
- AttributeInfoTuple :: attribute_info();
- (Attributes, AttributeItems) -> AttributeInfo when
- Attributes :: attributes(),
- AttributeItems :: [AttributeItem :: attribute_item()],
- AttributeInfo :: [AttributeInfoTuple :: attribute_info()].
-attributes_info(_Attrs, []) ->
- [];
-attributes_info(Attrs, [A|As]) when is_atom(A) ->
- case attributes_info(Attrs, A) of
- undefined ->
- attributes_info(Attrs, As);
- AttributeInfo when is_tuple(AttributeInfo) ->
- [AttributeInfo|attributes_info(Attrs, As)]
- end;
-attributes_info({Line,Column}, column=Item) when ?ALINE(Line),
- ?COLUMN(Column) ->
- {Item,Column};
-attributes_info(Line, column) when ?ALINE(Line) ->
- undefined;
-attributes_info(Attrs, column=Item) ->
- case attr_info(Attrs, Item) of
- undefined ->
- case erl_anno:column(Attrs) of
- undefined ->
- undefined;
- Column ->
- {Item,Column}
- end;
- T ->
- T
- end;
-attributes_info(Attrs, length=Item) ->
- case attributes_info(Attrs, text) of
- undefined ->
- undefined;
- {text,Text} ->
- {Item,length(Text)}
- end;
-attributes_info(Line, line=Item) when ?ALINE(Line) ->
- {Item,Line};
-attributes_info({Line,Column}, line=Item) when ?ALINE(Line),
- ?COLUMN(Column) ->
- {Item,Line};
-attributes_info(Attrs, line=Item) ->
- case attr_info(Attrs, Item) of
- undefined ->
- case attr_info(Attrs, location) of
- {location,{Line,_Column}} ->
- {Item,Line};
- {location,Line} ->
- {Item,Line};
- undefined ->
- undefined
- end;
- T ->
- T
- end;
-attributes_info({Line,Column}=Location, location=Item) when ?ALINE(Line),
- ?COLUMN(Column) ->
- {Item,Location};
-attributes_info(Line, location=Item) when ?ALINE(Line) ->
- {Item,Line};
-attributes_info(Attrs, location=Item) ->
- {line,Line} = attributes_info(Attrs, line),
- case attributes_info(Attrs, column) of
- undefined ->
- %% If set_attribute() has assigned a term such as {17,42}
- %% to 'line', then Line will look like {Line,Column}. One
- %% should not use 'location' but 'line' and 'column' in
- %% such special cases.
- {Item,Line};
- {column,Column} ->
- {Item,{Line,Column}}
- end;
-attributes_info({Line,Column}, text) when ?ALINE(Line), ?COLUMN(Column) ->
- undefined;
-attributes_info(Line, text) when ?ALINE(Line) ->
- undefined;
-attributes_info(Attrs, text=Item) ->
- attr_info(Attrs, Item);
-attributes_info(T1, T2) ->
- erlang:error(badarg, [T1,T2]).
-
--spec set_attribute(AttributeItem, Attributes, SetAttributeFun) -> Attributes when
- AttributeItem :: 'line',
- Attributes :: attributes(),
- SetAttributeFun :: fun((info_line()) -> info_line()).
-set_attribute(Tag, Attributes, Fun) when ?SETATTRFUN(Fun) ->
- set_attr(Tag, Attributes, Fun).
-
%%%
%%% Local functions
%%%
@@ -471,62 +304,6 @@ expand_opt(return, Os) ->
expand_opt(O, Os) ->
[O|Os].
-attr_info(Attrs, Item) ->
- try lists:keyfind(Item, 1, Attrs) of
- {_Item, _Value} = T ->
- T;
- false ->
- undefined
- catch
- _:_ ->
- erlang:error(badarg, [Attrs, Item])
- end.
-
--spec set_attr('line', attributes(), fun((line()) -> line())) -> attributes().
-
-set_attr(line, Line, Fun) when ?ALINE(Line) ->
- Ln = Fun(Line),
- if
- ?ALINE(Ln) ->
- Ln;
- true ->
- [{line,Ln}]
- end;
-set_attr(line, {Line,Column}, Fun) when ?ALINE(Line), ?COLUMN(Column) ->
- Ln = Fun(Line),
- if
- ?ALINE(Ln) ->
- {Ln,Column};
- true ->
- [{line,Ln},{column,Column}]
- end;
-set_attr(line=Tag, Attrs, Fun) when is_list(Attrs) ->
- case lists:keyfind(Tag, 1, Attrs) of
- {line,Line} ->
- case lists:keyreplace(Tag, 1, Attrs, {line,Fun(Line)}) of
- [{line,Ln}] when ?ALINE(Ln) ->
- Ln;
- As ->
- As
- end;
- false ->
- {location, Location} = lists:keyfind(location, 1, Attrs),
- Ln = case Location of
- {Line,Column} when ?ALINE(Line), ?COLUMN(Column) ->
- {Fun(Line),Column};
- _ ->
- Fun(Location)
- end,
- case lists:keyreplace(location, 1, Attrs, {location,Ln}) of
- [{location,Ln}] when ?ALINE(Ln) ->
- Ln;
- As ->
- As
- end
- end;
-set_attr(T1, T2, T3) ->
- erlang:error(badarg, [T1,T2,T3]).
-
tokens1(Cs, St, Line, Col, Toks, Fun, Any) when ?STRING(Cs); Cs =:= eof ->
case Fun(Cs, St, Line, Col, Toks, Any) of
{more,{Cs0,Ncol,Ntoks,Nline,Nany,Nfun}} ->
diff --git a/lib/stdlib/src/erl_tar.erl b/lib/stdlib/src/erl_tar.erl
index d0e7a827a8..a383a0fc67 100644
--- a/lib/stdlib/src/erl_tar.erl
+++ b/lib/stdlib/src/erl_tar.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/error_logger_file_h.erl b/lib/stdlib/src/error_logger_file_h.erl
index fea1656051..665685d3ee 100644
--- a/lib/stdlib/src/error_logger_file_h.erl
+++ b/lib/stdlib/src/error_logger_file_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/error_logger_tty_h.erl b/lib/stdlib/src/error_logger_tty_h.erl
index d2df6681e3..cb22a8c0b6 100644
--- a/lib/stdlib/src/error_logger_tty_h.erl
+++ b/lib/stdlib/src/error_logger_tty_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/escript.erl b/lib/stdlib/src/escript.erl
index 41b49f4a86..f53b0e2246 100644
--- a/lib/stdlib/src/escript.erl
+++ b/lib/stdlib/src/escript.erl
@@ -38,7 +38,7 @@
-record(state, {file :: file:filename(),
module :: module(),
forms_or_bin,
- source :: source(),
+ source :: source() | 'undefined',
n_errors :: non_neg_integer(),
mode :: mode(),
exports_main :: boolean(),
@@ -49,9 +49,9 @@
-type emu_args() :: string().
-record(sections, {type,
- shebang :: shebang(),
- comment :: comment(),
- emu_args :: emu_args(),
+ shebang :: shebang() | 'undefined',
+ comment :: comment() | 'undefined',
+ emu_args :: emu_args() | 'undefined',
body}).
-record(extract_options, {compile_source}).
@@ -906,6 +906,7 @@ anno(L) ->
fatal(Str) ->
throw(Str).
+-spec my_halt(_) -> no_return().
my_halt(Reason) ->
erlang:halt(Reason).
diff --git a/lib/stdlib/src/ets.erl b/lib/stdlib/src/ets.erl
index 1fca3624dc..20de06fd0b 100644
--- a/lib/stdlib/src/ets.erl
+++ b/lib/stdlib/src/ets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -232,20 +232,20 @@ match(_) ->
match_object(_, _) ->
erlang:nif_error(undef).
--spec match_object(Tab, Pattern, Limit) -> {[Match], Continuation} |
+-spec match_object(Tab, Pattern, Limit) -> {[Object], Continuation} |
'$end_of_table' when
Tab :: tab(),
Pattern :: match_pattern(),
Limit :: pos_integer(),
- Match :: [term()],
+ Object :: tuple(),
Continuation :: continuation().
match_object(_, _, _) ->
erlang:nif_error(undef).
--spec match_object(Continuation) -> {[Match], Continuation} |
+-spec match_object(Continuation) -> {[Object], Continuation} |
'$end_of_table' when
- Match :: [term()],
+ Object :: tuple(),
Continuation :: continuation().
match_object(_) ->
diff --git a/lib/stdlib/src/eval_bits.erl b/lib/stdlib/src/eval_bits.erl
index b3698fb3f5..80667023fb 100644
--- a/lib/stdlib/src/eval_bits.erl
+++ b/lib/stdlib/src/eval_bits.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/file_sorter.erl b/lib/stdlib/src/file_sorter.erl
index 0d50392b96..3aeaff8dc4 100644
--- a/lib/stdlib/src/file_sorter.erl
+++ b/lib/stdlib/src/file_sorter.erl
@@ -307,7 +307,6 @@ options(Option) ->
options([{format, Format} | L], Opts) when Format =:= binary;
Format =:= term;
- is_function(Format),
is_function(Format, 1) ->
options(L, Opts#opts{format = Format});
options([{format, binary_term} | L], Opts) ->
@@ -326,7 +325,7 @@ options([{tmpdir, Dir} | L], Opts) ->
FileName ->
options(L, Opts#opts{tmpdir = {dir, FileName}})
end;
-options([{order, Fun} | L], Opts) when is_function(Fun), is_function(Fun, 2) ->
+options([{order, Fun} | L], Opts) when is_function(Fun, 2) ->
options(L, Opts#opts{order = Fun});
options([{order, Order} | L], Opts) when Order =:= ascending;
Order =:= descending ->
@@ -411,7 +410,7 @@ merge_terms_fun(RFun) ->
case RFun(read) of
end_of_input ->
eof;
- {Objs, NRFun} when is_function(NRFun), is_function(NRFun, 1) ->
+ {Objs, NRFun} when is_function(NRFun, 1) ->
{_, [], Ts, _} = fun_objs(Objs, [], 0, ?MAXSIZE, I, W),
{{I, Ts, ?CHUNKSIZE}, merge_terms_fun(NRFun)};
Error ->
@@ -427,13 +426,12 @@ merge_bins_fun(FileName) ->
Fun(A)
end.
-wrap_output_terms(term, OutFun, _Z) when is_function(OutFun),
- is_function(OutFun, 1) ->
+wrap_output_terms(term, OutFun, _Z) when is_function(OutFun, 1) ->
{fun_wterms(OutFun), true};
wrap_output_terms(term, File, Z) when File =/= undefined ->
{file_wterms(name, File, Z++[write]), false};
wrap_output_terms(_Format, Output, _Z) ->
- {Output, is_function(Output) and is_function(Output, 1)}.
+ {Output, is_function(Output, 1)}.
binary_term_fun() ->
fun binary_to_term/1.
@@ -1311,8 +1309,7 @@ infun(W) ->
{end_of_input, W1};
{end_of_input, Value} ->
{end_of_input, W1#w{inout_value = {value, Value}}};
- {Objs, NFun} when is_function(NFun),
- is_function(NFun, 1),
+ {Objs, NFun} when is_function(NFun, 1),
is_list(Objs) ->
{cont, W#w{in = NFun}, Objs};
Error ->
@@ -1335,7 +1332,7 @@ outfun(A, W) ->
try (W#w.out)(A) of
Reply when A =:= close ->
Reply;
- NF when is_function(NF), is_function(NF, 1) ->
+ NF when is_function(NF, 1) ->
W#w{out = NF};
Error ->
error(Error, W1)
@@ -1360,7 +1357,7 @@ is_keyposs([Bad | _]) ->
is_keyposs(Bad) ->
{badarg, Bad}.
-is_input(Fun) when is_function(Fun), is_function(Fun, 1) ->
+is_input(Fun) when is_function(Fun, 1) ->
{true, Fun};
is_input(Files) ->
is_files(Files).
@@ -1380,7 +1377,7 @@ is_files([], L) ->
is_files(Bad, _L) ->
{badarg, Bad}.
-maybe_output(Fun) when is_function(Fun), is_function(Fun, 1) ->
+maybe_output(Fun) when is_function(Fun, 1) ->
{true, Fun};
maybe_output(File) ->
case read_file_info(File) of
@@ -1589,7 +1586,6 @@ fun_rterms(InFun) ->
(read) ->
case InFun(read) of
{Ts, NInFun} when is_list(Ts),
- is_function(NInFun),
is_function(NInFun, 1) ->
{to_bin(Ts, []), fun_rterms(NInFun)};
Else ->
@@ -1602,7 +1598,7 @@ fun_wterms(OutFun) ->
OutFun(close);
(L) ->
case OutFun(wterms_arg(L)) of
- NOutFun when is_function(NOutFun), is_function(NOutFun, 1) ->
+ NOutFun when is_function(NOutFun, 1) ->
fun_wterms(NOutFun);
Else ->
Else
diff --git a/lib/stdlib/src/filelib.erl b/lib/stdlib/src/filelib.erl
index 51ffd1cff9..7029389e2f 100644
--- a/lib/stdlib/src/filelib.erl
+++ b/lib/stdlib/src/filelib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/filename.erl b/lib/stdlib/src/filename.erl
index 008beb8b67..c4586171ca 100644
--- a/lib/stdlib/src/filename.erl
+++ b/lib/stdlib/src/filename.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,6 +36,7 @@
extension/1, join/1, join/2, pathtype/1,
rootname/1, rootname/2, split/1, nativename/1]).
-export([find_src/1, find_src/2, flatten/1]).
+-export([basedir/2, basedir/3]).
%% Undocumented and unsupported exports.
-export([append/2]).
@@ -139,6 +140,7 @@ absname_join(AbsBase, Name) ->
-spec basename(Filename) -> file:filename_all() when
Filename :: file:name_all().
+
basename(Name) when is_binary(Name) ->
case os:type() of
{win32,_} ->
@@ -954,3 +956,180 @@ filename_string_to_binary(List) ->
Bin
end.
+%% Application Base Directories
+%% basedir
+%% http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+
+-type basedir_type() :: 'user_cache' | 'user_config' | 'user_data'
+ | 'user_log'
+ | 'site_config' | 'site_data'.
+
+-spec basedir(Type,Application) -> file:filename_all() when
+ Type :: basedir_type(),
+ Application :: string() | binary().
+
+basedir(Type,Application) when is_atom(Type), is_list(Application) orelse
+ is_binary(Application) ->
+ basedir(Type, Application, #{}).
+
+-spec basedir(Type,Application,Opts) -> file:filename_all() when
+ Type :: basedir_type(),
+ Application :: string() | binary(),
+ Opts :: #{author => string() | binary(),
+ os => 'windows' | 'darwin' | 'linux',
+ version => string() | binary()}.
+
+basedir(Type,Application,Opts) when is_atom(Type), is_map(Opts),
+ is_list(Application) orelse
+ is_binary(Application) ->
+ Os = basedir_os_from_opts(Opts),
+ Name = basedir_name_from_opts(Os,Application,Opts),
+ Base = basedir_from_os(Type,Os),
+ case {Type,Os} of
+ {user_log,linux} ->
+ filename:join([Base,Name,"log"]);
+ {user_log,windows} ->
+ filename:join([Base,Name,"Logs"]);
+ {user_cache,windows} ->
+ filename:join([Base,Name,"Cache"]);
+ {Type,_} when Type =:= site_config orelse Type =:= site_data ->
+ [filename:join([B,Name]) || B <- Base];
+ _ ->
+ filename:join([Base,Name])
+ end.
+
+basedir_os_from_opts(#{os := linux}) -> linux;
+basedir_os_from_opts(#{os := windows}) -> windows;
+basedir_os_from_opts(#{os := darwin}) -> darwin;
+basedir_os_from_opts(#{}) -> basedir_os_type().
+
+basedir_name_from_opts(windows,App,#{author:=Author,version:=Vsn}) ->
+ filename:join([Author,App,Vsn]);
+basedir_name_from_opts(windows,App,#{author:=Author}) ->
+ filename:join([Author,App]);
+basedir_name_from_opts(_,App,#{version:=Vsn}) ->
+ filename:join([App,Vsn]);
+basedir_name_from_opts(_,App,_) ->
+ App.
+
+basedir_from_os(Type,Os) ->
+ case Os of
+ linux -> basedir_linux(Type);
+ darwin -> basedir_darwin(Type);
+ windows -> basedir_windows(Type)
+ end.
+
+-define(basedir_linux_user_data, ".local/share").
+-define(basedir_linux_user_config, ".config").
+-define(basedir_linux_user_cache, ".cache").
+-define(basedir_linux_user_log, ".cache"). %% .cache/App/log
+-define(basedir_linux_site_data, "/usr/local/share/:/usr/share/").
+-define(basedir_linux_site_config, "/etc/xdg").
+
+basedir_linux(Type) ->
+ case Type of
+ user_data -> getenv("XDG_DATA_HOME", ?basedir_linux_user_data, true);
+ user_config -> getenv("XDG_CONFIG_HOME",?basedir_linux_user_config,true);
+ user_cache -> getenv("XDG_CACHE_HOME", ?basedir_linux_user_cache, true);
+ user_log -> getenv("XDG_CACHE_HOME", ?basedir_linux_user_log, true);
+ site_data ->
+ Base = getenv("XDG_DATA_DIRS",?basedir_linux_site_data,false),
+ string:tokens(Base,":");
+ site_config ->
+ Base = getenv("XDG_CONFIG_DIRS",?basedir_linux_site_config,false),
+ string:tokens(Base,":")
+ end.
+
+-define(basedir_darwin_user_data, "Library/Application Support").
+-define(basedir_darwin_user_config, "Library/Application Support").
+-define(basedir_darwin_user_cache, "Library/Caches").
+-define(basedir_darwin_user_log, "Library/Logs").
+-define(basedir_darwin_site_data, "/Library/Application Support").
+-define(basedir_darwin_site_config, "/Library/Application Support").
+
+basedir_darwin(Type) ->
+ case Type of
+ user_data -> basedir_join_home(?basedir_darwin_user_data);
+ user_config -> basedir_join_home(?basedir_darwin_user_config);
+ user_cache -> basedir_join_home(?basedir_darwin_user_cache);
+ user_log -> basedir_join_home(?basedir_darwin_user_log);
+ site_data -> [?basedir_darwin_site_data];
+ site_config -> [?basedir_darwin_site_config]
+ end.
+
+%% On Windows:
+%% ex. C:\Users\egil\AppData\Local\Ericsson\Erlang
+%% %LOCALAPPDATA% is defined on Windows 7 and onwards
+%% %APPDATA% is used instead of %LOCALAPPDATA% if it's not defined.
+%% %APPDATA% is used for roaming, i.e. for user_config on Windows 7 and beyond.
+%%
+%% user_data %LOCALAPPDATA%[/$author]/$appname[/$version]
+%% user_config %APPDATA%[/$author]/$appname[/$version]
+%% user_cache %LOCALAPPDATA%[/$author]/$appname[/$version]/Cache
+%% user_log %LOCALAPPDATA%[/$author]/$appname[/$version]/Logs
+
+-define(basedir_windows_user_data, "Local").
+-define(basedir_windows_user_config, "Roaming").
+-define(basedir_windows_user_cache, "Local"). %% Cache is added later
+-define(basedir_windows_user_log, "Local"). %% Logs is added later
+
+basedir_windows(Type) ->
+ %% If LOCALAPPDATA is not defined we are likely on an
+ %% XP machine. Use APPDATA instead.
+ case basedir_windows_appdata() of
+ noappdata ->
+ %% No AppData is set
+ %% Probably running MSYS
+ case Type of
+ user_data -> basedir_join_home(?basedir_windows_user_data);
+ user_config -> basedir_join_home(?basedir_windows_user_config);
+ user_cache -> basedir_join_home(?basedir_windows_user_cache);
+ user_log -> basedir_join_home(?basedir_windows_user_log);
+ site_data -> [];
+ site_config -> []
+ end;
+ {ok, AppData} ->
+ case Type of
+ user_data -> getenv("LOCALAPPDATA", AppData);
+ user_config -> AppData;
+ user_cache -> getenv("LOCALAPPDATA", AppData);
+ user_log -> getenv("LOCALAPPDATA", AppData);
+ site_data -> [];
+ site_config -> []
+ end
+ end.
+
+basedir_windows_appdata() ->
+ case os:getenv("APPDATA") of
+ Invalid when Invalid =:= false orelse Invalid =:= [] ->
+ noappdata;
+ Val ->
+ {ok, Val}
+ end.
+
+%% basedir aux
+
+getenv(K,Def,false) -> getenv(K,Def);
+getenv(K,Def,true) -> getenv(K,basedir_join_home(Def)).
+
+getenv(K,Def) ->
+ case os:getenv(K) of
+ [] -> Def;
+ false -> Def;
+ Val -> Val
+ end.
+
+basedir_join_home(Dir) ->
+ case os:getenv("HOME") of
+ false ->
+ {ok,[[Home]]} = init:get_argument(home),
+ filename:join(Home,Dir);
+ Home -> filename:join(Home,Dir)
+ end.
+
+basedir_os_type() ->
+ case os:type() of
+ {unix,darwin} -> darwin;
+ {win32,_} -> windows;
+ _ -> linux
+ end.
diff --git a/lib/stdlib/src/gen.erl b/lib/stdlib/src/gen.erl
index a05c2ce6fd..597830cf9a 100644
--- a/lib/stdlib/src/gen.erl
+++ b/lib/stdlib/src/gen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,8 @@
%%%
%%% The standard behaviour should export init_it/6.
%%%-----------------------------------------------------------------
--export([start/5, start/6, debug_options/1,
+-export([start/5, start/6, debug_options/2,
+ name/1, unregister_name/1, get_proc_name/1, get_parent/0,
call/3, call/4, reply/2, stop/1, stop/3]).
-export([init_it/6, init_it/7]).
@@ -124,7 +125,7 @@ init_it(GenMod, Starter, Parent, Mod, Args, Options) ->
init_it2(GenMod, Starter, Parent, self(), Mod, Args, Options).
init_it(GenMod, Starter, Parent, Name, Mod, Args, Options) ->
- case name_register(Name) of
+ case register_name(Name) of
true ->
init_it2(GenMod, Starter, Parent, Name, Mod, Args, Options);
{false, Pid} ->
@@ -297,19 +298,19 @@ where({global, Name}) -> global:whereis_name(Name);
where({via, Module, Name}) -> Module:whereis_name(Name);
where({local, Name}) -> whereis(Name).
-name_register({local, Name} = LN) ->
+register_name({local, Name} = LN) ->
try register(Name, self()) of
true -> true
catch
error:_ ->
{false, where(LN)}
end;
-name_register({global, Name} = GN) ->
+register_name({global, Name} = GN) ->
case global:register_name(Name, self()) of
yes -> true;
no -> {false, where(GN)}
end;
-name_register({via, Module, Name} = GN) ->
+register_name({via, Module, Name} = GN) ->
case Module:register_name(Name, self()) of
yes ->
true;
@@ -317,34 +318,108 @@ name_register({via, Module, Name} = GN) ->
{false, where(GN)}
end.
+name({local,Name}) -> Name;
+name({global,Name}) -> Name;
+name({via,_, Name}) -> Name;
+name(Pid) when is_pid(Pid) -> Pid.
+
+unregister_name({local,Name}) ->
+ try unregister(Name) of
+ _ -> ok
+ catch
+ _:_ -> ok
+ end;
+unregister_name({global,Name}) ->
+ _ = global:unregister_name(Name),
+ ok;
+unregister_name({via, Mod, Name}) ->
+ _ = Mod:unregister_name(Name),
+ ok;
+unregister_name(Pid) when is_pid(Pid) ->
+ ok.
+
+get_proc_name(Pid) when is_pid(Pid) ->
+ Pid;
+get_proc_name({local, Name}) ->
+ case process_info(self(), registered_name) of
+ {registered_name, Name} ->
+ Name;
+ {registered_name, _Name} ->
+ exit(process_not_registered);
+ [] ->
+ exit(process_not_registered)
+ end;
+get_proc_name({global, Name}) ->
+ case global:whereis_name(Name) of
+ undefined ->
+ exit(process_not_registered_globally);
+ Pid when Pid =:= self() ->
+ Name;
+ _Pid ->
+ exit(process_not_registered_globally)
+ end;
+get_proc_name({via, Mod, Name}) ->
+ case Mod:whereis_name(Name) of
+ undefined ->
+ exit({process_not_registered_via, Mod});
+ Pid when Pid =:= self() ->
+ Name;
+ _Pid ->
+ exit({process_not_registered_via, Mod})
+ end.
+
+get_parent() ->
+ case get('$ancestors') of
+ [Parent | _] when is_pid(Parent) ->
+ Parent;
+ [Parent | _] when is_atom(Parent) ->
+ name_to_pid(Parent);
+ _ ->
+ exit(process_was_not_started_by_proc_lib)
+ end.
+
+name_to_pid(Name) ->
+ case whereis(Name) of
+ undefined ->
+ case global:whereis_name(Name) of
+ undefined ->
+ exit(could_not_find_registered_name);
+ Pid ->
+ Pid
+ end;
+ Pid ->
+ Pid
+ end.
+
timeout(Options) ->
- case opt(timeout, Options) of
- {ok, Time} ->
+ case lists:keyfind(timeout, 1, Options) of
+ {_,Time} ->
Time;
- _ ->
+ false ->
infinity
end.
spawn_opts(Options) ->
- case opt(spawn_opt, Options) of
- {ok, Opts} ->
+ case lists:keyfind(spawn_opt, 1, Options) of
+ {_,Opts} ->
Opts;
- _ ->
+ false ->
[]
end.
-opt(Op, [{Op, Value}|_]) ->
- {ok, Value};
-opt(Op, [_|Options]) ->
- opt(Op, Options);
-opt(_, []) ->
- false.
-
-debug_options(Opts) ->
- case opt(debug, Opts) of
- {ok, Options} -> sys:debug_options(Options);
- _ -> []
+debug_options(Name, Opts) ->
+ case lists:keyfind(debug, 1, Opts) of
+ {_,Options} ->
+ try sys:debug_options(Options)
+ catch _:_ ->
+ error_logger:format(
+ "~p: ignoring erroneous debug options - ~p~n",
+ [Name,Options]),
+ []
+ end;
+ false ->
+ []
end.
format_status_header(TagLine, Pid) when is_pid(Pid) ->
diff --git a/lib/stdlib/src/gen_event.erl b/lib/stdlib/src/gen_event.erl
index 3d63c19de7..ccacf658e9 100644
--- a/lib/stdlib/src/gen_event.erl
+++ b/lib/stdlib/src/gen_event.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -147,16 +147,11 @@ init_it(Starter, self, Name, Mod, Args, Options) ->
init_it(Starter, self(), Name, Mod, Args, Options);
init_it(Starter, Parent, Name0, _, _, Options) ->
process_flag(trap_exit, true),
- Debug = gen:debug_options(Options),
+ Name = gen:name(Name0),
+ Debug = gen:debug_options(Name, Options),
proc_lib:init_ack(Starter, {ok, self()}),
- Name = name(Name0),
loop(Parent, Name, [], Debug, false).
-name({local,Name}) -> Name;
-name({global,Name}) -> Name;
-name({via,_, Name}) -> Name;
-name(Pid) when is_pid(Pid) -> Pid.
-
-spec add_handler(emgr_ref(), handler(), term()) -> term().
add_handler(M, Handler, Args) -> rpc(M, {add_handler, Handler, Args}).
diff --git a/lib/stdlib/src/gen_fsm.erl b/lib/stdlib/src/gen_fsm.erl
index 7eabb95548..6e7528fd98 100644
--- a/lib/stdlib/src/gen_fsm.erl
+++ b/lib/stdlib/src/gen_fsm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -305,64 +305,11 @@ enter_loop(Mod, Options, StateName, StateData, Timeout) ->
enter_loop(Mod, Options, StateName, StateData, self(), Timeout).
enter_loop(Mod, Options, StateName, StateData, ServerName, Timeout) ->
- Name = get_proc_name(ServerName),
- Parent = get_parent(),
- Debug = gen:debug_options(Options),
+ Name = gen:get_proc_name(ServerName),
+ Parent = gen:get_parent(),
+ Debug = gen:debug_options(Name, Options),
loop(Parent, Name, StateName, StateData, Mod, Timeout, Debug).
-get_proc_name(Pid) when is_pid(Pid) ->
- Pid;
-get_proc_name({local, Name}) ->
- case process_info(self(), registered_name) of
- {registered_name, Name} ->
- Name;
- {registered_name, _Name} ->
- exit(process_not_registered);
- [] ->
- exit(process_not_registered)
- end;
-get_proc_name({global, Name}) ->
- case global:whereis_name(Name) of
- undefined ->
- exit(process_not_registered_globally);
- Pid when Pid =:= self() ->
- Name;
- _Pid ->
- exit(process_not_registered_globally)
- end;
-get_proc_name({via, Mod, Name}) ->
- case Mod:whereis_name(Name) of
- undefined ->
- exit({process_not_registered_via, Mod});
- Pid when Pid =:= self() ->
- Name;
- _Pid ->
- exit({process_not_registered_via, Mod})
- end.
-
-get_parent() ->
- case get('$ancestors') of
- [Parent | _] when is_pid(Parent) ->
- Parent;
- [Parent | _] when is_atom(Parent) ->
- name_to_pid(Parent);
- _ ->
- exit(process_was_not_started_by_proc_lib)
- end.
-
-name_to_pid(Name) ->
- case whereis(Name) of
- undefined ->
- case global:whereis_name(Name) of
- undefined ->
- exit(could_not_find_registered_name);
- Pid ->
- Pid
- end;
- Pid ->
- Pid
- end.
-
%%% ---------------------------------------------------
%%% Initiate the new process.
%%% Register the name using the Rfunc function
@@ -373,8 +320,8 @@ name_to_pid(Name) ->
init_it(Starter, self, Name, Mod, Args, Options) ->
init_it(Starter, self(), Name, Mod, Args, Options);
init_it(Starter, Parent, Name0, Mod, Args, Options) ->
- Name = name(Name0),
- Debug = gen:debug_options(Options),
+ Name = gen:name(Name0),
+ Debug = gen:debug_options(Name, Options),
case catch Mod:init(Args) of
{ok, StateName, StateData} ->
proc_lib:init_ack(Starter, {ok, self()}),
@@ -383,15 +330,15 @@ init_it(Starter, Parent, Name0, Mod, Args, Options) ->
proc_lib:init_ack(Starter, {ok, self()}),
loop(Parent, Name, StateName, StateData, Mod, Timeout, Debug);
{stop, Reason} ->
- unregister_name(Name0),
+ gen:unregister_name(Name0),
proc_lib:init_ack(Starter, {error, Reason}),
exit(Reason);
ignore ->
- unregister_name(Name0),
+ gen:unregister_name(Name0),
proc_lib:init_ack(Starter, ignore),
exit(normal);
{'EXIT', Reason} ->
- unregister_name(Name0),
+ gen:unregister_name(Name0),
proc_lib:init_ack(Starter, {error, Reason}),
exit(Reason);
Else ->
@@ -400,20 +347,6 @@ init_it(Starter, Parent, Name0, Mod, Args, Options) ->
exit(Error)
end.
-name({local,Name}) -> Name;
-name({global,Name}) -> Name;
-name({via,_, Name}) -> Name;
-name(Pid) when is_pid(Pid) -> Pid.
-
-unregister_name({local,Name}) ->
- _ = (catch unregister(Name));
-unregister_name({global,Name}) ->
- _ = global:unregister_name(Name);
-unregister_name({via, Mod, Name}) ->
- _ = Mod:unregister_name(Name);
-unregister_name(Pid) when is_pid(Pid) ->
- Pid.
-
%%-----------------------------------------------------------------
%% The MAIN loop
%%-----------------------------------------------------------------
diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl
index c58b1de609..5800aca66f 100644
--- a/lib/stdlib/src/gen_server.erl
+++ b/lib/stdlib/src/gen_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -304,9 +304,9 @@ enter_loop(Mod, Options, State, Timeout) ->
enter_loop(Mod, Options, State, self(), Timeout).
enter_loop(Mod, Options, State, ServerName, Timeout) ->
- Name = get_proc_name(ServerName),
- Parent = get_parent(),
- Debug = debug_options(Name, Options),
+ Name = gen:get_proc_name(ServerName),
+ Parent = gen:get_parent(),
+ Debug = gen:debug_options(Name, Options),
loop(Parent, Name, State, Mod, Timeout, Debug).
%%%========================================================================
@@ -323,8 +323,8 @@ enter_loop(Mod, Options, State, ServerName, Timeout) ->
init_it(Starter, self, Name, Mod, Args, Options) ->
init_it(Starter, self(), Name, Mod, Args, Options);
init_it(Starter, Parent, Name0, Mod, Args, Options) ->
- Name = name(Name0),
- Debug = debug_options(Name, Options),
+ Name = gen:name(Name0),
+ Debug = gen:debug_options(Name, Options),
case catch Mod:init(Args) of
{ok, State} ->
proc_lib:init_ack(Starter, {ok, self()}),
@@ -339,15 +339,15 @@ init_it(Starter, Parent, Name0, Mod, Args, Options) ->
%% (Otherwise, the parent process could get
%% an 'already_started' error if it immediately
%% tried starting the process again.)
- unregister_name(Name0),
+ gen:unregister_name(Name0),
proc_lib:init_ack(Starter, {error, Reason}),
exit(Reason);
ignore ->
- unregister_name(Name0),
+ gen:unregister_name(Name0),
proc_lib:init_ack(Starter, ignore),
exit(normal);
{'EXIT', Reason} ->
- unregister_name(Name0),
+ gen:unregister_name(Name0),
proc_lib:init_ack(Starter, {error, Reason}),
exit(Reason);
Else ->
@@ -356,20 +356,6 @@ init_it(Starter, Parent, Name0, Mod, Args, Options) ->
exit(Error)
end.
-name({local,Name}) -> Name;
-name({global,Name}) -> Name;
-name({via,_, Name}) -> Name;
-name(Pid) when is_pid(Pid) -> Pid.
-
-unregister_name({local,Name}) ->
- _ = (catch unregister(Name));
-unregister_name({global,Name}) ->
- _ = global:unregister_name(Name);
-unregister_name({via, Mod, Name}) ->
- _ = Mod:unregister_name(Name);
-unregister_name(Pid) when is_pid(Pid) ->
- Pid.
-
%%%========================================================================
%%% Internal functions
%%%========================================================================
@@ -858,86 +844,6 @@ error_info(Reason, Name, Msg, State, Debug) ->
sys:print_log(Debug),
ok.
-%%% ---------------------------------------------------
-%%% Misc. functions.
-%%% ---------------------------------------------------
-
-opt(Op, [{Op, Value}|_]) ->
- {ok, Value};
-opt(Op, [_|Options]) ->
- opt(Op, Options);
-opt(_, []) ->
- false.
-
-debug_options(Name, Opts) ->
- case opt(debug, Opts) of
- {ok, Options} -> dbg_opts(Name, Options);
- _ -> []
- end.
-
-dbg_opts(Name, Opts) ->
- case catch sys:debug_options(Opts) of
- {'EXIT',_} ->
- format("~p: ignoring erroneous debug options - ~p~n",
- [Name, Opts]),
- [];
- Dbg ->
- Dbg
- end.
-
-get_proc_name(Pid) when is_pid(Pid) ->
- Pid;
-get_proc_name({local, Name}) ->
- case process_info(self(), registered_name) of
- {registered_name, Name} ->
- Name;
- {registered_name, _Name} ->
- exit(process_not_registered);
- [] ->
- exit(process_not_registered)
- end;
-get_proc_name({global, Name}) ->
- case global:whereis_name(Name) of
- undefined ->
- exit(process_not_registered_globally);
- Pid when Pid =:= self() ->
- Name;
- _Pid ->
- exit(process_not_registered_globally)
- end;
-get_proc_name({via, Mod, Name}) ->
- case Mod:whereis_name(Name) of
- undefined ->
- exit({process_not_registered_via, Mod});
- Pid when Pid =:= self() ->
- Name;
- _Pid ->
- exit({process_not_registered_via, Mod})
- end.
-
-get_parent() ->
- case get('$ancestors') of
- [Parent | _] when is_pid(Parent)->
- Parent;
- [Parent | _] when is_atom(Parent)->
- name_to_pid(Parent);
- _ ->
- exit(process_was_not_started_by_proc_lib)
- end.
-
-name_to_pid(Name) ->
- case whereis(Name) of
- undefined ->
- case global:whereis_name(Name) of
- undefined ->
- exit(could_not_find_registered_name);
- Pid ->
- Pid
- end;
- Pid ->
- Pid
- end.
-
%%-----------------------------------------------------------------
%% Status information
%%-----------------------------------------------------------------
diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl
new file mode 100644
index 0000000000..c02e6a1a19
--- /dev/null
+++ b/lib/stdlib/src/gen_statem.erl
@@ -0,0 +1,1309 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(gen_statem).
+
+%% API
+-export(
+ [start/3,start/4,start_link/3,start_link/4,
+ stop/1,stop/3,
+ cast/2,call/2,call/3,
+ enter_loop/5,enter_loop/6,enter_loop/7,
+ reply/1,reply/2]).
+
+%% gen callbacks
+-export(
+ [init_it/6]).
+
+%% sys callbacks
+-export(
+ [system_continue/3,
+ system_terminate/4,
+ system_code_change/4,
+ system_get_state/1,
+ system_replace_state/2,
+ format_status/2]).
+
+%% Internal callbacks
+-export(
+ [wakeup_from_hibernate/3]).
+
+%% Type exports for templates
+-export_type(
+ [event_type/0,
+ callback_mode/0,
+ state_function_result/0,
+ handle_event_result/0,
+ action/0]).
+
+%% Fix problem for doc build
+-export_type([transition_option/0]).
+
+%%%==========================================================================
+%%% Interface functions.
+%%%==========================================================================
+
+-type from() ::
+ {To :: pid(), Tag :: term()}. % Reply-to specifier for call
+
+-type state() ::
+ state_name() | % For state callback function StateName/5
+ term(). % For state callback function handle_event/5
+
+-type state_name() :: atom().
+
+-type data() :: term().
+
+-type event_type() ::
+ {'call',From :: from()} | 'cast' |
+ 'info' | 'timeout' | 'internal'.
+
+-type callback_mode() :: 'state_functions' | 'handle_event_function'.
+
+-type transition_option() ::
+ postpone() | hibernate() | event_timeout().
+-type postpone() ::
+ %% If 'true' postpone the current event
+ %% and retry it when the state changes (=/=)
+ boolean().
+-type hibernate() ::
+ %% If 'true' hibernate the server instead of going into receive
+ boolean().
+-type event_timeout() ::
+ %% Generate a ('timeout', EventContent, ...) event after Time
+ %% unless some other event is delivered
+ Time :: timeout().
+
+-type action() ::
+ %% During a state change:
+ %% * NextState and NewData are set.
+ %% * All action()s are executed in order of apperance.
+ %% * Postponing the current event is performed
+ %% iff 'postpone' is 'true'.
+ %% * A state timer is started iff 'timeout' is set.
+ %% * Pending events are handled or if there are
+ %% no pending events the server goes into receive
+ %% or hibernate (iff 'hibernate' is 'true')
+ %%
+ %% These action()s are executed in order of appearence
+ %% in the containing list. The ones that set options
+ %% will override any previous so the last of each kind wins.
+ %%
+ 'postpone' | % Set the postpone option
+ {'postpone', Postpone :: postpone()} |
+ %%
+ 'hibernate' | % Set the hibernate option
+ {'hibernate', Hibernate :: hibernate()} |
+ %%
+ (Timeout :: event_timeout()) | % {timeout,Timeout}
+ {'timeout', % Set the event timeout option
+ Time :: event_timeout(), EventContent :: term()} |
+ %%
+ reply_action() |
+ %%
+ %% All 'next_event' events are kept in a list and then
+ %% inserted at state changes so the first in the
+ %% action() list is the first to be delivered.
+ {'next_event', % Insert event as the next to handle
+ EventType :: event_type(),
+ EventContent :: term()}.
+-type reply_action() ::
+ {'reply', % Reply to a caller
+ From :: from(), Reply :: term()}.
+
+-type state_function_result() ::
+ {'next_state', % {next_state,NextStateName,NewData,[]}
+ NextStateName :: state_name(),
+ NewData :: data()} |
+ {'next_state', % State transition, maybe to the same state
+ NextStateName :: state_name(),
+ NewData :: data(),
+ Actions :: [action()] | action()} |
+ common_state_callback_result().
+-type handle_event_result() ::
+ {'next_state', % {next_state,NextState,NewData,[]}
+ NextState :: state(),
+ NewData :: data()} |
+ {'next_state', % State transition, maybe to the same state
+ NextState :: state(),
+ NewData :: data(),
+ Actions :: [action()] | action()} |
+ common_state_callback_result().
+-type common_state_callback_result() ::
+ 'stop' | % {stop,normal}
+ {'stop', % Stop the server
+ Reason :: term()} |
+ {'stop', % Stop the server
+ Reason :: term(),
+ NewData :: data()} |
+ {'stop_and_reply', % Reply then stop the server
+ Reason :: term(),
+ Replies :: [reply_action()] | reply_action()} |
+ {'stop_and_reply', % Reply then stop the server
+ Reason :: term(),
+ Replies :: [reply_action()] | reply_action(),
+ NewData :: data()} |
+ {'keep_state', % {keep_state,NewData,[]}
+ NewData :: data()} |
+ {'keep_state', % Keep state, change data
+ NewData :: data(),
+ Actions :: [action()] | action()} |
+ 'keep_state_and_data' | % {keep_state_and_data,[]}
+ {'keep_state_and_data', % Keep state and data -> only actions
+ Actions :: [action()] | action()}.
+
+
+%% The state machine init function. It is called only once and
+%% the server is not running until this function has returned
+%% an {ok, ...} tuple. Thereafter the state callbacks are called
+%% for all events to this server.
+-callback init(Args :: term()) ->
+ {callback_mode(), state(), data()} |
+ {callback_mode(), state(), data(), [action()] | action()} |
+ 'ignore' |
+ {'stop', Reason :: term()}.
+
+%% Example state callback for callback_mode() =:= state_functions
+%% state name 'state_name'.
+%%
+%% In this mode all states has to be type state_name() i.e atom().
+%%
+%% Note that state callbacks and only state callbacks have arity 5
+%% and that is intended.
+-callback state_name(
+ event_type(),
+ EventContent :: term(),
+ Data :: data()) ->
+ state_function_result().
+%%
+%% State callback for callback_mode() =:= handle_event_function.
+%%
+%% Note that state callbacks and only state callbacks have arity 5
+%% and that is intended.
+-callback handle_event(
+ event_type(),
+ EventContent :: term(),
+ State :: state(), % Current state
+ Data :: data()) ->
+ handle_event_result().
+
+%% Clean up before the server terminates.
+-callback terminate(
+ Reason :: 'normal' | 'shutdown' | {'shutdown', term()}
+ | term(),
+ State :: state(),
+ Data :: data()) ->
+ any().
+
+%% Note that the new code can expect to get an OldState from
+%% the old code version not only in code_change/4 but in the first
+%% state callback function called thereafter
+-callback code_change(
+ OldVsn :: term() | {'down', term()},
+ OldState :: state(),
+ OldData :: data(),
+ Extra :: term()) ->
+ {CallbackMode :: callback_mode(),
+ NewState :: state(),
+ NewData :: data()} |
+ (Reason :: term()).
+
+%% Format the callback module state in some sensible that is
+%% often condensed way. For StatusOption =:= 'normal' the perferred
+%% return term is [{data,[{"State",FormattedState}]}], and for
+%% StatusOption =:= 'terminate' it is just FormattedState.
+-callback format_status(
+ StatusOption,
+ [ [{Key :: term(), Value :: term()}] |
+ state() |
+ data()]) ->
+ Status :: term() when
+ StatusOption :: 'normal' | 'terminate'.
+
+-optional_callbacks(
+ [init/1, % One may use enter_loop/5,6,7 instead
+ format_status/2, % Has got a default implementation
+ %%
+ state_name/3, % Example for callback_mode =:= state_functions:
+ %% there has to be a StateName/5 callback function for every StateName.
+ %%
+ handle_event/4]). % For callback_mode =:= handle_event_function
+
+%% Type validation functions
+callback_mode(CallbackMode) ->
+ case CallbackMode of
+ state_functions ->
+ true;
+ handle_event_function ->
+ true;
+ _ ->
+ false
+ end.
+%%
+from({Pid,_}) when is_pid(Pid) ->
+ true;
+from(_) ->
+ false.
+%%
+event_type({call,From}) ->
+ from(From);
+event_type(Type) ->
+ case Type of
+ cast ->
+ true;
+ info ->
+ true;
+ timeout ->
+ true;
+ internal ->
+ true;
+ _ ->
+ false
+ end.
+
+
+
+-define(
+ STACKTRACE(),
+ try throw(ok) catch _ -> erlang:get_stacktrace() end).
+
+%%%==========================================================================
+%%% API
+
+-type server_name() ::
+ {'global', GlobalName :: term()}
+ | {'via', RegMod :: module(), Name :: term()}
+ | {'local', atom()}.
+-type server_ref() ::
+ pid()
+ | (LocalName :: atom())
+ | {Name :: atom(), Node :: atom()}
+ | {'global', GlobalName :: term()}
+ | {'via', RegMod :: module(), ViaName :: term()}.
+-type debug_opt() ::
+ {'debug',
+ Dbgs ::
+ ['trace' | 'log' | 'statistics' | 'debug'
+ | {'logfile', string()}]}.
+-type start_opt() ::
+ debug_opt()
+ | {'timeout', Time :: timeout()}
+ | {'spawn_opt', [proc_lib:spawn_option()]}.
+-type start_ret() :: {'ok', pid()} | 'ignore' | {'error', term()}.
+
+
+
+%% Start a state machine
+-spec start(
+ Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
+ start_ret().
+start(Module, Args, Opts) ->
+ gen:start(?MODULE, nolink, Module, Args, Opts).
+%%
+-spec start(
+ ServerName :: server_name(),
+ Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
+ start_ret().
+start(ServerName, Module, Args, Opts) ->
+ gen:start(?MODULE, nolink, ServerName, Module, Args, Opts).
+
+%% Start and link to a state machine
+-spec start_link(
+ Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
+ start_ret().
+start_link(Module, Args, Opts) ->
+ gen:start(?MODULE, link, Module, Args, Opts).
+%%
+-spec start_link(
+ ServerName :: server_name(),
+ Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
+ start_ret().
+start_link(ServerName, Module, Args, Opts) ->
+ gen:start(?MODULE, link, ServerName, Module, Args, Opts).
+
+%% Stop a state machine
+-spec stop(ServerRef :: server_ref()) -> ok.
+stop(ServerRef) ->
+ gen:stop(ServerRef).
+%%
+-spec stop(
+ ServerRef :: server_ref(),
+ Reason :: term(),
+ Timeout :: timeout()) -> ok.
+stop(ServerRef, Reason, Timeout) ->
+ gen:stop(ServerRef, Reason, Timeout).
+
+%% Send an event to a state machine that arrives with type 'event'
+-spec cast(ServerRef :: server_ref(), Msg :: term()) -> ok.
+cast({global,Name}, Msg) ->
+ try global:send(Name, wrap_cast(Msg)) of
+ _ -> ok
+ catch
+ _:_ -> ok
+ end;
+cast({via,RegMod,Name}, Msg) ->
+ try RegMod:send(Name, wrap_cast(Msg)) of
+ _ -> ok
+ catch
+ _:_ -> ok
+ end;
+cast({Name,Node} = ServerRef, Msg) when is_atom(Name), is_atom(Node) ->
+ send(ServerRef, wrap_cast(Msg));
+cast(ServerRef, Msg) when is_atom(ServerRef) ->
+ send(ServerRef, wrap_cast(Msg));
+cast(ServerRef, Msg) when is_pid(ServerRef) ->
+ send(ServerRef, wrap_cast(Msg)).
+
+%% Call a state machine (synchronous; a reply is expected) that
+%% arrives with type {call,From}
+-spec call(ServerRef :: server_ref(), Request :: term()) -> Reply :: term().
+call(ServerRef, Request) ->
+ call(ServerRef, Request, infinity).
+%%
+-spec call(
+ ServerRef :: server_ref(),
+ Request :: term(),
+ Timeout :: timeout()) ->
+ Reply :: term().
+call(ServerRef, Request, infinity) ->
+ try gen:call(ServerRef, '$gen_call', Request, infinity) of
+ {ok,Reply} ->
+ Reply
+ catch
+ Class:Reason ->
+ erlang:raise(
+ Class,
+ {Reason,{?MODULE,call,[ServerRef,Request,infinity]}},
+ erlang:get_stacktrace())
+ end;
+call(ServerRef, Request, Timeout) ->
+ %% Call server through proxy process to dodge any late reply
+ Ref = make_ref(),
+ Self = self(),
+ Pid = spawn(
+ fun () ->
+ Self !
+ try gen:call(
+ ServerRef, '$gen_call', Request, Timeout) of
+ Result ->
+ {Ref,Result}
+ catch Class:Reason ->
+ {Ref,Class,Reason,erlang:get_stacktrace()}
+ end
+ end),
+ Mref = monitor(process, Pid),
+ receive
+ {Ref,Result} ->
+ demonitor(Mref, [flush]),
+ case Result of
+ {ok,Reply} ->
+ Reply
+ end;
+ {Ref,Class,Reason,Stacktrace} ->
+ demonitor(Mref, [flush]),
+ erlang:raise(
+ Class,
+ {Reason,{?MODULE,call,[ServerRef,Request,Timeout]}},
+ Stacktrace);
+ {'DOWN',Mref,_,_,Reason} ->
+ %% There is a theoretical possibility that the
+ %% proxy process gets killed between try--of and !
+ %% so this clause is in case of that
+ exit(Reason)
+ end.
+
+%% Reply from a state machine callback to whom awaits in call/2
+-spec reply([reply_action()] | reply_action()) -> ok.
+reply({reply,From,Reply}) ->
+ reply(From, Reply);
+reply(Replies) when is_list(Replies) ->
+ replies(Replies).
+%%
+-spec reply(From :: from(), Reply :: term()) -> ok.
+reply({To,Tag}, Reply) when is_pid(To) ->
+ Msg = {Tag,Reply},
+ try To ! Msg of
+ _ ->
+ ok
+ catch
+ _:_ -> ok
+ end.
+
+%% Instead of starting the state machine through start/3,4
+%% or start_link/3,4 turn the current process presumably
+%% started by proc_lib into a state machine using
+%% the same arguments as you would have returned from init/1
+-spec enter_loop(
+ Module :: module(), Opts :: [debug_opt()],
+ CallbackMode :: callback_mode(),
+ State :: state(), Data :: data()) ->
+ no_return().
+enter_loop(Module, Opts, CallbackMode, State, Data) ->
+ enter_loop(Module, Opts, CallbackMode, State, Data, self()).
+%%
+-spec enter_loop(
+ Module :: module(), Opts :: [debug_opt()],
+ CallbackMode :: callback_mode(),
+ State :: state(), Data :: data(),
+ Server_or_Actions ::
+ server_name() | pid() | [action()]) ->
+ no_return().
+enter_loop(Module, Opts, CallbackMode, State, Data, Server_or_Actions) ->
+ if
+ is_list(Server_or_Actions) ->
+ enter_loop(
+ Module, Opts, CallbackMode, State, Data,
+ self(), Server_or_Actions);
+ true ->
+ enter_loop(
+ Module, Opts, CallbackMode, State, Data,
+ Server_or_Actions, [])
+ end.
+%%
+-spec enter_loop(
+ Module :: module(), Opts :: [debug_opt()],
+ CallbackMode :: callback_mode(),
+ State :: state(), Data :: data(),
+ Server :: server_name() | pid(),
+ Actions :: [action()] | action()) ->
+ no_return().
+enter_loop(Module, Opts, CallbackMode, State, Data, Server, Actions) ->
+ is_atom(Module) orelse error({atom,Module}),
+ callback_mode(CallbackMode) orelse error({callback_mode,CallbackMode}),
+ Parent = gen:get_parent(),
+ enter(Module, Opts, CallbackMode, State, Data, Server, Actions, Parent).
+
+%%---------------------------------------------------------------------------
+%% API helpers
+
+wrap_cast(Event) ->
+ {'$gen_cast',Event}.
+
+replies([{reply,From,Reply}|Replies]) ->
+ reply(From, Reply),
+ replies(Replies);
+replies([]) ->
+ ok.
+
+%% Might actually not send the message in case of caught exception
+send(Proc, Msg) ->
+ try erlang:send(Proc, Msg, [noconnect]) of
+ noconnect ->
+ _ = spawn(erlang, send, [Proc,Msg]),
+ ok;
+ ok ->
+ ok
+ catch
+ _:_ ->
+ ok
+ end.
+
+%% Here the init_it/6 and enter_loop/5,6,7 functions converge
+enter(Module, Opts, CallbackMode, State, Data, Server, Actions, Parent) ->
+ %% The values should already have been type checked
+ Name = gen:get_proc_name(Server),
+ Debug = gen:debug_options(Name, Opts),
+ P = Events = [],
+ Event = {internal,initial_state},
+ %% We enforce {postpone,false} to ensure that
+ %% our fake Event gets discarded, thought it might get logged
+ NewActions =
+ if
+ is_list(Actions) ->
+ Actions ++ [{postpone,false}];
+ true ->
+ [Actions,{postpone,false}]
+ end,
+ S = #{
+ callback_mode => CallbackMode,
+ module => Module,
+ name => Name,
+ %% All fields below will be replaced according to the arguments to
+ %% loop_event_actions/10 when it finally loops back to loop/3
+ state => State,
+ data => Data,
+ postponed => P,
+ hibernate => false,
+ timer => undefined},
+ NewDebug = sys_debug(Debug, S, State, {enter,Event,State}),
+ loop_event_actions(
+ Parent, NewDebug, S, Events,
+ State, Data, P, Event, State, NewActions).
+
+%%%==========================================================================
+%%% gen callbacks
+
+init_it(Starter, self, ServerRef, Module, Args, Opts) ->
+ init_it(Starter, self(), ServerRef, Module, Args, Opts);
+init_it(Starter, Parent, ServerRef, Module, Args, Opts) ->
+ try Module:init(Args) of
+ Result ->
+ init_result(Starter, Parent, ServerRef, Module, Result, Opts)
+ catch
+ Result ->
+ init_result(Starter, Parent, ServerRef, Module, Result, Opts);
+ Class:Reason ->
+ gen:unregister_name(ServerRef),
+ proc_lib:init_ack(Starter, {error,Reason}),
+ erlang:raise(Class, Reason, erlang:get_stacktrace())
+ end.
+
+%%---------------------------------------------------------------------------
+%% gen callbacks helpers
+
+init_result(Starter, Parent, ServerRef, Module, Result, Opts) ->
+ case Result of
+ {CallbackMode,State,Data} ->
+ case callback_mode(CallbackMode) of
+ true ->
+ proc_lib:init_ack(Starter, {ok,self()}),
+ enter(
+ Module, Opts, CallbackMode, State, Data,
+ ServerRef, [], Parent);
+ false ->
+ Error = {callback_mode,CallbackMode},
+ proc_lib:init_ack(Starter, {error,Error}),
+ exit(Error)
+ end;
+ {CallbackMode,State,Data,Actions} ->
+ case callback_mode(CallbackMode) of
+ true ->
+ proc_lib:init_ack(Starter, {ok,self()}),
+ enter(
+ Module, Opts, CallbackMode, State, Data,
+ ServerRef, Actions, Parent);
+ false ->
+ Error = {callback_mode,CallbackMode},
+ proc_lib:init_ack(Starter, {error,Error}),
+ exit(Error)
+ end;
+ {stop,Reason} ->
+ gen:unregister_name(ServerRef),
+ proc_lib:init_ack(Starter, {error,Reason}),
+ exit(Reason);
+ ignore ->
+ gen:unregister_name(ServerRef),
+ proc_lib:init_ack(Starter, ignore),
+ exit(normal);
+ _ ->
+ Error = {bad_return_value,Result},
+ proc_lib:init_ack(Starter, {error,Error}),
+ exit(Error)
+ end.
+
+%%%==========================================================================
+%%% sys callbacks
+
+system_continue(Parent, Debug, S) ->
+ loop(Parent, Debug, S).
+
+system_terminate(
+ Reason, _Parent, Debug,
+ #{state := State, data := Data, postponed := P} = S) ->
+ terminate(
+ exit, Reason, ?STACKTRACE(),
+ Debug, S, [], State, Data, P).
+
+system_code_change(
+ #{module := Module,
+ state := State,
+ data := Data} = S,
+ _Mod, OldVsn, Extra) ->
+ case
+ try Module:code_change(OldVsn, State, Data, Extra)
+ catch
+ Result -> Result
+ end
+ of
+ {CallbackMode,NewState,NewData} ->
+ callback_mode(CallbackMode) orelse
+ error({callback_mode,CallbackMode}),
+ {ok,
+ S#{callback_mode := CallbackMode,
+ state := NewState,
+ data := NewData}};
+ {ok,_} = Error ->
+ error({case_clause,Error});
+ Error ->
+ Error
+ end.
+
+system_get_state(#{state := State, data := Data}) ->
+ {ok,{State,Data}}.
+
+system_replace_state(
+ StateFun,
+ #{state := State,
+ data := Data} = S) ->
+ {NewState,NewData} = Result = StateFun({State,Data}),
+ {ok,Result,S#{state := NewState, data := NewData}}.
+
+format_status(
+ Opt,
+ [PDict,SysState,Parent,Debug,
+ #{name := Name, postponed := P, state := State, data := Data} = S]) ->
+ Header = gen:format_status_header("Status for state machine", Name),
+ Log = sys:get_debug(log, Debug, []),
+ [{header,Header},
+ {data,
+ [{"Status",SysState},
+ {"Parent",Parent},
+ {"Logged Events",Log},
+ {"Postponed",P}]} |
+ case format_status(Opt, PDict, S, State, Data) of
+ L when is_list(L) -> L;
+ T -> [T]
+ end].
+
+%%---------------------------------------------------------------------------
+%% Format debug messages. Print them as the call-back module sees
+%% them, not as the real erlang messages. Use trace for that.
+%%---------------------------------------------------------------------------
+
+print_event(Dev, {in,Event}, {Name,_}) ->
+ io:format(
+ Dev, "*DBG* ~p received ~s~n",
+ [Name,event_string(Event)]);
+print_event(Dev, {out,Reply,{To,_Tag}}, {Name,_}) ->
+ io:format(
+ Dev, "*DBG* ~p sent ~p to ~p~n",
+ [Name,Reply,To]);
+print_event(Dev, {Tag,Event,NextState}, {Name,State}) ->
+ StateString =
+ case NextState of
+ State ->
+ io_lib:format("~p", [State]);
+ _ ->
+ io_lib:format("~p => ~p", [State,NextState])
+ end,
+ io:format(
+ Dev, "*DBG* ~p ~w ~s in state ~s~n",
+ [Name,Tag,event_string(Event),StateString]).
+
+event_string(Event) ->
+ case Event of
+ {{call,{Pid,_Tag}},Request} ->
+ io_lib:format("call ~p from ~w", [Request,Pid]);
+ {EventType,EventContent} ->
+ io_lib:format("~w ~p", [EventType,EventContent])
+ end.
+
+sys_debug(Debug, #{name := Name}, State, Entry) ->
+ case Debug of
+ [] ->
+ Debug;
+ _ ->
+ sys:handle_debug(
+ Debug, fun print_event/3, {Name,State}, Entry)
+ end.
+
+%%%==========================================================================
+%%% Internal callbacks
+
+wakeup_from_hibernate(Parent, Debug, S) ->
+ %% It is a new message that woke us up so we have to receive it now
+ loop_receive(Parent, Debug, S).
+
+%%%==========================================================================
+%%% State Machine engine implementation of proc_lib/gen server
+
+%% Server loop, consists of all loop* functions
+%% and detours through sys:handle_system_message/7 and proc_lib:hibernate/3
+
+%% Entry point for system_continue/3
+loop(Parent, Debug, #{hibernate := Hibernate} = S) ->
+ case Hibernate of
+ true ->
+ %% Does not return but restarts process at
+ %% wakeup_from_hibernate/3 that jumps to loop_receive/3
+ proc_lib:hibernate(
+ ?MODULE, wakeup_from_hibernate, [Parent,Debug,S]),
+ error(
+ {should_not_have_arrived_here_but_instead_in,
+ {wakeup_from_hibernate,3}});
+ false ->
+ loop_receive(Parent, Debug, S)
+ end.
+
+%% Entry point for wakeup_from_hibernate/3
+loop_receive(Parent, Debug, #{timer := Timer} = S) ->
+ receive
+ Msg ->
+ case Msg of
+ {system,Pid,Req} ->
+ #{hibernate := Hibernate} = S,
+ %% Does not return but tail recursively calls
+ %% system_continue/3 that jumps to loop/3
+ sys:handle_system_msg(
+ Req, Pid, Parent, ?MODULE, Debug, S, Hibernate);
+ {'EXIT',Parent,Reason} = EXIT ->
+ #{state := State, data := Data, postponed := P} = S,
+ %% EXIT is not a 2-tuple and therefore
+ %% not an event and has no event_type(),
+ %% but this will stand out in the crash report...
+ terminate(
+ exit, Reason, ?STACKTRACE(),
+ Debug, S, [EXIT], State, Data, P);
+ {timeout,Timer,Content} when Timer =/= undefined ->
+ loop_receive_result(
+ Parent, Debug, S, {timeout,Content});
+ _ ->
+ %% Cancel Timer if running
+ case Timer of
+ undefined ->
+ ok;
+ _ ->
+ case erlang:cancel_timer(Timer) of
+ TimeLeft when is_integer(TimeLeft) ->
+ ok;
+ false ->
+ receive
+ {timeout,Timer,_} ->
+ ok
+ after 0 ->
+ ok
+ end
+ end
+ end,
+ Event =
+ case Msg of
+ {'$gen_call',From,Request} ->
+ {{call,From},Request};
+ {'$gen_cast',E} ->
+ {cast,E};
+ _ ->
+ {info,Msg}
+ end,
+ loop_receive_result(Parent, Debug, S, Event)
+ end
+ end.
+
+loop_receive_result(
+ Parent, Debug,
+ #{state := State,
+ data := Data,
+ postponed := P} = S,
+ Event) ->
+ %% The engine state map S is now dismantled
+ %% and will not be restored until we return to loop/3.
+ %%
+ %% The fields 'callback_mode', 'module', and 'name' are still valid.
+ %% The fields 'state', 'data', and 'postponed' are held in arguments.
+ %% The fields 'timer' and 'hibernate' will be recalculated.
+ %%
+ NewDebug = sys_debug(Debug, S, State, {in,Event}),
+ %% Here the queue of not yet handled events is created
+ Events = [],
+ Hibernate = false,
+ loop_event(
+ Parent, NewDebug, S, Events, State, Data, P, Event, Hibernate).
+
+%% Process the event queue, or if it is empty
+%% loop back to loop/3 to receive a new event
+loop_events(
+ Parent, Debug, S, [Event|Events],
+ State, Data, P, Hibernate, _Timeout) ->
+ %%
+ %% If there was a state timer requested we just ignore that
+ %% since we have events to handle which cancels the timer
+ loop_event(
+ Parent, Debug, S, Events, State, Data, P, Event, Hibernate);
+loop_events(
+ Parent, Debug, S, [],
+ State, Data, P, Hibernate, Timeout) ->
+ case Timeout of
+ {timeout,0,EventContent} ->
+ %% Immediate timeout - simulate it
+ %% so we do not get the timeout message
+ %% after any received event
+ loop_event(
+ Parent, Debug, S, [],
+ State, Data, P, {timeout,EventContent}, Hibernate);
+ {timeout,Time,EventContent} ->
+ %% Actually start a timer
+ Timer = erlang:start_timer(Time, self(), EventContent),
+ loop_events_done(
+ Parent, Debug, S, Timer, State, Data, P, Hibernate);
+ undefined ->
+ %% No state timeout has been requested
+ Timer = undefined,
+ loop_events_done(
+ Parent, Debug, S, Timer, State, Data, P, Hibernate)
+ end.
+%%
+loop_events_done(Parent, Debug, S, Timer, State, Data, P, Hibernate) ->
+ NewS =
+ S#{
+ state := State,
+ data := Data,
+ postponed := P,
+ hibernate := Hibernate,
+ timer := Timer},
+ loop(Parent, Debug, NewS).
+
+loop_event(
+ Parent, Debug,
+ #{callback_mode := CallbackMode,
+ module := Module} = S,
+ Events,
+ State, Data, P, {Type,Content} = Event, Hibernate) ->
+ %%
+ %% If Hibernate is true here it can only be
+ %% because it was set from an event action
+ %% and we did not go into hibernation since there
+ %% were events in queue, so we do what the user
+ %% might depend on i.e collect garbage which
+ %% would have happened if we actually hibernated
+ %% and immediately was awakened
+ Hibernate andalso garbage_collect(),
+ %%
+ try
+ case CallbackMode of
+ state_functions ->
+ Module:State(Type, Content, Data);
+ handle_event_function ->
+ Module:handle_event(Type, Content, State, Data)
+ end of
+ Result ->
+ loop_event_result(
+ Parent, Debug, S, Events, State, Data, P, Event, Result)
+ catch
+ Result ->
+ loop_event_result(
+ Parent, Debug, S, Events, State, Data, P, Event, Result);
+ error:badarg when CallbackMode =:= state_functions ->
+ case erlang:get_stacktrace() of
+ [{erlang,apply,[Module,State,_],_}|Stacktrace] ->
+ Args = [Type,Content,Data],
+ terminate(
+ error,
+ {undef_state_function,{Module,State,Args}},
+ Stacktrace,
+ Debug, S, [Event|Events], State, Data, P);
+ Stacktrace ->
+ terminate(
+ error, badarg, Stacktrace,
+ Debug, S, [Event|Events], State, Data, P)
+ end;
+ error:undef ->
+ %% Process an undef to check for the simple mistake
+ %% of calling a nonexistent state function
+ case erlang:get_stacktrace() of
+ [{Module,State,
+ [Type,Content,Data]=Args,
+ _}
+ |Stacktrace]
+ when CallbackMode =:= state_functions ->
+ terminate(
+ error,
+ {undef_state_function,{Module,State,Args}},
+ Stacktrace,
+ Debug, S, [Event|Events], State, Data, P);
+ [{Module,handle_event,
+ [Type,Content,State,Data]=Args,
+ _}
+ |Stacktrace]
+ when CallbackMode =:= handle_event_function ->
+ terminate(
+ error,
+ {undef_state_function,{Module,handle_event,Args}},
+ Stacktrace,
+ Debug, S, [Event|Events], State, Data, P);
+ Stacktrace ->
+ terminate(
+ error, undef, Stacktrace,
+ Debug, S, [Event|Events], State, Data, P)
+ end;
+ Class:Reason ->
+ Stacktrace = erlang:get_stacktrace(),
+ terminate(
+ Class, Reason, Stacktrace,
+ Debug, S, [Event|Events], State, Data, P)
+ end.
+
+%% Interpret all callback return variants
+loop_event_result(
+ Parent, Debug, S, Events, State, Data, P, Event, Result) ->
+ case Result of
+ stop ->
+ terminate(
+ exit, normal, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, Data, P);
+ {stop,Reason} ->
+ terminate(
+ exit, Reason, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, Data, P);
+ {stop,Reason,NewData} ->
+ terminate(
+ exit, Reason, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, NewData, P);
+ {stop_and_reply,Reason,Replies} ->
+ Q = [Event|Events],
+ reply_then_terminate(
+ exit, Reason, ?STACKTRACE(),
+ Debug, S, Q, State, Data, P, Replies);
+ {stop_and_reply,Reason,Replies,NewData} ->
+ Q = [Event|Events],
+ reply_then_terminate(
+ exit, Reason, ?STACKTRACE(),
+ Debug, S, Q, State, NewData, P, Replies);
+ {next_state,NextState,NewData} ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, []);
+ {next_state,NextState,NewData,Actions} ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions);
+ {keep_state,NewData} ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, State, []);
+ {keep_state,NewData,Actions} ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, State, Actions);
+ keep_state_and_data ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, Data, P, Event, State, []);
+ {keep_state_and_data,Actions} ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, Data, P, Event, State, Actions);
+ _ ->
+ terminate(
+ error, {bad_return_value,Result}, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, Data, P)
+ end.
+
+loop_event_actions(
+ Parent, Debug, S, Events, State, NewData, P, Event, NextState, Actions) ->
+ Postpone = false, % Shall we postpone this event; boolean()
+ Hibernate = false,
+ Timeout = undefined,
+ NextEvents = [],
+ loop_event_actions(
+ Parent, Debug, S, Events, State, NewData, P, Event, NextState,
+ if
+ is_list(Actions) ->
+ Actions;
+ true ->
+ [Actions]
+ end,
+ Postpone, Hibernate, Timeout, NextEvents).
+%%
+%% Process all actions
+loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, [Action|Actions],
+ Postpone, Hibernate, Timeout, NextEvents) ->
+ case Action of
+ %% Actual actions
+ {reply,From,Reply} ->
+ case from(From) of
+ true ->
+ NewDebug = do_reply(Debug, S, State, From, Reply),
+ loop_event_actions(
+ Parent, NewDebug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ Postpone, Hibernate, Timeout, NextEvents);
+ false ->
+ terminate(
+ error, {bad_action,Action}, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, NewData, P)
+ end;
+ {next_event,Type,Content} ->
+ case event_type(Type) of
+ true ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ Postpone, Hibernate, Timeout,
+ [{Type,Content}|NextEvents]);
+ false ->
+ terminate(
+ error, {bad_action,Action}, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, NewData, P)
+ end;
+ %% Actions that set options
+ {postpone,NewPostpone} when is_boolean(NewPostpone) ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ NewPostpone, Hibernate, Timeout, NextEvents);
+ {postpone,_} ->
+ terminate(
+ error, {bad_action,Action}, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, NewData, P);
+ postpone ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ true, Hibernate, Timeout, NextEvents);
+ {hibernate,NewHibernate} when is_boolean(NewHibernate) ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ Postpone, NewHibernate, Timeout, NextEvents);
+ {hibernate,_} ->
+ terminate(
+ error, {bad_action,Action}, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, NewData, P);
+ hibernate ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ Postpone, true, Timeout, NextEvents);
+ {timeout,infinity,_} -> % Clear timer - it will never trigger
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ Postpone, Hibernate, undefined, NextEvents);
+ {timeout,Time,_} = NewTimeout when is_integer(Time), Time >= 0 ->
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ Postpone, Hibernate, NewTimeout, NextEvents);
+ {timeout,_,_} ->
+ terminate(
+ error, {bad_action,Action}, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, NewData, P);
+ infinity -> % Clear timer - it will never trigger
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ Postpone, Hibernate, undefined, NextEvents);
+ Time when is_integer(Time), Time >= 0 ->
+ NewTimeout = {timeout,Time,Time},
+ loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P, Event, NextState, Actions,
+ Postpone, Hibernate, NewTimeout, NextEvents);
+ _ ->
+ terminate(
+ error, {bad_action,Action}, ?STACKTRACE(),
+ Debug, S, [Event|Events], State, NewData, P)
+ end;
+%%
+%% End of actions list
+loop_event_actions(
+ Parent, Debug, S, Events,
+ State, NewData, P0, Event, NextState, [],
+ Postpone, Hibernate, Timeout, NextEvents) ->
+ %%
+ %% All options have been collected and next_events are buffered.
+ %% Do the actual state transition.
+ %%
+ P1 = % Move current event to postponed if Postpone
+ case Postpone of
+ true ->
+ [Event|P0];
+ false ->
+ P0
+ end,
+ {Q2,P} = % Move all postponed events to queue if state change
+ if
+ NextState =:= State ->
+ {Events,P1};
+ true ->
+ {lists:reverse(P1, Events),[]}
+ end,
+ %% Place next events first in queue
+ Q = lists:reverse(NextEvents, Q2),
+ %%
+ NewDebug =
+ sys_debug(
+ Debug, S, State,
+ case Postpone of
+ true ->
+ {postpone,Event,NextState};
+ false ->
+ {consume,Event,NextState}
+ end),
+ loop_events(
+ Parent, NewDebug, S, Q, NextState, NewData, P, Hibernate, Timeout).
+
+%%---------------------------------------------------------------------------
+%% Server helpers
+
+reply_then_terminate(
+ Class, Reason, Stacktrace,
+ Debug, S, Q, State, Data, P, Replies) ->
+ if
+ is_list(Replies) ->
+ do_reply_then_terminate(
+ Class, Reason, Stacktrace,
+ Debug, S, Q, State, Data, P, Replies);
+ true ->
+ do_reply_then_terminate(
+ Class, Reason, Stacktrace,
+ Debug, S, Q, State, Data, P, [Replies])
+ end.
+%%
+do_reply_then_terminate(
+ Class, Reason, Stacktrace, Debug, S, Q, State, Data, P, []) ->
+ terminate(Class, Reason, Stacktrace, Debug, S, Q, State, Data, P);
+do_reply_then_terminate(
+ Class, Reason, Stacktrace, Debug, S, Q, State, Data, P, [R|Rs]) ->
+ case R of
+ {reply,{_To,_Tag}=From,Reply} ->
+ NewDebug = do_reply(Debug, S, State, From, Reply),
+ do_reply_then_terminate(
+ Class, Reason, Stacktrace,
+ NewDebug, S, Q, State, Data, P, Rs);
+ _ ->
+ terminate(
+ error, {bad_action,R}, ?STACKTRACE(),
+ Debug, S, Q, State, Data, P)
+ end.
+
+do_reply(Debug, S, State, From, Reply) ->
+ reply(From, Reply),
+ sys_debug(Debug, S, State, {out,Reply,From}).
+
+
+terminate(
+ Class, Reason, Stacktrace,
+ Debug, #{module := Module} = S, Q, State, Data, P) ->
+ try Module:terminate(Reason, State, Data) of
+ _ -> ok
+ catch
+ _ -> ok;
+ C:R ->
+ ST = erlang:get_stacktrace(),
+ error_info(
+ C, R, ST, Debug, S, Q, P,
+ format_status(terminate, get(), S, State, Data)),
+ erlang:raise(C, R, ST)
+ end,
+ case Reason of
+ normal -> ok;
+ shutdown -> ok;
+ {shutdown,_} -> ok;
+ _ ->
+ error_info(
+ Class, Reason, Stacktrace, Debug, S, Q, P,
+ format_status(terminate, get(), S, State, Data))
+ end,
+ case Stacktrace of
+ [] ->
+ erlang:Class(Reason);
+ _ ->
+ erlang:raise(Class, Reason, Stacktrace)
+ end.
+
+error_info(
+ Class, Reason, Stacktrace, Debug,
+ #{name := Name, callback_mode := CallbackMode},
+ Q, P, FmtData) ->
+ {FixedReason,FixedStacktrace} =
+ case Stacktrace of
+ [{M,F,Args,_}|ST]
+ when Class =:= error, Reason =:= undef ->
+ case code:is_loaded(M) of
+ false ->
+ {{'module could not be loaded',M},ST};
+ _ ->
+ Arity =
+ if
+ is_list(Args) ->
+ length(Args);
+ is_integer(Args) ->
+ Args
+ end,
+ case erlang:function_exported(M, F, Arity) of
+ true ->
+ {Reason,Stacktrace};
+ false ->
+ {{'function not exported',{M,F,Arity}},
+ ST}
+ end
+ end;
+ _ -> {Reason,Stacktrace}
+ end,
+ error_logger:format(
+ "** State machine ~p terminating~n" ++
+ case Q of
+ [] -> "";
+ _ -> "** Last event = ~p~n"
+ end ++
+ "** When server state = ~p~n" ++
+ "** Reason for termination = ~w:~p~n" ++
+ "** Callback mode = ~p~n" ++
+ case Q of
+ [_,_|_] -> "** Queued = ~p~n";
+ _ -> ""
+ end ++
+ case P of
+ [] -> "";
+ _ -> "** Postponed = ~p~n"
+ end ++
+ case FixedStacktrace of
+ [] -> "";
+ _ -> "** Stacktrace =~n** ~p~n"
+ end,
+ [Name |
+ case Q of
+ [] -> [];
+ [Event|_] -> [Event]
+ end] ++
+ [FmtData,Class,FixedReason,
+ CallbackMode] ++
+ case Q of
+ [_|[_|_] = Events] -> [Events];
+ _ -> []
+ end ++
+ case P of
+ [] -> [];
+ _ -> [P]
+ end ++
+ case FixedStacktrace of
+ [] -> [];
+ _ -> [FixedStacktrace]
+ end),
+ sys:print_log(Debug),
+ ok.
+
+
+%% Call Module:format_status/2 or return a default value
+format_status(Opt, PDict, #{module := Module}, State, Data) ->
+ case erlang:function_exported(Module, format_status, 2) of
+ true ->
+ try Module:format_status(Opt, [PDict,State,Data])
+ catch
+ Result -> Result;
+ _:_ ->
+ format_status_default(
+ Opt, State,
+ "Module:format_status/2 crashed")
+ end;
+ false ->
+ format_status_default(Opt, State, Data)
+ end.
+
+%% The default Module:format_status/2
+format_status_default(Opt, State, Data) ->
+ SSD = {State,Data},
+ case Opt of
+ terminate ->
+ SSD;
+ _ ->
+ [{data,[{"State",SSD}]}]
+ end.
diff --git a/lib/stdlib/src/io.erl b/lib/stdlib/src/io.erl
index 284f2e5a2b..f510f61e9f 100644
--- a/lib/stdlib/src/io.erl
+++ b/lib/stdlib/src/io.erl
@@ -444,7 +444,7 @@ scan_erl_form(Io, Prompt, Pos0, Options) ->
%% Parsing Erlang code.
-type parse_ret() :: {'ok',
- ExprList :: erl_parse:abstract_expr(),
+ ExprList :: [erl_parse:abstract_expr()],
EndLocation :: location()}
| {'eof', EndLocation :: location()}
| {'error',
@@ -631,41 +631,20 @@ io_requests(Pid, [], [Rs|Cont], Tail) ->
io_requests(_Pid, [], [], _Tail) ->
{false,[]}.
-
-bc_req(Pid,{Op,Enc,Param},MaybeConvert) ->
- case net_kernel:dflag_unicode_io(Pid) of
- true ->
- {false,{Op,Enc,Param}};
- false ->
- {MaybeConvert,{Op,Param}}
- end;
-bc_req(Pid,{Op,Enc,P,F},MaybeConvert) ->
- case net_kernel:dflag_unicode_io(Pid) of
- true ->
- {false,{Op,Enc,P,F}};
- false ->
- {MaybeConvert,{Op,P,F}}
- end;
-bc_req(Pid, {Op,Enc,M,F,A},MaybeConvert) ->
+bc_req(Pid, Req0, MaybeConvert) ->
case net_kernel:dflag_unicode_io(Pid) of
true ->
- {false,{Op,Enc,M,F,A}};
+ %% The most common case. A modern i/o server.
+ {false,Req0};
false ->
- {MaybeConvert,{Op,M,F,A}}
- end;
-bc_req(Pid, {Op,Enc,P,M,F,A},MaybeConvert) ->
- case net_kernel:dflag_unicode_io(Pid) of
- true ->
- {false,{Op,Enc,P,M,F,A}};
- false ->
- {MaybeConvert,{Op,P,M,F,A}}
- end;
-bc_req(Pid,{Op,Enc},MaybeConvert) ->
- case net_kernel:dflag_unicode_io(Pid) of
- true ->
- {false,{Op, Enc}};
- false ->
- {MaybeConvert,Op}
+ %% Backward compatibility only. Unlikely to ever happen.
+ case tuple_to_list(Req0) of
+ [Op,_Enc] ->
+ {MaybeConvert,Op};
+ [Op,_Enc|T] ->
+ Req = list_to_tuple([Op|T]),
+ {MaybeConvert,Req}
+ end
end.
io_request(Pid, {write,Term}) ->
diff --git a/lib/stdlib/src/io_lib.erl b/lib/stdlib/src/io_lib.erl
index ef30f16f18..ad98bc0420 100644
--- a/lib/stdlib/src/io_lib.erl
+++ b/lib/stdlib/src/io_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -112,14 +112,14 @@
-type format_spec() ::
#{
- control_char => char(),
- args => [any()],
- width => 'none' | integer(),
- adjust => 'left' | 'right',
- precision => 'none' | integer(),
- pad_char => char(),
- encoding => 'unicode' | 'latin1',
- strings => boolean()
+ control_char := char(),
+ args := [any()],
+ width := 'none' | integer(),
+ adjust := 'left' | 'right',
+ precision := 'none' | integer(),
+ pad_char := char(),
+ encoding := 'unicode' | 'latin1',
+ strings := boolean()
}.
%%----------------------------------------------------------------------
diff --git a/lib/stdlib/src/io_lib_format.erl b/lib/stdlib/src/io_lib_format.erl
index 282005da7d..1da866dc88 100644
--- a/lib/stdlib/src/io_lib_format.erl
+++ b/lib/stdlib/src/io_lib_format.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/io_lib_fread.erl b/lib/stdlib/src/io_lib_fread.erl
index 25555c6f52..6a8f8f728e 100644
--- a/lib/stdlib/src/io_lib_fread.erl
+++ b/lib/stdlib/src/io_lib_fread.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/io_lib_pretty.erl b/lib/stdlib/src/io_lib_pretty.erl
index 6309addf57..16ca2f41dc 100644
--- a/lib/stdlib/src/io_lib_pretty.erl
+++ b/lib/stdlib/src/io_lib_pretty.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/lib.erl b/lib/stdlib/src/lib.erl
index eb24516c50..56654097d9 100644
--- a/lib/stdlib/src/lib.erl
+++ b/lib/stdlib/src/lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -73,7 +73,7 @@ nonl([H|T]) -> [H|nonl(T)].
send(To, Msg) -> To ! Msg.
--spec sendw(To, Msg) -> Msg when
+-spec sendw(To, Msg) -> term() when
To :: pid() | atom() | {atom(), node()},
Msg :: term().
diff --git a/lib/stdlib/src/lists.erl b/lib/stdlib/src/lists.erl
index 2b4472cdf7..af9d63ddd6 100644
--- a/lib/stdlib/src/lists.erl
+++ b/lib/stdlib/src/lists.erl
@@ -39,7 +39,8 @@
-export([all/2,any/2,map/2,flatmap/2,foldl/3,foldr/3,filter/2,
partition/2,zf/2,filtermap/2,
mapfoldl/3,mapfoldr/3,foreach/2,takewhile/2,dropwhile/2,splitwith/2,
- split/2]).
+ split/2,
+ join/2]).
%%% BIFs
-export([keyfind/3, keymember/3, keysearch/3, member/2, reverse/2]).
@@ -1439,6 +1440,18 @@ split(N, [H|T], R) ->
split(_, [], _) ->
badarg.
+-spec join(Sep, List1) -> List2 when
+ Sep :: T,
+ List1 :: [T],
+ List2 :: [T],
+ T :: term().
+
+join(_Sep, []) -> [];
+join(Sep, [H|T]) -> [H|join_prepend(Sep, T)].
+
+join_prepend(_Sep, []) -> [];
+join_prepend(Sep, [H|T]) -> [Sep,H|join_prepend(Sep,T)].
+
%%% =================================================================
%%% Here follows the implementation of the sort functions.
%%%
diff --git a/lib/stdlib/src/log_mf_h.erl b/lib/stdlib/src/log_mf_h.erl
index 35723bbc9e..393da9ab27 100644
--- a/lib/stdlib/src/log_mf_h.erl
+++ b/lib/stdlib/src/log_mf_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/maps.erl b/lib/stdlib/src/maps.erl
index 43d10f4800..5dafdb282a 100644
--- a/lib/stdlib/src/maps.erl
+++ b/lib/stdlib/src/maps.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,17 +20,18 @@
-module(maps).
--export([get/3,filter/2,fold/3, map/2,
- size/1,
+-export([get/3, filter/2,fold/3,
+ map/2, size/1,
+ update_with/3, update_with/4,
without/2, with/2]).
-
-%%% BIFs
+%% BIFs
-export([get/2, find/2, from_list/1,
is_key/2, keys/1, merge/2,
- new/0, put/3, remove/2,
+ new/0, put/3, remove/2, take/2,
to_list/1, update/3, values/1]).
+%% Shadowed by erl_bif_types: maps:get/2
-spec get(Key,Map) -> Value when
Key :: term(),
Map :: map(),
@@ -46,7 +47,7 @@ get(_,_) -> erlang:nif_error(undef).
find(_,_) -> erlang:nif_error(undef).
-
+%% Shadowed by erl_bif_types: maps:from_list/1
-spec from_list(List) -> Map when
List :: [{Key,Value}],
Key :: term(),
@@ -56,6 +57,7 @@ find(_,_) -> erlang:nif_error(undef).
from_list(_) -> erlang:nif_error(undef).
+%% Shadowed by erl_bif_types: maps:is_key/2
-spec is_key(Key,Map) -> boolean() when
Key :: term(),
Map :: map().
@@ -71,6 +73,7 @@ is_key(_,_) -> erlang:nif_error(undef).
keys(_) -> erlang:nif_error(undef).
+%% Shadowed by erl_bif_types: maps:merge/2
-spec merge(Map1,Map2) -> Map3 when
Map1 :: map(),
Map2 :: map(),
@@ -86,6 +89,7 @@ merge(_,_) -> erlang:nif_error(undef).
new() -> erlang:nif_error(undef).
+%% Shadowed by erl_bif_types: maps:put/3
-spec put(Key,Value,Map1) -> Map2 when
Key :: term(),
Value :: term(),
@@ -102,7 +106,15 @@ put(_,_,_) -> erlang:nif_error(undef).
remove(_,_) -> erlang:nif_error(undef).
+-spec take(Key,Map1) -> {Value,Map2} | error when
+ Key :: term(),
+ Map1 :: map(),
+ Value :: term(),
+ Map2 :: map().
+
+take(_,_) -> erlang:nif_error(undef).
+%% Shadowed by erl_bif_types: maps:to_list/1
-spec to_list(Map) -> [{Key,Value}] when
Map :: map(),
Key :: term(),
@@ -111,6 +123,7 @@ remove(_,_) -> erlang:nif_error(undef).
to_list(_) -> erlang:nif_error(undef).
+%% Shadowed by erl_bif_types: maps:update/3
-spec update(Key,Value,Map1) -> Map2 when
Key :: term(),
Value :: term(),
@@ -127,8 +140,40 @@ update(_,_,_) -> erlang:nif_error(undef).
values(_) -> erlang:nif_error(undef).
+%% End of BIFs
+
+-spec update_with(Key,Fun,Map1) -> Map2 when
+ Key :: term(),
+ Map1 :: map(),
+ Map2 :: map(),
+ Fun :: fun((Value1 :: term()) -> Value2 :: term()).
+
+update_with(Key,Fun,Map) when is_function(Fun,1), is_map(Map) ->
+ try maps:get(Key,Map) of
+ Val -> maps:update(Key,Fun(Val),Map)
+ catch
+ error:{badkey,_} ->
+ erlang:error({badkey,Key},[Key,Fun,Map])
+ end;
+update_with(Key,Fun,Map) ->
+ erlang:error(error_type(Map),[Key,Fun,Map]).
+
+
+-spec update_with(Key,Fun,Init,Map1) -> Map2 when
+ Key :: term(),
+ Map1 :: Map1,
+ Map2 :: Map2,
+ Fun :: fun((Value1 :: term()) -> Value2 :: term()),
+ Init :: term().
+
+update_with(Key,Fun,Init,Map) when is_function(Fun,1), is_map(Map) ->
+ case maps:find(Key,Map) of
+ {ok,Val} -> maps:update(Key,Fun(Val),Map);
+ error -> maps:put(Key,Init,Map)
+ end;
+update_with(Key,Fun,Init,Map) ->
+ erlang:error(error_type(Map),[Key,Fun,Init,Map]).
-%%% End of BIFs
-spec get(Key, Map, Default) -> Value | Default when
Key :: term(),
diff --git a/lib/stdlib/src/math.erl b/lib/stdlib/src/math.erl
index 06dfc01bbb..97c965e27a 100644
--- a/lib/stdlib/src/math.erl
+++ b/lib/stdlib/src/math.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/ms_transform.erl b/lib/stdlib/src/ms_transform.erl
index b67b6f75d7..c0eea652e7 100644
--- a/lib/stdlib/src/ms_transform.erl
+++ b/lib/stdlib/src/ms_transform.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -224,8 +224,9 @@ transform_from_shell(Dialect, Clauses, BoundEnvironment) ->
%% Called when translating during compiling
%%
--spec parse_transform(Forms, Options) -> Forms when
- Forms :: [erl_parse:abstract_form()],
+-spec parse_transform(Forms, Options) -> Forms2 when
+ Forms :: [erl_parse:abstract_form() | erl_parse:form_info()],
+ Forms2 :: [erl_parse:abstract_form() | erl_parse:form_info()],
Options :: term().
parse_transform(Forms, _Options) ->
@@ -307,15 +308,18 @@ cleanup_filename({Old,OldRec,OldWarnings}) ->
add_record_definition({Name,FieldList}) ->
{KeyList,_} = lists:foldl(
- fun({record_field,_,{atom,Line0,FieldName}},{L,C}) ->
- {[{FieldName,C,{atom,Line0,undefined}}|L],C+1};
- ({record_field,_,{atom,_,FieldName},Def},{L,C}) ->
- {[{FieldName,C,Def}|L],C+1}
- end,
+ fun(F, {L,C}) -> {[record_field(F, C)|L],C+1} end,
{[],2},
FieldList),
put_records([{Name,KeyList}|get_records()]).
+record_field({record_field,_,{atom,Line0,FieldName}}, C) ->
+ {FieldName,C,{atom,Line0,undefined}};
+record_field({record_field,_,{atom,_,FieldName},Def}, C) ->
+ {FieldName,C,Def};
+record_field({typed_record_field,Field,_Type}, C) ->
+ record_field(Field, C).
+
forms([F0|Fs0]) ->
F1 = form(F0),
Fs1 = forms(Fs0),
diff --git a/lib/stdlib/src/ordsets.erl b/lib/stdlib/src/ordsets.erl
index 6010b41006..569407f5ef 100644
--- a/lib/stdlib/src/ordsets.erl
+++ b/lib/stdlib/src/ordsets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/otp_internal.erl b/lib/stdlib/src/otp_internal.erl
index 9d394e19d7..3bd338071b 100644
--- a/lib/stdlib/src/otp_internal.erl
+++ b/lib/stdlib/src/otp_internal.erl
@@ -35,7 +35,7 @@
obsolete(Module, Name, Arity) ->
case obsolete_1(Module, Name, Arity) of
{deprecated=Tag,{_,_,_}=Replacement} ->
- {Tag,Replacement,"in a future release"};
+ {Tag,Replacement,"a future release"};
{_,String}=Ret when is_list(String) ->
Ret;
{_,_,_}=Ret ->
@@ -47,18 +47,6 @@ obsolete(Module, Name, Arity) ->
obsolete_1(net, _, _) ->
{deprecated, "module 'net' obsolete; use 'net_adm'"};
-obsolete_1(erl_internal, builtins, 0) ->
- {deprecated, {erl_internal, bif, 2}};
-
-obsolete_1(erl_eval, seq, 2) ->
- {deprecated, {erl_eval, exprs, 2}};
-obsolete_1(erl_eval, seq, 3) ->
- {deprecated, {erl_eval, exprs, 3}};
-obsolete_1(erl_eval, arg_list, 2) ->
- {deprecated, {erl_eval, expr_list, 2}};
-obsolete_1(erl_eval, arg_list, 3) ->
- {deprecated, {erl_eval, expr_list, 3}};
-
obsolete_1(erlang, hash, 2) ->
{deprecated, {erlang, phash2, 2}};
@@ -70,11 +58,12 @@ obsolete_1(erlang, now, 0) ->
obsolete_1(calendar, local_time_to_universal_time, 1) ->
{deprecated, {calendar, local_time_to_universal_time_dst, 1}};
-obsolete_1(rpc, safe_multi_server_call, A) when A =:= 2; A =:= 3 ->
- {deprecated, {rpc, multi_server_call, A}};
+%% *** CRYPTO added in OTP 19 ***
+obsolete_1(crypto, rand_bytes, 1) ->
+ {deprecated, {crypto, strong_rand_bytes, 1}};
-%% *** CRYPTO add in R16B01 ***
+%% *** CRYPTO added in R16B01 ***
obsolete_1(crypto, md4, 1) ->
{deprecated, {crypto, hash, 2}};
@@ -391,106 +380,10 @@ obsolete_1(http, cookie_header, 2) -> {removed,{httpc,cookie_header,2},"R15B"
obsolete_1(http, stream_next, 1) -> {removed,{httpc,stream_next,1},"R15B"};
obsolete_1(http, default_profile, 0) -> {removed,{httpc,default_profile,0},"R15B"};
-obsolete_1(httpd, start, 0) -> {removed,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start, 1) -> {removed,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start_link, 0) -> {removed,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start_link, 1) -> {removed,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start_child, 0) -> {removed,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, start_child, 1) -> {removed,{inets,start,[2,3]},"R14B"};
-obsolete_1(httpd, stop, 0) -> {removed,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop, 1) -> {removed,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop, 2) -> {removed,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop_child, 0) -> {removed,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop_child, 1) -> {removed,{inets,stop,2},"R14B"};
-obsolete_1(httpd, stop_child, 2) -> {removed,{inets,stop,2},"R14B"};
-obsolete_1(httpd, restart, 0) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, restart, 1) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, restart, 2) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 0) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 1) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 2) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 3) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, block, 4) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, unblock, 0) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, unblock, 1) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd, unblock, 2) -> {removed,{httpd,reload_config,2},"R14B"};
-obsolete_1(httpd_util, key1search, 2) -> {removed,{proplists,get_value,2},"R13B"};
-obsolete_1(httpd_util, key1search, 3) -> {removed,{proplists,get_value,3},"R13B"};
-obsolete_1(ftp, open, 3) -> {removed,{inets,start,[2,3]},"R14B"};
-obsolete_1(ftp, force_active, 1) -> {removed,{inets,start,[2,3]},"R14B"};
-
-%% Added in R12B-4.
-obsolete_1(ssh_cm, connect, A) when 1 =< A, A =< 3 ->
- {removed,{ssh,connect,A},"R14B"};
-obsolete_1(ssh_cm, listen, A) when 2 =< A, A =< 4 ->
- {removed,{ssh,daemon,A},"R14B"};
-obsolete_1(ssh_cm, stop_listener, 1) ->
- {removed,{ssh,stop_listener,[1,2]},"R14B"};
-obsolete_1(ssh_cm, session_open, A) when A =:= 2; A =:= 4 ->
- {removed,{ssh_connection,session_channel,A},"R14B"};
-obsolete_1(ssh_cm, direct_tcpip, A) when A =:= 6; A =:= 8 ->
- {removed,{ssh_connection,direct_tcpip,A},"R14B"};
-obsolete_1(ssh_cm, tcpip_forward, 3) ->
- {removed,{ssh_connection,tcpip_forward,3},"R14B"};
-obsolete_1(ssh_cm, cancel_tcpip_forward, 3) ->
- {removed,{ssh_connection,cancel_tcpip_forward,3},"R14B"};
-obsolete_1(ssh_cm, open_pty, A) when A =:= 3; A =:= 7; A =:= 9 ->
- {removed,{ssh_connection,open_pty,A},"R14B"};
-obsolete_1(ssh_cm, setenv, 5) ->
- {removed,{ssh_connection,setenv,5},"R14B"};
-obsolete_1(ssh_cm, shell, 2) ->
- {removed,{ssh_connection,shell,2},"R14B"};
-obsolete_1(ssh_cm, exec, 4) ->
- {removed,{ssh_connection,exec,4},"R14B"};
-obsolete_1(ssh_cm, subsystem, 4) ->
- {removed,{ssh_connection,subsystem,4},"R14B"};
-obsolete_1(ssh_cm, winch, A) when A =:= 4; A =:= 6 ->
- {removed,{ssh_connection,window_change,A},"R14B"};
-obsolete_1(ssh_cm, signal, 3) ->
- {removed,{ssh_connection,signal,3},"R14B"};
-obsolete_1(ssh_cm, attach, A) when A =:= 2; A =:= 3 ->
- {removed,"no longer useful; removed in R14B"};
-obsolete_1(ssh_cm, detach, 2) ->
- {removed,"no longer useful; removed in R14B"};
-obsolete_1(ssh_cm, set_user_ack, 4) ->
- {removed,"no longer useful; removed in R14B"};
-obsolete_1(ssh_cm, adjust_window, 3) ->
- {removed,{ssh_connection,adjust_window,3},"R14B"};
-obsolete_1(ssh_cm, close, 2) ->
- {removed,{ssh_connection,close,2},"R14B"};
-obsolete_1(ssh_cm, stop, 1) ->
- {removed,{ssh,close,1},"R14B"};
-obsolete_1(ssh_cm, send_eof, 2) ->
- {removed,{ssh_connection,send_eof,2},"R14B"};
-obsolete_1(ssh_cm, send, A) when A =:= 3; A =:= 4 ->
- {removed,{ssh_connection,send,A},"R14B"};
-obsolete_1(ssh_cm, send_ack, A) when 3 =< A, A =< 5 ->
- {removed,{ssh_connection,send,[3,4]},"R14B"};
-obsolete_1(ssh_ssh, connect, A) when 1 =< A, A =< 3 ->
- {removed,{ssh,shell,A},"R14B"};
-obsolete_1(ssh_sshd, listen, A) when 0 =< A, A =< 3 ->
- {removed,{ssh,daemon,[1,2,3]},"R14B"};
-obsolete_1(ssh_sshd, stop, 1) ->
- {removed,{ssh,stop_listener,1},"R14B"};
-
%% Added in R13A.
obsolete_1(regexp, _, _) ->
{removed, "removed in R15; use the re module instead"};
-obsolete_1(lists, flat_length, 1) ->
- {removed,{lists,flatlength,1},"R14"};
-
-obsolete_1(ssh_sftp, connect, A) when 1 =< A, A =< 3 ->
- {removed,{ssh_sftp,start_channel,A},"R14B"};
-obsolete_1(ssh_sftp, stop, 1) ->
- {removed,{ssh_sftp,stop_channel,1},"R14B"};
-
-%% Added in R13B01.
-obsolete_1(ssl_pkix, decode_cert_file, A) when A =:= 1; A =:= 2 ->
- {removed,"removed in R14A; use public_key:pem_to_der/1 and public_key:pkix_decode_cert/2 instead"};
-obsolete_1(ssl_pkix, decode_cert, A) when A =:= 1; A =:= 2 ->
- {removed,{public_key,pkix_decode_cert,2},"R14A"};
-
%% Added in R13B04.
obsolete_1(erlang, concat_binary, 1) ->
{removed,{erlang,list_to_binary,1},"R15B"};
@@ -588,49 +481,40 @@ obsolete_1(asn1rt, utf8_list_to_binary, 1) ->
%% Added in OTP 18.
obsolete_1(core_lib, get_anno, 1) ->
- {deprecated,{cerl,get_ann,1}};
+ {removed,{cerl,get_ann,1},"19"};
obsolete_1(core_lib, set_anno, 2) ->
- {deprecated,{cerl,set_ann,2}};
+ {removed,{cerl,set_ann,2},"19"};
obsolete_1(core_lib, is_literal, 1) ->
- {deprecated,{cerl,is_literal,1}};
+ {removed,{cerl,is_literal,1},"19"};
obsolete_1(core_lib, is_literal_list, 1) ->
- {deprecated,"deprecated; use lists:all(fun cerl:is_literal/1, L)"
+ {removed,"removed; use lists:all(fun cerl:is_literal/1, L)"
" instead"};
obsolete_1(core_lib, literal_value, 1) ->
- {deprecated,{core_lib,concrete,1}};
+ {removed,{core_lib,concrete,1},"19"};
obsolete_1(erl_scan, set_attribute, 3) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use erl_anno:set_line/2 instead"};
+ {removed,{erl_anno,set_line,2},"19.0"};
obsolete_1(erl_scan, attributes_info, 1) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use "
+ {removed,"removed in 19.0; use "
"erl_anno:{column,line,location,text}/1 instead"};
obsolete_1(erl_scan, attributes_info, 2) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use "
+ {removed,"removed in 19.0; use "
"erl_anno:{column,line,location,text}/1 instead"};
obsolete_1(erl_scan, token_info, 1) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use "
+ {removed,"removed in 19.0; use "
"erl_scan:{category,column,line,location,symbol,text}/1 instead"};
obsolete_1(erl_scan, token_info, 2) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use "
+ {removed,"removed in 19.0; use "
"erl_scan:{category,column,line,location,symbol,text}/1 instead"};
obsolete_1(erl_parse, set_line, 2) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use erl_anno:set_line/2 instead"};
+ {removed,{erl_anno,set_line,2},"19.0"};
obsolete_1(erl_parse, get_attributes, 1) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use "
+ {removed,"removed in 19.0; use "
"erl_anno:{column,line,location,text}/1 instead"};
obsolete_1(erl_parse, get_attribute, 2) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use "
+ {removed,"removed in 19.0; use "
"erl_anno:{column,line,location,text}/1 instead"};
obsolete_1(erl_lint, modify_line, 2) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use erl_parse:map_anno/2 instead"};
+ {removed,{erl_parse,map_anno,2},"19.0"};
obsolete_1(ssl, negotiated_next_protocol, 1) ->
{deprecated,{ssl,negotiated_protocol,1}};
@@ -650,8 +534,22 @@ obsolete_1(httpd_conf, is_file, 1) ->
obsolete_1(httpd_conf, make_integer, 1) ->
{deprecated, "deprecated; use erlang:list_to_integer/1 instead"};
+%% Added in OTP 19.
+
+obsolete_1(random, _, _) ->
+ {deprecated, "the 'random' module is deprecated; "
+ "use the 'rand' module instead"};
+obsolete_1(code, rehash, 0) ->
+ {deprecated, "deprecated because the code path cache feature has been removed"};
+obsolete_1(queue, lait, 1) ->
+ {deprecated, {queue,liat,1}};
+
+%% Removed in OTP 19.
+
obsolete_1(overload, _, _) ->
- {deprecated, "deprecated; will be removed in OTP 19"};
+ {removed, "removed in OTP 19"};
+obsolete_1(rpc, safe_multi_server_call, A) when A =:= 2; A =:= 3 ->
+ {removed, {rpc, multi_server_call, A}};
obsolete_1(_, _, _) ->
no.
@@ -705,6 +603,7 @@ is_snmp_agent_function(_, _) -> false.
-spec obsolete_type(module(), atom(), arity()) ->
'no' | {tag(), string()} | {tag(), mfas(), release()}.
+-dialyzer({no_match, obsolete_type/3}).
obsolete_type(Module, Name, NumberOfVariables) ->
case obsolete_type_1(Module, Name, NumberOfVariables) of
{deprecated=Tag,{_,_,_}=Replacement} ->
@@ -718,13 +617,10 @@ obsolete_type(Module, Name, NumberOfVariables) ->
end.
obsolete_type_1(erl_scan,column,0) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use erl_anno:column() instead"};
+ {removed,{erl_anno,column,0},"19.0"};
obsolete_type_1(erl_scan,line,0) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use erl_anno:line() instead"};
+ {removed,{erl_anno,line,0},"19.0"};
obsolete_type_1(erl_scan,location,0) ->
- {deprecated,
- "deprecated (will be removed in OTP 19); use erl_anno:location() instead"};
+ {removed,{erl_anno,location,0},"19.0"};
obsolete_type_1(_,_,_) ->
no.
diff --git a/lib/stdlib/src/pool.erl b/lib/stdlib/src/pool.erl
index 2112337f65..05950a1d7c 100644
--- a/lib/stdlib/src/pool.erl
+++ b/lib/stdlib/src/pool.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/proc_lib.erl b/lib/stdlib/src/proc_lib.erl
index 10c476a6f5..3dc1848550 100644
--- a/lib/stdlib/src/proc_lib.erl
+++ b/lib/stdlib/src/proc_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -43,12 +43,19 @@
%%-----------------------------------------------------------------------------
-type priority_level() :: 'high' | 'low' | 'max' | 'normal'.
+-type max_heap_size() :: non_neg_integer() |
+ #{ size => non_neg_integer(),
+ kill => true,
+ error_logger => true}.
-type spawn_option() :: 'link'
| 'monitor'
| {'priority', priority_level()}
+ | {'max_heap_size', max_heap_size()}
| {'min_heap_size', non_neg_integer()}
| {'min_bin_vheap_size', non_neg_integer()}
- | {'fullsweep_after', non_neg_integer()}.
+ | {'fullsweep_after', non_neg_integer()}
+ | {'message_queue_data',
+ 'off_heap' | 'on_heap' | 'mixed' }.
-type dict_or_pid() :: pid()
| (ProcInfo :: [_])
@@ -472,16 +479,12 @@ trans_init(gen,init_it,[gen_server,_,_,supervisor_bridge,[Module|_],_]) ->
{supervisor_bridge,Module,1};
trans_init(gen,init_it,[gen_server,_,_,_,supervisor_bridge,[Module|_],_]) ->
{supervisor_bridge,Module,1};
-trans_init(gen,init_it,[gen_server,_,_,Module,_,_]) ->
- {Module,init,1};
-trans_init(gen,init_it,[gen_server,_,_,_,Module|_]) ->
- {Module,init,1};
-trans_init(gen,init_it,[gen_fsm,_,_,Module,_,_]) ->
- {Module,init,1};
-trans_init(gen,init_it,[gen_fsm,_,_,_,Module|_]) ->
- {Module,init,1};
trans_init(gen,init_it,[gen_event|_]) ->
{gen_event,init_it,6};
+trans_init(gen,init_it,[_GenMod,_,_,Module,_,_]) when is_atom(Module) ->
+ {Module,init,1};
+trans_init(gen,init_it,[_GenMod,_,_,_,Module|_]) when is_atom(Module) ->
+ {Module,init,1};
trans_init(M, F, A) when is_atom(M), is_atom(F) ->
{M,F,length(A)}.
diff --git a/lib/stdlib/src/proplists.erl b/lib/stdlib/src/proplists.erl
index 1840fa5cc0..5356467b19 100644
--- a/lib/stdlib/src/proplists.erl
+++ b/lib/stdlib/src/proplists.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -438,8 +438,9 @@ substitute_aliases_1([], P) ->
%% @see normalize/2
-spec substitute_negations(Negations, ListIn) -> ListOut when
- Negations :: [{Key, Key}],
- Key :: term(),
+ Negations :: [{Key1, Key2}],
+ Key1 :: term(),
+ Key2 :: term(),
ListIn :: [term()],
ListOut :: [term()].
diff --git a/lib/stdlib/src/qlc.erl b/lib/stdlib/src/qlc.erl
index 1ae7c6cc25..f3665824f2 100644
--- a/lib/stdlib/src/qlc.erl
+++ b/lib/stdlib/src/qlc.erl
@@ -734,10 +734,11 @@ table(TraverseFun, Options) when is_function(TraverseFun) ->
table(T1, T2) ->
erlang:error(badarg, [T1, T2]).
--spec(transform_from_evaluator(LC, Bs) -> Expr when
+-spec(transform_from_evaluator(LC, Bs) -> Return when
LC :: abstract_expr(),
- Expr :: abstract_expr(),
- Bs :: erl_eval:binding_struct()).
+ Bs :: erl_eval:binding_struct(),
+ Return :: {ok, abstract_expr()}
+ | {not_ok, {error, module(), Reason :: term()}}).
transform_from_evaluator(LC, Bs0) ->
qlc_pt:transform_from_evaluator(LC, Bs0).
@@ -810,21 +811,21 @@ options(Options0, [Key | Keys], L) when is_list(Options0) ->
{ok, U};
{pre_fun, U=undefined} ->
{ok, U};
- {info_fun, Fun} when is_function(Fun), is_function(Fun, 1) ->
+ {info_fun, Fun} when is_function(Fun, 1) ->
{ok, Fun};
- {pre_fun, Fun} when is_function(Fun), is_function(Fun, 1) ->
+ {pre_fun, Fun} when is_function(Fun, 1) ->
{ok, Fun};
- {post_fun, Fun} when is_function(Fun), is_function(Fun, 0) ->
+ {post_fun, Fun} when is_function(Fun, 0) ->
{ok, Fun};
- {lookup_fun, Fun} when is_function(Fun), is_function(Fun, 2) ->
+ {lookup_fun, Fun} when is_function(Fun, 2) ->
{ok, Fun};
{max_lookup, Max} when is_integer(Max), Max >= 0 ->
{ok, Max};
{max_lookup, infinity} ->
{ok, -1};
- {format_fun, Fun} when is_function(Fun), is_function(Fun, 1) ->
+ {format_fun, Fun} when is_function(Fun, 1) ->
{ok, Fun};
- {parent_fun, Fun} when is_function(Fun), is_function(Fun, 0) ->
+ {parent_fun, Fun} when is_function(Fun, 0) ->
{ok, Fun};
{key_equality, KE='=='} ->
{ok, KE};
@@ -887,7 +888,7 @@ options(Options0, [Key | Keys], L) when is_list(Options0) ->
{depth, Depth} when Depth =:= infinity;
is_integer(Depth), Depth >= 0 ->
{ok, Depth};
- {order, Order} when is_function(Order), is_function(Order, 2);
+ {order, Order} when is_function(Order, 2);
(Order =:= ascending);
(Order =:= descending) ->
{ok, Order};
diff --git a/lib/stdlib/src/qlc_pt.erl b/lib/stdlib/src/qlc_pt.erl
index 9577d17a85..0db63b81f4 100644
--- a/lib/stdlib/src/qlc_pt.erl
+++ b/lib/stdlib/src/qlc_pt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -67,8 +67,8 @@
%%%
-spec(parse_transform(Forms, Options) -> Forms2 when
- Forms :: [erl_parse:abstract_form()],
- Forms2 :: [erl_parse:abstract_form()],
+ Forms :: [erl_parse:abstract_form() | erl_parse:form_info()],
+ Forms2 :: [erl_parse:abstract_form() | erl_parse:form_info()],
Options :: [Option],
Option :: type_checker | compile:option()).
@@ -117,19 +117,21 @@ parse_transform(Forms0, Options) ->
true = ets:delete(NodeInfo)
end.
--spec(transform_from_evaluator(LC, Bs) -> Expr when
+-spec(transform_from_evaluator(LC, Bs) -> Return when
LC :: erl_parse:abstract_expr(),
- Expr :: erl_parse:abstract_expr(),
- Bs :: erl_eval:binding_struct()).
+ Bs :: erl_eval:binding_struct(),
+ Return :: {ok, erl_parse:abstract_expr()}
+ | {not_ok, {error, module(), Reason :: term()}}).
transform_from_evaluator(LC, Bindings) ->
?DEBUG("qlc Parse Transform (Evaluator Version)~n", []),
transform_expression(LC, Bindings, false).
--spec(transform_expression(LC, Bs) -> Expr when
+-spec(transform_expression(LC, Bs) -> Return when
LC :: erl_parse:abstract_expr(),
- Expr :: erl_parse:abstract_expr(),
- Bs :: erl_eval:binding_struct()).
+ Bs :: erl_eval:binding_struct(),
+ Return :: {ok, erl_parse:abstract_expr()}
+ | {not_ok, [{error, Reason :: term()}]}).
transform_expression(LC, Bindings) ->
transform_expression(LC, Bindings, true).
@@ -200,7 +202,7 @@ exclude_integers_from_unique_line_numbers(Forms, NodeInfo) ->
find_integers(Forms) ->
F = fun(A) ->
- Fs1 = erl_parse:map_anno(fun(_) -> A end, Forms),
+ Fs1 = map_anno(fun(_) -> A end, Forms),
ordsets:from_list(integers(Fs1, []))
end,
ordsets:to_list(ordsets:intersection(F(anno0()), F(anno1()))).
@@ -319,13 +321,13 @@ badarg(Forms, State) ->
E0.
lc_nodes(E, NodeInfo) ->
- erl_parse:map_anno(fun(Anno) ->
- N = erl_anno:line(Anno),
- [{N, Data}] = ets:lookup(NodeInfo, N),
- NData = Data#{inside_lc => true},
- true = ets:insert(NodeInfo, {N, NData}),
- Anno
- end, E).
+ map_anno(fun(Anno) ->
+ N = erl_anno:line(Anno),
+ [{N, Data}] = ets:lookup(NodeInfo, N),
+ NData = Data#{inside_lc => true},
+ true = ets:insert(NodeInfo, {N, NData}),
+ Anno
+ end, E).
used_genvar_messages(MsL, S) ->
[{File,[{Loc,?APIMOD,{used_generator_variable,V}}]}
@@ -416,7 +418,7 @@ intro_anno(LC, Where, QId, NodeInfo) ->
true = ets:insert(NodeInfo, {Location,Data}),
Anno
end,
- erl_parse:map_anno(Fun, save_anno(LC, NodeInfo)).
+ map_anno(Fun, save_anno(LC, NodeInfo)).
compile_errors(FormsNoShadows) ->
case compile_forms(FormsNoShadows, []) of
@@ -1650,7 +1652,7 @@ reset_anno(T) ->
set_anno(T, anno0()).
set_anno(T, A) ->
- erl_parse:map_anno(fun(_L) -> A end, T).
+ map_anno(fun(_L) -> A end, T).
-record(fstate, {state, bind_fun, imported}).
@@ -1914,9 +1916,9 @@ expand_pattern_records(P, State) ->
expand_expr_records(E, State) ->
RecordDefs = State#state.records,
A = anno1(),
- Forms = RecordDefs ++ [{function,A,foo,0,[{clause,A,[],[],[pe(E)]}]}],
- [{function,_,foo,0,[{clause,_,[],[],[NE]}]}] =
- erl_expand_records:module(Forms, [no_strict_record_tests]),
+ Forms0 = RecordDefs ++ [{function,A,foo,0,[{clause,A,[],[],[pe(E)]}]}],
+ Forms = erl_expand_records:module(Forms0, [no_strict_record_tests]),
+ {function,_,foo,0,[{clause,_,[],[],[NE]}]} = lists:last(Forms),
NE.
%% Partial evaluation.
@@ -2609,7 +2611,7 @@ save_anno(Abstr, NodeInfo) ->
true = ets:insert(NodeInfo, Data),
erl_anno:new(N)
end,
- erl_parse:map_anno(F, Abstr).
+ map_anno(F, Abstr).
next_slot(T) ->
I = ets:update_counter(T, var_n, 1),
@@ -2633,7 +2635,7 @@ restore_anno(Abstr, NodeInfo) ->
Anno
end
end,
- erl_parse:map_anno(F, Abstr).
+ map_anno(F, Abstr).
restore_loc(Location, #state{node_info = NodeInfo}) ->
case ets:lookup(NodeInfo, Location) of
@@ -2872,6 +2874,14 @@ var_mapfold(F, A0, [E0 | Es0]) ->
var_mapfold(_F, A, E) ->
{E, A}.
+map_anno(F, AbstrList) when is_list(AbstrList) ->
+ [map_anno1(F, Abstr) || Abstr <- AbstrList];
+map_anno(F, Abstr) ->
+ map_anno1(F, Abstr).
+
+map_anno1(F, Abstr) ->
+ erl_parse:map_anno(F, Abstr).
+
family_list(L) ->
sofs:to_external(family(L)).
diff --git a/lib/stdlib/src/queue.erl b/lib/stdlib/src/queue.erl
index 2e65759d2a..11c0aa8d2b 100644
--- a/lib/stdlib/src/queue.erl
+++ b/lib/stdlib/src/queue.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,10 +31,14 @@
%% Okasaki API from klacke
-export([cons/2,head/1,tail/1,
- snoc/2,last/1,daeh/1,init/1,liat/1,lait/1]).
+ snoc/2,last/1,daeh/1,init/1,liat/1]).
-export_type([queue/0, queue/1]).
+%% Mis-spelled, deprecated.
+-export([lait/1]).
+-deprecated([lait/1]).
+
%%--------------------------------------------------------------------------
%% Efficient implementation of double ended fifo queues
%%
diff --git a/lib/stdlib/src/rand.erl b/lib/stdlib/src/rand.erl
index d455abf7b0..93409d95df 100644
--- a/lib/stdlib/src/rand.erl
+++ b/lib/stdlib/src/rand.erl
@@ -44,11 +44,11 @@
%% This depends on the algorithm handler function
-type alg_seed() :: exs64_state() | exsplus_state() | exs1024_state().
%% This is the algorithm handler function within this module
--type alg_handler() :: #{type => alg(),
- max => integer(),
- next => fun(),
- uniform => fun(),
- uniform_n => fun()}.
+-type alg_handler() :: #{type := alg(),
+ max := integer(),
+ next := fun(),
+ uniform := fun(),
+ uniform_n := fun()}.
%% Internal state
-opaque state() :: {alg_handler(), alg_seed()}.
diff --git a/lib/stdlib/src/random.erl b/lib/stdlib/src/random.erl
index 8b67cde56c..46dabb4323 100644
--- a/lib/stdlib/src/random.erl
+++ b/lib/stdlib/src/random.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
%% %CopyrightEnd%
%%
-module(random).
+-deprecated(module).
%% Reasonable random number generator.
%% The method is attributed to B. A. Wichmann and I. D. Hill
diff --git a/lib/stdlib/src/re.erl b/lib/stdlib/src/re.erl
index 80bfe38970..52d3c35608 100644
--- a/lib/stdlib/src/re.erl
+++ b/lib/stdlib/src/re.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/sets.erl b/lib/stdlib/src/sets.erl
index cd435ff49c..3e70450320 100644
--- a/lib/stdlib/src/sets.erl
+++ b/lib/stdlib/src/sets.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/shell.erl b/lib/stdlib/src/shell.erl
index ce1d9eb0ff..28f37ef8bf 100644
--- a/lib/stdlib/src/shell.erl
+++ b/lib/stdlib/src/shell.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -768,6 +768,8 @@ used_records({call,_,{atom,_,record_info},[A,{atom,_,Name}]}) ->
{name, Name, A};
used_records({call,Line,{tuple,_,[M,F]},As}) ->
used_records({call,Line,{remote,Line,M,F},As});
+used_records({type,_,record,[{atom,_,Name}|Fs]}) ->
+ {name, Name, Fs};
used_records(T) when is_tuple(T) ->
{expr, tuple_to_list(T)};
used_records(E) ->
@@ -917,9 +919,9 @@ expand_records(UsedRecords, E0) ->
RecordDefs = [Def || {_Name,Def} <- UsedRecords],
L = erl_anno:new(1),
E = prep_rec(E0),
- Forms = RecordDefs ++ [{function,L,foo,0,[{clause,L,[],[],[E]}]}],
- [{function,L,foo,0,[{clause,L,[],[],[NE]}]}] =
- erl_expand_records:module(Forms, [strict_record_tests]),
+ Forms0 = RecordDefs ++ [{function,L,foo,0,[{clause,L,[],[],[E]}]}],
+ Forms = erl_expand_records:module(Forms0, [strict_record_tests]),
+ {function,L,foo,0,[{clause,L,[],[],[NE]}]} = lists:last(Forms),
prep_rec(NE).
prep_rec({value,_CommandN,_V}=Value) ->
@@ -1081,6 +1083,8 @@ record_fields([{record_field,_,{atom,_,Field}} | Fs]) ->
[Field | record_fields(Fs)];
record_fields([{record_field,_,{atom,_,Field},_} | Fs]) ->
[Field | record_fields(Fs)];
+record_fields([{typed_record_field,Field,_Type} | Fs]) ->
+ record_fields([Field | Fs]);
record_fields([]) ->
[].
diff --git a/lib/stdlib/src/shell_default.erl b/lib/stdlib/src/shell_default.erl
index 4ef5e14db1..6947cf181b 100644
--- a/lib/stdlib/src/shell_default.erl
+++ b/lib/stdlib/src/shell_default.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/slave.erl b/lib/stdlib/src/slave.erl
index 24fc8ce204..5b5c328c0c 100644
--- a/lib/stdlib/src/slave.erl
+++ b/lib/stdlib/src/slave.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -289,10 +289,7 @@ register_unique_name(Number) ->
%% no need to use rsh.
mk_cmd(Host, Name, Args, Waiter, Prog0) ->
- Prog = case os:type() of
- {ose,_} -> mk_ose_prog(Prog0);
- _ -> quote_progname(Prog0)
- end,
+ Prog = quote_progname(Prog0),
BasicCmd = lists:concat([Prog,
" -detached -noinput -master ", node(),
" ", long_or_short(), Name, "@", Host,
@@ -312,24 +309,6 @@ mk_cmd(Host, Name, Args, Waiter, Prog0) ->
end
end.
-%% On OSE we have to pass the beam arguments directory to the slave
-%% process. To find out what arguments that should be passed on we
-%% make an assumption. All arguments after the last "--" should be
-%% skipped. So given these arguments:
-%% -Muycs256 -A 1 -- -root /mst/ -progname beam.debug.smp -- -home /mst/ -- -kernel inetrc '"/mst/inetrc.conf"' -- -name test@localhost
-%% we send
-%% -Muycs256 -A 1 -- -root /mst/ -progname beam.debug.smp -- -home /mst/ -- -kernel inetrc '"/mst/inetrc.conf"' --
-%% to the slave with whatever other args that are added in mk_cmd.
-mk_ose_prog(Prog) ->
- SkipTail = fun("--",[]) ->
- ["--"];
- (_,[]) ->
- [];
- (Arg,Args) ->
- [Arg," "|Args]
- end,
- [Prog,tl(lists:foldr(SkipTail,[],erlang:system_info(emu_args)))].
-
%% This is an attempt to distinguish between spaces in the program
%% path and spaces that separate arguments. The program is quoted to
%% allow spaces in the path.
diff --git a/lib/stdlib/src/sofs.erl b/lib/stdlib/src/sofs.erl
index bcd1fc11e2..c244e06ca4 100644
--- a/lib/stdlib/src/sofs.erl
+++ b/lib/stdlib/src/sofs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -621,6 +621,9 @@ canonical_relation(Sets) when ?IS_SET(Sets) ->
%%% Functions on binary relations only.
%%%
+-spec(rel2fam(BinRel) -> Family when
+ Family :: family(),
+ BinRel :: binary_relation()).
rel2fam(R) ->
relation_to_family(R).
diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src
index b8a7973cf2..09176d2ca0 100644
--- a/lib/stdlib/src/stdlib.app.src
+++ b/lib/stdlib/src/stdlib.app.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -65,6 +65,7 @@
gen_event,
gen_fsm,
gen_server,
+ gen_statem,
io,
io_lib,
io_lib_format,
@@ -105,7 +106,7 @@
dets]},
{applications, [kernel]},
{env, []},
- {runtime_dependencies, ["sasl-2.6","kernel-4.1","erts-7.3","crypto-3.3",
+ {runtime_dependencies, ["sasl-3.0","kernel-5.0","erts-8.0","crypto-3.3",
"compiler-5.0"]}
]}.
diff --git a/lib/stdlib/src/stdlib.appup.src b/lib/stdlib/src/stdlib.appup.src
index 8a313591a7..9877662743 100644
--- a/lib/stdlib/src/stdlib.appup.src
+++ b/lib/stdlib/src/stdlib.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,9 +18,9 @@
%% %CopyrightEnd%
{"%VSN%",
%% Up from - max one major revision back
- [{<<"2\\.[5-8](\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-18.*
- {<<"2\\.[0-4](\\.[0-9]+)*">>,[restart_new_emulator]}], % 17.0-17.5
+ [{<<"3\\.0(\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-19.*
+ {<<"2\\.[5-8](\\.[0-9]+)*">>,[restart_new_emulator]}], % OTP-18.*
%% Down to - max one major revision back
- [{<<"2\\.[5-8](\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-18.*
- {<<"2\\.[0-4](\\.[0-9]+)*">>,[restart_new_emulator]}] % 17.0-17.5
+ [{<<"3\\.0(\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-19.*
+ {<<"2\\.[5-8](\\.[0-9]+)*">>,[restart_new_emulator]}] % OTP-18.*
}.
diff --git a/lib/stdlib/src/string.erl b/lib/stdlib/src/string.erl
index 07659ed812..c659db78bd 100644
--- a/lib/stdlib/src/string.erl
+++ b/lib/stdlib/src/string.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/supervisor.erl b/lib/stdlib/src/supervisor.erl
index cecdebd0c8..c81e72689c 100644
--- a/lib/stdlib/src/supervisor.erl
+++ b/lib/stdlib/src/supervisor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
%% Internal exports
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
+ terminate/2, code_change/3, format_status/2]).
-export([try_again_restart/2]).
%% For release_handler only
@@ -57,8 +57,8 @@
| {'global', Name :: atom()}
| {'via', Module :: module(), Name :: any()}
| pid().
--type child_spec() :: #{id => child_id(), % mandatory
- start => mfargs(), % mandatory
+-type child_spec() :: #{id := child_id(), % mandatory
+ start := mfargs(), % mandatory
restart => restart(), % optional
shutdown => shutdown(), % optional
type => worker(), % optional
@@ -110,11 +110,13 @@
-define(SET, sets:set).
-record(state, {name,
- strategy :: strategy(),
+ strategy :: strategy() | 'undefined',
children = [] :: [child_rec()],
- dynamics :: ?DICT(pid(), list()) | ?SET(pid()),
- intensity :: non_neg_integer(),
- period :: pos_integer(),
+ dynamics :: {'dict', ?DICT(pid(), list())}
+ | {'set', ?SET(pid())}
+ | 'undefined',
+ intensity :: non_neg_integer() | 'undefined',
+ period :: pos_integer() | 'undefined',
restarts = [],
dynamic_restarts = 0 :: non_neg_integer(),
module,
@@ -244,7 +246,7 @@ check_childspecs(ChildSpecs) when is_list(ChildSpecs) ->
check_childspecs(X) -> {error, {badarg, X}}.
%%%-----------------------------------------------------------------
-%%% Called by timer:apply_after from restart/2
+%%% Called by restart/2
-spec try_again_restart(SupRef, Child) -> ok when
SupRef :: sup_ref(),
Child :: child_id() | pid().
@@ -262,8 +264,13 @@ cast(Supervisor, Req) ->
get_callback_module(Pid) ->
{status, _Pid, {module, _Mod},
[_PDict, _SysState, _Parent, _Dbg, Misc]} = sys:get_status(Pid),
- [_Header, _Data, {data, [{"State", State}]}] = Misc,
- State#state.module.
+ case lists:keyfind(supervisor, 1, Misc) of
+ {supervisor, [{"Callback", Mod}]} ->
+ Mod;
+ _ ->
+ [_Header, _Data, {data, [{"State", State}]} | _] = Misc,
+ State#state.module
+ end.
%%% ---------------------------------------------------
%%%
@@ -569,8 +576,8 @@ count_child(#child{pid = Pid, child_type = supervisor},
end.
-%%% If a restart attempt failed, this message is sent via
-%%% timer:apply_after(0,...) in order to give gen_server the chance to
+%%% If a restart attempt failed, this message is cast
+%%% from restart/2 in order to give gen_server the chance to
%%% check it's inbox before trying again.
-spec handle_cast({try_again_restart, child_id() | pid()}, state()) ->
{'noreply', state()} | {stop, shutdown, state()}.
@@ -579,7 +586,7 @@ handle_cast({try_again_restart,Pid}, #state{children=[Child]}=State)
when ?is_simple(State) ->
RT = Child#child.restart_type,
RPid = restarting(Pid),
- case dynamic_child_args(RPid, dynamics_db(RT, State#state.dynamics)) of
+ case dynamic_child_args(RPid, RT, State#state.dynamics) of
{ok, Args} ->
{M, F, _} = Child#child.mfargs,
NChild = Child#child{pid = RPid, mfargs = {M, F, Args}},
@@ -737,7 +744,7 @@ handle_start_child(Child, State) ->
restart_child(Pid, Reason, #state{children = [Child]} = State) when ?is_simple(State) ->
RestartType = Child#child.restart_type,
- case dynamic_child_args(Pid, dynamics_db(RestartType, State#state.dynamics)) of
+ case dynamic_child_args(Pid, RestartType, State#state.dynamics) of
{ok, Args} ->
{M, F, _} = Child#child.mfargs,
NChild = Child#child{pid = Pid, mfargs = {M, F, Args}},
@@ -788,16 +795,10 @@ restart(Child, State) ->
Id = if ?is_simple(State) -> Child#child.pid;
true -> Child#child.name
end,
- {ok, _TRef} = timer:apply_after(0,
- ?MODULE,
- try_again_restart,
- [self(),Id]),
+ ok = try_again_restart(self(), Id),
{ok,NState2};
{try_again, NState2, #child{name=ChName}} ->
- {ok, _TRef} = timer:apply_after(0,
- ?MODULE,
- try_again_restart,
- [self(),ChName]),
+ ok = try_again_restart(self(), ChName),
{ok,NState2};
Other ->
Other
@@ -821,16 +822,18 @@ restart(simple_one_for_one, Child, State0) ->
State#state.dynamics)),
case do_start_child_i(M, F, A) of
{ok, Pid} ->
- NState = State#state{dynamics = ?DICTS:store(Pid, A, Dynamics)},
+ DynamicsDb = {dict, ?DICTS:store(Pid, A, Dynamics)},
+ NState = State#state{dynamics = DynamicsDb},
{ok, NState};
{ok, Pid, _Extra} ->
- NState = State#state{dynamics = ?DICTS:store(Pid, A, Dynamics)},
+ DynamicsDb = {dict, ?DICTS:store(Pid, A, Dynamics)},
+ NState = State#state{dynamics = DynamicsDb},
{ok, NState};
{error, Error} ->
NRestarts = State#state.dynamic_restarts + 1,
+ DynamicsDb = {dict, ?DICTS:store(restarting(OldPid), A, Dynamics)},
NState = State#state{dynamic_restarts = NRestarts,
- dynamics = ?DICTS:store(restarting(OldPid), A,
- Dynamics)},
+ dynamics = DynamicsDb},
report_error(start_error, Error, Child, State#state.name),
{try_again, NState}
end;
@@ -1113,31 +1116,32 @@ save_child(Child, #state{children = Children} = State) ->
State#state{children = [Child |Children]}.
save_dynamic_child(temporary, Pid, _, #state{dynamics = Dynamics} = State) ->
- State#state{dynamics = ?SETS:add_element(Pid, dynamics_db(temporary, Dynamics))};
+ DynamicsDb = dynamics_db(temporary, Dynamics),
+ State#state{dynamics = {set, ?SETS:add_element(Pid, DynamicsDb)}};
save_dynamic_child(RestartType, Pid, Args, #state{dynamics = Dynamics} = State) ->
- State#state{dynamics = ?DICTS:store(Pid, Args, dynamics_db(RestartType, Dynamics))}.
+ DynamicsDb = dynamics_db(RestartType, Dynamics),
+ State#state{dynamics = {dict, ?DICTS:store(Pid, Args, DynamicsDb)}}.
dynamics_db(temporary, undefined) ->
?SETS:new();
dynamics_db(_, undefined) ->
?DICTS:new();
-dynamics_db(_,Dynamics) ->
- Dynamics.
-
-dynamic_child_args(Pid, Dynamics) ->
- case ?SETS:is_set(Dynamics) of
- true ->
- {ok, undefined};
- false ->
- ?DICTS:find(Pid, Dynamics)
- end.
+dynamics_db(_, {_Tag, DynamicsDb}) ->
+ DynamicsDb.
+
+dynamic_child_args(_Pid, temporary, _DynamicsDb) ->
+ {ok, undefined};
+dynamic_child_args(Pid, _RT, {dict, DynamicsDb}) ->
+ ?DICTS:find(Pid, DynamicsDb);
+dynamic_child_args(_Pid, _RT, undefined) ->
+ error.
state_del_child(#child{pid = Pid, restart_type = temporary}, State) when ?is_simple(State) ->
NDynamics = ?SETS:del_element(Pid, dynamics_db(temporary, State#state.dynamics)),
- State#state{dynamics = NDynamics};
+ State#state{dynamics = {set, NDynamics}};
state_del_child(#child{pid = Pid, restart_type = RType}, State) when ?is_simple(State) ->
NDynamics = ?DICTS:erase(Pid, dynamics_db(RType, State#state.dynamics)),
- State#state{dynamics = NDynamics};
+ State#state{dynamics = {dict, NDynamics}};
state_del_child(Child, State) ->
NChildren = del_child(Child#child.name, State#state.children),
State#state{children = NChildren}.
@@ -1171,19 +1175,19 @@ split_child(_, [], After) ->
get_child(Name, State) ->
get_child(Name, State, false).
+
get_child(Pid, State, AllowPid) when AllowPid, is_pid(Pid) ->
get_dynamic_child(Pid, State);
get_child(Name, State, _) ->
lists:keysearch(Name, #child.name, State#state.children).
get_dynamic_child(Pid, #state{children=[Child], dynamics=Dynamics}) ->
- DynamicsDb = dynamics_db(Child#child.restart_type, Dynamics),
- case is_dynamic_pid(Pid, DynamicsDb) of
+ case is_dynamic_pid(Pid, Dynamics) of
true ->
{value, Child#child{pid=Pid}};
false ->
RPid = restarting(Pid),
- case is_dynamic_pid(RPid, DynamicsDb) of
+ case is_dynamic_pid(RPid, Dynamics) of
true ->
{value, Child#child{pid=RPid}};
false ->
@@ -1194,13 +1198,12 @@ get_dynamic_child(Pid, #state{children=[Child], dynamics=Dynamics}) ->
end
end.
-is_dynamic_pid(Pid, Dynamics) ->
- case ?SETS:is_set(Dynamics) of
- true ->
- ?SETS:is_element(Pid, Dynamics);
- false ->
- ?DICTS:is_key(Pid, Dynamics)
- end.
+is_dynamic_pid(Pid, {dict, Dynamics}) ->
+ ?DICTS:is_key(Pid, Dynamics);
+is_dynamic_pid(Pid, {set, Dynamics}) ->
+ ?SETS:is_element(Pid, Dynamics);
+is_dynamic_pid(_Pid, undefined) ->
+ false.
replace_child(Child, State) ->
Chs = do_replace_child(Child, State#state.children),
@@ -1452,3 +1455,9 @@ report_progress(Child, SupName) ->
Progress = [{supervisor, SupName},
{started, extract_child(Child)}],
error_logger:info_report(progress, Progress).
+
+format_status(terminate, [_PDict, State]) ->
+ State;
+format_status(_, [_PDict, State]) ->
+ [{data, [{"State", State}]},
+ {supervisor, [{"Callback", State#state.module}]}].
diff --git a/lib/stdlib/src/supervisor_bridge.erl b/lib/stdlib/src/supervisor_bridge.erl
index 18218b71ad..af1e046d30 100644
--- a/lib/stdlib/src/supervisor_bridge.erl
+++ b/lib/stdlib/src/supervisor_bridge.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/sys.erl b/lib/stdlib/src/sys.erl
index a7debb00f5..a6ecf03716 100644
--- a/lib/stdlib/src/sys.erl
+++ b/lib/stdlib/src/sys.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/timer.erl b/lib/stdlib/src/timer.erl
index f7530447bb..ca868627a9 100644
--- a/lib/stdlib/src/timer.erl
+++ b/lib/stdlib/src/timer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/src/win32reg.erl b/lib/stdlib/src/win32reg.erl
index 8074b2efda..8e82a79cbf 100644
--- a/lib/stdlib/src/win32reg.erl
+++ b/lib/stdlib/src/win32reg.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/ExpandTestCaps.erl b/lib/stdlib/test/ExpandTestCaps.erl
index 1e5a1d68c3..7fb1107ae0 100644
--- a/lib/stdlib/test/ExpandTestCaps.erl
+++ b/lib/stdlib/test/ExpandTestCaps.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/ExpandTestCaps1.erl b/lib/stdlib/test/ExpandTestCaps1.erl
index e7ad0925f1..400a17b137 100644
--- a/lib/stdlib/test/ExpandTestCaps1.erl
+++ b/lib/stdlib/test/ExpandTestCaps1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/Makefile b/lib/stdlib/test/Makefile
index e366c2b755..28c35aed55 100644
--- a/lib/stdlib/test/Makefile
+++ b/lib/stdlib/test/Makefile
@@ -46,6 +46,7 @@ MODULES= \
gen_event_SUITE \
gen_fsm_SUITE \
gen_server_SUITE \
+ gen_statem_SUITE \
id_transform_SUITE \
io_SUITE \
io_proto_SUITE \
@@ -107,8 +108,7 @@ RELSYSDIR = $(RELEASE_PATH)/stdlib_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include \
- -I$(ERL_TOP)/lib/kernel/include \
+ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/kernel/include \
-I$(ERL_TOP)/lib/stdlib/include
EBIN = .
diff --git a/lib/stdlib/test/array_SUITE.erl b/lib/stdlib/test/array_SUITE.erl
index ab4ca91f76..5836f275ba 100644
--- a/lib/stdlib/test/array_SUITE.erl
+++ b/lib/stdlib/test/array_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,12 +20,7 @@
-module(array_SUITE).
--include_lib("test_server/include/test_server.hrl").
-
-%% Default timetrap timeout (set in init_per_testcase).
-%% This should be set relatively high (10-15 times the expected
-%% max testcasetime).
--define(default_timeout, ?t:seconds(60)).
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -66,7 +61,9 @@
%%
%% all/1
%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[new_test, fix_test, relax_test, resize_test,
@@ -93,12 +90,9 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-define(LEAFSIZE,10).
@@ -111,19 +105,19 @@ end_per_testcase(_Case, Config) ->
}).
-define(_assert(What),
- begin ?line true = What end
+ begin true = What end
).
-define(_assertNot(What),
- begin ?line false = What end
+ begin false = What end
).
-define(_assertMatch(Res,What),
begin
- ?line case What of Res -> ok end
+ case What of Res -> ok end
end
).
-define(_assertError(Reas,What),
- begin ?line fun() ->
+ begin fun() ->
try What of
A_Success -> exit({test_error, A_Success})
catch error:Reas -> ok end
@@ -131,9 +125,9 @@ end_per_testcase(_Case, Config) ->
end
).
--define(LET(Var,Expr, Test), begin ?line fun() -> Var = Expr, Test end() end).
+-define(LET(Var,Expr, Test), begin fun() -> Var = Expr, Test end() end).
--define(_test(Expr), begin ?line Expr end).
+-define(_test(Expr), begin Expr end).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Some helpers to be able to run the tests without testserver
@@ -152,18 +146,7 @@ t(What) ->
io:format("Failed ~p:~p ~p ~p~n ~p~n",
[T,Line,_E,_R, erlang:get_stacktrace()])
end
- end, expand(What)).
-
-expand(All) ->
- lists:reverse(expand(All,[])).
-expand([H|T], Acc) ->
- case ?MODULE:H(suite) of
- [] -> expand(T,[H|Acc]);
- Cs ->
- R = expand(Cs, Acc),
- expand(T, R)
- end;
-expand([], Acc) -> Acc.
+ end, What).
%%%%% extract tests
@@ -173,8 +156,6 @@ extract_tests() ->
try
Tests = extract_tests(In,Out,[]),
Call = fun(Test) ->
- io:format(Out, "~s(doc) -> [];~n", [Test]),
- io:format(Out, "~s(suite) -> [];~n", [Test]),
io:format(Out, "~s(Config) when is_list(Config) -> ~s_(), ok.~n",
[Test, Test])
end,
@@ -775,54 +756,20 @@ sparse_foldr_test_() ->
set(0,0,new())))))
].
-new_test(doc) -> [];
-new_test(suite) -> [];
new_test(Config) when is_list(Config) -> new_test_(), ok.
-fix_test(doc) -> [];
-fix_test(suite) -> [];
fix_test(Config) when is_list(Config) -> fix_test_(), ok.
-relax_test(doc) -> [];
-relax_test(suite) -> [];
relax_test(Config) when is_list(Config) -> relax_test_(), ok.
-resize_test(doc) -> [];
-resize_test(suite) -> [];
resize_test(Config) when is_list(Config) -> resize_test_(), ok.
-set_get_test(doc) -> [];
-set_get_test(suite) -> [];
set_get_test(Config) when is_list(Config) -> set_get_test_(), ok.
-to_list_test(doc) -> [];
-to_list_test(suite) -> [];
to_list_test(Config) when is_list(Config) -> to_list_test_(), ok.
-sparse_to_list_test(doc) -> [];
-sparse_to_list_test(suite) -> [];
sparse_to_list_test(Config) when is_list(Config) -> sparse_to_list_test_(), ok.
-from_list_test(doc) -> [];
-from_list_test(suite) -> [];
from_list_test(Config) when is_list(Config) -> from_list_test_(), ok.
-to_orddict_test(doc) -> [];
-to_orddict_test(suite) -> [];
to_orddict_test(Config) when is_list(Config) -> to_orddict_test_(), ok.
-sparse_to_orddict_test(doc) -> [];
-sparse_to_orddict_test(suite) -> [];
sparse_to_orddict_test(Config) when is_list(Config) -> sparse_to_orddict_test_(), ok.
-from_orddict_test(doc) -> [];
-from_orddict_test(suite) -> [];
from_orddict_test(Config) when is_list(Config) -> from_orddict_test_(), ok.
-map_test(doc) -> [];
-map_test(suite) -> [];
map_test(Config) when is_list(Config) -> map_test_(), ok.
-sparse_map_test(doc) -> [];
-sparse_map_test(suite) -> [];
sparse_map_test(Config) when is_list(Config) -> sparse_map_test_(), ok.
-foldl_test(doc) -> [];
-foldl_test(suite) -> [];
foldl_test(Config) when is_list(Config) -> foldl_test_(), ok.
-sparse_foldl_test(doc) -> [];
-sparse_foldl_test(suite) -> [];
sparse_foldl_test(Config) when is_list(Config) -> sparse_foldl_test_(), ok.
-foldr_test(doc) -> [];
-foldr_test(suite) -> [];
foldr_test(Config) when is_list(Config) -> foldr_test_(), ok.
-sparse_foldr_test(doc) -> [];
-sparse_foldr_test(suite) -> [];
sparse_foldr_test(Config) when is_list(Config) -> sparse_foldr_test_(), ok.
diff --git a/lib/stdlib/test/base64_SUITE.erl b/lib/stdlib/test/base64_SUITE.erl
index 75eebba6c6..9176a3664a 100644
--- a/lib/stdlib/test/base64_SUITE.erl
+++ b/lib/stdlib/test/base64_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,19 +34,17 @@
roundtrip_1/1, roundtrip_2/1, roundtrip_3/1, roundtrip_4/1]).
init_per_testcase(_, Config) ->
- Dog = test_server:timetrap(?t:minutes(4)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
+ Config.
-end_per_testcase(_, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_, _Config) ->
ok.
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,4}}].
all() ->
[base64_encode, base64_decode, base64_otp_5635,
@@ -72,10 +70,7 @@ end_per_group(_GroupName, Config) ->
%%-------------------------------------------------------------------------
-base64_encode(doc) ->
- ["Test base64:encode/1."];
-base64_encode(suite) ->
- [];
+%% Test base64:encode/1.
base64_encode(Config) when is_list(Config) ->
%% Two pads
<<"QWxhZGRpbjpvcGVuIHNlc2FtZQ==">> =
@@ -90,10 +85,7 @@ base64_encode(Config) when is_list(Config) ->
base64:encode_to_string(<<"0123456789!@#0^&*();:<>,. []{}">>),
ok.
%%-------------------------------------------------------------------------
-base64_decode(doc) ->
- ["Test base64:decode/1."];
-base64_decode(suite) ->
- [];
+%% Test base64:decode/1.
base64_decode(Config) when is_list(Config) ->
%% Two pads
<<"Aladdin:open sesame">> =
@@ -117,28 +109,18 @@ base64_decode(Config) when is_list(Config) ->
<<"MDEy MzQ1Njc4 \tOSFAIzBeJ \niooKTs6 PD4sLi \r\nBbXXt9">>),
ok.
%%-------------------------------------------------------------------------
-base64_otp_5635(doc) ->
- ["OTP-5635: Some data doesn't pass through base64:decode/1 "
- "correctly"];
-base64_otp_5635(suite) ->
- [];
+%% OTP-5635: Some data doesn't pass through base64:decode/1 correctly.
base64_otp_5635(Config) when is_list(Config) ->
<<"===">> = base64:decode(base64:encode("===")),
ok.
%%-------------------------------------------------------------------------
-base64_otp_6279(doc) ->
- ["OTP-6279: Guard needed so that function fails in a correct"
- "way for faulty input i.e. function_clause"];
-base64_otp_6279(suite) ->
- [];
+%% OTP-6279: Guard needed so that function fails in a correct
+%% way for faulty input, i.e. function_clause.
base64_otp_6279(Config) when is_list(Config) ->
{'EXIT',{function_clause, _}} = (catch base64:decode("dGVzda==a")),
ok.
%%-------------------------------------------------------------------------
-big(doc) ->
- ["Encode and decode big binaries."];
-big(suite) ->
- [];
+%% Encode and decode big binaries.
big(Config) when is_list(Config) ->
Big = make_big_binary(300000),
B = base64:encode(Big),
@@ -148,10 +130,7 @@ big(Config) when is_list(Config) ->
Big = base64:mime_decode(B),
ok.
%%-------------------------------------------------------------------------
-illegal(doc) ->
- ["Make sure illegal characters are rejected when decoding."];
-illegal(suite) ->
- [];
+%% Make sure illegal characters are rejected when decoding.
illegal(Config) when is_list(Config) ->
{'EXIT',{function_clause, _}} = (catch base64:decode("()")),
ok.
@@ -159,10 +138,8 @@ illegal(Config) when is_list(Config) ->
%% mime_decode and mime_decode_to_string have different implementations
%% so test both with the same input separately. Both functions have
%% the same implementation for binary/string arguments.
-mime_decode(doc) ->
- ["Test base64:mime_decode/1."];
-mime_decode(suite) ->
- [];
+%%
+%% Test base64:mime_decode/1.
mime_decode(Config) when is_list(Config) ->
%% Test correct padding
<<"one">> = base64:mime_decode(<<"b25l">>),
@@ -202,10 +179,8 @@ mime_decode(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
%% Repeat of mime_decode() tests
-mime_decode_to_string(doc) ->
- ["Test base64:mime_decode_to_string/1."];
-mime_decode_to_string(suite) ->
- [];
+
+%% Test base64:mime_decode_to_string/1.
mime_decode_to_string(Config) when is_list(Config) ->
%% Test correct padding
"one" = base64:mime_decode_to_string(<<"b25l">>),
@@ -340,7 +315,7 @@ interleaved_ws_roundtrip_1([], Base64List, Bin, List) ->
random_byte_list(0, Acc) ->
Acc;
random_byte_list(N, Acc) ->
- random_byte_list(N-1, [random:uniform(255)|Acc]).
+ random_byte_list(N-1, [rand:uniform(255)|Acc]).
make_big_binary(N) ->
list_to_binary(mbb(N, [])).
diff --git a/lib/stdlib/test/beam_lib_SUITE.erl b/lib/stdlib/test/beam_lib_SUITE.erl
index c102f6e929..4521ecc0ef 100644
--- a/lib/stdlib/test/beam_lib_SUITE.erl
+++ b/lib/stdlib/test/beam_lib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(beam_lib_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -28,9 +28,9 @@
-define(t,test_server).
-define(privdir, "beam_lib_SUITE_priv").
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
--define(privdir, ?config(priv_dir, Conf)).
+-define(privdir, proplists:get_value(priv_dir, Conf)).
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -40,7 +40,9 @@
-export([init_per_testcase/2, end_per_testcase/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[error, normal, cmp, cmp_literals, strip, otp_6711,
@@ -63,78 +65,74 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- Dog=?t:timetrap(?t:minutes(2)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-normal(suite) -> [];
-normal(doc) -> ["Read correct beam file"];
+%% Read correct beam file.
normal(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir,
- ?line Simple = filename:join(PrivDir, "simple"),
- ?line Source = Simple ++ ".erl",
- ?line BeamFile = Simple ++ ".beam",
- ?line simple_file(Source),
+ PrivDir = ?privdir,
+ Simple = filename:join(PrivDir, "simple"),
+ Source = Simple ++ ".erl",
+ BeamFile = Simple ++ ".beam",
+ simple_file(Source),
- ?line NoOfTables = length(ets:all()),
- ?line P0 = pps(),
+ NoOfTables = length(ets:all()),
+ P0 = pps(),
CompileFlags = [{outdir,PrivDir}, debug_info],
- ?line {ok,_} = compile:file(Source, CompileFlags),
- ?line {ok, Binary} = file:read_file(BeamFile),
+ {ok,_} = compile:file(Source, CompileFlags),
+ {ok, Binary} = file:read_file(BeamFile),
- ?line do_normal(BeamFile),
- ?line do_normal(Binary),
+ do_normal(BeamFile),
+ do_normal(Binary),
- ?line {ok,_} = compile:file(Source, [{outdir,PrivDir}, no_debug_info]),
- ?line {ok, {simple, [{abstract_code, no_abstract_code}]}} =
+ {ok,_} = compile:file(Source, [{outdir,PrivDir}, no_debug_info]),
+ {ok, {simple, [{abstract_code, no_abstract_code}]}} =
beam_lib:chunks(BeamFile, [abstract_code]),
- %% ?line {ok,_} = compile:file(Source, [compressed | CompileFlags]),
- %% ?line do_normal(BeamFile),
+ %% {ok,_} = compile:file(Source, [compressed | CompileFlags]),
+ %% do_normal(BeamFile),
- ?line file:delete(BeamFile),
- ?line file:delete(Source),
- ?line NoOfTables = length(ets:all()),
- ?line true = (P0 == pps()),
+ file:delete(BeamFile),
+ file:delete(Source),
+ NoOfTables = length(ets:all()),
+ true = (P0 == pps()),
ok.
do_normal(BeamFile) ->
- ?line Imports = {imports, [{erlang, get_module_info, 1},
- {erlang, get_module_info, 2},
- {lists, member, 2}]},
- ?line Exports = {exports, [{module_info, 0}, {module_info, 1}, {t, 0}]},
- ?line Local = {locals, [{t, 1}]},
- ?line {ok, {simple, [Imports]}} = beam_lib:chunks(BeamFile, [imports]),
- ?line {ok, {simple, [{"ImpT",_Bin}]}} =
+ Imports = {imports, [{erlang, get_module_info, 1},
+ {erlang, get_module_info, 2},
+ {lists, member, 2}]},
+ Exports = {exports, [{module_info, 0}, {module_info, 1}, {t, 0}]},
+ Local = {locals, [{t, 1}]},
+ {ok, {simple, [Imports]}} = beam_lib:chunks(BeamFile, [imports]),
+ {ok, {simple, [{"ImpT",_Bin}]}} =
beam_lib:chunks(BeamFile, ["ImpT"]),
- ?line {ok, {simple, [Exports]}} = beam_lib:chunks(BeamFile, [exports]),
- ?line {ok, {simple, [{attributes, [{vsn, [_]}]}]}} =
+ {ok, {simple, [Exports]}} = beam_lib:chunks(BeamFile, [exports]),
+ {ok, {simple, [{attributes, [{vsn, [_]}]}]}} =
beam_lib:chunks(BeamFile, [attributes]),
- ?line {ok, {simple, [{compile_info, _}=CompileInfo]}} =
+ {ok, {simple, [{compile_info, _}=CompileInfo]}} =
beam_lib:chunks(BeamFile, [compile_info]),
- ?line {ok, {simple, [Local]}} = beam_lib:chunks(BeamFile, [locals]),
- ?line {ok, {simple, [{attributes, [{vsn, [_]}]}, CompileInfo,
- Exports, Imports, Local]}} =
+ {ok, {simple, [Local]}} = beam_lib:chunks(BeamFile, [locals]),
+ {ok, {simple, [{attributes, [{vsn, [_]}]}, CompileInfo,
+ Exports, Imports, Local]}} =
beam_lib:chunks(BeamFile, [attributes, compile_info, exports, imports, locals]),
- ?line {ok, {simple, [{atoms, _Atoms}]}} =
+ {ok, {simple, [{atoms, _Atoms}]}} =
beam_lib:chunks(BeamFile, [atoms]),
- ?line {ok, {simple, [{labeled_exports, _LExports}]}} =
+ {ok, {simple, [{labeled_exports, _LExports}]}} =
beam_lib:chunks(BeamFile, [labeled_exports]),
- ?line {ok, {simple, [{labeled_locals, _LLocals}]}} =
+ {ok, {simple, [{labeled_locals, _LLocals}]}} =
beam_lib:chunks(BeamFile, [labeled_locals]),
- ?line {ok, {simple, [_Vsn]}} = beam_lib:version(BeamFile),
- ?line {ok, {simple, [{abstract_code, _}]}} =
+ {ok, {simple, [_Vsn]}} = beam_lib:version(BeamFile),
+ {ok, {simple, [{abstract_code, _}]}} =
beam_lib:chunks(BeamFile, [abstract_code]),
-
+
%% Test reading optional chunks.
All = ["Atom", "Code", "StrT", "ImpT", "ExpT", "FunT", "LitT"],
- ?line {ok,{simple,Chunks}} = beam_lib:chunks(BeamFile, All, [allow_missing_chunks]),
- ?line verify_simple(Chunks).
+ {ok,{simple,Chunks}} = beam_lib:chunks(BeamFile, All, [allow_missing_chunks]),
+ verify_simple(Chunks).
verify_simple([{"Atom", AtomBin},
{"Code", CodeBin},
@@ -147,64 +145,61 @@ verify_simple([{"Atom", AtomBin},
is_binary(ImpBin), is_binary(ExpBin) ->
ok.
-error(suite) -> [];
-error(doc) -> ["Read invalid beam files"];
+%% Read invalid beam files.
error(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir,
- ?line Simple = filename:join(PrivDir, "simple"),
- ?line Source = Simple ++ ".erl",
- ?line BeamFile = Simple ++ ".beam",
- ?line WrongFile = Simple ++ "foo.beam",
- ?line simple_file(Source),
-
- ?line NoOfTables = length(ets:all()),
- ?line P0 = pps(),
- ?line {ok,_} = compile:file(Source, [{outdir,PrivDir},debug_info]),
- ?line ACopy = filename:join(PrivDir, "a_copy.beam"),
- ?line copy_file(BeamFile, ACopy),
-
- ?line {ok, Binary} = file:read_file(BeamFile),
-
- ?line copy_file(ACopy, WrongFile),
- ?line verify(file_error, beam_lib:info("./does_simply_not_exist")),
-
- ?line do_error(BeamFile, ACopy),
- ?line do_error(Binary, ACopy),
-
- ?line copy_file(ACopy, BeamFile),
- ?line verify(unknown_chunk, beam_lib:chunks(BeamFile, [not_a_chunk])),
-
- ?line ok = file:write_file(BeamFile, <<>>),
- ?line verify(not_a_beam_file, beam_lib:info(BeamFile)),
- ?line verify(not_a_beam_file, beam_lib:info(<<>>)),
- ?line ok = file:write_file(BeamFile, <<"short">>),
- ?line verify(not_a_beam_file, beam_lib:info(BeamFile)),
- ?line verify(not_a_beam_file, beam_lib:info(<<"short">>)),
-
- ?line {Binary1, _} = split_binary(Binary, byte_size(Binary)-10),
+ PrivDir = ?privdir,
+ Simple = filename:join(PrivDir, "simple"),
+ Source = Simple ++ ".erl",
+ BeamFile = Simple ++ ".beam",
+ WrongFile = Simple ++ "foo.beam",
+ simple_file(Source),
+
+ NoOfTables = length(ets:all()),
+ P0 = pps(),
+ {ok,_} = compile:file(Source, [{outdir,PrivDir},debug_info]),
+ ACopy = filename:join(PrivDir, "a_copy.beam"),
+ copy_file(BeamFile, ACopy),
+
+ {ok, Binary} = file:read_file(BeamFile),
+
+ copy_file(ACopy, WrongFile),
+ verify(file_error, beam_lib:info("./does_simply_not_exist")),
+
+ do_error(BeamFile, ACopy),
+ do_error(Binary, ACopy),
+
+ copy_file(ACopy, BeamFile),
+ verify(unknown_chunk, beam_lib:chunks(BeamFile, [not_a_chunk])),
+
+ ok = file:write_file(BeamFile, <<>>),
+ verify(not_a_beam_file, beam_lib:info(BeamFile)),
+ verify(not_a_beam_file, beam_lib:info(<<>>)),
+ ok = file:write_file(BeamFile, <<"short">>),
+ verify(not_a_beam_file, beam_lib:info(BeamFile)),
+ verify(not_a_beam_file, beam_lib:info(<<"short">>)),
+
+ {Binary1, _} = split_binary(Binary, byte_size(Binary)-10),
LastChunk = last_chunk(Binary),
- ?line verify(chunk_too_big, beam_lib:chunks(Binary1, [LastChunk])),
- ?line Chunks = chunk_info(Binary),
- ?line {value, {_, AbstractStart, _}} = lists:keysearch("Abst", 1, Chunks),
- ?line {Binary2, _} = split_binary(Binary, AbstractStart),
- ?line verify(chunk_too_big, beam_lib:chunks(Binary2, ["Abst"])),
- ?line {Binary3, _} = split_binary(Binary, AbstractStart-4),
- ?line verify(invalid_beam_file, beam_lib:chunks(Binary3, ["Abst"])),
+ verify(chunk_too_big, beam_lib:chunks(Binary1, [LastChunk])),
+ Chunks = chunk_info(Binary),
+ {value, {_, AbstractStart, _}} = lists:keysearch("Abst", 1, Chunks),
+ {Binary2, _} = split_binary(Binary, AbstractStart),
+ verify(chunk_too_big, beam_lib:chunks(Binary2, ["Abst"])),
+ {Binary3, _} = split_binary(Binary, AbstractStart-4),
+ verify(invalid_beam_file, beam_lib:chunks(Binary3, ["Abst"])),
%% Instead of the 5:32 field below, there used to be control characters
%% (including zero bytes) directly in the string. Because inferior programs
%% such as sed and clearcasediff don't like zero bytes in text files,
%% we have eliminated them.
- ?line ok = file:write_file(BeamFile, <<"FOR1",5:32,"BEAMfel">>),
-% ?line verify(invalid_beam_file, beam_lib:info(BeamFile)),
-% ?line verify(invalid_beam_file, beam_lib:info(<<"FOR1",5:32,"BEAMfel">>)),
-
- ?line NoOfTables = length(ets:all()),
- ?line true = (P0 == pps()),
- ?line file:delete(Source),
- ?line file:delete(WrongFile),
- ?line file:delete(BeamFile),
- ?line file:delete(ACopy),
+ ok = file:write_file(BeamFile, <<"FOR1",5:32,"BEAMfel">>),
+
+ NoOfTables = length(ets:all()),
+ true = (P0 == pps()),
+ file:delete(Source),
+ file:delete(WrongFile),
+ file:delete(BeamFile),
+ file:delete(ACopy),
ok.
last_chunk(Bin) ->
@@ -214,213 +209,210 @@ last_chunk(Bin) ->
Last.
do_error(BeamFile, ACopy) ->
- % evil tests
- ?line Chunks = chunk_info(BeamFile),
- ?line {value, {_, AtomStart, _}} = lists:keysearch("Atom", 1, Chunks),
- ?line {value, {_, ImportStart, _}} = lists:keysearch("ImpT", 1, Chunks),
- ?line {value, {_, AbstractStart, _}} = lists:keysearch("Abst", 1, Chunks),
- ?line {value, {_, AttributesStart, _}} =
+ %% evil tests
+ Chunks = chunk_info(BeamFile),
+ {value, {_, AtomStart, _}} = lists:keysearch("Atom", 1, Chunks),
+ {value, {_, ImportStart, _}} = lists:keysearch("ImpT", 1, Chunks),
+ {value, {_, AbstractStart, _}} = lists:keysearch("Abst", 1, Chunks),
+ {value, {_, AttributesStart, _}} =
lists:keysearch("Attr", 1, Chunks),
- ?line {value, {_, CompileInfoStart, _}} =
+ {value, {_, CompileInfoStart, _}} =
lists:keysearch("CInf", 1, Chunks),
- ?line verify(missing_chunk, beam_lib:chunks(BeamFile, ["__"])),
- ?line BF2 = set_byte(ACopy, BeamFile, ImportStart+4, 17),
- ?line verify(invalid_chunk, beam_lib:chunks(BF2, [imports])),
- ?line BF3 = set_byte(ACopy, BeamFile, AtomStart-6, 17),
- ?line verify(missing_chunk, beam_lib:chunks(BF3, [imports])),
- ?line BF4 = set_byte(ACopy, BeamFile, AbstractStart+10, 17),
- ?line verify(invalid_chunk, beam_lib:chunks(BF4, [abstract_code])),
- ?line BF5 = set_byte(ACopy, BeamFile, AttributesStart+10, 17),
- ?line verify(invalid_chunk, beam_lib:chunks(BF5, [attributes])),
-
- ?line BF6 = set_byte(ACopy, BeamFile, 1, 17),
- ?line verify(not_a_beam_file, beam_lib:info(BF6)),
- ?line BF7 = set_byte(ACopy, BeamFile, 9, 17),
- ?line verify(not_a_beam_file, beam_lib:info(BF7)),
-
- ?line BF8 = set_byte(ACopy, BeamFile, 13, 17),
- ?line verify(missing_chunk, beam_lib:chunks(BF8, ["Atom"])),
-
- ?line BF9 = set_byte(ACopy, BeamFile, CompileInfoStart+10, 17),
- ?line verify(invalid_chunk, beam_lib:chunks(BF9, [compile_info])).
-
-
-cmp(suite) -> [];
-cmp(doc) -> ["Compare contents of BEAM files and directories"];
+ verify(missing_chunk, beam_lib:chunks(BeamFile, ["__"])),
+ BF2 = set_byte(ACopy, BeamFile, ImportStart+4, 17),
+ verify(invalid_chunk, beam_lib:chunks(BF2, [imports])),
+ BF3 = set_byte(ACopy, BeamFile, AtomStart-6, 17),
+ verify(missing_chunk, beam_lib:chunks(BF3, [imports])),
+ BF4 = set_byte(ACopy, BeamFile, AbstractStart+10, 17),
+ verify(invalid_chunk, beam_lib:chunks(BF4, [abstract_code])),
+ BF5 = set_byte(ACopy, BeamFile, AttributesStart+10, 17),
+ verify(invalid_chunk, beam_lib:chunks(BF5, [attributes])),
+
+ BF6 = set_byte(ACopy, BeamFile, 1, 17),
+ verify(not_a_beam_file, beam_lib:info(BF6)),
+ BF7 = set_byte(ACopy, BeamFile, 9, 17),
+ verify(not_a_beam_file, beam_lib:info(BF7)),
+
+ BF8 = set_byte(ACopy, BeamFile, 13, 17),
+ verify(missing_chunk, beam_lib:chunks(BF8, ["Atom"])),
+
+ BF9 = set_byte(ACopy, BeamFile, CompileInfoStart+10, 17),
+ verify(invalid_chunk, beam_lib:chunks(BF9, [compile_info])).
+
+
+%% Compare contents of BEAM files and directories.
cmp(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir,
+ PrivDir = ?privdir,
- ?line Dir1 = filename:join(PrivDir, "dir1"),
- ?line Dir2 = filename:join(PrivDir, "dir2"),
+ Dir1 = filename:join(PrivDir, "dir1"),
+ Dir2 = filename:join(PrivDir, "dir2"),
ok = file:make_dir(Dir1),
ok = file:make_dir(Dir2),
- ?line {SourceD1, BeamFileD1} = make_beam(Dir1, simple, member),
- ?line {Source2D1, BeamFile2D1} = make_beam(Dir1, simple2, concat),
- ?line {SourceD2, BeamFileD2} = make_beam(Dir2, simple, concat),
+ {SourceD1, BeamFileD1} = make_beam(Dir1, simple, member),
+ {Source2D1, BeamFile2D1} = make_beam(Dir1, simple2, concat),
+ {SourceD2, BeamFileD2} = make_beam(Dir2, simple, concat),
- ?line NoOfTables = length(ets:all()),
- ?line P0 = pps(),
+ NoOfTables = length(ets:all()),
+ P0 = pps(),
%% cmp
- ?line ok = beam_lib:cmp(BeamFileD1, BeamFileD1),
- ?line ver(modules_different, beam_lib:cmp(BeamFileD1, BeamFile2D1)),
- ?line ver(chunks_different, beam_lib:cmp(BeamFileD1, BeamFileD2)),
- ?line verify(file_error, beam_lib:cmp(foo, bar)),
-
- ?line {ok, B1} = file:read_file(BeamFileD1),
- ?line ok = beam_lib:cmp(B1, BeamFileD1),
- ?line {ok, B2} = file:read_file(BeamFileD2),
- ?line ver(chunks_different, beam_lib:cmp(B1, B2)),
+ ok = beam_lib:cmp(BeamFileD1, BeamFileD1),
+ ver(modules_different, beam_lib:cmp(BeamFileD1, BeamFile2D1)),
+ ver(chunks_different, beam_lib:cmp(BeamFileD1, BeamFileD2)),
+ verify(file_error, beam_lib:cmp(foo, bar)),
+
+ {ok, B1} = file:read_file(BeamFileD1),
+ ok = beam_lib:cmp(B1, BeamFileD1),
+ {ok, B2} = file:read_file(BeamFileD2),
+ ver(chunks_different, beam_lib:cmp(B1, B2)),
%% cmp_dirs
- ?line {[],[],[]} = beam_lib:cmp_dirs(Dir1, Dir1),
- ?line true = {[BeamFile2D1], [], [{BeamFileD1,BeamFileD2}]} ==
- beam_lib:cmp_dirs(Dir1, Dir2),
- ?line true = {[], [BeamFile2D1], [{BeamFileD2,BeamFileD1}]} ==
- beam_lib:cmp_dirs(Dir2, Dir1),
- ?line ver(not_a_directory, beam_lib:cmp_dirs(foo, bar)),
-
+ {[],[],[]} = beam_lib:cmp_dirs(Dir1, Dir1),
+ true = {[BeamFile2D1], [], [{BeamFileD1,BeamFileD2}]} ==
+ beam_lib:cmp_dirs(Dir1, Dir2),
+ true = {[], [BeamFile2D1], [{BeamFileD2,BeamFileD1}]} ==
+ beam_lib:cmp_dirs(Dir2, Dir1),
+ ver(not_a_directory, beam_lib:cmp_dirs(foo, bar)),
+
%% diff_dirs
- ?line ok = beam_lib:diff_dirs(Dir1, Dir1),
- ?line ver(not_a_directory, beam_lib:diff_dirs(foo, bar)),
+ ok = beam_lib:diff_dirs(Dir1, Dir1),
+ ver(not_a_directory, beam_lib:diff_dirs(foo, bar)),
- ?line true = (P0 == pps()),
- ?line NoOfTables = length(ets:all()),
- ?line delete_files([SourceD1, BeamFileD1, Source2D1,
- BeamFile2D1, SourceD2, BeamFileD2]),
+ true = (P0 == pps()),
+ NoOfTables = length(ets:all()),
+ delete_files([SourceD1, BeamFileD1, Source2D1,
+ BeamFile2D1, SourceD2, BeamFileD2]),
file:del_dir(Dir1),
file:del_dir(Dir2),
ok.
-cmp_literals(suite) -> [];
-cmp_literals(doc) -> ["Compare contents of BEAM files having literals"];
+%% Compare contents of BEAM files having literals.
cmp_literals(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir,
+ PrivDir = ?privdir,
- ?line Dir1 = filename:join(PrivDir, "dir1"),
- ?line Dir2 = filename:join(PrivDir, "dir2"),
+ Dir1 = filename:join(PrivDir, "dir1"),
+ Dir2 = filename:join(PrivDir, "dir2"),
ok = file:make_dir(Dir1),
ok = file:make_dir(Dir2),
- ?line {SourceD1, BeamFileD1} = make_beam(Dir1, simple, constant),
- ?line {SourceD2, BeamFileD2} = make_beam(Dir2, simple, constant2),
+ {SourceD1, BeamFileD1} = make_beam(Dir1, simple, constant),
+ {SourceD2, BeamFileD2} = make_beam(Dir2, simple, constant2),
- ?line NoOfTables = length(ets:all()),
- ?line P0 = pps(),
+ NoOfTables = length(ets:all()),
+ P0 = pps(),
%% cmp
- ?line ok = beam_lib:cmp(BeamFileD1, BeamFileD1),
- ?line ver(chunks_different, beam_lib:cmp(BeamFileD1, BeamFileD2)),
-
- ?line {ok, B1} = file:read_file(BeamFileD1),
- ?line ok = beam_lib:cmp(B1, BeamFileD1),
- ?line {ok, B2} = file:read_file(BeamFileD2),
- ?line ver(chunks_different, beam_lib:cmp(B1, B2)),
+ ok = beam_lib:cmp(BeamFileD1, BeamFileD1),
+ ver(chunks_different, beam_lib:cmp(BeamFileD1, BeamFileD2)),
+
+ {ok, B1} = file:read_file(BeamFileD1),
+ ok = beam_lib:cmp(B1, BeamFileD1),
+ {ok, B2} = file:read_file(BeamFileD2),
+ ver(chunks_different, beam_lib:cmp(B1, B2)),
- ?line true = (P0 == pps()),
- ?line NoOfTables = length(ets:all()),
+ true = (P0 == pps()),
+ NoOfTables = length(ets:all()),
- ?line delete_files([SourceD1, BeamFileD1, SourceD2, BeamFileD2]),
+ delete_files([SourceD1, BeamFileD1, SourceD2, BeamFileD2]),
file:del_dir(Dir1),
file:del_dir(Dir2),
ok.
-strip(suite) -> [];
-strip(doc) -> ["Strip BEAM files"];
+%% Strip BEAM files.
strip(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir,
- ?line {SourceD1, BeamFileD1} = make_beam(PrivDir, simple, member),
- ?line {Source2D1, BeamFile2D1} = make_beam(PrivDir, simple2, concat),
- ?line {Source3D1, BeamFile3D1} = make_beam(PrivDir, make_fun, make_fun),
- ?line {Source4D1, BeamFile4D1} = make_beam(PrivDir, constant, constant),
- ?line {Source5D1, BeamFile5D1} = make_beam(PrivDir, lines, lines),
+ PrivDir = ?privdir,
+ {SourceD1, BeamFileD1} = make_beam(PrivDir, simple, member),
+ {Source2D1, BeamFile2D1} = make_beam(PrivDir, simple2, concat),
+ {Source3D1, BeamFile3D1} = make_beam(PrivDir, make_fun, make_fun),
+ {Source4D1, BeamFile4D1} = make_beam(PrivDir, constant, constant),
+ {Source5D1, BeamFile5D1} = make_beam(PrivDir, lines, lines),
- ?line NoOfTables = length(ets:all()),
- ?line P0 = pps(),
+ NoOfTables = length(ets:all()),
+ P0 = pps(),
%% strip binary
- ?line verify(not_a_beam_file, beam_lib:strip(<<>>)),
- ?line {ok, B1} = file:read_file(BeamFileD1),
- ?line {ok, {simple, NB1}} = beam_lib:strip(B1),
- ?line BId1 = chunk_ids(B1),
- ?line NBId1 = chunk_ids(NB1),
- ?line true = length(BId1) > length(NBId1),
- ?line compare_chunks(B1, NB1, NBId1),
+ verify(not_a_beam_file, beam_lib:strip(<<>>)),
+ {ok, B1} = file:read_file(BeamFileD1),
+ {ok, {simple, NB1}} = beam_lib:strip(B1),
+ BId1 = chunk_ids(B1),
+ NBId1 = chunk_ids(NB1),
+ true = length(BId1) > length(NBId1),
+ compare_chunks(B1, NB1, NBId1),
%% strip file
- ?line verify(file_error, beam_lib:strip(foo)),
- ?line {ok, {simple, _}} = beam_lib:strip(BeamFileD1),
- ?line compare_chunks(NB1, BeamFileD1, NBId1),
+ verify(file_error, beam_lib:strip(foo)),
+ {ok, {simple, _}} = beam_lib:strip(BeamFileD1),
+ compare_chunks(NB1, BeamFileD1, NBId1),
%% strip_files
- ?line {ok, B2} = file:read_file(BeamFile2D1),
- ?line {ok, [{simple,_},{simple2,_}]} = beam_lib:strip_files([B1, B2]),
- ?line {ok, [{simple,_},{simple2,_},{make_fun,_},{constant,_}]} =
+ {ok, B2} = file:read_file(BeamFile2D1),
+ {ok, [{simple,_},{simple2,_}]} = beam_lib:strip_files([B1, B2]),
+ {ok, [{simple,_},{simple2,_},{make_fun,_},{constant,_}]} =
beam_lib:strip_files([BeamFileD1, BeamFile2D1, BeamFile3D1, BeamFile4D1]),
%% check that each module can be loaded.
- ?line {module, simple} = code:load_abs(filename:rootname(BeamFileD1)),
- ?line {module, simple2} = code:load_abs(filename:rootname(BeamFile2D1)),
- ?line {module, make_fun} = code:load_abs(filename:rootname(BeamFile3D1)),
- ?line {module, constant} = code:load_abs(filename:rootname(BeamFile4D1)),
+ {module, simple} = code:load_abs(filename:rootname(BeamFileD1)),
+ {module, simple2} = code:load_abs(filename:rootname(BeamFile2D1)),
+ {module, make_fun} = code:load_abs(filename:rootname(BeamFile3D1)),
+ {module, constant} = code:load_abs(filename:rootname(BeamFile4D1)),
%% check that line number information is still present after stripping
- ?line {module, lines} = code:load_abs(filename:rootname(BeamFile5D1)),
- ?line {'EXIT',{badarith,[{lines,t,1,Info}|_]}} =
+ {module, lines} = code:load_abs(filename:rootname(BeamFile5D1)),
+ {'EXIT',{badarith,[{lines,t,1,Info}|_]}} =
(catch lines:t(atom)),
- ?line true = code:delete(lines),
- ?line false = code:purge(lines),
- ?line {ok, {lines,BeamFile5D1}} = beam_lib:strip(BeamFile5D1),
- ?line {module, lines} = code:load_abs(filename:rootname(BeamFile5D1)),
- ?line {'EXIT',{badarith,[{lines,t,1,Info}|_]}} =
+ true = code:delete(lines),
+ false = code:purge(lines),
+ {ok, {lines,BeamFile5D1}} = beam_lib:strip(BeamFile5D1),
+ {module, lines} = code:load_abs(filename:rootname(BeamFile5D1)),
+ {'EXIT',{badarith,[{lines,t,1,Info}|_]}} =
(catch lines:t(atom)),
- ?line true = (P0 == pps()),
- ?line NoOfTables = length(ets:all()),
+ true = (P0 == pps()),
+ NoOfTables = length(ets:all()),
- ?line delete_files([SourceD1, BeamFileD1,
- Source2D1, BeamFile2D1,
- Source3D1, BeamFile3D1,
- Source4D1, BeamFile4D1,
- Source5D1, BeamFile5D1]),
+ delete_files([SourceD1, BeamFileD1,
+ Source2D1, BeamFile2D1,
+ Source3D1, BeamFile3D1,
+ Source4D1, BeamFile4D1,
+ Source5D1, BeamFile5D1]),
ok.
otp_6711(Conf) when is_list(Conf) ->
- ?line {'EXIT',{function_clause,_}} = (catch {a, beam_lib:info(3)}),
- ?line {'EXIT',{function_clause,_}} = (catch {a, beam_lib:chunks(a, b)}),
- ?line {'EXIT',{function_clause,_}} = (catch {a, beam_lib:chunks(a,b,c)}),
- ?line {'EXIT',{function_clause,_}} = (catch {a, beam_lib:all_chunks(3)}),
- ?line {'EXIT',{function_clause,_}} = (catch {a, beam_lib:cmp(3,4)}),
- ?line {'EXIT',{function_clause,_}} = (catch {a, beam_lib:strip(3)}),
- ?line {'EXIT',{function_clause,_}} =
+ {'EXIT',{function_clause,_}} = (catch {a, beam_lib:info(3)}),
+ {'EXIT',{function_clause,_}} = (catch {a, beam_lib:chunks(a, b)}),
+ {'EXIT',{function_clause,_}} = (catch {a, beam_lib:chunks(a,b,c)}),
+ {'EXIT',{function_clause,_}} = (catch {a, beam_lib:all_chunks(3)}),
+ {'EXIT',{function_clause,_}} = (catch {a, beam_lib:cmp(3,4)}),
+ {'EXIT',{function_clause,_}} = (catch {a, beam_lib:strip(3)}),
+ {'EXIT',{function_clause,_}} =
(catch {a, beam_lib:strip_files([3])}),
- ?line PrivDir = ?privdir,
- ?line Dir = filename:join(PrivDir, "dir"),
- ?line Lib = filename:join(Dir, "lib"),
- ?line App = filename:join(Lib, "app"),
- ?line EBin = filename:join(App, "ebin"),
+ PrivDir = ?privdir,
+ Dir = filename:join(PrivDir, "dir"),
+ Lib = filename:join(Dir, "lib"),
+ App = filename:join(Lib, "app"),
+ EBin = filename:join(App, "ebin"),
ok = file:make_dir(Dir),
ok = file:make_dir(Lib),
ok = file:make_dir(App),
ok = file:make_dir(EBin),
-
- ?line {SourceD, BeamFileD} = make_beam(EBin, simple, member),
+
+ {SourceD, BeamFileD} = make_beam(EBin, simple, member),
unwritable(BeamFileD),
%% There is no way that strip_release can fail with
%% function_clause or something like that...
- ?line {error,_,{file_error,_,_}} = beam_lib:strip_release(Dir),
+ {error,_,{file_error,_,_}} = beam_lib:strip_release(Dir),
- ?line delete_files([SourceD, BeamFileD]),
+ delete_files([SourceD, BeamFileD]),
file:del_dir(EBin),
file:del_dir(App),
file:del_dir(Lib),
@@ -434,59 +426,58 @@ unwritable(Fname) ->
Mode = Info#file_info.mode - 8#00200,
file:write_file_info(Fname, Info#file_info{mode = Mode}).
-building(doc) -> "Testing building of BEAM files.";
+%% Testing building of BEAM files.
building(Conf) when is_list(Conf) ->
- ?line PrivDir = ?privdir,
+ PrivDir = ?privdir,
- ?line Dir1 = filename:join(PrivDir, "b_dir1"),
- ?line Dir2 = filename:join(PrivDir, "b_dir2"),
+ Dir1 = filename:join(PrivDir, "b_dir1"),
+ Dir2 = filename:join(PrivDir, "b_dir2"),
ok = file:make_dir(Dir1),
ok = file:make_dir(Dir2),
- ?line {SourceD1, BeamFileD1} = make_beam(Dir1, building, member),
+ {SourceD1, BeamFileD1} = make_beam(Dir1, building, member),
- ?line NoOfTables = length(ets:all()),
- ?line P0 = pps(),
+ NoOfTables = length(ets:all()),
+ P0 = pps(),
%% read all chunks
- ?line ChunkIds = chunk_ids(BeamFileD1),
- ?line {ok, _Mod, Chunks} = beam_lib:all_chunks(BeamFileD1),
- ?line ChunkIds = lists:map(fun ({Id, Data}) when is_binary(Data) -> Id
- end, Chunks),
+ ChunkIds = chunk_ids(BeamFileD1),
+ {ok, _Mod, Chunks} = beam_lib:all_chunks(BeamFileD1),
+ ChunkIds = lists:map(fun ({Id, Data}) when is_binary(Data) -> Id
+ end, Chunks),
%% write a new beam file, with reversed chunk order
- ?line BeamFileD2 = filename:join(Dir2, "building.beam"),
- ?line {ok,RevBeam} = beam_lib:build_module(lists:reverse(Chunks)),
- ?line file:write_file(BeamFileD2, RevBeam),
+ BeamFileD2 = filename:join(Dir2, "building.beam"),
+ {ok,RevBeam} = beam_lib:build_module(lists:reverse(Chunks)),
+ file:write_file(BeamFileD2, RevBeam),
%% compare files
- ?line compare_chunks(BeamFileD1, BeamFileD2, ChunkIds),
+ compare_chunks(BeamFileD1, BeamFileD2, ChunkIds),
%% test that we can retrieve a chunk before the atom table
%% (actually, try to retrieve all chunks)
- ?line lists:foreach(fun(Id) ->
- {ok, {building, [{Id, _Data}]}} =
- beam_lib:chunks(BeamFileD1, [Id])
- end, ChunkIds),
- ?line lists:foreach(fun(Id) ->
- {ok, {building, [{Id, _Data}]}} =
- beam_lib:chunks(BeamFileD2, [Id])
- end, ChunkIds),
+ lists:foreach(fun(Id) ->
+ {ok, {building, [{Id, _Data}]}} =
+ beam_lib:chunks(BeamFileD1, [Id])
+ end, ChunkIds),
+ lists:foreach(fun(Id) ->
+ {ok, {building, [{Id, _Data}]}} =
+ beam_lib:chunks(BeamFileD2, [Id])
+ end, ChunkIds),
- ?line true = (P0 == pps()),
- ?line NoOfTables = length(ets:all()),
+ true = (P0 == pps()),
+ NoOfTables = length(ets:all()),
- ?line delete_files([SourceD1, BeamFileD1, BeamFileD2]),
+ delete_files([SourceD1, BeamFileD1, BeamFileD2]),
file:del_dir(Dir1),
file:del_dir(Dir2),
ok.
-md5(suite) -> [];
-md5(doc) -> ["Compare beam_lib:md5/1 and code:module_md5/1."];
+%% Compare beam_lib:md5/1 and code:module_md5/1.
md5(Conf) when is_list(Conf) ->
- ?line Beams = collect_beams(),
+ Beams = collect_beams(),
io:format("Found ~w beam files", [length(Beams)]),
md5_1(Beams).
@@ -497,7 +488,7 @@ md5_1([N|Ns]) ->
{Mod,MD5} = {Mod,code:module_md5(Beam)},
md5_1(Ns);
md5_1([]) -> ok.
-
+
collect_beams() ->
SuperDir = filename:dirname(filename:dirname(code:which(?MODULE))),
TestDirs = filelib:wildcard(filename:join([SuperDir,"*_test"])),
@@ -511,90 +502,89 @@ collect_beams_1([]) -> [].
maybe_uncompress(<<"FOR1",_/binary>>=Beam) -> Beam;
maybe_uncompress(Beam) -> zlib:gunzip(Beam).
-encrypted_abstr(suite) -> [];
-encrypted_abstr(doc) -> ["Test encrypted abstract format"];
+%% Test encrypted abstract format.
encrypted_abstr(Conf) when is_list(Conf) ->
run_if_crypto_works(fun() -> encrypted_abstr_1(Conf) end).
encrypted_abstr_1(Conf) ->
- ?line PrivDir = ?privdir,
- ?line Simple = filename:join(PrivDir, "simple"),
- ?line Source = Simple ++ ".erl",
- ?line BeamFile = Simple ++ ".beam",
- ?line simple_file(Source),
+ PrivDir = ?privdir,
+ Simple = filename:join(PrivDir, "simple"),
+ Source = Simple ++ ".erl",
+ BeamFile = Simple ++ ".beam",
+ simple_file(Source),
%% Avoid getting an extra port when crypto starts erl_ddll.
- ?line erl_ddll:start(),
+ erl_ddll:start(),
- ?line NoOfTables = length(ets:all()),
- ?line P0 = pps(),
+ NoOfTables = length(ets:all()),
+ P0 = pps(),
Key = "#a_crypto_key",
CompileFlags = [{outdir,PrivDir}, debug_info, {debug_info_key,Key}],
- ?line {ok,_} = compile:file(Source, CompileFlags),
- ?line {ok, Binary} = file:read_file(BeamFile),
+ {ok,_} = compile:file(Source, CompileFlags),
+ {ok, Binary} = file:read_file(BeamFile),
- ?line do_encrypted_abstr(BeamFile, Key),
- ?line do_encrypted_abstr(Binary, Key),
+ do_encrypted_abstr(BeamFile, Key),
+ do_encrypted_abstr(Binary, Key),
- ?line ok = crypto:stop(), %To get rid of extra ets tables.
- ?line file:delete(BeamFile),
- ?line file:delete(Source),
- ?line NoOfTables = length(ets:all()),
- ?line true = (P0 == pps()),
+ ok = crypto:stop(), %To get rid of extra ets tables.
+ file:delete(BeamFile),
+ file:delete(Source),
+ NoOfTables = length(ets:all()),
+ true = (P0 == pps()),
ok.
do_encrypted_abstr(Beam, Key) ->
- ?line verify(key_missing_or_invalid, beam_lib:chunks(Beam, [abstract_code])),
+ verify(key_missing_or_invalid, beam_lib:chunks(Beam, [abstract_code])),
%% The raw chunk "Abst" can still be read even without a key.
- ?line {ok,{simple,[{"Abst",Abst}]}} = beam_lib:chunks(Beam, ["Abst"]),
- ?line <<0:8,8:8,"des3_cbc",_/binary>> = Abst,
+ {ok,{simple,[{"Abst",Abst}]}} = beam_lib:chunks(Beam, ["Abst"]),
+ <<0:8,8:8,"des3_cbc",_/binary>> = Abst,
%% Try som invalid funs.
- ?line bad_fun(badfun, fun() -> ok end),
- ?line bad_fun(badfun, {a,b}),
- ?line bad_fun(blurf),
- ?line {function_clause,_} = bad_fun(fun(glurf) -> ok end),
+ bad_fun(badfun, fun() -> ok end),
+ bad_fun(badfun, {a,b}),
+ bad_fun(blurf),
+ {function_clause,_} = bad_fun(fun(glurf) -> ok end),
%% Funs that return something strange.
- ?line bad_fun(badfun, fun(init) -> {ok,fun() -> ok end} end),
- ?line glurf = bad_fun(fun(init) -> {error,glurf} end),
+ bad_fun(badfun, fun(init) -> {ok,fun() -> ok end} end),
+ glurf = bad_fun(fun(init) -> {error,glurf} end),
%% Try clearing (non-existing fun).
- ?line undefined = beam_lib:clear_crypto_key_fun(),
+ undefined = beam_lib:clear_crypto_key_fun(),
%% Install a fun which cannot retrieve a key.
- ?line ok = beam_lib:crypto_key_fun(fun(init) -> ok end),
- ?line {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
+ ok = beam_lib:crypto_key_fun(fun(init) -> ok end),
+ {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
%% Install a fun which returns an incorrect key.
- ?line {ok,_} = beam_lib:clear_crypto_key_fun(),
- ?line ok = beam_lib:crypto_key_fun(simple_crypto_fun("wrong key...")),
- ?line {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
-
+ {ok,_} = beam_lib:clear_crypto_key_fun(),
+ ok = beam_lib:crypto_key_fun(simple_crypto_fun("wrong key...")),
+ {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
+
%% Installing a new key fun is not possible without clearing the old.
- ?line verify(exists, beam_lib:crypto_key_fun(simple_crypto_fun(Key))),
+ verify(exists, beam_lib:crypto_key_fun(simple_crypto_fun(Key))),
%% Install the simplest possible working key fun.
- ?line {ok,_} = beam_lib:clear_crypto_key_fun(),
- ?line ok = beam_lib:crypto_key_fun(simple_crypto_fun(Key)),
- ?line verify_abstract(Beam),
- ?line {ok,{simple,[{"Abst",Abst}]}} = beam_lib:chunks(Beam, ["Abst"]),
+ {ok,_} = beam_lib:clear_crypto_key_fun(),
+ ok = beam_lib:crypto_key_fun(simple_crypto_fun(Key)),
+ verify_abstract(Beam),
+ {ok,{simple,[{"Abst",Abst}]}} = beam_lib:chunks(Beam, ["Abst"]),
%% Installing a new key fun is not possible without clearing the old.
verify(exists, beam_lib:crypto_key_fun(ets_crypto_fun(Key))),
%% Install a key using an ets table.
- ?line {ok,_} = beam_lib:clear_crypto_key_fun(),
- ?line ok = beam_lib:crypto_key_fun(ets_crypto_fun(Key)),
- ?line verify_abstract(Beam),
- ?line {ok,{simple,[{"Abst",Abst}]}} = beam_lib:chunks(Beam, ["Abst"]),
+ {ok,_} = beam_lib:clear_crypto_key_fun(),
+ ok = beam_lib:crypto_key_fun(ets_crypto_fun(Key)),
+ verify_abstract(Beam),
+ {ok,{simple,[{"Abst",Abst}]}} = beam_lib:chunks(Beam, ["Abst"]),
- ?line {ok,cleared} = beam_lib:clear_crypto_key_fun(),
+ {ok,cleared} = beam_lib:clear_crypto_key_fun(),
%% Try to force a stop/start race.
- ?line start_stop_race(10000),
+ start_stop_race(10000),
ok.
@@ -635,69 +625,67 @@ ets_crypto_fun(Key) ->
end}
end.
-encrypted_abstr_file(suite) -> [];
-encrypted_abstr_file(doc) ->
- ["Test encrypted abstract format with the key in .erlang.crypt"];
+%% Test encrypted abstract format with the key in .erlang.crypt.
encrypted_abstr_file(Conf) when is_list(Conf) ->
run_if_crypto_works(fun() -> encrypted_abstr_file_1(Conf) end).
encrypted_abstr_file_1(Conf) ->
- ?line PrivDir = ?privdir,
- ?line Simple = filename:join(PrivDir, "simple"),
- ?line Source = Simple ++ ".erl",
- ?line BeamFile = Simple ++ ".beam",
- ?line simple_file(Source),
+ PrivDir = ?privdir,
+ Simple = filename:join(PrivDir, "simple"),
+ Source = Simple ++ ".erl",
+ BeamFile = Simple ++ ".beam",
+ simple_file(Source),
%% Avoid getting an extra port when crypto starts erl_ddll.
- ?line erl_ddll:start(),
+ erl_ddll:start(),
- ?line NoOfTables = length(ets:all()),
- ?line P0 = pps(),
+ NoOfTables = length(ets:all()),
+ P0 = pps(),
Key = "Long And niCe 99Krypto Key",
CompileFlags = [{outdir,PrivDir}, debug_info, {debug_info_key,Key}],
- ?line {ok,_} = compile:file(Source, CompileFlags),
- ?line {ok, Binary} = file:read_file(BeamFile),
-
- ?line {ok,OldCwd} = file:get_cwd(),
- ?line ok = file:set_cwd(PrivDir),
- ?line do_encrypted_abstr_file(BeamFile, Key),
- ?line do_encrypted_abstr_file(Binary, Key),
- ?line ok = file:set_cwd(OldCwd),
-
- ?line ok = crypto:stop(), %To get rid of extra ets tables.
- ?line file:delete(filename:join(PrivDir, ".erlang.crypt")),
- ?line file:delete(BeamFile),
- ?line file:delete(Source),
- ?line NoOfTables = length(ets:all()),
- ?line true = (P0 == pps()),
+ {ok,_} = compile:file(Source, CompileFlags),
+ {ok, Binary} = file:read_file(BeamFile),
+
+ {ok,OldCwd} = file:get_cwd(),
+ ok = file:set_cwd(PrivDir),
+ do_encrypted_abstr_file(BeamFile, Key),
+ do_encrypted_abstr_file(Binary, Key),
+ ok = file:set_cwd(OldCwd),
+
+ ok = crypto:stop(), %To get rid of extra ets tables.
+ file:delete(filename:join(PrivDir, ".erlang.crypt")),
+ file:delete(BeamFile),
+ file:delete(Source),
+ NoOfTables = length(ets:all()),
+ true = (P0 == pps()),
ok.
do_encrypted_abstr_file(Beam, Key) ->
%% No key.
- ?line write_crypt_file(""),
- ?line {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
+ write_crypt_file(""),
+ {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
%% A wrong key.
- ?line write_crypt_file(["[{debug_info,des3_cbc,simple,\"A Wrong Key\"}].\n"]),
- ?line {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
+ write_crypt_file(["[{debug_info,des3_cbc,simple,\"A Wrong Key\"}].\n"]),
+ {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
%% Write correct key...
- ?line write_crypt_file(["[{debug_info,des3_cbc,simple,\"",Key,"\"}].\n"]),
+ write_crypt_file(["[{debug_info,des3_cbc,simple,\"",Key,"\"}].\n"]),
%% ... but the fun with the wrong key is still there.
- ?line {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
+ {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
%% Clear the fun. Now it should work.
- ?line {ok,_} = beam_lib:clear_crypto_key_fun(),
- ?line verify_abstract(Beam),
- ?line verify_abstract(Beam),
- ?line ok = file:delete(".erlang.crypt"),
- ?line verify_abstract(Beam),
+ {ok,_} = beam_lib:clear_crypto_key_fun(),
+ verify_abstract(Beam),
+ verify_abstract(Beam),
+ ok = file:delete(".erlang.crypt"),
+ verify_abstract(Beam),
%% Clear, otherwise the second pass will fail.
- ?line {ok,_} = beam_lib:clear_crypto_key_fun(),
- ?line {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
+ {ok,_} = beam_lib:clear_crypto_key_fun(),
+ {error,beam_lib,Error} = beam_lib:chunks(Beam, [abstract_code]),
ok.
write_crypt_file(Contents0) ->
@@ -706,45 +694,44 @@ write_crypt_file(Contents0) ->
ok = file:write_file(".erlang.crypt", Contents).
compare_chunks(File1, File2, ChunkIds) ->
- ?line {ok, {_, Chunks1}} = beam_lib:chunks(File1, ChunkIds),
- ?line {ok, {_, Chunks2}} = beam_lib:chunks(File2, ChunkIds),
- ?line true = Chunks1 == Chunks2.
+ {ok, {_, Chunks1}} = beam_lib:chunks(File1, ChunkIds),
+ {ok, {_, Chunks2}} = beam_lib:chunks(File2, ChunkIds),
+ true = Chunks1 == Chunks2.
chunk_ids(File) ->
- ?line lists:map(fun({Id,_Start,_Size}) -> Id end, chunk_info(File)).
-
+ lists:map(fun({Id,_Start,_Size}) -> Id end, chunk_info(File)).
+
chunk_info(File) ->
- ?line {value, {chunks, Chunks}} =
+ {value, {chunks, Chunks}} =
lists:keysearch(chunks, 1, beam_lib:info(File)),
Chunks.
-
+
make_beam(Dir, Module, F) ->
- ?line FileBase = filename:join(Dir, atom_to_list(Module)),
- ?line Source = FileBase ++ ".erl",
- ?line BeamFile = FileBase ++ ".beam",
- ?line simple_file(Source, Module, F),
- ?line {ok, _} = compile:file(Source, [{outdir,Dir}, debug_info, report]),
+ FileBase = filename:join(Dir, atom_to_list(Module)),
+ Source = FileBase ++ ".erl",
+ BeamFile = FileBase ++ ".beam",
+ simple_file(Source, Module, F),
+ {ok, _} = compile:file(Source, [{outdir,Dir}, debug_info, report]),
{Source, BeamFile}.
set_byte(_Backup, Binary, Pos, Byte) when is_binary(Binary) ->
- ?line <<B1:Pos/binary, _:1/binary, B2/binary>> = Binary,
+ <<B1:Pos/binary, _:1/binary, B2/binary>> = Binary,
NB = <<B1/binary, Byte:8, B2/binary>>,
NB;
set_byte(Backup, File, Pos, Byte) ->
- ?line copy_file(Backup, File),
- ?line set_byte(File, Pos, Byte),
+ copy_file(Backup, File),
+ set_byte(File, Pos, Byte),
File.
set_byte(File, Pos, Byte) ->
- ?line {ok, Fd} = file:open(File, [read, write]),
- ?line {ok, _} = file:position(Fd, Pos),
- ?line ok = file:write(Fd, [Byte]),
- ?line file:close(Fd).
+ {ok, Fd} = file:open(File, [read, write]),
+ {ok, _} = file:position(Fd, Pos),
+ ok = file:write(Fd, [Byte]),
+ file:close(Fd).
copy_file(Src, Dest) ->
- % ?t:format("copying from ~p to ~p~n", [Src, Dest]),
- ?line {ok, _} = file:copy(Src, Dest),
- ?line ok = file:change_mode(Dest, 8#0666).
+ {ok, _} = file:copy(Src, Dest),
+ ok = file:change_mode(Dest, 8#0666).
delete_files(Files) ->
lists:foreach(fun(F) -> file:delete(F) end, Files).
@@ -772,7 +759,7 @@ ver(S, {error, beam_lib, R}) ->
[S|_] = tuple_to_list(R),
case lists:flatten(beam_lib:format_error(R)) of
[${ | _] ->
- test_server:fail({bad_format_error, R});
+ ct:fail({bad_format_error, R});
_ ->
ok
end.
diff --git a/lib/stdlib/test/binary_module_SUITE.erl b/lib/stdlib/test/binary_module_SUITE.erl
index 70c946bdb9..c5cfea5e9e 100644
--- a/lib/stdlib/test/binary_module_SUITE.erl
+++ b/lib/stdlib/test/binary_module_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,53 +19,18 @@
%%
-module(binary_module_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
+-export([all/0, suite/0,
interesting/1,scope_return/1,random_ref_comp/1,random_ref_sr_comp/1,
random_ref_fla_comp/1,parts/1, bin_to_list/1, list_to_bin/1,
copy/1, referenced/1,guard/1,encode_decode/1,badargs/1,longest_common_trap/1]).
-export([random_number/1, make_unaligned/1]).
+-include_lib("common_test/include/ct.hrl").
-
-%%-define(STANDALONE,1).
-
--ifdef(STANDALONE).
-
--define(line,erlang:display({?MODULE,?LINE}),).
-
--else.
-
--include_lib("test_server/include/test_server.hrl").
--export([init_per_testcase/2, end_per_testcase/2]).
-% Default timetrap timeout (set in init_per_testcase).
-% Some of these testcases are really heavy...
--define(default_timeout, ?t:minutes(30)).
-
--endif.
-
-
-
--ifdef(STANDALONE).
--export([run/0]).
-
-run() ->
- [ apply(?MODULE,X,[[]]) || X <- all(suite) ].
-
--else.
-
-init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-
-end_per_testcase(_Case, Config) ->
- ?line Dog = ?config(watchdog, Config),
- ?line test_server:timetrap_cancel(Dog),
- ok.
--endif.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,10}}].
all() ->
[scope_return,interesting, random_ref_fla_comp, random_ref_sr_comp,
@@ -73,319 +38,301 @@ all() ->
referenced, guard, encode_decode, badargs,
longest_common_trap].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-define(MASK_ERROR(EXPR),mask_error((catch (EXPR)))).
-badargs(doc) ->
- ["Tests various badarg exceptions in the module"];
+%% Test various badarg exceptions in the module.
badargs(Config) when is_list(Config) ->
- ?line badarg = ?MASK_ERROR(binary:compile_pattern([<<1,2,3:3>>])),
- ?line badarg = ?MASK_ERROR(binary:compile_pattern([<<1,2,3>>|<<1,2>>])),
- ?line badarg = ?MASK_ERROR(binary:compile_pattern(<<1,2,3:3>>)),
- ?line badarg = ?MASK_ERROR(binary:compile_pattern(<<>>)),
- ?line badarg = ?MASK_ERROR(binary:match(<<1,2,3:3>>,<<1>>)),
- ?line badarg = ?MASK_ERROR(binary:matches(<<1,2,3:3>>,<<1>>)),
- ?line badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
- [{scope,{0,1},1}])),
- ?line badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
- [{scape,{0,1}}])),
- ?line badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
- [{scope,{0,1,1}}])),
- ?line badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,[{scope,0,1}])),
- ?line badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,[{scope,[0,1]}])),
- ?line badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
- [{scope,{0.1,1}}])),
- ?line badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
- [{scope,{1,1.1}}])),
- ?line badarg =
+ badarg = ?MASK_ERROR(binary:compile_pattern([<<1,2,3:3>>])),
+ badarg = ?MASK_ERROR(binary:compile_pattern([<<1,2,3>>|<<1,2>>])),
+ badarg = ?MASK_ERROR(binary:compile_pattern(<<1,2,3:3>>)),
+ badarg = ?MASK_ERROR(binary:compile_pattern(<<>>)),
+ badarg = ?MASK_ERROR(binary:match(<<1,2,3:3>>,<<1>>)),
+ badarg = ?MASK_ERROR(binary:matches(<<1,2,3:3>>,<<1>>)),
+ badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
+ [{scope,{0,1},1}])),
+ badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
+ [{scape,{0,1}}])),
+ badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
+ [{scope,{0,1,1}}])),
+ badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,[{scope,0,1}])),
+ badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,[{scope,[0,1]}])),
+ badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
+ [{scope,{0.1,1}}])),
+ badarg = ?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,
+ [{scope,{1,1.1}}])),
+ badarg =
?MASK_ERROR(
binary:match(<<1,2,3>>,<<1>>,
[{scope,{16#FF,
16#FFFFFFFFFFFFFFFF}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:match(<<1,2,3>>,<<1>>,
[{scope,{16#FFFFFFFFFFFFFFFF,
-16#7FFFFFFFFFFFFFFF-1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:match(<<1,2,3>>,<<1>>,
[{scope,{16#FFFFFFFFFFFFFFFF,
16#7FFFFFFFFFFFFFFF}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:part(<<1,2,3>>,{16#FF,
- 16#FFFFFFFFFFFFFFFF})),
- ?line badarg =
+ 16#FFFFFFFFFFFFFFFF})),
+ badarg =
?MASK_ERROR(
binary:part(<<1,2,3>>,{16#FFFFFFFFFFFFFFFF,
- -16#7FFFFFFFFFFFFFFF-1})),
- ?line badarg =
+ -16#7FFFFFFFFFFFFFFF-1})),
+ badarg =
?MASK_ERROR(
binary:part(<<1,2,3>>,{16#FFFFFFFFFFFFFFFF,
- 16#7FFFFFFFFFFFFFFF})),
- ?line badarg =
+ 16#7FFFFFFFFFFFFFFF})),
+ badarg =
?MASK_ERROR(
binary:part(make_unaligned(<<1,2,3>>),{1,1,1})),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary_part(make_unaligned(<<1,2,3>>),{1,1,1})),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary_part(make_unaligned(<<1,2,3>>),{16#FFFFFFFFFFFFFFFF,
- -16#7FFFFFFFFFFFFFFF-1})),
- ?line badarg =
+ -16#7FFFFFFFFFFFFFFF-1})),
+ badarg =
?MASK_ERROR(
binary_part(make_unaligned(<<1,2,3>>),{16#FF,
- 16#FFFFFFFFFFFFFFFF})),
- ?line badarg =
+ 16#FFFFFFFFFFFFFFFF})),
+ badarg =
?MASK_ERROR(
binary_part(make_unaligned(<<1,2,3>>),{16#FFFFFFFFFFFFFFFF,
- 16#7FFFFFFFFFFFFFFF})),
- ?line badarg =
+ 16#7FFFFFFFFFFFFFFF})),
+ badarg =
?MASK_ERROR(
binary_part(make_unaligned(<<1,2,3>>),{16#FFFFFFFFFFFFFFFFFF,
- -16#7FFF})),
- ?line badarg =
+ -16#7FFF})),
+ badarg =
?MASK_ERROR(
binary_part(make_unaligned(<<1,2,3>>),{16#FF,
- -16#7FFF})),
- ?line badarg =
+ -16#7FFF})),
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3>>,{16#FF,
- 16#FFFFFFFFFFFFFFFF})),
- ?line badarg =
+ 16#FFFFFFFFFFFFFFFF})),
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3>>,{16#FFFFFFFFFFFFFFFF,
- -16#7FFFFFFFFFFFFFFF-1})),
- ?line badarg =
+ -16#7FFFFFFFFFFFFFFF-1})),
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3>>,{16#FFFFFFFFFFFFFFFF,
- 16#7FFFFFFFFFFFFFFF})),
- ?line [1,2,3] =
+ 16#7FFFFFFFFFFFFFFF})),
+ [1,2,3] =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3>>)),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3>>,[])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3>>,{1,2,3})),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3>>,{1.0,1})),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3>>,{1,1.0})),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3:3>>,{1,1})),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:bin_to_list(<<1,2,3:3>>)),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:bin_to_list([1,2,3])),
- ?line nomatch =
+ nomatch =
?MASK_ERROR(binary:match(<<1,2,3>>,<<1>>,[{scope,{0,0}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:match(<<1,2,3>>,{bm,<<>>},[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:match(<<1,2,3>>,[],[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:match(<<1,2,3>>,{ac,<<>>},[{scope,{0,1}}])),
- ?line {bm,BMMagic} = binary:compile_pattern([<<1,2,3>>]),
- ?line {ac,ACMagic} = binary:compile_pattern([<<1,2,3>>,<<4,5>>]),
- ?line badarg =
+ {bm,BMMagic} = binary:compile_pattern([<<1,2,3>>]),
+ {ac,ACMagic} = binary:compile_pattern([<<1,2,3>>,<<4,5>>]),
+ badarg =
?MASK_ERROR(binary:match(<<1,2,3>>,{bm,ACMagic},[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:match(<<1,2,3>>,{ac,BMMagic},[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:match(<<1,2,3>>,
{bm,ets:match_spec_compile([{'_',[],['$_']}])},
[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:match(<<1,2,3>>,
{ac,ets:match_spec_compile([{'_',[],['$_']}])},
[{scope,{0,1}}])),
- ?line [] =
+ [] =
?MASK_ERROR(binary:matches(<<1,2,3>>,<<1>>,[{scope,{0,0}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:matches(<<1,2,3>>,{bm,<<>>},[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:matches(<<1,2,3>>,[],[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:matches(<<1,2,3>>,{ac,<<>>},[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:matches(<<1,2,3>>,{bm,ACMagic},[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:matches(<<1,2,3>>,{ac,BMMagic},[{scope,{0,1}}])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:matches(<<1,2,3>>,
- {bm,ets:match_spec_compile([{'_',[],['$_']}])},
- [{scope,{0,1}}])),
- ?line badarg =
+ {bm,ets:match_spec_compile([{'_',[],['$_']}])},
+ [{scope,{0,1}}])),
+ badarg =
?MASK_ERROR(
binary:matches(<<1,2,3>>,
- {ac,ets:match_spec_compile([{'_',[],['$_']}])},
- [{scope,{0,1}}])),
+ {ac,ets:match_spec_compile([{'_',[],['$_']}])},
+ [{scope,{0,1}}])),
%% OTP-11350
badarg = ?MASK_ERROR(
binary:matches(<<"foo">>,
[<<>>, <<"f">>])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:longest_common_prefix(
[<<0:10000,1,2,4,1:3>>,
<<0:10000,1,2,3>>])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:longest_common_suffix(
[<<0:10000,1,2,4,1:3>>,
<<0:10000,1,2,3>>])),
- ?line badarg =
+ badarg =
?MASK_ERROR(binary:encode_unsigned(-1)),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:encode_unsigned(-16#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:first(<<1,2,4,1:3>>)),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:first([1,2,4])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:last(<<1,2,4,1:3>>)),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:last([1,2,4])),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:at(<<1,2,4,1:3>>,2)),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:at(<<>>,2)),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary:at([1,2,4],2)),
ok.
-longest_common_trap(doc) ->
- ["Whitebox test to force special trap conditions in longest_common_{prefix,suffix}"];
+%% Whitebox test to force special trap conditions in
+%% longest_common_{prefix,suffix}.
longest_common_trap(Config) when is_list(Config) ->
- ?line erts_debug:set_internal_state(available_internal_state,true),
- ?line io:format("oldlimit: ~p~n",
- [erts_debug:set_internal_state(binary_loop_limit,10)]),
+ erts_debug:set_internal_state(available_internal_state,true),
+ io:format("oldlimit: ~p~n",
+ [erts_debug:set_internal_state(binary_loop_limit,10)]),
erlang:bump_reductions(10000000),
- ?line _ = binary:longest_common_prefix(
- [<<0:10000,1,2,4>>,
- <<0:10000,1,2,3>>,
- <<0:10000,1,3,3>>,
- <<0:10000,1,2,4>>,
- <<0:10000,1,2,4>>,
- <<0:10000,1,2,3>>,
- <<0:10000,1,3,3>>,
- <<0:10000,1,2,3>>,
- <<0:10000,1,3,3>>,
- <<0:10000,1,2,4>>,
- <<0:10000,1,2,4>>,
- <<0:10000,1,2,3>>,
- <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0:10000,1,3,3>>,
- <<0:10000,1,2,4>>]),
- ?line _ = binary:longest_common_prefix(
- [<<0:10000,1,2,4>>,
- <<0:10000,1,2,3>>,
- <<0:10000,1,3,3>>,
- <<0:10000,1,2,4>>,
- <<0:10000,1,2,4>>,
- <<0:10000,1,2,3>>,
- <<0:10000,1,3,3>>,
- <<0:10000,1,2,3>>,
- <<0:10000,1,3,3>>,
- <<0:10000,1,2,4>>,
- <<0:10000,1,2,4>>,
- <<0:10000,1,2,3>>,
- <<0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
- <<0:10000,1,2,4>>]),
+ _ = binary:longest_common_prefix(
+ [<<0:10000,1,2,4>>,
+ <<0:10000,1,2,3>>,
+ <<0:10000,1,3,3>>,
+ <<0:10000,1,2,4>>,
+ <<0:10000,1,2,4>>,
+ <<0:10000,1,2,3>>,
+ <<0:10000,1,3,3>>,
+ <<0:10000,1,2,3>>,
+ <<0:10000,1,3,3>>,
+ <<0:10000,1,2,4>>,
+ <<0:10000,1,2,4>>,
+ <<0:10000,1,2,3>>,
+ <<0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0:10000,1,3,3>>,
+ <<0:10000,1,2,4>>]),
+ _ = binary:longest_common_prefix(
+ [<<0:10000,1,2,4>>,
+ <<0:10000,1,2,3>>,
+ <<0:10000,1,3,3>>,
+ <<0:10000,1,2,4>>,
+ <<0:10000,1,2,4>>,
+ <<0:10000,1,2,3>>,
+ <<0:10000,1,3,3>>,
+ <<0:10000,1,2,3>>,
+ <<0:10000,1,3,3>>,
+ <<0:10000,1,2,4>>,
+ <<0:10000,1,2,4>>,
+ <<0:10000,1,2,3>>,
+ <<0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
+ <<0:10000,1,2,4>>]),
erlang:bump_reductions(10000000),
- ?line _ = binary:longest_common_suffix(
- [<<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,3,3,0:10000,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
- <<1,2,4,0:10000>>]),
- ?line _ = binary:longest_common_suffix(
- [<<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<1,2,4,0:10000>>,
- <<0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
- <<1,2,4,0:10000>>]),
+ _ = binary:longest_common_suffix(
+ [<<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,3,3,0:10000,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
+ <<1,2,4,0:10000>>]),
+ _ = binary:longest_common_suffix(
+ [<<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<1,2,4,0:10000>>,
+ <<0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
+ <<1,2,4,0:10000>>]),
Subj = subj(),
Len = byte_size(Subj),
- ?line Len = binary:longest_common_suffix(
- [Subj,Subj,Subj]),
- ?line io:format("limit was: ~p~n",
- [erts_debug:set_internal_state(binary_loop_limit,
- default)]),
- ?line erts_debug:set_internal_state(available_internal_state,false),
+ Len = binary:longest_common_suffix(
+ [Subj,Subj,Subj]),
+ io:format("limit was: ~p~n",
+ [erts_debug:set_internal_state(binary_loop_limit,
+ default)]),
+ erts_debug:set_internal_state(available_internal_state,false),
ok.
subj() ->
- Me = self(),
- spawn(fun() ->
- X0 = iolist_to_binary([
- "1234567890",
- %lists:seq(16#21, 16#7e),
- lists:duplicate(100, $x)
- ]),
- Me ! X0,
- receive X -> X end
- end),
- X0 = receive A -> A end,
- <<X1:32/binary,_/binary>> = X0,
- Subject= <<X1/binary>>,
- Subject.
-
-
-scope_return(doc) ->
- ["Test correct return values for scopes (OTP-9701)."];
+ Me = self(),
+ spawn(fun() ->
+ X0 = iolist_to_binary([
+ "1234567890",
+ lists:duplicate(100, $x)
+ ]),
+ Me ! X0,
+ receive X -> X end
+ end),
+ X0 = receive A -> A end,
+ <<X1:32/binary,_/binary>> = X0,
+ Subject= <<X1/binary>>,
+ Subject.
+
+
+%% Test correct return values for scopes (OTP-9701).
scope_return(Config) when is_list(Config) ->
N=10000,
Bin=binary:copy(<<"a">>,N),
@@ -394,358 +341,362 @@ scope_return(Config) when is_list(Config) ->
scope_loop(_,N,N) ->
ok;
scope_loop(Bin,N,M) ->
- ?line {N,1} = binary:match(Bin,<<"a">>,[{scope,{N,1}}]),
- ?line {N,1} = binary:match(Bin,[<<"a">>,<<"b">>],[{scope,{N,1}}]),
+ {N,1} = binary:match(Bin,<<"a">>,[{scope,{N,1}}]),
+ {N,1} = binary:match(Bin,[<<"a">>,<<"b">>],[{scope,{N,1}}]),
scope_loop(Bin,N+1,M).
-interesting(doc) ->
- ["Try some interesting patterns"];
+%% Try some interesting patterns.
interesting(Config) when is_list(Config) ->
X = do_interesting(binary),
X = do_interesting(binref).
do_interesting(Module) ->
- ?line {0,4} = Module:match(<<"123456">>,
+ {0,4} = Module:match(<<"123456">>,
Module:compile_pattern([<<"12">>,<<"1234">>,
<<"23">>,<<"3">>,
<<"34">>,<<"456">>,
<<"45">>,<<"6">>])),
- ?line [{0,4},{5,1}] = Module:matches(<<"123456">>,
+ [{0,4},{5,1}] = Module:matches(<<"123456">>,
Module:compile_pattern([<<"12">>,<<"1234">>,
<<"23">>,<<"3">>,
<<"34">>,<<"456">>,
<<"45">>,<<"6">>])),
- ?line [{0,4}] = Module:matches(<<"123456">>,
+ [{0,4}] = Module:matches(<<"123456">>,
Module:compile_pattern([<<"12">>,<<"1234">>,
<<"23">>,<<"3">>,
<<"34">>,<<"456">>,
<<"45">>])),
- ?line [{0,2},{2,2}] = Module:matches(<<"123456">>,
- Module:compile_pattern([<<"12">>,
- <<"23">>,<<"3">>,
- <<"34">>,<<"456">>,
- <<"45">>])),
- ?line {1,4} = Module:match(<<"123456">>,
+ [{0,2},{2,2}] = Module:matches(<<"123456">>,
+ Module:compile_pattern([<<"12">>,
+ <<"23">>,<<"3">>,
+ <<"34">>,<<"456">>,
+ <<"45">>])),
+ {1,4} = Module:match(<<"123456">>,
Module:compile_pattern([<<"34">>,<<"34">>,
<<"12347">>,<<"2345">>])),
- ?line [{1,4}] = Module:matches(<<"123456">>,
+ [{1,4}] = Module:matches(<<"123456">>,
Module:compile_pattern([<<"34">>,<<"34">>,
<<"12347">>,<<"2345">>])),
- ?line [{2,2}] = Module:matches(<<"123456">>,
+ [{2,2}] = Module:matches(<<"123456">>,
Module:compile_pattern([<<"34">>,<<"34">>,
<<"12347">>,<<"2346">>])),
- ?line {0,4} = Module:match(<<"123456">>,
+ {0,4} = Module:match(<<"123456">>,
[<<"12">>,<<"1234">>,
<<"23">>,<<"3">>,
<<"34">>,<<"456">>,
<<"45">>,<<"6">>]),
- ?line [{0,4},{5,1}] = Module:matches(<<"123456">>,
+ [{0,4},{5,1}] = Module:matches(<<"123456">>,
[<<"12">>,<<"1234">>,
<<"23">>,<<"3">>,
<<"34">>,<<"456">>,
<<"45">>,<<"6">>]),
- ?line [{0,4}] = Module:matches(<<"123456">>,
+ [{0,4}] = Module:matches(<<"123456">>,
[<<"12">>,<<"1234">>,
<<"23">>,<<"3">>,
<<"34">>,<<"456">>,
<<"45">>]),
- ?line [{0,2},{2,2}] = Module:matches(<<"123456">>,
- [<<"12">>,
- <<"23">>,<<"3">>,
- <<"34">>,<<"456">>,
- <<"45">>]),
- ?line {1,4} = Module:match(<<"123456">>,
- [<<"34">>,<<"34">>,
- <<"12347">>,<<"2345">>]),
- ?line [{1,4}] = Module:matches(<<"123456">>,
- [<<"34">>,<<"34">>,
- <<"12347">>,<<"2345">>]),
- ?line [{2,2}] = Module:matches(<<"123456">>,
- [<<"34">>,<<"34">>,
- <<"12347">>,<<"2346">>]),
- ?line nomatch = Module:match(<<1,2,3,4>>,<<2>>,[{scope,{0,1}}]),
- ?line {1,1} = Module:match(<<1,2,3,4>>,<<2>>,[{scope,{0,2}}]),
- ?line nomatch = Module:match(<<1,2,3,4>>,<<2,3>>,[{scope,{0,2}}]),
- ?line {1,2} = Module:match(<<1,2,3,4>>,<<2,3>>,[{scope,{0,3}}]),
- ?line {1,2} = Module:match(<<1,2,3,4>>,<<2,3>>,[{scope,{0,4}}]),
- ?line badarg = ?MASK_ERROR(Module:match(<<1,2,3,4>>,<<2,3>>,
- [{scope,{0,5}}])),
- ?line {1,2} = Module:match(<<1,2,3,4>>,<<2,3>>,[{scope,{4,-4}}]),
- ?line {0,3} = Module:match(<<1,2,3,4>>,<<1,2,3>>,[{scope,{4,-4}}]),
- ?line {0,4} = Module:match(<<1,2,3,4>>,<<1,2,3,4>>,[{scope,{4,-4}}]),
- ?line badarg = ?MASK_ERROR(Module:match(<<1,2,3,4>>,<<1,2,3,4>>,
- [{scope,{3,-4}}])),
- ?line [] = Module:matches(<<1,2,3,4>>,<<2>>,[{scope,{0,1}}]),
- ?line [{1,1}] = Module:matches(<<1,2,3,4>>,[<<2>>,<<3>>],[{scope,{0,2}}]),
- ?line [] = Module:matches(<<1,2,3,4>>,<<2,3>>,[{scope,{0,2}}]),
- ?line [{1,2}] = Module:matches(<<1,2,3,4>>,<<2,3>>,[{scope,{0,3}}]),
- ?line [{1,2}] = Module:matches(<<1,2,3,4>>,<<2,3>>,[{scope,{0,4}}]),
- ?line [{1,2}] = Module:matches(<<1,2,3,4>>,[<<2,3>>,<<4>>],
- [{scope,{0,3}}]),
- ?line [{1,2},{3,1}] = Module:matches(<<1,2,3,4>>,[<<2,3>>,<<4>>],
- [{scope,{0,4}}]),
- ?line badarg = ?MASK_ERROR(Module:matches(<<1,2,3,4>>,<<2,3>>,
- [{scope,{0,5}}])),
- ?line [{1,2}] = Module:matches(<<1,2,3,4>>,<<2,3>>,[{scope,{4,-4}}]),
- ?line [{1,2},{3,1}] = Module:matches(<<1,2,3,4>>,[<<2,3>>,<<4>>],
- [{scope,{4,-4}}]),
- ?line [{0,3}] = Module:matches(<<1,2,3,4>>,<<1,2,3>>,[{scope,{4,-4}}]),
- ?line [{0,4}] = Module:matches(<<1,2,3,4>>,<<1,2,3,4>>,[{scope,{4,-4}}]),
- ?line badarg = ?MASK_ERROR(Module:matches(<<1,2,3,4>>,<<1,2,3,4>>,
- [{scope,{3,-4}}])),
- ?line badarg = ?MASK_ERROR(Module:matches(<<1,2,3,4>>,[<<1,2,3,4>>],
- [{scope,{3,-4}}])),
- ?line [<<1,2,3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,<<4,5>>),
- ?line [<<1,2,3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>]),
- ?line [<<1,2,3>>,<<6>>,<<8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>],[global]),
- ?line [<<1,2,3>>,<<6>>,<<>>,<<>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],
- [global]),
- ?line [<<1,2,3>>,<<6>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],
- [global,trim]),
- ?line [<<1,2,3>>,<<6>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],
- [global,trim_all]),
- ?line [<<1,2,3,4,5,6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],
- [global,trim,{scope,{0,4}}]),
- ?line [<<1,2,3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [{0,2},{2,2}] = Module:matches(<<"123456">>,
+ [<<"12">>,
+ <<"23">>,<<"3">>,
+ <<"34">>,<<"456">>,
+ <<"45">>]),
+ {1,4} = Module:match(<<"123456">>,
+ [<<"34">>,<<"34">>,
+ <<"12347">>,<<"2345">>]),
+ [{1,4}] = Module:matches(<<"123456">>,
+ [<<"34">>,<<"34">>,
+ <<"12347">>,<<"2345">>]),
+ [{2,2}] = Module:matches(<<"123456">>,
+ [<<"34">>,<<"34">>,
+ <<"12347">>,<<"2346">>]),
+ nomatch = Module:match(<<1,2,3,4>>,<<2>>,[{scope,{0,1}}]),
+ {1,1} = Module:match(<<1,2,3,4>>,<<2>>,[{scope,{0,2}}]),
+ nomatch = Module:match(<<1,2,3,4>>,<<2,3>>,[{scope,{0,2}}]),
+ {1,2} = Module:match(<<1,2,3,4>>,<<2,3>>,[{scope,{0,3}}]),
+ {1,2} = Module:match(<<1,2,3,4>>,<<2,3>>,[{scope,{0,4}}]),
+ badarg = ?MASK_ERROR(Module:match(<<1,2,3,4>>,<<2,3>>,
+ [{scope,{0,5}}])),
+ {1,2} = Module:match(<<1,2,3,4>>,<<2,3>>,[{scope,{4,-4}}]),
+ {0,3} = Module:match(<<1,2,3,4>>,<<1,2,3>>,[{scope,{4,-4}}]),
+ {0,4} = Module:match(<<1,2,3,4>>,<<1,2,3,4>>,[{scope,{4,-4}}]),
+ badarg = ?MASK_ERROR(Module:match(<<1,2,3,4>>,<<1,2,3,4>>,
+ [{scope,{3,-4}}])),
+ [] = Module:matches(<<1,2,3,4>>,<<2>>,[{scope,{0,1}}]),
+ [{1,1}] = Module:matches(<<1,2,3,4>>,[<<2>>,<<3>>],[{scope,{0,2}}]),
+ [] = Module:matches(<<1,2,3,4>>,<<2,3>>,[{scope,{0,2}}]),
+ [{1,2}] = Module:matches(<<1,2,3,4>>,<<2,3>>,[{scope,{0,3}}]),
+ [{1,2}] = Module:matches(<<1,2,3,4>>,<<2,3>>,[{scope,{0,4}}]),
+ [{1,2}] = Module:matches(<<1,2,3,4>>,[<<2,3>>,<<4>>],
+ [{scope,{0,3}}]),
+ [{1,2},{3,1}] = Module:matches(<<1,2,3,4>>,[<<2,3>>,<<4>>],
+ [{scope,{0,4}}]),
+ badarg = ?MASK_ERROR(Module:matches(<<1,2,3,4>>,<<2,3>>,
+ [{scope,{0,5}}])),
+ [{1,2}] = Module:matches(<<1,2,3,4>>,<<2,3>>,[{scope,{4,-4}}]),
+ [{1,2},{3,1}] = Module:matches(<<1,2,3,4>>,[<<2,3>>,<<4>>],
+ [{scope,{4,-4}}]),
+ [{0,3}] = Module:matches(<<1,2,3,4>>,<<1,2,3>>,[{scope,{4,-4}}]),
+ [{0,4}] = Module:matches(<<1,2,3,4>>,<<1,2,3,4>>,[{scope,{4,-4}}]),
+ badarg = ?MASK_ERROR(Module:matches(<<1,2,3,4>>,<<1,2,3,4>>,
+ [{scope,{3,-4}}])),
+ badarg = ?MASK_ERROR(Module:matches(<<1,2,3,4>>,[<<1,2,3,4>>],
+ [{scope,{3,-4}}])),
+ [<<1,2,3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,<<4,5>>),
+ [<<1,2,3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>]),
+ [<<1,2,3>>,<<6>>,<<8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>],[global]),
+ [<<1,2,3>>,<<6>>,<<>>,<<>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
[<<4,5>>,<<7>>,<<8>>],
- [global,trim,{scope,{0,5}}]),
-
- ?line [<<>>,<<>>,<<3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<1>>,<<2>>,<<4,5>>],
- [global,trim]),
- ?line [<<3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<1>>,<<2>>,<<4,5>>],
- [global,trim_all]),
-
- ?line [<<1,2,3>>,<<>>,<<7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<6>>],
- [global,trim]),
- ?line [<<1,2,3>>,<<7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<6>>],
- [global,trim_all]),
- ?line [<<>>,<<>>,<<3>>,<<>>,<<6>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<1>>,<<2>>,<<4>>,<<5>>,<<7>>,<<8>>],
- [global,trim]),
- ?line [<<3>>,<<6>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
- [<<1>>,<<2>>,<<4>>,<<5>>,<<7>>,<<8>>],
- [global,trim_all]),
- ?line badarg = ?MASK_ERROR(
- Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<99>>,
- [global,trim,{scope,{0,5}}])),
- ?line <<1,2,3,99,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<99>>,[]),
- ?line <<1,2,3,99,6,99,99>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<99>>,
- [global]),
- ?line <<1,2,3,99,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<99>>,
- [global,{scope,{0,5}}]),
- ?line <<1,2,3,99,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<99>>,
- [global,{scope,{0,5}}]),
- ?line <<1,2,3,99,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<99>>,
- [global,{scope,{0,5}}]),
- ?line badarg = ?MASK_ERROR(Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<99>>,
- [global,{scope,{0,5}},
- {insert,1}])),
- ?line <<1,2,3,99,4,5,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<99>>,
- [global,{scope,{0,5}},
- {insert_replaced,1}]),
- ?line <<1,2,3,9,4,5,9,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],
- <<9,9>>,
- [global,{scope,{0,5}},
- {insert_replaced,1}]),
- ?line badarg = ?MASK_ERROR(Module:replace(<<1,2,3,4,5,6,7,8>>,
- [<<4,5>>,<<7>>,<<8>>],<<>>,
- [global,{scope,{0,5}},
- {insert_replaced,1}])),
- ?line 2 = Module:longest_common_prefix([<<1,2,4>>,<<1,2,3>>]),
- ?line 2 = Module:longest_common_prefix([<<1,2,4>>,<<1,2>>]),
- ?line 1 = Module:longest_common_prefix([<<1,2,4>>,<<1>>]),
- ?line 0 = Module:longest_common_prefix([<<1,2,4>>,<<>>]),
- ?line 1 = Module:longest_common_prefix([<<1,2,4>>,<<1,2,3>>,<<1,3,3>>]),
- ?line 1 = Module:longest_common_prefix([<<1,2,4>>,<<1,2,3>>,<<1,3,3>>,<<1,2,4>>]),
- ?line 1251 = Module:longest_common_prefix([<<0:10000,1,2,4>>,
- <<0:10000,1,2,3>>,
- <<0:10000,1,3,3>>,
- <<0:10000,1,2,4>>]),
- ?line 12501 = Module:longest_common_prefix([<<0:100000,1,2,4>>,
- <<0:100000,1,2,3>>,
- <<0:100000,1,3,3>>,
- <<0:100000,1,2,4>>]),
- ?line 1251 = Module:longest_common_prefix(
- [make_unaligned(<<0:10000,1,2,4>>),
- <<0:10000,1,2,3>>,
- make_unaligned(<<0:10000,1,3,3>>),
- <<0:10000,1,2,4>>]),
- ?line 12501 = Module:longest_common_prefix(
- [<<0:100000,1,2,4>>,
- make_unaligned(<<0:100000,1,2,3>>),
- <<0:100000,1,3,3>>,
- make_unaligned(<<0:100000,1,2,4>>)]),
- ?line 1250001 = Module:longest_common_prefix([<<0:10000000,1,2,4>>,
- <<0:10000000,1,2,3>>,
- <<0:10000000,1,3,3>>,
- <<0:10000000,1,2,4>>]),
+ [global]),
+ [<<1,2,3>>,<<6>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],
+ [global,trim]),
+ [<<1,2,3>>,<<6>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],
+ [global,trim_all]),
+ [<<1,2,3,4,5,6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],
+ [global,trim,{scope,{0,4}}]),
+ [<<1,2,3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],
+ [global,trim,{scope,{0,5}}]),
+
+ [<<>>,<<>>,<<3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<1>>,<<2>>,<<4,5>>],
+ [global,trim]),
+ [<<3>>,<<6,7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<1>>,<<2>>,<<4,5>>],
+ [global,trim_all]),
+
+ [<<1,2,3>>,<<>>,<<7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<6>>],
+ [global,trim]),
+ [<<1,2,3>>,<<7,8>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<6>>],
+ [global,trim_all]),
+ [<<>>,<<>>,<<3>>,<<>>,<<6>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<1>>,<<2>>,<<4>>,<<5>>,<<7>>,<<8>>],
+ [global,trim]),
+ [<<3>>,<<6>>] = Module:split(<<1,2,3,4,5,6,7,8>>,
+ [<<1>>,<<2>>,<<4>>,<<5>>,<<7>>,<<8>>],
+ [global,trim_all]),
+ [<<>>] = binary:split(<<>>, <<",">>, []),
+ [] = binary:split(<<>>, <<",">>, [trim]),
+ [] = binary:split(<<>>, <<",">>, [trim_all]),
+ [] = binary:split(<<>>, <<",">>, [global,trim]),
+ [] = binary:split(<<>>, <<",">>, [global,trim_all]),
+
+ badarg = ?MASK_ERROR(
+ Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<99>>,
+ [global,trim,{scope,{0,5}}])),
+ <<1,2,3,99,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<99>>,[]),
+ <<1,2,3,99,6,99,99>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<99>>,
+ [global]),
+ <<1,2,3,99,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<99>>,
+ [global,{scope,{0,5}}]),
+ <<1,2,3,99,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<99>>,
+ [global,{scope,{0,5}}]),
+ <<1,2,3,99,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<99>>,
+ [global,{scope,{0,5}}]),
+ badarg = ?MASK_ERROR(Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<99>>,
+ [global,{scope,{0,5}},
+ {insert,1}])),
+ <<1,2,3,99,4,5,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<99>>,
+ [global,{scope,{0,5}},
+ {insert_replaced,1}]),
+ <<1,2,3,9,4,5,9,6,7,8>> = Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],
+ <<9,9>>,
+ [global,{scope,{0,5}},
+ {insert_replaced,1}]),
+ badarg = ?MASK_ERROR(Module:replace(<<1,2,3,4,5,6,7,8>>,
+ [<<4,5>>,<<7>>,<<8>>],<<>>,
+ [global,{scope,{0,5}},
+ {insert_replaced,1}])),
+ 2 = Module:longest_common_prefix([<<1,2,4>>,<<1,2,3>>]),
+ 2 = Module:longest_common_prefix([<<1,2,4>>,<<1,2>>]),
+ 1 = Module:longest_common_prefix([<<1,2,4>>,<<1>>]),
+ 0 = Module:longest_common_prefix([<<1,2,4>>,<<>>]),
+ 1 = Module:longest_common_prefix([<<1,2,4>>,<<1,2,3>>,<<1,3,3>>]),
+ 1 = Module:longest_common_prefix([<<1,2,4>>,<<1,2,3>>,<<1,3,3>>,<<1,2,4>>]),
+ 1251 = Module:longest_common_prefix([<<0:10000,1,2,4>>,
+ <<0:10000,1,2,3>>,
+ <<0:10000,1,3,3>>,
+ <<0:10000,1,2,4>>]),
+ 12501 = Module:longest_common_prefix([<<0:100000,1,2,4>>,
+ <<0:100000,1,2,3>>,
+ <<0:100000,1,3,3>>,
+ <<0:100000,1,2,4>>]),
+ 1251 = Module:longest_common_prefix(
+ [make_unaligned(<<0:10000,1,2,4>>),
+ <<0:10000,1,2,3>>,
+ make_unaligned(<<0:10000,1,3,3>>),
+ <<0:10000,1,2,4>>]),
+ 12501 = Module:longest_common_prefix(
+ [<<0:100000,1,2,4>>,
+ make_unaligned(<<0:100000,1,2,3>>),
+ <<0:100000,1,3,3>>,
+ make_unaligned(<<0:100000,1,2,4>>)]),
+ 1250001 = Module:longest_common_prefix([<<0:10000000,1,2,4>>,
+ <<0:10000000,1,2,3>>,
+ <<0:10000000,1,3,3>>,
+ <<0:10000000,1,2,4>>]),
if % Too cruel for the reference implementation
Module =:= binary ->
- ?line erts_debug:set_internal_state(available_internal_state,true),
- ?line io:format("oldlimit: ~p~n",
- [erts_debug:set_internal_state(
- binary_loop_limit,100)]),
- ?line 1250001 = Module:longest_common_prefix(
- [<<0:10000000,1,2,4>>,
- <<0:10000000,1,2,3>>,
- <<0:10000000,1,3,3>>,
- <<0:10000000,1,2,4>>]),
- ?line io:format("limit was: ~p~n",
- [erts_debug:set_internal_state(binary_loop_limit,
- default)]),
- ?line erts_debug:set_internal_state(available_internal_state,
- false);
+ erts_debug:set_internal_state(available_internal_state,true),
+ io:format("oldlimit: ~p~n",
+ [erts_debug:set_internal_state(
+ binary_loop_limit,100)]),
+ 1250001 = Module:longest_common_prefix(
+ [<<0:10000000,1,2,4>>,
+ <<0:10000000,1,2,3>>,
+ <<0:10000000,1,3,3>>,
+ <<0:10000000,1,2,4>>]),
+ io:format("limit was: ~p~n",
+ [erts_debug:set_internal_state(binary_loop_limit,
+ default)]),
+ erts_debug:set_internal_state(available_internal_state,
+ false);
true ->
ok
end,
- ?line 1 = Module:longest_common_suffix([<<0:100000000,1,2,4,5>>,
- <<0:100000000,1,2,3,5>>,
- <<0:100000000,1,3,3,5>>,
- <<0:100000000,1,2,4,5>>]),
- ?line 1 = Module:longest_common_suffix([<<1,2,4,5>>,
- <<0:100000000,1,2,3,5>>,
- <<0:100000000,1,3,3,5>>,
- <<0:100000000,1,2,4,5>>]),
- ?line 1 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<5,5>>,
- <<0:100000000,1,3,3,5,5>>,
- <<0:100000000,1,2,4,5>>]),
- ?line 0 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<5,5>>,
- <<0:100000000,1,3,3,5,5>>,
- <<0:100000000,1,2,4>>]),
- ?line 2 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<5,5>>,
- <<0:100000000,1,3,3,5,5>>,
- <<0:100000000,1,2,4,5,5>>]),
- ?line 1 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<5>>,
- <<0:100000000,1,3,3,5,5>>,
- <<0:100000000,1,2,4,5,5>>]),
- ?line 0 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<>>,
- <<0:100000000,1,3,3,5,5>>,
- <<0:100000000,1,2,4,5,5>>]),
- ?line 0 = Module:longest_common_suffix([<<>>,<<0:100000000,1,3,3,5,5>>,
- <<0:100000000,1,2,4,5,5>>]),
- ?line 0 = Module:longest_common_suffix([<<>>,<<0:100000000,1,3,3,5,5>>,
- <<0:100000000,1,2,4,5,5>>]),
- ?line 2 = Module:longest_common_suffix([<<5,5>>,<<0:100000000,1,3,3,5,5>>,
- <<0:100000000,1,2,4,5,5>>]),
- ?line 2 = Module:longest_common_suffix([<<5,5>>,<<5,5>>,<<4,5,5>>]),
- ?line 2 = Module:longest_common_suffix([<<5,5>>,<<5,5>>,<<5,5>>]),
- ?line 3 = Module:longest_common_suffix([<<4,5,5>>,<<4,5,5>>,<<4,5,5>>]),
- ?line 0 = Module:longest_common_suffix([<<>>]),
- ?line badarg = ?MASK_ERROR(Module:longest_common_suffix([])),
- ?line badarg = ?MASK_ERROR(Module:longest_common_suffix([apa])),
- ?line badarg = ?MASK_ERROR(Module:longest_common_suffix([[<<>>]])),
- ?line badarg = ?MASK_ERROR(Module:longest_common_suffix([[<<0>>,
- <<1:9>>]])),
- ?line 0 = Module:longest_common_prefix([<<>>]),
- ?line badarg = ?MASK_ERROR(Module:longest_common_prefix([])),
- ?line badarg = ?MASK_ERROR(Module:longest_common_prefix([apa])),
- ?line badarg = ?MASK_ERROR(Module:longest_common_prefix([[<<>>]])),
- ?line badarg = ?MASK_ERROR(Module:longest_common_prefix([[<<0>>,
- <<1:9>>]])),
-
- ?line <<1:6,Bin:3/binary,_:2>> = <<1:6,1,2,3,1:2>>,
- ?line <<1,2,3>> = Bin,
- ?line 1 = Module:first(Bin),
- ?line 1 = Module:first(<<1>>),
- ?line 1 = Module:first(<<1,2,3>>),
- ?line badarg = ?MASK_ERROR(Module:first(<<>>)),
- ?line badarg = ?MASK_ERROR(Module:first(apa)),
- ?line 3 = Module:last(Bin),
- ?line 1 = Module:last(<<1>>),
- ?line 3 = Module:last(<<1,2,3>>),
- ?line badarg = ?MASK_ERROR(Module:last(<<>>)),
- ?line badarg = ?MASK_ERROR(Module:last(apa)),
- ?line 1 = Module:at(Bin,0),
- ?line 1 = Module:at(<<1>>,0),
- ?line 1 = Module:at(<<1,2,3>>,0),
- ?line 2 = Module:at(<<1,2,3>>,1),
- ?line 3 = Module:at(<<1,2,3>>,2),
- ?line badarg = ?MASK_ERROR(Module:at(<<1,2,3>>,3)),
- ?line badarg = ?MASK_ERROR(Module:at(<<1,2,3>>,-1)),
- ?line badarg = ?MASK_ERROR(Module:at(<<1,2,3>>,apa)),
- ?line "hejsan" = [ Module:at(<<"hejsan">>,I) || I <- lists:seq(0,5) ],
-
- ?line badarg = ?MASK_ERROR(Module:bin_to_list(<<1,2,3>>,3,-4)),
- ?line [1,2,3] = ?MASK_ERROR(Module:bin_to_list(<<1,2,3>>,3,-3)),
-
- ?line badarg = ?MASK_ERROR(Module:decode_unsigned(<<1,2,1:2>>,big)),
- ?line badarg = ?MASK_ERROR(Module:decode_unsigned(<<1,2,1:2>>,little)),
- ?line badarg = ?MASK_ERROR(Module:decode_unsigned(apa)),
- ?line badarg = ?MASK_ERROR(Module:decode_unsigned(125,little)),
- ?line 0 = ?MASK_ERROR(Module:decode_unsigned(<<>>,little)),
- ?line 0 = ?MASK_ERROR(Module:decode_unsigned(<<>>,big)),
- ?line 0 = ?MASK_ERROR(Module:decode_unsigned(<<0>>,little)),
- ?line 0 = ?MASK_ERROR(Module:decode_unsigned(<<0>>,big)),
- ?line 0 = ?MASK_ERROR(Module:decode_unsigned(make_unaligned(<<0>>),
- little)),
- ?line 0 = ?MASK_ERROR(Module:decode_unsigned(make_unaligned(<<0>>),big)),
- ?line badarg = ?MASK_ERROR(Module:encode_unsigned(apa)),
- ?line badarg = ?MASK_ERROR(Module:encode_unsigned(125.3,little)),
- ?line badarg = ?MASK_ERROR(Module:encode_unsigned({1},little)),
- ?line badarg = ?MASK_ERROR(Module:encode_unsigned([1],little)),
- ?line <<0>> = ?MASK_ERROR(Module:encode_unsigned(0,little)),
- ?line <<0>> = ?MASK_ERROR(Module:encode_unsigned(0,big)),
+ 1 = Module:longest_common_suffix([<<0:100000000,1,2,4,5>>,
+ <<0:100000000,1,2,3,5>>,
+ <<0:100000000,1,3,3,5>>,
+ <<0:100000000,1,2,4,5>>]),
+ 1 = Module:longest_common_suffix([<<1,2,4,5>>,
+ <<0:100000000,1,2,3,5>>,
+ <<0:100000000,1,3,3,5>>,
+ <<0:100000000,1,2,4,5>>]),
+ 1 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<5,5>>,
+ <<0:100000000,1,3,3,5,5>>,
+ <<0:100000000,1,2,4,5>>]),
+ 0 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<5,5>>,
+ <<0:100000000,1,3,3,5,5>>,
+ <<0:100000000,1,2,4>>]),
+ 2 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<5,5>>,
+ <<0:100000000,1,3,3,5,5>>,
+ <<0:100000000,1,2,4,5,5>>]),
+ 1 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<5>>,
+ <<0:100000000,1,3,3,5,5>>,
+ <<0:100000000,1,2,4,5,5>>]),
+ 0 = Module:longest_common_suffix([<<1,2,4,5,5>>,<<>>,
+ <<0:100000000,1,3,3,5,5>>,
+ <<0:100000000,1,2,4,5,5>>]),
+ 0 = Module:longest_common_suffix([<<>>,<<0:100000000,1,3,3,5,5>>,
+ <<0:100000000,1,2,4,5,5>>]),
+ 0 = Module:longest_common_suffix([<<>>,<<0:100000000,1,3,3,5,5>>,
+ <<0:100000000,1,2,4,5,5>>]),
+ 2 = Module:longest_common_suffix([<<5,5>>,<<0:100000000,1,3,3,5,5>>,
+ <<0:100000000,1,2,4,5,5>>]),
+ 2 = Module:longest_common_suffix([<<5,5>>,<<5,5>>,<<4,5,5>>]),
+ 2 = Module:longest_common_suffix([<<5,5>>,<<5,5>>,<<5,5>>]),
+ 3 = Module:longest_common_suffix([<<4,5,5>>,<<4,5,5>>,<<4,5,5>>]),
+ 0 = Module:longest_common_suffix([<<>>]),
+ badarg = ?MASK_ERROR(Module:longest_common_suffix([])),
+ badarg = ?MASK_ERROR(Module:longest_common_suffix([apa])),
+ badarg = ?MASK_ERROR(Module:longest_common_suffix([[<<>>]])),
+ badarg = ?MASK_ERROR(Module:longest_common_suffix([[<<0>>,
+ <<1:9>>]])),
+ 0 = Module:longest_common_prefix([<<>>]),
+ badarg = ?MASK_ERROR(Module:longest_common_prefix([])),
+ badarg = ?MASK_ERROR(Module:longest_common_prefix([apa])),
+ badarg = ?MASK_ERROR(Module:longest_common_prefix([[<<>>]])),
+ badarg = ?MASK_ERROR(Module:longest_common_prefix([[<<0>>,
+ <<1:9>>]])),
+
+ <<1:6,Bin:3/binary,_:2>> = <<1:6,1,2,3,1:2>>,
+ <<1,2,3>> = Bin,
+ 1 = Module:first(Bin),
+ 1 = Module:first(<<1>>),
+ 1 = Module:first(<<1,2,3>>),
+ badarg = ?MASK_ERROR(Module:first(<<>>)),
+ badarg = ?MASK_ERROR(Module:first(apa)),
+ 3 = Module:last(Bin),
+ 1 = Module:last(<<1>>),
+ 3 = Module:last(<<1,2,3>>),
+ badarg = ?MASK_ERROR(Module:last(<<>>)),
+ badarg = ?MASK_ERROR(Module:last(apa)),
+ 1 = Module:at(Bin,0),
+ 1 = Module:at(<<1>>,0),
+ 1 = Module:at(<<1,2,3>>,0),
+ 2 = Module:at(<<1,2,3>>,1),
+ 3 = Module:at(<<1,2,3>>,2),
+ badarg = ?MASK_ERROR(Module:at(<<1,2,3>>,3)),
+ badarg = ?MASK_ERROR(Module:at(<<1,2,3>>,-1)),
+ badarg = ?MASK_ERROR(Module:at(<<1,2,3>>,apa)),
+ "hejsan" = [ Module:at(<<"hejsan">>,I) || I <- lists:seq(0,5) ],
+
+ badarg = ?MASK_ERROR(Module:bin_to_list(<<1,2,3>>,3,-4)),
+ [1,2,3] = ?MASK_ERROR(Module:bin_to_list(<<1,2,3>>,3,-3)),
+
+ badarg = ?MASK_ERROR(Module:decode_unsigned(<<1,2,1:2>>,big)),
+ badarg = ?MASK_ERROR(Module:decode_unsigned(<<1,2,1:2>>,little)),
+ badarg = ?MASK_ERROR(Module:decode_unsigned(apa)),
+ badarg = ?MASK_ERROR(Module:decode_unsigned(125,little)),
+ 0 = ?MASK_ERROR(Module:decode_unsigned(<<>>,little)),
+ 0 = ?MASK_ERROR(Module:decode_unsigned(<<>>,big)),
+ 0 = ?MASK_ERROR(Module:decode_unsigned(<<0>>,little)),
+ 0 = ?MASK_ERROR(Module:decode_unsigned(<<0>>,big)),
+ 0 = ?MASK_ERROR(Module:decode_unsigned(make_unaligned(<<0>>),
+ little)),
+ 0 = ?MASK_ERROR(Module:decode_unsigned(make_unaligned(<<0>>),big)),
+ badarg = ?MASK_ERROR(Module:encode_unsigned(apa)),
+ badarg = ?MASK_ERROR(Module:encode_unsigned(125.3,little)),
+ badarg = ?MASK_ERROR(Module:encode_unsigned({1},little)),
+ badarg = ?MASK_ERROR(Module:encode_unsigned([1],little)),
+ <<0>> = ?MASK_ERROR(Module:encode_unsigned(0,little)),
+ <<0>> = ?MASK_ERROR(Module:encode_unsigned(0,big)),
ok.
-encode_decode(doc) ->
- ["test binary:encode_unsigned/1,2 and binary:decode_unsigned/1,2"];
+%% Test binary:encode_unsigned/1,2 and binary:decode_unsigned/1,2.
encode_decode(Config) when is_list(Config) ->
- ?line random:seed({1271,769940,559934}),
- ?line ok = encode_decode_loop({1,200},1000), % Need to be long enough
- % to create offheap binaries
+ rand:seed(exsplus, {1271,769940,559934}),
+ ok = encode_decode_loop({1,200},1000), % Need to be long enough
+ % to create offheap binaries
ok.
encode_decode_loop(_Range,0) ->
ok;
encode_decode_loop(Range, X) ->
- ?line N = random_number(Range),
- ?line A = binary:encode_unsigned(N),
- ?line B = binary:encode_unsigned(N,big),
- ?line C = binref:encode_unsigned(N),
- ?line D = binref:encode_unsigned(N,big),
- ?line E = binary:encode_unsigned(N,little),
- ?line F = binref:encode_unsigned(N,little),
- ?line G = binary:decode_unsigned(A),
- ?line H = binary:decode_unsigned(A,big),
- ?line I = binref:decode_unsigned(A),
- ?line J = binary:decode_unsigned(E,little),
- ?line K = binref:decode_unsigned(E,little),
- ?line L = binary:decode_unsigned(make_unaligned(A)),
- ?line M = binary:decode_unsigned(make_unaligned(E),little),
- ?line PaddedBig = <<0:48,A/binary>>,
- ?line PaddedLittle = <<E/binary,0:48>>,
- ?line O = binary:decode_unsigned(PaddedBig),
- ?line P = binary:decode_unsigned(make_unaligned(PaddedBig)),
- ?line Q = binary:decode_unsigned(PaddedLittle,little),
- ?line R = binary:decode_unsigned(make_unaligned(PaddedLittle),little),
- ?line S = binref:decode_unsigned(PaddedLittle,little),
- ?line T = binref:decode_unsigned(PaddedBig),
+ N = random_number(Range),
+ A = binary:encode_unsigned(N),
+ B = binary:encode_unsigned(N,big),
+ C = binref:encode_unsigned(N),
+ D = binref:encode_unsigned(N,big),
+ E = binary:encode_unsigned(N,little),
+ F = binref:encode_unsigned(N,little),
+ G = binary:decode_unsigned(A),
+ H = binary:decode_unsigned(A,big),
+ I = binref:decode_unsigned(A),
+ J = binary:decode_unsigned(E,little),
+ K = binref:decode_unsigned(E,little),
+ L = binary:decode_unsigned(make_unaligned(A)),
+ M = binary:decode_unsigned(make_unaligned(E),little),
+ PaddedBig = <<0:48,A/binary>>,
+ PaddedLittle = <<E/binary,0:48>>,
+ O = binary:decode_unsigned(PaddedBig),
+ P = binary:decode_unsigned(make_unaligned(PaddedBig)),
+ Q = binary:decode_unsigned(PaddedLittle,little),
+ R = binary:decode_unsigned(make_unaligned(PaddedLittle),little),
+ S = binref:decode_unsigned(PaddedLittle,little),
+ T = binref:decode_unsigned(PaddedBig),
case (((A =:= B) and (B =:= C) and (C =:= D)) and
- ((E =:= F)) and
- ((N =:= G) and (G =:= H) and (H =:= I) and
- (I =:= J) and (J =:= K) and (K =:= L) and (L =:= M)) and
- ((M =:= O) and (O =:= P) and (P =:= Q) and (Q =:= R) and
- (R =:= S) and (S =:= T)))of
+ ((E =:= F)) and
+ ((N =:= G) and (G =:= H) and (H =:= I) and
+ (I =:= J) and (J =:= K) and (K =:= L) and (L =:= M)) and
+ ((M =:= O) and (O =:= P) and (P =:= Q) and (Q =:= R) and
+ (R =:= S) and (S =:= T)))of
true ->
encode_decode_loop(Range,X-1);
_ ->
@@ -754,90 +705,86 @@ encode_decode_loop(Range, X) ->
exit(mismatch)
end.
-guard(doc) ->
- ["Smoke test of the guard BIFs binary_part/2,3"];
+%% Smoke test of the guard BIFs binary_part/2,3.
guard(Config) when is_list(Config) ->
{comment, "Guard tests are run in emulator test suite"}.
-referenced(doc) ->
- ["Test refernced_byte_size/1 bif."];
+%% Test referenced_byte_size/1 bif.
referenced(Config) when is_list(Config) ->
- ?line badarg = ?MASK_ERROR(binary:referenced_byte_size([])),
- ?line badarg = ?MASK_ERROR(binary:referenced_byte_size(apa)),
- ?line badarg = ?MASK_ERROR(binary:referenced_byte_size({})),
- ?line badarg = ?MASK_ERROR(binary:referenced_byte_size(1)),
- ?line A = <<1,2,3>>,
- ?line B = binary:copy(A,1000),
- ?line 3 = binary:referenced_byte_size(A),
- ?line 3000 = binary:referenced_byte_size(B),
- ?line <<_:8,C:2/binary>> = A,
- ?line 3 = binary:referenced_byte_size(C),
- ?line 2 = binary:referenced_byte_size(binary:copy(C)),
- ?line <<_:7,D:2/binary,_:1>> = A,
- ?line 2 = binary:referenced_byte_size(binary:copy(D)),
- ?line 3 = binary:referenced_byte_size(D),
- ?line <<_:8,E:2/binary,_/binary>> = B,
- ?line 3000 = binary:referenced_byte_size(E),
- ?line 2 = binary:referenced_byte_size(binary:copy(E)),
- ?line <<_:7,F:2/binary,_:1,_/binary>> = B,
- ?line 2 = binary:referenced_byte_size(binary:copy(F)),
- ?line 3000 = binary:referenced_byte_size(F),
+ badarg = ?MASK_ERROR(binary:referenced_byte_size([])),
+ badarg = ?MASK_ERROR(binary:referenced_byte_size(apa)),
+ badarg = ?MASK_ERROR(binary:referenced_byte_size({})),
+ badarg = ?MASK_ERROR(binary:referenced_byte_size(1)),
+ A = <<1,2,3>>,
+ B = binary:copy(A,1000),
+ 3 = binary:referenced_byte_size(A),
+ 3000 = binary:referenced_byte_size(B),
+ <<_:8,C:2/binary>> = A,
+ 3 = binary:referenced_byte_size(C),
+ 2 = binary:referenced_byte_size(binary:copy(C)),
+ <<_:7,D:2/binary,_:1>> = A,
+ 2 = binary:referenced_byte_size(binary:copy(D)),
+ 3 = binary:referenced_byte_size(D),
+ <<_:8,E:2/binary,_/binary>> = B,
+ 3000 = binary:referenced_byte_size(E),
+ 2 = binary:referenced_byte_size(binary:copy(E)),
+ <<_:7,F:2/binary,_:1,_/binary>> = B,
+ 2 = binary:referenced_byte_size(binary:copy(F)),
+ 3000 = binary:referenced_byte_size(F),
ok.
-list_to_bin(doc) ->
- ["Test list_to_bin/1 bif"];
+%% Test list_to_bin/1 BIF.
list_to_bin(Config) when is_list(Config) ->
%% Just some smoke_tests first, then go nuts with random cases
- ?line badarg = ?MASK_ERROR(binary:list_to_bin({})),
- ?line badarg = ?MASK_ERROR(binary:list_to_bin(apa)),
- ?line badarg = ?MASK_ERROR(binary:list_to_bin(<<"apa">>)),
+ badarg = ?MASK_ERROR(binary:list_to_bin({})),
+ badarg = ?MASK_ERROR(binary:list_to_bin(apa)),
+ badarg = ?MASK_ERROR(binary:list_to_bin(<<"apa">>)),
F1 = fun(L) ->
?MASK_ERROR(binref:list_to_bin(L))
end,
F2 = fun(L) ->
?MASK_ERROR(binary:list_to_bin(L))
end,
- ?line random_iolist:run(1000,F1,F2),
+ random_iolist:run(1000,F1,F2),
ok.
-copy(doc) ->
- ["Test copy/1,2 bif's"];
+%% Test copy/1,2 BIFs.
copy(Config) when is_list(Config) ->
- ?line <<1,2,3>> = binary:copy(<<1,2,3>>),
- ?line RS = random_string({1,10000}),
- ?line RS = RS2 = binary:copy(RS),
- ?line false = erts_debug:same(RS,RS2),
- ?line <<>> = ?MASK_ERROR(binary:copy(<<1,2,3>>,0)),
- ?line badarg = ?MASK_ERROR(binary:copy(<<1,2,3:3>>,2)),
- ?line badarg = ?MASK_ERROR(binary:copy([],0)),
- ?line <<>> = ?MASK_ERROR(binary:copy(<<>>,0)),
- ?line badarg = ?MASK_ERROR(binary:copy(<<1,2,3>>,1.0)),
- ?line badarg = ?MASK_ERROR(binary:copy(<<1,2,3>>,
- 16#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)),
- ?line <<>> = binary:copy(<<>>,10000),
- ?line random:seed({1271,769940,559934}),
- ?line ok = random_copy(3000),
- ?line erts_debug:set_internal_state(available_internal_state,true),
- ?line io:format("oldlimit: ~p~n",
- [erts_debug:set_internal_state(binary_loop_limit,10)]),
- ?line Subj = subj(),
- ?line XX = binary:copy(Subj,1000),
- ?line XX = binref:copy(Subj,1000),
- ?line ok = random_copy(1000),
- ?line kill_copy_loop(1000),
- ?line io:format("limit was: ~p~n",
- [erts_debug:set_internal_state(binary_loop_limit,
- default)]),
- ?line erts_debug:set_internal_state(available_internal_state,false),
+ <<1,2,3>> = binary:copy(<<1,2,3>>),
+ RS = random_string({1,10000}),
+ RS = RS2 = binary:copy(RS),
+ false = erts_debug:same(RS,RS2),
+ <<>> = ?MASK_ERROR(binary:copy(<<1,2,3>>,0)),
+ badarg = ?MASK_ERROR(binary:copy(<<1,2,3:3>>,2)),
+ badarg = ?MASK_ERROR(binary:copy([],0)),
+ <<>> = ?MASK_ERROR(binary:copy(<<>>,0)),
+ badarg = ?MASK_ERROR(binary:copy(<<1,2,3>>,1.0)),
+ badarg = ?MASK_ERROR(binary:copy(<<1,2,3>>,
+ 16#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)),
+ <<>> = binary:copy(<<>>,10000),
+ rand:seed(exsplus, {1271,769940,559934}),
+ ok = random_copy(3000),
+ erts_debug:set_internal_state(available_internal_state,true),
+ io:format("oldlimit: ~p~n",
+ [erts_debug:set_internal_state(binary_loop_limit,10)]),
+ Subj = subj(),
+ XX = binary:copy(Subj,1000),
+ XX = binref:copy(Subj,1000),
+ ok = random_copy(1000),
+ kill_copy_loop(1000),
+ io:format("limit was: ~p~n",
+ [erts_debug:set_internal_state(binary_loop_limit,
+ default)]),
+ erts_debug:set_internal_state(available_internal_state,false),
ok.
kill_copy_loop(0) ->
ok;
kill_copy_loop(N) ->
{Pid,Ref} = spawn_monitor(fun() ->
- ok = random_copy(1000)
+ ok = random_copy(1000)
end),
receive
after 10 ->
@@ -855,7 +802,7 @@ random_copy(0) ->
ok;
random_copy(N) ->
Str = random_string({0,N}),
- Num = random:uniform(N div 10+1),
+ Num = rand:uniform(N div 10+1),
A = ?MASK_ERROR(binary:copy(Str,Num)),
B = ?MASK_ERROR(binref:copy(Str,Num)),
C = ?MASK_ERROR(binary:copy(make_unaligned(Str),Num)),
@@ -870,34 +817,33 @@ random_copy(N) ->
exit(mismatch)
end.
-bin_to_list(doc) ->
- ["Test bin_to_list/1,2,3 bif's"];
+%% Test bin_to_list/1,2,3 BIFs.
bin_to_list(Config) when is_list(Config) ->
%% Just some smoke_tests first, then go nuts with random cases
- ?line X = <<1,2,3,4,0:1000000,5>>,
- ?line Y = make_unaligned(X),
- ?line LX = binary:bin_to_list(X),
- ?line LX = binary:bin_to_list(X,0,byte_size(X)),
- ?line LX = binary:bin_to_list(X,byte_size(X),-byte_size(X)),
- ?line LX = binary:bin_to_list(X,{0,byte_size(X)}),
- ?line LX = binary:bin_to_list(X,{byte_size(X),-byte_size(X)}),
- ?line LY = binary:bin_to_list(Y),
- ?line LY = binary:bin_to_list(Y,0,byte_size(Y)),
- ?line LY = binary:bin_to_list(Y,byte_size(Y),-byte_size(Y)),
- ?line LY = binary:bin_to_list(Y,{0,byte_size(Y)}),
- ?line LY = binary:bin_to_list(Y,{byte_size(Y),-byte_size(Y)}),
- ?line 1 = hd(LX),
- ?line 5 = lists:last(LX),
- ?line 1 = hd(LY),
- ?line 5 = lists:last(LY),
- ?line X = list_to_binary(LY),
- ?line Y = list_to_binary(LY),
- ?line X = list_to_binary(LY),
- ?line [5] = lists:nthtail(byte_size(X)-1,LX),
- ?line [0,5] = lists:nthtail(byte_size(X)-2,LX),
- ?line [0,5] = lists:nthtail(byte_size(Y)-2,LY),
- ?line random:seed({1271,769940,559934}),
- ?line ok = random_bin_to_list(5000),
+ X = <<1,2,3,4,0:1000000,5>>,
+ Y = make_unaligned(X),
+ LX = binary:bin_to_list(X),
+ LX = binary:bin_to_list(X,0,byte_size(X)),
+ LX = binary:bin_to_list(X,byte_size(X),-byte_size(X)),
+ LX = binary:bin_to_list(X,{0,byte_size(X)}),
+ LX = binary:bin_to_list(X,{byte_size(X),-byte_size(X)}),
+ LY = binary:bin_to_list(Y),
+ LY = binary:bin_to_list(Y,0,byte_size(Y)),
+ LY = binary:bin_to_list(Y,byte_size(Y),-byte_size(Y)),
+ LY = binary:bin_to_list(Y,{0,byte_size(Y)}),
+ LY = binary:bin_to_list(Y,{byte_size(Y),-byte_size(Y)}),
+ 1 = hd(LX),
+ 5 = lists:last(LX),
+ 1 = hd(LY),
+ 5 = lists:last(LY),
+ X = list_to_binary(LY),
+ Y = list_to_binary(LY),
+ X = list_to_binary(LY),
+ [5] = lists:nthtail(byte_size(X)-1,LX),
+ [0,5] = lists:nthtail(byte_size(X)-2,LX),
+ [0,5] = lists:nthtail(byte_size(Y)-2,LY),
+ rand:seed(exsplus, {1271,769940,559934}),
+ ok = random_bin_to_list(5000),
ok.
random_bin_to_list(0) ->
@@ -908,10 +854,10 @@ random_bin_to_list(N) ->
Parts1 = Parts0 ++ [ {X+Y,-Y} || {X,Y} <- Parts0 ],
[ begin
try
- true = ?MASK_ERROR(binary:bin_to_list(Str,Z)) =:=
- ?MASK_ERROR(binref:bin_to_list(Str,Z)),
- true = ?MASK_ERROR(binary:bin_to_list(Str,Z)) =:=
- ?MASK_ERROR(binary:bin_to_list(make_unaligned(Str),Z))
+ true = ?MASK_ERROR(binary:bin_to_list(Str,Z)) =:=
+ ?MASK_ERROR(binref:bin_to_list(Str,Z)),
+ true = ?MASK_ERROR(binary:bin_to_list(Str,Z)) =:=
+ ?MASK_ERROR(binary:bin_to_list(make_unaligned(Str),Z))
catch
_:_ ->
io:format("Error, Str = <<\"~s\">>.~nZ = ~p.~n",
@@ -921,10 +867,10 @@ random_bin_to_list(N) ->
end || Z <- Parts1 ],
[ begin
try
- true = ?MASK_ERROR(binary:bin_to_list(Str,A,B)) =:=
- ?MASK_ERROR(binref:bin_to_list(Str,A,B)),
- true = ?MASK_ERROR(binary:bin_to_list(Str,A,B)) =:=
- ?MASK_ERROR(binary:bin_to_list(make_unaligned(Str),A,B))
+ true = ?MASK_ERROR(binary:bin_to_list(Str,A,B)) =:=
+ ?MASK_ERROR(binref:bin_to_list(Str,A,B)),
+ true = ?MASK_ERROR(binary:bin_to_list(Str,A,B)) =:=
+ ?MASK_ERROR(binary:bin_to_list(make_unaligned(Str),A,B))
catch
_:_ ->
io:format("Error, Str = <<\"~s\">>.~nA = ~p.~nB = ~p.~n",
@@ -934,37 +880,36 @@ random_bin_to_list(N) ->
end || {A,B} <- Parts1 ],
random_bin_to_list(N-1).
-parts(doc) ->
- ["Test the part/2,3 bif's"];
+%% Test the part/2,3 BIFs.
parts(Config) when is_list(Config) ->
%% Some simple smoke tests to begin with
- ?line Simple = <<1,2,3,4,5,6,7,8>>,
- ?line <<1,2>> = binary:part(Simple,0,2),
- ?line <<1,2>> = binary:part(Simple,{0,2}),
- ?line Simple = binary:part(Simple,0,8),
- ?line Simple = binary:part(Simple,{0,8}),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,0,9)),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{0,9})),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,1,8)),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{1,8})),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{3,-4})),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{3.0,1})),
- ?line badarg = ?MASK_ERROR(
- binary:part(Simple,{16#FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- ,1})),
- ?line <<2,3,4,5,6,7,8>> = binary:part(Simple,{1,7}),
- ?line <<2,3,4,5,6,7,8>> = binary:part(Simple,{8,-7}),
- ?line Simple = binary:part(Simple,{8,-8}),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{1,-8})),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{8,-9})),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{0,-1})),
- ?line <<>> = binary:part(Simple,{8,0}),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{9,0})),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{-1,0})),
- ?line badarg = ?MASK_ERROR(binary:part(Simple,{7,2})),
- ?line <<8>> = binary:part(Simple,{7,1}),
- ?line random:seed({1271,769940,559934}),
- ?line random_parts(5000),
+ Simple = <<1,2,3,4,5,6,7,8>>,
+ <<1,2>> = binary:part(Simple,0,2),
+ <<1,2>> = binary:part(Simple,{0,2}),
+ Simple = binary:part(Simple,0,8),
+ Simple = binary:part(Simple,{0,8}),
+ badarg = ?MASK_ERROR(binary:part(Simple,0,9)),
+ badarg = ?MASK_ERROR(binary:part(Simple,{0,9})),
+ badarg = ?MASK_ERROR(binary:part(Simple,1,8)),
+ badarg = ?MASK_ERROR(binary:part(Simple,{1,8})),
+ badarg = ?MASK_ERROR(binary:part(Simple,{3,-4})),
+ badarg = ?MASK_ERROR(binary:part(Simple,{3.0,1})),
+ badarg = ?MASK_ERROR(
+ binary:part(Simple,{16#FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ ,1})),
+ <<2,3,4,5,6,7,8>> = binary:part(Simple,{1,7}),
+ <<2,3,4,5,6,7,8>> = binary:part(Simple,{8,-7}),
+ Simple = binary:part(Simple,{8,-8}),
+ badarg = ?MASK_ERROR(binary:part(Simple,{1,-8})),
+ badarg = ?MASK_ERROR(binary:part(Simple,{8,-9})),
+ badarg = ?MASK_ERROR(binary:part(Simple,{0,-1})),
+ <<>> = binary:part(Simple,{8,0}),
+ badarg = ?MASK_ERROR(binary:part(Simple,{9,0})),
+ badarg = ?MASK_ERROR(binary:part(Simple,{-1,0})),
+ badarg = ?MASK_ERROR(binary:part(Simple,{7,2})),
+ <<8>> = binary:part(Simple,{7,1}),
+ rand:seed(exsplus, {1271,769940,559934}),
+ random_parts(5000),
ok.
@@ -987,15 +932,15 @@ random_parts(N) ->
random_parts(0,_) ->
[];
random_parts(X,N) ->
- Pos = random:uniform(N),
- Len = random:uniform((Pos * 12) div 10),
+ Pos = rand:uniform(N),
+ Len = rand:uniform((Pos * 12) div 10),
[{Pos,Len} | random_parts(X-1,N)].
-random_ref_comp(doc) ->
- ["Test pseudorandomly generated cases against reference imlementation"];
+%% Test pseudorandomly generated cases against reference implementation.
random_ref_comp(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a lot of time
put(success_counter,0),
- random:seed({1271,769940,559934}),
+ rand:seed(exsplus, {1271,769940,559934}),
Nr = {1,40},
Hr = {30,1000},
I1 = 1500,
@@ -1021,11 +966,12 @@ random_ref_comp(Config) when is_list(Config) ->
erts_debug:set_internal_state(available_internal_state,false),
ok.
-random_ref_sr_comp(doc) ->
- ["Test pseudorandomly generated cases against reference imlementation of split and replace"];
+%% Test pseudorandomly generated cases against reference implementation
+%% of split and replace.
random_ref_sr_comp(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a lot
put(success_counter,0),
- random:seed({1271,769940,559934}),
+ rand:seed(exsplus, {1271,769940,559934}),
Nr = {1,40},
Hr = {30,1000},
I1 = 1500,
@@ -1039,14 +985,14 @@ random_ref_sr_comp(Config) when is_list(Config) ->
io:format("Number of successes: ~p~n",[get(success_counter)]),
ok.
-random_ref_fla_comp(doc) ->
- ["Test pseudorandomly generated cases against reference imlementation of split and replace"];
+%% Test pseudorandomly generated cases against reference implementation
+%% of split and replace.
random_ref_fla_comp(Config) when is_list(Config) ->
- ?line put(success_counter,0),
- ?line random:seed({1271,769940,559934}),
- ?line do_random_first_comp(5000,{1,1000}),
- ?line do_random_last_comp(5000,{1,1000}),
- ?line do_random_at_comp(5000,{1,1000}),
+ put(success_counter,0),
+ rand:seed(exsplus, {1271,769940,559934}),
+ do_random_first_comp(5000,{1,1000}),
+ do_random_last_comp(5000,{1,1000}),
+ do_random_at_comp(5000,{1,1000}),
io:format("Number of successes: ~p~n",[get(success_counter)]),
ok.
@@ -1326,7 +1272,7 @@ do_random_replace_comp(N,NeedleRange,HaystackRange) ->
true = do_replace_comp(Needle,Haystack,Repl,[]),
true = do_replace_comp(Needle,Haystack,Repl,[global]),
true = do_replace_comp(Needle,Haystack,Repl,
- [global,{insert_replaced,Insertat}]),
+ [global,{insert_replaced,Insertat}]),
do_random_replace_comp(N-1,NeedleRange,HaystackRange).
do_random_replace_comp2(0,_,_) ->
ok;
@@ -1340,7 +1286,7 @@ do_random_replace_comp2(N,NeedleRange,HaystackRange) ->
true = do_replace_comp(Needles,Haystack,Repl,[]),
true = do_replace_comp(Needles,Haystack,Repl,[global]),
true = do_replace_comp(Needles,Haystack,Repl,
- [global,{insert_replaced,Insertat}]),
+ [global,{insert_replaced,Insertat}]),
do_random_replace_comp2(N-1,NeedleRange,HaystackRange).
do_replace_comp(N,H,R,Opts) ->
@@ -1376,25 +1322,25 @@ one_random(N) ->
$Ä,$Ö,$0,$1,$2,$3,$4,$5,$6,$7,$8,$9}).
random_number({Min,Max}) -> % Min and Max are *length* of number in
- % decimal positions
- X = random:uniform(Max - Min + 1) + Min - 1,
- list_to_integer([one_random_number(random:uniform(10)) || _ <- lists:seq(1,X)]).
+ % decimal positions
+ X = rand:uniform(Max - Min + 1) + Min - 1,
+ list_to_integer([one_random_number(rand:uniform(10)) || _ <- lists:seq(1,X)]).
random_length({Min,Max}) ->
- random:uniform(Max - Min + 1) + Min - 1.
+ rand:uniform(Max - Min + 1) + Min - 1.
random_string({Min,Max}) ->
- X = random:uniform(Max - Min + 1) + Min - 1,
- list_to_binary([one_random(random:uniform(68)) || _ <- lists:seq(1,X)]).
+ X = rand:uniform(Max - Min + 1) + Min - 1,
+ list_to_binary([one_random(rand:uniform(68)) || _ <- lists:seq(1,X)]).
random_substring({Min,Max},Hay) ->
- X = random:uniform(Max - Min + 1) + Min - 1,
+ X = rand:uniform(Max - Min + 1) + Min - 1,
Y = byte_size(Hay),
Z = if
X > Y -> Y;
true -> X
end,
PMax = Y - Z,
- Pos = random:uniform(PMax + 1) - 1,
+ Pos = rand:uniform(PMax + 1) - 1,
<<_:Pos/binary,Res:Z/binary,_/binary>> = Hay,
Res.
diff --git a/lib/stdlib/test/binref.erl b/lib/stdlib/test/binref.erl
index a52ea98e5a..deb1ede4df 100644
--- a/lib/stdlib/test/binref.erl
+++ b/lib/stdlib/test/binref.erl
@@ -89,7 +89,7 @@ mloop(_Haystack,_Needles,N,M) when N >= M ->
mloop(Haystack,Needles,N,M) ->
case mloop2(Haystack,Needles,N,nomatch) of
nomatch ->
- % Not found
+ %% Not found
<<_:8,NewStack/binary>> = Haystack,
mloop(NewStack,Needles,N+1,M);
{N,Len} ->
@@ -104,7 +104,7 @@ msloop(_Haystack,_Needles,N,M) when N >= M ->
msloop(Haystack,Needles,N,M) ->
case mloop2(Haystack,Needles,N,nomatch) of
nomatch ->
- % Not found
+ %% Not found
<<_:8,NewStack/binary>> = Haystack,
msloop(NewStack,Needles,N+1,M);
{N,Len} ->
@@ -325,7 +325,7 @@ at(Subject,X) ->
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% bin_to_list
+%% bin_to_list
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bin_to_list(Subject) ->
try
@@ -358,7 +358,7 @@ bin_to_list(Subject,A,B) ->
erlang:error(badarg)
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% list_to_bin
+%% list_to_bin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
list_to_bin(List) ->
try
diff --git a/lib/stdlib/test/c_SUITE.erl b/lib/stdlib/test/c_SUITE.erl
index f3a713abfd..4bd32a30f8 100644
--- a/lib/stdlib/test/c_SUITE.erl
+++ b/lib/stdlib/test/c_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
-export([c_1/1, c_2/1, c_3/1, c_4/1, nc_1/1, nc_2/1, nc_3/1, nc_4/1,
ls/1, memory/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-import(c, [c/2, nc/2]).
@@ -50,144 +50,117 @@ end_per_group(_GroupName, Config) ->
%%% Write output to a directory other than current directory:
-c_1(doc) ->
- ["Checks that c:c works also with option 'outdir' [ticket OTP-1209]."];
-c_1(suite) ->
- [];
+%% OTP-1209: Check that c:c/2 works also with option 'outdir'.
c_1(Config) when is_list(Config) ->
- ?line R = filename:join(?config(data_dir, Config), "m.erl"),
- ?line W = ?config(priv_dir, Config),
- ?line Result = c(R,[{outdir,W}]),
- ?line {ok, m} = Result.
-
-c_2(doc) ->
- ["Checks that c:c works also with option 'outdir' [ticket OTP-1209]."];
-c_2(suite) ->
- [];
+ R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
+ W = proplists:get_value(priv_dir, Config),
+ Result = c(R,[{outdir,W}]),
+ {ok, m} = Result.
+
+%% OTP-1209: Check that c:c/2 works also with option 'outdir'.
c_2(Config) when is_list(Config) ->
- ?line R = filename:join(?config(data_dir, Config), "m"),
- ?line W = ?config(priv_dir, Config),
- ?line Result = c(R,[{outdir,W}]),
- ?line {ok, m} = Result.
+ R = filename:join(proplists:get_value(data_dir, Config), "m"),
+ W = proplists:get_value(priv_dir, Config),
+ Result = c(R,[{outdir,W}]),
+ {ok, m} = Result.
%%% Put results in current directory (or rather, change current dir
%%% to the output dir):
-c_3(doc) ->
- ["Checks that c:c works also with option 'outdir' (same as current"
- "directory). [ticket OTP-1209]."];
-c_3(suite) ->
- [];
+%% OTP-1209: Check that c:c/2 works also with option 'outdir'
+%% (same as current directory).
c_3(Config) when is_list(Config) ->
- ?line R = filename:join(?config(data_dir, Config), "m.erl"),
- ?line W = ?config(priv_dir, Config),
- ?line file:set_cwd(W),
- ?line Result = c(R,[{outdir,W}]),
- ?line {ok, m} = Result.
-
-c_4(doc) ->
- ["Checks that c:c works also with option 'outdir' (same as current"
- "directory). [ticket OTP-1209]."];
-c_4(suite) ->
- [];
+ R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
+ W = proplists:get_value(priv_dir, Config),
+ file:set_cwd(W),
+ Result = c(R,[{outdir,W}]),
+ {ok, m} = Result.
+
+%% OTP-1209: Check that c:c/2 works also with option 'outdir'
+%% (same as current directory).
c_4(Config) when is_list(Config) ->
- ?line R = filename:join(?config(data_dir, Config), "m"),
- ?line W = ?config(priv_dir, Config),
- ?line file:set_cwd(W),
- ?line Result = c(R,[{outdir,W}]),
- ?line {ok, m} = Result.
+ R = filename:join(proplists:get_value(data_dir, Config), "m"),
+ W = proplists:get_value(priv_dir, Config),
+ file:set_cwd(W),
+ Result = c(R,[{outdir,W}]),
+ {ok, m} = Result.
%%% Write output to a directory other than current directory:
-nc_1(doc) ->
- ["Checks that c:nc works also with option 'outdir'."];
-nc_1(suite) ->
- [];
+%% Check that c:nc/2 works also with option 'outdir'.
nc_1(Config) when is_list(Config) ->
- ?line R = filename:join(?config(data_dir, Config), "m.erl"),
- ?line W = ?config(priv_dir, Config),
- ?line Result = nc(R,[{outdir,W}]),
- ?line {ok, m} = Result.
-
-nc_2(doc) ->
- ["Checks that c:nc works also with option 'outdir'."];
-nc_2(suite) ->
- [];
+ R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
+ W = proplists:get_value(priv_dir, Config),
+ Result = nc(R,[{outdir,W}]),
+ {ok, m} = Result.
+
+%% Check that c:nc/2 works also with option 'outdir'.
nc_2(Config) when is_list(Config) ->
- ?line R = filename:join(?config(data_dir, Config), "m"),
- ?line W = ?config(priv_dir, Config),
- ?line Result = nc(R,[{outdir,W}]),
- ?line {ok, m} = Result.
+ R = filename:join(proplists:get_value(data_dir, Config), "m"),
+ W = proplists:get_value(priv_dir, Config),
+ Result = nc(R,[{outdir,W}]),
+ {ok, m} = Result.
%%% Put results in current directory (or rather, change current dir
%%% to the output dir):
-nc_3(doc) ->
- ["Checks that c:nc works also with option 'outdir' (same as current"
- "directory)."];
-nc_3(suite) ->
- [];
+%% Check that c:nc/2 works also with option 'outdir'
+%% (same as current directory).
nc_3(Config) when is_list(Config) ->
- ?line R = filename:join(?config(data_dir, Config), "m.erl"),
- ?line W = ?config(priv_dir, Config),
- ?line file:set_cwd(W),
- ?line Result = nc(R,[{outdir,W}]),
- ?line {ok, m} = Result.
-
-nc_4(doc) ->
- ["Checks that c:nc works also with option 'outdir' (same as current"
- "directory)."];
-nc_4(suite) ->
- [];
+ R = filename:join(proplists:get_value(data_dir, Config), "m.erl"),
+ W = proplists:get_value(priv_dir, Config),
+ file:set_cwd(W),
+ Result = nc(R,[{outdir,W}]),
+ {ok, m} = Result.
+
+%% Check that c:nc/2 works also with option 'outdir'
+%% (same as current directory).
nc_4(Config) when is_list(Config) ->
- ?line R = filename:join(?config(data_dir, Config), "m"),
- ?line W = ?config(priv_dir, Config),
- ?line file:set_cwd(W),
- ?line Result = nc(R,[{outdir,W}]),
- ?line {ok, m} = Result.
+ R = filename:join(proplists:get_value(data_dir, Config), "m"),
+ W = proplists:get_value(priv_dir, Config),
+ file:set_cwd(W),
+ Result = nc(R,[{outdir,W}]),
+ {ok, m} = Result.
ls(Config) when is_list(Config) ->
- Directory = ?config(data_dir, Config),
+ Directory = proplists:get_value(data_dir, Config),
ok = c:ls(Directory),
File = filename:join(Directory, "m.erl"),
ok = c:ls(File),
ok = c:ls("no_such_file").
-memory(doc) ->
- ["Checks that c:memory/[0,1] returns consistent results."];
-memory(suite) ->
- [];
+%% Check that c:memory/[0,1] returns consistent results.
memory(Config) when is_list(Config) ->
try
- ?line ML = c:memory(),
- ?line T = mget(total, ML),
- ?line P = mget(processes, ML),
- ?line S = mget(system, ML),
- ?line A = mget(atom, ML),
- ?line AU = mget(atom_used, ML),
- ?line B = mget(binary, ML),
- ?line C = mget(code, ML),
- ?line E = mget(ets, ML),
- ?line T = P + S,
- ?line if S >= A + B + C + E -> ok end,
- ?line if A >= AU -> ok end,
- ?line ok
+ ML = c:memory(),
+ T = mget(total, ML),
+ P = mget(processes, ML),
+ S = mget(system, ML),
+ A = mget(atom, ML),
+ AU = mget(atom_used, ML),
+ B = mget(binary, ML),
+ C = mget(code, ML),
+ E = mget(ets, ML),
+ T = P + S,
+ if S >= A + B + C + E -> ok end,
+ if A >= AU -> ok end,
+ ok
catch
error:notsup ->
- ?line {skipped,
- "erlang:memory/[0,1] and c:memory/[0,1] not supported"}
+ {skipped,
+ "erlang:memory/[0,1] and c:memory/[0,1] not supported"}
end.
-% Help function for c_SUITE:memory/1
+%% Help function for c_SUITE:memory/1
mget(K, L) ->
- ?line {value,{K,V}} = lists:keysearch(K, 1, L),
- ?line test_v(c:memory(K)), % Check that c:memory/1 also accept this
- % argument and returns an integer (usally
- % *not* the same as V).
- ?line test_v(V).
+ {value,{K,V}} = lists:keysearch(K, 1, L),
+ test_v(c:memory(K)), % Check that c:memory/1 also accept this
+ % argument and returns an integer (usally
+ % *not* the same as V).
+ test_v(V).
-% Help function for c_SUITE:memory/1
+%% Help function for c_SUITE:memory/1
test_v(V) when is_integer(V) ->
- ?line V.
+ V.
diff --git a/lib/stdlib/test/c_SUITE_data/m.erl b/lib/stdlib/test/c_SUITE_data/m.erl
index df1d5f4c01..5f758053e5 100644
--- a/lib/stdlib/test/c_SUITE_data/m.erl
+++ b/lib/stdlib/test/c_SUITE_data/m.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/calendar_SUITE.erl b/lib/stdlib/test/calendar_SUITE.erl
index 498b1f459c..20053dfe54 100644
--- a/lib/stdlib/test/calendar_SUITE.erl
+++ b/lib/stdlib/test/calendar_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(calendar_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
@@ -57,69 +57,48 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-gregorian_days(doc) ->
- "Tests that date_to_gregorian_days and gregorian_days_to_date "
- "are each others inverses from ?START_YEAR-01-01 up to ?END_YEAR-01-01. "
- "At the same time valid_date is tested.";
-gregorian_days(suite) ->
- [];
+%% Tests that date_to_gregorian_days and gregorian_days_to_date
+%% are each others inverses from ?START_YEAR-01-01 up to ?END_YEAR-01-01.
+%% At the same time valid_date is tested.
gregorian_days(Config) when is_list(Config) ->
- ?line Days = calendar:date_to_gregorian_days({?START_YEAR, 1, 1}),
- ?line MaxDays = calendar:date_to_gregorian_days({?END_YEAR, 1, 1}),
- ?line check_gregorian_days(Days, MaxDays).
-
-gregorian_seconds(doc) ->
- "Tests that datetime_to_gregorian_seconds and "
- "gregorian_seconds_to_date are each others inverses for a sampled "
- "number of seconds from ?START_YEAR-01-01 up to ?END_YEAR-01-01: We check "
- "every 2 days + 1 second.";
-gregorian_seconds(suite) ->
- [];
+ Days = calendar:date_to_gregorian_days({?START_YEAR, 1, 1}),
+ MaxDays = calendar:date_to_gregorian_days({?END_YEAR, 1, 1}),
+ check_gregorian_days(Days, MaxDays).
+
+%% Tests that datetime_to_gregorian_seconds and
+%% gregorian_seconds_to_date are each others inverses for a sampled
+%% number of seconds from ?START_YEAR-01-01 up to ?END_YEAR-01-01: We check
+%% every 2 days + 1 second.
gregorian_seconds(Config) when is_list(Config) ->
- ?line Secs = calendar:datetime_to_gregorian_seconds({{?START_YEAR, 1, 1},
- {0, 0, 0}}),
- ?line MaxSecs = calendar:datetime_to_gregorian_seconds({{?END_YEAR, 1, 1},
- {0, 0, 0}}),
- ?line check_gregorian_seconds(Secs, MaxSecs).
-
-day_of_the_week(doc) ->
- "Tests that day_of_the_week reports correctly the day of the week from "
- "year ?START_YEAR up to ?END_YEAR.";
-day_of_the_week(suite) ->
- [];
+ Secs = calendar:datetime_to_gregorian_seconds({{?START_YEAR, 1, 1},
+ {0, 0, 0}}),
+ MaxSecs = calendar:datetime_to_gregorian_seconds({{?END_YEAR, 1, 1},
+ {0, 0, 0}}),
+ check_gregorian_seconds(Secs, MaxSecs).
+
+%% Tests that day_of_the_week reports correctly the day of the week from
+%% year ?START_YEAR up to ?END_YEAR.
day_of_the_week(Config) when is_list(Config) ->
- ?line Days = calendar:date_to_gregorian_days({?START_YEAR, 1, 1}),
- ?line MaxDays = calendar:date_to_gregorian_days({?END_YEAR, 1, 1}),
- ?line DayNumber = calendar:day_of_the_week({?START_YEAR, 1, 1}),
- ?line check_day_of_the_week(Days, MaxDays, DayNumber).
+ Days = calendar:date_to_gregorian_days({?START_YEAR, 1, 1}),
+ MaxDays = calendar:date_to_gregorian_days({?END_YEAR, 1, 1}),
+ DayNumber = calendar:day_of_the_week({?START_YEAR, 1, 1}),
+ check_day_of_the_week(Days, MaxDays, DayNumber).
-day_of_the_week_calibrate(doc) ->
- "Tests that day_of_the_week for 1997-11-11 is Tuesday (2)";
-day_of_the_week_calibrate(suite) ->
- [];
+%% Tests that day_of_the_week for 1997-11-11 is Tuesday (2).
day_of_the_week_calibrate(Config) when is_list(Config) ->
- ?line 2 = calendar:day_of_the_week({1997, 11, 11}).
+ 2 = calendar:day_of_the_week({1997, 11, 11}).
-leap_years(doc) ->
- "Tests that is_leap_year reports correctly the leap years from "
- "year ?START_YEAR up to ?END_YEAR.";
-leap_years(suite) ->
- [];
+%% Tests that is_leap_year reports correctly the leap years from
+%% year ?START_YEAR up to ?END_YEAR.
leap_years(Config) when is_list(Config) ->
- ?line check_leap_years(?START_YEAR, ?END_YEAR).
+ check_leap_years(?START_YEAR, ?END_YEAR).
-last_day_of_the_month(doc) ->
- "Tests that last_day_of_the_month reports correctly from "
- "year ?START_YEAR up to ?END_YEAR.";
-last_day_of_the_month(suite) ->
- [];
+%% Tests that last_day_of_the_month reports correctly from
+%% year ?START_YEAR up to ?END_YEAR.
last_day_of_the_month(Config) when is_list(Config) ->
- ?line check_last_day_of_the_month({?START_YEAR, 1}, {?END_YEAR, 1}).
+ check_last_day_of_the_month({?START_YEAR, 1}, {?END_YEAR, 1}).
-local_time_to_universal_time_dst(doc) ->
- "Tests local_time_to_universal_time_dst for MET";
-local_time_to_universal_time_dst(suite) ->
- [];
+%% Tests local_time_to_universal_time_dst for MET.
local_time_to_universal_time_dst(Config) when is_list(Config) ->
case os:type() of
{unix,_} ->
@@ -134,35 +113,35 @@ local_time_to_universal_time_dst(Config) when is_list(Config) ->
end.
local_time_to_universal_time_dst_x(Config) when is_list(Config) ->
%% Assumes MET (UTC+1 / UTC+2(dst)
- ?line LtW = {{2003,01,15},{14,00,00}}, % Winter
- ?line UtW = {{2003,01,15},{13,00,00}}, %
- ?line UtWd = {{2003,01,15},{12,00,00}}, % dst
- ?line LtS = {{2003,07,15},{14,00,00}}, % Summer
- ?line UtS = {{2003,07,15},{13,00,00}}, %
- ?line UtSd = {{2003,07,15},{12,00,00}}, % dst
- ?line LtWS = {{2003,03,30},{02,30,00}}, % Winter->Summer
- ?line UtWS = {{2003,03,30},{01,30,00}}, %
- ?line UtWSd = {{2003,03,30},{00,30,00}}, % dst
- ?line LtSW = {{2003,10,26},{02,30,00}}, % Summer->Winter
- ?line UtSW = {{2003,10,26},{01,30,00}}, %
- ?line UtSWd = {{2003,10,26},{00,30,00}}, % dst
+ LtW = {{2003,01,15},{14,00,00}}, % Winter
+ UtW = {{2003,01,15},{13,00,00}}, %
+ UtWd = {{2003,01,15},{12,00,00}}, % dst
+ LtS = {{2003,07,15},{14,00,00}}, % Summer
+ UtS = {{2003,07,15},{13,00,00}}, %
+ UtSd = {{2003,07,15},{12,00,00}}, % dst
+ LtWS = {{2003,03,30},{02,30,00}}, % Winter->Summer
+ UtWS = {{2003,03,30},{01,30,00}}, %
+ UtWSd = {{2003,03,30},{00,30,00}}, % dst
+ LtSW = {{2003,10,26},{02,30,00}}, % Summer->Winter
+ UtSW = {{2003,10,26},{01,30,00}}, %
+ UtSWd = {{2003,10,26},{00,30,00}}, % dst
%%
- ?line UtW = calendar:local_time_to_universal_time(LtW, false),
- ?line UtWd = calendar:local_time_to_universal_time(LtW, true),
- ?line UtW = calendar:local_time_to_universal_time(LtW, undefined),
+ UtW = calendar:local_time_to_universal_time(LtW, false),
+ UtWd = calendar:local_time_to_universal_time(LtW, true),
+ UtW = calendar:local_time_to_universal_time(LtW, undefined),
%%
- ?line UtS = calendar:local_time_to_universal_time(LtS, false),
- ?line UtSd = calendar:local_time_to_universal_time(LtS, true),
- ?line UtSd = calendar:local_time_to_universal_time(LtS, undefined),
+ UtS = calendar:local_time_to_universal_time(LtS, false),
+ UtSd = calendar:local_time_to_universal_time(LtS, true),
+ UtSd = calendar:local_time_to_universal_time(LtS, undefined),
%%
case calendar:local_time_to_universal_time(LtWS, false) of
UtWS ->
- ?line UtWSd = calendar:local_time_to_universal_time(LtWS, true),
- ?line [] = calendar:local_time_to_universal_time_dst(LtWS),
+ UtWSd = calendar:local_time_to_universal_time(LtWS, true),
+ [] = calendar:local_time_to_universal_time_dst(LtWS),
%%
- ?line UtSW = calendar:local_time_to_universal_time(LtSW, false),
- ?line UtSWd = calendar:local_time_to_universal_time(LtSW, true),
- ?line [UtSWd, UtSW] = calendar:local_time_to_universal_time_dst(LtSW),
+ UtSW = calendar:local_time_to_universal_time(LtSW, false),
+ UtSWd = calendar:local_time_to_universal_time(LtSW, true),
+ [UtSWd, UtSW] = calendar:local_time_to_universal_time_dst(LtSW),
ok;
{{1969,12,31},{23,59,59}} ->
%% It seems that Apple has no intention of fixing this bug in
@@ -171,15 +150,12 @@ local_time_to_universal_time_dst_x(Config) when is_list(Config) ->
{comment,"Bug in mktime() in this OS"}
end.
-iso_week_number(doc) ->
- "Test the iso week number calculation for all three possibilities."
- " When the date falls on the last week of the previous year,"
- " when the date falls on a week within the given year and finally,"
- " when the date falls on the first week of the next year.";
-iso_week_number(suite) ->
- [];
+%% Test the iso week number calculation for all three possibilities:
+%% When the date falls on the last week of the previous year,
+%% when the date falls on a week within the given year and finally,
+%% when the date falls on the first week of the next year.
iso_week_number(Config) when is_list(Config) ->
- ?line check_iso_week_number().
+ check_iso_week_number().
%%
%% LOCAL FUNCTIONS
@@ -188,10 +164,10 @@ iso_week_number(Config) when is_list(Config) ->
%% check_gregorian_days
%%
check_gregorian_days(Days, MaxDays) when Days < MaxDays ->
- ?line Date = calendar:gregorian_days_to_date(Days),
- ?line true = calendar:valid_date(Date),
- ?line Days = calendar:date_to_gregorian_days(Date),
- ?line check_gregorian_days(Days + 1, MaxDays);
+ Date = calendar:gregorian_days_to_date(Days),
+ true = calendar:valid_date(Date),
+ Days = calendar:date_to_gregorian_days(Date),
+ check_gregorian_days(Days + 1, MaxDays);
check_gregorian_days(_Days, _MaxDays) ->
ok.
@@ -200,9 +176,9 @@ check_gregorian_days(_Days, _MaxDays) ->
%% We increment with something prime (172801 = 2 days + 1 second).
%%
check_gregorian_seconds(Secs, MaxSecs) when Secs < MaxSecs ->
- ?line DateTime = calendar:gregorian_seconds_to_datetime(Secs),
- ?line Secs = calendar:datetime_to_gregorian_seconds(DateTime),
- ?line check_gregorian_seconds(Secs + 172801, MaxSecs);
+ DateTime = calendar:gregorian_seconds_to_datetime(Secs),
+ Secs = calendar:datetime_to_gregorian_seconds(DateTime),
+ check_gregorian_seconds(Secs + 172801, MaxSecs);
check_gregorian_seconds(_Secs, _MaxSecs) ->
ok.
@@ -210,10 +186,10 @@ check_gregorian_seconds(_Secs, _MaxSecs) ->
%% check_day_of_the_week
%%
check_day_of_the_week(Days, MaxDays, DayNumber) when Days < MaxDays ->
- ?line Date = calendar:gregorian_days_to_date(Days),
- ?line DayNumber = calendar:day_of_the_week(Date),
- ?line check_day_of_the_week(Days + 1, MaxDays,
- ((DayNumber rem 7) + 1));
+ Date = calendar:gregorian_days_to_date(Days),
+ DayNumber = calendar:day_of_the_week(Date),
+ check_day_of_the_week(Days + 1, MaxDays,
+ ((DayNumber rem 7) + 1));
check_day_of_the_week(_Days, _MaxDays, _DayNumber) ->
ok.
@@ -222,59 +198,56 @@ check_day_of_the_week(_Days, _MaxDays, _DayNumber) ->
%% SYr must be larger than 1800, and EYr must be less than ?END_YEAR.
%%
check_leap_years(SYr, EYr) when SYr < EYr ->
- ?line Rem = SYr rem 4,
+ Rem = SYr rem 4,
case Rem of
0 ->
case SYr of
1900 ->
- ?line false = calendar:is_leap_year(SYr);
+ false = calendar:is_leap_year(SYr);
2000 ->
- ?line true = calendar:is_leap_year(SYr);
+ true = calendar:is_leap_year(SYr);
_ ->
- ?line true = calendar:is_leap_year(SYr)
+ true = calendar:is_leap_year(SYr)
end;
_ ->
- ?line false = calendar:is_leap_year(SYr)
+ false = calendar:is_leap_year(SYr)
end,
check_leap_years(SYr + 1, EYr);
check_leap_years(_SYr, _EYr) ->
ok.
check_last_day_of_the_month({SYr, SMon}, {EYr, EMon}) when SYr < EYr ->
- ?line LastDay = calendar:last_day_of_the_month(SYr, SMon),
- ?line LastDay = case SMon of
- 1 -> 31;
- 2 ->
- case calendar:is_leap_year(SYr) of
- true -> 29;
- false -> 28
- end;
- 3 -> 31;
- 4 -> 30;
- 5 -> 31;
- 6 -> 30;
- 7 -> 31;
- 8 -> 31;
- 9 -> 30;
- 10 -> 31;
- 11 -> 30;
- 12 -> 31
- end,
- ?line NYr = case SMon of
- 12 -> SYr + 1;
- _ -> SYr
- end,
- ?line check_last_day_of_the_month({NYr, (SMon rem 12) + 1},
- {EYr, EMon});
+ LastDay = calendar:last_day_of_the_month(SYr, SMon),
+ LastDay = case SMon of
+ 1 -> 31;
+ 2 ->
+ case calendar:is_leap_year(SYr) of
+ true -> 29;
+ false -> 28
+ end;
+ 3 -> 31;
+ 4 -> 30;
+ 5 -> 31;
+ 6 -> 30;
+ 7 -> 31;
+ 8 -> 31;
+ 9 -> 30;
+ 10 -> 31;
+ 11 -> 30;
+ 12 -> 31
+ end,
+ NYr = case SMon of
+ 12 -> SYr + 1;
+ _ -> SYr
+ end,
+ check_last_day_of_the_month({NYr, (SMon rem 12) + 1},
+ {EYr, EMon});
check_last_day_of_the_month(_, _) ->
ok.
%% check_iso_week_number
%%
check_iso_week_number() ->
- ?line {2004, 53} = calendar:iso_week_number({2005, 1, 1}),
- ?line {2007, 1} = calendar:iso_week_number({2007, 1, 1}),
- ?line {2009, 1} = calendar:iso_week_number({2008, 12, 29}).
-
-
-
+ {2004, 53} = calendar:iso_week_number({2005, 1, 1}),
+ {2007, 1} = calendar:iso_week_number({2007, 1, 1}),
+ {2009, 1} = calendar:iso_week_number({2008, 12, 29}).
diff --git a/lib/stdlib/test/dets_SUITE.erl b/lib/stdlib/test/dets_SUITE.erl
index 35e587afcc..8948f496c4 100644
--- a/lib/stdlib/test/dets_SUITE.erl
+++ b/lib/stdlib/test/dets_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(dets_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -28,10 +28,10 @@
-define(privdir(_), "./dets_SUITE_priv").
-define(datadir(_), "./dets_SUITE_data").
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
--define(privdir(Conf), ?config(priv_dir, Conf)).
--define(datadir(Conf), ?config(data_dir, Conf)).
+-define(privdir(Conf), proplists:get_value(priv_dir, Conf)).
+-define(datadir(Conf), proplists:get_value(data_dir, Conf)).
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -53,7 +53,8 @@
simultaneous_open/1, insert_new/1, repair_continuation/1,
otp_5487/1, otp_6206/1, otp_6359/1, otp_4738/1, otp_7146/1,
otp_8070/1, otp_8856/1, otp_8898/1, otp_8899/1, otp_8903/1,
- otp_8923/1, otp_9282/1, otp_11245/1, otp_11709/1]).
+ otp_8923/1, otp_9282/1, otp_11245/1, otp_11709/1, otp_13229/1,
+ otp_13260/1]).
-export([dets_dirty_loop/0]).
@@ -82,15 +83,14 @@
-define(CLOSED_PROPERLY,1).
init_per_testcase(_Case, Config) ->
- Dog=?t:timetrap(?t:minutes(15)),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Case, _Config) ->
- Dog=?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,15}}].
all() ->
[
@@ -110,7 +110,8 @@ all() ->
many_clients, otp_4906, otp_5402, simultaneous_open,
insert_new, repair_continuation, otp_5487, otp_6206,
otp_6359, otp_4738, otp_7146, otp_8070, otp_8856, otp_8898,
- otp_8899, otp_8903, otp_8923, otp_9282, otp_11245, otp_11709
+ otp_8899, otp_8903, otp_8923, otp_9282, otp_11245, otp_11709,
+ otp_13229, otp_13260
].
groups() ->
@@ -128,10 +129,7 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-newly_started(doc) ->
- ["OTP-3621"];
-newly_started(suite) ->
- [];
+%% OTP-3621
newly_started(Config) when is_list(Config) ->
true = is_alive(),
{ok, Node} = test_server:start_node(slave1, slave, []),
@@ -139,17 +137,11 @@ newly_started(Config) when is_list(Config) ->
test_server:stop_node(Node),
ok.
-basic_v8(doc) ->
- ["Basic test case."];
-basic_v8(suite) ->
- [];
+%% Basic test case.
basic_v8(Config) when is_list(Config) ->
basic(Config, 8).
-basic_v9(doc) ->
- ["Basic test case."];
-basic_v9(suite) ->
- [];
+%% Basic test case.
basic_v9(Config) when is_list(Config) ->
basic(Config, 9).
@@ -182,17 +174,9 @@ basic(Config, Version) ->
ok.
-open_v8(doc) ->
- [];
-open_v8(suite) ->
- [];
open_v8(Config) when is_list(Config) ->
open(Config, 8).
-open_v9(doc) ->
- [];
-open_v9(suite) ->
- [];
open_v9(Config) when is_list(Config) ->
open(Config, 9).
@@ -281,17 +265,11 @@ bad(_Tab, _Item) ->
?format("Can't find item ~p in ~p ~n", [_Item, _Tab]),
exit(badtab).
-sets_v8(doc) ->
- ["Performs traversal and match testing on set type dets tables."];
-sets_v8(suite) ->
- [];
+%% Perform traversal and match testing on set type dets tables.
sets_v8(Config) when is_list(Config) ->
sets(Config, 8).
-sets_v9(doc) ->
- ["Performs traversal and match testing on set type dets tables."];
-sets_v9(suite) ->
- [];
+%% Perform traversal and match testing on set type dets tables.
sets_v9(Config) when is_list(Config) ->
sets(Config, 9).
@@ -323,17 +301,11 @@ sets(Config, Version) ->
check_pps(P0),
ok.
-bags_v8(doc) ->
- ["Performs traversal and match testing on bag type dets tables."];
-bags_v8(suite) ->
- [];
+%% Perform traversal and match testing on bag type dets tables.
bags_v8(Config) when is_list(Config) ->
bags(Config, 8).
-bags_v9(doc) ->
- ["Performs traversal and match testing on bag type dets tables."];
-bags_v9(suite) ->
- [];
+%% Perform traversal and match testing on bag type dets tables.
bags_v9(Config) when is_list(Config) ->
bags(Config, 9).
@@ -363,17 +335,11 @@ bags(Config, Version) ->
ok.
-duplicate_bags_v8(doc) ->
- ["Performs traversal and match testing on duplicate_bag type dets tables."];
-duplicate_bags_v8(suite) ->
- [];
+%% Perform traversal and match testing on duplicate_bag type dets tables.
duplicate_bags_v8(Config) when is_list(Config) ->
duplicate_bags(Config, 8).
-duplicate_bags_v9(doc) ->
- ["Performs traversal and match testing on duplicate_bag type dets tables."];
-duplicate_bags_v9(suite) ->
- [];
+%% Perform traversal and match testing on duplicate_bag type dets tables.
duplicate_bags_v9(Config) when is_list(Config) ->
duplicate_bags(Config, 9).
@@ -403,17 +369,9 @@ duplicate_bags(Config, Version) when is_list(Config) ->
ok.
-access_v8(doc) ->
- [];
-access_v8(suite) ->
- [];
access_v8(Config) when is_list(Config) ->
access(Config, 8).
-access_v9(doc) ->
- [];
-access_v9(suite) ->
- [];
access_v9(Config) when is_list(Config) ->
access(Config, 9).
@@ -446,10 +404,7 @@ access(Config, Version) ->
ok.
-dirty_mark(doc) ->
- ["Test that the table is not marked dirty if not written"];
-dirty_mark(suite) ->
- [];
+%% Test that the table is not marked dirty if not written.
dirty_mark(Config) when is_list(Config) ->
true = is_alive(),
Tab = dets_dirty_mark_test,
@@ -498,10 +453,7 @@ dirty_mark(Config) when is_list(Config) ->
check_pps(P0),
ok.
-dirty_mark2(doc) ->
- ["Test that the table is flushed when auto_save is in effect"];
-dirty_mark2(suite) ->
- [];
+%% Test that the table is flushed when auto_save is in effect.
dirty_mark2(Config) when is_list(Config) ->
true = is_alive(),
Tab = dets_dirty_mark2_test,
@@ -569,17 +521,11 @@ dets_dirty_loop() ->
end.
-bag_next_v8(suite) ->
- [];
-bag_next_v8(doc) ->
- ["Check that bags and next work as expected."];
+%% Check that bags and next work as expected.
bag_next_v8(Config) when is_list(Config) ->
bag_next(Config, 8).
-bag_next_v9(suite) ->
- [];
-bag_next_v9(doc) ->
- ["Check that bags and next work as expected."];
+%% Check that bags and next work as expected.
bag_next_v9(Config) when is_list(Config) ->
Tab = dets_bag_next_test,
FName = filename(Tab, Config),
@@ -632,17 +578,9 @@ bag_next(Config, Version) ->
check_pps(P0),
ok.
-oldbugs_v8(doc) ->
- [];
-oldbugs_v8(suite) ->
- [];
oldbugs_v8(Config) when is_list(Config) ->
oldbugs(Config, 8).
-oldbugs_v9(doc) ->
- [];
-oldbugs_v9(suite) ->
- [];
oldbugs_v9(Config) when is_list(Config) ->
oldbugs(Config, 9).
@@ -660,9 +598,7 @@ oldbugs(Config, Version) ->
check_pps(P0),
ok.
-unsafe_assumptions(suite) -> [];
-unsafe_assumptions(doc) ->
- "Tests that shrinking an object and then expanding it works.";
+%% Test that shrinking an object and then expanding it works.
unsafe_assumptions(Config) when is_list(Config) ->
FName = filename(dets_suite_unsafe_assumptions_test, Config),
file:delete(FName),
@@ -691,17 +627,13 @@ unsafe_assumptions(Config) when is_list(Config) ->
check_pps(P0),
ok.
-truncated_segment_array_v8(suite) -> [];
-truncated_segment_array_v8(doc) ->
- "Tests that a file where the segment array has been truncated "
- "is possible to repair.";
+%% Test that a file where the segment array has been truncated
+%% is possible to repair.
truncated_segment_array_v8(Config) when is_list(Config) ->
trunc_seg_array(Config, 8).
-truncated_segment_array_v9(suite) -> [];
-truncated_segment_array_v9(doc) ->
- "Tests that a file where the segment array has been truncated "
- "is possible to repair.";
+%% Test that a file where the segment array has been truncated
+%% is possible to repair.
truncated_segment_array_v9(Config) when is_list(Config) ->
trunc_seg_array(Config, 9).
@@ -727,17 +659,11 @@ trunc_seg_array(Config, V) ->
check_pps(P0),
ok.
-open_file_v8(doc) ->
- ["open_file/1 test case."];
-open_file_v8(suite) ->
- [];
+%% Test open_file/1.
open_file_v8(Config) when is_list(Config) ->
open_1(Config, 8).
-open_file_v9(doc) ->
- ["open_file/1 test case."];
-open_file_v9(suite) ->
- [];
+%% Test open_file/1.
open_file_v9(Config) when is_list(Config) ->
T = open_v9,
Fname = filename(T, Config),
@@ -795,17 +721,11 @@ open_1(Config, V) ->
check_pps(P0),
ok.
-init_table_v8(doc) ->
- ["initialize_table/2 and from_ets/2 test case."];
-init_table_v8(suite) ->
- [];
+%% Test initialize_table/2 and from_ets/2.
init_table_v8(Config) when is_list(Config) ->
init_table(Config, 8).
-init_table_v9(doc) ->
- ["initialize_table/2 and from_ets/2 test case."];
-init_table_v9(suite) ->
- [];
+%% Test initialize_table/2 and from_ets/2.
init_table_v9(Config) when is_list(Config) ->
%% Objects are returned in "time order".
T = init_table_v9,
@@ -1268,17 +1188,11 @@ items(I, N, C, L) when I =:= N; C =:= 0 ->
items(I, N, C, L) ->
items(I+1, N, C-1, [{I, item(I)} | L]).
-repair_v8(doc) ->
- ["open_file and repair."];
-repair_v8(suite) ->
- [];
+%% Test open_file and repair.
repair_v8(Config) when is_list(Config) ->
repair(Config, 8).
-repair_v9(doc) ->
- ["open_file and repair."];
-repair_v9(suite) ->
- [];
+%% Test open_file and repair.
repair_v9(Config) when is_list(Config) ->
%% Convert from format 9 to format 8.
T = convert_98,
@@ -1615,11 +1529,9 @@ repair(Config, V) ->
check_pps(P0),
ok.
-hash_v8b_v8c(doc) ->
- ["Test the use of different hashing algorithms in v8b and v8c of the "
- "Dets file format."];
-hash_v8b_v8c(suite) ->
- [];
+
+%% Test the use of different hashing algorithms in v8b and v8c of the
+%% Dets file format.
hash_v8b_v8c(Config) when is_list(Config) ->
Source =
filename:join(?datadir(Config), "dets_test_v8b.dets"),
@@ -1694,10 +1606,7 @@ hash_v8b_v8c(Config) when is_list(Config) ->
check_pps(P0),
{comment, Mess}.
-phash(doc) ->
- ["Test version 9(b) with erlang:phash/2 as hash function."];
-phash(suite) ->
- [];
+%% Test version 9(b) with erlang:phash/2 as hash function.
phash(Config) when is_list(Config) ->
T = phash,
Phash_v9bS = filename:join(?datadir(Config), "version_9b_phash.dat"),
@@ -1755,17 +1664,11 @@ phash(Config) when is_list(Config) ->
file:delete(Fname),
ok.
-fold_v8(doc) ->
- ["foldl, foldr, to_ets"];
-fold_v8(suite) ->
- [];
+%% Test foldl, foldr, to_ets.
fold_v8(Config) when is_list(Config) ->
fold(Config, 8).
-fold_v9(doc) ->
- ["foldl, foldr, to_ets"];
-fold_v9(suite) ->
- [];
+%% Test foldl, foldr, to_ets.
fold_v9(Config) when is_list(Config) ->
fold(Config, 9).
@@ -1834,17 +1737,11 @@ fold(Config, Version) ->
check_pps(P0),
ok.
-fixtable_v8(doc) ->
- ["Add objects to a fixed table."];
-fixtable_v8(suite) ->
- [];
+%% Add objects to a fixed table.
fixtable_v8(Config) when is_list(Config) ->
fixtable(Config, 8).
-fixtable_v9(doc) ->
- ["Add objects to a fixed table."];
-fixtable_v9(suite) ->
- [];
+%% Add objects to a fixed table.
fixtable_v9(Config) when is_list(Config) ->
fixtable(Config, 9).
@@ -1934,17 +1831,11 @@ fixtable(Config, Version) when is_list(Config) ->
check_pps(P0),
ok.
-match_v8(doc) ->
- ["Matching objects of a fixed table."];
-match_v8(suite) ->
- [];
+%% Matching objects of a fixed table.
match_v8(Config) when is_list(Config) ->
match(Config, 8).
-match_v9(doc) ->
- ["Matching objects of a fixed table."];
-match_v9(suite) ->
- [];
+%% Matching objects of a fixed table.
match_v9(Config) when is_list(Config) ->
match(Config, 9).
@@ -2116,17 +2007,11 @@ match(Config, Version) ->
check_pps(P0),
ok.
-select_v8(doc) ->
- ["Selecting objects of a fixed table."];
-select_v8(suite) ->
- [];
+%% Selecting objects of a fixed table.
select_v8(Config) when is_list(Config) ->
select(Config, 8).
-select_v9(doc) ->
- ["Selecting objects of a fixed table."];
-select_v9(suite) ->
- [];
+%% Selecting objects of a fixed table.
select_v9(Config) when is_list(Config) ->
select(Config, 9).
@@ -2230,10 +2115,7 @@ select(Config, Version) ->
check_pps(P0),
ok.
-update_counter(doc) ->
- ["Test update_counter/1."];
-update_counter(suite) ->
- [];
+%% Test update_counter/1.
update_counter(Config) when is_list(Config) ->
T = update_counter,
Fname = filename(select, Config),
@@ -2267,10 +2149,7 @@ update_counter(Config) when is_list(Config) ->
ok.
-badarg(doc) ->
- ["Call some functions with bad arguments."];
-badarg(suite) ->
- [];
+%% Call some functions with bad arguments.
badarg(Config) when is_list(Config) ->
T = badarg,
Fname = filename(select, Config),
@@ -2279,7 +2158,6 @@ badarg(Config) when is_list(Config) ->
Args = [{file,Fname},{keypos,3}],
{ok, _} = dets:open_file(T, [{type,set} | Args]),
- % dets:verbose(),
%% badargs are tested in match, select and fixtable too.
@@ -2402,17 +2280,11 @@ badarg(Config) when is_list(Config) ->
check_pps(P0),
ok.
-cache_sets_v8(doc) ->
- ["Test the write cache for sets."];
-cache_sets_v8(suite) ->
- [];
+%% Test the write cache for sets.
cache_sets_v8(Config) when is_list(Config) ->
cache_sets(Config, 8).
-cache_sets_v9(doc) ->
- ["Test the write cache for sets."];
-cache_sets_v9(suite) ->
- [];
+%% Test the write cache for sets.
cache_sets_v9(Config) when is_list(Config) ->
cache_sets(Config, 9).
@@ -2546,7 +2418,7 @@ cache_sets(Config, DelayedWrite, Extra, Sz, Version) ->
{[],[]} -> ok;
{X,Y} ->
NoBad = length(X) + length(Y),
- test_server:fail({sets,DelayedWrite,Extra,Sz,NoBad})
+ ct:fail({sets,DelayedWrite,Extra,Sz,NoBad})
end;
true ->
ok
@@ -2557,17 +2429,11 @@ cache_sets(Config, DelayedWrite, Extra, Sz, Version) ->
check_pps(P0),
ok.
-cache_bags_v8(doc) ->
- ["Test the write cache for bags."];
-cache_bags_v8(suite) ->
- [];
+%% Test the write cache for bags.
cache_bags_v8(Config) when is_list(Config) ->
cache_bags(Config, 8).
-cache_bags_v9(doc) ->
- ["Test the write cache for bags."];
-cache_bags_v9(suite) ->
- [];
+%% Test the write cache for bags.
cache_bags_v9(Config) when is_list(Config) ->
cache_bags(Config, 9).
@@ -2710,7 +2576,7 @@ cache_bags(Config, DelayedWrite, Extra, Sz, Version) ->
{[],[]} -> ok;
{X,Y} ->
NoBad = length(X) + length(Y),
- test_server:fail({bags,DelayedWrite,Extra,Sz,NoBad})
+ ct:fail({bags,DelayedWrite,Extra,Sz,NoBad})
end;
true ->
ok
@@ -2739,17 +2605,11 @@ cache_bags(Config, DelayedWrite, Extra, Sz, Version) ->
check_pps(P0),
ok.
-cache_duplicate_bags_v8(doc) ->
- ["Test the write cache for duplicate bags."];
-cache_duplicate_bags_v8(suite) ->
- [];
+%% Test the write cache for duplicate bags.
cache_duplicate_bags_v8(Config) when is_list(Config) ->
cache_duplicate_bags(Config, 8).
-cache_duplicate_bags_v9(doc) ->
- ["Test the write cache for duplicate bags."];
-cache_duplicate_bags_v9(suite) ->
- [];
+%% Test the write cache for duplicate bags.
cache_duplicate_bags_v9(Config) when is_list(Config) ->
cache_duplicate_bags(Config, 9).
@@ -2868,7 +2728,7 @@ cache_dup_bags(Config, DelayedWrite, Extra, Sz, Version) ->
{[],[]} -> ok;
{X,Y} ->
NoBad = length(X) + length(Y),
- test_server:fail({dup_bags,DelayedWrite,Extra,Sz,NoBad})
+ ct:fail({dup_bags,DelayedWrite,Extra,Sz,NoBad})
end;
true ->
ok
@@ -2934,10 +2794,7 @@ symdiff(L1, L2) ->
sofs:symmetric_partition(sofs:set(L1), sofs:set(L2)),
{sofs:to_external(X), sofs:to_external(Y)}.
-otp_4208(doc) ->
- ["Read only table and traversal caused crash."];
-otp_4208(suite) ->
- [];
+%% Test read-only tables and traversal caused crashes.
otp_4208(Config) when is_list(Config) ->
Tab = otp_4208,
FName = filename(Tab, Config),
@@ -2956,10 +2813,7 @@ otp_4208(Config) when is_list(Config) ->
ok.
-otp_4989(doc) ->
- ["Read only table and growth."];
-otp_4989(suite) ->
- [];
+%% Test read-only tables and growth.
otp_4989(Config) when is_list(Config) ->
Tab = otp_4989,
FName = filename(Tab, Config),
@@ -2987,10 +2841,7 @@ ets_init(Tab, N) ->
ets:insert(Tab, {N,N}),
ets_init(Tab, N - 1).
-otp_8898(doc) ->
- ["OTP-8898. Truncated Dets file."];
-otp_8898(suite) ->
- [];
+%% OTP-8898. Truncated Dets file.
otp_8898(Config) when is_list(Config) ->
Tab = otp_8898,
FName = filename(Tab, Config),
@@ -3010,10 +2861,7 @@ otp_8898(Config) when is_list(Config) ->
ok.
-otp_8899(doc) ->
- ["OTP-8899. Several clients. Updated Head was ignored."];
-otp_8899(suite) ->
- [];
+%% OTP-8899. Several clients. Updated Head was ignored.
otp_8899(Config) when is_list(Config) ->
Tab = many_clients,
FName = filename(Tab, Config),
@@ -3038,10 +2886,7 @@ otp_8899(Config) when is_list(Config) ->
ok.
-many_clients(doc) ->
- ["Several clients accessing a table simultaneously."];
-many_clients(suite) ->
- [];
+%% Test several clients accessing a table simultaneously.
many_clients(Config) when is_list(Config) ->
Tab = many_clients,
FName = filename(Tab, Config),
@@ -3227,10 +3072,7 @@ eval([{info,Tag,Expected} | L], Tab) ->
eval(Else, _Tab) ->
{error, {bad_request,Else}}.
-otp_4906(doc) ->
- ["More than 128k keys caused crash."];
-otp_4906(suite) ->
- [];
+%% More than 128k keys caused crash.
otp_4906(Config) when is_list(Config) ->
N = 256*512 + 400,
Tab = otp_4906,
@@ -3274,10 +3116,7 @@ ins_small(T, I, N) ->
ok = dets:insert(T, {I}),
ins_small(T, I+1, N).
-otp_5402(doc) ->
- ["Unwritable ramfile caused krasch."];
-otp_5402(suite) ->
- [];
+%% Unwritable ramfile caused crash.
otp_5402(Config) when is_list(Config) ->
Tab = otp_5402,
File = filename:join(["cannot", "write", "this", "file"]),
@@ -3304,10 +3143,7 @@ otp_5402(Config) when is_list(Config) ->
{error,{file_error,_,_}} = dets:close(T),
ok.
-simultaneous_open(doc) ->
- ["Several clients open and close tables simultaneously."];
-simultaneous_open(suite) ->
- [];
+%% Several clients open and close tables simultaneously.
simultaneous_open(Config) ->
Tab = sim_open,
File = filename(Tab, Config),
@@ -3526,10 +3362,7 @@ create_opened_log(File) ->
crash(File, ?CLOSED_PROPERLY_POS+3, ?NOT_PROPERLY_CLOSED),
ok.
-insert_new(doc) ->
- ["OTP-5075. insert_new/2"];
-insert_new(suite) ->
- [];
+%% OTP-5075. insert_new/2
insert_new(Config) ->
Tab = insert_new,
File = filename(Tab, Config),
@@ -3557,10 +3390,7 @@ insert_new(Config) ->
file:delete(File),
ok.
-repair_continuation(doc) ->
- ["OTP-5126. repair_continuation/2"];
-repair_continuation(suite) ->
- [];
+%% OTP-5126. repair_continuation/2
repair_continuation(Config) ->
Tab = repair_continuation_table,
Fname = filename(repair_cont, Config),
@@ -3583,10 +3413,7 @@ repair_continuation(Config) ->
file:delete(Fname),
ok.
-otp_5487(doc) ->
- ["OTP-5487. Growth of read-only table (again)."];
-otp_5487(suite) ->
- [];
+%% OTP-5487. Growth of read-only table (again).
otp_5487(Config) ->
otp_5487(Config, 9),
otp_5487(Config, 8),
@@ -3609,10 +3436,7 @@ otp_5487(Config, Version) ->
ets:delete(Ets),
file:delete(Fname).
-otp_6206(doc) ->
- ["OTP-6206. Badly formed free lists."];
-otp_6206(suite) ->
- [];
+%% OTP-6206. Badly formed free lists.
otp_6206(Config) ->
Tab = otp_6206,
File = filename(Tab, Config),
@@ -3631,10 +3455,7 @@ otp_6206(Config) ->
file:delete(File),
ok.
-otp_6359(doc) ->
- ["OTP-6359. select and match never return the empty list."];
-otp_6359(suite) ->
- [];
+%% OTP-6359. select and match never return the empty list.
otp_6359(Config) ->
Tab = otp_6359,
File = filename(Tab, Config),
@@ -3647,10 +3468,7 @@ otp_6359(Config) ->
file:delete(File),
ok.
-otp_4738(doc) ->
- ["OTP-4738. ==/2 and =:=/2."];
-otp_4738(suite) ->
- [];
+%% OTP-4738. ==/2 and =:=/2.
otp_4738(Config) ->
%% Version 8 has not been corrected.
%% (The constant -12857447 is for version 9 only.)
@@ -3802,10 +3620,7 @@ otp_4738_set(Version, Config) ->
file:delete(File),
ok.
-otp_7146(doc) ->
- ["OTP-7146. Bugfix: missing test when re-hashing."];
-otp_7146(suite) ->
- [];
+%% OTP-7146. Bugfix: missing test when re-hashing.
otp_7146(Config) ->
Tab = otp_7146,
File = filename(Tab, Config),
@@ -3828,10 +3643,7 @@ write_dets(Tab, N, Max) ->
ok = dets:insert(Tab,{ N, {entry,N}}),
write_dets(Tab, N+1, Max).
-otp_8070(doc) ->
- ["OTP-8070. Duplicated objects with insert_new() and duplicate_bag."];
-otp_8070(suite) ->
- [];
+%% OTP-8070. Duplicated objects with insert_new() and duplicate_bag.
otp_8070(Config) when is_list(Config) ->
Tab = otp_8070,
File = filename(Tab, Config),
@@ -3844,10 +3656,7 @@ otp_8070(Config) when is_list(Config) ->
file:delete(File),
ok.
-otp_8856(doc) ->
- ["OTP-8856. insert_new() bug."];
-otp_8856(suite) ->
- [];
+%% OTP-8856. insert_new() bug.
otp_8856(Config) when is_list(Config) ->
Tab = otp_8856,
File = filename(Tab, Config),
@@ -3869,10 +3678,7 @@ otp_8856(Config) when is_list(Config) ->
file:delete(File),
ok.
-otp_8903(doc) ->
- ["OTP-8903. bchunk/match/select bug."];
-otp_8903(suite) ->
- [];
+%% OTP-8903. bchunk/match/select bug.
otp_8903(Config) when is_list(Config) ->
Tab = otp_8903,
File = filename(Tab, Config),
@@ -3892,10 +3698,7 @@ otp_8903(Config) when is_list(Config) ->
file:delete(File),
ok.
-otp_8923(doc) ->
- ["OTP-8923. rehash due to lookup after initialization."];
-otp_8923(suite) ->
- [];
+%% OTP-8923. rehash due to lookup after initialization.
otp_8923(Config) when is_list(Config) ->
Tab = otp_8923,
File = filename(Tab, Config),
@@ -3925,10 +3728,7 @@ otp_8923(Config) when is_list(Config) ->
file:delete(File),
ok.
-otp_9282(doc) ->
- ["OTP-9282. The name of a table can be an arbitrary term"];
-otp_9282(suite) ->
- [];
+%% OTP-9282. The name of a table can be an arbitrary term.
otp_9282(Config) when is_list(Config) ->
some_calls(make_ref(), Config),
some_calls({a,typical,name}, Config),
@@ -3948,10 +3748,7 @@ some_calls(Tab, Config) ->
file:delete(File).
-otp_11245(doc) ->
- ["OTP-11245. Tables remained fixed after traversal"];
-otp_11245(suite) ->
- [];
+%% OTP-11245. Tables remained fixed after traversal.
otp_11245(Config) when is_list(Config) ->
Tab = otp_11245,
File = filename(Tab, Config),
@@ -3970,10 +3767,7 @@ otp_11245(Config) when is_list(Config) ->
file:delete(File),
ok.
-otp_11709(doc) ->
- ["OTP-11709. Bugfixes."];
-otp_11709(suite) ->
- [];
+%% OTP-11709. Bugfixes.
otp_11709(Config) when is_list(Config) ->
Short = <<"foo">>,
Long = <<"a sufficiently long text">>,
@@ -4012,6 +3806,64 @@ otp_11709(Config) when is_list(Config) ->
_ = file:delete(File),
ok.
+%% OTP-13229. open_file() exits with badarg when given binary file name.
+otp_13229(_Config) ->
+ F = <<"binfile.tab">>,
+ try dets:open_file(name, [{file, F}]) of
+ R ->
+ exit({open_succeeded, R})
+ catch
+ error:badarg ->
+ ok
+ end.
+
+%% OTP-13260. Race when opening a table.
+otp_13260(Config) ->
+ [ok] = lists:usort([otp_13260_1(Config) || _ <- lists:seq(1, 3)]),
+ ok.
+
+otp_13260_1(Config) ->
+ Tab = otp_13260,
+ File = filename(Tab, Config),
+ N = 20,
+ P = self(),
+ Pids = [spawn_link(fun() -> counter(P, Tab, File) end) ||
+ _ <- lists:seq(1, N)],
+ Rs = rec(Pids),
+ true = lists:all(fun(R) -> is_integer(R) end, Rs),
+ wait_for_close(Tab).
+
+rec([]) ->
+ [];
+rec([Pid | Pids]) ->
+ receive {Pid, R} ->
+ [R | rec(Pids)]
+ end.
+
+%% One may have to run the test several times to trigger the bug.
+counter(P, Tab, File) ->
+ Key = key,
+ N = case catch dets:update_counter(Tab, Key, 1) of
+ {'EXIT', _} ->
+ {ok, Tab} = dets:open_file(Tab, [{file, File}]),
+ ok = dets:insert(Tab, {Key, 1}),
+ dets:update_counter(Tab, Key, 1);
+ N1 when is_integer(N1) ->
+ N1;
+ DetsBug ->
+ DetsBug
+ end,
+ P ! {self(), N}.
+
+wait_for_close(Tab) ->
+ case dets:info(Tab, owner) of
+ undefined ->
+ ok;
+ _ ->
+ timer:sleep(100),
+ wait_for_close(Tab)
+ end.
+
%%
%% Parts common to several test cases
%%
@@ -4428,7 +4280,7 @@ check_pps({Ports0,Procs0} = P0) ->
show("New port", PortsDiff),
show("Old proc", Procs0 -- Procs1),
show("New proc", ProcsDiff),
- ?t:fail()
+ ct:fail(failed)
end
end
end.
diff --git a/lib/stdlib/test/dict_SUITE.erl b/lib/stdlib/test/dict_SUITE.erl
index 648154ebbe..47358d729f 100644
--- a/lib/stdlib/test/dict_SUITE.erl
+++ b/lib/stdlib/test/dict_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,11 +28,13 @@
init_per_testcase/2,end_per_testcase/2,
create/1,store/1,iterate/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-import(lists, [foldl/3]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[create, store, iterate].
@@ -54,12 +56,9 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:minutes(5)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
create(Config) when is_list(Config) ->
@@ -108,7 +107,7 @@ iterate_1(M) ->
M(empty, []).
iterate_2(M) ->
- random:seed(1, 2, 42),
+ rand:seed(exsplus, {1,2,42}),
iter_tree(M, 1000).
iter_tree(_M, 0) ->
@@ -117,7 +116,7 @@ iter_tree(M, N) ->
L = [{I, I} || I <- lists:seq(1, N)],
T = M(from_list, L),
L = lists:reverse(iterate_tree(M, T)),
- R = random:uniform(N),
+ R = rand:uniform(N),
KV = lists:reverse(iterate_tree_from(M, R, T)),
KV = [P || P={K,_} <- L, K >= R],
iter_tree(M, N-1).
@@ -156,7 +155,7 @@ test_all(Tester) ->
spawn_tester(M, Tester) ->
Parent = self(),
spawn_link(fun() ->
- random:seed(1, 2, 42),
+ rand:seed(exsplus, {1,2,42}),
S = Tester(M),
Res = {M(size, S),lists:sort(M(to_list, S))},
Parent ! {result,self(),Res}
@@ -194,12 +193,12 @@ rnd_list_1(0, Acc) ->
Acc;
rnd_list_1(N, Acc) ->
Key = atomic_rnd_term(),
- Value = random:uniform(100),
+ Value = rand:uniform(100),
rnd_list_1(N-1, [{Key,Value}|Acc]).
atomic_rnd_term() ->
- case random:uniform(3) of
- 1 -> list_to_atom(integer_to_list($\s+random:uniform(94))++"rnd");
- 2 -> random:uniform();
- 3 -> random:uniform(50)-37
+ case rand:uniform(3) of
+ 1 -> list_to_atom(integer_to_list($\s+rand:uniform(94))++"rnd");
+ 2 -> rand:uniform();
+ 3 -> rand:uniform(50)-37
end.
diff --git a/lib/stdlib/test/digraph_SUITE.erl b/lib/stdlib/test/digraph_SUITE.erl
index 9e007fe17d..b5d3452616 100644
--- a/lib/stdlib/test/digraph_SUITE.erl
+++ b/lib/stdlib/test/digraph_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,12 +19,12 @@
%%
-module(digraph_SUITE).
-%-define(STANDALONE,1).
+%%-define(STANDALONE,1).
-ifdef(STANDALONE).
-define(line, put(line, ?LINE), ).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -62,108 +62,100 @@ end_per_group(_GroupName, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-opts(doc) -> [];
-opts(suite) -> [];
opts(Config) when is_list(Config) ->
%% OTP-5985: the 'public' option has been removed
- ?line {'EXIT',{badarg,_}} = (catch digraph:new([public])),
- ?line {P2,G2} = spawn_graph([private]),
- ?line {'EXIT',{badarg,_}} = (catch digraph:add_vertex(G2, x)),
- ?line kill_graph(P2),
- ?line {P3,G3} = spawn_graph([protected]),
- ?line {'EXIT',{badarg,_}} = (catch digraph:add_vertex(G3, x)),
- ?line kill_graph(P3),
- ?line Template = [{v1,[v2]}, {v2,[v3]}, {v3,[v4]}, {v4,[]}],
- ?line G4 = build_graph([], Template),
- ?line e = digraph:add_edge(G4, e, v4, v1, []),
- ?line digraph:delete(G4),
- ?line G5 = build_graph([cyclic], Template),
- ?line e = digraph:add_edge(G5, e, v4, v1, []),
- ?line digraph:delete(G5),
- ?line G6 = build_graph([acyclic], Template),
- ?line acyclic = info(G6, cyclicity),
- ?line {error, {bad_edge,_}} = digraph:add_edge(G6, v4, v1),
- ?line digraph:delete(G6),
+ {'EXIT',{badarg,_}} = (catch digraph:new([public])),
+ {P2,G2} = spawn_graph([private]),
+ {'EXIT',{badarg,_}} = (catch digraph:add_vertex(G2, x)),
+ kill_graph(P2),
+ {P3,G3} = spawn_graph([protected]),
+ {'EXIT',{badarg,_}} = (catch digraph:add_vertex(G3, x)),
+ kill_graph(P3),
+ Template = [{v1,[v2]}, {v2,[v3]}, {v3,[v4]}, {v4,[]}],
+ G4 = build_graph([], Template),
+ e = digraph:add_edge(G4, e, v4, v1, []),
+ digraph:delete(G4),
+ G5 = build_graph([cyclic], Template),
+ e = digraph:add_edge(G5, e, v4, v1, []),
+ digraph:delete(G5),
+ G6 = build_graph([acyclic], Template),
+ acyclic = info(G6, cyclicity),
+ {error, {bad_edge,_}} = digraph:add_edge(G6, v4, v1),
+ digraph:delete(G6),
ok.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-degree(doc) -> [];
-degree(suite) -> [];
degree(Config) when is_list(Config) ->
- ?line G = build_graph([], [{x1,[]}, {x2,[x1]}, {x3,[x1,x2]},
- {x4,[x1,x2,x3]}, {x5,[x1,x2,x3,x4]}]),
+ G = build_graph([], [{x1,[]}, {x2,[x1]}, {x3,[x1,x2]},
+ {x4,[x1,x2,x3]}, {x5,[x1,x2,x3,x4]}]),
%% out degree
- ?line 0 = digraph:out_degree(G, x1),
- ?line 1 = digraph:out_degree(G, x2),
- ?line 2 = digraph:out_degree(G, x3),
- ?line 3 = digraph:out_degree(G, x4),
- ?line 4 = digraph:out_degree(G, x5),
+ 0 = digraph:out_degree(G, x1),
+ 1 = digraph:out_degree(G, x2),
+ 2 = digraph:out_degree(G, x3),
+ 3 = digraph:out_degree(G, x4),
+ 4 = digraph:out_degree(G, x5),
%% out neighbours
- ?line [] = check(digraph:out_neighbours(G, x1), []),
- ?line [] = check(digraph:out_neighbours(G, x2), [x1]),
- ?line [] = check(digraph:out_neighbours(G, x3), [x1,x2]),
- ?line [] = check(digraph:out_neighbours(G, x4), [x1,x2,x3]),
- ?line [] = check(digraph:out_neighbours(G, x5), [x1,x2,x3,x4]),
+ [] = check(digraph:out_neighbours(G, x1), []),
+ [] = check(digraph:out_neighbours(G, x2), [x1]),
+ [] = check(digraph:out_neighbours(G, x3), [x1,x2]),
+ [] = check(digraph:out_neighbours(G, x4), [x1,x2,x3]),
+ [] = check(digraph:out_neighbours(G, x5), [x1,x2,x3,x4]),
%% in degree
- ?line 4 = digraph:in_degree(G, x1),
- ?line 3 = digraph:in_degree(G, x2),
- ?line 2 = digraph:in_degree(G, x3),
- ?line 1 = digraph:in_degree(G, x4),
- ?line 0 = digraph:in_degree(G, x5),
+ 4 = digraph:in_degree(G, x1),
+ 3 = digraph:in_degree(G, x2),
+ 2 = digraph:in_degree(G, x3),
+ 1 = digraph:in_degree(G, x4),
+ 0 = digraph:in_degree(G, x5),
%% in neighbours
- ?line [] = check(digraph:in_neighbours(G, x1), [x2,x3,x4,x5]),
- ?line [] = check(digraph:in_neighbours(G, x2), [x3,x4,x5]),
- ?line [] = check(digraph:in_neighbours(G, x3), [x4,x5]),
- ?line [] = check(digraph:in_neighbours(G, x4), [x5]),
- ?line [] = check(digraph:in_neighbours(G, x5), []),
+ [] = check(digraph:in_neighbours(G, x1), [x2,x3,x4,x5]),
+ [] = check(digraph:in_neighbours(G, x2), [x3,x4,x5]),
+ [] = check(digraph:in_neighbours(G, x3), [x4,x5]),
+ [] = check(digraph:in_neighbours(G, x4), [x5]),
+ [] = check(digraph:in_neighbours(G, x5), []),
digraph:delete(G),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-path(doc) -> [];
-path(suite) -> [];
path(Config) when is_list(Config) ->
- ?line G = build_graph([], [{x1,[x2,x3]}, {x2,[x4]}, {x3,[x4]},
- {x4,[x5,x6]}, {x5,[x7]}, {x6,[x7]}]),
- ?line Vi = case digraph:get_path(G, x1, x7) of
- [x1,x2,x4,x5,x7] -> digraph:del_vertex(G, x5), x6;
- [x1,x2,x4,x6,x7] -> digraph:del_vertex(G, x6), x5;
- [x1,x3,x4,x5,x7] -> digraph:del_vertex(G, x5), x6;
- [x1,x3,x4,x6,x7] -> digraph:del_vertex(G, x6), x5
- end,
- ?line Vj = case digraph:get_path(G, x1, x7) of
- [x1,x2,x4,Vi,x7] -> digraph:del_vertex(G,x2), x3;
- [x1,x3,x4,Vi,x7] -> digraph:del_vertex(G,x3), x2
- end,
- ?line [x1,Vj,x4,Vi,x7] = digraph:get_path(G, x1, x7),
- ?line digraph:del_vertex(G, Vj),
- ?line false = digraph:get_path(G, x1, x7),
- ?line [] = check(digraph:vertices(G), [x1,x4,Vi,x7]),
+ G = build_graph([], [{x1,[x2,x3]}, {x2,[x4]}, {x3,[x4]},
+ {x4,[x5,x6]}, {x5,[x7]}, {x6,[x7]}]),
+ Vi = case digraph:get_path(G, x1, x7) of
+ [x1,x2,x4,x5,x7] -> digraph:del_vertex(G, x5), x6;
+ [x1,x2,x4,x6,x7] -> digraph:del_vertex(G, x6), x5;
+ [x1,x3,x4,x5,x7] -> digraph:del_vertex(G, x5), x6;
+ [x1,x3,x4,x6,x7] -> digraph:del_vertex(G, x6), x5
+ end,
+ Vj = case digraph:get_path(G, x1, x7) of
+ [x1,x2,x4,Vi,x7] -> digraph:del_vertex(G,x2), x3;
+ [x1,x3,x4,Vi,x7] -> digraph:del_vertex(G,x3), x2
+ end,
+ [x1,Vj,x4,Vi,x7] = digraph:get_path(G, x1, x7),
+ digraph:del_vertex(G, Vj),
+ false = digraph:get_path(G, x1, x7),
+ [] = check(digraph:vertices(G), [x1,x4,Vi,x7]),
digraph:delete(G),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-cycle(doc) -> [];
-cycle(suite) -> [];
cycle(Config) when is_list(Config) ->
- ?line G = build_graph([], [{x1,[x2,x3]}, {x2,[x4]}, {x3,[x4]},
- {x4,[x5,x6]}, {x5,[x7]}, {x6,[x7,x8]},
- {x8,[x3,x8]}]),
- ?line false = digraph:get_cycle(G, x1),
- ?line false = digraph:get_cycle(G, x2),
- ?line false = digraph:get_cycle(G, x5),
- ?line false = digraph:get_cycle(G, x7),
- ?line [x3,x4,x6,x8,x3] = digraph:get_cycle(G, x3),
- ?line [x4,x6,x8,x3,x4] = digraph:get_cycle(G, x4),
- ?line [x6,x8,x3,x4,x6] = digraph:get_cycle(G, x6),
- ?line [x8,x3,x4,x6,x8] = digraph:get_cycle(G, x8),
- ?line digraph:del_vertex(G, x4),
- ?line [x8] = digraph:get_cycle(G, x8),
+ G = build_graph([], [{x1,[x2,x3]}, {x2,[x4]}, {x3,[x4]},
+ {x4,[x5,x6]}, {x5,[x7]}, {x6,[x7,x8]},
+ {x8,[x3,x8]}]),
+ false = digraph:get_cycle(G, x1),
+ false = digraph:get_cycle(G, x2),
+ false = digraph:get_cycle(G, x5),
+ false = digraph:get_cycle(G, x7),
+ [x3,x4,x6,x8,x3] = digraph:get_cycle(G, x3),
+ [x4,x6,x8,x3,x4] = digraph:get_cycle(G, x4),
+ [x6,x8,x3,x4,x6] = digraph:get_cycle(G, x6),
+ [x8,x3,x4,x6,x8] = digraph:get_cycle(G, x8),
+ digraph:del_vertex(G, x4),
+ [x8] = digraph:get_cycle(G, x8),
digraph:delete(G),
ok.
@@ -171,61 +163,55 @@ cycle(Config) when is_list(Config) ->
-vertices(doc) -> [];
-vertices(suite) -> [];
vertices(Config) when is_list(Config) ->
- ?line G = build_graph([], [{x,[]}, {y,[]}]),
- ?line [] = check(digraph:vertices(G), [x,y]),
- ?line digraph:del_vertices(G, [x,y]),
- ?line [] = digraph:vertices(G),
- ?line digraph:delete(G),
+ G = build_graph([], [{x,[]}, {y,[]}]),
+ [] = check(digraph:vertices(G), [x,y]),
+ digraph:del_vertices(G, [x,y]),
+ [] = digraph:vertices(G),
+ digraph:delete(G),
ok.
-edges(doc) -> [];
-edges(suite) -> [];
edges(Config) when is_list(Config) ->
- ?line G = build_graph([], [{x, [{exy,y},{exx,x}]},
- {y, [{eyx,x}]}
- ]),
- ?line [] = check(digraph:edges(G), [exy, eyx, exx]),
- ?line [] = check(digraph:out_edges(G, x), [exy,exx]),
- ?line [] = check(digraph:in_edges(G, x), [eyx,exx]),
- ?line [] = check(digraph:out_edges(G, y), [eyx]),
- ?line [] = check(digraph:in_edges(G, y), [exy]),
- ?line true = digraph:del_edges(G, [exy, eyx, does_not_exist]),
- ?line [exx] = digraph:edges(G),
- ?line [] = check(digraph:out_edges(G, x), [exx]),
- ?line [] = check(digraph:in_edges(G, x), [exx]),
- ?line [] = check(digraph:out_edges(G, y), []),
- ?line [] = check(digraph:in_edges(G, y), []),
- ?line digraph:del_vertices(G, [x,y]),
- ?line [] = digraph:edges(G),
- ?line [] = digraph:vertices(G),
- ?line digraph:delete(G),
+ G = build_graph([], [{x, [{exy,y},{exx,x}]},
+ {y, [{eyx,x}]}
+ ]),
+ [] = check(digraph:edges(G), [exy, eyx, exx]),
+ [] = check(digraph:out_edges(G, x), [exy,exx]),
+ [] = check(digraph:in_edges(G, x), [eyx,exx]),
+ [] = check(digraph:out_edges(G, y), [eyx]),
+ [] = check(digraph:in_edges(G, y), [exy]),
+ true = digraph:del_edges(G, [exy, eyx, does_not_exist]),
+ [exx] = digraph:edges(G),
+ [] = check(digraph:out_edges(G, x), [exx]),
+ [] = check(digraph:in_edges(G, x), [exx]),
+ [] = check(digraph:out_edges(G, y), []),
+ [] = check(digraph:in_edges(G, y), []),
+ digraph:del_vertices(G, [x,y]),
+ [] = digraph:edges(G),
+ [] = digraph:vertices(G),
+ digraph:delete(G),
ok.
-data(doc) -> [];
-data(suite) -> [];
data(Config) when is_list(Config) ->
- ?line G = build_graph([], [{x, [{exy, y}]}, {y, []}]),
-
- ?line {x,[]} = digraph:vertex(G, x),
- ?line {y,[]} = digraph:vertex(G, y),
- ?line {exy,x,y,[]} = digraph:edge(G, exy),
-
- ?line digraph:add_edge(G, exy, x, y, {data,x,y}),
- ?line E = digraph:add_edge(G, x, y, {data,y,x}),
- ?line digraph:add_vertex(G, x, {any}),
- ?line digraph:add_vertex(G, y, '_'),
-
- ?line {x,{any}} = digraph:vertex(G, x),
- ?line {y,'_'} = digraph:vertex(G, y),
- ?line {exy,x,y,{data,x,y}} = digraph:edge(G, exy),
- ?line {E,x,y,{data,y,x}} = digraph:edge(G, E),
- ?line true = digraph:del_edge(G, E),
- ?line false = digraph:edge(G, E),
- ?line true = sane(G),
- ?line digraph:delete(G),
+ G = build_graph([], [{x, [{exy, y}]}, {y, []}]),
+
+ {x,[]} = digraph:vertex(G, x),
+ {y,[]} = digraph:vertex(G, y),
+ {exy,x,y,[]} = digraph:edge(G, exy),
+
+ digraph:add_edge(G, exy, x, y, {data,x,y}),
+ E = digraph:add_edge(G, x, y, {data,y,x}),
+ digraph:add_vertex(G, x, {any}),
+ digraph:add_vertex(G, y, '_'),
+
+ {x,{any}} = digraph:vertex(G, x),
+ {y,'_'} = digraph:vertex(G, y),
+ {exy,x,y,{data,x,y}} = digraph:edge(G, exy),
+ {E,x,y,{data,y,x}} = digraph:edge(G, E),
+ true = digraph:del_edge(G, E),
+ false = digraph:edge(G, E),
+ true = sane(G),
+ digraph:delete(G),
ok.
@@ -233,87 +219,81 @@ data(Config) when is_list(Config) ->
-otp_3522(doc) -> [];
-otp_3522(suite) -> [];
otp_3522(Config) when is_list(Config) ->
- ?line G1 = build_graph([acyclic], [{x, []}]),
- ?line {error, {bad_edge,_}} = digraph:add_edge(G1, x, x),
- ?line true = digraph:delete(G1),
-
- ?line G = digraph:new(),
- ?line 0 = digraph:no_vertices(G),
- ?line 0 = digraph:no_edges(G),
- ?line V1 = digraph:add_vertex(G),
- ?line '$vid' = digraph:add_vertex(G, '$vid'),
- ?line V2 = digraph:add_vertex(G),
- ?line '$eid' = digraph:add_edge(G, '$eid', V1, V2, []),
- ?line E = digraph:add_edge(G, V1, V2),
- ?line 3 = digraph:no_vertices(G),
- ?line 2 = digraph:no_edges(G),
- ?line cyclic = info(G, cyclicity),
- ?line protected = info(G, protection),
-
- ?line [] = check(digraph:in_edges(G, V2), ['$eid', E]),
- ?line [] = check(digraph:out_edges(G, V1), ['$eid', E]),
- ?line [] = check(digraph:vertices(G), [V1,V2,'$vid']),
- ?line [] = check(digraph:edges(G), [E, '$eid']),
- ?line true = sane(G),
- ?line true = digraph:delete(G),
+ G1 = build_graph([acyclic], [{x, []}]),
+ {error, {bad_edge,_}} = digraph:add_edge(G1, x, x),
+ true = digraph:delete(G1),
+
+ G = digraph:new(),
+ 0 = digraph:no_vertices(G),
+ 0 = digraph:no_edges(G),
+ V1 = digraph:add_vertex(G),
+ '$vid' = digraph:add_vertex(G, '$vid'),
+ V2 = digraph:add_vertex(G),
+ '$eid' = digraph:add_edge(G, '$eid', V1, V2, []),
+ E = digraph:add_edge(G, V1, V2),
+ 3 = digraph:no_vertices(G),
+ 2 = digraph:no_edges(G),
+ cyclic = info(G, cyclicity),
+ protected = info(G, protection),
+
+ [] = check(digraph:in_edges(G, V2), ['$eid', E]),
+ [] = check(digraph:out_edges(G, V1), ['$eid', E]),
+ [] = check(digraph:vertices(G), [V1,V2,'$vid']),
+ [] = check(digraph:edges(G), [E, '$eid']),
+ true = sane(G),
+ true = digraph:delete(G),
ok.
-otp_3630(doc) -> [];
-otp_3630(suite) -> [];
otp_3630(Config) when is_list(Config) ->
- ?line G = build_graph([], [{x, [{exy,y},{exx,x}]},
- {y, [{eyy,y},{eyx,x}]}
- ]),
- ?line [x,y] = digraph:get_path(G, x, y),
- ?line [y,x] = digraph:get_path(G, y, x),
-
- ?line [x,x] = digraph:get_short_path(G, x, x),
- ?line [y,y] = digraph:get_short_path(G, y, y),
- ?line true = digraph:delete(G),
-
- ?line G1 = build_graph([], [{1, [{12,2},{13,3},{11,1}]},
- {2, [{23,3}]},
- {3, [{34,4},{35,5}]},
- {4, [{45,5}]},
- {5, [{56,6},{57,7}]},
- {6, [{67,7}]},
- {7, [{71,1}]}
- ]),
-
- ?line [1,3,5,7] = digraph:get_short_path(G1, 1, 7),
- ?line [3,5,7,1,3] = digraph:get_short_cycle(G1, 3),
- ?line [1,1] = digraph:get_short_cycle(G1, 1),
- ?line true = digraph:delete(G1),
+ G = build_graph([], [{x, [{exy,y},{exx,x}]},
+ {y, [{eyy,y},{eyx,x}]}
+ ]),
+ [x,y] = digraph:get_path(G, x, y),
+ [y,x] = digraph:get_path(G, y, x),
+
+ [x,x] = digraph:get_short_path(G, x, x),
+ [y,y] = digraph:get_short_path(G, y, y),
+ true = digraph:delete(G),
+
+ G1 = build_graph([], [{1, [{12,2},{13,3},{11,1}]},
+ {2, [{23,3}]},
+ {3, [{34,4},{35,5}]},
+ {4, [{45,5}]},
+ {5, [{56,6},{57,7}]},
+ {6, [{67,7}]},
+ {7, [{71,1}]}
+ ]),
+
+ [1,3,5,7] = digraph:get_short_path(G1, 1, 7),
+ [3,5,7,1,3] = digraph:get_short_cycle(G1, 3),
+ [1,1] = digraph:get_short_cycle(G1, 1),
+ true = digraph:delete(G1),
F = 0.0, I = round(F),
- ?line G2 = digraph:new([acyclic]),
- ?line digraph:add_vertex(G2, F),
- ?line digraph:add_vertex(G2, I),
- ?line E = digraph:add_edge(G2, F, I),
- ?line true = not is_tuple(E),
- ?line true = sane(G2),
- ?line true = digraph:delete(G2),
+ G2 = digraph:new([acyclic]),
+ digraph:add_vertex(G2, F),
+ digraph:add_vertex(G2, I),
+ E = digraph:add_edge(G2, F, I),
+ true = not is_tuple(E),
+ true = sane(G2),
+ true = digraph:delete(G2),
ok.
-otp_8066(doc) -> [];
-otp_8066(suite) -> [];
otp_8066(Config) when is_list(Config) ->
fun() ->
D = digraph:new(),
V1 = digraph:add_vertex(D),
V2 = digraph:add_vertex(D),
_ = digraph:add_edge(D, V1, V2),
- ?line [V1, V2] = digraph:get_path(D, V1, V2),
- ?line true = sane(D),
- ?line true = digraph:del_path(D, V1, V2),
- ?line true = sane(D),
- ?line false = digraph:get_path(D, V1, V2),
- ?line true = digraph:del_path(D, V1, V2),
- ?line true = digraph:delete(D)
+ [V1, V2] = digraph:get_path(D, V1, V2),
+ true = sane(D),
+ true = digraph:del_path(D, V1, V2),
+ true = sane(D),
+ false = digraph:get_path(D, V1, V2),
+ true = digraph:del_path(D, V1, V2),
+ true = digraph:delete(D)
end(),
fun() ->
@@ -324,15 +304,15 @@ otp_8066(Config) when is_list(Config) ->
_ = digraph:add_edge(D, V1, V2),
_ = digraph:add_edge(D, V1, V1),
_ = digraph:add_edge(D, V2, V2),
- ?line [V1, V2] = digraph:get_path(D, V1, V2),
- ?line true = sane(D),
- ?line true = digraph:del_path(D, V1, V2),
- ?line false = digraph:get_short_path(D, V2, V1),
-
- ?line true = sane(D),
- ?line false = digraph:get_path(D, V1, V2),
- ?line true = digraph:del_path(D, V1, V2),
- ?line true = digraph:delete(D)
+ [V1, V2] = digraph:get_path(D, V1, V2),
+ true = sane(D),
+ true = digraph:del_path(D, V1, V2),
+ false = digraph:get_short_path(D, V2, V1),
+
+ true = sane(D),
+ false = digraph:get_path(D, V1, V2),
+ true = digraph:del_path(D, V1, V2),
+ true = digraph:delete(D)
end(),
fun() ->
@@ -342,18 +322,18 @@ otp_8066(Config) when is_list(Config) ->
W3 = digraph:add_vertex(G),
W4 = digraph:add_vertex(G),
_ = digraph:add_edge(G,['$e'|0], W1, W2, {}),
- ?line {error,{bad_vertex, bv}} =
+ {error,{bad_vertex, bv}} =
digraph:add_edge(G, edge, bv, W1, {}),
- ?line {error,{bad_vertex, bv}} =
+ {error,{bad_vertex, bv}} =
digraph:add_edge(G, edge, W1, bv, {}),
- ?line false = digraph:get_short_cycle(G, W1),
- ?line {error, {bad_edge,_}} =
+ false = digraph:get_short_cycle(G, W1),
+ {error, {bad_edge,_}} =
digraph:add_edge(G,['$e'|0], W3, W4, {}),
- ?line true = sane(G),
- ?line true = digraph:delete(G)
+ true = sane(G),
+ true = digraph:delete(G)
end(),
ok.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -422,7 +402,7 @@ sane1(G) ->
end
end, OutEs)
end, Vs),
-
+
InEs = lists:flatmap(fun(V) -> digraph:in_edges(G, V) end, Vs),
OutEs = lists:flatmap(fun(V) -> digraph:out_edges(G, V) end, Vs),
lists:foreach(
@@ -450,7 +430,7 @@ sane1(G) ->
end,
Edges = [digraph:edge(G, E) || E <- Es],
EVs = lists:usort([V || {_, V, _, _} <- Edges] ++
- [V || {_, _, V, _} <- Edges]),
+ [V || {_, _, V, _} <- Edges]),
lists:foreach(
fun(V) ->
case digraph:vertex(G, V) of
diff --git a/lib/stdlib/test/digraph_utils_SUITE.erl b/lib/stdlib/test/digraph_utils_SUITE.erl
index 747ccf322c..1dda4d6624 100644
--- a/lib/stdlib/test/digraph_utils_SUITE.erl
+++ b/lib/stdlib/test/digraph_utils_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,11 +19,11 @@
%%
-module(digraph_utils_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(line, put(line, ?LINE), ).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -59,205 +59,192 @@ end_per_group(_GroupName, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-simple(doc) -> [];
-simple(suite) -> [];
simple(Config) when is_list(Config) ->
- ?line G = digraph:new(),
- ?line add_vertices(G, [a]),
- ?line add_edges(G, [{b,c},{b,d},{e,f},{f,g},{g,e},{h,h},{i,i},{i,j}]),
- ?line 10 = length(digraph_utils:postorder(G)),
- ?line 10 = length(digraph_utils:preorder(G)),
- ?line ok = evall(digraph_utils:components(G),
- [[a],[b,c,d],[e,f,g],[h],[i,j]]),
- ?line ok = evall(digraph_utils:strong_components(G),
+ G = digraph:new(),
+ add_vertices(G, [a]),
+ add_edges(G, [{b,c},{b,d},{e,f},{f,g},{g,e},{h,h},{i,i},{i,j}]),
+ 10 = length(digraph_utils:postorder(G)),
+ 10 = length(digraph_utils:preorder(G)),
+ ok = evall(digraph_utils:components(G),
+ [[a],[b,c,d],[e,f,g],[h],[i,j]]),
+ ok = evall(digraph_utils:strong_components(G),
[[a],[b],[c],[d],[e,f,g],[h],[i],[j]]),
- ?line ok = evall(digraph_utils:cyclic_strong_components(G),
- [[e,f,g],[h],[i]]),
- ?line true = path(G, e, e),
- ?line false = path(G, e, j),
- ?line false = path(G, a, a),
- ?line false = digraph_utils:topsort(G),
- ?line false = digraph_utils:is_acyclic(G),
- ?line ok = eval(digraph_utils:loop_vertices(G), [h,i]),
- ?line ok = eval(digraph_utils:reaching([e], G), [e,f,g]),
- ?line ok = eval(digraph_utils:reaching_neighbours([e], G), [e,f,g]),
- ?line ok = eval(digraph_utils:reachable([e], G), [e,f,g]),
- ?line ok = eval(digraph_utils:reachable_neighbours([e], G), [e,f,g]),
- ?line ok = eval(digraph_utils:reaching([b], G), [b]),
- ?line ok = eval(digraph_utils:reaching_neighbours([b], G), []),
- ?line ok = eval(digraph_utils:reachable([b], G), [b,c,d]),
- ?line ok = eval(digraph_utils:reachable_neighbours([b], G), [c,d]),
- ?line ok = eval(digraph_utils:reaching([h], G), [h]),
- ?line ok = eval(digraph_utils:reaching_neighbours([h], G), [h]),
- ?line ok = eval(digraph_utils:reachable([h], G), [h]),
- ?line ok = eval(digraph_utils:reachable_neighbours([h], G), [h]),
- ?line ok = eval(digraph_utils:reachable([e,f], G), [e,f,g]),
- ?line ok = eval(digraph_utils:reachable_neighbours([e,f], G), [e,f,g]),
- ?line ok = eval(digraph_utils:reachable([h,h,h], G), [h]),
- ?line true = digraph:delete(G),
+ ok = evall(digraph_utils:cyclic_strong_components(G),
+ [[e,f,g],[h],[i]]),
+ true = path(G, e, e),
+ false = path(G, e, j),
+ false = path(G, a, a),
+ false = digraph_utils:topsort(G),
+ false = digraph_utils:is_acyclic(G),
+ ok = eval(digraph_utils:loop_vertices(G), [h,i]),
+ ok = eval(digraph_utils:reaching([e], G), [e,f,g]),
+ ok = eval(digraph_utils:reaching_neighbours([e], G), [e,f,g]),
+ ok = eval(digraph_utils:reachable([e], G), [e,f,g]),
+ ok = eval(digraph_utils:reachable_neighbours([e], G), [e,f,g]),
+ ok = eval(digraph_utils:reaching([b], G), [b]),
+ ok = eval(digraph_utils:reaching_neighbours([b], G), []),
+ ok = eval(digraph_utils:reachable([b], G), [b,c,d]),
+ ok = eval(digraph_utils:reachable_neighbours([b], G), [c,d]),
+ ok = eval(digraph_utils:reaching([h], G), [h]),
+ ok = eval(digraph_utils:reaching_neighbours([h], G), [h]),
+ ok = eval(digraph_utils:reachable([h], G), [h]),
+ ok = eval(digraph_utils:reachable_neighbours([h], G), [h]),
+ ok = eval(digraph_utils:reachable([e,f], G), [e,f,g]),
+ ok = eval(digraph_utils:reachable_neighbours([e,f], G), [e,f,g]),
+ ok = eval(digraph_utils:reachable([h,h,h], G), [h]),
+ true = digraph:delete(G),
ok.
-loop(doc) -> [];
-loop(suite) -> [];
loop(Config) when is_list(Config) ->
- ?line G = digraph:new(),
- ?line add_vertices(G, [a,b]),
- ?line add_edges(G, [{a,a},{b,b}]),
- ?line ok = evall(digraph_utils:components(G), [[a],[b]]),
- ?line ok = evall(digraph_utils:strong_components(G), [[a],[b]]),
- ?line ok = evall(digraph_utils:cyclic_strong_components(G), [[a],[b]]),
- ?line [_,_] = digraph_utils:topsort(G),
- ?line false = digraph_utils:is_acyclic(G),
- ?line ok = eval(digraph_utils:loop_vertices(G), [a,b]),
- ?line [_,_] = digraph_utils:preorder(G),
- ?line [_,_] = digraph_utils:postorder(G),
- ?line ok = eval(digraph_utils:reaching([b], G), [b]),
- ?line ok = eval(digraph_utils:reaching_neighbours([b], G), [b]),
- ?line ok = eval(digraph_utils:reachable([b], G), [b]),
- ?line ok = eval(digraph_utils:reachable_neighbours([b], G), [b]),
- ?line true = path(G, a, a),
- ?line true = digraph:delete(G),
+ G = digraph:new(),
+ add_vertices(G, [a,b]),
+ add_edges(G, [{a,a},{b,b}]),
+ ok = evall(digraph_utils:components(G), [[a],[b]]),
+ ok = evall(digraph_utils:strong_components(G), [[a],[b]]),
+ ok = evall(digraph_utils:cyclic_strong_components(G), [[a],[b]]),
+ [_,_] = digraph_utils:topsort(G),
+ false = digraph_utils:is_acyclic(G),
+ ok = eval(digraph_utils:loop_vertices(G), [a,b]),
+ [_,_] = digraph_utils:preorder(G),
+ [_,_] = digraph_utils:postorder(G),
+ ok = eval(digraph_utils:reaching([b], G), [b]),
+ ok = eval(digraph_utils:reaching_neighbours([b], G), [b]),
+ ok = eval(digraph_utils:reachable([b], G), [b]),
+ ok = eval(digraph_utils:reachable_neighbours([b], G), [b]),
+ true = path(G, a, a),
+ true = digraph:delete(G),
ok.
-isolated(doc) -> [];
-isolated(suite) -> [];
isolated(Config) when is_list(Config) ->
- ?line G = digraph:new(),
- ?line add_vertices(G, [a,b]),
- ?line ok = evall(digraph_utils:components(G), [[a],[b]]),
- ?line ok = evall(digraph_utils:strong_components(G), [[a],[b]]),
- ?line ok = evall(digraph_utils:cyclic_strong_components(G), []),
- ?line [_,_] = digraph_utils:topsort(G),
- ?line true = digraph_utils:is_acyclic(G),
- ?line ok = eval(digraph_utils:loop_vertices(G), []),
- ?line [_,_] = digraph_utils:preorder(G),
- ?line [_,_] = digraph_utils:postorder(G),
- ?line ok = eval(digraph_utils:reaching([b], G), [b]),
- ?line ok = eval(digraph_utils:reaching_neighbours([b], G), []),
- ?line ok = eval(digraph_utils:reachable([b], G), [b]),
- ?line ok = eval(digraph_utils:reachable_neighbours([b], G), []),
- ?line false = path(G, a, a),
- ?line true = digraph:delete(G),
+ G = digraph:new(),
+ add_vertices(G, [a,b]),
+ ok = evall(digraph_utils:components(G), [[a],[b]]),
+ ok = evall(digraph_utils:strong_components(G), [[a],[b]]),
+ ok = evall(digraph_utils:cyclic_strong_components(G), []),
+ [_,_] = digraph_utils:topsort(G),
+ true = digraph_utils:is_acyclic(G),
+ ok = eval(digraph_utils:loop_vertices(G), []),
+ [_,_] = digraph_utils:preorder(G),
+ [_,_] = digraph_utils:postorder(G),
+ ok = eval(digraph_utils:reaching([b], G), [b]),
+ ok = eval(digraph_utils:reaching_neighbours([b], G), []),
+ ok = eval(digraph_utils:reachable([b], G), [b]),
+ ok = eval(digraph_utils:reachable_neighbours([b], G), []),
+ false = path(G, a, a),
+ true = digraph:delete(G),
ok.
-topsort(doc) -> [];
-topsort(suite) -> [];
topsort(Config) when is_list(Config) ->
- ?line G = digraph:new(),
- ?line add_edges(G, [{a,b},{b,c},{c,d},{d,e},{e,f}]),
- ?line ok = eval(digraph_utils:topsort(G), [a,b,c,d,e,f]),
- ?line true = digraph:delete(G),
+ G = digraph:new(),
+ add_edges(G, [{a,b},{b,c},{c,d},{d,e},{e,f}]),
+ ok = eval(digraph_utils:topsort(G), [a,b,c,d,e,f]),
+ true = digraph:delete(G),
ok.
-subgraph(doc) -> [];
-subgraph(suite) -> [];
subgraph(Config) when is_list(Config) ->
- ?line G = digraph:new([acyclic]),
- ?line add_edges(G, [{b,c},{b,d},{e,f},{f,fg,fgl,g},{f,fg2,fgl2,g},{g,e},
- {h,h},{i,i},{i,j}]),
- ?line add_vertices(G, [{b,bl},{f,fl}]),
- ?line SG = digraph_utils:subgraph(G, [u1,b,c,u2,f,g,i,u3]),
- ?line [b,c,f,g,i] = lists:sort(digraph:vertices(SG)),
- ?line {b,bl} = digraph:vertex(SG, b),
- ?line {c,[]} = digraph:vertex(SG, c),
- ?line {fg,f,g,fgl} = digraph:edge(SG, fg),
- ?line {fg2,f,g,fgl2} = digraph:edge(SG, fg2),
- ?line {_, {_, acyclic}} = lists:keysearch(cyclicity, 1, digraph:info(SG)),
- ?line true = digraph:delete(SG),
-
- ?line SG1 = digraph_utils:subgraph(G, [f, g, h],
- [{type, []}, {keep_labels, false}]),
- ?line [f,g,h] = lists:sort(digraph:vertices(SG1)),
- ?line {f,[]} = digraph:vertex(SG1, f),
- ?line {fg,f,g,[]} = digraph:edge(SG1, fg),
- ?line {_, {_, cyclic}} = lists:keysearch(cyclicity, 1, digraph:info(SG1)),
- ?line true = digraph:delete(SG1),
-
- ?line SG2 = digraph_utils:subgraph(G, [f, g, h],
- [{type, [acyclic]},
- {keep_labels, true}]),
- ?line [f,g,h] = lists:sort(digraph:vertices(SG2)),
- ?line {f,fl} = digraph:vertex(SG2, f),
- ?line {fg,f,g,fgl} = digraph:edge(SG2, fg),
- ?line {_, {_, acyclic}} = lists:keysearch(cyclicity, 1, digraph:info(SG2)),
- ?line true = digraph:delete(SG2),
-
- ?line {'EXIT',{badarg,_}} =
+ G = digraph:new([acyclic]),
+ add_edges(G, [{b,c},{b,d},{e,f},{f,fg,fgl,g},{f,fg2,fgl2,g},{g,e},
+ {h,h},{i,i},{i,j}]),
+ add_vertices(G, [{b,bl},{f,fl}]),
+ SG = digraph_utils:subgraph(G, [u1,b,c,u2,f,g,i,u3]),
+ [b,c,f,g,i] = lists:sort(digraph:vertices(SG)),
+ {b,bl} = digraph:vertex(SG, b),
+ {c,[]} = digraph:vertex(SG, c),
+ {fg,f,g,fgl} = digraph:edge(SG, fg),
+ {fg2,f,g,fgl2} = digraph:edge(SG, fg2),
+ {_, {_, acyclic}} = lists:keysearch(cyclicity, 1, digraph:info(SG)),
+ true = digraph:delete(SG),
+
+ SG1 = digraph_utils:subgraph(G, [f, g, h],
+ [{type, []}, {keep_labels, false}]),
+ [f,g,h] = lists:sort(digraph:vertices(SG1)),
+ {f,[]} = digraph:vertex(SG1, f),
+ {fg,f,g,[]} = digraph:edge(SG1, fg),
+ {_, {_, cyclic}} = lists:keysearch(cyclicity, 1, digraph:info(SG1)),
+ true = digraph:delete(SG1),
+
+ SG2 = digraph_utils:subgraph(G, [f, g, h],
+ [{type, [acyclic]},
+ {keep_labels, true}]),
+ [f,g,h] = lists:sort(digraph:vertices(SG2)),
+ {f,fl} = digraph:vertex(SG2, f),
+ {fg,f,g,fgl} = digraph:edge(SG2, fg),
+ {_, {_, acyclic}} = lists:keysearch(cyclicity, 1, digraph:info(SG2)),
+ true = digraph:delete(SG2),
+
+ {'EXIT',{badarg,_}} =
(catch digraph_utils:subgraph(G, [f], [{invalid, opt}])),
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch digraph_utils:subgraph(G, [f], [{keep_labels, not_Bool}])),
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch digraph_utils:subgraph(G, [f], [{type, not_type}])),
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch digraph_utils:subgraph(G, [f], [{type, [not_type]}])),
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch digraph_utils:subgraph(G, [f], not_a_list)),
- ?line true = digraph:delete(G),
+ true = digraph:delete(G),
ok.
-condensation(doc) -> [];
-condensation(suite) -> [];
condensation(Config) when is_list(Config) ->
- ?line G = digraph:new([]),
- ?line add_edges(G, [{b,c},{b,d},{e,f},{f,fg,fgl,g},{f,fg2,fgl2,g},{g,e},
- {h,h},{j,i},{i,j}]),
- ?line add_vertices(G, [q]),
- ?line CG = digraph_utils:condensation(G),
- ?line Vs = sort_2(digraph:vertices(CG)),
- ?line [[b],[c],[d],[e,f,g],[h],[i,j],[q]] = Vs,
- ?line Fun = fun(E) ->
- {_E, V1, V2, _L} = digraph:edge(CG, E),
- {lists:sort(V1), lists:sort(V2)}
- end,
- ?line Es = lists:map(Fun, digraph:edges(CG)),
- ?line [{[b],[c]},{[b],[d]}] = lists:sort(Es),
- ?line true = digraph:delete(CG),
- ?line true = digraph:delete(G),
+ G = digraph:new([]),
+ add_edges(G, [{b,c},{b,d},{e,f},{f,fg,fgl,g},{f,fg2,fgl2,g},{g,e},
+ {h,h},{j,i},{i,j}]),
+ add_vertices(G, [q]),
+ CG = digraph_utils:condensation(G),
+ Vs = sort_2(digraph:vertices(CG)),
+ [[b],[c],[d],[e,f,g],[h],[i,j],[q]] = Vs,
+ Fun = fun(E) ->
+ {_E, V1, V2, _L} = digraph:edge(CG, E),
+ {lists:sort(V1), lists:sort(V2)}
+ end,
+ Es = lists:map(Fun, digraph:edges(CG)),
+ [{[b],[c]},{[b],[d]}] = lists:sort(Es),
+ true = digraph:delete(CG),
+ true = digraph:delete(G),
ok.
-tree(doc) -> ["OTP-7081"];
-tree(suite) -> [];
+%% OTP-7081
tree(Config) when is_list(Config) ->
- ?line false = is_tree([], []),
- ?line true = is_tree([a], []),
- ?line false = is_tree([a,b], []),
- ?line true = is_tree([{a,b}]),
- ?line false = is_tree([{a,b},{b,a}]),
- ?line true = is_tree([{a,b},{a,c},{b,d},{b,e}]),
- ?line false = is_tree([{a,b},{a,c},{b,d},{b,e}, {d,e}]),
- ?line false = is_tree([{a,b},{a,c},{b,d},{b,e}, {b,e}]),
- ?line true = is_tree([{a,c},{c,b}]),
- ?line true = is_tree([{b,a},{c,a}]),
+ false = is_tree([], []),
+ true = is_tree([a], []),
+ false = is_tree([a,b], []),
+ true = is_tree([{a,b}]),
+ false = is_tree([{a,b},{b,a}]),
+ true = is_tree([{a,b},{a,c},{b,d},{b,e}]),
+ false = is_tree([{a,b},{a,c},{b,d},{b,e}, {d,e}]),
+ false = is_tree([{a,b},{a,c},{b,d},{b,e}, {b,e}]),
+ true = is_tree([{a,c},{c,b}]),
+ true = is_tree([{b,a},{c,a}]),
%% Parallel edges. Acyclic and with one componets
%% (according to the digraph module).
- ?line false = is_tree([{a,b},{a,b}]),
-
- ?line no = arborescence_root([], []),
- ?line {yes, a} = arborescence_root([a], []),
- ?line no = arborescence_root([a,b], []),
- ?line {yes, a} = arborescence_root([{a,b}]),
- ?line no = arborescence_root([{a,b},{b,a}]),
- ?line {yes, a} = arborescence_root([{a,b},{a,c},{b,d},{b,e}]),
- ?line no = arborescence_root([{a,b},{a,c},{b,d},{b,e}, {d,e}]),
- ?line no = arborescence_root([{a,b},{a,c},{b,d},{b,e}, {b,e}]),
- ?line {yes, a} = arborescence_root([{a,c},{c,b}]),
- ?line no = arborescence_root([{b,a},{c,a}]),
-
- ?line false = is_arborescence([], []),
- ?line true = is_arborescence([a], []),
- ?line false = is_arborescence([a,b], []),
- ?line true = is_arborescence([{a,b}]),
- ?line false = is_arborescence([{a,b},{b,a}]),
- ?line true = is_arborescence([{a,b},{a,c},{b,d},{b,e}]),
- ?line false = is_arborescence([{a,b},{a,c},{b,d},{b,e}, {d,e}]),
- ?line false = is_arborescence([{a,b},{a,c},{b,d},{b,e}, {b,e}]),
- ?line true = is_arborescence([{a,c},{c,b}]),
- ?line false = is_arborescence([{b,a},{c,a}]),
+ false = is_tree([{a,b},{a,b}]),
+
+ no = arborescence_root([], []),
+ {yes, a} = arborescence_root([a], []),
+ no = arborescence_root([a,b], []),
+ {yes, a} = arborescence_root([{a,b}]),
+ no = arborescence_root([{a,b},{b,a}]),
+ {yes, a} = arborescence_root([{a,b},{a,c},{b,d},{b,e}]),
+ no = arborescence_root([{a,b},{a,c},{b,d},{b,e}, {d,e}]),
+ no = arborescence_root([{a,b},{a,c},{b,d},{b,e}, {b,e}]),
+ {yes, a} = arborescence_root([{a,c},{c,b}]),
+ no = arborescence_root([{b,a},{c,a}]),
+
+ false = is_arborescence([], []),
+ true = is_arborescence([a], []),
+ false = is_arborescence([a,b], []),
+ true = is_arborescence([{a,b}]),
+ false = is_arborescence([{a,b},{b,a}]),
+ true = is_arborescence([{a,b},{a,c},{b,d},{b,e}]),
+ false = is_arborescence([{a,b},{a,c},{b,d},{b,e}, {d,e}]),
+ false = is_arborescence([{a,b},{a,c},{b,d},{b,e}, {b,e}]),
+ true = is_arborescence([{a,c},{c,b}]),
+ false = is_arborescence([{b,a},{c,a}]),
%% Parallel edges.
- ?line false = is_arborescence([{a,b},{a,b}]),
+ false = is_arborescence([{a,b},{a,b}]),
ok.
@@ -325,7 +312,7 @@ eval(L, E) ->
evall(L, E) ->
F = fun(L1) -> lists:sort(L1) end,
Fun = fun(LL) -> F(lists:map(F, LL)) end,
-
+
Expected = Fun(E),
Got = Fun(L),
if
diff --git a/lib/stdlib/test/dummy1_h.erl b/lib/stdlib/test/dummy1_h.erl
index 5db23872c4..c46b7cd303 100644
--- a/lib/stdlib/test/dummy1_h.erl
+++ b/lib/stdlib/test/dummy1_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ handle_event(delete_event, _Parent) ->
remove_handler;
handle_event(do_crash, _State) ->
erlang:error({badmatch,4});
-%Inverse of dummy_h
+%%Inverse of dummy_h
handle_event(hibernate, Parent) ->
{ok,Parent};
handle_event(wakeup, Parent) ->
diff --git a/lib/stdlib/test/dummy_h.erl b/lib/stdlib/test/dummy_h.erl
index c81ea984f2..bc89cb4fde 100644
--- a/lib/stdlib/test/dummy_h.erl
+++ b/lib/stdlib/test/dummy_h.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/dummy_via.erl b/lib/stdlib/test/dummy_via.erl
index e405811cbe..026b329688 100644
--- a/lib/stdlib/test/dummy_via.erl
+++ b/lib/stdlib/test/dummy_via.erl
@@ -50,8 +50,10 @@ call(Req) ->
{'DOWN', MRef, _, _, _} ->
erlang:error(badarg);
{MRef, badarg} ->
+ erlang:demonitor(MRef),
erlang:error(badarg);
{MRef, Reply} ->
+ erlang:demonitor(MRef),
Reply
after 5000 ->
erlang:error(timeout)
diff --git a/lib/stdlib/test/edlin_expand_SUITE.erl b/lib/stdlib/test/edlin_expand_SUITE.erl
index 6fdc4c35df..ccffa2e244 100644
--- a/lib/stdlib/test/edlin_expand_SUITE.erl
+++ b/lib/stdlib/test/edlin_expand_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,26 +19,21 @@
%%
-module(edlin_expand_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
init_per_group/2,end_per_group/2]).
-
-export([normal/1, quoted_fun/1, quoted_module/1, quoted_both/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
-
--include_lib("test_server/include/test_server.hrl").
-
-%% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
+-include_lib("common_test/include/ct.hrl").
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[normal, quoted_fun, quoted_module, quoted_both].
@@ -63,10 +58,6 @@ end_per_group(_GroupName, Config) ->
Config.
-normal(doc) ->
- [""];
-normal(suite) ->
- [];
normal(Config) when is_list(Config) ->
{module,expand_test} = c:l(expand_test),
%% These tests might fail if another module with the prefix
@@ -85,10 +76,7 @@ normal(Config) when is_list(Config) ->
{yes,"arity_entirely()",[]} = do_expand("expand_test:expand0"),
ok.
-quoted_fun(doc) ->
- ["Normal module name, some function names using quoted atoms"];
-quoted_fun(suite) ->
- [];
+%% Normal module name, some function names using quoted atoms.
quoted_fun(Config) when is_list(Config) ->
{module,expand_test} = c:l(expand_test),
{module,expand_test1} = c:l(expand_test1),
@@ -121,10 +109,6 @@ quoted_fun(Config) when is_list(Config) ->
{yes,"(",[]} = do_expand("expand_test:module_info"),
ok.
-quoted_module(doc) ->
- [""];
-quoted_module(suite) ->
- [];
quoted_module(Config) when is_list(Config) ->
{module,'ExpandTestCaps'} = c:l('ExpandTestCaps'),
{yes, "Caps':", []} = do_expand("'ExpandTest"),
@@ -138,8 +122,6 @@ quoted_module(Config) when is_list(Config) ->
{"a_less_fun_name",1}]} = do_expand("'ExpandTestCaps':a_"),
ok.
-quoted_both(suite) ->
- [];
quoted_both(Config) when is_list(Config) ->
{module,'ExpandTestCaps'} = c:l('ExpandTestCaps'),
{module,'ExpandTestCaps1'} = c:l('ExpandTestCaps1'),
diff --git a/lib/stdlib/test/epp_SUITE.erl b/lib/stdlib/test/epp_SUITE.erl
index 4e5df661b3..4078513e38 100644
--- a/lib/stdlib/test/epp_SUITE.erl
+++ b/lib/stdlib/test/epp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,16 +25,17 @@
upcase_mac_1/1, upcase_mac_2/1,
variable_1/1, otp_4870/1, otp_4871/1, otp_5362/1,
pmod/1, not_circular/1, skip_header/1, otp_6277/1, otp_7702/1,
- otp_8130/1, overload_mac/1, otp_8388/1, otp_8470/1, otp_8503/1,
+ otp_8130/1, overload_mac/1, otp_8388/1, otp_8470/1,
otp_8562/1, otp_8665/1, otp_8911/1, otp_10302/1, otp_10820/1,
- otp_11728/1, encoding/1]).
+ otp_11728/1, encoding/1, extends/1, function_macro/1,
+ test_error/1, test_warning/1]).
-export([epp_parse_erl_form/2]).
%%
%% Define to run outside of test server
%%
-%-define(STANDALONE,1).
+%%-define(STANDALONE,1).
-ifdef(STANDALONE).
-compile(export_all).
@@ -47,30 +48,27 @@ config(priv_dir, _) ->
config(data_dir, _) ->
filename:absname("./epp_SUITE_data").
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([init_per_testcase/2, end_per_testcase/2]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-
init_per_testcase(_, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_, _Config) ->
ok.
-endif.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[rec_1, {group, upcase_mac}, include_local, predef_mac,
{group, variable}, otp_4870, otp_4871, otp_5362, pmod,
not_circular, skip_header, otp_6277, otp_7702, otp_8130,
- overload_mac, otp_8388, otp_8470, otp_8503, otp_8562,
+ overload_mac, otp_8388, otp_8470, otp_8562,
otp_8665, otp_8911, otp_10302, otp_10820, otp_11728,
- encoding].
+ encoding, extends, function_macro, test_error, test_warning].
groups() ->
[{upcase_mac, [], [upcase_mac_1, upcase_mac_2]},
@@ -88,33 +86,26 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-rec_1(doc) ->
- ["Recursive macros hang or crash epp (OTP-1398)."];
-rec_1(suite) ->
- [];
+%% Recursive macros hang or crash epp (OTP-1398).
rec_1(Config) when is_list(Config) ->
- ?line File = filename:join(?config(data_dir, Config), "mac.erl"),
- ?line {ok, List} = epp_parse_file(File, [], []),
+ File = filename:join(proplists:get_value(data_dir, Config), "mac.erl"),
+ {ok, List} = epp_parse_file(File, [], []),
%% we should encounter errors
- ?line {value, _} = lists:keysearch(error, 1, List),
- ?line check_errors(List),
+ {value, _} = lists:keysearch(error, 1, List),
+ check_errors(List),
ok.
-include_local(doc) ->
- [];
-include_local(suite) ->
- [];
include_local(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line File = filename:join(DataDir, "include_local.erl"),
+ DataDir = proplists:get_value(data_dir, Config),
+ File = filename:join(DataDir, "include_local.erl"),
FooHrl = filename:join([DataDir,"include","foo.hrl"]),
BarHrl = filename:join([DataDir,"include","bar.hrl"]),
%% include_local.erl includes include/foo.hrl which
%% includes bar.hrl (also in include/) without requiring
%% any additional include path, and overriding any file
%% of the same name that the path points to
- ?line {ok, List} = epp:parse_file(File, [DataDir], []),
- ?line {value, {attribute,_,a,{true,true}}} =
+ {ok, List} = epp:parse_file(File, [DataDir], []),
+ {value, {attribute,_,a,{true,true}}} =
lists:keysearch(a,3,List),
[{File,1},{FooHrl,1},{BarHrl,1},{FooHrl,5},{File,5}] =
[ FileLine || {attribute,_,file,FileLine} <- List ],
@@ -170,108 +161,86 @@ epp_parse_erl_form(Epp, Parent) ->
check_errors([]) ->
ok;
check_errors([{error, Info} | Rest]) ->
- ?line {Line, Mod, Desc} = Info,
- ?line case Line of
- I when is_integer(I) -> ok;
- {L,C} when is_integer(L), is_integer(C), C >= 1 -> ok
- end,
- ?line Str = lists:flatten(Mod:format_error(Desc)),
- ?line [Str] = io_lib:format("~s", [Str]),
+ {Line, Mod, Desc} = Info,
+ case Line of
+ I when is_integer(I) -> ok;
+ {L,C} when is_integer(L), is_integer(C), C >= 1 -> ok
+ end,
+ Str = lists:flatten(Mod:format_error(Desc)),
+ [Str] = io_lib:format("~s", [Str]),
check_errors(Rest);
check_errors([_ | Rest]) ->
check_errors(Rest).
-upcase_mac_1(doc) ->
- [];
-upcase_mac_1(suite) ->
- [];
upcase_mac_1(Config) when is_list(Config) ->
- ?line File = filename:join(?config(data_dir, Config), "mac2.erl"),
- ?line {ok, List} = epp:parse_file(File, [], []),
- ?line [_, {attribute, _, plupp, Tuple} | _] = List,
- ?line Tuple = {1, 1, 3, 3},
+ File = filename:join(proplists:get_value(data_dir, Config), "mac2.erl"),
+ {ok, List} = epp:parse_file(File, [], []),
+ [_, {attribute, _, plupp, Tuple} | _] = List,
+ Tuple = {1, 1, 3, 3},
ok.
-upcase_mac_2(doc) ->
- [];
-upcase_mac_2(suite) ->
- [];
upcase_mac_2(Config) when is_list(Config) ->
- ?line File = filename:join(?config(data_dir, Config), "mac2.erl"),
- ?line {ok, List} = epp:parse_file(File, [], [{p, 5}, {'P', 6}]),
- ?line [_, {attribute, _, plupp, Tuple} | _] = List,
- ?line Tuple = {5, 5, 6, 6},
+ File = filename:join(proplists:get_value(data_dir, Config), "mac2.erl"),
+ {ok, List} = epp:parse_file(File, [], [{p, 5}, {'P', 6}]),
+ [_, {attribute, _, plupp, Tuple} | _] = List,
+ Tuple = {5, 5, 6, 6},
ok.
-predef_mac(doc) ->
- [];
-predef_mac(suite) ->
- [];
predef_mac(Config) when is_list(Config) ->
- ?line File = filename:join(?config(data_dir, Config), "mac3.erl"),
- ?line {ok, List} = epp:parse_file(File, [], []),
- ?line [_,
- {attribute, Anno, l, Line1},
- {attribute, _, f, File},
- {attribute, _, machine1, _},
- {attribute, _, module, mac3},
- {attribute, _, m, mac3},
- {attribute, _, ms, "mac3"},
- {attribute, _, machine2, _}
- | _] = List,
+ File = filename:join(proplists:get_value(data_dir, Config), "mac3.erl"),
+ {ok, List} = epp:parse_file(File, [], []),
+ [_,
+ {attribute, Anno, l, Line1},
+ {attribute, _, f, File},
+ {attribute, _, machine1, _},
+ {attribute, _, module, mac3},
+ {attribute, _, m, mac3},
+ {attribute, _, ms, "mac3"},
+ {attribute, _, machine2, _}
+ | _] = List,
Line1 = erl_anno:line(Anno),
ok.
-variable_1(doc) ->
- [];
-variable_1(suite) ->
- [];
variable_1(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line File = filename:join(DataDir, "variable_1.erl"),
- ?line true = os:putenv("VAR", DataDir),
+ DataDir = proplists:get_value(data_dir, Config),
+ File = filename:join(DataDir, "variable_1.erl"),
+ true = os:putenv("VAR", DataDir),
%% variable_1.erl includes variable_1_include.hrl and
%% variable_1_include_dir.hrl.
- ?line {ok, List} = epp:parse_file(File, [], []),
- ?line {value, {attribute,_,a,{value1,value2}}} =
+ {ok, List} = epp:parse_file(File, [], []),
+ {value, {attribute,_,a,{value1,value2}}} =
lists:keysearch(a,3,List),
ok.
-otp_4870(doc) ->
- ["undef without module declaration"];
-otp_4870(suite) ->
- [];
+%% undef without module declaration.
otp_4870(Config) when is_list(Config) ->
Ts = [{otp_4870,
<<"-undef(foo).
">>,
[]}],
- ?line [] = check(Config, Ts),
+ [] = check(Config, Ts),
ok.
-otp_4871(doc) ->
- ["crashing erl_scan"];
-otp_4871(suite) ->
- [];
+%% crashing erl_scan
otp_4871(Config) when is_list(Config) ->
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "otp_4871.erl"),
- ?line ok = file:write_file(File, "-module(otp_4871)."),
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "otp_4871.erl"),
+ ok = file:write_file(File, "-module(otp_4871)."),
%% Testing crash in erl_scan. Unfortunately there currently is
%% no known way to crash erl_scan so it is emulated by killing the
%% file io server. This assumes lots of things about how
%% the processes are started and how monitors are set up,
%% so there are some sanity checks before killing.
- ?line {ok,Epp} = epp:open(File, []),
+ {ok,Epp} = epp:open(File, []),
timer:sleep(1),
- ?line true = current_module(Epp, epp),
- ?line {monitored_by,[Io]} = process_info(Epp, monitored_by),
- ?line true = current_module(Io, file_io_server),
- ?line exit(Io, emulate_crash),
+ true = current_module(Epp, epp),
+ {monitored_by,[Io]} = process_info(Epp, monitored_by),
+ true = current_module(Io, file_io_server),
+ exit(Io, emulate_crash),
timer:sleep(1),
- ?line {error,{_Line,epp,cannot_parse}} = otp_4871_parse_file(Epp),
- ?line epp:close(Epp),
+ {error,{_Line,epp,cannot_parse}} = otp_4871_parse_file(Epp),
+ epp:close(Epp),
ok.
current_module(Pid, Mod) ->
@@ -288,12 +257,9 @@ otp_4871_parse_file(Epp) ->
Other -> Other
end.
-otp_5362(doc) ->
- ["OTP-5362. The -file attribute is recognized."];
-otp_5362(suite) ->
- [];
+%% OTP-5362. The -file attribute is recognized.
otp_5362(Config) when is_list(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
Copts = [return, strong_validation,{i,Dir}],
@@ -317,12 +283,12 @@ otp_5362(Config) when is_list(Config) ->
Incl3 = <<"glurk(Foo) -> % line 1
bar.
">>,
- ?line ok = file:write_file(File_Incl, Incl),
- ?line ok = file:write_file(File_Incl2, Incl2),
- ?line ok = file:write_file(File_Incl3, Incl3),
+ ok = file:write_file(File_Incl, Incl),
+ ok = file:write_file(File_Incl2, Incl2),
+ ok = file:write_file(File_Incl3, Incl3),
- ?line {ok, incl_5362, InclWarnings} = compile:file(File_Incl, Copts),
- ?line true = message_compare(
+ {ok, incl_5362, InclWarnings} = compile:file(File_Incl, Copts),
+ true = message_compare(
[{File_Incl3,[{{1,1},erl_lint,{unused_function,{glurk,1}}},
{{1,7},erl_lint,{unused_var,'Foo'}}]},
{File_Incl,[{{7,15},erl_lint,{unused_function,{hi,1}}},
@@ -352,11 +318,11 @@ otp_5362(Config) when is_list(Config) ->
-file(\"">>,File_Back,<<"\", 2).
">>],
- ?line ok = file:write_file(File_Back, Back),
- ?line ok = file:write_file(File_Back_hrl, list_to_binary(Back_hrl)),
+ ok = file:write_file(File_Back, Back),
+ ok = file:write_file(File_Back_hrl, list_to_binary(Back_hrl)),
- ?line {ok, back_5362, BackWarnings} = compile:file(File_Back, Copts),
- ?line true = message_compare(
+ {ok, back_5362, BackWarnings} = compile:file(File_Back, Copts),
+ true = message_compare(
[{File_Back,[{{4,19},erl_lint,{unused_var,'V'}}]}],
BackWarnings),
file:delete(File_Back),
@@ -380,11 +346,11 @@ otp_5362(Config) when is_list(Config) ->
foo.
">>],
- ?line ok = file:write_file(File_Change, list_to_binary(Change)),
+ ok = file:write_file(File_Change, list_to_binary(Change)),
- ?line {ok, change_5362, ChangeWarnings} =
+ {ok, change_5362, ChangeWarnings} =
compile:file(File_Change, Copts),
- ?line true = message_compare(
+ true = message_compare(
[{File_Change,[{{1002,21},erl_lint,{unused_var,'B'}}]},
{"other.file",[{{105,21},erl_lint,{unused_var,'A'}}]}],
lists:usort(ChangeWarnings)),
@@ -412,9 +378,9 @@ otp_5362(Config) when is_list(Config) ->
-file(?FILE, ?LINE). c(C) -> % line 47
3.
">>,
- ?line ok = file:write_file(File_Blank, Blank),
- ?line {ok, blank_5362, BlankWarnings} = compile:file(File_Blank, Copts),
- ?line true = message_compare(
+ ok = file:write_file(File_Blank, Blank),
+ {ok, blank_5362, BlankWarnings} = compile:file(File_Blank, Copts),
+ true = message_compare(
[{File_Blank,[{{18,3},erl_lint,{unused_var,'Q'}},
{{20,18},erl_lint,{unused_var,'A'}},
{{44,18},erl_lint,{unused_var,'B'}},
@@ -438,16 +404,16 @@ otp_5362(Config) when is_list(Config) ->
FILE1 = <<"ii() -> ?FILE.
">>,
FILE_Mod = file_5362,
- ?line ok = file:write_file(FILE_incl, FILE),
- ?line ok = file:write_file(FILE_incl1, FILE1),
+ ok = file:write_file(FILE_incl, FILE),
+ ok = file:write_file(FILE_incl1, FILE1),
FILE_Copts = [return, {i,Dir},{outdir,Dir}],
- ?line {ok, file_5362, []} = compile:file(FILE_incl, FILE_Copts),
+ {ok, file_5362, []} = compile:file(FILE_incl, FILE_Copts),
AbsFile = filename:rootname(FILE_incl, ".erl"),
- ?line {module, FILE_Mod} = code:load_abs(AbsFile, FILE_Mod),
- ?line II = FILE_Mod:ii(),
- ?line "file_incl_5362.erl" = filename:basename(II),
- ?line FF = FILE_Mod:ff(),
- ?line "other_file" = filename:basename(FF),
+ {module, FILE_Mod} = code:load_abs(AbsFile, FILE_Mod),
+ II = FILE_Mod:ii(),
+ "file_incl_5362.erl" = filename:basename(II),
+ FF = FILE_Mod:ff(),
+ "other_file" = filename:basename(FF),
code:purge(file_5362),
file:delete(FILE_incl),
@@ -456,12 +422,12 @@ otp_5362(Config) when is_list(Config) ->
ok.
pmod(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line Pmod = filename:join(DataDir, "pmod.erl"),
- ?line case epp:parse_file([Pmod], [], []) of
+ DataDir = proplists:get_value(data_dir, Config),
+ Pmod = filename:join(DataDir, "pmod.erl"),
+ case epp:parse_file([Pmod], [], []) of
{ok,Forms} ->
- %% ?line io:format("~p\n", [Forms]),
- ?line [] = [F || {error,_}=F <- Forms],
+ %% io:format("~p\n", [Forms]),
+ [] = [F || {error,_}=F <- Forms],
ok
end,
ok.
@@ -474,17 +440,14 @@ not_circular(Config) when is_list(Config) ->
<<"-define(S(S), ??S).\n"
"t() -> \"string\" = ?S(string), ok.\n">>,
ok}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-skip_header(doc) ->
- ["Skip some bytes in the beginning of the file."];
-skip_header(suite) ->
- [];
+%% Skip some bytes in the beginning of the file.
skip_header(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line File = filename:join([PrivDir, "epp_test_skip_header.erl"]),
- ?line ok = file:write_file(File,
+ PrivDir = proplists:get_value(priv_dir, Config),
+ File = filename:join([PrivDir, "epp_test_skip_header.erl"]),
+ ok = file:write_file(File,
<<"some bytes
in the beginning of the file
that should be skipped
@@ -494,23 +457,20 @@ skip_header(Config) when is_list(Config) ->
main(_) -> ?MODULE.
">>),
- ?line {ok, Fd} = file:open(File, [read]),
- ?line io:get_line(Fd, ''),
- ?line io:get_line(Fd, ''),
- ?line io:get_line(Fd, ''),
- ?line {ok, Epp} = epp:open(list_to_atom(File), Fd, 4, [], []),
-
- ?line Forms = epp:parse_file(Epp),
- ?line [] = [Reason || {error, Reason} <- Forms],
- ?line ok = epp:close(Epp),
- ?line ok = file:close(Fd),
+ {ok, Fd} = file:open(File, [read]),
+ io:get_line(Fd, ''),
+ io:get_line(Fd, ''),
+ io:get_line(Fd, ''),
+ {ok, Epp} = epp:open(list_to_atom(File), Fd, 4, [], []),
+
+ Forms = epp:parse_file(Epp),
+ [] = [Reason || {error, Reason} <- Forms],
+ ok = epp:close(Epp),
+ ok = file:close(Fd),
ok.
-otp_6277(doc) ->
- ["?MODULE before module declaration."];
-otp_6277(suite) ->
- [];
+%% ?MODULE before module declaration.
otp_6277(Config) when is_list(Config) ->
Ts = [{otp_6277,
<<"-undef(ASSERT).
@@ -518,15 +478,12 @@ otp_6277(Config) when is_list(Config) ->
?ASSERT().">>,
[{error,{{4,16},epp,{undefined,'MODULE', none}}}]}],
- ?line [] = check(Config, Ts),
+ [] = check(Config, Ts),
ok.
-otp_7702(doc) ->
- ["OTP-7702. Wrong line number in stringifying macro expansion."];
-otp_7702(suite) ->
- [];
+%% OTP-7702. Wrong line number in stringifying macro expansion.
otp_7702(Config) when is_list(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
File = filename:join(Dir, "file_7702.erl"),
Contents = <<"-module(file_7702).
@@ -542,8 +499,8 @@ otp_7702(Config) when is_list(Config) ->
end).
t() ->
?RECEIVE(foo, bar).">>,
- ?line ok = file:write_file(File, Contents),
- ?line {ok, file_7702, []} =
+ ok = file:write_file(File, Contents),
+ {ok, file_7702, []} =
compile:file(File, [debug_info,return,{outdir,Dir}]),
BeamFile = filename:join(Dir, "file_7702.beam"),
@@ -551,8 +508,7 @@ otp_7702(Config) when is_list(Config) ->
{file_7702,[{abstract_code,{_,Forms}}]} = AC,
Forms2 = unopaque_forms(Forms),
- ?line
- [{attribute,1,file,_},
+ [{attribute,1,file,_},
_,
_,
{function,_,t,0,
@@ -586,10 +542,7 @@ otp_7702(Config) when is_list(Config) ->
ok.
-otp_8130(doc) ->
- ["OTP-8130. Misc tests."];
-otp_8130(suite) ->
- [];
+%% OTP-8130. Misc tests.
otp_8130(Config) when is_list(Config) ->
true = os:putenv("epp_inc1", "stdlib"),
Ts = [{otp_8130_1,
@@ -621,6 +574,10 @@ otp_8130(Config) when is_list(Config) ->
" 2 end,\n"
" 7),\n"
" {2,7} =\n"
+ " ?M1(begin 1 = fun _Name () -> 1 end(),\n"
+ " 2 end,\n"
+ " 7),\n"
+ " {2,7} =\n"
" ?M1(begin 1 = fun t0/0(),\n"
" 2 end,\n"
" 7),\n"
@@ -645,6 +602,9 @@ otp_8130(Config) when is_list(Config) ->
" ?M1(begin yes = try 1 of 1 -> yes after foo end,\n"
" 2 end,\n"
" 7),\n"
+ " {[42],7} =\n"
+ " ?M1([42],\n"
+ " 7),\n"
"ok.\n">>,
ok},
@@ -682,7 +642,7 @@ otp_8130(Config) when is_list(Config) ->
{1,1}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
Cs = [{otp_8130_c1,
<<"-define(M1(A), if\n"
@@ -728,11 +688,16 @@ otp_8130(Config) when is_list(Config) ->
{errors,[{{2,2},epp,{include,lib,"$apa/foo.hrl"}}],[]}},
- {otp_8130_c9,
+ {otp_8130_c9a,
<<"-define(S, ?S).\n"
"t() -> ?S.\n">>,
{errors,[{{2,9},epp,{circular,'S', none}}],[]}},
+ {otp_8130_c9b,
+ <<"-define(S(), ?S()).\n"
+ "t() -> ?S().\n">>,
+ {errors,[{{2,9},epp,{circular,'S', 0}}],[]}},
+
{otp_8130_c10,
<<"\n-file.">>,
{errors,[{{2,2},epp,{bad,file}}],[]}},
@@ -799,6 +764,10 @@ otp_8130(Config) when is_list(Config) ->
<<"\n-include(\"no such file.erl\").\n">>,
{errors,[{{2,2},epp,{include,file,"no such file.erl"}}],[]}},
+ {otp_8130_c25,
+ <<"\n-define(A.\n">>,
+ {errors,[{{2,2},epp,{bad,define}}],[]}},
+
{otp_8130_7,
<<"-record(b, {b}).\n"
"-define(A, {{a,#b.b.\n"
@@ -807,7 +776,7 @@ otp_8130(Config) when is_list(Config) ->
{{3,19},epp,{undefined,'A',none}}],[]}}
],
- ?line [] = compile(Config, Cs),
+ [] = compile(Config, Cs),
Cks = [{otp_check_1,
<<"\n-include_lib(\"epp_test.erl\").\n">>,
@@ -817,24 +786,25 @@ otp_8130(Config) when is_list(Config) ->
<<"\n-include(\"epp_test.erl\").\n">>,
[{error,{{2,2},epp,{depth,"include"}}}]}
],
- ?line [] = check(Config, Cks),
+ [] = check(Config, Cks),
- ?line Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "otp_8130.erl"),
- ?line ok = file:write_file(File,
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "otp_8130.erl"),
+ ok = file:write_file(File,
"-module(otp_8130).\n"
"-define(a, 3.14).\n"
"t() -> ?a.\n"),
- ?line {ok,Epp} = epp:open(File, []),
- ?line ['BASE_MODULE','BASE_MODULE_STRING','BEAM','FILE','LINE',
- 'MACHINE','MODULE','MODULE_STRING'] = macs(Epp),
- ?line {ok,[{'-',_},{atom,_,file}|_]} = epp:scan_erl_form(Epp),
- ?line {ok,[{'-',_},{atom,_,module}|_]} = epp:scan_erl_form(Epp),
- ?line {ok,[{atom,_,t}|_]} = epp:scan_erl_form(Epp),
- ?line {eof,_} = epp:scan_erl_form(Epp),
- ?line ['BASE_MODULE','BASE_MODULE_STRING','BEAM','FILE','LINE',
- 'MACHINE','MODULE','MODULE_STRING',a] = macs(Epp),
- ?line epp:close(Epp),
+ {ok,Epp} = epp:open(File, []),
+ PreDefMacs = macs(Epp),
+ ['BASE_MODULE','BASE_MODULE_STRING','BEAM','FILE',
+ 'FUNCTION_ARITY','FUNCTION_NAME',
+ 'LINE','MACHINE','MODULE','MODULE_STRING'] = PreDefMacs,
+ {ok,[{'-',_},{atom,_,file}|_]} = epp:scan_erl_form(Epp),
+ {ok,[{'-',_},{atom,_,module}|_]} = epp:scan_erl_form(Epp),
+ {ok,[{atom,_,t}|_]} = epp:scan_erl_form(Epp),
+ {eof,_} = epp:scan_erl_form(Epp),
+ [a] = macs(Epp) -- PreDefMacs,
+ epp:close(Epp),
%% escript
ModuleStr = "any_name",
@@ -843,27 +813,27 @@ otp_8130(Config) when is_list(Config) ->
PreDefMacros = [{'MODULE', Module, redefine},
{'MODULE_STRING', ModuleStr, redefine},
a, {b,2}],
- ?line {ok,Epp2} = epp:open(File, [], PreDefMacros),
- ?line [{atom,_,true}] = macro(Epp2, a),
- ?line [{integer,_,2}] = macro(Epp2, b),
- ?line false = macro(Epp2, c),
- ?line epp:close(Epp2)
+ {ok,Epp2} = epp:open(File, [], PreDefMacros),
+ [{atom,_,true}] = macro(Epp2, a),
+ [{integer,_,2}] = macro(Epp2, b),
+ false = macro(Epp2, c),
+ epp:close(Epp2)
end(),
fun() ->
PreDefMacros = [{a,b,c}],
- ?line {error,{bad,{a,b,c}}} = epp:open(File, [], PreDefMacros)
+ {error,{bad,{a,b,c}}} = epp:open(File, [], PreDefMacros)
end(),
fun() ->
PreDefMacros = [a, {a,1}],
- ?line {error,{redefine,a}} = epp:open(File, [], PreDefMacros)
+ {error,{redefine,a}} = epp:open(File, [], PreDefMacros)
end(),
fun() ->
PreDefMacros = [{a,1},a],
- ?line {error,{redefine,a}} = epp:open(File, [], PreDefMacros)
+ {error,{redefine,a}} = epp:open(File, [], PreDefMacros)
end(),
- ?line {error,enoent} = epp:open("no such file", []),
- ?line {error,enoent} = epp:parse_file("no such file", [], []),
+ {error,enoent} = epp:open("no such file", []),
+ {error,enoent} = epp:parse_file("no such file", [], []),
_ = ifdef(Config),
@@ -1003,7 +973,7 @@ ifdef(Config) ->
"t() -> a.\n">>,
{errors,[{{2,2},epp,{'NYI','if'}}],[]}}
],
- ?line [] = compile(Config, Cs),
+ [] = compile(Config, Cs),
Ts = [{ifdef_1,
<<"-ifdef(a).\n"
@@ -1084,14 +1054,69 @@ ifdef(Config) ->
ok}
],
- ?line [] = run(Config, Ts).
+ [] = run(Config, Ts).
+
+%% OTP-12847: Test the -error directive.
+test_error(Config) ->
+ Cs = [{error_c1,
+ <<"-error(\"string and macro: \" ?MODULE_STRING).\n"
+ "-ifdef(NOT_DEFINED).\n"
+ " -error(\"this one will be skipped\").\n"
+ "-endif.\n">>,
+ {errors,[{1,epp,{error,"string and macro: epp_test"}}],[]}},
+
+ {error_c2,
+ <<"-ifdef(CONFIG_A).\n"
+ " t() -> a.\n"
+ "-else.\n"
+ "-ifdef(CONFIG_B).\n"
+ " t() -> b.\n"
+ "-else.\n"
+ "-error(\"Neither CONFIG_A nor CONFIG_B are available\").\n"
+ "-endif.\n"
+ "-endif.\n">>,
+ {errors,[{7,epp,{error,"Neither CONFIG_A nor CONFIG_B are available"}}],[]}},
+
+ {error_c3,
+ <<"-error(a b c).\n">>,
+ {errors,[{1,epp,{bad,error}}],[]}}
+
+ ],
+ [] = compile(Config, Cs),
+ ok.
+%% OTP-12847: Test the -warning directive.
+test_warning(Config) ->
+ Cs = [{warn_c1,
+ <<"-warning({a,term,?MODULE}).\n"
+ "-ifdef(NOT_DEFINED).\n"
+ "-warning(\"this one will be skipped\").\n"
+ "-endif.\n">>,
+ {warnings,[{1,epp,{warning,{a,term,epp_test}}}]}},
+
+ {warn_c2,
+ <<"-ifdef(CONFIG_A).\n"
+ " t() -> a.\n"
+ "-else.\n"
+ "-ifdef(CONFIG_B).\n"
+ " t() -> b.\n"
+ "-else.\n"
+ " t() -> c.\n"
+ "-warning(\"Using fallback\").\n"
+ "-endif.\n"
+ "-endif.\n">>,
+ {warnings,[{8,epp,{warning,"Using fallback"}}]}},
+
+ {warn_c3,
+ <<"-warning(a b c).\n">>,
+ {errors,[{1,epp,{bad,warning}}],[]}}
+ ],
-overload_mac(doc) ->
- ["Advanced test on overloading macros."];
-overload_mac(suite) ->
- [];
+ [] = compile(Config, Cs),
+ ok.
+
+%% Advanced test on overloading macros.
overload_mac(Config) when is_list(Config) ->
Cs = [
%% '-undef' removes all definitions of a macro
@@ -1122,7 +1147,7 @@ overload_mac(Config) when is_list(Config) ->
"t() -> ?A(1).">>,
{errors,[{{4,9},epp,{mismatch,'A'}}],[]}}
],
- ?line [] = compile(Config, Cs),
+ [] = compile(Config, Cs),
Ts = [
{overload_mac_r1,
@@ -1146,27 +1171,24 @@ overload_mac(Config) when is_list(Config) ->
"t() -> ?A(1).">>,
1}
],
- ?line [] = run(Config, Ts).
+ [] = run(Config, Ts).
-otp_8388(doc) ->
- ["OTP-8388. More tests on overloaded macros."];
-otp_8388(suite) ->
- [];
+%% OTP-8388. More tests on overloaded macros.
otp_8388(Config) when is_list(Config) ->
- Dir = ?config(priv_dir, Config),
- ?line File = filename:join(Dir, "otp_8388.erl"),
- ?line ok = file:write_file(File, <<"-module(otp_8388)."
+ Dir = proplists:get_value(priv_dir, Config),
+ File = filename:join(Dir, "otp_8388.erl"),
+ ok = file:write_file(File, <<"-module(otp_8388)."
"-define(LINE, a).">>),
fun() ->
PreDefMacros = [{'LINE', a}],
- ?line {error,{redefine_predef,'LINE'}} =
+ {error,{redefine_predef,'LINE'}} =
epp:open(File, [], PreDefMacros)
end(),
fun() ->
PreDefMacros = ['LINE'],
- ?line {error,{redefine_predef,'LINE'}} =
+ {error,{redefine_predef,'LINE'}} =
epp:open(File, [], PreDefMacros)
end(),
@@ -1196,43 +1218,22 @@ otp_8388(Config) when is_list(Config) ->
"test() -> ?BAR(1).\n">>,
{errors,[{{4,12},epp,{undefined,'FOO',1}}],[]}}
],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-otp_8470(doc) ->
- ["OTP-8470. Bugfix (one request - two replies)."];
-otp_8470(suite) ->
- [];
+%% OTP-8470. Bugfix (one request - two replies).
otp_8470(Config) when is_list(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
C = <<"-file(\"erl_parse.yrl\", 486).\n"
"-file(\"erl_parse.yrl\", 488).\n">>,
- ?line File = filename:join(Dir, "otp_8470.erl"),
- ?line ok = file:write_file(File, C),
- ?line {ok, _List} = epp:parse_file(File, [], []),
+ File = filename:join(Dir, "otp_8470.erl"),
+ ok = file:write_file(File, C),
+ {ok, _List} = epp:parse_file(File, [], []),
file:delete(File),
- ?line receive _ -> fail() after 0 -> ok end,
+ receive _ -> fail() after 0 -> ok end,
ok.
-otp_8503(doc) ->
- ["OTP-8503. Record with no fields is considered typed."];
-otp_8503(suite) ->
- [];
-otp_8503(Config) when is_list(Config) ->
- Dir = ?config(priv_dir, Config),
- C = <<"-record(r, {}).">>,
- ?line File = filename:join(Dir, "otp_8503.erl"),
- ?line ok = file:write_file(File, C),
- ?line {ok, List} = epp:parse_file(File, [], []),
- ?line [_] = [F || {attribute,_,type,{{record,r},[],[]}}=F <- List],
- file:delete(File),
- ?line receive _ -> fail() after 0 -> ok end,
- ok.
-
-otp_8562(doc) ->
- ["OTP-8503. Record with no fields is considered typed."];
-otp_8562(suite) ->
- [];
+%% OTP-8562. Record with no fields is considered typed.
otp_8562(Config) when is_list(Config) ->
Cs = [{otp_8562,
<<"-define(P(), {a,b}.\n"
@@ -1240,13 +1241,10 @@ otp_8562(Config) when is_list(Config) ->
{errors,[{{1,60},epp,missing_parenthesis},
{{2,13},epp,missing_parenthesis}], []}}
],
- ?line [] = compile(Config, Cs),
+ [] = compile(Config, Cs),
ok.
-otp_8911(doc) ->
- ["OTP-8911. -file and file inclusion bug"];
-otp_8911(suite) ->
- [];
+%% OTP-8911. -file and file inclusion bug.
otp_8911(Config) when is_list(Config) ->
case test_server:is_cover() of
true ->
@@ -1255,8 +1253,8 @@ otp_8911(Config) when is_list(Config) ->
do_otp_8911(Config)
end.
do_otp_8911(Config) ->
- ?line {ok, CWD} = file:get_cwd(),
- ?line ok = file:set_cwd(?config(priv_dir, Config)),
+ {ok, CWD} = file:get_cwd(),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
File = "i.erl",
Cont = <<"-module(i).
@@ -1266,40 +1264,34 @@ do_otp_8911(Config) ->
t() ->
a.
">>,
- ?line ok = file:write_file(File, Cont),
+ ok = file:write_file(File, Cont),
Incl = <<"-file(\"fil2\", 35).
t1() ->
b.
">>,
File1 = "i1.erl",
- ?line ok = file:write_file(File1, Incl),
+ ok = file:write_file(File1, Incl),
- ?line {ok, i} = cover:compile(File),
- ?line a = i:t(),
- ?line {ok,[{{i,6},1}]} = cover:analyse(i, calls, line),
- ?line cover:stop(),
+ {ok, i} = cover:compile(File),
+ a = i:t(),
+ {ok,[{{i,6},1}]} = cover:analyse(i, calls, line),
+ cover:stop(),
file:delete(File),
file:delete(File1),
- ?line file:set_cwd(CWD),
+ file:set_cwd(CWD),
ok.
-otp_8665(doc) ->
- ["OTP-8665. Bugfix premature end."];
-otp_8665(suite) ->
- [];
+%% OTP-8665. Bugfix premature end.
otp_8665(Config) when is_list(Config) ->
Cs = [{otp_8562,
<<"-define(A, a)\n">>,
{errors,[{{1,54},epp,premature_end}],[]}}
],
- ?line [] = compile(Config, Cs),
+ [] = compile(Config, Cs),
ok.
-otp_10302(doc) ->
- "OTP-10302. Unicode characters scanner/parser.";
-otp_10302(suite) ->
- [];
+%% OTP-10302. Unicode characters scanner/parser.
otp_10302(Config) when is_list(Config) ->
%% Two messages (one too many). Keeps otp_4871 happy.
Cs = [{otp_8562,
@@ -1308,7 +1300,7 @@ otp_10302(Config) when is_list(Config) ->
{3,file_io_server,invalid_unicode}],[]}}
],
[] = compile(Config, Cs),
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
File = filename:join(Dir, "otp_10302.erl"),
utf8 = encoding("coding: utf-8", File),
utf8 = encoding("coding: UTF-8", File),
@@ -1370,13 +1362,10 @@ encoding_nocom(Enc, File) ->
ok = file:close(Fd),
E = epp:read_encoding(File, Options).
-otp_10820(doc) ->
- "OTP-10820. Unicode filenames.";
-otp_10820(suite) ->
- [];
+%% OTP-10820. Unicode filenames.
otp_10820(Config) when is_list(Config) ->
L = [915,953,959,973,957,953,954,959,957,964],
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
File = filename:join(Dir, L++".erl"),
C1 = <<"%% coding: utf-8\n -module(any).">>,
ok = do_otp_10820(File, C1, "+pc latin1"),
@@ -1395,12 +1384,9 @@ do_otp_10820(File, C, PC) ->
true = test_server:stop_node(Node),
ok.
-otp_11728(doc) ->
- ["OTP-11728. Bugfix circular macro."];
-otp_11728(suite) ->
- [];
+%% OTP-11728. Bugfix circular macro.
otp_11728(Config) when is_list(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
H = <<"-define(MACRO,[[]++?MACRO]).">>,
HrlFile = filename:join(Dir, "otp_11728.hrl"),
ok = file:write_file(HrlFile, H),
@@ -1422,7 +1408,7 @@ otp_11728(Config) when is_list(Config) ->
%% Check the new API for setting the default encoding.
encoding(Config) when is_list(Config) ->
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
ErlFile = filename:join(Dir, "encoding.erl"),
%% Try a latin-1 file with no encoding given.
@@ -1476,6 +1462,102 @@ encoding(Config) when is_list(Config) ->
epp_parse_file(ErlFile, [{default_encoding,utf8},extra]),
ok.
+extends(Config) ->
+ Cs = [{extends_c1,
+ <<"-extends(some.other.module).\n">>,
+ {errors,[{1,erl_parse,["syntax error before: ","'.'"]}],[]}}],
+ [] = compile(Config, Cs),
+
+ Ts = [{extends_1,
+ <<"-extends(some_other_module).\n"
+ "t() -> {?BASE_MODULE,?BASE_MODULE_STRING}.\n">>,
+ {some_other_module,"some_other_module"}}],
+
+ [] = run(Config, Ts),
+ ok.
+
+function_macro(Config) ->
+ Cs = [{f_c1,
+ <<"-define(FUNCTION_NAME, a).\n"
+ "-define(FUNCTION_ARITY, a).\n"
+ "-define(FS,\n"
+ " atom_to_list(?FUNCTION_NAME) ++ \"/\" ++\n"
+ " integer_to_list(?FUNCTION_ARITY)).\n"
+ "-attr({f,?FUNCTION_NAME}).\n"
+ "-attr2(?FS).\n"
+ "-file(?FUNCTION_ARITY, 1).\n"
+ "f1() ?FUNCTION_NAME/?FUNCTION_ARITY.\n"
+ "f2(?FUNCTION_NAME.\n">>,
+ {errors,[{1,epp,{redefine_predef,'FUNCTION_NAME'}},
+ {2,epp,{redefine_predef,'FUNCTION_ARITY'}},
+ {6,epp,{illegal_function,'FUNCTION_NAME'}},
+ {7,epp,{illegal_function,'FUNCTION_NAME'}},
+ {8,epp,{illegal_function,'FUNCTION_ARITY'}},
+ {9,erl_parse,["syntax error before: ","f1"]},
+ {10,erl_parse,["syntax error before: ","'.'"]}],
+ []}},
+
+ {f_c2,
+ <<"a({a) -> ?FUNCTION_NAME.\n"
+ "b(}{) -> ?FUNCTION_ARITY.\n"
+ "c(?FUNCTION_NAME, ?not_defined) -> ok.\n">>,
+ {errors,[{1,erl_parse,["syntax error before: ","')'"]},
+ {2,erl_parse,["syntax error before: ","'}'"]},
+ {3,epp,{undefined,not_defined,none}}],
+ []}},
+
+ {f_c3,
+ <<"?FUNCTION_NAME() -> ok.\n"
+ "?FUNCTION_ARITY() -> ok.\n">>,
+ {errors,[{1,epp,{illegal_function_usage,'FUNCTION_NAME'}},
+ {2,epp,{illegal_function_usage,'FUNCTION_ARITY'}}],
+ []}}
+ ],
+
+ [] = compile(Config, Cs),
+
+ Ts = [{f_1,
+ <<"t() -> {a,0} = a(), {b,1} = b(1), {c,2} = c(1, 2),\n"
+ " {d,1} = d({d,1}), {foo,1} = foo(foo), ok.\n"
+ "a() -> {?FUNCTION_NAME,?FUNCTION_ARITY}.\n"
+ "b(_) -> {?FUNCTION_NAME,?FUNCTION_ARITY}.\n"
+ "c(_, (_)) -> {?FUNCTION_NAME,?FUNCTION_ARITY}.\n"
+ "d({?FUNCTION_NAME,?FUNCTION_ARITY}=F) -> F.\n"
+ "-define(FOO, foo).\n"
+ "?FOO(?FOO) -> {?FUNCTION_NAME,?FUNCTION_ARITY}.\n">>,
+ ok},
+
+ {f_2,
+ <<"t() ->\n"
+ " A = {a,[<<0:24>>,#{a=>1,b=>2}]},\n"
+ " 1 = a(A),\n"
+ " ok.\n"
+ "a({a,[<<_,_,_>>,#{a:=1,b:=2}]}) -> ?FUNCTION_ARITY.\n">>,
+ ok},
+
+ {f_3,
+ <<"-define(FS,\n"
+ " atom_to_list(?FUNCTION_NAME) ++ \"/\" ++\n"
+ " integer_to_list(?FUNCTION_ARITY)).\n"
+ "t() ->\n"
+ " {t,0} = {?FUNCTION_NAME,?FUNCTION_ARITY},\n"
+ " \"t/0\" = ?FS,\n"
+ " ok.\n">>,
+ ok},
+
+ {f_4,
+ <<"-define(__, _, _).\n"
+ "-define(FF, ?FUNCTION_NAME, ?FUNCTION_ARITY).\n"
+ "a(?__) -> 2 = ?FUNCTION_ARITY.\n"
+ "b(?FUNCTION_ARITY, ?__) -> ok.\n"
+ "c(?FF) -> ok.\n"
+ "t() -> a(1, 2), b(3, 1, 2), c(c, 2), ok.\n">>,
+ ok}
+ ],
+ [] = run(Config, Ts),
+
+ ok.
+
check(Config, Tests) ->
eval_tests(Config, fun check_test/2, Tests).
@@ -1494,7 +1576,7 @@ eval_tests(Config, Fun, Tests) ->
true ->
BadL;
false ->
- ?t:format("~nTest ~p failed. Expected~n ~p~n"
+ io:format("~nTest ~p failed. Expected~n ~p~n"
"but got~n ~p~n", [N, E, Return]),
fail()
end
@@ -1504,22 +1586,24 @@ eval_tests(Config, Fun, Tests) ->
check_test(Config, Test) ->
Filename = "epp_test.erl",
- ?line PrivDir = ?config(priv_dir, Config),
- ?line File = filename:join(PrivDir, Filename),
- ?line ok = file:write_file(File, Test),
- ?line case epp:parse_file(File, [PrivDir], []) of
- {ok,Forms} ->
- [E || E={error,_} <- Forms];
- {error,Error} ->
- Error
- end.
+ PrivDir = proplists:get_value(priv_dir, Config),
+ File = filename:join(PrivDir, Filename),
+ ok = file:write_file(File, Test),
+ case epp:parse_file(File, [PrivDir], []) of
+ {ok,Forms} ->
+ Errors = [E || E={error,_} <- Forms],
+ call_format_error([E || {error,E} <- Errors]),
+ Errors;
+ {error,Error} ->
+ Error
+ end.
compile_test(Config, Test0) ->
Test = [<<"-module(epp_test). -compile(export_all). ">>, Test0],
Filename = "epp_test.erl",
- ?line PrivDir = ?config(priv_dir, Config),
- ?line File = filename:join(PrivDir, Filename),
- ?line ok = file:write_file(File, Test),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ File = filename:join(PrivDir, Filename),
+ ok = file:write_file(File, Test),
Opts = [export_all,return,nowarn_unused_record,{outdir,PrivDir}],
case compile_file(File, Opts) of
{ok, Ws} -> warnings(File, Ws);
@@ -1528,8 +1612,11 @@ compile_test(Config, Test0) ->
warnings(File, Ws) ->
case lists:append([W || {F, W} <- Ws, F =:= File]) of
- [] -> [];
- L -> {warnings, L}
+ [] ->
+ [];
+ L ->
+ call_format_error(L),
+ {warnings, L}
end.
compile_file(File, Opts) ->
@@ -1540,12 +1627,20 @@ compile_file(File, Opts) ->
end.
errs([{File,Es}|L], File) ->
+ call_format_error(Es),
Es ++ errs(L, File);
errs([_|L], File) ->
errs(L, File);
errs([], _File) ->
[].
+%% Smoke test and coverage of format_error/1.
+call_format_error([{_,M,E}|T]) ->
+ _ = M:format_error(E),
+ call_format_error(T);
+call_format_error([]) ->
+ ok.
+
epp_parse_file(File, Opts) ->
case epp:parse_file(File, Opts) of
{ok, Forms} ->
@@ -1560,20 +1655,19 @@ unopaque_forms(Forms) ->
run_test(Config, Test0) ->
Test = [<<"-module(epp_test). -compile(export_all). ">>, Test0],
Filename = "epp_test.erl",
- ?line PrivDir = ?config(priv_dir, Config),
- ?line File = filename:join(PrivDir, Filename),
- ?line ok = file:write_file(File, Test),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ File = filename:join(PrivDir, Filename),
+ ok = file:write_file(File, Test),
Opts = [return, {i,PrivDir},{outdir,PrivDir}],
- ?line {ok, epp_test, []} = compile:file(File, Opts),
+ {ok, epp_test, []} = compile:file(File, Opts),
AbsFile = filename:rootname(File, ".erl"),
- ?line {module, epp_test} = code:load_abs(AbsFile, epp_test),
- ?line Reply = epp_test:t(),
+ {module, epp_test} = code:load_abs(AbsFile, epp_test),
+ Reply = epp_test:t(),
code:purge(epp_test),
Reply.
fail() ->
- io:format("failed~n"),
- test_server:fail().
+ ct:fail(failed).
message_compare(T, T) ->
true;
@@ -1607,5 +1701,5 @@ ln2(M) ->
%% +fnu means a peer node has to be started; slave will not do
start_node(Name, Xargs) ->
- ?line PA = filename:dirname(code:which(?MODULE)),
+ PA = filename:dirname(code:which(?MODULE)),
test_server:start_node(Name, peer, [{args, "-pa " ++ PA ++ " " ++ Xargs}]).
diff --git a/lib/stdlib/test/epp_SUITE_data/mac.erl b/lib/stdlib/test/epp_SUITE_data/mac.erl
index 210c57e033..9215dcb342 100644
--- a/lib/stdlib/test/epp_SUITE_data/mac.erl
+++ b/lib/stdlib/test/epp_SUITE_data/mac.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/epp_SUITE_data/mac2.erl b/lib/stdlib/test/epp_SUITE_data/mac2.erl
index 0dd83ece06..315870517f 100644
--- a/lib/stdlib/test/epp_SUITE_data/mac2.erl
+++ b/lib/stdlib/test/epp_SUITE_data/mac2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/epp_SUITE_data/mac3.erl b/lib/stdlib/test/epp_SUITE_data/mac3.erl
index e7a3178db7..702a0c38a9 100644
--- a/lib/stdlib/test/epp_SUITE_data/mac3.erl
+++ b/lib/stdlib/test/epp_SUITE_data/mac3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/epp_SUITE_data/pmod.erl b/lib/stdlib/test/epp_SUITE_data/pmod.erl
index ff0ee81116..d846cd9ca2 100644
--- a/lib/stdlib/test/epp_SUITE_data/pmod.erl
+++ b/lib/stdlib/test/epp_SUITE_data/pmod.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/epp_SUITE_data/variable_1.erl b/lib/stdlib/test/epp_SUITE_data/variable_1.erl
index cd6a7bb69a..b731d11e87 100644
--- a/lib/stdlib/test/epp_SUITE_data/variable_1.erl
+++ b/lib/stdlib/test/epp_SUITE_data/variable_1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/epp_SUITE_data/variable_1_include.hrl b/lib/stdlib/test/epp_SUITE_data/variable_1_include.hrl
index 30df6a3309..058f8dfd34 100644
--- a/lib/stdlib/test/epp_SUITE_data/variable_1_include.hrl
+++ b/lib/stdlib/test/epp_SUITE_data/variable_1_include.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/epp_SUITE_data/variable_1_include_dir.hrl b/lib/stdlib/test/epp_SUITE_data/variable_1_include_dir.hrl
index 4e2bd3e41f..453f32d766 100644
--- a/lib/stdlib/test/epp_SUITE_data/variable_1_include_dir.hrl
+++ b/lib/stdlib/test/epp_SUITE_data/variable_1_include_dir.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/erl_anno_SUITE.erl b/lib/stdlib/test/erl_anno_SUITE.erl
index 66b02151a0..71ea9c3e1e 100644
--- a/lib/stdlib/test/erl_anno_SUITE.erl
+++ b/lib/stdlib/test/erl_anno_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,13 +19,13 @@
%%
-module(erl_anno_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), io:format(S, A)).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
-endif.
@@ -34,7 +34,7 @@
init_per_testcase/2, end_per_testcase/2]).
-export([new/1, is_anno/1, generated/1, end_location/1, file/1,
- line/1, location/1, record/1, text/1, bad/1, neg_line/1]).
+ line/1, location/1, record/1, text/1, bad/1]).
-export([parse_abstract/1, mapfold_anno/1]).
@@ -43,10 +43,12 @@ all() ->
groups() ->
[{anno, [], [new, is_anno, generated, end_location, file,
- line, location, record, text, bad, neg_line]},
+ line, location, record, text, bad]},
{parse, [], [parse_abstract, mapfold_anno]}].
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
init_per_suite(Config) ->
Config.
@@ -61,26 +63,21 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_Case, Config) ->
- Dog=?t:timetrap(?t:minutes(1)),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Case, _Config) ->
- Dog=?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
ok.
-define(INFO(T, V), {T, V}).
-dialyzer({no_fail_call, new/1}).
-new(doc) ->
- ["Test erl_anno:new/1"];
+%% Test erl_anno:new/1.
new(_Config) ->
{'EXIT', {badarg, _}} =
(catch erl_anno:new([{location,1},{text, "text"}])), % badarg
ok.
-is_anno(doc) ->
- ["Test erl_anno:is_anno/1"];
+%% Test erl_anno:is_anno/1.
is_anno(_Config) ->
false = erl_anno:is_anno(a),
false = erl_anno:is_anno({a}),
@@ -106,8 +103,7 @@ is_anno(_Config) ->
true = erl_anno:is_anno(A5),
ok.
-generated(doc) ->
- ["Test 'generated'"];
+%% Test 'generated'.
generated(_Config) ->
test(1, [{generated, true}, {generated, false}]),
test(1, [{generated, false}, {generated, true}, {generated, false}]),
@@ -127,8 +123,7 @@ generated(_Config) ->
{generated, false}]),
ok.
-end_location(doc) ->
- ["Test 'end_location'"];
+%% Test 'end_location'.
end_location(_Config) ->
test({1, 17}, [{text, "TEXT", [{end_location, {1, 21}}, {length, 4}]},
{text, "TEXT\n", [{end_location, {2, 1}}, {length, 5}]},
@@ -138,23 +133,20 @@ end_location(_Config) ->
{text, "TEXT\ntxt", [{end_location, 2}, {length, 8}]}]),
ok.
-file(doc) ->
- ["Test 'file'"];
+%% Test 'file'.
file(_Config) ->
test(1, [{file, "name"}, {file, ""}]),
test({1, 17}, [{file, "name"}, {file, ""}]),
ok.
-line(doc) ->
- ["Test 'line'"];
+%% Test 'line'.
line(_Config) ->
test(1, [{line, 17, [{location, 17}]},
{location, {9, 8}, [{line, 9}, {column, 8}]},
{line, 14, [{location, {14, 8}}]}]),
ok.
-location(doc) ->
- ["Test 'location'"];
+%% Test 'location'.
location(_Config) ->
test(1, [{location, 2, [{line,2}]},
{location, {1, 17}, [{line, 1}, {column, 17}]},
@@ -172,8 +164,7 @@ location(_Config) ->
{location, 9, [{column, undefined}]}]),
ok.
-record(doc) ->
- ["Test 'record'"];
+%% Test 'record'.
record(_Config) ->
test({1, 17}, [{record, true}, {record, false}]),
test(1, [{record, true}, {record, false}]),
@@ -193,8 +184,7 @@ record(_Config) ->
{generated, false}]),
ok.
-text(doc) ->
- ["Test 'text'"];
+%% Test 'text'.
text(_Config) ->
test(1, [{text, "text", [{end_location, 1}, {length, 4}]},
{text, "", [{end_location, 1}, {length, 0}]}]),
@@ -203,8 +193,7 @@ text(_Config) ->
ok.
-dialyzer({[no_opaque, no_fail_call], bad/1}).
-bad(doc) ->
- ["Test bad annotations"];
+%% Test bad annotations.
bad(_Config) ->
Line = erl_anno:new(1),
LineColumn = erl_anno:new({1, 17}),
@@ -229,77 +218,8 @@ bad(_Config) ->
(catch erl_anno:record(bad)), % 1st arg not opaque
ok.
-neg_line(doc) ->
- ["Test negative line numbers (OTP 18)"];
-neg_line(_Config) ->
- neg_line1(false),
- neg_line1(true),
- ok.
-
-neg_line1(TextToo) ->
- Minus8_0 = erl_anno:new(-8),
- Plus8_0 = erl_anno:new(8),
- Minus8C_0 = erl_anno:new({-8, 17}),
- Plus8C_0 = erl_anno:new({8, 17}),
-
- [Minus8, Plus8, Minus8C, Plus8C] =
- [case TextToo of
- true ->
- erl_anno:set_text("foo", A);
- false ->
- A
- end || A <- [Minus8_0, Plus8_0, Minus8C_0, Plus8C_0]],
-
- tst(-3, erl_anno:set_location(3, Minus8)),
- tst(-3, erl_anno:set_location(-3, Plus8)),
- tst(-3, erl_anno:set_location(-3, Minus8)),
- tst({-3,9}, erl_anno:set_location({3, 9}, Minus8)),
- tst({-3,9}, erl_anno:set_location({-3, 9}, Plus8)),
- tst({-3,9}, erl_anno:set_location({-3, 9}, Minus8)),
- tst(-3, erl_anno:set_location(3, Minus8C)),
- tst(-3, erl_anno:set_location(-3, Plus8C)),
- tst(-3, erl_anno:set_location(-3, Minus8C)),
- tst({-3,9}, erl_anno:set_location({3, 9}, Minus8C)),
- tst({-3,9}, erl_anno:set_location({-3, 9}, Plus8C)),
- tst({-3,9}, erl_anno:set_location({-3, 9}, Minus8C)),
-
- tst(-8, erl_anno:set_generated(true, Plus8)),
- tst(-8, erl_anno:set_generated(true, Minus8)),
- tst({-8,17}, erl_anno:set_generated(true, Plus8C)),
- tst({-8,17}, erl_anno:set_generated(true, Minus8C)),
- tst(8, erl_anno:set_generated(false, Plus8)),
- tst(8, erl_anno:set_generated(false, Minus8)),
- tst({8,17}, erl_anno:set_generated(false, Plus8C)),
- tst({8,17}, erl_anno:set_generated(false, Minus8C)),
-
- tst(-3, erl_anno:set_line(3, Minus8)),
- tst(-3, erl_anno:set_line(-3, Plus8)),
- tst(-3, erl_anno:set_line(-3, Minus8)),
- tst({-3,17}, erl_anno:set_line(3, Minus8C)),
- tst({-3,17}, erl_anno:set_line(-3, Plus8C)),
- tst({-3,17}, erl_anno:set_line(-3, Minus8C)),
- ok.
-
-tst(Term, Anno) ->
- ?format("Term: ~p\n", [Term]),
- ?format("Anno: ~p\n", [Anno]),
- case anno_to_term(Anno) of
- Term ->
- ok;
- Else ->
- case lists:keyfind(location, 1, Else) of
- {location, Term} ->
- ok;
- _Else2 ->
- ?format("Else2 ~p\n", [_Else2]),
- io:format("expected ~p\n got ~p\n", [Term, Else]),
- exit({Term, Else})
- end
- end.
-
-parse_abstract(doc) ->
- ["Test erl_parse:new_anno/1, erl_parse:anno_to_term/1"
- ", and erl_parse:anno_from_term/1"];
+%% Test erl_parse:new_anno/1, erl_parse:anno_to_term/1,
+%% and erl_parse:anno_from_term/1.
parse_abstract(_Config) ->
T = sample_term(),
A = erl_parse:abstract(T, [{line,17}]),
@@ -310,8 +230,7 @@ parse_abstract(_Config) ->
T = erl_parse:normalise(Abstr2),
ok.
-mapfold_anno(doc) ->
- ["Test erl_parse:{map_anno/2,fold_anno/3, and mapfold_anno/3}"];
+%% Test erl_parse:{map_anno/2,fold_anno/3, and mapfold_anno/3}.
mapfold_anno(_Config) ->
T = sample_term(),
Abstr = erl_parse:abstract(T),
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl
index c21c4e61ee..c3ef4eb051 100644
--- a/lib/stdlib/test/erl_eval_SUITE.erl
+++ b/lib/stdlib/test/erl_eval_SUITE.erl
@@ -19,6 +19,7 @@
-module(erl_eval_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
init_per_group/2,end_per_group/2]).
-export([guard_1/1, guard_2/1,
@@ -64,20 +65,18 @@
config(priv_dir,_) ->
".".
-else.
--include_lib("test_server/include/test_server.hrl").
--export([init_per_testcase/2, end_per_testcase/2]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
+-include_lib("common_test/include/ct.hrl").
+-endif.
+
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
--endif.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[guard_1, guard_2, match_pattern, string_plusplus,
@@ -103,125 +102,101 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-guard_1(doc) ->
- ["(OTP-2405)"];
-guard_1(suite) ->
- [];
+%% OTP-2405
guard_1(Config) when is_list(Config) ->
- ?line {ok,Tokens ,_} =
+ {ok,Tokens ,_} =
erl_scan:string("if a+4 == 4 -> yes; true -> no end. "),
- ?line {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
- ?line no = guard_1_compiled(),
- ?line {value, no, []} = erl_eval:expr(Expr, []),
+ {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
+ no = guard_1_compiled(),
+ {value, no, []} = erl_eval:expr(Expr, []),
ok.
guard_1_compiled() ->
if a+4 == 4 -> yes; true -> no end.
-guard_2(doc) ->
- ["Similar to guard_1, but type-correct"];
-guard_2(suite) ->
- [];
+%% Similar to guard_1, but type-correct.
guard_2(Config) when is_list(Config) ->
- ?line {ok,Tokens ,_} =
+ {ok,Tokens ,_} =
erl_scan:string("if 6+4 == 4 -> yes; true -> no end. "),
- ?line {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
- ?line no = guard_2_compiled(),
- ?line {value, no, []} = erl_eval:expr(Expr, []),
+ {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
+ no = guard_2_compiled(),
+ {value, no, []} = erl_eval:expr(Expr, []),
ok.
guard_2_compiled() ->
if 6+4 == 4 -> yes; true -> no end.
-string_plusplus(doc) ->
- ["OTP-3069: syntactic sugar string ++ ..."];
-string_plusplus(suite) ->
- [];
+%% OTP-3069: syntactic sugar string ++ ...
string_plusplus(Config) when is_list(Config) ->
- ?line check(fun() -> case "abc" of "ab" ++ L -> L end end,
- "case \"abc\" of \"ab\" ++ L -> L end. ",
- "c"),
- ?line check(fun() -> case "abcde" of "ab" ++ "cd" ++ L -> L end end,
- "case \"abcde\" of \"ab\" ++ \"cd\" ++ L -> L end. ",
- "e"),
- ?line check(fun() -> case "abc" of [97, 98] ++ L -> L end end,
- "case \"abc\" of [97, 98] ++ L -> L end. ",
- "c"),
+ check(fun() -> case "abc" of "ab" ++ L -> L end end,
+ "case \"abc\" of \"ab\" ++ L -> L end. ",
+ "c"),
+ check(fun() -> case "abcde" of "ab" ++ "cd" ++ L -> L end end,
+ "case \"abcde\" of \"ab\" ++ \"cd\" ++ L -> L end. ",
+ "e"),
+ check(fun() -> case "abc" of [97, 98] ++ L -> L end end,
+ "case \"abc\" of [97, 98] ++ L -> L end. ",
+ "c"),
ok.
-match_pattern(doc) ->
- ["OTP-2983: match operator in pattern"];
-match_pattern(suite) ->
- [];
+%% OTP-2983: match operator in pattern.
match_pattern(Config) when is_list(Config) ->
- ?line check(fun() -> case {a, b} of {a, _X}=Y -> {x,Y} end end,
- "case {a, b} of {a, X}=Y -> {x,Y} end. ",
- {x, {a, b}}),
- ?line check(fun() -> case {a, b} of Y={a, _X} -> {x,Y} end end,
- "case {a, b} of Y={a, X} -> {x,Y} end. ",
- {x, {a, b}}),
- ?line check(fun() -> case {a, b} of Y={a, _X}=Z -> {Z,Y} end end,
- "case {a, b} of Y={a, X}=Z -> {Z,Y} end. ",
- {{a, b}, {a, b}}),
- ?line check(fun() -> A = 4, B = 28, <<13:(A+(X=B))>>, X end,
- "begin A = 4, B = 28, <<13:(A+(X=B))>>, X end.",
- 28),
+ check(fun() -> case {a, b} of {a, _X}=Y -> {x,Y} end end,
+ "case {a, b} of {a, X}=Y -> {x,Y} end. ",
+ {x, {a, b}}),
+ check(fun() -> case {a, b} of Y={a, _X} -> {x,Y} end end,
+ "case {a, b} of Y={a, X} -> {x,Y} end. ",
+ {x, {a, b}}),
+ check(fun() -> case {a, b} of Y={a, _X}=Z -> {Z,Y} end end,
+ "case {a, b} of Y={a, X}=Z -> {Z,Y} end. ",
+ {{a, b}, {a, b}}),
+ check(fun() -> A = 4, B = 28, <<13:(A+(X=B))>>, X end,
+ "begin A = 4, B = 28, <<13:(A+(X=B))>>, X end.",
+ 28),
ok.
-match_bin(doc) ->
- ["binary match problems"];
-match_bin(suite) ->
- [];
+%% Binary match problems.
match_bin(Config) when is_list(Config) ->
- ?line check(fun() -> <<"abc">> = <<"abc">> end,
- "<<\"abc\">> = <<\"abc\">>. ",
- <<"abc">>),
- ?line check(fun() ->
- <<Size,B:Size/binary,Rest/binary>> = <<2,"AB","CD">>,
- {Size,B,Rest}
- end,
- "begin <<Size,B:Size/binary,Rest/binary>> = <<2,\"AB\",\"CD\">>, "
- "{Size,B,Rest} end. ",
- {2,<<"AB">>,<<"CD">>}),
+ check(fun() -> <<"abc">> = <<"abc">> end,
+ "<<\"abc\">> = <<\"abc\">>. ",
+ <<"abc">>),
+ check(fun() ->
+ <<Size,B:Size/binary,Rest/binary>> = <<2,"AB","CD">>,
+ {Size,B,Rest}
+ end,
+ "begin <<Size,B:Size/binary,Rest/binary>> = <<2,\"AB\",\"CD\">>, "
+ "{Size,B,Rest} end. ",
+ {2,<<"AB">>,<<"CD">>}),
ok.
-pattern_expr(doc) ->
- ["OTP-3144: compile-time expressions in pattern"];
-pattern_expr(suite) ->
- [];
+%% OTP-3144: compile-time expressions in pattern.
pattern_expr(Config) when is_list(Config) ->
- ?line check(fun() -> case 4 of 2+2 -> ok end end,
- "case 4 of 2+2 -> ok end. ",
- ok),
- ?line check(fun() -> case 2 of +2 -> ok end end,
- "case 2 of +2 -> ok end. ",
- ok),
+ check(fun() -> case 4 of 2+2 -> ok end end,
+ "case 4 of 2+2 -> ok end. ",
+ ok),
+ check(fun() -> case 2 of +2 -> ok end end,
+ "case 2 of +2 -> ok end. ",
+ ok),
ok.
-guard_3(doc) ->
- ["OTP-4518."];
-guard_3(suite) ->
- [];
+%% OTP-4518.
guard_3(Config) when is_list(Config) ->
- ?line check(fun() -> if false -> false; true -> true end end,
- "if false -> false; true -> true end.",
- true),
- ?line check(fun() -> if <<"hej">> == <<"hopp">> -> true;
- true -> false end end,
- "begin if <<\"hej\">> == <<\"hopp\">> -> true;
+ check(fun() -> if false -> false; true -> true end end,
+ "if false -> false; true -> true end.",
+ true),
+ check(fun() -> if <<"hej">> == <<"hopp">> -> true;
+ true -> false end end,
+ "begin if <<\"hej\">> == <<\"hopp\">> -> true;
true -> false end end.",
false),
- ?line check(fun() -> if <<"hej">> == <<"hej">> -> true;
- true -> false end end,
- "begin if <<\"hej\">> == <<\"hej\">> -> true;
+ check(fun() -> if <<"hej">> == <<"hej">> -> true;
+ true -> false end end,
+ "begin if <<\"hej\">> == <<\"hej\">> -> true;
true -> false end end.",
true),
ok.
-guard_4(doc) ->
- ["OTP-4885."];
-guard_4(suite) ->
- [];
+%% OTP-4885.
guard_4(Config) when is_list(Config) ->
check(fun() -> if erlang:'+'(3,a) -> true ; true -> false end end,
"if erlang:'+'(3,a) -> true ; true -> false end.",
@@ -230,31 +205,28 @@ guard_4(Config) when is_list(Config) ->
end,
"if erlang:is_integer(3) -> true ; true -> false end.",
true),
- ?line check(fun() -> [X || X <- [1,2,3], erlang:is_integer(X)] end,
- "[X || X <- [1,2,3], erlang:is_integer(X)].",
- [1,2,3]),
- ?line check(fun() -> if is_atom(is_integer(a)) -> true ; true -> false end
- end,
- "if is_atom(is_integer(a)) -> true ; true -> false end.",
- true),
+ check(fun() -> [X || X <- [1,2,3], erlang:is_integer(X)] end,
+ "[X || X <- [1,2,3], erlang:is_integer(X)].",
+ [1,2,3]),
+ check(fun() -> if is_atom(is_integer(a)) -> true ; true -> false end
+ end,
+ "if is_atom(is_integer(a)) -> true ; true -> false end.",
+ true),
check(fun() -> if erlang:is_atom(erlang:is_integer(a)) -> true;
true -> false end end,
"if erlang:is_atom(erlang:is_integer(a)) -> true; "
"true -> false end.",
true),
- ?line check(fun() -> if is_atom(3+a) -> true ; true -> false end end,
- "if is_atom(3+a) -> true ; true -> false end.",
- false),
- ?line check(fun() -> if erlang:is_atom(3+a) -> true ; true -> false end
- end,
- "if erlang:is_atom(3+a) -> true ; true -> false end.",
- false),
+ check(fun() -> if is_atom(3+a) -> true ; true -> false end end,
+ "if is_atom(3+a) -> true ; true -> false end.",
+ false),
+ check(fun() -> if erlang:is_atom(3+a) -> true ; true -> false end
+ end,
+ "if erlang:is_atom(3+a) -> true ; true -> false end.",
+ false),
ok.
-guard_5(doc) ->
- ["Guards with erlang:'=='/2"];
-guard_5(suite) ->
- [];
+%% Guards with erlang:'=='/2.
guard_5(Config) when is_list(Config) ->
{ok,Tokens ,_} =
erl_scan:string("case 1 of A when erlang:'=='(A, 1) -> true end."),
@@ -266,293 +238,278 @@ guard_5(Config) when is_list(Config) ->
guard_5_compiled() ->
case 1 of A when erlang:'=='(A, 1) -> true end.
-lc(doc) ->
- ["OTP-4518."];
-lc(suite) ->
- [];
+%% OTP-4518.
lc(Config) when is_list(Config) ->
- ?line check(fun() -> X = 32, [X || X <- [1,2,3]] end,
- "begin X = 32, [X || X <- [1,2,3]] end.",
- [1,2,3]),
- ?line check(fun() -> X = 32,
- [X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end,
- %% "binsize variable" ^
- "begin X = 32,
+ check(fun() -> X = 32, [X || X <- [1,2,3]] end,
+ "begin X = 32, [X || X <- [1,2,3]] end.",
+ [1,2,3]),
+ check(fun() -> X = 32,
+ [X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end,
+ %% "binsize variable" ^
+ "begin X = 32,
[X || <<X:X>> <- [<<1:32>>,<<2:32>>,<<3:8>>]] end.",
[1,2]),
- ?line check(fun() -> Y = 13,[X || {X,Y} <- [{1,2}]] end,
- "begin Y = 13,[X || {X,Y} <- [{1,2}]] end.",
- [1]),
- ?line error_check("begin [A || X <- [{1,2}], 1 == A] end.",
- {unbound_var,'A'}),
- ?line error_check("begin X = 32,
+ check(fun() -> Y = 13,[X || {X,Y} <- [{1,2}]] end,
+ "begin Y = 13,[X || {X,Y} <- [{1,2}]] end.",
+ [1]),
+ error_check("begin [A || X <- [{1,2}], 1 == A] end.",
+ {unbound_var,'A'}),
+ error_check("begin X = 32,
[{Y,W} || X <- [1,2,32,Y=4], Z <- [1,2,W=3]] end.",
{unbound_var,'Y'}),
- ?line error_check("begin X = 32,<<A:B>> = <<100:X>> end.",
- {unbound_var,'B'}),
- ?line check(fun() -> [X || X <- [1,2,3,4], not (X < 2)] end,
- "begin [X || X <- [1,2,3,4], not (X < 2)] end.",
- [2,3,4]),
- ?line check(fun() -> [X || X <- [true,false], X] end,
- "[X || X <- [true,false], X].", [true]),
+ error_check("begin X = 32,<<A:B>> = <<100:X>> end.",
+ {unbound_var,'B'}),
+ check(fun() -> [X || X <- [1,2,3,4], not (X < 2)] end,
+ "begin [X || X <- [1,2,3,4], not (X < 2)] end.",
+ [2,3,4]),
+ check(fun() -> [X || X <- [true,false], X] end,
+ "[X || X <- [true,false], X].", [true]),
ok.
-simple_cases(doc) ->
- ["Simple cases, just to cover some code."];
-simple_cases(suite) ->
- [];
+%% Simple cases, just to cover some code.
simple_cases(Config) when is_list(Config) ->
- ?line check(fun() -> A = $C end, "A = $C.", $C),
- %% ?line check(fun() -> A = 3.14 end, "A = 3.14.", 3.14),
- ?line check(fun() -> self() ! a, A = receive a -> true end end,
- "begin self() ! a, A = receive a -> true end end.",
- true),
- ?line check(fun() -> c:flush(), self() ! a, self() ! b, self() ! c,
- receive b -> b end,
- {messages, [a,c]} =
- erlang:process_info(self(), messages),
- c:flush() end,
- "begin c:flush(), self() ! a, self() ! b, self() ! c,"
- "receive b -> b end,"
- "{messages, [a,c]} ="
- " erlang:process_info(self(), messages), c:flush() end.",
- ok),
- ?line check(fun() -> self() ! a, A = receive a -> true
- after 0 -> false end end,
- "begin self() ! a, A = receive a -> true"
- " after 0 -> false end end.",
- true),
- ?line check(fun() -> c:flush(), self() ! a, self() ! b, self() ! c,
- receive b -> b after 0 -> true end,
- {messages, [a,c]} =
- erlang:process_info(self(), messages),
- c:flush() end,
- "begin c:flush(), self() ! a, self() ! b, self() ! c,"
- "receive b -> b after 0 -> true end,"
- "{messages, [a,c]} ="
- " erlang:process_info(self(), messages), c:flush() end.",
- ok),
- ?line check(fun() -> receive _ -> true after 10 -> false end end,
- "receive _ -> true after 10 -> false end.",
- false),
- ?line check(fun() -> F = fun(A) -> A end, true = 3 == F(3) end,
- "begin F = fun(A) -> A end, true = 3 == F(3) end.",
- true),
- ?line check(fun() -> F = fun(A) -> A end, true = 3 == apply(F, [3]) end,
- "begin F = fun(A) -> A end, true = 3 == apply(F,[3]) end.",
- true),
- ?line check(fun() -> catch throw(a) end, "catch throw(a).", a),
- ?line check(fun() -> catch a end, "catch a.", a),
- ?line check(fun() -> 4 == 3 end, "4 == 3.", false),
- ?line check(fun() -> not true end, "not true.", false),
- ?line check(fun() -> -3 end, "-3.", -3),
-
- ?line error_check("3.0 = 4.0.", {badmatch,4.0}),
- ?line check(fun() -> <<(3.0+2.0):32/float>> = <<5.0:32/float>> end,
- "<<(3.0+2.0):32/float>> = <<5.0:32/float>>.",
- <<5.0:32/float>>),
-
- ?line check(fun() -> false andalso kludd end, "false andalso kludd.",
- false),
- ?line check(fun() -> true andalso true end, "true andalso true.",
- true),
- ?line check(fun() -> true andalso false end, "true andalso false.",
- false),
- ?line check(fun() -> true andalso kludd end, "true andalso kludd.",
- kludd),
- ?line error_check("kladd andalso kludd.", {badarg,kladd}),
-
- ?line check(fun() -> if false andalso kludd -> a; true -> b end end,
- "if false andalso kludd -> a; true -> b end.",
- b),
- ?line check(fun() -> if true andalso true -> a; true -> b end end,
- "if true andalso true -> a; true -> b end.",
- a),
- ?line check(fun() -> if true andalso false -> a; true -> b end end,
- "if true andalso false -> a; true -> b end.",
- b),
-
- ?line check(fun() -> true orelse kludd end,
- "true orelse kludd.", true),
- ?line check(fun() -> false orelse false end,
- "false orelse false.", false),
- ?line check(fun() -> false orelse true end,
- "false orelse true.", true),
- ?line check(fun() -> false orelse kludd end,
- "false orelse kludd.", kludd),
- ?line error_check("kladd orelse kludd.", {badarg,kladd}),
- ?line error_check("[X || X <- [1,2,3], begin 1 end].",{bad_filter,1}),
- ?line error_check("[X || X <- a].",{bad_generator,a}),
-
- ?line check(fun() -> if true orelse kludd -> a; true -> b end end,
- "if true orelse kludd -> a; true -> b end.", a),
- ?line check(fun() -> if false orelse false -> a; true -> b end end,
- "if false orelse false -> a; true -> b end.", b),
- ?line check(fun() -> if false orelse true -> a; true -> b end end,
- "if false orelse true -> a; true -> b end.", a),
-
- ?line check(fun() -> [X || X <- [1,2,3], X+2] end,
- "[X || X <- [1,2,3], X+2].", []),
-
- ?line check(fun() -> [X || X <- [1,2,3], [X] == [X || X <- [2]]] end,
- "[X || X <- [1,2,3], [X] == [X || X <- [2]]].",
- [2]),
- ?line check(fun() -> F = fun(1) -> ett; (2) -> zwei end,
- ett = F(1), zwei = F(2) end,
- "begin F = fun(1) -> ett; (2) -> zwei end,
+ check(fun() -> A = $C end, "A = $C.", $C),
+ %% check(fun() -> A = 3.14 end, "A = 3.14.", 3.14),
+ check(fun() -> self() ! a, A = receive a -> true end end,
+ "begin self() ! a, A = receive a -> true end end.",
+ true),
+ check(fun() -> c:flush(), self() ! a, self() ! b, self() ! c,
+ receive b -> b end,
+ {messages, [a,c]} =
+ erlang:process_info(self(), messages),
+ c:flush() end,
+ "begin c:flush(), self() ! a, self() ! b, self() ! c,"
+ "receive b -> b end,"
+ "{messages, [a,c]} ="
+ " erlang:process_info(self(), messages), c:flush() end.",
+ ok),
+ check(fun() -> self() ! a, A = receive a -> true
+ after 0 -> false end end,
+ "begin self() ! a, A = receive a -> true"
+ " after 0 -> false end end.",
+ true),
+ check(fun() -> c:flush(), self() ! a, self() ! b, self() ! c,
+ receive b -> b after 0 -> true end,
+ {messages, [a,c]} =
+ erlang:process_info(self(), messages),
+ c:flush() end,
+ "begin c:flush(), self() ! a, self() ! b, self() ! c,"
+ "receive b -> b after 0 -> true end,"
+ "{messages, [a,c]} ="
+ " erlang:process_info(self(), messages), c:flush() end.",
+ ok),
+ check(fun() -> receive _ -> true after 10 -> false end end,
+ "receive _ -> true after 10 -> false end.",
+ false),
+ check(fun() -> F = fun(A) -> A end, true = 3 == F(3) end,
+ "begin F = fun(A) -> A end, true = 3 == F(3) end.",
+ true),
+ check(fun() -> F = fun(A) -> A end, true = 3 == apply(F, [3]) end,
+ "begin F = fun(A) -> A end, true = 3 == apply(F,[3]) end.",
+ true),
+ check(fun() -> catch throw(a) end, "catch throw(a).", a),
+ check(fun() -> catch a end, "catch a.", a),
+ check(fun() -> 4 == 3 end, "4 == 3.", false),
+ check(fun() -> not true end, "not true.", false),
+ check(fun() -> -3 end, "-3.", -3),
+
+ error_check("3.0 = 4.0.", {badmatch,4.0}),
+ check(fun() -> <<(3.0+2.0):32/float>> = <<5.0:32/float>> end,
+ "<<(3.0+2.0):32/float>> = <<5.0:32/float>>.",
+ <<5.0:32/float>>),
+
+ check(fun() -> false andalso kludd end, "false andalso kludd.",
+ false),
+ check(fun() -> true andalso true end, "true andalso true.",
+ true),
+ check(fun() -> true andalso false end, "true andalso false.",
+ false),
+ check(fun() -> true andalso kludd end, "true andalso kludd.",
+ kludd),
+ error_check("kladd andalso kludd.", {badarg,kladd}),
+
+ check(fun() -> if false andalso kludd -> a; true -> b end end,
+ "if false andalso kludd -> a; true -> b end.",
+ b),
+ check(fun() -> if true andalso true -> a; true -> b end end,
+ "if true andalso true -> a; true -> b end.",
+ a),
+ check(fun() -> if true andalso false -> a; true -> b end end,
+ "if true andalso false -> a; true -> b end.",
+ b),
+
+ check(fun() -> true orelse kludd end,
+ "true orelse kludd.", true),
+ check(fun() -> false orelse false end,
+ "false orelse false.", false),
+ check(fun() -> false orelse true end,
+ "false orelse true.", true),
+ check(fun() -> false orelse kludd end,
+ "false orelse kludd.", kludd),
+ error_check("kladd orelse kludd.", {badarg,kladd}),
+ error_check("[X || X <- [1,2,3], begin 1 end].",{bad_filter,1}),
+ error_check("[X || X <- a].",{bad_generator,a}),
+
+ check(fun() -> if true orelse kludd -> a; true -> b end end,
+ "if true orelse kludd -> a; true -> b end.", a),
+ check(fun() -> if false orelse false -> a; true -> b end end,
+ "if false orelse false -> a; true -> b end.", b),
+ check(fun() -> if false orelse true -> a; true -> b end end,
+ "if false orelse true -> a; true -> b end.", a),
+
+ check(fun() -> [X || X <- [1,2,3], X+2] end,
+ "[X || X <- [1,2,3], X+2].", []),
+
+ check(fun() -> [X || X <- [1,2,3], [X] == [X || X <- [2]]] end,
+ "[X || X <- [1,2,3], [X] == [X || X <- [2]]].",
+ [2]),
+ check(fun() -> F = fun(1) -> ett; (2) -> zwei end,
+ ett = F(1), zwei = F(2) end,
+ "begin F = fun(1) -> ett; (2) -> zwei end,
ett = F(1), zwei = F(2) end.",
zwei),
- ?line check(fun() -> F = fun(X) when X == 1 -> ett;
- (X) when X == 2 -> zwei end,
- ett = F(1), zwei = F(2) end,
- "begin F = fun(X) when X == 1 -> ett;
+ check(fun() -> F = fun(X) when X == 1 -> ett;
+ (X) when X == 2 -> zwei end,
+ ett = F(1), zwei = F(2) end,
+ "begin F = fun(X) when X == 1 -> ett;
(X) when X == 2 -> zwei end,
- ett = F(1), zwei = F(2) end.",
+ ett = F(1), zwei = F(2) end.",
zwei),
- ?line error_check("begin F = fun(1) -> ett end, zwei = F(2) end.",
- function_clause),
- ?line check(fun() -> if length([1]) == 1 -> yes;
- true -> no end end,
- "if length([1]) == 1 -> yes;
+ error_check("begin F = fun(1) -> ett end, zwei = F(2) end.",
+ function_clause),
+ check(fun() -> if length([1]) == 1 -> yes;
+ true -> no end end,
+ "if length([1]) == 1 -> yes;
true -> no end.",
yes),
- ?line check(fun() -> if is_integer(3) -> true; true -> false end end,
- "if is_integer(3) -> true; true -> false end.", true),
- ?line check(fun() -> if integer(3) -> true; true -> false end end,
- "if integer(3) -> true; true -> false end.", true),
- ?line check(fun() -> if is_float(3) -> true; true -> false end end,
- "if is_float(3) -> true; true -> false end.", false),
- ?line check(fun() -> if float(3) -> true; true -> false end end,
- "if float(3) -> true; true -> false end.", false),
- ?line check(fun() -> if is_number(3) -> true; true -> false end end,
- "if is_number(3) -> true; true -> false end.", true),
- ?line check(fun() -> if number(3) -> true; true -> false end end,
- "if number(3) -> true; true -> false end.", true),
- ?line check(fun() -> if is_atom(a) -> true; true -> false end end,
- "if is_atom(a) -> true; true -> false end.", true),
- ?line check(fun() -> if atom(a) -> true; true -> false end end,
- "if atom(a) -> true; true -> false end.", true),
- ?line check(fun() -> if is_list([]) -> true; true -> false end end,
- "if is_list([]) -> true; true -> false end.", true),
- ?line check(fun() -> if list([]) -> true; true -> false end end,
- "if list([]) -> true; true -> false end.", true),
- ?line check(fun() -> if is_tuple({}) -> true; true -> false end end,
- "if is_tuple({}) -> true; true -> false end.", true),
- ?line check(fun() -> if tuple({}) -> true; true -> false end end,
- "if tuple({}) -> true; true -> false end.", true),
- ?line check(fun() -> if is_pid(self()) -> true; true -> false end end,
- "if is_pid(self()) -> true; true -> false end.", true),
- ?line check(fun() -> if pid(self()) -> true; true -> false end end,
- "if pid(self()) -> true; true -> false end.", true),
- ?line check(fun() -> R = make_ref(), if is_reference(R) -> true;
- true -> false end end,
- "begin R = make_ref(), if is_reference(R) -> true;"
- "true -> false end end.", true),
- ?line check(fun() -> R = make_ref(), if reference(R) -> true;
- true -> false end end,
- "begin R = make_ref(), if reference(R) -> true;"
- "true -> false end end.", true),
- ?line check(fun() -> if is_port(a) -> true; true -> false end end,
- "if is_port(a) -> true; true -> false end.", false),
- ?line check(fun() -> if port(a) -> true; true -> false end end,
- "if port(a) -> true; true -> false end.", false),
- ?line check(fun() -> if is_function(a) -> true; true -> false end end,
- "if is_function(a) -> true; true -> false end.", false),
- ?line check(fun() -> if function(a) -> true; true -> false end end,
- "if function(a) -> true; true -> false end.", false),
- ?line check(fun() -> if is_binary(<<>>) -> true; true -> false end end,
- "if is_binary(<<>>) -> true; true -> false end.", true),
- ?line check(fun() -> if binary(<<>>) -> true; true -> false end end,
- "if binary(<<>>) -> true; true -> false end.", true),
- ?line check(fun() -> if is_integer(a) == true -> yes;
- true -> no end end,
- "if is_integer(a) == true -> yes;
+ check(fun() -> if is_integer(3) -> true; true -> false end end,
+ "if is_integer(3) -> true; true -> false end.", true),
+ check(fun() -> if integer(3) -> true; true -> false end end,
+ "if integer(3) -> true; true -> false end.", true),
+ check(fun() -> if is_float(3) -> true; true -> false end end,
+ "if is_float(3) -> true; true -> false end.", false),
+ check(fun() -> if float(3) -> true; true -> false end end,
+ "if float(3) -> true; true -> false end.", false),
+ check(fun() -> if is_number(3) -> true; true -> false end end,
+ "if is_number(3) -> true; true -> false end.", true),
+ check(fun() -> if number(3) -> true; true -> false end end,
+ "if number(3) -> true; true -> false end.", true),
+ check(fun() -> if is_atom(a) -> true; true -> false end end,
+ "if is_atom(a) -> true; true -> false end.", true),
+ check(fun() -> if atom(a) -> true; true -> false end end,
+ "if atom(a) -> true; true -> false end.", true),
+ check(fun() -> if is_list([]) -> true; true -> false end end,
+ "if is_list([]) -> true; true -> false end.", true),
+ check(fun() -> if list([]) -> true; true -> false end end,
+ "if list([]) -> true; true -> false end.", true),
+ check(fun() -> if is_tuple({}) -> true; true -> false end end,
+ "if is_tuple({}) -> true; true -> false end.", true),
+ check(fun() -> if tuple({}) -> true; true -> false end end,
+ "if tuple({}) -> true; true -> false end.", true),
+ check(fun() -> if is_pid(self()) -> true; true -> false end end,
+ "if is_pid(self()) -> true; true -> false end.", true),
+ check(fun() -> if pid(self()) -> true; true -> false end end,
+ "if pid(self()) -> true; true -> false end.", true),
+ check(fun() -> R = make_ref(), if is_reference(R) -> true;
+ true -> false end end,
+ "begin R = make_ref(), if is_reference(R) -> true;"
+ "true -> false end end.", true),
+ check(fun() -> R = make_ref(), if reference(R) -> true;
+ true -> false end end,
+ "begin R = make_ref(), if reference(R) -> true;"
+ "true -> false end end.", true),
+ check(fun() -> if is_port(a) -> true; true -> false end end,
+ "if is_port(a) -> true; true -> false end.", false),
+ check(fun() -> if port(a) -> true; true -> false end end,
+ "if port(a) -> true; true -> false end.", false),
+ check(fun() -> if is_function(a) -> true; true -> false end end,
+ "if is_function(a) -> true; true -> false end.", false),
+ check(fun() -> if function(a) -> true; true -> false end end,
+ "if function(a) -> true; true -> false end.", false),
+ check(fun() -> if is_binary(<<>>) -> true; true -> false end end,
+ "if is_binary(<<>>) -> true; true -> false end.", true),
+ check(fun() -> if binary(<<>>) -> true; true -> false end end,
+ "if binary(<<>>) -> true; true -> false end.", true),
+ check(fun() -> if is_integer(a) == true -> yes;
+ true -> no end end,
+ "if is_integer(a) == true -> yes;
true -> no end.",
no),
- ?line check(fun() -> if [] -> true; true -> false end end,
- "if [] -> true; true -> false end.", false),
- ?line error_check("if lists:member(1,[1]) -> true; true -> false end.",
- illegal_guard_expr),
- ?line error_check("if false -> true end.", if_clause),
- ?line check(fun() -> if a+b -> true; true -> false end end,
- "if a + b -> true; true -> false end.", false),
- ?line check(fun() -> if + b -> true; true -> false end end,
- "if + b -> true; true -> false end.", false),
- ?line error_check("case foo of bar -> true end.", {case_clause,foo}),
- ?line error_check("case 4 of 2+a -> true; _ -> false end.",
- illegal_pattern),
- ?line error_check("case 4 of +a -> true; _ -> false end.",
- illegal_pattern),
- ?line check(fun() -> case a of
- X when X == b -> one;
- X when X == a -> two
- end end,
- "begin case a of
+ check(fun() -> if [] -> true; true -> false end end,
+ "if [] -> true; true -> false end.", false),
+ error_check("if lists:member(1,[1]) -> true; true -> false end.",
+ illegal_guard_expr),
+ error_check("if false -> true end.", if_clause),
+ check(fun() -> if a+b -> true; true -> false end end,
+ "if a + b -> true; true -> false end.", false),
+ check(fun() -> if + b -> true; true -> false end end,
+ "if + b -> true; true -> false end.", false),
+ error_check("case foo of bar -> true end.", {case_clause,foo}),
+ error_check("case 4 of 2+a -> true; _ -> false end.",
+ illegal_pattern),
+ error_check("case 4 of +a -> true; _ -> false end.",
+ illegal_pattern),
+ check(fun() -> case a of
+ X when X == b -> one;
+ X when X == a -> two
+ end end,
+ "begin case a of
X when X == b -> one;
- X when X == a -> two
- end end.", two),
- ?line error_check("3 = 4.", {badmatch,4}),
- ?line error_check("a = 3.", {badmatch,3}),
- %% ?line error_check("3.1 = 2.7.",{badmatch,2.7}),
- ?line error_check("$c = 4.", {badmatch,4}),
- ?line check(fun() -> $c = $c end, "$c = $c.", $c),
- ?line check(fun() -> _ = bar end, "_ = bar.", bar),
- ?line check(fun() -> A = 14, A = 14 end,
+ X when X == a -> two
+ end end.", two),
+ error_check("3 = 4.", {badmatch,4}),
+ error_check("a = 3.", {badmatch,3}),
+ %% error_check("3.1 = 2.7.",{badmatch,2.7}),
+ error_check("$c = 4.", {badmatch,4}),
+ check(fun() -> $c = $c end, "$c = $c.", $c),
+ check(fun() -> _ = bar end, "_ = bar.", bar),
+ check(fun() -> A = 14, A = 14 end,
"begin A = 14, A = 14 end.", 14),
- ?line error_check("begin A = 14, A = 16 end.", {badmatch,16}),
- ?line error_check("\"hej\" = \"san\".", {badmatch,"san"}),
- ?line check(fun() -> "hej" = "hej" end,
+ error_check("begin A = 14, A = 16 end.", {badmatch,16}),
+ error_check("\"hej\" = \"san\".", {badmatch,"san"}),
+ check(fun() -> "hej" = "hej" end,
"\"hej\" = \"hej\".", "hej"),
- ?line error_check("[] = [a].", {badmatch,[a]}),
- ?line check(fun() -> [] = [] end, "[] = [].", []),
- ?line error_check("[a] = [].", {badmatch,[]}),
- ?line error_check("{a,b} = 34.", {badmatch,34}),
- ?line check(fun() -> <<X:7>> = <<8:7>>, X end,
+ error_check("[] = [a].", {badmatch,[a]}),
+ check(fun() -> [] = [] end, "[] = [].", []),
+ error_check("[a] = [].", {badmatch,[]}),
+ error_check("{a,b} = 34.", {badmatch,34}),
+ check(fun() -> <<X:7>> = <<8:7>>, X end,
"begin <<X:7>> = <<8:7>>, X end.", 8),
- ?line error_check("<<34:32>> = \"hej\".", {badmatch,"hej"}),
- ?line check(fun() -> trunc((1 * 3 div 3 + 4 - 3) / 1) rem 2 end,
+ error_check("<<34:32>> = \"hej\".", {badmatch,"hej"}),
+ check(fun() -> trunc((1 * 3 div 3 + 4 - 3) / 1) rem 2 end,
"begin trunc((1 * 3 div 3 + 4 - 3) / 1) rem 2 end.", 0),
- ?line check(fun() -> (2#101 band 2#10101) bor (2#110 bxor 2#010) end,
+ check(fun() -> (2#101 band 2#10101) bor (2#110 bxor 2#010) end,
"(2#101 band 2#10101) bor (2#110 bxor 2#010).", 5),
- ?line check(fun() -> (2#1 bsl 4) + (2#10000 bsr 3) end,
+ check(fun() -> (2#1 bsl 4) + (2#10000 bsr 3) end,
"(2#1 bsl 4) + (2#10000 bsr 3).", 18),
- ?line check(fun() -> ((1<3) and ((1 =:= 2) or (1 =/= 2))) xor (1=<2) end,
+ check(fun() -> ((1<3) and ((1 =:= 2) or (1 =/= 2))) xor (1=<2) end,
"((1<3) and ((1 =:= 2) or (1 =/= 2))) xor (1=<2).", false),
- ?line check(fun() -> (a /= b) or (2 > 4) or (3 >= 3) end,
+ check(fun() -> (a /= b) or (2 > 4) or (3 >= 3) end,
"(a /= b) or (2 > 4) or (3 >= 3).", true),
- ?line check(fun() -> "hej" ++ "san" =/= "hejsan" -- "san" end,
+ check(fun() -> "hej" ++ "san" =/= "hejsan" -- "san" end,
"\"hej\" ++ \"san\" =/= \"hejsan\" -- \"san\".", true),
- ?line check(fun() -> (bnot 1) < -0 end, "(bnot (+1)) < -0.", true),
- ok.
+ check(fun() -> (bnot 1) < -0 end, "(bnot (+1)) < -0.", true),
+ ok.
-unary_plus(doc) ->
- ["OTP-4929. Unary plus rejects non-numbers."];
-unary_plus(suite) ->
- [];
+%% OTP-4929. Unary plus rejects non-numbers.
unary_plus(Config) when is_list(Config) ->
- ?line check(fun() -> F = fun(X) -> + X end,
- true = -1 == F(-1) end,
- "begin F = fun(X) -> + X end,"
- " true = -1 == F(-1) end.", true, ['F'], none, none),
- ?line error_check("+a.", badarith),
+ check(fun() -> F = fun(X) -> + X end,
+ true = -1 == F(-1) end,
+ "begin F = fun(X) -> + X end,"
+ " true = -1 == F(-1) end.", true, ['F'], none, none),
+ error_check("+a.", badarith),
ok.
-apply_atom(doc) ->
- ["OTP-5064. Can no longer apply atoms."];
-apply_atom(suite) ->
- [];
+%% OTP-5064. Can no longer apply atoms.
apply_atom(Config) when is_list(Config) ->
- ?line error_check("[X || X <- [[1],[2]],
+ error_check("[X || X <- [[1],[2]],
begin L = length, L(X) =:= 1 end].",
{badfun,length}),
ok.
-otp_5269(doc) ->
- ["OTP-5269. Bugs in the bit syntax."];
-otp_5269(suite) ->
- [];
+%% OTP-5269. Bugs in the bit syntax.
otp_5269(Config) when is_list(Config) ->
- ?line check(fun() -> L = 8,
+ check(fun() -> L = 8,
F = fun(<<A:L,B:A>>) -> B end,
F(<<16:8, 7:16>>)
end,
@@ -560,7 +517,7 @@ otp_5269(Config) when is_list(Config) ->
L = 8, F = fun(<<A:L,B:A>>) -> B end, F(<<16:8, 7:16>>)
end.",
7),
- ?line check(fun() -> L = 8,
+ check(fun() -> L = 8,
F = fun(<<L:L,B:L>>) -> B end,
F(<<16:8, 7:16>>)
end,
@@ -568,31 +525,31 @@ otp_5269(Config) when is_list(Config) ->
L = 8, F = fun(<<L:L,B:L>>) -> B end, F(<<16:8, 7:16>>)
end.",
7),
- ?line check(fun() -> L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end,
+ check(fun() -> L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end,
"begin L = 8, <<A:L,B:A>> = <<16:8, 7:16>>, B end.",
7),
- ?line error_check("begin L = 8, <<L:L,B:L>> = <<16:8, 7:16>> end.",
+ error_check("begin L = 8, <<L:L,B:L>> = <<16:8, 7:16>> end.",
{badmatch,<<16:8,7:16>>}),
- ?line error_check("begin <<L:16,L:L>> = <<16:16,8:16>>, L end.",
+ error_check("begin <<L:16,L:L>> = <<16:16,8:16>>, L end.",
{badmatch, <<16:16,8:16>>}),
- ?line check(fun() -> U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end,
+ check(fun() -> U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end,
"begin U = 8, (fun(<<U:U>>) -> U end)(<<32:8>>) end.",
32),
- ?line check(fun() -> U = 8, [U || <<U:U>> <- [<<32:8>>]] end,
+ check(fun() -> U = 8, [U || <<U:U>> <- [<<32:8>>]] end,
"begin U = 8, [U || <<U:U>> <- [<<32:8>>]] end.",
[32]),
- ?line error_check("(fun({3,<<A:32,A:32>>}) -> a end)
+ error_check("(fun({3,<<A:32,A:32>>}) -> a end)
({3,<<17:32,19:32>>}).",
function_clause),
- ?line check(fun() -> [X || <<A:8,
+ check(fun() -> [X || <<A:8,
B:A>> <- [<<16:8,19:16>>],
<<X:8>> <- [<<B:8>>]] end,
"[X || <<A:8,
B:A>> <- [<<16:8,19:16>>],
<<X:8>> <- [<<B:8>>]].",
[19]),
- ?line check(fun() ->
+ check(fun() ->
(fun (<<A:1/binary, B:8/integer, _C:B/binary>>) ->
case A of
B -> wrong;
@@ -605,12 +562,9 @@ otp_5269(Config) when is_list(Config) ->
ok),
ok.
-otp_6539(doc) ->
- ["OTP-6539. try/catch bugs."];
-otp_6539(suite) ->
- [];
+%% OTP-6539. try/catch bugs.
otp_6539(Config) when is_list(Config) ->
- ?line check(fun() ->
+ check(fun() ->
F = fun(A,B) ->
try A+B
catch _:_ -> dontthinkso
@@ -629,152 +583,149 @@ otp_6539(Config) when is_list(Config) ->
[3, 5]),
ok.
-otp_6543(doc) ->
- ["OTP-6543. bitlevel binaries."];
-otp_6543(suite) ->
- [];
+%% OTP-6543. bitlevel binaries.
otp_6543(Config) when is_list(Config) ->
- ?line check(fun() ->
+ check(fun() ->
<< <<X>> || <<X>> <- [1,2,3] >>
end,
"<< <<X>> || <<X>> <- [1,2,3] >>.",
<<>>),
- ?line check(fun() ->
+ check(fun() ->
<< <<X>> || X <- [1,2,3] >>
end,
"<< <<X>> || X <- [1,2,3] >>.",
<<1,2,3>>),
- ?line check(fun() ->
+ check(fun() ->
<< <<X:8>> || <<X:2>> <= <<"hej">> >>
end,
"<< <<X:8>> || <<X:2>> <= <<\"hej\">> >>.",
<<1,2,2,0,1,2,1,1,1,2,2,2>>),
- ?line check(fun() ->
+ check(fun() ->
<< <<X:8>> ||
<<65,X:4>> <= <<65,7:4,65,3:4,66,8:4>> >>
end,
"<< <<X:8>> ||
<<65,X:4>> <= <<65,7:4,65,3:4,66,8:4>> >>.",
<<7,3>>),
- ?line check(fun() -> <<34:18/big>> end,
+ check(fun() -> <<34:18/big>> end,
"<<34:18/big>>.",
<<0,8,2:2>>),
- ?line check(fun() -> <<34:18/big-unit:2>> end,
+ check(fun() -> <<34:18/big-unit:2>> end,
"<<34:18/big-unit:2>>.",
<<0,0,0,2,2:4>>),
- ?line check(fun() -> <<34:18/little>> end,
+ check(fun() -> <<34:18/little>> end,
"<<34:18/little>>.",
<<34,0,0:2>>),
- ?line case eval_string("<<34:18/native>>.") of
+ case eval_string("<<34:18/native>>.") of
<<0,8,2:2>> -> ok;
<<34,0,0:2>> -> ok
end,
- ?line check(fun() -> <<34:18/big-signed>> end,
+ check(fun() -> <<34:18/big-signed>> end,
"<<34:18/big-signed>>.",
<<0,8,2:2>>),
- ?line check(fun() -> <<34:18/little-signed>> end,
+ check(fun() -> <<34:18/little-signed>> end,
"<<34:18/little-signed>>.",
<<34,0,0:2>>),
- ?line case eval_string("<<34:18/native-signed>>.") of
+ case eval_string("<<34:18/native-signed>>.") of
<<0,8,2:2>> -> ok;
<<34,0,0:2>> -> ok
end,
- ?line check(fun() -> <<34:18/big-unsigned>> end,
+ check(fun() -> <<34:18/big-unsigned>> end,
"<<34:18/big-unsigned>>.",
<<0,8,2:2>>),
- ?line check(fun() -> <<34:18/little-unsigned>> end,
+ check(fun() -> <<34:18/little-unsigned>> end,
"<<34:18/little-unsigned>>.",
<<34,0,0:2>>),
- ?line case eval_string("<<34:18/native-unsigned>>.") of
+ case eval_string("<<34:18/native-unsigned>>.") of
<<0,8,2:2>> -> ok;
<<34,0,0:2>> -> ok
end,
- ?line check(fun() -> <<3.14:32/float-big>> end,
+ check(fun() -> <<3.14:32/float-big>> end,
"<<3.14:32/float-big>>.",
<<64,72,245,195>>),
- ?line check(fun() -> <<3.14:32/float-little>> end,
+ check(fun() -> <<3.14:32/float-little>> end,
"<<3.14:32/float-little>>.",
<<195,245,72,64>>),
- ?line case eval_string("<<3.14:32/float-native>>.") of
+ case eval_string("<<3.14:32/float-native>>.") of
<<64,72,245,195>> -> ok;
<<195,245,72,64>> -> ok
end,
- ?line error_check("<<(<<17,3:2>>)/binary>>.", badarg),
- ?line check(fun() -> <<(<<17,3:2>>)/bitstring>> end,
+ error_check("<<(<<17,3:2>>)/binary>>.", badarg),
+ check(fun() -> <<(<<17,3:2>>)/bitstring>> end,
"<<(<<17,3:2>>)/bitstring>>.",
<<17,3:2>>),
- ?line check(fun() -> <<(<<17,3:2>>):10/bitstring>> end,
+ check(fun() -> <<(<<17,3:2>>):10/bitstring>> end,
"<<(<<17,3:2>>):10/bitstring>>.",
<<17,3:2>>),
- ?line check(fun() -> <<<<344:17>>/binary-unit:17>> end,
+ check(fun() -> <<<<344:17>>/binary-unit:17>> end,
"<<<<344:17>>/binary-unit:17>>.",
<<344:17>>),
- ?line check(fun() -> <<X:18/big>> = <<34:18/big>>, X end,
+ check(fun() -> <<X:18/big>> = <<34:18/big>>, X end,
"begin <<X:18/big>> = <<34:18/big>>, X end.",
34),
- ?line check(fun() -> <<X:18/big-unit:2>> = <<34:18/big-unit:2>>, X end,
+ check(fun() -> <<X:18/big-unit:2>> = <<34:18/big-unit:2>>, X end,
"begin <<X:18/big-unit:2>> = <<34:18/big-unit:2>>, X end.",
34),
- ?line check(fun() -> <<X:18/little>> = <<34:18/little>>, X end,
+ check(fun() -> <<X:18/little>> = <<34:18/little>>, X end,
"begin <<X:18/little>> = <<34:18/little>>, X end.",
34),
- ?line check(fun() -> <<X:18/native>> = <<34:18/native>>, X end,
+ check(fun() -> <<X:18/native>> = <<34:18/native>>, X end,
"begin <<X:18/native>> = <<34:18/native>>, X end.",
34),
- ?line check(fun() -> <<X:18/big-signed>> = <<34:18/big-signed>>, X end,
+ check(fun() -> <<X:18/big-signed>> = <<34:18/big-signed>>, X end,
"begin <<X:18/big-signed>> = <<34:18/big-signed>>, X end.",
34),
- ?line check(fun() -> <<X:18/little-signed>> = <<34:18/little-signed>>,
+ check(fun() -> <<X:18/little-signed>> = <<34:18/little-signed>>,
X end,
"begin <<X:18/little-signed>> = <<34:18/little-signed>>,
X end.",
34),
- ?line check(fun() -> <<X:18/native-signed>> = <<34:18/native-signed>>,
+ check(fun() -> <<X:18/native-signed>> = <<34:18/native-signed>>,
X end,
"begin <<X:18/native-signed>> = <<34:18/native-signed>>,
X end.",
34),
- ?line check(fun() -> <<X:18/big-unsigned>> = <<34:18/big-unsigned>>,
+ check(fun() -> <<X:18/big-unsigned>> = <<34:18/big-unsigned>>,
X end,
"begin <<X:18/big-unsigned>> = <<34:18/big-unsigned>>,
X end.",
34),
- ?line check(fun() ->
+ check(fun() ->
<<X:18/little-unsigned>> = <<34:18/little-unsigned>>,
X end,
"begin <<X:18/little-unsigned>> = <<34:18/little-unsigned>>,
X end.",
34),
- ?line check(fun() ->
+ check(fun() ->
<<X:18/native-unsigned>> = <<34:18/native-unsigned>>,
X end,
"begin <<X:18/native-unsigned>> = <<34:18/native-unsigned>>,
X end.",
34),
- ?line check(fun() -> <<X:32/float-big>> = <<2.0:32/float-big>>, X end,
+ check(fun() -> <<X:32/float-big>> = <<2.0:32/float-big>>, X end,
"begin <<X:32/float-big>> = <<2.0:32/float-big>>,
X end.",
2.0),
- ?line check(fun() -> <<X:32/float-little>> = <<2.0:32/float-little>>,
+ check(fun() -> <<X:32/float-little>> = <<2.0:32/float-little>>,
X end,
"begin <<X:32/float-little>> = <<2.0:32/float-little>>,
X end.",
2.0),
- ?line check(fun() -> <<X:32/float-native>> = <<2.0:32/float-native>>,
+ check(fun() -> <<X:32/float-native>> = <<2.0:32/float-native>>,
X end,
"begin <<X:32/float-native>> = <<2.0:32/float-native>>,
X end.",
2.0),
- ?line check(
+ check(
fun() ->
[X || <<"hej",X:8>> <= <<"hej",8,"san",9,"hej",17,"hej">>]
end,
"[X || <<\"hej\",X:8>> <=
<<\"hej\",8,\"san\",9,\"hej\",17,\"hej\">>].",
[8,17]),
- ?line check(
+ check(
fun() ->
L = 8, << <<B:32>> || <<L:L,B:L>> <= <<16:8, 7:16>> >>
end,
@@ -783,41 +734,41 @@ otp_6543(Config) when is_list(Config) ->
<<0,0,0,7>>),
%% Test the Value part of a binary segment.
%% "Old" bugs have been fixed (partial_eval is called on Value).
- ?line check(fun() -> [ 3 || <<17/float>> <= <<17.0/float>>] end,
+ check(fun() -> [ 3 || <<17/float>> <= <<17.0/float>>] end,
"[ 3 || <<17/float>> <= <<17.0/float>>].",
[3]),
- ?line check(fun() -> [ 3 || <<17/float>> <- [<<17.0/float>>]] end,
+ check(fun() -> [ 3 || <<17/float>> <- [<<17.0/float>>]] end,
"[ 3 || <<17/float>> <- [<<17.0/float>>]].",
[3]),
- ?line check(fun() -> [ X || <<17/float,X:3>> <= <<17.0/float,2:3>>] end,
+ check(fun() -> [ X || <<17/float,X:3>> <= <<17.0/float,2:3>>] end,
"[ X || <<17/float,X:3>> <= <<17.0/float,2:3>>].",
[2]),
- ?line check(fun() ->
+ check(fun() ->
[ foo || <<(1 bsl 1023)/float>> <= <<(1 bsl 1023)/float>>]
end,
"[ foo || <<(1 bsl 1023)/float>> <= <<(1 bsl 1023)/float>>].",
[foo]),
- ?line check(fun() ->
+ check(fun() ->
[ foo || <<(1 bsl 1023)/float>> <- [<<(1 bsl 1023)/float>>]]
end,
"[ foo || <<(1 bsl 1023)/float>> <- [<<(1 bsl 1023)/float>>]].",
[foo]),
- ?line error_check("[ foo || <<(1 bsl 1024)/float>> <-
+ error_check("[ foo || <<(1 bsl 1024)/float>> <-
[<<(1 bsl 1024)/float>>]].",
badarg),
- ?line check(fun() ->
+ check(fun() ->
[ foo || <<(1 bsl 1024)/float>> <- [<<(1 bsl 1023)/float>>]]
end,
"[ foo || <<(1 bsl 1024)/float>> <-
[<<(1 bsl 1023)/float>>]].",
[]),
- ?line check(fun() ->
+ check(fun() ->
[ foo || <<(1 bsl 1024)/float>> <= <<(1 bsl 1023)/float>>]
end,
"[ foo || <<(1 bsl 1024)/float>> <=
<<(1 bsl 1023)/float>>].",
[]),
- ?line check(fun() ->
+ check(fun() ->
L = 8,
[{L,B} || <<L:L,B:L/float>> <= <<32:8,7:32/float>>]
end,
@@ -825,7 +776,7 @@ otp_6543(Config) when is_list(Config) ->
[{L,B} || <<L:L,B:L/float>> <= <<32:8,7:32/float>>]
end.",
[{32,7.0}]),
- ?line check(fun() ->
+ check(fun() ->
L = 8,
[{L,B} || <<L:L,B:L/float>> <- [<<32:8,7:32/float>>]]
end,
@@ -833,127 +784,117 @@ otp_6543(Config) when is_list(Config) ->
[{L,B} || <<L:L,B:L/float>> <- [<<32:8,7:32/float>>]]
end.",
[{32,7.0}]),
- ?line check(fun() ->
+ check(fun() ->
[foo || <<"s">> <= <<"st">>]
end,
"[foo || <<\"s\">> <= <<\"st\">>].",
[foo]),
- ?line check(fun() -> <<_:32>> = <<17:32>> end,
+ check(fun() -> <<_:32>> = <<17:32>> end,
"<<_:32>> = <<17:32>>.",
<<17:32>>),
- ?line check(fun() -> [foo || <<_:32>> <= <<17:32,20:32>>] end,
+ check(fun() -> [foo || <<_:32>> <= <<17:32,20:32>>] end,
"[foo || <<_:32>> <= <<17:32,20:32>>].",
[foo,foo]),
- ?line check(fun() -> << <<X:32>> || X <- [1,2,3], X > 1 >> end,
+ check(fun() -> << <<X:32>> || X <- [1,2,3], X > 1 >> end,
"<< <<X:32>> || X <- [1,2,3], X > 1 >>.",
<<0,0,0,2,0,0,0,3>>),
- ?line error_check("[X || <<X>> <= [a,b]].",{bad_generator,[a,b]}),
+ error_check("[X || <<X>> <= [a,b]].",{bad_generator,[a,b]}),
ok.
-otp_6787(doc) ->
- ["OTP-6787. bitlevel binaries."];
-otp_6787(suite) ->
- [];
+%% OTP-6787. bitlevel binaries.
otp_6787(Config) when is_list(Config) ->
- ?line check(
+ check(
fun() -> <<16:(1024*1024)>> = <<16:(1024*1024)>> end,
"<<16:(1024*1024)>> = <<16:(1024*1024)>>.",
<<16:1048576>>),
ok.
-otp_6977(doc) ->
- ["OTP-6977. ++ bug."];
-otp_6977(suite) ->
- [];
+%% OTP-6977. ++ bug.
otp_6977(Config) when is_list(Config) ->
- ?line check(
+ check(
fun() -> (fun([$X] ++ _) -> ok end)("X") end,
"(fun([$X] ++ _) -> ok end)(\"X\").",
ok),
ok.
-otp_7550(doc) ->
- ["OTP-7550. Support for UTF-8, UTF-16, UTF-32."];
+%% OTP-7550. Support for UTF-8, UTF-16, UTF-32.
otp_7550(Config) when is_list(Config) ->
%% UTF-8.
- ?line check(
+ check(
fun() -> <<65>> = <<65/utf8>> end,
"<<65>> = <<65/utf8>>.",
<<65>>),
- ?line check(
+ check(
fun() -> <<350/utf8>> = <<197,158>> end,
"<<350/utf8>> = <<197,158>>.",
<<197,158>>),
- ?line check(
+ check(
fun() -> <<$b,$j,$\303,$\266,$r,$n>> = <<"bj\366rn"/utf8>> end,
"<<$b,$j,$\303,$\266,$r,$n>> = <<\"bj\366rn\"/utf8>>.",
<<$b,$j,$\303,$\266,$r,$n>>),
%% UTF-16.
- ?line check(
+ check(
fun() -> <<0,65>> = <<65/utf16>> end,
"<<0,65>> = <<65/utf16>>.",
<<0,65>>),
- ?line check(
+ check(
fun() -> <<16#D8,16#08,16#DF,16#45>> = <<16#12345/utf16>> end,
"<<16#D8,16#08,16#DF,16#45>> = <<16#12345/utf16>>.",
<<16#D8,16#08,16#DF,16#45>>),
- ?line check(
+ check(
fun() -> <<16#08,16#D8,16#45,16#DF>> = <<16#12345/little-utf16>> end,
"<<16#08,16#D8,16#45,16#DF>> = <<16#12345/little-utf16>>.",
<<16#08,16#D8,16#45,16#DF>>),
- ?line check(
+ check(
fun() -> <<350/utf16>> = <<1,94>> end,
"<<350/utf16>> = <<1,94>>.",
<<1,94>>),
- ?line check(
+ check(
fun() -> <<350/little-utf16>> = <<94,1>> end,
"<<350/little-utf16>> = <<94,1>>.",
<<94,1>>),
- ?line check(
+ check(
fun() -> <<16#12345/utf16>> = <<16#D8,16#08,16#DF,16#45>> end,
"<<16#12345/utf16>> = <<16#D8,16#08,16#DF,16#45>>.",
<<16#D8,16#08,16#DF,16#45>>),
- ?line check(
+ check(
fun() -> <<16#12345/little-utf16>> = <<16#08,16#D8,16#45,16#DF>> end,
"<<16#12345/little-utf16>> = <<16#08,16#D8,16#45,16#DF>>.",
<<16#08,16#D8,16#45,16#DF>>),
%% UTF-32.
- ?line check(
+ check(
fun() -> <<16#12345/utf32>> = <<16#0,16#01,16#23,16#45>> end,
"<<16#12345/utf32>> = <<16#0,16#01,16#23,16#45>>.",
<<16#0,16#01,16#23,16#45>>),
- ?line check(
+ check(
fun() -> <<16#0,16#01,16#23,16#45>> = <<16#12345/utf32>> end,
"<<16#0,16#01,16#23,16#45>> = <<16#12345/utf32>>.",
<<16#0,16#01,16#23,16#45>>),
- ?line check(
+ check(
fun() -> <<16#12345/little-utf32>> = <<16#45,16#23,16#01,16#00>> end,
"<<16#12345/little-utf32>> = <<16#45,16#23,16#01,16#00>>.",
<<16#45,16#23,16#01,16#00>>),
- ?line check(
+ check(
fun() -> <<16#12345/little-utf32>> end,
"<<16#12345/little-utf32>>.",
<<16#45,16#23,16#01,16#00>>),
%% Mixed.
- ?line check(
+ check(
fun() -> <<16#41,16#12345/utf32,16#0391:16,16#2E:8>> end,
"<<16#41,16#12345/utf32,16#0391:16,16#2E:8>>.",
<<16#41,16#00,16#01,16#23,16#45,16#03,16#91,16#2E>>),
ok.
-otp_8133(doc) ->
- ["OTP-8133. Bit comprehension bug."];
-otp_8133(suite) ->
- [];
+%% OTP-8133. Bit comprehension bug.
otp_8133(Config) when is_list(Config) ->
- ?line check(
+ check(
fun() ->
E = fun(N) ->
if
@@ -976,7 +917,7 @@ otp_8133(Config) when is_list(Config) ->
end
end.",
ok),
- ?line check(
+ check(
fun() ->
E = fun(N) ->
if
@@ -1002,10 +943,7 @@ otp_8133(Config) when is_list(Config) ->
ok),
ok.
-otp_10622(doc) ->
- ["OTP-10622. Bugs."];
-otp_10622(suite) ->
- [];
+%% OTP-10622. Bugs.
otp_10622(Config) when is_list(Config) ->
check(fun() -> <<0>> = <<"\x{400}">> end,
"<<0>> = <<\"\\x{400}\">>. ",
@@ -1044,51 +982,47 @@ otp_10622(Config) when is_list(Config) ->
ok.
-otp_13228(doc) ->
- ["OTP-13228. ERL-32: non-local function handler bug."];
+%% OTP-13228. ERL-32: non-local function handler bug.
otp_13228(_Config) ->
LFH = {value, fun(foo, [io_fwrite]) -> worked end},
EFH = {value, fun({io, fwrite}, [atom]) -> io_fwrite end},
{value, worked, []} = parse_and_run("foo(io:fwrite(atom)).", LFH, EFH).
-funs(doc) ->
- ["Simple cases, just to cover some code."];
-funs(suite) ->
- [];
+%% Simple cases, just to cover some code.
funs(Config) when is_list(Config) ->
do_funs(none, none),
do_funs(lfh(), none),
do_funs(lfh(), efh()),
- ?line error_check("nix:foo().", {access_not_allowed,nix}, lfh(), efh()),
- ?line error_check("bar().", undef, none, none),
+ error_check("nix:foo().", {access_not_allowed,nix}, lfh(), efh()),
+ error_check("bar().", undef, none, none),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
"begin F1 = fun(F,N) -> count_down(F, N) end,"
"F1(F1,1000) end.",
0, ['F1'], lfh(), none),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
"begin F1 = fun(F,N) -> count_down(F, N) end,"
"F1(F1,1000) end.",
0, ['F1'], lfh_value(), none),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
"begin F1 = fun(F,N) -> count_down(F, N) end,"
"F1(F1,1000) end.",
0, ['F1'], lfh_value_extra(), none),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
"begin F1 = fun(F,N) -> count_down(F, N) end,"
"F1(F1,1000) end.",
0, ['F1'], {?MODULE,local_func_value}, none),
%% This is not documented, and only for backward compatibility (good!).
B0 = erl_eval:new_bindings(),
- ?line check(fun() -> is_function(?MODULE:count_down_fun()) end,
+ check(fun() -> is_function(?MODULE:count_down_fun()) end,
"begin is_function(count_down_fun()) end.",
true, [], {?MODULE,local_func,[B0]},none),
@@ -1096,19 +1030,19 @@ funs(Config) when is_list(Config) ->
({M,F}, As) -> apply(M, F, As)
end,
EFH = {value, EF},
- ?line error_check("apply(timer, sleep, [1]).", got_it, none, EFH),
- ?line error_check("begin F = fun(T) -> timer:sleep(T) end,F(1) end.",
+ error_check("apply(timer, sleep, [1]).", got_it, none, EFH),
+ error_check("begin F = fun(T) -> timer:sleep(T) end,F(1) end.",
got_it, none, EFH),
- ?line error_check("fun c/1.", undef),
- ?line error_check("fun a:b/0().", undef),
+ error_check("fun c/1.", undef),
+ error_check("fun a:b/0().", undef),
MaxArgs = 20,
- ?line [true] =
+ [true] =
lists:usort([run_many_args(SAs) || SAs <- many_args(MaxArgs)]),
- ?line {'EXIT',{{argument_limit,_},_}} =
+ {'EXIT',{{argument_limit,_},_}} =
(catch run_many_args(many_args1(MaxArgs+1))),
- ?line check(fun() -> M = lists, F = fun M:reverse/1,
+ check(fun() -> M = lists, F = fun M:reverse/1,
[1,2] = F([2,1]), ok end,
"begin M = lists, F = fun M:reverse/1,"
" [1,2] = F([2,1]), ok end.",
@@ -1142,17 +1076,17 @@ do_funs(LFH, EFH) ->
%% manually with 1000 replaced by 1000000.
M = atom_to_list(?MODULE),
- ?line check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
+ check(fun() -> F1 = fun(F,N) -> ?MODULE:count_down(F, N) end,
F1(F1, 1000) end,
concat(["begin F1 = fun(F,N) -> ", M,
":count_down(F, N) end, F1(F1,1000) end."]),
0, ['F1'], LFH, EFH),
- ?line check(fun() -> F1 = fun(F,N) -> apply(?MODULE,count_down,[F,N])
+ check(fun() -> F1 = fun(F,N) -> apply(?MODULE,count_down,[F,N])
end, F1(F1, 1000) end,
concat(["begin F1 = fun(F,N) -> apply(", M,
",count_down,[F, N]) end, F1(F1,1000) end."]),
0, ['F1'], LFH, EFH),
- ?line check(fun() -> F = fun(F,N) when N > 0 -> apply(F,[F,N-1]);
+ check(fun() -> F = fun(F,N) when N > 0 -> apply(F,[F,N-1]);
(_F,0) -> ok end,
F(F, 1000)
end,
@@ -1160,7 +1094,7 @@ do_funs(LFH, EFH) ->
"(_F,0) -> ok end,"
"F(F, 1000) end.",
ok, ['F'], LFH, EFH),
- ?line check(fun() -> F = fun(F,N) when N > 0 ->
+ check(fun() -> F = fun(F,N) when N > 0 ->
apply(erlang,apply,[F,[F,N-1]]);
(_F,0) -> ok end,
F(F, 1000)
@@ -1170,7 +1104,7 @@ do_funs(LFH, EFH) ->
"(_F,0) -> ok end,"
"F(F, 1000) end.",
ok, ['F'], LFH, EFH),
- ?line check(fun() -> F = count_down_fun(),
+ check(fun() -> F = count_down_fun(),
SF = fun(SF, F1, N) -> F(SF, F1, N) end,
SF(SF, F, 1000) end,
concat(["begin F = ", M, ":count_down_fun(),"
@@ -1179,7 +1113,7 @@ do_funs(LFH, EFH) ->
ok, ['F','SF'], LFH, EFH),
- ?line check(fun() -> F = fun(X) -> A = 1+X, {X,A} end,
+ check(fun() -> F = fun(X) -> A = 1+X, {X,A} end,
true = {2,3} == F(2) end,
"begin F = fun(X) -> A = 1+X, {X,A} end,
true = {2,3} == F(2) end.", true, ['F'], LFH, EFH),
@@ -1188,13 +1122,13 @@ do_funs(LFH, EFH) ->
"begin F = fun(X) -> erlang:'+'(X,2) end,"
" true = 3 == F(1) end.", true, ['F'],
LFH, EFH),
- ?line check(fun() -> F = fun(X) -> byte_size(X) end,
+ check(fun() -> F = fun(X) -> byte_size(X) end,
?MODULE:do_apply(F,<<"hej">>) end,
concat(["begin F = fun(X) -> size(X) end,",
M,":do_apply(F,<<\"hej\">>) end."]),
3, ['F'], LFH, EFH),
- ?line check(fun() -> F1 = fun(X, Z) -> {X,Z} end,
+ check(fun() -> F1 = fun(X, Z) -> {X,Z} end,
Z = 5,
F2 = fun(X, Y) -> F1(Z,{X,Y}) end,
F3 = fun(X, Y) -> {a,F1(Z,{X,Y})} end,
@@ -1211,26 +1145,26 @@ do_funs(LFH, EFH) ->
{5,{5,y}} = F2(Z,y),
true = {5,{x,5}} == F2(x,Z) end.",
true, ['F1','Z','F2','F3'], LFH, EFH),
- ?line check(fun() -> F = fun(X) -> byte_size(X) end,
+ check(fun() -> F = fun(X) -> byte_size(X) end,
F2 = fun(Y) -> F(Y) end,
?MODULE:do_apply(F2,<<"hej">>) end,
concat(["begin F = fun(X) -> size(X) end,",
"F2 = fun(Y) -> F(Y) end,",
M,":do_apply(F2,<<\"hej\">>) end."]),
3, ['F','F2'], LFH, EFH),
- ?line check(fun() -> Z = 5, F = fun(X) -> {Z,X} end,
+ check(fun() -> Z = 5, F = fun(X) -> {Z,X} end,
F2 = fun(Z) -> F(Z) end, F2(3) end,
"begin Z = 5, F = fun(X) -> {Z,X} end,
F2 = fun(Z) -> F(Z) end, F2(3) end.",
{5,3},['F','F2','Z'], LFH, EFH),
- ?line check(fun() -> F = fun(Z) -> Z end,
+ check(fun() -> F = fun(Z) -> Z end,
F2 = fun(X) -> F(X), Z = {X,X}, Z end,
{1,1} = F2(1), Z = 7, Z end,
"begin F = fun(Z) -> Z end,
F2 = fun(X) -> F(X), Z = {X,X}, Z end,
{1,1} = F2(1), Z = 7, Z end.", 7, ['F','F2','Z'],
LFH, EFH),
- ?line check(fun() -> F = fun(F, N) -> [?MODULE:count_down(F,N) || X <-[1]]
+ check(fun() -> F = fun(F, N) -> [?MODULE:count_down(F,N) || X <-[1]]
end, F(F,2) end,
concat(["begin F = fun(F, N) -> [", M,
":count_down(F,N) || X <-[1]] end, F(F,2) end."]),
@@ -1289,45 +1223,42 @@ external_func({M,F}, As) ->
-try_catch(doc) ->
- ["Test try-of-catch-after-end statement"];
-try_catch(suite) ->
- [];
+%% Test try-of-catch-after-end statement.
try_catch(Config) when is_list(Config) ->
%% Match in of with catch
- ?line check(fun() -> try 1 of 1 -> 2 catch _:_ -> 3 end end,
+ check(fun() -> try 1 of 1 -> 2 catch _:_ -> 3 end end,
"try 1 of 1 -> 2 catch _:_ -> 3 end.", 2),
- ?line check(fun() -> try 1 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end end,
+ check(fun() -> try 1 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end end,
"try 1 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end.", 2),
- ?line check(fun() -> try 3 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end end,
+ check(fun() -> try 3 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end end,
"try 3 of 1 -> 2; 3 -> 4 catch _:_ -> 5 end.", 4),
%% Just after
- ?line check(fun () -> X = try 1 after put(try_catch, 2) end,
+ check(fun () -> X = try 1 after put(try_catch, 2) end,
{X,get(try_catch)} end,
"begin X = try 1 after put(try_catch, 2) end, "
"{X,get(try_catch)} end.", {1,2}),
%% Match in of with after
- ?line check(fun() -> X = try 1 of 1 -> 2 after put(try_catch, 3) end,
+ check(fun() -> X = try 1 of 1 -> 2 after put(try_catch, 3) end,
{X,get(try_catch)} end,
"begin X = try 1 of 1 -> 2 after put(try_catch, 3) end, "
"{X,get(try_catch)} end.", {2,3}),
- ?line check(fun() -> X = try 1 of 1 -> 2; 3 -> 4
+ check(fun() -> X = try 1 of 1 -> 2; 3 -> 4
after put(try_catch, 5) end,
{X,get(try_catch)} end,
"begin X = try 1 of 1 -> 2; 3 -> 4 "
" after put(try_catch, 5) end, "
" {X,get(try_catch)} end.", {2,5}),
- ?line check(fun() -> X = try 3 of 1 -> 2; 3 -> 4
+ check(fun() -> X = try 3 of 1 -> 2; 3 -> 4
after put(try_catch, 5) end,
{X,get(try_catch)} end,
"begin X = try 3 of 1 -> 2; 3 -> 4 "
" after put(try_catch, 5) end, "
" {X,get(try_catch)} end.", {4,5}),
%% Nomatch in of
- ?line error_check("try 1 of 2 -> 3 catch _:_ -> 4 end.",
+ error_check("try 1 of 2 -> 3 catch _:_ -> 4 end.",
{try_clause,1}),
%% Nomatch in of with after
- ?line check(fun () -> {'EXIT',{{try_clause,1},_}} =
+ check(fun () -> {'EXIT',{{try_clause,1},_}} =
begin catch try 1 of 2 -> 3
after put(try_catch, 4) end end,
get(try_catch) end,
@@ -1336,14 +1267,14 @@ try_catch(Config) when is_list(Config) ->
" after put(try_catch, 4) end end, "
" get(try_catch) end. ", 4),
%% Exception in try
- ?line check(fun () -> try 1=2 catch error:{badmatch,2} -> 3 end end,
+ check(fun () -> try 1=2 catch error:{badmatch,2} -> 3 end end,
"try 1=2 catch error:{badmatch,2} -> 3 end.", 3),
- ?line check(fun () -> try 1=2 of 3 -> 4
+ check(fun () -> try 1=2 of 3 -> 4
catch error:{badmatch,2} -> 5 end end,
"try 1=2 of 3 -> 4 "
"catch error:{badmatch,2} -> 5 end.", 5),
%% Exception in try with after
- ?line check(fun () -> X = try 1=2
+ check(fun () -> X = try 1=2
catch error:{badmatch,2} -> 3
after put(try_catch, 4) end,
{X,get(try_catch)} end,
@@ -1351,7 +1282,7 @@ try_catch(Config) when is_list(Config) ->
" catch error:{badmatch,2} -> 3 "
" after put(try_catch, 4) end, "
" {X,get(try_catch)} end. ", {3,4}),
- ?line check(fun () -> X = try 1=2 of 3 -> 4
+ check(fun () -> X = try 1=2 of 3 -> 4
catch error:{badmatch,2} -> 5
after put(try_catch, 6) end,
{X,get(try_catch)} end,
@@ -1360,12 +1291,12 @@ try_catch(Config) when is_list(Config) ->
" after put(try_catch, 6) end, "
" {X,get(try_catch)} end. ", {5,6}),
%% Uncaught exception
- ?line error_check("try 1=2 catch error:undefined -> 3 end. ",
+ error_check("try 1=2 catch error:undefined -> 3 end. ",
{badmatch,2}),
- ?line error_check("try 1=2 of 3 -> 4 catch error:undefined -> 5 end. ",
+ error_check("try 1=2 of 3 -> 4 catch error:undefined -> 5 end. ",
{badmatch,2}),
%% Uncaught exception with after
- ?line check(fun () -> {'EXIT',{{badmatch,2},_}} =
+ check(fun () -> {'EXIT',{{badmatch,2},_}} =
begin catch try 1=2
after put(try_catch, 3) end end,
get(try_catch) end,
@@ -1373,7 +1304,7 @@ try_catch(Config) when is_list(Config) ->
" begin catch try 1=2 "
" after put(try_catch, 3) end end, "
" get(try_catch) end. ", 3),
- ?line check(fun () -> {'EXIT',{{badmatch,2},_}} =
+ check(fun () -> {'EXIT',{{badmatch,2},_}} =
begin catch try 1=2 of 3 -> 4
after put(try_catch, 5) end end,
get(try_catch) end,
@@ -1381,7 +1312,7 @@ try_catch(Config) when is_list(Config) ->
" begin catch try 1=2 of 3 -> 4"
" after put(try_catch, 5) end end, "
" get(try_catch) end. ", 5),
- ?line check(fun () -> {'EXIT',{{badmatch,2},_}} =
+ check(fun () -> {'EXIT',{{badmatch,2},_}} =
begin catch try 1=2 catch error:undefined -> 3
after put(try_catch, 4) end end,
get(try_catch) end,
@@ -1389,7 +1320,7 @@ try_catch(Config) when is_list(Config) ->
" begin catch try 1=2 catch error:undefined -> 3 "
" after put(try_catch, 4) end end, "
" get(try_catch) end. ", 4),
- ?line check(fun () -> {'EXIT',{{badmatch,2},_}} =
+ check(fun () -> {'EXIT',{{badmatch,2},_}} =
begin catch try 1=2 of 3 -> 4
catch error:undefined -> 5
after put(try_catch, 6) end end,
@@ -1402,26 +1333,23 @@ try_catch(Config) when is_list(Config) ->
ok.
-eval_expr_5(doc) ->
- ["(OTP-7933)"];
-eval_expr_5(suite) ->
- [];
+%% OTP-7933.
eval_expr_5(Config) when is_list(Config) ->
- ?line {ok,Tokens ,_} =
+ {ok,Tokens ,_} =
erl_scan:string("if a+4 == 4 -> yes; true -> no end. "),
- ?line {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
- ?line {value, no, []} = erl_eval:expr(Expr, [], none, none, none),
- ?line no = erl_eval:expr(Expr, [], none, none, value),
+ {ok, [Expr]} = erl_parse:parse_exprs(Tokens),
+ {value, no, []} = erl_eval:expr(Expr, [], none, none, none),
+ no = erl_eval:expr(Expr, [], none, none, value),
try
erl_eval:expr(Expr, [], none, none, 4711),
- ?line function_clause = should_never_reach_here
+ function_clause = should_never_reach_here
catch
error:function_clause ->
ok
end.
zero_width(Config) when is_list(Config) ->
- ?line check(fun() ->
+ check(fun() ->
{'EXIT',{badarg,_}} = (catch <<not_a_number:0>>),
ok
end, "begin {'EXIT',{badarg,_}} = (catch <<not_a_number:0>>), "
@@ -1524,7 +1452,7 @@ check1(F, String, Result) ->
{value, Result, _} ->
ok;
Other ->
- test_server:fail({eval, Other, Result})
+ ct:fail({eval, Other, Result})
end.
check(F, String, Result, BoundVars, LFH, EFH) ->
@@ -1537,11 +1465,11 @@ check(F, String, Result, BoundVars, LFH, EFH) ->
true ->
ok;
false ->
- test_server:fail({check, BoundVars, Keys})
+ ct:fail({check, BoundVars, Keys})
end,
ok;
Other ->
- test_server:fail({check, Other, Result})
+ ct:fail({check, Other, Result})
end.
error_check(String, Result) ->
@@ -1549,7 +1477,7 @@ error_check(String, Result) ->
{'EXIT', {Result,_}} ->
ok;
Other ->
- test_server:fail({eval, Other, Result})
+ ct:fail({eval, Other, Result})
end.
error_check(String, Result, LFH, EFH) ->
@@ -1557,7 +1485,7 @@ error_check(String, Result, LFH, EFH) ->
{'EXIT', {Result,_}} ->
ok;
Other ->
- test_server:fail({eval, Other, Result})
+ ct:fail({eval, Other, Result})
end.
eval_string(String) ->
diff --git a/lib/stdlib/test/erl_expand_records_SUITE.erl b/lib/stdlib/test/erl_expand_records_SUITE.erl
index 8cec445cb4..3885f6648d 100644
--- a/lib/stdlib/test/erl_expand_records_SUITE.erl
+++ b/lib/stdlib/test/erl_expand_records_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
-module(erl_expand_records_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(line, put(line, ?LINE), ).
@@ -28,8 +28,8 @@
-define(privdir, "erl_expand_records_SUITE_priv").
-define(t, test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
--define(privdir, ?config(priv_dir, Config)).
+-include_lib("common_test/include/ct.hrl").
+-define(privdir, proplists:get_value(priv_dir, Config)).
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -41,19 +41,15 @@
otp_5915/1, otp_7931/1, otp_5990/1,
otp_7078/1, otp_7101/1, maps/1]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
+ Config.
end_per_testcase(_Case, _Config) ->
- Dog = ?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[attributes, expr, guard, init,
@@ -76,30 +72,26 @@ end_per_group(_GroupName, Config) ->
Config.
-attributes(doc) ->
- "Import module and functions.";
-attributes(suite) -> [];
+%% Import module and functions.
attributes(Config) when is_list(Config) ->
Ts = [
- <<"-import(lists, [append/2, reverse/1]).
+ <<"-import(lists, [append/2, reverse/1]).
-record(r, {a,b}).
- t() ->
- [2,1] = reverse(append([1],[2])),
- 3 = length([1,2,3]),
- 3 = record_info(size, r),
- [a, b] = record_info(fields, r),
- [] = erl_expand_records_SUITE:attributes(suite),
- ok.
- ">>
+t() ->
+ [2,1] = reverse(append([1],[2])),
+ 3 = length([1,2,3]),
+ 3 = record_info(size, r),
+ [a, b] = record_info(fields, r),
+ [_|_] = erl_expand_records_SUITE:all(),
+ ok.
+">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-expr(doc) ->
- "Some expressions.";
-expr(suite) -> [];
+%% Some expressions.
expr(Config) when is_list(Config) ->
Ts = [
<<"
@@ -159,14 +151,12 @@ expr(Config) when is_list(Config) ->
%% The code above should run equally well with and without
%% strict record tests.
- ?line run(Config, Ts, [no_strict_record_tests]),
- ?line run(Config, Ts, [strict_record_tests]),
+ run(Config, Ts, [no_strict_record_tests]),
+ run(Config, Ts, [strict_record_tests]),
ok.
-guard(doc) ->
- "is_record in guards.";
-guard(suite) -> [];
+%% is_record in guards.
guard(Config) when is_list(Config) ->
File = filename("guard.erl", Config),
Beam = filename("guard.beam", Config),
@@ -202,18 +192,16 @@ guard(Config) when is_list(Config) ->
12.
">>,
- ?line ok = file:write_file(File, Test),
- ?line {ok, guard, Ws} = compile:file(File, [return,{outdir,?privdir}]),
- ?line Warnings = [L || {_File,WL} <- Ws, {L,_M,nomatch_guard} <- WL],
- ?line [7,9,11,13,15,17,19,21,23,25,27] = Warnings,
+ ok = file:write_file(File, Test),
+ {ok, guard, Ws} = compile:file(File, [return,{outdir,?privdir}]),
+ Warnings = [L || {_File,WL} <- Ws, {L,_M,nomatch_guard} <- WL],
+ [7,9,11,13,15,17,19,21,23,25,27] = Warnings,
- ?line ok = file:delete(File),
- ?line ok = file:delete(Beam),
+ ok = file:delete(File),
+ ok = file:delete(Beam),
ok.
-init(doc) ->
- "Wildcard initialisation.";
-init(suite) -> [];
+%% Wildcard initialisation.
init(Config) when is_list(Config) ->
Ts = [
<<"
@@ -228,12 +216,10 @@ init(Config) when is_list(Config) ->
end.
">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-pattern(doc) ->
- "Some patterns.";
-pattern(suite) -> [];
+%% Some patterns.
pattern(Config) when is_list(Config) ->
Ts = [
<<"-import(lists, [append/2, reverse/1]).
@@ -317,12 +303,9 @@ pattern(Config) when is_list(Config) ->
16.
">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-strict(doc) ->
- "";
-strict(suite) -> [];
strict(Config) when is_list(Config) ->
Ts1 = [
<<"-record(r1, {a,b}).
@@ -345,7 +328,7 @@ strict(Config) when is_list(Config) ->
error(wrong_element).
">>
],
- ?line run(Config, Ts1, [strict_record_tests]),
+ run(Config, Ts1, [strict_record_tests]),
Ts2 = [
<<"-record(r1, {a,b}).
@@ -361,12 +344,10 @@ strict(Config) when is_list(Config) ->
error(wrong_element).
">>
],
- ?line run(Config, Ts2, [no_strict_record_tests]),
+ run(Config, Ts2, [no_strict_record_tests]),
ok.
-update(doc) ->
- "Record updates.";
-update(suite) -> [];
+%% Record updates.
update(Config) when is_list(Config) ->
Ts = [
<<"-record(r, {a,b,c,d,e,f}).
@@ -401,7 +382,7 @@ update(Config) when is_list(Config) ->
erlang:error(wrong_setelement_called).
">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
maps(Config) when is_list(Config) ->
@@ -420,9 +401,7 @@ maps(Config) when is_list(Config) ->
run(Config, Ts, [strict_record_tests]),
ok.
-otp_5915(doc) ->
- "Strict record tests in guards.";
-otp_5915(suite) -> [];
+%% Strict record tests in guards.
otp_5915(Config) when is_list(Config) ->
%% These tests are also run by the compiler's record_SUITE.
Ts = [
@@ -565,12 +544,10 @@ otp_5915(Config) when is_list(Config) ->
ok.
">>
],
- ?line run(Config, Ts, [strict_record_tests]),
+ run(Config, Ts, [strict_record_tests]),
ok.
-otp_7931(doc) ->
- "Test optimization of record accesses and is_record/3 tests in guards";
-otp_7931(suite) -> [];
+%% Test optimization of record accesses and is_record/3 tests in guards.
otp_7931(Config) when is_list(Config) ->
Ts = [
<<"-record(r, {a = 4,b}).
@@ -654,12 +631,10 @@ otp_7931(Config) when is_list(Config) ->
ok.
">>
],
- ?line run(Config, Ts, [strict_record_tests]),
+ run(Config, Ts, [strict_record_tests]),
ok.
-otp_5990(doc) ->
- "OTP-5990. {erlang,is_record}.";
-otp_5990(suite) -> [];
+%% OTP-5990. {erlang,is_record}.
otp_5990(Config) when is_list(Config) ->
Ts = [
<<"
@@ -690,13 +665,11 @@ otp_5990(Config) when is_list(Config) ->
ok.
">>
],
- ?line run(Config, Ts, [strict_record_tests]),
+ run(Config, Ts, [strict_record_tests]),
ok.
-otp_7078(doc) ->
- "OTP-7078. Record update: missing test.";
-otp_7078(suite) -> [];
+%% OTP-7078. Record update: missing test.
otp_7078(Config) when is_list(Config) ->
Ts = [
<<"
@@ -724,14 +697,12 @@ otp_7078(Config) when is_list(Config) ->
">>
],
- ?line run(Config, Ts, [strict_record_tests]),
+ run(Config, Ts, [strict_record_tests]),
ok.
-record(otp_7101, {a,b,c=[],d=[],e=[]}).
-otp_7101(doc) ->
- "OTP-7101. Record update: more than one call to setelement/3.";
-otp_7101(suite) -> [];
+%% OTP-7101. Record update: more than one call to setelement/3.
otp_7101(Config) when is_list(Config) ->
Rec = #otp_7101{},
@@ -739,28 +710,28 @@ otp_7101(Config) when is_list(Config) ->
%% The tracer will forward all trace messages to us.
Self = self(),
Tracer = spawn_link(fun() -> otp_7101_tracer(Self, 0) end),
- ?line 1 = erlang:trace_pattern({erlang,setelement,3}, true),
- ?line erlang:trace(self(), true, [{tracer,Tracer},call]),
+ 1 = erlang:trace_pattern({erlang,setelement,3}, true),
+ erlang:trace(self(), true, [{tracer,Tracer},call]),
%% Update the record.
- ?line #otp_7101{a=2,b=1,c=[],d=[],e=[]} = otp_7101_update1(Rec),
- ?line #otp_7101{a=1,b=2,c=[],d=[],e=[]} = otp_7101_update2(Rec),
- ?line #otp_7101{a=2,b=1,c=[],d=[],e=[]} = otp_7101_update3(Rec),
- ?line #otp_7101{a=1,b=2,c=[],d=[],e=[]} = otp_7101_update4(Rec),
+ #otp_7101{a=2,b=1,c=[],d=[],e=[]} = otp_7101_update1(Rec),
+ #otp_7101{a=1,b=2,c=[],d=[],e=[]} = otp_7101_update2(Rec),
+ #otp_7101{a=2,b=1,c=[],d=[],e=[]} = otp_7101_update3(Rec),
+ #otp_7101{a=1,b=2,c=[],d=[],e=[]} = otp_7101_update4(Rec),
%% Verify that setelement/3 was called the same number of times as
%% the number of record updates.
- ?line Ref = erlang:trace_delivered(Self),
+ Ref = erlang:trace_delivered(Self),
receive
{trace_delivered, Self, Ref} ->
Tracer ! done
end,
- ?line 1 = erlang:trace_pattern({erlang,setelement,3}, false),
+ 1 = erlang:trace_pattern({erlang,setelement,3}, false),
receive
4 ->
ok;
Other ->
- ?line ?t:fail({unexpected,Other})
+ ct:fail({unexpected,Other})
end.
otp_7101_tracer(Parent, N) ->
@@ -797,10 +768,9 @@ run(Config, Tests, Opts) ->
AbsFile = filename:rootname(SourceFile, ".erl"),
code:purge(Mod),
code:load_abs(AbsFile, Mod),
-%io:format("run~n"),
case catch Mod:t() of
{'EXIT', _Reason} = Error ->
- ?t:format("failed, got ~p~n", [Error]),
+ io:format("failed, got ~p~n", [Error]),
fail();
ok ->
ok
@@ -837,5 +807,4 @@ warnings(File, Ws) ->
end.
fail() ->
- io:format("failed~n"),
- ?t:fail().
+ ct:fail(failed).
diff --git a/lib/stdlib/test/erl_internal_SUITE.erl b/lib/stdlib/test/erl_internal_SUITE.erl
index 0d2f535040..bfa48de6b7 100644
--- a/lib/stdlib/test/erl_internal_SUITE.erl
+++ b/lib/stdlib/test/erl_internal_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,9 +26,11 @@
-export([init_per_testcase/2, end_per_testcase/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[behav].
@@ -49,20 +51,13 @@ end_per_group(_GroupName, Config) ->
Config.
--define(default_timeout, ?t:minutes(2)).
-
init_per_testcase(_Case, Config) ->
- Dog = test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-behav(suite) -> [];
-behav(doc) ->
- ["Check that the behaviour callbacks are correctly defined"];
+%% Check that the behaviour callbacks are correctly defined.
behav(_) ->
Modules = [application, gen_server, gen_fsm, gen_event,
supervisor_bridge, supervisor],
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index 375fb6bc93..d916eb3eef 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -19,7 +19,7 @@
%%
-module(erl_lint_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(line, put(line, ?LINE), ).
@@ -28,59 +28,47 @@
-define(privdir, "erl_lint_SUITE_priv").
-define(t, test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
--define(datadir, ?config(data_dir, Conf)).
--define(privdir, ?config(priv_dir, Conf)).
+-include_lib("common_test/include/ct.hrl").
+-define(datadir, proplists:get_value(data_dir, Conf)).
+-define(privdir, proplists:get_value(priv_dir, Conf)).
-endif.
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2]).
-
--export([
- unused_vars_warn_basic/1,
- unused_vars_warn_lc/1,
- unused_vars_warn_rec/1,
- unused_vars_warn_fun/1,
- unused_vars_OTP_4858/1,
- unused_unsafe_vars_warn/1,
- export_vars_warn/1,
- shadow_vars/1,
- unused_import/1,
- unused_function/1,
- unsafe_vars/1,unsafe_vars2/1,
- unsafe_vars_try/1,
- unsized_binary_in_bin_gen_pattern/1,
- guard/1, otp_4886/1, otp_4988/1, otp_5091/1, otp_5276/1, otp_5338/1,
- otp_5362/1, otp_5371/1, otp_7227/1, otp_5494/1, otp_5644/1, otp_5878/1,
- otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1, otp_11254/1,
- otp_11772/1, otp_11771/1, otp_11872/1,
- export_all/1,
- bif_clash/1,
- behaviour_basic/1, behaviour_multiple/1, otp_11861/1,
- otp_7550/1,
- otp_8051/1,
- format_warn/1,
- on_load_successful/1, on_load_failing/1,
- too_many_arguments/1,
- basic_errors/1,bin_syntax_errors/1,
- predef/1,
- maps/1,maps_type/1,otp_11851/1,otp_12195/1, otp_13230/1
- ]).
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-
-end_per_testcase(_Case, _Config) ->
- Dog = ?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+-export([all/0, suite/0, groups/0]).
+
+-export([unused_vars_warn_basic/1,
+ unused_vars_warn_lc/1,
+ unused_vars_warn_rec/1,
+ unused_vars_warn_fun/1,
+ unused_vars_OTP_4858/1,
+ unused_unsafe_vars_warn/1,
+ export_vars_warn/1,
+ shadow_vars/1,
+ unused_import/1,
+ unused_function/1,
+ unsafe_vars/1,unsafe_vars2/1,
+ unsafe_vars_try/1,
+ unsized_binary_in_bin_gen_pattern/1,
+ guard/1, otp_4886/1, otp_4988/1, otp_5091/1, otp_5276/1, otp_5338/1,
+ otp_5362/1, otp_5371/1, otp_7227/1, otp_5494/1, otp_5644/1, otp_5878/1,
+ otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1, otp_11254/1,
+ otp_11772/1, otp_11771/1, otp_11872/1,
+ export_all/1,
+ bif_clash/1,
+ behaviour_basic/1, behaviour_multiple/1, otp_11861/1,
+ otp_7550/1,
+ otp_8051/1,
+ format_warn/1,
+ on_load_successful/1, on_load_failing/1,
+ too_many_arguments/1,
+ basic_errors/1,bin_syntax_errors/1,
+ predef/1,
+ maps/1,maps_type/1,maps_parallel_match/1,
+ otp_11851/1,otp_11879/1,otp_13230/1,
+ record_errors/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[{group, unused_vars_warn}, export_vars_warn,
@@ -94,7 +82,9 @@ all() ->
bif_clash, behaviour_basic, behaviour_multiple, otp_11861,
otp_7550, otp_8051, format_warn, {group, on_load},
too_many_arguments, basic_errors, bin_syntax_errors, predef,
- maps, maps_type, otp_11851, otp_12195, otp_13230].
+ maps, maps_type, maps_parallel_match,
+ otp_11851, otp_11879, otp_13230,
+ record_errors].
groups() ->
[{unused_vars_warn, [],
@@ -103,64 +93,49 @@ groups() ->
unused_vars_OTP_4858, unused_unsafe_vars_warn]},
{on_load, [], [on_load_successful, on_load_failing]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-
-unused_vars_warn_basic(doc) ->
- "Warnings for unused variables in some simple cases.";
-unused_vars_warn_basic(suite) -> [];
+%% Warnings for unused variables in some simple cases.
unused_vars_warn_basic(Config) when is_list(Config) ->
Ts = [{basic1,
<<"f(F) -> % F unused.
ok.
- f(F, F) ->
- ok.
+f(F, F) ->
+ ok.
- g(_X) ->
- y.
+g(_X) ->
+ y.
- h(P) ->
- P.
+h(P) ->
+ P.
- x(N) ->
- case a:b() of
- [N|Y] -> % Y unused.
- ok
- end.
+x(N) ->
+ case a:b() of
+ [N|Y] -> % Y unused.
+ ok
+ end.
- y(N, L) ->
- lists:map(fun(T) -> T*N end, L).
+y(N, L) ->
+ lists:map(fun(T) -> T*N end, L).
- z(N, L) -> % N unused
- lists:map(fun(N, T) -> T*N end, L). % N shadowed.
+z(N, L) -> % N unused
+ lists:map(fun(N, T) -> T*N end, L). % N shadowed.
- c(A) ->
- case A of
- 1 -> B = []; % B unused.
- 2 -> B = []; % B unused.
- 3 -> B = f, B
- end.
- ">>,
+c(A) ->
+ case A of
+ 1 -> B = []; % B unused.
+ 2 -> B = []; % B unused.
+ 3 -> B = f, B
+ end.
+">>,
[warn_unused_vars],
- {warnings,[{1,erl_lint,{unused_var,'F'}},
- {15,erl_lint,{unused_var,'Y'}},
- {22,erl_lint,{unused_var,'N'}},
- {23,erl_lint,{shadowed_var,'N','fun'}},
- {28,erl_lint,{unused_var,'B'}},
- {29,erl_lint,{unused_var,'B'}}]}},
+{warnings,[{1,erl_lint,{unused_var,'F'}},
+ {15,erl_lint,{unused_var,'Y'}},
+ {22,erl_lint,{unused_var,'N'}},
+ {23,erl_lint,{shadowed_var,'N','fun'}},
+ {28,erl_lint,{unused_var,'B'}},
+ {29,erl_lint,{unused_var,'B'}}]}},
{basic2,
<<"-record(r, {x,y}).
f({X,Y}) -> {Z=X,Z=Y};
@@ -170,12 +145,10 @@ unused_vars_warn_basic(Config) when is_list(Config) ->
g({M, F, Arg}) -> (Z=M):F(Z=Arg).
h(X, Y) -> (Z=X) + (Z=Y).">>,
[warn_unused_vars], []}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unused_vars_warn_lc(doc) ->
- "Warnings for unused variables in list comprehensions.";
-unused_vars_warn_lc(suite) -> [];
+%% Warnings for unused variables in list comprehensions.
unused_vars_warn_lc(Config) when is_list(Config) ->
Ts = [{lc1,
<<"bin([X]) ->
@@ -402,9 +375,7 @@ unused_vars_warn_lc(Config) when is_list(Config) ->
{error,[{22,erl_lint,{unsafe_var,'U',{'case',2}}},
{27,erl_lint,{unsafe_var,'U',{'case',2}}}],
[{16,erl_lint,{unused_var,'Y'}},
- % {24,erl_lint,{exported_var,'X',{'case',8}}},
{24,erl_lint,{unused_var,'U'}},
- % {26,erl_lint,{exported_var,'X',{'case',8}}},
{26,erl_lint,{unused_var,'U'}}]}},
{lc17,
@@ -434,7 +405,6 @@ unused_vars_warn_lc(Config) when is_list(Config) ->
[warn_unused_vars],
{error,[{22,erl_lint,{unsafe_var,'U',{'case',3}}}],
[{17,erl_lint,{unused_var,'Y'}},
- % {21,erl_lint,{exported_var,'X',{'case',9}}},
{21,erl_lint,{unused_var,'U'}}]}},
{lc18,
@@ -459,14 +429,12 @@ unused_vars_warn_lc(Config) when is_list(Config) ->
end,
[B || <<U: % U unused
U>> <- X, <<B:Y>> <- Z]. % U unsafe. Y unsafe.
- % U shadowed. (X exported.)
+ % U shadowed. (X exported.)
">>,
[warn_unused_vars],
{error,[{21,erl_lint,{unsafe_var,'U',{'case',2}}},
{21,erl_lint,{unsafe_var,'Y',{'case',14}}}],
[{20,erl_lint,{unused_var,'U'}}
- % ,{21,erl_lint,{exported_var,'X',{'case',8}}}
- % ,{21,erl_lint,{shadowed_var,'U',generate}}
]}},
{lc19,
@@ -520,13 +488,11 @@ unused_vars_warn_lc(Config) when is_list(Config) ->
[{14,erl_lint,{unused_var,'Q'}}]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unused_vars_warn_rec(doc) ->
- "Warnings for unused variables in records.";
-unused_vars_warn_rec(suite) -> [];
+%% Warnings for unused variables in records.
unused_vars_warn_rec(Config) when is_list(Config) ->
Ts = [{rec1, % An example provided by Bjorn.
<<"-record(edge,
@@ -578,12 +544,10 @@ unused_vars_warn_rec(Config) when is_list(Config) ->
{error,[{2,erl_lint,{redefine_field,r,a}},
{2,erl_lint,{redefine_field,r,a}}],
[{2,erl_lint,{unused_var,'X'}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unused_vars_warn_fun(doc) ->
- "Warnings for unused variables in funs.";
-unused_vars_warn_fun(suite) -> [];
+%% Warnings for unused variables in funs.
unused_vars_warn_fun(Config) when is_list(Config) ->
Ts = [{fun1,
<<"a({A,B}) -> % A unused.
@@ -705,12 +669,10 @@ unused_vars_warn_fun(Config) when is_list(Config) ->
{33,erl_lint,{unused_var,'U'}},
{33,erl_lint,{shadowed_var,'U','fun'}}]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unused_vars_OTP_4858(doc) ->
- "Bit syntax, binsize variable used in the same matching.";
-unused_vars_OTP_4858(suite) -> [];
+%% Bit syntax, binsize variable used in the same matching.
unused_vars_OTP_4858(Config) when is_list(Config) ->
Ts = [{otp_4858,
<<"objs(<<Size:4/unit:8, B:Size/binary>>) ->
@@ -729,7 +691,7 @@ unused_vars_OTP_4858(Config) when is_list(Config) ->
{8,erl_lint,{unused_var,'B'}},
{8,erl_lint,{unused_var,'Rest'}}]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
unused_unsafe_vars_warn(Config) when is_list(Config) ->
@@ -774,9 +736,7 @@ unused_unsafe_vars_warn(Config) when is_list(Config) ->
run(Config, Ts),
ok.
-export_vars_warn(doc) ->
- "Warnings for exported variables";
-export_vars_warn(suite) -> [];
+%% Warnings for exported variables.
export_vars_warn(Config) when is_list(Config) ->
Ts = [{exp1,
<<"u() ->
@@ -866,13 +826,11 @@ export_vars_warn(Config) when is_list(Config) ->
[],
{warnings,[{7,erl_lint,{exported_var,'Z',{'if',2}}}]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-shadow_vars(doc) ->
- "Shadowed variables are tested in other places, but here we test "
- "that the warning can be turned off.";
-shadow_vars(suite) -> [];
+%% Shadowed variables are tested in other places, but here we test
+%% that the warning can be turned off.
shadow_vars(Config) when is_list(Config) ->
Ts = [{shadow1,
<<"bin(A) ->
@@ -897,12 +855,10 @@ shadow_vars(Config) when is_list(Config) ->
">>,
[],
[]}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unused_import(doc) ->
- "Test that the 'warn_unused_import' option works.";
-unused_import(suite) -> [];
+%% Test that the 'warn_unused_import' option works.
unused_import(Config) when is_list(Config) ->
Ts = [{imp1,
<<"-import(lists, [map/2,foldl/3]).
@@ -911,12 +867,10 @@ unused_import(Config) when is_list(Config) ->
">>,
[warn_unused_import],
{warnings,[{1,erl_lint,{unused_import,{{foldl,3},lists}}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unused_function(doc) ->
- "Test warnings for unused functions.";
-unused_function(suite) -> [];
+%% Test warnings for unused functions.
unused_function(Config) when is_list(Config) ->
Ts = [{func1,
<<"-export([t/1]).
@@ -959,12 +913,10 @@ unused_function(Config) when is_list(Config) ->
{[]}, %Tuple indicates no 'export_all'.
[]}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unsafe_vars(doc) ->
- "OTP-4671. Errors for unsafe variables";
-unsafe_vars(suite) -> [];
+%% OTP-4671. Errors for unsafe variables.
unsafe_vars(Config) when is_list(Config) ->
Ts = [{unsafe1,
<<"t() ->
@@ -1040,7 +992,7 @@ unsafe_vars(Config) when is_list(Config) ->
D = 1;
2 ->
A = 2,
- % B not bound here
+ %% B not bound here
C = 2,
catch D = 2; % unsafe in two clauses
3 ->
@@ -1062,12 +1014,10 @@ unsafe_vars(Config) when is_list(Config) ->
{24,erl_lint,{unsafe_var,'D',{'case',2}}}],
[]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unsafe_vars2(doc) ->
- "OTP-4831, seq8202. No warn_unused_vars and unsafe variables";
-unsafe_vars2(suite) -> [];
+%% OTP-4831, seq8202. No warn_unused_vars and unsafe variables.
unsafe_vars2(Config) when is_list(Config) ->
Ts = [{unsafe2_1,
<<"foo(State) ->
@@ -1096,12 +1046,10 @@ unsafe_vars2(Config) when is_list(Config) ->
[],
{errors,[{9,erl_lint,{unsafe_var,'State1',{'if',4}}}],[]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unsafe_vars_try(doc) ->
- "Errors for unsafe variables in try/catch constructs.";
-unsafe_vars_try(suite) -> [];
+%% Errors for unsafe variables in try/catch constructs.
unsafe_vars_try(Config) when is_list(Config) ->
Ts = [{unsafe_try1,
<<"foo2() ->
@@ -1286,22 +1234,24 @@ unsafe_vars_try(Config) when is_list(Config) ->
">>,
[],
{errors,[{13,erl_lint,{unsafe_var,'Acc',{'try',6}}}],[]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-unsized_binary_in_bin_gen_pattern(doc) ->
- "Unsized binary fields are forbidden in patterns of bit string generators";
-unsized_binary_in_bin_gen_pattern(suite) -> [];
+%% Unsized binary fields are forbidden in patterns of bit string generators.
unsized_binary_in_bin_gen_pattern(Config) when is_list(Config) ->
Ts = [{unsized_binary_in_bin_gen_pattern,
<<"t({bc,binary,Bin}) ->
<< <<X,Tail/binary>> || <<X,Tail/binary>> <= Bin >>;
+ t({bc,bytes,Bin}) ->
+ << <<X,Tail/binary>> || <<X,Tail/bytes>> <= Bin >>;
t({bc,bits,Bin}) ->
<< <<X,Tail/bits>> || <<X,Tail/bits>> <= Bin >>;
t({bc,bitstring,Bin}) ->
<< <<X,Tail/bits>> || <<X,Tail/bitstring>> <= Bin >>;
t({lc,binary,Bin}) ->
[ {X,Tail} || <<X,Tail/binary>> <= Bin ];
+ t({lc,bytes,Bin}) ->
+ [ {X,Tail} || <<X,Tail/bytes>> <= Bin ];
t({lc,bits,Bin}) ->
[ {X,Tail} || <<X,Tail/bits>> <= Bin ];
t({lc,bitstring,Bin}) ->
@@ -1313,14 +1263,14 @@ unsized_binary_in_bin_gen_pattern(Config) when is_list(Config) ->
{6,erl_lint,unsized_binary_in_bin_gen_pattern},
{8,erl_lint,unsized_binary_in_bin_gen_pattern},
{10,erl_lint,unsized_binary_in_bin_gen_pattern},
- {12,erl_lint,unsized_binary_in_bin_gen_pattern}],
+ {12,erl_lint,unsized_binary_in_bin_gen_pattern},
+ {14,erl_lint,unsized_binary_in_bin_gen_pattern},
+ {16,erl_lint,unsized_binary_in_bin_gen_pattern}],
[]}}],
[] = run(Config, Ts),
ok.
-guard(doc) ->
- "OTP-4670. Guards, is_record in particular.";
-guard(suite) -> [];
+%% OTP-4670. Guards, is_record in particular.
guard(Config) when is_list(Config) ->
%% Well, these could be plain code...
Ts = [{guard1,
@@ -1535,7 +1485,7 @@ guard(Config) when is_list(Config) ->
">>,
[nowarn_obsolete_guard],
[]}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
Ts1 = [{guard5,
<<"-record(apa, {}).
t3(A) when record(A, {apa}) ->
@@ -1606,12 +1556,10 @@ guard(Config) when is_list(Config) ->
{2,erl_lint,illegal_guard_expr}],
[]}}
],
- ?line [] = run(Config, Ts1),
+ [] = run(Config, Ts1),
ok.
-otp_4886(doc) ->
- "OTP-4886. Calling is_record with given record name.";
-otp_4886(suite) -> [];
+%% OTP-4886. Calling is_record with given record name.
otp_4886(Config) when is_list(Config) ->
Ts = [{otp_4886,
<<"t() ->
@@ -1630,12 +1578,10 @@ otp_4886(Config) when is_list(Config) ->
{4,erl_lint,{undefined_record,foo}},
{5,erl_lint,{undefined_record,foo}}],
[]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_4988(doc) ->
- "OTP-4988. Error when in-lining non-existent functions.";
-otp_4988(suite) -> [];
+%% OTP-4988. Error when in-lining non-existent functions.
otp_4988(Config) when is_list(Config) ->
Ts = [{otp_4988,
<<"-compile({inline, [{f,3},{f,4},{f,2},{f,a},{1,foo}]}).
@@ -1657,12 +1603,10 @@ otp_4988(Config) when is_list(Config) ->
{1,erl_lint,{bad_inline,{f,a}}},
{3,erl_lint,{bad_inline,{g,12}}}],
[]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5091(doc) ->
- "OTP-5091. Patterns and the bit syntax: invalid warnings.";
-otp_5091(suite) -> [];
+%% OTP-5091. Patterns and the bit syntax: invalid warnings.
otp_5091(Config) when is_list(Config) ->
Ts = [{otp_5091_1,
<<"t() ->
@@ -1875,12 +1819,10 @@ otp_5091(Config) when is_list(Config) ->
<<"-record(r, {f1,f2}).
t(#r{f1 = A, f2 = A}) -> a.">>, [], []}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5276(doc) ->
- "OTP-5276. Check the 'deprecated' attributed.";
-otp_5276(suite) -> [];
+%% OTP-5276. Check the 'deprecated' attributed.
otp_5276(Config) when is_list(Config) ->
Ts = [{otp_5276_1,
<<"-deprecated([{frutt,0,next_version}]).
@@ -1907,12 +1849,10 @@ otp_5276(Config) when is_list(Config) ->
{9,erl_lint,{invalid_deprecated,{{badly,formed},1}}},
{11,erl_lint,{bad_deprecated,{atom_to_list,1}}}],
[{13,erl_lint,{unused_function,{frutt,0}}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5917(doc) ->
- "OTP-5917. Check the 'deprecated' attributed.";
-otp_5917(suite) -> [];
+%% OTP-5917. Check the 'deprecated' attributed.
otp_5917(Config) when is_list(Config) ->
Ts = [{otp_5917_1,
<<"-compile(export_all).
@@ -1924,12 +1864,10 @@ otp_5917(Config) when is_list(Config) ->
">>,
{[]},
[]}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_6585(doc) ->
- "OTP-6585. Check the deprecated guards list/1, pid/1, ....";
-otp_6585(suite) -> [];
+%% OTP-6585. Check the deprecated guards list/1, pid/1, ....
otp_6585(Config) when is_list(Config) ->
Ts = [{otp_6585_1,
<<"-compile(export_all).
@@ -1947,12 +1885,10 @@ otp_6585(Config) when is_list(Config) ->
{warnings,[{5,erl_lint,{obsolete_guard,{list,1}}},
{6,erl_lint,{obsolete_guard,{record,2}}},
{7,erl_lint,{obsolete_guard,{pid,1}}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5338(doc) ->
- "OTP-5338. Bad warning in record initialization.";
-otp_5338(suite) -> [];
+%% OTP-5338. Bad warning in record initialization.
otp_5338(Config) when is_list(Config) ->
%% OTP-5878: variables like X are no longer allowed in initialisations
Ts = [{otp_5338,
@@ -1964,13 +1900,11 @@ otp_5338(Config) when is_list(Config) ->
[],
{error,[{1,erl_lint,{unbound_var,'X'}}],
[{3,erl_lint,{unused_var,'X'}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5362(doc) ->
- "OTP-5362. deprecated_function, "
- "{nowarn_unused_funtion,FAs}, 'better' line numbers.";
-otp_5362(suite) -> [];
+%% OTP-5362. deprecated_function,
+%% {nowarn_unused_funtion,FAs}, 'better' line numbers.
otp_5362(Config) when is_list(Config) ->
Ts = [{otp_5362_1,
<<"-include_lib(\"stdlib/include/qlc.hrl\").
@@ -2069,7 +2003,7 @@ otp_5362(Config) when is_list(Config) ->
{error,
[{5,erl_lint,{call_to_redefined_old_bif,{spawn,1}}}],
[{4,erl_lint,{deprecated,{erlang,hash,2},{erlang,phash2,2},
- "in a future release"}}]}},
+ "a future release"}}]}},
{otp_5362_5,
<<"-compile(nowarn_deprecated_function).
@@ -2129,7 +2063,7 @@ otp_5362(Config) when is_list(Config) ->
{nowarn_bif_clash,{spawn,1}}]}, % has no effect
{warnings,
[{5,erl_lint,{deprecated,{erlang,hash,2},{erlang,phash2,2},
- "in a future release"}}]}},
+ "a future release"}}]}},
{otp_5362_9,
<<"-include_lib(\"stdlib/include/qlc.hrl\").
@@ -2159,7 +2093,7 @@ otp_5362(Config) when is_list(Config) ->
[],
{warnings,
[{1,erl_lint,{deprecated,{erlang,hash,2},
- {erlang,phash2,2},"in a future release"}}]}},
+ {erlang,phash2,2},"a future release"}}]}},
{call_removed_function,
<<"t(X) -> regexp:match(X).">>,
@@ -2170,12 +2104,10 @@ otp_5362(Config) when is_list(Config) ->
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5371(doc) ->
- "OTP-5371. Aliases for bit syntax expressions are no longer allowed.";
-otp_5371(suite) -> [];
+%% OTP-5371. Aliases for bit syntax expressions are no longer allowed.
otp_5371(Config) when is_list(Config) ->
Ts = [{otp_5371_1,
<<"t(<<A:8>> = <<B:8>>) ->
@@ -2229,10 +2161,10 @@ otp_5371(Config) when is_list(Config) ->
{6,v3_core,nomatch},
{8,v3_core,nomatch}]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_7227(doc) -> "OTP_7227. Some aliases for bit syntax expressions were still allowed.";
+%% OTP_7227. Some aliases for bit syntax expressions were still allowed.
otp_7227(Config) when is_list(Config) ->
Ts = [{otp_7227_1,
<<"t([<<A:8>> = {C,D} = <<B:8>>]) ->
@@ -2299,12 +2231,10 @@ otp_7227(Config) when is_list(Config) ->
[],
{errors,[{2,erl_lint,illegal_bin_pattern}],[]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5494(doc) ->
- "OTP-5494. Warnings for functions exported more than once.";
-otp_5494(suite) -> [];
+%% OTP-5494. Warnings for functions exported more than once.
otp_5494(Config) when is_list(Config) ->
Ts = [{otp_5494_1,
<<"-export([t/0]).
@@ -2313,12 +2243,10 @@ otp_5494(Config) when is_list(Config) ->
">>,
[],
{warnings,[{2,erl_lint,{duplicated_export,{t,0}}}]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5644(doc) ->
- "OTP-5644. M:F/A in record initialization.";
-otp_5644(suite) -> [];
+%% OTP-5644. M:F/A in record initialization.
otp_5644(Config) when is_list(Config) ->
%% This test is a no-op. Although {function,mfa,i,1} was
%% transformed into {function,Line,i,1} by copy_expr, the module
@@ -2334,12 +2262,10 @@ otp_5644(Config) when is_list(Config) ->
">>,
[],
[]}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_5878(doc) ->
- "OTP-5878. Record declaration: forward references, introduced variables.";
-otp_5878(suite) -> [];
+%% OTP-5878. Record declaration: forward references, introduced variables.
otp_5878(Config) when is_list(Config) ->
Ts = [{otp_5878_10,
<<"-record(rec1, {a = #rec2{}}).
@@ -2455,7 +2381,7 @@ otp_5878(Config) when is_list(Config) ->
[{1,erl_lint,{unused_record,r}}]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
Abstr = <<"-module(lint_test, [A, B]).
">>,
@@ -2472,7 +2398,7 @@ otp_5878(Config) when is_list(Config) ->
X <- Z ++ [A,Y]])}).
t() -> {#r1{},#r2{},#r3{}}.
">>,
- ?line {error,[{8,qlc,{used_generator_variable,'A'}},
+ {error,[{8,qlc,{used_generator_variable,'A'}},
{8,qlc,{used_generator_variable,'Y'}},
{8,qlc,{used_generator_variable,'Z'}}],
[{6,erl_lint,{unused_var,'V'}}]} =
@@ -2513,7 +2439,7 @@ otp_5878(Config) when is_list(Config) ->
bar.
">>,
- ?line {errors,[{6,erl_lint,{unbound_var,'A'}},
+ {errors,[{6,erl_lint,{unbound_var,'A'}},
{13,erl_lint,illegal_guard_expr},
{15,erl_lint,{undefined_field,r3,q}},
{17,erl_lint,{undefined_field,r,q}},
@@ -2532,14 +2458,14 @@ otp_5878(Config) when is_list(Config) ->
foo
end.
">>,
- ?line {errors,[{4,erl_lint,{undefined_function,{x,0}}},
+ {errors,[{4,erl_lint,{undefined_function,{x,0}}},
{5,erl_lint,illegal_guard_expr},
{7,erl_lint,illegal_guard_expr}],
[]} =
run_test2(Config, Ill2, [warn_unused_record]),
Ill3 = <<"t() -> ok.">>,
- ?line {errors,[{1,erl_lint,undefined_module}],[]} =
+ {errors,[{1,erl_lint,undefined_module}],[]} =
run_test2(Config, Ill3, [warn_unused_record]),
Usage1 = <<"-module(lint_test).
@@ -2552,7 +2478,7 @@ otp_5878(Config) when is_list(Config) ->
t() ->
{#u2{}}.
">>,
- ?line {warnings,[{5,erl_lint,{unused_record,u3}},
+ {warnings,[{5,erl_lint,{unused_record,u3}},
{6,erl_lint,{unused_record,u4}}]} =
run_test2(Config, Usage1, [warn_unused_record]),
@@ -2567,7 +2493,7 @@ otp_5878(Config) when is_list(Config) ->
t() ->
{#u2{}}.
">>,
- ?line [] = run_test2(Config, Usage2, [warn_unused_record]),
+ [] = run_test2(Config, Usage2, [warn_unused_record]),
%% This a completely different story...
%% The linter checks if qlc.hrl hasn't been included
@@ -2581,7 +2507,7 @@ otp_5878(Config) when is_list(Config) ->
H3 = q([X || X <- [1,2]], []),
{H1,H2,H3}.
">>,
- ?line {warnings,[{6,erl_lint,{missing_qlc_hrl,1}},
+ {warnings,[{6,erl_lint,{missing_qlc_hrl,1}},
{7,erl_lint,{missing_qlc_hrl,2}},
{8,erl_lint,{missing_qlc_hrl,2}}]} =
run_test2(Config, QLC2, [warn_unused_record]),
@@ -2597,13 +2523,29 @@ otp_5878(Config) when is_list(Config) ->
foo(#request{}) -> ok.
">>,
- ?line [] = run_test2(Config, UsedByType, [warn_unused_record]),
+ [] = run_test2(Config, UsedByType, [warn_unused_record]),
+
+ %% Abstract code generated by OTP 18. Note that the type info for
+ %% record fields has been put in a separate form.
+ OldAbstract = [{attribute,1,file,{"rec.erl",1}},
+ {attribute,1,module,rec},
+ {attribute,3,export,[{t,0}]},
+ {attribute,7,record,{r,[{record_field,7,{atom,7,f}}]}},
+ {attribute,7,type,
+ {{record,r},
+ [{typed_record_field,
+ {record_field,7,{atom,7,f}},
+ {type,7,union,[{atom,7,undefined},{type,7,atom,[]}]}}],
+ []}},
+ {function,9,t,0,[{clause,9,[],[],[{record,10,r,[]}]}]},
+ {eof,11}],
+ {error,[{"rec.erl",[{7,erl_lint,old_abstract_code}]}],[]} =
+ compile:forms(OldAbstract, [return, report]),
ok.
-otp_6885(doc) ->
- "OTP-6885. Binary fields in bit syntax matching is now only allowed at the end.";
-otp_6885(suite) -> [];
+%% OTP-6885. Binary fields in bit syntax matching is now only
+%% allowed at the end.
otp_6885(Config) when is_list(Config) ->
Ts = <<"-module(otp_6885).
-export([t/1]).
@@ -2630,7 +2572,7 @@ otp_6885(Config) when is_list(Config) ->
ok.
">>,
- ?line {errors,[{3,erl_lint,unsized_binary_not_at_end},
+ {errors,[{3,erl_lint,unsized_binary_not_at_end},
{4,erl_lint,unsized_binary_not_at_end},
{5,erl_lint,unsized_binary_not_at_end},
{10,erl_lint,typed_literal_string},
@@ -2640,9 +2582,7 @@ otp_6885(Config) when is_list(Config) ->
[]} = run_test2(Config, Ts, []),
ok.
-otp_10436(doc) ->
- "OTP-6885. Warnings for opaque types.";
-otp_10436(suite) -> [];
+%% OTP-6885. Warnings for opaque types.
otp_10436(Config) when is_list(Config) ->
Ts = <<"-module(otp_10436).
-export_type([t1/0]).
@@ -2662,9 +2602,7 @@ otp_10436(Config) when is_list(Config) ->
run_test2(Config, Ts2, []),
ok.
-otp_11254(doc) ->
- "OTP-11254. M:F/A could crash the linter.";
-otp_11254(suite) -> [];
+%% OTP-11254. M:F/A could crash the linter.
otp_11254(Config) when is_list(Config) ->
Ts = <<"-module(p2).
-export([manifest/2]).
@@ -2676,9 +2614,7 @@ otp_11254(Config) when is_list(Config) ->
run_test2(Config, Ts, []),
ok.
-otp_11772(doc) ->
- "OTP-11772. Reintroduce errors for redefined builtin types.";
-otp_11772(suite) -> [];
+%% OTP-11772. Reintroduce errors for redefined builtin types.
otp_11772(Config) when is_list(Config) ->
Ts = <<"
-module(newly).
@@ -2703,9 +2639,7 @@ otp_11772(Config) when is_list(Config) ->
[]} = run_test2(Config, Ts, []),
ok.
-otp_11771(doc) ->
- "OTP-11771. Do not allow redefinition of the types arity(_) &c..";
-otp_11771(suite) -> [];
+%% OTP-11771. Do not allow redefinition of the types arity(_) &c..
otp_11771(Config) when is_list(Config) ->
Ts = <<"
-module(newly).
@@ -2732,9 +2666,7 @@ otp_11771(Config) when is_list(Config) ->
[]} = run_test2(Config, Ts, []),
ok.
-otp_11872(doc) ->
- "OTP-11872. The type map() undefined when exported.";
-otp_11872(suite) -> [];
+%% OTP-11872. The type map() undefined when exported.
otp_11872(Config) when is_list(Config) ->
Ts = <<"
-module(map).
@@ -2750,28 +2682,24 @@ otp_11872(Config) when is_list(Config) ->
t() ->
1.
">>,
- {error,[{6,erl_lint,{undefined_type,{product,0}}},
- {8,erl_lint,{undefined_type,{dict,0}}}],
- [{8,erl_lint,{new_builtin_type,{map,0}}}]} =
+ {errors,[{6,erl_lint,{undefined_type,{product,0}}},
+ {8,erl_lint,{builtin_type,{map,0}}}], []} =
run_test2(Config, Ts, []),
ok.
-export_all(doc) ->
- "OTP-7392. Warning for export_all.";
+%% OTP-7392. Warning for export_all.
export_all(Config) when is_list(Config) ->
Ts = <<"-module(export_all_module).
-compile([export_all]).
id(I) -> I.
">>,
- ?line [] = run_test2(Config, Ts, []),
- ?line {warnings,[{2,erl_lint,export_all}]} =
+ [] = run_test2(Config, Ts, []),
+ {warnings,[{2,erl_lint,export_all}]} =
run_test2(Config, Ts, [warn_export_all]),
ok.
-bif_clash(doc) ->
- "Test warnings for functions that clash with BIFs.";
-bif_clash(suite) -> [];
+%% Test warnings for functions that clash with BIFs.
bif_clash(Config) when is_list(Config) ->
Ts = [{clash1,
<<"t(X) ->
@@ -3038,12 +2966,10 @@ bif_clash(Config) when is_list(Config) ->
[]}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-behaviour_basic(doc) ->
- "Basic tests with one behaviour.";
-behaviour_basic(suite) -> [];
+%% Basic tests with one behaviour.
behaviour_basic(Config) when is_list(Config) ->
Ts = [{behaviour1,
<<"-behaviour(application).
@@ -3077,12 +3003,10 @@ behaviour_basic(Config) when is_list(Config) ->
[],
{warnings,[{1,erl_lint,{undefined_behaviour_func,{start,2},application}}]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-behaviour_multiple(doc) ->
- "Basic tests with multiple behaviours.";
-behaviour_multiple(suite) -> [];
+%% Basic tests with multiple behaviours.
behaviour_multiple(Config) when is_list(Config) ->
Ts = [{behaviour1,
<<"-behaviour(application).
@@ -3180,12 +3104,10 @@ behaviour_multiple(Config) when is_list(Config) ->
erl_lint,
{conflicting_behaviours,{init,1},supervisor,1,gen_server}}]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_11861(doc) ->
- "OTP-11861. behaviour_info() and -callback.";
-otp_11861(suite) -> [];
+%% OTP-11861. behaviour_info() and -callback.
otp_11861(Conf) when is_list(Conf) ->
CallbackFiles = [callback1, callback2, callback3,
bad_behaviour1, bad_behaviour2],
@@ -3366,12 +3288,12 @@ otp_11861(Conf) when is_list(Conf) ->
[],
[]}
],
- ?line [] = run(Conf, Ts),
+ [] = run(Conf, Ts),
true = code:set_path(CodePath),
ok.
-otp_7550(doc) ->
- "Test that the new utf8/utf16/utf32 types do not allow size or unit specifiers.";
+%% Test that the new utf8/utf16/utf32 types do not allow size or
+%% unit specifiers.
otp_7550(Config) when is_list(Config) ->
Ts = [{otp_7550,
<<"f8(A) ->
@@ -3407,12 +3329,11 @@ otp_7550(Config) when is_list(Config) ->
{20,erl_lint,utf_bittype_size_or_unit}
],
[]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-otp_8051(doc) ->
- "Bugfix: -opaque with invalid type.";
+%% Bugfix: -opaque with invalid type.
otp_8051(Config) when is_list(Config) ->
Ts = [{otp_8051,
<<"-opaque foo() :: bar().
@@ -3420,12 +3341,10 @@ otp_8051(Config) when is_list(Config) ->
">>,
[],
{errors,[{1,erl_lint,{undefined_type,{bar,0}}}],[]}}],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-format_warn(doc) ->
- "Check that format warnings are generated.";
-format_warn(suite) -> [];
+%% Check that format warnings are generated.
format_warn(Config) when is_list(Config) ->
L1 = 14,
L2 = 4,
@@ -3435,18 +3354,18 @@ format_warn(Config) when is_list(Config) ->
ok.
format_level(Level, Count, Config) ->
- ?line W = get_compilation_result(Config, "format",
+ W = get_compilation_result(Config, "format",
[{warn_format, Level}]),
%% Pick out the 'format' warnings.
- ?line FW = lists:filter(fun({_Line, erl_lint, {format_error, _}}) -> true;
+ FW = lists:filter(fun({_Line, erl_lint, {format_error, _}}) -> true;
(_) -> false
end,
W),
- ?line case length(FW) of
+ case length(FW) of
Count ->
ok;
Other ->
- ?t:format("Expected ~w warning(s); got ~w", [Count,Other]),
+ io:format("Expected ~w warning(s); got ~w", [Count,Other]),
fail()
end,
ok.
@@ -3482,7 +3401,7 @@ on_load_successful(Config) when is_list(Config) ->
{[]}, %Tuple indicates no 'export_all'.
[]}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
on_load_failing(Config) when is_list(Config) ->
@@ -3530,12 +3449,10 @@ on_load_failing(Config) when is_list(Config) ->
{errors,
[{1,erl_lint,{undefined_on_load,{non_existing,0}}}],[]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
-too_many_arguments(doc) ->
- "Test that too many arguments is not accepted.";
-too_many_arguments(suite) -> [];
+%% Test that too many arguments is not accepted.
too_many_arguments(Config) when is_list(Config) ->
Ts = [{too_many_1,
<<"f(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_) -> ok.">>,
@@ -3544,7 +3461,7 @@ too_many_arguments(Config) when is_list(Config) ->
[{1,erl_lint,{too_many_arguments,256}}],[]}}
],
- ?line [] = run(Config, Ts),
+ [] = run(Config, Ts),
ok.
@@ -3627,9 +3544,7 @@ bin_syntax_errors(Config) ->
[] = run(Config, Ts),
ok.
-predef(doc) ->
- "OTP-10342: No longer predefined types: array(), digraph(), and so on";
-predef(suite) -> [];
+%% OTP-10342: No longer predefined types: array(), digraph(), and so on.
predef(Config) when is_list(Config) ->
W = get_compilation_result(Config, "predef", []),
[] = W,
@@ -3647,8 +3562,6 @@ predef(Config) when is_list(Config) ->
ok.
maps(Config) ->
- %% TODO: test key patterns, not done because map patterns are going to be
- %% changed a lot.
Ts = [{illegal_map_construction,
<<"t() ->
#{ a := b,
@@ -3690,6 +3603,26 @@ maps(Config) ->
{errors,[{1,erl_lint,illegal_map_construction},
{1,erl_lint,{unbound_var,'X'}}],
[]}},
+ {legal_map_pattern,
+ <<"
+ -record(mapkey, {a=1,b=2}).
+ t(M,K1) ->
+ #{ a := 1,
+ $a := 1, $z := 99,
+ #{a=>val} := 2,
+ K1 := 1337,
+ #mapkey{a = 10} := wat,
+ #{{a,val}=>val} := 2,
+ #{ \"hi\" => wazzup, hi => ho } := yep,
+ ok := 1.0,
+ [3+3] := nope,
+ 1.0 := yep,
+ {3.0+3} := nope,
+ {yep} := yep
+ } = M.
+ ">>,
+ [],
+ []},
{legal_map_construction,
<<"t(V) -> #{ a => 1,
#{a=>V} => 2,
@@ -3752,12 +3685,56 @@ maps_type(Config) when is_list(Config) ->
t(M) -> M.
">>,
[],
- {warnings,[{3,erl_lint,{new_builtin_type,{map,0}}}]}}],
+ {errors,[{3,erl_lint,{builtin_type,{map,0}}}],[]}}],
[] = run(Config, Ts),
ok.
-otp_11851(doc) ->
- "OTP-11851: More atoms can be used as type names + bug fixes.";
+maps_parallel_match(Config) when is_list(Config) ->
+ Ts = [{parallel_map_patterns_unbound1,
+ <<"
+ t(#{} = M) ->
+ #{K := V} = #{k := K} = M,
+ V.
+ ">>,
+ [],
+ {errors,[{3,erl_lint,{unbound_var,'K'}}],[]}},
+ {parallel_map_patterns_unbound2,
+ <<"
+ t(#{} = M) ->
+ #{K1 := V1} =
+ #{K2 := V2} =
+ #{k1 := K1,k2 := K2} = M,
+ [V1,V2].
+ ">>,
+ [],
+ {errors,[{3,erl_lint,{unbound_var,'K1'}},
+ {3,erl_lint,{unbound_var,'K1'}},
+ {4,erl_lint,{unbound_var,'K2'}},
+ {4,erl_lint,{unbound_var,'K2'}}],[]}},
+ {parallel_map_patterns_bound,
+ <<"
+ t(#{} = M,K1,K2) ->
+ #{K1 := V1} =
+ #{K2 := V2} =
+ #{k1 := K1,k2 := K2} = M,
+ [V1,V2].
+ ">>,
+ [],
+ []},
+ {parallel_map_patterns_literal,
+ <<"
+ t(#{} = M) ->
+ #{k1 := V1} =
+ #{k2 := V2} =
+ #{k1 := V1,k2 := V2} = M,
+ [V1,V2].
+ ">>,
+ [],
+ []}],
+ [] = run(Config, Ts),
+ ok.
+
+%% OTP-11851: More atoms can be used as type names + bug fixes.
otp_11851(Config) when is_list(Config) ->
Ts = [
{otp_11851_1,
@@ -3843,42 +3820,29 @@ otp_11851(Config) when is_list(Config) ->
[] = run(Config, Ts),
ok.
-otp_12195(doc) ->
- "OTP-12195: Check obsolete types (tailor made for OTP 18).";
-otp_12195(Config) when is_list(Config) ->
- Ts = [{otp_12195_1,
- <<"-export_type([r1/0]).
- -type r1() :: erl_scan:line()
- | erl_scan:column()
- | erl_scan:location()
- | erl_anno:line().">>,
- [],
- {warnings,[{2,erl_lint,
- {deprecated_type,{erl_scan,line,0},
- "deprecated (will be removed in OTP 19); "
- "use erl_anno:line() instead"}},
- {3,erl_lint,
- {deprecated_type,{erl_scan,column,0},
- "deprecated (will be removed in OTP 19); use "
- "erl_anno:column() instead"}},
- {4,erl_lint,
- {deprecated_type,{erl_scan,location,0},
- "deprecated (will be removed in OTP 19); "
- "use erl_anno:location() instead"}}]}},
- {otp_12195_2,
- <<"-export_type([r1/0]).
- -compile(nowarn_deprecated_type).
- -type r1() :: erl_scan:line()
- | erl_scan:column()
- | erl_scan:location()
- | erl_anno:line().">>,
- [],
- []}],
- [] = run(Config, Ts),
+%% OTP-11879: The -spec f/a :: (As) -> B; syntax removed,
+%% and is_subtype/2 deprecated.
+otp_11879(_Config) ->
+ Fs = [{attribute,0,file,{"file.erl",0}},
+ {attribute,0,module,m},
+ {attribute,1,spec,
+ {{f,1},
+ [{type,2,'fun',[{type,3,product,[{var,4,'V1'},
+ {var,5,'V1'}]},
+ {type,6,integer,[]}]}]}},
+ {attribute,20,callback,
+ {{cb,21},
+ [{type,22,'fun',[{type,23,product,[{var,24,'V1'},
+ {var,25,'V1'}]},
+ {type,6,integer,[]}]}]}}],
+ {error,[{"file.erl",
+ [{1,erl_lint,{spec_fun_undefined,{f,1}}},
+ {2,erl_lint,spec_wrong_arity},
+ {22,erl_lint,callback_wrong_arity}]}],
+ []} = compile:forms(Fs, [return,report]),
ok.
-otp_13230(doc) ->
- "OTP-13230: -deprecated without -module";
+%% OTP-13230: -deprecated without -module.
otp_13230(Config) when is_list(Config) ->
Abstr = <<"-deprecated([{frutt,0,next_version}]).">>,
{errors,[{1,erl_lint,undefined_module},
@@ -3886,13 +3850,24 @@ otp_13230(Config) when is_list(Config) ->
[]} = run_test2(Config, Abstr, []),
ok.
+record_errors(Config) when is_list(Config) ->
+ Ts = [{rec1,
+ <<"-record(r, {a,b}).
+ b() -> #r{a=foo,b=42,a=bar}.
+ u(R) -> R#r{a=1,b=2,a=2}.
+ ">>,
+ [],
+ {errors,[{2,erl_lint,{redefine_field,r,a}},
+ {3,erl_lint,{redefine_field,r,a}}],[]}}],
+ run(Config, Ts).
+
run(Config, Tests) ->
F = fun({N,P,Ws,E}, BadL) ->
case catch run_test(Config, P, Ws) of
E ->
BadL;
Bad ->
- ?t:format("~nTest ~p failed. Expected~n ~p~n"
+ io:format("~nTest ~p failed. Expected~n ~p~n"
"but got~n ~p~n", [N, E, Bad]),
fail()
end
@@ -3902,8 +3877,8 @@ run(Config, Tests) ->
%% Compiles a test file and returns the list of warnings/errors.
get_compilation_result(Conf, Filename, Warnings) ->
- ?line DataDir = ?datadir,
- ?line File = filename:join(DataDir, Filename),
+ DataDir = ?datadir,
+ File = filename:join(DataDir, Filename),
{ok,Bin} = file:read_file(File++".erl"),
FileS = binary_to_list(Bin),
{match,[{Start,Length}|_]} = re:run(FileS, "-module.*\\n"),
@@ -3967,5 +3942,4 @@ call_format_error(L) ->
L.
fail() ->
- io:format("failed~n"),
- ?t:fail().
+ ct:fail(failed).
diff --git a/lib/stdlib/test/erl_lint_SUITE_data/format.erl b/lib/stdlib/test/erl_lint_SUITE_data/format.erl
index ede89cd545..540befd146 100644
--- a/lib/stdlib/test/erl_lint_SUITE_data/format.erl
+++ b/lib/stdlib/test/erl_lint_SUITE_data/format.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/erl_pp_SUITE.erl b/lib/stdlib/test/erl_pp_SUITE.erl
index 92e2764c65..a103f6dc53 100644
--- a/lib/stdlib/test/erl_pp_SUITE.erl
+++ b/lib/stdlib/test/erl_pp_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
%%%-----------------------------------------------------------------
-module(erl_pp_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(line, put(line, ?LINE), ).
@@ -31,9 +31,9 @@
-define(privdir, "erl_pp_SUITE_priv").
-define(t, test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
--define(datadir, ?config(data_dir, Config)).
--define(privdir, ?config(priv_dir, Config)).
+-include_lib("common_test/include/ct.hrl").
+-define(datadir, proplists:get_value(data_dir, Config)).
+-define(privdir, proplists:get_value(priv_dir, Config)).
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -50,24 +50,21 @@
otp_6321/1, otp_6911/1, otp_6914/1, otp_8150/1, otp_8238/1,
otp_8473/1, otp_8522/1, otp_8567/1, otp_8664/1, otp_9147/1,
- otp_10302/1, otp_10820/1, otp_11100/1, otp_11861/1]).
+ otp_10302/1, otp_10820/1, otp_11100/1, otp_11861/1, pr_1014/1,
+ otp_13662/1]).
%% Internal export.
-export([ehook/6]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(2)).
-
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
+ Config.
end_per_testcase(_Case, _Config) ->
- Dog = ?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[{group, expr}, {group, attributes}, hook, neg_indent,
@@ -83,7 +80,7 @@ groups() ->
{tickets, [],
[otp_6321, otp_6911, otp_6914, otp_8150, otp_8238,
otp_8473, otp_8522, otp_8567, otp_8664, otp_9147,
- otp_10302, otp_10820, otp_11100, otp_11861]}].
+ otp_10302, otp_10820, otp_11100, otp_11861, pr_1014, otp_13662]}].
init_per_suite(Config) ->
Config.
@@ -99,8 +96,6 @@ end_per_group(_GroupName, Config) ->
-func(suite) ->
- [];
func(Config) when is_list(Config) ->
Ts = [{func_1,
<<"-record(r1, {a,b}).
@@ -154,11 +149,9 @@ func(Config) when is_list(Config) ->
true
end)().">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
ok.
-call(suite) ->
- [];
call(Config) when is_list(Config) ->
Ts = [{call_1,
<<"t() ->
@@ -167,11 +160,9 @@ call(Config) when is_list(Config) ->
sfds,sdfsdf,sfds).
">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
ok.
-recs(suite) ->
- [];
recs(Config) when is_list(Config) ->
%% Evolved while testing strict record tests in guards...
Ts = [{recs_1,
@@ -328,18 +319,16 @@ recs(Config) when is_list(Config) ->
R = #r2{},
R#r2{c = R, d = #r1{}}.">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
- ?line ok = pp_expr(<<"case #r{a={1,2},b=#r{}} of
+ ok = pp_expr(<<"case #r{a={1,2},b=#r{}} of
X=Y=#r{a=foo,b=bar} ->
{(foooo:baaaar(X))#r{a = rep},Y,#r.b}
end">>),
- ?line ok = pp_expr(<<"R#r{a = {kljasdklf,sdkfjsdl,sdafjkllsdf,sdfkjsd,
+ ok = pp_expr(<<"R#r{a = {kljasdklf,sdkfjsdl,sdafjkllsdf,sdfkjsd,
sdafjsd,sdf,sdafsd,sdfdsf,sdfdsf,dsfds}}">>),
ok.
-try_catch(suite) ->
- [];
try_catch(Config) when is_list(Config) ->
Ts = [{try_1, % copied from erl_eval_SUITE
<<"t() -> try 1 of 1 -> 2 catch _:_ -> 3 end.">>},
@@ -381,8 +370,8 @@ try_catch(Config) when is_list(Config) ->
<<"t() -> catch begin begin foo, bar, foo:bar(kljsldkfjdls,kljsdl),
(catch bar:foo(foo)) end end.">>}
],
- ?line compile(Config, Ts),
- ?line ok = pp_expr(<<"try
+ compile(Config, Ts),
+ ok = pp_expr(<<"try
erl_internal:bif(M,F,length(Args))
of
true ->
@@ -392,8 +381,6 @@ try_catch(Config) when is_list(Config) ->
after foo end">>),
ok.
-if_then(suite) ->
- [];
if_then(Config) when is_list(Config) ->
Ts = [{if_1,
<<"t() -> if 1 > 2 -> 1; true -> b end.">>},
@@ -402,11 +389,9 @@ if_then(Config) when is_list(Config) ->
{if_3,
<<"t() -> if 1 == 2 -> a; 1 > 2 -> b; 1 < 2 -> c end.">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
ok.
-receive_after(suite) ->
- [];
receive_after(Config) when is_list(Config) ->
Ts = [{rec_1,
<<"t() -> receive foo -> bar; bar -> foo end.">>},
@@ -427,11 +412,9 @@ receive_after(Config) when is_list(Config) ->
{3,4}
end.">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
ok.
-bits(suite) ->
- [];
bits(Config) when is_list(Config) ->
Ts = [{bit_1, % copied from shell_SUITE
<<"t() -> <<(<<\"abc\">>):3/binary>>.">>},
@@ -452,21 +435,19 @@ bits(Config) when is_list(Config) ->
{bit_9,
<<"">>}
],
- ?line compile(Config, Ts),
- ?line ok = pp_expr(<<"<<(list_to_binary([1,2]))/binary>>">>),
- ?line ok = pp_expr(
+ compile(Config, Ts),
+ ok = pp_expr(<<"<<(list_to_binary([1,2]))/binary>>">>),
+ ok = pp_expr(
<<"<<(list_to_binary([1,2])):all/binary-unit:8-unsigned-big>>">>),
- ?line ok = pp_expr(<<"<<<<\"hej\">>/binary>>">>),
- ?line ok = pp_expr(<<"<<(foo:bar())/binary>>">>),
- ?line ok = pp_expr(<<"<<(a)/binary>>">>),
- ?line ok = pp_expr(<<"<<a/binary>>">>),
- ?line ok = pp_expr(<<"<<{a,b}/binary>>">>),
- ?line ok = pp_expr(<<"<<{foo:bar(),b}/binary>>">>),
- ?line ok = pp_expr(<<"<<(foo:bar()):(foo:bar())/binary>>">>),
+ ok = pp_expr(<<"<<<<\"hej\">>/binary>>">>),
+ ok = pp_expr(<<"<<(foo:bar())/binary>>">>),
+ ok = pp_expr(<<"<<(a)/binary>>">>),
+ ok = pp_expr(<<"<<a/binary>>">>),
+ ok = pp_expr(<<"<<{a,b}/binary>>">>),
+ ok = pp_expr(<<"<<{foo:bar(),b}/binary>>">>),
+ ok = pp_expr(<<"<<(foo:bar()):(foo:bar())/binary>>">>),
ok.
-head_tail(suite) ->
- [];
head_tail(Config) when is_list(Config) ->
Ts = [{list_1,
<<"t() -> [a | b].">>},
@@ -481,43 +462,30 @@ head_tail(Config) when is_list(Config) ->
[foo:bar(lkjljlskdfj, klsdajflds, sdafkljsdlfkjdas, kjlsdadjl),
bar:foo(kljlkjsdf, lkjsdlfj, [kljsfj, sdfdsfsad])].">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
ok.
-cond1(suite) ->
- [];
cond1(Config) when is_list(Config) ->
C = {'cond',1,[{clause,2,[],[[{tuple,2,[{atom,2,foo},{atom,2,bar}]}]],
[{cons,3,{atom,3,a},{cons,3,{atom,3,b},{nil,3}}}]},
{clause,4,[],[[{atom,4,true}]],
[{tuple,5,[{atom,5,x},{atom,5,y}]}]}]},
CChars = flat_expr1(C),
-% ?line "cond {foo,bar} -> [a,b]; true -> {x,y} end" = CChars,
- ?line "cond\n"
+ "cond\n"
" {foo,bar} ->\n"
" [a,b];\n"
" true ->\n"
" {x,y}\n"
"end" = CChars,
-% ?line ok = pp_expr(<<"cond
-% {foo,bar} ->
-% [a,b];
-% true ->
-% {x,y}
-% end">>),
ok.
-block(suite) ->
- [];
block(Config) when is_list(Config) ->
Ts = [{block_1,
<<"t() -> begin a,{c,d} end.">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
ok.
-case1(suite) ->
- [];
case1(Config) when is_list(Config) ->
Ts = [{case_1,
<<"t() -> case {foo,bar} of
@@ -527,8 +495,8 @@ case1(Config) when is_list(Config) ->
foo
end.">>}
],
- ?line compile(Config, Ts),
- ?line ok = pp_expr(<<"case
+ compile(Config, Ts),
+ ok = pp_expr(<<"case
erl_internal:bif(M,F,length(Args))
of
true ->
@@ -538,8 +506,6 @@ case1(Config) when is_list(Config) ->
end">>),
ok.
-ops(suite) ->
- [];
ops(Config) when is_list(Config) ->
Ts = [{ops_1,
<<"t() -> {a,b} + (3 - 2) + 4.">>},
@@ -548,21 +514,17 @@ ops(Config) when is_list(Config) ->
{ops_3,
<<"t() -> - (- (- (- (- 3)))).">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
ok.
-messages(suite) ->
- [];
messages(Config) when is_list(Config) ->
- ?line true = "{error,{some,\"error\"}}\n" =:=
+ true = "{error,{some,\"error\"}}\n" =:=
lists:flatten(erl_pp:form({error,{some,"error"}})),
- ?line true = "{warning,{some,\"warning\"}}\n" =:=
+ true = "{warning,{some,\"warning\"}}\n" =:=
lists:flatten(erl_pp:form({warning,{some,"warning"}})),
"\n" = flat_form({eof,0}),
ok.
-import_export(suite) ->
- [];
import_export(Config) when is_list(Config) ->
Ts = [{import_1,
<<"-import(lists, [max/1, reverse/1]).
@@ -577,11 +539,9 @@ import_export(Config) when is_list(Config) ->
<<"-include_lib(\"stdlib/include/qlc.hrl\").
t() -> qlc:q([X || X <- []]).">>}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
ok.
-misc_attrs(suite) ->
- [];
misc_attrs(Config) when is_list(Config) ->
ok = pp_forms(<<"-module(m). ">>),
ok = pp_forms(<<"-module(m, [Aafjlksfjdlsjflsdfjlsdjflkdsfjlk,"
@@ -599,8 +559,6 @@ misc_attrs(Config) when is_list(Config) ->
ok = pp_forms(<<"-custom1(#{test1 => init/2, test2 => [val/1, val/2]}). ">>),
ok.
-dialyzer_attrs(suite) ->
- [];
dialyzer_attrs(Config) when is_list(Config) ->
ok = pp_forms(<<"-type foo() :: #bar{}. ">>),
ok = pp_forms(<<"-opaque foo() :: {bar, fun((X, [42,...]) -> X)}. ">>),
@@ -608,8 +566,6 @@ dialyzer_attrs(Config) when is_list(Config) ->
ok = pp_forms(<<"-callback foo(<<_:32,_:_*4>>, T) -> T. ">>),
ok.
-hook(suite) ->
- [];
hook(Config) when is_list(Config) ->
F = fun(H) -> H end,
do_hook(F).
@@ -623,29 +579,29 @@ do_hook(HookFun) ->
Call = {call,A0,{atom,A0,foo},[Lc]},
Expr2 = {call,A0,{atom,A0,fff},[Call,Call,Call]},
EChars2 = erl_pp:exprs([Expr2]),
- ?line true = EChars =:= lists:flatten(EChars2),
+ true = EChars =:= lists:flatten(EChars2),
EsChars = erl_pp:exprs([Expr], H),
- ?line true = EChars =:= lists:flatten(EsChars),
+ true = EChars =:= lists:flatten(EsChars),
A1 = erl_anno:new(1),
F = {function,A1,ffff,0,[{clause,A1,[],[],[Expr]}]},
FuncChars = lists:flatten(erl_pp:function(F, H)),
F2 = {function,A1,ffff,0,[{clause,A1,[],[],[Expr2]}]},
FuncChars2 = erl_pp:function(F2),
- ?line true = FuncChars =:= lists:flatten(FuncChars2),
+ true = FuncChars =:= lists:flatten(FuncChars2),
FFormChars = erl_pp:form(F, H),
- ?line true = FuncChars =:= lists:flatten(FFormChars),
+ true = FuncChars =:= lists:flatten(FFormChars),
A = {attribute,A1,record,{r,[{record_field,A1,{atom,A1,a},Expr}]}},
AChars = lists:flatten(erl_pp:attribute(A, H)),
A2 = {attribute,A1,record,{r,[{record_field,A1,{atom,A1,a},Expr2}]}},
AChars2 = erl_pp:attribute(A2),
- ?line true = AChars =:= lists:flatten(AChars2),
+ true = AChars =:= lists:flatten(AChars2),
AFormChars = erl_pp:form(A, H),
- ?line true = AChars =:= lists:flatten(AFormChars),
+ true = AChars =:= lists:flatten(AFormChars),
- ?line "INVALID-FORM:{foo,bar}:" = lists:flatten(erl_pp:expr({foo,bar})),
+ "INVALID-FORM:{foo,bar}:" = lists:flatten(erl_pp:expr({foo,bar})),
%% A list (as before R6), not a list of lists.
G = [{op,A1,'>',{atom,A1,a},{foo,{atom,A1,b}}}], % not a proper guard
@@ -653,26 +609,26 @@ do_hook(HookFun) ->
G2 = [{op,A1,'>',{atom,A1,a},
{call,A0,{atom,A0,foo},[{atom,A1,b}]}}], % not a proper guard
GChars2 = erl_pp:guard(G2),
- ?line true = GChars =:= lists:flatten(GChars2),
+ true = GChars =:= lists:flatten(GChars2),
EH = HookFun({?MODULE, ehook, [foo,bar]}),
XEChars = erl_pp:expr(Expr, -1, EH),
- ?line true = remove_indentation(EChars) =:= lists:flatten(XEChars),
+ true = remove_indentation(EChars) =:= lists:flatten(XEChars),
XEChars2 = erl_pp:expr(Expr, EH),
- ?line true = EChars =:= lists:flatten(XEChars2),
+ true = EChars =:= lists:flatten(XEChars2),
%% Note: no leading spaces before "begin".
Block = {block,A0,[{match,A0,{var,A0,'A'},{integer,A0,3}},
{atom,A0,true}]},
- ?line "begin\n A =" ++ _ =
+ "begin\n A =" ++ _ =
lists:flatten(erl_pp:expr(Block, 17, none)),
%% Special...
- ?line true =
+ true =
"{some,value}" =:= lists:flatten(erl_pp:expr({value,A0,{some,value}})),
%% Silly...
- ?line true =
+ true =
"if true -> 0 end" =:=
flat_expr({'if',0,[{clause,0,[],[],[{atom,0,0}]}]}),
@@ -681,7 +637,7 @@ do_hook(HookFun) ->
NewIf = {'if',A0,[{clause,A0,[],[[{atom,A0,true}]],[{atom,A0,b}]}]},
OldIfChars = lists:flatten(erl_pp:expr(OldIf)),
NewIfChars = lists:flatten(erl_pp:expr(NewIf)),
- ?line true = OldIfChars =:= NewIfChars,
+ true = OldIfChars =:= NewIfChars,
ok.
@@ -697,18 +653,16 @@ hook({foo,E}, I, P, H) ->
A = erl_anno:new(0),
erl_pp:expr({call,A,{atom,A,foo},[E]}, I, P, H).
-neg_indent(suite) ->
- [];
neg_indent(Config) when is_list(Config) ->
- ?line ok = pp_expr(<<"begin a end">>),
- ?line ok = pp_expr(<<"begin a,b end">>),
- ?line ok = pp_expr(<<"try a,b,c
+ ok = pp_expr(<<"begin a end">>),
+ ok = pp_expr(<<"begin a,b end">>),
+ ok = pp_expr(<<"try a,b,c
catch exit:_ -> d;
throw:_ -> t;
error:{foo,bar} -> foo,
bar
end">>),
- ?line ok = pp_expr(
+ ok = pp_expr(
<<"fun() ->
F = fun(A, B) when ((A#r1.a) orelse (B#r2.a))
or (B#r2.b) or (A#r1.b) ->
@@ -722,43 +676,41 @@ neg_indent(Config) when is_list(Config) ->
ok
end()">>),
- ?line ok = pp_expr(<<"[X || X <- a, true]">>),
- ?line ok = pp_expr(<<"{[a,b,c],[d,e|f]}">>),
- ?line ok = pp_expr(<<"f(a,b,c)">>),
- ?line ok = pp_expr(<<"fun() when a,b;c,d -> a end">>),
- ?line ok = pp_expr(<<"fun A() when a,b;c,d -> a end">>),
- ?line ok = pp_expr(<<"<<34:32,17:32>>">>),
- ?line ok = pp_expr(<<"if a,b,c -> d; e,f,g -> h,i end">>),
- ?line ok = pp_expr(<<"if a -> d; c -> d end">>),
- ?line ok = pp_expr(<<"receive after 1 -> 2 end">>),
- ?line ok = pp_expr(<<"begin a,b,c end">>),
-
- ?line "\"\"" = flat_expr({string,0,""}),
- ?line ok = pp_expr(<<"\"abc\"">>),
- ?line ok = pp_expr(<<"\"abc\n\n\n\n\nkjsd\n\n\n\n\nkljsddf\n\n\n\n\n"
- "klafd\n\n\n\n\nkljsdf\n\n\n\n\nsdf\n\n\n\n\n\"">>),
- ?line ok = pp_expr(<<"fkjlskljklkkljlkjlkjkljlkjsljklf"
- "lsdjlfdsjlfjsdlfjdslfjdlsjfsdjfklsdkfjsdf("
- "\"abc\n\n\n\n\nkjsd\n\n\n\n\nkljsddf\n\n\n\n\n"
- "kljsafd\n\n\n\n\nkljsdf\n\n\n\n\nkjsdf"
- "\n\n\n\n\n\")">>),
+ ok = pp_expr(<<"[X || X <- a, true]">>),
+ ok = pp_expr(<<"{[a,b,c],[d,e|f]}">>),
+ ok = pp_expr(<<"f(a,b,c)">>),
+ ok = pp_expr(<<"fun() when a,b;c,d -> a end">>),
+ ok = pp_expr(<<"fun A() when a,b;c,d -> a end">>),
+ ok = pp_expr(<<"<<34:32,17:32>>">>),
+ ok = pp_expr(<<"if a,b,c -> d; e,f,g -> h,i end">>),
+ ok = pp_expr(<<"if a -> d; c -> d end">>),
+ ok = pp_expr(<<"receive after 1 -> 2 end">>),
+ ok = pp_expr(<<"begin a,b,c end">>),
+
+ "\"\"" = flat_expr({string,0,""}),
+ ok = pp_expr(<<"\"abc\"">>),
+ ok = pp_expr(<<"\"abc\n\n\n\n\nkjsd\n\n\n\n\nkljsddf\n\n\n\n\n"
+ "klafd\n\n\n\n\nkljsdf\n\n\n\n\nsdf\n\n\n\n\n\"">>),
+ ok = pp_expr(<<"fkjlskljklkkljlkjlkjkljlkjsljklf"
+ "lsdjlfdsjlfjsdlfjdslfjdlsjfsdjfklsdkfjsdf("
+ "\"abc\n\n\n\n\nkjsd\n\n\n\n\nkljsddf\n\n\n\n\n"
+ "kljsafd\n\n\n\n\nkljsdf\n\n\n\n\nkjsdf"
+ "\n\n\n\n\n\")">>),
%% fun-info is skipped when everything is to fit on one single line
Fun1 = {'fun',1,{function,t,0},{0,45353021,'-t/0-fun-0-'}},
- ?line "fun t/0" = flat_expr(Fun1),
+ "fun t/0" = flat_expr(Fun1),
Fun2 = {'fun',2,{clauses,[{clause,2,[],[],[{atom,3,true}]}]},
{0,108059557,'-t/0-fun-0-'}},
- ?line "fun() -> true end" = flat_expr(Fun2),
+ "fun() -> true end" = flat_expr(Fun2),
Fun3 = {named_fun,3,'True',[{clause,3,[],[],[{atom,3,true}]}],
{0,424242424,'-t/0-True-0-'}},
- ?line "fun True() -> true end" = flat_expr(Fun3),
+ "fun True() -> true end" = flat_expr(Fun3),
ok.
-otp_6321(doc) ->
- "OTP_6321. Bug fix of exprs().";
-otp_6321(suite) -> [];
+%% OTP_6321. Bug fix of exprs().
otp_6321(Config) when is_list(Config) ->
Str = "S = hopp, {hej, S}. ",
{done, {ok, Tokens, _EndLine}, ""} = erl_scan:tokens("", Str, _L=1),
@@ -766,9 +718,7 @@ otp_6321(Config) when is_list(Config) ->
"S = hopp, {hej,S}" = lists:flatten(erl_pp:exprs(Exprs)),
ok.
-otp_6911(doc) ->
- "OTP_6911. More newlines.";
-otp_6911(suite) -> [];
+%% OTP_6911. More newlines.
otp_6911(Config) when is_list(Config) ->
F = {function,5,thomas,1,
[{clause,5,
@@ -779,38 +729,32 @@ otp_6911(Config) when is_list(Config) ->
[{clause,7,[{atom,7,true}],[],[{integer,7,12}]},
{clause,8,[{atom,8,false}],[],[{integer,8,14}]}]}]}]},
Chars = flat_form(F),
- ?line "thomas(X) ->\n"
+ "thomas(X) ->\n"
" case X of\n"
" true ->\n"
" 12;\n"
" false ->\n"
" 14\n"
" end.\n" = Chars,
- ?line ok = pp_expr(<<"case X of true -> 12; false -> 14 end">>),
- ?line ok = pp_expr(<<"receive after 1 -> ok end">>),
+ ok = pp_expr(<<"case X of true -> 12; false -> 14 end">>),
+ ok = pp_expr(<<"receive after 1 -> ok end">>),
ok.
-otp_6914(doc) ->
- "OTP_6914. Binary comprehensions.";
-otp_6914(suite) -> [];
+%% OTP_6914. Binary comprehensions.
otp_6914(Config) when is_list(Config) ->
- ?line ok = pp_expr(<<"<< <<B:1>> || B <- [0,1,1] >>">>),
- ?line ok = pp_expr(<<"[ B || <<B:1>> <= <<\"hi\">>]">>),
- ?line ok = pp_expr(<<"<< <<1:1>> || true >>">>),
+ ok = pp_expr(<<"<< <<B:1>> || B <- [0,1,1] >>">>),
+ ok = pp_expr(<<"[ B || <<B:1>> <= <<\"hi\">>]">>),
+ ok = pp_expr(<<"<< <<1:1>> || true >>">>),
ok.
-otp_8150(doc) ->
- "OTP_8150. Types.";
-otp_8150(suite) -> [];
+%% OTP_8150. Types.
otp_8150(Config) when is_list(Config) ->
- ?line _ = [{N,ok} = {N,pp_forms(B)} ||
+ _ = [{N,ok} = {N,pp_forms(B)} ||
{N,B} <- type_examples()
],
ok.
-otp_8238(doc) ->
- "OTP_8238. Bugfix 'E'.";
-otp_8238(suite) -> [];
+%% OTP_8238. Bugfix 'E'.
otp_8238(Config) when is_list(Config) ->
Ex = [<<"-record(rec1, {}).\n"
"-record(rec2, {a, b}).\n"
@@ -825,7 +769,7 @@ otp_8238(Config) when is_list(Config) ->
"t2() ->\n"
" #r{}.\n">>
],
- ?line compile(Config, [{otp_8238,iolist_to_binary(Ex)}]),
+ compile(Config, [{otp_8238,iolist_to_binary(Ex)}]),
ok.
type_examples() ->
@@ -876,14 +820,17 @@ type_examples() ->
{ex30,<<"-type t99() ::"
"{t2(),'\\'t::4'(),t5(),t6(),t7(),t8(),t10(),t14(),"
"t15(),t20(),t21(), t22(),t25()}. ">>},
+ %% Writing constraints as is_subtype(V, T) is not supported since
+ %% Erlang/OTP 19.0, but as long as the parser recognizes the
+ %% is_subtype(V, T) syntax, we need a few examples of the syntax.
{ex31,<<"-spec t1(FooBar :: t99()) -> t99();"
- "(t2()) -> t2();"
- "('\\'t::4'()) -> '\\'t::4'() when is_subtype('\\'t::4'(), t24);"
- "(t23()) -> t23() when is_subtype(t23(), atom()),"
- " is_subtype(t23(), t14());"
- "(t24()) -> t24() when is_subtype(t24(), atom()),"
- " is_subtype(t24(), t14()),"
- " is_subtype(t24(), '\\'t::4'()).">>},
+ "(t2()) -> t2();"
+ "('\\'t::4'()) -> '\\'t::4'() when is_subtype('\\'t::4'(), t24);"
+ "(t23()) -> t23() when is_subtype(t23(), atom()),"
+ " is_subtype(t23(), t14());"
+ "(t24()) -> t24() when is_subtype(t24(), atom()),"
+ " is_subtype(t24(), t14()),"
+ " is_subtype(t24(), '\\'t::4'()).">>},
{ex32,<<"-spec mod:t2() -> any(). ">>},
{ex33,<<"-opaque attributes_data() :: "
"[{'column', column()} | {'line', info_line()} |"
@@ -903,19 +850,15 @@ type_examples() ->
"f19 = 3 :: integer()|undefined,"
"f5 = 3 :: undefined|integer()}). ">>}].
-otp_8473(doc) ->
- "OTP_8473. Bugfix abstract type 'fun'.";
-otp_8473(suite) -> [];
+%% OTP_8473. Bugfix abstract type 'fun'.
otp_8473(Config) when is_list(Config) ->
Ex = [{ex1,<<"-type 'fun'(A) :: A.\n"
"-type funkar() :: 'fun'(fun((integer()) -> atom())).\n">>}],
- ?line _ = [{N,ok} = {N,pp_forms(B)} ||
+ _ = [{N,ok} = {N,pp_forms(B)} ||
{N,B} <- Ex],
ok.
-otp_8522(doc) ->
- "OTP_8522. Avoid duplicated 'undefined' in record field types.";
-otp_8522(suite) -> [];
+%% OTP_8522. Avoid duplicated 'undefined' in record field types.
otp_8522(Config) when is_list(Config) ->
FileName = filename('otp_8522.erl', Config),
C = <<"-module(otp_8522).\n"
@@ -924,11 +867,13 @@ otp_8522(Config) when is_list(Config) ->
" f3 :: (undefined),\n"
" f4 :: x | y | undefined | z,\n"
" f5 :: a}).\n">>,
- ?line ok = file:write_file(FileName, C),
- ?line {ok, _} = compile:file(FileName, [{outdir,?privdir},debug_info]),
+ ok = file:write_file(FileName, C),
+ {ok, _} = compile:file(FileName, [{outdir,?privdir},debug_info]),
BF = filename("otp_8522", Config),
- ?line {ok, A} = beam_lib:chunks(BF, [abstract_code]),
- ?line 5 = count_atom(A, undefined),
+ {ok, A} = beam_lib:chunks(BF, [abstract_code]),
+ %% OTP-12719: Since 'undefined' is no longer added by the Erlang
+ %% Parser, the number of 'undefined' is 4. It used to be 5.
+ 4 = count_atom(A, undefined),
ok.
count_atom(A, A) ->
@@ -940,8 +885,6 @@ count_atom(L, A) when is_list(L) ->
count_atom(_, _) ->
0.
-maps_syntax(doc) -> "Maps syntax";
-maps_syntax(suite) -> [];
maps_syntax(Config) when is_list(Config) ->
Ts = [{map_fun_1,
<<"t() ->\n"
@@ -960,6 +903,7 @@ maps_syntax(Config) when is_list(Config) ->
"-compile(export_all).\n"
"-type t1() :: map().\n"
"-type t2() :: #{ atom() => integer(), atom() => float() }.\n"
+ "-type t3() :: #{ atom() := integer(), atom() := float() }.\n"
"-type u() :: #{a => (I :: integer()) | (A :: atom()),\n"
" (X :: atom()) | (Y :: atom()) =>\n"
" (I :: integer()) | (A :: atom())}.\n"
@@ -972,9 +916,7 @@ maps_syntax(Config) when is_list(Config) ->
ok.
-otp_8567(doc) ->
- "OTP_8567. Avoid duplicated 'undefined' in record field types.";
-otp_8567(suite) -> [];
+%% OTP_8567. Avoid duplicated 'undefined' in record field types.
otp_8567(Config) when is_list(Config) ->
FileName = filename('otp_8567.erl', Config),
C = <<"-module otp_8567.\n"
@@ -983,8 +925,8 @@ otp_8567(Config) when is_list(Config) ->
"-record r, {a}.\n"
"-record s, {a :: integer()}.\n"
"-type t() :: {#r{},#s{}}.\n">>,
- ?line ok = file:write_file(FileName, C),
- ?line {error,[{_,[{3,erl_parse,["syntax error before: ","')'"]}]}],_} =
+ ok = file:write_file(FileName, C),
+ {error,[{_,[{3,erl_parse,["syntax error before: ","')'"]}]}],_} =
compile:file(FileName, [return]),
F = <<"-module(otp_8567).\n"
@@ -998,28 +940,18 @@ otp_8567(Config) when is_list(Config) ->
"t() ->\n"
" 3.\n"
"\n"
- "-spec(t1/1 :: (ot()) -> ot1()).\n"
- "t1(A) ->\n"
- " A.\n"
- "\n"
"-spec(t2 (ot()) -> ot1()).\n"
"t2(A) ->\n"
" A.\n"
"\n"
- "-spec(otp_8567:t3/1 :: (ot()) -> ot1()).\n"
- "t3(A) ->\n"
- " A.\n"
- "\n"
"-spec(otp_8567:t4 (ot()) -> ot1()).\n"
"t4(A) ->\n"
" A.\n">>,
- ?line ok = pp_forms(F),
+ ok = pp_forms(F),
ok.
-otp_8664(doc) ->
- "OTP_8664. Types with integer expressions.";
-otp_8664(suite) -> [];
+%% OTP_8664. Types with integer expressions.
otp_8664(Config) when is_list(Config) ->
FileName = filename('otp_8664.erl', Config),
C1 = <<"-module(otp_8664).\n"
@@ -1036,42 +968,38 @@ otp_8664(Config) when is_list(Config) ->
"-type t() :: t1() | t2() | t3() | b1() | u().\n"
"-spec t() -> t().\n"
"t() -> 3.\n">>,
- ?line ok = file:write_file(FileName, C1),
- ?line {ok, _, []} = compile:file(FileName, [return]),
+ ok = file:write_file(FileName, C1),
+ {ok, _, []} = compile:file(FileName, [return]),
C2 = <<"-module(otp_8664).\n"
"-export([t/0]).\n"
"-spec t() -> 9 and 4.\n"
"t() -> 0.\n">>,
- ?line ok = file:write_file(FileName, C2),
- ?line {error,[{_,[{3,erl_lint,{type_syntax,integer}}]}],_} =
+ ok = file:write_file(FileName, C2),
+ {error,[{_,[{3,erl_lint,{type_syntax,integer}}]}],_} =
compile:file(FileName, [return]),
ok.
-otp_9147(doc) ->
- "OTP_9147. Create well-formed types when adding 'undefined'.";
-otp_9147(suite) -> [];
+%% OTP-9147. Create well-formed types when adding 'undefined'.
otp_9147(Config) when is_list(Config) ->
FileName = filename('otp_9147.erl', Config),
C1 = <<"-module(otp_9147).\n"
"-export_type([undef/0]).\n"
"-record(undef, {f1 :: F1 :: a | b}).\n"
"-type undef() :: #undef{}.\n">>,
- ?line ok = file:write_file(FileName, C1),
- ?line {ok, _, []} =
+ ok = file:write_file(FileName, C1),
+ {ok, _, []} =
compile:file(FileName, [return,'P',{outdir,?privdir}]),
PFileName = filename('otp_9147.P', Config),
- ?line {ok, Bin} = file:read_file(PFileName),
+ {ok, Bin} = file:read_file(PFileName),
%% The parentheses around "F1 :: a | b" are new (bugfix).
- ?line true =
- lists:member("-record(undef,{f1 :: undefined | (F1 :: a | b)}).",
+ true =
+ lists:member("-record(undef,{f1 :: F1 :: a | b}).",
string:tokens(binary_to_list(Bin), "\n")),
ok.
-otp_10302(doc) ->
- "OTP-10302. Unicode characters scanner/parser.";
-otp_10302(suite) -> [];
+%% OTP-10302. Unicode characters scanner/parser.
otp_10302(Config) when is_list(Config) ->
Ts = [{uni_1,
<<"t() -> <<(<<\"abc\\x{aaa}\">>):3/binary>>.">>}
@@ -1108,9 +1036,7 @@ unicode_hook({foo,E}, I, P, H) ->
A = erl_anno:new(0),
erl_pp:expr({call,A,{atom,A,foo},[E]}, I, P, H).
-otp_10820(doc) ->
- "OTP-10820. Unicode filenames.";
-otp_10820(suite) -> [];
+%% OTP-10820. Unicode filenames.
otp_10820(Config) when is_list(Config) ->
C1 = <<"%% coding: utf-8\n -module(any).">>,
ok = do_otp_10820(Config, C1, "+pc latin1"),
@@ -1136,9 +1062,7 @@ file_attr_is_string("-file(\"" ++ _) -> true;
file_attr_is_string([_ | L]) ->
file_attr_is_string(L).
-otp_11100(doc) ->
- "OTP-11100. Fix printing of invalid forms.";
-otp_11100(suite) -> [];
+%% OTP-11100. Fix printing of invalid forms.
otp_11100(Config) when is_list(Config) ->
%% There are a few places where the added code ("options(none)")
%% doesn't make a difference (pp:bit_elem_type/1 is an example).
@@ -1173,9 +1097,7 @@ otp_11100(Config) when is_list(Config) ->
[]}}),
ok.
-otp_11861(doc) ->
- "OTP-11861. behaviour_info() and -callback.";
-otp_11861(suite) -> [];
+%% OTP-11861. behaviour_info() and -callback.
otp_11861(Config) when is_list(Config) ->
"-optional_callbacks([bar/0]).\n" =
pf({attribute,3,optional_callbacks,[{bar,0}]}),
@@ -1186,6 +1108,42 @@ otp_11861(Config) when is_list(Config) ->
pf(Form) ->
lists:flatten(erl_pp:form(Form, none)).
+pr_1014(Config) ->
+ ok = pp_forms(<<"-type t() :: #{_ => _}. ">>),
+ ok = pp_forms(<<"-type t() :: #{any() => _}. ">>),
+ ok = pp_forms(<<"-type t() :: #{_ => any()}. ">>),
+ ok = pp_forms(<<"-type t() :: #{any() => any()}. ">>),
+ ok = pp_forms(<<"-type t() :: #{atom() := integer(), any() => any()}. ">>),
+
+ FileName = filename('pr_1014.erl', Config),
+ C = <<"-module pr_1014.\n"
+ "-compile export_all.\n"
+ "-type m() :: #{..., a := integer()}.\n">>,
+ ok = file:write_file(FileName, C),
+ {error,[{_,[{3,erl_parse,["syntax error before: ","'...'"]}]}],_} =
+ compile:file(FileName, [return]),
+
+ ok.
+
+otp_13662(Config) ->
+ Include = "abcdefghijabcdefghijabcdefghijabcdefghijabcde"
+ "fghij-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.hrl",
+ IncludeFile = filename(Include, Config),
+ ok = file:write_file(IncludeFile, <<>>),
+ Ts = [{otp_13662,
+ <<"-file(\"abcdefghijabcdefghijabcdefghijabcdefghijabcde\"\n
+ \"fghij-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.erl\", 0).\n
+ -include(\"abcdefghijabcdefghijabcdefghijabcdefghijabcde\"
+ \"fghij-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.hrl\").\n
+ -include_lib(\"abcdefghijabcdefghijabcdefghijabcdefghijabcde\"
+ \"fghij-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.hrl\").
+ -compile(export_all).\n
+ t() ->\n
+ \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n
+ \"aaaaaaaaaaaaaaaaaaaaaa\".\n">>}
+ ],
+ compile(Config, Ts).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
compile(Config, Tests) ->
@@ -1196,11 +1154,11 @@ compile(Config, Tests) ->
ok ->
BadL;
not_ok ->
- ?t:format("~nTest ~p failed.~n", [N]),
+ io:format("~nTest ~p failed.~n", [N]),
fail()
end;
Bad ->
- ?t:format("~nTest ~p failed. got~n ~p~n",
+ io:format("~nTest ~p failed. got~n ~p~n",
[N, Bad]),
fail()
end
@@ -1366,10 +1324,9 @@ filename(Name, Config) ->
filename:join(?privdir, Name).
fail() ->
- io:format("failed~n"),
- ?t:fail().
+ ct:fail(failed).
%% +fnu means a peer node has to be started; slave will not do
start_node(Name, Xargs) ->
- ?line PA = filename:dirname(code:which(?MODULE)),
+ PA = filename:dirname(code:which(?MODULE)),
test_server:start_node(Name, peer, [{args, "-pa " ++ PA ++ " " ++ Xargs}]).
diff --git a/lib/stdlib/test/erl_scan_SUITE.erl b/lib/stdlib/test/erl_scan_SUITE.erl
index 12ea3d128c..4ae734eb65 100644
--- a/lib/stdlib/test/erl_scan_SUITE.erl
+++ b/lib/stdlib/test/erl_scan_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,11 +18,12 @@
%% %CopyrightEnd%
-module(erl_scan_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
init_per_group/2,end_per_group/2]).
--export([ error_1/1, error_2/1, iso88591/1, otp_7810/1, otp_10302/1,
- otp_10990/1, otp_10992/1, otp_11807/1]).
+-export([error_1/1, error_2/1, iso88591/1, otp_7810/1, otp_10302/1,
+ otp_10990/1, otp_10992/1, otp_11807/1]).
-import(lists, [nth/2,flatten/1]).
-import(io_lib, [print/1]).
@@ -30,7 +31,7 @@
%%
%% Define to run outside of test server
%%
-%-define(STANDALONE,1).
+%%-define(STANDALONE,1).
-ifdef(STANDALONE).
-compile(export_all).
@@ -42,23 +43,18 @@
%% config(data_dir, _) ->
%% ".".
-else.
--include_lib("test_server/include/test_server.hrl").
--export([init_per_testcase/2, end_per_testcase/2]).
+-include_lib("common_test/include/ct.hrl").
+-endif.
-init_per_testcase(_Case, Config) when is_list(Config) ->
- ?line Dog=test_server:timetrap(test_server:seconds(1200)),
- [{watchdog, Dog}|Config].
+init_per_testcase(_Case, Config) ->
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
--endif.
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,20}}].
all() ->
[{group, error}, iso88591, otp_7810, otp_10302, otp_10990, otp_10992,
@@ -81,20 +77,14 @@ end_per_group(_GroupName, Config) ->
-error_1(doc) ->
- ["(OTP-2347)"];
-error_1(suite) ->
- [];
+%% (OTP-2347)
error_1(Config) when is_list(Config) ->
- ?line {error, _, _} = erl_scan:string("'a"),
+ {error, _, _} = erl_scan:string("'a"),
ok.
-error_2(doc) ->
- ["Checks that format_error works on the error cases."];
-error_2(suite) ->
- [];
+%% Checks that format_error works on the error cases.
error_2(Config) when is_list(Config) ->
- ?line lists:foreach(fun check/1, error_cases()),
+ lists:foreach(fun check/1, error_cases()),
ok.
error_cases() ->
@@ -107,7 +97,7 @@ error_cases() ->
"2.3e",
"2.3e-",
"91#9"
-].
+ ].
assert_type(N, integer) when is_integer(N) ->
ok;
@@ -128,71 +118,66 @@ check_error({error, Info, EndLine}, Module0) ->
String = lists:flatten(Module0:format_error(Desc)),
true = io_lib:printable_list(String).
-iso88591(doc) -> ["Tests the support for ISO-8859-1 i.e Latin-1"];
-iso88591(suite) -> [];
+%% Tests the support for ISO-8859-1 i.e Latin-1.
iso88591(Config) when is_list(Config) ->
- ?line ok =
- case catch begin
- %% Some atom and variable names
- V1s = [$Á,$á,$é,$ë],
- V2s = [$N,$ä,$r],
- A1s = [$h,$ä,$r],
- A2s = [$ö,$r,$e],
- %% Test parsing atom and variable characters.
- {ok,Ts1,_} = erl_scan_string(V1s ++ " " ++ V2s ++
- "\327" ++
- A1s ++ " " ++ A2s),
- V1s = atom_to_list(element(3, nth(1, Ts1))),
- V2s = atom_to_list(element(3, nth(2, Ts1))),
- A1s = atom_to_list(element(3, nth(4, Ts1))),
- A2s = atom_to_list(element(3, nth(5, Ts1))),
- %% Test printing atoms
- A1s = flatten(print(element(3, nth(4, Ts1)))),
- A2s = flatten(print(element(3, nth(5, Ts1)))),
- %% Test parsing and printing strings.
- S1 = V1s ++ "\327" ++ A1s ++ "\250" ++ A2s,
- S1s = "\"" ++ S1 ++ "\"",
- {ok,Ts2,_} = erl_scan_string(S1s),
- S1 = element(3, nth(1, Ts2)),
- S1s = flatten(print(element(3, nth(1, Ts2)))),
- ok %It all worked
- end of
- {'EXIT',R} -> %Something went wrong!
- {error,R};
- ok -> ok %Aok
- end.
-
-otp_7810(doc) ->
- ["OTP-7810. White spaces, comments, and more.."];
-otp_7810(suite) ->
- [];
+ ok =
+ case catch begin
+ %% Some atom and variable names
+ V1s = [$Á,$á,$é,$ë],
+ V2s = [$N,$ä,$r],
+ A1s = [$h,$ä,$r],
+ A2s = [$ö,$r,$e],
+ %% Test parsing atom and variable characters.
+ {ok,Ts1,_} = erl_scan_string(V1s ++ " " ++ V2s ++
+ "\327" ++
+ A1s ++ " " ++ A2s),
+ V1s = atom_to_list(element(3, nth(1, Ts1))),
+ V2s = atom_to_list(element(3, nth(2, Ts1))),
+ A1s = atom_to_list(element(3, nth(4, Ts1))),
+ A2s = atom_to_list(element(3, nth(5, Ts1))),
+ %% Test printing atoms
+ A1s = flatten(print(element(3, nth(4, Ts1)))),
+ A2s = flatten(print(element(3, nth(5, Ts1)))),
+ %% Test parsing and printing strings.
+ S1 = V1s ++ "\327" ++ A1s ++ "\250" ++ A2s,
+ S1s = "\"" ++ S1 ++ "\"",
+ {ok,Ts2,_} = erl_scan_string(S1s),
+ S1 = element(3, nth(1, Ts2)),
+ S1s = flatten(print(element(3, nth(1, Ts2)))),
+ ok %It all worked
+ end of
+ {'EXIT',R} -> %Something went wrong!
+ {error,R};
+ ok -> ok %Aok
+ end.
+
+%% OTP-7810. White spaces, comments, and more...
otp_7810(Config) when is_list(Config) ->
- ?line ok = reserved_words(),
- ?line ok = atoms(),
- ?line ok = punctuations(),
- ?line ok = comments(),
- ?line ok = errors(),
- ?line ok = integers(),
- ?line ok = base_integers(),
- ?line ok = floats(),
- ?line ok = dots(),
- ?line ok = chars(),
- ?line ok = variables(),
- ?line ok = eof(),
- ?line ok = illegal(),
- ?line ok = crashes(),
-
- ?line ok = options(),
- ?line ok = token_info(),
- ?line ok = column_errors(),
- ?line ok = white_spaces(),
-
- ?line ok = unicode(),
-
- ?line ok = more_chars(),
- ?line ok = more_options(),
- ?line ok = attributes_info(),
- ?line ok = set_attribute(),
+ ok = reserved_words(),
+ ok = atoms(),
+ ok = punctuations(),
+ ok = comments(),
+ ok = errors(),
+ ok = integers(),
+ ok = base_integers(),
+ ok = floats(),
+ ok = dots(),
+ ok = chars(),
+ ok = variables(),
+ ok = eof(),
+ ok = illegal(),
+ ok = crashes(),
+
+ ok = options(),
+ ok = token_info(),
+ ok = column_errors(),
+ ok = white_spaces(),
+
+ ok = unicode(),
+
+ ok = more_chars(),
+ ok = more_options(),
+ ok = anno_info(),
ok.
@@ -203,10 +188,10 @@ reserved_words() ->
'rem', 'band', 'and', 'bor', 'bxor', 'bsl', 'bsr',
'or', 'xor'],
[begin
- ?line {RW, true} = {RW, erl_scan:reserved_word(RW)},
+ {RW, true} = {RW, erl_scan:reserved_word(RW)},
S = atom_to_list(RW),
Ts = [{RW,{1,1}}],
- ?line test_string(S, Ts)
+ test_string(S, Ts)
end || RW <- L],
ok.
@@ -215,14 +200,14 @@ atoms() ->
test_string("a
b", [{atom,{1,1},a},{atom,{2,18},b}]),
test_string("'a b'", [{atom,{1,1},'a b'}]),
- test_string("a", [{atom,{1,1},a}]),
- test_string("a@2", [{atom,{1,1},a@2}]),
- test_string([39,65,200,39], [{atom,{1,1},'AÈ'}]),
- test_string("ärlig östen", [{atom,{1,1},ärlig},{atom,{1,7},östen}]),
- ?line {ok,[{atom,_,'$a'}],{1,6}} =
- erl_scan_string("'$\\a'", {1,1}),
- ?line test("'$\\a'"),
- ok.
+ test_string("a", [{atom,{1,1},a}]),
+ test_string("a@2", [{atom,{1,1},a@2}]),
+ test_string([39,65,200,39], [{atom,{1,1},'AÈ'}]),
+ test_string("ärlig östen", [{atom,{1,1},ärlig},{atom,{1,7},östen}]),
+ {ok,[{atom,_,'$a'}],{1,6}} =
+ erl_scan_string("'$\\a'", {1,1}),
+ test("'$\\a'"),
+ ok.
punctuations() ->
L = ["<<", "<-", "<=", "<", ">>", ">=", ">", "->", "--",
@@ -232,7 +217,7 @@ punctuations() ->
[begin
W = list_to_atom(S),
Ts = [{W,{1,1}}],
- ?line test_string(S, Ts)
+ test_string(S, Ts)
end || S <- L],
Three = ["/=:=", "<=:=", "==:=", ">=:="], % three tokens...
No = Three ++ L,
@@ -248,18 +233,18 @@ punctuations() ->
W1 = list_to_atom(S1),
W2 = list_to_atom(S2),
Ts = [{W1,{1,1}},{W2,{1,-L2+1}}],
- ?line test_string(S, Ts)
+ test_string(S, Ts)
end || {S,[{L2,S1,S2}|_]} <- SL],
PTs1 = [{'!',{1,1}},{'(',{1,2}},{')',{1,3}},{',',{1,4}},{';',{1,5}},
{'=',{1,6}},{'[',{1,7}},{']',{1,8}},{'{',{1,9}},{'|',{1,10}},
{'}',{1,11}}],
- ?line test_string("!(),;=[]{|}", PTs1),
+ test_string("!(),;=[]{|}", PTs1),
PTs2 = [{'#',{1,1}},{'&',{1,2}},{'*',{1,3}},{'+',{1,4}},{'/',{1,5}},
{':',{1,6}},{'<',{1,7}},{'>',{1,8}},{'?',{1,9}},{'@',{1,10}},
{'\\',{1,11}},{'^',{1,12}},{'`',{1,13}},{'~',{1,14}}],
- ?line test_string("#&*+/:<>?@\\^`~", PTs2),
+ test_string("#&*+/:<>?@\\^`~", PTs2),
test_string(".. ", [{'..',{1,1}}]),
test_string("1 .. 2",
@@ -268,9 +253,9 @@ punctuations() ->
ok.
comments() ->
- ?line test("a %%\n b"),
+ test("a %%\n b"),
{ok,[],1} = erl_scan_string("%"),
- ?line test("a %%\n b"),
+ test("a %%\n b"),
{ok,[{atom,{1,1},a},{atom,{2,2},b}],{2,3}} =
erl_scan_string("a %%\n b", {1,1}),
{ok,[{atom,{1,1},a},{comment,{1,3},"%%"},{atom,{2,2},b}],{2,3}} =
@@ -290,30 +275,30 @@ comments() ->
ok.
errors() ->
- ?line {error,{1,erl_scan,{string,$',"qa"}},1} = erl_scan:string("'qa"), %'
+ {error,{1,erl_scan,{string,$',"qa"}},1} = erl_scan:string("'qa"), %'
{error,{{1,1},erl_scan,{string,$',"qa"}},{1,4}} = %'
erl_scan:string("'qa", {1,1}, []), %'
- ?line {error,{1,erl_scan,{string,$","str"}},1} = %"
+ {error,{1,erl_scan,{string,$","str"}},1} = %"
erl_scan:string("\"str"), %"
{error,{{1,1},erl_scan,{string,$","str"}},{1,5}} = %"
erl_scan:string("\"str", {1,1}, []), %"
- ?line {error,{1,erl_scan,char},1} = erl_scan:string("$"),
+ {error,{1,erl_scan,char},1} = erl_scan:string("$"),
{error,{{1,1},erl_scan,char},{1,2}} = erl_scan:string("$", {1,1}, []),
test_string([34,65,200,34], [{string,{1,1},"AÈ"}]),
test_string("\\", [{'\\',{1,1}}]),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch {foo, erl_scan:string('$\\a', {1,1})}), % type error
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch {foo, erl_scan:tokens([], '$\\a', {1,1})}), % type error
- ?line "{a,tuple}" = erl_scan:format_error({a,tuple}),
+ "{a,tuple}" = erl_scan:format_error({a,tuple}),
ok.
integers() ->
[begin
I = list_to_integer(S),
Ts = [{integer,{1,1},I}],
- ?line test_string(S, Ts)
+ test_string(S, Ts)
end || S <- [[N] || N <- lists:seq($0, $9)] ++ ["2323","000"] ],
ok.
@@ -322,11 +307,11 @@ base_integers() ->
B = list_to_integer(BS),
I = erlang:list_to_integer(S, B),
Ts = [{integer,{1,1},I}],
- ?line test_string(BS++"#"++S, Ts)
+ test_string(BS++"#"++S, Ts)
end || {BS,S} <- [{"2","11"}, {"5","23234"}, {"12","05a"},
{"16","abcdef"}, {"16","ABCDEF"}] ],
- ?line {error,{1,erl_scan,{base,1}},1} = erl_scan:string("1#000"),
+ {error,{1,erl_scan,{base,1}},1} = erl_scan:string("1#000"),
{error,{{1,1},erl_scan,{base,1}},{1,2}} =
erl_scan:string("1#000", {1,1}, []),
@@ -334,7 +319,7 @@ base_integers() ->
[begin
Str = BS ++ "#" ++ S,
- ?line {error,{1,erl_scan,{illegal,integer}},1} =
+ {error,{1,erl_scan,{illegal,integer}},1} =
erl_scan:string(Str)
end || {BS,S} <- [{"3","3"},{"15","f"}, {"12","c"}] ],
@@ -350,12 +335,12 @@ floats() ->
[begin
F = list_to_float(FS),
Ts = [{float,{1,1},F}],
- ?line test_string(FS, Ts)
+ test_string(FS, Ts)
end || FS <- ["1.0","001.17","3.31200","1.0e0","1.0E17",
"34.21E-18", "17.0E+14"]],
test_string("1.e2", [{integer,{1,1},1},{'.',{1,2}},{atom,{1,3},e2}]),
- ?line {error,{1,erl_scan,{illegal,float}},1} =
+ {error,{1,erl_scan,{illegal,float}},1} =
erl_scan:string("1.0e400"),
{error,{{1,1},erl_scan,{illegal,float}},{1,8}} =
erl_scan:string("1.0e400", {1,1}, []),
@@ -376,31 +361,26 @@ dots() ->
{".% öh",{ok,[{dot,1}],1}, {ok,[{dot,{1,1}}],{1,6}}},
{".%\n", {ok,[{dot,1}],2}, {ok,[{dot,{1,1}}],{2,1}}},
{".$", {error,{1,erl_scan,char},1},
- {error,{{1,2},erl_scan,char},{1,3}}},
+ {error,{{1,2},erl_scan,char},{1,3}}},
{".$\\", {error,{1,erl_scan,char},1},
{error,{{1,2},erl_scan,char},{1,4}}},
{".a", {ok,[{'.',1},{atom,1,a}],1},
- {ok,[{'.',{1,1}},{atom,{1,2},a}],{1,3}}}
+ {ok,[{'.',{1,1}},{atom,{1,2},a}],{1,3}}}
],
[begin
R = erl_scan_string(S),
R2 = erl_scan_string(S, {1,1}, [])
end || {S, R, R2} <- Dot],
- ?line {ok,[{dot,_}=T1],{1,2}} = erl_scan:string(".", {1,1}, text),
- ?line [{column,1},{length,1},{line,1},{text,"."}] =
- erl_scan:token_info(T1, [column, length, line, text]),
- ?line {ok,[{dot,_}=T2],{1,3}} = erl_scan:string(".%", {1,1}, text),
- ?line [{column,1},{length,1},{line,1},{text,"."}] =
- erl_scan:token_info(T2, [column, length, line, text]),
- ?line {ok,[{dot,_}=T3],{1,6}} =
+ {ok,[{dot,_}=T1],{1,2}} = erl_scan:string(".", {1,1}, text),
+ [1, 1, "."] = token_info(T1),
+ {ok,[{dot,_}=T2],{1,3}} = erl_scan:string(".%", {1,1}, text),
+ [1, 1, "."] = token_info(T2),
+ {ok,[{dot,_}=T3],{1,6}} =
erl_scan:string(".% öh", {1,1}, text),
- ?line [{column,1},{length,1},{line,1},{text,"."}] =
- erl_scan:token_info(T3, [column, length, line, text]),
- ?line {error,{{1,2},erl_scan,char},{1,3}} =
- erl_scan:string(".$", {1,1}),
- ?line {error,{{1,2},erl_scan,char},{1,4}} =
- erl_scan:string(".$\\", {1,1}),
+ [1, 1, "."] = token_info(T3),
+ {error,{{1,2},erl_scan,char},{1,3}} = erl_scan:string(".$", {1,1}),
+ {error,{{1,2},erl_scan,char},{1,4}} = erl_scan:string(".$\\", {1,1}),
test_string(". ", [{dot,{1,1}}]),
test_string(". ", [{dot,{1,1}}]),
@@ -413,45 +393,45 @@ dots() ->
test_string(".a", [{'.',{1,1}},{atom,{1,2},a}]),
test_string("%. \n. ", [{dot,{2,1}}]),
- ?line {more,C} = erl_scan:tokens([], "%. ",{1,1}, return),
+ {more,C} = erl_scan:tokens([], "%. ",{1,1}, return),
{done,{ok,[{comment,{1,1},"%. "},
{white_space,{1,4},"\n"},
{dot,{2,1}}],
{2,3}}, ""} =
erl_scan_tokens(C, "\n. ", {1,1}, return), % any loc, any options
- ?line [test_string(S, R) ||
- {S, R} <- [{".$\n", [{'.',{1,1}},{char,{1,2},$\n}]},
- {"$\\\n", [{char,{1,1},$\n}]},
- {"'\\\n'", [{atom,{1,1},'\n'}]},
- {"$\n", [{char,{1,1},$\n}]}] ],
+ [test_string(S, R) ||
+ {S, R} <- [{".$\n", [{'.',{1,1}},{char,{1,2},$\n}]},
+ {"$\\\n", [{char,{1,1},$\n}]},
+ {"'\\\n'", [{atom,{1,1},'\n'}]},
+ {"$\n", [{char,{1,1},$\n}]}] ],
ok.
chars() ->
[begin
L = lists:flatten(io_lib:format("$\\~.8b", [C])),
Ts = [{char,{1,1},C}],
- ?line test_string(L, Ts)
+ test_string(L, Ts)
end || C <- lists:seq(0, 255)],
%% Leading zeroes...
[begin
L = lists:flatten(io_lib:format("$\\~3.8.0b", [C])),
Ts = [{char,{1,1},C}],
- ?line test_string(L, Ts)
+ test_string(L, Ts)
end || C <- lists:seq(0, 255)],
%% $\^\n now increments the line...
[begin
L = "$\\^" ++ [C],
Ts = [{char,{1,1},C band 2#11111}],
- ?line test_string(L, Ts)
+ test_string(L, Ts)
end || C <- lists:seq(0, 255)],
[begin
L = "$\\" ++ [C],
Ts = [{char,{1,1},V}],
- ?line test_string(L, Ts)
+ test_string(L, Ts)
end || {C,V} <- [{$n,$\n}, {$r,$\r}, {$t,$\t}, {$v,$\v},
{$b,$\b}, {$f,$\f}, {$e,$\e}, {$s,$\s},
{$d,$\d}]],
@@ -464,13 +444,13 @@ chars() ->
[begin
L = "$\\" ++ [C],
Ts = [{char,{1,1},C}],
- ?line test_string(L, Ts)
+ test_string(L, Ts)
end || C <- lists:seq(0, 255) -- No],
[begin
L = "'$\\" ++ [C] ++ "'",
Ts = [{atom,{1,1},list_to_atom("$"++[C])}],
- ?line test_string(L, Ts)
+ test_string(L, Ts)
end || C <- lists:seq(0, 255) -- No],
test_string("\"\\013a\\\n\"", [{string,{1,1},"\va\n"}]),
@@ -482,17 +462,17 @@ chars() ->
[begin
L = "$" ++ [C],
Ts = [{char,{1,1},C}],
- ?line test_string(L, Ts)
+ test_string(L, Ts)
end || C <- lists:seq(0, 255) -- (No ++ [$\\])],
test_string("$\n", [{char,{1,1},$\n}]),
- ?line {error,{{1,1},erl_scan,char},{1,4}} =
+ {error,{{1,1},erl_scan,char},{1,4}} =
erl_scan:string("$\\^",{1,1}),
test_string("$\\\n", [{char,{1,1},$\n}]),
%% Robert's scanner returns line 1:
test_string("$\\\n", [{char,{1,1},$\n}]),
test_string("$\n\n", [{char,{1,1},$\n}]),
- ?line test("$\n\n"),
+ test("$\n\n"),
ok.
@@ -505,30 +485,30 @@ variables() ->
ok.
eof() ->
- ?line {done,{eof,1},eof} = erl_scan:tokens([], eof, 1),
+ {done,{eof,1},eof} = erl_scan:tokens([], eof, 1),
{more, C1} = erl_scan:tokens([]," \n", 1),
- ?line {done,{eof,2},eof} = erl_scan:tokens(C1, eof, 1),
+ {done,{eof,2},eof} = erl_scan:tokens(C1, eof, 1),
{more, C2} = erl_scan:tokens([], "abra", 1),
%% An error before R13A.
- %% ?line {done,Err={error,{1,erl_scan,scan},1},eof} =
- ?line {done,{ok,[{atom,1,abra}],1},eof} =
+ %% {done,Err={error,{1,erl_scan,scan},1},eof} =
+ {done,{ok,[{atom,1,abra}],1},eof} =
erl_scan_tokens(C2, eof, 1),
%% With column.
- ?line {more, C3} = erl_scan:tokens([]," \n",{1,1}),
- ?line {done,{eof,{2,1}},eof} = erl_scan:tokens(C3, eof, 1),
+ {more, C3} = erl_scan:tokens([]," \n",{1,1}),
+ {done,{eof,{2,1}},eof} = erl_scan:tokens(C3, eof, 1),
{more, C4} = erl_scan:tokens([], "abra", {1,1}),
%% An error before R13A.
- %% ?line {done,{error,{{1,1},erl_scan,scan},{1,5}},eof} =
- ?line {done,{ok,[{atom,_,abra}],{1,5}},eof} =
+ %% {done,{error,{{1,1},erl_scan,scan},{1,5}},eof} =
+ {done,{ok,[{atom,_,abra}],{1,5}},eof} =
erl_scan_tokens(C4, eof, 1),
%% Robert's scanner returns "" as LeftoverChars;
%% the R12B scanner returns eof as LeftoverChars: (eof is correct)
- ?line {more, C5} = erl_scan:tokens([], "a", 1),
+ {more, C5} = erl_scan:tokens([], "a", 1),
%% An error before R13A.
- %% ?line {done,{error,{1,erl_scan,scan},1},eof} =
- ?line {done,{ok,[{atom,1,a}],1},eof} =
+ %% {done,{error,{1,erl_scan,scan},1},eof} =
+ {done,{ok,[{atom,1,a}],1},eof} =
erl_scan_tokens(C5,eof,1),
%% With column.
@@ -539,7 +519,7 @@ eof() ->
erl_scan_tokens(C6,eof,1),
%% A dot followed by eof is special:
- ?line {more, C} = erl_scan:tokens([], "a.", 1),
+ {more, C} = erl_scan:tokens([], "a.", 1),
{done,{ok,[{atom,1,a},{dot,1}],1},eof} = erl_scan_tokens(C,eof,1),
{ok,[{atom,1,foo},{dot,1}],1} = erl_scan_string("foo."),
@@ -554,100 +534,100 @@ eof() ->
illegal() ->
Atom = lists:duplicate(1000, $a),
- ?line {error,{1,erl_scan,{illegal,atom}},1} = erl_scan:string(Atom),
- ?line {done,{error,{1,erl_scan,{illegal,atom}},1},". "} =
+ {error,{1,erl_scan,{illegal,atom}},1} = erl_scan:string(Atom),
+ {done,{error,{1,erl_scan,{illegal,atom}},1},". "} =
erl_scan:tokens([], Atom++". ", 1),
QAtom = "'" ++ Atom ++ "'",
- ?line {error,{1,erl_scan,{illegal,atom}},1} = erl_scan:string(QAtom),
- ?line {done,{error,{1,erl_scan,{illegal,atom}},1},". "} =
+ {error,{1,erl_scan,{illegal,atom}},1} = erl_scan:string(QAtom),
+ {done,{error,{1,erl_scan,{illegal,atom}},1},". "} =
erl_scan:tokens([], QAtom++". ", 1),
Var = lists:duplicate(1000, $A),
- ?line {error,{1,erl_scan,{illegal,var}},1} = erl_scan:string(Var),
- ?line {done,{error,{1,erl_scan,{illegal,var}},1},". "} =
+ {error,{1,erl_scan,{illegal,var}},1} = erl_scan:string(Var),
+ {done,{error,{1,erl_scan,{illegal,var}},1},". "} =
erl_scan:tokens([], Var++". ", 1),
Float = "1" ++ lists:duplicate(400, $0) ++ ".0",
- ?line {error,{1,erl_scan,{illegal,float}},1} = erl_scan:string(Float),
- ?line {done,{error,{1,erl_scan,{illegal,float}},1},". "} =
+ {error,{1,erl_scan,{illegal,float}},1} = erl_scan:string(Float),
+ {done,{error,{1,erl_scan,{illegal,float}},1},". "} =
erl_scan:tokens([], Float++". ", 1),
String = "\"43\\x{aaaaaa}34\"",
- ?line {error,{1,erl_scan,{illegal,character}},1} = erl_scan:string(String),
- ?line {done,{error,{1,erl_scan,{illegal,character}},1},"34\". "} =
+ {error,{1,erl_scan,{illegal,character}},1} = erl_scan:string(String),
+ {done,{error,{1,erl_scan,{illegal,character}},1},"34\". "} =
%% Would be nice if `34\"' were skipped...
%% Maybe, but then the LeftOverChars would not be the characters
%% immediately following the end location of the error.
erl_scan:tokens([], String++". ", 1),
- ?line {error,{{1,1},erl_scan,{illegal,atom}},{1,1001}} =
+ {error,{{1,1},erl_scan,{illegal,atom}},{1,1001}} =
erl_scan:string(Atom, {1,1}),
- ?line {done,{error,{{1,5},erl_scan,{illegal,atom}},{1,1005}},". "} =
+ {done,{error,{{1,5},erl_scan,{illegal,atom}},{1,1005}},". "} =
erl_scan:tokens([], "foo "++Atom++". ", {1,1}),
- ?line {error,{{1,1},erl_scan,{illegal,atom}},{1,1003}} =
+ {error,{{1,1},erl_scan,{illegal,atom}},{1,1003}} =
erl_scan:string(QAtom, {1,1}),
- ?line {done,{error,{{1,5},erl_scan,{illegal,atom}},{1,1007}},". "} =
+ {done,{error,{{1,5},erl_scan,{illegal,atom}},{1,1007}},". "} =
erl_scan:tokens([], "foo "++QAtom++". ", {1,1}),
- ?line {error,{{1,1},erl_scan,{illegal,var}},{1,1001}} =
+ {error,{{1,1},erl_scan,{illegal,var}},{1,1001}} =
erl_scan:string(Var, {1,1}),
- ?line {done,{error,{{1,5},erl_scan,{illegal,var}},{1,1005}},". "} =
+ {done,{error,{{1,5},erl_scan,{illegal,var}},{1,1005}},". "} =
erl_scan:tokens([], "foo "++Var++". ", {1,1}),
- ?line {error,{{1,1},erl_scan,{illegal,float}},{1,404}} =
+ {error,{{1,1},erl_scan,{illegal,float}},{1,404}} =
erl_scan:string(Float, {1,1}),
- ?line {done,{error,{{1,5},erl_scan,{illegal,float}},{1,408}},". "} =
+ {done,{error,{{1,5},erl_scan,{illegal,float}},{1,408}},". "} =
erl_scan:tokens([], "foo "++Float++". ", {1,1}),
- ?line {error,{{1,4},erl_scan,{illegal,character}},{1,14}} =
+ {error,{{1,4},erl_scan,{illegal,character}},{1,14}} =
erl_scan:string(String, {1,1}),
- ?line {done,{error,{{1,4},erl_scan,{illegal,character}},{1,14}},"34\". "} =
+ {done,{error,{{1,4},erl_scan,{illegal,character}},{1,14}},"34\". "} =
erl_scan:tokens([], String++". ", {1,1}),
ok.
crashes() ->
- ?line {'EXIT',_} = (catch {foo, erl_scan:string([-1])}), % type error
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("$"++[-1])}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("$\\"++[-1])}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("$\\^"++[-1])}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string([$",-1,$"],{1,1})}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("\"\\v"++[-1,$"])}), %$"
- ?line {'EXIT',_} = (catch {foo, erl_scan:string([$",-1,$"])}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("% foo"++[-1])}),
- ?line {'EXIT',_} =
+ {'EXIT',_} = (catch {foo, erl_scan:string([-1])}), % type error
+ {'EXIT',_} = (catch {foo, erl_scan:string("$"++[-1])}),
+ {'EXIT',_} = (catch {foo, erl_scan:string("$\\"++[-1])}),
+ {'EXIT',_} = (catch {foo, erl_scan:string("$\\^"++[-1])}),
+ {'EXIT',_} = (catch {foo, erl_scan:string([$",-1,$"],{1,1})}),
+ {'EXIT',_} = (catch {foo, erl_scan:string("\"\\v"++[-1,$"])}), %$"
+ {'EXIT',_} = (catch {foo, erl_scan:string([$",-1,$"])}),
+ {'EXIT',_} = (catch {foo, erl_scan:string("% foo"++[-1])}),
+ {'EXIT',_} =
(catch {foo, erl_scan:string("% foo"++[-1],{1,1})}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string([a])}), % type error
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("$"++[a])}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("$\\"++[a])}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("$\\^"++[a])}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string([$",a,$"],{1,1})}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("\"\\v"++[a,$"])}), %$"
- ?line {'EXIT',_} = (catch {foo, erl_scan:string([$",a,$"])}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string("% foo"++[a])}),
- ?line {'EXIT',_} =
+ {'EXIT',_} = (catch {foo, erl_scan:string([a])}), % type error
+ {'EXIT',_} = (catch {foo, erl_scan:string("$"++[a])}),
+ {'EXIT',_} = (catch {foo, erl_scan:string("$\\"++[a])}),
+ {'EXIT',_} = (catch {foo, erl_scan:string("$\\^"++[a])}),
+ {'EXIT',_} = (catch {foo, erl_scan:string([$",a,$"],{1,1})}),
+ {'EXIT',_} = (catch {foo, erl_scan:string("\"\\v"++[a,$"])}), %$"
+ {'EXIT',_} = (catch {foo, erl_scan:string([$",a,$"])}),
+ {'EXIT',_} = (catch {foo, erl_scan:string("% foo"++[a])}),
+ {'EXIT',_} =
(catch {foo, erl_scan:string("% foo"++[a],{1,1})}),
- ?line {'EXIT',_} = (catch {foo, erl_scan:string([3.0])}), % type error
+ {'EXIT',_} = (catch {foo, erl_scan:string([3.0])}), % type error
ok.
options() ->
%% line and column are not options, but tested here
- ?line {ok,[{atom,1,foo},{white_space,1," "},{comment,1,"% bar"}], 1} =
+ {ok,[{atom,1,foo},{white_space,1," "},{comment,1,"% bar"}], 1} =
erl_scan_string("foo % bar", 1, return),
- ?line {ok,[{atom,1,foo},{white_space,1," "}],1} =
+ {ok,[{atom,1,foo},{white_space,1," "}],1} =
erl_scan_string("foo % bar", 1, return_white_spaces),
- ?line {ok,[{atom,1,foo},{comment,1,"% bar"}],1} =
+ {ok,[{atom,1,foo},{comment,1,"% bar"}],1} =
erl_scan_string("foo % bar", 1, return_comments),
- ?line {ok,[{atom,17,foo}],17} =
+ {ok,[{atom,17,foo}],17} =
erl_scan_string("foo % bar", 17),
- ?line {'EXIT',{function_clause,_}} =
+ {'EXIT',{function_clause,_}} =
(catch {foo,
erl_scan:string("foo % bar", {a,1}, [])}), % type error
- ?line {ok,[{atom,_,foo}],{17,18}} =
+ {ok,[{atom,_,foo}],{17,18}} =
erl_scan_string("foo % bar", {17,9}, []),
- ?line {'EXIT',{function_clause,_}} =
+ {'EXIT',{function_clause,_}} =
(catch {foo,
erl_scan:string("foo % bar", {1,0}, [])}), % type error
- ?line {ok,[{foo,1}],1} =
+ {ok,[{foo,1}],1} =
erl_scan_string("foo % bar",1, [{reserved_word_fun,
fun(W) -> W =:= foo end}]),
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch {foo,
erl_scan:string("foo % bar",1, % type error
[{reserved_word_fun,
@@ -655,180 +635,107 @@ options() ->
ok.
more_options() ->
- ?line {ok,[{atom,A1,foo}],{19,20}} =
+ {ok,[{atom,_,foo}=T1],{19,20}} =
erl_scan:string("foo", {19,17},[]),
- ?line [{column,17},{line,19}] = erl_scan:attributes_info(A1),
- ?line {done,{ok,[{atom,A2,foo},{dot,_}],{19,22}},[]} =
+ {19,17} = erl_scan:location(T1),
+ {done,{ok,[{atom,_,foo}=T2,{dot,_}],{19,22}},[]} =
erl_scan:tokens([], "foo. ", {19,17}, [bad_opt]), % type error
- ?line [{column,17},{line,19}] = erl_scan:attributes_info(A2),
- ?line {ok,[{atom,A3,foo}],{19,20}} =
+ {19,17} = erl_scan:location(T2),
+ {ok,[{atom,_,foo}=T3],{19,20}} =
erl_scan:string("foo", {19,17},[text]),
- ?line [{column,17},{length,3},{line,19},{text,"foo"}] =
- erl_scan:attributes_info(A3),
+ {19,17} = erl_scan:location(T3),
+ "foo" = erl_scan:text(T3),
- ?line {ok,[{atom,A4,foo}],1} = erl_scan:string("foo", 1, [text]),
- ?line [{length,3},{line,1},{text,"foo"}] = erl_scan:attributes_info(A4),
+ {ok,[{atom,_,foo}=T4],1} = erl_scan:string("foo", 1, [text]),
+ 1 = erl_scan:line(T4),
+ 1 = erl_scan:location(T4),
+ "foo" = erl_scan:text(T4),
ok.
token_info() ->
- ?line {ok,[T1],_} = erl_scan:string("foo", {1,18}, [text]),
+ {ok,[T1],_} = erl_scan:string("foo", {1,18}, [text]),
+ {'EXIT',{badarg,_}} =
+ (catch {foo, erl_scan:category(foo)}), % type error
{'EXIT',{badarg,_}} =
- (catch {foo, erl_scan:token_info(T1, foo)}), % type error
- ?line {line,1} = erl_scan:token_info(T1, line),
- ?line {column,18} = erl_scan:token_info(T1, column),
- ?line {length,3} = erl_scan:token_info(T1, length),
- ?line {text,"foo"} = erl_scan:token_info(T1, text),
- ?line [{category,atom},{column,18},{length,3},{line,1},
- {symbol,foo},{text,"foo"}] =
- erl_scan:token_info(T1),
- ?line [{length,3},{column,18}] =
- erl_scan:token_info(T1, [length, column]),
- ?line [{location,{1,18}}] =
- erl_scan:token_info(T1, [location]),
- ?line {category,atom} = erl_scan:token_info(T1, category),
- ?line [{symbol,foo}] = erl_scan:token_info(T1, [symbol]),
-
- ?line {ok,[T2],_} = erl_scan:string("foo", 1, []),
- ?line {line,1} = erl_scan:token_info(T2, line),
- ?line undefined = erl_scan:token_info(T2, column),
- ?line undefined = erl_scan:token_info(T2, length),
- ?line undefined = erl_scan:token_info(T2, text),
- ?line {location,1} = erl_scan:token_info(T2, location),
- ?line [{category,atom},{line,1},{symbol,foo}] = erl_scan:token_info(T2),
- ?line [{line,1}] = erl_scan:token_info(T2, [length, line]),
-
- ?line {ok,[T3],_} = erl_scan:string("=", 1, []),
- ?line [{line,1}] = erl_scan:token_info(T3, [column, line]),
- ?line {category,'='} = erl_scan:token_info(T3, category),
- ?line [{symbol,'='}] = erl_scan:token_info(T3, [symbol]),
+ (catch {foo, erl_scan:symbol(foo)}), % type error
+ atom = erl_scan:category(T1),
+ foo = erl_scan:symbol(T1),
+
+ {ok,[T2],_} = erl_scan:string("foo", 1, []),
+ 1 = erl_scan:line(T2),
+ undefined = erl_scan:column(T2),
+ undefined = erl_scan:text(T2),
+ 1 = erl_scan:location(T2),
+
+ {ok,[T3],_} = erl_scan:string("=", 1, []),
+ '=' = erl_scan:category(T3),
+ '=' = erl_scan:symbol(T3),
ok.
-attributes_info() ->
- ?line {'EXIT',_} =
- (catch {foo,erl_scan:attributes_info(foo)}), % type error
- [{line,18}] = erl_scan:attributes_info(erl_anno:new(18)),
- {location,19} =
- erl_scan:attributes_info(erl_anno:new(19), location),
- ?line {ok,[{atom,A0,foo}],_} = erl_scan:string("foo", 19, [text]),
- ?line {location,19} = erl_scan:attributes_info(A0, location),
-
- ?line {ok,[{atom,A3,foo}],_} = erl_scan:string("foo", {1,3}, [text]),
- ?line {line,1} = erl_scan:attributes_info(A3, line),
- ?line {column,3} = erl_scan:attributes_info(A3, column),
- ?line {location,{1,3}} = erl_scan:attributes_info(A3, location),
- ?line {text,"foo"} = erl_scan:attributes_info(A3, text),
-
- ?line {ok,[{atom,A4,foo}],_} = erl_scan:string("foo", 2, [text]),
- ?line {line,2} = erl_scan:attributes_info(A4, line),
- ?line undefined = erl_scan:attributes_info(A4, column),
- ?line {location,2} = erl_scan:attributes_info(A4, location),
- ?line {text,"foo"} = erl_scan:attributes_info(A4, text),
-
- ?line {ok,[{atom,A5,foo}],_} = erl_scan:string("foo", {1,3}, []),
- ?line {line,1} = erl_scan:attributes_info(A5, line),
- ?line {column,3} = erl_scan:attributes_info(A5, column),
- ?line {location,{1,3}} = erl_scan:attributes_info(A5, location),
- ?line undefined = erl_scan:attributes_info(A5, text),
-
- ?line undefined = erl_scan:attributes_info([], line), % type error
+anno_info() ->
+ {'EXIT',_} =
+ (catch {foo,erl_scan:line(foo)}), % type error
+ {ok,[{atom,_,foo}=T0],_} = erl_scan:string("foo", 19, [text]),
+ 19 = erl_scan:location(T0),
+ 19 = erl_scan:end_location(T0),
+
+ {ok,[{atom,_,foo}=T3],_} = erl_scan:string("foo", {1,3}, [text]),
+ 1 = erl_scan:line(T3),
+ 3 = erl_scan:column(T3),
+ {1,3} = erl_scan:location(T3),
+ {1,6} = erl_scan:end_location(T3),
+ "foo" = erl_scan:text(T3),
+
+ {ok,[{atom,_,foo}=T4],_} = erl_scan:string("foo", 2, [text]),
+ 2 = erl_scan:line(T4),
+ undefined = erl_scan:column(T4),
+ 2 = erl_scan:location(T4),
+ "foo" = erl_scan:text(T4),
+
+ {ok,[{atom,_,foo}=T5],_} = erl_scan:string("foo", {1,3}, []),
+ 1 = erl_scan:line(T5),
+ 3 = erl_scan:column(T5),
+ {1,3} = erl_scan:location(T5),
+ undefined = erl_scan:text(T5),
ok.
-set_attribute() ->
- F = fun(Line) -> -Line end,
- Anno2 = erl_anno:new(2),
- A0 = erl_scan:set_attribute(line, Anno2, F),
- {line, -2} = erl_scan:attributes_info(A0, line),
- ?line {ok,[{atom,A1,foo}],_} = erl_scan:string("foo", {9,17}),
- ?line A2 = erl_scan:set_attribute(line, A1, F),
- ?line {line,-9} = erl_scan:attributes_info(A2, line),
- ?line {location,{-9,17}} = erl_scan:attributes_info(A2, location),
- ?line [{line,-9},{column,17}] =
- erl_scan:attributes_info(A2, [line,column,text]),
-
- F2 = fun(Line) -> {17,Line} end,
- ?line Attr1 = erl_scan:set_attribute(line, 2, F2),
- ?line {line,{17,2}} = erl_scan:attributes_info(Attr1, line),
- ?line undefined = erl_scan:attributes_info(Attr1, column),
- ?line {location,{17,2}} = % a bit mixed up
- erl_scan:attributes_info(Attr1, location),
-
- ?line A3 = erl_scan:set_attribute(line, A1, F2),
- ?line {line,{17,9}} = erl_scan:attributes_info(A3, line),
- ?line {location,{{17,9},17}} = erl_scan:attributes_info(A3, location),
- ?line [{line,{17,9}},{column,17}] =
- erl_scan:attributes_info(A3, [line,column,text]),
-
- ?line {ok,[{atom,A4,foo}],_} = erl_scan:string("foo", {9,17}, [text]),
- ?line A5 = erl_scan:set_attribute(line, A4, F),
- ?line {line,-9} = erl_scan:attributes_info(A5, line),
- ?line {location,{-9,17}} = erl_scan:attributes_info(A5, location),
- ?line [{line,-9},{column,17},{text,"foo"}] =
- erl_scan:attributes_info(A5, [line,column,text]),
-
- ?line {ok,[{atom,A6,foo}],_} = erl_scan:string("foo", 11, [text]),
- ?line A7 = erl_scan:set_attribute(line, A6, F2),
- %% Incompatible with pre 18:
- %% {line,{17,11}} = erl_scan:attributes_info(A7, line),
- {line,17} = erl_scan:attributes_info(A7, line),
- ?line {location,{17,11}} = % mixed up
- erl_scan:attributes_info(A7, location),
- %% Incompatible with pre 18:
- %% [{line,{17,11}},{text,"foo"}] =
- %% erl_scan:attributes_info(A7, [line,column,text]),
- [{line,17},{column,11},{text,"foo"}] =
- erl_scan:attributes_info(A7, [line,column,text]),
-
- ?line {'EXIT',_} =
- (catch {foo, erl_scan:set_attribute(line, [], F2)}), % type error
- ?line {'EXIT',{badarg,_}} =
- (catch {foo, erl_scan:set_attribute(column, [], F2)}), % type error
-
- Attr10 = erl_anno:new(8),
- Attr20 = erl_scan:set_attribute(line, Attr10,
- fun(L) -> {nos,'X',L} end),
- %% OTP-9412
- Attr30 = erl_scan:set_attribute(line, Attr20,
- fun({nos,_V,VL}) -> VL end),
- 8 = erl_anno:to_term(Attr30),
- ok.
-
column_errors() ->
- ?line {error,{{1,1},erl_scan,{string,$',""}},{1,3}} = % $'
+ {error,{{1,1},erl_scan,{string,$',""}},{1,3}} = % $'
erl_scan:string("'\\",{1,1}),
- ?line {error,{{1,1},erl_scan,{string,$",""}},{1,3}} = % $"
+ {error,{{1,1},erl_scan,{string,$",""}},{1,3}} = % $"
erl_scan:string("\"\\",{1,1}),
- ?line {error,{{1,1},erl_scan,{string,$',""}},{1,2}} = % $'
+ {error,{{1,1},erl_scan,{string,$',""}},{1,2}} = % $'
erl_scan:string("'",{1,1}),
- ?line {error,{{1,1},erl_scan,{string,$",""}},{1,2}} = % $"
+ {error,{{1,1},erl_scan,{string,$",""}},{1,2}} = % $"
erl_scan:string("\"",{1,1}),
- ?line {error,{{1,1},erl_scan,char},{1,2}} =
+ {error,{{1,1},erl_scan,char},{1,2}} =
erl_scan:string("$",{1,1}),
- ?line {error,{{1,2},erl_scan,{string,$',"1234567890123456"}},{1,20}} = %'
+ {error,{{1,2},erl_scan,{string,$',"1234567890123456"}},{1,20}} = %'
erl_scan:string(" '12345678901234567", {1,1}),
- ?line {error,{{1,2},erl_scan,{string,$',"123456789012345 "}}, {1,20}} = %'
+ {error,{{1,2},erl_scan,{string,$',"123456789012345 "}}, {1,20}} = %'
erl_scan:string(" '123456789012345\\s", {1,1}),
- ?line {error,{{1,2},erl_scan,{string,$","1234567890123456"}},{1,20}} = %"
+ {error,{{1,2},erl_scan,{string,$","1234567890123456"}},{1,20}} = %"
erl_scan:string(" \"12345678901234567", {1,1}),
- ?line {error,{{1,2},erl_scan,{string,$","123456789012345 "}}, {1,20}} = %"
+ {error,{{1,2},erl_scan,{string,$","123456789012345 "}}, {1,20}} = %"
erl_scan:string(" \"123456789012345\\s", {1,1}),
- ?line {error,{{1,2},erl_scan,{string,$',"1234567890123456"}},{2,1}} = %'
+ {error,{{1,2},erl_scan,{string,$',"1234567890123456"}},{2,1}} = %'
erl_scan:string(" '12345678901234567\n", {1,1}),
ok.
white_spaces() ->
- ?line {ok,[{white_space,_,"\r"},
+ {ok,[{white_space,_,"\r"},
{white_space,_," "},
{atom,_,a},
{white_space,_,"\n"}],
_} = erl_scan_string("\r a\n", {1,1}, return),
- ?line test("\r a\n"),
+ test("\r a\n"),
L = "{\"a\nb\", \"a\\nb\",\nabc\r,def}.\n\n",
- ?line {ok,[{'{',_},
+ {ok,[{'{',_},
{string,_,"a\nb"},
{',',_},
{white_space,_," "},
@@ -843,33 +750,33 @@ white_spaces() ->
{dot,_},
{white_space,_,"\n"}],
_} = erl_scan_string(L, {1,1}, return),
- ?line test(L),
- ?line test("\"\n\"\n"),
- ?line test("\n\r\n"),
- ?line test("\n\r"),
- ?line test("\r\n"),
- ?line test("\n\f"),
- ?line [test(lists:duplicate(N, $\t)) || N <- lists:seq(1, 20)],
- ?line [test([$\n|lists:duplicate(N, $\t)]) || N <- lists:seq(1, 20)],
- ?line [test(lists:duplicate(N, $\s)) || N <- lists:seq(1, 20)],
- ?line [test([$\n|lists:duplicate(N, $\s)]) || N <- lists:seq(1, 20)],
- ?line test("\v\f\n\v "),
- ?line test("\n\e\n\b\f\n\da\n"),
+ test(L),
+ test("\"\n\"\n"),
+ test("\n\r\n"),
+ test("\n\r"),
+ test("\r\n"),
+ test("\n\f"),
+ [test(lists:duplicate(N, $\t)) || N <- lists:seq(1, 20)],
+ [test([$\n|lists:duplicate(N, $\t)]) || N <- lists:seq(1, 20)],
+ [test(lists:duplicate(N, $\s)) || N <- lists:seq(1, 20)],
+ [test([$\n|lists:duplicate(N, $\s)]) || N <- lists:seq(1, 20)],
+ test("\v\f\n\v "),
+ test("\n\e\n\b\f\n\da\n"),
ok.
unicode() ->
- ?line {ok,[{char,1,83},{integer,1,45}],1} =
+ {ok,[{char,1,83},{integer,1,45}],1} =
erl_scan_string("$\\12345"), % not unicode
- ?line {error,{1,erl_scan,{illegal,character}},1} =
+ {error,{1,erl_scan,{illegal,character}},1} =
erl_scan:string([1089]),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,2}} =
+ {error,{{1,1},erl_scan,{illegal,character}},{1,2}} =
erl_scan:string([1089], {1,1}),
{error,{1,erl_scan,{illegal,atom}},1} =
erl_scan:string("'a"++[1089]++"b'", 1),
{error,{{1,1},erl_scan,{illegal,atom}},{1,6}} =
erl_scan:string("'a"++[1089]++"b'", {1,1}),
- ?line test("\"a"++[1089]++"b\""),
+ test("\"a"++[1089]++"b\""),
{ok,[{char,1,1}],1} =
erl_scan_string([$$,$\\,$^,1089], 1),
@@ -877,7 +784,7 @@ unicode() ->
erl_scan:string("\"qa\x{aaa}", 1),
"unterminated string starting with \"qa"++[2730]++"\"" =
erl_scan:format_error(Error),
- ?line {error,{{1,1},erl_scan,_},{1,11}} =
+ {error,{{1,1},erl_scan,_},{1,11}} =
erl_scan:string("\"qa\\x{aaa}",{1,1}),
{error,{{1,1},erl_scan,{illegal,atom}},{1,12}} =
erl_scan:string("'qa\\x{aaa}'",{1,1}),
@@ -892,14 +799,13 @@ unicode() ->
erl_scan_string(Qs, 1),
{ok,[Q2],{1,9}} =
erl_scan:string("$\\x{aaa}", {1,1}, [text]),
- [{category,char},{column,1},{length,8},
- {line,1},{symbol,16#aaa},{text,Qs}] =
- erl_scan:token_info(Q2),
+ [{category,char},{column,1},{line,1},{symbol,16#aaa},{text,Qs}] =
+ token_info_long(Q2),
U1 = "\"\\x{aaa}\"",
- {ok,[{string,A1,[2730]}],{1,10}} = erl_scan:string(U1, {1,1}, [text]),
- [{line,1},{column,1},{text,"\"\\x{aaa}\""}] =
- erl_scan:attributes_info(A1, [line, column, text]),
+ {ok,[{string,_,[2730]}=T1],{1,10}} = erl_scan:string(U1, {1,1}, [text]),
+ {1,1} = erl_scan:location(T1),
+ "\"\\x{aaa}\"" = erl_scan:text(T1),
{ok,[{string,1,[2730]}],1} = erl_scan_string(U1, 1),
U2 = "\"\\x41\\x{fff}\\x42\"",
@@ -912,17 +818,17 @@ unicode() ->
{ok,[{string,1,[$\n,$\x{aaa},$\n]}],3} = erl_scan_string(U4, 1),
%% Keep these tests:
- ?line test(Qs),
- ?line test(U1),
- ?line test(U2),
- ?line test(U3),
- ?line test(U4),
+ test(Qs),
+ test(U1),
+ test(U2),
+ test(U3),
+ test(U4),
Str1 = "\"ab" ++ [1089] ++ "cd\"",
{ok,[{string,1,[$a,$b,1089,$c,$d]}],1} = erl_scan_string(Str1, 1),
{ok,[{string,{1,1},[$a,$b,1089,$c,$d]}],{1,8}} =
erl_scan_string(Str1, {1,1}),
- ?line test(Str1),
+ test(Str1),
Comment = "%% "++[1089],
{ok,[{comment,1,[$%,$%,$\s,1089]}],1} =
erl_scan_string(Comment, 1, [return]),
@@ -935,70 +841,67 @@ more_chars() ->
%% $\x{...}, $\xHH
%% All kinds of tests...
- ?line {ok,[{char,_,123}],{1,4}} =
+ {ok,[{char,_,123}],{1,4}} =
erl_scan_string("$\\{",{1,1}),
- ?line {more, C1} = erl_scan:tokens([], "$\\{", {1,1}),
- ?line {done,{ok,[{char,_,123}],{1,4}},eof} =
+ {more, C1} = erl_scan:tokens([], "$\\{", {1,1}),
+ {done,{ok,[{char,_,123}],{1,4}},eof} =
erl_scan_tokens(C1, eof, 1),
- ?line {ok,[{char,1,123},{atom,1,a},{'}',1}],1} =
+ {ok,[{char,1,123},{atom,1,a},{'}',1}],1} =
erl_scan_string("$\\{a}"),
- ?line {error,{{1,1},erl_scan,char},{1,4}} =
+ {error,{{1,1},erl_scan,char},{1,4}} =
erl_scan:string("$\\x", {1,1}),
- ?line {error,{{1,1},erl_scan,char},{1,5}} =
+ {error,{{1,1},erl_scan,char},{1,5}} =
erl_scan:string("$\\x{",{1,1}),
- ?line {more, C3} = erl_scan:tokens([], "$\\x", {1,1}),
- ?line {done,{error,{{1,1},erl_scan,char},{1,4}},eof} =
+ {more, C3} = erl_scan:tokens([], "$\\x", {1,1}),
+ {done,{error,{{1,1},erl_scan,char},{1,4}},eof} =
erl_scan:tokens(C3, eof, 1),
- ?line {error,{{1,1},erl_scan,char},{1,5}} =
+ {error,{{1,1},erl_scan,char},{1,5}} =
erl_scan:string("$\\x{",{1,1}),
- ?line {more, C2} = erl_scan:tokens([], "$\\x{", {1,1}),
- ?line {done,{error,{{1,1},erl_scan,char},{1,5}},eof} =
+ {more, C2} = erl_scan:tokens([], "$\\x{", {1,1}),
+ {done,{error,{{1,1},erl_scan,char},{1,5}},eof} =
erl_scan:tokens(C2, eof, 1),
- ?line {error,{1,erl_scan,{illegal,character}},1} =
+ {error,{1,erl_scan,{illegal,character}},1} =
erl_scan:string("$\\x{g}"),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,5}} =
+ {error,{{1,1},erl_scan,{illegal,character}},{1,5}} =
erl_scan:string("$\\x{g}", {1,1}),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,6}} =
+ {error,{{1,1},erl_scan,{illegal,character}},{1,6}} =
erl_scan:string("$\\x{}",{1,1}),
- ?line test("\"\\{0}\""),
- ?line test("\"\\x{0}\""),
- ?line test("\'\\{0}\'"),
- ?line test("\'\\x{0}\'"),
+ test("\"\\{0}\""),
+ test("\"\\x{0}\""),
+ test("\'\\{0}\'"),
+ test("\'\\x{0}\'"),
- ?line {error,{{2,3},erl_scan,{illegal,character}},{2,6}} =
+ {error,{{2,3},erl_scan,{illegal,character}},{2,6}} =
erl_scan:string("\"ab \n $\\x{g}\"",{1,1}),
- ?line {error,{{2,3},erl_scan,{illegal,character}},{2,6}} =
+ {error,{{2,3},erl_scan,{illegal,character}},{2,6}} =
erl_scan:string("\'ab \n $\\x{g}\'",{1,1}),
- ?line test("$\\{34}"),
- ?line test("$\\x{34}"),
- ?line test("$\\{377}"),
- ?line test("$\\x{FF}"),
- ?line test("$\\{400}"),
- ?line test("$\\x{100}"),
- ?line test("$\\x{10FFFF}"),
- ?line test("$\\x{10ffff}"),
- ?line test("\"$\n \\{1}\""),
- ?line {error,{1,erl_scan,{illegal,character}},1} =
+ test("$\\{34}"),
+ test("$\\x{34}"),
+ test("$\\{377}"),
+ test("$\\x{FF}"),
+ test("$\\{400}"),
+ test("$\\x{100}"),
+ test("$\\x{10FFFF}"),
+ test("$\\x{10ffff}"),
+ test("\"$\n \\{1}\""),
+ {error,{1,erl_scan,{illegal,character}},1} =
erl_scan:string("$\\x{110000}"),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,12}} =
+ {error,{{1,1},erl_scan,{illegal,character}},{1,12}} =
erl_scan:string("$\\x{110000}", {1,1}),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,4}} =
+ {error,{{1,1},erl_scan,{illegal,character}},{1,4}} =
erl_scan:string("$\\xfg", {1,1}),
- ?line test("$\\xffg"),
+ test("$\\xffg"),
- ?line {error,{{1,1},erl_scan,{illegal,character}},{1,4}} =
+ {error,{{1,1},erl_scan,{illegal,character}},{1,4}} =
erl_scan:string("$\\xg", {1,1}),
ok.
-otp_10302(doc) ->
- "OTP-10302. Unicode characters scanner/parser.";
-otp_10302(suite) ->
- [];
+%% OTP-10302. Unicode characters scanner/parser.
otp_10302(Config) when is_list(Config) ->
%% From unicode():
{error,{1,erl_scan,{illegal,atom}},1} =
@@ -1012,16 +915,13 @@ otp_10302(Config) when is_list(Config) ->
Qs = "$\\x{aaa}",
{ok,[{char,1,2730}],1} = erl_scan_string(Qs, 1),
{ok,[Q2],{1,9}} = erl_scan:string(Qs,{1,1},[text]),
- [{category,char},{column,1},{length,8},
- {line,1},{symbol,16#aaa},{text,Qs}] =
- erl_scan:token_info(Q2),
-
- Tags = [category, column, length, line, symbol, text],
+ [{category,char},{column,1},{line,1},{symbol,16#aaa},{text,Qs}] =
+ token_info_long(Q2),
U1 = "\"\\x{aaa}\"",
{ok,[T1],{1,10}} = erl_scan:string(U1, {1,1}, [text]),
- [{category,string},{column,1},{length,9},{line,1},
- {symbol,[16#aaa]},{text,U1}] = erl_scan:token_info(T1, Tags),
+ [{category,string},{column,1},{line,1},{symbol,[16#aaa]},{text,U1}] =
+ token_info_long(T1),
U2 = "\"\\x41\\x{fff}\\x42\"",
{ok,[{string,1,[65,4095,66]}],1} = erl_scan_string(U2, 1),
@@ -1171,18 +1071,12 @@ otp_10302(Config) when is_list(Config) ->
erl_parse_abstract("a"++[1024]++"c", [{encoding,latin1}]),
ok.
-otp_10990(doc) ->
- "OTP-10990. Floating point number in input string.";
-otp_10990(suite) ->
- [];
+%% OTP-10990. Floating point number in input string.
otp_10990(Config) when is_list(Config) ->
{'EXIT',_} = (catch {foo, erl_scan:string([$",42.0,$"],1)}),
ok.
-otp_10992(doc) ->
- "OTP-10992. List of floats to abstract format.";
-otp_10992(suite) ->
- [];
+%% OTP-10992. List of floats to abstract format.
otp_10992(Config) when is_list(Config) ->
{cons,0,{float,0,42.0},{nil,0}} =
erl_parse_abstract([42.0], [{encoding,unicode}]),
@@ -1194,10 +1088,7 @@ otp_10992(Config) when is_list(Config) ->
erl_parse_abstract([$A,42.0], [{encoding,utf8}]),
ok.
-otp_11807(doc) ->
- "OTP-11807. Generalize erl_parse:abstract/2.";
-otp_11807(suite) ->
- [];
+%% OTP-11807. Generalize erl_parse:abstract/2.
otp_11807(Config) when is_list(Config) ->
{cons,0,{integer,0,97},{cons,0,{integer,0,98},{nil,0}}} =
erl_parse_abstract("ab", [{encoding,none}]),
@@ -1353,9 +1244,7 @@ test_wsc([], []) ->
ok;
test_wsc([Token|Tokens], [Token2|Tokens2]) ->
[Text, Text2] = [Text ||
- {text, Text} <-
- [erl_scan:token_info(T, text) ||
- T <- [Token, Token2]]],
+ Text <- [erl_scan:text(T) || T <- [Token, Token2]]],
Sz = erts_debug:size(Text),
Sz2 = erts_debug:size({Text, Text2}),
IsCompacted = Sz2 < 2*Sz+erts_debug:size({a,a}),
@@ -1394,7 +1283,7 @@ all_same(L, Char) ->
newlines_first([]) ->
ok;
newlines_first([Token|Tokens]) ->
- {text,Text} = erl_scan:token_info(Token, text),
+ Text = erl_scan:text(Token),
Nnls = length([C || C <- Text, C =:= $\n]),
OK = case Text of
[$\n|_] ->
@@ -1414,7 +1303,7 @@ select_tokens(Tokens, Tags) ->
lists:filter(fun(T) -> lists:member(element(1, T), Tags) end, Tokens).
simplify([Token|Tokens]) ->
- {line,Line} = erl_scan:token_info(Token, line),
+ Line = erl_scan:line(Token),
[setelement(2, Token, erl_anno:new(Line)) | simplify(Tokens)];
simplify([]) ->
[].
@@ -1423,17 +1312,31 @@ get_text(Tokens) ->
lists:flatten(
[T ||
Token <- Tokens,
- ({text,T} = erl_scan:token_info(Token, text)) =/= []]).
+ (T = erl_scan:text(Token)) =/= []]).
test_decorated_tokens(String, Tokens) ->
ToksAttrs = token_attrs(Tokens),
test_strings(ToksAttrs, String, 1, 1).
token_attrs(Tokens) ->
- [{L,C,Len,T} ||
+ [{L,C,length(T),T} ||
Token <- Tokens,
- ([{line,L},{column,C},{length,Len},{text,T}] =
- erl_scan:token_info(Token, [line,column,length,text])) =/= []].
+ ([C,L,T] = token_info(Token)) =/= []].
+
+token_info(T) ->
+ Column = erl_scan:column(T),
+ Line = erl_scan:line(T),
+ Text = erl_scan:text(T),
+ [Column, Line, Text].
+
+token_info_long(T) ->
+ Column = erl_scan:column(T),
+ Line = erl_scan:line(T),
+ Text = erl_scan:text(T),
+ Category = erl_scan:category(T),
+ Symbol = erl_scan:symbol(T),
+ [{category,Category},{column,Column},{line,Line},
+ {symbol,Symbol},{text,Text}].
test_strings([], _S, Line, Column) ->
{Line,Column};
@@ -1514,8 +1417,7 @@ consistent_attributes([Ts | TsL]) ->
L = [T || T <- Ts, is_integer(element(2, T))],
case L of
[] ->
- TagsL = [[Tag || {Tag,_} <-
- erl_scan:attributes_info(element(2, T))] ||
+ TagsL = [[Tag || {Tag,_} <- defined(token_info_long(T))] ||
T <- Ts],
case lists:usort(TagsL) of
[_] ->
@@ -1531,6 +1433,9 @@ consistent_attributes([Ts | TsL]) ->
Ts
end.
+defined(L) ->
+ [{T,V} || {T,V} <- L, V =/= undefined].
+
family_list(L) ->
sofs:to_external(family(L)).
diff --git a/lib/stdlib/test/error_logger_forwarder.erl b/lib/stdlib/test/error_logger_forwarder.erl
index 7ac2cfce82..6bbf180585 100644
--- a/lib/stdlib/test/error_logger_forwarder.erl
+++ b/lib/stdlib/test/error_logger_forwarder.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
-module(error_logger_forwarder).
%% API.
--export([register/0]).
+-export([register/0, unregister/0]).
%% Internal export for error_logger.
-export([init/1,
@@ -33,6 +33,10 @@
register() ->
error_logger:add_report_handler(?MODULE, self()).
+unregister() ->
+ Self = self(),
+ Self = error_logger:delete_report_handler(?MODULE).
+
init(Tester) ->
{ok,Tester}.
diff --git a/lib/stdlib/test/error_logger_h_SUITE.erl b/lib/stdlib/test/error_logger_h_SUITE.erl
index c82b1b62ef..2a34c7764f 100644
--- a/lib/stdlib/test/error_logger_h_SUITE.erl
+++ b/lib/stdlib/test/error_logger_h_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2015. All Rights Reserved.
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@
%% Event handler exports.
-export([init/1,handle_event/2,terminate/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -48,7 +48,7 @@ end_per_group(_GroupName, Config) ->
Config.
logfile(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
LogDir = filename:join(PrivDir, ?MODULE),
Log = filename:join(LogDir, "logfile.log"),
ok = filelib:ensure_dir(Log),
@@ -65,11 +65,18 @@ logfile(Config) ->
error_logger:logfile(close),
analyse_events(Log, Ev, [AtNode], unlimited),
- [] = [{X, file:pid2name(X)} || X <- processes(), Data <- [process_info(X, [current_function])],
- Data =/= undefined,
- element(1, element(2, lists:keyfind(current_function, 1, Data)))
- =:= file_io_server,
- file:pid2name(X) =:= {ok, Log}],
+ %% Make sure that the file_io_server process has been stopped
+ [] = lists:filtermap(
+ fun(X) ->
+ case {process_info(X, [current_function]),
+ file:pid2name(X)} of
+ {[{current_function, {file_io_server, _, _}}],
+ {ok,P2N = Log}} ->
+ {true, {X, P2N}};
+ _ ->
+ false
+ end
+ end, processes()),
test_server:stop_node(Node),
@@ -77,7 +84,7 @@ logfile(Config) ->
ok.
logfile_truncated(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
LogDir = filename:join(PrivDir, ?MODULE),
Log = filename:join(LogDir, "logfile_truncated.log"),
ok = filelib:ensure_dir(Log),
@@ -102,7 +109,7 @@ do_one_logfile(Log, Ev, Depth) ->
analyse_events(Log, Ev, [], Depth).
tty(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
LogDir = filename:join(PrivDir, ?MODULE),
Log = filename:join(LogDir, "tty.log"),
ok = filelib:ensure_dir(Log),
@@ -112,7 +119,7 @@ tty(Config) ->
do_one_tty(Log, Ev, unlimited),
Pa = "-pa " ++ filename:dirname(code:which(?MODULE)),
- {ok,Node} = start_node(logfile, Pa),
+ {ok,Node} = start_node(tty, Pa),
tty_log_open(Log),
ok = rpc:call(Node, erlang, apply, [fun gen_events/1,[Ev]]),
tty_log_close(),
@@ -125,7 +132,7 @@ tty(Config) ->
ok.
tty_truncated(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
LogDir = filename:join(PrivDir, ?MODULE),
Log = filename:join(LogDir, "tty_truncated.log"),
ok = filelib:ensure_dir(Log),
@@ -335,7 +342,7 @@ start_node(Name, Args) ->
{ok,Node} ->
{ok,Node};
Error ->
- test_server:fail(Error)
+ ct:fail(Error)
end.
cleanup(File) ->
diff --git a/lib/stdlib/test/escript_SUITE.erl b/lib/stdlib/test/escript_SUITE.erl
index 87ff6a68ff..28d69232a0 100644
--- a/lib/stdlib/test/escript_SUITE.erl
+++ b/lib/stdlib/test/escript_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
-module(escript_SUITE).
-export([
- all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
init_per_testcase/2,
end_per_testcase/2,
@@ -40,10 +40,12 @@
unicode/1
]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[basic, errors, strange_name, emulator_flags,
@@ -68,103 +70,100 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?t:minutes(5)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
basic(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Dir = filename:absname(Data), %Get rid of trailing slash.
- ?line run(Dir, "factorial 5",
- <<"factorial 5 = 120\nExitCode:0">>),
- ?line run(Dir, "factorial_compile 10",
- <<"factorial 10 = 3628800\nExitCode:0">>),
- ?line run(Dir, "factorial_compile_main 7",
- <<"factorial 7 = 5040\nExitCode:0">>),
- ?line run(Dir, "factorial_warning 20",
- [data_dir,<<"factorial_warning:12: Warning: function bar/0 is unused\n"
- "factorial 20 = 2432902008176640000\nExitCode:0">>]),
- ?line run_with_opts(Dir, "-s", "factorial_warning",
- [data_dir,<<"factorial_warning:12: Warning: function bar/0 is unused\nExitCode:0">>]),
- ?line run_with_opts(Dir, "-s -i", "factorial_warning",
- [data_dir,<<"factorial_warning:12: Warning: function bar/0 is unused\nExitCode:0">>]),
- ?line run_with_opts(Dir, "-c -s", "factorial_warning",
- [data_dir,<<"factorial_warning:12: Warning: function bar/0 is unused\nExitCode:0">>]),
- ?line run(Dir, "filesize "++filename:join(?config(data_dir, Config),"filesize"),
- [data_dir,<<"filesize:11: Warning: function id/1 is unused\n324\nExitCode:0">>]),
- ?line run(Dir, "test_script_name",
- [data_dir,<<"test_script_name\nExitCode:0">>]),
- ?line run(Dir, "tail_rec 1000",
- [<<"ok\nExitCode:0">>]),
+ run(Dir, "factorial 5",
+ <<"factorial 5 = 120\nExitCode:0">>),
+ run(Dir, "factorial_compile 10",
+ <<"factorial 10 = 3628800\nExitCode:0">>),
+ run(Dir, "factorial_compile_main 7",
+ <<"factorial 7 = 5040\nExitCode:0">>),
+ run(Dir, "factorial_warning 20",
+ [data_dir,<<"factorial_warning:12: Warning: function bar/0 is unused\n"
+ "factorial 20 = 2432902008176640000\nExitCode:0">>]),
+ run_with_opts(Dir, "-s", "factorial_warning",
+ [data_dir,<<"factorial_warning:12: Warning: function bar/0 is unused\nExitCode:0">>]),
+ run_with_opts(Dir, "-s -i", "factorial_warning",
+ [data_dir,<<"factorial_warning:12: Warning: function bar/0 is unused\nExitCode:0">>]),
+ run_with_opts(Dir, "-c -s", "factorial_warning",
+ [data_dir,<<"factorial_warning:12: Warning: function bar/0 is unused\nExitCode:0">>]),
+ run(Dir, "filesize "++filename:join(proplists:get_value(data_dir, Config),"filesize"),
+ [data_dir,<<"filesize:11: Warning: function id/1 is unused\n324\nExitCode:0">>]),
+ run(Dir, "test_script_name",
+ [data_dir,<<"test_script_name\nExitCode:0">>]),
+ run(Dir, "tail_rec 1000",
+ [<<"ok\nExitCode:0">>]),
%% We expect the trap_exit flag for the process to be false,
%% since that is the default state for newly spawned processes.
- ?line run(Dir, "trap_exit",
- <<"false\nExitCode:0">>),
+ run(Dir, "trap_exit",
+ <<"false\nExitCode:0">>),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
errors(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Dir = filename:absname(Data), %Get rid of trailing slash.
- ?line run(Dir, "compile_error",
- [data_dir,<<"compile_error:5: syntax error before: '*'\n">>,
- data_dir,<<"compile_error:8: syntax error before: blarf\n">>,
- <<"escript: There were compilation errors.\nExitCode:127">>]),
- ?line run(Dir, "lint_error",
- [data_dir,<<"lint_error:6: function main/1 already defined\n">>,
- data_dir,"lint_error:8: variable 'ExitCode' is unbound\n",
- <<"escript: There were compilation errors.\nExitCode:127">>]),
- ?line run_with_opts(Dir, "-s", "lint_error",
- [data_dir,<<"lint_error:6: function main/1 already defined\n">>,
- data_dir,"lint_error:8: variable 'ExitCode' is unbound\n",
- <<"escript: There were compilation errors.\nExitCode:127">>]),
+ run(Dir, "compile_error",
+ [data_dir,<<"compile_error:5: syntax error before: '*'\n">>,
+ data_dir,<<"compile_error:8: syntax error before: blarf\n">>,
+ <<"escript: There were compilation errors.\nExitCode:127">>]),
+ run(Dir, "lint_error",
+ [data_dir,<<"lint_error:6: function main/1 already defined\n">>,
+ data_dir,"lint_error:8: variable 'ExitCode' is unbound\n",
+ <<"escript: There were compilation errors.\nExitCode:127">>]),
+ run_with_opts(Dir, "-s", "lint_error",
+ [data_dir,<<"lint_error:6: function main/1 already defined\n">>,
+ data_dir,"lint_error:8: variable 'ExitCode' is unbound\n",
+ <<"escript: There were compilation errors.\nExitCode:127">>]),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
strange_name(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Dir = filename:absname(Data), %Get rid of trailing slash.
- ?line run(Dir, "strange.name -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "ExitCode:0">>]),
+ run(Dir, "strange.name -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "ExitCode:0">>]),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
emulator_flags(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Dir = filename:absname(Data), %Get rid of trailing slash.
- ?line run(Dir, "emulator_flags -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[{nostick,[]}]\n"
- "mnesia:[{mnesia,[\"dir\",\"a/directory\"]},{mnesia,[\"debug\",\"verbose\"]}]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
+ run(Dir, "emulator_flags -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[{nostick,[]}]\n"
+ "mnesia:[{mnesia,[\"dir\",\"a/directory\"]},{mnesia,[\"debug\",\"verbose\"]}]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
emulator_flags_no_shebang(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Dir = filename:absname(Data), %Get rid of trailing slash.
%% Need run_with_opts, to always use "escript" explicitly
- ?line run_with_opts(Dir, "", "emulator_flags_no_shebang -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[{nostick,[]}]\n"
- "mnesia:[{mnesia,[\"dir\",\"a/directory\"]},{mnesia,[\"debug\",\"verbose\"]}]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
+ run_with_opts(Dir, "", "emulator_flags_no_shebang -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[{nostick,[]}]\n"
+ "mnesia:[{mnesia,[\"dir\",\"a/directory\"]},{mnesia,[\"debug\",\"verbose\"]}]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -173,14 +172,14 @@ emulator_flags_no_shebang(Config) when is_list(Config) ->
module_script(Config) when is_list(Config) ->
%% Read orig file
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
OrigFile = filename:join([Data,"emulator_flags"]),
{ok, OrigBin} = file:read_file(OrigFile),
- ?line [Shebang, Mode, Flags | Source] = string:tokens(binary_to_list(OrigBin), "\n"),
- ?line {ok, OrigFI} = file:read_file_info(OrigFile),
+ [Shebang, Mode, Flags | Source] = string:tokens(binary_to_list(OrigBin), "\n"),
+ {ok, OrigFI} = file:read_file_info(OrigFile),
%% Write source file
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
Dir = filename:absname(Priv), % Get rid of trailing slash.
Base = "module_script",
ErlFile = filename:join([Priv, Base ++ ".erl"]),
@@ -188,85 +187,85 @@ module_script(Config) when is_list(Config) ->
"-export([main/1]).\n\n",
string:join(Source, "\n"),
"\n"],
- ?line ok = file:write_file(ErlFile, ErlCode),
+ ok = file:write_file(ErlFile, ErlCode),
- %%%%%%%
+%%%%%%%
%% Create and run scripts without emulator flags
%% With shebang
NoArgsBase = Base ++ "_no_args_with_shebang",
NoArgsFile = filename:join([Priv, NoArgsBase]),
- ?line ok = file:write_file(NoArgsFile,
- [Shebang, "\n",
- ErlCode]),
- ?line ok = file:write_file_info(NoArgsFile, OrigFI),
-
- ?line run(Dir, NoArgsBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[]\n"
- "mnesia:[]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
-
- ?line run_with_opts(Dir, "", NoArgsBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[]\n"
- "mnesia:[]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
+ ok = file:write_file(NoArgsFile,
+ [Shebang, "\n",
+ ErlCode]),
+ ok = file:write_file_info(NoArgsFile, OrigFI),
+
+ run(Dir, NoArgsBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[]\n"
+ "mnesia:[]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
+
+ run_with_opts(Dir, "", NoArgsBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[]\n"
+ "mnesia:[]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
%% Without shebang
NoArgsBase2 = Base ++ "_no_args_without_shebang",
NoArgsFile2 = filename:join([Priv, NoArgsBase2]),
- ?line ok = file:write_file(NoArgsFile2,
- ["Something else than shebang!!!", "\n",
- ErlCode]),
- ?line ok = file:write_file_info(NoArgsFile2, OrigFI),
-
- ?line run_with_opts(Dir, "", NoArgsBase2 ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[]\n"
- "mnesia:[]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
+ ok = file:write_file(NoArgsFile2,
+ ["Something else than shebang!!!", "\n",
+ ErlCode]),
+ ok = file:write_file_info(NoArgsFile2, OrigFI),
+
+ run_with_opts(Dir, "", NoArgsBase2 ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[]\n"
+ "mnesia:[]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
%% Plain module without header
NoArgsBase3 = Base ++ "_no_args_without_header",
NoArgsFile3 = filename:join([Priv, NoArgsBase3]),
- ?line ok = file:write_file(NoArgsFile3, [ErlCode]),
- ?line ok = file:write_file_info(NoArgsFile3, OrigFI),
-
- ?line run_with_opts(Dir, "", NoArgsBase3 ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[]\n"
- "mnesia:[]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
-
- %%%%%%%
+ ok = file:write_file(NoArgsFile3, [ErlCode]),
+ ok = file:write_file_info(NoArgsFile3, OrigFI),
+
+ run_with_opts(Dir, "", NoArgsBase3 ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[]\n"
+ "mnesia:[]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
+
+%%%%%%%
%% Create and run scripts with emulator flags
%% With shebang
ArgsBase = Base ++ "_args_with_shebang",
ArgsFile = filename:join([Priv, ArgsBase]),
- ?line ok = file:write_file(ArgsFile,
- [Shebang, "\n",
- Mode, "\n",
- Flags, "\n",
- ErlCode]),
- ?line ok = file:write_file_info(ArgsFile, OrigFI),
-
- ?line run(Dir, ArgsBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[{nostick,[]}]\n"
- "mnesia:[{mnesia,[\"dir\",\"a/directory\"]},{mnesia,[\"debug\",\"verbose\"]}]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
+ ok = file:write_file(ArgsFile,
+ [Shebang, "\n",
+ Mode, "\n",
+ Flags, "\n",
+ ErlCode]),
+ ok = file:write_file_info(ArgsFile, OrigFI),
+
+ run(Dir, ArgsBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[{nostick,[]}]\n"
+ "mnesia:[{mnesia,[\"dir\",\"a/directory\"]},{mnesia,[\"debug\",\"verbose\"]}]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
ok.
@@ -275,103 +274,103 @@ module_script(Config) when is_list(Config) ->
%% Generate a new escript containing the beam code and the escript header
beam_script(Config) when is_list(Config) ->
%% Read orig file
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
OrigFile = filename:join([Data,"emulator_flags"]),
{ok, OrigBin} = file:read_file(OrigFile),
- ?line [Shebang, Mode, Flags | Source] = string:tokens(binary_to_list(OrigBin), "\n"),
- ?line {ok, OrigFI} = file:read_file_info(OrigFile),
+ [Shebang, Mode, Flags | Source] = string:tokens(binary_to_list(OrigBin), "\n"),
+ {ok, OrigFI} = file:read_file_info(OrigFile),
%% Write source file
- Priv = ?config(priv_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
Dir = filename:absname(Priv), % Get rid of trailing slash.
Base = "beam_script",
ErlFile = filename:join([Priv, Base ++ ".erl"]),
- ?line ok = file:write_file(ErlFile,
- ["\n-module(", Base, ").\n",
- "-export([main/1]).\n\n",
- string:join(Source, "\n"),
- "\n"]),
+ ok = file:write_file(ErlFile,
+ ["\n-module(", Base, ").\n",
+ "-export([main/1]).\n\n",
+ string:join(Source, "\n"),
+ "\n"]),
%% Compile the code
- ?line {ok, _Mod, BeamCode} = compile:file(ErlFile, [binary]),
+ {ok, _Mod, BeamCode} = compile:file(ErlFile, [binary]),
- %%%%%%%
+%%%%%%%
%% Create and run scripts without emulator flags
%% With shebang
NoArgsBase = Base ++ "_no_args_with_shebang",
NoArgsFile = filename:join([Priv, NoArgsBase]),
- ?line ok = file:write_file(NoArgsFile,
- [Shebang, "\n",
- BeamCode]),
- ?line ok = file:write_file_info(NoArgsFile, OrigFI),
-
- ?line run(Dir, NoArgsBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[]\n"
- "mnesia:[]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
-
- ?line run_with_opts(Dir, "", NoArgsBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[]\n"
- "mnesia:[]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
+ ok = file:write_file(NoArgsFile,
+ [Shebang, "\n",
+ BeamCode]),
+ ok = file:write_file_info(NoArgsFile, OrigFI),
+
+ run(Dir, NoArgsBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[]\n"
+ "mnesia:[]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
+
+ run_with_opts(Dir, "", NoArgsBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[]\n"
+ "mnesia:[]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
%% Without shebang
NoArgsBase2 = Base ++ "_no_args_without_shebang",
NoArgsFile2 = filename:join([Priv, NoArgsBase2]),
- ?line ok = file:write_file(NoArgsFile2,
- ["Something else than shebang!!!", "\n",
- BeamCode]),
- ?line ok = file:write_file_info(NoArgsFile2, OrigFI),
-
- ?line run_with_opts(Dir, "", NoArgsBase2 ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[]\n"
- "mnesia:[]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
+ ok = file:write_file(NoArgsFile2,
+ ["Something else than shebang!!!", "\n",
+ BeamCode]),
+ ok = file:write_file_info(NoArgsFile2, OrigFI),
+
+ run_with_opts(Dir, "", NoArgsBase2 ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[]\n"
+ "mnesia:[]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
%% Plain beam file without header
NoArgsBase3 = Base ++ "_no_args_without_header",
NoArgsFile3 = filename:join([Priv, NoArgsBase3]),
- ?line ok = file:write_file(NoArgsFile3, [BeamCode]),
- ?line ok = file:write_file_info(NoArgsFile3, OrigFI),
-
- ?line run_with_opts(Dir, "", NoArgsBase3 ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[]\n"
- "mnesia:[]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
-
- %%%%%%%
+ ok = file:write_file(NoArgsFile3, [BeamCode]),
+ ok = file:write_file_info(NoArgsFile3, OrigFI),
+
+ run_with_opts(Dir, "", NoArgsBase3 ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[]\n"
+ "mnesia:[]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
+
+%%%%%%%
%% Create and run scripts with emulator flags
%% With shebang
ArgsBase = Base ++ "_args",
ArgsFile = filename:join([Priv, ArgsBase]),
- ?line ok = file:write_file(ArgsFile,
- [Shebang, "\n",
- Mode, "\n",
- Flags, "\n",
- BeamCode]),
- ?line ok = file:write_file_info(ArgsFile, OrigFI),
-
- ?line run(Dir, ArgsBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "nostick:[{nostick,[]}]\n"
- "mnesia:[{mnesia,[\"dir\",\"a/directory\"]},{mnesia,[\"debug\",\"verbose\"]}]\n"
- "ERL_FLAGS=false\n"
- "unknown:[]\n"
- "ExitCode:0">>]),
+ ok = file:write_file(ArgsFile,
+ [Shebang, "\n",
+ Mode, "\n",
+ Flags, "\n",
+ BeamCode]),
+ ok = file:write_file_info(ArgsFile, OrigFI),
+
+ run(Dir, ArgsBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "nostick:[{nostick,[]}]\n"
+ "mnesia:[{mnesia,[\"dir\",\"a/directory\"]},{mnesia,[\"debug\",\"verbose\"]}]\n"
+ "ERL_FLAGS=false\n"
+ "unknown:[]\n"
+ "ExitCode:0">>]),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -381,107 +380,107 @@ beam_script(Config) when is_list(Config) ->
archive_script(Config) when is_list(Config) ->
%% Copy the orig files to priv_dir
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Archive = filename:join([PrivDir, "archive_script.zip"]),
- ?line {ok, _} = zip:create(Archive, ["archive_script"],
- [{compress, []}, {cwd, DataDir}]),
- ?line {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]),
+ {ok, _} = zip:create(Archive, ["archive_script"],
+ [{compress, []}, {cwd, DataDir}]),
+ {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]),
TopDir = filename:join([PrivDir, "archive_script"]),
%% Compile the code
- ?line ok = compile_app(TopDir, "archive_script_dict"),
- ?line ok = compile_app(TopDir, "archive_script_dummy"),
- ?line {ok, MainFiles} = file:list_dir(TopDir),
- ?line ok = compile_files(MainFiles, TopDir, TopDir),
+ ok = compile_app(TopDir, "archive_script_dict"),
+ ok = compile_app(TopDir, "archive_script_dummy"),
+ {ok, MainFiles} = file:list_dir(TopDir),
+ ok = compile_files(MainFiles, TopDir, TopDir),
%% Create the archive
{ok, TopFiles} = file:list_dir(TopDir),
- ?line {ok, {_, ArchiveBin}} = zip:create(Archive, TopFiles,
- [memory, {compress, []}, {cwd, TopDir}]),
+ {ok, {_, ArchiveBin}} = zip:create(Archive, TopFiles,
+ [memory, {compress, []}, {cwd, TopDir}]),
%% Read the source script
OrigFile = filename:join([DataDir, "emulator_flags"]),
{ok, OrigBin} = file:read_file(OrigFile),
- ?line [Shebang, Mode, _Flags | _Source] =
+ [Shebang, Mode, _Flags | _Source] =
string:tokens(binary_to_list(OrigBin), "\n"),
Flags = "%%! -archive_script_dict foo bar"
" -archive_script_dict foo"
" -archive_script_dummy bar",
- ?line {ok, OrigFI} = file:read_file_info(OrigFile),
+ {ok, OrigFI} = file:read_file_info(OrigFile),
- %%%%%%%
+%%%%%%%
%% Create and run scripts without emulator flags
MainBase = "archive_script_main",
MainScript = filename:join([PrivDir, MainBase]),
%% With shebang
- ?line ok = file:write_file(MainScript,
- [Shebang, "\n",
- Flags, "\n",
- ArchiveBin]),
- ?line ok = file:write_file_info(MainScript, OrigFI),
-
- ?line run(PrivDir, MainBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "dict:[{archive_script_dict,[\"foo\",\"bar\"]},{archive_script_dict,[\"foo\"]}]\n"
- "dummy:[{archive_script_dummy,[\"bar\"]}]\n"
- "priv:{ok,<<\"Some private data...\\n\">>}\n"
- "ExitCode:0">>]),
-
- ?line run_with_opts(PrivDir, "", MainBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "dict:[{archive_script_dict,[\"foo\",\"bar\"]},{archive_script_dict,[\"foo\"]}]\n"
- "dummy:[{archive_script_dummy,[\"bar\"]}]\n"
- "priv:{ok,<<\"Some private data...\\n\">>}\n"
- "ExitCode:0">>]),
-
- ?line ok = file:rename(MainScript, MainScript ++ "_with_shebang"),
+ ok = file:write_file(MainScript,
+ [Shebang, "\n",
+ Flags, "\n",
+ ArchiveBin]),
+ ok = file:write_file_info(MainScript, OrigFI),
+
+ run(PrivDir, MainBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "dict:[{archive_script_dict,[\"foo\",\"bar\"]},{archive_script_dict,[\"foo\"]}]\n"
+ "dummy:[{archive_script_dummy,[\"bar\"]}]\n"
+ "priv:{ok,<<\"Some private data...\\n\">>}\n"
+ "ExitCode:0">>]),
+
+ run_with_opts(PrivDir, "", MainBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "dict:[{archive_script_dict,[\"foo\",\"bar\"]},{archive_script_dict,[\"foo\"]}]\n"
+ "dummy:[{archive_script_dummy,[\"bar\"]}]\n"
+ "priv:{ok,<<\"Some private data...\\n\">>}\n"
+ "ExitCode:0">>]),
+
+ ok = file:rename(MainScript, MainScript ++ "_with_shebang"),
%% Without shebang (no flags)
- ?line ok = file:write_file(MainScript,
- ["Something else than shebang!!!", "\n",
- ArchiveBin]),
- ?line ok = file:write_file_info(MainScript, OrigFI),
-
- ?line run_with_opts(PrivDir, "", MainBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "dict:[]\n"
- "dummy:[]\n"
- "priv:{ok,<<\"Some private data...\\n\">>}\n"
- "ExitCode:0">>]),
- ?line ok = file:rename(MainScript, MainScript ++ "_without_shebang"),
+ ok = file:write_file(MainScript,
+ ["Something else than shebang!!!", "\n",
+ ArchiveBin]),
+ ok = file:write_file_info(MainScript, OrigFI),
+
+ run_with_opts(PrivDir, "", MainBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "dict:[]\n"
+ "dummy:[]\n"
+ "priv:{ok,<<\"Some private data...\\n\">>}\n"
+ "ExitCode:0">>]),
+ ok = file:rename(MainScript, MainScript ++ "_without_shebang"),
%% Plain archive without header (no flags)
- ?line ok = file:write_file(MainScript, [ArchiveBin]),
- ?line ok = file:write_file_info(MainScript, OrigFI),
+ ok = file:write_file(MainScript, [ArchiveBin]),
+ ok = file:write_file_info(MainScript, OrigFI),
- ?line run_with_opts(PrivDir, "", MainBase ++ " -arg1 arg2 arg3",
- [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "dict:[]\n"
- "dummy:[]\n"
- "priv:{ok,<<\"Some private data...\\n\">>}\n"
- "ExitCode:0">>]),
- ?line ok = file:rename(MainScript, MainScript ++ "_without_header"),
+ run_with_opts(PrivDir, "", MainBase ++ " -arg1 arg2 arg3",
+ [<<"main:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "dict:[]\n"
+ "dummy:[]\n"
+ "priv:{ok,<<\"Some private data...\\n\">>}\n"
+ "ExitCode:0">>]),
+ ok = file:rename(MainScript, MainScript ++ "_without_header"),
- %%%%%%%
+%%%%%%%
%% Create and run scripts with emulator flags
AltBase = "archive_script_alternate_main",
AltScript = filename:join([PrivDir, AltBase]),
- ?line ok = file:write_file(AltScript,
- [Shebang, "\n",
- Mode, "\n",
- Flags, " -escript main archive_script_main2\n",
- ArchiveBin]),
- ?line ok = file:write_file_info(AltScript, OrigFI),
-
- ?line run(PrivDir, AltBase ++ " -arg1 arg2 arg3",
- [<<"main2:[\"-arg1\",\"arg2\",\"arg3\"]\n"
- "dict:[{archive_script_dict,[\"foo\",\"bar\"]},{archive_script_dict,[\"foo\"]}]\n"
- "dummy:[{archive_script_dummy,[\"bar\"]}]\n"
- "priv:{ok,<<\"Some private data...\\n\">>}\n"
- "ExitCode:0">>]),
+ ok = file:write_file(AltScript,
+ [Shebang, "\n",
+ Mode, "\n",
+ Flags, " -escript main archive_script_main2\n",
+ ArchiveBin]),
+ ok = file:write_file_info(AltScript, OrigFI),
+
+ run(PrivDir, AltBase ++ " -arg1 arg2 arg3",
+ [<<"main2:[\"-arg1\",\"arg2\",\"arg3\"]\n"
+ "dict:[{archive_script_dict,[\"foo\",\"bar\"]},{archive_script_dict,[\"foo\"]}]\n"
+ "dummy:[{archive_script_dummy,[\"bar\"]}]\n"
+ "priv:{ok,<<\"Some private data...\\n\">>}\n"
+ "ExitCode:0">>]),
ok.
@@ -508,21 +507,21 @@ archive_script(Config) when is_list(Config) ->
%%
archive_script_file_access(Config) when is_list(Config) ->
%% Copy the orig files to priv_dir
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
MainMod = "archive_script_file_access",
MainSrc = MainMod ++ ".erl",
MainBeam = MainMod ++ ".beam",
Archive = filename:join([PrivDir, "archive_script_file_access.zip"]),
- ?line {ok, _} = zip:create(Archive, ["archive_script_file_access"],
- [{compress, []}, {cwd, DataDir}]),
- ?line {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]),
+ {ok, _} = zip:create(Archive, ["archive_script_file_access"],
+ [{compress, []}, {cwd, DataDir}]),
+ {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]),
TopDir = filename:join([PrivDir, "archive_script_file_access"]),
%% Compile the code
- ?line ok = compile_files([MainSrc], TopDir, TopDir),
+ ok = compile_files([MainSrc], TopDir, TopDir),
%% First, create a file structure which will be included in the archive:
%%
@@ -630,7 +629,7 @@ compile_app(TopDir, AppName) ->
AppDir = filename:join([TopDir, AppName]),
SrcDir = filename:join([AppDir, "src"]),
OutDir = filename:join([AppDir, "ebin"]),
- ?line {ok, Files} = file:list_dir(SrcDir),
+ {ok, Files} = file:list_dir(SrcDir),
compile_files(Files, SrcDir, OutDir).
compile_files([File | Files], SrcDir, OutDir) ->
@@ -652,10 +651,10 @@ compile_files([], _, _) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
epp(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Dir = filename:absname(Data), %Get rid of trailing slash.
- ?line run(Dir, "factorial_epp 5",
- <<"factorial 5 = 120\nExitCode:0">>),
+ run(Dir, "factorial_epp 5",
+ <<"factorial 5 = 120\nExitCode:0">>),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -695,9 +694,9 @@ create_and_extract(Config) when is_list(Config) ->
%% Verify the compile_source option
file:delete(NewFile),
- ?line ok = escript:create(NewFile, [{source, Source}]),
- ?line {ok, [_, _, _, {source, Source}]} = escript:extract(NewFile, []),
- ?line {ok, [_, _, _, {source, BeamCode2}]} =
+ ok = escript:create(NewFile, [{source, Source}]),
+ {ok, [_, _, _, {source, Source}]} = escript:extract(NewFile, []),
+ {ok, [_, _, _, {source, BeamCode2}]} =
escript:extract(NewFile, [compile_source]),
verify_sections(NewFile, FileInfo,
[{shebang, default},
@@ -709,15 +708,15 @@ create_and_extract(Config) when is_list(Config) ->
prepare_creation(Base, Config) ->
%% Read the source
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OrigFile = filename:join([DataDir,"emulator_flags"]),
- ?line {ok, FileInfo} = file:read_file_info(OrigFile),
+ {ok, FileInfo} = file:read_file_info(OrigFile),
NewFile = filename:join([PrivDir, Base]),
- ?line {ok, [{shebang, default},
- {comment, _},
- {emu_args, EmuArg},
- {source, Source}]} =
+ {ok, [{shebang, default},
+ {comment, _},
+ {emu_args, EmuArg},
+ {source, Source}]} =
escript:extract(OrigFile, []),
%% Compile the code
@@ -725,14 +724,14 @@ prepare_creation(Base, Config) ->
ErlCode = list_to_binary(["\n-module(", Base, ").\n",
"-export([main/1]).\n\n",
Source, "\n\n"]),
- ?line ok = file:write_file(ErlFile, ErlCode),
+ ok = file:write_file(ErlFile, ErlCode),
%% Compile the code
- ?line {ok, _Mod, BeamCode} =
+ {ok, _Mod, BeamCode} =
compile:file(ErlFile, [binary, debug_info]),
%% Create an archive
- ?line {ok, {_, ArchiveBin}} =
+ {ok, {_, ArchiveBin}} =
zip:create("dummy_archive_name",
[{Base ++ ".erl", ErlCode},
{Base ++ ".beam", BeamCode}],
@@ -749,8 +748,8 @@ verify_sections(File, FileInfo, Sections) ->
%% Create
file:delete(File),
- ?line ok = escript:create(File, Sections),
- ?line ok = file:write_file_info(File, FileInfo),
+ ok = escript:create(File, Sections),
+ ok = file:write_file_info(File, FileInfo),
%% Run
Dir = filename:absname(filename:dirname(File)),
@@ -780,21 +779,21 @@ verify_sections(File, FileInfo, Sections) ->
Expected = <<ExpectedMain/binary, ExpectedOutput/binary>>,
case HasArg(shebang) of
true ->
- ?line run(Dir, InputArgs, [Expected]);
+ run(Dir, InputArgs, [Expected]);
false ->
- ?line run_with_opts(Dir, [], InputArgs, [Expected])
+ run_with_opts(Dir, [], InputArgs, [Expected])
end,
%% Verify
- ?line {ok, Bin} = escript:create(binary, Sections),
- ?line {ok, Read} = file:read_file(File),
- ?line Bin = Read, % Assert
+ {ok, Bin} = escript:create(binary, Sections),
+ {ok, Read} = file:read_file(File),
+ Bin = Read, % Assert
Normalized = normalize_sections(Sections),
- ?line {ok, Extracted} = escript:extract(File, []),
+ {ok, Extracted} = escript:extract(File, []),
io:format("Normalized; ~p\n", [Normalized]),
io:format("Extracted ; ~p\n", [Extracted]),
- ?line Normalized = Extracted, % Assert
+ Normalized = Extracted, % Assert
ok.
normalize_sections(Sections) ->
@@ -806,27 +805,27 @@ normalize_sections(Sections) ->
end
end,
case lists:map(AtomToTuple, [{K, V} || {K, V} <- Sections, V =/= undefined]) of
- [{shebang, Shebang} | Rest] ->
- [{shebang, Shebang} |
- case Rest of
- [{comment, Comment} | Rest2] ->
- [{comment, Comment} |
- case Rest2 of
- [{emu_args, EmuArgs}, Body] ->
- [{emu_args, EmuArgs}, Body];
- [Body] ->
- [{emu_args, undefined}, Body]
- end
- ];
- [{emu_args, EmuArgs}, Body] ->
- [{comment, undefined}, {emu_args, EmuArgs}, Body];
- [Body] ->
- [{comment, undefined}, {emu_args, undefined}, Body]
- end
- ];
- [Body] ->
- [{shebang, undefined}, {comment, undefined}, {emu_args, undefined}, Body]
- end.
+ [{shebang, Shebang} | Rest] ->
+ [{shebang, Shebang} |
+ case Rest of
+ [{comment, Comment} | Rest2] ->
+ [{comment, Comment} |
+ case Rest2 of
+ [{emu_args, EmuArgs}, Body] ->
+ [{emu_args, EmuArgs}, Body];
+ [Body] ->
+ [{emu_args, undefined}, Body]
+ end
+ ];
+ [{emu_args, EmuArgs}, Body] ->
+ [{comment, undefined}, {emu_args, EmuArgs}, Body];
+ [Body] ->
+ [{comment, undefined}, {emu_args, undefined}, Body]
+ end
+ ];
+ [Body] ->
+ [{shebang, undefined}, {comment, undefined}, {emu_args, undefined}, Body]
+ end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -846,36 +845,36 @@ foldl(Config) when is_list(Config) ->
%% Get line numbers and the file attribute right
SourceFile = NewFile ++ ".erl",
<<_:1/binary, ErlCode2/binary>> = ErlCode,
- ?line ok = file:write_file(SourceFile, ErlCode2),
- ?line {ok, _Mod, BeamCode} =
+ ok = file:write_file(SourceFile, ErlCode2),
+ {ok, _Mod, BeamCode} =
compile:file(SourceFile, [binary, debug_info]),
%% Verify source script
- ?line ok = escript:create(SourceFile, [{source, ErlCode}]),
- ?line {ok, [{".", _, BeamCode2}]}
+ ok = escript:create(SourceFile, [{source, ErlCode}]),
+ {ok, [{".", _, BeamCode2}]}
= escript_foldl(Collect, [], SourceFile),
- ?line {ok, Abstr} = beam_lib:chunks(BeamCode, [abstract_code]),
- ?line {ok, Abstr2} = beam_lib:chunks(BeamCode2, [abstract_code]),
+ {ok, Abstr} = beam_lib:chunks(BeamCode, [abstract_code]),
+ {ok, Abstr2} = beam_lib:chunks(BeamCode2, [abstract_code]),
%% io:format("abstr1=~p\n", [Abstr]),
%% io:format("abstr2=~p\n", [Abstr2]),
- ?line Abstr = Abstr2, % Assert
+ Abstr = Abstr2, % Assert
%% Verify beam script
- ?line ok = escript:create(NewFile, [{beam, BeamCode}]),
- ?line {ok, [{".", _, BeamCode}]}
+ ok = escript:create(NewFile, [{beam, BeamCode}]),
+ {ok, [{".", _, BeamCode}]}
= escript_foldl(Collect, [], NewFile),
%% Verify archive scripts
- ?line ok = escript:create(NewFile, [{archive, ArchiveBin}]),
- ?line {ok, [{BeamBase, #file_info{}, _},
- {ErlBase, #file_info{}, _}]}
+ ok = escript:create(NewFile, [{archive, ArchiveBin}]),
+ {ok, [{BeamBase, #file_info{}, _},
+ {ErlBase, #file_info{}, _}]}
= escript_foldl(Collect, [], NewFile),
ArchiveFiles = [{ErlBase, ErlCode}, {BeamBase, BeamCode}],
- ?line ok = escript:create(NewFile, [{archive, ArchiveFiles, []}]),
- ?line {ok, [{BeamBase, _, _},
- {ErlBase, _, _}]}
+ ok = escript:create(NewFile, [{archive, ArchiveFiles, []}]),
+ {ok, [{BeamBase, _, _},
+ {ErlBase, _, _}]}
= escript_foldl(Collect, [], NewFile),
ok.
@@ -909,7 +908,7 @@ emulate_escript_foldl(Fun, Acc, File) ->
end.
unicode(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Dir = filename:absname(Data), %Get rid of trailing slash.
run(Dir, "unicode1",
[<<"escript: exception error: an error occurred when evaluating"
@@ -928,12 +927,12 @@ unicode(Config) when is_list(Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
overflow(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Dir = filename:absname(Data), %Get rid of trailing slash.
- ?line run(Dir, "arg_overflow",
- [<<"ExitCode:0">>]),
- ?line run(Dir, "linebuf_overflow",
- [<<"ExitCode:0">>]),
+ run(Dir, "arg_overflow",
+ [<<"ExitCode:0">>]),
+ run(Dir, "linebuf_overflow",
+ [<<"ExitCode:0">>]),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -968,7 +967,7 @@ do_run(Dir, Cmd, Expected0) ->
Actual ->
io:format("Expected: ~p\n", [Expected]),
io:format("Actual: ~p\n", [Actual]),
- ?t:fail()
+ ct:fail(failed)
end
end.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict.erl
index 40758e3258..fc33d84445 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_app.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_app.erl
index a5bb5fa077..53174f2c6f 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_app.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_sup.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_sup.erl
index 8ed41a27ce..b1ab4b0597 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_sup.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dict/src/archive_script_dict_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy.erl
index a6685e8189..117ced4dc7 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_app.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_app.erl
index bbfdda7741..9d751615fc 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_app.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_app.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_sup.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_sup.erl
index 389d485f6d..a38958d004 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_sup.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_dummy/src/archive_script_dummy_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main.erl
index 5ea114f25d..3b005e8aff 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl
index 6270a6bb60..1dc76b3dfa 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl b/lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl
index 6c3ff1c463..7cffacdf97 100644
--- a/lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl
+++ b/lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/ets_SUITE.erl b/lib/stdlib/test/ets_SUITE.erl
index 1ddc4e7868..b02d17bdb6 100644
--- a/lib/stdlib/test/ets_SUITE.erl
+++ b/lib/stdlib/test/ets_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,7 +34,7 @@
-export([ match1/1, match2/1, match_object/1, match_object2/1]).
-export([ dups/1, misc1/1, safe_fixtable/1, info/1, tab2list/1]).
-export([ tab2file/1, tab2file2/1, tabfile_ext1/1,
- tabfile_ext2/1, tabfile_ext3/1, tabfile_ext4/1, badfile/1]).
+ tabfile_ext2/1, tabfile_ext3/1, tabfile_ext4/1, badfile/1]).
-export([ heavy_lookup/1, heavy_lookup_element/1, heavy_concurrent/1]).
-export([ lookup_element_mult/1]).
-export([]).
@@ -43,8 +43,6 @@
t_delete_all_objects/1, t_insert_list/1, t_test_ms/1,
t_select_delete/1,t_ets_dets/1]).
--export([do_lookup/2, do_lookup_element/3]).
-
-export([ordered/1, ordered_match/1, interface_equality/1,
fixtable_next/1, fixtable_insert/1, rename/1, rename_unnamed/1, evil_rename/1,
update_element/1, update_counter/1, evil_update_counter/1, partly_bound/1, match_heavy/1]).
@@ -86,7 +84,7 @@
%% Convenience for manual testing
-export([random_test/0]).
-% internal exports
+%% internal exports
-export([dont_make_worse_sub/0, make_better_sub1/0, make_better_sub2/0]).
-export([t_repair_continuation_do/1, t_bucket_disappears_do/1,
select_fail_do/1, whitebox_1/1, whitebox_2/1, t_delete_all_objects_do/1,
@@ -109,29 +107,27 @@
-export([t_select_reverse/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--define(m(A,B), ?line assert_eq(A,B)).
+-define(m(A,B), assert_eq(A,B)).
init_per_testcase(Case, Config) ->
- Seed = {S1,S2,S3} = random:seed0(), %now(),
- random:seed(S1,S2,S3),
- io:format("*** SEED: ~p ***\n", [Seed]),
+ rand:seed(exsplus),
+ io:format("*** SEED: ~p ***\n", [rand:export_seed()]),
start_spawn_logger(),
wait_for_test_procs(), %% Ensure previous case cleaned up
- Dog=test_server:timetrap(test_server:minutes(20)),
put('__ETS_TEST_CASE__', Case),
- [{watchdog, Dog}, {test_case, Case} | Config].
+ [{test_case, Case} | Config].
+
+end_per_testcase(_Func, _Config) ->
+ wait_for_test_procs(true).
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- wait_for_test_procs(true),
- test_server:timetrap_cancel(Dog).
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[{group, new}, {group, insert}, {group, lookup},
@@ -162,7 +158,7 @@ all() ->
otp_9423,
ets_all,
take,
-
+
memory_check_summary]. % MUST BE LAST
groups() ->
@@ -203,10 +199,10 @@ end_per_suite(_Config) ->
ok.
init_per_group(_GroupName, Config) ->
- Config.
+ Config.
end_per_group(_GroupName, Config) ->
- Config.
+ Config.
%% Test that we did not have "too many" failed verify_etsmem()'s
%% in the test suite.
@@ -216,7 +212,7 @@ end_per_group(_GroupName, Config) ->
memory_check_summary(_Config) ->
case whereis(ets_test_spawn_logger) of
undefined ->
- ?t:fail("No spawn logger exist");
+ ct:fail("No spawn logger exist");
_ ->
ets_test_spawn_logger ! {self(), get_failed_memchecks},
receive {get_failed_memchecks, FailedMemchecks} -> ok end,
@@ -232,45 +228,39 @@ memory_check_summary(_Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-t_bucket_disappears(suite) ->
- [];
-t_bucket_disappears(doc) ->
- ["Test that a disappearing bucket during select of a non-fixed table works."];
+%% Test that a disappearing bucket during select of a non-fixed table works.
t_bucket_disappears(Config) when is_list(Config) ->
repeat_for_opts(t_bucket_disappears_do).
t_bucket_disappears_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line ets_new(abcd, [named_table, public, {keypos, 2} | Opts]),
- ?line ets:insert(abcd, {abcd,1,2}),
- ?line ets:insert(abcd, {abcd,2,2}),
- ?line ets:insert(abcd, {abcd,3,2}),
- ?line {_, Cont} = ets:select(abcd, [{{'_', '$1', '_'},
- [{'<', '$1', {const, 10}}],
- ['$1']}], 1),
- ?line ets:delete(abcd, 2),
- ?line ets:select(Cont),
- ?line true = ets:delete(abcd),
- ?line verify_etsmem(EtsMem).
-
-
-t_match_spec_run(suite) ->
- [];
-t_match_spec_run(doc) ->
- ["Check ets:match_spec_run/2."];
+ EtsMem = etsmem(),
+ ets_new(abcd, [named_table, public, {keypos, 2} | Opts]),
+ ets:insert(abcd, {abcd,1,2}),
+ ets:insert(abcd, {abcd,2,2}),
+ ets:insert(abcd, {abcd,3,2}),
+ {_, Cont} = ets:select(abcd, [{{'_', '$1', '_'},
+ [{'<', '$1', {const, 10}}],
+ ['$1']}], 1),
+ ets:delete(abcd, 2),
+ ets:select(Cont),
+ true = ets:delete(abcd),
+ verify_etsmem(EtsMem).
+
+
+%% Check ets:match_spec_run/2.
t_match_spec_run(Config) when is_list(Config) ->
init_externals(),
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
t_match_spec_run_test([{1},{2},{3}],
[{{'$1'},[{'>','$1',1}],['$1']}],
[2,3]),
- ?line Huge = [{X} || X <- lists:seq(1,2500)],
- ?line L = lists:seq(2476,2500),
+ Huge = [{X} || X <- lists:seq(1,2500)],
+ L = lists:seq(2476,2500),
t_match_spec_run_test(Huge, [{{'$1'},[{'>','$1',2475}],['$1']}], L),
- ?line L2 = [{X*16#FFFFFFF} || X <- L],
+ L2 = [{X*16#FFFFFFF} || X <- L],
t_match_spec_run_test(Huge,
[{{'$1'}, [{'>','$1',2475}], [{{{'*','$1',16#FFFFFFF}}}]}],
L2),
@@ -347,7 +337,7 @@ t_match_spec_run(Config) when is_list(Config) ->
end,
test_terms(Fun, skip_refc_check),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
t_match_spec_run_test(List, MS, Result) ->
@@ -375,14 +365,12 @@ t_match_spec_run_test(List, MS, Result) ->
erlang:trace(Tracee, true, [call]),
Tracee ! start,
TRes = ms_tracer_collect(Tracee, MonRef, []),
- %erlang:trace(Tracee, false, [call]),
- %Tracee ! stop,
case TRes of
SRes -> ok;
_ ->
io:format("TRACE MATCH FAILED\n"),
io:format("Input = ~p\nMST = ~p\nExpected = ~p\nGot = ~p\n", [List, MST, SRes, TRes]),
- ?t:fail("TRACE MATCH FAILED")
+ ct:fail("TRACE MATCH FAILED")
end,
ok.
@@ -391,32 +379,27 @@ t_match_spec_run_test(List, MS, Result) ->
ms_tracer_collect(Tracee, Ref, Acc) ->
receive
{trace, Tracee, call, _Args, [Msg]} ->
- %io:format("trace Args=~p Msg=~p\n", [_Args, Msg]),
ms_tracer_collect(Tracee, Ref, [Msg | Acc]);
{'DOWN', Ref, process, Tracee, _} ->
- %io:format("monitor DOWN for ~p\n", [Tracee]),
TDRef = erlang:trace_delivered(Tracee),
ms_tracer_collect(Tracee, TDRef, Acc);
{trace_delivered, Tracee, Ref} ->
- %%io:format("trace delivered for ~p\n", [Tracee]),
lists:sort(Acc);
Other ->
io:format("Unexpected message = ~p\n", [Other]),
- ?t:fail("Unexpected tracer msg")
+ ct:fail("Unexpected tracer msg")
end.
ms_tracee(Parent, CallArgList) ->
- %io:format("ms_tracee ~p started with ArgList = ~p\n", [self(), CallArgList]),
Parent ! {self(), ready},
receive start -> ok end,
lists:foreach(fun(Args) ->
erlang:apply(?MODULE, ms_tracee_dummy, tuple_to_list(Args))
end, CallArgList).
- %%receive stop -> ok end.
@@ -431,189 +414,181 @@ ms_clause_ets_to_trace({Head, Guard, Body}) ->
assert_eq(A,A) -> ok;
assert_eq(A,B) ->
io:format("FAILED MATCH:\n~p\n =/=\n~p\n",[A,B]),
- ?t:fail("assert_eq failed").
+ ct:fail("assert_eq failed").
-t_repair_continuation(suite) ->
- [];
-t_repair_continuation(doc) ->
- ["Check ets:repair_continuation/2."];
+%% Test ets:repair_continuation/2.
t_repair_continuation(Config) when is_list(Config) ->
repeat_for_opts(t_repair_continuation_do).
t_repair_continuation_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line MS = [{'_',[],[true]}],
- ?line MS2 = [{{{'$1','_'},'_'},[],['$1']}],
+ EtsMem = etsmem(),
+ MS = [{'_',[],[true]}],
+ MS2 = [{{{'$1','_'},'_'},[],['$1']}],
(fun() ->
- ?line T = ets_new(x,[ordered_set|Opts]),
- ?line F = fun(0,_)->ok;(N,F) -> ets:insert(T,{N,N}), F(N-1,F) end,
- ?line F(1000,F),
- ?line {_,C} = ets:select(T,MS,5),
- ?line C2 = erlang:setelement(5,C,<<>>),
- ?line {'EXIT',{badarg,_}} = (catch ets:select(C2)),
- ?line C3 = ets:repair_continuation(C2,MS),
- ?line {[true,true,true,true,true],_} = ets:select(C3),
- ?line {[true,true,true,true,true],_} = ets:select(C),
- ?line true = ets:delete(T)
+ T = ets_new(x,[ordered_set|Opts]),
+ F = fun(0,_)->ok;(N,F) -> ets:insert(T,{N,N}), F(N-1,F) end,
+ F(1000,F),
+ {_,C} = ets:select(T,MS,5),
+ C2 = erlang:setelement(5,C,<<>>),
+ {'EXIT',{badarg,_}} = (catch ets:select(C2)),
+ C3 = ets:repair_continuation(C2,MS),
+ {[true,true,true,true,true],_} = ets:select(C3),
+ {[true,true,true,true,true],_} = ets:select(C),
+ true = ets:delete(T)
end)(),
(fun() ->
- ?line T = ets_new(x,[ordered_set|Opts]),
- ?line F = fun(0,_)->ok;(N,F) -> ets:insert(T,{N,N}), F(N-1,F) end,
- ?line F(1000,F),
- ?line {_,C} = ets:select(T,MS,1001),
- ?line C = '$end_of_table',
- ?line C3 = ets:repair_continuation(C,MS),
- ?line '$end_of_table' = ets:select(C3),
- ?line '$end_of_table' = ets:select(C),
- ?line true = ets:delete(T)
+ T = ets_new(x,[ordered_set|Opts]),
+ F = fun(0,_)->ok;(N,F) -> ets:insert(T,{N,N}), F(N-1,F) end,
+ F(1000,F),
+ {_,C} = ets:select(T,MS,1001),
+ C = '$end_of_table',
+ C3 = ets:repair_continuation(C,MS),
+ '$end_of_table' = ets:select(C3),
+ '$end_of_table' = ets:select(C),
+ true = ets:delete(T)
end)(),
-
+
(fun() ->
- ?line T = ets_new(x,[ordered_set|Opts]),
- ?line F = fun(0,_)->ok;(N,F) ->
- ets:insert(T,{integer_to_list(N),N}),
- F(N-1,F)
- end,
- ?line F(1000,F),
- ?line {_,C} = ets:select(T,MS,5),
- ?line C2 = erlang:setelement(5,C,<<>>),
- ?line {'EXIT',{badarg,_}} = (catch ets:select(C2)),
- ?line C3 = ets:repair_continuation(C2,MS),
- ?line {[true,true,true,true,true],_} = ets:select(C3),
- ?line {[true,true,true,true,true],_} = ets:select(C),
- ?line true = ets:delete(T)
+ T = ets_new(x,[ordered_set|Opts]),
+ F = fun(0,_)->ok;(N,F) ->
+ ets:insert(T,{integer_to_list(N),N}),
+ F(N-1,F)
+ end,
+ F(1000,F),
+ {_,C} = ets:select(T,MS,5),
+ C2 = erlang:setelement(5,C,<<>>),
+ {'EXIT',{badarg,_}} = (catch ets:select(C2)),
+ C3 = ets:repair_continuation(C2,MS),
+ {[true,true,true,true,true],_} = ets:select(C3),
+ {[true,true,true,true,true],_} = ets:select(C),
+ true = ets:delete(T)
end)(),
(fun() ->
- ?line T = ets_new(x,[ordered_set|Opts]),
- ?line F = fun(0,_)->ok;(N,F) ->
- ets:insert(T,{{integer_to_list(N),N},N}),
- F(N-1,F)
- end,
- ?line F(1000,F),
- ?line {_,C} = ets:select(T,MS2,5),
- ?line C2 = erlang:setelement(5,C,<<>>),
- ?line {'EXIT',{badarg,_}} = (catch ets:select(C2)),
- ?line C3 = ets:repair_continuation(C2,MS2),
- ?line {[_,_,_,_,_],_} = ets:select(C3),
- ?line {[_,_,_,_,_],_} = ets:select(C),
- ?line true = ets:delete(T)
+ T = ets_new(x,[ordered_set|Opts]),
+ F = fun(0,_)->ok;(N,F) ->
+ ets:insert(T,{{integer_to_list(N),N},N}),
+ F(N-1,F)
+ end,
+ F(1000,F),
+ {_,C} = ets:select(T,MS2,5),
+ C2 = erlang:setelement(5,C,<<>>),
+ {'EXIT',{badarg,_}} = (catch ets:select(C2)),
+ C3 = ets:repair_continuation(C2,MS2),
+ {[_,_,_,_,_],_} = ets:select(C3),
+ {[_,_,_,_,_],_} = ets:select(C),
+ true = ets:delete(T)
end)(),
-
+
(fun() ->
- ?line T = ets_new(x,[set|Opts]),
- ?line F = fun(0,_)->ok;(N,F) ->
- ets:insert(T,{N,N}),
- F(N-1,F)
- end,
- ?line F(1000,F),
- ?line {_,C} = ets:select(T,MS,5),
- ?line C2 = erlang:setelement(4,C,<<>>),
- ?line {'EXIT',{badarg,_}} = (catch ets:select(C2)),
- ?line C3 = ets:repair_continuation(C2,MS),
- ?line {[true,true,true,true,true],_} = ets:select(C3),
- ?line {[true,true,true,true,true],_} = ets:select(C),
- ?line true = ets:delete(T)
+ T = ets_new(x,[set|Opts]),
+ F = fun(0,_)->ok;(N,F) ->
+ ets:insert(T,{N,N}),
+ F(N-1,F)
+ end,
+ F(1000,F),
+ {_,C} = ets:select(T,MS,5),
+ C2 = erlang:setelement(4,C,<<>>),
+ {'EXIT',{badarg,_}} = (catch ets:select(C2)),
+ C3 = ets:repair_continuation(C2,MS),
+ {[true,true,true,true,true],_} = ets:select(C3),
+ {[true,true,true,true,true],_} = ets:select(C),
+ true = ets:delete(T)
end)(),
(fun() ->
- ?line T = ets_new(x,[set|Opts]),
- ?line F = fun(0,_)->ok;(N,F) ->
- ets:insert(T,{integer_to_list(N),N}),
- F(N-1,F)
- end,
- ?line F(1000,F),
- ?line {_,C} = ets:select(T,MS,5),
- ?line C2 = erlang:setelement(4,C,<<>>),
- ?line {'EXIT',{badarg,_}} = (catch ets:select(C2)),
- ?line C3 = ets:repair_continuation(C2,MS),
- ?line {[true,true,true,true,true],_} = ets:select(C3),
- ?line {[true,true,true,true,true],_} = ets:select(C),
- ?line true = ets:delete(T)
+ T = ets_new(x,[set|Opts]),
+ F = fun(0,_)->ok;(N,F) ->
+ ets:insert(T,{integer_to_list(N),N}),
+ F(N-1,F)
+ end,
+ F(1000,F),
+ {_,C} = ets:select(T,MS,5),
+ C2 = erlang:setelement(4,C,<<>>),
+ {'EXIT',{badarg,_}} = (catch ets:select(C2)),
+ C3 = ets:repair_continuation(C2,MS),
+ {[true,true,true,true,true],_} = ets:select(C3),
+ {[true,true,true,true,true],_} = ets:select(C),
+ true = ets:delete(T)
end)(),
(fun() ->
- ?line T = ets_new(x,[bag|Opts]),
- ?line F = fun(0,_)->ok;(N,F) ->
- ets:insert(T,{integer_to_list(N),N}),
- F(N-1,F)
- end,
- ?line F(1000,F),
- ?line {_,C} = ets:select(T,MS,5),
- ?line C2 = erlang:setelement(4,C,<<>>),
- ?line {'EXIT',{badarg,_}} = (catch ets:select(C2)),
- ?line C3 = ets:repair_continuation(C2,MS),
- ?line {[true,true,true,true,true],_} = ets:select(C3),
- ?line {[true,true,true,true,true],_} = ets:select(C),
- ?line true = ets:delete(T)
+ T = ets_new(x,[bag|Opts]),
+ F = fun(0,_)->ok;(N,F) ->
+ ets:insert(T,{integer_to_list(N),N}),
+ F(N-1,F)
+ end,
+ F(1000,F),
+ {_,C} = ets:select(T,MS,5),
+ C2 = erlang:setelement(4,C,<<>>),
+ {'EXIT',{badarg,_}} = (catch ets:select(C2)),
+ C3 = ets:repair_continuation(C2,MS),
+ {[true,true,true,true,true],_} = ets:select(C3),
+ {[true,true,true,true,true],_} = ets:select(C),
+ true = ets:delete(T)
end)(),
(fun() ->
- ?line T = ets_new(x,[duplicate_bag|Opts]),
- ?line F = fun(0,_)->ok;(N,F) ->
- ets:insert(T,{integer_to_list(N),N}),
- F(N-1,F)
- end,
- ?line F(1000,F),
- ?line {_,C} = ets:select(T,MS,5),
- ?line C2 = erlang:setelement(4,C,<<>>),
- ?line {'EXIT',{badarg,_}} = (catch ets:select(C2)),
- ?line C3 = ets:repair_continuation(C2,MS),
- ?line {[true,true,true,true,true],_} = ets:select(C3),
- ?line {[true,true,true,true,true],_} = ets:select(C),
- ?line true = ets:delete(T)
+ T = ets_new(x,[duplicate_bag|Opts]),
+ F = fun(0,_)->ok;(N,F) ->
+ ets:insert(T,{integer_to_list(N),N}),
+ F(N-1,F)
+ end,
+ F(1000,F),
+ {_,C} = ets:select(T,MS,5),
+ C2 = erlang:setelement(4,C,<<>>),
+ {'EXIT',{badarg,_}} = (catch ets:select(C2)),
+ C3 = ets:repair_continuation(C2,MS),
+ {[true,true,true,true,true],_} = ets:select(C3),
+ {[true,true,true,true,true],_} = ets:select(C),
+ true = ets:delete(T)
end)(),
- ?line false = ets:is_compiled_ms(<<>>),
- ?line true = ets:is_compiled_ms(ets:match_spec_compile(MS)),
- ?line verify_etsmem(EtsMem).
+ false = ets:is_compiled_ms(<<>>),
+ true = ets:is_compiled_ms(ets:match_spec_compile(MS)),
+ verify_etsmem(EtsMem).
-default(doc) ->
- ["Check correct default vaules of a new ets table"];
-default(suite) -> [];
+%% Test correct default vaules of a new ets table.
default(Config) when is_list(Config) ->
%% Default should be set,protected
- ?line EtsMem = etsmem(),
- ?line Def = ets_new(def,[]),
- ?line set = ets:info(Def,type),
- ?line protected = ets:info(Def,protection),
+ EtsMem = etsmem(),
+ Def = ets_new(def,[]),
+ set = ets:info(Def,type),
+ protected = ets:info(Def,protection),
Compressed = erlang:system_info(ets_always_compress),
- ?line Compressed = ets:info(Def,compressed),
+ Compressed = ets:info(Def,compressed),
Self = self(),
- ?line Self = ets:info(Def,owner),
- ?line none = ets:info(Def, heir),
- ?line false = ets:info(Def,named_table),
- ?line ets:delete(Def),
- ?line verify_etsmem(EtsMem).
-
-select_fail(doc) ->
- ["Test that select fails even if nothing can match"];
-select_fail(suite) ->
- [];
+ Self = ets:info(Def,owner),
+ none = ets:info(Def, heir),
+ false = ets:info(Def,named_table),
+ ets:delete(Def),
+ verify_etsmem(EtsMem).
+
+%% Test that select fails even if nothing can match.
select_fail(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(select_fail_do, [all_types,write_concurrency]),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
select_fail_do(Opts) ->
- ?line T = ets_new(x,Opts),
- ?line ets:insert(T,{a,a}),
- ?line case (catch
- ets:select(T,[{{a,'_'},[],[{snuffla}]}])) of
- {'EXIT',{badarg,_}} ->
- ok;
- Else0 ->
- exit({type,ets:info(T,type),
- expected,'EXIT',got,Else0})
- end,
- ?line case (catch
- ets:select(T,[{{b,'_'},[],[{snuffla}]}])) of
- {'EXIT',{badarg,_}} ->
- ok;
- Else1 ->
- exit({type,ets:info(T,type),
- expected,'EXIT',got,Else1})
- end,
- ?line ets:delete(T).
-
+ T = ets_new(x,Opts),
+ ets:insert(T,{a,a}),
+ case (catch
+ ets:select(T,[{{a,'_'},[],[{snuffla}]}])) of
+ {'EXIT',{badarg,_}} ->
+ ok;
+ Else0 ->
+ exit({type,ets:info(T,type),
+ expected,'EXIT',got,Else0})
+ end,
+ case (catch
+ ets:select(T,[{{b,'_'},[],[{snuffla}]}])) of
+ {'EXIT',{badarg,_}} ->
+ ok;
+ Else1 ->
+ exit({type,ets:info(T,type),
+ expected,'EXIT',got,Else1})
+ end,
+ ets:delete(T).
+
-define(S(T),ets:info(T,memory)).
-define(TAB_STRUCT_SZ, erts_debug:get_internal_state('DbTable_words')).
@@ -622,218 +597,180 @@ select_fail_do(Opts) ->
%% The hardcoded expected memory sizes (in words) are the ones we expect on:
%% SunOS5.8, 32-bit, non smp, private heap
%%
-memory(doc) -> ["Whitebox test of ets:info(X,memory)"];
-memory(suite) -> [];
+
+%% Whitebox test of ets:info(X, memory).
memory(Config) when is_list(Config) ->
- ?line ok = chk_normal_tab_struct_size(),
+ ok = chk_normal_tab_struct_size(),
repeat_for_opts(memory_do,[compressed]),
- ?line catch erts_debug:set_internal_state(available_internal_state, false).
+ catch erts_debug:set_internal_state(available_internal_state, false).
memory_do(Opts) ->
- ?line L = [T1,T2,T3,T4] = fill_sets_int(1000,Opts),
+ L = [T1,T2,T3,T4] = fill_sets_int(1000,Opts),
XR1 = case mem_mode(T1) of
- {normal,_} -> {13836,13046,13046,13052}; %{13862,13072,13072,13078};
- {compressed,4} -> {11041,10251,10251,10252}; %{11067,10277,10277,10278};
- {compressed,8} -> {10050,9260,9260,9260} %{10076,9286,9286,9286}
+ {normal,_} -> {13836,13046,13046,13052}; %{13862,13072,13072,13078};
+ {compressed,4} -> {11041,10251,10251,10252}; %{11067,10277,10277,10278};
+ {compressed,8} -> {10050,9260,9260,9260} %{10076,9286,9286,9286}
end,
- ?line XRes1 = adjust_xmem(L, XR1),
- ?line Res1 = {?S(T1),?S(T2),?S(T3),?S(T4)},
- ?line lists:foreach(fun(T) ->
- Before = ets:info(T,size),
- Key = 2, %894, %%ets:first(T),
- Objs = ets:lookup(T,Key),
- ?line ets:delete(T,Key),
- io:format("deleted key ~p from ~p changed size ~p to ~p: ~p\n",
- [Key, ets:info(T,type), Before, ets:info(T,size), Objs])
+ XRes1 = adjust_xmem(L, XR1),
+ Res1 = {?S(T1),?S(T2),?S(T3),?S(T4)},
+ lists:foreach(fun(T) ->
+ Before = ets:info(T,size),
+ Key = 2, %894, %%ets:first(T),
+ Objs = ets:lookup(T,Key),
+ ets:delete(T,Key),
+ io:format("deleted key ~p from ~p changed size ~p to ~p: ~p\n",
+ [Key, ets:info(T,type), Before, ets:info(T,size), Objs])
end,
L),
XR2 = case mem_mode(T1) of
- {normal,_} -> {13826,13037,13028,13034}; %{13852,13063,13054,13060};
- {compressed,4} -> {11031,10242,10233,10234}; %{11057,10268,10259,10260};
- {compressed,8} -> {10040,9251,9242,9242} %10066,9277,9268,9268}
+ {normal,_} -> {13826,13037,13028,13034}; %{13852,13063,13054,13060};
+ {compressed,4} -> {11031,10242,10233,10234}; %{11057,10268,10259,10260};
+ {compressed,8} -> {10040,9251,9242,9242} %10066,9277,9268,9268}
end,
- ?line XRes2 = adjust_xmem(L, XR2),
- ?line Res2 = {?S(T1),?S(T2),?S(T3),?S(T4)},
- ?line lists:foreach(fun(T) ->
- Before = ets:info(T,size),
- Key = 4, %802, %ets:first(T),
- Objs = ets:lookup(T,Key),
- ?line ets:match_delete(T,{Key,'_'}),
- io:format("match_deleted key ~p from ~p changed size ~p to ~p: ~p\n",
- [Key, ets:info(T,type), Before, ets:info(T,size), Objs])
- end,
- L),
+ XRes2 = adjust_xmem(L, XR2),
+ Res2 = {?S(T1),?S(T2),?S(T3),?S(T4)},
+ lists:foreach(fun(T) ->
+ Before = ets:info(T,size),
+ Key = 4, %802, %ets:first(T),
+ Objs = ets:lookup(T,Key),
+ ets:match_delete(T,{Key,'_'}),
+ io:format("match_deleted key ~p from ~p changed size ~p to ~p: ~p\n",
+ [Key, ets:info(T,type), Before, ets:info(T,size), Objs])
+ end,
+ L),
XR3 = case mem_mode(T1) of
- {normal,_} -> {13816,13028,13010,13016}; %{13842,13054,13036,13042};
- {compressed,4} -> {11021,10233,10215,10216}; %{11047,10259,10241,10242};
- {compressed,8} -> {10030,9242,9224,9224} %{10056,9268,9250,9250}
+ {normal,_} -> {13816,13028,13010,13016}; %{13842,13054,13036,13042};
+ {compressed,4} -> {11021,10233,10215,10216}; %{11047,10259,10241,10242};
+ {compressed,8} -> {10030,9242,9224,9224} %{10056,9268,9250,9250}
end,
- ?line XRes3 = adjust_xmem(L, XR3),
- ?line Res3 = {?S(T1),?S(T2),?S(T3),?S(T4)},
- ?line lists:foreach(fun(T) ->
- ?line ets:delete_all_objects(T)
+ XRes3 = adjust_xmem(L, XR3),
+ Res3 = {?S(T1),?S(T2),?S(T3),?S(T4)},
+ lists:foreach(fun(T) ->
+ ets:delete_all_objects(T)
end,
L),
- ?line XRes4 = adjust_xmem(L, {50,260,260,260}), %{76,286,286,286}),
- ?line Res4 = {?S(T1),?S(T2),?S(T3),?S(T4)},
+ XRes4 = adjust_xmem(L, {50,260,260,260}), %{76,286,286,286}),
+ Res4 = {?S(T1),?S(T2),?S(T3),?S(T4)},
lists:foreach(fun(T) ->
- ?line ets:delete(T)
+ ets:delete(T)
end,
L),
- ?line L2 = [T11,T12,T13,T14] = fill_sets_int(1000),
- ?line lists:foreach(fun(T) ->
- ?line ets:select_delete(T,[{'_',[],[true]}])
+ L2 = [T11,T12,T13,T14] = fill_sets_int(1000),
+ lists:foreach(fun(T) ->
+ ets:select_delete(T,[{'_',[],[true]}])
end,
L2),
- ?line XRes5 = adjust_xmem(L2, {50,260,260,260}), %{76,286,286,286}),
- ?line Res5 = {?S(T11),?S(T12),?S(T13),?S(T14)},
- ?line io:format("XRes1 = ~p~n"
- " Res1 = ~p~n~n"
- "XRes2 = ~p~n"
- " Res2 = ~p~n~n"
- "XRes3 = ~p~n"
- " Res3 = ~p~n~n"
- "XRes4 = ~p~n"
- " Res4 = ~p~n~n"
- "XRes5 = ~p~n"
- " Res5 = ~p~n~n",
- [XRes1, Res1,
- XRes2, Res2,
- XRes3, Res3,
- XRes4, Res4,
- XRes5, Res5]),
- ?line XRes1 = Res1,
- ?line XRes2 = Res2,
- ?line XRes3 = Res3,
- ?line XRes4 = Res4,
- ?line XRes5 = Res5,
- ?line ok.
+ XRes5 = adjust_xmem(L2, {50,260,260,260}), %{76,286,286,286}),
+ Res5 = {?S(T11),?S(T12),?S(T13),?S(T14)},
+ io:format("XRes1 = ~p~n"
+ " Res1 = ~p~n~n"
+ "XRes2 = ~p~n"
+ " Res2 = ~p~n~n"
+ "XRes3 = ~p~n"
+ " Res3 = ~p~n~n"
+ "XRes4 = ~p~n"
+ " Res4 = ~p~n~n"
+ "XRes5 = ~p~n"
+ " Res5 = ~p~n~n",
+ [XRes1, Res1,
+ XRes2, Res2,
+ XRes3, Res3,
+ XRes4, Res4,
+ XRes5, Res5]),
+ XRes1 = Res1,
+ XRes2 = Res2,
+ XRes3 = Res3,
+ XRes4 = Res4,
+ XRes5 = Res5,
+ ok.
mem_mode(T) ->
{case ets:info(T,compressed) of
- true -> compressed;
- false -> normal
+ true -> compressed;
+ false -> normal
end,
erlang:system_info(wordsize)}.
chk_normal_tab_struct_size() ->
- ?line System = {os:type(),
- os:version(),
- erlang:system_info(wordsize),
- erlang:system_info(smp_support),
- erlang:system_info(heap_type)},
- ?line ?t:format("System = ~p~n", [System]),
- %%?line ?t:format("?NORMAL_TAB_STRUCT_SZ=~p~n", [?NORMAL_TAB_STRUCT_SZ]),
- ?line ?t:format("?TAB_STRUCT_SZ=~p~n", [?TAB_STRUCT_SZ]),
+ System = {os:type(),
+ os:version(),
+ erlang:system_info(wordsize),
+ erlang:system_info(smp_support),
+ erlang:system_info(heap_type)},
+ io:format("System = ~p~n", [System]),
+ io:format("?TAB_STRUCT_SZ=~p~n", [?TAB_STRUCT_SZ]),
ok.
-% ?line case System of
-% {{unix, sunos}, {5, 8, 0}, 4, false, private} ->
-% ?line ?NORMAL_TAB_STRUCT_SZ = ?TAB_STRUCT_SZ,
-% ?line ok;
-% _ ->
-% ?line ok
-% end.
-
--define(DB_TREE_STACK_NEED,50). % The static stack for a tree, in halfword pointers are two internal words
- % so the stack gets twice as big
--define(DB_HASH_SIZEOF_EXTSEG,260). % The segment size in words, in halfword this will be twice as large.
-
-adjust_xmem([T1,T2,T3,T4], {A0,B0,C0,D0} = _Mem0) ->
+
+adjust_xmem([_T1,_T2,_T3,_T4], {A0,B0,C0,D0} = _Mem0) ->
%% Adjust for 64-bit, smp, and os:
%% Table struct size may differ.
-% Mem1 = case ?TAB_STRUCT_SZ of
-% ?NORMAL_TAB_STRUCT_SZ ->
-% Mem0;
-% TabStructSz ->
-% TabDiff = TabStructSz - ?NORMAL_TAB_STRUCT_SZ,
-% {A0+TabDiff, B0+TabDiff, C0+TabDiff, D0+TabDiff}
-% end,
-
TabDiff = ?TAB_STRUCT_SZ,
- Mem1 = {A0+TabDiff, B0+TabDiff, C0+TabDiff, D0+TabDiff},
-
- case {erlang:system_info({wordsize,internal}),erlang:system_info({wordsize,external})} of
- %% Halfword, corrections for regular pointers occupying two internal words.
- {4,8} ->
- {A1,B1,C1,D1} = Mem1,
- {A1+4*ets:info(T1, size)+?DB_TREE_STACK_NEED,
- B1+3*ets:info(T2, size)+?DB_HASH_SIZEOF_EXTSEG,
- C1+3*ets:info(T3, size)+?DB_HASH_SIZEOF_EXTSEG,
- D1+3*ets:info(T4, size)+?DB_HASH_SIZEOF_EXTSEG};
- _ ->
- Mem1
- end.
+ {A0+TabDiff, B0+TabDiff, C0+TabDiff, D0+TabDiff}.
-t_whitebox(doc) ->
- ["Diverse whitebox testes"];
-t_whitebox(suite) ->
- [];
+%% Misc. whitebox tests
t_whitebox(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(whitebox_1),
repeat_for_opts(whitebox_1),
repeat_for_opts(whitebox_1),
repeat_for_opts(whitebox_2),
repeat_for_opts(whitebox_2),
repeat_for_opts(whitebox_2),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
whitebox_1(Opts) ->
- ?line T=ets_new(x,[bag | Opts]),
- ?line ets:insert(T,[{du,glade},{ta,en}]),
- ?line ets:insert(T,[{hej,hopp2},{du,glade2},{ta,en2}]),
- ?line {_,C}=ets:match(T,{ta,'$1'},1),
- ?line ets:select(C),
- ?line ets:match(C),
- ?line ets:delete(T),
+ T=ets_new(x,[bag | Opts]),
+ ets:insert(T,[{du,glade},{ta,en}]),
+ ets:insert(T,[{hej,hopp2},{du,glade2},{ta,en2}]),
+ {_,C}=ets:match(T,{ta,'$1'},1),
+ ets:select(C),
+ ets:match(C),
+ ets:delete(T),
ok.
whitebox_2(Opts) ->
- ?line T=ets_new(x,[ordered_set, {keypos,2} | Opts]),
- ?line T2=ets_new(x,[set, {keypos,2}| Opts]),
- ?line 0 = ets:select_delete(T,[{{hej},[],[true]}]),
- ?line 0 = ets:select_delete(T,[{{hej,hopp},[],[true]}]),
- ?line 0 = ets:select_delete(T2,[{{hej},[],[true]}]),
- ?line 0 = ets:select_delete(T2,[{{hej,hopp},[],[true]}]),
- ?line ets:delete(T),
- ?line ets:delete(T2),
+ T=ets_new(x,[ordered_set, {keypos,2} | Opts]),
+ T2=ets_new(x,[set, {keypos,2}| Opts]),
+ 0 = ets:select_delete(T,[{{hej},[],[true]}]),
+ 0 = ets:select_delete(T,[{{hej,hopp},[],[true]}]),
+ 0 = ets:select_delete(T2,[{{hej},[],[true]}]),
+ 0 = ets:select_delete(T2,[{{hej,hopp},[],[true]}]),
+ ets:delete(T),
+ ets:delete(T2),
ok.
-
-
-t_ets_dets(doc) ->
- ["Test ets:to/from_dets"];
-t_ets_dets(suite) ->
- [];
+
+
+%% Test ets:to/from_dets.
t_ets_dets(Config) when is_list(Config) ->
repeat_for_opts(fun(Opts) -> t_ets_dets(Config,Opts) end).
t_ets_dets(Config, Opts) ->
- ?line Fname = gen_dets_filename(Config,1),
- ?line (catch file:delete(Fname)),
- ?line {ok,DTab} = dets:open_file(testdets_1,
+ Fname = gen_dets_filename(Config,1),
+ (catch file:delete(Fname)),
+ {ok,DTab} = dets:open_file(testdets_1,
[{file, Fname}]),
- ?line ETab = ets_new(x,Opts),
- ?line filltabint(ETab,3000),
- ?line DTab = ets:to_dets(ETab,DTab),
- ?line ets:delete_all_objects(ETab),
- ?line 0 = ets:info(ETab,size),
- ?line true = ets:from_dets(ETab,DTab),
- ?line 3000 = ets:info(ETab,size),
- ?line ets:delete(ETab),
- ?line check_badarg(catch ets:to_dets(ETab,DTab),
- ets, to_dets, [ETab,DTab]),
- ?line check_badarg(catch ets:from_dets(ETab,DTab),
- ets, from_dets, [ETab,DTab]),
- ?line ETab2 = ets_new(x,Opts),
- ?line filltabint(ETab2,3000),
- ?line dets:close(DTab),
- ?line check_badarg(catch ets:to_dets(ETab2,DTab),
- ets, to_dets, [ETab2,DTab]),
- ?line check_badarg(catch ets:from_dets(ETab2,DTab),
- ets, from_dets, [ETab2,DTab]),
- ?line ets:delete(ETab2),
- ?line (catch file:delete(Fname)),
+ ETab = ets_new(x,Opts),
+ filltabint(ETab,3000),
+ DTab = ets:to_dets(ETab,DTab),
+ ets:delete_all_objects(ETab),
+ 0 = ets:info(ETab,size),
+ true = ets:from_dets(ETab,DTab),
+ 3000 = ets:info(ETab,size),
+ ets:delete(ETab),
+ check_badarg(catch ets:to_dets(ETab,DTab),
+ ets, to_dets, [ETab,DTab]),
+ check_badarg(catch ets:from_dets(ETab,DTab),
+ ets, from_dets, [ETab,DTab]),
+ ETab2 = ets_new(x,Opts),
+ filltabint(ETab2,3000),
+ dets:close(DTab),
+ check_badarg(catch ets:to_dets(ETab2,DTab),
+ ets, to_dets, [ETab2,DTab]),
+ check_badarg(catch ets:from_dets(ETab2,DTab),
+ ets, from_dets, [ETab2,DTab]),
+ ets:delete(ETab2),
+ (catch file:delete(Fname)),
ok.
check_badarg({'EXIT', {badarg, [{M,F,Args,_} | _]}}, M, F, Args) ->
@@ -841,14 +778,11 @@ check_badarg({'EXIT', {badarg, [{M,F,Args,_} | _]}}, M, F, Args) ->
check_badarg({'EXIT', {badarg, [{M,F,A,_} | _]}}, M, F, Args) ->
true = test_server:is_native(M) andalso length(Args) =:= A.
-t_delete_all_objects(doc) ->
- ["Test ets:delete_all_objects/1"];
-t_delete_all_objects(suite) ->
- [];
+%% Test ets:delete_all_objects/1.
t_delete_all_objects(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(t_delete_all_objects_do),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
get_kept_objects(T) ->
case ets:info(T,stats) of
@@ -859,80 +793,77 @@ get_kept_objects(T) ->
end.
t_delete_all_objects_do(Opts) ->
- ?line T=ets_new(x,Opts),
- ?line filltabint(T,4000),
- ?line O=ets:first(T),
- ?line ets:next(T,O),
- ?line ets:safe_fixtable(T,true),
- ?line true = ets:delete_all_objects(T),
- ?line '$end_of_table' = ets:next(T,O),
- ?line 0 = ets:info(T,size),
- ?line 4000 = get_kept_objects(T),
- ?line ets:safe_fixtable(T,false),
- ?line 0 = ets:info(T,size),
- ?line 0 = get_kept_objects(T),
- ?line filltabint(T,4000),
- ?line 4000 = ets:info(T,size),
- ?line true = ets:delete_all_objects(T),
- ?line 0 = ets:info(T,size),
- ?line ets:delete(T).
-
-
-t_delete_object(doc) ->
- ["Test ets:delete_object/2"];
-t_delete_object(suite) ->
- [];
+ T=ets_new(x,Opts),
+ filltabint(T,4000),
+ O=ets:first(T),
+ ets:next(T,O),
+ ets:safe_fixtable(T,true),
+ true = ets:delete_all_objects(T),
+ '$end_of_table' = ets:next(T,O),
+ 0 = ets:info(T,size),
+ 4000 = get_kept_objects(T),
+ ets:safe_fixtable(T,false),
+ 0 = ets:info(T,size),
+ 0 = get_kept_objects(T),
+ filltabint(T,4000),
+ 4000 = ets:info(T,size),
+ true = ets:delete_all_objects(T),
+ 0 = ets:info(T,size),
+ ets:delete(T).
+
+
+%% Test ets:delete_object/2.
t_delete_object(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(t_delete_object_do),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
t_delete_object_do(Opts) ->
- ?line T = ets_new(x,Opts),
- ?line filltabint(T,4000),
- ?line del_one_by_one_set(T,1,4001),
- ?line filltabint(T,4000),
- ?line del_one_by_one_set(T,4000,0),
- ?line filltabint(T,4000),
- ?line First = ets:first(T),
- ?line Next = ets:next(T,First),
- ?line ets:safe_fixtable(T,true),
- ?line ets:delete_object(T,{First, integer_to_list(First)}),
- ?line Next = ets:next(T,First),
- ?line 3999 = ets:info(T,size),
- ?line 1 = get_kept_objects(T),
- ?line ets:safe_fixtable(T,false),
- ?line 3999 = ets:info(T,size),
- ?line 0 = get_kept_objects(T),
- ?line ets:delete(T),
- ?line T1 = ets_new(x,[ordered_set | Opts]),
- ?line filltabint(T1,4000),
- ?line del_one_by_one_set(T1,1,4001),
- ?line filltabint(T1,4000),
- ?line del_one_by_one_set(T1,4000,0),
- ?line ets:delete(T1),
- ?line T2 = ets_new(x,[bag | Opts]),
- ?line filltabint2(T2,4000),
- ?line del_one_by_one_bag(T2,1,4001),
- ?line filltabint2(T2,4000),
- ?line del_one_by_one_bag(T2,4000,0),
- ?line ets:delete(T2),
- ?line T3 = ets_new(x,[duplicate_bag | Opts]),
- ?line filltabint3(T3,4000),
- ?line del_one_by_one_dbag_1(T3,1,4001),
- ?line filltabint3(T3,4000),
- ?line del_one_by_one_dbag_1(T3,4000,0),
- ?line filltabint(T3,4000),
- ?line filltabint3(T3,4000),
- ?line del_one_by_one_dbag_2(T3,1,4001),
- ?line filltabint(T3,4000),
- ?line filltabint3(T3,4000),
- ?line del_one_by_one_dbag_2(T3,4000,0),
-
- ?line filltabint2(T3,4000),
- ?line filltabint(T3,4000),
- ?line del_one_by_one_dbag_3(T3,4000,0),
- ?line ets:delete(T3),
+ T = ets_new(x,Opts),
+ filltabint(T,4000),
+ del_one_by_one_set(T,1,4001),
+ filltabint(T,4000),
+ del_one_by_one_set(T,4000,0),
+ filltabint(T,4000),
+ First = ets:first(T),
+ Next = ets:next(T,First),
+ ets:safe_fixtable(T,true),
+ ets:delete_object(T,{First, integer_to_list(First)}),
+ Next = ets:next(T,First),
+ 3999 = ets:info(T,size),
+ 1 = get_kept_objects(T),
+ ets:safe_fixtable(T,false),
+ 3999 = ets:info(T,size),
+ 0 = get_kept_objects(T),
+ ets:delete(T),
+ T1 = ets_new(x,[ordered_set | Opts]),
+ filltabint(T1,4000),
+ del_one_by_one_set(T1,1,4001),
+ filltabint(T1,4000),
+ del_one_by_one_set(T1,4000,0),
+ ets:delete(T1),
+ T2 = ets_new(x,[bag | Opts]),
+ filltabint2(T2,4000),
+ del_one_by_one_bag(T2,1,4001),
+ filltabint2(T2,4000),
+ del_one_by_one_bag(T2,4000,0),
+ ets:delete(T2),
+ T3 = ets_new(x,[duplicate_bag | Opts]),
+ filltabint3(T3,4000),
+ del_one_by_one_dbag_1(T3,1,4001),
+ filltabint3(T3,4000),
+ del_one_by_one_dbag_1(T3,4000,0),
+ filltabint(T3,4000),
+ filltabint3(T3,4000),
+ del_one_by_one_dbag_2(T3,1,4001),
+ filltabint(T3,4000),
+ filltabint3(T3,4000),
+ del_one_by_one_dbag_2(T3,4000,0),
+
+ filltabint2(T3,4000),
+ filltabint(T3,4000),
+ del_one_by_one_dbag_3(T3,4000,0),
+ ets:delete(T3),
ok.
make_init_fun(N) when N > 4000->
@@ -954,21 +885,18 @@ make_init_fun(N) ->
exit(close_not_expected)
end.
-t_init_table(doc) ->
- ["Test ets:init_table/2"];
-t_init_table(suite) ->
- [];
+%% Test ets:init_table/2.
t_init_table(Config) when is_list(Config)->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(t_init_table_do),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
t_init_table_do(Opts) ->
- ?line T = ets_new(x,[duplicate_bag | Opts]),
- ?line filltabint(T,4000),
- ?line ets:init_table(T, make_init_fun(1)),
- ?line del_one_by_one_dbag_1(T,4000,0),
- ?line ets:delete(T),
+ T = ets_new(x,[duplicate_bag | Opts]),
+ filltabint(T,4000),
+ ets:init_table(T, make_init_fun(1)),
+ del_one_by_one_dbag_1(T,4000,0),
+ ets:delete(T),
ok.
do_fill_dbag_using_lists(T,0) ->
@@ -979,132 +907,120 @@ do_fill_dbag_using_lists(T,N) ->
do_fill_dbag_using_lists(T,N - 1).
-t_insert_new(doc) ->
- ["Test the insert_new function"];
-t_insert_new(suite) ->
- [];
+%% Test the insert_new function.
t_insert_new(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line L = fill_sets_int(1000) ++ fill_sets_int(1000,[{write_concurrency,true}]),
+ EtsMem = etsmem(),
+ L = fill_sets_int(1000) ++ fill_sets_int(1000,[{write_concurrency,true}]),
lists:foreach(fun(Tab) ->
- ?line false = ets:insert_new(Tab,{2,"2"}),
- ?line true = ets:insert_new(Tab,{2002,"2002"}),
- ?line false = ets:insert_new(Tab,{2002,"2002"}),
- ?line true = ets:insert(Tab,{2002,"2002"}),
- ?line false = ets:insert_new(Tab,[{2002,"2002"}]),
- ?line false = ets:insert_new(Tab,[{2002,"2002"},
+ false = ets:insert_new(Tab,{2,"2"}),
+ true = ets:insert_new(Tab,{2002,"2002"}),
+ false = ets:insert_new(Tab,{2002,"2002"}),
+ true = ets:insert(Tab,{2002,"2002"}),
+ false = ets:insert_new(Tab,[{2002,"2002"}]),
+ false = ets:insert_new(Tab,[{2002,"2002"},
{2003,"2003"}]),
- ?line false = ets:insert_new(Tab,[{2001,"2001"},
+ false = ets:insert_new(Tab,[{2001,"2001"},
{2002,"2002"},
{2003,"2003"}]),
- ?line false = ets:insert_new(Tab,[{2001,"2001"},
+ false = ets:insert_new(Tab,[{2001,"2001"},
{2002,"2002"}]),
- ?line true = ets:insert_new(Tab,[{2001,"2001"},
+ true = ets:insert_new(Tab,[{2001,"2001"},
{2003,"2003"}]),
- ?line false = ets:insert_new(Tab,{2001,"2001"}),
- ?line false = ets:insert_new(Tab,{2002,"2002"}),
- ?line false = ets:insert_new(Tab,{2003,"2003"}),
- ?line true = ets:insert_new(Tab,{2004,"2004"}),
- ?line true = ets:insert_new(Tab,{2000,"2000"}),
- ?line true = ets:insert_new(Tab,[{2005,"2005"},
- {2006,"2006"},
- {2007,"2007"}]),
- ?line Num =
+ false = ets:insert_new(Tab,{2001,"2001"}),
+ false = ets:insert_new(Tab,{2002,"2002"}),
+ false = ets:insert_new(Tab,{2003,"2003"}),
+ true = ets:insert_new(Tab,{2004,"2004"}),
+ true = ets:insert_new(Tab,{2000,"2000"}),
+ true = ets:insert_new(Tab,[{2005,"2005"},
+ {2006,"2006"},
+ {2007,"2007"}]),
+ Num =
case ets:info(Tab,type) of
bag ->
- ?line true =
+ true =
ets:insert(Tab,{2004,"2004-2"}),
- ?line false =
+ false =
ets:insert_new(Tab,{2004,"2004-3"}),
1009;
duplicate_bag ->
- ?line true =
+ true =
ets:insert(Tab,{2004,"2004"}),
- ?line false =
+ false =
ets:insert_new(Tab,{2004,"2004"}),
1010;
_ ->
1008
end,
- ?line Num = ets:info(Tab,size),
- ?line List = ets:tab2list(Tab),
- ?line ets:delete_all_objects(Tab),
- ?line true = ets:insert_new(Tab,List),
- ?line false = ets:insert_new(Tab,List),
- ?line ets:delete(Tab)
+ Num = ets:info(Tab,size),
+ List = ets:tab2list(Tab),
+ ets:delete_all_objects(Tab),
+ true = ets:insert_new(Tab,List),
+ false = ets:insert_new(Tab,List),
+ ets:delete(Tab)
end,
L),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
-t_insert_list(doc) ->
- ["Test ets:insert/2 with list of objects."];
-t_insert_list(suite) ->
- [];
+%% Test ets:insert/2 with list of objects.
t_insert_list(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(t_insert_list_do),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
t_insert_list_do(Opts) ->
- ?line T = ets_new(x,[duplicate_bag | Opts]),
- ?line do_fill_dbag_using_lists(T,4000),
- ?line del_one_by_one_dbag_2(T,4000,0),
- ?line ets:delete(T).
+ T = ets_new(x,[duplicate_bag | Opts]),
+ do_fill_dbag_using_lists(T,4000),
+ del_one_by_one_dbag_2(T,4000,0),
+ ets:delete(T).
-t_test_ms(doc) ->
- ["Test interface of ets:test_ms/2"];
-t_test_ms(suite) ->
- [];
+%% Test interface of ets:test_ms/2.
t_test_ms(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line {ok,[a,b]} = ets:test_ms({a,b},
- [{{'$1','$2'},[{'<','$1','$2'}],['$$']}]),
- ?line {ok,false} = ets:test_ms({a,b},
- [{{'$1','$2'},[{'>','$1','$2'}],['$$']}]),
+ EtsMem = etsmem(),
+ {ok,[a,b]} = ets:test_ms({a,b},
+ [{{'$1','$2'},[{'<','$1','$2'}],['$$']}]),
+ {ok,false} = ets:test_ms({a,b},
+ [{{'$1','$2'},[{'>','$1','$2'}],['$$']}]),
Tpl = {a,gb_sets:new()},
- ?line {ok,Tpl} = ets:test_ms(Tpl, [{{'_','_'}, [], ['$_']}]), % OTP-10190
- ?line {error,[{error,String}]} = ets:test_ms({a,b},
- [{{'$1','$2'},
- [{'flurp','$1','$2'}],
- ['$$']}]),
- ?line true = (if is_list(String) -> true; true -> false end),
- ?line verify_etsmem(EtsMem).
-
-t_select_reverse(doc) ->
- ["Test the select reverse BIF's"];
-t_select_reverse(suite) ->
- [];
+ {ok,Tpl} = ets:test_ms(Tpl, [{{'_','_'}, [], ['$_']}]), % OTP-10190
+ {error,[{error,String}]} = ets:test_ms({a,b},
+ [{{'$1','$2'},
+ [{'flurp','$1','$2'}],
+ ['$$']}]),
+ true = (if is_list(String) -> true; true -> false end),
+ verify_etsmem(EtsMem).
+
+%% Test the select reverse BIFs.
t_select_reverse(Config) when is_list(Config) ->
- ?line Table = ets_new(xxx, [ordered_set]),
- ?line filltabint(Table,1000),
- ?line A = lists:reverse(ets:select(Table,[{{'$1', '_'},
+ Table = ets_new(xxx, [ordered_set]),
+ filltabint(Table,1000),
+ A = lists:reverse(ets:select(Table,[{{'$1', '_'},
[{'>',
{'rem',
'$1', 5},
2}],
['$_']}])),
- ?line A = ets:select_reverse(Table,[{{'$1', '_'},
+ A = ets:select_reverse(Table,[{{'$1', '_'},
[{'>',
{'rem',
'$1', 5},
2}],
['$_']}]),
- ?line A = reverse_chunked(Table,[{{'$1', '_'},
- [{'>',
- {'rem',
- '$1', 5},
- 2}],
- ['$_']}],3),
- % A set/bag/duplicate_bag should get the same result regardless
- % of select or select_reverse
- ?line Table2 = ets_new(xxx, [set]),
- ?line filltabint(Table2,1000),
- ?line Table3 = ets_new(xxx, [bag]),
- ?line filltabint(Table3,1000),
- ?line Table4 = ets_new(xxx, [duplicate_bag]),
- ?line filltabint(Table4,1000),
- ?line lists:map(fun(Tab) ->
+ A = reverse_chunked(Table,[{{'$1', '_'},
+ [{'>',
+ {'rem',
+ '$1', 5},
+ 2}],
+ ['$_']}],3),
+ %% A set/bag/duplicate_bag should get the same result regardless
+ %% of select or select_reverse
+ Table2 = ets_new(xxx, [set]),
+ filltabint(Table2,1000),
+ Table3 = ets_new(xxx, [bag]),
+ filltabint(Table3,1000),
+ Table4 = ets_new(xxx, [duplicate_bag]),
+ filltabint(Table4,1000),
+ lists:map(fun(Tab) ->
B = ets:select(Tab,[{{'$1', '_'},
[{'>',
{'rem',
@@ -1132,52 +1048,49 @@ do_reverse_chunked({L,C},Acc) ->
do_reverse_chunked(ets:select_reverse(C), NewAcc).
-t_select_delete(doc) ->
- ["Test the ets:select_delete/2 and ets:select_count/2 BIF's"];
-t_select_delete(suite) ->
- [];
+%% Test the ets:select_delete/2 and ets:select_count/2 BIFs.
t_select_delete(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line Tables = fill_sets_int(10000) ++ fill_sets_int(10000,[{write_concurrency,true}]),
+ EtsMem = etsmem(),
+ Tables = fill_sets_int(10000) ++ fill_sets_int(10000,[{write_concurrency,true}]),
lists:foreach
(fun(Table) ->
- ?line 4000 = ets:select_count(Table,[{{'$1', '_'},
- [{'>',
- {'rem',
- '$1', 5},
- 2}],
- [true]}]),
- ?line 4000 = ets:select_delete(Table,[{{'$1', '_'},
- [{'>',
- {'rem',
- '$1', 5},
- 2}],
- [true]}]),
- ?line check(Table,
- fun({N,_}) when (N rem 5) =< 2 ->
- true;
- (_) ->
- false
- end,
- 6000)
+ 4000 = ets:select_count(Table,[{{'$1', '_'},
+ [{'>',
+ {'rem',
+ '$1', 5},
+ 2}],
+ [true]}]),
+ 4000 = ets:select_delete(Table,[{{'$1', '_'},
+ [{'>',
+ {'rem',
+ '$1', 5},
+ 2}],
+ [true]}]),
+ check(Table,
+ fun({N,_}) when (N rem 5) =< 2 ->
+ true;
+ (_) ->
+ false
+ end,
+ 6000)
end,
Tables),
lists:foreach
(fun(Table) ->
- ?line ets:select_delete(Table,[{'_',[],[true]}]),
- ?line xfilltabint(Table,4000),
- ?line successive_delete(Table,1,4001,bound),
- ?line 0 = ets:info(Table,size),
- ?line xfilltabint(Table,4000),
- ?line successive_delete(Table,4000,0, bound),
- ?line 0 = ets:info(Table,size),
- ?line xfilltabint(Table,4000),
- ?line successive_delete(Table,1,4001,unbound),
- ?line 0 = ets:info(Table,size),
- ?line xfilltabint(Table,4000),
- ?line successive_delete(Table,4000,0, unbound),
- ?line 0 = ets:info(Table,size)
+ ets:select_delete(Table,[{'_',[],[true]}]),
+ xfilltabint(Table,4000),
+ successive_delete(Table,1,4001,bound),
+ 0 = ets:info(Table,size),
+ xfilltabint(Table,4000),
+ successive_delete(Table,4000,0, bound),
+ 0 = ets:info(Table,size),
+ xfilltabint(Table,4000),
+ successive_delete(Table,1,4001,unbound),
+ 0 = ets:info(Table,size),
+ xfilltabint(Table,4000),
+ successive_delete(Table,4000,0, unbound),
+ 0 = ets:info(Table,size)
end,
Tables),
@@ -1189,167 +1102,157 @@ t_select_delete(Config) when is_list(Config) ->
_ ->
1
end,
- ?line xfilltabstr(Table, 4000),
- ?line 1000 = ets:select_count(Table,
- [{{[$3 | '$1'], '_'},
- [{'==',
- {'length', '$1'},
- 3}],[true]}]) div F,
- ?line 1000 = ets:select_delete(Table,
- [{{[$3 | '$1'], '_'},
- [{'==',
- {'length', '$1'},
- 3}],[true]}]) div F,
- ?line check(Table, fun({[3,_,_,_],_}) -> false;
- (_) -> true
- end, 3000*F),
- ?line 8 = ets:select_count(Table,
- [{{"7",'_'},[],[false]},
- {{['_'], '_'},
- [],[true]}]) div F,
- ?line 8 = ets:select_delete(Table,
- [{{"7",'_'},[],[false]},
- {{['_'], '_'},
- [],[true]}]) div F,
- ?line check(Table, fun({"7",_}) -> true;
- ({[_],_}) -> false;
- (_) -> true
- end, 2992*F),
- ?line xfilltabstr(Table, 4000),
+ xfilltabstr(Table, 4000),
+ 1000 = ets:select_count(Table,
+ [{{[$3 | '$1'], '_'},
+ [{'==',
+ {'length', '$1'},
+ 3}],[true]}]) div F,
+ 1000 = ets:select_delete(Table,
+ [{{[$3 | '$1'], '_'},
+ [{'==',
+ {'length', '$1'},
+ 3}],[true]}]) div F,
+ check(Table, fun({[3,_,_,_],_}) -> false;
+ (_) -> true
+ end, 3000*F),
+ 8 = ets:select_count(Table,
+ [{{"7",'_'},[],[false]},
+ {{['_'], '_'},
+ [],[true]}]) div F,
+ 8 = ets:select_delete(Table,
+ [{{"7",'_'},[],[false]},
+ {{['_'], '_'},
+ [],[true]}]) div F,
+ check(Table, fun({"7",_}) -> true;
+ ({[_],_}) -> false;
+ (_) -> true
+ end, 2992*F),
+ xfilltabstr(Table, 4000),
%% This happens to be interesting for other select types too
- ?line 200 = length(ets:select(Table,
- [{{[$3,'_','_'],'_'},
- [],[true]},
- {{[$1,'_','_'],'_'},
- [],[true]}])) div F,
- ?line 200 = ets:select_count(Table,
- [{{[$3,'_','_'],'_'},
- [],[true]},
- {{[$1,'_','_'],'_'},
- [],[true]}]) div F,
- ?line 200 = length(element(1,ets:select(Table,
- [{{[$3,'_','_'],'_'},
- [],[true]},
- {{[$1,'_','_'],'_'},
- [],[true]}],
- 1000))) div F,
- ?line 200 = length(
- ets:select_reverse(Table,
- [{{[$3,'_','_'],'_'},
- [],[true]},
- {{[$1,'_','_'],'_'},
- [],[true]}])) div F,
- ?line 200 = length(
- element(1,
- ets:select_reverse
- (Table,
+ 200 = length(ets:select(Table,
+ [{{[$3,'_','_'],'_'},
+ [],[true]},
+ {{[$1,'_','_'],'_'},
+ [],[true]}])) div F,
+ 200 = ets:select_count(Table,
[{{[$3,'_','_'],'_'},
[],[true]},
{{[$1,'_','_'],'_'},
- [],[true]}],
- 1000))) div F,
- ?line 200 = ets:select_delete(Table,
- [{{[$3,'_','_'],'_'},
- [],[true]},
- {{[$1,'_','_'],'_'},
- [],[true]}]) div F,
- ?line 0 = ets:select_count(Table,
+ [],[true]}]) div F,
+ 200 = length(element(1,ets:select(Table,
+ [{{[$3,'_','_'],'_'},
+ [],[true]},
+ {{[$1,'_','_'],'_'},
+ [],[true]}],
+ 1000))) div F,
+ 200 = length(
+ ets:select_reverse(Table,
[{{[$3,'_','_'],'_'},
[],[true]},
{{[$1,'_','_'],'_'},
- [],[true]}]) div F,
- ?line check(Table, fun({[$3,_,_],_}) -> false;
- ({[$1,_,_],_}) -> false;
- (_) -> true
- end, 3800*F)
+ [],[true]}])) div F,
+ 200 = length(
+ element(1,
+ ets:select_reverse
+ (Table,
+ [{{[$3,'_','_'],'_'},
+ [],[true]},
+ {{[$1,'_','_'],'_'},
+ [],[true]}],
+ 1000))) div F,
+ 200 = ets:select_delete(Table,
+ [{{[$3,'_','_'],'_'},
+ [],[true]},
+ {{[$1,'_','_'],'_'},
+ [],[true]}]) div F,
+ 0 = ets:select_count(Table,
+ [{{[$3,'_','_'],'_'},
+ [],[true]},
+ {{[$1,'_','_'],'_'},
+ [],[true]}]) div F,
+ check(Table, fun({[$3,_,_],_}) -> false;
+ ({[$1,_,_],_}) -> false;
+ (_) -> true
+ end, 3800*F)
end,
Tables),
lists:foreach(fun(Tab) -> ets:delete(Tab) end,Tables),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
-partly_bound(doc) ->
- ["Test that partly bound keys gives faster matches"];
-partly_bound(suite) ->
- [];
+%% Test that partly bound keys gives faster matches.
partly_bound(Config) when is_list(Config) ->
case os:type() of
{win32,_} ->
{skip,"Inaccurate measurements on Windows"};
_ ->
- ?line EtsMem = etsmem(),
- ?line dont_make_worse(),
- ?line make_better(),
- ?line verify_etsmem(EtsMem)
+ EtsMem = etsmem(),
+ dont_make_worse(),
+ make_better(),
+ verify_etsmem(EtsMem)
end.
dont_make_worse() ->
seventyfive_percent_success({?MODULE,dont_make_worse_sub,[]},0,0,10).
dont_make_worse_sub() ->
- ?line T = build_table([a,b],[a,b],15000),
- ?line T1 = time_match_object(T,{'_',a,a,1500}, [{{a,a,1500},a,a,1500}]),
- ?line T2 = time_match_object(T,{{a,a,'_'},a,a,1500},
- [{{a,a,1500},a,a,1500}]),
- ?line ets:delete(T),
- ?line true = (T1 > T2),
+ T = build_table([a,b],[a,b],15000),
+ T1 = time_match_object(T,{'_',a,a,1500}, [{{a,a,1500},a,a,1500}]),
+ T2 = time_match_object(T,{{a,a,'_'},a,a,1500},
+ [{{a,a,1500},a,a,1500}]),
+ ets:delete(T),
+ true = (T1 > T2),
ok.
-
+
make_better() ->
fifty_percent_success({?MODULE,make_better_sub2,[]},0,0,10),
fifty_percent_success({?MODULE,make_better_sub1,[]},0,0,10).
make_better_sub1() ->
- ?line T = build_table2([a,b],[a,b],15000),
- ?line T1 = time_match_object(T,{'_',1500,a,a}, [{{1500,a,a},1500,a,a}]),
- ?line T2 = time_match_object(T,{{1500,a,'_'},1500,a,a},
- [{{1500,a,a},1500,a,a}]),
- ?line ets:delete(T),
- ?line io:format("~p>~p~n",[(T1 / 100),T2]),
- ?line true = ((T1 / 100) > T2), % More marginal than needed.
+ T = build_table2([a,b],[a,b],15000),
+ T1 = time_match_object(T,{'_',1500,a,a}, [{{1500,a,a},1500,a,a}]),
+ T2 = time_match_object(T,{{1500,a,'_'},1500,a,a},
+ [{{1500,a,a},1500,a,a}]),
+ ets:delete(T),
+ io:format("~p>~p~n",[(T1 / 100),T2]),
+ true = ((T1 / 100) > T2), % More marginal than needed.
ok.
make_better_sub2() ->
- ?line T = build_table2([a,b],[a,b],15000),
- ?line T1 = time_match(T,{'$1',1500,a,a}),
- ?line T2 = time_match(T,{{1500,a,'$1'},1500,a,a}),
- ?line ets:delete(T),
- ?line io:format("~p>~p~n",[(T1 / 100),T2]),
- ?line true = ((T1 / 100) > T2), % More marginal than needed.
+ T = build_table2([a,b],[a,b],15000),
+ T1 = time_match(T,{'$1',1500,a,a}),
+ T2 = time_match(T,{{1500,a,'$1'},1500,a,a}),
+ ets:delete(T),
+ io:format("~p>~p~n",[(T1 / 100),T2]),
+ true = ((T1 / 100) > T2), % More marginal than needed.
ok.
-match_heavy(doc) ->
- ["Heavy random matching, comparing set with ordered_set."];
-match_heavy(suite) ->
- [];
+%% Heavy random matching, comparing set with ordered_set.
match_heavy(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir,Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% Easier to have in process dictionary when manually
%% running the test function.
put(where_to_read,DataDir),
put(where_to_write,PrivDir),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- NewDog=test_server:timetrap(test_server:seconds(1000)),
- NewConfig = [{watchdog, NewDog} | lists:keydelete(watchdog,1,Config)],
random_test(),
drop_match(),
- NewConfig.
+ ok.
%%% Extra safety for the very low probability that this is not
%%% caught by the random test (Statistically impossible???)
drop_match() ->
- ?line EtsMem = etsmem(),
- ?line T = build_table([a,b],[a],1500),
- ?line [{{a,a,1},a,a,1},{{b,a,1},b,a,1}] =
+ EtsMem = etsmem(),
+ T = build_table([a,b],[a],1500),
+ [{{a,a,1},a,a,1},{{b,a,1},b,a,1}] =
ets:match_object(T, {'_','_','_',1}),
- ?line true = ets:delete(T),
- ?line verify_etsmem(EtsMem).
+ true = ets:delete(T),
+ verify_etsmem(EtsMem).
ets_match(Tab,Expr) ->
- case random:uniform(2) of
+ case rand:uniform(2) of
1 ->
ets:match(Tab,Expr);
_ ->
@@ -1358,14 +1261,14 @@ ets_match(Tab,Expr) ->
match_chunked(Tab,Expr) ->
match_chunked_collect(ets:match(Tab,Expr,
- random:uniform(1999) + 1)).
+ rand:uniform(1999) + 1)).
match_chunked_collect('$end_of_table') ->
[];
match_chunked_collect({Results, Continuation}) ->
Results ++ match_chunked_collect(ets:match(Continuation)).
ets_match_object(Tab,Expr) ->
- case random:uniform(2) of
+ case rand:uniform(2) of
1 ->
ets:match_object(Tab,Expr);
_ ->
@@ -1374,176 +1277,172 @@ ets_match_object(Tab,Expr) ->
match_object_chunked(Tab,Expr) ->
match_object_chunked_collect(ets:match_object(Tab,Expr,
- random:uniform(1999) + 1)).
+ rand:uniform(1999) + 1)).
match_object_chunked_collect('$end_of_table') ->
[];
match_object_chunked_collect({Results, Continuation}) ->
Results ++ match_object_chunked_collect(ets:match_object(Continuation)).
-
+
random_test() ->
- ?line ReadDir = get(where_to_read),
- ?line WriteDir = get(where_to_write),
- ?line (catch file:make_dir(WriteDir)),
- ?line Seed = case file:consult(filename:join([ReadDir,
- "preset_random_seed.txt"])) of
- {ok,[X]} ->
- X;
- _ ->
- {A,B,C} = erlang:timestamp(),
- random:seed(A,B,C),
- get(random_seed)
- end,
- put(random_seed,Seed),
- ?line {ok, F} = file:open(filename:join([WriteDir,
- "last_random_seed.txt"]),
- [write]),
+ ReadDir = get(where_to_read),
+ WriteDir = get(where_to_write),
+ (catch file:make_dir(WriteDir)),
+ case file:consult(filename:join([ReadDir,"preset_random_seed.txt"])) of
+ {ok,[X]} ->
+ rand:seed(X);
+ _ ->
+ rand:seed(exsplus)
+ end,
+ Seed = rand:export_seed(),
+ {ok,F} = file:open(filename:join([WriteDir,"last_random_seed.txt"]),
+ [write]),
io:format(F,"~p. ~n",[Seed]),
file:close(F),
io:format("Random seed ~p written to ~s, copy to ~s to rerun with "
"same seed.",[Seed,
filename:join([WriteDir, "last_random_seed.txt"]),
filename:join([ReadDir,
- "preset_random_seed.txt"])]),
+ "preset_random_seed.txt"])]),
do_random_test().
do_random_test() ->
- ?line EtsMem = etsmem(),
- ?line OrdSet = ets_new(xxx,[ordered_set]),
- ?line Set = ets_new(xxx,[]),
- ?line do_n_times(fun() ->
- ?line Key = create_random_string(25),
- ?line Value = create_random_tuple(25),
- ?line ets:insert(OrdSet,{Key,Value}),
- ?line ets:insert(Set,{Key,Value})
+ EtsMem = etsmem(),
+ OrdSet = ets_new(xxx,[ordered_set]),
+ Set = ets_new(xxx,[]),
+ do_n_times(fun() ->
+ Key = create_random_string(25),
+ Value = create_random_tuple(25),
+ ets:insert(OrdSet,{Key,Value}),
+ ets:insert(Set,{Key,Value})
end, 5000),
- ?line io:format("~nData inserted~n"),
- ?line do_n_times(fun() ->
- ?line I = random:uniform(25),
- ?line Key = create_random_string(I) ++ '_',
- ?line L1 = ets_match_object(OrdSet,{Key,'_'}),
- ?line L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
+ io:format("~nData inserted~n"),
+ do_n_times(fun() ->
+ I = rand:uniform(25),
+ Key = create_random_string(I) ++ '_',
+ L1 = ets_match_object(OrdSet,{Key,'_'}),
+ L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
case L1 == L2 of
false ->
io:format("~p != ~p~n",
[L1,L2]),
- ?line exit({not_eq, L1, L2});
+ exit({not_eq, L1, L2});
true ->
ok
end
end,
2000),
- ?line io:format("~nData matched~n"),
- ?line ets:match_delete(OrdSet,'_'),
- ?line ets:match_delete(Set,'_'),
- ?line do_n_times(fun() ->
- ?line Value = create_random_string(25),
- ?line Key = create_random_tuple(25),
- ?line ets:insert(OrdSet,{Key,Value}),
- ?line ets:insert(Set,{Key,Value})
+ io:format("~nData matched~n"),
+ ets:match_delete(OrdSet,'_'),
+ ets:match_delete(Set,'_'),
+ do_n_times(fun() ->
+ Value = create_random_string(25),
+ Key = create_random_tuple(25),
+ ets:insert(OrdSet,{Key,Value}),
+ ets:insert(Set,{Key,Value})
end, 2000),
- ?line io:format("~nData inserted~n"),
+ io:format("~nData inserted~n"),
(fun() ->
- ?line Key = list_to_tuple(lists:duplicate(25,'_')),
- ?line L1 = ets_match_object(OrdSet,{Key,'_'}),
- ?line L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
- ?line 2000 = length(L1),
+ Key = list_to_tuple(lists:duplicate(25,'_')),
+ L1 = ets_match_object(OrdSet,{Key,'_'}),
+ L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
+ 2000 = length(L1),
case L1 == L2 of
false ->
io:format("~p != ~p~n",
[L1,L2]),
- ?line exit({not_eq, L1, L2});
+ exit({not_eq, L1, L2});
true ->
ok
end
end)(),
(fun() ->
- ?line Key = {'$1','$2','$3','$4',
- '$5','$6','$7','$8',
- '$9','$10','$11','$12',
- '$13','$14','$15','$16',
- '$17','$18','$19','$20',
- '$21','$22','$23','$24',
- '$25'},
- ?line L1 = ets_match_object(OrdSet,{Key,'_'}),
- ?line L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
- ?line 2000 = length(L1),
+ Key = {'$1','$2','$3','$4',
+ '$5','$6','$7','$8',
+ '$9','$10','$11','$12',
+ '$13','$14','$15','$16',
+ '$17','$18','$19','$20',
+ '$21','$22','$23','$24',
+ '$25'},
+ L1 = ets_match_object(OrdSet,{Key,'_'}),
+ L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
+ 2000 = length(L1),
case L1 == L2 of
false ->
io:format("~p != ~p~n",
[L1,L2]),
- ?line exit({not_eq, L1, L2});
+ exit({not_eq, L1, L2});
true ->
ok
end
end)(),
(fun() ->
- ?line Key = {'$1','$2','$3','$4',
- '$5','$6','$7','$8',
- '$9','$10','$11','$12',
- '$13','$14','$15','$16',
- '$17','$18','$19','$20',
- '$21','$22','$23','$24',
- '$25'},
- ?line L1 = ets_match(OrdSet,{Key,'_'}),
- ?line L2 = lists:sort(ets_match(Set,{Key,'_'})),
- ?line 2000 = length(L1),
+ Key = {'$1','$2','$3','$4',
+ '$5','$6','$7','$8',
+ '$9','$10','$11','$12',
+ '$13','$14','$15','$16',
+ '$17','$18','$19','$20',
+ '$21','$22','$23','$24',
+ '$25'},
+ L1 = ets_match(OrdSet,{Key,'_'}),
+ L2 = lists:sort(ets_match(Set,{Key,'_'})),
+ 2000 = length(L1),
case L1 == L2 of
false ->
io:format("~p != ~p~n",
[L1,L2]),
- ?line exit({not_eq, L1, L2});
+ exit({not_eq, L1, L2});
true ->
ok
end
end)(),
- ?line ets:match_delete(OrdSet,'_'),
- ?line ets:match_delete(Set,'_'),
- ?line do_n_times(fun() ->
- ?line Value = create_random_string(25),
- ?line Key = create_random_tuple(25),
- ?line ets:insert(OrdSet,{Key,Value}),
- ?line ets:insert(Set,{Key,Value})
+ ets:match_delete(OrdSet,'_'),
+ ets:match_delete(Set,'_'),
+ do_n_times(fun() ->
+ Value = create_random_string(25),
+ Key = create_random_tuple(25),
+ ets:insert(OrdSet,{Key,Value}),
+ ets:insert(Set,{Key,Value})
end, 2000),
- ?line io:format("~nData inserted~n"),
+ io:format("~nData inserted~n"),
do_n_times(fun() ->
- ?line Key = create_partly_bound_tuple(25),
- ?line L1 = ets_match_object(OrdSet,{Key,'_'}),
- ?line L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
+ Key = create_partly_bound_tuple(25),
+ L1 = ets_match_object(OrdSet,{Key,'_'}),
+ L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
case L1 == L2 of
false ->
io:format("~p != ~p~n",
[L1,L2]),
- ?line exit({not_eq, L1, L2});
+ exit({not_eq, L1, L2});
true ->
ok
end
end,
2000),
- ?line do_n_times(fun() ->
- ?line Key = create_partly_bound_tuple2(25),
- ?line L1 = ets_match_object(OrdSet,{Key,'_'}),
- ?line L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
+ do_n_times(fun() ->
+ Key = create_partly_bound_tuple2(25),
+ L1 = ets_match_object(OrdSet,{Key,'_'}),
+ L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
case L1 == L2 of
false ->
io:format("~p != ~p~n",
[L1,L2]),
- ?line exit({not_eq, L1, L2});
+ exit({not_eq, L1, L2});
true ->
ok
end
end,
2000),
do_n_times(fun() ->
- ?line Key = create_partly_bound_tuple2(25),
- ?line L1 = ets_match(OrdSet,{Key,'_'}),
- ?line L2 = lists:sort(ets_match(Set,{Key,'_'})),
+ Key = create_partly_bound_tuple2(25),
+ L1 = ets_match(OrdSet,{Key,'_'}),
+ L2 = lists:sort(ets_match(Set,{Key,'_'})),
case L1 == L2 of
false ->
io:format("~p != ~p~n",
[L1,L2]),
- ?line exit({not_eq, L1, L2});
+ exit({not_eq, L1, L2});
true ->
ok
end
@@ -1554,15 +1453,15 @@ do_random_test() ->
ets:match_delete(Set,'_'),
do_n_times(fun() ->
do_n_times(fun() ->
- ?line Value =
+ Value =
create_random_string(25),
- ?line Key = create_random_tuple(25),
- ?line ets:insert(OrdSet,{Key,Value}),
- ?line ets:insert(Set,{Key,Value})
+ Key = create_random_tuple(25),
+ ets:insert(OrdSet,{Key,Value}),
+ ets:insert(Set,{Key,Value})
end, 500),
io:format("~nData inserted~n"),
do_n_times(fun() ->
- ?line Key =
+ Key =
create_partly_bound_tuple(25),
ets:match_delete(OrdSet,{Key,'_'}),
ets:match_delete(Set,{Key,'_'}),
@@ -1587,16 +1486,13 @@ do_random_test() ->
10),
ets:delete(OrdSet),
ets:delete(Set),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
-update_element(doc) ->
- ["test various variants of update_element"];
-update_element(suite) ->
- [];
+%% Ttest various variants of update_element.
update_element(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(update_element_opts),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
update_element_opts(Opts) ->
TupleCases = [{{key,val}, 1 ,2},
@@ -1606,12 +1502,12 @@ update_element_opts(Opts) ->
{{val,key,val,val}, 2, [3,4,1]},
{{val,val,key,val}, 3, [1,4,1,2]}, % update pos1 twice
{{val,val,val,key}, 4, [2,1,2,3]}],% update pos2 twice
-
+
lists:foreach(fun({Tuple,KeyPos,UpdPos}) -> update_element_opts(Tuple,KeyPos,UpdPos,Opts) end,
TupleCases),
-
+
update_element_neg(Opts).
-
+
update_element_opts(Tuple,KeyPos,UpdPos,Opts) ->
@@ -1630,16 +1526,15 @@ update_element(T,Tuple,KeyPos,UpdPos) ->
update_element_do(T,TupleWithKey,Key,UpdPos)
end,
KeyList).
-
+
update_element_do(Tab,Tuple,Key,UpdPos) ->
- % Strategy: Step around in Values array and call ets:update_element for the values.
- % Take Length number of steps of size 1, then of size 2, ..., Length-1.
- % This will try all combinations of {fromValue,toValue}
- %
- % IMPORTANT: size(Values) must be a prime number for this to work!!!
+ %% Strategy: Step around in Values array and call ets:update_element for the values.
+ %% Take Length number of steps of size 1, then of size 2, ..., Length-1.
+ %% This will try all combinations of {fromValue,toValue}
+ %%
+ %% IMPORTANT: size(Values) must be a prime number for this to work!!!
- %io:format("update_element_do for key=~p\n",[Key]),
Big32 = 16#12345678,
Big64 = 16#123456789abcdef0,
Values = { 623, -27, 0, Big32, -Big32, Big64, -Big64, Big32*Big32,
@@ -1649,14 +1544,14 @@ update_element_do(Tab,Tuple,Key,UpdPos) ->
(fun(X) -> X*Big32 end),
make_ref(), make_ref(), self(), ok, update_element, 28, 29 },
Length = size(Values),
-
+
PosValArgF = fun(ToIx, ResList, [Pos | PosTail], Rand, MeF) ->
NextIx = (ToIx+Rand) rem Length,
MeF(NextIx, [{Pos,element(ToIx+1,Values)} | ResList], PosTail, Rand, MeF);
(_ToIx, ResList, [], _Rand, _MeF) ->
ResList;
-
+
(ToIx, [], Pos, _Rand, _MeF) ->
{Pos, element(ToIx+1,Values)} % single {pos,value} arg
end,
@@ -1665,10 +1560,10 @@ update_element_do(Tab,Tuple,Key,UpdPos) ->
PosValArg = PosValArgF(ToIx,[],UpdPos,Rand,PosValArgF),
%%io:format("update_element(~p)~n",[PosValArg]),
ArgHash = erlang:phash2({Tab,Key,PosValArg}),
- ?line true = ets:update_element(Tab, Key, PosValArg),
- ?line ArgHash = erlang:phash2({Tab,Key,PosValArg}),
+ true = ets:update_element(Tab, Key, PosValArg),
+ ArgHash = erlang:phash2({Tab,Key,PosValArg}),
NewTuple = update_tuple(PosValArg,Tuple),
- ?line [NewTuple] = ets:lookup(Tab,Key)
+ [NewTuple] = ets:lookup(Tab,Key)
end,
LoopF = fun(_FromIx, Incr, _Times, Checksum, _MeF) when Incr >= Length ->
@@ -1688,11 +1583,11 @@ update_element_do(Tab,Tuple,Key,UpdPos) ->
end,
FirstTuple = Tuple,
- ?line true = ets:insert(Tab,FirstTuple),
- ?line [FirstTuple] = ets:lookup(Tab,Key),
-
+ true = ets:insert(Tab,FirstTuple),
+ [FirstTuple] = ets:lookup(Tab,Key),
+
Checksum = LoopF(0, 1, Length, 0, LoopF),
- ?line Checksum = (Length-1)*Length*(Length+1) div 2, % if Length is a prime
+ Checksum = (Length-1)*Length*(Length+1) div 2, % if Length is a prime
ok.
update_tuple({Pos,Val}, Tpl) ->
@@ -1710,14 +1605,14 @@ update_element_neg(Opts) ->
update_element_neg_do(Set),
update_element_neg_do(OrdSet),
ets:delete(Set),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_element(Set,key,{2,1})),
+ {'EXIT',{badarg,_}} = (catch ets:update_element(Set,key,{2,1})),
ets:delete(OrdSet),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_element(OrdSet,key,{2,1})),
+ {'EXIT',{badarg,_}} = (catch ets:update_element(OrdSet,key,{2,1})),
- ?line Bag = ets_new(bag,[bag | Opts]),
- ?line DBag = ets_new(duplicate_bag,[duplicate_bag | Opts]),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_element(Bag,key,{2,1})),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_element(DBag,key,{2,1})),
+ Bag = ets_new(bag,[bag | Opts]),
+ DBag = ets_new(duplicate_bag,[duplicate_bag | Opts]),
+ {'EXIT',{badarg,_}} = (catch ets:update_element(Bag,key,{2,1})),
+ {'EXIT',{badarg,_}} = (catch ets:update_element(DBag,key,{2,1})),
true = ets:delete(Bag),
true = ets:delete(DBag),
ok.
@@ -1725,13 +1620,13 @@ update_element_neg(Opts) ->
update_element_neg_do(T) ->
Object = {key, 0, "Hej"},
- ?line true = ets:insert(T,Object),
+ true = ets:insert(T,Object),
UpdateF = fun(Arg3) ->
ArgHash = erlang:phash2({T,key,Arg3}),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_element(T,key,Arg3)),
- ?line ArgHash = erlang:phash2({T,key,Arg3}),
- ?line [Object] = ets:lookup(T,key)
+ {'EXIT',{badarg,_}} = (catch ets:update_element(T,key,Arg3)),
+ ArgHash = erlang:phash2({T,key,Arg3}),
+ [Object] = ets:lookup(T,key)
end,
%% List of invalid {Pos,Value} tuples
@@ -1747,22 +1642,19 @@ update_element_neg_do(T) ->
UpdateF([{2,1} | {3,1}]),
lists:foreach(fun(InvTpl) -> UpdateF([{2,1} | InvTpl]) end, InvList),
- ?line true = ets:update_element(T,key,[]),
- ?line false = ets:update_element(T,false,[]),
- ?line false = ets:update_element(T,false,{2,1}),
- ?line ets:delete(T,key),
- ?line false = ets:update_element(T,key,{2,1}),
+ true = ets:update_element(T,key,[]),
+ false = ets:update_element(T,false,[]),
+ false = ets:update_element(T,false,{2,1}),
+ ets:delete(T,key),
+ false = ets:update_element(T,key,{2,1}),
ok.
-update_counter(doc) ->
- ["test various variants of update_counter"];
-update_counter(suite) ->
- [];
+%% test various variants of update_counter.
update_counter(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(update_counter_do),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
update_counter_do(Opts) ->
Set = ets_new(set,Opts),
@@ -1782,26 +1674,26 @@ update_counter_do(Opts) ->
update_counter_neg(Opts).
update_counter_for(T) ->
- ?line ets:insert(T,{a,1,1}),
- ?line 101 = ets:update_counter(T,a,100),
- ?line [{a,101,1}] = ets:lookup(T,a),
- ?line 101 = ets:update_counter(T,a,{3,100}),
- ?line [{a,101,101}] = ets:lookup(T,a),
+ ets:insert(T,{a,1,1}),
+ 101 = ets:update_counter(T,a,100),
+ [{a,101,1}] = ets:lookup(T,a),
+ 101 = ets:update_counter(T,a,{3,100}),
+ [{a,101,101}] = ets:lookup(T,a),
LooperF = fun(Obj, 0, _, _) ->
Obj;
-
+
(Obj, Times, Arg3, Myself) ->
- ?line {NewObj, Ret} = uc_mimic(Obj,Arg3),
+ {NewObj, Ret} = uc_mimic(Obj,Arg3),
ArgHash = erlang:phash2({T,a,Arg3}),
%%io:format("update_counter(~p, ~p, ~p) expecting ~p\n",[T,a,Arg3,Ret]),
[DefaultObj] = ets:lookup(T, a),
- ?line Ret = ets:update_counter(T,a,Arg3),
+ Ret = ets:update_counter(T,a,Arg3),
Ret = ets:update_counter(T, b, Arg3, DefaultObj), % Use other key
- ?line ArgHash = erlang:phash2({T,a,Arg3}),
+ ArgHash = erlang:phash2({T,a,Arg3}),
%%io:format("NewObj=~p~n ",[NewObj]),
- ?line [NewObj] = ets:lookup(T,a),
+ [NewObj] = ets:lookup(T,a),
true = ets:lookup(T, b) =:= [setelement(1, NewObj, b)],
ets:delete(T, b),
Myself(NewObj,Times-1,Arg3,Myself)
@@ -1819,78 +1711,78 @@ update_counter_for(T) ->
Steps = 100,
Obj0 = {a,0,0,0,0},
- ?line ets:insert(T,Obj0),
- ?line Obj1 = LoopF(Obj0, Steps, {2,(SmallMax32 div Steps)*2}),
- ?line Obj2 = LoopF(Obj1, Steps, {3,(SmallMax64 div Steps)*2}),
- ?line Obj3 = LoopF(Obj2, Steps, {4,(Big1Max32 div Steps)*2}),
- ?line Obj4 = LoopF(Obj3, Steps, {5,(Big1Max64 div Steps)*2}),
-
- ?line Obj5 = LoopF(Obj4, Steps, {2,-(SmallMax32 div Steps)*4}),
- ?line Obj6 = LoopF(Obj5, Steps, {3,-(SmallMax64 div Steps)*4}),
- ?line Obj7 = LoopF(Obj6, Steps, {4,-(Big1Max32 div Steps)*4}),
- ?line Obj8 = LoopF(Obj7, Steps, {5,-(Big1Max64 div Steps)*4}),
-
- ?line Obj9 = LoopF(Obj8, Steps, {2,(SmallMax32 div Steps)*2}),
- ?line ObjA = LoopF(Obj9, Steps, {3,(SmallMax64 div Steps)*2}),
- ?line ObjB = LoopF(ObjA, Steps, {4,(Big1Max32 div Steps)*2}),
- ?line Obj0 = LoopF(ObjB, Steps, {5,(Big1Max64 div Steps)*2}),
+ ets:insert(T,Obj0),
+ Obj1 = LoopF(Obj0, Steps, {2,(SmallMax32 div Steps)*2}),
+ Obj2 = LoopF(Obj1, Steps, {3,(SmallMax64 div Steps)*2}),
+ Obj3 = LoopF(Obj2, Steps, {4,(Big1Max32 div Steps)*2}),
+ Obj4 = LoopF(Obj3, Steps, {5,(Big1Max64 div Steps)*2}),
+
+ Obj5 = LoopF(Obj4, Steps, {2,-(SmallMax32 div Steps)*4}),
+ Obj6 = LoopF(Obj5, Steps, {3,-(SmallMax64 div Steps)*4}),
+ Obj7 = LoopF(Obj6, Steps, {4,-(Big1Max32 div Steps)*4}),
+ Obj8 = LoopF(Obj7, Steps, {5,-(Big1Max64 div Steps)*4}),
+
+ Obj9 = LoopF(Obj8, Steps, {2,(SmallMax32 div Steps)*2}),
+ ObjA = LoopF(Obj9, Steps, {3,(SmallMax64 div Steps)*2}),
+ ObjB = LoopF(ObjA, Steps, {4,(Big1Max32 div Steps)*2}),
+ Obj0 = LoopF(ObjB, Steps, {5,(Big1Max64 div Steps)*2}),
%% back at zero, same trip again with lists
- ?line Obj4 = LoopF(Obj0,Steps,[{2, (SmallMax32 div Steps)*2},
- {3, (SmallMax64 div Steps)*2},
- {4, (Big1Max32 div Steps)*2},
- {5, (Big1Max64 div Steps)*2}]),
+ Obj4 = LoopF(Obj0,Steps,[{2, (SmallMax32 div Steps)*2},
+ {3, (SmallMax64 div Steps)*2},
+ {4, (Big1Max32 div Steps)*2},
+ {5, (Big1Max64 div Steps)*2}]),
- ?line Obj8 = LoopF(Obj4,Steps,[{4, -(Big1Max32 div Steps)*4},
- {2, -(SmallMax32 div Steps)*4},
- {5, -(Big1Max64 div Steps)*4},
- {3, -(SmallMax64 div Steps)*4}]),
+ Obj8 = LoopF(Obj4,Steps,[{4, -(Big1Max32 div Steps)*4},
+ {2, -(SmallMax32 div Steps)*4},
+ {5, -(Big1Max64 div Steps)*4},
+ {3, -(SmallMax64 div Steps)*4}]),
- ?line Obj0 = LoopF(Obj8,Steps,[{5, (Big1Max64 div Steps)*2},
- {2, (SmallMax32 div Steps)*2},
- {4, (Big1Max32 div Steps)*2},
- {3, (SmallMax64 div Steps)*2}]),
+ Obj0 = LoopF(Obj8,Steps,[{5, (Big1Max64 div Steps)*2},
+ {2, (SmallMax32 div Steps)*2},
+ {4, (Big1Max32 div Steps)*2},
+ {3, (SmallMax64 div Steps)*2}]),
%% make them shift size at the same time
- ?line ObjC = LoopF(Obj0,Steps,[{5, (Big1Max64 div Steps)*2},
- {3, (Big1Max64 div Steps)*2 + 1},
- {2, -(Big1Max64 div Steps)*2},
- {4, -(Big1Max64 div Steps)*2 + 1}]),
+ ObjC = LoopF(Obj0,Steps,[{5, (Big1Max64 div Steps)*2},
+ {3, (Big1Max64 div Steps)*2 + 1},
+ {2, -(Big1Max64 div Steps)*2},
+ {4, -(Big1Max64 div Steps)*2 + 1}]),
%% update twice in same list
- ?line ObjD = LoopF(ObjC,Steps,[{5, -(Big1Max64 div Steps) + 1},
- {3, -(Big1Max64 div Steps)*2 - 1},
- {5, -(Big1Max64 div Steps) - 1},
- {4, (Big1Max64 div Steps)*2 - 1}]),
+ ObjD = LoopF(ObjC,Steps,[{5, -(Big1Max64 div Steps) + 1},
+ {3, -(Big1Max64 div Steps)*2 - 1},
+ {5, -(Big1Max64 div Steps) - 1},
+ {4, (Big1Max64 div Steps)*2 - 1}]),
- ?line Obj0 = LoopF(ObjD,Steps,[{2, (Big1Max64 div Steps) - 1},
- {4, Big1Max64*2},
- {2, (Big1Max64 div Steps) + 1},
- {4, -Big1Max64*2}]),
+ Obj0 = LoopF(ObjD,Steps,[{2, (Big1Max64 div Steps) - 1},
+ {4, Big1Max64*2},
+ {2, (Big1Max64 div Steps) + 1},
+ {4, -Big1Max64*2}]),
%% warping with list
- ?line ObjE = LoopF(Obj0,1000,
- [{3,SmallMax32*4 div 5,SmallMax32*2,-SmallMax32*2},
- {5,-SmallMax64*4 div 7,-SmallMax64*2,SmallMax64*2},
- {4,-Big1Max32*4 div 11,-Big1Max32*2,Big1Max32*2},
- {2,Big1Max64*4 div 13,Big1Max64*2,-Big1Max64*2}]),
+ ObjE = LoopF(Obj0,1000,
+ [{3,SmallMax32*4 div 5,SmallMax32*2,-SmallMax32*2},
+ {5,-SmallMax64*4 div 7,-SmallMax64*2,SmallMax64*2},
+ {4,-Big1Max32*4 div 11,-Big1Max32*2,Big1Max32*2},
+ {2,Big1Max64*4 div 13,Big1Max64*2,-Big1Max64*2}]),
%% warping without list
- ?line ObjF = LoopF(ObjE,1000,{3,SmallMax32*4 div 5,SmallMax32*2,-SmallMax32*2}),
- ?line ObjG = LoopF(ObjF,1000,{5,-SmallMax64*4 div 7,-SmallMax64*2,SmallMax64*2}),
- ?line ObjH = LoopF(ObjG,1000,{4,-Big1Max32*4 div 11,-Big1Max32*2,Big1Max32*2}),
- ?line ObjI = LoopF(ObjH,1000,{2,Big1Max64*4 div 13,Big1Max64*2,-Big1Max64*2}),
+ ObjF = LoopF(ObjE,1000,{3,SmallMax32*4 div 5,SmallMax32*2,-SmallMax32*2}),
+ ObjG = LoopF(ObjF,1000,{5,-SmallMax64*4 div 7,-SmallMax64*2,SmallMax64*2}),
+ ObjH = LoopF(ObjG,1000,{4,-Big1Max32*4 div 11,-Big1Max32*2,Big1Max32*2}),
+ ObjI = LoopF(ObjH,1000,{2,Big1Max64*4 div 13,Big1Max64*2,-Big1Max64*2}),
%% mixing it up
- ?line LoopF(ObjI,1000,
- [{3,SmallMax32*4 div 5,SmallMax32*2,-SmallMax32*2},
- {5,-SmallMax64*4 div 3},
- {3,-SmallMax32*4 div 11},
- {5,0},
- {4,1},
- {5,-SmallMax64*4 div 7,-SmallMax64*2,SmallMax64*2},
- {2,Big1Max64*4 div 13,Big1Max64*2,-Big1Max64*2}]),
+ LoopF(ObjI,1000,
+ [{3,SmallMax32*4 div 5,SmallMax32*2,-SmallMax32*2},
+ {5,-SmallMax64*4 div 3},
+ {3,-SmallMax32*4 div 11},
+ {5,0},
+ {4,1},
+ {5,-SmallMax64*4 div 7,-SmallMax64*2,SmallMax64*2},
+ {2,Big1Max64*4 div 13,Big1Max64*2,-Big1Max64*2}]),
ok.
%% uc_mimic works kind of like the real ets:update_counter
@@ -1898,19 +1790,19 @@ update_counter_for(T) ->
%% Pits = {Pos,Incr} | {Pos,Incr,Thres,Warp}
%% Returns {Updated tuple in ets, Return value from update_counter}
uc_mimic(Obj, Pits) when is_tuple(Pits) ->
- ?line Pos = element(1,Pits),
- ?line NewObj = setelement(Pos, Obj, uc_adder(element(Pos,Obj),Pits)),
- ?line {NewObj, element(Pos,NewObj)};
+ Pos = element(1,Pits),
+ NewObj = setelement(Pos, Obj, uc_adder(element(Pos,Obj),Pits)),
+ {NewObj, element(Pos,NewObj)};
uc_mimic(Obj, PitsList) when is_list(PitsList) ->
- ?line {NewObj,ValList} = uc_mimic(Obj,PitsList,[]),
- ?line {NewObj,lists:reverse(ValList)}.
+ {NewObj,ValList} = uc_mimic(Obj,PitsList,[]),
+ {NewObj,lists:reverse(ValList)}.
uc_mimic(Obj, [], Acc) ->
- ?line {Obj,Acc};
+ {Obj,Acc};
uc_mimic(Obj, [Pits|Tail], Acc) ->
- ?line {NewObj,NewVal} = uc_mimic(Obj,Pits),
- ?line uc_mimic(NewObj,Tail,[NewVal|Acc]).
+ {NewObj,NewVal} = uc_mimic(Obj,Pits),
+ uc_mimic(NewObj,Tail,[NewVal|Acc]).
uc_adder(Init, {_Pos, Add}) ->
Init + Add;
@@ -1923,34 +1815,34 @@ uc_adder(Init, {_Pos, Add, Thres, Warp}) ->
Z ->
Z
end.
-
+
update_counter_neg(Opts) ->
Set = ets_new(set,Opts),
OrdSet = ets_new(ordered_set,[ordered_set | Opts]),
update_counter_neg_for(Set),
update_counter_neg_for(OrdSet),
ets:delete(Set),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_counter(Set,key,1)),
+ {'EXIT',{badarg,_}} = (catch ets:update_counter(Set,key,1)),
ets:delete(OrdSet),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_counter(OrdSet,key,1)),
+ {'EXIT',{badarg,_}} = (catch ets:update_counter(OrdSet,key,1)),
- ?line Bag = ets_new(bag,[bag | Opts]),
- ?line DBag = ets_new(duplicate_bag,[duplicate_bag | Opts]),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_counter(Bag,key,1)),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_counter(DBag,key,1)),
+ Bag = ets_new(bag,[bag | Opts]),
+ DBag = ets_new(duplicate_bag,[duplicate_bag | Opts]),
+ {'EXIT',{badarg,_}} = (catch ets:update_counter(Bag,key,1)),
+ {'EXIT',{badarg,_}} = (catch ets:update_counter(DBag,key,1)),
true = ets:delete(Bag),
true = ets:delete(DBag),
ok.
update_counter_neg_for(T) ->
Object = {key,0,false,1},
- ?line true = ets:insert(T,Object),
+ true = ets:insert(T,Object),
UpdateF = fun(Arg3) ->
ArgHash = erlang:phash2({T,key,Arg3}),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_counter(T,key,Arg3)),
- ?line ArgHash = erlang:phash2({T,key,Arg3}),
- ?line [Object] = ets:lookup(T,key)
+ {'EXIT',{badarg,_}} = (catch ets:update_counter(T,key,Arg3)),
+ ArgHash = erlang:phash2({T,key,Arg3}),
+ [Object] = ets:lookup(T,key)
end,
%% List of invalid arg3-tuples
@@ -1968,28 +1860,28 @@ update_counter_neg_for(T) ->
UpdateF([{2,1} | {4,1}]),
lists:foreach(fun(Inv) -> UpdateF([{2,1} | Inv]) end, InvList),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_counter(T,false,1)),
- ?line ets:delete(T,key),
- ?line {'EXIT',{badarg,_}} = (catch ets:update_counter(T,key,1)),
+ {'EXIT',{badarg,_}} = (catch ets:update_counter(T,false,1)),
+ ets:delete(T,key),
+ {'EXIT',{badarg,_}} = (catch ets:update_counter(T,key,1)),
ok.
-
+
evil_update_counter(Config) when is_list(Config) ->
%% The code server uses ets table. Pre-load modules that might not be
%% already loaded.
gb_sets:module_info(),
math:module_info(),
ordsets:module_info(),
- random:module_info(),
+ rand:module_info(),
repeat_for_opts(evil_update_counter_do).
evil_update_counter_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line process_flag(trap_exit, true),
- ?line Pids = [my_spawn_link(fun() -> evil_counter(I,Opts) end) || I <- lists:seq(1, 40)],
- ?line wait_for_all(gb_sets:from_list(Pids)),
- ?line verify_etsmem(EtsMem),
+ EtsMem = etsmem(),
+ process_flag(trap_exit, true),
+ Pids = [my_spawn_link(fun() -> evil_counter(I,Opts) end) || I <- lists:seq(1, 40)],
+ wait_for_all(gb_sets:from_list(Pids)),
+ verify_etsmem(EtsMem),
ok.
wait_for_all(Pids0) ->
@@ -1999,22 +1891,22 @@ wait_for_all(Pids0) ->
false ->
receive
{'EXIT',Pid,normal} ->
- ?line Pids = gb_sets:delete(Pid, Pids0),
+ Pids = gb_sets:delete(Pid, Pids0),
wait_for_all(Pids);
Other ->
io:format("unexpected: ~p\n", [Other]),
- ?line ?t:fail()
+ ct:fail(failed)
end
end.
evil_counter(I,Opts) ->
T = ets_new(a, Opts),
Start0 = case I rem 3 of
- 0 -> 16#12345678;
- 1 -> 16#12345678FFFFFFFF;
- 2 -> 16#7777777777FFFFFFFF863648726743
- end,
- Start = Start0 + random:uniform(100000),
+ 0 -> 16#12345678;
+ 1 -> 16#12345678FFFFFFFF;
+ 2 -> 16#7777777777FFFFFFFF863648726743
+ end,
+ Start = Start0 + rand:uniform(100000),
ets:insert(T, {dracula,Start}),
Iter = 40000,
End = Start + Iter,
@@ -2029,7 +1921,7 @@ evil_counter_1(Iter, T) ->
evil_counter_1(Iter-1, T).
update_counter_with_default(Config) when is_list(Config) ->
- repeat_for_opts(update_counter_with_default_do).
+ repeat_for_opts(update_counter_with_default_do).
update_counter_with_default_do(Opts) ->
T1 = ets_new(a, [set | Opts]),
@@ -2076,20 +1968,17 @@ update_counter_table_growth_do(Opts) ->
[ets:update_counter(OrderedSet, N, {2, 1}, {N, 1}) || N <- lists:seq(1,10000)],
ok.
-fixtable_next(doc) ->
- ["Check that a first-next sequence always works on a fixed table"];
-fixtable_next(suite) ->
- [];
+%% Check that a first-next sequence always works on a fixed table.
fixtable_next(Config) when is_list(Config) ->
repeat_for_opts(fixtable_next_do, [write_concurrency,all_types]).
fixtable_next_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line do_fixtable_next(ets_new(set,[public | Opts])),
- ?line verify_etsmem(EtsMem).
-
+ EtsMem = etsmem(),
+ do_fixtable_next(ets_new(set,[public | Opts])),
+ verify_etsmem(EtsMem).
+
do_fixtable_next(Tab) ->
- ?line F = fun(X,T,FF) -> case X of
+ F = fun(X,T,FF) -> case X of
0 -> true;
_ ->
ets:insert(T, {X,
@@ -2098,74 +1987,70 @@ do_fixtable_next(Tab) ->
FF(X-1,T,FF)
end
end,
- ?line F(100,Tab,F),
- ?line ets:safe_fixtable(Tab,true),
- ?line First = ets:first(Tab),
- ?line ets:delete(Tab, First),
- ?line ets:next(Tab, First),
- ?line ets:match_delete(Tab,{'_','_','_'}),
- ?line '$end_of_table' = ets:next(Tab, First),
- ?line true = ets:info(Tab, fixed),
- ?line ets:safe_fixtable(Tab, false),
- ?line false = ets:info(Tab, fixed),
- ?line ets:delete(Tab).
-
-fixtable_insert(doc) ->
- ["Check inserts of deleted keys in fixed bags"];
-fixtable_insert(suite) ->
- [];
+ F(100,Tab,F),
+ ets:safe_fixtable(Tab,true),
+ First = ets:first(Tab),
+ ets:delete(Tab, First),
+ ets:next(Tab, First),
+ ets:match_delete(Tab,{'_','_','_'}),
+ '$end_of_table' = ets:next(Tab, First),
+ true = ets:info(Tab, fixed),
+ ets:safe_fixtable(Tab, false),
+ false = ets:info(Tab, fixed),
+ ets:delete(Tab).
+
+%% Check inserts of deleted keys in fixed bags.
fixtable_insert(Config) when is_list(Config) ->
Combos = [[Type,{write_concurrency,WC}] || Type<- [bag,duplicate_bag],
WC <- [false,true]],
lists:foreach(fun(Opts) -> fixtable_insert_do(Opts) end,
Combos),
ok.
-
+
fixtable_insert_do(Opts) ->
io:format("Opts = ~p\n",[Opts]),
Ets = make_table(ets, Opts, [{a,1}, {a,2}, {b,1}, {b,2}]),
ets:safe_fixtable(Ets,true),
ets:match_delete(Ets,{b,1}),
First = ets:first(Ets),
- ?line Next = case First of
- a -> b;
- b -> a
- end,
- ?line Next = ets:next(Ets,First),
+ Next = case First of
+ a -> b;
+ b -> a
+ end,
+ Next = ets:next(Ets,First),
ets:delete(Ets,Next),
- ?line '$end_of_table' = ets:next(Ets,First),
+ '$end_of_table' = ets:next(Ets,First),
ets:insert(Ets, {Next,1}),
- ?line false = ets:insert_new(Ets, {Next,1}),
- ?line Next = ets:next(Ets,First),
- ?line '$end_of_table' = ets:next(Ets,Next),
+ false = ets:insert_new(Ets, {Next,1}),
+ Next = ets:next(Ets,First),
+ '$end_of_table' = ets:next(Ets,Next),
ets:delete(Ets,Next),
'$end_of_table' = ets:next(Ets,First),
ets:insert(Ets, {Next,2}),
- ?line false = ets:insert_new(Ets, {Next,1}),
+ false = ets:insert_new(Ets, {Next,1}),
Next = ets:next(Ets,First),
'$end_of_table' = ets:next(Ets,Next),
ets:delete(Ets,First),
- ?line Next = ets:first(Ets),
- ?line '$end_of_table' = ets:next(Ets,Next),
+ Next = ets:first(Ets),
+ '$end_of_table' = ets:next(Ets,Next),
ets:delete(Ets,Next),
- ?line '$end_of_table' = ets:next(Ets,First),
- ?line true = ets:insert_new(Ets,{Next,1}),
- ?line false = ets:insert_new(Ets,{Next,2}),
- ?line Next = ets:next(Ets,First),
+ '$end_of_table' = ets:next(Ets,First),
+ true = ets:insert_new(Ets,{Next,1}),
+ false = ets:insert_new(Ets,{Next,2}),
+ Next = ets:next(Ets,First),
ets:delete_object(Ets,{Next,1}),
- ?line '$end_of_table' = ets:next(Ets,First),
- ?line true = ets:insert_new(Ets,{Next,2}),
- ?line false = ets:insert_new(Ets,{Next,1}),
- ?line Next = ets:next(Ets,First),
+ '$end_of_table' = ets:next(Ets,First),
+ true = ets:insert_new(Ets,{Next,2}),
+ false = ets:insert_new(Ets,{Next,1}),
+ Next = ets:next(Ets,First),
ets:delete(Ets,First),
ets:safe_fixtable(Ets,false),
{'EXIT',{badarg,_}} = (catch ets:next(Ets,First)),
ok.
-write_concurrency(doc) -> ["The 'write_concurrency' option"];
-write_concurrency(suite) -> [];
+%% Test the 'write_concurrency' option.
write_concurrency(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
Yes1 = ets_new(foo,[public,{write_concurrency,true}]),
Yes2 = ets_new(foo,[protected,{write_concurrency,true}]),
No1 = ets_new(foo,[private,{write_concurrency,true}]),
@@ -2185,50 +2070,49 @@ write_concurrency(Config) when is_list(Config) ->
No7 = ets_new(foo,[public,{write_concurrency,false}]),
No8 = ets_new(foo,[protected,{write_concurrency,false}]),
- ?line YesMem = ets:info(Yes1,memory),
- ?line NoHashMem = ets:info(No1,memory),
- ?line NoTreeMem = ets:info(No4,memory),
+ YesMem = ets:info(Yes1,memory),
+ NoHashMem = ets:info(No1,memory),
+ NoTreeMem = ets:info(No4,memory),
io:format("YesMem=~p NoHashMem=~p NoTreeMem=~p\n",[YesMem,NoHashMem,NoTreeMem]),
- ?line YesMem = ets:info(Yes2,memory),
- ?line YesMem = ets:info(Yes3,memory),
- ?line YesMem = ets:info(Yes4,memory),
- ?line YesMem = ets:info(Yes5,memory),
- ?line YesMem = ets:info(Yes6,memory),
- ?line NoHashMem = ets:info(No2,memory),
- ?line NoHashMem = ets:info(No3,memory),
- ?line NoTreeMem = ets:info(No5,memory),
- ?line NoTreeMem = ets:info(No6,memory),
- ?line NoHashMem = ets:info(No7,memory),
- ?line NoHashMem = ets:info(No8,memory),
-
+ YesMem = ets:info(Yes2,memory),
+ YesMem = ets:info(Yes3,memory),
+ YesMem = ets:info(Yes4,memory),
+ YesMem = ets:info(Yes5,memory),
+ YesMem = ets:info(Yes6,memory),
+ NoHashMem = ets:info(No2,memory),
+ NoHashMem = ets:info(No3,memory),
+ NoTreeMem = ets:info(No5,memory),
+ NoTreeMem = ets:info(No6,memory),
+ NoHashMem = ets:info(No7,memory),
+ NoHashMem = ets:info(No8,memory),
+
case erlang:system_info(smp_support) of
true ->
- ?line true = YesMem > NoHashMem,
- ?line true = YesMem > NoTreeMem;
+ true = YesMem > NoHashMem,
+ true = YesMem > NoTreeMem;
false ->
- ?line true = YesMem =:= NoHashMem
+ true = YesMem =:= NoHashMem
end,
- ?line {'EXIT',{badarg,_}} = (catch ets_new(foo,[public,{write_concurrency,foo}])),
- ?line {'EXIT',{badarg,_}} = (catch ets_new(foo,[public,{write_concurrency}])),
- ?line {'EXIT',{badarg,_}} = (catch ets_new(foo,[public,{write_concurrency,true,foo}])),
- ?line {'EXIT',{badarg,_}} = (catch ets_new(foo,[public,write_concurrency])),
+ {'EXIT',{badarg,_}} = (catch ets_new(foo,[public,{write_concurrency,foo}])),
+ {'EXIT',{badarg,_}} = (catch ets_new(foo,[public,{write_concurrency}])),
+ {'EXIT',{badarg,_}} = (catch ets_new(foo,[public,{write_concurrency,true,foo}])),
+ {'EXIT',{badarg,_}} = (catch ets_new(foo,[public,write_concurrency])),
lists:foreach(fun(T) -> ets:delete(T) end,
[Yes1,Yes2,Yes3,Yes4,Yes5,Yes6,
No1,No2,No3,No4,No5,No6,No7,No8]),
- ?line verify_etsmem(EtsMem),
+ verify_etsmem(EtsMem),
ok.
-
-
-heir(doc) -> ["The 'heir' option"];
-heir(suite) -> [];
+
+
+%% The 'heir' option.
heir(Config) when is_list(Config) ->
repeat_for_opts(heir_do).
heir_do(Opts) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
Master = self(),
%% Different types of heir data and link/monitor relations
@@ -2237,33 +2121,33 @@ heir_do(Opts) ->
lists:seq(1,10), {17,TestFun,self()},
"The busy heir"],
Mode<-[none,link,monitor]],
- ?line lists:foreach(fun({Data,Mode})-> heir_1(Data,Mode,Opts) end,
- Combos),
-
+ lists:foreach(fun({Data,Mode})-> heir_1(Data,Mode,Opts) end,
+ Combos),
+
%% No heir
{Founder1,MrefF1} = my_spawn_monitor(fun()->heir_founder(Master,foo_data,Opts)end),
Founder1 ! {go, none},
- ?line {"No heir",Founder1} = receive_any(),
- ?line {'DOWN', MrefF1, process, Founder1, normal} = receive_any(),
- ?line undefined = ets:info(foo),
+ {"No heir",Founder1} = receive_any(),
+ {'DOWN', MrefF1, process, Founder1, normal} = receive_any(),
+ undefined = ets:info(foo),
%% An already dead heir
{Heir2,MrefH2} = my_spawn_monitor(fun()->die end),
- ?line {'DOWN', MrefH2, process, Heir2, normal} = receive_any(),
+ {'DOWN', MrefH2, process, Heir2, normal} = receive_any(),
{Founder2,MrefF2} = my_spawn_monitor(fun()->heir_founder(Master,foo_data,Opts)end),
Founder2 ! {go, Heir2},
- ?line {"No heir",Founder2} = receive_any(),
- ?line {'DOWN', MrefF2, process, Founder2, normal} = receive_any(),
- ?line undefined = ets:info(foo),
+ {"No heir",Founder2} = receive_any(),
+ {'DOWN', MrefF2, process, Founder2, normal} = receive_any(),
+ undefined = ets:info(foo),
%% When heir dies before founder
{Founder3,MrefF3} = my_spawn_monitor(fun()->heir_founder(Master,"The dying heir",Opts)end),
{Heir3,MrefH3} = my_spawn_monitor(fun()->heir_heir(Founder3)end),
Founder3 ! {go, Heir3},
- ?line {'DOWN', MrefH3, process, Heir3, normal} = receive_any(),
+ {'DOWN', MrefH3, process, Heir3, normal} = receive_any(),
Founder3 ! die_please,
- ?line {'DOWN', MrefF3, process, Founder3, normal} = receive_any(),
- ?line undefined = ets:info(foo),
+ {'DOWN', MrefF3, process, Founder3, normal} = receive_any(),
+ undefined = ets:info(foo),
%% When heir dies and pid reused before founder dies
repeat_while(fun() ->
@@ -2271,238 +2155,235 @@ heir_do(Opts) ->
{Founder4,MrefF4} = my_spawn_monitor(fun()->heir_founder(Master,"The dying heir",Opts)end),
{Heir4,MrefH4} = my_spawn_monitor(fun()->heir_heir(Founder4)end),
Founder4 ! {go, Heir4},
- ?line {'DOWN', MrefH4, process, Heir4, normal} = receive_any(),
+ {'DOWN', MrefH4, process, Heir4, normal} = receive_any(),
erts_debug:set_internal_state(next_pid, NextPidIx),
DoppelGanger = spawn_monitor_with_pid(Heir4,
- fun()-> ?line die_please = receive_any() end),
+ fun()-> die_please = receive_any() end),
Founder4 ! die_please,
- ?line {'DOWN', MrefF4, process, Founder4, normal} = receive_any(),
+ {'DOWN', MrefF4, process, Founder4, normal} = receive_any(),
case DoppelGanger of
{Heir4,MrefH4_B} ->
Heir4 ! die_please,
- ?line {'DOWN', MrefH4_B, process, Heir4, normal} = receive_any(),
- ?line undefined = ets:info(foo),
+ {'DOWN', MrefH4_B, process, Heir4, normal} = receive_any(),
+ undefined = ets:info(foo),
false;
failed ->
io:format("Failed to spawn process with pid ~p\n", [Heir4]),
true % try again
end
end),
-
- ?line verify_etsmem(EtsMem).
+
+ verify_etsmem(EtsMem).
heir_founder(Master, HeirData, Opts) ->
- ?line {go,Heir} = receive_any(),
+ {go,Heir} = receive_any(),
HeirTpl = case Heir of
none -> {heir,none};
_ -> {heir, Heir, HeirData}
end,
- ?line T = ets_new(foo,[named_table, private, HeirTpl | Opts]),
- ?line true = ets:insert(T,{key,1}),
- ?line [{key,1}] = ets:lookup(T,key),
+ T = ets_new(foo,[named_table, private, HeirTpl | Opts]),
+ true = ets:insert(T,{key,1}),
+ [{key,1}] = ets:lookup(T,key),
Self = self(),
- ?line Self = ets:info(T,owner),
- ?line case ets:info(T,heir) of
- none ->
- ?line true = (Heir =:= none) orelse (not is_process_alive(Heir)),
- Master ! {"No heir",self()};
-
- Heir ->
- ?line true = is_process_alive(Heir),
- Heir ! {table,T,HeirData},
- die_please = receive_any()
- end.
+ Self = ets:info(T,owner),
+ case ets:info(T,heir) of
+ none ->
+ true = (Heir =:= none) orelse (not is_process_alive(Heir)),
+ Master ! {"No heir",self()};
+
+ Heir ->
+ true = is_process_alive(Heir),
+ Heir ! {table,T,HeirData},
+ die_please = receive_any()
+ end.
heir_heir(Founder) ->
heir_heir(Founder, none).
heir_heir(Founder, Mode) ->
- ?line {table,T,HeirData} = receive_any(),
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(T,key)),
- ?line case HeirData of
- "The dying heir" -> exit(normal);
- _ -> ok
- end,
+ {table,T,HeirData} = receive_any(),
+ {'EXIT',{badarg,_}} = (catch ets:lookup(T,key)),
+ case HeirData of
+ "The dying heir" -> exit(normal);
+ _ -> ok
+ end,
- ?line Mref = case Mode of
- link -> process_flag(trap_exit, true),
- link(Founder);
- monitor -> erlang:monitor(process,Founder);
- none -> ok
- end,
- ?line Founder ! die_please,
- ?line Msg = case HeirData of
- "The busy heir" -> receive_any_spinning();
- _ -> receive_any()
- end,
- ?line {'ETS-TRANSFER', T, Founder, HeirData} = Msg,
- ?line foo = T,
- ?line Self = self(),
- ?line Self = ets:info(T,owner),
- ?line Self = ets:info(T,heir),
- ?line [{key,1}] = ets:lookup(T,key),
- ?line true = ets:insert(T,{key,2}),
- ?line [{key,2}] = ets:lookup(T,key),
- ?line case Mode of % Verify that EXIT or DOWN comes after ETS-TRANSFER
- link ->
- {'EXIT',Founder,normal} = receive_any(),
- process_flag(trap_exit, false);
- monitor ->
- {'DOWN', Mref, process, Founder, normal} = receive_any();
- none -> ok
- end.
+ Mref = case Mode of
+ link -> process_flag(trap_exit, true),
+ link(Founder);
+ monitor -> erlang:monitor(process,Founder);
+ none -> ok
+ end,
+ Founder ! die_please,
+ Msg = case HeirData of
+ "The busy heir" -> receive_any_spinning();
+ _ -> receive_any()
+ end,
+ {'ETS-TRANSFER', T, Founder, HeirData} = Msg,
+ foo = T,
+ Self = self(),
+ Self = ets:info(T,owner),
+ Self = ets:info(T,heir),
+ [{key,1}] = ets:lookup(T,key),
+ true = ets:insert(T,{key,2}),
+ [{key,2}] = ets:lookup(T,key),
+ case Mode of % Verify that EXIT or DOWN comes after ETS-TRANSFER
+ link ->
+ {'EXIT',Founder,normal} = receive_any(),
+ process_flag(trap_exit, false);
+ monitor ->
+ {'DOWN', Mref, process, Founder, normal} = receive_any();
+ none -> ok
+ end.
heir_1(HeirData,Mode,Opts) ->
io:format("test with heir_data = ~p\n", [HeirData]),
Master = self(),
- ?line Founder = my_spawn_link(fun() -> heir_founder(Master,HeirData,Opts) end),
+ Founder = my_spawn_link(fun() -> heir_founder(Master,HeirData,Opts) end),
io:format("founder spawned = ~p\n", [Founder]),
- ?line {Heir,Mref} = my_spawn_monitor(fun() -> heir_heir(Founder,Mode) end),
+ {Heir,Mref} = my_spawn_monitor(fun() -> heir_heir(Founder,Mode) end),
io:format("heir spawned = ~p\n", [{Heir,Mref}]),
- ?line Founder ! {go, Heir},
- ?line {'DOWN', Mref, process, Heir, normal} = receive_any().
+ Founder ! {go, Heir},
+ {'DOWN', Mref, process, Heir, normal} = receive_any().
-give_away(doc) -> ["ets:give_way/3"];
-give_away(suite) -> [];
+%% Test ets:give_way/3.
give_away(Config) when is_list(Config) ->
repeat_for_opts(give_away_do).
give_away_do(Opts) ->
- ?line T = ets_new(foo,[named_table, private | Opts]),
- ?line true = ets:insert(T,{key,1}),
- ?line [{key,1}] = ets:lookup(T,key),
+ T = ets_new(foo,[named_table, private | Opts]),
+ true = ets:insert(T,{key,1}),
+ [{key,1}] = ets:lookup(T,key),
Parent = self(),
%% Give and then give back
- ?line {Receiver,Mref} = my_spawn_monitor(fun()-> give_away_receiver(T,Parent) end),
- ?line give_me = receive_any(),
- ?line true = ets:give_away(T,Receiver,here_you_are),
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(T,key)),
- ?line Receiver ! give_back,
- ?line {'ETS-TRANSFER',T,Receiver,"Tillbakakaka"} = receive_any(),
- ?line [{key,2}] = ets:lookup(T,key),
- ?line {'DOWN', Mref, process, Receiver, normal} = receive_any(),
+ {Receiver,Mref} = my_spawn_monitor(fun()-> give_away_receiver(T,Parent) end),
+ give_me = receive_any(),
+ true = ets:give_away(T,Receiver,here_you_are),
+ {'EXIT',{badarg,_}} = (catch ets:lookup(T,key)),
+ Receiver ! give_back,
+ {'ETS-TRANSFER',T,Receiver,"Tillbakakaka"} = receive_any(),
+ [{key,2}] = ets:lookup(T,key),
+ {'DOWN', Mref, process, Receiver, normal} = receive_any(),
%% Give and then let receiver keep it
- ?line true = ets:insert(T,{key,1}),
- ?line {Receiver3,Mref3} = my_spawn_monitor(fun()-> give_away_receiver(T,Parent) end),
- ?line give_me = receive_any(),
- ?line true = ets:give_away(T,Receiver3,here_you_are),
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(T,key)),
- ?line Receiver3 ! die_please,
- ?line {'DOWN', Mref3, process, Receiver3, normal} = receive_any(),
- ?line undefined = ets:info(T),
+ true = ets:insert(T,{key,1}),
+ {Receiver3,Mref3} = my_spawn_monitor(fun()-> give_away_receiver(T,Parent) end),
+ give_me = receive_any(),
+ true = ets:give_away(T,Receiver3,here_you_are),
+ {'EXIT',{badarg,_}} = (catch ets:lookup(T,key)),
+ Receiver3 ! die_please,
+ {'DOWN', Mref3, process, Receiver3, normal} = receive_any(),
+ undefined = ets:info(T),
%% Give and then kill receiver to get back
- ?line T2 = ets_new(foo,[private | Opts]),
- ?line true = ets:insert(T2,{key,1}),
- ?line ets:setopts(T2,{heir,self(),"Som en gummiboll..."}),
- ?line {Receiver2,Mref2} = my_spawn_monitor(fun()-> give_away_receiver(T2,Parent) end),
- ?line give_me = receive_any(),
- ?line true = ets:give_away(T2,Receiver2,here_you_are),
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(T2,key)),
- ?line Receiver2 ! die_please,
- ?line {'ETS-TRANSFER',T2,Receiver2,"Som en gummiboll..."} = receive_any(),
- ?line [{key,2}] = ets:lookup(T2,key),
- ?line {'DOWN', Mref2, process, Receiver2, normal} = receive_any(),
+ T2 = ets_new(foo,[private | Opts]),
+ true = ets:insert(T2,{key,1}),
+ ets:setopts(T2,{heir,self(),"Som en gummiboll..."}),
+ {Receiver2,Mref2} = my_spawn_monitor(fun()-> give_away_receiver(T2,Parent) end),
+ give_me = receive_any(),
+ true = ets:give_away(T2,Receiver2,here_you_are),
+ {'EXIT',{badarg,_}} = (catch ets:lookup(T2,key)),
+ Receiver2 ! die_please,
+ {'ETS-TRANSFER',T2,Receiver2,"Som en gummiboll..."} = receive_any(),
+ [{key,2}] = ets:lookup(T2,key),
+ {'DOWN', Mref2, process, Receiver2, normal} = receive_any(),
%% Some negative testing
- ?line {'EXIT',{badarg,_}} = (catch ets:give_away(T2,Receiver,"To a dead one")),
- ?line {'EXIT',{badarg,_}} = (catch ets:give_away(T2,self(),"To myself")),
- ?line {'EXIT',{badarg,_}} = (catch ets:give_away(T2,"not a pid","To wrong type")),
+ {'EXIT',{badarg,_}} = (catch ets:give_away(T2,Receiver,"To a dead one")),
+ {'EXIT',{badarg,_}} = (catch ets:give_away(T2,self(),"To myself")),
+ {'EXIT',{badarg,_}} = (catch ets:give_away(T2,"not a pid","To wrong type")),
- ?line true = ets:delete(T2),
- ?line {ReceiverNeg,MrefNeg} = my_spawn_monitor(fun()-> give_away_receiver(T2,Parent) end),
- ?line give_me = receive_any(),
- ?line {'EXIT',{badarg,_}} = (catch ets:give_away(T2,ReceiverNeg,"A deleted table")),
+ true = ets:delete(T2),
+ {ReceiverNeg,MrefNeg} = my_spawn_monitor(fun()-> give_away_receiver(T2,Parent) end),
+ give_me = receive_any(),
+ {'EXIT',{badarg,_}} = (catch ets:give_away(T2,ReceiverNeg,"A deleted table")),
- ?line T3 = ets_new(foo,[public | Opts]),
+ T3 = ets_new(foo,[public | Opts]),
my_spawn_link(fun()-> {'EXIT',{badarg,_}} = (catch ets:give_away(T3,ReceiverNeg,"From non owner")),
- Parent ! done
- end),
- ?line done = receive_any(),
- ?line ReceiverNeg ! no_soup_for_you,
- ?line {'DOWN', MrefNeg, process, ReceiverNeg, normal} = receive_any(),
+ Parent ! done
+ end),
+ done = receive_any(),
+ ReceiverNeg ! no_soup_for_you,
+ {'DOWN', MrefNeg, process, ReceiverNeg, normal} = receive_any(),
ok.
give_away_receiver(T, Giver) ->
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(T,key)),
- ?line Giver ! give_me,
- ?line case receive_any() of
- {'ETS-TRANSFER',T,Giver,here_you_are} ->
- ?line [{key,1}] = ets:lookup(T,key),
- ?line true = ets:insert(T,{key,2}),
- ?line case receive_any() of
- give_back ->
- ?line true = ets:give_away(T,Giver,"Tillbakakaka"),
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(T,key));
- die_please ->
- ok
- end;
- no_soup_for_you ->
- ok
- end.
-
-
-setopts(doc) -> ["ets:setopts/2"];
-setopts(suite) -> [];
+ {'EXIT',{badarg,_}} = (catch ets:lookup(T,key)),
+ Giver ! give_me,
+ case receive_any() of
+ {'ETS-TRANSFER',T,Giver,here_you_are} ->
+ [{key,1}] = ets:lookup(T,key),
+ true = ets:insert(T,{key,2}),
+ case receive_any() of
+ give_back ->
+ true = ets:give_away(T,Giver,"Tillbakakaka"),
+ {'EXIT',{badarg,_}} = (catch ets:lookup(T,key));
+ die_please ->
+ ok
+ end;
+ no_soup_for_you ->
+ ok
+ end.
+
+
+%% Test ets:setopts/2.
setopts(Config) when is_list(Config) ->
repeat_for_opts(setopts_do,[write_concurrency,all_types]).
setopts_do(Opts) ->
Self = self(),
- ?line T = ets_new(foo,[named_table, private | Opts]),
- ?line none = ets:info(T,heir),
+ T = ets_new(foo,[named_table, private | Opts]),
+ none = ets:info(T,heir),
Heir = my_spawn_link(fun()->heir_heir(Self) end),
- ?line ets:setopts(T,{heir,Heir,"Data"}),
- ?line Heir = ets:info(T,heir),
- ?line ets:setopts(T,{heir,self(),"Data"}),
- ?line Self = ets:info(T,heir),
- ?line ets:setopts(T,[{heir,Heir,"Data"}]),
- ?line Heir = ets:info(T,heir),
- ?line ets:setopts(T,[{heir,none}]),
- ?line none = ets:info(T,heir),
-
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,[{heir,self(),"Data"},false])),
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,{heir,self()})),
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,{heir,false})),
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,heir)),
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,{heir,false,"Data"})),
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,{false,self(),"Data"})),
-
- ?line ets:setopts(T,{protection,protected}),
- ?line ets:setopts(T,{protection,public}),
- ?line ets:setopts(T,{protection,private}),
- ?line ets:setopts(T,[{protection,protected}]),
- ?line ets:setopts(T,[{protection,public}]),
- ?line ets:setopts(T,[{protection,private}]),
-
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,{protection})),
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,{protection,false})),
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,{protection,private,false})),
- ?line {'EXIT',{badarg,_}} = (catch ets:setopts(T,protection)),
- ?line ets:delete(T),
+ ets:setopts(T,{heir,Heir,"Data"}),
+ Heir = ets:info(T,heir),
+ ets:setopts(T,{heir,self(),"Data"}),
+ Self = ets:info(T,heir),
+ ets:setopts(T,[{heir,Heir,"Data"}]),
+ Heir = ets:info(T,heir),
+ ets:setopts(T,[{heir,none}]),
+ none = ets:info(T,heir),
+
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,[{heir,self(),"Data"},false])),
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,{heir,self()})),
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,{heir,false})),
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,heir)),
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,{heir,false,"Data"})),
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,{false,self(),"Data"})),
+
+ ets:setopts(T,{protection,protected}),
+ ets:setopts(T,{protection,public}),
+ ets:setopts(T,{protection,private}),
+ ets:setopts(T,[{protection,protected}]),
+ ets:setopts(T,[{protection,public}]),
+ ets:setopts(T,[{protection,private}]),
+
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,{protection})),
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,{protection,false})),
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,{protection,private,false})),
+ {'EXIT',{badarg,_}} = (catch ets:setopts(T,protection)),
+ ets:delete(T),
unlink(Heir),
exit(Heir, bang),
ok.
-bad_table(doc) -> ["All kinds of operations with bad table argument"];
-bad_table(suite) -> [];
+%% All kinds of operations with bad table argument.
bad_table(Config) when is_list(Config) ->
%% Open and close disk_log to stabilize etsmem.
Name = make_ref(),
- ?line File = filename:join([?config(priv_dir, Config),"bad_table.dummy"]),
- ?line {ok, Name} = disk_log:open([{name, Name}, {file, File}]),
- ?line disk_log:close(Name),
+ File = filename:join([proplists:get_value(priv_dir, Config),"bad_table.dummy"]),
+ {ok, Name} = disk_log:open([{name, Name}, {file, File}]),
+ disk_log:close(Name),
file:delete(File),
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(fun(Opts) -> bad_table_do(Opts,File) end,
[write_concurrency, all_types]),
- ?line verify_etsmem(EtsMem),
+ verify_etsmem(EtsMem),
ok.
bad_table_do(Opts, DummyFile) ->
@@ -2586,26 +2467,23 @@ bad_table_op({Opts,Priv,Prot}, Op) ->
end.
bad_table_call(T,{F,Args,_}) ->
- ?line {'EXIT',{badarg,_}} = (catch apply(ets, F, [T|Args]));
+ {'EXIT',{badarg,_}} = (catch apply(ets, F, [T|Args]));
bad_table_call(T,{F,Args,_,tabarg_last}) ->
- ?line {'EXIT',{badarg,_}} = (catch apply(ets, F, Args++[T]));
+ {'EXIT',{badarg,_}} = (catch apply(ets, F, Args++[T]));
bad_table_call(T,{F,Args,_,{return,Return}}) ->
try
- ?line Return = apply(ets, F, [T|Args])
+ Return = apply(ets, F, [T|Args])
catch
error:badarg -> ok
end.
-rename(doc) ->
- ["Check rename of ets tables"];
-rename(suite) ->
- [];
+%% Check rename of ets tables.
rename(Config) when is_list(Config) ->
repeat_for_opts(rename_do, [write_concurrency, all_types]).
rename_do(Opts) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
ets_new(foobazz,[named_table, public | Opts]),
ets:insert(foobazz,{foo,bazz}),
ungermanbazz = ets:rename(foobazz,ungermanbazz),
@@ -2613,42 +2491,39 @@ rename_do(Opts) ->
[{foo,bazz}] = ets:lookup(ungermanbazz,foo),
{'EXIT',{badarg,_}} = (catch ets:rename(ungermanbazz,"no atom")),
ets:delete(ungermanbazz),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
-rename_unnamed(doc) ->
- ["Check rename of unnamed ets table"];
-rename_unnamed(suite) ->
- [];
+%% Check rename of unnamed ets table.
rename_unnamed(Config) when is_list(Config) ->
repeat_for_opts(rename_unnamed_do,[write_concurrency,all_types]).
rename_unnamed_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(bonkz,[public | Opts]),
- ?line {'EXIT',{badarg, _}} = (catch ets:insert(bonkz,{foo,bazz})),
- ?line bonkz = ets:info(Tab, name),
- ?line Tab = ets:rename(Tab, tjabonkz),
- ?line {'EXIT',{badarg, _}} = (catch ets:insert(tjabonkz,{foo,bazz})),
- ?line tjabonkz = ets:info(Tab, name),
- ?line ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-evil_rename(doc) ->
- "Rename a table with many fixations, and at the same time delete it.";
+ EtsMem = etsmem(),
+ Tab = ets_new(bonkz,[public | Opts]),
+ {'EXIT',{badarg, _}} = (catch ets:insert(bonkz,{foo,bazz})),
+ bonkz = ets:info(Tab, name),
+ Tab = ets:rename(Tab, tjabonkz),
+ {'EXIT',{badarg, _}} = (catch ets:insert(tjabonkz,{foo,bazz})),
+ tjabonkz = ets:info(Tab, name),
+ ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Rename a table with many fixations, and at the same time delete it.
evil_rename(Config) when is_list(Config) ->
- ?line evil_rename_1(old_hash, new_hash, [public,named_table]),
- ?line EtsMem = etsmem(),
- ?line evil_rename_1(old_tree, new_tree, [public,ordered_set,named_table]),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ evil_rename_1(old_hash, new_hash, [public,named_table]),
+ evil_rename_1(old_tree, new_tree, [public,ordered_set,named_table]),
+ wait_for_test_procs(true),
+ verify_etsmem(EtsMem).
evil_rename_1(Old, New, Flags) ->
- ?line process_flag(trap_exit, true),
- ?line Old = ets_new(Old, Flags),
- ?line Fixer = fun() -> ets:safe_fixtable(Old, true) end,
- ?line crazy_fixtable(15000, Fixer),
- ?line erlang:yield(),
- ?line New = ets:rename(Old, New),
- ?line erlang:yield(),
+ process_flag(trap_exit, true),
+ Old = ets_new(Old, Flags),
+ Fixer = fun() -> ets:safe_fixtable(Old, true) end,
+ crazy_fixtable(15000, Fixer),
+ erlang:yield(),
+ New = ets:rename(Old, New),
+ erlang:yield(),
ets:delete(New),
ok.
@@ -2679,7 +2554,8 @@ crazy_fixtable_wait(N, Dracula) ->
crazy_fixtable_1(0, _) ->
ok;
crazy_fixtable_1(N, Fun) ->
- spawn_link(Fun),
+ %%FIXME my_spawn_link(Fun),
+ my_spawn_link(Fun),
crazy_fixtable_1(N-1, Fun).
evil_creater_destroyer() ->
@@ -2691,19 +2567,16 @@ evil_create_fixed_tab() ->
ets:safe_fixtable(T, true),
T.
-interface_equality(doc) ->
- ["Tests that the return values and errors are equal for set's and"
- " ordered_set's where applicable"];
-interface_equality(suite) ->
- [];
+%% Tests that the return values and errors are equal for set's and
+%% ordered_set's where applicable.
interface_equality(Config) when is_list(Config) ->
repeat_for_opts(interface_equality_do).
interface_equality_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Set = ets_new(set,[set | Opts]),
- ?line OrderedSet = ets_new(ordered_set,[ordered_set | Opts]),
- ?line F = fun(X,T,FF) -> case X of
+ EtsMem = etsmem(),
+ Set = ets_new(set,[set | Opts]),
+ OrderedSet = ets_new(ordered_set,[ordered_set | Opts]),
+ F = fun(X,T,FF) -> case X of
0 -> true;
_ ->
ets:insert(T, {X,
@@ -2712,38 +2585,38 @@ interface_equality_do(Opts) ->
FF(X-1,T,FF)
end
end,
- ?line F(100,Set,F),
- ?line F(100,OrderedSet,F),
- ?line equal_results(ets, insert, Set, OrderedSet, [{a,"a"}]),
- ?line equal_results(ets, insert, Set, OrderedSet, [{1,1,"1"}]),
- ?line equal_results(ets, lookup, Set, OrderedSet, [10]),
- ?line equal_results(ets, lookup, Set, OrderedSet, [1000]),
- ?line equal_results(ets, delete, Set, OrderedSet, [10]),
- ?line equal_results(ets, delete, Set, OrderedSet, [nott]),
- ?line equal_results(ets, lookup, Set, OrderedSet, [1000]),
- ?line equal_results(ets, insert, Set, OrderedSet, [10]),
- ?line equal_results(ets, next, Set, OrderedSet, ['$end_of_table']),
- ?line equal_results(ets, prev, Set, OrderedSet, ['$end_of_table']),
- ?line equal_results(ets, match, Set, OrderedSet, [{'_','_','_'}]),
- ?line equal_results(ets, match, Set, OrderedSet, [{'_','_','_','_'}]),
- ?line equal_results(ets, match, Set, OrderedSet, [{$3,$2,2}]),
- ?line equal_results(ets, match, Set, OrderedSet, ['_']),
- ?line equal_results(ets, match, Set, OrderedSet, ['$1']),
- ?line equal_results(ets, match, Set, OrderedSet, [{'_','$50',3}]),
- ?line equal_results(ets, match, Set, OrderedSet, [['_','$50',3]]),
- ?line equal_results(ets, match_delete, Set, OrderedSet, [{'_','_',4}]),
- ?line equal_results(ets, match_delete, Set, OrderedSet, [{'_','_',4}]),
- ?line equal_results(ets, match_object, Set, OrderedSet, [{'_','_',4}]),
- ?line equal_results(ets, match_object, Set, OrderedSet, [{'_','_',5}]),
- ?line equal_results(ets, match_object, Set, OrderedSet, [{'_','_',4}]),
- ?line equal_results(ets, match_object, Set, OrderedSet, ['_']),
- ?line equal_results(ets, match_object, Set, OrderedSet, ['$5011']),
- ?line equal_results(ets, match_delete, Set, OrderedSet, ['$20']),
- ?line equal_results(ets, lookup_element, Set, OrderedSet, [13,2]),
- ?line equal_results(ets, lookup_element, Set, OrderedSet, [13,4]),
- ?line equal_results(ets, lookup_element, Set, OrderedSet, [14,2]),
- ?line equal_results(ets, delete, Set, OrderedSet, []),
- ?line verify_etsmem(EtsMem).
+ F(100,Set,F),
+ F(100,OrderedSet,F),
+ equal_results(ets, insert, Set, OrderedSet, [{a,"a"}]),
+ equal_results(ets, insert, Set, OrderedSet, [{1,1,"1"}]),
+ equal_results(ets, lookup, Set, OrderedSet, [10]),
+ equal_results(ets, lookup, Set, OrderedSet, [1000]),
+ equal_results(ets, delete, Set, OrderedSet, [10]),
+ equal_results(ets, delete, Set, OrderedSet, [nott]),
+ equal_results(ets, lookup, Set, OrderedSet, [1000]),
+ equal_results(ets, insert, Set, OrderedSet, [10]),
+ equal_results(ets, next, Set, OrderedSet, ['$end_of_table']),
+ equal_results(ets, prev, Set, OrderedSet, ['$end_of_table']),
+ equal_results(ets, match, Set, OrderedSet, [{'_','_','_'}]),
+ equal_results(ets, match, Set, OrderedSet, [{'_','_','_','_'}]),
+ equal_results(ets, match, Set, OrderedSet, [{$3,$2,2}]),
+ equal_results(ets, match, Set, OrderedSet, ['_']),
+ equal_results(ets, match, Set, OrderedSet, ['$1']),
+ equal_results(ets, match, Set, OrderedSet, [{'_','$50',3}]),
+ equal_results(ets, match, Set, OrderedSet, [['_','$50',3]]),
+ equal_results(ets, match_delete, Set, OrderedSet, [{'_','_',4}]),
+ equal_results(ets, match_delete, Set, OrderedSet, [{'_','_',4}]),
+ equal_results(ets, match_object, Set, OrderedSet, [{'_','_',4}]),
+ equal_results(ets, match_object, Set, OrderedSet, [{'_','_',5}]),
+ equal_results(ets, match_object, Set, OrderedSet, [{'_','_',4}]),
+ equal_results(ets, match_object, Set, OrderedSet, ['_']),
+ equal_results(ets, match_object, Set, OrderedSet, ['$5011']),
+ equal_results(ets, match_delete, Set, OrderedSet, ['$20']),
+ equal_results(ets, lookup_element, Set, OrderedSet, [13,2]),
+ equal_results(ets, lookup_element, Set, OrderedSet, [13,4]),
+ equal_results(ets, lookup_element, Set, OrderedSet, [14,2]),
+ equal_results(ets, delete, Set, OrderedSet, []),
+ verify_etsmem(EtsMem).
equal_results(M, F, FirstArg1, FirstArg2 ,ACommon) ->
Res = maybe_sort((catch apply(M,F, [FirstArg1 | ACommon]))),
@@ -2751,8 +2624,6 @@ equal_results(M, F, FirstArg1, FirstArg2 ,ACommon) ->
maybe_sort(L) when is_list(L) ->
lists:sort(L);
-%maybe_sort({'EXIT',{Reason, [{Module, Function, _}|_]}}) ->
-% {'EXIT',{Reason, [{Module, Function, '_'}]}};
maybe_sort({'EXIT',{Reason, List}}) when is_list(List) ->
{'EXIT',{Reason, lists:map(fun({Module, Function, _, _}) ->
{Module, Function, '_'}
@@ -2761,30 +2632,27 @@ maybe_sort({'EXIT',{Reason, List}}) when is_list(List) ->
maybe_sort(Any) ->
Any.
-ordered_match(doc) ->
- ["Test match, match_object and match_delete in ordered set's"];
-ordered_match(suite) ->
- [];
+%% Test match, match_object and match_delete in ordered set's.
ordered_match(Config) when is_list(Config)->
repeat_for_opts(ordered_match_do).
ordered_match_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line F = fun(X,T,FF) -> case X of
- 0 -> true;
- _ ->
- ets:insert(T, {X,
- integer_to_list(X),
- X rem 10,
- X rem 100,
- X rem 1000}),
- FF(X-1,T,FF)
- end
+ EtsMem = etsmem(),
+ F = fun(X,T,FF) -> case X of
+ 0 -> true;
+ _ ->
+ ets:insert(T, {X,
+ integer_to_list(X),
+ X rem 10,
+ X rem 100,
+ X rem 1000}),
+ FF(X-1,T,FF)
+ end
end,
- ?line T1 = ets_new(xxx,[ordered_set| Opts]),
- ?line F(3000,T1,F),
- ?line [[3,3],[3,3],[3,3]] = ets:match(T1, {'_','_','$1','$2',3}),
- ?line F2 = fun(X,Rem,Res,FF) -> case X of
+ T1 = ets_new(xxx,[ordered_set| Opts]),
+ F(3000,T1,F),
+ [[3,3],[3,3],[3,3]] = ets:match(T1, {'_','_','$1','$2',3}),
+ F2 = fun(X,Rem,Res,FF) -> case X of
0 -> [];
_ ->
case X rem Rem of
@@ -2800,166 +2668,153 @@ ordered_match_do(Opts) ->
end
end
end,
- ?line OL1 = F2(3000,100,2,F2),
- ?line OL1 = ets:match_object(T1, {'_','_','_',2,'_'}),
- ?line true = ets:match_delete(T1,{'_','_','_',2,'_'}),
- ?line [] = ets:match_object(T1, {'_','_','_',2,'_'}),
- ?line OL2 = F2(3000,100,3,F2),
- ?line OL2 = ets:match_object(T1, {'_','_','_',3,'_'}),
- ?line ets:delete(T1),
- ?line verify_etsmem(EtsMem).
-
-
-ordered(doc) ->
- ["Test basic functionality in ordered_set's."];
-ordered(suite) ->
- [];
+ OL1 = F2(3000,100,2,F2),
+ OL1 = ets:match_object(T1, {'_','_','_',2,'_'}),
+ true = ets:match_delete(T1,{'_','_','_',2,'_'}),
+ [] = ets:match_object(T1, {'_','_','_',2,'_'}),
+ OL2 = F2(3000,100,3,F2),
+ OL2 = ets:match_object(T1, {'_','_','_',3,'_'}),
+ ets:delete(T1),
+ verify_etsmem(EtsMem).
+
+
+%% Test basic functionality in ordered_set's.
ordered(Config) when is_list(Config) ->
repeat_for_opts(ordered_do).
ordered_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line T = ets_new(oset, [ordered_set | Opts]),
- ?line InsList = [
- 25,26,27,28,
- 5,6,7,8,
- 21,22,23,24,
- 9,10,11,12,
- 1,2,3,4,
- 17,18,19,20,
- 13,14,15,16,
- 1 bsl 33
- ],
- ?line lists:foreach(fun(X) ->
+ EtsMem = etsmem(),
+ T = ets_new(oset, [ordered_set | Opts]),
+ InsList = [
+ 25,26,27,28,
+ 5,6,7,8,
+ 21,22,23,24,
+ 9,10,11,12,
+ 1,2,3,4,
+ 17,18,19,20,
+ 13,14,15,16,
+ 1 bsl 33
+ ],
+ lists:foreach(fun(X) ->
ets:insert(T,{X,integer_to_list(X)})
end,
InsList),
- ?line IL2 = lists:map(fun(X) -> {X,integer_to_list(X)} end, InsList),
- ?line L1 = pick_all_forward(T),
- ?line L2 = pick_all_backwards(T),
- ?line S1 = lists:sort(IL2),
- ?line S2 = lists:reverse(lists:sort(IL2)),
- ?line S1 = L1,
- ?line S2 = L2,
- ?line [{1,"1"}] = ets:slot(T,0),
- ?line [{28,"28"}] = ets:slot(T,27),
- ?line [{1 bsl 33,_}] = ets:slot(T,28),
- ?line 27 = ets:prev(T,28),
- ?line [{7,"7"}] = ets:slot(T,6),
- ?line '$end_of_table' = ets:next(T,1 bsl 33),
- ?line [{12,"12"}] = ets:slot(T,11),
- ?line '$end_of_table' = ets:slot(T,29),
- ?line [{1,"1"}] = ets:slot(T,0),
- ?line 28 = ets:prev(T,1 bsl 33),
- ?line 1 = ets:next(T,0),
- ?line pick_all_forward(T),
- ?line [{7,"7"}] = ets:slot(T,6),
- ?line L2 = pick_all_backwards(T),
- ?line [{7,"7"}] = ets:slot(T,6),
- ?line ets:delete(T),
- ?line verify_etsmem(EtsMem).
+ IL2 = lists:map(fun(X) -> {X,integer_to_list(X)} end, InsList),
+ L1 = pick_all_forward(T),
+ L2 = pick_all_backwards(T),
+ S1 = lists:sort(IL2),
+ S2 = lists:reverse(lists:sort(IL2)),
+ S1 = L1,
+ S2 = L2,
+ [{1,"1"}] = ets:slot(T,0),
+ [{28,"28"}] = ets:slot(T,27),
+ [{1 bsl 33,_}] = ets:slot(T,28),
+ 27 = ets:prev(T,28),
+ [{7,"7"}] = ets:slot(T,6),
+ '$end_of_table' = ets:next(T,1 bsl 33),
+ [{12,"12"}] = ets:slot(T,11),
+ '$end_of_table' = ets:slot(T,29),
+ [{1,"1"}] = ets:slot(T,0),
+ 28 = ets:prev(T,1 bsl 33),
+ 1 = ets:next(T,0),
+ pick_all_forward(T),
+ [{7,"7"}] = ets:slot(T,6),
+ L2 = pick_all_backwards(T),
+ [{7,"7"}] = ets:slot(T,6),
+ ets:delete(T),
+ verify_etsmem(EtsMem).
pick_all(_T,'$end_of_table',_How) ->
[];
pick_all(T,Last,How) ->
- ?line This = case How of
+ This = case How of
next ->
- ?line ets:next(T,Last);
+ ets:next(T,Last);
prev ->
- ?line ets:prev(T,Last)
+ ets:prev(T,Last)
end,
- ?line [LastObj] = ets:lookup(T,Last),
- ?line [LastObj | pick_all(T,This,How)].
+ [LastObj] = ets:lookup(T,Last),
+ [LastObj | pick_all(T,This,How)].
pick_all_forward(T) ->
- ?line pick_all(T,ets:first(T),next).
+ pick_all(T,ets:first(T),next).
pick_all_backwards(T) ->
- ?line pick_all(T,ets:last(T),prev).
-
-
+ pick_all(T,ets:last(T),prev).
+
-setbag(doc) -> ["Small test case for both set and bag type ets tables."];
-setbag(suite) -> [];
+
+%% Small test case for both set and bag type ets tables.
setbag(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line Set = ets_new(set,[set]),
- ?line Bag = ets_new(bag,[bag]),
- ?line Key = {foo,bar},
-
+ EtsMem = etsmem(),
+ Set = ets_new(set,[set]),
+ Bag = ets_new(bag,[bag]),
+ Key = {foo,bar},
+
%% insert some value
- ?line ets:insert(Set,{Key,val1}),
- ?line ets:insert(Bag,{Key,val1}),
-
+ ets:insert(Set,{Key,val1}),
+ ets:insert(Bag,{Key,val1}),
+
%% insert new value for same key again
- ?line ets:insert(Set,{Key,val2}),
- ?line ets:insert(Bag,{Key,val2}),
-
+ ets:insert(Set,{Key,val2}),
+ ets:insert(Bag,{Key,val2}),
+
%% check
- ?line [{Key,val2}] = ets:lookup(Set,Key),
- ?line [{Key,val1},{Key,val2}] = ets:lookup(Bag,Key),
+ [{Key,val2}] = ets:lookup(Set,Key),
+ [{Key,val1},{Key,val2}] = ets:lookup(Bag,Key),
true = ets:delete(Set),
true = ets:delete(Bag),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
-badnew(doc) ->
- ["Test case to check proper return values for illegal ets_new() calls."];
-badnew(suite) -> [];
+%% Test case to check proper return values for illegal ets_new() calls.
badnew(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line {'EXIT',{badarg,_}} = (catch ets_new(12,[])),
- ?line {'EXIT',{badarg,_}} = (catch ets_new({a,b},[])),
- ?line {'EXIT',{badarg,_}} = (catch ets_new(name,[foo])),
- ?line {'EXIT',{badarg,_}} = (catch ets_new(name,{bag})),
- ?line {'EXIT',{badarg,_}} = (catch ets_new(name,bag)),
- ?line verify_etsmem(EtsMem).
-
-verybadnew(doc) ->
- ["Test case to check that a not well formed list does not crash the "
- "emulator. OTP-2314 "];
-verybadnew(suite) -> [];
+ EtsMem = etsmem(),
+ {'EXIT',{badarg,_}} = (catch ets_new(12,[])),
+ {'EXIT',{badarg,_}} = (catch ets_new({a,b},[])),
+ {'EXIT',{badarg,_}} = (catch ets_new(name,[foo])),
+ {'EXIT',{badarg,_}} = (catch ets_new(name,{bag})),
+ {'EXIT',{badarg,_}} = (catch ets_new(name,bag)),
+ verify_etsmem(EtsMem).
+
+%% OTP-2314. Test case to check that a non-proper list does not
+%% crash the emulator.
verybadnew(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line {'EXIT',{badarg,_}} = (catch ets_new(verybad,[set|protected])),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ {'EXIT',{badarg,_}} = (catch ets_new(verybad,[set|protected])),
+ verify_etsmem(EtsMem).
-named(doc) -> ["Small check to see if named tables work."];
-named(suite) -> [];
+%% Small check to see if named tables work.
named(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line Tab = make_table(foo,
- [named_table],
- [{key,val}]),
- ?line [{key,val}] = ets:lookup(foo,key),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-keypos2(doc) -> ["Test case to check if specified keypos works."];
-keypos2(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = make_table(foo,
+ [named_table],
+ [{key,val}]),
+ [{key,val}] = ets:lookup(foo,key),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Test case to check if specified keypos works.
keypos2(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line Tab = make_table(foo,
- [set,{keypos,2}],
- [{val,key}, {val2,key}]),
- ?line [{val2,key}] = ets:lookup(Tab,key),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-privacy(doc) ->
- ["Privacy check. Check that a named(public/private/protected) table "
- "cannot be read by",
- "the wrong process(es)."];
-privacy(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = make_table(foo,
+ [set,{keypos,2}],
+ [{val,key}, {val2,key}]),
+ [{val2,key}] = ets:lookup(Tab,key),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Privacy check. Check that a named(public/private/protected) table
+%% cannot be read by the wrong process(es).
privacy(Config) when is_list(Config) ->
repeat_for_opts(privacy_do).
privacy_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line process_flag(trap_exit,true),
- ?line Owner = my_spawn_link(?MODULE,privacy_owner,[self(),Opts]),
+ EtsMem = etsmem(),
+ process_flag(trap_exit,true),
+ Owner = my_spawn_link(?MODULE,privacy_owner,[self(),Opts]),
receive
{'EXIT',Owner,Reason} ->
- ?line exit({privacy_test,Reason});
+ exit({privacy_test,Reason});
ok ->
ok
end,
@@ -2967,34 +2822,41 @@ privacy_do(Opts) ->
privacy_check(pub,prot,priv),
Owner ! {shift,1,{pub,prot,priv}},
- receive {Pub1,Prot1,Priv1} -> ok end,
- privacy_check(Pub1,Prot1,Priv1),
+ receive
+ {Pub1,Prot1,Priv1} ->
+ ok = privacy_check(Pub1,Prot1,Priv1),
+ Owner ! {shift,2,{Pub1,Prot1,Priv1}}
+ end,
- Owner ! {shift,2,{Pub1,Prot1,Priv1}},
- receive {Pub2,Prot2,Priv2} -> ok end,
- privacy_check(Pub2,Prot2,Priv2),
+ receive
+ {Pub2,Prot2,Priv2} ->
+ ok = privacy_check(Pub2,Prot2,Priv2),
+ Owner ! {shift,0,{Pub2,Prot2,Priv2}}
+ end,
- Owner ! {shift,0,{Pub2,Prot2,Priv2}},
- receive {Pub2,Prot2,Priv2} -> ok end,
- privacy_check(Pub2,Prot2,Priv2),
+ receive
+ {Pub3,Prot3,Priv3} ->
+ ok = privacy_check(Pub3,Prot3,Priv3)
+ end,
Owner ! die,
receive {'EXIT',Owner,_} -> ok end,
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
privacy_check(Pub,Prot,Priv) ->
%% check read rights
- ?line [] = ets:lookup(Pub, foo),
- ?line [] = ets:lookup(Prot,foo),
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(Priv,foo)),
+ [] = ets:lookup(Pub, foo),
+ [] = ets:lookup(Prot,foo),
+ {'EXIT',{badarg,_}} = (catch ets:lookup(Priv,foo)),
%% check write rights
- ?line true = ets:insert(Pub, {1,foo}),
- ?line {'EXIT',{badarg,_}} = (catch ets:insert(Prot,{2,foo})),
- ?line {'EXIT',{badarg,_}} = (catch ets:insert(Priv,{3,foo})),
+ true = ets:insert(Pub, {1,foo}),
+ {'EXIT',{badarg,_}} = (catch ets:insert(Prot,{2,foo})),
+ {'EXIT',{badarg,_}} = (catch ets:insert(Priv,{3,foo})),
%% check that it really wasn't written, either
- ?line [] = ets:lookup(Prot,foo).
+ [] = ets:lookup(Prot,foo),
+ ok.
privacy_owner(Boss, Opts) ->
ets_new(pub, [public,named_table | Opts]),
@@ -3007,7 +2869,7 @@ privacy_owner_loop(Boss) ->
receive
{shift,N,Pub_Prot_Priv} ->
{Pub,Prot,Priv} = rotate_tuple(Pub_Prot_Priv, N),
-
+
ets:setopts(Pub,{protection,public}),
ets:setopts(Prot,{protection,protected}),
ets:setopts(Priv,{protection,private}),
@@ -3027,82 +2889,81 @@ rotate_tuple(Tuple, N) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-empty(doc) ->
- ["Check lookup in an empty table and lookup of a non-existing key"];
-empty(suite) -> [];
+%% Check lookup in an empty table and lookup of a non-existing key.
empty(Config) when is_list(Config) ->
repeat_for_opts(empty_do).
empty_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foo,Opts),
- ?line [] = ets:lookup(Tab,key),
- ?line true = ets:insert(Tab,{key2,val}),
- ?line [] = ets:lookup(Tab,key),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-badinsert(doc) ->
- ["Check proper return values for illegal insert operations."];
-badinsert(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = ets_new(foo,Opts),
+ [] = ets:lookup(Tab,key),
+ true = ets:insert(Tab,{key2,val}),
+ [] = ets:lookup(Tab,key),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Check proper return values for illegal insert operations.
badinsert(Config) when is_list(Config) ->
repeat_for_opts(badinsert_do).
badinsert_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line {'EXIT',{badarg,_}} = (catch ets:insert(foo,{key,val})),
-
- ?line Tab = ets_new(foo,Opts),
- ?line {'EXIT',{badarg,_}} = (catch ets:insert(Tab,{})),
+ EtsMem = etsmem(),
+ {'EXIT',{badarg,_}} = (catch ets:insert(foo,{key,val})),
- ?line Tab3 = ets_new(foo,[{keypos,3}| Opts]),
- ?line {'EXIT',{badarg,_}} = (catch ets:insert(Tab3,{a,b})),
+ Tab = ets_new(foo,Opts),
+ {'EXIT',{badarg,_}} = (catch ets:insert(Tab,{})),
- ?line {'EXIT',{badarg,_}} = (catch ets:insert(Tab,[key,val2])),
- ?line true = ets:delete(Tab),
- ?line true = ets:delete(Tab3),
- ?line verify_etsmem(EtsMem).
+ Tab3 = ets_new(foo,[{keypos,3}| Opts]),
+ {'EXIT',{badarg,_}} = (catch ets:insert(Tab3,{a,b})),
+
+ {'EXIT',{badarg,_}} = (catch ets:insert(Tab,[key,val2])),
+ true = ets:delete(Tab),
+ true = ets:delete(Tab3),
+ verify_etsmem(EtsMem).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-time_lookup(doc) -> ["Lookup timing."];
-time_lookup(suite) -> [];
+%% Test lookup timing.
time_lookup(Config) when is_list(Config) ->
%% just for timing, really
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
Values = repeat_for_opts(time_lookup_do),
- ?line verify_etsmem(EtsMem),
- ?line {comment,lists:flatten(io_lib:format(
- "~p ets lookups/s",[Values]))}.
+ verify_etsmem(EtsMem),
+ {comment,lists:flatten(io_lib:format(
+ "~p ets lookups/s",[Values]))}.
time_lookup_do(Opts) ->
Tab = ets_new(foo,Opts),
fill_tab(Tab,foo),
ets:insert(Tab,{{a,key},foo}),
- {Time,_} = ?t:timecall(test_server,do_times,
- [100000,ets,lookup,[Tab,{a,key}]]),
+ N = 100000,
+ {Time,_} = timer:tc(fun() -> time_lookup_many(N, Tab) end),
+ Seconds = Time / 1000000,
true = ets:delete(Tab),
- round(100000 / Time). % lookups/s
+ round(N / Seconds). % lookups/s
-badlookup(doc) ->
- ["Check proper return values from bad lookups in existing/non existing "
- " ets tables"];
-badlookup(suite) -> [];
+time_lookup_many(0, _Tab) ->
+ ok;
+time_lookup_many(N, Tab) ->
+ ets:lookup(Tab, {a,key}),
+ time_lookup_many(N-1, Tab).
+
+%% Check proper return values from bad lookups in existing/non existing
+%% ets tables.
badlookup(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(foo,key)),
- ?line Tab = ets_new(foo,[]),
- ?line ets:delete(Tab),
- ?line {'EXIT',{badarg,_}} = (catch ets:lookup(Tab,key)),
- ?line verify_etsmem(EtsMem).
-
-lookup_order(doc) -> ["Test that lookup returns objects in order of insertion for bag and dbag."];
-lookup_order(suite) -> [];
+ EtsMem = etsmem(),
+ {'EXIT',{badarg,_}} = (catch ets:lookup(foo,key)),
+ Tab = ets_new(foo,[]),
+ ets:delete(Tab),
+ {'EXIT',{badarg,_}} = (catch ets:lookup(Tab,key)),
+ verify_etsmem(EtsMem).
+
+%% Test that lookup returns objects in order of insertion for bag and dbag.
lookup_order(Config) when is_list(Config) ->
EtsMem = etsmem(),
repeat_for_opts(lookup_order_do, [write_concurrency,[bag,duplicate_bag]]),
- ?line verify_etsmem(EtsMem),
+ verify_etsmem(EtsMem),
ok.
lookup_order_do(Opts) ->
@@ -3139,7 +3000,7 @@ lookup_order_2(Opts, Fixed) ->
true = ets:delete(T)
end,
Combos).
-
+
check_insert({T,List0,Key},Val) ->
%%io:format("insert ~p into ~p\n",[Val,List0]),
@@ -3154,7 +3015,7 @@ check_insert({T,List0,Key},Val) ->
check_insert_new({T,List0,Key},Val) ->
%%io:format("insert_new ~p into ~p\n",[Val,List0]),
Ret = ets:insert_new(T,{Key,Val}),
- ?line Ret = (List0 =:= []),
+ Ret = (List0 =:= []),
List1 = case Ret of
true -> [{Key,Val}];
false -> List0
@@ -3173,40 +3034,39 @@ check_check(S={T,List,Key}) ->
case lists:reverse(ets:lookup(T,Key)) of
List -> ok;
ETS -> io:format("check failed:\nETS: ~p\nCHK: ~p\n", [ETS,List]),
- ?t:fail("Invalid return value from ets:lookup")
+ ct:fail("Invalid return value from ets:lookup")
end,
- ?line Items = ets:info(T,size),
- ?line Items = length(List),
+ Items = ets:info(T,size),
+ Items = length(List),
S.
-
+
fill_tab(Tab,Val) ->
- ?line ets:insert(Tab,{key,Val}),
- ?line ets:insert(Tab,{{a,144},Val}),
- ?line ets:insert(Tab,{{a,key2},Val}),
- ?line ets:insert(Tab,{14,Val}),
+ ets:insert(Tab,{key,Val}),
+ ets:insert(Tab,{{a,144},Val}),
+ ets:insert(Tab,{{a,key2},Val}),
+ ets:insert(Tab,{14,Val}),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-lookup_element_mult(doc) -> ["Multiple return elements (OTP-2386)"];
-lookup_element_mult(suite) -> [];
+%% OTP-2386. Multiple return elements.
lookup_element_mult(Config) when is_list(Config) ->
repeat_for_opts(lookup_element_mult_do).
lookup_element_mult_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line T = ets_new(service, [bag, {keypos, 2} | Opts]),
- ?line D = lists:reverse(lem_data()),
- ?line lists:foreach(fun(X) -> ets:insert(T, X) end, D),
- ?line ok = lem_crash_3(T),
- ?line ets:insert(T, {0, "heap_key"}),
- ?line ets:lookup_element(T, "heap_key", 2),
- ?line true = ets:delete(T),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ T = ets_new(service, [bag, {keypos, 2} | Opts]),
+ D = lists:reverse(lem_data()),
+ lists:foreach(fun(X) -> ets:insert(T, X) end, D),
+ ok = lem_crash_3(T),
+ ets:insert(T, {0, "heap_key"}),
+ ets:lookup_element(T, "heap_key", 2),
+ true = ets:delete(T),
+ verify_etsmem(EtsMem).
lem_data() ->
[
@@ -3233,69 +3093,64 @@ lem_crash_3(T) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-delete_elem(doc) ->
- ["Check delete of an element inserted in a `filled' table."];
-delete_elem(suite) -> [];
+%% Check delete of an element inserted in a `filled' table.
delete_elem(Config) when is_list(Config) ->
repeat_for_opts(delete_elem_do, [write_concurrency, all_types]).
delete_elem_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foo,Opts),
- ?line fill_tab(Tab,foo),
- ?line ets:insert(Tab,{{b,key},foo}),
- ?line ets:insert(Tab,{{c,key},foo}),
- ?line true = ets:delete(Tab,{b,key}),
- ?line [] = ets:lookup(Tab,{b,key}),
- ?line [{{c,key},foo}] = ets:lookup(Tab,{c,key}),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-delete_tab(doc) ->
- ["Check that ets:delete() works and releases the name of the deleted "
- "table."];
-delete_tab(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = ets_new(foo,Opts),
+ fill_tab(Tab,foo),
+ ets:insert(Tab,{{b,key},foo}),
+ ets:insert(Tab,{{c,key},foo}),
+ true = ets:delete(Tab,{b,key}),
+ [] = ets:lookup(Tab,{b,key}),
+ [{{c,key},foo}] = ets:lookup(Tab,{c,key}),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Check that ets:delete() works and releases the name of the
+%% deleted table.
delete_tab(Config) when is_list(Config) ->
repeat_for_opts(delete_tab_do,[write_concurrency,all_types]).
delete_tab_do(Opts) ->
Name = foo,
- ?line EtsMem = etsmem(),
- ?line Name = ets_new(Name, [named_table | Opts]),
- ?line true = ets:delete(foo),
+ EtsMem = etsmem(),
+ Name = ets_new(Name, [named_table | Opts]),
+ true = ets:delete(foo),
%% The name should be available again.
- ?line Name = ets_new(Name, [named_table | Opts]),
- ?line true = ets:delete(Name),
- ?line verify_etsmem(EtsMem).
+ Name = ets_new(Name, [named_table | Opts]),
+ true = ets:delete(Name),
+ verify_etsmem(EtsMem).
-delete_large_tab(doc) ->
- "Check that ets:delete/1 works and that other processes can run.";
+%% Check that ets:delete/1 works and that other processes can run.
delete_large_tab(Config) when is_list(Config) ->
- ?line Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 200000)],
- ?line EtsMem = etsmem(),
+ Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 200000)],
+ EtsMem = etsmem(),
repeat_for_opts(fun(Opts) -> delete_large_tab_do(Opts,Data) end),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
delete_large_tab_do(Opts,Data) ->
- ?line delete_large_tab_1(foo_hash, Opts, Data, false),
- ?line delete_large_tab_1(foo_tree, [ordered_set | Opts], Data, false),
- ?line delete_large_tab_1(foo_hash, Opts, Data, true).
+ delete_large_tab_1(foo_hash, Opts, Data, false),
+ delete_large_tab_1(foo_tree, [ordered_set | Opts], Data, false),
+ delete_large_tab_1(foo_hash, Opts, Data, true).
delete_large_tab_1(Name, Flags, Data, Fix) ->
- ?line Tab = ets_new(Name, Flags),
- ?line ets:insert(Tab, Data),
+ Tab = ets_new(Name, Flags),
+ ets:insert(Tab, Data),
case Fix of
false -> ok;
true ->
- ?line true = ets:safe_fixtable(Tab, true),
- ?line lists:foreach(fun({K,_}) -> ets:delete(Tab, K) end, Data)
+ true = ets:safe_fixtable(Tab, true),
+ lists:foreach(fun({K,_}) -> ets:delete(Tab, K) end, Data)
end,
{priority, Prio} = process_info(self(), priority),
- ?line Deleter = self(),
- ?line [SchedTracer]
+ Deleter = self(),
+ [SchedTracer]
= start_loopers(1,
Prio,
fun (SC) ->
@@ -3315,59 +3170,58 @@ delete_large_tab_1(Name, Flags, Data, Fix) ->
end,
0),
SchedTracerMon = monitor(process, SchedTracer),
- ?line Loopers = start_loopers(erlang:system_info(schedulers),
- Prio,
- fun (_) -> erlang:yield() end,
- ok),
- ?line erlang:yield(),
- ?line 1 = erlang:trace(self(),true,[running,procs,{tracer,SchedTracer}]),
- ?line true = ets:delete(Tab),
+ Loopers = start_loopers(erlang:system_info(schedulers),
+ Prio,
+ fun (_) -> erlang:yield() end,
+ ok),
+ erlang:yield(),
+ 1 = erlang:trace(self(),true,[running,procs,{tracer,SchedTracer}]),
+ true = ets:delete(Tab),
%% The register stuff is just a trace marker
- ?line true = register(delete_large_tab_done_marker, self()),
- ?line true = unregister(delete_large_tab_done_marker),
- ?line undefined = ets:info(Tab),
- ?line ok = stop_loopers(Loopers),
- ?line receive
- {schedule_count, N} ->
- ?line io:format("~s: context switches: ~p", [Name,N]),
- if
- N >= 5 -> ?line ok;
- true -> ?line ?t:fail()
- end
- end,
+ true = register(delete_large_tab_done_marker, self()),
+ true = unregister(delete_large_tab_done_marker),
+ undefined = ets:info(Tab),
+ ok = stop_loopers(Loopers),
+ receive
+ {schedule_count, N} ->
+ io:format("~s: context switches: ~p", [Name,N]),
+ if
+ N >= 5 -> ok;
+ true -> ct:fail(failed)
+ end
+ end,
receive {'DOWN',SchedTracerMon,process,SchedTracer,_} -> ok end,
ok.
-delete_large_named_table(doc) ->
- "Delete a large name table and try to create a new table with the same name in another process.";
+%% Delete a large name table and try to create a new table with
+%% the same name in another process.
delete_large_named_table(Config) when is_list(Config) ->
- ?line Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 200000)],
- ?line EtsMem = etsmem(),
+ Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 200000)],
+ EtsMem = etsmem(),
repeat_for_opts(fun(Opts) -> delete_large_named_table_do(Opts,Data) end),
- ?line verify_etsmem(EtsMem),
+ verify_etsmem(EtsMem),
ok.
delete_large_named_table_do(Opts,Data) ->
- ?line delete_large_named_table_1(foo_hash, [named_table | Opts], Data, false),
- ?line delete_large_named_table_1(foo_tree, [ordered_set,named_table | Opts], Data, false),
- ?line delete_large_named_table_1(foo_hash, [named_table | Opts], Data, true).
+ delete_large_named_table_1(foo_hash, [named_table | Opts], Data, false),
+ delete_large_named_table_1(foo_tree, [ordered_set,named_table | Opts], Data, false),
+ delete_large_named_table_1(foo_hash, [named_table | Opts], Data, true).
delete_large_named_table_1(Name, Flags, Data, Fix) ->
- ?line Tab = ets_new(Name, Flags),
- ?line ets:insert(Tab, Data),
+ Tab = ets_new(Name, Flags),
+ ets:insert(Tab, Data),
case Fix of
false -> ok;
true ->
- ?line true = ets:safe_fixtable(Tab, true),
- ?line lists:foreach(fun({K,_}) -> ets:delete(Tab, K) end, Data)
+ true = ets:safe_fixtable(Tab, true),
+ lists:foreach(fun({K,_}) -> ets:delete(Tab, K) end, Data)
end,
- Parent = self(),
{Pid, MRef} = my_spawn_opt(fun() ->
- receive
- ets_new ->
- ets_new(Name, [named_table])
- end
+ receive
+ ets_new ->
+ ets_new(Name, [named_table])
+ end
end,
[link, monitor]),
true = ets:delete(Tab),
@@ -3375,139 +3229,129 @@ delete_large_named_table_1(Name, Flags, Data, Fix) ->
receive {'DOWN',MRef,process,Pid,_} -> ok end,
ok.
-evil_delete(doc) ->
- "Delete a large table, and kill the process during the delete.";
+%% Delete a large table, and kill the process during the delete.
evil_delete(Config) when is_list(Config) ->
- ?line Data = [{I,I*I} || I <- lists:seq(1, 100000)],
+ Data = [{I,I*I} || I <- lists:seq(1, 100000)],
repeat_for_opts(fun(Opts) -> evil_delete_do(Opts,Data) end).
evil_delete_do(Opts,Data) ->
- ?line EtsMem = etsmem(),
- ?line evil_delete_owner(foo_hash, Opts, Data, false),
- ?line verify_etsmem(EtsMem),
- ?line evil_delete_owner(foo_hash, Opts, Data, true),
- ?line verify_etsmem(EtsMem),
- ?line evil_delete_owner(foo_tree, [ordered_set | Opts], Data, false),
- ?line verify_etsmem(EtsMem),
- ?line TabA = evil_delete_not_owner(foo_hash, Opts, Data, false),
- ?line verify_etsmem(EtsMem),
- ?line TabB = evil_delete_not_owner(foo_hash, Opts, Data, true),
- ?line verify_etsmem(EtsMem),
- ?line TabC = evil_delete_not_owner(foo_tree, [ordered_set | Opts], Data, false),
- ?line verify_etsmem(EtsMem),
- ?line lists:foreach(fun(T) -> undefined = ets:info(T) end,
- [TabA,TabB,TabC]).
+ EtsMem = etsmem(),
+ evil_delete_owner(foo_hash, Opts, Data, false),
+ verify_etsmem(EtsMem),
+ evil_delete_owner(foo_hash, Opts, Data, true),
+ verify_etsmem(EtsMem),
+ evil_delete_owner(foo_tree, [ordered_set | Opts], Data, false),
+ verify_etsmem(EtsMem),
+ TabA = evil_delete_not_owner(foo_hash, Opts, Data, false),
+ verify_etsmem(EtsMem),
+ TabB = evil_delete_not_owner(foo_hash, Opts, Data, true),
+ verify_etsmem(EtsMem),
+ TabC = evil_delete_not_owner(foo_tree, [ordered_set | Opts], Data, false),
+ verify_etsmem(EtsMem),
+ lists:foreach(fun(T) -> undefined = ets:info(T) end,
+ [TabA,TabB,TabC]).
evil_delete_not_owner(Name, Flags, Data, Fix) ->
io:format("Not owner: ~p, fix = ~p", [Name,Fix]),
- ?line Tab = ets_new(Name, [public|Flags]),
- ?line ets:insert(Tab, Data),
+ Tab = ets_new(Name, [public|Flags]),
+ ets:insert(Tab, Data),
case Fix of
false -> ok;
true ->
- ?line true = ets:safe_fixtable(Tab, true),
- ?line lists:foreach(fun({K,_}) -> ets:delete(Tab, K) end, Data)
+ true = ets:safe_fixtable(Tab, true),
+ lists:foreach(fun({K,_}) -> ets:delete(Tab, K) end, Data)
end,
- ?line Pid = my_spawn(fun() ->
- P = my_spawn_link(
- fun() ->
- receive kill -> ok end,
- erlang:yield(),
- exit(kill_linked_processes_now)
- end),
- erlang:yield(),
- P ! kill,
- true = ets:delete(Tab)
- end),
- ?line Ref = erlang:monitor(process, Pid),
- ?line receive {'DOWN',Ref,_,_,_} -> ok end,
+ Pid = my_spawn(fun() ->
+ P = my_spawn_link(
+ fun() ->
+ receive kill -> ok end,
+ erlang:yield(),
+ exit(kill_linked_processes_now)
+ end),
+ erlang:yield(),
+ P ! kill,
+ true = ets:delete(Tab)
+ end),
+ Ref = erlang:monitor(process, Pid),
+ receive {'DOWN',Ref,_,_,_} -> ok end,
Tab.
evil_delete_owner(Name, Flags, Data, Fix) ->
- ?line Fun = fun() ->
- ?line Tab = ets_new(Name, [public|Flags]),
- ?line ets:insert(Tab, Data),
- case Fix of
- false -> ok;
- true ->
- ?line true = ets:safe_fixtable(Tab, true),
- ?line lists:foreach(fun({K,_}) ->
- ets:delete(Tab, K)
- end, Data)
- end,
- erlang:yield(),
- my_spawn_link(fun() ->
- erlang:yield(),
- exit(kill_linked_processes_now)
- end),
- true = ets:delete(Tab)
- end,
- ?line Pid = my_spawn(Fun),
- ?line Ref = erlang:monitor(process, Pid),
- ?line receive {'DOWN',Ref,_,_,_} -> ok end.
-
-
-exit_large_table_owner(doc) ->
- [];
-exit_large_table_owner(suite) ->
- [];
+ Fun = fun() ->
+ Tab = ets_new(Name, [public|Flags]),
+ ets:insert(Tab, Data),
+ case Fix of
+ false -> ok;
+ true ->
+ true = ets:safe_fixtable(Tab, true),
+ lists:foreach(fun({K,_}) ->
+ ets:delete(Tab, K)
+ end, Data)
+ end,
+ erlang:yield(),
+ my_spawn_link(fun() ->
+ erlang:yield(),
+ exit(kill_linked_processes_now)
+ end),
+ true = ets:delete(Tab)
+ end,
+ Pid = my_spawn(Fun),
+ Ref = erlang:monitor(process, Pid),
+ receive {'DOWN',Ref,_,_,_} -> ok end.
+
+
exit_large_table_owner(Config) when is_list(Config) ->
- %%?line Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 500000)],
- ?line FEData = fun(Do) -> repeat_while(fun(500000) -> {false,ok};
- (I) -> Do({erlang:phash2(I, 16#ffffff),I}),
- {true, I+1}
- end, 1)
- end,
- ?line EtsMem = etsmem(),
+ %%Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 500000)],
+ FEData = fun(Do) -> repeat_while(fun(500000) -> {false,ok};
+ (I) -> Do({erlang:phash2(I, 16#ffffff),I}),
+ {true, I+1}
+ end, 1)
+ end,
+ EtsMem = etsmem(),
repeat_for_opts({exit_large_table_owner_do,{FEData,Config}}),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
exit_large_table_owner_do(Opts,{FEData,Config}) ->
- ?line verify_rescheduling_exit(Config, FEData, [named_table | Opts], true, 1, 1),
- ?line verify_rescheduling_exit(Config, FEData, Opts, false, 1, 1).
+ verify_rescheduling_exit(Config, FEData, [named_table | Opts], true, 1, 1),
+ verify_rescheduling_exit(Config, FEData, Opts, false, 1, 1).
-exit_many_large_table_owner(doc) -> [];
-exit_many_large_table_owner(suite) -> [];
exit_many_large_table_owner(Config) when is_list(Config) ->
- %%?line Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 500000)],
- ?line FEData = fun(Do) -> repeat_while(fun(500000) -> {false,ok};
- (I) -> Do({erlang:phash2(I, 16#ffffff),I}),
- {true, I+1}
- end, 1)
- end,
- ?line EtsMem = etsmem(),
+ ct:timetrap({minutes,30}), %% valgrind needs a lot
+ %%Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 500000)],
+ FEData = fun(Do) -> repeat_while(fun(500000) -> {false,ok};
+ (I) -> Do({erlang:phash2(I, 16#ffffff),I}),
+ {true, I+1}
+ end, 1)
+ end,
+ EtsMem = etsmem(),
repeat_for_opts(fun(Opts) -> exit_many_large_table_owner_do(Opts,FEData,Config) end),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
exit_many_large_table_owner_do(Opts,FEData,Config) ->
- ?line verify_rescheduling_exit(Config, FEData, Opts, true, 1, 4),
- ?line verify_rescheduling_exit(Config, FEData, [named_table | Opts], false, 1, 4).
+ verify_rescheduling_exit(Config, FEData, Opts, true, 1, 4),
+ verify_rescheduling_exit(Config, FEData, [named_table | Opts], false, 1, 4).
-exit_many_tables_owner(doc) -> [];
-exit_many_tables_owner(suite) -> [];
exit_many_tables_owner(Config) when is_list(Config) ->
NoData = fun(_Do) -> ok end,
- ?line EtsMem = etsmem(),
- ?line verify_rescheduling_exit(Config, NoData, [named_table], false, 1000, 1),
- ?line verify_rescheduling_exit(Config, NoData, [named_table,{write_concurrency,true}], false, 1000, 1),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ verify_rescheduling_exit(Config, NoData, [named_table], false, 1000, 1),
+ verify_rescheduling_exit(Config, NoData, [named_table,{write_concurrency,true}], false, 1000, 1),
+ verify_etsmem(EtsMem).
-exit_many_many_tables_owner(doc) -> [];
-exit_many_many_tables_owner(suite) -> [];
exit_many_many_tables_owner(Config) when is_list(Config) ->
- ?line Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 50)],
- ?line FEData = fun(Do) -> lists:foreach(Do, Data) end,
+ Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 50)],
+ FEData = fun(Do) -> lists:foreach(Do, Data) end,
repeat_for_opts(fun(Opts) -> exit_many_many_tables_owner_do(Opts,FEData,Config) end).
exit_many_many_tables_owner_do(Opts,FEData,Config) ->
- ?line verify_rescheduling_exit(Config, FEData, [named_table | Opts], true, 200, 5),
- ?line verify_rescheduling_exit(Config, FEData, Opts, false, 200, 5),
- ?line wait_for_test_procs(),
- ?line EtsMem = etsmem(),
- ?line verify_rescheduling_exit(Config, FEData, Opts, true, 200, 5),
- ?line verify_rescheduling_exit(Config, FEData, [named_table | Opts], false, 200, 5),
- ?line verify_etsmem(EtsMem).
-
+ verify_rescheduling_exit(Config, FEData, [named_table | Opts], true, 200, 5),
+ verify_rescheduling_exit(Config, FEData, Opts, false, 200, 5),
+ wait_for_test_procs(),
+ EtsMem = etsmem(),
+ verify_rescheduling_exit(Config, FEData, Opts, true, 200, 5),
+ verify_rescheduling_exit(Config, FEData, [named_table | Opts], false, 200, 5),
+ verify_etsmem(EtsMem).
+
count_exit_sched(TP) ->
receive
@@ -3549,11 +3393,11 @@ vre_fix_tables(Tab) ->
ok.
verify_rescheduling_exit(Config, ForEachData, Flags, Fix, NOTabs, NOProcs) ->
- ?line NoFix = 5,
- ?line TestCase = atom_to_list(?config(test_case, Config)),
- ?line Parent = self(),
- ?line KillMe = make_ref(),
- ?line PFun =
+ NoFix = 5,
+ TestCase = atom_to_list(proplists:get_value(test_case, Config)),
+ Parent = self(),
+ KillMe = make_ref(),
+ PFun =
fun () ->
repeat(
fun () ->
@@ -3571,7 +3415,7 @@ verify_rescheduling_exit(Config, ForEachData, Flags, Fix, NOTabs, NOProcs) ->
lists:seq(1,NoFix)),
KeyPos = ets:info(Tab,keypos),
ForEachData(fun(Data) ->
- ets:delete(Tab, element(KeyPos,Data))
+ ets:delete(Tab, element(KeyPos,Data))
end)
end
end,
@@ -3579,89 +3423,82 @@ verify_rescheduling_exit(Config, ForEachData, Flags, Fix, NOTabs, NOProcs) ->
Parent ! {KillMe, self()},
receive after infinity -> ok end
end,
- ?line TPs = lists:map(fun (_) ->
- ?line TP = my_spawn_link(PFun),
- ?line 1 = erlang:trace(TP, true, [exiting]),
- TP
- end,
- lists:seq(1, NOProcs)),
- ?line lists:foreach(fun (TP) ->
- receive {KillMe, TP} -> ok end
- end,
- TPs),
- ?line LPs = start_loopers(erlang:system_info(schedulers),
- normal,
- fun (_) ->
- erlang:yield()
- end,
- ok),
- ?line lists:foreach(fun (TP) ->
- ?line unlink(TP),
- ?line exit(TP, bang)
- end,
- TPs),
- ?line lists:foreach(fun (TP) ->
- ?line XScheds = count_exit_sched(TP),
- ?line ?t:format("~p XScheds=~p~n",
- [TP, XScheds]),
- ?line true = XScheds >= 5
+ TPs = lists:map(fun (_) ->
+ TP = my_spawn_link(PFun),
+ 1 = erlang:trace(TP, true, [exiting]),
+ TP
+ end,
+ lists:seq(1, NOProcs)),
+ lists:foreach(fun (TP) ->
+ receive {KillMe, TP} -> ok end
+ end,
+ TPs),
+ LPs = start_loopers(erlang:system_info(schedulers),
+ normal,
+ fun (_) ->
+ erlang:yield()
end,
- TPs),
- ?line stop_loopers(LPs),
- ?line ok.
+ ok),
+ lists:foreach(fun (TP) ->
+ unlink(TP),
+ exit(TP, bang)
+ end,
+ TPs),
+ lists:foreach(fun (TP) ->
+ XScheds = count_exit_sched(TP),
+ io:format("~p XScheds=~p~n",
+ [TP, XScheds]),
+ true = XScheds >= 5
+ end,
+ TPs),
+ stop_loopers(LPs),
+ ok.
-
-table_leak(doc) ->
- "Make sure that slots for ets tables are cleared properly.";
+
+%% Make sure that slots for ets tables are cleared properly.
table_leak(Config) when is_list(Config) ->
repeat_for_opts(fun(Opts) -> table_leak_1(Opts,20000) end).
table_leak_1(_,0) -> ok;
table_leak_1(Opts,N) ->
- ?line T = ets_new(fooflarf, Opts),
- ?line true = ets:delete(T),
+ T = ets_new(fooflarf, Opts),
+ true = ets:delete(T),
table_leak_1(Opts,N-1).
-baddelete(doc) ->
- ["Check proper return values for illegal delete operations."];
-baddelete(suite) -> [];
+%% Check proper return values for illegal delete operations.
baddelete(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line {'EXIT',{badarg,_}} = (catch ets:delete(foo)),
- ?line Tab = ets_new(foo,[]),
- ?line true = ets:delete(Tab),
- ?line {'EXIT',{badarg,_}} = (catch ets:delete(Tab)),
- ?line verify_etsmem(EtsMem).
-
-match_delete(doc) ->
- ["Check that match_delete works. Also tests tab2list function."];
-match_delete(suite) -> [];
+ EtsMem = etsmem(),
+ {'EXIT',{badarg,_}} = (catch ets:delete(foo)),
+ Tab = ets_new(foo,[]),
+ true = ets:delete(Tab),
+ {'EXIT',{badarg,_}} = (catch ets:delete(Tab)),
+ verify_etsmem(EtsMem).
+
+%% Check that match_delete works. Also tests tab2list function.
match_delete(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(match_delete_do,[write_concurrency,all_types]),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
match_delete_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(kad,Opts),
- ?line fill_tab(Tab,foo),
- ?line ets:insert(Tab,{{c,key},bar}),
- ?line _ = ets:match_delete(Tab,{'_',foo}),
- ?line [{{c,key},bar}] = ets:tab2list(Tab),
- ?line _ = ets:match_delete(Tab,'_'),
- ?line [] = ets:tab2list(Tab),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-match_delete3(doc) ->
- ["OTP-3005: check match_delete with constant argument."];
-match_delete3(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = ets_new(kad,Opts),
+ fill_tab(Tab,foo),
+ ets:insert(Tab,{{c,key},bar}),
+ _ = ets:match_delete(Tab,{'_',foo}),
+ [{{c,key},bar}] = ets:tab2list(Tab),
+ _ = ets:match_delete(Tab,'_'),
+ [] = ets:tab2list(Tab),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% OTP-3005: check match_delete with constant argument.
match_delete3(Config) when is_list(Config) ->
repeat_for_opts(match_delete3_do).
match_delete3_do(Opts) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
T = make_table(test,
[duplicate_bag | Opts],
[{aa,17},
@@ -3676,41 +3513,40 @@ match_delete3_do(Opts) ->
ets:match_delete(T, {cA,1000}),
[] = ets:match_object(T, {'_', 1000}),
ets:delete(T),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-firstnext(doc) -> ["Tests ets:first/1 & ets:next/2."];
-firstnext(suite) -> [];
+%% Test ets:first/1 & ets:next/2.
firstnext(Config) when is_list(Config) ->
repeat_for_opts(firstnext_do).
firstnext_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foo,Opts),
- ?line [] = firstnext_collect(Tab,ets:first(Tab),[]),
- ?line fill_tab(Tab,foo),
- ?line Len = length(ets:tab2list(Tab)),
- ?line Len = length(firstnext_collect(Tab,ets:first(Tab),[])),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ Tab = ets_new(foo,Opts),
+ [] = firstnext_collect(Tab,ets:first(Tab),[]),
+ fill_tab(Tab,foo),
+ Len = length(ets:tab2list(Tab)),
+ Len = length(firstnext_collect(Tab,ets:first(Tab),[])),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
firstnext_collect(_Tab,'$end_of_table',List) ->
- ?line List;
+ List;
firstnext_collect(Tab,Key,List) ->
- ?line firstnext_collect(Tab,ets:next(Tab,Key),[Key|List]).
+ firstnext_collect(Tab,ets:next(Tab,Key),[Key|List]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-firstnext_concurrent(doc) -> "Tests ets:first/1 & ets:next/2.";
+%% Tests ets:first/1 & ets:next/2.
firstnext_concurrent(Config) when is_list(Config) ->
register(master, self()),
ets_init(?MODULE, 20),
[dynamic_go() || _ <- lists:seq(1, 2)],
receive
- after 5000 -> ok
+ after 5000 -> ok
end.
ets_init(Tab, N) ->
@@ -3741,98 +3577,94 @@ dyn_lookup(T, K) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-slot(suite) -> [];
slot(Config) when is_list(Config) ->
repeat_for_opts(slot_do).
slot_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foo,Opts),
- ?line fill_tab(Tab,foo),
- ?line Elts = ets:info(Tab,size),
- ?line Elts = slot_loop(Tab,0,0),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ Tab = ets_new(foo,Opts),
+ fill_tab(Tab,foo),
+ Elts = ets:info(Tab,size),
+ Elts = slot_loop(Tab,0,0),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
slot_loop(Tab,SlotNo,EltsSoFar) ->
- ?line case ets:slot(Tab,SlotNo) of
- '$end_of_table' ->
- ?line {'EXIT',{badarg,_}} =
- (catch ets:slot(Tab,SlotNo+1)),
- ?line EltsSoFar;
- Elts ->
- ?line slot_loop(Tab,SlotNo+1,EltsSoFar+length(Elts))
+ case ets:slot(Tab,SlotNo) of
+ '$end_of_table' ->
+ {'EXIT',{badarg,_}} =
+ (catch ets:slot(Tab,SlotNo+1)),
+ EltsSoFar;
+ Elts ->
+ slot_loop(Tab,SlotNo+1,EltsSoFar+length(Elts))
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-match1(suite) -> [];
match1(Config) when is_list(Config) ->
repeat_for_opts(match1_do).
match1_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foo,Opts),
- ?line fill_tab(Tab,foo),
- ?line [] = ets:match(Tab,{}),
- ?line ets:insert(Tab,{{one,4},4}),
- ?line ets:insert(Tab,{{one,5},5}),
- ?line ets:insert(Tab,{{two,4},4}),
- ?line ets:insert(Tab,{{two,5},6}),
- ?line case ets:match(Tab,{{one,'_'},'$0'}) of
- [[4],[5]] -> ok;
- [[5],[4]] -> ok
- end,
- ?line case ets:match(Tab,{{two,'$1'},'$0'}) of
- [[4,4],[6,5]] -> ok;
- [[6,5],[4,4]] -> ok
- end,
- ?line case ets:match(Tab,{{two,'$9'},'$4'}) of
- [[4,4],[6,5]] -> ok;
- [[6,5],[4,4]] -> ok
- end,
- ?line case ets:match(Tab,{{two,'$9'},'$22'}) of
- [[4,4],[5,6]] -> ok;
- [[5,6],[4,4]] -> ok
- end,
- ?line [[4]] = ets:match(Tab,{{two,'$0'},'$0'}),
- ?line Len = length(ets:match(Tab,'$0')),
- ?line Len = length(ets:match(Tab,'_')),
- ?line if Len > 4 -> ok end,
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-match2(doc) -> ["Tests match with specified keypos bag table."];
-match2(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = ets_new(foo,Opts),
+ fill_tab(Tab,foo),
+ [] = ets:match(Tab,{}),
+ ets:insert(Tab,{{one,4},4}),
+ ets:insert(Tab,{{one,5},5}),
+ ets:insert(Tab,{{two,4},4}),
+ ets:insert(Tab,{{two,5},6}),
+ case ets:match(Tab,{{one,'_'},'$0'}) of
+ [[4],[5]] -> ok;
+ [[5],[4]] -> ok
+ end,
+ case ets:match(Tab,{{two,'$1'},'$0'}) of
+ [[4,4],[6,5]] -> ok;
+ [[6,5],[4,4]] -> ok
+ end,
+ case ets:match(Tab,{{two,'$9'},'$4'}) of
+ [[4,4],[6,5]] -> ok;
+ [[6,5],[4,4]] -> ok
+ end,
+ case ets:match(Tab,{{two,'$9'},'$22'}) of
+ [[4,4],[5,6]] -> ok;
+ [[5,6],[4,4]] -> ok
+ end,
+ [[4]] = ets:match(Tab,{{two,'$0'},'$0'}),
+ Len = length(ets:match(Tab,'$0')),
+ Len = length(ets:match(Tab,'_')),
+ if Len > 4 -> ok end,
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Test match with specified keypos bag table.
match2(Config) when is_list(Config) ->
repeat_for_opts(match2_do).
match2_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = make_table(foobar,
- [bag, named_table, {keypos, 2} | Opts],
- [{value1, key1},
- {value2_1, key2},
- {value2_2, key2},
- {value3_1, key3},
- {value3_2, key3},
- {value2_1, key2_wannabe}]),
- ?line case length(ets:match(Tab, '$1')) of
- 6 -> ok;
- _ -> ?t:fail("Length of matched list is wrong.")
- end,
- ?line [[value3_1],[value3_2]] = ets:match(Tab, {'$1', key3}),
- ?line [[key1]] = ets:match(Tab, {value1, '$1'}),
- ?line [[key2_wannabe],[key2]] = ets:match(Tab, {value2_1, '$2'}),
- ?line [] = ets:match(Tab,{'$1',nosuchkey}),
- ?line [] = ets:match(Tab,{'$1',kgY2}), % same hash as key2
- ?line [] = ets:match(Tab,{nosuchvalue,'$1'}),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-match_object(doc) -> ["Some ets:match_object test."];
-match_object(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = make_table(foobar,
+ [bag, named_table, {keypos, 2} | Opts],
+ [{value1, key1},
+ {value2_1, key2},
+ {value2_2, key2},
+ {value3_1, key3},
+ {value3_2, key3},
+ {value2_1, key2_wannabe}]),
+ case length(ets:match(Tab, '$1')) of
+ 6 -> ok;
+ _ -> ct:fail("Length of matched list is wrong.")
+ end,
+ [[value3_1],[value3_2]] = ets:match(Tab, {'$1', key3}),
+ [[key1]] = ets:match(Tab, {value1, '$1'}),
+ [[key2_wannabe],[key2]] = ets:match(Tab, {value2_1, '$2'}),
+ [] = ets:match(Tab,{'$1',nosuchkey}),
+ [] = ets:match(Tab,{'$1',kgY2}), % same hash as key2
+ [] = ets:match(Tab,{nosuchvalue,'$1'}),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Some ets:match_object tests.
match_object(Config) when is_list(Config) ->
repeat_for_opts(match_object_do).
@@ -3857,25 +3689,25 @@ match_object_do(Opts) ->
case ets:match_object(Tab, {{one, '_'}, '$0'}) of
[{{one,5},5},{{one,4},4}] -> ok;
[{{one,4},4},{{one,5},5}] -> ok;
- _ -> ?t:fail("ets:match_object() returned something funny.")
+ _ -> ct:fail("ets:match_object() returned something funny.")
end,
case ets:match_object(Tab, {{two, '$1'}, '$0'}) of
[{{two,5},6},{{two,4},4}] -> ok;
[{{two,4},4},{{two,5},6}] -> ok;
- _ -> ?t:fail("ets:match_object() returned something funny.")
+ _ -> ct:fail("ets:match_object() returned something funny.")
end,
case ets:match_object(Tab, {{two, '$9'}, '$4'}) of
[{{two,5},6},{{two,4},4}] -> ok;
[{{two,4},4},{{two,5},6}] -> ok;
- _ -> ?t:fail("ets:match_object() returned something funny.")
+ _ -> ct:fail("ets:match_object() returned something funny.")
end,
case ets:match_object(Tab, {{two, '$9'}, '$22'}) of
[{{two,5},6},{{two,4},4}] -> ok;
[{{two,4},4},{{two,5},6}] -> ok;
- _ -> ?t:fail("ets:match_object() returned something funny.")
+ _ -> ct:fail("ets:match_object() returned something funny.")
end,
- % Check that maps are inspected for variables.
+ %% Check that maps are inspected for variables.
[{#{camembert:=cabécou},7}] = ets:match_object(Tab, {#{camembert=>'_'},7}),
[{#{"hi":="hello",#{"wazzup"=>3}:="awesome","1337":="42"},9}] =
@@ -3894,13 +3726,13 @@ match_object_do(Opts) ->
{#{"1337" := "42","hi" := "hello","wazzup" := #{"awesome" := 3}},10}] -> ok;
[{#{"1337" := "42","hi" := "hello","wazzup" := #{"awesome" := 3}},10},
{#{"1337" := "42","hi" := "hello","wazzup" := "awesome"},8}] -> ok;
- _ -> ?t:fail("ets:match_object() returned something funny.")
+ _ -> ct:fail("ets:match_object() returned something funny.")
end,
case ets:match_object(Tab, {#{"hi"=>'_'},'_'}) of
[{#{"1337":="42", "hi":="hello"},_},
{#{"1337":="42", "hi":="hello"},_},
{#{"1337":="42", "hi":="hello"},_}] -> ok;
- _ -> ?t:fail("ets:match_object() returned something funny.")
+ _ -> ct:fail("ets:match_object() returned something funny.")
end,
%% match large maps
@@ -3910,98 +3742,93 @@ match_object_do(Opts) ->
%% only match a part of the map
[{#{1:=1,5:=5,99:=99,100:=100},11},{#{1:="hi",6:="hi",99:="hi"},12}] -> ok;
[{#{1:="hi",2:="hi",59:="hi"},12},{#{1:=1,2:=2,39:=39,100:=100},11}] -> ok;
- _ -> ?t:fail("ets:match_object() returned something funny.")
+ _ -> ct:fail("ets:match_object() returned something funny.")
end,
case ets:match_object(Tab, {maps:from_list([{I,'_'}||I<-Is]),'_'}) of
%% only match a part of the map
[{#{1:=1,5:=5,99:=99,100:=100},11},{#{1:="hi",6:="hi",99:="hi"},12}] -> ok;
[{#{1:="hi",2:="hi",59:="hi"},12},{#{1:=1,2:=2,39:=39,100:=100},11}] -> ok;
- _ -> ?t:fail("ets:match_object() returned something funny.")
+ _ -> ct:fail("ets:match_object() returned something funny.")
end,
{'EXIT',{badarg,_}} = (catch ets:match_object(Tab, {#{'$1'=>'_'},7})),
Mve = maps:from_list([{list_to_atom([$$|integer_to_list(I)]),'_'}||I<-Is]),
{'EXIT',{badarg,_}} = (catch ets:match_object(Tab, {Mve,11})),
- % Check that unsuccessful match returns an empty list.
+ %% Check that unsuccessful match returns an empty list.
[] = ets:match_object(Tab, {{three,'$0'}, '$92'}),
- % Check that '$0' equals '_'.
+ %% Check that '$0' equals '_'.
Len = length(ets:match_object(Tab, '$0')),
Len = length(ets:match_object(Tab, '_')),
if Len > 4 -> ok end,
true = ets:delete(Tab),
verify_etsmem(EtsMem).
-match_object2(suite) -> [];
-match_object2(doc) -> ["Tests that db_match_object does not generate "
- "a `badarg' when resuming a search with no "
- "previous matches."];
+%% Tests that db_match_object does not generate a `badarg' when
+%% resuming a search with no previous matches.
match_object2(Config) when is_list(Config) ->
repeat_for_opts(match_object2_do).
match_object2_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foo, [bag, {keypos, 2} | Opts]),
- ?line fill_tab2(Tab, 0, 13005), % match_db_object does 1000
- % elements per pass, might
- % change in the future.
- ?line case catch ets:match_object(Tab, {hej, '$1'}) of
- {'EXIT', _} ->
- ets:delete(Tab),
- ?t:fail("match_object EXIT:ed");
- [] ->
- io:format("Nothing matched.");
- List ->
- io:format("Matched:~p~n",[List])
- end,
+ EtsMem = etsmem(),
+ Tab = ets_new(foo, [bag, {keypos, 2} | Opts]),
+ fill_tab2(Tab, 0, 13005), % match_db_object does 1000
+ % elements per pass, might
+ % change in the future.
+ case catch ets:match_object(Tab, {hej, '$1'}) of
+ {'EXIT', _} ->
+ ets:delete(Tab),
+ ct:fail("match_object EXIT:ed");
+ [] ->
+ io:format("Nothing matched.");
+ List ->
+ io:format("Matched:~p~n",[List])
+ end,
ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-tab2list(doc) -> ["Tests tab2list (OTP-3319)"];
-tab2list(suite) -> [];
+%% OTP-3319. Test tab2list.
tab2list(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line Tab = make_table(foo,
- [ordered_set],
- [{a,b}, {c,b}, {b,b}, {a,c}]),
- ?line [{a,c},{b,b},{c,b}] = ets:tab2list(Tab),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-misc1(doc) -> ["Simple general small test. ",
- "If this fails, ets is in really bad shape."];
-misc1(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = make_table(foo,
+ [ordered_set],
+ [{a,b}, {c,b}, {b,b}, {a,c}]),
+ [{a,c},{b,b},{c,b}] = ets:tab2list(Tab),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Simple general small test. If this fails, ets is in really bad
+%% shape.
misc1(Config) when is_list(Config) ->
repeat_for_opts(misc1_do).
misc1_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foo,Opts),
- ?line true = lists:member(Tab,ets:all()),
- ?line ets:delete(Tab),
- ?line false = lists:member(Tab,ets:all()),
- ?line case catch ets:delete(Tab) of
- {'EXIT',_Reason} ->
- ?line verify_etsmem(EtsMem);
- true ->
- ?t:fail("Delete of nonexisting table returned `true'.")
- end,
+ EtsMem = etsmem(),
+ Tab = ets_new(foo,Opts),
+ true = lists:member(Tab,ets:all()),
+ ets:delete(Tab),
+ false = lists:member(Tab,ets:all()),
+ case catch ets:delete(Tab) of
+ {'EXIT',_Reason} ->
+ verify_etsmem(EtsMem);
+ true ->
+ ct:fail("Delete of nonexisting table returned `true'.")
+ end,
ok.
-safe_fixtable(doc) -> ["Check the safe_fixtable function."];
-safe_fixtable(suite) -> [];
+%% Check the safe_fixtable function.
safe_fixtable(Config) when is_list(Config) ->
repeat_for_opts(safe_fixtable_do).
safe_fixtable_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foo, Opts),
- ?line fill_tab(Tab, foobar),
- ?line true = ets:safe_fixtable(Tab, true),
- ?line receive after 1 -> ok end,
- ?line true = ets:safe_fixtable(Tab, false),
+ EtsMem = etsmem(),
+ Tab = ets_new(foo, Opts),
+ fill_tab(Tab, foobar),
+ true = ets:safe_fixtable(Tab, true),
+ receive after 1 -> ok end,
+ true = ets:safe_fixtable(Tab, false),
false = ets:info(Tab,safe_fixed_monotonic_time),
false = ets:info(Tab,safe_fixed),
SysBefore = erlang:timestamp(),
@@ -4034,90 +3861,86 @@ safe_fixtable_do(Opts) ->
{FixMonTime,[{Self,1}]} = ets:info(Tab,safe_fixed_monotonic_time),
{FixSysTime,[{Self,1}]} = ets:info(Tab,safe_fixed),
%% badarg's
- ?line {'EXIT', {badarg, _}} = (catch ets:safe_fixtable(Tab, foobar)),
- ?line true = ets:info(Tab,fixed),
- ?line true = ets:safe_fixtable(Tab, false),
- ?line false = ets:info(Tab,fixed),
- ?line {'EXIT', {badarg, _}} = (catch ets:safe_fixtable(Tab, foobar)),
- ?line false = ets:info(Tab,fixed),
- ?line ets:delete(Tab),
- ?line case catch ets:safe_fixtable(Tab, true) of
- {'EXIT', _Reason} ->
- ?line verify_etsmem(EtsMem);
- _ ->
- ?t:fail("Fixtable on nonexisting table returned `true'")
- end,
+ {'EXIT', {badarg, _}} = (catch ets:safe_fixtable(Tab, foobar)),
+ true = ets:info(Tab,fixed),
+ true = ets:safe_fixtable(Tab, false),
+ false = ets:info(Tab,fixed),
+ {'EXIT', {badarg, _}} = (catch ets:safe_fixtable(Tab, foobar)),
+ false = ets:info(Tab,fixed),
+ ets:delete(Tab),
+ case catch ets:safe_fixtable(Tab, true) of
+ {'EXIT', _Reason} ->
+ verify_etsmem(EtsMem);
+ _ ->
+ ct:fail("Fixtable on nonexisting table returned `true'")
+ end,
ok.
-info(doc) -> ["Tests ets:info result for required tuples."];
-info(suite) -> [];
+%% Tests ets:info result for required tuples.
info(Config) when is_list(Config) ->
repeat_for_opts(info_do).
info_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line MeMyselfI=self(),
- ?line ThisNode=node(),
- ?line Tab = ets_new(foobar, [{keypos, 2} | Opts]),
+ EtsMem = etsmem(),
+ MeMyselfI=self(),
+ ThisNode=node(),
+ Tab = ets_new(foobar, [{keypos, 2} | Opts]),
%% Note: ets:info/1 used to return a tuple, but from R11B onwards it
%% returns a list.
- ?line Res = ets:info(Tab),
- ?line {value, {memory, _Mem}} = lists:keysearch(memory, 1, Res),
- ?line {value, {owner, MeMyselfI}} = lists:keysearch(owner, 1, Res),
- ?line {value, {name, foobar}} = lists:keysearch(name, 1, Res),
- ?line {value, {size, 0}} = lists:keysearch(size, 1, Res),
- ?line {value, {node, ThisNode}} = lists:keysearch(node, 1, Res),
- ?line {value, {named_table, false}} = lists:keysearch(named_table, 1, Res),
- ?line {value, {type, set}} = lists:keysearch(type, 1, Res),
- ?line {value, {keypos, 2}} = lists:keysearch(keypos, 1, Res),
- ?line {value, {protection, protected}} =
+ Res = ets:info(Tab),
+ {value, {memory, _Mem}} = lists:keysearch(memory, 1, Res),
+ {value, {owner, MeMyselfI}} = lists:keysearch(owner, 1, Res),
+ {value, {name, foobar}} = lists:keysearch(name, 1, Res),
+ {value, {size, 0}} = lists:keysearch(size, 1, Res),
+ {value, {node, ThisNode}} = lists:keysearch(node, 1, Res),
+ {value, {named_table, false}} = lists:keysearch(named_table, 1, Res),
+ {value, {type, set}} = lists:keysearch(type, 1, Res),
+ {value, {keypos, 2}} = lists:keysearch(keypos, 1, Res),
+ {value, {protection, protected}} =
lists:keysearch(protection, 1, Res),
- ?line true = ets:delete(Tab),
- ?line undefined = ets:info(non_existing_table_xxyy),
- ?line undefined = ets:info(non_existing_table_xxyy,type),
- ?line undefined = ets:info(non_existing_table_xxyy,node),
- ?line undefined = ets:info(non_existing_table_xxyy,named_table),
- ?line undefined = ets:info(non_existing_table_xxyy,safe_fixed_monotonic_time),
- ?line undefined = ets:info(non_existing_table_xxyy,safe_fixed),
- ?line verify_etsmem(EtsMem).
-
-dups(doc) -> ["Test various duplicate_bags stuff"];
-dups(suite) -> [];
+ true = ets:delete(Tab),
+ undefined = ets:info(non_existing_table_xxyy),
+ undefined = ets:info(non_existing_table_xxyy,type),
+ undefined = ets:info(non_existing_table_xxyy,node),
+ undefined = ets:info(non_existing_table_xxyy,named_table),
+ undefined = ets:info(non_existing_table_xxyy,safe_fixed_monotonic_time),
+ undefined = ets:info(non_existing_table_xxyy,safe_fixed),
+ verify_etsmem(EtsMem).
+
+%% Test various duplicate_bags stuff.
dups(Config) when is_list(Config) ->
repeat_for_opts(dups_do).
dups_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line T = make_table(funky,
- [duplicate_bag | Opts],
- [{1, 2}, {1, 2}]),
- ?line 2 = length(ets:tab2list(T)),
- ?line ets:delete(T, 1),
- ?line [] = ets:lookup(T, 1),
-
- ?line ets:insert(T, {1, 2, 2}),
- ?line ets:insert(T, {1, 2, 4}),
- ?line ets:insert(T, {1, 2, 2}),
- ?line ets:insert(T, {1, 2, 2}),
- ?line ets:insert(T, {1, 2, 4}),
-
- ?line 5 = length(ets:tab2list(T)),
-
- ?line 5 = length(ets:match(T, {'$1', 2, '$2'})),
- ?line 3 = length(ets:match(T, {'_', '$1', '$1'})),
- ?line ets:match_delete(T, {'_', '$1', '$1'}),
- ?line 0 = length(ets:match(T, {'_', '$1', '$1'})),
- ?line ets:delete(T),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ T = make_table(funky,
+ [duplicate_bag | Opts],
+ [{1, 2}, {1, 2}]),
+ 2 = length(ets:tab2list(T)),
+ ets:delete(T, 1),
+ [] = ets:lookup(T, 1),
+
+ ets:insert(T, {1, 2, 2}),
+ ets:insert(T, {1, 2, 4}),
+ ets:insert(T, {1, 2, 2}),
+ ets:insert(T, {1, 2, 2}),
+ ets:insert(T, {1, 2, 4}),
+
+ 5 = length(ets:tab2list(T)),
+
+ 5 = length(ets:match(T, {'$1', 2, '$2'})),
+ 3 = length(ets:match(T, {'_', '$1', '$1'})),
+ ets:match_delete(T, {'_', '$1', '$1'}),
+ 0 = length(ets:match(T, {'_', '$1', '$1'})),
+ ets:delete(T),
+ verify_etsmem(EtsMem).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-tab2file(doc) -> ["Check the ets:tab2file function on an empty "
- "ets table."];
-tab2file(suite) -> [];
+%% Test the ets:tab2file function on an empty ets table.
tab2file(Config) when is_list(Config) ->
- ?line FName = filename:join([?config(priv_dir, Config),"tab2file_case"]),
+ FName = filename:join([proplists:get_value(priv_dir, Config),"tab2file_case"]),
tab2file_do(FName, []),
tab2file_do(FName, [{sync,true}]),
tab2file_do(FName, [{sync,false}]),
@@ -4127,62 +3950,60 @@ tab2file(Config) when is_list(Config) ->
tab2file_do(FName, Opts) ->
%% Write an empty ets table to a file, read back and check properties.
- ?line Tab = ets_new(ets_SUITE_foo_tab, [named_table, set, public,
- {keypos, 2},
- compressed,
- {write_concurrency,true},
- {read_concurrency,true}]),
+ Tab = ets_new(ets_SUITE_foo_tab, [named_table, set, public,
+ {keypos, 2},
+ compressed,
+ {write_concurrency,true},
+ {read_concurrency,true}]),
catch file:delete(FName),
Res = ets:tab2file(Tab, FName, Opts),
true = ets:delete(Tab),
ok = Res,
- %
- ?line EtsMem = etsmem(),
- ?line {ok, Tab2} = ets:file2tab(FName),
+ %%
+ EtsMem = etsmem(),
+ {ok, Tab2} = ets:file2tab(FName),
public = ets:info(Tab2, protection),
- ?line true = ets:info(Tab2, named_table),
- ?line 2 = ets:info(Tab2, keypos),
- ?line set = ets:info(Tab2, type),
+ true = ets:info(Tab2, named_table),
+ 2 = ets:info(Tab2, keypos),
+ set = ets:info(Tab2, type),
true = ets:info(Tab2, compressed),
Smp = erlang:system_info(smp_support),
Smp = ets:info(Tab2, read_concurrency),
Smp = ets:info(Tab2, write_concurrency),
- ?line true = ets:delete(Tab2),
- ?line verify_etsmem(EtsMem).
+ true = ets:delete(Tab2),
+ verify_etsmem(EtsMem).
-
-tab2file2(doc) -> ["Check the ets:tab2file function on a ",
- "filled set/bag type ets table."];
-tab2file2(suite) -> [];
+
+%% Check the ets:tab2file function on a filled set/bag type ets table.
tab2file2(Config) when is_list(Config) ->
repeat_for_opts({tab2file2_do,Config}, [[set,bag],compressed]).
tab2file2_do(Opts, Config) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(ets_SUITE_foo_tab, [named_table, private,
- {keypos, 2} | Opts]),
- ?line FName = filename:join([?config(priv_dir, Config),"tab2file2_case"]),
- ?line ok = fill_tab2(Tab, 0, 10000), % Fill up the table (grucho mucho!)
- ?line Len = length(ets:tab2list(Tab)),
- ?line Mem = ets:info(Tab, memory),
- ?line Type = ets:info(Tab, type),
+ EtsMem = etsmem(),
+ Tab = ets_new(ets_SUITE_foo_tab, [named_table, private,
+ {keypos, 2} | Opts]),
+ FName = filename:join([proplists:get_value(priv_dir, Config),"tab2file2_case"]),
+ ok = fill_tab2(Tab, 0, 10000), % Fill up the table (grucho mucho!)
+ Len = length(ets:tab2list(Tab)),
+ Mem = ets:info(Tab, memory),
+ Type = ets:info(Tab, type),
%%io:format("org tab: ~p\n",[ets:info(Tab)]),
- ?line ok = ets:tab2file(Tab, FName),
- ?line true = ets:delete(Tab),
+ ok = ets:tab2file(Tab, FName),
+ true = ets:delete(Tab),
- ?line EtsMem4 = etsmem(),
+ EtsMem4 = etsmem(),
- ?line {ok, Tab2} = ets:file2tab(FName),
+ {ok, Tab2} = ets:file2tab(FName),
%%io:format("loaded tab: ~p\n",[ets:info(Tab2)]),
- ?line private = ets:info(Tab2, protection),
- ?line true = ets:info(Tab2, named_table),
- ?line 2 = ets:info(Tab2, keypos),
- ?line Type = ets:info(Tab2, type),
- ?line Len = length(ets:tab2list(Tab2)),
- ?line Mem = ets:info(Tab2, memory),
- ?line true = ets:delete(Tab2),
+ private = ets:info(Tab2, protection),
+ true = ets:info(Tab2, named_table),
+ 2 = ets:info(Tab2, keypos),
+ Type = ets:info(Tab2, type),
+ Len = length(ets:tab2list(Tab2)),
+ Mem = ets:info(Tab2, memory),
+ true = ets:delete(Tab2),
io:format("Between = ~p\n", [EtsMem4]),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
-define(test_list, [8,5,4,1,58,125,255, 250, 245, 240, 235,
230, Num rem 255, 255, 125, 130, 135, 140, 145,
@@ -4197,33 +4018,30 @@ tab2file2_do(Opts, Config) ->
fill_tab2(_Tab, _Val, 0) ->
ok;
fill_tab2(Tab, Val, Num) ->
- ?line Item =
+ Item =
case Num rem 10 of
0 -> "String";
- 1 -> ?line ?test_atom;
- 2 -> ?line ?test_tuple;
- 3 -> ?line ?test_integer;
- 4 -> ?line ?test_float;
- 5 -> ?line list_to_binary(?test_list); %Heap binary
- 6 -> ?line list_to_binary(?big_test_list); %Refc binary
- 7 -> ?line make_sub_binary(?test_list, Num); %Sub binary
- 8 -> ?line ?test_list;
- 9 -> ?line fun(X) -> {Tab,Val,X*Num} end
+ 1 -> ?test_atom;
+ 2 -> ?test_tuple;
+ 3 -> ?test_integer;
+ 4 -> ?test_float;
+ 5 -> list_to_binary(?test_list); %Heap binary
+ 6 -> list_to_binary(?big_test_list); %Refc binary
+ 7 -> make_sub_binary(?test_list, Num); %Sub binary
+ 8 -> ?test_list;
+ 9 -> fun(X) -> {Tab,Val,X*Num} end
end,
- ?line true=ets:insert(Tab, {Item, Val}),
- ?line fill_tab2(Tab, Val+1, Num-1),
+ true=ets:insert(Tab, {Item, Val}),
+ fill_tab2(Tab, Val+1, Num-1),
ok.
-tabfile_ext1(suite) ->
- [];
-tabfile_ext1(doc) ->
- ["Tests verification of tables with object count extended_info"];
+%% Test verification of tables with object count extended_info.
tabfile_ext1(Config) when is_list(Config) ->
repeat_for_opts(fun(Opts) -> tabfile_ext1_do(Opts, Config) end).
tabfile_ext1_do(Opts,Config) ->
- ?line FName = filename:join([?config(priv_dir, Config),"nisse.dat"]),
- ?line FName2 = filename:join([?config(priv_dir, Config),"countflip.dat"]),
+ FName = filename:join([proplists:get_value(priv_dir, Config),"nisse.dat"]),
+ FName2 = filename:join([proplists:get_value(priv_dir, Config),"countflip.dat"]),
L = lists:seq(1,10),
T = ets_new(x,Opts),
Name = make_ref(),
@@ -4254,16 +4072,14 @@ tabfile_ext1_do(Opts,Config) ->
file:delete(FName2),
ok.
-tabfile_ext2(suite) ->
- [];
-tabfile_ext2(doc) ->
- ["Tests verification of tables with md5sum extended_info"];
+
+%% Test verification of tables with md5sum extended_info.
tabfile_ext2(Config) when is_list(Config) ->
repeat_for_opts(fun(Opts) -> tabfile_ext2_do(Opts,Config) end).
tabfile_ext2_do(Opts,Config) ->
- ?line FName = filename:join([?config(priv_dir, Config),"olle.dat"]),
- ?line FName2 = filename:join([?config(priv_dir, Config),"bitflip.dat"]),
+ FName = filename:join([proplists:get_value(priv_dir, Config),"olle.dat"]),
+ FName2 = filename:join([proplists:get_value(priv_dir, Config),"bitflip.dat"]),
L = lists:seq(1,10),
T = ets_new(x,Opts),
Name = make_ref(),
@@ -4294,13 +4110,10 @@ tabfile_ext2_do(Opts,Config) ->
file:delete(FName2),
ok.
-tabfile_ext3(suite) ->
- [];
-tabfile_ext3(doc) ->
- ["Tests verification of (named) tables without extended info"];
+%% Test verification of (named) tables without extended info.
tabfile_ext3(Config) when is_list(Config) ->
- ?line FName = filename:join([?config(priv_dir, Config),"namn.dat"]),
- ?line FName2 = filename:join([?config(priv_dir, Config),"ncountflip.dat"]),
+ FName = filename:join([proplists:get_value(priv_dir, Config),"namn.dat"]),
+ FName2 = filename:join([proplists:get_value(priv_dir, Config),"ncountflip.dat"]),
L = lists:seq(1,10),
Name = make_ref(),
?MODULE = ets_new(?MODULE,[named_table]),
@@ -4328,12 +4141,9 @@ tabfile_ext3(Config) when is_list(Config) ->
file:delete(FName2),
ok.
-tabfile_ext4(suite) ->
- [];
-tabfile_ext4(doc) ->
- ["Tests verification of large table with md5 sum"];
+%% Tests verification of large table with md5 sum.
tabfile_ext4(Config) when is_list(Config) ->
- ?line FName = filename:join([?config(priv_dir, Config),"bauta.dat"]),
+ FName = filename:join([proplists:get_value(priv_dir, Config),"bauta.dat"]),
LL = lists:seq(1,10000),
TL = ets_new(x,[]),
Name2 = make_ref(),
@@ -4370,12 +4180,9 @@ tabfile_ext4(Config) when is_list(Config) ->
file:delete(FName),
ok.
-badfile(suite) ->
- [];
-badfile(doc) ->
- ["Tests that no disk_log is left open when file has been corrupted"];
+%% Test that no disk_log is left open when file has been corrupted.
badfile(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
File = filename:join(PrivDir, "badfile"),
_ = file:delete(File),
T = ets:new(table, []),
@@ -4431,32 +4238,31 @@ make_sub_binary(List, Num) when is_list(List) ->
%% Lookup stuff like crazy...
-heavy_lookup(doc) -> ["Performs multiple lookups for every key ",
- "in a large table."];
-heavy_lookup(suite) -> [];
+
+%% Perform multiple lookups for every key in a large table.
heavy_lookup(Config) when is_list(Config) ->
repeat_for_opts(heavy_lookup_do).
heavy_lookup_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(foobar_table, [set, protected, {keypos, 2} | Opts]),
- ?line ok = fill_tab2(Tab, 0, 7000),
- ?line ?t:do_times(50, ?MODULE, do_lookup, [Tab, 6999]),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ Tab = ets_new(foobar_table, [set, protected, {keypos, 2} | Opts]),
+ ok = fill_tab2(Tab, 0, 7000),
+ _ = [do_lookup(Tab, 6999) || _ <- lists:seq(1, 50)],
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
do_lookup(_Tab, 0) -> ok;
do_lookup(Tab, N) ->
case ets:lookup(Tab, N) of
- [] -> ?t:format("Set #~p was reported as empty. Not valid.",
- [N]),
- exit('Invalid lookup');
- _ -> do_lookup(Tab, N-1)
+ [] ->
+ io:format("Set #~p was reported as empty. Not valid.",
+ [N]),
+ exit('Invalid lookup');
+ _ ->
+ do_lookup(Tab, N-1)
end.
-heavy_lookup_element(doc) -> ["Performs multiple lookups for ",
- "every element in a large table."];
-heavy_lookup_element(suite) -> [];
+%% Perform multiple lookups for every element in a large table.
heavy_lookup_element(Config) when is_list(Config) ->
repeat_for_opts(heavy_lookup_element_do).
@@ -4464,51 +4270,52 @@ heavy_lookup_element_do(Opts) ->
EtsMem = etsmem(),
Tab = ets_new(foobar_table, [set, protected, {keypos, 2} | Opts]),
ok = fill_tab2(Tab, 0, 7000),
- % lookup ALL elements 50 times
- ?t:do_times(50, ?MODULE, do_lookup_element, [Tab, 6999, 1]),
+ %% lookup ALL elements 50 times
+ _ = [do_lookup_element(Tab, 6999, 1) || _ <- lists:seq(1, 50)],
true = ets:delete(Tab),
verify_etsmem(EtsMem).
do_lookup_element(_Tab, 0, _) -> ok;
do_lookup_element(Tab, N, M) ->
- ?line case catch ets:lookup_element(Tab, N, M) of
- {'EXIT', {badarg, _}} ->
- case M of
- 1 -> ?t:fail("Set #~p reported as empty. Not valid.",
- [N]),
- exit('Invalid lookup_element');
- _ -> ?line do_lookup_element(Tab, N-1, 1)
- end;
- _ -> ?line do_lookup_element(Tab, N, M+1)
+ case catch ets:lookup_element(Tab, N, M) of
+ {'EXIT', {badarg, _}} ->
+ case M of
+ 1 -> ct:fail("Set #~p reported as empty. Not valid.",
+ [N]),
+ exit('Invalid lookup_element');
+ _ -> do_lookup_element(Tab, N-1, 1)
+ end;
+ _ -> do_lookup_element(Tab, N, M+1)
end.
heavy_concurrent(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a lot of time
repeat_for_opts(do_heavy_concurrent).
do_heavy_concurrent(Opts) ->
- ?line Size = 10000,
- ?line EtsMem = etsmem(),
- ?line Tab = ets_new(blupp, [set, public, {keypos, 2} | Opts]),
- ?line ok = fill_tab2(Tab, 0, Size),
- ?line Procs = lists:map(
- fun (N) ->
- my_spawn_link(
- fun () ->
- do_heavy_concurrent_proc(Tab, Size, N)
- end)
- end,
- lists:seq(1, 500)),
- ?line lists:foreach(fun (P) ->
- M = erlang:monitor(process, P),
- receive
- {'DOWN', M, process, P, _} ->
- ok
- end
- end,
- Procs),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
+ Size = 10000,
+ EtsMem = etsmem(),
+ Tab = ets_new(blupp, [set, public, {keypos, 2} | Opts]),
+ ok = fill_tab2(Tab, 0, Size),
+ Procs = lists:map(
+ fun (N) ->
+ my_spawn_link(
+ fun () ->
+ do_heavy_concurrent_proc(Tab, Size, N)
+ end)
+ end,
+ lists:seq(1, 500)),
+ lists:foreach(fun (P) ->
+ M = erlang:monitor(process, P),
+ receive
+ {'DOWN', M, process, P, _} ->
+ ok
+ end
+ end,
+ Procs),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
do_heavy_concurrent_proc(_Tab, 0, _Offs) ->
done;
@@ -4522,96 +4329,78 @@ do_heavy_concurrent_proc(Tab, N, Offs) ->
do_heavy_concurrent_proc(Tab, N-1, Offs).
-fold_empty(doc) ->
- [];
-fold_empty(suite) -> [];
fold_empty(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line Tab = make_table(a, [], []),
- ?line [] = ets:foldl(fun(_X) -> exit(hej) end, [], Tab),
- ?line [] = ets:foldr(fun(_X) -> exit(hej) end, [], Tab),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-foldl(doc) ->
- [];
-foldl(suite) -> [];
+ EtsMem = etsmem(),
+ Tab = make_table(a, [], []),
+ [] = ets:foldl(fun(_X) -> exit(hej) end, [], Tab),
+ [] = ets:foldr(fun(_X) -> exit(hej) end, [], Tab),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
foldl(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line L = [{a,1}, {c,3}, {b,2}],
- ?line LS = lists:sort(L),
- ?line Tab = make_table(a, [bag], L),
- ?line LS = lists:sort(ets:foldl(fun(E,A) -> [E|A] end, [], Tab)),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-foldr(doc) ->
- [];
-foldr(suite) -> [];
+ EtsMem = etsmem(),
+ L = [{a,1}, {c,3}, {b,2}],
+ LS = lists:sort(L),
+ Tab = make_table(a, [bag], L),
+ LS = lists:sort(ets:foldl(fun(E,A) -> [E|A] end, [], Tab)),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
foldr(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line L = [{a,1}, {c,3}, {b,2}],
- ?line LS = lists:sort(L),
- ?line Tab = make_table(a, [bag], L),
- ?line LS = lists:sort(ets:foldr(fun(E,A) -> [E|A] end, [], Tab)),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-foldl_ordered(doc) ->
- [];
-foldl_ordered(suite) -> [];
+ EtsMem = etsmem(),
+ L = [{a,1}, {c,3}, {b,2}],
+ LS = lists:sort(L),
+ Tab = make_table(a, [bag], L),
+ LS = lists:sort(ets:foldr(fun(E,A) -> [E|A] end, [], Tab)),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
foldl_ordered(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line L = [{a,1}, {c,3}, {b,2}],
- ?line LS = lists:sort(L),
- ?line Tab = make_table(a, [ordered_set], L),
- ?line LS = lists:reverse(ets:foldl(fun(E,A) -> [E|A] end, [], Tab)),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-foldr_ordered(doc) ->
- [];
-foldr_ordered(suite) -> [];
+ EtsMem = etsmem(),
+ L = [{a,1}, {c,3}, {b,2}],
+ LS = lists:sort(L),
+ Tab = make_table(a, [ordered_set], L),
+ LS = lists:reverse(ets:foldl(fun(E,A) -> [E|A] end, [], Tab)),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
foldr_ordered(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
- ?line L = [{a,1}, {c,3}, {b,2}],
- ?line LS = lists:sort(L),
- ?line Tab = make_table(a, [ordered_set], L),
- ?line LS = ets:foldr(fun(E,A) -> [E|A] end, [], Tab),
- ?line true = ets:delete(Tab),
- ?line verify_etsmem(EtsMem).
-
-member(suite) ->
- [];
-member(doc) ->
- ["Tests ets:member BIF"];
+ EtsMem = etsmem(),
+ L = [{a,1}, {c,3}, {b,2}],
+ LS = lists:sort(L),
+ Tab = make_table(a, [ordered_set], L),
+ LS = ets:foldr(fun(E,A) -> [E|A] end, [], Tab),
+ true = ets:delete(Tab),
+ verify_etsmem(EtsMem).
+
+%% Test ets:member BIF.
member(Config) when is_list(Config) ->
repeat_for_opts(member_do, [write_concurrency, all_types]).
member_do(Opts) ->
- ?line EtsMem = etsmem(),
- ?line T = ets_new(xxx, Opts),
- ?line false = ets:member(T,hej),
- ?line E = fun(0,_F)->ok;
- (N,F) ->
- ?line ets:insert(T,{N,N rem 10}),
- F(N-1,F)
- end,
- ?line E(10000,E),
- ?line false = ets:member(T,hej),
- ?line true = ets:member(T,1),
- ?line false = ets:member(T,20000),
- ?line ets:delete(T,5),
- ?line false = ets:member(T,5),
- ?line ets:safe_fixtable(T,true),
- ?line ets:delete(T,6),
- ?line false = ets:member(T,6),
- ?line ets:safe_fixtable(T,false),
- ?line false = ets:member(T,6),
- ?line ets:delete(T),
- ?line {'EXIT',{badarg,_}} = (catch ets:member(finnsinte, 23)),
- ?line {'EXIT',{badarg,_}} = (catch ets:member(T, 23)),
- ?line verify_etsmem(EtsMem).
+ EtsMem = etsmem(),
+ T = ets_new(xxx, Opts),
+ false = ets:member(T,hej),
+ E = fun(0,_F)->ok;
+ (N,F) ->
+ ets:insert(T,{N,N rem 10}),
+ F(N-1,F)
+ end,
+ E(10000,E),
+ false = ets:member(T,hej),
+ true = ets:member(T,1),
+ false = ets:member(T,20000),
+ ets:delete(T,5),
+ false = ets:member(T,5),
+ ets:safe_fixtable(T,true),
+ ets:delete(T,6),
+ false = ets:member(T,6),
+ ets:safe_fixtable(T,false),
+ false = ets:member(T,6),
+ ets:delete(T),
+ {'EXIT',{badarg,_}} = (catch ets:member(finnsinte, 23)),
+ {'EXIT',{badarg,_}} = (catch ets:member(T, 23)),
+ verify_etsmem(EtsMem).
build_table(L1,L2,Num) ->
@@ -4697,11 +4486,11 @@ create_random_string(0) ->
[];
create_random_string(OfLength) ->
- C = case random:uniform(2) of
- 1 ->
- (random:uniform($Z - $A + 1) - 1) + $A;
- _ ->
- (random:uniform($z - $a + 1) - 1) + $a
+ C = case rand:uniform(2) of
+ 1 ->
+ (rand:uniform($Z - $A + 1) - 1) + $A;
+ _ ->
+ (rand:uniform($z - $a + 1) - 1) + $a
end,
[C | create_random_string(OfLength - 1)].
@@ -4712,23 +4501,23 @@ create_random_tuple(OfLength) ->
end,create_random_string(OfLength))).
create_partly_bound_tuple(OfLength) ->
- case random:uniform(2) of
+ case rand:uniform(2) of
1 ->
- create_partly_bound_tuple1(OfLength);
+ create_partly_bound_tuple1(OfLength);
_ ->
- create_partly_bound_tuple3(OfLength)
+ create_partly_bound_tuple3(OfLength)
end.
create_partly_bound_tuple1(OfLength) ->
T0 = create_random_tuple(OfLength),
- I = random:uniform(OfLength),
+ I = rand:uniform(OfLength),
setelement(I,T0,'$1').
set_n_random_elements(T0,0,_,_) ->
T0;
set_n_random_elements(T0,N,OfLength,GenFun) ->
- I = random:uniform(OfLength),
+ I = rand:uniform(OfLength),
What = GenFun(I),
case element(I,T0) of
What ->
@@ -4742,12 +4531,12 @@ make_dollar_atom(I) ->
list_to_atom([$$] ++ integer_to_list(I)).
create_partly_bound_tuple2(OfLength) ->
T0 = create_random_tuple(OfLength),
- I = random:uniform(OfLength - 1),
+ I = rand:uniform(OfLength - 1),
set_n_random_elements(T0,I,OfLength,fun make_dollar_atom/1).
create_partly_bound_tuple3(OfLength) ->
T0 = create_random_tuple(OfLength),
- I = random:uniform(OfLength - 1),
+ I = rand:uniform(OfLength - 1),
set_n_random_elements(T0,I,OfLength,fun(_) -> '_' end).
do_n_times(_,0) ->
@@ -4791,7 +4580,7 @@ xfilltabint(Tab,N) ->
_ ->
filltabint(Tab,N)
end.
-
+
filltabstr(Tab,N) ->
filltabstr(Tab,0,N).
@@ -4962,7 +4751,7 @@ successive_delete(Table,From,To,Type,TType) ->
end,
case TType of
X when X == bag; X == duplicate_bag ->
- %erlang:display(From),
+ %%erlang:display(From),
case From rem 2 of
0 ->
2 = ets:select_delete(Table,MS);
@@ -4981,19 +4770,19 @@ successive_delete(Table,From,To,Type,TType) ->
successive_delete(Table, Next, To, Type,TType).
gen_dets_filename(Config,N) ->
- filename:join(?config(priv_dir,Config),
+ filename:join(proplists:get_value(priv_dir,Config),
"testdets_" ++ integer_to_list(N) ++ ".dets").
otp_6842_select_1000(Config) when is_list(Config) ->
- ?line Tab = ets_new(xxx,[ordered_set]),
- ?line [ets:insert(Tab,{X,X}) || X <- lists:seq(1,10000)],
- ?line AllTrue = lists:duplicate(10,true),
- ?line AllTrue =
+ Tab = ets_new(xxx,[ordered_set]),
+ [ets:insert(Tab,{X,X}) || X <- lists:seq(1,10000)],
+ AllTrue = lists:duplicate(10,true),
+ AllTrue =
[ length(
element(1,
ets:select(Tab,[{'_',[],['$_']}],X*1000))) =:=
- X*1000 || X <- lists:seq(1,10) ],
- ?line Sequences = [[1000,1000,1000,1000,1000,1000,1000,1000,1000,1000],
+ X*1000 || X <- lists:seq(1,10) ],
+ Sequences = [[1000,1000,1000,1000,1000,1000,1000,1000,1000,1000],
[2000,2000,2000,2000,2000],
[3000,3000,3000,1000],
[4000,4000,2000],
@@ -5003,9 +4792,9 @@ otp_6842_select_1000(Config) when is_list(Config) ->
[8000,2000],
[9000,1000],
[10000]],
- ?line AllTrue = [ check_seq(Tab, ets:select(Tab,[{'_',[],['$_']}],hd(L)),L) ||
+ AllTrue = [ check_seq(Tab, ets:select(Tab,[{'_',[],['$_']}],hd(L)),L) ||
L <- Sequences ],
- ?line ets:delete(Tab),
+ ets:delete(Tab),
ok.
check_seq(_,'$end_of_table',[]) ->
@@ -5039,7 +4828,7 @@ w(_,0, _) -> ok;
w(T,N, Id) ->
ets:insert(T, {N, Id}),
w(T,N-1,Id).
-
+
verify(T, Ids) ->
List = my_tab_to_list(T),
Errors = lists:filter(fun(Bucket) ->
@@ -5050,7 +4839,7 @@ verify(T, Ids) ->
ok;
_ ->
io:format("Failed:\n~p\n", [Errors]),
- ?t:fail()
+ ct:fail(failed)
end.
verify2([{_N,Id}|RL], [Id|R]) ->
@@ -5059,8 +4848,7 @@ verify2([],[]) -> false;
verify2(_Err, _) ->
true.
-otp_7665(doc) -> ["delete_object followed by delete on fixed bag failed to delete objects."];
-otp_7665(suite) -> [];
+%% delete_object followed by delete on fixed bag failed to delete objects.
otp_7665(Config) when is_list(Config) ->
repeat_for_opts(otp_7665_do).
@@ -5070,30 +4858,30 @@ otp_7665_do(Opts) ->
Max = 10,
lists:foreach(fun(N)-> otp_7665_act(Tab,Min,Max,N) end,
lists:seq(Min,Max)),
- ?line true = ets:delete(Tab).
-
+ true = ets:delete(Tab).
+
otp_7665_act(Tab,Min,Max,DelNr) ->
List1 = [{key,N} || N <- lists:seq(Min,Max)],
- ?line true = ets:insert(Tab, List1),
- ?line true = ets:safe_fixtable(Tab, true),
- ?line true = ets:delete_object(Tab, {key,DelNr}),
+ true = ets:insert(Tab, List1),
+ true = ets:safe_fixtable(Tab, true),
+ true = ets:delete_object(Tab, {key,DelNr}),
List2 = lists:delete({key,DelNr}, List1),
%% Now verify that we find all remaining objects
- ?line List2 = ets:lookup(Tab,key),
- ?line EList2 = lists:map(fun({key,N})-> N end,
- List2),
- ?line EList2 = ets:lookup_element(Tab,key,2),
- ?line true = ets:delete(Tab, key),
- ?line [] = ets:lookup(Tab, key),
- ?line true = ets:safe_fixtable(Tab, false),
+ List2 = ets:lookup(Tab,key),
+ EList2 = lists:map(fun({key,N})-> N end,
+ List2),
+ EList2 = ets:lookup_element(Tab,key,2),
+ true = ets:delete(Tab, key),
+ [] = ets:lookup(Tab, key),
+ true = ets:safe_fixtable(Tab, false),
ok.
%% Whitebox testing of meta name table hashing.
meta_wb(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
repeat_for_opts(meta_wb_do),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
meta_wb_do(Opts) ->
@@ -5106,53 +4894,54 @@ meta_wb_do(Opts) ->
Len = length(Names),
OpFuns = {fun meta_wb_new/4, fun meta_wb_delete/4, fun meta_wb_rename/4},
- ?line true = (Len >= 3),
+ true = (Len >= 3),
io:format("Colliding names = ~p\n",[Names]),
F = fun(0,_,_) -> ok;
- (N,Tabs,Me) -> Name1 = lists:nth(random:uniform(Len),Names),
- Name2 = lists:nth(random:uniform(Len),Names),
- Op = element(random:uniform(3),OpFuns),
- NTabs = Op(Name1, Name2, Tabs, Opts),
- Me(N-1,NTabs,Me)
+ (N,Tabs,Me) ->
+ Name1 = lists:nth(rand:uniform(Len), Names),
+ Name2 = lists:nth(rand:uniform(Len), Names),
+ Op = element(rand:uniform(3),OpFuns),
+ NTabs = Op(Name1, Name2, Tabs, Opts),
+ Me(N-1, NTabs, Me)
end,
F(Len*100, [], F),
- % cleanup
+ %% cleanup
lists:foreach(fun(Name)->catch ets:delete(Name) end,
Names).
-
+
meta_wb_new(Name, _, Tabs, Opts) ->
case (catch ets_new(Name,[named_table|Opts])) of
Name ->
- ?line false = lists:member(Name, Tabs),
+ false = lists:member(Name, Tabs),
[Name | Tabs];
{'EXIT',{badarg,_}} ->
- ?line true = lists:member(Name, Tabs),
+ true = lists:member(Name, Tabs),
Tabs
end.
meta_wb_delete(Name, _, Tabs, _) ->
case (catch ets:delete(Name)) of
true ->
- ?line true = lists:member(Name, Tabs),
+ true = lists:member(Name, Tabs),
lists:delete(Name, Tabs);
{'EXIT',{badarg,_}} ->
- ?line false = lists:member(Name, Tabs),
+ false = lists:member(Name, Tabs),
Tabs
end.
meta_wb_rename(Old, New, Tabs, _) ->
case (catch ets:rename(Old,New)) of
New ->
- ?line true = lists:member(Old, Tabs)
+ true = lists:member(Old, Tabs)
andalso not lists:member(New, Tabs),
[New | lists:delete(Old, Tabs)];
{'EXIT',{badarg,_}} ->
- ?line true = not lists:member(Old, Tabs)
+ true = not lists:member(Old, Tabs)
orelse lists:member(New,Tabs),
Tabs
end.
-
-
+
+
colliding_names(Name) ->
erts_debug:set_internal_state(colliding_names, {Name,5}).
@@ -5160,17 +4949,13 @@ colliding_names(Name) ->
%% OTP_6913: Grow and shrink.
grow_shrink(Config) when is_list(Config) ->
- ?line EtsMem = etsmem(),
+ EtsMem = etsmem(),
Set = ets_new(a, [set]),
grow_shrink_0(0, 3071, 3000, 5000, Set),
ets:delete(Set),
- %OrdSet = ets_new(a, [ordered_set]),
- %grow_shrink_0(0, lists:seq(3071, 5000), OrdSet),
- %ets:delete(OrdSet),
-
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
grow_shrink_0(N, _, _, Max, _) when N >= Max ->
ok;
@@ -5183,21 +4968,18 @@ grow_shrink_1(N0, GrowN, ShrinkN, T) ->
grow_shrink_3(N1, N1 - ShrinkN, T).
grow_shrink_2(N, GrowTo, _) when N > GrowTo ->
- %io:format("Grown to ~p\n", [GrowTo]),
GrowTo;
grow_shrink_2(N, GrowTo, T) ->
true = ets:insert(T, {N,a}),
grow_shrink_2(N+1, GrowTo, T).
grow_shrink_3(N, ShrinkTo, _) when N =< ShrinkTo ->
- %io:format("Shrunk to ~p\n", [ShrinkTo]),
ShrinkTo;
grow_shrink_3(N, ShrinkTo, T) ->
true = ets:delete(T, N),
grow_shrink_3(N-1, ShrinkTo, T).
-
-grow_pseudo_deleted(doc) -> ["Grow a table that still contains pseudo-deleted objects"];
-grow_pseudo_deleted(suite) -> [];
+
+%% Grow a table that still contains pseudo-deleted objects.
grow_pseudo_deleted(Config) when is_list(Config) ->
only_if_smp(fun() -> grow_pseudo_deleted_do() end).
@@ -5208,17 +4990,17 @@ grow_pseudo_deleted_do() ->
grow_pseudo_deleted_do(Type) ->
process_flag(scheduler,1),
Self = self(),
- ?line T = ets_new(kalle,[Type,public,{write_concurrency,true}]),
+ T = ets_new(kalle,[Type,public,{write_concurrency,true}]),
Mod = 7, Mult = 10000,
filltabint(T,Mod*Mult),
- ?line true = ets:safe_fixtable(T,true),
- ?line Mult = ets:select_delete(T,
- [{{'$1', '_'},
- [{'=:=', {'rem', '$1', Mod}, 0}],
- [true]}]),
+ true = ets:safe_fixtable(T,true),
+ Mult = ets:select_delete(T,
+ [{{'$1', '_'},
+ [{'=:=', {'rem', '$1', Mod}, 0}],
+ [true]}]),
Left = Mult*(Mod-1),
- ?line Left = ets:info(T,size),
- ?line Mult = get_kept_objects(T),
+ Left = ets:info(T,size),
+ Mult = get_kept_objects(T),
filltabstr(T,Mult),
my_spawn_opt(
fun() ->
@@ -5234,7 +5016,7 @@ grow_pseudo_deleted_do(Type) ->
end),
Self ! done
end, [link, {scheduler,2}]),
- ?line start = receive_any(),
+ start = receive_any(),
io:format("Unfixing table... nitems=~p\n", [ets:info(T, size)]),
do_tc(fun() ->
true = ets:safe_fixtable(T, false)
@@ -5243,15 +5025,14 @@ grow_pseudo_deleted_do(Type) ->
io:format("Unfix table done in ~p ms. nitems=~p\n",
[Elapsed,ets:info(T, size)])
end),
- ?line false = ets:info(T,fixed),
- ?line 0 = get_kept_objects(T),
- ?line done = receive_any(),
+ false = ets:info(T,fixed),
+ 0 = get_kept_objects(T),
+ done = receive_any(),
%%verify_table_load(T), % may fail if concurrency is poor (genny)
ets:delete(T),
process_flag(scheduler,0).
-shrink_pseudo_deleted(doc) -> ["Shrink a table that still contains pseudo-deleted objects"];
-shrink_pseudo_deleted(suite) -> [];
+%% Shrink a table that still contains pseudo-deleted objects.
shrink_pseudo_deleted(Config) when is_list(Config) ->
only_if_smp(fun()->shrink_pseudo_deleted_do() end).
@@ -5262,16 +5043,16 @@ shrink_pseudo_deleted_do() ->
shrink_pseudo_deleted_do(Type) ->
process_flag(scheduler,1),
Self = self(),
- ?line T = ets_new(kalle,[Type,public,{write_concurrency,true}]),
+ T = ets_new(kalle,[Type,public,{write_concurrency,true}]),
Half = 10000,
filltabint(T,Half*2),
- ?line true = ets:safe_fixtable(T,true),
- ?line Half = ets:select_delete(T,
- [{{'$1', '_'},
- [{'>', '$1', Half}],
- [true]}]),
- ?line Half = ets:info(T,size),
- ?line Half = get_kept_objects(T),
+ true = ets:safe_fixtable(T,true),
+ Half = ets:select_delete(T,
+ [{{'$1', '_'},
+ [{'>', '$1', Half}],
+ [true]}]),
+ Half = ets:info(T,size),
+ Half = get_kept_objects(T),
my_spawn_opt(
fun()-> true = ets:info(T,fixed),
Self ! start,
@@ -5282,10 +5063,10 @@ shrink_pseudo_deleted_do(Type) ->
fun(Elapsed) ->
io:format("Done with delete in ~p ms.\n",
[Elapsed])
- end),
+ end),
Self ! done
end, [link, {scheduler,2}]),
- ?line start = receive_any(),
+ start = receive_any(),
io:format("Unfixing table... nitems=~p\n", [ets:info(T, size)]),
do_tc(fun() ->
true = ets:safe_fixtable(T, false)
@@ -5294,20 +5075,19 @@ shrink_pseudo_deleted_do(Type) ->
io:format("Unfix table done in ~p ms. nitems=~p\n",
[Elapsed,ets:info(T, size)])
end),
- ?line false = ets:info(T,fixed),
- ?line 0 = get_kept_objects(T),
- ?line done = receive_any(),
+ false = ets:info(T,fixed),
+ 0 = get_kept_objects(T),
+ done = receive_any(),
%%verify_table_load(T), % may fail if concurrency is poor (genny)
ets:delete(T),
process_flag(scheduler,0).
-
-meta_lookup_unnamed_read(suite) -> [];
+
meta_lookup_unnamed_read(Config) when is_list(Config) ->
InitF = fun(_) -> Tab = ets_new(unnamed,[]),
- true = ets:insert(Tab,{key,data}),
- Tab
+ true = ets:insert(Tab,{key,data}),
+ Tab
end,
ExecF = fun(Tab) -> [{key,data}] = ets:lookup(Tab,key),
Tab
@@ -5316,10 +5096,9 @@ meta_lookup_unnamed_read(Config) when is_list(Config) ->
end,
run_workers(InitF,ExecF,FiniF,10000).
-meta_lookup_unnamed_write(suite) -> [];
meta_lookup_unnamed_write(Config) when is_list(Config) ->
InitF = fun(_) -> Tab = ets_new(unnamed,[]),
- {Tab,0}
+ {Tab,0}
end,
ExecF = fun({Tab,N}) -> true = ets:insert(Tab,{key,N}),
{Tab,N+1}
@@ -5328,7 +5107,6 @@ meta_lookup_unnamed_write(Config) when is_list(Config) ->
end,
run_workers(InitF,ExecF,FiniF,10000).
-meta_lookup_named_read(suite) -> [];
meta_lookup_named_read(Config) when is_list(Config) ->
InitF = fun([ProcN|_]) -> Name = list_to_atom(integer_to_list(ProcN)),
Tab = ets_new(Name,[named_table]),
@@ -5342,11 +5120,10 @@ meta_lookup_named_read(Config) when is_list(Config) ->
end,
run_workers(InitF,ExecF,FiniF,10000).
-meta_lookup_named_write(suite) -> [];
meta_lookup_named_write(Config) when is_list(Config) ->
InitF = fun([ProcN|_]) -> Name = list_to_atom(integer_to_list(ProcN)),
- Tab = ets_new(Name,[named_table]),
- {Tab,0}
+ Tab = ets_new(Name,[named_table]),
+ {Tab,0}
end,
ExecF = fun({Tab,N}) -> true = ets:insert(Tab,{key,N}),
{Tab,N+1}
@@ -5355,7 +5132,6 @@ meta_lookup_named_write(Config) when is_list(Config) ->
end,
run_workers(InitF,ExecF,FiniF,10000).
-meta_newdel_unnamed(suite) -> [];
meta_newdel_unnamed(Config) when is_list(Config) ->
InitF = fun(_) -> ok end,
ExecF = fun(_) -> Tab = ets_new(unnamed,[]),
@@ -5364,7 +5140,6 @@ meta_newdel_unnamed(Config) when is_list(Config) ->
FiniF = fun(_) -> ok end,
run_workers(InitF,ExecF,FiniF,10000).
-meta_newdel_named(suite) -> [];
meta_newdel_named(Config) when is_list(Config) ->
InitF = fun([ProcN|_]) -> list_to_atom(integer_to_list(ProcN))
end,
@@ -5375,20 +5150,18 @@ meta_newdel_named(Config) when is_list(Config) ->
FiniF = fun(_) -> ok end,
run_workers(InitF,ExecF,FiniF,10000).
-smp_insert(doc) -> ["Concurrent insert's on same table"];
-smp_insert(suite) -> [];
+%% Concurrent insert's on same table.
smp_insert(Config) when is_list(Config) ->
ets_new(smp_insert,[named_table,public,{write_concurrency,true}]),
InitF = fun(_) -> ok end,
- ExecF = fun(_) -> true = ets:insert(smp_insert,{random:uniform(10000)})
+ ExecF = fun(_) -> true = ets:insert(smp_insert,{rand:uniform(10000)})
end,
FiniF = fun(_) -> ok end,
run_workers(InitF,ExecF,FiniF,100000),
verify_table_load(smp_insert),
ets:delete(smp_insert).
-smp_fixed_delete(doc) -> ["Concurrent delete's on same fixated table"];
-smp_fixed_delete(suite) -> [];
+%% Concurrent deletes on same fixated table.
smp_fixed_delete(Config) when is_list(Config) ->
only_if_smp(fun()->smp_fixed_delete_do() end).
@@ -5408,21 +5181,20 @@ smp_fixed_delete_do() ->
end,
FiniF = fun(_) -> ok end,
run_workers_do(InitF,ExecF,FiniF,NumOfObjs),
- ?line 0 = ets:info(T,size),
- ?line true = ets:info(T,fixed),
- ?line Buckets = num_of_buckets(T),
- ?line NumOfObjs = get_kept_objects(T),
+ 0 = ets:info(T,size),
+ true = ets:info(T,fixed),
+ Buckets = num_of_buckets(T),
+ NumOfObjs = get_kept_objects(T),
ets:safe_fixtable(T,false),
%% Will fail as unfix does not shrink the table:
- %%?line Mem = ets:info(T,memory),
+ %%Mem = ets:info(T,memory),
%%verify_table_load(T),
ets:delete(T).
num_of_buckets(T) ->
- ?line element(1,ets:info(T,stats)).
+ element(1,ets:info(T,stats)).
-smp_unfix_fix(doc) -> ["Fixate hash table while other process is busy doing unfix"];
-smp_unfix_fix(suite) -> [];
+%% Fixate hash table while other process is busy doing unfix.
smp_unfix_fix(Config) when is_list(Config) ->
only_if_smp(fun()-> smp_unfix_fix_do() end).
@@ -5436,15 +5208,15 @@ smp_unfix_fix_do() ->
filltabint(T,NumOfObjs),
ets:safe_fixtable(T,true),
Buckets = num_of_buckets(T),
- ?line Deleted = ets:select_delete(T,[{{'$1', '_'},
- [{'=<','$1', Deleted}],
- [true]}]),
- ?line Buckets = num_of_buckets(T),
+ Deleted = ets:select_delete(T,[{{'$1', '_'},
+ [{'=<','$1', Deleted}],
+ [true]}]),
+ Buckets = num_of_buckets(T),
Left = NumOfObjs - Deleted,
- ?line Left = ets:info(T,size),
- ?line true = ets:info(T,fixed),
- ?line Deleted = get_kept_objects(T),
-
+ Left = ets:info(T,size),
+ true = ets:info(T,fixed),
+ Deleted = get_kept_objects(T),
+
{Child, Mref} =
my_spawn_opt(
fun()->
@@ -5471,9 +5243,9 @@ smp_unfix_fix_do() ->
done = receive_any()
end,
[link, monitor, {scheduler,2}]),
-
- ?line start = receive_any(),
- ?line true = ets:info(T,fixed),
+
+ start = receive_any(),
+ true = ets:info(T,fixed),
io:put_chars("Parent starting to unfix... ~p\n"),
do_tc(fun() ->
ets:safe_fixtable(T, false)
@@ -5484,14 +5256,13 @@ smp_unfix_fix_do() ->
end),
Child ! done,
{'DOWN', Mref, process, Child, normal} = receive_any(),
- ?line false = ets:info(T,fixed),
- ?line 0 = get_kept_objects(T),
+ false = ets:info(T,fixed),
+ 0 = get_kept_objects(T),
%%verify_table_load(T),
ets:delete(T),
process_flag(scheduler,0).
-otp_8166(doc) -> ["Unsafe unfix was done by trapping select/match"];
-otp_8166(suite) -> [];
+%% Unsafe unfix was done by trapping select/match.
otp_8166(Config) when is_list(Config) ->
only_if_smp(3, fun()-> otp_8166_do(false),
otp_8166_do(true)
@@ -5522,8 +5293,8 @@ otp_8166_do(WC) ->
{'DOWN', ReaderMref, process, ReaderPid, normal} = receive_any(),
ZombieCrPid ! quit,
{'DOWN', ZombieCrMref, process, ZombieCrPid, normal} = receive_any(),
- ?line false = ets:info(T,fixed),
- ?line 0 = get_kept_objects(T),
+ false = ets:info(T,fixed),
+ 0 = get_kept_objects(T),
%%verify_table_load(T),
ets:delete(T),
process_flag(scheduler,0).
@@ -5564,9 +5335,9 @@ otp_8166_zombie_creator(T,Deleted) ->
{loop,Pid} ->
filltabint(T,Deleted),
ets:safe_fixtable(T,true),
- ?line Deleted = ets:select_delete(T,[{{'$1', '_'},
- [{'=<','$1', Deleted}],
- [true]}]),
+ Deleted = ets:select_delete(T,[{{'$1', '_'},
+ [{'=<','$1', Deleted}],
+ [true]}]),
Pid ! zombies_created,
repeat_while(fun() -> case ets:info(T,safe_fixed_monotonic_time) of
{_,[_P1,_P2]} ->
@@ -5584,57 +5355,55 @@ otp_8166_zombie_creator(T,Deleted) ->
io:format("ignore unfix in outer loop?\n",[]),
otp_8166_zombie_creator(T,Deleted)
end.
-
-
-
+
+
+
verify_table_load(T) ->
- ?line Stats = ets:info(T,stats),
- ?line {Buckets,AvgLen,StdDev,ExpSD,_MinLen,_MaxLen,_} = Stats,
- ?line ok = if
- AvgLen > 7 ->
- io:format("Table overloaded: Stats=~p\n~p\n",
- [Stats, ets:info(T)]),
- false;
-
- Buckets>256, AvgLen < 6 ->
- io:format("Table underloaded: Stats=~p\n~p\n",
- [Stats, ets:info(T)]),
- false;
-
- StdDev > ExpSD*2 ->
- io:format("Too large standard deviation (poor hashing?),"
- " stats=~p\n~p\n",[Stats, ets:info(T)]),
- false;
-
- true ->
- io:format("Stats = ~p\n",[Stats]),
- ok
- end.
-
-
-otp_8732(doc) -> ["ets:select on a tree with NIL key object"];
+ Stats = ets:info(T,stats),
+ {Buckets,AvgLen,StdDev,ExpSD,_MinLen,_MaxLen,_} = Stats,
+ ok = if
+ AvgLen > 7 ->
+ io:format("Table overloaded: Stats=~p\n~p\n",
+ [Stats, ets:info(T)]),
+ false;
+
+ Buckets>256, AvgLen < 6 ->
+ io:format("Table underloaded: Stats=~p\n~p\n",
+ [Stats, ets:info(T)]),
+ false;
+
+ StdDev > ExpSD*2 ->
+ io:format("Too large standard deviation (poor hashing?),"
+ " stats=~p\n~p\n",[Stats, ets:info(T)]),
+ false;
+
+ true ->
+ io:format("Stats = ~p\n",[Stats]),
+ ok
+ end.
+
+
+%% ets:select on a tree with NIL key object.
otp_8732(Config) when is_list(Config) ->
Tab = ets_new(noname,[ordered_set]),
filltabstr(Tab,999),
ets:insert(Tab,{[],"nasty NIL object"}),
- ?line [] = ets:match(Tab,{'_',nomatch}), %% Will hang if bug not fixed
+ [] = ets:match(Tab,{'_',nomatch}), %% Will hang if bug not fixed
ok.
-smp_select_delete(suite) -> [];
-smp_select_delete(doc) ->
- ["Run concurrent select_delete (and inserts) on same table."];
+%% Run concurrent select_delete (and inserts) on same table.
smp_select_delete(Config) when is_list(Config) ->
T = ets_new(smp_select_delete,[named_table,public,{write_concurrency,true}]),
Mod = 17,
Zeros = erlang:make_tuple(Mod,0),
InitF = fun(_) -> Zeros end,
ExecF = fun(Diffs0) ->
- case random:uniform(20) of
+ case rand:uniform(20) of
1 ->
Mod = 17,
- Eq = random:uniform(Mod) - 1,
+ Eq = rand:uniform(Mod) - 1,
Deleted = ets:select_delete(T,
[{{'_', '$1'},
[{'=:=', {'rem', '$1', Mod}, Eq}],
@@ -5643,67 +5412,67 @@ smp_select_delete(Config) when is_list(Config) ->
element(Eq+1,Diffs0) - Deleted),
Diffs1;
_ ->
- Key = random:uniform(10000),
+ Key = rand:uniform(10000),
Eq = Key rem Mod,
- ?line case ets:insert_new(T,{Key,Key}) of
- true ->
- Diffs1 = setelement(Eq+1, Diffs0,
- element(Eq+1,Diffs0)+1),
- Diffs1;
- false -> Diffs0
- end
+ case ets:insert_new(T,{Key,Key}) of
+ true ->
+ Diffs1 = setelement(Eq+1, Diffs0,
+ element(Eq+1,Diffs0)+1),
+ Diffs1;
+ false -> Diffs0
+ end
end
end,
FiniF = fun(Result) -> Result end,
Results = run_workers_do(InitF,ExecF,FiniF,20000),
- ?line TotCnts = lists:foldl(fun(Diffs, Sum) -> add_lists(Sum,tuple_to_list(Diffs)) end,
- lists:duplicate(Mod, 0), Results),
+ TotCnts = lists:foldl(fun(Diffs, Sum) -> add_lists(Sum,tuple_to_list(Diffs)) end,
+ lists:duplicate(Mod, 0), Results),
io:format("TotCnts = ~p\n",[TotCnts]),
- ?line LeftInTab = lists:foldl(fun(N,Sum) -> Sum+N end,
- 0, TotCnts),
+ LeftInTab = lists:foldl(fun(N,Sum) -> Sum+N end,
+ 0, TotCnts),
io:format("LeftInTab = ~p\n",[LeftInTab]),
- ?line LeftInTab = ets:info(T,size),
+ LeftInTab = ets:info(T,size),
lists:foldl(fun(Cnt,Eq) ->
WasCnt = ets:select_count(T,
[{{'_', '$1'},
[{'=:=', {'rem', '$1', Mod}, Eq}],
[true]}]),
io:format("~p: ~p =?= ~p\n",[Eq,Cnt,WasCnt]),
- ?line Cnt = WasCnt,
+ Cnt = WasCnt,
Eq+1
end,
0, TotCnts),
verify_table_load(T),
- ?line LeftInTab = ets:select_delete(T, [{{'$1','$1'}, [], [true]}]),
- ?line 0 = ets:info(T,size),
- ?line false = ets:info(T,fixed),
+ LeftInTab = ets:select_delete(T, [{{'$1','$1'}, [], [true]}]),
+ 0 = ets:info(T,size),
+ false = ets:info(T,fixed),
ets:delete(T).
-types(doc) -> ["Test different types"];
+%% Test different types.
types(Config) when is_list(Config) ->
init_externals(),
repeat_for_opts(types_do,[[set,ordered_set],compressed]).
types_do(Opts) ->
EtsMem = etsmem(),
- ?line T = ets_new(xxx,Opts),
+ T = ets_new(xxx,Opts),
Fun = fun(Term) ->
- ets:insert(T,{Term}),
- ?line [{Term}] = ets:lookup(T,Term),
- ets:insert(T,{Term,xxx}),
- ?line [{Term,xxx}] = ets:lookup(T,Term),
- ets:insert(T,{Term,"xxx"}),
- ?line [{Term,"xxx"}] = ets:lookup(T,Term),
- ets:insert(T,{xxx,Term}),
- ?line [{xxx,Term}] = ets:lookup(T,xxx),
- ets:insert(T,{"xxx",Term}),
- ?line [{"xxx",Term}] = ets:lookup(T,"xxx"),
- ets:delete_all_objects(T),
- ?line 0 = ets:info(T,size)
+ ets:insert(T,{Term}),
+ [{Term}] = ets:lookup(T,Term),
+ ets:insert(T,{Term,xxx}),
+ [{Term,xxx}] = ets:lookup(T,Term),
+ ets:insert(T,{Term,"xxx"}),
+ [{Term,"xxx"}] = ets:lookup(T,Term),
+ ets:insert(T,{xxx,Term}),
+ [{xxx,Term}] = ets:lookup(T,xxx),
+ ets:insert(T,{"xxx",Term}),
+ [{"xxx",Term}] = ets:lookup(T,"xxx"),
+ ets:delete_all_objects(T),
+ 0 = ets:info(T,size)
end,
test_terms(Fun, strict),
ets:delete(T),
- ?line verify_etsmem(EtsMem).
+ verify_etsmem(EtsMem).
%% OTP-9932: Memory overwrite when inserting large integers in compressed bag.
@@ -5720,9 +5489,10 @@ otp_9932(Config) when is_list(Config) ->
end,
lists:foreach(Fun, lists:seq(0, 16)),
ets:delete(T).
-
-otp_9423(doc) -> ["vm-deadlock caused by race between ets:delete and others on write_concurrency table"];
+
+%% vm-deadlock caused by race between ets:delete and others on
+%% write_concurrency table.
otp_9423(Config) when is_list(Config) ->
InitF = fun(_) -> {0,0} end,
ExecF = fun({S,F}) ->
@@ -5749,10 +5519,10 @@ otp_9423(Config) when is_list(Config) ->
[P ! stop || P <- Pids],
wait_pids(Pids),
ok;
-
+
Skipped -> Skipped
end.
-
+
%% Corrupted binary in compressed table
otp_10182(Config) when is_list(Config) ->
@@ -5780,7 +5550,7 @@ ets_all_run() ->
ets:delete(Table),
false = lists:member(Table, ets:all()),
ets_all_run().
-
+
take(Config) when is_list(Config) ->
%% Simple test for set tables.
@@ -5819,9 +5589,9 @@ take(Config) when is_list(Config) ->
ok.
-%
-% Utility functions:
-%
+%%
+%% Utility functions:
+%%
add_lists(L1,L2) ->
add_lists(L1,L2,[]).
@@ -5843,11 +5613,11 @@ run_workers(InitF,ExecF,FiniF,Laps, Exclude) ->
run_workers_do(InitF,ExecF,FiniF,Laps) ->
run_workers_do(InitF,ExecF,FiniF,Laps, 0).
run_workers_do(InitF,ExecF,FiniF,Laps, Exclude) ->
- ?line NumOfProcs = case erlang:system_info(schedulers) of
- N when (N > Exclude) -> N - Exclude
- end,
+ NumOfProcs = case erlang:system_info(schedulers) of
+ N when (N > Exclude) -> N - Exclude
+ end,
io:format("smp starting ~p workers\n",[NumOfProcs]),
- Seeds = [{ProcN,random:uniform(9999)} || ProcN <- lists:seq(1,NumOfProcs)],
+ Seeds = [{ProcN,rand:uniform(9999)} || ProcN <- lists:seq(1,NumOfProcs)],
Parent = self(),
Pids = [my_spawn_link(fun()-> worker(Seed,InitF,ExecF,FiniF,Laps,Parent,NumOfProcs) end)
|| Seed <- Seeds],
@@ -5855,10 +5625,10 @@ run_workers_do(InitF,ExecF,FiniF,Laps, Exclude) ->
infinite -> Pids;
_ -> wait_pids(Pids)
end.
-
+
worker({ProcN,Seed}, InitF, ExecF, FiniF, Laps, Parent, NumOfProcs) ->
io:format("smp worker ~p, seed=~p~n",[self(),Seed]),
- random:seed(Seed,Seed,Seed),
+ rand:seed(exsplus, {Seed,Seed,Seed}),
State1 = InitF([ProcN, NumOfProcs]),
State2 = worker_loop(Laps, ExecF, State1),
Result = FiniF(State2),
@@ -5873,7 +5643,7 @@ worker_loop(infinite, ExecF, State) ->
worker_loop(infinite,ExecF,ExecF(State));
worker_loop(N, ExecF, State) ->
worker_loop(N-1,ExecF,ExecF(State)).
-
+
wait_pids(Pids) ->
wait_pids(Pids,[]).
wait_pids([],Acc) ->
@@ -5881,7 +5651,7 @@ wait_pids([],Acc) ->
wait_pids(Pids, Acc) ->
receive
{Pid,Result} ->
- ?line true = lists:member(Pid,Pids),
+ true = lists:member(Pid,Pids),
Others = lists:delete(Pid,Pids),
io:format("wait_pid got ~p from ~p, still waiting for ~p\n",[Result,Pid,Others]),
wait_pids(Others,[Result | Acc])
@@ -5907,7 +5677,7 @@ wait_for_memory_deallocations() ->
erts_debug:set_internal_state(available_internal_state, true),
wait_for_memory_deallocations()
end.
-
+
etsmem() ->
wait_for_memory_deallocations(),
@@ -5920,35 +5690,35 @@ etsmem() ->
ErlangMemoryEts = try erlang:memory(ets) catch error:notsup -> notsup end,
Mem =
- {ErlangMemoryEts,
- case EtsAllocInfo of
- false -> undefined;
- MemInfo ->
- CS = lists:foldl(
- fun ({instance, _, L}, Acc) ->
- {value,{mbcs,MBCS}} = lists:keysearch(mbcs, 1, L),
- {value,{sbcs,SBCS}} = lists:keysearch(sbcs, 1, L),
- NewAcc = [MBCS, SBCS | Acc],
- case lists:keysearch(mbcs_pool, 1, L) of
- {value,{mbcs_pool, MBCS_POOL}} ->
- [MBCS_POOL|NewAcc];
- _ -> NewAcc
- end
- end,
- [],
- MemInfo),
- lists:foldl(
- fun(L, {Bl0,BlSz0}) ->
- {value,BlTup} = lists:keysearch(blocks, 1, L),
- blocks = element(1, BlTup),
- Bl = element(2, BlTup),
- {value,BlSzTup} = lists:keysearch(blocks_size, 1, L),
- blocks_size = element(1, BlSzTup),
- BlSz = element(2, BlSzTup),
- {Bl0+Bl,BlSz0+BlSz}
- end, {0,0}, CS)
- end},
- {Mem,AllTabs}.
+ {ErlangMemoryEts,
+ case EtsAllocInfo of
+ false -> undefined;
+ MemInfo ->
+ CS = lists:foldl(
+ fun ({instance, _, L}, Acc) ->
+ {value,{mbcs,MBCS}} = lists:keysearch(mbcs, 1, L),
+ {value,{sbcs,SBCS}} = lists:keysearch(sbcs, 1, L),
+ NewAcc = [MBCS, SBCS | Acc],
+ case lists:keysearch(mbcs_pool, 1, L) of
+ {value,{mbcs_pool, MBCS_POOL}} ->
+ [MBCS_POOL|NewAcc];
+ _ -> NewAcc
+ end
+ end,
+ [],
+ MemInfo),
+ lists:foldl(
+ fun(L, {Bl0,BlSz0}) ->
+ {value,BlTup} = lists:keysearch(blocks, 1, L),
+ blocks = element(1, BlTup),
+ Bl = element(2, BlTup),
+ {value,BlSzTup} = lists:keysearch(blocks_size, 1, L),
+ blocks_size = element(1, BlSzTup),
+ BlSz = element(2, BlSzTup),
+ {Bl0+Bl,BlSz0+BlSz}
+ end, {0,0}, CS)
+ end},
+ {Mem,AllTabs}.
verify_etsmem({MemInfo,AllTabs}) ->
wait_for_test_procs(),
@@ -6005,10 +5775,11 @@ spawn_logger(Procs, FailedMemchecks) ->
after 0 ->
case Kill of
true -> exit(Proc, kill);
- _ -> ok
+ _ ->
+ erlang:display({"Waiting for 'DOWN' from", Proc,
+ process_info(Proc),
+ pid_status(Proc)})
end,
- erlang:display({"Waiting for 'DOWN' from", Proc,
- process_info(Proc), pid_status(Proc)}),
receive
{'DOWN', Mon, _, _, _} ->
ok
@@ -6134,7 +5905,7 @@ receive_any_spinning(Loops,0,Tries) ->
end;
receive_any_spinning(Loops, N, Tries) when N>0 ->
receive_any_spinning(Loops, N-1, Tries).
-
+
spawn_monitor_with_pid(Pid, Fun) when is_pid(Pid) ->
@@ -6169,130 +5940,130 @@ only_if_smp(Schedulers, Func) ->
-define(heap_binary_size, 64).
test_terms(Test_Func, Mode) ->
garbage_collect(),
- ?line Pib0 = process_info(self(),binary),
-
- ?line Test_Func(atom),
- ?line Test_Func(''),
- ?line Test_Func('a'),
- ?line Test_Func('ab'),
- ?line Test_Func('abc'),
- ?line Test_Func('abcd'),
- ?line Test_Func('abcde'),
- ?line Test_Func('abcdef'),
- ?line Test_Func('abcdefg'),
- ?line Test_Func('abcdefgh'),
-
- ?line Test_Func(fun() -> ok end),
+ Pib0 = process_info(self(),binary),
+
+ Test_Func(atom),
+ Test_Func(''),
+ Test_Func('a'),
+ Test_Func('ab'),
+ Test_Func('abc'),
+ Test_Func('abcd'),
+ Test_Func('abcde'),
+ Test_Func('abcdef'),
+ Test_Func('abcdefg'),
+ Test_Func('abcdefgh'),
+
+ Test_Func(fun() -> ok end),
X = id([a,{b,c},c]),
Y = id({x,y,z}),
Z = id(1 bsl 8*257),
- ?line Test_Func(fun() -> X end),
- ?line Test_Func(fun() -> {X,Y} end),
- ?line Test_Func([fun() -> {X,Y,Z} end,
- fun() -> {Z,X,Y} end,
- fun() -> {Y,Z,X} end]),
-
- ?line Test_Func({trace_ts,{even_bigger,{some_data,fun() -> ok end}},{1,2,3}}),
- ?line Test_Func({trace_ts,{even_bigger,{some_data,<<1,2,3,4,5,6,7,8,9,10>>}},
- {1,2,3}}),
-
- ?line Test_Func(1),
- ?line Test_Func(42),
- ?line Test_Func(-23),
- ?line Test_Func(256),
- ?line Test_Func(25555),
- ?line Test_Func(-3333),
-
- ?line Test_Func(1.0),
-
- ?line Test_Func(183749783987483978498378478393874),
- ?line Test_Func(-37894183749783987483978498378478393874),
+ Test_Func(fun() -> X end),
+ Test_Func(fun() -> {X,Y} end),
+ Test_Func([fun() -> {X,Y,Z} end,
+ fun() -> {Z,X,Y} end,
+ fun() -> {Y,Z,X} end]),
+
+ Test_Func({trace_ts,{even_bigger,{some_data,fun() -> ok end}},{1,2,3}}),
+ Test_Func({trace_ts,{even_bigger,{some_data,<<1,2,3,4,5,6,7,8,9,10>>}},
+ {1,2,3}}),
+
+ Test_Func(1),
+ Test_Func(42),
+ Test_Func(-23),
+ Test_Func(256),
+ Test_Func(25555),
+ Test_Func(-3333),
+
+ Test_Func(1.0),
+
+ Test_Func(183749783987483978498378478393874),
+ Test_Func(-37894183749783987483978498378478393874),
Very_Big = very_big_num(),
- ?line Test_Func(Very_Big),
- ?line Test_Func(-Very_Big+1),
+ Test_Func(Very_Big),
+ Test_Func(-Very_Big+1),
- ?line Test_Func([]),
- ?line Test_Func("abcdef"),
- ?line Test_Func([a, b, 1, 2]),
- ?line Test_Func([a|b]),
+ Test_Func([]),
+ Test_Func("abcdef"),
+ Test_Func([a, b, 1, 2]),
+ Test_Func([a|b]),
- ?line Test_Func({}),
- ?line Test_Func({1}),
- ?line Test_Func({a, b}),
- ?line Test_Func({a, b, c}),
- ?line Test_Func(list_to_tuple(lists:seq(0, 255))),
- ?line Test_Func(list_to_tuple(lists:seq(0, 256))),
+ Test_Func({}),
+ Test_Func({1}),
+ Test_Func({a, b}),
+ Test_Func({a, b, c}),
+ Test_Func(list_to_tuple(lists:seq(0, 255))),
+ Test_Func(list_to_tuple(lists:seq(0, 256))),
- ?line Test_Func(make_ref()),
- ?line Test_Func([make_ref(), make_ref()]),
+ Test_Func(make_ref()),
+ Test_Func([make_ref(), make_ref()]),
- ?line Test_Func(make_port()),
+ Test_Func(make_port()),
- ?line Test_Func(make_pid()),
- ?line Test_Func(make_ext_pid()),
- ?line Test_Func(make_ext_port()),
- ?line Test_Func(make_ext_ref()),
+ Test_Func(make_pid()),
+ Test_Func(make_ext_pid()),
+ Test_Func(make_ext_port()),
+ Test_Func(make_ext_ref()),
Bin0 = list_to_binary(lists:seq(0, 14)),
- ?line Test_Func(Bin0),
+ Test_Func(Bin0),
Bin1 = list_to_binary(lists:seq(0, ?heap_binary_size)),
- ?line Test_Func(Bin1),
+ Test_Func(Bin1),
Bin2 = list_to_binary(lists:seq(0, ?heap_binary_size+1)),
- ?line Test_Func(Bin2),
+ Test_Func(Bin2),
Bin3 = list_to_binary(lists:seq(0, 255)),
garbage_collect(),
Pib = process_info(self(),binary),
- ?line Test_Func(Bin3),
+ Test_Func(Bin3),
garbage_collect(),
case Mode of
- strict -> ?line Pib = process_info(self(),binary);
+ strict -> Pib = process_info(self(),binary);
skip_refc_check -> ok
end,
- ?line Test_Func(make_unaligned_sub_binary(Bin0)),
- ?line Test_Func(make_unaligned_sub_binary(Bin1)),
- ?line Test_Func(make_unaligned_sub_binary(Bin2)),
- ?line Test_Func(make_unaligned_sub_binary(Bin3)),
-
- ?line Test_Func(make_sub_binary(lists:seq(42, 43))),
- ?line Test_Func(make_sub_binary([42,43,44])),
- ?line Test_Func(make_sub_binary([42,43,44,45])),
- ?line Test_Func(make_sub_binary([42,43,44,45,46])),
- ?line Test_Func(make_sub_binary([42,43,44,45,46,47])),
- ?line Test_Func(make_sub_binary([42,43,44,45,46,47,48])),
- ?line Test_Func(make_sub_binary(lists:seq(42, 49))),
- ?line Test_Func(make_sub_binary(lists:seq(0, 14))),
- ?line Test_Func(make_sub_binary(lists:seq(0, ?heap_binary_size))),
- ?line Test_Func(make_sub_binary(lists:seq(0, ?heap_binary_size+1))),
- ?line Test_Func(make_sub_binary(lists:seq(0, 255))),
-
- ?line Test_Func(make_unaligned_sub_binary(lists:seq(42, 43))),
- ?line Test_Func(make_unaligned_sub_binary([42,43,44])),
- ?line Test_Func(make_unaligned_sub_binary([42,43,44,45])),
- ?line Test_Func(make_unaligned_sub_binary([42,43,44,45,46])),
- ?line Test_Func(make_unaligned_sub_binary([42,43,44,45,46,47])),
- ?line Test_Func(make_unaligned_sub_binary([42,43,44,45,46,47,48])),
- ?line Test_Func(make_unaligned_sub_binary(lists:seq(42, 49))),
- ?line Test_Func(make_unaligned_sub_binary(lists:seq(0, 14))),
- ?line Test_Func(make_unaligned_sub_binary(lists:seq(0, ?heap_binary_size))),
- ?line Test_Func(make_unaligned_sub_binary(lists:seq(0, ?heap_binary_size+1))),
- ?line Test_Func(make_unaligned_sub_binary(lists:seq(0, 255))),
+ Test_Func(make_unaligned_sub_binary(Bin0)),
+ Test_Func(make_unaligned_sub_binary(Bin1)),
+ Test_Func(make_unaligned_sub_binary(Bin2)),
+ Test_Func(make_unaligned_sub_binary(Bin3)),
+
+ Test_Func(make_sub_binary(lists:seq(42, 43))),
+ Test_Func(make_sub_binary([42,43,44])),
+ Test_Func(make_sub_binary([42,43,44,45])),
+ Test_Func(make_sub_binary([42,43,44,45,46])),
+ Test_Func(make_sub_binary([42,43,44,45,46,47])),
+ Test_Func(make_sub_binary([42,43,44,45,46,47,48])),
+ Test_Func(make_sub_binary(lists:seq(42, 49))),
+ Test_Func(make_sub_binary(lists:seq(0, 14))),
+ Test_Func(make_sub_binary(lists:seq(0, ?heap_binary_size))),
+ Test_Func(make_sub_binary(lists:seq(0, ?heap_binary_size+1))),
+ Test_Func(make_sub_binary(lists:seq(0, 255))),
+
+ Test_Func(make_unaligned_sub_binary(lists:seq(42, 43))),
+ Test_Func(make_unaligned_sub_binary([42,43,44])),
+ Test_Func(make_unaligned_sub_binary([42,43,44,45])),
+ Test_Func(make_unaligned_sub_binary([42,43,44,45,46])),
+ Test_Func(make_unaligned_sub_binary([42,43,44,45,46,47])),
+ Test_Func(make_unaligned_sub_binary([42,43,44,45,46,47,48])),
+ Test_Func(make_unaligned_sub_binary(lists:seq(42, 49))),
+ Test_Func(make_unaligned_sub_binary(lists:seq(0, 14))),
+ Test_Func(make_unaligned_sub_binary(lists:seq(0, ?heap_binary_size))),
+ Test_Func(make_unaligned_sub_binary(lists:seq(0, ?heap_binary_size+1))),
+ Test_Func(make_unaligned_sub_binary(lists:seq(0, 255))),
%% Bit level binaries.
- ?line Test_Func(<<1:1>>),
- ?line Test_Func(<<2:2>>),
- ?line Test_Func(<<42:10>>),
- ?line Test_Func(list_to_bitstring([<<5:6>>|lists:seq(0, 255)])),
+ Test_Func(<<1:1>>),
+ Test_Func(<<2:2>>),
+ Test_Func(<<42:10>>),
+ Test_Func(list_to_bitstring([<<5:6>>|lists:seq(0, 255)])),
- ?line Test_Func(F = fun(A) -> 42*A end),
- ?line Test_Func(lists:duplicate(32, F)),
+ Test_Func(F = fun(A) -> 42*A end),
+ Test_Func(lists:duplicate(32, F)),
- ?line Test_Func(FF = fun binary_SUITE:all/1),
- ?line Test_Func(lists:duplicate(32, FF)),
+ Test_Func(FF = fun binary_SUITE:all/1),
+ Test_Func(lists:duplicate(32, FF)),
garbage_collect(),
case Mode of
- strict -> ?line Pib0 = process_info(self(),binary);
+ strict -> Pib0 = process_info(self(),binary);
skip_refc_check -> ok
end,
ok.
@@ -6304,18 +6075,18 @@ very_big_num() ->
very_big_num(33, 1).
very_big_num(Left, Result) when Left > 0 ->
- ?line very_big_num(Left-1, Result*256);
+ very_big_num(Left-1, Result*256);
very_big_num(0, Result) ->
- ?line Result.
+ Result.
make_port() ->
- ?line open_port({spawn, "efile"}, [eof]).
+ open_port({spawn, "efile"}, [eof]).
make_pid() ->
- ?line spawn_link(?MODULE, sleeper, []).
+ spawn_link(?MODULE, sleeper, []).
sleeper() ->
- ?line receive after infinity -> ok end.
+ receive after infinity -> ok end.
make_ext_pid() ->
{Pid, _, _} = get(externals),
@@ -6373,11 +6144,11 @@ mk_pid({NodeName, Creation}, Number, Serial) when is_atom(NodeName) ->
mk_pid({NodeNameExt, Creation}, Number, Serial);
mk_pid({NodeNameExt, Creation}, Number, Serial) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PID_EXT,
- NodeNameExt,
- uint32_be(Number),
- uint32_be(Serial),
- uint8(Creation)])) of
+ ?PID_EXT,
+ NodeNameExt,
+ uint32_be(Number),
+ uint32_be(Serial),
+ uint8(Creation)])) of
Pid when is_pid(Pid) ->
Pid;
{'EXIT', {badarg, _}} ->
@@ -6467,7 +6238,7 @@ repeat_for_opts(F, [], Acc) ->
_ -> [RV | RV_Acc]
end
end
- end, [], Acc);
+ end, [], Acc);
repeat_for_opts(F, [OptList | Tail], []) when is_list(OptList) ->
repeat_for_opts(F, Tail, [[Opt] || Opt <- OptList]);
repeat_for_opts(F, [OptList | Tail], AccList) when is_list(OptList) ->
@@ -6479,7 +6250,7 @@ repeat_for_opts_atom2list(all_types) -> [set,ordered_set,bag,duplicate_bag];
repeat_for_opts_atom2list(write_concurrency) -> [{write_concurrency,false},{write_concurrency,true}];
repeat_for_opts_atom2list(read_concurrency) -> [{read_concurrency,false},{read_concurrency,true}];
repeat_for_opts_atom2list(compressed) -> [compressed,void].
-
+
ets_new(Name, Opts) ->
%%ets:new(Name, [compressed | Opts]).
ets:new(Name, Opts).
diff --git a/lib/stdlib/test/ets_tough_SUITE.erl b/lib/stdlib/test/ets_tough_SUITE.erl
index c6f24fc670..49aba7a529 100644
--- a/lib/stdlib/test/ets_tough_SUITE.erl
+++ b/lib/stdlib/test/ets_tough_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,9 +23,11 @@
-export([init/1,terminate/2,handle_call/3,handle_info/2]).
-export([init_per_testcase/2, end_per_testcase/2]).
-compile([export_all]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[ex1].
@@ -52,34 +54,31 @@ end_per_group(_GroupName, Config) ->
-define(GLOBAL_PARAMS,ets_tough_SUITE_global_params).
init_per_testcase(_Func, Config) ->
- Dog=test_server:timetrap(test_server:seconds(300)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Func, _Config) ->
ets:delete(?GLOBAL_PARAMS).
ex1(Config) when is_list(Config) ->
- ?line ets:new(?GLOBAL_PARAMS,[named_table,public]),
- ?line ets:insert(?GLOBAL_PARAMS,{a,set}),
- ?line ets:insert(?GLOBAL_PARAMS,{b,set}),
- ?line ex1_sub(Config),
- ?line ets:insert(?GLOBAL_PARAMS,{a,ordered_set}),
- ?line ets:insert(?GLOBAL_PARAMS,{b,set}),
- ?line ex1_sub(Config),
- ?line ets:insert(?GLOBAL_PARAMS,{a,ordered_set}),
- ?line ets:insert(?GLOBAL_PARAMS,{b,ordered_set}),
- ?line ex1_sub(Config).
-
-
+ ets:new(?GLOBAL_PARAMS,[named_table,public]),
+ ets:insert(?GLOBAL_PARAMS,{a,set}),
+ ets:insert(?GLOBAL_PARAMS,{b,set}),
+ ex1_sub(Config),
+ ets:insert(?GLOBAL_PARAMS,{a,ordered_set}),
+ ets:insert(?GLOBAL_PARAMS,{b,set}),
+ ex1_sub(Config),
+ ets:insert(?GLOBAL_PARAMS,{a,ordered_set}),
+ ets:insert(?GLOBAL_PARAMS,{b,ordered_set}),
+ ex1_sub(Config).
+
+
ex1_sub(Config) ->
{A,B} = prep(Config),
N =
- case ?config(ets_tough_SUITE_iters,Config) of
+ case proplists:get_value(ets_tough_SUITE_iters,Config) of
undefined ->
5000;
Other ->
@@ -92,9 +91,9 @@ ex1_sub(Config) ->
ok.
prep(Config) ->
- random:seed(),
+ rand:seed(exsplus),
put(dump_ticket,none),
- DumpDir = filename:join(?config(priv_dir,Config), "ets_tough"),
+ DumpDir = filename:join(proplists:get_value(priv_dir,Config), "ets_tough"),
file:make_dir(DumpDir),
put(dump_dir,DumpDir),
process_flag(trap_exit,true),
@@ -188,9 +187,9 @@ operate(dump,A,_B) ->
NewTicket = ddump_next(A,Units,Ticket),
put(dump_ticket,NewTicket),
_Result = case NewTicket of
- done -> done;
- _ -> dump_more
- end,
+ done -> done;
+ _ -> dump_more
+ end,
?DEBUG(io:format("dump ~w (~w)\n",[Units,_Result]));
_ ->
DumpDir = get(dump_dir),
@@ -211,7 +210,7 @@ operate(dump,A,_B) ->
ok
end
end.
-
+
random_operation() ->
Ops = {get,put,erase,dirty_get,dump},
random_element(Ops).
@@ -221,19 +220,19 @@ random_class() ->
random_element(Classes).
random_key() ->
- random:uniform(8).
+ rand:uniform(8).
random_value() ->
- case random:uniform(5) of
+ case rand:uniform(5) of
1 -> ok;
2 -> {data,random_key()};
3 -> {foo,bar,random_class()};
- 4 -> random:uniform(1000);
+ 4 -> rand:uniform(1000);
5 -> {recursive,random_value()}
end.
random_element(T) ->
- I = random:uniform(tuple_size(T)),
+ I = rand:uniform(tuple_size(T)),
element(I,T).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -246,7 +245,7 @@ show_table(N) ->
_ ->
error
end.
-
+
show_entries(Fd) ->
case phys_read_len(Fd) of
{ok,Len} ->
@@ -370,7 +369,7 @@ derase(ServerPid,Class,Key) ->
dget_class(ServerPid,Class,Condition) ->
gen_server:call(ServerPid,
- {handle_get_class,Class,Condition},infinity).
+ {handle_get_class,Class,Condition},infinity).
%%% derase_class(ServerPid,Class) -> ok
%%%
@@ -828,7 +827,7 @@ table_lookup_batch([],_Class,_Cond) ->
[];
table_lookup_batch([Table|Tables],Class,Cond) ->
table_lookup_batch([],Tables,Table,ets:first(Table),Class,Cond,[]).
-
+
table_lookup_batch(_Passed,[],_,'$end_of_table',_Class,_Cond,Ack) ->
Ack;
table_lookup_batch(Passed,[NewTable|Tables],Table,'$end_of_table',
@@ -838,7 +837,7 @@ table_lookup_batch(Passed,[NewTable|Tables],Table,'$end_of_table',
table_lookup_batch(Passed,Tables,Table,?ERASE_MARK(Key),Class,Cond,Ack) ->
table_lookup_batch(Passed,Tables,Table,?ets_next(Table,?ERASE_MARK(Key)),
Class,Cond,Ack);
-
+
table_lookup_batch(Passed,Tables,Table,Key,Class,Cond,Ack) ->
NewAck =
case table_lookup(Passed,Key) of
@@ -1069,7 +1068,7 @@ phys_load_table(DumpDir,N,Tab) ->
Other ->
{error,{open_error,Other}}
end.
-
+
phys_load_entries(Fd,Tab) ->
case phys_read_len(Fd) of
{ok,Len} ->
diff --git a/lib/stdlib/test/expand_test.erl b/lib/stdlib/test/expand_test.erl
index 6c178a9270..5544923a12 100644
--- a/lib/stdlib/test/expand_test.erl
+++ b/lib/stdlib/test/expand_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/expand_test1.erl b/lib/stdlib/test/expand_test1.erl
index 9f1ea42eb7..abefaefcfd 100644
--- a/lib/stdlib/test/expand_test1.erl
+++ b/lib/stdlib/test/expand_test1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/file_sorter_SUITE.erl b/lib/stdlib/test/file_sorter_SUITE.erl
index e0d9ec1fd7..5c0e2c1576 100644
--- a/lib/stdlib/test/file_sorter_SUITE.erl
+++ b/lib/stdlib/test/file_sorter_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(file_sorter_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -28,9 +28,9 @@
-define(t,test_server).
-define(privdir(_), "./file_sorter_SUITE_priv").
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
--define(privdir(Conf), ?config(priv_dir, Conf)).
+-define(privdir(Conf), proplists:get_value(priv_dir, Conf)).
-endif.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -49,15 +49,14 @@
-export([init_per_testcase/2, end_per_testcase/2]).
init_per_testcase(_Case, Config) ->
- Dog=?t:timetrap(?t:minutes(2)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[basic, badarg, term_sort, term_keysort,
@@ -83,377 +82,323 @@ end_per_group(_GroupName, Config) ->
Config.
-basic(doc) ->
- ["Basic test case."];
-basic(suite) ->
- [];
+%% Basic test case.
basic(Config) when is_list(Config) ->
Fmt = binary,
Arg = {format,Fmt},
Foo = outfile("foo", Config),
P0 = pps(),
- ?line F1s = [F1] = to_files([[]], Fmt, Config),
- ?line ok = file_sorter:sort(F1),
- ?line [] = from_files(F1, Fmt),
- ?line ok = file_sorter:keysort(17, F1),
- ?line [] = from_files(F1, Fmt),
- ?line ok = file_sorter:merge(F1s, Foo),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:keymerge(17, F1s, Foo),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files([Foo | F1s]),
-
- ?line [F2] = to_files([[foo,bar]], Fmt, Config),
- ?line ok = file_sorter:sort([F2], F2, Arg),
- ?line [bar,foo] = from_files(F2, Fmt),
- ?line delete_files(F2),
-
- ?line Fs1 = to_files([[foo],[bar]], Fmt, Config),
- ?line ok = file_sorter:sort(Fs1, Foo, Arg),
- ?line [bar,foo] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:merge(Fs1, Foo, Arg),
- ?line [bar,foo] = from_files(Foo, Fmt),
- ?line delete_files([Foo | Fs1]),
-
- ?line Fmt2 = binary_term,
- ?line Arg2 = {format, Fmt2},
- ?line [F3] = to_files([[{foo,1},{bar,2}]], Fmt2, Config),
- ?line ok = file_sorter:keysort([2], [F3], F3, Arg2),
- ?line [{foo,1},{bar,2}] = from_files(F3, Fmt2),
- ?line delete_files(F3),
-
- ?line Fs2 = to_files([[{foo,1}],[{bar,2}]], Fmt2, Config),
- ?line ok = file_sorter:keysort(1, Fs2, Foo, Arg2),
- ?line [{bar,2},{foo,1}] = from_files(Foo, Fmt2),
- ?line delete_files(Foo),
- ?line ok = file_sorter:keymerge(1, Fs2, Foo, Arg2),
- ?line [{bar,2},{foo,1}] = from_files(Foo, Fmt2),
- ?line delete_files([Foo | Fs2]),
-
- ?line true = P0 =:= pps(),
+ F1s = [F1] = to_files([[]], Fmt, Config),
+ ok = file_sorter:sort(F1),
+ [] = from_files(F1, Fmt),
+ ok = file_sorter:keysort(17, F1),
+ [] = from_files(F1, Fmt),
+ ok = file_sorter:merge(F1s, Foo),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:keymerge(17, F1s, Foo),
+ [] = from_files(Foo, Fmt),
+ delete_files([Foo | F1s]),
+
+ [F2] = to_files([[foo,bar]], Fmt, Config),
+ ok = file_sorter:sort([F2], F2, Arg),
+ [bar,foo] = from_files(F2, Fmt),
+ delete_files(F2),
+
+ Fs1 = to_files([[foo],[bar]], Fmt, Config),
+ ok = file_sorter:sort(Fs1, Foo, Arg),
+ [bar,foo] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:merge(Fs1, Foo, Arg),
+ [bar,foo] = from_files(Foo, Fmt),
+ delete_files([Foo | Fs1]),
+
+ Fmt2 = binary_term,
+ Arg2 = {format, Fmt2},
+ [F3] = to_files([[{foo,1},{bar,2}]], Fmt2, Config),
+ ok = file_sorter:keysort([2], [F3], F3, Arg2),
+ [{foo,1},{bar,2}] = from_files(F3, Fmt2),
+ delete_files(F3),
+
+ Fs2 = to_files([[{foo,1}],[{bar,2}]], Fmt2, Config),
+ ok = file_sorter:keysort(1, Fs2, Foo, Arg2),
+ [{bar,2},{foo,1}] = from_files(Foo, Fmt2),
+ delete_files(Foo),
+ ok = file_sorter:keymerge(1, Fs2, Foo, Arg2),
+ [{bar,2},{foo,1}] = from_files(Foo, Fmt2),
+ delete_files([Foo | Fs2]),
+
+ true = P0 =:= pps(),
ok.
-badarg(doc) ->
- ["Call functions with bad arguments."];
-badarg(suite) ->
- [];
+%% Call functions with bad arguments.
badarg(Config) when is_list(Config) ->
PrivDir = ?privdir(Config),
BadFile = filename:join(PrivDir, "not_a_file"),
ABadFile = filename:absname(BadFile),
- ?line file:delete(BadFile),
- ?line {error,{file_error,ABadFile,enoent}} =
+ file:delete(BadFile),
+ {error,{file_error,ABadFile,enoent}} =
file_sorter:sort(BadFile),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:sort({flipp})),
- ?line {error,{file_error,ABadFile,enoent}} =
+ {error,{file_error,ABadFile,enoent}} =
file_sorter:keysort(1, BadFile),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:keysort(1, {flipp})),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:merge([{flipp}],foo)),
- ?line {error,{file_error,ABadFile,enoent}} =
+ {error,{file_error,ABadFile,enoent}} =
file_sorter:keymerge(1,[BadFile],foo),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:keymerge(1,[{flipp}],foo)),
- ?line {'EXIT', {{badarg, _}, _}} =
+ {'EXIT', {{badarg, _}, _}} =
(catch file_sorter:merge(fun(X) -> X end, foo)),
- ?line {'EXIT', {{badarg, _}, _}} =
+ {'EXIT', {{badarg, _}, _}} =
(catch file_sorter:keymerge(1, fun(X) -> X end, foo)),
- ?line {error,{file_error,ABadFile,enoent}} =
+ {error,{file_error,ABadFile,enoent}} =
file_sorter:check(BadFile),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:check({flipp})),
- ?line {error,{file_error,ABadFile,enoent}} =
+ {error,{file_error,ABadFile,enoent}} =
file_sorter:keycheck(1, BadFile),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:keycheck(1, {flipp})),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:check([{flipp}],foo)),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:keycheck(1,[{flipp}],foo)),
- ?line {'EXIT', {{badarg, _}, _}} =
+ {'EXIT', {{badarg, _}, _}} =
(catch file_sorter:check(fun(X) -> X end, foo)),
- ?line {'EXIT', {{badarg, _}, _}} =
+ {'EXIT', {{badarg, _}, _}} =
(catch file_sorter:keycheck(1, fun(X) -> X end, foo)),
- ?line Fs1 = to_files([[1,2,3]], binary_term, Config),
- ?line {'EXIT', {{badarg, flipp}, _}} =
+ Fs1 = to_files([[1,2,3]], binary_term, Config),
+ {'EXIT', {{badarg, flipp}, _}} =
(catch file_sorter:check(Fs1 ++ flipp, [])),
[F1] = Fs1,
- ?line {error,{file_error,_,_}} =
+ {error,{file_error,_,_}} =
file_sorter:sort(Fs1, foo, [{tmpdir,F1},{size,0}]),
- ?line delete_files(Fs1),
- ?line Fs2 = to_files([[1,2,3]], binary_term, Config),
+ delete_files(Fs1),
+ Fs2 = to_files([[1,2,3]], binary_term, Config),
{error,{file_error,_,enoent}} =
file_sorter:sort(Fs2, foo, [{tmpdir,filename:absname(BadFile)},
{size,0}]),
- ?line delete_files(Fs2),
+ delete_files(Fs2),
- ?line {'EXIT', {{badarg, bad}, _}} =
+ {'EXIT', {{badarg, bad}, _}} =
(catch file_sorter:check([], [{format,term} | bad])),
- ?line {'EXIT', {{badarg, [{flipp}]}, _}} =
+ {'EXIT', {{badarg, [{flipp}]}, _}} =
(catch file_sorter:check([{flipp}])),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch file_sorter:keycheck(1, {flipp})),
- ?line {'EXIT', {{badarg, [{flipp}]}, _}} =
+ {'EXIT', {{badarg, [{flipp}]}, _}} =
(catch file_sorter:keycheck(2, [{flipp}])),
- ?line {error,{file_error,_,eisdir}} = file_sorter:keycheck(1, []),
- ?line {'EXIT', {{badarg, kp}, _}} = (catch file_sorter:keycheck(kp, [])),
- ?line {'EXIT', {{badarg, kp}, _}} =
+ {error,{file_error,_,eisdir}} = file_sorter:keycheck(1, []),
+ {'EXIT', {{badarg, kp}, _}} = (catch file_sorter:keycheck(kp, [])),
+ {'EXIT', {{badarg, kp}, _}} =
(catch file_sorter:keycheck([1, kp], [])),
- ?line {'EXIT', {{badarg, kp}, _}} =
+ {'EXIT', {{badarg, kp}, _}} =
(catch file_sorter:keycheck([1 | kp], [])),
- ?line {'EXIT', {{badarg, []}, _}} = (catch file_sorter:keycheck([], [])),
- ?line {'EXIT', {{badarg, {format, foo}}, _}} =
+ {'EXIT', {{badarg, []}, _}} = (catch file_sorter:keycheck([], [])),
+ {'EXIT', {{badarg, {format, foo}}, _}} =
(catch file_sorter:check([], {format,foo})),
- ?line {'EXIT', {{badarg, not_an_option}, _}} =
+ {'EXIT', {{badarg, not_an_option}, _}} =
(catch file_sorter:keycheck(7, [], [not_an_option])),
- ?line {'EXIT', {{badarg, format}, _}} =
+ {'EXIT', {{badarg, format}, _}} =
(catch file_sorter:keycheck(1, [], [{format, binary}])),
- ?line {'EXIT', {{badarg, order}, _}} =
+ {'EXIT', {{badarg, order}, _}} =
(catch file_sorter:keycheck(1, [], [{order, fun compare/2}])),
- ?line do_badarg(fun(I, O) -> file_sorter:sort(I, O) end,
- fun(Kp, I, O) -> file_sorter:keysort(Kp, I, O) end,
- BadFile),
- ?line do_badarg_opt(fun(I, O, X) -> file_sorter:sort(I, O, X) end,
- fun(Kp, I, O, X) -> file_sorter:keysort(Kp, I, O, X)
- end),
- ?line do_badarg(fun(I, O) -> file_sorter:merge(I, O) end,
- fun(Kp, I, O) -> file_sorter:keymerge(Kp, I, O) end,
- BadFile),
- ?line do_badarg_opt(fun(I, O, X) -> file_sorter:merge(I, O, X) end,
- fun(Kp, I, O, X) -> file_sorter:keymerge(Kp, I, O, X)
- end).
+ do_badarg(fun(I, O) -> file_sorter:sort(I, O) end,
+ fun(Kp, I, O) -> file_sorter:keysort(Kp, I, O) end,
+ BadFile),
+ do_badarg_opt(fun(I, O, X) -> file_sorter:sort(I, O, X) end,
+ fun(Kp, I, O, X) -> file_sorter:keysort(Kp, I, O, X)
+ end),
+ do_badarg(fun(I, O) -> file_sorter:merge(I, O) end,
+ fun(Kp, I, O) -> file_sorter:keymerge(Kp, I, O) end,
+ BadFile),
+ do_badarg_opt(fun(I, O, X) -> file_sorter:merge(I, O, X) end,
+ fun(Kp, I, O, X) -> file_sorter:keymerge(Kp, I, O, X)
+ end).
do_badarg(F, KF, BadFile) ->
[Char | _] = BadFile,
AFlipp = filename:absname(flipp),
- ?line {error,{file_error,AFlipp,enoent}} = F([flipp | flopp], foo),
- ?line {'EXIT', {{badarg, {foo,bar}}, _}} = (catch F([], {foo,bar})),
- ?line {'EXIT', {{badarg, Char}, _}} = (catch F(BadFile, [])),
- ?line {'EXIT', {{badarg, {flipp}}, _}} = (catch F({flipp}, [])),
-
- ?line {'EXIT', {{badarg, Char}, _}} = (catch KF(1, BadFile, [])),
- ?line {'EXIT', {{badarg, {flipp}}, _}} = (catch KF(1, {flipp}, [])),
- ?line {error,{file_error,AFlipp,enoent}} =
+ {error,{file_error,AFlipp,enoent}} = F([flipp | flopp], foo),
+ {'EXIT', {{badarg, {foo,bar}}, _}} = (catch F([], {foo,bar})),
+ {'EXIT', {{badarg, Char}, _}} = (catch F(BadFile, [])),
+ {'EXIT', {{badarg, {flipp}}, _}} = (catch F({flipp}, [])),
+
+ {'EXIT', {{badarg, Char}, _}} = (catch KF(1, BadFile, [])),
+ {'EXIT', {{badarg, {flipp}}, _}} = (catch KF(1, {flipp}, [])),
+ {error,{file_error,AFlipp,enoent}} =
KF(2, [flipp | flopp], foo),
- ?line {'EXIT', {{badarg, {foo,bar}}, _}} = (catch KF(1, [], {foo,bar})),
- ?line {'EXIT', {{badarg, kp}, _}} = (catch KF(kp, [], foo)),
- ?line {'EXIT', {{badarg, kp}, _}} = (catch KF([1, kp], [], foo)),
- ?line {'EXIT', {{badarg, kp}, _}} = (catch KF([1 | kp], [], foo)),
- ?line {'EXIT', {{badarg, []}, _}} = (catch KF([], [], foo)),
+ {'EXIT', {{badarg, {foo,bar}}, _}} = (catch KF(1, [], {foo,bar})),
+ {'EXIT', {{badarg, kp}, _}} = (catch KF(kp, [], foo)),
+ {'EXIT', {{badarg, kp}, _}} = (catch KF([1, kp], [], foo)),
+ {'EXIT', {{badarg, kp}, _}} = (catch KF([1 | kp], [], foo)),
+ {'EXIT', {{badarg, []}, _}} = (catch KF([], [], foo)),
ok.
do_badarg_opt(F, KF) ->
AFlipp = filename:absname(flipp),
- ?line {error,{file_error,AFlipp,enoent}} =
- F([flipp | flopp], foo, []),
- ?line {'EXIT', {{badarg, {flipp}}, _}} = (catch F([{flipp}], foo, [])),
- ?line {'EXIT', {{badarg, {out,put}}, _}} = (catch F([], {out,put}, [])),
- ?line {'EXIT', {{badarg, not_an_option}, _}} =
+ {error,{file_error,AFlipp,enoent}} =
+ F([flipp | flopp], foo, []),
+ {'EXIT', {{badarg, {flipp}}, _}} = (catch F([{flipp}], foo, [])),
+ {'EXIT', {{badarg, {out,put}}, _}} = (catch F([], {out,put}, [])),
+ {'EXIT', {{badarg, not_an_option}, _}} =
(catch F([], foo, [not_an_option])),
- ?line {'EXIT', {{badarg, {format, foo}}, _}} =
- (catch F([], foo, {format,foo})),
- ?line {'EXIT', {{badarg, {size,foo}}, _}} = (catch F([], foo, {size,foo})),
+ {'EXIT', {{badarg, {format, foo}}, _}} =
+ (catch F([], foo, {format,foo})),
+ {'EXIT', {{badarg, {size,foo}}, _}} = (catch F([], foo, {size,foo})),
- ?line {'EXIT', {{badarg, {size, -1}}, _}} = (catch F([], foo, {size,-1})),
- ?line {'EXIT', {{badarg, {no_files, foo}}, _}} =
+ {'EXIT', {{badarg, {size, -1}}, _}} = (catch F([], foo, {size,-1})),
+ {'EXIT', {{badarg, {no_files, foo}}, _}} =
(catch F([], foo, {no_files,foo})),
- ?line {'EXIT', {{badarg, {no_files, 1}}, _}} =
+ {'EXIT', {{badarg, {no_files, 1}}, _}} =
(catch F([], foo, {no_files,1})),
- ?line {'EXIT', {{badarg, 1}, _}} = (catch F([], foo, {tmpdir,1})),
- ?line {'EXIT', {{badarg, {order,1}}, _}} = (catch F([], foo, {order,1})),
- ?line {'EXIT', {{badarg, {compressed, flopp}}, _}} =
- (catch F([], foo, {compressed,flopp})),
- ?line {'EXIT', {{badarg, {unique,flopp}}, _}} =
- (catch F([], foo, {unique,flopp})),
- ?line {'EXIT', {{badarg, {header,foo}}, _}} =
+ {'EXIT', {{badarg, 1}, _}} = (catch F([], foo, {tmpdir,1})),
+ {'EXIT', {{badarg, {order,1}}, _}} = (catch F([], foo, {order,1})),
+ {'EXIT', {{badarg, {compressed, flopp}}, _}} =
+ (catch F([], foo, {compressed,flopp})),
+ {'EXIT', {{badarg, {unique,flopp}}, _}} =
+ (catch F([], foo, {unique,flopp})),
+ {'EXIT', {{badarg, {header,foo}}, _}} =
(catch F([], foo, {header,foo})),
- ?line {'EXIT', {{badarg, {header, 0}}, _}} =
+ {'EXIT', {{badarg, {header, 0}}, _}} =
(catch F([], foo, {header,0})),
- ?line {'EXIT', {{badarg, {header, 1 bsl 35}}, _}} =
+ {'EXIT', {{badarg, {header, 1 bsl 35}}, _}} =
(catch F([], foo, {header,1 bsl 35})),
- ?line {'EXIT', {{badarg, header}, _}} =
+ {'EXIT', {{badarg, header}, _}} =
(catch F([], foo, [{header,1},{format,term}])),
- ?line {'EXIT', {{badarg, not_an_option}, _}} =
+ {'EXIT', {{badarg, not_an_option}, _}} =
(catch KF(7, [], foo, [not_an_option])),
- ?line {'EXIT', {{badarg,format}, _}} =
+ {'EXIT', {{badarg,format}, _}} =
(catch KF(1, [], foo, [{format, binary}])),
- ?line {'EXIT', {{badarg, order}, _}} =
+ {'EXIT', {{badarg, order}, _}} =
(catch KF(1, [], foo, [{order, fun compare/2}])),
- ?line {'EXIT', {{badarg, {flipp}}, _}} =
+ {'EXIT', {{badarg, {flipp}}, _}} =
(catch KF(2, [{flipp}], foo,[])),
- ?line {error,{file_error,AFlipp,enoent}} =
+ {error,{file_error,AFlipp,enoent}} =
KF(2, [flipp | flopp], foo,[]),
- ?line {'EXIT', {{badarg, {out, put}}, _}} =
+ {'EXIT', {{badarg, {out, put}}, _}} =
(catch KF(1, [], {out,put}, [])),
- ?line {'EXIT', {{badarg, kp}, _}} = (catch KF(kp, [], foo, [])),
- ?line {'EXIT', {{badarg, kp}, _}} = (catch KF([1, kp], [], foo, [])),
- ?line {'EXIT', {{badarg, kp}, _}} = (catch KF([1 | kp], [], foo, [])),
+ {'EXIT', {{badarg, kp}, _}} = (catch KF(kp, [], foo, [])),
+ {'EXIT', {{badarg, kp}, _}} = (catch KF([1, kp], [], foo, [])),
+ {'EXIT', {{badarg, kp}, _}} = (catch KF([1 | kp], [], foo, [])),
ok.
-term_sort(doc) ->
- ["Sort terms on files."];
-term_sort(suite) ->
- [];
+%% Sort terms on files.
term_sort(Config) when is_list(Config) ->
- ?line sort(term, [{compressed,false}], Config),
- ?line sort(term, [{order, fun compare/2}], Config),
- ?line sort(term, [{order, ascending}, {compressed,true}], Config),
- ?line sort(term, [{order, descending}], Config),
+ sort(term, [{compressed,false}], Config),
+ sort(term, [{order, fun compare/2}], Config),
+ sort(term, [{order, ascending}, {compressed,true}], Config),
+ sort(term, [{order, descending}], Config),
ok.
-term_keysort(doc) ->
- ["Keysort terms on files."];
-term_keysort(suite) ->
- [];
+%% Keysort terms on files.
term_keysort(Config) when is_list(Config) ->
- ?line keysort(term, [{tmpdir, ""}], Config),
- ?line keysort(term, [{order,descending}], Config),
+ keysort(term, [{tmpdir, ""}], Config),
+ keysort(term, [{order,descending}], Config),
ok.
-binary_term_sort(doc) ->
- ["Sort binary terms on files."];
-binary_term_sort(suite) ->
- [];
+%% Sort binary terms on files.
binary_term_sort(Config) when is_list(Config) ->
PrivDir = ?privdir(Config),
- ?line sort({2, binary_term}, [], Config),
- ?line sort(binary_term, [{tmpdir, list_to_atom(PrivDir)}], Config),
- ?line sort(binary_term, [{tmpdir,PrivDir}], Config),
- ?line sort({3,binary_term}, [{order, fun compare/2}], Config),
- ?line sort(binary_term, [{order, fun compare/2}], Config),
- ?line sort(binary_term, [{order,descending}], Config),
+ sort({2, binary_term}, [], Config),
+ sort(binary_term, [{tmpdir, list_to_atom(PrivDir)}], Config),
+ sort(binary_term, [{tmpdir,PrivDir}], Config),
+ sort({3,binary_term}, [{order, fun compare/2}], Config),
+ sort(binary_term, [{order, fun compare/2}], Config),
+ sort(binary_term, [{order,descending}], Config),
ok.
-binary_term_keysort(doc) ->
- ["Keysort binary terms on files."];
-binary_term_keysort(suite) ->
- [];
+%% Keysort binary terms on files.
binary_term_keysort(Config) when is_list(Config) ->
- ?line keysort({3, binary_term}, [], Config),
- ?line keysort(binary_term, [], Config),
- ?line keysort(binary_term, [{order,descending}], Config),
+ keysort({3, binary_term}, [], Config),
+ keysort(binary_term, [], Config),
+ keysort(binary_term, [{order,descending}], Config),
ok.
-binary_sort(doc) ->
- ["Sort binaries on files."];
-binary_sort(suite) ->
- [];
+%% Sort binaries on files.
binary_sort(Config) when is_list(Config) ->
PrivDir = ?privdir(Config),
- ?line sort({2, binary}, [], Config),
- ?line sort(binary, [{tmpdir, list_to_atom(PrivDir)}], Config),
- ?line sort(binary, [{tmpdir,PrivDir}], Config),
- ?line sort({3,binary}, [{order, fun compare/2}], Config),
- ?line sort(binary, [{order, fun compare/2}], Config),
- ?line sort(binary, [{order,descending}], Config),
+ sort({2, binary}, [], Config),
+ sort(binary, [{tmpdir, list_to_atom(PrivDir)}], Config),
+ sort(binary, [{tmpdir,PrivDir}], Config),
+ sort({3,binary}, [{order, fun compare/2}], Config),
+ sort(binary, [{order, fun compare/2}], Config),
+ sort(binary, [{order,descending}], Config),
ok.
-term_merge(doc) ->
- ["Merge terms on files."];
-term_merge(suite) ->
- [];
+%% Merge terms on files.
term_merge(Config) when is_list(Config) ->
- ?line merge(term, [{order, fun compare/2}], Config),
- ?line merge(term, [{order, ascending}, {compressed,true}], Config),
- ?line merge(term, [{order, descending}, {compressed,false}], Config),
+ merge(term, [{order, fun compare/2}], Config),
+ merge(term, [{order, ascending}, {compressed,true}], Config),
+ merge(term, [{order, descending}, {compressed,false}], Config),
ok.
-term_keymerge(doc) ->
- ["Keymerge terms on files."];
-term_keymerge(suite) ->
- [];
+%% Keymerge terms on files.
term_keymerge(Config) when is_list(Config) ->
- ?line keymerge(term, [], Config),
- ?line keymerge(term, [{order, descending}], Config),
- ?line funmerge(term, [], Config),
+ keymerge(term, [], Config),
+ keymerge(term, [{order, descending}], Config),
+ funmerge(term, [], Config),
ok.
-binary_term_merge(doc) ->
- ["Merge binary terms on files."];
-binary_term_merge(suite) ->
- [];
+%% Merge binary terms on files.
binary_term_merge(Config) when is_list(Config) ->
- ?line merge(binary_term, [], Config),
- ?line merge({7, binary_term}, [], Config),
- ?line merge({3, binary_term}, [{order, fun compare/2}], Config),
+ merge(binary_term, [], Config),
+ merge({7, binary_term}, [], Config),
+ merge({3, binary_term}, [{order, fun compare/2}], Config),
ok.
-binary_term_keymerge(doc) ->
- ["Keymerge binary terms on files."];
-binary_term_keymerge(suite) ->
- [];
+%% Keymerge binary terms on files.
binary_term_keymerge(Config) when is_list(Config) ->
- ?line keymerge({3, binary_term}, [], Config),
- ?line keymerge(binary_term, [], Config),
- ?line funmerge({3, binary_term}, [], Config),
- ?line funmerge(binary_term, [], Config),
+ keymerge({3, binary_term}, [], Config),
+ keymerge(binary_term, [], Config),
+ funmerge({3, binary_term}, [], Config),
+ funmerge(binary_term, [], Config),
ok.
-binary_merge(doc) ->
- ["Merge binaries on files."];
-binary_merge(suite) ->
- [];
+%% Merge binaries on files.
binary_merge(Config) when is_list(Config) ->
- ?line merge(binary, [], Config),
- ?line merge({7, binary}, [], Config),
- ?line merge({3, binary}, [{order, fun compare/2}], Config),
+ merge(binary, [], Config),
+ merge({7, binary}, [], Config),
+ merge({3, binary}, [{order, fun compare/2}], Config),
ok.
-term_check(doc) ->
- ["Check terms on files."];
-term_check(suite) ->
- [];
+%% Check terms on files.
term_check(Config) when is_list(Config) ->
- ?line check(term, Config),
+ check(term, Config),
ok.
-binary_term_check(doc) ->
- ["Check binary terms on files."];
-binary_term_check(suite) ->
- [];
+%% Check binary terms on files.
binary_term_check(Config) when is_list(Config) ->
- ?line check(binary_term, Config),
+ check(binary_term, Config),
ok.
-term_keycheck(doc) ->
- ["Keycheck terms on files."];
-term_keycheck(suite) ->
- [];
+%% Keycheck terms on files.
term_keycheck(Config) when is_list(Config) ->
- ?line keycheck(term, Config),
+ keycheck(term, Config),
ok.
-binary_term_keycheck(doc) ->
- ["Keycheck binary terms on files."];
-binary_term_keycheck(suite) ->
- [];
+%% Keycheck binary terms on files.
binary_term_keycheck(Config) when is_list(Config) ->
- ?line keycheck(binary_term, Config),
+ keycheck(binary_term, Config),
ok.
-binary_check(doc) ->
- ["Check binary terms on files."];
-binary_check(suite) ->
- [];
+%% Check binary terms on files.
binary_check(Config) when is_list(Config) ->
- ?line check(binary, Config),
+ check(binary, Config),
ok.
-inout(doc) ->
- ["Funs as input or output."];
-inout(suite) ->
- [];
+%% Funs as input or output.
inout(Config) when is_list(Config) ->
BTF = {format, binary_term},
Foo = outfile("foo", Config),
@@ -462,52 +407,52 @@ inout(Config) when is_list(Config) ->
End = fun(read) -> end_of_input end,
IF1 = fun(read) -> {[1,7,5], End} end,
- ?line ok = file_sorter:sort(IF1, Foo, [{format, term}]),
+ ok = file_sorter:sort(IF1, Foo, [{format, term}]),
%% 'close' is called, but the return value is caught and ignored.
IF2 = fun(read) -> {[1,2,3], fun(close) -> throw(ignored) end} end,
- ?line {error, bad_object} = file_sorter:sort(IF2, Foo, BTF),
+ {error, bad_object} = file_sorter:sort(IF2, Foo, BTF),
IF3 = fun(no_match) -> foo end,
- ?line {'EXIT', {function_clause, _}} =
+ {'EXIT', {function_clause, _}} =
(catch file_sorter:sort(IF3, Foo)),
IF4 = fun(read) -> throw(my_message) end,
- ?line my_message = (catch file_sorter:sort(IF4, Foo)),
+ my_message = (catch file_sorter:sort(IF4, Foo)),
IF5 = fun(read) -> {error, my_error} end,
- ?line {error, my_error} = file_sorter:sort(IF5, Foo),
+ {error, my_error} = file_sorter:sort(IF5, Foo),
%% Output is fun.
- ?line {error, bad_object} =
+ {error, bad_object} =
file_sorter:sort(IF2, fun(close) -> ignored end, BTF),
Args = [{format, term}],
- ?line {error, bad_object} =
- file_sorter:keysort(1, IF2, fun(close) -> ignored end, Args),
+ {error, bad_object} =
+ file_sorter:keysort(1, IF2, fun(close) -> ignored end, Args),
OF1 = fun(close) -> fine; (L) when is_list(L) -> fun(close) -> nice end end,
- ?line nice = file_sorter:sort(IF1, OF1, Args),
+ nice = file_sorter:sort(IF1, OF1, Args),
OF2 = fun(_) -> my_return end,
- ?line my_return = file_sorter:sort(IF1, OF2, Args),
+ my_return = file_sorter:sort(IF1, OF2, Args),
OF3 = fun(_) -> throw(my_message) end,
- ?line my_message = (catch file_sorter:sort(IF1, OF3, Args)),
+ my_message = (catch file_sorter:sort(IF1, OF3, Args)),
OF4 = fun(no_match) -> foo end,
- ?line {'EXIT', {function_clause, _}} =
+ {'EXIT', {function_clause, _}} =
(catch file_sorter:sort(IF1, OF4, Args)),
- ?line P0 = pps(),
- ?line Fs1 = to_files([[3,1,2,5,4], [8,3,10]], term, Config),
- ?line error = file_sorter:sort(Fs1, fun(_) -> error end, Args),
- ?line delete_files(Fs1),
+ P0 = pps(),
+ Fs1 = to_files([[3,1,2,5,4], [8,3,10]], term, Config),
+ error = file_sorter:sort(Fs1, fun(_) -> error end, Args),
+ delete_files(Fs1),
- ?line true = P0 =:= pps(),
+ true = P0 =:= pps(),
%% Passing a value from the input functions to the output functions.
IFV1 = fun(read) -> {end_of_input, 17} end,
OFV1 = fun({value, Value}) -> ofv(Value, []) end,
- ?line {17, []} = file_sorter:sort(IFV1, OFV1, Args),
+ {17, []} = file_sorter:sort(IFV1, OFV1, Args),
%% Output is not a fun. The value returned by input funs is ignored.
%% OTP-5009.
- ?line ok = file_sorter:sort(IFV1, Foo, [{format,term}]),
- ?line [] = from_files(Foo, term),
- ?line delete_files(Foo),
+ ok = file_sorter:sort(IFV1, Foo, [{format,term}]),
+ [] = from_files(Foo, term),
+ delete_files(Foo),
ok.
@@ -518,10 +463,7 @@ ofv(Value, A) ->
ofv(Value, [L | A])
end.
-many(doc) ->
- ["Many temporary files."];
-many(suite) ->
- [];
+%% Many temporary files.
many(Config) when is_list(Config) ->
Foo = outfile("foo", Config),
PrivDir = ?privdir(Config),
@@ -530,171 +472,168 @@ many(Config) when is_list(Config) ->
Args = [{format, term}],
L1 = lists:map(fun(I) -> {one, two, three, I} end, lists:seq(1,1000)),
L2 = lists:map(fun(I) -> {four, five, six, I} end, lists:seq(1,1000)),
- ?line Fs2 = to_files([L1, L2], term, Config),
- ?line ok = file_sorter:sort(Fs2, Foo, [{size,1000} | Args]),
- ?line R = lists:sort(L1++L2),
- ?line R = from_files(Foo, term),
- ?line 2000 = length(R),
- ?line ok = file_sorter:sort(Fs2, Foo, [{no_files,4},{size,1000} | Args]),
- ?line R = from_files(Foo, term),
- ?line ok =
+ Fs2 = to_files([L1, L2], term, Config),
+ ok = file_sorter:sort(Fs2, Foo, [{size,1000} | Args]),
+ R = lists:sort(L1++L2),
+ R = from_files(Foo, term),
+ 2000 = length(R),
+ ok = file_sorter:sort(Fs2, Foo, [{no_files,4},{size,1000} | Args]),
+ R = from_files(Foo, term),
+ ok =
file_sorter:sort(Fs2, Foo,
[{no_files,4},{size,1000},{order,descending} | Args]),
- ?line true = lists:reverse(R) =:= from_files(Foo, term),
- ?line ok =
+ true = lists:reverse(R) =:= from_files(Foo, term),
+ ok =
file_sorter:sort(Fs2, Foo,
[{no_files,4},{size,1000},
{order,fun compare/2} | Args]),
- ?line R = from_files(Foo, term),
- ?line ok = file_sorter:keysort(4, Fs2, Foo,
- [{no_files,4},{size,1000} | Args]),
- ?line RK = lists:keysort(4, L1++L2),
- ?line RK = from_files(Foo, term),
- ?line delete_files(Foo),
- ?line ok =
+ R = from_files(Foo, term),
+ ok = file_sorter:keysort(4, Fs2, Foo,
+ [{no_files,4},{size,1000} | Args]),
+ RK = lists:keysort(4, L1++L2),
+ RK = from_files(Foo, term),
+ delete_files(Foo),
+ ok =
file_sorter:keysort(4, Fs2, Foo,
- [{no_files,4},{size,1000},{order,descending} | Args]),
- ?line true = lists:reverse(RK) =:= from_files(Foo, term),
- ?line delete_files(Foo),
- ?line ok = file_sorter:keysort(4, Fs2, Foo,
- [{size,500},{order,descending} | Args]),
- ?line true = lists:reverse(RK) =:= from_files(Foo, term),
- ?line delete_files(Foo),
- ?line error = file_sorter:sort(Fs2, fun(_) -> error end,
- [{tmpdir, PrivDir}, {no_files,3},
- {size,10000} | Args]),
+ [{no_files,4},{size,1000},{order,descending} | Args]),
+ true = lists:reverse(RK) =:= from_files(Foo, term),
+ delete_files(Foo),
+ ok = file_sorter:keysort(4, Fs2, Foo,
+ [{size,500},{order,descending} | Args]),
+ true = lists:reverse(RK) =:= from_files(Foo, term),
+ delete_files(Foo),
+ error = file_sorter:sort(Fs2, fun(_) -> error end,
+ [{tmpdir, PrivDir}, {no_files,3},
+ {size,10000} | Args]),
TmpDir = filename:join(PrivDir, "tmpdir"),
file:del_dir(TmpDir),
- ?line ok = file:make_dir(TmpDir),
- ?line case os:type() of
- {unix, _} ->
- ?line ok = file:change_mode(TmpDir, 8#0000),
- ?line {error, {file_error, _,_}} =
- file_sorter:sort(Fs2, fun(_M) -> foo end,
- [{no_files,3},{size,10000},
- {tmpdir,TmpDir} | Args]);
- _ ->
- true
- end,
- ?line ok = file:del_dir(TmpDir),
+ ok = file:make_dir(TmpDir),
+ case os:type() of
+ {unix, _} ->
+ ok = file:change_mode(TmpDir, 8#0000),
+ {error, {file_error, _,_}} =
+ file_sorter:sort(Fs2, fun(_M) -> foo end,
+ [{no_files,3},{size,10000},
+ {tmpdir,TmpDir} | Args]);
+ _ ->
+ true
+ end,
+ ok = file:del_dir(TmpDir),
delete_files(Fs2),
- ?line true = P0 =:= pps(),
+ true = P0 =:= pps(),
ok.
-misc(doc) ->
- ["Some other tests."];
-misc(suite) ->
- [];
+%% Some other tests.
misc(Config) when is_list(Config) ->
BTF = {format, binary_term},
Foo = outfile("foo", Config),
FFoo = filename:absname(Foo),
P0 = pps(),
- ?line [File] = Fs1 = to_files([[1,3,2]], term, Config),
- ?line ok = file:write_file(Foo,<<>>),
- ?line case os:type() of
- {unix, _} ->
- ok = file:change_mode(Foo, 8#0000),
- {error,{file_error,FFoo,eacces}} =
- file_sorter:sort(Fs1, Foo, {format,term});
- _ ->
- true
- end,
- ?line file:delete(Foo),
- ?line NoBytes = 16, % RAM memory will never get this big, or?
- ?line ALot = (1 bsl (NoBytes*8)) - 1,
- ?line ok = file:write_file(File, <<ALot:NoBytes/unit:8,"foobar">>),
+ [File] = Fs1 = to_files([[1,3,2]], term, Config),
+ ok = file:write_file(Foo,<<>>),
+ case os:type() of
+ {unix, _} ->
+ ok = file:change_mode(Foo, 8#0000),
+ {error,{file_error,FFoo,eacces}} =
+ file_sorter:sort(Fs1, Foo, {format,term});
+ _ ->
+ true
+ end,
+ file:delete(Foo),
+ NoBytes = 16, % RAM memory will never get this big, or?
+ ALot = (1 bsl (NoBytes*8)) - 1,
+ ok = file:write_file(File, <<ALot:NoBytes/unit:8,"foobar">>),
FFile = filename:absname(File),
- ?line {error, {bad_object,FFile}} =
+ {error, {bad_object,FFile}} =
file_sorter:sort(Fs1, Foo, [BTF, {header, 20}]),
- ?line ok = file:write_file(File, <<30:32,"foobar">>),
- ?line {error, {premature_eof, FFile}} = file_sorter:sort(Fs1, Foo, BTF),
- ?line ok = file:write_file(File, <<6:32,"foobar">>),
- ?line {error, {bad_object,FFile}} = file_sorter:sort(Fs1, Foo, BTF),
- ?line case os:type() of
- {unix, _} ->
- ok = file:change_mode(File, 8#0000),
- {error, {file_error,FFile,eacces}} =
- file_sorter:sort(Fs1, Foo),
- {error, {file_error,FFile,eacces}} =
- file_sorter:sort(Fs1, Foo, {format, binary_term});
- _ ->
- true
- end,
- ?line delete_files(Fs1),
- ?line true = P0 =:= pps(),
+ ok = file:write_file(File, <<30:32,"foobar">>),
+ {error, {premature_eof, FFile}} = file_sorter:sort(Fs1, Foo, BTF),
+ ok = file:write_file(File, <<6:32,"foobar">>),
+ {error, {bad_object,FFile}} = file_sorter:sort(Fs1, Foo, BTF),
+ case os:type() of
+ {unix, _} ->
+ ok = file:change_mode(File, 8#0000),
+ {error, {file_error,FFile,eacces}} =
+ file_sorter:sort(Fs1, Foo),
+ {error, {file_error,FFile,eacces}} =
+ file_sorter:sort(Fs1, Foo, {format, binary_term});
+ _ ->
+ true
+ end,
+ delete_files(Fs1),
+ true = P0 =:= pps(),
%% bigger than chunksize
- ?line E1 = <<32000:32, 10:256000>>,
- ?line E2 = <<32000:32, 5:256000>>,
- ?line E3 = <<32000:32, 8:256000>>,
- ?line ok = file:write_file(Foo, [E1, E2, E3]),
- ?line ok = file_sorter:sort([Foo], Foo, [{format,binary},{size,10000}]),
- ?line ok = file_sorter:sort([Foo], Foo, [{format,fun(X) -> X end},
- {size,10000}]),
- ?line Es = list_to_binary([E2,E3,E1]),
- ?line {ok, Es} = file:read_file(Foo),
- ?line delete_files(Foo),
- ?line true = P0 =:= pps(),
+ E1 = <<32000:32, 10:256000>>,
+ E2 = <<32000:32, 5:256000>>,
+ E3 = <<32000:32, 8:256000>>,
+ ok = file:write_file(Foo, [E1, E2, E3]),
+ ok = file_sorter:sort([Foo], Foo, [{format,binary},{size,10000}]),
+ ok = file_sorter:sort([Foo], Foo, [{format,fun(X) -> X end},
+ {size,10000}]),
+ Es = list_to_binary([E2,E3,E1]),
+ {ok, Es} = file:read_file(Foo),
+ delete_files(Foo),
+ true = P0 =:= pps(),
%% keysort more than one element
L = [{c,1,a},{c,2,b},{c,3,c},{b,1,c},{b,2,b},{b,3,a},{a,1,a},{a,2,b},
{a,3,c}],
- ?line Fs2 = to_files([L], binary_term, Config),
- ?line ok = file_sorter:keysort([2,3], Fs2, Foo, {format, binary_term}),
- ?line KS2_1 = from_files(Foo, binary_term),
- ?line KS2_2 = lists:keysort(2,lists:keysort(3, L)),
- ?line KS2_1 = KS2_2,
- ?line ok = file_sorter:keysort([2,3], Fs2, Foo,
- [{format, binary_term},{size,5}]),
- ?line KS2_3 = from_files(Foo, binary_term),
- ?line KS2_3 = KS2_2,
- ?line ok = file_sorter:keysort([2,3,1], Fs2, Foo, {format, binary_term}),
- ?line KS3_1 = from_files(Foo, binary_term),
- ?line KS3_2 = lists:keysort(2, lists:keysort(3,lists:keysort(1, L))),
- ?line KS3_1 = KS3_2,
- ?line ok = file_sorter:keysort([2,3,1], Fs2, Foo,
- [{format, binary_term},{size,5}]),
- ?line KS3_3 = from_files(Foo, binary_term),
- ?line KS3_3 = KS3_2,
- ?line delete_files([Foo | Fs2]),
- ?line true = P0 =:= pps(),
+ Fs2 = to_files([L], binary_term, Config),
+ ok = file_sorter:keysort([2,3], Fs2, Foo, {format, binary_term}),
+ KS2_1 = from_files(Foo, binary_term),
+ KS2_2 = lists:keysort(2,lists:keysort(3, L)),
+ KS2_1 = KS2_2,
+ ok = file_sorter:keysort([2,3], Fs2, Foo,
+ [{format, binary_term},{size,5}]),
+ KS2_3 = from_files(Foo, binary_term),
+ KS2_3 = KS2_2,
+ ok = file_sorter:keysort([2,3,1], Fs2, Foo, {format, binary_term}),
+ KS3_1 = from_files(Foo, binary_term),
+ KS3_2 = lists:keysort(2, lists:keysort(3,lists:keysort(1, L))),
+ KS3_1 = KS3_2,
+ ok = file_sorter:keysort([2,3,1], Fs2, Foo,
+ [{format, binary_term},{size,5}]),
+ KS3_3 = from_files(Foo, binary_term),
+ KS3_3 = KS3_2,
+ delete_files([Foo | Fs2]),
+ true = P0 =:= pps(),
%% bigger than chunksize
%% Assumes that CHUNKSIZE = 16384. Illustrates that the Last argument
%% of merge_files/5 is necessary.
- ?line EP1 = erlang:make_tuple(2728,foo),
- ?line EP2 = lists:duplicate(2729,qqq),
- ?line LL = [EP1, EP2, EP1, EP2, EP1, EP2],
- ?line Fs3 = to_files([LL], binary, Config),
- ?line ok = file_sorter:sort(Fs3, Foo, [{format,binary}, {unique,true}]),
- ?line [EP1,EP2] = from_files(Foo, binary),
- ?line delete_files(Foo),
- ?line ok = file_sorter:sort(Fs3, Foo,
- [{format,binary_term}, {unique,true},
- {size,30000}]),
- ?line [EP1,EP2] = from_files(Foo, binary_term),
- ?line delete_files([Foo | Fs3]),
-
- ?line true = P0 =:= pps(),
-
- ?line BE1 = <<20000:32, 17:160000>>,
- ?line BE2 = <<20000:32, 1717:160000>>,
- ?line ok = file:write_file(Foo, [BE1,BE2,BE1,BE2]),
- ?line ok = file_sorter:sort([Foo], Foo, [{format,binary},
- {size,10000},
- {unique,true}]),
- ?line BEs = list_to_binary([BE1, BE2]),
- ?line {ok, BEs} = file:read_file(Foo),
- ?line delete_files(Foo),
- ?line true = P0 =:= pps(),
-
- ?line Fs4 = to_files([[7,4,1]], binary_term, Config),
- ?line {error, {bad_term, _}} = file_sorter:sort(Fs4, Foo, {format, term}),
- ?line delete_files([Foo | Fs4]),
- ?line true = P0 =:= pps(),
+ EP1 = erlang:make_tuple(2728,foo),
+ EP2 = lists:duplicate(2729,qqq),
+ LL = [EP1, EP2, EP1, EP2, EP1, EP2],
+ Fs3 = to_files([LL], binary, Config),
+ ok = file_sorter:sort(Fs3, Foo, [{format,binary}, {unique,true}]),
+ [EP1,EP2] = from_files(Foo, binary),
+ delete_files(Foo),
+ ok = file_sorter:sort(Fs3, Foo,
+ [{format,binary_term}, {unique,true},
+ {size,30000}]),
+ [EP1,EP2] = from_files(Foo, binary_term),
+ delete_files([Foo | Fs3]),
+
+ true = P0 =:= pps(),
+
+ BE1 = <<20000:32, 17:160000>>,
+ BE2 = <<20000:32, 1717:160000>>,
+ ok = file:write_file(Foo, [BE1,BE2,BE1,BE2]),
+ ok = file_sorter:sort([Foo], Foo, [{format,binary},
+ {size,10000},
+ {unique,true}]),
+ BEs = list_to_binary([BE1, BE2]),
+ {ok, BEs} = file:read_file(Foo),
+ delete_files(Foo),
+ true = P0 =:= pps(),
+
+ Fs4 = to_files([[7,4,1]], binary_term, Config),
+ {error, {bad_term, _}} = file_sorter:sort(Fs4, Foo, {format, term}),
+ delete_files([Foo | Fs4]),
+ true = P0 =:= pps(),
ok.
@@ -708,71 +647,71 @@ sort(Fmt, XArgs, Config) ->
Foo = outfile("foo", Config),
%% Input is a fun. Output is a fun.
- ?line [] = file_sorter:sort(input([], 2, Fmt), output([], Fmt), Args),
- ?line L1 = [3,1,2,5,4],
- ?line S1 = file_sorter:sort(input(L1, 2, Fmt), output([], Fmt), TmpArgs),
- ?line S1 = rev(lists:sort(L1), TmpArgs),
+ [] = file_sorter:sort(input([], 2, Fmt), output([], Fmt), Args),
+ L1 = [3,1,2,5,4],
+ S1 = file_sorter:sort(input(L1, 2, Fmt), output([], Fmt), TmpArgs),
+ S1 = rev(lists:sort(L1), TmpArgs),
%% Input is a file. Output is a fun.
- ?line [] = file_sorter:sort([], output([], Fmt), Args),
- ?line L2 = [3,1,2,5,4],
- ?line Fs1 = to_files([L2], Fmt, Config),
- ?line S2 = file_sorter:sort(Fs1, output([], Fmt), TmpArgs),
- ?line S2 = rev(lists:sort(L2), TmpArgs),
- ?line delete_files(Fs1),
+ [] = file_sorter:sort([], output([], Fmt), Args),
+ L2 = [3,1,2,5,4],
+ Fs1 = to_files([L2], Fmt, Config),
+ S2 = file_sorter:sort(Fs1, output([], Fmt), TmpArgs),
+ S2 = rev(lists:sort(L2), TmpArgs),
+ delete_files(Fs1),
%% Input is a file. Output is a file
- ?line ok = file_sorter:sort([], Foo, Args),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:sort([], Foo, [{unique,true} | Args]),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line L3 = [3,1,2,5,4,6],
- ?line Fs2 = to_files([L3], Fmt, Config),
- ?line ok = file_sorter:sort(Fs2, Foo, Args),
- ?line true = rev(lists:sort(L3), Args) =:= from_files(Foo, Fmt),
- ?line delete_files([Foo | Fs2]),
- ?line L4 = [1,3,4,1,2,5,4,5,6],
- ?line Fs3 = to_files([L4], Fmt, Config),
- ?line ok = file_sorter:sort(Fs3, Foo, Args++[{unique,true},
- {size,100000}]),
- ?line true = rev(lists:usort(L4), Args) =:= from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:sort(Fs3, Foo, Args++[{unique,true}]),
- ?line true = rev(lists:usort(L4), Args) =:= from_files(Foo, Fmt),
- ?line delete_files([Foo | Fs3]),
+ ok = file_sorter:sort([], Foo, Args),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:sort([], Foo, [{unique,true} | Args]),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ L3 = [3,1,2,5,4,6],
+ Fs2 = to_files([L3], Fmt, Config),
+ ok = file_sorter:sort(Fs2, Foo, Args),
+ true = rev(lists:sort(L3), Args) =:= from_files(Foo, Fmt),
+ delete_files([Foo | Fs2]),
+ L4 = [1,3,4,1,2,5,4,5,6],
+ Fs3 = to_files([L4], Fmt, Config),
+ ok = file_sorter:sort(Fs3, Foo, Args++[{unique,true},
+ {size,100000}]),
+ true = rev(lists:usort(L4), Args) =:= from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:sort(Fs3, Foo, Args++[{unique,true}]),
+ true = rev(lists:usort(L4), Args) =:= from_files(Foo, Fmt),
+ delete_files([Foo | Fs3]),
%% Input is a fun. Output is a file.
- ?line ok = file_sorter:sort(input([], 2, Fmt), Foo, Args),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line L5 = [3,1,2,5,4,7],
- ?line ok = file_sorter:sort(input(L5, 2, Fmt), Foo, Args),
- ?line true = rev(lists:sort(L5), Args) =:= from_files(Foo, Fmt),
- ?line delete_files(Foo),
+ ok = file_sorter:sort(input([], 2, Fmt), Foo, Args),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ L5 = [3,1,2,5,4,7],
+ ok = file_sorter:sort(input(L5, 2, Fmt), Foo, Args),
+ true = rev(lists:sort(L5), Args) =:= from_files(Foo, Fmt),
+ delete_files(Foo),
%% Removing duplicate keys.
KFun = key_compare(2),
L6 = [{5,e},{2,b},{3,c},{1,a},{4,d}] ++ [{2,c},{1,b},{4,a}],
KUArgs = lists:keydelete(order, 1, Args) ++
- [{unique, true}, {order, KFun},{size,100000}],
- ?line ok = file_sorter:sort(input(L6, 2, Fmt), Foo, KUArgs),
- ?line true = rev(lists:ukeysort(2, L6), KUArgs) =:= from_files(Foo, Fmt),
+ [{unique, true}, {order, KFun},{size,100000}],
+ ok = file_sorter:sort(input(L6, 2, Fmt), Foo, KUArgs),
+ true = rev(lists:ukeysort(2, L6), KUArgs) =:= from_files(Foo, Fmt),
KArgs = lists:keydelete(unique, 1, KUArgs),
- ?line ok = file_sorter:sort(input(L6, 2, Fmt), Foo, KArgs),
- ?line true = rev(lists:keysort(2, L6), KArgs) =:= from_files(Foo, Fmt),
+ ok = file_sorter:sort(input(L6, 2, Fmt), Foo, KArgs),
+ true = rev(lists:keysort(2, L6), KArgs) =:= from_files(Foo, Fmt),
%% Removing duplicate keys. Again.
KUArgs2 = lists:keydelete(order, 1, Args) ++
- [{unique, true}, {order, KFun},{size,5}],
- ?line ok = file_sorter:sort(input(L6, 2, Fmt), Foo, KUArgs2),
- ?line true = rev(lists:ukeysort(2, L6), KUArgs2) =:= from_files(Foo, Fmt),
+ [{unique, true}, {order, KFun},{size,5}],
+ ok = file_sorter:sort(input(L6, 2, Fmt), Foo, KUArgs2),
+ true = rev(lists:ukeysort(2, L6), KUArgs2) =:= from_files(Foo, Fmt),
KArgs2 = lists:keydelete(unique, 1, KUArgs2),
- ?line ok = file_sorter:sort(input(L6, 2, Fmt), Foo, KArgs2),
- ?line true = rev(lists:keysort(2, L6), KArgs2) =:= from_files(Foo, Fmt),
- ?line delete_files(Foo),
-
+ ok = file_sorter:sort(input(L6, 2, Fmt), Foo, KArgs2),
+ true = rev(lists:keysort(2, L6), KArgs2) =:= from_files(Foo, Fmt),
+ delete_files(Foo),
+
ok.
keysort(Fmt, XArgs, Config) ->
@@ -781,58 +720,58 @@ keysort(Fmt, XArgs, Config) ->
Foo = outfile("foo", Config),
%% Input is files. Output is a file.
- ?line ok = file_sorter:keysort(2, [], Foo, Args),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:keysort(2, [], Foo, [{unique,true} | Args]),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line L0 = [{a,2},{a,1},{a,2},{a,2},{a,1},{a,2},{a,2},{a,3}],
- ?line Fs0 = to_files([L0], Fmt, Config),
- ?line S = rev(lists:ukeysort(1, L0), Args),
- ?line ok =
+ ok = file_sorter:keysort(2, [], Foo, Args),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:keysort(2, [], Foo, [{unique,true} | Args]),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ L0 = [{a,2},{a,1},{a,2},{a,2},{a,1},{a,2},{a,2},{a,3}],
+ Fs0 = to_files([L0], Fmt, Config),
+ S = rev(lists:ukeysort(1, L0), Args),
+ ok =
file_sorter:keysort(1, Fs0, Foo, Args ++ [{unique,true},
{size,100000}]),
- ?line S = from_files(Foo, Fmt),
- ?line ok =
+ S = from_files(Foo, Fmt),
+ ok =
file_sorter:keysort(1, Fs0, Foo, Args ++ [{unique,true},
{size,5}]),
- ?line S = from_files(Foo, Fmt),
- ?line ok = file_sorter:keysort(1, Fs0, Foo, Args ++ [{unique,true}]),
- ?line S = from_files(Foo, Fmt),
- ?line delete_files([Foo | Fs0]),
- ?line L11 = [{a,1,x4},{b,2,x4},{c,3,x4}],
- ?line L21 = [{a,1,x3},{b,2,x3},{c,3,x3}],
- ?line L31 = [{a,1,x2},{b,2,x2},{c,3,x2}],
- ?line L41 = [{a,1,x1},{b,2,x1},{c,3,x1}],
- ?line All = [L11, L21, L31, L41],
- ?line AllFlat = lists:append(All),
- ?line Sorted = rev(lists:keysort(2, AllFlat), Args),
- ?line Fs1 = to_files(All, Fmt, Config),
- ?line ok = file_sorter:keysort(2, Fs1, Foo, Args),
- ?line Sorted = from_files(Foo, Fmt),
- ?line delete_files(Foo),
+ S = from_files(Foo, Fmt),
+ ok = file_sorter:keysort(1, Fs0, Foo, Args ++ [{unique,true}]),
+ S = from_files(Foo, Fmt),
+ delete_files([Foo | Fs0]),
+ L11 = [{a,1,x4},{b,2,x4},{c,3,x4}],
+ L21 = [{a,1,x3},{b,2,x3},{c,3,x3}],
+ L31 = [{a,1,x2},{b,2,x2},{c,3,x2}],
+ L41 = [{a,1,x1},{b,2,x1},{c,3,x1}],
+ All = [L11, L21, L31, L41],
+ AllFlat = lists:append(All),
+ Sorted = rev(lists:keysort(2, AllFlat), Args),
+ Fs1 = to_files(All, Fmt, Config),
+ ok = file_sorter:keysort(2, Fs1, Foo, Args),
+ Sorted = from_files(Foo, Fmt),
+ delete_files(Foo),
%% Input is files. Output is a fun.
- ?line [] = file_sorter:keysort(2, [], output([], Fmt), Args),
- ?line KS1 = file_sorter:keysort(2, Fs1, output([], Fmt), TmpArgs),
- ?line Sorted = KS1,
- ?line delete_files(Fs1),
+ [] = file_sorter:keysort(2, [], output([], Fmt), Args),
+ KS1 = file_sorter:keysort(2, Fs1, output([], Fmt), TmpArgs),
+ Sorted = KS1,
+ delete_files(Fs1),
%% Input is a fun. Output is a file.
- ?line ok = file_sorter:keysort(2, input([], 2, Fmt), Foo, Args),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:keysort(2, input(AllFlat, 4, Fmt), Foo, Args),
- ?line Sorted = from_files(Foo, Fmt),
- ?line delete_files(Foo),
+ ok = file_sorter:keysort(2, input([], 2, Fmt), Foo, Args),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:keysort(2, input(AllFlat, 4, Fmt), Foo, Args),
+ Sorted = from_files(Foo, Fmt),
+ delete_files(Foo),
%% Input is a fun. Output is a fun.
- ?line [] = file_sorter:keysort(2, input([], 2, Fmt), output([], Fmt),Args),
- ?line KS2 =
+ [] = file_sorter:keysort(2, input([], 2, Fmt), output([], Fmt),Args),
+ KS2 =
file_sorter:keysort(2, input(AllFlat, 4, Fmt), output([], Fmt),
TmpArgs),
- ?line Sorted = KS2,
+ Sorted = KS2,
ok.
merge(Fmt, XArgs, Config) ->
@@ -840,35 +779,35 @@ merge(Fmt, XArgs, Config) ->
Foo = outfile("foo", Config),
%% Input is a file. Output is a fun.
- ?line [] = file_sorter:merge([], output([], Fmt), Args),
- ?line L2 = [[1,3,5],[2,4,5]],
- ?line Fs1 = to_files(L2, Fmt, Config),
- ?line S2 = file_sorter:sort(Fs1, output([], Fmt), Args),
- ?line S2 = rev(lists:sort(lists:append(L2)), Args),
- ?line delete_files(Fs1),
+ [] = file_sorter:merge([], output([], Fmt), Args),
+ L2 = [[1,3,5],[2,4,5]],
+ Fs1 = to_files(L2, Fmt, Config),
+ S2 = file_sorter:sort(Fs1, output([], Fmt), Args),
+ S2 = rev(lists:sort(lists:append(L2)), Args),
+ delete_files(Fs1),
%% Input is a file. Output is a file
- ?line ok = file_sorter:merge([], Foo, Args),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:merge([], Foo, [{unique,true} | Args]),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line L31 = [1,2,3],
- ?line L32 = [2,3,4],
- ?line L33 = [4,5,6],
- ?line L3r = [L31, L32, L33],
- ?line L3 = [rev(L31,Args), rev(L32,Args), rev(L33,Args)],
- ?line Fs2 = to_files(L3, Fmt, Config),
- ?line ok = file_sorter:merge(Fs2, Foo, Args),
- ?line true = rev(lists:merge(L3r), Args) =:= from_files(Foo, Fmt),
- ?line ok = file_sorter:merge(Fs2, Foo, Args++[{unique,true},
- {size,100000}]),
- ?line true = rev(lists:umerge(L3r), Args) =:= from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:merge(Fs2, Foo, Args++[{unique,true}]),
- ?line true = rev(lists:umerge(L3r), Args) =:= from_files(Foo, Fmt),
- ?line delete_files([Foo | Fs2]),
+ ok = file_sorter:merge([], Foo, Args),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:merge([], Foo, [{unique,true} | Args]),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ L31 = [1,2,3],
+ L32 = [2,3,4],
+ L33 = [4,5,6],
+ L3r = [L31, L32, L33],
+ L3 = [rev(L31,Args), rev(L32,Args), rev(L33,Args)],
+ Fs2 = to_files(L3, Fmt, Config),
+ ok = file_sorter:merge(Fs2, Foo, Args),
+ true = rev(lists:merge(L3r), Args) =:= from_files(Foo, Fmt),
+ ok = file_sorter:merge(Fs2, Foo, Args++[{unique,true},
+ {size,100000}]),
+ true = rev(lists:umerge(L3r), Args) =:= from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:merge(Fs2, Foo, Args++[{unique,true}]),
+ true = rev(lists:umerge(L3r), Args) =:= from_files(Foo, Fmt),
+ delete_files([Foo | Fs2]),
ok.
@@ -877,83 +816,83 @@ keymerge(Fmt, XArgs, Config) ->
Foo = outfile("foo", Config),
%% Input is files. Output is a file.
- ?line ok = file_sorter:keymerge(2, [], Foo, Args),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line ok = file_sorter:keymerge(2, [], Foo, [{unique,true} | Args]),
- ?line [] = from_files(Foo, Fmt),
- ?line delete_files(Foo),
- ?line L0 = [rev([{a,1},{a,2}], Args), rev([{a,2},{a,1},{a,3}], Args)],
- ?line Fs0 = to_files(L0, Fmt, Config),
- ?line delete_files(Foo),
- ?line ok = file_sorter:keymerge(1, Fs0, Foo, Args ++ [{unique,false}]),
- ?line S2 = rev([{a,1},{a,2},{a,2},{a,1},{a,3}], Args),
- ?line S2 = from_files(Foo, Fmt),
- ?line delete_files([Foo | Fs0]),
- ?line L11 = [{a,1,x4},{b,2,x4},{c,3,x4}],
- ?line L21 = [{a,1,x3},{b,2,x3},{c,3,x3}],
- ?line L31 = [{a,1,x2},{b,2,x2},{c,3,x2}],
- ?line L41 = [{a,1,x1},{b,2,x1},{c,3,x1}],
- ?line All =
+ ok = file_sorter:keymerge(2, [], Foo, Args),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ ok = file_sorter:keymerge(2, [], Foo, [{unique,true} | Args]),
+ [] = from_files(Foo, Fmt),
+ delete_files(Foo),
+ L0 = [rev([{a,1},{a,2}], Args), rev([{a,2},{a,1},{a,3}], Args)],
+ Fs0 = to_files(L0, Fmt, Config),
+ delete_files(Foo),
+ ok = file_sorter:keymerge(1, Fs0, Foo, Args ++ [{unique,false}]),
+ S2 = rev([{a,1},{a,2},{a,2},{a,1},{a,3}], Args),
+ S2 = from_files(Foo, Fmt),
+ delete_files([Foo | Fs0]),
+ L11 = [{a,1,x4},{b,2,x4},{c,3,x4}],
+ L21 = [{a,1,x3},{b,2,x3},{c,3,x3}],
+ L31 = [{a,1,x2},{b,2,x2},{c,3,x2}],
+ L41 = [{a,1,x1},{b,2,x1},{c,3,x1}],
+ All =
[rev(L11, Args), rev(L21, Args), rev(L31, Args), rev(L41, Args)],
- ?line Merged1 = lists:keymerge(2, L11, L21),
- ?line Merged2 = lists:keymerge(2, L31, L41),
- ?line Merged = rev(lists:keymerge(2, Merged1, Merged2), Args),
- ?line Fs1 = to_files(All, Fmt, Config),
- ?line ok = file_sorter:keymerge(2, Fs1, Foo, Args),
- ?line Merged = from_files(Foo, Fmt),
+ Merged1 = lists:keymerge(2, L11, L21),
+ Merged2 = lists:keymerge(2, L31, L41),
+ Merged = rev(lists:keymerge(2, Merged1, Merged2), Args),
+ Fs1 = to_files(All, Fmt, Config),
+ ok = file_sorter:keymerge(2, Fs1, Foo, Args),
+ Merged = from_files(Foo, Fmt),
fun() ->
- UArgs = [{unique,true} | Args],
- ?line UMerged1 = lists:ukeymerge(2, L11, L21),
- ?line UMerged2 = lists:ukeymerge(2, L31, L41),
- ?line UMerged = rev(lists:ukeymerge(2, UMerged1, UMerged2), Args),
- ?line ok = file_sorter:keymerge(2, Fs1, Foo, UArgs),
- ?line UMerged = from_files(Foo, Fmt),
- UArgs2 = make_args(Fmt, [{unique,true}, {size,50} | XArgs]),
- ?line ok = file_sorter:keymerge(2, Fs1, Foo, UArgs2),
- ?line UMerged = from_files(Foo, Fmt),
- ?line List = rev([{a,1,x4},{b,2,x4},{c,3,x4}], Args),
- ?line FsL = to_files([List], Fmt, Config),
- ?line ok = file_sorter:keymerge(2, FsL, Foo, UArgs),
- ?line List = from_files(Foo, Fmt),
- ?line List1 = [{a,1,x4},{b,2,x4},{c,3,x4}],
- ?line List2 = [{a,3,x4},{b,4,x4},{c,5,x4}],
- ?line FsLL = to_files([rev(List1, Args), rev(List2, Args)], Fmt, Config),
- ?line ok = file_sorter:keymerge(2, FsLL, Foo, UArgs),
- ?line List1_2 = rev(lists:ukeymerge(2, List1, List2), Args),
- ?line List1_2 = from_files(Foo, Fmt),
- ?line delete_files(Foo)
+ UArgs = [{unique,true} | Args],
+ UMerged1 = lists:ukeymerge(2, L11, L21),
+ UMerged2 = lists:ukeymerge(2, L31, L41),
+ UMerged = rev(lists:ukeymerge(2, UMerged1, UMerged2), Args),
+ ok = file_sorter:keymerge(2, Fs1, Foo, UArgs),
+ UMerged = from_files(Foo, Fmt),
+ UArgs2 = make_args(Fmt, [{unique,true}, {size,50} | XArgs]),
+ ok = file_sorter:keymerge(2, Fs1, Foo, UArgs2),
+ UMerged = from_files(Foo, Fmt),
+ List = rev([{a,1,x4},{b,2,x4},{c,3,x4}], Args),
+ FsL = to_files([List], Fmt, Config),
+ ok = file_sorter:keymerge(2, FsL, Foo, UArgs),
+ List = from_files(Foo, Fmt),
+ List1 = [{a,1,x4},{b,2,x4},{c,3,x4}],
+ List2 = [{a,3,x4},{b,4,x4},{c,5,x4}],
+ FsLL = to_files([rev(List1, Args), rev(List2, Args)], Fmt, Config),
+ ok = file_sorter:keymerge(2, FsLL, Foo, UArgs),
+ List1_2 = rev(lists:ukeymerge(2, List1, List2), Args),
+ List1_2 = from_files(Foo, Fmt),
+ delete_files(Foo)
end(),
%% Input is files. Output is a fun.
- ?line Fs3 = to_files(All, Fmt, Config),
- ?line [] = file_sorter:keysort(2, [], output([], Fmt), Args),
- ?line KS1 = file_sorter:keymerge(2, Fs3, output([], Fmt), Args),
- ?line Merged = KS1,
- ?line delete_files([Foo | Fs3]),
-
- ?line L2 = [[{a,1}],[{a,2}],[{a,3}],[{a,4}],[{a,5}],[{a,6}],[{a,7}]],
- ?line Fs2 = to_files(L2, Fmt, Config),
- ?line M = file_sorter:keymerge(1, Fs2, output([], Fmt), Args),
- ?line M = rev(lists:append(L2), Args),
- ?line delete_files(Fs2),
-
- ?line LL1 = [{d,4},{e,5},{f,6}],
- ?line LL2 = [{a,1},{b,2},{c,3}],
- ?line LL3 = [{j,10},{k,11},{l,12}],
- ?line LL4 = [{g,7},{h,8},{i,9}],
- ?line LL5 = [{p,16},{q,17},{r,18}],
- ?line LL6 = [{m,13},{n,14},{o,15}],
- ?line LLAll = [rev(LL1, Args),rev(LL2, Args),rev(LL3, Args),
- rev(LL4, Args),rev(LL5, Args),rev(LL6, Args)],
- ?line FsLL6 = to_files(LLAll, Fmt, Config),
- ?line LL = rev(lists:sort(lists:append(LLAll)), Args),
- ?line ok = file_sorter:keymerge(1, FsLL6, Foo, Args),
- ?line LL = from_files(Foo, Fmt),
- ?line ok = file_sorter:keymerge(1, FsLL6, Foo, [{unique,true} | Args]),
- ?line LL = from_files(Foo, Fmt),
- ?line delete_files([Foo | FsLL6]),
+ Fs3 = to_files(All, Fmt, Config),
+ [] = file_sorter:keysort(2, [], output([], Fmt), Args),
+ KS1 = file_sorter:keymerge(2, Fs3, output([], Fmt), Args),
+ Merged = KS1,
+ delete_files([Foo | Fs3]),
+
+ L2 = [[{a,1}],[{a,2}],[{a,3}],[{a,4}],[{a,5}],[{a,6}],[{a,7}]],
+ Fs2 = to_files(L2, Fmt, Config),
+ M = file_sorter:keymerge(1, Fs2, output([], Fmt), Args),
+ M = rev(lists:append(L2), Args),
+ delete_files(Fs2),
+
+ LL1 = [{d,4},{e,5},{f,6}],
+ LL2 = [{a,1},{b,2},{c,3}],
+ LL3 = [{j,10},{k,11},{l,12}],
+ LL4 = [{g,7},{h,8},{i,9}],
+ LL5 = [{p,16},{q,17},{r,18}],
+ LL6 = [{m,13},{n,14},{o,15}],
+ LLAll = [rev(LL1, Args),rev(LL2, Args),rev(LL3, Args),
+ rev(LL4, Args),rev(LL5, Args),rev(LL6, Args)],
+ FsLL6 = to_files(LLAll, Fmt, Config),
+ LL = rev(lists:sort(lists:append(LLAll)), Args),
+ ok = file_sorter:keymerge(1, FsLL6, Foo, Args),
+ LL = from_files(Foo, Fmt),
+ ok = file_sorter:keymerge(1, FsLL6, Foo, [{unique,true} | Args]),
+ LL = from_files(Foo, Fmt),
+ delete_files([Foo | FsLL6]),
ok.
@@ -963,84 +902,84 @@ funmerge(Fmt, XArgs, Config) ->
UArgs = [{unique,true} | Args],
Foo = outfile(foo, Config),
- ?line EFs = to_files([[]], Fmt, Config),
- ?line ok = file_sorter:merge(EFs, Foo, UArgs),
- ?line [] = from_files(Foo, Fmt),
+ EFs = to_files([[]], Fmt, Config),
+ ok = file_sorter:merge(EFs, Foo, UArgs),
+ [] = from_files(Foo, Fmt),
delete_files([Foo | EFs]),
- ?line L11 = [{a,1,x4},{b,2,x4},{c,3,x4}],
- ?line L21 = [{a,1,x3},{b,2,x3},{c,3,x3}],
- ?line L31 = [{a,1,x2},{b,2,x2},{c,3,x2}],
- ?line L41 = [{a,1,x1},{b,2,x1},{c,3,x1}],
- ?line CAll = [L11, L21, L31, L41],
- ?line CMerged1 = lists:merge(KComp, L11, L21),
- ?line CMerged2 = lists:merge(KComp, L31, L41),
- ?line CMerged = lists:merge(KComp, CMerged1, CMerged2),
- ?line CFs1 = to_files(CAll, Fmt, Config),
- ?line ok = file_sorter:merge(CFs1, Foo, Args),
- ?line CMerged = from_files(Foo, Fmt),
+ L11 = [{a,1,x4},{b,2,x4},{c,3,x4}],
+ L21 = [{a,1,x3},{b,2,x3},{c,3,x3}],
+ L31 = [{a,1,x2},{b,2,x2},{c,3,x2}],
+ L41 = [{a,1,x1},{b,2,x1},{c,3,x1}],
+ CAll = [L11, L21, L31, L41],
+ CMerged1 = lists:merge(KComp, L11, L21),
+ CMerged2 = lists:merge(KComp, L31, L41),
+ CMerged = lists:merge(KComp, CMerged1, CMerged2),
+ CFs1 = to_files(CAll, Fmt, Config),
+ ok = file_sorter:merge(CFs1, Foo, Args),
+ CMerged = from_files(Foo, Fmt),
Args4 = make_args(Fmt, [{size,50} | XArgs]),
- ?line ok = file_sorter:merge(CFs1, Foo, [{order,KComp} | Args4]),
- ?line CMerged = from_files(Foo, Fmt),
-
- ?line UMerged1 = lists:umerge(KComp, L11, L21),
- ?line UMerged2 = lists:umerge(KComp, L31, L41),
- ?line UMerged = lists:umerge(KComp, UMerged1, UMerged2),
- ?line ok = file_sorter:merge(CFs1, Foo, [{order,KComp} | UArgs]),
- ?line UMerged = from_files(Foo, Fmt),
+ ok = file_sorter:merge(CFs1, Foo, [{order,KComp} | Args4]),
+ CMerged = from_files(Foo, Fmt),
+
+ UMerged1 = lists:umerge(KComp, L11, L21),
+ UMerged2 = lists:umerge(KComp, L31, L41),
+ UMerged = lists:umerge(KComp, UMerged1, UMerged2),
+ ok = file_sorter:merge(CFs1, Foo, [{order,KComp} | UArgs]),
+ UMerged = from_files(Foo, Fmt),
UArgs2 =
lists:keydelete(order, 1,
make_args(Fmt, [{unique,true}, {size,50} | XArgs])),
- ?line ok = file_sorter:merge(CFs1, Foo, [{order,KComp} | UArgs2]),
- ?line UMerged = from_files(Foo, Fmt),
- ?line delete_files(Foo),
-
- ?line List1 = [{a,1,x4},{b,2,x4},{c,3,x4}],
- ?line List2 = [{a,3,x4},{b,4,x4},{c,5,x4}],
- ?line List3 = [{a,5,x4},{b,6,x4},{c,7,x4}],
- ?line FsLL = to_files([List1, List2, List3], Fmt, Config),
- ?line ok = file_sorter:merge(FsLL, Foo, Args),
- ?line List1_2 = lists:merge(KComp,lists:merge(KComp,List1,List2),List3),
- ?line List1_2 = from_files(Foo, Fmt),
- ?line ok = file_sorter:merge(FsLL, Foo, [{order,KComp} | UArgs]),
- ?line UList1_2 =
+ ok = file_sorter:merge(CFs1, Foo, [{order,KComp} | UArgs2]),
+ UMerged = from_files(Foo, Fmt),
+ delete_files(Foo),
+
+ List1 = [{a,1,x4},{b,2,x4},{c,3,x4}],
+ List2 = [{a,3,x4},{b,4,x4},{c,5,x4}],
+ List3 = [{a,5,x4},{b,6,x4},{c,7,x4}],
+ FsLL = to_files([List1, List2, List3], Fmt, Config),
+ ok = file_sorter:merge(FsLL, Foo, Args),
+ List1_2 = lists:merge(KComp,lists:merge(KComp,List1,List2),List3),
+ List1_2 = from_files(Foo, Fmt),
+ ok = file_sorter:merge(FsLL, Foo, [{order,KComp} | UArgs]),
+ UList1_2 =
lists:umerge(KComp,lists:umerge(KComp, List1, List2),List3),
- ?line UList1_2 = from_files(Foo, Fmt),
- ?line delete_files([Foo | CFs1]),
+ UList1_2 = from_files(Foo, Fmt),
+ delete_files([Foo | CFs1]),
fun() ->
- ?line LL1 = [{d,4},{e,5},{f,6}],
- ?line LL2 = [{a,1},{b,2},{c,3}],
- ?line LL3 = [{j,10},{k,11},{l,12}],
- ?line LL4 = [{g,7},{h,8},{i,9}],
- ?line LL5 = [{p,16},{q,17},{r,18}],
- ?line LL6 = [{m,13},{n,14},{o,15}],
- ?line LLAll = [LL1,LL2,LL3,LL4,LL5,LL6],
- ?line FsLL6 = to_files(LLAll, Fmt, Config),
- ?line LL = lists:sort(lists:append(LLAll)),
- ?line ok = file_sorter:merge(FsLL6, Foo, Args),
- ?line LL = from_files(Foo, Fmt),
- ?line ok = file_sorter:merge(FsLL6, Foo, UArgs),
- ?line LL = from_files(Foo, Fmt),
- ?line delete_files([Foo | FsLL6])
+ LL1 = [{d,4},{e,5},{f,6}],
+ LL2 = [{a,1},{b,2},{c,3}],
+ LL3 = [{j,10},{k,11},{l,12}],
+ LL4 = [{g,7},{h,8},{i,9}],
+ LL5 = [{p,16},{q,17},{r,18}],
+ LL6 = [{m,13},{n,14},{o,15}],
+ LLAll = [LL1,LL2,LL3,LL4,LL5,LL6],
+ FsLL6 = to_files(LLAll, Fmt, Config),
+ LL = lists:sort(lists:append(LLAll)),
+ ok = file_sorter:merge(FsLL6, Foo, Args),
+ LL = from_files(Foo, Fmt),
+ ok = file_sorter:merge(FsLL6, Foo, UArgs),
+ LL = from_files(Foo, Fmt),
+ delete_files([Foo | FsLL6])
end(),
fun() ->
- ?line RLL1 = [{b,2},{h,8},{n,14}],
- ?line RLL2 = [{a,1},{g,7},{m,13}],
- ?line RLL3 = [{d,4},{j,10},{p,16}],
- ?line RLL4 = [{c,3},{i,9},{o,15}],
- ?line RLL5 = [{f,6},{l,12},{r,18}],
- ?line RLL6 = [{e,5},{k,11},{q,17}],
- ?line RLLAll = [RLL1,RLL2,RLL3,RLL4,RLL5,RLL6],
- ?line RFsLL6 = to_files(RLLAll, Fmt, Config),
- ?line RLL = lists:sort(lists:append(RLLAll)),
- ?line ok = file_sorter:merge(RFsLL6, Foo, Args),
- ?line RLL = from_files(Foo, Fmt),
- ?line ok = file_sorter:merge(RFsLL6, Foo, UArgs),
- ?line RLL = from_files(Foo, Fmt),
- ?line delete_files([Foo | RFsLL6])
+ RLL1 = [{b,2},{h,8},{n,14}],
+ RLL2 = [{a,1},{g,7},{m,13}],
+ RLL3 = [{d,4},{j,10},{p,16}],
+ RLL4 = [{c,3},{i,9},{o,15}],
+ RLL5 = [{f,6},{l,12},{r,18}],
+ RLL6 = [{e,5},{k,11},{q,17}],
+ RLLAll = [RLL1,RLL2,RLL3,RLL4,RLL5,RLL6],
+ RFsLL6 = to_files(RLLAll, Fmt, Config),
+ RLL = lists:sort(lists:append(RLLAll)),
+ ok = file_sorter:merge(RFsLL6, Foo, Args),
+ RLL = from_files(Foo, Fmt),
+ ok = file_sorter:merge(RFsLL6, Foo, UArgs),
+ RLL = from_files(Foo, Fmt),
+ delete_files([Foo | RFsLL6])
end(),
ok.
@@ -1054,57 +993,57 @@ check(Fmt, Config) ->
L1 = [3,1,2,5,4],
[F1_0] = Fs1 = to_files([L1], Fmt, Config),
F1 = filename:absname(F1_0),
- ?line {ok, [{F1,2,1}]} = file_sorter:check(Fs1, Args),
- ?line {ok, [{F1,2,1}]} = file_sorter:check(Fs1, [{order,Fun} | Args]),
- ?line {ok, [{F1,2,1}]} = file_sorter:check(Fs1, [{unique,true} | Args]),
- ?line {ok, [{F1,2,1}]} =
+ {ok, [{F1,2,1}]} = file_sorter:check(Fs1, Args),
+ {ok, [{F1,2,1}]} = file_sorter:check(Fs1, [{order,Fun} | Args]),
+ {ok, [{F1,2,1}]} = file_sorter:check(Fs1, [{unique,true} | Args]),
+ {ok, [{F1,2,1}]} =
file_sorter:check(Fs1, [{order,Fun},{unique,true} | Args]),
- ?line {ok, [{F1,3,2}]} =
+ {ok, [{F1,3,2}]} =
file_sorter:check(Fs1, [{order,descending} | Args]),
- ?line {ok, [{F1,3,2}]} =
+ {ok, [{F1,3,2}]} =
file_sorter:check(Fs1, [{unique,true},{order,descending} | Args]),
- ?line delete_files(Fs1),
-
+ delete_files(Fs1),
+
L2 = [[1,2,2,3,3,4,5,5],[5,5,4,3,3,2,2,1]],
[F2_0,F3_0] = Fs2 = to_files(L2, Fmt, Config),
F2 = filename:absname(F2_0),
F3 = filename:absname(F3_0),
- ?line {ok, [{F3,3,4}]} = file_sorter:check(Fs2, Args),
- ?line {ok, [{F3,3,4}]} = file_sorter:check(Fs2, [{order,Fun} | Args]),
- ?line {ok, [{F2,3,2},{F3,2,5}]} =
+ {ok, [{F3,3,4}]} = file_sorter:check(Fs2, Args),
+ {ok, [{F3,3,4}]} = file_sorter:check(Fs2, [{order,Fun} | Args]),
+ {ok, [{F2,3,2},{F3,2,5}]} =
file_sorter:check(Fs2, [{unique, true} | Args]),
- ?line {ok, [{F2,3,2},{F3,2,5}]} =
+ {ok, [{F2,3,2},{F3,2,5}]} =
file_sorter:check(Fs2, [{order,Fun},{unique, true} | Args]),
- ?line {ok, [{F2,2,2}]} =
+ {ok, [{F2,2,2}]} =
file_sorter:check(Fs2, [{order,descending} | Args]),
- ?line {ok, [{F2,2,2},{F3,2,5}]} =
+ {ok, [{F2,2,2},{F3,2,5}]} =
file_sorter:check(Fs2, [{unique,true},{order,descending} | Args]),
- ?line delete_files(Fs2),
-
+ delete_files(Fs2),
+
L3 = [1,2,3,4],
- ?line Fs3 = to_files([L3], Fmt, Config),
- ?line {ok, []} = file_sorter:check(Fs3, [{unique,true} | Args]),
- ?line {ok, []} =
+ Fs3 = to_files([L3], Fmt, Config),
+ {ok, []} = file_sorter:check(Fs3, [{unique,true} | Args]),
+ {ok, []} =
file_sorter:check(Fs3, [{unique,true},{order,Fun} | Args]),
- ?line delete_files(Fs3),
+ delete_files(Fs3),
%% big objects
- ?line T1 = erlang:make_tuple(10000,foo),
- ?line T2 = erlang:make_tuple(10000,bar),
- ?line L4 = [T1,T2],
- ?line [FF_0] = Fs4 = to_files([L4], Fmt, Config),
+ T1 = erlang:make_tuple(10000,foo),
+ T2 = erlang:make_tuple(10000,bar),
+ L4 = [T1,T2],
+ [FF_0] = Fs4 = to_files([L4], Fmt, Config),
FF = filename:absname(FF_0),
- ?line {ok, [{FF,2,T2}]} = file_sorter:check(Fs4, [{unique,true} | Args]),
- ?line delete_files(Fs4),
+ {ok, [{FF,2,T2}]} = file_sorter:check(Fs4, [{unique,true} | Args]),
+ delete_files(Fs4),
CFun = key_compare(2),
L10 = [[{1,a},{2,b},T10_1={1,b},{3,c}], [{1,b},T10_2={2,a}]],
[F10_0,F11_0] = Fs10 = to_files(L10, Fmt, Config),
F10_1 = filename:absname(F10_0),
F11_1 = filename:absname(F11_0),
- ?line {ok, [{F10_1,3,T10_1},{F11_1,2,T10_2}]} =
+ {ok, [{F10_1,3,T10_1},{F11_1,2,T10_2}]} =
file_sorter:check(Fs10, [{unique,true},{order,CFun} | Args]),
- ?line delete_files(Fs10),
+ delete_files(Fs10),
ok.
@@ -1112,31 +1051,31 @@ keycheck(Fmt, Config) ->
Args0 = make_args(Fmt, [{size,5}]),
Args = Args0 ++ [{tmpdir,?privdir(Config)}],
- ?line L1 = [[{a,1},{b,2}], [{c,2},{b,1},{a,3}]],
- ?line [F1_0,F2_0] = Fs1 = to_files(L1, Fmt, Config),
+ L1 = [[{a,1},{b,2}], [{c,2},{b,1},{a,3}]],
+ [F1_0,F2_0] = Fs1 = to_files(L1, Fmt, Config),
F1 = filename:absname(F1_0),
F2 = filename:absname(F2_0),
- ?line {ok, [{F2,2,{b,1}}]} = file_sorter:keycheck(1, Fs1, Args),
- ?line {ok, [{F2,2,{b,1}}]} =
+ {ok, [{F2,2,{b,1}}]} = file_sorter:keycheck(1, Fs1, Args),
+ {ok, [{F2,2,{b,1}}]} =
file_sorter:keycheck(1, Fs1, [{unique,true} | Args]),
- ?line {ok, [{F1,2,{b,2}}]} =
+ {ok, [{F1,2,{b,2}}]} =
file_sorter:keycheck(1, Fs1, [{order,descending},{unique,true} | Args]),
- ?line delete_files(Fs1),
-
+ delete_files(Fs1),
+
L2 = [[{a,1},{a,2},{a,2},{b,2}], [{c,2},{b,1},{b,2},{b,2},{a,3}]],
- ?line [F3_0,F4_0] = Fs2 = to_files(L2, Fmt, Config),
+ [F3_0,F4_0] = Fs2 = to_files(L2, Fmt, Config),
F3 = filename:absname(F3_0),
F4 = filename:absname(F4_0),
- ?line {ok, [{F4,2,{b,1}}]} = file_sorter:keycheck(1, Fs2, Args),
- ?line {ok, [{F3,2,{a,2}},{F4,2,{b,1}}]} =
+ {ok, [{F4,2,{b,1}}]} = file_sorter:keycheck(1, Fs2, Args),
+ {ok, [{F3,2,{a,2}},{F4,2,{b,1}}]} =
file_sorter:keycheck(1, Fs2, [{unique,true} | Args]),
- ?line {ok, [{F3,4,{b,2}}]} =
+ {ok, [{F3,4,{b,2}}]} =
file_sorter:keycheck(1, Fs2, [{order,descending} | Args]),
- ?line {ok, [{F3,2,{a,2}},{F4,3,{b,2}}]} =
+ {ok, [{F3,2,{a,2}},{F4,3,{b,2}}]} =
file_sorter:keycheck(1, Fs2,
[{order,descending},{unique,true} | Args]),
- ?line delete_files(Fs2),
-
+ delete_files(Fs2),
+
ok.
rev(L, Args) ->
@@ -1330,9 +1269,9 @@ c(Fd, Bin0, Size0, NoBytes, HL, L) ->
eof when Size0 =:= 0 ->
lists:reverse(L);
eof ->
- test_server:fail({error, premature_eof});
+ ct:fail({error, premature_eof});
Error ->
- test_server:fail(Error)
+ ct:fail(Error)
end.
c1(Fd, B, BinSize, HL, L) ->
@@ -1347,7 +1286,7 @@ c1(Fd, B, BinSize, HL, L) ->
<<BinTerm:Size/binary, R/binary>> = Bin,
E = case catch binary_to_term(BinTerm) of
{'EXIT', _} ->
- test_server:fail({error, bad_object});
+ ct:fail({error, bad_object});
Term ->
Term
end,
diff --git a/lib/stdlib/test/filelib_SUITE.erl b/lib/stdlib/test/filelib_SUITE.erl
index 01b798faef..4f8936edbf 100644
--- a/lib/stdlib/test/filelib_SUITE.erl
+++ b/lib/stdlib/test/filelib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,19 +29,18 @@
-import(lists, [foreach/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?t:minutes(5)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[wildcard_one, wildcard_two, wildcard_errors,
@@ -65,14 +64,14 @@ end_per_group(_GroupName, Config) ->
wildcard_one(Config) when is_list(Config) ->
- ?line {ok,OldCwd} = file:get_cwd(),
- ?line Dir = filename:join(?config(priv_dir, Config), "wildcard_one"),
- ?line ok = file:make_dir(Dir),
+ {ok,OldCwd} = file:get_cwd(),
+ Dir = filename:join(proplists:get_value(priv_dir, Config), "wildcard_one"),
+ ok = file:make_dir(Dir),
do_wildcard_1(Dir,
fun(Wc) ->
filelib:wildcard(Wc, Dir, erl_prim_loader)
end),
- ?line file:set_cwd(Dir),
+ file:set_cwd(Dir),
do_wildcard_1(Dir,
fun(Wc) ->
L = filelib:wildcard(Wc),
@@ -81,30 +80,30 @@ wildcard_one(Config) when is_list(Config) ->
L = filelib:wildcard(Wc, Dir),
L = filelib:wildcard(Wc, Dir++"/.")
end),
- ?line file:set_cwd(OldCwd),
- ?line ok = file:del_dir(Dir),
+ file:set_cwd(OldCwd),
+ ok = file:del_dir(Dir),
ok.
wildcard_two(Config) when is_list(Config) ->
- ?line Dir = filename:join(?config(priv_dir, Config), "wildcard_two"),
- ?line ok = file:make_dir(Dir),
- ?line do_wildcard_1(Dir, fun(Wc) -> io:format("~p~n",[{Wc,Dir, X = filelib:wildcard(Wc, Dir)}]),X end),
- ?line do_wildcard_1(Dir, fun(Wc) -> filelib:wildcard(Wc, Dir++"/") end),
- ?line do_wildcard_1(Dir, fun(Wc) -> filelib:wildcard(Wc, Dir++"/.") end),
+ Dir = filename:join(proplists:get_value(priv_dir, Config), "wildcard_two"),
+ ok = file:make_dir(Dir),
+ do_wildcard_1(Dir, fun(Wc) -> io:format("~p~n",[{Wc,Dir, X = filelib:wildcard(Wc, Dir)}]),X end),
+ do_wildcard_1(Dir, fun(Wc) -> filelib:wildcard(Wc, Dir++"/") end),
+ do_wildcard_1(Dir, fun(Wc) -> filelib:wildcard(Wc, Dir++"/.") end),
case os:type() of
{win32,_} ->
ok;
_ ->
- ?line do_wildcard_1(Dir, fun(Wc) -> filelib:wildcard(Wc, "//"++Dir) end)
+ do_wildcard_1(Dir, fun(Wc) -> filelib:wildcard(Wc, "//"++Dir) end)
end,
- ?line ok = file:del_dir(Dir),
+ ok = file:del_dir(Dir),
ok.
wildcard_errors(Config) when is_list(Config) ->
- ?line wcc("{", missing_delimiter),
- ?line wcc("{a", missing_delimiter),
- ?line wcc("{a,", missing_delimiter),
- ?line wcc("{a,b", missing_delimiter),
+ wcc("{", missing_delimiter),
+ wcc("{a", missing_delimiter),
+ wcc("{a,", missing_delimiter),
+ wcc("{a,b", missing_delimiter),
ok.
wcc(Wc, Error) ->
@@ -131,70 +130,70 @@ subtract_dir("/"++Cs, []) -> Cs.
do_wildcard_2(Dir, Wcf) ->
%% Basic wildcards.
All = ["abc","abcdef","glurf"],
- ?line Files = mkfiles(lists:reverse(All), Dir),
- ?line All = Wcf("*"),
- ?line ["abc","abcdef"] = Wcf("a*"),
- ?line ["abc","abcdef"] = Wcf("abc*"),
- ?line ["abcdef"] = Wcf("abc???"),
- ?line ["abcdef"] = Wcf("abcd*"),
- ?line ["abcdef"] = Wcf("*def"),
- ?line ["abcdef","glurf"] = Wcf("{*def,gl*}"),
- ?line ["abc","abcdef"] = Wcf("a*{def,}"),
- ?line ["abc","abcdef"] = Wcf("a*{,def}"),
+ Files = mkfiles(lists:reverse(All), Dir),
+ All = Wcf("*"),
+ ["abc","abcdef"] = Wcf("a*"),
+ ["abc","abcdef"] = Wcf("abc*"),
+ ["abcdef"] = Wcf("abc???"),
+ ["abcdef"] = Wcf("abcd*"),
+ ["abcdef"] = Wcf("*def"),
+ ["abcdef","glurf"] = Wcf("{*def,gl*}"),
+ ["abc","abcdef"] = Wcf("a*{def,}"),
+ ["abc","abcdef"] = Wcf("a*{,def}"),
%% Constant wildcard.
["abcdef"] = Wcf("abcdef"),
%% Negative tests.
- ?line [] = Wcf("b*"),
- ?line [] = Wcf("bufflig"),
+ [] = Wcf("b*"),
+ [] = Wcf("bufflig"),
- ?line del(Files),
+ del(Files),
do_wildcard_3(Dir, Wcf).
-
+
do_wildcard_3(Dir, Wcf) ->
%% Some character sets.
All = ["a01","a02","a03","b00","c02","d19"],
- ?line Files = mkfiles(lists:reverse(All), Dir),
- ?line All = Wcf("[a-z]*"),
- ?line All = Wcf("[a-d]*"),
- ?line All = Wcf("[adbc]*"),
- ?line All = Wcf("?[0-9][0-9]"),
- ?line All = Wcf("?[0-1][0-39]"),
- ?line All = Wcf("[abcdefgh][10][01239]"),
- ?line ["a01","a02","a03","b00","c02"] = Wcf("[a-z]0[0-3]"),
- ?line [] = Wcf("?[a-z][0-39]"),
- ?line del(Files),
+ Files = mkfiles(lists:reverse(All), Dir),
+ All = Wcf("[a-z]*"),
+ All = Wcf("[a-d]*"),
+ All = Wcf("[adbc]*"),
+ All = Wcf("?[0-9][0-9]"),
+ All = Wcf("?[0-1][0-39]"),
+ All = Wcf("[abcdefgh][10][01239]"),
+ ["a01","a02","a03","b00","c02"] = Wcf("[a-z]0[0-3]"),
+ [] = Wcf("?[a-z][0-39]"),
+ del(Files),
do_wildcard_4(Dir, Wcf).
do_wildcard_4(Dir, Wcf) ->
%% More character sets: tricky characters.
All = ["a-","aA","aB","aC","a[","a]"],
- ?line Files = mkfiles(lists:reverse(All), Dir),
- ?line All = Wcf("a[][A-C-]"),
+ Files = mkfiles(lists:reverse(All), Dir),
+ All = Wcf("a[][A-C-]"),
["a-"] = Wcf("a[-]"),
["a["] = Wcf("a["),
- ?line del(Files),
+ del(Files),
do_wildcard_5(Dir, Wcf).
do_wildcard_5(Dir, Wcf) ->
Dirs = ["xa","blurf","yyy"],
- ?line foreach(fun(D) -> ok = file:make_dir(filename:join(Dir, D)) end, Dirs),
+ foreach(fun(D) -> ok = file:make_dir(filename:join(Dir, D)) end, Dirs),
All = ["blurf/nisse","xa/arne","xa/kalle","yyy/arne"],
- ?line Files = mkfiles(lists:reverse(All), Dir),
+ Files = mkfiles(lists:reverse(All), Dir),
%% Test.
- ?line All = Wcf("*/*"),
- ?line ["blurf/nisse","xa/arne","xa/kalle"] = Wcf("{blurf,xa}/*"),
- ?line ["xa/arne","yyy/arne"] = Wcf("*/arne"),
- ?line ["blurf/nisse"] = Wcf("*/nisse"),
- ?line [] = Wcf("mountain/*"),
- ?line [] = Wcf("xa/gurka"),
+ All = Wcf("*/*"),
+ ["blurf/nisse","xa/arne","xa/kalle"] = Wcf("{blurf,xa}/*"),
+ ["xa/arne","yyy/arne"] = Wcf("*/arne"),
+ ["blurf/nisse"] = Wcf("*/nisse"),
+ [] = Wcf("mountain/*"),
+ [] = Wcf("xa/gurka"),
["blurf/nisse"] = Wcf("blurf/nisse"),
%% Cleanup
- ?line del(Files),
- ?line foreach(fun(D) -> ok = file:del_dir(filename:join(Dir, D)) end, Dirs),
+ del(Files),
+ foreach(fun(D) -> ok = file:del_dir(filename:join(Dir, D)) end, Dirs),
do_wildcard_6(Dir, Wcf).
do_wildcard_6(Dir, Wcf) ->
@@ -271,45 +270,45 @@ do_wildcard_9(Dir, Wcf) ->
fold_files(Config) when is_list(Config) ->
- ?line Dir = filename:join(?config(priv_dir, Config), "fold_files"),
- ?line ok = file:make_dir(Dir),
- ?line Dirs = [filename:join(Dir, D) || D <- ["blurf","blurf/blarf"]],
- ?line foreach(fun(D) -> ok = file:make_dir(D) end, Dirs),
+ Dir = filename:join(proplists:get_value(priv_dir, Config), "fold_files"),
+ ok = file:make_dir(Dir),
+ Dirs = [filename:join(Dir, D) || D <- ["blurf","blurf/blarf"]],
+ foreach(fun(D) -> ok = file:make_dir(D) end, Dirs),
All = ["fb.txt","ko.txt",
"blurf/nisse.text","blurf/blarf/aaa.txt","blurf/blarf/urfa.txt"],
- ?line Files = mkfiles(lists:reverse(All), Dir),
+ Files = mkfiles(lists:reverse(All), Dir),
%% Test.
- ?line Files0 = filelib:fold_files(Dir, "^", false,
- fun(H, T) -> [H|T] end, []),
- ?line same_lists(["fb.txt","ko.txt"], Files0, Dir),
+ Files0 = filelib:fold_files(Dir, "^", false,
+ fun(H, T) -> [H|T] end, []),
+ same_lists(["fb.txt","ko.txt"], Files0, Dir),
- ?line Files1 = filelib:fold_files(Dir, "^", true,
- fun(H, T) -> [H|T] end, []),
- ?line same_lists(All, Files1, Dir),
+ Files1 = filelib:fold_files(Dir, "^", true,
+ fun(H, T) -> [H|T] end, []),
+ same_lists(All, Files1, Dir),
- ?line Files2 = filelib:fold_files(Dir, "[.]text$", true,
- fun(H, T) -> [H|T] end, []),
- ?line same_lists(["blurf/nisse.text"], Files2, Dir),
+ Files2 = filelib:fold_files(Dir, "[.]text$", true,
+ fun(H, T) -> [H|T] end, []),
+ same_lists(["blurf/nisse.text"], Files2, Dir),
- ?line Files3 = filelib:fold_files(Dir, "^..[.]", true,
- fun(H, T) -> [H|T] end, []),
- ?line same_lists(["fb.txt","ko.txt"], Files3, Dir),
+ Files3 = filelib:fold_files(Dir, "^..[.]", true,
+ fun(H, T) -> [H|T] end, []),
+ same_lists(["fb.txt","ko.txt"], Files3, Dir),
- ?line Files4 = filelib:fold_files(Dir, "^ko[.]txt$", true,
- fun(H, T) -> [H|T] end, []),
- ?line same_lists(["ko.txt"], Files4, Dir),
- ?line Files4 = filelib:fold_files(Dir, "^ko[.]txt$", false,
- fun(H, T) -> [H|T] end, []),
+ Files4 = filelib:fold_files(Dir, "^ko[.]txt$", true,
+ fun(H, T) -> [H|T] end, []),
+ same_lists(["ko.txt"], Files4, Dir),
+ Files4 = filelib:fold_files(Dir, "^ko[.]txt$", false,
+ fun(H, T) -> [H|T] end, []),
- ?line [] = filelib:fold_files(Dir, "^$", true,
- fun(H, T) -> [H|T] end, []),
+ [] = filelib:fold_files(Dir, "^$", true,
+ fun(H, T) -> [H|T] end, []),
%% Cleanup
- ?line del(Files),
- ?line foreach(fun(D) -> ok = file:del_dir(D) end, lists:reverse(Dirs)),
- ?line ok = file:del_dir(Dir).
+ del(Files),
+ foreach(fun(D) -> ok = file:del_dir(D) end, lists:reverse(Dirs)),
+ ok = file:del_dir(Dir).
same_lists(Expected0, Actual0, BaseDir) ->
Expected = [filename:absname(N, BaseDir) || N <- lists:sort(Expected0)],
@@ -318,7 +317,7 @@ same_lists(Expected0, Actual0, BaseDir) ->
mkfiles([H|T], Dir) ->
Name = filename:join(Dir, H),
- Garbage = [31+random:uniform(95) || _ <- lists:seq(1, random:uniform(1024))],
+ Garbage = [31+rand:uniform(95) || _ <- lists:seq(1, rand:uniform(1024))],
file:write_file(Name, Garbage),
[Name|mkfiles(T, Dir)];
mkfiles([], _) -> [].
@@ -328,52 +327,49 @@ del([H|T]) ->
del(T);
del([]) -> ok.
-otp_5960(suite) ->
- [];
-otp_5960(doc) ->
- ["Test that filelib:ensure_dir/1 returns ok or {error,Reason}"];
+%% Test that filelib:ensure_dir/1 returns ok or {error,Reason}.
otp_5960(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Dir = filename:join(PrivDir, "otp_5960_dir"),
- ?line Name1 = filename:join(Dir, name1),
- ?line Name2 = filename:join(Dir, name2),
- ?line ok = filelib:ensure_dir(Name1), % parent is created
- ?line ok = filelib:ensure_dir(Name1), % repeating it should be OK
- ?line ok = filelib:ensure_dir(Name2), % parent already exists
- ?line ok = filelib:ensure_dir(Name2), % repeating it should be OK
- ?line Name3 = filename:join(Name1, name3),
- ?line {ok, FileInfo} = file:read_file_info(Dir),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dir = filename:join(PrivDir, "otp_5960_dir"),
+ Name1 = filename:join(Dir, name1),
+ Name2 = filename:join(Dir, name2),
+ ok = filelib:ensure_dir(Name1), % parent is created
+ ok = filelib:ensure_dir(Name1), % repeating it should be OK
+ ok = filelib:ensure_dir(Name2), % parent already exists
+ ok = filelib:ensure_dir(Name2), % repeating it should be OK
+ Name3 = filename:join(Name1, name3),
+ {ok, FileInfo} = file:read_file_info(Dir),
case os:type() of
{win32,_} ->
%% Not possibly to write protect directories on Windows
%% (at least not using file:write_file_info/2).
ok;
_ ->
- ?line Mode = FileInfo#file_info.mode,
- ?line NoWriteMode = Mode - 8#00200 - 8#00020 - 8#00002,
- ?line ok = file:write_file_info(Dir, #file_info{mode=NoWriteMode}),
- ?line {error, _} = filelib:ensure_dir(Name3),
- ?line ok = file:write_file_info(Dir, #file_info{mode=Mode}),
+ Mode = FileInfo#file_info.mode,
+ NoWriteMode = Mode - 8#00200 - 8#00020 - 8#00002,
+ ok = file:write_file_info(Dir, #file_info{mode=NoWriteMode}),
+ {error, _} = filelib:ensure_dir(Name3),
+ ok = file:write_file_info(Dir, #file_info{mode=Mode}),
ok
end.
ensure_dir_eexist(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Dir = filename:join(PrivDir, "ensure_dir_eexist"),
- ?line Name = filename:join(Dir, "same_name_as_file_and_dir"),
- ?line ok = filelib:ensure_dir(Name),
- ?line ok = file:write_file(Name, <<"some string\n">>),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dir = filename:join(PrivDir, "ensure_dir_eexist"),
+ Name = filename:join(Dir, "same_name_as_file_and_dir"),
+ ok = filelib:ensure_dir(Name),
+ ok = file:write_file(Name, <<"some string\n">>),
%% There already is a file with the name of the directory
%% we want to create.
- ?line NeedFile = filename:join(Name, "file"),
- ?line NeedFileB = filename:join(Name, <<"file">>),
- ?line {error, eexist} = filelib:ensure_dir(NeedFile),
- ?line {error, eexist} = filelib:ensure_dir(NeedFileB),
+ NeedFile = filename:join(Name, "file"),
+ NeedFileB = filename:join(Name, <<"file">>),
+ {error, eexist} = filelib:ensure_dir(NeedFile),
+ {error, eexist} = filelib:ensure_dir(NeedFileB),
ok.
ensure_dir_symlink(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, "ensure_dir_symlink"),
Name = filename:join(Dir, "same_name_as_file_and_dir"),
ok = filelib:ensure_dir(Name),
@@ -392,7 +388,7 @@ ensure_dir_symlink(Config) when is_list(Config) ->
end.
wildcard_symlink(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, ?MODULE_STRING++"_wildcard_symlink"),
SubDir = filename:join(Dir, "sub"),
AFile = filename:join(SubDir, "a_file"),
@@ -452,7 +448,7 @@ basenames(Dir, Files) ->
end || F <- Files].
is_file_symlink(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, ?MODULE_STRING++"_is_file_symlink"),
SubDir = filename:join(Dir, "sub"),
AFile = filename:join(SubDir, "a_file"),
@@ -485,7 +481,7 @@ is_file_symlink(Config) ->
end.
file_props_symlink(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, ?MODULE_STRING++"_file_props_symlink"),
AFile = filename:join(Dir, "a_file"),
Alias = filename:join(Dir, "symlink"),
diff --git a/lib/stdlib/test/filename_SUITE.erl b/lib/stdlib/test/filename_SUITE.erl
index fd47da8150..b7c4d3a6e5 100644
--- a/lib/stdlib/test/filename_SUITE.erl
+++ b/lib/stdlib/test/filename_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,21 +28,31 @@
basename_bin_1/1, basename_bin_2/1,
dirname_bin/1, extension_bin/1, join_bin/1, t_nativename_bin/1]).
-export([pathtype_bin/1,rootname_bin/1,split_bin/1]).
+-export([t_basedir_api/1, t_basedir_xdg/1, t_basedir_windows/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
- [absname, absname_2, basename_1, basename_2, dirname,
- extension,
- join, pathtype, rootname, split, t_nativename, find_src,
- absname_bin, absname_bin_2, basename_bin_1, basename_bin_2, dirname_bin,
- extension_bin,
- join_bin, pathtype_bin, rootname_bin, split_bin, t_nativename_bin].
+ [absname, absname_2,
+ find_src,
+ absname_bin, absname_bin_2,
+ {group,p},
+ t_basedir_xdg, t_basedir_windows].
groups() ->
- [].
+ [{p, [parallel],
+ [dirname,
+ extension, extension_bin,
+ join, pathtype, rootname, split, t_nativename,
+ basename_1, basename_2,
+ basename_bin_1, basename_bin_2, dirname_bin,
+ join_bin, pathtype_bin, rootname_bin, split_bin,
+ t_nativename_bin,
+ t_basedir_api]}].
init_per_suite(Config) ->
Config.
@@ -61,67 +71,59 @@ end_per_group(_GroupName, Config) ->
absname(Config) when is_list(Config) ->
case os:type() of
- {win32, _} ->
- ?line [Drive|_] = ?config(priv_dir, Config),
- ?line Temp = filename:join([Drive|":/"], "temp"),
- ?line case file:make_dir(Temp) of
- ok -> ok;
- {error,eexist} -> ok
- end,
- ?line {ok,Cwd} = file:get_cwd(),
- ?line ok = file:set_cwd(Temp),
- ?line [Drive|":/temp/foo"] = filename:absname(foo),
- ?line [Drive|":/temp/foo"] = filename:absname("foo"),
- ?line [Drive|":/temp/../ebin"] = filename:absname("../ebin"),
- ?line [Drive|":/erlang"] = filename:absname("/erlang"),
- ?line [Drive|":/erlang/src"] = filename:absname("/erlang/src"),
- ?line [Drive|":/erlang/src"] = filename:absname("\\erlang\\src"),
- ?line [Drive|":/temp/erlang"] = filename:absname([Drive|":erlang"]),
- ?line [Drive|":/temp/erlang/src"] =
- filename:absname([Drive|":erlang/src"]),
- ?line [Drive|":/temp/erlang/src"] =
- filename:absname([Drive|":erlang\\src\\"]),
- ?line "a:/erlang" = filename:absname("a:erlang"),
-
- ?line file:set_cwd([Drive|":/"]),
- ?line [Drive|":/foo"] = filename:absname(foo),
- ?line [Drive|":/foo"] = filename:absname("foo"),
- ?line [Drive|":/../ebin"] = filename:absname("../ebin"),
- ?line [Drive|":/erlang"] = filename:absname("/erlang"),
- ?line [Drive|":/erlang/src"] = filename:absname("/erlang/src"),
- ?line [Drive|":/erlang/src"] = filename:absname(["/erlang",'/src']),
- ?line [Drive|":/erlang/src"] = filename:absname("\\erlang\\\\src"),
- ?line [Drive|":/erlang"] = filename:absname([Drive|":erlang"]),
- ?line [Drive|":/erlang/src"] = filename:absname([Drive|":erlang/src"]),
- ?line "a:/erlang" = filename:absname("a:erlang"),
-
- ?line file:set_cwd(Cwd),
- ok;
- Type ->
- case Type of
- {unix, _} ->
- ?line ok = file:set_cwd("/usr"),
- ?line "/usr/foo" = filename:absname(foo),
- ?line "/usr/foo" = filename:absname("foo"),
- ?line "/usr/../ebin" = filename:absname("../ebin");
- {ose, _} ->
- ?line ok = file:set_cwd("/romfs"),
- ?line "/romfs/foo" = filename:absname(foo),
- ?line "/romfs/foo" = filename:absname("foo"),
- ?line "/romfs/../ebin" = filename:absname("../ebin")
- end,
-
- ?line file:set_cwd("/"),
- ?line "/foo" = filename:absname(foo),
- ?line "/foo" = filename:absname("foo"),
- ?line "/../ebin" = filename:absname("../ebin"),
- ?line "/erlang" = filename:absname("/erlang"),
- ?line "/erlang/src" = filename:absname("/erlang/src"),
- ?line "/erlang/src" = filename:absname(["/erl",'ang/s',"rc"]),
- ?line "/erlang/src" = filename:absname(["/erl",'a','ng',"/",'s',"rc"]),
- ?line "/erlang/src" = filename:absname("/erlang///src"),
- ?line "/file_sorter.erl" = filename:absname([file_sorter|'.erl']),
- ok
+ {win32, _} ->
+ [Drive|_] = proplists:get_value(priv_dir, Config),
+ Temp = filename:join([Drive|":/"], "temp"),
+ case file:make_dir(Temp) of
+ ok -> ok;
+ {error,eexist} -> ok
+ end,
+ {ok,Cwd} = file:get_cwd(),
+ ok = file:set_cwd(Temp),
+ [Drive|":/temp/foo"] = filename:absname(foo),
+ [Drive|":/temp/foo"] = filename:absname("foo"),
+ [Drive|":/temp/../ebin"] = filename:absname("../ebin"),
+ [Drive|":/erlang"] = filename:absname("/erlang"),
+ [Drive|":/erlang/src"] = filename:absname("/erlang/src"),
+ [Drive|":/erlang/src"] = filename:absname("\\erlang\\src"),
+ [Drive|":/temp/erlang"] = filename:absname([Drive|":erlang"]),
+ [Drive|":/temp/erlang/src"] =
+ filename:absname([Drive|":erlang/src"]),
+ [Drive|":/temp/erlang/src"] =
+ filename:absname([Drive|":erlang\\src\\"]),
+ "a:/erlang" = filename:absname("a:erlang"),
+
+ file:set_cwd([Drive|":/"]),
+ [Drive|":/foo"] = filename:absname(foo),
+ [Drive|":/foo"] = filename:absname("foo"),
+ [Drive|":/../ebin"] = filename:absname("../ebin"),
+ [Drive|":/erlang"] = filename:absname("/erlang"),
+ [Drive|":/erlang/src"] = filename:absname("/erlang/src"),
+ [Drive|":/erlang/src"] = filename:absname(["/erlang",'/src']),
+ [Drive|":/erlang/src"] = filename:absname("\\erlang\\\\src"),
+ [Drive|":/erlang"] = filename:absname([Drive|":erlang"]),
+ [Drive|":/erlang/src"] = filename:absname([Drive|":erlang/src"]),
+ "a:/erlang" = filename:absname("a:erlang"),
+
+ file:set_cwd(Cwd),
+ ok;
+ {unix, _} ->
+ ok = file:set_cwd("/usr"),
+ "/usr/foo" = filename:absname(foo),
+ "/usr/foo" = filename:absname("foo"),
+ "/usr/../ebin" = filename:absname("../ebin"),
+
+ file:set_cwd("/"),
+ "/foo" = filename:absname(foo),
+ "/foo" = filename:absname("foo"),
+ "/../ebin" = filename:absname("../ebin"),
+ "/erlang" = filename:absname("/erlang"),
+ "/erlang/src" = filename:absname("/erlang/src"),
+ "/erlang/src" = filename:absname(["/erl",'ang/s',"rc"]),
+ "/erlang/src" = filename:absname(["/erl",'a','ng',"/",'s',"rc"]),
+ "/erlang/src" = filename:absname("/erlang///src"),
+ "/file_sorter.erl" = filename:absname([file_sorter|'.erl']),
+ ok
end.
@@ -129,125 +131,119 @@ absname(Config) when is_list(Config) ->
absname_2(Config) when is_list(Config) ->
case os:type() of
- {win32, _} ->
- ?line [Drive|_] = ?config(priv_dir, Config),
- ?line [Drive|":/temp/foo"] = filename:absname(foo, [Drive|":/temp"]),
- ?line [Drive|":/temp/foo"] = filename:absname("foo", [Drive|":/temp"]),
- ?line [Drive|":/temp/../ebin"] = filename:absname("../ebin",
- [Drive|":/temp"]),
- ?line [Drive|":/erlang"] = filename:absname("/erlang", [Drive|":/temp"]),
- ?line [Drive|":/erlang/src"] = filename:absname("/erlang/src",
- [Drive|":/temp"]),
- ?line [Drive|":/erlang/src"] = filename:absname("\\erlang\\src",
- [Drive|":/temp"]),
- ?line [Drive|":/temp/erlang"] = filename:absname([Drive|":erlang"],
- [Drive|":/temp"]),
- ?line [Drive|":/temp/erlang/src"] = filename:absname([Drive|":erlang/src"],
- [Drive|":/temp"]),
- ?line [Drive|":/temp/erlang/src"] =
- filename:absname([Drive|":erlang\\src\\"], [Drive|":/temp"]),
- ?line "a:/erlang" = filename:absname("a:erlang", [Drive|":/temp"]),
-
- ?line file:set_cwd([Drive|":/"]),
- ?line [Drive|":/foo"] = filename:absname(foo, [Drive|":/"]),
- ?line [Drive|":/foo"] = filename:absname("foo", [Drive|":/"]),
- ?line [Drive|":/../ebin"] = filename:absname("../ebin", [Drive|":/"]),
- ?line [Drive|":/erlang"] = filename:absname("/erlang", [Drive|":/"]),
- ?line [Drive|":/erlang/src"] = filename:absname("/erlang/src",
- [Drive|":/"]),
- ?line [Drive|":/erlang/src"] = filename:absname("\\erlang\\\\src",
- [Drive|":/"]),
- ?line [Drive|":/erlang"] = filename:absname([Drive|":erlang"],
- [Drive|":/"]),
- ?line [Drive|":/erlang/src"] = filename:absname([Drive|":erlang/src"],
- [Drive|":/"]),
- ?line "a:/erlang" = filename:absname("a:erlang", [Drive|":/"]),
-
- ok;
- _ ->
- ?line "/usr/foo" = filename:absname(foo, "/usr"),
- ?line "/usr/foo" = filename:absname("foo", "/usr"),
- ?line "/usr/../ebin" = filename:absname("../ebin", "/usr"),
-
- ?line "/foo" = filename:absname(foo, "/"),
- ?line "/foo" = filename:absname("foo", "/"),
- ?line "/../ebin" = filename:absname("../ebin", "/"),
- ?line "/erlang" = filename:absname("/erlang", "/"),
- ?line "/erlang/src" = filename:absname("/erlang/src", "/"),
- ?line "/erlang/src" = filename:absname("/erlang///src", "/"),
- ok
+ {win32, _} ->
+ [Drive|_] = proplists:get_value(priv_dir, Config),
+ [Drive|":/temp/foo"] = filename:absname(foo, [Drive|":/temp"]),
+ [Drive|":/temp/foo"] = filename:absname("foo", [Drive|":/temp"]),
+ [Drive|":/temp/../ebin"] = filename:absname("../ebin",
+ [Drive|":/temp"]),
+ [Drive|":/erlang"] = filename:absname("/erlang", [Drive|":/temp"]),
+ [Drive|":/erlang/src"] = filename:absname("/erlang/src",
+ [Drive|":/temp"]),
+ [Drive|":/erlang/src"] = filename:absname("\\erlang\\src",
+ [Drive|":/temp"]),
+ [Drive|":/temp/erlang"] = filename:absname([Drive|":erlang"],
+ [Drive|":/temp"]),
+ [Drive|":/temp/erlang/src"] = filename:absname([Drive|":erlang/src"],
+ [Drive|":/temp"]),
+ [Drive|":/temp/erlang/src"] =
+ filename:absname([Drive|":erlang\\src\\"], [Drive|":/temp"]),
+ "a:/erlang" = filename:absname("a:erlang", [Drive|":/temp"]),
+
+ file:set_cwd([Drive|":/"]),
+ [Drive|":/foo"] = filename:absname(foo, [Drive|":/"]),
+ [Drive|":/foo"] = filename:absname("foo", [Drive|":/"]),
+ [Drive|":/../ebin"] = filename:absname("../ebin", [Drive|":/"]),
+ [Drive|":/erlang"] = filename:absname("/erlang", [Drive|":/"]),
+ [Drive|":/erlang/src"] = filename:absname("/erlang/src",
+ [Drive|":/"]),
+ [Drive|":/erlang/src"] = filename:absname("\\erlang\\\\src",
+ [Drive|":/"]),
+ [Drive|":/erlang"] = filename:absname([Drive|":erlang"],
+ [Drive|":/"]),
+ [Drive|":/erlang/src"] = filename:absname([Drive|":erlang/src"],
+ [Drive|":/"]),
+ "a:/erlang" = filename:absname("a:erlang", [Drive|":/"]),
+
+ ok;
+ _ ->
+ "/usr/foo" = filename:absname(foo, "/usr"),
+ "/usr/foo" = filename:absname("foo", "/usr"),
+ "/usr/../ebin" = filename:absname("../ebin", "/usr"),
+
+ "/foo" = filename:absname(foo, "/"),
+ "/foo" = filename:absname("foo", "/"),
+ "/../ebin" = filename:absname("../ebin", "/"),
+ "/erlang" = filename:absname("/erlang", "/"),
+ "/erlang/src" = filename:absname("/erlang/src", "/"),
+ "/erlang/src" = filename:absname("/erlang///src", "/"),
+ ok
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
basename_1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line "." = filename:basename("."),
- ?line "foo" = filename:basename("foo"),
- ?line "foo" = filename:basename("/usr/foo"),
- ?line "foo.erl" = filename:basename("A:usr/foo.erl"),
- ?line "foo" = filename:basename('/usr/foo'),
- ?line "foo" = filename:basename(["/usr","/","f","o","o"]),
- ?line "foo" = filename:basename(["/usr/",foo]),
- ?line "foo" = filename:basename(["/usr/f",oo]),
- ?line "foo" = filename:basename(["usr/", "foo"]),
- ?line "foo" = filename:basename(["usr/"|foo]),
- ?line "foo" = filename:basename(["usr/foo/"]),
- ?line case os:type() of
- {win32, _} ->
- ?line "foo" = filename:basename(["usr\\foo\\"]),
- ?line "foo" = filename:basename("A:\\usr\\foo"),
- ?line "foo" = filename:basename("A:foo");
- _ ->
- ?line "strange\\but\\true" =
- filename:basename("strange\\but\\true")
- end,
- ?line test_server:timetrap_cancel(Dog),
+ "." = filename:basename("."),
+ "foo" = filename:basename("foo"),
+ "foo" = filename:basename("/usr/foo"),
+ "foo.erl" = filename:basename("A:usr/foo.erl"),
+ "foo" = filename:basename('/usr/foo'),
+ "foo" = filename:basename(["/usr","/","f","o","o"]),
+ "foo" = filename:basename(["/usr/",foo]),
+ "foo" = filename:basename(["/usr/f",oo]),
+ "foo" = filename:basename(["usr/", "foo"]),
+ "foo" = filename:basename(["usr/"|foo]),
+ "foo" = filename:basename(["usr/foo/"]),
+ case os:type() of
+ {win32, _} ->
+ "foo" = filename:basename(["usr\\foo\\"]),
+ "foo" = filename:basename("A:\\usr\\foo"),
+ "foo" = filename:basename("A:foo");
+ _ ->
+ "strange\\but\\true" =
+ filename:basename("strange\\but\\true")
+ end,
ok.
basename_2(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line "." = filename:basename(".", ".erl"),
- ?line "foo" = filename:basename("foo.erl", ".erl"),
- ?line "foo" = filename:basename('foo.erl', ".erl"),
- ?line "foo" = filename:basename("foo.erl", '.erl'),
- ?line "foo" = filename:basename(["/usr","/","f","oo"], ".erl"),
- ?line "foo.erl" = filename:basename("/usr/foo.erl", ".hrl"),
- ?line "foo.erl" = filename:basename("/usr.hrl/foo.erl", ".hrl"),
- ?line "foo" = filename:basename("/usr.hrl/foo", ".hrl"),
- ?line "foo" = filename:basename("usr/foo/", ".erl"),
- ?line "foo.erl" = filename:basename("usr/foo.erl/", ".erl"),
- ?line "foo.erl" = filename:basename("usr/foo.erl/", '.erl'),
- ?line "foo" = filename:basename(["/usr",'/','f','oo'], ".erl"),
- ?line "foo.erl" = filename:basename(["usr/foo.e",'rl/'], ".erl"),
- ?line case os:type() of
- {win32, _} ->
- ?line "foo" = filename:basename("A:foo", ".erl"),
- ?line "foo.erl" = filename:basename("a:\\usr\\foo.erl",
- ".hrl"),
- ?line "foo.erl" = filename:basename("c:\\usr.hrl\\foo.erl",
- ".hrl"),
- ?line "foo" = filename:basename("A:\\usr\\foo", ".hrl");
- _ ->
- ?line "strange\\but\\true" =
- filename:basename("strange\\but\\true.erl", ".erl"),
- ?line "strange\\but\\true" =
- filename:basename("strange\\but\\true", ".erl")
- end,
- ?line test_server:timetrap_cancel(Dog),
+ "." = filename:basename(".", ".erl"),
+ "foo" = filename:basename("foo.erl", ".erl"),
+ "foo" = filename:basename('foo.erl', ".erl"),
+ "foo" = filename:basename("foo.erl", '.erl'),
+ "foo" = filename:basename(["/usr","/","f","oo"], ".erl"),
+ "foo.erl" = filename:basename("/usr/foo.erl", ".hrl"),
+ "foo.erl" = filename:basename("/usr.hrl/foo.erl", ".hrl"),
+ "foo" = filename:basename("/usr.hrl/foo", ".hrl"),
+ "foo" = filename:basename("usr/foo/", ".erl"),
+ "foo.erl" = filename:basename("usr/foo.erl/", ".erl"),
+ "foo.erl" = filename:basename("usr/foo.erl/", '.erl'),
+ "foo" = filename:basename(["/usr",'/','f','oo'], ".erl"),
+ "foo.erl" = filename:basename(["usr/foo.e",'rl/'], ".erl"),
+ case os:type() of
+ {win32, _} ->
+ "foo" = filename:basename("A:foo", ".erl"),
+ "foo.erl" = filename:basename("a:\\usr\\foo.erl", ".hrl"),
+ "foo.erl" = filename:basename("c:\\usr.hrl\\foo.erl", ".hrl"),
+ "foo" = filename:basename("A:\\usr\\foo", ".hrl");
+ _ ->
+ "strange\\but\\true" =
+ filename:basename("strange\\but\\true.erl", ".erl"),
+ "strange\\but\\true" =
+ filename:basename("strange\\but\\true", ".erl")
+ end,
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dirname(Config) when is_list(Config) ->
case os:type() of
- {win32,_} ->
- "A:/usr" = filename:dirname("A:/usr/foo.erl"),
- "A:usr" = filename:dirname("A:usr/foo.erl"),
- "/usr" = filename:dirname("\\usr\\foo.erl"),
- "/" = filename:dirname("\\usr"),
- "A:" = filename:dirname("A:");
- _ -> true
+ {win32,_} ->
+ "A:/usr" = filename:dirname("A:/usr/foo.erl"),
+ "A:usr" = filename:dirname("A:usr/foo.erl"),
+ "/usr" = filename:dirname("\\usr\\foo.erl"),
+ "/" = filename:dirname("\\usr"),
+ "A:" = filename:dirname("A:");
+ _ -> true
end,
"usr" = filename:dirname("usr///foo.erl"),
"." = filename:dirname("foo.erl"),
@@ -267,23 +263,22 @@ dirname(Config) when is_list(Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
extension(Config) when is_list(Config) ->
- ?line ".erl" = filename:extension("A:/usr/foo.erl"),
- ?line ".erl" = filename:extension("A:/usr/foo.nisse.erl"),
- ?line ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.erl"]),
- ?line ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.e", 'rl']),
- ?line ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.e"|'rl']),
- ?line ".erl" = filename:extension("A:/usr.bar/foo.nisse.erl"),
- ?line "" = filename:extension("A:/usr.bar/foo"),
- ?line "" = filename:extension("A:/usr/foo"),
- ?line case os:type() of
- {win32, _} ->
- ?line "" = filename:extension("A:\\usr\\foo"),
- ?line ".erl" =
- filename:extension("A:/usr.bar/foo.nisse.erl"),
- ?line "" = filename:extension("A:/usr.bar/foo"),
- ok;
- _ -> ok
- end.
+ ".erl" = filename:extension("A:/usr/foo.erl"),
+ ".erl" = filename:extension("A:/usr/foo.nisse.erl"),
+ ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.erl"]),
+ ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.e", 'rl']),
+ ".erl" = filename:extension(["A:/usr/", 'foo.ni', "sse.e"|'rl']),
+ ".erl" = filename:extension("A:/usr.bar/foo.nisse.erl"),
+ "" = filename:extension("A:/usr.bar/foo"),
+ "" = filename:extension("A:/usr/foo"),
+ case os:type() of
+ {win32, _} ->
+ "" = filename:extension("A:\\usr\\foo"),
+ ".erl" = filename:extension("A:/usr.bar/foo.nisse.erl"),
+ "" = filename:extension("A:/usr.bar/foo"),
+ ok;
+ _ -> ok
+ end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -291,8 +286,8 @@ join(Config) when is_list(Config) ->
%% Whenever joining two elements, test the equivalence between
%% join/1 and join/2 (OTP-12158) by using help function
%% filename_join/2.
- ?line "/" = filename:join(["/"]),
- ?line "/" = filename:join(["//"]),
+ "/" = filename:join(["/"]),
+ "/" = filename:join(["//"]),
"usr/foo.erl" = filename_join("usr","foo.erl"),
"/src/foo.erl" = filename_join(usr, "/src/foo.erl"),
"/src/foo.erl" = filename_join("/src/",'foo.erl'),
@@ -300,7 +295,7 @@ join(Config) when is_list(Config) ->
"/src/foo.erl" = filename_join("usr", "/src/foo.erl"),
%% Make sure that redundant slashes work too.
- ?line "a/b/c/d/e/f/g" = filename:join(["a//b/c/////d//e/f/g"]),
+ "a/b/c/d/e/f/g" = filename:join(["a//b/c/////d//e/f/g"]),
"a/b/c/d/e/f/g" = filename_join("a//b/c/", "d//e/f/g"),
"a/b/c/d/e/f/g" = filename_join("a//b/c", "d//e/f/g"),
"/d/e/f/g" = filename_join("a//b/c", "/d//e/f/g"),
@@ -333,30 +328,25 @@ join(Config) when is_list(Config) ->
"/b" = filename_join("/a/","/b/"),
"/a/b" = filename_join("/a/","b/"),
- ?line case os:type() of
- {win32, _} ->
- ?line "d:/" = filename:join(["D:/"]),
- ?line "d:/" = filename:join(["D:\\"]),
- "d:/abc" = filename_join("D:/", "abc"),
- "d:abc" = filename_join("D:", "abc"),
- ?line "a/b/c/d/e/f/g" =
- filename:join(["a//b\\c//\\/\\d/\\e/f\\g"]),
- ?line "a:usr/foo.erl" =
- filename:join(["A:","usr","foo.erl"]),
- ?line "/usr/foo.erl" =
- filename:join(["A:","/usr","foo.erl"]),
- "c:usr" = filename_join("A:","C:usr"),
- "a:usr" = filename_join("A:","usr"),
- "c:/usr" = filename_join("A:", "C:/usr"),
- ?line "c:/usr/foo.erl" =
- filename:join(["A:","C:/usr","foo.erl"]),
- ?line "c:usr/foo.erl" =
- filename:join(["A:","C:usr","foo.erl"]),
- ?line "d:/foo" = filename:join([$D, $:, $/, []], "foo"),
- ok;
- _ ->
- ok
- end.
+ case os:type() of
+ {win32, _} ->
+ "d:/" = filename:join(["D:/"]),
+ "d:/" = filename:join(["D:\\"]),
+ "d:/abc" = filename_join("D:/", "abc"),
+ "d:abc" = filename_join("D:", "abc"),
+ "a/b/c/d/e/f/g" = filename:join(["a//b\\c//\\/\\d/\\e/f\\g"]),
+ "a:usr/foo.erl" = filename:join(["A:","usr","foo.erl"]),
+ "/usr/foo.erl" = filename:join(["A:","/usr","foo.erl"]),
+ "c:usr" = filename_join("A:","C:usr"),
+ "a:usr" = filename_join("A:","usr"),
+ "c:/usr" = filename_join("A:", "C:/usr"),
+ "c:/usr/foo.erl" = filename:join(["A:","C:/usr","foo.erl"]),
+ "c:usr/foo.erl" = filename:join(["A:","C:usr","foo.erl"]),
+ "d:/foo" = filename:join([$D, $:, $/, []], "foo"),
+ ok;
+ _ ->
+ ok
+ end.
%% Make sure join([A,B]) is equivalent to join(A,B) (OTP-12158)
filename_join(A,B) ->
@@ -364,92 +354,92 @@ filename_join(A,B) ->
Res = filename:join([A,B]).
pathtype(Config) when is_list(Config) ->
- ?line relative = filename:pathtype(".."),
- ?line relative = filename:pathtype("foo"),
- ?line relative = filename:pathtype("foo/bar"),
- ?line relative = filename:pathtype('foo/bar'),
- ?line relative = filename:pathtype(['f','oo',"/bar"]),
+ relative = filename:pathtype(".."),
+ relative = filename:pathtype("foo"),
+ relative = filename:pathtype("foo/bar"),
+ relative = filename:pathtype('foo/bar'),
+ relative = filename:pathtype(['f','oo',"/bar"]),
case os:type() of
- {win32, _} ->
- ?line volumerelative = filename:pathtype("/usr/local/bin"),
- ?line volumerelative = filename:pathtype("A:usr/local/bin"),
- ok;
- _ ->
- ?line absolute = filename:pathtype("/"),
- ?line absolute = filename:pathtype("/usr/local/bin"),
- ok
+ {win32, _} ->
+ volumerelative = filename:pathtype("/usr/local/bin"),
+ volumerelative = filename:pathtype("A:usr/local/bin"),
+ ok;
+ _ ->
+ absolute = filename:pathtype("/"),
+ absolute = filename:pathtype("/usr/local/bin"),
+ ok
end.
rootname(Config) when is_list(Config) ->
- ?line "/jam.src/kalle" = filename:rootname("/jam.src/kalle"),
- ?line "/jam.src/foo" = filename:rootname("/jam.src/foo.erl"),
- ?line "/jam.src/foo" = filename:rootname(["/ja",'m.sr',"c/foo.erl"]),
- ?line "/jam.src/foo" = filename:rootname("/jam.src/foo.erl", ".erl"),
- ?line "/jam.src/foo.jam" = filename:rootname("/jam.src/foo.jam", ".erl"),
- ?line "/jam.src/foo.jam" = filename:rootname(["/jam.sr",'c/foo.j',"am"],".erl"),
- ?line "/jam.src/foo.jam" = filename:rootname(["/jam.sr",'c/foo.j'|am],".erl"),
+ "/jam.src/kalle" = filename:rootname("/jam.src/kalle"),
+ "/jam.src/foo" = filename:rootname("/jam.src/foo.erl"),
+ "/jam.src/foo" = filename:rootname(["/ja",'m.sr',"c/foo.erl"]),
+ "/jam.src/foo" = filename:rootname("/jam.src/foo.erl", ".erl"),
+ "/jam.src/foo.jam" = filename:rootname("/jam.src/foo.jam", ".erl"),
+ "/jam.src/foo.jam" = filename:rootname(["/jam.sr",'c/foo.j',"am"],".erl"),
+ "/jam.src/foo.jam" = filename:rootname(["/jam.sr",'c/foo.j'|am],".erl"),
ok.
split(Config) when is_list(Config) ->
- ?line ["/","usr","local","bin"] = filename:split("/usr/local/bin"),
- ?line ["foo","bar"]= filename:split("foo/bar"),
- ?line ["foo", "bar", "hello"]= filename:split("foo////bar//hello"),
- ?line ["foo", "bar", "hello"]= filename:split(["foo//",'//bar//h',"ello"]),
- ?line ["foo", "bar", "hello"]= filename:split(["foo//",'//bar//h'|ello]),
+ ["/","usr","local","bin"] = filename:split("/usr/local/bin"),
+ ["foo","bar"]= filename:split("foo/bar"),
+ ["foo", "bar", "hello"]= filename:split("foo////bar//hello"),
+ ["foo", "bar", "hello"]= filename:split(["foo//",'//bar//h',"ello"]),
+ ["foo", "bar", "hello"]= filename:split(["foo//",'//bar//h'|ello]),
["/"] = filename:split("/"),
[] = filename:split(""),
case os:type() of
- {win32,_} ->
- ?line ["a:/","msdev","include"] =
- filename:split("a:/msdev/include"),
- ?line ["a:/","msdev","include"] =
- filename:split("A:/msdev/include"),
- ?line ["msdev","include"] =
- filename:split("msdev\\include"),
- ?line ["a:/","msdev","include"] =
- filename:split("a:\\msdev\\include"),
- ?line ["a:","msdev","include"] =
- filename:split("a:msdev\\include"),
- ok;
- _ ->
+ {win32,_} ->
+ ["a:/","msdev","include"] =
+ filename:split("a:/msdev/include"),
+ ["a:/","msdev","include"] =
+ filename:split("A:/msdev/include"),
+ ["msdev","include"] =
+ filename:split("msdev\\include"),
+ ["a:/","msdev","include"] =
+ filename:split("a:\\msdev\\include"),
+ ["a:","msdev","include"] =
+ filename:split("a:msdev\\include"),
+ ok;
+ _ ->
ok
end.
t_nativename(Config) when is_list(Config) ->
- ?line "abcedf" = filename:nativename(abcedf),
- ?line "abcedf" = filename:nativename(["abc", "edf"]),
- ?line "abcgluff" = filename:nativename(["abc", gluff]),
+ "abcedf" = filename:nativename(abcedf),
+ "abcedf" = filename:nativename(["abc", "edf"]),
+ "abcgluff" = filename:nativename(["abc", gluff]),
case os:type() of
- {win32, _} ->
- ?line "a:\\temp\\arne.exe" =
- filename:nativename("A:/temp//arne.exe/");
- _ ->
- ?line "/usr/tmp/arne" =
- filename:nativename("/usr/tmp//arne/")
+ {win32, _} ->
+ "a:\\temp\\arne.exe" =
+ filename:nativename("A:/temp//arne.exe/");
+ _ ->
+ "/usr/tmp/arne" =
+ filename:nativename("/usr/tmp//arne/")
end.
find_src(Config) when is_list(Config) ->
- ?line {Source,_} = filename:find_src(file),
- ?line ["file"|_] = lists:reverse(filename:split(Source)),
- ?line {_,_} = filename:find_src(init, [{".","."}, {"ebin","src"}]),
+ {Source,_} = filename:find_src(file),
+ ["file"|_] = lists:reverse(filename:split(Source)),
+ {_,_} = filename:find_src(init, [{".","."}, {"ebin","src"}]),
%% Try to find the source for a preloaded module.
- ?line {error,{preloaded,init}} = filename:find_src(init),
+ {error,{preloaded,init}} = filename:find_src(init),
%% Make sure that find_src works for a slim BEAM file.
OldPath = code:get_path(),
try
- PrivDir = ?config(priv_dir, Config),
- code:add_patha(PrivDir),
- Src = "simple",
- SrcPath = filename:join(PrivDir, Src) ++ ".erl",
- SrcContents = "-module(simple).\n",
- ok = file:write_file(SrcPath, SrcContents),
- {ok,simple} = compile:file(SrcPath, [slim,{outdir,PrivDir}]),
- BeamPath = filename:join(PrivDir, Src),
- {BeamPath,[]} = filename:find_src(simple)
+ PrivDir = proplists:get_value(priv_dir, Config),
+ code:add_patha(PrivDir),
+ Src = "simple",
+ SrcPath = filename:join(PrivDir, Src) ++ ".erl",
+ SrcContents = "-module(simple).\n",
+ ok = file:write_file(SrcPath, SrcContents),
+ {ok,simple} = compile:file(SrcPath, [slim,{outdir,PrivDir}]),
+ BeamPath = filename:join(PrivDir, Src),
+ {BeamPath,[]} = filename:find_src(simple)
after
- code:set_path(OldPath)
+ code:set_path(OldPath)
end,
ok.
@@ -461,58 +451,51 @@ find_src(Config) when is_list(Config) ->
absname_bin(Config) when is_list(Config) ->
case os:type() of
- {win32, _} ->
- ?line [Drive|_] = ?config(priv_dir, Config),
- ?line Temp = filename:join([Drive|":/"], "temp"),
- ?line case file:make_dir(Temp) of
- ok -> ok;
- {error,eexist} -> ok
- end,
- ?line {ok,Cwd} = file:get_cwd(),
- ?line ok = file:set_cwd(Temp),
- ?line <<Drive:8,":/temp/foo">> = filename:absname(<<"foo">>),
- ?line <<Drive:8,":/temp/../ebin">> = filename:absname(<<"../ebin">>),
- ?line <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\src">>),
- ?line <<Drive:8,":/temp/erlang">> = filename:absname(<<Drive:8,":erlang">>),
- ?line <<Drive:8,":/temp/erlang/src">> =
- filename:absname(<<Drive:8,":erlang/src">>),
- ?line <<Drive:8,":/temp/erlang/src">> =
- filename:absname(<<Drive:8,":erlang\\src\\">>),
- ?line <<"a:/erlang">> = filename:absname(<<"a:erlang">>),
-
- ?line file:set_cwd(<<Drive:8,":/">>),
- ?line <<Drive:8,":/foo">> = filename:absname(<<"foo">>),
- ?line <<Drive:8,":/../ebin">> = filename:absname(<<"../ebin">>),
- ?line <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\\\src">>),
- ?line <<Drive:8,":/erlang">> = filename:absname(<<Drive:8,":erlang">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>),
- ?line <<"a:/erlang">> = filename:absname(<<"a:erlang">>),
-
- ?line file:set_cwd(Cwd),
- ok;
- Type ->
- case Type of
- {unix,_} ->
- ?line ok = file:set_cwd(<<"/usr">>),
- ?line <<"/usr/foo">> = filename:absname(<<"foo">>),
- ?line <<"/usr/../ebin">> = filename:absname(<<"../ebin">>);
- {ose,_} ->
- ?line ok = file:set_cwd(<<"/romfs">>),
- ?line <<"/romfs/foo">> = filename:absname(<<"foo">>),
- ?line <<"/romfs/../ebin">> = filename:absname(<<"../ebin">>)
- end,
-
- ?line file:set_cwd(<<"/">>),
- ?line <<"/foo">> = filename:absname(<<"foo">>),
- ?line <<"/../ebin">> = filename:absname(<<"../ebin">>),
- ?line <<"/erlang">> = filename:absname(<<"/erlang">>),
- ?line <<"/erlang/src">> = filename:absname(<<"/erlang/src">>),
- ?line <<"/erlang/src">> = filename:absname(<<"/erlang///src">>),
- ok
+ {win32, _} ->
+ [Drive|_] = proplists:get_value(priv_dir, Config),
+ Temp = filename:join([Drive|":/"], "temp"),
+ case file:make_dir(Temp) of
+ ok -> ok;
+ {error,eexist} -> ok
+ end,
+ {ok,Cwd} = file:get_cwd(),
+ ok = file:set_cwd(Temp),
+ <<Drive:8,":/temp/foo">> = filename:absname(<<"foo">>),
+ <<Drive:8,":/temp/../ebin">> = filename:absname(<<"../ebin">>),
+ <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\src">>),
+ <<Drive:8,":/temp/erlang">> = filename:absname(<<Drive:8,":erlang">>),
+ <<Drive:8,":/temp/erlang/src">> =
+ filename:absname(<<Drive:8,":erlang/src">>),
+ <<Drive:8,":/temp/erlang/src">> =
+ filename:absname(<<Drive:8,":erlang\\src\\">>),
+ <<"a:/erlang">> = filename:absname(<<"a:erlang">>),
+
+ file:set_cwd(<<Drive:8,":/">>),
+ <<Drive:8,":/foo">> = filename:absname(<<"foo">>),
+ <<Drive:8,":/../ebin">> = filename:absname(<<"../ebin">>),
+ <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\\\src">>),
+ <<Drive:8,":/erlang">> = filename:absname(<<Drive:8,":erlang">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>),
+ <<"a:/erlang">> = filename:absname(<<"a:erlang">>),
+
+ file:set_cwd(Cwd),
+ ok;
+ {unix,_} ->
+ ok = file:set_cwd(<<"/usr">>),
+ <<"/usr/foo">> = filename:absname(<<"foo">>),
+ <<"/usr/../ebin">> = filename:absname(<<"../ebin">>),
+
+ file:set_cwd(<<"/">>),
+ <<"/foo">> = filename:absname(<<"foo">>),
+ <<"/../ebin">> = filename:absname(<<"../ebin">>),
+ <<"/erlang">> = filename:absname(<<"/erlang">>),
+ <<"/erlang/src">> = filename:absname(<<"/erlang/src">>),
+ <<"/erlang/src">> = filename:absname(<<"/erlang///src">>),
+ ok
end.
@@ -520,108 +503,100 @@ absname_bin(Config) when is_list(Config) ->
absname_bin_2(Config) when is_list(Config) ->
case os:type() of
- {win32, _} ->
- ?line [Drive|_] = ?config(priv_dir, Config),
- ?line <<Drive:8,":/temp/foo">> = filename:absname(<<"foo">>, <<Drive:8,":/temp">>),
- ?line <<Drive:8,":/temp/../ebin">> = filename:absname(<<"../ebin">>,
- <<Drive:8,":/temp">>),
- ?line <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>, <<Drive:8,":/temp">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>,
- <<Drive:8,":/temp">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\src">>,
- <<Drive:8,":/temp">>),
- ?line <<Drive:8,":/temp/erlang">> = filename:absname(<<Drive:8,":erlang">>,
- <<Drive:8,":/temp">>),
- ?line <<Drive:8,":/temp/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>,
- <<Drive:8,":/temp">>),
- ?line <<Drive:8,":/temp/erlang/src">> =
- filename:absname(<<Drive:8,":erlang\\src\\">>, <<Drive:8,":/temp">>),
- ?line <<"a:/erlang">> = filename:absname(<<"a:erlang">>, <<Drive:8,":/temp">>),
-
- ?line file:set_cwd(<<Drive:8,":/">>),
- ?line <<Drive:8,":/foo">> = filename:absname(foo, <<Drive:8,":/">>),
- ?line <<Drive:8,":/foo">> = filename:absname(<<"foo">>, <<Drive:8,":/">>),
- ?line <<Drive:8,":/../ebin">> = filename:absname(<<"../ebin">>, <<Drive:8,":/">>),
- ?line <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>, <<Drive:8,":/">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>,
- <<Drive:8,":/">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\\\src">>,
- <<Drive:8,":/">>),
- ?line <<Drive:8,":/erlang">> = filename:absname(<<Drive:8,":erlang">>,
- <<Drive:8,":/">>),
- ?line <<Drive:8,":/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>,
- <<Drive:8,":/">>),
- ?line <<"a:/erlang">> = filename:absname(<<"a:erlang">>, <<Drive:8,":/">>),
-
- ok;
- _ ->
- ?line <<"/usr/foo">> = filename:absname(<<"foo">>, <<"/usr">>),
- ?line <<"/usr/../ebin">> = filename:absname(<<"../ebin">>, <<"/usr">>),
-
- ?line <<"/foo">> = filename:absname(<<"foo">>, <<"/">>),
- ?line <<"/../ebin">> = filename:absname(<<"../ebin">>, <<"/">>),
- ?line <<"/erlang">> = filename:absname(<<"/erlang">>, <<"/">>),
- ?line <<"/erlang/src">> = filename:absname(<<"/erlang/src">>, <<"/">>),
- ?line <<"/erlang/src">> = filename:absname(<<"/erlang///src">>, <<"/">>),
- ok
+ {win32, _} ->
+ [Drive|_] = proplists:get_value(priv_dir, Config),
+ <<Drive:8,":/temp/foo">> = filename:absname(<<"foo">>, <<Drive:8,":/temp">>),
+ <<Drive:8,":/temp/../ebin">> = filename:absname(<<"../ebin">>,
+ <<Drive:8,":/temp">>),
+ <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>, <<Drive:8,":/temp">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>,
+ <<Drive:8,":/temp">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\src">>,
+ <<Drive:8,":/temp">>),
+ <<Drive:8,":/temp/erlang">> = filename:absname(<<Drive:8,":erlang">>,
+ <<Drive:8,":/temp">>),
+ <<Drive:8,":/temp/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>,
+ <<Drive:8,":/temp">>),
+ <<Drive:8,":/temp/erlang/src">> =
+ filename:absname(<<Drive:8,":erlang\\src\\">>, <<Drive:8,":/temp">>),
+ <<"a:/erlang">> = filename:absname(<<"a:erlang">>, <<Drive:8,":/temp">>),
+
+ file:set_cwd(<<Drive:8,":/">>),
+ <<Drive:8,":/foo">> = filename:absname(foo, <<Drive:8,":/">>),
+ <<Drive:8,":/foo">> = filename:absname(<<"foo">>, <<Drive:8,":/">>),
+ <<Drive:8,":/../ebin">> = filename:absname(<<"../ebin">>, <<Drive:8,":/">>),
+ <<Drive:8,":/erlang">> = filename:absname(<<"/erlang">>, <<Drive:8,":/">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<"/erlang/src">>,
+ <<Drive:8,":/">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<"\\erlang\\\\src">>,
+ <<Drive:8,":/">>),
+ <<Drive:8,":/erlang">> = filename:absname(<<Drive:8,":erlang">>,
+ <<Drive:8,":/">>),
+ <<Drive:8,":/erlang/src">> = filename:absname(<<Drive:8,":erlang/src">>,
+ <<Drive:8,":/">>),
+ <<"a:/erlang">> = filename:absname(<<"a:erlang">>, <<Drive:8,":/">>),
+
+ ok;
+ _ ->
+ <<"/usr/foo">> = filename:absname(<<"foo">>, <<"/usr">>),
+ <<"/usr/../ebin">> = filename:absname(<<"../ebin">>, <<"/usr">>),
+ <<"/foo">> = filename:absname(<<"foo">>, <<"/">>),
+ <<"/../ebin">> = filename:absname(<<"../ebin">>, <<"/">>),
+ <<"/erlang">> = filename:absname(<<"/erlang">>, <<"/">>),
+ <<"/erlang/src">> = filename:absname(<<"/erlang/src">>, <<"/">>),
+ <<"/erlang/src">> = filename:absname(<<"/erlang///src">>, <<"/">>),
+ ok
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
basename_bin_1(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line <<".">> = filename:basename(<<".">>),
- ?line <<"foo">> = filename:basename(<<"foo">>),
- ?line <<"foo">> = filename:basename(<<"/usr/foo">>),
- ?line <<"foo.erl">> = filename:basename(<<"A:usr/foo.erl">>),
- ?line case os:type() of
- {win32, _} ->
- ?line <<"foo">> = filename:basename(<<"A:\\usr\\foo">>),
- ?line <<"foo">> = filename:basename(<<"A:foo">>);
- _ ->
- ?line <<"strange\\but\\true">> =
- filename:basename(<<"strange\\but\\true">>)
- end,
- ?line test_server:timetrap_cancel(Dog),
+ <<".">> = filename:basename(<<".">>),
+ <<"foo">> = filename:basename(<<"foo">>),
+ <<"foo">> = filename:basename(<<"/usr/foo">>),
+ <<"foo.erl">> = filename:basename(<<"A:usr/foo.erl">>),
+ case os:type() of
+ {win32, _} ->
+ <<"foo">> = filename:basename(<<"A:\\usr\\foo">>),
+ <<"foo">> = filename:basename(<<"A:foo">>);
+ _ ->
+ <<"strange\\but\\true">> = filename:basename(<<"strange\\but\\true">>)
+ end,
ok.
basename_bin_2(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line <<".">> = filename:basename(<<".">>, <<".erl">>),
- ?line <<"foo">> = filename:basename(<<"foo.erl">>, <<".erl">>),
- ?line <<"foo.erl">> = filename:basename(<<"/usr/foo.erl">>, <<".hrl">>),
- ?line <<"foo.erl">> = filename:basename(<<"/usr.hrl/foo.erl">>, <<".hrl">>),
- ?line <<"foo">> = filename:basename(<<"/usr.hrl/foo">>, <<".hrl">>),
- ?line <<"foo">> = filename:basename(<<"usr/foo/">>, <<".erl">>),
- ?line <<"foo.erl">> = filename:basename(<<"usr/foo.erl/">>, <<".erl">>),
- ?line case os:type() of
- {win32, _} ->
- ?line <<"foo">> = filename:basename(<<"A:foo">>, <<".erl">>),
- ?line <<"foo.erl">> = filename:basename(<<"a:\\usr\\foo.erl">>,
- <<".hrl">>),
- ?line <<"foo.erl">> = filename:basename(<<"c:\\usr.hrl\\foo.erl">>,
- <<".hrl">>),
- ?line <<"foo">> = filename:basename(<<"A:\\usr\\foo">>, <<".hrl">>);
- _ ->
- ?line <<"strange\\but\\true">> =
- filename:basename(<<"strange\\but\\true.erl">>, <<".erl">>),
- ?line <<"strange\\but\\true">> =
- filename:basename(<<"strange\\but\\true">>, <<".erl">>)
- end,
- ?line test_server:timetrap_cancel(Dog),
+ <<".">> = filename:basename(<<".">>, <<".erl">>),
+ <<"foo">> = filename:basename(<<"foo.erl">>, <<".erl">>),
+ <<"foo.erl">> = filename:basename(<<"/usr/foo.erl">>, <<".hrl">>),
+ <<"foo.erl">> = filename:basename(<<"/usr.hrl/foo.erl">>, <<".hrl">>),
+ <<"foo">> = filename:basename(<<"/usr.hrl/foo">>, <<".hrl">>),
+ <<"foo">> = filename:basename(<<"usr/foo/">>, <<".erl">>),
+ <<"foo.erl">> = filename:basename(<<"usr/foo.erl/">>, <<".erl">>),
+ case os:type() of
+ {win32, _} ->
+ <<"foo">> = filename:basename(<<"A:foo">>, <<".erl">>),
+ <<"foo.erl">> = filename:basename(<<"a:\\usr\\foo.erl">>, <<".hrl">>),
+ <<"foo.erl">> = filename:basename(<<"c:\\usr.hrl\\foo.erl">>, <<".hrl">>),
+ <<"foo">> = filename:basename(<<"A:\\usr\\foo">>, <<".hrl">>);
+ _ ->
+ <<"strange\\but\\true">> =
+ filename:basename(<<"strange\\but\\true.erl">>, <<".erl">>),
+ <<"strange\\but\\true">> =
+ filename:basename(<<"strange\\but\\true">>, <<".erl">>)
+ end,
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dirname_bin(Config) when is_list(Config) ->
case os:type() of
- {win32,_} ->
- <<"A:/usr">> = filename:dirname(<<"A:/usr/foo.erl">>),
- <<"A:usr">> = filename:dirname(<<"A:usr/foo.erl">>),
- <<"/usr">> = filename:dirname(<<"\\usr\\foo.erl">>),
- <<"/">> = filename:dirname(<<"\\usr">>),
- <<"A:">> = filename:dirname(<<"A:">>);
- _ -> true
+ {win32,_} ->
+ <<"A:/usr">> = filename:dirname(<<"A:/usr/foo.erl">>),
+ <<"A:usr">> = filename:dirname(<<"A:usr/foo.erl">>),
+ <<"/usr">> = filename:dirname(<<"\\usr\\foo.erl">>),
+ <<"/">> = filename:dirname(<<"\\usr">>),
+ <<"A:">> = filename:dirname(<<"A:">>);
+ _ -> true
end,
<<"usr">> = filename:dirname(<<"usr///foo.erl">>),
<<".">> = filename:dirname(<<"foo.erl">>),
@@ -629,7 +604,6 @@ dirname_bin(Config) when is_list(Config) ->
<<"/">> = filename:dirname(<<"/">>),
<<"/">> = filename:dirname(<<"/usr">>),
ok.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -641,10 +615,9 @@ extension_bin(Config) when is_list(Config) ->
<<"">> = filename:extension(<<"A:/usr/foo">>),
case os:type() of
{win32, _} ->
- ?line <<"">> = filename:extension(<<"A:\\usr\\foo">>),
- ?line <<".erl">> =
- filename:extension(<<"A:/usr.bar/foo.nisse.erl">>),
- ?line <<"">> = filename:extension(<<"A:/usr.bar/foo">>),
+ <<"">> = filename:extension(<<"A:\\usr\\foo">>),
+ <<".erl">> = filename:extension(<<"A:/usr.bar/foo.nisse.erl">>),
+ <<"">> = filename:extension(<<"A:/usr.bar/foo">>),
ok;
_ -> ok
end.
@@ -652,22 +625,22 @@ extension_bin(Config) when is_list(Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
join_bin(Config) when is_list(Config) ->
- ?line <<"/">> = filename:join([<<"/">>]),
- ?line <<"/">> = filename:join([<<"//">>]),
- ?line <<"usr/foo.erl">> = filename:join(<<"usr">>,<<"foo.erl">>),
- ?line <<"/src/foo.erl">> = filename:join(usr, <<"/src/foo.erl">>),
- ?line <<"/src/foo.erl">> = filename:join([<<"/src/">>,'foo.erl']),
- ?line <<"/src/foo.erl">> = filename:join(<<"usr">>, ["/sr", 'c/foo.erl']),
- ?line <<"/src/foo.erl">> = filename:join(<<"usr">>, <<"/src/foo.erl">>),
+ <<"/">> = filename:join([<<"/">>]),
+ <<"/">> = filename:join([<<"//">>]),
+ <<"usr/foo.erl">> = filename:join(<<"usr">>,<<"foo.erl">>),
+ <<"/src/foo.erl">> = filename:join(usr, <<"/src/foo.erl">>),
+ <<"/src/foo.erl">> = filename:join([<<"/src/">>,'foo.erl']),
+ <<"/src/foo.erl">> = filename:join(<<"usr">>, ["/sr", 'c/foo.erl']),
+ <<"/src/foo.erl">> = filename:join(<<"usr">>, <<"/src/foo.erl">>),
%% Make sure that redundant slashes work too.
- ?line <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c/////d//e/f/g">>]),
- ?line <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c/">>, <<"d//e/f/g">>]),
- ?line <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"d//e/f/g">>]),
- ?line <<"/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"/d//e/f/g">>]),
- ?line <<"/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"//d//e/f/g">>]),
+ <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c/////d//e/f/g">>]),
+ <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c/">>, <<"d//e/f/g">>]),
+ <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"d//e/f/g">>]),
+ <<"/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"/d//e/f/g">>]),
+ <<"/d/e/f/g">> = filename:join([<<"a//b/c">>, <<"//d//e/f/g">>]),
- ?line <<"foo/bar">> = filename:join([$f,$o,$o,$/,[]], <<"bar">>),
+ <<"foo/bar">> = filename:join([$f,$o,$o,$/,[]], <<"bar">>),
%% Single dots - should be removed if in the middle of the path,
%% but not at the end of the path.
@@ -716,30 +689,25 @@ join_bin(Config) when is_list(Config) ->
<<"/a/b">> = filename:join([<<"/a/">>,<<"b/">>]),
<<"/a/b">> = filename:join(<<"/a/">>,<<"b/">>),
- ?line case os:type() of
- {win32, _} ->
- ?line <<"d:/">> = filename:join([<<"D:/">>]),
- ?line <<"d:/">> = filename:join([<<"D:\\">>]),
- ?line <<"d:/abc">> = filename:join([<<"D:/">>, <<"abc">>]),
- ?line <<"d:abc">> = filename:join([<<"D:">>, <<"abc">>]),
- ?line <<"a/b/c/d/e/f/g">> =
- filename:join([<<"a//b\\c//\\/\\d/\\e/f\\g">>]),
- ?line <<"a:usr/foo.erl">> =
- filename:join([<<"A:">>,<<"usr">>,<<"foo.erl">>]),
- ?line <<"/usr/foo.erl">> =
- filename:join([<<"A:">>,<<"/usr">>,<<"foo.erl">>]),
- ?line <<"c:usr">> = filename:join(<<"A:">>,<<"C:usr">>),
- ?line <<"a:usr">> = filename:join(<<"A:">>,<<"usr">>),
- ?line <<"c:/usr">> = filename:join(<<"A:">>, <<"C:/usr">>),
- ?line <<"c:/usr/foo.erl">> =
- filename:join([<<"A:">>,<<"C:/usr">>,<<"foo.erl">>]),
- ?line <<"c:usr/foo.erl">> =
- filename:join([<<"A:">>,<<"C:usr">>,<<"foo.erl">>]),
- ?line <<"d:/foo">> = filename:join([$D, $:, $/, []], <<"foo">>),
- ok;
- _ ->
- ok
- end.
+ case os:type() of
+ {win32, _} ->
+ <<"d:/">> = filename:join([<<"D:/">>]),
+ <<"d:/">> = filename:join([<<"D:\\">>]),
+ <<"d:/abc">> = filename:join([<<"D:/">>, <<"abc">>]),
+ <<"d:abc">> = filename:join([<<"D:">>, <<"abc">>]),
+ <<"a/b/c/d/e/f/g">> = filename:join([<<"a//b\\c//\\/\\d/\\e/f\\g">>]),
+ <<"a:usr/foo.erl">> = filename:join([<<"A:">>,<<"usr">>,<<"foo.erl">>]),
+ <<"/usr/foo.erl">> = filename:join([<<"A:">>,<<"/usr">>,<<"foo.erl">>]),
+ <<"c:usr">> = filename:join(<<"A:">>,<<"C:usr">>),
+ <<"a:usr">> = filename:join(<<"A:">>,<<"usr">>),
+ <<"c:/usr">> = filename:join(<<"A:">>, <<"C:/usr">>),
+ <<"c:/usr/foo.erl">> = filename:join([<<"A:">>,<<"C:/usr">>,<<"foo.erl">>]),
+ <<"c:usr/foo.erl">> = filename:join([<<"A:">>,<<"C:usr">>,<<"foo.erl">>]),
+ <<"d:/foo">> = filename:join([$D, $:, $/, []], <<"foo">>),
+ ok;
+ _ ->
+ ok
+ end.
pathtype_bin(Config) when is_list(Config) ->
relative = filename:pathtype(<<"..">>),
@@ -747,14 +715,14 @@ pathtype_bin(Config) when is_list(Config) ->
relative = filename:pathtype(<<"foo/bar">>),
relative = filename:pathtype('foo/bar'),
case os:type() of
- {win32, _} ->
- volumerelative = filename:pathtype(<<"/usr/local/bin">>),
- volumerelative = filename:pathtype(<<"A:usr/local/bin">>),
- ok;
- _ ->
- absolute = filename:pathtype(<<"/">>),
- absolute = filename:pathtype(<<"/usr/local/bin">>),
- ok
+ {win32, _} ->
+ volumerelative = filename:pathtype(<<"/usr/local/bin">>),
+ volumerelative = filename:pathtype(<<"A:usr/local/bin">>),
+ ok;
+ _ ->
+ absolute = filename:pathtype(<<"/">>),
+ absolute = filename:pathtype(<<"/usr/local/bin">>),
+ ok
end.
rootname_bin(Config) when is_list(Config) ->
@@ -773,29 +741,204 @@ split_bin(Config) when is_list(Config) ->
[<<"/">>] = filename:split(<<"/">>),
[] = filename:split(<<"">>),
case os:type() of
- {win32,_} ->
- [<<"a:/">>,<<"msdev">>,<<"include">>] =
- filename:split(<<"a:/msdev/include">>),
- [<<"a:/">>,<<"msdev">>,<<"include">>] =
- filename:split(<<"A:/msdev/include">>),
- [<<"msdev">>,<<"include">>] =
- filename:split(<<"msdev\\include">>),
- [<<"a:/">>,<<"msdev">>,<<"include">>] =
- filename:split(<<"a:\\msdev\\include">>),
- [<<"a:">>,<<"msdev">>,<<"include">>] =
- filename:split(<<"a:msdev\\include">>),
- ok;
- _ ->
- ok
+ {win32,_} ->
+ [<<"a:/">>,<<"msdev">>,<<"include">>] =
+ filename:split(<<"a:/msdev/include">>),
+ [<<"a:/">>,<<"msdev">>,<<"include">>] =
+ filename:split(<<"A:/msdev/include">>),
+ [<<"msdev">>,<<"include">>] =
+ filename:split(<<"msdev\\include">>),
+ [<<"a:/">>,<<"msdev">>,<<"include">>] =
+ filename:split(<<"a:\\msdev\\include">>),
+ [<<"a:">>,<<"msdev">>,<<"include">>] =
+ filename:split(<<"a:msdev\\include">>),
+ ok;
+ _ ->
+ ok
end.
t_nativename_bin(Config) when is_list(Config) ->
- ?line <<"abcedf">> = filename:nativename(<<"abcedf">>),
+ <<"abcedf">> = filename:nativename(<<"abcedf">>),
+ case os:type() of
+ {win32, _} ->
+ <<"a:\\temp\\arne.exe">> =
+ filename:nativename(<<"A:/temp//arne.exe/">>);
+ _ ->
+ <<"/usr/tmp/arne">> =
+ filename:nativename(<<"/usr/tmp//arne/">>)
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% basedirs
+t_basedir_api(Config) when is_list(Config) ->
+ true = is_list(filename:basedir(site_data, "My App")),
+ true = is_list(filename:basedir(site_config, "My App")),
+ true = is_list(filename:basedir(user_data, "My App")),
+ true = is_list(filename:basedir(user_log, "My App")),
+ true = is_list(filename:basedir(user_config, "My App")),
+ true = is_list(filename:basedir(user_cache, "My App")),
+
+ true = is_list(filename:basedir(site_data, <<"My App">>)),
+ true = is_list(filename:basedir(site_config, <<"My App">>)),
+ true = is_binary(filename:basedir(user_data, <<"My App">>)),
+ true = is_binary(filename:basedir(user_log, <<"My App">>)),
+ true = is_binary(filename:basedir(user_config, <<"My App">>)),
+ true = is_binary(filename:basedir(user_cache, <<"My App">>)),
+
+ %% simulate for windows
+ case os:type() of
+ {win32,_} -> ok;
+ _ ->
+ os:putenv("APPDATA", "C:\\Documents and Settings\\otptest\\Application Data")
+ end,
+
+ true = is_list(filename:basedir(site_data, "My App", #{})),
+ true = is_list(filename:basedir(site_config, "My App", #{os=>linux})),
+ true = is_list(filename:basedir(user_data, "My App", #{os=>darwin})),
+ true = is_list(filename:basedir(user_log, "My App", #{os=>windows})),
+ true = is_list(filename:basedir(user_config, "My App",#{author=>"Erl"})),
+ true = is_list(filename:basedir(user_config, "My App",#{os=>darwin,
+ author=>"Erl"})),
+ true = is_list(filename:basedir(user_config, "My App",#{os=>linux,
+ author=>"Erl"})),
+ true = is_list(filename:basedir(user_cache, "My App",#{os=>windows,
+ author=>"Erl"})),
+ true = is_list(filename:basedir(user_config, "My App",#{os=>darwin,
+ author=>"Erla",
+ version=>"1.0"})),
+ true = is_list(filename:basedir(user_config, "My App",#{os=>linux,
+ version=>"2.0.1",
+ author=>"Erl"})),
+ true = is_list(filename:basedir(user_cache, "My App",#{os=>windows,
+ version=>"3.1.2",
+ author=>"Erl"})),
+ true = is_binary(filename:basedir(user_config, "My App",#{os=>darwin,
+ author=>"Erla",
+ version=><<"1.0">>})),
+ true = is_binary(filename:basedir(user_config, "My App",#{os=>windows,
+ version=>"2.0.1",
+ author=><<"Erl">>})),
+ true = is_binary(filename:basedir(user_cache, "My App",#{os=>linux,
+ version=><<"3.1.2">>,
+ author=>"Erl"})),
+ %% simulate for windows
+ case os:type() of
+ {win32,_} -> ok;
+ _ -> os:unsetenv("APPDATA")
+ end,
+
+ {'EXIT', _} = (catch filename:basedir(wrong_config, "My App")),
+ {'EXIT', _} = (catch filename:basedir(user_cache, {bad,name})),
+ {'EXIT', _} = (catch filename:basedir(user_cache, "My App", badopts)),
+ {'EXIT', _} = (catch filename:basedir(user_cache, "My App", [])),
+ ok.
+
+t_basedir_windows(Config) when is_list(Config) ->
+ Types = [user_data,user_log,user_config,user_cache],
case os:type() of
- {win32, _} ->
- ?line <<"a:\\temp\\arne.exe">> =
- filename:nativename(<<"A:/temp//arne.exe/">>);
- _ ->
- ?line <<"/usr/tmp/arne">> =
- filename:nativename(<<"/usr/tmp//arne/">>)
+ {win32,_} ->
+ ok = check_basedir_windows(Types, #{});
+ _ ->
+ %% Windows 7 and beyond
+ os:putenv("APPDATA", "C:\\Users\\otptest\\AppData\\Roaming"),
+ os:putenv("LOCALAPPDATA", "C:\\Users\\otptest\\AppData\\Local"),
+ io:format("APPDATA ~p~n", [os:getenv("APPDATA")]),
+ io:format("LOCALAPPDATA ~p~n", [os:getenv("LOCALAPPDATA")]),
+ ok = check_basedir_windows(Types,#{os=>windows}),
+ %% Windows XP
+ os:unsetenv("LOCALAPPDATA"),
+ os:putenv("APPDATA", "C:\\Documents and Settings\\otptest\\Application Data"),
+ io:format("APPDATA ~p~n", [os:getenv("APPDATA")]),
+ io:format("APPLOCALDATA ~p~n", [os:getenv("APPLOCALDATA")]),
+ ok = check_basedir_windows(Types,#{os=>windows}),
+ os:unsetenv("APPDATA")
+ end,
+ ok.
+
+check_basedir_windows([],_) -> ok;
+check_basedir_windows([Type|Types],Opt) ->
+ Name = "Some Application",
+ io:format("type: ~p~n", [Type]),
+ ok = check_basedir_windows_path(Type,
+ [Name],
+ filename:basedir(Type, Name, Opt)),
+ ok = check_basedir_windows_path(Type,
+ ["Erl",Name],
+ filename:basedir(Type, Name, Opt#{author=>"Erl"})),
+ ok = check_basedir_windows_path(Type,
+ [Name,"1.0"],
+ filename:basedir(Type, Name, Opt#{version=>"1.0"})),
+ ok = check_basedir_windows_path(Type,
+ ["Erl",Name,"1.0"],
+ filename:basedir(Type, Name, Opt#{author=>"Erl",
+ version=>"1.0"})),
+ check_basedir_windows(Types, Opt).
+
+check_basedir_windows_path(Type,Check0,Basedir) ->
+ BDR = lists:reverse(filename:split(Basedir)),
+ Check = lists:reverse(Check0),
+ io:format("~w: ~p ~p~n", [Type,Check,BDR]),
+ case Type of
+ user_log -> check_basedir_windows_path_split(["Logs"|Check],BDR);
+ user_cache -> check_basedir_windows_path_split(["Cache"|Check],BDR);
+ _ -> check_basedir_windows_path_split(Check,BDR)
+ end.
+
+check_basedir_windows_path_split([],_) -> ok;
+check_basedir_windows_path_split([Same|Check],[Same|BDR]) ->
+ check_basedir_windows_path_split(Check,BDR).
+
+
+t_basedir_xdg(Config) when is_list(Config) ->
+ check_basedir_xdg([user_data,user_log,user_config,user_cache,
+ site_data,site_config]),
+ ok.
+
+check_basedir_xdg([]) -> ok;
+check_basedir_xdg([Type|Types]) ->
+ Name = "some_app",
+ Opt = #{os=>linux},
+ Key = basedir_xdg_env(Type),
+ io:format("type: ~p~n", [Type]),
+ Home = os:getenv("HOME"),
+ NDir = "/some/absolute/path",
+ DefPath = basedir_xdg_def(Type,Home,Name),
+ EnvPath = case Type of
+ user_log -> filename:join([NDir,Name,"log"]);
+ site_data -> [filename:join([NDir,Name])];
+ site_config -> [filename:join([NDir,Name])];
+ _ -> filename:join([NDir,Name])
+ end,
+ os:unsetenv(Key),
+ ok = check_basedir(Type, DefPath, filename:basedir(Type, Name, Opt)),
+ os:putenv(Key, NDir),
+ ok = check_basedir(Type, EnvPath, filename:basedir(Type, Name, Opt)),
+ os:unsetenv(Key),
+ ok = check_basedir(Type, DefPath, filename:basedir(Type, Name, Opt)),
+ check_basedir_xdg(Types).
+
+check_basedir(Type, Path, Basedir) ->
+ io:format("~w: ~p = ~p~n", [Type,Path,Basedir]),
+ Path = Basedir,
+ ok.
+
+basedir_xdg_env(Type) ->
+ case Type of
+ user_data -> "XDG_DATA_HOME";
+ user_config -> "XDG_CONFIG_HOME";
+ user_cache -> "XDG_CACHE_HOME";
+ user_log -> "XDG_CACHE_HOME";
+ site_data -> "XDG_DATA_DIRS";
+ site_config -> "XDG_CONFIG_DIRS"
+ end.
+
+basedir_xdg_def(Type,Home,Name) ->
+ case Type of
+ user_data -> filename:join([Home,".local","share",Name]);
+ user_config -> filename:join([Home,".config",Name]);
+ user_cache -> filename:join([Home,".cache",Name]);
+ user_log -> filename:join([Home,".cache",Name,"log"]);
+ site_data -> [filename:join([Dir,Name]) ||
+ Dir <- ["/usr/local/share/","/usr/share/"]];
+ site_config -> [filename:join(["/etc/xdg",Name])]
end.
diff --git a/lib/stdlib/test/fixtable_SUITE.erl b/lib/stdlib/test/fixtable_SUITE.erl
index cf716032a1..736e643974 100644
--- a/lib/stdlib/test/fixtable_SUITE.erl
+++ b/lib/stdlib/test/fixtable_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -33,7 +33,9 @@
%%% Internal exports
-export([command_loop/0,start_commander/0]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[multiple_fixes, multiple_processes,
@@ -56,7 +58,7 @@ end_per_group(_GroupName, Config) ->
Config.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%% I wrote this thinking I would use more than one temporary at a time, but
%%% I wasn't... Well, maybe in the future...
@@ -68,14 +70,11 @@ end_per_group(_GroupName, Config) ->
-define(HELPER_NODE, (atom_to_list(?MODULE) ++ "_helper1")).
init_per_testcase(_Func, Config) ->
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
file:make_dir(PrivDir),
- Dog=test_server:timetrap(test_server:seconds(60)),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
lists:foreach(fun(X) ->
(catch dets:close(X)),
(catch file:delete(dets_filename(X,Config)))
@@ -98,302 +97,280 @@ show(Term, Line) ->
-endif.
-fixbag(doc) ->
- ["Check for bug OTP-5087, safe_fixtable for bags could give "
- "incorrect lookups"];
-fixbag(suite) ->
- [];
+%% Check for bug OTP-5087; safe_fixtable for bags could give incorrect
+%% lookups.
fixbag(Config) when is_list(Config) ->
- ?line T = ets:new(x,[bag]),
- ?line ets:insert(T,{a,1}),
- ?line ets:insert(T,{a,2}),
- ?line ets:safe_fixtable(T,true),
- ?line ets:match_delete(T,{a,2}),
- ?line ets:insert(T,{a,3}),
- ?line Res = ets:lookup(T,a),
- ?line ets:safe_fixtable(T,false),
- ?line Res = ets:lookup(T,a),
+ T = ets:new(x,[bag]),
+ ets:insert(T,{a,1}),
+ ets:insert(T,{a,2}),
+ ets:safe_fixtable(T,true),
+ ets:match_delete(T,{a,2}),
+ ets:insert(T,{a,3}),
+ Res = ets:lookup(T,a),
+ ets:safe_fixtable(T,false),
+ Res = ets:lookup(T,a),
ok.
-insert_same_key(doc) ->
- ["Check correct behaviour if a key is deleted and reinserted during fixation."];
-insert_same_key(suite) ->
- [];
+%% Check correct behaviour if a key is deleted and reinserted during
+%% fixation.
insert_same_key(Config) when is_list(Config) ->
- ?line {ok,Dets1} = dets:open_file(?DETS_TMP1,
- [{file, dets_filename(?DETS_TMP1,Config)}]),
- ?line Ets1 = ets:new(ets,[]),
- ?line insert_same_key(Dets1,dets,Config),
- ?line insert_same_key(Ets1,ets,Config),
- ?line ets:insert(Ets1,{1,2}),
- ?line 1 = ets:info(Ets1,size),
- ?line dets:insert(Dets1,{1,2}),
- ?line 1 = dets:info(Dets1,size),
- ?line dets:close(Dets1),
- ?line (catch file:delete(dets_filename(Dets1,Config))),
- ?line ets:delete(Ets1),
- ?line {ok,Dets2} = dets:open_file(?DETS_TMP1,
- [{type,bag},{file, dets_filename(?DETS_TMP1,Config)}]),
- ?line Ets2 = ets:new(ets,[bag]),
- ?line insert_same_key(Dets2,dets,Config),
- ?line insert_same_key(Ets2,ets,Config),
- ?line ets:insert(Ets2,{1,2}),
- ?line 2 = ets:info(Ets2,size),
- ?line ets:insert(Ets2,{1,2}),
- ?line 2 = ets:info(Ets2,size),
- ?line dets:insert(Dets2,{1,2}),
- ?line 2 = dets:info(Dets2,size),
- ?line dets:insert(Dets2,{1,2}),
- ?line 2 = dets:info(Dets2,size),
- ?line dets:close(Dets2),
- ?line (catch file:delete(dets_filename(Dets2,Config))),
- ?line ets:delete(Ets2),
- ?line {ok,Dets3} = dets:open_file(?DETS_TMP1,
- [{type,duplicate_bag},
- {file, dets_filename(?DETS_TMP1,Config)}]),
- ?line Ets3 = ets:new(ets,[duplicate_bag]),
- ?line insert_same_key(Dets3,dets,Config),
- ?line insert_same_key(Ets3,ets,Config),
- ?line ets:insert(Ets3,{1,2}),
- ?line 2 = ets:info(Ets3,size),
- ?line ets:insert(Ets3,{1,2}),
- ?line 3 = ets:info(Ets3,size),
- ?line dets:insert(Dets3,{1,2}),
- ?line 2 = dets:info(Dets3,size),
- ?line dets:insert(Dets3,{1,2}),
- ?line 3 = dets:info(Dets3,size),
- ?line dets:close(Dets3),
- ?line (catch file:delete(dets_filename(Dets3,Config))),
- ?line ets:delete(Ets3),
+ {ok,Dets1} = dets:open_file(?DETS_TMP1,
+ [{file, dets_filename(?DETS_TMP1,Config)}]),
+ Ets1 = ets:new(ets,[]),
+ insert_same_key(Dets1,dets,Config),
+ insert_same_key(Ets1,ets,Config),
+ ets:insert(Ets1,{1,2}),
+ 1 = ets:info(Ets1,size),
+ dets:insert(Dets1,{1,2}),
+ 1 = dets:info(Dets1,size),
+ dets:close(Dets1),
+ (catch file:delete(dets_filename(Dets1,Config))),
+ ets:delete(Ets1),
+ {ok,Dets2} = dets:open_file(?DETS_TMP1,
+ [{type,bag},{file, dets_filename(?DETS_TMP1,Config)}]),
+ Ets2 = ets:new(ets,[bag]),
+ insert_same_key(Dets2,dets,Config),
+ insert_same_key(Ets2,ets,Config),
+ ets:insert(Ets2,{1,2}),
+ 2 = ets:info(Ets2,size),
+ ets:insert(Ets2,{1,2}),
+ 2 = ets:info(Ets2,size),
+ dets:insert(Dets2,{1,2}),
+ 2 = dets:info(Dets2,size),
+ dets:insert(Dets2,{1,2}),
+ 2 = dets:info(Dets2,size),
+ dets:close(Dets2),
+ (catch file:delete(dets_filename(Dets2,Config))),
+ ets:delete(Ets2),
+ {ok,Dets3} = dets:open_file(?DETS_TMP1,
+ [{type,duplicate_bag},
+ {file, dets_filename(?DETS_TMP1,Config)}]),
+ Ets3 = ets:new(ets,[duplicate_bag]),
+ insert_same_key(Dets3,dets,Config),
+ insert_same_key(Ets3,ets,Config),
+ ets:insert(Ets3,{1,2}),
+ 2 = ets:info(Ets3,size),
+ ets:insert(Ets3,{1,2}),
+ 3 = ets:info(Ets3,size),
+ dets:insert(Dets3,{1,2}),
+ 2 = dets:info(Dets3,size),
+ dets:insert(Dets3,{1,2}),
+ 3 = dets:info(Dets3,size),
+ dets:close(Dets3),
+ (catch file:delete(dets_filename(Dets3,Config))),
+ ets:delete(Ets3),
ok.
insert_same_key(Tab,Mod,_Config) ->
- ?line Mod:insert(Tab,{1,1}),
- ?line Mod:insert(Tab,{1,2}),
- ?line Mod:insert(Tab,{2,2}),
- ?line Mod:insert(Tab,{2,2}),
- ?line Mod:safe_fixtable(Tab,true),
- ?line Mod:delete(Tab,1),
- ?line Mod:insert(Tab,{1,1}),
- ?line Expect = case Mod:info(Tab,type) of
- bag ->
- Mod:insert(Tab,{1,2}),
- 2;
- _ ->
- 1
- end,
- ?line Mod:delete(Tab,2),
- ?line Mod:safe_fixtable(Tab,false),
- ?line case Mod:info(Tab,size) of
- Expect ->
- ok;
- _ ->
- exit({size_field_wrong,{Mod,Mod:info(Tab)}})
- end.
-
-
-
-
-owner_dies(doc) ->
- ["Check correct behaviour if the table owner dies."];
-owner_dies(suite) ->
- [];
+ Mod:insert(Tab,{1,1}),
+ Mod:insert(Tab,{1,2}),
+ Mod:insert(Tab,{2,2}),
+ Mod:insert(Tab,{2,2}),
+ Mod:safe_fixtable(Tab,true),
+ Mod:delete(Tab,1),
+ Mod:insert(Tab,{1,1}),
+ Expect = case Mod:info(Tab,type) of
+ bag ->
+ Mod:insert(Tab,{1,2}),
+ 2;
+ _ ->
+ 1
+ end,
+ Mod:delete(Tab,2),
+ Mod:safe_fixtable(Tab,false),
+ case Mod:info(Tab,size) of
+ Expect ->
+ ok;
+ _ ->
+ exit({size_field_wrong,{Mod,Mod:info(Tab)}})
+ end.
+
+
+
+
+%% Check correct behaviour if the table owner dies.
owner_dies(Config) when is_list(Config) ->
- ?line P1 = start_commander(),
- ?line Ets1 = command(P1,{ets,new,[ets,[]]}),
- ?line command(P1,{ets,safe_fixtable,[Ets1,true]}),
- ?line {_,[{P1,1}]} = ets:info(Ets1, safe_fixed),
- ?line stop_commander(P1),
- ?line undefined = ets:info(Ets1, safe_fixed),
- ?line P2 = start_commander(),
- ?line Ets2 = command(P2,{ets,new,[ets,[public]]}),
- ?line command(P2,{ets,safe_fixtable,[Ets2,true]}),
- ?line ets:safe_fixtable(Ets2,true),
- ?line true = ets:info(Ets2, fixed),
- ?line {_,[{_,1},{_,1}]} = ets:info(Ets2, safe_fixed),
- ?line stop_commander(P2),
- ?line undefined = ets:info(Ets2, safe_fixed),
- ?line undefined = ets:info(Ets2, fixed),
- ?line P3 = start_commander(),
- ?line {ok,Dets} = ?LOG(command(P3, {dets, open_file,
- [?DETS_TMP1,
- [{file,
- dets_filename(?DETS_TMP1,
- Config)}]]})),
- ?line command(P3, {dets, safe_fixtable, [Dets, true]}),
- ?line {_,[{P3,1}]} = dets:info(Dets, safe_fixed),
- ?line true = dets:info(Dets, fixed),
- ?line stop_commander(P3),
- ?line undefined = dets:info(Dets, safe_fixed),
- ?line undefined = dets:info(Dets, fixed),
- ?line P4 = start_commander(),
- ?line {ok,Dets} = command(P4, {dets, open_file,
+ P1 = start_commander(),
+ Ets1 = command(P1,{ets,new,[ets,[]]}),
+ command(P1,{ets,safe_fixtable,[Ets1,true]}),
+ {_,[{P1,1}]} = ets:info(Ets1, safe_fixed),
+ stop_commander(P1),
+ undefined = ets:info(Ets1, safe_fixed),
+ P2 = start_commander(),
+ Ets2 = command(P2,{ets,new,[ets,[public]]}),
+ command(P2,{ets,safe_fixtable,[Ets2,true]}),
+ ets:safe_fixtable(Ets2,true),
+ true = ets:info(Ets2, fixed),
+ {_,[{_,1},{_,1}]} = ets:info(Ets2, safe_fixed),
+ stop_commander(P2),
+ undefined = ets:info(Ets2, safe_fixed),
+ undefined = ets:info(Ets2, fixed),
+ P3 = start_commander(),
+ {ok,Dets} = ?LOG(command(P3, {dets, open_file,
+ [?DETS_TMP1,
+ [{file,
+ dets_filename(?DETS_TMP1,
+ Config)}]]})),
+ command(P3, {dets, safe_fixtable, [Dets, true]}),
+ {_,[{P3,1}]} = dets:info(Dets, safe_fixed),
+ true = dets:info(Dets, fixed),
+ stop_commander(P3),
+ undefined = dets:info(Dets, safe_fixed),
+ undefined = dets:info(Dets, fixed),
+ P4 = start_commander(),
+ {ok,Dets} = command(P4, {dets, open_file,
[?DETS_TMP1,
[{file, dets_filename(?DETS_TMP1,Config)}]]}),
- ?line {ok,Dets} = dets:open_file(?DETS_TMP1,
+ {ok,Dets} = dets:open_file(?DETS_TMP1,
[{file, dets_filename(?DETS_TMP1,Config)}]),
- ?line false = dets:info(Dets, safe_fixed),
- ?line command(P4, {dets, safe_fixtable, [Dets, true]}),
- ?line dets:safe_fixtable(Dets, true),
- ?line {_,[{_,1},{_,1}]} = dets:info(Dets, safe_fixed),
- ?line dets:safe_fixtable(Dets, true),
- ?line stop_commander(P4),
- ?line S = self(),
- ?line {_,[{S,2}]} = dets:info(Dets, safe_fixed),
- ?line true = dets:info(Dets, fixed),
- ?line dets:close(Dets),
- ?line undefined = dets:info(Dets, fixed),
- ?line undefined = dets:info(Dets, safe_fixed),
+ false = dets:info(Dets, safe_fixed),
+ command(P4, {dets, safe_fixtable, [Dets, true]}),
+ dets:safe_fixtable(Dets, true),
+ {_,[{_,1},{_,1}]} = dets:info(Dets, safe_fixed),
+ dets:safe_fixtable(Dets, true),
+ stop_commander(P4),
+ S = self(),
+ {_,[{S,2}]} = dets:info(Dets, safe_fixed),
+ true = dets:info(Dets, fixed),
+ dets:close(Dets),
+ undefined = dets:info(Dets, fixed),
+ undefined = dets:info(Dets, safe_fixed),
ok.
-
-
-other_process_closes(doc) ->
- ["When another process closes an dets table, different "
- "things should happen depending on if it has opened it before."];
-other_process_closes(suite) ->
- [];
+%% When another process closes an dets table, different things should
+%% happen depending on if it has opened it before.
other_process_closes(Config) when is_list(Config) ->
- ?line {ok,Dets} = dets:open_file(?DETS_TMP1,
+ {ok,Dets} = dets:open_file(?DETS_TMP1,
[{file, dets_filename(tmp1,Config)}]),
- ?line P2 = start_commander(),
- ?line dets:safe_fixtable(Dets,true),
- ?line S = self(),
- ?line {_,[{S,1}]} = dets:info(Dets, safe_fixed),
- ?line command(P2,{dets, safe_fixtable, [Dets, true]}),
- ?line {_,[_,_]} = dets:info(Dets, safe_fixed),
- ?line {error, not_owner} = command(P2,{dets, close, [Dets]}),
- ?line {_,[_,_]} = dets:info(Dets, safe_fixed),
- ?line command(P2,{dets, open_file,[?DETS_TMP1,
+ P2 = start_commander(),
+ dets:safe_fixtable(Dets,true),
+ S = self(),
+ {_,[{S,1}]} = dets:info(Dets, safe_fixed),
+ command(P2,{dets, safe_fixtable, [Dets, true]}),
+ {_,[_,_]} = dets:info(Dets, safe_fixed),
+ {error, not_owner} = command(P2,{dets, close, [Dets]}),
+ {_,[_,_]} = dets:info(Dets, safe_fixed),
+ command(P2,{dets, open_file,[?DETS_TMP1,
[{file,
dets_filename(?DETS_TMP1, Config)}]]}),
- ?line {_,[_,_]} = dets:info(Dets, safe_fixed),
- ?line command(P2,{dets, close, [Dets]}),
- ?line stop_commander(P2),
- ?line {_,[{S,1}]} = dets:info(Dets, safe_fixed),
- ?line true = dets:info(Dets,fixed),
- ?line dets:close(Dets),
- ?line undefined = dets:info(Dets,fixed),
- ?line undefined = dets:info(Dets, safe_fixed),
+ {_,[_,_]} = dets:info(Dets, safe_fixed),
+ command(P2,{dets, close, [Dets]}),
+ stop_commander(P2),
+ {_,[{S,1}]} = dets:info(Dets, safe_fixed),
+ true = dets:info(Dets,fixed),
+ dets:close(Dets),
+ undefined = dets:info(Dets,fixed),
+ undefined = dets:info(Dets, safe_fixed),
ok.
-
-other_process_deletes(doc) ->
- ["Check that fixtable structures are cleaned up if another process "
- "deletes an ets table"];
-other_process_deletes(suite) ->
- [];
+
+%% Check that fixtable structures are cleaned up if another process
+%% deletes an ets table.
other_process_deletes(Config) when is_list(Config) ->
- ?line Ets = ets:new(ets,[public]),
- ?line P = start_commander(),
- ?line ets:safe_fixtable(Ets,true),
- ?line ets:safe_fixtable(Ets,true),
- ?line true = ets:info(Ets, fixed),
- ?line {_,_} = ets:info(Ets, safe_fixed),
- ?line command(P,{ets,delete,[Ets]}),
- ?line stop_commander(P),
- ?line undefined = ets:info(Ets, fixed),
- ?line undefined = ets:info(Ets, safe_fixed),
+ Ets = ets:new(ets,[public]),
+ P = start_commander(),
+ ets:safe_fixtable(Ets,true),
+ ets:safe_fixtable(Ets,true),
+ true = ets:info(Ets, fixed),
+ {_,_} = ets:info(Ets, safe_fixed),
+ command(P,{ets,delete,[Ets]}),
+ stop_commander(P),
+ undefined = ets:info(Ets, fixed),
+ undefined = ets:info(Ets, safe_fixed),
ok.
-multiple_fixes(doc) ->
- ["Check that multiple safe_fixtable keeps the reference counter."];
-multiple_fixes(suite) ->
- [];
+%% Check that multiple safe_fixtable keeps the reference counter.
multiple_fixes(Config) when is_list(Config) ->
- ?line {ok,Dets} = dets:open_file(?DETS_TMP1,
+ {ok,Dets} = dets:open_file(?DETS_TMP1,
[{file, dets_filename(?DETS_TMP1,Config)}]),
- ?line Ets = ets:new(ets,[]),
- ?line multiple_fixes(Dets,dets),
- ?line multiple_fixes(Ets,ets),
- ?line dets:close(Dets),
+ Ets = ets:new(ets,[]),
+ multiple_fixes(Dets,dets),
+ multiple_fixes(Ets,ets),
+ dets:close(Dets),
ok.
multiple_fixes(Tab, Mod) ->
- ?line false = Mod:info(Tab,fixed),
- ?line false = Mod:info(Tab, safe_fixed),
- ?line Mod:safe_fixtable(Tab, true),
- ?line true = Mod:info(Tab,fixed),
- ?line S = self(),
- ?line {_,[{S,1}]} = Mod:info(Tab, safe_fixed),
- ?line Mod:safe_fixtable(Tab, true),
- ?line Mod:safe_fixtable(Tab, true),
- ?line {_,[{S,3}]} = Mod:info(Tab, safe_fixed),
- ?line true = Mod:info(Tab,fixed),
- ?line Mod:safe_fixtable(Tab, false),
- ?line {_,[{S,2}]} = Mod:info(Tab, safe_fixed),
- ?line true = Mod:info(Tab,fixed),
- ?line Mod:safe_fixtable(Tab, false),
- ?line {_,[{S,1}]} = Mod:info(Tab, safe_fixed),
- ?line true = Mod:info(Tab,fixed),
- ?line Mod:safe_fixtable(Tab, false),
- ?line false = Mod:info(Tab, safe_fixed),
- ?line false = Mod:info(Tab,fixed).
-
-multiple_processes(doc) ->
- ["Check that multiple safe_fixtable across processes are reference "
- "counted OK"];
-multiple_processes(suite) ->
- [];
+ false = Mod:info(Tab,fixed),
+ false = Mod:info(Tab, safe_fixed),
+ Mod:safe_fixtable(Tab, true),
+ true = Mod:info(Tab,fixed),
+ S = self(),
+ {_,[{S,1}]} = Mod:info(Tab, safe_fixed),
+ Mod:safe_fixtable(Tab, true),
+ Mod:safe_fixtable(Tab, true),
+ {_,[{S,3}]} = Mod:info(Tab, safe_fixed),
+ true = Mod:info(Tab,fixed),
+ Mod:safe_fixtable(Tab, false),
+ {_,[{S,2}]} = Mod:info(Tab, safe_fixed),
+ true = Mod:info(Tab,fixed),
+ Mod:safe_fixtable(Tab, false),
+ {_,[{S,1}]} = Mod:info(Tab, safe_fixed),
+ true = Mod:info(Tab,fixed),
+ Mod:safe_fixtable(Tab, false),
+ false = Mod:info(Tab, safe_fixed),
+ false = Mod:info(Tab,fixed).
+
+%% Check that multiple safe_fixtable across processes are reference
+%% counted OK.
multiple_processes(Config) when is_list(Config) ->
- ?line {ok,Dets} = dets:open_file(?DETS_TMP1,[{file,
+ {ok,Dets} = dets:open_file(?DETS_TMP1,[{file,
dets_filename(?DETS_TMP1,
Config)}]),
- ?line Ets = ets:new(ets,[public]),
- ?line multiple_processes(Dets,dets),
- ?line multiple_processes(Ets,ets),
+ Ets = ets:new(ets,[public]),
+ multiple_processes(Dets,dets),
+ multiple_processes(Ets,ets),
ok.
multiple_processes(Tab, Mod) ->
- ?line io:format("Mod = ~p\n", [Mod]),
- ?line P1 = start_commander(),
- ?line P2 = start_commander(),
- ?line false = Mod:info(Tab,fixed),
- ?line false = Mod:info(Tab, safe_fixed),
- ?line command(P1, {Mod, safe_fixtable, [Tab,true]}),
- ?line true = Mod:info(Tab,fixed),
- ?line {_,[{P1,1}]} = Mod:info(Tab, safe_fixed),
- ?line command(P2, {Mod, safe_fixtable, [Tab,true]}),
- ?line true = Mod:info(Tab,fixed),
- ?line {_,L} = Mod:info(Tab,safe_fixed),
- ?line true = (lists:sort(L) == lists:sort([{P1,1},{P2,1}])),
- ?line command(P2, {Mod, safe_fixtable, [Tab,true]}),
- ?line {_,L2} = Mod:info(Tab,safe_fixed),
- ?line true = (lists:sort(L2) == lists:sort([{P1,1},{P2,2}])),
- ?line command(P2, {Mod, safe_fixtable, [Tab,false]}),
- ?line true = Mod:info(Tab,fixed),
- ?line {_,L3} = Mod:info(Tab,safe_fixed),
- ?line true = (lists:sort(L3) == lists:sort([{P1,1},{P2,1}])),
- ?line command(P2, {Mod, safe_fixtable, [Tab,false]}),
- ?line true = Mod:info(Tab,fixed),
- ?line {_,[{P1,1}]} = Mod:info(Tab, safe_fixed),
- ?line stop_commander(P1),
- ?line receive after 1000 -> ok end,
- ?line false = Mod:info(Tab,fixed),
- ?line false = Mod:info(Tab, safe_fixed),
- ?line command(P2, {Mod, safe_fixtable, [Tab,true]}),
- ?line true = Mod:info(Tab,fixed),
- ?line {_,[{P2,1}]} = Mod:info(Tab, safe_fixed),
+ io:format("Mod = ~p\n", [Mod]),
+ P1 = start_commander(),
+ P2 = start_commander(),
+ false = Mod:info(Tab,fixed),
+ false = Mod:info(Tab, safe_fixed),
+ command(P1, {Mod, safe_fixtable, [Tab,true]}),
+ true = Mod:info(Tab,fixed),
+ {_,[{P1,1}]} = Mod:info(Tab, safe_fixed),
+ command(P2, {Mod, safe_fixtable, [Tab,true]}),
+ true = Mod:info(Tab,fixed),
+ {_,L} = Mod:info(Tab,safe_fixed),
+ true = (lists:sort(L) == lists:sort([{P1,1},{P2,1}])),
+ command(P2, {Mod, safe_fixtable, [Tab,true]}),
+ {_,L2} = Mod:info(Tab,safe_fixed),
+ true = (lists:sort(L2) == lists:sort([{P1,1},{P2,2}])),
+ command(P2, {Mod, safe_fixtable, [Tab,false]}),
+ true = Mod:info(Tab,fixed),
+ {_,L3} = Mod:info(Tab,safe_fixed),
+ true = (lists:sort(L3) == lists:sort([{P1,1},{P2,1}])),
+ command(P2, {Mod, safe_fixtable, [Tab,false]}),
+ true = Mod:info(Tab,fixed),
+ {_,[{P1,1}]} = Mod:info(Tab, safe_fixed),
+ stop_commander(P1),
+ receive after 1000 -> ok end,
+ false = Mod:info(Tab,fixed),
+ false = Mod:info(Tab, safe_fixed),
+ command(P2, {Mod, safe_fixtable, [Tab,true]}),
+ true = Mod:info(Tab,fixed),
+ {_,[{P2,1}]} = Mod:info(Tab, safe_fixed),
case Mod of
dets ->
- ?line dets:close(Tab);
+ dets:close(Tab);
ets ->
- ?line ets:delete(Tab)
+ ets:delete(Tab)
end,
- ?line stop_commander(P2),
- ?line receive after 1000 -> ok end,
- ?line undefined = Mod:info(Tab, safe_fixed),
+ stop_commander(P2),
+ receive after 1000 -> ok end,
+ undefined = Mod:info(Tab, safe_fixed),
ok.
-
-
+
+
%%% Helpers
dets_filename(Base, Config) when is_atom(Base) ->
dets_filename(atom_to_list(Base) ++ ".dat", Config);
dets_filename(Basename, Config) ->
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
filename:join(PrivDir, Basename).
command_loop() ->
diff --git a/lib/stdlib/test/format_SUITE.erl b/lib/stdlib/test/format_SUITE.erl
index 77636687cd..176a40f1c5 100644
--- a/lib/stdlib/test/format_SUITE.erl
+++ b/lib/stdlib/test/format_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,20 +25,17 @@
-export([init_per_testcase/2, end_per_testcase/2]).
--include_lib("test_server/include/test_server.hrl").
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
+-include_lib("common_test/include/ct.hrl").
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[hang_1].
@@ -59,11 +56,8 @@ end_per_group(_GroupName, Config) ->
Config.
-hang_1(doc) ->
- ["Bad args can hang (OTP-2400)"];
-hang_1(suite) ->
- [];
+%% OTP-2400. Bad args can hang.
hang_1(Config) when is_list(Config) ->
- ?line _ = (catch io:format(a, "", [])),
- ?line _ = (catch io:format({}, "", [])),
+ _ = (catch io:format(a, "", [])),
+ _ = (catch io:format({}, "", [])),
ok.
diff --git a/lib/stdlib/test/gen_event_SUITE.erl b/lib/stdlib/test/gen_event_SUITE.erl
index b019f98b69..4415c2d09d 100644
--- a/lib/stdlib/test/gen_event_SUITE.erl
+++ b/lib/stdlib/test/gen_event_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(gen_event_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
@@ -59,75 +59,72 @@ end_per_group(_GroupName, Config) ->
%% Start an event manager.
%% --------------------------------------
-start(doc) -> [];
-start(suite) -> [];
start(Config) when is_list(Config) ->
OldFl = process_flag(trap_exit, true),
- ?line dummy_via:reset(),
+ dummy_via:reset(),
- ?line {ok, Pid0} = gen_event:start(), %anonymous
- ?line [] = gen_event:which_handlers(Pid0),
- ?line ok = gen_event:stop(Pid0),
+ {ok, Pid0} = gen_event:start(), %anonymous
+ [] = gen_event:which_handlers(Pid0),
+ ok = gen_event:stop(Pid0),
- ?line {ok, Pid1} = gen_event:start_link(), %anonymous
- ?line [] = gen_event:which_handlers(Pid1),
- ?line ok = gen_event:stop(Pid1),
+ {ok, Pid1} = gen_event:start_link(), %anonymous
+ [] = gen_event:which_handlers(Pid1),
+ ok = gen_event:stop(Pid1),
- ?line {ok, Pid2} = gen_event:start({local, my_dummy_name}),
- ?line [] = gen_event:which_handlers(my_dummy_name),
- ?line [] = gen_event:which_handlers(Pid2),
- ?line ok = gen_event:stop(my_dummy_name),
+ {ok, Pid2} = gen_event:start({local, my_dummy_name}),
+ [] = gen_event:which_handlers(my_dummy_name),
+ [] = gen_event:which_handlers(Pid2),
+ ok = gen_event:stop(my_dummy_name),
- ?line {ok, Pid3} = gen_event:start_link({local, my_dummy_name}),
- ?line [] = gen_event:which_handlers(my_dummy_name),
- ?line [] = gen_event:which_handlers(Pid3),
- ?line ok = gen_event:stop(my_dummy_name),
+ {ok, Pid3} = gen_event:start_link({local, my_dummy_name}),
+ [] = gen_event:which_handlers(my_dummy_name),
+ [] = gen_event:which_handlers(Pid3),
+ ok = gen_event:stop(my_dummy_name),
- ?line {ok, Pid4} = gen_event:start_link({global, my_dummy_name}),
- ?line [] = gen_event:which_handlers({global, my_dummy_name}),
- ?line [] = gen_event:which_handlers(Pid4),
- ?line ok = gen_event:stop({global, my_dummy_name}),
+ {ok, Pid4} = gen_event:start_link({global, my_dummy_name}),
+ [] = gen_event:which_handlers({global, my_dummy_name}),
+ [] = gen_event:which_handlers(Pid4),
+ ok = gen_event:stop({global, my_dummy_name}),
- ?line {ok, Pid5} = gen_event:start_link({via, dummy_via, my_dummy_name}),
- ?line [] = gen_event:which_handlers({via, dummy_via, my_dummy_name}),
- ?line [] = gen_event:which_handlers(Pid5),
- ?line ok = gen_event:stop({via, dummy_via, my_dummy_name}),
+ {ok, Pid5} = gen_event:start_link({via, dummy_via, my_dummy_name}),
+ [] = gen_event:which_handlers({via, dummy_via, my_dummy_name}),
+ [] = gen_event:which_handlers(Pid5),
+ ok = gen_event:stop({via, dummy_via, my_dummy_name}),
- ?line {ok, _} = gen_event:start_link({local, my_dummy_name}),
- ?line {error, {already_started, _}} =
+ {ok, _} = gen_event:start_link({local, my_dummy_name}),
+ {error, {already_started, _}} =
gen_event:start_link({local, my_dummy_name}),
- ?line {error, {already_started, _}} =
+ {error, {already_started, _}} =
gen_event:start({local, my_dummy_name}),
- ?line ok = gen_event:stop(my_dummy_name),
+ ok = gen_event:stop(my_dummy_name),
- ?line {ok, Pid6} = gen_event:start_link({global, my_dummy_name}),
- ?line {error, {already_started, _}} =
+ {ok, Pid6} = gen_event:start_link({global, my_dummy_name}),
+ {error, {already_started, _}} =
gen_event:start_link({global, my_dummy_name}),
- ?line {error, {already_started, _}} =
+ {error, {already_started, _}} =
gen_event:start({global, my_dummy_name}),
ok = gen_event:stop({global, my_dummy_name}, shutdown, 10000),
receive
{'EXIT', Pid6, shutdown} -> ok
after 10000 ->
- ?t:fail(exit_gen_event)
+ ct:fail(exit_gen_event)
end,
- ?line {ok, Pid7} = gen_event:start_link({via, dummy_via, my_dummy_name}),
- ?line {error, {already_started, _}} =
+ {ok, Pid7} = gen_event:start_link({via, dummy_via, my_dummy_name}),
+ {error, {already_started, _}} =
gen_event:start_link({via, dummy_via, my_dummy_name}),
- ?line {error, {already_started, _}} =
+ {error, {already_started, _}} =
gen_event:start({via, dummy_via, my_dummy_name}),
exit(Pid7, shutdown),
receive
{'EXIT', Pid7, shutdown} -> ok
after 10000 ->
- ?t:fail(exit_gen_event)
+ ct:fail(exit_gen_event)
end,
- ?t:messages_get(),
process_flag(trap_exit, OldFl),
ok.
@@ -184,7 +181,7 @@ hibernate(Config) when is_list(Config) ->
{ok,Pid2} = gen_event:start({local, my_dummy_handler}),
ok = gen_event:add_handler(my_dummy_handler, dummy_h,
- [self(),hibernate]),
+ [self(),hibernate]),
is_in_erlang_hibernate(Pid2),
sys:suspend(my_dummy_handler),
is_in_erlang_hibernate(Pid2),
@@ -193,7 +190,7 @@ hibernate(Config) when is_list(Config) ->
Pid2 ! wake,
is_not_in_erlang_hibernate(Pid2),
-
+
ok = gen_event:stop(my_dummy_handler),
ok.
@@ -204,7 +201,7 @@ is_in_erlang_hibernate(Pid) ->
is_in_erlang_hibernate_1(0, Pid) ->
io:format("~p\n", [erlang:process_info(Pid, current_function)]),
- ?t:fail(not_in_erlang_hibernate_3);
+ ct:fail(not_in_erlang_hibernate_3);
is_in_erlang_hibernate_1(N, Pid) ->
{current_function,MFA} = erlang:process_info(Pid, current_function),
case MFA of
@@ -221,7 +218,7 @@ is_not_in_erlang_hibernate(Pid) ->
is_not_in_erlang_hibernate_1(0, Pid) ->
io:format("~p\n", [erlang:process_info(Pid, current_function)]),
- ?t:fail(not_in_erlang_hibernate_3);
+ ct:fail(not_in_erlang_hibernate_3);
is_not_in_erlang_hibernate_1(N, Pid) ->
{current_function,MFA} = erlang:process_info(Pid, current_function),
case MFA of
@@ -233,720 +230,694 @@ is_not_in_erlang_hibernate_1(N, Pid) ->
end.
-add_handler(doc) -> [];
-add_handler(suite) -> [];
add_handler(Config) when is_list(Config) ->
- ?line {ok,_} = gen_event:start({local, my_dummy_handler}),
- ?line {error, my_error} =
+ {ok,_} = gen_event:start({local, my_dummy_handler}),
+ {error, my_error} =
gen_event:add_handler(my_dummy_handler, dummy_h, make_error),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line {error, my_error} =
+ {error, my_error} =
gen_event:add_handler(my_dummy_handler, {dummy_h, self()}, make_error),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,self()},
- [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,self()},
+ [self()]),
Self = self(),
- ?line [{dummy_h, Self}, dummy_h] =
+ [{dummy_h, Self}, dummy_h] =
gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:stop(my_dummy_handler),
+ ok = gen_event:stop(my_dummy_handler),
ok.
-add_sup_handler(doc) -> [];
-add_sup_handler(suite) -> [];
add_sup_handler(Config) when is_list(Config) ->
- ?line {ok,Pid} = gen_event:start({local, my_dummy_handler}),
- ?line {error, my_error} =
+ {ok,Pid} = gen_event:start({local, my_dummy_handler}),
+ {error, my_error} =
gen_event:add_sup_handler(my_dummy_handler, dummy_h, make_error),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line exit(Pid, sup_died),
- ?t:sleep(1000),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ exit(Pid, sup_died),
+ ct:sleep(1000),
+ [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line {error, my_error} =
+ {error, my_error} =
gen_event:add_handler(my_dummy_handler, {dummy_h, self()}, make_error),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, {dummy_h,self()},
- [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_sup_handler(my_dummy_handler, {dummy_h,self()},
+ [self()]),
Self = self(),
- ?line [{dummy_h, Self}, dummy_h] =
+ [{dummy_h, Self}, dummy_h] =
gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:stop(my_dummy_handler),
-
- ?line receive
- {gen_event_EXIT, dummy_h, shutdown} ->
- ok
- after 1000 ->
- ?t:fail({no,{gen_event_EXIT, dummy_h, shutdown}})
- end,
-
- ?line receive
- {gen_event_EXIT, {dummy_h,Self}, shutdown} ->
- ok
- after 1000 ->
- ?t:fail({no,{gen_event_EXIT, {dummy_h,Self},
- shutdown}})
- end,
+ ok = gen_event:stop(my_dummy_handler),
+
+ receive
+ {gen_event_EXIT, dummy_h, shutdown} ->
+ ok
+ after 1000 ->
+ ct:fail({no,{gen_event_EXIT, dummy_h, shutdown}})
+ end,
+
+ receive
+ {gen_event_EXIT, {dummy_h,Self}, shutdown} ->
+ ok
+ after 1000 ->
+ ct:fail({no,{gen_event_EXIT, {dummy_h,Self},
+ shutdown}})
+ end,
ok.
-delete_handler(doc) -> [];
-delete_handler(suite) -> [];
delete_handler(Config) when is_list(Config) ->
- ?line {ok,_} = gen_event:start({local, my_dummy_handler}),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
- ?line {error, module_not_found} =
+ {ok,_} = gen_event:start({local, my_dummy_handler}),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+ {error, module_not_found} =
gen_event:delete_handler(my_dummy_handler, duuuuuuuuumy, []),
- ?line return_hej =
+ return_hej =
gen_event:delete_handler(my_dummy_handler, dummy_h, return_hej),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
- ?line ok =
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+ ok =
gen_event:delete_handler(my_dummy_handler, dummy_h, []),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,1}, [self()]),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,2}, [self()]),
- ?line {error, module_not_found} =
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,1}, [self()]),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,2}, [self()]),
+ {error, module_not_found} =
gen_event:delete_handler(my_dummy_handler, {duuuuuuuuumy,1}, []),
- ?line return_hej =
+ return_hej =
gen_event:delete_handler(my_dummy_handler, {dummy_h,1}, return_hej),
- ?line return_hej =
+ return_hej =
gen_event:delete_handler(my_dummy_handler, {dummy_h,2}, return_hej),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,2}, [self()]),
- ?line ok =
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,2}, [self()]),
+ ok =
gen_event:delete_handler(my_dummy_handler, {dummy_h,2}, []),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:stop(my_dummy_handler),
+ ok = gen_event:stop(my_dummy_handler),
ok.
-swap_handler(doc) -> [];
-swap_handler(suite) -> [];
swap_handler(Config) when is_list(Config) ->
- ?line {ok,_} = gen_event:start({local, my_dummy_handler}),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
- ?line {error, non_existing} =
+ {ok,_} = gen_event:start({local, my_dummy_handler}),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+ {error, non_existing} =
gen_event:swap_handler(my_dummy_handler, {faulty_h, swap},
{dummy1_h, []}),
- ?line ok =
+ ok =
gen_event:swap_handler(my_dummy_handler, {dummy_h, swap},
{dummy1_h, swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:delete_handler(my_dummy_handler, dummy1_h, []),
+ ok = gen_event:delete_handler(my_dummy_handler, dummy1_h, []),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,3}, [self()]),
- ?line {error, non_existing} =
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,3}, [self()]),
+ {error, non_existing} =
gen_event:swap_handler(my_dummy_handler, {faulty_h, swap},
{dummy1_h, []}),
- ?line ok =
+ ok =
gen_event:swap_handler(my_dummy_handler, {{dummy_h,3}, swap},
{{dummy1_h,4}, swap}),
- ?line [{dummy1_h,4}] = gen_event:which_handlers(my_dummy_handler),
+ [{dummy1_h,4}] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:delete_handler(my_dummy_handler, {dummy1_h,4}, []),
+ ok = gen_event:delete_handler(my_dummy_handler, {dummy1_h,4}, []),
- ?line ok = gen_event:stop(my_dummy_handler),
+ ok = gen_event:stop(my_dummy_handler),
ok.
-
-swap_sup_handler(doc) -> [];
-swap_sup_handler(suite) -> [];
+
swap_sup_handler(Config) when is_list(Config) ->
- ?line {ok,_} = gen_event:start({local, my_dummy_handler}),
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line {error, non_existing} =
+ {ok,_} = gen_event:start({local, my_dummy_handler}),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ {error, non_existing} =
gen_event:swap_handler(my_dummy_handler, {faulty_h, swap},
{dummy1_h, []}),
- ?line ok =
+ ok =
gen_event:swap_handler(my_dummy_handler, {dummy_h, swap},
{dummy1_h, swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:delete_handler(my_dummy_handler, dummy1_h, []),
- ?line receive
- {gen_event_EXIT, dummy1_h, normal} ->
- ok
- after 1000 ->
- ?t:fail({no,{gen_event_EXIT, dummy1_h, normal}})
- end,
-
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, {dummy_h,3},
- [self()]),
- ?line {error, non_existing} =
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:delete_handler(my_dummy_handler, dummy1_h, []),
+ receive
+ {gen_event_EXIT, dummy1_h, normal} ->
+ ok
+ after 1000 ->
+ ct:fail({no,{gen_event_EXIT, dummy1_h, normal}})
+ end,
+
+ ok = gen_event:add_sup_handler(my_dummy_handler, {dummy_h,3},
+ [self()]),
+ {error, non_existing} =
gen_event:swap_sup_handler(my_dummy_handler, {faulty_h, swap},
{dummy1_h, []}),
- ?line ok =
+ ok =
gen_event:swap_sup_handler(my_dummy_handler, {{dummy_h,3}, swap},
{{dummy1_h,4}, swap}),
- ?line [{dummy1_h,4}] = gen_event:which_handlers(my_dummy_handler),
+ [{dummy1_h,4}] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:delete_handler(my_dummy_handler, {dummy1_h,4}, []),
- ?line receive
- {gen_event_EXIT, {dummy1_h,4}, normal} ->
- ok
- after 1000 ->
- ?t:fail({no,{gen_event_EXIT, {dummy1_h,4}, normal}})
- end,
+ ok = gen_event:delete_handler(my_dummy_handler, {dummy1_h,4}, []),
+ receive
+ {gen_event_EXIT, {dummy1_h,4}, normal} ->
+ ok
+ after 1000 ->
+ ct:fail({no,{gen_event_EXIT, {dummy1_h,4}, normal}})
+ end,
- ?line ok = gen_event:stop(my_dummy_handler),
+ ok = gen_event:stop(my_dummy_handler),
ok.
-
-notify(doc) -> [];
-notify(suite) -> [];
+
notify(Config) when is_list(Config) ->
- ?line {ok,_} = gen_event:start({local, my_dummy_handler}),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+ {ok,_} = gen_event:start({local, my_dummy_handler}),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
Event = {event, self()},
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:notify(my_dummy_handler, Event),
- ?line receive
- {dummy_h, Event} ->
- ok
- end,
- ?line ok = gen_event:notify(my_dummy_handler, {swap_event,dummy1_h,swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:notify(my_dummy_handler, Event),
- ?line receive
- {dummy1_h, Event} ->
- ok
- end,
- ?line ok = gen_event:notify(my_dummy_handler, delete_event),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
-
- ?line ok = gen_event:notify(my_dummy_handler, error_event),
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:notify(my_dummy_handler, Event),
+ receive
+ {dummy_h, Event} ->
+ ok
+ end,
+ ok = gen_event:notify(my_dummy_handler, {swap_event,dummy1_h,swap}),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:notify(my_dummy_handler, Event),
+ receive
+ {dummy1_h, Event} ->
+ ok
+ end,
+ ok = gen_event:notify(my_dummy_handler, delete_event),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+
+ ok = gen_event:notify(my_dummy_handler, error_event),
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
%% Handler with id, {Mod,Id}
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,5}, [self()]),
- ?line [{dummy_h,5}] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:notify(my_dummy_handler, Event),
- ?line receive
- {dummy_h, Event} ->
- ok
- end,
- ?line ok = gen_event:notify(my_dummy_handler,
- {swap_event, {dummy1_h, 9}, swap}),
- ?line [{dummy1_h,9}] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:notify(my_dummy_handler, Event),
- ?line receive
- {dummy1_h, Event} ->
- ok
- end,
- ?line ok = gen_event:notify(my_dummy_handler, delete_event),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,a}, [self()]),
-
- ?line ok = gen_event:notify(my_dummy_handler, error_event),
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,5}, [self()]),
+ [{dummy_h,5}] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:notify(my_dummy_handler, Event),
+ receive
+ {dummy_h, Event} ->
+ ok
+ end,
+ ok = gen_event:notify(my_dummy_handler,
+ {swap_event, {dummy1_h, 9}, swap}),
+ [{dummy1_h,9}] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:notify(my_dummy_handler, Event),
+ receive
+ {dummy1_h, Event} ->
+ ok
+ end,
+ ok = gen_event:notify(my_dummy_handler, delete_event),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,a}, [self()]),
+
+ ok = gen_event:notify(my_dummy_handler, error_event),
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
%% Supervised handler.
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:notify(my_dummy_handler, Event),
- ?line receive
- {dummy_h, Event} ->
- ok
- end,
-
- ?line ok = gen_event:notify(my_dummy_handler, do_crash),
- ?line receive
- {gen_event_EXIT, dummy_h, {'EXIT',_}} ->
- ok
- end,
-
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line ok = gen_event:notify(my_dummy_handler, {swap_event,dummy1_h,swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:notify(my_dummy_handler, do_crash),
- ?line receive
- {gen_event_EXIT, dummy1_h, {'EXIT',_}} ->
- ok
- end,
-
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line ok = gen_event:notify(my_dummy_handler, {swap_event,dummy1_h,swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:notify(my_dummy_handler, delete_event),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
-
- ?line receive
- {gen_event_EXIT, dummy1_h, normal} ->
- ok
- end,
-
- ?line [] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:stop(my_dummy_handler),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:notify(my_dummy_handler, Event),
+ receive
+ {dummy_h, Event} ->
+ ok
+ end,
+
+ ok = gen_event:notify(my_dummy_handler, do_crash),
+ receive
+ {gen_event_EXIT, dummy_h, {'EXIT',_}} ->
+ ok
+ end,
+
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ ok = gen_event:notify(my_dummy_handler, {swap_event,dummy1_h,swap}),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:notify(my_dummy_handler, do_crash),
+ receive
+ {gen_event_EXIT, dummy1_h, {'EXIT',_}} ->
+ ok
+ end,
+
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ ok = gen_event:notify(my_dummy_handler, {swap_event,dummy1_h,swap}),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:notify(my_dummy_handler, delete_event),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+
+ receive
+ {gen_event_EXIT, dummy1_h, normal} ->
+ ok
+ end,
+
+ [] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:stop(my_dummy_handler),
ok.
-sync_notify(doc) -> [];
-sync_notify(suite) -> [];
sync_notify(Config) when is_list(Config) ->
- ?line {ok,_} = gen_event:start({local, my_dummy_handler}),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+ {ok,_} = gen_event:start({local, my_dummy_handler}),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
Event = {event, self()},
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:sync_notify(my_dummy_handler, Event),
- ?line receive
- {dummy_h, Event} ->
- ok
- end,
- ?line ok = gen_event:sync_notify(my_dummy_handler,
- {swap_event, dummy1_h, swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:sync_notify(my_dummy_handler, Event),
- ?line receive
- {dummy1_h, Event} ->
- ok
- end,
- ?line ok = gen_event:sync_notify(my_dummy_handler, delete_event),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
-
- ?line ok = gen_event:sync_notify(my_dummy_handler, error_event),
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:sync_notify(my_dummy_handler, Event),
+ receive
+ {dummy_h, Event} ->
+ ok
+ end,
+ ok = gen_event:sync_notify(my_dummy_handler,
+ {swap_event, dummy1_h, swap}),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:sync_notify(my_dummy_handler, Event),
+ receive
+ {dummy1_h, Event} ->
+ ok
+ end,
+ ok = gen_event:sync_notify(my_dummy_handler, delete_event),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+
+ ok = gen_event:sync_notify(my_dummy_handler, error_event),
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
%% Handler with id, {Mod,Id}
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,5}, [self()]),
- ?line [{dummy_h,5}] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:sync_notify(my_dummy_handler, Event),
- ?line receive
- {dummy_h, Event} ->
- ok
- end,
- ?line ok = gen_event:sync_notify(my_dummy_handler,
- {swap_event, {dummy1_h, 9}, swap}),
- ?line [{dummy1_h,9}] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:sync_notify(my_dummy_handler, Event),
- ?line receive
- {dummy1_h, Event} ->
- ok
- end,
- ?line ok = gen_event:sync_notify(my_dummy_handler, delete_event),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,a}, [self()]),
-
- ?line ok = gen_event:sync_notify(my_dummy_handler, error_event),
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,5}, [self()]),
+ [{dummy_h,5}] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:sync_notify(my_dummy_handler, Event),
+ receive
+ {dummy_h, Event} ->
+ ok
+ end,
+ ok = gen_event:sync_notify(my_dummy_handler,
+ {swap_event, {dummy1_h, 9}, swap}),
+ [{dummy1_h,9}] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:sync_notify(my_dummy_handler, Event),
+ receive
+ {dummy1_h, Event} ->
+ ok
+ end,
+ ok = gen_event:sync_notify(my_dummy_handler, delete_event),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,a}, [self()]),
+
+ ok = gen_event:sync_notify(my_dummy_handler, error_event),
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
%% Supervised handler.
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:sync_notify(my_dummy_handler, Event),
- ?line receive
- {dummy_h, Event} ->
- ok
- end,
-
- ?line ok = gen_event:sync_notify(my_dummy_handler, do_crash),
- ?line receive
- {gen_event_EXIT, dummy_h, {'EXIT',_}} ->
- ok
- end,
-
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line ok = gen_event:sync_notify(my_dummy_handler,
- {swap_event,dummy1_h,swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:sync_notify(my_dummy_handler, do_crash),
- ?line receive
- {gen_event_EXIT, dummy1_h, {'EXIT',_}} ->
- ok
- end,
-
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line ok = gen_event:sync_notify(my_dummy_handler,
- {swap_event,dummy1_h,swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:sync_notify(my_dummy_handler, delete_event),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
-
- ?line receive
- {gen_event_EXIT, dummy1_h, normal} ->
- ok
- end,
-
- ?line [] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:stop(my_dummy_handler),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:sync_notify(my_dummy_handler, Event),
+ receive
+ {dummy_h, Event} ->
+ ok
+ end,
+
+ ok = gen_event:sync_notify(my_dummy_handler, do_crash),
+ receive
+ {gen_event_EXIT, dummy_h, {'EXIT',_}} ->
+ ok
+ end,
+
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ ok = gen_event:sync_notify(my_dummy_handler,
+ {swap_event,dummy1_h,swap}),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:sync_notify(my_dummy_handler, do_crash),
+ receive
+ {gen_event_EXIT, dummy1_h, {'EXIT',_}} ->
+ ok
+ end,
+
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ ok = gen_event:sync_notify(my_dummy_handler,
+ {swap_event,dummy1_h,swap}),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:sync_notify(my_dummy_handler, delete_event),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+
+ receive
+ {gen_event_EXIT, dummy1_h, normal} ->
+ ok
+ end,
+
+ [] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:stop(my_dummy_handler),
ok.
-call(doc) -> [];
-call(suite) -> [];
call(Config) when is_list(Config) ->
- ?line {ok,_} = gen_event:start({local, my_dummy_handler}),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h, 1}, [self()]),
- ?line [{dummy_h, 1}, dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line {'EXIT',_} = (catch gen_event:call(non_exist, dummy_h, hejsan)),
- ?line {error, bad_module} =
+ {ok,_} = gen_event:start({local, my_dummy_handler}),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h, 1}, [self()]),
+ [{dummy_h, 1}, dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ {'EXIT',_} = (catch gen_event:call(non_exist, dummy_h, hejsan)),
+ {error, bad_module} =
gen_event:call(my_dummy_handler, bad_h, hejsan),
- ?line {ok, hejhopp} = gen_event:call(my_dummy_handler, dummy_h, hejsan),
- ?line {ok, hejhopp} = gen_event:call(my_dummy_handler, {dummy_h, 1},
- hejsan),
- ?line {ok, hejhopp} = gen_event:call(my_dummy_handler, dummy_h, hejsan,
- 10000),
- ?line {'EXIT', {timeout, _}} =
+ {ok, hejhopp} = gen_event:call(my_dummy_handler, dummy_h, hejsan),
+ {ok, hejhopp} = gen_event:call(my_dummy_handler, {dummy_h, 1},
+ hejsan),
+ {ok, hejhopp} = gen_event:call(my_dummy_handler, dummy_h, hejsan,
+ 10000),
+ {'EXIT', {timeout, _}} =
(catch gen_event:call(my_dummy_handler, dummy_h, hejsan, 0)),
flush(),
- ?line ok = gen_event:delete_handler(my_dummy_handler, {dummy_h, 1}, []),
- ?line {ok, swapped} = gen_event:call(my_dummy_handler, dummy_h,
- {swap_call,dummy1_h,swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
- ?line {error, bad_module} =
+ ok = gen_event:delete_handler(my_dummy_handler, {dummy_h, 1}, []),
+ {ok, swapped} = gen_event:call(my_dummy_handler, dummy_h,
+ {swap_call,dummy1_h,swap}),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+ {error, bad_module} =
gen_event:call(my_dummy_handler, dummy_h, hejsan),
- ?line ok = gen_event:call(my_dummy_handler, dummy1_h, delete_call),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
-
- ?line {error, {return, faulty}} =
+ ok = gen_event:call(my_dummy_handler, dummy1_h, delete_call),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+
+ {error, {return, faulty}} =
gen_event:call(my_dummy_handler, dummy_h, error_call),
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
-
- ?line {error, {'EXIT', _}} =
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+
+ {error, {'EXIT', _}} =
gen_event:call(my_dummy_handler, dummy_h, exit_call),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [] = gen_event:which_handlers(my_dummy_handler),
%% Handler with id, {Mod,Id}
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,1}, [self()]),
- ?line [{dummy_h,1}] = gen_event:which_handlers(my_dummy_handler),
- ?line {error, bad_module} =
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,1}, [self()]),
+ [{dummy_h,1}] = gen_event:which_handlers(my_dummy_handler),
+ {error, bad_module} =
gen_event:call(my_dummy_handler, bad_h, hejsan),
- ?line {ok, hejhopp} = gen_event:call(my_dummy_handler, {dummy_h,1},
- hejsan),
- ?line {ok, swapped} = gen_event:call(my_dummy_handler, {dummy_h,1},
- {swap_call,{dummy1_h,2},swap}),
- ?line [{dummy1_h,2}] = gen_event:which_handlers(my_dummy_handler),
- ?line {error, bad_module} =
+ {ok, hejhopp} = gen_event:call(my_dummy_handler, {dummy_h,1},
+ hejsan),
+ {ok, swapped} = gen_event:call(my_dummy_handler, {dummy_h,1},
+ {swap_call,{dummy1_h,2},swap}),
+ [{dummy1_h,2}] = gen_event:which_handlers(my_dummy_handler),
+ {error, bad_module} =
gen_event:call(my_dummy_handler, dummy_h, hejsan),
- ?line ok = gen_event:call(my_dummy_handler, {dummy1_h,2}, delete_call),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,3}, [self()]),
-
- ?line {error, {return, faulty}} =
+ ok = gen_event:call(my_dummy_handler, {dummy1_h,2}, delete_call),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,3}, [self()]),
+
+ {error, {return, faulty}} =
gen_event:call(my_dummy_handler, {dummy_h,3}, error_call),
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,4}, [self()]),
-
- ?line {error, {'EXIT', _}} =
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,4}, [self()]),
+
+ {error, {'EXIT', _}} =
gen_event:call(my_dummy_handler, {dummy_h,4}, exit_call),
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [] = gen_event:which_handlers(my_dummy_handler),
%% Supervised handler.
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line {error, bad_module} =
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ {error, bad_module} =
gen_event:call(my_dummy_handler, bad_h, hejsan),
- ?line {ok, hejhopp} = gen_event:call(my_dummy_handler, dummy_h, hejsan),
- ?line {ok, swapped} = gen_event:call(my_dummy_handler, dummy_h,
- {swap_call,dummy1_h,swap}),
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
- ?line {error, bad_module} =
+ {ok, hejhopp} = gen_event:call(my_dummy_handler, dummy_h, hejsan),
+ {ok, swapped} = gen_event:call(my_dummy_handler, dummy_h,
+ {swap_call,dummy1_h,swap}),
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+ {error, bad_module} =
gen_event:call(my_dummy_handler, dummy_h, hejsan),
- ?line ok = gen_event:call(my_dummy_handler, dummy1_h, delete_call),
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
+ ok = gen_event:call(my_dummy_handler, dummy1_h, delete_call),
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
- ?line receive
- {gen_event_EXIT, dummy1_h, normal} ->
- ok
- end,
+ receive
+ {gen_event_EXIT, dummy1_h, normal} ->
+ ok
+ end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line {error, {return, faulty}} =
+ {error, {return, faulty}} =
gen_event:call(my_dummy_handler, dummy_h, error_call),
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
-
- ?line receive
- {gen_event_EXIT, dummy_h, {return,faulty}} ->
- ok
- after 1000 ->
- ?t:fail({no, {gen_event_EXIT, dummy_h, {return,faulty}}})
- end,
-
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
-
- ?line {error, {'EXIT', _}} =
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+
+ receive
+ {gen_event_EXIT, dummy_h, {return,faulty}} ->
+ ok
+ after 1000 ->
+ ct:fail({no, {gen_event_EXIT, dummy_h, {return,faulty}}})
+ end,
+
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+
+ {error, {'EXIT', _}} =
gen_event:call(my_dummy_handler, dummy_h, exit_call),
- ?line receive
- {gen_event_EXIT, dummy_h, {'EXIT',_}} ->
- ok
- after 1000 ->
- ?t:fail({no, {gen_event_EXIT, dummy_h, {'EXIT','_'}}})
- end,
+ receive
+ {gen_event_EXIT, dummy_h, {'EXIT',_}} ->
+ ok
+ after 1000 ->
+ ct:fail({no, {gen_event_EXIT, dummy_h, {'EXIT','_'}}})
+ end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:stop(my_dummy_handler),
+ ok = gen_event:stop(my_dummy_handler),
ok.
flush() ->
receive _ -> flush() after 0 -> ok end.
-info(doc) -> [];
-info(suite) -> [];
info(Config) when is_list(Config) ->
- ?line {ok,_} = gen_event:start({local, my_dummy_handler}),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+ {ok,_} = gen_event:start({local, my_dummy_handler}),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
Info = {info, self()},
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line my_dummy_handler ! Info,
- ?line receive
- {dummy_h, Info} ->
- ok
- end,
- ?line my_dummy_handler ! {swap_info,dummy1_h,swap},
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
- ?line my_dummy_handler ! Info,
- ?line receive
- {dummy1_h, Info} ->
- ok
- end,
- ?line my_dummy_handler ! delete_info,
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
-
- ?line my_dummy_handler ! error_info,
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ my_dummy_handler ! Info,
+ receive
+ {dummy_h, Info} ->
+ ok
+ end,
+ my_dummy_handler ! {swap_info,dummy1_h,swap},
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+ my_dummy_handler ! Info,
+ receive
+ {dummy1_h, Info} ->
+ ok
+ end,
+ my_dummy_handler ! delete_info,
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, dummy_h, [self()]),
+
+ my_dummy_handler ! error_info,
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
%% Handler with id, {Mod,Id}
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,1}, [self()]),
- ?line [{dummy_h,1}] = gen_event:which_handlers(my_dummy_handler),
- ?line my_dummy_handler ! Info,
- ?line receive
- {dummy_h, Info} ->
- ok
- end,
- ?line my_dummy_handler ! {swap_info,{dummy1_h,2},swap},
- ?line [{dummy1_h,2}] = gen_event:which_handlers(my_dummy_handler),
- ?line my_dummy_handler ! Info,
- ?line receive
- {dummy1_h, Info} ->
- ok
- end,
- ?line my_dummy_handler ! delete_info,
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
- ?line ok = gen_event:add_handler(my_dummy_handler, {dummy_h,3}, [self()]),
-
- ?line my_dummy_handler ! error_info,
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
- ?line [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,1}, [self()]),
+ [{dummy_h,1}] = gen_event:which_handlers(my_dummy_handler),
+ my_dummy_handler ! Info,
+ receive
+ {dummy_h, Info} ->
+ ok
+ end,
+ my_dummy_handler ! {swap_info,{dummy1_h,2},swap},
+ [{dummy1_h,2}] = gen_event:which_handlers(my_dummy_handler),
+ my_dummy_handler ! Info,
+ receive
+ {dummy1_h, Info} ->
+ ok
+ end,
+ my_dummy_handler ! delete_info,
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
+ ok = gen_event:add_handler(my_dummy_handler, {dummy_h,3}, [self()]),
+
+ my_dummy_handler ! error_info,
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+ [] = gen_event:which_handlers(my_dummy_handler),
%% Supervised handler
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line [dummy_h] = gen_event:which_handlers(my_dummy_handler),
- ?line my_dummy_handler ! Info,
- ?line receive
- {dummy_h, Info} ->
- ok
- end,
- ?line my_dummy_handler ! {swap_info,dummy1_h,swap},
- ?line [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
- ?line my_dummy_handler ! Info,
- ?line receive
- {dummy1_h, Info} ->
- ok
- end,
- ?line my_dummy_handler ! delete_info,
- ?line receive
- {dummy1_h, removed} ->
- ok
- end,
-
- ?line receive
- {gen_event_EXIT, dummy1_h, normal} ->
- ok
- after 1000 ->
- ?t:fail({no, {gen_event_EXIT, dummy1_h, normal}})
- end,
-
- ?line [] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
-
- ?line my_dummy_handler ! error_info,
- ?line receive
- {dummy_h, returned_error} ->
- ok
- end,
-
- ?line receive
- {gen_event_EXIT, dummy_h, {return,faulty}} ->
- ok
- after 1000 ->
- ?t:fail({no, {gen_event_EXIT, dummy_h, {return,faulty}}})
- end,
-
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
- ?line my_dummy_handler ! do_crash,
-
- ?line receive
- {gen_event_EXIT, dummy_h, {'EXIT',_}} ->
- ok
- after 1000 ->
- ?t:fail({no, {gen_event_EXIT, dummy_h, {'EXIT','_'}}})
- end,
-
- ?line [] = gen_event:which_handlers(my_dummy_handler),
-
- ?line ok = gen_event:stop(my_dummy_handler),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ [dummy_h] = gen_event:which_handlers(my_dummy_handler),
+ my_dummy_handler ! Info,
+ receive
+ {dummy_h, Info} ->
+ ok
+ end,
+ my_dummy_handler ! {swap_info,dummy1_h,swap},
+ [dummy1_h] = gen_event:which_handlers(my_dummy_handler),
+ my_dummy_handler ! Info,
+ receive
+ {dummy1_h, Info} ->
+ ok
+ end,
+ my_dummy_handler ! delete_info,
+ receive
+ {dummy1_h, removed} ->
+ ok
+ end,
+
+ receive
+ {gen_event_EXIT, dummy1_h, normal} ->
+ ok
+ after 1000 ->
+ ct:fail({no, {gen_event_EXIT, dummy1_h, normal}})
+ end,
+
+ [] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+
+ my_dummy_handler ! error_info,
+ receive
+ {dummy_h, returned_error} ->
+ ok
+ end,
+
+ receive
+ {gen_event_EXIT, dummy_h, {return,faulty}} ->
+ ok
+ after 1000 ->
+ ct:fail({no, {gen_event_EXIT, dummy_h, {return,faulty}}})
+ end,
+
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy_h, [self()]),
+ my_dummy_handler ! do_crash,
+
+ receive
+ {gen_event_EXIT, dummy_h, {'EXIT',_}} ->
+ ok
+ after 1000 ->
+ ct:fail({no, {gen_event_EXIT, dummy_h, {'EXIT','_'}}})
+ end,
+
+ [] = gen_event:which_handlers(my_dummy_handler),
+
+ ok = gen_event:stop(my_dummy_handler),
ok.
-call_format_status(suite) ->
- [];
-call_format_status(doc) ->
- ["Test that sys:get_status/1,2 calls format_status/2"];
+%% Test that sys:get_status/1,2 calls format_status/2.
call_format_status(Config) when is_list(Config) ->
- ?line {ok, Pid} = gen_event:start({local, my_dummy_handler}),
+ {ok, Pid} = gen_event:start({local, my_dummy_handler}),
%% State here intentionally differs from what we expect from format_status
State = self(),
FmtState = "dummy1_h handler state",
- ?line ok = gen_event:add_handler(my_dummy_handler, dummy1_h, [State]),
- ?line Status1 = sys:get_status(Pid),
- ?line Status2 = sys:get_status(Pid, 5000),
- ?line ok = gen_event:stop(Pid),
- ?line {status, Pid, _, [_, _, Pid, [], Data1]} = Status1,
- ?line HandlerInfo1 = proplists:get_value(items, Data1),
- ?line {"Installed handlers", [{_,dummy1_h,_,FmtState,_}]} = HandlerInfo1,
- ?line {status, Pid, _, [_, _, Pid, [], Data2]} = Status2,
- ?line HandlerInfo2 = proplists:get_value(items, Data2),
- ?line {"Installed handlers", [{_,dummy1_h,_,FmtState,_}]} = HandlerInfo2,
+ ok = gen_event:add_handler(my_dummy_handler, dummy1_h, [State]),
+ Status1 = sys:get_status(Pid),
+ Status2 = sys:get_status(Pid, 5000),
+ ok = gen_event:stop(Pid),
+ {status, Pid, _, [_, _, Pid, [], Data1]} = Status1,
+ HandlerInfo1 = proplists:get_value(items, Data1),
+ {"Installed handlers", [{_,dummy1_h,_,FmtState,_}]} = HandlerInfo1,
+ {status, Pid, _, [_, _, Pid, [], Data2]} = Status2,
+ HandlerInfo2 = proplists:get_value(items, Data2),
+ {"Installed handlers", [{_,dummy1_h,_,FmtState,_}]} = HandlerInfo2,
ok.
-call_format_status_anon(suite) ->
- [];
-call_format_status_anon(doc) ->
- ["Test that sys:get_status/1,2 calls format_status/2 for anonymous gen_event processes"];
+%% Test that sys:get_status/1,2 calls format_status/2 for anonymous
+%% gen_event processes.
call_format_status_anon(Config) when is_list(Config) ->
- ?line {ok, Pid} = gen_event:start(),
+ {ok, Pid} = gen_event:start(),
%% The 'Name' of the gen_event process will be a pid() here, so
%% the next line will crash if format_status can't string-ify pids.
- ?line Status1 = sys:get_status(Pid),
- ?line ok = gen_event:stop(Pid),
+ Status1 = sys:get_status(Pid),
+ ok = gen_event:stop(Pid),
Header = "Status for event handler " ++ pid_to_list(Pid),
- ?line {status, Pid, _, [_, _, Pid, [], Data1]} = Status1,
- ?line Header = proplists:get_value(header, Data1),
+ {status, Pid, _, [_, _, Pid, [], Data1]} = Status1,
+ Header = proplists:get_value(header, Data1),
ok.
-error_format_status(suite) ->
- [];
-error_format_status(doc) ->
- ["Test that a handler error calls format_status/2"];
+%% Test that a handler error calls format_status/2.
error_format_status(Config) when is_list(Config) ->
- ?line error_logger_forwarder:register(),
+ error_logger_forwarder:register(),
OldFl = process_flag(trap_exit, true),
State = self(),
- ?line {ok, Pid} = gen_event:start({local, my_dummy_handler}),
- ?line ok = gen_event:add_sup_handler(my_dummy_handler, dummy1_h, [State]),
- ?line ok = gen_event:notify(my_dummy_handler, do_crash),
- ?line receive
- {gen_event_EXIT,dummy1_h,{'EXIT',_}} -> ok
- after 5000 ->
- ?t:fail(exit_gen_event)
- end,
+ {ok, Pid} = gen_event:start({local, my_dummy_handler}),
+ ok = gen_event:add_sup_handler(my_dummy_handler, dummy1_h, [State]),
+ ok = gen_event:notify(my_dummy_handler, do_crash),
+ receive
+ {gen_event_EXIT,dummy1_h,{'EXIT',_}} -> ok
+ after 5000 ->
+ ct:fail(exit_gen_event)
+ end,
FmtState = "dummy1_h handler state",
receive
{error,_GroupLeader, {Pid,
@@ -955,18 +926,14 @@ error_format_status(Config) when is_list(Config) ->
FmtState, _]}} ->
ok;
Other ->
- ?line io:format("Unexpected: ~p", [Other]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p", [Other]),
+ ct:fail(failed)
end,
- ?t:messages_get(),
- ?line ok = gen_event:stop(Pid),
+ ok = gen_event:stop(Pid),
process_flag(trap_exit, OldFl),
ok.
-get_state(suite) ->
- [];
-get_state(doc) ->
- ["Test that sys:get_state/1,2 return the gen_event state"];
+%% Test that sys:get_state/1,2 return the gen_event state.
get_state(Config) when is_list(Config) ->
{ok, Pid} = gen_event:start({local, my_dummy_handler}),
State1 = self(),
@@ -986,10 +953,7 @@ get_state(Config) when is_list(Config) ->
ok = gen_event:stop(Pid),
ok.
-replace_state(suite) ->
- [];
-replace_state(doc) ->
- ["Test that replace_state/2,3 replace the gen_event state"];
+%% Test that replace_state/2,3 replace the gen_event state.
replace_state(Config) when is_list(Config) ->
{ok, Pid} = gen_event:start({local, my_dummy_handler}),
State1 = self(),
diff --git a/lib/stdlib/test/gen_fsm_SUITE.erl b/lib/stdlib/test/gen_fsm_SUITE.erl
index e3da1a2271..d6bb002b5f 100644
--- a/lib/stdlib/test/gen_fsm_SUITE.erl
+++ b/lib/stdlib/test/gen_fsm_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(gen_fsm_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test cases
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -44,10 +44,9 @@
-export([enter_loop/1]).
%% Exports for apply
--export([do_msg/1, do_sync_msg/1]).
-export([enter_loop/2]).
-% The gen_fsm behaviour
+%% The gen_fsm behaviour
-export([init/1, handle_event/3, handle_sync_event/4, terminate/3,
handle_info/3, format_status/2]).
-export([idle/2, idle/3,
@@ -55,7 +54,7 @@
wfor_conf/2, wfor_conf/3,
connected/2, connected/3]).
-export([state0/3]).
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -93,97 +92,95 @@ end_per_group(_GroupName, Config) ->
start1(Config) when is_list(Config) ->
%%OldFl = process_flag(trap_exit, true),
- ?line {ok, Pid0} = gen_fsm:start_link(gen_fsm_SUITE, [], []),
- ?line ok = do_func_test(Pid0),
- ?line ok = do_sync_func_test(Pid0),
+ {ok, Pid0} = gen_fsm:start_link(gen_fsm_SUITE, [], []),
+ ok = do_func_test(Pid0),
+ ok = do_sync_func_test(Pid0),
stop_it(Pid0),
-%% ?line stopped = gen_fsm:sync_send_all_state_event(Pid0, stop),
-%% ?line {'EXIT', {timeout,_}} =
-%% (catch gen_fsm:sync_send_event(Pid0, hej)),
+ %% stopped = gen_fsm:sync_send_all_state_event(Pid0, stop),
+ %% {'EXIT', {timeout,_}} =
+ %% (catch gen_fsm:sync_send_event(Pid0, hej)),
- ?line test_server:messages_get(),
+ [] = get_messages(),
%%process_flag(trap_exit, OldFl),
- ok.
+ ok.
%% anonymous w. shutdown
start2(Config) when is_list(Config) ->
%% Dont link when shutdown
- ?line {ok, Pid0} = gen_fsm:start(gen_fsm_SUITE, [], []),
- ?line ok = do_func_test(Pid0),
- ?line ok = do_sync_func_test(Pid0),
- ?line shutdown_stopped =
+ {ok, Pid0} = gen_fsm:start(gen_fsm_SUITE, [], []),
+ ok = do_func_test(Pid0),
+ ok = do_sync_func_test(Pid0),
+ shutdown_stopped =
gen_fsm:sync_send_all_state_event(Pid0, stop_shutdown),
- ?line {'EXIT', {noproc,_}} =
+ {'EXIT', {noproc,_}} =
(catch gen_fsm:sync_send_event(Pid0, hej)),
- ?line test_server:messages_get(),
+ [] = get_messages(),
ok.
%% anonymous with timeout
start3(Config) when is_list(Config) ->
%%OldFl = process_flag(trap_exit, true),
- ?line {ok, Pid0} = gen_fsm:start(gen_fsm_SUITE, [], [{timeout,5}]),
- ?line ok = do_func_test(Pid0),
- ?line ok = do_sync_func_test(Pid0),
- ?line stop_it(Pid0),
-
- ?line {error, timeout} = gen_fsm:start(gen_fsm_SUITE, sleep,
- [{timeout,5}]),
+ {ok, Pid0} = gen_fsm:start(gen_fsm_SUITE, [], [{timeout,5}]),
+ ok = do_func_test(Pid0),
+ ok = do_sync_func_test(Pid0),
+ stop_it(Pid0),
+
+ {error, timeout} = gen_fsm:start(gen_fsm_SUITE, sleep,
+ [{timeout,5}]),
- test_server:messages_get(),
+ [] = get_messages(),
%%process_flag(trap_exit, OldFl),
ok.
%% anonymous with ignore
-start4(suite) -> [];
start4(Config) when is_list(Config) ->
OldFl = process_flag(trap_exit, true),
- ?line ignore = gen_fsm:start(gen_fsm_SUITE, ignore, []),
+ ignore = gen_fsm:start(gen_fsm_SUITE, ignore, []),
- test_server:messages_get(),
+ [] = get_messages(),
process_flag(trap_exit, OldFl),
ok.
%% anonymous with stop
-start5(suite) -> [];
start5(Config) when is_list(Config) ->
OldFl = process_flag(trap_exit, true),
- ?line {error, stopped} = gen_fsm:start(gen_fsm_SUITE, stop, []),
+ {error, stopped} = gen_fsm:start(gen_fsm_SUITE, stop, []),
- test_server:messages_get(),
+ [] = get_messages(),
process_flag(trap_exit, OldFl),
ok.
%% anonymous linked
start6(Config) when is_list(Config) ->
- ?line {ok, Pid} = gen_fsm:start_link(gen_fsm_SUITE, [], []),
- ?line ok = do_func_test(Pid),
- ?line ok = do_sync_func_test(Pid),
- ?line stop_it(Pid),
+ {ok, Pid} = gen_fsm:start_link(gen_fsm_SUITE, [], []),
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ stop_it(Pid),
- test_server:messages_get(),
+ [] = get_messages(),
ok.
%% global register linked
start7(Config) when is_list(Config) ->
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_fsm:start_link({global, my_fsm}, gen_fsm_SUITE, [], []),
- ?line {error, {already_started, Pid}} =
+ {error, {already_started, Pid}} =
gen_fsm:start_link({global, my_fsm}, gen_fsm_SUITE, [], []),
- ?line {error, {already_started, Pid}} =
+ {error, {already_started, Pid}} =
gen_fsm:start({global, my_fsm}, gen_fsm_SUITE, [], []),
-
- ?line ok = do_func_test(Pid),
- ?line ok = do_sync_func_test(Pid),
- ?line ok = do_func_test({global, my_fsm}),
- ?line ok = do_sync_func_test({global, my_fsm}),
- ?line stop_it({global, my_fsm}),
-
- test_server:messages_get(),
+
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test({global, my_fsm}),
+ ok = do_sync_func_test({global, my_fsm}),
+ stop_it({global, my_fsm}),
+
+ [] = get_messages(),
ok.
@@ -191,18 +188,18 @@ start7(Config) when is_list(Config) ->
start8(Config) when is_list(Config) ->
%%OldFl = process_flag(trap_exit, true),
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_fsm:start({local, my_fsm}, gen_fsm_SUITE, [], []),
- ?line {error, {already_started, Pid}} =
+ {error, {already_started, Pid}} =
gen_fsm:start({local, my_fsm}, gen_fsm_SUITE, [], []),
- ?line ok = do_func_test(Pid),
- ?line ok = do_sync_func_test(Pid),
- ?line ok = do_func_test(my_fsm),
- ?line ok = do_sync_func_test(my_fsm),
- ?line stop_it(Pid),
-
- test_server:messages_get(),
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test(my_fsm),
+ ok = do_sync_func_test(my_fsm),
+ stop_it(Pid),
+
+ [] = get_messages(),
%%process_flag(trap_exit, OldFl),
ok.
@@ -210,80 +207,80 @@ start8(Config) when is_list(Config) ->
start9(Config) when is_list(Config) ->
%%OldFl = process_flag(trap_exit, true),
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_fsm:start_link({local, my_fsm}, gen_fsm_SUITE, [], []),
- ?line {error, {already_started, Pid}} =
+ {error, {already_started, Pid}} =
gen_fsm:start({local, my_fsm}, gen_fsm_SUITE, [], []),
- ?line ok = do_func_test(Pid),
- ?line ok = do_sync_func_test(Pid),
- ?line ok = do_func_test(my_fsm),
- ?line ok = do_sync_func_test(my_fsm),
- ?line stop_it(Pid),
-
- test_server:messages_get(),
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test(my_fsm),
+ ok = do_sync_func_test(my_fsm),
+ stop_it(Pid),
+
+ [] = get_messages(),
%%process_flag(trap_exit, OldFl),
ok.
%% global register
start10(Config) when is_list(Config) ->
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_fsm:start({global, my_fsm}, gen_fsm_SUITE, [], []),
- ?line {error, {already_started, Pid}} =
+ {error, {already_started, Pid}} =
gen_fsm:start({global, my_fsm}, gen_fsm_SUITE, [], []),
- ?line {error, {already_started, Pid}} =
+ {error, {already_started, Pid}} =
gen_fsm:start_link({global, my_fsm}, gen_fsm_SUITE, [], []),
-
- ?line ok = do_func_test(Pid),
- ?line ok = do_sync_func_test(Pid),
- ?line ok = do_func_test({global, my_fsm}),
- ?line ok = do_sync_func_test({global, my_fsm}),
- ?line stop_it({global, my_fsm}),
-
- test_server:messages_get(),
+
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test({global, my_fsm}),
+ ok = do_sync_func_test({global, my_fsm}),
+ stop_it({global, my_fsm}),
+
+ [] = get_messages(),
ok.
%% Stop registered processes
start11(Config) when is_list(Config) ->
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_fsm:start_link({local, my_fsm}, gen_fsm_SUITE, [], []),
- ?line stop_it(Pid),
+ stop_it(Pid),
- ?line {ok, _Pid1} =
+ {ok, _Pid1} =
gen_fsm:start_link({local, my_fsm}, gen_fsm_SUITE, [], []),
- ?line stop_it(my_fsm),
-
- ?line {ok, Pid2} =
+ stop_it(my_fsm),
+
+ {ok, Pid2} =
gen_fsm:start({global, my_fsm}, gen_fsm_SUITE, [], []),
- ?line stop_it(Pid2),
+ stop_it(Pid2),
receive after 1 -> true end,
- ?line Result =
+ Result =
gen_fsm:start({global, my_fsm}, gen_fsm_SUITE, [], []),
io:format("Result = ~p~n",[Result]),
- ?line {ok, _Pid3} = Result,
- ?line stop_it({global, my_fsm}),
+ {ok, _Pid3} = Result,
+ stop_it({global, my_fsm}),
- test_server:messages_get(),
+ [] = get_messages(),
ok.
%% Via register linked
start12(Config) when is_list(Config) ->
- ?line dummy_via:reset(),
- ?line {ok, Pid} =
+ dummy_via:reset(),
+ {ok, Pid} =
gen_fsm:start_link({via, dummy_via, my_fsm}, gen_fsm_SUITE, [], []),
- ?line {error, {already_started, Pid}} =
+ {error, {already_started, Pid}} =
gen_fsm:start_link({via, dummy_via, my_fsm}, gen_fsm_SUITE, [], []),
- ?line {error, {already_started, Pid}} =
+ {error, {already_started, Pid}} =
gen_fsm:start({via, dummy_via, my_fsm}, gen_fsm_SUITE, [], []),
- ?line ok = do_func_test(Pid),
- ?line ok = do_sync_func_test(Pid),
- ?line ok = do_func_test({via, dummy_via, my_fsm}),
- ?line ok = do_sync_func_test({via, dummy_via, my_fsm}),
- ?line stop_it({via, dummy_via, my_fsm}),
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test({via, dummy_via, my_fsm}),
+ ok = do_sync_func_test({via, dummy_via, my_fsm}),
+ stop_it({via, dummy_via, my_fsm}),
- test_server:messages_get(),
+ [] = get_messages(),
ok.
@@ -339,7 +336,7 @@ stop6(_Config) ->
stop7(_Config) ->
dummy_via:reset(),
{ok, Pid} = gen_fsm:start({via, dummy_via, to_stop},
- ?MODULE, [], []),
+ ?MODULE, [], []),
ok = gen_fsm:stop({via, dummy_via, to_stop}),
false = erlang:is_process_alive(Pid),
{'EXIT',noproc} = (catch gen_fsm:stop({via, dummy_via, to_stop})),
@@ -387,53 +384,57 @@ stop10(_Config) ->
ok.
%% Check that time outs in calls work
-abnormal1(suite) -> [];
abnormal1(Config) when is_list(Config) ->
{ok, _Pid} = gen_fsm:start({local, my_fsm}, gen_fsm_SUITE, [], []),
%% timeout call.
delayed = gen_fsm:sync_send_event(my_fsm, {delayed_answer,1}, 100),
{'EXIT',{timeout,_}} =
- (catch gen_fsm:sync_send_event(my_fsm, {delayed_answer,10}, 1)),
- test_server:messages_get(),
+ (catch gen_fsm:sync_send_event(my_fsm, {delayed_answer,10}, 1)),
+ receive
+ Msg ->
+ %% Ignore the delayed answer from the server.
+ io:format("Delayed message: ~p", [Msg])
+ end,
+
+ [] = get_messages(),
ok.
%% Check that bad return values makes the fsm crash. Note that we must
%% trap exit since we must link to get the real bad_return_ error
-abnormal2(suite) -> [];
abnormal2(Config) when is_list(Config) ->
OldFl = process_flag(trap_exit, true),
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_fsm:start_link(gen_fsm_SUITE, [], []),
%% bad return value in the gen_fsm loop
- ?line {'EXIT',{{bad_return_value, badreturn},_}} =
+ {'EXIT',{{bad_return_value, badreturn},_}} =
(catch gen_fsm:sync_send_event(Pid, badreturn)),
-
- test_server:messages_get(),
+
+ [{'EXIT',Pid,{bad_return_value,badreturn}}] = get_messages(),
process_flag(trap_exit, OldFl),
ok.
shutdown(Config) when is_list(Config) ->
- ?line error_logger_forwarder:register(),
+ error_logger_forwarder:register(),
process_flag(trap_exit, true),
- ?line {ok,Pid0} = gen_fsm:start_link(gen_fsm_SUITE, [], []),
- ?line ok = do_func_test(Pid0),
- ?line ok = do_sync_func_test(Pid0),
- ?line {shutdown,reason} =
+ {ok,Pid0} = gen_fsm:start_link(gen_fsm_SUITE, [], []),
+ ok = do_func_test(Pid0),
+ ok = do_sync_func_test(Pid0),
+ {shutdown,reason} =
gen_fsm:sync_send_all_state_event(Pid0, stop_shutdown_reason),
receive {'EXIT',Pid0,{shutdown,reason}} -> ok end,
process_flag(trap_exit, false),
- ?line {'EXIT', {noproc,_}} =
+ {'EXIT', {noproc,_}} =
(catch gen_fsm:sync_send_event(Pid0, hej)),
receive
Any ->
- ?line io:format("Unexpected: ~p", [Any]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p", [Any]),
+ ct:fail(failed)
after 500 ->
ok
end,
@@ -443,70 +444,70 @@ shutdown(Config) when is_list(Config) ->
sys1(Config) when is_list(Config) ->
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_fsm:start(gen_fsm_SUITE, [], []),
- ?line {status, Pid, {module,gen_fsm}, _} = sys:get_status(Pid),
- ?line sys:suspend(Pid),
- ?line {'EXIT', {timeout,_}} =
+ {status, Pid, {module,gen_fsm}, _} = sys:get_status(Pid),
+ sys:suspend(Pid),
+ {'EXIT', {timeout,_}} =
(catch gen_fsm:sync_send_event(Pid, hej)),
- ?line sys:resume(Pid),
- ?line stop_it(Pid).
+ sys:resume(Pid),
+ stop_it(Pid).
call_format_status(Config) when is_list(Config) ->
- ?line {ok, Pid} = gen_fsm:start(gen_fsm_SUITE, [], []),
- ?line Status = sys:get_status(Pid),
- ?line {status, Pid, _Mod, [_PDict, running, _, _, Data]} = Status,
- ?line [format_status_called | _] = lists:reverse(Data),
- ?line stop_it(Pid),
+ {ok, Pid} = gen_fsm:start(gen_fsm_SUITE, [], []),
+ Status = sys:get_status(Pid),
+ {status, Pid, _Mod, [_PDict, running, _, _, Data]} = Status,
+ [format_status_called | _] = lists:reverse(Data),
+ stop_it(Pid),
%% check that format_status can handle a name being an atom (pid is
%% already checked by the previous test)
- ?line {ok, Pid2} = gen_fsm:start({local, gfsm}, gen_fsm_SUITE, [], []),
- ?line Status2 = sys:get_status(gfsm),
- ?line {status, Pid2, _Mod, [_PDict2, running, _, _, Data2]} = Status2,
- ?line [format_status_called | _] = lists:reverse(Data2),
- ?line stop_it(Pid2),
+ {ok, Pid2} = gen_fsm:start({local, gfsm}, gen_fsm_SUITE, [], []),
+ Status2 = sys:get_status(gfsm),
+ {status, Pid2, _Mod, [_PDict2, running, _, _, Data2]} = Status2,
+ [format_status_called | _] = lists:reverse(Data2),
+ stop_it(Pid2),
%% check that format_status can handle a name being a term other than a
%% pid or atom
GlobalName1 = {global, "CallFormatStatus"},
- ?line {ok, Pid3} = gen_fsm:start(GlobalName1, gen_fsm_SUITE, [], []),
- ?line Status3 = sys:get_status(GlobalName1),
- ?line {status, Pid3, _Mod, [_PDict3, running, _, _, Data3]} = Status3,
- ?line [format_status_called | _] = lists:reverse(Data3),
- ?line stop_it(Pid3),
+ {ok, Pid3} = gen_fsm:start(GlobalName1, gen_fsm_SUITE, [], []),
+ Status3 = sys:get_status(GlobalName1),
+ {status, Pid3, _Mod, [_PDict3, running, _, _, Data3]} = Status3,
+ [format_status_called | _] = lists:reverse(Data3),
+ stop_it(Pid3),
GlobalName2 = {global, {name, "term"}},
- ?line {ok, Pid4} = gen_fsm:start(GlobalName2, gen_fsm_SUITE, [], []),
- ?line Status4 = sys:get_status(GlobalName2),
- ?line {status, Pid4, _Mod, [_PDict4, running, _, _, Data4]} = Status4,
- ?line [format_status_called | _] = lists:reverse(Data4),
- ?line stop_it(Pid4),
+ {ok, Pid4} = gen_fsm:start(GlobalName2, gen_fsm_SUITE, [], []),
+ Status4 = sys:get_status(GlobalName2),
+ {status, Pid4, _Mod, [_PDict4, running, _, _, Data4]} = Status4,
+ [format_status_called | _] = lists:reverse(Data4),
+ stop_it(Pid4),
%% check that format_status can handle a name being a term other than a
%% pid or atom
- ?line dummy_via:reset(),
+ dummy_via:reset(),
ViaName1 = {via, dummy_via, "CallFormatStatus"},
- ?line {ok, Pid5} = gen_fsm:start(ViaName1, gen_fsm_SUITE, [], []),
- ?line Status5 = sys:get_status(ViaName1),
- ?line {status, Pid5, _Mod, [_PDict5, running, _, _, Data5]} = Status5,
- ?line [format_status_called | _] = lists:reverse(Data5),
- ?line stop_it(Pid5),
+ {ok, Pid5} = gen_fsm:start(ViaName1, gen_fsm_SUITE, [], []),
+ Status5 = sys:get_status(ViaName1),
+ {status, Pid5, _Mod, [_PDict5, running, _, _, Data5]} = Status5,
+ [format_status_called | _] = lists:reverse(Data5),
+ stop_it(Pid5),
ViaName2 = {via, dummy_via, {name, "term"}},
- ?line {ok, Pid6} = gen_fsm:start(ViaName2, gen_fsm_SUITE, [], []),
- ?line Status6 = sys:get_status(ViaName2),
- ?line {status, Pid6, _Mod, [_PDict6, running, _, _, Data6]} = Status6,
- ?line [format_status_called | _] = lists:reverse(Data6),
- ?line stop_it(Pid6).
+ {ok, Pid6} = gen_fsm:start(ViaName2, gen_fsm_SUITE, [], []),
+ Status6 = sys:get_status(ViaName2),
+ {status, Pid6, _Mod, [_PDict6, running, _, _, Data6]} = Status6,
+ [format_status_called | _] = lists:reverse(Data6),
+ stop_it(Pid6).
error_format_status(Config) when is_list(Config) ->
- ?line error_logger_forwarder:register(),
+ error_logger_forwarder:register(),
OldFl = process_flag(trap_exit, true),
StateData = "called format_status",
- ?line {ok, Pid} = gen_fsm:start(gen_fsm_SUITE, {state_data, StateData}, []),
+ {ok, Pid} = gen_fsm:start(gen_fsm_SUITE, {state_data, StateData}, []),
%% bad return value in the gen_fsm loop
- ?line {'EXIT',{{bad_return_value, badreturn},_}} =
+ {'EXIT',{{bad_return_value, badreturn},_}} =
(catch gen_fsm:sync_send_event(Pid, badreturn)),
receive
{error,_GroupLeader,{Pid,
@@ -514,10 +515,9 @@ error_format_status(Config) when is_list(Config) ->
[Pid,{_,_,badreturn},idle,{formatted,StateData},_]}} ->
ok;
Other ->
- ?line io:format("Unexpected: ~p", [Other]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p", [Other]),
+ ct:fail(failed)
end,
- ?t:messages_get(),
process_flag(trap_exit, OldFl),
ok.
@@ -534,12 +534,11 @@ terminate_crash_format(Config) when is_list(Config) ->
ok;
Other ->
io:format("Unexpected: ~p", [Other]),
- ?t:fail()
+ ct:fail(failed)
after 5000 ->
io:format("Timeout: expected error logger msg", []),
- ?t:fail()
+ ct:fail(failed)
end,
- _ = ?t:messages_get(),
process_flag(trap_exit, OldFl),
ok.
@@ -603,7 +602,9 @@ hibernate(Config) when is_list(Config) ->
{ok, Pid0} = gen_fsm:start_link(?MODULE, hiber_now, []),
is_in_erlang_hibernate(Pid0),
stop_it(Pid0),
- test_server:messages_get(),
+ receive
+ {'EXIT',Pid0,normal} -> ok
+ end,
{ok, Pid} = gen_fsm:start_link(?MODULE, hiber, []),
true = ({current_function,{erlang,hibernate,3}} =/=
@@ -677,7 +678,11 @@ hibernate(Config) when is_list(Config) ->
good_morning = gen_fsm:sync_send_all_state_event(Pid, wakeup_sync),
is_not_in_erlang_hibernate(Pid),
stop_it(Pid),
- test_server:messages_get(),
+ receive
+ {'EXIT',Pid,normal} -> ok
+ end,
+
+ [] = get_messages(),
process_flag(trap_exit, OldFl),
ok.
@@ -687,7 +692,7 @@ is_in_erlang_hibernate(Pid) ->
is_in_erlang_hibernate_1(0, Pid) ->
io:format("~p\n", [erlang:process_info(Pid, current_function)]),
- ?t:fail(not_in_erlang_hibernate_3);
+ ct:fail(not_in_erlang_hibernate_3);
is_in_erlang_hibernate_1(N, Pid) ->
{current_function,MFA} = erlang:process_info(Pid, current_function),
case MFA of
@@ -704,7 +709,7 @@ is_not_in_erlang_hibernate(Pid) ->
is_not_in_erlang_hibernate_1(0, Pid) ->
io:format("~p\n", [erlang:process_info(Pid, current_function)]),
- ?t:fail(not_in_erlang_hibernate_3);
+ ct:fail(not_in_erlang_hibernate_3);
is_not_in_erlang_hibernate_1(N, Pid) ->
{current_function,MFA} = erlang:process_info(Pid, current_function),
case MFA of
@@ -715,108 +720,102 @@ is_not_in_erlang_hibernate_1(N, Pid) ->
ok
end.
-%%sys1(suite) -> [];
-%%sys1(_) ->
-
-enter_loop(suite) ->
- [];
-enter_loop(doc) ->
- ["Test gen_fsm:enter_loop/4,5,6"];
+%% Test gen_fsm:enter_loop/4,5,6.
enter_loop(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
- ?line dummy_via:reset(),
+ dummy_via:reset(),
%% Locally registered process + {local, Name}
- ?line {ok, Pid1a} =
+ {ok, Pid1a} =
proc_lib:start_link(?MODULE, enter_loop, [local, local]),
- ?line yes = gen_fsm:sync_send_event(Pid1a, 'alive?'),
- ?line stopped = gen_fsm:sync_send_event(Pid1a, stop),
+ yes = gen_fsm:sync_send_event(Pid1a, 'alive?'),
+ stopped = gen_fsm:sync_send_event(Pid1a, stop),
receive
{'EXIT', Pid1a, normal} ->
ok
after 5000 ->
- ?line test_server:fail(gen_fsm_did_not_die)
+ ct:fail(gen_fsm_did_not_die)
end,
%% Unregistered process + {local, Name}
- ?line {ok, Pid1b} =
+ {ok, Pid1b} =
proc_lib:start_link(?MODULE, enter_loop, [anon, local]),
receive
{'EXIT', Pid1b, process_not_registered} ->
ok
after 5000 ->
- ?line test_server:fail(gen_fsm_did_not_die)
+ ct:fail(gen_fsm_did_not_die)
end,
%% Globally registered process + {global, Name}
- ?line {ok, Pid2a} =
+ {ok, Pid2a} =
proc_lib:start_link(?MODULE, enter_loop, [global, global]),
- ?line yes = gen_fsm:sync_send_event(Pid2a, 'alive?'),
- ?line stopped = gen_fsm:sync_send_event(Pid2a, stop),
+ yes = gen_fsm:sync_send_event(Pid2a, 'alive?'),
+ stopped = gen_fsm:sync_send_event(Pid2a, stop),
receive
{'EXIT', Pid2a, normal} ->
ok
after 5000 ->
- ?line test_server:fail(gen_fsm_did_not_die)
+ ct:fail(gen_fsm_did_not_die)
end,
%% Unregistered process + {global, Name}
- ?line {ok, Pid2b} =
+ {ok, Pid2b} =
proc_lib:start_link(?MODULE, enter_loop, [anon, global]),
receive
{'EXIT', Pid2b, process_not_registered_globally} ->
ok
after 5000 ->
- ?line test_server:fail(gen_fsm_did_not_die)
+ ct:fail(gen_fsm_did_not_die)
end,
%% Unregistered process + no name
- ?line {ok, Pid3} =
+ {ok, Pid3} =
proc_lib:start_link(?MODULE, enter_loop, [anon, anon]),
- ?line yes = gen_fsm:sync_send_event(Pid3, 'alive?'),
- ?line stopped = gen_fsm:sync_send_event(Pid3, stop),
+ yes = gen_fsm:sync_send_event(Pid3, 'alive?'),
+ stopped = gen_fsm:sync_send_event(Pid3, stop),
receive
{'EXIT', Pid3, normal} ->
ok
after 5000 ->
- ?line test_server:fail(gen_fsm_did_not_die)
+ ct:fail(gen_fsm_did_not_die)
end,
%% Process not started using proc_lib
- ?line Pid4 =
+ Pid4 =
spawn_link(gen_fsm, enter_loop, [?MODULE, [], state0, []]),
receive
{'EXIT', Pid4, process_was_not_started_by_proc_lib} ->
ok
after 5000 ->
- ?line test_server:fail(gen_fsm_did_not_die)
+ ct:fail(gen_fsm_did_not_die)
end,
%% Make sure I am the parent, ie that ordering a shutdown will
%% result in the process terminating with Reason==shutdown
- ?line {ok, Pid5} =
+ {ok, Pid5} =
proc_lib:start_link(?MODULE, enter_loop, [anon, anon]),
- ?line yes = gen_fsm:sync_send_event(Pid5, 'alive?'),
- ?line exit(Pid5, shutdown),
+ yes = gen_fsm:sync_send_event(Pid5, 'alive?'),
+ exit(Pid5, shutdown),
receive
{'EXIT', Pid5, shutdown} ->
ok
after 5000 ->
- ?line test_server:fail(gen_fsm_did_not_die)
+ ct:fail(gen_fsm_did_not_die)
end,
%% Make sure gen_fsm:enter_loop does not accept {local,Name}
%% when it's another process than the calling one which is
%% registered under that name
register(armitage, self()),
- ?line {ok, Pid6a} =
+ {ok, Pid6a} =
proc_lib:start_link(?MODULE, enter_loop, [anon, local]),
receive
{'EXIT', Pid6a, process_not_registered} ->
ok
after 1000 ->
- ?line test_server:fail(gen_fsm_started)
+ ct:fail(gen_fsm_started)
end,
unregister(armitage),
@@ -824,25 +823,24 @@ enter_loop(Config) when is_list(Config) ->
%% when it's another process than the calling one which is
%% registered under that name
global:register_name(armitage, self()),
- ?line {ok, Pid6b} =
+ {ok, Pid6b} =
proc_lib:start_link(?MODULE, enter_loop, [anon, global]),
receive
{'EXIT', Pid6b, process_not_registered_globally} ->
ok
after 1000 ->
- ?line test_server:fail(gen_fsm_started)
+ ct:fail(gen_fsm_started)
end,
global:unregister_name(armitage),
dummy_via:register_name(armitage, self()),
- ?line {ok, Pid6c} =
+ {ok, Pid6c} =
proc_lib:start_link(?MODULE, enter_loop, [anon, via]),
receive
{'EXIT', Pid6c, {process_not_registered_via, dummy_via}} ->
ok
after 1000 ->
- ?line test_server:fail({gen_fsm_started, process_info(self(),
- messages)})
+ ct:fail({gen_fsm_started, process_info(self(), messages)})
end,
dummy_via:unregister_name(armitage),
@@ -883,8 +881,8 @@ wfor(Msg) ->
stop_it(FSM) ->
- ?line stopped = gen_fsm:sync_send_all_state_event(FSM, stop),
- ?line {'EXIT',_} = (catch gen_fsm:sync_send_event(FSM, hej)),
+ stopped = gen_fsm:sync_send_all_state_event(FSM, stop),
+ {'EXIT',_} = (catch gen_fsm:sync_send_event(FSM, hej)),
ok.
@@ -895,7 +893,7 @@ do_func_test(FSM) ->
ok = do_connect(FSM),
ok = gen_fsm:send_all_state_event(FSM, {'alive?', self()}),
wfor(yes),
- test_server:do_times(3, ?MODULE, do_msg, [FSM]),
+ _ = [do_msg(FSM) || _ <- lists:seq(1, 3)],
ok = gen_fsm:send_all_state_event(FSM, {'alive?', self()}),
wfor(yes),
ok = do_disconnect(FSM),
@@ -933,7 +931,7 @@ do_sync_func_test(FSM) ->
yes = gen_fsm:sync_send_all_state_event(FSM, 'alive?'),
ok = do_sync_connect(FSM),
yes = gen_fsm:sync_send_all_state_event(FSM, 'alive?'),
- test_server:do_times(3, ?MODULE, do_sync_msg, [FSM]),
+ _ = [do_sync_msg(FSM) || _ <- lists:seq(1, 3)],
yes = gen_fsm:sync_send_all_state_event(FSM, 'alive?'),
ok = do_sync_disconnect(FSM),
yes = gen_fsm:sync_send_all_state_event(FSM, 'alive?'),
@@ -964,7 +962,7 @@ do_sync_disconnect(FSM) ->
yes = gen_fsm:sync_send_event(FSM, disconnect),
check_state(FSM, idle).
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
@@ -979,7 +977,7 @@ init(stop) ->
init(stop_shutdown) ->
{stop, shutdown};
init(sleep) ->
- test_server:sleep(1000),
+ timer:sleep(1000),
{ok, idle, data};
init({timeout, T}) ->
{ok, idle, state, T};
@@ -1012,7 +1010,7 @@ idle(_, Data) ->
idle({connect, _Pid}, _From, Data) ->
{reply, accept, wfor_conf, Data};
idle({delayed_answer, T}, _From, Data) ->
- test_server:sleep(T),
+ timer:sleep(T),
{reply, delayed, idle, Data};
idle(badreturn, _From, _Data) ->
badreturn;
@@ -1070,8 +1068,8 @@ hiber_idle('alive?', _From, Data) ->
{reply, 'alive!', hiber_idle, Data};
hiber_idle(hibernate_sync, _From, Data) ->
{reply, hibernating, hiber_wakeup, Data,hibernate}.
-hiber_idle(timeout, hibernate_me) -> % Arrive here from
- % handle_info(hibernate_later,...)
+hiber_idle(timeout, hibernate_me) ->
+ %% Arrive here from handle_info(hibernate_later,...)
{next_state, hiber_idle, [], hibernate};
hiber_idle(hibernate_async, Data) ->
{next_state,hiber_wakeup, Data, hibernate}.
@@ -1084,9 +1082,10 @@ hiber_wakeup(wakeup_async,Data) ->
{next_state,hiber_idle,Data};
hiber_wakeup(snooze_async,Data) ->
{next_state,hiber_wakeup,Data,hibernate}.
-
-handle_info(hibernate_now, _SName, _State) -> % Arrive here from by direct ! from testcase
+
+handle_info(hibernate_now, _SName, _State) ->
+ %% Arrive here from by direct ! from testcase
{next_state, hiber_idle, [], hibernate};
handle_info(hibernate_later, _SName, _State) ->
{next_state, hiber_idle, hibernate_me, 1000};
@@ -1134,3 +1133,9 @@ format_status(terminate, [_Pdict, StateData]) ->
{formatted, StateData};
format_status(normal, [_Pdict, _StateData]) ->
[format_status_called].
+
+get_messages() ->
+ receive
+ Msg -> [Msg|get_messages()]
+ after 1 -> []
+ end.
diff --git a/lib/stdlib/test/gen_server_SUITE.erl b/lib/stdlib/test/gen_server_SUITE.erl
index 0ae763a48d..338cd3dc0a 100644
--- a/lib/stdlib/test/gen_server_SUITE.erl
+++ b/lib/stdlib/test/gen_server_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(gen_server_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/inet.hrl").
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -40,7 +40,7 @@
-export([stop1/1, stop2/1, stop3/1, stop4/1, stop5/1, stop6/1, stop7/1,
stop8/1, stop9/1, stop10/1]).
-% spawn export
+%% spawn export
-export([spec_init_local/2, spec_init_global/2, spec_init_via/2,
spec_init_default_timeout/2, spec_init_global_default_timeout/2,
spec_init_anonymous/1,
@@ -48,11 +48,13 @@
spec_init_not_proc_lib/1, cast_fast_messup/0]).
-% The gen_server behaviour
+%% The gen_server behaviour
-export([init/1, handle_call/3, handle_cast/2,
handle_info/2, terminate/2, format_status/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[start, {group,stop}, crash, call, cast, cast_fast, info, abcast,
@@ -83,8 +85,6 @@ end_per_group(_GroupName, Config) ->
Config.
--define(default_timeout, ?t:minutes(1)).
-
init_per_testcase(Case, Config) when Case == call_remote1;
Case == call_remote2;
Case == call_remote3;
@@ -92,11 +92,10 @@ init_per_testcase(Case, Config) when Case == call_remote1;
Case == call_remote_n2;
Case == call_remote_n3 ->
{ok,N} = start_node(hubba),
- ?line Dog = ?t:timetrap(?default_timeout),
- [{node,N},{watchdog, Dog} | Config];
+ [{node,N} | Config];
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
+ Config.
+
end_per_testcase(_Case, Config) ->
case proplists:get_value(node, Config) of
undefined ->
@@ -104,8 +103,6 @@ end_per_testcase(_Case, Config) ->
N ->
test_server:stop_node(N)
end,
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
ok.
@@ -113,131 +110,133 @@ end_per_testcase(_Case, Config) ->
%% Start and stop a gen_server.
%% --------------------------------------
-start(suite) -> [];
start(Config) when is_list(Config) ->
OldFl = process_flag(trap_exit, true),
%% anonymous
- ?line {ok, Pid0} = gen_server:start(gen_server_SUITE, [], []),
- ?line ok = gen_server:call(Pid0, started_p),
- ?line ok = gen_server:call(Pid0, stop),
- ?line busy_wait_for_process(Pid0,600),
- ?line {'EXIT', {noproc,_}} = (catch gen_server:call(Pid0, started_p, 1)),
+ {ok, Pid0} = gen_server:start(gen_server_SUITE, [], []),
+ ok = gen_server:call(Pid0, started_p),
+ ok = gen_server:call(Pid0, stop),
+ busy_wait_for_process(Pid0,600),
+ {'EXIT', {noproc,_}} = (catch gen_server:call(Pid0, started_p, 1)),
%% anonymous with timeout
- ?line {ok, Pid00} = gen_server:start(gen_server_SUITE, [],
- [{timeout,1000}]),
- ?line ok = gen_server:call(Pid00, started_p),
- ?line ok = gen_server:call(Pid00, stop),
- ?line {error, timeout} = gen_server:start(gen_server_SUITE, sleep,
- [{timeout,100}]),
+ {ok, Pid00} = gen_server:start(gen_server_SUITE, [],
+ [{timeout,1000}]),
+ ok = gen_server:call(Pid00, started_p),
+ ok = gen_server:call(Pid00, stop),
+ {error, timeout} = gen_server:start(gen_server_SUITE, sleep,
+ [{timeout,100}]),
%% anonymous with ignore
- ?line ignore = gen_server:start(gen_server_SUITE, ignore, []),
+ ignore = gen_server:start(gen_server_SUITE, ignore, []),
%% anonymous with stop
- ?line {error, stopped} = gen_server:start(gen_server_SUITE, stop, []),
+ {error, stopped} = gen_server:start(gen_server_SUITE, stop, []),
%% anonymous linked
- ?line {ok, Pid1} =
+ {ok, Pid1} =
gen_server:start_link(gen_server_SUITE, [], []),
- ?line ok = gen_server:call(Pid1, started_p),
- ?line ok = gen_server:call(Pid1, stop),
- ?line receive
- {'EXIT', Pid1, stopped} ->
- ok
- after 5000 ->
- test_server:fail(not_stopped)
- end,
+ ok = gen_server:call(Pid1, started_p),
+ ok = gen_server:call(Pid1, stop),
+ receive
+ {'EXIT', Pid1, stopped} ->
+ ok
+ after 5000 ->
+ ct:fail(not_stopped)
+ end,
%% local register
- ?line {ok, Pid2} =
+ {ok, Pid2} =
gen_server:start({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, started_p),
- ?line {error, {already_started, Pid2}} =
+ ok = gen_server:call(my_test_name, started_p),
+ {error, {already_started, Pid2}} =
gen_server:start({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, stop),
+ ok = gen_server:call(my_test_name, stop),
- ?line busy_wait_for_process(Pid2,600),
+ busy_wait_for_process(Pid2,600),
- ?line {'EXIT', {noproc,_}} = (catch gen_server:call(Pid2, started_p, 10)),
+ {'EXIT', {noproc,_}} = (catch gen_server:call(Pid2, started_p, 10)),
%% local register linked
- ?line {ok, Pid3} =
+ {ok, Pid3} =
gen_server:start_link({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, started_p),
- ?line {error, {already_started, Pid3}} =
+ ok = gen_server:call(my_test_name, started_p),
+ {error, {already_started, Pid3}} =
gen_server:start({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, stop),
- ?line receive
- {'EXIT', Pid3, stopped} ->
- ok
- after 5000 ->
- test_server:fail(not_stopped)
- end,
+ ok = gen_server:call(my_test_name, stop),
+ receive
+ {'EXIT', Pid3, stopped} ->
+ ok
+ after 5000 ->
+ ct:fail(not_stopped)
+ end,
%% global register
- ?line {ok, Pid4} =
+ {ok, Pid4} =
gen_server:start({global, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call({global, my_test_name}, started_p),
- ?line {error, {already_started, Pid4}} =
+ ok = gen_server:call({global, my_test_name}, started_p),
+ {error, {already_started, Pid4}} =
gen_server:start({global, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call({global, my_test_name}, stop),
- test_server:sleep(1),
- ?line {'EXIT', {noproc,_}} = (catch gen_server:call(Pid4, started_p, 10)),
+ ok = gen_server:call({global, my_test_name}, stop),
+ busy_wait_for_process(Pid4,600),
+ {'EXIT', {noproc,_}} = (catch gen_server:call(Pid4, started_p, 10)),
%% global register linked
- ?line {ok, Pid5} =
+ {ok, Pid5} =
gen_server:start_link({global, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call({global, my_test_name}, started_p),
- ?line {error, {already_started, Pid5}} =
+ ok = gen_server:call({global, my_test_name}, started_p),
+ {error, {already_started, Pid5}} =
gen_server:start({global, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call({global, my_test_name}, stop),
- ?line receive
- {'EXIT', Pid5, stopped} ->
- ok
- after 5000 ->
- test_server:fail(not_stopped)
- end,
+ ok = gen_server:call({global, my_test_name}, stop),
+ receive
+ {'EXIT', Pid5, stopped} ->
+ ok
+ after 5000 ->
+ ct:fail(not_stopped)
+ end,
%% via register
- ?line dummy_via:reset(),
- ?line {ok, Pid6} =
+ dummy_via:reset(),
+ {ok, Pid6} =
gen_server:start({via, dummy_via, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call({via, dummy_via, my_test_name}, started_p),
- ?line {error, {already_started, Pid6}} =
+ ok = gen_server:call({via, dummy_via, my_test_name}, started_p),
+ {error, {already_started, Pid6}} =
gen_server:start({via, dummy_via, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call({via, dummy_via, my_test_name}, stop),
- test_server:sleep(1),
- ?line {'EXIT', {noproc,_}} = (catch gen_server:call(Pid6, started_p, 10)),
+ ok = gen_server:call({via, dummy_via, my_test_name}, stop),
+ busy_wait_for_process(Pid6,600),
+ {'EXIT', {noproc,_}} = (catch gen_server:call(Pid6, started_p, 10)),
%% via register linked
- ?line dummy_via:reset(),
- ?line {ok, Pid7} =
+ dummy_via:reset(),
+ {ok, Pid7} =
gen_server:start_link({via, dummy_via, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call({via, dummy_via, my_test_name}, started_p),
- ?line {error, {already_started, Pid7}} =
+ ok = gen_server:call({via, dummy_via, my_test_name}, started_p),
+ {error, {already_started, Pid7}} =
gen_server:start({via, dummy_via, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call({via, dummy_via, my_test_name}, stop),
- ?line receive
- {'EXIT', Pid7, stopped} ->
- ok
- after 5000 ->
- test_server:fail(not_stopped)
- end,
- test_server:messages_get(),
+ ok = gen_server:call({via, dummy_via, my_test_name}, stop),
+ receive
+ {'EXIT', Pid7, stopped} ->
+ ok
+ after 5000 ->
+ ct:fail(not_stopped)
+ end,
+ receive
+ Msg -> ct:fail({unexpected,Msg})
+ after 1 -> ok
+ end,
process_flag(trap_exit, OldFl),
ok.
@@ -294,7 +293,7 @@ stop6(_Config) ->
stop7(_Config) ->
dummy_via:reset(),
{ok, Pid} = gen_server:start({via, dummy_via, to_stop},
- ?MODULE, [], []),
+ ?MODULE, [], []),
ok = gen_server:stop({via, dummy_via, to_stop}),
false = erlang:is_process_alive(Pid),
{'EXIT',noproc} = (catch gen_server:stop({via, dummy_via, to_stop})),
@@ -342,31 +341,31 @@ stop10(_Config) ->
ok.
crash(Config) when is_list(Config) ->
- ?line error_logger_forwarder:register(),
+ error_logger_forwarder:register(),
process_flag(trap_exit, true),
%% This crash should not generate a crash report.
- ?line {ok,Pid0} = gen_server:start_link(?MODULE, [], []),
- ?line {'EXIT',{{shutdown,reason},_}} =
+ {ok,Pid0} = gen_server:start_link(?MODULE, [], []),
+ {'EXIT',{{shutdown,reason},_}} =
(catch gen_server:call(Pid0, shutdown_reason)),
receive {'EXIT',Pid0,{shutdown,reason}} -> ok end,
%% This crash should not generate a crash report.
- ?line {ok,Pid1} = gen_server:start_link(?MODULE, {state,state1}, []),
- ?line {'EXIT',{{shutdown,stop_reason},_}} =
+ {ok,Pid1} = gen_server:start_link(?MODULE, {state,state1}, []),
+ {'EXIT',{{shutdown,stop_reason},_}} =
(catch gen_server:call(Pid1, stop_shutdown_reason)),
receive {'EXIT',Pid1,{shutdown,stop_reason}} -> ok end,
%% This crash should not generate a crash report.
- ?line {ok,Pid2} = gen_server:start_link(?MODULE, [], []),
- ?line {'EXIT',{shutdown,_}} =
+ {ok,Pid2} = gen_server:start_link(?MODULE, [], []),
+ {'EXIT',{shutdown,_}} =
(catch gen_server:call(Pid2, exit_shutdown)),
receive {'EXIT',Pid2,shutdown} -> ok end,
%% This crash should not generate a crash report.
- ?line {ok,Pid3} = gen_server:start_link(?MODULE, {state,state3}, []),
- ?line {'EXIT',{shutdown,_}} =
+ {ok,Pid3} = gen_server:start_link(?MODULE, {state,state3}, []),
+ {'EXIT',{shutdown,_}} =
(catch gen_server:call(Pid3, stop_shutdown)),
receive {'EXIT',Pid3,shutdown} -> ok end,
@@ -374,8 +373,8 @@ crash(Config) when is_list(Config) ->
%% This crash should generate a crash report and a report
%% from gen_server.
- ?line {ok,Pid4} = gen_server:start(?MODULE, {state,state4}, []),
- ?line {'EXIT',{crashed,_}} = (catch gen_server:call(Pid4, crash)),
+ {ok,Pid4} = gen_server:start(?MODULE, {state,state4}, []),
+ {'EXIT',{crashed,_}} = (catch gen_server:call(Pid4, crash)),
receive
{error,_GroupLeader4,{Pid4,
"** Generic server"++_,
@@ -384,22 +383,22 @@ crash(Config) when is_list(Config) ->
|_Stacktrace]}]}} ->
ok;
Other4a ->
- ?line io:format("Unexpected: ~p", [Other4a]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p", [Other4a]),
+ ct:fail(failed)
end,
receive
{error_report,_,{Pid4,crash_report,[List4|_]}} ->
{exit,crashed,_} = proplists:get_value(error_info, List4),
Pid4 = proplists:get_value(pid, List4);
Other4 ->
- ?line io:format("Unexpected: ~p", [Other4]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p", [Other4]),
+ ct:fail(failed)
end,
receive
Any ->
- ?line io:format("Unexpected: ~p", [Any]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p", [Any]),
+ ct:fail(failed)
after 500 ->
ok
end,
@@ -412,32 +411,31 @@ crash(Config) when is_list(Config) ->
%% handle_call.
%% --------------------------------------
-call(suite) -> [];
call(Config) when is_list(Config) ->
OldFl = process_flag(trap_exit, true),
- ?line {ok, _Pid} =
+ {ok, _Pid} =
gen_server:start_link({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, started_p),
- ?line delayed = gen_server:call(my_test_name, {delayed_answer,1}),
+ ok = gen_server:call(my_test_name, started_p),
+ delayed = gen_server:call(my_test_name, {delayed_answer,1}),
%% two requests within a specified time.
- ?line ok = gen_server:call(my_test_name, {call_within, 1000}),
- test_server:sleep(500),
- ?line ok = gen_server:call(my_test_name, next_call),
- ?line ok = gen_server:call(my_test_name, {call_within, 1000}),
- test_server:sleep(1500),
- ?line false = gen_server:call(my_test_name, next_call),
-
+ ok = gen_server:call(my_test_name, {call_within, 1000}),
+ timer:sleep(500),
+ ok = gen_server:call(my_test_name, next_call),
+ ok = gen_server:call(my_test_name, {call_within, 1000}),
+ timer:sleep(1500),
+ false = gen_server:call(my_test_name, next_call),
+
%% timeout call.
- ?line delayed = gen_server:call(my_test_name, {delayed_answer,1}, 30),
- ?line {'EXIT',{timeout,_}} =
+ delayed = gen_server:call(my_test_name, {delayed_answer,1}, 30),
+ {'EXIT',{timeout,_}} =
(catch gen_server:call(my_test_name, {delayed_answer,30}, 1)),
%% bad return value in the gen_server loop from handle_call.
- ?line {'EXIT',{{bad_return_value, badreturn},_}} =
+ {'EXIT',{{bad_return_value, badreturn},_}} =
(catch gen_server:call(my_test_name, badreturn)),
process_flag(trap_exit, OldFl),
@@ -448,92 +446,86 @@ call(Config) when is_list(Config) ->
%% --------------------------------------
start_node(Name) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line N = test_server:start_node(Name, slave, [{args, " -pa " ++ Pa}]),
+ Pa = filename:dirname(code:which(?MODULE)),
+ N = test_server:start_node(Name, slave, [{args, " -pa " ++ Pa}]),
%% After starting a slave, it takes a little while until global knows
%% about it, even if nodes() includes it, so we make sure that global
%% knows about it before registering something on all nodes.
global:sync(),
N.
-call_remote1(suite) -> [];
call_remote1(Config) when is_list(Config) ->
N = hubba,
- ?line Node = proplists:get_value(node,Config),
- ?line {ok, Pid} = rpc:call(Node, gen_server, start,
- [{global, N}, ?MODULE, [], []]),
- ?line ok = (catch gen_server:call({global, N}, started_p, infinity)),
- ?line exit(Pid, boom),
- ?line {'EXIT', {Reason, _}} = (catch gen_server:call({global, N},
- started_p, infinity)),
- ?line true = (Reason == noproc) orelse (Reason == boom),
+ Node = proplists:get_value(node,Config),
+ {ok, Pid} = rpc:call(Node, gen_server, start,
+ [{global, N}, ?MODULE, [], []]),
+ ok = (catch gen_server:call({global, N}, started_p, infinity)),
+ exit(Pid, boom),
+ {'EXIT', {Reason, _}} = (catch gen_server:call({global, N},
+ started_p, infinity)),
+ true = (Reason == noproc) orelse (Reason == boom),
ok.
-call_remote2(suite) -> [];
call_remote2(Config) when is_list(Config) ->
- ?line N = hubba,
- ?line Node = proplists:get_value(node,Config),
-
- ?line {ok, Pid} = rpc:call(Node, gen_server, start,
- [{global, N}, ?MODULE, [], []]),
- ?line ok = (catch gen_server:call(Pid, started_p, infinity)),
- ?line exit(Pid, boom),
- ?line {'EXIT', {Reason, _}} = (catch gen_server:call(Pid,
- started_p, infinity)),
- ?line true = (Reason == noproc) orelse (Reason == boom),
+ N = hubba,
+ Node = proplists:get_value(node,Config),
+
+ {ok, Pid} = rpc:call(Node, gen_server, start,
+ [{global, N}, ?MODULE, [], []]),
+ ok = (catch gen_server:call(Pid, started_p, infinity)),
+ exit(Pid, boom),
+ {'EXIT', {Reason, _}} = (catch gen_server:call(Pid,
+ started_p, infinity)),
+ true = (Reason == noproc) orelse (Reason == boom),
ok.
-call_remote3(suite) -> [];
call_remote3(Config) when is_list(Config) ->
- ?line Node = proplists:get_value(node,Config),
-
- ?line {ok, Pid} = rpc:call(Node, gen_server, start,
- [{local, piller}, ?MODULE, [], []]),
- ?line ok = (catch gen_server:call({piller, Node}, started_p, infinity)),
- ?line exit(Pid, boom),
- ?line {'EXIT', {Reason, _}} = (catch gen_server:call({piller, Node},
- started_p, infinity)),
- ?line true = (Reason == noproc) orelse (Reason == boom),
+ Node = proplists:get_value(node,Config),
+
+ {ok, Pid} = rpc:call(Node, gen_server, start,
+ [{local, piller}, ?MODULE, [], []]),
+ ok = (catch gen_server:call({piller, Node}, started_p, infinity)),
+ exit(Pid, boom),
+ {'EXIT', {Reason, _}} = (catch gen_server:call({piller, Node},
+ started_p, infinity)),
+ true = (Reason == noproc) orelse (Reason == boom),
ok.
%% --------------------------------------
%% Test call to nonexisting node
%% --------------------------------------
-call_remote_n1(suite) -> [];
call_remote_n1(Config) when is_list(Config) ->
- ?line N = hubba,
- ?line Node = proplists:get_value(node,Config),
- ?line {ok, _Pid} = rpc:call(Node, gen_server, start,
- [{global, N}, ?MODULE, [], []]),
- ?line _ = test_server:stop_node(Node),
- ?line {'EXIT', {noproc, _}} =
+ N = hubba,
+ Node = proplists:get_value(node,Config),
+ {ok, _Pid} = rpc:call(Node, gen_server, start,
+ [{global, N}, ?MODULE, [], []]),
+ _ = test_server:stop_node(Node),
+ {'EXIT', {noproc, _}} =
(catch gen_server:call({global, N}, started_p, infinity)),
ok.
-call_remote_n2(suite) -> [];
call_remote_n2(Config) when is_list(Config) ->
- ?line N = hubba,
- ?line Node = proplists:get_value(node,Config),
+ N = hubba,
+ Node = proplists:get_value(node,Config),
- ?line {ok, Pid} = rpc:call(Node, gen_server, start,
- [{global, N}, ?MODULE, [], []]),
- ?line _ = test_server:stop_node(Node),
- ?line {'EXIT', {{nodedown, Node}, _}} = (catch gen_server:call(Pid,
- started_p, infinity)),
+ {ok, Pid} = rpc:call(Node, gen_server, start,
+ [{global, N}, ?MODULE, [], []]),
+ _ = test_server:stop_node(Node),
+ {'EXIT', {{nodedown, Node}, _}} = (catch gen_server:call(Pid,
+ started_p, infinity)),
ok.
-call_remote_n3(suite) -> [];
call_remote_n3(Config) when is_list(Config) ->
- ?line Node = proplists:get_value(node,Config),
+ Node = proplists:get_value(node,Config),
- ?line {ok, _Pid} = rpc:call(Node, gen_server, start,
- [{local, piller}, ?MODULE, [], []]),
- ?line _ = test_server:stop_node(Node),
- ?line {'EXIT', {{nodedown, Node}, _}} = (catch gen_server:call({piller, Node},
- started_p, infinity)),
+ {ok, _Pid} = rpc:call(Node, gen_server, start,
+ [{local, piller}, ?MODULE, [], []]),
+ _ = test_server:stop_node(Node),
+ {'EXIT', {{nodedown, Node}, _}} = (catch gen_server:call({piller, Node},
+ started_p, infinity)),
ok.
@@ -543,58 +535,56 @@ call_remote_n3(Config) when is_list(Config) ->
%% handle_cast.
%% --------------------------------------
-cast(suite) -> [];
cast(Config) when is_list(Config) ->
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_server:start({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, started_p),
-
- ?line ok = gen_server:cast(my_test_name, {self(),handle_cast}),
- ?line receive
- {Pid, handled_cast} ->
- ok
- after 1000 ->
- test_server:fail(handle_cast)
- end,
-
- ?line ok = gen_server:cast(my_test_name, {self(),delayed_cast,1}),
- ?line receive
- {Pid, delayed} ->
- ok
- after 1000 ->
- test_server:fail(delayed_cast)
- end,
-
- ?line ok = gen_server:cast(my_test_name, {self(),stop}),
- ?line receive
- {Pid, stopped} ->
- ok
- after 1000 ->
- test_server:fail(stop)
- end,
+ ok = gen_server:call(my_test_name, started_p),
+
+ ok = gen_server:cast(my_test_name, {self(),handle_cast}),
+ receive
+ {Pid, handled_cast} ->
+ ok
+ after 1000 ->
+ ct:fail(handle_cast)
+ end,
+
+ ok = gen_server:cast(my_test_name, {self(),delayed_cast,1}),
+ receive
+ {Pid, delayed} ->
+ ok
+ after 1000 ->
+ ct:fail(delayed_cast)
+ end,
+
+ ok = gen_server:cast(my_test_name, {self(),stop}),
+ receive
+ {Pid, stopped} ->
+ ok
+ after 1000 ->
+ ct:fail(stop)
+ end,
ok.
-cast_fast(suite) -> [];
-cast_fast(doc) -> ["Test that cast really return immediately"];
+%% Test that cast really return immediately.
cast_fast(Config) when is_list(Config) ->
- ?line {ok,Node} = start_node(hubba),
- ?line {_,"@"++Host} = lists:splitwith(fun ($@) -> false; (_) -> true end,
- atom_to_list(Node)),
- ?line FalseNode = list_to_atom("hopp@"++Host),
- ?line true = rpc:cast(Node, ?MODULE, cast_fast_messup, []),
-% ?line io:format("Nodes ~p~n", [rpc:call(N, ?MODULE, cast_fast_messup, [])]),
- ?line test_server:sleep(1000),
- ?line [Node] = nodes(),
- ?line {Time,ok} = test_server:timecall(gen_server, cast,
- [{hopp,FalseNode},hopp]),
- ?line true = test_server:stop_node(Node),
- ?line if Time > 1.0 -> % Default listen timeout is about 7.0 s
- test_server:fail(hanging_cast);
- true ->
- ok
- end.
+ {ok,Node} = start_node(hubba),
+ {_,"@"++Host} = lists:splitwith(fun ($@) -> false; (_) -> true end,
+ atom_to_list(Node)),
+ FalseNode = list_to_atom("hopp@"++Host),
+ true = rpc:cast(Node, ?MODULE, cast_fast_messup, []),
+ ct:sleep(1000),
+ [Node] = nodes(),
+ {Time,ok} = timer:tc(fun() ->
+ gen_server:cast({hopp,FalseNode}, hopp)
+ end),
+ true = test_server:stop_node(Node),
+ if Time > 1000000 -> % Default listen timeout is about 7.0 s
+ ct:fail(hanging_cast);
+ true ->
+ ok
+ end.
cast_fast_messup() ->
%% Register a false node: hopp@hostname
@@ -609,37 +599,36 @@ cast_fast_messup() ->
%% Test handle_info.
%% --------------------------------------
-info(suite) -> [];
info(Config) when is_list(Config) ->
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_server:start({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, started_p),
-
- ?line Pid ! {self(),handle_info},
- ?line receive
- {Pid, handled_info} ->
- ok
- after 1000 ->
- test_server:fail(handle_info)
- end,
-
- ?line Pid ! {self(),delayed_info,1},
- ?line receive
- {Pid, delayed_info} ->
- ok
- after 1000 ->
- test_server:fail(delayed_info)
- end,
-
- ?line Pid ! {self(),stop},
- ?line receive
- {Pid, stopped_info} ->
- ok
- after 1000 ->
- test_server:fail(stop_info)
- end,
+ ok = gen_server:call(my_test_name, started_p),
+
+ Pid ! {self(),handle_info},
+ receive
+ {Pid, handled_info} ->
+ ok
+ after 1000 ->
+ ct:fail(handle_info)
+ end,
+
+ Pid ! {self(),delayed_info,1},
+ receive
+ {Pid, delayed_info} ->
+ ok
+ after 1000 ->
+ ct:fail(delayed_info)
+ end,
+
+ Pid ! {self(),stop},
+ receive
+ {Pid, stopped_info} ->
+ ok
+ after 1000 ->
+ ct:fail(stop_info)
+ end,
ok.
hibernate(Config) when is_list(Config) ->
@@ -653,7 +642,7 @@ hibernate(Config) when is_list(Config) ->
{'EXIT', Pid0, stopped} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
{ok, Pid} =
@@ -720,7 +709,7 @@ hibernate(Config) when is_list(Config) ->
{'EXIT', Pid, stopped} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
process_flag(trap_exit, OldFl),
ok.
@@ -731,7 +720,7 @@ is_in_erlang_hibernate(Pid) ->
is_in_erlang_hibernate_1(0, Pid) ->
io:format("~p\n", [erlang:process_info(Pid, current_function)]),
- ?t:fail(not_in_erlang_hibernate_3);
+ ct:fail(not_in_erlang_hibernate_3);
is_in_erlang_hibernate_1(N, Pid) ->
{current_function,MFA} = erlang:process_info(Pid, current_function),
case MFA of
@@ -748,38 +737,37 @@ is_in_erlang_hibernate_1(N, Pid) ->
%% handle_cast.
%% --------------------------------------
-abcast(suite) -> [];
abcast(Config) when is_list(Config) ->
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_server:start({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, started_p),
-
- ?line abcast = gen_server:abcast(my_test_name, {self(),handle_cast}),
- ?line receive
- {Pid, handled_cast} ->
- ok
- after 1000 ->
- test_server:fail(abcast)
- end,
-
- ?line abcast = gen_server:abcast([node()], my_test_name,
- {self(),delayed_cast,1}),
- ?line receive
- {Pid, delayed} ->
- ok
- after 1000 ->
- test_server:fail(delayed_abcast)
- end,
-
- ?line abcast = gen_server:abcast(my_test_name, {self(),stop}),
- ?line receive
- {Pid, stopped} ->
- ok
- after 1000 ->
- test_server:fail(abcast_stop)
- end,
+ ok = gen_server:call(my_test_name, started_p),
+
+ abcast = gen_server:abcast(my_test_name, {self(),handle_cast}),
+ receive
+ {Pid, handled_cast} ->
+ ok
+ after 1000 ->
+ ct:fail(abcast)
+ end,
+
+ abcast = gen_server:abcast([node()], my_test_name,
+ {self(),delayed_cast,1}),
+ receive
+ {Pid, delayed} ->
+ ok
+ after 1000 ->
+ ct:fail(delayed_abcast)
+ end,
+
+ abcast = gen_server:abcast(my_test_name, {self(),stop}),
+ receive
+ {Pid, stopped} ->
+ ok
+ after 1000 ->
+ ct:fail(abcast_stop)
+ end,
ok.
%% --------------------------------------
@@ -788,58 +776,56 @@ abcast(Config) when is_list(Config) ->
%% handle_call.
%% --------------------------------------
-multicall(suite) -> [];
multicall(Config) when is_list(Config) ->
OldFl = process_flag(trap_exit, true),
- ?line {ok, Pid} =
+ {ok, Pid} =
gen_server:start_link({local, my_test_name},
gen_server_SUITE, [], []),
- ?line ok = gen_server:call(my_test_name, started_p),
+ ok = gen_server:call(my_test_name, started_p),
Nodes = nodes(),
Node = node(),
- ?line {[{Node,delayed}],Nodes} =
- gen_server:multi_call(my_test_name, {delayed_answer,1}),
+ {[{Node,delayed}],Nodes} =
+ gen_server:multi_call(my_test_name, {delayed_answer,1}),
%% two requests within a specified time.
- ?line {[{Node,ok}],[]} =
- gen_server:multi_call([Node], my_test_name, {call_within, 1000}),
- test_server:sleep(500),
- ?line {[{Node,ok}],[]} =
- gen_server:multi_call([Node], my_test_name, next_call),
- ?line {[{Node,ok}],[]} =
- gen_server:multi_call([Node], my_test_name, {call_within, 1000}),
- test_server:sleep(1500),
- ?line {[{Node,false}],[]} =
- gen_server:multi_call([Node],my_test_name, next_call),
+ {[{Node,ok}],[]} =
+ gen_server:multi_call([Node], my_test_name, {call_within, 1000}),
+ timer:sleep(500),
+ {[{Node,ok}],[]} =
+ gen_server:multi_call([Node], my_test_name, next_call),
+ {[{Node,ok}],[]} =
+ gen_server:multi_call([Node], my_test_name, {call_within, 1000}),
+ timer:sleep(1500),
+ {[{Node,false}],[]} =
+ gen_server:multi_call([Node],my_test_name, next_call),
%% Stop the server.
- ?line {[{Node,ok}],[]} =
- gen_server:multi_call([Node],my_test_name, stop),
+ {[{Node,ok}],[]} =
+ gen_server:multi_call([Node],my_test_name, stop),
receive
{'EXIT', Pid, stopped} -> ok
after 1000 ->
- test_server:fail(multicall_stop)
+ ct:fail(multicall_stop)
end,
-
+
process_flag(trap_exit, OldFl),
ok.
%% OTP-3587
-multicall_down(suite) -> [];
multicall_down(Config) when is_list(Config) ->
%% We need a named host which is inaccessible.
- ?line Name = node@test01,
+ Name = node@test01,
%% We use 'global' as a gen_server to call.
- ?line {Good, Bad} = gen_server:multi_call([Name, node()],
- global_name_server,
- info,
- 3000),
+ {Good, Bad} = gen_server:multi_call([Name, node()],
+ global_name_server,
+ info,
+ 3000),
io:format("good = ~p, bad = ~p~n", [Good, Bad]),
- ?line [Name] = Bad,
+ [Name] = Bad,
ok.
busy_wait_for_process(Pid,N) ->
@@ -854,82 +840,79 @@ busy_wait_for_process(Pid,N) ->
ok
end.
%%--------------------------------------------------------------
-spec_init(doc) ->
- ["Test gen_server:enter_loop/[3,4,5]. Used when you want to write "
- "your own special init-phase."];
-spec_init(suite) ->
- [];
+%% Test gen_server:enter_loop/[3,4,5]. Used when you want to write
+%% your own special init-phase.
spec_init(Config) when is_list(Config) ->
-
+
OldFlag = process_flag(trap_exit, true),
- ?line {ok, Pid0} = start_link(spec_init_local, [{ok, my_server}, []]),
- ?line ok = gen_server:call(Pid0, started_p),
- ?line ok = gen_server:call(Pid0, stop),
+ {ok, Pid0} = start_link(spec_init_local, [{ok, my_server}, []]),
+ ok = gen_server:call(Pid0, started_p),
+ ok = gen_server:call(Pid0, stop),
receive
{'EXIT', Pid0, stopped} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
-
- ?line {ok, Pid01} = start_link(spec_init_local, [{not_ok, my_server}, []]),
+
+ {ok, Pid01} = start_link(spec_init_local, [{not_ok, my_server}, []]),
receive
{'EXIT', Pid01, process_not_registered} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
-
- ?line {ok, Pid1} = start_link(spec_init_global, [{ok, my_server}, []]),
- ?line ok = gen_server:call(Pid1, started_p),
- ?line ok = gen_server:call(Pid1, stop),
+
+ {ok, Pid1} = start_link(spec_init_global, [{ok, my_server}, []]),
+ ok = gen_server:call(Pid1, started_p),
+ ok = gen_server:call(Pid1, stop),
receive
{'EXIT', Pid1, stopped} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
-
- ?line {ok, Pid11} =
+
+ {ok, Pid11} =
start_link(spec_init_global, [{not_ok, my_server}, []]),
receive
{'EXIT', Pid11, process_not_registered_globally} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
-
- ?line {ok, Pid2} = start_link(spec_init_anonymous, [[]]),
- ?line ok = gen_server:call(Pid2, started_p),
- ?line ok = gen_server:call(Pid2, stop),
+
+ {ok, Pid2} = start_link(spec_init_anonymous, [[]]),
+ ok = gen_server:call(Pid2, started_p),
+ ok = gen_server:call(Pid2, stop),
receive
{'EXIT', Pid2, stopped} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
-
- ?line {ok, Pid3} = start_link(spec_init_anonymous_default_timeout, [[]]),
- ?line ok = gen_server:call(Pid3, started_p),
- ?line ok = gen_server:call(Pid3, stop),
+
+ {ok, Pid3} = start_link(spec_init_anonymous_default_timeout, [[]]),
+ ok = gen_server:call(Pid3, started_p),
+ ok = gen_server:call(Pid3, stop),
receive
{'EXIT', Pid3, stopped} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
-
- ?line {ok, Pid4} =
+
+ {ok, Pid4} =
start_link(spec_init_default_timeout, [{ok, my_server}, []]),
- ?line ok = gen_server:call(Pid4, started_p),
- ?line ok = gen_server:call(Pid4, stop),
+ ok = gen_server:call(Pid4, started_p),
+ ok = gen_server:call(Pid4, stop),
receive
{'EXIT', Pid4, stopped} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
%% Before the OTP-10130 fix this failed because a timeout message
@@ -939,83 +922,79 @@ spec_init(Config) when is_list(Config) ->
start_link(spec_init_global_default_timeout, [{ok, hurra}, []]),
timer:sleep(1000),
ok = gen_server:call(_PidHurra, started_p),
-
- ?line Pid5 =
+
+ Pid5 =
erlang:spawn_link(?MODULE, spec_init_not_proc_lib, [[]]),
receive
{'EXIT', Pid5, process_was_not_started_by_proc_lib} ->
ok
after 5000 ->
- test_server:fail(gen_server_did_not_die)
+ ct:fail(gen_server_did_not_die)
end,
process_flag(trap_exit, OldFlag),
ok.
%%--------------------------------------------------------------
-spec_init_local_registered_parent(doc) ->
- ["Test that terminate is run when the parent is a locally registered "
- "process OTP-4820"];
-spec_init_local_registered_parent(suite) -> [];
+%% OTP-4820. Test that terminate is run when the parent is a locally
+%% registered process.
spec_init_local_registered_parent(Config) when is_list(Config) ->
register(foobar, self()),
process_flag(trap_exit, true),
-
- ?line {ok, Pid} = start_link(spec_init_local, [{ok, my_server}, []]),
-
- ?line ok = gen_server:cast(my_server, {self(),stop}),
- ?line receive
- {Pid, stopped} ->
- ok
- after 1000 ->
- test_server:fail(stop)
- end,
+
+ {ok, Pid} = start_link(spec_init_local, [{ok, my_server}, []]),
+
+ ok = gen_server:cast(my_server, {self(),stop}),
+ receive
+ {Pid, stopped} ->
+ ok
+ after 1000 ->
+ ct:fail(stop)
+ end,
unregister(foobar),
ok.
+
%%--------------------------------------------------------------
-spec_init_global_registered_parent(doc) ->
- ["Test that terminate is run when the parent is a global registered "
- "process OTP-4820"];
-spec_init_global_registered_parent(suite) -> [];
+%% OTP-4820. Test that terminate is run when the parent is a global registered
+%% process.
spec_init_global_registered_parent(Config) when is_list(Config) ->
global:register_name(foobar, self()),
process_flag(trap_exit, true),
-
- ?line {ok, Pid} = start_link(spec_init_global, [{ok, my_server}, []]),
-
- ?line ok = gen_server:call(Pid, started_p),
- ?line ok = gen_server:cast(Pid, {self(),stop}),
-
- ?line receive
- {Pid, stopped} ->
- ok
- after 1000 ->
- test_server:fail(stop)
- end,
+
+ {ok, Pid} = start_link(spec_init_global, [{ok, my_server}, []]),
+
+ ok = gen_server:call(Pid, started_p),
+ ok = gen_server:cast(Pid, {self(),stop}),
+
+ receive
+ {Pid, stopped} ->
+ ok
+ after 1000 ->
+ ct:fail(stop)
+ end,
global:unregister_name(foobar),
ok.
+
%%--------------------------------------------------------------
-otp_5854(suite) ->
- [];
-otp_5854(doc) ->
- ["Test check for registered name in enter_loop/3,4,5"];
+
+%% Test check for registered name in enter_loop/3,4,5.
otp_5854(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
- ?line dummy_via:reset(),
+ dummy_via:reset(),
%% Make sure gen_server:enter_loop does not accept {local,Name}
%% when it's another process than the calling one which is
%% registered under that name
register(armitage, self()),
- ?line {ok, Pid1} =
+ {ok, Pid1} =
start_link(spec_init_local, [{not_ok, armitage}, []]),
receive
{'EXIT', Pid1, process_not_registered} ->
ok
after 1000 ->
- ?line test_server:fail(gen_server_started)
+ ct:fail(gen_server_started)
end,
unregister(armitage),
@@ -1023,25 +1002,25 @@ otp_5854(Config) when is_list(Config) ->
%% when it's another process than the calling one which is
%% registered under that name
global:register_name(armitage, self()),
- ?line {ok, Pid2} =
+ {ok, Pid2} =
start_link(spec_init_global, [{not_ok, armitage}, []]),
receive
{'EXIT', Pid2, process_not_registered_globally} ->
ok
after 1000 ->
- ?line test_server:fail(gen_server_started)
+ ct:fail(gen_server_started)
end,
global:unregister_name(armitage),
%% (same for {via, Mod, Name})
dummy_via:register_name(armitage, self()),
- ?line {ok, Pid3} =
+ {ok, Pid3} =
start_link(spec_init_via, [{not_ok, armitage}, []]),
receive
{'EXIT', Pid3, {process_not_registered_via, dummy_via}} ->
ok
after 1000 ->
- ?line test_server:fail(gen_server_started)
+ ct:fail(gen_server_started)
end,
dummy_via:unregister_name(armitage),
@@ -1053,89 +1032,85 @@ otp_5854(Config) when is_list(Config) ->
%% returns.
otp_7669(Config) when is_list(Config) ->
- ?line ?t:do_times(100, fun do_otp_7669_local_ignore/0),
- ?line ?t:do_times(100, fun do_otp_7669_global_ignore/0),
- ?line ?t:do_times(10, fun do_otp_7669_stop/0),
+ do_times(100, fun do_otp_7669_local_ignore/0),
+ do_times(100, fun do_otp_7669_global_ignore/0),
+ do_times(10, fun do_otp_7669_stop/0),
ok.
+do_times(0, _) ->
+ ok;
+do_times(N, Fun) ->
+ Fun(),
+ do_times(N-1, Fun).
+
do_otp_7669_local_ignore() ->
%% The name should never be registered after the return
%% from gen_server:start/3.
- ?line ignore = gen_server:start({local,?MODULE}, ?MODULE, ignore, []),
- ?line undefined = whereis(?MODULE),
- ?line ignore = gen_server:start({local,?MODULE}, ?MODULE, ignore, []),
- ?line undefined = whereis(?MODULE),
- ?line ignore = gen_server:start_link({local,?MODULE}, ?MODULE, ignore, []),
- ?line undefined = whereis(?MODULE).
+ ignore = gen_server:start({local,?MODULE}, ?MODULE, ignore, []),
+ undefined = whereis(?MODULE),
+ ignore = gen_server:start({local,?MODULE}, ?MODULE, ignore, []),
+ undefined = whereis(?MODULE),
+ ignore = gen_server:start_link({local,?MODULE}, ?MODULE, ignore, []),
+ undefined = whereis(?MODULE).
do_otp_7669_global_ignore() ->
- ?line ignore = gen_server:start({global,?MODULE}, ?MODULE, ignore, []),
- ?line undefined = global:whereis_name(?MODULE),
- ?line ignore = gen_server:start_link({global,?MODULE}, ?MODULE, ignore, []),
- ?line undefined = global:whereis_name(?MODULE).
+ ignore = gen_server:start({global,?MODULE}, ?MODULE, ignore, []),
+ undefined = global:whereis_name(?MODULE),
+ ignore = gen_server:start_link({global,?MODULE}, ?MODULE, ignore, []),
+ undefined = global:whereis_name(?MODULE).
do_otp_7669_stop() ->
%% The name should never be registered after the return
%% from gen_server:start/3.
- ?line {error,stopped} = gen_server:start({local,?MODULE},
- ?MODULE, stop, []),
- ?line undefined = whereis(?MODULE),
+ {error,stopped} = gen_server:start({local,?MODULE},
+ ?MODULE, stop, []),
+ undefined = whereis(?MODULE),
- ?line {error,stopped} = gen_server:start({global,?MODULE},
- ?MODULE, stop, []),
- ?line undefined = global:whereis_name(?MODULE).
+ {error,stopped} = gen_server:start({global,?MODULE},
+ ?MODULE, stop, []),
+ undefined = global:whereis_name(?MODULE).
-%% Verify that sys:get_status correctly calls our format_status/2 fun
-%%
-call_format_status(suite) ->
- [];
-call_format_status(doc) ->
- ["Test that sys:get_status/1,2 calls format_status/2"];
+%% Verify that sys:get_status correctly calls our format_status/2 fun.
call_format_status(Config) when is_list(Config) ->
- ?line {ok, Pid} = gen_server:start_link({local, call_format_status},
- ?MODULE, [], []),
- ?line Status1 = sys:get_status(call_format_status),
- ?line {status, Pid, _Mod, [_PDict, running, _Parent, _, Data1]} = Status1,
- ?line [format_status_called | _] = lists:reverse(Data1),
- ?line Status2 = sys:get_status(call_format_status, 5000),
- ?line {status, Pid, _Mod, [_PDict, running, _Parent, _, Data2]} = Status2,
- ?line [format_status_called | _] = lists:reverse(Data2),
+ {ok, Pid} = gen_server:start_link({local, call_format_status},
+ ?MODULE, [], []),
+ Status1 = sys:get_status(call_format_status),
+ {status, Pid, _Mod, [_PDict, running, _Parent, _, Data1]} = Status1,
+ [format_status_called | _] = lists:reverse(Data1),
+ Status2 = sys:get_status(call_format_status, 5000),
+ {status, Pid, _Mod, [_PDict, running, _Parent, _, Data2]} = Status2,
+ [format_status_called | _] = lists:reverse(Data2),
%% check that format_status can handle a name being a pid (atom is
%% already checked by the previous test)
- ?line {ok, Pid3} = gen_server:start_link(gen_server_SUITE, [], []),
- ?line Status3 = sys:get_status(Pid3),
- ?line {status, Pid3, _Mod, [_PDict3, running, _Parent, _, Data3]} = Status3,
- ?line [format_status_called | _] = lists:reverse(Data3),
+ {ok, Pid3} = gen_server:start_link(gen_server_SUITE, [], []),
+ Status3 = sys:get_status(Pid3),
+ {status, Pid3, _Mod, [_PDict3, running, _Parent, _, Data3]} = Status3,
+ [format_status_called | _] = lists:reverse(Data3),
%% check that format_status can handle a name being a term other than a
%% pid or atom
GlobalName1 = {global, "CallFormatStatus"},
- ?line {ok, Pid4} = gen_server:start_link(GlobalName1,
- gen_server_SUITE, [], []),
- ?line Status4 = sys:get_status(Pid4),
- ?line {status, Pid4, _Mod, [_PDict4, running, _Parent, _, Data4]} = Status4,
- ?line [format_status_called | _] = lists:reverse(Data4),
+ {ok, Pid4} = gen_server:start_link(GlobalName1,
+ gen_server_SUITE, [], []),
+ Status4 = sys:get_status(Pid4),
+ {status, Pid4, _Mod, [_PDict4, running, _Parent, _, Data4]} = Status4,
+ [format_status_called | _] = lists:reverse(Data4),
GlobalName2 = {global, {name, "term"}},
- ?line {ok, Pid5} = gen_server:start_link(GlobalName2,
- gen_server_SUITE, [], []),
- ?line Status5 = sys:get_status(GlobalName2),
- ?line {status, Pid5, _Mod, [_PDict5, running, _Parent, _, Data5]} = Status5,
- ?line [format_status_called | _] = lists:reverse(Data5),
+ {ok, Pid5} = gen_server:start_link(GlobalName2,
+ gen_server_SUITE, [], []),
+ Status5 = sys:get_status(GlobalName2),
+ {status, Pid5, _Mod, [_PDict5, running, _Parent, _, Data5]} = Status5,
+ [format_status_called | _] = lists:reverse(Data5),
ok.
-%% Verify that error termination correctly calls our format_status/2 fun
-%%
-error_format_status(suite) ->
- [];
-error_format_status(doc) ->
- ["Test that an error termination calls format_status/2"];
+%% Verify that error termination correctly calls our format_status/2 fun.
error_format_status(Config) when is_list(Config) ->
- ?line error_logger_forwarder:register(),
+ error_logger_forwarder:register(),
OldFl = process_flag(trap_exit, true),
State = "called format_status",
- ?line {ok, Pid} = gen_server:start_link(?MODULE, {state, State}, []),
- ?line {'EXIT',{crashed,_}} = (catch gen_server:call(Pid, crash)),
+ {ok, Pid} = gen_server:start_link(?MODULE, {state, State}, []),
+ {'EXIT',{crashed,_}} = (catch gen_server:call(Pid, crash)),
receive
{'EXIT', Pid, crashed} ->
ok
@@ -1148,10 +1123,9 @@ error_format_status(Config) when is_list(Config) ->
|_Stacktrace]}]}} ->
ok;
Other ->
- ?line io:format("Unexpected: ~p", [Other]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p", [Other]),
+ ct:fail(failed)
end,
- ?t:messages_get(),
process_flag(trap_exit, OldFl),
ok.
@@ -1169,29 +1143,23 @@ terminate_crash_format(Config) when is_list(Config) ->
"** Generic server"++_,
[Pid,stop, {formatted, State},
{{crash, terminate},[{?MODULE,terminate,2,_}
- |_Stacktrace]}]}} ->
+ |_Stacktrace]}]}} ->
ok;
Other ->
io:format("Unexpected: ~p", [Other]),
- ?t:fail()
+ ct:fail(failed)
after 5000 ->
io:format("Timeout: expected error logger msg", []),
- ?t:fail()
+ ct:fail(failed)
end,
- ?t:messages_get(),
process_flag(trap_exit, OldFl),
ok.
%% Verify that sys:get_state correctly returns gen_server state
-%%
-get_state(suite) ->
- [];
-get_state(doc) ->
- ["Test that sys:get_state/1,2 return the gen_server state"];
get_state(Config) when is_list(Config) ->
State = self(),
{ok, _Pid} = gen_server:start_link({local, get_state},
- ?MODULE, {state,State}, []),
+ ?MODULE, {state,State}, []),
State = sys:get_state(get_state),
State = sys:get_state(get_state, 5000),
{ok, Pid} = gen_server:start_link(?MODULE, {state,State}, []),
@@ -1203,15 +1171,10 @@ get_state(Config) when is_list(Config) ->
ok.
%% Verify that sys:replace_state correctly replaces gen_server state
-%%
-replace_state(suite) ->
- [];
-replace_state(doc) ->
- ["Test that sys:replace_state/1,2 replace the gen_server state"];
replace_state(Config) when is_list(Config) ->
State = self(),
{ok, _Pid} = gen_server:start_link({local, replace_state},
- ?MODULE, {state,State}, []),
+ ?MODULE, {state,State}, []),
State = sys:get_state(replace_state),
NState1 = "replaced",
Replace1 = fun(_) -> NState1 end,
@@ -1250,16 +1213,16 @@ call_with_huge_message_queue(Config) when is_list(Config) ->
"is not implemented"};
false ->
do_call_with_huge_message_queue()
- end.
+ end.
do_call_with_huge_message_queue() ->
- ?line Pid = spawn_link(fun echo_loop/0),
+ Pid = spawn_link(fun echo_loop/0),
- ?line {Time,ok} = tc(fun() -> calls(10000, Pid) end),
+ {Time,ok} = tc(fun() -> calls(10000, Pid) end),
- ?line [self() ! {msg,N} || N <- lists:seq(1, 500000)],
+ [self() ! {msg,N} || N <- lists:seq(1, 500000)],
erlang:garbage_collect(),
- ?line {NewTime,ok} = tc(fun() -> calls(10000, Pid) end),
+ {NewTime,ok} = tc(fun() -> calls(10000, Pid) end),
io:format("Time for empty message queue: ~p", [Time]),
io:format("Time for huge message queue: ~p", [NewTime]),
@@ -1269,7 +1232,7 @@ do_call_with_huge_message_queue() ->
ok;
Q ->
io:format("Q = ~p", [Q]),
- ?line ?t:fail()
+ ct:fail(failed)
end,
ok.
@@ -1381,7 +1344,7 @@ init(stop) ->
init(hibernate) ->
{ok,[],hibernate};
init(sleep) ->
- test_server:sleep(1000),
+ ct:sleep(1000),
{ok, []};
init({state,State}) ->
{ok, State}.
@@ -1435,11 +1398,11 @@ handle_info(timeout, {reply_to, From}) ->
gen_server:reply(From, delayed),
{noreply, []};
handle_info(timeout, hibernate_me) -> % Arrive here from
- % handle_info(hibernate_later,...)
+ % handle_info(hibernate_later,...)
{noreply, [], hibernate};
handle_info(hibernate_now, _State) -> % Arrive here from
- % handle_cast({_,hibernate_later},...)
- % and by direct ! from testcase
+ % handle_cast({_,hibernate_later},...)
+ % and by direct ! from testcase
{noreply, [], hibernate};
handle_info(hibernate_later, _State) ->
{noreply, hibernate_me, 1000};
diff --git a/lib/stdlib/test/gen_statem_SUITE.erl b/lib/stdlib/test/gen_statem_SUITE.erl
new file mode 100644
index 0000000000..364314f91b
--- /dev/null
+++ b/lib/stdlib/test/gen_statem_SUITE.erl
@@ -0,0 +1,1584 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(gen_statem_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+
+-compile(export_all).
+-behaviour(gen_statem).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
+
+all() ->
+ [{group, start},
+ {group, start_handle_event},
+ {group, stop},
+ {group, stop_handle_event},
+ {group, abnormal},
+ {group, abnormal_handle_event},
+ shutdown, stop_and_reply, event_order,
+ {group, sys},
+ hibernate, enter_loop].
+
+groups() ->
+ [{start, [],
+ [start1, start2, start3, start4, start5, start6, start7,
+ start8, start9, start10, start11, start12, next_events]},
+ {start_handle_event, [],
+ [start1, start2, start3, start4, start5, start6, start7,
+ start8, start9, start10, start11, start12, next_events]},
+ {stop, [],
+ [stop1, stop2, stop3, stop4, stop5, stop6, stop7, stop8, stop9, stop10]},
+ {stop_handle_event, [],
+ [stop1, stop2, stop3, stop4, stop5, stop6, stop7, stop8, stop9, stop10]},
+ {abnormal, [], [abnormal1, abnormal2]},
+ {abnormal_handle_event, [], [abnormal1, abnormal2]},
+ {sys, [],
+ [sys1, code_change,
+ call_format_status,
+ error_format_status, terminate_crash_format,
+ get_state, replace_state]},
+ {sys_handle_event, [],
+ [sys1,
+ call_format_status,
+ error_format_status, terminate_crash_format,
+ get_state, replace_state]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(GroupName, Config)
+ when GroupName =:= start_handle_event;
+ GroupName =:= stop_handle_event;
+ GroupName =:= abnormal_handle_event;
+ GroupName =:= sys_handle_event ->
+ [{callback_mode,handle_event_function}|Config];
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+init_per_testcase(_CaseName, Config) ->
+ flush(),
+%%% dbg:tracer(),
+%%% dbg:p(all, c),
+%%% dbg:tpl(gen_statem, cx),
+%%% dbg:tpl(proc_lib, cx),
+%%% dbg:tpl(gen, cx),
+%%% dbg:tpl(sys, cx),
+ Config.
+
+end_per_testcase(_CaseName, Config) ->
+%%% dbg:stop(),
+ Config.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-define(EXPECT_FAILURE(Code, Reason),
+ try begin Code end of
+ Reason ->
+ ct:fail({unexpected,Reason})
+ catch
+ error:Reason -> Reason;
+ exit:Reason -> Reason
+ end).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% anonymous
+start1(Config) ->
+ %%OldFl = process_flag(trap_exit, true),
+
+ {ok,Pid0} = gen_statem:start_link(?MODULE, start_arg(Config, []), []),
+ ok = do_func_test(Pid0),
+ ok = do_sync_func_test(Pid0),
+ stop_it(Pid0),
+%% stopped = gen_statem:call(Pid0, stop),
+%% timeout =
+%% ?EXPECT_FAILURE(gen_statem:call(Pid0, hej), Reason),
+
+ %%process_flag(trap_exit, OldFl),
+ ok = verify_empty_msgq().
+
+%% anonymous w. shutdown
+start2(Config) ->
+ %% Dont link when shutdown
+ {ok,Pid0} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+ ok = do_func_test(Pid0),
+ ok = do_sync_func_test(Pid0),
+ stopped = gen_statem:call(Pid0, {stop,shutdown}),
+ check_stopped(Pid0),
+ ok = verify_empty_msgq().
+
+%% anonymous with timeout
+start3(Config) ->
+ %%OldFl = process_flag(trap_exit, true),
+
+ {ok,Pid0} =
+ gen_statem:start(?MODULE, start_arg(Config, []), [{timeout,5}]),
+ ok = do_func_test(Pid0),
+ ok = do_sync_func_test(Pid0),
+ stop_it(Pid0),
+
+ {error,timeout} =
+ gen_statem:start(
+ ?MODULE, start_arg(Config, sleep), [{timeout,5}]),
+
+ %%process_flag(trap_exit, OldFl),
+ ok = verify_empty_msgq().
+
+%% anonymous with ignore
+start4(Config) ->
+ OldFl = process_flag(trap_exit, true),
+
+ ignore = gen_statem:start(?MODULE, start_arg(Config, ignore), []),
+
+ process_flag(trap_exit, OldFl),
+ ok = verify_empty_msgq().
+
+%% anonymous with stop
+start5(Config) ->
+ OldFl = process_flag(trap_exit, true),
+
+ {error,stopped} = gen_statem:start(?MODULE, start_arg(Config, stop), []),
+
+ process_flag(trap_exit, OldFl),
+ ok = verify_empty_msgq().
+
+%% anonymous linked
+start6(Config) ->
+ {ok,Pid} = gen_statem:start_link(?MODULE, start_arg(Config, []), []),
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ stop_it(Pid),
+
+ ok = verify_empty_msgq().
+
+%% global register linked
+start7(Config) ->
+ STM = {global,my_stm},
+
+ {ok,Pid} =
+ gen_statem:start_link(STM, ?MODULE, start_arg(Config, []), []),
+ {error,{already_started,Pid}} =
+ gen_statem:start_link(STM, ?MODULE, start_arg(Config, []), []),
+ {error,{already_started,Pid}} =
+ gen_statem:start(STM, ?MODULE, start_arg(Config, []), []),
+
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test(STM),
+ ok = do_sync_func_test(STM),
+ stop_it(STM),
+
+ ok = verify_empty_msgq().
+
+
+%% local register
+start8(Config) ->
+ %%OldFl = process_flag(trap_exit, true),
+ Name = my_stm,
+ STM = {local,Name},
+
+ {ok,Pid} =
+ gen_statem:start(STM, ?MODULE, start_arg(Config, []), []),
+ {error,{already_started,Pid}} =
+ gen_statem:start(STM, ?MODULE, start_arg(Config, []), []),
+
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test(Name),
+ ok = do_sync_func_test(Name),
+ stop_it(Pid),
+
+ %%process_flag(trap_exit, OldFl),
+ ok = verify_empty_msgq().
+
+%% local register linked
+start9(Config) ->
+ %%OldFl = process_flag(trap_exit, true),
+ Name = my_stm,
+ STM = {local,Name},
+
+ {ok,Pid} =
+ gen_statem:start_link(STM, ?MODULE, start_arg(Config, []), []),
+ {error,{already_started,Pid}} =
+ gen_statem:start(STM, ?MODULE, start_arg(Config, []), []),
+
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test(Name),
+ ok = do_sync_func_test(Name),
+ stop_it(Pid),
+
+ %%process_flag(trap_exit, OldFl),
+ ok = verify_empty_msgq().
+
+%% global register
+start10(Config) ->
+ STM = {global,my_stm},
+
+ {ok,Pid} =
+ gen_statem:start(STM, ?MODULE, start_arg(Config, []), []),
+ {error,{already_started,Pid}} =
+ gen_statem:start(STM, ?MODULE, start_arg(Config, []), []),
+ {error,{already_started,Pid}} =
+ gen_statem:start_link(STM, ?MODULE, start_arg(Config, []), []),
+
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test(STM),
+ ok = do_sync_func_test(STM),
+ stop_it(STM),
+
+ ok = verify_empty_msgq().
+
+%% Stop registered processes
+start11(Config) ->
+ Name = my_stm,
+ LocalSTM = {local,Name},
+ GlobalSTM = {global,Name},
+
+ {ok,Pid} =
+ gen_statem:start_link(LocalSTM, ?MODULE, start_arg(Config, []), []),
+ stop_it(Pid),
+
+ {ok,_Pid1} =
+ gen_statem:start_link(LocalSTM, ?MODULE, start_arg(Config, []), []),
+ stop_it(Name),
+
+ {ok,Pid2} =
+ gen_statem:start(GlobalSTM, ?MODULE, start_arg(Config, []), []),
+ stop_it(Pid2),
+ receive after 1 -> true end,
+ Result =
+ gen_statem:start(GlobalSTM, ?MODULE, start_arg(Config, []), []),
+ ct:log("Result = ~p~n",[Result]),
+ {ok,_Pid3} = Result,
+ stop_it(GlobalSTM),
+
+ ok = verify_empty_msgq().
+
+%% Via register linked
+start12(Config) ->
+ dummy_via:reset(),
+ VIA = {via,dummy_via,my_stm},
+
+ {ok,Pid} =
+ gen_statem:start_link(VIA, ?MODULE, start_arg(Config, []), []),
+ {error,{already_started,Pid}} =
+ gen_statem:start_link(VIA, ?MODULE, start_arg(Config, []), []),
+ {error,{already_started,Pid}} =
+ gen_statem:start(VIA, ?MODULE, start_arg(Config, []), []),
+
+ ok = do_func_test(Pid),
+ ok = do_sync_func_test(Pid),
+ ok = do_func_test(VIA),
+ ok = do_sync_func_test(VIA),
+ stop_it(VIA),
+
+ ok = verify_empty_msgq().
+
+
+%% Anonymous, reason 'normal'
+stop1(Config) ->
+ {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+ ok = gen_statem:stop(Pid),
+ false = erlang:is_process_alive(Pid),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(Pid), Reason).
+
+%% Anonymous, other reason
+stop2(Config) ->
+ {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+ ok = gen_statem:stop(Pid, other_reason, infinity),
+ false = erlang:is_process_alive(Pid),
+ ok.
+
+%% Anonymous, invalid timeout
+stop3(Config) ->
+ {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+ _ =
+ ?EXPECT_FAILURE(
+ gen_statem:stop(Pid, other_reason, invalid_timeout),
+ Reason),
+ true = erlang:is_process_alive(Pid),
+ ok = gen_statem:stop(Pid),
+ false = erlang:is_process_alive(Pid),
+ ok.
+
+%% Registered name
+stop4(Config) ->
+ {ok,Pid} =
+ gen_statem:start(
+ {local,to_stop},?MODULE, start_arg(Config, []), []),
+ ok = gen_statem:stop(to_stop),
+ false = erlang:is_process_alive(Pid),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(to_stop), Reason),
+ ok.
+
+%% Registered name and local node
+stop5(Config) ->
+ Name = to_stop,
+ {ok,Pid} =
+ gen_statem:start(
+ {local,Name},?MODULE, start_arg(Config, []), []),
+ ok = gen_statem:stop({Name,node()}),
+ false = erlang:is_process_alive(Pid),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop({Name,node()}), Reason),
+ ok.
+
+%% Globally registered name
+stop6(Config) ->
+ STM = {global,to_stop},
+ {ok,Pid} = gen_statem:start(STM, ?MODULE, start_arg(Config, []), []),
+ ok = gen_statem:stop(STM),
+ false = erlang:is_process_alive(Pid),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(STM), Reason),
+ ok.
+
+%% 'via' registered name
+stop7(Config) ->
+ VIA = {via,dummy_via,to_stop},
+ dummy_via:reset(),
+ {ok,Pid} = gen_statem:start(VIA, ?MODULE, start_arg(Config, []), []),
+ ok = gen_statem:stop(VIA),
+ false = erlang:is_process_alive(Pid),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(VIA), Reason),
+ ok.
+
+%% Anonymous on remote node
+stop8(Config) ->
+ Node = gen_statem_stop8,
+ {ok,NodeName} = ct_slave:start(Node),
+ Dir = filename:dirname(code:which(?MODULE)),
+ rpc:call(NodeName, code, add_path, [Dir]),
+ {ok,Pid} =
+ rpc:call(
+ NodeName, gen_statem,start,
+ [?MODULE,start_arg(Config, []),[]]),
+ ok = gen_statem:stop(Pid),
+ false = rpc:call(NodeName, erlang, is_process_alive, [Pid]),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(Pid), Reason1),
+ {ok,NodeName} = ct_slave:stop(Node),
+ {{nodedown,NodeName},{sys,terminate,_}} =
+ ?EXPECT_FAILURE(gen_statem:stop(Pid), Reason2),
+ ok.
+
+%% Registered name on remote node
+stop9(Config) ->
+ Name = to_stop,
+ LocalSTM = {local,Name},
+ Node = gen_statem__stop9,
+ {ok,NodeName} = ct_slave:start(Node),
+ STM = {Name,NodeName},
+ Dir = filename:dirname(code:which(?MODULE)),
+ rpc:call(NodeName, code, add_path, [Dir]),
+ {ok,Pid} =
+ rpc:call(
+ NodeName, gen_statem, start,
+ [LocalSTM,?MODULE,start_arg(Config, []),[]]),
+ ok = gen_statem:stop(STM),
+ undefined = rpc:call(NodeName,erlang,whereis,[Name]),
+ false = rpc:call(NodeName,erlang,is_process_alive,[Pid]),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(STM), Reason1),
+ {ok,NodeName} = ct_slave:stop(Node),
+ {{nodedown,NodeName},{sys,terminate,_}} =
+ ?EXPECT_FAILURE(gen_statem:stop(STM), Reason2),
+ ok.
+
+%% Globally registered name on remote node
+stop10(Config) ->
+ Node = gen_statem_stop10,
+ STM = {global,to_stop},
+ {ok,NodeName} = ct_slave:start(Node),
+ Dir = filename:dirname(code:which(?MODULE)),
+ rpc:call(NodeName,code,add_path,[Dir]),
+ {ok,Pid} =
+ rpc:call(
+ NodeName, gen_statem, start,
+ [STM,?MODULE,start_arg(Config, []),[]]),
+ global:sync(),
+ ok = gen_statem:stop(STM),
+ false = rpc:call(NodeName, erlang, is_process_alive, [Pid]),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(STM), Reason1),
+ {ok,NodeName} = ct_slave:stop(Node),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(STM), Reason2),
+ ok.
+
+%% Check that time outs in calls work
+abnormal1(Config) ->
+ Name = abnormal1,
+ LocalSTM = {local,Name},
+
+ {ok, _Pid} =
+ gen_statem:start(LocalSTM, ?MODULE, start_arg(Config, []), []),
+
+ %% timeout call.
+ delayed = gen_statem:call(Name, {delayed_answer,1}, 100),
+ {timeout,_} =
+ ?EXPECT_FAILURE(
+ gen_statem:call(Name, {delayed_answer,1000}, 10),
+ Reason),
+ ok = gen_statem:stop(Name),
+ ok = verify_empty_msgq().
+
+%% Check that bad return values makes the stm crash. Note that we must
+%% trap exit since we must link to get the real bad_return_ error
+abnormal2(Config) ->
+ OldFl = process_flag(trap_exit, true),
+ {ok,Pid} = gen_statem:start_link(?MODULE, start_arg(Config, []), []),
+
+ %% bad return value in the gen_statem loop
+ {{bad_return_value,badreturn},_} =
+ ?EXPECT_FAILURE(gen_statem:call(Pid, badreturn), Reason),
+ receive
+ {'EXIT',Pid,{bad_return_value,badreturn}} -> ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ process_flag(trap_exit, OldFl),
+ ok = verify_empty_msgq().
+
+shutdown(Config) ->
+ process_flag(trap_exit, true),
+
+ {ok,Pid0} = gen_statem:start_link(?MODULE, start_arg(Config, []), []),
+ ok = do_func_test(Pid0),
+ ok = do_sync_func_test(Pid0),
+ stopped = gen_statem:call(Pid0, {stop,{shutdown,reason}}),
+ receive {'EXIT',Pid0,{shutdown,reason}} -> ok end,
+ process_flag(trap_exit, false),
+
+ {noproc,_} =
+ ?EXPECT_FAILURE(gen_statem:call(Pid0, hej), Reason),
+
+ receive
+ Any ->
+ ct:log("Unexpected: ~p", [Any]),
+ ct:fail({unexpected,Any})
+ after 500 ->
+ ok
+ end.
+
+
+
+stop_and_reply(_Config) ->
+ process_flag(trap_exit, true),
+
+ Machine =
+ %% Abusing the internal format of From...
+ #{init =>
+ fun () ->
+ {ok,start,undefined}
+ end,
+ start =>
+ fun (cast, {echo,From1,Reply1}, undefined) ->
+ {next_state,wait,{reply,From1,Reply1}}
+ end,
+ wait =>
+ fun (cast, {stop_and_reply,Reason,From2,Reply2},R1) ->
+ {stop_and_reply,Reason,
+ [R1,{reply,From2,Reply2}]}
+ end},
+ {ok,STM} = gen_statem:start_link(?MODULE, {map_statem,Machine}, []),
+
+ Self = self(),
+ Tag1 = make_ref(),
+ gen_statem:cast(STM, {echo,{Self,Tag1},reply1}),
+ Tag2 = make_ref(),
+ gen_statem:cast(STM, {stop_and_reply,reason,{Self,Tag2},reply2}),
+ case flush() of
+ [{Tag1,reply1},{Tag2,reply2},{'EXIT',STM,reason}] ->
+ ok;
+ Other1 ->
+ ct:fail({unexpected,Other1})
+ end,
+
+ {noproc,_} =
+ ?EXPECT_FAILURE(gen_statem:call(STM, hej), Reason),
+ case flush() of
+ [] ->
+ ok;
+ Other2 ->
+ ct:fail({unexpected,Other2})
+ end.
+
+
+
+event_order(_Config) ->
+ process_flag(trap_exit, true),
+
+ Machine =
+ %% Abusing the internal format of From...
+ #{init =>
+ fun () ->
+ {ok,start,undefined}
+ end,
+ start =>
+ fun (cast, _, _) ->
+ {keep_state_and_data,postpone}; %% Handled in 'buffer'
+ ({call,From}, {buffer,Pid,[Tag3,Tag4,Tag5]},
+ undefined) ->
+ {next_state,buffer,[],
+ [{next_event,internal,{reply,{Pid,Tag3},ok3}},
+ {next_event,internal,{reply,{Pid,Tag4},ok4}},
+ {timeout,0,{reply,{Pid,Tag5},ok5}},
+ %% The timeout should not happen since there
+ %% are events that cancel it i.e next_event
+ %% and postponed
+ {reply,From,ok}]}
+ end,
+ buffer =>
+ fun (internal, Reply, Replies) ->
+ {keep_state,[Reply|Replies]};
+ (timeout, Reply, Replies) ->
+ {keep_state,[Reply|Replies]};
+ (cast, Reply, Replies) ->
+ {keep_state,[Reply|Replies]};
+ ({call,From}, {stop,Reason}, Replies) ->
+ {next_state,stop,undefined,
+ lists:reverse(
+ Replies,
+ [{reply,From,ok},
+ {next_event,internal,{stop,Reason}}])}
+ end,
+ stop =>
+ fun (internal, Result, undefined) ->
+ Result
+ end},
+
+ {ok,STM} = gen_statem:start_link(?MODULE, {map_statem,Machine}, []),
+ Self = self(),
+ Tag1 = make_ref(),
+ gen_statem:cast(STM, {reply,{Self,Tag1},ok1}),
+ Tag2 = make_ref(),
+ gen_statem:cast(STM, {reply,{Self,Tag2},ok2}),
+ Tag3 = make_ref(),
+ Tag4 = make_ref(),
+ Tag5 = make_ref(),
+ ok = gen_statem:call(STM, {buffer,Self,[Tag3,Tag4,Tag5]}),
+ ok = gen_statem:call(STM, {stop,reason}),
+ case flush() of
+ [{Tag3,ok3},{Tag4,ok4},{Tag1,ok1},{Tag2,ok2},
+ {'EXIT',STM,reason}] ->
+ ok;
+ Other1 ->
+ ct:fail({unexpected,Other1})
+ end,
+
+ {noproc,_} =
+ ?EXPECT_FAILURE(gen_statem:call(STM, hej), Reason),
+ case flush() of
+ [] ->
+ ok;
+ Other2 ->
+ ct:fail({unexpected,Other2})
+ end.
+
+
+
+sys1(Config) ->
+ {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+ {status, Pid, {module,gen_statem}, _} = sys:get_status(Pid),
+ sys:suspend(Pid),
+ Parent = self(),
+ Tag = make_ref(),
+ Caller =
+ spawn(
+ fun () ->
+ Parent ! {Tag,gen_statem:call(Pid, hej)}
+ end),
+ receive
+ {Tag,_} ->
+ ct:fail(should_be_suspended)
+ after 3000 ->
+ exit(Caller, ok)
+ end,
+
+ %% {timeout,_} =
+ %% ?EXPECT_FAILURE(gen_statem:call(Pid, hej), Reason),
+ sys:resume(Pid),
+ stop_it(Pid).
+
+code_change(Config) ->
+ Mode = handle_event_function,
+ {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+ {idle,data} = sys:get_state(Pid),
+ sys:suspend(Pid),
+ sys:change_code(Pid, ?MODULE, old_vsn, Mode),
+ sys:resume(Pid),
+ {idle,{old_vsn,data,Mode}} = sys:get_state(Pid),
+ Mode = gen_statem:call(Pid, get_callback_mode),
+ stop_it(Pid).
+
+call_format_status(Config) ->
+ {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+ Status = sys:get_status(Pid),
+ {status,Pid,_Mod,[_PDict,running,_,_, Data]} = Status,
+ [format_status_called|_] = lists:reverse(Data),
+ stop_it(Pid),
+
+ %% check that format_status can handle a name being an atom (pid is
+ %% already checked by the previous test)
+ {ok, Pid2} =
+ gen_statem:start(
+ {local, gstm}, ?MODULE, start_arg(Config, []), []),
+ Status2 = sys:get_status(gstm),
+ {status,Pid2,_Mod,[_PDict2,running,_,_,Data2]} = Status2,
+ [format_status_called|_] = lists:reverse(Data2),
+ stop_it(Pid2),
+
+ %% check that format_status can handle a name being a term other than a
+ %% pid or atom
+ GlobalName1 = {global,"CallFormatStatus"},
+ {ok,Pid3} =
+ gen_statem:start(
+ GlobalName1, ?MODULE, start_arg(Config, []), []),
+ Status3 = sys:get_status(GlobalName1),
+ {status,Pid3,_Mod,[_PDict3,running,_,_,Data3]} = Status3,
+ [format_status_called|_] = lists:reverse(Data3),
+ stop_it(Pid3),
+ GlobalName2 = {global,{name, "term"}},
+ {ok,Pid4} =
+ gen_statem:start(
+ GlobalName2, ?MODULE, start_arg(Config, []), []),
+ Status4 = sys:get_status(GlobalName2),
+ {status,Pid4,_Mod,[_PDict4,running,_,_, Data4]} = Status4,
+ [format_status_called|_] = lists:reverse(Data4),
+ stop_it(Pid4),
+
+ %% check that format_status can handle a name being a term other than a
+ %% pid or atom
+ dummy_via:reset(),
+ ViaName1 = {via,dummy_via,"CallFormatStatus"},
+ {ok,Pid5} = gen_statem:start(ViaName1, ?MODULE, start_arg(Config, []), []),
+ Status5 = sys:get_status(ViaName1),
+ {status,Pid5,_Mod, [_PDict5,running,_,_, Data5]} = Status5,
+ [format_status_called|_] = lists:reverse(Data5),
+ stop_it(Pid5),
+ ViaName2 = {via,dummy_via,{name,"term"}},
+ {ok, Pid6} =
+ gen_statem:start(
+ ViaName2, ?MODULE, start_arg(Config, []), []),
+ Status6 = sys:get_status(ViaName2),
+ {status,Pid6,_Mod,[_PDict6,running,_,_,Data6]} = Status6,
+ [format_status_called|_] = lists:reverse(Data6),
+ stop_it(Pid6).
+
+
+
+error_format_status(Config) ->
+ error_logger_forwarder:register(),
+ OldFl = process_flag(trap_exit, true),
+ Data = "called format_status",
+ {ok,Pid} =
+ gen_statem:start(
+ ?MODULE, start_arg(Config, {data,Data}), []),
+ %% bad return value in the gen_statem loop
+ {{bad_return_value,badreturn},_} =
+ ?EXPECT_FAILURE(gen_statem:call(Pid, badreturn), Reason),
+ receive
+ {error,_,
+ {Pid,
+ "** State machine"++_,
+ [Pid,{{call,_},badreturn},
+ {formatted,idle,Data},
+ error,{bad_return_value,badreturn}|_]}} ->
+ ok;
+ Other when is_tuple(Other), element(1, Other) =:= error ->
+ error_logger_forwarder:unregister(),
+ ct:fail({unexpected,Other})
+ after 1000 ->
+ error_logger_forwarder:unregister(),
+ ct:fail(timeout)
+ end,
+ process_flag(trap_exit, OldFl),
+ error_logger_forwarder:unregister(),
+ receive
+ %% Comes with SASL
+ {error_report,_,{Pid,crash_report,_}} ->
+ ok
+ after 500 ->
+ ok
+ end,
+ ok = verify_empty_msgq().
+
+terminate_crash_format(Config) ->
+ error_logger_forwarder:register(),
+ OldFl = process_flag(trap_exit, true),
+ Data = crash_terminate,
+ {ok,Pid} =
+ gen_statem:start(
+ ?MODULE, start_arg(Config, {data,Data}), []),
+ stop_it(Pid),
+ Self = self(),
+ receive
+ {error,_GroupLeader,
+ {Pid,
+ "** State machine"++_,
+ [Pid,
+ {{call,{Self,_}},stop},
+ {formatted,idle,Data},
+ exit,{crash,terminate}|_]}} ->
+ ok;
+ Other when is_tuple(Other), element(1, Other) =:= error ->
+ error_logger_forwarder:unregister(),
+ ct:fail({unexpected,Other})
+ after 1000 ->
+ error_logger_forwarder:unregister(),
+ ct:fail(timeout)
+ end,
+ process_flag(trap_exit, OldFl),
+ error_logger_forwarder:unregister(),
+ receive
+ %% Comes with SASL
+ {error_report,_,{Pid,crash_report,_}} ->
+ ok
+ after 500 ->
+ ok
+ end,
+ ok = verify_empty_msgq().
+
+
+get_state(Config) ->
+ State = self(),
+ {ok,Pid} =
+ gen_statem:start(
+ ?MODULE, start_arg(Config, {data,State}), []),
+ {idle,State} = sys:get_state(Pid),
+ {idle,State} = sys:get_state(Pid, 5000),
+ stop_it(Pid),
+
+ %% check that get_state can handle a name being an atom (pid is
+ %% already checked by the previous test)
+ {ok,Pid2} =
+ gen_statem:start(
+ {local,gstm}, ?MODULE, start_arg(Config, {data,State}), []),
+ {idle,State} = sys:get_state(gstm),
+ {idle,State} = sys:get_state(gstm, 5000),
+ stop_it(Pid2),
+
+ %% check that get_state works when pid is sys suspended
+ {ok,Pid3} =
+ gen_statem:start(
+ ?MODULE, start_arg(Config, {data,State}), []),
+ {idle,State} = sys:get_state(Pid3),
+ ok = sys:suspend(Pid3),
+ {idle,State} = sys:get_state(Pid3, 5000),
+ ok = sys:resume(Pid3),
+ stop_it(Pid3),
+ ok = verify_empty_msgq().
+
+replace_state(Config) ->
+ State = self(),
+ {ok, Pid} =
+ gen_statem:start(
+ ?MODULE, start_arg(Config, {data,State}), []),
+ {idle,State} = sys:get_state(Pid),
+ NState1 = "replaced",
+ Replace1 = fun({StateName, _}) -> {StateName,NState1} end,
+ {idle,NState1} = sys:replace_state(Pid, Replace1),
+ {idle,NState1} = sys:get_state(Pid),
+ NState2 = "replaced again",
+ Replace2 = fun({idle, _}) -> {state0,NState2} end,
+ {state0,NState2} = sys:replace_state(Pid, Replace2, 5000),
+ {state0,NState2} = sys:get_state(Pid),
+ %% verify no change in state if replace function crashes
+ Replace3 = fun(_) -> error(fail) end,
+ {callback_failed,
+ {gen_statem,system_replace_state},{error,fail}} =
+ ?EXPECT_FAILURE(sys:replace_state(Pid, Replace3), Reason),
+ {state0, NState2} = sys:get_state(Pid),
+ %% verify state replaced if process sys suspended
+ ok = sys:suspend(Pid),
+ Suffix2 = " and again",
+ NState3 = NState2 ++ Suffix2,
+ Replace4 = fun({StateName, _}) -> {StateName, NState3} end,
+ {state0,NState3} = sys:replace_state(Pid, Replace4),
+ ok = sys:resume(Pid),
+ {state0,NState3} = sys:get_state(Pid, 5000),
+ stop_it(Pid),
+ ok = verify_empty_msgq().
+
+%% Hibernation
+hibernate(Config) ->
+ OldFl = process_flag(trap_exit, true),
+
+ {ok,Pid0} =
+ gen_statem:start_link(
+ ?MODULE, start_arg(Config, hiber_now), []),
+ is_in_erlang_hibernate(Pid0),
+ stop_it(Pid0),
+ receive
+ {'EXIT',Pid0,normal} -> ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ {ok,Pid} =
+ gen_statem:start_link(?MODULE, start_arg(Config, hiber), []),
+ true = ({current_function,{erlang,hibernate,3}} =/=
+ erlang:process_info(Pid,current_function)),
+ hibernating = gen_statem:call(Pid, hibernate_sync),
+ is_in_erlang_hibernate(Pid),
+ good_morning = gen_statem:call(Pid, wakeup_sync),
+ is_not_in_erlang_hibernate(Pid),
+ hibernating = gen_statem:call(Pid, hibernate_sync),
+ is_in_erlang_hibernate(Pid),
+ please_just_five_more = gen_statem:call(Pid, snooze_sync),
+ is_in_erlang_hibernate(Pid),
+ good_morning = gen_statem:call(Pid, wakeup_sync),
+ is_not_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, hibernate_async),
+ is_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, wakeup_async),
+ is_not_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, hibernate_async),
+ is_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, snooze_async),
+ is_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, wakeup_async),
+ is_not_in_erlang_hibernate(Pid),
+
+ Pid ! hibernate_later,
+ true =
+ ({current_function,{erlang,hibernate,3}} =/=
+ erlang:process_info(Pid, current_function)),
+ is_in_erlang_hibernate(Pid),
+
+ 'alive!' = gen_statem:call(Pid, 'alive?'),
+ true =
+ ({current_function,{erlang,hibernate,3}} =/=
+ erlang:process_info(Pid, current_function)),
+ Pid ! hibernate_now,
+ is_in_erlang_hibernate(Pid),
+
+ 'alive!' = gen_statem:call(Pid, 'alive?'),
+ true =
+ ({current_function,{erlang,hibernate,3}} =/=
+ erlang:process_info(Pid, current_function)),
+
+ hibernating = gen_statem:call(Pid, hibernate_sync),
+ is_in_erlang_hibernate(Pid),
+ good_morning = gen_statem:call(Pid, wakeup_sync),
+ is_not_in_erlang_hibernate(Pid),
+ hibernating = gen_statem:call(Pid, hibernate_sync),
+ is_in_erlang_hibernate(Pid),
+ please_just_five_more = gen_statem:call(Pid, snooze_sync),
+ is_in_erlang_hibernate(Pid),
+ good_morning = gen_statem:call(Pid, wakeup_sync),
+ is_not_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, hibernate_async),
+ is_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, wakeup_async),
+ is_not_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, hibernate_async),
+ is_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, snooze_async),
+ is_in_erlang_hibernate(Pid),
+ ok = gen_statem:cast(Pid, wakeup_async),
+ is_not_in_erlang_hibernate(Pid),
+
+ hibernating = gen_statem:call(Pid, hibernate_sync),
+ is_in_erlang_hibernate(Pid),
+ sys:suspend(Pid),
+ is_in_erlang_hibernate(Pid),
+ sys:resume(Pid),
+ is_in_erlang_hibernate(Pid),
+ receive after 1000 -> ok end,
+ is_in_erlang_hibernate(Pid),
+
+ good_morning = gen_statem:call(Pid, wakeup_sync),
+ is_not_in_erlang_hibernate(Pid),
+ stop_it(Pid),
+ process_flag(trap_exit, OldFl),
+ receive
+ {'EXIT',Pid,normal} -> ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+ ok = verify_empty_msgq().
+
+is_in_erlang_hibernate(Pid) ->
+ receive after 1 -> ok end,
+ is_in_erlang_hibernate_1(200, Pid).
+
+is_in_erlang_hibernate_1(0, Pid) ->
+ ct:log("~p\n", [erlang:process_info(Pid, current_function)]),
+ ct:fail(not_in_erlang_hibernate_3);
+is_in_erlang_hibernate_1(N, Pid) ->
+ {current_function,MFA} = erlang:process_info(Pid, current_function),
+ case MFA of
+ {erlang,hibernate,3} ->
+ ok;
+ _ ->
+ receive after 10 -> ok end,
+ is_in_erlang_hibernate_1(N-1, Pid)
+ end.
+
+is_not_in_erlang_hibernate(Pid) ->
+ receive after 1 -> ok end,
+ is_not_in_erlang_hibernate_1(200, Pid).
+
+is_not_in_erlang_hibernate_1(0, Pid) ->
+ ct:log("~p\n", [erlang:process_info(Pid, current_function)]),
+ ct:fail(not_in_erlang_hibernate_3);
+is_not_in_erlang_hibernate_1(N, Pid) ->
+ {current_function,MFA} = erlang:process_info(Pid, current_function),
+ case MFA of
+ {erlang,hibernate,3} ->
+ receive after 10 -> ok end,
+ is_not_in_erlang_hibernate_1(N-1, Pid);
+ _ ->
+ ok
+ end.
+
+
+enter_loop(_Config) ->
+ OldFlag = process_flag(trap_exit, true),
+
+ dummy_via:reset(),
+
+ %% Locally registered process + {local,Name}
+ {ok,Pid1a} =
+ proc_lib:start_link(?MODULE, enter_loop, [local,local]),
+ yes = gen_statem:call(Pid1a, 'alive?'),
+ stopped = gen_statem:call(Pid1a, stop),
+ receive
+ {'EXIT',Pid1a,normal} ->
+ ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ %% Unregistered process + {local,Name}
+ {ok,Pid1b} =
+ proc_lib:start_link(?MODULE, enter_loop, [anon,local]),
+ receive
+ {'EXIT',Pid1b,process_not_registered} ->
+ ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ %% Globally registered process + {global,Name}
+ {ok,Pid2a} =
+ proc_lib:start_link(?MODULE, enter_loop, [global,global]),
+ yes = gen_statem:call(Pid2a, 'alive?'),
+ stopped = gen_statem:call(Pid2a, stop),
+ receive
+ {'EXIT',Pid2a,normal} ->
+ ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ %% Unregistered process + {global,Name}
+ {ok,Pid2b} =
+ proc_lib:start_link(?MODULE, enter_loop, [anon,global]),
+ receive
+ {'EXIT',Pid2b,process_not_registered_globally} ->
+ ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ %% Unregistered process + no name
+ {ok,Pid3} =
+ proc_lib:start_link(?MODULE, enter_loop, [anon,anon]),
+ yes = gen_statem:call(Pid3, 'alive?'),
+ stopped = gen_statem:call(Pid3, stop),
+ receive
+ {'EXIT',Pid3,normal} ->
+ ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ %% Process not started using proc_lib
+ CallbackMode = state_functions,
+ Pid4 =
+ spawn_link(
+ gen_statem, enter_loop,
+ [?MODULE,[],CallbackMode,state0,[]]),
+ receive
+ {'EXIT',Pid4,process_was_not_started_by_proc_lib} ->
+ ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ %% Make sure I am the parent, ie that ordering a shutdown will
+ %% result in the process terminating with Reason==shutdown
+ {ok,Pid5} =
+ proc_lib:start_link(?MODULE, enter_loop, [anon,anon]),
+ yes = gen_statem:call(Pid5, 'alive?'),
+ exit(Pid5, shutdown),
+ receive
+ {'EXIT',Pid5,shutdown} ->
+ ok
+ after 5000 ->
+ ct:fail(gen_statem_did_not_die)
+ end,
+
+ %% Make sure gen_statem:enter_loop does not accept {local,Name}
+ %% when it's another process than the calling one which is
+ %% registered under that name
+ register(armitage, self()),
+ {ok,Pid6a} =
+ proc_lib:start_link(?MODULE, enter_loop, [anon,local]),
+ receive
+ {'EXIT',Pid6a,process_not_registered} ->
+ ok
+ after 1000 ->
+ ct:fail(gen_statem_started)
+ end,
+ unregister(armitage),
+
+ %% Make sure gen_statem:enter_loop does not accept {global,Name}
+ %% when it's another process than the calling one which is
+ %% registered under that name
+ global:register_name(armitage, self()),
+ {ok,Pid6b} =
+ proc_lib:start_link(?MODULE, enter_loop, [anon,global]),
+ receive
+ {'EXIT',Pid6b,process_not_registered_globally} ->
+ ok
+ after 1000 ->
+ ct:fail(gen_statem_started)
+ end,
+ global:unregister_name(armitage),
+
+ dummy_via:register_name(armitage, self()),
+ {ok,Pid6c} =
+ proc_lib:start_link(?MODULE, enter_loop, [anon,via]),
+ receive
+ {'EXIT',Pid6c,{process_not_registered_via,dummy_via}} ->
+ ok
+ after 1000 ->
+ ct:fail(
+ {gen_statem_started,
+ process_info(self(), messages)})
+ end,
+ dummy_via:unregister_name(armitage),
+
+ process_flag(trap_exit, OldFlag),
+ ok = verify_empty_msgq().
+
+enter_loop(Reg1, Reg2) ->
+ process_flag(trap_exit, true),
+ case Reg1 of
+ local -> register(armitage, self());
+ global -> global:register_name(armitage, self());
+ via -> dummy_via:register_name(armitage, self());
+ anon -> ignore
+ end,
+ proc_lib:init_ack({ok, self()}),
+ CallbackMode = state_functions,
+ case Reg2 of
+ local ->
+ gen_statem:enter_loop(
+ ?MODULE, [], CallbackMode, state0, [], {local,armitage});
+ global ->
+ gen_statem:enter_loop(
+ ?MODULE, [], CallbackMode, state0, [], {global,armitage});
+ via ->
+ gen_statem:enter_loop(
+ ?MODULE, [], CallbackMode, state0, [],
+ {via, dummy_via, armitage});
+ anon ->
+ gen_statem:enter_loop(
+ ?MODULE, [], CallbackMode, state0, [])
+ end.
+
+
+%% Test the order for multiple {next_event,T,C}
+next_events(Config) ->
+ {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+ ok = gen_statem:cast(Pid, next_event),
+ {state,next_events,[]} = gen_statem:call(Pid, get),
+ ok = gen_statem:stop(Pid),
+ false = erlang:is_process_alive(Pid),
+ noproc =
+ ?EXPECT_FAILURE(gen_statem:stop(Pid), Reason).
+
+
+%%
+%% Functionality check
+%%
+
+wfor(Msg) ->
+ receive
+ Msg -> ok
+ after 5000 ->
+ error(timeout)
+ end.
+
+
+stop_it(STM) ->
+ stopped = gen_statem:call(STM, stop),
+ check_stopped(STM).
+
+
+check_stopped(STM) ->
+ Call = there_you_are,
+ {_,{gen_statem,call,[_,Call,infinity]}} =
+ ?EXPECT_FAILURE(gen_statem:call(STM, Call), Reason),
+ ok.
+
+
+do_func_test(STM) ->
+ ok = gen_statem:cast(STM, {'alive?',self()}),
+ wfor(yes),
+ ok = do_connect(STM),
+ ok = gen_statem:cast(STM, {'alive?',self()}),
+ wfor(yes),
+ ?t:do_times(3, ?MODULE, do_msg, [STM]),
+ ok = gen_statem:cast(STM, {'alive?',self()}),
+ wfor(yes),
+ ok = do_disconnect(STM),
+ ok = gen_statem:cast(STM, {'alive?',self()}),
+ wfor(yes),
+ ok.
+
+
+do_connect(STM) ->
+ check_state(STM, idle),
+ gen_statem:cast(STM, {connect,self()}),
+ wfor(accept),
+ check_state(STM, wfor_conf),
+ Tag = make_ref(),
+ gen_statem:cast(STM, {ping,self(),Tag}),
+ gen_statem:cast(STM, confirm),
+ wfor({pong,Tag}),
+ check_state(STM, connected),
+ ok.
+
+do_msg(STM) ->
+ check_state(STM, connected),
+ R = make_ref(),
+ ok = gen_statem:cast(STM, {msg,self(),R}),
+ wfor({ack,R}).
+
+
+do_disconnect(STM) ->
+ ok = gen_statem:cast(STM, disconnect),
+ check_state(STM, idle).
+
+check_state(STM, State) ->
+ case gen_statem:call(STM, get) of
+ {state, State, _} -> ok
+ end.
+
+do_sync_func_test(STM) ->
+ yes = gen_statem:call(STM, 'alive?'),
+ ok = do_sync_connect(STM),
+ yes = gen_statem:call(STM, 'alive?'),
+ ?t:do_times(3, ?MODULE, do_sync_msg, [STM]),
+ yes = gen_statem:call(STM, 'alive?'),
+ ok = do_sync_disconnect(STM),
+ yes = gen_statem:call(STM, 'alive?'),
+ check_state(STM, idle),
+ ok = gen_statem:call(STM, {timeout,200}),
+ yes = gen_statem:call(STM, 'alive?'),
+ check_state(STM, idle),
+ ok.
+
+
+do_sync_connect(STM) ->
+ check_state(STM, idle),
+ accept = gen_statem:call(STM, connect),
+ check_state(STM, wfor_conf),
+ Tag = make_ref(),
+ gen_statem:cast(STM, {ping,self(),Tag}),
+ yes = gen_statem:call(STM, confirm),
+ wfor({pong,Tag}),
+ check_state(STM, connected),
+ ok.
+
+do_sync_msg(STM) ->
+ check_state(STM, connected),
+ R = make_ref(),
+ {ack,R} = gen_statem:call(STM, {msg,R}),
+ ok.
+
+do_sync_disconnect(STM) ->
+ yes = gen_statem:call(STM, disconnect),
+ check_state(STM, idle).
+
+
+verify_empty_msgq() ->
+ [] = flush(),
+ ok.
+
+start_arg(Config, Arg) ->
+ case lists:keyfind(callback_mode, 1, Config) of
+ {_,CallbackMode} ->
+ {callback_mode,CallbackMode,Arg};
+ false ->
+ Arg
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The State Machine
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init(ignore) ->
+ ignore;
+init(stop) ->
+ {stop,stopped};
+init(stop_shutdown) ->
+ {stop,shutdown};
+init(sleep) ->
+ ?t:sleep(1000),
+ {state_functions,idle,data};
+init(hiber) ->
+ {state_functions,hiber_idle,[]};
+init(hiber_now) ->
+ {state_functions,hiber_idle,[],[hibernate]};
+init({data, Data}) ->
+ {state_functions,idle,Data};
+init({callback_mode,CallbackMode,Arg}) ->
+ case init(Arg) of
+ {_,State,Data,Ops} ->
+ {CallbackMode,State,Data,Ops};
+ {_,State,Data} ->
+ {CallbackMode,State,Data};
+ Other ->
+ Other
+ end;
+init({map_statem,#{init := Init}=Machine}) ->
+ case Init() of
+ {ok,State,Data,Ops} ->
+ {handle_event_function,State,[Data|Machine],Ops};
+ {ok,State,Data} ->
+ {handle_event_function,State,[Data|Machine]};
+ Other ->
+ Other
+ end;
+init([]) ->
+ {state_functions,idle,data}.
+
+terminate(_, _State, crash_terminate) ->
+ exit({crash,terminate});
+terminate({From,stopped}, State, _Data) ->
+ From ! {self(),{stopped,State}},
+ ok;
+terminate(_Reason, _State, _Data) ->
+ ok.
+
+
+%% State functions
+
+idle(cast, {connect,Pid}, Data) ->
+ Pid ! accept,
+ {next_state,wfor_conf,Data,infinity}; % NoOp timeout just to test API
+idle({call,From}, connect, Data) ->
+ gen_statem:reply(From, accept),
+ {next_state,wfor_conf,Data,infinity}; % NoOp timeout just to test API
+idle(cast, badreturn, _Data) ->
+ badreturn;
+idle({call,_From}, badreturn, _Data) ->
+ badreturn;
+idle({call,From}, {delayed_answer,T}, Data) ->
+ receive
+ after T ->
+ gen_statem:reply({reply,From,delayed}),
+ throw({keep_state,Data})
+ end;
+idle({call,From}, {timeout,Time}, _Data) ->
+ {next_state,timeout,{From,Time},
+ {timeout,Time,idle}};
+idle(cast, next_event, _Data) ->
+ {next_state,next_events,[a,b,c],
+ [{next_event,internal,a},
+ {next_event,internal,b},
+ {next_event,internal,c}]};
+idle(Type, Content, Data) ->
+ case handle_common_events(Type, Content, idle, Data) of
+ undefined ->
+ case Type of
+ {call,From} ->
+ throw({keep_state,Data,[{reply,From,'eh?'}]});
+ _ ->
+ throw(
+ {stop,{unexpected,idle,Type,Content}})
+ end;
+ Result ->
+ Result
+ end.
+
+timeout(timeout, idle, {From,Time}) ->
+ TRef = erlang:start_timer(Time, self(), ok),
+ {keep_state,{From,TRef},0}; % Immediate timeout 0
+timeout(timeout, 0, {From,TRef}) ->
+ {next_state,timeout2,{From,TRef},
+ [{timeout,1,should_be_cancelled},
+ postpone]}; % Should cancel state timeout
+timeout(_, _, _) ->
+ keep_state_and_data.
+
+timeout2(timeout, 0, _) ->
+ keep_state_and_data;
+timeout2(timeout, Reason, _) ->
+ {stop,Reason};
+timeout2(info, {timeout,TRef,Result}, {From,TRef}) ->
+ gen_statem:reply([{reply,From,Result}]),
+ {next_state,idle,state};
+timeout2(_, _, _) ->
+ {keep_state_and_data,[]}.
+
+wfor_conf({call,From}, confirm, Data) ->
+ {next_state,connected,Data,
+ {reply,From,yes}};
+wfor_conf(cast, {ping,_,_}, _) ->
+ {keep_state_and_data,[postpone]};
+wfor_conf(cast, confirm, Data) ->
+ {next_state,connected,Data};
+wfor_conf(Type, Content, Data) ->
+ case handle_common_events(Type, Content, wfor_conf, Data) of
+ undefined ->
+ case Type of
+ {call,From} ->
+ {next_state,idle,Data,
+ [{reply,From,'eh?'}]};
+ _ ->
+ throw(keep_state_and_data)
+ end;
+ Result ->
+ Result
+ end.
+
+connected({call,From}, {msg,Ref}, Data) ->
+ {keep_state,Data,
+ {reply,From,{ack,Ref}}};
+connected(cast, {msg,From,Ref}, Data) ->
+ From ! {ack,Ref},
+ {keep_state,Data};
+connected({call,From}, disconnect, Data) ->
+ {next_state,idle,Data,
+ [{reply,From,yes}]};
+connected(cast, disconnect, Data) ->
+ {next_state,idle,Data};
+connected(cast, {ping,Pid,Tag}, Data) ->
+ Pid ! {pong,Tag},
+ {keep_state,Data};
+connected(Type, Content, Data) ->
+ case handle_common_events(Type, Content, connected, Data) of
+ undefined ->
+ case Type of
+ {call,From} ->
+ {keep_state,Data,
+ [{reply,From,'eh?'}]};
+ _ ->
+ {keep_state,Data}
+ end;
+ Result ->
+ Result
+ end.
+
+state0({call,From}, stop, Data) ->
+ {stop_and_reply,normal,[{reply,From,stopped}],Data};
+state0(Type, Content, Data) ->
+ case handle_common_events(Type, Content, state0, Data) of
+ undefined ->
+ {keep_state,Data};
+ Result ->
+ Result
+ end.
+
+hiber_idle({call,From}, 'alive?', Data) ->
+ {keep_state,Data,
+ [{reply,From,'alive!'}]};
+hiber_idle({call,From}, hibernate_sync, Data) ->
+ {next_state,hiber_wakeup,Data,
+ [{reply,From,hibernating},
+ hibernate]};
+hiber_idle(info, hibernate_later, _) ->
+ Tref = erlang:start_timer(1000, self(), hibernate),
+ {keep_state,Tref};
+hiber_idle(info, hibernate_now, Data) ->
+ {keep_state,Data,
+ [hibernate]};
+hiber_idle(info, {timeout,Tref,hibernate}, Tref) ->
+ {keep_state,[],
+ [hibernate]};
+hiber_idle(cast, hibernate_async, Data) ->
+ {next_state,hiber_wakeup,Data,
+ [hibernate]};
+hiber_idle(Type, Content, Data) ->
+ case handle_common_events(Type, Content, hiber_idle, Data) of
+ undefined ->
+ {keep_state,Data};
+ Result ->
+ Result
+ end.
+
+hiber_wakeup({call,From}, wakeup_sync, Data) ->
+ {next_state,hiber_idle,Data,
+ [{reply,From,good_morning}]};
+hiber_wakeup({call,From}, snooze_sync, Data) ->
+ {keep_state,Data,
+ [{reply,From,please_just_five_more},
+ hibernate]};
+hiber_wakeup(cast, wakeup_async, Data) ->
+ {next_state,hiber_idle,Data};
+hiber_wakeup(cast, snooze_async, Data) ->
+ {keep_state,Data,
+ [hibernate]};
+hiber_wakeup(Type, Content, Data) ->
+ case handle_common_events(Type, Content, hiber_wakeup, Data) of
+ undefined ->
+ {keep_state,Data};
+ Result ->
+ Result
+ end.
+
+next_events(internal, Msg, [Msg|Msgs]) ->
+ {keep_state,Msgs};
+next_events(Type, Content, Data) ->
+ case handle_common_events(Type, Content, next_events, Data) of
+ undefined ->
+ {keep_state,Data};
+ Result ->
+ Result
+ end.
+
+
+handle_common_events({call,From}, get_callback_mode, _, _) ->
+ {keep_state_and_data,{reply,From,state_functions}};
+handle_common_events({call,From}, get, State, Data) ->
+ {keep_state,Data,
+ [{reply,From,{state,State,Data}}]};
+handle_common_events(cast, {get,Pid}, State, Data) ->
+ Pid ! {state,State,Data},
+ {keep_state,Data};
+handle_common_events({call,From}, stop, _, Data) ->
+ {stop_and_reply,normal,[{reply,From,stopped}],Data};
+handle_common_events(cast, stop, _, _) ->
+ stop;
+handle_common_events({call,From}, {stop,Reason}, _, Data) ->
+ {stop_and_reply,Reason,{reply,From,stopped},Data};
+handle_common_events(cast, {stop,Reason}, _, _) ->
+ {stop,Reason};
+handle_common_events({call,From}, 'alive?', _, Data) ->
+ {keep_state,Data,
+ [{reply,From,yes}]};
+handle_common_events(cast, {'alive?',Pid}, _, Data) ->
+ Pid ! yes,
+ {keep_state,Data};
+handle_common_events(_, _, _, _) ->
+ undefined.
+
+handle_event({call,From}, get_callback_mode, _, _) ->
+ {keep_state_and_data,{reply,From,handle_event_function}};
+%% Wrapper state machine that uses a map state machine spec
+handle_event(
+ Type, Event, State, [Data|Machine])
+ when is_map(Machine) ->
+ #{State := HandleEvent} = Machine,
+ case
+ try HandleEvent(Type, Event, Data) of
+ Result ->
+ Result
+ catch
+ Result ->
+ Result
+ end of
+ {stop,Reason,NewData} ->
+ {stop,Reason,[NewData|Machine]};
+ {next_state,NewState,NewData} ->
+ {next_state,NewState,[NewData|Machine]};
+ {next_state,NewState,NewData,Ops} ->
+ {next_state,NewState,[NewData|Machine],Ops};
+ {keep_state,NewData} ->
+ {keep_state,[NewData|Machine]};
+ {keep_state,NewData,Ops} ->
+ {keep_state,[NewData|Machine],Ops};
+ Other ->
+ Other
+ end;
+%%
+%% Dispatcher to test callback_mode handle_event_function
+%%
+%% Wrap the state in a 1 element list just to test non-atom
+%% states. Note that the state from init/1 is not wrapped
+%% so both atom and non-atom states are tested.
+handle_event(Type, Event, State, Data) ->
+ StateName = unwrap_state(State),
+ try ?MODULE:StateName(Type, Event, Data) of
+ Result ->
+ wrap_result(Result)
+ catch
+ throw:Result ->
+ erlang:raise(
+ throw, wrap_result(Result), erlang:get_stacktrace())
+ end.
+
+unwrap_state([State]) ->
+ State;
+unwrap_state(State) ->
+ State.
+
+wrap_result(Result) ->
+ case Result of
+ {next_state,NewState,NewData} ->
+ {next_state,[NewState],NewData};
+ {next_state,NewState,NewData,StateOps} ->
+ {next_state,[NewState],NewData,StateOps};
+ Other ->
+ Other
+ end.
+
+
+
+code_change(OldVsn, State, Data, CallbackMode) ->
+ {CallbackMode,State,{OldVsn,Data,CallbackMode}}.
+
+format_status(terminate, [_Pdict,State,Data]) ->
+ {formatted,State,Data};
+format_status(normal, [_Pdict,_State,_Data]) ->
+ [format_status_called].
+
+flush() ->
+ receive
+ Msg ->
+ [Msg|flush()]
+ after 500 ->
+ []
+ end.
diff --git a/lib/stdlib/test/id_transform_SUITE.erl b/lib/stdlib/test/id_transform_SUITE.erl
index 1cff990697..3d4ae1a189 100644
--- a/lib/stdlib/test/id_transform_SUITE.erl
+++ b/lib/stdlib/test/id_transform_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,11 +29,12 @@
-export([check/2,check2/1,g/0,f/1,t/1,t1/1,t2/1,t3/1,t4/1,
t5/1,apa/1,new_fun/0]).
- % Serves as test...
+%% Serves as test...
-hej(hopp).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[id_transform].
@@ -54,21 +55,14 @@ end_per_group(_GroupName, Config) ->
Config.
-id_transform(doc) -> "Test erl_id_trans.";
+%% Test erl_id_trans.
id_transform(Config) when is_list(Config) ->
File = filename:join([code:lib_dir(stdlib),"examples",
"erl_id_trans.erl"]),
{ok,erl_id_trans,Bin} = compile:file(File,[binary]),
{module,erl_id_trans} = code:load_binary(erl_id_trans, File, Bin),
- case test_server:purify_is_running() of
- false ->
- Dog = ct:timetrap(?t:hours(1)),
- Res = run_in_test_suite(),
- ?t:timetrap_cancel(Dog),
- Res;
- true ->
- {skip,"Valgrind (too slow)"}
- end.
+ ct:timetrap({hours,1}),
+ run_in_test_suite().
run_in_test_suite() ->
SuperDir = filename:dirname(filename:dirname(code:which(?MODULE))),
@@ -139,9 +133,9 @@ do_trans_1(File, Tree0) ->
{failed,{File,{transform,{unknown,Else}}}}
end.
-% From here on there's only fake code to serve as test cases
-% for the id_transform.
-% They need to be exported.
+%% From here on there's only fake code to serve as test cases
+%% for the id_transform.
+%% They need to be exported.
check(X,_Y) when X ->
true;
@@ -192,7 +186,7 @@ f(X) ->
nok
end.
-% Stolen from erl_lint_SUITE.erl
+%% Stolen from erl_lint_SUITE.erl
-record(apa, {}).
t(A) when atom(A) ->
diff --git a/lib/stdlib/test/id_transform_SUITE_data/External.hrl b/lib/stdlib/test/id_transform_SUITE_data/External.hrl
index 48f9cf7a01..447c12dbc1 100644
--- a/lib/stdlib/test/id_transform_SUITE_data/External.hrl
+++ b/lib/stdlib/test/id_transform_SUITE_data/External.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/id_transform_SUITE_data/m.hrl b/lib/stdlib/test/id_transform_SUITE_data/m.hrl
index 88fa280c14..6a7c08a92f 100644
--- a/lib/stdlib/test/id_transform_SUITE_data/m.hrl
+++ b/lib/stdlib/test/id_transform_SUITE_data/m.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/id_transform_SUITE_data/m_i.hrl b/lib/stdlib/test/id_transform_SUITE_data/m_i.hrl
index 48ae978cd3..cc6d18acc0 100644
--- a/lib/stdlib/test/id_transform_SUITE_data/m_i.hrl
+++ b/lib/stdlib/test/id_transform_SUITE_data/m_i.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/id_transform_SUITE_data/oe_ex.hrl b/lib/stdlib/test/id_transform_SUITE_data/oe_ex.hrl
index a3a892dba1..6878337ae9 100644
--- a/lib/stdlib/test/id_transform_SUITE_data/oe_ex.hrl
+++ b/lib/stdlib/test/id_transform_SUITE_data/oe_ex.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/io_SUITE.erl b/lib/stdlib/test/io_SUITE.erl
index cb96f8b575..7d48cbc97c 100644
--- a/lib/stdlib/test/io_SUITE.erl
+++ b/lib/stdlib/test/io_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,14 +19,11 @@
%%
-module(io_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
-
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0]).
-export([error_1/1, float_g/1, otp_5403/1, otp_5813/1, otp_6230/1,
otp_6282/1, otp_6354/1, otp_6495/1, otp_6517/1, otp_6502/1,
- manpage/1, otp_6708/1, otp_7084/1, otp_7421/1,
+ manpage/1, otp_6708/1, otp_7084/0, otp_7084/1, otp_7421/1,
io_lib_collect_line_3_wb/1, cr_whitespace_in_string/1,
io_fread_newlines/1, otp_8989/1, io_lib_fread_literal/1,
printable_range/1, bad_printable_range/1,
@@ -37,7 +34,7 @@
-export([pretty/2]).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -46,24 +43,14 @@
-define(t, test_server).
-define(privdir(_), "./io_SUITE_priv").
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
--define(privdir(Conf), ?config(priv_dir, Conf)).
+-define(privdir(Conf), proplists:get_value(priv_dir, Conf)).
-endif.
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, _Config) ->
- Dog = ?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[error_1, float_g, otp_5403, otp_5813, otp_6230,
@@ -76,871 +63,588 @@ all() ->
io_lib_width_too_small, io_with_huge_message_queue,
format_string, maps, coverage].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-error_1(doc) ->
- ["Error cases for output"];
-error_1(suite) ->
- [];
+%% Error cases for output.
error_1(Config) when is_list(Config) ->
%% We don't do erroneous output on stdout - the test server
%% seems to catch that somehow.
- ?line PrivDir = ?privdir(Config),
- ?line File = filename:join(PrivDir, "slask"),
- ?line {ok, F1} = file:open(File, [write]),
- ?line {'EXIT', _} = (catch io:format(muttru, "hej", [])),
- ?line {'EXIT', _} = (catch io:format(F1, pelle, "hej")),
- ?line {'EXIT', _} = (catch io:format(F1, 1, "hej")),
- ?line {'EXIT', _} = (catch io:format(F1, "~p~", [kaka])),
- ?line {'EXIT', _} = (catch io:format(F1, "~m~n", [kaka])),
+ PrivDir = ?privdir(Config),
+ File = filename:join(PrivDir, "slask"),
+ {ok, F1} = file:open(File, [write]),
+ {'EXIT', _} = (catch io:format(muttru, "hej", [])),
+ {'EXIT', _} = (catch io:format(F1, pelle, "hej")),
+ {'EXIT', _} = (catch io:format(F1, 1, "hej")),
+ {'EXIT', _} = (catch io:format(F1, "~p~", [kaka])),
+ {'EXIT', _} = (catch io:format(F1, "~m~n", [kaka])),
%% This causes the file process to die, and it is linked to us,
%% so we can't catch the error this easily.
-% ?line {'EXIT', _} = (catch io:put_chars(F1, 666)),
+ %% {'EXIT', _} = (catch io:put_chars(F1, 666)),
- ?line file:close(F1),
- ?line {'EXIT', _} = (catch io:format(F1, "~p", ["hej"])),
+ file:close(F1),
+ {'EXIT', _} = (catch io:format(F1, "~p", ["hej"])),
ok.
float_g(Config) when is_list(Config) ->
- ?line ["5.00000e-2",
- "0.500000",
- "5.00000",
- "50.0000",
- "500.000",
- "5000.00",
- "5.00000e+4",
- "5.00000e+5"] = float_g_1("~g", 5.0, -2, 5),
-
- ?line ["-5.0000e-2",
- "-0.50000",
- "-5.0000",
- "-50.000",
- "-500.00",
- "-5000.0",
- "-5.0000e+4",
- "-5.0000e+5"] = float_g_1("~.5g", -5.0, -2, 5),
-
- ?line ["5.000e-2",
- "0.5000",
- "5.000",
- "50.00",
- "500.0",
- "5.000e+3",
- "5.000e+4",
- "5.000e+5"] = float_g_1("~.4g", 5.0, -2, 5),
-
- ?line ["-5.00e-2",
- "-0.500",
- "-5.00",
- "-50.0",
- "-5.00e+2",
- "-5.00e+3",
- "-5.00e+4",
- "-5.00e+5"] = float_g_1("~.3g", -5.0, -2, 5),
-
- ?line ["5.0e-2",
- "0.50",
- "5.0",
- "5.0e+1",
- "5.0e+2",
- "5.0e+3",
- "5.0e+4",
- "5.0e+5"] = float_g_1("~.2g", 5.0, -2, 5),
-
- ?line
- case catch fmt("~.1g", [0.5]) of
- "0.5" ->
- ?line
- ["5.0e-2",
- "0.5",
- "5.0e+0",
- "5.0e+1",
- "5.0e+2",
- "5.0e+3",
- "5.0e+4",
- "5.0e+5"] = float_g_1("~.1g", 5.0, -2, 5);
- {'EXIT',_} -> ok
- end,
-
- ?line ["4.99999e-2",
- "0.499999",
- "4.99999",
- "49.9999",
- "499.999",
- "4999.99",
- "4.99999e+4",
- "4.99999e+5"] = float_g_1("~g", 4.9999949999, -2, 5),
-
- ?line ["-5.00000e-2",
- "-0.500000",
- "-5.00000",
- "-50.0000",
- "-500.000",
- "-5000.00",
- "-5.00000e+4",
- "-5.00000e+5"] = float_g_1("~g", -4.9999950001, -2, 5),
+ ["5.00000e-2",
+ "0.500000",
+ "5.00000",
+ "50.0000",
+ "500.000",
+ "5000.00",
+ "5.00000e+4",
+ "5.00000e+5"] = float_g_1("~g", 5.0, -2, 5),
+
+ ["-5.0000e-2",
+ "-0.50000",
+ "-5.0000",
+ "-50.000",
+ "-500.00",
+ "-5000.0",
+ "-5.0000e+4",
+ "-5.0000e+5"] = float_g_1("~.5g", -5.0, -2, 5),
+
+ ["5.000e-2",
+ "0.5000",
+ "5.000",
+ "50.00",
+ "500.0",
+ "5.000e+3",
+ "5.000e+4",
+ "5.000e+5"] = float_g_1("~.4g", 5.0, -2, 5),
+
+ ["-5.00e-2",
+ "-0.500",
+ "-5.00",
+ "-50.0",
+ "-5.00e+2",
+ "-5.00e+3",
+ "-5.00e+4",
+ "-5.00e+5"] = float_g_1("~.3g", -5.0, -2, 5),
+
+ ["5.0e-2",
+ "0.50",
+ "5.0",
+ "5.0e+1",
+ "5.0e+2",
+ "5.0e+3",
+ "5.0e+4",
+ "5.0e+5"] = float_g_1("~.2g", 5.0, -2, 5),
+
+ case catch fmt("~.1g", [0.5]) of
+ "0.5" ->
+ ["5.0e-2",
+ "0.5",
+ "5.0e+0",
+ "5.0e+1",
+ "5.0e+2",
+ "5.0e+3",
+ "5.0e+4",
+ "5.0e+5"] = float_g_1("~.1g", 5.0, -2, 5);
+ {'EXIT',_} -> ok
+ end,
+
+ ["4.99999e-2",
+ "0.499999",
+ "4.99999",
+ "49.9999",
+ "499.999",
+ "4999.99",
+ "4.99999e+4",
+ "4.99999e+5"] = float_g_1("~g", 4.9999949999, -2, 5),
+
+ ["-5.00000e-2",
+ "-0.500000",
+ "-5.00000",
+ "-50.0000",
+ "-500.000",
+ "-5000.00",
+ "-5.00000e+4",
+ "-5.00000e+5"] = float_g_1("~g", -4.9999950001, -2, 5),
ok.
float_g_1(Fmt, V, Min, Max) ->
[fmt(Fmt, [V*math:pow(10, E)]) || E <- lists:seq(Min, Max)].
-otp_5403(doc) ->
- ["OTP-5403. ~s formats I/O lists and a single binary."];
-otp_5403(suite) ->
- [];
+%% OTP-5403. ~s formats I/O lists and a single binary.
otp_5403(Config) when is_list(Config) ->
- ?line "atom" = fmt("~s", [atom]),
- ?line "binary" = fmt("~s", [<<"binary">>]),
- ?line "atail" = fmt("~s", [["a" | <<"tail">>]]),
- ?line "deepcharlist" = fmt("~s", [["deep",["char",["list"]]]]),
- ?line "somebinaries" = fmt("~s", [[<<"some">>,[<<"binaries">>]]]),
+ "atom" = fmt("~s", [atom]),
+ "binary" = fmt("~s", [<<"binary">>]),
+ "atail" = fmt("~s", [["a" | <<"tail">>]]),
+ "deepcharlist" = fmt("~s", [["deep",["char",["list"]]]]),
+ "somebinaries" = fmt("~s", [[<<"some">>,[<<"binaries">>]]]),
ok.
-otp_5813(doc) ->
- ["OTP-5813. read/3 is new."];
-otp_5813(suite) ->
- [];
+%% OTP-5813. read/3 is new.
otp_5813(Config) when is_list(Config) ->
- ?line PrivDir = ?privdir(Config),
- ?line File = filename:join(PrivDir, "test"),
+ PrivDir = ?privdir(Config),
+ File = filename:join(PrivDir, "test"),
- ?line ok = file:write_file(File, <<"a. ">>),
- ?line {ok, Fd} = file:open(File, [read]),
- ?line {ok, a, 1} = io:read(Fd, '', 1),
- ?line {eof,1} = io:read(Fd, '', 1),
+ ok = file:write_file(File, <<"a. ">>),
+ {ok, Fd} = file:open(File, [read]),
+ {ok, a, 1} = io:read(Fd, '', 1),
+ {eof,1} = io:read(Fd, '', 1),
ok = file:close(Fd),
- ?line ok = file:write_file(File, <<"[}.">>),
- ?line {ok, Fd2} = file:open(File, [read]),
- ?line {error,{1,_,_},1} = io:read(Fd2, '', 1),
- ?line ok = file:close(Fd),
+ ok = file:write_file(File, <<"[}.">>),
+ {ok, Fd2} = file:open(File, [read]),
+ {error,{1,_,_},1} = io:read(Fd2, '', 1),
+ ok = file:close(Fd),
file:delete(File),
ok.
-otp_6230(doc) ->
- ["OTP-6230. ~p and ~P with (huge) binaries."];
-otp_6230(suite) ->
- [];
+%% OTP-6230. ~p and ~P with (huge) binaries.
otp_6230(Config) when is_list(Config) ->
%% The problem is actually huge binaries, but the small tests here
%% just run through most of the modified code.
- ?line "<<>>" = fmt("~P", [<<"">>,-1]),
- ?line "<<\"hej\">>" = fmt("~P", [<<"hej">>,-1]),
- ?line "{hej,...}" = fmt("~P", [{hej,<<"hej">>},2]),
- ?line "{hej,<<...>>}" = fmt("~P", [{hej,<<"hej">>},3]),
- ?line "{hej,<<\"hejs\"...>>}" = fmt("~P", [{hej,<<"hejsan">>},4]),
- ?line "{hej,<<\"hej\">>}" = fmt("~P", [{hej,<<"hej">>},6]),
- ?line "<<...>>" = fmt("~P", [<<"hej">>,1]),
- ?line "<<\"hejs\"...>>" = fmt("~P", [<<"hejsan">>,2]),
- ?line "<<\"hej\">>" = fmt("~P", [<<"hej">>,4]),
- ?line "{hej,<<127,...>>}" =
+ "<<>>" = fmt("~P", [<<"">>,-1]),
+ "<<\"hej\">>" = fmt("~P", [<<"hej">>,-1]),
+ "{hej,...}" = fmt("~P", [{hej,<<"hej">>},2]),
+ "{hej,<<...>>}" = fmt("~P", [{hej,<<"hej">>},3]),
+ "{hej,<<\"hejs\"...>>}" = fmt("~P", [{hej,<<"hejsan">>},4]),
+ "{hej,<<\"hej\">>}" = fmt("~P", [{hej,<<"hej">>},6]),
+ "<<...>>" = fmt("~P", [<<"hej">>,1]),
+ "<<\"hejs\"...>>" = fmt("~P", [<<"hejsan">>,2]),
+ "<<\"hej\">>" = fmt("~P", [<<"hej">>,4]),
+ "{hej,<<127,...>>}" =
fmt("~P", [{hej,<<127:8,<<"hej">>/binary>>},4]),
- ?line "{hej,<<127,104,101,...>>}" =
+ "{hej,<<127,104,101,...>>}" =
fmt("~P", [{hej,<<127:8,<<"hej">>/binary>>},6]),
B = list_to_binary(lists:duplicate(30000, $a)),
- ?line "<<\"aaaa"++_ = fmt("~P", [B, 20000]),
+ "<<\"aaaa"++_ = fmt("~P", [B, 20000]),
ok.
-otp_6282(doc) ->
- ["OTP-6282. ~p truncates strings (like binaries) depending on depth."];
-otp_6282(suite) ->
- [];
+%% OTP-6282. ~p truncates strings (like binaries) depending on depth.
otp_6282(Config) when is_list(Config) ->
- ?line "[]" = p("", 1, 20, 1),
- ?line "[]" = p("", 1, 20, -1),
- ?line "[...]" = p("a", 1, 20, 1),
- ?line "\"a\"" = p("a", 1, 20, 2),
- ?line "\"aa\"" = p("aa", 1, 20, 2),
- ?line "\"aaa\"" = p("aaa", 1, 20, 2),
- ?line "\"aaaa\"" = p("aaaa", 1, 20, 2),
- % ?line "\"aaaa\"..." = p("aaaaaa", 1, 20, 2),
- ?line "\"a\"" = p("a", 1, 20, -1),
- % ?line "\"aa\"..." = p([$a,$a,1000], 1, 20, 2),
- % ?line "\"aa\"..." = p([$a,$a,1000], 1, 20, 3),
- ?line "[97,97,1000]" = p([$a,$a,1000], 1, 20, 4),
+ "[]" = p("", 1, 20, 1),
+ "[]" = p("", 1, 20, -1),
+ "[...]" = p("a", 1, 20, 1),
+ "\"a\"" = p("a", 1, 20, 2),
+ "\"aa\"" = p("aa", 1, 20, 2),
+ "\"aaa\"" = p("aaa", 1, 20, 2),
+ "\"aaaa\"" = p("aaaa", 1, 20, 2),
+ "\"a\"" = p("a", 1, 20, -1),
+ "[97,97,1000]" = p([$a,$a,1000], 1, 20, 4),
S1 = lists:duplicate(200,$a),
- ?line "[...]" = p(S1, 1, 20, 1),
- % ?line "\"aaaaaaaaaaaaaaaa\"\n \"aaaaaaaaaaaaaaaa\"\n \"aaaa\"..." =
- % ?line "\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"..." =
- % p(S1, 1, 20, 10),
- ?line true = "\"" ++ S1 ++ "\"" =:= p(S1, 1, 205, -1),
- ?line "[97,97,1000|...]" = p([$a,$a,1000,1000], 1, 20, 4),
-
- ?line "[[]]" = p([""], 1, 20, 2),
- ?line "[[]]" = p([""], 1, 20, -1),
- ?line "[[...]]" = p(["a"], 1, 20, 2),
- ?line "[\"a\"]" = p(["a"], 1, 20, 3),
- ?line "[\"aa\"]" = p(["aa"], 1, 20, 3),
- ?line "[\"aaa\"]" = p(["aaa"], 1, 20, 3),
- ?line "[\"a\"]" = p(["a"], 1, 20, -1),
- % ?line "[\"aa\"...]" = p([[$a,$a,1000]], 1, 20, 3),
- % ?line "[\"aa\"...]" = p([[$a,$a,1000]], 1, 20, 4),
- ?line "[[97,97,1000]]" = p([[$a,$a,1000]], 1, 20, 5),
- ?line "[[...]]" = p([S1], 1, 20, 2),
- % ?line "[\"aaaaaaaaaaaaaa\"\n \"aaaaaaaaaaaaaa\"\n \"aaaaaaaa\"...]" =
- % ?line "[\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"...]" =
- % p([S1], 1, 20, 11),
- ?line true = "[\"" ++ S1 ++ "\"]" =:= p([S1], 1, 210, -1),
- ?line "[[97,97,1000|...]]" = p([[$a,$a,1000,1000]], 1, 20, 5),
-
- % ?line "[\"aaaa\"...]" = p(["aaaaa"], 1, 10, 3),
- ?line "[\"aaaaa\"]" = p(["aaaaa"], 1, 10, 6),
+ "[...]" = p(S1, 1, 20, 1),
+ true = "\"" ++ S1 ++ "\"" =:= p(S1, 1, 205, -1),
+ "[97,97,1000|...]" = p([$a,$a,1000,1000], 1, 20, 4),
+
+ "[[]]" = p([""], 1, 20, 2),
+ "[[]]" = p([""], 1, 20, -1),
+ "[[...]]" = p(["a"], 1, 20, 2),
+ "[\"a\"]" = p(["a"], 1, 20, 3),
+ "[\"aa\"]" = p(["aa"], 1, 20, 3),
+ "[\"aaa\"]" = p(["aaa"], 1, 20, 3),
+ "[\"a\"]" = p(["a"], 1, 20, -1),
+ "[[97,97,1000]]" = p([[$a,$a,1000]], 1, 20, 5),
+ "[[...]]" = p([S1], 1, 20, 2),
+ true = "[\"" ++ S1 ++ "\"]" =:= p([S1], 1, 210, -1),
+ "[[97,97,1000|...]]" = p([[$a,$a,1000,1000]], 1, 20, 5),
+
+ "[\"aaaaa\"]" = p(["aaaaa"], 1, 10, 6),
ok.
-otp_6354(doc) ->
- ["OTP-6354. io_lib_pretty rewritten."];
-otp_6354(suite) ->
- [];
+%% OTP-6354. io_lib_pretty rewritten.
otp_6354(Config) when is_list(Config) ->
%% A few tuples:
- ?line "{}" = p({}, 1, 20, -1),
- ?line "..." = p({}, 1, 20, 0),
- ?line "{}" = p({}, 1, 20, 1),
- ?line "{}" = p({}, 1, 20, 2),
- ?line "{a}" = p({a}, 1, 20, -1),
- ?line "..." = p({a}, 1, 20, 0),
- ?line "{...}" = p({a}, 1, 20, 1),
- ?line "{a}" = p({a}, 1, 20, 2),
- ?line "{a,b}" = p({a,b}, 1, 20, -1),
- ?line "..." = p({a,b}, 1, 20, 0),
- ?line "{...}" = p({a,b}, 1, 20, 1),
- ?line "{a,...}" = p({a,b}, 1, 20, 2),
- ?line "{a,b}" = p({a,b}, 1, 20, 3),
- ?line "{}" = p({}, 1, 1, -1),
- ?line "..." = p({}, 1, 1, 0),
- ?line "{}" = p({}, 1, 1, 1),
- ?line "{}" = p({}, 1, 1, 2),
- ?line "{a}" = p({a}, 1, 1, -1),
- ?line "..." = p({a}, 1, 1, 0),
- ?line "{...}" = p({a}, 1, 1, 1),
- ?line "{a}" = p({a}, 1, 1, 2),
- ?line "{a,\n b}" = p({a,b}, 1, 1, -1),
- ?line "{1,\n b}" = p({1,b}, 1, 1, -1),
- ?line "..." = p({a,b}, 1, 1, 0),
- ?line "{...}" = p({a,b}, 1, 1, 1),
- ?line "{a,...}" = p({a,b}, 1, 1, 2),
- ?line "{a,\n b}" = p({a,b}, 1, 1, 3),
- ?line "{{}}" = p({{}}, 1, 1, 2),
- ?line "{[]}" = p({[]}, 1, 1, 2),
- ?line bt(<<"{1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]}">>,
- p({1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]}, -1)),
- ?line bt(<<"{abcd,ddddd,\n ddddd}">>,
- p({abcd,ddddd,ddddd}, 1,16, -1)),
- ?line bt(<<"{1,2,a,b,\n {sfdsf,sdfdsfs},\n [sfsdf,sdfsdf]}">>,
- p({1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]}, 1, 35, 100)),
- % With other terms than atomic ones on the same line:
-% ?line bt(<<"{1,2,a,b,{sfdsf,sdfdsfs},\n [sfsdf,sdfsdf]}">>,
-% p({1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]}, 1, 35, 100)),
- % With line breaks:
-% ?line bt(<<"{1,\n"
-% " 2,\n"
-% " a,\n"
-% " b,\n"
-% " {sfdsf,sdfdsfs},\n"
-% " [sfsdf,sdfsdf]}">>,
-% p({1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]}, 1, 35, 100)),
- ?line "{1,{1,{2,3}}}" = p({1,{1,{2,3}}}, 1, 80, 100),
-
- ?line bt(<<"{wwwww,{wwwww,{wwwww,{wwwww,{wwwww,lkjsldfj,klsdjfjklds,\n"
- " sdkfjdsl,sdakfjdsklj,sdkljfsdj}}}}}">>,
- p({wwwww,{wwwww,{wwwww,{wwwww,{wwwww,lkjsldfj,klsdjfjklds,
- sdkfjdsl,sdakfjdsklj,sdkljfsdj}}}}}, -1)),
-
- % With no restriction on number of characters per line:
-% ?line bt(<<"{wwwww,{wwwww,{wwwww,{wwwww,{wwwww,lkjsldfj,klsdjfjklds,"
-% "sdkfjdsl,sdakfjdsklj,\n"
-% " sdkljfsdj}}}}}">>,
-% p({wwwww,{wwwww,{wwwww,{wwwww,{wwwww,lkjsldfj,klsdjfjklds,
-% sdkfjdsl,sdakfjdsklj,sdkljfsdj}}}}}, -1)),
-
- % With line breaks:
-% ?line bt(<<"{wwwww,{wwwww,{wwwww,{wwwww,{wwwww,lkjsldfj,\n"
-% " klsdjfjklds,\n"
-% " sdkfjdsl,\n"
-% " sdakfjdsklj,\n"
-% " sdkljfsdj}}}}}">>,
-% p({wwwww,{wwwww,{wwwww,{wwwww,{wwwww,lkjsldfj,klsdjfjklds,
-% sdkfjdsl,sdakfjdsklj,sdkljfsdj}}}}}, -1)),
- ?line bt(<<"{wwwww,\n"
- " {wwwww,\n"
- " {wwwww,\n"
- " {wwwww,\n"
- " {wwwww,\n"
- " {lkjsldfj,\n"
- " {klsdjfjklds,\n"
- " {klajsljls,\n"
- " #aaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa{}}}}}}}}}">>,
- p({wwwww,{wwwww,{wwwww,{wwwww,{wwwww,{lkjsldfj,
- {klsdjfjklds,{klajsljls,
- {aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}}}}}}}}},
- -1)),
- ?line "{{...},...}" = p({{a,b},{a,b,c},{d,e,f}},1,8,2),
+ "{}" = p({}, 1, 20, -1),
+ "..." = p({}, 1, 20, 0),
+ "{}" = p({}, 1, 20, 1),
+ "{}" = p({}, 1, 20, 2),
+ "{a}" = p({a}, 1, 20, -1),
+ "..." = p({a}, 1, 20, 0),
+ "{...}" = p({a}, 1, 20, 1),
+ "{a}" = p({a}, 1, 20, 2),
+ "{a,b}" = p({a,b}, 1, 20, -1),
+ "..." = p({a,b}, 1, 20, 0),
+ "{...}" = p({a,b}, 1, 20, 1),
+ "{a,...}" = p({a,b}, 1, 20, 2),
+ "{a,b}" = p({a,b}, 1, 20, 3),
+ "{}" = p({}, 1, 1, -1),
+ "..." = p({}, 1, 1, 0),
+ "{}" = p({}, 1, 1, 1),
+ "{}" = p({}, 1, 1, 2),
+ "{a}" = p({a}, 1, 1, -1),
+ "..." = p({a}, 1, 1, 0),
+ "{...}" = p({a}, 1, 1, 1),
+ "{a}" = p({a}, 1, 1, 2),
+ "{a,\n b}" = p({a,b}, 1, 1, -1),
+ "{1,\n b}" = p({1,b}, 1, 1, -1),
+ "..." = p({a,b}, 1, 1, 0),
+ "{...}" = p({a,b}, 1, 1, 1),
+ "{a,...}" = p({a,b}, 1, 1, 2),
+ "{a,\n b}" = p({a,b}, 1, 1, 3),
+ "{{}}" = p({{}}, 1, 1, 2),
+ "{[]}" = p({[]}, 1, 1, 2),
+ bt(<<"{1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]}">>,
+ p({1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]}, -1)),
+ bt(<<"{abcd,ddddd,\n ddddd}">>,
+ p({abcd,ddddd,ddddd}, 1,16, -1)),
+ bt(<<"{1,2,a,b,\n {sfdsf,sdfdsfs},\n [sfsdf,sdfsdf]}">>,
+ p({1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]}, 1, 35, 100)),
+ "{1,{1,{2,3}}}" = p({1,{1,{2,3}}}, 1, 80, 100),
+
+ bt(<<"{wwwww,{wwwww,{wwwww,{wwwww,{wwwww,lkjsldfj,klsdjfjklds,\n"
+ " sdkfjdsl,sdakfjdsklj,sdkljfsdj}}}}}">>,
+ p({wwwww,{wwwww,{wwwww,{wwwww,{wwwww,lkjsldfj,klsdjfjklds,
+ sdkfjdsl,sdakfjdsklj,sdkljfsdj}}}}}, -1)),
+
+ bt(<<"{wwwww,\n"
+ " {wwwww,\n"
+ " {wwwww,\n"
+ " {wwwww,\n"
+ " {wwwww,\n"
+ " {lkjsldfj,\n"
+ " {klsdjfjklds,\n"
+ " {klajsljls,\n"
+ " #aaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa{}}}}}}}}}">>,
+ p({wwwww,{wwwww,{wwwww,{wwwww,{wwwww,{lkjsldfj,
+ {klsdjfjklds,{klajsljls,
+ {aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}}}}}}}}},
+ -1)),
+ "{{...},...}" = p({{a,b},{a,b,c},{d,e,f}},1,8,2),
%% Closing brackets and parentheses count:
- ?line "{{a,b,c},\n {{1,2,\n 3}}}" = p({{a,b,c},{{1,2,3}}},1,11,-1),
- % With line breaks:
-% ?line "{{a,b,c},\n {{1,\n 2,\n 3}}}" = p({{a,b,c},{{1,2,3}}},1,11,-1),
- ?line "{{a,b,c},\n [1,2,\n 3]}" = p({{a,b,c},[1,2,3]},1,10,-1),
- % With line breaks:
-% ?line "{{a,b,c},\n [1,\n 2,\n 3]}" = p({{a,b,c},[1,2,3]},1,10,-1),
- ?line "[{{a,b,c},\n {1,2,\n 3}}]" = p([{{a,b,c},{1,2,3}}],1,12,-1),
- % With line breaks:
-% ?line "[{{a,b,c},\n {1,\n 2,\n 3}}]" = p([{{a,b,c},{1,2,3}}],1,12,-1),
+ "{{a,b,c},\n {{1,2,\n 3}}}" = p({{a,b,c},{{1,2,3}}},1,11,-1),
+ %% With line breaks:
+ "{{a,b,c},\n [1,2,\n 3]}" = p({{a,b,c},[1,2,3]},1,10,-1),
+ %% With line breaks:
+ "[{{a,b,c},\n {1,2,\n 3}}]" = p([{{a,b,c},{1,2,3}}],1,12,-1),
%% A few lists:
- ?line "[]" = p([], 1, 20, -1),
- ?line "..." = p([], 1, 20, 0),
- ?line "[]" = p([], 1, 20, 1),
- ?line "[]" = p([], 1, 20, 2),
- ?line "[a]" = p([a], 1, 20, -1),
- ?line "..." = p([a], 1, 20, 0),
- ?line "[...]" = p([a], 1, 20, 1),
- ?line "[a]" = p([a], 1, 20, 2),
- ?line "[a,b]" = p([a,b], 1, 20, -1),
- ?line "..." = p([a,b], 1, 20, 0),
- ?line "[...]" = p([a,b], 1, 20, 1),
- ?line "[a|...]" = p([a,b], 1, 20, 2),
- ?line "[a,b]" = p([a,b], 1, 20, 3),
- ?line "[a|b]" = p([a|b], 1, 20, -1),
- ?line "..." = p([a|b], 1, 20, 0),
- ?line "[...]" = p([a|b], 1, 20, 1),
- ?line "[a|...]" = p([a|b], 1, 20, 2),
- ?line "[a|b]" = p([a|b], 1, 20, 3),
- ?line "[]" = p([], 1, 1, -1),
- ?line "..." = p([], 1, 1, 0),
- ?line "[]" = p([], 1, 1, 1),
- ?line "[]" = p([], 1, 1, 2),
- ?line "[a]" = p([a], 1, 1, -1),
- ?line "..." = p([a], 1, 1, 0),
- ?line "[...]" = p([a], 1, 1, 1),
- ?line "[a]" = p([a], 1, 1, 2),
- ?line "[a,\n b]" = p([a,b], 1, 1, -1),
- ?line "..." = p([a,b], 1, 1, 0),
- ?line "[...]" = p([a,b], 1, 1, 1),
- ?line "[a|...]" = p([a,b], 1, 1, 2),
- ?line "[a,\n b]" = p([a,b], 1, 1, 3),
- ?line "[a|\n b]" = p([a|b], 1, 1, -1),
- ?line "..." = p([a|b], 1, 1, 0),
- ?line "[...]" = p([a|b], 1, 1, 1),
- ?line "[a|...]" = p([a|b], 1, 1, 2),
- ?line "[a|\n b]" = p([a|b], 1, 1, 3),
- ?line "[{}]" = p([{}], 1, 1, 2),
- ?line "[[]]" = p([[]], 1, 1, 2),
- ?line bt(<<"[1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]]">>,
- p([1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]], -1)),
- ?line bt(<<"[1,2,a,b,\n {sfdsf,sdfdsfs},\n [sfsdf,sdfsdf]]">>,
- p([1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]], 1, 35, 100)),
- % With other terms than atomic ones on the same line:
-% ?line bt(<<"[1,2,a,b,{sfdsf,sdfdsfs},\n [sfsdf,sdfsdf]]">>,
-% p([1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]], 1, 35, 100)),
- % With line breaks:
-% ?line bt(<<"[1,\n"
-% " 2,\n"
-% " a,\n"
-% " b,\n"
-% " {sfdsf,sdfdsfs},\n"
-% " [sfsdf,sdfsdf]]">>,
-% p([1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]], 1, 35, 100)),
+ "[]" = p([], 1, 20, -1),
+ "..." = p([], 1, 20, 0),
+ "[]" = p([], 1, 20, 1),
+ "[]" = p([], 1, 20, 2),
+ "[a]" = p([a], 1, 20, -1),
+ "..." = p([a], 1, 20, 0),
+ "[...]" = p([a], 1, 20, 1),
+ "[a]" = p([a], 1, 20, 2),
+ "[a,b]" = p([a,b], 1, 20, -1),
+ "..." = p([a,b], 1, 20, 0),
+ "[...]" = p([a,b], 1, 20, 1),
+ "[a|...]" = p([a,b], 1, 20, 2),
+ "[a,b]" = p([a,b], 1, 20, 3),
+ "[a|b]" = p([a|b], 1, 20, -1),
+ "..." = p([a|b], 1, 20, 0),
+ "[...]" = p([a|b], 1, 20, 1),
+ "[a|...]" = p([a|b], 1, 20, 2),
+ "[a|b]" = p([a|b], 1, 20, 3),
+ "[]" = p([], 1, 1, -1),
+ "..." = p([], 1, 1, 0),
+ "[]" = p([], 1, 1, 1),
+ "[]" = p([], 1, 1, 2),
+ "[a]" = p([a], 1, 1, -1),
+ "..." = p([a], 1, 1, 0),
+ "[...]" = p([a], 1, 1, 1),
+ "[a]" = p([a], 1, 1, 2),
+ "[a,\n b]" = p([a,b], 1, 1, -1),
+ "..." = p([a,b], 1, 1, 0),
+ "[...]" = p([a,b], 1, 1, 1),
+ "[a|...]" = p([a,b], 1, 1, 2),
+ "[a,\n b]" = p([a,b], 1, 1, 3),
+ "[a|\n b]" = p([a|b], 1, 1, -1),
+ "..." = p([a|b], 1, 1, 0),
+ "[...]" = p([a|b], 1, 1, 1),
+ "[a|...]" = p([a|b], 1, 1, 2),
+ "[a|\n b]" = p([a|b], 1, 1, 3),
+ "[{}]" = p([{}], 1, 1, 2),
+ "[[]]" = p([[]], 1, 1, 2),
+ bt(<<"[1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]]">>,
+ p([1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]], -1)),
+ bt(<<"[1,2,a,b,\n {sfdsf,sdfdsfs},\n [sfsdf,sdfsdf]]">>,
+ p([1,2,a,b,{sfdsf,sdfdsfs},[sfsdf,sdfsdf]], 1, 35, 100)),
%% Element #8 is not printable:
- ?line "[49," ++ _ = p("1234567"++[3,4,5,6,7], 1, 100, 9),
- % ?line "\"1234567\"..." = p("1234567"++[3,4,5,6,7], 1, 100, 8),
+ "[49," ++ _ = p("1234567"++[3,4,5,6,7], 1, 100, 9),
+ %% "\"1234567\"..." = p("1234567"++[3,4,5,6,7], 1, 100, 8),
%% A few records:
%% -record(a, {}).
%% -record(a, {}).
- ?line "..." = p({a}, 0),
- ?line "{...}" = p({a}, 1),
- ?line "#a{}" = p({a}, 2),
- ?line "#a{}" = p({a}, -1),
+ "..." = p({a}, 0),
+ "{...}" = p({a}, 1),
+ "#a{}" = p({a}, 2),
+ "#a{}" = p({a}, -1),
%% -record(b, {f}).
- ?line "{...}" = p({b}, 1),
- ?line "..." = p({b,c}, 0),
- ?line "{...}" = p({b,c}, 1),
- ?line "#b{...}" = p({b,c}, 2),
- ?line "#b{f = c}" = p({b,c}, 3),
- ?line "#b{f = c}" = p({b,c}, -1),
- ?line "..." = p({b,{c,d}}, 0),
- ?line "{...}" = p({b,{c,d}}, 1),
- ?line "#b{...}" = p({b,{c,d}}, 2),
- ?line "#b{f = {...}}" = p({b,{c,d}}, 3),
- ?line "#b{f = {c,...}}" = p({b,{c,d}}, 4),
- ?line "#b{f = {c,d}}" = p({b,{c,d}}, 5),
- ?line "#b{f = {...}}" = p({b,{b,c}}, 3),
- ?line "#b{f = #b{...}}" = p({b,{b,c}}, 4),
- ?line "#b{f = #b{f = c}}" = p({b,{b,c}}, 5),
+ "{...}" = p({b}, 1),
+ "..." = p({b,c}, 0),
+ "{...}" = p({b,c}, 1),
+ "#b{...}" = p({b,c}, 2),
+ "#b{f = c}" = p({b,c}, 3),
+ "#b{f = c}" = p({b,c}, -1),
+ "..." = p({b,{c,d}}, 0),
+ "{...}" = p({b,{c,d}}, 1),
+ "#b{...}" = p({b,{c,d}}, 2),
+ "#b{f = {...}}" = p({b,{c,d}}, 3),
+ "#b{f = {c,...}}" = p({b,{c,d}}, 4),
+ "#b{f = {c,d}}" = p({b,{c,d}}, 5),
+ "#b{f = {...}}" = p({b,{b,c}}, 3),
+ "#b{f = #b{...}}" = p({b,{b,c}}, 4),
+ "#b{f = #b{f = c}}" = p({b,{b,c}}, 5),
%% -record(c, {f1, f2}).
- ?line "#c{f1 = d,f2 = e}" = p({c,d,e}, -1),
- ?line "..." = p({c,d,e}, 0),
- ?line "{...}" = p({c,d,e}, 1),
- ?line "#c{...}" = p({c,d,e}, 2),
- ?line "#c{f1 = d,...}" = p({c,d,e}, 3),
- ?line "#c{f1 = d,f2 = e}" = p({c,d,e}, 4),
+ "#c{f1 = d,f2 = e}" = p({c,d,e}, -1),
+ "..." = p({c,d,e}, 0),
+ "{...}" = p({c,d,e}, 1),
+ "#c{...}" = p({c,d,e}, 2),
+ "#c{f1 = d,...}" = p({c,d,e}, 3),
+ "#c{f1 = d,f2 = e}" = p({c,d,e}, 4),
%% -record(d, {a..., b..., c.., d...}).
- ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,\n"
- " cccccccccccccccccccc = 3,dddddddddddddddddddd = 4,\n"
- " eeeeeeeeeeeeeeeeeeee = 5}">>,
- p({d,1,2,3,4,5}, -1)),
- % With no restriction on number of characters per line:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,"
-% "cccccccccccccccccccc = 3,\n dddddddddddddddddddd = 4,"
-% "eeeeeeeeeeeeeeeeeeee = 5}">>,
-% p({d,1,2,3,4,5}, -1)),
- % With line breaks:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
-% " bbbbbbbbbbbbbbbbbbbb = 2,\n"
-% " cccccccccccccccccccc = 3,\n"
-% " dddddddddddddddddddd = 4,\n"
-% " eeeeeeeeeeeeeeeeeeee = 5}">>,
-% p({d,1,2,3,4,5}, -1)),
- ?line "..." = p({d,1,2,3,4,5}, 0),
- ?line "{...}" = p({d,1,2,3,4,5}, 1),
- ?line "#d{...}" = p({d,1,2,3,4,5}, 2),
- ?line "#d{aaaaaaaaaaaaaaaaaaaa = 1,...}" = p({d,1,2,3,4,5}, 3),
- ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,...}">>,
- p({d,1,2,3,4,5}, 4)),
- ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,\n"
- " cccccccccccccccccccc = 3,...}">>,
- p({d,1,2,3,4,5}, 5)), % longer than 80 characters...
- % With no restriction on number of characters per line:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,"
-% "cccccccccccccccccccc = 3,...}">>,
-% p({d,1,2,3,4,5}, 5)), % longer than 80 characters...
- % With line breaks:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
-% " bbbbbbbbbbbbbbbbbbbb = 2,\n"
-% " cccccccccccccccccccc = 3,...}">>,
-% p({d,1,2,3,4,5}, 5)),
- ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,\n"
- " cccccccccccccccccccc = 3,dddddddddddddddddddd = 4,...}">>,
- p({d,1,2,3,4,5}, 6)),
- % With no restriction on number of characters per line:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,"
-% "cccccccccccccccccccc = 3,\n dddddddddddddddddddd = 4,...}">>,
-% p({d,1,2,3,4,5}, 6)),
- % With line breaks:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
-% " bbbbbbbbbbbbbbbbbbbb = 2,\n"
-% " cccccccccccccccccccc = 3,\n"
-% " dddddddddddddddddddd = 4,...}">>,
-% p({d,1,2,3,4,5}, 6)),
- ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,\n"
- " cccccccccccccccccccc = 3,dddddddddddddddddddd = 4,\n"
- " eeeeeeeeeeeeeeeeeeee = 5}">>,
- p({d,1,2,3,4,5}, 7)),
- % With no restriction on number of characters per line:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,"
-% "cccccccccccccccccccc = 3,\n dddddddddddddddddddd = 4,"
-% "eeeeeeeeeeeeeeeeeeee = 5}">>,
-% p({d,1,2,3,4,5}, 7)),
- % With line breaks:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
-% " bbbbbbbbbbbbbbbbbbbb = 2,\n"
-% " cccccccccccccccccccc = 3,\n"
-% " dddddddddddddddddddd = 4,\n"
-% " eeeeeeeeeeeeeeeeeeee = 5}">>,
-% p({d,1,2,3,4,5}, 7)),
- ?line bt(<<"#rrrrr{\n"
- " f1 = 1,\n"
- " f2 = #rrrrr{f1 = a,f2 = b,f3 = c},\n"
- " f3 = \n"
- " #rrrrr{\n"
- " f1 = h,f2 = i,\n"
- " f3 = \n"
- " #rrrrr{\n"
- " f1 = aa,\n"
- " f2 = \n"
- " #rrrrr{\n"
- " f1 = #rrrrr{f1 = a,f2 = b,f3 = c},\n"
- " f2 = 2,f3 = 3},\n"
- " f3 = bb}}}">>,
- p({rrrrr,1,{rrrrr,a,b,c},{rrrrr,h,i,
- {rrrrr,aa,{rrrrr,{rrrrr,a,b,c},
- 2,3},bb}}},
- -1)),
- % With other terms than atomic ones on the same line:
-% ?line bt(<<"#rrrrr{\n"
-% " f1 = 1,f2 = #rrrrr{f1 = a,f2 = b,f3 = c},\n"
-% " f3 = \n"
-% " #rrrrr{\n"
-% " f1 = h,f2 = i,\n"
-% " f3 = \n"
-% " #rrrrr{\n"
-% " f1 = aa,\n"
-% " f2 = \n"
-% " #rrrrr{\n"
-% " f1 = #rrrrr{f1 = a,f2 = b,"
-% "f3 = c},f2 = 2,f3 = 3},\n"
-% " f3 = bb}}}">>,
-% p({rrrrr,1,{rrrrr,a,b,c},{rrrrr,h,i,
-% {rrrrr,aa,{rrrrr,{rrrrr,a,b,c},
-% 2,3},bb}}},
-% -1)),
- % With line breaks:
-% ?line bt(<<"#rrrrr{\n"
-% " f1 = 1,\n"
-% " f2 = #rrrrr{f1 = a,f2 = b,f3 = c},\n"
-% " f3 = \n"
-% " #rrrrr{\n"
-% " f1 = h,\n"
-% " f2 = i,\n"
-% " f3 = \n"
-% " #rrrrr{\n"
-% " f1 = aa,\n"
-% " f2 = \n"
-% " #rrrrr{\n"
-% " f1 = #rrrrr{f1 = a,f2 = b,"
-% "f3 = c},\n"
-% " f2 = 2,\n"
-% " f3 = 3},\n"
-% " f3 = bb}}}">>,
-% p({rrrrr,1,{rrrrr,a,b,c},{rrrrr,h,i,
-% {rrrrr,aa,{rrrrr,{rrrrr,a,b,c},
-% 2,3},bb}}},
-% -1)),
- ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
- " bbbbbbbbbbbbbbbbbbbb = \n"
- " #d{aaaaaaaaaaaaaaaaaaaa = a,bbbbbbbbbbbbbbbbbbbb = b,\n"
- " cccccccccccccccccccc = c,dddddddddddddddddddd = d,\n"
- " eeeeeeeeeeeeeeeeeeee = e},\n"
- " cccccccccccccccccccc = 3,\n"
- " dddddddddddddddddddd = \n"
- " #d{aaaaaaaaaaaaaaaaaaaa = h,bbbbbbbbbbbbbbbbbbbb = i,\n"
- " cccccccccccccccccccc = \n"
- " #d{aaaaaaaaaaaaaaaaaaaa = aa,"
- "bbbbbbbbbbbbbbbbbbbb = bb,\n"
- " cccccccccccccccccccc = \n"
- " #d{aaaaaaaaaaaaaaaaaaaa = 1,"
- "bbbbbbbbbbbbbbbbbbbb = 2,\n"
- " cccccccccccccccccccc = 3,"
- "dddddddddddddddddddd = 4,\n"
- " eeeeeeeeeeeeeeeeeeee = 5},\n"
- " dddddddddddddddddddd = dd,"
- "eeeeeeeeeeeeeeeeeeee = ee},\n"
- " dddddddddddddddddddd = k,"
- "eeeeeeeeeeeeeeeeeeee = l},\n"
- " eeeeeeeeeeeeeeeeeeee = 5}">>,
- p({d,1,{d,a,b,c,d,e},3,{d,h,i,{d,aa,bb,{d,1,2,3,4,5},dd,ee},
- k,l},5}, -1)),
- % With line breaks:
-% ?line bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
-% " bbbbbbbbbbbbbbbbbbbb = \n"
-% " #d{aaaaaaaaaaaaaaaaaaaa = a,\n"
-% " bbbbbbbbbbbbbbbbbbbb = b,\n"
-% " cccccccccccccccccccc = c,\n"
-% " dddddddddddddddddddd = d,\n"
-% " eeeeeeeeeeeeeeeeeeee = e},\n"
-% " cccccccccccccccccccc = 3,\n"
-% " dddddddddddddddddddd = \n"
-% " #d{aaaaaaaaaaaaaaaaaaaa = h,\n"
-% " bbbbbbbbbbbbbbbbbbbb = i,\n"
-% " cccccccccccccccccccc = \n"
-% " #d{aaaaaaaaaaaaaaaaaaaa = aa,\n"
-% " bbbbbbbbbbbbbbbbbbbb = bb,\n"
-% " cccccccccccccccccccc = \n"
-% " #d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
-% " bbbbbbbbbbbbbbbbbbbb = 2,\n"
-% " cccccccccccccccccccc = 3,\n"
-% " dddddddddddddddddddd = 4,\n"
-% " eeeeeeeeeeeeeeeeeeee = 5},\n"
-% " dddddddddddddddddddd = dd,\n"
-% " eeeeeeeeeeeeeeeeeeee = ee},\n"
-% " dddddddddddddddddddd = k,\n"
-% " eeeeeeeeeeeeeeeeeeee = l},\n"
-% " eeeeeeeeeeeeeeeeeeee = 5}">>,
-% p({d,1,{d,a,b,c,d,e},3,{d,h,i,{d,aa,bb,{d,1,2,3,4,5},dd,ee},
-% k,l},5}, -1)),
+ bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,\n"
+ " cccccccccccccccccccc = 3,dddddddddddddddddddd = 4,\n"
+ " eeeeeeeeeeeeeeeeeeee = 5}">>,
+ p({d,1,2,3,4,5}, -1)),
+ "..." = p({d,1,2,3,4,5}, 0),
+ "{...}" = p({d,1,2,3,4,5}, 1),
+ "#d{...}" = p({d,1,2,3,4,5}, 2),
+ "#d{aaaaaaaaaaaaaaaaaaaa = 1,...}" = p({d,1,2,3,4,5}, 3),
+ bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,...}">>,
+ p({d,1,2,3,4,5}, 4)),
+ bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,\n"
+ " cccccccccccccccccccc = 3,...}">>,
+ p({d,1,2,3,4,5}, 5)), % longer than 80 characters...
+ bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,\n"
+ " cccccccccccccccccccc = 3,dddddddddddddddddddd = 4,...}">>,
+ p({d,1,2,3,4,5}, 6)),
+ bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,bbbbbbbbbbbbbbbbbbbb = 2,\n"
+ " cccccccccccccccccccc = 3,dddddddddddddddddddd = 4,\n"
+ " eeeeeeeeeeeeeeeeeeee = 5}">>,
+ p({d,1,2,3,4,5}, 7)),
+ bt(<<"#rrrrr{\n"
+ " f1 = 1,\n"
+ " f2 = #rrrrr{f1 = a,f2 = b,f3 = c},\n"
+ " f3 = \n"
+ " #rrrrr{\n"
+ " f1 = h,f2 = i,\n"
+ " f3 = \n"
+ " #rrrrr{\n"
+ " f1 = aa,\n"
+ " f2 = \n"
+ " #rrrrr{\n"
+ " f1 = #rrrrr{f1 = a,f2 = b,f3 = c},\n"
+ " f2 = 2,f3 = 3},\n"
+ " f3 = bb}}}">>,
+ p({rrrrr,1,{rrrrr,a,b,c},{rrrrr,h,i,
+ {rrrrr,aa,{rrrrr,{rrrrr,a,b,c},
+ 2,3},bb}}},
+ -1)),
+ bt(<<"#d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
+ " bbbbbbbbbbbbbbbbbbbb = \n"
+ " #d{aaaaaaaaaaaaaaaaaaaa = a,bbbbbbbbbbbbbbbbbbbb = b,\n"
+ " cccccccccccccccccccc = c,dddddddddddddddddddd = d,\n"
+ " eeeeeeeeeeeeeeeeeeee = e},\n"
+ " cccccccccccccccccccc = 3,\n"
+ " dddddddddddddddddddd = \n"
+ " #d{aaaaaaaaaaaaaaaaaaaa = h,bbbbbbbbbbbbbbbbbbbb = i,\n"
+ " cccccccccccccccccccc = \n"
+ " #d{aaaaaaaaaaaaaaaaaaaa = aa,"
+ "bbbbbbbbbbbbbbbbbbbb = bb,\n"
+ " cccccccccccccccccccc = \n"
+ " #d{aaaaaaaaaaaaaaaaaaaa = 1,"
+ "bbbbbbbbbbbbbbbbbbbb = 2,\n"
+ " cccccccccccccccccccc = 3,"
+ "dddddddddddddddddddd = 4,\n"
+ " eeeeeeeeeeeeeeeeeeee = 5},\n"
+ " dddddddddddddddddddd = dd,"
+ "eeeeeeeeeeeeeeeeeeee = ee},\n"
+ " dddddddddddddddddddd = k,"
+ "eeeeeeeeeeeeeeeeeeee = l},\n"
+ " eeeeeeeeeeeeeeeeeeee = 5}">>,
+ p({d,1,{d,a,b,c,d,e},3,{d,h,i,{d,aa,bb,{d,1,2,3,4,5},dd,ee},
+ k,l},5}, -1)),
A = aaaaaaaaaaaaa,
%% Print the record with dots at the end of the line (Ll = 80).
- ?line "{aaaaaaa" ++ _ =
- p({A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
- {A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
- {A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
- {A,{A,{ggg,{hhh,{ii,{jj,{kk,{ll,{mm,{nn,{oo,{d,1,2,3,4,5}
- }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
- }}}}}}}}}}}}}}}}, 146),
- ?line "{aaaaaaa" ++ _ =
- p({A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
- {A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
- {A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
- {A,{A,{A,{A,{A,{ggg,{hhh,{ii,{jj,{kk,{ll,{mm,{nn,{oo,{a}
- }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
- }}}}}}}}}}}}}}}}}}}, 152),
-
- ?line bt(<<"{aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {g,{h,{i,{j,{k,{l,{m,{n,{o,#"
- "d{...}}}}}}}}}}}}}}}}">>,
- p({A,{A,{A,{A,{A,{A,
- {g,{h,{i,{j,{k,{l,{m,{n,{o,{d,1,2,3,4,5}}}}}}}}}}}}}}}}, 32)),
- ?line bt(<<"{a,#b{f = {c,{d,{e,{f,...}}}}}}">>,
- p({a,{b,{c,{d,{e,{f,g}}}}}}, 12)),
- ?line bt(<<"{aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,#c{f1 = ddd,"
- "f2 = eee}}}}}}}}}}">>,
- p({A,{A,{A,{A,{A,{A,{A,{A,{A,{c,ddd,eee}}}}}}}}}}, 100)),
- ?line bt(<<"{aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,{aaaaaaaaaaaaa,{aaaaaaaaaaaaa,...}}}}">>,
- p({A,{A,{A,{A,{b}}}}}, 8)),
- % With no restriction on number of characters per line:
-% ?line bt(<<"{aaaaaaaaaaaaa,{aaaaaaaaaaaaa,{aaaaaaaaaaaaa,"
-% "{aaaaaaaaaaaaa,...}}}}">>,
-% p({A,{A,{A,{A,{b}}}}}, 8)),
- ?line bt(<<"{aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,{aaaaaaaaaaaaa,{aaaaaaaaaaaaa,...}}}}}">>,
- p({A,{A,{A,{A,{A,{b}}}}}}, 10)),
- % With no restriction on number of characters per line:
-% ?line bt(<<"{aaaaaaaaaaaaa,\n"
-% " {aaaaaaaaaaaaa,{aaaaaaaaaaaaa,{aaaaaaaaaaaaa,"
-% "{aaaaaaaaaaaaa,...}}}}}">>,
-% p({A,{A,{A,{A,{A,{b}}}}}}, 10)),
- ?line bt(<<"{aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,"
- "{aaaaaaaaaaaaa,#a{}}}}}}}}}}}">>,
- p({A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{a}}}}}}}}}}}, 23)),
- ?line bt(<<"{aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n",
- " #rrrrr{\n"
- " f1 = kljlkjlksfdgkljlsdkjf,"
- "f2 = kljkljsdaflkjlkjsdf,...}}}}">>,
- p({A,{A,{A,{rrrrr, kljlkjlksfdgkljlsdkjf,
- kljkljsdaflkjlkjsdf,
- asdfkldsjfklkljsdklfds}}}}, 10)),
- % With no restriction on number of characters per line:
-% ?line bt(<<"{aaaaaaaaaaaaa,\n"
-% " {aaaaaaaaaaaaa,\n"
-% " {aaaaaaaaaaaaa,\n",
-% " #rrrrr{f1 = kljlkjlksfdgkljlsdkjf,f2 = "
-% "kljkljsdaflkjlkjsdf,...}}}}">>,
-% p({A,{A,{A,{rrrrr, kljlkjlksfdgkljlsdkjf,
-% kljkljsdaflkjlkjsdf,
-% asdfkldsjfklkljsdklfds}}}}, 10)),
- ?line bt(<<"{aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {aaaaaaaaaaaaa,\n"
- " {g,{h,{i,{j,{k,{l,{m,{n,"
- "{o,#a{}}}}}}}}}}}}}}}}}">>,
- p({A,{A,{A,{A,{A,{A,{A,
- {g,{h,{i,{j,{k,{l,{m,{n,{o,{a}}}}}}}}}}}}}}}}}, 100)),
- ?line bt(<<"#c{\n"
- " f1 = \n"
- " #c{\n"
- " f1 = \n"
- " #c{\n"
- " f1 = \n"
- " #c{\n"
- " f1 = \n"
- " #c{\n"
- " f1 = \n"
- " #c{\n"
- " f1 = \n"
- " #c{\n"
- " f1 = \n"
- " #c{\n"
- " f1 = \n"
- " #c{\n"
- " f1 = #c{f1 = #c{f1 = #c{f1 = a,"
- "f2 = b},f2 = b},f2 = b},\n"
- " f2 = b},\n"
- " f2 = b},\n"
- " f2 = b},\n"
- " f2 = b},\n"
- " f2 = b},\n"
- " f2 = b},\n"
- " f2 = b},\n"
- " f2 = b},\n"
- " f2 = b}">>,
- p({c,{c,{c,{c,{c,{c,{c,{c,{c,{c,{c,{c,a,b},b},b},b},b},b},
- b},b},b},b},b},b}, -1)),
- ?line bt(<<"#rrrrr{\n"
- " f1 = \n"
- " #rrrrr{\n"
- " f1 = \n"
- " #rrrrr{\n"
- " f1 = \n"
- " #rrrrr{\n"
- " f1 = \n"
- " {rrrrr,{rrrrr,a,#rrrrr{f1 = {rrrrr,1,2},f2 = a,"
- "f3 = b}},b},\n"
- " f2 = {rrrrr,c,d},\n"
- " f3 = {rrrrr,1,2}},\n"
- " f2 = 1,f3 = 2},\n"
- " f2 = 3,f3 = 4},\n"
- " f2 = 5,f3 = 6}">>,
- p({rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,a,{rrrrr,
- {rrrrr,1,2},a,b}},b},{rrrrr,c,d},{rrrrr,1,2}},
- 1,2},3,4},5,6}, -1)),
- % With other terms than atomic ones on the same line:
-% ?line bt(<<"#rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = \n"
-% " {rrrrr,{rrrrr,a,#rrrrr{f1 = {rrrrr,1,2},f2 = a,"
-% "f3 = b}},b},\n"
-% " f2 = {rrrrr,c,d},f3 = {rrrrr,1,2}},\n"
-% " f2 = 1,f3 = 2},\n"
-% " f2 = 3,f3 = 4},\n"
-% " f2 = 5,f3 = 6}">>,
-% p({rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,a,{rrrrr,
-% {rrrrr,1,2},a,b}},b},{rrrrr,c,d},{rrrrr,1,2}},
-% 1,2},3,4},5,6}, -1)),
- % With no restriction on number of characters per line:
-% ?line bt(<<"#rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = {rrrrr,{rrrrr,a,#rrrrr{f1 = {rrrrr,1,2},f2 = a,"
-% "f3 = b}},b},\n"
-% " f2 = {rrrrr,c,d},f3 = {rrrrr,1,2}},\n"
-% " f2 = 1,f3 = 2},\n"
-% " f2 = 3,f3 = 4},\n"
-% " f2 = 5,f3 = 6}">>,
-% p({rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,a,{rrrrr,
-% {rrrrr,1,2},a,b}},b},{rrrrr,c,d},{rrrrr,1,2}},
-% 1,2},3,4},5,6}, -1)),
- % With line breaks:
-% ?line bt(<<"#rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = \n"
-% " #rrrrr{\n"
-% " f1 = {rrrrr,{rrrrr,a,#rrrrr{f1 = {rrrrr,1,2},f2 = a,"
-% "f3 = b}},b},\n"
-% " f2 = {rrrrr,c,d},\n"
-% " f3 = {rrrrr,1,2}},\n"
-% " f2 = 1,\n"
-% " f3 = 2},\n"
-% " f2 = 3,\n"
-% " f3 = 4},\n"
-% " f2 = 5,\n"
-% " f3 = 6}">>,
-% p({rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,a,{rrrrr,
-% {rrrrr,1,2},a,b}},b},{rrrrr,c,d},{rrrrr,1,2}},
-% 1,2},3,4},5,6}, -1)),
- ?line "{aaa,\n {aaa," ++ _ =
+ "{aaaaaaa" ++ _ =
+ p({A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
+ {A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
+ {A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
+ {A,{A,{ggg,{hhh,{ii,{jj,{kk,{ll,{mm,{nn,{oo,{d,1,2,3,4,5}
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+ }}}}}}}}}}}}}}}}, 146),
+ "{aaaaaaa" ++ _ =
+ p({A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
+ {A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
+ {A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{A,
+ {A,{A,{A,{A,{A,{ggg,{hhh,{ii,{jj,{kk,{ll,{mm,{nn,{oo,{a}
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+ }}}}}}}}}}}}}}}}}}}, 152),
+
+ bt(<<"{aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {g,{h,{i,{j,{k,{l,{m,{n,{o,#"
+ "d{...}}}}}}}}}}}}}}}}">>,
+ p({A,{A,{A,{A,{A,{A,
+ {g,{h,{i,{j,{k,{l,{m,{n,{o,{d,1,2,3,4,5}}}}}}}}}}}}}}}}, 32)),
+ bt(<<"{a,#b{f = {c,{d,{e,{f,...}}}}}}">>,
+ p({a,{b,{c,{d,{e,{f,g}}}}}}, 12)),
+ bt(<<"{aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,#c{f1 = ddd,"
+ "f2 = eee}}}}}}}}}}">>,
+ p({A,{A,{A,{A,{A,{A,{A,{A,{A,{c,ddd,eee}}}}}}}}}}, 100)),
+ bt(<<"{aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,{aaaaaaaaaaaaa,{aaaaaaaaaaaaa,...}}}}">>,
+ p({A,{A,{A,{A,{b}}}}}, 8)),
+ bt(<<"{aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,{aaaaaaaaaaaaa,{aaaaaaaaaaaaa,...}}}}}">>,
+ p({A,{A,{A,{A,{A,{b}}}}}}, 10)),
+ bt(<<"{aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,"
+ "{aaaaaaaaaaaaa,#a{}}}}}}}}}}}">>,
+ p({A,{A,{A,{A,{A,{A,{A,{A,{A,{A,{a}}}}}}}}}}}, 23)),
+ bt(<<"{aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n",
+ " #rrrrr{\n"
+ " f1 = kljlkjlksfdgkljlsdkjf,"
+ "f2 = kljkljsdaflkjlkjsdf,...}}}}">>,
+ p({A,{A,{A,{rrrrr, kljlkjlksfdgkljlsdkjf,
+ kljkljsdaflkjlkjsdf,
+ asdfkldsjfklkljsdklfds}}}}, 10)),
+ bt(<<"{aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {aaaaaaaaaaaaa,\n"
+ " {g,{h,{i,{j,{k,{l,{m,{n,"
+ "{o,#a{}}}}}}}}}}}}}}}}}">>,
+ p({A,{A,{A,{A,{A,{A,{A,
+ {g,{h,{i,{j,{k,{l,{m,{n,{o,{a}}}}}}}}}}}}}}}}}, 100)),
+ bt(<<"#c{\n"
+ " f1 = \n"
+ " #c{\n"
+ " f1 = \n"
+ " #c{\n"
+ " f1 = \n"
+ " #c{\n"
+ " f1 = \n"
+ " #c{\n"
+ " f1 = \n"
+ " #c{\n"
+ " f1 = \n"
+ " #c{\n"
+ " f1 = \n"
+ " #c{\n"
+ " f1 = \n"
+ " #c{\n"
+ " f1 = #c{f1 = #c{f1 = #c{f1 = a,"
+ "f2 = b},f2 = b},f2 = b},\n"
+ " f2 = b},\n"
+ " f2 = b},\n"
+ " f2 = b},\n"
+ " f2 = b},\n"
+ " f2 = b},\n"
+ " f2 = b},\n"
+ " f2 = b},\n"
+ " f2 = b},\n"
+ " f2 = b}">>,
+ p({c,{c,{c,{c,{c,{c,{c,{c,{c,{c,{c,{c,a,b},b},b},b},b},b},
+ b},b},b},b},b},b}, -1)),
+ bt(<<"#rrrrr{\n"
+ " f1 = \n"
+ " #rrrrr{\n"
+ " f1 = \n"
+ " #rrrrr{\n"
+ " f1 = \n"
+ " #rrrrr{\n"
+ " f1 = \n"
+ " {rrrrr,{rrrrr,a,#rrrrr{f1 = {rrrrr,1,2},f2 = a,"
+ "f3 = b}},b},\n"
+ " f2 = {rrrrr,c,d},\n"
+ " f3 = {rrrrr,1,2}},\n"
+ " f2 = 1,f3 = 2},\n"
+ " f2 = 3,f3 = 4},\n"
+ " f2 = 5,f3 = 6}">>,
+ p({rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,{rrrrr,a,{rrrrr,
+ {rrrrr,1,2},a,b}},b},{rrrrr,c,d},{rrrrr,1,2}},
+ 1,2},3,4},5,6}, -1)),
+ "{aaa,\n {aaa," ++ _ =
p({aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,
- {aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,
- {aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,
- {aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,
- {aaa,a}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},
+ {aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,
+ {aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,
+ {aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,{aaa,
+ {aaa,a}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},
1, 80, -1),
%% A few other cases...
- ?line "{a,#Fun<" ++ _ = lists:flatten(io_lib_pretty:print({a,fun fmt/2})),
- ?line "#Fun<" ++ _ = io_lib_pretty:print(fun() -> foo end),
- % ?line "[<<\"foobar\">>|<<\"barf\"...>>]" =
- % p([<<"foobar">>|<<"barfoo">>], 1, 30, 4),
+ "{a,#Fun<" ++ _ = lists:flatten(io_lib_pretty:print({a,fun fmt/2})),
+ "#Fun<" ++ _ = io_lib_pretty:print(fun() -> foo end),
%% No support for negative columns any more:
- ?line "[a,\n [b,\n c,\n d,\n [e,\n f]],\n c]" =
- p([a,[b,c,d,[e,f]],c], -1, 2, 10),
- ?line "[a,\n [b,\n c,\n d,\n [e,\n f]],\n c]" =
- p([a,[b,c,d,[e,f]],c], 0, 2, 10),
+ "[a,\n [b,\n c,\n d,\n [e,\n f]],\n c]" =
+ p([a,[b,c,d,[e,f]],c], -1, 2, 10),
+ "[a,\n [b,\n c,\n d,\n [e,\n f]],\n c]" =
+ p([a,[b,c,d,[e,f]],c], 0, 2, 10),
%% 20 bytes are tried first, then the rest. Try 21 bytes:
L = lists:duplicate(20, $a),
- % ?line bt(<<"<<\"aaaaaa\"\n \"aaaaaa\"\n \"aaaaaa\"\n \"aaa\">>">>,
- ?line bt(<<"<<\"aaaaaaaaaaaaaaaaaaaaa\">>">>,
- p(list_to_binary([$a | L]), 1, 10, -1)),
- ?line "<<97," ++ _ = p(list_to_binary(L ++ [3]), 1, 10, -1),
- % ?line "<<\"aaaa\"...>>" = p(list_to_binary(L ++ [3]), 1, 10, 2),
- % ?line "<<\"aaaaaa\"\n \"aa\"...>>" =
- % ?line "<<\"aaaaaaaa\"...>>" =
- % p(list_to_binary(L ++ [3]), 1, 10, 3),
- % ?line "<<\"aaaaaa\"\n \"aaaaaa\"\n \"aaaaaa\"\n \"aa\"...>>" =
- % ?line "<<\"aaaaaaaaaaaaaaaaaaaa\"...>>" =
- % p(list_to_binary(L ++ [3]), 1, 10, 21),
- ?line "<<97," ++ _ = p(list_to_binary(L ++ [3]), 1, 10, 22),
-
- ?line "\"\\b\\t\\n\\v\\f\\r\\e\250\"" =
- p([8,9,10,11,12,13,27,168], 1, 40, -1),
- % ?line "\"\\b\\t\\n\"\n \"\\v\\f\\r\"\n \"\\e\250\"" =
- ?line "\"\\b\\t\\n\\v\\f\\r\\e¨\"" =
- p([8,9,10,11,12,13,27,168], 1, 10, -1),
- ?line "\"\\b\\t\\n\\v\\f\\r\\e\250\"" =
- p([8,9,10,11,12,13,27,168], 1, 40, 100),
- % ?line "\"\\e\\t\\nab\"\n \"cd\"" =
- ?line "\"\\e\\t\\nabcd\"" =
- p("\e\t\nabcd", 1, 12, -1),
+ %% bt(<<"<<\"aaaaaa\"\n \"aaaaaa\"\n \"aaaaaa\"\n \"aaa\">>">>,
+ bt(<<"<<\"aaaaaaaaaaaaaaaaaaaaa\">>">>,
+ p(list_to_binary([$a | L]), 1, 10, -1)),
+ "<<97," ++ _ = p(list_to_binary(L ++ [3]), 1, 10, -1),
+ "<<97," ++ _ = p(list_to_binary(L ++ [3]), 1, 10, 22),
+
+ "\"\\b\\t\\n\\v\\f\\r\\e\250\"" =
+ p([8,9,10,11,12,13,27,168], 1, 40, -1),
+ %% "\"\\b\\t\\n\"\n \"\\v\\f\\r\"\n \"\\e\250\"" =
+ "\"\\b\\t\\n\\v\\f\\r\\e¨\"" =
+ p([8,9,10,11,12,13,27,168], 1, 10, -1),
+ "\"\\b\\t\\n\\v\\f\\r\\e\250\"" =
+ p([8,9,10,11,12,13,27,168], 1, 40, 100),
+ %% "\"\\e\\t\\nab\"\n \"cd\"" =
+ "\"\\e\\t\\nabcd\"" =
+ p("\e\t\nabcd", 1, 12, -1),
%% DEL (127) is special...
- ?line "[127]" = p("\d", 1, 10, -1),
- ?line "[127]" = p([127], 1, 10, 100),
+ "[127]" = p("\d", 1, 10, -1),
+ "[127]" = p([127], 1, 10, 100),
- ?line "<<\"\\b\\t\\n\\v\\f\\r\\e\250\">>" =
- p(<<8,9,10,11,12,13,27,168>>, 1, 40, -1),
- ?line "<<\"\\b\\t\\n\\v\\f\\r\\e\250\">>" =
- p(<<8,9,10,11,12,13,27,168>>, 1, 10, -1),
- ?line "<<127>>" = p(<<127>>, 1, 10, 100),
+ "<<\"\\b\\t\\n\\v\\f\\r\\e\250\">>" =
+ p(<<8,9,10,11,12,13,27,168>>, 1, 40, -1),
+ "<<\"\\b\\t\\n\\v\\f\\r\\e\250\">>" =
+ p(<<8,9,10,11,12,13,27,168>>, 1, 10, -1),
+ "<<127>>" = p(<<127>>, 1, 10, 100),
%% "Partial" string binaries:
- ?line "<<\"he\"...>>" = p(list_to_binary("he"++[3]), 1, 80, 2),
- ?line "<<\"he\"...>>" = p(list_to_binary("he"++[3]), 1, 80, 3),
- ?line "<<104,101,3>>" = p(list_to_binary("he"++[3]), 1, 80, 4),
- ?line "<<...>>" = p(list_to_binary([3] ++ "he"), 1, 80, 1),
- ?line "<<3,...>>" = p(list_to_binary([3] ++ "he"), 1, 80, 2),
- ?line "<<3,104,...>>" = p(list_to_binary([3] ++ "he"), 1, 80, 3),
-
- ?line "<<\"12345678901234567890\"...>>" =
- p(list_to_binary("12345678901234567890"++[3]), 1, 80, 8),
- ?line "<<\"12345678901234567890\"...>>" =
- p(list_to_binary("12345678901234567890"++[3]), 1, 80, 21),
- ?line "<<49," ++ _ =
- p(list_to_binary("12345678901234567890"++[3]), 1, 80, 22),
-
- ?line "{sdfsdfj,\n 23" ++ _ =
- p({sdfsdfj,23423423342.23432423}, 1, 17, -1),
-
- ?line bt(<<"kljkljlksdjjlf kljalkjlsdajafasjdfj [kjljklasdf,kjlljsfd,sdfsdkjfsd,kjjsdf,jl,
+ "<<\"he\"...>>" = p(list_to_binary("he"++[3]), 1, 80, 2),
+ "<<\"he\"...>>" = p(list_to_binary("he"++[3]), 1, 80, 3),
+ "<<104,101,3>>" = p(list_to_binary("he"++[3]), 1, 80, 4),
+ "<<...>>" = p(list_to_binary([3] ++ "he"), 1, 80, 1),
+ "<<3,...>>" = p(list_to_binary([3] ++ "he"), 1, 80, 2),
+ "<<3,104,...>>" = p(list_to_binary([3] ++ "he"), 1, 80, 3),
+
+ "<<\"12345678901234567890\"...>>" =
+ p(list_to_binary("12345678901234567890"++[3]), 1, 80, 8),
+ "<<\"12345678901234567890\"...>>" =
+ p(list_to_binary("12345678901234567890"++[3]), 1, 80, 21),
+ "<<49," ++ _ =
+ p(list_to_binary("12345678901234567890"++[3]), 1, 80, 22),
+
+ "{sdfsdfj,\n 23" ++ _ =
+ p({sdfsdfj,23423423342.23432423}, 1, 17, -1),
+
+ bt(<<"kljkljlksdjjlf kljalkjlsdajafasjdfj [kjljklasdf,kjlljsfd,sdfsdkjfsd,kjjsdf,jl,
lkjjlajsfd|jsdf]">>,
fmt("~w ~w ~p",
[kljkljlksdjjlf,
@@ -949,45 +653,36 @@ otp_6354(Config) when is_list(Config) ->
jsdf]])),
%% Binaries are split as well:
- ?line bt(<<"<<80,100,0,55,55,55,55,55,55,55,55,55,\n "
+ bt(<<"<<80,100,0,55,55,55,55,55,55,55,55,55,\n "
"55,55,55,55,55,55,55,...>>">>,
p(<<80,100,0,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
55,55,55,55,55,55,55,55,55,55,55,55>>,1,40,20)),
- ?line bt(<<"<<80,100,0,55,55,55,55,55,55,55,55,55,\n "
+ bt(<<"<<80,100,0,55,55,55,55,55,55,55,55,55,\n "
"55,55,55,55,55,55,55,55,55,55,55,55,\n 55,55,55,55,55,55>>">>,
p(<<80,100,0,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
55,55,55,55,55,55,55,55,55,55,55,55>>,1,40,-1)),
- ?line "<<0,0,0,\n ...>>" = p(<<0,0,0,0,0>>, 1, 10, 4),
+ "<<0,0,0,\n ...>>" = p(<<0,0,0,0,0>>, 1, 10, 4),
%% ~W now uses ",..." when printing tuples
- ?line "[a,b|...]" = fmt("~W", [[a,b,c,d,e], 3]),
- ?line "{a,b,...}" = fmt("~W", [{a,b,c,d,e}, 3]),
+ "[a,b|...]" = fmt("~W", [[a,b,c,d,e], 3]),
+ "{a,b,...}" = fmt("~W", [{a,b,c,d,e}, 3]),
ok.
-otp_6495(doc) ->
- ["OTP-6495. io_lib_pretty bugfix."];
-otp_6495(suite) ->
- [];
+%% OTP-6495. io_lib_pretty bugfix.
otp_6495(Config) when is_list(Config) ->
- ?line bt(<<"[120,120,120,120,120,120,120,120,120,120,120,120,120,120,"
+ bt(<<"[120,120,120,120,120,120,120,120,120,120,120,120,120,120,"
"120,120,120,120,120]<<1>>">>,
fmt("~w~p", ["xxxxxxxxxxxxxxxxxxx", <<1>>])),
ok.
-otp_6517(doc) ->
- ["OTP-6517. The Format argument of fwrite can be a binary."];
-otp_6517(suite) ->
- [];
+%% OTP-6517. The Format argument of fwrite can be a binary.
otp_6517(Config) when is_list(Config) ->
- ?line "string" = fmt(<<"~s">>, [<<"string">>]),
+ "string" = fmt(<<"~s">>, [<<"string">>]),
ok.
-otp_6502(doc) ->
- ["OTP-6502. Bits."];
-otp_6502(suite) ->
- [];
+%% OTP-6502. Bits.
otp_6502(Config) when is_list(Config) ->
- ?line bt(<<
+ bt(<<
"[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]"
"<<0,0,8,\n"
" "
@@ -995,10 +690,7 @@ otp_6502(Config) when is_list(Config) ->
fmt("~w~p", [lists:seq(0, 25), <<17:25>>])),
ok.
-otp_7421(doc) ->
- ["OTP-7421. Soft limit of 60 chars removed when pretty printing."];
-otp_7421(suite) ->
- [];
+%% OTP-7421. Soft limit of 60 chars removed when pretty printing.
otp_7421(Config) when is_list(Config) ->
bt(<<"{aa,bb,\n"
" c,dd,\n"
@@ -1066,31 +758,28 @@ rfd(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, 0) ->
rfd(_, _) ->
no.
-manpage(doc) ->
- ["The examples in io(3) and io_lib(3)."];
-manpage(suite) ->
- [];
+%% The examples in io(3) and io_lib(3).
manpage(Config) when is_list(Config) ->
%% The examples that write or print only, not the ones that read...
- ?line bt(<<"Hello world!\n">>,
+ bt(<<"Hello world!\n">>,
fmt("Hello world!~n", [])),
- ?line bt(<<"| aaaaa|bbbbb |ccccc|\n">>, % bugfix
+ bt(<<"| aaaaa|bbbbb |ccccc|\n">>, % bugfix
fmt("|~10.5c|~-10.5c|~5c|~n", [$a, $b, $c])),
- ?line bt(<<"|**********|\n">>,
+ bt(<<"|**********|\n">>,
fmt("|~10w|~n", [{hey, hey, hey}])),
- ?line bt(<<"|{hey,hey,h|\n">>,
+ bt(<<"|{hey,hey,h|\n">>,
fmt("|~10s|~n", [io_lib:write({hey, hey, hey})])),
T = [{attributes,[[{id,age,1.50000},{mode,explicit},
{typename,"INTEGER"}], [{id,cho},{mode,explicit},{typename,'Cho'}]]},
{typename,'Person'},{tag,{'PRIVATE',3}},{mode,implicit}],
- ?line bt(<<"[{attributes,[[{id,age,1.5},{mode,explicit},{typename,"
+ bt(<<"[{attributes,[[{id,age,1.5},{mode,explicit},{typename,"
"[73,78,84,69,71,69,82]}],[{id,cho},{mode,explicit},"
"{typename,'Cho'}]]},{typename,'Person'},{tag,{'PRIVATE',3}},"
"{mode,implicit}]\n">>,
fmt("~w~n", [T])),
- ?line bt(<<"[{attributes,[[{id,age,1.5},\n"
+ bt(<<"[{attributes,[[{id,age,1.5},\n"
" {mode,explicit},\n"
" {typename,\"INTEGER\"}],\n"
" [{id,cho},{mode,explicit},{typename,'Cho'}]]},\n"
@@ -1098,7 +787,7 @@ manpage(Config) when is_list(Config) ->
" {tag,{'PRIVATE',3}},\n"
" {mode,implicit}]\n">>,
fmt("~62p~n", [T])),
- ?line bt(<<"Here T = [{attributes,[[{id,age,1.5},\n"
+ bt(<<"Here T = [{attributes,[[{id,age,1.5},\n"
" {mode,explicit},\n"
" {typename,\"INTEGER\"}],\n"
" [{id,cho},\n"
@@ -1108,67 +797,64 @@ manpage(Config) when is_list(Config) ->
" {tag,{'PRIVATE',3}},\n"
" {mode,implicit}]\n">>,
fmt("Here T = ~62p~n", [T])),
- ?line bt(<<"[{attributes,[[{id,age,1.5},{mode,explicit},"
+ bt(<<"[{attributes,[[{id,age,1.5},{mode,explicit},"
"{typename,...}],[{id,cho},{mode,...},{...}]]},"
"{typename,'Person'},{tag,{'PRIVATE',3}},{mode,implicit}]\n">>,
fmt("~W~n", [T,9])),
- ?line bt(<<"[{attributes,[[{id,age,1.5},{mode,explicit},{typename,...}],"
+ bt(<<"[{attributes,[[{id,age,1.5},{mode,explicit},{typename,...}],"
"\n "
"[{id,cho},{mode,...},{...}]]},\n {typename,'Person'},\n "
"{tag,{'PRIVATE',3}},\n {mode,implicit}]\n">>,
fmt("~62P~n", [T,9])),
- ?line "1F\n" = fmt("~.16B~n", [31]),
- ?line "-10011\n" = fmt("~.2B~n", [-19]),
- ?line "5Z\n" = fmt("~.36B~n", [5*36+35]),
- ?line "10#31\n" = fmt("~X~n", [31,"10#"]),
- ?line "-0x1F\n" = fmt("~.16X~n", [-31,"0x"]),
- ?line "10#31\n" = fmt("~.10#~n", [31]),
- ?line "-16#1F\n" = fmt("~.16#~n", [-31]),
- ?line "abc def 'abc def' {foo,1} A \n" =
+ "1F\n" = fmt("~.16B~n", [31]),
+ "-10011\n" = fmt("~.2B~n", [-19]),
+ "5Z\n" = fmt("~.36B~n", [5*36+35]),
+ "10#31\n" = fmt("~X~n", [31,"10#"]),
+ "-0x1F\n" = fmt("~.16X~n", [-31,"0x"]),
+ "10#31\n" = fmt("~.10#~n", [31]),
+ "-16#1F\n" = fmt("~.16#~n", [-31]),
+ "abc def 'abc def' {foo,1} A \n" =
fmt("~s ~w ~i ~w ~c ~n",
['abc def', 'abc def', {foo, 1},{foo, 1}, 65]),
- % fmt("~s", [65]),
+ %% fmt("~s", [65]),
%% io_lib(3)
- ?line bt(<<"{1,[2],[3],[...],...}">>,
+ bt(<<"{1,[2],[3],[...],...}">>,
lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9}, 5))),
ok.
-otp_6708(doc) ->
- ["OTP-6708. Fewer newlines when pretty-printing."];
-otp_6708(suite) ->
- [];
+%% OTP-6708. Fewer newlines when pretty-printing.
otp_6708(Config) when is_list(Config) ->
- ?line bt(<<"[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,\n"
+ bt(<<"[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,\n"
" 23,24,25,26,27,28,29|...]">>,
p(lists:seq(1,1000), 30)),
- ?line bt(<<"{lkjasklfjsdak,mlkasjdflksj,klasdjfklasd,jklasdfjkl,\n"
+ bt(<<"{lkjasklfjsdak,mlkasjdflksj,klasdjfklasd,jklasdfjkl,\n"
" jklsdjfklsd,masdfjkkl}">>,
p({lkjasklfjsdak,mlkasjdflksj,klasdjfklasd,jklasdfjkl,
jklsdjfklsd, masdfjkkl}, -1)),
- ?line bt(<<"#b{f = {lkjljalksdf,jklaskfjd,kljasdlf,kljasdf,kljsdlkf,\n"
+ bt(<<"#b{f = {lkjljalksdf,jklaskfjd,kljasdlf,kljasdf,kljsdlkf,\n"
" kjdd}}">>,
p({b, {lkjljalksdf,jklaskfjd,kljasdlf,kljasdf,kljsdlkf,kjdd}},
-1)),
- ?line bt(<<"#b{f = {lkjljalksdf,jklaskfjd,kljasdlf,kljasdf,kljsdlkf,\n"
+ bt(<<"#b{f = {lkjljalksdf,jklaskfjd,kljasdlf,kljasdf,kljsdlkf,\n"
" kdd}}">>,
p({b, {lkjljalksdf,jklaskfjd,kljasdlf,kljasdf,kljsdlkf,kdd}},
-1)),
- ?line bt(<<"#e{f = undefined,g = undefined,\n"
+ bt(<<"#e{f = undefined,g = undefined,\n"
" h = #e{f = 11,g = 22,h = 333}}">>,
p({e,undefined,undefined,{e,11,22,333}}, -1)),
- ?line bt(<<"[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21|\n"
+ bt(<<"[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21|\n"
" apa11]">>,
p(lists:seq(1,21) ++ apa11, -1)),
- ?line bt(<<"[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,\n"
+ bt(<<"[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,\n"
" 23,\n"
" {{abadalkjlasdjflksdajfksdklfsdjlkfdlskjflsdj"
"flsdjfldsdsdddd}}]">>,
p(lists:seq(1,23) ++
[{{abadalkjlasdjflksdajfksdklfsdjlkfdlskjflsdjflsdjfldsdsdddd}}],
-1)),
- ?line bt(<<"{lkjasdf,\n"
+ bt(<<"{lkjasdf,\n"
" {kjkjsd,\n"
" {kjsd,\n"
" {kljsdf,\n"
@@ -1180,7 +866,7 @@ otp_6708(Config) when is_list(Config) ->
{dkjsdf,{kjlds,
{kljsd,{kljs,{kljlkjsd}}}}}}}}}},
-1)),
- ?line bt(<<"{lkjasdf,\n"
+ bt(<<"{lkjasdf,\n"
" {kjkjsd,\n"
" {kjsd,{kljsdf,{kjlsd,{dkjsdf,{kjlds,"
"{kljsd,{kljs}}}}}}}}}">>,
@@ -1188,24 +874,24 @@ otp_6708(Config) when is_list(Config) ->
{kljsdf,{kjlsd,{dkjsdf,
{kjlds,{kljsd,{kljs}}}}}}}}},
-1)),
- ?line bt(<<"<<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,\n"
+ bt(<<"<<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,\n"
" 22,23>>">>,
p(list_to_binary(lists:seq(1,23)), -1)),
- ?line bt(<<"<<100,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,\n"
+ bt(<<"<<100,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,\n"
" 27>>">>,
p(list_to_binary([100|lists:seq(10,27)]), -1)),
- ?line bt(<<"<<100,101,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,\n"
+ bt(<<"<<100,101,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,\n"
" 26>>">>,
p(list_to_binary([100,101|lists:seq(10,26)]), -1)),
- ?line bt(<<"{{<<100,101,102,10,11,12,13,14,15,16,17,18,19,20,21,22,\n"
+ bt(<<"{{<<100,101,102,10,11,12,13,14,15,16,17,18,19,20,21,22,\n"
" 23>>}}">>,
p({{list_to_binary([100,101,102|lists:seq(10,23)])}}, -1)),
- ?line bt(<<"[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22|\n"
+ bt(<<"[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22|\n"
" ap]">>,
p(lists:seq(1,22) ++ ap, -1)),
- ?line bt(<<"[1,2,3,4,5,6,7,8,9,10,{},[],\n <<>>,11,12,13,14,15]">>,
+ bt(<<"[1,2,3,4,5,6,7,8,9,10,{},[],\n <<>>,11,12,13,14,15]">>,
p(lists:seq(1,10) ++ [{},[],<<>>] ++ lists:seq(11,15),1,30,-1)),
- ?line bt(<<"[ddd,ddd,\n"
+ bt(<<"[ddd,ddd,\n"
" {1},\n"
" [1,2],\n"
" ddd,kdfd,\n"
@@ -1215,7 +901,7 @@ otp_6708(Config) when is_list(Config) ->
p([ddd,ddd,{1},[1,2],ddd,kdfd,[[1,2],a,b,c],<<"foo">>,<<"bar">>,
1,{2}],1,50,-1)),
- ?line bt(<<"{dskljsadfkjsdlkjflksdjflksdjfklsdjklfjsdklfjlsdjfkl,jksd,\n"
+ bt(<<"{dskljsadfkjsdlkjflksdjflksdjfklsdjklfjsdklfjlsdjfkl,jksd,\n"
" "
"lkjsdf,kljsdf,kljsf,kljsdf,kljsdf,jkldf,jklsdf,kljsdf,\n"
" "
@@ -1226,7 +912,7 @@ otp_6708(Config) when is_list(Config) ->
lkjsdf,kljsdf,kljsf,kljsdf,kljsdf,jkldf,jklsdf,kljsdf,
kljsdf,jklsdf,lkjfd,lkjsdf,kljsdf,kljsdf,lkjsdf,kljsdf,
lkjsdfsd,kljsdf,kjsfj}, 1, 110, -1)),
- ?line bt(<<"{dskljsadfkjsdlkjflksdjflksdjfklsdjklfjsdklfjlsdjfkl,"
+ bt(<<"{dskljsadfkjsdlkjflksdjflksdjfklsdjklfjsdklfjlsdjfkl,"
"#d{aaaaaaaaaaaaaaaaaaaa = 1,\n"
" "
"bbbbbbbbbbbbbbbbbbbb = 2,cccccccccccccccccccc = 3,\n"
@@ -1239,15 +925,12 @@ otp_6708(Config) when is_list(Config) ->
-define(ONE(N), ((1 bsl N) - 1)).
-define(ALL_ONES, ((1 bsl 52) - 1)).
-otp_7084(doc) ->
- ["OTP-7084. Printing floating point numbers nicely."];
-otp_7084(suite) ->
- [];
+
+otp_7084() ->
+ [{timetrap,{minutes,6}}]. %% valgrind needs a lot of time
+
+%% OTP-7084. Printing floating point numbers nicely.
otp_7084(Config) when is_list(Config) ->
- OldDog=?config(watchdog, Config),
- test_server:timetrap_cancel(OldDog),
- Timeout = 180,
- ?line Dog = test_server:timetrap({seconds,Timeout}),
L = [{g_warm_up, fun g_warm_up/0},
{g_big_pos_float, fun g_big_pos_float/0},
{g_small_neg_float, fun g_small_neg_float/0},
@@ -1263,7 +946,6 @@ otp_7084(Config) when is_list(Config) ->
catch throw:Reason ->
Reason
end,
- ?line test_server:timetrap_cancel(Dog),
R.
g_warm_up() ->
@@ -1295,7 +977,7 @@ g_close_to_zero() ->
g_denormalized() ->
%% Denormalized floats (mantissa carry):
-% D = 5,
+%% D = 5,
%% Faster:
D = 1,
[ft({{S,0,?ONE(N)},D,D}) || S <- [0,1], N <- lists:seq(0, 52)],
@@ -1303,7 +985,7 @@ g_denormalized() ->
g_normalized() ->
%% Normalized floats (exponent carry):
-% D = 5,
+%% D = 5,
%% Faster:
D = 1,
[ft({{S,E,?ONE(52)},D,D}) || S <- [0,1], E <- lists:seq(0, 2045)],
@@ -1322,8 +1004,7 @@ g_choice() ->
g_misc() ->
L_0_308 = lists:seq(0, 308),
L_0_307 = lists:seq(0, 307),
-% L_1_9 = lists:seq(1, 9),
-% L_0_9 = lists:seq(0, 9),
+
%% Faster:
L_1_9 = [1,5,9],
L_0_9 = [0,1,5,9],
@@ -1798,10 +1479,10 @@ pack(Sign, Exp, Frac) ->
%% Whitebox test of io_lib:collect_line/3.
io_lib_collect_line_3_wb(Config) when is_list(Config) ->
- ?line do_collect_line(binary, "\n"),
- ?line do_collect_line(binary, "\r\n"),
- ?line do_collect_line(list, "\n"),
- ?line do_collect_line(list, "\r\n"),
+ do_collect_line(binary, "\n"),
+ do_collect_line(binary, "\r\n"),
+ do_collect_line(list, "\n"),
+ do_collect_line(list, "\r\n"),
ok.
do_collect_line(Mode, Eol) ->
@@ -1860,44 +1541,44 @@ do_collect_line_adjust_rest(Rest, [List|T]) when is_list(List) ->
cr_whitespace_in_string(Config) when is_list(Config) ->
- ?line {ok,["abc"],[]} = io_lib:fread("~s", "\rabc").
+ {ok,["abc"],[]} = io_lib:fread("~s", "\rabc").
io_fread_newlines(Config) when is_list(Config) ->
- ?line PrivDir = ?privdir(Config),
- ?line Fname = filename:join(PrivDir, "io_fread_newlines.txt"),
- ?line F0 = [[0,1,2,3,4,5,6,7,8,9]],
- ?line F1 = [[0,1,2,3,4,5,6,7,8],[9]],
- ?line F2 = [[0,1,2,3,4,5,6,7],[8,9]],
- ?line F3 = [[0,1,2,3,4,5,6],[7,8,9]],
- ?line F4 = [[0,1,2,3,4,5],[6,7,8,9]],
- ?line F5 = [[0,1,2,3,4],[5,6,7,8,9]],
- ?line F6 = [[0,1,2,3],[4,5,6,7],[8,9]],
- ?line F7 = [[0,1,2],[3,4,5],[6,7,8],[9]],
- ?line F8 = [[0,1],[2,3],[4,5],[6,7],[8,9]],
- ?line F9 = [[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]],
- ?line Newlines = ["\n", "\r\n", "\r"],
+ PrivDir = ?privdir(Config),
+ Fname = filename:join(PrivDir, "io_fread_newlines.txt"),
+ F0 = [[0,1,2,3,4,5,6,7,8,9]],
+ F1 = [[0,1,2,3,4,5,6,7,8],[9]],
+ F2 = [[0,1,2,3,4,5,6,7],[8,9]],
+ F3 = [[0,1,2,3,4,5,6],[7,8,9]],
+ F4 = [[0,1,2,3,4,5],[6,7,8,9]],
+ F5 = [[0,1,2,3,4],[5,6,7,8,9]],
+ F6 = [[0,1,2,3],[4,5,6,7],[8,9]],
+ F7 = [[0,1,2],[3,4,5],[6,7,8],[9]],
+ F8 = [[0,1],[2,3],[4,5],[6,7],[8,9]],
+ F9 = [[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]],
+ Newlines = ["\n", "\r\n", "\r"],
try
- ?line io_fread_newlines_1([F0,F1,F2,F3,F4,F5,F6,F7,F8,F9],
+ io_fread_newlines_1([F0,F1,F2,F3,F4,F5,F6,F7,F8,F9],
Fname, Newlines)
after
file:delete(Fname)
end.
io_fread_newlines_1(Fs, Fname, [Newline|Newlines]) ->
- ?line ok = io_fread_newlines_2(Fs, Fname, Newline),
- ?line io_fread_newlines_1(Fs, Fname, Newlines);
+ ok = io_fread_newlines_2(Fs, Fname, Newline),
+ io_fread_newlines_1(Fs, Fname, Newlines);
io_fread_newlines_1(_, _, []) -> ok.
io_fread_newlines_2([F|Fs], Fname, Newline) ->
- ?line N1 = write_newlines_file(Fname, F, Newline),
- ?line {F2,N2} = read_newlines_file(Fname),
- ?line io:format("~w ~p ~w~n~n", [N1,F,N2]),
- ?line F2 = lists:flatten(F),
+ N1 = write_newlines_file(Fname, F, Newline),
+ {F2,N2} = read_newlines_file(Fname),
+ io:format("~w ~p ~w~n~n", [N1,F,N2]),
+ F2 = lists:flatten(F),
%% Intermediate newlines are not counted
- ?line N2 = N1 - (length(F) - 1)*length(Newline),
- ?line io_fread_newlines_2(Fs, Fname, Newline);
+ N2 = N1 - (length(F) - 1)*length(Newline),
+ io_fread_newlines_2(Fs, Fname, Newline);
io_fread_newlines_2([], _, _) -> ok.
@@ -1939,111 +1620,108 @@ read_newlines(Fd, Acc, N0) ->
-otp_8989(doc) ->
- "OTP-8989 io:format for ~F.Ps ignores P in some cases";
+%% OTP-8989 io:format for ~F.Ps ignores P in some cases.
otp_8989(Suite) when is_list(Suite) ->
Hello = "Hello",
- ?line " Hello" = fmt("~6.6s", [Hello]),
- ?line " Hello" = fmt("~*.6s", [6,Hello]),
- ?line " Hello" = fmt("~6.*s", [6,Hello]),
- ?line " Hello" = fmt("~*.*s", [6,6,Hello]),
+ " Hello" = fmt("~6.6s", [Hello]),
+ " Hello" = fmt("~*.6s", [6,Hello]),
+ " Hello" = fmt("~6.*s", [6,Hello]),
+ " Hello" = fmt("~*.*s", [6,6,Hello]),
%%
- ?line " Hello" = fmt("~6.5s", [Hello]),
- ?line " Hello" = fmt("~*.5s", [6,Hello]),
- ?line " Hello" = fmt("~6.*s", [5,Hello]),
- ?line " Hello" = fmt("~*.*s", [6,5,Hello]),
+ " Hello" = fmt("~6.5s", [Hello]),
+ " Hello" = fmt("~*.5s", [6,Hello]),
+ " Hello" = fmt("~6.*s", [5,Hello]),
+ " Hello" = fmt("~*.*s", [6,5,Hello]),
%%
- ?line " Hell" = fmt("~6.4s", [Hello]),
- ?line " Hell" = fmt("~*.4s", [6,Hello]),
- ?line " Hell" = fmt("~6.*s", [4,Hello]),
- ?line " Hell" = fmt("~*.*s", [6,4,Hello]),
+ " Hell" = fmt("~6.4s", [Hello]),
+ " Hell" = fmt("~*.4s", [6,Hello]),
+ " Hell" = fmt("~6.*s", [4,Hello]),
+ " Hell" = fmt("~*.*s", [6,4,Hello]),
%%
- ?line "Hello" = fmt("~5.5s", [Hello]),
- ?line "Hello" = fmt("~*.5s", [5,Hello]),
- ?line "Hello" = fmt("~5.*s", [5,Hello]),
- ?line "Hello" = fmt("~*.*s", [5,5,Hello]),
+ "Hello" = fmt("~5.5s", [Hello]),
+ "Hello" = fmt("~*.5s", [5,Hello]),
+ "Hello" = fmt("~5.*s", [5,Hello]),
+ "Hello" = fmt("~*.*s", [5,5,Hello]),
%%
- ?line " Hell" = fmt("~5.4s", [Hello]),
- ?line " Hell" = fmt("~*.4s", [5,Hello]),
- ?line " Hell" = fmt("~5.*s", [4,Hello]),
- ?line " Hell" = fmt("~*.*s", [5,4,Hello]),
+ " Hell" = fmt("~5.4s", [Hello]),
+ " Hell" = fmt("~*.4s", [5,Hello]),
+ " Hell" = fmt("~5.*s", [4,Hello]),
+ " Hell" = fmt("~*.*s", [5,4,Hello]),
%%
- ?line "Hell" = fmt("~4.4s", [Hello]),
- ?line "Hell" = fmt("~*.4s", [4,Hello]),
- ?line "Hell" = fmt("~4.*s", [4,Hello]),
- ?line "Hell" = fmt("~*.*s", [4,4,Hello]),
+ "Hell" = fmt("~4.4s", [Hello]),
+ "Hell" = fmt("~*.4s", [4,Hello]),
+ "Hell" = fmt("~4.*s", [4,Hello]),
+ "Hell" = fmt("~*.*s", [4,4,Hello]),
%%
- ?line " Hel" = fmt("~4.3s", [Hello]),
- ?line " Hel" = fmt("~*.3s", [4,Hello]),
- ?line " Hel" = fmt("~4.*s", [3,Hello]),
- ?line " Hel" = fmt("~*.*s", [4,3,Hello]),
+ " Hel" = fmt("~4.3s", [Hello]),
+ " Hel" = fmt("~*.3s", [4,Hello]),
+ " Hel" = fmt("~4.*s", [3,Hello]),
+ " Hel" = fmt("~*.*s", [4,3,Hello]),
%%
%%
- ?line "Hello " = fmt("~-6.6s", [Hello]),
- ?line "Hello " = fmt("~*.6s", [-6,Hello]),
- ?line "Hello " = fmt("~-6.*s", [6,Hello]),
- ?line "Hello " = fmt("~*.*s", [-6,6,Hello]),
+ "Hello " = fmt("~-6.6s", [Hello]),
+ "Hello " = fmt("~*.6s", [-6,Hello]),
+ "Hello " = fmt("~-6.*s", [6,Hello]),
+ "Hello " = fmt("~*.*s", [-6,6,Hello]),
%%
- ?line "Hello " = fmt("~-6.5s", [Hello]),
- ?line "Hello " = fmt("~*.5s", [-6,Hello]),
- ?line "Hello " = fmt("~-6.*s", [5,Hello]),
- ?line "Hello " = fmt("~*.*s", [-6,5,Hello]),
+ "Hello " = fmt("~-6.5s", [Hello]),
+ "Hello " = fmt("~*.5s", [-6,Hello]),
+ "Hello " = fmt("~-6.*s", [5,Hello]),
+ "Hello " = fmt("~*.*s", [-6,5,Hello]),
%%
- ?line "Hell " = fmt("~-6.4s", [Hello]),
- ?line "Hell " = fmt("~*.4s", [-6,Hello]),
- ?line "Hell " = fmt("~-6.*s", [4,Hello]),
- ?line "Hell " = fmt("~*.*s", [-6,4,Hello]),
+ "Hell " = fmt("~-6.4s", [Hello]),
+ "Hell " = fmt("~*.4s", [-6,Hello]),
+ "Hell " = fmt("~-6.*s", [4,Hello]),
+ "Hell " = fmt("~*.*s", [-6,4,Hello]),
%%
- ?line "Hello" = fmt("~-5.5s", [Hello]),
- ?line "Hello" = fmt("~*.5s", [-5,Hello]),
- ?line "Hello" = fmt("~-5.*s", [5,Hello]),
- ?line "Hello" = fmt("~*.*s", [-5,5,Hello]),
+ "Hello" = fmt("~-5.5s", [Hello]),
+ "Hello" = fmt("~*.5s", [-5,Hello]),
+ "Hello" = fmt("~-5.*s", [5,Hello]),
+ "Hello" = fmt("~*.*s", [-5,5,Hello]),
%%
- ?line "Hell " = fmt("~-5.4s", [Hello]),
- ?line "Hell " = fmt("~*.4s", [-5,Hello]),
- ?line "Hell " = fmt("~-5.*s", [4,Hello]),
- ?line "Hell " = fmt("~*.*s", [-5,4,Hello]),
+ "Hell " = fmt("~-5.4s", [Hello]),
+ "Hell " = fmt("~*.4s", [-5,Hello]),
+ "Hell " = fmt("~-5.*s", [4,Hello]),
+ "Hell " = fmt("~*.*s", [-5,4,Hello]),
%%
- ?line "Hell" = fmt("~-4.4s", [Hello]),
- ?line "Hell" = fmt("~*.4s", [-4,Hello]),
- ?line "Hell" = fmt("~-4.*s", [4,Hello]),
- ?line "Hell" = fmt("~*.*s", [-4,4,Hello]),
+ "Hell" = fmt("~-4.4s", [Hello]),
+ "Hell" = fmt("~*.4s", [-4,Hello]),
+ "Hell" = fmt("~-4.*s", [4,Hello]),
+ "Hell" = fmt("~*.*s", [-4,4,Hello]),
%%
- ?line "Hel " = fmt("~-4.3s", [Hello]),
- ?line "Hel " = fmt("~*.3s", [-4,Hello]),
- ?line "Hel " = fmt("~-4.*s", [3,Hello]),
- ?line "Hel " = fmt("~*.*s", [-4,3,Hello]),
+ "Hel " = fmt("~-4.3s", [Hello]),
+ "Hel " = fmt("~*.3s", [-4,Hello]),
+ "Hel " = fmt("~-4.*s", [3,Hello]),
+ "Hel " = fmt("~*.*s", [-4,3,Hello]),
ok.
-io_lib_fread_literal(doc) ->
- "OTP-9439 io_lib:fread bug for literate at end";
+%% OTP-9439 io_lib:fread bug for literate at end.
io_lib_fread_literal(Suite) when is_list(Suite) ->
- ?line {more,"~d",0,""} = io_lib:fread("~d", ""),
- ?line {error,{fread,integer}} = io_lib:fread("~d", " "),
- ?line {more,"~d",1,""} = io_lib:fread(" ~d", " "),
- ?line {ok,[17],"X"} = io_lib:fread(" ~d", " 17X"),
+ {more,"~d",0,""} = io_lib:fread("~d", ""),
+ {error,{fread,integer}} = io_lib:fread("~d", " "),
+ {more,"~d",1,""} = io_lib:fread(" ~d", " "),
+ {ok,[17],"X"} = io_lib:fread(" ~d", " 17X"),
%%
- ?line {more,"d",0,""} = io_lib:fread("d", ""),
- ?line {error,{fread,input}} = io_lib:fread("d", " "),
- ?line {more,"d",1,""} = io_lib:fread(" d", " "),
- ?line {ok,[],"X"} = io_lib:fread(" d", " dX"),
+ {more,"d",0,""} = io_lib:fread("d", ""),
+ {error,{fread,input}} = io_lib:fread("d", " "),
+ {more,"d",1,""} = io_lib:fread(" d", " "),
+ {ok,[],"X"} = io_lib:fread(" d", " dX"),
%%
- ?line {done,eof,_} = io_lib:fread([], eof, "~d"),
- ?line {done,eof,_} = io_lib:fread([], eof, " ~d"),
- ?line {more,C1} = io_lib:fread([], " \n", " ~d"),
- ?line {done,{error,{fread,input}},_} = io_lib:fread(C1, eof, " ~d"),
- ?line {done,{ok,[18]},""} = io_lib:fread(C1, "18\n", " ~d"),
+ {done,eof,_} = io_lib:fread([], eof, "~d"),
+ {done,eof,_} = io_lib:fread([], eof, " ~d"),
+ {more,C1} = io_lib:fread([], " \n", " ~d"),
+ {done,{error,{fread,input}},_} = io_lib:fread(C1, eof, " ~d"),
+ {done,{ok,[18]},""} = io_lib:fread(C1, "18\n", " ~d"),
%%
- ?line {done,eof,_} = io_lib:fread([], eof, "d"),
- ?line {done,eof,_} = io_lib:fread([], eof, " d"),
- ?line {more,C2} = io_lib:fread([], " \n", " d"),
- ?line {done,{error,{fread,input}},_} = io_lib:fread(C2, eof, " d"),
- ?line {done,{ok,[]},[]} = io_lib:fread(C2, "d\n", " d"),
+ {done,eof,_} = io_lib:fread([], eof, "d"),
+ {done,eof,_} = io_lib:fread([], eof, " d"),
+ {more,C2} = io_lib:fread([], " \n", " d"),
+ {done,{error,{fread,input}},_} = io_lib:fread(C2, eof, " d"),
+ {done,{ok,[]},[]} = io_lib:fread(C2, "d\n", " d"),
ok.
-printable_range(doc) ->
- "Check that the printable range set by the user actually works";
+%% Check that the printable range set by the user actually works.
printable_range(Suite) when is_list(Suite) ->
Pa = filename:dirname(code:which(?MODULE)),
{ok, UNode} = test_server:start_node(printable_range_unicode, slave,
@@ -2127,13 +1805,14 @@ bad_printable_range(Config) when is_list(Config) ->
Cmd = lists:concat([lib:progname()," +pcunnnnnicode -run erlang halt"]),
P = open_port({spawn, Cmd}, [stderr_to_stdout, {line, 200}]),
ok = receive
- {P, {data, {eol , "bad range of printable characters" ++ _}}} ->
- ok;
- Other ->
- Other
- after 1000 ->
- timeout
- end,
+ {P, {data, {eol , "bad range of printable characters" ++ _}}} ->
+ ok;
+ Other ->
+ Other
+ %% valgrind needs a lot of time
+ after 6000 ->
+ timeout
+ end,
catch port_close(P),
flush_from_port(P),
ok.
@@ -2145,19 +1824,17 @@ flush_from_port(P) ->
ok
end.
-io_lib_print_binary_depth_one(doc) ->
- "Test binaries printed with a depth of one behave correctly";
+%% Test binaries printed with a depth of one behave correctly.
io_lib_print_binary_depth_one(Suite) when is_list(Suite) ->
- ?line "<<>>" = fmt("~W", [<<>>, 1]),
- ?line "<<>>" = fmt("~P", [<<>>, 1]),
- ?line "<<...>>" = fmt("~W", [<<1>>, 1]),
- ?line "<<...>>" = fmt("~P", [<<1>>, 1]),
- ?line "<<...>>" = fmt("~W", [<<1:7>>, 1]),
- ?line "<<...>>" = fmt("~P", [<<1:7>>, 1]),
+ "<<>>" = fmt("~W", [<<>>, 1]),
+ "<<>>" = fmt("~P", [<<>>, 1]),
+ "<<...>>" = fmt("~W", [<<1>>, 1]),
+ "<<...>>" = fmt("~P", [<<1>>, 1]),
+ "<<...>>" = fmt("~W", [<<1:7>>, 1]),
+ "<<...>>" = fmt("~P", [<<1:7>>, 1]),
ok.
-otp_10302(doc) ->
- "OTP-10302. Unicode";
+%% OTP-10302. Unicode.
otp_10302(Suite) when is_list(Suite) ->
Pa = filename:dirname(code:which(?MODULE)),
{ok, UNode} = test_server:start_node(printable_range_unicode, slave,
@@ -2213,15 +1890,13 @@ pretty(Term, Opts) when is_list(Opts) ->
is_latin1(S) ->
S >= 0 andalso S =< 255.
-otp_10836(doc) ->
- "OTP-10836. ~ts extended to latin1";
+%% OTP-10836. ~ts extended to latin1.
otp_10836(Suite) when is_list(Suite) ->
S = io_lib:format("~ts", [[<<"äpple"/utf8>>, <<"äpple">>]]),
"äppleäpple" = lists:flatten(S),
ok.
-otp_10755(doc) ->
- "OTP-10755. The 'l' modifier";
+%% OTP-10755. The 'l' modifier
otp_10755(Suite) when is_list(Suite) ->
S = "string",
"\"string\"" = fmt("~p", [S]),
@@ -2300,7 +1975,7 @@ do_io_with_huge_message_queue(Config) ->
ok;
Q ->
io:format("Q = ~p", [Q]),
- ?t:fail()
+ ct:fail(failed)
end,
ok.
@@ -2373,7 +2048,7 @@ re_fmt(Pattern, Format, Args) ->
nomatch ->
io:format("Pattern: ~s", [Pattern]),
io:format("Result: ~s", [S]),
- ?t:fail();
+ ct:fail(failed);
match ->
ok
end.
diff --git a/lib/stdlib/test/io_proto_SUITE.erl b/lib/stdlib/test/io_proto_SUITE.erl
index 811c7ed7bb..1e286a9306 100644
--- a/lib/stdlib/test/io_proto_SUITE.erl
+++ b/lib/stdlib/test/io_proto_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -39,7 +39,7 @@
-export([uprompt/1]).
-%-define(without_test_server, true).
+%%-define(without_test_server, true).
-ifdef(without_test_server).
-define(line, put(line, ?LINE), ).
@@ -47,8 +47,8 @@
-define(t, test_server).
-define(privdir(_), "./io_SUITE_priv").
-else.
--include_lib("test_server/include/test_server.hrl").
--define(privdir(Conf), ?config(priv_dir, Conf)).
+-include_lib("common_test/include/ct.hrl").
+-define(privdir(Conf), proplists:get_value(priv_dir, Conf)).
-endif.
%%-define(debug, true).
@@ -57,30 +57,25 @@
-define(format(S, A), io:format(S, A)).
-define(dbg(Data),io:format(standard_error, "DBG: ~p\r\n",[Data])).
-define(RM_RF(Dir),begin io:format(standard_error, "Not Removed: ~p\r\n",[Dir]),
- ok end).
+ ok end).
-else.
-define(format(S, A), ok).
-define(dbg(Data),noop).
-define(RM_RF(Dir),rm_rf(Dir)).
-endif.
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(20)).
-
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
Term = os:getenv("TERM", "dumb"),
os:putenv("TERM","vt100"),
- [{watchdog, Dog}, {term, Term} | Config].
+ [{term, Term} | Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- Term = ?config(term,Config),
+ Term = proplists:get_value(term,Config),
os:putenv("TERM",Term),
- test_server:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[setopts_getopts, unicode_options, unicode_options_gen,
@@ -110,184 +105,175 @@ end_per_group(_GroupName, Config) ->
q = [],
nxt = eof,
mode = list
- }).
+ }).
uprompt(_L) ->
[1050,1072,1082,1074,1086,32,1077,32,85,110,105,99,111,100,101,32,63].
-unicode_prompt(suite) ->
- [];
-unicode_prompt(doc) ->
- ["Test that an Unicode prompt does not crash the shell"];
+%% Test that an Unicode prompt does not crash the shell.
unicode_prompt(Config) when is_list(Config) ->
- ?line PA = filename:dirname(code:which(?MODULE)),
+ PA = filename:dirname(code:which(?MODULE)),
case proplists:get_value(default_shell,Config) of
old ->
ok;
new ->
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline, "shell:prompt_func({io_proto_SUITE,uprompt})."},
- {getline, "default"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline, "\"hej\\n\""},
- {putline, "io:setopts([{binary,true}])."},
- {getline, "ok"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline, "<<\"hej\\n\">>"}
- ],[],[],"-pa \""++ PA++"\"")
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline, "shell:prompt_func({io_proto_SUITE,uprompt})."},
+ {getline, "default"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline, "\"hej\\n\""},
+ {putline, "io:setopts([{binary,true}])."},
+ {getline, "ok"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline, "<<\"hej\\n\">>"}
+ ],[],[],"-pa \""++ PA++"\"")
end,
%% And one with oldshell
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline_re, ".*2$"},
- {putline, "shell:prompt_func({io_proto_SUITE,uprompt})."},
- {getline_re, ".*default"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline_re, ".*\"hej\\\\n\""},
- {putline, "io:setopts([{binary,true}])."},
- {getline_re, ".*ok"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline_re, ".*<<\"hej\\\\n\">>"}
- ],[],[],"-oldshell -pa \""++PA++"\""),
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline_re, ".*2$"},
+ {putline, "shell:prompt_func({io_proto_SUITE,uprompt})."},
+ {getline_re, ".*default"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline_re, ".*\"hej\\\\n\""},
+ {putline, "io:setopts([{binary,true}])."},
+ {getline_re, ".*ok"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline_re, ".*<<\"hej\\\\n\">>"}
+ ],[],[],"-oldshell -pa \""++PA++"\""),
ok.
-
-setopts_getopts(suite) ->
- [];
-setopts_getopts(doc) ->
- ["Check io:setopts and io:getopts functions"];
+
+%% Check io:setopts and io:getopts functions.
setopts_getopts(Config) when is_list(Config) ->
- ?line FileName = filename:join([?config(priv_dir,Config),
- "io_proto_SUITE_setopts_getopts.dat"]),
- ?line {ok,WFile} = file:open(FileName,[write]),
- ?line Server = start_io_server_proxy(),
- ?line [{binary, false}] = io:getopts(Server),
- ?line [getopts] = proxy_getall(Server),
- ?line [{binary,false},{encoding,latin1}] = lists:sort(io:getopts(WFile)),
- ?line proxy_setnext(Server,"Hej"),
- ?line "Hej" = io:get_line(Server,''),
- ?line proxy_setnext(Server,"Hej"++[532]),
- ?line [$H,$e,$j,532] = io:get_line(Server,''),
- ?line ok = io:setopts(Server,[{binary,true}]),
- ?line proxy_setnext(Server,"Hej"),
- ?line <<"Hej">> = io:get_line(Server,''),
- ?line proxy_setnext(Server,"Hej"++[532]),
- ?line <<72,101,106,200,148>> = io:get_line(Server,''),
- ?line [$H,$e,$j,532] = lists:flatten(io_lib:format("~ts",[<<72,101,106,200,148>>])),
- ?line file:write(WFile,<<"HejA">>),
- ?line file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,unicode)),
- ?line file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,{utf16,big})),
- ?line file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,{utf16,little})),
- ?line file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,{utf32,big})),
- ?line file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,{utf32,little})),
- ?line file:close(WFile),
- ?line {ok,RFile} = file:open(FileName,[read]),
- ?line [{binary,false},{encoding,latin1}] = lists:sort(io:getopts(RFile)),
- ?line [$H,$e,$j,$A] = io:get_chars(RFile,'',4),
- ?line io:setopts(RFile,[{encoding,unicode}]),
- ?line [$H,$e,$j,532] = io:get_chars(RFile,'',4),
- ?line [{binary,false},{encoding,unicode}] = lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,{utf16,big}}]),
- ?line [$H,$e,$j,532] = io:get_chars(RFile,'',4),
- ?line [{binary,false},{encoding,{utf16,big}}] =
+ FileName = filename:join([proplists:get_value(priv_dir,Config),
+ "io_proto_SUITE_setopts_getopts.dat"]),
+ {ok,WFile} = file:open(FileName,[write]),
+ Server = start_io_server_proxy(),
+ [{binary, false}] = io:getopts(Server),
+ [getopts] = proxy_getall(Server),
+ [{binary,false},{encoding,latin1}] = lists:sort(io:getopts(WFile)),
+ proxy_setnext(Server,"Hej"),
+ "Hej" = io:get_line(Server,''),
+ proxy_setnext(Server,"Hej"++[532]),
+ [$H,$e,$j,532] = io:get_line(Server,''),
+ ok = io:setopts(Server,[{binary,true}]),
+ proxy_setnext(Server,"Hej"),
+ <<"Hej">> = io:get_line(Server,''),
+ proxy_setnext(Server,"Hej"++[532]),
+ <<72,101,106,200,148>> = io:get_line(Server,''),
+ [$H,$e,$j,532] = lists:flatten(io_lib:format("~ts",[<<72,101,106,200,148>>])),
+ file:write(WFile,<<"HejA">>),
+ file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,unicode)),
+ file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,{utf16,big})),
+ file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,{utf16,little})),
+ file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,{utf32,big})),
+ file:write(WFile,unicode:characters_to_binary("Hej"++[532],unicode,{utf32,little})),
+ file:close(WFile),
+ {ok,RFile} = file:open(FileName,[read]),
+ [{binary,false},{encoding,latin1}] = lists:sort(io:getopts(RFile)),
+ [$H,$e,$j,$A] = io:get_chars(RFile,'',4),
+ io:setopts(RFile,[{encoding,unicode}]),
+ [$H,$e,$j,532] = io:get_chars(RFile,'',4),
+ [{binary,false},{encoding,unicode}] = lists:sort(io:getopts(RFile)),
+ io:setopts(RFile,[{encoding,{utf16,big}}]),
+ [$H,$e,$j,532] = io:get_chars(RFile,'',4),
+ [{binary,false},{encoding,{utf16,big}}] =
lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,{utf16,little}}]),
- ?line [$H,$e,$j,532] = io:get_chars(RFile,'',4),
- ?line [{binary,false},{encoding,{utf16,little}}] =
+ io:setopts(RFile,[{encoding,{utf16,little}}]),
+ [$H,$e,$j,532] = io:get_chars(RFile,'',4),
+ [{binary,false},{encoding,{utf16,little}}] =
lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,{utf32,big}}]),
- ?line [$H,$e,$j,532] = io:get_chars(RFile,'',4),
- ?line [{binary,false},{encoding,{utf32,big}}] =
+ io:setopts(RFile,[{encoding,{utf32,big}}]),
+ [$H,$e,$j,532] = io:get_chars(RFile,'',4),
+ [{binary,false},{encoding,{utf32,big}}] =
lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,{utf32,little}}]),
- ?line [$H,$e,$j,532] = io:get_chars(RFile,'',4),
- ?line [{binary,false},{encoding,{utf32,little}}] =
+ io:setopts(RFile,[{encoding,{utf32,little}}]),
+ [$H,$e,$j,532] = io:get_chars(RFile,'',4),
+ [{binary,false},{encoding,{utf32,little}}] =
lists:sort(io:getopts(RFile)),
- ?line eof = io:get_line(RFile,''),
- ?line file:position(RFile,0),
- ?line io:setopts(RFile,[{binary,true},{encoding,latin1}]),
- ?line <<$H,$e,$j,$A>> = io:get_chars(RFile,'',4),
- ?line [{binary,true},{encoding,latin1}] = lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,unicode}]),
- ?line <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
- ?line [{binary,true},{encoding,unicode}] = lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,{utf16,big}}]),
- ?line <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
- ?line [{binary,true},{encoding,{utf16,big}}] =
+ eof = io:get_line(RFile,''),
+ file:position(RFile,0),
+ io:setopts(RFile,[{binary,true},{encoding,latin1}]),
+ <<$H,$e,$j,$A>> = io:get_chars(RFile,'',4),
+ [{binary,true},{encoding,latin1}] = lists:sort(io:getopts(RFile)),
+ io:setopts(RFile,[{encoding,unicode}]),
+ <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
+ [{binary,true},{encoding,unicode}] = lists:sort(io:getopts(RFile)),
+ io:setopts(RFile,[{encoding,{utf16,big}}]),
+ <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
+ [{binary,true},{encoding,{utf16,big}}] =
lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,{utf16,little}}]),
- ?line <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
- ?line [{binary,true},{encoding,{utf16,little}}] =
+ io:setopts(RFile,[{encoding,{utf16,little}}]),
+ <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
+ [{binary,true},{encoding,{utf16,little}}] =
lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,{utf32,big}}]),
- ?line <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
- ?line [{binary,true},{encoding,{utf32,big}}] =
+ io:setopts(RFile,[{encoding,{utf32,big}}]),
+ <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
+ [{binary,true},{encoding,{utf32,big}}] =
lists:sort(io:getopts(RFile)),
- ?line io:setopts(RFile,[{encoding,{utf32,little}}]),
- ?line <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
- ?line [{binary,true},{encoding,{utf32,little}}] =
+ io:setopts(RFile,[{encoding,{utf32,little}}]),
+ <<$H,$e,$j,532/utf8>> = io:get_chars(RFile,'',4),
+ [{binary,true},{encoding,{utf32,little}}] =
lists:sort(io:getopts(RFile)),
- ?line eof = io:get_line(RFile,''),
- ?line file:close(RFile),
+ eof = io:get_line(RFile,''),
+ file:close(RFile),
case proplists:get_value(default_shell,Config) of
old ->
ok;
new ->
%% So, lets test another node with new interactive shell
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline, "lists:keyfind(binary,1,io:getopts())."},
- {getline, "{binary,false}"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline, "\"hej\\n\""},
- {putline, "io:setopts([{binary,true}])."},
- {getline, "ok"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline, "<<\"hej\\n\">>"}
- ],[])
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline, "lists:keyfind(binary,1,io:getopts())."},
+ {getline, "{binary,false}"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline, "\"hej\\n\""},
+ {putline, "io:setopts([{binary,true}])."},
+ {getline, "ok"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline, "<<\"hej\\n\">>"}
+ ],[])
end,
%% And one with oldshell
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline_re, ".*2$"},
- {putline, "lists:keyfind(binary,1,io:getopts())."},
- {getline_re, ".*{binary,false}"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline_re, ".*\"hej\\\\n\""},
- {putline, "io:setopts([{binary,true}])."},
- {getline_re, ".*ok"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline_re, ".*<<\"hej\\\\n\">>"}
- ],[],[],"-oldshell"),
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline_re, ".*2$"},
+ {putline, "lists:keyfind(binary,1,io:getopts())."},
+ {getline_re, ".*{binary,false}"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline_re, ".*\"hej\\\\n\""},
+ {putline, "io:setopts([{binary,true}])."},
+ {getline_re, ".*ok"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline_re, ".*<<\"hej\\\\n\">>"}
+ ],[],[],"-oldshell"),
ok.
get_lc_ctype() ->
- case {os:type(),os:version()} of
- {{unix,sunos},{5,N,_}} when N =< 8 ->
- "iso_8859_1";
- _ ->
- "ISO-8859-1"
- end.
-
-unicode_options(suite) ->
- [];
-unicode_options(doc) ->
- ["Tests various unicode options"];
+ case {os:type(),os:version()} of
+ {{unix,sunos},{5,N,_}} when N =< 8 ->
+ "iso_8859_1";
+ _ ->
+ "ISO-8859-1"
+ end.
+
+%% Test various unicode options.
unicode_options(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
- PrivDir = ?config(priv_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
%% A string in both russian and greek characters, which is present
%% in all the internal test files (but in different formats of course)...
TestData = [1090,1093,1077,32,1073,1080,1075,32,
@@ -322,13 +308,10 @@ unicode_options(Config) when is_list(Config) ->
"external_utf16_little_bom.dat",
"external_utf16_big_bom.dat"],
ReadBomFile = fun(File,Dir) ->
- %io:format(standard_error,"~s\r\n",[filename:join([Dir,File])]),
{ok,F} = file:open(filename:join([Dir,File]),
[read,binary]),
{ok,Bin} = file:read(F,4),
{Type,Bytes} = unicode:bom_to_encoding(Bin),
- %io:format(standard_error,"~p\r\n",[{Type,Bytes}]),
-
file:position(F,Bytes),
io:setopts(F,[{encoding,Type}]),
R = unicode:characters_to_list(
@@ -346,26 +329,26 @@ unicode_options(Config) when is_list(Config) ->
R
end,
ReadBomlessFileList = fun({Type,File},DataLen,Dir) ->
- {ok,F} = file:open(filename:join([Dir,File]),
- [read,
- {encoding,Type}]),
- R = io:get_chars(F,'',DataLen),
- file:close(F),
- R
- end,
+ {ok,F} = file:open(filename:join([Dir,File]),
+ [read,
+ {encoding,Type}]),
+ R = io:get_chars(F,'',DataLen),
+ file:close(F),
+ R
+ end,
ReadBomlessFileListLine = fun({Type,File},Dir) ->
- {ok,F} = file:open(filename:join([Dir,File]),
- [read,
- {encoding,Type}]),
- R = io:get_line(F,''),
- file:close(F),
- R
- end,
- ?line [TestData = ReadBomFile(F,DataDir) || F <- InternalBomFiles ],
- ?line [ExternalTestData = ReadBomFile(F,DataDir) || F <- ExternalBomFiles ],
- ?line [TestData = ReadBomlessFile(F,length(TestData),DataDir) || F <- AllNoBom ],
- ?line [TestData = ReadBomlessFileList(F,length(TestData),DataDir) || F <- AllNoBom ],
- ?line [TestData = ReadBomlessFileListLine(F,DataDir) || F <- AllNoBom ],
+ {ok,F} = file:open(filename:join([Dir,File]),
+ [read,
+ {encoding,Type}]),
+ R = io:get_line(F,''),
+ file:close(F),
+ R
+ end,
+ [TestData = ReadBomFile(F,DataDir) || F <- InternalBomFiles ],
+ [ExternalTestData = ReadBomFile(F,DataDir) || F <- ExternalBomFiles ],
+ [TestData = ReadBomlessFile(F,length(TestData),DataDir) || F <- AllNoBom ],
+ [TestData = ReadBomlessFileList(F,length(TestData),DataDir) || F <- AllNoBom ],
+ [TestData = ReadBomlessFileListLine(F,DataDir) || F <- AllNoBom ],
BomDir = filename:join([PrivDir,"BOMDATA"]),
BomlessDir = filename:join([PrivDir,"BOMLESSDATA"]),
@@ -381,8 +364,8 @@ unicode_options(Config) when is_list(Config) ->
file:close(F),
ok
end,
- ?line [ ok = WriteBomFile(F,BomDir) || F <- AllNoBom ],
- ?line [TestData = ReadBomFile(F,BomDir) || {_,F} <- AllNoBom ],
+ [ ok = WriteBomFile(F,BomDir) || F <- AllNoBom ],
+ [TestData = ReadBomFile(F,BomDir) || {_,F} <- AllNoBom ],
WriteBomlessFile = fun({Enc,File},TData,Dir) ->
{ok,F} = file:open(
filename:join([Dir,File]),
@@ -391,13 +374,13 @@ unicode_options(Config) when is_list(Config) ->
file:close(F),
ok
end,
- ?line [ ok = WriteBomlessFile(F,TestData,BomlessDir) || F <- AllNoBom ],
- ?line [TestData = ReadBomlessFile(F,length(TestData),BomlessDir) || F <- AllNoBom ],
- ?line [TestData = ReadBomlessFileList(F,length(TestData),BomlessDir) || F <- AllNoBom ],
- ?line [TestData = ReadBomlessFileListLine(F,BomlessDir) || F <- AllNoBom ],
-
+ [ ok = WriteBomlessFile(F,TestData,BomlessDir) || F <- AllNoBom ],
+ [TestData = ReadBomlessFile(F,length(TestData),BomlessDir) || F <- AllNoBom ],
+ [TestData = ReadBomlessFileList(F,length(TestData),BomlessDir) || F <- AllNoBom ],
+ [TestData = ReadBomlessFileListLine(F,BomlessDir) || F <- AllNoBom ],
+
CannotReadFile = fun({Enc,File},Dir) ->
- %io:format(standard_error,"~s\r\n",[filename:join([Dir,File])]),
+ %%io:format(standard_error,"~s\r\n",[filename:join([Dir,File])]),
{ok,F} = file:open(
filename:join([Dir,File]),
[read,binary,{encoding,Enc}]),
@@ -414,14 +397,14 @@ unicode_options(Config) when is_list(Config) ->
{error,terminated} = io:get_chars(F,'',10),
ok
end,
- ?line [ ok = CannotReadFile(F,DataDir) || F <- AllNoBom ],
- ?line [ ok = CannotReadFile(F,BomlessDir) || F <- AllNoBom ],
- ?line [ ok = CannotReadFile(F,BomDir) || F <- AllNoBom ],
+ [ ok = CannotReadFile(F,DataDir) || F <- AllNoBom ],
+ [ ok = CannotReadFile(F,BomlessDir) || F <- AllNoBom ],
+ [ ok = CannotReadFile(F,BomDir) || F <- AllNoBom ],
- ?line [ ok = WriteBomlessFile(F,TestData2,BomlessDir) || F <- AllNoBom ],
- ?line [TestData2 = ReadBomlessFile(F,length(TestData2),BomlessDir) || F <- AllNoBom ],
- ?line [TestData2 = ReadBomlessFileList(F,length(TestData2),BomlessDir) || F <- AllNoBom ],
- ?line [TestData2 = ReadBomlessFileListLine(F,BomlessDir) || F <- AllNoBom ],
+ [ ok = WriteBomlessFile(F,TestData2,BomlessDir) || F <- AllNoBom ],
+ [TestData2 = ReadBomlessFile(F,length(TestData2),BomlessDir) || F <- AllNoBom ],
+ [TestData2 = ReadBomlessFileList(F,length(TestData2),BomlessDir) || F <- AllNoBom ],
+ [TestData2 = ReadBomlessFileListLine(F,BomlessDir) || F <- AllNoBom ],
FailDir = filename:join([PrivDir,"FAIL"]),
@@ -431,56 +414,57 @@ unicode_options(Config) when is_list(Config) ->
{ok,F} = file:open(
filename:join([Dir,File]),
[write,binary]),
- ?line {'EXIT', {no_translation,_}} =
+ {'EXIT', {no_translation,_}} =
(catch io:put_chars(F,TestData)),
- ?line {'EXIT', {terminated,_}} = (catch io:put_chars(F,TestData)),
+ {'EXIT', {terminated,_}} = (catch io:put_chars(F,TestData)),
ok
end,
- ?line [ ok = CannotWriteFile(F,FailDir) || F <- AllNoBom ],
+ [ ok = CannotWriteFile(F,FailDir) || F <- AllNoBom ],
case proplists:get_value(default_shell,Config) of
old ->
ok;
new ->
%% OK, time for the group_leaders...
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline, "lists:keyfind(encoding,1,io:getopts())."},
- {getline, "{encoding,latin1}"},
- {putline, "io:format(\"~ts~n\",[[1024]])."},
- {getline, "\\x{400}"},
- {putline, "io:setopts([unicode])."},
- {getline, "ok"},
- {putline, "io:format(\"~ts~n\",[[1024]])."},
- {getline,
- binary_to_list(unicode:characters_to_binary(
- [1024],unicode,utf8))}
- ],[],"LC_CTYPE=\""++get_lc_ctype()++"\"; "
- "export LC_CTYPE; ")
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline, "lists:keyfind(encoding,1,io:getopts())."},
+ {getline, "{encoding,latin1}"},
+ {putline, "io:format(\"~ts~n\",[[1024]])."},
+ {getline, "\\x{400}"},
+ {putline, "io:setopts([unicode])."},
+ {getline, "ok"},
+ {putline, "io:format(\"~ts~n\",[[1024]])."},
+ {getline,
+ binary_to_list(unicode:characters_to_binary(
+ [1024],unicode,utf8))}
+ ],[],"LC_CTYPE=\""++get_lc_ctype()++"\"; "
+ "export LC_CTYPE; ")
end,
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline_re, ".*2$"},
- {putline, "lists:keyfind(encoding,1,io:getopts())."},
- {getline_re, ".*{encoding,latin1}"},
- {putline, "io:format(\"~ts~n\",[[1024]])."},
- {getline_re, ".*\\\\x{400\\}"},
- {putline, "io:setopts([{encoding,unicode}])."},
- {getline_re, ".*ok"},
- {putline, "io:format(\"~ts~n\",[[1024]])."},
- {getline_re,
- ".*"++binary_to_list(unicode:characters_to_binary(
- [1024],unicode,utf8))}
- ],[],"LC_CTYPE=\""++get_lc_ctype()++"\"; export LC_CTYPE; ",
- " -oldshell "),
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline_re, ".*2$"},
+ {putline, "lists:keyfind(encoding,1,io:getopts())."},
+ {getline_re, ".*{encoding,latin1}"},
+ {putline, "io:format(\"~ts~n\",[[1024]])."},
+ {getline_re, ".*\\\\x{400\\}"},
+ {putline, "io:setopts([{encoding,unicode}])."},
+ {getline_re, ".*ok"},
+ {putline, "io:format(\"~ts~n\",[[1024]])."},
+ {getline_re,
+ ".*"++binary_to_list(unicode:characters_to_binary(
+ [1024],unicode,utf8))}
+ ],[],"LC_CTYPE=\""++get_lc_ctype()++"\"; export LC_CTYPE; ",
+ " -oldshell "),
ok.
-
+
%% Tests various unicode options on random generated files.
unicode_options_gen(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a alot of time
random:seed(1240, 900586, 553728),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
AllModes = [utf8,utf16,{utf16,big},{utf16,little},
utf32,{utf32,big},{utf32,little}],
FSize = 9*1024,
@@ -621,7 +605,7 @@ do_read_whole_file(Fname, Options, Fun) ->
Res = do_read_whole_file_1(Fun, F),
ok = file:close(F),
unicode:characters_to_list(Res, unicode).
-
+
do_read_whole_file_1(Fun, F) ->
case Fun(F) of
eof ->
@@ -646,7 +630,7 @@ do_write_read_file(Fname, Options, Encoding, Writer) ->
{ok,Bin} = file:read_file(Fname),
ok = file:delete(Fname),
Bin.
-
+
enc2str(Atom) when is_atom(Atom) ->
atom_to_list(Atom);
enc2str({A1,A2}) when is_atom(A1), is_atom(A2) ->
@@ -656,14 +640,14 @@ enc2str({A1,A2}) when is_atom(A1), is_atom(A2) ->
random_unicode(0) ->
[];
random_unicode(N) ->
- % Favour large unicode and make linebreaks
+ %% Favour large unicode and make linebreaks
X = case random:uniform(20) of
- A when A =< 1 -> $\n;
- A0 when A0 =< 3 -> random:uniform(16#10FFFF);
- A1 when A1 =< 6 -> random:uniform(16#10FFFF - 16#7F) + 16#7F;
- A2 when A2 =< 12 -> random:uniform(16#10FFFF - 16#7FF) + 16#7FF;
- _ -> random:uniform(16#10FFFF - 16#FFFF) + 16#FFFF
- end,
+ A when A =< 1 -> $\n;
+ A0 when A0 =< 3 -> random:uniform(16#10FFFF);
+ A1 when A1 =< 6 -> random:uniform(16#10FFFF - 16#7F) + 16#7F;
+ A2 when A2 =< 12 -> random:uniform(16#10FFFF - 16#7FF) + 16#7FF;
+ _ -> random:uniform(16#10FFFF - 16#FFFF) + 16#FFFF
+ end,
case X of
Inv1 when Inv1 >= 16#D800, Inv1 =< 16#DFFF;
Inv1 =:= 16#FFFE;
@@ -672,15 +656,12 @@ random_unicode(N) ->
_ ->
[X | random_unicode(N-1)]
end.
-
-binary_options(suite) ->
- [];
-binary_options(doc) ->
- ["Tests variants with binary option"];
+
+%% Test variants with binary option.
binary_options(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
- PrivDir = ?config(priv_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
TestData = unicode:characters_to_binary(
[1090,1093,1077,32,1073,1080,1075,32,
1088,1077,1076,32,1092,1086,1100,32,1093,
@@ -691,84 +672,79 @@ binary_options(Config) when is_list(Config) ->
First10List = binary_to_list(First10),
Second10List = binary_to_list(Second10),
TestFile = filename:join([DataDir, "testdata_utf8.dat"]),
- ?line {ok, F} = file:open(TestFile,[read]),
- ?line {ok, First10List} = file:read(F,10),
- ?line io:setopts(F,[binary]),
- ?line {ok, Second10} = file:read(F,10),
- ?line file:close(F),
- ?line {ok, F2} = file:open(TestFile,[read,binary]),
- ?line {ok, First10} = file:read(F2,10),
- ?line io:setopts(F2,[list]),
- ?line {ok, Second10List} = file:read(F2,10),
- ?line file:position(F2,0),
- %dbg:tracer(),dbg:p(F2,call),dbg:tpl(file_io_server,x),
- ?line First10List = io:get_chars(F2,'',10),
- ?line io:setopts(F2,[binary]),
- ?line Second10 = unicode:characters_to_binary(io:get_chars(F2,'',10),unicode,latin1),
- ?line file:close(F2),
- ?line LineBreakFileName = filename:join([PrivDir, "testdata.dat"]),
- ?line LineBreakTestData = <<TestData/binary,$\n>>,
- ?line LineBreakTestDataList = binary_to_list(LineBreakTestData),
- ?line file:write_file(LineBreakFileName,[LineBreakTestData,LineBreakTestData,LineBreakTestData,TestData]),
- ?line {ok, F3} = file:open(LineBreakFileName,[read]),
- ?line LineBreakTestDataList = io:get_line(F3,''),
- ?line io:setopts(F3,[binary]),
- ?line LineBreakTestData = unicode:characters_to_binary(io:get_line(F3,''),unicode,latin1),
- ?line io:setopts(F3,[list]),
- ?line LineBreakTestDataList = io:get_line(F3,''),
- ?line io:setopts(F3,[binary]),
- %ok = io:format(standard_error,"TestData = ~w~n",[TestData]),
- ?line TestData = unicode:characters_to_binary(io:get_line(F3,''),unicode,latin1),
- ?line eof = io:get_line(F3,''),
- ?line file:close(F3),
+ {ok, F} = file:open(TestFile,[read]),
+ {ok, First10List} = file:read(F,10),
+ io:setopts(F,[binary]),
+ {ok, Second10} = file:read(F,10),
+ file:close(F),
+ {ok, F2} = file:open(TestFile,[read,binary]),
+ {ok, First10} = file:read(F2,10),
+ io:setopts(F2,[list]),
+ {ok, Second10List} = file:read(F2,10),
+ file:position(F2,0),
+ First10List = io:get_chars(F2,'',10),
+ io:setopts(F2,[binary]),
+ Second10 = unicode:characters_to_binary(io:get_chars(F2,'',10),unicode,latin1),
+ file:close(F2),
+ LineBreakFileName = filename:join([PrivDir, "testdata.dat"]),
+ LineBreakTestData = <<TestData/binary,$\n>>,
+ LineBreakTestDataList = binary_to_list(LineBreakTestData),
+ file:write_file(LineBreakFileName,[LineBreakTestData,LineBreakTestData,LineBreakTestData,TestData]),
+ {ok, F3} = file:open(LineBreakFileName,[read]),
+ LineBreakTestDataList = io:get_line(F3,''),
+ io:setopts(F3,[binary]),
+ LineBreakTestData = unicode:characters_to_binary(io:get_line(F3,''),unicode,latin1),
+ io:setopts(F3,[list]),
+ LineBreakTestDataList = io:get_line(F3,''),
+ io:setopts(F3,[binary]),
+ TestData = unicode:characters_to_binary(io:get_line(F3,''),unicode,latin1),
+ eof = io:get_line(F3,''),
+ file:close(F3),
+
%% OK, time for the group_leaders...
- %% io:format(standard_error,"Hmmm:~w~n",["<<\""++binary_to_list(<<"\345\344\366"/utf8>>)++"\\n\">>"]),
case proplists:get_value(default_shell,Config) of
old ->
ok;
new ->
- ?line rtnode([{putline, "2."},
- {getline, "2"},
- {putline, "lists:keyfind(binary,1,io:getopts())."},
- {getline, "{binary,false}"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline, "\"hej\\n\""},
- {putline, "io:setopts([{binary,true},unicode])."},
- {getline, "ok"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline, "<<\"hej\\n\">>"},
- {putline, "io:get_line('')."},
- {putline, binary_to_list(<<"\345\344\366"/utf8>>)},
- {getline, "<<\""++binary_to_list(<<"\345\344\366"/utf8>>)++"\\n\"/utf8>>"}
- ],[])
+ rtnode([{putline, "2."},
+ {getline, "2"},
+ {putline, "lists:keyfind(binary,1,io:getopts())."},
+ {getline, "{binary,false}"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline, "\"hej\\n\""},
+ {putline, "io:setopts([{binary,true},unicode])."},
+ {getline, "ok"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline, "<<\"hej\\n\">>"},
+ {putline, "io:get_line('')."},
+ {putline, binary_to_list(<<"\345\344\366"/utf8>>)},
+ {getline, "<<\""++binary_to_list(<<"\345\344\366"/utf8>>)++"\\n\"/utf8>>"}
+ ],[])
end,
- %% And one with oldshell
- ?line rtnode([{putline, "2."},
- {getline_re, ".*2$"},
- {putline, "lists:keyfind(binary,1,io:getopts())."},
- {getline_re, ".*{binary,false}"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline_re, ".*\"hej\\\\n\""},
- {putline, "io:setopts([{binary,true},unicode])."},
- {getline_re, ".*ok"},
- {putline, "io:get_line('')."},
- {putline, "hej"},
- {getline_re, ".*<<\"hej\\\\n\">>"},
- {putline, "io:get_line('')."},
- {putline, binary_to_list(<<"\345\344\366"/utf8>>)},
- {getline_re, ".*<<\""++binary_to_list(<<"\345\344\366"/utf8>>)++"\\\\n\"/utf8>>"}
- ],[],[],"-oldshell"),
+ %% And one with oldshell
+ rtnode([{putline, "2."},
+ {getline_re, ".*2$"},
+ {putline, "lists:keyfind(binary,1,io:getopts())."},
+ {getline_re, ".*{binary,false}"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline_re, ".*\"hej\\\\n\""},
+ {putline, "io:setopts([{binary,true},unicode])."},
+ {getline_re, ".*ok"},
+ {putline, "io:get_line('')."},
+ {putline, "hej"},
+ {getline_re, ".*<<\"hej\\\\n\">>"},
+ {putline, "io:get_line('')."},
+ {putline, binary_to_list(<<"\345\344\366"/utf8>>)},
+ {getline_re, ".*<<\""++binary_to_list(<<"\345\344\366"/utf8>>)++"\\\\n\"/utf8>>"}
+ ],[],[],"-oldshell"),
ok.
-bc_with_r12(suite) ->
- [];
-bc_with_r12(doc) ->
- ["Test io protocol compatibility with R12 nodes"];
+%% Test io protocol compatibility with R12 nodes.
bc_with_r12(Config) when is_list(Config) ->
- case ?t:is_release_available("r12b") of
+ case test_server:is_release_available("r12b") of
true -> bc_with_r12_1(Config);
false -> {skip,"No R12B found"}
end.
@@ -776,135 +752,134 @@ bc_with_r12(Config) when is_list(Config) ->
bc_with_r12_1(Config) ->
PA = filename:dirname(code:which(?MODULE)),
Name1 = io_proto_r12_1,
- ?line N1 = list_to_atom(atom_to_list(Name1) ++ "@" ++ hostname()),
- ?line ?t:start_node(Name1, peer, [{args, "-pz \""++PA++"\""},{erl,[{release,"r12b"}]}]),
- DataDir = ?config(data_dir,Config),
- %PrivDir = ?config(priv_dir,Config),
+ N1 = list_to_atom(atom_to_list(Name1) ++ "@" ++ hostname()),
+ test_server:start_node(Name1, peer, [{args, "-pz \""++PA++"\""},
+ {erl,[{release,"r12b"}]}]),
+ DataDir = proplists:get_value(data_dir,Config),
FileName1 = filename:join([DataDir,"testdata_latin1.dat"]),
TestDataLine1 = [229,228,246],
TestDataLine2 = [197,196,214],
- ?line SPid1 = rpc:call(N1,erlang,spawn,[?MODULE,hold_the_line,[self(),FileName1,[read]]]),
- ?line {ok,F1} = receive
- {SPid1,Res1} ->
- Res1
- after 5000 ->
- exit(timeout)
- end,
- ?line TestDataLine1 = chomp(io:get_line(F1,'')),
- ?line SPid1 ! die,
+ SPid1 = rpc:call(N1,erlang,spawn,[?MODULE,hold_the_line,[self(),FileName1,[read]]]),
+ {ok,F1} = receive
+ {SPid1,Res1} ->
+ Res1
+ after 5000 ->
+ exit(timeout)
+ end,
+ TestDataLine1 = chomp(io:get_line(F1,'')),
+ SPid1 ! die,
receive after 1000 -> ok end,
- ?line SPid2 = rpc:call(N1,erlang,spawn,[?MODULE,hold_the_line,[self(),FileName1,[read,binary]]]),
- ?line {ok,F2} = receive
- {SPid2,Res2} ->
- Res2
- after 5000 ->
- exit(timeout)
- end,
+ SPid2 = rpc:call(N1,erlang,spawn,[?MODULE,hold_the_line,[self(),FileName1,[read,binary]]]),
+ {ok,F2} = receive
+ {SPid2,Res2} ->
+ Res2
+ after 5000 ->
+ exit(timeout)
+ end,
TestDataLine1BinUtf = unicode:characters_to_binary(TestDataLine1),
TestDataLine1BinLatin = list_to_binary(TestDataLine1),
TestDataLine2BinUtf = unicode:characters_to_binary(TestDataLine2),
TestDataLine2BinLatin = list_to_binary(TestDataLine2),
- ?line TestDataLine1BinUtf = chomp(io:get_line(F2,'')),
- ?line TestDataLine2BinUtf = chomp(io:get_line(F2,'')),
- %io:format(standard_error,"Exec:~s\r\n",[rpc:call(N1,os,find_executable,["erl"])]),
- %io:format(standard_error,"Io:~s\r\n",[rpc:call(N1,code,which,[io])]),
- %io:format(standard_error,"File_io_server:~s\r\n",[rpc:call(N1,code,which,[file_io_server])]),
- ?line file:position(F2,0),
- ?line TestDataLine1BinLatin = chomp(rpc:call(N1,io,get_line,[F2,''])),
- ?line TestDataLine2BinUtf = chomp(io:get_line(F2,'')),
- ?line file:position(F2,0),
- ?line TestDataLine1BinUtf = chomp(io:get_line(F2,'')),
- ?line TestDataLine2BinLatin = chomp(rpc:call(N1,io,get_line,[F2,''])),
- ?line eof = chomp(rpc:call(N1,io,get_line,[F2,''])),
- ?line file:position(F2,0),
- ?line TestDataLine1BinLatin = rpc:call(N1,io,get_chars,[F2,'',3]),
+ TestDataLine1BinUtf = chomp(io:get_line(F2,'')),
+ TestDataLine2BinUtf = chomp(io:get_line(F2,'')),
+ %%io:format(standard_error,"Exec:~s\r\n",[rpc:call(N1,os,find_executable,["erl"])]),
+ %%io:format(standard_error,"Io:~s\r\n",[rpc:call(N1,code,which,[io])]),
+ %%io:format(standard_error,"File_io_server:~s\r\n",[rpc:call(N1,code,which,[file_io_server])]),
+ file:position(F2,0),
+ TestDataLine1BinLatin = chomp(rpc:call(N1,io,get_line,[F2,''])),
+ TestDataLine2BinUtf = chomp(io:get_line(F2,'')),
+ file:position(F2,0),
+ TestDataLine1BinUtf = chomp(io:get_line(F2,'')),
+ TestDataLine2BinLatin = chomp(rpc:call(N1,io,get_line,[F2,''])),
+ eof = chomp(rpc:call(N1,io,get_line,[F2,''])),
+ file:position(F2,0),
+ TestDataLine1BinLatin = rpc:call(N1,io,get_chars,[F2,'',3]),
io:get_chars(F2,'',1),
- ?line TestDataLine2BinLatin = chomp(rpc:call(N1,io,get_line,[F2,''])),
- ?line file:position(F2,0),
- ?line {ok,[TestDataLine1]} = io:fread(F2,'',"~s"),
- ?line {ok,[TestDataLine2]} = rpc:call(N1,io,fread,[F2,'',"~s"]),
-
- ?line DataLen1 = length(TestDataLine1),
- ?line DataLen2 = length(TestDataLine2),
-
- ?line file:position(F2,0),
- ?line {ok,TestDataLine1BinLatin} = file:read(F2,DataLen1),
- ?line {ok,_} = file:read(F2,1),
- ?line {ok,TestDataLine2BinLatin} = rpc:call(N1,file,read,[F2,DataLen2]),
- ?line {ok,_} = file:read(F2,1),
- ?line eof = rpc:call(N1,file,read,[F2,1]),
+ TestDataLine2BinLatin = chomp(rpc:call(N1,io,get_line,[F2,''])),
+ file:position(F2,0),
+ {ok,[TestDataLine1]} = io:fread(F2,'',"~s"),
+ {ok,[TestDataLine2]} = rpc:call(N1,io,fread,[F2,'',"~s"]),
+
+ DataLen1 = length(TestDataLine1),
+ DataLen2 = length(TestDataLine2),
+
+ file:position(F2,0),
+ {ok,TestDataLine1BinLatin} = file:read(F2,DataLen1),
+ {ok,_} = file:read(F2,1),
+ {ok,TestDataLine2BinLatin} = rpc:call(N1,file,read,[F2,DataLen2]),
+ {ok,_} = file:read(F2,1),
+ eof = rpc:call(N1,file,read,[F2,1]),
%% As r12 has a bug when setting options with setopts, we need
%% to reopen the file...
- ?line SPid2 ! die,
+ SPid2 ! die,
receive after 1000 -> ok end,
- ?line SPid3 = rpc:call(N1,erlang,spawn,[?MODULE,hold_the_line,[self(),FileName1,[read]]]),
- ?line {ok,F3} = receive
- {SPid3,Res3} ->
- Res3
- after 5000 ->
- exit(timeout)
- end,
-
- ?line file:position(F3,0),
- ?line {ok,[TestDataLine1]} = io:fread(F3,'',"~s"),
- ?line {ok,[TestDataLine2]} = rpc:call(N1,io,fread,[F3,'',"~s"]),
-
-
- ?line file:position(F3,0),
- ?line {ok,TestDataLine1} = file:read(F3,DataLen1),
- ?line {ok,_} = file:read(F3,1),
- ?line {ok,TestDataLine2} = rpc:call(N1,file,read,[F3,DataLen2]),
- ?line {ok,_} = file:read(F3,1),
- ?line eof = rpc:call(N1,file,read,[F3,1]),
-
+ SPid3 = rpc:call(N1,erlang,spawn,[?MODULE,hold_the_line,[self(),FileName1,[read]]]),
+ {ok,F3} = receive
+ {SPid3,Res3} ->
+ Res3
+ after 5000 ->
+ exit(timeout)
+ end,
+
+ file:position(F3,0),
+ {ok,[TestDataLine1]} = io:fread(F3,'',"~s"),
+ {ok,[TestDataLine2]} = rpc:call(N1,io,fread,[F3,'',"~s"]),
+
+
+ file:position(F3,0),
+ {ok,TestDataLine1} = file:read(F3,DataLen1),
+ {ok,_} = file:read(F3,1),
+ {ok,TestDataLine2} = rpc:call(N1,file,read,[F3,DataLen2]),
+ {ok,_} = file:read(F3,1),
+ eof = rpc:call(N1,file,read,[F3,1]),
+
%% So, lets do it all again, but the other way around
{ok,F4} = file:open(FileName1,[read]),
- ?line TestDataLine1 = chomp(io:get_line(F4,'')),
- ?line file:position(F4,0),
- ?line io:setopts(F4,[binary]),
- ?line TestDataLine1BinUtf = chomp(io:get_line(F4,'')),
- ?line TestDataLine2BinUtf = chomp(io:get_line(F4,'')),
- ?line file:position(F4,0),
- ?line TestDataLine1BinUtf = chomp(io:get_line(F4,'')),
- ?line TestDataLine2BinUtf = chomp(io:get_line(F4,'')),
- ?line file:position(F4,0),
- %dbg:tracer(),dbg:p(F4,[call,m]),dbg:tpl(file_io_server,x),dbg:tpl(io_lib,x),
- ?line TestDataLine1BinUtf = chomp(io:get_line(F4,'')),
- ?line TestDataLine2BinLatin = chomp(rpc:call(N1,io,get_line,[F4,''])),
- ?line file:position(F4,0),
- ?line TestDataLine1BinLatin = chomp(rpc:call(N1,io,get_line,[F4,''])),
- ?line TestDataLine2BinUtf = chomp(io:get_line(F4,'')),
- ?line eof = chomp(rpc:call(N1,io,get_line,[F4,''])),
- ?line file:position(F4,0),
- ?line TestDataLine1BinLatin = rpc:call(N1,io,get_chars,[F4,'',3]),
+ TestDataLine1 = chomp(io:get_line(F4,'')),
+ file:position(F4,0),
+ io:setopts(F4,[binary]),
+ TestDataLine1BinUtf = chomp(io:get_line(F4,'')),
+ TestDataLine2BinUtf = chomp(io:get_line(F4,'')),
+ file:position(F4,0),
+ TestDataLine1BinUtf = chomp(io:get_line(F4,'')),
+ TestDataLine2BinUtf = chomp(io:get_line(F4,'')),
+ file:position(F4,0),
+ TestDataLine1BinUtf = chomp(io:get_line(F4,'')),
+ TestDataLine2BinLatin = chomp(rpc:call(N1,io,get_line,[F4,''])),
+ file:position(F4,0),
+ TestDataLine1BinLatin = chomp(rpc:call(N1,io,get_line,[F4,''])),
+ TestDataLine2BinUtf = chomp(io:get_line(F4,'')),
+ eof = chomp(rpc:call(N1,io,get_line,[F4,''])),
+ file:position(F4,0),
+ TestDataLine1BinLatin = rpc:call(N1,io,get_chars,[F4,'',3]),
io:get_chars(F4,'',1),
- ?line TestDataLine2BinLatin = chomp(rpc:call(N1,io,get_line,[F4,''])),
- ?line file:position(F4,0),
- ?line {ok,[TestDataLine1]} = io:fread(F4,'',"~s"),
- ?line {ok,[TestDataLine2]} = rpc:call(N1,io,fread,[F4,'',"~s"]),
- ?line file:position(F4,0),
- ?line {ok,TestDataLine1BinLatin} = file:read(F4,DataLen1),
- ?line {ok,_} = file:read(F4,1),
- ?line {ok,TestDataLine2BinLatin} = rpc:call(N1,file,read,[F4,DataLen2]),
- ?line {ok,_} = file:read(F4,1),
- ?line eof = rpc:call(N1,file,read,[F4,1]),
- ?line io:setopts(F4,[list]),
-
- ?line file:position(F4,0),
- ?line {ok,[TestDataLine1]} = io:fread(F4,'',"~s"),
- ?line {ok,[TestDataLine2]} = rpc:call(N1,io,fread,[F4,'',"~s"]),
-
-
- ?line file:position(F4,0),
- ?line {ok,TestDataLine1} = file:read(F4,DataLen1),
- ?line {ok,_} = file:read(F4,1),
- ?line {ok,TestDataLine2} = rpc:call(N1,file,read,[F4,DataLen2]),
- ?line {ok,_} = file:read(F4,1),
- ?line eof = rpc:call(N1,file,read,[F4,1]),
-
+ TestDataLine2BinLatin = chomp(rpc:call(N1,io,get_line,[F4,''])),
+ file:position(F4,0),
+ {ok,[TestDataLine1]} = io:fread(F4,'',"~s"),
+ {ok,[TestDataLine2]} = rpc:call(N1,io,fread,[F4,'',"~s"]),
+ file:position(F4,0),
+ {ok,TestDataLine1BinLatin} = file:read(F4,DataLen1),
+ {ok,_} = file:read(F4,1),
+ {ok,TestDataLine2BinLatin} = rpc:call(N1,file,read,[F4,DataLen2]),
+ {ok,_} = file:read(F4,1),
+ eof = rpc:call(N1,file,read,[F4,1]),
+ io:setopts(F4,[list]),
+
+ file:position(F4,0),
+ {ok,[TestDataLine1]} = io:fread(F4,'',"~s"),
+ {ok,[TestDataLine2]} = rpc:call(N1,io,fread,[F4,'',"~s"]),
+
+
+ file:position(F4,0),
+ {ok,TestDataLine1} = file:read(F4,DataLen1),
+ {ok,_} = file:read(F4,1),
+ {ok,TestDataLine2} = rpc:call(N1,file,read,[F4,DataLen2]),
+ {ok,_} = file:read(F4,1),
+ eof = rpc:call(N1,file,read,[F4,1]),
+
file:close(F4),
- ?t:stop_node(N1),
+ test_server:stop_node(N1),
ok.
hold_the_line(Parent,Filename,Options) ->
@@ -913,14 +888,11 @@ hold_the_line(Parent,Filename,Options) ->
die ->
ok
end.
-
-bc_with_r12_gl(suite) ->
- [];
-bc_with_r12_gl(doc) ->
- ["Test io protocol compatibility with R12 nodes (terminals)"];
+
+%% Test io protocol compatibility with R12 nodes (terminals).
bc_with_r12_gl(Config) when is_list(Config) ->
- case ?t:is_release_available("r12b") of
+ case test_server:is_release_available("r12b") of
true ->
case get_progs() of
{error,Reason} ->
@@ -932,12 +904,9 @@ bc_with_r12_gl(Config) when is_list(Config) ->
{skip,"No R12B found"}
end.
-bc_with_r12_ogl(suite) ->
- [];
-bc_with_r12_ogl(doc) ->
- ["Test io protocol compatibility with R12 nodes (oldshell)"];
+%% Test io protocol compatibility with R12 nodes (oldshell).
bc_with_r12_ogl(Config) when is_list(Config) ->
- case ?t:is_release_available("r12b") of
+ case test_server:is_release_available("r12b") of
true ->
case get_progs() of
{error,Reason} ->
@@ -952,8 +921,9 @@ bc_with_r12_ogl(Config) when is_list(Config) ->
bc_with_r12_gl_1(_Config,Machine) ->
PA = filename:dirname(code:which(?MODULE)),
Name1 = io_proto_r12_gl_1,
- ?line N1 = list_to_atom(atom_to_list(Name1) ++ "@" ++ hostname()),
- ?line ?t:start_node(Name1, peer, [{args, "-pz \""++PA++"\""},{erl,[{release,"r12b"}]}]),
+ N1 = list_to_atom(atom_to_list(Name1) ++ "@" ++ hostname()),
+ test_server:start_node(Name1, peer, [{args, "-pz \""++PA++"\""},
+ {erl,[{release,"r12b"}]}]),
TestDataLine1 = [229,228,246],
TestDataLine1BinUtf = unicode:characters_to_binary(TestDataLine1),
TestDataLine1BinLatin = list_to_binary(TestDataLine1),
@@ -963,141 +933,141 @@ bc_with_r12_gl_1(_Config,Machine) ->
register(io_proto_suite,self()),
AM1 = spawn(?MODULE,Machine,
[MyNodeList, "io_proto_suite", N2List]),
-
- ?line GL = receive X when is_pid(X) -> X end,
+
+ GL = receive X when is_pid(X) -> X end,
%% get_line
- ?line "Hej\n" = rpc:call(N1,io,get_line,[GL,"Prompt\n"]),
- ?line io:setopts(GL,[binary]),
- ?line io:format(GL,"Okej~n",[]),
- ?line <<"Hej\n">> = rpc:call(N1,io,get_line,[GL,"Prompt\n"]),
- ?line io:setopts(GL,[{encoding,latin1}]),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinLatin = chomp(rpc:call(N1,io,get_line,[GL,"Prompt\n"])),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinUtf = chomp(io:get_line(GL,"Prompt\n")),
- ?line io:setopts(GL,[{encoding,unicode}]),
-
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinLatin = chomp(rpc:call(N1,io,get_line,[GL,"Prompt\n"])),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinUtf = chomp(io:get_line(GL,"Prompt\n")),
- ?line io:setopts(GL,[list]),
- ?line io:format(GL,"Okej~n",[]),
-
+ "Hej\n" = rpc:call(N1,io,get_line,[GL,"Prompt\n"]),
+ io:setopts(GL,[binary]),
+ io:format(GL,"Okej~n",[]),
+ <<"Hej\n">> = rpc:call(N1,io,get_line,[GL,"Prompt\n"]),
+ io:setopts(GL,[{encoding,latin1}]),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinLatin = chomp(rpc:call(N1,io,get_line,[GL,"Prompt\n"])),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinUtf = chomp(io:get_line(GL,"Prompt\n")),
+ io:setopts(GL,[{encoding,unicode}]),
+
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinLatin = chomp(rpc:call(N1,io,get_line,[GL,"Prompt\n"])),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinUtf = chomp(io:get_line(GL,"Prompt\n")),
+ io:setopts(GL,[list]),
+ io:format(GL,"Okej~n",[]),
+
%%get_chars
- ?line "Hej" = rpc:call(N1,io,get_chars,[GL,"Prompt\n",3]),
- ?line io:setopts(GL,[binary]),
- ?line io:format(GL,"Okej~n",[]),
- ?line <<"Hej">> = rpc:call(N1,io,get_chars,[GL,"Prompt\n",3]),
- ?line io:setopts(GL,[{encoding,latin1}]),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinLatin = rpc:call(N1,io,get_chars,[GL,"Prompt\n",3]),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinUtf = io:get_chars(GL,"Prompt\n",3),
- ?line io:setopts(GL,[{encoding,unicode}]),
-
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinLatin = rpc:call(N1,io,get_chars,[GL,"Prompt\n",3]),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinUtf = io:get_chars(GL,"Prompt\n",3),
- ?line io:setopts(GL,[list]),
- ?line io:format(GL,"Okej~n",[]),
+ "Hej" = rpc:call(N1,io,get_chars,[GL,"Prompt\n",3]),
+ io:setopts(GL,[binary]),
+ io:format(GL,"Okej~n",[]),
+ <<"Hej">> = rpc:call(N1,io,get_chars,[GL,"Prompt\n",3]),
+ io:setopts(GL,[{encoding,latin1}]),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinLatin = rpc:call(N1,io,get_chars,[GL,"Prompt\n",3]),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinUtf = io:get_chars(GL,"Prompt\n",3),
+ io:setopts(GL,[{encoding,unicode}]),
+
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinLatin = rpc:call(N1,io,get_chars,[GL,"Prompt\n",3]),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinUtf = io:get_chars(GL,"Prompt\n",3),
+ io:setopts(GL,[list]),
+ io:format(GL,"Okej~n",[]),
%%fread
- ?line {ok,["Hej"]} = rpc:call(N1,io,fread,[GL,"Prompt\n","~s"]),
- ?line io:setopts(GL,[binary]),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,["Hej"]} = rpc:call(N1,io,fread,[GL,"Prompt\n","~s"]),
- ?line io:setopts(GL,[{encoding,latin1}]),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,[TestDataLine1]} = rpc:call(N1,io,fread,[GL,"Prompt\n","~s"]),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
- ?line io:setopts(GL,[{encoding,unicode}]),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,[TestDataLine1]} = rpc:call(N1,io,fread,[GL,"Prompt\n","~s"]),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
- ?line io:setopts(GL,[list]),
- ?line io:format(GL,"Okej~n",[]),
-
-
- ?line receive
- {AM1,done} ->
- ok
- after 5000 ->
- exit(timeout)
- end,
- ?t:stop_node(N1),
+ {ok,["Hej"]} = rpc:call(N1,io,fread,[GL,"Prompt\n","~s"]),
+ io:setopts(GL,[binary]),
+ io:format(GL,"Okej~n",[]),
+ {ok,["Hej"]} = rpc:call(N1,io,fread,[GL,"Prompt\n","~s"]),
+ io:setopts(GL,[{encoding,latin1}]),
+ io:format(GL,"Okej~n",[]),
+ {ok,[TestDataLine1]} = rpc:call(N1,io,fread,[GL,"Prompt\n","~s"]),
+ io:format(GL,"Okej~n",[]),
+ {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
+ io:setopts(GL,[{encoding,unicode}]),
+ io:format(GL,"Okej~n",[]),
+ {ok,[TestDataLine1]} = rpc:call(N1,io,fread,[GL,"Prompt\n","~s"]),
+ io:format(GL,"Okej~n",[]),
+ {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
+ io:setopts(GL,[list]),
+ io:format(GL,"Okej~n",[]),
+
+
+ receive
+ {AM1,done} ->
+ ok
+ after 5000 ->
+ exit(timeout)
+ end,
+ test_server:stop_node(N1),
ok.
-
+
answering_machine1(OthNode,OthReg,Me) ->
TestDataLine1 = [229,228,246],
TestDataUtf = binary_to_list(unicode:characters_to_binary(TestDataLine1)),
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline, "{"++OthReg++","++OthNode++"} ! group_leader()."},
- {getline, "<"},
- % get_line
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- % get_chars
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- % fread
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"}
-
- ],Me,"LC_CTYPE=\""++get_lc_ctype()++"\"; export LC_CTYPE; "),
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline, "{"++OthReg++","++OthNode++"} ! group_leader()."},
+ {getline, "<"},
+ %% get_line
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ %% get_chars
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ %% fread
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"}
+
+ ],Me,"LC_CTYPE=\""++get_lc_ctype()++"\"; export LC_CTYPE; "),
O = list_to_atom(OthReg),
O ! {self(),done},
ok.
@@ -1105,79 +1075,76 @@ answering_machine1(OthNode,OthReg,Me) ->
answering_machine2(OthNode,OthReg,Me) ->
TestDataLine1 = [229,228,246],
TestDataUtf = binary_to_list(unicode:characters_to_binary(TestDataLine1)),
- ?line rtnode([{putline,""},
- {putline, "2."},
- {getline, "2"},
- {putline, "{"++OthReg++","++OthNode++"} ! group_leader()."},
- {getline_re, ".*<[0-9].*"},
- % get_line
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- % get_chars
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- % fread
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, "Hej"},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataLine1},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"},
- {getline_re, ".*Prompt"},
- {putline, TestDataUtf},
- {getline_re, ".*Okej"}
-
- ],Me,"LC_CTYPE=\""++get_lc_ctype()++"\"; export LC_CTYPE; "," -oldshell "),
+ rtnode([{putline,""},
+ {putline, "2."},
+ {getline, "2"},
+ {putline, "{"++OthReg++","++OthNode++"} ! group_leader()."},
+ {getline_re, ".*<[0-9].*"},
+ %% get_line
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ %% get_chars
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ %% fread
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, "Hej"},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataLine1},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"},
+ {getline_re, ".*Prompt"},
+ {putline, TestDataUtf},
+ {getline_re, ".*Okej"}
+
+ ],Me,"LC_CTYPE=\""++get_lc_ctype()++"\"; export LC_CTYPE; "," -oldshell "),
O = list_to_atom(OthReg),
O ! {self(),done},
ok.
-
-read_modes_ogl(suite) ->
- [];
-read_modes_ogl(doc) ->
- ["Test various modes when reading from the group leade from another machine"];
+
+%% Test various modes when reading from the group leade from another machine.
read_modes_ogl(Config) when is_list(Config) ->
case get_progs() of
{error,Reason} ->
@@ -1186,10 +1153,7 @@ read_modes_ogl(Config) when is_list(Config) ->
read_modes_gl_1(Config,answering_machine2)
end.
-read_modes_gl(suite) ->
- [];
-read_modes_gl(doc) ->
- ["Test various modes when reading from the group leade from another machine"];
+%% Test various modes when reading from the group leade from another machine.
read_modes_gl(Config) when is_list(Config) ->
case {get_progs(),proplists:get_value(default_shell,Config)} of
{{error,Reason},_} ->
@@ -1210,81 +1174,78 @@ read_modes_gl_1(_Config,Machine) ->
register(io_proto_suite,self()),
AM1 = spawn(?MODULE,Machine,
[MyNodeList, "io_proto_suite", N2List]),
-
- ?line GL = receive X when is_pid(X) -> X end,
+
+ GL = receive X when is_pid(X) -> X end,
?dbg({group_leader,X}),
%% get_line
- ?line receive after 500 -> ok end, % Dont clash with the new shell...
- ?line "Hej\n" = io:get_line(GL,"Prompt\n"),
- ?line io:setopts(GL,[binary]),
- ?line io:format(GL,"Okej~n",[]),
- ?line <<"Hej\n">> = io:get_line(GL,"Prompt\n"),
- ?line io:setopts(GL,[{encoding,latin1}]),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinLatin = chomp(io:request(GL,{get_line,latin1,"Prompt\n"})),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinUtf = chomp(io:get_line(GL,"Prompt\n")),
- ?line io:setopts(GL,[{encoding,unicode}]),
-
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinLatin = chomp(io:request(GL,{get_line,latin1,"Prompt\n"})),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinUtf = chomp(io:get_line(GL,"Prompt\n")),
- ?line io:setopts(GL,[list]),
- ?line io:format(GL,"Okej~n",[]),
-
+ receive after 500 -> ok end, % Dont clash with the new shell...
+ "Hej\n" = io:get_line(GL,"Prompt\n"),
+ io:setopts(GL,[binary]),
+ io:format(GL,"Okej~n",[]),
+ <<"Hej\n">> = io:get_line(GL,"Prompt\n"),
+ io:setopts(GL,[{encoding,latin1}]),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinLatin = chomp(io:request(GL,{get_line,latin1,"Prompt\n"})),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinUtf = chomp(io:get_line(GL,"Prompt\n")),
+ io:setopts(GL,[{encoding,unicode}]),
+
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinLatin = chomp(io:request(GL,{get_line,latin1,"Prompt\n"})),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinUtf = chomp(io:get_line(GL,"Prompt\n")),
+ io:setopts(GL,[list]),
+ io:format(GL,"Okej~n",[]),
+
%%get_chars
- ?line "Hej" = io:get_chars(GL,"Prompt\n",3),
- ?line io:setopts(GL,[binary]),
- ?line io:format(GL,"Okej~n",[]),
- ?line <<"Hej">> = io:get_chars(GL,"Prompt\n",3),
- ?line io:setopts(GL,[{encoding,latin1}]),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinLatin = io:request(GL,{get_chars,latin1,"Prompt\n",3}),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinUtf = io:get_chars(GL,"Prompt\n",3),
- ?line io:setopts(GL,[{encoding,unicode}]),
-
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinLatin = io:request(GL,{get_chars,latin1,"Prompt\n",3}),
- ?line io:format(GL,"Okej~n",[]),
- ?line TestDataLine1BinUtf = io:get_chars(GL,"Prompt\n",3),
- ?line io:setopts(GL,[list]),
- ?line io:format(GL,"Okej~n",[]),
+ "Hej" = io:get_chars(GL,"Prompt\n",3),
+ io:setopts(GL,[binary]),
+ io:format(GL,"Okej~n",[]),
+ <<"Hej">> = io:get_chars(GL,"Prompt\n",3),
+ io:setopts(GL,[{encoding,latin1}]),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinLatin = io:request(GL,{get_chars,latin1,"Prompt\n",3}),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinUtf = io:get_chars(GL,"Prompt\n",3),
+ io:setopts(GL,[{encoding,unicode}]),
+
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinLatin = io:request(GL,{get_chars,latin1,"Prompt\n",3}),
+ io:format(GL,"Okej~n",[]),
+ TestDataLine1BinUtf = io:get_chars(GL,"Prompt\n",3),
+ io:setopts(GL,[list]),
+ io:format(GL,"Okej~n",[]),
%%fread
- ?line {ok,["Hej"]} = io:fread(GL,"Prompt\n","~s"),
- ?line io:setopts(GL,[binary]),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,["Hej"]} = io:fread(GL,"Prompt\n","~s"),
- ?line io:setopts(GL,[{encoding,latin1}]),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
- ?line io:setopts(GL,[{encoding,unicode}]),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
- ?line io:format(GL,"Okej~n",[]),
- ?line {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
- ?line io:setopts(GL,[list]),
- ?line io:format(GL,"Okej~n",[]),
-
-
- ?line receive
- {AM1,done} ->
- ok
- after 5000 ->
- exit(timeout)
- end,
+ {ok,["Hej"]} = io:fread(GL,"Prompt\n","~s"),
+ io:setopts(GL,[binary]),
+ io:format(GL,"Okej~n",[]),
+ {ok,["Hej"]} = io:fread(GL,"Prompt\n","~s"),
+ io:setopts(GL,[{encoding,latin1}]),
+ io:format(GL,"Okej~n",[]),
+ {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
+ io:format(GL,"Okej~n",[]),
+ {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
+ io:setopts(GL,[{encoding,unicode}]),
+ io:format(GL,"Okej~n",[]),
+ {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
+ io:format(GL,"Okej~n",[]),
+ {ok,[TestDataLine1]} = io:fread(GL,"Prompt\n","~s"),
+ io:setopts(GL,[list]),
+ io:format(GL,"Okej~n",[]),
+
+
+ receive
+ {AM1,done} ->
+ ok
+ after 5000 ->
+ exit(timeout)
+ end,
ok.
-broken_unicode(suite) ->
- [];
-broken_unicode(doc) ->
- ["Test behaviour when reading broken Unicode files"];
+%% Test behaviour when reading broken Unicode files
broken_unicode(Config) when is_list(Config) ->
- Dir = ?config(priv_dir,Config),
+ Dir = proplists:get_value(priv_dir,Config),
Latin1Name = filename:join([Dir,"latin1_data_file.dat"]),
Utf8Name = filename:join([Dir,"utf8_data_file.dat"]),
Latin1Data = iolist_to_binary(lists:duplicate(10,lists:seq(0,255)++[255,255,255])),
@@ -1292,10 +1253,10 @@ broken_unicode(Config) when is_list(Config) ->
lists:duplicate(10,lists:seq(0,255))),
file:write_file(Latin1Name,Latin1Data),
file:write_file(Utf8Name,Utf8Data),
- ?line [ latin1 = heuristic_encoding_file2(Latin1Name,N,utf8) || N <- lists:seq(1,100)++[1024,2048,10000]],
- ?line [ utf8 = heuristic_encoding_file2(Utf8Name,N,utf8) || N <- lists:seq(1,100)++[1024,2048,10000]],
- ?line [ latin1 = heuristic_encoding_file2(Latin1Name,N,utf16) || N <- lists:seq(1,100)++[1024,2048,10000]],
- ?line [ latin1 = heuristic_encoding_file2(Latin1Name,N,utf32) || N <- lists:seq(1,100)++[1024,2048,10000]],
+ [ latin1 = heuristic_encoding_file2(Latin1Name,N,utf8) || N <- lists:seq(1,100)++[1024,2048,10000]],
+ [ utf8 = heuristic_encoding_file2(Utf8Name,N,utf8) || N <- lists:seq(1,100)++[1024,2048,10000]],
+ [ latin1 = heuristic_encoding_file2(Latin1Name,N,utf16) || N <- lists:seq(1,100)++[1024,2048,10000]],
+ [ latin1 = heuristic_encoding_file2(Latin1Name,N,utf32) || N <- lists:seq(1,100)++[1024,2048,10000]],
ok.
@@ -1314,10 +1275,7 @@ loop_through_file2(F,Bin,Chunk,Enc) when is_binary(Bin) ->
-eof_on_pipe(suite) ->
- [];
-eof_on_pipe(doc) ->
- ["tests eof before newline on stdin when erlang is in pipe"];
+%% Test eof before newline on stdin when erlang is in pipe.
eof_on_pipe(Config) when is_list(Config) ->
case {get_progs(),os:type()} of
{{error,Reason},_} ->
@@ -1337,10 +1295,10 @@ eof_on_pipe(Config) when is_list(Config) ->
end
end,
CommandLine1 = EchoLine ++
- "\""++Erl++"\" -noshell -eval "
- "'io:format(\"~p\",[io:get_line(\"\")]),"
- "io:format(\"~p\",[io:get_line(\"\")]),"
- "io:format(\"~p\",[io:get_line(\"\")]).' -run init stop",
+ "\""++Erl++"\" -noshell -eval "
+ "'io:format(\"~p\",[io:get_line(\"\")]),"
+ "io:format(\"~p\",[io:get_line(\"\")]),"
+ "io:format(\"~p\",[io:get_line(\"\")]).' -run init stop",
case os:cmd(CommandLine1) of
"\"a\\n\"\"bu\"eof" ->
ok;
@@ -1348,10 +1306,10 @@ eof_on_pipe(Config) when is_list(Config) ->
exit({unexpected1,Other1})
end,
CommandLine2 = EchoLine ++
- "\""++Erl++"\" -noshell -eval "
- "'io:setopts([binary]),io:format(\"~p\",[io:get_line(\"\")]),"
- "io:format(\"~p\",[io:get_line(\"\")]),"
- "io:format(\"~p\",[io:get_line(\"\")]).' -run init stop",
+ "\""++Erl++"\" -noshell -eval "
+ "'io:setopts([binary]),io:format(\"~p\",[io:get_line(\"\")]),"
+ "io:format(\"~p\",[io:get_line(\"\")]),"
+ "io:format(\"~p\",[io:get_line(\"\")]).' -run init stop",
case os:cmd(CommandLine2) of
"<<\"a\\n\">><<\"bu\">>eof" ->
ok;
@@ -1360,12 +1318,12 @@ eof_on_pipe(Config) when is_list(Config) ->
end
catch
throw:skip ->
- {skipped,"unsupported echo program"}
+ {skipped,"unsupported echo program"}
end;
{_,_} ->
{skipped,"Only on linux"}
end.
-
+
%%
%% Tool for running interactive shell (stolen from the kernel
@@ -1435,16 +1393,16 @@ timeout(normal) ->
-ifndef(debug).
rm_rf(Dir) ->
try
- {ok,List} = file:list_dir(Dir),
- Files = [filename:join([Dir,X]) || X <- List],
- [case file:list_dir(Y) of
- {error, enotdir} ->
- ok = file:delete(Y);
- _ ->
- ok = rm_rf(Y)
- end || Y <- Files],
- ok = file:del_dir(Dir),
- ok
+ {ok,List} = file:list_dir(Dir),
+ Files = [filename:join([Dir,X]) || X <- List],
+ [case file:list_dir(Y) of
+ {error, enotdir} ->
+ ok = file:delete(Y);
+ _ ->
+ ok = rm_rf(Y)
+ end || Y <- Files],
+ ok = file:del_dir(Dir),
+ ok
catch
_:Exception -> {error, {Exception,Dir}}
end.
@@ -1509,7 +1467,7 @@ get_and_put(CPid, [{putline_raw, Line}|T],N) ->
Timeout = timeout(normal),
receive
{send_line, ok} ->
- get_and_put(CPid, T,N+1)
+ get_and_put(CPid, T,N+1)
after Timeout ->
error_logger:error_msg("~p: putline_raw timeout (~p) sending "
"\"~s\" (command number ~p)~n",
@@ -1523,7 +1481,7 @@ get_and_put(CPid, [{putline, Line}|T],N) ->
Timeout = timeout(normal),
receive
{send_line, ok} ->
- get_and_put(CPid, [{getline, []}|T],N)
+ get_and_put(CPid, [{getline, []}|T],N)
after Timeout ->
error_logger:error_msg("~p: putline timeout (~p) sending "
"\"~s\" (command number ~p)~n[~p]~n",
@@ -1540,8 +1498,8 @@ wait_for_runerl_server(SPid) ->
after Timeout ->
{error, timeout}
end.
-
-
+
+
stop_runerl_node(CPid) ->
Ref = erlang:monitor(process, CPid),
@@ -1592,11 +1550,11 @@ create_tempdir(Dir,X) when X > $Z, X < $a ->
create_tempdir(Dir,$a);
create_tempdir(Dir,X) when X > $z ->
Estr = lists:flatten(
- io_lib:format("Unable to create ~s, reason eexist",
- [Dir++[$z]])),
+ io_lib:format("Unable to create ~s, reason eexist",
+ [Dir++[$z]])),
{error, Estr};
create_tempdir(Dir0, Ch) ->
- % Expect fairly standard unix.
+ %% Expect fairly standard unix.
Dir = Dir0++[Ch],
case file:make_dir(Dir) of
{error, eexist} ->
@@ -1634,8 +1592,8 @@ start_runerl_node(RunErl,Erl,Tempdir,Nodename,Extra) ->
[];
_ ->
" -sname "++(if is_atom(Nodename) -> atom_to_list(Nodename);
- true -> Nodename
- end)++
+ true -> Nodename
+ end)++
" -setcookie "++atom_to_list(erlang:get_cookie())
end,
XXArg = case Extra of
@@ -1646,9 +1604,9 @@ start_runerl_node(RunErl,Erl,Tempdir,Nodename,Extra) ->
end,
spawn(fun() ->
?dbg("\""++RunErl++"\" "++Tempdir++"/ "++Tempdir++
- " \""++Erl++XArg++XXArg++"\""),
+ " \""++Erl++XArg++XXArg++"\""),
os:cmd("\""++RunErl++"\" "++Tempdir++"/ "++Tempdir++
- " \""++Erl++XArg++XXArg++"\"")
+ " \""++Erl++XArg++XXArg++"\"")
end).
start_toerl_server(ToErl,Tempdir) ->
@@ -1706,7 +1664,7 @@ toerl_loop(Port,Acc) ->
_ ->
toerl_loop(Port,[{Tag0,Data}|Acc])
end;
- {Pid,{get_line,Timeout}} ->
+ {Pid,{get_line,Timeout}} ->
case Acc of
[] ->
case get_data_within(Port,Timeout,[]) of
@@ -1755,10 +1713,10 @@ toerl_loop(Port,Acc) ->
Other ->
{error, {unexpected, Other}}
end.
-
+
millistamp() ->
erlang:monotonic_time(milli_seconds).
-
+
get_data_within(Port, X, Acc) when X =< 0 ->
?dbg({get_data_within, X, Acc, ?LINE}),
receive
@@ -1877,8 +1835,8 @@ request({get_until, Encoding, Prompt, M, F, As}, State) ->
{ok, convert(State#state.nxt, Encoding, State#state.mode), State#state{nxt = eof, q = [{get_until, Encoding, Prompt, M, F, As} | State#state.q]}};
request({get_chars, Encoding, Prompt, N}, State) ->
{ok, convert(State#state.nxt, Encoding, State#state.mode), State#state{nxt = eof,
- q = [{get_chars, Encoding, Prompt, N} |
- State#state.q]}};
+ q = [{get_chars, Encoding, Prompt, N} |
+ State#state.q]}};
request({get_line, Encoding, Prompt}, State) ->
{ok, convert(State#state.nxt, Encoding, State#state.mode),
State#state{nxt = eof,
@@ -1910,7 +1868,7 @@ request(getopts, State) ->
binary -> [{binary, true}]
end, State#state{q=[getopts | State#state.q ]}};
request({requests, Reqs}, State) ->
- multi_request(Reqs, {ok, ok, State}).
+ multi_request(Reqs, {ok, ok, State}).
multi_request([R|Rs], {ok, _Res, State}) ->
multi_request(Rs, request(R, State));
@@ -1941,7 +1899,7 @@ convert(Data, latin1, binary) ->
_ ->
{error, {cannot_convert, unicode, latin1}}
end.
-
+
hostname() ->
from($@, atom_to_list(node())).
diff --git a/lib/stdlib/test/lists_SUITE.erl b/lib/stdlib/test/lists_SUITE.erl
index a0f7fd2744..531e97e8d6 100644
--- a/lib/stdlib/test/lists_SUITE.erl
+++ b/lib/stdlib/test/lists_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,26 +22,20 @@
%%%-----------------------------------------------------------------
-module(lists_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-
-% Default timetrap timeout (set in init_per_testcase).
-% This should be set relatively high (10-15 times the expected
-% max testcasetime).
--define(default_timeout, ?t:minutes(4)).
-
-% Test server specific exports
+%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
-export([init_per_testcase/2, end_per_testcase/2]).
-% Test cases must be exported.
+%% Test cases must be exported.
-export([member/1, reverse/1,
keymember/1, keysearch_keyfind/1,
keystore/1, keytake/1, keyreplace/1,
append_1/1, append_2/1,
seq_loop/1, seq_2/1, seq_3/1, seq_2_e/1, seq_3_e/1,
-
+
sublist_2/1, sublist_3/1, sublist_2_e/1, sublist_3_e/1,
flatten_1/1, flatten_2/1, flatten_1_e/1, flatten_2_e/1,
dropwhile/1, takewhile/1,
@@ -61,6 +55,7 @@
ufunsort_error/1,
zip_unzip/1, zip_unzip3/1, zipwith/1, zipwith3/1,
filter_partition/1,
+ join/1,
otp_5939/1, otp_6023/1, otp_6606/1, otp_7230/1,
suffix/1, subtract/1, droplast/1, hof/1]).
@@ -78,7 +73,9 @@
%%
%% all/1
%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,4}}].
all() ->
[{group, append},
@@ -123,7 +120,7 @@ groups() ->
{tickets, [parallel], [otp_5939, otp_6023, otp_6606, otp_7230]},
{zip, [parallel], [zip_unzip, zip_unzip3, zipwith, zipwith3]},
{misc, [parallel], [reverse, member, dropwhile, takewhile,
- filter_partition, suffix, subtract,
+ filter_partition, suffix, subtract, join,
hof]}
].
@@ -141,58 +138,48 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-%
-% Test cases starts here.
-%
+%%
+%% Test cases starts here.
+%%
-append_1(doc) -> [];
-append_1(suite) -> [];
append_1(Config) when is_list(Config) ->
- ?line "abcdef"=lists:append(["abc","def"]),
- ?line [hej, du,[glade, [bagare]]]=
+ "abcdef"=lists:append(["abc","def"]),
+ [hej, du,[glade, [bagare]]]=
lists:append([[hej], [du], [[glade, [bagare]]]]),
- ?line [10, [elem]]=lists:append([[10], [[elem]]]),
+ [10, [elem]]=lists:append([[10], [[elem]]]),
ok.
-append_2(doc) -> [];
-append_2(suite) -> [];
append_2(Config) when is_list(Config) ->
- ?line "abcdef"=lists:append("abc", "def"),
- ?line [hej, du]=lists:append([hej], [du]),
- ?line [10, [elem]]=lists:append([10], [[elem]]),
+ "abcdef"=lists:append("abc", "def"),
+ [hej, du]=lists:append([hej], [du]),
+ [10, [elem]]=lists:append([10], [[elem]]),
ok.
-reverse(suite) ->
- [];
-reverse(doc) ->
- ["Tests the lists:reverse() implementation. The function is "
- "`non-blocking', and only processes a fixed number of elements "
- "at a time."];
+%% Tests the lists:reverse() implementation. The function is
+%% `non-blocking', and only processes a fixed number of elements at a
+%% time.
reverse(Config) when is_list(Config) ->
- ?line reverse_test(0),
- ?line reverse_test(1),
- ?line reverse_test(2),
- ?line reverse_test(128),
- ?line reverse_test(256),
- ?line reverse_test(1000),
- ?line reverse_test(1998),
- ?line reverse_test(1999),
- ?line reverse_test(2000),
- ?line reverse_test(2001),
- ?line reverse_test(3998),
- ?line reverse_test(3999),
- ?line reverse_test(4000),
- ?line reverse_test(4001),
- ?line reverse_test(60001),
- ?line reverse_test(100007),
+ reverse_test(0),
+ reverse_test(1),
+ reverse_test(2),
+ reverse_test(128),
+ reverse_test(256),
+ reverse_test(1000),
+ reverse_test(1998),
+ reverse_test(1999),
+ reverse_test(2000),
+ reverse_test(2001),
+ reverse_test(3998),
+ reverse_test(3999),
+ reverse_test(4000),
+ reverse_test(4001),
+ reverse_test(60001),
+ reverse_test(100007),
ok.
reverse_test(0) ->
@@ -210,27 +197,25 @@ reverse_test(Num) ->
List0 = lists:reverse(List),
ok.
-member(doc) ->
- ["Tests the lists:member() implementation."
- "This test case depends on lists:reverse() to work, "
- "wich is tested in a separate test case."];
+%% Test the lists:member() implementation. This test case depends on
+%% lists:reverse() to work, wich is tested in a separate test case.
member(Config) when is_list(Config) ->
- ?line {'EXIT',{badarg,_}} = (catch lists:member(45, {a,b,c})),
- ?line {'EXIT',{badarg,_}} = (catch lists:member(45, [0|non_list_tail])),
- ?line false = lists:member(4233, []),
- ?line member_test(1),
- ?line member_test(100),
- ?line member_test(256),
- ?line member_test(1000),
- ?line member_test(1998),
- ?line member_test(1999),
- ?line member_test(2000),
- ?line member_test(2001),
- ?line member_test(3998),
- ?line member_test(3999),
- ?line member_test(4000),
- ?line member_test(4001),
- ?line member_test(100008),
+ {'EXIT',{badarg,_}} = (catch lists:member(45, {a,b,c})),
+ {'EXIT',{badarg,_}} = (catch lists:member(45, [0|non_list_tail])),
+ false = lists:member(4233, []),
+ member_test(1),
+ member_test(100),
+ member_test(256),
+ member_test(1000),
+ member_test(1998),
+ member_test(1999),
+ member_test(2000),
+ member_test(2001),
+ member_test(3998),
+ member_test(3999),
+ member_test(4000),
+ member_test(4001),
+ member_test(100008),
ok.
member_test(Num) ->
@@ -246,78 +231,78 @@ member_test(Num) ->
false = lists:member({a,b,c}, List).
keymember(Config) when is_list(Config) ->
- ?line false = lists:keymember(anything_goes, 1, []),
- ?line {'EXIT',{badarg,_}} = (catch lists:keymember(anything_goes, -1, [])),
- ?line {'EXIT',{badarg,_}} = (catch lists:keymember(anything_goes, 0, [])),
- ?line {'EXIT',{badarg,_}} = (catch lists:keymember(anything_goes, 1, {1,2,3})),
+ false = lists:keymember(anything_goes, 1, []),
+ {'EXIT',{badarg,_}} = (catch lists:keymember(anything_goes, -1, [])),
+ {'EXIT',{badarg,_}} = (catch lists:keymember(anything_goes, 0, [])),
+ {'EXIT',{badarg,_}} = (catch lists:keymember(anything_goes, 1, {1,2,3})),
List = [{52.0,a},{-19,b,c},{37.5,d},an_atom,42.0,{39},{45,{x,y,z}}],
- ?line false = lists:keymember(333, 5, List),
- ?line false = lists:keymember(333, 999, List),
- ?line false = lists:keymember(37, 1, List),
-
- ?line true = lists:keymember(52.0, 1, List),
- ?line true = lists:keymember(52, 1, List),
- ?line true = lists:keymember(-19, 1, List),
- ?line true = lists:keymember(-19.0, 1, List),
- ?line true = lists:keymember(37.5, 1, List),
- ?line true = lists:keymember(39, 1, List),
- ?line true = lists:keymember(39.0, 1, List),
- ?line true = lists:keymember(45, 1, List),
- ?line true = lists:keymember(45.0, 1, List),
-
- ?line true = lists:keymember(a, 2, List),
- ?line true = lists:keymember(b, 2, List),
- ?line true = lists:keymember(c, 3, List),
- ?line true = lists:keymember(d, 2, List),
- ?line true = lists:keymember({x,y,z}, 2, List),
-
- ?line Long0 = lists:seq(1, 100007),
- ?line false = lists:keymember(kalle, 1, Long0),
- ?line Long = lists:foldl(fun(E, A) -> [{1/E,E}|A] end, [], Long0),
- ?line true = lists:keymember(1, 2, Long),
- ?line true = lists:keymember(2, 2, Long),
- ?line true = lists:keymember(1.0, 2, Long),
- ?line true = lists:keymember(2.0, 2, Long),
- ?line true = lists:keymember(100006, 2, Long),
+ false = lists:keymember(333, 5, List),
+ false = lists:keymember(333, 999, List),
+ false = lists:keymember(37, 1, List),
+
+ true = lists:keymember(52.0, 1, List),
+ true = lists:keymember(52, 1, List),
+ true = lists:keymember(-19, 1, List),
+ true = lists:keymember(-19.0, 1, List),
+ true = lists:keymember(37.5, 1, List),
+ true = lists:keymember(39, 1, List),
+ true = lists:keymember(39.0, 1, List),
+ true = lists:keymember(45, 1, List),
+ true = lists:keymember(45.0, 1, List),
+
+ true = lists:keymember(a, 2, List),
+ true = lists:keymember(b, 2, List),
+ true = lists:keymember(c, 3, List),
+ true = lists:keymember(d, 2, List),
+ true = lists:keymember({x,y,z}, 2, List),
+
+ Long0 = lists:seq(1, 100007),
+ false = lists:keymember(kalle, 1, Long0),
+ Long = lists:foldl(fun(E, A) -> [{1/E,E}|A] end, [], Long0),
+ true = lists:keymember(1, 2, Long),
+ true = lists:keymember(2, 2, Long),
+ true = lists:keymember(1.0, 2, Long),
+ true = lists:keymember(2.0, 2, Long),
+ true = lists:keymember(100006, 2, Long),
ok.
keysearch_keyfind(Config) when is_list(Config) ->
- ?line false = key_search_find(anything_goes, 1, []),
- ?line {'EXIT',{badarg,_}} = (catch key_search_find(anything_goes, -1, [])),
- ?line {'EXIT',{badarg,_}} = (catch key_search_find(anything_goes, 0, [])),
- ?line {'EXIT',{badarg,_}} = (catch key_search_find(anything_goes, 1, {1,2,3})),
+ false = key_search_find(anything_goes, 1, []),
+ {'EXIT',{badarg,_}} = (catch key_search_find(anything_goes, -1, [])),
+ {'EXIT',{badarg,_}} = (catch key_search_find(anything_goes, 0, [])),
+ {'EXIT',{badarg,_}} = (catch key_search_find(anything_goes, 1, {1,2,3})),
First = {x,42.0},
Second = {y,-77},
Third = {z,[a,b,c],{5.0}},
List = [First,Second,Third],
-
- ?line false = key_search_find(333, 1, []),
- ?line false = key_search_find(333, 5, List),
- ?line false = key_search_find(333, 999, List),
- ?line false = key_search_find(37, 1, List),
-
- ?line {value,First} = key_search_find(42, 2, List),
- ?line {value,First} = key_search_find(42.0, 2, List),
-
- ?line {value,Second} = key_search_find(-77, 2, List),
- ?line {value,Second} = key_search_find(-77.0, 2, List),
-
- ?line {value,Third} = key_search_find(z, 1, List),
- ?line {value,Third} = key_search_find([a,b,c], 2, List),
- ?line {value,Third} = key_search_find({5}, 3, List),
- ?line {value,Third} = key_search_find({5.0}, 3, List),
-
- ?line Long0 = lists:seq(1, 100007),
- ?line false = key_search_find(kalle, 1, Long0),
- ?line Long = lists:foldl(fun(E, A) -> [{1/E,float(E)}|A] end, [], Long0),
- ?line {value,{_,1.0}} = key_search_find(1, 2, Long),
- ?line {value,{_,1.0}} = key_search_find(1.0, 2, Long),
- ?line {value,{_,2.0}} = key_search_find(2, 2, Long),
- ?line {value,{_,2.0}} = key_search_find(2.0, 2, Long),
- ?line {value,{_,33988.0}} = key_search_find(33988, 2, Long),
- ?line {value,{_,33988.0}} = key_search_find(33988.0, 2, Long),
+
+ false = key_search_find(333, 1, []),
+ false = key_search_find(333, 5, List),
+ false = key_search_find(333, 999, List),
+ false = key_search_find(37, 1, List),
+
+ {value,First} = key_search_find(42, 2, List),
+ {value,First} = key_search_find(42.0, 2, List),
+
+ {value,Second} = key_search_find(-77, 2, List),
+ {value,Second} = key_search_find(-77.0, 2, List),
+
+ {value,Third} = key_search_find(z, 1, List),
+ {value,Third} = key_search_find([a,b,c], 2, List),
+ {value,Third} = key_search_find({5}, 3, List),
+ {value,Third} = key_search_find({5.0}, 3, List),
+
+ Long0 = lists:seq(1, 100007),
+ false = key_search_find(kalle, 1, Long0),
+ Long = lists:foldl(fun(E, A) -> [{1/E,float(E)}|A] end, [], Long0),
+ {value,{_,1.0}} = key_search_find(1, 2, Long),
+ {value,{_,1.0}} = key_search_find(1.0, 2, Long),
+ {value,{_,2.0}} = key_search_find(2, 2, Long),
+ {value,{_,2.0}} = key_search_find(2.0, 2, Long),
+ {value,{_,33988.0}} = key_search_find(33988, 2, Long),
+ {value,{_,33988.0}} = key_search_find(33988.0, 2, Long),
ok.
%% Test both lists:keysearch/3 and lists:keyfind/3. The only
@@ -333,29 +318,29 @@ key_search_find(Key, Pos, List) ->
end.
dropwhile(Config) when is_list(Config) ->
- ?line F = fun(C) -> C =:= $@ end,
+ F = fun(C) -> C =:= $@ end,
- ?line [] = lists:dropwhile(F, []),
- ?line [a] = lists:dropwhile(F, [a]),
- ?line [a,b] = lists:dropwhile(F, [a,b]),
- ?line [a,b,c] = lists:dropwhile(F, [a,b,c]),
+ [] = lists:dropwhile(F, []),
+ [a] = lists:dropwhile(F, [a]),
+ [a,b] = lists:dropwhile(F, [a,b]),
+ [a,b,c] = lists:dropwhile(F, [a,b,c]),
- ?line [] = lists:dropwhile(F, [$@]),
- ?line [] = lists:dropwhile(F, [$@,$@]),
- ?line [a,$@] = lists:dropwhile(F, [$@,a,$@]),
+ [] = lists:dropwhile(F, [$@]),
+ [] = lists:dropwhile(F, [$@,$@]),
+ [a,$@] = lists:dropwhile(F, [$@,a,$@]),
- ?line [$k] = lists:dropwhile(F, [$@,$k]),
- ?line [$k,$l] = lists:dropwhile(F, [$@,$@,$k,$l]),
- ?line [a] = lists:dropwhile(F, [$@,$@,$@,a]),
+ [$k] = lists:dropwhile(F, [$@,$k]),
+ [$k,$l] = lists:dropwhile(F, [$@,$@,$k,$l]),
+ [a] = lists:dropwhile(F, [$@,$@,$@,a]),
- ?line [a,$@,b] = lists:dropwhile(F, [$@,a,$@,b]),
- ?line [a,$@,b] = lists:dropwhile(F, [$@,$@,a,$@,b]),
- ?line [a,$@,b] = lists:dropwhile(F, [$@,$@,$@,a,$@,b]),
+ [a,$@,b] = lists:dropwhile(F, [$@,a,$@,b]),
+ [a,$@,b] = lists:dropwhile(F, [$@,$@,a,$@,b]),
+ [a,$@,b] = lists:dropwhile(F, [$@,$@,$@,a,$@,b]),
Long = lists:seq(1, 1024),
Shorter = lists:seq(800, 1024),
- ?line Shorter = lists:dropwhile(fun(E) -> E < 800 end, Long),
+ Shorter = lists:dropwhile(fun(E) -> E < 800 end, Long),
ok.
@@ -386,41 +371,35 @@ takewhile(Config) when is_list(Config) ->
ok.
-keystore(doc) ->
- ["OTP-XXX."];
-keystore(suite) -> [];
keystore(Config) when is_list(Config) ->
- ?line {'EXIT',_} = (catch lists:keystore(key, 0, [], {1})),
- ?line {'EXIT',_} = (catch lists:keystore(key, 1, {}, {})),
- ?line {'EXIT',_} = (catch lists:keystore(key, 1, {a,b}, {})),
- ?line {'EXIT', _} = (catch lists:keystore(a, 2, [{1,a}], b)),
+ {'EXIT',_} = (catch lists:keystore(key, 0, [], {1})),
+ {'EXIT',_} = (catch lists:keystore(key, 1, {}, {})),
+ {'EXIT',_} = (catch lists:keystore(key, 1, {a,b}, {})),
+ {'EXIT', _} = (catch lists:keystore(a, 2, [{1,a}], b)),
T = {k,17},
- ?line [T] = lists:keystore(a, 2, [], T),
- ?line [{1,a},{2,b},{k,17}] = lists:keystore(c, 2, [{1,a},{2,b}],T),
+ [T] = lists:keystore(a, 2, [], T),
+ [{1,a},{2,b},{k,17}] = lists:keystore(c, 2, [{1,a},{2,b}],T),
L = [{1,a},{2,b},{3,c}],
- ?line [{k,17},{2,b},{3,c}] = lists:keystore(a, 2, L, T),
- ?line [{1,a},{k,17},{3,c}] = lists:keystore(b, 2, L, T),
- ?line [{1,a},{2,b},{k,17}] = lists:keystore(c, 2, L, T),
- ?line [{2,b}] = lists:keystore(a, 2, [{1,a}], {2,b}),
- ?line [{1,a}] = lists:keystore(foo, 1, [], {1,a}),
+ [{k,17},{2,b},{3,c}] = lists:keystore(a, 2, L, T),
+ [{1,a},{k,17},{3,c}] = lists:keystore(b, 2, L, T),
+ [{1,a},{2,b},{k,17}] = lists:keystore(c, 2, L, T),
+ [{2,b}] = lists:keystore(a, 2, [{1,a}], {2,b}),
+ [{1,a}] = lists:keystore(foo, 1, [], {1,a}),
ok.
-keytake(doc) ->
- ["OTP-XXX."];
-keytake(suite) -> [];
keytake(Config) when is_list(Config) ->
- ?line {'EXIT',_} = (catch lists:keytake(key, 0, [])),
- ?line {'EXIT',_} = (catch lists:keytake(key, 1, {})),
- ?line {'EXIT',_} = (catch lists:keytake(key, 1, {a,b})),
- ?line false = lists:keytake(key, 2, [{a}]),
- ?line false = lists:keytake(key, 1, [a]),
- ?line false = lists:keytake(k, 1, []),
- ?line false = lists:keytake(k, 1, [{a},{b},{c}]),
+ {'EXIT',_} = (catch lists:keytake(key, 0, [])),
+ {'EXIT',_} = (catch lists:keytake(key, 1, {})),
+ {'EXIT',_} = (catch lists:keytake(key, 1, {a,b})),
+ false = lists:keytake(key, 2, [{a}]),
+ false = lists:keytake(key, 1, [a]),
+ false = lists:keytake(k, 1, []),
+ false = lists:keytake(k, 1, [{a},{b},{c}]),
L = [{a,1},{b,2},{c,3}],
- ?line {value,{a,1},[{b,2},{c,3}]} = lists:keytake(1, 2, L),
- ?line {value,{b,2},[{a,1},{c,3}]} = lists:keytake(2, 2, L),
- ?line {value,{c,3},[{a,1},{b,2}]} = lists:keytake(3, 2, L),
- ?line false = lists:keytake(4, 2, L),
+ {value,{a,1},[{b,2},{c,3}]} = lists:keytake(1, 2, L),
+ {value,{b,2},[{a,1},{c,3}]} = lists:keytake(2, 2, L),
+ {value,{c,3},[{a,1},{b,2}]} = lists:keytake(3, 2, L),
+ false = lists:keytake(4, 2, L),
ok.
%% Test lists:keyreplace/4.
@@ -434,153 +413,147 @@ keyreplace(Config) when is_list(Config) ->
{'EXIT',_} = (catch lists:keyreplace(k, 0, [], {a,b})),
ok.
-merge(doc) -> ["merge functions"];
-merge(suite) -> [];
merge(Config) when is_list(Config) ->
%% merge list of lists
- ?line [] = lists:merge([]),
- ?line [] = lists:merge([[]]),
- ?line [] = lists:merge([[],[]]),
- ?line [] = lists:merge([[],[],[]]),
- ?line [1] = lists:merge([[1]]),
- ?line [1,1,2,2] = lists:merge([[1,2],[1,2]]),
- ?line [1] = lists:merge([[1],[],[]]),
- ?line [1] = lists:merge([[],[1],[]]),
- ?line [1] = lists:merge([[],[],[1]]),
- ?line [1,2] = lists:merge([[1],[2],[]]),
- ?line [1,2] = lists:merge([[1],[],[2]]),
- ?line [1,2] = lists:merge([[],[1],[2]]),
- ?line [1,2,3,4,5,6] = lists:merge([[1,2],[],[5,6],[],[3,4],[]]),
- ?line [1,2,3,4] = lists:merge([[4],[3],[2],[1]]),
- ?line [1,2,3,4,5] = lists:merge([[1],[2],[3],[4],[5]]),
- ?line [1,2,3,4,5,6] = lists:merge([[1],[2],[3],[4],[5],[6]]),
- ?line [1,2,3,4,5,6,7,8,9] =
+ [] = lists:merge([]),
+ [] = lists:merge([[]]),
+ [] = lists:merge([[],[]]),
+ [] = lists:merge([[],[],[]]),
+ [1] = lists:merge([[1]]),
+ [1,1,2,2] = lists:merge([[1,2],[1,2]]),
+ [1] = lists:merge([[1],[],[]]),
+ [1] = lists:merge([[],[1],[]]),
+ [1] = lists:merge([[],[],[1]]),
+ [1,2] = lists:merge([[1],[2],[]]),
+ [1,2] = lists:merge([[1],[],[2]]),
+ [1,2] = lists:merge([[],[1],[2]]),
+ [1,2,3,4,5,6] = lists:merge([[1,2],[],[5,6],[],[3,4],[]]),
+ [1,2,3,4] = lists:merge([[4],[3],[2],[1]]),
+ [1,2,3,4,5] = lists:merge([[1],[2],[3],[4],[5]]),
+ [1,2,3,4,5,6] = lists:merge([[1],[2],[3],[4],[5],[6]]),
+ [1,2,3,4,5,6,7,8,9] =
lists:merge([[1],[2],[3],[4],[5],[6],[7],[8],[9]]),
Seq = lists:seq(1,100),
- ?line true = Seq == lists:merge(lists:map(fun(E) -> [E] end, Seq)),
+ true = Seq == lists:merge(lists:map(fun(E) -> [E] end, Seq)),
Two = [1,2],
Six = [1,2,3,4,5,6],
%% 2-way merge
- ?line [] = lists:merge([], []),
- ?line Two = lists:merge(Two, []),
- ?line Two = lists:merge([], Two),
- ?line Six = lists:merge([1,3,5], [2,4,6]),
- ?line Six = lists:merge([2,4,6], [1,3,5]),
- ?line Six = lists:merge([1,2,3], [4,5,6]),
- ?line Six = lists:merge([4,5,6], [1,2,3]),
- ?line Six = lists:merge([1,2,5],[3,4,6]),
- ?line [1,2,3,5,7] = lists:merge([1,3,5,7], [2]),
- ?line [1,2,3,4,5,7] = lists:merge([1,3,5,7], [2,4]),
- ?line [1,2,3,4,5,6,7] = lists:merge([1,3,5,7], [2,4,6]),
- ?line [1,2,3,5,7] = lists:merge([2], [1,3,5,7]),
- ?line [1,2,3,4,5,7] = lists:merge([2,4], [1,3,5,7]),
- ?line [1,2,3,4,5,6,7] = lists:merge([2,4,6], [1,3,5,7]),
+ [] = lists:merge([], []),
+ Two = lists:merge(Two, []),
+ Two = lists:merge([], Two),
+ Six = lists:merge([1,3,5], [2,4,6]),
+ Six = lists:merge([2,4,6], [1,3,5]),
+ Six = lists:merge([1,2,3], [4,5,6]),
+ Six = lists:merge([4,5,6], [1,2,3]),
+ Six = lists:merge([1,2,5],[3,4,6]),
+ [1,2,3,5,7] = lists:merge([1,3,5,7], [2]),
+ [1,2,3,4,5,7] = lists:merge([1,3,5,7], [2,4]),
+ [1,2,3,4,5,6,7] = lists:merge([1,3,5,7], [2,4,6]),
+ [1,2,3,5,7] = lists:merge([2], [1,3,5,7]),
+ [1,2,3,4,5,7] = lists:merge([2,4], [1,3,5,7]),
+ [1,2,3,4,5,6,7] = lists:merge([2,4,6], [1,3,5,7]),
%% 3-way merge
- ?line [] = lists:merge3([], [], []),
- ?line Two = lists:merge3([], [], Two),
- ?line Two = lists:merge3([], Two, []),
- ?line Two = lists:merge3(Two, [], []),
- ?line Six = lists:merge3([], [1,3,5], [2,4,6]),
- ?line Six = lists:merge3([1,3,5], [], [2,4,6]),
- ?line Six = lists:merge3([1,3,5], [2,4,6], []),
- ?line Nine = lists:merge3([1,4,7],[2,5,8],[3,6,9]),
- ?line Nine = lists:merge3([1,4,7],[3,6,9],[2,5,8]),
- ?line Nine = lists:merge3([3,6,9],[1,4,7],[2,5,8]),
- ?line Nine = lists:merge3([4,5,6],[1,2,3],[7,8,9]),
- ?line Nine = lists:merge3([1,2,3],[4,5,6],[7,8,9]),
- ?line Nine = lists:merge3([7,8,9],[4,5,6],[1,2,3]),
- ?line Nine = lists:merge3([4,5,6],[7,8,9],[1,2,3]),
-
- ok.
-
-rmerge(doc) -> ["reverse merge functions"];
-rmerge(suite) -> [];
+ [] = lists:merge3([], [], []),
+ Two = lists:merge3([], [], Two),
+ Two = lists:merge3([], Two, []),
+ Two = lists:merge3(Two, [], []),
+ Six = lists:merge3([], [1,3,5], [2,4,6]),
+ Six = lists:merge3([1,3,5], [], [2,4,6]),
+ Six = lists:merge3([1,3,5], [2,4,6], []),
+ Nine = lists:merge3([1,4,7],[2,5,8],[3,6,9]),
+ Nine = lists:merge3([1,4,7],[3,6,9],[2,5,8]),
+ Nine = lists:merge3([3,6,9],[1,4,7],[2,5,8]),
+ Nine = lists:merge3([4,5,6],[1,2,3],[7,8,9]),
+ Nine = lists:merge3([1,2,3],[4,5,6],[7,8,9]),
+ Nine = lists:merge3([7,8,9],[4,5,6],[1,2,3]),
+ Nine = lists:merge3([4,5,6],[7,8,9],[1,2,3]),
+
+ ok.
+
+%% reverse merge functions
rmerge(Config) when is_list(Config) ->
Two = [2,1],
Six = [6,5,4,3,2,1],
%% 2-way reversed merge
- ?line [] = lists:rmerge([], []),
- ?line Two = lists:rmerge(Two, []),
- ?line Two = lists:rmerge([], Two),
- ?line Six = lists:rmerge([5,3,1], [6,4,2]),
- ?line Six = lists:rmerge([6,4,2], [5,3,1]),
- ?line Six = lists:rmerge([3,2,1], [6,5,4]),
- ?line Six = lists:rmerge([6,5,4], [3,2,1]),
- ?line Six = lists:rmerge([4,3,2],[6,5,1]),
- ?line [7,6,5,3,1] = lists:rmerge([7,5,3,1], [6]),
- ?line [7,6,5,4,3,1] = lists:rmerge([7,5,3,1], [6,4]),
- ?line [7,6,5,4,3,2,1] = lists:rmerge([7,5,3,1], [6,4,2]),
- ?line [7,5,3,2,1] = lists:rmerge([2], [7,5,3,1]),
- ?line [7,5,4,3,2,1] = lists:rmerge([4,2], [7,5,3,1]),
- ?line [7,6,5,4,3,2,1] = lists:rmerge([6,4,2], [7,5,3,1]),
+ [] = lists:rmerge([], []),
+ Two = lists:rmerge(Two, []),
+ Two = lists:rmerge([], Two),
+ Six = lists:rmerge([5,3,1], [6,4,2]),
+ Six = lists:rmerge([6,4,2], [5,3,1]),
+ Six = lists:rmerge([3,2,1], [6,5,4]),
+ Six = lists:rmerge([6,5,4], [3,2,1]),
+ Six = lists:rmerge([4,3,2],[6,5,1]),
+ [7,6,5,3,1] = lists:rmerge([7,5,3,1], [6]),
+ [7,6,5,4,3,1] = lists:rmerge([7,5,3,1], [6,4]),
+ [7,6,5,4,3,2,1] = lists:rmerge([7,5,3,1], [6,4,2]),
+ [7,5,3,2,1] = lists:rmerge([2], [7,5,3,1]),
+ [7,5,4,3,2,1] = lists:rmerge([4,2], [7,5,3,1]),
+ [7,6,5,4,3,2,1] = lists:rmerge([6,4,2], [7,5,3,1]),
Nine = [9,8,7,6,5,4,3,2,1],
%% 3-way reversed merge
- ?line [] = lists:rmerge3([], [], []),
- ?line Two = lists:rmerge3([], [], Two),
- ?line Two = lists:rmerge3([], Two, []),
- ?line Two = lists:rmerge3(Two, [], []),
- ?line Six = lists:rmerge3([], [5,3,1], [6,4,2]),
- ?line Six = lists:rmerge3([5,3,1], [], [6,4,2]),
- ?line Six = lists:rmerge3([5,3,1], [6,4,2], []),
- ?line Nine = lists:rmerge3([7,4,1],[8,5,2],[9,6,3]),
- ?line Nine = lists:rmerge3([7,4,1],[9,6,3],[8,5,2]),
- ?line Nine = lists:rmerge3([9,6,3],[7,4,1],[8,5,2]),
- ?line Nine = lists:rmerge3([6,5,4],[3,2,1],[9,8,7]),
- ?line Nine = lists:rmerge3([3,2,1],[6,5,4],[9,8,7]),
- ?line Nine = lists:rmerge3([9,8,7],[6,5,4],[3,2,1]),
- ?line Nine = lists:rmerge3([6,5,4],[9,8,7],[3,2,1]),
-
- ok.
-
-sort_1(doc) -> ["sort/1"];
-sort_1(suite) -> [];
+ [] = lists:rmerge3([], [], []),
+ Two = lists:rmerge3([], [], Two),
+ Two = lists:rmerge3([], Two, []),
+ Two = lists:rmerge3(Two, [], []),
+ Six = lists:rmerge3([], [5,3,1], [6,4,2]),
+ Six = lists:rmerge3([5,3,1], [], [6,4,2]),
+ Six = lists:rmerge3([5,3,1], [6,4,2], []),
+ Nine = lists:rmerge3([7,4,1],[8,5,2],[9,6,3]),
+ Nine = lists:rmerge3([7,4,1],[9,6,3],[8,5,2]),
+ Nine = lists:rmerge3([9,6,3],[7,4,1],[8,5,2]),
+ Nine = lists:rmerge3([6,5,4],[3,2,1],[9,8,7]),
+ Nine = lists:rmerge3([3,2,1],[6,5,4],[9,8,7]),
+ Nine = lists:rmerge3([9,8,7],[6,5,4],[3,2,1]),
+ Nine = lists:rmerge3([6,5,4],[9,8,7],[3,2,1]),
+
+ ok.
+
sort_1(Config) when is_list(Config) ->
- ?line [] = lists:sort([]),
- ?line [a] = lists:sort([a]),
- ?line [a,a] = lists:sort([a,a]),
- ?line [a,b] = lists:sort([a,b]),
- ?line [a,b] = lists:sort([b,a]),
- ?line [1,1] = lists:sort([1,1]),
- ?line [1,1,2,3] = lists:sort([1,1,3,2]),
- ?line [1,2,3,3] = lists:sort([3,3,1,2]),
- ?line [1,1,1,1] = lists:sort([1,1,1,1]),
- ?line [1,1,1,2,2,2,3,3,3] = lists:sort([3,3,3,2,2,2,1,1,1]),
- ?line [1,1,1,2,2,2,3,3,3] = lists:sort([1,1,1,2,2,2,3,3,3]),
-
- ?line lists:foreach(fun check/1, perms([1,2,3])),
- ?line lists:foreach(fun check/1, perms([1,2,3,4,5,6,7,8])),
- ok.
-
-sort_rand(doc) -> ["sort/1 on big randomized lists"];
-sort_rand(suite) -> [];
+ [] = lists:sort([]),
+ [a] = lists:sort([a]),
+ [a,a] = lists:sort([a,a]),
+ [a,b] = lists:sort([a,b]),
+ [a,b] = lists:sort([b,a]),
+ [1,1] = lists:sort([1,1]),
+ [1,1,2,3] = lists:sort([1,1,3,2]),
+ [1,2,3,3] = lists:sort([3,3,1,2]),
+ [1,1,1,1] = lists:sort([1,1,1,1]),
+ [1,1,1,2,2,2,3,3,3] = lists:sort([3,3,3,2,2,2,1,1,1]),
+ [1,1,1,2,2,2,3,3,3] = lists:sort([1,1,1,2,2,2,3,3,3]),
+
+ lists:foreach(fun check/1, perms([1,2,3])),
+ lists:foreach(fun check/1, perms([1,2,3,4,5,6,7,8])),
+ ok.
+
+%% sort/1 on big randomized lists
sort_rand(Config) when is_list(Config) ->
- ?line ok = check(biglist(10)),
- ?line ok = check(biglist(100)),
- ?line ok = check(biglist(1000)),
- ?line ok = check(biglist(10000)),
+ ok = check(biglist(10)),
+ ok = check(biglist(100)),
+ ok = check(biglist(1000)),
+ ok = check(biglist(10000)),
ok.
%% sort/1 was really stable for a while - the order of equal elements
%% was kept - but since the performance suffered a bit, this "feature"
%% was removed.
-sort_stable(doc) -> ["sort/1 should be stable for equal terms."];
-sort_stable(suite) -> [];
+
+%% sort/1 should be stable for equal terms.
sort_stable(Config) when is_list(Config) ->
- ?line ok = check_stability(bigfunlist(10)),
- ?line ok = check_stability(bigfunlist(100)),
- ?line ok = check_stability(bigfunlist(1000)),
- ?line case erlang:system_info(modified_timing_level) of
- undefined -> ok = check_stability(bigfunlist(10000));
- _ -> ok
- end,
+ ok = check_stability(bigfunlist(10)),
+ ok = check_stability(bigfunlist(100)),
+ ok = check_stability(bigfunlist(1000)),
+ case erlang:system_info(modified_timing_level) of
+ undefined -> ok = check_stability(bigfunlist(10000));
+ _ -> ok
+ end,
ok.
check([]) ->
@@ -619,188 +592,180 @@ expl_pid([], L) ->
L.
-usort_1(suite) -> [];
-usort_1(doc) -> [""];
usort_1(Conf) when is_list(Conf) ->
- ?line [] = lists:usort([]),
- ?line [1] = lists:usort([1]),
- ?line [1] = lists:usort([1,1]),
- ?line [1] = lists:usort([1,1,1,1,1]),
- ?line [1,2] = lists:usort([1,2]),
- ?line [1,2] = lists:usort([1,2,1]),
- ?line [1,2] = lists:usort([1,2,2]),
- ?line [1,2,3] = lists:usort([1,3,2]),
- ?line [1,3] = lists:usort([3,1,3]),
- ?line [0,1,3] = lists:usort([3,1,0]),
- ?line [1,2,3] = lists:usort([3,1,2]),
- ?line [1,2] = lists:usort([2,1,1]),
- ?line [1,2] = lists:usort([2,1]),
- ?line [0,3,4,8,9] = lists:usort([3,8,9,0,9,4]),
-
- ?line lists:foreach(fun ucheck/1, perms([1,2,3])),
- ?line lists:foreach(fun ucheck/1, perms([1,2,3,4,5,6,2,1])),
-
- ok.
-
-umerge(suite) -> [];
-umerge(doc) -> [""];
+ [] = lists:usort([]),
+ [1] = lists:usort([1]),
+ [1] = lists:usort([1,1]),
+ [1] = lists:usort([1,1,1,1,1]),
+ [1,2] = lists:usort([1,2]),
+ [1,2] = lists:usort([1,2,1]),
+ [1,2] = lists:usort([1,2,2]),
+ [1,2,3] = lists:usort([1,3,2]),
+ [1,3] = lists:usort([3,1,3]),
+ [0,1,3] = lists:usort([3,1,0]),
+ [1,2,3] = lists:usort([3,1,2]),
+ [1,2] = lists:usort([2,1,1]),
+ [1,2] = lists:usort([2,1]),
+ [0,3,4,8,9] = lists:usort([3,8,9,0,9,4]),
+
+ lists:foreach(fun ucheck/1, perms([1,2,3])),
+ lists:foreach(fun ucheck/1, perms([1,2,3,4,5,6,2,1])),
+
+ ok.
+
umerge(Conf) when is_list(Conf) ->
%% merge list of lists
- ?line [] = lists:umerge([]),
- ?line [] = lists:umerge([[]]),
- ?line [] = lists:umerge([[],[]]),
- ?line [] = lists:umerge([[],[],[]]),
- ?line [1] = lists:umerge([[1]]),
- ?line [1,2] = lists:umerge([[1,2],[1,2]]),
- ?line [1] = lists:umerge([[1],[],[]]),
- ?line [1] = lists:umerge([[],[1],[]]),
- ?line [1] = lists:umerge([[],[],[1]]),
- ?line [1,2] = lists:umerge([[1],[2],[]]),
- ?line [1,2] = lists:umerge([[1],[],[2]]),
- ?line [1,2] = lists:umerge([[],[1],[2]]),
- ?line [1,2,3,4,5,6] = lists:umerge([[1,2],[],[5,6],[],[3,4],[]]),
- ?line [1,2,3,4] = lists:umerge([[4],[3],[2],[1]]),
- ?line [1,2,3,4,5] = lists:umerge([[1],[2],[3],[4],[5]]),
- ?line [1,2,3,4,5,6] = lists:umerge([[1],[2],[3],[4],[5],[6]]),
- ?line [1,2,3,4,5,6,7,8,9] =
+ [] = lists:umerge([]),
+ [] = lists:umerge([[]]),
+ [] = lists:umerge([[],[]]),
+ [] = lists:umerge([[],[],[]]),
+ [1] = lists:umerge([[1]]),
+ [1,2] = lists:umerge([[1,2],[1,2]]),
+ [1] = lists:umerge([[1],[],[]]),
+ [1] = lists:umerge([[],[1],[]]),
+ [1] = lists:umerge([[],[],[1]]),
+ [1,2] = lists:umerge([[1],[2],[]]),
+ [1,2] = lists:umerge([[1],[],[2]]),
+ [1,2] = lists:umerge([[],[1],[2]]),
+ [1,2,3,4,5,6] = lists:umerge([[1,2],[],[5,6],[],[3,4],[]]),
+ [1,2,3,4] = lists:umerge([[4],[3],[2],[1]]),
+ [1,2,3,4,5] = lists:umerge([[1],[2],[3],[4],[5]]),
+ [1,2,3,4,5,6] = lists:umerge([[1],[2],[3],[4],[5],[6]]),
+ [1,2,3,4,5,6,7,8,9] =
lists:umerge([[1],[2],[3],[4],[5],[6],[7],[8],[9]]),
- ?line [1,2,4,6,8] = lists:umerge([[1,2],[2,4,6,8]]),
+ [1,2,4,6,8] = lists:umerge([[1,2],[2,4,6,8]]),
Seq = lists:seq(1,100),
- ?line true = Seq == lists:umerge(lists:map(fun(E) -> [E] end, Seq)),
+ true = Seq == lists:umerge(lists:map(fun(E) -> [E] end, Seq)),
Two = [1,2],
Six = [1,2,3,4,5,6],
%% 2-way unique merge
- ?line [] = lists:umerge([], []),
- ?line Two = lists:umerge(Two, []),
- ?line Two = lists:umerge([], Two),
- ?line Six = lists:umerge([1,3,5], [2,4,6]),
- ?line Six = lists:umerge([2,4,6], [1,3,5]),
- ?line Six = lists:umerge([1,2,3], [4,5,6]),
- ?line Six = lists:umerge([4,5,6], [1,2,3]),
- ?line Six = lists:umerge([1,2,5],[3,4,6]),
- ?line [1,2,3,5,7] = lists:umerge([1,3,5,7], [2]),
- ?line [1,2,3,4,5,7] = lists:umerge([1,3,5,7], [2,4]),
- ?line [1,2,3,4,5,6,7] = lists:umerge([1,3,5,7], [2,4,6]),
- ?line [1,2,3,5,7] = lists:umerge([2], [1,3,5,7]),
- ?line [1,2,3,4,5,7] = lists:umerge([2,4], [1,3,5,7]),
- ?line [1,2,3,4,5,6,7] = lists:umerge([2,4,6], [1,3,5,7]),
-
- ?line [1,2,3,5,7] = lists:umerge([1,2,3,5,7], [2]),
- ?line [1,2,3,4,5,7] = lists:umerge([1,2,3,4,5,7], [2,4]),
- ?line [1,2,3,4,5,6,7] = lists:umerge([1,2,3,4,5,6,7], [2,4,6]),
- ?line [1,2,3,5,7] = lists:umerge([2], [1,2,3,5,7]),
- ?line [1,2,3,4,5,7] = lists:umerge([2,4], [1,2,3,4,5,7]),
- ?line [1,2,3,4,5,6,7] = lists:umerge([2,4,6], [1,2,3,4,5,6,7]),
+ [] = lists:umerge([], []),
+ Two = lists:umerge(Two, []),
+ Two = lists:umerge([], Two),
+ Six = lists:umerge([1,3,5], [2,4,6]),
+ Six = lists:umerge([2,4,6], [1,3,5]),
+ Six = lists:umerge([1,2,3], [4,5,6]),
+ Six = lists:umerge([4,5,6], [1,2,3]),
+ Six = lists:umerge([1,2,5],[3,4,6]),
+ [1,2,3,5,7] = lists:umerge([1,3,5,7], [2]),
+ [1,2,3,4,5,7] = lists:umerge([1,3,5,7], [2,4]),
+ [1,2,3,4,5,6,7] = lists:umerge([1,3,5,7], [2,4,6]),
+ [1,2,3,5,7] = lists:umerge([2], [1,3,5,7]),
+ [1,2,3,4,5,7] = lists:umerge([2,4], [1,3,5,7]),
+ [1,2,3,4,5,6,7] = lists:umerge([2,4,6], [1,3,5,7]),
+
+ [1,2,3,5,7] = lists:umerge([1,2,3,5,7], [2]),
+ [1,2,3,4,5,7] = lists:umerge([1,2,3,4,5,7], [2,4]),
+ [1,2,3,4,5,6,7] = lists:umerge([1,2,3,4,5,6,7], [2,4,6]),
+ [1,2,3,5,7] = lists:umerge([2], [1,2,3,5,7]),
+ [1,2,3,4,5,7] = lists:umerge([2,4], [1,2,3,4,5,7]),
+ [1,2,3,4,5,6,7] = lists:umerge([2,4,6], [1,2,3,4,5,6,7]),
%% 3-way unique merge
- ?line [] = lists:umerge3([], [], []),
- ?line Two = lists:umerge3([], [], Two),
- ?line Two = lists:umerge3([], Two, []),
- ?line Two = lists:umerge3(Two, [], []),
- ?line Six = lists:umerge3([], [1,3,5], [2,4,6]),
- ?line Six = lists:umerge3([1,3,5], [], [2,4,6]),
- ?line Six = lists:umerge3([1,3,5], [2,4,6], []),
- ?line Nine = lists:umerge3([1,4,7],[2,5,8],[3,6,9]),
- ?line Nine = lists:umerge3([1,4,7],[3,6,9],[2,5,8]),
- ?line Nine = lists:umerge3([3,6,9],[1,4,7],[2,5,8]),
- ?line Nine = lists:umerge3([4,5,6],[1,2,3],[7,8,9]),
- ?line Nine = lists:umerge3([1,2,3],[4,5,6],[7,8,9]),
- ?line Nine = lists:umerge3([7,8,9],[4,5,6],[1,2,3]),
- ?line Nine = lists:umerge3([4,5,6],[7,8,9],[1,2,3]),
-
- ?line [1,2,3] = lists:umerge3([1,2,3],[1,2,3],[1,2,3]),
- ?line [1,2,3,4] = lists:umerge3([2,3,4],[1,2,3],[2,3,4]),
- ?line [1,2,3] = lists:umerge3([1,2,3],[2,3],[1,2,3]),
- ?line [1,2,3,4] = lists:umerge3([2,3,4],[3,4],[1,2,3]),
-
- ok.
-
-rumerge(suite) -> [];
-rumerge(doc) -> [""];
+ [] = lists:umerge3([], [], []),
+ Two = lists:umerge3([], [], Two),
+ Two = lists:umerge3([], Two, []),
+ Two = lists:umerge3(Two, [], []),
+ Six = lists:umerge3([], [1,3,5], [2,4,6]),
+ Six = lists:umerge3([1,3,5], [], [2,4,6]),
+ Six = lists:umerge3([1,3,5], [2,4,6], []),
+ Nine = lists:umerge3([1,4,7],[2,5,8],[3,6,9]),
+ Nine = lists:umerge3([1,4,7],[3,6,9],[2,5,8]),
+ Nine = lists:umerge3([3,6,9],[1,4,7],[2,5,8]),
+ Nine = lists:umerge3([4,5,6],[1,2,3],[7,8,9]),
+ Nine = lists:umerge3([1,2,3],[4,5,6],[7,8,9]),
+ Nine = lists:umerge3([7,8,9],[4,5,6],[1,2,3]),
+ Nine = lists:umerge3([4,5,6],[7,8,9],[1,2,3]),
+
+ [1,2,3] = lists:umerge3([1,2,3],[1,2,3],[1,2,3]),
+ [1,2,3,4] = lists:umerge3([2,3,4],[1,2,3],[2,3,4]),
+ [1,2,3] = lists:umerge3([1,2,3],[2,3],[1,2,3]),
+ [1,2,3,4] = lists:umerge3([2,3,4],[3,4],[1,2,3]),
+
+ ok.
+
rumerge(Conf) when is_list(Conf) ->
Two = [2,1],
Six = [6,5,4,3,2,1],
%% 2-way reversed unique merge
- ?line [] = lists:rumerge([], []),
- ?line Two = lists:rumerge(Two, []),
- ?line Two = lists:rumerge([], Two),
- ?line Six = lists:rumerge([5,3,1], [6,4,2]),
- ?line Six = lists:rumerge([6,4,2], [5,3,1]),
- ?line Six = lists:rumerge([3,2,1], [6,5,4]),
- ?line Six = lists:rumerge([6,5,4], [3,2,1]),
- ?line Six = lists:rumerge([4,3,2],[6,5,1]),
- ?line [7,6,5,3,1] = lists:rumerge([7,5,3,1], [6]),
- ?line [7,6,5,4,3,1] = lists:rumerge([7,5,3,1], [6,4]),
- ?line [7,6,5,4,3,2,1] = lists:rumerge([7,5,3,1], [6,4,2]),
- ?line [7,5,3,2,1] = lists:rumerge([2], [7,5,3,1]),
- ?line [7,5,4,3,2,1] = lists:rumerge([4,2], [7,5,3,1]),
- ?line [7,6,5,4,3,2,1] = lists:rumerge([6,4,2], [7,5,3,1]),
-
- ?line [7,6,5,3,1] = lists:rumerge([7,6,5,3,1], [6]),
- ?line [7,6,5,4,3,1] = lists:rumerge([7,6,5,4,3,1], [6,4]),
- ?line [7,6,5,4,3,2,1] = lists:rumerge([7,6,5,4,3,2,1], [6,4,2]),
- ?line [7,5,3,2,1] = lists:rumerge([2], [7,5,3,2,1]),
- ?line [7,5,4,3,2,1] = lists:rumerge([4,2], [7,5,4,3,2,1]),
- ?line [7,6,5,4,3,2,1] = lists:rumerge([6,4,2], [7,6,5,4,3,2,1]),
+ [] = lists:rumerge([], []),
+ Two = lists:rumerge(Two, []),
+ Two = lists:rumerge([], Two),
+ Six = lists:rumerge([5,3,1], [6,4,2]),
+ Six = lists:rumerge([6,4,2], [5,3,1]),
+ Six = lists:rumerge([3,2,1], [6,5,4]),
+ Six = lists:rumerge([6,5,4], [3,2,1]),
+ Six = lists:rumerge([4,3,2],[6,5,1]),
+ [7,6,5,3,1] = lists:rumerge([7,5,3,1], [6]),
+ [7,6,5,4,3,1] = lists:rumerge([7,5,3,1], [6,4]),
+ [7,6,5,4,3,2,1] = lists:rumerge([7,5,3,1], [6,4,2]),
+ [7,5,3,2,1] = lists:rumerge([2], [7,5,3,1]),
+ [7,5,4,3,2,1] = lists:rumerge([4,2], [7,5,3,1]),
+ [7,6,5,4,3,2,1] = lists:rumerge([6,4,2], [7,5,3,1]),
+
+ [7,6,5,3,1] = lists:rumerge([7,6,5,3,1], [6]),
+ [7,6,5,4,3,1] = lists:rumerge([7,6,5,4,3,1], [6,4]),
+ [7,6,5,4,3,2,1] = lists:rumerge([7,6,5,4,3,2,1], [6,4,2]),
+ [7,5,3,2,1] = lists:rumerge([2], [7,5,3,2,1]),
+ [7,5,4,3,2,1] = lists:rumerge([4,2], [7,5,4,3,2,1]),
+ [7,6,5,4,3,2,1] = lists:rumerge([6,4,2], [7,6,5,4,3,2,1]),
Nine = [9,8,7,6,5,4,3,2,1],
%% 3-way reversed unique merge
- ?line [] = lists:rumerge3([], [], []),
- ?line Two = lists:rumerge3([], [], Two),
- ?line Two = lists:rumerge3([], Two, []),
- ?line Two = lists:rumerge3(Two, [], []),
- ?line Six = lists:rumerge3([], [5,3,1], [6,4,2]),
- ?line Six = lists:rumerge3([5,3,1], [], [6,4,2]),
- ?line Six = lists:rumerge3([5,3,1], [6,4,2], []),
- ?line Nine = lists:rumerge3([7,4,1],[8,5,2],[9,6,3]),
- ?line Nine = lists:rumerge3([7,4,1],[9,6,3],[8,5,2]),
- ?line Nine = lists:rumerge3([9,6,3],[7,4,1],[8,5,2]),
- ?line Nine = lists:rumerge3([6,5,4],[3,2,1],[9,8,7]),
- ?line Nine = lists:rumerge3([3,2,1],[6,5,4],[9,8,7]),
- ?line Nine = lists:rumerge3([9,8,7],[6,5,4],[3,2,1]),
- ?line Nine = lists:rumerge3([6,5,4],[9,8,7],[3,2,1]),
-
- ?line [3,2,1] = lists:rumerge3([3,2,1],[3,2,1],[3,2,1]),
- ?line [4,3,2,1] = lists:rumerge3([4,3,2],[3,2,1],[3,2,1]),
- ?line [5,4,3,2,1] = lists:rumerge3([4,3,2],[5,4,3,2],[5,4,3,2,1]),
- ?line [6,5,4,3,2] = lists:rumerge3([4,3,2],[5,4,3,2],[6,5,4,3]),
+ [] = lists:rumerge3([], [], []),
+ Two = lists:rumerge3([], [], Two),
+ Two = lists:rumerge3([], Two, []),
+ Two = lists:rumerge3(Two, [], []),
+ Six = lists:rumerge3([], [5,3,1], [6,4,2]),
+ Six = lists:rumerge3([5,3,1], [], [6,4,2]),
+ Six = lists:rumerge3([5,3,1], [6,4,2], []),
+ Nine = lists:rumerge3([7,4,1],[8,5,2],[9,6,3]),
+ Nine = lists:rumerge3([7,4,1],[9,6,3],[8,5,2]),
+ Nine = lists:rumerge3([9,6,3],[7,4,1],[8,5,2]),
+ Nine = lists:rumerge3([6,5,4],[3,2,1],[9,8,7]),
+ Nine = lists:rumerge3([3,2,1],[6,5,4],[9,8,7]),
+ Nine = lists:rumerge3([9,8,7],[6,5,4],[3,2,1]),
+ Nine = lists:rumerge3([6,5,4],[9,8,7],[3,2,1]),
+
+ [3,2,1] = lists:rumerge3([3,2,1],[3,2,1],[3,2,1]),
+ [4,3,2,1] = lists:rumerge3([4,3,2],[3,2,1],[3,2,1]),
+ [5,4,3,2,1] = lists:rumerge3([4,3,2],[5,4,3,2],[5,4,3,2,1]),
+ [6,5,4,3,2] = lists:rumerge3([4,3,2],[5,4,3,2],[6,5,4,3]),
L1 = [c,d,e],
L2 = [b,c,d],
- ?line true =
+ true =
lists:umerge(L1, L2) ==
lists:reverse(lists:rumerge(lists:reverse(L1), lists:reverse(L2))),
ok.
-usort_rand(doc) -> ["usort/1 on big randomized lists"];
-usort_rand(suite) -> [];
+%% usort/1 on big randomized lists.
usort_rand(Config) when is_list(Config) ->
- ?line ok = ucheck(biglist(10)),
- ?line ok = ucheck(biglist(100)),
- ?line ok = ucheck(biglist(1000)),
- ?line ok = ucheck(biglist(10000)),
+ ok = ucheck(biglist(10)),
+ ok = ucheck(biglist(100)),
+ ok = ucheck(biglist(1000)),
+ ok = ucheck(biglist(10000)),
- ?line ok = ucheck(ubiglist(10)),
- ?line ok = ucheck(ubiglist(100)),
- ?line ok = ucheck(ubiglist(1000)),
- ?line ok = ucheck(ubiglist(10000)),
+ ok = ucheck(ubiglist(10)),
+ ok = ucheck(ubiglist(100)),
+ ok = ucheck(ubiglist(1000)),
+ ok = ucheck(ubiglist(10000)),
ok.
-usort_stable(doc) -> ["usort/1 should keep the first duplicate."];
-usort_stable(suite) -> [];
+%% usort/1 should keep the first duplicate.
usort_stable(Config) when is_list(Config) ->
- ?line ok = ucheck_stability(bigfunlist(3)),
- ?line ok = ucheck_stability(bigfunlist(10)),
- ?line ok = ucheck_stability(bigfunlist(100)),
- ?line ok = ucheck_stability(bigfunlist(1000)),
- ?line case erlang:system_info(modified_timing_level) of
- undefined -> ok = ucheck_stability(bigfunlist(10000));
- _ -> ok
- end,
+ ok = ucheck_stability(bigfunlist(3)),
+ ok = ucheck_stability(bigfunlist(10)),
+ ok = ucheck_stability(bigfunlist(100)),
+ ok = ucheck_stability(bigfunlist(1000)),
+ case erlang:system_info(modified_timing_level) of
+ undefined -> ok = ucheck_stability(bigfunlist(10000));
+ _ -> ok
+ end,
ok.
ucheck([]) ->
@@ -829,163 +794,155 @@ ucheck_stability(L) ->
check_stab(L, U, S, "usort/1", "ukeysort/2").
-keymerge(doc) -> ["Key merge two lists."];
-keymerge(suite) -> [];
+%% Key merge two lists.
keymerge(Config) when is_list(Config) ->
Two = [{1,a},{2,b}],
Six = [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f}],
%% 2-way keymerge
- ?line [] = lists:keymerge(1, [], []),
- ?line Two = lists:keymerge(1, Two, []),
- ?line Two = lists:keymerge(1, [], Two),
- ?line Six = lists:keymerge(1, [{1,a},{3,c},{5,e}], [{2,b},{4,d},{6,f}]),
- ?line Six = lists:keymerge(1, [{2,b},{4,d},{6,f}], [{1,a},{3,c},{5,e}]),
- ?line Six = lists:keymerge(1, [{1,a},{2,b},{3,c}], [{4,d},{5,e},{6,f}]),
- ?line Six = lists:keymerge(1, [{4,d},{5,e},{6,f}], [{1,a},{2,b},{3,c}]),
- ?line Six = lists:keymerge(1, [{1,a},{2,b},{5,e}],[{3,c},{4,d},{6,f}]),
- ?line [{1,a},{2,b},{3,c},{5,e},{7,g}] =
+ [] = lists:keymerge(1, [], []),
+ Two = lists:keymerge(1, Two, []),
+ Two = lists:keymerge(1, [], Two),
+ Six = lists:keymerge(1, [{1,a},{3,c},{5,e}], [{2,b},{4,d},{6,f}]),
+ Six = lists:keymerge(1, [{2,b},{4,d},{6,f}], [{1,a},{3,c},{5,e}]),
+ Six = lists:keymerge(1, [{1,a},{2,b},{3,c}], [{4,d},{5,e},{6,f}]),
+ Six = lists:keymerge(1, [{4,d},{5,e},{6,f}], [{1,a},{2,b},{3,c}]),
+ Six = lists:keymerge(1, [{1,a},{2,b},{5,e}],[{3,c},{4,d},{6,f}]),
+ [{1,a},{2,b},{3,c},{5,e},{7,g}] =
lists:keymerge(1, [{1,a},{3,c},{5,e},{7,g}], [{2,b}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
lists:keymerge(1, [{1,a},{3,c},{5,e},{7,g}], [{2,b},{4,d}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
lists:keymerge(1, [{1,a},{3,c},{5,e},{7,g}], [{2,b},{4,d},{6,f}]),
- ?line [{1,a},{2,b},{3,c},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{5,e},{7,g}] =
lists:keymerge(1, [{2,b}], [{1,a},{3,c},{5,e},{7,g}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
lists:keymerge(1, [{2,b},{4,d}], [{1,a},{3,c},{5,e},{7,g}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
lists:keymerge(1, [{2,b},{4,d},{6,f}], [{1,a},{3,c},{5,e},{7,g}]),
- ?line [{b,2},{c,11},{c,12},{c,21},{c,22},{e,5}] =
+ [{b,2},{c,11},{c,12},{c,21},{c,22},{e,5}] =
lists:keymerge(1,[{c,11},{c,12},{e,5}], [{b,2},{c,21},{c,22}]),
ok.
-rkeymerge(doc) -> ["Reverse key merge two lists."];
-rkeymerge(suite) -> [];
+%% Reverse key merge two lists.
rkeymerge(Config) when is_list(Config) ->
Two = [{2,b},{1,a}],
Six = [{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}],
%% 2-way reversed keymerge
- ?line [] = lists:rkeymerge(1, [], []),
- ?line Two = lists:rkeymerge(1, Two, []),
- ?line Two = lists:rkeymerge(1, [], Two),
- ?line Six = lists:rkeymerge(1, [{5,e},{3,c},{1,a}], [{6,f},{4,d},{2,b}]),
- ?line Six = lists:rkeymerge(1, [{6,f},{4,d},{2,b}], [{5,e},{3,c},{1,a}]),
- ?line Six = lists:rkeymerge(1, [{3,c},{2,b},{1,a}], [{6,f},{5,e},{4,d}]),
- ?line Six = lists:rkeymerge(1, [{6,f},{5,e},{4,d}], [{3,c},{2,b},{1,a}]),
- ?line Six = lists:rkeymerge(1, [{4,d},{3,c},{2,b}],[{6,f},{5,e},{1,a}]),
- ?line [{7,g},{6,f},{5,e},{3,c},{1,a}] =
+ [] = lists:rkeymerge(1, [], []),
+ Two = lists:rkeymerge(1, Two, []),
+ Two = lists:rkeymerge(1, [], Two),
+ Six = lists:rkeymerge(1, [{5,e},{3,c},{1,a}], [{6,f},{4,d},{2,b}]),
+ Six = lists:rkeymerge(1, [{6,f},{4,d},{2,b}], [{5,e},{3,c},{1,a}]),
+ Six = lists:rkeymerge(1, [{3,c},{2,b},{1,a}], [{6,f},{5,e},{4,d}]),
+ Six = lists:rkeymerge(1, [{6,f},{5,e},{4,d}], [{3,c},{2,b},{1,a}]),
+ Six = lists:rkeymerge(1, [{4,d},{3,c},{2,b}],[{6,f},{5,e},{1,a}]),
+ [{7,g},{6,f},{5,e},{3,c},{1,a}] =
lists:rkeymerge(1, [{7,g},{5,e},{3,c},{1,a}], [{6,f}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{1,a}] =
lists:rkeymerge(1, [{7,g},{5,e},{3,c},{1,a}], [{6,f},{4,d}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rkeymerge(1, [{7,g},{5,e},{3,c},{1,a}], [{6,f},{4,d},{2,b}]),
- ?line [{7,g},{5,e},{3,c},{2,b},{1,a}] =
+ [{7,g},{5,e},{3,c},{2,b},{1,a}] =
lists:rkeymerge(1, [{2,b}], [{7,g},{5,e},{3,c},{1,a}]),
- ?line [{7,g},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rkeymerge(1, [{4,d},{2,b}], [{7,g},{5,e},{3,c},{1,a}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rkeymerge(1, [{6,f},{4,d},{2,b}], [{7,g},{5,e},{3,c},{1,a}]),
L1 = [{c,11},{c,12},{e,5}],
L2 = [{b,2},{c,21},{c,22}],
- ?line true =
+ true =
lists:keymerge(1, L1, L2) ==
lists:reverse(lists:rkeymerge(1,lists:reverse(L1),
lists:reverse(L2))),
ok.
-keysort_1(doc) -> ["keysort"];
-keysort_1(suite) -> [];
keysort_1(Config) when is_list(Config) ->
- ?line ok = keysort_check(1, [], []),
- ?line ok = keysort_check(1, [{a,b}], [{a,b}]),
- ?line ok = keysort_check(1, [{a,b},{a,b}], [{a,b},{a,b}]),
- ?line ok = keysort_check(1, [{a,b},{b,c}], [{a,b},{b,c}]),
- ?line ok = keysort_check(1, [{b,c},{a,b}], [{a,b},{b,c}]),
- ?line ok = keysort_check(1,
- [{1,e},{3,f},{2,y},{0,z},{x,14}],
- [{0,z},{1,e},{2,y},{3,f},{x,14}]),
- ?line ok = keysort_check(1,
- [{1,a},{1,a},{1,a},{1,a}],
- [{1,a},{1,a},{1,a},{1,a}]),
-
- ?line [{b,1},{c,1}] = lists:keysort(1, [{c,1},{b,1}]),
- ?line [{a,0},{b,2},{c,3},{d,4}] =
- lists:keysort(1, [{d,4},{c,3},{b,2},{a,0}]),
- ?line [{a,0},{b,1},{b,2},{c,1}] =
- lists:keysort(1, [{c,1},{b,1},{b,2},{a,0}]),
- ?line [{a,0},{b,1},{b,2},{c,1},{d,4}] =
- lists:keysort(1, [{c,1},{b,1},{b,2},{a,0},{d,4}]),
+ ok = keysort_check(1, [], []),
+ ok = keysort_check(1, [{a,b}], [{a,b}]),
+ ok = keysort_check(1, [{a,b},{a,b}], [{a,b},{a,b}]),
+ ok = keysort_check(1, [{a,b},{b,c}], [{a,b},{b,c}]),
+ ok = keysort_check(1, [{b,c},{a,b}], [{a,b},{b,c}]),
+ ok = keysort_check(1,
+ [{1,e},{3,f},{2,y},{0,z},{x,14}],
+ [{0,z},{1,e},{2,y},{3,f},{x,14}]),
+ ok = keysort_check(1,
+ [{1,a},{1,a},{1,a},{1,a}],
+ [{1,a},{1,a},{1,a},{1,a}]),
+
+ [{b,1},{c,1}] = lists:keysort(1, [{c,1},{b,1}]),
+ [{a,0},{b,2},{c,3},{d,4}] =
+ lists:keysort(1, [{d,4},{c,3},{b,2},{a,0}]),
+ [{a,0},{b,1},{b,2},{c,1}] =
+ lists:keysort(1, [{c,1},{b,1},{b,2},{a,0}]),
+ [{a,0},{b,1},{b,2},{c,1},{d,4}] =
+ lists:keysort(1, [{c,1},{b,1},{b,2},{a,0},{d,4}]),
SFun = fun(L) -> fun(X) -> keysort_check(1, X, L) end end,
L1 = [{1,a},{2,b},{3,c}],
- ?line lists:foreach(SFun(L1), perms(L1)),
+ lists:foreach(SFun(L1), perms(L1)),
L2 = [{1,a},{1,a},{2,b}],
- ?line lists:foreach(SFun(L2), perms(L2)),
+ lists:foreach(SFun(L2), perms(L2)),
L3 = [{1,a},{1,a},{1,a},{2,b}],
- ?line lists:foreach(SFun(L3), perms(L3)),
+ lists:foreach(SFun(L3), perms(L3)),
L4 = [{a,1},{a,1},{b,2},{b,2},{c,3},{d,4},{e,5},{f,6}],
- ?line lists:foreach(SFun(L4), perms(L4)),
+ lists:foreach(SFun(L4), perms(L4)),
ok.
-keysort_stable(doc) -> ["keysort should be stable"];
-keysort_stable(suite) -> [];
+%% keysort should be stable
keysort_stable(Config) when is_list(Config) ->
- ?line ok = keysort_check(1, [{1,b},{1,c}], [{1,b},{1,c}]),
- ?line ok = keysort_check(1, [{1,c},{1,b}], [{1,c},{1,b}]),
- ?line ok = keysort_check(1,
- [{1,c},{1,b},{2,x},{3,p},{2,a}],
- [{1,c},{1,b},{2,x},{2,a},{3,p}]),
- ?line ok = keysort_check(1,
- [{1,a},{1,b},{1,a},{1,a}],
- [{1,a},{1,b},{1,a},{1,a}]),
- ok.
-
-keysort_error(doc) -> ["keysort should exit when given bad arguments"];
-keysort_error(suite) -> [];
+ ok = keysort_check(1, [{1,b},{1,c}], [{1,b},{1,c}]),
+ ok = keysort_check(1, [{1,c},{1,b}], [{1,c},{1,b}]),
+ ok = keysort_check(1,
+ [{1,c},{1,b},{2,x},{3,p},{2,a}],
+ [{1,c},{1,b},{2,x},{2,a},{3,p}]),
+ ok = keysort_check(1,
+ [{1,a},{1,b},{1,a},{1,a}],
+ [{1,a},{1,b},{1,a},{1,a}]),
+ ok.
+
+%% keysort should exit when given bad arguments
keysort_error(Config) when is_list(Config) ->
- ?line {'EXIT', _} = (catch lists:keysort(0, [{1,b},{1,c}])),
- ?line {'EXIT', _} = (catch lists:keysort(3, [{1,b},{1,c}])),
- ?line {'EXIT', _} = (catch lists:keysort(1.5, [{1,b},{1,c}])),
- ?line {'EXIT', _} = (catch lists:keysort(x, [{1,b},{1,c}])),
- ?line {'EXIT', _} = (catch lists:keysort(x, [])),
- ?line {'EXIT', _} = (catch lists:keysort(x, [{1,b}])),
- ?line {'EXIT', _} = (catch lists:keysort(1, [a,b])),
- ?line {'EXIT', _} = (catch lists:keysort(1, [{1,b} | {1,c}])),
- ok.
-
-keysort_i(doc) -> ["keysort with other key than first element"];
-keysort_i(suite) -> [];
+ {'EXIT', _} = (catch lists:keysort(0, [{1,b},{1,c}])),
+ {'EXIT', _} = (catch lists:keysort(3, [{1,b},{1,c}])),
+ {'EXIT', _} = (catch lists:keysort(1.5, [{1,b},{1,c}])),
+ {'EXIT', _} = (catch lists:keysort(x, [{1,b},{1,c}])),
+ {'EXIT', _} = (catch lists:keysort(x, [])),
+ {'EXIT', _} = (catch lists:keysort(x, [{1,b}])),
+ {'EXIT', _} = (catch lists:keysort(1, [a,b])),
+ {'EXIT', _} = (catch lists:keysort(1, [{1,b} | {1,c}])),
+ ok.
+
+%% keysort with other key than first element
keysort_i(Config) when is_list(Config) ->
- ?line ok = keysort_check(2, [{a,2},{b,1},{c,3}], [{b,1},{a,2},{c,3}]),
+ ok = keysort_check(2, [{a,2},{b,1},{c,3}], [{b,1},{a,2},{c,3}]),
ok.
-keysort_rand(doc) -> ["keysort on big randomized lists"];
-keysort_rand(suite) -> [];
+%% keysort on big randomized lists
keysort_rand(Config) when is_list(Config) ->
- ?line ok = keysort_check3(1, biglist(10)),
- ?line ok = keysort_check3(1, biglist(100)),
- ?line ok = keysort_check3(1, biglist(1000)),
- ?line ok = keysort_check3(1, biglist(10000)),
+ ok = keysort_check3(1, biglist(10)),
+ ok = keysort_check3(1, biglist(100)),
+ ok = keysort_check3(1, biglist(1000)),
+ ok = keysort_check3(1, biglist(10000)),
- ?line ok = keysort_check3(2, biglist(10)),
- ?line ok = keysort_check3(2, biglist(100)),
- ?line ok = keysort_check3(2, biglist(1000)),
- ?line ok = keysort_check3(2, biglist(10000)),
+ ok = keysort_check3(2, biglist(10)),
+ ok = keysort_check3(2, biglist(100)),
+ ok = keysort_check3(2, biglist(1000)),
+ ok = keysort_check3(2, biglist(10000)),
ok.
%%% Keysort a list, check that the returned list is what we expected,
%%% and that it is actually sorted.
keysort_check(I, Input, Expected) ->
- ?line Expected = lists:keysort(I, Input),
+ Expected = lists:keysort(I, Input),
check_sorted(I, Input, Expected).
keysort_check3(I, Input) ->
@@ -1020,232 +977,223 @@ keycompare(I, J, A, B) when element(I, A) == element(I, B),
ok.
-ukeymerge(suite) -> [];
-ukeymerge(doc) -> ["Merge two lists while removing duplicates."];
+%% Merge two lists while removing duplicates.
ukeymerge(Conf) when is_list(Conf) ->
Two = [{1,a},{2,b}],
Six = [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f}],
%% 2-way unique keymerge
- ?line [] = lists:ukeymerge(1, [], []),
- ?line Two = lists:ukeymerge(1, Two, []),
- ?line Two = lists:ukeymerge(1, [], Two),
- ?line [] = lists:ukeymerge(1, [], []),
- ?line Two = lists:ukeymerge(1, Two, []),
- ?line Two = lists:ukeymerge(1, [], Two),
- ?line Six = lists:ukeymerge(1, [{1,a},{3,c},{5,e}], [{2,b},{4,d},{6,f}]),
- ?line Six = lists:ukeymerge(1, [{2,b},{4,d},{6,f}], [{1,a},{3,c},{5,e}]),
- ?line Six = lists:ukeymerge(1, [{1,a},{2,b},{3,c}], [{4,d},{5,e},{6,f}]),
- ?line Six = lists:ukeymerge(1, [{4,d},{5,e},{6,f}], [{1,a},{2,b},{3,c}]),
- ?line Six = lists:ukeymerge(1, [{1,a},{2,b},{5,e}],[{3,c},{4,d},{6,f}]),
- ?line [{1,a},{2,b},{3,c},{5,e},{7,g}] =
+ [] = lists:ukeymerge(1, [], []),
+ Two = lists:ukeymerge(1, Two, []),
+ Two = lists:ukeymerge(1, [], Two),
+ [] = lists:ukeymerge(1, [], []),
+ Two = lists:ukeymerge(1, Two, []),
+ Two = lists:ukeymerge(1, [], Two),
+ Six = lists:ukeymerge(1, [{1,a},{3,c},{5,e}], [{2,b},{4,d},{6,f}]),
+ Six = lists:ukeymerge(1, [{2,b},{4,d},{6,f}], [{1,a},{3,c},{5,e}]),
+ Six = lists:ukeymerge(1, [{1,a},{2,b},{3,c}], [{4,d},{5,e},{6,f}]),
+ Six = lists:ukeymerge(1, [{4,d},{5,e},{6,f}], [{1,a},{2,b},{3,c}]),
+ Six = lists:ukeymerge(1, [{1,a},{2,b},{5,e}],[{3,c},{4,d},{6,f}]),
+ [{1,a},{2,b},{3,c},{5,e},{7,g}] =
lists:ukeymerge(1, [{1,a},{3,c},{5,e},{7,g}], [{2,b}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
lists:ukeymerge(1, [{1,a},{3,c},{5,e},{7,g}], [{2,b},{4,d}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
lists:ukeymerge(1, [{1,a},{3,c},{5,e},{7,g}], [{2,b},{4,d},{6,f}]),
- ?line [{1,a},{2,b},{3,c},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{5,e},{7,g}] =
lists:ukeymerge(1, [{2,b}], [{1,a},{3,c},{5,e},{7,g}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
lists:ukeymerge(1, [{2,b},{4,d}], [{1,a},{3,c},{5,e},{7,g}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
lists:ukeymerge(1, [{2,b},{4,d},{6,f}], [{1,a},{3,c},{5,e},{7,g}]),
- ?line [{1,a},{2,b},{3,c},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{5,e},{7,g}] =
lists:ukeymerge(1, [{1,a},{2,b},{3,c},{5,e},{7,g}], [{2,b}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
lists:ukeymerge(1, [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}],
[{2,b},{4,d}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
lists:ukeymerge(1, [{1,a},{3,c},{5,e},{6,f},{7,g}],
[{2,b},{4,d},{6,f}]),
- ?line [{1,a},{2,b},{3,c},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{5,e},{7,g}] =
lists:ukeymerge(1, [{2,b}], [{1,a},{2,b},{3,c},{5,e},{7,g}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}] =
lists:ukeymerge(1, [{2,b},{4,d}],
[{1,a},{2,b},{3,c},{4,d},{5,e},{7,g}]),
- ?line [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}] =
lists:ukeymerge(1, [{2,b},{4,d},{6,f}],
- [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}]),
+ [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{7,g}]),
L1 = [{a,1},{a,3},{a,5},{a,7}],
L2 = [{b,1},{b,3},{b,5},{b,7}],
- ?line L1 = lists:ukeymerge(2, L1, L2),
+ L1 = lists:ukeymerge(2, L1, L2),
ok.
-rukeymerge(suite) -> [];
-rukeymerge(doc) ->
- ["Reverse merge two lists while removing duplicates."];
+%% Reverse merge two lists while removing duplicates.
rukeymerge(Conf) when is_list(Conf) ->
Two = [{2,b},{1,a}],
Six = [{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}],
%% 2-way reversed unique keymerge
- ?line [] = lists:rukeymerge(1, [], []),
- ?line Two = lists:rukeymerge(1, Two, []),
- ?line Two = lists:rukeymerge(1, [], Two),
- ?line Six = lists:rukeymerge(1, [{5,e},{3,c},{1,a}], [{6,f},{4,d},{2,b}]),
- ?line Six = lists:rukeymerge(1, [{6,f},{4,d},{2,b}], [{5,e},{3,c},{1,a}]),
- ?line Six = lists:rukeymerge(1, [{3,c},{2,b},{1,a}], [{6,f},{5,e},{4,d}]),
- ?line Six = lists:rukeymerge(1, [{6,f},{5,e},{4,d}], [{3,c},{2,b},{1,a}]),
- ?line Six = lists:rukeymerge(1, [{4,d},{3,c},{2,b}],[{6,f},{5,e},{1,a}]),
- ?line [{7,g},{6,f},{5,e},{3,c},{1,a}] =
+ [] = lists:rukeymerge(1, [], []),
+ Two = lists:rukeymerge(1, Two, []),
+ Two = lists:rukeymerge(1, [], Two),
+ Six = lists:rukeymerge(1, [{5,e},{3,c},{1,a}], [{6,f},{4,d},{2,b}]),
+ Six = lists:rukeymerge(1, [{6,f},{4,d},{2,b}], [{5,e},{3,c},{1,a}]),
+ Six = lists:rukeymerge(1, [{3,c},{2,b},{1,a}], [{6,f},{5,e},{4,d}]),
+ Six = lists:rukeymerge(1, [{6,f},{5,e},{4,d}], [{3,c},{2,b},{1,a}]),
+ Six = lists:rukeymerge(1, [{4,d},{3,c},{2,b}],[{6,f},{5,e},{1,a}]),
+ [{7,g},{6,f},{5,e},{3,c},{1,a}] =
lists:rukeymerge(1, [{7,g},{5,e},{3,c},{1,a}], [{6,f}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{1,a}] =
lists:rukeymerge(1, [{7,g},{5,e},{3,c},{1,a}], [{6,f},{4,d}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rukeymerge(1, [{7,g},{5,e},{3,c},{1,a}], [{6,f},{4,d},{2,b}]),
- ?line [{7,g},{5,e},{3,c},{2,b},{1,a}] =
+ [{7,g},{5,e},{3,c},{2,b},{1,a}] =
lists:rukeymerge(1, [{2,b}], [{7,g},{5,e},{3,c},{1,a}]),
- ?line [{7,g},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rukeymerge(1, [{4,d},{2,b}], [{7,g},{5,e},{3,c},{1,a}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rukeymerge(1, [{6,f},{4,d},{2,b}], [{7,g},{5,e},{3,c},{1,a}]),
- ?line [{7,g},{6,f},{5,e},{3,c},{1,a}] =
+ [{7,g},{6,f},{5,e},{3,c},{1,a}] =
lists:rukeymerge(1, [{7,g},{6,f},{5,e},{3,c},{1,a}], [{6,f}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{1,a}] =
lists:rukeymerge(1, [{7,g},{6,f},{5,e},{4,d},{3,c},{1,a}],
[{6,f},{4,d}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rukeymerge(1, [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}],
- [{6,f},{4,d},{2,b}]),
- ?line [{7,g},{5,e},{3,c},{2,b},{1,a}] =
+ [{6,f},{4,d},{2,b}]),
+ [{7,g},{5,e},{3,c},{2,b},{1,a}] =
lists:rukeymerge(1, [{2,b}], [{7,g},{5,e},{3,c},{2,b},{1,a}]),
- ?line [{7,g},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rukeymerge(1, [{4,d},{2,b}],
[{7,g},{5,e},{4,d},{3,c},{2,b},{1,a}]),
- ?line [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}] =
lists:rukeymerge(1, [{6,f},{4,d},{2,b}],
- [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}]),
+ [{7,g},{6,f},{5,e},{4,d},{3,c},{2,b},{1,a}]),
L1 = [{a,1},{a,3},{a,5},{a,7}],
L2 = [{b,1},{b,3},{b,5},{b,7}],
- ?line true =
+ true =
lists:ukeymerge(2, L1, L2) ==
lists:reverse(lists:rukeymerge(2, lists:reverse(L1),
lists:reverse(L2))),
ok.
-ukeysort_1(doc) -> ["ukeysort"];
-ukeysort_1(suite) -> [];
ukeysort_1(Config) when is_list(Config) ->
- ?line ok = ukeysort_check(1, [], []),
- ?line ok = ukeysort_check(1, [{a,b}], [{a,b}]),
- ?line ok = ukeysort_check(1, [{a,b},{a,b}], [{a,b}]),
- ?line ok = ukeysort_check(1, [{a,b},{b,c}], [{a,b},{b,c}]),
- ?line ok = ukeysort_check(1, [{b,c},{a,b}], [{a,b},{b,c}]),
- ?line ok = ukeysort_check(1,
- [{1,e},{3,f},{2,y},{0,z},{x,14}],
- [{0,z},{1,e},{2,y},{3,f},{x,14}]),
- ?line ok = ukeysort_check(1, [{1,a},{1,a},{1,a},{1,a}], [{1,a}]),
+ ok = ukeysort_check(1, [], []),
+ ok = ukeysort_check(1, [{a,b}], [{a,b}]),
+ ok = ukeysort_check(1, [{a,b},{a,b}], [{a,b}]),
+ ok = ukeysort_check(1, [{a,b},{b,c}], [{a,b},{b,c}]),
+ ok = ukeysort_check(1, [{b,c},{a,b}], [{a,b},{b,c}]),
+ ok = ukeysort_check(1,
+ [{1,e},{3,f},{2,y},{0,z},{x,14}],
+ [{0,z},{1,e},{2,y},{3,f},{x,14}]),
+ ok = ukeysort_check(1, [{1,a},{1,a},{1,a},{1,a}], [{1,a}]),
L1 = [{1,a},{1,b},{1,a}],
L1u = lists:ukeysort(1, L1),
L2 = [{1,a},{1,b},{1,a}],
L2u = lists:ukeysort(1, L2),
- ?line ok = ukeysort_check(1, lists:keymerge(1, L1, L2),
- lists:ukeymerge(1, L1u, L2u)),
+ ok = ukeysort_check(1, lists:keymerge(1, L1, L2),
+ lists:ukeymerge(1, L1u, L2u)),
L3 = [{1,a},{1,b},{1,a},{2,a}],
L3u = lists:ukeysort(1, L3),
- ?line ok = ukeysort_check(1, lists:keymerge(1, L3, L2),
- lists:ukeymerge(1, L3u, L2u)),
+ ok = ukeysort_check(1, lists:keymerge(1, L3, L2),
+ lists:ukeymerge(1, L3u, L2u)),
L4 = [{1,b},{1,a}],
L4u = lists:ukeysort(1, L4),
- ?line ok = ukeysort_check(1, lists:keymerge(1, L1, L4),
- lists:ukeymerge(1, L1u, L4u)),
+ ok = ukeysort_check(1, lists:keymerge(1, L1, L4),
+ lists:ukeymerge(1, L1u, L4u)),
L5 = [{1,a},{1,b},{1,a},{2,a}],
L5u = lists:ukeysort(1, L5),
- ?line ok = ukeysort_check(1, lists:keymerge(1, [], L5),
- lists:ukeymerge(1, [], L5u)),
- ?line ok = ukeysort_check(1, lists:keymerge(1, L5, []),
- lists:ukeymerge(1, L5u, [])),
+ ok = ukeysort_check(1, lists:keymerge(1, [], L5),
+ lists:ukeymerge(1, [], L5u)),
+ ok = ukeysort_check(1, lists:keymerge(1, L5, []),
+ lists:ukeymerge(1, L5u, [])),
L6 = [{3,a}],
L6u = lists:ukeysort(1, L6),
- ?line ok = ukeysort_check(1, lists:keymerge(1, L5, L6),
- lists:ukeymerge(1, L5u, L6u)),
+ ok = ukeysort_check(1, lists:keymerge(1, L5, L6),
+ lists:ukeymerge(1, L5u, L6u)),
- ?line [{b,1},{c,1}] = lists:ukeysort(1, [{c,1},{c,1},{c,1},{c,1},{b,1}]),
- ?line [{a,0},{b,2},{c,3},{d,4}] =
- lists:ukeysort(1, [{d,4},{c,3},{b,2},{b,2},{a,0}]),
- ?line [{a,0},{b,1},{c,1}] =
- lists:ukeysort(1, [{c,1},{b,1},{b,1},{b,2},{b,2},{a,0}]),
- ?line [{a,0},{b,1},{c,1},{d,4}] =
- lists:ukeysort(1, [{c,1},{b,1},{b,2},{a,0},{a,0},{d,4},{d,4}]),
+ [{b,1},{c,1}] = lists:ukeysort(1, [{c,1},{c,1},{c,1},{c,1},{b,1}]),
+ [{a,0},{b,2},{c,3},{d,4}] =
+ lists:ukeysort(1, [{d,4},{c,3},{b,2},{b,2},{a,0}]),
+ [{a,0},{b,1},{c,1}] =
+ lists:ukeysort(1, [{c,1},{b,1},{b,1},{b,2},{b,2},{a,0}]),
+ [{a,0},{b,1},{c,1},{d,4}] =
+ lists:ukeysort(1, [{c,1},{b,1},{b,2},{a,0},{a,0},{d,4},{d,4}]),
SFun = fun(L) -> fun(X) -> ukeysort_check(2, X, L) end end,
PL = [{a,1},{b,2},{c,3},{d,4},{e,5},{f,6}],
Ps = perms([{a,1},{b,2},{c,3},{d,4},{e,5},{f,6},{b,2},{a,1}]),
- ?line lists:foreach(SFun(PL), Ps),
+ lists:foreach(SFun(PL), Ps),
M1L = [{1,a},{1,a},{2,b}],
M1s = [{1,a},{2,b}],
- ?line lists:foreach(SFun(M1s), perms(M1L)),
+ lists:foreach(SFun(M1s), perms(M1L)),
M2L = [{1,a},{2,b},{2,b}],
M2s = [{1,a},{2,b}],
- ?line lists:foreach(SFun(M2s), perms(M2L)),
+ lists:foreach(SFun(M2s), perms(M2L)),
M3 = [{1,a},{2,b},{3,c}],
- ?line lists:foreach(SFun(M3), perms(M3)),
+ lists:foreach(SFun(M3), perms(M3)),
ok.
-ukeysort_stable(doc) -> ["ukeysort should keep the first duplicate"];
-ukeysort_stable(suite) -> [];
+%% ukeysort should keep the first duplicate.
ukeysort_stable(Config) when is_list(Config) ->
- ?line ok = ukeysort_check(1, [{1,b},{1,c}], [{1,b}]),
- ?line ok = ukeysort_check(1, [{1,c},{1,b}], [{1,c}]),
- ?line ok = ukeysort_check(1,
- [{1,c},{1,b},{2,x},{3,p},{2,a}],
- [{1,c},{2,x},{3,p}]),
-
- ?line ok = ukeysort_check(1, [{1,a},{1,b},{1,b}], [{1,a}]),
- ?line ok = ukeysort_check(1, [{2,a},{1,b},{2,a}], [{1,b},{2,a}]),
-
- ?line ok = ukeysort_check_stability(bigfunlist(3)),
- ?line ok = ukeysort_check_stability(bigfunlist(10)),
- ?line ok = ukeysort_check_stability(bigfunlist(100)),
- ?line ok = ukeysort_check_stability(bigfunlist(1000)),
- ?line case erlang:system_info(modified_timing_level) of
- undefined -> ok = ukeysort_check_stability(bigfunlist(10000));
- _ -> ok
- end,
- ok.
-
-ukeysort_error(doc) -> ["ukeysort should exit when given bad arguments"];
-ukeysort_error(suite) -> [];
+ ok = ukeysort_check(1, [{1,b},{1,c}], [{1,b}]),
+ ok = ukeysort_check(1, [{1,c},{1,b}], [{1,c}]),
+ ok = ukeysort_check(1,
+ [{1,c},{1,b},{2,x},{3,p},{2,a}],
+ [{1,c},{2,x},{3,p}]),
+
+ ok = ukeysort_check(1, [{1,a},{1,b},{1,b}], [{1,a}]),
+ ok = ukeysort_check(1, [{2,a},{1,b},{2,a}], [{1,b},{2,a}]),
+
+ ok = ukeysort_check_stability(bigfunlist(3)),
+ ok = ukeysort_check_stability(bigfunlist(10)),
+ ok = ukeysort_check_stability(bigfunlist(100)),
+ ok = ukeysort_check_stability(bigfunlist(1000)),
+ case erlang:system_info(modified_timing_level) of
+ undefined -> ok = ukeysort_check_stability(bigfunlist(10000));
+ _ -> ok
+ end,
+ ok.
+
+%% ukeysort should exit when given bad arguments.
ukeysort_error(Config) when is_list(Config) ->
- ?line {'EXIT', _} = (catch lists:ukeysort(0, [{1,b},{1,c}])),
- ?line {'EXIT', _} = (catch lists:ukeysort(3, [{1,b},{1,c}])),
- ?line {'EXIT', _} = (catch lists:ukeysort(1.5, [{1,b},{1,c}])),
- ?line {'EXIT', _} = (catch lists:ukeysort(x, [{1,b},{1,c}])),
- ?line {'EXIT', _} = (catch lists:ukeysort(x, [])),
- ?line {'EXIT', _} = (catch lists:ukeysort(x, [{1,b}])),
- ?line {'EXIT', _} = (catch lists:ukeysort(1, [a,b])),
- ?line {'EXIT', _} = (catch lists:ukeysort(1, [{1,b} | {1,c}])),
- ok.
-
-ukeysort_i(doc) -> ["ukeysort with other key than first element"];
-ukeysort_i(suite) -> [];
+ {'EXIT', _} = (catch lists:ukeysort(0, [{1,b},{1,c}])),
+ {'EXIT', _} = (catch lists:ukeysort(3, [{1,b},{1,c}])),
+ {'EXIT', _} = (catch lists:ukeysort(1.5, [{1,b},{1,c}])),
+ {'EXIT', _} = (catch lists:ukeysort(x, [{1,b},{1,c}])),
+ {'EXIT', _} = (catch lists:ukeysort(x, [])),
+ {'EXIT', _} = (catch lists:ukeysort(x, [{1,b}])),
+ {'EXIT', _} = (catch lists:ukeysort(1, [a,b])),
+ {'EXIT', _} = (catch lists:ukeysort(1, [{1,b} | {1,c}])),
+ ok.
+
+%% ukeysort with other key than first element.
ukeysort_i(Config) when is_list(Config) ->
- ?line ok = ukeysort_check(2, [{a,2},{b,1},{c,3}], [{b,1},{a,2},{c,3}]),
+ ok = ukeysort_check(2, [{a,2},{b,1},{c,3}], [{b,1},{a,2},{c,3}]),
ok.
-ukeysort_rand(doc) -> ["ukeysort on big randomized lists"];
-ukeysort_rand(suite) -> [];
+%% ukeysort on big randomized lists.
ukeysort_rand(Config) when is_list(Config) ->
- ?line ok = ukeysort_check3(2, biglist(10)),
- ?line ok = ukeysort_check3(2, biglist(100)),
- ?line ok = ukeysort_check3(2, biglist(1000)),
- ?line ok = ukeysort_check3(2, biglist(10000)),
+ ok = ukeysort_check3(2, biglist(10)),
+ ok = ukeysort_check3(2, biglist(100)),
+ ok = ukeysort_check3(2, biglist(1000)),
+ ok = ukeysort_check3(2, biglist(10000)),
- ?line ok = gen_ukeysort_check(1, ubiglist(10)),
- ?line ok = gen_ukeysort_check(1, ubiglist(100)),
- ?line ok = gen_ukeysort_check(1, ubiglist(1000)),
- ?line ok = gen_ukeysort_check(1, ubiglist(10000)),
+ ok = gen_ukeysort_check(1, ubiglist(10)),
+ ok = gen_ukeysort_check(1, ubiglist(100)),
+ ok = gen_ukeysort_check(1, ubiglist(1000)),
+ ok = gen_ukeysort_check(1, ubiglist(10000)),
ok.
%% Check that ukeysort/2 is stable and correct relative keysort/2.
@@ -1272,7 +1220,7 @@ ukeysort_check_stability(L) ->
%%% Uniquely keysort a list, check that the returned list is what we
%%% expected, and that it is actually sorted.
ukeysort_check(I, Input, Expected) ->
- ?line Expected = lists:ukeysort(I, Input),
+ Expected = lists:ukeysort(I, Input),
ucheck_sorted(I, Input, Expected).
ukeysort_check3(I, Input) ->
@@ -1309,8 +1257,7 @@ ukeycompare(I, J, A, B) when A =/= B,
-funmerge(doc) -> ["Merge two lists using a fun."];
-funmerge(suite) -> [];
+%% Merge two lists using a fun.
funmerge(Config) when is_list(Config) ->
Two = [1,2],
@@ -1318,29 +1265,28 @@ funmerge(Config) when is_list(Config) ->
F = fun(X, Y) -> X =< Y end,
%% 2-way merge
- ?line [] = lists:merge(F, [], []),
- ?line Two = lists:merge(F, Two, []),
- ?line Two = lists:merge(F, [], Two),
- ?line Six = lists:merge(F, [1,3,5], [2,4,6]),
- ?line Six = lists:merge(F, [2,4,6], [1,3,5]),
- ?line Six = lists:merge(F, [1,2,3], [4,5,6]),
- ?line Six = lists:merge(F, [4,5,6], [1,2,3]),
- ?line Six = lists:merge(F, [1,2,5],[3,4,6]),
- ?line [1,2,3,5,7] = lists:merge(F, [1,3,5,7], [2]),
- ?line [1,2,3,4,5,7] = lists:merge(F, [1,3,5,7], [2,4]),
- ?line [1,2,3,4,5,6,7] = lists:merge(F, [1,3,5,7], [2,4,6]),
- ?line [1,2,3,5,7] = lists:merge(F, [2], [1,3,5,7]),
- ?line [1,2,3,4,5,7] = lists:merge(F, [2,4], [1,3,5,7]),
- ?line [1,2,3,4,5,6,7] = lists:merge(F, [2,4,6], [1,3,5,7]),
+ [] = lists:merge(F, [], []),
+ Two = lists:merge(F, Two, []),
+ Two = lists:merge(F, [], Two),
+ Six = lists:merge(F, [1,3,5], [2,4,6]),
+ Six = lists:merge(F, [2,4,6], [1,3,5]),
+ Six = lists:merge(F, [1,2,3], [4,5,6]),
+ Six = lists:merge(F, [4,5,6], [1,2,3]),
+ Six = lists:merge(F, [1,2,5],[3,4,6]),
+ [1,2,3,5,7] = lists:merge(F, [1,3,5,7], [2]),
+ [1,2,3,4,5,7] = lists:merge(F, [1,3,5,7], [2,4]),
+ [1,2,3,4,5,6,7] = lists:merge(F, [1,3,5,7], [2,4,6]),
+ [1,2,3,5,7] = lists:merge(F, [2], [1,3,5,7]),
+ [1,2,3,4,5,7] = lists:merge(F, [2,4], [1,3,5,7]),
+ [1,2,3,4,5,6,7] = lists:merge(F, [2,4,6], [1,3,5,7]),
F2 = fun(X,Y) -> element(1,X) =< element(1,Y) end,
- ?line [{b,2},{c,11},{c,12},{c,21},{c,22},{e,5}] =
+ [{b,2},{c,11},{c,12},{c,21},{c,22},{e,5}] =
lists:merge(F2,[{c,11},{c,12},{e,5}], [{b,2},{c,21},{c,22}]),
ok.
-rfunmerge(doc) -> ["Reverse merge two lists using a fun."];
-rfunmerge(suite) -> [];
+%% Reverse merge two lists using a fun.
rfunmerge(Config) when is_list(Config) ->
Two = [2,1],
@@ -1348,86 +1294,81 @@ rfunmerge(Config) when is_list(Config) ->
F = fun(X, Y) -> X =< Y end,
%% 2-way reversed merge
- ?line [] = lists:rmerge(F, [], []),
- ?line Two = lists:rmerge(F, Two, []),
- ?line Two = lists:rmerge(F, [], Two),
- ?line Six = lists:rmerge(F, [5,3,1], [6,4,2]),
- ?line Six = lists:rmerge(F, [6,4,2], [5,3,1]),
- ?line Six = lists:rmerge(F, [3,2,1], [6,5,4]),
- ?line Six = lists:rmerge(F, [6,5,4], [3,2,1]),
- ?line Six = lists:rmerge(F, [4,3,2],[6,5,1]),
- ?line [7,6,5,3,1] = lists:rmerge(F, [7,5,3,1], [6]),
- ?line [7,6,5,4,3,1] = lists:rmerge(F, [7,5,3,1], [6,4]),
- ?line [7,6,5,4,3,2,1] = lists:rmerge(F, [7,5,3,1], [6,4,2]),
- ?line [7,5,3,2,1] = lists:rmerge(F, [2], [7,5,3,1]),
- ?line [7,5,4,3,2,1] = lists:rmerge(F, [4,2], [7,5,3,1]),
- ?line [7,6,5,4,3,2,1] = lists:rmerge(F, [6,4,2], [7,5,3,1]),
+ [] = lists:rmerge(F, [], []),
+ Two = lists:rmerge(F, Two, []),
+ Two = lists:rmerge(F, [], Two),
+ Six = lists:rmerge(F, [5,3,1], [6,4,2]),
+ Six = lists:rmerge(F, [6,4,2], [5,3,1]),
+ Six = lists:rmerge(F, [3,2,1], [6,5,4]),
+ Six = lists:rmerge(F, [6,5,4], [3,2,1]),
+ Six = lists:rmerge(F, [4,3,2],[6,5,1]),
+ [7,6,5,3,1] = lists:rmerge(F, [7,5,3,1], [6]),
+ [7,6,5,4,3,1] = lists:rmerge(F, [7,5,3,1], [6,4]),
+ [7,6,5,4,3,2,1] = lists:rmerge(F, [7,5,3,1], [6,4,2]),
+ [7,5,3,2,1] = lists:rmerge(F, [2], [7,5,3,1]),
+ [7,5,4,3,2,1] = lists:rmerge(F, [4,2], [7,5,3,1]),
+ [7,6,5,4,3,2,1] = lists:rmerge(F, [6,4,2], [7,5,3,1]),
F2 = fun(X,Y) -> element(1,X) =< element(1,Y) end,
L1 = [{c,11},{c,12},{e,5}],
L2 = [{b,2},{c,21},{c,22}],
- ?line true =
+ true =
lists:merge(F2, L1, L2) ==
lists:reverse(lists:rmerge(F2,lists:reverse(L1), lists:reverse(L2))),
ok.
-funsort_1(doc) -> ["sort/2"];
-funsort_1(suite) -> [];
funsort_1(Config) when is_list(Config) ->
- ?line ok = funsort_check(1, [], []),
- ?line ok = funsort_check(1, [{a,b}], [{a,b}]),
- ?line ok = funsort_check(1, [{a,b},{a,b}], [{a,b},{a,b}]),
- ?line ok = funsort_check(1, [{a,b},{b,c}], [{a,b},{b,c}]),
- ?line ok = funsort_check(1, [{b,c},{a,b}], [{a,b},{b,c}]),
- ?line ok = funsort_check(1,
- [{1,e},{3,f},{2,y},{0,z},{x,14}],
- [{0,z},{1,e},{2,y},{3,f},{x,14}]),
+ ok = funsort_check(1, [], []),
+ ok = funsort_check(1, [{a,b}], [{a,b}]),
+ ok = funsort_check(1, [{a,b},{a,b}], [{a,b},{a,b}]),
+ ok = funsort_check(1, [{a,b},{b,c}], [{a,b},{b,c}]),
+ ok = funsort_check(1, [{b,c},{a,b}], [{a,b},{b,c}]),
+ ok = funsort_check(1,
+ [{1,e},{3,f},{2,y},{0,z},{x,14}],
+ [{0,z},{1,e},{2,y},{3,f},{x,14}]),
F = funsort_fun(1),
- ?line [{b,1},{c,1}] = lists:sort(F, [{c,1},{b,1}]),
- ?line [{a,0},{b,2},{c,3},{d,4}] =
- lists:sort(F, [{d,4},{c,3},{b,2},{a,0}]),
- ?line [{a,0},{b,1},{b,2},{c,1}] =
- lists:sort(F, [{c,1},{b,1},{b,2},{a,0}]),
- ?line [{a,0},{b,1},{b,2},{c,1},{d,4}] =
- lists:sort(F, [{c,1},{b,1},{b,2},{a,0},{d,4}]),
+ [{b,1},{c,1}] = lists:sort(F, [{c,1},{b,1}]),
+ [{a,0},{b,2},{c,3},{d,4}] =
+ lists:sort(F, [{d,4},{c,3},{b,2},{a,0}]),
+ [{a,0},{b,1},{b,2},{c,1}] =
+ lists:sort(F, [{c,1},{b,1},{b,2},{a,0}]),
+ [{a,0},{b,1},{b,2},{c,1},{d,4}] =
+ lists:sort(F, [{c,1},{b,1},{b,2},{a,0},{d,4}]),
SFun = fun(L) -> fun(X) -> funsort_check(1, X, L) end end,
L1 = [{1,a},{1,a},{2,b},{2,b},{3,c},{4,d},{5,e},{6,f}],
- ?line lists:foreach(SFun(L1), perms(L1)),
+ lists:foreach(SFun(L1), perms(L1)),
ok.
-funsort_stable(doc) -> ["sort/2 should be stable"];
-funsort_stable(suite) -> [];
+%% sort/2 should be stable.
funsort_stable(Config) when is_list(Config) ->
- ?line ok = funsort_check(1, [{1,b},{1,c}], [{1,b},{1,c}]),
- ?line ok = funsort_check(1, [{1,c},{1,b}], [{1,c},{1,b}]),
- ?line ok = funsort_check(1,
- [{1,c},{1,b},{2,x},{3,p},{2,a}],
- [{1,c},{1,b},{2,x},{2,a},{3,p}]),
+ ok = funsort_check(1, [{1,b},{1,c}], [{1,b},{1,c}]),
+ ok = funsort_check(1, [{1,c},{1,b}], [{1,c},{1,b}]),
+ ok = funsort_check(1,
+ [{1,c},{1,b},{2,x},{3,p},{2,a}],
+ [{1,c},{1,b},{2,x},{2,a},{3,p}]),
ok.
-funsort_error(doc) -> ["sort/2 should exit when given bad arguments"];
-funsort_error(suite) -> [];
+%% sort/2 should exit when given bad arguments.
funsort_error(Config) when is_list(Config) ->
- ?line {'EXIT', _} = (catch lists:sort(1, [{1,b} , {1,c}])),
- ?line {'EXIT', _} = (catch lists:sort(fun(X,Y) -> X =< Y end,
- [{1,b} | {1,c}])),
+ {'EXIT', _} = (catch lists:sort(1, [{1,b} , {1,c}])),
+ {'EXIT', _} = (catch lists:sort(fun(X,Y) -> X =< Y end,
+ [{1,b} | {1,c}])),
ok.
-funsort_rand(doc) -> ["sort/2 on big randomized lists"];
-funsort_rand(suite) -> [];
+%% sort/2 on big randomized lists.
funsort_rand(Config) when is_list(Config) ->
- ?line ok = funsort_check3(1, biglist(10)),
- ?line ok = funsort_check3(1, biglist(100)),
- ?line ok = funsort_check3(1, biglist(1000)),
- ?line ok = funsort_check3(1, biglist(10000)),
+ ok = funsort_check3(1, biglist(10)),
+ ok = funsort_check3(1, biglist(100)),
+ ok = funsort_check3(1, biglist(1000)),
+ ok = funsort_check3(1, biglist(10000)),
ok.
-% Do a keysort
+%% Do a keysort
funsort(I, L) ->
lists:sort(funsort_fun(I), L).
@@ -1437,12 +1378,11 @@ funsort_check3(I, Input) ->
%%% Keysort a list, check that the returned list is what we expected,
%%% and that it is actually sorted.
funsort_check(I, Input, Expected) ->
- ?line Expected = funsort(I, Input),
+ Expected = funsort(I, Input),
check_sorted(I, Input, Expected).
-ufunmerge(suite) -> [];
-ufunmerge(doc) -> ["Merge two lists while removing duplicates using a fun."];
+%% Merge two lists while removing duplicates using a fun.
ufunmerge(Conf) when is_list(Conf) ->
Two = [1,2],
@@ -1450,175 +1390,168 @@ ufunmerge(Conf) when is_list(Conf) ->
F = fun(X, Y) -> X =< Y end,
%% 2-way unique merge
- ?line [] = lists:umerge(F, [], []),
- ?line Two = lists:umerge(F, Two, []),
- ?line Two = lists:umerge(F, [], Two),
- ?line Six = lists:umerge(F, [1,3,5], [2,4,6]),
- ?line Six = lists:umerge(F, [2,4,6], [1,3,5]),
- ?line Six = lists:umerge(F, [1,2,3], [4,5,6]),
- ?line Six = lists:umerge(F, [4,5,6], [1,2,3]),
- ?line Six = lists:umerge(F, [1,2,5],[3,4,6]),
- ?line [1,2,3,5,7] = lists:umerge(F, [1,3,5,7], [2]),
- ?line [1,2,3,4,5,7] = lists:umerge(F, [1,3,5,7], [2,4]),
- ?line [1,2,3,4,5,6,7] = lists:umerge(F, [1,3,5,7], [2,4,6]),
- ?line [1,2,3,5,7] = lists:umerge(F, [2], [1,3,5,7]),
- ?line [1,2,3,4,5,7] = lists:umerge(F, [2,4], [1,3,5,7]),
- ?line [1,2,3,4,5,6,7] = lists:umerge(F, [2,4,6], [1,3,5,7]),
-
- ?line [1,2,3,5,7] = lists:umerge(F, [1,2,3,5,7], [2]),
- ?line [1,2,3,4,5,7] = lists:umerge(F, [1,2,3,4,5,7], [2,4]),
- ?line [1,2,3,4,5,6,7] = lists:umerge(F, [1,3,5,6,7], [2,4,6]),
- ?line [1,2,3,5,7] = lists:umerge(F, [2], [1,2,3,5,7]),
- ?line [1,2,3,4,5,7] = lists:umerge(F, [2,4], [1,2,3,4,5,7]),
- ?line [1,2,3,4,5,6,7] = lists:umerge(F, [2,4,6], [1,2,3,4,5,6,7]),
+ [] = lists:umerge(F, [], []),
+ Two = lists:umerge(F, Two, []),
+ Two = lists:umerge(F, [], Two),
+ Six = lists:umerge(F, [1,3,5], [2,4,6]),
+ Six = lists:umerge(F, [2,4,6], [1,3,5]),
+ Six = lists:umerge(F, [1,2,3], [4,5,6]),
+ Six = lists:umerge(F, [4,5,6], [1,2,3]),
+ Six = lists:umerge(F, [1,2,5],[3,4,6]),
+ [1,2,3,5,7] = lists:umerge(F, [1,3,5,7], [2]),
+ [1,2,3,4,5,7] = lists:umerge(F, [1,3,5,7], [2,4]),
+ [1,2,3,4,5,6,7] = lists:umerge(F, [1,3,5,7], [2,4,6]),
+ [1,2,3,5,7] = lists:umerge(F, [2], [1,3,5,7]),
+ [1,2,3,4,5,7] = lists:umerge(F, [2,4], [1,3,5,7]),
+ [1,2,3,4,5,6,7] = lists:umerge(F, [2,4,6], [1,3,5,7]),
+
+ [1,2,3,5,7] = lists:umerge(F, [1,2,3,5,7], [2]),
+ [1,2,3,4,5,7] = lists:umerge(F, [1,2,3,4,5,7], [2,4]),
+ [1,2,3,4,5,6,7] = lists:umerge(F, [1,3,5,6,7], [2,4,6]),
+ [1,2,3,5,7] = lists:umerge(F, [2], [1,2,3,5,7]),
+ [1,2,3,4,5,7] = lists:umerge(F, [2,4], [1,2,3,4,5,7]),
+ [1,2,3,4,5,6,7] = lists:umerge(F, [2,4,6], [1,2,3,4,5,6,7]),
L1 = [{a,1},{a,3},{a,5},{a,7}],
L2 = [{b,1},{b,3},{b,5},{b,7}],
F2 = fun(X,Y) -> element(2,X) =< element(2,Y) end,
- ?line L1 = lists:umerge(F2, L1, L2),
- ?line [{b,2},{e,5},{c,11},{c,12},{c,21},{c,22}] =
+ L1 = lists:umerge(F2, L1, L2),
+ [{b,2},{e,5},{c,11},{c,12},{c,21},{c,22}] =
lists:umerge(F2, [{e,5},{c,11},{c,12}], [{b,2},{c,21},{c,22}]),
ok.
-rufunmerge(suite) -> [];
-rufunmerge(doc) ->
- ["Reverse merge two lists while removing duplicates using a fun."];
+%% Reverse merge two lists while removing duplicates using a fun.
rufunmerge(Conf) when is_list(Conf) ->
Two = [2,1],
Six = [6,5,4,3,2,1],
F = fun(X, Y) -> X =< Y end,
%% 2-way reversed unique merge
- ?line [] = lists:rumerge(F, [], []),
- ?line Two = lists:rumerge(F, Two, []),
- ?line Two = lists:rumerge(F, [], Two),
- ?line Six = lists:rumerge(F, [5,3,1], [6,4,2]),
- ?line Six = lists:rumerge(F, [6,4,2], [5,3,1]),
- ?line Six = lists:rumerge(F, [3,2,1], [6,5,4]),
- ?line Six = lists:rumerge(F, [6,5,4], [3,2,1]),
- ?line Six = lists:rumerge(F, [4,3,2],[6,5,1]),
- ?line [7,6,5,3,1] = lists:rumerge(F, [7,5,3,1], [6]),
- ?line [7,6,5,4,3,1] = lists:rumerge(F, [7,5,3,1], [6,4]),
- ?line [7,6,5,4,3,2,1] = lists:rumerge(F, [7,5,3,1], [6,4,2]),
- ?line [7,5,3,2,1] = lists:rumerge(F, [2], [7,5,3,1]),
- ?line [7,5,4,3,2,1] = lists:rumerge(F, [4,2], [7,5,3,1]),
- ?line [7,6,5,4,3,2,1] = lists:rumerge(F, [6,4,2], [7,5,3,1]),
-
- ?line [7,6,5,3,1] = lists:rumerge(F, [7,6,5,3,1], [6]),
- ?line [7,6,5,4,3,1] = lists:rumerge(F, [7,6,5,4,3,1], [6,4]),
- ?line [7,6,5,4,3,2,1] = lists:rumerge(F, [7,6,5,4,3,2,1], [6,4,2]),
- ?line [7,5,3,2,1] = lists:rumerge(F, [2], [7,5,3,2,1]),
- ?line [7,5,4,3,2,1] = lists:rumerge(F, [4,2], [7,5,4,3,2,1]),
- ?line [7,6,5,4,3,2,1] = lists:rumerge(F, [6,4,2], [7,6,5,4,3,2,1]),
+ [] = lists:rumerge(F, [], []),
+ Two = lists:rumerge(F, Two, []),
+ Two = lists:rumerge(F, [], Two),
+ Six = lists:rumerge(F, [5,3,1], [6,4,2]),
+ Six = lists:rumerge(F, [6,4,2], [5,3,1]),
+ Six = lists:rumerge(F, [3,2,1], [6,5,4]),
+ Six = lists:rumerge(F, [6,5,4], [3,2,1]),
+ Six = lists:rumerge(F, [4,3,2],[6,5,1]),
+ [7,6,5,3,1] = lists:rumerge(F, [7,5,3,1], [6]),
+ [7,6,5,4,3,1] = lists:rumerge(F, [7,5,3,1], [6,4]),
+ [7,6,5,4,3,2,1] = lists:rumerge(F, [7,5,3,1], [6,4,2]),
+ [7,5,3,2,1] = lists:rumerge(F, [2], [7,5,3,1]),
+ [7,5,4,3,2,1] = lists:rumerge(F, [4,2], [7,5,3,1]),
+ [7,6,5,4,3,2,1] = lists:rumerge(F, [6,4,2], [7,5,3,1]),
+
+ [7,6,5,3,1] = lists:rumerge(F, [7,6,5,3,1], [6]),
+ [7,6,5,4,3,1] = lists:rumerge(F, [7,6,5,4,3,1], [6,4]),
+ [7,6,5,4,3,2,1] = lists:rumerge(F, [7,6,5,4,3,2,1], [6,4,2]),
+ [7,5,3,2,1] = lists:rumerge(F, [2], [7,5,3,2,1]),
+ [7,5,4,3,2,1] = lists:rumerge(F, [4,2], [7,5,4,3,2,1]),
+ [7,6,5,4,3,2,1] = lists:rumerge(F, [6,4,2], [7,6,5,4,3,2,1]),
F2 = fun(X,Y) -> element(1,X) =< element(1,Y) end,
L1 = [{1,a},{1,b},{1,a}],
L2 = [{1,a},{1,b},{1,a}],
- ?line true = lists:umerge(F2, L1, L2) ==
+ true = lists:umerge(F2, L1, L2) ==
lists:reverse(lists:rumerge(F, lists:reverse(L2), lists:reverse(L1))),
L3 = [{c,11},{c,12},{e,5}],
L4 = [{b,2},{c,21},{c,22}],
- ?line true =
+ true =
lists:umerge(F2, L3, L4) ==
lists:reverse(lists:rumerge(F2,lists:reverse(L3), lists:reverse(L4))),
ok.
-ufunsort_1(doc) -> ["usort/2"];
-ufunsort_1(suite) -> [];
ufunsort_1(Config) when is_list(Config) ->
- ?line ok = ufunsort_check(1, [], []),
- ?line ok = ufunsort_check(1, [{a,b}], [{a,b}]),
- ?line ok = ufunsort_check(1, [{a,b},{a,b}], [{a,b}]),
- ?line ok = ufunsort_check(1, [{a,b},{b,c}], [{a,b},{b,c}]),
- ?line ok = ufunsort_check(1, [{b,c},{a,b}], [{a,b},{b,c}]),
- ?line ok = ufunsort_check(1,
- [{1,e},{3,f},{2,y},{0,z},{x,14}],
- [{0,z},{1,e},{2,y},{3,f},{x,14}]),
- ?line ok = ufunsort_check(1,
- [{1,a},{2,b},{3,c},{2,b},{1,a},{2,b},{3,c},
- {2,b},{1,a}],
- [{1,a},{2,b},{3,c}]),
- ?line ok = ufunsort_check(1,
- [{1,a},{1,a},{1,b},{1,b},{1,a},{2,a}],
- [{1,a},{2,a}]),
+ ok = ufunsort_check(1, [], []),
+ ok = ufunsort_check(1, [{a,b}], [{a,b}]),
+ ok = ufunsort_check(1, [{a,b},{a,b}], [{a,b}]),
+ ok = ufunsort_check(1, [{a,b},{b,c}], [{a,b},{b,c}]),
+ ok = ufunsort_check(1, [{b,c},{a,b}], [{a,b},{b,c}]),
+ ok = ufunsort_check(1,
+ [{1,e},{3,f},{2,y},{0,z},{x,14}],
+ [{0,z},{1,e},{2,y},{3,f},{x,14}]),
+ ok = ufunsort_check(1,
+ [{1,a},{2,b},{3,c},{2,b},{1,a},{2,b},{3,c},
+ {2,b},{1,a}],
+ [{1,a},{2,b},{3,c}]),
+ ok = ufunsort_check(1,
+ [{1,a},{1,a},{1,b},{1,b},{1,a},{2,a}],
+ [{1,a},{2,a}]),
F = funsort_fun(1),
L1 = [{1,a},{1,b},{1,a}],
L2 = [{1,a},{1,b},{1,a}],
- ?line ok = ufunsort_check(1, lists:keymerge(1, L1, L2),
- lists:umerge(F, lists:usort(F, L1),
- lists:usort(F, L2))),
+ ok = ufunsort_check(1, lists:keymerge(1, L1, L2),
+ lists:umerge(F, lists:usort(F, L1),
+ lists:usort(F, L2))),
L3 = [{1,a},{1,b},{1,a},{2,a}],
- ?line ok = ufunsort_check(1, lists:keymerge(1, L3, L2),
- lists:umerge(F, lists:usort(F, L3),
- lists:usort(F, L2))),
+ ok = ufunsort_check(1, lists:keymerge(1, L3, L2),
+ lists:umerge(F, lists:usort(F, L3),
+ lists:usort(F, L2))),
L4 = [{1,b},{1,a}],
- ?line ok = ufunsort_check(1, lists:keymerge(1, L1, L4),
- lists:umerge(F, lists:usort(F, L1),
- lists:usort(F, L4))),
+ ok = ufunsort_check(1, lists:keymerge(1, L1, L4),
+ lists:umerge(F, lists:usort(F, L1),
+ lists:usort(F, L4))),
L5 = [{1,a},{1,b},{1,a},{2,a}],
- ?line ok = ufunsort_check(1, lists:keymerge(1, L5, []),
- lists:umerge(F, lists:usort(F, L5), [])),
+ ok = ufunsort_check(1, lists:keymerge(1, L5, []),
+ lists:umerge(F, lists:usort(F, L5), [])),
L6 = [{3,a}],
- ?line ok = ufunsort_check(1, lists:keymerge(1, L5, L6),
- lists:umerge(F, lists:usort(F, L5),
- lists:usort(F, L6))),
-
- ?line [{b,1},{c,1}] = lists:usort(F, [{c,1},{c,1},{b,1}]),
- ?line [{a,0},{b,2},{c,3},{d,4}] =
- lists:usort(F, [{d,4},{c,3},{b,2},{b,2},{a,0}]),
- ?line [{a,0},{b,1},{c,1}] =
- lists:usort(F, [{c,1},{b,1},{b,1},{b,2},{b,2},{a,0}]),
- ?line [{a,0},{b,1},{c,1},{d,4}] =
- lists:usort(F, [{c,1},{b,1},{b,2},{a,0},{a,0},{d,4},{d,4}]),
+ ok = ufunsort_check(1, lists:keymerge(1, L5, L6),
+ lists:umerge(F, lists:usort(F, L5),
+ lists:usort(F, L6))),
+
+ [{b,1},{c,1}] = lists:usort(F, [{c,1},{c,1},{b,1}]),
+ [{a,0},{b,2},{c,3},{d,4}] =
+ lists:usort(F, [{d,4},{c,3},{b,2},{b,2},{a,0}]),
+ [{a,0},{b,1},{c,1}] =
+ lists:usort(F, [{c,1},{b,1},{b,1},{b,2},{b,2},{a,0}]),
+ [{a,0},{b,1},{c,1},{d,4}] =
+ lists:usort(F, [{c,1},{b,1},{b,2},{a,0},{a,0},{d,4},{d,4}]),
SFun = fun(L) -> fun(X) -> ufunsort_check(1, X, L) end end,
PL = [{1,a},{2,b},{3,c},{4,d},{5,e},{6,f}],
Ps = perms([{1,a},{2,b},{3,c},{4,d},{5,e},{6,f},{2,b},{1,a}]),
- ?line lists:foreach(SFun(PL), Ps),
+ lists:foreach(SFun(PL), Ps),
ok.
-ufunsort_stable(doc) -> ["usort/2 should be stable"];
-ufunsort_stable(suite) -> [];
+%% usort/2 should be stable.
ufunsort_stable(Config) when is_list(Config) ->
- ?line ok = ufunsort_check(1, [{1,b},{1,c}], [{1,b}]),
- ?line ok = ufunsort_check(1, [{1,c},{1,b}], [{1,c}]),
- ?line ok = ufunsort_check(1,
- [{1,c},{1,b},{2,x},{3,p},{2,a}],
- [{1,c},{2,x},{3,p}]),
-
- ?line ok = ufunsort_check_stability(bigfunlist(10)),
- ?line ok = ufunsort_check_stability(bigfunlist(100)),
- ?line ok = ufunsort_check_stability(bigfunlist(1000)),
- ?line case erlang:system_info(modified_timing_level) of
- undefined -> ok = ufunsort_check_stability(bigfunlist(10000));
- _ -> ok
- end,
- ok.
-
-ufunsort_error(doc) -> ["usort/2 should exit when given bad arguments"];
-ufunsort_error(suite) -> [];
+ ok = ufunsort_check(1, [{1,b},{1,c}], [{1,b}]),
+ ok = ufunsort_check(1, [{1,c},{1,b}], [{1,c}]),
+ ok = ufunsort_check(1,
+ [{1,c},{1,b},{2,x},{3,p},{2,a}],
+ [{1,c},{2,x},{3,p}]),
+
+ ok = ufunsort_check_stability(bigfunlist(10)),
+ ok = ufunsort_check_stability(bigfunlist(100)),
+ ok = ufunsort_check_stability(bigfunlist(1000)),
+ case erlang:system_info(modified_timing_level) of
+ undefined -> ok = ufunsort_check_stability(bigfunlist(10000));
+ _ -> ok
+ end,
+ ok.
+
+%% usort/2 should exit when given bad arguments.
ufunsort_error(Config) when is_list(Config) ->
- ?line {'EXIT', _} = (catch lists:usort(1, [{1,b} , {1,c}])),
- ?line {'EXIT', _} = (catch lists:usort(fun(X,Y) -> X =< Y end,
- [{1,b} | {1,c}])),
+ {'EXIT', _} = (catch lists:usort(1, [{1,b} , {1,c}])),
+ {'EXIT', _} = (catch lists:usort(fun(X,Y) -> X =< Y end,
+ [{1,b} | {1,c}])),
ok.
-ufunsort_rand(doc) -> ["usort/2 on big randomized lists"];
-ufunsort_rand(suite) -> [];
+%% usort/2 on big randomized lists.
ufunsort_rand(Config) when is_list(Config) ->
- ?line ok = ufunsort_check3(1, biglist(10)),
- ?line ok = ufunsort_check3(1, biglist(100)),
- ?line ok = ufunsort_check3(1, biglist(1000)),
- ?line ok = ufunsort_check3(1, biglist(10000)),
+ ok = ufunsort_check3(1, biglist(10)),
+ ok = ufunsort_check3(1, biglist(100)),
+ ok = ufunsort_check3(1, biglist(1000)),
+ ok = ufunsort_check3(1, biglist(10000)),
- ?line ok = gen_ufunsort_check(1, ubiglist(100)),
- ?line ok = gen_ufunsort_check(1, ubiglist(1000)),
- ?line ok = gen_ufunsort_check(1, ubiglist(10000)),
+ ok = gen_ufunsort_check(1, ubiglist(100)),
+ ok = gen_ufunsort_check(1, ubiglist(1000)),
+ ok = gen_ufunsort_check(1, ubiglist(10000)),
ok.
%% Check that usort/2 is stable and correct relative sort/2.
@@ -1646,10 +1579,10 @@ ufunsort_check3(I, Input) ->
%%% Keysort a list, check that the returned list is what we expected,
%%% and that it is actually sorted.
ufunsort_check(I, Input, Expected) ->
- ?line Expected = ufunsort(I, Input),
+ Expected = ufunsort(I, Input),
ucheck_sorted(I, Input, Expected).
-% Do a keysort
+%% Do a keysort
ufunsort(I, L) ->
lists:usort(funsort_fun(I), L).
@@ -1677,8 +1610,7 @@ check_stab(L, U, S, US, SS) ->
%%% Element 3 in the tuple is the position of the tuple in the list.
biglist(N) ->
- {A, B, C} = get_seed(),
- random:seed(A, B, C),
+ rand:seed(exsplus),
biglist(N, []).
biglist(0, L) ->
@@ -1694,8 +1626,7 @@ biglist(N, L) ->
%%% No sequence number.
ubiglist(N) ->
- {A, B, C} = get_seed(),
- random:seed(A, B, C),
+ rand:seed(exsplus),
ubiglist(N, []).
ubiglist(0, L) ->
@@ -1703,7 +1634,7 @@ ubiglist(0, L) ->
ubiglist(N, L) ->
E = urandom_tuple(11, 6),
ubiglist(N-1, [E|L]).
-
+
urandom_tuple(N, I) ->
R1 = randint(N),
R2 = randint(I),
@@ -1719,8 +1650,7 @@ urandom_tuple(N, I) ->
%%% sequence number.
bigfunlist(N) ->
- {A, B, C} = get_seed(),
- random:seed(A, B, C),
+ rand:seed(exsplus),
bigfunlist_1(N).
bigfunlist_1(N) when N < 30000 -> % Now (R8) max 32000 different pids.
@@ -1736,7 +1666,7 @@ bigfunlist(0, _P, L) ->
bigfunlist(N, P, L) ->
{E, NP} = random_funtuple(P, 11),
bigfunlist(N-1, NP, [E | L]).
-
+
random_funtuple(P, N) ->
R = randint(N),
F = make_fun(),
@@ -1747,28 +1677,20 @@ random_funtuple(P, N) ->
make_fun() ->
Pid = spawn(?MODULE, make_fun, [self()]),
receive {Pid, Fun} -> Fun end.
-
+
make_fun(Pid) ->
Pid ! {self(), fun make_fun/1}.
fun_pid(Fun) ->
erlang:fun_info(Fun, pid).
-get_seed() ->
- case random:seed() of
- undefined ->
- erlang:timestamp();
- Tuple ->
- Tuple
- end.
-
random_tuple(N, Seq) ->
R1 = randint(N),
R2 = randint(N),
{R1, R2, Seq}.
randint(N) ->
- trunc(random:uniform() * N).
+ trunc(rand:uniform() * N).
%% The first "duplicate" is kept.
no_dups([]) ->
@@ -1830,8 +1752,7 @@ sort_loop_1(Pid) ->
end.
sloop(N) ->
- {A, B, C} = get_seed(),
- random:seed(A, B, C),
+ rand:seed(exsplus),
sloop(N, #state{}).
sloop(N, S) ->
@@ -1866,7 +1787,7 @@ sloop(N, S) ->
end,
sloop(N, NS)
end.
-
+
display_state(S) ->
io:format("sort: ~p~n", [S#state.sort]),
io:format("usort: ~p~n", [S#state.usort]),
@@ -2135,85 +2056,67 @@ rkeymerge2_2(_I, T1, _E1, [], M, H1) ->
%%%------------------------------------------------------------
-seq_loop(doc) ->
- ["Test for infinite loop (OTP-2404)."];
-seq_loop(suite) ->
- [];
+%% Test for infinite loop (OTP-2404).
seq_loop(Config) when is_list(Config) ->
- ?line _ = (catch lists:seq(1, 5, -1)),
+ _ = (catch lists:seq(1, 5, -1)),
ok.
-seq_2(doc) ->
- ["Non-error cases for seq/2"];
-seq_2(suite) ->
- [];
+%% Non-error cases for seq/2.
seq_2(Config) when is_list(Config) ->
- ?line [1,2,3] = lists:seq(1,3),
- ?line [1] = lists:seq(1,1),
- ?line Big = 748274827583793785928592859,
- ?line Big1 = Big+1,
- ?line Big2 = Big+2,
- ?line [Big, Big1, Big2] = lists:seq(Big, Big+2),
+ [1,2,3] = lists:seq(1,3),
+ [1] = lists:seq(1,1),
+ Big = 748274827583793785928592859,
+ Big1 = Big+1,
+ Big2 = Big+2,
+ [Big, Big1, Big2] = lists:seq(Big, Big+2),
ok.
-seq_2_e(doc) ->
- ["Error cases for seq/2"];
-seq_2_e(suite) ->
- [];
+%% Error cases for seq/2.
seq_2_e(Config) when is_list(Config) ->
- ?line seq_error([4, 2]),
- ?line seq_error([1, a]),
- ?line seq_error([1.0, 2.0]),
+ seq_error([4, 2]),
+ seq_error([1, a]),
+ seq_error([1.0, 2.0]),
ok.
seq_error(Args) ->
{'EXIT', _} = (catch apply(lists, seq, Args)).
-seq_3(doc) ->
- ["Non-error cases for seq/3"];
-seq_3(suite) ->
- [];
+%% Non-error cases for seq/3.
seq_3(Config) when is_list(Config) ->
- ?line [1,2,3] = lists:seq(1,3,1),
- ?line [1] = lists:seq(1,1,1),
- ?line Big = 748274827583793785928592859,
- ?line Big1 = Big+1,
- ?line Big2 = Big+2,
- ?line [Big, Big1, Big2] = lists:seq(Big, Big+2,1),
+ [1,2,3] = lists:seq(1,3,1),
+ [1] = lists:seq(1,1,1),
+ Big = 748274827583793785928592859,
+ Big1 = Big+1,
+ Big2 = Big+2,
+ [Big, Big1, Big2] = lists:seq(Big, Big+2,1),
- ?line [3,2,1] = lists:seq(3,1,-1),
- ?line [1] = lists:seq(1,1,-1),
+ [3,2,1] = lists:seq(3,1,-1),
+ [1] = lists:seq(1,1,-1),
- ?line [3,1] = lists:seq(3,1,-2),
- ?line [1] = lists:seq(1, 10, 10),
- ?line [1, 4, 7, 10, 13, 16, 19] = lists:seq(1, 19, 3),
- ?line [1, 4, 7, 10, 13, 16, 19] = lists:seq(1, 20, 3),
- ?line [1, 4, 7, 10, 13, 16, 19] = lists:seq(1, 21, 3),
+ [3,1] = lists:seq(3,1,-2),
+ [1] = lists:seq(1, 10, 10),
+ [1, 4, 7, 10, 13, 16, 19] = lists:seq(1, 19, 3),
+ [1, 4, 7, 10, 13, 16, 19] = lists:seq(1, 20, 3),
+ [1, 4, 7, 10, 13, 16, 19] = lists:seq(1, 21, 3),
- ?line [1] = lists:seq(1, 1, 0), %OTP-2613
+ [1] = lists:seq(1, 1, 0), %OTP-2613
ok.
-seq_3_e(doc) ->
- ["Error cases for seq/3"];
-seq_3_e(suite) ->
- [];
+%% Error cases for seq/3.
seq_3_e(Config) when is_list(Config) ->
- ?line seq_error([4, 2, 1]),
- ?line seq_error([3, 5, -1]),
- ?line seq_error([1, a, 1]),
- ?line seq_error([1.0, 2.0, 1]),
+ seq_error([4, 2, 1]),
+ seq_error([3, 5, -1]),
+ seq_error([1, a, 1]),
+ seq_error([1.0, 2.0, 1]),
- ?line seq_error([1, 3, 1.0]),
- ?line seq_error([1, 3, a]),
- ?line seq_error([1, 3, 0]),
+ seq_error([1, 3, 1.0]),
+ seq_error([1, 3, a]),
+ seq_error([1, 3, 0]),
- ?line seq_error([a, a, 0]),
+ seq_error([a, a, 0]),
ok.
-otp_7230(doc) ->
- ["OTP-7230. seq/1,2 returns the empty list"];
-otp_7230(suite) ->
- [];
+%% OTP-7230. seq/1,2 returns the empty list.
otp_7230(Config) when is_list(Config) ->
From = -10,
To = 10,
@@ -2222,26 +2125,26 @@ otp_7230(Config) when is_list(Config) ->
L = lists:seq(From, To),
SL = lists:seq(StepFrom, StepTo),
- ?line [] =
- [{F, T, S} ||
- F <- L, T <- L, S <- SL,
- not check_seq(F, T, S, catch lists:seq(F, T, S))
- orelse
- S =:= 1 andalso not check_seq(F, T, S, catch lists:seq(F, T))
+ [] =
+ [{F, T, S} ||
+ F <- L, T <- L, S <- SL,
+ not check_seq(F, T, S, catch lists:seq(F, T, S))
+ orelse
+ S =:= 1 andalso not check_seq(F, T, S, catch lists:seq(F, T))
].
check_seq(From, To, 0, R) ->
- From =:= To andalso R =:= [From]
- orelse
- From =/= To andalso is_tuple(R) andalso element(1, R) =:= 'EXIT';
+ From =:= To andalso R =:= [From]
+ orelse
+ From =/= To andalso is_tuple(R) andalso element(1, R) =:= 'EXIT';
check_seq(From, To, Step, []) when Step =/= 0 ->
- 0 =:= property(From, To, Step)
- andalso
- (
- Step > 0 andalso To < From andalso From-To =< Step
- orelse
- Step < 0 andalso To > From andalso To-From =< -Step
- );
+ 0 =:= property(From, To, Step)
+ andalso
+ (
+ Step > 0 andalso To < From andalso From-To =< Step
+ orelse
+ Step < 0 andalso To > From andalso To-From =< -Step
+ );
check_seq(From, To, Step, R) when R =/= [], To < From, Step > 0 ->
is_tuple(R) andalso element(1, R) =:= 'EXIT';
check_seq(From, To, Step, R) when R =/= [], To > From, Step < 0 ->
@@ -2252,27 +2155,27 @@ check_seq(From, To, Step, L) when is_list(L), L =/= [], Step =/= 0 ->
Min = lists:min(L),
Max = lists:max(L),
- [] =:= [E || E <- L, not is_integer(E)]
- andalso
- %% The difference between two consecutive elements is Step:
- begin
- LS = [First-Step]++L,
- LR = L++[Last+Step],
- [Step] =:= lists:usort([B-A || {A,B} <- lists:zip(LS, LR)])
- end
- andalso
- %% The first element of L is From:
- From =:= First
- andalso
- %% No element outside the given interval:
- Min >= lists:min([From, To])
- andalso
- Max =< lists:max([From, To])
- andalso
- %% All elements are present:
- abs(To-Last) < abs(Step)
- andalso
- length(L) =:= property(From, To, Step);
+ [] =:= [E || E <- L, not is_integer(E)]
+ andalso
+ %% The difference between two consecutive elements is Step:
+ begin
+ LS = [First-Step]++L,
+ LR = L++[Last+Step],
+ [Step] =:= lists:usort([B-A || {A,B} <- lists:zip(LS, LR)])
+ end
+ andalso
+ %% The first element of L is From:
+ From =:= First
+ andalso
+ %% No element outside the given interval:
+ Min >= lists:min([From, To])
+ andalso
+ Max =< lists:max([From, To])
+ andalso
+ %% All elements are present:
+ abs(To-Last) < abs(Step)
+ andalso
+ length(L) =:= property(From, To, Step);
check_seq(_From, _To, _Step, _R) ->
false.
@@ -2282,25 +2185,22 @@ property(From, To, Step) ->
%%%------------------------------------------------------------
--define(sublist_error2(X,Y), ?line {'EXIT', _} = (catch lists:sublist(X,Y))).
--define(sublist_error3(X,Y,Z), ?line {'EXIT', _} = (catch lists:sublist(X,Y,Z))).
+-define(sublist_error2(X,Y), {'EXIT', _} = (catch lists:sublist(X,Y))).
+-define(sublist_error3(X,Y,Z), {'EXIT', _} = (catch lists:sublist(X,Y,Z))).
-sublist_2(doc) -> ["sublist/2"];
-sublist_2(suite) -> [];
sublist_2(Config) when is_list(Config) ->
- ?line [] = lists:sublist([], 0),
- ?line [] = lists:sublist([], 1),
- ?line [] = lists:sublist([a], 0),
- ?line [a] = lists:sublist([a], 1),
- ?line [a] = lists:sublist([a], 2),
- ?line [a] = lists:sublist([a|b], 1),
+ [] = lists:sublist([], 0),
+ [] = lists:sublist([], 1),
+ [] = lists:sublist([a], 0),
+ [a] = lists:sublist([a], 1),
+ [a] = lists:sublist([a], 2),
+ [a] = lists:sublist([a|b], 1),
- ?line [a,b] = lists:sublist([a,b|c], 2),
+ [a,b] = lists:sublist([a,b|c], 2),
ok.
-sublist_2_e(doc) -> ["sublist/2 error cases"];
-sublist_2_e(suite) -> [];
+%% sublist/2 error cases.
sublist_2_e(Config) when is_list(Config) ->
?sublist_error2([], -1),
?sublist_error2(a, -1),
@@ -2312,36 +2212,33 @@ sublist_2_e(Config) when is_list(Config) ->
?sublist_error2([], 1.5),
ok.
-sublist_3(doc) -> ["sublist/3"];
-sublist_3(suite) -> [];
sublist_3(Config) when is_list(Config) ->
- ?line [] = lists:sublist([], 1, 0),
- ?line [] = lists:sublist([], 1, 1),
- ?line [] = lists:sublist([a], 1, 0),
- ?line [a] = lists:sublist([a], 1, 1),
- ?line [a] = lists:sublist([a], 1, 2),
- ?line [a] = lists:sublist([a|b], 1, 1),
-
- ?line [] = lists:sublist([], 1, 0),
- ?line [] = lists:sublist([], 1, 1),
- ?line [] = lists:sublist([a], 1, 0),
- ?line [a] = lists:sublist([a], 1, 1),
- ?line [a] = lists:sublist([a], 1, 2),
- ?line [] = lists:sublist([a], 2, 1),
- ?line [] = lists:sublist([a], 2, 2),
- ?line [] = lists:sublist([a], 2, 79),
- ?line [] = lists:sublist([a,b|c], 1, 0),
- ?line [] = lists:sublist([a,b|c], 2, 0),
- ?line [a] = lists:sublist([a,b|c], 1, 1),
- ?line [b] = lists:sublist([a,b|c], 2, 1),
- ?line [a,b] = lists:sublist([a,b|c], 1, 2),
-
- ?line [] = lists:sublist([a], 2, 0),
-
- ok.
-
-sublist_3_e(doc) -> ["sublist/3 error cases"];
-sublist_3_e(suite) -> [];
+ [] = lists:sublist([], 1, 0),
+ [] = lists:sublist([], 1, 1),
+ [] = lists:sublist([a], 1, 0),
+ [a] = lists:sublist([a], 1, 1),
+ [a] = lists:sublist([a], 1, 2),
+ [a] = lists:sublist([a|b], 1, 1),
+
+ [] = lists:sublist([], 1, 0),
+ [] = lists:sublist([], 1, 1),
+ [] = lists:sublist([a], 1, 0),
+ [a] = lists:sublist([a], 1, 1),
+ [a] = lists:sublist([a], 1, 2),
+ [] = lists:sublist([a], 2, 1),
+ [] = lists:sublist([a], 2, 2),
+ [] = lists:sublist([a], 2, 79),
+ [] = lists:sublist([a,b|c], 1, 0),
+ [] = lists:sublist([a,b|c], 2, 0),
+ [a] = lists:sublist([a,b|c], 1, 1),
+ [b] = lists:sublist([a,b|c], 2, 1),
+ [a,b] = lists:sublist([a,b|c], 1, 2),
+
+ [] = lists:sublist([a], 2, 0),
+
+ ok.
+
+%% sublist/3 error cases
sublist_3_e(Config) when is_list(Config) ->
?sublist_error3([], 1, -1),
?sublist_error3(a, 1, -1),
@@ -2375,8 +2272,8 @@ sublist_3_e(Config) when is_list(Config) ->
%%%------------------------------------------------------------
--define(flatten_error1(X), ?line {'EXIT', _} = (catch lists:flatten(X))).
--define(flatten_error2(X,Y), ?line {'EXIT', _} = (catch lists:flatten(X,Y))).
+-define(flatten_error1(X), {'EXIT', _} = (catch lists:flatten(X))).
+-define(flatten_error2(X,Y), {'EXIT', _} = (catch lists:flatten(X,Y))).
%% Test lists:flatten/1,2 and lists:flatlength/1.
flatten_1(Config) when is_list(Config) ->
@@ -2397,8 +2294,7 @@ lists_flatten(List) ->
Len = length(Flat),
Flat.
-flatten_1_e(doc) -> ["flatten/1 error cases"];
-flatten_1_e(suite) -> [];
+%% flatten/1 error cases
flatten_1_e(Config) when is_list(Config) ->
?flatten_error1(a),
?flatten_error1([a|b]),
@@ -2416,60 +2312,59 @@ flatten_2(Config) when is_list(Config) ->
[a,b,c,[no,flatten]] = lists:flatten([[a,[b,c]]], [[no,flatten]]),
ok.
-flatten_2_e(doc) -> ["flatten/2 error cases"];
-flatten_2_e(suite) -> [];
+%% flatten/2 error cases.
flatten_2_e(Config) when is_list(Config) ->
ok.
%% Test lists:zip/2, lists:unzip/1.
zip_unzip(Config) when is_list(Config) ->
- ?line [] = lists:zip([], []),
- ?line [{a,b}] = lists:zip([a], [b]),
- ?line [{42.0,{kalle,nisse}},{a,b}] = lists:zip([42.0,a], [{kalle,nisse},b]),
+ [] = lists:zip([], []),
+ [{a,b}] = lists:zip([a], [b]),
+ [{42.0,{kalle,nisse}},{a,b}] = lists:zip([42.0,a], [{kalle,nisse},b]),
%% Longer lists.
- ?line SeqA = lists:seq(45, 200),
- ?line SeqB = [A*A || A <- SeqA],
- ?line AB = lists:zip(SeqA, SeqB),
- ?line SeqA = [A || {A,_} <- AB],
- ?line SeqB = [B || {_,B} <- AB],
- ?line {SeqA,SeqB} = lists:unzip(AB),
-
+ SeqA = lists:seq(45, 200),
+ SeqB = [A*A || A <- SeqA],
+ AB = lists:zip(SeqA, SeqB),
+ SeqA = [A || {A,_} <- AB],
+ SeqB = [B || {_,B} <- AB],
+ {SeqA,SeqB} = lists:unzip(AB),
+
%% Some more unzip/1.
- ?line {[],[]} = lists:unzip([]),
- ?line {[a],[b]} = lists:unzip([{a,b}]),
- ?line {[a,c],[b,d]} = lists:unzip([{a,b},{c,d}]),
+ {[],[]} = lists:unzip([]),
+ {[a],[b]} = lists:unzip([{a,b}]),
+ {[a,c],[b,d]} = lists:unzip([{a,b},{c,d}]),
%% Error cases.
- ?line {'EXIT',{function_clause,_}} = (catch lists:zip([], [b])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zip([a], [])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zip([a], [b,c])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zip([a], [b,c])),
+ {'EXIT',{function_clause,_}} = (catch lists:zip([], [b])),
+ {'EXIT',{function_clause,_}} = (catch lists:zip([a], [])),
+ {'EXIT',{function_clause,_}} = (catch lists:zip([a], [b,c])),
+ {'EXIT',{function_clause,_}} = (catch lists:zip([a], [b,c])),
ok.
%% Test lists:zip3/3, lists:unzip3/1.
zip_unzip3(Config) when is_list(Config) ->
- ?line [] = lists:zip3([], [], []),
- ?line [{a,b,c}] = lists:zip3([a], [b], [c]),
+ [] = lists:zip3([], [], []),
+ [{a,b,c}] = lists:zip3([a], [b], [c]),
%% Longer lists.
- ?line SeqA = lists:seq(45, 200),
- ?line SeqB = [2*A || A <- SeqA],
- ?line SeqC = [A*A || A <- SeqA],
- ?line ABC = lists:zip3(SeqA, SeqB, SeqC),
- ?line SeqA = [A || {A,_,_} <- ABC],
- ?line SeqB = [B || {_,B,_} <- ABC],
- ?line SeqC = [C || {_,_,C} <- ABC],
- ?line {SeqA,SeqB,SeqC} = lists:unzip3(ABC),
+ SeqA = lists:seq(45, 200),
+ SeqB = [2*A || A <- SeqA],
+ SeqC = [A*A || A <- SeqA],
+ ABC = lists:zip3(SeqA, SeqB, SeqC),
+ SeqA = [A || {A,_,_} <- ABC],
+ SeqB = [B || {_,B,_} <- ABC],
+ SeqC = [C || {_,_,C} <- ABC],
+ {SeqA,SeqB,SeqC} = lists:unzip3(ABC),
%% Some more unzip3/1.
- ?line {[],[],[]} = lists:unzip3([]),
- ?line {[a],[b],[c]} = lists:unzip3([{a,b,c}]),
+ {[],[],[]} = lists:unzip3([]),
+ {[a],[b],[c]} = lists:unzip3([{a,b,c}]),
%% Error cases.
- ?line {'EXIT',{function_clause,_}} = (catch lists:zip3([], [], [c])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zip3([], [b], [])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zip3([a], [], [])),
+ {'EXIT',{function_clause,_}} = (catch lists:zip3([], [], [c])),
+ {'EXIT',{function_clause,_}} = (catch lists:zip3([], [b], [])),
+ {'EXIT',{function_clause,_}} = (catch lists:zip3([a], [], [])),
ok.
@@ -2477,61 +2372,74 @@ zip_unzip3(Config) when is_list(Config) ->
zipwith(Config) when is_list(Config) ->
Zip = fun(A, B) -> [A|B] end,
- ?line [] = lists:zipwith(Zip, [], []),
- ?line [[a|b]] = lists:zipwith(Zip, [a], [b]),
+ [] = lists:zipwith(Zip, [], []),
+ [[a|b]] = lists:zipwith(Zip, [a], [b]),
%% Longer lists.
- ?line SeqA = lists:seq(77, 300),
- ?line SeqB = [A*A || A <- SeqA],
- ?line AB = lists:zipwith(Zip, SeqA, SeqB),
- ?line SeqA = [A || [A|_] <- AB],
- ?line SeqB = [B || [_|B] <- AB],
-
+ SeqA = lists:seq(77, 300),
+ SeqB = [A*A || A <- SeqA],
+ AB = lists:zipwith(Zip, SeqA, SeqB),
+ SeqA = [A || [A|_] <- AB],
+ SeqB = [B || [_|B] <- AB],
+
%% Error cases.
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith(badfun, [], [])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith(Zip, [], [b])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith(Zip, [a], [])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith(Zip, [a], [b,c])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith(Zip, [a], [b,c])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith(badfun, [], [])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith(Zip, [], [b])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith(Zip, [a], [])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith(Zip, [a], [b,c])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith(Zip, [a], [b,c])),
ok.
%% Test lists:zipwith3/4.
zipwith3(Config) when is_list(Config) ->
Zip = fun(A, B, C) -> [A,B,C] end,
- ?line [] = lists:zipwith3(Zip, [], [], []),
- ?line [[a,b,c]] = lists:zipwith3(Zip, [a], [b], [c]),
+ [] = lists:zipwith3(Zip, [], [], []),
+ [[a,b,c]] = lists:zipwith3(Zip, [a], [b], [c]),
%% Longer lists.
- ?line SeqA = lists:seq(45, 200),
- ?line SeqB = [2*A || A <- SeqA],
- ?line SeqC = [A*A || A <- SeqA],
- ?line ABC = lists:zipwith3(Zip, SeqA, SeqB, SeqC),
- ?line SeqA = [A || [A,_,_] <- ABC],
- ?line SeqB = [B || [_,B,_] <- ABC],
- ?line SeqC = [C || [_,_,C] <- ABC],
+ SeqA = lists:seq(45, 200),
+ SeqB = [2*A || A <- SeqA],
+ SeqC = [A*A || A <- SeqA],
+ ABC = lists:zipwith3(Zip, SeqA, SeqB, SeqC),
+ SeqA = [A || [A,_,_] <- ABC],
+ SeqB = [B || [_,B,_] <- ABC],
+ SeqC = [C || [_,_,C] <- ABC],
%% Error cases.
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith3(badfun, [], [], [])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith3(Zip, [], [], [c])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith3(Zip, [], [b], [])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:zipwith3(Zip, [a], [], [])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith3(badfun, [], [], [])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith3(Zip, [], [], [c])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith3(Zip, [], [b], [])),
+ {'EXIT',{function_clause,_}} = (catch lists:zipwith3(Zip, [a], [], [])),
+
+ ok.
+
+%% Test lists:join/2
+join(Config) when is_list(Config) ->
+ A = [a,b,c],
+ Sep = x,
+ [a,x,b,x,c] = lists:join(Sep, A),
+
+ B = [b],
+ [b] = lists:join(Sep, B),
+ C = [],
+ [] = lists:join(Sep, C),
ok.
%% Test lists:filter/2, lists:partition/2.
filter_partition(Config) when is_list(Config) ->
F = fun(I) -> I rem 2 =:= 0 end,
- ?line filpart(F, [], []),
- ?line filpart(F, [1], []),
- ?line filpart(F, [1,3,17], []),
- ?line filpart(F, [1,2,3,17], [2]),
- ?line filpart(F, [6,8,1,2,3,17], [6,8,2]),
- ?line filpart(F, [6,8,1,2,42,3,17], [6,8,2,42]),
+ filpart(F, [], []),
+ filpart(F, [1], []),
+ filpart(F, [1,3,17], []),
+ filpart(F, [1,2,3,17], [2]),
+ filpart(F, [6,8,1,2,3,17], [6,8,2]),
+ filpart(F, [6,8,1,2,42,3,17], [6,8,2,42]),
%% Error cases.
- ?line {'EXIT',{function_clause,_}} = (catch lists:filter(badfun, [])),
- ?line {'EXIT',{function_clause,_}} = (catch lists:partition(badfun, [])),
+ {'EXIT',{function_clause,_}} = (catch lists:filter(badfun, [])),
+ {'EXIT',{function_clause,_}} = (catch lists:partition(badfun, [])),
ok.
filpart(F, All, Exp) ->
@@ -2540,8 +2448,7 @@ filpart(F, All, Exp) ->
{Exp,Other} = lists:partition(F, All).
-otp_5939(doc) -> ["OTP-5939. Guard tests added."];
-otp_5939(suite) -> [];
+%% OTP-5939. Guard tests added.
otp_5939(Config) when is_list(Config) ->
Fun1 = fun(A) -> A end,
Fun2 = fun(A, B) -> {A,B} end,
@@ -2550,163 +2457,161 @@ otp_5939(Config) when is_list(Config) ->
Fold = fun(_E, A) -> A end,
MapFold = fun(E, A) -> {E,A} end,
- ?line {'EXIT', _} = (catch lists:usort( [asd], [qwe])),
-
- ?line {'EXIT', _} = (catch lists:zipwith(func, [], [])),
- ?line [] = lists:zipwith(Fun2, [], []),
- ?line {'EXIT', _} = (catch lists:zipwith3(func, [], [], [])),
- ?line [] = lists:zipwith3(Fun3, [], [], []),
- ?line {'EXIT', _} = (catch lists:keymap(func, 1, [])),
- ?line {'EXIT', _} = (catch lists:keymap(Fun1, 0, [])),
- ?line [] = lists:keymap(Fun1, 1, []),
- ?line {'EXIT', _} = (catch lists:merge(func, [], [1])),
- ?line {'EXIT', _} = (catch lists:merge(func, [1], [])),
- ?line [] = lists:merge(Fun2, [], []),
- ?line {'EXIT', _} = (catch lists:rmerge(func, [], [1])),
- ?line {'EXIT', _} = (catch lists:rmerge(func, [1], [])),
- ?line [] = lists:rmerge(Fun2, [], []),
- ?line {'EXIT', _} = (catch lists:usort(func, [])),
- ?line {'EXIT', _} = (catch lists:usort(func, [a])),
- ?line {'EXIT', _} = (catch lists:usort(func, [a, b])),
- ?line [] = lists:usort(Fun2, []),
- ?line {'EXIT', _} = (catch lists:umerge(func, [], [1])),
- ?line {'EXIT', _} = (catch lists:merge(func, [1], [])),
- ?line [] = lists:umerge(Fun2, [], []),
- ?line {'EXIT', _} = (catch lists:rumerge(func, [], [1])),
- ?line {'EXIT', _} = (catch lists:rumerge(func, [1], [])),
- ?line [] = lists:rumerge(Fun2, [], []),
- ?line {'EXIT', _} = (catch lists:all(func, [])),
- ?line true = lists:all(Pred, []),
- ?line {'EXIT', _} = (catch lists:any(func, [])),
- ?line false = lists:any(Pred, []),
- ?line {'EXIT', _} = (catch lists:map(func, [])),
- ?line [] = lists:map(Fun1, []),
- ?line {'EXIT', _} = (catch lists:flatmap(func, [])),
- ?line [] = lists:flatmap(Fun1, []),
- ?line {'EXIT', _} = (catch lists:foldl(func, [], [])),
- ?line [] = lists:foldl(Fold, [], []),
- ?line {'EXIT', _} = (catch lists:foldr(func, [], [])),
- ?line [] = lists:foldr(Fold, [], []),
- ?line {'EXIT', _} = (catch lists:filter(func, [])),
- ?line [] = lists:filter(Pred, []),
- ?line {'EXIT', _} = (catch lists:partition(func, [])),
- ?line {[],[]} = lists:partition(Pred, []),
- ?line {'EXIT', _} = (catch lists:filtermap(func, [])),
- ?line [] = lists:filtermap(Fun1, []),
- ?line {'EXIT', _} = (catch lists:foreach(func, [])),
- ?line ok = lists:foreach(Fun1, []),
- ?line {'EXIT', _} = (catch lists:mapfoldl(func, [], [])),
- ?line {[],[]} = lists:mapfoldl(MapFold, [], []),
- ?line {'EXIT', _} = (catch lists:mapfoldr(func, [], [])),
- ?line {[],[]} = lists:mapfoldr(MapFold, [], []),
- ?line {'EXIT', _} = (catch lists:takewhile(func, [])),
- ?line [] = lists:takewhile(Pred, []),
- ?line {'EXIT', _} = (catch lists:dropwhile(func, [])),
- ?line [] = lists:dropwhile(Pred, []),
- ?line {'EXIT', _} = (catch lists:splitwith(func, [])),
- ?line {[],[]} = lists:splitwith(Pred, []),
-
- ok.
-
-otp_6023(doc) -> ["OTP-6023. lists:keyreplace/4, a typecheck."];
-otp_6023(suite) -> [];
+ {'EXIT', _} = (catch lists:usort( [asd], [qwe])),
+
+ {'EXIT', _} = (catch lists:zipwith(func, [], [])),
+ [] = lists:zipwith(Fun2, [], []),
+ {'EXIT', _} = (catch lists:zipwith3(func, [], [], [])),
+ [] = lists:zipwith3(Fun3, [], [], []),
+ {'EXIT', _} = (catch lists:keymap(func, 1, [])),
+ {'EXIT', _} = (catch lists:keymap(Fun1, 0, [])),
+ [] = lists:keymap(Fun1, 1, []),
+ {'EXIT', _} = (catch lists:merge(func, [], [1])),
+ {'EXIT', _} = (catch lists:merge(func, [1], [])),
+ [] = lists:merge(Fun2, [], []),
+ {'EXIT', _} = (catch lists:rmerge(func, [], [1])),
+ {'EXIT', _} = (catch lists:rmerge(func, [1], [])),
+ [] = lists:rmerge(Fun2, [], []),
+ {'EXIT', _} = (catch lists:usort(func, [])),
+ {'EXIT', _} = (catch lists:usort(func, [a])),
+ {'EXIT', _} = (catch lists:usort(func, [a, b])),
+ [] = lists:usort(Fun2, []),
+ {'EXIT', _} = (catch lists:umerge(func, [], [1])),
+ {'EXIT', _} = (catch lists:merge(func, [1], [])),
+ [] = lists:umerge(Fun2, [], []),
+ {'EXIT', _} = (catch lists:rumerge(func, [], [1])),
+ {'EXIT', _} = (catch lists:rumerge(func, [1], [])),
+ [] = lists:rumerge(Fun2, [], []),
+ {'EXIT', _} = (catch lists:all(func, [])),
+ true = lists:all(Pred, []),
+ {'EXIT', _} = (catch lists:any(func, [])),
+ false = lists:any(Pred, []),
+ {'EXIT', _} = (catch lists:map(func, [])),
+ [] = lists:map(Fun1, []),
+ {'EXIT', _} = (catch lists:flatmap(func, [])),
+ [] = lists:flatmap(Fun1, []),
+ {'EXIT', _} = (catch lists:foldl(func, [], [])),
+ [] = lists:foldl(Fold, [], []),
+ {'EXIT', _} = (catch lists:foldr(func, [], [])),
+ [] = lists:foldr(Fold, [], []),
+ {'EXIT', _} = (catch lists:filter(func, [])),
+ [] = lists:filter(Pred, []),
+ {'EXIT', _} = (catch lists:partition(func, [])),
+ {[],[]} = lists:partition(Pred, []),
+ {'EXIT', _} = (catch lists:filtermap(func, [])),
+ [] = lists:filtermap(Fun1, []),
+ {'EXIT', _} = (catch lists:foreach(func, [])),
+ ok = lists:foreach(Fun1, []),
+ {'EXIT', _} = (catch lists:mapfoldl(func, [], [])),
+ {[],[]} = lists:mapfoldl(MapFold, [], []),
+ {'EXIT', _} = (catch lists:mapfoldr(func, [], [])),
+ {[],[]} = lists:mapfoldr(MapFold, [], []),
+ {'EXIT', _} = (catch lists:takewhile(func, [])),
+ [] = lists:takewhile(Pred, []),
+ {'EXIT', _} = (catch lists:dropwhile(func, [])),
+ [] = lists:dropwhile(Pred, []),
+ {'EXIT', _} = (catch lists:splitwith(func, [])),
+ {[],[]} = lists:splitwith(Pred, []),
+
+ ok.
+
+%% OTP-6023. lists:keyreplace/4, a typecheck.
otp_6023(Config) when is_list(Config) ->
- ?line {'EXIT', _} = (catch lists:keyreplace(a, 2, [{1,a}], b)),
- ?line [{2,b}] = lists:keyreplace(a, 2, [{1,a}], {2,b}),
+ {'EXIT', _} = (catch lists:keyreplace(a, 2, [{1,a}], b)),
+ [{2,b}] = lists:keyreplace(a, 2, [{1,a}], {2,b}),
ok.
-otp_6606(doc) -> ["OTP-6606. sort and keysort bug"];
-otp_6606(suite) -> [];
+%% OTP-6606. sort and keysort bug.
otp_6606(Config) when is_list(Config) ->
I = 1,
F = float(1),
L1 = [{F,I},{F,F},{I,I},{I,F}],
- ?line L1 = lists:keysort(1, L1),
- ?line L1 = lists:sort(L1),
+ L1 = lists:keysort(1, L1),
+ L1 = lists:sort(L1),
L2 = [{I,I},{I,F},{F,I},{F,F}],
- ?line L2 = lists:keysort(1, L2),
- ?line L2 = lists:sort(L2),
+ L2 = lists:keysort(1, L2),
+ L2 = lists:sort(L2),
ok.
%% Test lists:suffix/2.
suffix(Config) when is_list(Config) ->
- ?line true = lists:suffix([], []),
- ?line true = lists:suffix([], [a]),
- ?line true = lists:suffix([], [a,b]),
- ?line true = lists:suffix([], [a,b,c]),
- ?line true = lists:suffix([a], lists:duplicate(200000, a)),
- ?line true = lists:suffix(lists:seq(1, 1024),
- lists:seq(2, 64000) ++ lists:seq(1, 1024)),
- ?line true = lists:suffix(lists:duplicate(20000, a),
- lists:duplicate(200000, a)),
- ?line true = lists:suffix([2.0,3.0], [1.0,2.0,3.0]),
+ true = lists:suffix([], []),
+ true = lists:suffix([], [a]),
+ true = lists:suffix([], [a,b]),
+ true = lists:suffix([], [a,b,c]),
+ true = lists:suffix([a], lists:duplicate(200000, a)),
+ true = lists:suffix(lists:seq(1, 1024),
+ lists:seq(2, 64000) ++ lists:seq(1, 1024)),
+ true = lists:suffix(lists:duplicate(20000, a),
+ lists:duplicate(200000, a)),
+ true = lists:suffix([2.0,3.0], [1.0,2.0,3.0]),
%% False cases.
- ?line false = lists:suffix([a], []),
- ?line false = lists:suffix([a,b,c], []),
- ?line false = lists:suffix([a,b,c], [b,c]),
- ?line false = lists:suffix([a,b,c], [a,b,c,a,b]),
- ?line false = lists:suffix(lists:duplicate(199999, a)++[b],
- lists:duplicate(200000, a)),
- ?line false = lists:suffix([2.0,3.0], [1,2,3]),
+ false = lists:suffix([a], []),
+ false = lists:suffix([a,b,c], []),
+ false = lists:suffix([a,b,c], [b,c]),
+ false = lists:suffix([a,b,c], [a,b,c,a,b]),
+ false = lists:suffix(lists:duplicate(199999, a)++[b],
+ lists:duplicate(200000, a)),
+ false = lists:suffix([2.0,3.0], [1,2,3]),
%% Error cases.
- ?line {'EXIT',_} = (catch lists:suffix({a,b,c}, [])),
- ?line {'EXIT',_} = (catch lists:suffix([], {a,b})),
- ?line {'EXIT',_} = (catch lists:suffix([a|b], [])),
- ?line {'EXIT',_} = (catch lists:suffix([a,b|c], [a|b])),
- ?line {'EXIT',_} = (catch lists:suffix([a|b], [a,b|c])),
- ?line {'EXIT',_} = (catch lists:suffix([a|b], [a|b])),
-
+ {'EXIT',_} = (catch lists:suffix({a,b,c}, [])),
+ {'EXIT',_} = (catch lists:suffix([], {a,b})),
+ {'EXIT',_} = (catch lists:suffix([a|b], [])),
+ {'EXIT',_} = (catch lists:suffix([a,b|c], [a|b])),
+ {'EXIT',_} = (catch lists:suffix([a|b], [a,b|c])),
+ {'EXIT',_} = (catch lists:suffix([a|b], [a|b])),
+
ok.
%% Test lists:subtract/2 and the '--' operator.
subtract(Config) when is_list(Config) ->
- ?line [] = sub([], []),
- ?line [] = sub([], [a]),
- ?line [] = sub([], lists:seq(1, 1024)),
- ?line sub_non_matching([a], []),
- ?line sub_non_matching([1,2], [make_ref()]),
- ?line sub_non_matching(lists:seq(1, 1024), [make_ref(),make_ref()]),
-
+ [] = sub([], []),
+ [] = sub([], [a]),
+ [] = sub([], lists:seq(1, 1024)),
+ sub_non_matching([a], []),
+ sub_non_matching([1,2], [make_ref()]),
+ sub_non_matching(lists:seq(1, 1024), [make_ref(),make_ref()]),
+
%% Matching subtracts.
- ?line [] = sub([a], [a]),
- ?line [a] = sub([a,b], [b]),
- ?line [a] = sub([a,b], [b,c]),
- ?line [a] = sub([a,b,c], [b,c]),
- ?line [a] = sub([a,b,c], [b,c]),
- ?line [d,a,a] = sub([a,b,c,d,a,a], [a,b,c]),
- ?line [d,x,a] = sub([a,b,c,d,a,x,a], [a,b,c,a]),
- ?line [1,2,3,4,5,6,7,8,9,9999,10000,20,21,22] =
+ [] = sub([a], [a]),
+ [a] = sub([a,b], [b]),
+ [a] = sub([a,b], [b,c]),
+ [a] = sub([a,b,c], [b,c]),
+ [a] = sub([a,b,c], [b,c]),
+ [d,a,a] = sub([a,b,c,d,a,a], [a,b,c]),
+ [d,x,a] = sub([a,b,c,d,a,x,a], [a,b,c,a]),
+ [1,2,3,4,5,6,7,8,9,9999,10000,20,21,22] =
sub(lists:seq(1, 10000)++[20,21,22], lists:seq(10, 9998)),
%% Floats/integers.
- ?line [42.0,42.0] = sub([42.0,42,42.0], [42,42,42]),
- ?line [1,2,3,4,43.0] = sub([1,2,3,4,5,42.0,43.0], [42.0,5]),
+ [42.0,42.0] = sub([42.0,42,42.0], [42,42,42]),
+ [1,2,3,4,43.0] = sub([1,2,3,4,5,42.0,43.0], [42.0,5]),
%% Crashing subtracts.
- ?line {'EXIT',_} = (catch sub([], [a|b])),
- ?line {'EXIT',_} = (catch sub([a], [a|b])),
- ?line {'EXIT',_} = (catch sub([a|b], [])),
- ?line {'EXIT',_} = (catch sub([a|b], [])),
- ?line {'EXIT',_} = (catch sub([a|b], [a])),
+ {'EXIT',_} = (catch sub([], [a|b])),
+ {'EXIT',_} = (catch sub([a], [a|b])),
+ {'EXIT',_} = (catch sub([a|b], [])),
+ {'EXIT',_} = (catch sub([a|b], [])),
+ {'EXIT',_} = (catch sub([a|b], [a])),
ok.
sub_non_matching(A, B) ->
A = sub(A, B).
-
+
sub(A, B) ->
Res = A -- B,
Res = lists:subtract(A, B).
%% Test lists:droplast/1
droplast(Config) when is_list(Config) ->
- ?line [] = lists:droplast([x]),
- ?line [x] = lists:droplast([x, y]),
- ?line {'EXIT', {function_clause, _}} = (catch lists:droplast([])),
- ?line {'EXIT', {function_clause, _}} = (catch lists:droplast(x)),
+ [] = lists:droplast([x]),
+ [x] = lists:droplast([x, y]),
+ {'EXIT', {function_clause, _}} = (catch lists:droplast([])),
+ {'EXIT', {function_clause, _}} = (catch lists:droplast(x)),
ok.
diff --git a/lib/stdlib/test/log_mf_h_SUITE.erl b/lib/stdlib/test/log_mf_h_SUITE.erl
index 86af3d4614..894500dd79 100644
--- a/lib/stdlib/test/log_mf_h_SUITE.erl
+++ b/lib/stdlib/test/log_mf_h_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(log_mf_h_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -53,17 +53,17 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
test(Config) when is_list(Config) ->
- ?line {ok, Pid} = gen_event:start_link(),
- ?line PrivDir = ?config(priv_dir, Config),
+ {ok, Pid} = gen_event:start_link(),
+ PrivDir = proplists:get_value(priv_dir, Config),
Log1 = PrivDir ++ "/log1",
- ?line ok = file:make_dir(Log1),
+ ok = file:make_dir(Log1),
Args1 = log_mf_h:init(Log1, 500, 3),
gen_event:add_handler(Pid, log_mf_h, Args1),
generate(Pid, 200),
{ok, Files} = file:list_dir(Log1),
- ?line true = lists:member("1", Files),
- ?line true = lists:member("index", Files),
- ?line false = lists:member("2", Files),
+ true = lists:member("1", Files),
+ true = lists:member("index", Files),
+ false = lists:member("2", Files),
generate(Pid, 2500),
%% The documentation doesn't guarantee that syncing one request
%% causes all previous ones to be finished too, but that seems to
@@ -71,26 +71,26 @@ test(Config) when is_list(Config) ->
%% look for them with 'list_dir'.
gen_event:sync_notify(Pid, "end"),
{ok, Files2} = file:list_dir(Log1),
- ?line true = lists:member("1", Files2),
- ?line true = lists:member("2", Files2),
- ?line true = lists:member("3", Files2),
- ?line false = lists:member("4", Files2),
- ?line true = lists:member("index", Files2),
- ?line {ok, #file_info{size=Size1,type=regular}} = file:read_file_info(Log1 ++ "/1"),
- ?line if Size1 > 500 -> test_server:fail({too_big, Size1});
- true -> ok end,
- ?line {ok, #file_info{size=Size2,type=regular}} = file:read_file_info(Log1 ++ "/2"),
- ?line if Size2 > 500 -> test_server:fail({too_big, Size2});
- true -> ok end,
- ?line {ok, #file_info{size=Size3,type=regular}} = file:read_file_info(Log1 ++ "/3"),
- ?line if Size3 > 500 -> test_server:fail({too_big, Size3});
- true -> ok end,
+ true = lists:member("1", Files2),
+ true = lists:member("2", Files2),
+ true = lists:member("3", Files2),
+ false = lists:member("4", Files2),
+ true = lists:member("index", Files2),
+ {ok, #file_info{size=Size1,type=regular}} = file:read_file_info(Log1 ++ "/1"),
+ if Size1 > 500 -> ct:fail({too_big, Size1});
+ true -> ok end,
+ {ok, #file_info{size=Size2,type=regular}} = file:read_file_info(Log1 ++ "/2"),
+ if Size2 > 500 -> ct:fail({too_big, Size2});
+ true -> ok end,
+ {ok, #file_info{size=Size3,type=regular}} = file:read_file_info(Log1 ++ "/3"),
+ if Size3 > 500 -> ct:fail({too_big, Size3});
+ true -> ok end,
gen_event:delete_handler(Pid, log_mf_h, []),
- ?line {ok, Index} = read_index_file(Log1),
+ {ok, Index} = read_index_file(Log1),
gen_event:add_handler(Pid, log_mf_h, Args1),
X = if Index == 3 -> 1; true -> Index + 1 end,
- ?line {ok, X} = read_index_file(Log1).
-
+ {ok, X} = read_index_file(Log1).
+
generate(Pid, Bytes) when Bytes > 32 ->
gen_event:notify(Pid, make_list(32, [])),
@@ -110,4 +110,3 @@ read_index_file(Dir) ->
end;
_ -> error
end.
-
diff --git a/lib/stdlib/test/maps_SUITE.erl b/lib/stdlib/test/maps_SUITE.erl
index 40a8b6ac81..42e669a799 100644
--- a/lib/stdlib/test/maps_SUITE.erl
+++ b/lib/stdlib/test/maps_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,51 +23,69 @@
-module(maps_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(1)).
+-export([all/0, suite/0]).
-% Test server specific exports
--export([all/0]).
--export([suite/0]).
--export([init_per_suite/1]).
--export([end_per_suite/1]).
--export([init_per_testcase/2]).
--export([end_per_testcase/2]).
-
--export([t_get_3/1, t_filter_2/1,
+-export([t_update_with_3/1, t_update_with_4/1,
+ t_get_3/1, t_filter_2/1,
t_fold_3/1,t_map_2/1,t_size_1/1,
t_with_2/1,t_without_2/1]).
-%-define(badmap(V,F,Args), {'EXIT', {{badmap,V}, [{maps,F,Args,_}|_]}}).
-%-define(badarg(F,Args), {'EXIT', {badarg, [{maps,F,Args,_}|_]}}).
-% silly broken hipe
+%%-define(badmap(V,F,Args), {'EXIT', {{badmap,V}, [{maps,F,Args,_}|_]}}).
+%%-define(badarg(F,Args), {'EXIT', {badarg, [{maps,F,Args,_}|_]}}).
+%% silly broken hipe
-define(badmap(V,F,_Args), {'EXIT', {{badmap,V}, [{maps,F,_,_}|_]}}).
+-define(badkey(K,F,_Args), {'EXIT', {{badkey,K}, [{maps,F,_,_}|_]}}).
-define(badarg(F,_Args), {'EXIT', {badarg, [{maps,F,_,_}|_]}}).
suite() ->
- [{ct_hooks, [ts_install_cth]}].
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
- [t_get_3,t_filter_2,
+ [t_update_with_3,t_update_with_4,
+ t_get_3,t_filter_2,
t_fold_3,t_map_2,t_size_1,
t_with_2,t_without_2].
-init_per_suite(Config) ->
- Config.
+t_update_with_3(Config) when is_list(Config) ->
+ V1 = value1,
+ V2 = <<"value2">>,
+ V3 = "value3",
+ Map = #{ key1 => V1, key2 => V2, "key3" => V3 },
+ Fun = fun(V) -> [V,V,{V,V}] end,
+
+ #{ key1 := [V1,V1,{V1,V1}] } = maps:update_with(key1,Fun,Map),
+ #{ key2 := [V2,V2,{V2,V2}] } = maps:update_with(key2,Fun,Map),
+ #{ "key3" := [V3,V3,{V3,V3}] } = maps:update_with("key3",Fun,Map),
-end_per_suite(_Config) ->
+ %% error case
+ ?badmap(b,update_with,[[a,b],a,b]) = (catch maps:update_with([a,b],id(a),b)),
+ ?badarg(update_with,[[a,b],a,#{}]) = (catch maps:update_with([a,b],id(a),#{})),
+ ?badkey([a,b],update_with,[[a,b],Fun,#{}]) = (catch maps:update_with([a,b],Fun,#{})),
ok.
-init_per_testcase(_Case, Config) ->
- Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+t_update_with_4(Config) when is_list(Config) ->
+ V1 = value1,
+ V2 = <<"value2">>,
+ V3 = "value3",
+ Map = #{ key1 => V1, key2 => V2, "key3" => V3 },
+ Fun = fun(V) -> [V,V,{V,V}] end,
+ Init = 3,
+
+ #{ key1 := [V1,V1,{V1,V1}] } = maps:update_with(key1,Fun,Init,Map),
+ #{ key2 := [V2,V2,{V2,V2}] } = maps:update_with(key2,Fun,Init,Map),
+ #{ "key3" := [V3,V3,{V3,V3}] } = maps:update_with("key3",Fun,Init,Map),
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ #{ key3 := Init } = maps:update_with(key3,Fun,Init,Map),
+
+ %% error case
+ ?badmap(b,update_with,[[a,b],a,b]) = (catch maps:update_with([a,b],id(a),b)),
+ ?badarg(update_with,[[a,b],a,#{}]) = (catch maps:update_with([a,b],id(a),#{})),
ok.
+
t_get_3(Config) when is_list(Config) ->
Map = #{ key1 => value1, key2 => value2 },
DefaultValue = "Default value",
diff --git a/lib/stdlib/test/ms_transform_SUITE.erl b/lib/stdlib/test/ms_transform_SUITE.erl
index f02e82b39c..1c5faa960b 100644
--- a/lib/stdlib/test/ms_transform_SUITE.erl
+++ b/lib/stdlib/test/ms_transform_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,9 +20,10 @@
-module(ms_transform_SUITE).
-author('[email protected]').
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
init_per_group/2,end_per_group/2]).
-export([basic_ets/1]).
-export([basic_dbg/1]).
@@ -42,17 +43,16 @@
-export([warnings/1]).
-export([no_warnings/1]).
-export([eep37/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
init_per_testcase(_Func, Config) ->
- Dog=test_server:timetrap(test_server:seconds(360)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+end_per_testcase(_Func, _Config) ->
+ ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,6}}].
all() ->
[from_shell, basic_ets, basic_dbg, records,
@@ -79,94 +79,89 @@ end_per_group(_GroupName, Config) ->
%% This may be subject to change
-define(WARN_NUMBER_SHADOW,50).
-warnings(suite) ->
- [];
-warnings(doc) ->
- ["Check that shadowed variables in fun head generate warning"];
+
+%% Check that shadowed variables in fun head generate warning.
warnings(Config) when is_list(Config) ->
- ?line setup(Config),
+ setup(Config),
Prog = <<"A=5, "
- "ets:fun2ms(fun({A,B}) "
- " when is_integer(A) and (A+5 > B) -> "
- " A andalso B "
- " end)">>,
- ?line [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'A'}}]}] =
+ "ets:fun2ms(fun({A,B}) "
+ " when is_integer(A) and (A+5 > B) -> "
+ " A andalso B "
+ " end)">>,
+ [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'A'}}]}] =
compile_ww(Prog),
Prog2 = <<"C = 5,
ets:fun2ms(fun ({A,B} =
- C) when is_integer(A) and (A+5 > B) ->
+ C) when is_integer(A) and (A+5 > B) ->
{A andalso B,C}
end)">>,
[{_,[{3,ms_transform,{?WARN_NUMBER_SHADOW,'C'}}]}] =
- compile_ww(Prog2),
- Rec3 = <<"-record(a,{a,b,c,d=foppa}).">>,
- Prog3 = <<"A = 3,
+ compile_ww(Prog2),
+ Rec3 = <<"-record(a,{a,b,c,d=foppa}).">>,
+ Prog3 = <<"A = 3,
C = 5,
- ets:fun2ms(fun (C
- = #a{a = A, b = B})
- when is_integer(A) and (A+5 > B) ->
- {A andalso B,C}
- end)">>,
+ ets:fun2ms(fun (C
+ = #a{a = A, b = B})
+ when is_integer(A) and (A+5 > B) ->
+ {A andalso B,C}
+ end)">>,
[{_,[{3,ms_transform,{?WARN_NUMBER_SHADOW,'C'}},
{4,ms_transform,{?WARN_NUMBER_SHADOW,'A'}}]}] =
- compile_ww(Rec3,Prog3),
- Rec4 = <<"-record(a,{a,b,c,d=foppa}).">>,
- Prog4 = <<"A=3,C=5, "
- "F = fun(B) -> B*3 end,"
- "erlang:display(F(A)),"
- "ets:fun2ms(fun(#a{a = A, b = B} = C) "
- " when is_integer(A) and (A+5 > B) -> "
- " {A andalso B,C} "
- " end)">>,
- ?line [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'A'}},
- {_,ms_transform,{?WARN_NUMBER_SHADOW,'C'}}]}] =
- compile_ww(Rec4,Prog4),
- Rec5 = <<"-record(a,{a,b,c,d=foppa}).">>,
- Prog5 = <<"A=3,C=5, "
- "F = fun(B) -> B*3 end,"
- "erlang:display(F(A)),"
- "B = ets:fun2ms(fun(#a{a = A, b = B} = C) "
- " when is_integer(A) and (A+5 > B) -> "
- " {A andalso B,C} "
- " end)">>,
- ?line [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'A'}},
- {_,ms_transform,{?WARN_NUMBER_SHADOW,'C'}}]}] =
- compile_ww(Rec5,Prog5),
- Prog6 = <<" X=bar, "
- " A = case X of"
- " foo ->"
- " foo;"
- " Y ->"
- " ets:fun2ms(fun(Y) ->" % This is a warning
- " 3*Y"
- " end)"
- " end,"
- " ets:fun2ms(fun(Y) ->" % Y out of "scope" here, so no warning
- " {3*Y,A}"
- " end)">>,
- ?line [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'Y'}}]}] =
- compile_ww(Prog6),
- Prog7 = <<" X=bar, "
- " A = case X of"
- " foo ->"
- " Y = foo;"
- " Y ->"
- " bar"
- " end,"
- " ets:fun2ms(fun(Y) ->" % Y exported from case and safe, so warn
- " {3*Y,A}"
- " end)">>,
- ?line [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'Y'}}]}] =
- compile_ww(Prog7),
- ok.
-
-no_warnings(suite) ->
- [];
-no_warnings(doc) ->
- ["Check that variables bound in other function clauses don't generate "
- "warning"];
+ compile_ww(Rec3,Prog3),
+ Rec4 = <<"-record(a,{a,b,c,d=foppa}).">>,
+ Prog4 = <<"A=3,C=5, "
+ "F = fun(B) -> B*3 end,"
+ "erlang:display(F(A)),"
+ "ets:fun2ms(fun(#a{a = A, b = B} = C) "
+ " when is_integer(A) and (A+5 > B) -> "
+ " {A andalso B,C} "
+ " end)">>,
+ [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'A'}},
+ {_,ms_transform,{?WARN_NUMBER_SHADOW,'C'}}]}] =
+ compile_ww(Rec4,Prog4),
+ Rec5 = <<"-record(a,{a,b,c,d=foppa}).">>,
+ Prog5 = <<"A=3,C=5, "
+ "F = fun(B) -> B*3 end,"
+ "erlang:display(F(A)),"
+ "B = ets:fun2ms(fun(#a{a = A, b = B} = C) "
+ " when is_integer(A) and (A+5 > B) -> "
+ " {A andalso B,C} "
+ " end)">>,
+ [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'A'}},
+ {_,ms_transform,{?WARN_NUMBER_SHADOW,'C'}}]}] =
+ compile_ww(Rec5,Prog5),
+ Prog6 = <<" X=bar, "
+ " A = case X of"
+ " foo ->"
+ " foo;"
+ " Y ->"
+ " ets:fun2ms(fun(Y) ->" % This is a warning
+ " 3*Y"
+ " end)"
+ " end,"
+ " ets:fun2ms(fun(Y) ->" % Y out of "scope" here, so no warning
+ " {3*Y,A}"
+ " end)">>,
+ [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'Y'}}]}] =
+ compile_ww(Prog6),
+ Prog7 = <<" X=bar, "
+ " A = case X of"
+ " foo ->"
+ " Y = foo;"
+ " Y ->"
+ " bar"
+ " end,"
+ " ets:fun2ms(fun(Y) ->" % Y exported from case and safe, so warn
+ " {3*Y,A}"
+ " end)">>,
+ [{_,[{_,ms_transform,{?WARN_NUMBER_SHADOW,'Y'}}]}] =
+ compile_ww(Prog7),
+ ok.
+
+%% Check that variables bound in other function clauses don't generate
+%% warning.
no_warnings(Config) when is_list(Config) ->
- ?line setup(Config),
+ setup(Config),
Prog = <<"tmp(X) when X > 100 ->\n",
" Y=X,\n"
" Y;\n"
@@ -174,188 +169,167 @@ no_warnings(Config) when is_list(Config) ->
" ets:fun2ms(fun(Y) ->\n"
" {X, 3*Y}\n"
" end)">>,
- ?line [] = compile_no_ww(Prog),
+ [] = compile_no_ww(Prog),
Prog2 = <<"tmp(X) when X > 100 ->\n",
- " Y=X,\n"
- " Y;\n"
- "tmp(X) when X < 200 ->\n"
- " ok;\n"
- "tmp(X) ->\n"
- " ets:fun2ms(fun(Y) ->\n"
- " {X, 3*Y}\n"
- " end)">>,
- ?line [] = compile_no_ww(Prog2),
+ " Y=X,\n"
+ " Y;\n"
+ "tmp(X) when X < 200 ->\n"
+ " ok;\n"
+ "tmp(X) ->\n"
+ " ets:fun2ms(fun(Y) ->\n"
+ " {X, 3*Y}\n"
+ " end)">>,
+ [] = compile_no_ww(Prog2),
ok.
-andalso_orelse(suite) ->
- [];
-andalso_orelse(doc) ->
- ["Tests that andalso and orelse are allowed in guards."];
+%% Test that andalso and orelse are allowed in guards.
andalso_orelse(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line [{{'$1','$2'},
- [{'and',{is_integer,'$1'},{'>',{'+','$1',5},'$2'}}],
- [{'andalso','$1','$2'}]}] =
+ setup(Config),
+ [{{'$1','$2'},
+ [{'and',{is_integer,'$1'},{'>',{'+','$1',5},'$2'}}],
+ [{'andalso','$1','$2'}]}] =
compile_and_run(<<"ets:fun2ms(fun({A,B}) "
- " when is_integer(A) and (A+5 > B) -> "
- " A andalso B "
- " end)">>),
- ?line [{{'$1','$2'},
- [{'or',{is_atom,'$1'},{'>',{'+','$1',5},'$2'}}],
- [{'orelse','$1','$2'}]}] =
+ " when is_integer(A) and (A+5 > B) -> "
+ " A andalso B "
+ " end)">>),
+ [{{'$1','$2'},
+ [{'or',{is_atom,'$1'},{'>',{'+','$1',5},'$2'}}],
+ [{'orelse','$1','$2'}]}] =
compile_and_run(<<"ets:fun2ms(fun({A,B}) "
- " when is_atom(A) or (A+5 > B) -> "
- " A orelse B "
- " end)">>),
- ?line [{{'$1','$2'},
- [{'andalso',{is_integer,'$1'},{'>',{'+','$1',5},'$2'}}],
- ['$1']}] =
+ " when is_atom(A) or (A+5 > B) -> "
+ " A orelse B "
+ " end)">>),
+ [{{'$1','$2'},
+ [{'andalso',{is_integer,'$1'},{'>',{'+','$1',5},'$2'}}],
+ ['$1']}] =
compile_and_run(
- <<"ets:fun2ms(fun({A,B}) when is_integer(A) andalso (A+5 > B) ->"
- " A "
- " end)">>),
- ?line [{{'$1','$2'},
- [{'orelse',{is_atom,'$1'},{'>',{'+','$1',5},'$2'}}],
- ['$1']}] =
+ <<"ets:fun2ms(fun({A,B}) when is_integer(A) andalso (A+5 > B) ->"
+ " A "
+ " end)">>),
+ [{{'$1','$2'},
+ [{'orelse',{is_atom,'$1'},{'>',{'+','$1',5},'$2'}}],
+ ['$1']}] =
compile_and_run(
- <<"ets:fun2ms(fun({A,B}) when is_atom(A) orelse (A+5 > B) -> "
- " A "
- " end)">>),
+ <<"ets:fun2ms(fun({A,B}) when is_atom(A) orelse (A+5 > B) -> "
+ " A "
+ " end)">>),
ok.
-
-
-bitsyntax(suite) ->
- [];
-bitsyntax(doc) ->
- ["Tests that bitsyntax works and does not work where appropriate"];
+
+
+%% Test that bitsyntax works and does not work where appropriate.
bitsyntax(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line [{'_',[],
- [<<0,27,0,27>>]}] =
+ setup(Config),
+ [{'_',[],
+ [<<0,27,0,27>>]}] =
compile_and_run(<<"A = 27, "
"ets:fun2ms(fun(_) -> <<A:16,27:16>> end)">>),
- ?line [{{<<15,47>>,
- '$1',
- '$2'},
- [{'=:=','$1',
- <<0,27>>},
- {'=:=','$2',
- <<27,28,19>>}],
- [<<188,0,13>>]}] =
+ [{{<<15,47>>,
+ '$1',
+ '$2'},
+ [{'=:=','$1',
+ <<0,27>>},
+ {'=:=','$2',
+ <<27,28,19>>}],
+ [<<188,0,13>>]}] =
compile_and_run(<<"A = 27, "
"ets:fun2ms("
" fun({<<15,47>>,B,C}) "
" when B =:= <<A:16>>, C =:= <<27,28,19>> -> "
" <<A:4,12:4,13:16>> "
" end)">>),
- ?line expect_failure(
- <<>>,
- <<"ets:fun2ms(fun({<<15,47>>,B,C}) "
- " when B =:= <<16>>, C =:= <<27,28,19>> -> "
- " <<B:4,12:4,13:16>> "
- " end)">>),
- ?line expect_failure(
- <<>>,
- <<"ets:fun2ms(fun({<<A:15,47>>,B,C}) "
- " when B =:= <<16>>, C =:= <<27,28,19>> -> "
- " <<B:4,12:4,13:16>> "
- " end)">>),
+ expect_failure(
+ <<>>,
+ <<"ets:fun2ms(fun({<<15,47>>,B,C}) "
+ " when B =:= <<16>>, C =:= <<27,28,19>> -> "
+ " <<B:4,12:4,13:16>> "
+ " end)">>),
+ expect_failure(
+ <<>>,
+ <<"ets:fun2ms(fun({<<A:15,47>>,B,C}) "
+ " when B =:= <<16>>, C =:= <<27,28,19>> -> "
+ " <<B:4,12:4,13:16>> "
+ " end)">>),
ok.
-record_defaults(suite) ->
- [];
-record_defaults(doc) ->
- ["Tests that record defaults works"];
+%% Test that record defaults works.
record_defaults(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line [{{<<27>>,{a,5,'$1',hej,hej}},
- [],
- [{{a,hej,{'*','$1',2},flurp,flurp}}]}] =
+ setup(Config),
+ [{{<<27>>,{a,5,'$1',hej,hej}},
+ [],
+ [{{a,hej,{'*','$1',2},flurp,flurp}}]}] =
compile_and_run(<<"-record(a,{a,b,c,d=foppa}).">>,
<<"ets:fun2ms(fun({<<27>>,#a{a=5, b=B,_=hej}}) -> "
- "#a{a=hej,b=B*2,_=flurp} "
- "end)">>),
+ "#a{a=hej,b=B*2,_=flurp} "
+ "end)">>),
ok.
-basic_ets(suite) ->
- [];
-basic_ets(doc) ->
- ["Tests basic ets:fun2ms"];
+%% Test basic ets:fun2ms.
basic_ets(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line [{{a,b},[],[true]}] = compile_and_run(
- <<"ets:fun2ms(fun({a,b}) -> true end)">>),
- ?line [{{'$1',foo},[{is_list,'$1'}],[{{{hd,'$1'},'$_'}}]},
+ setup(Config),
+ [{{a,b},[],[true]}] = compile_and_run(
+ <<"ets:fun2ms(fun({a,b}) -> true end)">>),
+ [{{'$1',foo},[{is_list,'$1'}],[{{{hd,'$1'},'$_'}}]},
{{'$1','$1'},[{is_tuple,'$1'}],[{{{element,1,'$1'},'$*'}}]}] =
compile_and_run(<<"ets:fun2ms(fun({X,foo}) when is_list(X) -> ",
- "{hd(X),object()};",
- "({X,X}) when is_tuple(X) ->",
- "{element(1,X),bindings()}",
- "end)">>),
- ?line [{{'$1','$2'},[],[{{'$2','$1'}}]}] =
+ "{hd(X),object()};",
+ "({X,X}) when is_tuple(X) ->",
+ "{element(1,X),bindings()}",
+ "end)">>),
+ [{{'$1','$2'},[],[{{'$2','$1'}}]}] =
compile_and_run(<<"ets:fun2ms(fun({A,B}) -> {B,A} end)">>),
- ?line [{{'$1','$2'},[],[['$2','$1']]}] =
+ [{{'$1','$2'},[],[['$2','$1']]}] =
compile_and_run(<<"ets:fun2ms(fun({A,B}) -> [B,A] end)">>),
ok.
-basic_dbg(suite) ->
- [];
-basic_dbg(doc) ->
- ["Tests basic ets:fun2ms"];
+%% Tests basic ets:fun2ms.
basic_dbg(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line [{[a,b],[],[{message,banan},{return_trace}]}] =
+ setup(Config),
+ [{[a,b],[],[{message,banan},{return_trace}]}] =
compile_and_run(<<"dbg:fun2ms(fun([a,b]) -> message(banan), ",
- "return_trace() end)">>),
- ?line [{['$1','$2'],[],[{{'$2','$1'}}]}] =
+ "return_trace() end)">>),
+ [{['$1','$2'],[],[{{'$2','$1'}}]}] =
compile_and_run(<<"dbg:fun2ms(fun([A,B]) -> {B,A} end)">>),
- ?line [{['$1','$2'],[],[['$2','$1']]}] =
+ [{['$1','$2'],[],[['$2','$1']]}] =
compile_and_run(<<"dbg:fun2ms(fun([A,B]) -> [B,A] end)">>),
- ?line [{['$1','$2'],[],['$*']}] =
+ [{['$1','$2'],[],['$*']}] =
compile_and_run(<<"dbg:fun2ms(fun([A,B]) -> bindings() end)">>),
- ?line [{['$1','$2'],[],['$_']}] =
+ [{['$1','$2'],[],['$_']}] =
compile_and_run(<<"dbg:fun2ms(fun([A,B]) -> object() end)">>),
ok.
-from_shell(suite) ->
- [];
-from_shell(doc) ->
- ["Test calling of ets/dbg:fun2ms from the shell"];
+%% Test calling of ets/dbg:fun2ms from the shell.
from_shell(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line Fun = do_eval("fun({a,b}) -> true end"),
- ?line [{{a,b},[],[true]}] = apply(ets,fun2ms,[Fun]),
- ?line [{{a,b},[],[true]}] = do_eval("ets:fun2ms(fun({a,b}) -> true end)"),
- ?line Fun2 = do_eval("fun([a,b]) -> message(banan), return_trace() end"),
- ?line [{[a,b],[],[{message,banan},{return_trace}]}]
+ setup(Config),
+ Fun = do_eval("fun({a,b}) -> true end"),
+ [{{a,b},[],[true]}] = apply(ets,fun2ms,[Fun]),
+ [{{a,b},[],[true]}] = do_eval("ets:fun2ms(fun({a,b}) -> true end)"),
+ Fun2 = do_eval("fun([a,b]) -> message(banan), return_trace() end"),
+ [{[a,b],[],[{message,banan},{return_trace}]}]
= apply(dbg,fun2ms,[Fun2]),
- ?line [{[a,b],[],[{message,banan},{return_trace}]}] =
+ [{[a,b],[],[{message,banan},{return_trace}]}] =
do_eval(
"dbg:fun2ms(fun([a,b]) -> message(banan), return_trace() end)"),
ok.
-records(suite) ->
- [];
-records(doc) ->
- ["Tests expansion of records in fun2ms"];
+%% Tests expansion of records in fun2ms.
records(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line RD = <<"-record(t, {"
- "t1 = [],"
- "t2 = foo,"
- "t3,"
- "t4"
- "}).">>,
- ?line [{{t,'$1','$2',foo,'_'},[{is_list,'$1'}],[{{{hd,'$1'},'$_'}}]},
+ setup(Config),
+ RD = <<"-record(t, {"
+ "t1 = [] :: list(),"
+ "t2 = foo :: atom(),"
+ "t3,"
+ "t4"
+ "}).">>,
+ [{{t,'$1','$2',foo,'_'},[{is_list,'$1'}],[{{{hd,'$1'},'$_'}}]},
{{t,'_','_','_','_'},[{'==',{element,2,'$_'},nisse}],[{{'$*'}}]}] =
compile_and_run(RD,<<
- "ets:fun2ms(fun(#t{t1 = X, t2 = Y, t3 = foo}) when is_list(X) ->
+ "ets:fun2ms(fun(#t{t1 = X, t2 = Y, t3 = foo}) when is_list(X) ->
{hd(X),object()};
- (#t{}) when (object())#t.t1 == nisse ->
- {bindings()}
- end)">>),
- ?line [{{t,'$1','$2','_',foo},
+ (#t{}) when (object())#t.t1 == nisse ->
+ {bindings()}
+ end)">>),
+ [{{t,'$1','$2','_',foo},
[{'==',{element,4,'$_'},7},{is_list,'$1'}],
[{{{hd,'$1'},'$_'}}]},
{'$1',[{is_record,'$1',t,5}],
@@ -373,7 +347,7 @@ records(Config) when is_list(Config) ->
}
end)"
>>),
- ?line [{[{t,'$1','$2',foo,'_'}],[{is_list,'$1'}],[{{{hd,'$1'},'$_'}}]},
+ [{[{t,'$1','$2',foo,'_'}],[{is_list,'$1'}],[{{{hd,'$1'},'$_'}}]},
{[{t,'_','_','_','_'}],[{'==',{element,2,{hd,'$_'}},nisse}],[{{'$*'}}]}]=
compile_and_run(RD,<<
"dbg:fun2ms(fun([#t{t1 = X, t2 = Y, t3 = foo}]) when is_list(X) ->
@@ -385,78 +359,66 @@ records(Config) when is_list(Config) ->
ok.
-record_index(suite) ->
- [];
-record_index(doc) ->
- ["Tests expansion of records in fun2ms, part 2"];
+%% Test expansion of records in fun2ms, part 2.
record_index(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line RD = <<"-record(a,{a,b}).">>,
- ?line [{{2},[],[true]}] = compile_and_run(RD,
+ setup(Config),
+ RD = <<"-record(a,{a,b}).">>,
+ [{{2},[],[true]}] = compile_and_run(RD,
<<"ets:fun2ms(fun({#a.a}) -> true end)">>),
- ?line [{{2},[],[2]}] = compile_and_run(RD,
+ [{{2},[],[2]}] = compile_and_run(RD,
<<"ets:fun2ms(fun({#a.a}) -> #a.a end)">>),
- ?line [{{2,'$1'},[{'>','$1',2}],[2]}] = compile_and_run(RD,
+ [{{2,'$1'},[{'>','$1',2}],[2]}] = compile_and_run(RD,
<<"ets:fun2ms(fun({#a.a,A}) when A > #a.a -> #a.a end)">>),
ok.
-top_match(suite) ->
- [];
-top_match(doc) ->
- ["Tests matching on top level in head to give alias for object()"];
+%% Tests matching on top level in head to give alias for object().
top_match(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line RD = <<"-record(a,{a,b}).">>,
- ?line [{{a,3,'_'},[],['$_']}] =
+ setup(Config),
+ RD = <<"-record(a,{a,b}).">>,
+ [{{a,3,'_'},[],['$_']}] =
compile_and_run(RD,
<<"ets:fun2ms(fun(A = #a{a=3}) -> A end)">>),
- ?line [{{a,3,'_'},[],['$_']}] =
+ [{{a,3,'_'},[],['$_']}] =
compile_and_run(RD,
<<"ets:fun2ms(fun(#a{a=3} = A) -> A end)">>),
- ?line [{[a,b],[],['$_']}] =
+ [{[a,b],[],['$_']}] =
compile_and_run(RD,
<<"dbg:fun2ms(fun(A = [a,b]) -> A end)">>),
- ?line [{[a,b],[],['$_']}] =
+ [{[a,b],[],['$_']}] =
compile_and_run(RD,
<<"dbg:fun2ms(fun([a,b] = A) -> A end)">>),
- ?line expect_failure(RD,
+ expect_failure(RD,
<<"ets:fun2ms(fun({a,A = {_,b}}) -> A end)">>),
- ?line expect_failure(RD,
+ expect_failure(RD,
<<"dbg:fun2ms(fun([a,A = {_,b}]) -> A end)">>),
- ?line expect_failure(RD,
+ expect_failure(RD,
<<"ets:fun2ms(fun(A#a{a = 2}) -> A end)">>),
ok.
-multipass(suite) ->
- [];
-multipass(doc) ->
- ["Tests that multi-defined fields in records give errors."];
+%% Tests that multi-defined fields in records give errors.
multipass(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line RD = <<"-record(a,{a,b}).">>,
- ?line expect_failure(RD,<<"ets:fun2ms(fun(A) -> #a{a=2,a=3} end)">>),
- ?line expect_failure(RD,<<"ets:fun2ms(fun(A) -> A#a{a=2,a=3} end)">>),
- ?line expect_failure(RD,<<"ets:fun2ms(fun(A) when A =:= #a{a=2,a=3} ->",
+ setup(Config),
+ RD = <<"-record(a,{a,b}).">>,
+ expect_failure(RD,<<"ets:fun2ms(fun(A) -> #a{a=2,a=3} end)">>),
+ expect_failure(RD,<<"ets:fun2ms(fun(A) -> A#a{a=2,a=3} end)">>),
+ expect_failure(RD,<<"ets:fun2ms(fun(A) when A =:= #a{a=2,a=3} ->",
" true end)">>),
- ?line expect_failure(RD,<<"ets:fun2ms(fun({A,B})when A =:= B#a{a=2,a=3}->",
+ expect_failure(RD,<<"ets:fun2ms(fun({A,B})when A =:= B#a{a=2,a=3}->",
"true end)">>),
- ?line expect_failure(RD,<<"ets:fun2ms(fun(#a{a=3,a=3}) -> true end)">>),
- ?line compile_and_run(RD,<<"ets:fun2ms(fun(A) -> #a{a=2,b=3} end)">>),
- ?line compile_and_run(RD,<<"ets:fun2ms(fun(A) -> A#a{a=2,b=3} end)">>),
- ?line compile_and_run(RD,<<"ets:fun2ms(fun(A) when A =:= #a{a=2,b=3} ->",
+ expect_failure(RD,<<"ets:fun2ms(fun(#a{a=3,a=3}) -> true end)">>),
+ compile_and_run(RD,<<"ets:fun2ms(fun(A) -> #a{a=2,b=3} end)">>),
+ compile_and_run(RD,<<"ets:fun2ms(fun(A) -> A#a{a=2,b=3} end)">>),
+ compile_and_run(RD,<<"ets:fun2ms(fun(A) when A =:= #a{a=2,b=3} ->",
" true end)">>),
- ?line compile_and_run(RD,<<"ets:fun2ms(fun({A,B})when A=:= B#a{a=2,b=3}->",
+ compile_and_run(RD,<<"ets:fun2ms(fun({A,B})when A=:= B#a{a=2,b=3}->",
"true end)">>),
- ?line compile_and_run(RD,<<"ets:fun2ms(fun(#a{a=3,b=3}) -> true end)">>),
+ compile_and_run(RD,<<"ets:fun2ms(fun(#a{a=3,b=3}) -> true end)">>),
ok.
-old_guards(suite) ->
- [];
-old_guards(doc) ->
- ["Tests that old type tests in guards are translated"];
+%% Test that old type tests in guards are translated.
old_guards(Config) when is_list(Config) ->
- ?line setup(Config),
+ setup(Config),
Tests = [
{atom,is_atom},
{float,is_float},
@@ -469,7 +431,7 @@ old_guards(Config) when is_list(Config) ->
{tuple,is_tuple},
{binary,is_binary},
{function,is_function}],
- ?line lists:foreach(
+ lists:foreach(
fun({Old,New}) ->
Bin = list_to_binary([<<"ets:fun2ms(fun(X) when ">>,
atom_to_list(Old),
@@ -482,15 +444,15 @@ old_guards(Config) when is_list(Config) ->
end
end,
Tests),
- ?line RD = <<"-record(a,{a,b}).">>,
- ?line [{'$1',[{is_record,'$1',a,3}],[true]}] =
+ RD = <<"-record(a,{a,b}).">>,
+ [{'$1',[{is_record,'$1',a,3}],[true]}] =
compile_and_run(RD,
<<"ets:fun2ms(fun(X) when record(X,a) -> true end)">>),
- ?line expect_failure
+ expect_failure
(RD,
<<"ets:fun2ms(fun(X) when integer(X) and constant(X) -> "
"true end)">>),
- ?line [{'$1',[{is_integer,'$1'},
+ [{'$1',[{is_integer,'$1'},
{is_float,'$1'},
{is_atom,'$1'},
{is_list,'$1'},
@@ -511,13 +473,10 @@ old_guards(Config) when is_list(Config) ->
>>),
ok.
-autoimported(suite) ->
- [];
-autoimported(doc) ->
- ["Tests use of autoimported bif's used like erlang:'+'(A,B) in guards"
- " and body."];
+%% Test use of autoimported BIFs used like erlang:'+'(A,B) in guards
+%% and body.
autoimported(Config) when is_list(Config) ->
- ?line setup(Config),
+ setup(Config),
Allowed = [
{abs,1},
{element,2},
@@ -530,7 +489,7 @@ autoimported(Config) when is_list(Config) ->
{tl,1},
{trunc,1},
{self,0},
- %{float,1}, see float_1_function/1
+ %%{float,1}, see float_1_function/1
{is_atom,1},
{is_float,1},
{is_integer,1},
@@ -547,8 +506,8 @@ autoimported(Config) when is_list(Config) ->
{'or',2,infix},
{'xor',2,infix},
{'not',1},
- %{'andalso',2,infix},
- %{'orelse',2,infix},
+ %%{'andalso',2,infix},
+ %%{'orelse',2,infix},
{'+',1},
{'+',2,infix},
{'-',1},
@@ -571,8 +530,8 @@ autoimported(Config) when is_list(Config) ->
{'=:=',2,infix},
{'/=',2,infix},
{'=/=',2,infix}],
- ?line RD = <<"-record(a,{a,b}).">>,
- ?line lists:foreach(
+ RD = <<"-record(a,{a,b}).">>,
+ lists:foreach(
fun({A,0}) ->
L = atom_to_list(A),
Bin1 = list_to_binary(
@@ -687,85 +646,76 @@ autoimported(Config) when is_list(Config) ->
Allowed),
ok.
-semicolon(suite) ->
- [];
-semicolon(doc) ->
- ["Tests semicolon in guards of match_specs."];
+%% Test semicolon in guards of match_specs.
semicolon(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line Res01 = compile_and_run
+ setup(Config),
+ Res01 = compile_and_run
(<<"ets:fun2ms(fun(X) when is_integer(X); "
"is_float(X) -> true end)">>),
- ?line Res02 = compile_and_run
+ Res02 = compile_and_run
(<<"ets:fun2ms(fun(X) when is_integer(X) -> true; "
"(X) when is_float(X) -> true end)">>),
- ?line Res01 = Res02,
- ?line Res11 = compile_and_run
+ Res01 = Res02,
+ Res11 = compile_and_run
(<<"ets:fun2ms(fun(X) when is_integer(X); "
"is_float(X); atom(X) -> true end)">>),
- ?line Res12 = compile_and_run
+ Res12 = compile_and_run
(<<"ets:fun2ms(fun(X) when is_integer(X) -> true; "
"(X) when is_float(X) -> true; "
"(X) when is_atom(X) -> true end)">>),
- ?line Res11 = Res12,
+ Res11 = Res12,
ok.
-float_1_function(suite) ->
- [];
-float_1_function(doc) ->
- ["OTP-5297. The function float/1."];
+%% OTP-5297. The function float/1.
float_1_function(Config) when is_list(Config) ->
- ?line setup(Config),
+ setup(Config),
RunMS = fun(L, MS) ->
ets:match_spec_run(L, ets:match_spec_compile(MS))
end,
- ?line MS1 = compile_and_run
+ MS1 = compile_and_run
(<<"ets:fun2ms(fun(X) -> float(X) end)">>),
- ?line [F1] = RunMS([3], MS1),
- ?line true = is_float(F1) and (F1 == 3),
+ [F1] = RunMS([3], MS1),
+ true = is_float(F1) and (F1 == 3),
- ?line MS1b = compile_and_run
+ MS1b = compile_and_run
(<<"dbg:fun2ms(fun(X) -> float(X) end)">>),
- ?line [F2] = RunMS([3], MS1b),
- ?line true = is_float(F2) and (F2 == 3),
+ [F2] = RunMS([3], MS1b),
+ true = is_float(F2) and (F2 == 3),
- ?line MS2 = compile_and_run
+ MS2 = compile_and_run
(<<"ets:fun2ms(fun(X) when is_pid(X) or float(X) -> true end)">>),
- ?line [] = RunMS([3.0], MS2),
+ [] = RunMS([3.0], MS2),
- ?line MS3 = compile_and_run
+ MS3 = compile_and_run
(<<"dbg:fun2ms(fun(X) when is_pid(X); float(X) -> true end)">>),
- ?line [true] = RunMS([3.0], MS3),
+ [true] = RunMS([3.0], MS3),
- ?line MS4 = compile_and_run
+ MS4 = compile_and_run
(<<"ets:fun2ms(fun(X) when erlang:float(X) > 1 -> big;"
" (_) -> small end)">>),
- ?line [small,big] = RunMS([1.0, 3.0], MS4),
+ [small,big] = RunMS([1.0, 3.0], MS4),
- ?line MS5 = compile_and_run
+ MS5 = compile_and_run
(<<"ets:fun2ms(fun(X) when float(X) > 1 -> big;"
" (_) -> small end)">>),
- ?line [small,big] = RunMS([1.0, 3.0], MS5),
+ [small,big] = RunMS([1.0, 3.0], MS5),
%% This is the test from autoimported/1.
- ?line [{'$1',[{is_float,'$1'}],[{float,'$1'}]}] =
+ [{'$1',[{is_float,'$1'}],[{float,'$1'}]}] =
compile_and_run
(<<"ets:fun2ms(fun(X) when float(X) -> float(X) end)">>),
- ?line [{'$1',[{float,'$1'}],[{float,'$1'}]}] =
+ [{'$1',[{float,'$1'}],[{float,'$1'}]}] =
compile_and_run
(<<"ets:fun2ms(fun(X) when erlang:'float'(X) -> "
"erlang:'float'(X) end)">>),
ok.
-action_function(suite) ->
- [];
-action_function(doc) ->
- ["Test all 'action functions'."];
+%% Test all 'action functions'.
action_function(Config) when is_list(Config) ->
- ?line setup(Config),
- ?line [{['$1','$2'],[],
+ setup(Config),
+ [{['$1','$2'],[],
[{set_seq_token,label,0},
{get_seq_token},
{message,'$1'},
@@ -778,7 +728,7 @@ action_function(Config) when is_list(Config) ->
"message(X), "
"return_trace(), "
"exception_trace() end)">>),
- ?line [{['$1','$2'],[],
+ [{['$1','$2'],[],
[{process_dump},
{enable_trace,send},
{enable_trace,'$2',send},
@@ -791,7 +741,7 @@ action_function(Config) when is_list(Config) ->
"enable_trace(Y, send), "
"disable_trace(procs), "
"disable_trace(Y, procs) end)">>),
- ?line [{['$1','$2'],
+ [{['$1','$2'],
[],
[{display,'$1'},
{caller},
@@ -821,7 +771,7 @@ eep37(Config) when is_list(Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Helpers
+%% Helpers
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
setup(Config) ->
@@ -832,14 +782,13 @@ temp_name() ->
Conf = get(mts_config),
C = get(mts_tf_counter),
put(mts_tf_counter,C+1),
- filename:join([?config(priv_dir,Conf),
+ filename:join([proplists:get_value(priv_dir,Conf),
"tempfile"++integer_to_list(C)++".tmp"]).
expect_failure(Recs,Code) ->
case (catch compile_and_run(Recs,Code)) of
{'EXIT',_Foo} ->
- %erlang:display(_Foo),
ok;
Other ->
exit({expected,failure,got,Other})
diff --git a/lib/stdlib/test/naughty_child.erl b/lib/stdlib/test/naughty_child.erl
index 0ea8f81d38..e159af5c01 100644
--- a/lib/stdlib/test/naughty_child.erl
+++ b/lib/stdlib/test/naughty_child.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/proc_lib_SUITE.erl b/lib/stdlib/test/proc_lib_SUITE.erl
index f7a6a38138..416650e27e 100644
--- a/lib/stdlib/test/proc_lib_SUITE.erl
+++ b/lib/stdlib/test/proc_lib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@
-ifdef(STANDALONE).
-define(line, noop, ).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-endif.
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -115,7 +115,7 @@ crash(Config) when is_list(Config) ->
%% Spawn function with neighbour.
Pid4 = proc_lib:spawn(?MODULE, sp2, []),
- test_server:sleep(100),
+ ct:sleep(100),
{?MODULE,sp2,[]} = proc_lib:initial_call(Pid4),
{?MODULE,sp2,0} = proc_lib:translate_initial_call(Pid4),
Pid4 ! die,
@@ -152,9 +152,9 @@ analyse_crash(Pid, Expected0, ExpLinks) ->
analyse_links(ExpLinks, Links);
Unexpected ->
io:format("~p\n", [Unexpected]),
- test_server:fail(unexpected_message)
+ ct:fail(unexpected_message)
after 5000 ->
- test_server:fail(no_crash_report)
+ ct:fail(no_crash_report)
end.
analyse_links([H|Es], [{neighbour,N}|Links]) ->
@@ -170,7 +170,7 @@ analyse_crash_1([{Key,Pattern}|T], Report) ->
case lists:keyfind(Key, 1, Report) of
false ->
io:format("~p", [Report]),
- test_server:fail({missing_key,Key});
+ ct:fail({missing_key,Key});
{Key,Info} ->
try
match_info(Pattern, Info)
@@ -179,7 +179,7 @@ analyse_crash_1([{Key,Pattern}|T], Report) ->
io:format("key: ~p", [Key]),
io:format("pattern: ~p", [Pattern]),
io:format("actual: ~p", [Report]),
- test_server:fail(no_match)
+ ct:fail(no_match)
end,
analyse_crash_1(T, Report)
end;
@@ -203,7 +203,7 @@ sync_start_nolink(Config) when is_list(Config) ->
receive
{sync_started, F} ->
exit(F, kill),
- test_server:fail(async_start)
+ ct:fail(async_start)
after 1000 -> ok
end,
receive
@@ -214,14 +214,14 @@ sync_start_nolink(Config) when is_list(Config) ->
{sync_started, _} -> ok
after 1000 ->
exit(Pid2, kill),
- test_server:fail(no_sync_start)
+ ct:fail(no_sync_start)
end,
ok.
-
+
sync_start_link(Config) when is_list(Config) ->
_Pid = spawn_link(?MODULE, sp3, [self()]),
receive
- {sync_started, _} -> test_server:fail(async_start)
+ {sync_started, _} -> ct:fail(async_start)
after 1000 -> ok
end,
receive
@@ -230,24 +230,24 @@ sync_start_link(Config) when is_list(Config) ->
end,
receive
{sync_started, _} -> ok
- after 1000 -> test_server:fail(no_sync_start)
+ after 1000 -> ct:fail(no_sync_start)
end,
ok.
-
+
spawn_opt(Config) when is_list(Config) ->
F = fun sp1/0,
{name,Fname} = erlang:fun_info(F, name),
FunMFArgs = {?MODULE,Fname,[]},
FunMFArity = {?MODULE,Fname,0},
- ?line Pid1 = proc_lib:spawn_opt(node(), F, [{priority,low}]),
- ?line Pid = proc_lib:spawn_opt(F, [{priority,low}]),
- ?line test_server:sleep(100),
- ?line FunMFArgs = proc_lib:initial_call(Pid),
- ?line FunMFArity = proc_lib:translate_initial_call(Pid),
- ?line Pid ! die,
- ?line FunMFArgs = proc_lib:initial_call(Pid1),
- ?line FunMFArity = proc_lib:translate_initial_call(Pid1),
- ?line Pid1 ! die,
+ Pid1 = proc_lib:spawn_opt(node(), F, [{priority,low}]),
+ Pid = proc_lib:spawn_opt(F, [{priority,low}]),
+ ct:sleep(100),
+ FunMFArgs = proc_lib:initial_call(Pid),
+ FunMFArity = proc_lib:translate_initial_call(Pid),
+ Pid ! die,
+ FunMFArgs = proc_lib:initial_call(Pid1),
+ FunMFArity = proc_lib:translate_initial_call(Pid1),
+ Pid1 ! die,
ok.
@@ -283,57 +283,57 @@ hibernate(Config) when is_list(Config) ->
Ref = make_ref(),
Self = self(),
LoopData = {Ref,Self},
- ?line Pid = proc_lib:spawn_link(?MODULE, hib_loop, [LoopData]),
+ Pid = proc_lib:spawn_link(?MODULE, hib_loop, [LoopData]),
%% Just check that the child process can process and answer messages.
- ?line Pid ! {Self,loop_data},
+ Pid ! {Self,loop_data},
receive
{loop_data,LoopData} -> ok;
Unexpected0 ->
- ?line io:format("Unexpected: ~p\n", [Unexpected0]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p\n", [Unexpected0]),
+ ct:fail(failed)
after 1000 ->
- ?line io:format("Timeout"),
- ?line ?t:fail()
+ io:format("Timeout"),
+ ct:fail(failed)
end,
%% Hibernate the process.
- ?line Pid ! hibernate,
+ Pid ! hibernate,
erlang:yield(),
io:format("~p\n", [process_info(Pid, heap_size)]),
%% Send a message to the process...
- ?line Pid ! {Self,loop_data},
+ Pid ! {Self,loop_data},
%% ... expect first a wake up message from the process...
receive
{awaken,LoopData} -> ok;
Unexpected1 ->
- ?line io:format("Unexpected: ~p\n", [Unexpected1]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p\n", [Unexpected1]),
+ ct:fail(failed)
after 1000 ->
- ?line io:format("Timeout"),
- ?line ?t:fail()
+ io:format("Timeout"),
+ ct:fail(failed)
end,
%% ... followed by the answer to the actual request.
receive
{loop_data,LoopData} -> ok;
Unexpected2 ->
- ?line io:format("Unexpected: ~p\n", [Unexpected2]),
- ?line ?t:fail()
+ io:format("Unexpected: ~p\n", [Unexpected2]),
+ ct:fail(failed)
after 1000 ->
- ?line io:format("Timeout"),
- ?line ?t:fail()
+ io:format("Timeout"),
+ ct:fail(failed)
end,
%% Test that errors are handled correctly after wake up from hibernation...
- ?line process_flag(trap_exit, true),
- ?line error_logger:add_report_handler(?MODULE, self()),
- ?line Pid ! crash,
+ process_flag(trap_exit, true),
+ error_logger:add_report_handler(?MODULE, self()),
+ Pid ! crash,
%% We should receive two messages. Especially in the SMP emulator,
%% we can't be sure of the message order, so sort the messages before
@@ -341,10 +341,10 @@ hibernate(Config) when is_list(Config) ->
Messages = lists:sort(hib_receive_messages(2)),
io:format("~p", [Messages]),
- ?line [{'EXIT',Pid,i_crashed},{crash_report,Pid,[Report,[]]}] = Messages,
+ [{'EXIT',Pid,i_crashed},{crash_report,Pid,[Report,[]]}] = Messages,
%% Check that the initial_call has the expected format.
- ?line {value,{initial_call,{?MODULE,hib_loop,[_]}}} =
+ {value,{initial_call,{?MODULE,hib_loop,[_]}}} =
lists:keysearch(initial_call, 1, Report),
error_logger:delete_report_handler(?MODULE),
@@ -371,10 +371,7 @@ hib_receive_messages(N) ->
Any -> [Any|hib_receive_messages(N-1)]
end.
-otp_6345(suite) ->
- [];
-otp_6345(doc) ->
- ["'monitor' spawn_opt option"];
+%% 'monitor' spawn_opt option.
otp_6345(Config) when is_list(Config) ->
Opts = [link,monitor],
{'EXIT', {badarg,[{proc_lib,check_for_monitor,_,_}|_Stack]}} =
@@ -392,11 +389,8 @@ otp_6345_loop() ->
otp_6345_loop()
end.
-%% OTP-9803
-init_dont_hang(suite) ->
- [];
-init_dont_hang(doc) ->
- ["Check that proc_lib:start don't hang if spawned process crashes before proc_lib:init_ack/2"];
+%% OTP-9803. Check that proc_lib:start() doesn't hang if spawned process
+%% crashes before proc_lib:init_ack/2.
init_dont_hang(Config) when is_list(Config) ->
%% Start should behave as start_link
process_flag(trap_exit, true),
@@ -489,7 +483,7 @@ stop(_Config) ->
{'EXIT',noproc} = (catch proc_lib:stop({to_stop,Node})),
true = test_server:stop_node(Node),
-
+
%% Remote registered name, but non-existing node
{'EXIT',{{nodedown,Node},_}} = (catch proc_lib:stop({to_stop,Node})),
ok.
@@ -522,7 +516,7 @@ t_format() ->
if
Tsz >= Usz ->
- ?t:fail();
+ ct:fail(failed);
true ->
ok
end,
@@ -549,7 +543,7 @@ t_format_looper() ->
%%-----------------------------------------------------------------
init(Tester) ->
{ok, Tester}.
-
+
handle_event({error_report, _GL, {Pid, crash_report, Report}}, Tester) ->
io:format("~s\n", [proc_lib:format(Report)]),
Tester ! {crash_report, Pid, Report},
diff --git a/lib/stdlib/test/qlc_SUITE.erl b/lib/stdlib/test/qlc_SUITE.erl
index 52fdb69b73..2bd940020c 100644
--- a/lib/stdlib/test/qlc_SUITE.erl
+++ b/lib/stdlib/test/qlc_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@
-define(QLC, qlc).
-define(QLCs, "qlc").
-%-define(debug, true).
+%%-define(debug, true).
%% There are often many tests per testcase. Most tests are copied to a
%% module, a file. The file is compiled and the test run. Should the
@@ -43,10 +43,10 @@
-define(testcase, current_testcase). % don't know
-define(t, test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
--define(datadir, ?config(data_dir, Config)).
--define(privdir, ?config(priv_dir, Config)).
--define(testcase, ?config(?TESTCASE, Config)).
+-include_lib("common_test/include/ct.hrl").
+-define(datadir, proplists:get_value(data_dir, Config)).
+-define(privdir, proplists:get_value(priv_dir, Config)).
+-define(testcase, proplists:get_value(?TESTCASE, Config)).
-endif.
-include_lib("stdlib/include/ms_transform.hrl").
@@ -80,7 +80,7 @@
backward/1, forward/1,
- eep37/1]).
+ eep37/1]).
%% Internal exports.
-export([bad_table_throw/1, bad_table_exit/1, default_table/1, bad_table/1,
@@ -107,19 +107,15 @@
handle_event/2, handle_call/2, handle_info/2,
terminate/2]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(5)).
-
init_per_testcase(Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{?TESTCASE, Case}, {watchdog, Dog} | Config].
+ [{?TESTCASE, Case} | Config].
end_per_testcase(_Case, _Config) ->
- Dog = ?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[{group, parse_transform}, {group, evaluation},
@@ -159,35 +155,30 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-badarg(doc) ->
- "Badarg.";
-badarg(suite) -> [];
badarg(Config) when is_list(Config) ->
Ts =
- [{badarg,
- <<"-import(qlc, [q/1, q/2]).
+ [{badarg,
+ <<"-import(qlc, [q/1, q/2]).
q(_, _, _) -> ok.
- badarg() ->
- qlc:q(foo),
- qlc:q(foo, cache_all),
- qlc:q(foo, cache_all, extra),
- q(bar),
- q(bar, cache_all),
- q(bar, cache_all, extra).
- ">>,
+badarg() ->
+ qlc:q(foo),
+ qlc:q(foo, cache_all),
+ qlc:q(foo, cache_all, extra),
+ q(bar),
+ q(bar, cache_all),
+ q(bar, cache_all, extra).
+">>,
[],
- {errors,[{5,?QLC,not_a_query_list_comprehension},
- {6,?QLC,not_a_query_list_comprehension},
- {8,?QLC,not_a_query_list_comprehension},
- {9,?QLC,not_a_query_list_comprehension}],
- []}}],
- ?line [] = compile(Config, Ts),
+{errors,[{5,?QLC,not_a_query_list_comprehension},
+ {6,?QLC,not_a_query_list_comprehension},
+ {8,?QLC,not_a_query_list_comprehension},
+ {9,?QLC,not_a_query_list_comprehension}],
+ []}}],
+ [] = compile(Config, Ts),
ok.
-nested_qlc(doc) ->
- "Nested qlc expressions.";
-nested_qlc(suite) -> [];
+%% Nested qlc expressions.
nested_qlc(Config) when is_list(Config) ->
%% Nested QLC expressions. X is bound before the first one; Z and X
%% before the second one.
@@ -227,12 +218,10 @@ nested_qlc(Config) when is_list(Config) ->
[warn_unused_vars],
{warnings,[{{6,39},erl_lint,{shadowed_var,'X',generate}}]}}
],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-unused_var(doc) ->
- "Unused variable with a name that should not be introduced.";
-unused_var(suite) -> [];
+%% Unused variable with a name that should not be introduced.
unused_var(Config) when is_list(Config) ->
Ts =
[{unused_var,
@@ -244,12 +233,10 @@ unused_var(Config) when is_list(Config) ->
">>,
[warn_unused_vars],
{warnings,[{{2,33},erl_lint,{unused_var,'Y1'}}]}}],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-lc(doc) ->
- "Ordinary LC expression.";
-lc(suite) -> [];
+%% Ordinary LC expression.
lc(Config) when is_list(Config) ->
Ts =
[{lc,
@@ -258,12 +245,10 @@ lc(Config) when is_list(Config) ->
">>,
[],
{warnings,[{{2,30},erl_lint,{shadowed_var,'X',generate}}]}}],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-fun_clauses(doc) ->
- "Fun with several clauses.";
-fun_clauses(suite) -> [];
+%% Fun with several clauses.
fun_clauses(Config) when is_list(Config) ->
Ts =
[{fun_clauses,
@@ -279,12 +264,10 @@ fun_clauses(Config) when is_list(Config) ->
{{3,41},erl_lint,{shadowed_var,'X',generate}},
{{4,22},erl_lint,{shadowed_var,'X','fun'}},
{{4,41},erl_lint,{shadowed_var,'X',generate}}]}}],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-filter_var(doc) ->
- "Variable introduced in filter.";
-filter_var(suite) -> [];
+%% Variable introduced in filter.
filter_var(Config) when is_list(Config) ->
Ts =
[{filter_var,
@@ -309,13 +292,11 @@ filter_var(Config) when is_list(Config) ->
">>,
[],
{errors,[{{2,25},erl_lint,{unsafe_var,'V',{'case',{3,19}}}}],[]}}],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-single(doc) ->
- "Unused pattern variable.";
-single(suite) -> [];
+%% Unused pattern variable.
single(Config) when is_list(Config) ->
Ts =
[{single,
@@ -325,12 +306,10 @@ single(Config) when is_list(Config) ->
">>,
[warn_unused_vars],
{warnings,[{{2,30},erl_lint,{unused_var,'Y'}}]}}],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-exported_var(doc) ->
- "Exported variable in list expression (rhs of generator).";
-exported_var(suite) -> [];
+%% Exported variable in list expression (rhs of generator).
exported_var(Config) when is_list(Config) ->
Ts =
[{exported_var,
@@ -347,12 +326,10 @@ exported_var(Config) when is_list(Config) ->
[warn_export_vars],
{warnings,[{{7,37},erl_lint,{exported_var,'Z',{'case',{3,36}}}},
{{7,44},erl_lint,{exported_var,'Z',{'case',{3,36}}}}]}}],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-generator_vars(doc) ->
- "Errors for generator variable used in list expression.";
-generator_vars(suite) -> [];
+%% Errors for generator variable used in list expression.
generator_vars(Config) when is_list(Config) ->
Ts =
[{generator_vars,
@@ -374,12 +351,10 @@ generator_vars(Config) when is_list(Config) ->
{{9,33},?QLC,{used_generator_variable,'Z'}},
{{9,40},?QLC,{used_generator_variable,'Z'}}],
[]}}],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-nomatch(doc) ->
- "Unreachable clauses also found when compiling.";
-nomatch(suite) -> [];
+%% Unreachable clauses also found when compiling.
nomatch(Config) when is_list(Config) ->
Ts =
[{unreachable1,
@@ -451,13 +426,11 @@ nomatch(Config) when is_list(Config) ->
{warnings,[{3,v3_core,nomatch}]}}
],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-errors(doc) ->
- "Errors within qlc expressions also found when compiling.";
-errors(suite) -> [];
+%% Errors within qlc expressions also found when compiling.
errors(Config) when is_list(Config) ->
Ts =
[{errors1,
@@ -466,12 +439,10 @@ errors(Config) when is_list(Config) ->
">>,
[],
{errors,[{{2,33},erl_lint,{unbound_var,'A'}}],[]}}],
- ?line [] = compile(Config, Ts),
+ [] = compile(Config, Ts),
ok.
-pattern(doc) ->
- "Patterns.";
-pattern(suite) -> [];
+%% Patterns.
pattern(Config) when is_list(Config) ->
Ts = [
<<"%% Records in patterns. No lookup.
@@ -493,14 +464,12 @@ pattern(Config) when is_list(Config) ->
end, [{<<\"hej\">>}])">>
],
- ?line run(Config, <<"-record(a, {k,v}).
+ run(Config, <<"-record(a, {k,v}).
-record(k, {t,v}).\n">>, Ts),
ok.
-eval(doc) ->
- "eval/2";
-eval(suite) -> [];
+%% eval/2
eval(Config) when is_list(Config) ->
ScratchDir = filename:join([?privdir, "scratch","."]),
@@ -616,12 +585,10 @@ eval(Config) when is_list(Config) ->
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-cursor(doc) ->
- "cursor/2";
-cursor(suite) -> [];
+%% cursor/2
cursor(Config) when is_list(Config) ->
ScratchDir = filename:join([?privdir, "scratch","."]),
Ts = [<<"{'EXIT',{badarg,_}} =
@@ -730,12 +697,10 @@ cursor(Config) when is_list(Config) ->
ok = qlc:delete_cursor(C2)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-fold(doc) ->
- "fold/4";
-fold(suite) -> [];
+%% fold/4
fold(Config) when is_list(Config) ->
ScratchDir = filename:join([?privdir, "scratch","."]),
Ts = [<<"Q = qlc:q([X || X <- [1,2,1,2,1]]),
@@ -825,12 +790,10 @@ fold(Config) when is_list(Config) ->
(catch qlc:fold(F, [], Q, [{unique_all,false}]))
">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-eval_unique(doc) ->
- "Test the unique_all option of eval.";
-eval_unique(suite) -> [];
+%% Test the unique_all option of eval.
eval_unique(Config) when is_list(Config) ->
Ts = [<<"QLC1 = qlc:q([X || X <- qlc:append([[1,1,2], [1,2,3,2,3]])]),
[1,2,3] = qlc:eval(QLC1, {unique_all,true}),
@@ -922,12 +885,10 @@ eval_unique(Config) when is_list(Config) ->
{sort,{sort,{list,_},[{unique,true}]},[]} = i(Q)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-eval_cache(doc) ->
- "Test the cache_all and unique_all options of eval.";
-eval_cache(suite) -> [];
+%% Test the cache_all and unique_all options of eval.
eval_cache(Config) when is_list(Config) ->
Ts = [
<<"E = ets:new(apa, [ordered_set]),
@@ -1056,12 +1017,10 @@ eval_cache(Config) when is_list(Config) ->
[1] = qlc:e(H, unique_all)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-append(doc) ->
- "Test the append function.";
-append(suite) -> [];
+%% Test the append function.
append(Config) when is_list(Config) ->
Ts = [<<"C = qlc:cursor(qlc:q([X || X <- [0,1,2,3], begin 10/X > 0.0 end])),
R = (catch qlc:next_answers(C)),
@@ -1121,12 +1080,12 @@ append(Config) when is_list(Config) ->
foo() -> bar">>,
%% Used to work up to R11B.
- % <<"apa = qlc:e(qlc:q([X || X <- qlc:append([[1,2,3], ugly()])])),
- % ok.
- %
- % ugly() ->
- % [a | apa].
- % foo() -> bar">>,
+ %% <<"apa = qlc:e(qlc:q([X || X <- qlc:append([[1,2,3], ugly()])])),
+ %% ok.
+ %%
+ %% ugly() ->
+ %% [a | apa].
+ %% foo() -> bar">>,
%% Maybe this one should fail.
@@ -1179,99 +1138,93 @@ append(Config) when is_list(Config) ->
[a,b,1,2,1,2] = qlc:e(Q)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-evaluator(doc) ->
- "Simple call from evaluator.";
-evaluator(suite) -> [];
+%% Simple call from evaluator.
evaluator(Config) when is_list(Config) ->
- ?line true = is_alive(),
+ true = is_alive(),
evaluator_2(Config, []),
- ?line {ok, Node} = start_node(qlc_SUITE_evaluator),
- ?line ok = rpc:call(Node, ?MODULE, evaluator_2, [Config, [compiler]]),
- ?line ?t:stop_node(Node),
+ {ok, Node} = start_node(qlc_SUITE_evaluator),
+ ok = rpc:call(Node, ?MODULE, evaluator_2, [Config, [compiler]]),
+ test_server:stop_node(Node),
ok.
evaluator_2(Config, Apps) ->
- ?line lists:foreach(fun(App) -> true = code:del_path(App) end, Apps),
+ lists:foreach(fun(App) -> true = code:del_path(App) end, Apps),
FileName = filename:join(?privdir, "eval"),
- ?line ok = file:write_file(FileName,
+ ok = file:write_file(FileName,
<<"H = qlc:q([X || X <- L]),
[1,2,3] = qlc:e(H).">>),
- ?line Bs = erl_eval:add_binding('L', [1,2,3], erl_eval:new_bindings()),
- ?line ok = file:eval(FileName, Bs),
+ Bs = erl_eval:add_binding('L', [1,2,3], erl_eval:new_bindings()),
+ ok = file:eval(FileName, Bs),
%% The error message is "handled" a bit too much...
%% (no trace of erl_lint left)
- ?line ok = file:write_file(FileName,
+ ok = file:write_file(FileName,
<<"H = qlc:q([X || X <- L]), qlc:e(H).">>),
- ?line {error,_} = file:eval(FileName),
+ {error,_} = file:eval(FileName),
%% Ugly error message; badarg is caught by file.erl.
- ?line ok = file:write_file(FileName,
+ ok = file:write_file(FileName,
<<"H = qlc:q([Z || {X,Y} <- [{a,2}], Z <- [Y]]), qlc:e(H).">>),
- ?line {error,_} = file:eval(FileName),
+ {error,_} = file:eval(FileName),
_ = file:delete(FileName),
ok.
start_node(Name) ->
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?t:start_node(Name, slave, [{args, "-pa " ++ PA}]).
+ PA = filename:dirname(code:which(?MODULE)),
+ test_server:start_node(Name, slave, [{args, "-pa " ++ PA}]).
-string_to_handle(doc) ->
- "string_to_handle/1,2.";
-string_to_handle(suite) -> [];
+%% string_to_handle/1,2.
string_to_handle(Config) when is_list(Config) ->
- ?line {'EXIT',{badarg,_}} = (catch qlc:string_to_handle(14)),
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} = (catch qlc:string_to_handle(14)),
+ {'EXIT',{badarg,_}} =
(catch qlc:string_to_handle("[X || X <- [a].", unique_all)),
- ?line R1 = {error, _, {_,erl_scan,_}} = qlc:string_to_handle("'"),
- ?line "1: unterminated " ++ _ = lists:flatten(qlc:format_error(R1)),
- ?line {error, _, {_,erl_parse,_}} = qlc:string_to_handle("foo"),
- ?line {'EXIT',{badarg,_}} = (catch qlc:string_to_handle("foo, bar.")),
- ?line R3 = {error, _, {_,?QLC,not_a_query_list_comprehension}} =
+ R1 = {error, _, {_,erl_scan,_}} = qlc:string_to_handle("'"),
+ "1: unterminated " ++ _ = lists:flatten(qlc:format_error(R1)),
+ {error, _, {_,erl_parse,_}} = qlc:string_to_handle("foo"),
+ {'EXIT',{badarg,_}} = (catch qlc:string_to_handle("foo, bar.")),
+ R3 = {error, _, {_,?QLC,not_a_query_list_comprehension}} =
qlc:string_to_handle("bad."),
- ?line "1: argument is not" ++ _ = lists:flatten(qlc:format_error(R3)),
- ?line R4 = {error, _, {_,?QLC,{used_generator_variable,'Y'}}} =
+ "1: argument is not" ++ _ = lists:flatten(qlc:format_error(R3)),
+ R4 = {error, _, {_,?QLC,{used_generator_variable,'Y'}}} =
qlc:string_to_handle("[X || begin Y = [1,2], true end, X <- Y]."),
- ?line "1: generated variable 'Y'" ++ _ =
+ "1: generated variable 'Y'" ++ _ =
lists:flatten(qlc:format_error(R4)),
- ?line {error, _, {_,erl_lint,_}} = qlc:string_to_handle("[X || X <- A]."),
- ?line H1 = qlc:string_to_handle("[X || X <- [1,2]]."),
- ?line [1,2] = qlc:e(H1),
- ?line H2 = qlc:string_to_handle("[X || X <- qlc:append([a,b],"
+ {error, _, {_,erl_lint,_}} = qlc:string_to_handle("[X || X <- A]."),
+ H1 = qlc:string_to_handle("[X || X <- [1,2]]."),
+ [1,2] = qlc:e(H1),
+ H2 = qlc:string_to_handle("[X || X <- qlc:append([a,b],"
"qlc:e(qlc:q([X || X <- [c,d,e]])))]."),
- ?line [a,b,c,d,e] = qlc:e(H2),
+ [a,b,c,d,e] = qlc:e(H2),
%% The generated fun has many arguments (erl_eval has a maximum of 20).
- ?line H3 = qlc:string_to_handle(
+ H3 = qlc:string_to_handle(
"[{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W} ||"
" {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W} <- []]."),
- ?line [] = qlc:e(H3),
- ?line Bs1 = erl_eval:add_binding('L', [1,2,3], erl_eval:new_bindings()),
- ?line H4 = qlc:string_to_handle("[X || X <- L].", [], Bs1),
- ?line [1,2,3] = qlc:e(H4),
- ?line H5 = qlc:string_to_handle("[X || X <- [1,2,1,2]].", [unique, cache]),
- ?line [1,2] = qlc:e(H5),
-
- ?line Ets = ets:new(test, []),
- ?line true = ets:insert(Ets, [{1}]),
- ?line Bs2 = erl_eval:add_binding('E', Ets, erl_eval:new_bindings()),
- ?line Q = "[X || {X} <- ets:table(E)].",
- ?line [1] = qlc:e(qlc:string_to_handle(Q, [], Bs2)),
- ?line [1] = qlc:e(qlc:string_to_handle(Q, {max_lookup,1000}, Bs2)),
- ?line [1] = qlc:e(qlc:string_to_handle(Q, {max_lookup,infinity}, Bs2)),
- ?line {'EXIT',{badarg,_}} =
+ [] = qlc:e(H3),
+ Bs1 = erl_eval:add_binding('L', [1,2,3], erl_eval:new_bindings()),
+ H4 = qlc:string_to_handle("[X || X <- L].", [], Bs1),
+ [1,2,3] = qlc:e(H4),
+ H5 = qlc:string_to_handle("[X || X <- [1,2,1,2]].", [unique, cache]),
+ [1,2] = qlc:e(H5),
+
+ Ets = ets:new(test, []),
+ true = ets:insert(Ets, [{1}]),
+ Bs2 = erl_eval:add_binding('E', Ets, erl_eval:new_bindings()),
+ Q = "[X || {X} <- ets:table(E)].",
+ [1] = qlc:e(qlc:string_to_handle(Q, [], Bs2)),
+ [1] = qlc:e(qlc:string_to_handle(Q, {max_lookup,1000}, Bs2)),
+ [1] = qlc:e(qlc:string_to_handle(Q, {max_lookup,infinity}, Bs2)),
+ {'EXIT',{badarg,_}} =
(catch qlc:string_to_handle(Q, {max_lookup,-1}, Bs2)),
- ?line {'EXIT', {no_lookup_to_carry_out, _}} =
+ {'EXIT', {no_lookup_to_carry_out, _}} =
(catch qlc:e(qlc:string_to_handle(Q, {lookup,true}, Bs2))),
- ?line ets:delete(Ets),
+ ets:delete(Ets),
ok.
-table(doc) ->
- "table";
-table(suite) -> [];
+%% table
table(Config) when is_list(Config) ->
dets:start(),
Ts = [
@@ -1353,11 +1306,11 @@ table(Config) when is_list(Config) ->
ets:delete(E)">>,
%% The info tag num_of_objects is currently not used.
-% <<"E = ets:new(test, [ordered_set]),
-% true = ets:insert(E, [{1,a},{2,b},{3,c}]),
-% H = qlc:q([X || X <- qlc_SUITE:bad_table_info_fun_n_objects(E)]),
-% {'EXIT', finito} = (catch {any_term,qlc:e(H)}),
-% ets:delete(E)">>,
+%% <<"E = ets:new(test, [ordered_set]),
+%% true = ets:insert(E, [{1,a},{2,b},{3,c}]),
+%% H = qlc:q([X || X <- qlc_SUITE:bad_table_info_fun_n_objects(E)]),
+%% {'EXIT', finito} = (catch {any_term,qlc:e(H)}),
+%% ets:delete(E)">>,
<<"E = ets:new(test, [ordered_set]),
true = ets:insert(E, [{1,a},{2,b},{3,c}]),
@@ -1473,7 +1426,7 @@ table(Config) when is_list(Config) ->
[1,2] = lookup_keys(Q)
end, [{1,1},{2,2}])">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
Ts2 = [
%% [T || P <- Table, F] turned into a match spec. Records needed.
@@ -1484,13 +1437,11 @@ table(Config) when is_list(Config) ->
[{a,1,2},{a,3,4}] = lists:sort(qlc:eval(QH)),
ets:delete(E)">>
],
- ?line run(Config, <<"-record(a, {b,c}).\n">>, Ts2),
+ run(Config, <<"-record(a, {b,c}).\n">>, Ts2),
ok.
-process_dies(doc) ->
- "Caller or cursor process dies.";
-process_dies(suite) -> [];
+%% Caller or cursor process dies.
process_dies(Config) when is_list(Config) ->
Ts = [
<<"E = ets:new(test, []),
@@ -1629,12 +1580,10 @@ process_dies(Config) when is_list(Config) ->
true = ets:delete(E), ok">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-sort(doc) ->
- "The sort option.";
-sort(suite) -> [];
+%% The sort option.
sort(Config) when is_list(Config) ->
Ts = [
<<"H = qlc:q([X || X <- qlc:sort([1,2,3,2], {unique,true})]),
@@ -1741,12 +1690,10 @@ sort(Config) when is_list(Config) ->
end
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-keysort(doc) ->
- "The sort option.";
-keysort(suite) -> [];
+%% The sort option.
keysort(Config) when is_list(Config) ->
Ts = [
@@ -1865,13 +1812,11 @@ keysort(Config) when is_list(Config) ->
100003 = length(R)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-filesort(doc) ->
- "keysort/1,2, using a file.";
-filesort(suite) -> [];
+%% keysort/1,2, using a file.
filesort(Config) when is_list(Config) ->
Ts = [
<<"Q = qlc:q([X || X <- [{3},{1},{2}]]),
@@ -1879,13 +1824,11 @@ filesort(Config) when is_list(Config) ->
Q2 = qlc:q([{X,Y} || Y <- [1,2], X <- qlc:keysort([1],Q,Opts)]),
[{{1},1},{{2},1},{{3},1},{{1},2},{{2},2},{{3},2}] = qlc:e(Q2)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-cache(doc) ->
- "The cache option.";
-cache(suite) -> [];
+%% The cache option.
cache(Config) when is_list(Config) ->
Ts = [
<<"{'EXIT', {badarg, _}} = (catch qlc:q([X || X <- [1,2]], badarg))">>,
@@ -2043,12 +1986,10 @@ cache(Config) when is_list(Config) ->
[]} = i(H, cache_all)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-cache_list(doc) ->
- "OTP-6038. The {cache,list} option.";
-cache_list(suite) -> [];
+%% OTP-6038. The {cache,list} option.
cache_list(Config) when is_list(Config) ->
Ts = [
begin
@@ -2334,12 +2275,10 @@ cache_list(Config) when is_list(Config) ->
{'EXIT', {badarg, _}} = (catch qlc:e(Q, {max_list_size, foo}))">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-filter(doc) ->
- "Filters and match specs.";
-filter(suite) -> [];
+%% Filters and match specs.
filter(Config) when is_list(Config) ->
Ts = [
<<"L = [1,2,3,4,5],
@@ -2461,12 +2400,10 @@ filter(Config) when is_list(Config) ->
[{2,b},{2,c},{3,b},{3,c}] = qlc:e(H)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-info(doc) ->
- "info/2.";
-info(suite) -> [];
+%% info/2.
info(Config) when is_list(Config) ->
Ts = [
<<"{list, [1,2]} = i(qlc:q([X || X <- [1,2]])),
@@ -2686,12 +2623,10 @@ info(Config) when is_list(Config) ->
[{4},{5},{6}] = qlc:e(F(3))">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-nested_info(doc) ->
- "Nested QLC expressions. QLC expressions in filter and template.";
-nested_info(suite) -> [];
+%% Nested QLC expressions. QLC expressions in filter and template.
nested_info(Config) when is_list(Config) ->
Ts = [
<<"L = [{1,a},{2,b},{3,c}],
@@ -2792,13 +2727,11 @@ nested_info(Config) when is_list(Config) ->
[{1,1},{1,1},{1,2},{1,2},{2,1},{2,1},{2,2},{2,2}] = qlc:e(Q)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-lookup1(doc) ->
- "Lookup keys. Mostly test of patterns.";
-lookup1(suite) -> [];
+%% Lookup keys. Mostly test of patterns.
lookup1(Config) when is_list(Config) ->
Ts = [
<<"etsc(fun(E) ->
@@ -3003,12 +2936,10 @@ lookup1(Config) when is_list(Config) ->
[]}
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-lookup2(doc) ->
- "Lookup keys. Mostly test of filters.";
-lookup2(suite) -> [];
+%% Lookup keys. Mostly test of filters.
lookup2(Config) when is_list(Config) ->
Ts = [
<<"%% Only guards are inspected. No lookup.
@@ -3708,9 +3639,7 @@ lookup2(Config) when is_list(Config) ->
ok.
-lookup_rec(doc) ->
- "Lookup keys. With records.";
-lookup_rec(suite) -> [];
+%% Lookup keys. With records.
lookup_rec(Config) when is_list(Config) ->
Ts = [
<<"etsc(fun(E) ->
@@ -3778,12 +3707,10 @@ lookup_rec(Config) when is_list(Config) ->
[_] = lookup_keys(Q)
end, [{keypos,2}], [#r{a=foo}])">>
],
- ?line run(Config, <<"-record(r, {a}).\n">>, Ts),
+ run(Config, <<"-record(r, {a}).\n">>, Ts),
ok.
-indices(doc) ->
- "Using indices for lookup.";
-indices(suite) -> [];
+%% Using indices for lookup.
indices(Config) when is_list(Config) ->
Ts = [
<<"L = [{1,a},{2,b},{3,c}],
@@ -3845,12 +3772,10 @@ indices(Config) when is_list(Config) ->
[{c,3,z,w}] = qlc:eval(QH)">>
],
- ?line run(Config, <<"-record(r, {a}).\n">>, Ts),
+ run(Config, <<"-record(r, {a}).\n">>, Ts),
ok.
-pre_fun(doc) ->
- "Test the table/2 callback functions parent_fun and stop_fun.";
-pre_fun(suite) -> [];
+%% Test the table/2 callback functions parent_fun and stop_fun.
pre_fun(Config) when is_list(Config) ->
Ts = [
<<"PF = process_flag(trap_exit, true),
@@ -3926,12 +3851,10 @@ pre_fun(Config) when is_list(Config) ->
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-skip_filters(doc) ->
- "Lookup keys. With records.";
-skip_filters(suite) -> [];
+%% Lookup keys. With records.
skip_filters(Config) when is_list(Config) ->
%% Skipped filters
TsS = [
@@ -4051,7 +3974,7 @@ skip_filters(Config) when is_list(Config) ->
end, [{0},{1},{2},{3},{4}])">>
],
- ?line run(Config, TsS),
+ run(Config, TsS),
Ts = [
<<"etsc(fun(E) ->
@@ -4329,14 +4252,12 @@ skip_filters(Config) when is_list(Config) ->
end, [{1},{2},{3}])">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-ets(doc) ->
- "ets:table/1,2.";
-ets(suite) -> [];
+%% ets:table/1,2.
ets(Config) when is_list(Config) ->
Ts = [
<<"E = ets:new(t, [ordered_set]),
@@ -4377,12 +4298,10 @@ ets(Config) when is_list(Config) ->
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-dets(doc) ->
- "dets:table/1,2.";
-dets(suite) -> [];
+%% dets:table/1,2.
dets(Config) when is_list(Config) ->
dets:start(),
T = t,
@@ -4475,14 +4394,12 @@ dets(Config) when is_list(Config) ->
],
- ?line run(Config, Ts),
+ run(Config, Ts),
_ = file:delete(Fname),
ok.
-join_option(doc) ->
- "The 'join' option (any, lookup, merge, nested_loop). Also cache/unique.";
-join_option(suite) -> [];
+%% The 'join' option (any, lookup, merge, nested_loop). Also cache/unique.
join_option(Config) when is_list(Config) ->
Ts = [
<<"Q1 = qlc:q([X || X <- [1,2,3]],{join,merge}),
@@ -4607,7 +4524,7 @@ join_option(Config) when is_list(Config) ->
ets:delete(E1)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
%% The 'cache' and 'unique' options of qlc/2 affects join.
CUTs = [
@@ -4655,13 +4572,11 @@ join_option(Config) when is_list(Config) ->
_],[{unique,true}]} = i(Q, Options),
[{1,1,1},{2,2,1},{1,1,2},{2,2,2}] = qlc:e(Q, Options)">>
],
- ?line run(Config, CUTs),
+ run(Config, CUTs),
ok.
-join_filter(doc) ->
- "Various aspects of filters and join.";
-join_filter(suite) -> [];
+%% Various aspects of filters and join.
join_filter(Config) when is_list(Config) ->
Ts = [
<<"E1 = create_ets(1, 10),
@@ -4698,12 +4613,10 @@ join_filter(Config) when is_list(Config) ->
end, [{a},{b},{c}])">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-join_lookup(doc) ->
- "Lookup join.";
-join_lookup(suite) -> [];
+%% Lookup join.
join_lookup(Config) when is_list(Config) ->
Ts = [
<<"E1 = create_ets(1, 10),
@@ -4793,12 +4706,10 @@ join_lookup(Config) when is_list(Config) ->
ets:delete(E)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-join_merge(doc) ->
- "Merge join.";
-join_merge(suite) -> [];
+%% Merge join.
join_merge(Config) when is_list(Config) ->
Ts = [
<<"Q = qlc:q([{X,Y} || {X} <- [], {Y} <- [{1}], X =:= Y],
@@ -5070,7 +4981,7 @@ join_merge(Config) when is_list(Config) ->
[{2,a}] = qlc:e(Q)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
%% Small examples. Returning an error term.
ETs = [
@@ -5249,7 +5160,7 @@ join_merge(Config) when is_list(Config) ->
err = qlc:e(Q)">>
],
- ?line run(Config, ETs),
+ run(Config, ETs),
%% Mostly examples where temporary files are needed while merging.
FTs = [
@@ -5408,13 +5319,11 @@ join_merge(Config) when is_list(Config) ->
],
- ?line run(Config, FTs),
+ run(Config, FTs),
ok.
-join_sort(doc) ->
- "Merge join optimizations (avoid unnecessary sorting).";
-join_sort(suite) -> [];
+%% Merge join optimizations (avoid unnecessary sorting).
join_sort(Config) when is_list(Config) ->
Ts = [
<<"H1_1 = qlc:keysort(1, [{1,2,3},{4,5,6}]),
@@ -5694,12 +5603,10 @@ join_sort(Config) when is_list(Config) ->
end, [{1,2},{3,4}])">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-join_complex(doc) ->
- "Join of more than two columns.";
-join_complex(suite) -> [];
+%% Join of more than two columns.
join_complex(Config) when is_list(Config) ->
Ts = [{three,
<<"three() ->
@@ -5727,7 +5634,7 @@ join_complex(Config) when is_list(Config) ->
{warnings,[{2,qlc,too_many_joins}]}}
],
- ?line compile(Config, Ts),
+ compile(Config, Ts),
Ts2 = [{three,
<<"three() ->
@@ -5756,14 +5663,12 @@ join_complex(Config) when is_list(Config) ->
{[],["cannot handle more than one join efficiently"]}}
],
- ?line compile_format(Config, Ts2),
+ compile_format(Config, Ts2),
ok.
-otp_5644(doc) ->
- "OTP-5644. Handle the new language element M:F/A.";
-otp_5644(suite) -> [];
+%% OTP-5644. Handle the new language element M:F/A.
otp_5644(Config) when is_list(Config) ->
Ts = [
<<"Q = qlc:q([fun modul:mfa/0 || _ <- [1,2],
@@ -5771,12 +5676,10 @@ otp_5644(Config) when is_list(Config) ->
[_,_] = qlc:eval(Q)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-otp_5195(doc) ->
- "OTP-5195. Allow traverse functions returning terms.";
-otp_5195(suite) -> [];
+%% OTP-5195. Allow traverse functions returning terms.
otp_5195(Config) when is_list(Config) ->
%% Several minor improvements have been implemented in OTP-5195.
%% The test cases are spread all over... except these.
@@ -5854,7 +5757,7 @@ otp_5195(Config) when is_list(Config) ->
],
- ?line run(Config, Ts),
+ run(Config, Ts),
Ts2 = [<<"Q = qlc:q([{X,Y} || {X} <- [{1},{2},{3}],
begin
@@ -5863,13 +5766,11 @@ otp_5195(Config) when is_list(Config) ->
end,
X =:= Y]),
[{3,3}] = qlc:e(Q)">>],
- ?line run(Config, Ts2),
+ run(Config, Ts2),
ok.
-otp_6038_bug(doc) ->
- "OTP-6038. Bug fixes: unique and keysort; cache.";
-otp_6038_bug(suite) -> [];
+%% OTP-6038. Bug fixes: unique and keysort; cache.
otp_6038_bug(Config) when is_list(Config) ->
%% The 'unique' option can no longer be merged with the keysort options.
%% This used to return [{1,a},{1,c},{2,b},{2,d}], but since
@@ -5879,7 +5780,7 @@ otp_6038_bug(Config) when is_list(Config) ->
H2 = qlc:keysort(1, H1, [{unique,true}]),
[{1,a},{2,b}] = qlc:e(H2)">>],
- ?line run(Config, Ts),
+ run(Config, Ts),
%% Sometimes the cache options did not empty the correct tables.
CTs = [
@@ -5908,13 +5809,11 @@ otp_6038_bug(Config) when is_list(Config) ->
L = [{X,Y} || X <- [1,2], Y <- L4],
true = R =:= L">>
],
- ?line run(Config, CTs),
+ run(Config, CTs),
ok.
-otp_6359(doc) ->
- "OTP-6359. dets:select() never returns the empty list.";
-otp_6359(suite) -> [];
+%% OTP-6359. dets:select() never returns the empty list.
otp_6359(Config) when is_list(Config) ->
dets:start(),
T = luna,
@@ -5933,12 +5832,10 @@ otp_6359(Config) when is_list(Config) ->
ok">>]
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
-otp_6562(doc) ->
- "OTP-6562. compressed = false (should be []) when sorting before join.";
-otp_6562(suite) -> [];
+%% OTP-6562. compressed = false (should be []) when sorting before join.
otp_6562(Config) when is_list(Config) ->
Bug = [
%% This example uses a file to sort E2 on the second column. It is
@@ -5957,7 +5854,7 @@ otp_6562(Config) when is_list(Config) ->
ets:delete(E1),
ets:delete(E2)">>
],
- ?line run(Config, Bug),
+ run(Config, Bug),
Bits = [
{otp_6562_1,
@@ -5969,18 +5866,16 @@ otp_6562(Config) when is_list(Config) ->
{errors,[{2,qlc,binary_generator}],
[]}}
],
- ?line [] = compile(Config, Bits),
+ [] = compile(Config, Bits),
- ?line R1 = {error,qlc,{1,qlc,binary_generator}}
+ R1 = {error,qlc,{1,qlc,binary_generator}}
= qlc:string_to_handle("[X || <<X:8>> <= <<\"hej\">>]."),
- ?line "1: cannot handle binary generators\n" =
+ "1: cannot handle binary generators\n" =
lists:flatten(qlc:format_error(R1)),
ok.
-otp_6590(doc) ->
- "OTP-6590. Bug fix (join info).";
-otp_6590(suite) -> [];
+%% OTP-6590. Bug fix (join info).
otp_6590(Config) when is_list(Config) ->
Ts = [<<"fun(Tab1Value) ->
Q = qlc:q([T1#tab1.id || T1 <- [#tab1{id = id1,
@@ -5992,13 +5887,11 @@ otp_6590(Config) when is_list(Config) ->
[id1] = qlc:e(Q)
end(v)">>],
- ?line run(Config, <<"-record(tab1, {id, tab2_id, value}).
+ run(Config, <<"-record(tab1, {id, tab2_id, value}).
-record(tab2, {id, value}).\n">>, Ts),
ok.
-otp_6673(doc) ->
- "OTP-6673. Optimizations and fixes.";
-otp_6673(suite) -> [];
+%% OTP-6673. Optimizations and fixes.
otp_6673(Config) when is_list(Config) ->
Ts_PT =
[<<"etsc(fun(E1) ->
@@ -6054,7 +5947,7 @@ otp_6673(Config) when is_list(Config) ->
end,
[{1,x},{2,y},{3,z}])">>],
- ?line run(Config, Ts_PT),
+ run(Config, Ts_PT),
MS = ets:fun2ms(fun({X,_Y}=T) when X > 1 -> T end),
Ts_RT = [
@@ -6091,13 +5984,11 @@ otp_6673(Config) when is_list(Config) ->
end, [{x,1},{y,2},{z,3}])">>
],
- ?line run(Config, Ts_RT),
+ run(Config, Ts_RT),
ok.
-otp_6964(doc) ->
- "OTP-6964. New option 'tmpdir_usage'.";
-otp_6964(suite) -> [];
+%% OTP-6964. New option 'tmpdir_usage'.
otp_6964(Config) when is_list(Config) ->
T1 = [
<<"Q1 = qlc:q([{X} || X <- [1,2]]),
@@ -6131,7 +6022,7 @@ otp_6964(Config) when is_list(Config) ->
_ = erlang:system_flag(backtrace_depth, D)
end,
qlc_SUITE:uninstall_error_logger()">>],
- ?line run(Config, T1),
+ run(Config, T1),
T2 = [
<<"%% File sorter.
@@ -6164,7 +6055,7 @@ otp_6964(Config) when is_list(Config) ->
{info, caching} = qlc_SUITE:read_error_logger(),
qlc_SUITE:uninstall_error_logger()">>],
- ?line run(Config, T2),
+ run(Config, T2),
T3 = [
<<"%% sort/keysort
@@ -6194,7 +6085,7 @@ otp_6964(Config) when is_list(Config) ->
qlc_SUITE:uninstall_error_logger(),
ets:delete(E1),
ets:delete(E2)">>],
- ?line run(Config, T3),
+ run(Config, T3),
T4 = [
<<"%% cache list
@@ -6225,18 +6116,16 @@ otp_6964(Config) when is_list(Config) ->
lists:flatten(qlc:format_error(ErrReply))
end, [{keypos,1}], [{I,a,lists:duplicate(100000,1)} ||
I <- lists:seq(1, 10)])">>],
- ?line run(Config, T4),
+ run(Config, T4),
ok.
-otp_7238(doc) ->
- "OTP-7238. info-option 'depth', &c.";
-otp_7238(suite) -> [];
+%% OTP-7238. info-option 'depth', &c.
otp_7238(Config) when is_list(Config) ->
dets:start(),
T = otp_7238,
Fname = filename(T, Config),
- ?line ok = compile_gb_table(Config),
+ ok = compile_gb_table(Config),
%% A few more warnings.
T1 = [
@@ -6365,7 +6254,7 @@ otp_7238(Config) when is_list(Config) ->
[],
{warnings,[{2,sys_core_fold,no_clause_match}]}}
],
- ?line [] = compile(Config, T1),
+ [] = compile(Config, T1),
%% 'depth' is a new option used by info()
T2 = [
@@ -6591,7 +6480,7 @@ otp_7238(Config) when is_list(Config) ->
qlc:info(Q, [{format,abstract_code},{depth, 2}])">>
],
- ?line run(Config, T2),
+ run(Config, T2),
T3 = [
%% {nomatch_6,
@@ -6607,7 +6496,7 @@ otp_7238(Config) when is_list(Config) ->
%% [],
%% {[],["pattern cannot possibly match"]}}
],
- ?line compile_format(Config, T3),
+ compile_format(Config, T3),
%% *Very* simple test - just check that it doesn't crash.
Type = [{cres,
@@ -6615,13 +6504,11 @@ otp_7238(Config) when is_list(Config) ->
{'EXIT',{{badfun,_},_}} = (catch qlc:e(Q))">>,
[type_checker],
[]}],
- ?line run(Config, Type),
+ run(Config, Type),
ok.
-otp_7114(doc) ->
- "OTP-7114. Match spec, table and duplicated objects..";
-otp_7114(suite) -> [];
+%% OTP-7114. Match spec, table and duplicated objects...
otp_7114(Config) when is_list(Config) ->
Ts = [<<"T = ets:new(t, [bag]),
[ets:insert(T, {t, I, I div 2}) || I <- lists:seq(1,10)],
@@ -6632,11 +6519,9 @@ otp_7114(Config) when is_list(Config) ->
[0,1,2,3,4,5] = qlc:e(qlc:sort(qlc:e(Q1)), unique_all),
ets:delete(T),
ok">>],
- ?line run(Config, Ts).
+ run(Config, Ts).
-otp_7232(doc) ->
- "OTP-7232. qlc:info() bug (pids, ports, refs, funs).";
-otp_7232(suite) -> [];
+%% OTP-7232. qlc:info() bug (pids, ports, refs, funs).
otp_7232(Config) when is_list(Config) ->
Ts = [<<"L = [fun math:sqrt/1, list_to_pid(\"<0.4.1>\"),
erlang:make_ref()],
@@ -6664,11 +6549,9 @@ otp_7232(Config) when is_list(Config) ->
\"[<<8,1:1>>]\" = qlc:info(Q)">>
],
- ?line run(Config, Ts).
+ run(Config, Ts).
-otp_7552(doc) ->
- "OTP-7552. Merge join bug.";
-otp_7552(suite) -> [];
+%% OTP-7552. Merge join bug.
otp_7552(Config) when is_list(Config) ->
%% The poor performance cannot be observed unless the
%% (redundant) join filter is skipped.
@@ -6691,11 +6574,9 @@ otp_7552(Config) when is_list(Config) ->
Qn = F(nested_loop),
true = lists:sort(qlc:e(Qm, {max_list_size,20})) =:=
lists:sort(qlc:e(Qn))">>],
- ?line run(Config, Ts).
+ run(Config, Ts).
-otp_7714(doc) ->
- "OTP-7714. Merge join bug.";
-otp_7714(suite) -> [];
+%% OTP-7714. Merge join bug.
otp_7714(Config) when is_list(Config) ->
%% The original example uses Mnesia. This one does not.
Ts = [<<"E1 = ets:new(set,[]),
@@ -6710,11 +6591,9 @@ otp_7714(Config) when is_list(Config) ->
[{a,1},{a,2},{a,3}] = lists:sort(qlc:e(Q)),
ets:delete(E1),
ets:delete(E2)">>],
- ?line run(Config, Ts).
+ run(Config, Ts).
-otp_11758(doc) ->
- "OTP-11758. Bug.";
-otp_11758(suite) -> [];
+%% OTP-11758. Bug.
otp_11758(Config) when is_list(Config) ->
Ts = [<<"T = ets:new(r, [{keypos, 2}]),
L = [{rrr, xxx, aaa}, {rrr, yyy, bbb}],
@@ -6725,12 +6604,10 @@ otp_11758(Config) when is_list(Config) ->
ets:delete(T)">>],
run(Config, Ts).
-otp_6674(doc) ->
- "OTP-6674. match/comparison.";
-otp_6674(suite) -> [];
+%% OTP-6674. match/comparison.
otp_6674(Config) when is_list(Config) ->
- ?line ok = compile_gb_table(Config),
+ ok = compile_gb_table(Config),
Ts = [%% lookup join
<<"E = ets:new(join, [ordered_set]),
@@ -7153,11 +7030,9 @@ otp_6674(Config) when is_list(Config) ->
],
- ?line run(Config, Ts).
+ run(Config, Ts).
-otp_12946(doc) ->
- ["Syntax error."];
-otp_12946(suite) -> [];
+%% Syntax error.
otp_12946(Config) when is_list(Config) ->
Text =
<<"-export([init/0]).
@@ -7167,12 +7042,10 @@ otp_12946(Config) when is_list(Config) ->
{errors,[{4,erl_parse,_}],[]} = compile_file(Config, Text, []),
ok.
-manpage(doc) ->
- "Examples from qlc(3).";
-manpage(suite) -> [];
+%% Examples from qlc(3).
manpage(Config) when is_list(Config) ->
- ?line ok = compile_gb_table(Config),
+ ok = compile_gb_table(Config),
Ts = [
<<"QH = qlc:q([{X,Y} || X <- [a,b], Y <- [1,2]]),
@@ -7327,7 +7200,7 @@ manpage(Config) when is_list(Config) ->
ets:match_spec_compile([{{{'$1','$2'},'_'},[],['$1']}]))\",
L = qlc:info(QH)">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
L = [1,2,3],
Bs = erl_eval:add_binding('L', L, erl_eval:new_bindings()),
@@ -7345,7 +7218,7 @@ manpage(Config) when is_list(Config) ->
true = qlc:info(QH1) =:= qlc:info(QH2),
true = ets:delete(Tab)">>]],
- ?line run(Config, ETs),
+ run(Config, ETs),
%% dets(3)
DTs = [
@@ -7358,16 +7231,16 @@ manpage(Config) when is_list(Config) ->
true = qlc:info(QH1) =:= qlc:info(QH2),
ok = dets:close(T)">>]],
- ?line run(Config, DTs),
+ run(Config, DTs),
ok.
compile_gb_table(Config) ->
GB_table_file = filename("gb_table.erl", Config),
- ?line ok = file:write_file(GB_table_file, gb_table()),
- ?line {ok, gb_table} = compile:file(GB_table_file, [{outdir,?privdir}]),
- ?line code:purge(gb_table),
- ?line {module, gb_table} =
+ ok = file:write_file(GB_table_file, gb_table()),
+ {ok, gb_table} = compile:file(GB_table_file, [{outdir,?privdir}]),
+ code:purge(gb_table),
+ {module, gb_table} =
code:load_abs(filename:rootname(GB_table_file)),
ok.
@@ -7433,9 +7306,7 @@ gb_iter(I0, N, EFun) ->
">>.
-backward(doc) ->
- "OTP-6674. Join info and extra constants.";
-backward(suite) -> [];
+%% OTP-6674. Join info and extra constants.
backward(Config) when is_list(Config) ->
try_old_join_info(Config),
ok.
@@ -7470,9 +7341,6 @@ try_old_join_info(Config) ->
qlc:info(H2, {format,debug}),
[{1,1},{2,2}] = qlc:e(H2).
-forward(doc) ->
- "";
-forward(suite) -> [];
forward(Config) when is_list(Config) ->
Ts = [
%% LC_fun() returns something unknown.
@@ -7481,12 +7349,12 @@ forward(Config) when is_list(Config) ->
{'EXIT', {{unsupported_qlc_handle,_},_}} = (catch qlc:e(FakeH))">>,
%% 'f1' should be used for new stuff that does not interfer with old behavior
-% %% The unused element 'f1' of #qlc_table seems to be used.
-% <<"DF = fun() -> foo end,
-% FakeH = {qlc_handle,{qlc_table,DF,
-% true,DF,DF,DF,DF,DF,
-% undefined,not_undefined,undefined,no_match_spec}},
-% {'EXIT', {{unsupported_qlc_handle,_},_}} = (catch qlc:e(FakeH))">>,
+%% %% The unused element 'f1' of #qlc_table seems to be used.
+%% <<"DF = fun() -> foo end,
+%% FakeH = {qlc_handle,{qlc_table,DF,
+%% true,DF,DF,DF,DF,DF,
+%% undefined,not_undefined,undefined,no_match_spec}},
+%% {'EXIT', {{unsupported_qlc_handle,_},_}} = (catch qlc:e(FakeH))">>,
%% #qlc_opt has changed.
<<"H = qlc:q([X || X <- []]),
@@ -7495,7 +7363,7 @@ forward(Config) when is_list(Config) ->
{'EXIT', {{unsupported_qlc_handle,_},_}} = (catch qlc:e(FakeH))">>
],
- ?line run(Config, Ts),
+ run(Config, Ts),
ok.
eep37(Config) when is_list(Config) ->
@@ -7955,7 +7823,7 @@ run_test(Config, Extra, {cres, Body, Opts, ExpectedCompileReturn}) ->
R = case catch Mod:function() of
{'EXIT', _Reason} = Error ->
- ?t:format("failed, got ~p~n", [Error]),
+ io:format("failed, got ~p~n", [Error]),
fail(SourceFile);
Reply ->
Reply
@@ -7966,7 +7834,7 @@ run_test(Config, Extra, {cres, Body, Opts, ExpectedCompileReturn}) ->
{file, cover_compiled} ->
ok;
{file, _} ->
- ?t:format("qlc_pt was loaded in runtime~n", []),
+ io:format("qlc_pt was loaded in runtime~n", []),
fail(SourceFile);
false ->
ok
@@ -8167,16 +8035,15 @@ warnings(File, Ws) ->
end.
expected(Test, Expected, Got, File) ->
- ?t:format("~nTest ~p failed. ", [Test]),
+ io:format("~nTest ~p failed. ", [Test]),
expected(Expected, Got, File).
expected(Expected, Got, File) ->
- ?t:format("Expected~n ~p~n, but got~n ~p~n", [Expected, Got]),
+ io:format("Expected~n ~p~n, but got~n ~p~n", [Expected, Got]),
fail(File).
fail(Source) ->
- io:format("failed~n"),
- ?t:fail({failed,testcase,on,Source}).
+ ct:fail({failed,testcase,on,Source}).
%% Copied from global_SUITE.erl.
@@ -8197,8 +8064,8 @@ read_error_logger() ->
{error, Pid, Tuple} ->
{error, Pid, Tuple}
after 1000 ->
- ?line io:format("No reply after 1 s\n", []),
- ?line ?t:fail()
+ io:format("No reply after 1 s\n", []),
+ ct:fail(failed)
end.
%%-----------------------------------------------------------------
diff --git a/lib/stdlib/test/qlc_SUITE_data/join_info_compat.erl b/lib/stdlib/test/qlc_SUITE_data/join_info_compat.erl
index d0cbc65d26..369101ab6c 100644
--- a/lib/stdlib/test/qlc_SUITE_data/join_info_compat.erl
+++ b/lib/stdlib/test/qlc_SUITE_data/join_info_compat.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/queue_SUITE.erl b/lib/stdlib/test/queue_SUITE.erl
index c965a8b218..569953dd9f 100644
--- a/lib/stdlib/test/queue_SUITE.erl
+++ b/lib/stdlib/test/queue_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,26 +19,23 @@
%%
-module(queue_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
init_per_group/2,end_per_group/2]).
-export([do/1, to_list/1, io_test/1, op_test/1, error/1, oops/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
--include_lib("test_server/include/test_server.hrl").
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
+-include_lib("common_test/include/ct.hrl").
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[do, to_list, io_test, op_test, error, oops].
@@ -59,47 +56,40 @@ end_per_group(_GroupName, Config) ->
Config.
-do(doc) ->
- [""];
-do(suite) ->
- [];
do(Config) when is_list(Config) ->
- ?line L = [{in, 1},
- {in, 2},
- {out, {value, 1}},
- {in, 3},
- {out, {value, 2}},
- {out, {value, 3}},
- {out, empty}
- ],
-
- ?line E = queue:new(),
- ?line [] = queue:to_list(E),
- ?line Q = do_queue(E, L),
- ?line true = queue:is_empty(Q),
- ?line 0 = queue:len(Q),
+ L = [{in, 1},
+ {in, 2},
+ {out, {value, 1}},
+ {in, 3},
+ {out, {value, 2}},
+ {out, {value, 3}},
+ {out, empty}
+ ],
+
+ E = queue:new(),
+ [] = queue:to_list(E),
+ Q = do_queue(E, L),
+ true = queue:is_empty(Q),
+ 0 = queue:len(Q),
ok.
-to_list(doc) ->
- ["OTP-2701"];
-to_list(suite) ->
- [];
+%% OTP-2701
to_list(Config) when is_list(Config) ->
- ?line E = queue:new(),
- ?line Q = do_queue(E, [{in, 1},
- {in, 2},
- {in, 3},
- {out, {value, 1}},
- {in, 4},
- {in, 5}]),
- ?line true = queue:is_queue(Q),
- ?line 4 = queue:len(Q),
- ?line case queue:to_list(Q) of
- [2,3,4,5] ->
- ok;
- Other1 ->
- test_server:fail(Other1)
- end,
+ E = queue:new(),
+ Q = do_queue(E, [{in, 1},
+ {in, 2},
+ {in, 3},
+ {out, {value, 1}},
+ {in, 4},
+ {in, 5}]),
+ true = queue:is_queue(Q),
+ 4 = queue:len(Q),
+ case queue:to_list(Q) of
+ [2,3,4,5] ->
+ ok;
+ Other1 ->
+ ct:fail(Other1)
+ end,
ok.
do_queue(Q, []) ->
@@ -114,93 +104,86 @@ do_queue_1({out, E}, Q) ->
{E, Q1} ->
Q1;
Other ->
- test_server:fail({"out failed", E, Q, Other})
+ ct:fail({"out failed", E, Q, Other})
end.
-io_test(doc) ->
- "Test input and output";
-io_test(suite) ->
- [];
+%% Test input and output.
io_test(Config) when is_list(Config) ->
E = queue:new(),
do_io_test(E),
ok.
do_io_test(E) ->
- ?line [4,3,5] =
+ [4,3,5] =
io([snoc,snoc,head,head,head,cons,cons,snoc], E, 1),
- ?line [5,3,4] =
+ [5,3,4] =
io([cons,cons,daeh,daeh,daeh,snoc,snoc,cons], E, 1),
- ?line [4,3,5] =
+ [4,3,5] =
io([in,in,out,out,out,in_r,in_r,in], E, 1),
- ?line [5,3,4] =
+ [5,3,4] =
io([in_r,in_r,out_r,out_r,out_r,in,in,in_r], E, 1),
%%
- ?line [] =
+ [] =
io([snoc,snoc,head,snoc,snoc,head,head,snoc,head,head], E, 1),
- ?line [] =
+ [] =
io([cons,cons,daeh,cons,cons,daeh,daeh,cons,daeh,daeh], E, 1),
- ?line [] =
+ [] =
io([in,in,out,in,in,out,out,in,out,out], E, 1),
- ?line [] =
+ [] =
io([in_r,in_r,out_r,in_r,in_r,out_r,out_r,in_r,out_r,out_r],
E, 1),
%%
- ?line [5,6] =
+ [5,6] =
io([snoc,snoc,snoc,head,head,snoc,snoc,snoc,head,head], E, 1),
- ?line [6,5] =
+ [6,5] =
io([cons,cons,cons,daeh,daeh,cons,cons,cons,daeh,daeh], E, 1),
- ?line [5,6] =
+ [5,6] =
io([in,in,in,out,out,in,in,in,out,out], E, 1),
- ?line [6,5] =
+ [6,5] =
io([in_r,in_r,in_r,out_r,out_r,in_r,in_r,in_r,out_r,out_r],
E, 1),
%%
- ?line [5] =
+ [5] =
io([snoc,head,head,snoc,head,snoc,head,snoc,head,snoc], E, 1),
- ?line [5] =
+ [5] =
io([cons,daeh,daeh,cons,daeh,cons,daeh,cons,daeh,cons], E, 1),
- ?line [5] =
+ [5] =
io([in,out,out,in,out,in,out,in,out,in], E, 1),
- ?line [5] =
+ [5] =
io([in_r,out_r,out_r,in_r,out_r,in_r,out_r,in_r,out_r,in_r],
E, 1),
%%
- ?line [] =
+ [] =
io([snoc,head,snoc,snoc,head,head,snoc,snoc,snoc,head,head,head],
E, 1),
- ?line [] =
+ [] =
io([cons,daeh,cons,cons,daeh,daeh,cons,cons,cons,daeh,daeh,daeh],
- E, 1),
- ?line [] =
+ E, 1),
+ [] =
io([in,out,in,in,out,out,in,in,in,out,out,out],
E, 1),
- ?line [] =
+ [] =
io([in_r,out_r,in_r,in_r,out_r,out_r,in_r,in_r,in_r,out_r,out_r,out_r],
- E, 1),
+ E, 1),
%%
- ?line [3] = io([cons,cons,cons,snoc,daeh,daeh,daeh], E, 1),
- ?line [3] = io([snoc,snoc,snoc,cons,head,head,head], E, 1),
- ?line [3] = io([in,in,in,in_r,out,out,out], E, 1),
- ?line [3] = io([in_r,in_r,in_r,in,out_r,out_r,out_r], E, 1),
+ [3] = io([cons,cons,cons,snoc,daeh,daeh,daeh], E, 1),
+ [3] = io([snoc,snoc,snoc,cons,head,head,head], E, 1),
+ [3] = io([in,in,in,in_r,out,out,out], E, 1),
+ [3] = io([in_r,in_r,in_r,in,out_r,out_r,out_r], E, 1),
%%
- ?line Q2 = queue:join(queue:cons(1, E),queue:cons(2, E)),
- ?line Q1 = queue:reverse(Q2),
- ?line [1] = io([head], Q1, 3),
- ?line [1] = io([out], Q1, 3),
- ?line [1] = io([daeh], Q2, 3),
- ?line [1] = io([out_r], Q2, 3),
-% ?line [2] = io([cons,cons,snoc,daeh,daeh], [], 1),
-% ?line [2] = io([snoc,snoc,cons,head,head], [], 1),
-% ?line [2] = io([in,in,in_r,out,out], [], 1),
-% ?line [2] = io([in_r,in_r,in,out_r,out_r], [], 1),
+ Q2 = queue:join(queue:cons(1, E),queue:cons(2, E)),
+ Q1 = queue:reverse(Q2),
+ [1] = io([head], Q1, 3),
+ [1] = io([out], Q1, 3),
+ [1] = io([daeh], Q2, 3),
+ [1] = io([out_r], Q2, 3),
%%
- ?line [2] =
+ [2] =
io([in,peek,peek_r,drop,in_r,peek,peek_r,in,peek,peek_r,drop_r], E, 1),
%% Malformed queues UGLY-GUTS-ALL-OVER-THE-PLACE
- ?line [2,1] = io([peek], {[1,2],[]}, 1),
- ?line [1,2] = io([peek_r], {[],[1,2]}, 1),
+ [2,1] = io([peek], {[1,2],[]}, 1),
+ [1,2] = io([peek_r], {[],[1,2]}, 1),
%%
ok.
@@ -269,7 +252,7 @@ io([peek_r | Tail], Q, Q0, X) ->
io([drop | Tail], Q, [], X) ->
try queue:drop(Q) of
V ->
- test_server:fail({?MODULE,?LINE,V})
+ ct:fail({?MODULE,?LINE,V})
catch
error:empty ->
io(Tail, Q, [], X)
@@ -280,7 +263,7 @@ io([drop | Tail], Q, [_ | T], X) ->
io([drop_r | Tail], Q, [], X) ->
try queue:drop_r(Q) of
V ->
- test_server:fail({?MODULE,?LINE,V})
+ ct:fail({?MODULE,?LINE,V})
catch
error:empty ->
io(Tail, Q, [], X)
@@ -298,108 +281,102 @@ io([], Q, QQ, _X) ->
QQ.
-op_test(doc) ->
- "Test operations on whole queues";
-op_test(suite) ->
- [];
+%% Test operations on whole queues.
op_test(Config) when is_list(Config) ->
do_op_test(fun id/1),
ok.
do_op_test(F) ->
- ?line Len = 50,
- ?line Len2 = 2*Len,
- ?line L1 = lists:seq(1, Len),
- ?line L1r = lists:reverse(L1),
- ?line L2 = lists:seq(Len+1, Len2),
- ?line L2r = lists:reverse(L2),
- ?line L3 = L1++L2,
- ?line L3r = L2r++L1r,
- ?line Q0 = F(queue:new()),
- ?line [] = queue:to_list(Q0),
- ?line Q0 = F(queue:from_list([])),
- ?line Q1 = F(queue:from_list(L1)),
- ?line Q2 = F(queue:from_list(L2)),
- ?line Q3 = F(queue:from_list(L3)),
- ?line Len = queue:len(Q1),
- ?line Len = queue:len(Q2),
- ?line Len2 = queue:len(Q3),
- ?line L1 = queue:to_list(Q1),
- ?line L2 = queue:to_list(Q2),
- ?line L3 = queue:to_list(Q3),
- ?line Q3b = queue:join(Q0, queue:join(queue:join(Q1, Q2), Q0)),
- ?line L3 = queue:to_list(Q3b),
- ?line {Q0, Q3New1} = queue:split(0, Q3),
- ?line L3 = queue:to_list(Q3New1),
- ?line {Q3New2, Q0} = queue:split(Len2, Q3),
- ?line L3 = queue:to_list(Q3New2),
- ?line {Q1a, Q2a} = queue:split(Len, Q3),
- ?line L1 = queue:to_list(Q1a),
- ?line L2 = queue:to_list(Q2a),
- ?line {Q3c, Q3d} = queue:split(2, Q3),
- ?line L3 = queue:to_list(Q3c) ++ queue:to_list(Q3d),
- ?line {Q1b, Q2b} = queue:split(Len, Q3b),
- ?line L1 = queue:to_list(Q1b),
- ?line L2 = queue:to_list(Q2b),
- ?line Len = queue:len(Q1b),
- ?line Len = queue:len(Q2b),
- ?line Len2 = queue:len(Q3b),
- ?line Q1r = queue:reverse(Q1),
- ?line Q2r = queue:reverse(Q2),
- ?line Q1ar = queue:reverse(Q1a),
- ?line Q2ar = queue:reverse(Q2a),
- ?line Q1br = queue:reverse(Q1b),
- ?line Q2br = queue:reverse(Q2b),
- ?line Q3br = queue:reverse(Q3b),
- ?line L1r = queue:to_list(Q1r),
- ?line L1r = queue:to_list(Q1ar),
- ?line L1r = queue:to_list(Q1br),
- ?line L2r = queue:to_list(Q2r),
- ?line L2r = queue:to_list(Q2ar),
- ?line L2r = queue:to_list(Q2br),
- ?line L3r = queue:to_list(Q3br),
- ?line Len = queue:len(Q1br),
- ?line Len = queue:len(Q2br),
- ?line Len2 = queue:len(Q3br),
- ?line false = queue:member([], Q0),
- ?line false = queue:member(0, Q0),
- ?line false = queue:member(0, Q1),
- ?line false = queue:member([], Q1),
- ?line true = queue:member(1, Q1),
- ?line false = queue:member(1.0, Q1),
- ?line true = queue:member(Len, Q1),
+ Len = 50,
+ Len2 = 2*Len,
+ L1 = lists:seq(1, Len),
+ L1r = lists:reverse(L1),
+ L2 = lists:seq(Len+1, Len2),
+ L2r = lists:reverse(L2),
+ L3 = L1++L2,
+ L3r = L2r++L1r,
+ Q0 = F(queue:new()),
+ [] = queue:to_list(Q0),
+ Q0 = F(queue:from_list([])),
+ Q1 = F(queue:from_list(L1)),
+ Q2 = F(queue:from_list(L2)),
+ Q3 = F(queue:from_list(L3)),
+ Len = queue:len(Q1),
+ Len = queue:len(Q2),
+ Len2 = queue:len(Q3),
+ L1 = queue:to_list(Q1),
+ L2 = queue:to_list(Q2),
+ L3 = queue:to_list(Q3),
+ Q3b = queue:join(Q0, queue:join(queue:join(Q1, Q2), Q0)),
+ L3 = queue:to_list(Q3b),
+ {Q0, Q3New1} = queue:split(0, Q3),
+ L3 = queue:to_list(Q3New1),
+ {Q3New2, Q0} = queue:split(Len2, Q3),
+ L3 = queue:to_list(Q3New2),
+ {Q1a, Q2a} = queue:split(Len, Q3),
+ L1 = queue:to_list(Q1a),
+ L2 = queue:to_list(Q2a),
+ {Q3c, Q3d} = queue:split(2, Q3),
+ L3 = queue:to_list(Q3c) ++ queue:to_list(Q3d),
+ {Q1b, Q2b} = queue:split(Len, Q3b),
+ L1 = queue:to_list(Q1b),
+ L2 = queue:to_list(Q2b),
+ Len = queue:len(Q1b),
+ Len = queue:len(Q2b),
+ Len2 = queue:len(Q3b),
+ Q1r = queue:reverse(Q1),
+ Q2r = queue:reverse(Q2),
+ Q1ar = queue:reverse(Q1a),
+ Q2ar = queue:reverse(Q2a),
+ Q1br = queue:reverse(Q1b),
+ Q2br = queue:reverse(Q2b),
+ Q3br = queue:reverse(Q3b),
+ L1r = queue:to_list(Q1r),
+ L1r = queue:to_list(Q1ar),
+ L1r = queue:to_list(Q1br),
+ L2r = queue:to_list(Q2r),
+ L2r = queue:to_list(Q2ar),
+ L2r = queue:to_list(Q2br),
+ L3r = queue:to_list(Q3br),
+ Len = queue:len(Q1br),
+ Len = queue:len(Q2br),
+ Len2 = queue:len(Q3br),
+ false = queue:member([], Q0),
+ false = queue:member(0, Q0),
+ false = queue:member(0, Q1),
+ false = queue:member([], Q1),
+ true = queue:member(1, Q1),
+ false = queue:member(1.0, Q1),
+ true = queue:member(Len, Q1),
%%
%% Additional coverage.
- ?line {MyL1r,MyL2r} = lists:split(Len-2, L1r),
- ?line MyQ0r = queue:reverse(F(queue:from_list(L1))),
- ?line {MyQ1r,MyQ2r} = queue:split(Len-2, MyQ0r),
- ?line MyL1r = queue:to_list(MyQ1r),
- ?line MyL2r = queue:to_list(MyQ2r),
- ?line MyQ3r = queue:filter(
- fun (X) when X rem 4 >= 2 -> false;
- (X) when X rem 8 == 0 -> [float(X),{X}];
- (X) when X rem 2 >= 1 -> [{X}];
- (_) -> true
- end, MyQ1r),
- ?line MyL3r = lists:flatten(
- [if X rem 8 == 0 -> [float(X),{X}];
- X rem 2 >= 1 -> {X};
- true -> X
- end || X <- MyL1r,
- X rem 4 < 2]),
- ?line MyL3r = queue:to_list(MyQ3r),
- ?line MyQ4 = F(queue:from_list([11,22,33,44])),
- ?line [11,22] = queue:to_list(queue:filter(fun(X) when X < 27 -> true;
- (_) -> [] end, MyQ4)),
- ?line [33,44] = queue:to_list(queue:filter(fun(X) when X < 27 -> false;
- (X) -> [X] end, MyQ4)),
+ {MyL1r,MyL2r} = lists:split(Len-2, L1r),
+ MyQ0r = queue:reverse(F(queue:from_list(L1))),
+ {MyQ1r,MyQ2r} = queue:split(Len-2, MyQ0r),
+ MyL1r = queue:to_list(MyQ1r),
+ MyL2r = queue:to_list(MyQ2r),
+ MyQ3r = queue:filter(
+ fun (X) when X rem 4 >= 2 -> false;
+ (X) when X rem 8 == 0 -> [float(X),{X}];
+ (X) when X rem 2 >= 1 -> [{X}];
+ (_) -> true
+ end, MyQ1r),
+ MyL3r = lists:flatten(
+ [if X rem 8 == 0 -> [float(X),{X}];
+ X rem 2 >= 1 -> {X};
+ true -> X
+ end || X <- MyL1r,
+ X rem 4 < 2]),
+ MyL3r = queue:to_list(MyQ3r),
+ MyQ4 = F(queue:from_list([11,22,33,44])),
+ [11,22] = queue:to_list(queue:filter(fun(X) when X < 27 -> true;
+ (_) -> [] end, MyQ4)),
+ [33,44] = queue:to_list(queue:filter(fun(X) when X < 27 -> false;
+ (X) -> [X] end, MyQ4)),
%%
ok.
-error(doc) ->
- "Test queue errors";
-error(suite) ->
- [];
+%% Test queue errors.
error(Config) when is_list(Config) ->
do_error(fun id/1, illegal_queue),
do_error(fun id/1, {[],illegal_queue}),
@@ -417,65 +394,62 @@ trycatch(M, F, Args) ->
end.
do_error(F, IQ) ->
- ?line io:format("Illegal Queue: ~p~n", [IQ]),
+ io:format("Illegal Queue: ~p~n", [IQ]),
%%
- ?line {error,badarg} = trycatch(in, [1, IQ]),
- ?line {error,badarg} = trycatch(out, [IQ]),
- ?line {error,badarg} = trycatch(in_r ,[1, IQ]),
- ?line {error,badarg} = trycatch(out_r ,[IQ]),
- ?line {error,badarg} = trycatch(to_list ,[IQ]),
+ {error,badarg} = trycatch(in, [1, IQ]),
+ {error,badarg} = trycatch(out, [IQ]),
+ {error,badarg} = trycatch(in_r ,[1, IQ]),
+ {error,badarg} = trycatch(out_r ,[IQ]),
+ {error,badarg} = trycatch(to_list ,[IQ]),
%%
- ?line {error,badarg} = trycatch(from_list, [no_list]),
- ?line {error,badarg} = trycatch(is_empty, [IQ]),
- ?line {error,badarg} = trycatch(len, [IQ]),
+ {error,badarg} = trycatch(from_list, [no_list]),
+ {error,badarg} = trycatch(is_empty, [IQ]),
+ {error,badarg} = trycatch(len, [IQ]),
%%
- ?line {error,badarg} = trycatch(cons, [1, IQ]),
- ?line {error,badarg} = trycatch(head, [IQ]),
- ?line {error,badarg} = trycatch(tail, [IQ]),
+ {error,badarg} = trycatch(cons, [1, IQ]),
+ {error,badarg} = trycatch(head, [IQ]),
+ {error,badarg} = trycatch(tail, [IQ]),
%%
- ?line {error,badarg} = trycatch(snoc, [IQ, 1]),
- ?line {error,badarg} = trycatch(last, [IQ]),
- ?line {error,badarg} = trycatch(daeh, [IQ]),
- ?line {error,badarg} = trycatch(liat, [IQ]),
- ?line {error,badarg} = trycatch(lait, [IQ]),
- ?line {error,badarg} = trycatch(init, [IQ]),
+ {error,badarg} = trycatch(snoc, [IQ, 1]),
+ {error,badarg} = trycatch(last, [IQ]),
+ {error,badarg} = trycatch(daeh, [IQ]),
+ {error,badarg} = trycatch(liat, [IQ]),
+ {error,badarg} = trycatch(lait, [IQ]),
+ {error,badarg} = trycatch(init, [IQ]),
%%
- ?line {error,badarg} = trycatch(reverse, [IQ]),
- ?line {error,badarg} = trycatch(join, [F(queue:new()), IQ]),
- ?line {error,badarg} = trycatch(join, [IQ, F(queue:new())]),
- ?line {error,badarg} = trycatch(split, [17, IQ]),
- ?line {error,badarg} = trycatch(head, [IQ]),
+ {error,badarg} = trycatch(reverse, [IQ]),
+ {error,badarg} = trycatch(join, [F(queue:new()), IQ]),
+ {error,badarg} = trycatch(join, [IQ, F(queue:new())]),
+ {error,badarg} = trycatch(split, [17, IQ]),
+ {error,badarg} = trycatch(head, [IQ]),
%%
- ?line Q0 = F(queue:new()),
- ?line {error,badarg} = trycatch(split, [1, Q0]),
- ?line {error,badarg} = trycatch(split, [2, queue:snoc(Q0, 1)]),
+ Q0 = F(queue:new()),
+ {error,badarg} = trycatch(split, [1, Q0]),
+ {error,badarg} = trycatch(split, [2, queue:snoc(Q0, 1)]),
%%
- ?line {value,false} = trycatch(is_queue, [IQ]),
- ?line {error,badarg} = trycatch(get, [IQ]),
- ?line {error,badarg} = trycatch(peek, [IQ]),
- ?line {error,badarg} = trycatch(peek_r, [IQ]),
- ?line {error,badarg} = trycatch(filter, [fun id/1, IQ]),
- ?line {error,badarg} = trycatch(filter, [no_fun, Q0]),
+ {value,false} = trycatch(is_queue, [IQ]),
+ {error,badarg} = trycatch(get, [IQ]),
+ {error,badarg} = trycatch(peek, [IQ]),
+ {error,badarg} = trycatch(peek_r, [IQ]),
+ {error,badarg} = trycatch(filter, [fun id/1, IQ]),
+ {error,badarg} = trycatch(filter, [no_fun, Q0]),
%%
- ?line {error,badarg} = trycatch(member, [1, IQ]),
+ {error,badarg} = trycatch(member, [1, IQ]),
ok.
id(X) ->
X.
-oops(doc) ->
- "Test queue errors";
-oops(suite) ->
- [];
+%% Test queue errors.
oops(Config) when is_list(Config) ->
- ?line N = 3142,
- ?line Optab = optab(),
- ?line Seed0 = random:seed0(),
- ?line {Is,Seed} = random_list(N, tuple_size(Optab), Seed0, []),
- ?line io:format("~p ", [Is]),
- ?line QA = queue:new(),
- ?line QB = {[]},
- ?line emul([QA], [QB], Seed, [element(I, Optab) || I <- Is]).
+ N = 3142,
+ Optab = optab(),
+ Seed0 = rand:seed(exsplus, {1,2,4}),
+ {Is,Seed} = random_list(N, tuple_size(Optab), Seed0, []),
+ io:format("~p ", [Is]),
+ QA = queue:new(),
+ QB = {[]},
+ emul([QA], [QB], Seed, [element(I, Optab) || I <- Is]).
optab() ->
{{new,[], q, fun () -> {[]} end},
@@ -562,20 +536,20 @@ args([], _, Seed, R) ->
args([q|Ts], [Q|Qs]=Qss, Seed, R) ->
args(Ts, if Qs =:= [] -> Qss; true -> Qs end, Seed, [Q|R]);
args([l|Ts], Qs, Seed0, R) ->
- {N,Seed1} = random:uniform_s(17, Seed0),
+ {N,Seed1} = rand:uniform_s(17, Seed0),
{L,Seed} = random_list(N, 4711, Seed1, []),
args(Ts, Qs, Seed, [L|R]);
args([t|Ts], Qs, Seed0, R) ->
- {T,Seed} = random:uniform_s(4711, Seed0),
+ {T,Seed} = rand:uniform_s(4711, Seed0),
args(Ts, Qs, Seed, [T|R]);
args([n|Ts], Qs, Seed0, R) ->
- {N,Seed} = random:uniform_s(17, Seed0),
+ {N,Seed} = rand:uniform_s(17, Seed0),
args(Ts, Qs, Seed, [N|R]).
random_list(0, _, Seed, R) ->
{R,Seed};
random_list(N, M, Seed0, R) ->
- {X,Seed} = random:uniform_s(M, Seed0),
+ {X,Seed} = rand:uniform_s(M, Seed0),
random_list(N-1, M, Seed, [X|R]).
call(Func, As) ->
diff --git a/lib/stdlib/test/rand_SUITE.erl b/lib/stdlib/test/rand_SUITE.erl
index 03b5ce1a25..cb778c96d4 100644
--- a/lib/stdlib/test/rand_SUITE.erl
+++ b/lib/stdlib/test/rand_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -18,55 +18,35 @@
%% %CopyrightEnd%
-module(rand_SUITE).
--export([all/0, suite/0,groups/0,
- init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2
- ]).
+-export([all/0, suite/0,groups/0]).
-export([interval_int/1, interval_float/1, seed/1,
api_eq/1, reference/1,
basic_stats_uniform_1/1, basic_stats_uniform_2/1,
basic_stats_normal/1,
- plugin/1, measure/1
- ]).
+ plugin/1, measure/1]).
-export([test/0, gen/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(3)).
-define(LOOP, 1000000).
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,3}}].
all() ->
[seed, interval_int, interval_float,
api_eq,
reference,
{group, basic_stats},
- plugin, measure
- ].
+ plugin, measure].
groups() ->
[{basic_stats, [parallel],
[basic_stats_uniform_1, basic_stats_uniform_2, basic_stats_normal]}].
-init_per_suite(Config) -> Config.
-end_per_suite(_Config) -> ok.
-
-init_per_group(_GroupName, Config) -> Config.
-end_per_group(_GroupName, Config) -> Config.
-
%% A simple helper to test without test_server during dev
test() ->
Tests = all(),
@@ -85,16 +65,13 @@ algs() ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-seed(doc) ->
- ["Test that seed and seed_s and export_seed/0 is working."];
-seed(suite) ->
- [];
+%% Test that seed and seed_s and export_seed/0 is working.
seed(Config) when is_list(Config) ->
Algs = algs(),
Test = fun(Alg) ->
try seed_1(Alg)
catch _:Reason ->
- test_server:fail({Alg, Reason, erlang:get_stacktrace()})
+ ct:fail({Alg, Reason, erlang:get_stacktrace()})
end
end,
[Test(Alg) || Alg <- Algs],
@@ -139,10 +116,7 @@ seed_1(Alg) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-api_eq(doc) ->
- ["Check that both api's are consistent with each other."];
-api_eq(suite) ->
- [];
+%% Check that both APIs are consistent with each other.
api_eq(_Config) ->
Algs = algs(),
Small = fun(Alg) ->
@@ -188,10 +162,7 @@ api_eq_1(S00) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-interval_int(doc) ->
- ["Check that uniform/1 returns values within the proper interval."];
-interval_int(suite) ->
- [];
+%% Check that uniform/1 returns values within the proper interval.
interval_int(Config) when is_list(Config) ->
Algs = algs(),
Small = fun(Alg) ->
@@ -225,10 +196,7 @@ interval_int_1(N, Top, Max) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-interval_float(doc) ->
- ["Check that uniform/0 returns values within the proper interval."];
-interval_float(suite) ->
- [];
+%% Check that uniform/0 returns values within the proper interval.
interval_float(Config) when is_list(Config) ->
Algs = algs(),
Test = fun(Alg) ->
@@ -252,8 +220,7 @@ interval_float_1(N) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-reference(doc) -> ["Check if exs64 algorithm generates the proper sequence."];
-reference(suite) -> [];
+%% Check if exs64 algorithm generates the proper sequence.
reference(Config) when is_list(Config) ->
[reference_1(Alg) || Alg <- algs()],
ok.
@@ -267,7 +234,6 @@ reference_1(Alg) ->
io:format("Failed: ~p~n",[Alg]),
io:format("Length ~p ~p~n",[length(Refval), length(Testval)]),
io:format("Head ~p ~p~n",[hd(Refval), hd(Testval)]),
- %% test_server:fail({Alg, Refval -- Testval}),
ok
end.
@@ -301,16 +267,19 @@ gen(_, _, Acc) -> lists:reverse(Acc).
%% Check that the algorithms generate sound values.
basic_stats_uniform_1(Config) when is_list(Config) ->
+ ct:timetrap({minutes,6}), %% valgrind needs a lot of time
[basic_uniform_1(?LOOP, rand:seed_s(Alg), 0.0, array:new([{default, 0}]))
|| Alg <- algs()],
ok.
basic_stats_uniform_2(Config) when is_list(Config) ->
+ ct:timetrap({minutes,6}), %% valgrind needs a lot of time
[basic_uniform_2(?LOOP, rand:seed_s(Alg), 0, array:new([{default, 0}]))
|| Alg <- algs()],
ok.
basic_stats_normal(Config) when is_list(Config) ->
+ ct:timetrap({minutes,6}), %% valgrind needs a lot of time
io:format("Testing normal~n",[]),
[basic_normal_1(?LOOP, rand:seed_s(Alg), 0, 0) || Alg <- algs()],
ok.
@@ -330,9 +299,9 @@ basic_uniform_1(0, {#{type:=Alg}, _}, Sum, A) ->
%% Verify that the basic statistics are ok
%% be gentle we don't want to see to many failing tests
- abs(0.5 - AverN) < 0.005 orelse test_server:fail({average, Alg, AverN}),
- abs(?LOOP div 100 - Min) < 1000 orelse test_server:fail({min, Alg, Min}),
- abs(?LOOP div 100 - Max) < 1000 orelse test_server:fail({max, Alg, Max}),
+ abs(0.5 - AverN) < 0.005 orelse ct:fail({average, Alg, AverN}),
+ abs(?LOOP div 100 - Min) < 1000 orelse ct:fail({min, Alg, Min}),
+ abs(?LOOP div 100 - Max) < 1000 orelse ct:fail({max, Alg, Max}),
ok.
basic_uniform_2(N, S0, Sum, A0) when N > 0 ->
@@ -349,9 +318,9 @@ basic_uniform_2(0, {#{type:=Alg}, _}, Sum, A) ->
%% Verify that the basic statistics are ok
%% be gentle we don't want to see to many failing tests
- abs(50.5 - AverN) < 0.5 orelse test_server:fail({average, Alg, AverN}),
- abs(?LOOP div 100 - Min) < 1000 orelse test_server:fail({min, Alg, Min}),
- abs(?LOOP div 100 - Max) < 1000 orelse test_server:fail({max, Alg, Max}),
+ abs(50.5 - AverN) < 0.5 orelse ct:fail({average, Alg, AverN}),
+ abs(?LOOP div 100 - Min) < 1000 orelse ct:fail({min, Alg, Min}),
+ abs(?LOOP div 100 - Max) < 1000 orelse ct:fail({max, Alg, Max}),
ok.
basic_normal_1(N, S0, Sum, Sq) when N > 0 ->
@@ -363,14 +332,13 @@ basic_normal_1(0, {#{type:=Alg}, _}, Sum, SumSq) ->
io:format("~.10w: Average: ~7.4f StdDev ~6.4f~n", [Alg, Mean, StdDev]),
%% Verify that the basic statistics are ok
%% be gentle we don't want to see to many failing tests
- abs(Mean) < 0.005 orelse test_server:fail({average, Alg, Mean}),
- abs(StdDev - 1.0) < 0.005 orelse test_server:fail({stddev, Alg, StdDev}),
+ abs(Mean) < 0.005 orelse ct:fail({average, Alg, Mean}),
+ abs(StdDev - 1.0) < 0.005 orelse ct:fail({stddev, Alg, StdDev}),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-plugin(doc) -> ["Test that the user can write algorithms"];
-plugin(suite) -> [];
+%% Test that the user can write algorithms.
plugin(Config) when is_list(Config) ->
_ = lists:foldl(fun(_, S0) ->
{V1, S1} = rand:uniform_s(10000, S0),
@@ -394,7 +362,7 @@ crypto_seed() ->
crypto_next(<<Num:64, Bin/binary>>) ->
{Num, Bin};
crypto_next(_) ->
- crypto_next(crypto:rand_bytes((64 div 8)*100)).
+ crypto_next(crypto:strong_rand_bytes((64 div 8)*100)).
crypto_uniform({Api, Data0}) ->
{Int, Data} = crypto_next(Data0),
@@ -412,6 +380,7 @@ crypto_uniform_n(N, State0) ->
%% Not a test but measures the time characteristics of the different algorithms
measure(Suite) when is_atom(Suite) -> [];
measure(_Config) ->
+ ct:timetrap({minutes,6}), %% valgrind needs a lot of time
Algos = [crypto64|algs()],
io:format("RNG uniform integer performance~n",[]),
_ = measure_1(random, fun(State) -> {int, random:uniform_s(10000, State)} end),
diff --git a/lib/stdlib/test/random_SUITE.erl b/lib/stdlib/test/random_SUITE.erl
index 738f73ae15..e9aa00dac8 100644
--- a/lib/stdlib/test/random_SUITE.erl
+++ b/lib/stdlib/test/random_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,26 +19,23 @@
-module(random_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
init_per_group/2,end_per_group/2]).
-export([interval_1/1, seed0/1, seed/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
--include_lib("test_server/include/test_server.hrl").
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
+-include_lib("common_test/include/ct.hrl").
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[interval_1, seed0, seed].
@@ -59,59 +56,50 @@ end_per_group(_GroupName, Config) ->
Config.
-seed0(doc) ->
- ["Test that seed is set implicitly, and always the same."];
-seed0(suite) ->
- [];
+%% Test that seed is set implicitly, and always the same.
seed0(Config) when is_list(Config) ->
- ?line Self = self(),
- ?line _ = spawn(fun() -> Self ! random:uniform() end),
- ?line F1 = receive
- Fa -> Fa
- end,
- ?line _ = spawn(fun() -> random:seed(),
- Self ! random:uniform() end),
- ?line F2 = receive
- Fb -> Fb
- end,
- ?line F1 = F2,
+ Self = self(),
+ _ = spawn(fun() -> Self ! random:uniform() end),
+ F1 = receive
+ Fa -> Fa
+ end,
+ _ = spawn(fun() -> random:seed(),
+ Self ! random:uniform() end),
+ F2 = receive
+ Fb -> Fb
+ end,
+ F1 = F2,
ok.
-seed(doc) ->
- ["Test that seed/1 and seed/3 is equivalent."];
-seed(suite) ->
- [];
+%% Test that seed/1 and seed/3 are equivalent.
seed(Config) when is_list(Config) ->
- ?line Self = self(),
+ Self = self(),
Seed = {S1, S2, S3} = erlang:timestamp(),
- ?line _ = spawn(fun() ->
- random:seed(S1,S2,S3),
- Rands = lists:foldl(fun
- (_, Out) -> [random:uniform(10000)|Out]
- end, [], lists:seq(1,100)),
- Self ! {seed_test, Rands}
- end),
- ?line Rands1 = receive {seed_test, R1s} -> R1s end,
- ?line _ = spawn(fun() ->
- random:seed(Seed),
- Rands = lists:foldl(fun
- (_, Out) -> [random:uniform(10000)|Out]
- end, [], lists:seq(1,100)),
- Self ! {seed_test, Rands}
- end),
- ?line Rands2 = receive {seed_test, R2s} -> R2s end,
- ?line Rands1 = Rands2,
+ _ = spawn(fun() ->
+ random:seed(S1,S2,S3),
+ Rands = lists:foldl(fun
+ (_, Out) -> [random:uniform(10000)|Out]
+ end, [], lists:seq(1,100)),
+ Self ! {seed_test, Rands}
+ end),
+ Rands1 = receive {seed_test, R1s} -> R1s end,
+ _ = spawn(fun() ->
+ random:seed(Seed),
+ Rands = lists:foldl(fun
+ (_, Out) -> [random:uniform(10000)|Out]
+ end, [], lists:seq(1,100)),
+ Self ! {seed_test, Rands}
+ end),
+ Rands2 = receive {seed_test, R2s} -> R2s end,
+ Rands1 = Rands2,
ok.
-interval_1(doc) ->
- ["Check that uniform/1 returns values within the proper interval."];
-interval_1(suite) ->
- [];
+%% Check that uniform/1 returns values within the proper interval.
interval_1(Config) when is_list(Config) ->
- ?line Top = 7,
- ?line N = 10,
- ?line check_interval(N, Top),
+ Top = 7,
+ N = 10,
+ check_interval(N, Top),
ok.
check_interval(0, _) -> ok;
@@ -119,9 +107,9 @@ check_interval(N, Top) ->
X = random:uniform(Top),
if
X < 1 ->
- test_server:fail(too_small);
+ ct:fail(too_small);
X > Top ->
- test_server:fail(too_large);
+ ct:fail(too_large);
true ->
ok
end,
diff --git a/lib/stdlib/test/random_iolist.erl b/lib/stdlib/test/random_iolist.erl
index 9a0f034e72..555f063e0a 100644
--- a/lib/stdlib/test/random_iolist.erl
+++ b/lib/stdlib/test/random_iolist.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ run2(Iter,Fun1,Fun2) ->
compare2(Iter,Fun1,Fun2).
random_byte() ->
- random:uniform(256) - 1.
+ rand:uniform(256) - 1.
random_list(0,Acc) ->
Acc;
@@ -45,7 +45,7 @@ random_list(N,Acc) ->
random_binary(N) ->
B = list_to_binary(random_list(N,[])),
- case {random:uniform(2),size(B)} of
+ case {rand:uniform(2),size(B)} of
{2,M} when M > 1 ->
S = M-1,
<<_:3,C:S/binary,_:5>> = B,
@@ -57,7 +57,7 @@ random_list(N) ->
random_list(N,[]).
front() ->
- case random:uniform(10) of
+ case rand:uniform(10) of
10 ->
false;
_ ->
@@ -65,7 +65,7 @@ front() ->
end.
any_type() ->
- case random:uniform(10) of
+ case rand:uniform(10) of
1 ->
list;
2 ->
@@ -77,7 +77,7 @@ any_type() ->
end.
tail_type() ->
- case random:uniform(5) of
+ case rand:uniform(5) of
1 ->
list;
2 ->
@@ -90,9 +90,9 @@ random_length(N) ->
UpperLimit = 255,
case N of
M when M > UpperLimit ->
- random:uniform(UpperLimit+1) - 1;
+ rand:uniform(UpperLimit+1) - 1;
_ ->
- random:uniform(N+1) - 1
+ rand:uniform(N+1) - 1
end.
random_iolist(0,Acc) ->
@@ -139,7 +139,7 @@ random_iolist(N) ->
standard_seed() ->
- random:seed(1201,855653,380975).
+ rand:seed(exsplus, {1201,855653,380975}).
do_comp(List,F1,F2) ->
X = F1(List),
diff --git a/lib/stdlib/test/random_unicode_list.erl b/lib/stdlib/test/random_unicode_list.erl
index ecafe42318..8db2fa8b56 100644
--- a/lib/stdlib/test/random_unicode_list.erl
+++ b/lib/stdlib/test/random_unicode_list.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -85,7 +85,7 @@ int_to_utf32_little(I) ->
id(I) -> I.
random_char() ->
- case random:uniform(16#10FFFF+1) - 1 of
+ case rand:uniform(16#10FFFF+1) - 1 of
X when X >= 16#D800,
X =< 16#DFFF ->
random_char();
@@ -116,13 +116,13 @@ random_binary(N,Enc) ->
int_to(Enc,X)
end,
L)),
- case {random:uniform(3),size(B)} of
+ case {rand:uniform(3),size(B)} of
{2,M} when M > 1 ->
B2 = id(<<1:3,B/binary,1:5>>),
<<_:3,C:M/binary,_:5>> = B2,
C;
{3,M} when M > 1 ->
- X = random:uniform(M+1)-1,
+ X = rand:uniform(M+1)-1,
<<B1:X/binary,B2/binary>> = B,
[B1,B2];
_ ->
@@ -132,7 +132,7 @@ random_list(N) ->
random_list(N,[]).
front() ->
- case random:uniform(10) of
+ case rand:uniform(10) of
10 ->
false;
_ ->
@@ -140,7 +140,7 @@ front() ->
end.
any_type() ->
- case random:uniform(10) of
+ case rand:uniform(10) of
1 ->
list;
2 ->
@@ -152,7 +152,7 @@ any_type() ->
end.
tail_type() ->
- case random:uniform(5) of
+ case rand:uniform(5) of
1 ->
list;
2 ->
@@ -165,9 +165,9 @@ random_length(N) ->
UpperLimit = 255,
case N of
M when M > UpperLimit ->
- random:uniform(UpperLimit+1) - 1;
+ rand:uniform(UpperLimit+1) - 1;
_ ->
- random:uniform(N+1) - 1
+ rand:uniform(N+1) - 1
end.
random_unicode_list(0,Acc,_Enc) ->
@@ -214,7 +214,7 @@ random_unicode_list(N,Enc) ->
standard_seed() ->
- random:seed(1201,855653,380975).
+ rand:seed(exsplus, {1201,855653,380975}).
do_comp(List,F1,F2) ->
X = F1(List),
diff --git a/lib/stdlib/test/re_SUITE.erl b/lib/stdlib/test/re_SUITE.erl
index d78d6153da..52d3a9f797 100644
--- a/lib/stdlib/test/re_SUITE.erl
+++ b/lib/stdlib/test/re_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,10 +30,12 @@
opt_no_start_optimize/1,opt_never_utf/1,opt_ucp/1,
match_limit/1,sub_binaries/1,copt/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,3}}].
all() ->
[pcre, compile_options, run_options, combined_options,
@@ -61,264 +63,247 @@ end_per_group(_GroupName, Config) ->
Config.
-pcre(doc) ->
- ["Run all applicable tests from the PCRE testsuites."];
+%% Run all applicable tests from the PCRE testsuites.
pcre(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
- RootDir = ?config(data_dir, Config),
+ RootDir = proplists:get_value(data_dir, Config),
Res = run_pcre_tests:test(RootDir),
0 = lists:sum([ X || {X,_,_} <- Res ]),
- ?t:timetrap_cancel(Dog),
{comment,Res}.
-compile_options(doc) ->
- ["Test all documented compile options"];
+%% Test all documented compile options.
compile_options(Config) when is_list(Config) ->
- ?line ok = ctest("ABDabcdABCD","abcd",[],true,{match,[{3,4}]}),
- ?line ok = ctest("ABDabcdABCD","abcd",[anchored],true,nomatch),
- ?line ok = ctest("ABDabcdABCD",".*abcd",[anchored],true,{match,[{0,7}]}),
- ?line ok = ctest("ABCabcdABC","ABCD",[],true,nomatch),
- ?line ok = ctest("ABCabcdABC","ABCD",[caseless],true,{match,[{3,4}]}),
- ?line ok = ctest("abcdABC\n","ABC$",[],true,{match,[{4,3}]}),
- ?line ok = ctest("abcdABC\n","ABC$",[dollar_endonly],true,nomatch),
- ?line ok = ctest("abcdABC\n","ABC.",[],true,nomatch),
- ?line ok = ctest("abcdABC\n","ABC.",[dotall],true,{match,[{4,4}]}),
- ?line ok = ctest("abcdABCD","ABC .",[],true,nomatch),
- ?line ok = ctest("abcdABCD","ABC .",[extended],true,{match,[{4,4}]}),
- ?line ok = ctest("abcd\nABCD","ABC",[],true,{match,[{5,3}]}),
- ?line ok = ctest("abcd\nABCD","ABC",[firstline],true,nomatch),
- ?line ok = ctest("abcd\nABCD","^ABC",[],true,nomatch),
- ?line ok = ctest("abcd\nABCD","^ABC",[multiline],true,{match,[{5,3}]}),
- ?line ok = ctest("abcdABCD","(ABC)",[],true,{match,[{4,3},{4,3}]}),
- ?line ok = ctest("abcdABCD","(ABC)",[no_auto_capture],true,{match,[{4,3}]}),
- ?line ok = ctest(notused,"(?<FOO>ABC)|(?<FOO>DEF)",[],false,notused),
- ?line ok = ctest("abcdABCD","(?<FOO>ABC)|(?<FOO>DEF)",[dupnames],true,{match,[{4,3},{4,3}]}),
- ?line ok = ctest("abcdABCDabcABCD","abcd.*D",[],true,{match,[{0,15}]}),
- ?line ok = ctest("abcdABCDabcABCD","abcd.*D",[ungreedy],true,{match,[{0,8}]}),
- ?line ok = ctest("abcdABCabcABC\nD","abcd.*D",[],true,nomatch),
- ?line ok = ctest("abcdABCabcABC\nD","abcd.*D",[{newline,cr}],true,{match,[{0,15}]}),
- ?line ok = ctest("abcdABCabcABC\rD","abcd.*D",[],true,{match,[{0,15}]}),
- ?line ok = ctest("abcdABCabcABC\rD","abcd.*D",[{newline,lf}],true,{match,[{0,15}]}),
- ?line ok = ctest("abcdABCabcd\r\n","abcd$",[{newline,lf}],true,nomatch),
- ?line ok = ctest("abcdABCabcd\r\n","abcd$",[{newline,cr}],true,nomatch),
- ?line ok = ctest("abcdABCabcd\r\n","abcd$",[{newline,crlf}],true,{match,[{7,4}]}),
-
- ?line ok = ctest("abcdABCabcd\r","abcd$",[{newline,crlf}],true,nomatch),
- ?line ok = ctest("abcdABCabcd\n","abcd$",[{newline,crlf}],true,nomatch),
- ?line ok = ctest("abcdABCabcd\r\n","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
-
- ?line ok = ctest("abcdABCabcd\r","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
- ?line ok = ctest("abcdABCabcd\n","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
+ ok = ctest("ABDabcdABCD","abcd",[],true,{match,[{3,4}]}),
+ ok = ctest("ABDabcdABCD","abcd",[anchored],true,nomatch),
+ ok = ctest("ABDabcdABCD",".*abcd",[anchored],true,{match,[{0,7}]}),
+ ok = ctest("ABCabcdABC","ABCD",[],true,nomatch),
+ ok = ctest("ABCabcdABC","ABCD",[caseless],true,{match,[{3,4}]}),
+ ok = ctest("abcdABC\n","ABC$",[],true,{match,[{4,3}]}),
+ ok = ctest("abcdABC\n","ABC$",[dollar_endonly],true,nomatch),
+ ok = ctest("abcdABC\n","ABC.",[],true,nomatch),
+ ok = ctest("abcdABC\n","ABC.",[dotall],true,{match,[{4,4}]}),
+ ok = ctest("abcdABCD","ABC .",[],true,nomatch),
+ ok = ctest("abcdABCD","ABC .",[extended],true,{match,[{4,4}]}),
+ ok = ctest("abcd\nABCD","ABC",[],true,{match,[{5,3}]}),
+ ok = ctest("abcd\nABCD","ABC",[firstline],true,nomatch),
+ ok = ctest("abcd\nABCD","^ABC",[],true,nomatch),
+ ok = ctest("abcd\nABCD","^ABC",[multiline],true,{match,[{5,3}]}),
+ ok = ctest("abcdABCD","(ABC)",[],true,{match,[{4,3},{4,3}]}),
+ ok = ctest("abcdABCD","(ABC)",[no_auto_capture],true,{match,[{4,3}]}),
+ ok = ctest(notused,"(?<FOO>ABC)|(?<FOO>DEF)",[],false,notused),
+ ok = ctest("abcdABCD","(?<FOO>ABC)|(?<FOO>DEF)",[dupnames],true,{match,[{4,3},{4,3}]}),
+ ok = ctest("abcdABCDabcABCD","abcd.*D",[],true,{match,[{0,15}]}),
+ ok = ctest("abcdABCDabcABCD","abcd.*D",[ungreedy],true,{match,[{0,8}]}),
+ ok = ctest("abcdABCabcABC\nD","abcd.*D",[],true,nomatch),
+ ok = ctest("abcdABCabcABC\nD","abcd.*D",[{newline,cr}],true,{match,[{0,15}]}),
+ ok = ctest("abcdABCabcABC\rD","abcd.*D",[],true,{match,[{0,15}]}),
+ ok = ctest("abcdABCabcABC\rD","abcd.*D",[{newline,lf}],true,{match,[{0,15}]}),
+ ok = ctest("abcdABCabcd\r\n","abcd$",[{newline,lf}],true,nomatch),
+ ok = ctest("abcdABCabcd\r\n","abcd$",[{newline,cr}],true,nomatch),
+ ok = ctest("abcdABCabcd\r\n","abcd$",[{newline,crlf}],true,{match,[{7,4}]}),
+
+ ok = ctest("abcdABCabcd\r","abcd$",[{newline,crlf}],true,nomatch),
+ ok = ctest("abcdABCabcd\n","abcd$",[{newline,crlf}],true,nomatch),
+ ok = ctest("abcdABCabcd\r\n","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
+
+ ok = ctest("abcdABCabcd\r","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
+ ok = ctest("abcdABCabcd\n","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
ok.
-run_options(doc) ->
- ["Test all documented run specific options"];
+%% Test all documented run specific options.
run_options(Config) when is_list(Config) ->
- ?line rtest("ABCabcdABC","abc",[],[],true),
- ?line rtest("ABCabcdABC","abc",[anchored],[],false),
- % Anchored in run overrides unanchored in compilation
- ?line rtest("ABCabcdABC","abc",[],[anchored],false),
-
- ?line rtest("","a?b?",[],[],true),
- ?line rtest("","a?b?",[],[notempty],false),
-
- ?line rtest("abc","^a",[],[],true),
- ?line rtest("abc","^a",[],[notbol],false),
- ?line rtest("ab\nc","^a",[multiline],[],true),
- ?line rtest("ab\nc","^a",[multiline],[notbol],false),
- ?line rtest("ab\nc","^c",[multiline],[notbol],true),
-
- ?line rtest("abc","c$",[],[],true),
- ?line rtest("abc","c$",[],[noteol],false),
-
- ?line rtest("ab\nc","b$",[multiline],[],true),
- ?line rtest("ab\nc","c$",[multiline],[],true),
- ?line rtest("ab\nc","b$",[multiline],[noteol],true),
- ?line rtest("ab\nc","c$",[multiline],[noteol],false),
-
- ?line rtest("abc","ab",[],[{offset,0}],true),
- ?line rtest("abc","ab",[],[{offset,1}],false),
-
- ?line rtest("abcdABCabcABC\nD","abcd.*D",[],[],false),
- ?line rtest("abcdABCabcABC\nD","abcd.*D",[],[{newline,cr}],true),
- ?line rtest("abcdABCabcABC\rD","abcd.*D",[],[],true),
- ?line rtest("abcdABCabcABC\rD","abcd.*D",[{newline,cr}],[{newline,lf}],true),
- ?line rtest("abcdABCabcd\r\n","abcd$",[],[{newline,lf}],false),
- ?line rtest("abcdABCabcd\r\n","abcd$",[],[{newline,cr}],false),
- ?line rtest("abcdABCabcd\r\n","abcd$",[],[{newline,crlf}],true),
-
- ?line rtest("abcdABCabcd\r","abcd$",[],[{newline,crlf}],false),
- ?line rtest("abcdABCabcd\n","abcd$",[],[{newline,crlf}],false),
- ?line rtest("abcdABCabcd\r\n","abcd$",[],[{newline,anycrlf}],true),
-
- ?line rtest("abcdABCabcd\r","abcd$",[],[{newline,anycrlf}],true),
- ?line rtest("abcdABCabcd\n","abcd$",[],[{newline,anycrlf}],true),
-
- ?line {ok,MP} = re:compile(".*(abcd).*"),
- ?line {match,[{0,10},{3,4}]} = re:run("ABCabcdABC",MP,[]),
- ?line {match,[{0,10},{3,4}]} = re:run("ABCabcdABC",MP,[{capture,all}]),
- ?line {match,[{0,10},{3,4}]} = re:run("ABCabcdABC",MP,[{capture,all,index}]),
- ?line {match,["ABCabcdABC","abcd"]} = re:run("ABCabcdABC",MP,[{capture,all,list}]),
- ?line {match,[<<"ABCabcdABC">>,<<"abcd">>]} = re:run("ABCabcdABC",MP,[{capture,all,binary}]),
- ?line {match,[{0,10}]} = re:run("ABCabcdABC",MP,[{capture,first}]),
- ?line {match,[{0,10}]} = re:run("ABCabcdABC",MP,[{capture,first,index}]), ?line {match,["ABCabcdABC"]} = re:run("ABCabcdABC",MP,[{capture,first,list}]),
- ?line {match,[<<"ABCabcdABC">>]} = re:run("ABCabcdABC",MP,[{capture,first,binary}]),
-
- ?line {match,[{3,4}]} = re:run("ABCabcdABC",MP,[{capture,all_but_first}]),
- ?line {match,[{3,4}]} = re:run("ABCabcdABC",MP,[{capture,all_but_first,index}]),
- ?line {match,["abcd"]} = re:run("ABCabcdABC",MP,[{capture,all_but_first,list}]),
- ?line {match,[<<"abcd">>]} = re:run("ABCabcdABC",MP,[{capture,all_but_first,binary}]),
-
- ?line match = re:run("ABCabcdABC",MP,[{capture,none}]),
- ?line match = re:run("ABCabcdABC",MP,[{capture,none,index}]),
- ?line match = re:run("ABCabcdABC",MP,[{capture,none,list}]),
- ?line match = re:run("ABCabcdABC",MP,[{capture,none,binary}]),
-
- ?line {ok,MP2} = re:compile(".*(?<FOO>abcd).*"),
- ?line {match,[{3,4}]} = re:run("ABCabcdABC",MP2,[{capture,[1]}]),
- ?line {match,[{3,4}]} = re:run("ABCabcdABC",MP2,[{capture,['FOO']}]),
- ?line {match,[{3,4}]} = re:run("ABCabcdABC",MP2,[{capture,["FOO"]}]),
- ?line {match,["abcd"]} = re:run("ABCabcdABC",MP2,[{capture,["FOO"],list}]),
- ?line {match,[<<"abcd">>]} = re:run("ABCabcdABC",MP2,[{capture,["FOO"],binary}]),
-
- ?line {match,[{-1,0}]} = re:run("ABCabcdABC",MP2,[{capture,[200]}]),
- ?line {match,[{-1,0}]} = re:run("ABCabcdABC",MP2,[{capture,['BAR']}]),
- ?line {match,[""]} = re:run("ABCabcdABC",MP2,[{capture,[200],list}]),
- ?line {match,[""]} = re:run("ABCabcdABC",MP2,[{capture,['BAR'],list}]),
- ?line {match,[<<>>]} = re:run("ABCabcdABC",MP2,[{capture,[200],binary}]),
- ?line {match,[<<>>]} = re:run("ABCabcdABC",MP2,[{capture,['BAR'],binary}]),
-
- ?line {ok, MP3} = re:compile(".*((?<FOO>abdd)|a(..d)).*"),
- ?line {match,[{0,10},{3,4},{-1,0},{4,3}]} = re:run("ABCabcdABC",MP3,[]),
- ?line {match,[{0,10},{3,4},{-1,0},{4,3}]} = re:run("ABCabcdABC",MP3,[{capture,all,index}]),
- ?line {match,[<<"ABCabcdABC">>,<<"abcd">>,<<>>,<<"bcd">>]} = re:run("ABCabcdABC",MP3,[{capture,all,binary}]),
- ?line {match,["ABCabcdABC","abcd",[],"bcd"]} = re:run("ABCabcdABC",MP3,[{capture,all,list}]),
+ rtest("ABCabcdABC","abc",[],[],true),
+ rtest("ABCabcdABC","abc",[anchored],[],false),
+ %% Anchored in run overrides unanchored in compilation
+ rtest("ABCabcdABC","abc",[],[anchored],false),
+
+ rtest("","a?b?",[],[],true),
+ rtest("","a?b?",[],[notempty],false),
+
+ rtest("abc","^a",[],[],true),
+ rtest("abc","^a",[],[notbol],false),
+ rtest("ab\nc","^a",[multiline],[],true),
+ rtest("ab\nc","^a",[multiline],[notbol],false),
+ rtest("ab\nc","^c",[multiline],[notbol],true),
+
+ rtest("abc","c$",[],[],true),
+ rtest("abc","c$",[],[noteol],false),
+
+ rtest("ab\nc","b$",[multiline],[],true),
+ rtest("ab\nc","c$",[multiline],[],true),
+ rtest("ab\nc","b$",[multiline],[noteol],true),
+ rtest("ab\nc","c$",[multiline],[noteol],false),
+
+ rtest("abc","ab",[],[{offset,0}],true),
+ rtest("abc","ab",[],[{offset,1}],false),
+
+ rtest("abcdABCabcABC\nD","abcd.*D",[],[],false),
+ rtest("abcdABCabcABC\nD","abcd.*D",[],[{newline,cr}],true),
+ rtest("abcdABCabcABC\rD","abcd.*D",[],[],true),
+ rtest("abcdABCabcABC\rD","abcd.*D",[{newline,cr}],[{newline,lf}],true),
+ rtest("abcdABCabcd\r\n","abcd$",[],[{newline,lf}],false),
+ rtest("abcdABCabcd\r\n","abcd$",[],[{newline,cr}],false),
+ rtest("abcdABCabcd\r\n","abcd$",[],[{newline,crlf}],true),
+
+ rtest("abcdABCabcd\r","abcd$",[],[{newline,crlf}],false),
+ rtest("abcdABCabcd\n","abcd$",[],[{newline,crlf}],false),
+ rtest("abcdABCabcd\r\n","abcd$",[],[{newline,anycrlf}],true),
+
+ rtest("abcdABCabcd\r","abcd$",[],[{newline,anycrlf}],true),
+ rtest("abcdABCabcd\n","abcd$",[],[{newline,anycrlf}],true),
+
+ {ok,MP} = re:compile(".*(abcd).*"),
+ {match,[{0,10},{3,4}]} = re:run("ABCabcdABC",MP,[]),
+ {match,[{0,10},{3,4}]} = re:run("ABCabcdABC",MP,[{capture,all}]),
+ {match,[{0,10},{3,4}]} = re:run("ABCabcdABC",MP,[{capture,all,index}]),
+ {match,["ABCabcdABC","abcd"]} = re:run("ABCabcdABC",MP,[{capture,all,list}]),
+ {match,[<<"ABCabcdABC">>,<<"abcd">>]} = re:run("ABCabcdABC",MP,[{capture,all,binary}]),
+ {match,[{0,10}]} = re:run("ABCabcdABC",MP,[{capture,first}]),
+ {match,[{0,10}]} = re:run("ABCabcdABC",MP,[{capture,first,index}]), ?line {match,["ABCabcdABC"]} = re:run("ABCabcdABC",MP,[{capture,first,list}]),
+ {match,[<<"ABCabcdABC">>]} = re:run("ABCabcdABC",MP,[{capture,first,binary}]),
+
+ {match,[{3,4}]} = re:run("ABCabcdABC",MP,[{capture,all_but_first}]),
+ {match,[{3,4}]} = re:run("ABCabcdABC",MP,[{capture,all_but_first,index}]),
+ {match,["abcd"]} = re:run("ABCabcdABC",MP,[{capture,all_but_first,list}]),
+ {match,[<<"abcd">>]} = re:run("ABCabcdABC",MP,[{capture,all_but_first,binary}]),
+
+ match = re:run("ABCabcdABC",MP,[{capture,none}]),
+ match = re:run("ABCabcdABC",MP,[{capture,none,index}]),
+ match = re:run("ABCabcdABC",MP,[{capture,none,list}]),
+ match = re:run("ABCabcdABC",MP,[{capture,none,binary}]),
+
+ {ok,MP2} = re:compile(".*(?<FOO>abcd).*"),
+ {match,[{3,4}]} = re:run("ABCabcdABC",MP2,[{capture,[1]}]),
+ {match,[{3,4}]} = re:run("ABCabcdABC",MP2,[{capture,['FOO']}]),
+ {match,[{3,4}]} = re:run("ABCabcdABC",MP2,[{capture,["FOO"]}]),
+ {match,["abcd"]} = re:run("ABCabcdABC",MP2,[{capture,["FOO"],list}]),
+ {match,[<<"abcd">>]} = re:run("ABCabcdABC",MP2,[{capture,["FOO"],binary}]),
+
+ {match,[{-1,0}]} = re:run("ABCabcdABC",MP2,[{capture,[200]}]),
+ {match,[{-1,0}]} = re:run("ABCabcdABC",MP2,[{capture,['BAR']}]),
+ {match,[""]} = re:run("ABCabcdABC",MP2,[{capture,[200],list}]),
+ {match,[""]} = re:run("ABCabcdABC",MP2,[{capture,['BAR'],list}]),
+ {match,[<<>>]} = re:run("ABCabcdABC",MP2,[{capture,[200],binary}]),
+ {match,[<<>>]} = re:run("ABCabcdABC",MP2,[{capture,['BAR'],binary}]),
+
+ {ok, MP3} = re:compile(".*((?<FOO>abdd)|a(..d)).*"),
+ {match,[{0,10},{3,4},{-1,0},{4,3}]} = re:run("ABCabcdABC",MP3,[]),
+ {match,[{0,10},{3,4},{-1,0},{4,3}]} = re:run("ABCabcdABC",MP3,[{capture,all,index}]),
+ {match,[<<"ABCabcdABC">>,<<"abcd">>,<<>>,<<"bcd">>]} = re:run("ABCabcdABC",MP3,[{capture,all,binary}]),
+ {match,["ABCabcdABC","abcd",[],"bcd"]} = re:run("ABCabcdABC",MP3,[{capture,all,list}]),
ok.
-
-
-combined_options(doc) ->
- ["Test compile options given directly to run"];
+
+
+%% Test compile options given directly to run.
combined_options(Config) when is_list(Config) ->
- ?line ok = crtest("ABDabcdABCD","abcd",[],true,{match,[{3,4}]}),
- ?line ok = crtest("ABDabcdABCD","abcd",[anchored],true,nomatch),
- ?line ok = crtest("ABDabcdABCD",".*abcd",[anchored],true,{match,[{0,7}]}),
- ?line ok = crtest("ABCabcdABC","ABCD",[],true,nomatch),
- ?line ok = crtest("ABCabcdABC","ABCD",[caseless],true,{match,[{3,4}]}),
- ?line ok = crtest("abcdABC\n","ABC$",[],true,{match,[{4,3}]}),
- ?line ok = crtest("abcdABC\n","ABC$",[dollar_endonly],true,nomatch),
- ?line ok = crtest("abcdABC\n","ABC.",[],true,nomatch),
- ?line ok = crtest("abcdABC\n","ABC.",[dotall],true,{match,[{4,4}]}),
- ?line ok = crtest("abcdABCD","ABC .",[],true,nomatch),
- ?line ok = crtest("abcdABCD","ABC .",[extended],true,{match,[{4,4}]}),
- ?line ok = crtest("abcd\nABCD","ABC",[],true,{match,[{5,3}]}),
- ?line ok = crtest("abcd\nABCD","ABC",[firstline],true,nomatch),
- ?line ok = crtest("abcd\nABCD","^ABC",[],true,nomatch),
- ?line ok = crtest("abcd\nABCD","^ABC",[multiline],true,{match,[{5,3}]}),
- ?line ok = crtest("abcdABCD","(ABC)",[],true,{match,[{4,3},{4,3}]}),
- ?line ok = crtest("abcdABCD","(ABC)",[no_auto_capture],true,{match,[{4,3}]}),
- ?line ok = crtest(notused,"(?<FOO>ABC)|(?<FOO>DEF)",[],false,notused),
- ?line ok = crtest("abcdABCD","(?<FOO>ABC)|(?<FOO>DEF)",[dupnames],true,{match,[{4,3},{4,3}]}),
- ?line ok = crtest("abcdABCDabcABCD","abcd.*D",[],true,{match,[{0,15}]}),
- ?line ok = crtest("abcdABCDabcABCD","abcd.*D",[ungreedy],true,{match,[{0,8}]}),
- ?line ok = ctest("abcdABCabcABC\nD","abcd.*D",[],true,nomatch),
- ?line ok = crtest("abcdABCabcABC\nD","abcd.*D",[{newline,cr}],true,{match,[{0,15}]}),
- ?line ok = crtest("abcdABCabcABC\rD","abcd.*D",[],true,{match,[{0,15}]}),
- ?line ok = crtest("abcdABCabcABC\rD","abcd.*D",[{newline,lf}],true,{match,[{0,15}]}),
- ?line ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,lf}],true,nomatch),
- ?line ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,cr}],true,nomatch),
- ?line ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,crlf}],true,{match,[{7,4}]}),
-
- ?line ok = crtest("abcdABCabcd\r","abcd$",[{newline,crlf}],true,nomatch),
- ?line ok = crtest("abcdABCabcd\n","abcd$",[{newline,crlf}],true,nomatch),
- ?line ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
-
- ?line ok = crtest("abcdABCabcd\r","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
- ?line ok = crtest("abcdABCabcd\n","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
-
- ?line ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,anycrlf},{capture,all,list}],true,{match,["abcd"]}),
-
- ?line ok = crtest("abcdABCabcd\r","abcd$",[{newline,anycrlf},{capture,all,list}],true,{match,["abcd"]}),
-
- ?line ok = crtest("abcdABCabcd\n","abcd$",[{newline,anycrlf},{capture,all,list}],true,{match,["abcd"]}),
-
- ?line ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,anycrlf},{capture,all,binary}],true,{match,[<<"abcd">>]}),
-
- ?line ok = crtest("abcdABCabcd\r","abcd$",[{newline,anycrlf},{capture,all,binary}],true,{match,[<<"abcd">>]}),
- ?line ok = crtest("abcdABCabcd\n","abcd$",[{newline,anycrlf},{capture,all,binary}],true,{match,[<<"abcd">>]}),
-
- % Check that unique run-options fail in compile only case:
- ?line {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},{capture,all,binary}])),
- ?line {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},{offset,3}])),
- ?line {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},notempty])),
- ?line {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},notbol])),
- ?line {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},noteol])),
-
-
- ?line {match,_} = re:run("abcdABCabcd\r\n","abcd$",[{newline,crlf}]),
- ?line nomatch = re:run("abcdABCabcd\r\nefgh","abcd$",[{newline,crlf}]),
- ?line {match,_} = re:run("abcdABCabcd\r\nefgh","abcd$",[{newline,crlf},multiline]),
- ?line nomatch = re:run("abcdABCabcd\r\nefgh","efgh$",[{newline,crlf},multiline,noteol]),
- ?line {match,_} = re:run("abcdABCabcd\r\nefgh","abcd$",[{newline,crlf},multiline,noteol]),
- ?line {match,_} = re:run("abcdABCabcd\r\nefgh","^abcd",[{newline,crlf},multiline,noteol]),
- ?line nomatch = re:run("abcdABCabcd\r\nefgh","^abcd",[{newline,crlf},multiline,notbol]),
- ?line {match,_} = re:run("abcdABCabcd\r\nefgh","^efgh",[{newline,crlf},multiline,notbol]),
- ?line {match,_} = re:run("ABC\nD","[a-z]*",[{newline,crlf}]),
- ?line nomatch = re:run("ABC\nD","[a-z]*",[{newline,crlf},notempty]),
+ ok = crtest("ABDabcdABCD","abcd",[],true,{match,[{3,4}]}),
+ ok = crtest("ABDabcdABCD","abcd",[anchored],true,nomatch),
+ ok = crtest("ABDabcdABCD",".*abcd",[anchored],true,{match,[{0,7}]}),
+ ok = crtest("ABCabcdABC","ABCD",[],true,nomatch),
+ ok = crtest("ABCabcdABC","ABCD",[caseless],true,{match,[{3,4}]}),
+ ok = crtest("abcdABC\n","ABC$",[],true,{match,[{4,3}]}),
+ ok = crtest("abcdABC\n","ABC$",[dollar_endonly],true,nomatch),
+ ok = crtest("abcdABC\n","ABC.",[],true,nomatch),
+ ok = crtest("abcdABC\n","ABC.",[dotall],true,{match,[{4,4}]}),
+ ok = crtest("abcdABCD","ABC .",[],true,nomatch),
+ ok = crtest("abcdABCD","ABC .",[extended],true,{match,[{4,4}]}),
+ ok = crtest("abcd\nABCD","ABC",[],true,{match,[{5,3}]}),
+ ok = crtest("abcd\nABCD","ABC",[firstline],true,nomatch),
+ ok = crtest("abcd\nABCD","^ABC",[],true,nomatch),
+ ok = crtest("abcd\nABCD","^ABC",[multiline],true,{match,[{5,3}]}),
+ ok = crtest("abcdABCD","(ABC)",[],true,{match,[{4,3},{4,3}]}),
+ ok = crtest("abcdABCD","(ABC)",[no_auto_capture],true,{match,[{4,3}]}),
+ ok = crtest(notused,"(?<FOO>ABC)|(?<FOO>DEF)",[],false,notused),
+ ok = crtest("abcdABCD","(?<FOO>ABC)|(?<FOO>DEF)",[dupnames],true,{match,[{4,3},{4,3}]}),
+ ok = crtest("abcdABCDabcABCD","abcd.*D",[],true,{match,[{0,15}]}),
+ ok = crtest("abcdABCDabcABCD","abcd.*D",[ungreedy],true,{match,[{0,8}]}),
+ ok = ctest("abcdABCabcABC\nD","abcd.*D",[],true,nomatch),
+ ok = crtest("abcdABCabcABC\nD","abcd.*D",[{newline,cr}],true,{match,[{0,15}]}),
+ ok = crtest("abcdABCabcABC\rD","abcd.*D",[],true,{match,[{0,15}]}),
+ ok = crtest("abcdABCabcABC\rD","abcd.*D",[{newline,lf}],true,{match,[{0,15}]}),
+ ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,lf}],true,nomatch),
+ ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,cr}],true,nomatch),
+ ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,crlf}],true,{match,[{7,4}]}),
+
+ ok = crtest("abcdABCabcd\r","abcd$",[{newline,crlf}],true,nomatch),
+ ok = crtest("abcdABCabcd\n","abcd$",[{newline,crlf}],true,nomatch),
+ ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
+
+ ok = crtest("abcdABCabcd\r","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
+ ok = crtest("abcdABCabcd\n","abcd$",[{newline,anycrlf}],true,{match,[{7,4}]}),
+
+ ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,anycrlf},{capture,all,list}],true,{match,["abcd"]}),
+
+ ok = crtest("abcdABCabcd\r","abcd$",[{newline,anycrlf},{capture,all,list}],true,{match,["abcd"]}),
+
+ ok = crtest("abcdABCabcd\n","abcd$",[{newline,anycrlf},{capture,all,list}],true,{match,["abcd"]}),
+
+ ok = crtest("abcdABCabcd\r\n","abcd$",[{newline,anycrlf},{capture,all,binary}],true,{match,[<<"abcd">>]}),
+
+ ok = crtest("abcdABCabcd\r","abcd$",[{newline,anycrlf},{capture,all,binary}],true,{match,[<<"abcd">>]}),
+ ok = crtest("abcdABCabcd\n","abcd$",[{newline,anycrlf},{capture,all,binary}],true,{match,[<<"abcd">>]}),
+
+ %% Check that unique run-options fail in compile only case:
+ {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},{capture,all,binary}])),
+ {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},{offset,3}])),
+ {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},notempty])),
+ {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},notbol])),
+ {'EXIT',{badarg,_}} = (catch re:compile("abcd$",[{newline,anycrlf},noteol])),
+
+
+ {match,_} = re:run("abcdABCabcd\r\n","abcd$",[{newline,crlf}]),
+ nomatch = re:run("abcdABCabcd\r\nefgh","abcd$",[{newline,crlf}]),
+ {match,_} = re:run("abcdABCabcd\r\nefgh","abcd$",[{newline,crlf},multiline]),
+ nomatch = re:run("abcdABCabcd\r\nefgh","efgh$",[{newline,crlf},multiline,noteol]),
+ {match,_} = re:run("abcdABCabcd\r\nefgh","abcd$",[{newline,crlf},multiline,noteol]),
+ {match,_} = re:run("abcdABCabcd\r\nefgh","^abcd",[{newline,crlf},multiline,noteol]),
+ nomatch = re:run("abcdABCabcd\r\nefgh","^abcd",[{newline,crlf},multiline,notbol]),
+ {match,_} = re:run("abcdABCabcd\r\nefgh","^efgh",[{newline,crlf},multiline,notbol]),
+ {match,_} = re:run("ABC\nD","[a-z]*",[{newline,crlf}]),
+ nomatch = re:run("ABC\nD","[a-z]*",[{newline,crlf},notempty]),
ok.
-replace_autogen(doc) ->
- ["Test replace with autogenerated erlang module"];
+%% Test replace with autogenerated erlang module.
replace_autogen(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
re_testoutput1_replacement_test:run(),
- ?t:timetrap_cancel(Dog),
ok.
-global_capture(doc) ->
- ["Tests capture options together with global searching"];
+%% Test capture options together with global searching.
global_capture(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
- ?line {match,[{3,4}]} = re:run("ABCabcdABC",".*(?<FOO>abcd).*",[{capture,[1]}]),
- ?line {match,[{10,4}]} = re:run("ABCabcdABCabcdA",".*(?<FOO>abcd).*",[{capture,[1]}]),
- ?line {match,[[{10,4}]]} = re:run("ABCabcdABCabcdA",".*(?<FOO>abcd).*",[global,{capture,[1]}]),
- ?line {match,[{3,4}]} = re:run("ABCabcdABC",".*(?<FOO>abcd).*",[{capture,['FOO']}]),
- ?line {match,[{10,4}]} = re:run("ABCabcdABCabcdA",".*(?<FOO>abcd).*",[{capture,['FOO']}]),
- ?line {match,[[{10,4}]]} = re:run("ABCabcdABCabcdA",".*(?<FOO>abcd).*",[global,{capture,['FOO']}]),
- ?line {match,[[{3,4},{3,4}],[{10,4},{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global]),
- ?line {match,[[{3,4},{3,4}],[{10,4},{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global,{capture,all}]),
- ?line {match,[[{3,4},{3,4}],[{10,4},{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global,{capture,all,index}]),
- ?line {match,[[{3,4}],[{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global,{capture,first}]),
- ?line {match,[[{3,4}],[{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global,{capture,all_but_first}]),
- ?line {match,[[<<"bcd">>],[<<"bcd">>]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all_but_first,binary}]),
- ?line {match,[["bcd"],["bcd"]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all_but_first,list}]),
- ?line {match,[["abcd","bcd"],["abcd","bcd"]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all,list}]),
- ?line {match,[[<<"abcd">>,<<"bcd">>],[<<"abcd">>,<<"bcd">>]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all,binary}]),
- ?line {match,[[{3,4},{4,3}],[{10,4},{11,3}]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all,index}]),
- ?line match = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,none,index}]),
- ?line match = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,none,binary}]),
- ?line match = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,none,list}]),
- ?line {match,[[<<195,133,98,99,100>>,<<"bcd">>],[<<"abcd">>,<<"bcd">>]]} = re:run("ABCÅbcdABCabcdA",".(?<FOO>bcd)",[global,{capture,all,binary},unicode]),
- ?line {match,[["Åbcd","bcd"],["abcd","bcd"]]} = re:run(<<"ABC",8#303,8#205,"bcdABCabcdA">>,".(?<FOO>bcd)",[global,{capture,all,list},unicode]),
- ?line {match,[["Åbcd","bcd"],["abcd","bcd"]]} = re:run("ABCÅbcdABCabcdA",".(?<FOO>bcd)",[global,{capture,all,list},unicode]),
- ?line {match,[[{3,5},{5,3}],[{11,4},{12,3}]]} = re:run("ABCÅbcdABCabcdA",".(?<FOO>bcd)",[global,{capture,all,index},unicode]),
- ?t:timetrap_cancel(Dog),
+ {match,[{3,4}]} = re:run("ABCabcdABC",".*(?<FOO>abcd).*",[{capture,[1]}]),
+ {match,[{10,4}]} = re:run("ABCabcdABCabcdA",".*(?<FOO>abcd).*",[{capture,[1]}]),
+ {match,[[{10,4}]]} = re:run("ABCabcdABCabcdA",".*(?<FOO>abcd).*",[global,{capture,[1]}]),
+ {match,[{3,4}]} = re:run("ABCabcdABC",".*(?<FOO>abcd).*",[{capture,['FOO']}]),
+ {match,[{10,4}]} = re:run("ABCabcdABCabcdA",".*(?<FOO>abcd).*",[{capture,['FOO']}]),
+ {match,[[{10,4}]]} = re:run("ABCabcdABCabcdA",".*(?<FOO>abcd).*",[global,{capture,['FOO']}]),
+ {match,[[{3,4},{3,4}],[{10,4},{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global]),
+ {match,[[{3,4},{3,4}],[{10,4},{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global,{capture,all}]),
+ {match,[[{3,4},{3,4}],[{10,4},{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global,{capture,all,index}]),
+ {match,[[{3,4}],[{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global,{capture,first}]),
+ {match,[[{3,4}],[{10,4}]]} = re:run("ABCabcdABCabcdA","(?<FOO>abcd)",[global,{capture,all_but_first}]),
+ {match,[[<<"bcd">>],[<<"bcd">>]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all_but_first,binary}]),
+ {match,[["bcd"],["bcd"]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all_but_first,list}]),
+ {match,[["abcd","bcd"],["abcd","bcd"]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all,list}]),
+ {match,[[<<"abcd">>,<<"bcd">>],[<<"abcd">>,<<"bcd">>]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all,binary}]),
+ {match,[[{3,4},{4,3}],[{10,4},{11,3}]]} = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,all,index}]),
+ match = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,none,index}]),
+ match = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,none,binary}]),
+ match = re:run("ABCabcdABCabcdA","a(?<FOO>bcd)",[global,{capture,none,list}]),
+ {match,[[<<195,133,98,99,100>>,<<"bcd">>],[<<"abcd">>,<<"bcd">>]]} = re:run("ABCÅbcdABCabcdA",".(?<FOO>bcd)",[global,{capture,all,binary},unicode]),
+ {match,[["Åbcd","bcd"],["abcd","bcd"]]} = re:run(<<"ABC",8#303,8#205,"bcdABCabcdA">>,".(?<FOO>bcd)",[global,{capture,all,list},unicode]),
+ {match,[["Åbcd","bcd"],["abcd","bcd"]]} = re:run("ABCÅbcdABCabcdA",".(?<FOO>bcd)",[global,{capture,all,list},unicode]),
+ {match,[[{3,5},{5,3}],[{11,4},{12,3}]]} = re:run("ABCÅbcdABCabcdA",".(?<FOO>bcd)",[global,{capture,all,index},unicode]),
ok.
-replace_input_types(doc) ->
- ["Tests replace with different input types"];
+%% Test replace with different input types.
replace_input_types(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
- ?line <<"abcd">> = re:replace("abcd","Z","X",[{return,binary},unicode]),
- ?line <<"abcd">> = re:replace("abcd","\x{400}","X",[{return,binary},unicode]),
- ?line <<"a",208,128,"cd">> = re:replace(<<"abcd">>,"b","\x{400}",[{return,binary},unicode]),
- ?t:timetrap_cancel(Dog),
+ <<"abcd">> = re:replace("abcd","Z","X",[{return,binary},unicode]),
+ <<"abcd">> = re:replace("abcd","\x{400}","X",[{return,binary},unicode]),
+ <<"a",208,128,"cd">> = re:replace(<<"abcd">>,"b","\x{400}",[{return,binary},unicode]),
ok.
-replace_return(doc) ->
- ["Tests return options of replace together with global searching"];
+%% Test return options of replace together with global searching.
replace_return(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
{'EXIT',{badarg,_}} = (catch re:replace("na","(a","")),
ok = replacetest(<<"nisse">>,"i","a",[{return,binary}],<<"nasse">>),
ok = replacetest("ABC\305abcdABCabcdA","a(?<FOO>bcd)","X",[global,{return,binary}],<<"ABCÅXABCXA">>),
@@ -339,7 +324,6 @@ replace_return(Config) when is_list(Config) ->
ok = replacetest("a\x{400}bcd","d","X",[global,{return,binary},unicode],<<"a",208,128,"bcX">>),
ok = replacetest("a\x{400}bcd","Z","X",[global,{return,list},unicode],"a\x{400}bcd"),
ok = replacetest("a\x{400}bcd","Z","X",[global,{return,binary},unicode],<<"a",208,128,"bcd">>),
- ?t:timetrap_cancel(Dog),
ok.
rtest(Subj, RE, Copt, Ropt, true) ->
@@ -412,18 +396,13 @@ copt(ungreedy) -> true;
copt(unicode) -> true;
copt(_) -> false.
-split_autogen(doc) ->
- ["Test split with autogenerated erlang module"];
+%% Test split with autogenerated erlang module.
split_autogen(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
re_testoutput1_split_test:run(),
- ?t:timetrap_cancel(Dog),
ok.
-split_options(doc) ->
- ["Test special options to split."];
+%% Test special options to split.
split_options(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(1)),
ok = splittest("a b c ","( )",[group,trim],[[<<"a">>,<<" ">>],[<<"b">>,<<" ">>],[<<"c">>,<<" ">>]]),
ok = splittest("a b c ","( )",[group,{parts,0}],[[<<"a">>,<<" ">>],[<<"b">>,<<" ">>],[<<"c">>,<<" ">>]]),
ok = splittest("a b c ","( )",[{parts,infinity},group],[[<<"a">>,<<" ">>],[<<"b">>,<<" ">>],[<<"c">>,<<" ">>],[<<>>]]),
@@ -439,27 +418,23 @@ split_options(Config) when is_list(Config) ->
{'EXIT',{badarg,_}} = (catch re:split("a b c d","( +)",[{parts,banan}])),
{'EXIT',{badarg,_}} = (catch re:split("a b c d","( +)",[{capture,all}])),
{'EXIT',{badarg,_}} = (catch re:split("a b c d","( +)",[{capture,[],binary}])),
- % Parts 0 is equal to no parts specification (implicit strip)
+ %% Parts 0 is equal to no parts specification (implicit strip)
ok = splittest("a b c d","( *)",[{parts,0},{return,list}],["a"," ","b"," ","c"," ","d"]),
- ?t:timetrap_cancel(Dog),
ok.
-
+
join([]) -> [];
join([A]) -> [A];
join([H|T]) -> [H,<<":">>|join(T)].
-split_specials(doc) ->
- ["Some special cases of split that are easy to get wrong."];
+%% Some special cases of split that are easy to get wrong.
split_specials(Config) when is_list(Config) ->
%% More or less just to remember these icky cases
- Dog = ?t:timetrap(?t:minutes(1)),
- ?line <<"::abd:f">> =
+ <<"::abd:f">> =
iolist_to_binary(join(re:split("abdf","^(?!(ab)de|x)(abd)(f)",[trim]))),
- ?line <<":abc2xyzabc3">> =
+ <<":abc2xyzabc3">> =
iolist_to_binary(join(re:split("abc1abc2xyzabc3","\\Aabc.",[trim]))),
- ?t:timetrap_cancel(Dog),
ok.
-
+
%% Test that errors are handled correctly by the erlang code.
error_handling(_Config) ->
@@ -470,26 +445,26 @@ error_handling(_Config) ->
false ->
error_handling()
end.
-
+
error_handling() ->
- % This test checks the exception tuples manufactured in the erlang
- % code to hide the trapping from the user at least when it comes to errors
- Dog = ?t:timetrap(?t:minutes(1)),
- % The malformed precomiled RE is detected after
- % the trap to re:grun from grun, in the grun function clause
- % that handles precompiled expressions
+ %% This test checks the exception tuples manufactured in the erlang
+ %% code to hide the trapping from the user at least when it comes to errors
+
+ %% The malformed precomiled RE is detected after
+ %% the trap to re:grun from grun, in the grun function clause
+ %% that handles precompiled expressions
{'EXIT',{badarg,[{re,run,["apa",{1,2,3,4},[global]],_},
{?MODULE,error_handling,0,_} | _]}} =
(catch re:run("apa",{1,2,3,4},[global])),
- % An invalid capture list will also cause a badarg late,
- % but with a non pre compiled RE, the exception should be thrown by the
- % grun function clause that handles RE's compiled implicitly by
- % the run/3 BIF before trapping.
+ %% An invalid capture list will also cause a badarg late,
+ %% but with a non pre compiled RE, the exception should be thrown by the
+ %% grun function clause that handles RE's compiled implicitly by
+ %% the run/3 BIF before trapping.
{'EXIT',{badarg,[{re,run,["apa","p",[{capture,[1,{a}]},global]],_},
{?MODULE,error_handling,0,_} | _]}} =
(catch re:run("apa","p",[{capture,[1,{a}]},global])),
- % And so the case of a precompiled expression together with
- % a compile-option (binary and list subject):
+ %% And so the case of a precompiled expression together with
+ %% a compile-option (binary and list subject):
{ok,RE} = re:compile("(p)"),
{match,[[{1,1},{1,1}]]} = re:run(<<"apa">>,RE,[global]),
{match,[[{1,1},{1,1}]]} = re:run("apa",RE,[global]),
@@ -509,7 +484,7 @@ error_handling() ->
{error, {compile, {_,_}}} = re:run("apa","(p",[report_errors]),
{'EXIT',{badarg,_}} = (catch re:run("apa","(p",[global])),
{error, {compile, {_,_}}} = re:run("apa","(p",[report_errors,global]),
- % Badly formed options
+ %% Badly formed options
{'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,["global"])),
{'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{offset,-1}])),
{'EXIT',{badarg,_}} = (catch re:run(<<"apa">>,RE,[{offset,ett}])),
@@ -536,7 +511,7 @@ error_handling() ->
{'EXIT',{badarg,_}} = (catch re:run(<<"apa",2:2>>,<<"(p)">>,[{capture,[0,1],binary}])),
<<_:4,Temp:3/binary,_:4>> = <<38,23,6,18>>,
{match,[{1,1},{1,1}]} = re:run(Temp,<<"(p)">>,[]), % Unaligned works
- % The replace errors:
+ %% The replace errors:
{'EXIT',{badarg,[{re,replace,["apa",{1,2,3,4},"X",[]],_},
{?MODULE,error_handling,0,_} | _]}} =
(catch re:replace("apa",{1,2,3,4},"X",[])),
@@ -572,13 +547,13 @@ error_handling() ->
(catch iolist_to_binary(re:replace("apa","p","X",
[{return,banana}]))),
{'EXIT',{badarg,_}} = (catch re:replace("apa","(p","X",[])),
- % Badarg, not compile error.
+ %% Badarg, not compile error.
{'EXIT',{badarg,[{re,replace,
["apa","(p","X",[{return,banana}]],_},
{?MODULE,error_handling,0,_} | _]}} =
(catch iolist_to_binary(re:replace("apa","(p","X",
[{return,banana}]))),
- % And the split errors:
+ %% And the split errors:
[<<"a">>,<<"a">>] = (catch re:split("apa","p",[])),
[<<"a">>,<<"p">>,<<"a">>] = (catch re:split("apa",RE,[])),
{'EXIT',{badarg,[{re,split,["apa","p",[report_errors]],_},
@@ -618,34 +593,31 @@ error_handling() ->
{?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa",RE,[banana])),
{'EXIT',{badarg,_}} = (catch re:split("apa","(p")),
- %Exception on bad argument, not compilation error
+ %%Exception on bad argument, not compilation error
{'EXIT',{badarg,[{re,split,
["apa",
"(p",
[banana]],_},
{?MODULE,error_handling,0,_} | _]}} =
(catch re:split("apa","(p",[banana])),
- ?t:timetrap_cancel(Dog),
ok.
-
-pcre_cve_2008_2371(doc) ->
- "Fix as in http://vcs.pcre.org/viewvc?revision=360&view=revision";
+
+%% Fix as in http://vcs.pcre.org/viewvc?revision=360&view=revision
pcre_cve_2008_2371(Config) when is_list(Config) ->
%% Make sure it doesn't crash the emulator.
re:compile(<<"(?i)[\xc3\xa9\xc3\xbd]|[\xc3\xa9\xc3\xbdA]">>, [unicode]),
ok.
-pcre_compile_workspace_overflow(doc) ->
- "Patch from http://vcs.pcre.org/viewvc/code/trunk/pcre_compile.c?r1=504&r2=505&view=patch";
+%% Patch from
+%% http://vcs.pcre.org/viewvc/code/trunk/pcre_compile.c?r1=504&r2=505&view=patch
pcre_compile_workspace_overflow(Config) when is_list(Config) ->
N = 819,
- ?line {error,{"internal error: overran compiling workspace",799}} =
+ {error,{"internal error: overran compiling workspace",799}} =
re:compile([lists:duplicate(N, $(), lists:duplicate(N, $))]),
ok.
-re_infinite_loop(doc) ->
- "Make sure matches that really loop infinitely actually fail";
+
+%% Make sure matches that really loop infinitely actually fail.
re_infinite_loop(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(1)),
Str =
"http:/www.flickr.com/slideShow/index.gne?group_id=&user_id=69845378@N0",
EMail_regex = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+"
@@ -657,20 +629,17 @@ re_infinite_loop(Config) when is_list(Config) ->
nomatch = re:run(Str, EMail_regex, [global]),
{error,match_limit} = re:run(Str, EMail_regex,[report_errors]),
{error,match_limit} = re:run(Str, EMail_regex,[report_errors,global]),
- ?t:timetrap_cancel(Dog),
ok.
-re_backwards_accented(doc) ->
- "Check for nasty bug where accented graphemes can make PCRE back past "
- "beginning of subject";
+
+%% Check for nasty bug where accented graphemes can make PCRE back
+%% past beginning of subject.
re_backwards_accented(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(1)),
- ?line match = re:run(<<65,204,128,65,204,128,97,98,99>>,
- <<"\\X?abc">>,
- [unicode,{capture,none}]),
- ?t:timetrap_cancel(Dog),
+ match = re:run(<<65,204,128,65,204,128,97,98,99>>,
+ <<"\\X?abc">>,
+ [unicode,{capture,none}]),
ok.
-opt_dupnames(doc) ->
- "Check correct handling of dupnames option to re";
+
+%% Check correct handling of dupnames option to re.
opt_dupnames(Config) when is_list(Config) ->
Days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
_ = [ begin
@@ -704,9 +673,9 @@ opt_dupnames(Config) when is_list(Config) ->
"(?<DN>Sat)(?:urday)?",
[dupnames, {capture, ['Skrap','DN','Skrap2'],index}]),
{match,[{-1,0},{0,3},{-1,0}]} = re:run("Wednesday","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
- "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
- "(?<DN>Sat)(?:urday)?",
- [dupnames, {capture, ['Skrap','DN','Skrap2'],index}]),
+ "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, ['Skrap','DN','Skrap2'],index}]),
nomatch = re:run("Wednsday","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
"(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
"(?<DN>Sat)(?:urday)?",
@@ -758,8 +727,7 @@ opt_dupnames(Config) when is_list(Config) ->
"h","a","n","T","e","then"],binary}]),
ok.
-opt_all_names(doc) ->
- "Test capturing of all_names";
+%% Test capturing of all_names.
opt_all_names(Config) when is_list(Config) ->
Days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
{match,[{1,3},{0,1},{7,1}]} = re:run("SMondayX","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
@@ -767,10 +735,10 @@ opt_all_names(Config) when is_list(Config) ->
"(?<DN>Sat)(?:urday)?",
[dupnames, {capture, all_names,index}]),
{match,[{0,3},{-1,0},{-1,0}]} = re:run("Wednesday","(?<Skrap>.)(?<DN>Mon|Fri|Sun)(?:day)?(?<Skrap2>.)|"
- "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
- "(?<DN>Sat)(?:urday)?",
- [dupnames, {capture, all_names,index}]),
-
+ "(?<DN>Tue)(?:sday)?|(?<DN>Wed)nesday|(?<DN>Thu)(?:rsday)?|"
+ "(?<DN>Sat)(?:urday)?",
+ [dupnames, {capture, all_names,index}]),
+
_ = [ begin
{match,[{0,3}]} =
re:run(Day,
@@ -809,7 +777,7 @@ opt_all_names(Config) when is_list(Config) ->
{match,[[<<>>,<<>>,<<"C">>],
[<<>>,<<>>,<<"C">>],
[<<>>,<<>>,<<"C">>]]} = re:run("CCC","(?<A>A)|(?<B>B)|(?<C>C)",
- [global,{capture, all_names, binary}]),
+ [global,{capture, all_names, binary}]),
{match,[[<<"C">>,<<>>],
[<<>>,<<"B">>],
[<<"C">>,<<>>]]} = re:run("CBC","(?<A>A)|(?<B>B)|(?<A>C)",
@@ -831,8 +799,7 @@ opt_all_names(Config) when is_list(Config) ->
[dupnames,{capture,all_names,binary}]),
ok.
-inspect(doc) ->
- "Test the minimal inspect function";
+%% Test the minimal inspect function.
inspect(Config) when is_list(Config)->
{ok,MP} = re:compile("(?<A>A)|(?<B>B)|(?<C>C)."),
{namelist,[<<"A">>,<<"B">>,<<"C">>]} = re:inspect(MP,namelist),
@@ -845,15 +812,13 @@ inspect(Config) when is_list(Config)->
{'EXIT',{badarg,_}} = (catch re:inspect({re_pattern,3,0,0,<<"kalle",2:2>>},namelist)),
ok.
-opt_no_start_optimize(doc) ->
- "Test that the no_start_optimize compilation flag works";
+%% Test that the no_start_optimize compilation flag works.
opt_no_start_optimize(Config) when is_list(Config) ->
{match, [{3,3}]} = re:run("DEFABC","(*COMMIT)ABC",[]), % Start optimization makes this result wrong!
nomatch = re:run("DEFABC","(*COMMIT)ABC",[no_start_optimize]), % This is the correct result...
ok.
-opt_never_utf(doc) ->
- "Check that the never_utf option works";
+%% Check that the never_utf option works.
opt_never_utf(Config) when is_list(Config) ->
{match,[{0,3}]} = re:run("ABC","ABC",[never_utf]),
{match,[{0,3}]} = re:run("ABC","(*UTF)ABC",[]),
@@ -867,29 +832,29 @@ opt_never_utf(Config) when is_list(Config) ->
{error,_} = (catch re:compile("(*UTF)ABC",[never_utf])),
{error,_} = (catch re:compile("(*UTF8)ABC",[never_utf])),
ok.
-opt_ucp(doc) ->
- "Check that the ucp option is passed to PCRE";
+
+%% Check that the ucp option is passed to PCRE.
opt_ucp(Config) when is_list(Config) ->
{match,[{0,1}]} = re:run([$a],"\\w",[unicode]),
{match,[{0,2}]} = re:run([229],"\\w",[unicode]), % Latin1 works without UCP, as we have a default
- % Latin1 table
+ %% Latin1 table
nomatch = re:run([1024],"\\w",[unicode]), % Latin1 word characters only, 1024 is not latin1
{match,[{0,2}]} = re:run([1024],"\\w",[unicode,ucp]), % Any Unicode word character works with 'ucp'
ok.
-match_limit(doc) ->
- "Check that the match_limit and match_limit_recursion options work";
+
+%% Check that the match_limit and match_limit_recursion options work.
match_limit(Config) when is_list(Config) ->
nomatch = re:run("aaaaaaaaaaaaaz","(a+)*zz",[]),
nomatch = re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit,3000}]),
nomatch = re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit_recursion,10}]),
nomatch = re:run("aaaaaaaaaaaaaz","(a+)*zz",[report_errors]),
{error,match_limit} = re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit,3000},
- report_errors]),
+ report_errors]),
{error,match_limit_recursion} =
re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit_recursion,10},
report_errors]),
{error,match_limit} = re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit,3000},
- report_errors,global]),
+ report_errors,global]),
{error,match_limit_recursion} =
re:run("aaaaaaaaaaaaaz","(a+)*zz",[{match_limit_recursion,10},
report_errors,global]),
@@ -902,9 +867,9 @@ match_limit(Config) when is_list(Config) ->
"aaaaaaaaaaaaaz" = re:replace("aaaaaaaaaaaaaz","(a+)*zz","!",
[{match_limit,3000},{return,list}]),
{'EXIT', {badarg,_}} = (catch re:replace("aaaaaaaaaaaaaz","(a+)*zz","!",
- [{match_limit_recursion,-1},{return,list}])),
+ [{match_limit_recursion,-1},{return,list}])),
{'EXIT', {badarg,_}} = (catch re:replace("aaaaaaaaaaaaaz","(a+)*zz","!",
- [{match_limit,-1},{return,list}])),
+ [{match_limit,-1},{return,list}])),
{'EXIT', {badarg,_}} = (catch re:run("aaaaaaaaaaaaaz","(a+)*zz",
[{match_limit_recursion,-1},
report_errors,global])),
@@ -912,9 +877,8 @@ match_limit(Config) when is_list(Config) ->
[{match_limit,-1},
report_errors,global])),
ok.
-sub_binaries(doc) ->
- "test that we get sub-binaries if subject is a binary and we "
- "capture binaries";
+%% Test that we get sub-binaries if subject is a binary and we capture
+%% binaries.
sub_binaries(Config) when is_list(Config) ->
Bin = list_to_binary(lists:seq(1,255)),
{match,[B,C]}=re:run(Bin,"(a)",[{capture,all,binary}]),
diff --git a/lib/stdlib/test/re_testoutput1_replacement_test.erl b/lib/stdlib/test/re_testoutput1_replacement_test.erl
index 9081a18cd2..a40800d760 100644
--- a/lib/stdlib/test/re_testoutput1_replacement_test.erl
+++ b/lib/stdlib/test/re_testoutput1_replacement_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/re_testoutput1_split_test.erl b/lib/stdlib/test/re_testoutput1_split_test.erl
index 71728607bc..02987971fa 100644
--- a/lib/stdlib/test/re_testoutput1_split_test.erl
+++ b/lib/stdlib/test/re_testoutput1_split_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/run_pcre_tests.erl b/lib/stdlib/test/run_pcre_tests.erl
index 1fdc777470..ae56db59d6 100644
--- a/lib/stdlib/test/run_pcre_tests.erl
+++ b/lib/stdlib/test/run_pcre_tests.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -69,8 +69,6 @@ pick_exec_options([]) ->
test([],_,_,_) ->
0;
test([{RE0,Line,Options0,Tests}|T],PreCompile,XMode,REAsList) ->
- %io:format("."),
- %case RE of <<>> -> io:format("Empty re:~w~n",[Line]); _ -> ok end,
Unicode = lists:member(unicode,Options0),
RE = case REAsList of
true ->
@@ -90,7 +88,6 @@ test([{RE0,Line,Options0,Tests}|T],PreCompile,XMode,REAsList) ->
end,
case Cres of
{ok,P} ->
- %erlang:display({testrun,RE,P,Tests,ExecOptions,Xopt,XMode}),
case (catch testrun(RE,P,Tests,ExecOptions,Xopt,XMode)) of
N when is_integer(N) ->
N + test(T,PreCompile,XMode,REAsList);
@@ -125,16 +122,10 @@ test([{RE0,Line,Options0,Tests}|T],PreCompile,XMode,REAsList) ->
loopexec(_,_,X,Y,_,_) when X > Y ->
{match,[]};
loopexec(P,Chal,X,Y,Unicode,Xopt) ->
- %io:format("~p~n",[X]),
case re:run(Chal,P,[{offset,X}]++Xopt) of
nomatch ->
- %io:format(" re:exec(~p,~p,[{offset,~p}]) -> ~p~n",
- % [P,Chal,X,no]),
{match,[]};
- %loopexec(P,Chal,X+1,Y);
{match,[{A,B}|More]} ->
- %io:format(" re:exec(~p,~p,[{offset,~p}]) -> ~p~n",
- % [P,Chal,X,{match,[{A,B}|More]}]),
{match,Rest} =
case B>0 of
true ->
@@ -169,7 +160,6 @@ forward(Chal,A,N,true) ->
_ ->
1
end,
- %io:format("Forward ~p~n",[Forw]),
forward(Chal,A+Forw,N-1,true).
contains_eightbit(<<>>) ->
@@ -334,8 +324,6 @@ testrun(RE,P,[{Chal,Line,ExecOpt,Responses}|T],EO,Xopt0,XMode) ->
nomatch ->
nomatch;
{match, Reslist} ->
- %io:format("re:run(~w,~w,~w) -> ~w~n",[Chal,P,ExecOpt++Xopt++
- % [{capture,all,list}],Reslist]),
UFix = lists:member(unicode,EO),
{match,bfix([if
UFix =:= true -> list_to_utf8(L);
@@ -425,7 +413,6 @@ pickline(Start,Stop,Bin) when Stop >= size(Bin) ->
{Res,Stop};
pickline(Start,Stop,Bin) ->
- %erlang:display({Start,Stop,size(Bin)}),
<<_:Stop/binary,Ch,_/binary>> = Bin,
case Ch of
$\n ->
@@ -465,15 +452,13 @@ stru([{_,<<>>}|T]) ->
stru(T);
stru([{Line,<<Ch,Re0/binary>>}|T0]) ->
{T,Re} = find_rest_re(Ch,[{Line,Re0}|T0]),
- %io:format("DBG: ~p~n",[Re]),
{NewRe,<< Ch, Options/binary >>} = end_of_re(Ch,Re),
case interpret_options_x(backstrip(frontstrip(Options)),NewRe) of
{Olist,<<>>} ->
U = lists:member(unicode,Olist),
case T of
[{_,<<$-,_/binary>>}|Con] ->
- %Debug output, we skip those
- %io:format("Skipping debug (~w)~n",[Line]),
+ %%Debug output, we skip those
TmpT = skip_debug(Con),
{NewT,Matches} = stru2(TmpT,U),
[{NewRe,Line,Olist,Matches}|stru(NewT)];
@@ -482,12 +467,10 @@ stru([{Line,<<Ch,Re0/binary>>}|T0]) ->
{NewT,Matches} = stru2(NewT0,U),
[{NewRe,Line,Olist,Matches}|stru(NewT)];
[{_,<<Bla,_/binary>>}|_] when Bla =/= $ ->
- %io:format("Skipping blabla (~w)~n",[Line]),
NewT = skip_until_empty(T),
stru(NewT);
_ ->
{NewT,Matches} = stru2(T,U),
- %erlang:display({NewRe,Line,Olist,Matches}),
Matches1 = case U of
true ->
Matches ++
@@ -496,7 +479,6 @@ stru([{Line,<<Ch,Re0/binary>>}|T0]) ->
false ->
Matches
end,
- %erlang:display({NewRe,Line,Olist,Matches1}),
[{NewRe,Line,Olist,Matches1}|stru(NewT)]
end;
{_,Rest} ->
@@ -605,7 +587,7 @@ backslash_end(<<_,R/binary>>) ->
backslash_end(R).
stru2([{Line,<<$ ,Rest/binary>>} | T],U) ->
- % A challenge
+ %% A challenge
case (catch responses(T,U)) of
{NewT,Rlist} ->
{NewNewT,StrList} = stru2(NewT,U),
@@ -765,17 +747,17 @@ pick_offset(Rest) ->
escape(<<>>,_) ->
{[],<<>>};
escape(<<$\\, Ch, Rest/binary>>,U) when Ch >= $A, Ch =< $Z; Ch =:= $? ->
- %Options in the string...
+ %%Options in the string...
NewOpts = eopt(Ch),
{MoreOpts,Tail} = escape(Rest,U),
{NewOpts ++ MoreOpts,Tail};
escape(<<$\\, $>, Rest/binary>>,U) ->
- %Offset Options in the string...
+ %%Offset Options in the string...
{NewOpt,NewRest} = pick_offset(Rest),
{MoreOpts,Tail} = escape(NewRest,U),
{[NewOpt|MoreOpts],Tail};
escape(<<$\\, $<, Rest/binary>>,U) ->
- %CR Options in the string...
+ %%CR Options in the string...
{NewOpt,NewRest} = pinch_cr(Rest),
{MoreOpts,Tail} = escape(NewRest,U),
{[NewOpt|MoreOpts],Tail};
@@ -789,7 +771,6 @@ escape(<<$\\, Ch, Rest/binary>>,U) ->
{<<$\\>>,<<Ch,Rest/binary>>}
end;
CCC ->
- %erlang:display({escape,CCC}),
{<<CCC>>,Rest}
end,
{MoreOpts,Tail} = escape(NR,U),
@@ -877,7 +858,6 @@ multi_esc(<<$x,${,N,O,$},Rest/binary>>,Unicode)
((N >= $a) and (N =< $f))) and
(((O >= $0) and (O =< $9)) or ((O >= $A) and (O =< $F)) or
((O >= $a) and (O =< $f)))) ->
- %io:format("~p(~p)~n",[<<$x,${,N,O,$}>>,get(unicode)]),
Cha = (trx(N) bsl 4) bor trx(O),
case Unicode of
false ->
@@ -974,8 +954,8 @@ single_esc($\\) ->
$\\;
single_esc($a) ->
7;
-%single_esc(Ch) when Ch >= $A, Ch =< $Z -> % eh?
-% Ch;
+%%single_esc(Ch) when Ch >= $A, Ch =< $Z -> % eh?
+%% Ch;
single_esc(_) ->
no.
@@ -1003,8 +983,6 @@ gen_split_test(OneFile) ->
io:format(F,"-module(~s).~n",[ErlModule]),
io:format(F,"-compile(export_all).~n",[]),
io:format(F,"-compile(no_native).~n",[]),
- %io:format(F,"-include(\"test_server.hrl\").~n",[]),
- %io:format(F,"-define(line,erlang:display(?LINE),).~n",[]),
io:format(F,"%% This file is generated by running ~w:gen_split_test(~p)~n",
[?MODULE,OneFile]),
io:format(F,"join([]) -> [];~n",[]),
@@ -1083,7 +1061,7 @@ dumponesplit(F,{RE,Line,O,TS}) ->
%% Generate replacement tests from indatafile,
%% you will need perl on the machine
gen_repl_test(OneFile) ->
- random:seed(1219,687731,62804),
+ rand:seed(exsplus, {1219,687731,62804}),
{ok,Bin} = file:read_file(OneFile),
Lines = splitfile(0,Bin,1),
Structured = stru(Lines),
@@ -1095,7 +1073,6 @@ gen_repl_test(OneFile) ->
io:format(F,"-module(~s).~n",[ErlModule]),
io:format(F,"-compile(export_all).~n",[]),
io:format(F,"-compile(no_native).~n",[]),
- %io:format(F,"-include(\"test_server.hrl\").~n",[]),
io:format(F,"%% This file is generated by running ~w:gen_repl_test(~p)~n",
[?MODULE,OneFile]),
io:format(F,"run() ->~n",[]),
@@ -1237,15 +1214,15 @@ btr(_) ->
ranchar() ->
- case random:uniform(10) of
+ case rand:uniform(10) of
9 -> $&;
10 -> <<"\\1">>;
N when N < 5 ->
- random:uniform($Z-$A)+$A-1;
+ rand:uniform($Z-$A)+$A-1;
M when M < 9 ->
- random:uniform($z-$a)+$a-1
+ rand:uniform($z-$a)+$a-1
end.
ranstring() ->
- iolist_to_binary([ranchar() || _ <- lists:duplicate(random:uniform(20),0) ]).
+ iolist_to_binary([ranchar() || _ <- lists:duplicate(rand:uniform(20),0) ]).
diff --git a/lib/stdlib/test/select_SUITE.erl b/lib/stdlib/test/select_SUITE.erl
index ead64ffc75..22b6d37e5d 100644
--- a/lib/stdlib/test/select_SUITE.erl
+++ b/lib/stdlib/test/select_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,21 +27,21 @@
%% Define to run outside of test server
%%
%%-define(STANDALONE,1).
-
+
%%
%% Define for debug output
%%
%%-define(debug,1).
-
+
-ifdef(STANDALONE).
-define(config(A,B),config(A,B)).
-export([config/2]).
--define(fmt(A,B),io:format(A,B)).
-else.
--include_lib("test_server/include/test_server.hrl").
--define(fmt(A,B),test_server:format(A,B)).
+-include_lib("common_test/include/ct.hrl").
-endif.
-
+
+-define(fmt(A,B), io:format(A, B)).
+
-ifdef(debug).
-ifdef(STANDALONE).
-define(line, erlang:display({?MODULE,?LINE}), ).
@@ -53,58 +53,29 @@
-endif.
-define(dbgformat(A,B),noop).
-endif.
-
+
-ifdef(STANDALONE).
config(priv_dir,_) ->
".".
-else.
%% When run in test server.
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,select_test/1,
- init_per_testcase/2, end_per_testcase/2,
- return_values/1]).
-
-init_per_testcase(_Case, Config) when is_list(Config) ->
- ?line Dog=test_server:timetrap(test_server:seconds(1200)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+-export([all/0, suite/0,
+ select_test/1, return_values/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[return_values, select_test].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-select_test(suite) ->
- [];
-select_test(doc) ->
- ["Tests select in numerous ways"];
+%% Test select in numerous ways.
select_test(Config) when is_list(Config) ->
+ ct:timetrap({minutes,40}), %% valgrinds needs a lot of time
do_test(Config).
-return_values(suite) ->
- [];
-return_values(doc) ->
- ["Tests return values in specific situations for select/3 and select/1"];
+%% Test return values in specific situations for select/3 and select/1.
return_values(Config) when is_list(Config) ->
do_return_values().
@@ -117,7 +88,7 @@ table_factor({ets,_}) ->
100.
gen_dets_filename(Config,N) ->
- filename:join(?config(priv_dir,Config),
+ filename:join(proplists:get_value(priv_dir,Config),
"testdets_" ++ integer_to_list(N) ++ ".dets").
create_tables(Config) ->
@@ -128,15 +99,15 @@ create_tables(Config) ->
F1 = gen_dets_filename(Config,1),
(catch file:delete(F1)),
{ok,DetsPlain} = dets:open_file(testdets_1,
- [{file, F1}]),
+ [{file, F1}]),
F3 = gen_dets_filename(Config,3),
(catch file:delete(F3)),
{ok,DetsBag} = dets:open_file(testdets_3,
- [{file, F3},{type, bag}]),
+ [{file, F3},{type, bag}]),
F4 = gen_dets_filename(Config,4),
(catch file:delete(F4)),
{ok,DetsDBag} = dets:open_file(testdets_4,
- [{file, F4},{type, duplicate_bag}]),
+ [{file, F4},{type, duplicate_bag}]),
[{ets,Hash}, {ets,Tree}, {ets,Bag}, {ets,DBag},
{dets, DetsPlain}, {dets, DetsBag}, {dets, DetsDBag}].
@@ -189,7 +160,7 @@ build_tables(Config,Type) ->
L = create_tables(Config),
?dbgformat("Tables: ~p~n",[L]),
lists:foreach(fun(TD) ->
- fill_table(TD,table_size(TD),Type)
+ fill_table(TD,table_size(TD),Type)
end,
L),
L.
@@ -202,21 +173,20 @@ destroy_tables([{ets,Tab}|T]) ->
destroy_tables([{dets,Tab}|T]) ->
dets:close(Tab),
destroy_tables(T).
-
+
init_random(Config) ->
- WriteDir = ReadDir = ?config(priv_dir,Config),
+ WriteDir = ReadDir = proplists:get_value(priv_dir,Config),
(catch file:make_dir(WriteDir)),
Seed = case file:consult(filename:join([ReadDir,
"preset_random_seed2.txt"])) of
{ok,[X]} ->
X;
_ ->
- {A,B,C} = erlang:timestamp(),
- random:seed(A,B,C),
- get(random_seed)
+ rand:seed(exsplus),
+ rand:export_seed()
end,
- put(random_seed,Seed),
+ rand:seed(Seed),
{ok, F} = file:open(filename:join([WriteDir, "last_random_seed2.txt"]),
[write]),
io:format(F,"~p. ~n",[Seed]),
@@ -224,27 +194,27 @@ init_random(Config) ->
ok.
create_random_key(N,Type) ->
- gen_key(random:uniform(N),Type).
+ gen_key(rand:uniform(N),Type).
create_pb_key(N,list) ->
- X = random:uniform(N),
- case random:uniform(4) of
+ X = rand:uniform(N),
+ case rand:uniform(4) of
3 -> {[X, X+1, '_'], fun([Z,Z1,P1]) ->
- [Z,Z1,P1] =:= [X,X+1,P1] end};
+ [Z,Z1,P1] =:= [X,X+1,P1] end};
2 -> {[X, '_', '_'], fun([Z,P1,P2]) -> [Z,P1,P2] =:= [X,P1,P2] end};
1 -> {[X, X+1, '$1'], fun([Z,Z1,P1]) ->
[Z,Z1,P1] =:= [X,X+1,P1] end};
_ -> {[X, '$1', '$2'], fun([Z,P1,P2]) -> [Z,P1,P2] =:= [X,P1,P2] end}
end;
create_pb_key(N, tuple) ->
- X = random:uniform(N),
- case random:uniform(2) of
+ X = rand:uniform(N),
+ case rand:uniform(2) of
1 -> {{X, X+1, '$1'},fun({Z,Z1,P1}) -> {Z,Z1,P1} =:= {X,X+1,P1} end};
_ -> {{X, '$1', '$2'},fun({Z,P1,P2}) -> {Z,P1,P2} =:= {X,P1,P2} end}
end;
create_pb_key(N, complex) ->
- X = random:uniform(N),
- case random:uniform(2) of
+ X = rand:uniform(N),
+ case rand:uniform(2) of
1 -> {{[X, X+1], '$1'}, fun({[Z,Z1],P1}) ->
{[Z,Z1],P1} =:= {[X,X+1],P1} end};
_ -> {{[X, '$1'], '$2'},fun({[Z,P1],P2}) ->
@@ -310,7 +280,7 @@ cmp_ms_to_fun({Mod,Tab}, MS, Fun1, Fun2, ChunkSize) ->
false ->
?fmt("Match_spec result differs from fun result:~n",[]),
?fmt("Parameters: ~p,~p,~p,~p~n",
- [{Mod,Tab}, MS, Fun1, Fun2]),
+ [{Mod,Tab}, MS, Fun1, Fun2]),
?fmt("Match_spec Result: ~p~n", [MSRes]),
?fmt("Fun Result: ~p~n", [FunRes]),
Info = (catch Mod:info(Tab)),
@@ -352,18 +322,18 @@ do_test(Config) ->
?fmt("multi_key done for type ~w~n",[Type]),
multi_mixed_key(Tabs,Type),
?fmt("multi_mixed_key done for type ~w~n",
- [Type]),
+ [Type]),
destroy_tables(Tabs)
end,
[tuple, list, complex]),
ok.
-
+
basic_key(Tabs,Type) ->
Fun = fun() ->
lists:map(fun(Tab) ->
- ?line Key =
+ Key =
create_random_key(num_els(Tab),Type),
- ?line MS =
+ MS =
[{{Key,'_','_','_','_'},[],['$_']}],
MF = fun({Key0,A,B,F,Bi},Acc) ->
case Key =:= Key0 of
@@ -374,18 +344,18 @@ basic_key(Tabs,Type) ->
Acc
end
end,
- ?line cmp_ms_to_fun(Tab,MS,MF,[])
+ cmp_ms_to_fun(Tab,MS,MF,[])
end,
Tabs)
end,
- ?line do_n(50,Fun),
+ do_n(50,Fun),
ok.
-
+
basic_pb_key(Tabs,Type) ->
InnerFun = fun(Tab) ->
- ?line {Key,KeyFun} =
+ {Key,KeyFun} =
create_pb_key(num_els(Tab),Type),
- ?line MS = [{{Key,'_','_','_','_'},[],['$_']}],
+ MS = [{{Key,'_','_','_','_'},[],['$_']}],
MF = fun({Key0,A,B,F,Bi},Acc) ->
case KeyFun(Key0) of
true ->
@@ -395,27 +365,27 @@ basic_pb_key(Tabs,Type) ->
Acc
end
end,
- ?line cmp_ms_to_fun(Tab,MS,MF,[])
+ cmp_ms_to_fun(Tab,MS,MF,[])
end,
- ?line {Etses, Detses} = split_by_type(Tabs),
-
- ?line FunEts = fun() ->
- ?line lists:foreach(InnerFun,
- Etses)
- end,
- ?line FunDets = fun() ->
- ?line lists:foreach(InnerFun,
- Detses)
- end,
- ?line do_n(table_factor(hd(Etses)) div 2,FunEts),
- ?line do_n(10,FunDets),
+ {Etses, Detses} = split_by_type(Tabs),
+
+ FunEts = fun() ->
+ lists:foreach(InnerFun,
+ Etses)
+ end,
+ FunDets = fun() ->
+ lists:foreach(InnerFun,
+ Detses)
+ end,
+ do_n(table_factor(hd(Etses)) div 2,FunEts),
+ do_n(10,FunDets),
ok.
-
+
double_pb_key(Tabs,Type) ->
InnerFun = fun(Tab) ->
- ?line {KeyA,KeyFunA} =
+ {KeyA,KeyFunA} =
create_pb_key(num_els(Tab),Type),
- ?line {KeyB,KeyFunB} =
+ {KeyB,KeyFunB} =
create_pb_key(num_els(Tab),Type),
MS = [{{KeyA,'_','_','_','_'},[],['$_']},
{{KeyB,'_','_','_','_'},[],['$_']}],
@@ -449,51 +419,51 @@ double_pb_key(Tabs,Type) ->
end
end
end,
- ?line cmp_ms_to_fun(Tab,MS,MF,[])
+ cmp_ms_to_fun(Tab,MS,MF,[])
end,
- ?line {Etses, Detses} = split_by_type(Tabs),
-
- ?line FunEts = fun() ->
- ?line lists:foreach(InnerFun,
- Etses)
- end,
- ?line FunDets = fun() ->
- ?line lists:foreach(InnerFun,
- Detses)
- end,
- ?line do_n(table_factor(hd(Etses)) div 2,FunEts),
- ?line do_n(10,FunDets),
+ {Etses, Detses} = split_by_type(Tabs),
+
+ FunEts = fun() ->
+ lists:foreach(InnerFun,
+ Etses)
+ end,
+ FunDets = fun() ->
+ lists:foreach(InnerFun,
+ Detses)
+ end,
+ do_n(table_factor(hd(Etses)) div 2,FunEts),
+ do_n(10,FunDets),
ok.
-
-
+
+
multi_key(Tabs,Type) ->
Fun = fun() ->
lists:map(fun(Tab) ->
- ?line KeyA =
+ KeyA =
create_random_key(num_els(Tab),Type),
- ?line KeyB =
+ KeyB =
create_random_key(num_els(Tab),Type),
- ?line KeyC =
+ KeyC =
create_random_key(num_els(Tab),Type),
- ?line KeyD =
+ KeyD =
create_random_key(num_els(Tab),Type),
- ?line KeyE =
+ KeyE =
create_random_key(num_els(Tab),Type),
- ?line KeyF =
+ KeyF =
create_random_key(num_els(Tab),Type),
- ?line KeyG =
+ KeyG =
create_random_key(num_els(Tab),Type),
- ?line KeyH =
+ KeyH =
create_random_key(num_els(Tab),Type),
- ?line KeyI =
+ KeyI =
create_random_key(num_els(Tab),Type),
- ?line KeyJ =
+ KeyJ =
create_random_key(num_els(Tab),Type),
- ?line KeyK =
+ KeyK =
create_random_key(num_els(Tab),Type),
- ?line KeyL =
+ KeyL =
create_random_key(num_els(Tab),Type),
-
+
MS = [{{KeyA,'$1','_','$2','_'},[],
[{{'$1','$2'}}]},
{{KeyB,'$1','_','$2','_'},[],
@@ -520,7 +490,7 @@ multi_key(Tabs,Type) ->
[{{'$1','$2'}}]}
],
?dbgformat("Tab: ~p, MS: ~p~n",
- [Tab,MS]),
+ [Tab,MS]),
MF = fun({Key0,A,_B,F,_Bi},Acc) ->
case Key0 of
KeyA ->
@@ -563,40 +533,40 @@ multi_key(Tabs,Type) ->
Acc
end
end,
- ?line cmp_ms_to_fun(Tab,MS,MF,[])
+ cmp_ms_to_fun(Tab,MS,MF,[])
end,
Tabs)
end,
- ?line do_n(33,Fun),
+ do_n(33,Fun),
ok.
-
+
multi_mixed_key(Tabs,Type) ->
InnerFun = fun(Tab) ->
- ?line KeyA =
+ KeyA =
create_random_key(num_els(Tab),Type),
- ?line KeyB =
+ KeyB =
create_random_key(num_els(Tab),Type),
- ?line KeyC =
+ KeyC =
create_random_key(num_els(Tab),Type),
- ?line KeyD =
+ KeyD =
create_random_key(num_els(Tab),Type),
- ?line {KeyE, FunE} =
+ {KeyE, FunE} =
create_pb_key(num_els(Tab),Type),
- ?line KeyF =
+ KeyF =
create_random_key(num_els(Tab),Type),
- ?line {KeyG, FunG} =
+ {KeyG, FunG} =
create_pb_key(num_els(Tab),Type),
- ?line KeyH =
+ KeyH =
create_random_key(num_els(Tab),Type),
- ?line KeyI =
+ KeyI =
create_random_key(num_els(Tab),Type),
- ?line {KeyJ, FunJ} =
+ {KeyJ, FunJ} =
create_pb_key(num_els(Tab),Type),
- ?line KeyK =
+ KeyK =
create_random_key(num_els(Tab),Type),
- ?line KeyL =
+ KeyL =
create_random_key(num_els(Tab),Type),
-
+
MS = [{{KeyA,'$1','_','$2','_'},[],
[{{'$1','$2'}}]},
{{KeyB,'$1','_','$2','_'},[],
@@ -665,34 +635,34 @@ multi_mixed_key(Tabs,Type) ->
end
end
end,
- ?line cmp_ms_to_fun(Tab,MS,MF,[]),
- ?line case Tab of
- {ets,_} ->
- ?line cmp_ms_to_fun(Tab,MS,MF,[],1),
- ?line cmp_ms_to_fun(Tab,MS,MF,[],10),
- ?line cmp_ms_to_fun(Tab,MS,MF,[],1000000),
- ?line cmp_ms_to_fun(Tab,MS,MF,[],-1),
- ?line cmp_ms_to_fun(Tab,MS,MF,[],-10),
- ?line cmp_ms_to_fun(Tab,MS,MF,[],-1000000);
- _ ->
- ok
- end
+ cmp_ms_to_fun(Tab,MS,MF,[]),
+ case Tab of
+ {ets,_} ->
+ cmp_ms_to_fun(Tab,MS,MF,[],1),
+ cmp_ms_to_fun(Tab,MS,MF,[],10),
+ cmp_ms_to_fun(Tab,MS,MF,[],1000000),
+ cmp_ms_to_fun(Tab,MS,MF,[],-1),
+ cmp_ms_to_fun(Tab,MS,MF,[],-10),
+ cmp_ms_to_fun(Tab,MS,MF,[],-1000000);
+ _ ->
+ ok
+ end
end,
- ?line {Etses, Detses} = split_by_type(Tabs),
-
- ?line FunEts = fun() ->
- ?line lists:foreach(InnerFun,
- Etses)
- end,
- ?line FunDets = fun() ->
- ?line lists:foreach(InnerFun,
- Detses)
- end,
- ?line do_n(table_factor(hd(Etses)) div 2,FunEts),
- ?line do_n(table_factor(hd(Detses)) div 2,FunDets),
+ {Etses, Detses} = split_by_type(Tabs),
+
+ FunEts = fun() ->
+ lists:foreach(InnerFun,
+ Etses)
+ end,
+ FunDets = fun() ->
+ lists:foreach(InnerFun,
+ Detses)
+ end,
+ do_n(table_factor(hd(Etses)) div 2,FunEts),
+ do_n(table_factor(hd(Detses)) div 2,FunDets),
ok.
-
-
+
+
split_by_type(List) ->
split_by_type(List,[],[]).
split_by_type([],AccEts,AccDets) ->
@@ -703,121 +673,119 @@ split_by_type([{ets,Tab}|T],AccEts,AccDets) ->
split_by_type(T,[{ets,Tab}|AccEts],AccDets).
whitebox() ->
- ?line ets:new(xxx,[named_table, ordered_set]),
- ?line ets:new(yyy,[named_table]),
- ?line E = fun(0,_)->ok;
- (N,F) ->
- ?line ets:insert(xxx,{N,N rem 10}),
- ?line ets:insert(yyy,{N,N rem 10}),
- F(N-1,F)
- end,
- ?line E(10000,E),
-
- ?line G = fun(F,C,A) ->
- ?line case ets:select(C) of
- {L,C2} ->
- ?line F(F,C2,A+length(L));
- '$end_of_table' ->
- ?line A
- end
- end,
- ?line H=fun({L,C}) ->
- ?line G(G,C,length(L))
- end,
-
- ?line 1 = H(ets:select(xxx,[{{'$1','$2'},[{'<','$1',2}],['$_']}],7)),
- ?line 10000 = H(ets:select(xxx,[{{'$1','$2'},[],['$_']}],1)),
- ?line 1 = H(ets:select(yyy,[{{'$1','$2'},[{'<','$1',2}],['$_']}],7)),
- ?line 10000 = H(ets:select(yyy,[{{'$1','$2'},[],['$_']}],1)),
-
- ?line {[{5,5}],_} = ets:select(xxx,[{{5,'$2'},[],['$_']}],1),
- ?line {[{5,5}],_} = ets:select(yyy,[{{5,'$2'},[],['$_']}],1),
-
- ?line I = fun(_,0) ->
- ok;
- (I,N) ->
- ?line 10000 =
- H(ets:select(xxx,[{{'$1','$2'},[],['$_']}],N)),
- I(I,N-1)
- end,
- ?line I(I,2000),
- ?line J = fun(F,C,A) ->
- ?line case ets:select(C) of
- {L,C2} ->
- ?line F(F,C2,lists:reverse(L)++A);
- '$end_of_table' ->
- ?line lists:reverse(A)
- end
- end,
- ?line K = fun({L,C}) ->
- ?line J(J,C,lists:reverse(L))
- end,
- ?line M = fun(_, _, 0) ->
- ok;
- (F, What, N) ->
- ?line What =
- K(ets:select(xxx,[{{'$1','$2'},[],['$_']}],N)),
- F(F, What, N-1)
- end,
- ?line N = fun(HM) ->
- ?line What = ets:select(xxx,[{{'$1','$2'},[],['$_']}]),
- ?line What = lists:sort(What),
- M(M, What, HM)
- end,
- ?line N(2000),
- ?line ets:delete(xxx),
- ?line ets:delete(yyy).
+ ets:new(xxx,[named_table, ordered_set]),
+ ets:new(yyy,[named_table]),
+ E = fun(0,_)->ok;
+ (N,F) ->
+ ets:insert(xxx,{N,N rem 10}),
+ ets:insert(yyy,{N,N rem 10}),
+ F(N-1,F)
+ end,
+ E(10000,E),
+
+ G = fun(F,C,A) ->
+ case ets:select(C) of
+ {L,C2} ->
+ F(F,C2,A+length(L));
+ '$end_of_table' ->
+ A
+ end
+ end,
+ H=fun({L,C}) ->
+ G(G,C,length(L))
+ end,
+
+ 1 = H(ets:select(xxx,[{{'$1','$2'},[{'<','$1',2}],['$_']}],7)),
+ 10000 = H(ets:select(xxx,[{{'$1','$2'},[],['$_']}],1)),
+ 1 = H(ets:select(yyy,[{{'$1','$2'},[{'<','$1',2}],['$_']}],7)),
+ 10000 = H(ets:select(yyy,[{{'$1','$2'},[],['$_']}],1)),
+
+ {[{5,5}],_} = ets:select(xxx,[{{5,'$2'},[],['$_']}],1),
+ {[{5,5}],_} = ets:select(yyy,[{{5,'$2'},[],['$_']}],1),
+
+ I = fun(_,0) ->
+ ok;
+ (I,N) ->
+ 10000 =
+ H(ets:select(xxx,[{{'$1','$2'},[],['$_']}],N)),
+ I(I,N-1)
+ end,
+ I(I,2000),
+ J = fun(F,C,A) ->
+ case ets:select(C) of
+ {L,C2} ->
+ F(F,C2,lists:reverse(L)++A);
+ '$end_of_table' ->
+ lists:reverse(A)
+ end
+ end,
+ K = fun({L,C}) ->
+ J(J,C,lists:reverse(L))
+ end,
+ M = fun(_, _, 0) ->
+ ok;
+ (F, What, N) ->
+ What =
+ K(ets:select(xxx,[{{'$1','$2'},[],['$_']}],N)),
+ F(F, What, N-1)
+ end,
+ N = fun(HM) ->
+ What = ets:select(xxx,[{{'$1','$2'},[],['$_']}]),
+ What = lists:sort(What),
+ M(M, What, HM)
+ end,
+ N(2000),
+ ets:delete(xxx),
+ ets:delete(yyy).
do_return_values() ->
- ?line T = ets:new(xxx,[ordered_set]),
- ?line U = ets:new(xxx,[]),
- ?line '$end_of_table' = ets:select(T,[{'_',[],['$_']}],1),
- ?line '$end_of_table' = ets:select(U,[{'_',[],['$_']}],1),
- ?line ets:insert(T,{ett,1}),
- ?line ets:insert(U,{ett,1}),
- ?line {[{ett,1}],C1} = ets:select(T,[{'_',[],['$_']}],1),
- ?line '$end_of_table' = ets:select(C1),
- ?line {[{ett,1}],C2} = ets:select(U,[{'_',[],['$_']}],1),
- ?line '$end_of_table' = ets:select(C2),
- ?line {[{ett,1}],C3} = ets:select(T,[{'_',[],['$_']}],2),
- ?line '$end_of_table' = ets:select(C3),
- ?line {[{ett,1}],C4} = ets:select(U,[{'_',[],['$_']}],2),
- ?line '$end_of_table' = ets:select(C4),
- ?line E = fun(0,_)->ok;
- (N,F) ->
- ?line ets:insert(T,{N,N rem 10}),
- ?line ets:insert(U,{N,N rem 10}),
- F(N-1,F)
- end,
- ?line E(10000,E),
- ?line '$end_of_table' = ets:select(T,[{{hej, hopp},[],['$_']}],1),
- ?line '$end_of_table' = ets:select(U,[{{hej,hopp},[],['$_']}],1),
- ?line {[{ett,1}],CC1} = ets:select(T,[{{'$1','_'},[{is_atom, '$1'}],
- ['$_']}],1),
- ?line '$end_of_table' = ets:select(CC1),
- ?line {[{ett,1}],CC2} = ets:select(U,[{{'$1','_'},[{is_atom, '$1'}],
- ['$_']}],1),
- ?line '$end_of_table' = ets:select(CC2),
- ?line {[{ett,1}],CC3} = ets:select(T,[{{'$1','_'},[{is_atom, '$1'}],
- ['$_']}],2),
- ?line '$end_of_table' = ets:select(CC3),
- ?line {[{ett,1}],CC4} = ets:select(U,[{{'$1','_'},[{is_atom, '$1'}],
- ['$_']}],2),
- ?line '$end_of_table' = ets:select(CC4),
- ?line ets:delete(T),
- ?line ets:delete(U),
- ?line V = ets:new(xxx,[{keypos, 4}]),
- ?line X = ets:new(xxx,[ordered_set, {keypos, 4}]),
- ?line ets:insert(V,{1,1,1,ett}),
- ?line ets:insert(X,{1,1,1,ett}),
- ?line '$end_of_table' = ets:select(V,[{{1,1,1},[],['$_']}],1),
- ?line '$end_of_table' = ets:select(X,[{{1,1,1},[],['$_']}],1),
- ?line ets:delete(V),
- ?line ets:delete(X),
+ T = ets:new(xxx,[ordered_set]),
+ U = ets:new(xxx,[]),
+ '$end_of_table' = ets:select(T,[{'_',[],['$_']}],1),
+ '$end_of_table' = ets:select(U,[{'_',[],['$_']}],1),
+ ets:insert(T,{ett,1}),
+ ets:insert(U,{ett,1}),
+ {[{ett,1}],C1} = ets:select(T,[{'_',[],['$_']}],1),
+ '$end_of_table' = ets:select(C1),
+ {[{ett,1}],C2} = ets:select(U,[{'_',[],['$_']}],1),
+ '$end_of_table' = ets:select(C2),
+ {[{ett,1}],C3} = ets:select(T,[{'_',[],['$_']}],2),
+ '$end_of_table' = ets:select(C3),
+ {[{ett,1}],C4} = ets:select(U,[{'_',[],['$_']}],2),
+ '$end_of_table' = ets:select(C4),
+ E = fun(0,_)->ok;
+ (N,F) ->
+ ets:insert(T,{N,N rem 10}),
+ ets:insert(U,{N,N rem 10}),
+ F(N-1,F)
+ end,
+ E(10000,E),
+ '$end_of_table' = ets:select(T,[{{hej, hopp},[],['$_']}],1),
+ '$end_of_table' = ets:select(U,[{{hej,hopp},[],['$_']}],1),
+ {[{ett,1}],CC1} = ets:select(T,[{{'$1','_'},[{is_atom, '$1'}],
+ ['$_']}],1),
+ '$end_of_table' = ets:select(CC1),
+ {[{ett,1}],CC2} = ets:select(U,[{{'$1','_'},[{is_atom, '$1'}],
+ ['$_']}],1),
+ '$end_of_table' = ets:select(CC2),
+ {[{ett,1}],CC3} = ets:select(T,[{{'$1','_'},[{is_atom, '$1'}],
+ ['$_']}],2),
+ '$end_of_table' = ets:select(CC3),
+ {[{ett,1}],CC4} = ets:select(U,[{{'$1','_'},[{is_atom, '$1'}],
+ ['$_']}],2),
+ '$end_of_table' = ets:select(CC4),
+ ets:delete(T),
+ ets:delete(U),
+ V = ets:new(xxx,[{keypos, 4}]),
+ X = ets:new(xxx,[ordered_set, {keypos, 4}]),
+ ets:insert(V,{1,1,1,ett}),
+ ets:insert(X,{1,1,1,ett}),
+ '$end_of_table' = ets:select(V,[{{1,1,1},[],['$_']}],1),
+ '$end_of_table' = ets:select(X,[{{1,1,1},[],['$_']}],1),
+ ets:delete(V),
+ ets:delete(X),
ok.
-
-
diff --git a/lib/stdlib/test/sets_SUITE.erl b/lib/stdlib/test/sets_SUITE.erl
index 972a812072..bec38000b2 100644
--- a/lib/stdlib/test/sets_SUITE.erl
+++ b/lib/stdlib/test/sets_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,20 +31,19 @@
is_set/1,fold/1,filter/1,
take_smallest/1,take_largest/1, iterate/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-import(lists, [foldl/3,reverse/1]).
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:minutes(5)),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
[create, add_element, del_element, subtract,
@@ -107,9 +106,9 @@ add_element_del([H|T], M, S, Del, []) ->
add_element_del(T, M, M(add_element, {H,S}), Del, [H]);
add_element_del([H|T], M, S0, Del, Inserted) ->
S1 = M(add_element, {H,S0}),
- case random:uniform(3) of
+ case rand:uniform(3) of
1 ->
- OldEl = lists:nth(random:uniform(length(Inserted)), Inserted),
+ OldEl = lists:nth(rand:uniform(length(Inserted)), Inserted),
S = M(del_element, {OldEl,S1}),
add_element_del(T, M, S, [OldEl|Del], [H|Inserted]);
_ ->
@@ -438,7 +437,7 @@ iterate_1(M) ->
M(empty, []).
iterate_2(M) ->
- random:seed(1, 2, 42),
+ rand:seed(exsplus, {1,2,42}),
iter_set(M, 1000).
iter_set(_M, 0) ->
@@ -447,7 +446,7 @@ iter_set(M, N) ->
L = [I || I <- lists:seq(1, N)],
T = M(from_list, L),
L = lists:reverse(iterate_set(M, T)),
- R = random:uniform(N),
+ R = rand:uniform(N),
S = lists:reverse(iterate_set(M, R, T)),
S = [E || E <- L, E >= R],
iter_set(M, N-1).
@@ -481,7 +480,7 @@ sets_mods() ->
test_all(Tester) ->
Res = [begin
- random:seed(1, 2, 42),
+ rand:seed(exsplus, {1,2,42}),
S = Tester(M),
{M(size, S),lists:sort(M(to_list, S))}
end || M <- sets_mods()],
@@ -492,7 +491,7 @@ test_all([{Low,High}|T], Tester) ->
test_all([Sz|T], Tester) when is_integer(Sz) ->
List = rnd_list(Sz),
Res = [begin
- random:seed(19, 2, Sz),
+ rand:seed(exsplus, {19,2,Sz}),
S = Tester(List, M),
{M(size, S),lists:sort(M(to_list, S))}
end || M <- sets_mods()],
@@ -512,10 +511,10 @@ rnd_list(Sz) ->
rnd_list_1(Sz, []).
atomic_rnd_term() ->
- case random:uniform(3) of
- 1 -> list_to_atom(integer_to_list($\s+random:uniform(94))++"rnd");
- 2 -> random:uniform();
- 3 -> random:uniform(50)-37
+ case rand:uniform(3) of
+ 1 -> list_to_atom(integer_to_list($\s+rand:uniform(94))++"rnd");
+ 2 -> rand:uniform();
+ 3 -> rand:uniform(50)-37
end.
rnd_list_1(0, Acc) -> Acc;
@@ -543,7 +542,7 @@ remove_some(List0, P) ->
end.
remove_some([H|T], P, Acc) ->
- case random:uniform() of
+ case rand:uniform() of
F when F < P -> %Remove.
remove_some(T, P, Acc);
_ ->
diff --git a/lib/stdlib/test/shell_SUITE.erl b/lib/stdlib/test/shell_SUITE.erl
index a9dd6b5817..c409a6949b 100644
--- a/lib/stdlib/test/shell_SUITE.erl
+++ b/lib/stdlib/test/shell_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@
progex_bit_syntax/1, progex_records/1,
progex_lc/1, progex_funs/1,
otp_5990/1, otp_6166/1, otp_6554/1,
- otp_7184/1, otp_7232/1, otp_8393/1, otp_10302/1]).
+ otp_7184/1, otp_7232/1, otp_8393/1, otp_10302/1, otp_13719/1]).
-export([ start_restricted_from_shell/1,
start_restricted_on_command_line/1,restricted_local/1]).
@@ -52,28 +52,25 @@
config(priv_dir,_) ->
".".
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([init_per_testcase/2, end_per_testcase/2]).
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(10)).
init_per_testcase(_Case, Config) ->
- ?line Dog = ?t:timetrap(?default_timeout),
- ?line OrigPath = code:get_path(),
- ?line code:add_patha(?config(priv_dir,Config)),
- [{orig_path,OrigPath}, {watchdog, Dog} | Config].
+ OrigPath = code:get_path(),
+ code:add_patha(proplists:get_value(priv_dir,Config)),
+ [{orig_path,OrigPath} | Config].
end_per_testcase(_Case, Config) ->
- ?line Dog = ?config(watchdog, Config),
- ?line test_server:timetrap_cancel(Dog),
- ?line OrigPath = ?config(orig_path,Config),
- ?line code:set_path(OrigPath),
- ?line application:unset_env(stdlib, restricted_shell),
- ?line (catch code:purge(user_default)),
- ?line (catch code:delete(user_default)),
+ OrigPath = proplists:get_value(orig_path,Config),
+ code:set_path(OrigPath),
+ application:unset_env(stdlib, restricted_shell),
+ (catch code:purge(user_default)),
+ (catch code:delete(user_default)),
ok.
-endif.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,10}}].
all() ->
[forget, records, known_bugs, otp_5226, otp_5327,
@@ -94,7 +91,7 @@ groups() ->
progex_funs]},
{tickets, [],
[otp_5990, otp_6166, otp_6554, otp_7184,
- otp_7232, otp_8393, otp_10302]}].
+ otp_7232, otp_8393, otp_10302, otp_13719]}].
init_per_suite(Config) ->
Config.
@@ -112,101 +109,95 @@ end_per_group(_GroupName, Config) ->
-record(state, {bin, reply, leader, unic = latin1}).
-start_restricted_from_shell(doc) ->
- ["Test that a restricted shell can be started from the normal shell"];
-start_restricted_from_shell(suite) ->
- [];
+%% Test that a restricted shell can be started from the normal shell.
start_restricted_from_shell(Config) when is_list(Config) ->
- ?line [{error,nofile}] = scan(<<"begin shell:start_restricted("
- "nonexisting_module) end.">>),
- ?line Test = filename:join(?config(priv_dir, Config),
- "test_restricted.erl"),
+ [{error,nofile}] = scan(<<"begin shell:start_restricted("
+ "nonexisting_module) end.">>),
+ Test = filename:join(proplists:get_value(priv_dir, Config),
+ "test_restricted.erl"),
Contents = <<"-module(test_restricted).
-export([local_allowed/3, non_local_allowed/3]).
- local_allowed(m,[],State) ->
- {true,State};
- local_allowed(ugly,[],_State) ->
- non_conforming_reply;
- local_allowed(_,_,State) ->
- {false,State}.
-
- non_local_allowed({shell,stop_restricted},[],State) ->
- {true,State};
- non_local_allowed({erlang,'+'},[_],State) ->
- {true,State};
- non_local_allowed({erlang,'-'},[_,_],_State) ->
- non_conforming_reply;
- non_local_allowed({h, d}, [Arg], S) ->
- {{redirect, {erlang,hd}, [Arg]}, S};
- non_local_allowed(_,_,State) ->
- {false,State}.
- ">>,
- ?line ok = compile_file(Config, Test, Contents, []),
- ?line "exception exit: restricted shell starts now" =
- comm_err(<<"begin shell:start_restricted("
- "test_restricted) end.">>),
- ?line {ok, test_restricted} =
- application:get_env(stdlib, restricted_shell),
- ?line "Module" ++ _ = t({<<"begin m() end.">>, utf8}),
- ?line "exception exit: restricted shell does not allow c(foo)" =
- comm_err(<<"begin c(foo) end.">>),
- ?line "exception exit: restricted shell does not allow init:stop()" =
- comm_err(<<"begin init:stop() end.">>),
- ?line "exception exit: restricted shell does not allow init:stop()" =
- comm_err(<<"begin F = fun() -> init:stop() end, F() end.">>),
- ?line "exception error: an error occurred when evaluating an arithmetic expression" =
- comm_err(<<"begin +a end.">>),
- ?line "exception exit: restricted shell does not allow a + b" =
- comm_err(<<"begin a+b end.">>),
- ?line "exception exit: restricted shell does not allow - b" =
- comm_err(<<"begin -b end.">>),
- ?line "exception exit: restricted shell does not allow 1 + 2" =
- comm_err(<<"begin if atom(1 + 2> 0) -> 1; true -> 2 end end.">>),
- ?line "exception exit: restricted shell does not allow 1 + 2" =
- comm_err(<<"begin if is_atom(1 + 2> 0) -> 1; true -> 2 end end.">>),
- ?line "exception exit: restricted shell does not allow - 2" =
- comm_err(<<"begin if - 2 -> 1; true -> 2 end end.">>),
- ?line "exception exit: restricted shell does not allow - 2" =
- comm_err(<<"begin if (- 2 > 0) andalso true -> 1; true -> 2 end end.">>),
- ?line "exception exit: restricted shell does not allow - 2" =
- comm_err(<<"begin if (- 2 > 0) orelse true -> 1; true -> 2 end end.">>),
- ?line "exception exit: restricted shell does not allow 1 + 2" =
- comm_err(<<"begin if 1 + 2 > 0 -> 1; true -> 2 end end.">>),
- ?line "exception exit: restricted shell does not allow 1 + 2" =
- comm_err(<<"begin if erlang:is_atom(1 + 2> 0) -> 1; true -> 2 end end.">>),
- ?line "exception exit: restricted shell does not allow is_integer(1)" =
- comm_err(<<"begin if is_integer(1) -> 1; true -> 2 end end.">>),
- ?line "exception exit: restricted shell does not allow is_integer(1)" =
- comm_err(<<"begin if integer(1) -> 1; true -> 2 end end.">>),
- ?line "exception exit: "
- "restricted shell module returned bad value non_conforming_reply" =
- comm_err(<<"ugly().">>),
- ?line [one] = scan(<<"h:d([one,two]).">>),
- ?line "exception exit: "
- "restricted shell module returned bad value non_conforming_reply" =
- comm_err(<<"1 - 2.">>),
- ?line "exception exit: restricted shell stopped"=
- comm_err(<<"begin shell:stop_restricted() end.">>),
- ?line undefined =
- application:get_env(stdlib, restricted_shell),
- ok.
-
-start_restricted_on_command_line(doc) ->
- ["Check restricted shell when started from the command line"];
-start_restricted_on_command_line(suite) ->
- [];
+local_allowed(m,[],State) ->
+ {true,State};
+local_allowed(ugly,[],_State) ->
+ non_conforming_reply;
+local_allowed(_,_,State) ->
+ {false,State}.
+
+non_local_allowed({shell,stop_restricted},[],State) ->
+ {true,State};
+non_local_allowed({erlang,'+'},[_],State) ->
+ {true,State};
+non_local_allowed({erlang,'-'},[_,_],_State) ->
+ non_conforming_reply;
+non_local_allowed({h, d}, [Arg], S) ->
+ {{redirect, {erlang,hd}, [Arg]}, S};
+non_local_allowed(_,_,State) ->
+ {false,State}.
+">>,
+ ok = compile_file(Config, Test, Contents, []),
+"exception exit: restricted shell starts now" =
+comm_err(<<"begin shell:start_restricted("
+ "test_restricted) end.">>),
+{ok, test_restricted} =
+application:get_env(stdlib, restricted_shell),
+"Module" ++ _ = t({<<"begin m() end.">>, utf8}),
+"exception exit: restricted shell does not allow c(foo)" =
+comm_err(<<"begin c(foo) end.">>),
+"exception exit: restricted shell does not allow init:stop()" =
+comm_err(<<"begin init:stop() end.">>),
+"exception exit: restricted shell does not allow init:stop()" =
+comm_err(<<"begin F = fun() -> init:stop() end, F() end.">>),
+"exception error: an error occurred when evaluating an arithmetic expression" =
+comm_err(<<"begin +a end.">>),
+"exception exit: restricted shell does not allow a + b" =
+comm_err(<<"begin a+b end.">>),
+"exception exit: restricted shell does not allow - b" =
+comm_err(<<"begin -b end.">>),
+"exception exit: restricted shell does not allow 1 + 2" =
+comm_err(<<"begin if atom(1 + 2> 0) -> 1; true -> 2 end end.">>),
+"exception exit: restricted shell does not allow 1 + 2" =
+comm_err(<<"begin if is_atom(1 + 2> 0) -> 1; true -> 2 end end.">>),
+"exception exit: restricted shell does not allow - 2" =
+comm_err(<<"begin if - 2 -> 1; true -> 2 end end.">>),
+"exception exit: restricted shell does not allow - 2" =
+comm_err(<<"begin if (- 2 > 0) andalso true -> 1; true -> 2 end end.">>),
+"exception exit: restricted shell does not allow - 2" =
+comm_err(<<"begin if (- 2 > 0) orelse true -> 1; true -> 2 end end.">>),
+"exception exit: restricted shell does not allow 1 + 2" =
+comm_err(<<"begin if 1 + 2 > 0 -> 1; true -> 2 end end.">>),
+"exception exit: restricted shell does not allow 1 + 2" =
+comm_err(<<"begin if erlang:is_atom(1 + 2> 0) -> 1; true -> 2 end end.">>),
+"exception exit: restricted shell does not allow is_integer(1)" =
+comm_err(<<"begin if is_integer(1) -> 1; true -> 2 end end.">>),
+"exception exit: restricted shell does not allow is_integer(1)" =
+comm_err(<<"begin if integer(1) -> 1; true -> 2 end end.">>),
+"exception exit: "
+"restricted shell module returned bad value non_conforming_reply" =
+comm_err(<<"ugly().">>),
+[one] = scan(<<"h:d([one,two]).">>),
+"exception exit: "
+"restricted shell module returned bad value non_conforming_reply" =
+comm_err(<<"1 - 2.">>),
+"exception exit: restricted shell stopped"=
+comm_err(<<"begin shell:stop_restricted() end.">>),
+undefined =
+application:get_env(stdlib, restricted_shell),
+ok.
+
+%% Check restricted shell when started from the command line.
start_restricted_on_command_line(Config) when is_list(Config) ->
- ?line {ok,Node} = start_node(shell_suite_helper_1,
- "-pa "++?config(priv_dir,Config)++
- " -stdlib restricted_shell foo"),
- ?line "Warning! Restricted shell module foo not found: nofile"++_ =
+ {ok,Node} = start_node(shell_suite_helper_1,
+ "-pa "++proplists:get_value(priv_dir,Config)++
+ " -stdlib restricted_shell foo"),
+ "Warning! Restricted shell module foo not found: nofile"++_ =
t({Node, <<"begin m() end.">>}),
- ?line "exception exit: restricted shell does not allow m()" =
+ "exception exit: restricted shell does not allow m()" =
comm_err({Node, <<"begin m() end.">>}),
- ?line [ok] =
+ [ok] =
(catch scan({Node, <<"begin q() end.">>})),
- ?line test_server:stop_node(Node),
- ?line Test = filename:join(?config(priv_dir, Config),
+ test_server:stop_node(Node),
+ Test = filename:join(proplists:get_value(priv_dir, Config),
"test_restricted2.erl"),
Contents = <<"-module(test_restricted2).
-export([local_allowed/3, non_local_allowed/3]).
@@ -222,36 +213,34 @@ start_restricted_on_command_line(Config) when is_list(Config) ->
non_local_allowed(_,_,State) ->
{false,State}.
">>,
- ?line ok = compile_file(Config, Test, Contents, []),
- ?line {ok,Node2} = start_node(shell_suite_helper_2,
- "-pa "++?config(priv_dir,Config)++
+ ok = compile_file(Config, Test, Contents, []),
+ {ok,Node2} = start_node(shell_suite_helper_2,
+ "-pa "++proplists:get_value(priv_dir,Config)++
" -stdlib restricted_shell test_restricted2"),
- ?line "Module" ++ _ = t({Node2,<<"begin m() end.">>, utf8}),
- ?line "exception exit: restricted shell does not allow c(foo)" =
+ "Module" ++ _ = t({Node2,<<"begin m() end.">>, utf8}),
+ "exception exit: restricted shell does not allow c(foo)" =
comm_err({Node2,<<"begin c(foo) end.">>}),
- ?line "exception exit: restricted shell does not allow init:stop()" =
+ "exception exit: restricted shell does not allow init:stop()" =
comm_err({Node2,<<"begin init:stop() end.">>}),
- ?line "exception exit: restricted shell does not allow init:stop()" =
+ "exception exit: restricted shell does not allow init:stop()" =
comm_err({Node2,<<"begin F = fun() -> init:stop() end, F() end.">>}),
- ?line [Node2] =
+ [Node2] =
scan({Node2, <<"begin erlang:node() end.">>}),
- ?line [Node2] =
+ [Node2] =
scan({Node2, <<"begin node() end.">>}),
- ?line "exception exit: restricted shell stopped"=
+ "exception exit: restricted shell stopped"=
comm_err({Node2,<<"begin shell:stop_restricted() end.">>}),
- ?line [ok] =
+ [ok] =
scan({Node2, <<"begin q() end.">>}),
- ?line test_server:stop_node(Node2),
+ test_server:stop_node(Node2),
ok.
-restricted_local(suite) ->
- [];
-restricted_local(doc) ->
- ["Tests calling local shell functions with spectacular arguments in restricted shell"];
+%% Tests calling local shell functions with spectacular arguments in
+%% restricted shell.
restricted_local(Config) when is_list(Config) ->
- ?line [{error,nofile}] = scan(<<"begin shell:start_restricted("
+ [{error,nofile}] = scan(<<"begin shell:start_restricted("
"nonexisting_module) end.">>),
- ?line Test = filename:join(?config(priv_dir, Config),
+ Test = filename:join(proplists:get_value(priv_dir, Config),
"test_restricted_local.erl"),
Contents = <<"-module(test_restricted_local).
-export([local_allowed/3, non_local_allowed/3]).
@@ -271,8 +260,8 @@ restricted_local(Config) when is_list(Config) ->
non_local_allowed(_,_,State) ->
{false,State}.
">>,
- ?line ok = compile_file(Config, Test, Contents, []),
- ?line Test2 = filename:join(?config(priv_dir, Config),
+ ok = compile_file(Config, Test, Contents, []),
+ Test2 = filename:join(proplists:get_value(priv_dir, Config),
"user_default.erl"),
Contents2 = <<"-module(user_default).
-export([funkis/1,apple/1]).
@@ -283,117 +272,113 @@ restricted_local(Config) when is_list(Config) ->
apple(_) ->
apple.
">>,
- ?line ok = compile_file(Config, Test2, Contents2, []),
- ?line "exception exit: restricted shell starts now" =
+ ok = compile_file(Config, Test2, Contents2, []),
+ "exception exit: restricted shell starts now" =
comm_err(<<"begin shell:start_restricted("
"test_restricted_local) end.">>),
- ?line {ok, test_restricted_local} =
+ {ok, test_restricted_local} =
application:get_env(stdlib, restricted_shell),
- ?line "exception exit: restricted shell does not allow foo(" ++ _ =
+ "exception exit: restricted shell does not allow foo(" ++ _ =
comm_err(<<"begin F=fun() -> hello end, foo(F) end.">>),
- ?line "exception error: undefined shell command banan/1" =
+ "exception error: undefined shell command banan/1" =
comm_err(<<"begin F=fun() -> hello end, banan(F) end.">>),
- ?line "{error,"++_ = t(<<"begin F=fun() -> hello end, c(F) end.">>),
- ?line "exception exit: restricted shell does not allow l(" ++ _ =
+ "{error,"++_ = t(<<"begin F=fun() -> hello end, c(F) end.">>),
+ "exception exit: restricted shell does not allow l(" ++ _ =
comm_err(<<"begin F=fun() -> hello end, l(F) end.">>),
- ?line "exception error: variable 'F' is unbound" =
+ "exception error: variable 'F' is unbound" =
comm_err(<<"begin F=fun() -> hello end, f(F), F end.">>),
- ?line [funkis] =
+ [funkis] =
scan(<<"begin F=fun() -> hello end, funkis(F) end.">>),
- ?line "exception exit: restricted shell does not allow apple(" ++ _ =
+ "exception exit: restricted shell does not allow apple(" ++ _ =
comm_err(<<"begin F=fun() -> hello end, apple(F) end.">>),
- ?line "exception exit: restricted shell stopped"=
+ "exception exit: restricted shell stopped"=
comm_err(<<"begin shell:stop_restricted() end.">>),
- ?line undefined =
+ undefined =
application:get_env(stdlib, restricted_shell),
- ?line (catch code:purge(user_default)),
- ?line true = (catch code:delete(user_default)),
+ (catch code:purge(user_default)),
+ true = (catch code:delete(user_default)),
ok.
-forget(doc) ->
- ["f/0 and f/1"];
-forget(suite) ->
- [];
+%% f/0 and f/1.
forget(Config) when is_list(Config) ->
%% f/0
- ?line [ok] = scan(<<"begin f() end.">>),
- ?line "1: variable 'A' is unbound" =
+ [ok] = scan(<<"begin f() end.">>),
+ "1: variable 'A' is unbound" =
comm_err(<<"A = 3, f(), A.">>),
- ?line [ok] = scan(<<"A = 3, A = f(), A.">>),
+ [ok] = scan(<<"A = 3, A = f(), A.">>),
%% f/1
- ?line [ok] = scan(<<"begin f(A) end.">>),
- ?line "1: variable 'A' is unbound" =
+ [ok] = scan(<<"begin f(A) end.">>),
+ "1: variable 'A' is unbound" =
comm_err(<<"A = 3, f(A), A.">>),
- ?line [ok] = scan(<<"A = 3, A = f(A), A.">>),
- ?line "exception error: no function clause matching call to f/1" =
+ [ok] = scan(<<"A = 3, A = f(A), A.">>),
+ "exception error: no function clause matching call to f/1" =
comm_err(<<"f(a).">>),
ok.
-records(doc) ->
- ["Test of the record support. OTP-5063."];
-records(suite) ->
- [];
+%% Test of the record support. OTP-5063.
records(Config) when is_list(Config) ->
%% rd/2
- ?line [{attribute,_,record,{bar,_}},ok] =
+ [{attribute,_,record,{bar,_}},ok] =
scan(<<"rd(foo,{bar}),
rd(bar,{foo = (#foo{})#foo.bar}),
rl(bar).">>),
- ?line "variable 'R' is unbound" = % used to work (before OTP-5878, R11B)
+ "variable 'R' is unbound" = % used to work (before OTP-5878, R11B)
exit_string(<<"rd(foo,{bar}),
R = #foo{},
rd(bar,{foo = R#foo.bar}).">>),
- ?line "exception error: no function clause matching call to rd/2" =
+ "exception error: no function clause matching call to rd/2" =
comm_err(<<"rd({foo},{bar}).">>),
- ?line "bad record declaration" = exit_string(<<"A = bar, rd(foo,A).">>),
- ?line [foo] = scan(<<"begin rd(foo,{bar}) end.">>),
- ?line "1: record foo undefined" =
+ "bad record declaration" = exit_string(<<"A = bar, rd(foo,A).">>),
+ [foo] = scan(<<"begin rd(foo,{bar}) end.">>),
+ "1: record foo undefined" =
comm_err(<<"begin rd(foo,{bar}), #foo{} end.">>),
- ?line ['f o o'] = scan(<<"rd('f o o', {bar}).">>),
- ?line [foo] = scan(<<"rd(foo,{bar}), rd(foo,{foo = #foo{}}).">>),
+ ['f o o'] = scan(<<"rd('f o o', {bar}).">>),
+ [foo] = scan(<<"rd(foo,{bar}), rd(foo,{foo = #foo{}}).">>),
%% rf/0,1
- ?line [_, {attribute,_,record,{foo,_}},ok] =
+ [_, {attribute,_,record,{foo,_}},ok] =
scan(<<"rf('_'). rd(foo,{bar}),rl().">>),
- ?line "1: record foo undefined" =
+ "1: record foo undefined" =
comm_err(<<"rd(foo,{bar}), #foo{}, rf(foo), #foo{}.">>),
- ?line [ok,{foo,undefined}] =
+ [ok,{foo,undefined}] =
scan(<<"rd(foo,{bar}), A = #foo{}, rf(foo). A.">>),
- ?line [_] = scan(<<"begin rf() end.">>),
- ?line [ok] = scan(<<"begin rf(foo) end.">>),
+ [_] = scan(<<"begin rf() end.">>),
+ [ok] = scan(<<"begin rf(foo) end.">>),
%% rp/1
- ?line "#foo{bar = undefined}.\nok.\n" =
+ "#foo{bar = undefined}.\nok.\n" =
t(<<"rd(foo,{bar}), rp(#foo{}).">>),
- ?line [{foo,3,4,3},ok] = scan(<<"rd(foo,{a = 3, b}), rp({foo,3,4,3}).">>),
- ?line "#foo{a = 12}.\nok.\n" = t(<<"rd(foo,{a = 3}), rp({foo,12}).">>),
- ?line [{[{foo}],12},ok] = scan(<<"rd(foo,{a = 3}), rp({[{foo}],12}).">>),
+ [{foo,3,4,3},ok] = scan(<<"rd(foo,{a = 3, b}), rp({foo,3,4,3}).">>),
+ "#foo{a = 12}.\nok.\n" = t(<<"rd(foo,{a = 3}), rp({foo,12}).">>),
+ [{[{foo}],12},ok] = scan(<<"rd(foo,{a = 3}), rp({[{foo}],12}).">>),
%% rr/1,2,3
MS = ?MODULE_STRING,
RR1 = "rr(" ++ MS ++ "). #state{}.",
- ?line "[state]\n"
+ "[state]\n"
"#state{bin = undefined,reply = undefined,leader = undefined,\n"
" unic = latin1}.\n" =
t(RR1),
RR2 = "rr(" ++ MS ++ ",[state]). #state{}.",
- ?line "[state]\n"
+ "[state]\n"
"#state{bin = undefined,reply = undefined,leader = undefined,\n"
" unic = latin1}.\n" =
t(RR2),
RR3 = "rr(" ++ MS ++ ",'_'). #state{}.",
- ?line "[state]\n"
+ "[state]\n"
"#state{bin = undefined,reply = undefined,leader = undefined,\n"
" unic = latin1}.\n" =
t(RR3),
RR4 = "rr(" ++ MS ++ ", '_', {d,test1}).",
- ?line [[state]] = scan(RR4),
+ [[state]] = scan(RR4),
- Test = filename:join(?config(priv_dir, Config), "test.erl"),
+ Test = filename:join(proplists:get_value(priv_dir, Config), "test.erl"),
Contents = <<"-module(test).
- -record(state, {bin, reply, leader}).
+ -record(state, {bin :: binary(),
+ reply = no,
+ leader = some :: atom()}).
-ifdef(test1).
-record(test1, {f}).
@@ -402,7 +387,7 @@ records(Config) when is_list(Config) ->
-ifdef(test2).
-record(test2, {g}).
-endif.">>,
- ?line ok = file:write_file(Test, Contents),
+ ok = file:write_file(Test, Contents),
RR5 = "rr(\"" ++ Test ++ "\", '_', {d,test1}), rl([test1,test2]).",
A1 = erl_anno:new(1),
@@ -413,164 +398,155 @@ records(Config) when is_list(Config) ->
"\", '_', [{d,test1},{d,test2,17}]), rl([test1,test2]).",
[{attribute,A1,record,{test1,_}},{attribute,A1,record,{test2,_}},ok] =
scan(RR7),
- ?line PreReply = scan(<<"rr(prim_file).">>), % preloaded...
- ?line true = is_list(PreReply),
- ?line Dir = filename:join(?config(priv_dir, Config), "*.erl"),
- ?line RR8 = "rp(rr(\"" ++ Dir ++ "\")).",
- ?line [_,ok] = scan(RR8),
+ PreReply = scan(<<"rr(prim_file).">>), % preloaded...
+ true = is_list(PreReply),
+ Dir = filename:join(proplists:get_value(priv_dir, Config), "*.erl"),
+ RR8 = "rp(rr(\"" ++ Dir ++ "\")).",
+ [_,ok] = scan(RR8),
file:delete(Test),
RR1000 = "begin rr(" ++ MS ++ ") end.",
- ?line [_] = scan(RR1000),
+ [_] = scan(RR1000),
RR1001 = "begin rr(" ++ MS ++ ", state) end.",
- ?line [_] = scan(RR1001),
+ [_] = scan(RR1001),
RR1002 = "begin rr(" ++ MS ++ ", state,{i,'.'}) end.",
- ?line [_] = scan(RR1002),
+ [_] = scan(RR1002),
- ?line [{error,nofile}] = scan(<<"rr(not_a_module).">>),
- ?line [{error,invalid_filename}] = scan(<<"rr({foo}).">>),
- ?line [[]] = scan(<<"rr(\"not_a_file\").">>),
+ [{error,nofile}] = scan(<<"rr(not_a_module).">>),
+ [{error,invalid_filename}] = scan(<<"rr({foo}).">>),
+ [[]] = scan(<<"rr(\"not_a_file\").">>),
%% using records
- ?line [2] = scan(<<"rd(foo,{bar}), record_info(size, foo).">>),
- ?line [true] = scan(<<"rd(foo,{bar}), is_record(#foo{}, foo).">>),
- ?line [true] = scan(<<"rd(foo,{bar}), erlang:is_record(#foo{}, foo).">>),
- ?line [true] = scan(<<"rd(foo,{bar}),
+ [2] = scan(<<"rd(foo,{bar}), record_info(size, foo).">>),
+ [true] = scan(<<"rd(foo,{bar}), is_record(#foo{}, foo).">>),
+ [true] = scan(<<"rd(foo,{bar}), erlang:is_record(#foo{}, foo).">>),
+ [true] = scan(<<"rd(foo,{bar}),
fun() when record(#foo{},foo) -> true end().">>),
- ?line [2] = scan(<<"rd(foo,{bar}), #foo.bar.">>),
- ?line "#foo{bar = 17}.\n" =
+ [2] = scan(<<"rd(foo,{bar}), #foo.bar.">>),
+ "#foo{bar = 17}.\n" =
t(<<"rd(foo,{bar}), A = #foo{}, A#foo{bar = 17}.">>),
%% test of is_record/2 in lc
- ?line "[#foo{bar = 3}].\n" =
+ "[#foo{bar = 3}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"is_record(X, foo)].">>),
- ?line "[x,[],{a,b}].\n" =
+ "[x,[],{a,b}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"not is_record(X, foo)].">>),
- ?line "[#foo{bar = 3}].\n" =
+ "[#foo{bar = 3}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"begin is_record(X, foo) end].">>),
- ?line "[x,[],{a,b}].\n" =
+ "[x,[],{a,b}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"begin not is_record(X, foo) end].">>),
- ?line "[#foo{bar = 3},x,[],{a,b}].\n" =
+ "[#foo{bar = 3},x,[],{a,b}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"is_record(X, foo) or not is_binary(X)].">>),
- ?line "[#foo{bar = 3},x,[],{a,b}].\n" =
+ "[#foo{bar = 3},x,[],{a,b}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"not is_record(X, foo) or not is_binary(X)].">>),
- ?line "[#foo{bar = 3}].\n" =
+ "[#foo{bar = 3}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"is_record(X, foo) or is_reference(X)].">>),
- ?line "[x,[],{a,b}].\n" =
+ "[x,[],{a,b}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"not is_record(X, foo) or is_reference(X)].">>),
- ?line "[#foo{bar = 3},x,[],{a,b}].\n" =
+ "[#foo{bar = 3},x,[],{a,b}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"begin is_record(X, foo) or not is_binary(X) end].">>),
- ?line "[#foo{bar = 3},x,[],{a,b}].\n" =
+ "[#foo{bar = 3},x,[],{a,b}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"begin not is_record(X, foo) or not is_binary(X) end].">>),
- ?line "[#foo{bar = 3}].\n" =
+ "[#foo{bar = 3}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"begin is_record(X, foo) or is_reference(X) end].">>),
- ?line "[x,[],{a,b}].\n" =
+ "[x,[],{a,b}].\n" =
t(<<"rd(foo,{bar}), [X || X <- [#foo{bar=3},x,[],{a,b}],"
"begin not is_record(X, foo) or is_reference(X) end].">>),
- ?line [ok] =
+ [ok] =
scan(<<"rd(a,{}), is_record({a},a) andalso true, b().">>),
%% nested record defs
- ?line "#b{a = #a{}}.\n" = t(<<"rd(a,{}), rd(b, {a = #a{}}), #b{}.">>),
+ "#b{a = #a{}}.\n" = t(<<"rd(a,{}), rd(b, {a = #a{}}), #b{}.">>),
- ?line [ok,ok,ok] = scan(<<"rf('_'), rp(rp(rl(rf(rf(rf(rl())))))).">>),
+ [ok,ok,ok] = scan(<<"rf('_'), rp(rp(rl(rf(rf(rf(rl())))))).">>),
ok.
-known_bugs(doc) ->
- ["Known bugs."];
-known_bugs(suite) ->
- [];
+%% Known bugs.
known_bugs(Config) when is_list(Config) ->
%% erl_eval:merge_bindings/2 cannot handle _removal_ of bindings.
- ?line [3] = scan(<<"A = 3, length(begin f(A), [3] end), A.">>),
+ [3] = scan(<<"A = 3, length(begin f(A), [3] end), A.">>),
ok.
-otp_5226(doc) ->
- ["OTP-5226. Wildcards accepted when reading BEAM files using rr/1,2,3."];
-otp_5226(suite) ->
- [];
+%% OTP-5226. Wildcards accepted when reading BEAM files using rr/1,2,3.
otp_5226(Config) when is_list(Config) ->
Test1 = <<"-module(test1).
-record('_test1', {a,b}).">>,
Test2 = <<"-module(test2).
-record('_test2', {c,d}).">>,
- ?line File1 = filename("test1.erl", Config),
- ?line File2 = filename("test2.erl", Config),
- ?line Beam = filename("*.beam", Config),
- ?line ok = compile_file(Config, File1, Test1, [no_debug_info]),
- ?line ok = compile_file(Config, File2, Test2, [no_debug_info]),
- RR = "rr(\"" ++ Beam ++ "\").",
- ?line [Recs] = scan(RR),
- ?line true = lists:member('_test1', Recs),
- ?line true = lists:member('_test2', Recs),
- file:delete(filename("test1.beam", Config)),
- file:delete(filename("test2.beam", Config)),
- file:delete(File1),
- file:delete(File2),
- ok.
-
-otp_5327(doc) ->
- ["OTP-5226. Test of eval_bits, mostly."];
-otp_5327(suite) ->
- [];
+ File1 = filename("test1.erl", Config),
+ File2 = filename("test2.erl", Config),
+ Beam = filename("*.beam", Config),
+ ok = compile_file(Config, File1, Test1, [no_debug_info]),
+ ok = compile_file(Config, File2, Test2, [no_debug_info]),
+ RR = "rr(\"" ++ Beam ++ "\").",
+ [Recs] = scan(RR),
+ true = lists:member('_test1', Recs),
+ true = lists:member('_test2', Recs),
+ file:delete(filename("test1.beam", Config)),
+ file:delete(filename("test2.beam", Config)),
+ file:delete(File1),
+ file:delete(File2),
+ ok.
+
+%% OTP-5226. Test of eval_bits, mostly.
otp_5327(Config) when is_list(Config) ->
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"<<\"hej\":default>>.">>),
- ?line <<"abc">> =
+ <<"abc">> =
erl_parse:normalise({bin,1,[{bin_element,1,{string,1,"abc"},
- default,default}]}),
- ?line [<<"abc">>] = scan(<<"<<(<<\"abc\">>):3/binary>>.">>),
- ?line [<<"abc">>] = scan(<<"<<(<<\"abc\">>)/binary>>.">>),
- ?line "exception error: bad argument" =
+ default,default}]}),
+ [<<"abc">>] = scan(<<"<<(<<\"abc\">>):3/binary>>.">>),
+ [<<"abc">>] = scan(<<"<<(<<\"abc\">>)/binary>>.">>),
+ "exception error: bad argument" =
comm_err(<<"<<(<<\"abc\">>):4/binary>>.">>),
- ?line true = byte_size(hd(scan("<<3.14:64/float>>."))) =:= 8,
- ?line true = byte_size(hd(scan("<<3.14:32/float>>."))) =:= 4,
- ?line "exception error: bad argument" =
+ true = byte_size(hd(scan("<<3.14:64/float>>."))) =:= 8,
+ true = byte_size(hd(scan("<<3.14:32/float>>."))) =:= 4,
+ "exception error: bad argument" =
comm_err(<<"<<3.14:128/float>>.">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"<<10:default>>.">>),
- ?line [<<98,1:1>>] = scan(<<"<<3:3,5:6>>.">>),
- ?line {'EXIT',{badarg,_}} =
+ [<<98,1:1>>] = scan(<<"<<3:3,5:6>>.">>),
+ {'EXIT',{badarg,_}} =
(catch erl_parse:normalise({bin,1,[{bin_element,1,{integer,1,17},
{atom,1,all},
default}]})),
- ?line [<<-20/signed>>] = scan(<<"<<-20/signed>> = <<-20>>.">>),
- ?line [<<-300:16/signed>>] =
- scan(<<"<<-300:16/signed>> = <<-300:16>>.">>),
- ?line [<<-1000:24/signed>>] =
- scan(<<"<<-1000:24/signed>> = <<-1000:24>>.">>),
- ?line [<<-(1 bsl 29):32/signed>>] =
+ [<<-20/signed>>] = scan(<<"<<-20/signed>> = <<-20>>.">>),
+ [<<-300:16/signed>>] =
+ scan(<<"<<-300:16/signed>> = <<-300:16>>.">>),
+ [<<-1000:24/signed>>] =
+ scan(<<"<<-1000:24/signed>> = <<-1000:24>>.">>),
+ [<<-(1 bsl 29):32/signed>>] =
scan(<<"<<-(1 bsl 29):32/signed>> = <<-(1 bsl 29):32>>.">>),
- ?line "exception error: no match of right hand side value <<0,0,0>>" =
+ "exception error: no match of right hand side value <<0,0,0>>" =
comm_err(<<"<<B:3/unit:7-binary,_/binary>> = <<0:24>>.">>),
- ?line true = [<<103133:64/float>>] =:=
+ true = [<<103133:64/float>>] =:=
scan(<<"<<103133:64/float>> = <<103133:64/float>>.">>),
- ?line true = [<<103133.0:64/float>>] =:=
+ true = [<<103133.0:64/float>>] =:=
scan(<<"<<103133.0:64/float>> = <<103133:64/float>>.">>),
- ?line true = [<<103133:64/float>>] =:= scan(<<"<<103133:64/float>>.">>),
+ true = [<<103133:64/float>>] =:= scan(<<"<<103133:64/float>>.">>),
Int = 17,
- ?line true = [<<Int:64/float>>] =:= scan(<<"Int = 17, <<Int:64/float>>.">>),
- ?line "exception error: no match of right hand side value" ++ _ =
+ true = [<<Int:64/float>>] =:= scan(<<"Int = 17, <<Int:64/float>>.">>),
+ "exception error: no match of right hand side value" ++ _ =
comm_err(<<"<<103133:64/binary>> = <<103133:64/float>>.">>),
- ?line "exception error: interpreted function with arity 1 called with two arguments" =
+ "exception error: interpreted function with arity 1 called with two arguments" =
comm_err(<<"(fun(X) -> X end)(a,b).">>),
- ?line {'EXIT', {{illegal_pattern,_}, _}} =
+ {'EXIT', {{illegal_pattern,_}, _}} =
(catch evaluate("<<A:a>> = <<17:32>>.", [])),
C = <<"
<<A:4,B:4,C:4,D:4,E:4,F:4>> = <<\"hej\">>,
@@ -579,60 +555,54 @@ otp_5327(Config) when is_list(Config) ->
_ -> 2
end.
">>,
- ?line 1 = evaluate(C, []),
+ 1 = evaluate(C, []),
%% unbound_var would be nicer...
- ?line {'EXIT',{{illegal_pattern,_},_}} =
+ {'EXIT',{{illegal_pattern,_},_}} =
(catch evaluate(<<"<<A:B>> = <<17:32>>.">>, [])),
%% undefined_bittype is turned into badmatch:
- ?line {'EXIT',{{badmatch,<<17:32>>},_}} =
+ {'EXIT',{{badmatch,<<17:32>>},_}} =
(catch evaluate(<<"<<A/apa>> = <<17:32>>.">>, [])),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch evaluate(<<"<<17/binary-unit:8-unit:16>>.">>, [])),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch evaluate(<<"<<17:32/unsigned-signed>> = <<17:32>>.">>, [])),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch evaluate(<<"<<17:32/unsigned-signed>>.">>, [])),
- ?line <<17:32>> = evaluate(<<"<<17:32/signed-signed>>.">>, []),
- ?line {'EXIT',_} =
+ <<17:32>> = evaluate(<<"<<17:32/signed-signed>>.">>, []),
+ {'EXIT',_} =
(catch evaluate(<<"<<32/unit:8>>.">>, [])),
ok.
-otp_5435(doc) ->
- ["OTP-5435. sys_pre_expand not in the path."];
-otp_5435(suite) ->
- [];
+%% OTP-5435. sys_pre_expand not in the path.
otp_5435(Config) when is_list(Config) ->
- ?line true = <<103133:64/float>> =:=
+ true = <<103133:64/float>> =:=
evaluate(<<"<<103133:64/float>> = <<103133:64/float>>.">>, []),
- ?line true = <<103133.0:64/float>> =:=
+ true = <<103133.0:64/float>> =:=
evaluate(<<"<<103133.0:64/float>> = <<103133:64/float>>.">>, []),
- ?line true = is_alive(),
- ?line {ok, Node} = start_node(shell_SUITE_otp_5435),
- ?line ok = rpc:call(Node, ?MODULE, otp_5435_2, []),
- ?line ?t:stop_node(Node),
+ true = is_alive(),
+ {ok, Node} = start_node(shell_SUITE_otp_5435),
+ ok = rpc:call(Node, ?MODULE, otp_5435_2, []),
+ test_server:stop_node(Node),
ok.
-
+
start_node(Name) ->
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?t:start_node(Name, slave, [{args, "-pa " ++ PA}]).
+ PA = filename:dirname(code:which(?MODULE)),
+ test_server:start_node(Name, slave, [{args, "-pa " ++ PA}]).
otp_5435_2() ->
- ?line true = code:del_path(compiler),
+ true = code:del_path(compiler),
%% sys_pre_expand can no longer be found
%% OTP-5876. But erl_expand_records can!
- ?line [{attribute,_,record,{bar,_}},ok] =
+ [{attribute,_,record,{bar,_}},ok] =
scan(<<"rd(foo,{bar}),
rd(bar,{foo = (#foo{})#foo.bar}),
- rl(bar).">>),
+ rl(bar).">>),
ok.
-otp_5195(doc) ->
- ["OTP-5195. QLC, mostly."];
-otp_5195(suite) ->
- [];
+%% OTP-5195. QLC, mostly.
otp_5195(Config) when is_list(Config) ->
%% QLC. It was easier to put these cases here than in qlc_SUITE.
- ?line "[#a{b = undefined}].\n" =
+ "[#a{b = undefined}].\n" =
t(<<"rd(a,{b}), qlc:e(qlc:q([X || X <- [#a{}],is_record(X, a)])).">>),
%% An experimental shell used to translate error tuples:
@@ -640,570 +610,556 @@ otp_5195(Config) when is_list(Config) ->
%% "list expression\".\n" =
%% t(<<"qlc:q([X || X <- [{a}], Y <- [X]]).">>),
%% Same as last one (if the shell does not translate error tuples):
- ?line [{error,qlc,{1,qlc,{used_generator_variable,'X'}}}] =
+ [{error,qlc,{1,qlc,{used_generator_variable,'X'}}}] =
scan(<<"qlc:q([X || X <- [{a}], Y <- [X]]).">>),
- ?line {error,qlc,{1,qlc,{used_generator_variable,'X'}}} =
+ {error,qlc,{1,qlc,{used_generator_variable,'X'}}} =
evaluate(<<"qlc:q([X || X <- [{a}], Y <- [X]]).">>, []),
Ugly = <<"qlc:e(qlc:q([X || X <- qlc:append([[1,2,3],ugly()])])).">>,
- ?line "undefined shell command ugly/0" = error_string(Ugly),
- ?line {'EXIT',{undef,_}} = (catch evaluate(Ugly, [])),
+ "undefined shell command ugly/0" = error_string(Ugly),
+ {'EXIT',{undef,_}} = (catch evaluate(Ugly, [])),
V_1 = <<"qlc:e(qlc:q([X || X <- qlc:append([[1,2,3],v(-1)])])).">>,
- ?line "- 1: command not found" = comm_err(V_1),
- ?line {'EXIT', {undef,_}} = (catch evaluate(V_1, [])),
+ "- 1: command not found" = comm_err(V_1),
+ {'EXIT', {undef,_}} = (catch evaluate(V_1, [])),
- ?line "1\n2\n3\n3.\n" =
+ "1\n2\n3\n3.\n" =
t(<<"1. 2. 3. 3 = fun(A) when A =:= 2 -> v(3) end(v(2)).">>),
- ?line List4 = t(<<"[a,list]. A = [1,2]. "
- "qlc:q([X || X <- qlc:append(A, v(1))]). "
- "[1,2,a,list] = qlc:e(v(-1)).">>),
- ?line "[1,2,a,list].\n" = string:substr(List4, string:len(List4)-13),
+ List4 = t(<<"[a,list]. A = [1,2]. "
+ "qlc:q([X || X <- qlc:append(A, v(1))]). "
+ "[1,2,a,list] = qlc:e(v(-1)).">>),
+ "[1,2,a,list].\n" = string:substr(List4, string:len(List4)-13),
ok.
-otp_5915(doc) ->
- ["OTP-5915. Strict record tests in guards."];
-otp_5915(suite) ->
- [];
+%% OTP-5915. Strict record tests in guards.
otp_5915(Config) when is_list(Config) ->
C = <<"
rd(r, {a = 4,b}),
- rd(r1, {a,b}),
- rd(r2, {a = #r1{},b,c=length([1,2,3])}),
- rd(r3, {a = fun(_) -> #r1{} end(1), b}),
-
- foo = fun(A) when A#r1.a > A#r1.b -> foo end(#r1{b = 2}),
- 0 = fun(A) when A#r2.a -> 0 end(#r2{a = true}),
- 1 = fun(A) when (#r1{a = A})#r1.a > 2 -> 1 end(3),
- 2 = fun(N) when ((#r2{a = #r{a = 4}, b = length([a,b,c])})#r2.a)#r.a > N ->
- 2 end(2),
- 3 = fun(A) when (A#r2.a)#r1.a =:= 3 -> 3 end(#r2{a = #r1{a = 3}}),
- ok = fun() ->
- F = fun(A) when record(A#r.a, r1) -> 4;
- (A) when record(A#r1.a, r1) -> 5
- end,
- 5 = F(#r1{a = #r1{}}),
- 4 = F(#r{a = #r1{}}),
- ok
- end(),
- 3 = fun(A) when record(A#r1.a, r),
- (A#r1.a)#r.a > 3 -> 3
- end(#r1{a = #r{a = 4}}),
- 7 = fun(A) when record(A#r3.a, r1) -> 7 end(#r3{}),
- [#r1{a = 2,b = 1}] =
- fun() ->
- [A || A <- [#r1{a = 1, b = 3},
- #r2{a = 2,b = 1},
- #r1{a = 2, b = 1}],
- A#r1.a >
- A#r1.b]
- end(),
- {[_],b} =
- fun(L) ->
+ rd(r1, {a,b}),
+ rd(r2, {a = #r1{},b,c=length([1,2,3])}),
+ rd(r3, {a = fun(_) -> #r1{} end(1), b}),
+
+ foo = fun(A) when A#r1.a > A#r1.b -> foo end(#r1{b = 2}),
+ 0 = fun(A) when A#r2.a -> 0 end(#r2{a = true}),
+ 1 = fun(A) when (#r1{a = A})#r1.a > 2 -> 1 end(3),
+ 2 = fun(N) when ((#r2{a = #r{a = 4}, b = length([a,b,c])})#r2.a)#r.a > N ->
+ 2 end(2),
+ 3 = fun(A) when (A#r2.a)#r1.a =:= 3 -> 3 end(#r2{a = #r1{a = 3}}),
+ ok = fun() ->
+ F = fun(A) when record(A#r.a, r1) -> 4;
+ (A) when record(A#r1.a, r1) -> 5
+ end,
+ 5 = F(#r1{a = #r1{}}),
+ 4 = F(#r{a = #r1{}}),
+ ok
+ end(),
+ 3 = fun(A) when record(A#r1.a, r),
+ (A#r1.a)#r.a > 3 -> 3
+ end(#r1{a = #r{a = 4}}),
+ 7 = fun(A) when record(A#r3.a, r1) -> 7 end(#r3{}),
+ [#r1{a = 2,b = 1}] =
+ fun() ->
+ [A || A <- [#r1{a = 1, b = 3},
+ #r2{a = 2,b = 1},
+ #r1{a = 2, b = 1}],
+ A#r1.a >
+ A#r1.b]
+ end(),
+ {[_],b} =
+ fun(L) ->
%% A is checked only once:
- R1 = [{A,B} || A <- L, A#r1.a, B <- L, A#r1.b],
- A = #r2{a = true},
+ R1 = [{A,B} || A <- L, A#r1.a, B <- L, A#r1.b],
+ A = #r2{a = true},
%% A is checked again:
- B = if A#r1.a -> a; true -> b end,
- {R1,B}
- end([#r1{a = true, b = true}]),
-
- p = fun(A) when (A#r1.a =:= 2) or (A#r2.a =:= 1) -> o;
- (_) -> p
- end(#r1{a = 2}),
-
- o = fun(A) when (A#r1.a =:= 2) orelse (A#r2.a =:= 1) -> o;
- (_) -> p
- end(#r1{a = 2}),
-
- 3 = fun(A) when A#r1.a > 3,
- record(A, r1) -> 3
- end(#r1{a = 5}),
-
- ok = fun() ->
- F = fun(A) when (A#r2.a =:= 1) orelse (A#r2.a) -> 2;
- (A) when (A#r1.a =:= 1) orelse (A#r1.a) -> 1;
- (A) when (A#r2.a =:= 2) andalso (A#r2.b) -> 3
- end,
- 1 = F(#r1{a = 1}),
- 2 = F(#r2{a = true}),
- 3 = F(#r2{a = 2, b = true}),
- ok
- end(),
-
- b = fun(A) when false or not (A#r.a =:= 1) -> a;
- (_) -> b
- end(#r1{a = 1}),
- b = fun(A) when not (A#r.a =:= 1) or false -> a;
- (_) -> b
- end(#r1{a = 1}),
-
- ok = fun() ->
- F = fun(A) when not (A#r.a =:= 1) -> yes;
- (_) -> no
- end,
- no = F(#r1{a = 2}),
- yes = F(#r{a = 2}),
- no = F(#r{a = 1}),
- ok
- end(),
-
- a = fun(A) when record(A, r),
- A#r.a =:= 1,
- A#r.b =:= 2 ->a
- end(#r{a = 1, b = 2}),
- a = fun(A) when erlang:is_record(A, r),
- A#r.a =:= 1,
- A#r.b =:= 2 -> a
- end(#r{a = 1, b = 2}),
- a = fun(A) when is_record(A, r),
- A#r.a =:= 1,
- A#r.b =:= 2 -> a
- end(#r{a = 1, b = 2}),
-
- nop = fun(A) when (is_record(A, r1) and (A#r1.a > 3)) or (A#r2.a < 1) ->
- japp;
- (_) ->
- nop
- end(#r2{a = 0}),
- nop = fun(A) when (A#r1.a > 3) or (A#r2.a < 1) -> japp;
- (_) ->
- nop
- end(#r2{a = 0}),
-
- ok = fun() ->
- F = fun(A) when (A#r1.a =:= 2) or (A#r2.a =:= 1) -> o;
- (_) -> p
- end,
- p = F(#r2{a = 1}),
- p = F(#r1{a = 2}),
- ok
- end(),
-
- ok = fun() ->
- F = fun(A) when fail, A#r1.a; A#r1.a -> ab;
- (_) -> bu
- end,
- ab = F(#r1{a = true}),
- bu = F(#r2{a = true}),
- ok
- end(),
-
- both = fun(A) when A#r.a, A#r.b -> both
- end(#r{a = true, b = true}),
-
- ok = fun() ->
- F = fun(A, B) when ((A#r1.a) orelse (B#r2.a))
- or (B#r2.b) or (A#r1.b) -> true;
- (_, _) -> false
- end,
- true = F(#r1{a = false, b = false}, #r2{a = false, b = true}),
- false = F(#r1{a = true, b = true}, #r1{a = false, b = true}),
- ok
- end(),
-
- ok.">>,
+ B = if A#r1.a -> a; true -> b end,
+ {R1,B}
+ end([#r1{a = true, b = true}]),
+
+ p = fun(A) when (A#r1.a =:= 2) or (A#r2.a =:= 1) -> o;
+ (_) -> p
+ end(#r1{a = 2}),
+
+ o = fun(A) when (A#r1.a =:= 2) orelse (A#r2.a =:= 1) -> o;
+ (_) -> p
+ end(#r1{a = 2}),
+
+ 3 = fun(A) when A#r1.a > 3,
+ record(A, r1) -> 3
+ end(#r1{a = 5}),
+
+ ok = fun() ->
+ F = fun(A) when (A#r2.a =:= 1) orelse (A#r2.a) -> 2;
+ (A) when (A#r1.a =:= 1) orelse (A#r1.a) -> 1;
+ (A) when (A#r2.a =:= 2) andalso (A#r2.b) -> 3
+ end,
+ 1 = F(#r1{a = 1}),
+ 2 = F(#r2{a = true}),
+ 3 = F(#r2{a = 2, b = true}),
+ ok
+ end(),
+
+ b = fun(A) when false or not (A#r.a =:= 1) -> a;
+ (_) -> b
+ end(#r1{a = 1}),
+ b = fun(A) when not (A#r.a =:= 1) or false -> a;
+ (_) -> b
+ end(#r1{a = 1}),
+
+ ok = fun() ->
+ F = fun(A) when not (A#r.a =:= 1) -> yes;
+ (_) -> no
+ end,
+ no = F(#r1{a = 2}),
+ yes = F(#r{a = 2}),
+ no = F(#r{a = 1}),
+ ok
+ end(),
+
+ a = fun(A) when record(A, r),
+ A#r.a =:= 1,
+ A#r.b =:= 2 ->a
+ end(#r{a = 1, b = 2}),
+ a = fun(A) when erlang:is_record(A, r),
+ A#r.a =:= 1,
+ A#r.b =:= 2 -> a
+ end(#r{a = 1, b = 2}),
+ a = fun(A) when is_record(A, r),
+ A#r.a =:= 1,
+ A#r.b =:= 2 -> a
+ end(#r{a = 1, b = 2}),
+
+ nop = fun(A) when (is_record(A, r1) and (A#r1.a > 3)) or (A#r2.a < 1) ->
+ japp;
+ (_) ->
+ nop
+ end(#r2{a = 0}),
+ nop = fun(A) when (A#r1.a > 3) or (A#r2.a < 1) -> japp;
+ (_) ->
+ nop
+ end(#r2{a = 0}),
+
+ ok = fun() ->
+ F = fun(A) when (A#r1.a =:= 2) or (A#r2.a =:= 1) -> o;
+ (_) -> p
+ end,
+ p = F(#r2{a = 1}),
+ p = F(#r1{a = 2}),
+ ok
+ end(),
+
+ ok = fun() ->
+ F = fun(A) when fail, A#r1.a; A#r1.a -> ab;
+ (_) -> bu
+ end,
+ ab = F(#r1{a = true}),
+ bu = F(#r2{a = true}),
+ ok
+ end(),
+
+ both = fun(A) when A#r.a, A#r.b -> both
+ end(#r{a = true, b = true}),
+
+ ok = fun() ->
+ F = fun(A, B) when ((A#r1.a) orelse (B#r2.a))
+ or (B#r2.b) or (A#r1.b) -> true;
+ (_, _) -> false
+ end,
+ true = F(#r1{a = false, b = false}, #r2{a = false, b = true}),
+ false = F(#r1{a = true, b = true}, #r1{a = false, b = true}),
+ ok
+ end(),
+
+ ok.">>,
[ok] = scan(C),
- ok.
+ ok.
-otp_5916(doc) ->
- ["OTP-5916. erlang:is_record/3 allowed in guards."];
-otp_5916(suite) ->
- [];
+%% OTP-5916. erlang:is_record/3 allowed in guards.
otp_5916(Config) when is_list(Config) ->
C = <<"
rd(r1, {a,b}),
- rd(r2, {a,b}),
+ rd(r2, {a,b}),
- true = if erlang:is_record(#r1{},r1,3) -> true; true -> false end,
- false = if erlang:is_record(#r2{},r1,3) -> true; true -> false end,
+ true = if erlang:is_record(#r1{},r1,3) -> true; true -> false end,
+ false = if erlang:is_record(#r2{},r1,3) -> true; true -> false end,
- true = if is_record(#r1{},r1,3) -> true; true -> false end,
- false = if is_record(#r2{},r1,3) -> true; true -> false end,
+ true = if is_record(#r1{},r1,3) -> true; true -> false end,
+ false = if is_record(#r2{},r1,3) -> true; true -> false end,
- ok.">>,
+ ok.">>,
[ok] = scan(C),
- ok.
+ ok.
-bs_match_misc_SUITE(doc) ->
- ["OTP-5327. Adopted from parts of emulator/test/bs_match_misc_SUITE.erl."];
-bs_match_misc_SUITE(suite) ->
- [];
+%% OTP-5327. Adopted from parts of emulator/test/bs_match_misc_SUITE.erl.
bs_match_misc_SUITE(Config) when is_list(Config) ->
C = <<"
F1 = fun() -> 3.1415 end,
- FOne = fun() -> 1.0 end,
-
- Fcmp = fun(F1, F2) when (F1 - F2) / F2 < 0.0000001 -> ok end,
-
- MakeSubBin = fun(Bin0) ->
- Sz = size(Bin0),
- Bin1 = <<37,Bin0/binary,38,39>>,
- <<_:8,Bin:Sz/binary,_:8,_:8>> = Bin1,
- Bin
- end,
-
- MatchFloat =
- fun(Bin0, Fsz, I) ->
- Bin = MakeSubBin(Bin0),
- Bsz = size(Bin) * 8,
- Tsz = Bsz - Fsz - I,
- <<_:I,F:Fsz/float,_:Tsz>> = Bin,
- F
- end,
-
- TFloat = fun() ->
- F = F1(),
- G = FOne(),
-
- G = MatchFloat(<<63,128,0,0>>, 32, 0),
- G = MatchFloat(<<63,240,0,0,0,0,0,0>>, 64, 0),
-
- Fcmp(F, MatchFloat(<<F:32/float>>, 32, 0)),
- Fcmp(F, MatchFloat(<<F:64/float>>, 64, 0)),
- Fcmp(F, MatchFloat(<<1:1,F:32/float,127:7>>, 32, 1)),
- Fcmp(F, MatchFloat(<<1:1,F:64/float,127:7>>, 64, 1)),
- Fcmp(F, MatchFloat(<<1:13,F:32/float,127:3>>, 32, 13)),
- Fcmp(F, MatchFloat(<<1:13,F:64/float,127:3>>, 64, 13))
- end,
- TFloat(),
-
- F2 = fun() -> 2.7133 end,
-
- MatchFloatLittle = fun(Bin0, Fsz, I) ->
- Bin = MakeSubBin(Bin0),
- Bsz = size(Bin) * 8,
- Tsz = Bsz - Fsz - I,
- <<_:I,F:Fsz/float-little,_:Tsz>> = Bin,
- F
- end,
-
- LittleFloat = fun() ->
- F = F2(),
- G = FOne(),
-
- G = MatchFloatLittle(<<0,0,0,0,0,0,240,63>>, 64, 0),
- G = MatchFloatLittle(<<0,0,128,63>>, 32, 0),
-
- Fcmp(F, MatchFloatLittle(<<F:32/float-little>>, 32, 0)),
- Fcmp(F, MatchFloatLittle(<<F:64/float-little>>, 64, 0)),
- Fcmp(F, MatchFloatLittle(<<1:1,F:32/float-little,127:7>>, 32, 1)),
- Fcmp(F, MatchFloatLittle(<<1:1,F:64/float-little,127:7>>, 64, 1)),
- Fcmp(F, MatchFloatLittle(<<1:13,F:32/float-little,127:3>>, 32, 13)),
- Fcmp(F, MatchFloatLittle(<<1:13,F:64/float-little,127:3>>, 64, 13))
- end,
- LittleFloat(),
-
- Sean1 = fun(<<B/binary>>) when size(B) < 4 -> small;
- (<<1, _B/binary>>) -> large
- end,
-
- Sean = fun() ->
- small = Sean1(<<>>),
- small = Sean1(<<1>>),
- small = Sean1(<<1,2>>),
- small = Sean1(<<1,2,3>>),
- large = Sean1(<<1,2,3,4>>),
-
- small = Sean1(<<4>>),
- small = Sean1(<<4,5>>),
- small = Sean1(<<4,5,6>>),
- {'EXIT',{function_clause,_}} = (catch Sean1(<<4,5,6,7>>))
- end,
- Sean(),
-
- NativeBig = fun() ->
- <<37.33:64/native-float>> = <<37.33:64/big-float>>,
- <<3974:16/native-integer>> = <<3974:16/big-integer>>
- end,
-
- NativeLittle = fun() ->
- <<37869.32343:64/native-float>> = <<37869.32343:64/little-float>>,
- <<7974:16/native-integer>> = <<7974:16/little-integer>>
- end,
-
- Native = fun() ->
- <<3.14:64/native-float>> = <<3.14:64/native-float>>,
- <<333:16/native>> = <<333:16/native>>,
- <<38658345:32/native>> = <<38658345:32/native>>,
- case <<1:16/native>> of
- <<0,1>> -> NativeBig();
- <<1,0>> -> NativeLittle()
- end
+ FOne = fun() -> 1.0 end,
+
+ Fcmp = fun(F1, F2) when (F1 - F2) / F2 < 0.0000001 -> ok end,
+
+ MakeSubBin = fun(Bin0) ->
+ Sz = size(Bin0),
+ Bin1 = <<37,Bin0/binary,38,39>>,
+ <<_:8,Bin:Sz/binary,_:8,_:8>> = Bin1,
+ Bin
+ end,
+
+ MatchFloat =
+ fun(Bin0, Fsz, I) ->
+ Bin = MakeSubBin(Bin0),
+ Bsz = size(Bin) * 8,
+ Tsz = Bsz - Fsz - I,
+ <<_:I,F:Fsz/float,_:Tsz>> = Bin,
+ F
+ end,
+
+ TFloat = fun() ->
+ F = F1(),
+ G = FOne(),
+
+ G = MatchFloat(<<63,128,0,0>>, 32, 0),
+ G = MatchFloat(<<63,240,0,0,0,0,0,0>>, 64, 0),
+
+ Fcmp(F, MatchFloat(<<F:32/float>>, 32, 0)),
+ Fcmp(F, MatchFloat(<<F:64/float>>, 64, 0)),
+ Fcmp(F, MatchFloat(<<1:1,F:32/float,127:7>>, 32, 1)),
+ Fcmp(F, MatchFloat(<<1:1,F:64/float,127:7>>, 64, 1)),
+ Fcmp(F, MatchFloat(<<1:13,F:32/float,127:3>>, 32, 13)),
+ Fcmp(F, MatchFloat(<<1:13,F:64/float,127:3>>, 64, 13))
+ end,
+ TFloat(),
+
+ F2 = fun() -> 2.7133 end,
+
+ MatchFloatLittle = fun(Bin0, Fsz, I) ->
+ Bin = MakeSubBin(Bin0),
+ Bsz = size(Bin) * 8,
+ Tsz = Bsz - Fsz - I,
+ <<_:I,F:Fsz/float-little,_:Tsz>> = Bin,
+ F
+ end,
+
+ LittleFloat = fun() ->
+ F = F2(),
+ G = FOne(),
+
+ G = MatchFloatLittle(<<0,0,0,0,0,0,240,63>>, 64, 0),
+ G = MatchFloatLittle(<<0,0,128,63>>, 32, 0),
+
+ Fcmp(F, MatchFloatLittle(<<F:32/float-little>>, 32, 0)),
+ Fcmp(F, MatchFloatLittle(<<F:64/float-little>>, 64, 0)),
+ Fcmp(F, MatchFloatLittle(<<1:1,F:32/float-little,127:7>>, 32, 1)),
+ Fcmp(F, MatchFloatLittle(<<1:1,F:64/float-little,127:7>>, 64, 1)),
+ Fcmp(F, MatchFloatLittle(<<1:13,F:32/float-little,127:3>>, 32, 13)),
+ Fcmp(F, MatchFloatLittle(<<1:13,F:64/float-little,127:3>>, 64, 13))
+ end,
+ LittleFloat(),
+
+ Sean1 = fun(<<B/binary>>) when size(B) < 4 -> small;
+ (<<1, _B/binary>>) -> large
+ end,
+
+ Sean = fun() ->
+ small = Sean1(<<>>),
+ small = Sean1(<<1>>),
+ small = Sean1(<<1,2>>),
+ small = Sean1(<<1,2,3>>),
+ large = Sean1(<<1,2,3,4>>),
+
+ small = Sean1(<<4>>),
+ small = Sean1(<<4,5>>),
+ small = Sean1(<<4,5,6>>),
+ {'EXIT',{function_clause,_}} = (catch Sean1(<<4,5,6,7>>))
+ end,
+ Sean(),
+
+ NativeBig = fun() ->
+ <<37.33:64/native-float>> = <<37.33:64/big-float>>,
+ <<3974:16/native-integer>> = <<3974:16/big-integer>>
+ end,
+
+ NativeLittle = fun() ->
+ <<37869.32343:64/native-float>> = <<37869.32343:64/little-float>>,
+ <<7974:16/native-integer>> = <<7974:16/little-integer>>
+ end,
+
+ Native = fun() ->
+ <<3.14:64/native-float>> = <<3.14:64/native-float>>,
+ <<333:16/native>> = <<333:16/native>>,
+ <<38658345:32/native>> = <<38658345:32/native>>,
+ case <<1:16/native>> of
+ <<0,1>> -> NativeBig();
+ <<1,0>> -> NativeLittle()
+ end
+ end,
+ Native(),
+
+ Split = fun(<<N:16,B:N/binary,T/binary>>) -> {B,T} end,
+
+ Split2 = fun(N, <<N:16,B:N/binary,T/binary>>) -> {B,T} end,
+
+ Split_2 = fun(<<N0:8,N:N0,B:N/binary,T/binary>>) -> {B,T} end,
+
+ Skip = fun(<<N:8,_:N/binary,T/binary>>) -> T end,
+
+ SizeVar = fun() ->
+ {<<45>>,<<>>} = Split(<<1:16,45>>),
+ {<<45>>,<<46,47>>} = Split(<<1:16,45,46,47>>),
+ {<<45,46>>,<<47>>} = Split(<<2:16,45,46,47>>),
+
+ {<<45,46,47>>,<<48>>} = Split_2(<<16:8,3:16,45,46,47,48>>),
+
+ {<<45,46>>,<<47>>} = Split2(2, <<2:16,45,46,47>>),
+ {'EXIT',{function_clause,_}} =
+ (catch Split2(42, <<2:16,45,46,47>>)),
+
+ <<\"cdef\">> = Skip(<<2:8,\"abcdef\">>)
end,
- Native(),
-
- Split = fun(<<N:16,B:N/binary,T/binary>>) -> {B,T} end,
-
- Split2 = fun(N, <<N:16,B:N/binary,T/binary>>) -> {B,T} end,
-
- Split_2 = fun(<<N0:8,N:N0,B:N/binary,T/binary>>) -> {B,T} end,
-
- Skip = fun(<<N:8,_:N/binary,T/binary>>) -> T end,
-
- SizeVar = fun() ->
- {<<45>>,<<>>} = Split(<<1:16,45>>),
- {<<45>>,<<46,47>>} = Split(<<1:16,45,46,47>>),
- {<<45,46>>,<<47>>} = Split(<<2:16,45,46,47>>),
-
- {<<45,46,47>>,<<48>>} = Split_2(<<16:8,3:16,45,46,47,48>>),
-
- {<<45,46>>,<<47>>} = Split2(2, <<2:16,45,46,47>>),
- {'EXIT',{function_clause,_}} =
- (catch Split2(42, <<2:16,45,46,47>>)),
-
- <<\"cdef\">> = Skip(<<2:8,\"abcdef\">>)
- end,
- SizeVar(),
-
- Wcheck = fun(<<A>>) when A==3-> ok1;
- (<<_,_:2/binary>>) -> ok2;
- (<<_>>) -> ok3;
- (Other) -> {error,Other}
- end,
-
- Wiger = fun() ->
- ok1 = Wcheck(<<3>>),
- ok2 = Wcheck(<<1,2,3>>),
- ok3 = Wcheck(<<4>>),
- {error,<<1,2,3,4>>} = Wcheck(<<1,2,3,4>>),
- {error,<<>>} = Wcheck(<<>>)
- end,
- Wiger(),
-
- ok.
- ">>,
+ SizeVar(),
+
+ Wcheck = fun(<<A>>) when A==3-> ok1;
+ (<<_,_:2/binary>>) -> ok2;
+ (<<_>>) -> ok3;
+ (Other) -> {error,Other}
+ end,
+
+ Wiger = fun() ->
+ ok1 = Wcheck(<<3>>),
+ ok2 = Wcheck(<<1,2,3>>),
+ ok3 = Wcheck(<<4>>),
+ {error,<<1,2,3,4>>} = Wcheck(<<1,2,3,4>>),
+ {error,<<>>} = Wcheck(<<>>)
+ end,
+ Wiger(),
+
+ ok.
+">>,
[ok] = scan(C),
- ok = evaluate(C, []).
+ok = evaluate(C, []).
%% This one is not run during night builds since it takes several minutes.
-bs_match_int_SUITE(doc) ->
- ["OTP-5327. Adopted from emulator/test/bs_match_int_SUITE.erl."];
-bs_match_int_SUITE(suite) ->
- [];
+
+%% OTP-5327. Adopted from emulator/test/bs_match_int_SUITE.erl.
bs_match_int_SUITE(Config) when is_list(Config) ->
C = <<"
FunClause = fun({'EXIT',{function_clause,_}}) -> ok end,
- Mkbin = fun(L) when list(L) -> list_to_binary(L) end,
-
- GetInt1 = fun(<<I:0>>) -> I;
- (<<I:8>>) -> I;
- (<<I:16>>) -> I;
- (<<I:24>>) -> I;
- (<<I:32>>) -> I
- end,
-
- GetInt2 = fun(Bin0, I, F) when size(Bin0) < 4 ->
- Bin = <<0,Bin0/binary>>,
- I = GetInt1(Bin),
- F(Bin, I, F);
- (_, I, _F) -> I
- end,
-
- GetInt = fun(Bin) ->
- I = GetInt1(Bin),
- GetInt2(Bin, I, GetInt2)
- end,
-
-
- Cmp128 = fun(<<I:128>>, I) -> equal;
- (_, _) -> not_equal
- end,
-
- Uint2 = fun([H|T], Acc, F) -> F(T, Acc bsl 8 bor H, F);
- ([], Acc, _F) -> Acc
- end,
-
- Uint = fun(L) -> Uint2(L, 0, Uint2) end,
-
- Integer = fun() ->
- 0 = GetInt(Mkbin([])),
- 0 = GetInt(Mkbin([0])),
- 42 = GetInt(Mkbin([42])),
- 255 = GetInt(Mkbin([255])),
- 256 = GetInt(Mkbin([1,0])),
- 257 = GetInt(Mkbin([1,1])),
- 258 = GetInt(Mkbin([1,2])),
- 258 = GetInt(Mkbin([1,2])),
- 65534 = GetInt(Mkbin([255,254])),
- 16776455 = GetInt(Mkbin([255,253,7])),
- 4245492555 = GetInt(Mkbin([253,13,19,75])),
- 4294967294 = GetInt(Mkbin([255,255,255,254])),
- 4294967295 = GetInt(Mkbin([255,255,255,255])),
- Eight = [200,1,19,128,222,42,97,111],
- Cmp128(Eight, Uint(Eight)),
- FunClause(catch GetInt(Mkbin(lists:seq(1,5))))
- end,
- Integer(),
-
- Sint = fun(Bin) ->
- case Bin of
- <<I:8/signed>> -> I;
- <<I:8/signed,_:3,_:5>> -> I;
- Other -> {no_match,Other}
- end
- end,
-
- SignedInteger = fun() ->
- {no_match,_} = Sint(Mkbin([])),
- {no_match,_} = Sint(Mkbin([1,2,3])),
- 127 = Sint(Mkbin([127])),
- -1 = Sint(Mkbin([255])),
- -128 = Sint(Mkbin([128])),
- 42 = Sint(Mkbin([42,255])),
- 127 = Sint(Mkbin([127,255]))
- end,
- SignedInteger(),
-
- Dynamic5 = fun(Bin, S1, S2, A, B) ->
- case Bin of
- <<A:S1,B:S2>> ->
- % io:format(\"~p ~p ~p ~p~n\", [S1,S2,A,B]),
- ok;
- _Other -> erlang:error(badmatch, [Bin,S1,S2,A,B])
- end
- end,
-
- Dynamic2 = fun(Bin, S1, F) when S1 >= 0 ->
- S2 = size(Bin) * 8 - S1,
- Dynamic5(Bin, S1, S2, (1 bsl S1) - 1, (1 bsl S2) - 1),
- F(Bin, S1-1, F);
- (_, _, _) -> ok
- end,
-
- Dynamic = fun(Bin, S1) ->
- Dynamic2(Bin, S1, Dynamic2)
- end,
-
- Dynamic(Mkbin([255]), 8),
- Dynamic(Mkbin([255,255]), 16),
- Dynamic(Mkbin([255,255,255]), 24),
- Dynamic(Mkbin([255,255,255,255]), 32),
-
- BigToLittle4 =
- fun([B0,B1,B2,B3,B4,B5,B6,B7|T], N, Acc, F) when N >= 8 ->
- F(T, N-8, [B0,B1,B2,B3,B4,B5,B6,B7|Acc], F);
- (List, N, Acc, _F) -> lists:sublist(List, 1, N) ++ Acc
- end,
-
- BigToLittle =
- fun(List, N) -> BigToLittle4(List, N, [], BigToLittle4) end,
-
- ReversedSublist =
- fun(_List, 0, Acc, _F) -> Acc;
- ([H|T], N, Acc, F) -> F(T, N-1, [H|Acc], F)
- end,
-
- TwoComplementAndReverse =
- fun([H|T], Carry, Acc, F) ->
- Sum = 1-H+Carry,
- F(T, Sum div 2, [Sum rem 2|Acc], F);
- ([], Carry, Acc, _F) -> [Carry|Acc]
- end,
-
- MakeInt = fun(_List, 0, Acc, _F) -> Acc;
- ([H|T], N, Acc, F) -> F(T, N-1, Acc bsl 1 bor H, F)
- end,
-
- MakeSignedInt =
- fun(_List, 0) -> 0;
- ([0|_]=List, N) -> MakeInt(List, N, 0, MakeInt);
- ([1|_]=List0, N) ->
- List1 = ReversedSublist(List0, N, [], ReversedSublist),
- List2 = TwoComplementAndReverse(List1, 1, [],
- TwoComplementAndReverse),
- -MakeInt(List2, length(List2), 0, MakeInt)
- end,
-
- BitsToList =
- fun([H|T], 0, F) -> F(T, 16#80, F);
- ([H|_]=List, Mask, F) ->
- [case H band Mask of
+ Mkbin = fun(L) when list(L) -> list_to_binary(L) end,
+
+ GetInt1 = fun(<<I:0>>) -> I;
+ (<<I:8>>) -> I;
+ (<<I:16>>) -> I;
+ (<<I:24>>) -> I;
+ (<<I:32>>) -> I
+ end,
+
+ GetInt2 = fun(Bin0, I, F) when size(Bin0) < 4 ->
+ Bin = <<0,Bin0/binary>>,
+ I = GetInt1(Bin),
+ F(Bin, I, F);
+ (_, I, _F) -> I
+ end,
+
+ GetInt = fun(Bin) ->
+ I = GetInt1(Bin),
+ GetInt2(Bin, I, GetInt2)
+ end,
+
+
+ Cmp128 = fun(<<I:128>>, I) -> equal;
+ (_, _) -> not_equal
+ end,
+
+ Uint2 = fun([H|T], Acc, F) -> F(T, Acc bsl 8 bor H, F);
+ ([], Acc, _F) -> Acc
+ end,
+
+ Uint = fun(L) -> Uint2(L, 0, Uint2) end,
+
+ Integer = fun() ->
+ 0 = GetInt(Mkbin([])),
+ 0 = GetInt(Mkbin([0])),
+ 42 = GetInt(Mkbin([42])),
+ 255 = GetInt(Mkbin([255])),
+ 256 = GetInt(Mkbin([1,0])),
+ 257 = GetInt(Mkbin([1,1])),
+ 258 = GetInt(Mkbin([1,2])),
+ 258 = GetInt(Mkbin([1,2])),
+ 65534 = GetInt(Mkbin([255,254])),
+ 16776455 = GetInt(Mkbin([255,253,7])),
+ 4245492555 = GetInt(Mkbin([253,13,19,75])),
+ 4294967294 = GetInt(Mkbin([255,255,255,254])),
+ 4294967295 = GetInt(Mkbin([255,255,255,255])),
+ Eight = [200,1,19,128,222,42,97,111],
+ Cmp128(Eight, Uint(Eight)),
+ FunClause(catch GetInt(Mkbin(lists:seq(1,5))))
+ end,
+ Integer(),
+
+ Sint = fun(Bin) ->
+ case Bin of
+ <<I:8/signed>> -> I;
+ <<I:8/signed,_:3,_:5>> -> I;
+ Other -> {no_match,Other}
+ end
+ end,
+
+ SignedInteger = fun() ->
+ {no_match,_} = Sint(Mkbin([])),
+ {no_match,_} = Sint(Mkbin([1,2,3])),
+ 127 = Sint(Mkbin([127])),
+ -1 = Sint(Mkbin([255])),
+ -128 = Sint(Mkbin([128])),
+ 42 = Sint(Mkbin([42,255])),
+ 127 = Sint(Mkbin([127,255]))
+ end,
+ SignedInteger(),
+
+ Dynamic5 = fun(Bin, S1, S2, A, B) ->
+ case Bin of
+ <<A:S1,B:S2>> ->
+ %% io:format(\"~p ~p ~p ~p~n\", [S1,S2,A,B]),
+ ok;
+ _Other -> erlang:error(badmatch, [Bin,S1,S2,A,B])
+ end
+ end,
+
+ Dynamic2 = fun(Bin, S1, F) when S1 >= 0 ->
+ S2 = size(Bin) * 8 - S1,
+ Dynamic5(Bin, S1, S2, (1 bsl S1) - 1, (1 bsl S2) - 1),
+ F(Bin, S1-1, F);
+ (_, _, _) -> ok
+ end,
+
+ Dynamic = fun(Bin, S1) ->
+ Dynamic2(Bin, S1, Dynamic2)
+ end,
+
+ Dynamic(Mkbin([255]), 8),
+ Dynamic(Mkbin([255,255]), 16),
+ Dynamic(Mkbin([255,255,255]), 24),
+ Dynamic(Mkbin([255,255,255,255]), 32),
+
+ BigToLittle4 =
+ fun([B0,B1,B2,B3,B4,B5,B6,B7|T], N, Acc, F) when N >= 8 ->
+ F(T, N-8, [B0,B1,B2,B3,B4,B5,B6,B7|Acc], F);
+ (List, N, Acc, _F) -> lists:sublist(List, 1, N) ++ Acc
+ end,
+
+ BigToLittle =
+ fun(List, N) -> BigToLittle4(List, N, [], BigToLittle4) end,
+
+ ReversedSublist =
+ fun(_List, 0, Acc, _F) -> Acc;
+ ([H|T], N, Acc, F) -> F(T, N-1, [H|Acc], F)
+ end,
+
+ TwoComplementAndReverse =
+ fun([H|T], Carry, Acc, F) ->
+ Sum = 1-H+Carry,
+ F(T, Sum div 2, [Sum rem 2|Acc], F);
+ ([], Carry, Acc, _F) -> [Carry|Acc]
+ end,
+
+ MakeInt = fun(_List, 0, Acc, _F) -> Acc;
+ ([H|T], N, Acc, F) -> F(T, N-1, Acc bsl 1 bor H, F)
+ end,
+
+ MakeSignedInt =
+ fun(_List, 0) -> 0;
+ ([0|_]=List, N) -> MakeInt(List, N, 0, MakeInt);
+ ([1|_]=List0, N) ->
+ List1 = ReversedSublist(List0, N, [], ReversedSublist),
+ List2 = TwoComplementAndReverse(List1, 1, [],
+ TwoComplementAndReverse),
+ -MakeInt(List2, length(List2), 0, MakeInt)
+ end,
+
+ BitsToList =
+ fun([H|T], 0, F) -> F(T, 16#80, F);
+ ([H|_]=List, Mask, F) ->
+ [case H band Mask of
0 -> 0;
_ -> 1
- end | F(List, Mask bsr 1, F)];
- ([], _, _F) -> []
- end,
-
- MoreDynamic3 =
- fun(Action, Bin, List, Bef, Aft, F) when Bef =< Aft ->
- Action(Bin, List, Bef, Aft-Bef),
- F(Action, Bin, List, Bef, Aft-1, F);
- (_, _, _, _, _, _) -> ok
- end,
-
- MoreDynamic2 =
- fun(Action, Bin, [_|T]=List, Bef, F) ->
- MoreDynamic3(Action, Bin, List, Bef, size(Bin)*8,
- MoreDynamic3),
- F(Action, Bin, T, Bef+1, F);
- (_, _, [], _, _F) -> ok
- end,
-
- MoreDynamic1 =
- fun(Action, Bin) ->
- BitList = BitsToList(binary_to_list(Bin),16#80,BitsToList),
- MoreDynamic2(Action, Bin, BitList, 0, MoreDynamic2)
- end,
-
- MoreDynamic = fun() ->
- % Unsigned big-endian numbers.
- Unsigned = fun(Bin, List, SkipBef, N) ->
- SkipAft = 8*size(Bin) - N - SkipBef,
- <<_:SkipBef,Int:N,_:SkipAft>> = Bin,
- Int = MakeInt(List, N, 0, MakeInt)
- end,
- MoreDynamic1(Unsigned, erlang:md5(Mkbin([42]))),
+ end | F(List, Mask bsr 1, F)];
+ ([], _, _F) -> []
+ end,
+
+ MoreDynamic3 =
+ fun(Action, Bin, List, Bef, Aft, F) when Bef =< Aft ->
+ Action(Bin, List, Bef, Aft-Bef),
+ F(Action, Bin, List, Bef, Aft-1, F);
+ (_, _, _, _, _, _) -> ok
+ end,
+
+ MoreDynamic2 =
+ fun(Action, Bin, [_|T]=List, Bef, F) ->
+ MoreDynamic3(Action, Bin, List, Bef, size(Bin)*8,
+ MoreDynamic3),
+ F(Action, Bin, T, Bef+1, F);
+ (_, _, [], _, _F) -> ok
+ end,
+
+ MoreDynamic1 =
+ fun(Action, Bin) ->
+ BitList = BitsToList(binary_to_list(Bin),16#80,BitsToList),
+ MoreDynamic2(Action, Bin, BitList, 0, MoreDynamic2)
+ end,
+
+ MoreDynamic = fun() ->
+ %% Unsigned big-endian numbers.
+ Unsigned = fun(Bin, List, SkipBef, N) ->
+ SkipAft = 8*size(Bin) - N - SkipBef,
+ <<_:SkipBef,Int:N,_:SkipAft>> = Bin,
+ Int = MakeInt(List, N, 0, MakeInt)
+ end,
+ MoreDynamic1(Unsigned, erlang:md5(Mkbin([42]))),
%% Signed big-endian numbers.
- Signed = fun(Bin, List, SkipBef, N) ->
- SkipAft = 8*size(Bin) - N - SkipBef,
- <<_:SkipBef,Int:N/signed,_:SkipAft>> = Bin,
- case MakeSignedInt(List, N) of
- Int -> ok;
- Other ->
- io:format(\"Bin = ~p,\", [Bin]),
+ Signed = fun(Bin, List, SkipBef, N) ->
+ SkipAft = 8*size(Bin) - N - SkipBef,
+ <<_:SkipBef,Int:N/signed,_:SkipAft>> = Bin,
+ case MakeSignedInt(List, N) of
+ Int -> ok;
+ Other ->
+ io:format(\"Bin = ~p,\", [Bin]),
io:format(\"SkipBef = ~p, N = ~p\",
[SkipBef,N]),
- io:format(\"Expected ~p, got ~p\",
+ io:format(\"Expected ~p, got ~p\",
[Int,Other])
- end
- end,
- MoreDynamic1(Signed, erlang:md5(Mkbin([43]))),
+ end
+ end,
+ MoreDynamic1(Signed, erlang:md5(Mkbin([43]))),
%% Unsigned little-endian numbers.
- UnsLittle = fun(Bin, List, SkipBef, N) ->
- SkipAft = 8*size(Bin) - N - SkipBef,
- <<_:SkipBef,Int:N/little,_:SkipAft>> = Bin,
- Int = MakeInt(BigToLittle(List, N), N, 0,
- MakeInt)
- end,
- MoreDynamic1(UnsLittle, erlang:md5(Mkbin([44]))),
+ UnsLittle = fun(Bin, List, SkipBef, N) ->
+ SkipAft = 8*size(Bin) - N - SkipBef,
+ <<_:SkipBef,Int:N/little,_:SkipAft>> = Bin,
+ Int = MakeInt(BigToLittle(List, N), N, 0,
+ MakeInt)
+ end,
+ MoreDynamic1(UnsLittle, erlang:md5(Mkbin([44]))),
%% Signed little-endian numbers.
- SignLittle = fun(Bin, List, SkipBef, N) ->
- SkipAft = 8*size(Bin) - N - SkipBef,
- <<_:SkipBef,Int:N/signed-little,_:SkipAft>> = Bin,
- Little = BigToLittle(List, N),
- Int = MakeSignedInt(Little, N)
- end,
- MoreDynamic1(SignLittle, erlang:md5(Mkbin([45])))
- end,
- MoreDynamic(),
-
- ok.
- ">>,
+ SignLittle = fun(Bin, List, SkipBef, N) ->
+ SkipAft = 8*size(Bin) - N - SkipBef,
+ <<_:SkipBef,Int:N/signed-little,_:SkipAft>> = Bin,
+ Little = BigToLittle(List, N),
+ Int = MakeSignedInt(Little, N)
+ end,
+ MoreDynamic1(SignLittle, erlang:md5(Mkbin([45])))
+ end,
+ MoreDynamic(),
+
+ ok.
+">>,
[ok] = scan(C),
- ok = evaluate(C, []).
+ok = evaluate(C, []).
-bs_match_tail_SUITE(doc) ->
- ["OTP-5327. Adopted from emulator/test/bs_match_tail_SUITE.erl."];
-bs_match_tail_SUITE(suite) ->
- [];
+%% OTP-5327. Adopted from emulator/test/bs_match_tail_SUITE.erl.
bs_match_tail_SUITE(Config) when is_list(Config) ->
C = <<"
GetTailUsed = fun(<<A:1,T/binary>>) -> {A,T} end,
@@ -1211,13 +1167,13 @@ bs_match_tail_SUITE(Config) when is_list(Config) ->
GetTailUnused = fun(<<A:15,_/binary>>) -> A end,
GetDynTailUsed = fun(Bin, Sz) ->
- <<A:Sz,T/binary>> = Bin,
- {A,T}
+ <<A:Sz,T/binary>> = Bin,
+ {A,T}
end,
GetDynTailUnused = fun(Bin, Sz) ->
- <<A:Sz,_/binary>> = Bin,
- A
+ <<A:Sz,_/binary>> = Bin,
+ A
end,
Mkbin = fun(L) when list(L) -> list_to_binary(L) end,
@@ -1227,12 +1183,12 @@ bs_match_tail_SUITE(Config) when is_list(Config) ->
TestZeroTail2 = fun(<<_A:4,_B:4>>) -> ok end,
ZeroTail = fun() ->
- 7 = (catch TestZeroTail(Mkbin([7]))),
- {'EXIT',{function_clause,_}} =
- (catch TestZeroTail(Mkbin([1,2]))),
- {'EXIT',{function_clause,_}} =
- (catch TestZeroTail2(Mkbin([1,2,3])))
- end,
+ 7 = (catch TestZeroTail(Mkbin([7]))),
+ {'EXIT',{function_clause,_}} =
+ (catch TestZeroTail(Mkbin([1,2]))),
+ {'EXIT',{function_clause,_}} =
+ (catch TestZeroTail2(Mkbin([1,2,3])))
+ end,
ZeroTail(),
AlGetTailUsed = fun(<<A:16,T/binary>>) -> {A,T} end,
@@ -1240,45 +1196,42 @@ bs_match_tail_SUITE(Config) when is_list(Config) ->
AlGetTailUnused = fun(<<A:16,_/binary>>) -> A end,
Aligned = fun() ->
- Tail1 = Mkbin([]),
- {258,Tail1} = AlGetTailUsed(Mkbin([1,2])),
- Tail2 = Mkbin(lists:seq(1, 127)),
- {35091,Tail2} = AlGetTailUsed(Mkbin([137,19|Tail2])),
-
- 64896 = AlGetTailUnused(Mkbin([253,128])),
- 64895 = AlGetTailUnused(Mkbin([253,127|lists:seq(42, 255)])),
-
- Tail3 = Mkbin(lists:seq(0, 19)),
- {0,Tail1} = GetDynTailUsed(Tail1, 0),
- {0,Tail3} = GetDynTailUsed(Mkbin([Tail3]), 0),
- {73,Tail3} = GetDynTailUsed(Mkbin([73|Tail3]), 8),
-
- 0 = GetDynTailUnused(Mkbin([]), 0),
- 233 = GetDynTailUnused(Mkbin([233]), 8),
- 23 = GetDynTailUnused(Mkbin([23,22,2]), 8)
- end,
+ Tail1 = Mkbin([]),
+ {258,Tail1} = AlGetTailUsed(Mkbin([1,2])),
+ Tail2 = Mkbin(lists:seq(1, 127)),
+ {35091,Tail2} = AlGetTailUsed(Mkbin([137,19|Tail2])),
+
+ 64896 = AlGetTailUnused(Mkbin([253,128])),
+ 64895 = AlGetTailUnused(Mkbin([253,127|lists:seq(42, 255)])),
+
+ Tail3 = Mkbin(lists:seq(0, 19)),
+ {0,Tail1} = GetDynTailUsed(Tail1, 0),
+ {0,Tail3} = GetDynTailUsed(Mkbin([Tail3]), 0),
+ {73,Tail3} = GetDynTailUsed(Mkbin([73|Tail3]), 8),
+
+ 0 = GetDynTailUnused(Mkbin([]), 0),
+ 233 = GetDynTailUnused(Mkbin([233]), 8),
+ 23 = GetDynTailUnused(Mkbin([23,22,2]), 8)
+ end,
Aligned(),
-
+
UnAligned = fun() ->
- {'EXIT',{function_clause,_}} =
- (catch GetTailUsed(Mkbin([42]))),
- {'EXIT',{{badmatch,_},_}} =
- (catch GetDynTailUsed(Mkbin([137]), 3)),
- {'EXIT',{function_clause,_}} =
- (catch GetTailUnused(Mkbin([42,33]))),
- {'EXIT',{{badmatch,_},_}} =
- (catch GetDynTailUnused(Mkbin([44]), 7))
- end,
+ {'EXIT',{function_clause,_}} =
+ (catch GetTailUsed(Mkbin([42]))),
+ {'EXIT',{{badmatch,_},_}} =
+ (catch GetDynTailUsed(Mkbin([137]), 3)),
+ {'EXIT',{function_clause,_}} =
+ (catch GetTailUnused(Mkbin([42,33]))),
+ {'EXIT',{{badmatch,_},_}} =
+ (catch GetDynTailUnused(Mkbin([44]), 7))
+ end,
UnAligned(),
ok.
- ">>,
+">>,
[ok] = scan(C),
- ok = evaluate(C, []).
+ok = evaluate(C, []).
-bs_match_bin_SUITE(doc) ->
- ["OTP-5327. Adopted from emulator/test/bs_match_bin_SUITE.erl."];
-bs_match_bin_SUITE(suite) ->
- [];
+%% OTP-5327. Adopted from emulator/test/bs_match_bin_SUITE.erl.
bs_match_bin_SUITE(Config) when is_list(Config) ->
ByteSplitBinary =
<<"ByteSplit =
@@ -1288,252 +1241,249 @@ bs_match_bin_SUITE(Config) when is_list(Config) ->
<<B1:Sz1/binary,B2:Sz2/binary>> = B,
B1 = list_to_binary(lists:sublist(L, 1, Pos)),
B2 = list_to_binary(lists:nthtail(Pos, L)),
- Fun(L, B, Pos-1, Fun);
- (L, B, _, _Fun) -> ok
+ Fun(L, B, Pos-1, Fun);
+ (L, B, _, _Fun) -> ok
end,
- Mkbin = fun(L) when list(L) -> list_to_binary(L) end,
- L = lists:seq(0, 57),
- B = Mkbin(L),
- ByteSplit(L, B, size(B), ByteSplit),
- Id = fun(I) -> I end,
- MakeUnalignedSubBinary =
- fun(Bin0) ->
- Bin1 = <<0:3,Bin0/binary,31:5>>,
- Sz = size(Bin0),
- <<0:3,Bin:Sz/binary,31:5>> = Id(Bin1),
- Bin
- end,
- Unaligned = MakeUnalignedSubBinary(B),
- ByteSplit(L, Unaligned, size(Unaligned), ByteSplit),
- ok.
- ">>,
+ Mkbin = fun(L) when list(L) -> list_to_binary(L) end,
+ L = lists:seq(0, 57),
+ B = Mkbin(L),
+ ByteSplit(L, B, size(B), ByteSplit),
+ Id = fun(I) -> I end,
+ MakeUnalignedSubBinary =
+ fun(Bin0) ->
+ Bin1 = <<0:3,Bin0/binary,31:5>>,
+ Sz = size(Bin0),
+ <<0:3,Bin:Sz/binary,31:5>> = Id(Bin1),
+ Bin
+ end,
+ Unaligned = MakeUnalignedSubBinary(B),
+ ByteSplit(L, Unaligned, size(Unaligned), ByteSplit),
+ ok.
+">>,
[ok] = scan(ByteSplitBinary),
- ok = evaluate(ByteSplitBinary, []),
- BitSplitBinary =
- <<"Mkbin = fun(L) when list(L) -> list_to_binary(L) end,
+ok = evaluate(ByteSplitBinary, []),
+BitSplitBinary =
+<<"Mkbin = fun(L) when list(L) -> list_to_binary(L) end,
MakeInt =
- fun(List, 0, Acc, _F) -> Acc;
- ([H|T], N, Acc, F) -> F(T, N-1, Acc bsl 1 bor H, F)
- end,
-
- MakeBinFromList =
- fun(List, 0, _F) -> Mkbin([]);
- (List, N, F) ->
- list_to_binary([MakeInt(List, 8, 0, MakeInt),
- F(lists:nthtail(8, List), N-8, F)])
- end,
-
- BitSplitBinary3 =
- fun(Action, Bin, List, Bef, Aft, F) when Bef =< Aft ->
- Action(Bin, List, Bef, (Aft-Bef) div 8 * 8),
- F(Action, Bin, List, Bef, Aft-8, F);
- (_, _, _, _, _, _) -> ok
- end,
-
- BitSplitBinary2 =
- fun(Action, Bin, [_|T]=List, Bef, F) ->
- BitSplitBinary3(Action, Bin, List, Bef, size(Bin)*8,
- BitSplitBinary3),
- F(Action, Bin, T, Bef+1, F);
- (Action, Bin, [], Bef, F) -> ok
- end,
-
- BitsToList =
- fun([H|T], 0, F) -> F(T, 16#80, F);
- ([H|_]=List, Mask, F) ->
- [case H band Mask of
- 0 -> 0;
- _ -> 1
- end | F(List, Mask bsr 1, F)];
- ([], _, _F) -> []
- end,
-
- BitSplitBinary1 =
- fun(Action, Bin) ->
- BitList = BitsToList(binary_to_list(Bin), 16#80,
- BitsToList),
- BitSplitBinary2(Action, Bin, BitList, 0, BitSplitBinary2)
- end,
-
- Fun = fun(Bin, List, SkipBef, N) ->
- SkipAft = 8*size(Bin) - N - SkipBef,
- <<I1:SkipBef,OutBin:N/binary-unit:1,I2:SkipAft>> = Bin,
- OutBin = MakeBinFromList(List, N, MakeBinFromList)
- end,
-
- BitSplitBinary1(Fun, erlang:md5(<<1,2,3>>)),
- Id = fun(I) -> I end,
- MakeUnalignedSubBinary =
- fun(Bin0) ->
- Bin1 = <<0:3,Bin0/binary,31:5>>,
- Sz = size(Bin0),
- <<0:3,Bin:Sz/binary,31:5>> = Id(Bin1),
- Bin
- end,
- BitSplitBinary1(Fun, MakeUnalignedSubBinary(erlang:md5(<<1,2,3>>))),
- ok.
- ">>,
+ fun(List, 0, Acc, _F) -> Acc;
+ ([H|T], N, Acc, F) -> F(T, N-1, Acc bsl 1 bor H, F)
+ end,
+
+ MakeBinFromList =
+ fun(List, 0, _F) -> Mkbin([]);
+ (List, N, F) ->
+ list_to_binary([MakeInt(List, 8, 0, MakeInt),
+ F(lists:nthtail(8, List), N-8, F)])
+ end,
+
+ BitSplitBinary3 =
+ fun(Action, Bin, List, Bef, Aft, F) when Bef =< Aft ->
+ Action(Bin, List, Bef, (Aft-Bef) div 8 * 8),
+ F(Action, Bin, List, Bef, Aft-8, F);
+ (_, _, _, _, _, _) -> ok
+ end,
+
+ BitSplitBinary2 =
+ fun(Action, Bin, [_|T]=List, Bef, F) ->
+ BitSplitBinary3(Action, Bin, List, Bef, size(Bin)*8,
+ BitSplitBinary3),
+ F(Action, Bin, T, Bef+1, F);
+ (Action, Bin, [], Bef, F) -> ok
+ end,
+
+ BitsToList =
+ fun([H|T], 0, F) -> F(T, 16#80, F);
+ ([H|_]=List, Mask, F) ->
+ [case H band Mask of
+ 0 -> 0;
+ _ -> 1
+ end | F(List, Mask bsr 1, F)];
+ ([], _, _F) -> []
+ end,
+
+ BitSplitBinary1 =
+ fun(Action, Bin) ->
+ BitList = BitsToList(binary_to_list(Bin), 16#80,
+ BitsToList),
+ BitSplitBinary2(Action, Bin, BitList, 0, BitSplitBinary2)
+ end,
+
+ Fun = fun(Bin, List, SkipBef, N) ->
+ SkipAft = 8*size(Bin) - N - SkipBef,
+ <<I1:SkipBef,OutBin:N/binary-unit:1,I2:SkipAft>> = Bin,
+ OutBin = MakeBinFromList(List, N, MakeBinFromList)
+ end,
+
+ BitSplitBinary1(Fun, erlang:md5(<<1,2,3>>)),
+ Id = fun(I) -> I end,
+ MakeUnalignedSubBinary =
+ fun(Bin0) ->
+ Bin1 = <<0:3,Bin0/binary,31:5>>,
+ Sz = size(Bin0),
+ <<0:3,Bin:Sz/binary,31:5>> = Id(Bin1),
+ Bin
+ end,
+ BitSplitBinary1(Fun, MakeUnalignedSubBinary(erlang:md5(<<1,2,3>>))),
+ ok.
+">>,
[ok] = scan(BitSplitBinary),
- ok = evaluate(BitSplitBinary, []).
+ok = evaluate(BitSplitBinary, []).
-define(FAIL(Expr), "{'EXIT',{badarg,_}} = (catch " ??Expr ")").
-define(COF(Int0),
"(fun(Int) ->
true = <<Int:32/float>> =:= <<(float(Int)):32/float>>,
- true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
- end)(Nonliteral(" ??Int0 ")),
- true = <<" ??Int0 ":32/float>> =:= <<(float("??Int0")):32/float>>,
- true = <<" ??Int0 ":64/float>> =:= <<(float("??Int0")):64/float>>").
+ true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
+ end)(Nonliteral(" ??Int0 ")),
+true = <<" ??Int0 ":32/float>> =:= <<(float("??Int0")):32/float>>,
+true = <<" ??Int0 ":64/float>> =:= <<(float("??Int0")):64/float>>").
-define(COF64(Int0),
"(fun(Int) ->
true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
- end)(Nonliteral(" ??Int0 ")),
- true = <<" ??Int0 ":64/float>> =:= <<(float("??Int0")):64/float>>").
+ end)(Nonliteral(" ??Int0 ")),
+true = <<" ??Int0 ":64/float>> =:= <<(float("??Int0")):64/float>>").
-bs_construct_SUITE(doc) ->
- ["OTP-5327. Adopted from parts of emulator/test/bs_construct_SUITE.erl."];
-bs_construct_SUITE(suite) ->
- [];
+%% OTP-5327. Adopted from parts of emulator/test/bs_construct_SUITE.erl.
bs_construct_SUITE(Config) when is_list(Config) ->
C1 = <<"
Testf_1 = fun(W, B) -> "
?FAIL(<<42:W>>) ","
- ?FAIL(<<3.14:W/float>>) ","
- ?FAIL(<<B:W/binary>>) "
+ ?FAIL(<<3.14:W/float>>) ","
+ ?FAIL(<<B:W/binary>>) "
end,
- TestF = fun() -> "
+ TestF = fun() -> "
?FAIL(<<3.14>>) ","
- ?FAIL(<<<<1,2>>>>) ","
+ ?FAIL(<<<<1,2>>>>) ","
- ?FAIL(<<2.71/binary>>) ","
- ?FAIL(<<24334/binary>>) ","
- ?FAIL(<<24334344294788947129487129487219847/binary>>) ","
+ ?FAIL(<<2.71/binary>>) ","
+ ?FAIL(<<24334/binary>>) ","
+ ?FAIL(<<24334344294788947129487129487219847/binary>>) ","
- ?FAIL(<<<<1,2,3>>/float>>) ",
+ ?FAIL(<<<<1,2,3>>/float>>) ",
%% Negative field widths.
Testf_1(-8, <<1,2,3,4,5>>),"
?FAIL(<<42:(-16)>>) ","
- ?FAIL(<<3.14:(-8)/float>>) ","
- ?FAIL(<<<<23,56,0,2>>:(-16)/binary>>) ","
- ?FAIL(<<<<23,56,0,2>>:(2.5)/binary>>) ","
- ?FAIL(<<<<23,56,0,2>>:(anka)>>) "
+ ?FAIL(<<3.14:(-8)/float>>) ","
+ ?FAIL(<<<<23,56,0,2>>:(-16)/binary>>) ","
+ ?FAIL(<<<<23,56,0,2>>:(2.5)/binary>>) ","
+ ?FAIL(<<<<23,56,0,2>>:(anka)>>) "
end,
- TestF(),
+ TestF(),
- NotUsed1 = fun(I, BinString) -> <<I:32,BinString/binary>>, ok end,
+ NotUsed1 = fun(I, BinString) -> <<I:32,BinString/binary>>, ok end,
- NotUsed2 = fun(I, Sz) -> <<I:Sz>>, ok end,
+ NotUsed2 = fun(I, Sz) -> <<I:Sz>>, ok end,
- NotUsed3 = fun(I) -><<I:(-8)>>, ok end,
+ NotUsed3 = fun(I) -><<I:(-8)>>, ok end,
- NotUsed = fun() ->
- ok = NotUsed1(3, <<\"dum\">>),
+ NotUsed = fun() ->
+ ok = NotUsed1(3, <<\"dum\">>),
{'EXIT',{badarg,_}} = (catch NotUsed1(3, \"dum\")), "
- ?FAIL(NotUsed2(444, -2)) ","
- ?FAIL(NotUsed2(444, anka)) ","
- ?FAIL(NotUsed3(444)) "
+ ?FAIL(NotUsed2(444, -2)) ","
+ ?FAIL(NotUsed2(444, anka)) ","
+ ?FAIL(NotUsed3(444)) "
end,
- NotUsed(),
-
- InGuard3 = fun(Bin, A, B) when <<A:13,B:3>> == Bin -> 1;
- (Bin, A, B) when <<A:16,B/binary>> == Bin -> 2;
- (Bin, A, B) when <<A:14,B/float,3:2>> == Bin -> 3;
- (Bin, A, B) when {a,b,<<A:14,B/float,3:2>>} == Bin ->
- cant_happen;
- (_, _, _) -> nope
- end,
-
- InGuard = fun() ->
- 1 = InGuard3(<<16#74ad:16>>, 16#e95, 5),
- 2 = InGuard3(<<16#3A,16#F7,\"hello\">>, 16#3AF7, <<\"hello\">>),
+ NotUsed(),
+
+ InGuard3 = fun(Bin, A, B) when <<A:13,B:3>> == Bin -> 1;
+ (Bin, A, B) when <<A:16,B/binary>> == Bin -> 2;
+ (Bin, A, B) when <<A:14,B/float,3:2>> == Bin -> 3;
+ (Bin, A, B) when {a,b,<<A:14,B/float,3:2>>} == Bin ->
+ cant_happen;
+ (_, _, _) -> nope
+ end,
+
+ InGuard = fun() ->
+ 1 = InGuard3(<<16#74ad:16>>, 16#e95, 5),
+ 2 = InGuard3(<<16#3A,16#F7,\"hello\">>, 16#3AF7, <<\"hello\">>),
3 = InGuard3(<<16#FBCD:14,3.1415/float,3:2>>, 16#FBCD, 3.1415),
- nope = InGuard3(<<1>>, 42, b),
- nope = InGuard3(<<1>>, a, b),
- nope = InGuard3(<<1,2>>, 1, 1),
- nope = InGuard3(<<4,5>>, 1, 2.71),
- nope = InGuard3(<<4,5>>, 1, <<12,13>>)
- end,
- InGuard(),
+ nope = InGuard3(<<1>>, 42, b),
+ nope = InGuard3(<<1>>, a, b),
+ nope = InGuard3(<<1,2>>, 1, 1),
+ nope = InGuard3(<<4,5>>, 1, 2.71),
+ nope = InGuard3(<<4,5>>, 1, <<12,13>>)
+ end,
+ InGuard(),
- Nonliteral = fun(X) -> X end,
+ Nonliteral = fun(X) -> X end,
- CoerceToFloat = fun() -> "
+ CoerceToFloat = fun() -> "
?COF(0) ","
- ?COF(-1) ","
- ?COF(1) ","
- ?COF(42) ","
- ?COF(255) ","
- ?COF(-255) ","
- ?COF64(298748888888888888888888888883478264866528467367364766666666666666663) ","
- ?COF64(-367546729879999999999947826486652846736736476555566666663) "
+ ?COF(-1) ","
+ ?COF(1) ","
+ ?COF(42) ","
+ ?COF(255) ","
+ ?COF(-255) ","
+ ?COF64(298748888888888888888888888883478264866528467367364766666666666666663) ","
+ ?COF64(-367546729879999999999947826486652846736736476555566666663) "
end,
- CoerceToFloat(),
- ok.
- ">>,
+ CoerceToFloat(),
+ ok.
+">>,
[ok] = scan(C1),
- ok = evaluate(C1, []),
+ok = evaluate(C1, []),
- %% There is another one, lib/compiler/test/bs_construct_SUITE.erl...
- C2 = <<"
+%% There is another one, lib/compiler/test/bs_construct_SUITE.erl...
+C2 = <<"
I = fun(X) -> X end,
Fail = fun() ->
- I_minus_777 = I(-777),
- I_minus_2047 = I(-2047),
+ I_minus_777 = I(-777),
+ I_minus_2047 = I(-2047),
%% One negative field size, but the sum of field sizes will be 1 byte.
%% Make sure that we reject that properly.
- {'EXIT',{badarg,_}} = (catch <<I_minus_777:2048/unit:8,
- 57:I_minus_2047/unit:8>>),
+ {'EXIT',{badarg,_}} = (catch <<I_minus_777:2048/unit:8,
+ 57:I_minus_2047/unit:8>>),
%% Same thing, but use literals.
- {'EXIT',{badarg,_}} = (catch <<I_minus_777:2048/unit:8,
- 57:(-2047)/unit:8>>),
+ {'EXIT',{badarg,_}} = (catch <<I_minus_777:2048/unit:8,
+ 57:(-2047)/unit:8>>),
%% Bad alignment.
- I_one = I(1),
- <<1:1>> = <<2375:I_one>>,
- <<3:2>> = <<45:1,2375:I_one>>,
- <<14:4>> = <<45:1,2375:I_one,918:2>>,
- <<118:7>> = <<45:1,2375:I_one,918:5>>,
+ I_one = I(1),
+ <<1:1>> = <<2375:I_one>>,
+ <<3:2>> = <<45:1,2375:I_one>>,
+ <<14:4>> = <<45:1,2375:I_one,918:2>>,
+ <<118:7>> = <<45:1,2375:I_one,918:5>>,
%% Not numbers.
- {'EXIT',{badarg,_}} = (catch <<45:(I(not_a_number))>>),
- {'EXIT',{badarg,_}} = (catch <<13:8,45:(I(not_a_number))>>),
+ {'EXIT',{badarg,_}} = (catch <<45:(I(not_a_number))>>),
+ {'EXIT',{badarg,_}} = (catch <<13:8,45:(I(not_a_number))>>),
%% Unaligned sizes.
- BadSz = I(7),
- <<2:4>> = <<34:4>>,
- <<34:7>> = <<34:BadSz>>,
+ BadSz = I(7),
+ <<2:4>> = <<34:4>>,
+ <<34:7>> = <<34:BadSz>>,
- [] = [X || {X} <- [], X == <<3:BadSz>>],
- [] = [X || {X} <- [], X == <<3:4>>]
- end,
+ [] = [X || {X} <- [], X == <<3:BadSz>>],
+ [] = [X || {X} <- [], X == <<3:4>>]
+ end,
Fail(),
FloatBin1 = fun(F) ->
- {<<1,2,3>>,F+3.0}
- end,
+ {<<1,2,3>>,F+3.0}
+ end,
FloatBin = fun() ->
%% Some more coverage.
- {<<1,2,3>>,7.0} = FloatBin1(4)
- end,
+ {<<1,2,3>>,7.0} = FloatBin1(4)
+ end,
FloatBin(),
ok.
- ">>,
+">>,
[ok] = scan(C2),
- ok = evaluate(C2, []).
+ok = evaluate(C2, []).
evaluate(B, Vars) when is_binary(B) ->
evaluate(binary_to_list(B), Vars);
@@ -1547,60 +1497,55 @@ evaluate(Str, Vars) ->
end.
-refman_bit_syntax(doc) ->
- ["Bit syntax examples from the Reference Manual. OTP-5237."];
-refman_bit_syntax(suite) ->
- [];
+%% Bit syntax examples from the Reference Manual. OTP-5237.
refman_bit_syntax(Config) when is_list(Config) ->
%% Reference Manual "Bit Syntax Expressions"
- ?line Bin1 = <<1,17,42>>,
- ?line true = [1,17,42] =:= binary_to_list(Bin1),
- ?line Bin2 = <<"abc">>,
- ?line true = "abc" =:= binary_to_list(Bin2),
- ?line Bin3 = <<1,17,42:16>>,
- ?line true = [1,17,0,42] =:= binary_to_list(Bin3),
- ?line <<_A,_B,C:16>> = <<1,17,42:16>>,
- ?line true = C =:= 42,
- ?line <<D:16,_E,F>> = <<1,17,42:16>>,
- ?line true = D =:= 273,
- ?line true = F =:= 42,
+ Bin1 = <<1,17,42>>,
+ true = [1,17,42] =:= binary_to_list(Bin1),
+ Bin2 = <<"abc">>,
+ true = "abc" =:= binary_to_list(Bin2),
+ Bin3 = <<1,17,42:16>>,
+ true = [1,17,0,42] =:= binary_to_list(Bin3),
+ <<_A,_B,C:16>> = <<1,17,42:16>>,
+ true = C =:= 42,
+ <<D:16,_E,F>> = <<1,17,42:16>>,
+ true = D =:= 273,
+ true = F =:= 42,
<<_G,H/binary>> = <<1,17,42:16>>,
- ?line true = H =:= <<17,0,42>>,
+ true = H =:= <<17,0,42>>,
- ?line [ok] =
+ [ok] =
scan(<<"Bin1 = <<1,17,42>>,
true = [1,17,42] =:= binary_to_list(Bin1),
- Bin2 = <<\"abc\">>,
+ Bin2 = <<\"abc\">>,
true = \"abc\" =:= binary_to_list(Bin2),
Bin3 = <<1,17,42:16>>,
- true =
- [1,17,0,42] =:= binary_to_list(Bin3),
- <<A,B,C:16>> = <<1,17,42:16>>,
- true = C =:= 42,
- <<D:16,E,F>> = <<1,17,42:16>>,
- true = D =:= 273,
- true = F =:= 42,
- <<G,H/binary>> = <<1,17,42:16>>,
- true = H =:= <<17,0,42>>,
- ok.">>),
+ true =
+ [1,17,0,42] =:= binary_to_list(Bin3),
+ <<A,B,C:16>> = <<1,17,42:16>>,
+ true = C =:= 42,
+ <<D:16,E,F>> = <<1,17,42:16>>,
+ true = D =:= 273,
+ true = F =:= 42,
+ <<G,H/binary>> = <<1,17,42:16>>,
+ true = H =:= <<17,0,42>>,
+ ok.">>),
%% Binary comprehensions.
- ?line <<2,4,6>> = << << (X*2) >> || <<X>> <= << 1,2,3 >> >>,
- ok.
+ <<2,4,6>> = << << (X*2) >> || <<X>> <= << 1,2,3 >> >>,
+ ok.
-define(IP_VERSION, 4).
-define(IP_MIN_HDR_LEN, 5).
-progex_bit_syntax(doc) ->
- ["Bit syntax examples from Programming Examples. OTP-5237."];
-progex_bit_syntax(suite) ->
- [];
+
+%% Bit syntax examples from Programming Examples. OTP-5237.
progex_bit_syntax(Config) when is_list(Config) ->
Bin11 = <<1, 17, 42>>,
true = [1, 17, 42] =:= binary_to_list(Bin11),
Bin12 = <<"abc">>,
true = [97, 98, 99] =:= binary_to_list(Bin12),
-
+
A = 1, B = 17, C = 42,
Bin2 = <<A, B, C:16>>,
true = [1, 17, 00, 42] =:= binary_to_list(Bin2),
@@ -1613,10 +1558,10 @@ progex_bit_syntax(Config) when is_list(Config) ->
DgramSize = byte_size(Dgram),
case Dgram of
<<?IP_VERSION:4, HLen:4, SrvcType:8, TotLen:16,
- ID:16, Flgs:3, FragOff:13,
- TTL:8, Proto:8, HdrChkSum:16,
- SrcIP:32, DestIP:32,
- RestDgram/binary>> when HLen>=5, 4*HLen=<DgramSize ->
+ ID:16, Flgs:3, FragOff:13,
+ TTL:8, Proto:8, HdrChkSum:16,
+ SrcIP:32, DestIP:32,
+ RestDgram/binary>> when HLen>=5, 4*HLen=<DgramSize ->
OptsLen = 4*(HLen - ?IP_MIN_HDR_LEN),
<<Opts:OptsLen/binary,Data/binary>> = RestDgram,
{SrvcType, TotLen, Flgs, FragOff, ID, HdrChkSum,
@@ -1653,57 +1598,57 @@ progex_bit_syntax(Config) when is_list(Config) ->
B2 = triples_to_bin2(BL),
true = Lst =:= binary_to_list(B2),
- ?line [ok] = scan(
- <<"Bin11 = <<1, 17, 42>>,
+ [ok] = scan(
+ <<"Bin11 = <<1, 17, 42>>,
true = [1, 17, 42] =:= binary_to_list(Bin11),
- Bin12 = <<\"abc\">>,
+ Bin12 = <<\"abc\">>,
true = [97, 98, 99] =:= binary_to_list(Bin12),
- A = 1, B = 17, C = 42,
- Bin2 = <<A, B, C:16>>,
- true = [1, 17, 00, 42] =:= binary_to_list(Bin2),
- <<D:16, E, F/binary>> = Bin2,
- true = D =:= 273,
- true = E =:= 00,
- true = [42] =:= binary_to_list(F),
-
- Fun4 = fun(Dgram) ->
- DgramSize = byte_size(Dgram),
- case Dgram of
- <<4:4, HLen:4, SrvcType:8, TotLen:16,
- ID:16, Flgs:3, FragOff:13,
- TTL:8, Proto:8, HdrChkSum:16,
- SrcIP:32, DestIP:32,
- RestDgram/binary>> when HLen>=5,
- 4*HLen=<DgramSize ->
- OptsLen = 4*(HLen - 5),
- <<Opts:OptsLen/binary,Data/binary>> = RestDgram,
- {SrvcType, TotLen, Flgs, FragOff, ID, HdrChkSum,
- Proto, TTL, SrcIP, DestIP, Data, Opts};
- _ ->
- not_ok
- end
- end,
- true = Fun4(<<>>) =:= not_ok,
- true = is_tuple(Fun4(list_to_binary
- ([<<4:4,5:4>>,list_to_binary(lists:seq(1,255))]))),
-
- X = 23432324, Y = 24324234,
- <<10:7>> = <<X:1, Y:6>>,
- Z = 234324324,
- XYZ = <<X:1, Y:6, Z:1>>,
- true = [20] =:= binary_to_list(XYZ),
- Hello1 = <<\"hello\">>,
+ A = 1, B = 17, C = 42,
+ Bin2 = <<A, B, C:16>>,
+ true = [1, 17, 00, 42] =:= binary_to_list(Bin2),
+ <<D:16, E, F/binary>> = Bin2,
+ true = D =:= 273,
+ true = E =:= 00,
+ true = [42] =:= binary_to_list(F),
+
+ Fun4 = fun(Dgram) ->
+ DgramSize = byte_size(Dgram),
+ case Dgram of
+ <<4:4, HLen:4, SrvcType:8, TotLen:16,
+ ID:16, Flgs:3, FragOff:13,
+ TTL:8, Proto:8, HdrChkSum:16,
+ SrcIP:32, DestIP:32,
+ RestDgram/binary>> when HLen>=5,
+ 4*HLen=<DgramSize ->
+ OptsLen = 4*(HLen - 5),
+ <<Opts:OptsLen/binary,Data/binary>> = RestDgram,
+ {SrvcType, TotLen, Flgs, FragOff, ID, HdrChkSum,
+ Proto, TTL, SrcIP, DestIP, Data, Opts};
+ _ ->
+ not_ok
+ end
+ end,
+ true = Fun4(<<>>) =:= not_ok,
+ true = is_tuple(Fun4(list_to_binary
+ ([<<4:4,5:4>>,list_to_binary(lists:seq(1,255))]))),
+
+ X = 23432324, Y = 24324234,
+ <<10:7>> = <<X:1, Y:6>>,
+ Z = 234324324,
+ XYZ = <<X:1, Y:6, Z:1>>,
+ true = [20] =:= binary_to_list(XYZ),
+ Hello1 = <<\"hello\">>,
Hello2 = <<$h,$e,$l,$l,$o>>,
- true = \"hello\" =:= binary_to_list(Hello1),
+ true = \"hello\" =:= binary_to_list(Hello1),
true = \"hello\" =:= binary_to_list(Hello2),
FunM1 = fun(<<X1:7/binary, Y1:1/binary>>) -> {X1,Y1} end,
- true = {<<\"1234567\">>,<<\"8\">>} =:= FunM1(<<\"12345678\">>),
+ true = {<<\"1234567\">>,<<\"8\">>} =:= FunM1(<<\"12345678\">>),
FunM2 = fun(<<_X1:7/binary-unit:7, _Y1:1/binary-unit:1>>) -> ok;
(_) -> not_ok end,
- true = not_ok =:= FunM2(<<\"1\">>),
+ true = not_ok =:= FunM2(<<\"1\">>),
ok.">>),
ok.
@@ -1724,590 +1669,577 @@ triples_to_bin2([{X,Y,Z} | T], Acc) ->
triples_to_bin2([], Acc) ->
list_to_binary(lists:reverse(Acc)).
-progex_records(doc) ->
- ["Record examples from Programming Examples. OTP-5237."];
-progex_records(suite) ->
- [];
+%% Record examples from Programming Examples. OTP-5237.
progex_records(Config) when is_list(Config) ->
Test1 =
- <<"-module(recs).
+ <<"-module(recs).
-record(person, {name = \"\", phone = [], address}).
-record(name, {first = \"Robert\", last = \"Ericsson\"}).
-record(person2, {name = #name{}, phone}).
- -export([t/0]).
+-export([t/0]).
- t() ->
- _P1 = #person{phone=[0,8,2,3,4,3,1,2], name=\"Robert\"},
+t() ->
+ _P1 = #person{phone=[0,8,2,3,4,3,1,2], name=\"Robert\"},
\"Robert\" = _P1#person.name,
[0,8,2,3,4,3,1,2] = _P1#person.phone,
- undefined = _P1#person.address,
+ undefined = _P1#person.address,
- _P2 = #person{name = \"Jakob\", _ = '_'},
+ _P2 = #person{name = \"Jakob\", _ = '_'},
\"Jakob\" = _P2#person.name,
'_' = _P2#person.phone,
- '_' = _P2#person.address,
-
- P = #person{name = \"Joe\", phone = [0,8,2,3,4,3,1,2]},
+ '_' = _P2#person.address,
+
+ P = #person{name = \"Joe\", phone = [0,8,2,3,4,3,1,2]},
\"Joe\" = P#person.name,
[0,8,2,3,4,3,1,2] = P#person.phone,
- undefined = P#person.address,
+ undefined = P#person.address,
- P1 = #person{name=\"Joe\", phone=[1,2,3], address=\"A street\"},
+ P1 = #person{name=\"Joe\", phone=[1,2,3], address=\"A street\"},
P2 = P1#person{name=\"Robert\"},
\"Robert\" = P2#person.name,
[1,2,3] = P2#person.phone,
- \"A street\" = P2#person.address,
+ \"A street\" = P2#person.address,
a_person = foo(P1),
- {found, [1,2,3]} =
- find_phone([#person{name = a},
- #person{name = b, phone = [3,2,1]},
- #person{name = c, phone = [1,2,3]}],
- c),
+ {found, [1,2,3]} =
+ find_phone([#person{name = a},
+ #person{name = b, phone = [3,2,1]},
+ #person{name = c, phone = [1,2,3]}],
+ c),
- P3 = #person{name=\"Joe\", phone=[0,0,7], address=\"A street\"},
+ P3 = #person{name=\"Joe\", phone=[0,0,7], address=\"A street\"},
#person{name = Name} = P3,
- \"Joe\" = Name,
+ \"Joe\" = Name,
\"Robert\" = demo(),
ok.
- foo(P) when is_record(P, person) -> a_person;
- foo(_) -> not_a_person.
+foo(P) when is_record(P, person) -> a_person;
+foo(_) -> not_a_person.
- find_phone([#person{name=Name, phone=Phone} | _], Name) ->
- {found, Phone};
- find_phone([_| T], Name) ->
- find_phone(T, Name);
- find_phone([], _Name) ->
- not_found.
+find_phone([#person{name=Name, phone=Phone} | _], Name) ->
+ {found, Phone};
+find_phone([_| T], Name) ->
+ find_phone(T, Name);
+find_phone([], _Name) ->
+ not_found.
- demo() ->
- P = #person2{name= #name{first=\"Robert\",last=\"Virding\"},
+demo() ->
+ P = #person2{name= #name{first=\"Robert\",last=\"Virding\"},
phone=123},
- _First = (P#person2.name)#name.first.
- ">>,
- ?line ok = run_file(Config, recs, Test1),
+ _First = (P#person2.name)#name.first.
+">>,
+ ok = run_file(Config, recs, Test1),
- Test1_shell =
- <<"rd(person, {name = \"\", phone = [], address}),
+Test1_shell =
+<<"rd(person, {name = \"\", phone = [], address}),
rd(name, {first = \"Robert\", last = \"Ericsson\"}),
rd(person2, {name = #name{}, phone}),
- _P1 = #person{phone=[0,8,2,3,4,3,1,2], name=\"Robert\"},
+ _P1 = #person{phone=[0,8,2,3,4,3,1,2], name=\"Robert\"},
\"Robert\" = _P1#person.name,
[0,8,2,3,4,3,1,2] = _P1#person.phone,
- undefined = _P1#person.address,
+ undefined = _P1#person.address,
- _P2 = #person{name = \"Jakob\", _ = '_'},
+ _P2 = #person{name = \"Jakob\", _ = '_'},
\"Jakob\" = _P2#person.name,
'_' = _P2#person.phone,
- '_' = _P2#person.address,
+ '_' = _P2#person.address,
- P = #person{name = \"Joe\", phone = [0,8,2,3,4,3,1,2]},
+ P = #person{name = \"Joe\", phone = [0,8,2,3,4,3,1,2]},
\"Joe\" = P#person.name,
[0,8,2,3,4,3,1,2] = P#person.phone,
- undefined = P#person.address,
+ undefined = P#person.address,
- P1 = #person{name=\"Joe\", phone=[1,2,3], address=\"A street\"},
+ P1 = #person{name=\"Joe\", phone=[1,2,3], address=\"A street\"},
P2 = P1#person{name=\"Robert\"},
\"Robert\" = P2#person.name,
[1,2,3] = P2#person.phone,
- \"A street\" = P2#person.address,
+ \"A street\" = P2#person.address,
Foo = fun(P) when is_record(P, person) -> a_person;
(_) -> not_a_person
end,
- a_person = Foo(P1),
-
- Find = fun([#person{name=Name, phone=Phone} | _], Name, Fn) ->
- {found, Phone};
- ([_| T], Name, Fn) ->
- Fn(T, Name, Fn);
- ([], _Name, _Fn) ->
- not_found
- end,
-
- {found, [1,2,3]} = Find([#person{name = a},
- #person{name = b, phone = [3,2,1]},
- #person{name = c, phone = [1,2,3]}],
- c,
- Find),
-
- P3 = #person{name=\"Joe\", phone=[0,0,7], address=\"A street\"},
+ a_person = Foo(P1),
+
+ Find = fun([#person{name=Name, phone=Phone} | _], Name, Fn) ->
+ {found, Phone};
+ ([_| T], Name, Fn) ->
+ Fn(T, Name, Fn);
+ ([], _Name, _Fn) ->
+ not_found
+ end,
+
+ {found, [1,2,3]} = Find([#person{name = a},
+ #person{name = b, phone = [3,2,1]},
+ #person{name = c, phone = [1,2,3]}],
+ c,
+ Find),
+
+ P3 = #person{name=\"Joe\", phone=[0,0,7], address=\"A street\"},
#person{name = Name} = P3,
- \"Joe\" = Name,
+ \"Joe\" = Name,
Demo = fun() ->
- P17 = #person2{name= #name{first=\"Robert\",last=\"Virding\"},
+ P17 = #person2{name= #name{first=\"Robert\",last=\"Virding\"},
phone=123},
- _First = (P17#person2.name)#name.first
- end,
+ _First = (P17#person2.name)#name.first
+ end,
- \"Robert\" = Demo(),
+ \"Robert\" = Demo(),
ok.
- ">>,
- ?line [ok] = scan(Test1_shell),
+">>,
+ [ok] = scan(Test1_shell),
- Test2 =
- <<"-module(recs).
+Test2 =
+<<"-module(recs).
-record(person, {name, age, phone = [], dict = []}).
- -compile(export_all).
+-compile(export_all).
- t() -> ok.
+t() -> ok.
- make_hacker_without_phone(Name, Age) ->
- #person{name = Name, age = Age,
- dict = [{computer_knowledge, excellent},
- {drinks, coke}]}.
- print(#person{name = Name, age = Age,
- phone = Phone, dict = Dict}) ->
- io:format(\"Name: ~s, Age: ~w, Phone: ~w ~n\"
+make_hacker_without_phone(Name, Age) ->
+ #person{name = Name, age = Age,
+ dict = [{computer_knowledge, excellent},
+ {drinks, coke}]}.
+print(#person{name = Name, age = Age,
+ phone = Phone, dict = Dict}) ->
+ io:format(\"Name: ~s, Age: ~w, Phone: ~w ~n\"
\"Dictionary: ~w.~n\", [Name, Age, Phone, Dict]).
birthday(P) when record(P, person) ->
- P#person{age = P#person.age + 1}.
+ P#person{age = P#person.age + 1}.
- register_two_hackers() ->
- Hacker1 = make_hacker_without_phone(\"Joe\", 29),
+register_two_hackers() ->
+ Hacker1 = make_hacker_without_phone(\"Joe\", 29),
OldHacker = birthday(Hacker1),
- % The central_register_server should have
- % an interface function for this.
- central_register_server ! {register_person, Hacker1},
- central_register_server ! {register_person,
- OldHacker#person{name = \"Robert\",
+ %% The central_register_server should have
+ %% an interface function for this.
+ central_register_server ! {register_person, Hacker1},
+ central_register_server ! {register_person,
+ OldHacker#person{name = \"Robert\",
phone = [0,8,3,2,4,5,3,1]}}.
- ">>,
- ?line ok = run_file(Config, recs, Test2),
- ok.
+">>,
+ ok = run_file(Config, recs, Test2),
+ok.
-progex_lc(doc) ->
- ["List comprehension examples from Programming Examples. OTP-5237."];
-progex_lc(suite) ->
- [];
+%% List comprehension examples from Programming Examples. OTP-5237.
progex_lc(Config) when is_list(Config) ->
Test1 =
- <<"-module(lc).
+ <<"-module(lc).
-export([t/0]).
- t() ->
- [a,4,b,5,6] = [X || X <- [1,2,a,3,4,b,5,6], X > 3],
- [4,5,6] = [X || X <- [1,2,a,3,4,b,5,6], integer(X), X > 3],
- [{1,a},{1,b},{2,a},{2,b},{3,a},{3,b}] =
- [{X, Y} || X <- [1,2,3], Y <- [a,b]],
-
- [1,2,3,4,5,6,7,8] = sort([4,5,1,8,3,6,7,2]),
- [[b,u,g],[b,g,u],[u,b,g],[u,g,b],[g,b,u],[g,u,b]] =
- perms([b,u,g]),
- [] = pyth(11),
- [{3,4,5},{4,3,5}] = pyth(12),
- [{3,4,5},{4,3,5},{5,12,13},{6,8,10},{8,6,10},{8,15,17},
- {9,12,15},{12,5,13},{12,9,15},{12,16,20},{15,8,17},
- {16,12,20}] = pyth(50),
- [] = pyth1(11),
- [{3,4,5},{4,3,5}] = pyth1(12),
- [{3,4,5},{4,3,5},{5,12,13},{6,8,10},{8,6,10},{8,15,17},
- {9,12,15},{12,5,13},{12,9,15},{12,16,20},{15,8,17},
- {16,12,20}] = pyth1(50),
- [1,2,3,4,5] = append([[1,2,3],[4,5]]),
- [2,3,4] = map(fun(X) -> X + 1 end, [1,2,3]),
- [2,4] = filter(fun(X) -> X > 1 end, [0,2,4]),
- [1,2,3,7] = select(b,[{a,1},{b,2},{c,3},{b,7}]),
- [2,7] = select2(b,[{a,1},{b,2},{c,3},{b,7}]),
- ok.
-
- sort([Pivot|T]) ->
- sort([ X || X <- T, X < Pivot]) ++
- [Pivot] ++
- sort([ X || X <- T, X >= Pivot]);
- sort([]) -> [].
-
- perms([]) -> [[]];
- perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
-
- pyth(N) ->
- [ {A,B,C} ||
- A <- lists:seq(1,N),
- B <- lists:seq(1,N),
- C <- lists:seq(1,N),
- A+B+C =< N,
- A*A+B*B == C*C
- ].
-
- pyth1(N) ->
- [{A,B,C} ||
- A <- lists:seq(1,N),
- B <- lists:seq(1,N-A+1),
- C <- lists:seq(1,N-A-B+2),
- A+B+C =< N,
- A*A+B*B == C*C ].
-
- append(L) -> [X || L1 <- L, X <- L1].
- map(Fun, L) -> [Fun(X) || X <- L].
- filter(Pred, L) -> [X || X <- L, Pred(X)].
-
- select(X, L) -> [Y || {X, Y} <- L].
- select2(X, L) -> [Y || {X1, Y} <- L, X == X1].
- ">>,
- ?line ok = run_file(Config, lc, Test1),
-
- Test1_shell =
- <<"[a,4,b,5,6] = [X || X <- [1,2,a,3,4,b,5,6], X > 3],
- [4,5,6] = [X || X <- [1,2,a,3,4,b,5,6], integer(X), X > 3],
- [{1,a},{1,b},{2,a},{2,b},{3,a},{3,b}] =
- [{X, Y} || X <- [1,2,3], Y <- [a,b]],
-
- Sort = fun([Pivot|T], Fn) ->
- Fn([ X || X <- T, X < Pivot], Fn) ++
- [Pivot] ++
- Fn([ X || X <- T, X >= Pivot], Fn);
- ([], _Fn) -> []
- end,
-
- [1,2,3,4,5,6,7,8] = Sort([4,5,1,8,3,6,7,2], Sort),
- Perms = fun([], _Fn) -> [[]];
- (L, Fn) -> [[H|T] || H <- L, T <- Fn(L--[H], Fn)]
- end,
- [[b,u,g],[b,g,u],[u,b,g],[u,g,b],[g,b,u],[g,u,b]] =
- Perms([b,u,g], Perms),
-
- Pyth = fun(N) ->
- [ {A,B,C} ||
- A <- lists:seq(1,N),
- B <- lists:seq(1,N),
- C <- lists:seq(1,N),
- A+B+C =< N,
- A*A+B*B == C*C
- ]
- end,
-
- [] = Pyth(11),
- [{3,4,5},{4,3,5}] = Pyth(12),
- %[{3,4,5},{4,3,5},{5,12,13},{6,8,10},{8,6,10},{8,15,17},
- % {9,12,15},{12,5,13},{12,9,15},{12,16,20},{15,8,17},
- % {16,12,20}] = Pyth(50),
-
- Pyth1 = fun(N) ->
- [{A,B,C} ||
- A <- lists:seq(1,N),
- B <- lists:seq(1,N-A+1),
- C <- lists:seq(1,N-A-B+2),
- A+B+C =< N,
- A*A+B*B == C*C ]
- end,
-
- [] = Pyth1(11),
- [{3,4,5},{4,3,5}] = Pyth1(12),
- [{3,4,5},{4,3,5},{5,12,13},{6,8,10},{8,6,10},{8,15,17},
- {9,12,15},{12,5,13},{12,9,15},{12,16,20},{15,8,17},
- {16,12,20}] = Pyth1(50),
-
- Append = fun(L) -> [X || L1 <- L, X <- L1] end,
- [1,2,3,4,5] = Append([[1,2,3],[4,5]]),
- Map = fun(Fun, L) -> [Fun(X) || X <- L] end,
- [2,3,4] = Map(fun(X) -> X + 1 end, [1,2,3]),
- Filter = fun(Pred, L) -> [X || X <- L, Pred(X)] end,
- [2,4] = Filter(fun(X) -> X > 1 end, [0,2,4]),
-
- Select = fun(X, L) -> [Y || {X, Y} <- L] end,
- [1,2,3,7] = Select(b,[{a,1},{b,2},{c,3},{b,7}]),
- Select2 = fun(X, L) -> [Y || {X1, Y} <- L, X == X1] end,
- [2,7] = Select2(b,[{a,1},{b,2},{c,3},{b,7}]),
- ok.
- ">>,
- ?line [ok] = scan(Test1_shell),
+t() ->
+ [a,4,b,5,6] = [X || X <- [1,2,a,3,4,b,5,6], X > 3],
+ [4,5,6] = [X || X <- [1,2,a,3,4,b,5,6], integer(X), X > 3],
+ [{1,a},{1,b},{2,a},{2,b},{3,a},{3,b}] =
+ [{X, Y} || X <- [1,2,3], Y <- [a,b]],
+
+ [1,2,3,4,5,6,7,8] = sort([4,5,1,8,3,6,7,2]),
+ [[b,u,g],[b,g,u],[u,b,g],[u,g,b],[g,b,u],[g,u,b]] =
+ perms([b,u,g]),
+ [] = pyth(11),
+ [{3,4,5},{4,3,5}] = pyth(12),
+ [{3,4,5},{4,3,5},{5,12,13},{6,8,10},{8,6,10},{8,15,17},
+ {9,12,15},{12,5,13},{12,9,15},{12,16,20},{15,8,17},
+ {16,12,20}] = pyth(50),
+ [] = pyth1(11),
+ [{3,4,5},{4,3,5}] = pyth1(12),
+ [{3,4,5},{4,3,5},{5,12,13},{6,8,10},{8,6,10},{8,15,17},
+ {9,12,15},{12,5,13},{12,9,15},{12,16,20},{15,8,17},
+ {16,12,20}] = pyth1(50),
+ [1,2,3,4,5] = append([[1,2,3],[4,5]]),
+ [2,3,4] = map(fun(X) -> X + 1 end, [1,2,3]),
+ [2,4] = filter(fun(X) -> X > 1 end, [0,2,4]),
+ [1,2,3,7] = select(b,[{a,1},{b,2},{c,3},{b,7}]),
+ [2,7] = select2(b,[{a,1},{b,2},{c,3},{b,7}]),
ok.
-progex_funs(doc) ->
- ["Funs examples from Programming Examples. OTP-5237."];
-progex_funs(suite) ->
- [];
+sort([Pivot|T]) ->
+ sort([ X || X <- T, X < Pivot]) ++
+ [Pivot] ++
+ sort([ X || X <- T, X >= Pivot]);
+sort([]) -> [].
+
+perms([]) -> [[]];
+perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
+
+pyth(N) ->
+ [ {A,B,C} ||
+ A <- lists:seq(1,N),
+ B <- lists:seq(1,N),
+ C <- lists:seq(1,N),
+ A+B+C =< N,
+ A*A+B*B == C*C
+ ].
+
+pyth1(N) ->
+ [{A,B,C} ||
+ A <- lists:seq(1,N),
+ B <- lists:seq(1,N-A+1),
+ C <- lists:seq(1,N-A-B+2),
+ A+B+C =< N,
+ A*A+B*B == C*C ].
+
+append(L) -> [X || L1 <- L, X <- L1].
+map(Fun, L) -> [Fun(X) || X <- L].
+filter(Pred, L) -> [X || X <- L, Pred(X)].
+
+select(X, L) -> [Y || {X, Y} <- L].
+select2(X, L) -> [Y || {X1, Y} <- L, X == X1].
+">>,
+ ok = run_file(Config, lc, Test1),
+
+Test1_shell =
+<<"[a,4,b,5,6] = [X || X <- [1,2,a,3,4,b,5,6], X > 3],
+ [4,5,6] = [X || X <- [1,2,a,3,4,b,5,6], integer(X), X > 3],
+ [{1,a},{1,b},{2,a},{2,b},{3,a},{3,b}] =
+ [{X, Y} || X <- [1,2,3], Y <- [a,b]],
+
+ Sort = fun([Pivot|T], Fn) ->
+ Fn([ X || X <- T, X < Pivot], Fn) ++
+ [Pivot] ++
+ Fn([ X || X <- T, X >= Pivot], Fn);
+ ([], _Fn) -> []
+ end,
+
+ [1,2,3,4,5,6,7,8] = Sort([4,5,1,8,3,6,7,2], Sort),
+ Perms = fun([], _Fn) -> [[]];
+ (L, Fn) -> [[H|T] || H <- L, T <- Fn(L--[H], Fn)]
+ end,
+ [[b,u,g],[b,g,u],[u,b,g],[u,g,b],[g,b,u],[g,u,b]] =
+ Perms([b,u,g], Perms),
+
+ Pyth = fun(N) ->
+ [ {A,B,C} ||
+ A <- lists:seq(1,N),
+ B <- lists:seq(1,N),
+ C <- lists:seq(1,N),
+ A+B+C =< N,
+ A*A+B*B == C*C
+ ]
+ end,
+
+ [] = Pyth(11),
+ [{3,4,5},{4,3,5}] = Pyth(12),
+%%[{3,4,5},{4,3,5},{5,12,13},{6,8,10},{8,6,10},{8,15,17},
+%% {9,12,15},{12,5,13},{12,9,15},{12,16,20},{15,8,17},
+%% {16,12,20}] = Pyth(50),
+
+ Pyth1 = fun(N) ->
+ [{A,B,C} ||
+ A <- lists:seq(1,N),
+ B <- lists:seq(1,N-A+1),
+ C <- lists:seq(1,N-A-B+2),
+ A+B+C =< N,
+ A*A+B*B == C*C ]
+ end,
+
+ [] = Pyth1(11),
+ [{3,4,5},{4,3,5}] = Pyth1(12),
+ [{3,4,5},{4,3,5},{5,12,13},{6,8,10},{8,6,10},{8,15,17},
+ {9,12,15},{12,5,13},{12,9,15},{12,16,20},{15,8,17},
+ {16,12,20}] = Pyth1(50),
+
+ Append = fun(L) -> [X || L1 <- L, X <- L1] end,
+ [1,2,3,4,5] = Append([[1,2,3],[4,5]]),
+ Map = fun(Fun, L) -> [Fun(X) || X <- L] end,
+ [2,3,4] = Map(fun(X) -> X + 1 end, [1,2,3]),
+ Filter = fun(Pred, L) -> [X || X <- L, Pred(X)] end,
+ [2,4] = Filter(fun(X) -> X > 1 end, [0,2,4]),
+
+ Select = fun(X, L) -> [Y || {X, Y} <- L] end,
+ [1,2,3,7] = Select(b,[{a,1},{b,2},{c,3},{b,7}]),
+ Select2 = fun(X, L) -> [Y || {X1, Y} <- L, X == X1] end,
+ [2,7] = Select2(b,[{a,1},{b,2},{c,3},{b,7}]),
+ ok.
+">>,
+ [ok] = scan(Test1_shell),
+ok.
+
+%% Funs examples from Programming Examples. OTP-5237.
progex_funs(Config) when is_list(Config) ->
Test1 =
- <<"-module(funs).
+ <<"-module(funs).
-compile(export_all).
- double([H|T]) -> [2*H|double(T)];
- double([]) -> [].
+double([H|T]) -> [2*H|double(T)];
+double([]) -> [].
- add_one([H|T]) -> [H+1|add_one(T)];
- add_one([]) -> [].
+add_one([H|T]) -> [H+1|add_one(T)];
+add_one([]) -> [].
- map(F, [H|T]) -> [F(H)|map(F, T)];
- map(F, []) -> [].
+map(F, [H|T]) -> [F(H)|map(F, T)];
+map(F, []) -> [].
- double2(L) -> map(fun(X) -> 2*X end, L).
- add_one2(L) -> map(fun(X) -> 1 + X end, L).
+double2(L) -> map(fun(X) -> 2*X end, L).
+add_one2(L) -> map(fun(X) -> 1 + X end, L).
- print_list(Stream, [H|T]) ->
- io:format(Stream, \"~p~n\", [H]),
+print_list(Stream, [H|T]) ->
+ io:format(Stream, \"~p~n\", [H]),
print_list(Stream, T);
- print_list(Stream, []) ->
- true.
-
- broadcast(Msg, [Pid|Pids]) ->
- Pid ! Msg,
- broadcast(Msg, Pids);
- broadcast(_, []) ->
- true.
-
- foreach(F, [H|T]) ->
- F(H),
- foreach(F, T);
- foreach(F, []) ->
- ok.
+ print_list(Stream, []) ->
+ true.
+
+broadcast(Msg, [Pid|Pids]) ->
+ Pid ! Msg,
+ broadcast(Msg, Pids);
+broadcast(_, []) ->
+ true.
+
+foreach(F, [H|T]) ->
+ F(H),
+ foreach(F, T);
+foreach(F, []) ->
+ ok.
- print_list2(S, L) ->
- foreach(fun(H) -> io:format(S, \"~p~n\",[H]) end, L).
+print_list2(S, L) ->
+ foreach(fun(H) -> io:format(S, \"~p~n\",[H]) end, L).
broadcast2(M, L) -> foreach(fun(Pid) -> Pid ! M end, L).
- t1() -> map(fun(X) -> 2 * X end, [1,2,3,4,5]).
+t1() -> map(fun(X) -> 2 * X end, [1,2,3,4,5]).
- t2() -> map(fun double/1, [1,2,3,4,5]).
+t2() -> map(fun double/1, [1,2,3,4,5]).
- t3() -> map({?MODULE, double3}, [1,2,3,4,5]).
+t3() -> map({?MODULE, double3}, [1,2,3,4,5]).
- double3(X) -> X * 2.
+double3(X) -> X * 2.
- f(F, Args) when function(F) ->
- apply(F, Args);
- f(N, _) when integer(N) ->
- N.
+f(F, Args) when function(F) ->
+ apply(F, Args);
+f(N, _) when integer(N) ->
+ N.
- print_list3(File, List) ->
- {ok, Stream} = file:open(File, write),
- foreach(fun(X) -> io:format(Stream,\"~p~n\",[X]) end, List),
+print_list3(File, List) ->
+ {ok, Stream} = file:open(File, write),
+ foreach(fun(X) -> io:format(Stream,\"~p~n\",[X]) end, List),
file:close(Stream).
- print_list4(File, List) ->
- {ok, Stream} = file:open(File, write),
- foreach(fun(File) ->
- io:format(Stream,\"~p~n\",[File])
+print_list4(File, List) ->
+ {ok, Stream} = file:open(File, write),
+ foreach(fun(File) ->
+ io:format(Stream,\"~p~n\",[File])
end, List),
- file:close(Stream).
+ file:close(Stream).
+
+any(Pred, [H|T]) ->
+ case Pred(H) of
+ true -> true;
+ false -> any(Pred, T)
+ end;
+any(Pred, []) ->
+ false.
+
+all(Pred, [H|T]) ->
+ case Pred(H) of
+ true -> all(Pred, T);
+ false -> false
+ end;
+all(Pred, []) ->
+ true.
+
+foldl(F, Accu, [Hd|Tail]) ->
+ foldl(F, F(Hd, Accu), Tail);
+foldl(F, Accu, []) -> Accu.
+
+mapfoldl(F, Accu0, [Hd|Tail]) ->
+ {R,Accu1} = F(Hd, Accu0),
+ {Rs,Accu2} = mapfoldl(F, Accu1, Tail),
+ {[R|Rs], Accu2};
+mapfoldl(F, Accu, []) -> {[], Accu}.
+
+filter(F, [H|T]) ->
+ case F(H) of
+ true -> [H|filter(F, T)];
+ false -> filter(F, T)
+ end;
+filter(F, []) -> [].
+
+diff(L1, L2) ->
+ filter(fun(X) -> not lists:member(X, L2) end, L1).
+
+intersection(L1,L2) -> filter(fun(X) -> lists:member(X,L1) end, L2).
+
+takewhile(Pred, [H|T]) ->
+ case Pred(H) of
+ true -> [H|takewhile(Pred, T)];
+ false -> []
+ end;
+takewhile(Pred, []) ->
+ [].
+
+dropwhile(Pred, [H|T]) ->
+ case Pred(H) of
+ true -> dropwhile(Pred, T);
+ false -> [H|T]
+ end;
+dropwhile(Pred, []) ->
+ [].
+
+splitlist(Pred, L) ->
+ splitlist(Pred, L, []).
+
+splitlist(Pred, [H|T], L) ->
+ case Pred(H) of
+ true -> splitlist(Pred, T, [H|L]);
+ false -> {lists:reverse(L), [H|T]}
+ end;
+splitlist(Pred, [], L) ->
+ {lists:reverse(L), []}.
+
+first(Pred, [H|T]) ->
+ case Pred(H) of
+ true ->
+ {true, H};
+ false ->
+ first(Pred, T)
+ end;
+first(Pred, []) ->
+ false.
+
+ints_from(N) ->
+ fun() ->
+ [N|ints_from(N+1)]
+ end.
+
+pconst(X) ->
+ fun (T) ->
+ case T of
+ [X|T1] -> {ok, {const, X}, T1};
+ _ -> fail
+ end
+ end.
+
+pand(P1, P2) ->
+ fun (T) ->
+ case P1(T) of
+ {ok, R1, T1} ->
+ case P2(T1) of
+ {ok, R2, T2} ->
+ {ok, {'and', R1, R2}};
+ fail ->
+ fail
+ end;
+ fail ->
+ fail
+ end
+ end.
+
+por(P1, P2) ->
+ fun (T) ->
+ case P1(T) of
+ {ok, R, T1} ->
+ {ok, {'or',1,R}, T1};
+ fail ->
+ case P2(T) of
+ {ok, R1, T1} ->
+ {ok, {'or',2,R1}, T1};
+ fail ->
+ fail
+ end
+ end
+ end.
- any(Pred, [H|T]) ->
- case Pred(H) of
- true -> true;
- false -> any(Pred, T)
- end;
- any(Pred, []) ->
- false.
-
- all(Pred, [H|T]) ->
- case Pred(H) of
- true -> all(Pred, T);
- false -> false
- end;
- all(Pred, []) ->
- true.
-
- foldl(F, Accu, [Hd|Tail]) ->
- foldl(F, F(Hd, Accu), Tail);
- foldl(F, Accu, []) -> Accu.
-
- mapfoldl(F, Accu0, [Hd|Tail]) ->
- {R,Accu1} = F(Hd, Accu0),
- {Rs,Accu2} = mapfoldl(F, Accu1, Tail),
- {[R|Rs], Accu2};
- mapfoldl(F, Accu, []) -> {[], Accu}.
-
- filter(F, [H|T]) ->
- case F(H) of
- true -> [H|filter(F, T)];
- false -> filter(F, T)
- end;
- filter(F, []) -> [].
-
- diff(L1, L2) ->
- filter(fun(X) -> not lists:member(X, L2) end, L1).
-
- intersection(L1,L2) -> filter(fun(X) -> lists:member(X,L1) end, L2).
-
- takewhile(Pred, [H|T]) ->
- case Pred(H) of
- true -> [H|takewhile(Pred, T)];
- false -> []
- end;
- takewhile(Pred, []) ->
- [].
-
- dropwhile(Pred, [H|T]) ->
- case Pred(H) of
- true -> dropwhile(Pred, T);
- false -> [H|T]
- end;
- dropwhile(Pred, []) ->
- [].
-
- splitlist(Pred, L) ->
- splitlist(Pred, L, []).
-
- splitlist(Pred, [H|T], L) ->
- case Pred(H) of
- true -> splitlist(Pred, T, [H|L]);
- false -> {lists:reverse(L), [H|T]}
- end;
- splitlist(Pred, [], L) ->
- {lists:reverse(L), []}.
-
- first(Pred, [H|T]) ->
- case Pred(H) of
- true ->
- {true, H};
- false ->
- first(Pred, T)
- end;
- first(Pred, []) ->
- false.
-
- ints_from(N) ->
- fun() ->
- [N|ints_from(N+1)]
- end.
-
- pconst(X) ->
- fun (T) ->
- case T of
- [X|T1] -> {ok, {const, X}, T1};
- _ -> fail
- end
- end.
-
- pand(P1, P2) ->
- fun (T) ->
- case P1(T) of
- {ok, R1, T1} ->
- case P2(T1) of
- {ok, R2, T2} ->
- {ok, {'and', R1, R2}};
- fail ->
- fail
- end;
- fail ->
- fail
- end
- end.
-
- por(P1, P2) ->
- fun (T) ->
- case P1(T) of
- {ok, R, T1} ->
- {ok, {'or',1,R}, T1};
- fail ->
- case P2(T) of
- {ok, R1, T1} ->
- {ok, {'or',2,R1}, T1};
- fail ->
- fail
- end
- end
- end.
-
- grammar() ->
- pand(
- por(pconst(a), pconst(b)),
- por(pconst(c), pconst(d))).
-
- parse(List) ->
- (grammar())(List).
-
-
- t() ->
- [2,4,6,8] = double([1,2,3,4]),
- [2,3,4,5] = add_one([1,2,3,4]),
- [2,4,6,8] = double2([1,2,3,4]),
- [2,3,4,5] = add_one2([1,2,3,4]),
- XX = ints_from(1),
- [1 | _] = XX(),
- 1 = hd(XX()),
- Y = tl(XX()),
- 2 = hd(Y()),
-
- P1 = pconst(a),
- {ok,{const,a},[b,c]} = P1([a,b,c]),
- fail = P1([x,y,z]),
-
- {ok,{'and',{'or',1,{const,a}},{'or',1,{const,c}}}} =
- parse([a,c]),
- {ok,{'and',{'or',1,{const,a}},{'or',2,{const,d}}}} =
- parse([a,d]),
- {ok,{'and',{'or',2,{const,b}},{'or',1,{const,c}}}} =
- parse([b,c]),
- {ok,{'and',{'or',2,{const,b}},{'or',2,{const,d}}}} =
- parse([b,d]),
- fail = parse([a,b]),
- ok.
- ">>,
- ?line ok = run_file(Config, funs, Test1),
-
- Test2_shell =
- <<"Double = fun(X) -> 2 * X end,
+grammar() ->
+ pand(
+ por(pconst(a), pconst(b)),
+ por(pconst(c), pconst(d))).
+
+parse(List) ->
+ (grammar())(List).
+
+
+t() ->
+ [2,4,6,8] = double([1,2,3,4]),
+ [2,3,4,5] = add_one([1,2,3,4]),
+ [2,4,6,8] = double2([1,2,3,4]),
+ [2,3,4,5] = add_one2([1,2,3,4]),
+ XX = ints_from(1),
+ [1 | _] = XX(),
+ 1 = hd(XX()),
+ Y = tl(XX()),
+ 2 = hd(Y()),
+
+ P1 = pconst(a),
+ {ok,{const,a},[b,c]} = P1([a,b,c]),
+ fail = P1([x,y,z]),
+
+ {ok,{'and',{'or',1,{const,a}},{'or',1,{const,c}}}} =
+ parse([a,c]),
+ {ok,{'and',{'or',1,{const,a}},{'or',2,{const,d}}}} =
+ parse([a,d]),
+ {ok,{'and',{'or',2,{const,b}},{'or',1,{const,c}}}} =
+ parse([b,c]),
+ {ok,{'and',{'or',2,{const,b}},{'or',2,{const,d}}}} =
+ parse([b,d]),
+ fail = parse([a,b]),
+ ok.
+">>,
+ ok = run_file(Config, funs, Test1),
+
+Test2_shell =
+<<"Double = fun(X) -> 2 * X end,
[2,4,6,8,10] = lists:map(Double, [1,2,3,4,5]),
-
- Big = fun(X) -> if X > 10 -> true; true -> false end end,
- false = lists:any(Big, [1,2,3,4]),
- true = lists:any(Big, [1,2,3,12,5]),
- false = lists:all(Big, [1,2,3,4,12,6]),
- true = lists:all(Big, [12,13,14,15]),
- L = [\"I\",\"like\",\"Erlang\"],
+
+ Big = fun(X) -> if X > 10 -> true; true -> false end end,
+ false = lists:any(Big, [1,2,3,4]),
+ true = lists:any(Big, [1,2,3,12,5]),
+ false = lists:all(Big, [1,2,3,4,12,6]),
+ true = lists:all(Big, [12,13,14,15]),
+ L = [\"I\",\"like\",\"Erlang\"],
11 = lists:foldl(fun(X, Sum) -> length(X) + Sum end, 0, L),
- Upcase = fun(X) when $a =< X, X =< $z -> X + $A - $a;
- (X) -> X
- end,
- Upcase_word = fun(X) -> lists:map(Upcase, X) end,
- \"ERLANG\" = Upcase_word(\"Erlang\"),
+ Upcase = fun(X) when $a =< X, X =< $z -> X + $A - $a;
+ (X) -> X
+ end,
+ Upcase_word = fun(X) -> lists:map(Upcase, X) end,
+ \"ERLANG\" = Upcase_word(\"Erlang\"),
[\"I\",\"LIKE\",\"ERLANG\"] = lists:map(Upcase_word, L),
{[\"I\",\"LIKE\",\"ERLANG\"],11} =
lists:mapfoldl(fun(Word, Sum) ->
- {Upcase_word(Word), Sum + length(Word)}
+ {Upcase_word(Word), Sum + length(Word)}
end, 0, L),
- [500,12,45] = lists:filter(Big, [500,12,2,45,6,7]),
- [200,500,45] = lists:takewhile(Big, [200,500,45,5,3,45,6]),
- [5,3,45,6] = lists:dropwhile(Big, [200,500,45,5,3,45,6]),
- {[200,500,45],[5,3,45,6]} =
- lists:splitwith(Big, [200,500,45,5,3,45,6]),
+ [500,12,45] = lists:filter(Big, [500,12,2,45,6,7]),
+ [200,500,45] = lists:takewhile(Big, [200,500,45,5,3,45,6]),
+ [5,3,45,6] = lists:dropwhile(Big, [200,500,45,5,3,45,6]),
+ {[200,500,45],[5,3,45,6]} =
+ lists:splitwith(Big, [200,500,45,5,3,45,6]),
%% {true,45} = lists:first(Big, [1,2,45,6,123]),
%% false = lists:first(Big, [1,2,4,5]),
-
- Adder = fun(X) -> fun(Y) -> X + Y end end,
- Add6 = Adder(6),
- 16 = Add6(10),
- ok.
- ">>,
- ?line [ok] = scan(Test2_shell),
- ok.
+ Adder = fun(X) -> fun(Y) -> X + Y end end,
+ Add6 = Adder(6),
+ 16 = Add6(10),
+ ok.
+">>,
+ [ok] = scan(Test2_shell),
+ok.
-otp_5990(doc) ->
- "OTP-5990. {erlang,is_record}.";
-otp_5990(suite) -> [];
+
+%% OTP-5990. {erlang,is_record}.
otp_5990(Config) when is_list(Config) ->
- ?line [true] =
+ [true] =
scan(<<"rd('OrdSet', {orddata = {},ordtype = type}), "
"S = #'OrdSet'{ordtype = {}}, "
"if tuple(S#'OrdSet'.ordtype) -> true; true -> false end.">>),
ok.
-otp_6166(doc) ->
- "OTP-6166. Order of record definitions.";
-otp_6166(suite) -> [];
+%% OTP-6166. Order of record definitions.
otp_6166(Config) when is_list(Config) ->
- Test1 = filename:join(?config(priv_dir, Config), "test1.hrl"),
+ Test1 = filename:join(proplists:get_value(priv_dir, Config), "test1.hrl"),
Contents1 = <<"-module(test1).
-record(r5, {f}). -record(r3, {f = #r5{}}). "
"-record(r1, {f = #r3{}}). -record(r4, {f = #r1{}}). "
- "-record(r2, {f = #r4{}}).">>,
- ?line ok = file:write_file(Test1, Contents1),
+"-record(r2, {f = #r4{}}).">>,
+ ok = file:write_file(Test1, Contents1),
- Test2 = filename:join(?config(priv_dir, Config), "test2.hrl"),
+ Test2 = filename:join(proplists:get_value(priv_dir, Config), "test2.hrl"),
Contents2 = <<"-module(test2).
-record(r5, {f}). -record(r3, {f = #r5{}}). "
"-record(r1, {f = #r3{}}). -record(r4, {f = #r1{}}). "
"-record(r2, {f = #r4{}}).
-record(r6, {f = #r5{}}). % r6 > r0
-record(r0, {f = #r5{}, g = #r5{}}). % r0 < r5">>,
- ?line ok = file:write_file(Test2, Contents2),
+ ok = file:write_file(Test2, Contents2),
RR12 = "[r1,r2,r3,r4,r5] = rr(\"" ++ Test1 ++ "\"),
[r0,r1,r2,r3,r4,r5,r6] = rr(\"" ++ Test2 ++ "\"),
@@ -2315,74 +2247,72 @@ otp_6166(Config) when is_list(Config) ->
true = is_record(R0, r0),
true = is_record(R6, r6),
ok. ",
- ?line [ok] = scan(RR12),
+ [ok] = scan(RR12),
file:delete(Test1),
file:delete(Test2),
ok.
-otp_6554(doc) ->
- "OTP-6554. Formatted exits and error messages.";
-otp_6554(suite) -> [];
+%% OTP-6554. Formatted exits and error messages.
otp_6554(Config) when is_list(Config) ->
%% Should check the stacktrace as well...
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"math:sqrt(a).">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"fun(X, Y) -> X ++ Y end(a, b).">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"math:sqrt(lists:seq(1,40)).">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"math:sqrt(lists:seq(1,10)).">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"a ++ b.">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"I = {file_info,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined},
aa ++ I.">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"I = {file_info,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined},
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ++ I.">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"I = {file_info,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined},
I ++ I.">>),
- ?line "exception error: bad argument" =
+ "exception error: bad argument" =
comm_err(<<"fun(X) -> not X end(a).">>),
- ?line "exception error: bad argument: a" =
+ "exception error: bad argument: a" =
comm_err(<<"fun(A, B) -> A orelse B end(a, b).">>),
- ?line "exception error: an error occurred when evaluating an arithmetic expression" =
+ "exception error: an error occurred when evaluating an arithmetic expression" =
comm_err(<<"math:sqrt(2)/round(math:sqrt(0)).">>),
- ?line "exception error: interpreted function with arity 1 called with no arguments" =
+ "exception error: interpreted function with arity 1 called with no arguments" =
comm_err(<<"fun(V) -> V end().">>),
- ?line "exception error: interpreted function with arity 1 called with two arguments" =
+ "exception error: interpreted function with arity 1 called with two arguments" =
comm_err(<<"fun(V) -> V end(1,2).">>),
- ?line "exception error: interpreted function with arity 0 called with one argument" =
+ "exception error: interpreted function with arity 0 called with one argument" =
comm_err(<<"fun() -> v end(1).">>),
- ?line "exception error: interpreted function with arity 0 called with 4 arguments" =
+ "exception error: interpreted function with arity 0 called with 4 arguments" =
comm_err(<<"fun() -> v end(1,2,3,4).">>),
- ?line "exception error: math:sqrt/1 called with two arguments" =
+ "exception error: math:sqrt/1 called with two arguments" =
comm_err(<<"fun math:sqrt/1(1,2).">>),
- ?line "exception error: bad function 1." ++ _ =
+ "exception error: bad function 1." ++ _ =
comm_err(<<"(math:sqrt(2))().">>),
- ?line "exception error: bad function [1," ++ _ =
+ "exception error: bad function [1," ++ _ =
comm_err(<<"(lists:seq(1, 100))().">>),
- ?line "exception error: no match of right hand side value 1" ++ _ =
+ "exception error: no match of right hand side value 1" ++ _ =
comm_err(<<"a = math:sqrt(2).">>),
- ?line "exception error: no match of right hand side value" ++ _ =
+ "exception error: no match of right hand side value" ++ _ =
comm_err(<<"I = {file_info,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined},
a = I.">>),
- ?line "exception error: no case clause matching 1" ++ _ =
+ "exception error: no case clause matching 1" ++ _ =
comm_err(<<"case math:sqrt(2) of a -> ok end.">>),
- ?line "exception error: no case clause matching [1," ++ _ =
+ "exception error: no case clause matching [1," ++ _ =
comm_err(<<"V = lists:seq(1, 20), case V of a -> ok end.">>),
- ?line "exception error: no function clause matching" =
+ "exception error: no function clause matching" =
comm_err(<<"fun(P) when is_pid(P) -> true end(a).">>),
case test_server:is_native(erl_eval) of
true ->
@@ -2404,68 +2334,68 @@ otp_6554(Config) when is_list(Config) ->
"lists:reverse(34) (lists.erl, line " ++ _ =
comm_err(<<"lists:reverse(34).">>)
end,
- ?line "exception error: function_clause" =
+ "exception error: function_clause" =
comm_err(<<"erlang:error(function_clause, 4).">>),
- ?line "exception error: no function clause matching" ++ _ =
+ "exception error: no function clause matching" ++ _ =
comm_err(<<"fun(a, b, c, d) -> foo end"
" (lists:seq(1,17),"
" lists:seq(1, 18),"
" lists:seq(1, 40),"
" lists:seq(1, 5)).">>),
- ?line "exception error: no function clause matching" =
+ "exception error: no function clause matching" =
comm_err(<<"fun(P, q) when is_pid(P) -> true end(a, b).">>),
- ?line "exception error: no true branch found when evaluating an if expression" =
+ "exception error: no true branch found when evaluating an if expression" =
comm_err(<<"if length([a,b]) > 17 -> a end.">>),
- ?line "exception error: no such process or port" =
+ "exception error: no such process or port" =
comm_err(<<"Pid = spawn(fun() -> a end),"
"timer:sleep(1),"
"link(Pid).">>),
- ?line "exception error: a system limit has been reached" =
+ "exception error: a system limit has been reached" =
comm_err(<<"list_to_atom(lists:duplicate(300,$a)).">>),
- ?line "exception error: bad receive timeout value" =
+ "exception error: bad receive timeout value" =
comm_err(<<"receive after a -> foo end.">>),
- ?line "exception error: no try clause matching 1" ++ _ =
+ "exception error: no try clause matching 1" ++ _ =
comm_err(<<"try math:sqrt(2) of bar -> yes after 3 end.">>),
- ?line "exception error: no try clause matching [1" ++ _ =
+ "exception error: no try clause matching [1" ++ _ =
comm_err(<<"V = lists:seq(1, 20),"
"try V of bar -> yes after 3 end.">>),
- ?line "exception error: undefined function math:sqrt/2" =
+ "exception error: undefined function math:sqrt/2" =
comm_err(<<"math:sqrt(2, 2).">>),
- ?line "exception error: limit of number of arguments to interpreted function "
+ "exception error: limit of number of arguments to interpreted function "
"exceeded" =
comm_err(<<"fun(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U) ->"
" a end().">>),
- ?line "exception error: bad filter a" =
+ "exception error: bad filter a" =
comm_err(<<"[b || begin a end].">>),
- ?line "exception error: bad generator a" =
+ "exception error: bad generator a" =
comm_err(<<"[X || X <- a].">>),
- ?line "exception throw: undef" = comm_err(<<"throw(undef).">>),
- ?line "exception exit: undef" = comm_err(<<"exit(undef).">>),
+ "exception throw: undef" = comm_err(<<"throw(undef).">>),
+ "exception exit: undef" = comm_err(<<"exit(undef).">>),
- ?line "exception exit: foo" =
+ "exception exit: foo" =
comm_err(<<"catch spawn_link(fun() ->"
" timer:sleep(300), exit(foo) "
" end),"
"timer:sleep(500).">>),
- ?line [ok] = scan(
+ [ok] = scan(
<<"begin process_flag(trap_exit, true),"
" Pid = spawn_link(fun() ->"
" timer:sleep(300), exit(foo) "
" end),"
" timer:sleep(500),"
" receive {'EXIT', Pid, foo} -> ok end end.">>),
- ?line "exception exit: badarith" =
+ "exception exit: badarith" =
comm_err(<<"catch spawn_link(fun() ->"
" timer:sleep(300), 1/0 "
" end),"
"timer:sleep(500).">>),
- ?line "exception exit: {nocatch,foo}" =
+ "exception exit: {nocatch,foo}" =
comm_err(<<"catch spawn_link(fun() ->"
" timer:sleep(300), throw(foo) "
" end),"
"timer:sleep(500).">>),
- ?line [ok] = scan(
+ [ok] = scan(
<<"begin process_flag(trap_exit, true),"
" Pid = spawn_link(fun() ->"
" timer:sleep(300), throw(foo) "
@@ -2474,37 +2404,37 @@ otp_6554(Config) when is_list(Config) ->
" receive {'EXIT', Pid, {{nocatch,foo},_}} -> ok end "
"end.">>),
- ?line "exception error: an error occurred when evaluating an arithmetic expression" =
+ "exception error: an error occurred when evaluating an arithmetic expression" =
comm_err(<<"begin catch_exception(true), 1/0 end.">>),
- ?line "exception error: an error occurred when evaluating an arithmetic expression" =
+ "exception error: an error occurred when evaluating an arithmetic expression" =
comm_err(<<"begin catch_exception(false), 1/0 end.">>),
- ?line "exception error: no function clause matching call to catch_exception/1" =
+ "exception error: no function clause matching call to catch_exception/1" =
comm_err(<<"catch_exception(1).">>),
%% A bug was corrected (expansion of 'try'):
- ?line "2: command not found" =
+ "2: command not found" =
comm_err(<<"try 1 of 1 -> v(2) after 3 end.">>),
%% Cover a few lines:
- ?line "3: command not found" =
+ "3: command not found" =
comm_err(<<"receive foo -> foo after 0 -> v(3) end.">>),
- ?line "3: command not found" =
+ "3: command not found" =
comm_err(<<"receive foo -> foo after 0 -> e(3) end.">>),
- ?line "1 / 0: command not found" = comm_err(<<"v(1/0).">>),
- ?line "1\n1.\n" = t(<<"1. e(1).">>),
- ?line [ok] = scan(<<"h().">>),
- ?line "exception exit: normal" = comm_err(<<"exit(normal).">>),
- ?line [foo] = scan(<<"begin history(0), foo end.">>),
- ?line application:unset_env(stdlib, shell_history_length),
- ?line [true] = scan(<<"begin <<10:(1024*1024*10)>>,"
+ "1 / 0: command not found" = comm_err(<<"v(1/0).">>),
+ "1\n1.\n" = t(<<"1. e(1).">>),
+ [ok] = scan(<<"h().">>),
+ "exception exit: normal" = comm_err(<<"exit(normal).">>),
+ [foo] = scan(<<"begin history(0), foo end.">>),
+ application:unset_env(stdlib, shell_history_length),
+ [true] = scan(<<"begin <<10:(1024*1024*10)>>,"
"<<10:(1024*1024*10)>>, garbage_collect() end.">>),
- ?line "1: syntax error before: '.'" = comm_err("1-."),
- %% ?line comm_err(<<"exit().">>), % would hang
- ?line "exception error: no function clause matching call to history/1" =
+ "1: syntax error before: '.'" = comm_err("1-."),
+ %% comm_err(<<"exit().">>), % would hang
+ "exception error: no function clause matching call to history/1" =
comm_err(<<"history(foo).">>),
- ?line "exception error: no function clause matching call to results/1" =
+ "exception error: no function clause matching call to results/1" =
comm_err(<<"results(foo).">>),
- ?line Test = filename:join(?config(priv_dir, Config),
+ Test = filename:join(proplists:get_value(priv_dir, Config),
"otp_6554.erl"),
Contents = <<"-module(otp_6554).
-export([local_allowed/3, non_local_allowed/3]).
@@ -2514,31 +2444,31 @@ otp_6554(Config) when is_list(Config) ->
non_local_allowed(_,_,State) ->
{true,State}.
">>,
- ?line ok = compile_file(Config, Test, Contents, []),
- ?line "exception exit: restricted shell starts now" =
+ ok = compile_file(Config, Test, Contents, []),
+ "exception exit: restricted shell starts now" =
comm_err(<<"begin shell:start_restricted(otp_6554) end.">>),
- ?line "-record(r,{}).\n1.\nok.\n" =
+ "-record(r,{}).\n1.\nok.\n" =
t(<<"f(), f(B), h(), b(), history(20), results(20),"
"rd(r, {}), rl(r), rf('_'), rl(), rf(),"
"rp(1), _ = rr({foo}), _ = rr({foo}, []),"
"rr({foo}, [], []), ok.">>),
- ?line "false.\n" = t(<<"catch_exception(true).">>),
- ?line "exception exit: restricted shell stopped"=
+ "false.\n" = t(<<"catch_exception(true).">>),
+ "exception exit: restricted shell stopped"=
comm_err(<<"begin shell:stop_restricted() end.">>),
- ?line "true.\n" = t(<<"catch_exception(false).">>),
+ "true.\n" = t(<<"catch_exception(false).">>),
- ?line "20\n1\n1\n1: results(2)\n2: 1\n-> 1\n3: v(2)\n-> 1.\nok.\n" =
+ "20\n1\n1\n1: results(2)\n2: 1\n-> 1\n3: v(2)\n-> 1.\nok.\n" =
t(<<"results(2). 1. v(2). h().">>),
- ?line application:unset_env(stdlib, shell_saved_results),
- ?line "1\nfoo\n17\nB = foo\nC = 17\nF = fun() ->\n foo"
+ application:unset_env(stdlib, shell_saved_results),
+ "1\nfoo\n17\nB = foo\nC = 17\nF = fun() ->\n foo"
"\n end.\nok.\n" =
t(<<"begin F = fun() -> foo end, 1 end. B = F(). C = 17. b().">>),
- ?line "3: command not found" = comm_err(<<"#{v(3) => v}.">>),
- ?line "3: command not found" = comm_err(<<"#{k => v(3)}.">>),
- ?line "3: command not found" = comm_err(<<"#{v(3) := v}.">>),
- ?line "3: command not found" = comm_err(<<"#{k := v(3)}.">>),
- ?line "3: command not found" = comm_err(<<"(v(3))#{}.">>),
+ "3: command not found" = comm_err(<<"#{v(3) => v}.">>),
+ "3: command not found" = comm_err(<<"#{k => v(3)}.">>),
+ "3: command not found" = comm_err(<<"#{v(3) := v}.">>),
+ "3: command not found" = comm_err(<<"#{k := v(3)}.">>),
+ "3: command not found" = comm_err(<<"(v(3))#{}.">>),
%% Tests I'd like to do: (you should try them manually)
%% "catch spawn_link(fun() -> timer:sleep(1000), exit(foo) end)."
%% "** exception error: foo" should be output after 1 second
@@ -2550,12 +2480,10 @@ otp_6554(Config) when is_list(Config) ->
ok.
-otp_7184(doc) ->
- "OTP-7184. Propagate exit signals from dying evaluator process.";
-otp_7184(suite) -> [];
+%% OTP-7184. Propagate exit signals from dying evaluator process.
otp_7184(Config) when is_list(Config) ->
register(otp_7184, self()),
- ?line catch
+ catch
t(<<"P = self(),
spawn_link(fun() -> process_flag(trap_exit,true),
P ! up,
@@ -2567,7 +2495,7 @@ otp_7184(Config) when is_list(Config) ->
erlang:raise(throw, thrown, []).">>),
receive {otp_7184,{'EXIT',_,{{nocatch,thrown},[]}}} -> ok end,
- ?line catch
+ catch
t(<<"P = self(),
spawn_link(fun() -> process_flag(trap_exit,true),
P ! up,
@@ -2579,7 +2507,7 @@ otp_7184(Config) when is_list(Config) ->
erlang:raise(exit, fini, []).">>),
receive {otp_7184,{'EXIT',_,{fini,[]}}} -> ok end,
- ?line catch
+ catch
t(<<"P = self(),
spawn_link(fun() -> process_flag(trap_exit,true),
P ! up,
@@ -2594,18 +2522,16 @@ otp_7184(Config) when is_list(Config) ->
unregister(otp_7184),
%% v/1, a few missed cases
- ?line "17\n<<0,0,0,64>>.\nok.\n" =
+ "17\n<<0,0,0,64>>.\nok.\n" =
t(<<"17. "
"<<64:32>>. "
"<<64>> = << << X >> || << X >> <= v(2), X > v(1) >>, ok.">>),
- ?line "17\n<<0,17>>.\n" =t(<<"17. <<(v(1)):16>>.">>),
+ "17\n<<0,17>>.\n" =t(<<"17. <<(v(1)):16>>.">>),
ok.
-otp_7232(doc) ->
- "OTP-7232. qlc:info() bug.";
-otp_7232(suite) -> [];
+%% OTP-7232. qlc:info() bug.
otp_7232(Config) when is_list(Config) ->
Info = <<"qlc:info(qlc:sort(qlc:q([X || X <- [55296,56296]]), "
"{order, fun(A,B)-> A>B end})).">>,
@@ -2616,24 +2542,22 @@ otp_7232(Config) when is_list(Config) ->
" end}])" = evaluate(Info, []),
ok.
-otp_8393(doc) ->
- "OTP-8393. Prompt string.";
-otp_8393(suite) -> [];
+%% OTP-8393. Prompt string.
otp_8393(Config) when is_list(Config) ->
- ?line _ = shell:prompt_func(default),
- ?line "Bad prompt function: '> '" =
+ _ = shell:prompt_func(default),
+ "Bad prompt function: '> '" =
prompt_err(<<"shell:prompt_func('> ').">>),
- ?line _ = shell:prompt_func(default),
- ?line "exception error: an error occurred when evaluating an arithmetic expression"++_ =
+ _ = shell:prompt_func(default),
+ "exception error: an error occurred when evaluating an arithmetic expression"++_ =
prompt_err(<<"shell:prompt_func({shell_SUITE,prompt4}).">>),
- ?line _ = shell:prompt_func(default),
- ?line "default.\n" =
+ _ = shell:prompt_func(default),
+ "default.\n" =
t(<<"shell:prompt_func({shell_SUITE,prompt2}).">>),
- ?line _ = shell:prompt_func(default),
- ?line "default\nl.\n" =
+ _ = shell:prompt_func(default),
+ "default\nl.\n" =
t(<<"shell:prompt_func({shell_SUITE,prompt3}). l.">>),
%%
@@ -2642,8 +2566,8 @@ otp_8393(Config) when is_list(Config) ->
%% That is instead tested in the io_proto_SUITE, which has
%% the right infrastructure in place for such tests. /PaN
%%
- ?line _ = shell:prompt_func(default),
- ?line "default\nl.\n" =
+ _ = shell:prompt_func(default),
+ "default\nl.\n" =
t(<<"shell:prompt_func({shell_SUITE,prompt5}). l.">>),
%% Restricted shell.
@@ -2661,30 +2585,30 @@ otp_8393(Config) when is_list(Config) ->
non_local_allowed(_,_,State) ->
{false,State}.
">>,
- ?line Test = filename:join(?config(priv_dir, Config),
+ Test = filename:join(proplists:get_value(priv_dir, Config),
"test_restricted_shell.erl"),
- ?line ok = compile_file(Config, Test, Contents, []),
- ?line _ = shell:prompt_func(default),
- ?line "exception exit: restricted shell starts now" =
+ ok = compile_file(Config, Test, Contents, []),
+ _ = shell:prompt_func(default),
+ "exception exit: restricted shell starts now" =
comm_err(<<"begin shell:start_restricted("
"test_restricted_shell) end.">>),
- ?line "default.\n"++_ =
+ "default.\n"++_ =
t(<<"shell:prompt_func({shell_SUITE,prompt1}).">>),
- ?line "exception exit: restricted shell does not allow apple(" ++ _ =
+ "exception exit: restricted shell does not allow apple(" ++ _ =
comm_err(<<"apple(1).">>),
- ?line "{shell_SUITE,prompt1}.\n" =
+ "{shell_SUITE,prompt1}.\n" =
t(<<"shell:prompt_func(default).">>),
- ?line "exception exit: restricted shell stopped"=
+ "exception exit: restricted shell stopped"=
comm_err(<<"begin shell:stop_restricted() end.">>),
- ?line undefined =
+ undefined =
application:get_env(stdlib, restricted_shell),
- ?line NR = shell:results(20),
- ?line "default\n20.\n" =
+ NR = shell:results(20),
+ "default\n20.\n" =
t(<<"shell:prompt_func({shell_SUITE,prompt3}). results(0).">>),
- ?line _ = shell:prompt_func(default),
- ?line 0 = shell:results(NR),
+ _ = shell:prompt_func(default),
+ 0 = shell:results(NR),
ok.
prompt1(_L) ->
@@ -2745,12 +2669,10 @@ prompt_err(B) ->
S = string:strip(S2, both, $"),
string:strip(S, right, $.).
-otp_10302(doc) ->
- "OTP-10302. Unicode.";
-otp_10302(suite) -> [];
+%% OTP-10302. Unicode.
otp_10302(Config) when is_list(Config) ->
{ok,Node} = start_node(shell_suite_helper_2,
- "-pa "++?config(priv_dir,Config)++
+ "-pa "++proplists:get_value(priv_dir,Config)++
" +pc unicode"),
Test1 =
<<"begin
@@ -2888,6 +2810,19 @@ otp_10302(Config) when is_list(Config) ->
test_server:stop_node(Node),
ok.
+otp_13719(Config) when is_list(Config) ->
+ Test = <<"-module(otp_13719).
+ -record(bar, {}).
+ -record(foo, {bar :: #bar{}}).">>,
+ File = filename("otp_13719.erl", Config),
+ Beam = filename("otp_13719.beam", Config),
+ ok = compile_file(Config, File, Test, []),
+ RR = "rr(\"" ++ Beam ++ "\"). #foo{}.",
+ "[bar,foo]\n#foo{bar = undefined}.\n" = t(RR),
+ file:delete(filename("test.beam", Config)),
+ file:delete(File),
+ ok.
+
scan(B) ->
F = fun(Ts) ->
case erl_parse:parse_term(Ts) of
@@ -3095,9 +3030,9 @@ run_file(Config, Module, Test) ->
ok.
compile_file(Config, File, Test, Opts0) ->
- ?line Opts = [export_all,return,{outdir,?config(priv_dir, Config)}|Opts0],
- ?line ok = file:write_file(File, Test),
- ?line case compile:file(File, Opts) of
+ Opts = [export_all,return,{outdir,proplists:get_value(priv_dir, Config)}|Opts0],
+ ok = file:write_file(File, Test),
+ case compile:file(File, Opts) of
{ok, _M, _Ws} -> ok;
_ -> error
end.
@@ -3105,10 +3040,10 @@ compile_file(Config, File, Test, Opts0) ->
filename(Name, Config) when is_atom(Name) ->
filename(atom_to_list(Name), Config);
filename(Name, Config) ->
- filename:join(?config(priv_dir, Config), Name).
+ filename:join(proplists:get_value(priv_dir, Config), Name).
start_node(Name, Xargs) ->
- ?line N = test_server:start_node(Name, slave, [{args, " " ++ Xargs}]),
+ N = test_server:start_node(Name, slave, [{args, " " ++ Xargs}]),
global:sync(),
N.
diff --git a/lib/stdlib/test/slave_SUITE.erl b/lib/stdlib/test/slave_SUITE.erl
index 65627b3741..7525cf78de 100644
--- a/lib/stdlib/test/slave_SUITE.erl
+++ b/lib/stdlib/test/slave_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(slave_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2, t_start/1, t_start_link/1,
@@ -29,7 +29,9 @@
-export([fun_init/1, test_errors/1]).
-export([timeout_test/1, auth_test/1, rsh_test/1, start_a_slave/3]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[t_start_link, start_link_nodedown, t_start, errors].
@@ -50,30 +52,28 @@ end_per_group(_GroupName, Config) ->
Config.
-t_start_link(suite) -> [];
t_start_link(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(20)),
-
%% Define useful variables.
- ?line Host = host(),
- ?line Slave1 = node_name(Host, slave1),
- ?line Slave2 = node_name(Host, slave2),
+ Host = host(),
+ Slave1 = node_name(Host, slave1),
+ Slave2 = node_name(Host, slave2),
%% Test slave:start_link() with one, two, and three arguments.
- ?line ThisNode = node(),
- ?line {error, {already_running, ThisNode}} = slave:start_link(Host),
- ?line {ok, Slave1} = slave:start_link(Host, slave1),
- ?line {ok, Slave2} = slave:start_link(Host, slave2, "-my_option 42"),
- ?line {ok, [["42"]]} = rpc:call(Slave2, init, get_argument, [my_option]),
+ ThisNode = node(),
+ {error, {already_running, ThisNode}} = slave:start_link(Host),
+ {ok, Slave1} = slave:start_link(Host, slave1),
+ {ok, Slave2} = slave:start_link(Host, slave2, "-my_option 42"),
+ {ok, [["42"]]} = rpc:call(Slave2, init, get_argument, [my_option]),
%% Kill the two slave nodes and verify that they are dead.
- ?line rpc:cast(Slave1, erlang, halt, []),
- ?line rpc:cast(Slave2, erlang, halt, []),
- ?line is_dead(Slave1),
- ?line is_dead(Slave2),
+ rpc:cast(Slave1, erlang, halt, []),
+ rpc:cast(Slave2, erlang, halt, []),
+ ct:sleep(250),
+ is_dead(Slave1),
+ is_dead(Slave2),
%% Start two slave nodes from another process and verify that
%% the slaves die when that process terminates.
@@ -85,41 +85,36 @@ t_start_link(Config) when is_list(Config) ->
Parent ! slaves_started,
receive never -> ok end
end),
- ?line receive slaves_started -> ok end,
- ?line process_flag(trap_exit, true),
- ?line wait_alive(Slave1),
- ?line wait_alive(Slave2),
- ?line exit(Pid, kill),
- ?line receive {'EXIT', Pid, killed} -> ok end,
- ?line test_server:sleep(250),
- ?line is_dead(Slave1),
- ?line is_dead(Slave2),
-
- ?line test_server:timetrap_cancel(Dog),
+ receive slaves_started -> ok end,
+ process_flag(trap_exit, true),
+ wait_alive(Slave1),
+ wait_alive(Slave2),
+ exit(Pid, kill),
+ receive {'EXIT', Pid, killed} -> ok end,
+ ct:sleep(250),
+ is_dead(Slave1),
+ is_dead(Slave2),
+
ok.
%% Test that slave:start_link() works when the master exits.
-start_link_nodedown(suite) -> [];
start_link_nodedown(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(20)),
-
%% Define useful variables.
- ?line Host = host(),
- ?line Master = node_name(Host, my_master),
- ?line Slave = node_name(Host, my_slave),
+ Host = host(),
+ Master = node_name(Host, my_master),
+ Slave = node_name(Host, my_slave),
+
+ Pa = "-pa " ++ filename:dirname(code:which(?MODULE)),
+ {ok, Master} = slave:start_link(Host, my_master, Pa),
+ spawn(Master, ?MODULE, start_a_slave, [self(), Host, my_slave]),
+ {reply, {ok, _Node}} = receive Any -> Any end,
- ?line Pa = "-pa " ++ filename:dirname(code:which(?MODULE)),
- ?line {ok, Master} = slave:start_link(Host, my_master, Pa),
- ?line spawn(Master, ?MODULE, start_a_slave, [self(), Host, my_slave]),
- ?line {reply, {ok, _Node}} = receive Any -> Any end,
-
- ?line rpc:call(Master, erlang, halt, []),
- ?line receive after 200 -> ok end,
- ?line pang = net_adm:ping(Slave),
+ rpc:call(Master, erlang, halt, []),
+ receive after 200 -> ok end,
+ pang = net_adm:ping(Slave),
- ?line test_server:timetrap_cancel(Dog),
ok.
start_a_slave(ReplyTo, Host, Name) ->
@@ -128,82 +123,74 @@ start_a_slave(ReplyTo, Host, Name) ->
%% Test slave:start().
-t_start(suite) -> [];
t_start(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(20)),
-
%% Define useful variables.
- ?line Host = host(),
- ?line Slave1 = node_name(Host, slave1),
- ?line Slave2 = node_name(Host, slave2),
+ Host = host(),
+ Slave1 = node_name(Host, slave1),
+ Slave2 = node_name(Host, slave2),
%% By running all tests from this master node which is linked
%% to this test case, we ensure that all slaves are killed
%% if this test case fails. (If they are not, and therefore further
%% test cases fail, there is a bug in slave.)
- ?line {ok, Master} = slave:start_link(Host, master),
-
+ {ok, Master} = slave:start_link(Host, master),
+
%% Test slave:start() with one, two, and three arguments.
- ?line ThisNode = node(),
- ?line {error, {already_running, ThisNode}} = slave:start(Host),
- ?line {ok, Slave1} = rpc:call(Master, slave, start, [Host, slave1]),
- ?line {ok, Slave2} = rpc:call(Master, slave, start,
- [Host, slave2, "-my_option 42"]),
- ?line {ok, [["42"]]} = rpc:call(Slave2, init, get_argument, [my_option]),
+ ThisNode = node(),
+ {error, {already_running, ThisNode}} = slave:start(Host),
+ {ok, Slave1} = rpc:call(Master, slave, start, [Host, slave1]),
+ {ok, Slave2} = rpc:call(Master, slave, start,
+ [Host, slave2, "-my_option 42"]),
+ {ok, [["42"]]} = rpc:call(Slave2, init, get_argument, [my_option]),
%% Test that a slave terminates when its master node terminates.
- ?line ok = slave:stop(Slave2),
- ?line is_dead(Slave2),
- ?line {ok, Slave2} = rpc:call(Slave1, slave, start, [Host, slave2]),
- ?line is_alive(Slave2),
- ?line rpc:call(Slave1, erlang, halt, []), % Kill master.
+ ok = slave:stop(Slave2),
+ is_dead(Slave2),
+ {ok, Slave2} = rpc:call(Slave1, slave, start, [Host, slave2]),
+ is_alive(Slave2),
+ rpc:call(Slave1, erlang, halt, []), % Kill master.
receive after 1000 -> ok end, % Make sure slaves have noticed
% their dead master.
- ?line is_dead(Slave1),
- ?line is_dead(Slave2), % Slave should be dead, too.
+ is_dead(Slave1),
+ is_dead(Slave2), % Slave should be dead, too.
%% Kill all slaves and verify that they are dead.
- ?line ok = slave:stop(Slave1),
- ?line ok = slave:stop(Slave2),
- ?line is_dead(Slave1),
- ?line is_dead(Slave2),
+ ok = slave:stop(Slave1),
+ ok = slave:stop(Slave2),
+ is_dead(Slave1),
+ is_dead(Slave2),
- ?line test_server:timetrap_cancel(Dog),
ok.
%% Test the various error conditions in parallell (since the timeout
%% in slave is 32 seconds).
-errors(suite) -> [];
errors(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(50)),
-
- ?line process_flag(trap_exit, true),
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line {ok, Master} = slave_start_link(host(), master,
- "-rsh no_rsh_program -pa "++Pa++
- " -env ERL_CRASH_DUMP erl_crash_dump.master"),
- ?line Pids = rpc:call(Master, ?MODULE, test_errors, [self()]),
- ?line wait_for_result(Pids),
+ process_flag(trap_exit, true),
+ Pa = filename:dirname(code:which(?MODULE)),
+ {ok, Master} = slave_start_link(host(), master,
+ "-rsh no_rsh_program -pa "++Pa++
+ " -env ERL_CRASH_DUMP erl_crash_dump.master"),
+ Pids = rpc:call(Master, ?MODULE, test_errors, [self()]),
+ wait_for_result(Pids),
- ?line test_server:timetrap_cancel(Dog),
ok.
wait_for_result([]) ->
ok;
wait_for_result(Pids) ->
- ?line receive
- {'EXIT', Pid, normal} ->
- io:format("Process ~p terminated", [Pid]),
- wait_for_result(lists:delete(Pid, Pids));
- {'EXIT', _, Reason} ->
- exit(Reason)
- end.
+ receive
+ {'EXIT', Pid, normal} ->
+ io:format("Process ~p terminated", [Pid]),
+ wait_for_result(lists:delete(Pid, Pids));
+ {'EXIT', _, Reason} ->
+ exit(Reason)
+ end.
show_process_info(Pid) ->
io:format("~p: ~p", [Pid, catch process_info(Pid, initial_call)]).
@@ -211,25 +198,25 @@ show_process_info(Pid) ->
test_errors(ResultTo) ->
%% Sigh! We use ordinary spawn instead of fun_spawn/1 to be able
%% identify the processes by their initial call.
- ?line P1 = spawn(?MODULE, timeout_test, [ResultTo]),
- ?line P2 = spawn(?MODULE, auth_test, [ResultTo]),
- ?line P3 = spawn(?MODULE, rsh_test, [ResultTo]),
+ P1 = spawn(?MODULE, timeout_test, [ResultTo]),
+ P2 = spawn(?MODULE, auth_test, [ResultTo]),
+ P3 = spawn(?MODULE, rsh_test, [ResultTo]),
Pids =[P1, P2, P3],
- ?line lists:foreach(fun show_process_info/1, Pids),
+ lists:foreach(fun show_process_info/1, Pids),
Pids.
timeout_test(ResultTo) ->
link(ResultTo),
- ?line {error, timeout} = slave:start(host(), slave1, "-boot no_boot_script").
+ {error, timeout} = slave:start(host(), slave1, "-boot no_boot_script").
auth_test(ResultTo) ->
link(ResultTo),
- ?line {error, timeout} = slave:start(host(), slave2,
- "-setcookie definitely_not_a_cookie").
+ {error, timeout} = slave:start(host(), slave2,
+ "-setcookie definitely_not_a_cookie").
rsh_test(ResultTo) ->
link(ResultTo),
- ?line {error, no_rsh} = slave:start(super, slave3).
+ {error, no_rsh} = slave:start(super, slave3).
%%% Utilities.
@@ -239,7 +226,7 @@ wait_alive(Node) ->
wait_alive_1(10, Node).
wait_alive_1(0, Node) ->
- ?t:fail({still_not_alive,Node});
+ ct:fail({still_not_alive,Node});
wait_alive_1(N, Node) ->
case rpc:call(Node, init, get_status, []) of
{started,_} ->
diff --git a/lib/stdlib/test/sofs_SUITE.erl b/lib/stdlib/test/sofs_SUITE.erl
index d23eb3abb9..13c12ad2f2 100644
--- a/lib/stdlib/test/sofs_SUITE.erl
+++ b/lib/stdlib/test/sofs_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
%%
-module(sofs_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -27,7 +27,7 @@
-define(config(X,Y), foo).
-define(t, test_server).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
-endif.
@@ -35,28 +35,28 @@
init_per_group/2,end_per_group/2]).
-export([ from_term_1/1, set_1/1, from_sets_1/1, relation_1/1,
- a_function_1/1, family_1/1, projection/1,
- relation_to_family_1/1, domain_1/1, range_1/1, image/1,
- inverse_image/1, inverse_1/1, converse_1/1, no_elements_1/1,
- substitution/1, restriction/1, drestriction/1,
- strict_relation_1/1, extension/1, weak_relation_1/1,
- to_sets_1/1, specification/1, union_1/1, intersection_1/1,
- difference/1, symdiff/1, symmetric_partition/1,
- is_sofs_set_1/1, is_set_1/1, is_equal/1, is_subset/1,
- is_a_function_1/1, is_disjoint/1, join/1, canonical/1,
- composite_1/1, relative_product_1/1, relative_product_2/1,
- product_1/1, partition_1/1, partition_3/1,
- multiple_relative_product/1, digraph/1, constant_function/1,
- misc/1]).
+ a_function_1/1, family_1/1, projection/1,
+ relation_to_family_1/1, domain_1/1, range_1/1, image/1,
+ inverse_image/1, inverse_1/1, converse_1/1, no_elements_1/1,
+ substitution/1, restriction/1, drestriction/1,
+ strict_relation_1/1, extension/1, weak_relation_1/1,
+ to_sets_1/1, specification/1, union_1/1, intersection_1/1,
+ difference/1, symdiff/1, symmetric_partition/1,
+ is_sofs_set_1/1, is_set_1/1, is_equal/1, is_subset/1,
+ is_a_function_1/1, is_disjoint/1, join/1, canonical/1,
+ composite_1/1, relative_product_1/1, relative_product_2/1,
+ product_1/1, partition_1/1, partition_3/1,
+ multiple_relative_product/1, digraph/1, constant_function/1,
+ misc/1]).
-export([ family_specification/1,
- family_domain_1/1, family_range_1/1,
- family_to_relation_1/1,
- union_of_family_1/1, intersection_of_family_1/1,
- family_projection/1, family_difference/1,
- family_intersection_1/1, family_union_1/1,
- family_intersection_2/1, family_union_2/1,
- partition_family/1]).
+ family_domain_1/1, family_range_1/1,
+ family_to_relation_1/1,
+ union_of_family_1/1, intersection_of_family_1/1,
+ family_projection/1, family_difference/1,
+ family_intersection_1/1, family_union_1/1,
+ family_intersection_2/1, family_union_2/1,
+ partition_family/1]).
-import(sofs,
[a_function/1, a_function/2, constant_function/2,
@@ -87,7 +87,9 @@
-compile({inline,[{eval,2}]}).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[{group, sofs}, {group, sofs_family}].
@@ -129,401 +131,384 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- Dog=?t:timetrap(?t:minutes(2)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
%% [{2,b},{1,a,b}] == lists:sort([{2,b},{1,a,b}])
%% [{1,a,b},{2,b}] == lists:keysort(1,[{2,b},{1,a,b}])
-from_term_1(suite) -> [];
-from_term_1(doc) -> [""];
from_term_1(Conf) when is_list(Conf) ->
%% would go wrong: projection(1,from_term([{2,b},{1,a,b}])),
- ?line {'EXIT', {badarg, _}} = (catch from_term([], {atom,'_',atom})),
- ?line {'EXIT', {badarg, _}} = (catch from_term([], [])),
- ?line {'EXIT', {badarg, _}} = (catch from_term([], [atom,atom])),
-
- ?line [] = to_external(from_term([])),
- ?line eval(from_term([]), empty_set()),
- ?line [] = to_external(from_term([], ['_'])),
- ?line eval(from_term([], ['_']), empty_set()),
- ?line [[]] = to_external(from_term([[]])),
- ?line [[['_']]] = type(from_term([[],[[]]])),
- ?line [[],[[]]] = to_external(from_term([[],[[]]])),
- ?line [[['_']]] = type(from_term([[],[[]]])),
- ?line eval(from_term([a],['_']), set([a])),
- ?line [[],[a]] = to_external(from_term([[],[a]])),
- ?line [[],[{a}]] = to_external(from_term([[{a}],[]])),
- ?line [{[],[{a,b,[d]}]},{[{a,b}],[]}] =
+ {'EXIT', {badarg, _}} = (catch from_term([], {atom,'_',atom})),
+ {'EXIT', {badarg, _}} = (catch from_term([], [])),
+ {'EXIT', {badarg, _}} = (catch from_term([], [atom,atom])),
+
+ [] = to_external(from_term([])),
+ eval(from_term([]), empty_set()),
+ [] = to_external(from_term([], ['_'])),
+ eval(from_term([], ['_']), empty_set()),
+ [[]] = to_external(from_term([[]])),
+ [[['_']]] = type(from_term([[],[[]]])),
+ [[],[[]]] = to_external(from_term([[],[[]]])),
+ [[['_']]] = type(from_term([[],[[]]])),
+ eval(from_term([a],['_']), set([a])),
+ [[],[a]] = to_external(from_term([[],[a]])),
+ [[],[{a}]] = to_external(from_term([[{a}],[]])),
+ [{[],[{a,b,[d]}]},{[{a,b}],[]}] =
to_external(from_term([{[],[{a,b,[d]}]},{[{a,b}],[]}])),
- ?line [{[a,b],[c,d]}] = to_external(from_term([{[a,b],[c,d]}])),
- ?line [{{a,b},[a,b],{{a},{b}}}] =
+ [{[a,b],[c,d]}] = to_external(from_term([{[a,b],[c,d]}])),
+ [{{a,b},[a,b],{{a},{b}}}] =
to_external(from_term([{{a,b},[a,b],{{a},{b}}}])),
- ?line [{{a,{[a,b]},a}},{{z,{[y,z]},z}}] =
+ [{{a,{[a,b]},a}},{{z,{[y,z]},z}}] =
to_external(from_term([{{a,{[a,b,a]},a}},{{z,{[y,y,z]},z}}])),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch from_term([{m1,[{m1,f1,1},{m1,f2,2}]},{m2,[]},{m3,[a]}])),
- ?line MS1 = [{m1,[{m1,f1,1},{m1,f2,2}]},{m2,[]},{m3,[{m3,f3,3}]}],
- ?line eval(to_external(from_term(MS1)), MS1),
-
- ?line eval(to_external(from_term(a)), a),
- ?line eval(to_external(from_term({a})), {a}),
-
- ?line eval(to_external(from_term([[a],[{b,c}]],[[atomic]])),
- [[a],[{b,c}]]),
- ?line eval(type(from_term([[a],[{b,c}]],[[atomic]])),
- [[atomic]]),
-
- ?line {'EXIT', {badarg, _}} = (catch from_term([[],[],a])),
- ?line {'EXIT', {badarg, _}} = (catch from_term([{[a,b],[c,{d}]}])),
- ?line {'EXIT', {badarg, _}} = (catch from_term([[],[a],[{a}]])),
- ?line {'EXIT', {badarg, _}} = (catch from_term([a,{a,b}])),
- ?line {'EXIT', {badarg, _}} = (catch from_term([[a],[{b,c}]],[['_']])),
- ?line {'EXIT', {badarg, _}} = (catch from_term([a | {a,b}])),
- ?line {'EXIT', {badarg, _}} =
+ MS1 = [{m1,[{m1,f1,1},{m1,f2,2}]},{m2,[]},{m3,[{m3,f3,3}]}],
+ eval(to_external(from_term(MS1)), MS1),
+
+ eval(to_external(from_term(a)), a),
+ eval(to_external(from_term({a})), {a}),
+
+ eval(to_external(from_term([[a],[{b,c}]],[[atomic]])),
+ [[a],[{b,c}]]),
+ eval(type(from_term([[a],[{b,c}]],[[atomic]])),
+ [[atomic]]),
+
+ {'EXIT', {badarg, _}} = (catch from_term([[],[],a])),
+ {'EXIT', {badarg, _}} = (catch from_term([{[a,b],[c,{d}]}])),
+ {'EXIT', {badarg, _}} = (catch from_term([[],[a],[{a}]])),
+ {'EXIT', {badarg, _}} = (catch from_term([a,{a,b}])),
+ {'EXIT', {badarg, _}} = (catch from_term([[a],[{b,c}]],[['_']])),
+ {'EXIT', {badarg, _}} = (catch from_term([a | {a,b}])),
+ {'EXIT', {badarg, _}} =
(catch from_term([{{a},b,c},{d,e,f}],[{{atom},atom,atom}])),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch from_term([{a,{b,c}} | tail], [{atom,{atom,atom}}])),
- ?line {'EXIT', {badarg, _}} = (catch from_term({})),
- ?line {'EXIT', {badarg, _}} = (catch from_term([{}])),
+ {'EXIT', {badarg, _}} = (catch from_term({})),
+ {'EXIT', {badarg, _}} = (catch from_term([{}])),
- ?line [{foo,bar},[b,a]] =
+ [{foo,bar},[b,a]] =
to_external(from_term([[b,a],{foo,bar},[b,a]], [atom])),
- ?line [{[atom],{atom,atom}}] =
+ [{[atom],{atom,atom}}] =
type(from_term([{[], {a,b}},{[a,b],{e,f}}])),
- ?line [{[atom],{atom,atom}}] =
+ [{[atom],{atom,atom}}] =
type(from_term([{[], {a,b}},{[a,b],{e,f}}], [{[atom],{atom,atom}}])),
- ?line [[atom]] = type(from_term([[a],[{b,c}]],[[atom]])),
+ [[atom]] = type(from_term([[a],[{b,c}]],[[atom]])),
- ?line {atom, atom} = type(from_term({a,b}, {atom, atom})),
- ?line atom = type(from_term(a, atom)),
- ?line {'EXIT', {badarg, _}} = (catch from_term({a,b},{atom})),
- ?line [{{a},b,c},{{d},e,f}] =
+ {atom, atom} = type(from_term({a,b}, {atom, atom})),
+ atom = type(from_term(a, atom)),
+ {'EXIT', {badarg, _}} = (catch from_term({a,b},{atom})),
+ [{{a},b,c},{{d},e,f}] =
to_external(from_term([{{a},b,c},{{a},b,c},{{d},e,f}],
[{{atom},atom,atom}])),
%% from_external too...
- ?line e = to_external(from_external(e, atom)),
- ?line {e} = to_external(from_external({e}, {atom})),
- ?line [e] = to_external(from_external([e], [atom])),
+ e = to_external(from_external(e, atom)),
+ {e} = to_external(from_external({e}, {atom})),
+ [e] = to_external(from_external([e], [atom])),
%% and is_type...
- ?line true = is_type(['_']),
- ?line false = is_type('_'),
- ?line true = is_type([['_']]),
- ?line false = is_type({atom,[],atom}),
- ?line false = is_type({atom,'_',atom}),
- ?line true = is_type({atom,atomic,atom}),
- ?line true = is_type({atom,atom}),
- ?line true = is_type(atom),
- ?line true = is_type([atom]),
- ?line true = is_type(type),
+ true = is_type(['_']),
+ false = is_type('_'),
+ true = is_type([['_']]),
+ false = is_type({atom,[],atom}),
+ false = is_type({atom,'_',atom}),
+ true = is_type({atom,atomic,atom}),
+ true = is_type({atom,atom}),
+ true = is_type(atom),
+ true = is_type([atom]),
+ true = is_type(type),
ok.
-set_1(suite) -> [];
-set_1(doc) -> [""];
set_1(Conf) when is_list(Conf) ->
%% set/1
- ?line {'EXIT', {badarg, _}} = (catch set(a)),
- ?line {'EXIT', {badarg, _}} = (catch set({a})),
- ?line eval(set([]), from_term([],[atom])),
- ?line eval(set([a,b,c]), from_term([a,b,c])),
- ?line eval(set([a,b,a,a,b]), from_term([a,b])),
- ?line eval(set([a,b,c,a,d,d,c,1]), from_term([1,a,b,c,d])),
- ?line eval(set([a,b,d,a,c]), from_term([a,b,c,d])),
- ?line eval(set([f,e,d,c,d]), from_term([c,d,e,f])),
- ?line eval(set([h,f,d,g,g,d,c]), from_term([c,d,f,g,h])),
- ?line eval(set([h,e,d,k,l]), from_term([d,e,h,k,l])),
- ?line eval(set([h,e,c,k,d]), from_term([c,d,e,h,k])),
+ {'EXIT', {badarg, _}} = (catch set(a)),
+ {'EXIT', {badarg, _}} = (catch set({a})),
+ eval(set([]), from_term([],[atom])),
+ eval(set([a,b,c]), from_term([a,b,c])),
+ eval(set([a,b,a,a,b]), from_term([a,b])),
+ eval(set([a,b,c,a,d,d,c,1]), from_term([1,a,b,c,d])),
+ eval(set([a,b,d,a,c]), from_term([a,b,c,d])),
+ eval(set([f,e,d,c,d]), from_term([c,d,e,f])),
+ eval(set([h,f,d,g,g,d,c]), from_term([c,d,f,g,h])),
+ eval(set([h,e,d,k,l]), from_term([d,e,h,k,l])),
+ eval(set([h,e,c,k,d]), from_term([c,d,e,h,k])),
%% set/2
- ?line {'EXIT', {badarg, _}} = (catch set(a, [a])),
- ?line {'EXIT', {badarg, _}} = (catch set({a}, [a])),
- ?line {'EXIT', {badarg, _}} = (catch set([a], {a})),
- ?line {'EXIT', {badarg, _}} = (catch set([a], a)),
- ?line {'EXIT', {badarg, _}} = (catch set([a], [a,b])),
- ?line {'EXIT', {badarg, _}} = (catch set([a | b],[foo])),
- ?line {'EXIT', {badarg, _}} = (catch set([a | b],['_'])),
- ?line {'EXIT', {badarg, _}} = (catch set([a | b],[[atom]])),
- ?line {'EXIT', {badarg, _}} = (catch set([{}],[{}])),
- ?line eval(set([a],['_']), from_term([a],['_'])),
- ?line eval(set([], ['_']), empty_set()),
- ?line eval(set([a,b,a,b],[foo]), from_term([a,b],[foo])),
+ {'EXIT', {badarg, _}} = (catch set(a, [a])),
+ {'EXIT', {badarg, _}} = (catch set({a}, [a])),
+ {'EXIT', {badarg, _}} = (catch set([a], {a})),
+ {'EXIT', {badarg, _}} = (catch set([a], a)),
+ {'EXIT', {badarg, _}} = (catch set([a], [a,b])),
+ {'EXIT', {badarg, _}} = (catch set([a | b],[foo])),
+ {'EXIT', {badarg, _}} = (catch set([a | b],['_'])),
+ {'EXIT', {badarg, _}} = (catch set([a | b],[[atom]])),
+ {'EXIT', {badarg, _}} = (catch set([{}],[{}])),
+ eval(set([a],['_']), from_term([a],['_'])),
+ eval(set([], ['_']), empty_set()),
+ eval(set([a,b,a,b],[foo]), from_term([a,b],[foo])),
ok.
-from_sets_1(suite) -> [];
-from_sets_1(doc) -> [""];
from_sets_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
+ E = empty_set(),
%% unordered
- ?line eval(from_sets([]), E),
- ?line {'EXIT', {type_mismatch, _}} =
+ eval(from_sets([]), E),
+ {'EXIT', {type_mismatch, _}} =
(catch from_sets([from_term([{a,b}]),
E,
from_term([{a,b,c}])])),
- ?line eval(from_sets([from_term([{a,b}]), E]),
- from_term([[],[{a,b}]])),
+ eval(from_sets([from_term([{a,b}]), E]),
+ from_term([[],[{a,b}]])),
- ?line eval(from_sets([from_term({a,b},{atom,atom}),
- from_term({b,c},{atom,atom})]),
- relation([{a,b}, {b,c}])),
- ?line {'EXIT', {type_mismatch, _}} =
+ eval(from_sets([from_term({a,b},{atom,atom}),
+ from_term({b,c},{atom,atom})]),
+ relation([{a,b}, {b,c}])),
+ {'EXIT', {type_mismatch, _}} =
(catch from_sets([from_term({a,b},{atom,atom}),
from_term({a,b,c},{atom,atom,atom})])),
- ?line {'EXIT', {badarg, _}} = (catch from_sets(foo)),
- ?line eval(from_sets([E]), from_term([[]])),
- ?line eval(from_sets([E,E]), from_term([[]])),
- ?line eval(from_sets([E,set([a])]), from_term([[],[a]])),
- ?line {'EXIT', {badarg, _}} = (catch from_sets([E,{a}])),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {badarg, _}} = (catch from_sets(foo)),
+ eval(from_sets([E]), from_term([[]])),
+ eval(from_sets([E,E]), from_term([[]])),
+ eval(from_sets([E,set([a])]), from_term([[],[a]])),
+ {'EXIT', {badarg, _}} = (catch from_sets([E,{a}])),
+ {'EXIT', {type_mismatch, _}} =
(catch from_sets([E,from_term({a}),E])),
- ?line {'EXIT', {type_mismatch, _}} = (catch from_sets([from_term({a}),E])),
+ {'EXIT', {type_mismatch, _}} = (catch from_sets([from_term({a}),E])),
%% ordered
- ?line O = {from_term(a,atom), from_term({b}, {atom}), set([c,d])},
- ?line eval(from_sets(O), from_term({a,{b},[c,d]}, {atom,{atom},[atom]})),
- ?line {'EXIT', {badarg, _}} = (catch from_sets([a,b])),
- ?line {'EXIT', {badarg, _}} = (catch from_sets({a,b})),
- ?line eval(from_sets({from_term({a}),E}), from_term({{a},[]})),
+ O = {from_term(a,atom), from_term({b}, {atom}), set([c,d])},
+ eval(from_sets(O), from_term({a,{b},[c,d]}, {atom,{atom},[atom]})),
+ {'EXIT', {badarg, _}} = (catch from_sets([a,b])),
+ {'EXIT', {badarg, _}} = (catch from_sets({a,b})),
+ eval(from_sets({from_term({a}),E}), from_term({{a},[]})),
ok.
-relation_1(suite) -> [];
-relation_1(doc) -> [""];
relation_1(Conf) when is_list(Conf) ->
%% relation/1
- ?line eval(relation([]), from_term([], [{atom,atom}])),
- ?line eval(from_term([{a}]), relation([{a}])),
- ?line {'EXIT', {badarg, _}} = (catch relation(a)),
- ?line {'EXIT', {badarg, _}} = (catch relation([{a} | a])),
- ?line {'EXIT', {badarg, _}} = (catch relation([{}])),
- ?line {'EXIT', {badarg, _}} = (catch relation([],0)),
- ?line {'EXIT', {badarg, _}} = (catch relation([{a}],a)),
+ eval(relation([]), from_term([], [{atom,atom}])),
+ eval(from_term([{a}]), relation([{a}])),
+ {'EXIT', {badarg, _}} = (catch relation(a)),
+ {'EXIT', {badarg, _}} = (catch relation([{a} | a])),
+ {'EXIT', {badarg, _}} = (catch relation([{}])),
+ {'EXIT', {badarg, _}} = (catch relation([],0)),
+ {'EXIT', {badarg, _}} = (catch relation([{a}],a)),
%% relation/2
- ?line eval(relation([{a},{b}], 1), from_term([{a},{b}])),
- ?line eval(relation([{1,a},{2,b},{1,a}], [{x,y}]),
- from_term([{1,a},{2,b}], [{x,y}])),
- ?line eval(relation([{[1,2],a},{[2,1],b},{[2,1],a}], [{[x],y}]),
- from_term([{[1,2],a},{[1,2],b}], [{[x],y}])),
- ?line {'EXIT', {badarg, _}} = (catch relation([{1,a},{2,b}], [{[x],y}])),
- ?line {'EXIT', {badarg, _}} = (catch relation([{1,a},{1,a,b}], [{x,y}])),
- ?line {'EXIT', {badarg, _}} = (catch relation([{a}], 2)),
- ?line {'EXIT', {badarg, _}} = (catch relation([{a},{b},{c,d}], 1)),
- ?line eval(relation([{{a},[{foo,bar}]}], ['_']),
- from_term([{{a},[{foo,bar}]}], ['_'])),
- ?line eval(relation([], ['_']), from_term([], ['_'])),
- ?line {'EXIT', {badarg, _}} = (catch relation([[a]],['_'])),
- ?line eval(relation([{[a,b,a]}], [{[atom]}]), from_term([{[a,b,a]}])),
- ?line eval(relation([{[a,b,a],[[d,e,d]]}], [{[atom],[[atom]]}]),
- from_term([{[a,b,a],[[d,e,d]]}])),
- ?line eval(relation([{[a,b,a],[[d,e,d]]}], [{atom,[[atom]]}]),
- from_term([{[a,b,a],[[d,e,d]]}], [{atom,[[atom]]}])),
+ eval(relation([{a},{b}], 1), from_term([{a},{b}])),
+ eval(relation([{1,a},{2,b},{1,a}], [{x,y}]),
+ from_term([{1,a},{2,b}], [{x,y}])),
+ eval(relation([{[1,2],a},{[2,1],b},{[2,1],a}], [{[x],y}]),
+ from_term([{[1,2],a},{[1,2],b}], [{[x],y}])),
+ {'EXIT', {badarg, _}} = (catch relation([{1,a},{2,b}], [{[x],y}])),
+ {'EXIT', {badarg, _}} = (catch relation([{1,a},{1,a,b}], [{x,y}])),
+ {'EXIT', {badarg, _}} = (catch relation([{a}], 2)),
+ {'EXIT', {badarg, _}} = (catch relation([{a},{b},{c,d}], 1)),
+ eval(relation([{{a},[{foo,bar}]}], ['_']),
+ from_term([{{a},[{foo,bar}]}], ['_'])),
+ eval(relation([], ['_']), from_term([], ['_'])),
+ {'EXIT', {badarg, _}} = (catch relation([[a]],['_'])),
+ eval(relation([{[a,b,a]}], [{[atom]}]), from_term([{[a,b,a]}])),
+ eval(relation([{[a,b,a],[[d,e,d]]}], [{[atom],[[atom]]}]),
+ from_term([{[a,b,a],[[d,e,d]]}])),
+ eval(relation([{[a,b,a],[[d,e,d]]}], [{atom,[[atom]]}]),
+ from_term([{[a,b,a],[[d,e,d]]}], [{atom,[[atom]]}])),
ok.
-a_function_1(suite) -> [];
-a_function_1(doc) -> [""];
a_function_1(Conf) when is_list(Conf) ->
%% a_function/1
- ?line eval(a_function([]), from_term([], [{atom,atom}])),
- ?line eval(a_function([{a,b},{a,b},{b,c}]), from_term([{a,b},{b,c}])),
- ?line {'EXIT', {badarg, _}} = (catch a_function([{a}])),
- ?line {'EXIT', {badarg, _}} = (catch a_function([{a},{b},{c,d}])),
- ?line {'EXIT', {badarg, _}} = (catch a_function(a)),
- ?line {'EXIT', {badarg, _}} = (catch a_function([{a,b} | a])),
- ?line {'EXIT', {bad_function, _}} =
+ eval(a_function([]), from_term([], [{atom,atom}])),
+ eval(a_function([{a,b},{a,b},{b,c}]), from_term([{a,b},{b,c}])),
+ {'EXIT', {badarg, _}} = (catch a_function([{a}])),
+ {'EXIT', {badarg, _}} = (catch a_function([{a},{b},{c,d}])),
+ {'EXIT', {badarg, _}} = (catch a_function(a)),
+ {'EXIT', {badarg, _}} = (catch a_function([{a,b} | a])),
+ {'EXIT', {bad_function, _}} =
(catch a_function([{a,b},{b,c},{a,c}])),
F = 0.0, I = round(F),
if
F == I -> % term ordering
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
(catch a_function([{I,a},{F,b}])),
- ?line {'EXIT', {bad_function, _}} =
- (catch a_function([{[I],a},{[F],b}],[{[a],b}]));
+ {'EXIT', {bad_function, _}} =
+ (catch a_function([{[I],a},{[F],b}],[{[a],b}]));
true ->
- ?line 2 = no_elements(a_function([{I,a},{F,b}])),
- ?line 2 = no_elements(a_function([{[I],a},{[F],b}],[{[a],b}]))
+ 2 = no_elements(a_function([{I,a},{F,b}])),
+ 2 = no_elements(a_function([{[I],a},{[F],b}],[{[a],b}]))
end,
%% a_function/2
FT = [{atom,atom}],
- ?line eval(a_function([], FT), from_term([], FT)),
- ?line eval(a_function([{a,b},{b,c},{b,c}], FT),
- from_term([{a,b},{b,c}], FT)),
- ?line {'EXIT', {badarg, _}} = (catch a_function([{a,b}], [{a}])),
- ?line {'EXIT', {badarg, _}} = (catch a_function([{a,b}], [{a,[b,c]}])),
- ?line {'EXIT', {badarg, _}} = (catch a_function([{a}], FT)),
- ?line {'EXIT', {badarg, _}} = (catch a_function([{a},{b},{c,d}], FT)),
- ?line {'EXIT', {badarg, _}} = (catch a_function(a, FT)),
- ?line {'EXIT', {badarg, _}} = (catch a_function([{a,b} | a], FT)),
- ?line eval(a_function([{{a},[{foo,bar}]}], ['_']),
- from_term([{{a},[{foo,bar}]}], ['_'])),
- ?line eval(a_function([], ['_']), from_term([], ['_'])),
- ?line {'EXIT', {badarg, _}} = (catch a_function([[a]],['_'])),
- ?line {'EXIT', {bad_function, _}} =
+ eval(a_function([], FT), from_term([], FT)),
+ eval(a_function([{a,b},{b,c},{b,c}], FT),
+ from_term([{a,b},{b,c}], FT)),
+ {'EXIT', {badarg, _}} = (catch a_function([{a,b}], [{a}])),
+ {'EXIT', {badarg, _}} = (catch a_function([{a,b}], [{a,[b,c]}])),
+ {'EXIT', {badarg, _}} = (catch a_function([{a}], FT)),
+ {'EXIT', {badarg, _}} = (catch a_function([{a},{b},{c,d}], FT)),
+ {'EXIT', {badarg, _}} = (catch a_function(a, FT)),
+ {'EXIT', {badarg, _}} = (catch a_function([{a,b} | a], FT)),
+ eval(a_function([{{a},[{foo,bar}]}], ['_']),
+ from_term([{{a},[{foo,bar}]}], ['_'])),
+ eval(a_function([], ['_']), from_term([], ['_'])),
+ {'EXIT', {badarg, _}} = (catch a_function([[a]],['_'])),
+ {'EXIT', {bad_function, _}} =
(catch a_function([{a,b},{b,c},{a,c}], FT)),
- ?line eval(a_function([{a,[a]},{a,[a,a]}], [{atom,[atom]}]),
- from_term([{a,[a]}])),
- ?line eval(a_function([{[b,a],c},{[a,b],c}], [{[atom],atom}]),
- from_term([{[a,b],c}])),
+ eval(a_function([{a,[a]},{a,[a,a]}], [{atom,[atom]}]),
+ from_term([{a,[a]}])),
+ eval(a_function([{[b,a],c},{[a,b],c}], [{[atom],atom}]),
+ from_term([{[a,b],c}])),
ok.
-family_1(suite) -> [];
-family_1(doc) -> [""];
family_1(Conf) when is_list(Conf) ->
%% family/1
- ?line eval(family([]), from_term([],[{atom,[atom]}])),
- ?line {'EXIT', {badarg, _}} = (catch family(a)),
- ?line {'EXIT', {badarg, _}} = (catch family([a])),
- ?line {'EXIT', {badarg, _}} = (catch family([{a,b}])),
- ?line {'EXIT', {badarg, _}} = (catch family([{a,[]} | a])),
- ?line {'EXIT', {badarg, _}} = (catch family([{a,[a|b]}])),
- ?line {'EXIT', {bad_function, _}} =
+ eval(family([]), from_term([],[{atom,[atom]}])),
+ {'EXIT', {badarg, _}} = (catch family(a)),
+ {'EXIT', {badarg, _}} = (catch family([a])),
+ {'EXIT', {badarg, _}} = (catch family([{a,b}])),
+ {'EXIT', {badarg, _}} = (catch family([{a,[]} | a])),
+ {'EXIT', {badarg, _}} = (catch family([{a,[a|b]}])),
+ {'EXIT', {bad_function, _}} =
(catch family([{a,[a]},{a,[]}])),
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
(catch family([{a,[]},{b,[]},{a,[a]}])),
F = 0.0, I = round(F),
if
F == I -> % term ordering
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
(catch family([{I,[a]},{F,[b]}])),
- ?line true = (1 =:= no_elements(family([{a,[I]},{a,[F]}])));
+ true = (1 =:= no_elements(family([{a,[I]},{a,[F]}])));
true ->
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
(catch family([{a,[I]},{a,[F]}]))
end,
- ?line eval(family([{a,[]},{b,[b]},{a,[]}]), from_term([{a,[]},{b,[b]}])),
- ?line eval(to_external(family([{b,[{hej,san},tjo]},{a,[]}])),
- [{a,[]},{b,[tjo,{hej,san}]}]),
- ?line eval(family([{a,[a]},{a,[a,a]}]), family([{a,[a]}])),
+ eval(family([{a,[]},{b,[b]},{a,[]}]), from_term([{a,[]},{b,[b]}])),
+ eval(to_external(family([{b,[{hej,san},tjo]},{a,[]}])),
+ [{a,[]},{b,[tjo,{hej,san}]}]),
+ eval(family([{a,[a]},{a,[a,a]}]), family([{a,[a]}])),
%% family/2
FT = [{a,[a]}],
- ?line eval(family([], FT), from_term([],FT)),
- ?line {'EXIT', {badarg, _}} = (catch family(a,FT)),
- ?line {'EXIT', {badarg, _}} = (catch family([a],FT)),
- ?line {'EXIT', {badarg, _}} = (catch family([{a,b}],FT)),
- ?line {'EXIT', {badarg, _}} = (catch family([{a,[]} | a],FT)),
- ?line {'EXIT', {badarg, _}} = (catch family([{a,[a|b]}], FT)),
- ?line {'EXIT', {bad_function, _}} =
+ eval(family([], FT), from_term([],FT)),
+ {'EXIT', {badarg, _}} = (catch family(a,FT)),
+ {'EXIT', {badarg, _}} = (catch family([a],FT)),
+ {'EXIT', {badarg, _}} = (catch family([{a,b}],FT)),
+ {'EXIT', {badarg, _}} = (catch family([{a,[]} | a],FT)),
+ {'EXIT', {badarg, _}} = (catch family([{a,[a|b]}], FT)),
+ {'EXIT', {bad_function, _}} =
(catch family([{a,[a]},{a,[]}], FT)),
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
(catch family([{a,[]},{b,[]},{a,[a]}], FT)),
- ?line eval(family([{a,[]},{b,[b,b]},{a,[]}], FT),
- from_term([{a,[]},{b,[b]}], FT)),
- ?line eval(to_external(family([{b,[{hej,san},tjo]},{a,[]}], FT)),
- [{a,[]},{b,[tjo,{hej,san}]}]),
-
- ?line eval(family([{{a},[{foo,bar}]}], ['_']),
- from_term([{{a},[{foo,bar}]}], ['_'])),
- ?line eval(family([], ['_']), from_term([], ['_'])),
- ?line {'EXIT', {badarg, _}} = (catch family([[a]],['_'])),
- ?line {'EXIT', {badarg, _}} = (catch family([{a,b}],['_'])),
- ?line {'EXIT', {badarg, _}} =
+ eval(family([{a,[]},{b,[b,b]},{a,[]}], FT),
+ from_term([{a,[]},{b,[b]}], FT)),
+ eval(to_external(family([{b,[{hej,san},tjo]},{a,[]}], FT)),
+ [{a,[]},{b,[tjo,{hej,san}]}]),
+
+ eval(family([{{a},[{foo,bar}]}], ['_']),
+ from_term([{{a},[{foo,bar}]}], ['_'])),
+ eval(family([], ['_']), from_term([], ['_'])),
+ {'EXIT', {badarg, _}} = (catch family([[a]],['_'])),
+ {'EXIT', {badarg, _}} = (catch family([{a,b}],['_'])),
+ {'EXIT', {badarg, _}} =
(catch family([{a,[foo]}], [{atom,atom}])),
- ?line eval(family([{{a},[{foo,bar}]}], [{{dt},[{r1,t2}]}]),
- from_term([{{a},[{foo,bar}]}], [{{dt},[{r1,t2}]}])),
- ?line eval(family([{a,[a]},{a,[a,a]}],[{atom,[atom]}]),
- family([{a,[a]}])),
- ?line eval(family([{[a,b],[a]},{[b,a],[a,a]}],[{[atom],[atom]}]),
- from_term([{[a,b],[a]},{[b,a],[a,a]}])),
+ eval(family([{{a},[{foo,bar}]}], [{{dt},[{r1,t2}]}]),
+ from_term([{{a},[{foo,bar}]}], [{{dt},[{r1,t2}]}])),
+ eval(family([{a,[a]},{a,[a,a]}],[{atom,[atom]}]),
+ family([{a,[a]}])),
+ eval(family([{[a,b],[a]},{[b,a],[a,a]}],[{[atom],[atom]}]),
+ from_term([{[a,b],[a]},{[b,a],[a,a]}])),
ok.
-projection(suite) -> [];
-projection(doc) -> [""];
projection(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
+ E = empty_set(),
+ ER = relation([]),
%% set of ordered sets
- ?line S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
- ?line S2 = relation([{a,1},{a,2},{a,3},{b,4},{b,5},{b,6}]),
-
- ?line eval(projection(1, E), E),
- ?line eval(projection(1, ER), set([])),
- ?line eval(projection(1, relation([{a,1}])), set([a])),
- ?line eval(projection(1, S1), set([a,b,c])),
- ?line eval(projection(1, S2), set([a,b])),
- ?line eval(projection(2, S1), set([0,1,2,22])),
- ?line eval(projection(2, relation([{1,a},{2,a},{3,b}])), set([a,b])),
- ?line eval(projection(1, relation([{a},{b},{c}])), set([a,b,c])),
+ S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
+ S2 = relation([{a,1},{a,2},{a,3},{b,4},{b,5},{b,6}]),
+
+ eval(projection(1, E), E),
+ eval(projection(1, ER), set([])),
+ eval(projection(1, relation([{a,1}])), set([a])),
+ eval(projection(1, S1), set([a,b,c])),
+ eval(projection(1, S2), set([a,b])),
+ eval(projection(2, S1), set([0,1,2,22])),
+ eval(projection(2, relation([{1,a},{2,a},{3,b}])), set([a,b])),
+ eval(projection(1, relation([{a},{b},{c}])), set([a,b,c])),
Fun1 = {external, fun({A,B,C}) -> {A,{B,C}} end},
- ?line eval(projection(Fun1, E), E),
+ eval(projection(Fun1, E), E),
%% No check here:
- ?line eval(projection(3, projection(Fun1, empty_set())), E),
- ?line E2 = relation([], 3),
- ?line eval(projection(Fun1, E2), from_term([], [{atom,{atom,atom}}])),
+ eval(projection(3, projection(Fun1, empty_set())), E),
+ E2 = relation([], 3),
+ eval(projection(Fun1, E2), from_term([], [{atom,{atom,atom}}])),
Fun2 = {external, fun({A,_B}) -> {A} end},
- ?line eval(projection(Fun2, ER), from_term([], [{atom}])),
- ?line eval(projection(Fun2, relation([{a,1}])), relation([{a}])),
- ?line eval(projection(Fun2, relation([{a,1},{b,3},{a,2}])),
- relation([{a},{b}])),
+ eval(projection(Fun2, ER), from_term([], [{atom}])),
+ eval(projection(Fun2, relation([{a,1}])), relation([{a}])),
+ eval(projection(Fun2, relation([{a,1},{b,3},{a,2}])),
+ relation([{a},{b}])),
Fun3 = {external, fun({A,_B,C}) -> {C,{A},C} end},
- ?line eval(projection(Fun3, relation([{a,1,x},{b,3,y},{a,2,z}])),
- from_term([{x,{a},x},{y,{b},y},{z,{a},z}])),
+ eval(projection(Fun3, relation([{a,1,x},{b,3,y},{a,2,z}])),
+ from_term([{x,{a},x},{y,{b},y},{z,{a},z}])),
Fun4 = {external, fun(A={B,_C,_D}) -> {B, A} end},
- ?line eval(projection(Fun4, relation([{a,1,x},{b,3,y},{a,2,z}])),
- from_term([{a,{a,1,x}},{b,{b,3,y}},{a,{a,2,z}}])),
+ eval(projection(Fun4, relation([{a,1,x},{b,3,y},{a,2,z}])),
+ from_term([{a,{a,1,x}},{b,{b,3,y}},{a,{a,2,z}}])),
- ?line eval(projection({external, fun({A,B,_C,D}) -> {A,B,A,D} end},
- relation([{1,1,1,2}, {1,1,3,1}])),
- relation([{1,1,1,1}, {1,1,1,2}])),
+ eval(projection({external, fun({A,B,_C,D}) -> {A,B,A,D} end},
+ relation([{1,1,1,2}, {1,1,3,1}])),
+ relation([{1,1,1,1}, {1,1,1,2}])),
- ?line {'EXIT', {badarg, _}} = (catch projection(1, set([]))),
- ?line {'EXIT', {function_clause, _}} =
+ {'EXIT', {badarg, _}} = (catch projection(1, set([]))),
+ {'EXIT', {function_clause, _}} =
(catch projection({external, fun({A}) -> A end}, S1)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch projection({external, fun({A,_}) -> {A,0} end},
from_term([{1,a}]))),
%% {} is not an ordered set
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch projection({external, fun(_) -> {} end}, ER)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch projection({external, fun(_) -> {{}} end}, ER)),
- ?line eval(projection({external, fun({T,_}) -> T end},
- relation([{{},a},{{},b}])),
- set([{}])),
- ?line eval(projection({external, fun({T}) -> T end}, relation([{{}}])),
- set([{}])),
-
- ?line eval(projection({external, fun(A) -> {A} end},
- relation([{1,a},{2,b}])),
- from_term([{{1,a}},{{2,b}}])),
- ?line eval(projection({external, fun({A,B}) -> {B,A} end},
- relation([{1,a},{2,b}])),
- relation([{a,1},{b,2}])),
- ?line eval(projection({external, fun(X=Y=A) -> {X,Y,A} end}, set([a,b,c])),
- relation([{a,a,a},{b,b,b},{c,c,c}])),
-
- ?line eval(projection({external, fun({A,{_},B}) -> {A,B} end},
- from_term([{a,{a},b},{a,{b},c}])),
- relation([{a,b},{a,c}])),
- ?line eval(projection({external, fun({A,_,B}) -> {A,B} end},
- relation([{a,{},b},{a,{},c}])),
- relation([{a,b},{a,c}])),
+ eval(projection({external, fun({T,_}) -> T end},
+ relation([{{},a},{{},b}])),
+ set([{}])),
+ eval(projection({external, fun({T}) -> T end}, relation([{{}}])),
+ set([{}])),
+
+ eval(projection({external, fun(A) -> {A} end},
+ relation([{1,a},{2,b}])),
+ from_term([{{1,a}},{{2,b}}])),
+ eval(projection({external, fun({A,B}) -> {B,A} end},
+ relation([{1,a},{2,b}])),
+ relation([{a,1},{b,2}])),
+ eval(projection({external, fun(X=Y=A) -> {X,Y,A} end}, set([a,b,c])),
+ relation([{a,a,a},{b,b,b},{c,c,c}])),
+
+ eval(projection({external, fun({A,{_},B}) -> {A,B} end},
+ from_term([{a,{a},b},{a,{b},c}])),
+ relation([{a,b},{a,c}])),
+ eval(projection({external, fun({A,_,B}) -> {A,B} end},
+ relation([{a,{},b},{a,{},c}])),
+ relation([{a,b},{a,c}])),
Fun5 = fun(S) -> from_term({to_external(S),0}, {type(S),atom}) end,
- ?line eval(projection(Fun5, E), E),
- ?line eval(projection(Fun5, set([a,b])), from_term([{a,0},{b,0}])),
- ?line eval(projection(Fun5, relation([{a,1},{b,2}])),
- from_term([{{a,1},0},{{b,2},0}])),
- ?line eval(projection(Fun5, from_term([[a],[b]])),
- from_term([{[a],0},{[b],0}])),
+ eval(projection(Fun5, E), E),
+ eval(projection(Fun5, set([a,b])), from_term([{a,0},{b,0}])),
+ eval(projection(Fun5, relation([{a,1},{b,2}])),
+ from_term([{{a,1},0},{{b,2},0}])),
+ eval(projection(Fun5, from_term([[a],[b]])),
+ from_term([{[a],0},{[b],0}])),
F = 0.0, I = round(F),
- ?line FR = relation([{I},{F}]),
+ FR = relation([{I},{F}]),
if
F == I -> % term ordering
true = (no_elements(projection(1, FR)) =:= 1);
@@ -532,382 +517,374 @@ projection(Conf) when is_list(Conf) ->
end,
%% set of sets
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch projection({external, fun(X) -> X end},
from_term([], [[atom]]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch projection({external, fun(X) -> X end}, from_term([[a]]))),
- ?line eval(projection(fun sofs:union/1,
- from_term([[[1,2],[2,3]], [[a,b],[b,c]]])),
- from_term([[1,2,3], [a,b,c]])),
- ?line eval(projection(fun(_) -> from_term([a]) end,
- from_term([[b]], [[a]])),
- from_term([[a]])),
- ?line eval(projection(fun(_) -> from_term([a]) end,
- from_term([[1,2],[3,4]])),
- from_term([[a]])),
+ eval(projection(fun sofs:union/1,
+ from_term([[[1,2],[2,3]], [[a,b],[b,c]]])),
+ from_term([[1,2,3], [a,b,c]])),
+ eval(projection(fun(_) -> from_term([a]) end,
+ from_term([[b]], [[a]])),
+ from_term([[a]])),
+ eval(projection(fun(_) -> from_term([a]) end,
+ from_term([[1,2],[3,4]])),
+ from_term([[a]])),
Fun10 = fun(S) ->
- %% Cheating a lot...
- case to_external(S) of
- [1] -> from_term({1,1});
- _ -> S
- end
- end,
- ?line eval(projection(Fun10, from_term([[1]])), from_term([{1,1}])),
- ?line eval(projection(fun(_) -> from_term({a}) end, from_term([[a]])),
- from_term([{a}])),
- ?line {'EXIT', {badarg, _}} =
+ %% Cheating a lot...
+ case to_external(S) of
+ [1] -> from_term({1,1});
+ _ -> S
+ end
+ end,
+ eval(projection(Fun10, from_term([[1]])), from_term([{1,1}])),
+ eval(projection(fun(_) -> from_term({a}) end, from_term([[a]])),
+ from_term([{a}])),
+ {'EXIT', {badarg, _}} =
(catch projection(fun(_) -> {a} end, from_term([[a]]))),
ok.
-substitution(suite) -> [];
-substitution(doc) -> [""];
substitution(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
+ E = empty_set(),
+ ER = relation([]),
%% set of ordered sets
- ?line S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
- ?line S2 = relation([{a,1},{a,2},{a,3},{b,4},{b,5},{b,6}]),
+ S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
+ S2 = relation([{a,1},{a,2},{a,3},{b,4},{b,5},{b,6}]),
- ?line eval(substitution(1, E), E),
+ eval(substitution(1, E), E),
%% No check here:
Fun0 = {external, fun({A,B,C}) -> {A,{B,C}} end},
- ?line eval(substitution(3, substitution(Fun0, empty_set())), E),
- ?line eval(substitution(1, ER), from_term([],[{{atom,atom},atom}])),
- ?line eval(substitution(1, relation([{a,1}])), from_term([{{a,1},a}])),
- ?line eval(substitution(1, S1),
- from_term([{{a,1},a},{{b,2},b},{{b,22},b},{{c,0},c}])),
- ?line eval(substitution(1, S2),
- from_term([{{a,1},a},{{a,2},a},{{a,3},a},{{b,4},b},
- {{b,5},b},{{b,6},b}])),
- ?line eval(substitution(2, S1),
- from_term([{{a,1},1},{{b,2},2},{{b,22},22},{{c,0},0}])),
-
+ eval(substitution(3, substitution(Fun0, empty_set())), E),
+ eval(substitution(1, ER), from_term([],[{{atom,atom},atom}])),
+ eval(substitution(1, relation([{a,1}])), from_term([{{a,1},a}])),
+ eval(substitution(1, S1),
+ from_term([{{a,1},a},{{b,2},b},{{b,22},b},{{c,0},c}])),
+ eval(substitution(1, S2),
+ from_term([{{a,1},a},{{a,2},a},{{a,3},a},{{b,4},b},
+ {{b,5},b},{{b,6},b}])),
+ eval(substitution(2, S1),
+ from_term([{{a,1},1},{{b,2},2},{{b,22},22},{{c,0},0}])),
+
Fun1 = fun({A,_B}) -> {A} end,
XFun1 = {external, Fun1},
- ?line eval(substitution(XFun1, E), E),
- ?line eval(substitution(Fun1, E), E),
- ?line eval(substitution(XFun1, ER), from_term([], [{{atom,atom},{atom}}])),
- ?line eval(substitution(XFun1, relation([{a,1}])),
- from_term([{{a,1},{a}}])),
- ?line eval(substitution(XFun1, relation([{a,1},{b,3},{a,2}])),
- from_term([{{a,1},{a}},{{a,2},{a}},{{b,3},{b}}])),
- ?line eval(substitution({external, fun({A,_B,C}) -> {C,A,C} end},
- relation([{a,1,x},{b,3,y},{a,2,z}])),
- from_term([{{a,1,x},{x,a,x}},{{a,2,z},{z,a,z}},
- {{b,3,y},{y,b,y}}])),
+ eval(substitution(XFun1, E), E),
+ eval(substitution(Fun1, E), E),
+ eval(substitution(XFun1, ER), from_term([], [{{atom,atom},{atom}}])),
+ eval(substitution(XFun1, relation([{a,1}])),
+ from_term([{{a,1},{a}}])),
+ eval(substitution(XFun1, relation([{a,1},{b,3},{a,2}])),
+ from_term([{{a,1},{a}},{{a,2},{a}},{{b,3},{b}}])),
+ eval(substitution({external, fun({A,_B,C}) -> {C,A,C} end},
+ relation([{a,1,x},{b,3,y},{a,2,z}])),
+ from_term([{{a,1,x},{x,a,x}},{{a,2,z},{z,a,z}},
+ {{b,3,y},{y,b,y}}])),
Fun2 = fun(S) -> {A,_B} = to_external(S), from_term({A}) end,
- ?line eval(substitution(Fun2, ER), E),
- ?line eval(substitution(Fun2, relation([{a,1}])),
- from_term([{{a,1},{a}}])),
+ eval(substitution(Fun2, ER), E),
+ eval(substitution(Fun2, relation([{a,1}])),
+ from_term([{{a,1},{a}}])),
Fun3 = fun(S) -> from_term({to_external(S),0}, {type(S),atom}) end,
- ?line eval(substitution(Fun3, E), E),
- ?line eval(substitution(Fun3, set([a,b])),
- from_term([{a,{a,0}},{b,{b,0}}])),
- ?line eval(substitution(Fun3, relation([{a,1},{b,2}])),
- from_term([{{a,1},{{a,1},0}},{{b,2},{{b,2},0}}])),
- ?line eval(substitution(Fun3, from_term([[a],[b]])),
- from_term([{[a],{[a],0}},{[b],{[b],0}}])),
-
- ?line eval(substitution(fun(_) -> E end, from_term([[a],[b]])),
- from_term([{[a],[]},{[b],[]}])),
-
- ?line {'EXIT', {badarg, _}} = (catch substitution(1, set([]))),
- ?line eval(substitution(1, ER), from_term([], [{{atom,atom},atom}])),
- ?line {'EXIT', {function_clause, _}} =
+ eval(substitution(Fun3, E), E),
+ eval(substitution(Fun3, set([a,b])),
+ from_term([{a,{a,0}},{b,{b,0}}])),
+ eval(substitution(Fun3, relation([{a,1},{b,2}])),
+ from_term([{{a,1},{{a,1},0}},{{b,2},{{b,2},0}}])),
+ eval(substitution(Fun3, from_term([[a],[b]])),
+ from_term([{[a],{[a],0}},{[b],{[b],0}}])),
+
+ eval(substitution(fun(_) -> E end, from_term([[a],[b]])),
+ from_term([{[a],[]},{[b],[]}])),
+
+ {'EXIT', {badarg, _}} = (catch substitution(1, set([]))),
+ eval(substitution(1, ER), from_term([], [{{atom,atom},atom}])),
+ {'EXIT', {function_clause, _}} =
(catch substitution({external, fun({A,_}) -> A end}, set([]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch substitution({external, fun({A,_}) -> {A,0} end},
from_term([{1,a}]))),
%% set of sets
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch substitution({external, fun(X) -> X end},
from_term([], [[atom]]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch substitution({external, fun(X) -> X end}, from_term([[a]]))),
- ?line eval(substitution(fun(X) -> X end, from_term([], [[atom]])), E),
- ?line eval(substitution(fun sofs:union/1,
- from_term([[[1,2],[2,3]], [[a,b],[b,c]]])),
- from_term([{[[1,2],[2,3]],[1,2,3]}, {[[a,b],[b,c]],[a,b,c]}])),
- ?line eval(substitution(fun(_) -> from_term([a]) end,
- from_term([[b]], [[a]])),
- from_term([{[b],[a]}], [{[a],[atom]}])),
- ?line eval(substitution(fun(_) -> from_term([a]) end,
- from_term([[1,2],[3,4]])),
- from_term([{[1,2],[a]},{[3,4],[a]}])),
+ eval(substitution(fun(X) -> X end, from_term([], [[atom]])), E),
+ eval(substitution(fun sofs:union/1,
+ from_term([[[1,2],[2,3]], [[a,b],[b,c]]])),
+ from_term([{[[1,2],[2,3]],[1,2,3]}, {[[a,b],[b,c]],[a,b,c]}])),
+ eval(substitution(fun(_) -> from_term([a]) end,
+ from_term([[b]], [[a]])),
+ from_term([{[b],[a]}], [{[a],[atom]}])),
+ eval(substitution(fun(_) -> from_term([a]) end,
+ from_term([[1,2],[3,4]])),
+ from_term([{[1,2],[a]},{[3,4],[a]}])),
Fun10 = fun(S) ->
- %% Cheating a lot...
- case to_external(S) of
- [1] -> from_term({1,1});
- _ -> S
- end
- end,
- ?line eval(substitution(Fun10, from_term([[1]])),
- from_term([{[1],{1,1}}])),
- ?line {'EXIT', {type_mismatch, _}} =
+ %% Cheating a lot...
+ case to_external(S) of
+ [1] -> from_term({1,1});
+ _ -> S
+ end
+ end,
+ eval(substitution(Fun10, from_term([[1]])),
+ from_term([{[1],{1,1}}])),
+ {'EXIT', {type_mismatch, _}} =
(catch substitution(Fun10, from_term([[1],[2]]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch substitution(Fun10, from_term([[1],[0]]))),
- ?line eval(substitution(fun(_) -> from_term({a}) end, from_term([[a]])),
- from_term([{[a],{a}}])),
- ?line {'EXIT', {badarg, _}} =
+ eval(substitution(fun(_) -> from_term({a}) end, from_term([[a]])),
+ from_term([{[a],{a}}])),
+ {'EXIT', {badarg, _}} =
(catch substitution(fun(_) -> {a} end, from_term([[a]]))),
ok.
-restriction(suite) -> [];
-restriction(doc) -> [""];
restriction(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([], 2),
+ E = empty_set(),
+ ER = relation([], 2),
%% set of ordered sets
- ?line S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
- ?line eval(restriction(S1, set([a,b])),
- relation([{a,1},{b,2},{b,22}])),
- ?line eval(restriction(2, S1, set([1,2])),
- relation([{a,1},{b,2}])),
- ?line eval(restriction(S1, set([a,b,c])), S1),
- ?line eval(restriction(1, S1, set([0,1,d,e])), ER),
- ?line eval(restriction(1, S1, E), ER),
- ?line eval(restriction({external, fun({_A,B,C}) -> {B,C} end},
- relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
- relation([{bb,2},{cc,3}])),
- relation([{b,bb,2},{c,cc,3}])),
+ S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
+ eval(restriction(S1, set([a,b])),
+ relation([{a,1},{b,2},{b,22}])),
+ eval(restriction(2, S1, set([1,2])),
+ relation([{a,1},{b,2}])),
+ eval(restriction(S1, set([a,b,c])), S1),
+ eval(restriction(1, S1, set([0,1,d,e])), ER),
+ eval(restriction(1, S1, E), ER),
+ eval(restriction({external, fun({_A,B,C}) -> {B,C} end},
+ relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
+ relation([{bb,2},{cc,3}])),
+ relation([{b,bb,2},{c,cc,3}])),
R1 = relation([],[{a,b}]),
- ?line eval(restriction(2, R1,sofs:set([],[b])), R1),
+ eval(restriction(2, R1,sofs:set([],[b])), R1),
Id = fun(X) -> X end,
XId = {external, Id},
- ?line eval(restriction(XId, relation([{a,b}]), E), ER),
- ?line eval(restriction(XId, E, relation([{b,d}])), E),
+ eval(restriction(XId, relation([{a,b}]), E), ER),
+ eval(restriction(XId, E, relation([{b,d}])), E),
Fun1 = fun(S) -> {_A,B,C} = to_external(S), from_term({B,C}) end,
- ?line eval(restriction(Fun1,
- relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
- relation([{bb,2},{cc,3}])),
- relation([{b,bb,2},{c,cc,3}])),
- ?line eval(restriction({external, fun({_,{A},B}) -> {A,B} end},
- from_term([{a,{aa},1},{b,{bb},2},{c,{cc},3}]),
- from_term([{bb,2},{cc,3}])),
- from_term([{b,{bb},2},{c,{cc},3}])),
+ eval(restriction(Fun1,
+ relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
+ relation([{bb,2},{cc,3}])),
+ relation([{b,bb,2},{c,cc,3}])),
+ eval(restriction({external, fun({_,{A},B}) -> {A,B} end},
+ from_term([{a,{aa},1},{b,{bb},2},{c,{cc},3}]),
+ from_term([{bb,2},{cc,3}])),
+ from_term([{b,{bb},2},{c,{cc},3}])),
S5 = relation([{1,a},{2,b},{3,c}]),
- ?line eval(restriction(2, S5, set([b,c])), relation([{2,b},{3,c}])),
+ eval(restriction(2, S5, set([b,c])), relation([{2,b},{3,c}])),
S4 = relation([{a,1},{b,2},{b,27},{c,0}]),
- ?line eval(restriction(2, S4, E), ER),
+ eval(restriction(2, S4, E), ER),
S6 = relation([{1,a},{2,c},{3,b}]),
- ?line eval(restriction(2, S6, set([d,e])), ER),
- ?line eval(restriction(2,
- relation([{1,d},{2,c},{3,b},{4,a},{5,e}]),
- set([c])),
- relation([{2,c}])),
- ?line eval(restriction(XId,
- relation([{1,a},{3,b},{4,c},{4,d}]),
- relation([{2,a},{2,c},{4,c}])),
- relation([{4,c}])),
- ?line eval(restriction(2, relation([{a,b}]), E), ER),
- ?line eval(restriction(2, E, relation([{b,d}])), E),
- ?line eval(restriction(2, relation([{b,d}]), E), ER),
- ?line eval(restriction(XId, E, set([a])), E),
- ?line eval(restriction(1, S1, E), ER),
- ?line {'EXIT', {badarg, _}} =
+ eval(restriction(2, S6, set([d,e])), ER),
+ eval(restriction(2,
+ relation([{1,d},{2,c},{3,b},{4,a},{5,e}]),
+ set([c])),
+ relation([{2,c}])),
+ eval(restriction(XId,
+ relation([{1,a},{3,b},{4,c},{4,d}]),
+ relation([{2,a},{2,c},{4,c}])),
+ relation([{4,c}])),
+ eval(restriction(2, relation([{a,b}]), E), ER),
+ eval(restriction(2, E, relation([{b,d}])), E),
+ eval(restriction(2, relation([{b,d}]), E), ER),
+ eval(restriction(XId, E, set([a])), E),
+ eval(restriction(1, S1, E), ER),
+ {'EXIT', {badarg, _}} =
(catch restriction(3, relation([{a,b}]), E)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch restriction(3, relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch restriction(3, relation([{a,b}]), set([{b,d}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch restriction(2, relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch restriction({external, fun({A,_B}) -> A end},
relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch restriction({external, fun({A,_}) -> {A,0} end},
from_term([{1,a}]),
from_term([{1,0}]))),
- ?line eval(restriction(2, relation([{a,d},{b,e},{c,b},{d,c}]), set([b,d])),
- relation([{a,d},{c,b}])),
- ?line {'EXIT', {function_clause, _}} =
+ eval(restriction(2, relation([{a,d},{b,e},{c,b},{d,c}]), set([b,d])),
+ relation([{a,d},{c,b}])),
+ {'EXIT', {function_clause, _}} =
(catch restriction({external, fun({A,_B}) -> A end}, set([]), E)),
Fun3 = fun(S) -> from_term({to_external(S),0}, {type(S),atom}) end,
- ?line eval(restriction(Fun3, set([1,2]), from_term([{1,0}])),
- from_term([1])),
+ eval(restriction(Fun3, set([1,2]), from_term([{1,0}])),
+ from_term([1])),
%% set of sets
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch restriction({external, fun(X) -> X end},
from_term([], [[atom]]), set([a]))),
S2 = from_term([], [[atom]]),
- ?line eval(restriction(Id, S2, E), E),
+ eval(restriction(Id, S2, E), E),
S3 = from_term([[a],[b]], [[atom]]),
- ?line eval(restriction(Id, S3, E), E),
- ?line eval(restriction(Id, from_term([], [[atom]]), set([a])),
- from_term([], [[atom]])),
- ?line eval(restriction(fun sofs:union/1,
- from_term([[[a],[b]], [[b],[c]],
- [[], [a,b]], [[1],[2]]]),
- from_term([[a,b],[1,2,3],[b,c]])),
- from_term([[[],[a,b]], [[a],[b]],[[b],[c]]])),
- ?line eval(restriction(fun(_) -> from_term([a]) end,
- from_term([], [[atom]]),
- from_term([], [[a]])),
- from_term([], [[atom]])),
- ?line {'EXIT', {type_mismatch, _}} =
+ eval(restriction(Id, S3, E), E),
+ eval(restriction(Id, from_term([], [[atom]]), set([a])),
+ from_term([], [[atom]])),
+ eval(restriction(fun sofs:union/1,
+ from_term([[[a],[b]], [[b],[c]],
+ [[], [a,b]], [[1],[2]]]),
+ from_term([[a,b],[1,2,3],[b,c]])),
+ from_term([[[],[a,b]], [[a],[b]],[[b],[c]]])),
+ eval(restriction(fun(_) -> from_term([a]) end,
+ from_term([], [[atom]]),
+ from_term([], [[a]])),
+ from_term([], [[atom]])),
+ {'EXIT', {type_mismatch, _}} =
(catch restriction(fun(_) -> from_term([a]) end,
from_term([[1,2],[3,4]]),
from_term([], [atom]))),
Fun10 = fun(S) ->
- %% Cheating a lot...
- case to_external(S) of
- [1] -> from_term({1,1});
- _ -> S
- end
- end,
- ?line {'EXIT', {type_mismatch, _}} =
+ %% Cheating a lot...
+ case to_external(S) of
+ [1] -> from_term({1,1});
+ _ -> S
+ end
+ end,
+ {'EXIT', {type_mismatch, _}} =
(catch restriction(Fun10, from_term([[1]]), from_term([], [[atom]]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch restriction(fun(_) -> from_term({a}) end,
from_term([[a]]),
from_term([], [atom]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch restriction(fun(_) -> {a} end,
from_term([[a]]),
from_term([], [atom]))),
ok.
-drestriction(suite) -> [];
-drestriction(doc) -> [""];
drestriction(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([], 2),
+ E = empty_set(),
+ ER = relation([], 2),
%% set of ordered sets
- ?line S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
- ?line eval(drestriction(S1, set([a,b])), relation([{c,0}])),
- ?line eval(drestriction(2, S1, set([1,2])),
- relation([{b,22},{c,0}])),
- ?line eval(drestriction(S1, set([a,b,c])), ER),
- ?line eval(drestriction(2, ER, set([a,b])), ER),
- ?line eval(drestriction(1, S1, set([0,1,d,e])), S1),
- ?line eval(drestriction(1, S1, E), S1),
- ?line eval(drestriction({external, fun({_A,B,C}) -> {B,C} end},
- relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
- relation([{bb,2},{cc,3}])),
- relation([{a,aa,1}])),
+ S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
+ eval(drestriction(S1, set([a,b])), relation([{c,0}])),
+ eval(drestriction(2, S1, set([1,2])),
+ relation([{b,22},{c,0}])),
+ eval(drestriction(S1, set([a,b,c])), ER),
+ eval(drestriction(2, ER, set([a,b])), ER),
+ eval(drestriction(1, S1, set([0,1,d,e])), S1),
+ eval(drestriction(1, S1, E), S1),
+ eval(drestriction({external, fun({_A,B,C}) -> {B,C} end},
+ relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
+ relation([{bb,2},{cc,3}])),
+ relation([{a,aa,1}])),
Id = fun(X) -> X end,
XId = {external, Id},
- ?line eval(drestriction(XId, relation([{a,b}]), E), relation([{a,b}])),
- ?line eval(drestriction(XId, E, relation([{b,d}])), E),
+ eval(drestriction(XId, relation([{a,b}]), E), relation([{a,b}])),
+ eval(drestriction(XId, E, relation([{b,d}])), E),
Fun1 = fun(S) -> {_A,B,C} = to_external(S), from_term({B,C}) end,
- ?line eval(drestriction(Fun1,
- relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
- relation([{bb,2},{cc,3}])),
- relation([{a,aa,1}])),
- ?line eval(drestriction({external, fun({_,{A},B}) -> {A,B} end},
- from_term([{a,{aa},1},{b,{bb},2},{c,{cc},3}]),
- from_term([{bb,2},{cc,3}])),
- from_term([{a,{aa},1}])),
+ eval(drestriction(Fun1,
+ relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
+ relation([{bb,2},{cc,3}])),
+ relation([{a,aa,1}])),
+ eval(drestriction({external, fun({_,{A},B}) -> {A,B} end},
+ from_term([{a,{aa},1},{b,{bb},2},{c,{cc},3}]),
+ from_term([{bb,2},{cc,3}])),
+ from_term([{a,{aa},1}])),
S5 = relation([{1,a},{2,b},{3,c}]),
- ?line eval(drestriction(2, S5, set([b,c])), relation([{1,a}])),
+ eval(drestriction(2, S5, set([b,c])), relation([{1,a}])),
S4 = relation([{a,1},{b,2},{b,27},{c,0}]),
- ?line eval(drestriction(2, S4, set([])), S4),
+ eval(drestriction(2, S4, set([])), S4),
S6 = relation([{1,a},{2,c},{3,b}]),
- ?line eval(drestriction(2, S6, set([d,e])), S6),
- ?line eval(drestriction(2,
- relation([{1,d},{2,c},{3,b},{4,a},{5,e}]),
- set([c])),
- relation([{1,d},{3,b},{4,a},{5,e}])),
- ?line eval(drestriction(XId,
- relation([{1,a},{3,b},{4,c},{4,d}]),
- relation([{2,a},{2,c},{4,c}])),
- relation([{1,a},{3,b},{4,d}])),
- ?line eval(drestriction(2, relation([{a,b}]), E), relation([{a,b}])),
- ?line eval(drestriction(2, E, relation([{b,d}])), E),
- ?line eval(drestriction(2, relation([{b,d}]), E), relation([{b,d}])),
- ?line eval(drestriction(XId, E, set([a])), E),
- ?line eval(drestriction(1, S1, E), S1),
- ?line {'EXIT', {badarg, _}} =
+ eval(drestriction(2, S6, set([d,e])), S6),
+ eval(drestriction(2,
+ relation([{1,d},{2,c},{3,b},{4,a},{5,e}]),
+ set([c])),
+ relation([{1,d},{3,b},{4,a},{5,e}])),
+ eval(drestriction(XId,
+ relation([{1,a},{3,b},{4,c},{4,d}]),
+ relation([{2,a},{2,c},{4,c}])),
+ relation([{1,a},{3,b},{4,d}])),
+ eval(drestriction(2, relation([{a,b}]), E), relation([{a,b}])),
+ eval(drestriction(2, E, relation([{b,d}])), E),
+ eval(drestriction(2, relation([{b,d}]), E), relation([{b,d}])),
+ eval(drestriction(XId, E, set([a])), E),
+ eval(drestriction(1, S1, E), S1),
+ {'EXIT', {badarg, _}} =
(catch drestriction(3, relation([{a,b}]), E)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch drestriction(3, relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch drestriction(3, relation([{a,b}]), set([{b,d}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch drestriction(2, relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch drestriction({external, fun({A,_B}) -> A end},
relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch drestriction({external, fun({A,_}) -> {A,0} end},
from_term([{1,a}]),
from_term([{1,0}]))),
- ?line eval(drestriction(2, relation([{a,d},{b,e},{c,b},{d,c}]), set([b,d])),
- relation([{b,e},{d,c}])),
- ?line {'EXIT', {function_clause, _}} =
+ eval(drestriction(2, relation([{a,d},{b,e},{c,b},{d,c}]), set([b,d])),
+ relation([{b,e},{d,c}])),
+ {'EXIT', {function_clause, _}} =
(catch drestriction({external, fun({A,_B}) -> A end}, set([]), E)),
Fun3 = fun(S) -> from_term({to_external(S),0}, {type(S),atom}) end,
- ?line eval(drestriction(Fun3, set([1,2]), from_term([{1,0}])),
- from_term([2])),
+ eval(drestriction(Fun3, set([1,2]), from_term([{1,0}])),
+ from_term([2])),
%% set of sets
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch drestriction({external, fun(X) -> X end},
from_term([], [[atom]]), set([a]))),
S2 = from_term([], [[atom]]),
- ?line eval(drestriction(Id, S2, E), S2),
+ eval(drestriction(Id, S2, E), S2),
S3 = from_term([[a],[b]], [[atom]]),
- ?line eval(drestriction(Id, S3, E), S3),
- ?line eval(drestriction(Id, from_term([], [[atom]]), set([a])),
- from_term([], [[atom]])),
- ?line eval(drestriction(fun sofs:union/1,
- from_term([[[a],[b]], [[b],[c]],
- [[], [a,b]], [[1],[2]]]),
- from_term([[a,b],[1,2,3],[b,c]])),
- from_term([[[1],[2]]])),
- ?line eval(drestriction(fun(_) -> from_term([a]) end,
- from_term([], [[atom]]),
- from_term([], [[a]])),
- from_term([], [[atom]])),
- ?line {'EXIT', {type_mismatch, _}} =
+ eval(drestriction(Id, S3, E), S3),
+ eval(drestriction(Id, from_term([], [[atom]]), set([a])),
+ from_term([], [[atom]])),
+ eval(drestriction(fun sofs:union/1,
+ from_term([[[a],[b]], [[b],[c]],
+ [[], [a,b]], [[1],[2]]]),
+ from_term([[a,b],[1,2,3],[b,c]])),
+ from_term([[[1],[2]]])),
+ eval(drestriction(fun(_) -> from_term([a]) end,
+ from_term([], [[atom]]),
+ from_term([], [[a]])),
+ from_term([], [[atom]])),
+ {'EXIT', {type_mismatch, _}} =
(catch drestriction(fun(_) -> from_term([a]) end,
from_term([[1,2],[3,4]]),
from_term([], [atom]))),
Fun10 = fun(S) ->
- %% Cheating a lot...
- case to_external(S) of
- [1] -> from_term({1,1});
- _ -> S
- end
- end,
- ?line {'EXIT', {type_mismatch, _}} =
+ %% Cheating a lot...
+ case to_external(S) of
+ [1] -> from_term({1,1});
+ _ -> S
+ end
+ end,
+ {'EXIT', {type_mismatch, _}} =
(catch drestriction(Fun10, from_term([[1]]), from_term([], [[atom]]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch drestriction(fun(_) -> from_term({a}) end,
from_term([[a]]),
from_term([], [atom]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch drestriction(fun(_) -> {a} end,
from_term([[a]]),
from_term([], [atom]))),
ok.
-strict_relation_1(suite) -> [];
-strict_relation_1(doc) -> [""];
strict_relation_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([], 2),
- ?line eval(strict_relation(E), E),
- ?line eval(strict_relation(ER), ER),
- ?line eval(strict_relation(relation([{1,a},{a,a},{2,b}])),
- relation([{1,a},{2,b}])),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ ER = relation([], 2),
+ eval(strict_relation(E), E),
+ eval(strict_relation(ER), ER),
+ eval(strict_relation(relation([{1,a},{a,a},{2,b}])),
+ relation([{1,a},{2,b}])),
+ {'EXIT', {badarg, _}} =
(catch strict_relation(relation([{1,2,3}]))),
F = 0.0, I = round(F),
- ?line FR = relation([{F,I}]),
+ FR = relation([{F,I}]),
if
F == I -> % term ordering
eval(strict_relation(FR), ER);
@@ -916,362 +893,334 @@ strict_relation_1(Conf) when is_list(Conf) ->
end,
ok.
-extension(suite) -> [];
-extension(doc) -> [""];
extension(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([], 2),
- ?line EF = family([]),
- ?line C1 = from_term(3),
- ?line C2 = from_term([3]),
- ?line {'EXIT', {function_clause, _}} = (catch extension(foo, E, C1)),
- ?line {'EXIT', {function_clause, _}} = (catch extension(ER, foo, C1)),
- ?line {'EXIT', {{case_clause, _},_}} = (catch extension(ER, E, foo)),
- ?line {'EXIT', {type_mismatch, _}} = (catch extension(ER, E, E)),
- ?line {'EXIT', {badarg, _}} = (catch extension(C2, E, E)),
- ?line eval(E, extension(E, E, E)),
- ?line eval(EF, extension(EF, E, E)),
- ?line eval(family([{3,[]}]), extension(EF, set([3]), E)),
- ?line eval(ER, extension(ER, E, C1)),
- ?line eval(E, extension(E, ER, E)),
- ?line eval(from_term([],[{{atom,atom},type(ER)}]), extension(E, ER, ER)),
-
- ?line R1 = relation([{c,7},{c,9},{c,11},{d,17},{f,20}]),
- ?line S1 = set([a,c,d,e]),
- ?line eval(extension(R1, S1, C1), lextension(R1, S1, C1)),
-
- ?line S2 = set([1,2,3]),
- ?line eval(extension(ER, S2, C1), lextension(ER, S2, C1)),
-
- ?line R3 = relation([{4,a},{8,b}]),
- ?line S3 = set([1,2,3,4,5,6,7,8,9,10,11]),
- ?line eval(extension(R3, S3, C1), lextension(R3, S3, C1)),
-
- ?line R4 = relation([{2,b},{4,d},{6,f}]),
- ?line S4 = set([1,3,5,7]),
- ?line eval(extension(R4, S4, C1), lextension(R4, S4, C1)),
-
- ?line F1 = family([{a,[1]},{c,[2]}]),
- ?line S5 = set([a,b,c,d]),
- ?line eval(extension(F1, S5, C2), lextension(F1, S5, C2)),
+ E = empty_set(),
+ ER = relation([], 2),
+ EF = family([]),
+ C1 = from_term(3),
+ C2 = from_term([3]),
+ {'EXIT', {function_clause, _}} = (catch extension(foo, E, C1)),
+ {'EXIT', {function_clause, _}} = (catch extension(ER, foo, C1)),
+ {'EXIT', {{case_clause, _},_}} = (catch extension(ER, E, foo)),
+ {'EXIT', {type_mismatch, _}} = (catch extension(ER, E, E)),
+ {'EXIT', {badarg, _}} = (catch extension(C2, E, E)),
+ eval(E, extension(E, E, E)),
+ eval(EF, extension(EF, E, E)),
+ eval(family([{3,[]}]), extension(EF, set([3]), E)),
+ eval(ER, extension(ER, E, C1)),
+ eval(E, extension(E, ER, E)),
+ eval(from_term([],[{{atom,atom},type(ER)}]), extension(E, ER, ER)),
+
+ R1 = relation([{c,7},{c,9},{c,11},{d,17},{f,20}]),
+ S1 = set([a,c,d,e]),
+ eval(extension(R1, S1, C1), lextension(R1, S1, C1)),
+
+ S2 = set([1,2,3]),
+ eval(extension(ER, S2, C1), lextension(ER, S2, C1)),
+
+ R3 = relation([{4,a},{8,b}]),
+ S3 = set([1,2,3,4,5,6,7,8,9,10,11]),
+ eval(extension(R3, S3, C1), lextension(R3, S3, C1)),
+
+ R4 = relation([{2,b},{4,d},{6,f}]),
+ S4 = set([1,3,5,7]),
+ eval(extension(R4, S4, C1), lextension(R4, S4, C1)),
+
+ F1 = family([{a,[1]},{c,[2]}]),
+ S5 = set([a,b,c,d]),
+ eval(extension(F1, S5, C2), lextension(F1, S5, C2)),
ok.
lextension(R, S, C) ->
union(R, drestriction(1, constant_function(S, C), domain(R))).
-weak_relation_1(suite) -> [];
-weak_relation_1(doc) -> [""];
weak_relation_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([], 2),
- ?line eval(weak_relation(E), E),
- ?line eval(weak_relation(ER), ER),
- ?line eval(weak_relation(relation([{a,1},{a,2},{b,2},{c,c}])),
- relation([{1,1},{2,2},{a,1},{a,2},{a,a},{b,2},{b,b},{c,c}])),
- ?line eval(weak_relation(relation([{a,1},{a,a},{a,b}])),
- relation([{1,1},{a,1},{a,a},{a,b},{b,b}])),
- ?line eval(weak_relation(relation([{a,1},{a,b},{7,w}])),
- relation([{1,1},{7,7},{7,w},{a,1},{a,a},{a,b},{b,b},{w,w}])),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ ER = relation([], 2),
+ eval(weak_relation(E), E),
+ eval(weak_relation(ER), ER),
+ eval(weak_relation(relation([{a,1},{a,2},{b,2},{c,c}])),
+ relation([{1,1},{2,2},{a,1},{a,2},{a,a},{b,2},{b,b},{c,c}])),
+ eval(weak_relation(relation([{a,1},{a,a},{a,b}])),
+ relation([{1,1},{a,1},{a,a},{a,b},{b,b}])),
+ eval(weak_relation(relation([{a,1},{a,b},{7,w}])),
+ relation([{1,1},{7,7},{7,w},{a,1},{a,a},{a,b},{b,b},{w,w}])),
+ {'EXIT', {badarg, _}} =
(catch weak_relation(from_term([{{a},a}]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch weak_relation(from_term([{a,a}],[{d,r}]))),
- ?line {'EXIT', {badarg, _}} = (catch weak_relation(relation([{1,2,3}]))),
+ {'EXIT', {badarg, _}} = (catch weak_relation(relation([{1,2,3}]))),
F = 0.0, I = round(F),
if
F == I -> % term ordering
- ?line FR1 = relation([{F,I}]),
+ FR1 = relation([{F,I}]),
eval(weak_relation(FR1), FR1),
- ?line FR2 = relation([{F,2},{I,1}]),
+ FR2 = relation([{F,2},{I,1}]),
true = no_elements(weak_relation(FR2)) =:= 5,
- ?line FR3 = relation([{1,0},{1.0,1}]),
+ FR3 = relation([{1,0},{1.0,1}]),
true = no_elements(weak_relation(FR3)) =:= 3;
true ->
ok
end,
ok.
-to_sets_1(suite) -> [];
-to_sets_1(doc) -> [""];
to_sets_1(Conf) when is_list(Conf) ->
- ?line {'EXIT', {badarg, _}} = (catch to_sets(from_term(a))),
- ?line {'EXIT', {function_clause, _}} = (catch to_sets(a)),
+ {'EXIT', {badarg, _}} = (catch to_sets(from_term(a))),
+ {'EXIT', {function_clause, _}} = (catch to_sets(a)),
%% unordered
- ?line [] = to_sets(empty_set()),
- ?line eval(to_sets(from_term([a])), [from_term(a)]),
- ?line eval(to_sets(from_term([[]],[[atom]])), [set([])]),
+ [] = to_sets(empty_set()),
+ eval(to_sets(from_term([a])), [from_term(a)]),
+ eval(to_sets(from_term([[]],[[atom]])), [set([])]),
- ?line L = [from_term([a,b]),from_term([c,d])],
- ?line eval(to_sets(from_sets(L)), L),
+ L = [from_term([a,b]),from_term([c,d])],
+ eval(to_sets(from_sets(L)), L),
- ?line eval(to_sets(relation([{a,1},{b,2}])),
- [from_term({a,1},{atom,atom}), from_term({b,2},{atom,atom})]),
+ eval(to_sets(relation([{a,1},{b,2}])),
+ [from_term({a,1},{atom,atom}), from_term({b,2},{atom,atom})]),
%% ordered
- ?line O = {from_term(a,atom), from_term({b}, {atom}), set([c,d])},
- ?line eval(to_sets(from_sets(O)), O),
+ O = {from_term(a,atom), from_term({b}, {atom}), set([c,d])},
+ eval(to_sets(from_sets(O)), O),
ok.
-specification(suite) -> [];
-specification(doc) -> [""];
specification(Conf) when is_list(Conf) ->
Fun = {external, fun(I) when is_integer(I) -> true; (_) -> false end},
- ?line [1,2,3] = to_external(specification(Fun, set([a,1,b,2,c,3]))),
+ [1,2,3] = to_external(specification(Fun, set([a,1,b,2,c,3]))),
Fun2 = fun(S) -> is_subset(S, set([1,3,5,7,9])) end,
S2 = from_term([[1],[2],[3],[4],[5],[6],[7]]),
- ?line eval(specification(Fun2, S2), from_term([[1],[3],[5],[7]])),
+ eval(specification(Fun2, S2), from_term([[1],[3],[5],[7]])),
Fun2x = fun([1]) -> true;
([3]) -> true;
(_) -> false
end,
- ?line eval(specification({external,Fun2x}, S2), from_term([[1],[3]])),
+ eval(specification({external,Fun2x}, S2), from_term([[1],[3]])),
Fun3 = fun(_) -> neither_true_nor_false end,
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch specification(Fun3, set([a]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch specification({external, Fun3}, set([a]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch specification(Fun3, from_term([[a]]))),
- ?line {'EXIT', {function_clause, _}} =
+ {'EXIT', {function_clause, _}} =
(catch specification(Fun, a)),
ok.
-union_1(suite) -> [];
-union_1(doc) -> [""];
union_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([], 2),
- ?line {'EXIT', {badarg, _}} = (catch union(ER)),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = empty_set(),
+ ER = relation([], 2),
+ {'EXIT', {badarg, _}} = (catch union(ER)),
+ {'EXIT', {type_mismatch, _}} =
(catch union(relation([{a,b}]), relation([{a,b,c}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch union(from_term([{a,b}]), from_term([{c,[x]}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch union(from_term([{a,b}]), from_term([{c,d}], [{d,r}]))),
- ?line {'EXIT', {badarg, _}} = (catch union(set([a,b,c]))),
- ?line eval(union(E), E),
- ?line eval(union(from_term([[]],[[atom]])), set([])),
- ?line eval(union(from_term([[{a,b},{b,c}],[{b,c}]])),
- relation([{a,b},{b,c}])),
- ?line eval(union(from_term([[1,2,3],[2,3,4],[3,4,5]])),
- set([1,2,3,4,5])),
-
- ?line eval(union(from_term([{[a],[],c}]), from_term([{[],[],q}])),
- from_term([{[a],[],c},{[],[],q}])),
-
- ?line eval(union(E, E), E),
- ?line eval(union(set([a,b]), E), set([a,b])),
- ?line eval(union(E, set([a,b])), set([a,b])),
-
- ?line eval(union(from_term([[a,b]])), from_term([a,b])),
+ {'EXIT', {badarg, _}} = (catch union(set([a,b,c]))),
+ eval(union(E), E),
+ eval(union(from_term([[]],[[atom]])), set([])),
+ eval(union(from_term([[{a,b},{b,c}],[{b,c}]])),
+ relation([{a,b},{b,c}])),
+ eval(union(from_term([[1,2,3],[2,3,4],[3,4,5]])),
+ set([1,2,3,4,5])),
+
+ eval(union(from_term([{[a],[],c}]), from_term([{[],[],q}])),
+ from_term([{[a],[],c},{[],[],q}])),
+
+ eval(union(E, E), E),
+ eval(union(set([a,b]), E), set([a,b])),
+ eval(union(E, set([a,b])), set([a,b])),
+
+ eval(union(from_term([[a,b]])), from_term([a,b])),
ok.
-intersection_1(suite) -> [];
-intersection_1(doc) -> [""];
intersection_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line {'EXIT', {badarg, _}} = (catch intersection(from_term([a,b]))),
- ?line {'EXIT', {badarg, _}} = (catch intersection(E)),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = empty_set(),
+ {'EXIT', {badarg, _}} = (catch intersection(from_term([a,b]))),
+ {'EXIT', {badarg, _}} = (catch intersection(E)),
+ {'EXIT', {type_mismatch, _}} =
(catch intersection(relation([{a,b}]), relation([{a,b,c}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch intersection(relation([{a,b}]), from_term([{a,b}],[{d,r}]))),
- ?line eval(intersection(from_term([[a,b,c],[d,e,f],[g,h,i]])), set([])),
-
- ?line eval(intersection(E, E), E),
- ?line eval(intersection(set([a,b,c]),set([0,b,q])),
- set([b])),
- ?line eval(intersection(set([0,b,q]),set([a,b,c])),
- set([b])),
- ?line eval(intersection(set([a,b,c]),set([a,b,c])),
- set([a,b,c])),
- ?line eval(intersection(set([a,b,d]),set([c,d])),
- set([d])),
+ eval(intersection(from_term([[a,b,c],[d,e,f],[g,h,i]])), set([])),
+
+ eval(intersection(E, E), E),
+ eval(intersection(set([a,b,c]),set([0,b,q])),
+ set([b])),
+ eval(intersection(set([0,b,q]),set([a,b,c])),
+ set([b])),
+ eval(intersection(set([a,b,c]),set([a,b,c])),
+ set([a,b,c])),
+ eval(intersection(set([a,b,d]),set([c,d])),
+ set([d])),
ok.
-difference(suite) -> [];
-difference(doc) -> [""];
difference(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = empty_set(),
+ {'EXIT', {type_mismatch, _}} =
(catch difference(relation([{a,b}]), relation([{a,b,c}]))),
- ?line eval(difference(E, E), E),
- ?line {'EXIT', {type_mismatch, _}} =
+ eval(difference(E, E), E),
+ {'EXIT', {type_mismatch, _}} =
(catch difference(relation([{a,b}]), from_term([{a,c}],[{d,r}]))),
- ?line eval(difference(set([a,b,c,d,f]), set([a,d,e,g])),
- set([b,c,f])),
- ?line eval(difference(set([a,b,c]), set([d,e,f])),
- set([a,b,c])),
- ?line eval(difference(set([a,b,c]), set([a,b,c,d,e,f])),
- set([])),
- ?line eval(difference(set([e,f,g]), set([a,b,c,e])),
- set([f,g])),
- ?line eval(difference(set([a,b,d,e,f]), set([c])),
- set([a,b,d,e,f])),
+ eval(difference(set([a,b,c,d,f]), set([a,d,e,g])),
+ set([b,c,f])),
+ eval(difference(set([a,b,c]), set([d,e,f])),
+ set([a,b,c])),
+ eval(difference(set([a,b,c]), set([a,b,c,d,e,f])),
+ set([])),
+ eval(difference(set([e,f,g]), set([a,b,c,e])),
+ set([f,g])),
+ eval(difference(set([a,b,d,e,f]), set([c])),
+ set([a,b,d,e,f])),
ok.
-symdiff(suite) -> [];
-symdiff(doc) -> [""];
symdiff(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = empty_set(),
+ {'EXIT', {type_mismatch, _}} =
(catch symdiff(relation([{a,b}]), relation([{a,b,c}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch symdiff(relation([{a,b}]), from_term([{a,b}], [{d,r}]))),
- ?line eval(symdiff(E, E), E),
- ?line eval(symdiff(set([a,b,c,d,e,f]), set([0,1,a,c])),
- union(set([b,d,e,f]), set([0,1]))),
- ?line eval(symdiff(set([a,b,c]), set([q,v,w,x,y])),
- union(set([a,b,c]), set([q,v,w,x,y]))),
- ?line eval(symdiff(set([a,b,c,d,e,f]), set([a,b,c])),
- set([d,e,f])),
- ?line eval(symdiff(set([c,e,g,h,i]), set([b,d,f])),
- union(set([c,e,g,h,i]), set([b,d,f]))),
- ?line eval(symdiff(set([c,d,g,h,k,l]),
- set([a,b,e,f,i,j,m,n])),
- union(set([c,d,g,h,k,l]), set([a,b,e,f,i,j,m,n]))),
- ?line eval(symdiff(set([c,d,g,h,k,l]),
- set([d,e,h,i,l,m,n,o,p])),
- union(set([c,g,k]), set([e,i,m,n,o,p]))),
+ eval(symdiff(E, E), E),
+ eval(symdiff(set([a,b,c,d,e,f]), set([0,1,a,c])),
+ union(set([b,d,e,f]), set([0,1]))),
+ eval(symdiff(set([a,b,c]), set([q,v,w,x,y])),
+ union(set([a,b,c]), set([q,v,w,x,y]))),
+ eval(symdiff(set([a,b,c,d,e,f]), set([a,b,c])),
+ set([d,e,f])),
+ eval(symdiff(set([c,e,g,h,i]), set([b,d,f])),
+ union(set([c,e,g,h,i]), set([b,d,f]))),
+ eval(symdiff(set([c,d,g,h,k,l]),
+ set([a,b,e,f,i,j,m,n])),
+ union(set([c,d,g,h,k,l]), set([a,b,e,f,i,j,m,n]))),
+ eval(symdiff(set([c,d,g,h,k,l]),
+ set([d,e,h,i,l,m,n,o,p])),
+ union(set([c,g,k]), set([e,i,m,n,o,p]))),
ok.
-symmetric_partition(suite) -> [];
-symmetric_partition(doc) -> [""];
symmetric_partition(Conf) when is_list(Conf) ->
- ?line E = set([]),
- ?line S1 = set([1,2,3,4]),
- ?line S2 = set([3,4,5,6]),
- ?line S3 = set([3,4]),
- ?line S4 = set([1,2,3,4,5,6]),
- ?line T1 = set([1,2]),
- ?line T2 = set([3,4]),
- ?line T3 = set([5,6]),
- ?line T4 = set([1,2,5,6]),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = set([]),
+ S1 = set([1,2,3,4]),
+ S2 = set([3,4,5,6]),
+ S3 = set([3,4]),
+ S4 = set([1,2,3,4,5,6]),
+ T1 = set([1,2]),
+ T2 = set([3,4]),
+ T3 = set([5,6]),
+ T4 = set([1,2,5,6]),
+ {'EXIT', {type_mismatch, _}} =
(catch symmetric_partition(relation([{a,b}]), relation([{a,b,c}]))),
- ?line {E, E, E} = symmetric_partition(E, E),
- ?line {'EXIT', {type_mismatch, _}} =
+ {E, E, E} = symmetric_partition(E, E),
+ {'EXIT', {type_mismatch, _}} =
(catch symmetric_partition(relation([{a,b}]),
from_term([{a,c}],[{d,r}]))),
- ?line {E, E, S1} = symmetric_partition(E, S1),
- ?line {S1, E, E} = symmetric_partition(S1, E),
- ?line {T1, T2, T3} = symmetric_partition(S1, S2),
- ?line {T3, T2, T1} = symmetric_partition(S2, S1),
- ?line {E, T2, T4} = symmetric_partition(S3, S4),
- ?line {T4, T2, E} = symmetric_partition(S4, S3),
-
- ?line S5 = set([1,3,5]),
- ?line S6 = set([2,4,6,7,8]),
- ?line {S5, E, S6} = symmetric_partition(S5, S6),
- ?line {S6, E, S5} = symmetric_partition(S6, S5),
- ?line EE = empty_set(),
- ?line {EE, EE, EE} = symmetric_partition(EE, EE),
+ {E, E, S1} = symmetric_partition(E, S1),
+ {S1, E, E} = symmetric_partition(S1, E),
+ {T1, T2, T3} = symmetric_partition(S1, S2),
+ {T3, T2, T1} = symmetric_partition(S2, S1),
+ {E, T2, T4} = symmetric_partition(S3, S4),
+ {T4, T2, E} = symmetric_partition(S4, S3),
+
+ S5 = set([1,3,5]),
+ S6 = set([2,4,6,7,8]),
+ {S5, E, S6} = symmetric_partition(S5, S6),
+ {S6, E, S5} = symmetric_partition(S6, S5),
+ EE = empty_set(),
+ {EE, EE, EE} = symmetric_partition(EE, EE),
ok.
-is_sofs_set_1(suite) -> [];
-is_sofs_set_1(doc) -> [""];
is_sofs_set_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line true = is_sofs_set(E),
- ?line true = is_sofs_set(from_term([a])),
- ?line true = is_sofs_set(from_term({a})),
- ?line true = is_sofs_set(from_term(a)),
- ?line false = is_sofs_set(a),
+ E = empty_set(),
+ true = is_sofs_set(E),
+ true = is_sofs_set(from_term([a])),
+ true = is_sofs_set(from_term({a})),
+ true = is_sofs_set(from_term(a)),
+ false = is_sofs_set(a),
ok.
-is_set_1(suite) -> [];
-is_set_1(doc) -> [""];
is_set_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line true = is_set(E),
- ?line true = is_set(from_term([a])),
- ?line false = is_set(from_term({a})),
- ?line false = is_set(from_term(a)),
- ?line {'EXIT', _} = (catch is_set(a)),
-
- ?line true = is_empty_set(E),
- ?line false = is_empty_set(from_term([a])),
- ?line false = is_empty_set(from_term({a})),
- ?line false = is_empty_set(from_term(a)),
- ?line {'EXIT', _} = (catch is_empty_set(a)),
+ E = empty_set(),
+ true = is_set(E),
+ true = is_set(from_term([a])),
+ false = is_set(from_term({a})),
+ false = is_set(from_term(a)),
+ {'EXIT', _} = (catch is_set(a)),
+
+ true = is_empty_set(E),
+ false = is_empty_set(from_term([a])),
+ false = is_empty_set(from_term({a})),
+ false = is_empty_set(from_term(a)),
+ {'EXIT', _} = (catch is_empty_set(a)),
ok.
-is_equal(suite) -> [];
-is_equal(doc) -> [""];
is_equal(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line true = is_equal(E, E),
- ?line false = is_equal(from_term([a]), E),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = empty_set(),
+ true = is_equal(E, E),
+ false = is_equal(from_term([a]), E),
+ {'EXIT', {type_mismatch, _}} =
(catch is_equal(intersection(set([a]), set([b])),
intersection(from_term([{a}]), from_term([{b}])))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch is_equal(from_term([],[{[atom],atom,[atom]}]),
from_term([],[{[atom],{atom},[atom]}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch is_equal(set([a]), from_term([a],[type]))),
- ?line E2 = from_sets({from_term(a,atom)}),
- ?line true = is_equal(E2, E2),
- ?line true = is_equal(from_term({a}, {atom}), E2),
- ?line false = is_equal(from_term([{[a],[],c}]),
- from_term([{[],[],q}])),
+ E2 = from_sets({from_term(a,atom)}),
+ true = is_equal(E2, E2),
+ true = is_equal(from_term({a}, {atom}), E2),
+ false = is_equal(from_term([{[a],[],c}]),
+ from_term([{[],[],q}])),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch is_equal(E, E2)),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch is_equal(E2, E)),
- ?line true = is_equal(from_term({[],a,[]},{[atom],atom,[atom]}),
- from_term({[],a,[]},{[atom],atom,[atom]})),
- ?line {'EXIT', {type_mismatch, _}} =
+ true = is_equal(from_term({[],a,[]},{[atom],atom,[atom]}),
+ from_term({[],a,[]},{[atom],atom,[atom]})),
+ {'EXIT', {type_mismatch, _}} =
(catch is_equal(from_term({[],a,[]},{[atom],atom,[atom]}),
from_term({[],{a},[]},{[atom],{atom},[atom]}))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch is_equal(from_term({a}), from_term({a},{type}))),
ok.
-is_subset(suite) -> [];
-is_subset(doc) -> [""];
is_subset(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line true = is_subset(E, E),
- ?line true = is_subset(set([a,c,e]), set([a,b,c,d,e])),
- ?line false = is_subset(set([a,b]), E),
- ?line false = is_subset(set([d,e,f]), set([b,c,d,e])),
- ?line false = is_subset(set([a,b,c]), set([b,c])),
- ?line false = is_subset(set([b,c]), set([a,c])),
- ?line false = is_subset(set([d,e]), set([a,b])),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = empty_set(),
+ true = is_subset(E, E),
+ true = is_subset(set([a,c,e]), set([a,b,c,d,e])),
+ false = is_subset(set([a,b]), E),
+ false = is_subset(set([d,e,f]), set([b,c,d,e])),
+ false = is_subset(set([a,b,c]), set([b,c])),
+ false = is_subset(set([b,c]), set([a,c])),
+ false = is_subset(set([d,e]), set([a,b])),
+ {'EXIT', {type_mismatch, _}} =
(catch is_subset(intersection(set([a]), set([b])),
intersection(from_term([{a}]), from_term([{b}])))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch is_subset(set([a]), from_term([a,b], [at]))),
ok.
-is_a_function_1(suite) -> [];
-is_a_function_1(doc) -> [""];
is_a_function_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([], 2),
- ?line {'EXIT', {badarg, _}} = (catch is_a_function(set([a,b]))),
- ?line true = is_a_function(E),
- ?line true = is_a_function(ER),
- ?line true = is_a_function(relation([])),
- ?line true = is_a_function(relation([],2)),
- ?line true = is_a_function(relation([{a,b},{b,c}])),
- ?line false = is_a_function(relation([{a,b},{b,c},{b,d},{e,f}])),
- ?line IS = relation([{{a,b},c},{{a,b},d}]),
- ?line false = is_a_function(IS),
+ E = empty_set(),
+ ER = relation([], 2),
+ {'EXIT', {badarg, _}} = (catch is_a_function(set([a,b]))),
+ true = is_a_function(E),
+ true = is_a_function(ER),
+ true = is_a_function(relation([])),
+ true = is_a_function(relation([],2)),
+ true = is_a_function(relation([{a,b},{b,c}])),
+ false = is_a_function(relation([{a,b},{b,c},{b,d},{e,f}])),
+ IS = relation([{{a,b},c},{{a,b},d}]),
+ false = is_a_function(IS),
F = 0.0, I = round(F),
- ?line FR = relation([{I,F},{F,1}]),
+ FR = relation([{I,F},{F,1}]),
if
F == I -> % term ordering
false = is_a_function(FR);
@@ -1280,343 +1229,315 @@ is_a_function_1(Conf) when is_list(Conf) ->
end,
ok.
-is_disjoint(suite) -> [];
-is_disjoint(doc) -> [""];
is_disjoint(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = empty_set(),
+ {'EXIT', {type_mismatch, _}} =
(catch is_disjoint(relation([{a,1}]), set([a,b]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch is_disjoint(set([a]), from_term([a],[mota]))),
- ?line true = is_disjoint(E, E),
- ?line false = is_disjoint(set([a,b,c]),set([b,c,d])),
- ?line false = is_disjoint(set([b,c,d]),set([a,b,c])),
- ?line true = is_disjoint(set([a,c,e]),set([b,d,f])),
+ true = is_disjoint(E, E),
+ false = is_disjoint(set([a,b,c]),set([b,c,d])),
+ false = is_disjoint(set([b,c,d]),set([a,b,c])),
+ true = is_disjoint(set([a,c,e]),set([b,d,f])),
ok.
-join(suite) -> [];
-join(doc) -> [""];
join(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
-
- ?line {'EXIT', {badarg, _}} = (catch join(relation([{a,1}]), 3, E, 5)),
- ?line {'EXIT', {badarg, _}} = (catch join(E, 1, relation([{a,1}]), 3)),
- ?line {'EXIT', {badarg, _}} = (catch join(E, 1, from_term([a]), 1)),
-
- ?line eval(join(E, 1, E, 2), E),
- ?line eval(join(E, 1, from_term([{{a},b}]), 2), E),
- ?line eval(join(from_term([{{a},b}]), 2, E, 1), E),
- ?line eval(join(from_term([{{a},b,e}]), 2, from_term([{c,{d}}]), 1),
- from_term([], [{{atom},atom,atom,{atom}}])),
- ?line eval(join(relation([{a}]), 1, relation([{1,a},{2,a}]), 2),
- relation([{a,1},{a,2}])),
- ?line eval(join(relation([{a,b,c},{b,c,d}]), 2,
- relation([{1,b},{2,a},{3,c}]), 2),
- relation([{a,b,c,1},{b,c,d,3}])),
- ?line eval(join(relation([{1,a,aa},{1,b,bb},{1,c,cc},{2,a,aa},{2,b,bb}]),
- 1,
- relation([{1,c,cc},{1,d,dd},{1,e,ee},{2,c,cc},{2,d,dd}]),
- 1),
- relation([{1,a,aa,c,cc},{1,a,aa,d,dd},{1,a,aa,e,ee},{1,b,bb,c,cc},
- {1,b,bb,d,dd},{1,b,bb,e,ee},{1,c,cc,c,cc},{1,c,cc,d,dd},
- {1,c,cc,e,ee},{2,a,aa,c,cc},{2,a,aa,d,dd},{2,b,bb,c,cc},
- {2,b,bb,d,dd}])),
+ E = empty_set(),
+
+ {'EXIT', {badarg, _}} = (catch join(relation([{a,1}]), 3, E, 5)),
+ {'EXIT', {badarg, _}} = (catch join(E, 1, relation([{a,1}]), 3)),
+ {'EXIT', {badarg, _}} = (catch join(E, 1, from_term([a]), 1)),
+
+ eval(join(E, 1, E, 2), E),
+ eval(join(E, 1, from_term([{{a},b}]), 2), E),
+ eval(join(from_term([{{a},b}]), 2, E, 1), E),
+ eval(join(from_term([{{a},b,e}]), 2, from_term([{c,{d}}]), 1),
+ from_term([], [{{atom},atom,atom,{atom}}])),
+ eval(join(relation([{a}]), 1, relation([{1,a},{2,a}]), 2),
+ relation([{a,1},{a,2}])),
+ eval(join(relation([{a,b,c},{b,c,d}]), 2,
+ relation([{1,b},{2,a},{3,c}]), 2),
+ relation([{a,b,c,1},{b,c,d,3}])),
+ eval(join(relation([{1,a,aa},{1,b,bb},{1,c,cc},{2,a,aa},{2,b,bb}]),
+ 1,
+ relation([{1,c,cc},{1,d,dd},{1,e,ee},{2,c,cc},{2,d,dd}]),
+ 1),
+ relation([{1,a,aa,c,cc},{1,a,aa,d,dd},{1,a,aa,e,ee},{1,b,bb,c,cc},
+ {1,b,bb,d,dd},{1,b,bb,e,ee},{1,c,cc,c,cc},{1,c,cc,d,dd},
+ {1,c,cc,e,ee},{2,a,aa,c,cc},{2,a,aa,d,dd},{2,b,bb,c,cc},
+ {2,b,bb,d,dd}])),
R1 = relation([{a,b},{b,c}]),
R2 = relation([{b,1},{a,2},{c,3},{c,4}]),
- ?line eval(join(R1, 1, R2, 1), from_term([{a,b,2},{b,c,1}])),
- ?line eval(join(R1, 2, R2, 1), from_term([{a,b,1},{b,c,3},{b,c,4}])),
- ?line eval(join(R1, 1, converse(R2), 2),
- from_term([{a,b,2},{b,c,1}])),
- ?line eval(join(R1, 2, converse(R2), 2),
- from_term([{a,b,1},{b,c,3},{b,c,4}])),
+ eval(join(R1, 1, R2, 1), from_term([{a,b,2},{b,c,1}])),
+ eval(join(R1, 2, R2, 1), from_term([{a,b,1},{b,c,3},{b,c,4}])),
+ eval(join(R1, 1, converse(R2), 2),
+ from_term([{a,b,2},{b,c,1}])),
+ eval(join(R1, 2, converse(R2), 2),
+ from_term([{a,b,1},{b,c,3},{b,c,4}])),
ok.
-canonical(suite) -> [];
-canonical(doc) -> [""];
canonical(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ {'EXIT', {badarg, _}} =
(catch canonical_relation(set([a,b]))),
- ?line eval(canonical_relation(E), E),
- ?line eval(canonical_relation(from_term([[]])), E),
- ?line eval(canonical_relation(from_term([[a,b,c]])),
- from_term([{a,[a,b,c]},{b,[a,b,c]},{c,[a,b,c]}])),
+ eval(canonical_relation(E), E),
+ eval(canonical_relation(from_term([[]])), E),
+ eval(canonical_relation(from_term([[a,b,c]])),
+ from_term([{a,[a,b,c]},{b,[a,b,c]},{c,[a,b,c]}])),
ok.
-relation_to_family_1(suite) -> [];
-relation_to_family_1(doc) -> [""];
relation_to_family_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line EF = family([]),
- ?line eval(relation_to_family(E), E),
- ?line eval(relation_to_family(relation([])), EF),
- ?line eval(relation_to_family(relation([], 2)), EF),
- ?line R = relation([{b,1},{c,7},{c,9},{c,11}]),
- ?line F = family([{b,[1]},{c,[7,9,11]}]),
- ?line eval(relation_to_family(R), F),
- ?line eval(sofs:rel2fam(R), F),
- ?line {'EXIT', {badarg, _}} = (catch relation_to_family(set([a]))),
+ E = empty_set(),
+ EF = family([]),
+ eval(relation_to_family(E), E),
+ eval(relation_to_family(relation([])), EF),
+ eval(relation_to_family(relation([], 2)), EF),
+ R = relation([{b,1},{c,7},{c,9},{c,11}]),
+ F = family([{b,[1]},{c,[7,9,11]}]),
+ eval(relation_to_family(R), F),
+ eval(sofs:rel2fam(R), F),
+ {'EXIT', {badarg, _}} = (catch relation_to_family(set([a]))),
ok.
-domain_1(suite) -> [];
-domain_1(doc) -> [""];
domain_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line {'EXIT', {badarg, _}} = (catch domain(relation([],3))),
- ?line eval(domain(E), E),
- ?line eval(domain(ER), set([])),
- ?line eval(domain(relation([{1,a},{1,b},{2,a},{2,b}])), set([1,2])),
- ?line eval(domain(relation([{a,1},{b,2},{c,3}])), set([a,b,c])),
- ?line eval(field(relation([{a,1},{b,2},{c,3}])),
- set([a,b,c,1,2,3])),
+ E = empty_set(),
+ ER = relation([]),
+ {'EXIT', {badarg, _}} = (catch domain(relation([],3))),
+ eval(domain(E), E),
+ eval(domain(ER), set([])),
+ eval(domain(relation([{1,a},{1,b},{2,a},{2,b}])), set([1,2])),
+ eval(domain(relation([{a,1},{b,2},{c,3}])), set([a,b,c])),
+ eval(field(relation([{a,1},{b,2},{c,3}])),
+ set([a,b,c,1,2,3])),
F = 0.0, I = round(F),
- ?line FR = relation([{I,a},{F,b}]),
+ FR = relation([{I,a},{F,b}]),
if
F == I -> % term ordering
- ?line true = (1 =:= no_elements(domain(FR)));
+ true = (1 =:= no_elements(domain(FR)));
true ->
- ?line true = (2 =:= no_elements(domain(FR)))
+ true = (2 =:= no_elements(domain(FR)))
end,
ok.
-range_1(suite) -> [];
-range_1(doc) -> [""];
range_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line {'EXIT', {badarg, _}} = (catch range(relation([],3))),
- ?line eval(range(E), E),
- ?line eval(range(ER), set([])),
- ?line eval(range(relation([{1,a},{1,b},{2,a},{2,b}])), set([a,b])),
- ?line eval(range(relation([{a,1},{b,2},{c,3}])), set([1,2,3])),
+ E = empty_set(),
+ ER = relation([]),
+ {'EXIT', {badarg, _}} = (catch range(relation([],3))),
+ eval(range(E), E),
+ eval(range(ER), set([])),
+ eval(range(relation([{1,a},{1,b},{2,a},{2,b}])), set([a,b])),
+ eval(range(relation([{a,1},{b,2},{c,3}])), set([1,2,3])),
ok.
-
-inverse_1(suite) -> [];
-inverse_1(doc) -> [""];
+
inverse_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line {'EXIT', {badarg, _}} = (catch inverse(relation([],3))),
- ?line {'EXIT', {bad_function, _}} =
+ E = empty_set(),
+ ER = relation([]),
+ {'EXIT', {badarg, _}} = (catch inverse(relation([],3))),
+ {'EXIT', {bad_function, _}} =
(catch inverse(relation([{1,a},{1,b}]))),
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
(catch inverse(relation([{1,a},{2,a}]))),
- ?line eval(inverse(E), E),
- ?line eval(inverse(ER), ER),
- ?line eval(inverse(relation([{a,1},{b,2},{c,3}])),
- relation([{1,a},{2,b},{3,c}])),
+ eval(inverse(E), E),
+ eval(inverse(ER), ER),
+ eval(inverse(relation([{a,1},{b,2},{c,3}])),
+ relation([{1,a},{2,b},{3,c}])),
F = 0.0, I = round(F),
- ?line FR = relation([{I,a},{F,b}]),
+ FR = relation([{I,a},{F,b}]),
if
F == I -> % term ordering
- ?line {'EXIT', {bad_function, _}} = (catch inverse(FR));
+ {'EXIT', {bad_function, _}} = (catch inverse(FR));
true ->
- ?line eval(inverse(FR), relation([{a,I},{b,F}]))
+ eval(inverse(FR), relation([{a,I},{b,F}]))
end,
ok.
-
-converse_1(suite) -> [];
-converse_1(doc) -> [""];
+
converse_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line {'EXIT', {badarg, _}} = (catch converse(relation([],3))),
- ?line eval(converse(ER), ER),
- ?line eval(converse(E), E),
- ?line eval(converse(relation([{a,1},{b,2},{c,3}])),
- relation([{1,a},{2,b},{3,c}])),
- ?line eval(converse(relation([{1,a},{1,b}])),
- relation([{a,1},{b,1}])),
- ?line eval(converse(relation([{1,a},{2,a}])),
- relation([{a,1},{a,2}])),
+ E = empty_set(),
+ ER = relation([]),
+ {'EXIT', {badarg, _}} = (catch converse(relation([],3))),
+ eval(converse(ER), ER),
+ eval(converse(E), E),
+ eval(converse(relation([{a,1},{b,2},{c,3}])),
+ relation([{1,a},{2,b},{3,c}])),
+ eval(converse(relation([{1,a},{1,b}])),
+ relation([{a,1},{b,1}])),
+ eval(converse(relation([{1,a},{2,a}])),
+ relation([{a,1},{a,2}])),
ok.
-
-no_elements_1(suite) -> [];
-no_elements_1(doc) -> [""];
+
no_elements_1(Conf) when is_list(Conf) ->
- ?line 0 = no_elements(empty_set()),
- ?line 0 = no_elements(set([])),
- ?line 1 = no_elements(from_term([a])),
- ?line 10 = no_elements(from_term(lists:seq(1,10))),
- ?line 3 = no_elements(from_term({a,b,c},{atom,atom,atom})),
- ?line {'EXIT', {badarg, _}} = (catch no_elements(from_term(a))),
- ?line {'EXIT', {function_clause, _}} = (catch no_elements(a)),
+ 0 = no_elements(empty_set()),
+ 0 = no_elements(set([])),
+ 1 = no_elements(from_term([a])),
+ 10 = no_elements(from_term(lists:seq(1,10))),
+ 3 = no_elements(from_term({a,b,c},{atom,atom,atom})),
+ {'EXIT', {badarg, _}} = (catch no_elements(from_term(a))),
+ {'EXIT', {function_clause, _}} = (catch no_elements(a)),
ok.
-image(suite) -> [];
-image(doc) -> [""];
image(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line eval(image(E, E), E),
- ?line eval(image(ER, E), set([])),
- ?line eval(image(relation([{a,1},{b,2},{c,3},{f,6}]), set([a,b,c,d,f])),
- set([1,2,3,6])),
- ?line eval(image(relation([{a,1},{b,2},{c,3},{d,4},{r,17}]),
- set([b,c,q,r])),
- set([2,3,17])),
- ?line eval(image(from_term([{[a],{1}},{[b],{2}}]), from_term([[a]])),
- from_term([{1}])),
- ?line eval(image(relation([{1,a},{2,a},{3,a},{4,b},{2,b}]), set([1,2,4])),
- set([a,b])),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ ER = relation([]),
+ eval(image(E, E), E),
+ eval(image(ER, E), set([])),
+ eval(image(relation([{a,1},{b,2},{c,3},{f,6}]), set([a,b,c,d,f])),
+ set([1,2,3,6])),
+ eval(image(relation([{a,1},{b,2},{c,3},{d,4},{r,17}]),
+ set([b,c,q,r])),
+ set([2,3,17])),
+ eval(image(from_term([{[a],{1}},{[b],{2}}]), from_term([[a]])),
+ from_term([{1}])),
+ eval(image(relation([{1,a},{2,a},{3,a},{4,b},{2,b}]), set([1,2,4])),
+ set([a,b])),
+ {'EXIT', {badarg, _}} =
(catch image(from_term([a,b]), E)),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch image(from_term([{[a],1}]), set([[a]]))),
ok.
-inverse_image(suite) -> [];
-inverse_image(doc) -> [""];
inverse_image(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line eval(inverse_image(E, E), E),
- ?line eval(inverse_image(ER, E), set([])),
- ?line eval(inverse_image(converse(relation([{a,1},{b,2},{c,3},{f,6}])),
- set([a,b,c,d,f])),
- set([1,2,3,6])),
- ?line eval(inverse_image(converse(relation([{a,1},{b,2},{c,3},
- {d,4},{r,17}])),
- set([b,c,q,r])),
- set([2,3,17])),
- ?line eval(inverse_image(converse(from_term([{[a],{1}},{[b],{2}}])),
- from_term([[a]])),
- from_term([{1}])),
- ?line eval(inverse_image(converse(relation([{1,a},{2,a},
- {3,a},{4,b},{2,b}])),
- set([1,2,4])),
- set([a,b])),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ ER = relation([]),
+ eval(inverse_image(E, E), E),
+ eval(inverse_image(ER, E), set([])),
+ eval(inverse_image(converse(relation([{a,1},{b,2},{c,3},{f,6}])),
+ set([a,b,c,d,f])),
+ set([1,2,3,6])),
+ eval(inverse_image(converse(relation([{a,1},{b,2},{c,3},
+ {d,4},{r,17}])),
+ set([b,c,q,r])),
+ set([2,3,17])),
+ eval(inverse_image(converse(from_term([{[a],{1}},{[b],{2}}])),
+ from_term([[a]])),
+ from_term([{1}])),
+ eval(inverse_image(converse(relation([{1,a},{2,a},
+ {3,a},{4,b},{2,b}])),
+ set([1,2,4])),
+ set([a,b])),
+ {'EXIT', {badarg, _}} =
(catch inverse_image(from_term([a,b]), E)),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch inverse_image(converse(from_term([{[a],1}])), set([[a]]))),
ok.
-composite_1(suite) -> [];
-composite_1(doc) -> [""];
composite_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line EF = a_function([]),
- ?line eval(composite(E, E), E),
- ?line eval(composite(E, a_function([{a,b}])), E),
- ?line eval(composite(relation([{a,b}]), E), E),
- ?line {'EXIT', {bad_function, _}} =
+ E = empty_set(),
+ EF = a_function([]),
+ eval(composite(E, E), E),
+ eval(composite(E, a_function([{a,b}])), E),
+ eval(composite(relation([{a,b}]), E), E),
+ {'EXIT', {bad_function, _}} =
(catch composite(EF, relation([{a,b},{a,c}]))),
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
(catch composite(a_function([{b,a}]), EF)),
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
(catch composite(relation([{1,a},{2,b},{2,a}]),
a_function([{a,1},{b,3}]))),
- ?line {'EXIT', {bad_function, _}} =
- (catch composite(a_function([{1,a},{2,b}]), a_function([{b,3}]))),
- ?line eval(composite(EF, EF), EF),
- ?line eval(composite(a_function([{b,a}]), from_term([{a,{b,c}}])),
- from_term([{b,{b,c}}])),
- ?line eval(composite(a_function([{q,1},{z,2}]),
- a_function([{1,a},{2,a}])),
- a_function([{q,a},{z,a}])),
- ?line eval(composite(a_function([{a,0},{b,0},{c,1},{d,1},{e,2},{f,3}]),
- a_function([{0,p},{1,q},{2,r},{3,w},{4,aa}])),
- a_function([{c,q},{d,q},{f,w},{e,r},{a,p},{b,p}])),
- ?line eval(composite(a_function([{1,c}]),
- a_function([{a,1},{b,3},{c,4}])),
- a_function([{1,4}])),
- ?line {'EXIT', {bad_function, _}} =
+ {'EXIT', {bad_function, _}} =
+ (catch composite(a_function([{1,a},{2,b}]), a_function([{b,3}]))),
+ eval(composite(EF, EF), EF),
+ eval(composite(a_function([{b,a}]), from_term([{a,{b,c}}])),
+ from_term([{b,{b,c}}])),
+ eval(composite(a_function([{q,1},{z,2}]),
+ a_function([{1,a},{2,a}])),
+ a_function([{q,a},{z,a}])),
+ eval(composite(a_function([{a,0},{b,0},{c,1},{d,1},{e,2},{f,3}]),
+ a_function([{0,p},{1,q},{2,r},{3,w},{4,aa}])),
+ a_function([{c,q},{d,q},{f,w},{e,r},{a,p},{b,p}])),
+ eval(composite(a_function([{1,c}]),
+ a_function([{a,1},{b,3},{c,4}])),
+ a_function([{1,4}])),
+ {'EXIT', {bad_function, _}} =
(catch composite(a_function([{1,a},{2,b}]),
a_function([{a,1},{c,3}]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch composite(from_term([a,b]), E)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch composite(E, from_term([a,b]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch composite(from_term([{a,b}]), from_term([{{a},b}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch composite(from_term([{a,b}]),
from_term([{b,c}], [{d,r}]))),
F = 0.0, I = round(F),
- ?line FR1 = relation([{1,c}]),
- ?line FR2 = relation([{I,1},{F,3},{c,4}]),
+ FR1 = relation([{1,c}]),
+ FR2 = relation([{I,1},{F,3},{c,4}]),
if
F == I -> % term ordering
- ?line {'EXIT', {bad_function, _}} = (catch composite(FR1, FR2));
+ {'EXIT', {bad_function, _}} = (catch composite(FR1, FR2));
true ->
- ?line eval(composite(FR1, FR2), a_function([{1,4}]))
+ eval(composite(FR1, FR2), a_function([{1,4}]))
end,
ok.
-relative_product_1(suite) -> [];
-relative_product_1(doc) -> [""];
relative_product_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line eval(relative_product1(E, E), E),
- ?line eval(relative_product1(E, relation([{a,b}])), E),
- ?line eval(relative_product1(relation([{a,b}]), E), E),
- ?line eval(relative_product1(relation([{a,b}]), from_term([{a,{b,c}}])),
- from_term([{b,{b,c}}])),
- ?line eval(relative_product1(relation([{1,z},{1,q},{2,z}]),
- relation([{1,a},{1,b},{2,a}])),
- relation([{q,a},{q,b},{z,a},{z,b}])),
- ?line eval(relative_product1(relation([{0,a},{0,b},{1,c},
- {1,d},{2,e},{3,f}]),
- relation([{1,q},{3,w}])),
- relation([{c,q},{d,q},{f,w}])),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ ER = relation([]),
+ eval(relative_product1(E, E), E),
+ eval(relative_product1(E, relation([{a,b}])), E),
+ eval(relative_product1(relation([{a,b}]), E), E),
+ eval(relative_product1(relation([{a,b}]), from_term([{a,{b,c}}])),
+ from_term([{b,{b,c}}])),
+ eval(relative_product1(relation([{1,z},{1,q},{2,z}]),
+ relation([{1,a},{1,b},{2,a}])),
+ relation([{q,a},{q,b},{z,a},{z,b}])),
+ eval(relative_product1(relation([{0,a},{0,b},{1,c},
+ {1,d},{2,e},{3,f}]),
+ relation([{1,q},{3,w}])),
+ relation([{c,q},{d,q},{f,w}])),
+ {'EXIT', {badarg, _}} =
(catch relative_product1(from_term([a,b]), ER)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch relative_product1(ER, from_term([a,b]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch relative_product1(from_term([{a,b}]), from_term([{{a},b}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch relative_product1(from_term([{a,b}]),
from_term([{b,c}], [{d,r}]))),
ok.
-relative_product_2(suite) -> [];
-relative_product_2(doc) -> [""];
relative_product_2(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
+ E = empty_set(),
+ ER = relation([]),
- ?line {'EXIT', {badarg, _}} = (catch relative_product({from_term([a,b])})),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {badarg, _}} = (catch relative_product({from_term([a,b])})),
+ {'EXIT', {type_mismatch, _}} =
(catch relative_product({from_term([{a,b}]), from_term([{{a},b}])})),
- ?line {'EXIT', {badarg, _}} = (catch relative_product({})),
- ?line true = is_equal(relative_product({ER}),
- from_term([], [{atom,{atom}}])),
- ?line eval(relative_product({relation([{a,b},{c,a}]),
- relation([{a,1},{a,2}]),
- relation([{a,aa},{c,1}])}),
- from_term([{a,{b,1,aa}},{a,{b,2,aa}}])),
- ?line eval(relative_product({relation([{a,b}])}, E), E),
- ?line eval(relative_product({E}, relation([{a,b}])), E),
- ?line eval(relative_product({E,from_term([], [{{atom,atom,atom},atom}])}),
- E),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} = (catch relative_product({})),
+ true = is_equal(relative_product({ER}),
+ from_term([], [{atom,{atom}}])),
+ eval(relative_product({relation([{a,b},{c,a}]),
+ relation([{a,1},{a,2}]),
+ relation([{a,aa},{c,1}])}),
+ from_term([{a,{b,1,aa}},{a,{b,2,aa}}])),
+ eval(relative_product({relation([{a,b}])}, E), E),
+ eval(relative_product({E}, relation([{a,b}])), E),
+ eval(relative_product({E,from_term([], [{{atom,atom,atom},atom}])}),
+ E),
+ {'EXIT', {badarg, _}} =
(catch relative_product({from_term([a,b])}, E)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch relative_product({relation([])}, set([]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch relative_product({from_term([{a,b}]),
from_term([{{a},b}])}, ER)),
- ?line {'EXIT', {badarg, _}} = (catch relative_product({}, ER)),
- ?line relprod2({relation([{a,b}])}, from_term([],[{{atom},atom}]), ER),
- ?line relprod2({relation([{a,b}]),relation([{a,1}])},
- from_term([{{b,1},{tjo,hej,sa}}]),
- from_term([{a,{tjo,hej,sa}}])),
- ?line relprod2({relation([{a,b}]), ER}, from_term([{{a,b},b}]), ER),
- ?line relprod2({relation([{a,b},{c,a}]),
- relation([{a,1},{a,2}])},
- from_term([{{b,1},b1},{{b,2},b2}]),
- relation([{a,b1},{a,b2}])),
- ?line eval(relative_product({relation([{a,b}]), ER}),
- from_term([],[{atom,{atom,atom}}])),
- ?line eval(relative_product({from_term([{{a,[a,b]},[a]}]),
- from_term([{{a,[a,b]},[[a,b]]}])}),
- from_term([{{a,[a,b]},{[a],[[a,b]]}}])),
+ {'EXIT', {badarg, _}} = (catch relative_product({}, ER)),
+ relprod2({relation([{a,b}])}, from_term([],[{{atom},atom}]), ER),
+ relprod2({relation([{a,b}]),relation([{a,1}])},
+ from_term([{{b,1},{tjo,hej,sa}}]),
+ from_term([{a,{tjo,hej,sa}}])),
+ relprod2({relation([{a,b}]), ER}, from_term([{{a,b},b}]), ER),
+ relprod2({relation([{a,b},{c,a}]),
+ relation([{a,1},{a,2}])},
+ from_term([{{b,1},b1},{{b,2},b2}]),
+ relation([{a,b1},{a,b2}])),
+ eval(relative_product({relation([{a,b}]), ER}),
+ from_term([],[{atom,{atom,atom}}])),
+ eval(relative_product({from_term([{{a,[a,b]},[a]}]),
+ from_term([{{a,[a,b]},[[a,b]]}])}),
+ from_term([{{a,[a,b]},{[a],[[a,b]]}}])),
ok.
relprod2(A1T, A2, R) ->
@@ -1624,219 +1545,213 @@ relprod2(A1T, A2, R) ->
eval(relative_product(A1T, A2), R),
eval(relative_product(tuple_to_list(A1T), A2), R).
-product_1(suite) -> [];
-product_1(doc) -> [""];
product_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line eval(product(E, E), E),
- ?line eval(product(relation([]), E), E),
- ?line eval(product(E, relation([])), E),
- ?line eval(product(relation([{a,b}]),relation([{c,d}])),
- from_term([{{a,b},{c,d}}],[{{atom,atom},{atom,atom}}])),
-
- ?line eval(product({E, set([a,b,c])}), E),
- ?line eval(product({set([a,b,c]), E}), E),
- ?line eval(product({set([a,b,c]), E, E}), E),
- ?line eval(product({E,E}), E),
- ?line eval(product({set([a,b]),set([1,2])}),
- relation([{a,1},{a,2},{b,1},{b,2}])),
- ?line eval(product({from_term([a,b]), from_term([{a,b},{c,d}]),
- from_term([1])}),
- from_term([{a,{a,b},1},{a,{c,d},1},{b,{a,b},1},{b,{c,d},1}])),
- ?line {'EXIT', {badarg, _}} = (catch product({})),
- ?line {'EXIT', {badarg, _}} = (catch product({foo})),
- ?line eval(product({E}), E),
- ?line eval(product({E, E}), E),
- ?line eval(product(set([a,b]), set([1,2])),
- relation([{a,1},{a,2},{b,1},{b,2}])),
- ?line eval(product({relation([]), E}), E),
+ E = empty_set(),
+ eval(product(E, E), E),
+ eval(product(relation([]), E), E),
+ eval(product(E, relation([])), E),
+ eval(product(relation([{a,b}]),relation([{c,d}])),
+ from_term([{{a,b},{c,d}}],[{{atom,atom},{atom,atom}}])),
+
+ eval(product({E, set([a,b,c])}), E),
+ eval(product({set([a,b,c]), E}), E),
+ eval(product({set([a,b,c]), E, E}), E),
+ eval(product({E,E}), E),
+ eval(product({set([a,b]),set([1,2])}),
+ relation([{a,1},{a,2},{b,1},{b,2}])),
+ eval(product({from_term([a,b]), from_term([{a,b},{c,d}]),
+ from_term([1])}),
+ from_term([{a,{a,b},1},{a,{c,d},1},{b,{a,b},1},{b,{c,d},1}])),
+ {'EXIT', {badarg, _}} = (catch product({})),
+ {'EXIT', {badarg, _}} = (catch product({foo})),
+ eval(product({E}), E),
+ eval(product({E, E}), E),
+ eval(product(set([a,b]), set([1,2])),
+ relation([{a,1},{a,2},{b,1},{b,2}])),
+ eval(product({relation([]), E}), E),
ok.
-partition_1(suite) -> [];
-partition_1(doc) -> [""];
partition_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line Id = fun(A) -> A end,
- ?line S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
- ?line eval(partition(1, E), E),
- ?line eval(partition(2, E), E),
- ?line eval(partition(1, ER), from_term([], [type(ER)])),
- ?line eval(partition(2, ER), from_term([], [type(ER)])),
- ?line eval(partition(1, relation([{1,a},{1,b},{2,c},{2,d}])),
- from_term([[{1,a},{1,b}],[{2,c},{2,d}]])),
- ?line eval(partition(2, relation([{1,a},{1,b},{2,a},{2,b},{3,c}])),
- from_term([[{1,a},{2,a}],[{1,b},{2,b}],[{3,c}]])),
- ?line eval(partition(2, relation([{1,a}])), from_term([[{1,a}]])),
- ?line eval(partition(2, relation([{1,a},{2,b}])),
- from_term([[{1,a}],[{2,b}]])),
- ?line eval(partition(2, relation([{1,a},{2,a},{3,a}])),
- from_term([[{1,a},{2,a},{3,a}]])),
- ?line eval(partition(2, relation([{1,b},{2,a}])), % OTP-4516
- from_term([[{1,b}],[{2,a}]])),
- ?line eval(union(partition(Id, S1)), S1),
- ?line eval(partition({external, fun({A,{B,_}}) -> {A,B} end},
- from_term([{a,{b,c}},{b,{c,d}},{a,{b,f}}])),
- from_term([[{a,{b,c}},{a,{b,f}}],[{b,{c,d}}]])),
+ E = empty_set(),
+ ER = relation([]),
+ Id = fun(A) -> A end,
+ S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
+ eval(partition(1, E), E),
+ eval(partition(2, E), E),
+ eval(partition(1, ER), from_term([], [type(ER)])),
+ eval(partition(2, ER), from_term([], [type(ER)])),
+ eval(partition(1, relation([{1,a},{1,b},{2,c},{2,d}])),
+ from_term([[{1,a},{1,b}],[{2,c},{2,d}]])),
+ eval(partition(2, relation([{1,a},{1,b},{2,a},{2,b},{3,c}])),
+ from_term([[{1,a},{2,a}],[{1,b},{2,b}],[{3,c}]])),
+ eval(partition(2, relation([{1,a}])), from_term([[{1,a}]])),
+ eval(partition(2, relation([{1,a},{2,b}])),
+ from_term([[{1,a}],[{2,b}]])),
+ eval(partition(2, relation([{1,a},{2,a},{3,a}])),
+ from_term([[{1,a},{2,a},{3,a}]])),
+ eval(partition(2, relation([{1,b},{2,a}])), % OTP-4516
+ from_term([[{1,b}],[{2,a}]])),
+ eval(union(partition(Id, S1)), S1),
+ eval(partition({external, fun({A,{B,_}}) -> {A,B} end},
+ from_term([{a,{b,c}},{b,{c,d}},{a,{b,f}}])),
+ from_term([[{a,{b,c}},{a,{b,f}}],[{b,{c,d}}]])),
F = 0.0, I = round(F),
- ?line FR = relation([{I,a},{F,b}]),
+ FR = relation([{I,a},{F,b}]),
if
F == I -> % term ordering
- ?line eval(partition(1, FR), from_term([[{I,a},{F,b}]]));
+ eval(partition(1, FR), from_term([[{I,a},{F,b}]]));
true ->
- ?line eval(partition(1, FR), from_term([[{I,a}],[{F,b}]]))
+ eval(partition(1, FR), from_term([[{I,a}],[{F,b}]]))
end,
- ?line {'EXIT', {badarg, _}} = (catch partition(2, set([a]))),
- ?line {'EXIT', {badarg, _}} = (catch partition(1, set([a]))),
- ?line eval(partition(Id, set([a])), from_term([[a]])),
-
- ?line eval(partition(E), E),
- ?line P1 = from_term([[a,b,c],[d,e,f],[g,h]]),
- ?line P2 = from_term([[a,d],[b,c,e,f,q,v]]),
- ?line eval(partition(union(P1, P2)),
- from_term([[a],[b,c],[d],[e,f],[g,h],[q,v]])),
- ?line {'EXIT', {badarg, _}} = (catch partition(from_term([a]))),
+ {'EXIT', {badarg, _}} = (catch partition(2, set([a]))),
+ {'EXIT', {badarg, _}} = (catch partition(1, set([a]))),
+ eval(partition(Id, set([a])), from_term([[a]])),
+
+ eval(partition(E), E),
+ P1 = from_term([[a,b,c],[d,e,f],[g,h]]),
+ P2 = from_term([[a,d],[b,c,e,f,q,v]]),
+ eval(partition(union(P1, P2)),
+ from_term([[a],[b,c],[d],[e,f],[g,h],[q,v]])),
+ {'EXIT', {badarg, _}} = (catch partition(from_term([a]))),
ok.
-partition_3(suite) -> [];
-partition_3(doc) -> [""];
partition_3(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
+ E = empty_set(),
+ ER = relation([]),
%% set of ordered sets
- ?line S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
- ?line eval(partition(1, S1, set([0,1,d,e])),
- lpartition(1, S1, set([0,1,d,e]))),
- ?line eval(partition(1, S1, E), lpartition(1, S1, E)),
- ?line eval(partition(2, ER, set([a,b])), lpartition(2, ER, set([a,b]))),
+ S1 = relation([{a,1},{b,2},{b,22},{c,0}]),
+ eval(partition(1, S1, set([0,1,d,e])),
+ lpartition(1, S1, set([0,1,d,e]))),
+ eval(partition(1, S1, E), lpartition(1, S1, E)),
+ eval(partition(2, ER, set([a,b])), lpartition(2, ER, set([a,b]))),
XFun1 = {external, fun({_A,B,C}) -> {B,C} end},
R1a = relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
R1b = relation([{bb,2},{cc,3}]),
- ?line eval(partition(XFun1, R1a, R1b), lpartition(XFun1, R1a, R1b)),
+ eval(partition(XFun1, R1a, R1b), lpartition(XFun1, R1a, R1b)),
Id = fun(X) -> X end,
XId = {external, Id},
R2 = relation([{a,b}]),
- ?line eval(partition(XId, R2, E), lpartition(XId, R2, E)),
+ eval(partition(XId, R2, E), lpartition(XId, R2, E)),
R3 = relation([{b,d}]),
- ?line eval(partition(XId, E, R3), lpartition(XId, E, R3)),
+ eval(partition(XId, E, R3), lpartition(XId, E, R3)),
Fun1 = fun(S) -> {_A,B,C} = to_external(S), from_term({B,C}) end,
R4a = relation([{a,aa,1},{b,bb,2},{c,cc,3}]),
R4b = relation([{bb,2},{cc,3}]),
- ?line eval(partition(Fun1,R4a,R4b), lpartition(Fun1,R4a,R4b)),
+ eval(partition(Fun1,R4a,R4b), lpartition(Fun1,R4a,R4b)),
XFun2 = {external, fun({_,{A},B}) -> {A,B} end},
R5a = from_term([{a,{aa},1},{b,{bb},2},{c,{cc},3}]),
R5b = from_term([{bb,2},{cc,3}]),
- ?line eval(partition(XFun2,R5a, R5b), lpartition(XFun2,R5a, R5b)),
+ eval(partition(XFun2,R5a, R5b), lpartition(XFun2,R5a, R5b)),
R6 = relation([{a,b}]),
- ?line eval(partition(2, R6, E), lpartition(2, R6, E)),
+ eval(partition(2, R6, E), lpartition(2, R6, E)),
R7 = relation([{b,d}]),
- ?line eval(partition(2, E, R7), lpartition(2, E, R7)),
+ eval(partition(2, E, R7), lpartition(2, E, R7)),
S2 = set([a]),
- ?line eval(partition(XId, E, S2), lpartition(XId, E, S2)),
- ?line eval(partition(XId, S1, E), lpartition(XId, S1, E)),
- ?line {'EXIT', {badarg, _}} =
+ eval(partition(XId, E, S2), lpartition(XId, E, S2)),
+ eval(partition(XId, S1, E), lpartition(XId, S1, E)),
+ {'EXIT', {badarg, _}} =
(catch partition(3, relation([{a,b}]), E)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch partition(3, relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch partition(3, relation([{a,b}]), set([{b,d}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch partition(2, relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch partition({external, fun({A,_B}) -> A end},
relation([{a,b}]), relation([{b,d}]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch partition({external, fun({A,_}) -> {A,0} end},
from_term([{1,a}]),
from_term([{1,0}]))),
S18a = relation([{1,e},{2,b},{3,c},{4,b},{5,a},{6,0}]),
S18b = set([b,d,f]),
- ?line eval(partition({external,fun({_,X}) -> X end}, S18a, S18b),
- lpartition({external,fun({_,X}) -> X end}, S18a, S18b)),
+ eval(partition({external,fun({_,X}) -> X end}, S18a, S18b),
+ lpartition({external,fun({_,X}) -> X end}, S18a, S18b)),
S19a = sofs:relation([{3,a},{8,b}]),
S19b = set([2,6,7]),
- ?line eval(partition({external,fun({X,_}) -> X end}, S19a, S19b),
- lpartition({external,fun({X,_}) -> X end}, S19a, S19b)),
+ eval(partition({external,fun({X,_}) -> X end}, S19a, S19b),
+ lpartition({external,fun({X,_}) -> X end}, S19a, S19b)),
R8a = relation([{a,d},{b,e},{c,b},{d,c}]),
S8 = set([b,d]),
- ?line eval(partition(2, R8a, S8), lpartition(2, R8a, S8)),
+ eval(partition(2, R8a, S8), lpartition(2, R8a, S8)),
S16a = relation([{1,e},{2,b},{3,c},{4,b},{5,a},{6,0}]),
S16b = set([b,c,d]),
- ?line eval(partition(2, S16a, S16b), lpartition(2, S16a, S16b)),
+ eval(partition(2, S16a, S16b), lpartition(2, S16a, S16b)),
S17a = relation([{e,1},{b,2},{c,3},{b,4},{a,5},{0,6}]),
S17b = set([b,c,d]),
- ?line eval(partition(1, S17a, S17b), lpartition(1, S17a, S17b)),
+ eval(partition(1, S17a, S17b), lpartition(1, S17a, S17b)),
- ?line {'EXIT', {function_clause, _}} =
+ {'EXIT', {function_clause, _}} =
(catch partition({external, fun({A,_B}) -> A end}, set([]), E)),
Fun3 = fun(S) -> from_term({to_external(S),0}, {type(S),atom}) end,
S9a = set([1,2]),
S9b = from_term([{1,0}]),
- ?line eval(partition(Fun3, S9a, S9b), lpartition(Fun3, S9a, S9b)),
+ eval(partition(Fun3, S9a, S9b), lpartition(Fun3, S9a, S9b)),
S14a = relation([{1,a},{2,b},{3,c},{0,0}]),
S14b = set([b,c]),
- ?line eval(partition(2, S14a, S14b), lpartition(2, S14a, S14b)),
+ eval(partition(2, S14a, S14b), lpartition(2, S14a, S14b)),
S15a = relation([{a,1},{b,2},{c,3},{0,0}]),
S15b = set([b,c]),
- ?line eval(partition(1, S15a, S15b), lpartition(1, S15a, S15b)),
+ eval(partition(1, S15a, S15b), lpartition(1, S15a, S15b)),
%% set of sets
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch partition({external, fun(X) -> X end},
from_term([], [[atom]]), set([a]))),
S10 = from_term([], [[atom]]),
- ?line eval(partition(Id, S10, E), lpartition(Id, S10, E)),
+ eval(partition(Id, S10, E), lpartition(Id, S10, E)),
S10e = from_term([[a],[b]], [[atom]]),
- ?line eval(partition(Id, S10e, E), lpartition(Id, S10e, E)),
+ eval(partition(Id, S10e, E), lpartition(Id, S10e, E)),
S11a = from_term([], [[atom]]),
S11b = set([a]),
- ?line eval(partition(Id, S11a, S11b), lpartition(Id, S11a, S11b)),
+ eval(partition(Id, S11a, S11b), lpartition(Id, S11a, S11b)),
S12a = from_term([[[a],[b]], [[b],[c]], [[], [a,b]], [[1],[2]]]),
S12b = from_term([[a,b],[1,2,3],[b,c]]),
- ?line eval(partition(fun sofs:union/1, S12a, S12b),
- lpartition(fun sofs:union/1, S12a, S12b)),
+ eval(partition(fun sofs:union/1, S12a, S12b),
+ lpartition(fun sofs:union/1, S12a, S12b)),
Fun13 = fun(_) -> from_term([a]) end,
S13a = from_term([], [[atom]]),
S13b = from_term([], [[a]]),
- ?line eval(partition(Fun13, S13a, S13b), lpartition(Fun13, S13a, S13b)),
+ eval(partition(Fun13, S13a, S13b), lpartition(Fun13, S13a, S13b)),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch partition(fun(_) -> from_term([a]) end,
from_term([[1,2],[3,4]]),
from_term([], [atom]))),
Fun10 = fun(S) ->
- %% Cheating a lot...
- case to_external(S) of
- [1] -> from_term({1,1});
- _ -> S
- end
- end,
- ?line {'EXIT', {type_mismatch, _}} =
+ %% Cheating a lot...
+ case to_external(S) of
+ [1] -> from_term({1,1});
+ _ -> S
+ end
+ end,
+ {'EXIT', {type_mismatch, _}} =
(catch partition(Fun10, from_term([[1]]), from_term([], [[atom]]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch partition(fun(_) -> from_term({a}) end,
from_term([[a]]),
from_term([], [atom]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch partition(fun(_) -> {a} end,
from_term([[a]]),
from_term([], [atom]))),
@@ -1845,84 +1760,80 @@ partition_3(Conf) when is_list(Conf) ->
lpartition(F, S1, S2) ->
{restriction(F, S1, S2), drestriction(F, S1, S2)}.
-multiple_relative_product(suite) -> [];
-multiple_relative_product(doc) -> [""];
multiple_relative_product(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line T = relation([{a,1},{a,11},{b,2},{c,3},{c,33},{d,4}]),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ ER = relation([]),
+ T = relation([{a,1},{a,11},{b,2},{c,3},{c,33},{d,4}]),
+ {'EXIT', {badarg, _}} =
(catch multiple_relative_product({}, ER)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch multiple_relative_product({}, relation([{a,b}]))),
- ?line eval(multiple_relative_product({E,T,T}, relation([], 3)), E),
- ?line eval(multiple_relative_product({T,T,T}, E), E),
- ?line eval(multiple_relative_product({T,T,T}, relation([],3)),
- from_term([],[{{atom,atom,atom},{atom,atom,atom}}])),
- ?line eval(multiple_relative_product({T,T,T},
+ eval(multiple_relative_product({E,T,T}, relation([], 3)), E),
+ eval(multiple_relative_product({T,T,T}, E), E),
+ eval(multiple_relative_product({T,T,T}, relation([],3)),
+ from_term([],[{{atom,atom,atom},{atom,atom,atom}}])),
+ eval(multiple_relative_product({T,T,T},
relation([{a,b,c},{c,d,a}])),
- from_term([{{a,b,c},{1,2,3}}, {{a,b,c},{1,2,33}},
- {{a,b,c},{11,2,3}}, {{a,b,c},{11,2,33}},
- {{c,d,a},{3,4,1}}, {{c,d,a},{3,4,11}},
- {{c,d,a},{33,4,1}}, {{c,d,a},{33,4,11}}])),
- ?line {'EXIT', {type_mismatch, _}} =
+ from_term([{{a,b,c},{1,2,3}}, {{a,b,c},{1,2,33}},
+ {{a,b,c},{11,2,3}}, {{a,b,c},{11,2,33}},
+ {{c,d,a},{3,4,1}}, {{c,d,a},{3,4,11}},
+ {{c,d,a},{33,4,1}}, {{c,d,a},{33,4,11}}])),
+ {'EXIT', {type_mismatch, _}} =
(catch multiple_relative_product({T}, from_term([{{a}}]))),
ok.
-digraph(suite) -> [];
-digraph(doc) -> [""];
digraph(Conf) when is_list(Conf) ->
- ?line T0 = ets:all(),
- ?line E = empty_set(),
- ?line R = relation([{a,b},{b,c},{c,d},{d,a}]),
- ?line F = relation_to_family(R),
+ T0 = ets:all(),
+ E = empty_set(),
+ R = relation([{a,b},{b,c},{c,d},{d,a}]),
+ F = relation_to_family(R),
Type = type(F),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch family_to_digraph(set([a]))),
digraph_fail(badarg, catch family_to_digraph(set([a]), [foo])),
digraph_fail(badarg, catch family_to_digraph(F, [foo])),
digraph_fail(cyclic, catch family_to_digraph(family([{a,[a]}]),[acyclic])),
- ?line G1 = family_to_digraph(E),
- ?line {'EXIT', {badarg, _}} = (catch digraph_to_family(G1, foo)),
- ?line {'EXIT', {badarg, _}} = (catch digraph_to_family(G1, atom)),
- ?line true = [] == to_external(digraph_to_family(G1)),
- ?line true = [] == to_external(digraph_to_family(G1, Type)),
- ?line true = digraph:delete(G1),
-
- ?line G1a = family_to_digraph(E, [protected]),
- ?line true = [] == to_external(digraph_to_family(G1a)),
- ?line true = [] == to_external(digraph_to_family(G1a, Type)),
- ?line true = digraph:delete(G1a),
-
- ?line G2 = family_to_digraph(F),
- ?line true = F == digraph_to_family(G2),
- ?line true = F == digraph_to_family(G2, type(F)),
- ?line true = digraph:delete(G2),
-
- ?line R2 = from_term([{{a},b},{{c},d}]),
- ?line F2 = relation_to_family(R2),
- ?line Type2 = type(F2),
- ?line G3 = family_to_digraph(F2, [protected]),
- ?line true = is_subset(F2, digraph_to_family(G3, Type2)),
- ?line true = digraph:delete(G3),
+ G1 = family_to_digraph(E),
+ {'EXIT', {badarg, _}} = (catch digraph_to_family(G1, foo)),
+ {'EXIT', {badarg, _}} = (catch digraph_to_family(G1, atom)),
+ true = [] == to_external(digraph_to_family(G1)),
+ true = [] == to_external(digraph_to_family(G1, Type)),
+ true = digraph:delete(G1),
+
+ G1a = family_to_digraph(E, [protected]),
+ true = [] == to_external(digraph_to_family(G1a)),
+ true = [] == to_external(digraph_to_family(G1a, Type)),
+ true = digraph:delete(G1a),
+
+ G2 = family_to_digraph(F),
+ true = F == digraph_to_family(G2),
+ true = F == digraph_to_family(G2, type(F)),
+ true = digraph:delete(G2),
+
+ R2 = from_term([{{a},b},{{c},d}]),
+ F2 = relation_to_family(R2),
+ Type2 = type(F2),
+ G3 = family_to_digraph(F2, [protected]),
+ true = is_subset(F2, digraph_to_family(G3, Type2)),
+ true = digraph:delete(G3),
Fl = 0.0, I = round(Fl),
if
Fl == I -> % term ordering
- ?line G4 = digraph:new(),
+ G4 = digraph:new(),
digraph:add_vertex(G4, Fl),
digraph:add_vertex(G4, I),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch digraph_to_family(G4, Type)),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch digraph_to_family(G4)),
- ?line true = digraph:delete(G4);
+ true = digraph:delete(G4);
true -> ok
end,
-
- ?line true = T0 == ets:all(),
+
+ true = T0 == ets:all(),
ok.
digraph_fail(ExitReason, Fail) ->
@@ -1932,32 +1843,28 @@ digraph_fail(ExitReason, Fail) ->
{true,2} -> ok
end.
-constant_function(suite) -> [];
-constant_function(doc) -> [""];
constant_function(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line C = from_term(3),
- ?line eval(constant_function(E, C), E),
- ?line eval(constant_function(set([a,b]), E), from_term([{a,[]},{b,[]}])),
- ?line eval(constant_function(set([a,b]), C), from_term([{a,3},{b,3}])),
- ?line {'EXIT', {badarg, _}} = (catch constant_function(C, C)),
- ?line {'EXIT', {badarg, _}} = (catch constant_function(set([]), foo)),
+ E = empty_set(),
+ C = from_term(3),
+ eval(constant_function(E, C), E),
+ eval(constant_function(set([a,b]), E), from_term([{a,[]},{b,[]}])),
+ eval(constant_function(set([a,b]), C), from_term([{a,3},{b,3}])),
+ {'EXIT', {badarg, _}} = (catch constant_function(C, C)),
+ {'EXIT', {badarg, _}} = (catch constant_function(set([]), foo)),
ok.
-misc(suite) -> [];
-misc(doc) -> [""];
misc(Conf) when is_list(Conf) ->
- % find "relational" part of relation:
- ?line S = relation([{a,b},{b,c},{b,d},{c,d}]),
+ %% find "relational" part of relation:
+ S = relation([{a,b},{b,c},{b,d},{c,d}]),
Id = fun(A) -> A end,
- ?line RR = relational_restriction(S),
- ?line eval(union(difference(partition(Id,S), partition(1,S))), RR),
- ?line eval(union(difference(partition(1,S), partition(Id,S))), RR),
-
- % the "functional" part:
- ?line eval(union(intersection(partition(1,S), partition(Id,S))),
- difference(S, RR)),
- ?line {'EXIT', {undef, _}} =
+ RR = relational_restriction(S),
+ eval(union(difference(partition(Id,S), partition(1,S))), RR),
+ eval(union(difference(partition(1,S), partition(Id,S))), RR),
+
+ %% the "functional" part:
+ eval(union(intersection(partition(1,S), partition(Id,S))),
+ difference(S, RR)),
+ {'EXIT', {undef, _}} =
(catch projection(fun external:foo/1, set([a,b,c]))),
ok.
@@ -1966,157 +1873,143 @@ relational_restriction(R) ->
family_to_relation(family_specification(Fun, relation_to_family(R))).
-family_specification(suite) -> [];
-family_specification(doc) -> [""];
family_specification(Conf) when is_list(Conf) ->
E = empty_set(),
%% internal
- ?line eval(family_specification(fun sofs:is_set/1, E), E),
- ?line {'EXIT', {badarg, _}} =
- (catch family_specification(fun sofs:is_set/1, set([]))),
- ?line F1 = from_term([{1,[1]}]),
- ?line eval(family_specification(fun sofs:is_set/1, F1), F1),
+ eval(family_specification(fun sofs:is_set/1, E), E),
+ {'EXIT', {badarg, _}} =
+ (catch family_specification(fun sofs:is_set/1, set([]))),
+ F1 = from_term([{1,[1]}]),
+ eval(family_specification(fun sofs:is_set/1, F1), F1),
Fun = fun(S) -> is_subset(S, set([0,1,2,3,4])) end,
- ?line F2 = family([{a,[1,2]},{b,[3,4,5]}]),
- ?line eval(family_specification(Fun, F2), family([{a,[1,2]}])),
- ?line F3 = from_term([{a,[]},{b,[]}]),
- ?line eval(family_specification(fun sofs:is_set/1, F3), F3),
+ F2 = family([{a,[1,2]},{b,[3,4,5]}]),
+ eval(family_specification(Fun, F2), family([{a,[1,2]}])),
+ F3 = from_term([{a,[]},{b,[]}]),
+ eval(family_specification(fun sofs:is_set/1, F3), F3),
Fun2 = fun(_) -> throw(fippla) end,
- ?line fippla = (catch family_specification(Fun2, family([{a,[1]}]))),
+ fippla = (catch family_specification(Fun2, family([{a,[1]}]))),
Fun3 = fun(_) -> neither_true_nor_false end,
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch family_specification(Fun3, F3)),
%% external
IsList = {external, fun(L) when is_list(L) -> true; (_) -> false end},
- ?line eval(family_specification(IsList, E), E),
- ?line eval(family_specification(IsList, F1), F1),
+ eval(family_specification(IsList, E), E),
+ eval(family_specification(IsList, F1), F1),
MF = {external, fun(L) -> lists:member(3, L) end},
- ?line eval(family_specification(MF, F2), family([{b,[3,4,5]}])),
- ?line fippla = (catch family_specification(Fun2, family([{a,[1]}]))),
- ?line {'EXIT', {badarg, _}} =
+ eval(family_specification(MF, F2), family([{b,[3,4,5]}])),
+ fippla = (catch family_specification(Fun2, family([{a,[1]}]))),
+ {'EXIT', {badarg, _}} =
(catch family_specification({external, Fun3}, F3)),
ok.
-family_domain_1(suite) -> [];
-family_domain_1(doc) -> [""];
family_domain_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = from_term([{a,[]},{b,[]}],[{atom,[{atom,atom}]}]),
- ?line EF = from_term([{a,[]},{b,[]}],[{atom,[atom]}]),
- ?line eval(family_domain(E), E),
- ?line eval(family_domain(ER), EF),
- ?line FR = from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),
- ?line eval(family_domain(FR), from_term([{a,[1,2,3]},{b,[]},{c,[4,5]}])),
- ?line eval(family_field(E), E),
- ?line eval(family_field(FR),
- from_term([{a,[a,b,c,1,2,3]},{b,[]},{c,[d,e,4,5]}])),
- ?line eval(family_domain(from_term([{{a},[{{1,[]},c}]}])),
- from_term([{{a},[{1,[]}]}])),
- ?line eval(family_domain(from_term([{{a},[{{1,[a]},c}]}])),
- from_term([{{a},[{1,[a]}]}])),
- ?line eval(family_domain(from_term([{{a},[]}])),
- from_term([{{a},[]}])),
- ?line eval(family_domain(from_term([], type(FR))),
- from_term([], [{atom,[atom]}])),
- ?line {'EXIT', {badarg, _}} = (catch family_domain(set([a]))),
- ?line {'EXIT', {badarg, _}} = (catch family_field(set([a]))),
- ?line {'EXIT', {badarg, _}} = (catch family_domain(set([{a,[b]}]))),
+ E = empty_set(),
+ ER = from_term([{a,[]},{b,[]}],[{atom,[{atom,atom}]}]),
+ EF = from_term([{a,[]},{b,[]}],[{atom,[atom]}]),
+ eval(family_domain(E), E),
+ eval(family_domain(ER), EF),
+ FR = from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),
+ eval(family_domain(FR), from_term([{a,[1,2,3]},{b,[]},{c,[4,5]}])),
+ eval(family_field(E), E),
+ eval(family_field(FR),
+ from_term([{a,[a,b,c,1,2,3]},{b,[]},{c,[d,e,4,5]}])),
+ eval(family_domain(from_term([{{a},[{{1,[]},c}]}])),
+ from_term([{{a},[{1,[]}]}])),
+ eval(family_domain(from_term([{{a},[{{1,[a]},c}]}])),
+ from_term([{{a},[{1,[a]}]}])),
+ eval(family_domain(from_term([{{a},[]}])),
+ from_term([{{a},[]}])),
+ eval(family_domain(from_term([], type(FR))),
+ from_term([], [{atom,[atom]}])),
+ {'EXIT', {badarg, _}} = (catch family_domain(set([a]))),
+ {'EXIT', {badarg, _}} = (catch family_field(set([a]))),
+ {'EXIT', {badarg, _}} = (catch family_domain(set([{a,[b]}]))),
ok.
-family_range_1(suite) -> [];
-family_range_1(doc) -> [""];
family_range_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = from_term([{a,[]},{b,[]}],[{atom,[{atom,atom}]}]),
- ?line EF = from_term([{a,[]},{b,[]}],[{atom,[atom]}]),
- ?line eval(family_range(E), E),
- ?line eval(family_range(ER), EF),
- ?line FR = from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),
- ?line eval(family_range(FR), from_term([{a,[a,b,c]},{b,[]},{c,[d,e]}])),
- ?line eval(family_range(from_term([{{a},[{c,{1,[a]}}]}])),
- from_term([{{a},[{1,[a]}]}])),
- ?line eval(family_range(from_term([{{a},[{c,{1,[]}}]}])),
- from_term([{{a},[{1,[]}]}])),
- ?line eval(family_range(from_term([{{a},[]}])),
- from_term([{{a},[]}])),
- ?line eval(family_range(from_term([], type(FR))),
- from_term([], [{atom,[atom]}])),
- ?line {'EXIT', {badarg, _}} = (catch family_range(set([a]))),
- ?line {'EXIT', {badarg, _}} = (catch family_range(set([{a,[b]}]))),
+ E = empty_set(),
+ ER = from_term([{a,[]},{b,[]}],[{atom,[{atom,atom}]}]),
+ EF = from_term([{a,[]},{b,[]}],[{atom,[atom]}]),
+ eval(family_range(E), E),
+ eval(family_range(ER), EF),
+ FR = from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),
+ eval(family_range(FR), from_term([{a,[a,b,c]},{b,[]},{c,[d,e]}])),
+ eval(family_range(from_term([{{a},[{c,{1,[a]}}]}])),
+ from_term([{{a},[{1,[a]}]}])),
+ eval(family_range(from_term([{{a},[{c,{1,[]}}]}])),
+ from_term([{{a},[{1,[]}]}])),
+ eval(family_range(from_term([{{a},[]}])),
+ from_term([{{a},[]}])),
+ eval(family_range(from_term([], type(FR))),
+ from_term([], [{atom,[atom]}])),
+ {'EXIT', {badarg, _}} = (catch family_range(set([a]))),
+ {'EXIT', {badarg, _}} = (catch family_range(set([{a,[b]}]))),
ok.
-family_to_relation_1(suite) -> [];
-family_to_relation_1(doc) -> [""];
family_to_relation_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line ER = relation([]),
- ?line EF = family([]),
- ?line eval(family_to_relation(E), E),
- ?line eval(family_to_relation(EF), ER),
- ?line eval(sofs:fam2rel(EF), ER),
- ?line F = family([{a,[]},{b,[1]},{c,[7,9,11]}]),
- ?line eval(family_to_relation(F), relation([{b,1},{c,7},{c,9},{c,11}])),
- ?line {'EXIT', {badarg, _}} = (catch family_to_relation(set([a]))),
+ E = empty_set(),
+ ER = relation([]),
+ EF = family([]),
+ eval(family_to_relation(E), E),
+ eval(family_to_relation(EF), ER),
+ eval(sofs:fam2rel(EF), ER),
+ F = family([{a,[]},{b,[1]},{c,[7,9,11]}]),
+ eval(family_to_relation(F), relation([{b,1},{c,7},{c,9},{c,11}])),
+ {'EXIT', {badarg, _}} = (catch family_to_relation(set([a]))),
ok.
-union_of_family_1(suite) -> [];
-union_of_family_1(doc) -> [""];
union_of_family_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line EF = from_term([{a,[]},{b,[]}],[{atom,[atom]}]),
- ?line eval(union_of_family(E), E),
- ?line eval(union_of_family(EF), set([])),
- ?line eval(union_of_family(family([])), set([])),
- ?line FR = from_term([{a,[1,2,3]},{b,[]},{c,[4,5]}]),
- ?line eval(union_of_family(FR), set([1,2,3,4,5])),
- ?line eval(union_of_family(sofs:family([{a,[1,2]},{b,[1,2]}])),
- set([1,2])),
- ?line {'EXIT', {badarg, _}} = (catch union_of_family(set([a]))),
+ E = empty_set(),
+ EF = from_term([{a,[]},{b,[]}],[{atom,[atom]}]),
+ eval(union_of_family(E), E),
+ eval(union_of_family(EF), set([])),
+ eval(union_of_family(family([])), set([])),
+ FR = from_term([{a,[1,2,3]},{b,[]},{c,[4,5]}]),
+ eval(union_of_family(FR), set([1,2,3,4,5])),
+ eval(union_of_family(sofs:family([{a,[1,2]},{b,[1,2]}])),
+ set([1,2])),
+ {'EXIT', {badarg, _}} = (catch union_of_family(set([a]))),
ok.
-intersection_of_family_1(suite) -> [];
-intersection_of_family_1(doc) -> [""];
intersection_of_family_1(Conf) when is_list(Conf) ->
- ?line EF = from_term([{a,[]},{b,[]}],[{atom,[atom]}]),
- ?line eval(intersection_of_family(EF), set([])),
- ?line FR = from_term([{a,[1,2,3]},{b,[2,3]},{c,[3,4,5]}]),
- ?line eval(intersection_of_family(FR), set([3])),
- ?line {'EXIT', {badarg, _}} =
+ EF = from_term([{a,[]},{b,[]}],[{atom,[atom]}]),
+ eval(intersection_of_family(EF), set([])),
+ FR = from_term([{a,[1,2,3]},{b,[2,3]},{c,[3,4,5]}]),
+ eval(intersection_of_family(FR), set([3])),
+ {'EXIT', {badarg, _}} =
(catch intersection_of_family(family([]))),
- ?line EE = from_term([], [[atom]]),
- ?line {'EXIT', {badarg, _}} = (catch intersection_of_family(EE)),
- ?line {'EXIT', {badarg, _}} = (catch intersection_of_family(set([a]))),
+ EE = from_term([], [[atom]]),
+ {'EXIT', {badarg, _}} = (catch intersection_of_family(EE)),
+ {'EXIT', {badarg, _}} = (catch intersection_of_family(set([a]))),
ok.
-family_projection(suite) -> [];
-family_projection(doc) -> [""];
family_projection(Conf) when is_list(Conf) ->
SSType = [{atom,[[atom]]}],
SRType = [{atom,[{atom,atom}]}],
- ?line E = empty_set(),
-
- ?line eval(family_projection(fun(X) -> X end, family([])), E),
- ?line L1 = [{a,[]}],
- ?line eval(family_projection(fun sofs:union/1, E), E),
- ?line eval(family_projection(fun sofs:union/1, from_term(L1, SSType)),
- family(L1)),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+
+ eval(family_projection(fun(X) -> X end, family([])), E),
+ L1 = [{a,[]}],
+ eval(family_projection(fun sofs:union/1, E), E),
+ eval(family_projection(fun sofs:union/1, from_term(L1, SSType)),
+ family(L1)),
+ {'EXIT', {badarg, _}} =
(catch family_projection(fun sofs:union/1, set([]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch family_projection(fun sofs:union/1, from_term([{1,[1]}]))),
- ?line F2 = from_term([{a,[[1],[2]]},{b,[[3,4],[5]]}], SSType),
- ?line eval(family_projection(fun sofs:union/1, F2),
- family_union(F2)),
+ F2 = from_term([{a,[[1],[2]]},{b,[[3,4],[5]]}], SSType),
+ eval(family_projection(fun sofs:union/1, F2),
+ family_union(F2)),
- ?line F3 = from_term([{1,[{a,b},{b,c},{c,d}]},{3,[]},{5,[{3,5}]}],
- SRType),
- ?line eval(family_projection(fun sofs:domain/1, F3), family_domain(F3)),
- ?line eval(family_projection(fun sofs:range/1, F3), family_range(F3)),
+ F3 = from_term([{1,[{a,b},{b,c},{c,d}]},{3,[]},{5,[{3,5}]}],
+ SRType),
+ eval(family_projection(fun sofs:domain/1, F3), family_domain(F3)),
+ eval(family_projection(fun sofs:range/1, F3), family_range(F3)),
- ?line eval(family_projection(fun(_) -> E end, family([{a,[b,c]}])),
- from_term([{a,[]}])),
+ eval(family_projection(fun(_) -> E end, family([{a,[b,c]}])),
+ from_term([{a,[]}])),
Fun1 = fun(S) ->
case to_external(S) of
@@ -2124,264 +2017,252 @@ family_projection(Conf) when is_list(Conf) ->
_ -> S
end
end,
- ?line eval(family_projection(Fun1, family([{a,[1]}])),
- from_term([{a,{1,1}}])),
+ eval(family_projection(Fun1, family([{a,[1]}])),
+ from_term([{a,{1,1}}])),
Fun2 = fun(_) -> throw(fippla) end,
- ?line fippla =
+ fippla =
(catch family_projection(Fun2, family([{a,[1]}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch family_projection(Fun1, from_term([{1,[1]},{2,[2]}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch family_projection(Fun1, from_term([{1,[1]},{0,[0]}]))),
- ?line eval(family_projection(fun(_) -> E end, from_term([{a,[]}])),
- from_term([{a,[]}])),
+ eval(family_projection(fun(_) -> E end, from_term([{a,[]}])),
+ from_term([{a,[]}])),
F4 = from_term([{a,[{1,2,3}]},{b,[{4,5,6}]},{c,[]},{m3,[]}]),
Z = from_term(0),
- ?line eval(family_projection(fun(S) -> local_adjoin(S, Z) end, F4),
- from_term([{a,[{{1,2,3},0}]},{b,[{{4,5,6},0}]},{c,[]},{m3,[]}])),
- ?line {'EXIT', {badarg, _}} =
+ eval(family_projection(fun(S) -> local_adjoin(S, Z) end, F4),
+ from_term([{a,[{{1,2,3},0}]},{b,[{{4,5,6},0}]},{c,[]},{m3,[]}])),
+ {'EXIT', {badarg, _}} =
(catch family_projection({external, fun(X) -> X end},
from_term([{1,[1]}]))),
%% ordered set element
- ?line eval(family_projection(fun(_) -> from_term(a, atom) end,
- from_term([{1,[a]}])),
- from_term([{1,a}])),
+ eval(family_projection(fun(_) -> from_term(a, atom) end,
+ from_term([{1,[a]}])),
+ from_term([{1,a}])),
ok.
-family_difference(suite) -> [];
-family_difference(doc) -> [""];
family_difference(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line EF = family([]),
- ?line F9 = from_term([{b,[b,c]}]),
- ?line F10 = from_term([{a,[b,c]}]),
- ?line eval(family_difference(E, E), E),
- ?line eval(family_difference(E, F10), from_term([], type(F10))),
- ?line eval(family_difference(F10, E), F10),
- ?line eval(family_difference(F9, F10), F9),
- ?line eval(family_difference(F10, F10), family([{a,[]}])),
- ?line F20 = from_term([{a,[1,2,3]},{b,[1,2,3]},{c,[1,2,3]}]),
- ?line F21 = from_term([{b,[1,2,3]},{c,[1,2,3]}]),
- ?line eval(family_difference(F20, from_term([{a,[2]}])),
- from_term([{a,[1,3]},{b,[1,2,3]},{c,[1,2,3]}])),
- ?line eval(family_difference(F20, from_term([{0,[2]},{q,[1,2]}])), F20),
- ?line eval(family_difference(F20, F21),
- from_term([{a,[1,2,3]},{b,[]},{c,[]}])),
-
- ?line eval(family_difference(from_term([{e,[f,g]}]), family([])),
- from_term([{e,[f,g]}])),
- ?line eval(family_difference(from_term([{e,[f,g]}]), EF),
- from_term([{e,[f,g]}])),
- ?line eval(family_difference(from_term([{a,[a,b,c,d]},{c,[b,c]}]),
- from_term([{a,[b,c]},{b,[d]},{d,[e,f]}])),
- from_term([{a,[a,d]},{c,[b,c]}])),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ EF = family([]),
+ F9 = from_term([{b,[b,c]}]),
+ F10 = from_term([{a,[b,c]}]),
+ eval(family_difference(E, E), E),
+ eval(family_difference(E, F10), from_term([], type(F10))),
+ eval(family_difference(F10, E), F10),
+ eval(family_difference(F9, F10), F9),
+ eval(family_difference(F10, F10), family([{a,[]}])),
+ F20 = from_term([{a,[1,2,3]},{b,[1,2,3]},{c,[1,2,3]}]),
+ F21 = from_term([{b,[1,2,3]},{c,[1,2,3]}]),
+ eval(family_difference(F20, from_term([{a,[2]}])),
+ from_term([{a,[1,3]},{b,[1,2,3]},{c,[1,2,3]}])),
+ eval(family_difference(F20, from_term([{0,[2]},{q,[1,2]}])), F20),
+ eval(family_difference(F20, F21),
+ from_term([{a,[1,2,3]},{b,[]},{c,[]}])),
+
+ eval(family_difference(from_term([{e,[f,g]}]), family([])),
+ from_term([{e,[f,g]}])),
+ eval(family_difference(from_term([{e,[f,g]}]), EF),
+ from_term([{e,[f,g]}])),
+ eval(family_difference(from_term([{a,[a,b,c,d]},{c,[b,c]}]),
+ from_term([{a,[b,c]},{b,[d]},{d,[e,f]}])),
+ from_term([{a,[a,d]},{c,[b,c]}])),
+ {'EXIT', {badarg, _}} =
(catch family_difference(set([]), set([]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch family_difference(from_term([{a,[b,c]}]),
from_term([{e,[{f}]}]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch family_difference(from_term([{a,[b]}]),
from_term([{c,[d]}], [{i,[s]}]))),
ok.
-family_intersection_1(suite) -> [];
-family_intersection_1(doc) -> [""];
family_intersection_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line EF = family([]),
- ?line ES = from_term([], [{atom,[[atom]]}]),
- ?line eval(family_intersection(E), E),
- ?line {'EXIT', {badarg, _}} = (catch family_intersection(EF)),
- ?line eval(family_intersection(ES), EF),
- ?line {'EXIT', {badarg, _}} = (catch family_intersection(set([]))),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ EF = family([]),
+ ES = from_term([], [{atom,[[atom]]}]),
+ eval(family_intersection(E), E),
+ {'EXIT', {badarg, _}} = (catch family_intersection(EF)),
+ eval(family_intersection(ES), EF),
+ {'EXIT', {badarg, _}} = (catch family_intersection(set([]))),
+ {'EXIT', {badarg, _}} =
(catch family_intersection(from_term([{a,[1,2]}]))),
- ?line F1 = from_term([{a,[[1],[2],[2,3]]},{b,[]},{c,[[4]]}]),
- ?line {'EXIT', {badarg, _}} = (catch family_intersection(F1)),
- ?line F2 = from_term([{b,[[1],[2],[2,3]]},{a,[]},{c,[[4]]}]),
- ?line {'EXIT', {badarg, _}} = (catch family_intersection(F2)),
- ?line F3 = from_term([{a,[[1,2,3],[2],[2,3]]},{c,[[4,5,6],[5,6,7]]}]),
- ?line eval(family_intersection(F3), family([{a,[2]},{c,[5,6]}])),
+ F1 = from_term([{a,[[1],[2],[2,3]]},{b,[]},{c,[[4]]}]),
+ {'EXIT', {badarg, _}} = (catch family_intersection(F1)),
+ F2 = from_term([{b,[[1],[2],[2,3]]},{a,[]},{c,[[4]]}]),
+ {'EXIT', {badarg, _}} = (catch family_intersection(F2)),
+ F3 = from_term([{a,[[1,2,3],[2],[2,3]]},{c,[[4,5,6],[5,6,7]]}]),
+ eval(family_intersection(F3), family([{a,[2]},{c,[5,6]}])),
ok.
-family_intersection_2(suite) -> [];
-family_intersection_2(doc) -> [""];
family_intersection_2(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line EF = family([]),
- ?line F1 = from_term([{a,[1,2]},{b,[4,5]},{c,[7,8]},{d,[10,11]}]),
- ?line F2 = from_term([{c,[6,7]},{d,[9,10,11]},{q,[1]}]),
- ?line F3 = from_term([{a,[1,2]},{b,[4,5]},{c,[6,7,8]},{d,[9,10,11]},
- {q,[1]}]),
-
- ?line eval(family_intersection(E, E), E),
- ?line eval(family_intersection(EF, EF), EF),
- ?line eval(family_intersection(F1, F2),
- from_term([{c,[7]},{d,[10,11]}])),
- ?line eval(family_intersection(F1, F3), F1),
- ?line eval(family_intersection(F2, F3), F2),
-
- ?line eval(family_intersection(EF, from_term([{e,[f,g]}])), EF),
- ?line eval(family_intersection(E, from_term([{e,[f,g]}])), EF),
- ?line eval(family_intersection(from_term([{e,[f,g]}]), EF), EF),
- ?line eval(family_intersection(from_term([{e,[f,g]}]), E), EF),
- ?line {'EXIT', {type_mismatch, _}} =
+ E = empty_set(),
+ EF = family([]),
+ F1 = from_term([{a,[1,2]},{b,[4,5]},{c,[7,8]},{d,[10,11]}]),
+ F2 = from_term([{c,[6,7]},{d,[9,10,11]},{q,[1]}]),
+ F3 = from_term([{a,[1,2]},{b,[4,5]},{c,[6,7,8]},{d,[9,10,11]},
+ {q,[1]}]),
+
+ eval(family_intersection(E, E), E),
+ eval(family_intersection(EF, EF), EF),
+ eval(family_intersection(F1, F2),
+ from_term([{c,[7]},{d,[10,11]}])),
+ eval(family_intersection(F1, F3), F1),
+ eval(family_intersection(F2, F3), F2),
+
+ eval(family_intersection(EF, from_term([{e,[f,g]}])), EF),
+ eval(family_intersection(E, from_term([{e,[f,g]}])), EF),
+ eval(family_intersection(from_term([{e,[f,g]}]), EF), EF),
+ eval(family_intersection(from_term([{e,[f,g]}]), E), EF),
+ {'EXIT', {type_mismatch, _}} =
(catch family_intersection(from_term([{a,[b,c]}]),
from_term([{e,[{f}]}]))),
- ?line F11 = family([{a,[1,2,3]},{b,[0,2,4]},{c,[0,3,6,9]}]),
- ?line eval(union_of_family(F11), set([0,1,2,3,4,6,9])),
- ?line F12 = from_term([{a,[1,2,3,4]},{b,[0,2,4]},{c,[2,3,4,5]}]),
- ?line eval(intersection_of_family(F12), set([2,4])),
+ F11 = family([{a,[1,2,3]},{b,[0,2,4]},{c,[0,3,6,9]}]),
+ eval(union_of_family(F11), set([0,1,2,3,4,6,9])),
+ F12 = from_term([{a,[1,2,3,4]},{b,[0,2,4]},{c,[2,3,4,5]}]),
+ eval(intersection_of_family(F12), set([2,4])),
ok.
-family_union_1(suite) -> [];
-family_union_1(doc) -> [""];
family_union_1(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line EF = family([]),
- ?line ES = from_term([], [{atom,[[atom]]}]),
- ?line eval(family_union(E), E),
- ?line eval(family_union(ES), EF),
- ?line {'EXIT', {badarg, _}} = (catch family_union(set([]))),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ EF = family([]),
+ ES = from_term([], [{atom,[[atom]]}]),
+ eval(family_union(E), E),
+ eval(family_union(ES), EF),
+ {'EXIT', {badarg, _}} = (catch family_union(set([]))),
+ {'EXIT', {badarg, _}} =
(catch family_union(from_term([{a,[1,2]}]))),
- ?line eval(family_union(from_term([{a,[[1],[2],[2,3]]},{b,[]},{c,[[4]]}])),
- family([{a,[1,2,3]},{b,[]},{c,[4]}])),
+ eval(family_union(from_term([{a,[[1],[2],[2,3]]},{b,[]},{c,[[4]]}])),
+ family([{a,[1,2,3]},{b,[]},{c,[4]}])),
ok.
-family_union_2(suite) -> [];
-family_union_2(doc) -> [""];
family_union_2(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
- ?line EF = family([]),
- ?line F1 = from_term([{a,[1,2]},{b,[4,5]},{c,[7,8]},{d,[10,11]}]),
- ?line F2 = from_term([{c,[6,7]},{d,[9,10,11]},{q,[1]}]),
- ?line F3 = from_term([{a,[1,2]},{b,[4,5]},{c,[6,7,8]},{d,[9,10,11]},
- {q,[1]}]),
-
- ?line eval(family_union(E, E), E),
- ?line eval(family_union(F1, E), F1),
- ?line eval(family_union(E, F2), F2),
- ?line eval(family_union(F1, F2), F3),
- ?line eval(family_union(F2, F1), F3),
-
- ?line eval(family_union(E, from_term([{e,[f,g]}])),
- from_term([{e,[f,g]}])),
- ?line eval(family_union(EF, from_term([{e,[f,g]}])),
- from_term([{e,[f,g]}])),
- ?line eval(family_union(from_term([{e,[f,g]}]), E),
- from_term([{e,[f,g]}])),
- ?line {'EXIT', {badarg, _}} =
+ E = empty_set(),
+ EF = family([]),
+ F1 = from_term([{a,[1,2]},{b,[4,5]},{c,[7,8]},{d,[10,11]}]),
+ F2 = from_term([{c,[6,7]},{d,[9,10,11]},{q,[1]}]),
+ F3 = from_term([{a,[1,2]},{b,[4,5]},{c,[6,7,8]},{d,[9,10,11]},
+ {q,[1]}]),
+
+ eval(family_union(E, E), E),
+ eval(family_union(F1, E), F1),
+ eval(family_union(E, F2), F2),
+ eval(family_union(F1, F2), F3),
+ eval(family_union(F2, F1), F3),
+
+ eval(family_union(E, from_term([{e,[f,g]}])),
+ from_term([{e,[f,g]}])),
+ eval(family_union(EF, from_term([{e,[f,g]}])),
+ from_term([{e,[f,g]}])),
+ eval(family_union(from_term([{e,[f,g]}]), E),
+ from_term([{e,[f,g]}])),
+ {'EXIT', {badarg, _}} =
(catch family_union(set([]),set([]))),
- ?line {'EXIT', {type_mismatch, _}} =
+ {'EXIT', {type_mismatch, _}} =
(catch family_union(from_term([{a,[b,c]}]),
from_term([{e,[{f}]}]))),
ok.
-partition_family(suite) -> [];
-partition_family(doc) -> [""];
partition_family(Conf) when is_list(Conf) ->
- ?line E = empty_set(),
+ E = empty_set(),
%% set of ordered sets
- ?line ER = relation([]),
- ?line EF = from_term([], [{atom,[{atom,atom}]}]),
-
- ?line eval(partition_family(1, E), E),
- ?line eval(partition_family(2, E), E),
- ?line eval(partition_family(fun sofs:union/1, E), E),
- ?line eval(partition_family(1, ER), EF),
- ?line eval(partition_family(2, ER), EF),
- ?line {'EXIT', {badarg, _}} = (catch partition_family(1, set([]))),
- ?line {'EXIT', {badarg, _}} = (catch partition_family(2, set([]))),
- ?line {'EXIT', {function_clause, _}} =
+ ER = relation([]),
+ EF = from_term([], [{atom,[{atom,atom}]}]),
+
+ eval(partition_family(1, E), E),
+ eval(partition_family(2, E), E),
+ eval(partition_family(fun sofs:union/1, E), E),
+ eval(partition_family(1, ER), EF),
+ eval(partition_family(2, ER), EF),
+ {'EXIT', {badarg, _}} = (catch partition_family(1, set([]))),
+ {'EXIT', {badarg, _}} = (catch partition_family(2, set([]))),
+ {'EXIT', {function_clause, _}} =
(catch partition_family(fun({_A,B}) -> {B} end, from_term([{1}]))),
- ?line eval(partition_family(1, relation([{1,a},{1,b},{2,c},{2,d}])),
- from_term([{1,[{1,a},{1,b}]},{2,[{2,c},{2,d}]}])),
- ?line eval(partition_family(1, relation([{1,a},{2,b}])),
- from_term([{1,[{1,a}]},{2,[{2,b}]}])),
- ?line eval(partition_family(2, relation([{1,a},{1,b},{2,a},{2,b},{3,c}])),
- from_term([{a,[{1,a},{2,a}]},{b,[{1,b},{2,b}]},{c,[{3,c}]}])),
- ?line eval(partition_family(2, relation([{1,a}])),
- from_term([{a,[{1,a}]}])),
- ?line eval(partition_family(2, relation([{1,a},{2,a},{3,a}])),
- from_term([{a,[{1,a},{2,a},{3,a}]}])),
- ?line eval(partition_family(2, relation([{1,a},{2,b}])),
- from_term([{a,[{1,a}]},{b,[{2,b}]}])),
- ?line F13 = from_term([{a,b,c},{a,b,d},{b,b,c},{a,c,c},{a,c,d},{b,c,c}]),
- ?line eval(partition_family(2, F13),
- from_term([{b,[{a,b,c},{a,b,d},{b,b,c}]},
- {c,[{a,c,c},{a,c,d},{b,c,c}]}])),
+ eval(partition_family(1, relation([{1,a},{1,b},{2,c},{2,d}])),
+ from_term([{1,[{1,a},{1,b}]},{2,[{2,c},{2,d}]}])),
+ eval(partition_family(1, relation([{1,a},{2,b}])),
+ from_term([{1,[{1,a}]},{2,[{2,b}]}])),
+ eval(partition_family(2, relation([{1,a},{1,b},{2,a},{2,b},{3,c}])),
+ from_term([{a,[{1,a},{2,a}]},{b,[{1,b},{2,b}]},{c,[{3,c}]}])),
+ eval(partition_family(2, relation([{1,a}])),
+ from_term([{a,[{1,a}]}])),
+ eval(partition_family(2, relation([{1,a},{2,a},{3,a}])),
+ from_term([{a,[{1,a},{2,a},{3,a}]}])),
+ eval(partition_family(2, relation([{1,a},{2,b}])),
+ from_term([{a,[{1,a}]},{b,[{2,b}]}])),
+ F13 = from_term([{a,b,c},{a,b,d},{b,b,c},{a,c,c},{a,c,d},{b,c,c}]),
+ eval(partition_family(2, F13),
+ from_term([{b,[{a,b,c},{a,b,d},{b,b,c}]},
+ {c,[{a,c,c},{a,c,d},{b,c,c}]}])),
Fun1 = {external, fun({A,_B}) -> {A} end},
- ?line eval(partition_family(Fun1, relation([{a,1},{a,2},{b,3}])),
- from_term([{{a},[{a,1},{a,2}]},{{b},[{b,3}]}])),
+ eval(partition_family(Fun1, relation([{a,1},{a,2},{b,3}])),
+ from_term([{{a},[{a,1},{a,2}]},{{b},[{b,3}]}])),
Fun2 = fun(S) -> {A,_B} = to_external(S), from_term({A}) end,
- ?line eval(partition_family(Fun2, relation([{a,1},{a,2},{b,3}])),
- from_term([{{a},[{a,1},{a,2}]},{{b},[{b,3}]}])),
+ eval(partition_family(Fun2, relation([{a,1},{a,2},{b,3}])),
+ from_term([{{a},[{a,1},{a,2}]},{{b},[{b,3}]}])),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch partition_family({external, fun({A,_}) -> {A,0} end},
from_term([{1,a}]))),
- ?line [{{atom,atom},[{atom,atom,atom,atom}]}] =
+ [{{atom,atom},[{atom,atom,atom,atom}]}] =
type(partition_family({external, fun({A,_B,C,_D}) -> {C,A} end},
relation([],4))),
Fun3 = fun(S) -> from_term({to_external(S),0}, {type(S),atom}) end,
- ?line eval(partition_family(Fun3, E), E),
- ?line eval(partition_family(Fun3, set([a,b])),
- from_term([{{a,0},[a]}, {{b,0},[b]}])),
- ?line eval(partition_family(Fun3, relation([{a,1},{b,2}])),
- from_term([{{{a,1},0},[{a,1}]},{{{b,2},0},[{b,2}]}])),
- ?line eval(partition_family(Fun3, from_term([[a],[b]])),
- from_term([{{[a],0},[[a]]}, {{[b],0},[[b]]}])),
- ?line partition_family({external, fun(X) -> X end}, E),
+ eval(partition_family(Fun3, E), E),
+ eval(partition_family(Fun3, set([a,b])),
+ from_term([{{a,0},[a]}, {{b,0},[b]}])),
+ eval(partition_family(Fun3, relation([{a,1},{b,2}])),
+ from_term([{{{a,1},0},[{a,1}]},{{{b,2},0},[{b,2}]}])),
+ eval(partition_family(Fun3, from_term([[a],[b]])),
+ from_term([{{[a],0},[[a]]}, {{[b],0},[[b]]}])),
+ partition_family({external, fun(X) -> X end}, E),
F = 0.0, I = round(F),
- ?line FR = relation([{I,a},{F,b}]),
+ FR = relation([{I,a},{F,b}]),
if
F == I -> % term ordering
- ?line true = (1 =:= no_elements(partition_family(1, FR)));
+ true = (1 =:= no_elements(partition_family(1, FR)));
true ->
- ?line eval(partition_family(1, FR),
- from_term([{I,[{I,a}]},{F,[{F,b}]}]))
+ eval(partition_family(1, FR),
+ from_term([{I,[{I,a}]},{F,[{F,b}]}]))
end,
%% set of sets
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch partition_family({external, fun(X) -> X end},
from_term([], [[atom]]))),
- ?line {'EXIT', {badarg, _}} =
+ {'EXIT', {badarg, _}} =
(catch partition_family({external, fun(X) -> X end},
from_term([[a]]))),
- ?line eval(partition_family(fun sofs:union/1,
- from_term([[[1],[1,2]], [[1,2]]])),
- from_term([{[1,2], [[[1],[1,2]],[[1,2]]]}])),
- ?line eval(partition_family(fun(X) -> X end,
- from_term([[1],[1,2],[1,2,3]])),
- from_term([{[1],[[1]]},{[1,2],[[1,2]]},{[1,2,3],[[1,2,3]]}])),
-
- ?line eval(partition_family(fun(_) -> from_term([a]) end,
- from_term([], [[atom]])),
- E),
+ eval(partition_family(fun sofs:union/1,
+ from_term([[[1],[1,2]], [[1,2]]])),
+ from_term([{[1,2], [[[1],[1,2]],[[1,2]]]}])),
+ eval(partition_family(fun(X) -> X end,
+ from_term([[1],[1,2],[1,2,3]])),
+ from_term([{[1],[[1]]},{[1,2],[[1,2]]},{[1,2,3],[[1,2,3]]}])),
+
+ eval(partition_family(fun(_) -> from_term([a]) end,
+ from_term([], [[atom]])),
+ E),
Fun10 = fun(S) ->
- %% Cheating a lot...
- case to_external(S) of
- [1] -> from_term({1,1});
- _ -> S
- end
- end,
+ %% Cheating a lot...
+ case to_external(S) of
+ [1] -> from_term({1,1});
+ _ -> S
+ end
+ end,
- ?line eval(partition_family(Fun10, from_term([[1]])),
- from_term([{{1,1},[[1]]}])),
- ?line eval(partition_family(fun(_) -> from_term({a}) end,
- from_term([[a]])),
- from_term([{{a},[[a]]}])),
- ?line {'EXIT', {badarg, _}} =
- (catch partition_family(fun(_) -> {a} end, from_term([[a]]))),
+ eval(partition_family(Fun10, from_term([[1]])),
+ from_term([{{1,1},[[1]]}])),
+ eval(partition_family(fun(_) -> from_term({a}) end,
+ from_term([[a]])),
+ from_term([{{a},[[a]]}])),
+ {'EXIT', {badarg, _}} =
+ (catch partition_family(fun(_) -> {a} end, from_term([[a]]))),
ok.
%% Not meant to be efficient...
diff --git a/lib/stdlib/test/stdlib_SUITE.erl b/lib/stdlib/test/stdlib_SUITE.erl
index fa9d0f6b55..d55635a735 100644
--- a/lib/stdlib/test/stdlib_SUITE.erl
+++ b/lib/stdlib/test/stdlib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
%%% Purpose:Stdlib application test suite.
%%%-----------------------------------------------------------------
-module(stdlib_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-compile(export_all).
@@ -51,15 +51,12 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, _Config) ->
ok.
-%
-% Test cases starts here.
-%
-app_test(suite) ->
- [];
-app_test(doc) ->
- ["Application consistency test."];
+%%
+%% Test cases starts here.
+%%
+%% Application consistency test.
app_test(Config) when is_list(Config) ->
- ?t:app_test(stdlib),
+ test_server:app_test(stdlib),
ok.
%% Test that appup allows upgrade from/downgrade to a maximum of one
@@ -160,10 +157,8 @@ check_appup([],_,_) ->
-include_lib("stdlib/include/assert.hrl").
-include_lib("stdlib/include/assert.hrl"). % test repeated inclusion
-assert_test(suite) ->
- [];
-assert_test(doc) ->
- ["Assert macros test."];
+
+%% Assert macros test.
assert_test(_Config) ->
ok = ?assert(true),
{'EXIT',{{assert, _},_}} = (catch ?assert(false)),
diff --git a/lib/stdlib/test/string_SUITE.erl b/lib/stdlib/test/string_SUITE.erl
index 53eea6f180..836f9e5142 100644
--- a/lib/stdlib/test/string_SUITE.erl
+++ b/lib/stdlib/test/string_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -21,28 +21,24 @@
%%% Purpose: string test suite.
%%%-----------------------------------------------------------------
-module(string_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-
-% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-
-% Test server specific exports
+%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
-export([init_per_testcase/2, end_per_testcase/2]).
-% Test cases must be exported.
+%% Test cases must be exported.
-export([len/1,equal/1,concat/1,chr_rchr/1,str_rstr/1]).
-export([span_cspan/1,substr/1,tokens/1,chars/1]).
-export([copies/1,words/1,strip/1,sub_word/1,left_right/1]).
-export([sub_string/1,centre/1, join/1]).
-export([to_integer/1,to_float/1]).
-export([to_upper_to_lower/1]).
-%%
-%% all/1
-%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[len, equal, concat, chr_rchr, str_rstr, span_cspan,
@@ -67,155 +63,125 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-%
-% Test cases starts here.
-%
+%%
+%% Test cases starts here.
+%%
-len(suite) ->
- [];
-len(doc) ->
- [];
len(Config) when is_list(Config) ->
- ?line 0 = string:len(""),
- ?line L = tuple_size(list_to_tuple(atom_to_list(?MODULE))),
- ?line L = string:len(atom_to_list(?MODULE)),
+ 0 = string:len(""),
+ L = tuple_size(list_to_tuple(atom_to_list(?MODULE))),
+ L = string:len(atom_to_list(?MODULE)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:len({})),
+ {'EXIT',_} = (catch string:len({})),
ok.
-equal(suite) ->
- [];
-equal(doc) ->
- [];
equal(Config) when is_list(Config) ->
- ?line true = string:equal("", ""),
- ?line false = string:equal("", " "),
- ?line true = string:equal("laban", "laban"),
- ?line false = string:equal("skvimp", "skvump"),
+ true = string:equal("", ""),
+ false = string:equal("", " "),
+ true = string:equal("laban", "laban"),
+ false = string:equal("skvimp", "skvump"),
%% invalid arg type
- ?line true = string:equal(2, 2), % not good, should crash
+ true = string:equal(2, 2), % not good, should crash
ok.
-concat(suite) ->
- [];
-concat(doc) ->
- [];
concat(Config) when is_list(Config) ->
- ?line "erlang rules" = string:concat("erlang ", "rules"),
- ?line "" = string:concat("", ""),
- ?line "x" = string:concat("x", ""),
- ?line "y" = string:concat("", "y"),
+ "erlang rules" = string:concat("erlang ", "rules"),
+ "" = string:concat("", ""),
+ "x" = string:concat("x", ""),
+ "y" = string:concat("", "y"),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:concat(hello, please)),
+ {'EXIT',_} = (catch string:concat(hello, please)),
ok.
-chr_rchr(suite) ->
- [];
-chr_rchr(doc) ->
- [];
chr_rchr(Config) when is_list(Config) ->
{_,_,X} = erlang:timestamp(),
- ?line 0 = string:chr("", (X rem (255-32)) + 32),
- ?line 0 = string:rchr("", (X rem (255-32)) + 32),
- ?line 1 = string:chr("x", $x),
- ?line 1 = string:rchr("x", $x),
- ?line 1 = string:chr("xx", $x),
- ?line 2 = string:rchr("xx", $x),
- ?line 3 = string:chr("xyzyx", $z),
- ?line 3 = string:rchr("xyzyx", $z),
+ 0 = string:chr("", (X rem (255-32)) + 32),
+ 0 = string:rchr("", (X rem (255-32)) + 32),
+ 1 = string:chr("x", $x),
+ 1 = string:rchr("x", $x),
+ 1 = string:chr("xx", $x),
+ 2 = string:rchr("xx", $x),
+ 3 = string:chr("xyzyx", $z),
+ 3 = string:rchr("xyzyx", $z),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:chr(hello, $h)),
+ {'EXIT',_} = (catch string:chr(hello, $h)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:chr("hello", h)),
+ {'EXIT',_} = (catch string:chr("hello", h)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:rchr(hello, $h)),
+ {'EXIT',_} = (catch string:rchr(hello, $h)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:rchr("hello", h)),
+ {'EXIT',_} = (catch string:rchr("hello", h)),
ok.
-str_rstr(suite) ->
- [];
-str_rstr(doc) ->
- [];
str_rstr(Config) when is_list(Config) ->
{_,_,X} = erlang:timestamp(),
- ?line 0 = string:str("", [(X rem (255-32)) + 32]),
- ?line 0 = string:rstr("", [(X rem (255-32)) + 32]),
- ?line 1 = string:str("x", "x"),
- ?line 1 = string:rstr("x", "x"),
- ?line 0 = string:str("hello", ""),
- ?line 0 = string:rstr("hello", ""),
- ?line 1 = string:str("xxxx", "xx"),
- ?line 3 = string:rstr("xxxx", "xx"),
- ?line 3 = string:str("xy z yx", " z"),
- ?line 3 = string:rstr("xy z yx", " z"),
+ 0 = string:str("", [(X rem (255-32)) + 32]),
+ 0 = string:rstr("", [(X rem (255-32)) + 32]),
+ 1 = string:str("x", "x"),
+ 1 = string:rstr("x", "x"),
+ 0 = string:str("hello", ""),
+ 0 = string:rstr("hello", ""),
+ 1 = string:str("xxxx", "xx"),
+ 3 = string:rstr("xxxx", "xx"),
+ 3 = string:str("xy z yx", " z"),
+ 3 = string:rstr("xy z yx", " z"),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:str(hello, "he")),
+ {'EXIT',_} = (catch string:str(hello, "he")),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:str("hello", he)),
+ {'EXIT',_} = (catch string:str("hello", he)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:rstr(hello, "he")),
+ {'EXIT',_} = (catch string:rstr(hello, "he")),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:rstr("hello", he)),
+ {'EXIT',_} = (catch string:rstr("hello", he)),
ok.
-span_cspan(suite) ->
- [];
-span_cspan(doc) ->
- [];
span_cspan(Config) when is_list(Config) ->
- ?line 0 = string:span("", "1"),
- ?line 0 = string:span("1", ""),
- ?line 0 = string:cspan("", "1"),
- ?line 1 = string:cspan("1", ""),
- ?line 1 = string:span("1 ", "1"),
- ?line 5 = string:span(" 1 ", "12 "),
- ?line 6 = string:span("1231234", "123"),
- ?line 0 = string:cspan("1 ", "1"),
- ?line 1 = string:cspan("3 ", "12 "),
- ?line 6 = string:cspan("1231234", "4"),
+ 0 = string:span("", "1"),
+ 0 = string:span("1", ""),
+ 0 = string:cspan("", "1"),
+ 1 = string:cspan("1", ""),
+ 1 = string:span("1 ", "1"),
+ 5 = string:span(" 1 ", "12 "),
+ 6 = string:span("1231234", "123"),
+ 0 = string:cspan("1 ", "1"),
+ 1 = string:cspan("3 ", "12 "),
+ 6 = string:cspan("1231234", "4"),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:span(1234, "1")),
+ {'EXIT',_} = (catch string:span(1234, "1")),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:span(1234, "1")),
+ {'EXIT',_} = (catch string:span(1234, "1")),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:cspan("1234", 1)),
+ {'EXIT',_} = (catch string:cspan("1234", 1)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:cspan("1234", 4)),
+ {'EXIT',_} = (catch string:cspan("1234", 4)),
ok.
-substr(suite) ->
- [];
-substr(doc) ->
- [];
substr(Config) when is_list(Config) ->
- ?line {'EXIT',_} = (catch string:substr("", 0)),
- ?line [] = string:substr("", 1),
- ?line {'EXIT',_} = (catch string:substr("", 2)),
- ?line [] = string:substr("1", 2),
- ?line {'EXIT',_} = (catch string:substr("", 0, 1)),
- ?line [] = string:substr("", 1, 1),
- ?line [] = string:substr("", 1, 2),
- ?line {'EXIT',_} = (catch string:substr("", 2, 2)),
- ?line "1234" = string:substr("1234", 1),
- ?line "1234" = string:substr("1234", 1, 4),
- ?line "1234" = string:substr("1234", 1, 5),
- ?line "23" = string:substr("1234", 2, 2),
- ?line "4" = string:substr("1234", 4),
- ?line "" = string:substr("1234", 4, 0),
- ?line "4" = string:substr("1234", 4, 1),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:substr(1234, 1)),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:substr("1234", "1")),
+ {'EXIT',_} = (catch string:substr("", 0)),
+ [] = string:substr("", 1),
+ {'EXIT',_} = (catch string:substr("", 2)),
+ [] = string:substr("1", 2),
+ {'EXIT',_} = (catch string:substr("", 0, 1)),
+ [] = string:substr("", 1, 1),
+ [] = string:substr("", 1, 2),
+ {'EXIT',_} = (catch string:substr("", 2, 2)),
+ "1234" = string:substr("1234", 1),
+ "1234" = string:substr("1234", 1, 4),
+ "1234" = string:substr("1234", 1, 5),
+ "23" = string:substr("1234", 2, 2),
+ "4" = string:substr("1234", 4),
+ "" = string:substr("1234", 4, 0),
+ "4" = string:substr("1234", 4, 1),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:substr(1234, 1)),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:substr("1234", "1")),
ok.
tokens(Config) when is_list(Config) ->
@@ -252,261 +218,217 @@ replace_sep(C, Seps, New) ->
false -> C
end.
-chars(suite) ->
- [];
-chars(doc) ->
- [];
chars(Config) when is_list(Config) ->
- ?line [] = string:chars($., 0),
- ?line [] = string:chars($., 0, []),
- ?line 10 = length(string:chars(32, 10, [])),
- ?line "aaargh" = string:chars($a, 3, "rgh"),
+ [] = string:chars($., 0),
+ [] = string:chars($., 0, []),
+ 10 = length(string:chars(32, 10, [])),
+ "aaargh" = string:chars($a, 3, "rgh"),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:chars($x, [])),
+ {'EXIT',_} = (catch string:chars($x, [])),
ok.
-copies(suite) ->
- [];
-copies(doc) ->
- [];
copies(Config) when is_list(Config) ->
- ?line "" = string:copies("", 10),
- ?line "" = string:copies(".", 0),
- ?line "." = string:copies(".", 1),
- ?line 30 = length(string:copies("123", 10)),
+ "" = string:copies("", 10),
+ "" = string:copies(".", 0),
+ "." = string:copies(".", 1),
+ 30 = length(string:copies("123", 10)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:copies("hej", -1)),
- ?line {'EXIT',_} = (catch string:copies("hej", 2.0)),
+ {'EXIT',_} = (catch string:copies("hej", -1)),
+ {'EXIT',_} = (catch string:copies("hej", 2.0)),
ok.
-words(suite) ->
- [];
-words(doc) ->
- [];
words(Config) when is_list(Config) ->
- ?line 1 = string:words(""),
- ?line 1 = string:words("", $,),
- ?line 1 = string:words("hello"),
- ?line 1 = string:words("hello", $,),
- ?line 1 = string:words("...", $.),
- ?line 2 = string:words("2.35", $.),
- ?line 100 = string:words(string:copies(". ", 100)),
+ 1 = string:words(""),
+ 1 = string:words("", $,),
+ 1 = string:words("hello"),
+ 1 = string:words("hello", $,),
+ 1 = string:words("...", $.),
+ 2 = string:words("2.35", $.),
+ 100 = string:words(string:copies(". ", 100)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:chars(hej, 1)),
+ {'EXIT',_} = (catch string:chars(hej, 1)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:chars("hej", 1, " ")),
+ {'EXIT',_} = (catch string:chars("hej", 1, " ")),
ok.
-strip(suite) ->
- [];
-strip(doc) ->
- [];
strip(Config) when is_list(Config) ->
- ?line "" = string:strip(""),
- ?line "" = string:strip("", both),
- ?line "" = string:strip("", both, $.),
- ?line "hej" = string:strip(" hej "),
- ?line "hej " = string:strip(" hej ", left),
- ?line " hej" = string:strip(" hej ", right),
- ?line " hej " = string:strip(" hej ", right, $.),
- ?line "hej hopp" = string:strip(" hej hopp ", both),
+ "" = string:strip(""),
+ "" = string:strip("", both),
+ "" = string:strip("", both, $.),
+ "hej" = string:strip(" hej "),
+ "hej " = string:strip(" hej ", left),
+ " hej" = string:strip(" hej ", right),
+ " hej " = string:strip(" hej ", right, $.),
+ "hej hopp" = string:strip(" hej hopp ", both),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:strip(hej)),
+ {'EXIT',_} = (catch string:strip(hej)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:strip(" hej", up)),
+ {'EXIT',_} = (catch string:strip(" hej", up)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:strip(" hej", left, " ")), % not good
+ {'EXIT',_} = (catch string:strip(" hej", left, " ")), % not good
ok.
-sub_word(suite) ->
- [];
-sub_word(doc) ->
- [];
sub_word(Config) when is_list(Config) ->
- ?line "" = string:sub_word("", 1),
- ?line "" = string:sub_word("", 1, $,),
- ?line {'EXIT',_} = (catch string:sub_word("1 2 3", 0)),
- ?line "" = string:sub_word("1 2 3", 4),
- ?line "llo th" = string:sub_word("but hello there", 2, $e),
+ "" = string:sub_word("", 1),
+ "" = string:sub_word("", 1, $,),
+ {'EXIT',_} = (catch string:sub_word("1 2 3", 0)),
+ "" = string:sub_word("1 2 3", 4),
+ "llo th" = string:sub_word("but hello there", 2, $e),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:sub_word('hello there', 1)),
+ {'EXIT',_} = (catch string:sub_word('hello there', 1)),
%% invalid arg type
- ?line {'EXIT',_} = (catch string:sub_word("hello there", 1, "e")),
+ {'EXIT',_} = (catch string:sub_word("hello there", 1, "e")),
ok.
-left_right(suite) ->
- [];
-left_right(doc) ->
- [];
left_right(Config) when is_list(Config) ->
- ?line "" = string:left("", 0),
- ?line "" = string:left("hej", 0),
- ?line "" = string:left("hej", 0, $.),
- ?line "" = string:right("", 0),
- ?line "" = string:right("hej", 0),
- ?line "" = string:right("hej", 0, $.),
- ?line "123 " = string:left("123 ", 5),
- ?line " 123" = string:right(" 123", 5),
- ?line "123!!" = string:left("123!", 5, $!),
- ?line "==123" = string:right("=123", 5, $=),
- ?line "1" = string:left("123", 1, $.),
- ?line "3" = string:right("123", 1, $.),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:left(hello, 5)),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:right(hello, 5)),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:left("hello", 5, ".")),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:right("hello", 5, ".")),
+ "" = string:left("", 0),
+ "" = string:left("hej", 0),
+ "" = string:left("hej", 0, $.),
+ "" = string:right("", 0),
+ "" = string:right("hej", 0),
+ "" = string:right("hej", 0, $.),
+ "123 " = string:left("123 ", 5),
+ " 123" = string:right(" 123", 5),
+ "123!!" = string:left("123!", 5, $!),
+ "==123" = string:right("=123", 5, $=),
+ "1" = string:left("123", 1, $.),
+ "3" = string:right("123", 1, $.),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:left(hello, 5)),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:right(hello, 5)),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:left("hello", 5, ".")),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:right("hello", 5, ".")),
ok.
-sub_string(suite) ->
- [];
-sub_string(doc) ->
- [];
sub_string(Config) when is_list(Config) ->
- ?line {'EXIT',_} = (catch string:sub_string("", 0)),
- ?line [] = string:sub_string("", 1),
- ?line {'EXIT',_} = (catch string:sub_string("", 2)),
- ?line [] = string:sub_string("1", 2),
- ?line {'EXIT',_} = (catch string:sub_string("", 0, 1)),
- ?line [] = string:sub_string("", 1, 1),
- ?line [] = string:sub_string("", 1, 2),
- ?line {'EXIT',_} = (catch string:sub_string("", 2, 2)),
- ?line "1234" = string:sub_string("1234", 1),
- ?line "1234" = string:sub_string("1234", 1, 4),
- ?line "1234" = string:sub_string("1234", 1, 5),
- ?line "23" = string:sub_string("1234", 2, 3),
- ?line "4" = string:sub_string("1234", 4),
- ?line "4" = string:sub_string("1234", 4, 4),
- ?line "4" = string:sub_string("1234", 4, 5),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:sub_string(1234, 1)),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:sub_string("1234", "1")),
+ {'EXIT',_} = (catch string:sub_string("", 0)),
+ [] = string:sub_string("", 1),
+ {'EXIT',_} = (catch string:sub_string("", 2)),
+ [] = string:sub_string("1", 2),
+ {'EXIT',_} = (catch string:sub_string("", 0, 1)),
+ [] = string:sub_string("", 1, 1),
+ [] = string:sub_string("", 1, 2),
+ {'EXIT',_} = (catch string:sub_string("", 2, 2)),
+ "1234" = string:sub_string("1234", 1),
+ "1234" = string:sub_string("1234", 1, 4),
+ "1234" = string:sub_string("1234", 1, 5),
+ "23" = string:sub_string("1234", 2, 3),
+ "4" = string:sub_string("1234", 4),
+ "4" = string:sub_string("1234", 4, 4),
+ "4" = string:sub_string("1234", 4, 5),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:sub_string(1234, 1)),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:sub_string("1234", "1")),
ok.
-centre(suite) ->
- [];
-centre(doc) ->
- [];
centre(Config) when is_list(Config) ->
- ?line "" = string:centre("", 0),
- ?line "" = string:centre("1", 0),
- ?line "" = string:centre("", 0, $-),
- ?line "" = string:centre("1", 0, $-),
- ?line "gd" = string:centre("agda", 2),
- ?line "agda " = string:centre("agda", 5),
- ?line " agda " = string:centre("agda", 6),
- ?line "agda." = string:centre("agda", 5, $.),
- ?line "--agda--" = string:centre("agda", 8, $-),
- ?line "agda" = string:centre("agda", 4),
- %% invalid arg type
- ?line {'EXIT',_} = (catch string:centre(hello, 10)),
+ "" = string:centre("", 0),
+ "" = string:centre("1", 0),
+ "" = string:centre("", 0, $-),
+ "" = string:centre("1", 0, $-),
+ "gd" = string:centre("agda", 2),
+ "agda " = string:centre("agda", 5),
+ " agda " = string:centre("agda", 6),
+ "agda." = string:centre("agda", 5, $.),
+ "--agda--" = string:centre("agda", 8, $-),
+ "agda" = string:centre("agda", 4),
+ %% invalid arg type
+ {'EXIT',_} = (catch string:centre(hello, 10)),
ok.
-to_integer(suite) ->
- [];
-to_integer(doc) ->
- [];
to_integer(Config) when is_list(Config) ->
- ?line {1,""} = test_to_integer("1"),
- ?line {1,""} = test_to_integer("+1"),
- ?line {-1,""} = test_to_integer("-1"),
- ?line {1,"="} = test_to_integer("1="),
- ?line {7,"F"} = test_to_integer("7F"),
- ?line {709,""} = test_to_integer("709"),
- ?line {709,"*2"} = test_to_integer("709*2"),
- ?line {0,"xAB"} = test_to_integer("0xAB"),
- ?line {16,"#FF"} = test_to_integer("16#FF"),
- ?line {error,no_integer} = test_to_integer(""),
- ?line {error,no_integer} = test_to_integer("!1"),
- ?line {error,no_integer} = test_to_integer("F1"),
- ?line {error,not_a_list} = test_to_integer('23'),
- ?line {3,[[]]} = test_to_integer([$3,[]]),
- ?line {3,[hello]} = test_to_integer([$3,hello]),
+ {1,""} = test_to_integer("1"),
+ {1,""} = test_to_integer("+1"),
+ {-1,""} = test_to_integer("-1"),
+ {1,"="} = test_to_integer("1="),
+ {7,"F"} = test_to_integer("7F"),
+ {709,""} = test_to_integer("709"),
+ {709,"*2"} = test_to_integer("709*2"),
+ {0,"xAB"} = test_to_integer("0xAB"),
+ {16,"#FF"} = test_to_integer("16#FF"),
+ {error,no_integer} = test_to_integer(""),
+ {error,no_integer} = test_to_integer("!1"),
+ {error,no_integer} = test_to_integer("F1"),
+ {error,not_a_list} = test_to_integer('23'),
+ {3,[[]]} = test_to_integer([$3,[]]),
+ {3,[hello]} = test_to_integer([$3,hello]),
ok.
test_to_integer(Str) ->
io:format("Checking ~p~n", [Str]),
case string:to_integer(Str) of
{error,_Reason} = Bad ->
- ?line {'EXIT',_} = (catch list_to_integer(Str)),
+ {'EXIT',_} = (catch list_to_integer(Str)),
Bad;
{F,_Rest} = Res ->
- ?line _ = integer_to_list(F),
+ _ = integer_to_list(F),
Res
end.
-to_float(suite) ->
- [];
-to_float(doc) ->
- [];
to_float(Config) when is_list(Config) ->
- ?line {1.2,""} = test_to_float("1.2"),
- ?line {1.2,""} = test_to_float("1,2"),
- ?line {120.0,""} = test_to_float("1.2e2"),
- ?line {120.0,""} = test_to_float("+1,2e2"),
- ?line {-120.0,""} = test_to_float("-1.2e2"),
- ?line {-120.0,""} = test_to_float("-1,2e+2"),
- ?line {-1.2e-2,""} = test_to_float("-1.2e-2"),
- ?line {1.2,"="} = test_to_float("1.2="),
- ?line {7.9,"e"} = test_to_float("7.9e"),
- ?line {7.9,"ee"} = test_to_float("7.9ee"),
- ?line {7.9,"e+"} = test_to_float("7.9e+"),
- ?line {7.9,"e-"} = test_to_float("7.9e-"),
- ?line {7.9,"e++"} = test_to_float("7.9e++"),
- ?line {7.9,"e--"} = test_to_float("7.9e--"),
- ?line {7.9,"e+e"} = test_to_float("7.9e+e"),
- ?line {7.9,"e-e"} = test_to_float("7.9e-e"),
- ?line {7.9,"e+."} = test_to_float("7.9e+."),
- ?line {7.9,"e-."} = test_to_float("7.9e-."),
- ?line {7.9,"e+,"} = test_to_float("7.9e+,"),
- ?line {7.9,"e-,"} = test_to_float("7.9e-,"),
- ?line {error,no_float} = test_to_float(""),
- ?line {error,no_float} = test_to_float("e1,0"),
- ?line {error,no_float} = test_to_float("1;0"),
- ?line {error,no_float} = test_to_float("1"),
- ?line {error,no_float} = test_to_float("1e"),
- ?line {error,no_float} = test_to_float("2."),
- ?line {error,not_a_list} = test_to_float('2.3'),
- ?line {2.3,[[]]} = test_to_float([$2,$.,$3,[]]),
- ?line {2.3,[hello]} = test_to_float([$2,$.,$3,hello]),
+ {1.2,""} = test_to_float("1.2"),
+ {1.2,""} = test_to_float("1,2"),
+ {120.0,""} = test_to_float("1.2e2"),
+ {120.0,""} = test_to_float("+1,2e2"),
+ {-120.0,""} = test_to_float("-1.2e2"),
+ {-120.0,""} = test_to_float("-1,2e+2"),
+ {-1.2e-2,""} = test_to_float("-1.2e-2"),
+ {1.2,"="} = test_to_float("1.2="),
+ {7.9,"e"} = test_to_float("7.9e"),
+ {7.9,"ee"} = test_to_float("7.9ee"),
+ {7.9,"e+"} = test_to_float("7.9e+"),
+ {7.9,"e-"} = test_to_float("7.9e-"),
+ {7.9,"e++"} = test_to_float("7.9e++"),
+ {7.9,"e--"} = test_to_float("7.9e--"),
+ {7.9,"e+e"} = test_to_float("7.9e+e"),
+ {7.9,"e-e"} = test_to_float("7.9e-e"),
+ {7.9,"e+."} = test_to_float("7.9e+."),
+ {7.9,"e-."} = test_to_float("7.9e-."),
+ {7.9,"e+,"} = test_to_float("7.9e+,"),
+ {7.9,"e-,"} = test_to_float("7.9e-,"),
+ {error,no_float} = test_to_float(""),
+ {error,no_float} = test_to_float("e1,0"),
+ {error,no_float} = test_to_float("1;0"),
+ {error,no_float} = test_to_float("1"),
+ {error,no_float} = test_to_float("1e"),
+ {error,no_float} = test_to_float("2."),
+ {error,not_a_list} = test_to_float('2.3'),
+ {2.3,[[]]} = test_to_float([$2,$.,$3,[]]),
+ {2.3,[hello]} = test_to_float([$2,$.,$3,hello]),
ok.
test_to_float(Str) ->
io:format("Checking ~p~n", [Str]),
case string:to_float(Str) of
{error,_Reason} = Bad ->
- ?line {'EXIT',_} = (catch list_to_float(Str)),
+ {'EXIT',_} = (catch list_to_float(Str)),
Bad;
{F,_Rest} = Res ->
- ?line _ = float_to_list(F),
+ _ = float_to_list(F),
Res
end.
-
-to_upper_to_lower(suite) ->
- [];
-to_upper_to_lower(doc) ->
- [];
+
to_upper_to_lower(Config) when is_list(Config) ->
- ?line "1234ABCDEFÅÄÖ=" = string:to_upper("1234abcdefåäö="),
- ?line "éèíúùòóåäöabc()" = string:to_lower("ÉÈÍÚÙÒÓÅÄÖabc()"),
- ?line All = lists:seq(0, 255),
+ "1234ABCDEFÅÄÖ=" = string:to_upper("1234abcdefåäö="),
+ "éèíúùòóåäöabc()" = string:to_lower("ÉÈÍÚÙÒÓÅÄÖabc()"),
+ All = lists:seq(0, 255),
- ?line UC = string:to_upper(All),
- ?line 256 = length(UC),
- ?line all_upper_latin1(UC, 0),
+ UC = string:to_upper(All),
+ 256 = length(UC),
+ all_upper_latin1(UC, 0),
- ?line LC = string:to_lower(All),
- ?line all_lower_latin1(LC, 0),
+ LC = string:to_lower(All),
+ all_lower_latin1(LC, 0),
- ?line LC = string:to_lower(string:to_upper(LC)),
- ?line LC = string:to_lower(string:to_upper(UC)),
- ?line UC = string:to_upper(string:to_lower(LC)),
- ?line UC = string:to_upper(string:to_lower(UC)),
+ LC = string:to_lower(string:to_upper(LC)),
+ LC = string:to_lower(string:to_upper(UC)),
+ UC = string:to_upper(string:to_lower(LC)),
+ UC = string:to_upper(string:to_lower(UC)),
ok.
all_upper_latin1([C|T], C) when 0 =< C, C < $a;
@@ -533,15 +455,11 @@ all_lower_latin1([H|T], C) when $A =< C, C =< $Z;
all_lower_latin1(T, C+1);
all_lower_latin1([], 256) -> ok.
-join(suite) ->
- [];
-join(doc) ->
- [];
join(Config) when is_list(Config) ->
- ?line "erlang rules" = string:join(["erlang", "rules"], " "),
- ?line "a,-,b,-,c" = string:join(["a", "b", "c"], ",-,"),
- ?line "1234" = string:join(["1", "2", "3", "4"], ""),
- ?line [] = string:join([], ""), % OTP-7231
+ "erlang rules" = string:join(["erlang", "rules"], " "),
+ "a,-,b,-,c" = string:join(["a", "b", "c"], ",-,"),
+ "1234" = string:join(["1", "2", "3", "4"], ""),
+ [] = string:join([], ""), % OTP-7231
%% invalid arg type
- ?line {'EXIT',_} = (catch string:join([apa], "")),
+ {'EXIT',_} = (catch string:join([apa], "")),
ok.
diff --git a/lib/stdlib/test/supervisor_1.erl b/lib/stdlib/test/supervisor_1.erl
index 7a74f51429..419026749b 100644
--- a/lib/stdlib/test/supervisor_1.erl
+++ b/lib/stdlib/test/supervisor_1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/supervisor_2.erl b/lib/stdlib/test/supervisor_2.erl
index e3767c1fd4..0c15f253b3 100644
--- a/lib/stdlib/test/supervisor_2.erl
+++ b/lib/stdlib/test/supervisor_2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/supervisor_3.erl b/lib/stdlib/test/supervisor_3.erl
index 9ff7df2503..082cdf2153 100644
--- a/lib/stdlib/test/supervisor_3.erl
+++ b/lib/stdlib/test/supervisor_3.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/supervisor_SUITE.erl b/lib/stdlib/test/supervisor_SUITE.erl
index 903ca76575..cd2c6b0cbb 100644
--- a/lib/stdlib/test/supervisor_SUITE.erl
+++ b/lib/stdlib/test/supervisor_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,6 @@
-module(supervisor_SUITE).
-include_lib("common_test/include/ct.hrl").
--define(TIMEOUT, ?t:minutes(1)).
%% Testserver specific export
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -67,7 +66,7 @@
%% Misc tests
-export([child_unlink/1, tree/1, count_children/1,
- count_restarting_children/1,
+ count_restarting_children/1, get_callback_module/1,
do_not_save_start_parameters_for_temporary_children/1,
do_not_save_child_specs_for_temporary_children/1,
simple_one_for_one_scale_many_temporary_children/1,
@@ -78,7 +77,8 @@
%%-------------------------------------------------------------------------
suite() ->
- [{ct_hooks,[ts_install_cth]}].
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[{group, sup_start}, {group, sup_start_map}, {group, sup_stop}, child_adm,
@@ -91,7 +91,7 @@ all() ->
{group, normal_termination},
{group, shutdown_termination},
{group, abnormal_termination}, child_unlink, tree,
- count_children, count_restarting_children,
+ count_children, count_restarting_children, get_callback_module,
do_not_save_start_parameters_for_temporary_children,
do_not_save_child_specs_for_temporary_children,
simple_one_for_one_scale_many_temporary_children, temporary_bystander,
@@ -144,11 +144,9 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?TIMEOUT),
- [{watchdog,Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- ?t:timetrap_cancel(?config(watchdog,Config)),
+end_per_testcase(_Case, _Config) ->
ok.
start_link(InitResult) ->
@@ -704,7 +702,7 @@ permanent_normal(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail({permanent_child_not_restarted, Child1})
+ ct:fail({permanent_child_not_restarted, Child1})
end,
[1,1,0,1] = get_child_counts(sup_test).
@@ -753,7 +751,7 @@ permanent_shutdown(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail({permanent_child_not_restarted, Child1})
+ ct:fail({permanent_child_not_restarted, Child1})
end,
[1,1,0,1] = get_child_counts(sup_test),
@@ -764,7 +762,7 @@ permanent_shutdown(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail({permanent_child_not_restarted, Child1})
+ ct:fail({permanent_child_not_restarted, Child1})
end,
[1,1,0,1] = get_child_counts(sup_test).
@@ -817,7 +815,7 @@ temporary_shutdown(Config) when is_list(Config) ->
faulty_application_shutdown(Config) when is_list(Config) ->
%% Set some paths
- AppDir = filename:join(?config(data_dir, Config), "app_faulty"),
+ AppDir = filename:join(proplists:get_value(data_dir, Config), "app_faulty"),
EbinDir = filename:join(AppDir, "ebin"),
%% Start faulty app
@@ -860,7 +858,7 @@ permanent_abnormal(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail({permanent_child_not_restarted, Child1})
+ ct:fail({permanent_child_not_restarted, Child1})
end,
[1,1,0,1] = get_child_counts(sup_test).
@@ -879,7 +877,7 @@ transient_abnormal(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail({transient_child_not_restarted, Child1})
+ ct:fail({transient_child_not_restarted, Child1})
end,
[1,1,0,1] = get_child_counts(sup_test).
@@ -975,9 +973,9 @@ one_for_one(Config) when is_list(Config) ->
if length(Children) == 2 ->
case lists:keysearch(CPid2, 2, Children) of
{value, _} -> ok;
- _ -> test_server:fail(bad_child)
+ _ -> ct:fail(bad_child)
end;
- true -> test_server:fail({bad_child_list, Children})
+ true -> ct:fail({bad_child_list, Children})
end,
[2,2,0,2] = get_child_counts(sup_test),
@@ -1028,7 +1026,7 @@ one_for_all(Config) when is_list(Config) ->
Children = supervisor:which_children(sup_test),
if length(Children) == 2 -> ok;
true ->
- test_server:fail({bad_child_list, Children})
+ ct:fail({bad_child_list, Children})
end,
%% Test that no old children is still alive
@@ -1103,7 +1101,7 @@ one_for_all_other_child_fails_restart(Config) when is_list(Config) ->
{_childName, _Pid} ->
exit(SupPid, kill),
check_exit([StarterPid, SupPid]),
- test_server:fail({restarting_child_not_terminated, Child1Pid2})
+ ct:fail({restarting_child_not_terminated, Child1Pid2})
end,
%% Let the restart complete.
Child1Pid3 = receive {child1, Pid5} -> Pid5 end,
@@ -1130,9 +1128,9 @@ simple_one_for_one(Config) when is_list(Config) ->
if length(Children) == 2 ->
case lists:keysearch(CPid2, 2, Children) of
{value, _} -> ok;
- _ -> test_server:fail(bad_child)
+ _ -> ct:fail(bad_child)
end;
- true -> test_server:fail({bad_child_list, Children})
+ true -> ct:fail({bad_child_list, Children})
end,
[1,2,0,2] = get_child_counts(sup_test),
@@ -1166,9 +1164,9 @@ simple_one_for_one_shutdown(Config) when is_list(Config) ->
if T < 1000*ShutdownTime ->
%% Because supervisor's children wait before exiting, it can't
%% terminate quickly
- test_server:fail({shutdown_too_short, T});
+ ct:fail({shutdown_too_short, T});
T >= 1000*5*ShutdownTime ->
- test_server:fail({shutdown_too_long, T});
+ ct:fail({shutdown_too_long, T});
true ->
check_exit([SupPid])
end.
@@ -1190,9 +1188,9 @@ simple_one_for_one_extra(Config) when is_list(Config) ->
if length(Children) == 2 ->
case lists:keysearch(CPid2, 2, Children) of
{value, _} -> ok;
- _ -> test_server:fail(bad_child)
+ _ -> ct:fail(bad_child)
end;
- true -> test_server:fail({bad_child_list, Children})
+ true -> ct:fail({bad_child_list, Children})
end,
[1,2,0,2] = get_child_counts(sup_test),
terminate(SupPid, CPid2, child2, abnormal),
@@ -1244,7 +1242,7 @@ rest_for_one(Config) when is_list(Config) ->
if length(Children) == 3 ->
ok;
true ->
- test_server:fail({bad_child_list, Children})
+ ct:fail({bad_child_list, Children})
end,
[3,3,0,3] = get_child_counts(sup_test),
@@ -1320,7 +1318,7 @@ rest_for_one_other_child_fails_restart(Config) when is_list(Config) ->
{child1, _Child1Pid3} ->
exit(SupPid, kill),
check_exit([StarterPid, SupPid]),
- test_server:fail({restarting_started_child, Child1Pid2})
+ ct:fail({restarting_started_child, Child1Pid2})
end,
StarterPid ! {stop, Self},
check_exit([StarterPid, SupPid]).
@@ -1350,7 +1348,7 @@ child_unlink(Config) when is_list(Config) ->
ok;
_ ->
exit(Pid, kill),
- test_server:fail(supervisor_hangs)
+ ct:fail(supervisor_hangs)
end.
%%-------------------------------------------------------------------------
%% Test a basic supervison tree.
@@ -1486,18 +1484,18 @@ count_restarting_children(Config) when is_list(Config) ->
supervisor_deadlock:restart_child(Ch1_1),
supervisor_deadlock:restart_child(Ch1_2),
supervisor_deadlock:restart_child(Ch1_3),
- test_server:sleep(400),
+ ct:sleep(400),
[1,3,0,3] = get_child_counts(SupPid),
[Ch2_1, Ch2_2, Ch2_3] = [C || {_,C,_,_} <- supervisor:which_children(SupPid)],
ets:insert(supervisor_deadlock,{fail_start,true}),
supervisor_deadlock:restart_child(Ch2_1),
supervisor_deadlock:restart_child(Ch2_2),
- test_server:sleep(4000), % allow restart to happen before proceeding
+ ct:sleep(4000), % allow restart to happen before proceeding
[1,1,0,3] = get_child_counts(SupPid),
ets:insert(supervisor_deadlock,{fail_start,false}),
- test_server:sleep(4000), % allow restart to happen before proceeding
+ ct:sleep(4000), % allow restart to happen before proceeding
[1,3,0,3] = get_child_counts(SupPid),
ok = supervisor:terminate_child(SupPid, Ch2_3),
@@ -1509,6 +1507,14 @@ count_restarting_children(Config) when is_list(Config) ->
[1,0,0,0] = get_child_counts(SupPid).
%%-------------------------------------------------------------------------
+%% Test get_callback_module
+get_callback_module(Config) when is_list(Config) ->
+ Child = {child, {supervisor_1, start_child, []}, temporary, 1000,
+ worker, []},
+ {ok, SupPid} = start_link({ok, {{simple_one_for_one, 2, 3600}, [Child]}}),
+ supervisor_SUITE = supervisor:get_callback_module(SupPid).
+
+%%-------------------------------------------------------------------------
%% Temporary children shall not be restarted so they should not save
%% start parameters, as it potentially can take up a huge amount of
%% memory for no purpose.
@@ -1689,7 +1695,7 @@ simple_one_for_one_scale_many_temporary_children(_Config) ->
%% The scaling shoul be linear (i.e.10, really), but we
%% give some extra here to avoid failing the test
%% unecessarily.
- ?t:fail({bad_scaling,Scaling});
+ ct:fail({bad_scaling,Scaling});
true ->
ok
end;
@@ -2118,14 +2124,14 @@ in_child_list([Pid | Rest], Pids) ->
true ->
in_child_list(Rest, Pids);
false ->
- test_server:fail(child_should_be_alive)
+ ct:fail(child_should_be_alive)
end.
not_in_child_list([], _) ->
true;
not_in_child_list([Pid | Rest], Pids) ->
case is_in_child_list(Pid, Pids) of
true ->
- test_server:fail(child_should_not_be_alive);
+ ct:fail(child_should_not_be_alive);
false ->
not_in_child_list(Rest, Pids)
end.
@@ -2146,7 +2152,7 @@ check_exit_reason(Reason) ->
{'EXIT', _, Reason} ->
ok;
{'EXIT', _, Else} ->
- test_server:fail({bad_exit_reason, Else})
+ ct:fail({bad_exit_reason, Else})
end.
check_exit_reason(Pid, Reason) ->
@@ -2154,5 +2160,5 @@ check_exit_reason(Pid, Reason) ->
{'EXIT', Pid, Reason} ->
ok;
{'EXIT', Pid, Else} ->
- test_server:fail({bad_exit_reason, Else})
+ ct:fail({bad_exit_reason, Else})
end.
diff --git a/lib/stdlib/test/supervisor_bridge_SUITE.erl b/lib/stdlib/test/supervisor_bridge_SUITE.erl
index b55fbfaf0d..279ae91cdc 100644
--- a/lib/stdlib/test/supervisor_bridge_SUITE.erl
+++ b/lib/stdlib/test/supervisor_bridge_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,13 +24,15 @@
simple_global_supervisor/1]).
-export([client/1,init/1,internal_loop_init/1,terminate/2,server9212/0]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(bridge_name,supervisor_bridge_SUITE_server).
-define(work_bridge_name,work_supervisor_bridge_SUITE_server).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[starting, mini_terminate, mini_die, badstart, simple_global_supervisor].
@@ -53,33 +55,30 @@ end_per_group(_GroupName, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-starting(suite) -> [];
starting(Config) when is_list(Config) ->
process_flag(trap_exit,true),
- ?line ignore = start(1),
- ?line {error,testing} = start(2),
+ ignore = start(1),
+ {error,testing} = start(2),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-mini_terminate(suite) -> [];
mini_terminate(Config) when is_list(Config) ->
miniappl(1),
ok.
-mini_die(suite) -> [];
mini_die(Config) when is_list(Config) ->
miniappl(2),
ok.
miniappl(N) ->
process_flag(trap_exit,true),
- ?line {ok,Server} = start(3),
- ?line Client = spawn_link(?MODULE,client,[N]),
- ?line Handle = test_server:timetrap(2000),
- ?line miniappl_loop(Client,Server),
- ?line test_server:timetrap_cancel(Handle).
+ {ok,Server} = start(3),
+ Client = spawn_link(?MODULE,client,[N]),
+ ct:timetrap({seconds,2}),
+ miniappl_loop(Client, Server).
+
miniappl_loop([],[]) ->
ok;
@@ -87,19 +86,19 @@ miniappl_loop(Client,Server) ->
io:format("Client ~p, Server ~p\n",[Client,Server]),
receive
{'EXIT',Client,_} ->
- ?line miniappl_loop([],Server);
+ miniappl_loop([],Server);
{'EXIT',Server,killed} -> %% terminate
- ?line miniappl_loop(Client,[]);
+ miniappl_loop(Client,[]);
{'EXIT',Server,died} -> %% die
- ?line miniappl_loop(Client,[]);
+ miniappl_loop(Client,[]);
{dying,_Reason} ->
- ?line miniappl_loop(Client, Server);
+ miniappl_loop(Client, Server);
Other ->
- ?line exit({failed,Other})
+ exit({failed,Other})
end.
%%%%%%%%%%%%%%%%%%%%
-% Client
+%% Client
client(N) ->
io:format("Client starting...\n"),
@@ -112,7 +111,7 @@ client(N) ->
exit(fine).
%%%%%%%%%%%%%%%%%%%%
-% Non compliant server
+%% Non compliant server
start(N) ->
supervisor_bridge:start_link({local,?bridge_name},?MODULE,N).
@@ -170,45 +169,44 @@ terminate(_Reason, _State) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-badstart(suite) -> [];
-badstart(doc) -> "Test various bad ways of starting a supervisor bridge.";
+%% Test various bad ways of starting a supervisor bridge.
badstart(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(1)),
-
%% Various bad arguments.
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch supervisor_bridge:start_link({xxx,?bridge_name},?MODULE,1)),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch supervisor_bridge:start_link({local,"foo"},?MODULE,1)),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch supervisor_bridge:start_link(?bridge_name,?MODULE,1)),
- ?line [] = test_server:messages_get(), % No messages waiting
+ receive
+ Msg ->
+ ct:fail({unexpected,Msg})
+ after 1 ->
+ ok
+ end,
%% Already started.
- ?line process_flag(trap_exit, true),
- ?line {ok,Pid} =
+ process_flag(trap_exit, true),
+ {ok,Pid} =
supervisor_bridge:start_link({local,?bridge_name},?MODULE,3),
- ?line {error,{already_started,Pid}} =
+ {error,{already_started,Pid}} =
supervisor_bridge:start_link({local,?bridge_name},?MODULE,3),
- ?line public_kill(),
+ public_kill(),
%% We used to wait 1 ms before retrieving the message queue,
%% but that might not always be enough if the machine is overloaded.
- ?line receive
- {'EXIT', Pid, killed} -> ok
- end,
- ?line test_server:timetrap_cancel(Dog),
+ receive
+ {'EXIT', Pid, killed} -> ok
+ end,
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% OTP-9212. Restart of global supervisor.
-simple_global_supervisor(suite) -> [];
-simple_global_supervisor(doc) -> "Globally registered supervisor.";
+%% Globally registered supervisor.
simple_global_supervisor(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap({seconds,10}),
Child = {child, {?MODULE,server9212,[]}, permanent, 2000, worker, []},
InitResult = {ok, {{one_for_all,3,60}, [Child]}},
@@ -216,16 +214,15 @@ simple_global_supervisor(Config) when is_list(Config) ->
supervisor:start_link({local,bridge9212}, ?MODULE, {4,InitResult}),
BN_1 = global:whereis_name(?bridge_name),
- ?line exit(BN_1, kill),
+ exit(BN_1, kill),
timer:sleep(200),
BN_2 = global:whereis_name(?bridge_name),
- ?line true = is_pid(BN_2),
- ?line true = BN_1 =/= BN_2,
+ true = is_pid(BN_2),
+ true = BN_1 =/= BN_2,
- ?line process_flag(trap_exit, true),
+ process_flag(trap_exit, true),
exit(Sup, kill),
- ?line receive {'EXIT', Sup, killed} -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ receive {'EXIT', Sup, killed} -> ok end,
ok.
server9212() ->
diff --git a/lib/stdlib/test/sys_SUITE.erl b/lib/stdlib/test/sys_SUITE.erl
index 573fa6f358..b44df0fbda 100644
--- a/lib/stdlib/test/sys_SUITE.erl
+++ b/lib/stdlib/test/sys_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
init_per_group/2,end_per_group/2,log/1,log_to_file/1,
stats/1,trace/1,suspend/1,install/1,special_process/1]).
-export([handle_call/3,terminate/2,init/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(server,sys_SUITE_server).
@@ -53,7 +53,6 @@ end_per_group(_GroupName, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-log(suite) -> [];
log(Config) when is_list(Config) ->
{ok,_Server} = start(),
ok = sys:log(?server,true),
@@ -63,9 +62,8 @@ log(Config) when is_list(Config) ->
stop(),
ok.
-log_to_file(suite) -> [];
log_to_file(Config) when is_list(Config) ->
- TempName = test_server:temp_name(?config(priv_dir,Config) ++ "sys."),
+ TempName = test_server:temp_name(proplists:get_value(priv_dir,Config) ++ "sys."),
{ok,_Server} = start(),
ok = sys:log_to_file(?server,TempName),
{ok,-44} = public_call(44),
@@ -74,20 +72,19 @@ log_to_file(Config) when is_list(Config) ->
Msg1 = io:get_line(Fd,''),
Msg2 = io:get_line(Fd,''),
file:close(Fd),
- lists:prefix("*DBG* sys_SUITE_server got call {req,44} from ",Msg1),
- lists:prefix("*DBG* sys_SUITE_server sent {ok,-44} to ",Msg2),
+ "*DBG* sys_SUITE_server got call {req,44} from " ++ _ = Msg1,
+ "*DBG* sys_SUITE_server sent {ok,-44} to " ++ _ = Msg2,
stop(),
ok.
-stats(suite) -> [];
stats(Config) when is_list(Config) ->
Self = self(),
{ok,_Server} = start(),
ok = sys:statistics(?server,true),
{ok,-44} = public_call(44),
{ok,Stats} = sys:statistics(?server,get),
- lists:member({messages_in,1},Stats),
- lists:member({messages_out,1},Stats),
+ true = lists:member({messages_in,1}, Stats),
+ true = lists:member({messages_out,0}, Stats),
ok = sys:statistics(?server,false),
{status,_Pid,{module,_Mod},[_PDict,running,Self,_,_]} =
sys:get_status(?server),
@@ -95,43 +92,40 @@ stats(Config) when is_list(Config) ->
stop(),
ok.
-trace(suite) -> [];
trace(Config) when is_list(Config) ->
{ok,_Server} = start(),
- test_server:sleep(2000),
- test_server:capture_start(),
+ ct:sleep(2000),
+ ct:capture_start(),
sys:trace(?server,true),
{ok,-44} = public_call(44),
%% ho, hum, allow for the io to reach us..
- test_server:sleep(1000),
- test_server:capture_stop(),
- [Msg1,Msg2] = test_server:capture_get(),
- lists:prefix("*DBG* sys_SUITE_server got call {req,44} from ",Msg1),
- lists:prefix("*DBG* sys_SUITE_server sent {ok,-44} to ",Msg2),
+ ct:sleep(1000),
+ ct:capture_stop(),
+ [Msg1,Msg2] = ct:capture_get(),
+ "*DBG* sys_SUITE_server got call {req,44} from " ++ _ = Msg1,
+ "*DBG* sys_SUITE_server sent {ok,-44} to " ++ _ = Msg2,
stop(),
ok.
-suspend(suite) -> [];
suspend(Config) when is_list(Config) ->
- ?line {ok,_Server} = start(),
- ?line sys:suspend(?server,1000),
- ?line {'EXIT',_} = (catch public_call(48)),
- ?line {status,_,_,[_,suspended,_,_,_]} = sys:get_status(?server),
- ?line sys:suspend(?server,1000), %% doing it twice is no error
- ?line {'EXIT',_} = (catch public_call(48)),
- ?line sys:resume(?server),
- ?line {status,_,_,[_,running,_,_,_]} = sys:get_status(?server),
- ?line {ok,-48} = (catch public_call(48)),
- ?line sys:resume(?server), %% doing it twice is no error
- ?line {ok,-48} = (catch public_call(48)),
- ?line stop(),
+ {ok,_Server} = start(),
+ sys:suspend(?server,1000),
+ {'EXIT',_} = (catch public_call(48)),
+ {status,_,_,[_,suspended,_,_,_]} = sys:get_status(?server),
+ sys:suspend(?server,1000), %% doing it twice is no error
+ {'EXIT',_} = (catch public_call(48)),
+ sys:resume(?server),
+ {status,_,_,[_,running,_,_,_]} = sys:get_status(?server),
+ {ok,-48} = (catch public_call(48)),
+ sys:resume(?server), %% doing it twice is no error
+ {ok,-48} = (catch public_call(48)),
+ stop(),
ok.
-install(suite) -> [];
install(Config) when is_list(Config) ->
- ?line {ok,_Server} = start(),
- ?line Master = self(),
- ?line SpyFun =
+ {ok,_Server} = start(),
+ Master = self(),
+ SpyFun =
fun(func_state,Event,ProcState) ->
case Event of
{in,{'$gen_call',_From,{req,Arg}}} ->
@@ -141,22 +135,26 @@ install(Config) when is_list(Config) ->
io:format("Trigged other=~p\n",[Other])
end
end,
- ?line sys:install(?server,{SpyFun,func_state}),
- ?line {ok,-1} = (catch public_call(1)),
- ?line sys:no_debug(?server),
- ?line {ok,-2} = (catch public_call(2)),
- ?line sys:install(?server,{SpyFun,func_state}),
- ?line sys:install(?server,{SpyFun,func_state}),
- ?line {ok,-3} = (catch public_call(3)),
- ?line sys:remove(?server,SpyFun),
- ?line {ok,-4} = (catch public_call(4)),
- ?line Msgs = test_server:messages_get(),
- ?line [{spy_got,{request,1},sys_SUITE_server},
- {spy_got,{request,3},sys_SUITE_server}] = Msgs,
- ?line stop(),
+ sys:install(?server,{SpyFun,func_state}),
+ {ok,-1} = (catch public_call(1)),
+ sys:no_debug(?server),
+ {ok,-2} = (catch public_call(2)),
+ sys:install(?server,{SpyFun,func_state}),
+ sys:install(?server,{SpyFun,func_state}),
+ {ok,-3} = (catch public_call(3)),
+ sys:remove(?server,SpyFun),
+ {ok,-4} = (catch public_call(4)),
+ [{spy_got,{request,1},sys_SUITE_server},
+ {spy_got,{request,3},sys_SUITE_server}] = get_messages(),
+ stop(),
ok.
-special_process(suite) -> [];
+get_messages() ->
+ receive
+ Msg -> [Msg|get_messages()]
+ after 1 -> []
+ end.
+
special_process(Config) when is_list(Config) ->
ok = spec_proc(sys_sp1),
ok = spec_proc(sys_sp2).
diff --git a/lib/stdlib/test/sys_sp1.erl b/lib/stdlib/test/sys_sp1.erl
index b99914f4b7..571d0f3ed4 100644
--- a/lib/stdlib/test/sys_sp1.erl
+++ b/lib/stdlib/test/sys_sp1.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/sys_sp2.erl b/lib/stdlib/test/sys_sp2.erl
index e2784dc3ff..610665f8fe 100644
--- a/lib/stdlib/test/sys_sp2.erl
+++ b/lib/stdlib/test/sys_sp2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/stdlib/test/tar_SUITE.erl b/lib/stdlib/test/tar_SUITE.erl
index 6da017f818..64dd41e75a 100644
--- a/lib/stdlib/test/tar_SUITE.erl
+++ b/lib/stdlib/test/tar_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
extract_from_open_file/1, symlinks/1, open_add_close/1, cooked_compressed/1,
memory/1,unicode/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -53,10 +53,9 @@ end_per_group(_GroupName, Config) ->
Config.
-borderline(doc) ->
- ["Test creating, listing and extracting one file from an archive",
- "multiple times with different file sizes. ",
- "Also check that the file attributes of the extracted file has survived."];
+%% Test creating, listing and extracting one file from an archive,
+%% multiple times with different file sizes. Also check that the file
+%% attributes of the extracted file has survived.
borderline(Config) when is_list(Config) ->
%% Note: We cannot use absolute paths, because the pathnames will be
@@ -64,47 +63,47 @@ borderline(Config) when is_list(Config) ->
%% Therefore, strip off the current working directory from the front
%% of the private directory path.
- ?line {ok, Cwd} = file:get_cwd(),
- ?line RootDir = ?config(priv_dir, Config),
- ?line TempDir = remove_prefix(Cwd++"/", filename:join(RootDir, "borderline")),
- ?line ok = file:make_dir(TempDir),
+ {ok, Cwd} = file:get_cwd(),
+ RootDir = proplists:get_value(priv_dir, Config),
+ TempDir = remove_prefix(Cwd++"/", filename:join(RootDir, "borderline")),
+ ok = file:make_dir(TempDir),
- ?line Record = 512,
- ?line Block = 20 * Record,
+ Record = 512,
+ Block = 20 * Record,
- ?line lists:foreach(fun(Size) -> borderline_test(Size, TempDir) end,
- [0, 1, 10, 13, 127, 333, Record-1, Record, Record+1,
- Block-2*Record-1, Block-2*Record, Block-2*Record+1,
- Block-Record-1, Block-Record, Block-Record+1,
- Block-1, Block, Block+1,
- Block+Record-1, Block+Record, Block+Record+1]),
+ lists:foreach(fun(Size) -> borderline_test(Size, TempDir) end,
+ [0, 1, 10, 13, 127, 333, Record-1, Record, Record+1,
+ Block-2*Record-1, Block-2*Record, Block-2*Record+1,
+ Block-Record-1, Block-Record, Block-Record+1,
+ Block-1, Block, Block+1,
+ Block+Record-1, Block+Record, Block+Record+1]),
%% Clean up.
- ?line delete_files([TempDir]),
+ delete_files([TempDir]),
ok.
borderline_test(Size, TempDir) ->
- ?line Archive = filename:join(TempDir, "ar_"++integer_to_list(Size)++".tar"),
- ?line Name = filename:join(TempDir, "file_"++integer_to_list(Size)),
- ?line io:format("Testing size ~p", [Size]),
+ Archive = filename:join(TempDir, "ar_"++integer_to_list(Size)++".tar"),
+ Name = filename:join(TempDir, "file_"++integer_to_list(Size)),
+ io:format("Testing size ~p", [Size]),
%% Create a file and archive it.
X0 = erlang:monotonic_time(),
- ?line file:write_file(Name, random_byte_list(X0, Size)),
- ?line ok = erl_tar:create(Archive, [Name]),
- ?line ok = file:delete(Name),
+ file:write_file(Name, random_byte_list(X0, Size)),
+ ok = erl_tar:create(Archive, [Name]),
+ ok = file:delete(Name),
%% Verify listing and extracting.
- ?line {ok, [Name]} = erl_tar:table(Archive),
- ?line ok = erl_tar:extract(Archive, [verbose]),
+ {ok, [Name]} = erl_tar:table(Archive),
+ ok = erl_tar:extract(Archive, [verbose]),
%% Verify contents of extracted file.
- ?line {ok, Bin} = file:read_file(Name),
- ?line true = match_byte_list(X0, binary_to_list(Bin)),
+ {ok, Bin} = file:read_file(Name),
+ true = match_byte_list(X0, binary_to_list(Bin)),
%% Verify that Unix tar can read it.
- ?line tar_tf(Archive, Name),
+ tar_tf(Archive, Name),
ok.
@@ -117,20 +116,20 @@ tar_tf(Archive, Name) ->
end.
tar_tf1(Archive, Name) ->
- ?line Expect = Name ++ "\n",
- ?line cmd_expect("tar tf " ++ Archive, Expect).
+ Expect = Name ++ "\n",
+ cmd_expect("tar tf " ++ Archive, Expect).
%% We can't use os:cmd/1, because Unix 'tar tf Name' on Solaris never
%% terminates when given an archive of a size it doesn't like.
cmd_expect(Cmd, Expect) ->
- ?line Port = open_port({spawn, make_cmd(Cmd)}, [stream, in, eof]),
- ?line get_data(Port, Expect).
+ Port = open_port({spawn, make_cmd(Cmd)}, [stream, in, eof]),
+ get_data(Port, Expect).
get_data(Port, Expect) ->
receive
{Port, {data, Bytes}} ->
- ?line get_data(Port, match_output(Bytes, Expect, Port));
+ get_data(Port, match_output(Bytes, Expect, Port));
{Port, eof} ->
Port ! {self(), close},
receive
@@ -143,26 +142,26 @@ get_data(Port, Expect) ->
after 1 -> % force context switch
ok
end,
- ?line match_output(eof, Expect, Port)
+ match_output(eof, Expect, Port)
end.
match_output([C|Output], [C|Expect], Port) ->
- ?line match_output(Output, Expect, Port);
+ match_output(Output, Expect, Port);
match_output([_|_], [_|_], Port) ->
- ?line kill_port_and_fail(Port, badmatch);
+ kill_port_and_fail(Port, badmatch);
match_output([X|Output], [], Port) ->
- ?line kill_port_and_fail(Port, {too_much_data, [X|Output]});
+ kill_port_and_fail(Port, {too_much_data, [X|Output]});
match_output([], Expect, _Port) ->
Expect;
match_output(eof, [], _Port) ->
[];
match_output(eof, _Expect, Port) ->
- ?line kill_port_and_fail(Port, unexpected_end_of_input).
+ kill_port_and_fail(Port, unexpected_end_of_input).
kill_port_and_fail(Port, Reason) ->
unlink(Port),
exit(Port, die),
- test_server:fail(Reason).
+ ct:fail(Reason).
make_cmd(Cmd) ->
case os:type() of
@@ -198,58 +197,56 @@ random_byte_list(_X, 0, Result) ->
next_random(X) ->
(X*17059465+1) band 16#fffffffff.
-atomic(doc) ->
- ["Test the 'atomic' operations: create/extract/table, on compressed "
- "and uncompressed archives."
- "Also test the 'cooked' option."];
-atomic(suite) -> [];
+%% Test the 'atomic' operations: create/extract/table, on compressed
+%% and uncompressed archives.
+%% Also test the 'cooked' option.
atomic(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(priv_dir, Config)),
- ?line DataFiles = data_files(),
- ?line Names = [Name || {Name,_,_} <- DataFiles],
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
+ DataFiles = data_files(),
+ Names = [Name || {Name,_,_} <- DataFiles],
io:format("Names: ~p", [Names]),
%% Create an uncompressed archive. The compressed flag should still be
%% allowed when listing contents or extracting.
- ?line Tar1 = "uncompressed.tar",
- ?line erl_tar:create(Tar1, Names, []),
- ?line {ok, Names} = erl_tar:table(Tar1, []),
- ?line {ok, Names} = erl_tar:table(Tar1, [compressed]),
- ?line {ok, Names} = erl_tar:table(Tar1, [cooked]),
- ?line {ok, Names} = erl_tar:table(Tar1, [compressed,cooked]),
-
+ Tar1 = "uncompressed.tar",
+ erl_tar:create(Tar1, Names, []),
+ {ok, Names} = erl_tar:table(Tar1, []),
+ {ok, Names} = erl_tar:table(Tar1, [compressed]),
+ {ok, Names} = erl_tar:table(Tar1, [cooked]),
+ {ok, Names} = erl_tar:table(Tar1, [compressed,cooked]),
+
%% Create a compressed archive.
- ?line Tar2 = "compressed.tar",
- ?line erl_tar:create(Tar2, Names, [compressed]),
- ?line {ok, Names} = erl_tar:table(Tar2, [compressed]),
- ?line {error, Reason} = erl_tar:table(Tar2, []),
- ?line {ok, Names} = erl_tar:table(Tar2, [compressed,cooked]),
- ?line {error, Reason} = erl_tar:table(Tar2, [cooked]),
- ?line ok = io:format("No compressed option: ~p, ~s",
- [Reason, erl_tar:format_error(Reason)]),
+ Tar2 = "compressed.tar",
+ erl_tar:create(Tar2, Names, [compressed]),
+ {ok, Names} = erl_tar:table(Tar2, [compressed]),
+ {error, Reason} = erl_tar:table(Tar2, []),
+ {ok, Names} = erl_tar:table(Tar2, [compressed,cooked]),
+ {error, Reason} = erl_tar:table(Tar2, [cooked]),
+ ok = io:format("No compressed option: ~p, ~s",
+ [Reason, erl_tar:format_error(Reason)]),
%% Same test again, but this time created with 'cooked'
- ?line Tar3 = "uncompressed_cooked.tar",
- ?line erl_tar:create(Tar3, Names, [cooked]),
- ?line {ok, Names} = erl_tar:table(Tar3, []),
- ?line {ok, Names} = erl_tar:table(Tar3, [compressed]),
- ?line {ok, Names} = erl_tar:table(Tar3, [cooked]),
- ?line {ok, Names} = erl_tar:table(Tar3, [compressed,cooked]),
-
- ?line Tar4 = "compressed_cooked.tar",
- ?line erl_tar:create(Tar4, Names, [compressed,cooked]),
- ?line {ok, Names} = erl_tar:table(Tar4, [compressed]),
- ?line {error, Reason} = erl_tar:table(Tar4, []),
- ?line {ok, Names} = erl_tar:table(Tar4, [compressed,cooked]),
- ?line {error, Reason} = erl_tar:table(Tar4, [cooked]),
- ?line ok = io:format("No compressed option: ~p, ~s",
- [Reason, erl_tar:format_error(Reason)]),
+ Tar3 = "uncompressed_cooked.tar",
+ erl_tar:create(Tar3, Names, [cooked]),
+ {ok, Names} = erl_tar:table(Tar3, []),
+ {ok, Names} = erl_tar:table(Tar3, [compressed]),
+ {ok, Names} = erl_tar:table(Tar3, [cooked]),
+ {ok, Names} = erl_tar:table(Tar3, [compressed,cooked]),
+
+ Tar4 = "compressed_cooked.tar",
+ erl_tar:create(Tar4, Names, [compressed,cooked]),
+ {ok, Names} = erl_tar:table(Tar4, [compressed]),
+ {error, Reason} = erl_tar:table(Tar4, []),
+ {ok, Names} = erl_tar:table(Tar4, [compressed,cooked]),
+ {error, Reason} = erl_tar:table(Tar4, [cooked]),
+ ok = io:format("No compressed option: ~p, ~s",
+ [Reason, erl_tar:format_error(Reason)]),
%% Clean up.
- ?line delete_files([Tar1,Tar2,Tar3,Tar4|Names]),
+ delete_files([Tar1,Tar2,Tar3,Tar4|Names]),
ok.
@@ -279,50 +276,48 @@ create_files([{Name, Size, First}|Rest]) ->
create_files([]) ->
ok.
-long_names(doc) ->
- ["Test to extract an Unix tar file containing filenames longer than 100 ",
- "characters and empty directories."];
+%% Test to extract an Unix tar file containing filenames longer than
+%% 100 characters and empty directories.
long_names(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line Long = filename:join(DataDir, "long_names.tar"),
+ DataDir = proplists:get_value(data_dir, Config),
+ Long = filename:join(DataDir, "long_names.tar"),
run_in_short_tempdir(Config,
fun() -> do_long_names(Long) end).
do_long_names(Long) ->
%% Try table/2 and extract/2.
- ?line case erl_tar:table(Long, [verbose]) of
- {ok,List} when is_list(List) ->
- ?line io:format("~p\n", [List])
- end,
+ case erl_tar:table(Long, [verbose]) of
+ {ok,List} when is_list(List) ->
+ io:format("~p\n", [List])
+ end,
- ?line {ok,Cwd} = file:get_cwd(),
- ?line ok = erl_tar:extract(Long),
- ?line Base = filename:join([Cwd, "original_software", "written_by",
- "a_bunch_of_hackers",
- "spending_all_their_nights",
- "still", "not_long_enough",
- "but_soon_it_will_be"]),
+ {ok,Cwd} = file:get_cwd(),
+ ok = erl_tar:extract(Long),
+ Base = filename:join([Cwd, "original_software", "written_by",
+ "a_bunch_of_hackers",
+ "spending_all_their_nights",
+ "still", "not_long_enough",
+ "but_soon_it_will_be"]),
%% Verify that the empty directory was created.
- ?line EmptyDir = filename:join(Base, "empty_directory"),
- ?line {ok, #file_info{type=directory}} = file:read_file_info(EmptyDir),
+ EmptyDir = filename:join(Base, "empty_directory"),
+ {ok, #file_info{type=directory}} = file:read_file_info(EmptyDir),
%% Verify that the files were created.
- ?line {ok,First} = file:read_file(filename:join(Base, "first_file")),
- ?line {ok,Second} = file:read_file(filename:join(Base, "second_file")),
- ?line "Here"++_ = binary_to_list(First),
- ?line "And"++_ = binary_to_list(Second),
+ {ok,First} = file:read_file(filename:join(Base, "first_file")),
+ {ok,Second} = file:read_file(filename:join(Base, "second_file")),
+ "Here"++_ = binary_to_list(First),
+ "And"++_ = binary_to_list(Second),
ok.
-create_long_names(doc) ->
- ["Creates a tar file from a deep directory structure (filenames are ",
- "longer than 100 characters)."];
+%% Creates a tar file from a deep directory structure (filenames are
+%% longer than 100 characters).
create_long_names(Config) when is_list(Config) ->
run_in_short_tempdir(Config, fun create_long_names/0).
-
+
create_long_names() ->
- ?line {ok,Dir} = file:get_cwd(),
+ {ok,Dir} = file:get_cwd(),
Dirs = ["aslfjkshjkhliuf",
"asdhjfehnbfsky",
"sahajfskdfhsz",
@@ -330,49 +325,48 @@ create_long_names() ->
"f7nafhjgffagkhsfkhsjk",
"dfjasldkfjsdkfjashbv"],
- ?line DeepDir = make_dirs(Dirs, []),
- ?line AFile = filename:join(DeepDir, "a_file"),
- ?line Hello = "hello, world\n",
- ?line ok = file:write_file(AFile, Hello),
- ?line TarName = filename:join(Dir, "my_tar_with_long_names.tar"),
- ?line ok = erl_tar:create(TarName, [AFile]),
+ DeepDir = make_dirs(Dirs, []),
+ AFile = filename:join(DeepDir, "a_file"),
+ Hello = "hello, world\n",
+ ok = file:write_file(AFile, Hello),
+ TarName = filename:join(Dir, "my_tar_with_long_names.tar"),
+ ok = erl_tar:create(TarName, [AFile]),
%% Print contents.
- ?line ok = erl_tar:tt(TarName),
+ ok = erl_tar:tt(TarName),
%% Extract and verify.
- ?line ExtractDir = "extract_dir",
- ?line ok = file:make_dir(ExtractDir),
- ?line ok = erl_tar:extract(TarName, [{cwd,ExtractDir}]),
- ?line {ok, Bin} = file:read_file(filename:join(ExtractDir, AFile)),
- ?line Hello = binary_to_list(Bin),
+ ExtractDir = "extract_dir",
+ ok = file:make_dir(ExtractDir),
+ ok = erl_tar:extract(TarName, [{cwd,ExtractDir}]),
+ {ok, Bin} = file:read_file(filename:join(ExtractDir, AFile)),
+ Hello = binary_to_list(Bin),
ok.
make_dirs([Dir|Rest], []) ->
- ?line ok = file:make_dir(Dir),
- ?line make_dirs(Rest, Dir);
+ ok = file:make_dir(Dir),
+ make_dirs(Rest, Dir);
make_dirs([Dir|Rest], Parent) ->
- ?line Name = filename:join(Parent, Dir),
- ?line ok = file:make_dir(Name),
- ?line make_dirs(Rest, Name);
+ Name = filename:join(Parent, Dir),
+ ok = file:make_dir(Name),
+ make_dirs(Rest, Name);
make_dirs([], Dir) ->
Dir.
-bad_tar(doc) ->
- ["Try erl_tar:table/2 and erl_tar:extract/2 on some corrupted tar files."];
+%% Try erl_tar:table/2 and erl_tar:extract/2 on some corrupted tar files.
bad_tar(Config) when is_list(Config) ->
- ?line try_bad("bad_checksum", bad_header, Config),
- ?line try_bad("bad_octal", bad_header, Config),
- ?line try_bad("bad_too_short", eof, Config),
- ?line try_bad("bad_even_shorter", eof, Config),
+ try_bad("bad_checksum", bad_header, Config),
+ try_bad("bad_octal", bad_header, Config),
+ try_bad("bad_too_short", eof, Config),
+ try_bad("bad_even_shorter", eof, Config),
ok.
try_bad(Name0, Reason, Config) ->
- %% Intentionally no ?line macros here.
+ %% Intentionally no macros here.
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Name = Name0 ++ ".tar",
io:format("~nTrying ~s", [Name]),
Full = filename:join(DataDir, Name),
@@ -383,38 +377,37 @@ try_bad(Name0, Reason, Config) ->
io:format("Result: ~p", [Expected]),
case catch erl_tar:format_error(Reason) of
{'EXIT', CrashReason} ->
- test_server:fail({format_error, crashed, CrashReason});
+ ct:fail({format_error, crashed, CrashReason});
String when is_list(String) ->
io:format("format_error(~p) -> ~s", [Reason, String]);
Other ->
- test_server:fail({format_error, returned, Other})
+ ct:fail({format_error, returned, Other})
end;
{Other1, Other2} ->
io:format("table/2 returned ~p", [Other1]),
io:format("extract/2 returned ~p", [Other2]),
- test_server:fail({bad_return_value, Other1, Other2})
+ ct:fail({bad_return_value, Other1, Other2})
end.
-errors(doc) ->
- ["Tests that some common errors return correct error codes ",
- "and that format_error/1 handles them correctly."];
+%% Tests that some common errors return correct error codes
+%% and that format_error/1 handles them correctly.
errors(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Give the tar file the same name as a directory.
- ?line BadTar = filename:join(PrivDir, "bad_tarfile.tar"),
- ?line ok = file:make_dir(BadTar),
- ?line try_error(erl_tar, create, [BadTar, []], {BadTar, eisdir}),
+ BadTar = filename:join(PrivDir, "bad_tarfile.tar"),
+ ok = file:make_dir(BadTar),
+ try_error(erl_tar, create, [BadTar, []], {BadTar, eisdir}),
%% Try including non-existent files in the tar file.
- ?line NonExistent = "non_existent_file",
- ?line GoodTar = filename:join(PrivDir, "a_good_tarfile.tar"),
- ?line try_error(erl_tar, create, [GoodTar, [NonExistent]],
- {NonExistent, enoent}),
+ NonExistent = "non_existent_file",
+ GoodTar = filename:join(PrivDir, "a_good_tarfile.tar"),
+ try_error(erl_tar, create, [GoodTar, [NonExistent]],
+ {NonExistent, enoent}),
%% Clean up.
- ?line delete_files([GoodTar,BadTar]),
-
+ delete_files([GoodTar,BadTar]),
+
ok.
try_error(M, F, A, Error) ->
@@ -423,18 +416,18 @@ try_error(M, F, A, Error) ->
{'EXIT', Reason} ->
exit(Reason);
ok ->
- test_server:fail(unexpected_success);
+ ct:fail(unexpected_success);
{error, Error} ->
case catch erl_tar:format_error(Error) of
{'EXIT', FReason} ->
- test_server:fail({format_error, crashed, FReason});
+ ct:fail({format_error, crashed, FReason});
String when is_list(String) ->
io:format("format_error(~p) -> ~s", [Error, String]);
Other ->
- test_server:fail({format_error, returned, Other})
+ ct:fail({format_error, returned, Other})
end;
Other ->
- test_server:fail({expected, {error, Error}, actual, Other})
+ ct:fail({expected, {error, Error}, actual, Other})
end.
%% remove_prefix(Prefix, List) -> ListWithoutPrefix.
@@ -444,107 +437,104 @@ remove_prefix([C|Rest1], [C|Rest2]) ->
remove_prefix(_, Result) ->
Result.
-extract_from_binary(doc) ->
- "Test extracting a tar archive from a binary.";
+%% Test extracting a tar archive from a binary.
extract_from_binary(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Long = filename:join(DataDir, "no_fancy_stuff.tar"),
- ?line ExtractDir = filename:join(PrivDir, "extract_from_binary"),
- ?line ok = file:make_dir(ExtractDir),
-
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Long = filename:join(DataDir, "no_fancy_stuff.tar"),
+ ExtractDir = filename:join(PrivDir, "extract_from_binary"),
+ ok = file:make_dir(ExtractDir),
+
%% Read a tar file into a binary and extract from the binary.
- ?line {ok, Bin} = file:read_file(Long),
- ?line ok = erl_tar:extract({binary, Bin}, [{cwd,ExtractDir}]),
+ {ok, Bin} = file:read_file(Long),
+ ok = erl_tar:extract({binary, Bin}, [{cwd,ExtractDir}]),
%% Verify.
Dir = filename:join(ExtractDir, "no_fancy_stuff"),
- ?line true = filelib:is_dir(Dir),
- ?line true = filelib:is_file(filename:join(Dir, "a_dir_list")),
- ?line true = filelib:is_file(filename:join(Dir, "EPLICENCE")),
+ true = filelib:is_dir(Dir),
+ true = filelib:is_file(filename:join(Dir, "a_dir_list")),
+ true = filelib:is_file(filename:join(Dir, "EPLICENCE")),
%% Clean up.
- ?line delete_files([ExtractDir]),
+ delete_files([ExtractDir]),
ok.
extract_from_binary_compressed(Config) when is_list(Config) ->
%% Test extracting a compressed tar archive from a binary.
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Name = filename:join(DataDir, "cooked_tar_problem.tar.gz"),
- ?line ExtractDir = filename:join(PrivDir, "extract_from_binary_compressed"),
- ?line ok = file:make_dir(ExtractDir),
- ?line {ok,Bin} = file:read_file(Name),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Name = filename:join(DataDir, "cooked_tar_problem.tar.gz"),
+ ExtractDir = filename:join(PrivDir, "extract_from_binary_compressed"),
+ ok = file:make_dir(ExtractDir),
+ {ok,Bin} = file:read_file(Name),
%% Try taking contents.
- ?line {ok,Files} = erl_tar:table({binary,Bin}, [compressed]),
- ?line io:format("~p\n", [Files]),
- ?line 19 = length(Files),
-
+ {ok,Files} = erl_tar:table({binary,Bin}, [compressed]),
+ io:format("~p\n", [Files]),
+ 19 = length(Files),
+
%% Trying extracting from a binary.
- ?line ok = erl_tar:extract({binary,Bin}, [compressed,{cwd,ExtractDir}]),
- ?line {ok,List} = file:list_dir(filename:join(ExtractDir, "ddll_SUITE_data")),
- ?line io:format("~p\n", [List]),
- ?line 19 = length(List),
+ ok = erl_tar:extract({binary,Bin}, [compressed,{cwd,ExtractDir}]),
+ {ok,List} = file:list_dir(filename:join(ExtractDir, "ddll_SUITE_data")),
+ io:format("~p\n", [List]),
+ 19 = length(List),
%% Clean up while at the same time testing that all file
%% were extracted as expected.
lists:foreach(fun(N) ->
File = filename:join(ExtractDir, N),
io:format("Deleting: ~p\n", [File]),
- ?line ok = file:delete(File)
+ ok = file:delete(File)
end, Files),
%% Clean up the rest.
- ?line delete_files([ExtractDir]),
+ delete_files([ExtractDir]),
ok.
-extract_from_open_file(doc) ->
- "Test extracting a tar archive from an open file.";
+%% Test extracting a tar archive from an open file.
extract_from_open_file(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Long = filename:join(DataDir, "no_fancy_stuff.tar"),
- ?line ExtractDir = filename:join(PrivDir, "extract_from_open_file"),
- ?line ok = file:make_dir(ExtractDir),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Long = filename:join(DataDir, "no_fancy_stuff.tar"),
+ ExtractDir = filename:join(PrivDir, "extract_from_open_file"),
+ ok = file:make_dir(ExtractDir),
- ?line {ok, File} = file:open(Long, [read]),
- ?line ok = erl_tar:extract({file, File}, [{cwd,ExtractDir}]),
+ {ok, File} = file:open(Long, [read]),
+ ok = erl_tar:extract({file, File}, [{cwd,ExtractDir}]),
%% Verify.
Dir = filename:join(ExtractDir, "no_fancy_stuff"),
- ?line true = filelib:is_dir(Dir),
- ?line true = filelib:is_file(filename:join(Dir, "a_dir_list")),
- ?line true = filelib:is_file(filename:join(Dir, "EPLICENCE")),
+ true = filelib:is_dir(Dir),
+ true = filelib:is_file(filename:join(Dir, "a_dir_list")),
+ true = filelib:is_file(filename:join(Dir, "EPLICENCE")),
%% Close open file.
- ?line ok = file:close(File),
+ ok = file:close(File),
%% Clean up.
- ?line delete_files([ExtractDir]),
+ delete_files([ExtractDir]),
ok.
-symlinks(doc) ->
- "Test that archives containing symlinks can be created and extracted.";
+%% Test that archives containing symlinks can be created and extracted.
symlinks(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Dir = filename:join(PrivDir, "symlinks"),
- ?line ok = file:make_dir(Dir),
- ?line ABadSymlink = filename:join(Dir, "bad_symlink"),
- ?line PointsTo = "/a/definitely/non_existing/path",
- ?line Res = case make_symlink("/a/definitely/non_existing/path", ABadSymlink) of
- {error, enotsup} ->
- {skip, "Symbolic links not supported on this platform"};
- ok ->
- symlinks(Dir, "bad_symlink", PointsTo),
- long_symlink(Dir)
- end,
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dir = filename:join(PrivDir, "symlinks"),
+ ok = file:make_dir(Dir),
+ ABadSymlink = filename:join(Dir, "bad_symlink"),
+ PointsTo = "/a/definitely/non_existing/path",
+ Res = case make_symlink("/a/definitely/non_existing/path", ABadSymlink) of
+ {error, enotsup} ->
+ {skip, "Symbolic links not supported on this platform"};
+ ok ->
+ symlinks(Dir, "bad_symlink", PointsTo),
+ long_symlink(Dir)
+ end,
%% Clean up.
- ?line delete_files([Dir]),
+ delete_files([Dir]),
Res.
make_symlink(Path, Link) ->
@@ -569,103 +559,103 @@ make_symlink(Path, Link) ->
_ ->
file:make_symlink(Path, Link)
end.
-
+
symlinks(Dir, BadSymlink, PointsTo) ->
- ?line Tar = filename:join(Dir, "symlink.tar"),
- ?line DerefTar = filename:join(Dir, "dereference.tar"),
+ Tar = filename:join(Dir, "symlink.tar"),
+ DerefTar = filename:join(Dir, "dereference.tar"),
%% Create the archive.
- ?line ok = file:set_cwd(Dir),
- ?line GoodSymlink = "good_symlink",
- ?line AFile = "a_good_file",
- ?line ALine = "A line of text for a file.",
- ?line ok = file:write_file(AFile, ALine),
- ?line ok = file:make_symlink(AFile, GoodSymlink),
- ?line ok = erl_tar:create(Tar, [BadSymlink, GoodSymlink, AFile], [verbose]),
+ ok = file:set_cwd(Dir),
+ GoodSymlink = "good_symlink",
+ AFile = "a_good_file",
+ ALine = "A line of text for a file.",
+ ok = file:write_file(AFile, ALine),
+ ok = file:make_symlink(AFile, GoodSymlink),
+ ok = erl_tar:create(Tar, [BadSymlink, GoodSymlink, AFile], [verbose]),
%% List contents of tar file.
- ?line ok = erl_tar:tt(Tar),
+ ok = erl_tar:tt(Tar),
%% Also create another archive with the dereference flag.
- ?line ok = erl_tar:create(DerefTar, [AFile, GoodSymlink], [dereference, verbose]),
+ ok = erl_tar:create(DerefTar, [AFile, GoodSymlink], [dereference, verbose]),
%% Extract files to a new directory.
- ?line NewDir = filename:join(Dir, "extracted"),
- ?line ok = file:make_dir(NewDir),
- ?line ok = erl_tar:extract(Tar, [{cwd, NewDir}, verbose]),
+ NewDir = filename:join(Dir, "extracted"),
+ ok = file:make_dir(NewDir),
+ ok = erl_tar:extract(Tar, [{cwd, NewDir}, verbose]),
%% Verify that the files are there.
- ?line ok = file:set_cwd(NewDir),
- ?line {ok, #file_info{type=symlink}} = file:read_link_info(BadSymlink),
- ?line {ok, PointsTo} = file:read_link(BadSymlink),
- ?line {ok, #file_info{type=symlink}} = file:read_link_info(GoodSymlink),
- ?line {ok, AFile} = file:read_link(GoodSymlink),
- ?line Expected = list_to_binary(ALine),
- ?line {ok, Expected} = file:read_file(GoodSymlink),
+ ok = file:set_cwd(NewDir),
+ {ok, #file_info{type=symlink}} = file:read_link_info(BadSymlink),
+ {ok, PointsTo} = file:read_link(BadSymlink),
+ {ok, #file_info{type=symlink}} = file:read_link_info(GoodSymlink),
+ {ok, AFile} = file:read_link(GoodSymlink),
+ Expected = list_to_binary(ALine),
+ {ok, Expected} = file:read_file(GoodSymlink),
%% Extract the "dereferenced archive" to a new directory.
- ?line NewDirDeref = filename:join(Dir, "extracted_deref"),
- ?line ok = file:make_dir(NewDirDeref),
- ?line ok = erl_tar:extract(DerefTar, [{cwd, NewDirDeref}, verbose]),
+ NewDirDeref = filename:join(Dir, "extracted_deref"),
+ ok = file:make_dir(NewDirDeref),
+ ok = erl_tar:extract(DerefTar, [{cwd, NewDirDeref}, verbose]),
%% Verify that the files are there.
- ?line ok = file:set_cwd(NewDirDeref),
- ?line {ok, #file_info{type=regular}} = file:read_link_info(GoodSymlink),
- ?line {ok, #file_info{type=regular}} = file:read_link_info(AFile),
- ?line {ok, Expected} = file:read_file(GoodSymlink),
- ?line {ok, Expected} = file:read_file(AFile),
+ ok = file:set_cwd(NewDirDeref),
+ {ok, #file_info{type=regular}} = file:read_link_info(GoodSymlink),
+ {ok, #file_info{type=regular}} = file:read_link_info(AFile),
+ {ok, Expected} = file:read_file(GoodSymlink),
+ {ok, Expected} = file:read_file(AFile),
ok.
long_symlink(Dir) ->
- ?line Tar = filename:join(Dir, "long_symlink.tar"),
- ?line ok = file:set_cwd(Dir),
-
- ?line AFile = "long_symlink",
- ?line FarTooLong = "/tmp/aarrghh/this/path/is/far/longer/than/one/hundred/characters/which/is/the/maximum/number/of/characters/allowed",
- ?line ok = file:make_symlink(FarTooLong, AFile),
- ?line {error,Error} = erl_tar:create(Tar, [AFile], [verbose]),
- ?line io:format("Error: ~s\n", [erl_tar:format_error(Error)]),
- ?line {FarTooLong,symbolic_link_too_long} = Error,
+ Tar = filename:join(Dir, "long_symlink.tar"),
+ ok = file:set_cwd(Dir),
+
+ AFile = "long_symlink",
+ FarTooLong = "/tmp/aarrghh/this/path/is/far/longer/than/one/hundred/characters/which/is/the/maximum/number/of/characters/allowed",
+ ok = file:make_symlink(FarTooLong, AFile),
+ {error,Error} = erl_tar:create(Tar, [AFile], [verbose]),
+ io:format("Error: ~s\n", [erl_tar:format_error(Error)]),
+ {FarTooLong,symbolic_link_too_long} = Error,
ok.
open_add_close(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line ok = file:set_cwd(PrivDir),
- ?line Dir = filename:join(PrivDir, "open_add_close"),
- ?line ok = file:make_dir(Dir),
-
- ?line [{FileOne,_,_},{FileTwo,_,_},{FileThree,_,_}] = oac_files(),
- ?line ADir = "empty_dir",
- ?line AnotherDir = "another_dir",
- ?line SomeContent = filename:join(AnotherDir, "some_content"),
- ?line ok = file:make_dir(ADir),
- ?line ok = file:make_dir(AnotherDir),
- ?line ok = file:make_dir(SomeContent),
-
- ?line TarOne = filename:join(Dir, "archive1.tar"),
- ?line {ok,AD} = erl_tar:open(TarOne, [write]),
- ?line ok = erl_tar:add(AD, FileOne, []),
- ?line ok = erl_tar:add(AD, FileTwo, "second file", []),
- ?line ok = erl_tar:add(AD, FileThree, [verbose]),
- ?line ok = erl_tar:add(AD, FileThree, "chunked", [{chunks,11411},verbose]),
- ?line ok = erl_tar:add(AD, ADir, [verbose]),
- ?line ok = erl_tar:add(AD, AnotherDir, [verbose]),
- ?line ok = erl_tar:close(AD),
-
- ?line ok = erl_tar:t(TarOne),
- ?line ok = erl_tar:tt(TarOne),
-
- ?line {ok,[FileOne,"second file",FileThree,"chunked",ADir,SomeContent]} = erl_tar:table(TarOne),
-
- ?line delete_files(["oac_file","oac_small","oac_big",Dir,AnotherDir,ADir]),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ ok = file:set_cwd(PrivDir),
+ Dir = filename:join(PrivDir, "open_add_close"),
+ ok = file:make_dir(Dir),
+
+ [{FileOne,_,_},{FileTwo,_,_},{FileThree,_,_}] = oac_files(),
+ ADir = "empty_dir",
+ AnotherDir = "another_dir",
+ SomeContent = filename:join(AnotherDir, "some_content"),
+ ok = file:make_dir(ADir),
+ ok = file:make_dir(AnotherDir),
+ ok = file:make_dir(SomeContent),
+
+ TarOne = filename:join(Dir, "archive1.tar"),
+ {ok,AD} = erl_tar:open(TarOne, [write]),
+ ok = erl_tar:add(AD, FileOne, []),
+ ok = erl_tar:add(AD, FileTwo, "second file", []),
+ ok = erl_tar:add(AD, FileThree, [verbose]),
+ ok = erl_tar:add(AD, FileThree, "chunked", [{chunks,11411},verbose]),
+ ok = erl_tar:add(AD, ADir, [verbose]),
+ ok = erl_tar:add(AD, AnotherDir, [verbose]),
+ ok = erl_tar:close(AD),
+
+ ok = erl_tar:t(TarOne),
+ ok = erl_tar:tt(TarOne),
+
+ {ok,[FileOne,"second file",FileThree,"chunked",ADir,SomeContent]} = erl_tar:table(TarOne),
+
+ delete_files(["oac_file","oac_small","oac_big",Dir,AnotherDir,ADir]),
ok.
@@ -678,60 +668,59 @@ oac_files() ->
cooked_compressed(Config) when is_list(Config) ->
%% Test that a compressed archive can be read in cooked mode.
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Name = filename:join(DataDir, "cooked_tar_problem.tar.gz"),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Name = filename:join(DataDir, "cooked_tar_problem.tar.gz"),
%% Try table/2 and extract/2.
- ?line {ok,List} = erl_tar:table(Name, [cooked,compressed]),
- ?line io:format("~p\n", [List]),
- ?line 19 = length(List),
- ?line ok = erl_tar:extract(Name, [cooked,compressed,{cwd,PrivDir}]),
+ {ok,List} = erl_tar:table(Name, [cooked,compressed]),
+ io:format("~p\n", [List]),
+ 19 = length(List),
+ ok = erl_tar:extract(Name, [cooked,compressed,{cwd,PrivDir}]),
%% Clean up while at the same time testing that all file
%% were extracted as expected.
lists:foreach(fun(N) ->
File = filename:join(PrivDir, N),
io:format("Deleting: ~p\n", [File]),
- ?line ok = file:delete(File)
+ ok = file:delete(File)
end, List),
%% Clean up.
- ?line delete_files([filename:join(PrivDir, "ddll_SUITE_data")]),
+ delete_files([filename:join(PrivDir, "ddll_SUITE_data")]),
ok.
-memory(doc) ->
- ["Test that an archive can be created directly from binaries and "
- "that an archive can be extracted into binaries."];
+%% Test that an archive can be created directly from binaries and
+%% that an archive can be extracted into binaries.
memory(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
-
- ?line FileBins = [{"bar/fum", <<"BARFUM">>},{"foo", <<"FOO">>}],
- ?line Name1 = filename:join(DataDir, "memory.tar"),
- ?line ok = erl_tar:create(Name1, FileBins, [write,verbose]),
- ?line {ok,Extracted1} = erl_tar:extract(Name1, [memory,verbose]),
- ?line FileBins1 = lists:sort(Extracted1),
-
- ?line io:format("FileBins: ~p\n", [FileBins]),
- ?line io:format("FileBins1: ~p\n", [FileBins1]),
- ?line FileBins = FileBins1,
-
- ?line Name2 = filename:join(DataDir, "memory2.tar"),
- ?line {ok,Fd} = erl_tar:open(Name2, [write]),
- ?line [ok,ok] = [erl_tar:add(Fd, B, N, [write,verbose]) || {N,B} <- FileBins],
- ?line ok = erl_tar:close(Fd),
- ?line {ok,Extracted2} = erl_tar:extract(Name2, [memory,verbose]),
- ?line FileBins2 = lists:sort(Extracted2),
- ?line io:format("FileBins2: ~p\n", [FileBins2]),
- ?line FileBins = FileBins2,
+ DataDir = proplists:get_value(data_dir, Config),
+
+ FileBins = [{"bar/fum", <<"BARFUM">>},{"foo", <<"FOO">>}],
+ Name1 = filename:join(DataDir, "memory.tar"),
+ ok = erl_tar:create(Name1, FileBins, [write,verbose]),
+ {ok,Extracted1} = erl_tar:extract(Name1, [memory,verbose]),
+ FileBins1 = lists:sort(Extracted1),
+
+ io:format("FileBins: ~p\n", [FileBins]),
+ io:format("FileBins1: ~p\n", [FileBins1]),
+ FileBins = FileBins1,
+
+ Name2 = filename:join(DataDir, "memory2.tar"),
+ {ok,Fd} = erl_tar:open(Name2, [write]),
+ [ok,ok] = [erl_tar:add(Fd, B, N, [write,verbose]) || {N,B} <- FileBins],
+ ok = erl_tar:close(Fd),
+ {ok,Extracted2} = erl_tar:extract(Name2, [memory,verbose]),
+ FileBins2 = lists:sort(Extracted2),
+ io:format("FileBins2: ~p\n", [FileBins2]),
+ FileBins = FileBins2,
%% Clean up.
- ?line ok = delete_files([Name1,Name2]),
+ ok = delete_files([Name1,Name2]),
ok.
%% Test filenames with characters outside the US ASCII range.
unicode(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
do_unicode(PrivDir),
case has_transparent_naming() of
true ->
@@ -811,7 +800,7 @@ delete_files([Item|Rest]) ->
%% 260 characters.
run_in_short_tempdir(Config, Fun) ->
{ok,Cwd} = file:get_cwd(),
- PrivDir0 = ?config(priv_dir, Config),
+ PrivDir0 = proplists:get_value(priv_dir, Config),
%% Normalize name to make sure that there is no slash at the end.
PrivDir = filename:absname(PrivDir0),
@@ -850,7 +839,7 @@ start_node(Name, Args) ->
ct:log("Trying to start ~w@~s~n", [Name,Host]),
case test_server:start_node(Name, peer, [{args,Args}]) of
{error,Reason} ->
- test_server:fail(Reason);
+ ct:fail(Reason);
{ok,Node} ->
ct:log("Node ~p started~n", [Node]),
Node
diff --git a/lib/stdlib/test/timer_SUITE.erl b/lib/stdlib/test/timer_SUITE.erl
index 057d82fb65..5fc95b16a6 100644
--- a/lib/stdlib/test/timer_SUITE.erl
+++ b/lib/stdlib/test/timer_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@
-export([big_test/1, collect/3, i_t/3, a_t/2]).
-export([do_nrev/1, internal_watchdog/2]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Random test of the timer module. This is a really nasty test, as it
%% runs a lot of timeouts and then checks in the end if any of them
@@ -41,7 +41,9 @@
%% reasonable on different machines; therefore the test can sometimes
%% fail, even though the timer module is ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,20}}].
all() ->
[do_big_test].
@@ -65,23 +67,19 @@ end_per_group(_GroupName, Config) ->
%% ------------------------------------------------------- %%
do_big_test(TConfig) when is_list(TConfig) ->
- Dog = ?t:timetrap(?t:minutes(20)),
Save = process_flag(trap_exit, true),
Result = big_test(200),
process_flag(trap_exit, Save),
- ?t:timetrap_cancel(Dog),
report_result(Result).
report_result(ok) -> ok;
-report_result(Error) -> ?line test_server:fail(Error).
+report_result(Error) -> ct:fail(Error).
%% ------------------------------------------------------- %%
big_test(N) ->
C = start_collect(),
system_time(), system_time(), system_time(),
- random:seed(erlang:timestamp()),
- random:uniform(100),random:uniform(100),random:uniform(100),
big_loop(C, N, []),
@@ -100,7 +98,7 @@ big_test(N) ->
Result = analyze_report(Report),
%%io:format("big_test is done: ~w~n", [Result]),
Result.
-
+
big_loop(_C, 0, []) ->
%%io:format("All processes are done!~n", []),
ok;
@@ -111,8 +109,8 @@ big_loop(C, 0, Pids) ->
{'EXIT', Pid, done} ->
big_loop(C, 0, lists:delete(Pid, Pids));
{'EXIT', Pid, Error} ->
- ?line ok = io:format("XXX Pid ~w died with reason ~p~n",
- [Pid, Error]),
+ ok = io:format("XXX Pid ~w died with reason ~p~n",
+ [Pid, Error]),
big_loop(C, 0, lists:delete(Pid, Pids))
end;
big_loop(C, N, Pids) ->
@@ -121,24 +119,24 @@ big_loop(C, N, Pids) ->
{'EXIT', Pid, done} ->
big_loop(C, N, lists:delete(Pid, Pids));
{'EXIT', Pid, Error} ->
- ?line ok =io:format("XXX Internal error: Pid ~w died, reason ~p~n",
- [Pid, Error]),
+ ok =io:format("XXX Internal error: Pid ~w died, reason ~p~n",
+ [Pid, Error]),
big_loop(C, N, lists:delete(Pid, Pids))
after 0 ->
%% maybe start an interval timer test
- Pids1 = maybe_start_i_test(Pids, C, random:uniform(4)),
-
+ Pids1 = maybe_start_i_test(Pids, C, rand:uniform(4)),
+
%% start 1-4 "after" tests
- Pids2 = start_after_test(Pids1, C, random:uniform(4)),
+ Pids2 = start_after_test(Pids1, C, rand:uniform(4)),
%%Pids2=Pids1,
%% wait a little while
- timer:sleep(random:uniform(200)*3),
+ timer:sleep(rand:uniform(200)*3),
%% spawn zero, one or two nrev to get some load ;-/
- Pids3 = start_nrev(Pids2, random:uniform(100)),
-
+ Pids3 = start_nrev(Pids2, rand:uniform(100)),
+
big_loop(C, N-1, Pids3)
end.
@@ -148,20 +146,20 @@ start_nrev(Pids, N) when N < 25 ->
start_nrev(Pids, N) when N < 75 ->
[spawn_link(timer_SUITE, do_nrev, [1])|Pids];
start_nrev(Pids, _N) ->
- NrevPid1 = spawn_link(timer_SUITE, do_nrev, [random:uniform(1000)*10]),
+ NrevPid1 = spawn_link(timer_SUITE, do_nrev, [rand:uniform(1000)*10]),
NrevPid2 = spawn_link(timer_SUITE, do_nrev, [1]),
[NrevPid1,NrevPid2|Pids].
-
+
start_after_test(Pids, C, 1) ->
- TO1 = random:uniform(100)*47,
+ TO1 = rand:uniform(100)*47,
[s_a_t(C, TO1)|Pids];
start_after_test(Pids, C, 2) ->
- TO1 = random:uniform(100)*47,
- TO2 = TO1 div random:uniform(3) + 101,
+ TO1 = rand:uniform(100)*47,
+ TO2 = TO1 div rand:uniform(3) + 101,
[s_a_t(C, TO1),s_a_t(C, TO2)|Pids];
start_after_test(Pids, C, N) ->
- TO1 = random:uniform(100)*47,
+ TO1 = rand:uniform(100)*47,
start_after_test([s_a_t(C, TO1)|Pids], C, N-1).
s_a_t(C, TimeOut) ->
@@ -179,16 +177,16 @@ a_t(C, TimeOut) ->
watchdog ->
Stop = system_time(),
report(C, Start,Stop,TimeOut),
- ?line ok = io:format("Internal watchdog timeout (a), not good!!~n",
- []),
+ ok = io:format("Internal watchdog timeout (a), not good!!~n",
+ []),
exit(done)
end.
maybe_start_i_test(Pids, C, 1) ->
%% ok do it
- TOI = random:uniform(53)*49,
- CountI = random:uniform(10) + 3, % at least 4 times
+ TOI = rand:uniform(53)*49,
+ CountI = rand:uniform(10) + 3, % at least 4 times
[spawn_link(timer_SUITE, i_t, [C, TOI, CountI])|Pids];
maybe_start_i_test(Pids, _C, _) ->
Pids.
@@ -210,8 +208,8 @@ i_wait(Start, Prev, Times, TimeOut, Times, Ref, C) ->
Now = system_time(),
report_interval(C, {final,Times}, Start, Prev, Now, TimeOut),
timer:cancel(Ref),
- ?line ok = io:format("Internal watchdog timeout (i), not good!!~n",
- []),
+ ok = io:format("Internal watchdog timeout (i), not good!!~n",
+ []),
exit(done)
end;
i_wait(Start, Prev, Count, TimeOut, Times, Ref, C) ->
@@ -223,8 +221,8 @@ i_wait(Start, Prev, Count, TimeOut, Times, Ref, C) ->
watchdog ->
Now = system_time(),
report_interval(C, {final,Count}, Start, Prev, Now, TimeOut),
- ?line ok = io:format("Internal watchdog timeout (j), not good!!~n",
- []),
+ ok = io:format("Internal watchdog timeout (j), not good!!~n",
+ []),
exit(done)
end.
@@ -291,13 +289,6 @@ update(New, Stat) when New < Stat#stat.min ->
update(New, Stat) ->
Stat#stat{n=Stat#stat.n + 1, avg=(New+Stat#stat.avg) div 2}.
-%update(New, {N,Max,Min,Avg}) when New>Max ->
-% {N+1,New,Min,(New+Avg) div 2};
-%update(New, {N,Max,Min,Avg}) when New<Min ->
-% {N+1,Max,New,(New+Avg) div 2};
-%update(New, {N,Max,Min,Avg}) ->
-% {N+1,Max,Min,(New+Avg) div 2}.
-
print_report({E,LateS,EarlyS,I}) ->
Early = EarlyS#stat.n, Late = LateS#stat.n,
Total = E + Early + Late,
@@ -381,10 +372,10 @@ nrev([]) ->
[];
nrev([H|T]) ->
append(nrev(T), [H]).
-
+
append([H|T],Z) ->
- [H|append(T,Z)];
+ [H|append(T,Z)];
append([],X) ->
- X.
+ X.
%% ------------------------------------------------------- %%
diff --git a/lib/stdlib/test/timer_simple_SUITE.erl b/lib/stdlib/test/timer_simple_SUITE.erl
index 93fbc3a032..ff5116b8b6 100644
--- a/lib/stdlib/test/timer_simple_SUITE.erl
+++ b/lib/stdlib/test/timer_simple_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -51,12 +51,14 @@
timer/4,
timer/5]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(MAXREF, (1 bsl 18)).
-define(REFMARG, 30).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,10}}].
all() ->
[apply_after, send_after1, send_after2, send_after3,
@@ -87,222 +89,198 @@ init_per_testcase(_, Config) when is_list(Config) ->
%% Testing timer interface!!
-apply_after(doc) -> "Test of apply_after, with sending of message.";
-apply_after(suite) -> [];
+%% Test of apply_after, with sending of message.
apply_after(Config) when is_list(Config) ->
- ?line timer:apply_after(500, ?MODULE, send, [self(), ok_apply]),
- ?line ok = get_mess(1000, ok_apply).
+ timer:apply_after(500, ?MODULE, send, [self(), ok_apply]),
+ ok = get_mess(1000, ok_apply).
-send_after1(doc) -> "Test of send_after with time = 0.";
-send_after1(suite) -> [];
+%% Test of send_after with time = 0.
send_after1(Config) when is_list(Config) ->
- ?line timer:send_after(0, ok_send1),
- ?line ok = get_mess(1000, ok_send1).
+ timer:send_after(0, ok_send1),
+ ok = get_mess(1000, ok_send1).
-send_after2(doc) -> "Test of send_after with time = 500.";
-send_after2(suite) -> [];
+%% Test of send_after with time = 500.
send_after2(Config) when is_list(Config) ->
- ?line timer:send_after(500, self(), ok_send2),
- ?line ok = get_mess(2000, ok_send2).
+ timer:send_after(500, self(), ok_send2),
+ ok = get_mess(2000, ok_send2).
-send_after3(doc) -> "Test of send_after with time = 500, with receiver "
- "a registered process. [OTP-2735]";
-send_after3(suite) -> [];
+%% Test of send_after with time = 500, with receiver a registered
+%% process. [OTP-2735]
send_after3(Config) when is_list(Config) ->
- ?line Name = list_to_atom(pid_to_list(self())),
- ?line register(Name, self()),
- ?line timer:send_after(500, Name, ok_send3),
- ?line ok = get_mess(2000, ok_send3),
- ?line unregister(Name).
-
-exit_after1(doc) -> "Test of exit_after with time = 1000.";
-exit_after1(suite) -> [];
+ Name = list_to_atom(pid_to_list(self())),
+ register(Name, self()),
+ timer:send_after(500, Name, ok_send3),
+ ok = get_mess(2000, ok_send3),
+ unregister(Name).
+
+%% Test of exit_after with time = 1000.
exit_after1(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Pid = spawn_link(?MODULE, forever, []),
- ?line timer:exit_after(1000, Pid, exit_test1),
- ?line ok = get_mess(5000, {'EXIT', Pid, exit_test1}).
-
-exit_after2(doc) -> "Test of exit_after with time = 1000. The process to "
- "exit is the name of a registered process. "
- "[OTP-2735]";
-exit_after2(suite) -> [];
+ process_flag(trap_exit, true),
+ Pid = spawn_link(?MODULE, forever, []),
+ timer:exit_after(1000, Pid, exit_test1),
+ ok = get_mess(5000, {'EXIT', Pid, exit_test1}).
+
+%% Test of exit_after with time = 1000. The process to exit is the
+%% name of a registered process. [OTP-2735]
exit_after2(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Pid = spawn_link(?MODULE, forever, []),
- ?line Name = list_to_atom(pid_to_list(Pid)),
- ?line register(Name, Pid),
- ?line timer:exit_after(1000, Name, exit_test2),
- ?line ok = get_mess(2000, {'EXIT', Pid, exit_test2}).
-
-kill_after1(doc) -> "Test of kill_after with time = 1000.";
-kill_after1(suite) -> [];
+ process_flag(trap_exit, true),
+ Pid = spawn_link(?MODULE, forever, []),
+ Name = list_to_atom(pid_to_list(Pid)),
+ register(Name, Pid),
+ timer:exit_after(1000, Name, exit_test2),
+ ok = get_mess(2000, {'EXIT', Pid, exit_test2}).
+
+%% Test of kill_after with time = 1000.
kill_after1(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Pid = spawn_link(?MODULE, forever, []),
- ?line timer:kill_after(1000, Pid),
- ?line ok = get_mess(2000, {'EXIT', Pid, killed}).
-
-kill_after2(doc) -> "Test of kill_after with time = 1000. The process to "
- "exit is the name of a registered process. "
- "[OTP-2735]";
-kill_after2(suite) -> [];
+ process_flag(trap_exit, true),
+ Pid = spawn_link(?MODULE, forever, []),
+ timer:kill_after(1000, Pid),
+ ok = get_mess(2000, {'EXIT', Pid, killed}).
+
+%% Test of kill_after with time = 1000. The process to exit is the
+%% name of a registered process. [OTP-2735]
kill_after2(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Pid = spawn_link(?MODULE, forever, []),
- ?line Name = list_to_atom(pid_to_list(Pid)),
- ?line register(Name, Pid),
- ?line timer:kill_after(1000, Name),
- ?line ok = get_mess(2000, {'EXIT', Pid, killed}).
-
-apply_interval(doc) -> "Test of apply_interval by sending messages. Receive "
- "3 messages, cancel the timer, and check that we do "
- "not get any more messages.";
-apply_interval(suite) -> [];
+ process_flag(trap_exit, true),
+ Pid = spawn_link(?MODULE, forever, []),
+ Name = list_to_atom(pid_to_list(Pid)),
+ register(Name, Pid),
+ timer:kill_after(1000, Name),
+ ok = get_mess(2000, {'EXIT', Pid, killed}).
+
+%% Test of apply_interval by sending messages. Receive
+%% 3 messages, cancel the timer, and check that we do
+%% not get any more messages.
apply_interval(Config) when is_list(Config) ->
- ?line {ok, Ref} = timer:apply_interval(1000, ?MODULE, send,
+ {ok, Ref} = timer:apply_interval(1000, ?MODULE, send,
[self(), apply_int]),
- ?line ok = get_mess(1500, apply_int, 3),
- ?line timer:cancel(Ref),
- ?line nor = get_mess(1000, apply_int).
-
-send_interval1(doc) -> "Test of send_interval/2. Receive 5 messages, cancel "
- "the timer, and check that we do not get any more "
- "messages.";
-send_interval1(suite) -> [];
+ ok = get_mess(1500, apply_int, 3),
+ timer:cancel(Ref),
+ nor = get_mess(1000, apply_int).
+
+%% Test of send_interval/2. Receive 5 messages, cancel the timer, and
+%% check that we do not get any more messages.
send_interval1(Config) when is_list(Config) ->
{ok, Ref} = timer:send_interval(1000, send_int),
- ?line ok = get_mess(1500, send_int, 5),
+ ok = get_mess(1500, send_int, 5),
timer:cancel(Ref),
- ?line nor = get_mess(1000, send_int). % We should receive only five
+ nor = get_mess(1000, send_int). % We should receive only five
-send_interval2(doc) -> "Test of send_interval/3. Receive 2 messages, cancel "
- "the timer, and check that we do not get any more "
- "messages.";
-send_interval2(suite) -> [];
+%% Test of send_interval/3. Receive 2 messages, cancel the timer, and
+%% check that we do not get any more messages.
send_interval2(Config) when is_list(Config) ->
{ok, Ref} = timer:send_interval(1000, self(), send_int2),
- ?line ok = get_mess(1500, send_int2, 2),
+ ok = get_mess(1500, send_int2, 2),
timer:cancel(Ref),
- ?line nor = get_mess(1000, send_int2). % We should receive only two
+ nor = get_mess(1000, send_int2). % We should receive only two
-send_interval3(doc) -> "Test of send_interval/3. Receive 2 messages, cancel "
- "the timer, and check that we do not get any more "
- "messages. The receiver is the name of a registered "
- "process. [OTP-2735]";
-send_interval3(suite) -> [];
+%% Test of send_interval/3. Receive 2 messages, cancel the timer, and
+%% check that we do not get any more messages. The receiver is the
+%% name of a registered process. [OTP-2735]
send_interval3(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Name = list_to_atom(pid_to_list(self())),
- ?line register(Name, self()),
- ?line {ok, Ref} = timer:send_interval(1000, Name, send_int3),
- ?line ok = get_mess(1500, send_int3, 2),
+ process_flag(trap_exit, true),
+ Name = list_to_atom(pid_to_list(self())),
+ register(Name, self()),
+ {ok, Ref} = timer:send_interval(1000, Name, send_int3),
+ ok = get_mess(1500, send_int3, 2),
timer:cancel(Ref),
- ?line nor = get_mess(1000, send_int3), % We should receive only two
- ?line unregister(Name).
+ nor = get_mess(1000, send_int3), % We should receive only two
+ unregister(Name).
-send_interval4(doc) -> "Test that send interval stops sending msg when the "
- "receiving process terminates.";
-send_interval4(suite) -> [];
+%% Test that send interval stops sending msg when the receiving
+%% process terminates.
send_interval4(Config) when is_list(Config) ->
- ?line timer:send_interval(500, one_time_only),
+ timer:send_interval(500, one_time_only),
receive
one_time_only -> ok
end,
- ?line timer_server ! {'EXIT', self(), normal}, % Should remove the timer
- ?line timer:send_after(600, send_intv_ok),
- ?line send_intv_ok = receive
- Msg -> Msg
- end.
-
-cancel1(doc) -> "Test that we can cancel a timer.";
-cancel1(suite) -> [];
+ timer_server ! {'EXIT', self(), normal}, % Should remove the timer
+ timer:send_after(600, send_intv_ok),
+ send_intv_ok = receive
+ Msg -> Msg
+ end.
+
+%% Test that we can cancel a timer.
cancel1(Config) when is_list(Config) ->
- ?line {ok, Ref} = timer:send_after(1000, this_should_be_canceled),
- ?line timer:cancel(Ref),
- ?line nor = get_mess(2000, this_should_be_canceled). % We should rec 0 msgs
+ {ok, Ref} = timer:send_after(1000, this_should_be_canceled),
+ timer:cancel(Ref),
+ nor = get_mess(2000, this_should_be_canceled). % We should rec 0 msgs
-cancel2(doc) -> "Test cancel/1 with bad argument.";
-cancel2(suite) -> [];
+%% Test cancel/1 with bad argument.
cancel2(Config) when is_list(Config) ->
- ?line {error, badarg} = timer:cancel(no_reference).
+ {error, badarg} = timer:cancel(no_reference).
-tc(doc) -> "Test sleep/1 and tc/3.";
-tc(suite) -> [];
+%% Test sleep/1 and tc/3.
tc(Config) when is_list(Config) ->
%% This should test both sleep and tc/3
- ?line {Res1, ok} = timer:tc(timer, sleep, [500]),
- ?line ok = if
+ {Res1, ok} = timer:tc(timer, sleep, [500]),
+ ok = if
Res1 < 500*1000 -> {too_early, Res1}; % Too early
Res1 > 800*1000 -> {too_late, Res1}; % Too much time
true -> ok
end,
%% tc/2
- ?line {Res2, ok} = timer:tc(fun(T) -> timer:sleep(T) end, [500]),
- ?line ok = if
+ {Res2, ok} = timer:tc(fun(T) -> timer:sleep(T) end, [500]),
+ ok = if
Res2 < 500*1000 -> {too_early, Res2}; % Too early
Res2 > 800*1000 -> {too_late, Res2}; % Too much time
true -> ok
end,
-
+
%% tc/1
- ?line {Res3, ok} = timer:tc(fun() -> timer:sleep(500) end),
- ?line ok = if
+ {Res3, ok} = timer:tc(fun() -> timer:sleep(500) end),
+ ok = if
Res3 < 500*1000 -> {too_early, Res3}; % Too early
Res3 > 800*1000 -> {too_late, Res3}; % Too much time
true -> ok
end,
%% Check that timer:tc don't catch errors
- ?line ok = try timer:tc(erlang, exit, [foo])
- catch exit:foo -> ok
- end,
-
- ?line ok = try timer:tc(fun(Reason) -> 1 = Reason end, [foo])
- catch error:{badmatch,_} -> ok
- end,
-
- ?line ok = try timer:tc(fun() -> throw(foo) end)
- catch foo -> ok
- end,
-
+ ok = try timer:tc(erlang, exit, [foo])
+ catch exit:foo -> ok
+ end,
+
+ ok = try timer:tc(fun(Reason) -> 1 = Reason end, [foo])
+ catch error:{badmatch,_} -> ok
+ end,
+
+ ok = try timer:tc(fun() -> throw(foo) end)
+ catch foo -> ok
+ end,
+
%% Check that return values are propageted
Self = self(),
- ?line {_, Self} = timer:tc(erlang, self, []),
- ?line {_, Self} = timer:tc(fun(P) -> P end, [self()]),
- ?line {_, Self} = timer:tc(fun() -> self() end),
-
- ?line Sec = timer:seconds(4),
- ?line Min = timer:minutes(4),
- ?line Hour = timer:hours(4),
- ?line MyRes = 4*1000 + 4*60*1000 + 4*60*60*1000,
- ?line if MyRes == Sec + Min + Hour -> ok end,
- ?line TimerRes = timer:hms(4,4,4),
- ?line if MyRes == TimerRes -> ok end,
+ {_, Self} = timer:tc(erlang, self, []),
+ {_, Self} = timer:tc(fun(P) -> P end, [self()]),
+ {_, Self} = timer:tc(fun() -> self() end),
+
+ Sec = timer:seconds(4),
+ Min = timer:minutes(4),
+ Hour = timer:hours(4),
+ MyRes = 4*1000 + 4*60*1000 + 4*60*60*1000,
+ if MyRes == Sec + Min + Hour -> ok end,
+ TimerRes = timer:hms(4,4,4),
+ if MyRes == TimerRes -> ok end,
ok.
-unique_refs(doc) ->
- "Tests that cancellations of one-shot timers do not accidentally "
- "cancel interval timers [OTP-2771].";
-unique_refs(suite) ->
- [];
+%% Test that cancellations of one-shot timers do not accidentally
+%% cancel interval timers. [OTP-2771].
unique_refs(Config) when is_list(Config) ->
- ?line ITimers = repeat_send_interval(10), % 10 interval timers
- ?line eat_refs(?MAXREF - ?REFMARG),
- ?line set_and_cancel_one_shots(?REFMARG),
- ?line NumLeft = num_timers(),
- ?line io:format("~w timers left, should be 10\n", [NumLeft]),
- ?line cancel(ITimers),
- ?line receive_nisse(),
- ?line 10 = NumLeft.
+ ITimers = repeat_send_interval(10), % 10 interval timers
+ eat_refs(?MAXREF - ?REFMARG),
+ set_and_cancel_one_shots(?REFMARG),
+ NumLeft = num_timers(),
+ io:format("~w timers left, should be 10\n", [NumLeft]),
+ cancel(ITimers),
+ receive_nisse(),
+ 10 = NumLeft.
repeat_send_interval(0) ->
[];
repeat_send_interval(M) ->
- ?line {ok, Ref} = timer:send_interval(6000,self(), nisse),
- ?line [Ref| repeat_send_interval(M - 1)].
+ {ok, Ref} = timer:send_interval(6000,self(), nisse),
+ [Ref| repeat_send_interval(M - 1)].
eat_refs(0) ->
0;
@@ -320,8 +298,8 @@ set_and_cancel_one_shots(N) ->
set_and_cancel_one_shots(N-1).
cancel([T| Ts]) ->
- ?line timer:cancel(T),
- ?line cancel(Ts);
+ timer:cancel(T),
+ cancel(Ts);
cancel([]) ->
ok.
@@ -344,7 +322,7 @@ get_mess(Time, Mess, N) ->
receive
Mess -> get_mess(Time, Mess, N-1)
after Time
- -> nor % Not Received
+ -> nor % Not Received
end.
forever() ->
@@ -352,16 +330,13 @@ forever() ->
forever().
-%
-% Testing for performance (on different implementations) of timers
-%
+%%
+%% Testing for performance (on different implementations) of timers
+%%
+
-timer_perf(suite) -> [];
timer_perf(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(10)),
- Res = performance(timer),
- ?t:timetrap_cancel(Dog),
- Res.
+ performance(timer).
performance(Mod) ->
process_flag(trap_exit, true),
@@ -374,7 +349,7 @@ performance(Mod) ->
big_test(M) ->
Load_Pids = start_nrev(20, M), % Increase if more load wanted :)
-
+
LPids = spawn_timers(5, M, 10000, 5),
apply(M, sleep, [4000]),
@@ -384,7 +359,7 @@ big_test(M) ->
SPids = spawn_timers(15, M, 100, 3),
Res = wait(SPids ++ MPids ++ LPids, [], 0, M),
-
+
lists:foreach(fun(Pid) -> exit(Pid, kill) end, Load_Pids),
Res.
@@ -395,12 +370,12 @@ wait(Pids, ResList, N, M) ->
{Pid, ok, Res, T} ->
wait(lists:delete(Pid, Pids), [{T, Res} | ResList], N, M);
{Pid, Error}->
- ?line test_server:fail(Error),
+ ct:fail(Error),
wait(lists:delete(Pid, Pids), ResList, N+1, M);
{'EXIT', Pid, normal} ->
wait(lists:delete(Pid, Pids), ResList, N, M);
{'EXIT', Pid, Reason} ->
- ?line test_server:fail({Pid,Reason})
+ ct:fail({Pid,Reason})
end.
spawn_timers(0, _, _, _) ->
@@ -440,7 +415,6 @@ timer_irec(Start, T, {N, Max}, Res, {Pid, Mod, Ref}) ->
done ->
Now = system_time(),
Elapsed = (Now - (Start + (N*T*1000))) div 1000,
-% io:format("~w Now ~w Started ~w Elap ~w~n", [T,Now,Start,Elapsed]),
timer_irec(Start, T,
{N+1, Max},
[Elapsed | Res],
@@ -476,11 +450,11 @@ nrev([]) ->
[];
nrev([H|T]) ->
append(nrev(T), [H]).
-
+
append([H|T],Z) ->
- [H|append(T,Z)];
+ [H|append(T,Z)];
append([],X) ->
- X.
+ X.
system_time() ->
erlang:monotonic_time(micro_seconds).
@@ -488,7 +462,6 @@ system_time() ->
%% ------------------------------------------------------- %%
report_result({Res, 0}) ->
-% io:format("DEBUG0 all ~p ~n", [Res]),
{A_List, I_List} = split_list(Res, [], []),
A_val = calc_a_val(A_List),
I_val = calc_i_val(I_List),
@@ -497,7 +470,7 @@ report_result({Res, 0}) ->
report_result({Head, N}) ->
io:format("Test Failed: Number of internal tmo ~w~n", [N]),
- ?line test_server:fail({Head, N}).
+ ct:fail({Head, N}).
split_list([], AL, IL) ->
{AL, IL};
@@ -547,11 +520,11 @@ get_ivals(List) ->
LTot = lists:map(fun(X) -> element(2, X) end, List),
LMin = lists:map(fun(X) -> element(4, X) end, List),
LMax = lists:map(fun(X) -> element(5, X) end, List),
-
+
MaxTot = lists:max(LTot),
MinTot = lists:min(LTot),
AverTot = lists:sum(LTot) div Len,
-
+
IterMax = lists:max(LMax),
IterMin = lists:min(LMin),
IterAver= AverTot div Num,
diff --git a/lib/stdlib/test/unicode_SUITE.erl b/lib/stdlib/test/unicode_SUITE.erl
index 8bb2555213..07d63bdf22 100644
--- a/lib/stdlib/test/unicode_SUITE.erl
+++ b/lib/stdlib/test/unicode_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,12 +19,9 @@
%%
-module(unicode_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2,
- end_per_testcase/2,
+-export([all/0, suite/0,groups/0,
utf8_illegal_sequences_bif/1,
utf16_illegal_sequences_bif/1,
random_lists/1,
@@ -37,16 +34,10 @@
ex_binaries_errors_utf16_big/1,
ex_binaries_errors_utf32_little/1,
ex_binaries_errors_utf32_big/1]).
-
-init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(20)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,20}}].
all() ->
[utf8_illegal_sequences_bif,
@@ -63,24 +54,12 @@ groups() ->
ex_binaries_errors_utf32_little,
ex_binaries_errors_utf32_big]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
binaries_errors_limit(Config) when is_list(Config) ->
setlimit(10),
ex_binaries_errors_utf8(Config),
setlimit(default),
ok.
-
+
ex_binaries_errors_utf8(Config) when is_list(Config) ->
%% Original smoke test, we should not forget the original offset...
<<_:8,_:8,RR2/binary>> = <<$a,$b,164,165,$c>>,
@@ -151,10 +130,10 @@ utf16_inner_loop([_|List], BrokenPart, BrokenSz, PartlyBroken, PBSz, Endian) ->
utf16_inner_loop(List, BrokenPart, BrokenSz, PartlyBroken, PBSz, Endian);
utf16_inner_loop([], _, _, _, _, _) ->
ok.
-
+
ex_binaries_errors_utf32_big(Config) when is_list(Config) ->
ex_binaries_errors_utf32(big).
-
+
ex_binaries_errors_utf32_little(Config) when is_list(Config) ->
ex_binaries_errors_utf32(little).
@@ -180,7 +159,7 @@ ex_binaries_errors_utf32(Endian) ->
PartlyBroken, PBSz, Endian)
end || N <- lists:seq(1, 16, 3) ],
ok.
-
+
utf32_inner_loop([_|List], BrokenPart, BrokenSz, PartlyBroken, PBSz, Endian) ->
Sz = length(List)*4 + BrokenSz,
Chomped = binary:part(PartlyBroken, PBSz - Sz, Sz),
@@ -199,115 +178,115 @@ exceptions(Config) when is_list(Config) ->
ex_exceptions(Config).
ex_exceptions(Config) when is_list(Config) ->
- ?line L = lists:seq(0,255),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L++255,unicode)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary({1,2,3},unicode)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1,unicode)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1.0,unicode)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary('1',unicode)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,apa],unicode)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,4.0],unicode)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L++255,latin1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary({1,2,3},latin1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1,latin1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1.0,latin1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary('1',latin1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,apa],latin1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,4.0],latin1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,gnarfl)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,L)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,{latin1})),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,[latin1])),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,1.0)),
+ L = lists:seq(0,255),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L++255,unicode)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary({1,2,3},unicode)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1,unicode)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1.0,unicode)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary('1',unicode)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,apa],unicode)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,4.0],unicode)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L++255,latin1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary({1,2,3},latin1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1,latin1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1.0,latin1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary('1',latin1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,apa],latin1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,4.0],latin1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,gnarfl)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,L)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,{latin1})),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,[latin1])),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,1.0)),
Encodings = [unicode, utf8,utf16,utf32,{utf16,big},
{utf16,little},{utf32,big},{utf32,little}],
[ begin
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L++255,unicode,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary({1,2,3},unicode,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1,unicode,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1.0,unicode,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary('1',unicode,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,apa],unicode,
- Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,4.0],unicode,
- Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L++255,latin1,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary({1,2,3},latin1,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1,latin1,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1.0,latin1,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary('1',latin1,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,apa],latin1,
- Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,4.0],latin1,
- Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,gnarfl,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,L,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,{latin1},Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,[latin1],Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,1,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,1.0,Enc))
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L++255,unicode,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary({1,2,3},unicode,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1,unicode,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1.0,unicode,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary('1',unicode,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,apa],unicode,
+ Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,4.0],unicode,
+ Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L++255,latin1,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary({1,2,3},latin1,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1,latin1,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(1.0,latin1,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary('1',latin1,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,apa],latin1,
+ Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary([1,2,3,4.0],latin1,
+ Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,gnarfl,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,L,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,{latin1},Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,[latin1],Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,1,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_binary(L,1.0,Enc))
end || Enc <- Encodings ],
Encodings2 = [latin1, unicode, utf8,utf16,utf32,{utf16,big},
- {utf16,little},{utf32,big},{utf32,little}],
+ {utf16,little},{utf32,big},{utf32,little}],
[ begin
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L++255,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list({1,2,3},Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(1,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(1.0,Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list('1',Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list([1,2,3,apa],Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list([1,2,3,4.0],Enc)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,{Enc})),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,[Enc]))
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L++255,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list({1,2,3},Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(1,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(1.0,Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list('1',Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list([1,2,3,apa],Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list([1,2,3,4.0],Enc)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,{Enc})),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,[Enc]))
end || Enc <- Encodings2 ],
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,gnarfl)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,L)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,1)),
- ?line {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,1.0)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,gnarfl)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,L)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,1)),
+ {'EXIT',{badarg,_}} = (catch unicode:characters_to_list(L,1.0)),
[ begin
- ?line Bx = unicode:characters_to_binary(L,latin1, Enc),
- ?line L = unicode:characters_to_list(Bx,Enc)
+ Bx = unicode:characters_to_binary(L,latin1, Enc),
+ L = unicode:characters_to_list(Bx,Enc)
end || Enc <- Encodings ],
- ?line B = unicode:characters_to_binary(L,latin1),
- ?line L = unicode:characters_to_list(B,unicode),
- ?line L = unicode:characters_to_list(list_to_binary(L),latin1),
- ?line More = <<B/binary,0,1,2>>,
- ?line B2 = list_to_binary([254,255]),
- ?line B3 = list_to_binary([0,1,2,254,255]),
- ?line {error,B,Rest1} = unicode:characters_to_binary([L,B2],unicode),
- ?line B2 = iolist_to_binary(Rest1),
- ?line {error,More,Rest2} = unicode:characters_to_binary([L,B3],unicode),
- [ begin ?line {error,_,_} = unicode:characters_to_binary([L,B2],unicode,Enc) end
+ B = unicode:characters_to_binary(L,latin1),
+ L = unicode:characters_to_list(B,unicode),
+ L = unicode:characters_to_list(list_to_binary(L),latin1),
+ More = <<B/binary,0,1,2>>,
+ B2 = list_to_binary([254,255]),
+ B3 = list_to_binary([0,1,2,254,255]),
+ {error,B,Rest1} = unicode:characters_to_binary([L,B2],unicode),
+ B2 = iolist_to_binary(Rest1),
+ {error,More,Rest2} = unicode:characters_to_binary([L,B3],unicode),
+ [ begin {error,_,_} = unicode:characters_to_binary([L,B2],unicode,Enc) end
|| Enc <- Encodings ],
- ?line Valid0 = unicode:characters_to_binary([L,254,255],unicode),
- ?line Valid1 = unicode:characters_to_binary([L,254,255],latin1),
- ?line Valid2 = unicode:characters_to_binary([L,254,255,256,257],unicode),
- ?line Valid3 = unicode:characters_to_binary([L,B2],latin1),
- ?line true = is_binary(Valid0),
- ?line true = is_binary(Valid1),
- ?line true = is_binary(Valid2),
- ?line true = is_binary(Valid3),
- ?line Valid4 = unicode:characters_to_binary([L,B3],latin1),
- ?line true = is_binary(Valid4),
- ?line B2 = iolist_to_binary(Rest2),
- ?line true = (L ++ [254,255] =:= unicode:characters_to_list(Valid0,unicode)),
- ?line true = (L ++ [254,255,256,257] =:= unicode:characters_to_list(Valid2,unicode)),
+ Valid0 = unicode:characters_to_binary([L,254,255],unicode),
+ Valid1 = unicode:characters_to_binary([L,254,255],latin1),
+ Valid2 = unicode:characters_to_binary([L,254,255,256,257],unicode),
+ Valid3 = unicode:characters_to_binary([L,B2],latin1),
+ true = is_binary(Valid0),
+ true = is_binary(Valid1),
+ true = is_binary(Valid2),
+ true = is_binary(Valid3),
+ Valid4 = unicode:characters_to_binary([L,B3],latin1),
+ true = is_binary(Valid4),
+ B2 = iolist_to_binary(Rest2),
+ true = (L ++ [254,255] =:= unicode:characters_to_list(Valid0,unicode)),
+ true = (L ++ [254,255,256,257] =:= unicode:characters_to_list(Valid2,unicode)),
lists:foreach(fun(Enco) ->
- ?line Valid0x = unicode:characters_to_binary([L,254,255],unicode,Enco),
- ?line Valid1x = unicode:characters_to_binary([L,254,255],latin1,Enco),
- ?line Valid2x = unicode:characters_to_binary([L,254,255,256,257],unicode,Enco),
- ?line Valid3x = unicode:characters_to_binary([L,B2],latin1,Enco),
- ?line true = is_binary(Valid0x),
- ?line true = is_binary(Valid1x),
- ?line true = is_binary(Valid2x),
- ?line true = is_binary(Valid3x)
+ Valid0x = unicode:characters_to_binary([L,254,255],unicode,Enco),
+ Valid1x = unicode:characters_to_binary([L,254,255],latin1,Enco),
+ Valid2x = unicode:characters_to_binary([L,254,255,256,257],unicode,Enco),
+ Valid3x = unicode:characters_to_binary([L,B2],latin1,Enco),
+ true = is_binary(Valid0x),
+ true = is_binary(Valid1x),
+ true = is_binary(Valid2x),
+ true = is_binary(Valid3x)
end, Encodings),
ok.
-
+
latin1(Config) when is_list(Config) ->
setlimit(10),
@@ -316,132 +295,132 @@ latin1(Config) when is_list(Config) ->
ex_latin1(Config).
ex_latin1(Config) when is_list(Config) ->
- ?line All = lists:seq(0,255),
- ?line AllBin = list_to_binary(All),
- ?line AllUtf8 = unicode:characters_to_binary(All,latin1),
- ?line AllUtf8 = unicode:characters_to_binary(AllBin,latin1),
- ?line AllUtf8 = unicode:characters_to_binary([AllBin],latin1),
- ?line AllUtf8 = unicode:characters_to_binary(make_unaligned(AllBin),latin1),
- ?line AllUtf8 = unicode:characters_to_binary([make_unaligned(AllBin)],latin1),
- ?line AllUtf8 = list_to_utf8_bsyntax([AllBin],latin1),
- ?line AllUtf8 = list_to_utf8_bsyntax([make_unaligned(AllBin)],latin1),
- ?line AllUtf8 = unicode_mixed_to_utf8_1(All),
-
- ?line AllUtf16_Big = unicode:characters_to_binary(All,latin1,utf16),
- ?line AllUtf16_Big = unicode:characters_to_binary(AllBin,latin1,utf16),
- ?line AllUtf16_Big = unicode:characters_to_binary([AllBin],latin1,utf16),
- ?line AllUtf16_Big = unicode:characters_to_binary(make_unaligned(AllBin),latin1,utf16),
- ?line AllUtf16_Big = unicode:characters_to_binary([make_unaligned(AllBin)],latin1,utf16),
- ?line AllUtf16_Big = list_to_utf16_big_bsyntax([AllBin],latin1),
- ?line AllUtf16_Big = list_to_utf16_big_bsyntax([make_unaligned(AllBin)],latin1),
-
- ?line AllUtf16_Little = unicode:characters_to_binary(All,latin1,{utf16,little}),
- ?line AllUtf16_Little = unicode:characters_to_binary(AllBin,latin1,{utf16,little}),
- ?line AllUtf16_Little = unicode:characters_to_binary([AllBin],latin1,{utf16,little}),
- ?line AllUtf16_Little = unicode:characters_to_binary(make_unaligned(AllBin),latin1,
- {utf16,little}),
- ?line AllUtf16_Little = unicode:characters_to_binary([make_unaligned(AllBin)],latin1,
- {utf16,little}),
- ?line AllUtf16_Little = list_to_utf16_little_bsyntax([AllBin],latin1),
- ?line AllUtf16_Little = list_to_utf16_little_bsyntax([make_unaligned(AllBin)],latin1),
-
- ?line AllUtf32_Big = unicode:characters_to_binary(All,latin1,utf32),
- ?line AllUtf32_Big = unicode:characters_to_binary(AllBin,latin1,utf32),
- ?line AllUtf32_Big = unicode:characters_to_binary([AllBin],latin1,utf32),
- ?line AllUtf32_Big = unicode:characters_to_binary(make_unaligned(AllBin),latin1,utf32),
- ?line AllUtf32_Big = unicode:characters_to_binary([make_unaligned(AllBin)],latin1,utf32),
- ?line AllUtf32_Big = list_to_utf32_big_bsyntax([AllBin],latin1),
- ?line AllUtf32_Big = list_to_utf32_big_bsyntax([make_unaligned(AllBin)],latin1),
-
- ?line AllUtf32_Little = unicode:characters_to_binary(All,latin1,{utf32,little}),
- ?line AllUtf32_Little = unicode:characters_to_binary(AllBin,latin1,{utf32,little}),
- ?line AllUtf32_Little = unicode:characters_to_binary([AllBin],latin1,{utf32,little}),
- ?line AllUtf32_Little = unicode:characters_to_binary(make_unaligned(AllBin),latin1,
- {utf32,little}),
- ?line AllUtf32_Little = unicode:characters_to_binary([make_unaligned(AllBin)],latin1,
- {utf32,little}),
- ?line AllUtf32_Little = list_to_utf32_little_bsyntax([AllBin],latin1),
- ?line AllUtf32_Little = list_to_utf32_little_bsyntax([make_unaligned(AllBin)],latin1),
-
- ?line DoubleUtf8 = <<AllUtf8/binary,AllUtf8/binary>>,
- ?line DoubleUtf8 = unicode:characters_to_binary([All,AllBin],latin1),
- ?line DoubleUtf8 =
+ All = lists:seq(0,255),
+ AllBin = list_to_binary(All),
+ AllUtf8 = unicode:characters_to_binary(All,latin1),
+ AllUtf8 = unicode:characters_to_binary(AllBin,latin1),
+ AllUtf8 = unicode:characters_to_binary([AllBin],latin1),
+ AllUtf8 = unicode:characters_to_binary(make_unaligned(AllBin),latin1),
+ AllUtf8 = unicode:characters_to_binary([make_unaligned(AllBin)],latin1),
+ AllUtf8 = list_to_utf8_bsyntax([AllBin],latin1),
+ AllUtf8 = list_to_utf8_bsyntax([make_unaligned(AllBin)],latin1),
+ AllUtf8 = unicode_mixed_to_utf8_1(All),
+
+ AllUtf16_Big = unicode:characters_to_binary(All,latin1,utf16),
+ AllUtf16_Big = unicode:characters_to_binary(AllBin,latin1,utf16),
+ AllUtf16_Big = unicode:characters_to_binary([AllBin],latin1,utf16),
+ AllUtf16_Big = unicode:characters_to_binary(make_unaligned(AllBin),latin1,utf16),
+ AllUtf16_Big = unicode:characters_to_binary([make_unaligned(AllBin)],latin1,utf16),
+ AllUtf16_Big = list_to_utf16_big_bsyntax([AllBin],latin1),
+ AllUtf16_Big = list_to_utf16_big_bsyntax([make_unaligned(AllBin)],latin1),
+
+ AllUtf16_Little = unicode:characters_to_binary(All,latin1,{utf16,little}),
+ AllUtf16_Little = unicode:characters_to_binary(AllBin,latin1,{utf16,little}),
+ AllUtf16_Little = unicode:characters_to_binary([AllBin],latin1,{utf16,little}),
+ AllUtf16_Little = unicode:characters_to_binary(make_unaligned(AllBin),latin1,
+ {utf16,little}),
+ AllUtf16_Little = unicode:characters_to_binary([make_unaligned(AllBin)],latin1,
+ {utf16,little}),
+ AllUtf16_Little = list_to_utf16_little_bsyntax([AllBin],latin1),
+ AllUtf16_Little = list_to_utf16_little_bsyntax([make_unaligned(AllBin)],latin1),
+
+ AllUtf32_Big = unicode:characters_to_binary(All,latin1,utf32),
+ AllUtf32_Big = unicode:characters_to_binary(AllBin,latin1,utf32),
+ AllUtf32_Big = unicode:characters_to_binary([AllBin],latin1,utf32),
+ AllUtf32_Big = unicode:characters_to_binary(make_unaligned(AllBin),latin1,utf32),
+ AllUtf32_Big = unicode:characters_to_binary([make_unaligned(AllBin)],latin1,utf32),
+ AllUtf32_Big = list_to_utf32_big_bsyntax([AllBin],latin1),
+ AllUtf32_Big = list_to_utf32_big_bsyntax([make_unaligned(AllBin)],latin1),
+
+ AllUtf32_Little = unicode:characters_to_binary(All,latin1,{utf32,little}),
+ AllUtf32_Little = unicode:characters_to_binary(AllBin,latin1,{utf32,little}),
+ AllUtf32_Little = unicode:characters_to_binary([AllBin],latin1,{utf32,little}),
+ AllUtf32_Little = unicode:characters_to_binary(make_unaligned(AllBin),latin1,
+ {utf32,little}),
+ AllUtf32_Little = unicode:characters_to_binary([make_unaligned(AllBin)],latin1,
+ {utf32,little}),
+ AllUtf32_Little = list_to_utf32_little_bsyntax([AllBin],latin1),
+ AllUtf32_Little = list_to_utf32_little_bsyntax([make_unaligned(AllBin)],latin1),
+
+ DoubleUtf8 = <<AllUtf8/binary,AllUtf8/binary>>,
+ DoubleUtf8 = unicode:characters_to_binary([All,AllBin],latin1),
+ DoubleUtf8 =
unicode:characters_to_binary([All,make_unaligned(AllBin)],latin1),
- ?line DoubleUtf8 = unicode:characters_to_binary([All|AllBin],latin1),
- ?line DoubleUtf8 =
+ DoubleUtf8 = unicode:characters_to_binary([All|AllBin],latin1),
+ DoubleUtf8 =
unicode:characters_to_binary([All|make_unaligned(AllBin)],latin1),
- ?line DoubleUtf8 = unicode:characters_to_binary([AllBin,All],latin1),
- ?line DoubleUtf8 = unicode:characters_to_binary([AllBin|All],latin1),
- ?line DoubleUtf8 = list_to_utf8_bsyntax([AllBin|All],latin1),
+ DoubleUtf8 = unicode:characters_to_binary([AllBin,All],latin1),
+ DoubleUtf8 = unicode:characters_to_binary([AllBin|All],latin1),
+ DoubleUtf8 = list_to_utf8_bsyntax([AllBin|All],latin1),
- ?line DoubleUtf16 = <<AllUtf16_Big/binary,AllUtf16_Big/binary>>,
- ?line DoubleUtf16 = unicode:characters_to_binary([All,AllBin],latin1,{utf16,big}),
- ?line DoubleUtf16 =
+ DoubleUtf16 = <<AllUtf16_Big/binary,AllUtf16_Big/binary>>,
+ DoubleUtf16 = unicode:characters_to_binary([All,AllBin],latin1,{utf16,big}),
+ DoubleUtf16 =
unicode:characters_to_binary([All,make_unaligned(AllBin)],latin1,{utf16,big}),
- ?line DoubleUtf16 = unicode:characters_to_binary([All|AllBin],latin1,{utf16,big}),
- ?line DoubleUtf16 =
+ DoubleUtf16 = unicode:characters_to_binary([All|AllBin],latin1,{utf16,big}),
+ DoubleUtf16 =
unicode:characters_to_binary([All|make_unaligned(AllBin)],latin1,{utf16,big}),
- ?line DoubleUtf16 = unicode:characters_to_binary([AllBin,All],latin1,{utf16,big}),
- ?line DoubleUtf16 = unicode:characters_to_binary([AllBin|All],latin1,{utf16,big}),
- ?line DoubleUtf16 = list_to_utf16_big_bsyntax([AllBin|All],latin1),
-
- ?line All = unicode:characters_to_list(AllUtf8,unicode),
- ?line All = unicode:characters_to_list(make_unaligned(AllUtf8),unicode),
- ?line All = utf8_to_list_bsyntax(AllUtf8),
- ?line AllAll = All ++ All,
- ?line AllAll = unicode:characters_to_list(DoubleUtf8,unicode),
- ?line AllAll = unicode:characters_to_list(make_unaligned(DoubleUtf8),unicode),
- ?line AllAll = utf8_to_list_bsyntax(DoubleUtf8),
- ?line {error,AllUtf8,Rest1} = unicode:characters_to_binary(All++[16#FFF],latin1),
- ?line [16#FFF] = lists:flatten(Rest1),
- ?line {error,DoubleUtf8,Rest2} =
+ DoubleUtf16 = unicode:characters_to_binary([AllBin,All],latin1,{utf16,big}),
+ DoubleUtf16 = unicode:characters_to_binary([AllBin|All],latin1,{utf16,big}),
+ DoubleUtf16 = list_to_utf16_big_bsyntax([AllBin|All],latin1),
+
+ All = unicode:characters_to_list(AllUtf8,unicode),
+ All = unicode:characters_to_list(make_unaligned(AllUtf8),unicode),
+ All = utf8_to_list_bsyntax(AllUtf8),
+ AllAll = All ++ All,
+ AllAll = unicode:characters_to_list(DoubleUtf8,unicode),
+ AllAll = unicode:characters_to_list(make_unaligned(DoubleUtf8),unicode),
+ AllAll = utf8_to_list_bsyntax(DoubleUtf8),
+ {error,AllUtf8,Rest1} = unicode:characters_to_binary(All++[16#FFF],latin1),
+ [16#FFF] = lists:flatten(Rest1),
+ {error,DoubleUtf8,Rest2} =
unicode:characters_to_binary([All,AllBin,16#FFF],latin1),
- ?line {error,DoubleUtf16,Rest2x} =
+ {error,DoubleUtf16,Rest2x} =
unicode:characters_to_binary([All,AllBin,16#FFF],latin1,utf16),
- ?line [16#FFF] = lists:flatten(Rest2),
- ?line [16#FFF] = lists:flatten(Rest2x),
- ?line {error,AllUtf8,Rest3} =
+ [16#FFF] = lists:flatten(Rest2),
+ [16#FFF] = lists:flatten(Rest2x),
+ {error,AllUtf8,Rest3} =
unicode:characters_to_binary([All,16#FFF,AllBin,16#FFF],
- latin1),
- ?line {error,AllUtf8,Rest3} =
+ latin1),
+ {error,AllUtf8,Rest3} =
unicode:characters_to_binary([All,16#FFF,make_unaligned(AllBin),16#FFF],
- latin1),
- ?line {error,AllUtf16_Big,Rest3x} =
+ latin1),
+ {error,AllUtf16_Big,Rest3x} =
unicode:characters_to_binary([All,16#FFF,AllBin,16#FFF],
- latin1,{utf16,big}),
- ?line {error,AllUtf16_Big,Rest3x} =
+ latin1,{utf16,big}),
+ {error,AllUtf16_Big,Rest3x} =
unicode:characters_to_binary([All,16#FFF,make_unaligned(AllBin),16#FFF],
- latin1,{utf16,big}),
- ?line [16#FFF,AllBin,16#FFF] = lists:flatten(Rest3),
- ?line [16#FFF,AllBin,16#FFF] = lists:flatten(Rest3x),
- ?line DoubleSize = byte_size(DoubleUtf8),
- ?line AllBut1 = DoubleSize - 1,
- ?line AllBut2 = DoubleSize - 2,
- ?line <<MissingLastByte:AllBut1/binary,_>> = DoubleUtf8,
- ?line <<_:AllBut2/binary,MissingStart:1/binary,_>> = DoubleUtf8,
- ?line {ChompedList,_} = lists:split(length(AllAll) - 1,AllAll),
- ?line {incomplete,ChompedList,MissingStart} =
+ latin1,{utf16,big}),
+ [16#FFF,AllBin,16#FFF] = lists:flatten(Rest3),
+ [16#FFF,AllBin,16#FFF] = lists:flatten(Rest3x),
+ DoubleSize = byte_size(DoubleUtf8),
+ AllBut1 = DoubleSize - 1,
+ AllBut2 = DoubleSize - 2,
+ <<MissingLastByte:AllBut1/binary,_>> = DoubleUtf8,
+ <<_:AllBut2/binary,MissingStart:1/binary,_>> = DoubleUtf8,
+ {ChompedList,_} = lists:split(length(AllAll) - 1,AllAll),
+ {incomplete,ChompedList,MissingStart} =
unicode:characters_to_list(MissingLastByte,unicode),
- ?line {incomplete,ChompedList,MissingStart} =
+ {incomplete,ChompedList,MissingStart} =
unicode:characters_to_list(make_unaligned(MissingLastByte),unicode),
- ?line DoubleSize16 = byte_size(DoubleUtf16),
- ?line DoubleUtf16_2 = list_to_binary([DoubleUtf16,<<16#FFFFF/utf16-big>>]),
- ?line DoubleSize16_2 = byte_size(DoubleUtf16_2),
- ?line AllBut1_16 = DoubleSize16 - 1,
- ?line AllBut2_16_2 = DoubleSize16_2 - 2,
- ?line <<MissingLastBytes16:AllBut2_16_2/binary,_,_>> = DoubleUtf16_2,
- ?line <<MissingLastByte16:AllBut1_16/binary,_>> = DoubleUtf16,
- ?line {incomplete,AllAll,_} =
+ DoubleSize16 = byte_size(DoubleUtf16),
+ DoubleUtf16_2 = list_to_binary([DoubleUtf16,<<16#FFFFF/utf16-big>>]),
+ DoubleSize16_2 = byte_size(DoubleUtf16_2),
+ AllBut1_16 = DoubleSize16 - 1,
+ AllBut2_16_2 = DoubleSize16_2 - 2,
+ <<MissingLastBytes16:AllBut2_16_2/binary,_,_>> = DoubleUtf16_2,
+ <<MissingLastByte16:AllBut1_16/binary,_>> = DoubleUtf16,
+ {incomplete,AllAll,_} =
unicode:characters_to_list(MissingLastBytes16,utf16),
- ?line {incomplete,AllAll,_} =
+ {incomplete,AllAll,_} =
unicode:characters_to_list(make_unaligned(MissingLastBytes16),utf16),
- ?line {incomplete,ChompedList,_} =
+ {incomplete,ChompedList,_} =
unicode:characters_to_list(MissingLastByte16,utf16),
- ?line {incomplete,ChompedList,_} =
+ {incomplete,ChompedList,_} =
unicode:characters_to_list(make_unaligned(MissingLastByte16),utf16),
ok.
-
+
roundtrips(Config) when is_list(Config) ->
setlimit(10),
ex_roundtrips(Config),
@@ -449,23 +428,21 @@ roundtrips(Config) when is_list(Config) ->
ex_roundtrips(Config).
ex_roundtrips(Config) when is_list(Config) ->
- ?line L1 = ranges(0, 16#D800 - 1,
- erlang:system_info(context_reductions) * 11),
- ?line L2 = ranges(16#DFFF + 1, 16#10000 - 1,
- erlang:system_info(context_reductions) * 11),
- %?line L3 = ranges(16#FFFF + 1, 16#10FFFF,
- % erlang:system_info(context_reductions) * 11),
- ?line L3 = ranges(16#FFFFF, 16#10FFFF,
- erlang:system_info(context_reductions) * 11),
- ?line L = L1 ++ L2 ++ L3,
- ?line LLen = length(L),
- ?line Parts = erlang:system_info(schedulers),
- ?line Lists = splitup(L,LLen,Parts),
- ?line PidRefs = [spawn_monitor(fun() ->
- do_roundtrips(MyPart)
- end) || MyPart <- Lists],
- ?line [receive {'DOWN',Ref,process,Pid,Reason} -> normal=Reason end ||
- {Pid,Ref} <- PidRefs],
+ L1 = ranges(0, 16#D800 - 1,
+ erlang:system_info(context_reductions) * 11),
+ L2 = ranges(16#DFFF + 1, 16#10000 - 1,
+ erlang:system_info(context_reductions) * 11),
+ L3 = ranges(16#FFFFF, 16#10FFFF,
+ erlang:system_info(context_reductions) * 11),
+ L = L1 ++ L2 ++ L3,
+ LLen = length(L),
+ Parts = erlang:system_info(schedulers),
+ Lists = splitup(L,LLen,Parts),
+ PidRefs = [spawn_monitor(fun() ->
+ do_roundtrips(MyPart)
+ end) || MyPart <- Lists],
+ [receive {'DOWN',Ref,process,Pid,Reason} -> normal=Reason end ||
+ {Pid,Ref} <- PidRefs],
ok.
do_roundtrips([]) ->
@@ -529,10 +506,10 @@ ex_random_lists(Config) when is_list(Config) ->
PlainFlatten4 = fun(L) ->
iolist_to_binary([int_to_utf8(X) || X <- unicode:characters_to_list(flatb(L),latin1)])
end,
- ?line random_iolist:run(150, PlainFlatten1, PlainFlatten3),
- ?line random_iolist:run(150, PlainFlatten2, PlainFlatten3),
- ?line random_iolist:run(150, PlainFlatten1, PlainFlatten2),
- ?line random_iolist:run(150, PlainFlatten1, PlainFlatten4),
+ random_iolist:run(150, PlainFlatten1, PlainFlatten3),
+ random_iolist:run(150, PlainFlatten2, PlainFlatten3),
+ random_iolist:run(150, PlainFlatten1, PlainFlatten2),
+ random_iolist:run(150, PlainFlatten1, PlainFlatten4),
SelfMade = fun(L) ->
iolist_to_binary(lists:map(fun(X) ->
int_to_utf8(X)
@@ -548,52 +525,52 @@ ex_random_lists(Config) when is_list(Config) ->
Other
end
end,
- ?line random_iolist:run(150, PlainFlatten1, SelfMade),
- ?line random_iolist:run(150, PlainFlatten2, SelfMadeA),
+ random_iolist:run(150, PlainFlatten1, SelfMade),
+ random_iolist:run(150, PlainFlatten2, SelfMadeA),
RoundTrip11 = fun(L) ->
- unicode:characters_to_list(unicode:characters_to_binary(L,latin1),unicode)
- end,
+ unicode:characters_to_list(unicode:characters_to_binary(L,latin1),unicode)
+ end,
RoundTrip21 = fun(L) ->
- utf8_to_list_bsyntax(unicode:characters_to_binary(L,latin1))
- end,
+ utf8_to_list_bsyntax(unicode:characters_to_binary(L,latin1))
+ end,
RoundTrip31 = fun(L) ->
- unicode:characters_to_list(list_to_utf8_bsyntax(L,latin1),unicode)
- end,
+ unicode:characters_to_list(list_to_utf8_bsyntax(L,latin1),unicode)
+ end,
RoundTrip41 = fun(L) ->
- utf8_to_list_bsyntax(list_to_utf8_bsyntax(L,latin1))
- end,
+ utf8_to_list_bsyntax(list_to_utf8_bsyntax(L,latin1))
+ end,
RoundTrip51 = fun(L) ->
- unicode:characters_to_list(L,latin1)
- end,
- ?line random_iolist:run(150, RoundTrip11,RoundTrip21),
- ?line random_iolist:run(150, RoundTrip21,RoundTrip31),
- ?line random_iolist:run(150, RoundTrip31,RoundTrip41),
- ?line random_iolist:run(150, RoundTrip11,RoundTrip41),
- ?line random_iolist:run(150, RoundTrip21,RoundTrip41),
- ?line random_iolist:run(150, RoundTrip11,RoundTrip31),
- ?line random_iolist:run(150, RoundTrip11,RoundTrip51),
+ unicode:characters_to_list(L,latin1)
+ end,
+ random_iolist:run(150, RoundTrip11,RoundTrip21),
+ random_iolist:run(150, RoundTrip21,RoundTrip31),
+ random_iolist:run(150, RoundTrip31,RoundTrip41),
+ random_iolist:run(150, RoundTrip11,RoundTrip41),
+ random_iolist:run(150, RoundTrip21,RoundTrip41),
+ random_iolist:run(150, RoundTrip11,RoundTrip31),
+ random_iolist:run(150, RoundTrip11,RoundTrip51),
UniFlatten1 = fun(L) ->
unicode:characters_to_binary(flat(L),unicode)
end,
UniFlatten2 = fun(L) ->
- unicode:characters_to_binary(L,unicode)
+ unicode:characters_to_binary(L,unicode)
end,
UniFlatten3 = fun(L) ->
- unicode:characters_to_binary(flatx(L),unicode)
+ unicode:characters_to_binary(flatx(L),unicode)
end,
UniFlatten4 = fun(L) ->
- unicode:characters_to_binary(unicode:characters_to_list(L,unicode),unicode)
+ unicode:characters_to_binary(unicode:characters_to_list(L,unicode),unicode)
end,
- ?line random_unicode_list:run(150, UniFlatten1,UniFlatten2),
- ?line random_unicode_list:run(150, UniFlatten1,UniFlatten3),
- ?line random_unicode_list:run(150, UniFlatten2,UniFlatten4),
- ?line random_unicode_list:run(150, UniFlatten2,UniFlatten3),
+ random_unicode_list:run(150, UniFlatten1,UniFlatten2),
+ random_unicode_list:run(150, UniFlatten1,UniFlatten3),
+ random_unicode_list:run(150, UniFlatten2,UniFlatten4),
+ random_unicode_list:run(150, UniFlatten2,UniFlatten3),
- ?line Encodings = [utf8,{utf16,big},
- {utf16,little},{utf32,big},{utf32,little}],
+ Encodings = [utf8,{utf16,big},
+ {utf16,little},{utf32,big},{utf32,little}],
lists:foreach(fun(OutEnc1) ->
lists:foreach(fun(InEnc1) ->
Uni16BigFlatten1 = fun(L) ->
@@ -608,11 +585,10 @@ ex_random_lists(Config) when is_list(Config) ->
Uni16BigFlatten4 = fun(L) ->
unicode:characters_to_binary(unicode:characters_to_list(L,InEnc1),InEnc1,OutEnc1)
end,
- %erlang:display({InEnc1,OutEnc1}),
- ?line random_unicode_list:run(150, Uni16BigFlatten1,Uni16BigFlatten2,InEnc1),
- ?line random_unicode_list:run(150, Uni16BigFlatten1,Uni16BigFlatten3,InEnc1),
- ?line random_unicode_list:run(150, Uni16BigFlatten2,Uni16BigFlatten4,InEnc1),
- ?line random_unicode_list:run(150, Uni16BigFlatten2,Uni16BigFlatten3,InEnc1)
+ random_unicode_list:run(150, Uni16BigFlatten1,Uni16BigFlatten2,InEnc1),
+ random_unicode_list:run(150, Uni16BigFlatten1,Uni16BigFlatten3,InEnc1),
+ random_unicode_list:run(150, Uni16BigFlatten2,Uni16BigFlatten4,InEnc1),
+ random_unicode_list:run(150, Uni16BigFlatten2,Uni16BigFlatten3,InEnc1)
end, Encodings)
end, Encodings),
SelfMade1 = fun(L) ->
@@ -624,10 +600,10 @@ ex_random_lists(Config) when is_list(Config) ->
SelfMade3 = fun(L) ->
list_to_utf8_bsyntax(L,unicode)
end,
- ?line random_unicode_list:run(150, SelfMade1,SelfMade2),
- ?line random_unicode_list:run(150, UniFlatten2, SelfMade1),
- ?line random_unicode_list:run(150, UniFlatten2, SelfMade2),
- ?line random_unicode_list:run(150, UniFlatten2, SelfMade3),
+ random_unicode_list:run(150, SelfMade1,SelfMade2),
+ random_unicode_list:run(150, UniFlatten2, SelfMade1),
+ random_unicode_list:run(150, UniFlatten2, SelfMade2),
+ random_unicode_list:run(150, UniFlatten2, SelfMade3),
RoundTrip1 = fun(L) ->
unicode:characters_to_list(unicode:characters_to_binary(L,unicode),unicode)
end,
@@ -640,12 +616,12 @@ ex_random_lists(Config) when is_list(Config) ->
RoundTrip4 = fun(L) ->
utf8_to_list_bsyntax(list_to_utf8_bsyntax(L,unicode))
end,
- ?line random_unicode_list:run(150, RoundTrip1,RoundTrip2),
- ?line random_unicode_list:run(150, RoundTrip2,RoundTrip3),
- ?line random_unicode_list:run(150, RoundTrip3,RoundTrip4),
- ?line random_unicode_list:run(150, RoundTrip1,RoundTrip4),
- ?line random_unicode_list:run(150, RoundTrip2,RoundTrip4),
- ?line random_unicode_list:run(150, RoundTrip1,RoundTrip3),
+ random_unicode_list:run(150, RoundTrip1,RoundTrip2),
+ random_unicode_list:run(150, RoundTrip2,RoundTrip3),
+ random_unicode_list:run(150, RoundTrip3,RoundTrip4),
+ random_unicode_list:run(150, RoundTrip1,RoundTrip4),
+ random_unicode_list:run(150, RoundTrip2,RoundTrip4),
+ random_unicode_list:run(150, RoundTrip1,RoundTrip3),
lists:foreach(fun(OutEnc2) ->
lists:foreach(fun(InEnc2) ->
RoundTripUtf16_Big_1 = fun(L) ->
@@ -660,12 +636,12 @@ ex_random_lists(Config) when is_list(Config) ->
RoundTripUtf16_Big_4 = fun(L) ->
x_to_list_bsyntax(InEnc2,list_to_x_bsyntax(InEnc2,L,InEnc2))
end,
- ?line random_unicode_list:run(150, RoundTripUtf16_Big_1,RoundTripUtf16_Big_2,InEnc2),
- ?line random_unicode_list:run(150, RoundTripUtf16_Big_2,RoundTripUtf16_Big_3,InEnc2),
- ?line random_unicode_list:run(150, RoundTripUtf16_Big_3,RoundTripUtf16_Big_4,InEnc2),
- ?line random_unicode_list:run(150, RoundTripUtf16_Big_1,RoundTripUtf16_Big_4,InEnc2),
- ?line random_unicode_list:run(150, RoundTripUtf16_Big_2,RoundTripUtf16_Big_4,InEnc2),
- ?line random_unicode_list:run(150, RoundTripUtf16_Big_1,RoundTripUtf16_Big_3,InEnc2)
+ random_unicode_list:run(150, RoundTripUtf16_Big_1,RoundTripUtf16_Big_2,InEnc2),
+ random_unicode_list:run(150, RoundTripUtf16_Big_2,RoundTripUtf16_Big_3,InEnc2),
+ random_unicode_list:run(150, RoundTripUtf16_Big_3,RoundTripUtf16_Big_4,InEnc2),
+ random_unicode_list:run(150, RoundTripUtf16_Big_1,RoundTripUtf16_Big_4,InEnc2),
+ random_unicode_list:run(150, RoundTripUtf16_Big_2,RoundTripUtf16_Big_4,InEnc2),
+ random_unicode_list:run(150, RoundTripUtf16_Big_1,RoundTripUtf16_Big_3,InEnc2)
end, Encodings)
end, Encodings),
ToList1 = fun(L) ->
@@ -680,12 +656,12 @@ ex_random_lists(Config) when is_list(Config) ->
ToList4 = fun(L) ->
utf8_to_list(unicode_mixed_to_utf8_2(L))
end,
- ?line random_unicode_list:run(150, ToList1,ToList2),
- ?line random_unicode_list:run(150, ToList2,ToList3),
- ?line random_unicode_list:run(150, ToList3,ToList4),
- ?line random_unicode_list:run(150, ToList1,ToList4),
- ?line random_unicode_list:run(150, ToList2,ToList4),
- ?line random_unicode_list:run(150, ToList1,ToList3),
+ random_unicode_list:run(150, ToList1,ToList2),
+ random_unicode_list:run(150, ToList2,ToList3),
+ random_unicode_list:run(150, ToList3,ToList4),
+ random_unicode_list:run(150, ToList1,ToList4),
+ random_unicode_list:run(150, ToList2,ToList4),
+ random_unicode_list:run(150, ToList1,ToList3),
ok.
@@ -696,13 +672,13 @@ utf16_illegal_sequences_bif(Config) when is_list(Config) ->
ex_utf16_illegal_sequences_bif(Config).
ex_utf16_illegal_sequences_bif(Config) when is_list(Config) ->
- ?line utf16_fail_range_bif_simple(16#10FFFF+1, 16#10FFFF+512), %Too large.
- ?line utf16_fail_range_bif(16#D800, 16#DFFF), %Reserved for UTF-16.
+ utf16_fail_range_bif_simple(16#10FFFF+1, 16#10FFFF+512), %Too large.
+ utf16_fail_range_bif(16#D800, 16#DFFF), %Reserved for UTF-16.
+
+ lonely_hi_surrogate_bif(16#D800, 16#DBFF,incomplete),
+ lonely_hi_surrogate_bif(16#DC00, 16#DFFF,error),
+ leading_lo_surrogate_bif(16#DC00, 16#DFFF),
- ?line lonely_hi_surrogate_bif(16#D800, 16#DBFF,incomplete),
- ?line lonely_hi_surrogate_bif(16#DC00, 16#DFFF,error),
- ?line leading_lo_surrogate_bif(16#DC00, 16#DFFF),
-
ok.
utf16_fail_range_bif(Char, End) when Char =< End ->
@@ -764,26 +740,27 @@ leading_lo_surrogate_bif(HiSurr, LoSurr, End) when LoSurr =< End ->
leading_lo_surrogate_bif(_, _, _) -> ok.
utf8_illegal_sequences_bif(Config) when is_list(Config) ->
+ ct:timetrap({minutes,40}), %% valgrind needs a lot
setlimit(10),
ex_utf8_illegal_sequences_bif(Config),
setlimit(default),
ex_utf8_illegal_sequences_bif(Config).
ex_utf8_illegal_sequences_bif(Config) when is_list(Config) ->
- ?line fail_range_bif(16#10FFFF+1, 16#10FFFF+512), %Too large.
- ?line fail_range_bif(16#D800, 16#DFFF), %Reserved for UTF-16.
+ fail_range_bif(16#10FFFF+1, 16#10FFFF+512), %Too large.
+ fail_range_bif(16#D800, 16#DFFF), %Reserved for UTF-16.
%% Illegal first character.
- ?line [fail_bif(<<I,16#8F,16#8F,16#8F>>,unicode) || I <- lists:seq(16#80, 16#BF)],
+ [fail_bif(<<I,16#8F,16#8F,16#8F>>,unicode) || I <- lists:seq(16#80, 16#BF)],
%% Short sequences.
- ?line short_sequences_bif(16#80, 16#10FFFF),
+ short_sequences_bif(16#80, 16#10FFFF),
%% Overlong sequences. (Using more bytes than necessary
%% is not allowed.)
- ?line overlong_bif(0, 127, 2),
- ?line overlong_bif(128, 16#7FF, 3),
- ?line overlong_bif(16#800, 16#FFFF, 4),
+ overlong_bif(0, 127, 2),
+ overlong_bif(128, 16#7FF, 3),
+ overlong_bif(16#800, 16#FFFF, 4),
ok.
fail_range_bif(Char, End) when Char =< End ->
@@ -797,7 +774,6 @@ fail_range_bif(_, _) -> ok.
short_sequences_bif(Char, End) ->
Step = (End - Char) div erlang:system_info(schedulers) + 1,
-% Step = (End - Char) + 1,
PidRefs = short_sequences_bif_1(Char, Step, End),
[receive {'DOWN',Ref,process,Pid,Reason} -> normal=Reason end ||
{Pid,Ref} <- PidRefs],
@@ -918,8 +894,8 @@ only_fail_bif_1(Bin,Coding) ->
Other ->
exit({faulty_encoding_accepted,[Bin],Coding,Other})
end.
-
-
+
+
fail_bif(Bin,Coding) ->
@@ -1021,9 +997,9 @@ unicode_mixed_to_utf8_2(L) ->
int_to_utf8(E)
end || E <- Flist ],
iolist_to_binary([ExpList]).
-
-
-
+
+
+
utf8_to_list_bsyntax(<<>>) ->
[];
@@ -1042,8 +1018,8 @@ list_to_utf8_bsyntax(List,latin1) ->
FList = flatb(List),
list_to_binary([ <<E/utf8>> || E <- FList ]).
-
-
+
+
%%
@@ -1066,7 +1042,7 @@ int_to_utf16_little(U) when U >= 16#10000, U =< 16#10FFFF ->
LO = (16#DC00 bor (UPrim band 16#3FF)),
<<HI:16/little,LO:16/little>>.
-
+
%% This function intentionally allows construction of
%% UTF-8 sequence in illegal ranges.
int_to_utf8(I) when I =< 16#7F ->
@@ -1093,7 +1069,7 @@ int_to_utf8(I) when I =< 16#3FFFFFF ->
B2 = (I bsr 18),
B1 = (I bsr 24),
<<1:1,1:1,1:1,1:1,1:1,0:1,B1:2,1:1,0:1,B2:6,1:1,0:1,B3:6,1:1,0:1,B4:6,
- 1:1,0:1,B5:6>>.
+ 1:1,0:1,B5:6>>.
utf16_big_to_list_bsyntax(<<>>) ->
[];
@@ -1131,7 +1107,7 @@ list_to_utf16_little_bsyntax(List,latin1) ->
list_to_binary([ <<E/utf16-little>> || E <- FList ]).
-
+
utf32_big_to_list_bsyntax(<<>>) ->
[];
utf32_big_to_list_bsyntax(<<C/utf32-big,R/binary>>) ->
@@ -1162,12 +1138,12 @@ list_to_utf32_little_bsyntax(List,{utf32,little}) ->
E;
true ->
<<E/utf32-little>>
- end || E <- FList ]);
+ end || E <- FList ]);
list_to_utf32_little_bsyntax(List,latin1) ->
FList = flatb(List),
list_to_binary([ <<E/utf32-little>> || E <- FList ]).
-
+
%% int_to_utf8(I, NumberOfBytes) -> Binary.
%% This function can be used to construct overlong sequences.
@@ -1211,7 +1187,7 @@ utf8_to_int(<<1:1,1:1,0:1,B1:5,1:1,0:1,B2:6>>) ->
utf8_to_int(<<1:1,1:1,1:1,0:1,B1:4,1:1,0:1,B2:6,1:1,0:1,B3:6>>) ->
(B1 bsl 12) bor (B2 bsl 6) bor B3;
utf8_to_int(<<1:1,1:1,1:1,1:1,0:1,B1:3,1:1,0:1,
- B2:6,1:1,0:1,B3:6,1:1,0:1,B4:6>>) ->
+ B2:6,1:1,0:1,B3:6,1:1,0:1,B4:6>>) ->
Res = (B1 bsl 18) bor (B2 bsl 12) bor (B3 bsl 6) bor B4,
case Res of
X when X > 16#10FFFF ->
@@ -1295,10 +1271,9 @@ list_to_x_bsyntax({utf32,big},L,Enc) ->
list_to_utf32_big_bsyntax(L,Enc);
list_to_x_bsyntax({utf32,little},L,Enc) ->
list_to_utf32_little_bsyntax(L,Enc).
-
+
make_unaligned(Bin0) when is_binary(Bin0) ->
-% put(c_count,get(c_count)+1),
Bin1 = <<0:3,Bin0/binary,31:5>>,
Sz = byte_size(Bin0),
<<0:3,Bin:Sz/binary,31:5>> = id(Bin1),
@@ -1310,80 +1285,3 @@ setlimit(X) ->
erts_debug:set_internal_state(available_internal_state,true),
io:format("Setting loop limit, old: ~p, now set to ~p~n",
[erts_debug:set_internal_state(unicode_loop_limit,X),X]).
-
-
-%%
-%% Tracing utility
-%%
-
-%% tr_dump() ->
-%% erlang:display(lists:sort(ets:tab2list(values))).
-
-%% tr_off(Pid) ->
-%% receive after 10000 -> ok end,
-%% tr_dump(),
-%% Ref = erlang:monitor(process,Pid),
-%% exit(Pid,kill),
-%% receive
-%% {'DOWN',Ref,_,_,_} -> ok
-%% end,
-%% ok.
-
-%% tr_on() ->
-%% catch ets:delete(values),
-%% ets:new(values,[named_table,public]),
-%% ets:insert(values,{traps,0}),
-%% catch ets:delete(state),
-%% ets:new(state,[named_table,public]),
-%% Pid = spawn(?MODULE,trace_recv,[values,state]),
-%% erlang:trace(new,true,[garbage_collection,{tracer,Pid},timestamp,call]),
-%% erlang:trace_pattern({erlang,list_to_utf8,2},[{'_',[],[{return_trace}]}],[global]),
-%% Pid.
-
-%% ts_to_int({Mega,Sec,Micro}) ->
-%% ((Mega * 1000000) + Sec) * 1000000 + Micro.
-
-%% trace_recv(Values,State) ->
-%% receive
-%% {trace_ts,Pid,call,_,TS} ->
-%% case ets:lookup(State,{call,Pid}) of
-%% [{{call,Pid},_}] ->
-%% ets:update_counter(values,traps,1);
-%% _ ->
-%% ok
-%% end,
-%% ets:insert(State,{{call,Pid},ts_to_int(TS)});
-%% {trace_ts,Pid,return_from,_,_,TS} ->
-%% case ets:lookup(State,{call,Pid}) of
-%% [{{call,Pid},TS2}] ->
-%% ets:delete(State,{call,Pid}),
-%% Elapsed = ts_to_int(TS) - TS2,
-%% case ets:lookup(Values,Pid) of
-%% [{Pid,GCNum,CallNum,GCTime,CallTime}] ->
-%% ets:insert(Values,{Pid,GCNum,CallNum+1,GCTime,CallTime+Elapsed});
-%% [] ->
-%% ets:insert(Values,{Pid,0,1,0,Elapsed})
-%% end;
-%% _Other ->
-%% erlang:display({what2,Pid})
-%% end;
-%% {trace_ts,Pid,gc_start,_,TS} ->
-%% ets:insert(State,{{gc,Pid},ts_to_int(TS)});
-%% {trace_ts,Pid,gc_end,_,TS} ->
-%% case ets:lookup(State,{gc,Pid}) of
-%% [{{gc,Pid},TS2}] ->
-%% ets:delete(State,{gc,Pid}),
-%% Elapsed = ts_to_int(TS) - TS2,
-%% case ets:lookup(Values,Pid) of
-%% [{Pid,Num,CNum,Time,CTime}] ->
-%% ets:insert(Values,{Pid,Num+1,CNum,Time+Elapsed,CTime});
-%% [] ->
-%% ets:insert(Values,{Pid,1,0,Elapsed,0})
-%% end;
-%% _Other ->
-%% erlang:display({what,Pid})
-%% end;
-%% X ->
-%% erlang:display({trace_recv,X})
-%% end,
-%% trace_recv(Values,State).
diff --git a/lib/stdlib/test/win32reg_SUITE.erl b/lib/stdlib/test/win32reg_SUITE.erl
index 6d27ac6387..5e44e16ddc 100644
--- a/lib/stdlib/test/win32reg_SUITE.erl
+++ b/lib/stdlib/test/win32reg_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,9 +22,11 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,long/1,evil_write/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,10}}].
all() ->
[long, evil_write].
@@ -49,11 +51,8 @@ init_per_suite(Config) when is_list(Config) ->
end_per_suite(Config) when is_list(Config) ->
Config.
-
-long(doc) -> "Test long keys and entries (OTP-3446).";
+%% Test long keys and entries (OTP-3446).
long(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
-
LongKey = "software\\" ++
lists:flatten(lists:duplicate(10, "..\\software\\")) ++
"Ericsson\\Erlang",
@@ -76,12 +75,9 @@ long(Config) when is_list(Config) ->
%% Done.
ok = win32reg:close(Reg),
- test_server:timetrap_cancel(Dog),
ok.
evil_write(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
-
Key = "Software\\Ericsson\\Erlang",
{ok,Reg} = win32reg:open([read,write]),
ok = win32reg:change_key(Reg, "\\hkcu"),
@@ -95,13 +91,12 @@ evil_write(Config) when is_list(Config) ->
%% Done.
ok = win32reg:close(Reg),
- test_server:timetrap_cancel(Dog),
ok.
evil_write_1(Reg, [_|[_|_]=Key]=Key0) ->
- ?line io:format("Key = ~p\n", [Key0]),
- ?line ok = win32reg:set_value(Reg, Key0, "A good value for me"),
- ?line {ok,_Val} = win32reg:value(Reg, Key0),
- ?line ok = win32reg:delete_value(Reg, Key0),
+ io:format("Key = ~p\n", [Key0]),
+ ok = win32reg:set_value(Reg, Key0, "A good value for me"),
+ {ok,_Val} = win32reg:value(Reg, Key0),
+ ok = win32reg:delete_value(Reg, Key0),
evil_write_1(Reg, Key);
evil_write_1(_, [_]) -> ok.
diff --git a/lib/stdlib/test/y2k_SUITE.erl b/lib/stdlib/test/y2k_SUITE.erl
index 9e766e80ab..129a279c28 100644
--- a/lib/stdlib/test/y2k_SUITE.erl
+++ b/lib/stdlib/test/y2k_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
-module(y2k_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
@@ -55,104 +55,80 @@ end_per_group(_GroupName, Config) ->
Config.
-date_1999_01_01(doc) ->
- "#1 : 1999-01-01: test roll-over from 1998-12-31 to 1999-01-01.";
-date_1999_01_01(suite) ->
- [];
+%% #1 : 1999-01-01: test roll-over from 1998-12-31 to 1999-01-01.
date_1999_01_01(Config) when is_list(Config) ->
- ?line Date = {1998, 12, 31}, NextDate = {1999, 1, 1},
- ?line match(next_date(Date), NextDate),
+ Date = {1998, 12, 31}, NextDate = {1999, 1, 1},
+ match(next_date(Date), NextDate),
TZD = tzd(Date),
if
TZD > 0 ->
- ?line Time = {24 - TZD, 0, 0},
- ?line {NDate, _NTime} =
+ Time = {24 - TZD, 0, 0},
+ {NDate, _NTime} =
erlang:localtime_to_universaltime({Date, Time}),
- ?line match(NDate, NextDate);
+ match(NDate, NextDate);
TZD < 0 ->
- ?line Time = {24 + TZD, 0, 0},
- ?line {NDate, _NTime} =
+ Time = {24 + TZD, 0, 0},
+ {NDate, _NTime} =
erlang:universaltime_to_localtime({Date, Time}),
- ?line match(NDate, NextDate);
+ match(NDate, NextDate);
true ->
ok
end.
-
-date_1999_02_28(doc) ->
- "#2 : 1999-02-28: test roll-over from 1999-02-28 to 1999-03-01.";
-date_1999_02_28(suite) ->
- [];
+
+%% #2 : 1999-02-28: test roll-over from 1999-02-28 to 1999-03-01.
date_1999_02_28(Config) when is_list(Config) ->
- ?line Date = {1999, 2, 28}, NextDate = {1999, 3, 1},
- ?line match(next_date(Date), NextDate),
- ?line match(tz_next_date(Date), NextDate).
-
-date_1999_09_09(doc) ->
- "#3 : 1999-09-09: test roll-over from 1999-09-08 to 1999-09-09.";
-date_1999_09_09(suite) ->
- [];
+ Date = {1999, 2, 28}, NextDate = {1999, 3, 1},
+ match(next_date(Date), NextDate),
+ match(tz_next_date(Date), NextDate).
+
+%% #3 : 1999-09-09: test roll-over from 1999-09-08 to 1999-09-09.
date_1999_09_09(Config) when is_list(Config) ->
- ?line Date = {1999, 9, 8}, NextDate = {1999, 9, 9},
- ?line match(next_date(Date), NextDate),
- ?line match(tz_next_date(Date), NextDate).
-
-date_2000_01_01(doc) ->
- "#4 : 2000-01-01: test roll-over from 1999-12-31 to 2000-01-01 to "
- "2000-01-02.";
-date_2000_01_01(suite) ->
- [];
+ Date = {1999, 9, 8}, NextDate = {1999, 9, 9},
+ match(next_date(Date), NextDate),
+ match(tz_next_date(Date), NextDate).
+
+%% #4 : 2000-01-01: test roll-over from 1999-12-31 to 2000-01-01 to
+%% 2000-01-02.;
date_2000_01_01(Config) when is_list(Config) ->
- ?line Date = {1999, 12, 31}, NextDate = {2000, 1, 1},
- ?line match(next_date(Date), NextDate),
- ?line match(tz_next_date(Date), NextDate),
- ?line NextDate1 = {2000, 1, 2},
- ?line match(next_date(NextDate), NextDate1),
- ?line match(tz_next_date(NextDate), NextDate1).
-
-date_2000_02_29(doc) ->
- "#5 : 2000-02-29: test roll-over from 2000-02-28 to 2000-02-29 to "
- "2000-03-01.";
-date_2000_02_29(suite) ->
- [];
+ Date = {1999, 12, 31}, NextDate = {2000, 1, 1},
+ match(next_date(Date), NextDate),
+ match(tz_next_date(Date), NextDate),
+ NextDate1 = {2000, 1, 2},
+ match(next_date(NextDate), NextDate1),
+ match(tz_next_date(NextDate), NextDate1).
+
+%% #5 : 2000-02-29: test roll-over from 2000-02-28 to 2000-02-29 to
+%% 2000-03-01.
date_2000_02_29(Config) when is_list(Config) ->
- ?line Date = {2000, 2, 28}, NextDate = {2000, 2, 29},
- ?line match(next_date(Date), NextDate),
- ?line match(tz_next_date(Date), NextDate),
- ?line NextDate1 = {2000, 3, 1},
- ?line match(next_date(NextDate), NextDate1),
- ?line match(tz_next_date(NextDate), NextDate1).
-
-date_2001_01_01(doc) ->
- "#6 : 2001-01-01: test roll-over from 2000-12-31 to 2001-01-01.";
-date_2001_01_01(suite) ->
- [];
+ Date = {2000, 2, 28}, NextDate = {2000, 2, 29},
+ match(next_date(Date), NextDate),
+ match(tz_next_date(Date), NextDate),
+ NextDate1 = {2000, 3, 1},
+ match(next_date(NextDate), NextDate1),
+ match(tz_next_date(NextDate), NextDate1).
+
+%% #6 : 2001-01-01: test roll-over from 2000-12-31 to 2001-01-01.
date_2001_01_01(Config) when is_list(Config) ->
- ?line Date = {2000, 12, 31}, NextDate = {2001, 1, 1},
- ?line match(next_date(Date), NextDate),
- ?line match(tz_next_date(Date), NextDate).
-
-date_2001_02_29(doc) ->
- "#7 : 2001-02-29: test roll-over from 2001-02-28 to 2001-03-01.";
-date_2001_02_29(suite) ->
- [];
+ Date = {2000, 12, 31}, NextDate = {2001, 1, 1},
+ match(next_date(Date), NextDate),
+ match(tz_next_date(Date), NextDate).
+
+%% #7 : 2001-02-29: test roll-over from 2001-02-28 to 2001-03-01.
date_2001_02_29(Config) when is_list(Config) ->
- ?line Date = {2001, 2, 28}, NextDate = {2001, 3, 1},
- ?line match(next_date(Date), NextDate),
- ?line match(tz_next_date(Date), NextDate).
-
-date_2004_02_29(doc) ->
- "#8 : 2004-02-29: test roll-over from 2004-02-28 to 2004-02-29 to "
- "2004-03-01.";
-date_2004_02_29(suite) ->
- [];
+ Date = {2001, 2, 28}, NextDate = {2001, 3, 1},
+ match(next_date(Date), NextDate),
+ match(tz_next_date(Date), NextDate).
+
+%% #8 : 2004-02-29: test roll-over from 2004-02-28 to 2004-02-29 to
+%% 2004-03-01.
date_2004_02_29(Config) when is_list(Config) ->
- ?line Date = {2004, 2, 28}, NextDate = {2004, 2, 29},
- ?line match(next_date(Date), NextDate),
- ?line match(tz_next_date(Date), NextDate),
- ?line NextDate1 = {2004, 3, 1},
- ?line match(next_date(NextDate), NextDate1),
- ?line match(tz_next_date(NextDate), NextDate1).
-
+ Date = {2004, 2, 28}, NextDate = {2004, 2, 29},
+ match(next_date(Date), NextDate),
+ match(tz_next_date(Date), NextDate),
+ NextDate1 = {2004, 3, 1},
+ match(next_date(NextDate), NextDate1),
+ match(tz_next_date(NextDate), NextDate1).
+
%%
%% Local functions
%%
@@ -162,7 +138,7 @@ next_date(Date) ->
%% timezonediff
%%
tzd(Date) ->
- ?line {_LDate, {LH, _LM, _LS}} =
+ {_LDate, {LH, _LM, _LS}} =
erlang:universaltime_to_localtime({Date, {12, 0, 0}}),
12 - LH.
@@ -170,15 +146,15 @@ tz_next_date(Date) ->
TZD = tzd(Date),
if
TZD > 0 ->
- ?line Time = {24 - TZD, 0, 0},
- ?line {NDate, _NTime} =
+ Time = {24 - TZD, 0, 0},
+ {NDate, _NTime} =
erlang:localtime_to_universaltime({Date, Time}),
- ?line NDate;
+ NDate;
TZD < 0 ->
- ?line Time = {24 + TZD, 0, 0},
- ?line {NDate, _NTime} =
+ Time = {24 + TZD, 0, 0},
+ {NDate, _NTime} =
erlang:universaltime_to_localtime({Date, Time}),
- ?line NDate;
+ NDate;
true ->
Date
end.
@@ -189,6 +165,3 @@ tz_next_date(Date) ->
match(X, X) ->
ok.
-
-
-
diff --git a/lib/stdlib/test/zip_SUITE.erl b/lib/stdlib/test/zip_SUITE.erl
index c275053691..2add5a39a2 100644
--- a/lib/stdlib/test/zip_SUITE.erl
+++ b/lib/stdlib/test/zip_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,8 +28,7 @@
compress_control/1,
foldl/1]).
--include_lib("test_server/include/test_server.hrl").
--include("test_server_line.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-include_lib("stdlib/include/zip.hrl").
@@ -57,12 +56,11 @@ end_per_group(_GroupName, Config) ->
Config.
-borderline(doc) ->
- ["Test creating, listing and extracting one file from an archive "
- "multiple times with different file sizes. Also check that the "
- "modification date of the extracted file has survived."];
+%% Test creating, listing and extracting one file from an archive
+%% multiple times with different file sizes. Also check that the
+%% modification date of the extracted file has survived.
borderline(Config) when is_list(Config) ->
- RootDir = ?config(priv_dir, Config),
+ RootDir = proplists:get_value(priv_dir, Config),
TempDir = filename:join(RootDir, "borderline"),
ok = file:make_dir(TempDir),
@@ -179,7 +177,7 @@ match_output(eof, Expect, Port) ->
kill_port_and_fail(Port, Reason) ->
unlink(Port),
exit(Port, die),
- test_server:fail(Reason).
+ ct:fail(Reason).
make_cmd(Cmd) ->
Cmd.
@@ -216,12 +214,10 @@ random_byte_list(_X, 0, Result) ->
next_random(X) ->
(X*17059465+1) band 16#fffffffff.
-atomic(doc) ->
- ["Test the 'atomic' operations: zip/unzip/list_dir, on archives."
- "Also test the 'cooked' option."];
-atomic(suite) -> [];
+%% Test the 'atomic' operations: zip/unzip/list_dir, on archives.
+%% Also test the 'cooked' option.
atomic(Config) when is_list(Config) ->
- ok = file:set_cwd(?config(priv_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
DataFiles = data_files(),
Names = [Name || {Name,_,_} <- DataFiles],
io:format("Names: ~p", [Names]),
@@ -244,12 +240,10 @@ atomic(Config) when is_list(Config) ->
ok.
-openzip_api(doc) ->
- ["Test the openzip_open/2, openzip_get/1, openzip_get/2, openzip_close/1 "
- "and openzip_list_dir/1 functions."];
-openzip_api(suite) -> [];
+%% Test the openzip_open/2, openzip_get/1, openzip_get/2, openzip_close/1
+%% and openzip_list_dir/1 functions.
openzip_api(Config) when is_list(Config) ->
- ok = file:set_cwd(?config(priv_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
DataFiles = data_files(),
Names = [Name || {Name, _, _} <- DataFiles],
io:format("Names: ~p", [Names]),
@@ -283,12 +277,10 @@ openzip_api(Config) when is_list(Config) ->
ok.
-zip_api(doc) ->
- ["Test the zip_open/2, zip_get/1, zip_get/2, zip_close/1 "
- "and zip_list_dir/1 functions."];
-zip_api(suite) -> [];
+%% Test the zip_open/2, zip_get/1, zip_get/2, zip_close/1,
+%% and zip_list_dir/1 functions.
zip_api(Config) when is_list(Config) ->
- ok = file:set_cwd(?config(priv_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
DataFiles = data_files(),
Names = [Name || {Name, _, _} <- DataFiles],
io:format("Names: ~p", [Names]),
@@ -319,13 +311,11 @@ zip_api(Config) when is_list(Config) ->
%% Clean up.
delete_files([Names]),
- ok.
+ ok.
-open_leak(doc) ->
- ["Test that zip doesn't leak processes and ports where the "
- "controlling process dies without closing an zip opened with "
- "zip:zip_open/1."];
-open_leak(suite) -> [];
+%% Test that zip doesn't leak processes and ports where the
+%% controlling process dies without closing an zip opened with
+%% zip:zip_open/1.
open_leak(Config) when is_list(Config) ->
%% Create a zip archive
Zip = "zip.zip",
@@ -359,13 +349,10 @@ spawned_zip_dead(ZipSrv) ->
false
end.
-unzip_options(doc) ->
- ["Test options for unzip, only cwd and file_list currently"];
-unzip_options(suite) ->
- [];
+%% Test options for unzip, only cwd and file_list currently.
unzip_options(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Long = filename:join(DataDir, "abc.zip"),
%% create a temp directory
@@ -375,28 +362,25 @@ unzip_options(Config) when is_list(Config) ->
FList = ["quotes/rain.txt","wikipedia.txt"],
%% Unzip a zip file in Subdir
- ?line {ok, RetList} = zip:unzip(Long, [{cwd, Subdir},
- {file_list, FList}]),
+ {ok, RetList} = zip:unzip(Long, [{cwd, Subdir},
+ {file_list, FList}]),
%% Verify.
- ?line true = (length(FList) =:= length(RetList)),
- ?line lists:foreach(fun(F)-> {ok,B} = file:read_file(filename:join(DataDir, F)),
- {ok,B} = file:read_file(filename:join(Subdir, F)) end,
- FList),
- ?line lists:foreach(fun(F)-> ok = file:delete(F) end,
- RetList),
+ true = (length(FList) =:= length(RetList)),
+ lists:foreach(fun(F)-> {ok,B} = file:read_file(filename:join(DataDir, F)),
+ {ok,B} = file:read_file(filename:join(Subdir, F)) end,
+ FList),
+ lists:foreach(fun(F)-> ok = file:delete(F) end,
+ RetList),
%% Clean up and verify no more files.
- ?line 0 = delete_files([Subdir]),
+ 0 = delete_files([Subdir]),
ok.
-unzip_jar(doc) ->
- ["Test unzip a jar file (OTP-7382)"];
-unzip_jar(suite) ->
- [];
+%% Test unzip a jar file (OTP-7382).
unzip_jar(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
JarFile = filename:join(DataDir, "test.jar"),
%% create a temp directory
@@ -409,28 +393,25 @@ unzip_jar(Config) when is_list(Config) ->
{ok, RetList} = zip:unzip(JarFile),
%% Verify.
- ?line lists:foreach(fun(F)-> {ok,B} = file:read_file(filename:join(DataDir, F)),
- {ok,B} = file:read_file(filename:join(Subdir, F)) end,
- FList),
- ?line lists:foreach(fun(F)-> ok = file:delete(F) end,
- RetList),
+ lists:foreach(fun(F)-> {ok,B} = file:read_file(filename:join(DataDir, F)),
+ {ok,B} = file:read_file(filename:join(Subdir, F)) end,
+ FList),
+ lists:foreach(fun(F)-> ok = file:delete(F) end,
+ RetList),
%% Clean up and verify no more files.
- ?line 0 = delete_files([Subdir]),
+ 0 = delete_files([Subdir]),
ok.
-zip_options(doc) ->
- ["Test the options for unzip, only cwd currently"];
-zip_options(suite) ->
- [];
+%% Test the options for unzip, only cwd currently.
zip_options(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ok = file:set_cwd(PrivDir),
DataFiles = data_files(),
Names = [Name || {Name, _, _} <- DataFiles],
%% Make sure cwd is not where we get the files
- ok = file:set_cwd(?config(data_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
%% Create a zip archive
{ok, {_,Zip}} =
@@ -460,10 +441,7 @@ zip_options(Config) when is_list(Config) ->
ok.
-list_dir_options(doc) ->
- ["Test the options for list_dir... one day"];
-list_dir_options(suite) ->
- [];
+%% Test the options for list_dir... one day.
list_dir_options(Config) when is_list(Config) ->
ok.
@@ -515,10 +493,9 @@ create_files([]) ->
%% make_dirs([], Dir) ->
%% Dir.
-bad_zip(doc) ->
- ["Try zip:unzip/1 on some corrupted zip files."];
+%% Try zip:unzip/1 on some corrupted zip files.
bad_zip(Config) when is_list(Config) ->
- ok = file:set_cwd(?config(priv_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
try_bad("bad_crc", {bad_crc, "abc.txt"}, Config),
try_bad("bad_central_directory", bad_central_directory, Config),
try_bad("bad_file_header", bad_file_header, Config),
@@ -538,7 +515,7 @@ try_bad(N, R, Config) ->
try_bad(Name0, Reason, What, Config) ->
%% Intentionally no macros here.
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Name = Name0 ++ ".zip",
io:format("~nTrying ~s", [Name]),
Full = filename:join(DataDir, Name),
@@ -548,14 +525,13 @@ try_bad(Name0, Reason, What, Config) ->
io:format("Result: ~p\n", [Expected]);
Other ->
io:format("unzip/2 returned ~p (expected ~p)\n", [Other, Expected]),
- test_server:fail({bad_return_value, Other})
+ ct:fail({bad_return_value, Other})
end.
-unzip_to_binary(doc) ->
- ["Test extracting to binary with memory option."];
+%% Test extracting to binary with memory option.
unzip_to_binary(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
WorkDir = filename:join(PrivDir, "unzip_to_binary"),
_ = file:make_dir(WorkDir),
@@ -574,11 +550,10 @@ unzip_to_binary(Config) when is_list(Config) ->
ok.
-zip_to_binary(doc) ->
- ["Test compressing to binary with memory option."];
+%% Test compressing to binary with memory option.
zip_to_binary(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
WorkDir = filename:join(PrivDir, "zip_to_binary"),
_ = file:make_dir(WorkDir),
@@ -607,8 +582,7 @@ zip_to_binary(Config) when is_list(Config) ->
ok.
-aliases(doc) ->
- ["Test using the aliases, extract/2, table/2 and create/3"];
+%% Test using the aliases, extract/2, table/2 and create/3.
aliases(Config) when is_list(Config) ->
{_, _, X0} = erlang:timestamp(),
Size = 100,
@@ -629,11 +603,10 @@ aliases(Config) when is_list(Config) ->
-unzip_from_binary(doc) ->
- ["Test extracting a zip archive from a binary."];
+%% Test extracting a zip archive from a binary.
unzip_from_binary(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ExtractDir = filename:join(PrivDir, "extract_from_binary"),
ok = file:make_dir(ExtractDir),
Archive = filename:join(ExtractDir, "abc.zip"),
@@ -699,11 +672,9 @@ do_delete_files([Item|Rest], Cnt) ->
end,
do_delete_files(Rest, Cnt + DelCnt).
-compress_control(doc) ->
- ["Test control of which files that should be compressed"];
-compress_control(suite) -> [];
+%% Test control of which files that should be compressed.
compress_control(Config) when is_list(Config) ->
- ok = file:set_cwd(?config(priv_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
Dir = "compress_control",
Files = [
{Dir, dir, $d},
@@ -834,32 +805,32 @@ extensions([], Old) ->
Old.
foldl(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
File = filename:join([PrivDir, "foldl.zip"]),
FooBin = <<"FOO">>,
BarBin = <<"BAR">>,
Files = [{"foo", FooBin}, {"bar", BarBin}],
- ?line {ok, {File, Bin}} = zip:create(File, Files, [memory]),
+ {ok, {File, Bin}} = zip:create(File, Files, [memory]),
ZipFun = fun(N, I, B, Acc) -> [{N, B(), I()} | Acc] end,
- ?line {ok, FileSpec} = zip:foldl(ZipFun, [], {File, Bin}),
- ?line [{"bar", BarBin, #file_info{}}, {"foo", FooBin, #file_info{}}] = FileSpec,
- ?line {ok, {File, Bin}} = zip:create(File, lists:reverse(FileSpec), [memory]),
- ?line {foo_bin, FooBin} =
+ {ok, FileSpec} = zip:foldl(ZipFun, [], {File, Bin}),
+ [{"bar", BarBin, #file_info{}}, {"foo", FooBin, #file_info{}}] = FileSpec,
+ {ok, {File, Bin}} = zip:create(File, lists:reverse(FileSpec), [memory]),
+ {foo_bin, FooBin} =
try
zip:foldl(fun("foo", _, B, _) -> throw(B()); (_, _, _, Acc) -> Acc end, [], {File, Bin})
catch
throw:FooBin ->
{foo_bin, FooBin}
end,
- ?line ok = file:write_file(File, Bin),
- ?line {ok, FileSpec} = zip:foldl(ZipFun, [], File),
+ ok = file:write_file(File, Bin),
+ {ok, FileSpec} = zip:foldl(ZipFun, [], File),
- ?line {error, einval} = zip:foldl(fun() -> ok end, [], File),
- ?line {error, einval} = zip:foldl(ZipFun, [], 42),
- ?line {error, einval} = zip:foldl(ZipFun, [], {File, 42}),
+ {error, einval} = zip:foldl(fun() -> ok end, [], File),
+ {error, einval} = zip:foldl(ZipFun, [], 42),
+ {error, einval} = zip:foldl(ZipFun, [], {File, 42}),
- ?line ok = file:delete(File),
- ?line {error, enoent} = zip:foldl(ZipFun, [], File),
+ ok = file:delete(File),
+ {error, enoent} = zip:foldl(ZipFun, [], File),
ok.
diff --git a/lib/stdlib/vsn.mk b/lib/stdlib/vsn.mk
index 5bac4be9d7..41037b8f53 100644
--- a/lib/stdlib/vsn.mk
+++ b/lib/stdlib/vsn.mk
@@ -1 +1 @@
-STDLIB_VSN = 2.8
+STDLIB_VSN = 3.0.1
diff --git a/lib/syntax_tools/doc/specs/.gitignore b/lib/syntax_tools/doc/specs/.gitignore
new file mode 100644
index 0000000000..322eebcb06
--- /dev/null
+++ b/lib/syntax_tools/doc/specs/.gitignore
@@ -0,0 +1 @@
+specs_*.xml
diff --git a/lib/syntax_tools/doc/src/Makefile b/lib/syntax_tools/doc/src/Makefile
index 6aca06424d..e55222e59c 100644
--- a/lib/syntax_tools/doc/src/Makefile
+++ b/lib/syntax_tools/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2012. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -81,10 +81,15 @@ HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
+SPECS_FILES = $(XML_REF3_FILES:%.xml=$(SPECDIR)/specs_%.xml)
+
+TOP_SPECS_FILE = specs.xml
+
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
XML_FLAGS +=
+SPECS_FLAGS = -I../../include
DVIPS_FLAGS +=
# ----------------------------------------------------
@@ -93,7 +98,7 @@ DVIPS_FLAGS +=
$(HTMLDIR)/%.gif: %.gif
$(INSTALL_DATA) $< $@
-docs: pdf html man
+docs: man pdf html
$(TOP_PDF_FILE): $(XML_FILES)
@@ -120,6 +125,7 @@ clean clean_docs:
rm -f $(MAN3DIR)/*
rm -f $(XML_REF3_FILES) $(XML_CHAPTER_FILES) *.html
rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
+ rm -f $(SPECDIR)/*
rm -f errs core *~
# ----------------------------------------------------
diff --git a/lib/syntax_tools/doc/src/book.xml b/lib/syntax_tools/doc/src/book.xml
index fb64a7dd21..5f9481374f 100644
--- a/lib/syntax_tools/doc/src/book.xml
+++ b/lib/syntax_tools/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/syntax_tools/doc/src/notes.xml b/lib/syntax_tools/doc/src/notes.xml
index 9f803264a2..ef207f7c3d 100644
--- a/lib/syntax_tools/doc/src/notes.xml
+++ b/lib/syntax_tools/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,32 @@
<p>This document describes the changes made to the Syntax_Tools
application.</p>
+<section><title>Syntax_Tools 2.0</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>The abstract data type in <c>erl_syntax</c> is
+ augmented with types and function specifications.</p>
+ <p>The module <c>erl_prettypr</c> pretty prints types and
+ function specification, and the output can be parsed.</p>
+ <p>The types of record fields are no longer ignored. As a
+ consequence <c>erl_syntax_lib:analyze_record_field/1</c>
+ returns <c>{Default, Type}</c> instead of <c>Default</c>.
+ The functions <c>analyze_record_attribute</c>,
+ <c>analyze_attribute</c>, <c>analyze_form</c>, and
+ <c>analyze_forms</c> in the <c>erl_syntax_lib</c> module
+ are also affected by this incompatible change.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-12863</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Syntax_Tools 1.7</title>
<section><title>Improvements and New Features</title>
@@ -76,11 +102,11 @@
<p>
Teach Maps to erl_syntax</p>
<p>
- Affected functions: <list>
+ Affected functions:</p> <list>
<item>erl_syntax:abstract/1</item>
<item>erl_syntax:concrete/1</item>
<item>erl_syntax:is_leaf/1</item>
- <item>erl_syntax:is_literal/1</item> </list></p>
+ <item>erl_syntax:is_literal/1</item> </list>
<p>
Own Id: OTP-12265</p>
</item>
diff --git a/lib/syntax_tools/doc/src/part.xml b/lib/syntax_tools/doc/src/part.xml
index c111b045da..a20efbc02e 100644
--- a/lib/syntax_tools/doc/src/part.xml
+++ b/lib/syntax_tools/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/syntax_tools/doc/src/part_notes.xml b/lib/syntax_tools/doc/src/part_notes.xml
index 308cf62915..e02ffddcb2 100644
--- a/lib/syntax_tools/doc/src/part_notes.xml
+++ b/lib/syntax_tools/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2007</year><year>2013</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/syntax_tools/doc/src/ref_man.xml b/lib/syntax_tools/doc/src/ref_man.xml
index 65b1725163..774a431db7 100644
--- a/lib/syntax_tools/doc/src/ref_man.xml
+++ b/lib/syntax_tools/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/syntax_tools/doc/src/specs.xml b/lib/syntax_tools/doc/src/specs.xml
new file mode 100644
index 0000000000..04c3a494e7
--- /dev/null
+++ b/lib/syntax_tools/doc/src/specs.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<specs xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="../specs/specs_epp_dodger.xml"/>
+ <xi:include href="../specs/specs_erl_comment_scan.xml"/>
+ <xi:include href="../specs/specs_erl_prettypr.xml"/>
+ <xi:include href="../specs/specs_erl_recomment.xml"/>
+ <xi:include href="../specs/specs_erl_syntax.xml"/>
+ <xi:include href="../specs/specs_erl_syntax_lib.xml"/>
+ <xi:include href="../specs/specs_erl_tidy.xml"/>
+ <xi:include href="../specs/specs_igor.xml"/>
+ <xi:include href="../specs/specs_merl.xml"/>
+ <xi:include href="../specs/specs_merl_transform.xml"/>
+ <xi:include href="../specs/specs_prettypr.xml"/>
+</specs>
diff --git a/lib/syntax_tools/src/Makefile b/lib/syntax_tools/src/Makefile
index 2e91adf8af..8325db45a8 100644
--- a/lib/syntax_tools/src/Makefile
+++ b/lib/syntax_tools/src/Makefile
@@ -29,7 +29,7 @@ ERL_COMPILE_FLAGS += -pa $(EBIN) -pa ./ -I$(INCLUDE)
ifeq ($(NATIVE_LIBS_ENABLED),yes)
ERL_COMPILE_FLAGS += +native
endif
-ERL_COMPILE_FLAGS += +nowarn_shadow_vars +warn_unused_import -Werror # +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += +nowarn_shadow_vars +warn_unused_import #-Werror # +warn_missing_spec +warn_untyped_record
SOURCES=erl_syntax.erl erl_prettypr.erl erl_syntax_lib.erl \
erl_comment_scan.erl erl_recomment.erl erl_tidy.erl \
diff --git a/lib/syntax_tools/src/erl_comment_scan.erl b/lib/syntax_tools/src/erl_comment_scan.erl
index 03429d4d42..b5ac564146 100644
--- a/lib/syntax_tools/src/erl_comment_scan.erl
+++ b/lib/syntax_tools/src/erl_comment_scan.erl
@@ -30,8 +30,14 @@
%% =====================================================================
--type comment() :: {integer(), integer(), integer(), [string()]}.
--type commentLine() :: {integer(), integer(), integer(), string()}.
+-type comment() :: {Line:: integer(),
+ Column:: integer(),
+ Indentation :: integer(),
+ Text :: [string()]}.
+-type commentLine() :: {Line :: integer(),
+ Column :: integer(),
+ Indent :: integer(),
+ Text :: string()}.
%% =====================================================================
%% @spec file(FileName::file:filename()) -> [Comment]
diff --git a/lib/syntax_tools/src/erl_prettypr.erl b/lib/syntax_tools/src/erl_prettypr.erl
index 81272e62de..df0d78031c 100644
--- a/lib/syntax_tools/src/erl_prettypr.erl
+++ b/lib/syntax_tools/src/erl_prettypr.erl
@@ -38,7 +38,7 @@
follow/3, empty/0]).
-import(erl_parse, [preop_prec/1, inop_prec/1, func_prec/0,
- max_prec/0]).
+ max_prec/0, type_inop_prec/1, type_preop_prec/1]).
-define(PADDING, 2).
-define(PAPER, 80).
@@ -50,7 +50,8 @@
| fun((erl_syntax:syntaxTree(), _, _) -> prettypr:document()).
-type clause_t() :: 'case_expr' | 'cond_expr' | 'fun_expr'
| 'if_expr' | 'receive_expr' | 'try_expr'
- | {'function', prettypr:document()}.
+ | {'function', prettypr:document()}
+ | 'spec'.
-record(ctxt, {prec = 0 :: integer(),
sub_indent = 2 :: non_neg_integer(),
@@ -194,10 +195,16 @@ format(Node) ->
%% =====================================================================
%% @spec format(Tree::syntaxTree(), Options::[term()]) -> string()
-%% syntaxTree() = erl_syntax:syntaxTree()
%%
-%% @type hook() = (syntaxTree(), context(), Continuation) -> document()
-%% Continuation = (syntaxTree(), context()) -> document().
+%% @type syntaxTree() = erl_syntax:syntaxTree().
+%%
+%% An abstract syntax tree. See the {@link erl_syntax} module for
+%% details.
+%%
+%% @type hook() = (syntaxTree(), context(), Continuation) ->
+%% prettypr:document()
+%% Continuation = (syntaxTree(), context()) ->
+%% prettypr:document().
%%
%% A call-back function for user-controlled formatting. See {@link
%% format/2}.
@@ -276,7 +283,7 @@ format(Node, Options) ->
%% =====================================================================
-%% @spec best(Tree::syntaxTree()) -> empty | document()
+%% @spec best(Tree::syntaxTree()) -> empty | prettypr:document()
%% @equiv best(Tree, [])
-spec best(erl_syntax:syntaxTree()) -> 'empty' | prettypr:document().
@@ -287,7 +294,7 @@ best(Node) ->
%% =====================================================================
%% @spec best(Tree::syntaxTree(), Options::[term()]) ->
-%% empty | document()
+%% empty | prettypr:document()
%%
%% @doc Creates a fixed "best" abstract layout for a syntax tree. This
%% is similar to the `layout/2' function, except that here, the final
@@ -309,7 +316,7 @@ best(Node, Options) ->
%% =====================================================================
-%% @spec layout(Tree::syntaxTree()) -> document()
+%% @spec layout(Tree::syntaxTree()) -> prettypr:document()
%% @equiv layout(Tree, [])
-spec layout(erl_syntax:syntaxTree()) -> prettypr:document().
@@ -319,8 +326,7 @@ layout(Node) ->
%% =====================================================================
-%% @spec layout(Tree::syntaxTree(), Options::[term()]) -> document()
-%% document() = prettypr:document()
+%% @spec layout(Tree::syntaxTree(), Options::[term()]) -> prettypr:document()
%%
%% @doc Creates an abstract document layout for a syntax tree. The
%% result represents a set of possible layouts (cf. module `prettypr').
@@ -535,9 +541,6 @@ lay_2(Node, Ctxt) ->
As = seq(erl_syntax:application_arguments(Node),
floating(text(",")), reset_prec(Ctxt),
fun lay/2),
-%% D1 = beside(D, beside(text("("),
-%% beside(par(As),
-%% floating(text(")"))))),
D1 = beside(D, beside(text("("),
beside(par(As),
floating(text(")"))))),
@@ -651,7 +654,7 @@ lay_2(Node, Ctxt) ->
beside(D1, beside(text(":"), D2));
%%
- %% The rest is in alphabetical order
+ %% The rest is in alphabetical order (except map and types)
%%
arity_qualifier ->
@@ -666,18 +669,67 @@ lay_2(Node, Ctxt) ->
%% a period. If the arguments is `none', we only output the
%% attribute name, without following parentheses.
Ctxt1 = reset_prec(Ctxt),
- N = erl_syntax:attribute_name(Node),
- D = case erl_syntax:attribute_arguments(Node) of
- none ->
+ Args = erl_syntax:attribute_arguments(Node),
+ N = erl_syntax:attribute_name(Node),
+ D = case attribute_type(Node) of
+ spec ->
+ [SpecTuple] = Args,
+ [FuncName, FuncTypes] =
+ erl_syntax:tuple_elements(SpecTuple),
+ Name =
+ case erl_syntax:type(FuncName) of
+ tuple ->
+ case erl_syntax:tuple_elements(FuncName) of
+ [F0, _] ->
+ F0;
+ [M0, F0, _] ->
+ erl_syntax:module_qualifier(M0,
+ F0);
+ _ ->
+ FuncName
+ end;
+ _ ->
+ FuncName
+ end,
+ Types = dodge_macros(FuncTypes),
+ D1 = lay_clauses(erl_syntax:concrete(Types),
+ spec, Ctxt1),
+ beside(follow(lay(N, Ctxt1),
+ lay(Name, Ctxt1),
+ Ctxt1#ctxt.break_indent),
+ D1);
+ type ->
+ [TypeTuple] = Args,
+ [Name, Type0, Elements] =
+ erl_syntax:tuple_elements(TypeTuple),
+ TypeName = dodge_macros(Name),
+ Type = dodge_macros(Type0),
+ As0 = dodge_macros(Elements),
+ As = erl_syntax:concrete(As0),
+ D1 = lay_type_application(TypeName, As, Ctxt1),
+ D2 = lay(erl_syntax:concrete(Type), Ctxt1),
+ beside(follow(lay(N, Ctxt1),
+ beside(D1, floating(text(" :: "))),
+ Ctxt1#ctxt.break_indent),
+ D2);
+ Tag when Tag =:= export_type;
+ Tag =:= optional_callbacks ->
+ [FuncNs] = Args,
+ FuncNames = erl_syntax:concrete(dodge_macros(FuncNs)),
+ As = unfold_function_names(FuncNames),
+ beside(lay(N, Ctxt1),
+ beside(text("("),
+ beside(lay(As, Ctxt1),
+ floating(text(")")))));
+ _ when Args =:= none ->
lay(N, Ctxt1);
- Args ->
- As = seq(Args, floating(text(",")), Ctxt1,
- fun lay/2),
+ _ ->
+ D1 = par(seq(Args, floating(text(",")), Ctxt1,
+ fun lay/2)),
beside(lay(N, Ctxt1),
beside(text("("),
- beside(par(As),
- floating(text(")")))))
- end,
+ beside(D1, floating(text(")")))))
+ end,
beside(floating(text("-")), beside(D, floating(text("."))));
binary ->
@@ -928,6 +980,16 @@ lay_2(Node, Ctxt) ->
text ->
text(erl_syntax:text_string(Node));
+ typed_record_field ->
+ {_, Prec, _} = type_inop_prec('::'),
+ Ctxt1 = reset_prec(Ctxt),
+ D1 = lay(erl_syntax:typed_record_field_body(Node), Ctxt1),
+ D2 = lay(erl_syntax:typed_record_field_type(Node),
+ set_prec(Ctxt, Prec)),
+ D3 = par([D1, floating(text(" ::")), D2],
+ Ctxt1#ctxt.break_indent),
+ maybe_parentheses(D3, Prec, Ctxt);
+
try_expr ->
Ctxt1 = reset_prec(Ctxt),
D1 = sep(seq(erl_syntax:try_expr_body(Node),
@@ -965,9 +1027,237 @@ lay_2(Node, Ctxt) ->
warning_marker ->
E = erl_syntax:warning_marker_info(Node),
beside(text("%% WARNING: "),
- lay_error_info(E, reset_prec(Ctxt)))
+ lay_error_info(E, reset_prec(Ctxt)));
+
+ %%
+ %% Types
+ %%
+
+ annotated_type ->
+ {_, Prec, _} = type_inop_prec('::'),
+ D1 = lay(erl_syntax:annotated_type_name(Node),
+ reset_prec(Ctxt)),
+ D2 = lay(erl_syntax:annotated_type_body(Node),
+ set_prec(Ctxt, Prec)),
+ D3 = follow(beside(D1, floating(text(" ::"))), D2,
+ Ctxt#ctxt.break_indent),
+ maybe_parentheses(D3, Prec, Ctxt);
+
+ type_application ->
+ Name = erl_syntax:type_application_name(Node),
+ Arguments = erl_syntax:type_application_arguments(Node),
+ %% Prefer shorthand notation.
+ case erl_syntax_lib:analyze_type_application(Node) of
+ {nil, 0} ->
+ text("[]");
+ {list, 1} ->
+ [A] = Arguments,
+ D1 = lay(A, reset_prec(Ctxt)),
+ beside(text("["), beside(D1, text("]")));
+ {nonempty_list, 1} ->
+ [A] = Arguments,
+ D1 = lay(A, reset_prec(Ctxt)),
+ beside(text("["), beside(D1, text(", ...]")));
+ _ ->
+ lay_type_application(Name, Arguments, Ctxt)
+ end;
+
+ bitstring_type ->
+ Ctxt1 = set_prec(Ctxt, max_prec()),
+ M = erl_syntax:bitstring_type_m(Node),
+ N = erl_syntax:bitstring_type_n(Node),
+ D1 = [beside(text("_:"), lay(M, Ctxt1)) ||
+ (erl_syntax:type(M) =/= integer orelse
+ erl_syntax:integer_value(M) =/= 0)],
+ D2 = [beside(text("_:_*"), lay(N, Ctxt1)) ||
+ (erl_syntax:type(N) =/= integer orelse
+ erl_syntax:integer_value(N) =/= 0)],
+ F = fun(D, _) -> D end,
+ D = seq(D1 ++ D2, floating(text(",")), Ctxt1, F),
+ beside(floating(text("<<")),
+ beside(par(D), floating(text(">>"))));
+
+ fun_type ->
+ text("fun()");
+
+ constrained_function_type ->
+ Ctxt1 = reset_prec(Ctxt),
+ D1 = lay(erl_syntax:constrained_function_type_body(Node),
+ Ctxt1),
+ D2 = lay(erl_syntax:constrained_function_type_argument(Node),
+ Ctxt1),
+ beside(D1,
+ beside(floating(text(" when ")), D2));
+
+ function_type ->
+ {Before, After} = case Ctxt#ctxt.clause of
+ spec ->
+ {"", ""};
+ _ ->
+ {"fun(", ")"}
+ end,
+ Ctxt1 = reset_prec(Ctxt),
+ D1 = case erl_syntax:function_type_arguments(Node) of
+ any_arity ->
+ text("(...)");
+ Arguments ->
+ As = seq(Arguments,
+ floating(text(",")), Ctxt1,
+ fun lay/2),
+ beside(text("("),
+ beside(par(As),
+ floating(text(")"))))
+ end,
+ D2 = lay(erl_syntax:function_type_return(Node), Ctxt1),
+ beside(floating(text(Before)),
+ beside(D1,
+ beside(floating(text(" -> ")),
+ beside(D2, floating(text(After))))));
+
+ constraint ->
+ Name = erl_syntax:constraint_argument(Node),
+ Args = erl_syntax:constraint_body(Node),
+ case is_subtype(Name, Args) of
+ true ->
+ [Var, Type] = Args,
+ {PrecL, Prec, PrecR} = type_inop_prec('::'),
+ D1 = lay(Var, set_prec(Ctxt, PrecL)),
+ D2 = lay(Type, set_prec(Ctxt, PrecR)),
+ D3 = follow(beside(D1, floating(text(" ::"))), D2,
+ Ctxt#ctxt.break_indent),
+ maybe_parentheses(D3, Prec, Ctxt);
+ false ->
+ lay_type_application(Name, Args, Ctxt)
+ end;
+
+ map_type ->
+ case erl_syntax:map_type_fields(Node) of
+ any_size ->
+ text("map()");
+ Fs ->
+ Ctxt1 = reset_prec(Ctxt),
+ Es = seq(Fs,
+ floating(text(",")), Ctxt1,
+ fun lay/2),
+ D = beside(floating(text("#{")),
+ beside(par(Es),
+ floating(text("}")))),
+ {Prec, _PrecR} = type_preop_prec('#'),
+ maybe_parentheses(D, Prec, Ctxt)
+ end;
+
+ map_type_assoc ->
+ Name = erl_syntax:map_type_assoc_name(Node),
+ Value = erl_syntax:map_type_assoc_value(Node),
+ lay_type_assoc(Name, Value, Ctxt);
+
+ map_type_exact ->
+ Ctxt1 = reset_prec(Ctxt),
+ D1 = lay(erl_syntax:map_type_exact_name(Node), Ctxt1),
+ D2 = lay(erl_syntax:map_type_exact_value(Node), Ctxt1),
+ par([D1, floating(text(":=")), D2], Ctxt1#ctxt.break_indent);
+
+ integer_range_type ->
+ {PrecL, Prec, PrecR} = type_inop_prec('..'),
+ D1 = lay(erl_syntax:integer_range_type_low(Node),
+ set_prec(Ctxt, PrecL)),
+ D2 = lay(erl_syntax:integer_range_type_high(Node),
+ set_prec(Ctxt, PrecR)),
+ D3 = beside(D1, beside(text(".."), D2)),
+ maybe_parentheses(D3, Prec, Ctxt);
+
+ record_type ->
+ {Prec, _PrecR} = type_preop_prec('#'),
+ D1 = beside(text("#"),
+ lay(erl_syntax:record_type_name(Node),
+ reset_prec(Ctxt))),
+ Es = seq(erl_syntax:record_type_fields(Node),
+ floating(text(",")), reset_prec(Ctxt),
+ fun lay/2),
+ D2 = beside(D1,
+ beside(text("{"),
+ beside(par(Es),
+ floating(text("}"))))),
+ maybe_parentheses(D2, Prec, Ctxt);
+
+ record_type_field ->
+ Ctxt1 = reset_prec(Ctxt),
+ D1 = lay(erl_syntax:record_type_field_name(Node), Ctxt1),
+ D2 = lay(erl_syntax:record_type_field_type(Node), Ctxt1),
+ par([D1, floating(text("::")), D2], Ctxt1#ctxt.break_indent);
+
+ tuple_type ->
+ case erl_syntax:tuple_type_elements(Node) of
+ any_size ->
+ text("tuple()");
+ Elements ->
+ Es = seq(Elements,
+ floating(text(",")), reset_prec(Ctxt),
+ fun lay/2),
+ beside(floating(text("{")),
+ beside(par(Es), floating(text("}"))))
+ end;
+
+ type_union ->
+ {_, Prec, PrecR} = type_inop_prec('|'),
+ Es = par(seq(erl_syntax:type_union_types(Node),
+ floating(text(" |")), set_prec(Ctxt, PrecR),
+ fun lay/2)),
+ maybe_parentheses(Es, Prec, Ctxt);
+
+ user_type_application ->
+ lay_type_application(erl_syntax:user_type_application_name(Node),
+ erl_syntax:user_type_application_arguments(Node),
+ Ctxt)
+
+ end.
+
+attribute_type(Node) ->
+ N = erl_syntax:attribute_name(Node),
+ case catch erl_syntax:concrete(N) of
+ opaque ->
+ type;
+ spec ->
+ spec;
+ callback ->
+ spec;
+ type ->
+ type;
+ export_type ->
+ export_type;
+ optional_callbacks ->
+ optional_callbacks;
+ _ ->
+ N
end.
+is_subtype(Name, [Var, _]) ->
+ (erl_syntax:is_atom(Name, is_subtype) andalso
+ erl_syntax:type(Var) =:= variable);
+is_subtype(_, _) -> false.
+
+unfold_function_names(Ns) ->
+ F = fun ({Atom, Arity}) ->
+ erl_syntax:arity_qualifier(erl_syntax:atom(Atom),
+ erl_syntax:integer(Arity))
+ end,
+ erl_syntax:list([F(N) || N <- Ns]).
+
+%% Macros are not handled well.
+dodge_macros(Type) ->
+ F = fun (T) ->
+ case erl_syntax:type(T) of
+ macro ->
+ Var = erl_syntax:macro_name(T),
+ VarName0 = erl_syntax:variable_name(Var),
+ VarName = list_to_atom("?"++atom_to_list(VarName0)),
+ Atom = erl_syntax:atom(VarName),
+ Atom;
+ _ -> T
+ end
+ end,
+ erl_syntax_lib:map(F, Type).
+
lay_parentheses(D, _Ctxt) ->
beside(floating(text("(")), beside(D, floating(text(")")))).
@@ -1020,6 +1310,8 @@ split_string_1([], _N, _L, As) ->
split_string_2([$^, X | Xs], N, L, As) ->
split_string_1(Xs, N - 2, L - 2, [X, $^ | As]);
+split_string_2([$x, ${ | Xs], N, L, As) ->
+ split_string_3(Xs, N - 2, L - 2, [${, $x | As]);
split_string_2([X1, X2, X3 | Xs], N, L, As) when
X1 >= $0, X1 =< $7, X2 >= $0, X2 =< $7, X3 >= $0, X3 =< $7 ->
split_string_1(Xs, N - 3, L - 3, [X3, X2, X1 | As]);
@@ -1029,6 +1321,15 @@ split_string_2([X1, X2 | Xs], N, L, As) when
split_string_2([X | Xs], N, L, As) ->
split_string_1(Xs, N - 1, L - 1, [X | As]).
+split_string_3([$} | Xs], N, L, As) ->
+ split_string_1(Xs, N - 1, L - 1, [$} | As]);
+split_string_3([X | Xs], N, L, As) when
+ X >= $0, X =< $9; X >= $a, X =< $z; X >= $A, X =< $Z ->
+ split_string_3(Xs, N - 1, L -1, [X | As]);
+split_string_3([X | Xs], N, L, As) when
+ X >= $0, X =< $9 ->
+ split_string_1(Xs, N - 1, L -1, [X | As]).
+
%% Note that there is nothing in `lay_clauses' that actually requires
%% that the elements have type `clause'; it just sets up the proper
%% context and arranges the elements suitably for clauses.
@@ -1105,6 +1406,23 @@ lay_error_info(T, Ctxt) ->
lay_concrete(T, Ctxt) ->
lay(erl_syntax:abstract(T), Ctxt).
+lay_type_assoc(Name, Value, Ctxt) ->
+ Ctxt1 = reset_prec(Ctxt),
+ D1 = lay(Name, Ctxt1),
+ D2 = lay(Value, Ctxt1),
+ par([D1, floating(text("=>")), D2], Ctxt1#ctxt.break_indent).
+
+lay_type_application(Name, Arguments, Ctxt) ->
+ {PrecL, Prec} = func_prec(), %
+ D1 = lay(Name, set_prec(Ctxt, PrecL)),
+ As = seq(Arguments,
+ floating(text(",")), reset_prec(Ctxt),
+ fun lay/2),
+ D = beside(D1, beside(text("("),
+ beside(par(As),
+ floating(text(")"))))),
+ maybe_parentheses(D, Prec, Ctxt).
+
seq([H | T], Separator, Ctxt, Fun) ->
case T of
[] ->
diff --git a/lib/syntax_tools/src/erl_recomment.erl b/lib/syntax_tools/src/erl_recomment.erl
index 72e1e2d2f5..1d23034991 100644
--- a/lib/syntax_tools/src/erl_recomment.erl
+++ b/lib/syntax_tools/src/erl_recomment.erl
@@ -30,6 +30,9 @@
-export([recomment_forms/2, quick_recomment_forms/2, recomment_tree/2]).
+%% @type syntaxTree() = erl_syntax:syntaxTree(). An abstract syntax
+%% tree. See the {@link erl_syntax} module for details.
+
%% =====================================================================
%% @spec quick_recomment_forms(Forms, Comments::[Comment]) ->
%% syntaxTree()
@@ -55,7 +58,6 @@ quick_recomment_forms(Tree, Cs) ->
%% =====================================================================
%% @spec recomment_forms(Forms, Comments::[Comment]) -> syntaxTree()
%%
-%% syntaxTree() = erl_syntax:syntaxTree()
%% Forms = syntaxTree() | [syntaxTree()]
%% Comment = {Line, Column, Indentation, Text}
%% Line = integer()
@@ -601,22 +603,25 @@ expand_comment(C) ->
-record(leaf, {min = 0 :: integer(),
max = 0 :: integer(),
- precomments = [] :: [erl_syntax:syntaxTree()],
- postcomments = [] :: [erl_syntax:syntaxTree()],
+ precomments = [] :: [erl_comment_scan:comment()],
+ postcomments = [] :: [erl_comment_scan:comment()],
value :: erl_syntax:syntaxTree()}).
-record(tree, {min = 0 :: integer(),
max = 0 :: integer(),
type :: atom(),
attrs :: erl_syntax:syntaxTreeAttributes(),
- precomments = [] :: [erl_syntax:syntaxTree()],
- postcomments = [] :: [erl_syntax:syntaxTree()],
- subtrees = [] :: [erl_syntax:syntaxTree()]}).
+ precomments = [] :: [erl_comment_scan:comment()],
+ postcomments = [] :: [erl_comment_scan:comment()],
+ subtrees = [] :: [extendedSyntaxTree()]}).
+
-record(list, {min = 0 :: integer(),
max = 0 :: integer(),
subtrees = [] :: [erl_syntax:syntaxTree()]}).
+-type extendedSyntaxTree() :: #tree{} | #leaf{} | #list{}.
+
leaf_node(Min, Max, Value) ->
#leaf{min = Min,
max = Max,
diff --git a/lib/syntax_tools/src/erl_syntax.erl b/lib/syntax_tools/src/erl_syntax.erl
index 3f2a3e05dd..ee42e56172 100644
--- a/lib/syntax_tools/src/erl_syntax.erl
+++ b/lib/syntax_tools/src/erl_syntax.erl
@@ -120,6 +120,9 @@
normalize_list/1,
compact_list/1,
+ annotated_type/2,
+ annotated_type_name/1,
+ annotated_type_body/1,
application/2,
application/3,
application_arguments/1,
@@ -150,6 +153,9 @@
binary_generator/2,
binary_generator_body/1,
binary_generator_pattern/1,
+ bitstring_type/2,
+ bitstring_type_m/1,
+ bitstring_type_n/1,
block_expr/1,
block_expr_body/1,
case_expr/2,
@@ -175,6 +181,12 @@
cond_expr_clauses/1,
conjunction/1,
conjunction_body/1,
+ constrained_function_type/2,
+ constrained_function_type_body/1,
+ constrained_function_type_argument/1,
+ constraint/2,
+ constraint_argument/1,
+ constraint_body/1,
disjunction/1,
disjunction_body/1,
eof_marker/0,
@@ -188,10 +200,15 @@
fun_expr/1,
fun_expr_arity/1,
fun_expr_clauses/1,
+ fun_type/0,
function/2,
function_arity/1,
function_clauses/1,
function_name/1,
+ function_type/1,
+ function_type/2,
+ function_type_arguments/1,
+ function_type_return/1,
generator/2,
generator_body/1,
generator_pattern/1,
@@ -209,6 +226,9 @@
is_integer/2,
integer_value/1,
integer_literal/1,
+ integer_range_type/2,
+ integer_range_type_low/1,
+ integer_range_type_high/1,
list/1,
list/2,
list_comp/2,
@@ -230,6 +250,15 @@
map_field_exact/2,
map_field_exact_name/1,
map_field_exact_value/1,
+ map_type/0,
+ map_type/1,
+ map_type_fields/1,
+ map_type_assoc/2,
+ map_type_assoc_name/1,
+ map_type_assoc_value/1,
+ map_type_exact/2,
+ map_type_exact_name/1,
+ map_type_exact_value/1,
match_expr/2,
match_expr_body/1,
match_expr_pattern/1,
@@ -270,6 +299,12 @@
record_index_expr/2,
record_index_expr_field/1,
record_index_expr_type/1,
+ record_type/2,
+ record_type_name/1,
+ record_type_fields/1,
+ record_type_field/2,
+ record_type_field_name/1,
+ record_type_field_type/1,
size_qualifier/2,
size_qualifier_argument/1,
size_qualifier_body/1,
@@ -288,6 +323,18 @@
try_expr_clauses/1,
try_expr_handlers/1,
try_expr_after/1,
+ tuple_type/0,
+ tuple_type/1,
+ tuple_type_elements/1,
+ type_application/2,
+ type_application/3,
+ type_application_name/1,
+ type_application_arguments/1,
+ type_union/1,
+ type_union_types/1,
+ typed_record_field/2,
+ typed_record_field_body/1,
+ typed_record_field_type/1,
class_qualifier/2,
class_qualifier_argument/1,
class_qualifier_body/1,
@@ -295,6 +342,9 @@
tuple_elements/1,
tuple_size/1,
underscore/0,
+ user_type_application/2,
+ user_type_application_name/1,
+ user_type_application_arguments/1,
variable/1,
variable_name/1,
variable_literal/1,
@@ -355,7 +405,7 @@
%% where `Pos' `Ann' and `Comments' are the corresponding values of a
%% `tree' or `wrapper' record.
--record(attr, {pos = 0 :: term(),
+-record(attr, {pos = erl_anno:new(0) :: term(),
ann = [] :: [term()],
com = none :: 'none' | #com{}}).
-type syntaxTreeAttributes() :: #attr{}.
@@ -393,7 +443,14 @@
-type syntaxTree() :: #tree{} | #wrapper{} | erl_parse().
--type erl_parse() :: erl_parse:abstract_form() | erl_parse:abstract_expr().
+-type erl_parse() :: erl_parse:abstract_clause()
+ | erl_parse:abstract_expr()
+ | erl_parse:abstract_form()
+ | erl_parse:abstract_type()
+ | erl_parse:form_info()
+ %% To shut up Dialyzer:
+ | {bin_element, _, _, _, _}.
+
%% The representation built by the Erlang standard library parser
%% `erl_parse'. This is a subset of the {@link syntaxTree()} type.
@@ -412,23 +469,28 @@
%% <center><table border="1">
%% <tr>
%% <td>application</td>
+%% <td>annotated_type</td>
%% <td>arity_qualifier</td>
%% <td>atom</td>
-%% <td>attribute</td>
%% </tr><tr>
+%% <td>attribute</td>
%% <td>binary</td>
%% <td>binary_field</td>
+%% <td>bitstring_type</td>
+%% </tr><tr>
%% <td>block_expr</td>
%% <td>case_expr</td>
-%% </tr><tr>
%% <td>catch_expr</td>
%% <td>char</td>
+%% </tr><tr>
%% <td>class_qualifier</td>
%% <td>clause</td>
-%% </tr><tr>
%% <td>comment</td>
%% <td>cond_expr</td>
+%% </tr><tr>
%% <td>conjunction</td>
+%% <td>constrained_function_type</td>
+%% <td>constraint</td>
%% <td>disjunction</td>
%% </tr><tr>
%% <td>eof_marker</td>
@@ -437,43 +499,58 @@
%% <td>form_list</td>
%% </tr><tr>
%% <td>fun_expr</td>
+%% <td>fun_type</td>
%% <td>function</td>
+%% <td>function_type</td>
+%% </tr><tr>
%% <td>generator</td>
%% <td>if_expr</td>
-%% </tr><tr>
%% <td>implicit_fun</td>
%% <td>infix_expr</td>
+%% </tr><tr>
%% <td>integer</td>
+%% <td>integer_range_type</td>
%% <td>list</td>
-%% </tr><tr>
%% <td>list_comp</td>
+%% </tr><tr>
%% <td>macro</td>
%% <td>map_expr</td>
%% <td>map_field_assoc</td>
-%% </tr><tr>
%% <td>map_field_exact</td>
+%% </tr><tr>
+%% <td>map_type</td>
+%% <td>map_type_assoc</td>
+%% <td>map_type_exact</td>
%% <td>match_expr</td>
%% <td>module_qualifier</td>
-%% <td>named_fun_expr</td>
%% </tr><tr>
+%% <td>named_fun_expr</td>
%% <td>nil</td>
%% <td>operator</td>
%% <td>parentheses</td>
-%% <td>prefix_expr</td>
%% </tr><tr>
+%% <td>prefix_expr</td>
%% <td>receive_expr</td>
%% <td>record_access</td>
%% <td>record_expr</td>
-%% <td>record_field</td>
%% </tr><tr>
+%% <td>record_field</td>
%% <td>record_index_expr</td>
+%% <td>record_type</td>
+%% <td>record_type_field</td>
+%% </tr><tr>
%% <td>size_qualifier</td>
%% <td>string</td>
%% <td>text</td>
-%% </tr><tr>
%% <td>try_expr</td>
+%% </tr><tr>
%% <td>tuple</td>
+%% <td>tuple_type</td>
+%% <td>typed_record_field</td>
+%% <td>type_application</td>
+%% <td>type_union</td>
%% <td>underscore</td>
+%% <td>user_type_application</td>
%% <td>variable</td>
%% </tr><tr>
%% <td>warning_marker</td>
@@ -487,12 +564,14 @@
%% always have the same name as the node type itself.
%%
%% @see tree/2
+%% @see annotated_type/2
%% @see application/3
%% @see arity_qualifier/2
%% @see atom/1
%% @see attribute/2
%% @see binary/1
%% @see binary_field/2
+%% @see bitstring_type/2
%% @see block_expr/1
%% @see case_expr/2
%% @see catch_expr/1
@@ -502,24 +581,34 @@
%% @see comment/2
%% @see cond_expr/1
%% @see conjunction/1
+%% @see constrained_function_type/2
+%% @see constraint/2
%% @see disjunction/1
%% @see eof_marker/0
%% @see error_marker/1
%% @see float/1
%% @see form_list/1
%% @see fun_expr/1
+%% @see fun_type/0
%% @see function/2
+%% @see function_type/1
+%% @see function_type/2
%% @see generator/2
%% @see if_expr/1
%% @see implicit_fun/2
%% @see infix_expr/3
%% @see integer/1
+%% @see integer_range_type/2
%% @see list/2
%% @see list_comp/2
%% @see macro/2
%% @see map_expr/2
%% @see map_field_assoc/2
%% @see map_field_exact/2
+%% @see map_type/0
+%% @see map_type/1
+%% @see map_type_assoc/2
+%% @see map_type_exact/2
%% @see match_expr/2
%% @see module_qualifier/2
%% @see named_fun_expr/2
@@ -532,12 +621,20 @@
%% @see record_expr/2
%% @see record_field/2
%% @see record_index_expr/2
+%% @see record_type/2
+%% @see record_type_field/2
%% @see size_qualifier/2
%% @see string/1
%% @see text/1
%% @see try_expr/3
%% @see tuple/1
+%% @see tuple_type/0
+%% @see tuple_type/1
+%% @see typed_record_field/2
+%% @see type_application/2
+%% @see type_union/1
%% @see underscore/0
+%% @see user_type_application/2
%% @see variable/1
%% @see warning_marker/1
@@ -602,6 +699,25 @@ type(Node) ->
{remote, _, _, _} -> module_qualifier;
{'try', _, _, _, _, _} -> try_expr;
{tuple, _, _} -> tuple;
+
+ %% Type types
+ {ann_type, _, _} -> annotated_type;
+ {remote_type, _, _} -> type_application;
+ {type, _, binary, [_, _]} -> bitstring_type;
+ {type, _, bounded_fun, [_, _]} -> constrained_function_type;
+ {type, _, constraint, [_, _]} -> constraint;
+ {type, _, 'fun', []} -> fun_type;
+ {type, _, 'fun', [_, _]} -> function_type;
+ {type, _, map, _} -> map_type;
+ {type, _, map_field_assoc, _} -> map_type_assoc;
+ {type, _, map_field_exact, _} -> map_type_exact;
+ {type, _, record, _} -> record_type;
+ {type, _, field_type, _} -> record_type_field;
+ {type, _, range, _} -> integer_range_type;
+ {type, _, tuple, _} -> tuple_type;
+ {type, _, union, _} -> type_union;
+ {type, _, _, _} -> type_application;
+ {user_type, _, _, _} -> user_type_application;
_ ->
erlang:error({badarg, Node})
end.
@@ -621,6 +737,7 @@ type(Node) ->
%% <td>`error_marker'</td>
%% </tr><tr>
%% <td>`float'</td>
+%% <td>`fun_type'</td>
%% <td>`integer'</td>
%% <td>`nil'</td>
%% <td>`operator'</td>
@@ -633,7 +750,13 @@ type(Node) ->
%% </tr>
%% </table></center>
%%
+%% A node of type `map_expr' is a leaf node if and only if it has no
+%% argument and no fields.
+%% A node of type `map_type' is a leaf node if and only if it has no
+%% fields (`any_size').
%% A node of type `tuple' is a leaf node if and only if its arity is zero.
+%% A node of type `tuple_type' is a leaf node if and only if it has no
+%% elements (`any_size').
%%
%% Note: not all literals are leaf nodes, and vice versa. E.g.,
%% tuples with nonzero arity and nonempty lists may be literals, but are
@@ -653,6 +776,7 @@ is_leaf(Node) ->
eof_marker -> true;
error_marker -> true;
float -> true;
+ fun_type -> true;
integer -> true;
nil -> true;
operator -> true; % nonstandard type
@@ -661,7 +785,9 @@ is_leaf(Node) ->
map_expr ->
map_expr_fields(Node) =:= [] andalso
map_expr_argument(Node) =:= none;
+ map_type -> map_type_fields(Node) =:= any_size;
tuple -> tuple_elements(Node) =:= [];
+ tuple_type -> tuple_type_elements(Node) =:= any_size;
underscore -> true;
variable -> true;
warning_marker -> true;
@@ -3114,6 +3240,39 @@ attribute(Name) ->
%% `Imports' is `{Module, [{A1, N1}, ..., {Ak, Nk}]}', or
%% `-import(A1.....An).', if `Imports' is `[A1, ..., An]'.
%%
+%% {attribute, Pos, export_type, ExportedTypes}
+%%
+%% ExportedTypes = [{atom(), integer()}]
+%%
+%% Representing `-export_type([N1/A1, ..., Nk/Ak]).',
+%% if `ExportedTypes' is `[{N1, A1}, ..., {Nk, Ak}]'.
+%%
+%% {attribute, Pos, optional_callbacks, OptionalCallbacks}
+%%
+%% OptionalCallbacks = [{atom(), integer()}]
+%%
+%% Representing `-optional_callbacks([A1/N1, ..., Ak/Nk]).',
+%% if `OptionalCallbacks' is `[{A1, N1}, ..., {Ak, Nk}]'.
+%%
+%% {attribute, Pos, SpecTag, {FuncSpec, FuncType}}
+%%
+%% SpecTag = spec | callback
+%% FuncSpec = {module(), atom(), arity()} | {atom(), arity()}
+%% FuncType = a (possibly constrained) function type
+%%
+%% Representing `-SpecTag M:F/A Ft1; ...; Ftk.' or
+%% `-SpecTag F/A Ft1; ...; Ftk.', if `FuncTypes' is
+%% `[Ft1, ..., Ftk]'.
+%%
+%% {attribute, Pos, TypeTag, {Name, Type, Parameters}}
+%%
+%% TypeTag = type | opaque
+%% Type = a type
+%% Parameters = [Variable]
+%%
+%% Representing `-TypeTag Name(V1, ..., Vk) :: Type .'
+%% if `Parameters' is `[V1, ..., Vk]'.
+%%
%% {attribute, Pos, file, Position}
%%
%% Position = {filename(), integer()}
@@ -3125,13 +3284,19 @@ attribute(Name) ->
%%
%% Info = {Name, [Entries]}
%% Name = atom()
-%% Entries = {record_field, Pos, atom()}
-%% | {record_field, Pos, atom(), erl_parse()}
%%
-%% Representing `-record(Name, {<F1>, ..., <Fn>}).', if `Info' is
+%% Entries = UntypedEntries
+%% | {typed_record_field, UntypedEntries, Type}
+%% UntypedEntries = {record_field, Pos, atom()}
+%% | {record_field, Pos, atom(), erl_parse()}
+%%
+%% Representing `-record(Name, {<F1>, ..., <Fn>}).', if `Info' is
%% `{Name, [D1, ..., D1]}', where each `Fi' is either `Ai = <Ei>',
%% if the corresponding `Di' is `{record_field, Pos, Ai, Ei}', or
-%% otherwise simply `Ai', if `Di' is `{record_field, Pos, Ai}'.
+%% otherwise simply `Ai', if `Di' is `{record_field, Pos, Ai}', or
+%% `Ai = <Ei> :: <Ti>', if `Di' is `{typed_record_field,
+%% {record_field, Pos, Ai, Ei}, Ti}', or `Ai :: <Ti>', if `Di' is
+%% `{typed_record_field, {record_field, Pos, Ai}, Ti}'.
%%
%% {attribute, L, Name, Term}
%%
@@ -3309,11 +3474,6 @@ attribute_arguments(Node) ->
[set_pos(
list(unfold_function_names(Data, Pos)),
Pos)];
- optional_callbacks ->
- D = try list(unfold_function_names(Data, Pos))
- catch _:_ -> abstract(Data)
- end,
- [set_pos(D, Pos)];
import ->
{Module, Imports} = Data,
[set_pos(atom(Module), Pos),
@@ -4183,7 +4343,8 @@ record_field(Name) ->
%% type(Node) = record_field
%% data(Node) = #record_field{name :: Name, value :: Value}
%%
-%% Name = Value = syntaxTree()
+%% Name = syntaxTree()
+%% Value = none | syntaxTree()
-spec record_field(syntaxTree(), 'none' | syntaxTree()) -> syntaxTree().
@@ -4568,7 +4729,7 @@ application(Module, Name, Arguments) ->
%%
%% `erl_parse' representation:
%%
-%% {call, Pos, Fun, Args}
+%% {call, Pos, Operator, Args}
%%
%% Operator = erl_parse()
%% Arguments = [erl_parse()]
@@ -4623,6 +4784,1095 @@ application_arguments(Node) ->
(data(Node1))#application.arguments
end.
+%% =====================================================================
+%% @doc Creates an abstract annotated type expression. The result
+%% represents "<code><em>Name</em> :: <em>Type</em></code>".
+%%
+%% @see annotated_type_name/1
+%% @see annotated_type_body/1
+
+-record(annotated_type, {name :: syntaxTree(), body :: syntaxTree()}).
+
+%% type(Node) = annotated_type
+%% data(Node) = #annotated_type{name :: Name,
+%% body :: Type}
+%%
+%% Name = syntaxTree()
+%% Type = syntaxTree()
+%%
+%% `erl_parse' representation:
+%%
+%% {ann_type, Pos, [Name, Type]}
+%%
+%% Name = erl_parse()
+%% Type = erl_parse()
+
+-spec annotated_type(syntaxTree(), syntaxTree()) -> syntaxTree().
+
+annotated_type(Name, Type) ->
+ tree(annotated_type, #annotated_type{name = Name, body = Type}).
+
+revert_annotated_type(Node) ->
+ Pos = get_pos(Node),
+ Name = annotated_type_name(Node),
+ Type = annotated_type_body(Node),
+ {ann_type, Pos, [Name, Type]}.
+
+
+%% =====================================================================
+%% @doc Returns the name subtree of an `annotated_type' node.
+%%
+%% @see annotated_type/2
+
+-spec annotated_type_name(syntaxTree()) -> syntaxTree().
+
+annotated_type_name(Node) ->
+ case unwrap(Node) of
+ {ann_type, _, [Name, _]} ->
+ Name;
+ Node1 ->
+ (data(Node1))#annotated_type.name
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the type subtrees of an `annotated_type' node.
+%%
+%% @see annotated_type/2
+
+-spec annotated_type_body(syntaxTree()) -> syntaxTree().
+
+annotated_type_body(Node) ->
+ case unwrap(Node) of
+ {ann_type, _, [_, Type]} ->
+ Type;
+ Node1 ->
+ (data(Node1))#annotated_type.body
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract fun of any type. The result represents
+%% "<code>fun()</code>".
+
+%% type(Node) = fun_type
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, 'fun', []}
+
+-spec fun_type() -> syntaxTree().
+
+fun_type() ->
+ tree(fun_type).
+
+revert_fun_type(Node) ->
+ Pos = get_pos(Node),
+ {type, Pos, 'fun', []}.
+
+
+%% =====================================================================
+%% @doc Creates an abstract type application expression. If
+%% `Module' is `none', this is call is equivalent
+%% to `type_application(TypeName, Arguments)', otherwise it is
+%% equivalent to `type_application(module_qualifier(Module, TypeName),
+%% Arguments)'.
+%%
+%% (This is a utility function.)
+%%
+%% @see type_application/2
+%% @see module_qualifier/2
+
+-spec type_application('none' | syntaxTree(), syntaxTree(), [syntaxTree()]) ->
+ syntaxTree().
+
+type_application(none, TypeName, Arguments) ->
+ type_application(TypeName, Arguments);
+type_application(Module, TypeName, Arguments) ->
+ type_application(module_qualifier(Module, TypeName), Arguments).
+
+
+%% =====================================================================
+%% @doc Creates an abstract type application expression. If `Arguments' is
+%% `[T1, ..., Tn]', the result represents
+%% "<code><em>TypeName</em>(<em>T1</em>, ...<em>Tn</em>)</code>".
+%%
+%% @see user_type_application/2
+%% @see type_application/3
+%% @see type_application_name/1
+%% @see type_application_arguments/1
+
+-record(type_application, {type_name :: syntaxTree(),
+ arguments :: [syntaxTree()]}).
+
+%% type(Node) = type_application
+%% data(Node) = #type_application{type_name :: TypeName,
+%% arguments :: Arguments}
+%%
+%% TypeName = syntaxTree()
+%% Arguments = [syntaxTree()]
+%%
+%% `erl_parse' representation:
+%%
+%% {remote, Pos, [Module, Name, Arguments]} |
+%% {type, Pos, Name, Arguments}
+%%
+%% Module = erl_parse()
+%% Name = atom()
+%% Arguments = [erl_parse()]
+
+-spec type_application(syntaxTree(), [syntaxTree()]) -> syntaxTree().
+
+type_application(TypeName, Arguments) ->
+ tree(type_application,
+ #type_application{type_name = TypeName, arguments = Arguments}).
+
+revert_type_application(Node) ->
+ Pos = get_pos(Node),
+ TypeName = type_application_name(Node),
+ Arguments = type_application_arguments(Node),
+ case type(TypeName) of
+ module_qualifier ->
+ Module = module_qualifier_argument(TypeName),
+ Name = module_qualifier_body(TypeName),
+ {remote_type, Pos, [Module, Name, Arguments]};
+ atom ->
+ {type, Pos, atom_value(TypeName), Arguments}
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the type name subtree of a `type_application' node.
+%%
+%% @see type_application/2
+
+-spec type_application_name(syntaxTree()) -> syntaxTree().
+
+type_application_name(Node) ->
+ case unwrap(Node) of
+ {remote_type, _, [Module, Name, _]} ->
+ module_qualifier(Module, Name);
+ {type, Pos, Name, _} ->
+ set_pos(atom(Name), Pos);
+ Node1 ->
+ (data(Node1))#type_application.type_name
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the arguments subtrees of a `type_application' node.
+%%
+%% @see type_application/2
+
+-spec type_application_arguments(syntaxTree()) -> [syntaxTree()].
+
+type_application_arguments(Node) ->
+ case unwrap(Node) of
+ {remote_type, _, [_, _, Arguments]} ->
+ Arguments;
+ {type, _, _, Arguments} ->
+ Arguments;
+ Node1 ->
+ (data(Node1))#type_application.arguments
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract bitstring type. The result represents
+%% "<code><em>&lt;&lt;_:M, _:_*N&gt;&gt;</em></code>".
+%%
+%% @see bitstring_type_m/1
+%% @see bitstring_type_n/1
+
+-record(bitstring_type, {m :: syntaxTree(), n :: syntaxTree()}).
+
+%% type(Node) = bitstring_type
+%% data(Node) = #bitstring_type{m :: M, n :: N}
+%%
+%% M = syntaxTree()
+%% N = syntaxTree()
+%%
+
+-spec bitstring_type(syntaxTree(), syntaxTree()) -> syntaxTree().
+
+bitstring_type(M, N) ->
+ tree(bitstring_type, #bitstring_type{m = M, n =N}).
+
+revert_bitstring_type(Node) ->
+ Pos = get_pos(Node),
+ M = bitstring_type_m(Node),
+ N = bitstring_type_n(Node),
+ {type, Pos, binary, [M, N]}.
+
+%% =====================================================================
+%% @doc Returns the number of start bits, `M', of a `bitstring_type' node.
+%%
+%% @see bitstring_type/2
+
+-spec bitstring_type_m(syntaxTree()) -> syntaxTree().
+
+bitstring_type_m(Node) ->
+ case unwrap(Node) of
+ {type, _, binary, [M, _]} ->
+ M;
+ Node1 ->
+ (data(Node1))#bitstring_type.m
+ end.
+
+%% =====================================================================
+%% @doc Returns the segment size, `N', of a `bitstring_type' node.
+%%
+%% @see bitstring_type/2
+
+-spec bitstring_type_n(syntaxTree()) -> syntaxTree().
+
+bitstring_type_n(Node) ->
+ case unwrap(Node) of
+ {type, _, binary, [_, N]} ->
+ N;
+ Node1 ->
+ (data(Node1))#bitstring_type.n
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract constrained function type.
+%% If `FunctionConstraint' is `[C1, ..., Cn]', the result represents
+%% "<code><em>FunctionType</em> when <em>C1</em>, ...<em>Cn</em></code>".
+%%
+%% @see constrained_function_type_body/1
+%% @see constrained_function_type_argument/1
+
+-record(constrained_function_type, {body :: syntaxTree(),
+ argument :: syntaxTree()}).
+
+%% type(Node) = constrained_function_type
+%% data(Node) = #constrained_function_type{body :: FunctionType,
+%% argument :: FunctionConstraint}
+%%
+%% FunctionType = syntaxTree()
+%% FunctionConstraint = syntaxTree()
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, bounded_fun, [FunctionType, FunctionConstraint]}
+%%
+%% FunctionType = erl_parse()
+%% FunctionConstraint = [erl_parse()]
+
+-spec constrained_function_type(syntaxTree(), [syntaxTree()]) -> syntaxTree().
+
+constrained_function_type(FunctionType, FunctionConstraint) ->
+ Conj = conjunction(FunctionConstraint),
+ tree(constrained_function_type,
+ #constrained_function_type{body = FunctionType,
+ argument = Conj}).
+
+revert_constrained_function_type(Node) ->
+ Pos = get_pos(Node),
+ FunctionType = constrained_function_type_body(Node),
+ FunctionConstraint =
+ conjunction_body(constrained_function_type_argument(Node)),
+ {type, Pos, bounded_fun, [FunctionType, FunctionConstraint]}.
+
+
+%% =====================================================================
+%% @doc Returns the function type subtree of a
+%% `constrained_function_type' node.
+%%
+%% @see constrained_function_type/2
+
+-spec constrained_function_type_body(syntaxTree()) -> syntaxTree().
+
+constrained_function_type_body(Node) ->
+ case unwrap(Node) of
+ {type, _, bounded_fun, [FunctionType, _]} ->
+ FunctionType;
+ Node1 ->
+ (data(Node1))#constrained_function_type.body
+ end.
+
+%% =====================================================================
+%% @doc Returns the function constraint subtree of a
+%% `constrained_function_type' node.
+%%
+%% @see constrained_function_type/2
+
+-spec constrained_function_type_argument(syntaxTree()) -> syntaxTree().
+
+constrained_function_type_argument(Node) ->
+ case unwrap(Node) of
+ {type, _, bounded_fun, [_, FunctionConstraint]} ->
+ conjunction(FunctionConstraint);
+ Node1 ->
+ (data(Node1))#constrained_function_type.argument
+ end.
+
+
+%% =====================================================================
+%% @equiv function_type(any_arity, Type)
+
+function_type(Type) ->
+ function_type(any_arity, Type).
+
+%% =====================================================================
+%% @doc Creates an abstract function type. If `Arguments' is
+%% `[T1, ..., Tn]', then if it occurs within a function
+%% specification, the result represents
+%% "<code>(<em>T1</em>, ...<em>Tn</em>) -> <em>Return</em></code>"; otherwise
+%% it represents
+%% "<code>fun((<em>T1</em>, ...<em>Tn</em>) -> <em>Return</em>)</code>".
+%% If `Arguments' is `any_arity', it represents
+%% "<code>fun((...) -> <em>Return</em>)</code>".
+%%
+%% Note that the `erl_parse' representation is identical for
+%% "<code><em>FunctionType</em></code>" and
+%% "<code>fun(<em>FunctionType</em>)</code>".
+%%
+%% @see function_type_arguments/1
+%% @see function_type_return/1
+
+-record(function_type, {arguments :: any_arity | [syntaxTree()],
+ return :: syntaxTree()}).
+
+%% type(Node) = function_type
+%% data(Node) = #function_type{arguments :: any | Arguments,
+%% return :: Type}
+%%
+%% Arguments = [syntaxTree()]
+%% Type = syntaxTree()
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, 'fun', [{type, Pos, product, Arguments}, Type]}
+%% {type, Pos, 'fun', [{type, Pos, any}, Type]}
+%%
+%% Arguments = [erl_parse()]
+%% Type = erl_parse()
+
+-spec function_type('any_arity' | syntaxTree(), syntaxTree()) -> syntaxTree().
+
+function_type(Arguments, Return) ->
+ tree(function_type,
+ #function_type{arguments = Arguments, return = Return}).
+
+revert_function_type(Node) ->
+ Pos = get_pos(Node),
+ Type = function_type_return(Node),
+ case function_type_arguments(Node) of
+ any_arity ->
+ {type, Pos, 'fun', [{type, Pos, any}, Type]};
+ Arguments ->
+ {type, Pos, 'fun', [{type, Pos, product, Arguments}, Type]}
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the argument types subtrees of a `function_type' node.
+%% If `Node' represents "<code>fun((...) -> <em>Return</em>)</code>",
+%% `any_arity' is returned; otherwise, if `Node' represents
+%% "<code>(<em>T1</em>, ...<em>Tn</em>) -> <em>Return</em></code>" or
+%% "<code>fun((<em>T1</em>, ...<em>Tn</em>) -> <em>Return</em>)</code>",
+%% `[T1, ..., Tn]' is returned.
+
+%%
+%% @see function_type/1
+%% @see function_type/2
+
+-spec function_type_arguments(syntaxTree()) -> any_arity | [syntaxTree()].
+
+function_type_arguments(Node) ->
+ case unwrap(Node) of
+ {type, _, 'fun', [{type, _, any}, _]} ->
+ any_arity;
+ {type, _, 'fun', [{type, _, product, Arguments}, _]} ->
+ Arguments;
+ Node1 ->
+ (data(Node1))#function_type.arguments
+ end.
+
+%% =====================================================================
+%% @doc Returns the return type subtrees of a `function_type' node.
+%%
+%% @see function_type/1
+%% @see function_type/2
+
+-spec function_type_return(syntaxTree()) -> syntaxTree().
+
+function_type_return(Node) ->
+ case unwrap(Node) of
+ {type, _, 'fun', [_, Type]} ->
+ Type;
+ Node1 ->
+ (data(Node1))#function_type.return
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract (subtype) constraint. The result represents
+%% "<code><em>Name</em> :: <em>Type</em></code>".
+%%
+%% @see constraint_argument/1
+%% @see constraint_body/1
+
+-record(constraint, {name :: syntaxTree(),
+ types :: [syntaxTree()]}).
+
+%% type(Node) = constraint
+%% data(Node) = #constraint{name :: Name,
+%% types :: [Type]}
+%%
+%% Name = syntaxTree()
+%% Type = syntaxTree()
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, constraint, [Name, [Var, Type]]}
+%%
+%% Name = {atom, Pos, is_subtype}
+%% Var = erl_parse()
+%% Type = erl_parse()
+
+-spec constraint(syntaxTree(), [syntaxTree()]) -> syntaxTree().
+
+constraint(Name, Types) ->
+ tree(constraint,
+ #constraint{name = Name, types = Types}).
+
+revert_constraint(Node) ->
+ Pos = get_pos(Node),
+ Name = constraint_argument(Node),
+ Types = constraint_body(Node),
+ {type, Pos, constraint, [Name, Types]}.
+
+
+%% =====================================================================
+%% @doc Returns the name subtree of a `constraint' node.
+%%
+%% @see constraint/2
+
+-spec constraint_argument(syntaxTree()) -> syntaxTree().
+
+constraint_argument(Node) ->
+ case unwrap(Node) of
+ {type, _, constraint, [Name, _]} ->
+ Name;
+ Node1 ->
+ (data(Node1))#constraint.name
+ end.
+
+%% =====================================================================
+%% @doc Returns the type subtree of a `constraint' node.
+%%
+%% @see constraint/2
+
+-spec constraint_body(syntaxTree()) -> [syntaxTree()].
+
+constraint_body(Node) ->
+ case unwrap(Node) of
+ {type, _, constraint, [_, Types]} ->
+ Types;
+ Node1 ->
+ (data(Node1))#constraint.types
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract map type assoc field. The result represents
+%% "<code><em>Name</em> => <em>Value</em></code>".
+%%
+%% @see map_type_assoc_name/1
+%% @see map_type_assoc_value/1
+%% @see map_type/1
+
+-record(map_type_assoc, {name :: syntaxTree(), value :: syntaxTree()}).
+
+%% `erl_parse' representation:
+%%
+%% {type, Pos, map_field_assoc, [Name, Value]}
+
+-spec map_type_assoc(syntaxTree(), syntaxTree()) -> syntaxTree().
+
+map_type_assoc(Name, Value) ->
+ tree(map_type_assoc, #map_type_assoc{name = Name, value = Value}).
+
+revert_map_type_assoc(Node) ->
+ Pos = get_pos(Node),
+ Name = map_type_assoc_name(Node),
+ Value = map_type_assoc_value(Node),
+ {type, Pos, map_type_assoc, [Name, Value]}.
+
+
+%% =====================================================================
+%% @doc Returns the name subtree of a `map_type_assoc' node.
+%%
+%% @see map_type_assoc/2
+
+-spec map_type_assoc_name(syntaxTree()) -> syntaxTree().
+
+map_type_assoc_name(Node) ->
+ case Node of
+ {type, _, map_field_assoc, [Name, _]} ->
+ Name;
+ _ ->
+ (data(Node))#map_type_assoc.name
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the value subtree of a `map_type_assoc' node.
+%%
+%% @see map_type_assoc/2
+
+-spec map_type_assoc_value(syntaxTree()) -> syntaxTree().
+
+map_type_assoc_value(Node) ->
+ case Node of
+ {type, _, map_field_assoc, [_, Value]} ->
+ Value;
+ _ ->
+ (data(Node))#map_type_assoc.value
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract map type exact field. The result represents
+%% "<code><em>Name</em> := <em>Value</em></code>".
+%%
+%% @see map_type_exact_name/1
+%% @see map_type_exact_value/1
+%% @see map_type/1
+
+-record(map_type_exact, {name :: syntaxTree(), value :: syntaxTree()}).
+
+%% `erl_parse' representation:
+%%
+%% {type, Pos, map_field_exact, [Name, Value]}
+
+-spec map_type_exact(syntaxTree(), syntaxTree()) -> syntaxTree().
+
+map_type_exact(Name, Value) ->
+ tree(map_type_exact, #map_type_exact{name = Name, value = Value}).
+
+revert_map_type_exact(Node) ->
+ Pos = get_pos(Node),
+ Name = map_type_exact_name(Node),
+ Value = map_type_exact_value(Node),
+ {type, Pos, map_type_exact, [Name, Value]}.
+
+
+%% =====================================================================
+%% @doc Returns the name subtree of a `map_type_exact' node.
+%%
+%% @see map_type_exact/2
+
+-spec map_type_exact_name(syntaxTree()) -> syntaxTree().
+
+map_type_exact_name(Node) ->
+ case Node of
+ {type, _, map_field_exact, [Name, _]} ->
+ Name;
+ _ ->
+ (data(Node))#map_type_exact.name
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the value subtree of a `map_type_exact' node.
+%%
+%% @see map_type_exact/2
+
+-spec map_type_exact_value(syntaxTree()) -> syntaxTree().
+
+map_type_exact_value(Node) ->
+ case Node of
+ {type, _, map_field_exact, [_, Value]} ->
+ Value;
+ _ ->
+ (data(Node))#map_type_exact.value
+ end.
+
+
+%% =====================================================================
+%% @equiv map_type(any_size)
+
+map_type() ->
+ map_type(any_size).
+
+%% =====================================================================
+%% @doc Creates an abstract type map. If `Fields' is
+%% `[F1, ..., Fn]', the result represents
+%% "<code>#{<em>F1</em>, ..., <em>Fn</em>}</code>";
+%% otherwise, if `Fields' is `any_size', it represents
+%% "<code>map()</code>".
+%%
+%% @see map_type_fields/1
+
+%% type(Node) = map_type
+%% data(Node) = Fields
+%%
+%% Fields = any_size | [syntaxTree()]
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, map, [Field]}
+%% {type, Pos, map, any}
+%%
+%% Field = erl_parse()
+
+-spec map_type('any_size' | [syntaxTree()]) -> syntaxTree().
+
+map_type(Fields) ->
+ tree(map_type, Fields).
+
+revert_map_type(Node) ->
+ Pos = get_pos(Node),
+ {type, Pos, map, map_type_fields(Node)}.
+
+
+%% =====================================================================
+%% @doc Returns the list of field subtrees of a `map_type' node.
+%% If `Node' represents "<code>map()</code>", `any_size' is returned;
+%% otherwise, if `Node' represents
+%% "<code>#{<em>F1</em>, ..., <em>Fn</em>}</code>",
+%% `[F1, ..., Fn]' is returned.
+%%
+%% @see map_type/0
+%% @see map_type/1
+
+-spec map_type_fields(syntaxTree()) -> 'any_size' | [syntaxTree()].
+
+map_type_fields(Node) ->
+ case unwrap(Node) of
+ {type, _, map, Fields} when is_list(Fields) ->
+ Fields;
+ {type, _, map, any} ->
+ any_size;
+ Node1 ->
+ data(Node1)
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract range type. The result represents
+%% "<code><em>Low</em> .. <em>High</em></code>".
+%%
+%% @see integer_range_type_low/1
+%% @see integer_range_type_high/1
+
+-record(integer_range_type, {low :: syntaxTree(),
+ high :: syntaxTree()}).
+
+%% type(Node) = integer_range_type
+%% data(Node) = #integer_range_type{low :: Low, high :: High}
+%%
+%% Low = syntaxTree()
+%% High = syntaxTree()
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, range, [Low, High]}
+%%
+%% Low = erl_parse()
+%% High = erl_parse()
+
+-spec integer_range_type(syntaxTree(), syntaxTree()) -> syntaxTree().
+
+integer_range_type(Low, High) ->
+ tree(integer_range_type, #integer_range_type{low = Low, high = High}).
+
+revert_integer_range_type(Node) ->
+ Pos = get_pos(Node),
+ Low = integer_range_type_low(Node),
+ High = integer_range_type_high(Node),
+ {type, Pos, range, [Low, High]}.
+
+
+%% =====================================================================
+%% @doc Returns the low limit of an `integer_range_type' node.
+%%
+%% @see integer_range_type/2
+
+-spec integer_range_type_low(syntaxTree()) -> syntaxTree().
+
+integer_range_type_low(Node) ->
+ case unwrap(Node) of
+ {type, _, range, [Low, _]} ->
+ Low;
+ Node1 ->
+ (data(Node1))#integer_range_type.low
+ end.
+
+%% =====================================================================
+%% @doc Returns the high limit of an `integer_range_type' node.
+%%
+%% @see integer_range_type/2
+
+-spec integer_range_type_high(syntaxTree()) -> syntaxTree().
+
+integer_range_type_high(Node) ->
+ case unwrap(Node) of
+ {type, _, range, [_, High]} ->
+ High;
+ Node1 ->
+ (data(Node1))#integer_range_type.high
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract record type. If `Fields' is
+%% `[F1, ..., Fn]', the result represents
+%% "<code>#<em>Name</em>{<em>F1</em>, ..., <em>Fn</em>}</code>".
+%%
+%% @see record_type_name/1
+%% @see record_type_fields/1
+
+-record(record_type, {name :: syntaxTree(),
+ fields :: [syntaxTree()]}).
+
+%% type(Node) = record_type
+%% data(Node) = #record_type{name = Name, fields = Fields}
+%%
+%% Name = syntaxTree()
+%% Fields = [syntaxTree()]
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, record, [Name|Fields]}
+%%
+%% Name = erl_parse()
+%% Fields = [erl_parse()]
+
+-spec record_type(syntaxTree(), [syntaxTree()]) -> syntaxTree().
+
+record_type(Name, Fields) ->
+ tree(record_type, #record_type{name = Name, fields = Fields}).
+
+revert_record_type(Node) ->
+ Pos = get_pos(Node),
+ Name = record_type_name(Node),
+ Fields = record_type_fields(Node),
+ {type, Pos, record, [Name | Fields]}.
+
+
+%% =====================================================================
+%% @doc Returns the name subtree of a `record_type' node.
+%%
+%% @see record_type/2
+
+-spec record_type_name(syntaxTree()) -> syntaxTree().
+
+record_type_name(Node) ->
+ case unwrap(Node) of
+ {type, _, record, [Name|_]} ->
+ Name;
+ Node1 ->
+ (data(Node1))#record_type.name
+ end.
+
+%% =====================================================================
+%% @doc Returns the fields subtree of a `record_type' node.
+%%
+%% @see record_type/2
+
+-spec record_type_fields(syntaxTree()) -> [syntaxTree()].
+
+record_type_fields(Node) ->
+ case unwrap(Node) of
+ {type, _, record, [_|Fields]} ->
+ Fields;
+ Node1 ->
+ (data(Node1))#record_type.fields
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract record type field. The result represents
+%% "<code><em>Name</em> :: <em>Type</em></code>".
+%%
+%% @see record_type_field_name/1
+%% @see record_type_field_type/1
+
+-record(record_type_field, {name :: syntaxTree(),
+ type :: syntaxTree()}).
+
+%% type(Node) = record_type_field
+%% data(Node) = #record_type_field{name = Name, type = Type}
+%%
+%% Name = syntaxTree()
+%% Type = syntaxTree()
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, field_type, [Name, Type]}
+%%
+%% Name = erl_parse()
+%% Type = erl_parse()
+
+-spec record_type_field(syntaxTree(), syntaxTree()) -> syntaxTree().
+
+record_type_field(Name, Type) ->
+ tree(record_type_field, #record_type_field{name = Name, type = Type}).
+
+revert_record_type_field(Node) ->
+ Pos = get_pos(Node),
+ Name = record_type_field_name(Node),
+ Type = record_type_field_type(Node),
+ {type, Pos, field_type, [Name, Type]}.
+
+
+%% =====================================================================
+%% @doc Returns the name subtree of a `record_type_field' node.
+%%
+%% @see record_type_field/2
+
+-spec record_type_field_name(syntaxTree()) -> syntaxTree().
+
+record_type_field_name(Node) ->
+ case unwrap(Node) of
+ {type, _, field_type, [Name, _]} ->
+ Name;
+ Node1 ->
+ (data(Node1))#record_type_field.name
+ end.
+
+%% =====================================================================
+%% @doc Returns the type subtree of a `record_type_field' node.
+%%
+%% @see record_type_field/2
+
+-spec record_type_field_type(syntaxTree()) -> syntaxTree().
+
+record_type_field_type(Node) ->
+ case unwrap(Node) of
+ {type, _, field_type, [_, Type]} ->
+ Type;
+ Node1 ->
+ (data(Node1))#record_type_field.type
+ end.
+
+
+%% =====================================================================
+%% @equiv tuple_type(any_size)
+
+tuple_type() ->
+ tuple_type(any_size).
+
+%% =====================================================================
+%% @doc Creates an abstract type tuple. If `Elements' is
+%% `[T1, ..., Tn]', the result represents
+%% "<code>{<em>T1</em>, ..., <em>Tn</em>}</code>";
+%% otherwise, if `Elements' is `any_size', it represents
+%% "<code>tuple()</code>".
+%%
+%% @see tuple_type_elements/1
+
+%% type(Node) = tuple_type
+%% data(Node) = Elements
+%%
+%% Elements = any_size | [syntaxTree()]
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, tuple, [Element]}
+%% {type, Pos, tuple, any}
+%%
+%% Element = erl_parse()
+
+-spec tuple_type(any_size | [syntaxTree()]) -> syntaxTree().
+
+tuple_type(Elements) ->
+ tree(tuple_type, Elements).
+
+revert_tuple_type(Node) ->
+ Pos = get_pos(Node),
+ {type, Pos, tuple, tuple_type_elements(Node)}.
+
+
+%% =====================================================================
+%% @doc Returns the list of type element subtrees of a `tuple_type' node.
+%% If `Node' represents "<code>tuple()</code>", `any_size' is returned;
+%% otherwise, if `Node' represents
+%% "<code>{<em>T1</em>, ..., <em>Tn</em>}</code>",
+%% `[T1, ..., Tn]' is returned.
+%%
+%% @see tuple_type/0
+%% @see tuple_type/1
+
+-spec tuple_type_elements(syntaxTree()) -> 'any_size' | [syntaxTree()].
+
+tuple_type_elements(Node) ->
+ case unwrap(Node) of
+ {type, _, tuple, Elements} when is_list(Elements) ->
+ Elements;
+ {type, _, tuple, any} ->
+ any_size;
+ Node1 ->
+ data(Node1)
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract type union. If `Types' is
+%% `[T1, ..., Tn]', the result represents
+%% "<code><em>T1</em> | ... | <em>Tn</em></code>".
+%%
+%% @see type_union_types/1
+
+%% type(Node) = type_union
+%% data(Node) = Types
+%%
+%% Types = [syntaxTree()]
+%%
+%% `erl_parse' representation:
+%%
+%% {type, Pos, union, Elements}
+%%
+%% Elements = [erl_parse()]
+
+-spec type_union([syntaxTree()]) -> syntaxTree().
+
+type_union(Types) ->
+ tree(type_union, Types).
+
+revert_type_union(Node) ->
+ Pos = get_pos(Node),
+ {type, Pos, union, type_union_types(Node)}.
+
+
+%% =====================================================================
+%% @doc Returns the list of type subtrees of a `type_union' node.
+%%
+%% @see type_union/1
+
+-spec type_union_types(syntaxTree()) -> [syntaxTree()].
+
+type_union_types(Node) ->
+ case unwrap(Node) of
+ {type, _, union, Types} when is_list(Types) ->
+ Types;
+ Node1 ->
+ data(Node1)
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract user type. If `Arguments' is
+%% `[T1, ..., Tn]', the result represents
+%% "<code><em>TypeName</em>(<em>T1</em>, ...<em>Tn</em>)</code>".
+%%
+%% @see type_application/2
+%% @see user_type_application_name/1
+%% @see user_type_application_arguments/1
+
+-record(user_type_application, {type_name :: syntaxTree(),
+ arguments :: [syntaxTree()]}).
+
+%% type(Node) = user_type_application
+%% data(Node) = #user_type_application{type_name :: TypeName,
+%% arguments :: Arguments}
+%%
+%% TypeName = syntaxTree()
+%% Arguments = [syntaxTree()]
+%%
+%% `erl_parse' representation:
+%%
+%% {user_type, Pos, Name, Arguments}
+%%
+%% Name = erl_parse()
+%% Arguments = [Type]
+%% Type = erl_parse()
+
+-spec user_type_application(syntaxTree(), [syntaxTree()]) -> syntaxTree().
+
+user_type_application(TypeName, Arguments) ->
+ tree(user_type_application,
+ #user_type_application{type_name = TypeName, arguments = Arguments}).
+
+revert_user_type_application(Node) ->
+ Pos = get_pos(Node),
+ TypeName = user_type_application_name(Node),
+ Arguments = user_type_application_arguments(Node),
+ {user_type, Pos, atom_value(TypeName), Arguments}.
+
+
+%% =====================================================================
+%% @doc Returns the type name subtree of a `user_type_application' node.
+%%
+%% @see user_type_application/2
+
+-spec user_type_application_name(syntaxTree()) -> syntaxTree().
+
+user_type_application_name(Node) ->
+ case unwrap(Node) of
+ {user_type, Pos, Name, _} ->
+ set_pos(atom(Name), Pos);
+ Node1 ->
+ (data(Node1))#user_type_application.type_name
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the arguments subtrees of a `user_type_application' node.
+%%
+%% @see user_type_application/2
+
+-spec user_type_application_arguments(syntaxTree()) -> [syntaxTree()].
+
+user_type_application_arguments(Node) ->
+ case unwrap(Node) of
+ {user_type, _, _, Arguments} ->
+ Arguments;
+ Node1 ->
+ (data(Node1))#user_type_application.arguments
+ end.
+
+
+%% =====================================================================
+%% @doc Creates an abstract typed record field specification. The
+%% result represents "<code><em>Field</em> :: <em>Type</em></code>".
+%%
+%% @see typed_record_field_body/1
+%% @see typed_record_field_type/1
+
+-record(typed_record_field, {body :: syntaxTree(),
+ type :: syntaxTree()}).
+
+%% type(Node) = typed_record_field
+%% data(Node) = #typed_record_field{body :: Field
+%% type = Type}
+%%
+%% Field = syntaxTree()
+%% Type = syntaxTree()
+
+-spec typed_record_field(syntaxTree(), syntaxTree()) -> syntaxTree().
+
+typed_record_field(Field, Type) ->
+ tree(typed_record_field,
+ #typed_record_field{body = Field, type = Type}).
+
+
+%% =====================================================================
+%% @doc Returns the field subtree of a `typed_record_field' node.
+%%
+%% @see typed_record_field/2
+
+-spec typed_record_field_body(syntaxTree()) -> syntaxTree().
+
+typed_record_field_body(Node) ->
+ (data(Node))#typed_record_field.body.
+
+
+%% =====================================================================
+%% @doc Returns the type subtree of a `typed_record_field' node.
+%%
+%% @see typed_record_field/2
+
+-spec typed_record_field_type(syntaxTree()) -> syntaxTree().
+
+typed_record_field_type(Node) ->
+ (data(Node))#typed_record_field.type.
+
%% =====================================================================
%% @doc Creates an abstract list comprehension. If `Body' is
@@ -6168,6 +7418,8 @@ revert(Node) ->
revert_root(Node) ->
case type(Node) of
+ annotated_type ->
+ revert_annotated_type(Node);
application ->
revert_application(Node);
atom ->
@@ -6182,6 +7434,8 @@ revert_root(Node) ->
revert_binary_field(Node);
binary_generator ->
revert_binary_generator(Node);
+ bitstring_type ->
+ revert_bitstring_type(Node);
block_expr ->
revert_block_expr(Node);
case_expr ->
@@ -6194,6 +7448,10 @@ revert_root(Node) ->
revert_clause(Node);
cond_expr ->
revert_cond_expr(Node);
+ constrained_function_type ->
+ revert_constrained_function_type(Node);
+ constraint ->
+ revert_constraint(Node);
eof_marker ->
revert_eof_marker(Node);
error_marker ->
@@ -6202,8 +7460,12 @@ revert_root(Node) ->
revert_float(Node);
fun_expr ->
revert_fun_expr(Node);
+ fun_type ->
+ revert_fun_type(Node);
function ->
revert_function(Node);
+ function_type ->
+ revert_function_type(Node);
generator ->
revert_generator(Node);
if_expr ->
@@ -6214,6 +7476,8 @@ revert_root(Node) ->
revert_infix_expr(Node);
integer ->
revert_integer(Node);
+ integer_range_type ->
+ revert_integer_range_type(Node);
list ->
revert_list(Node);
list_comp ->
@@ -6224,6 +7488,12 @@ revert_root(Node) ->
revert_map_field_assoc(Node);
map_field_exact ->
revert_map_field_exact(Node);
+ map_type ->
+ revert_map_type(Node);
+ map_type_assoc ->
+ revert_map_type_assoc(Node);
+ map_type_exact ->
+ revert_map_type_exact(Node);
match_expr ->
revert_match_expr(Node);
module_qualifier ->
@@ -6244,14 +7514,26 @@ revert_root(Node) ->
revert_record_expr(Node);
record_index_expr ->
revert_record_index_expr(Node);
+ record_type ->
+ revert_record_type(Node);
+ record_type_field ->
+ revert_record_type_field(Node);
+ type_application ->
+ revert_type_application(Node);
+ type_union ->
+ revert_type_union(Node);
string ->
revert_string(Node);
try_expr ->
revert_try_expr(Node);
tuple ->
revert_tuple(Node);
+ tuple_type ->
+ revert_tuple_type(Node);
underscore ->
revert_underscore(Node);
+ user_type_application ->
+ revert_user_type_application(Node);
variable ->
revert_variable(Node);
warning_marker ->
@@ -6379,6 +7661,9 @@ subtrees(T) ->
[];
false ->
case type(T) of
+ annotated_type ->
+ [[annotated_type_name(T)],
+ [annotated_type_body(T)]];
application ->
[[application_operator(T)],
application_arguments(T)];
@@ -6407,6 +7692,9 @@ subtrees(T) ->
binary_generator ->
[[binary_generator_pattern(T)],
[binary_generator_body(T)]];
+ bitstring_type ->
+ [[bitstring_type_m(T)],
+ [bitstring_type_n(T)]];
block_expr ->
[block_expr_body(T)];
case_expr ->
@@ -6429,14 +7717,30 @@ subtrees(T) ->
[cond_expr_clauses(T)];
conjunction ->
[conjunction_body(T)];
+ constrained_function_type ->
+ C = constrained_function_type_argument(T),
+ [[constrained_function_type_body(T)],
+ conjunction_body(C)];
+ constraint ->
+ [[constraint_argument(T)],
+ constraint_body(T)];
disjunction ->
[disjunction_body(T)];
form_list ->
[form_list_elements(T)];
fun_expr ->
[fun_expr_clauses(T)];
+ fun_type ->
+ [];
function ->
[[function_name(T)], function_clauses(T)];
+ function_type ->
+ case function_type_arguments(T) of
+ any_arity ->
+ [[function_type_return(T)]];
+ As ->
+ [As,[function_type_return(T)]]
+ end;
generator ->
[[generator_pattern(T)], [generator_body(T)]];
if_expr ->
@@ -6447,6 +7751,9 @@ subtrees(T) ->
[[infix_expr_left(T)],
[infix_expr_operator(T)],
[infix_expr_right(T)]];
+ integer_range_type ->
+ [[integer_range_type_low(T)],
+ [integer_range_type_high(T)]];
list ->
case list_suffix(T) of
none ->
@@ -6476,6 +7783,14 @@ subtrees(T) ->
map_field_exact ->
[[map_field_exact_name(T)],
[map_field_exact_value(T)]];
+ map_type ->
+ [map_type_fields(T)];
+ map_type_assoc ->
+ [[map_type_assoc_name(T)],
+ [map_type_assoc_value(T)]];
+ map_type_exact ->
+ [[map_type_exact_name(T)],
+ [map_type_exact_value(T)]];
match_expr ->
[[match_expr_pattern(T)],
[match_expr_body(T)]];
@@ -6523,6 +7838,12 @@ subtrees(T) ->
record_index_expr ->
[[record_index_expr_type(T)],
[record_index_expr_field(T)]];
+ record_type ->
+ [[record_type_name(T)],
+ record_type_fields(T)];
+ record_type_field ->
+ [[record_type_field_name(T)],
+ [record_type_field_type(T)]];
size_qualifier ->
[[size_qualifier_body(T)],
[size_qualifier_argument(T)]];
@@ -6532,7 +7853,20 @@ subtrees(T) ->
try_expr_handlers(T),
try_expr_after(T)];
tuple ->
- [tuple_elements(T)]
+ [tuple_elements(T)];
+ tuple_type ->
+ [tuple_type_elements(T)];
+ type_application ->
+ [[type_application_name(T)],
+ type_application_arguments(T)];
+ type_union ->
+ [type_union_types(T)];
+ typed_record_field ->
+ [[typed_record_field_body(T)],
+ [typed_record_field_type(T)]];
+ user_type_application ->
+ [[user_type_application_name(T)],
+ user_type_application_arguments(T)]
end
end.
@@ -6576,6 +7910,7 @@ update_tree(Node, Groups) ->
-spec make_tree(atom(), [[syntaxTree()]]) -> syntaxTree().
+make_tree(annotated_type, [[N], [T]]) -> annotated_type(N, T);
make_tree(application, [[F], A]) -> application(F, A);
make_tree(arity_qualifier, [[N], [A]]) -> arity_qualifier(N, A);
make_tree(attribute, [[N]]) -> attribute(N);
@@ -6585,6 +7920,7 @@ make_tree(binary_comp, [[T], B]) -> binary_comp(T, B);
make_tree(binary_field, [[B]]) -> binary_field(B);
make_tree(binary_field, [[B], Ts]) -> binary_field(B, Ts);
make_tree(binary_generator, [[P], [E]]) -> binary_generator(P, E);
+make_tree(bitstring_type, [[M], [N]]) -> bitstring_type(M, N);
make_tree(block_expr, [B]) -> block_expr(B);
make_tree(case_expr, [[A], C]) -> case_expr(A, C);
make_tree(catch_expr, [[B]]) -> catch_expr(B);
@@ -6593,14 +7929,20 @@ make_tree(clause, [P, B]) -> clause(P, none, B);
make_tree(clause, [P, [G], B]) -> clause(P, G, B);
make_tree(cond_expr, [C]) -> cond_expr(C);
make_tree(conjunction, [E]) -> conjunction(E);
+make_tree(constrained_function_type, [[F],C]) ->
+ constrained_function_type(F, C);
+make_tree(constraint, [[N], Ts]) -> constraint(N, Ts);
make_tree(disjunction, [E]) -> disjunction(E);
make_tree(form_list, [E]) -> form_list(E);
make_tree(fun_expr, [C]) -> fun_expr(C);
make_tree(function, [[N], C]) -> function(N, C);
+make_tree(function_type, [[T]]) -> function_type(T);
+make_tree(function_type, [A,[T]]) -> function_type(A, T);
make_tree(generator, [[P], [E]]) -> generator(P, E);
make_tree(if_expr, [C]) -> if_expr(C);
make_tree(implicit_fun, [[N]]) -> implicit_fun(N);
make_tree(infix_expr, [[L], [F], [R]]) -> infix_expr(L, F, R);
+make_tree(integer_range_type, [[L],[H]]) -> integer_range_type(L, H);
make_tree(list, [P]) -> list(P);
make_tree(list, [P, [S]]) -> list(P, S);
make_tree(list_comp, [[T], B]) -> list_comp(T, B);
@@ -6610,6 +7952,9 @@ make_tree(map_expr, [Fs]) -> map_expr(Fs);
make_tree(map_expr, [[E], Fs]) -> map_expr(E, Fs);
make_tree(map_field_assoc, [[K], [V]]) -> map_field_assoc(K, V);
make_tree(map_field_exact, [[K], [V]]) -> map_field_exact(K, V);
+make_tree(map_type, [Fs]) -> map_type(Fs);
+make_tree(map_type_assoc, [[N],[V]]) -> map_type_assoc(N, V);
+make_tree(map_type_exact, [[N],[V]]) -> map_type_exact(N, V);
make_tree(match_expr, [[P], [E]]) -> match_expr(P, E);
make_tree(named_fun_expr, [[N], C]) -> named_fun_expr(N, C);
make_tree(module_qualifier, [[M], [N]]) -> module_qualifier(M, N);
@@ -6625,9 +7970,16 @@ make_tree(record_field, [[N]]) -> record_field(N);
make_tree(record_field, [[N], [E]]) -> record_field(N, E);
make_tree(record_index_expr, [[T], [F]]) ->
record_index_expr(T, F);
+make_tree(record_type, [[N],Fs]) -> record_type(N, Fs);
+make_tree(record_type_field, [[N],[T]]) -> record_type_field(N, T);
make_tree(size_qualifier, [[N], [A]]) -> size_qualifier(N, A);
make_tree(try_expr, [B, C, H, A]) -> try_expr(B, C, H, A);
-make_tree(tuple, [E]) -> tuple(E).
+make_tree(tuple, [E]) -> tuple(E);
+make_tree(tuple_type, [Es]) -> tuple_type(Es);
+make_tree(type_application, [[N], Ts]) -> type_application(N, Ts);
+make_tree(type_union, [Es]) -> type_union(Es);
+make_tree(typed_record_field, [[F],[T]]) -> typed_record_field(F, T);
+make_tree(user_type_application, [[N], Ts]) -> user_type_application(N, Ts).
%% =====================================================================
@@ -6954,6 +8306,7 @@ fold_variable_names(Vs) ->
unfold_variable_names(Vs, Pos) ->
[set_pos(variable(V), Pos) || V <- Vs].
+
%% Support functions for transforming lists of record field definitions.
%%
%% There is no unique representation for field definitions in the
@@ -6968,6 +8321,16 @@ fold_record_fields(Fs) ->
[fold_record_field(F) || F <- Fs].
fold_record_field(F) ->
+ case type(F) of
+ typed_record_field ->
+ Field = fold_record_field_1(typed_record_field_body(F)),
+ Type = typed_record_field_type(F),
+ {typed_record_field, Field, Type};
+ record_field ->
+ fold_record_field_1(F)
+ end.
+
+fold_record_field_1(F) ->
Pos = get_pos(F),
Name = record_field_name(F),
case record_field_value(F) of
@@ -6980,10 +8343,11 @@ fold_record_field(F) ->
unfold_record_fields(Fs) ->
[unfold_record_field(F) || F <- Fs].
-unfold_record_field({typed_record_field, Field, _Type}) ->
- unfold_record_field_1(Field);
+unfold_record_field({typed_record_field, Field, Type}) ->
+ F = unfold_record_field_1(Field),
+ set_pos(typed_record_field(F, Type), get_pos(F));
unfold_record_field(Field) ->
- unfold_record_field_1(Field).
+ unfold_record_field_1(Field).
unfold_record_field_1({record_field, Pos, Name}) ->
set_pos(record_field(Name), Pos);
@@ -7010,5 +8374,4 @@ unfold_binary_field_type({Type, Size}, Pos) ->
unfold_binary_field_type(Type, Pos) ->
set_pos(atom(Type), Pos).
-
%% =====================================================================
diff --git a/lib/syntax_tools/src/erl_syntax_lib.erl b/lib/syntax_tools/src/erl_syntax_lib.erl
index 5b5b18d15b..5aecf5d774 100644
--- a/lib/syntax_tools/src/erl_syntax_lib.erl
+++ b/lib/syntax_tools/src/erl_syntax_lib.erl
@@ -36,6 +36,7 @@
analyze_import_attribute/1, analyze_module_attribute/1,
analyze_record_attribute/1, analyze_record_expr/1,
analyze_record_field/1, analyze_wild_attribute/1, annotate_bindings/1,
+ analyze_type_application/1, analyze_type_name/1,
annotate_bindings/2, fold/3, fold_subtrees/3, foldl_listlist/3,
function_name_expansions/1, is_fail_expr/1, limit/2, limit/3,
map/2, map_subtrees/2, mapfold/3, mapfold_subtrees/3,
@@ -279,7 +280,7 @@ mapfoldl(_, S, []) ->
%% =====================================================================
%% @spec variables(syntaxTree()) -> set(atom())
%%
-%% set(T) = //stdlib/sets:set(T)
+%% @type set(T) = //stdlib/sets:set(T)
%%
%% @doc Returns the names of variables occurring in a syntax tree, The
%% result is a set of variable names represented by atoms. Macro names
@@ -359,9 +360,9 @@ new_variable_name(S) ->
%% within a reasonably small range relative to the number of elements in
%% the set.
%%
-%% This function uses the module `random' to generate new
+%% This function uses the module `rand' to generate new
%% keys. The seed it uses may be initialized by calling
-%% `random:seed/0' or `random:seed/3' before this
+%% `rand:seed/1' or `rand:seed/2' before this
%% function is first called.
%%
%% @see new_variable_name/1
@@ -404,7 +405,13 @@ start_range(S) ->
%% order, but (pseudo-)randomly distributed over the range.
generate(_Key, Range) ->
- random:uniform(Range). % works well
+ _ = case rand:export_seed() of
+ undefined ->
+ rand:seed(exsplus, {753,8,73});
+ _ ->
+ ok
+ end,
+ rand:uniform(Range). % works well
%% =====================================================================
@@ -1023,14 +1030,17 @@ is_fail_expr(E) ->
%% <dt>`{records, Records}'</dt>
%% <dd><ul>
%% <li>`Records = [{atom(), Fields}]'</li>
-%% <li>`Fields = [{atom(), Default}]'</li>
+%% <li>`Fields = [{atom(), {Default, Type}}]'</li>
%% <li>`Default = none | syntaxTree()'</li>
+%% <li>`Type = none | syntaxTree()'</li>
%% </ul>
%% `Records' is a list of pairs representing the names
%% and corresponding field declarations of all record declaration
%% attributes occurring in `Forms'. For fields declared
%% without a default value, the corresponding value for
-%% `Default' is the atom `none' (cf.
+%% `Default' is the atom `none'. Similarly, for fields declared
+%% without a type, the corresponding value for `Type' is the
+%% atom `none' (cf.
%% `analyze_record_attribute/1'). We do not guarantee
%% that each record name occurs at most once in the list. The
%% order of listing is not defined.</dd>
@@ -1049,9 +1059,9 @@ is_fail_expr(E) ->
%%
%% @see analyze_wild_attribute/1
%% @see analyze_export_attribute/1
+%% @see analyze_function/1
%% @see analyze_import_attribute/1
%% @see analyze_record_attribute/1
-%% @see analyze_function/1
%% @see erl_syntax:error_marker_info/1
%% @see erl_syntax:warning_marker_info/1
@@ -1096,8 +1106,6 @@ collect_attribute(file, _, Info) ->
Info;
collect_attribute(record, {R, L}, Info) ->
finfo_add_record(R, L, Info);
-collect_attribute(spec, _, Info) ->
- Info;
collect_attribute(_, {N, V}, Info) ->
finfo_add_attribute(N, V, Info).
@@ -1108,12 +1116,15 @@ collect_attribute(_, {N, V}, Info) ->
module_imports = [] :: [atom()],
imports = [] :: [{atom(), [{atom(), arity()}]}],
attributes = [] :: [{atom(), term()}],
- records = [] :: [{atom(), [{atom(), field_default()}]}],
+ records = [] :: [{atom(), [{atom(),
+ field_default(),
+ field_type()}]}],
errors = [] :: [term()],
warnings = [] :: [term()],
functions = [] :: [{atom(), arity()}]}).
-type field_default() :: 'none' | erl_syntax:syntaxTree().
+-type field_type() :: 'none' | erl_syntax:syntaxTree().
new_finfo() ->
#forms{}.
@@ -1320,8 +1331,6 @@ analyze_attribute(file, Node) ->
analyze_file_attribute(Node);
analyze_attribute(record, Node) ->
analyze_record_attribute(Node);
-analyze_attribute(spec, _Node) ->
- spec;
analyze_attribute(_, Node) ->
%% A "wild" attribute (such as e.g. a `compile' directive).
analyze_wild_attribute(Node).
@@ -1517,6 +1526,55 @@ analyze_import_attribute(Node) ->
%% =====================================================================
+%% @spec analyze_type_name(Node::syntaxTree()) -> TypeName
+%%
+%% TypeName = atom()
+%% | {atom(), integer()}
+%% | {ModuleName, {atom(), integer()}}
+%% ModuleName = atom()
+%%
+%% @doc Returns the type name represented by a syntax tree. If
+%% `Node' represents a type name, such as
+%% "`foo/1'" or "`bloggs:fred/2'", a uniform
+%% representation of that name is returned.
+%%
+%% The evaluation throws `syntax_error' if
+%% `Node' does not represent a well-formed type name.
+
+-spec analyze_type_name(erl_syntax:syntaxTree()) -> typeName().
+
+analyze_type_name(Node) ->
+ case erl_syntax:type(Node) of
+ atom ->
+ erl_syntax:atom_value(Node);
+ arity_qualifier ->
+ A = erl_syntax:arity_qualifier_argument(Node),
+ N = erl_syntax:arity_qualifier_body(Node),
+
+ case ((erl_syntax:type(A) =:= integer)
+ and (erl_syntax:type(N) =:= atom))
+ of
+ true ->
+ append_arity(erl_syntax:integer_value(A),
+ erl_syntax:atom_value(N));
+ _ ->
+ throw(syntax_error)
+ end;
+ module_qualifier ->
+ M = erl_syntax:module_qualifier_argument(Node),
+ case erl_syntax:type(M) of
+ atom ->
+ N = erl_syntax:module_qualifier_body(Node),
+ N1 = analyze_type_name(N),
+ {erl_syntax:atom_value(M), N1};
+ _ ->
+ throw(syntax_error)
+ end;
+ _ ->
+ throw(syntax_error)
+ end.
+
+%% =====================================================================
%% @spec analyze_wild_attribute(Node::syntaxTree()) -> {atom(), term()}
%%
%% @doc Returns the name and value of a "wild" attribute. The result is
@@ -1541,6 +1599,7 @@ analyze_wild_attribute(Node) ->
atom ->
case erl_syntax:attribute_arguments(Node) of
[V] ->
+ %% Note: does not work well with macros.
case catch {ok, erl_syntax:concrete(V)} of
{ok, Val} ->
{erl_syntax:atom_value(N), Val};
@@ -1562,17 +1621,22 @@ analyze_wild_attribute(Node) ->
%% @spec analyze_record_attribute(Node::syntaxTree()) ->
%% {atom(), Fields}
%%
-%% Fields = [{atom(), none | syntaxTree()}]
+%% Fields = [{atom(), {Default, Type}}]
+%% Default = none | syntaxTree()
+%% Type = none | syntaxTree()
%%
%% @doc Returns the name and the list of fields of a record declaration
%% attribute. The result is a pair `{Name, Fields}', if
%% `Node' represents "`-record(Name, {...}).'",
%% where `Fields' is a list of pairs `{Label,
-%% Default}' for each field "`Label'" or "`Label =
-%% <em>Default</em>'" in the declaration, listed in left-to-right
+%% {Default, Type}}' for each field "`Label'", "`Label =
+%% <em>Default</em>'", "`Label :: <em>Type</em>'", or
+%% "`Label = <em>Default</em> :: <em>Type</em>'" in the declaration,
+%% listed in left-to-right
%% order. If the field has no default-value declaration, the value for
-%% `Default' will be the atom `none'. We do not
-%% guarantee that each label occurs at most one in the list.
+%% `Default' will be the atom `none'. If the field has no type declaration,
+%% the value for `Type' will be the atom `none'. We do not
+%% guarantee that each label occurs at most once in the list.
%%
%% The evaluation throws `syntax_error' if
%% `Node' does not represent a well-formed record declaration
@@ -1581,7 +1645,9 @@ analyze_wild_attribute(Node) ->
%% @see analyze_attribute/1
%% @see analyze_record_field/1
--type fields() :: [{atom(), 'none' | erl_syntax:syntaxTree()}].
+-type field() :: {atom(), {field_default(), field_type()}}.
+
+-type fields() :: [field()].
-spec analyze_record_attribute(erl_syntax:syntaxTree()) -> {atom(), fields()}.
@@ -1619,7 +1685,7 @@ analyze_record_attribute_tuple(Node) ->
%% {atom(), Info} | atom()
%%
%% Info = {atom(), [{atom(), Value}]} | {atom(), atom()} | atom()
-%% Value = none | syntaxTree()
+%% Value = syntaxTree()
%%
%% @doc Returns the record name and field name/names of a record
%% expression. If `Node' has type `record_expr',
@@ -1639,9 +1705,9 @@ analyze_record_attribute_tuple(Node) ->
%%
%% For a `record_expr' node, `Info' represents
%% the record name and the list of descriptors for the involved fields,
-%% listed in the order they appear. (See
-%% `analyze_record_field/1' for details on the field
-%% descriptors). For a `record_access' node,
+%% listed in the order they appear. A field descriptor is a pair
+%% `{Label, Value}', if `Node' represents "`Label = <em>Value</em>'".
+%% For a `record_access' node,
%% `Info' represents the record name and the field name. For a
%% `record_index_expr' node, `Info' represents the
%% record name and the name field name.
@@ -1653,7 +1719,7 @@ analyze_record_attribute_tuple(Node) ->
%% @see analyze_record_attribute/1
%% @see analyze_record_field/1
--type info() :: {atom(), [{atom(), 'none' | erl_syntax:syntaxTree()}]}
+-type info() :: {atom(), [{atom(), erl_syntax:syntaxTree()}]}
| {atom(), atom()} | atom().
-spec analyze_record_expr(erl_syntax:syntaxTree()) -> {atom(), info()} | atom().
@@ -1664,8 +1730,9 @@ analyze_record_expr(Node) ->
A = erl_syntax:record_expr_type(Node),
case erl_syntax:type(A) of
atom ->
- Fs = [analyze_record_field(F)
- || F <- erl_syntax:record_expr_fields(Node)],
+ Fs0 = [analyze_record_field(F)
+ || F <- erl_syntax:record_expr_fields(Node)],
+ Fs = [{N, D} || {N, {D, _T}} <- Fs0],
{record_expr, {erl_syntax:atom_value(A), Fs}};
_ ->
throw(syntax_error)
@@ -1707,16 +1774,19 @@ analyze_record_expr(Node) ->
end.
%% =====================================================================
-%% @spec analyze_record_field(Node::syntaxTree()) -> {atom(), Value}
+%% @spec analyze_record_field(Node::syntaxTree()) -> {atom(), {Default, Type}}
%%
-%% Value = none | syntaxTree()
+%% Default = none | syntaxTree()
+%% Type = none | syntaxTree()
%%
-%% @doc Returns the label and value-expression of a record field
-%% specifier. The result is a pair `{Label, Value}', if
-%% `Node' represents "`Label = <em>Value</em>'" or
-%% "`Label'", where in the first case, `Value' is
-%% a syntax tree, and in the second case `Value' is
-%% `none'.
+%% @doc Returns the label, value-expression, and type of a record field
+%% specifier. The result is a pair `{Label, {Default, Type}}', if
+%% `Node' represents "`Label'", "`Label = <em>Default</em>'",
+%% "`Label :: <em>Type</em>'", or
+%% "`Label = <em>Default</em> :: <em>Type</em>'".
+%% If the field has no value-expression, the value for
+%% `Default' will be the atom `none'. If the field has no type,
+%% the value for `Type' will be the atom `none'.
%%
%% The evaluation throws `syntax_error' if
%% `Node' does not represent a well-formed record field
@@ -1725,8 +1795,7 @@ analyze_record_expr(Node) ->
%% @see analyze_record_attribute/1
%% @see analyze_record_expr/1
--spec analyze_record_field(erl_syntax:syntaxTree()) ->
- {atom(), 'none' | erl_syntax:syntaxTree()}.
+-spec analyze_record_field(erl_syntax:syntaxTree()) -> field().
analyze_record_field(Node) ->
case erl_syntax:type(Node) of
@@ -1735,10 +1804,15 @@ analyze_record_field(Node) ->
case erl_syntax:type(A) of
atom ->
T = erl_syntax:record_field_value(Node),
- {erl_syntax:atom_value(A), T};
+ {erl_syntax:atom_value(A), {T, none}};
_ ->
throw(syntax_error)
end;
+ typed_record_field ->
+ F = erl_syntax:typed_record_field_body(Node),
+ {N, {V, _none}} = analyze_record_field(F),
+ T = erl_syntax:typed_record_field_type(Node),
+ {N, {V, T}};
_ ->
throw(syntax_error)
end.
@@ -1881,6 +1955,55 @@ analyze_application(Node) ->
%% =====================================================================
+%% @spec analyze_type_application(Node::syntaxTree()) -> TypeName
+%%
+%% TypeName = {atom(), integer()}
+%% | {ModuleName, {atom(), integer()}}
+%% ModuleName = atom()
+%%
+%% @doc Returns the name of a used type. The result is a
+%% representation of the name of the used pre-defined or local type `N/A',
+%% if `Node' represents a local (user) type application
+%% "`<em>N</em>(<em>T_1</em>, ..., <em>T_A</em>)'", or
+%% a representation of the name of the used remote type `M:N/A'
+%% if `Node' represents a remote user type application
+%% "`<em>M</em>:<em>N</em>(<em>T_1</em>, ..., <em>T_A</em>)'".
+%%
+%% The evaluation throws `syntax_error' if `Node' does not represent a
+%% well-formed (user) type application expression.
+%%
+%% @see analyze_type_name/1
+
+-type typeName() :: atom() | {module(), atom(), arity()} | {atom(), arity()}.
+
+-spec analyze_type_application(erl_syntax:syntaxTree()) -> typeName().
+
+analyze_type_application(Node) ->
+ case erl_syntax:type(Node) of
+ type_application ->
+ A = length(erl_syntax:type_application_arguments(Node)),
+ N = erl_syntax:type_application_name(Node),
+ case catch {ok, analyze_type_name(N)} of
+ {ok, TypeName} ->
+ append_arity(A, TypeName);
+ _ ->
+ throw(syntax_error)
+ end;
+ user_type_application ->
+ A = length(erl_syntax:user_type_application_arguments(Node)),
+ N = erl_syntax:user_type_application_name(Node),
+ case catch {ok, analyze_type_name(N)} of
+ {ok, TypeName} ->
+ append_arity(A, TypeName);
+ _ ->
+ throw(syntax_error)
+ end;
+ _ ->
+ throw(syntax_error)
+ end.
+
+
+%% =====================================================================
%% @spec function_name_expansions(Names::[Name]) -> [{ShortName, Name}]
%%
%% Name = ShortName | {atom(), Name}
diff --git a/lib/syntax_tools/src/erl_tidy.erl b/lib/syntax_tools/src/erl_tidy.erl
index db7f0939a3..5d3fc6f062 100644
--- a/lib/syntax_tools/src/erl_tidy.erl
+++ b/lib/syntax_tools/src/erl_tidy.erl
@@ -36,6 +36,11 @@
%% been reasonably well tested, but the possibility of errors remains.
%% Keep backups of your original code safely stored, until you feel
%% confident that the new, modified code can be trusted.
+%%
+%% @type syntaxTree() = erl_syntax:syntaxTree(). An abstract syntax
+%% tree. See the {@link erl_syntax} module for details.
+%%
+%% @type filename() = file:filename().
-module(erl_tidy).
@@ -79,7 +84,6 @@ dir(Dir) ->
%% =====================================================================
%% @spec dir(Directory::filename(), Options::[term()]) -> ok
-%% filename() = file:filename()
%%
%% @doc Tidies Erlang source files in a directory and its
%% subdirectories.
@@ -414,7 +418,7 @@ write_module(Tree, Name, Opts) ->
print_module(Tree, Opts) ->
Printer = proplists:get_value(printer, Opts),
- io:format(Printer(Tree, Opts)).
+ io:put_chars(Printer(Tree, Opts)).
output(FD, Printer, Tree, Opts) ->
io:put_chars(FD, Printer(Tree, Opts)),
@@ -513,7 +517,6 @@ module(Forms) ->
%% @spec module(Forms, Options::[term()]) -> syntaxTree()
%%
%% Forms = syntaxTree() | [syntaxTree()]
-%% syntaxTree() = erl_syntax:syntaxTree()
%%
%% @doc Tidies a syntax tree representation of a module
%% definition. The given `Forms' may be either a single
@@ -937,7 +940,7 @@ hidden_uses_2(Tree, Used) ->
-record(env, {file :: file:filename(),
module :: atom(),
- current :: fa(),
+ current :: fa() | 'undefined',
imports = dict:new() :: dict:dict(atom(), atom()),
context = normal :: context(),
verbosity = 1 :: 0 | 1 | 2,
@@ -949,10 +952,10 @@ hidden_uses_2(Tree, Used) ->
new_guard_tests = true :: boolean(),
old_guard_tests = false :: boolean()}).
--record(st, {varc :: non_neg_integer(),
+-record(st, {varc :: non_neg_integer() | 'undefined',
used = sets:new() :: sets:set({atom(), arity()}),
imported :: sets:set({atom(), arity()}),
- vars :: sets:set(atom()),
+ vars :: sets:set(atom()) | 'undefined',
functions :: sets:set({atom(), arity()}),
new_forms = [] :: [erl_syntax:syntaxTree()],
rename :: dict:dict(mfa(), {atom(), atom()})}).
@@ -1064,13 +1067,13 @@ visit_clause(Tree, Env, St0) ->
visit_infix_expr(Tree, #env{context = guard_test}, St0) ->
%% Detect transition from guard test to guard expression.
- visit_other(Tree, #env{context = guard_expr}, St0);
+ visit_other(Tree, #env{context = guard_expr, file = ""}, St0);
visit_infix_expr(Tree, Env, St0) ->
visit_other(Tree, Env, St0).
visit_prefix_expr(Tree, #env{context = guard_test}, St0) ->
%% Detect transition from guard test to guard expression.
- visit_other(Tree, #env{context = guard_expr}, St0);
+ visit_other(Tree, #env{context = guard_expr, file = ""}, St0);
visit_prefix_expr(Tree, Env, St0) ->
visit_other(Tree, Env, St0).
diff --git a/lib/syntax_tools/src/igor.erl b/lib/syntax_tools/src/igor.erl
index eac5af5540..943250e5cd 100644
--- a/lib/syntax_tools/src/igor.erl
+++ b/lib/syntax_tools/src/igor.erl
@@ -151,7 +151,8 @@ default_printer(Tree, Options) ->
%% @spec parse_transform(Forms::[syntaxTree()], Options::[term()]) ->
%% [syntaxTree()]
%%
-%% syntaxTree() = erl_syntax:syntaxTree()
+%% @type syntaxTree() = erl_syntax:syntaxTree(). An abstract syntax
+%% tree. See the {@link erl_syntax} module for details.
%%
%% @doc Allows Igor to work as a component of the Erlang compiler.
%% Including the term `{parse_transform, igor}' in the
@@ -212,7 +213,7 @@ merge(Name, Files) ->
%% @spec merge(Name::atom(), Files::[filename()], Options::[term()]) ->
%% [filename()]
%%
-%% filename() = file:filename()
+%% @type filename() = file:filename()
%%
%% @doc Merges source code files to a single file. `Name'
%% specifies the name of the resulting module - not the name of the
@@ -367,6 +368,7 @@ merge_files(Name, Files, Options) ->
%% @spec merge_files(Name::atom(), Sources::[Forms],
%% Files::[filename()], Options::[term()]) ->
%% {syntaxTree(), [stubDescriptor()]}
+%%
%% Forms = syntaxTree() | [syntaxTree()]
%%
%% @doc Merges source code files and syntax trees to a single syntax
@@ -1594,10 +1596,11 @@ alias_expansions_2(Modules, Table) ->
preserved :: boolean(),
no_headers :: boolean(),
notes :: notes(),
- map :: map_fun(),
+ map :: map_fun() | 'undefined',
renaming :: fun((atom()) -> map_fun()),
expand :: dict:dict({atom(), integer()},
- {atom(), {atom(), integer()}}),
+ {atom(), {atom(), integer()}})
+ | 'undefined',
redirect :: dict:dict(atom(), atom())
}).
@@ -2611,6 +2614,19 @@ get_module_info(Forms) ->
fold_record_fields(Rs) ->
[{N, [fold_record_field(F) || F <- Fs]} || {N, Fs} <- Rs].
+fold_record_field({_Name, {none, _Type}} = None) ->
+ None;
+fold_record_field({Name, {F, Type}}) ->
+ case erl_syntax:is_literal(F) of
+ true ->
+ {Name, {value, erl_syntax:concrete(F)}, Type};
+ false ->
+ %% The default value for the field is not a constant, so we
+ %% represent it by a hash value instead. (We don't want to
+ %% do this in the general case.)
+ {Name, {hash, erlang:phash(F, 16#ffffff)}, Type}
+ end;
+%% The following two clauses handle code before Erlang/OTP 19.0.
fold_record_field({_Name, none} = None) ->
None;
fold_record_field({Name, F}) ->
diff --git a/lib/syntax_tools/src/merl.erl b/lib/syntax_tools/src/merl.erl
index 690306c17b..163ce48bbc 100644
--- a/lib/syntax_tools/src/merl.erl
+++ b/lib/syntax_tools/src/merl.erl
@@ -514,15 +514,17 @@ parse_forms([]) ->
parse_2(Ts) ->
%% one or more comma-separated expressions?
%% (recall that Ts has no dot tokens if we get to this stage)
- case erl_parse:parse_exprs(Ts ++ [{dot,0}]) of
+ A = a0(),
+ case erl_parse:parse_exprs(Ts ++ [{dot,A}]) of
{ok, Exprs} -> Exprs;
{error, E} ->
- parse_3(Ts ++ [{'end',0}, {dot,0}], [E])
+ parse_3(Ts ++ [{'end',A}, {dot,A}], [E])
end.
parse_3(Ts, Es) ->
%% try-clause or clauses?
- case erl_parse:parse_exprs([{'try',0}, {atom,0,true}, {'catch',0} | Ts]) of
+ A = a0(),
+ case erl_parse:parse_exprs([{'try',A}, {atom,A,true}, {'catch',A} | Ts]) of
{ok, [{'try',_,_,_,_,_}=X]} ->
%% get the right kind of qualifiers in the clause patterns
erl_syntax:try_expr_handlers(X);
@@ -533,7 +535,8 @@ parse_3(Ts, Es) ->
parse_4(Ts, Es) ->
%% fun-clause or clauses? (`(a)' is also a pattern, but `(a,b)' isn't,
%% so fun-clauses must be tried before normal case-clauses
- case erl_parse:parse_exprs([{'fun',0} | Ts]) of
+ A = a0(),
+ case erl_parse:parse_exprs([{'fun',A} | Ts]) of
{ok, [{'fun',_,{clauses,Cs}}]} -> Cs;
{error, E} ->
parse_5(Ts, [E|Es])
@@ -541,7 +544,8 @@ parse_4(Ts, Es) ->
parse_5(Ts, Es) ->
%% case-clause or clauses?
- case erl_parse:parse_exprs([{'case',0}, {atom,0,true}, {'of',0} | Ts]) of
+ A = a0(),
+ case erl_parse:parse_exprs([{'case',A}, {atom,A,true}, {'of',A} | Ts]) of
{ok, [{'case',_,_,Cs}]} -> Cs;
{error, E} ->
%% select the best error to report
@@ -1210,7 +1214,7 @@ merge_comments(StartLine, Cs, [], Acc) ->
merge_comments(StartLine, [], [],
[erl_syntax:set_pos(
erl_syntax:comment(Indent, Text),
- StartLine + Line - 1)
+ anno(StartLine + Line - 1))
|| {Line, _, Indent, Text} <- Cs] ++ Acc);
merge_comments(StartLine, [C|Cs], [T|Ts], Acc) ->
{Line, _Col, Indent, Text} = C,
@@ -1228,3 +1232,9 @@ merge_comments(StartLine, [C|Cs], [T|Ts], Acc) ->
[erl_syntax:comment(Indent, Text)], T),
merge_comments(StartLine, Cs, [Tc|Ts], Acc)
end.
+
+a0() ->
+ anno(0).
+
+anno(Location) ->
+ erl_anno:new(Location).
diff --git a/lib/syntax_tools/src/merl_transform.erl b/lib/syntax_tools/src/merl_transform.erl
index 66b06c8137..fe58b6a122 100644
--- a/lib/syntax_tools/src/merl_transform.erl
+++ b/lib/syntax_tools/src/merl_transform.erl
@@ -68,8 +68,7 @@ case_guard([{expr,_}, {text,Text}]) ->
erl_syntax:is_literal(Text).
case_body([{expr,Expr}, {text,_Text}], T) ->
- pre_expand_case(Expr, erl_syntax:case_expr_clauses(T),
- erl_syntax:get_pos(T)).
+ pre_expand_case(Expr, erl_syntax:case_expr_clauses(T), get_location(T)).
post(T) ->
merl:switch(
@@ -79,7 +78,7 @@ post(T) ->
lists:all(fun erl_syntax:is_literal/1, [F|As])
end,
fun ([{args, As}, {function, F}]) ->
- Line = erl_syntax:get_pos(F),
+ Line = get_location(F),
[F1|As1] = lists:map(fun erl_syntax:concrete/1, [F|As]),
eval_call(Line, F1, As1, T)
end},
@@ -118,7 +117,7 @@ expand_qquote(_As, T, _StartPos) ->
expand_template(F, [Pattern | Args], T) ->
case erl_syntax:is_literal(Pattern) of
true ->
- Line = erl_syntax:get_pos(Pattern),
+ Line = get_location(Pattern),
As = [erl_syntax:concrete(Pattern)],
merl:qquote(Line, "merl:_@function(_@pattern, _@args)",
[{function, F},
@@ -260,3 +259,12 @@ is_erlang_var([C|_]) when C >= $A, C =< $Z ; C >= $À, C =< $Þ, C /= $× ->
true;
is_erlang_var(_) ->
false.
+
+get_location(T) ->
+ Pos = erl_syntax:get_pos(T),
+ case erl_anno:is_anno(Pos) of
+ true ->
+ erl_anno:location(Pos);
+ false ->
+ Pos
+ end.
diff --git a/lib/syntax_tools/src/syntax_tools.app.src b/lib/syntax_tools/src/syntax_tools.app.src
index dd4ac46055..5c6008a5f0 100644
--- a/lib/syntax_tools/src/syntax_tools.app.src
+++ b/lib/syntax_tools/src/syntax_tools.app.src
@@ -18,4 +18,4 @@
{applications, [stdlib]},
{env, []},
{runtime_dependencies,
- ["compiler-6.0","erts-6.0","kernel-3.0","stdlib-2.5"]}]}.
+ ["compiler-7.0","erts-8.0","kernel-5.0","stdlib-3.0"]}]}.
diff --git a/lib/syntax_tools/src/syntax_tools.appup.src b/lib/syntax_tools/src/syntax_tools.appup.src
index 59d591a01f..0dad228ca3 100644
--- a/lib/syntax_tools/src/syntax_tools.appup.src
+++ b/lib/syntax_tools/src/syntax_tools.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/syntax_tools/test/Makefile b/lib/syntax_tools/test/Makefile
index 569c044b1a..4ace860223 100644
--- a/lib/syntax_tools/test/Makefile
+++ b/lib/syntax_tools/test/Makefile
@@ -26,7 +26,7 @@ RELSYSDIR = $(RELEASE_PATH)/syntax_tools_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/syntax_tools/test/merl_SUITE.erl b/lib/syntax_tools/test/merl_SUITE.erl
index 125250395a..945972d405 100644
--- a/lib/syntax_tools/test/merl_SUITE.erl
+++ b/lib/syntax_tools/test/merl_SUITE.erl
@@ -16,7 +16,7 @@
%%
-module(merl_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% include the Merl header file
-include_lib("syntax_tools/include/merl.hrl").
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE.erl b/lib/syntax_tools/test/syntax_tools_SUITE.erl
index 40e00e0554..43c17e9f1f 100644
--- a/lib/syntax_tools/test/syntax_tools_SUITE.erl
+++ b/lib/syntax_tools/test/syntax_tools_SUITE.erl
@@ -18,7 +18,7 @@
%%
-module(syntax_tools_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -27,14 +27,14 @@
%% Test cases
-export([app_test/1,appup_test/1,smoke_test/1,revert/1,revert_map/1,
t_abstract_type/1,t_erl_parse_type/1,t_epp_dodger/1,
- t_comment_scan/1,t_igor/1]).
+ t_comment_scan/1,t_igor/1,t_erl_tidy/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[app_test,appup_test,smoke_test,revert,revert_map,
t_abstract_type,t_erl_parse_type,t_epp_dodger,
- t_comment_scan,t_igor].
+ t_comment_scan,t_igor,t_erl_tidy].
groups() ->
[].
@@ -61,7 +61,7 @@ appup_test(Config) when is_list(Config) ->
smoke_test(Config) when is_list(Config) ->
Dog = ?t:timetrap(?t:minutes(12)),
Wc = filename:join([code:lib_dir(),"*","src","*.erl"]),
- Fs = filelib:wildcard(Wc),
+ Fs = filelib:wildcard(Wc) ++ test_files(Config),
io:format("~p files\n", [length(Fs)]),
case p_run(fun smoke_test_file/1, Fs) of
0 -> ok;
@@ -93,7 +93,7 @@ print_error_markers(F, File) ->
revert(Config) when is_list(Config) ->
Dog = ?t:timetrap(?t:minutes(12)),
Wc = filename:join([code:lib_dir("stdlib"),"src","*.erl"]),
- Fs = filelib:wildcard(Wc),
+ Fs = filelib:wildcard(Wc) ++ test_files(Config),
Path = [filename:join(code:lib_dir(stdlib), "include"),
filename:join(code:lib_dir(kernel), "include")],
io:format("~p files\n", [length(Fs)]),
@@ -203,18 +203,25 @@ t_erl_parse_type(Config) when is_list(Config) ->
t_epp_dodger(Config) when is_list(Config) ->
DataDir = ?config(data_dir, Config),
PrivDir = ?config(priv_dir, Config),
- Filenames = ["syntax_tools_SUITE_test_module.erl",
- "syntax_tools_test.erl"],
+ Filenames = test_files(),
ok = test_epp_dodger(Filenames,DataDir,PrivDir),
ok.
t_comment_scan(Config) when is_list(Config) ->
DataDir = ?config(data_dir, Config),
- Filenames = ["syntax_tools_SUITE_test_module.erl",
- "syntax_tools_test.erl"],
+ Filenames = test_files(),
ok = test_comment_scan(Filenames,DataDir),
ok.
+test_files(Config) ->
+ DataDir = ?config(data_dir, Config),
+ [ filename:join(DataDir,Filename) || Filename <- test_files() ].
+
+test_files() ->
+ ["syntax_tools_SUITE_test_module.erl",
+ "syntax_tools_test.erl",
+ "type_specs.erl"].
+
t_igor(Config) when is_list(Config) ->
DataDir = ?config(data_dir, Config),
PrivDir = ?config(priv_dir, Config),
@@ -222,6 +229,18 @@ t_igor(Config) when is_list(Config) ->
FileM2 = filename:join(DataDir,"m2.erl"),
["m.erl",_]=R = igor:merge(m,[FileM1,FileM2],[{outdir,PrivDir}]),
io:format("igor:merge/3 = ~p~n", [R]),
+
+ FileTypeSpecs = filename:join(DataDir,"igor_type_specs.erl"),
+ Empty = filename:join(DataDir,"empty.erl"),
+ ["n.erl",_]=R2 = igor:merge(n,[FileTypeSpecs,Empty],[{outdir,PrivDir}]),
+ io:format("igor:merge/3 = ~p~n", [R2]),
+
+ ok.
+
+t_erl_tidy(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir, Config),
+ File = filename:join(DataDir,"erl_tidy_tilde.erl"),
+ ok = erl_tidy:file(File, [{stdout, true}]),
ok.
test_comment_scan([],_) -> ok;
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE_data/empty.erl b/lib/syntax_tools/test/syntax_tools_SUITE_data/empty.erl
new file mode 100644
index 0000000000..877ff66013
--- /dev/null
+++ b/lib/syntax_tools/test/syntax_tools_SUITE_data/empty.erl
@@ -0,0 +1 @@
+-module(empty).
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE_data/erl_tidy_tilde.erl b/lib/syntax_tools/test/syntax_tools_SUITE_data/erl_tidy_tilde.erl
new file mode 100644
index 0000000000..888264bad6
--- /dev/null
+++ b/lib/syntax_tools/test/syntax_tools_SUITE_data/erl_tidy_tilde.erl
@@ -0,0 +1,13 @@
+%%
+%% File: erl_tidy_tilde.erl
+%% Author: Mark Bucciarelli
+%% Created: 2016-06-05
+%%
+
+-module(erl_tidy_tilde).
+
+-export([start/0]).
+
+start() ->
+ io:put_chars("tilde characters ('~')in source were "
+ "breaking erl_tidy\n").
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE_data/igor_type_specs.erl b/lib/syntax_tools/test/syntax_tools_SUITE_data/igor_type_specs.erl
new file mode 100644
index 0000000000..5a156c7fa3
--- /dev/null
+++ b/lib/syntax_tools/test/syntax_tools_SUITE_data/igor_type_specs.erl
@@ -0,0 +1,80 @@
+%% Same as ./type_specs.erl, but without macros.
+-module(igor_type_specs).
+
+-include_lib("syntax_tools/include/merl.hrl").
+
+-export([f/1, b/0, c/2]).
+
+-export_type([t/0, ot/2, ff2/0]).
+
+-type aa() :: _.
+
+-type t() :: integer().
+
+-type ff(A) :: ot(A, A) | tuple() | 1..3 | map() | {}.
+-type ff1() :: ff(bin()) | foo:bar().
+-type ff2() :: {list(), [_], list(integer()),
+ nonempty_list(), nonempty_list(atom()), [ff1(), ...],
+ nil(), []}.
+-type bin() :: <<>>
+ | <<_:(+4)>>
+ | <<_:_*8>>
+ | <<_:12, _:_*16>>
+ | <<_:16, _:_*(0)>> % same as "<<_:16>>"
+ | <<_:16, _:_*(+0)>>.
+
+-callback cb() -> t().
+
+-optional_callbacks([cb/0]).
+
+-opaque ot(A, B) :: {A, B}.
+
+-type f1() :: fun().
+-type f2() :: fun((...) -> t()).
+-type f3() :: fun(() -> t()).
+-type f4() :: fun((t(), t()) -> t()).
+
+-wild(attribute).
+
+-record(par, {a :: undefined | igor_type_specs}).
+
+-record(r0, {}).
+
+-record(r,
+ {f1 :: integer(),
+ f2 = a :: atom(),
+ f3 :: fun(),
+ f4 = 7}).
+
+-type r0() :: #r0{} | #r{f1 :: 3} | #r{f1 :: 3, f2 :: 'sju'}.
+
+-type m1() :: #{}.
+-type m2() :: #{a => m1(), b => #{} | fy:m2()}.
+-type b1() :: B1 :: binary() | (BitString :: bitstring()).
+
+-define(PAIR(A, B), {(A), (B)}).
+
+-spec igor_type_specs:f({r0(), r0()}) -> {t(), t()}.
+
+f({R, R}) ->
+ _ = "igor_type_specs" ++ "hej",
+ _ = <<"foo">>,
+ _ = R#r.f1,
+ _ = R#r{f1 = 17, f2 = b},
+ {1, 1}.
+
+-spec igor_type_specs:b() -> integer() | fun().
+
+b() ->
+ case foo:bar() of
+ #{a := 2} -> 19
+ end.
+
+-spec c(Atom :: atom(), Integer :: integer()) -> {atom(), integer()};
+ (X, Y) -> {atom(), float()} when X :: atom(),
+ is_subtype(Y, float());
+ (integer(), atom()) -> {integer(), atom()}.
+
+c(A, B) ->
+ _ = integer,
+ {A, B}.
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl b/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
new file mode 100644
index 0000000000..e4f8a1c3de
--- /dev/null
+++ b/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
@@ -0,0 +1,87 @@
+-module(type_specs).
+
+-include_lib("syntax_tools/include/merl.hrl").
+
+-export([f/1, b/0, c/2]).
+
+-export_type([t/0, ot/2, ff2/0]).
+
+-type aa() :: _.
+
+-type t() :: integer().
+
+-type ff(A) :: ot(A, A) | tuple() | 1..3 | map() | {}.
+-type ff1() :: ff(bin()) | foo:bar().
+-type ff2() :: {list(), [_], list(integer()),
+ nonempty_list(), nonempty_list(atom()), [ff1(), ...],
+ nil(), []}.
+-type bin() :: <<>>
+ | <<_:(+4)>>
+ | <<_:_*8>>
+ | <<_:12, _:_*16>>
+ | <<_:16, _:_*(0)>> % same as "<<_:16>>"
+ | <<_:16, _:_*(+0)>>.
+
+-callback cb() -> t().
+
+-optional_callbacks([cb/0]).
+
+-opaque ot(A, B) :: {A, B}.
+
+-type f1() :: fun().
+-type f2() :: fun((...) -> t()).
+-type f3() :: fun(() -> t()).
+-type f4() :: fun((t(), t()) -> t()).
+
+-wild(attribute).
+
+-record(par, {a :: undefined | ?MODULE}).
+
+-record(r0, {}).
+
+-record(r,
+ {f1 :: integer(),
+ f2 = a :: atom(),
+ f3 :: fun(),
+ f4 = 7}).
+
+-type r0() :: #r0{} | #r{f1 :: 3} | #r{f1 :: 3, f2 :: 'sju'}.
+
+-type m1() :: #{} | map().
+-type m2() :: #{a := m1(), b => #{} | fy:m2()}.
+%-type m3() :: #{...}.
+%-type m4() :: #{_ => _, ...}.
+%-type m5() :: #{any() => any(), ...}.
+-type m3() :: #{any() => any()}.
+-type m4() :: #{_ => _, any() => any()}.
+-type m5() :: #{any() => any(), any() => any()}.
+-type b1() :: B1 :: binary() | (BitString :: bitstring()).
+
+-define(PAIR(A, B), {(A), (B)}).
+
+-spec ?MODULE:f(?PAIR(r0(), r0())) -> ?PAIR(t(), t()).
+
+f({R, R}) ->
+ _ = ?MODULE_STRING ++ "hej",
+ _ = <<"foo">>,
+ _ = R#r.f1,
+ _ = R#r{f1 = 17, f2 = b},
+ {1, 1}.
+
+-spec ?MODULE:b() -> integer() | fun().
+
+b() ->
+ case foo:bar() of
+ #{a := 2} -> 19
+ end.
+
+-define(I, integer).
+
+-spec c(Atom :: atom(), Integer :: ?I()) -> {atom(), integer()};
+ (X, Y) -> {atom(), float()} when X :: atom(),
+ is_subtype(Y, float());
+ (integer(), atom()) -> {integer(), atom()}.
+
+c(A, B) ->
+ _ = ?I,
+ {A, B}.
diff --git a/lib/syntax_tools/vsn.mk b/lib/syntax_tools/vsn.mk
index 403e90196e..f09c2a01d0 100644
--- a/lib/syntax_tools/vsn.mk
+++ b/lib/syntax_tools/vsn.mk
@@ -1 +1 @@
-SYNTAX_TOOLS_VSN = 1.7
+SYNTAX_TOOLS_VSN = 2.0
diff --git a/lib/test_server/AUTHORS b/lib/test_server/AUTHORS
deleted file mode 100644
index 3212999174..0000000000
--- a/lib/test_server/AUTHORS
+++ /dev/null
@@ -1,12 +0,0 @@
-Original Authors and Contributors:
-
-Mattias Nilsson
-Bj�rn Gustavsson
-Janne Lindblad
-Patrik Winroth
-Claes Wikstr�m
-Siri Hansen
-Peter Andersson
-
-...and others.
-
diff --git a/lib/test_server/Makefile b/lib/test_server/Makefile
deleted file mode 100644
index 382749d1fc..0000000000
--- a/lib/test_server/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-#
-# Macros
-#
-
-SUB_DIRECTORIES = src doc/src
-
-include vsn.mk
-VSN = $(TEST_SERVER_VSN)
-
-SPECIAL_TARGETS =
-
-#
-# Default Subdir Targets
-#
-include $(ERL_TOP)/make/otp_subdir.mk
-
diff --git a/lib/test_server/README b/lib/test_server/README
deleted file mode 100644
index fc71c90ca8..0000000000
--- a/lib/test_server/README
+++ /dev/null
@@ -1,113 +0,0 @@
-===========================================================================
- OTP Test Server
-===========================================================================
-
-To compile the 'test_server' application you need to build and install
-a Erlang/OTP system from source. Get your open source Erlang/OTP from
-http://www.erlang.org/. The resulting "erlc" command must be in the
-search path for commands.
-
-The Erlang test_server application and the example tests are to be
-inserted into an existing source tree for Erlang/OTP.
-
-You don't run the Test Server or the tests from the source tree.
-Instead a test installation area $TESTROOT is used with the resulting
-directory structure
-
- $TESTROOT/test_server
- $TESTROOT/<app1>_test
- $TESTROOT/<app2>_test
- .
- .
-
-For more details see the test_server documentation can be found in the
-"$ERL_TOP/lib/test_server/doc/html" directory.
-
-
-Unpacking the sources
----------------------
-
-Enter your Erlang/OTP source tree and unpack the OTP Test Server and
-optionally the test examples
-
- % cd otp_src_RXX
- % gunzip -c test_server-<VSN>.tar.gz | tar xf -
- % gunzip -c emulator-YYYY-MM-DD.tar.gz | tar xf -
- % gunzip -c stdlib-YYYY-MM-DD.tar.gz | tar xf -
-
-
-How to build and install the OTP Test Server
---------------------------------------------
-
-Set the ERL_TOP variable to the top directory of the source tree
-
- % cd otp_src_RXX
-
- % setenv ERL_TOP `pwd`
- or
- % export ERL_TOP=`pwd`
-
-If not done before you need to run the configure script
-
- % ./configure
-
-Then build and install from the the base directory of the test_server
-application
-
- % cd lib/test_server
- % gmake release_tests TESTROOT=<some dir>
-
-
-How to build and install the example test suites
-------------------------------------------------
-
-If you want to build and install the example test suites
-you build and install from the the test directories
-
- % cd $ERL_TOP/lib/stdlib/test
- % gmake release_tests TESTROOT=<some dir>
-
- % cd $ERL_TOP/erts/emulator/test
- % gmake release_tests TESTROOT=<some dir>
-
-
-How to run OTP test suites
---------------------------
-
-First cd into $TESTROOT/test_server
-
- % cd $TESTROOT/test_server
-
-Install the OTP Test Server framework
-
- % erl
- 1> ts:install().
-
-Check which tests are available
-
- 2> ts:tests().
- [...]
-
-Run the collections of test suites one at the time
-
- 3> ts:run(emulator). (starts a xterm with an Erlang shell)
- 4> ts:run(stdlib). (starts a xterm with an Erlang shell)
-
-or all at once
-
- 5> ts:run(). (the node running the tests will be in the background)
-
-Note that it is normal to see lots of error messages in the Erlang
-shell. The tests will stress the system with lots of invalid input to
-find problems in the error handling.
-
-Also note that a failing test case does not always indicate a bug in
-Erlang/OTP. Differences in the network setup, machine configuration
-etc may cause a test case to fail or time out.
-
-The result of the tests are recorded in the file named "index.html" in
-the "$TESTROOT/test_server" directory. You can follow the progress of
-tests suites not yet completed from "last_test.html".
-
-For more details see the test_server documentation can be found in the
-"$ERL_TOP/lib/test_server/doc/html" directory.
diff --git a/lib/test_server/doc/html/.gitignore b/lib/test_server/doc/html/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/test_server/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/test_server/doc/man3/.gitignore b/lib/test_server/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/test_server/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/test_server/doc/man6/.gitignore b/lib/test_server/doc/man6/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/test_server/doc/man6/.gitignore
+++ /dev/null
diff --git a/lib/test_server/doc/pdf/.gitignore b/lib/test_server/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/test_server/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/test_server/doc/src/Makefile b/lib/test_server/doc/src/Makefile
deleted file mode 100644
index 8c5418aee5..0000000000
--- a/lib/test_server/doc/src/Makefile
+++ /dev/null
@@ -1,140 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2002-2012. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(TEST_SERVER_VSN)
-APPLICATION=test_server
-
-DOC_EXTRA_FRONT_PAGE_INFO=Important note: \
-The Test Server application is obsolete and will be removed \
-in the next major OTP release
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = \
- test_server_ctrl.xml \
- test_server.xml
-XML_REF3_INTERNAL = \
- ts.xml
-XML_REF6_FILES = test_server_app.xml
-
-XML_PART_FILES = \
- part.xml \
- part_notes.xml \
- part_notes_history.xml
-
-XML_CHAPTER_FILES = \
- basics_chapter.xml \
- run_test_chapter.xml \
- write_test_chapter.xml \
- test_spec_chapter.xml \
- example_chapter.xml \
- write_framework_chapter.xml \
- notes.xml \
- notes_history.xml
-
-BOOK_FILES = book.xml
-
-XML_FILES = $(BOOK_FILES) $(XML_APPLICATION_FILES) $(XML_REF3_FILES) $(XML_REF6_FILES) \
- $(XML_PART_FILES) $(XML_CHAPTER_FILES)
-
-GIF_FILES =
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-HTML_INTERNAL = $(XML_REF3_INTERNAL:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-MAN3_INTERNAL = $(XML_REF3_INTERNAL:%.xml=$(MAN3DIR)/%.3)
-MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/test_server-$(VSN).pdf
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-DVIPS_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-man: $(MAN3_FILES) $(MAN3_INTERNAL) $(MAN6_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(MAN6DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_docs_spec: docs
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(HTMLDIR)/* \
- "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DATA) $(MAN3_FILES) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man6"
- $(INSTALL_DATA) $(MAN6_FILES) "$(RELEASE_PATH)/man/man6"
-
-release_spec:
-
-release_tests_spec:
diff --git a/lib/test_server/doc/src/basics_chapter.xml b/lib/test_server/doc/src/basics_chapter.xml
deleted file mode 100644
index 9e9f38aab4..0000000000
--- a/lib/test_server/doc/src/basics_chapter.xml
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Server Basics</title>
- <prepared>Siri Hansen</prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>basics_chapter.xml</file>
- </header>
-
- <section>
- <title>Introduction</title>
- <p><em>Test Server</em> is a portable test tool for automated
- testing of Erlang programs and OTP applications. It provides an
- interface for running test programs directly with Test Server
- as well as an interface for integrating Test Server
- with a framework application. The latter makes it possible to use
- Test Server as the engine of a higher level test tool
- application.</p>
-
- <p>It is strongly recommended that Test Server be used from inside
- a framework application, rather than interfaced directly for
- running test programs. Test Server can be pretty difficult to use
- since it's a very general and quite extensive and complex
- application. Furthermore, the <c>test_server_ctrl</c> functions
- are not meant to be used from within the actual test programs. The
- framework should handle communication with Test Server and deal
- with the more complex aspects of this interaction automatically so
- that a higher level interface may be provided for the tester. For
- test tool usage to be productive, a simpler, more intuitive and
- (if required) more specific interface is required than what Test Server
- can provide.</p>
-
- <p>OTP delivers a general purpose framework for Test Server, called
- <em>Common Test</em>. This application is a tool well suited for
- automated black box testing of target systems of <em>any kind</em>
- (not necessarily implemented in Erlang). Common Test is also a very
- useful tool for white box testing of Erlang programs and OTP
- applications. Unless a more specific functionality and/or user
- interface is required (in which case you might need to implement
- your own framework), Common Test should do the job for
- you. Please read the Common Test User's Guide and reference manual
- for more information.</p>
-
- <p>Under normal circumstances, knowledge about the Test Server
- application is not required for using the Common Test framework.
- However, if you want to use Test Server without a framework,
- or learn how to integrate it with your own framework, please read on...
- </p>
- </section>
- <section>
- <title>Getting started</title>
- <p>Testing when using Test Server is done by running test
- suites. A test suite is a number of test cases, where each test
- case tests one or more things. The test case is the smallest unit
- that the test server deals with. One or more test cases are
- grouped together into one ordinary Erlang module, which is called
- a test suite. Several test suite modules can be grouped together
- in special test specification files representing whole application
- and/or system test "jobs".
- </p>
- <p>The test suite Erlang module must follow a certain interface,
- which is specified by Test Server. See the section on writing
- test suites for details about this.
- </p>
- <p>Each test case is considered a success if it returns to the
- caller, no matter what the returned value is. An exception to this
- is the return value <c>{skip, Reason}</c> which indicates that the
- test case is skipped. A failure is specified as a crash, no matter
- what the crash reason is.
- </p>
- <p>As a test suite runs, all information (including output to
- stdout) is recorded in several different log files. A minimum of
- information is displayed to the user console. This only include
- start and stop information, plus a note for each failed test case.
- </p>
- <p>The result from each test case is recorded in an HTML log file
- which is created for each test run. Every test case gets one row
- in a table presenting total time, whether the case was successful
- or not, if it was skipped, and possibly also a comment. The HTML
- file has links to each test case's logfile, which may be viewed
- from e.g. Netscape or any other HTML capable browser.
- </p>
- <p>The Test Server consists of three parts:
- </p>
- <list type="bulleted">
- <item>The part that executes the test suites and
- provides support for the test suite author is called
- <c>test_server</c>. This is described in the chapter about
- writing test cases in this user's guide, and in the reference
- manual for the <c>test_server</c> module.</item>
- <item>The controlling part, which provides the low level
- operator interface, starts and stops slave nodes and writes
- log files, is called
- <c>test_server_ctrl</c>. The Test Server Controller should not
- be used directly when running tests. Instead a framework built
- on top of it should be used. More information
- about how to write your own framework can be found
- in this user's guide and in the reference manual for the
- <c>test_server_ctrl</c> module.</item>
- </list>
- </section>
-
- <section>
- <title>Definition of terms</title>
- <taglist>
- <tag><em>conf(iguration) case</em></tag>
- <item>This is a group of test cases which need some specific
- configuration. A conf case contains an initiation function which
- sets up a specific configuration, one or more test cases using
- this configuration, and a cleanup function which restores the
- configuration. A conf case is specified in a test specification
- either like this:<c>{conf,InitFunc,ListOfCases,CleanupFunc}</c>,
- or this: <c>{conf,Properties,InitFunc,ListOfCases,CleanupFunc}</c>
- </item>
- <tag><em>datadir</em></tag>
- <item>Data directory for a test suite. This directory contains
- any files used by the test suite, e.g. additional erlang
- modules, c code or data files. If the data directory contains
- code which must be compiled before the test suite is run, it
- should also contain a makefile source called Makefile.src
- defining how to compile.
- </item>
- <tag><em>documentation clause</em></tag>
- <item>One of the function clauses in a test case. This clause
- shall return a list of strings describing what the test case
- tests.
- </item>
- <tag><em>execution clause</em></tag>
- <item>One of the function clauses in a test case. This clause
- implements the actual test case, i.e. calls the functions that
- shall be tested and checks results. The clause shall crash if it
- fails.
- </item>
- <tag><em>major log file</em></tag>
- <item>This is the test suites log file.
- </item>
- <tag><em>Makefile.src</em></tag>
- <item>This file is used by the test server framework to generate
- a makefile for a datadir. It contains some special characters
- which are replaced according to the platform currently tested.
- </item>
- <tag><em>minor log file</em></tag>
- <item>This is a separate log file for each test case.
- </item>
- <tag><em>privdir</em></tag>
- <item>Private directory for a test suite. This directory should
- be used when the test suite needs to write to files.
- </item>
- <tag><em>skip case</em></tag>
- <item>A test case which shall be skipped.
- </item>
- <tag><em>specification clause</em></tag>
- <item>One of the function clauses in a test case. This clause
- shall return an empty list, a test specification or
- <c>{skip,Reason}</c>. If an empty list is returned, it means
- that the test case shall be executed, and so it must also have
- an execution clause.
- </item>
- <tag><em>test case</em></tag>
- <item>A single test included in a test suite. Typically it tests
- one function in a module or application. A test case is
- implemented as a function in a test suite module. The function
- can have three clauses, the documentation-, specification- and
- execution clause.
- </item>
- <tag><em>test specification</em></tag>
- <item>A specification of which test suites and test cases to
- run. There can be test specifications on three different levels
- in a test. The top level is a test specification file which
- roughly specifies what to test for a whole application. Then
- there is a test specification for each test suite returned from
- the <c>all(suite)</c> function in the suite. And there can also
- be a test specification returned from the specification clause
- of a test case.
- </item>
- <tag><em>test specification file</em></tag>
- <item>This is a text file containing the test specification for
- an application. The file has the extension ".spec" or
- ".spec.Platform", where Platform is e.g. "vxworks".
- </item>
- <tag><em>test suite</em></tag>
- <item>An erlang module containing a collection of test cases for
- a specific application or module.
- </item>
- <tag><em>topcase</em></tag>
- <item>The first "command" in a test specification file. This
- command contains the test specification, like this:
- <c>{topcase,TestSpecification}</c></item>
- </taglist>
- </section>
-</chapter>
-
diff --git a/lib/test_server/doc/src/book.xml b/lib/test_server/doc/src/book.xml
deleted file mode 100644
index 6eb7daae1a..0000000000
--- a/lib/test_server/doc/src/book.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Server</title>
- <prepared>Siri Hansen</prepared>
- <docno></docno>
- <date>2002-07-11</date>
- <rev></rev>
- <file>book.xml</file>
- </header>
- <insidecover>
- </insidecover>
- <pagetext>Test Server</pagetext>
- <preamble>
- <contents level="2"></contents>
- </preamble>
- <parts lift="no">
- <xi:include href="part.xml"/>
- </parts>
- <applications>
- <xi:include href="ref_man.xml"/>
- </applications>
- <releasenotes>
- <xi:include href="notes.xml"/>
- </releasenotes>
- <listofterms></listofterms>
- <index></index>
-</book>
-
diff --git a/lib/test_server/doc/src/example_chapter.xml b/lib/test_server/doc/src/example_chapter.xml
deleted file mode 100644
index ec152fdd6c..0000000000
--- a/lib/test_server/doc/src/example_chapter.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Examples</title>
- <prepared>Siri Hansen</prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>example_chapter.xml</file>
- </header>
-
- <section>
- <title>Test suite</title>
- <code type="none">
--module(my_SUITE).
-
--export([all/1,
- not_started/1, not_started_func1/1, not_started_func2/1,
- start/1, stop/1,
- func1/1, func2/1
- ]).
-
--export([init_per_testcase/2, end_per_testcase/2]).
-
--include("test_server.hrl").
-
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- Dog=?t:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-all(suite) ->
- %% Test specification on test suite level
- [not_started,
- {conf, start, [func1, func2], stop}].
-
-not_started(suite) ->
- %% Test specification on test case level
- [not_started_func1, not_started_func2];
-not_started(doc) ->
- ["Testing all functions when application is not started"].
-%% No execution clause unless the specification clause returns [].
-
-
-not_started_func1(suite) ->
- [];
-not_started_func1(doc) ->
- ["Testing function 1 when application is not started"].
-not_started_func1(Config) when list(Config) ->
- {error, not_started} = myapp:func1(dummy_ref,1),
- {error, not_started} = myapp:func1(dummy_ref,2),
- ok.
-
-not_started_func2(suite) ->
- [];
-not_started_func2(doc) ->
- ["Testing function 2 when application is not started"].
-not_started_func2(Config) when list(Config) ->
- {error, not_started} = myapp:func2(dummy_ref,1),
- {error, not_started} = myapp:func2(dummy_ref,2),
- ok.
-
-
-%% No specification clause needed for an init function in a conf case!!!
-start(doc) ->
- ["Testing start of my application."];
-start(Config) when list(Config) ->
- Ref = myapp:start(),
- case erlang:whereis(my_main_process) of
- Pid when pid(Pid) ->
- [{myapp_ref,Ref}|Config];
- undefined ->
- %% Since this is the init function in a conf case, the rest of the
- %% cases in the conf case will be skipped if this case fails.
- ?t:fail("my_main_process did not start")
- end.
-
-func1(suite) ->
- [];
-func1(doc) ->
- ["Test that func1 returns ok when argument is 1 and error if argument is 2"];
-func1(Config) when list(Config) ->
- Ref = ?config(myapp_ref,Config),
- ok = myapp:func1(Ref,1),
- error = myapp:func1(Ref,2),
- ok.
-
-func2(suite) ->
- [];
-func2(doc) ->
- ["Test that func1 returns ok when argument is 3 and error if argument is 4"];
-func2(Config) when list(Config) ->
- Ref = ?config(myapp_ref,Config),
- ok = myapp:func2(Ref,3),
- error = myapp:func2(Ref,4),
- ok.
-
-%% No specification clause needed for a cleanup function in a conf case!!!
-stop(doc) ->
- ["Testing termination of my application"];
-stop(Config) when list(Config) ->
- Ref = ?config(myapp_ref,Config),
- ok = myapp:stop(Ref),
- case erlang:whereis(my_main_process) of
- undefined ->
- lists:keydelete(myapp_ref,1,Config);
- Pid when pid(Pid) ->
- ?t:fail("my_main_process did not stop")
- end.
- </code>
- </section>
-
- <section>
- <title>Test specification file</title>
- <p><em><c>myapp.spec:</c></em></p>
- <code type="none">
-{topcase, {dir, "../myapp_test"}}. % Test specification on top level </code>
- <p><em><c>myapp.spec.vxworks:</c></em></p>
- <code type="none">
-{topcase, {dir, "../myapp_test"}}. % Test specification on top level
-{skip,{my_SUITE,func2,"Not applicable on VxWorks"}}. </code>
- </section>
-</chapter>
-
-
diff --git a/lib/test_server/doc/src/fascicules.xml b/lib/test_server/doc/src/fascicules.xml
deleted file mode 100644
index 37feca543f..0000000000
--- a/lib/test_server/doc/src/fascicules.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
-
-<fascicules>
- <fascicule file="part" href="part_frame.html" entry="no">
- User's Guide
- </fascicule>
- <fascicule file="ref_man" href="ref_man_frame.html" entry="yes">
- Reference Manual
- </fascicule>
- <fascicule file="part_notes" href="part_notes_frame.html" entry="no">
- Release Notes
- </fascicule>
- <fascicule file="" href="../../../../doc/print.html" entry="no">
- Off-Print
- </fascicule>
-</fascicules>
-
diff --git a/lib/test_server/doc/src/notes.xml b/lib/test_server/doc/src/notes.xml
deleted file mode 100644
index 9b5df6271a..0000000000
--- a/lib/test_server/doc/src/notes.xml
+++ /dev/null
@@ -1,1715 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>APPLICATION Release Notes</title>
- <prepared>Peter Andersson</prepared>
- <responsible>Peter Andersson</responsible>
- <docno></docno>
- <approved></approved>
- <checked></checked>
- <date>2007-11-30</date>
- <rev>A</rev>
- <file>notes.xml</file>
- </header>
-
-<section><title>Test_Server 3.10</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Two new CT hook functions have been added:
- <c>post_init_per_testcase/4</c> and
- <c>pre_end_per_testcase/3</c>. With these hook functions,
- it is possible to perform arbitrary actions (including
- modifications of test execution, test state and results)
- immediately before and after the execution of the test
- case.</p>
- <p>
- Own Id: OTP-13242 Aux Id: seq12991 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.9.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- When generating Makefile from Makefile.src,
- ts_lib:get_arg/4 earlier removed all spaces in the
- extracted argument. The code was probably meant for
- removing leading and trailing spaces only, and is now
- corrected to do so.</p>
- <p>
- Own Id: OTP-13015</p>
- </item>
- <item>
- <p>
- With the Common Test 'create_priv_dir' start option set
- to 'auto_per_tc', the name of the priv directory for a
- configuration function could clash with the name of the
- priv directory for a test case, which would cause Test
- Server failure. This error has been corrected.</p>
- <p>
- Own Id: OTP-13181</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.9</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- The status of an aborted test due to test suite
- compilation error has changed from 'auto_skipped' to
- 'failed'. This affects both the textual log file, event
- handling and CT hook callbacks. The logging of
- compilation failures has also been improved, especially
- in the case of multiple test suites failing compilation.</p>
- <p>
- Own Id: OTP-10816</p>
- </item>
- <item>
- <p>
- The Test Server source code parser (erl2html2) failed to
- handle the macro tuple in the syntax tree returned by
- epp_dodger. This error has been corrected.</p>
- <p>
- Own Id: OTP-12740</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The Test Server application has been marked as obsolete
- and will be removed from OTP in the next major release
- (OTP 19.0).</p>
- <p>
- Own Id: OTP-10923 Aux Id: OTP-12705 </p>
- </item>
- <item>
- <p>
- When running OTP tests using the ts interface, it is now
- possible to specify so called test categories per OTP
- application. A test category is represented by a CT test
- specification and defines an arbitrary subset of existing
- test suites, groups and cases. Examples of test
- categories are 'smoke' (smoke tests) and 'bench'
- (benchmarks). (Call ts:help() for more info). Also,
- functions for reading terms from the current test
- specification during test, ct:get_testspec_terms/0 and
- ct:get_testspec_terms/1, have been implemented.</p>
- <p>
- Own Id: OTP-11962</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.8.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- If the last expression in a test case causes a timetrap
- timeout, the stack trace is ignored and not printed to
- the test case log file. This happens because the
- {Suite,TestCase,Line} info is not available in the stack
- trace in this scenario, due to tail call elimination.
- Common Test has been modified to handle this situation by
- inserting a {Suite,TestCase,last_expr} tuple in the
- correct place and printing the stack trace as expected.</p>
- <p>
- Own Id: OTP-12697 Aux Id: seq12848 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.8</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- When installing test suites in a cross compilation
- environment, ts_install was not able to read the values
- of the environment variables specified in the
- configuration file. This has been fixed.</p>
- <p>
- Own Id: OTP-11441</p>
- </item>
- <item>
- <p>
- Printouts by means of ct:log/2/3 or ct:pal/2/3 from the
- hook functions on_tc_fail/2 and on_tc_skip/2 would (quite
- unexpectedly) end up in the "unexpected i/o" log file
- instead of in the test case log file. This behaviour has
- been changed so that now, all printouts (including stdio
- printouts) from these hook functions will be routed to
- the test case log file.</p>
- <p>
- Own Id: OTP-12468</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The format of the information printed on top of the test
- case (and configuration function) log file has been
- slightly modified, mainly in order to make the start
- configuration data easier to read and interpret.</p>
- <p>
- Own Id: OTP-12518 Aux Id: seq12808 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.7.2</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- The source code to html code generator in Test Server
- (and Common Test) would fail to generate anchors in the
- html code for functions with non-expandable macros,
- resulting in bad html links to such functions. This
- correction lets the code generator ignore macros that
- can't be expanded (i.e. not pre-process them), so that
- correct anchors will always be produced.</p>
- <p>
- Own Id: OTP-11766 Aux Id: seq12556 </p>
- </item>
- <item>
- <p>
- Make sure to install .hrl files when needed</p>
- <p>
- Own Id: OTP-12197</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Distribute <c>autoconf</c> helpers to applications at
- build time instead of having multiple identical copies
- committed in the repository.</p>
- <p>
- Own Id: OTP-12348</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.7.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- The mechanism for running code cover analysis with
- common_test has been improved. Earlier, if a test run
- consisted of multiple tests, cover would be started and
- stopped for each test. This would give "intermediate"
- cover logs available from the "Coverage log" link on the
- test suite result pages. To accumulate cover data over
- all tests, the 'export' option had to be used in the
- cover spec file. This was not well documented, and the
- functionality was quite confusing.</p>
- <p>
- Using the 'nodes' option in the cover spec file would
- fail when the test run consisted of multiple tests, since
- the specified nodes would only be included in the cover
- analysis of the first test.</p>
- <p>
- The repeated compilation and analysis of the same modules
- was also very time consuming.</p>
- <p>
- To overcome these problems, ct will now only cover
- compile and analyze modules once per test run, i.e. once
- for each cover spec file. The log file is available via a
- new button on the top level index page. The old "Coverage
- log" links on the test suite result pages still exist,
- but they all point to the same log containing the
- accumulated result.</p>
- <p>
- Own Id: OTP-11971</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.7</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Application upgrade (appup) files are corrected for the
- following applications: </p>
- <p>
- <c>asn1, common_test, compiler, crypto, debugger,
- dialyzer, edoc, eldap, erl_docgen, et, eunit, gs, hipe,
- inets, observer, odbc, os_mon, otp_mibs, parsetools,
- percept, public_key, reltool, runtime_tools, ssh,
- syntax_tools, test_server, tools, typer, webtool, wx,
- xmerl</c></p>
- <p>
- A new test utility for testing appup files is added to
- test_server. This is now used by most applications in
- OTP.</p>
- <p>
- (Thanks to Tobias Schlager)</p>
- <p>
- Own Id: OTP-11744</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Calls to erlang:open_port/2 with 'spawn' are updated to
- handle space in the command path.</p>
- <p>
- Own Id: OTP-10842</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.6.4</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>The way Common Test handles skipping of test cases has
- been updated. In previous versions, returning
- <c>{skip,Reason}</c> from a configuration function (such
- as init_per_suite or init_per_group), resulted in all
- affected test cases getting skipped with status
- <c>auto_skipped</c>. This was inappropriate, since this
- status is supposed to be used to inform that Common Test
- has taken the initiative to skip something (e.g. a test
- case group if init_per_group failed). Therefore, in this
- version of Common Test, whenever the user skips a suite,
- group, or individual test case (by means of a
- configuration function or test specification term), the
- affected test cases get the status <c>user_skipped</c>
- instead.</p> <p>This update has meant a few changes that
- may affect Common Test users in various ways:</p> <list>
- <item>The test results and statistics will be affected,
- which is important to know when running regression tests
- and comparing results to previous test runs.</item>
- <item>Users that read or parse the textual log file
- <c>suite.log</c> will notice that an auto skipped
- function is now reported as <c>auto_skipped</c> rather
- than <c>skipped</c> as before.</item> <item>When
- <c>require</c> fails in an info function (such as suite/0
- or group/1), all affected configuration functions and
- test cases are marked as <c>auto_skipped</c>.</item>
- <item>If Common Test detects an error in the test suite
- (such as e.g. an invalid all/0 function), all affected
- configuration functions and test cases are marked as
- <c>auto_skipped</c>.</item> <item>If a repeated test run
- session reaches a deadline with <c>force_stop</c>
- enabled, all remaining test cases are marked as
- <c>auto_skipped</c> rather than <c>user_skipped</c> as
- before.</item> <item>The event messages that Common Test
- generates during test runs have been affected by this
- update. For details see OTP-11524.</item> </list>
- <p>
- Own Id: OTP-11305 Aux Id: OTP-11524 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.6.3</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Test Server installed an error handler (test_server_h)
- only to be able to write the name of the current test
- case to stdout whenever it received an error- or progress
- report. This functionality was not useful and has been
- removed. The built-in Common Test hook, cth_log_redirect,
- has instead been improved to now also tag all error- and
- progress reports in the log with suite-, group-, and/or
- test case name.</p>
- <p>
- Own Id: OTP-11263 Aux Id: seq12251 </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- A new log, the "Pre- and Post Test I/O Log", has been
- introduced, which makes it possible to capture error- and
- progress reports, as well as printouts made with ct:log/2
- and ct:pal/2, before and after a test run. (Some minor
- improvements of the logging system have been made at the
- same time). Links to the new log are found on the Common
- Test Framework Log page. The Common Test User's Guide has
- been updated with information about the new log and also
- with a new section on how to synchronize external
- applications with Common Test by means of the CT Hook
- init and terminate functions.</p>
- <p>
- Own Id: OTP-11272</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Known Bugs and Problems</title>
- <list>
- <item>
- <p>
- Test Server: Report auto_skipped in major log.</p>
- <p>
- Own Id: OTP-11297</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.6.2</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Some unused code related to remote targets is removed,
- and documentation is updated.</p>
- <p>
- Own Id: OTP-10607 Aux Id: kunagi-338 [249] </p>
- </item>
- <item>
- <p>
- A bug in test_server_gl caused io requests containing
- invalid data (i.e. not unicode:chardata()) to hang, since
- no io reply was sent. This has been corrected.</p>
- <p>
- Own Id: OTP-10991</p>
- </item>
- <item>
- <p>
- Common Test would, in case of timetrap error, print a
- warning in the log if end_per_testcase wasn't implemented
- in the suite, even though it's an optional function. This
- printout has been removed.</p>
- <p>
- Own Id: OTP-11052</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The '-force_stop' flag to use with time-limited repeats
- of test runs can now be used with a new 'skip_rest'
- option which causes the rest of the test cases in the
- ongoing test job to be skipped when the time limit is
- reached. E.g. 'ct_run -spec xxx -duration 010000
- -force_stop skip_rest'</p>
- <p>
- Own Id: OTP-10856 Aux Id: OTP-10832 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.6.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- The unicode update of test_server for R16A introduced a
- few potential errors when logging to files. Sometimes ~tp
- or ~ts was used for formatting also when writing to files
- that were not opened with the {encoding,utf8} option. If
- then the argument contained unicode characters above 255,
- the file descriptor would crash. This has been corrected
- by the following modifications:</p> <list> <item> Since the
- 'unexpected_io' log file is used only when the test case
- HTML file is not available (e.g. between test cases),
- this file is now also a HTML file and as other
- test_server HTML logs it is always UTF-8 encoded </item>
- <item> Since it is possible to change which information
- is going to which log file (with
- test_server_ctrl:set_levels/3), we do not have full
- control over which information is written to which file.
- This means that any printout could be written to the
- 'major' log file (suite.log), which was earlier encoded
- as latin1. To avoid crashing this file descriptor due to
- unicode strings, the 'major' log file is now also encoded
- in UTF-8 (possible incopatibility). </item> <item> The
- cross_cover.info file is no longer a text file which can
- be read with file:consult/1, instead it is written as a
- pure binary file using term_to_binary when writing and
- binary_to_term when reading. </item> <item> The encoding
- of the file named 'last_name', which only content is the
- path to the last run.&lt;timestamp&gt; directory, is now
- dependent on the file name mode of the VM. If file names
- are expected to be unicode, then the 'last_name' file is
- UTF-8 encoded, else it is latin1 encoded. </item> </list>
- <p>
- Also, ~tp has been changed back to ~p unless it is
- somehow likely that the argument includes strings. It is
- not obvious that this is the correct thing to do, but
- some decission had to be taken...</p>
- <p>
- Own Id: OTP-10780</p>
- </item>
- <item>
- <p>
- Using the force_stop flag/option to interrupt a test run
- caused a crash in Common Test. This problem has been
- solved.</p>
- <p>
- Own Id: OTP-10832</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.6</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Line numbering of erlang files that were not correctly
- indented could be wrong after coverting to html with
- erl2html2:convert/[2,3] (the source code pointed to from
- the test case). This has been corrected.</p>
- <p>
- Also, there are now link targets for each line and not
- only for each 10th line, and link targets for functions
- now include the arity and not only the function name
- (e.g. func/1 has a link target "func-1").</p>
- <p>
- Own Id: OTP-9710 Aux Id: seq11945, kunagi-201 [112] </p>
- </item>
- <item>
- <p>
- Severe errors detected by <c>test_server</c> (e.g. if log
- files directories cannot be created) will now be reported
- to <c>common_test</c> and noted in the <c>common_test</c>
- logs.</p>
- <p>
- Own Id: OTP-9769 Aux Id: kunagi-202 [113] </p>
- </item>
- <item>
- <p>
- The earlier undocumented cross cover feature for
- accumulating cover data over multiple tests has now been
- fixed and documented.</p>
- <p>
- Own Id: OTP-9870 Aux Id: kunagi-206 [117] </p>
- </item>
- <item>
- <p>
- If the test suite itself was included in code coverage
- analysis, then the test_server would not manage to set
- data_dir correctly for the test. This has been corrected.</p>
- <p>
- Own Id: OTP-9956 Aux Id: kunagi-207 [118] </p>
- </item>
- <item>
- <p>
- Any call to test_server:break/1 should cancel all active
- timetramps. However, in some cases
- Suite:end_per_testcase/2 is executed on a different
- process than the test case itself, and if
- test_server:break/1 was called from there, the timetraps
- were not cancelled. This has been corrected.</p>
- <p>
- Own Id: OTP-10046 Aux Id: kunagi-174 [85] </p>
- </item>
- <item>
- <p>When a test case failed because of a timetrap time
- out, the <c>Config</c> data for the case was lost in the
- following call to <c>end_per_testcase/2</c>, and also in
- calls to the CT Hook function
- <c>post_end_per_testcase/4</c>. This problem has been
- solved and the <c>Config</c> data is now correctly passed
- to the above functions after a timetrap timeout
- failure.</p>
- <p>
- Own Id: OTP-10070 Aux Id: kunagi-175 [86] </p>
- </item>
- <item>
- <p>In test_server, the same process would supervise the
- currently running test case and be group leader (and IO
- server) for the test case. Furthermore, when running
- parallel test cases, new temporary supervisor/group
- leader processes were spawned and the process that was
- group leader for sequential test cases would not be
- active. That would lead to several problems:</p>
- <p>* Processes started by init_per_suite will inherit the
- group leader of the init_per_suite process (and that
- group leader would not process IO requests when parallel
- test cases was running). If later a parallel test case
- caused such a processto print using (for example)
- io:format/2, the calling would hang.</p>
- <p>* Similarly, if a process was spawned from a parallel
- test case, it would inherit the temporary group leader
- for that parallel test case. If that spawned process
- later - when the group of parallel tests have finished -
- attempted to print something, its group leader would be
- dead and there would be <c>badarg</c> exception.</p>
- <p>Those problems have been solved by having group
- leaders separate from the processes that supervises the
- test cases, and keeping temporary group leader process
- for parallel test cases alive until no more process in
- the system use them as group leaders.</p>
- <p>Also, a new <c>unexpected_io.log</c> log file
- (reachable from the summary page of each test suite) has
- been introduced. All unexpected IO will be printed into
- it(for example, IO to a group leader for a parallel test
- case that has finished).</p>
- <p>
- Own Id: OTP-10101 Aux Id: OTP-10125 </p>
- </item>
- <item>
- <p>
- The stability of <c>common_test</c> and
- <c>test_server</c> when running test cases in parallel
- has been improved.</p>
- <p>
- Own Id: OTP-10480 Aux Id: kunagi-318 [229] </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Added a general framework for executing benchmarks of
- Erlang/OTP. Benchmarks for the Erlang VM and mnesia have
- been incorporated in the framework. </p>
- <p>
- For details about how to add more benchmarks see
- $ERL_TOP/HOWTO/BENCHMARKS.md in the source distribution.</p>
- <p>
- Own Id: OTP-10156</p>
- </item>
- <item>
- <p>
- Update common test modules to handle Unicode:</p> <list>
- <item> Use UTF-8 encoding for all HTML files, except the
- HTML version of the test suite generated with
- erl2html2:convert, which will have the same encoding as
- the original test suite (.erl) file. </item> <item>
- Encode link targets in HTML files with
- test_server_ctrl:uri_encode/1. </item> <item> Use unicode
- modifier 't' with ~s when appropriate. </item> <item> Use
- unicode:characters_to_list and
- unicode:characters_to_binary for conversion between
- binaries and strings instead of binary_to_list and
- list_to_binary. </item> </list>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.5.3</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- test_server_h will now recognize info_reports written by
- ct connection handlers (according to the description in
- cth_conn_log) and ignore them as they will be completely
- handled by by ct_conn_log_h.</p>
- <p>
- Earlier test_server_h would print a tag (testcase name)
- before forwarding the report to error_logger_tty_h. This
- would cause lots of tags in the log with no info report
- following (since error_logger_tty_h did not handle them).</p>
- <p>
- Own Id: OTP-10571</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Known Bugs and Problems</title>
- <list>
- <item>
- <p>
- Restore Config data if lost when test case fails.</p>
- <p>
- Own Id: OTP-10070 Aux Id: kunagi-175 [86] </p>
- </item>
- <item>
- <p>
- IO server error in test_server.</p>
- <p>
- Own Id: OTP-10125 Aux Id: OTP-10101, kunagi-177 [88] </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.5.2</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- The documentation has been updated with the latest
- changes for the test_server_ctrl:report/2 function.</p>
- <p>
- Own Id: OTP-10086 Aux Id: seq12066 </p>
- </item>
- <item>
- <p>
- The ct:get_status/0 function failed to report status if a
- parallel test case group was running at the time of the
- call. This has been fixed and the return value for the
- function has been updated. Please see the ct reference
- manual for details.</p>
- <p>
- Own Id: OTP-10172</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- It is now possible to sort the HTML tables by clicking on
- the header elements. In order to reset a sorted table,
- the browser window should simply be refreshed. This
- feature requires that the browser supports javascript,
- and has javascript execution enabled. If the 'ct_run
- -basic_html' flag is used, no javascript code is included
- in the generated HTML code.</p>
- <p>
- Own Id: OTP-9896 Aux Id: seq12034, OTP-9835 </p>
- </item>
- <item>
- <p>
- Verbosity levels for log printouts has been added. This
- makes it possible to specify preferred verbosity for
- different categories of log printouts, as well as general
- printouts (such as standard IO), to allow control over
- which strings get printed and which get ignored. New
- versions of the Common Test logging functions, ct:log,
- ct:pal and ct:print, have been introduced, with a new
- Importance argument added. The Importance value is
- compared to the verbosity level at runtime. More
- information can be found in the chapter about Logging in
- the Common Test User's Guide.</p>
- <p>
- Own Id: OTP-10067 Aux Id: seq12050 </p>
- </item>
- <item>
- <p>
- The Erlang/OTP test runner ts has been extended to allow
- cross compilation of test suites. To cross compile the
- test suites first follow the normal cross compilation
- procedures and release the tests on the build host. Then
- install ts using an xcomp specification file and compile
- test suites using ts:compile_testcases/0. For more
- details see $ERL_TOP/xcomp/README.md.</p>
- <p>
- Own Id: OTP-10074</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.5.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- After a test case timeout or abortion, the
- end_per_testcase function executes on a new dedicated
- process. The group leader for this process should be set
- to the IO server for the test case, which was not done
- properly. The result of this error was that no warnings
- about end_per_testcase failing or timing out were ever
- printed in the test case log. Also, help functions such
- as e.g. test_server:stop_node/1, attempting to
- synchronize with the IO server, would hang. The fault has
- been corrected.</p>
- <p>
- Own Id: OTP-9666</p>
- </item>
- <item>
- <p>
- A deadlock situation could occur if Common Test is
- forwarding error_handler printouts to Test Server at the
- same time a new test case is starting. This error has
- been fixed.</p>
- <p>
- Own Id: OTP-9894</p>
- </item>
- <item>
- <p>
- When a test case was killed because of a timetrap
- timeout, the current location (suite, case and line) was
- not printed correctly in the log files. This has been
- corrected.</p>
- <p>
- Own Id: OTP-9930 Aux Id: seq12002 </p>
- </item>
- <item>
- <p>
- Test Server and Common Test would add new error handlers
- with each test run and fail to remove previously added
- ones. In the case of Test Server, this would only happen
- if SASL was not running on the test node. This has been
- fixed.</p>
- <p>
- Own Id: OTP-9941 Aux Id: seq12009 </p>
- </item>
- <item>
- <p>
- If a test case process was terminated due to an exit
- signal from a linked process, Test Server failed to
- report the correct name of the suite and case to the
- framework. This has been corrected.</p>
- <p>
- Own Id: OTP-9958 Aux Id: OTP-9855 </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- A new optional feature has been introduced that enables
- Common Test to generate priv_dir directory names that are
- unique for each test case or config function. The name of
- the option/flag is 'create_priv_dir' and it can be set to
- value 'auto_per_run' (which is the default, existing,
- behaviour), or 'auto_per_tc' or 'manual_per_tc'. If
- 'auto_per_tc' is used, Test Server creates a dedicated
- priv_dir automatically for each test case (which can be
- very expensive in case of many and/or repeated cases). If
- 'manual_per_tc' is used, the user needs to create the
- priv_dir explicitly by calling the new function
- ct:make_priv_dir/0.</p>
- <p>
- Own Id: OTP-9659 Aux Id: seq11930 </p>
- </item>
- <item>
- <p>
- A column for test case group name has been added to the
- suite overview HTML log file.</p>
- <p>
- Own Id: OTP-9730 Aux Id: seq11952 </p>
- </item>
- <item>
- <p>
- It is now possible to use the post_end_per_testcase CT
- hook function to print a comment for a test case in the
- overview log file, even if the test case gets killed by a
- timetrap or unknown exit signal, or if the
- end_per_testcase function times out.</p>
- <p>
- Own Id: OTP-9855 Aux Id: seq11979 </p>
- </item>
- <item>
- <p>
- Common Test will now print error information (with a time
- stamp) in the test case log file immediately when a test
- case fails. This makes it easier to see when, in time,
- the fault actually occured, and aid the job of locating
- relevant trace and debug printouts in the log.</p>
- <p>
- Own Id: OTP-9904 Aux Id: seq11985, OTP-9900 </p>
- </item>
- <item>
- <p>
- Test Server has been modified to check the SASL
- errlog_type parameter when receiving an error logger
- event, so that it doesn't print reports of type that the
- user has disabled.</p>
- <p>
- Own Id: OTP-9955 Aux Id: seq12013 </p>
- </item>
- <item>
- <p>
- If an application cannot be found by ts it is
- automatically skipped when testing.</p>
- <p>
- Own Id: OTP-9971</p>
- </item>
- <item>
- <p>
- By specifying a user defined function ({M,F,A} or fun) as
- timetrap value, either by means of an info function or by
- calling ct:timetrap/1, it is now possible to set a
- timetrap that will be triggered when the user function
- returns.</p>
- <p>
- Own Id: OTP-9988 Aux Id: OTP-9501, seq11894 </p>
- </item>
- <item>
- <p>
- If the optional configuration functions init_per_suite/1
- and end_per_suite/1 are not implemented in the test
- suite, local Common Test versions of these functions are
- called instead, and will be displayed in the overview log
- file. Any printouts made by the pre- or
- post_init_per_suite and pre- or post_end_per_suite hook
- functions are saved in the log files for these functions.</p>
- <p>
- Own Id: OTP-9992</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.5</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The test case group info function has been implemented in
- Common Test. Before execution of a test case group, a
- call is now made to <c>TestSuite:group(GroupName)</c>.
- The function returns a list of test properties, e.g. to
- specify timetrap values, require configuration data, etc
- (analogue to the test suite- and test case info
- function). The scope of the properties set by
- <c>group(GroupName)</c> is all test cases and sub-groups
- of group <c>GroupName</c>.</p>
- <p>
- Own Id: OTP-9235</p>
- </item>
- <item>
- <p>
- The look of the HTML log files generated by Common Test
- and Test Server has been improved (and made easier to
- customize) by means of a CSS file.</p>
- <p>
- Own Id: OTP-9706</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Known Bugs and Problems</title>
- <list>
- <item>
- <p>
- Fix problems in CT/TS due to line numbers in exceptions.</p>
- <p>
- Own Id: OTP-9203</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.4.5</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- An error in how comments are colored in the test suite
- overview html log file has been corrected. As result, a
- new framework callback function, format_comment/1, has
- been introduced.</p>
- <p>
- Own Id: OTP-9237</p>
- </item>
- <item>
- <p>
- Test Server did not release SASL TTY handlers
- (sasl_report_tty_h and error_logger_tty_h) properly after
- each test run. This error has been fixed.</p>
- <p>
- Own Id: OTP-9311</p>
- </item>
- <item>
- <p>
- Automatically generated init- and end-configuration
- functions for test case groups caused incorrect execution
- order of test cases. This has been corrected.</p>
- <p>
- Own Id: OTP-9369</p>
- </item>
- <item>
- <p>
- If ct:log/2 was called with bad arguments, this could
- cause the Common Test IO handling process to crash. This
- fault has been corrected.</p>
- <p>
- Own Id: OTP-9371 Aux Id: OTP-8933 </p>
- </item>
- <item>
- <p>
- A bug has been fixed that made Test Server call the
- end_tc/3 framework function with an incorrect module name
- as first argument.</p>
- <p>
- Own Id: OTP-9379 Aux Id: seq11863 </p>
- </item>
- <item>
- <p>
- If end_per_testcase caused a timetrap timeout, the actual
- test case status was discarded and the test case logged
- as successful (even if the case had actually failed
- before the call to end_per_testcase). This fault has been
- fixed.</p>
- <p>
- Own Id: OTP-9397</p>
- </item>
- <item>
- <p>
- If a timetrap timeout occured during execution of of a
- function in a lib module (i.e. a function called directly
- or indirectly from a test case), the Suite argument in
- the end_tc/3 framework callback function would not
- correctly contain the name of the test suite, but the lib
- module. (This would only happen if the lib module was
- compiled with ct.hrl included). This error has been
- solved.</p>
- <p>
- Own Id: OTP-9398</p>
- </item>
- <item>
- <p>
- Add a proplist() type</p>
- <p>
- Recently I was adding specs to an API and found that
- there is no canonical proplist() type defined. (Thanks to
- Ryan Zezeski)</p>
- <p>
- Own Id: OTP-9499</p>
- </item>
- <item>
- <p> XML files have been corrected. </p>
- <p>
- Own Id: OTP-9550 Aux Id: OTP-9541 </p>
- </item>
- <item>
- <p>
- If a test suite would start with a test case group
- defined without the init_per_group/2 and end_per_group/2
- function, init_per_suite/1 would not execute initially
- and logging of the test run would fail. This error has
- been fixed.</p>
- <p>
- Own Id: OTP-9584</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- A new option, 'logopts', has been introduced, to make it
- possible to modify some aspects of the logging behaviour
- in Common Test (or Test Server). For example, whenever an
- io printout is made, test_server adds newline (\n) to the
- end of the output string. This may not always be a
- preferred action and can therefore be disabled by means
- of "ct_run ... -logopts no_nl" (or ct:run_test([...,
- {logopts,[no_nl]}])). A new framework callback function,
- get_logopts/0, has been introduced (see the ct_framework
- module for details).</p>
- <p>
- Own Id: OTP-9372 Aux Id: OTP-9396 </p>
- </item>
- <item>
- <p>
- A new option, 'logopts', has been introduced, to make it
- possible to modify some aspects of the logging behaviour
- in Common Test (or Test Server). For example, if the html
- version of the test suite source code should not be
- generated during the test run (and consequently be
- unavailable in the log file system), the feature may be
- disabled by means of "ct_run ... -logopts no_src" (or
- ct:run_test([..., {logopts,[no_src]}])). A new framework
- callback function, get_logopts/0, has been introduced
- (see the ct_framework module for details).</p>
- <p>
- Own Id: OTP-9396 Aux Id: seq11869, OTP-9372 </p>
- </item>
- <item>
- <p>
- It is now possible to use a tuple {M,F,A}, or a fun, as
- timetrap specification in the suite info function or test
- case info functions. The function must return a valid
- timeout value, as documented in the common_test man page
- and in the User's Guide.</p>
- <p>
- Own Id: OTP-9501 Aux Id: seq11894 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.4.4</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- It was previously not possible to use timetrap value
- 'infinity' with ct:timetrap/1. This has been fixed.</p>
- <p>
- Own Id: OTP-9159</p>
- </item>
- <item>
- <p>
- A bug that made it impossible to cancel the previous
- timetrap when calling ct:timetrap/1 has been corrected.</p>
- <p>
- Own Id: OTP-9233 Aux Id: OTP-9159 </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- When running tests with auto-compilation disabled, Common
- Test could only display the test suite source code on
- html format in the test case log if the source file was
- located in the same directory as the pre-compiled suite.
- This has been modified so that Common Test now tries to
- locate the source file by means of the test suite module
- info (Suite:module_info/1). As a result, a suite may now
- be compiled to a different output directory (e.g.
- $MYTEST/bin) than the source code directory (e.g.
- $MYTEST/src), without the source-code-to-html generation
- being affected.</p>
- <p>
- Own Id: OTP-9138</p>
- </item>
- <item>
- <p>
- It is now possible to return a tuple {fail,Reason} from
- init_per_testcase/2. The result is that the associated
- test case gets logged as failed without ever executing.</p>
- <p>
- Own Id: OTP-9160 Aux Id: seq11502 </p>
- </item>
- <item>
- <p>
- Added DragonflyBSD check in test_server configure.</p>
- <p>
- Own Id: OTP-9249</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.4.3</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Updated the ts*.config files to contain information
- relevant to testing Erlang/OTP in an open source
- environment.</p>
- <p>
- Own Id: OTP-9017</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Alpha release of Common Test Hooks (CTH). CTHs allow the
- users of common test to abtract out common behaviours
- from test suites in a much more elegant and flexible way
- than was possible before. Note that the addition of this
- feature may introduce minor changes in the undocumented
- behaviour of the interface inbetween common_test and
- test_server.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-8851</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.4.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>Miscellaneous updates</p>
- <p>
- Own Id: OTP-8976</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.4.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Returning {return_group_result,failed} from end_per_group
- in a group that is part of a sequence, did not cause the
- proceeding cases (or groups) to get skipped. This has
- been fixed.</p>
- <p>
- Own Id: OTP-8753 Aux Id: seq11644 </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Common Test has been updated to handle start options and
- test specification terms for test case groups (and test
- cases in groups). Also, an option named 'label', has been
- added that associates the test run with a name that
- Common Test prints in the overview HTML logs.</p>
- <p>
- Own Id: OTP-8725 Aux Id: OTP-8727 </p>
- </item>
- <item>
- <p>
- It is now possible to skip all tests in a suite, or a
- group, by returning {fail,Reason} from the end_tc/5
- framework function for init_per_suite, or init_per_group.</p>
- <p>
- Own Id: OTP-8805 Aux Id: seq11664 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.4</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Returning {fail,Reason} from the framework end_tc
- function was not handled properly by Test Server for all
- test suite functions.</p>
- <p>
- Own Id: OTP-8492 Aux Id: seq11502 </p>
- </item>
- <item>
- <p>
- If the framework end_tc function would hang and get
- aborted by Test Server, there was no indication of
- failure in the logs. This has been fixed.</p>
- <p>
- Own Id: OTP-8682 Aux Id: seq11504 </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- It is now possible for the Test Server framework end_tc
- function to change the status of the test case from ok or
- auto-skipped to failed by returning {fail,Reason}.</p>
- <p>
- Own Id: OTP-8495 Aux Id: seq11502 </p>
- </item>
- <item>
- <p>
- Test Server will now call the end_per_testcase/2 function
- even if the test case has been terminated explicitly
- (with abort_current_testcase/1), or after a timetrap
- timeout. Under these circumstances the return value of
- end_per_testcase is completely ignored. Therefore the
- function will not be able to change the reason for test
- case termination by returning {fail,Reason}, nor will it
- be able to save data with {save_config,Data}.</p>
- <p>
- Own Id: OTP-8500 Aux Id: seq11521 </p>
- </item>
- <item>
- <p>
- Previously, a repeat property of a test case group
- specified the number of times the group should be
- repeated after the main test run. I.e. {repeat,N} would
- case the group to execute 1+N times. To be consistent
- with the behaviour of the run_test repeat option, this
- has been changed. N now specifies the absolute number of
- executions instead.</p>
- <p>
- Own Id: OTP-8689 Aux Id: seq11502 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.3.6</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- The Test Server parse transform did not handle bit string
- comprehensions. This has been fixed.</p>
- <p>
- Own Id: OTP-8458 Aux Id: OTP-8311 </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The tc_status value in the Config list for a test case
- that has failed because of a timetrap timeout, has
- changed from {tc_status,timeout} to
- {tc_status,timetrap_timeout}.</p>
- <p>
- Own Id: OTP-8302</p>
- </item>
- <item>
- <p>The documentation is now possible to build in an open
- source environment after a number of bugs are fixed and
- some features are added in the documentation build
- process. </p>
- <p>- The arity calculation is updated.</p>
- <p>- The module prefix used in the function names for
- bif's are removed in the generated links so the links
- will look like
- "http://www.erlang.org/doc/man/erlang.html#append_element-2"
- instead of
- "http://www.erlang.org/doc/man/erlang.html#erlang:append_element-2".</p>
- <p>- Enhanced the menu positioning in the html
- documentation when a new page is loaded.</p>
- <p>- A number of corrections in the generation of man
- pages (thanks to Sergei Golovan)</p>
- <p>- The legal notice is taken from the xml book file so
- OTP's build process can be used for non OTP
- applications.</p>
- <p>
- Own Id: OTP-8343</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.3.5</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- If the init_per_testcase/2 function fails, the test case
- now gets marked and counted as auto skipped, not user
- skipped (which would previously happen).</p>
- <p>
- Own Id: OTP-8289</p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The documentation is now built with open source tools
- (xsltproc and fop) that exists on most platforms. One
- visible change is that the frames are removed.</p>
- <p>
- Own Id: OTP-8201</p>
- </item>
- <item>
- <p>
- It is now possible to fail a test case from the
- end_per_testcase/2 function, by returning {fail,Reason}.</p>
- <p>
- Own Id: OTP-8284</p>
- </item>
- <item>
- <p>
- It is now possible to fail a test case by having the
- end_tc/3 framework function return {fail,Reason} for the
- test case.</p>
- <p>
- Own Id: OTP-8285</p>
- </item>
- <item>
- <p>
- The test_server framework API (e.g. the end_tc/3
- function) has been modified. See the test_server_ctrl
- documentation for details.</p>
- <p>
- Own Id: OTP-8286 Aux Id: OTP-8285, OTP-8287 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.3.4</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- When running a suite starting with a test case group,
- Test Server crashed if init_per_suite/1 exited or
- returned skip. This has been fixed.</p>
- <p>
- Own Id: OTP-8105 Aux Id: OTP-8089 </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Various updates and fixes in Common Test and Test Server.</p>
- <p>
- Own Id: OTP-8045 Aux Id: OTP-8089,OTP-8105,OTP-8163 </p>
- </item>
- <item>
- <p>
- Errors in coverage data collection and analysis were
- difficult to detect. The logging has been improved so
- that more information about e.g. imported and missing
- modules is printed to the html log files.</p>
- <p>
- Own Id: OTP-8163 Aux Id: seq11374 </p>
- </item>
- <item>
- <p>
- The Common Test HTML overview pages have been improved.
- It is now possible to see if a test case has been skipped
- explicitly or because a configuration function has
- failed. Also, the history page (all_runs.html) now has
- scrolling text displaying the test names. The old format
- (showing names as a truncated string) can still be
- generated by means of the flag/option 'basic_html'.</p>
- <p>
- Own Id: OTP-8177</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.3.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Various corrections and improvements of Common Test and
- Test Server.</p>
- <p>
- Own Id: OTP-7981</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.3.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Minor updates and corrections.</p>
- <p>
- Own Id: OTP-7897</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.3</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The conf case in Test Server has been extended with
- properties that make it possible to execute test cases in
- parallel, in sequence and in shuffled order. It is now
- also possible to repeat test cases according to different
- criterias. The properties can be combined, making it
- possible to e.g. repeat a conf case a certain number of
- times and execute the test cases in different (random)
- order every time. The properties are specified in a list
- in the conf case definition: {conf, Properties, InitCase,
- TestCases, EndCase}. The available properties are:
- parallel, sequence, shuffle, repeat, repeat_until_all_ok,
- repeat_until_any_ok, repeat_until_any_fail,
- repeat_until_all_fail.</p>
- <p>
- Own Id: OTP-7511 Aux Id: OTP-7839 </p>
- </item>
- <item>
- <p>The test server starts Cover on nodes of the same
- version as the test server itself only.</p>
- <p>
- Own Id: OTP-7699</p>
- </item>
- <item>
- <p>
- The Erlang mode for Emacs has been updated with new and
- modified skeletons for Common Test and TS. Syntax for
- test case groups in Common Test (and conf cases with
- properties in TS) has been added and a new minimal Common
- Test suite skeleton has been introduced.</p>
- <p>
- Own Id: OTP-7856</p>
- </item>
- </list>
- </section>
-
-</section>
-<section><title>Test_Server 3.2.4.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- The step functionality in Common Test (based on
- interaction with Debugger) was broken. This has been
- fixed, and some new step features have also been added.
- Please see the Common Test User's Guide for details.</p>
- <p>
- Own Id: OTP-7800 Aux Id: seq11106 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.2.4</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Miscellaneous updates.</p>
- <p>
- Own Id: OTP-7527</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.2.3</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- When a testcase terminated due to a timetrap, io sent to
- the group leader from framework:end_tc/3 (using
- ct:pal/2/3 or ct:log/2/3) would cause deadlock. This has
- been fixed.</p>
- <p>
- Own Id: OTP-7447 Aux Id: seq11010 </p>
- </item>
- </list>
- </section>
-
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Various updates and improvements, plus some minor bug
- fixes, have been implemented in Common Test and Test
- Server.</p>
- <p>
- Own Id: OTP-7112</p>
- </item>
- <item>
- <p>
- It is now possible, by means of the new function
- ct:abort_current_testcase/1 or
- test_server_ctrl:abort_current_testcase/1, to abort the
- currently executing test case.</p>
- <p>
- Own Id: OTP-7518 Aux Id: OTP-7112 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.2.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p><c>erlang:system_info/1</c> now accepts the
- <c>logical_processors</c>, and <c>debug_compiled</c>
- arguments. For more info see the, <c>erlang(3)</c>
- documentation.</p> <p>The scale factor returned by
- <c>test_server:timetrap_scale_factor/0</c> is now also
- effected if the emulator uses a larger amount of
- scheduler threads than the amount of logical processors
- on the system. </p>
- <p>
- Own Id: OTP-7175</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.2.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- When init_per_suite or end_per_suite terminated due to
- runtime failure, test_server failed to format the line
- number information properly and crashed. This error has
- now been fixed.</p>
- <p>
- Own Id: OTP-7091</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Test_Server 3.2.0</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Test Server is a portable test server for automated
- application testing. The server can run test suites on
- local or remote targets and log progress and results to
- HTML pages. The main purpose of Test Server is to act as
- engine inside customized test tools. A callback interface
- for such framework applications is provided.</p>
- <p>
- Own Id: OTP-6989</p>
- </item>
- </list>
- </section>
-
-</section>
-
-</chapter>
-
diff --git a/lib/test_server/doc/src/notes_history.xml b/lib/test_server/doc/src/notes_history.xml
deleted file mode 100644
index ca7880d74f..0000000000
--- a/lib/test_server/doc/src/notes_history.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2006</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Server Release Notes History</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
-
- <section>
- <title>Test Server 3.1.1</title>
-
- <section>
- <title>Improvements and new features</title>
- <list type="bulleted">
- <item>
- <p>Added functions <c>test_server:break/1</c> and
- <c>test_server:continue/0</c> for semiautomatic testing.</p>
- <p><c>test_server:timetrap/1</c> can now also take
- <c>{hours,H} | {minutes,M | {seconds,S}</c>.</p>
- <p>Added function
- <c>test_server_ctrl:multiply_timetraps/1</c>,
- <c>test_server_ctrl:add_case/3</c>,
- <c>test_server_ctrl:add_cases/2/3</c>.</p>
- <p>Added test suite functions <c>init_per_suite/1</c> and
- <c>end_per_suite/1</c>.</p>
- <p><c>fin_per_testcase/2</c> is changed to
- <c>end_per_testcase/2</c>. <c>fin_per_testcase</c> is kept
- for backwards compatibility.</p>
- <p>Added support for writing own test server frameworks.
- Callback functions <c>init_tc/1</c>, <c>end_tc/3</c>,
- <c>get_suite/2</c>, <c>report/2</c>, <c>warn/1</c>.</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Test Server 3.1</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Added the options <c>cover</c> and <c>cover_details</c>
- to <c>ts:run</c>. When one of these options is used,
- the tested application will be cover compiled
- before the test is run. The cover compiled code will also
- be loaded on all slave or peer nodes started with
- <c>test_server:start_node</c>. When the test is completed
- coverage data from all nodes is collected and merged, and
- presented in the coverage log to which there will be a link
- from the test suite result page (i.e. the one with the
- heading "Test suite ... results").</p>
- <p>The <c>cover_details</c> option will do
- <c>cover:analyse_to_file</c> for each cover compiled module,
- while the <c>cover</c> option only will produce a list of
- modules and the number of covered/uncovered lines in each
- module.</p>
- <p>To make it possible to run all test from a script (like in
- the OTP daily builds), the following is added:
- <c>ts:run([all_tests | Options])</c>.</p>
- <p>This means that e.g. the following is possible:
- <c>erl -s ts run all_tests batch cover</c>.</p>
- <p>Note that it is also possible to run tests with cover even
- if you don't use <c>ts</c>.
- See <c>test_server_ctrl:cover/2/3</c>.</p>
- <p>Own Id: OTP-4703</p>
- </item>
- <item>
- <p>Removed module <c>ts_save.erl</c> and function
- <c>ts:save/0/1</c><em>(incompatible)</em>.</p>
- <p>Added config variable <c>ipv6_hosts</c> to
- <c>ts:install/1</c> and test spec file.</p>
- <p>No longer removing duplicates of test cases from test spec
- <em>(incompatible)</em>.</p>
- <p>Added function <c>test_server:run_on_shielded_node/2</c>.</p>
- <p>Creation of html files for test suite source does no longer
- crash if suite contains more than 9999 lines of code.</p>
- <p>Added functionality for cross cover compilation,
- i.e. collection of cover data from all tests.</p>
- <p>Multiplying timetrap times with 10 when running with cover.</p>
- <p>Added <c>ts:r/3</c> for running tests with cover.</p>
- <p>*** POTENTIAL INCOMPATIBILITY ***</p>
- <p>Own Id: OTP-5040</p>
- </item>
- </list>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/test_server/doc/src/part.xml b/lib/test_server/doc/src/part.xml
deleted file mode 100644
index 685ed16a94..0000000000
--- a/lib/test_server/doc/src/part.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Server User's Guide</title>
- <prepared></prepared>
- <docno></docno>
- <date>2002-07-11</date>
- <rev></rev>
- </header>
- <description>
- <p><em>Test Server</em> is a portable test server for
- automated application testing. The server can run test suites
- and log progress and results to HTML
- pages. The main purpose of Test Server is to act as engine
- inside customized test tools. A callback interface for
- such framework applications is provided.</p>
- </description>
- <xi:include href="basics_chapter.xml"/>
- <xi:include href="test_spec_chapter.xml"/>
- <xi:include href="write_test_chapter.xml"/>
- <xi:include href="run_test_chapter.xml"/>
- <xi:include href="write_framework_chapter.xml"/>
- <xi:include href="example_chapter.xml"/>
-</part>
-
diff --git a/lib/test_server/doc/src/part_notes.xml b/lib/test_server/doc/src/part_notes.xml
deleted file mode 100644
index 8cb9b6c591..0000000000
--- a/lib/test_server/doc/src/part_notes.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Server Release Notes</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The <em>Test Server</em> is a portable test server for
- application testing. The test server can run automatic test suites
- and log progress and results to HTML
- pages. It also provides some support for test suite authors.</p>
- <p>For information about older versions, see
- <url href="part_notes_history_frame.html">Release Notes History</url>.</p>
- </description>
- <xi:include href="notes.xml"/>
-</part>
-
diff --git a/lib/test_server/doc/src/part_notes_history.xml b/lib/test_server/doc/src/part_notes_history.xml
deleted file mode 100644
index 468b5aa8ba..0000000000
--- a/lib/test_server/doc/src/part_notes_history.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part>
- <header>
- <copyright>
- <year>2006</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Server Release Notes History</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The <em>Test Server</em> is a portable test server for
- application testing. The test server can run automatic test suites
- and log progress and results to HTML
- pages. It also provides some support for test suite authors.</p>
- </description>
- <include file="notes_history"></include>
-</part>
-
diff --git a/lib/test_server/doc/src/ref_man.xml b/lib/test_server/doc/src/ref_man.xml
deleted file mode 100644
index 1b06d9750b..0000000000
--- a/lib/test_server/doc/src/ref_man.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Server Reference Manual</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>ref_man.xml</file>
- </header>
- <description>
- <p><em>Test Server</em> is a portable test server for
- automated application testing. The server can run test suites
- and log progress and results to HTML
- pages. The main purpose of Test Server is to act as engine
- inside customized test tools. A callback interface for
- such framework applications is provided.</p>
- </description>
- <xi:include href="test_server_app.xml"/>
- <xi:include href="test_server_ctrl.xml"/>
- <xi:include href="test_server.xml"/>
-</application>
-
diff --git a/lib/test_server/doc/src/run_test_chapter.xml b/lib/test_server/doc/src/run_test_chapter.xml
deleted file mode 100644
index cb5b29c993..0000000000
--- a/lib/test_server/doc/src/run_test_chapter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Running Test Suites</title>
- <prepared>Siri Hansen</prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>run_test_chapter.xml</file>
- </header>
-
- <section>
- <title>Using the test server controller</title>
- <p>The test server controller provides a low level interface to
- all the Test Server functionality. It is possible to use this
- interface directly, but it is recommended to use a framework
- such as <em>Common Test</em> instead. If no existing framework
- suits your needs, you could of course build your own
- on top of the test server controller. Some information about how
- to do this can be found in the section named "Writing you own
- test server framework" in the Test Server User's Guide.
- </p>
- <p>For information about using the controller directly, please see
- all available functions in the reference manual for
- <c>test_server_ctrl</c>.
- </p>
- </section>
-</chapter>
-
diff --git a/lib/test_server/doc/src/test_server.xml b/lib/test_server/doc/src/test_server.xml
deleted file mode 100644
index 96ff6de3ba..0000000000
--- a/lib/test_server/doc/src/test_server.xml
+++ /dev/null
@@ -1,853 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>2007</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>test_server</title>
- <prepared>Siri Hansen</prepared>
- <responsible></responsible>
- <docno></docno>
- <approved></approved>
- <checked></checked>
- <date></date>
- <rev></rev>
- <file>test_server_ref.sgml</file>
- </header>
- <module>test_server</module>
- <modulesummary>This module provides support for test suite authors.</modulesummary>
- <description>
- <p>The <c>test_server</c> module aids the test suite author by providing
- various support functions. The supported functionality includes:
- </p>
- <list type="bulleted">
- <item>Logging and timestamping
- </item>
- <item>Capturing output to stdout
- </item>
- <item>Retrieving and flushing the message queue of a process
- </item>
- <item>Watchdog timers, process sleep, time measurement and unit
- conversion
- </item>
- <item>Private scratch directory for all test suites
- </item>
- <item>Start and stop of slave- or peer nodes</item>
- </list>
- <p>For more information on how to write test cases and for
- examples, please see the Test Server User's Guide.
- </p>
- </description>
-
- <section>
- <title>TEST SUITE SUPPORT FUNCTIONS</title>
- <p>The following functions are supposed to be used inside a test
- suite.
- </p>
- </section>
- <funcs>
- <func>
- <name>os_type() -> OSType</name>
- <fsummary>Returns the OS type of the target node</fsummary>
- <type>
- <v>OSType = term()</v>
- <d>This is the same as returned from <c>os:type/0</c></d>
- </type>
- <desc>
- <p>This function is equivalent to <c>os:type/0</c>. It is kept
- for backwards compatibility.</p>
- </desc>
- </func>
- <func>
- <name>fail()</name>
- <name>fail(Reason)</name>
- <fsummary>Makes the test case fail.</fsummary>
- <type>
- <v>Reason = term()</v>
- <d>The reason why the test case failed.</d>
- </type>
- <desc>
- <p>This will make the test suite fail with a given reason, or
- with <c>suite_failed</c> if no reason was given. Use this
- function if you want to terminate a test case, as this will
- make it easier to read the log- and HTML files. <c>Reason</c>
- will appear in the comment field in the HTML log.</p>
- </desc>
- </func>
- <func>
- <name>timetrap(Timout) -> Handle</name>
- <fsummary></fsummary>
- <type>
- <v>Timeout = integer() | {hours,H} | {minutes,M} | {seconds,S}</v>
- <v>H = M = S = integer()</v>
- <v>Pid = pid()</v>
- <d>The process that is to be timetrapped (<c>self()</c>by default)</d>
- </type>
- <desc>
- <p>Sets up a time trap for the current process. An expired
- timetrap kills the process with reason
- <c>timetrap_timeout</c>. The returned handle is to be given
- as argument to <c>timetrap_cancel</c> before the timetrap
- expires. If <c>Timeout</c> is an integer, it is expected to
- be milliseconds.</p>
- <note>
- <p>If the current process is trapping exits, it will not be killed
- by the exit signal with reason <c>timetrap_timeout</c>.
- If this happens, the process will be sent an exit signal
- with reason <c>kill</c> 10 seconds later which will kill the
- process. Information about the timetrap timeout will in
- this case not be found in the test logs. However, the
- error_logger will be sent a warning.</p>
- </note>
- </desc>
- </func>
- <func>
- <name>timetrap_cancel(Handle) -> ok</name>
- <fsummary>Cancels a timetrap.</fsummary>
- <type>
- <v>Handle = term()</v>
- <d>Handle returned from <c>timetrap</c></d>
- </type>
- <desc>
- <p>This function cancels a timetrap. This must be done before
- the timetrap expires.</p>
- </desc>
- </func>
- <func>
- <name>timetrap_scale_factor() -> ScaleFactor</name>
- <fsummary>Returns the scale factor for timeouts.</fsummary>
- <type>
- <v>ScaleFactor = integer()</v>
- </type>
- <desc>
- <p>This function returns the scale factor by which all timetraps
- are scaled. It is normally 1, but can be greater than 1 if
- the test_server is running <c>cover</c>, using a larger amount of
- scheduler threads than the amount of logical processors on the
- system, running under purify, valgrind or in a debug-compiled
- emulator. The scale factor can be used if you need to scale you
- own timeouts in test cases with same factor as the test_server
- uses.</p>
- </desc>
- </func>
- <func>
- <name>sleep(MSecs) -> ok</name>
- <fsummary>Suspens the calling task for a specified time.</fsummary>
- <type>
- <v>MSecs = integer() | float() | infinity</v>
- <d>The number of milliseconds to sleep</d>
- </type>
- <desc>
- <p>This function suspends the calling process for at least the
- supplied number of milliseconds. There are two major reasons
- why you should use this function instead of
- <c>timer:sleep</c>, the first being that the module
- <c>timer</c> may be unavailable at the time the test suite is
- run, and the second that it also accepts floating point
- numbers.</p>
- </desc>
- </func>
- <func>
- <name>adjusted_sleep(MSecs) -> ok</name>
- <fsummary>Suspens the calling task for a specified time.</fsummary>
- <type>
- <v>MSecs = integer() | float() | infinity</v>
- <d>The default number of milliseconds to sleep</d>
- </type>
- <desc>
- <p>This function suspends the calling process for at least the
- supplied number of milliseconds. The function behaves the same
- way as <c>test_server:sleep/1</c>, only <c>MSecs</c>
- will be multiplied by the 'multiply_timetraps' value, if set,
- and also automatically scaled up if 'scale_timetraps' is set
- to true (which it is by default).</p>
- </desc>
- </func>
- <func>
- <name>hours(N) -> MSecs</name>
- <name>minutes(N) -> MSecs</name>
- <name>seconds(N) -> MSecs</name>
- <fsummary></fsummary>
- <type>
- <v>N = integer()</v>
- <d>Value to convert to milliseconds.</d>
- </type>
- <desc>
- <p>Theese functions convert <c>N</c> number of hours, minutes
- or seconds into milliseconds.
- </p>
- <p>Use this function when you want to
- <c>test_server:sleep/1</c> for a number of seconds, minutes or
- hours(!).</p>
- </desc>
- </func>
- <func>
- <name>format(Format) -> ok</name>
- <name>format(Format, Args)</name>
- <name>format(Pri, Format)</name>
- <name>format(Pri, Format, Args)</name>
- <fsummary></fsummary>
- <type>
- <v>Format = string()</v>
- <d>Format as described for <c>io_:format</c>.</d>
- <v>Args = list()</v>
- <d>List of arguments to format.</d>
- </type>
- <desc>
- <p>Formats output just like <c>io:format</c> but sends the
- formatted string to a logfile. If the urgency value,
- <c>Pri</c>, is lower than some threshold value, it will also
- be written to the test person's console. Default urgency is
- 50, default threshold for display on the console is 1.
- </p>
- <p>Typically, the test person don't want to see everything a
- test suite outputs, but is merely interested in if the test
- cases succeeded or not, which the test server tells him. If he
- would like to see more, he could manually change the threshold
- values by using the <c>test_server_ctrl:set_levels/3</c>
- function.</p>
- </desc>
- </func>
- <func>
- <name>capture_start() -> ok</name>
- <name>capture_stop() -> ok</name>
- <name>capture_get() -> list()</name>
- <fsummary>Captures all output to stdout for a process.</fsummary>
- <desc>
- <p>These functions makes it possible to capture all output to
- stdout from a process started by the test suite. The list of
- characters captured can be purged by using <c>capture_get</c>.</p>
- </desc>
- </func>
- <func>
- <name>messages_get() -> list()</name>
- <fsummary>Empty the message queue.</fsummary>
- <desc>
- <p>This function will empty and return all the messages
- currently in the calling process' message queue.</p>
- </desc>
- </func>
- <func>
- <name>timecall(M, F, A) -> {Time, Value}</name>
- <fsummary>Measures the time needed to call a function.</fsummary>
- <type>
- <v>M = atom()</v>
- <d>The name of the module where the function resides.</d>
- <v>F = atom()</v>
- <d>The name of the function to call in the module.</d>
- <v>A = list()</v>
- <d>The arguments to supply the called function.</d>
- <v>Time = integer()</v>
- <d>The number of seconds it took to call the function.</d>
- <v>Value = term()</v>
- <d>Value returned from the called function.</d>
- </type>
- <desc>
- <p>This function measures the time (in seconds) it takes to
- call a certain function. The function call is <em>not</em>
- caught within a catch.</p>
- </desc>
- </func>
- <func>
- <name>do_times(N, M, F, A) -> ok</name>
- <name>do_times(N, Fun)</name>
- <fsummary>Calls MFA or Fun N times.</fsummary>
- <type>
- <v>N = integer()</v>
- <d>Number of times to call MFA.</d>
- <v>M = atom()</v>
- <d>Module name where the function resides.</d>
- <v>F = atom()</v>
- <d>Function name to call.</d>
- <v>A = list()</v>
- <d>Arguments to M:F.</d>
- </type>
- <desc>
- <p>Calls MFA or Fun N times. Useful for extensive testing of a
- sensitive function.</p>
- </desc>
- </func>
- <func>
- <name>m_out_of_n(M, N, Fun) -> ok | exit({m_out_of_n_failed, {R,left_to_do}}</name>
- <fsummary>Fault tolerant <c>do_times</c>.</fsummary>
- <type>
- <v>N = integer()</v>
- <d>Number of times to call the Fun.</d>
- <v>M = integer()</v>
- <d>Number of times to require a successful return.</d>
- </type>
- <desc>
- <p>Repeatedly evaluates the given function until it succeeds
- (doesn't crash) M times. If, after N times, M successful
- attempts have not been accomplished, the process crashes with
- reason {m_out_of_n_failed, {R,left_to_do}}, where R indicates
- how many cases that was still to be successfully completed.
- </p>
- <p>For example:
- </p>
- <p><c>m_out_of_n(1,4,fun() -> tricky_test_case() end)</c> <br></br>
-Tries to run tricky_test_case() up to 4 times, and is
- happy if it succeeds once.
- </p>
- <p><c>m_out_of_n(7,8,fun() -> clock_sanity_check() end)</c> <br></br>
-Tries running clock_sanity_check() up to 8 times,and
- allows the function to fail once. This might be useful if
- clock_sanity_check/0 is known to fail if the clock crosses an
- hour boundary during the test (and the up to 8 test runs could
- never cross 2 boundaries)</p>
- </desc>
- </func>
- <func>
- <name>call_crash(M, F, A) -> Result</name>
- <name>call_crash(Time, M, F, A) -> Result</name>
- <name>call_crash(Time, Crash, M, F, A) -> Result</name>
- <fsummary>Calls MFA and succeeds if it crashes.</fsummary>
- <type>
- <v>Result = ok | exit(call_crash_timeout) | exit({wrong_crash_reason, Reason})</v>
- <v>Crash = term()</v>
- <d>Crash return from the function.</d>
- <v>Time = integer()</v>
- <d>Timeout in milliseconds.</d>
- <v>M = atom()</v>
- <d>Module name where the function resides.</d>
- <v>F = atom()</v>
- <d>Function name to call.</d>
- <v>A = list()</v>
- <d>Arguments to M:F.</d>
- </type>
- <desc>
- <p>Spawns a new process that calls MFA. The call is considered
- successful if the call crashes with the gives reason
- (<c>Crash</c>) or any reason if not specified. The call must
- terminate within the given time (default <c>infinity</c>), or
- it is considered a failure.</p>
- </desc>
- </func>
- <func>
- <name>temp_name(Stem) -> Name</name>
- <fsummary>Returns a unique filename.</fsummary>
- <type>
- <v>Stem = string()</v>
- </type>
- <desc>
- <p>Returns a unique filename starting with <c>Stem</c> with
- enough extra characters appended to make up a unique
- filename. The filename returned is guaranteed not to exist in
- the filesystem at the time of the call.</p>
- </desc>
- </func>
- <func>
- <name>break(Comment) -> ok</name>
- <fsummary>Cancel all timetraps and wait for call to continue/0.</fsummary>
- <type>
- <v>Comment = string()</v>
- </type>
- <desc>
- <p><c>Comment</c> is a string which will be written in
- the shell, e.g. explaining what to do.</p>
- <p>This function will cancel all timetraps and pause the
- execution of the test case until the user executes the
- <c>continue/0</c> function. It gives the user the opportunity
- to interact with the erlang node running the tests, e.g. for
- debugging purposes or for manually executing a part of the
- test case.</p>
- <p>When the <c>break/1</c> function is called, the shell will
- look something like this:</p>
- <code type="none"><![CDATA[
- --- SEMIAUTOMATIC TESTING ---
- The test case executes on process <0.51.0>
-
-
- "Here is a comment, it could e.g. instruct to pull out a card"
-
-
- -----------------------------
-
- Continue with --> test_server:continue(). ]]></code>
- <p>The user can now interact with the erlang node, and when
- ready call <c>test_server:continue().</c></p>
- <p>Note that this function can not be used if the test is
- executed with <c>ts:run/0/1/2/3/4</c> in <c>batch</c> mode.</p>
- </desc>
- </func>
- <func>
- <name>continue() -> ok</name>
- <fsummary>Continue after break/1.</fsummary>
- <desc>
- <p>This function must be called in order to continue after a
- test case has called <c>break/1</c>.</p>
- </desc>
- </func>
- <func>
- <name>run_on_shielded_node(Fun, CArgs) -> term()</name>
- <fsummary>Execute a function a shielded node.</fsummary>
- <type>
- <v>Fun = function() (arity 0)</v>
- <d>Function to execute on the shielded node.</d>
- <v>CArg = string()</v>
- <d>Extra command line arguments to use when starting the shielded node.</d>
- </type>
- <desc>
- <p><c>Fun</c> is executed in a process on a temporarily created
- hidden node with a proxy for communication with the test server
- node. The node is called a shielded node (should have been called
- a shield node). If <c>Fun</c> is successfully executed, the result
- is returned. A peer node (see <c>start_node/3</c>) started from
- the shielded node will be shielded from test server node, i.e.
- they will not be aware of each other. This is useful when you want
- to start nodes from earlier OTP releases than the OTP release of
- the test server node.</p>
- <p>Nodes from an earlier OTP release can normally not be started
- if the test server hasn't been started in compatibility mode
- (see the <c>+R</c> flag in the <c>erl(1)</c> documentation) of
- an earlier release. If a shielded node is started in compatibility
- mode of an earlier OTP release than the OTP release of the test
- server node, the shielded node can start nodes of an earlier OTP
- release.</p>
- <note>
- <p>You <em>must</em> make sure that nodes started by the shielded
- node never communicate directly with the test server node.</p>
- </note>
- <note>
- <p>Slave nodes always communicate with the test server node;
- therefore, <em>never</em> start <em>slave nodes</em> from the
- shielded node, <em>always</em> start <em>peer nodes</em>.</p>
- </note>
- </desc>
- </func>
- <func>
- <name>start_node(Name, Type, Options) -> {ok, Node} | {error, Reason}</name>
- <fsummary>Start a node.</fsummary>
- <type>
- <v>Name = atom() | string()</v>
- <d>Name of the slavenode to start (as given to -sname or -name)</d>
- <v>Type = slave | peer</v>
- <d>The type of node to start.</d>
- <v>Options = [{atom(), term()]</v>
- <d>Tuplelist of options</d>
- </type>
- <desc>
- <p>This functions starts a node, possibly on a remote machine,
- and guarantees cross architecture transparency. Type is set to
- either <c>slave</c> or <c>peer</c>.
- </p>
- <p><c>slave</c> means that the new node will have a master,
- i.e. the slave node will terminate if the master terminates,
- TTY output produced on the slave will be sent back to the
- master node and file I/O is done via the master. The master is
- normally the target node unless the target is itself a slave.
- </p>
- <p><c>peer</c> means that the new node is an independent node
- with no master.
- </p>
- <p><c>Options</c> is a tuplelist which can contain one or more
- of
- </p>
- <taglist>
- <tag><c>{remote, true}</c></tag>
- <item>Start the node on a remote host. If not specified, the
- node will be started on the local host. Test cases that
- require a remote host will fail with a reasonable comment if
- no remote hosts are available at the time they are run.
- </item>
- <tag><c>{args, Arguments}</c></tag>
- <item>Arguments passed directly to the node. This is
- typically a string appended to the command line.
- </item>
- <tag><c>{wait, false}</c></tag>
- <item>Don't wait until the node is up. By default, this
- function does not return until the node is up and running,
- but this option makes it return as soon as the node start
- command is given..
- <br></br>
-Only valid for peer nodes
- </item>
- <tag><c>{fail_on_error, false}</c></tag>
- <item>Returns <c>{error, Reason}</c> rather than failing the
- test case.
- <br></br>
-Only valid for peer nodes. Note that slave nodes always
- act as if they had <c>fail_on_error=false</c></item>
- <tag><c>{erl, ReleaseList}</c></tag>
- <item>Use an Erlang emulator determined by ReleaseList when
- starting nodes, instead of the same emulator as the test
- server is running. ReleaseList is a list of specifiers,
- where a specifier is either {release, Rel}, {prog, Prog}, or
- 'this'. Rel is either the name of a release, e.g., "r12b_patched"
- or 'latest'. 'this' means using the same emulator as the test
- server. Prog is the name of an emulator executable. If the
- list has more than one element, one of them is picked
- randomly. (Only works on Solaris and Linux, and the test server
- gives warnings when it notices that nodes are not of the same
- version as itself.)
- <br></br>
- <br></br>
-
- When specifying this option to run a previous release, use
- <c>is_release_available/1</c> function to test if the given
- release is available and skip the test case if not.
- <br></br>
- <br></br>
-
- In order to avoid compatibility problems (may not appear right
- away), use a shielded node (see <c>run_on_shielded_node/2</c>)
- when starting nodes from different OTP releases than the test
- server.
- </item>
- <tag><c>{cleanup, false}</c></tag>
- <item>Tells the test server not to kill this node if it is
- still alive after the test case is completed. This is useful
- if the same node is to be used by a group of test cases.
- </item>
- <tag><c>{env, Env}</c></tag>
- <item><c>Env</c> should be a list of tuples <c>{Name, Val}</c>,
- where <c>Name</c> is the name of an environment variable, and
- <c>Val</c> is the value it is to have in the started node.
- Both <c>Name</c> and <c>Val</c> must be strings. The one
- exception is <c>Val</c> being the atom <c>false</c> (in
- analogy with <c>os:getenv/1</c>), which removes the
- environment variable. Only valid for peer nodes. Not
- available on VxWorks.</item>
- <tag><c>{start_cover, false}</c></tag>
- <item>By default the test server will start cover on all nodes
- when the test is run with code coverage analysis. To make
- sure cover is not started on a new node, set this option to
- <c>false</c>. This can be necessary if the connection to
- the node at some point will be broken but the node is
- expected to stay alive. The reason is that a remote cover
- node can not continue to run without its main node. Another
- solution would be to explicitly stop cover on the node
- before breaking the connection, but in some situations (if
- old code resides in one or more processes) this is not
- possible.</item>
- </taglist>
- </desc>
- </func>
- <func>
- <name>stop_node(NodeName) -> bool()</name>
- <fsummary>Stops a node</fsummary>
- <type>
- <v>NodeName = term()</v>
- <d>Name of the node to stop</d>
- </type>
- <desc>
- <p>This functions stops a node previously started with
- <c>start_node/3</c>. Use this function to stop any node you
- start, or the test server will produce a warning message in
- the test logs, and kill the nodes automatically unless it was
- started with the <c>{cleanup, false}</c> option.</p>
- </desc>
- </func>
- <func>
- <name>is_commercial() -> bool()</name>
- <fsummary>Tests whether the emulator is commercially supported</fsummary>
- <desc>
- <p>This function test whether the emulator is commercially supported
- emulator. The tests for a commercially supported emulator could be more
- stringent (for instance, a commercial release should always contain
- documentation for all applications).</p>
- </desc>
- </func>
-
- <func>
- <name>is_release_available(Release) -> bool()</name>
- <fsummary>Tests whether a release is available</fsummary>
- <type>
- <v>Release = string() | atom()</v>
- <d>Release to test for</d>
- </type>
- <desc>
- <p>This function test whether the release given by
- <c>Release</c> (for instance, "r12b_patched") is available
- on the computer that the test_server controller is running on.
- Typically, you should skip the test case if not.</p>
- <p>Caution: This function may not be called from the <c>suite</c>
- clause of a test case, as the test_server will deadlock.</p>
- </desc>
- </func>
- <func>
- <name>is_native(Mod) -> bool()</name>
- <fsummary>Checks whether the module is natively compiled or not</fsummary>
- <type>
- <v>Mod = atom()</v>
- <d>A module name</d>
- </type>
- <desc>
- <p>Checks whether the module is natively compiled or not</p>
- </desc>
- </func>
- <func>
- <name>app_test(App) -> ok | test_server:fail()</name>
- <name>app_test(App,Mode)</name>
- <fsummary>Checks an applications .app file for obvious errors</fsummary>
- <type>
- <v>App = term()</v>
- <d>The name of the application to test</d>
- <v>Mode = pedantic | tolerant</v>
- <d>Default is pedantic</d>
- </type>
- <desc>
- <p>Checks an applications .app file for obvious errors.
- The following is checked:
- </p>
- <list type="bulleted">
- <item>required fields
- </item>
- <item>that all modules specified actually exists
- </item>
- <item>that all requires applications exists
- </item>
- <item>that no module included in the application has export_all
- </item>
- <item>that all modules in the ebin/ dir is included (If
- <c>Mode==tolerant</c> this only produces a warning, as all
- modules does not have to be included)</item>
- </list>
- </desc>
- </func>
- <func>
- <name>appup_test(App) -> ok | test_server:fail()</name>
- <fsummary>Checks an applications .appup file for obvious errors</fsummary>
- <type>
- <v>App = term()</v>
- <d>The name of the application to test</d>
- </type>
- <desc>
- <p>Checks an applications .appup file for obvious errors.
- The following is checked:
- </p>
- <list type="bulleted">
- <item>syntax
- </item>
- <item>that .app file version and .appup file version match
- </item>
- <item>for non-library applications: validity of high-level upgrade
- instructions, specifying no instructions is explicitly allowed
- (in this case the application is not upgradeable)</item>
- <item>for library applications: that there is exactly one wildcard
- regexp clause restarting the application when upgrading or
- downgrading from any version</item>
- </list>
- </desc>
- </func>
- <func>
- <name>comment(Comment) -> ok</name>
- <fsummary>Print a comment on the HTML result page</fsummary>
- <type>
- <v>Comment = string()</v>
- </type>
- <desc>
- <p>The given String will occur in the comment field of the
- table on the HTML result page. If called several times, only
- the last comment is printed. comment/1 is also overwritten by
- the return value {comment,Comment} from a test case or by
- fail/1 (which prints Reason as a comment).</p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>TEST SUITE EXPORTS</title>
- <p>The following functions must be exported from a test suite
- module.
- </p>
- </section>
- <funcs>
- <func>
- <name>all(suite) -> TestSpec | {skip, Comment}</name>
- <fsummary>Returns the module's test specification</fsummary>
- <type>
- <v>TestSpec = list()</v>
- <v>Comment = string()</v>
- <d>This comment will be printed on the HTML result page</d>
- </type>
- <desc>
- <p>This function must return the test specification for the
- test suite module. The syntax of a test specification is
- described in the Test Server User's Guide.</p>
- </desc>
- </func>
- <func>
- <name>init_per_suite(Config0) -> Config1 | {skip, Comment}</name>
- <fsummary>Test suite initiation</fsummary>
- <type>
- <v>Config0 = Config1 = [tuple()]</v>
- <v>Comment = string()</v>
- <d>Describes why the suite is skipped</d>
- </type>
- <desc>
- <p>This function is called before all other test cases in the
- suite. <c>Config</c> is the configuration which can be modified
- here. Whatever is returned from this function is given as
- <c>Config</c> to the test cases.
- </p>
- <p>If this function fails, all test cases in the suite will be
- skipped.</p>
- </desc>
- </func>
- <func>
- <name>end_per_suite(Config) -> void()</name>
- <fsummary>Test suite finalization</fsummary>
- <type>
- <v>Config = [tuple()]</v>
- </type>
- <desc>
- <p>This function is called after the last test case in the
- suite, and can be used to clean up whatever the test cases
- have done. The return value is ignored.</p>
- </desc>
- </func>
- <func>
- <name>init_per_testcase(Case, Config0) -> Config1 | {skip, Comment}</name>
- <fsummary>Test case initiation</fsummary>
- <type>
- <v>Case = atom()</v>
- <v>Config0 = Config1 = [tuple()]</v>
- <v>Comment = string()</v>
- <d>Describes why the test case is skipped</d>
- </type>
- <desc>
- <p>This function is called before each test case. The
- <c>Case</c> argument is the name of the test case, and
- <c>Config</c> is the configuration which can be modified
- here. Whatever is returned from this function is given as
- <c>Config</c> to the test case.</p>
- </desc>
- </func>
- <func>
- <name>end_per_testcase(Case, Config) -> void()</name>
- <fsummary>Test case finalization</fsummary>
- <type>
- <v>Case = atom()</v>
- <v>Config = [tuple()]</v>
- </type>
- <desc>
- <p>This function is called after each test case, and can be
- used to clean up whatever the test case has done. The return
- value is ignored.</p>
- </desc>
- </func>
- <func>
- <name>Case(doc) -> [Decription]</name>
- <name>Case(suite) -> [] | TestSpec | {skip, Comment}</name>
- <name>Case(Config) -> {skip, Comment} | {comment, Comment} | Ok</name>
- <fsummary>A test case</fsummary>
- <type>
- <v>Description = string()</v>
- <d>Short description of the test case</d>
- <v>TestSpec = list()</v>
- <v>Comment = string()</v>
- <d>This comment will be printed on the HTML result page</d>
- <v>Ok = term()</v>
- <v>Config = [tuple()]</v>
- <d>Elements from the Config parameter can be read with the ?config macro, see section about test suite support macros</d>
- </type>
- <desc>
- <p>The <em>documentation clause</em> (argument <c>doc</c>) can
- be used for automatic generation of test documentation or test
- descriptions.
- </p>
- <p>The <em>specification clause</em> (argument <c>spec</c>)
- shall return an empty list, the test specification for the
- test case or <c>{skip,Comment}</c>. The syntax of a test
- specification is described in the Test Server User's Guide.
- </p>
- <p>The <em>execution clause</em> (argument <c>Config</c>) is
- only called if the specification clause returns an empty list.
- The execution clause is the real test case. Here you must call
- the functions you want to test, and do whatever you need to
- check the result. If something fails, make sure the process
- crashes or call <c>test_server:fail/0/1</c> (which also will
- cause the process to crash).
- </p>
- <p>You can return <c>{skip,Comment}</c> if you decide not to
- run the test case after all, e.g. if it is not applicable on
- this platform.
- </p>
- <p>You can return <c>{comment,Comment}</c> if you wish to
- print some information in the 'Comment' field on the HTML
- result page.
- </p>
- <p>If the execution clause returns anything else, it is
- considered a success, unless it is <c>{'EXIT',Reason}</c> or
- <c>{'EXIT',Pid,Reason}</c> which can't be distinguished from a
- crash, and thus will be considered a failure.
- </p>
- <p>A <em>conf test case</em> is a group of test cases with an
- init and a cleanup function. The init and cleanup functions
- are also test cases, but they have special rules:</p>
- <list type="bulleted">
- <item>They do not need a specification clause.</item>
- <item>They must always have the execution clause.</item>
- <item>They must return the <c>Config</c> parameter, a modified
- version of it or <c>{skip,Comment}</c> from the execution clause.</item>
- <item>The cleanup function may also return a tuple
- <c>{return_group_result,Status}</c>, which is used to return the
- status of the conf case to Test Server and/or to a conf case on a
- higher level. (<c>Status = ok | skipped | failed</c>).</item>
- <item><c>init_per_testcase</c> and <c>end_per_testcase</c> are
- not called before and after these functions.</item>
- </list>
- </desc>
- </func>
- </funcs>
-
-
- <section>
- <title>TEST SUITE SUPPORT MACROS</title>
- <p>There are some macros defined in the <c>test_server.hrl</c>
- that are quite useful for test suite programmers:
- </p>
- <p>The <em>config</em> macro, is used to
- retrieve information from the <c>Config</c> variable sent to all
- test cases. It is used with two arguments, where the first is the
- name of the configuration variable you wish to retrieve, and the
- second is the <c>Config</c> variable supplied to the test case
- from the test server.
- </p>
- <p>Possible configuration variables include:</p>
- <list type="bulleted">
- <item><c>data_dir</c> - Data file directory.</item>
- <item><c>priv_dir</c> - Scratch file directory.</item>
- <item><c>nodes</c> - Nodes specified in the spec file</item>
- <item><c>nodenames</c> - Generated nodenames.</item>
- <item>Whatever added by conf test cases or
- <c>init_per_testcase/2</c></item>
- </list>
- <p>Examples of the <c>config</c> macro can be seen in the Examples chapter
- in the user's guide.</p>
- <p>The <em>line</em> and <em>line_trace</em> macros are deprecated, see
- below.</p>
- </section>
-
- <section>
- <title>TEST SUITE LINE NUMBERS</title>
- <p>In the past, ERTS did not produce line numbers when generating
- stacktraces, test_server was thus unable to provide them when reporting
- test failures. It had instead two different mecanisms to do it: either by
- using the <c>line</c> macro or by using the <c>test_server_line</c> parse
- transform. Both are deprecated and should not be used in new tests
- anymore.</p>
- </section>
-</erlref>
-
diff --git a/lib/test_server/doc/src/test_server_app.xml b/lib/test_server/doc/src/test_server_app.xml
deleted file mode 100644
index 4830916561..0000000000
--- a/lib/test_server/doc/src/test_server_app.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE appref SYSTEM "appref.dtd">
-
-<appref>
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Server Application</title>
- <prepared>Siri Hansen</prepared>
- <responsible>Peter Andersson</responsible>
- <docno></docno>
- <approved></approved>
- <checked></checked>
- <date>2002-07-12</date>
- <rev>PA1</rev>
- <file>test_server_app.xml</file>
- </header>
- <app>test_server</app>
- <appsummary>Test Server for manual or automatic testing of Erlang code</appsummary>
- <description>
- <p><em>Test Server</em> is a portable test server for
- automated application testing. The server can run test suites
- and log progress and results to HTML
- pages. The main purpose of Test Server is to act as engine
- inside customized test tools. A callback interface for
- such framework applications is provided.</p>
- <p>In brief the test server supports:</p>
- <list type="bulleted">
- <item>Running multiple, concurrent test suites</item>
- <item>Test suites may contain other test suites, in a tree fashion</item>
- <item>Logging of the events in a test suite, on both suite and case levels</item>
- <item>HTML presentation of test suite results</item>
- <item>HTML presentation of test suite code</item>
- <item>Support for test suite authors, e.g. start/stop slave nodes</item>
- <item>Call trace on target and slave nodes</item>
- </list>
- <p>For information about how to write test cases and test suites,
- please see the Test Server User's Guide and the reference
- manual for the <c>test_server</c> module.
- </p>
- <p><em>Common Test</em> is an existing test tool application based on the
- OTP Test Server. Please read the Common Test User's Guide for more information.
- </p>
- </description>
-
- <section>
- <title>Configuration</title>
- <p>There are currently no configuration parameters available for
- this application.
- </p>
- </section>
-
- <section>
- <title>SEE ALSO</title>
- <p></p>
- </section>
-</appref>
-
diff --git a/lib/test_server/doc/src/test_server_ctrl.xml b/lib/test_server/doc/src/test_server_ctrl.xml
deleted file mode 100644
index 2762997ece..0000000000
--- a/lib/test_server/doc/src/test_server_ctrl.xml
+++ /dev/null
@@ -1,844 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>2007</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>The Test Server Controller</title>
- <prepared>Siri Hansen, Peter Andersson</prepared>
- <responsible></responsible>
- <docno></docno>
- <approved></approved>
- <checked></checked>
- <date></date>
- <rev></rev>
- <file>test_server_ctrl_ref.sgml</file>
- </header>
- <module>test_server_ctrl</module>
- <modulesummary>This module provides a low level interface to the Test Server.</modulesummary>
- <description>
- <p>The <c>test_server_ctrl</c> module provides a low level
- interface to the Test Server. This interface is normally
- not used directly by the tester, but through a framework built
- on top of <c>test_server_ctrl</c>.
- </p>
- <p>Common Test is such a framework, well suited for automated
- black box testing of target systems of any kind (not necessarily
- implemented in Erlang). Common Test is also a very useful tool for
- white box testing Erlang programs and OTP applications.
- Please see the Common Test User's Guide and reference manual for
- more information.
- </p>
- <p>If you want to write your own framework, some more information
- can be found in the chapter "Writing your own test server
- framework" in the Test Server User's Guide. Details about the
- interface provided by <c>test_server_ctrl</c> follows below.
- </p>
- </description>
- <funcs>
- <func>
- <name>start() -> Result</name>
- <fsummary>Starts the test server.</fsummary>
- <type>
- <v>Result = ok | {error, {already_started, pid()}</v>
- </type>
- <desc>
- <p>This function starts the test server.</p>
- </desc>
- </func>
- <func>
- <name>stop() -> ok</name>
- <fsummary>Stops the test server immediately.</fsummary>
- <desc>
- <p>This stops the test server and
- all its activity. The running test suite (if any) will be
- halted.</p>
- </desc>
- </func>
- <func>
- <name>add_dir(Name, Dir) -> ok</name>
- <name>add_dir(Name, Dir, Pattern) -> ok</name>
- <name>add_dir(Name, [Dir|Dirs]) -> ok</name>
- <name>add_dir(Name, [Dir|Dirs], Pattern) -> ok</name>
- <fsummary>Add a directory to the job queue.</fsummary>
- <type>
- <v>Name = term()</v>
- <d>The jobname for this directory.</d>
- <v>Dir = term()</v>
- <d>The directory to scan for test suites.</d>
- <v>Dirs = [term()]</v>
- <d>List of directories to scan for test suites.</d>
- <v>Pattern = term()</v>
- <d>Suite match pattern. Directories will be scanned for Pattern_SUITE.erl files.</d>
- </type>
- <desc>
- <p>Puts a collection of suites matching (*_SUITE) in given
- directories into the job queue. <c>Name</c> is an arbitrary
- name for the job, it can be any erlang term. If <c>Pattern</c>
- is given, only modules matching <c>Pattern*</c> will be added.</p>
- </desc>
- </func>
- <func>
- <name>add_module(Mod) -> ok</name>
- <name>add_module(Name, [Mod|Mods]) -> ok</name>
- <fsummary>Add a module to the job queue with or without a given name.</fsummary>
- <type>
- <v>Mod = atom()</v>
- <v>Mods = [atom()]</v>
- <d>The name(s) of the module(s) to add.</d>
- <v>Name = term()</v>
- <d>Name for the job.</d>
- </type>
- <desc>
- <p>This function adds a module or a list of modules, to the
- test servers job queue. <c>Name</c> may be any Erlang
- term. When <c>Name</c> is not given, the job gets the name of
- the module.</p>
- </desc>
- </func>
- <func>
- <name>add_case(Mod, Case) -> ok</name>
- <fsummary>Adds one test case to the job queue.</fsummary>
- <type>
- <v>Mod = atom()</v>
- <d>Name of the module the test case is in.</d>
- <v>Case = atom() </v>
- <d>Function name of the test case to add.</d>
- </type>
- <desc>
- <p>This function will add one test case to the job queue. The
- job will be given the module's name.</p>
- </desc>
- </func>
- <func>
- <name>add_case(Name, Mod, Case) -> ok</name>
- <fsummary>Equivalent to add_case/2, but with specified name.</fsummary>
- <type>
- <v>Name = string()</v>
- <d>Name to use for the test job.</d>
- </type>
- <desc>
- <p>Equivalent to <c>add_case/2</c>, but the test job will get
- the specified name.</p>
- </desc>
- </func>
- <func>
- <name>add_cases(Mod, Cases) -> ok</name>
- <fsummary>Adds a list of test cases to the job queue.</fsummary>
- <type>
- <v>Mod = atom()</v>
- <d>Name of the module the test case is in.</d>
- <v>Cases = [Case] </v>
- <v>Case = atom() </v>
- <d>Function names of the test cases to add.</d>
- </type>
- <desc>
- <p>This function will add one or more test cases to the job
- queue. The job will be given the module's name.</p>
- </desc>
- </func>
- <func>
- <name>add_cases(Name, Mod, Cases) -> ok</name>
- <fsummary>Equivalent to add_cases/2, but with specified name.</fsummary>
- <type>
- <v>Name = string()</v>
- <d>Name to use for the test job.</d>
- </type>
- <desc>
- <p>Equivalent to <c>add_cases/2</c>, but the test job will get
- the specified name.</p>
- </desc>
- </func>
- <func>
- <name>add_spec(TestSpecFile) -> ok | {error, nofile}</name>
- <fsummary>Adds a test specification file to the job queue.</fsummary>
- <type>
- <v>TestSpecFile = string()</v>
- <d>Name of the test specification file</d>
- </type>
- <desc>
- <p>This function will add the content of the given test
- specification file to the job queue. The job will be given the
- name of the test specification file, e.g. if the file is
- called <c>test.spec</c>, the job will be called <c>test</c>.
- </p>
- <p>See the reference manual for the test server application
- for details about the test specification file.</p>
- </desc>
- </func>
- <func>
- <name>add_dir_with_skip(Name, [Dir|Dirs], Skip) -> ok</name>
- <name>add_dir_with_skip(Name, [Dir|Dirs], Pattern, Skip) -> ok</name>
- <name>add_module_with_skip(Mod, Skip) -> ok</name>
- <name>add_module_with_skip(Name, [Mod|Mods], Skip) -> ok</name>
- <name>add_case_with_skip(Mod, Case, Skip) -> ok</name>
- <name>add_case_with_skip(Name, Mod, Case, Skip) -> ok</name>
- <name>add_cases_with_skip(Mod, Cases, Skip) -> ok</name>
- <name>add_cases_with_skip(Name, Mod, Cases, Skip) -> ok</name>
- <fsummary>Same purpose as functions listed above, but with extra Skip argument.</fsummary>
- <type>
- <v>Skip = [SkipItem]</v>
- <d>List of items to be skipped from the test.</d>
- <v>SkipItem = {Mod,Comment} | {Mod,Case,Comment} | {Mod,Cases,Comment}</v>
- <v>Mod = atom()</v>
- <d>Test suite name.</d>
- <v>Comment = string()</v>
- <d>Reason why suite or case is being skipped.</d>
- <v>Cases = [Case]</v>
- <v>Case = atom()</v>
- <d>Name of test case function.</d>
- </type>
- <desc>
- <p>These functions add test jobs just like the add_dir, add_module,
- add_case and add_cases functions above, but carry an additional
- argument, Skip. Skip is a list of items that should be skipped
- in the current test run. Test job items that occur in the Skip
- list will be logged as SKIPPED with the associated Comment.</p>
- </desc>
- </func>
- <func>
- <name>add_tests_with_skip(Name, Tests, Skip) -> ok</name>
- <fsummary>Adds different types of jobs to the run queue.</fsummary>
- <type>
- <v>Name = term()</v>
- <d>The jobname for this directory.</d>
- <v>Tests = [TestItem]</v>
- <d>List of jobs to add to the run queue.</d>
- <v>TestItem = {Dir,all,all} | {Dir,Mods,all} | {Dir,Mod,Cases}</v>
- <v>Dir = term()</v>
- <d>The directory to scan for test suites.</d>
- <v>Mods = [Mod]</v>
- <v>Mod = atom()</v>
- <d>Test suite name.</d>
- <v>Cases = [Case]</v>
- <v>Case = atom()</v>
- <d>Name of test case function.</d>
- <v>Skip = [SkipItem]</v>
- <d>List of items to be skipped from the test.</d>
- <v>SkipItem = {Mod,Comment} | {Mod,Case,Comment} | {Mod,Cases,Comment}</v>
- <v>Comment = string()</v>
- <d>Reason why suite or case is being skipped.</d>
- </type>
- <desc>
- <p>This function adds various test jobs to the test_server_ctrl
- job queue. These jobs can be of different type (all or specific suites
- in one directory, all or specific cases in one suite, etc). It is also
- possible to get particular items skipped by passing them along in the
- Skip list (see the add_*_with_skip functions above).</p>
- </desc>
- </func>
- <func>
- <name>abort_current_testcase(Reason) -> ok | {error,no_testcase_running}</name>
- <fsummary>Aborts the test case currently executing.</fsummary>
- <type>
- <v>Reason = term()</v>
- <d>The reason for stopping the test case, which will be printed in the log.</d>
- </type>
- <desc>
- <p>When calling this function, the currently executing test case will be aborted.
- It is the user's responsibility to know for sure which test case is currently
- executing. The function is therefore only safe to call from a function which
- has been called (or synchronously invoked) by the test case.</p>
- </desc>
- </func>
- <func>
- <name>set_levels(Console, Major, Minor) -> ok</name>
- <fsummary>Sets the levels of I/O.</fsummary>
- <type>
- <v>Console = integer()</v>
- <d>Level for I/O to be sent to console.</d>
- <v>Major = integer()</v>
- <d>Level for I/O to be sent to the major logfile.</d>
- <v>Minor = integer()</v>
- <d>Level for I/O to be sent to the minor logfile.</d>
- </type>
- <desc>
- <p>Determines where I/O from test suites/test server will
- go. All text output from test suites and the test server is
- tagged with a priority value which ranges from 0 to 100, 100
- being the most detailed. (see the section about log files in
- the user's guide). Output from the test cases (using
- <c>io:format/2</c>) has a detail level of 50. Depending on the
- levels set by this function, this I/O may be sent to the
- console, the major log file (for the whole test suite) or to
- the minor logfile (separate for each test case).
- </p>
- <p>All output with detail level:</p>
- <list type="bulleted">
- <item>Less than or equal to <c>Console</c> is displayed on
- the screen (default 1)
- </item>
- <item>Less than or equal to <c>Major</c> is logged in the
- major log file (default 19)
- </item>
- <item>Greater than or equal to <c>Minor</c> is logged in the
- minor log files (default 10)
- </item>
- </list>
- <p>To view the currently set thresholds, use the
- <c>get_levels/0</c> function.</p>
- </desc>
- </func>
- <func>
- <name>get_levels() -> {Console, Major, Minor}</name>
- <fsummary>Returns the current levels.</fsummary>
- <desc>
- <p>Returns the current levels. See <c>set_levels/3</c> for
- types.</p>
- </desc>
- </func>
- <func>
- <name>jobs() -> JobQueue</name>
- <fsummary>Returns the job queue.</fsummary>
- <type>
- <v>JobQueue = [{list(), pid()}]</v>
- </type>
- <desc>
- <p>This function will return all the jobs currently in the job
- queue.</p>
- </desc>
- </func>
- <func>
- <name>multiply_timetraps(N) -> ok</name>
- <fsummary>All timetraps started after this will be multiplied by N.</fsummary>
- <type>
- <v>N = integer() | infinity</v>
- </type>
- <desc>
- <p>This function should be called before a test is started
- which requires extended timetraps, e.g. if extensive tracing
- is used. All timetraps started after this call will be
- multiplied by <c>N</c>.</p>
- </desc>
- </func>
- <func>
- <name>scale_timetraps(Bool) -> ok</name>
- <fsummary>.</fsummary>
- <type>
- <v>Bool = true | false</v>
- </type>
- <desc>
- <p>This function should be called before a test is started.
- The parameter specifies if test_server should attempt
- to automatically scale the timetrap value in order to compensate
- for delays caused by e.g. the cover tool.</p>
- </desc>
- </func>
- <func>
- <name>get_timetrap_parameters() -> {N,Bool} </name>
- <fsummary>Read the parameter values that affect timetraps.</fsummary>
- <type>
- <v>N = integer() | infinity</v>
- <v>Bool = true | false</v>
- </type>
- <desc>
- <p>This function may be called to read the values set by
- <c>multiply_timetraps/1</c> and <c>scale_timetraps/1</c>.</p>
- </desc>
- </func>
- <func>
- <name>cover(Application,Analyse) -> ok</name>
- <name>cover(CoverFile,Analyse) -> ok</name>
- <name>cover(App,CoverFile,Analyse) -> ok</name>
- <fsummary>Informs the test_server controller that next test shall run with code coverage analysis.</fsummary>
- <type>
- <v>Application = atom()</v>
- <d>OTP application to cover compile</d>
- <v>CoverFile = string()</v>
- <d>Name of file listing modules to exclude from or include in cover compilation. The filename must include full path to the file.</d>
- <v>Analyse = details | overview</v>
- </type>
- <desc>
- <p>This function informs the test_server controller that next
- test shall run with code coverage analysis. All timetraps will
- automatically be multiplied by 10 when cover i run.
- </p>
- <p><c>Application</c> and <c>CoverFile</c> indicates what to
- cover compile. If <c>Application</c> is given, the default is
- that all modules in the <c>ebin</c> directory of the
- application will be cover compiled. The <c>ebin</c> directory
- is found by adding <c>ebin</c> to
- <c>code:lib_dir(Application)</c>.
- </p>
- <p>A <c>CoverFile</c> can have the following entries:</p>
- <code type="none">
-{exclude, all | ExcludeModuleList}.
-{include, IncludeModuleList}.
-{cross, CrossCoverInfo}.</code>
- <p>Note that each line must end with a full
- stop. <c>ExcludeModuleList</c> and <c>IncludeModuleList</c>
- are lists of atoms, where each atom is a module name.
- </p>
-
- <p><c>CrossCoverInfo</c> is used when collecting cover data
- over multiple tests. Modules listed here are compiled, but
- they will not be analysed when the test is finished. See
- <seealso
- marker="#cross_cover_analyse-2">cross_cover_analyse/2</seealso>
- for more information about the cross cover mechanism and the
- format of <c>CrossCoverInfo</c>.
- </p>
- <p>If both an <c>Application</c> and a <c>CoverFile</c> is
- given, all modules in the application are cover compiled,
- except for the modules listed in <c>ExcludeModuleList</c>. The
- modules in <c>IncludeModuleList</c> are also cover compiled.
- </p>
- <p>If a <c>CoverFile</c> is given, but no <c>Application</c>,
- only the modules in <c>IncludeModuleList</c> are cover
- compiled.
- </p>
- <p><c>Analyse</c> indicates the detail level of the cover
- analysis. If <c>Analyse = details</c>, each cover compiled
- module will be analysed with
- <c>cover:analyse_to_file/1</c>. If <c>Analyse = overview</c>
- an overview of all cover compiled modules is created, listing
- the number of covered and not covered lines for each module.
- </p>
- <p>If the test following this call starts any slave or peer
- nodes with <c>test_server:start_node/3</c>, the same cover
- compiled code will be loaded on all nodes. If the loading
- fails, e.g. if the node runs an old version of OTP, the node
- will simply not be a part of the coverage analysis. Note that
- slave or peer nodes must be stopped with
- <c>test_server:stop_node/1</c> for the node to be part of the
- coverage analysis, else the test server will not be able to
- fetch coverage data from the node.
- </p>
- <p>When the test is finished, the coverage analysis is
- automatically completed, logs are created and the cover
- compiled modules are unloaded. If another test is to be run
- with coverage analysis, <c>test_server_ctrl:cover/2/3</c> must
- be called again.
- </p>
- </desc>
- </func>
- <func>
- <name>cross_cover_analyse(Level, Tests) -> ok</name>
- <fsummary>Analyse cover data collected from multiple tests</fsummary>
- <type>
- <v>Level = details | overview</v>
- <v>Tests = [{Tag,LogDir}]</v>
- <v>Tag = atom()</v>
- <d>Test identifier.</d>
- <v>LogDir = string()</v>
- <d>Log directory for the test identified by <c>Tag</c>. This
- can either be the <c>run.&lt;timestamp&gt;</c> directory or
- the parent directory of this (in which case the latest
- <c>run.&lt;timestamp&gt;</c> directory is chosen.</d>
- </type>
- <desc>
- <p>Analyse cover data collected from multiple tests. The modules
- analysed are the ones listed in <c>cross</c> statements in
- the cover files. These are modules that are heavily used by
- other tests than the one where they belong or are explicitly
- tested. They should then be listed as cross modules in the
- cover file for the test where they are used but do not
- belong. Se example below.</p>
- <p>This function should be run after all tests are completed,
- and the result will be stored in a file called
- <c>cross_cover.html</c> in the <c>run.&lt;timestamp&gt;</c>
- directory of the test the modules belong to.</p>
- <p>Note that the function can be executed on any node, and it
- does not require <c>test_server_ctrl</c> to be started first.</p>
- <p>The <c>cross</c> statement in the cover file must be like this:</p>
- <code type="none">
-{cross,[{Tag,Modules}]}.</code>
- <p>where <c>Tag</c> is the same as <c>Tag</c> in the
- <c>Tests</c> parameter to this function and <c>Modules</c> is a
- list of module names (atoms).</p>
- <p><em>Example:</em></p>
- <p>If the module <c>m1</c> belongs to system <c>s1</c> but is
- heavily used also in the tests for another system <c>s2</c>,
- then the cover files for the two systems' tests could be like
- this:</p>
-<code type="none">
-s1.cover:
- {include,[m1]}.
-
-s2.cover:
- {include,[....]}. % modules belonging to system s2
- {cross,[{s1,[m1]}]}.</code>
- <p>When the tests for both <c>s1</c> and <c>s2</c> are completed, run</p>
-<code type="none">
-test_server_ctrl:cross_cover_analyse(Level,[{s1,S1LogDir},{s2,S2LogDir}])
-</code>
-
- <p>and the accumulated cover data for <c>m1</c> will be written to
- <c>S1LogDir/[run.&lt;timestamp&gt;/]cross_cover.html</c>.</p>
- <p>Note that the <c>m1</c> module will also be presented in the
- normal coverage log for <c>s1</c> (due to the include statement in
- <c>s1.cover</c>), but that only includes the coverage achieved by the
- <c>s1</c> test itself.</p>
- <p>The Tag in the <c>cross</c> statement in the cover file has
- no other purpose than mapping the list of modules
- (<c>[m1]</c> in the example above) to the correct log
- directory where it should be included in the
- <c>cross_cover.html</c> file (<c>S1LogDir</c> in the example
- above). I.e. the value of <c>Tag</c> has no meaning, it
- could be <c>foo</c> as well as <c>s1</c> above, as long as
- the same <c>Tag</c> is used in the cover file and in the
- call to this function.</p>
- </desc>
- </func>
- <func>
- <name>trc(TraceInfoFile) -> ok | {error, Reason}</name>
- <fsummary>Starts call trace on target and slave nodes</fsummary>
- <type>
- <v>TraceInfoFile = atom() | string()</v>
- <d>Name of a file defining which functions to trace and how</d>
- </type>
- <desc>
- <p>This function starts call trace on target and on slave or
- peer nodes that are started or will be started by the test
- suites.
- </p>
- <p>Timetraps are not extended automatically when tracing is
- used. Use <c>multiply_timetraps/1</c> if necessary.
- </p>
- <p>Note that the trace support in the test server is in a very
- early stage of the implementation, and thus not yet as
- powerful as one might wish for.
- </p>
- <p>The trace information file specified by the
- <c>TraceInfoFile</c> argument is a text file containing one or
- more of the following elements:
- </p>
- <list type="bulleted">
- <item><c>{SetTP,Module,Pattern}.</c></item>
- <item><c>{SetTP,Module,Function,Pattern}.</c></item>
- <item><c>{SetTP,Module,Function,Arity,Pattern}.</c></item>
- <item><c>ClearTP.</c></item>
- <item><c>{ClearTP,Module}.</c></item>
- <item><c>{ClearTP,Module,Function}.</c></item>
- <item><c>{ClearTP,Module,Function,Arity}.</c></item>
- </list>
- <taglist>
- <tag><c>SetTP = tp | tpl</c></tag>
- <item>This is maps to the corresponding functions in the
- <c>ttb</c> module in the <c>observer</c>
- application. <c>tp</c> means set trace pattern on global
- function calls. <c>tpl</c> means set trace pattern on local
- and global function calls.
- </item>
- <tag><c>ClearTP = ctp | ctpl | ctpg</c></tag>
- <item>This is maps to the corresponding functions in the
- <c>ttb</c> module in the <c>observer</c>
- application. <c>ctp</c> means clear trace pattern (i.e. turn
- off) on global and local function calls. <c>ctpl</c> means
- clear trace pattern on local function calls only and <c>ctpg</c>
- means clear trace pattern on global function calls only.
- </item>
- <tag><c>Module = atom()</c></tag>
- <item>The module to trace
- </item>
- <tag><c>Function = atom()</c></tag>
- <item>The name of the function to trace
- </item>
- <tag><c>Arity = integer()</c></tag>
- <item>The arity of the function to trace
- </item>
- <tag><c>Pattern = [] | match_spec()</c></tag>
- <item>The trace pattern to set for the module or
- function. For a description of the match_spec() syntax,
- please turn to the User's guide for the runtime system
- (erts). The chapter "Match Specification in Erlang" explains
- the general match specification language.
- </item>
- </taglist>
- <p>The trace result will be logged in a (binary) file called
- <c>NodeName-test_server</c> in the current directory of the
- test server controller node. The log must be formatted using
- <c>ttb:format/1/2</c>.
- </p>
- </desc>
- </func>
- <func>
- <name>stop_trace() -> ok | {error, not_tracing}</name>
- <fsummary>Stops tracing on target and slave nodes.</fsummary>
- <desc>
- <p>This function stops tracing on target, and on slave or peer
- nodes that are currently running. New slave or peer nodes will
- no longer be traced after this.</p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>FUNCTIONS INVOKED FROM COMMAND LINE</title>
- <p>The following functions are supposed to be invoked from the
- command line using the <c>-s</c> option when starting the erlang
- node.</p>
- </section>
- <funcs>
- <func>
- <name>run_test(CommandLine) -> ok</name>
- <fsummary>Runs the tests specified on the command line.</fsummary>
- <type>
- <v>CommandLine = FlagList</v>
- </type>
- <desc>
- <p>This function is supposed to be invoked from the
- commandline. It starts the test server, interprets the
- argument supplied from the commandline, runs the tests
- specified and when all tests are done, stops the test server
- and returns to the Erlang prompt.
- </p>
- <p>The <c>CommandLine</c> argument is a list of command line
- flags, typically <c>['KEY1', Value1, 'KEY2', Value2, ...]</c>.
- The valid command line flags are listed below.
- </p>
- <p>Under a UNIX command prompt, this function can be invoked like this:
- <br></br>
-<c>erl -noshell -s test_server_ctrl run_test KEY1 Value1 KEY2 Value2 ... -s erlang halt</c></p>
- <p>Or make an alias (this is for unix/tcsh) <br></br>
-<c>alias erl_test 'erl -noshell -s test_server_ctrl run_test \!* -s erlang halt'</c></p>
- <p>And then use it like this <br></br>
-<c>erl_test KEY1 Value1 KEY2 Value2 ...</c> <br></br>
-</p>
- <p>The valid command line flags are</p>
- <taglist>
- <tag><c>DIR dir</c></tag>
- <item>Adds all test modules in the directory <c>dir</c> to
- the job queue.
- </item>
- <tag><c>MODULE mod</c></tag>
- <item>Adds the module <c>mod</c> to the job queue.
- </item>
- <tag><c>CASE mod case</c></tag>
- <item>Adds the case <c>case</c> in module <c>mod</c> to the
- job queue.
- </item>
- <tag><c>SPEC spec</c></tag>
- <item>Runs the test specification file <c>spec</c>.
- </item>
- <tag><c>SKIPMOD mod</c></tag>
- <item>Skips all test cases in the module <c>mod</c></item>
- <tag><c>SKIPCASE mod case</c></tag>
- <item>Skips the test case <c>case</c> in module <c>mod</c>.
- </item>
- <tag><c>NAME name</c></tag>
- <item>Names the test suite to something else than the
- default name. This does not apply to <c>SPEC</c> which keeps
- its names.
- </item>
- <tag><c>COVER app cover_file analyse</c></tag>
- <item>Indicates that the test should be run with cover
- analysis. <c>app</c>, <c>cover_file</c> and <c>analyse</c>
- corresponds to the parameters to
- <c>test_server_ctrl:cover/3</c>. If no cover file is used,
- the atom <c>none</c> should be given.
- </item>
- <tag><c>TRACE traceinfofile</c></tag>
- <item>Specifies a trace information file. When this option
- is given, call tracing is started on the target node and all
- slave or peer nodes that are started. The trace information
- file specifies which modules and functions to trace. See the
- function <c>trc/1</c> above for more information about the
- syntax of this file.
- </item>
- </taglist>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>FRAMEWORK CALLBACK FUNCTIONS</title>
- <p>A test server framework can be defined by setting the
- environment variable <c>TEST_SERVER_FRAMEWORK</c> to a module
- name. This module will then be framework callback module, and it
- must export the following function:</p>
- </section>
- <funcs>
- <func>
- <name>get_suite(Mod,Func) -> TestCaseList</name>
- <fsummary>Get subcases.</fsummary>
- <type>
- <v>Mod = atom()</v>
- <d>Test suite name.</d>
- <v>Func = atom()</v>
- <d>Name of test case.</d>
- <v>TestCaseList = [SubCase]</v>
- <d>List of test cases.</d>
- <v>SubCase = atom()</v>
- <d>Name of a case.</d>
- </type>
- <desc>
- <p>This function is called before a test case is started. The
- purpose is to retrieve a list of subcases. The default
- behaviour of this function should be to call
- <c>Mod:Func(suite)</c> and return the result from this call.</p>
- </desc>
- </func>
- <func>
- <name>init_tc(Mod,Func,Args0) -> {ok,Args1} | {skip,ReasonToSkip} | {auto_skip,ReasonToSkip} | {fail,ReasonToFail}</name>
- <fsummary>Preparation for a test case or configuration function.</fsummary>
- <type>
- <v>Mod = atom()</v>
- <d>Test suite name.</d>
- <v>Func = atom()</v>
- <d>Name of test case or configuration function.</d>
- <v>Args0 = Args1 = [tuple()]</v>
- <d>Normally Args = [Config]</d>
- <v>ReasonToSkip = term()</v>
- <d>Reason to skip the test case or configuration function.</d>
- <v>ReasonToFail = term()</v>
- <d>Reason to fail the test case or configuration function.</d>
- </type>
- <desc>
- <p>This function is called before a test case or configuration
- function starts. It is called on the process executing the function
- <c>Mod:Func</c>. Typical use of this function can be to alter
- the input parameters to the test case function (<c>Args</c>) or
- to set properties for the executing process.</p>
- <p>By returning <c>{skip,Reason}</c>, <c>Func</c> gets skipped.
- <c>Func</c> also gets skipped if <c>{auto_skip,Reason}</c> is returned,
- but then gets an auto skipped status (rather than user skipped).</p>
- <p>To fail <c>Func</c> immediately instead of executing it, return
- <c>{fail,ReasonToFail}.</c></p>
- </desc>
- </func>
- <func>
- <name>end_tc(Mod,Func,Status) -> ok | {fail,ReasonToFail}</name>
- <fsummary>Cleanup after a test case or configuration function.</fsummary>
- <type>
- <v>Mod = atom()</v>
- <d>Test suite name.</d>
- <v>Func = atom()</v>
- <d>Name of test case or configuration function.</d>
- <v>Status = {Result,Args} | {TCPid,Result,Args}</v>
- <d>The status of the test case or configuration function.</d>
- <v>ReasonToFail = term()</v>
- <d>Reason to fail the test case or configuration function.</d>
- <v>Result = ok | Skip | Fail</v>
- <d>The final result of the test case or configuration function.</d>
- <v>TCPid = pid()</v>
- <d>Pid of the process executing Func</d>
- <v>Skip = {skip,SkipReason}</v>
- <v>SkipReason = term() | {failed,{Mod,init_per_testcase,term()}}</v>
- <d>Reason why the function was skipped.</d>
- <v>Fail = {error,term()} | {'EXIT',term()} | {timetrap_timeout,integer()} |
- {testcase_aborted,term()} | testcase_aborted_or_killed |
- {failed,term()} | {failed,{Mod,end_per_testcase,term()}}</v>
- <d>Reason why the function failed.</d>
- <v>Args = [tuple()]</v>
- <d>Normally Args = [Config]</d>
- </type>
- <desc>
- <p>This function is called when a test case, or a configuration function,
- is finished. It is normally called on the process where the function
- <c>Mod:Func</c> has been executing, but if not, the pid of the test
- case process is passed with the <c>Status</c> argument.</p>
- <p>Typical use of the <c>end_tc/3</c> function can be to clean up
- after <c>init_tc/3</c>.</p>
- <p>If <c>Func</c> is a test case, it is possible to analyse the value of
- <c>Result</c> to verify that <c>init_per_testcase/2</c> and
- <c>end_per_testcase/2</c> executed successfully.</p>
- <p>It is possible with <c>end_tc/3</c> to fail an otherwise successful
- test case, by returning <c>{fail,ReasonToFail}</c>. The test case <c>Func</c>
- will be logged as failed with the provided term as reason.</p>
- </desc>
- </func>
- <func>
- <name>report(What,Data) -> ok</name>
- <fsummary>Progress report for test.</fsummary>
- <type>
- <v>What = atom()</v>
- <v>Data = term()</v>
- </type>
- <desc>
- <p>This function is called in order to keep the framework up-to-date with
- the progress of the test. This is useful e.g. if the
- framework implements a GUI where the progress information is
- constantly updated. The following can be reported:
- </p>
- <p><c>What = tests_start, Data = {Name,NumCases}</c><br></br>
- <c>What = loginfo, Data = [{topdir,TestRootDir},{rundir,CurrLogDir}]</c><br></br>
- <c>What = tests_done, Data = {Ok,Failed,{UserSkipped,AutoSkipped}}</c><br></br>
- <c>What = tc_start, Data = {{Mod,{Func,GroupName}},TCLogFile}</c><br></br>
- <c>What = tc_done, Data = {Mod,{Func,GroupName},Result}</c><br></br>
- <c>What = tc_user_skip, Data = {Mod,{Func,GroupName},Comment}</c><br></br>
- <c>What = tc_auto_skip, Data = {Mod,{Func,GroupName},Comment}</c><br></br>
- <c>What = framework_error, Data = {{FWMod,FWFunc},Error}</c></p>
- <p>Note that for a test case function that doesn't belong to a group,
- <c>GroupName</c> has value <c>undefined</c>, otherwise the name of the test
- case group.</p>
- </desc>
- </func>
- <func>
- <name>error_notification(Mod, Func, Args, Error) -> ok</name>
- <fsummary>Inform framework of crashing testcase or configuration function.</fsummary>
- <type>
- <v>Mod = atom()</v>
- <d>Test suite name.</d>
- <v>Func = atom()</v>
- <d>Name of test case or configuration function.</d>
- <v>Args = [tuple()]</v>
- <d>Normally Args = [Config]</d>
- <v>Error = {Reason,Location}</v>
- <v>Reason = term()</v>
- <d>Reason for termination.</d>
- <v>Location = unknown | [{Mod,Func,Line}]</v>
- <d>Last known position in Mod before termination.</d>
- <v>Line = integer()</v>
- <d>Line number in file Mod.erl.</d>
- </type>
- <desc>
- <p>This function is called as the result of function <c>Mod:Func</c> failing
- with Reason at Location. The function is intended mainly to aid
- specific logging or error handling in the framework application. Note
- that for Location to have relevant values (i.e. other than unknown),
- the <c>line</c> macro or <c>test_server_line</c> parse transform must
- be used. For details, please see the section about test suite line numbers
- in the <c>test_server</c> reference manual page.</p>
- </desc>
- </func>
- <func>
- <name>warn(What) -> boolean()</name>
- <fsummary>Ask framework if test server should issue a warning for What.</fsummary>
- <type>
- <v>What = processes | nodes</v>
- </type>
- <desc>
- <p>The test server checks the number of processes and nodes
- before and after the test is executed. This function is a
- question to the framework if the test server should warn when
- the number of processes or nodes has changed during the test
- execution. If <c>true</c> is returned, a warning will be written
- in the test case minor log file.</p>
- </desc>
- </func>
- <func>
- <name>target_info() -> InfoStr</name>
- <fsummary>Print info about the target system to the test case log.</fsummary>
- <type>
- <v>InfoStr = string() | ""</v>
- </type>
- <desc>
- <p>The test server will ask the framework for information about
- the test target system and print InfoStr in the test case
- log file below the host information.</p>
- </desc>
- </func>
- </funcs>
-</erlref>
-
diff --git a/lib/test_server/doc/src/test_spec_chapter.xml b/lib/test_server/doc/src/test_spec_chapter.xml
deleted file mode 100644
index 0a62010364..0000000000
--- a/lib/test_server/doc/src/test_spec_chapter.xml
+++ /dev/null
@@ -1,375 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Test Structure and Test Specifications</title>
- <prepared>Siri Hansen</prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>test_spec_chapter.xml</file>
- </header>
-
- <section>
- <title>Test structure</title>
- <p>A test consists of a set of test cases. Each test case is
- implemented as an erlang function. An erlang module implementing
- one or more test cases is called a test suite.
- </p>
- </section>
-
- <section>
- <title>Test specifications</title>
- <p>A test specification is a specification of which test suites
- and test cases to run and which to skip. A test specification can
- also group several test cases into conf cases with init and
- cleanup functions (see section about configuration cases
- below). In a test there can be test specifications on three
- different levels:
- </p>
- <p>The top level is a test specification file which roughly
- specifies what to test for a whole application. The test
- specification in such a file is encapsulated in a topcase
- command.
- </p>
- <p>Then there is a test specification for each test suite,
- specifying which test cases to run within the suite. The test
- specification for a test suite is returned from the
- <c>all(suite)</c> function in the test suite module.
- </p>
- <p>And finally there can be a test specification per test case,
- specifying sub test cases to run. The test specification for a
- test case is returned from the specification clause of the test
- case.
- </p>
- <p>When a test starts, the total test specification is built in a
- tree fashion, starting from the top level test specification.
- </p>
- <p>The following are the valid elements of a test
- specification. The specification can be one of these elements or a
- list with any combination of the elements:
- </p>
- <taglist>
- <tag><c>{Mod, Case}</c></tag>
- <item>This specifies the test case Mod:Case/1
- </item>
- <tag><c>{dir, Dir}</c></tag>
- <item>This specifies all modules <c>*_SUITE</c> in the directory
- <c>Dir</c></item>
- <tag><c>{dir, Dir, Pattern}</c></tag>
- <item>This specifies all modules <c>Pattern*</c> in the
- directory <c>Dir</c></item>
- <tag><c>{conf, Init, TestSpec, Fin}</c></tag>
- <item>This is a configuration case. In a test specification
- file, <c>Init</c> and <c>Fin</c> must be
- <c>{Mod,Func}</c>. Inside a module they can also be just
- <c>Func</c>. See the section named Configuration Cases below for
- more information about this.
- </item>
- <tag><c>{conf, Properties, Init, TestSpec, Fin}</c></tag>
- <item>This is a configuration case as explained above, but
- which also takes a list of execution properties for its group
- of test cases and nested sub-groups.
- </item>
- <tag><c>{make, Init, TestSpec, Fin}</c></tag>
- <item>This is a special version of a conf case which is only
- used by the test server framework <c>ts</c>. <c>Init</c> and
- <c>Fin</c> are make and unmake functions for a data
- directory. <c>TestSpec</c> is the test specification for the
- test suite owning the data directory in question. If the make
- function fails, all tests in the test suite are skipped. The
- difference between this "make case" and a normal conf case is
- that for the make case, <c>Init</c> and <c>Fin</c> are given with
- arguments (<c>{Mod,Func,Args}</c>).
- </item>
- <tag><c>Case</c></tag>
- <item>This can only be used inside a module, i.e. not a test
- specification file. It specifies the test case
- <c>CurrentModule:Case</c>.
- </item>
- </taglist>
- </section>
-
- <section>
- <title>Test Specification Files</title>
- <p>A test specification file is a text file containing the top
- level test specification (a topcase command), and possibly one or
- more additional commands. A "command" in a test specification file
- means a key-value tuple ended by a dot-newline sequence.
- </p>
- <p>The following commands are valid:
- </p>
- <taglist>
- <tag><c>{topcase, TestSpec}</c></tag>
- <item>This command is mandatory in all test specification
- files. <c>TestSpec</c> is the top level test specification of a
- test.
- </item>
- <tag><c>{skip, {Mod, Comment}}</c></tag>
- <item>This specifies that all cases in the module <c>Mod</c>
- shall be skipped. <c>Comment</c> is a string.
- </item>
- <tag><c>{skip, {Mod, Case, Comment}}</c></tag>
- <item>This specifies that the case <c>Mod:Case</c> shall be
- skipped.
- </item>
- <tag><c>{skip, {Mod, CaseList, Comment}}</c></tag>
- <item>This specifies that all cases <c>Mod:Case</c>, where
- <c>Case</c> is in <c>CaseList</c>, shall be skipped.
- </item>
- <tag><c>{nodes, Nodes}</c></tag>
- <item><c>Nodes</c> is a list of nodenames available to the test
- suite. It will be added to the <c>Config</c> argument to all
- test cases. <c>Nodes</c> is a list of atoms.
- </item>
- <tag><c>{require_nodenames, Num}</c></tag>
- <item>Specifies how many nodenames the test suite will
- need. Theese will be automatically generated and inserted into the
- <c>Config</c> argument to all test cases. <c>Num</c> is an
- integer.
- </item>
- <tag><c>{hosts, Hosts}</c></tag>
- <item>This is a list of available hosts on which to start slave
- nodes. It is used when the <c>{remote, true}</c> option is given
- to the <c>test_server:start_node/3</c> function. Also, if
- <c>{require_nodenames, Num}</c> is contained in a test
- specification file, the generated nodenames will be spread over
- all hosts given in this <c>Hosts</c> list. The hostnames are
- atoms or strings.
- </item>
- <tag><c>{diskless, true}</c></tag>
- <item>Adds <c>{diskless, true}</c> to the <c>Config</c> argument
- to all test cases. This is kept for backwards compatibility and
- should not be used. Use a configuration case instead.
- </item>
- <tag><c>{ipv6_hosts, Hosts}</c></tag>
- <item>Adds <c>{ipv6_hosts, Hosts}</c> to the <c>Config</c>
- argument to all test cases.</item>
- </taglist>
- <p>All test specification files shall have the extension
- ".spec". If special test specification files are needed for
- Windows or VxWorks platforms, additional files with the
- extension ".spec.win" and ".spec.vxworks" shall be
- used. This is useful e.g. if some test cases shall be skipped on
- these platforms.
- </p>
- <p>Some examples for test specification files can be found in the
- Examples section of this user's guide.
- </p>
- </section>
-
- <section>
- <title>Configuration cases</title>
- <p>If a group of test cases need the same initialization, a so called
- <em>configuration</em> or <em>conf</em> case can be used. A conf
- case consists of an initialization function, the group of test cases
- needing this initialization and a cleanup or finalization function.
- </p>
- <p>If the init function in a conf case fails or returns
- <c>{skip,Comment}</c>, the rest of the test cases in the conf case
- (including the cleanup function) are skipped. If the init function
- succeeds, the cleanup function will always be called, even if some
- of the test cases in between failed.
- </p>
- <p>Both the init function and the cleanup function in a conf case
- get the <c>Config</c> parameter as only argument. This parameter
- can be modified or returned as is. Whatever is returned by the
- init function is given as <c>Config</c> parameter to the rest of
- the test cases in the conf case, including the cleanup function.
- </p>
- <p>If the <c>Config</c> parameter is changed by the init function,
- it must be restored by the cleanup function. Whatever is returned
- by the cleanup function will be given to the next test case called.
- </p>
- <p>The optional <c>Properties</c> list can be used to specify
- execution properties for the test cases and possibly nested
- sub-groups of the configuration case. The available properties are:</p>
- <pre>
- Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
- Shuffle = shuffle | {shuffle,Seed}
- Seed = {integer(),integer(),integer()}
- RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
- repeat_until_any_ok | repeat_until_any_fail
- N = integer() | forever</pre>
-
- <p>If the <c>parallel</c> property is specified, Test Server will execute
- all test cases in the group in parallel. If <c>sequence</c> is specified,
- the cases will be executed in a sequence, meaning if one case fails, all
- following cases will be skipped. If <c>shuffle</c> is specified, the cases
- in the group will be executed in random order. The <c>repeat</c> property
- orders Test Server to repeat execution of the cases in the group a given
- number of times, or until any, or all, cases fail or succeed.</p>
-
- <p>Properties may be combined so that e.g. if <c>shuffle</c>,
- <c>repeat_until_any_fail</c> and <c>sequence</c> are all specified, the test
- cases in the group will be executed repeatedly and in random order until
- a test case fails, when execution is immediately stopped and the rest of
- the cases skipped.</p>
-
- <p>The properties for a conf case is always printed on the top of the HTML log
- for the group's init function. Also, the total execution time for a conf case
- can be found at the bottom of the log for the group's end function.</p>
-
- <p>Configuration cases may be nested so that sets of grouped cases can be
- configured with the same init- and end functions.</p>
- </section>
-
- <section>
- <title>The parallel property and nested configuration cases</title>
- <p>If a conf case has a parallel property, its test cases will be spawned
- simultaneously and get executed in parallel. A test case is not allowed
- to execute in parallel with the end function however, which means
- that the time it takes to execute a set of parallel cases is equal to the
- execution time of the slowest test case in the group. A negative side
- effect of running test cases in parallel is that the HTML summary pages
- are not updated with links to the individual test case logs until the
- end function for the conf case has finished.</p>
-
- <p>A conf case nested under a parallel conf case will start executing in
- parallel with previous (parallel) test cases (no matter what properties the
- nested conf case has). Since, however, test cases are never executed in
- parallel with the init- or the end function of the same conf case, it's
- only after a nested group of cases has finished that any remaining parallel
- cases in the previous conf case get spawned.</p>
- </section>
-
- <section>
- <title>Repeated execution of test cases</title>
- <marker id="repeated_cases"></marker>
- <p>A conf case may be repeated a certain number of times
- (specified by an integer) or indefinitely (specified by <c>forever</c>).
- The repetition may also be stopped prematurely if any or all cases
- fail or succeed, i.e. if the property <c>repeat_until_any_fail</c>,
- <c>repeat_until_any_ok</c>, <c>repeat_until_all_fail</c>, or
- <c>repeat_until_all_ok</c> is used. If the basic <c>repeat</c>
- property is used, status of test cases is irrelevant for the repeat
- operation.</p>
-
- <p>It is possible to return the status of a conf case (ok or
- failed), to affect the execution of the conf case on the level above.
- This is accomplished by, in the end function, looking up the value
- of <c>tc_group_properties</c> in the <c>Config</c> list and checking the
- result of the finished test cases. If status <c>failed</c> should be
- returned from the conf case as a result, the end function should return
- the value <c>{return_group_result,failed}</c>. The status of a nested conf
- case is taken into account by Test Server when deciding if execution
- should be repeated or not (unless the basic <c>repeat</c> property is used).</p>
-
- <p>The <c>tc_group_properties</c> value is a list of status tuples,
- each with the key <c>ok</c>, <c>skipped</c> and <c>failed</c>. The
- value of a status tuple is a list containing names of test cases
- that have been executed with the corresponding status as result.</p>
-
- <p>Here's an example of how to return the status from a conf case:</p>
- <pre>
- conf_end_function(Config) ->
- Status = ?config(tc_group_result, Config),
- case proplists:get_value(failed, Status) of
- [] -> % no failed cases
- {return_group_result,ok};
- _Failed -> % one or more failed
- {return_group_result,failed}
- end.</pre>
-
- <p>It is also possible in the end function to check the status of
- a nested conf case (maybe to determine what status the current conf case should
- return). This is as simple as illustrated in the example above, only the
- name of the end function of the nested conf case is stored in a tuple
- <c>{group_result,EndFunc}</c>, which can be searched for in the status lists.
- Example:</p>
- <pre>
- conf_end_function_X(Config) ->
- Status = ?config(tc_group_result, Config),
- Failed = proplists:get_value(failed, Status),
- case lists:member({group_result,conf_end_function_Y}, Failed) of
- true ->
- {return_group_result,failed};
- false ->
- {return_group_result,ok}
- end;
- ...</pre>
-
- <note><p>When a conf case is repeated, the init- and end functions
- are also always called with each repetition.</p></note>
- </section>
-
- <section>
- <title>Shuffled test case order</title>
- <p>The order that test cases in a conf case are executed, is under normal
- circumstances the same as the order defined in the test specification.
- With the <c>shuffle</c> property set, however, Test Server will instead
- execute the test cases in random order.</p>
-
- <p>The user may provide a seed value (a tuple of three integers) with
- the shuffle property: <c>{shuffle,Seed}</c>. This way, the same shuffling
- order can be created every time the conf case is executed. If no seed value
- is given, Test Server creates a "random" seed for the shuffling operation
- (using the return value of <c>erlang:now()</c>). The seed value is always
- printed to the log file of the init function so that it can be used to
- recreate the same execution order in subsequent test runs.</p>
-
- <note><p>If execution of a conf case with shuffled test cases is repeated,
- the seed will not be reset in between turns.</p></note>
-
- <p>If a nested conf case is specified in a conf case with a <c>shuffle</c>
- property, the execution order of the nested cases in relation to the test cases
- (and other conf cases) is also random. The order of the test cases in the nested
- conf case is however not random (unless, of course, this one also has a
- <c>shuffle</c> property).</p>
- </section>
-
- <section>
- <title>Skipping test cases</title>
- <p>It is possible to skip certain test cases, for example if you
- know beforehand that a specific test case fails. This might be
- functionality which isn't yet implemented, a bug that is known but
- not yet fixed or some functionality which doesn't work or isn't
- applicable on a specific platform.
- </p>
- <p>There are several different ways to state that a test case
- should be skipped:</p>
- <list type="bulleted">
- <item>Using the <c>{skip,What}</c> command in a test
- specification file
- </item>
- <item>Returning <c>{skip,Reason}</c> from the
- <c>init_per_testcase/2</c> function
- </item>
- <item>Returning <c>{skip,Reason}</c> from the specification
- clause of the test case
- </item>
- <item>Returning <c>{skip,Reason}</c> from the execution clause
- of the test case
- </item>
- </list>
- <p>The latter of course means that the execution clause is
- actually called, so the author must make sure that the test case
- is not run. For more information about the different clauses in a
- test case, see the chapter about writing test cases.
- </p>
- <p>When a test case is skipped, it will be noted as <c>SKIPPED</c>
- in the HTML log.
- </p>
- </section>
-</chapter>
-
diff --git a/lib/test_server/doc/src/ts.xml b/lib/test_server/doc/src/ts.xml
deleted file mode 100644
index 60dfdbc545..0000000000
--- a/lib/test_server/doc/src/ts.xml
+++ /dev/null
@@ -1,568 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>2007</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>The OTP Test Server Framework</title>
- <prepared>Mattias Nilsson</prepared>
- <responsible></responsible>
- <docno></docno>
- <approved></approved>
- <checked></checked>
- <date></date>
- <rev></rev>
- <file>ts.xml</file>
- </header>
- <module>ts</module>
- <modulesummary>Test Server Framework for testing OTP</modulesummary>
- <description>
- <p>This is a framework for testing OTP. The <c>ts</c> module
- implements the interface to all the functionality in the
- framework.
- </p>
- <p>The framework is built on top of the Test Server Controller,
- <c>test_server_ctrl</c>, and provides a high level operator
- interface. The main features added by the framework are:
- </p>
- <list type="bulleted">
- <item>Automatic compilation of test suites and data directories
- </item>
- <item>Collection of files in central directories and creation of
- additional HTML pages for better overview.
- </item>
- <item>Single command interface for running all available tests
- </item>
- <item>Spawns a new node with correct parameters before starting
- the test server
- </item>
- <item>Atomatically creates the parameter file needed when
- running tests on remote target
- </item>
- </list>
- <p>More information about the Test Server Framework and how to run
- test cases can be found in the Test Server User's Guide.
- </p>
- <p>For writing you own test server framework, please turn to the
- reference manual for the Test Server Controller and chapter named
- "Writing your own test server framework" in the Test Server User's
- Guide.
- </p>
- <p>SETUP</p>
- <p>To be able to run <c>ts</c>, you must first `install'
- <c>ts</c> for the current environment. This is done by calling
- <c>ts:install/0/1/2</c>. A file called `variables' is created
- and used by <c>ts</c> when running test suites. It is not
- recommended to edit this file, but it is possible to alter if
- <c>ts</c> gets the wrong idea about your environment.
- </p>
- <p><c>ts:install/0</c> is used if the target platform is the
- same as the controller host, i.e. if you run on "local target"
- and no options are needed. Then running <c>ts:install/0</c> <c>ts</c>
- will run an autoconf script for your current
- environment and set up the necessary variables needed by the
- test suites.
- </p>
- <p><c>ts:install/1</c> or <c>ts:install/2</c> is used if the
- target platform is different from the controller host, i.e. if
- you run on "remote target" or if special options are required
- for your system.
- </p>
- <p>See the reference manual for detailed information about
- <c>ts:install/0/1/2</c>.
- </p>
- <p>Some of the common variables in the 'variables' file are
- described below. Do not make any assumptions as of what is found
- in this file, as it may change at any time.
- </p>
- <list>
- <item><c>longnames</c><br></br>
- Set to true if the system is using fully qualified
- nodenames.
- </item>
- <item><c>platform_id</c><br></br>
- This is the currently installed platform identification
- string.
- </item>
- <item><c>platform_filename</c><br></br>
- This is the name used to create the final save directory
- for test runs.
- </item>
- <item><c>platform_label</c><br></br>
- This is the string presented in the generated test
- results index page.
- </item>
- <item><c>rsh_name</c><br></br>
- This is the rsh program to use when starting slave or
- peer nodes on a remote host.
- </item>
- <item><c>erl_flags</c><br></br>
- Compile time flags used when compiling test suites.
- </item>
- <item><c>erl_release</c><br></br>
- The Erlang/OTP release being tested.
- </item>
- <item><c>'EMULATOR'</c><br></br>
- The emulator being tested (e.g. beam)
- </item>
- <item><c>'CPU'</c><br></br>
- The CPU in the machine running the tests, e.g. sparc.
- </item>
- <item><c>target_host</c><br></br>
- The target host name
- </item>
- <item><c>os</c><br></br>
- The target operating system, e.g. solaris2.8
- </item>
- <item><c>target</c><br></br>
- The current target platform, e.g. sparc-sun-solaris2.8
- </item>
- </list>
- <p>RUNNING TESTS</p>
- <p>After installing <c>ts</c>, you can run your test with the
- <c>ts:run/0/1/2/3/4</c> functions. These functions, however,
- require a special directory structure to be able to find your
- test suites. Both the test server and all tests must be located
- under your $TESTROOT directory. The test server implementation
- shall be located in the directory <c>$TESTROOT/test_server</c>
- and for each application there must be a directory named
- <c><![CDATA[$TESTROOT/<application>_test]]></c> containing the .spec file
- and all test suites and data directories for the
- application. Note that there shall only be one .spec file for
- each application.
- </p>
- <p><c>$TESTROOT/test_server</c> must be the current directory
- when calling the <c>ts:run/*</c> function.
- </p>
- <p>All available tests can be found with <c>ts:tests()</c>. This
- will list all applications for which a test specification file
- <c><![CDATA[../<application>_test/<application>.spec]]></c> can be found.
- </p>
- <p>To run all these tests, use <c>ts:run()</c>.
- </p>
- <p>To run one or some of the tests, use <c>ts:run(Tests)</c>,
- where <c>Tests</c> is the name of the application you want to
- test, or a list of such names.
- </p>
- <p>To run one test suite within a test, use
- <c>ts:run(Test,Suite)</c>.
- </p>
- <p>To run one test case within a suite, use
- <c>ts:run(Test,Suite,Case)</c></p>
- <p>To all these functions, you can also add a list of
- options. Please turn to the reference manual for the <c>ts</c>
- module to see the valid options to use.
- </p>
- <p>The function <c>ts:help()</c> displays some simple help for
- the functions in <c>ts</c>. Use this for quick reference.
- </p>
- <p>LOG FILES</p>
- <p>As the execution of the test suites go on, events are logged in
- four different ways:
- </p>
- <list type="bulleted">
- <item>Text to the operator's console.</item>
- <item>Suite related information is sent to the major log file.</item>
- <item>Case related information is sent to the minor log file.</item>
- <item>The HTML log file gets updated with test results.</item>
- </list>
- <p>Typically the operator, who may run hundreds or thousands of
- test cases, doesn't want to fill the screen with details
- about/from the specific test cases. By default, the operator will
- only see:
- </p>
- <list type="bulleted">
- <item>A confirmation that the test has started.
- </item>
- <item>A small note about each failed test case.
- </item>
- <item>A summary of all the run test cases.
- </item>
- <item>A confirmation that the test run is complete
- </item>
- <item>Some special information like error reports and progress
- reports, printouts written with erlang:display/1 or io:format/3
- specifically addressed to somewhere other than
- <c>standard_io</c>.</item>
- </list>
- <p>This is enough for the operator to know, and if he wants to dig
- in deeper into a specific test case result, he can do so by
- following the links in the HTML presentation to take a look in the
- major or minor log files.
- </p>
- <p>A detailed report of the entire test suite is stored in the
- major logfile, the exact reason for failure, time spent etc.
- </p>
- <p>The HTML log file is a summary of the major log file, but gives
- a much better overview of the test run. It also has links to every
- test case's log file for quick viewing with a HTML browser.
- </p>
- <p>The minor log file contain full details of every single test
- case, each one in a separate file. This way the files should be
- easy to compare with previous test runs, even if the set of test
- cases change.
- </p>
- <p>Which information that goes where is user configurable via the
- test server controller. Three threshold values determine what
- comes out on screen, and in the major or minor log files. The
- contents that goes to the HTML log file is fixed, and cannot be
- altered.
- </p>
-
- </description>
- <funcs>
- <func>
- <name>install() -> ok | {error, Reason}</name>
- <name>install(TargetSystem) -> ok | {error, Reason}</name>
- <name>install(Opts) -> ok | {error, Reason}</name>
- <name>install(TargetSystem,Opts) -> ok | {error, Reason}</name>
- <fsummary>Installs the Test Server Framework</fsummary>
- <type>
- <v>TargetSystem = {Architecture, TargetHost}</v>
- <v>Architecture = atom() or string()</v>
- <d>e.g. "ose" or "vxworks_ppc603"</d>
- <v>TargetHost = atom() or string()</v>
- <d>The name of the target host</d>
- <v>Opts = list()</v>
- </type>
- <desc>
- <p>Installs and configures the Test Server Framework for
- running test suites. If a remote host is to be used, the
- <c>TargetSystem</c> argument must be given so that "cross
- installation" can be done. Installation is required for
- any of the functions in <c>ts</c> to work.
- </p>
- <p>Opts may be one or more of
- </p>
- <list>
- <item><c>{longnames, Bool}</c><br></br>
- Use fully qualified hostnames for test_server and
- slave nodes. Bool is <c>true</c> or <c>false</c> (default).
- </item>
- <item><c>{verbose, Level}</c><br></br>
- Verbosity level for test server output, set to 0, 1 or
- 2, where 0 is quiet(default).
- </item>
- <item><c>{hosts, Hosts}</c><br></br>
- This is a list of available hosts on which to start
- slave nodes. It is used when the <c>{remote, true}</c>
- option is given to the <c>test_server:start_node/3</c>
- function. Also, if <c>{require_nodenames, Num}</c> is
- contained in a test specification file, the generated
- nodenames will be spread over all hosts given in this
- <c>Hosts</c> list. The hostnames are given as atoms or
- strings.
- </item>
- <item><c>{slavetargets, SlaveTarges}</c><br></br>
- For VxWorks only. This is a list of
- available hosts where slave nodes can be started. This is
- necessary because only one node can run per host in the
- VxWorks environment. This is not the same as
- <c>{hosts, Hosts}</c> because it is used for all slave nodes
- - not only the ones started with <c>{remote, true}</c>. The
- hostnames are given as atoms or strings.
- </item>
- <item><c>{crossroot, TargetErlRoot}</c><br></br>
- Erlang root directory on target host
- <br></br>
-This option is mandatory for remote targets
- </item>
- <item><c>{master, {MasterHost, MasterCookie}}</c><br></br>
- If target is remote and the target node is started as
- a slave node, this option
- indicates which master and cookie to use. The given master
- will also be used as master for slave nodes started with
- <c>test_server:start_node/3</c>. It is expected that the
- <c>erl_boot_server</c> is started on the master node before
- the test is run. If this option is not given, the test
- server controller node is used as master and the
- <c>erl_boot_server</c> is automatically started.
- </item>
- <item><c>{erl_start_args, ArgString}</c><br></br>
- Additional arguments to be used when starting the test
- server controller node. <c>ArgString</c> will be appended to
- the command line when starting the erlang node. Note that
- this will only affect the startup of the <em>controller node</em>,
- i.e. not the target node or any slave nodes
- startet from a test case.
- </item>
- <item><c>{ipv6_hosts, HostList}</c><br></br>
- This option will be inserted in the
- <c>Config</c> parameter for each test case. <c>HostList</c>
- is a list of hosts supporting IPv6.
- </item>
- </list>
- </desc>
- </func>
- <func>
- <name>help() -> ok</name>
- <fsummary>Presents simple help on the functions in <c>ts</c></fsummary>
- <desc>
- <p>Presents simple help on the functions in <c>ts</c>. Useful
- for quick reference.</p>
- </desc>
- </func>
- <func>
- <name>tests() -> Tests</name>
- <fsummary>Returns the list of available tests</fsummary>
- <desc>
- <p>Returns the list of available tests. This is actually just
- a list of all test specification files found by looking up
- "../*_test/*.spec".
- </p>
- <p>In each ../Name_test/ directory there should be one test
- specification file named Name.spec.</p>
- </desc>
- </func>
- <func>
- <name>run() -> ok | {error, Reason}</name>
- <name>run([all_tests|Opts])</name>
- <name>run(Specs)</name>
- <name>run(Specs, Opts)</name>
- <name>run(Spec, Module)</name>
- <name>run(Spec, Module, Opts)</name>
- <name>run(Spec, Module, Case)</name>
- <name>run(Spec, Module, Case, Opts)</name>
- <fsummary>Runs (specified) test suite(s)</fsummary>
- <type>
- <v>Specs = Spec | [Spec]</v>
- <v>Spec = atom()</v>
- <v>Module = atom()</v>
- <v>Case = atom()</v>
- <v>Opts = [Opt]</v>
- <v>Opt = batch | verbose | {verbose, Level} | {vars, Vars} | keep_topcase | cover | cover_details |{cover,CoverFile} | {cover_details,CoverFile} | {trace, TraceSpec}</v>
- <v>Level = integer(); 0 means silent</v>
- <v>Vars = list() of key-value tuples</v>
- <v>CoverFile = string(); name of file listing modules to exclude from or include in cover compilation. The name must include full path to the file.</v>
- <v>Reason = term()</v>
- </type>
- <desc>
- <p>This function runs test suite(s)/case(s). To be able to run
- any tests, ts:install must first be called to create the
- <c>variables</c> file needed. To run a whole test specification,
- only specify the name of the test specification, and all test
- suite modules belonging to that test spec will be run. To run
- a single module in a test specification, use the Module
- argument to specify the name of the module to run and all test
- cases in that module will be run, and to run a specified test
- case, specify the name of the test case using the Case
- argument. If called with no argument, all test specifications
- available will be run. Use ts:tests/0 to see the available
- test specifications.
- </p>
- <p>If the <c>batch</c> option is not given, a new xterm is
- started (unix) when <c>ts:run</c> is called.
- </p>
- <p>The <c>verbose</c> option sets the verbosity level for test
- server output. This has the same effect as if given to
- <c>ts:install/1/2</c></p>
- <p>The <c>vars</c> option can be used for adding configuration
- variables that are not in the <c>variables</c> file generated
- during installation. Can be any of the <c>Opts</c> valid for
- <c>ts:install/1/2</c>.
- </p>
- <p>The <c>keep_topcase</c> option forces <c>ts</c> to keep the
- topcase in your test specification file as is. This option can
- only be used if you don't give the <c>Module</c> or
- <c>Case</c> parameters to <c>ts:run</c>. The
- <c>keep_topcase</c> option is necessary if your topcase
- contains anything other than <c><![CDATA[{dir,"../<Name>_test"}]]></c>. If
- the option is not used, <c>ts</c> will modify your topcase.
- </p>
- <p>The <c>cover</c> and <c>cover_details</c> options indicates
- that the test shall be run with code coverage
- analysis. <c>cover_details</c> means that analysis shall be
- done on the most detailed level. If the test is run with a
- remote target, this option creates a list of uncovered lines
- in each cover compiled module. If the test is run with a local
- target, each cover compiled module will be analysed with
- <c>cover:analyse_to_file/1</c>. The <c>cover</c> options will
- only create an overview of all cover compiled modules with the
- number of covered and not covered lines.
- </p>
- <p>The <c>CoverFile</c> which can be given with the
- <c>cover</c> and <c>cover_details</c> options must be the
- filename of a file listing modules to be excluded from or
- included in the cover compilation. By default, <c>ts</c>
- believes that <c>Spec</c> is the name of an OTP application
- and that all modules in this application shall be cover
- compiled. The <c>CoverFile</c> can exclude modules that belong
- to the application and add modules that don't belong to the
- application. The file can have the following entries:</p>
- <code type="none">
-{exclude, all | ExcludeModuleList}.
-{include, IncludeModuleList}. </code>
- <p>Note that each line must end with a full
- stop. <c>ExcludeModuleList</c> and <c>IncludeModuleList</c>
- are lists of atoms, where each atom is a module name.
- </p>
- <p>If the <c>cover</c> or <c>cover_details</c> options are
- given on their own, the directory <c><![CDATA[../<Spec>_test]]></c> is
- searched for a <c>CoverFile</c> named <c><![CDATA[<Spec>.cover]]></c>. If
- this file is not found, <c>Spec</c> is assumed to be the name
- of an OTP application, and all modules in the <c>ebin</c>
- directory for the application are cover compiled. The
- <c>ebin</c> directory is found by adding <c>ebin</c> to
- <c>code:lib_dir(Spec)</c>.
- </p>
- <p>The same cover compiled code will be loaded on all slave or
- peer nodes started with <c>test_server:start_node/3</c>. The
- exception is nodes that run an old version of OTP. If the loading
- fails, the node will simply not be a part of the coverage
- analysis. Note that slave and peer nodes must be stopped with
- <c>test_server:stop_node/1</c> for the node to be part of the
- coverage analysis, else the test server will not be able to
- fetch coverage data from the node.
- </p>
- <p>The <c>trace</c> option is used to turn on call trace on
- target and on slave or peer nodes started with
- <c>test_server:start_node/3</c>. <c>TraceSpec</c> can be the
- name of a trace information file, or a list of elements like
- the ones in a trace information file. Please turn to the
- reference manual for <c>test_server_ctrl:trc/1</c> for details
- about the trace information file.
- </p>
- </desc>
- </func>
- <func>
- <name>cross_cover_analyse(Level) -> ok</name>
- <name>cross_cover_analyse([Level]) -> ok</name>
- <fsummary>Analyse cover data collected from all tests</fsummary>
- <desc>
- <p>Analyse cover data collected from all tests.
- </p>
- <p>See test_server_ctrl:cross_cover_analyse/2
- </p>
- </desc>
- </func>
- <func>
- <name>r() -> ok</name>
- <name>r(Opts) -> ok</name>
- <name>r(SpecOrSuite) -> ok</name>
- <name>r(SpecOrSuite,Opts) -> ok</name>
- <name>r(Suite,Case) -> ok</name>
- <name>r(Suite,Case,Opts) -> ok</name>
- <fsummary>Run test suite or test case without <c>ts</c>installed</fsummary>
- <type>
- <v>SpecOrSuite = Spec | Suite</v>
- <v>Spec = string()</v>
- <d>"Name.spec" or "Name.spec.OsType", where OsType is vxworks</d>
- <v>Suite = atom()</v>
- <v>Case = atom()</v>
- <v>Opts = [Opt]</v>
- <v>Opt = {Cover,AppOrCoverFile} | {Cover,Application,CoverFile}</v>
- <v>Cover = cover | cover_details</v>
- <v>AppOrCoverFile = Application | CoverFile</v>
- <v>Application = atom()</v>
- <d>OTP application to cover compile</d>
- <v>CoverFile = string()</v>
- <d>Name of file listing modules to exclude from or include in cover compilation</d>
- </type>
- <desc>
- <p>This function can be used to run a test suites or test
- cases directly, without any of the additional features added
- by the test server framework. It is simply a wrapper function
- for the <c>add_dir</c>, <c>add_spec</c>, <c>add_module</c> and
- <c>add_case</c> functions in <c>test_server_ctrl</c>:
- </p>
- <p><c>r() -> add_dir(".")</c> <br></br>
-<c>r(Spec) -> add_spec(Spec)</c> <br></br>
-<c>r(Suite) -> add_module(Suite)</c> <br></br>
-<c>r(Suite,Case) -> add_case(Suite,Case)</c></p>
- <p>To use this function, it is required that the test suite is
- compiled and in the code path of the node where the function
- is called. The function can be used without having <c>ts</c>
- installed.
- </p>
- <p>For information about the <c>cover</c> and
- <c>cover_details</c> options, see <c>test_server_ctrl:cover/2/3</c>.</p>
- </desc>
- </func>
- <func>
- <name>estone() -> ok | {error, Reason}</name>
- <name>estone(Opts) -> ok</name>
- <fsummary>Runs the EStone test</fsummary>
- <desc>
- <p>This function runs the EStone test. It is a shortcut for
- running the test suite <c>estone_SUITE</c> in the
- <c>kernel</c> application.
- </p>
- <p><c>Opts</c> is the same as the <c>Opts</c> argument for the
- <c>ts:run</c> functions.</p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>Makfile.src in Data Directory</title>
- <p>If a data directory contains code which must be compiled before
- the test suite is run, a makefile source called
- <c>Makefile.src</c> can be placed in the data directory. This file
- will be converted to a valid makefile by <c>ts:run/0/1/2/3/4</c>.
- </p>
- <p>The reason for generating the makefile is that you can use
- variables from the <c>variables</c> file which was generated by
- <c>ts:install/0/1/2</c>. All occurrences of <c>@Key@</c> in
- <c>Makefile.src</c> is substituted by the <c>Value</c> from
- <c>{Key,Value}</c> found in the <c>variables</c> file. Example:
- </p>
- <p>Cut from <c>variables</c>:</p>
- <code type="none">
- ...
- {'EMULATOR',"beam"}.
- {'CFLAGS',"-g -O2"}.
- {'LD',"$(CC) $(CFLAGS)"}.
- {'CC',"gcc"}.
- ...
- </code>
- <p><c>Makefile.src</c> for compiling erlang code could look
- something like this:</p>
- <code type="none">
- EFLAGS=+debug_info
-
- all: ordsets1.@EMULATOR@
-
- ordsets1.@EMULATOR@: ordsets1.erl
- erlc $(EFLAGS) ordsets1.erl
- </code>
- <p><c>Makefile.src</c> for compiling c code could look
- something like this:</p>
- <code type="none">
- CC = @CC@
- LD = @LD@
- CFLAGS = @CFLAGS@ -I@erl_include@ @DEFS@
- CROSSLDFLAGS = @CROSSLDFLAGS@
-
- PROGS = nfs_check@exe@
-
- all: $(PROGS)
-
- nfs_check@exe@: nfs_check@obj@
- $(LD) $(CROSSLDFLAGS) -o nfs_check nfs_check@obj@ @LIBS@
-
- nfs_check@obj@: nfs_check.c
- $(CC) -c -o nfs_check@obj@ $(CFLAGS) nfs_check.c
- </code>
- </section>
-</erlref>
-
diff --git a/lib/test_server/doc/src/why_test_chapter.xml b/lib/test_server/doc/src/why_test_chapter.xml
deleted file mode 100644
index 3d0e8271b1..0000000000
--- a/lib/test_server/doc/src/why_test_chapter.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Why Test</title>
- <prepared>Siri Hansen</prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
-
- <section>
- <title>Goals</title>
- <p>It's not possible to prove that a program is correct by
- testing. On the contrary, it has been formally proven that it is
- impossible to prove programs in general by testing. Theoretical
- program proofs or plain examination of code may be viable options
- for those that wish to certify that a program is correct. The test
- server, as it is based on testing, cannot be used for
- certification. Its intended use is instead to (cost effectively)
- <em>find bugs</em>. A successful test suite is one that reveals a
- bug. If a test suite results in Ok, then we know very little that
- we didn't know before.
- </p>
- </section>
-
- <section>
- <title>What to test?</title>
- <p>There are many kinds of test suites. Some concentrate on
- calling every function in the interface to some module or
- server. Some other do the same, but uses all kinds of illegal
- parameters, and verifies that the server stays alive and rejects
- the requests with reasonable error codes. Some test suites
- simulate an application (typically consisting of a few modules of
- an application), some try to do tricky requests in general, some
- test suites even test internal functions.
- </p>
- <p>Another interesting category of test suites are the ones that
- check that fixed bugs don't reoccur. When a bugfix is introduced,
- a test case that checks for that specific bug should be written
- and submitted to the affected test suite(s).
- </p>
- <p>Aim for finding bugs. Write whatever test that has the highest
- probability of finding a bug, now or in the future. Concentrate
- more on the critical parts. Bugs in critical subsystems are a lot
- more expensive than others.
- </p>
- <p>Aim for functionality testing rather than implementation
- details. Implementation details change quite often, and the test
- suites should be long lived. Often implementation details differ
- on different platforms and versions. If implementation details
- have to be tested, try to factor them out into separate test
- cases. Later on these test cases may be rewritten, or just
- skipped.
- </p>
- <p>Also, aim for testing everything once, no less, no more. It's
- not effective having every test case fail just because one
- function in the interface changed.
- </p>
- </section>
-
- <section>
- <title>How much to test</title>
- <p>There is a unix shell script that counts the number of non
- commented words (lines and characters too) of source code in each
- application's test directory and divides with the number of such
- source words in the src directory. This is a measure of how much
- test code there is.
- </p>
- <p>There has been much debate over how much test code, compared to
- production code, should be written in a project. More test code
- finds more bugs, but test code needs to be maintained just like
- the production code, and it's expensive to write it in the first
- place. In several articles from relatively mature software
- organizations that I have read, the amount of test code has been
- about the same as the production code. </p>
- <p>In OTP, at the time of
- writing, few applications come even close to this, some have no
- test code at all.
- </p>
-
- <section>
- <title>Full coverage</title>
- <p>It is possible to cover compile the modules being tested
- before running the test suites. Doing so displays which branches
- of the code that are tested by the test suite, and which are
- not. Many use this as a measure of a good test suite. When every
- single line of source code is covered once by the test suite,
- the test suite is finished.
- </p>
- <p>A coverage of 100% still proves nothing, though. It doesn't
- mean that the code is error free, that everything is tested. For
- instance, if a function contains a division, it has to be
- executed at least twice. Once with parameters that cause
- division by zero, and once with other parameters.
- </p>
- <p>High degree of coverage is good of course, it means that no
- major parts of the code has been left untested. It's another
- question whether it's cost effective. You're only likely to find
- 50% more bugs when going from 67% to 100% coverage, but the work
- (cost) is maybe 200% as large, or more, because reaching all of
- those obscure branches is usually complicated.
- </p>
- <p>Again, the reason for testing with the test server is to find
- bugs, not to create certificates of valid code. Maximizing the
- number of found bugs per hour probably means not going for 100%
- coverage. For some module the optimum may be 70%, for some other
- maybe 250%. 100% shouldn't be a goal in itself.</p>
- </section>
-
- <section>
- <title>User interface testing</title>
- <p>It is very difficult to do sensible testing of user
- interfaces, especially the graphic ones. The test server has
- some support for capturing the text I/O that goes to the user,
- but none for graphics. There are several tools on the market
- that help with this.</p>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/test_server/doc/src/write_framework_chapter.xml b/lib/test_server/doc/src/write_framework_chapter.xml
deleted file mode 100644
index d10b580c34..0000000000
--- a/lib/test_server/doc/src/write_framework_chapter.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Write you own test server framework</title>
- <prepared>Siri Hansen</prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>write_framework_chapter.xml</file>
- </header>
-
- <section>
- <title>Introduction</title>
- <p>The test server controller can be interfaced from the operating
- system or from within Erlang. The nature of your new framework
- will decide which interface to use. If you want your framework to
- start a new node for each test, the operating system interface is
- very convenient. If your node is already started, going from
- within Erlang might be a more flexible solution.
- </p>
- <p>The two methods are described below.
- </p>
- </section>
-
- <section>
- <title>Interfacing the test server controller from Erlang</title>
- <p>Using the test server from Erlang means that you have to start
- the test server and then add test jobs. Use
- <c>test_server_ctrl:start/0</c> to start the test server, and
- <c>test_server_ctrl:stop/0</c> to stop it.
- </p>
-
- <section>
- <title>Adding test jobs</title>
- <p>There are many commands available for adding test cases to
- the test server's job queue: <br></br>
-</p>
- <list type="bulleted">
- <item>Single test case <br></br>
-<c>test_server_ctrl:add_case/2/3</c></item>
- <item>Multiple test cases from same suite <br></br>
-<c>test_server_ctrl:add_cases/2/3</c></item>
- <item>Test suite module or modules <br></br>
-<c>test_server_ctrl:add_module/1/2</c></item>
- <item>Some or all test suite modules in a directory <br></br>
-<c>test_server_ctrl:add_dir/2/3</c></item>
- <item>Test cases specified in a test specification file <br></br>
-<c>test_server_ctrl:add_spec/1</c></item>
- </list>
- <p>All test suites are given a unique name, which is usually
- given when the test suite is added to the job queue. In some
- cases, a default name is used, as in the case when a module is
- added without a specified name. The test job name is used to
- store logfiles, which are stored in the `name.logs' directory
- under the current directory.
- </p>
- <p>See the reference manual for details about the functions for
- adding test jobs.
- </p>
- </section>
- </section>
-
- <section>
- <title>Interfacing the test server controller from the operating system.</title>
- <p>The function <c>run_test/1</c> is your interface in the test
- server controller if you wish to use it from the operating
- system. You simply start an erlang shell and invoke this function
- with the <c>-s</c> option. <c>run_test/1</c> starts the test
- server, runs the test specified by the command line and stops the
- test server. The argument to <c>run_test/1</c> is a list of
- command line flags, typically
- <c>['KEY1', Value1, 'KEY2', Value2, ...]</c>.
- The valid command line flags are listed in the reference manual
- for <c>test_server_ctrl</c>.
- </p>
- <p>A typical command line may look like this <br></br>
-<c>erl -noshell -s test_server_ctrl run_test KEY1 Value1 KEY2 Value2 ... -s erlang halt</c></p>
- <p>Or make an alias (this is for unix/tcsh) <br></br>
-<c>alias erl_test 'erl -noshell -s test_server_ctrl run_test \!* -s erlang halt'</c></p>
- <p>And then use it like this <br></br>
-<c>erl_test KEY1 Value1 KEY2 Value2 ...</c> <br></br>
-</p>
-
- <section>
- <title>An Example</title>
- <p>An example of starting a test run from the command line <br></br>
-</p>
- <p><c>erl -name test_srv -noshell -rsh /home/super/otp/bin/ctrsh </c> <br></br>
-<c>-pa /clearcase/otp/erts/lib/kernel/test </c> <br></br>
-<c>-boot start_sasl -sasl errlog_type error </c> <br></br>
-<c>-s test_server_ctrl run_test SPEC kernel.spec -s erlang halt</c> <br></br>
-</p>
- </section>
- </section>
-
- <section>
- <title>Framework callback functions</title>
- <p>By defining the environment variable
- <c>TEST_SERVER_FRAMEWORK</c> to a module name, the framework
- callback functions can be used. The framework callback functions
- are called by the test server in order let the framework interact
- with the execution of the tests and to keep the framework upto
- date with information about the test progress.
- </p>
- <p>The framework callback functions are described in the reference
- manual for <c>test_server_ctrl</c>.
- </p>
- <p>Note that this topic is in an early stage of development, and
- changes might occur.
- </p>
- </section>
-
- <section>
- <title>Other concerns</title>
- <p>Some things to think about when writing you own test server
- framework:
- </p>
- <list type="bulleted">
- <item><c>emulator version</c> - Make sure that the intended
- version of the emulator is started.
- </item>
- <item><c>operating system path</c> - If test cases use port
- programs, make sure the paths are correct.
- </item>
- <item><c>recompilation</c> - Make sure all test suites are fresh
- compiled.
- </item>
- <item><c>test_server.hrl</c> - Make sure the
- <c>test_server.hrl</c> file is in the include path when
- compiling test suites.
- </item>
- <item><c>running applications</c> - Some test suites require
- some applications to be running (e.g. sasl). Make sure they are
- started.
- </item>
- </list>
- </section>
-</chapter>
-
diff --git a/lib/test_server/doc/src/write_test_chapter.xml b/lib/test_server/doc/src/write_test_chapter.xml
deleted file mode 100644
index c3e1881b8a..0000000000
--- a/lib/test_server/doc/src/write_test_chapter.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2002</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Writing Test Suites</title>
- <prepared>Siri Hansen</prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>write_test_chapter.xml</file>
- </header>
-
- <section>
- <title>Support for test suite authors</title>
- <p>The <c>test_server</c> module provides some useful functions
- to support the test suite author. This includes:
- </p>
- <list type="bulleted">
- <item>Starting and stopping slave or peer nodes</item>
- <item>Capturing and checking stdout output</item>
- <item>Retrieving and flushing process message queue</item>
- <item>Watchdog timers</item>
- <item>Checking that a function crashes</item>
- <item>Checking that a function succeeds at least m out of n times</item>
- <item>Checking .app files</item>
- </list>
- <p>Please turn to the reference manual for the <c>test_server</c>
- module for details about these functions.
- </p>
- </section>
-
- <section>
- <title>Test suites</title>
- <p>A test suite is an ordinary Erlang module that contains test
- cases. It's recommended that the module has a name on the form
- *_SUITE.erl. Otherwise, the directory function will not find the
- modules (by default).
- </p>
- <p>For some of the test server support, the test server include
- file <c>test_server.hrl</c> must be included. Never include it
- with the full path, for portability reasons. Use the compiler
- include directive instead.
- </p>
- <p>The special function <c>all(suite)</c> in each module is called
- to get the test specification for that module. The function
- typically returns a list of test cases in that module, but any
- test specification could be returned. Please see the chapter
- about test specifications for details about this.
- </p>
- </section>
-
- <section>
- <title>Init per test case</title>
- <p>In each test suite module, the functions
- <c>init_per_testcase/2</c> and <c>end_per_testcase/2</c> must be
- implemented.
- </p>
- <p><c>init_per_testcase</c> is called before each test case in the
- test suite, giving a (limited) possibility for initialization.
- </p>
- <p><c>end_per_testcase/2</c> is called after each test case is
- completed, giving a possibility to clean up.
- </p>
- <p>The first argument to these functions is the name of the test
- case. This can be used to do individual initialization and cleanup for
- each test cases.
- </p>
- <p>The second argument is a list of tuples called
- <c>Config</c>. The first element in a <c>Config</c> tuple
- should be an atom - a key value to be used for searching.
- <c>init_per_testcase/2</c> may modify the <c>Config</c>
- parameter or just return it as is. Whatever is retuned by
- <c>init_per_testcase/2</c> is given as <c>Config</c> parameter to
- the test case itself.
- </p>
- <p>The return value of <c>end_per_testcase/2</c> is ignored by the
- test server.
- </p>
- </section>
-
- <section>
- <title>Test cases</title>
- <p>The smallest unit that the test server is concerned with is a
- test case. Each test case can in turn test many things, for
- example make several calls to the same interface function with
- different parameters.
- </p>
- <p>It is possible to put many or few tests into each test
- case. How many things each test case tests is up to the author,
- but here are some things to keep in mind.
- </p>
- <p>Very small test cases often leads to more code, since
- initialization has to be duplicated. Larger code, especially with
- a lot of duplication, increases maintenance and reduces
- readability.
- </p>
- <p>Larger test cases make it harder to tell what went wrong if it
- fails, and force us to skip larger portions of test code if a
- specific part fails. These effects are accentuated when running on
- multiple platforms because test cases often have to be skipped.
- </p>
- <p>A test case generally consists of three parts, the
- documentation part, the specification part and the execution
- part. These are implemented as three clauses of the same function.
- </p>
- <p>The documentation clause matches the argument '<c>doc</c>' and
- returns a list for strings describing what the test case tests.
- </p>
- <p>The specification clause matches the argument '<c>suite</c>'
- and returns the test specification for this particular test
- case. If the test specification is an empty list, this indicates
- that the test case is a leaf test case, i.e. one to be executed.
- </p>
- <p>The execution clause implements the actual test case. It takes
- one argument, <c>Config</c>, which contain configuration
- information like <c>data_dir</c> and <c>priv_dir</c>. See <seealso marker="#data_priv_dir">Data and Private Directories</seealso> for
- more information about these.
- </p>
- <p>The <c>Config</c> variable can also contain the
- <c>nodenames</c> key, if requested by the <c>require_nodenames</c>
- command in the test suite specification file. All <c>Config</c>
- items should be extracted using the <c>?config</c> macro. This is
- to ensure future compatibility if the <c>Config</c> format
- changes. See the reference manual for <c>test_server</c> for
- details about this macro.
- </p>
- <p>If the execution clause crashes or exits, it is considered a
- failure. If it returns <c>{skip,Reason}</c>, the test case is
- considered skipped. If it returns <c>{comment,String}</c>,
- the string will be added in the 'Comment' field on the HTML
- result page. If the execution clause returns anything else, it is
- considered a success, unless it is <c>{'EXIT',Reason}</c> or
- <c>{'EXIT',Pid,Reason}</c> which can't be distinguished from a
- crash, and thus will be considered a failure.
- </p>
- </section>
-
- <section>
- <marker id="data_priv_dir"></marker>
- <title>Data and Private Directories</title>
- <p>The data directory (<c>data_dir</c>) is the directory where the test
- module has its own files needed for the testing. A compiler test
- case may have source files to feed into the compiler, a release
- upgrade test case may have some old and new release of
- something. A graphics test case may have some icons and a test
- case doing a lot of math with bignums might store the correct
- answers there. The name of the <c>data_dir</c> is the the name of
- the test suite and then "_data". For example,
- <c>"some_path/foo_SUITE.beam"</c> has the data directory
- <c>"some_path/foo_SUITE_data/"</c>.
- </p>
- <p>The <c>priv_dir</c> is the test suite's private directory. This
- directory should be used when a test case needs to write to
- files. The name of the private directory is generated by the test
- server, which also creates the directory.
- </p>
- <p><em>Warning:</em> Do not depend on current directory to be
- writable, or to point to anything in particular. All scratch files
- are to be written in the <c>priv_dir</c>, and all data files found
- in <c>data_dir</c>. If the current directory has to be something
- specific, it must be set with <c>file:set_cwd/1</c>.
- </p>
- </section>
-
- <section>
- <title>Execution environment</title>
- <p>Each time a test case is about to be executed, a new process is
- created with <c>spawn_link</c>. This is so that the test case will
- have no dependencies to earlier tests, with respect to process flags,
- process links, messages in the queue, other processes having registered
- the process, etc. As little as possible is done to change the initial
- context of the process (what is created by plain spawn). Here is a
- list of differences:
- </p>
- <list type="bulleted">
- <item>It has a link to the test server. If this link is removed,
- the test server will not know when the test case is finished,
- just wait infinitely.
- </item>
- <item>It often holds a few items in the process dictionary, all
- with names starting with '<c>test_server_</c>'. This is to keep
- track of if/where a test case fails.
- </item>
- <item>There is a top-level catch. All of the test case code is
- catched, so that the location of a crash can be reported back to
- the test server. If the test case process is killed by another
- process (thus the catch code is never executed) the test server
- is not able to tell where the test case was executing.
- </item>
- <item>It has a special group leader implemented by the test
- server. This way the test server is able to capture the io that
- the test case provokes. This is also used by some of the test
- server support functions.
- </item>
- </list>
- <p>There is no time limit for a test case, unless the test case
- itself imposes such a limit, by calling
- <c>test_server:timetrap/1</c> for example. The call can be made
- in each test case, or in the <c>init_per_testcase/2</c>
- function. Make sure to call the corresponding
- <c>test_server:timetrap_cancel/1</c> function as well, e.g in the
- <c>end_per_testcase/2</c> function, or else the test cases will
- always fail.
- </p>
- </section>
-
-</chapter>
-
diff --git a/lib/test_server/ebin/.gitignore b/lib/test_server/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/test_server/ebin/.gitignore
+++ /dev/null
diff --git a/lib/test_server/include/test_server.hrl b/lib/test_server/include/test_server.hrl
deleted file mode 100644
index 77864ef3b5..0000000000
--- a/lib/test_server/include/test_server.hrl
+++ /dev/null
@@ -1,32 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--ifdef(line_trace).
--line_trace(true).
--define(line,
- io:format(lists:concat([?MODULE,",",integer_to_list(?LINE),": ~p"]),
- [erlang:monotonic_time()-erlang:system_info(start_time)]),).
--else.
--define(line,).
--endif.
--define(t,test_server).
--define(config,test_server:lookup_config).
-
-
diff --git a/lib/test_server/include/test_server_line.hrl b/lib/test_server/include/test_server_line.hrl
deleted file mode 100644
index 37da956cd0..0000000000
--- a/lib/test_server/include/test_server_line.hrl
+++ /dev/null
@@ -1,20 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
diff --git a/lib/test_server/info b/lib/test_server/info
deleted file mode 100644
index 7a9ed6c700..0000000000
--- a/lib/test_server/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: test Test Applications
-short: The OTP Test Server
diff --git a/lib/test_server/prebuild.skip b/lib/test_server/prebuild.skip
deleted file mode 100644
index 8ee4101f6a..0000000000
--- a/lib/test_server/prebuild.skip
+++ /dev/null
@@ -1 +0,0 @@
-src/autom4te.cache
diff --git a/lib/test_server/src/Makefile b/lib/test_server/src/Makefile
deleted file mode 100644
index 6a26ee2933..0000000000
--- a/lib/test_server/src/Makefile
+++ /dev/null
@@ -1,144 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-include $(ERL_TOP)/make/target.mk
-
-# ----------------------------------------------------
-# Configuration info.
-# ----------------------------------------------------
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(TEST_SERVER_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/test_server-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= test_server_ctrl \
- test_server_gl \
- test_server_io \
- test_server_node \
- test_server \
- test_server_sup \
- erl2html2
-
-TS_MODULES= \
- ts \
- ts_run \
- ts_lib \
- ts_make \
- ts_erl_config \
- ts_autoconf_win32 \
- ts_install \
- ts_install_cth \
- ts_benchmark
-
-TARGET_MODULES= $(MODULES:%=$(EBIN)/%)
-TS_TARGET_MODULES= $(TS_MODULES:%=$(EBIN)/%)
-
-ERL_FILES= $(MODULES:=.erl)
-TS_ERL_FILES= $(TS_MODULES:=.erl)
-HRL_FILES = ../include/test_server.hrl ../include/test_server_line.hrl
-INTERNAL_HRL_FILES = test_server_internal.hrl
-TS_HRL_FILES= ts.hrl
-C_FILES =
-AUTOCONF_FILES = configure.in conf_vars.in
-PROGRAMS = configure config.sub config.guess install-sh
-CONFIG = ts.config ts.unix.config ts.win32.config
-
-TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) \
- $(APP_TARGET) $(APPUP_TARGET)
-TS_TARGET_FILES = $(TS_MODULES:%=$(EBIN)/%.$(EMULATOR))
-
-TARGETS = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(PROGRAMS) \
- $(APP_TARGET) $(APPUP_TARGET)
-TS_TARGETS = $(TS_MODULES:%=$(EBIN)/%.$(EMULATOR))
-
-APP_FILE= test_server.app
-APP_SRC= $(APP_FILE).src
-APP_TARGET= $(EBIN)/$(APP_FILE)
-
-APPUP_FILE= test_server.appup
-APPUP_SRC= $(APPUP_FILE).src
-APPUP_TARGET= $(EBIN)/$(APPUP_FILE)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS += -I../include -Werror
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-tests debug opt: $(TARGETS) $(TS_TARGETS)
-
-clean:
- rm -f $(TARGET_FILES) $(TS_TARGET_FILES)
- rm -f core
-
-docs:
-
-configure: configure.in
- autoconf configure.in > configure
-
-# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-$(APP_TARGET): $(APP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(ERL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(INTERNAL_HRL_FILES) $(TS_HRL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/include"
- $(INSTALL_DATA) $(HRL_FILES) "$(RELSYSDIR)/include"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
-
-release_tests_spec: opt
- $(INSTALL_DIR) "$(RELEASE_PATH)/test_server"
- $(INSTALL_DATA) $(ERL_FILES) $(TS_ERL_FILES) \
- $(HRL_FILES) $(INTERNAL_HRL_FILES) $(TS_HRL_FILES) \
- $(TS_TARGET_FILES) \
- $(AUTOCONF_FILES) $(C_FILES) $(CONFIG) \
- "$(RELEASE_PATH)/test_server"
- $(INSTALL_SCRIPT) $(PROGRAMS) "$(RELEASE_PATH)/test_server"
-
-release_docs_spec:
-
diff --git a/lib/test_server/src/test_server.app.src b/lib/test_server/src/test_server.app.src
deleted file mode 100644
index 334be8109d..0000000000
--- a/lib/test_server/src/test_server.app.src
+++ /dev/null
@@ -1,39 +0,0 @@
-% This is an -*- erlang -*- file.
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-
-{application, test_server,
- [{description, "The OTP Test Server application"},
- {vsn, "%VSN%"},
- {modules, [
- erl2html2,
- test_server_ctrl,
- test_server,
- test_server_io,
- test_server_node,
- test_server_sup
- ]},
- {registered, [test_server_ctrl,
- test_server,
- test_server_break_process]},
- {applications, [kernel,stdlib]},
- {env, []},
- {runtime_dependencies, ["tools-2.8","stdlib-2.5","runtime_tools-1.8.16",
- "observer-2.1","kernel-4.0","inets-6.0",
- "syntax_tools-1.7","erts-7.0"]}]}.
-
diff --git a/lib/test_server/src/test_server.appup.src b/lib/test_server/src/test_server.appup.src
deleted file mode 100644
index 7c4aa630ae..0000000000
--- a/lib/test_server/src/test_server.appup.src
+++ /dev/null
@@ -1,22 +0,0 @@
-%% -*- erlang -*-
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-{"%VSN%",
- [{<<".*">>,[{restart_application, test_server}]}],
- [{<<".*">>,[{restart_application, test_server}]}]
-}.
diff --git a/lib/test_server/src/things/distr_startup_SUITE.erl b/lib/test_server/src/things/distr_startup_SUITE.erl
deleted file mode 100644
index aa84ab007f..0000000000
--- a/lib/test_server/src/things/distr_startup_SUITE.erl
+++ /dev/null
@@ -1,239 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(distr_startup_SUITE).
--compile([export_all]).
-%%-define(line_trace,1).
--include("test_server.hrl").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-all(suite) -> [reads,writes].
-
--define(iterations,10000).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-app1() ->
- {application, app1,
- [{description, "ERTS CXC 138 10"},
- {vsn, "2.0"},
- {applications, [kernel, stdlib]},
- {mod, {ch_sup, {app1, 1, 3}}}]}.
-
-app3() ->
- {application, app3,
- [{description, "ERTS CXC 138 10"},
- {vsn, "2.0"},
- {applications, [kernel, stdlib]},
- {mod, {ch_sup, {app3, 7, 9}}}]}.
-
-
-config(Fd,C1,C2,C3) ->
- io:format(Fd,
- "[{kernel, [{sync_nodes_optional, ['~s','~s','~s']},"
- "{sync_nodes_timeout, 1},"
- "{distributed, [{app1, ['~s', '~s', '~s']},"
- "{app2, 10000, ['~s', '~s', '~s']},"
- "{app3, 5000, [{'~s', '~s'}, '~s']}]}]}].~n",
- [C1,C2,C3, C1,C2,C3, C1,C2,C3, C1,C2,C3]).
-
-from(H, [H | T]) -> T;
-from(H, [_ | T]) -> from(H, T);
-from(H, []) -> [].
-
-%%-----------------------------------------------------------------
-%% Test suite for distributed applications, tests start, load
-%% etc indirectly.
-%% Should be started in a CC view with:
-%% erl -sname master -rsh ctrsh
-%%-----------------------------------------------------------------
-start_nodes(Conf) ->
- % Write a config file
- ?line Nodes = ?config(nodes,Conf),
- ?line [C1,C2,C3|_] = Nodes, %% Need at least 3 nodes
- ?line Dir = ?config(priv_dir,Conf),
- ?line {ok, Fd} = file:open(Dir ++ "sys.config", write),
- ?line config(Fd,C1,C2,C3),
- ?line file:close(Fd),
- ?line Config = Dir ++ "sys",
-
- % Test [cp1, cp2, cp3]
- ?line {ok, Cp1} = start_node(lists:nth(1,Nodes), Config),
- ?line {ok, Cp2} = start_node(lists:nth(2,Nodes), Config),
- ?line {ok, Cp3} = start_node(lists:nth(3,Nodes), Config),
- % Start app1 and make sure cp1 starts it
- %%?line rpc:multicall([Cp1, Cp2, Cp3], application, load, [app1()]),
- %%?line rpc:multicall([Cp1, Cp2, Cp3], application, start,[app1,permanent]),
- ?line test_server:sleep(1000),
- {Cp1,Cp2,Cp3}.
-
-stop_nodes({Cp1,Cp2,Cp3}) ->
- ?line stop_node(Cp1),
- ?line stop_node(Cp2),
- ?line stop_node(Cp3).
-
-start_node(NodeAtHost, Config) ->
- ?line NodeAtHostStr = atom_to_list(NodeAtHost),
- ?line HostStr = from($@,NodeAtHostStr),
- ?line NodeStr = lists:reverse(from($@,lists:reverse(NodeAtHostStr))),
- ?line Host = list_to_atom(HostStr),
- ?line Node = list_to_atom(NodeStr),
- ?line io:format("Launching slave node ~p@~p ~p",[Node,Host,Config]),
- ?line slave:start(Host, Node, lists:concat(["-config ", Config])).
-
-stop_node(Node) ->
- ?line rpc:cast(Node, erlang, halt, []).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start_client_process(Cp,Mode,NodeNum) ->
- io:format("Starting client process at ~p in mode ~p",[Cp,Mode]),
- ?line case rpc:call(Cp, erlang, spawn,
- [?MODULE, client,
- [Mode,NodeNum,self(),random:uniform(1000)]]) of
- {badrpc,Reason} ->
- ?line exit({badrpc,{Cp,Reason}});
- Client ->
- ?line Client
- end.
-
-start_clients(Mode,Conf) ->
- ?line random:seed(4711,0,0),
- ?line {Cp1,Cp2,Cp3} = start_nodes(Conf),
- ?line Client1 = start_client_process(Cp1,Mode,1),
- ?line Client2 = start_client_process(Cp2,Mode,2),
- ?line Client3 = start_client_process(Cp3,Mode,3),
- test_server:format(1,"All 3 nodes started, "
- "power off client(s) any time...",[]),
- Client1 ! go,
- Client2 ! go,
- Client3 ! go,
- {{Cp1,Cp2,Cp3},{Client1,Client2,Client3}}.
-
-stop_clients(Cps) ->
- test_server:format(1,"Test completed.",[]),
- ?line stop_nodes(Cps).
-
-data() ->
- {{self(),foo,bar,[1,2,3,4,5,6,7],{{{{}}}},
- "We need pretty long packages, so that there is a big risk "
- "of cutting it in the middle when suddenly turning off "
- "the power or breaking the connection. "
- "We don't check the contents of the data very much, but "
- "at least there is a magic cookie at the end (123456)."
- "If that one arrives correctly, the link is ok as far "
- "as we are concerned."},
- 123456}.
-
-reads(suite) -> [];
-reads(Conf) ->
- ?line {Cps,_} = start_clients(w,Conf),
- ?line read_loop(?iterations,0),
- ?line stop_clients(Cps),
- ok.
-
-read_loop(0,M) ->
- ok;
-read_loop(N,M) ->
- ?line Dog = test_server:timetrap(test_server:seconds(0.5)),
- M2 =
- receive
- {Node,Count,{_,123456}} ->
- ?line setelement(Node,M,element(Node,M)+1);
- {Node,Count,Data} ->
- ?line exit({network_transmission_error,Data});
- {nodedown,Node} ->
- ?line test_server:format(1,"Node ~s went down",[Node]),
- ?line M;
- Other ->
- ?line M
- after test_server:seconds(0.1) ->
- ?line io:format("No message!"),
- ?line M
- end,
- ?line test_server:timetrap_cancel(Dog),
- ?line M3 =
- case N rem 100 of
- 0 -> io:format("~p reads to go (~w msgs)",[N,M2]),
- {0,0,0};
- _ -> M2
- end,
- ?line read_loop(N-1,M3).
-
-client(w,NodeNum,Pid,Seed) ->
- random:seed(Seed,0,0),
- receive
- go -> ok
- end,
- client_write_loop(Pid,0,NodeNum,data());
-client(r,NodeNum,Pid,Seed) ->
- random:seed(Seed,0,0),
- receive
- go -> ok
- end,
- client_read_loop(0).
-
-client_write_loop(Pid,N,NodeNum,Data) ->
- test_server:sleep(random:uniform(20)),
- Pid ! {NodeNum,N,Data},
- client_write_loop(Pid,N+1,NodeNum,Data).
-
-writes(suite) -> [];
-writes(Conf) ->
- ?line {Cps,{C1,C2,C3}} = start_clients(r,Conf),
- ?line write_loop(2*?iterations,{C1,C2,C3},data()),
- ?line stop_clients(Cps),
- ok.
-
-write_loop(0,_,_) ->
- ok;
-write_loop(N,Clients,Data) ->
- ?line Dog = test_server:timetrap(test_server:seconds(0.5)),
- ?line Client = element(random:uniform(size(Clients)),Clients),
- ?line Client ! {node(),N,Data},
- ?line test_server:timetrap_cancel(Dog),
- receive
- {nodedown,Node} ->
- ?line test_server:format(1,"Node ~s went down",[Node])
- after 0 ->
- ?line ok
- end,
- ?line case N rem 100 of
- 0 -> io:format("~p writes to go",[N]);
- _ -> ok
- end,
- ?line write_loop(N-1,Clients,Data).
-
-client_read_loop(N) ->
- receive
- {Node,Count,{_,123456}} ->
- ?line ok;
- {Node,Count,Data} ->
- ?line io:format("~p(~p): transmission error from node ~p(~p): ~p",
- [node(),N,Node,Count,Data]);
- Other ->
- ?line io:format("~p(~p): got a strange message: ~p",
- [node(),N,Other])
- end,
- client_read_loop(N+1).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
diff --git a/lib/test_server/src/things/mnesia_power_SUITE.erl b/lib/test_server/src/things/mnesia_power_SUITE.erl
deleted file mode 100644
index e9bc75e583..0000000000
--- a/lib/test_server/src/things/mnesia_power_SUITE.erl
+++ /dev/null
@@ -1,126 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(mnesia_power_SUITE).
--compile([export_all]).
-%%-define(line_trace,1).
--include("test_server.hrl").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-all(suite) -> [run].
-
--define(iterations,3). %% nof power-off cycles to do before acceptance
--define(rows,8). %% nof database rows to use (not too big, please)
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--record(sum_table_1,{row,a,b,c,s}).
-
-run(suite) -> [];
-run(Config) ->
- ?line mnesia:create_schema([node()]),
- ?line mnesia:start(),
- ?line mnesia:create_table([{name, sum_table_1}, {disc_copies,[node()]},
- {attributes,record_info(fields,sum_table_1)}]),
- ?line run_test(Config,?iterations).
-
-run(Config,N) ->
- ?line mnesia:start(),
- ?line check_consistency(sum_table_1),
- case N of
- 0 -> ?line ok;
- N -> ?line run_test(Config,N)
- end.
-
-run_test(Config,N) ->
- ?line Pid1a = start_manipulator(sum_table_1),
- ?line Pid1b = start_manipulator(sum_table_1),
- ?line Pid1c = start_manipulator(sum_table_1),
- ?line test_server:resume_point(?MODULE,run,[Config,N-1]),
- ?line test_server:format(1,"Manipulating data like crazy now, "
- "power off any time..."),
- ?line test_server:sleep(infinity).
-
-start_manipulator(Table) ->
- ?line spawn_link(?MODULE,manipulator_init,[Table]).
-
-manipulator_init(Table) ->
- random:seed(4711,0,0),
- manipulator(0,Table).
-
-manipulator(N,Table) ->
- ?line Fun =
- fun() ->
- ?line Row = random:uniform(?rows),
- ?line A = random:uniform(100000),
- ?line B = random:uniform(100000),
- ?line C = random:uniform(100000),
- ?line Sum = A+B+C,
- ?line case mnesia:write(#sum_table_1
- {row=Row,a=A,b=B,c=C,s=Sum}) of
- ok -> ok;
- Other ->
- ?line io:format("Trans failed: ~p\n",[Other])
- end
- end,
- ?line mnesia:transaction(Fun),
- case mnesia:table_info(sum_table_1,size) of
- 0 -> exit(still_empty);
- _ -> ok
- end,
- case N rem 2000 of
- 0 -> io:format("~p did ~p operations",[self(),N]),
- check_consistency(sum_table_1);
- _ -> ok
- end,
- ?line manipulator(N+1,Table).
-
-check_consistency(Table) ->
- io:format("Checking consistency of table ~p\n",[Table]),
- All = mnesia:table_info(Table,wild_pattern),
- ?line Fun =
- fun() ->
- mnesia:match_object(All)
- end,
- ?line case mnesia:transaction(Fun) of
- {atomic,Val} ->
- check_consistency_rows(Val,0);
- Other ->
- io:format("Trans failed: ~p\n",[Other]),
- exit(failed),
- check_consistency(Table)
- end.
-
-check_consistency_rows([#sum_table_1{a=A,b=B,c=C,s=Sum}|Rows],N) ->
- ?line Sum=A+B+C,
- ?line check_consistency_rows(Rows,N+1);
-check_consistency_rows([],N) ->
- io:format("All ~p rows were consistent\n",[N]),
- {ok,N};
-check_consistency_rows(Thing,N) ->
- io:format("Mnesia transaction returned:\n~p\n",[Thing]),
- exit({bad_format,Thing}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-
-
diff --git a/lib/test_server/src/things/random_kill_SUITE.erl b/lib/test_server/src/things/random_kill_SUITE.erl
deleted file mode 100644
index 917bc2b3d5..0000000000
--- a/lib/test_server/src/things/random_kill_SUITE.erl
+++ /dev/null
@@ -1,82 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(random_kill_SUITE).
--compile([export_all]).
-%%-define(line_trace,1).
--include("test_server.hrl").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-all(suite) -> [run].
-
--define(iterations,25). %% Kill this many processes,
- %% possibly with reboots in between
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-run(suite) -> [];
-run(Config) ->
- registered(?iterations).
-
-registered(0) ->
- ok;
-registered(N) ->
- random:seed(3461*N,1159*N,351*N),
- Pid = select_victim(registered),
- test_server:resume_point(?MODULE,registered,[N-1]),
- test_server:format("About to kill pid ~p (~p)\n~p",
- [Pid,process_info(Pid,registered_name),info(Pid)]),
- %%exit(Pid,kill),
- registered(N-1).
-
-info(Pid) ->
- Rest0 = tl(pid_to_list(Pid)),
- {P1,Rest1} = get_until($.,Rest0),
- {P2,Rest2} = get_until($.,Rest1),
- {P3,_} = get_until($>,Rest2),
- c:i(list_to_integer(P1),list_to_integer(P2),list_to_integer(P3)).
-
-get_until(Ch,L) ->
- get_until(Ch,L,[]).
-get_until(Ch,[],Acc) ->
- {lists:reverse(Acc),[]};
-get_until(Ch,[Ch|T],Acc) ->
- {lists:reverse(Acc),T};
-get_until(Ch,[H|T],Acc) ->
- get_until(Ch,T,[H|Acc]).
-
-select_victim(registered) ->
- Pids =
- lists:map(fun(Server)-> whereis(Server) end,registered()),
- ImmunePids =
- [self()|lists:map(fun(Job)-> element(2,Job) end,test_server:jobs())],
- SuitablePids =
- lists:filter(fun(Pid)-> case lists:member(Pid,ImmunePids) of
- true -> false;
- false -> true
- end
- end, Pids),
- Selected = random:uniform(length(SuitablePids)),
- io:format("Selected ~p if ~p",[Selected,length(SuitablePids)]),
- lists:nth(Selected,SuitablePids).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
diff --git a/lib/test_server/src/things/soft.gs.txt b/lib/test_server/src/things/soft.gs.txt
deleted file mode 100644
index ec57884997..0000000000
--- a/lib/test_server/src/things/soft.gs.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-6> gs:start().
-RealTimeViolation, 478ms (after 1164 good)
-{1,<0.65.0>}
-RealTimeViolation, 352ms (after 0 good)
-RealTimeViolation, 492ms (after 0 good)
-RealTimeViolation, 166ms (after 0 good)
-RealTimeInfo, 18ms (after 7 good)
-RealTimeViolation, 115ms (after 13 good)
-7> application-specific initialization failed: couldn't connect to display ":0.0"
-RealTimeViolation, 20340ms (after 0 good)
-gs error: user backend died reason {port_handler,#Port,normal}
-
-RealTimeInfo, 31ms (after 21 good)
-RealTimeInfo, 21ms (after 69 good)
-RealTimeInfo, 21ms (after 119 good)
-RealTimeInfo, 21ms (after 169 good)
diff --git a/lib/test_server/src/things/verify.erl b/lib/test_server/src/things/verify.erl
deleted file mode 100644
index b09d0fbda9..0000000000
--- a/lib/test_server/src/things/verify.erl
+++ /dev/null
@@ -1,200 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(verify).
-
--export([dir/0, dir/1]).
-
-%% usage verify:dir()
-%% or verify:dir(Dir)
-%%
-%% runs tests on all files with the extension ".t1"
-%% creates an error log file verify.log in the directory where the
-%% tests were run
-
--import(lists, [reverse/1, foldl/3, map/2]).
-
-dir() ->
- dir(".").
-
-dir(Dir) ->
- case file:list_dir(Dir) of
- {ok, Files} ->
- VFiles = collect_vers(Files, []),
- VFiles1 = map(fun(F) -> Dir ++ "/" ++ F end, VFiles),
- Nerrs = foldl(fun(F, Sum) ->
- case file(F) of
- {file,_,had,N,errors} ->
- Sum + N;
- no_errors ->
- Sum;
- Other ->
- Sum + 1
- end
- end, 0, VFiles1),
- case Nerrs of
- 0 -> no_errors;
- _ -> {dir,Dir,had,Nerrs,errors}
- end;
- _ ->
- {error, cannot,list_dir, Dir}
- end.
-
-collect_vers([H|T], L) ->
- case reverse(H) of
- [$1,$t,$.|T1] -> collect_vers(T, [reverse(T1)|L]);
- _ -> collect_vers(T, L)
- end;
-collect_vers([], L) ->
- L.
-
-file(File) ->
- case file:open(File ++ ".t1", read) of
- {ok, S} ->
- io:format("Verifying: ~s\n", [File]),
- ErrFile = File ++ ".errs",
- {ok, E} = file:open(ErrFile, write),
- Bind0 = erl_eval:new_bindings(),
- NErrs = do(S, {E, File, Bind0, 0}, 1),
- file:close(S),
- file:close(E),
- case NErrs of
- 0 ->
- file:delete(ErrFile),
- no_errors;
- _ ->
- {file,File,had,NErrs,errors}
- end;
- _ ->
- error_in_opening_file
- end.
-
-do(S, Env, Line) ->
- R = io:scan_erl_exprs(S, '', Line),
- do1(R, S, Env).
-
-do1({eof,_}, _, {_,_,_,NErrs}) ->
- NErrs;
-do1({ok,Toks,Next}, S, Env0) ->
- E1 = handle_toks(Toks, Next, Env0),
- do(S, E1, Next);
-do1({error, {Line,Mod,Args}, Next}, S, E) ->
- io:format("*** ~w ~p~n", [Line,Mod:format_error(Args)]),
- E1 = add_error(E),
- do(S, E1, Next).
-
-add_error({Stream, File, Bindings, N}) -> {Stream, File, Bindings, N+1}.
-
-handle_toks(Toks, Line, Env0) ->
- %% io:format("Toks:~p\n", [Toks]).
- case erl_parse:parse_exprs(Toks) of
- {ok, Exprs} ->
- %% io:format("Got:~p\n", [Exprs]),
- eval(Exprs, Line, Env0);
- {error, {LineNo, Mod, What}} ->
- Str = apply(Mod, format_error, [What]),
- io:format("*** Line:~w ***~s\n", [LineNo, Str]),
- add_error(Env0);
- Parse_error ->
- io:format("Parse Error:~p\n",[Parse_error]),
- add_error(Env0)
- end.
-
-forget([{var,_,Name}], B0) -> erl_eval:del_binding(Name, B0);
-forget([], _) -> erl_eval:new_bindings().
-
-eval([{call,_,{atom,_,f}, Args}], _, {Stream, Bind0, Errs}) ->
- Bind1 = forget(Args, Bind0),
- {Stream, Bind1, Errs};
-eval(Exprs, Line, {Stream, File, Bind0, NErrs}) ->
- %% io:format("Bindings >> ~p\n", [Bind0]),
- %% io:format("Exprs >> ~p\n", [Exprs]),
- case catch erl_eval:exprs(Exprs, Bind0) of
- {'EXIT', Reason} ->
- out_both(Stream, "----------------------------------~n", []),
- out_both(Stream, "File:~s Error in:~s~n", [File, pp(Exprs)]),
- print_bindings(Stream, Exprs, Bind0),
- print_lhs(Stream, Exprs),
- out_both(Stream, '*** Rhs evaluated to:~p~n',[rhs(Exprs, Bind0)]),
- {Stream, File, Bind0, NErrs+1};
- {value, _, Bind1} ->
- {Stream, File, Bind1, NErrs}
- end.
-
-pp([H]) -> erl_pp:expr(H);
-pp([H|T]) -> [erl_pp:expr(H),$,|pp(T)];
-pp([]) -> [].
-
-print_bindings(E, Form, Bindings) ->
- case varsin(Form) of
- [] ->
- true;
- Vars ->
- print_vars(E, Vars, Bindings)
- end.
-
-print_vars(E, [Var|T], Bindings) ->
- case erl_eval:binding(Var, Bindings) of
- {value, Val} ->
- out_both(E, '~s = ~p\n',[Var, Val]);
- unbound ->
- out_both(E, '~s *is unbound*\n', [Var])
- end,
- print_vars(E, T, Bindings);
-print_vars(_, [], _) ->
- true.
-
-
-out_both(E, Format, Data) ->
- io:format(Format, Data),
- io:format(E, Format, Data).
-
-print_lhs(E, [{match, _, Lhs, Rhs}]) ->
- %% io:format(">>>> here:~w\n",[Lhs]),
- out_both(E, '*** Lhs was:~s\n',[erl_pp:expr(Lhs)]);
-print_lhs(E, _) ->
- out_both(E, '** UNDEFINED **', []).
-
-
-rhs([{match, _, Lhs, Rhs}], Bindings) ->
- case catch erl_eval:exprs([Rhs], Bindings) of
- {value, Val, _} -> Val;
- Other -> undefined()
- end;
-rhs(_, _) ->
- undefined().
-
-varsin(X) -> varsin(X, []).
-
-varsin({var,_,'_'}, L) ->
- L;
-varsin({var,_,V}, L) ->
- case lists:member(V, L) of
- true -> L;
- false -> [V|L]
- end;
-varsin([H|T], L) ->
- varsin(T, varsin(H, L));
-varsin(T, L) when tuple(T) ->
- varsin(tuple_to_list(T), L);
-varsin(_, L) ->
- L.
-
-undefined() ->
- '** UNDEFINED **'.
diff --git a/lib/test_server/test/Makefile b/lib/test_server/test/Makefile
deleted file mode 100644
index 8eec940505..0000000000
--- a/lib/test_server/test/Makefile
+++ /dev/null
@@ -1,92 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- test_server_SUITE \
- test_server_test_lib \
- erl2html2_SUITE
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
-INSTALL_PROGS= $(TARGET_FILES)
-
-EMAKEFILE=Emakefile
-COVERFILE=test_server.cover
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/test_server_test
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-
-ERL_MAKE_FLAGS += -pa $(ERL_TOP)/lib/test_server/ebin
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/test
-
-EBIN = .
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-.PHONY: make_emakefile
-
-make_emakefile:
- $(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) \
- '*_SUITE_make' > $(EMAKEFILE)
- $(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) $(MODULES)\
- >> $(EMAKEFILE)
-
-tests debug opt: make_emakefile
- erl $(ERL_MAKE_FLAGS) -make
-
-clean:
- rm -f $(EMAKEFILE)
- rm -f $(TARGET_FILES) $(GEN_FILES)
- rm -f core
-
-docs:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
-
-release_tests_spec: make_emakefile
- $(INSTALL_DIR) "$(RELSYSDIR)"
- $(INSTALL_DATA) $(EMAKEFILE) $(ERL_FILES) $(COVERFILE) "$(RELSYSDIR)"
- $(INSTALL_DATA) test_server_test_lib.hrl test_server.spec test_server.cover "$(RELSYSDIR)"
- chmod -R u+w "$(RELSYSDIR)"
- @tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
-
-release_docs_spec:
diff --git a/lib/test_server/test/test_server.cover b/lib/test_server/test/test_server.cover
deleted file mode 100644
index 052415377d..0000000000
--- a/lib/test_server/test/test_server.cover
+++ /dev/null
@@ -1 +0,0 @@
-{incl_app,test_server,details}.
diff --git a/lib/test_server/test/test_server.spec b/lib/test_server/test/test_server.spec
deleted file mode 100644
index a3b4d01d08..0000000000
--- a/lib/test_server/test/test_server.spec
+++ /dev/null
@@ -1 +0,0 @@
-{suites, "../test_server_test", all}.
diff --git a/lib/test_server/vsn.mk b/lib/test_server/vsn.mk
deleted file mode 100644
index 8c5fc97383..0000000000
--- a/lib/test_server/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-TEST_SERVER_VSN = 3.10
diff --git a/lib/tools/Makefile b/lib/tools/Makefile
index 2699ffab51..e17e9cfd1e 100644
--- a/lib/tools/Makefile
+++ b/lib/tools/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
# Macros
# ----------------------------------------------------
-SUB_DIRECTORIES = c_src src doc/src examples priv emacs
+SUB_DIRECTORIES = c_src src doc/src examples emacs
include vsn.mk
VSN = $(TOOLS_VSN)
diff --git a/lib/tools/c_src/Makefile.in b/lib/tools/c_src/Makefile.in
index 66bba229f6..cfe91917f8 100644
--- a/lib/tools/c_src/Makefile.in
+++ b/lib/tools/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -97,11 +97,8 @@ DRIVERS=
ifneq ($(strip $(ETHR_LIB_NAME)),)
# Need ethread package for emem
-ifneq ($(findstring ose,$(TARGET)),ose)
-# Do not build on OSE
PROGS += $(BIN_DIR)/emem$(TYPEMARKER)@EXEEXT@
endif
-endif
EMEM_OBJ_DIR=$(OBJ_DIR)/emem
CREATE_DIRS += $(EMEM_OBJ_DIR)
@@ -152,12 +149,7 @@ ERTS_LIB = $(ERL_TOP/erts/lib_src/obj/$(TARGET)/$(TYPE)/MADE
_create_dirs := $(shell mkdir -p $(CREATE_DIRS))
-ifneq ($(findstring ose,$(TARGET)),ose)
all: $(PROGS) $(DRIVERS)
-else
-# Do not build dynamic files on OSE
-all:
-endif
$(ERTS_LIB):
$(make_verbose)cd $(ERL_TOP)/erts/lib_src && $(MAKE) $(TYPE)
diff --git a/lib/tools/c_src/erl_memory.c b/lib/tools/c_src/erl_memory.c
index d3a96884db..13a3fccc6d 100644
--- a/lib/tools/c_src/erl_memory.c
+++ b/lib/tools/c_src/erl_memory.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2003-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2003-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/tools/doc/src/Makefile b/lib/tools/doc/src/Makefile
index c44c9ef4df..d9c3b0ad2a 100644
--- a/lib/tools/doc/src/Makefile
+++ b/lib/tools/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/tools/doc/src/book.xml b/lib/tools/doc/src/book.xml
index 03afa1fc37..38d0408156 100644
--- a/lib/tools/doc/src/book.xml
+++ b/lib/tools/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1997</year><year>2013</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/cover_chapter.xml b/lib/tools/doc/src/cover_chapter.xml
index 2f7f8d8083..3847adbe59 100644
--- a/lib/tools/doc/src/cover_chapter.xml
+++ b/lib/tools/doc/src/cover_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -451,48 +451,5 @@ ok
<p>When Cover is stopped, all Cover compiled modules are unloaded.</p>
</section>
</section>
-
- <section>
- <title>Using the Web Based User Interface to Cover</title>
-
- <section>
- <title>Introduction</title>
- <p>To ease the use of Cover there is a web based user interface
- to Cover called WebCover. WebCover is designed to be started
- and used via WebTool. It is possible to Cover compile Erlang
- modules and to generate printable Cover and Call analyses via
- the web based user interface.</p>
- </section>
-
- <section>
- <title>Start the Web Based User Interface to Cover</title>
- <p>To start WebCover you can either start WebTool, point a
- browser to the start page of WebTool and start WebCover from
- there, or you can use the <c>start_webtool</c> script to start
- Webtool, WebCover and a browser. See WebTool documentation for
- further information.</p>
- <p>Currently WebCover is only compatible
- with Internet Explorer and Netscape Navigator 4.0 and higher.</p>
- </section>
-
- <section>
- <title>Navigating WebCover</title>
- <p>From the menu in the lefthand frame you can select the
- <c>Nodes</c>, <c>Compile</c>, <c>Import</c> or <c>Result</c>
- page.</p>
- <p>From the <c>Nodes</c> page you can add remote nodes to
- participate in the coverage analysis. Coverage data from all
- involved nodes will then be merged during analysis.</p>
- <p>From the <c>Compile</c> page you can Cover compile <c>.erl</c>
- or <c>.beam</c> files.</p>
- <p>From the <c>Import</c> page you can import coverage data from
- a previous analysis. Imported data will then be merged with
- the current coverage data. <em>Note</em> that it is only possible to
- import files with the extension <c>.coverdata</c>.</p>
- <p>From the <c>Result</c> page you can analyse, reset or export
- coverage data.</p>
- <p>Please follow the instructions on each page.</p>
- </section>
- </section>
</chapter>
diff --git a/lib/tools/doc/src/cprof.xml b/lib/tools/doc/src/cprof.xml
index d3be276d28..df0acbe617 100644
--- a/lib/tools/doc/src/cprof.xml
+++ b/lib/tools/doc/src/cprof.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2002</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/cprof_chapter.xml b/lib/tools/doc/src/cprof_chapter.xml
index 0e83dbbfb5..ba1e7432fd 100644
--- a/lib/tools/doc/src/cprof_chapter.xml
+++ b/lib/tools/doc/src/cprof_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2013</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/eprof.xml b/lib/tools/doc/src/eprof.xml
index 8e37d49c99..f098b7d39e 100644
--- a/lib/tools/doc/src/eprof.xml
+++ b/lib/tools/doc/src/eprof.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/erlang_mode.xml b/lib/tools/doc/src/erlang_mode.xml
index 4ecb8feadd..00cf5196b4 100644
--- a/lib/tools/doc/src/erlang_mode.xml
+++ b/lib/tools/doc/src/erlang_mode.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -252,6 +252,7 @@
behavior</item>
<item>gen_event - skeleton for the OTP gen_event behavior</item>
<item>gen_fsm - skeleton for the OTP gen_fsm behavior</item>
+ <item>gen_statem - skeleton for the OTP gen_statem behavior</item>
<item>Library module - skeleton for a module that does not
implement a process.</item>
<item>Corba callback - skeleton for a Corba callback module.</item>
diff --git a/lib/tools/doc/src/erlang_mode_chapter.xml b/lib/tools/doc/src/erlang_mode_chapter.xml
index e07e7a8176..b4e30d883b 100644
--- a/lib/tools/doc/src/erlang_mode_chapter.xml
+++ b/lib/tools/doc/src/erlang_mode_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2013</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/fprof.xml b/lib/tools/doc/src/fprof.xml
index 2dfc77fdfc..4c9e48045e 100644
--- a/lib/tools/doc/src/fprof.xml
+++ b/lib/tools/doc/src/fprof.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/fprof_chapter.xml b/lib/tools/doc/src/fprof_chapter.xml
index ecd8f385a5..5a2a5ad47c 100644
--- a/lib/tools/doc/src/fprof_chapter.xml
+++ b/lib/tools/doc/src/fprof_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2001</year><year>2013</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/instrument.xml b/lib/tools/doc/src/instrument.xml
index 76583cd03b..bb6f9b6100 100644
--- a/lib/tools/doc/src/instrument.xml
+++ b/lib/tools/doc/src/instrument.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1998</year><year>2013</year>
+ <year>1998</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/lcnt.xml b/lib/tools/doc/src/lcnt.xml
index c381488f85..9c8ce148e9 100644
--- a/lib/tools/doc/src/lcnt.xml
+++ b/lib/tools/doc/src/lcnt.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2009</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/lcnt_chapter.xml b/lib/tools/doc/src/lcnt_chapter.xml
index 060559c954..6cfdb5cf1b 100644
--- a/lib/tools/doc/src/lcnt_chapter.xml
+++ b/lib/tools/doc/src/lcnt_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2009</year><year>2013</year>
+ <year>2009</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/make.xml b/lib/tools/doc/src/make.xml
index 5c2e5e5d62..fddf5ebd7b 100644
--- a/lib/tools/doc/src/make.xml
+++ b/lib/tools/doc/src/make.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/notes.xml b/lib/tools/doc/src/notes.xml
index c62b0607ee..a0a817c0f2 100644
--- a/lib/tools/doc/src/notes.xml
+++ b/lib/tools/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,56 @@
</header>
<p>This document describes the changes made to the Tools application.</p>
+<section><title>Tools 2.8.5</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Correct a bug when adding multiple modules to an Xref
+ server. The bug was introduced in OTP-19.0. </p>
+ <p>
+ Own Id: OTP-13708 Aux Id: ERL-173 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Tools 2.8.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Update fprof to use the new 'spawned' trace event to
+ determine when a process has been created.</p>
+ <p>
+ Own Id: OTP-13499</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Optimize adding multiple modules to an Xref server.
+ </p>
+ <p>
+ Own Id: OTP-13593</p>
+ </item>
+ <item>
+ <p>
+ Various emacs mode improvements, such as better tags
+ support.</p>
+ <p>
+ Own Id: OTP-13610</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Tools 2.8.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/tools/doc/src/notes_history.xml b/lib/tools/doc/src/notes_history.xml
index d19aac4d4e..d955cbde69 100644
--- a/lib/tools/doc/src/notes_history.xml
+++ b/lib/tools/doc/src/notes_history.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/part.xml b/lib/tools/doc/src/part.xml
index b96586041a..796047fe8d 100644
--- a/lib/tools/doc/src/part.xml
+++ b/lib/tools/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/part_notes.xml b/lib/tools/doc/src/part_notes.xml
index c990e973a2..c4c6fa4d7d 100644
--- a/lib/tools/doc/src/part_notes.xml
+++ b/lib/tools/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/part_notes_history.xml b/lib/tools/doc/src/part_notes_history.xml
index dd9c27e872..a34e35fc56 100644
--- a/lib/tools/doc/src/part_notes_history.xml
+++ b/lib/tools/doc/src/part_notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/ref_man.xml b/lib/tools/doc/src/ref_man.xml
index 2d9ca7660a..d2131e7a93 100644
--- a/lib/tools/doc/src/ref_man.xml
+++ b/lib/tools/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/tags.xml b/lib/tools/doc/src/tags.xml
index b089f0674b..ea0ae5cc4d 100644
--- a/lib/tools/doc/src/tags.xml
+++ b/lib/tools/doc/src/tags.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>1998</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/xref.xml b/lib/tools/doc/src/xref.xml
index ebf9139f06..8c49f3a206 100644
--- a/lib/tools/doc/src/xref.xml
+++ b/lib/tools/doc/src/xref.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/doc/src/xref_chapter.xml b/lib/tools/doc/src/xref_chapter.xml
index e7186b9209..8b14e03064 100644
--- a/lib/tools/doc/src/xref_chapter.xml
+++ b/lib/tools/doc/src/xref_chapter.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/tools/emacs/erlang-eunit.el b/lib/tools/emacs/erlang-eunit.el
index a3c29c520c..3b85e6680a 100644
--- a/lib/tools/emacs/erlang-eunit.el
+++ b/lib/tools/emacs/erlang-eunit.el
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2009-2010. All Rights Reserved.
+;; Copyright Ericsson AB 2009-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
diff --git a/lib/tools/emacs/erlang-skels-old.el b/lib/tools/emacs/erlang-skels-old.el
index c271cce3cb..4087bc3013 100644
--- a/lib/tools/emacs/erlang-skels-old.el
+++ b/lib/tools/emacs/erlang-skels-old.el
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
@@ -816,7 +816,7 @@ Please see the function `tempo-define-template'.")
"%% Note: This directive should only be used in test suites." n
"-compile(export_all)." n n
- "-include_lib(\"test_server/include/test_server.hrl\")." n n
+ "-include_lib(\"common_test/include/ct.hrl\")." n n
(erlang-skel-separator 2)
"%% TEST SERVER CALLBACK FUNCTIONS" n
diff --git a/lib/tools/emacs/erlang-skels.el b/lib/tools/emacs/erlang-skels.el
index 6880ec733c..c1152f31a4 100644
--- a/lib/tools/emacs/erlang-skels.el
+++ b/lib/tools/emacs/erlang-skels.el
@@ -1,7 +1,7 @@
;;
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 2010-2014. All Rights Reserved.
+;; Copyright Ericsson AB 2010-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
@@ -56,6 +56,8 @@
erlang-skel-gen-event erlang-skel-header)
("gen_fsm" "gen-fsm"
erlang-skel-gen-fsm erlang-skel-header)
+ ("gen_statem" "gen-statem"
+ erlang-skel-gen-statem erlang-skel-header)
("wx_object" "wx-object"
erlang-skel-wx-object erlang-skel-header)
("Library module" "gen-lib"
@@ -858,6 +860,124 @@ Please see the function `tempo-define-template'.")
"*The template of a gen_fsm.
Please see the function `tempo-define-template'.")
+(defvar erlang-skel-gen-statem
+ '((erlang-skel-include erlang-skel-large-header)
+ "-behaviour(gen_statem)." n n
+
+ "%% API" n
+ "-export([start_link/0])." n
+ n
+ "%% gen_statem callbacks" n
+ "-export([init/1, terminate/3, code_change/4])." n
+ "-export([state_name/3])." n
+ "-export([handle_event/4])." n
+ n
+ "-define(SERVER, ?MODULE)." n
+ n
+ "-record(data, {})." n
+ n
+ (erlang-skel-double-separator-start 3)
+ "%%% API" n
+ (erlang-skel-double-separator-end 3) n
+ (erlang-skel-separator-start 2)
+ "%% @doc" n
+ "%% Creates a gen_statem process which calls Module:init/1 to" n
+ "%% initialize. To ensure a synchronized start-up procedure, this" n
+ "%% function does not return until Module:init/1 has returned." n
+ "%%" n
+ (erlang-skel-separator-end 2)
+ "-spec start_link() ->" n>
+ "{ok, Pid :: pid()} |" n>
+ "ignore |" n>
+ "{error, Error :: term()}." n
+ "start_link() ->" n>
+ "gen_statem:start_link({local, ?SERVER}, ?MODULE, [], [])." n
+ n
+ (erlang-skel-double-separator-start 3)
+ "%%% gen_statem callbacks" n
+ (erlang-skel-double-separator-end 3) n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% Whenever a gen_statem is started using gen_statem:start/[3,4] or" n
+ "%% gen_statem:start_link/[3,4], this function is called by the new" n
+ "%% process to initialize." n
+ (erlang-skel-separator-end 2)
+ "-spec init(Args :: term()) ->" n>
+ "{gen_statem:callback_mode()," n>
+ "State :: term(), Data :: term()} |" n>
+ "{gen_statem:callback_mode()," n>
+ "State :: term(), Data :: term()," n>
+ "[gen_statem:action()] | gen_statem:action()} |" n>
+ "ignore |" n>
+ "{stop, Reason :: term()}." n
+ "init([]) ->" n>
+ "{state_functions, state_name, #data{}}." n
+ n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% If the gen_statem runs with CallbackMode =:= state_functions" n
+ "%% there should be one instance of this function for each possible" n
+ "%% state name. Whenever a gen_statem receives an event," n
+ "%% the instance of this function with the same name" n
+ "%% as the current state name StateName is called to" n
+ "%% handle the event." n
+ (erlang-skel-separator-end 2)
+ "-spec state_name(" n>
+ "gen_statem:event_type(), Msg :: term()," n>
+ "Data :: term()) ->" n>
+ "gen_statem:state_function_result()." n
+ "state_name({call,Caller}, _Msg, Data) ->" n>
+ "{next_state, state_name, Data, [{reply,Caller,ok}]}." n
+ n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% If the gen_statem runs with CallbackMode =:= handle_event_function" n
+ "%% this function is called for every event a gen_statem receives." n
+ (erlang-skel-separator-end 2)
+ "-spec handle_event(" n>
+ "gen_statem:event_type(), Msg :: term()," n>
+ "State :: term(), Data :: term()) ->" n>
+ "gen_statem:handle_event_result()." n
+ "handle_event({call,From}, _Msg, State, Data) ->" n>
+ "{next_state, State, Data, [{reply,From,ok}]}." n
+ n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% This function is called by a gen_statem when it is about to" n
+ "%% terminate. It should be the opposite of Module:init/1 and do any" n
+ "%% necessary cleaning up. When it returns, the gen_statem terminates with" n
+ "%% Reason. The return value is ignored." n
+ (erlang-skel-separator-end 2)
+ "-spec terminate(Reason :: term(), State :: term(), Data :: term()) ->" n>
+ "any()." n
+ "terminate(_Reason, _State, _Data) ->" n>
+ "void." n
+ n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% Convert process state when code is changed" n
+ (erlang-skel-separator-end 2)
+ "-spec code_change(" n>
+ "OldVsn :: term() | {down,term()}," n>
+ "State :: term(), Data :: term(), Extra :: term()) ->" n>
+ "{gen_statem:callback_mode()," n>
+ "NewState :: term(), NewData :: term()} |" n>
+ "(Reason :: term())." n
+ "code_change(_OldVsn, State, Data, _Extra) ->" n>
+ "{state_functions, State, Data}." n
+ n
+ (erlang-skel-double-separator-start 3)
+ "%%% Internal functions" n
+ (erlang-skel-double-separator-end 3)
+ )
+ "*The template of a gen_statem.
+Please see the function `tempo-define-template'.")
+
(defvar erlang-skel-wx-object
'((erlang-skel-include erlang-skel-large-header)
"-behaviour(wx_object)." n n
@@ -1070,7 +1190,7 @@ Please see the function `tempo-define-template'.")
"%% Note: This directive should only be used in test suites." n
"-compile(export_all)." n n
- "-include_lib(\"test_server/include/test_server.hrl\")." n n
+ "-include_lib(\"common_test/include/ct.hrl\")." n n
(erlang-skel-separator-start 2)
"%% TEST SERVER CALLBACK FUNCTIONS" n
diff --git a/lib/tools/emacs/erlang-test.el b/lib/tools/emacs/erlang-test.el
new file mode 100644
index 0000000000..9a146632c5
--- /dev/null
+++ b/lib/tools/emacs/erlang-test.el
@@ -0,0 +1,122 @@
+;;; erlang-test.el -*- lexical-binding: t; coding: utf-8-unix -*-
+
+;;; Unit tests for erlang.el.
+
+;; Author: Johan Claesson
+;; Created: 2016-05-07
+;; Keywords: erlang, languages
+
+;; %CopyrightBegin%
+;;
+;; Copyright Ericsson AB 2016. All Rights Reserved.
+;;
+;; Licensed under the Apache License, Version 2.0 (the "License");
+;; you may not use this file except in compliance with the License.
+;; You may obtain a copy of the License at
+;;
+;; http://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing, software
+;; distributed under the License is distributed on an "AS IS" BASIS,
+;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;; See the License for the specific language governing permissions and
+;; limitations under the License.
+;;
+;; %CopyrightEnd%
+
+
+;;; Commentary:
+
+;; This library require GNU Emacs 25 or later.
+
+;;; Code:
+
+(require 'ert)
+(require 'cl-lib)
+(require 'erlang)
+
+(defvar erlang-test-code
+ '((nil . "-module(erlang_test).")
+ (nil . "-import(lists, [map/2]).")
+ (nil . "-compile(export_all).")
+ ("SYMBOL" . "-define(SYMBOL, value).")
+ ("MACRO" . "-define(MACRO(X), X + X).")
+ ("struct" . "-record(struct, {until,maps,are,everywhere}).")
+ ("function". "function() -> #struct{}."))
+ "Alist of erlang test code.
+Each entry have the format (TAGNAME . ERLANG_CODE). If TAGNAME
+is nil there is no definitions in the ERLANG_CODE. The
+ERLANG_CODE is a single line of erlang code. These lines will be
+concatenated to form an erlang file to test on.")
+
+
+(ert-deftest erlang-test-tags ()
+ (let* ((dir (make-temp-file "erlang-test" t))
+ (erlang-file (expand-file-name "erlang_test.erl" dir))
+ (tags-file (expand-file-name "TAGS" dir))
+ tags-file-name tags-table-list erlang-buffer)
+ (unwind-protect
+ (progn
+ (erlang-test-create-erlang-file erlang-file)
+ (erlang-test-compile-tags erlang-file tags-file)
+ (setq erlang-buffer (find-file-noselect erlang-file))
+ (with-current-buffer erlang-buffer
+ (setq-local tags-file-name tags-file))
+ ;; Setting global tags-file-name is a workaround for
+ ;; GNU Emacs bug#23164.
+ (setq tags-file-name tags-file)
+ (erlang-test-completion-table)
+ (erlang-test-xref-find-definitions erlang-file erlang-buffer))
+ (when (buffer-live-p erlang-buffer)
+ (kill-buffer erlang-buffer))
+ (let ((tags-buffer (find-buffer-visiting tags-file)))
+ (when (buffer-live-p tags-buffer)
+ (kill-buffer tags-buffer)))
+ (when (file-exists-p dir)
+ (delete-directory dir t)))))
+
+(defun erlang-test-create-erlang-file (erlang-file)
+ (with-temp-file erlang-file
+ (cl-loop for (_ . code) in erlang-test-code
+ do (insert code "\n"))))
+
+(defun erlang-test-compile-tags (erlang-file tags-file)
+ (should (zerop (call-process "etags" nil nil nil
+ "-o" tags-file
+ erlang-file))))
+
+(defun erlang-test-completion-table ()
+ (let ((erlang-replace-etags-tags-completion-table t))
+ (setq tags-completion-table nil)
+ (tags-completion-table))
+ (should (equal (sort tags-completion-table #'string-lessp)
+ (sort (erlang-expected-completion-table) #'string-lessp))))
+
+(defun erlang-expected-completion-table ()
+ (append (cl-loop for (symbol . _) in erlang-test-code
+ when (stringp symbol)
+ append (list symbol (concat "erlang_test:" symbol)))
+ (list "erlang_test:" "erlang_test:module_info")))
+
+(defun erlang-test-xref-find-definitions (erlang-file erlang-buffer)
+ (cl-loop for (tagname . code) in erlang-test-code
+ for line = 1 then (1+ line)
+ do (when tagname
+ (switch-to-buffer erlang-buffer)
+ (xref-find-definitions tagname)
+ (erlang-test-verify-pos erlang-file line)
+ (xref-find-definitions (concat "erlang_test:" tagname))
+ (erlang-test-verify-pos erlang-file line)))
+ (xref-find-definitions "erlang_test:")
+ (erlang-test-verify-pos erlang-file 1))
+
+(defun erlang-test-verify-pos (expected-file expected-line)
+ (should (string-equal (file-truename expected-file)
+ (file-truename (buffer-file-name))))
+ (should (eq expected-line (line-number-at-pos)))
+ (should (= (point-at-bol) (point))))
+
+
+(provide 'erlang-test)
+
+;;; erlang-test.el ends here
diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el
index 466bf139b9..a2062180f3 100644
--- a/lib/tools/emacs/erlang.el
+++ b/lib/tools/emacs/erlang.el
@@ -7,7 +7,7 @@
;; %CopyrightBegin%
;;
-;; Copyright Ericsson AB 1996-2014. All Rights Reserved.
+;; Copyright Ericsson AB 1996-2016. All Rights Reserved.
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
@@ -70,8 +70,8 @@
;; `debug-on-error' to `t'. Repeat the error and enclose the debug
;; information in your bug-report.
;;
-;; To set the variable you can use the following command:
-;; M-x set-variable RET debug-on-error RET t RET
+;; To toggle the variable you can use the following command:
+;; M-x toggle-debug-on-error RET
;;; Code:
(eval-when-compile (require 'cl))
@@ -897,6 +897,7 @@ resulting regexp is surrounded by \\_< and \\_>."
"get_module_info"
"get_stacktrace"
"hash"
+ "has_prepared_code_on_load"
"hibernate"
"insert_element"
"is_builtin"
@@ -970,7 +971,7 @@ resulting regexp is surrounded by \\_< and \\_>."
(defvar erlang-defun-prompt-regexp (concat "^" erlang-atom-regexp "\\s *(")
"Regexp which should match beginning of a clause.")
-(defvar erlang-file-name-extension-regexp "\\.[eh]rl$"
+(defvar erlang-file-name-extension-regexp "\\.erl$"
"*Regexp which should match an Erlang file name.
This regexp is used when an Erlang module name is extracted from the
@@ -1067,8 +1068,14 @@ behaviour.")
"Font lock keyword highlighting a function header.")
(defface erlang-font-lock-exported-function-name-face
- '((default (:inherit font-lock-function-name-face)))
- "Face used for highlighting exported functions.")
+ (if (featurep 'xemacs)
+ (progn
+ (require 'font-lock)
+ `((t (:foreground ,(face-foreground 'font-lock-function-name-face))
+ (:background ,(face-background 'font-lock-function-name-face)))))
+ '((default (:inherit font-lock-function-name-face))))
+ "Face used for highlighting exported functions."
+ :group 'erlang)
(defvar erlang-font-lock-exported-function-name-face
'erlang-font-lock-exported-function-name-face)
@@ -1284,6 +1291,11 @@ Unfortunately, XEmacs hasn't got support for a special Font
Lock syntax table. The effect is that `apply' in the atom
`foo_apply' will be highlighted as a bif.")
+(defvar erlang-replace-etags-tags-completion-table nil
+ "Internal flag used by advice `erlang-replace-tags-table'.
+This is non-nil when `etags-tags-completion-table' should be
+replaced by `erlang-etags-tags-completion-table'.")
+
;;; Avoid errors while compiling this file.
@@ -1337,14 +1349,22 @@ Lock syntax table. The effect is that `apply' in the atom
(defun erlang-version ()
"Return the current version of Erlang mode."
(interactive)
- (if (interactive-p)
+ (if (erlang-interactive-p)
(message "Erlang mode version %s, written by Anders Lindgren"
erlang-version))
erlang-version)
+(defun erlang-interactive-p ()
+ (if (fboundp 'called-interactively-p)
+ (called-interactively-p 'interactive)
+ (funcall (symbol-function 'interactive-p))))
+
+(unless (fboundp 'prog-mode)
+ (defun prog-mode ()
+ (use-local-map (make-keymap))))
;;;###autoload
-(defun erlang-mode ()
+(define-derived-mode erlang-mode prog-mode "Erlang"
"Major mode for editing Erlang source files in Emacs.
It knows about syntax and comment, it can indent code, it is capable
of fontifying the source file, the TAGS commands are aware of Erlang
@@ -1403,12 +1423,9 @@ and examples of hooks.
Other commands:
\\{erlang-mode-map}"
- (interactive)
- (kill-all-local-variables)
- (setq major-mode 'erlang-mode)
- (setq mode-name "Erlang")
+ ;; Use our own syntax table function
+ :syntax-table nil
(erlang-syntax-table-init)
- (use-local-map erlang-mode-map)
(erlang-electric-init)
(erlang-menu-init)
(erlang-mode-variables)
@@ -1417,13 +1434,13 @@ Other commands:
(erlang-tags-init)
(erlang-font-lock-init)
(erlang-skel-init)
- (tempo-use-tag-list 'erlang-tempo-tags)
+ (when (fboundp 'tempo-use-tag-list)
+ (tempo-use-tag-list 'erlang-tempo-tags))
+ (when (boundp 'xref-backend-functions)
+ (add-hook 'xref-backend-functions #'erlang-etags--xref-backend nil t))
(run-hooks 'erlang-mode-hook)
(if (zerop (buffer-size))
- (run-hooks 'erlang-new-file-hook))
- ;; Doesn't exist in Emacs v21.4; required by Emacs v23.
- (if (boundp 'after-change-major-mode-hook)
- (run-hooks 'after-change-major-mode-hook)))
+ (run-hooks 'erlang-new-file-hook)))
;;;###autoload
(dolist (r '("\\.erl$" "\\.app\\.src$" "\\.escript"
@@ -1531,7 +1548,9 @@ Other commands:
(set (make-local-variable 'outline-regexp) "[[:lower:]0-9_]+ *(.*) *-> *$")
(set (make-local-variable 'outline-level) (lambda () 1))
(set (make-local-variable 'add-log-current-defun-function)
- 'erlang-current-defun))
+ 'erlang-current-defun)
+ (set (make-local-variable 'find-tag-default-function)
+ 'erlang-find-tag-for-completion))
(defun erlang-font-lock-init ()
"Initialize Font Lock for Erlang mode."
@@ -1542,7 +1561,9 @@ Other commands:
table)))
(set (make-local-variable 'font-lock-syntax-table)
erlang-font-lock-syntax-table)
- (set (make-local-variable 'font-lock-beginning-of-syntax-function)
+ (set (make-local-variable (if (boundp 'syntax-begin-function)
+ 'syntax-begin-function
+ 'font-lock-beginning-of-syntax-function))
'erlang-beginning-of-clause)
(make-local-variable 'font-lock-keywords)
(let ((level (cond ((boundp 'font-lock-maximum-decoration)
@@ -2250,6 +2271,7 @@ mode with the command `M-x erlang-mode RET'.")))
;; This code is based on the package `tempo' which is part of modern
;; Emacsen. (GNU Emacs 19.25 (?) and XEmacs 19.14.)
+(defvar erlang-skel)
(defun erlang-skel-init ()
"Generate the skeleton functions and menu items.
The variable `erlang-skel' contains the name and descriptions of
@@ -2976,8 +2998,9 @@ Return nil if inside string, t if in a comment."
(current-column)))
;; Type and Spec indentation
((eq (car stack-top) '::)
- (if (looking-at "}")
- ;; Closing record definition with types
+ (if (looking-at "[},)]")
+ ;; Closing function spec, record definition with types,
+ ;; or a comma at the start of the line
;; pop stack and recurse
(erlang-calculate-stack-indent indent-point
(cons (erlang-pop stack) (cdr state)))
@@ -3748,6 +3771,12 @@ In the future the list may contain more elements."
(if (assoc fk (cdr (car imports)))
(setq mod (car (car imports)))
(setq imports (cdr imports))))
+ (cond ((eq (preceding-char) ?#)
+ (setq fk (concat "-record(" fk)))
+ ((eq (preceding-char) ??)
+ (setq fk (concat "-define(" fk)))
+ ((and (null mod) (not (member fk erlang-int-bifs)))
+ (setq mod (erlang-get-module))))
(setq res (list mod fk)))))
(store-match-data md)
res)))
@@ -3818,20 +3847,19 @@ exported function."
(defun erlang-check-module-name-init ()
"Initialize the functionality to compare file and module names.
-Unless we have `before-save-hook', we redefine the function
+Unless we have `before-save-hook', we advice the function
`set-visited-file-name' since it clears the variable
-`local-write-file-hooks'. The original function definition is
-stored in `erlang-orig-set-visited-file-name'."
+`local-write-file-hooks'."
(if (boundp 'before-save-hook)
- ;; If we have that, `make-local-hook' is obsolete.
(add-hook 'before-save-hook 'erlang-check-module-name nil t)
(require 'advice)
- (unless (ad-advised-definition-p 'set-visited-file-name)
- (defadvice set-visited-file-name (after erlang-set-visited-file-name
- activate)
- (if (eq major-mode 'erlang-mode)
- (add-hook 'local-write-file-hooks 'erlang-check-module-name))))
- (add-hook 'local-write-file-hooks 'erlang-check-module-name)))
+ (when (fboundp 'ad-advised-definition-p)
+ (unless (ad-advised-definition-p 'set-visited-file-name)
+ (defadvice set-visited-file-name (after erlang-set-visited-file-name
+ activate)
+ (if (eq major-mode 'erlang-mode)
+ (add-hook 'local-write-file-hooks 'erlang-check-module-name))))
+ (add-hook 'local-write-file-hooks 'erlang-check-module-name))))
(defun erlang-check-module-name ()
@@ -3908,7 +3936,7 @@ non-whitespace characters following the point on the current line."
(newline)
(if (condition-case nil
(progn (erlang-indent-line) t)
- (error (if (bolp) (delete-backward-char 1))))
+ (error (if (bolp) (delete-char -1))))
(if (not (bolp))
(save-excursion
(insert " ->"))
@@ -3920,7 +3948,7 @@ non-whitespace characters following the point on the current line."
(beginning-of-line)
(newline
erlang-electric-semicolon-insert-blank-lines))))
- (error (if (bolp) (delete-backward-char 1))))))))
+ (error (if (bolp) (delete-char -1))))))))
(defun erlang-electric-comma (&optional arg)
@@ -3950,7 +3978,7 @@ non-whitespace characters following the point on the current line."
(newline)
(condition-case nil
(erlang-indent-line)
- (error (if (bolp) (delete-backward-char 1))))))
+ (error (if (bolp) (delete-char -1))))))
(defun erlang-electric-lt (&optional arg)
"Insert a less-than sign, and optionally mark it as an open paren."
@@ -4036,7 +4064,7 @@ non-whitespace characters following the point on the current line."
(newline)
(condition-case nil
(erlang-indent-line)
- (error (if (bolp) (delete-backward-char 1))))))
+ (error (if (bolp) (delete-char -1))))))
;; Then it's just a plain greater-than.
(t
@@ -4076,7 +4104,7 @@ After being split/merged into `erlang-after-arrow' and
(newline)
(condition-case nil
(erlang-indent-line)
- (error (if (bolp) (delete-backward-char 1)))))))
+ (error (if (bolp) (delete-char -1)))))))
(defun erlang-electric-newline (&optional arg)
@@ -4341,12 +4369,12 @@ works under XEmacs.)"
(require 'etags)
;; Test on a function available in the Emacs 19 version
;; of tags but not in the XEmacs version.
- (if (not (fboundp 'find-tag-noselect))
- ()
+ (when (fboundp 'find-tag-noselect)
(erlang-tags-define-keys (current-local-map))
(setq erlang-tags-installed t)))))
+
;; Set all keys bound to `find-tag' et.al. in the global map and the
;; menu to `erlang-find-tag' et.al. in `map'.
;;
@@ -4369,10 +4397,6 @@ works under XEmacs.)"
(erlang-menu-init))
-;; There exists a variable `find-tag-default-function'. It is not used
-;; since `complete-tag' uses it to get current word under point. In that
-;; situation we don't want the module to be prepended.
-
(defun erlang-find-tag-default ()
"Return the default tag.
Search `-import' list of imported functions.
@@ -4552,6 +4576,11 @@ Tags can be given on the forms `tag', `module:', `module:tag'."
(current-buffer))) ; Return the new buffer.
+
+
+
+
+
;; Process interactive arguments for erlang-find-tag-*.
;;
;; Negative arguments work only for `etags', not `tags'. This is not
@@ -4645,9 +4674,25 @@ Tags can be given on the forms `tag', `module:', `module:tag'."
(set (make-local-variable 'find-tag-regexp-search-function)
'erlang-tags-regexp-search-forward)
(set (make-local-variable 'find-tag-tag-order)
- '(erlang-tag-match-module-p))
+ (mapcar #'erlang-make-order-function-aware-of-modules
+ erlang-tags-orig-tag-order))
(set (make-local-variable 'find-tag-regexp-tag-order)
- '(erlang-tag-match-module-regexp-p))))
+ (mapcar #'erlang-make-order-function-aware-of-modules
+ erlang-tags-orig-regexp-tag-order))))
+
+(defun erlang-make-order-function-aware-of-modules (f)
+ `(lambda (tag)
+ (let (mod)
+ (when (string-match ":" tag)
+ (setq mod (substring tag 0 (match-beginning 0)))
+ (setq tag (substring tag (match-end 0) nil)))
+ (and (funcall ',f tag)
+ (or (null mod)
+ (erlang-tag-at-point-match-module-p mod))))))
+
+(defun erlang-tag-at-point-match-module-p (mod)
+ (string-equal mod (erlang-get-module-from-file-name
+ (funcall (symbol-function 'file-of-tag)))))
(defun erlang-tags-remove-module-check ()
@@ -4724,61 +4769,34 @@ for a tag on the form `module:tag'."
(funcall erlang-tags-orig-regexp-search-function
tag bound noerror count)))
-
-;; t if point is at a tag line that matches TAG, containing
-;; module information. Assumes that all other order functions
-;; are stored in `erlang-tags-orig-[regex]-tag-order'.
-
-(defun erlang-tag-match-module-p (tag)
- (erlang-tag-match-module-common-p tag erlang-tags-orig-tag-order))
-
-(defun erlang-tag-match-module-regexp-p (tag)
- (erlang-tag-match-module-common-p tag erlang-tags-orig-regexp-tag-order))
-
-(defun erlang-tag-match-module-common-p (tag order)
- (let ((mod nil)
- (found nil))
- (if (string-match ":" tag)
- (progn
- (setq mod (substring tag 0 (match-beginning 0)))
- (setq tag (substring tag (match-end 0) nil))))
- (while (and order (not found))
- (setq found
- (and (not (memq (car order)
- '(erlang-tag-match-module-p
- erlang-tag-match-module-regexp-p)))
- (funcall (car order) tag)))
- (setq order (cdr order)))
- (and found
- (or (null mod)
- (string= mod (erlang-get-module-from-file-name
- (file-of-tag)))))))
-
-
;;; Tags completion, Emacs 19 `etags' specific.
;;;
;;; The basic idea is to create a second completion table `erlang-tags-
;;; completion-table' containing all normal tags plus tags on the form
-;;; `module:tag'.
+;;; `module:tag' and `module:'.
-
-(when (and (fboundp 'etags-tags-completion-table)
+;; PENDING - Should probably make use of the
+;; `completion-at-point-functions' hook instead of this advice.
+(when (and (locate-library "etags")
+ (require 'etags)
+ (fboundp 'etags-tags-completion-table)
(fboundp 'tags-lazy-completion-table)) ; Emacs 23.1+
(if (fboundp 'advice-add)
;; Emacs 24.4+
(advice-add 'etags-tags-completion-table :around
(lambda (oldfun)
- (if (eq find-tag-default-function 'erlang-find-tag-for-completion)
+ (if erlang-replace-etags-tags-completion-table
(erlang-etags-tags-completion-table)
(funcall oldfun)))
(list :name 'erlang-replace-tags-table))
;; Emacs 23.1-24.3
- (defadvice etags-tags-completion-table (around erlang-replace-tags-table activate)
- (if (eq find-tag-default-function 'erlang-find-tag-for-completion)
+ (defadvice etags-tags-completion-table (around
+ erlang-replace-tags-table
+ activate)
+ (if erlang-replace-etags-tags-completion-table
(setq ad-return-value (erlang-etags-tags-completion-table))
ad-do-it))))
-
(defun erlang-complete-tag ()
"Perform tags completion on the text around point.
Completes to the set of names listed in the current tags table.
@@ -4792,23 +4810,19 @@ about Erlang modules."
(cond ((and erlang-tags-installed
(fboundp 'etags-tags-completion-table)
(fboundp 'tags-lazy-completion-table)) ; Emacs 23.1+
- ;; This depends on the advice called erlang-replace-tags-table
- ;; above. It is not enough to let-bind
- ;; tags-completion-table-function since that will not override
- ;; the buffer-local value in the TAGS buffer.
- (let ((find-tag-default-function 'erlang-find-tag-for-completion))
+ (let ((erlang-replace-etags-tags-completion-table t))
(complete-tag)))
((and erlang-tags-installed
- (fboundp 'complete-tag)
- (fboundp 'tags-complete-tag)) ; Emacs 19
+ (fboundp 'complete-tag)
+ (fboundp 'tags-complete-tag)) ; Emacs 19-22
(let ((orig-tags-complete-tag (symbol-function 'tags-complete-tag)))
(fset 'tags-complete-tag
(symbol-function 'erlang-tags-complete-tag))
(unwind-protect
- (funcall (symbol-function 'complete-tag))
+ (complete-tag)
(fset 'tags-complete-tag orig-tags-complete-tag))))
((fboundp 'complete-tag) ; Emacs 19
- (funcall (symbol-function 'complete-tag)))
+ (complete-tag))
((fboundp 'tag-complete-symbol) ; XEmacs
(funcall (symbol-function 'tag-complete-symbol)))
(t
@@ -4823,19 +4837,22 @@ about Erlang modules."
(buffer-substring-no-properties start (point)))))
-
;; Based on `tags-complete-tag', but this one uses
;; `erlang-tags-completion-table' instead of `tags-completion-table'.
;;
;; This is the entry-point called by system function `completing-read'.
+;;
+;; Used for minibuffer completion in Emacs 19-24 and completion in
+;; erlang buffers in Emacs 19-22.
(defun erlang-tags-complete-tag (string predicate what)
- (save-excursion
- ;; If we need to ask for the tag table, allow that.
- (let ((enable-recursive-minibuffers t))
- (visit-tags-table-buffer))
+ (with-current-buffer (window-buffer (minibuffer-selected-window))
+ (save-excursion
+ ;; If we need to ask for the tag table, allow that.
+ (let ((enable-recursive-minibuffers t))
+ (visit-tags-table-buffer))
(if (eq what t)
(all-completions string (erlang-tags-completion-table) predicate)
- (try-completion string (erlang-tags-completion-table) predicate))))
+ (try-completion string (erlang-tags-completion-table) predicate)))))
;; `tags-completion-table' calls itself recursively, make it
@@ -4853,7 +4870,6 @@ about Erlang modules."
(fset 'tags-completion-table
erlang-tags-orig-completion-table)))
-
(defun erlang-tags-completion-table-1 ()
(make-local-variable 'erlang-tags-completion-table)
(or erlang-tags-completion-table
@@ -4864,59 +4880,190 @@ about Erlang modules."
(setq erlang-tags-completion-table tags-completion-table))))
+
+;; Emacs 25 expects this function to return a list (and it is ok for
+;; it to include duplicates). Older emacsen expects an obarray.
+(defun erlang-etags-tags-completion-table ()
+ (if (>= emacs-major-version 25)
+ (erlang-etags-tags-completion-table-list)
+ (let ((obarray (make-vector 511 0)))
+ (dolist (tag (erlang-etags-tags-completion-table-list))
+ (intern tag obarray))
+ obarray)))
+
;; Based on `etags-tags-completion-table'. The difference is that we
-;; add three symbols to the vector, the tag, module: and module:tag.
+;; add three strings to the list, the tag, module: and module:tag.
;; The module is extracted from the file name of a tag. (This one
;; only works if we are looking at an `etags' file. However, this is
;; the only format supported by Emacs, so far.)
-(defun erlang-etags-tags-completion-table ()
- (let ((table (make-vector 511 0))
- (file nil)
- (progress-reporter
- (when (fboundp 'make-progress-reporter)
- (make-progress-reporter
- (format "Making erlang tags completion table for %s..." buffer-file-name)
- (point-min) (point-max)))))
+(defun erlang-etags-tags-completion-table-list ()
+ (let ((progress-reporter
+ (make-progress-reporter
+ (format "Making tags completion table for %s..." buffer-file-name)
+ (point-min) (point-max)))
+ table module)
(save-excursion
(goto-char (point-min))
- ;; This monster regexp matches an etags tag line.
- ;; \1 is the string to match;
- ;; \2 is not interesting;
- ;; \3 is the guessed tag name; XXX guess should be better eg DEFUN
- ;; \4 is not interesting;
- ;; \5 is the explicitly-specified tag name.
- ;; \6 is the line to start searching at;
- ;; \7 is the char to start searching at.
(while (progn
- (while (and
- (eq (following-char) ?\f)
- (looking-at "\f\n\\([^,\n]*\\),.*\n"))
- (setq file (buffer-substring
- (match-beginning 1) (match-end 1)))
- (goto-char (match-end 0)))
+ (while (and (eq (following-char) ?\f)
+ (looking-at "\f\n\\([^,\n]*\\),.*\n"))
+ (let ((file (buffer-substring (match-beginning 1)
+ (match-end 1))))
+ (setq module (erlang-get-module-from-file-name file))
+ (when module
+ (push (concat module ":") table)
+ (push (concat module ":module_info") table))
+ (forward-line 2)))
+ ;; This regexp matches an explicit tag name or the
+ ;; place where it would start.
(re-search-forward
- "\
-^\\(\\([^\177]+[^-a-zA-Z0-9_$\177]+\\)?\\([-a-zA-Z0-9_$?:]+\\)\
-\[^-a-zA-Z0-9_$?:\177]*\\)\177\\(\\([^\n\001]+\\)\001\\)?\
-\\([0-9]+\\)?,\\([0-9]+\\)?\n"
+ "[\f\t\n\r()=,; ]?\177\\\(?:\\([^\n\001]+\\)\001\\)?"
nil t))
- (let ((tag (if (match-beginning 5)
+ (let ((tag (if (match-beginning 1)
;; There is an explicit tag name.
- (buffer-substring (match-beginning 5) (match-end 5))
- ;; No explicit tag name. Best guess.
- (buffer-substring (match-beginning 3) (match-end 3))))
- (module (and file
- (erlang-get-module-from-file-name file))))
- (intern tag table)
+ (buffer-substring (match-beginning 1) (match-end 1))
+ ;; No explicit tag name. Backtrack a little,
+ ;; and look for the implicit one.
+ (goto-char (match-beginning 0))
+ (skip-chars-backward "^\f\t\n\r()=,; ")
+ (buffer-substring (point) (match-beginning 0)))))
+ (forward-line 1)
+ (push tag table)
(when (stringp module)
- (intern (concat module ":" tag) table)
- ;; Only the first ones will be stored in the table.
- (intern (concat module ":") table)
- (intern (concat module ":module_info") table))
- (when progress-reporter
- (progress-reporter-update progress-reporter (point))))))
+ (push (concat module ":" tag) table))
+ (progress-reporter-update progress-reporter (point)))))
table))
+
+
+
+;;; Xref backend erlang-etags
+
+;; In GNU Emacs 25 xref was introduced. It is a framework for cross
+;; referencing commands, in particular commands for finding
+;; definitions. It does not replace etags. It rather resides on top
+;; of it and provides user-friendly commands. The idea is that the
+;; user commands should be the same regardless of what backend does
+;; the actual finding of definitions.
+
+;; The backend below is a wrapper around the built-in etags backend.
+;; It adds awareness of the module:tag syntax in a similar way that is
+;; done above for the old etags commands.
+
+
+(defun erlang-etags--xref-backend () 'erlang-etags)
+
+(defun erlang-soft-require (feature)
+ (when (locate-library (symbol-name feature))
+ (require feature)))
+
+(and (erlang-soft-require 'xref)
+ (erlang-soft-require 'cl-generic)
+ ;; The purpose of using eval here is to avoid compilation
+ ;; warnings in emacsen without cl-defmethod.
+ (eval
+ '(progn
+ (cl-defmethod xref-backend-identifier-at-point
+ ((_backend (eql erlang-etags)))
+ (erlang-find-tag-default))
+
+ (cl-defmethod xref-backend-definitions
+ ((_backend (eql erlang-etags)) identifier)
+ (erlang-xref-find-definitions identifier))
+
+ (cl-defmethod xref-backend-apropos
+ ((_backend (eql erlang-etags)) identifier)
+ (erlang-xref-find-definitions identifier t))
+
+ (cl-defmethod xref-backend-identifier-completion-table
+ ((_backend (eql erlang-etags)))
+ (let ((erlang-replace-etags-tags-completion-table t))
+ (tags-completion-table))))))
+
+
+
+
+(defun erlang-xref-find-definitions (identifier &optional is-regexp)
+ (let ((id-list (split-string identifier ":")))
+ (cond
+ ;; Handle "tag"
+ ((null (cdr id-list))
+ (erlang-xref-find-definitions-tag identifier is-regexp))
+ ;; Handle "module:"
+ ((string-equal (cadr id-list) "")
+ (erlang-xref-find-definitions-module (car id-list)))
+ ;; Handle "module:tag"
+ (t
+ (erlang-xref-find-definitions-module-tag (car id-list)
+ (cadr id-list)
+ is-regexp)))))
+
+(defun erlang-xref-find-definitions-tag (tag is-regexp)
+ "Find all definitions of TAG and reorder them so that
+definitions in the currently visited file comes first."
+ (when (fboundp 'etags--xref-find-definitions)
+ (let* ((current-file (and (buffer-file-name)
+ (file-truename (buffer-file-name))))
+ (xrefs (etags--xref-find-definitions tag is-regexp))
+ local-xrefs non-local-xrefs)
+ (while xrefs
+ (if (string-equal (erlang-xref-truename-file (car xrefs))
+ current-file)
+ (push (car xrefs) local-xrefs)
+ (push (car xrefs) non-local-xrefs))
+ (setq xrefs (cdr xrefs)))
+ (append (reverse local-xrefs)
+ (reverse non-local-xrefs)))))
+
+(defun erlang-xref-find-definitions-module (module)
+ (and (fboundp 'xref-make)
+ (fboundp 'xref-make-file-location)
+ (let* ((first-time t)
+ xrefs matching-files)
+ (save-excursion
+ (while (visit-tags-table-buffer (not first-time))
+ (setq first-time nil)
+ (let ((files (tags-table-files)))
+ (while files
+ (let* ((file (car files))
+ (m (erlang-get-module-from-file-name file)))
+ (when (and m (string-equal m module))
+ (unless (member file matching-files)
+ (push file
+ matching-files)
+ (push (xref-make file
+ (xref-make-file-location file 1 0))
+ xrefs))))
+ (setq files (cdr files))))))
+ (nreverse xrefs))))
+
+(defun erlang-xref-find-definitions-module-tag (module tag is-regexp)
+ "Find all definitions of TAG and filter away definitions
+outside of MODULE."
+ (when (fboundp 'etags--xref-find-definitions)
+ (let ((xrefs (etags--xref-find-definitions tag is-regexp))
+ xrefs-in-module)
+ (while xrefs
+ (when (string-equal module (erlang-xref-module (car xrefs)))
+ (push (car xrefs) xrefs-in-module))
+ (setq xrefs (cdr xrefs)))
+ xrefs-in-module)))
+
+(defun erlang-xref-module (xref)
+ (erlang-get-module-from-file-name (erlang-xref-file xref)))
+
+(defun erlang-xref-truename-file (xref)
+ (let ((file (erlang-xref-file xref)))
+ (and file
+ (file-truename file))))
+
+(defun erlang-xref-file (xref)
+ (and (fboundp 'xref-location-group)
+ (fboundp 'xref-item-location)
+ (xref-location-group (xref-item-location xref))))
+
+
+
;;;
;;; Prepare for other methods to run an Erlang slave process.
;;;
@@ -5315,8 +5462,7 @@ frame will become deselected before the next command."
()
(or (inferior-erlang-running-p)
(error "No inferior Erlang shell is running"))
- (save-excursion
- (set-buffer inferior-erlang-buffer)
+ (with-current-buffer inferior-erlang-buffer
(let ((msg nil))
(while (save-excursion
(goto-char (process-mark inferior-erlang-process))
@@ -5336,8 +5482,7 @@ frame will become deselected before the next command."
The empty command resembles hitting RET. This is useful in some
situations, for instance if a crash or error report from sasl
has been printed after the last prompt."
- (save-excursion
- (set-buffer inferior-erlang-buffer)
+ (with-current-buffer inferior-erlang-buffer
(if (> (point-max) 1)
;; make sure we get a prompt if buffer contains data
(if (save-excursion
@@ -5403,7 +5548,7 @@ Return the position after the newly inserted command."
(boundp 'comint-last-output-start))
(save-excursion
(goto-char
- (if (interactive-p)
+ (if (erlang-interactive-p)
(symbol-value 'comint-last-input-end)
(symbol-value 'comint-last-output-start)))
(while (progn (skip-chars-forward "^\C-h")
@@ -5422,7 +5567,7 @@ Return the position after the newly inserted command."
(let ((pmark (process-mark (get-buffer-process (current-buffer)))))
(save-excursion
(goto-char
- (if (interactive-p)
+ (if (erlang-interactive-p)
(symbol-value 'comint-last-input-end)
(symbol-value 'comint-last-output-start)))
(while (re-search-forward "\r+$" pmark t)
@@ -5449,23 +5594,21 @@ There exists two workarounds for this bug:
(save-some-buffers)
(inferior-erlang-prepare-for-input)
(let* ((dir (inferior-erlang-compile-outdir))
-;;; (file (file-name-nondirectory (buffer-file-name)))
(noext (substring (erlang-local-buffer-file-name) 0 -4))
(opts (append (list (cons 'outdir dir))
(if current-prefix-arg
(list 'debug_info 'export_all))
erlang-compile-extra-opts))
end)
- (save-excursion
- (set-buffer inferior-erlang-buffer)
- (compilation-forget-errors))
+ (with-current-buffer inferior-erlang-buffer
+ (when (fboundp 'compilation-forget-errors)
+ (compilation-forget-errors)))
(setq end (inferior-erlang-send-command
(inferior-erlang-compute-compile-command noext opts)
nil))
(sit-for 0)
(inferior-erlang-wait-prompt)
- (save-excursion
- (set-buffer inferior-erlang-buffer)
+ (with-current-buffer inferior-erlang-buffer
(setq compilation-error-list nil)
(set-marker compilation-parsing-end end))
(setq compilation-last-buffer inferior-erlang-buffer)))
@@ -5505,7 +5648,8 @@ unless the optional NO-DISPLAY is non-nil."
(let ((ccfn erlang-compile-command-function-alist)
(res (inferior-erlang-compute-erl-compile-command module-name opts))
ccfn-entry
- done)
+ done
+ result)
(if (not (null (erlang-local-buffer-file-name)))
(while (and (not done) (not (null ccfn)))
(setq ccfn-entry (car ccfn))
@@ -5635,12 +5779,14 @@ unless the optional NO-DISPLAY is non-nil."
(tramp-tramp-file-p (buffer-file-name))))
(defun erlang-tramp-get-localname ()
- (let ((tramp-info (tramp-dissect-file-name (buffer-file-name))))
- (if (fboundp 'tramp-file-name-localname)
- (tramp-file-name-localname tramp-info)
- ;; In old versions of tramp, it was `tramp-file-name-path'
- ;; instead of the newer `tramp-file-name-localname'
- (tramp-file-name-path tramp-info))))
+ (when (fboundp 'tramp-dissect-file-name)
+ (let ((tramp-info (tramp-dissect-file-name (buffer-file-name))))
+ (if (fboundp 'tramp-file-name-localname)
+ (tramp-file-name-localname tramp-info)
+ ;; In old versions of tramp, it was `tramp-file-name-path'
+ ;; instead of the newer `tramp-file-name-localname'
+ (when (fboundp 'tramp-file-name-path)
+ (tramp-file-name-path tramp-info))))))
;; `next-error' only accepts buffers with major mode `compilation-mode'
;; or with the minor mode `compilation-minor-mode' activated.
@@ -5657,16 +5803,14 @@ Capable of finding error messages in an inferior Erlang buffer."
(and (boundp 'compilation-last-buffer)
compilation-last-buffer))))
(if (and (bufferp buf)
- (save-excursion
- (set-buffer buf)
+ (with-current-buffer buf
(and (eq major-mode 'erlang-shell-mode)
(setq major-mode 'compilation-mode))))
(unwind-protect
(progn
(setq done t)
(next-error argp))
- (save-excursion
- (set-buffer buf)
+ (with-current-buffer buf
(setq major-mode 'erlang-shell-mode))))
(or done
(next-error argp))))
@@ -5769,7 +5913,7 @@ Simplified version of a combination `defalias' and `make-obsolete',
it assumes that NEWDEF is loaded."
(defalias sym (symbol-function newdef))
(if (fboundp 'make-obsolete)
- (make-obsolete sym newdef)))
+ (make-obsolete sym newdef "long ago")))
(erlang-obsolete 'calculate-erlang-indent 'erlang-calculate-indent)
@@ -5787,11 +5931,8 @@ it assumes that NEWDEF is loaded."
(erlang-obsolete 'name-of-erlang-function 'erlang-name-of-function)
-;; Fixme: shouldn't redefine `set-visited-file-name' anyhow -- see above.
(defconst erlang-unload-hook
(list (lambda ()
- (defalias 'set-visited-file-name
- 'erlang-orig-set-visited-file-name)
(when (featurep 'advice)
(ad-unadvise 'Man-notify-when-ready)
(ad-unadvise 'set-visited-file-name)))))
diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented
index 1986acadf1..7a1ff6a954 100644
--- a/lib/tools/emacs/test.erl.indented
+++ b/lib/tools/emacs/test.erl.indented
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -70,6 +70,9 @@ foo() ->
234,
d}).
+-record(record5, { a = 1 :: integer()
+ , b = foobar :: atom()
+ }).
-define(MACRO_1, macro).
-define(MACRO_2(_), macro).
@@ -144,6 +147,12 @@ foo() ->
-type t25() :: #rec3{f123 :: [t24() |
1|2|3|4|a|b|c|d|
nonempty_maybe_improper_list(integer, any())]}.
+-type t26() :: #rec4{ a :: integer()
+ , b :: any()
+ }.
+-type t27() :: { integer()
+ , atom()
+ }.
-type t99() ::
{t2(),t4(),t5(),t6(),t7(),t8(),t10(),t14(),
t15(),t20(),t21(), t22(),t25()}.
@@ -179,6 +188,10 @@ foo() ->
| {'error', {'no_process', term()}
| {'no_such_group', term()}}.
+-spec add( X :: integer()
+ , Y :: integer()
+ ) -> integer().
+
-opaque attributes_data() ::
[{'column', column()} | {'line', info_line()} |
{'text', string()}] | {line(),column()}.
diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig
index 7e8ad23412..2552c71baf 100644
--- a/lib/tools/emacs/test.erl.orig
+++ b/lib/tools/emacs/test.erl.orig
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -70,6 +70,9 @@ foo() ->
234,
d}).
+-record(record5, { a = 1 :: integer()
+, b = foobar :: atom()
+}).
-define(MACRO_1, macro).
-define(MACRO_2(_), macro).
@@ -144,6 +147,12 @@ nonempty_maybe_improper_list('integer', any())|
-type t25() :: #rec3{f123 :: [t24() |
1|2|3|4|a|b|c|d|
nonempty_maybe_improper_list(integer, any())]}.
+-type t26() :: #rec4{ a :: integer()
+, b :: any()
+}.
+-type t27() :: { integer()
+, atom()
+}.
-type t99() ::
{t2(),t4(),t5(),t6(),t7(),t8(),t10(),t14(),
t15(),t20(),t21(), t22(),t25()}.
@@ -179,6 +188,10 @@ t15(),t20(),t21(), t22(),t25()}.
| {'error', {'no_process', term()}
| {'no_such_group', term()}}.
+-spec add( X :: integer()
+, Y :: integer()
+) -> integer().
+
-opaque attributes_data() ::
[{'column', column()} | {'line', info_line()} |
{'text', string()}] | {line(),column()}.
diff --git a/lib/ose/doc/html/.gitignore b/lib/tools/priv/.gitignore
index e69de29bb2..e69de29bb2 100644
--- a/lib/ose/doc/html/.gitignore
+++ b/lib/tools/priv/.gitignore
diff --git a/lib/tools/priv/Makefile b/lib/tools/priv/Makefile
deleted file mode 100644
index aa4aaa2fc8..0000000000
--- a/lib/tools/priv/Makefile
+++ /dev/null
@@ -1,69 +0,0 @@
-# ``Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
-# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
-# AB. All Rights Reserved.''
-#
-# $Id$
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN = $(TOOLS_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/tools-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-HTDOCS_FILES = index.html
-
-TOOL_FILES = cover.tool
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt:
-
-clean:
-
-docs:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/priv"
- $(INSTALL_DATA) $(HTDOCS_FILES) "$(RELSYSDIR)/priv"
- $(INSTALL_DATA) $(TOOL_FILES) "$(RELSYSDIR)/priv"
-
-release_docs_spec:
-
-
-
diff --git a/lib/tools/priv/cover.tool b/lib/tools/priv/cover.tool
deleted file mode 100644
index 9e72f89ff4..0000000000
--- a/lib/tools/priv/cover.tool
+++ /dev/null
@@ -1,2 +0,0 @@
-{version,"1.2"}.
-[{config_func,{cover_web,configData,[]}}].
diff --git a/lib/tools/priv/index.html b/lib/tools/priv/index.html
deleted file mode 100644
index 6b60ef5d0a..0000000000
--- a/lib/tools/priv/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>Erlang webb tools </TITLE>
-</HEAD>
-<FRAMESET COLS="250,*">
-<FRAME NAME="menu" SRC="/webcover/erl/cover_web/menu_frame">
-<FRAME NAME="main" SRC="/webcover/erl/cover_web/compile_frame">
-</FRAMESET>
-</HTML>
-
diff --git a/lib/tools/src/Makefile b/lib/tools/src/Makefile
index 9fcfb79628..032bd612db 100644
--- a/lib/tools/src/Makefile
+++ b/lib/tools/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
+# Copyright Ericsson AB 1996-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -37,7 +37,6 @@ RELSYSDIR = $(RELEASE_PATH)/lib/tools-$(VSN)
MODULES= \
cover \
- cover_web \
eprof \
fprof \
cprof \
diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index d16ca7f406..92c10cc306 100644
--- a/lib/tools/src/cover.erl
+++ b/lib/tools/src/cover.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,9 +20,7 @@
-module(cover).
%%
-%% This module implements the Erlang coverage tool. The module named
-%% cover_web implements a user interface for the coverage tool to run
-%% under webtool.
+%% This module implements the Erlang coverage tool.
%%
%% ARCHITECTURE
%% The coverage tool consists of one process on each node involved in
@@ -575,7 +573,7 @@ call(Request) ->
Ref = erlang:monitor(process,?SERVER),
receive {'DOWN', Ref, _Type, _Object, noproc} ->
erlang:demonitor(Ref),
- start(),
+ {ok,_} = start(),
call(Request)
after 0 ->
?SERVER ! {self(),Request},
@@ -591,7 +589,9 @@ call(Request) ->
end.
reply(From, Reply) ->
- From ! {?SERVER,Reply}.
+ From ! {?SERVER,Reply},
+ ok.
+
is_from(From) ->
is_pid(From).
@@ -617,9 +617,11 @@ remote_call(Node,Request) ->
end.
remote_reply(Proc,Reply) when is_pid(Proc) ->
- Proc ! {?SERVER,Reply};
+ Proc ! {?SERVER,Reply},
+ ok;
remote_reply(MainNode,Reply) ->
- {?SERVER,MainNode} ! {?SERVER,Reply}.
+ {?SERVER,MainNode} ! {?SERVER,Reply},
+ ok.
%%%----------------------------------------------------------------------
%%% cover_server on main node
@@ -629,14 +631,16 @@ init_main(Starter) ->
register(?SERVER,self()),
%% Having write concurrancy here gives a 40% performance boost
%% when collect/1 is called.
- ets:new(?COVER_TABLE, [set, public, named_table
- ,{write_concurrency, true}
- ]),
- ets:new(?COVER_CLAUSE_TABLE, [set, public, named_table]),
- ets:new(?BINARY_TABLE, [set, public, named_table]),
- ets:new(?COLLECTION_TABLE, [set, public, named_table]),
- ets:new(?COLLECTION_CLAUSE_TABLE, [set, public, named_table]),
- net_kernel:monitor_nodes(true),
+ ?COVER_TABLE = ets:new(?COVER_TABLE, [set, public, named_table,
+ {write_concurrency, true}]),
+ ?COVER_CLAUSE_TABLE = ets:new(?COVER_CLAUSE_TABLE, [set, public,
+ named_table]),
+ ?BINARY_TABLE = ets:new(?BINARY_TABLE, [set, public, named_table]),
+ ?COLLECTION_TABLE = ets:new(?COLLECTION_TABLE, [set, public,
+ named_table]),
+ ?COLLECTION_CLAUSE_TABLE = ets:new(?COLLECTION_CLAUSE_TABLE, [set, public,
+ named_table]),
+ ok = net_kernel:monitor_nodes(true),
Starter ! {?SERVER,started},
main_process_loop(#main_state{}).
@@ -674,7 +678,7 @@ main_process_loop(State) ->
Imported = do_import_to_table(Fd,File,
State#main_state.imported),
reply(From, ok),
- file:close(Fd),
+ ok = file:close(Fd),
main_process_loop(State#main_state{imported=Imported});
{error,Reason} ->
reply(From, {error, {cant_open_file,File,Reason}}),
@@ -872,11 +876,12 @@ main_process_loop(State) ->
init_remote(Starter,MainNode) ->
register(?SERVER,self()),
- ets:new(?COVER_TABLE, [set, public, named_table
- %% write_concurrency here makes otp_8270 break :(
- %,{write_concurrency, true}
- ]),
- ets:new(?COVER_CLAUSE_TABLE, [set, public, named_table]),
+ %% write_concurrency here makes otp_8270 break :(
+ ?COVER_TABLE = ets:new(?COVER_TABLE, [set, public, named_table
+ %,{write_concurrency, true}
+ ]),
+ ?COVER_CLAUSE_TABLE = ets:new(?COVER_CLAUSE_TABLE, [set, public,
+ named_table]),
Starter ! {self(),started},
remote_process_loop(#remote_state{main_node=MainNode}).
@@ -909,11 +914,11 @@ remote_process_loop(State) ->
'_' -> [M || {M,_} <- State#remote_state.compiled];
_ -> Modules0
end,
- spawn(fun() ->
- ?SPAWN_DBG(remote_collect,
- {Modules, CollectorPid, From}),
- do_collect(Modules, CollectorPid, From)
- end),
+ spawn(fun() ->
+ ?SPAWN_DBG(remote_collect,
+ {Modules, CollectorPid, From}),
+ do_collect(Modules, CollectorPid, From)
+ end),
remote_process_loop(State);
{remote,stop} ->
@@ -954,13 +959,13 @@ remote_process_loop(State) ->
end.
do_collect(Modules, CollectorPid, From) ->
- pmap(
- fun(Module) ->
- Pattern = {#bump{module=Module, _='_'}, '$1'},
- MatchSpec = [{Pattern,[{'=/=','$1',0}],['$_']}],
- Match = ets:select(?COVER_TABLE,MatchSpec,?CHUNK_SIZE),
- send_chunks(Match, CollectorPid, [])
- end,Modules),
+ _ = pmap(
+ fun(Module) ->
+ Pattern = {#bump{module=Module, _='_'}, '$1'},
+ MatchSpec = [{Pattern,[{'=/=','$1',0}],['$_']}],
+ Match = ets:select(?COVER_TABLE,MatchSpec,?CHUNK_SIZE),
+ send_chunks(Match, CollectorPid, [])
+ end,Modules),
CollectorPid ! done,
remote_reply(From, ok).
@@ -996,20 +1001,20 @@ get_downs(Mons) ->
end.
reload_originals(Compiled) ->
- Modules = [M || {M,_} <- Compiled],
- pmap(fun do_reload_original/1, Modules).
+ _ = pmap(fun do_reload_original/1, [M || {M,_} <- Compiled]),
+ ok.
do_reload_original(Module) ->
case code:which(Module) of
?TAG ->
- code:purge(Module), % remove code marked as 'old'
- code:delete(Module), % mark cover compiled code as 'old'
+ _ = code:purge(Module), % remove code marked as 'old'
+ _ = code:delete(Module), % mark cover compiled code as 'old'
%% Note: original beam code must be loaded before the cover
%% compiled code is purged, in order to for references to
%% 'fun M:F/A' and %% 'fun F/A' funs to be correct (they
%% refer to (M:)F/A in the *latest* version of the module)
- code:load_file(Module), % load original code
- code:purge(Module); % remove cover compiled code
+ _ = code:load_file(Module), % load original code
+ _ = code:purge(Module); % remove cover compiled code
_ ->
ignore
end.
@@ -1221,12 +1226,13 @@ remote_reset(Module,Nodes) ->
%% Collect data from remote nodes - used for analyse or stop(Node)
remote_collect(Modules,Nodes,Stop) ->
- pmap(fun(Node) ->
- ?SPAWN_DBG(remote_collect,
- {Modules, Nodes, Stop}),
- do_collection(Node, Modules, Stop)
- end,
- Nodes).
+ _ = pmap(
+ fun(Node) ->
+ ?SPAWN_DBG(remote_collect,
+ {Modules, Nodes, Stop}),
+ do_collection(Node, Modules, Stop)
+ end, Nodes),
+ ok.
do_collection(Node, Module, Stop) ->
CollectorPid = spawn(fun collector_proc/0),
@@ -1262,8 +1268,8 @@ insert_in_collection_table([]) ->
insert_in_collection_table(Key,Val) ->
case ets:member(?COLLECTION_TABLE,Key) of
true ->
- ets:update_counter(?COLLECTION_TABLE,
- Key,Val);
+ _ = ets:update_counter(?COLLECTION_TABLE, Key,Val),
+ ok;
false ->
%% Make sure that there are no race conditions from ets:member
case ets:insert_new(?COLLECTION_TABLE,{Key,Val}) of
@@ -2004,9 +2010,7 @@ munge_expr({lc,Line,Expr,Qs}, Vars) ->
{MungedQs, Vars3} = munge_qualifiers(Qs, Vars2),
{{lc,Line,MungedExpr,MungedQs}, Vars3};
munge_expr({bc,Line,Expr,Qs}, Vars) ->
- {bin,BLine,[{bin_element,EL,Val,Sz,TSL}|Es]} = Expr,
- Expr2 = {bin,BLine,[{bin_element,EL,Val,Sz,TSL}|Es]},
- {MungedExpr,Vars2} = munge_expr(Expr2, Vars),
+ {MungedExpr,Vars2} = munge_expr(?BLOCK1(Expr), Vars),
{MungedQs, Vars3} = munge_qualifiers(Qs, Vars2),
{{bc,Line,MungedExpr,MungedQs}, Vars3};
munge_expr({block,Line,Body}, Vars) ->
@@ -2425,7 +2429,7 @@ do_analyse_to_file1(Module, OutFile, ErlFile, HTML) ->
"<body style='background-color: white;"
" color: black'>\n"
"<pre>\n"],
- file:write(OutFd,Header);
+ ok = file:write(OutFd,Header);
true -> ok
end,
@@ -2439,7 +2443,7 @@ do_analyse_to_file1(Module, OutFile, ErlFile, HTML) ->
string:right(integer_to_list(H), 2, $0),
string:right(integer_to_list(Mi), 2, $0),
string:right(integer_to_list(S), 2, $0)]),
- file:write(OutFd,
+ ok = file:write(OutFd,
["File generated from ",ErlFile," by COVER ",
Timestamp,"\n\n"
"**************************************"
@@ -2451,14 +2455,13 @@ do_analyse_to_file1(Module, OutFile, ErlFile, HTML) ->
CovLines = lists:keysort(1,ets:select(?COLLECTION_TABLE, MS)),
print_lines(Module, CovLines, InFd, OutFd, 1, HTML),
- if
- HTML ->
- file:write(OutFd, "</pre>\n</body>\n</html>\n");
+ if HTML ->
+ ok = file:write(OutFd, "</pre>\n</body>\n</html>\n");
true -> ok
end,
- file:close(OutFd),
- file:close(InFd),
+ ok = file:close(OutFd),
+ ok = file:close(InFd),
{ok, OutFile};
@@ -2476,34 +2479,33 @@ print_lines(Module, CovLines, InFd, OutFd, L, HTML) ->
eof ->
ignore;
{ok,"%"++_=Line} -> %Comment line - not executed.
- file:write(OutFd, [tab(),escape_lt_and_gt(Line, HTML)]),
+ ok = file:write(OutFd, [tab(),escape_lt_and_gt(Line, HTML)]),
print_lines(Module, CovLines, InFd, OutFd, L+1, HTML);
{ok,RawLine} ->
Line = escape_lt_and_gt(RawLine,HTML),
case CovLines of
[{L,N}|CovLines1] ->
%% N = lists:foldl(fun([Ni], Nacc) -> Nacc+Ni end, 0, Ns),
- if
- N=:=0, HTML=:=true ->
- LineNoNL = Line -- "\n",
- Str = " 0",
- %%Str = string:right("0", 6, 32),
- RedLine = ["<font color=red>",Str,fill1(),
- LineNoNL,"</font>\n"],
- file:write(OutFd, RedLine);
- N<1000000 ->
- Str = string:right(integer_to_list(N), 6, 32),
- file:write(OutFd, [Str,fill1(),Line]);
- N<10000000 ->
- Str = integer_to_list(N),
- file:write(OutFd, [Str,fill2(),Line]);
- true ->
- Str = integer_to_list(N),
- file:write(OutFd, [Str,fill3(),Line])
- end,
+ if N=:=0, HTML=:=true ->
+ LineNoNL = Line -- "\n",
+ Str = " 0",
+ %%Str = string:right("0", 6, 32),
+ RedLine = ["<font color=red>",Str,fill1(),
+ LineNoNL,"</font>\n"],
+ ok = file:write(OutFd, RedLine);
+ N < 1000000 ->
+ Str = string:right(integer_to_list(N), 6, 32),
+ ok = file:write(OutFd, [Str,fill1(),Line]);
+ N < 10000000 ->
+ Str = integer_to_list(N),
+ ok = file:write(OutFd, [Str,fill2(),Line]);
+ true ->
+ Str = integer_to_list(N),
+ ok = file:write(OutFd, [Str,fill3(),Line])
+ end,
print_lines(Module, CovLines1, InFd, OutFd, L+1, HTML);
_ ->
- file:write(OutFd, [tab(),Line]),
+ ok = file:write(OutFd, [tab(),Line]),
print_lines(Module, CovLines, InFd, OutFd, L+1, HTML)
end
end.
@@ -2543,7 +2545,7 @@ do_export(Module, OutFile, From, State) ->
{error,{not_cover_compiled,Module}}
end
end,
- file:close(Fd),
+ ok = file:close(Fd),
reply(From, Reply);
{error,Reason} ->
reply(From, {error, {cant_open_file,OutFile,Reason}})
@@ -2585,10 +2587,9 @@ write(Element,Fd) ->
case byte_size(Bin) of
Size when Size > 255 ->
SizeBin = term_to_binary({'$size',Size}),
- file:write(Fd,
- <<(byte_size(SizeBin)):8,SizeBin/binary,Bin/binary>>);
+ ok = file:write(Fd, <<(byte_size(SizeBin)):8,SizeBin/binary,Bin/binary>>);
Size ->
- file:write(Fd,<<Size:8,Bin/binary>>)
+ ok = file:write(Fd,<<Size:8,Bin/binary>>)
end,
ok.
diff --git a/lib/tools/src/cover_web.erl b/lib/tools/src/cover_web.erl
deleted file mode 100644
index ae8b3f25cf..0000000000
--- a/lib/tools/src/cover_web.erl
+++ /dev/null
@@ -1,1185 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(cover_web).
--author('[email protected]').
--behaviour(gen_server).
-
-%%Export of configuration function
--export([configData/0]).
-%% External exports
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
-
--export([start_link/0,start/0,stop/0]).
--export([menu_frame/2,nodes_frame/2,import_frame/2,
- compile_frame/2,result_frame/2]).
--export([list_dir/2,compile/2,add_node/2,remove_node/2,result/2,
- calls/2,coverage/2,import/2]).
-
--record(state,{dir}).
-
--include_lib("kernel/include/file.hrl").
-
-%% Timeouts
--define(DEFAULT_TIME,10000).
--define(MAX_COMPILE_TIME,60000).
--define(MAX_ANALYSE_TIME,30000).
-
-%% Colors
--define(INFO_BG_COLOR,"#C0C0EA").
-
-%%%----------------------------------------------------------------------
-%%% API - called from erlang shell
-%%%----------------------------------------------------------------------
-%% Start webtool and webcover from erlang shell
-start() ->
- webtool:start(),
- webtool:start_tools([],"app=webcover"),
- ok.
-
-%% Stop webtool and webcover from erlang shell
-stop() ->
- webtool:stop_tools([],"app=webcover"),
- webtool:stop().
-
-
-
-%%%----------------------------------------------------------------------
-%%% API - called from webtool
-%%%----------------------------------------------------------------------
-start_link() ->
- gen_server:start_link({local, webcover_server},cover_web, [], []).
-
-
-nodes_frame(Env,Input)->
- call({nodes_frame,Env,Input}).
-
-add_node(Env,Input)->
- call({add_node,Env,Input}).
-
-remove_node(Env,Input)->
- call({remove_node,Env,Input}).
-
-compile_frame(Env,Input)->
- call({compile_frame,Env,Input}).
-
-list_dir(Env,Input) ->
- call({list_dir,Env,Input}).
-
-compile(Env,Input)->
- call({compile,Env,Input},?MAX_COMPILE_TIME).
-
-result_frame(Env,Input)->
- call({result_frame,Env,Input}).
-
-result(Env,Input) ->
- call({result,Env,Input},?MAX_ANALYSE_TIME).
-
-calls(Env,Input) ->
- call({calls,Env,Input}).
-
-coverage(Env,Input) ->
- call({coverage,Env,Input}).
-
-import_frame(Env,Input)->
- call({import_frame,Env,Input}).
-
-import(Env,Input)->
- call({import,Env,Input}).
-
-menu_frame(Env,Input)->
- call({menu_frame,Env,Input}).
-
-call(Msg) ->
- call(Msg,?DEFAULT_TIME).
-call(Msg,Time) ->
- gen_server:call(webcover_server,Msg,Time).
-
-
-
-configData()->
- {webcover,[{web_data,{"WebCover","/webcover"}},
- {alias,{"/webcover",code:priv_dir(tools)}},
- {alias,{erl_alias,"/webcover/erl",[cover_web]}},
- {start,{child,{{local,webcover_server},
- {cover_web,start_link,[]},
- permanent,100,worker,[cover_web]}}}
- ]}.
-
-
-%%%----------------------------------------------------------------------
-%%% Callback functions from gen_server
-%%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Func: init/1
-%% Returns: {ok, State} |
-%% {ok, State, Timeout} |
-%% ignore |
-%% {stop, Reason}
-%%----------------------------------------------------------------------
-init([]) ->
- cover:start(),
- CS = whereis(cover_server),
- link(CS),
- GL = spawn_link(fun group_leader_proc/0),
- group_leader(GL,CS),
-
- %% Must trap exists in order to have terminate/2 executed when
- %% crashing because of a linked process crash.
- process_flag(trap_exit,true),
- {ok,Cwd} = file:get_cwd(),
- {ok, #state{dir=Cwd}}.
-
-group_leader_proc() ->
- register(cover_group_leader_proc,self()),
- group_leader_loop([]).
-group_leader_loop(Warnings) ->
- receive
- {io_request,From,ReplyAs,{put_chars,io_lib,Func,[Format,Args]}} ->
- Msg = (catch io_lib:Func(Format,Args)),
- From ! {io_reply,ReplyAs,ok},
- case lists:member(Msg,Warnings) of
- true -> group_leader_loop(Warnings);
- false -> group_leader_loop([Msg|Warnings])
- end;
- {io_request,From,ReplyAs,{put_chars,_Encoding,io_lib,Func,[Format,Args]}} ->
- Msg = (catch io_lib:Func(Format,Args)),
- From ! {io_reply,ReplyAs,ok},
- case lists:member(Msg,Warnings) of
- true -> group_leader_loop(Warnings);
- false -> group_leader_loop([Msg|Warnings])
- end;
- IoReq when element(1,IoReq)=:= io_request ->
- group_leader() ! IoReq,
- group_leader_loop(Warnings);
- {From,get_warnings} ->
- Warnings1 =
- receive
- {io_request,From,ReplyAs,
- {put_chars,io_lib,Func,[Format,Args]}} ->
- Msg = (catch io_lib:Func(Format,Args)),
- From ! {io_reply,ReplyAs,ok},
- case lists:member(Msg,Warnings) of
- true -> Warnings;
- false -> [Msg|Warnings]
- end
- after 0 ->
- Warnings
- end,
- From ! {warnings,Warnings1},
- group_leader_loop([])
- end.
-
-%%----------------------------------------------------------------------
-%% Func: handle_call/3
-%% Returns: {reply, Reply, State} |
-%% {reply, Reply, State, Timeout} |
-%% {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, Reply, State} | (terminate/2 is called)
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-handle_call({nodes_frame,_Env,_Input},_From,State)->
- {reply,nodes_frame1(),State};
-
-handle_call({add_node,_Env,Input},_From,State)->
- {reply,do_add_node(Input),State};
-
-handle_call({remove_node,_Env,Input},_From,State)->
- {reply,do_remove_node(Input),State};
-
-handle_call({compile_frame,_Env,_Input},_From,State)->
- {reply,compile_frame1(State#state.dir),State};
-
-handle_call({list_dir,_Env,Input},_From,State)->
- Dir = get_input_data(Input,"path"),
- case filelib:is_dir(Dir) of
- true ->
- {reply,compile_frame1(Dir),State#state{dir=Dir}};
- false ->
- Err = Dir ++ " is not a directory",
- {reply,compile_frame1(State#state.dir,Err),State}
- end;
-handle_call({compile,_Env,Input},_From,State)->
- {reply,do_compile(Input,State#state.dir),State};
-
-handle_call({result_frame,_Env,_Input},_From,State)->
- {reply,result_frame1(),State};
-
-handle_call({result,_Env,Input},_From,State)->
- {reply,handle_result(Input),State};
-
-handle_call({calls,_Env,Input},_From,State)->
- {reply,call_page(Input),State};
-
-handle_call({coverage,_Env,Input},_From,State)->
- {reply,coverage_page(Input),State};
-
-handle_call({import_frame,_Env,_Input},_From,State)->
- {ok,Cwd} = file:get_cwd(),
- {reply,import_frame1(Cwd),State};
-
-handle_call({import,_Env,Input},_From,State)->
- {reply,do_import(Input),State};
-
-handle_call({menu_frame,_Env,_Input},_From,State)->
- {reply,menu_frame1(),State};
-
-handle_call(_Request, _From, State) ->
- Reply = bad_request,
- {reply, Reply, State}.
-
-
-%%----------------------------------------------------------------------
-%% Func: handle_cast/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-handle_cast(_Msg, State) ->
- {noreply, State}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_info/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-handle_info({'EXIT',_Pid,Reason}, State) ->
- {stop, Reason, State}.
-
-%%----------------------------------------------------------------------
-%% Func: terminate/2
-%% Purpose: Shutdown the server
-%% Returns: any (ignored by gen_server)
-%%----------------------------------------------------------------------
-terminate(_Reason, _State) ->
- cover:stop(),
- ok.
-
-%%--------------------------------------------------------------------
-%% Func: code_change/3
-%% Purpose: Convert process state when code is changed
-%% Returns: {ok, NewState}
-%%--------------------------------------------------------------------
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-%%%----------------------------------------------------------------------
-%%% Internal functions
-%%%----------------------------------------------------------------------
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% The functions that creates the whole pages by collecting all the %%
-%% neccessary data for each page. These functions are the public %%
-%% interface. %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%----------------------------------------------------------------------
-%% Returns the page to the left frame
-%%----------------------------------------------------------------------
-menu_frame1()->
- [header(),html_header(""),menu_body(),html_end()].
-
-%%----------------------------------------------------------------------
-%% Creates the page where the user can add and remove nodes
-%%----------------------------------------------------------------------
-
-nodes_frame1()->
- nodes_frame1([]).
-nodes_frame1(Err)->
- [header(),html_header("Add/remove nodes"),nodes_body(Err),html_end()].
-
-%%----------------------------------------------------------------------
-%% Creates the page where the user can cover compile modules
-%%----------------------------------------------------------------------
-
-compile_frame1(Dir)->
- compile_frame1(Dir,[]).
-compile_frame1(Dir,Err) ->
- [header(),html_header("Cover compile"),compile_body(Dir,Err),html_end()].
-
-%%----------------------------------------------------------------------
-%% Creates the page where the user can handle results
-%%----------------------------------------------------------------------
-
-result_frame1()->
- result_frame1([]).
-result_frame1(Err) ->
- [header(),html_header("Show cover results"),result_body(Err),html_end()].
-
-%%----------------------------------------------------------------------
-%%The beginning of the page that clear the cover information on a cover
-%%compiled module
-%%----------------------------------------------------------------------
-call_page(Input)->
- [header(),html_header("Code coverage"),call_result(Input),html_end()].
-
-coverage_page(Input)->
- [header(),html_header("Code coverage"),coverage_result(Input),html_end()].
-
-%%----------------------------------------------------------------------
-%% Creates the page where the user an import files
-%%----------------------------------------------------------------------
-import_frame1(Dir) ->
- import_frame1(Dir,"").
-import_frame1(Dir,Err) ->
- [header(),html_header("Import coverdata"),import_body(Dir,Err),html_end()].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% The functions that build the body of the menu frame %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-menu_body() ->
- Nodes = cover:which_nodes(),
- Modules = cover:modules(),
- Imported = cover:imported(),
- ["<A HREF=\"./nodes_frame\" TARGET=\"main\">Nodes</A><BR>\n",
- "<A HREF=\"./compile_frame\" TARGET=\"main\">Compile</A><BR>\n",
- "<A HREF=\"./import_frame\" TARGET=\"main\">Import</A><BR>\n",
- "<A HREF=\"./result_frame\" TARGET=\"main\">Result</A>\n",
- "<P><B>Nodes:</B>\n",
- "<UL>\n",
- lists:map(fun(N) -> "<LI>"++atom_to_list(N)++"</LI>\n" end,[node()|Nodes]),
- "</UL>\n",
- "<P><B>Compiled modules:</B>\n",
- "<UL>\n",
- lists:map(fun(M) -> "<LI>"++atom_to_list(M)++"</LI>\n" end,Modules),
- "</UL>\n",
- "<P><B>Imported files:</B>\n",
- "<UL>\n",
- "<FONT SIZE=-1>\n",
- lists:map(fun(F) ->
- Short = filename:basename(F),
- "<LI TITLE=\""++F++"\">"++Short++"</LI>\n" end,Imported),
- "</FONT>\n",
- "</UL>\n"].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% The functions that build the body of the nodes frame %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-nodes_body(Err) ->
- CN = cover:which_nodes(),
- Fun = fun(N) ->
- NStr = atom_to_list(N),
- ["<OPTION VALUE=",NStr,
- " onClick=\"node.value=selected_node.value\">",NStr,
- "</OPTION>\n"]
- end,
- AllNodes = lists:append(lists:map(Fun,nodes()--CN)),
- CoverNodes = lists:append(lists:map(Fun,CN)),
-
- [reload_menu_script(Err),
- "<H1 ALIGN=center>Nodes</H1>\n",
- "<TABLE BORDER=0 WIDTH=600 ALIGN=center>\n",
- "<TR><TD BGCOLOR=",?INFO_BG_COLOR," COLSPAN=2>\n",
- "<P>You can run cover over several nodes simultaneously. Coverage data\n",
- "from all involved nodes will be merged during analysis.\n",
- "<P>Select or enter node names to add or remove here.\n",
- "</TD></TR>\n",
- "<TR><TD COLSPAN=2><BR><BR></TD></TR>\n",
- "<FORM ACTION=\"./add_node\" NAME=add_node>\n",
- "<TR><TD VALIGN=top>Add node:</TD>\n",
- "<TD><INPUT TYPE=text NAME=\"node\" SIZE=40 >",
- "<INPUT TYPE=submit\n",
- " onClick=\"if(!node.value){node.value=selected_node.value};\" VALUE=Add>"
- "<BR><SELECT NAME=selected_node TITLE=\"Select node\">\n",
- AllNodes ++
- "</SELECT>\n",
- "</TD></TR>\n"
- "</FORM>\n",
- "<TR><TD COLSPAN=2><BR><BR></TD></TR>\n",
- "<FORM ACTION=\"./remove_node\" NAME=remove_node>\n",
- "<TR><TD>Remove node:</TD>\n",
- "<TD><SELECT NAME=node TITLE=\"Select node\">\n",
- CoverNodes ++
- "</SELECT>\n",
- "<INPUT TYPE=submit VALUE=Remove>"
- "</TD></TR>\n",
- "</FORM>",
- "</TABLE>"].
-
-
-do_add_node(Input) ->
- NodeStr = get_input_data(Input, "node"),
- Node = list_to_atom(NodeStr),
- case net_adm:ping(Node) of
- pong ->
- cover:start(Node),
- nodes_frame1();
- pang ->
- nodes_frame1("Node \\\'" ++ NodeStr ++ "\\\' is not alive")
- end.
-
-do_remove_node(Input) ->
- Node = list_to_atom(get_input_data(Input, "node")),
- cover:stop(Node),
- nodes_frame1().
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% The functions that is used when the user wants to compile something %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-compile_body(Dir,Err) ->
- Erls = filelib:wildcard(filename:join(Dir,"*.erl")),
- Beams = filelib:wildcard(filename:join(Dir,"*.beam")),
-
- [reload_menu_script(Err),
- "<H1 ALIGN=center>Compile</H1>\n",
- "<TABLE WIDTH=600 ALIGN=center BORDER=0>\n",
- "<TR><TD COLSPAN=3 BGCOLOR=",?INFO_BG_COLOR,">\n",
- "Each module which shall be part of the cover analysis must be prepared\n",
- "or 'cover compiled'. On this page you can select .erl files and/or\n",
- ".beam files to include in the analysis. If you select a .erl file it\n",
- "will first be compiled with the Erlang compiler and then prepared for\n",
- "coverage analysis. If you select a .beam file it will be prepared for\n",
- "coverage analysis directly.\n",
- "</TD></TR>\n",
- "<FORM ACTION=\"./list_dir\" NAME=list_dir>\n",
- "<TR><TD WIDTH=30% BGCOLOR=",?INFO_BG_COLOR," ROWSPAN=2>\n",
- "To list a different directory, enter the directory name here.\n",
- "</TD>\n",
- "<TH COLSPAN=2><BR>List directory:<BR></TH>\n",
- "</TR>\n",
- "<TR><TD ALIGN=center COLSPAN=2>\n",
- "<INPUT TYPE=text NAME=\"path\" SIZE=40 VALUE=",Dir,">",
- "<INPUT TYPE=submit VALUE=Ok>",
- "<BR><BR></TD></TR>\n",
- "</FORM>\n",
- "<FORM ACTION=\"./compile\" NAME=compile_selection>\n",
- "<TR><TD BGCOLOR=",?INFO_BG_COLOR," ROWSPAN=2>\n",
- "<P>Select one or more .erl or .beam files to prepare for coverage\n"
- "analysis, and click the \"Compile\" button.\n",
- "<P>To reload the original file after coverage analysis is complete,\n"
- "select one or more files and click the \"Uncompile\" button, or\n",
- "simply click the \"Uncompile all\" button to reload all originals.\n"
- "</TD>\n",
- "<TH>.erl files</TH><TH>.beam files</TH></TR>\n",
- "<TR><TD ALIGN=center VALIGN=top>\n",
- "<SELECT NAME=erl TITLE=\"Select .erl files to compile\" MULTIPLE=true",
- " SIZE=15>\n",
- list_modules(Erls) ++
- "</SELECT></TD>\n",
- "<TD ALIGN=center VALIGN=top>\n",
- "<SELECT NAME=beam TITLE=\"Select .beam files to compile\"MULTIPLE=true",
- " SIZE=15>\n",
- list_modules(Beams) ++
- "</SELECT></TD></TR>\n"
- "<TR><TD BGCOLOR=",?INFO_BG_COLOR," ROWSPAN=2>\n",
- "Compile options are only needed for .erl files. The options must be\n"
- "given e.g. like this: \n"
- "<FONT SIZE=-1>[{i,\"/my/path/include\"},{i,\"/other/path/\"}]</FONT>\n"
- "</TD>\n",
- "<TH COLSPAN=2><BR>Compile options:<BR></TH>\n",
- "</TR>\n",
- "<TR><TD COLSPAN=2 ALIGN=center>\n",
- "<INPUT TYPE=text NAME=\"options\" SIZE=40>\n",
- "<INPUT TYPE=hidden NAME=\"action\"></TD></TR>\n",
- "<TR><TD></TD><TD ALIGN=center COLSPAN=2>\n",
- "<INPUT TYPE=submit onClick=\"action.value=\'compile\';\"VALUE=Compile>",
- "<INPUT TYPE=submit onClick=\"action.value=\'uncompile\';\" ",
- "VALUE=Uncompile>",
- "<INPUT TYPE=submit onClick=\"action.value=\'uncompile_all\';\" ",
- "VALUE=\"Uncompile all\">",
- "<BR><INPUT TYPE=reset VALUE=\"Reset form\"></TD></TR>\n",
- "</FORM>\n",
- "</TABLE>\n"].
-
-list_modules([File|Files]) ->
- Mod = filename:basename(File),
- ["<OPTION VALUE=",File," onDblClick=\"action.value=\'compile\';submit();\">",
- Mod,"</OPTION>\n" | list_modules(Files)];
-list_modules([]) ->
- [].
-
-do_compile(Input,Dir) ->
- {Erls,Beams,Opts,Action} = get_compile_input(parse(Input),[],[]),
- Errs =
- case Action of
- "compile" ->
- do_compile(Erls,Beams,Opts,[]);
- "uncompile" ->
- do_uncompile(Erls++Beams);
- "uncompile_all" ->
- do_uncompile(cover:modules())
- end,
- compile_frame1(Dir,Errs).
-
-get_compile_input([{"erl",File}|Input],Erl,Beam) ->
- get_compile_input(Input,[File|Erl],Beam);
-get_compile_input([{"beam",File}|Input],Erl,Beam) ->
- get_compile_input(Input,Erl,[File|Beam]);
-get_compile_input([{"options",Opts0},{"action",Action}],Erl,Beam) ->
- Opts = parse_options(Opts0),
- {Erl,Beam,Opts,Action}.
-
-do_compile([Erl|Erls],Beams,Opts,Errs) ->
- case cover:compile_module(Erl,Opts) of
- {ok,_} ->
- do_compile(Erls,Beams,Opts,Errs);
- {error,File} ->
- do_compile(Erls,Beams,Opts,["\\n"++File|Errs])
- end;
-do_compile([],[Beam|Beams],Opts,Errs) ->
- case cover:compile_beam(Beam) of
- {ok,_} ->
- do_compile([],Beams,Opts,Errs);
- {error,{no_abstract_code,File}} ->
- do_compile([],Beams,Opts,["\\n"++File++" (no_abstract_code)"|Errs])
- end;
-do_compile([],[],_,[]) ->
- [];
-do_compile([],[],_,Errs) ->
- "Compilation failed for the following files:" ++ Errs.
-
-parse_options(Options)->
- case erl_scan:string(Options ++".") of
- {ok,Tokens,_Line} ->
- case erl_parse:parse_exprs(Tokens) of
- {ok,X}->
- case lists:map(fun erl_parse:normalise/1, X) of
- [List] when is_list(List) -> List;
- List -> List
- end;
- _ ->
- []
- end;
- _ ->
- []
- end.
-
-
-do_uncompile(Files) ->
- lists:foreach(
- fun(File) ->
- Module =
- if is_atom(File) ->
- File;
- true ->
- ModStr = filename:basename(filename:rootname(File)),
- list_to_atom(ModStr)
- end,
- case code:which(Module) of
- cover_compiled ->
- code:purge(Module),
- case code:load_file(Module) of
- {module, Module} ->
- ok;
- {error, _Reason2} ->
- code:delete(Module)
- end;
- _ ->
- ok
- end
- end,
- Files),
- [].
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% The functions that builds the body of the page for coverage analysis%
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-result_body(Err) ->
- [reload_menu_script(Err),
- "<H1 ALIGN=center>Result</H1>\n",
- "<TABLE BORDER=0 WIDTH=600 ALIGN=center>\n",
- "<TR><TD BGCOLOR=",?INFO_BG_COLOR,">\n",
- "<P>After executing all your tests you can view the result of the\n",
- "coverage analysis here. For each module you can\n",
- "<DL>\n",
- "<DT><B>Analyse to file</B></DT>\n",
- "<DD>The source code of the module is shown with the number of calls\n",
- "to each line stated in the left margin. Lines which are never called\n",
- "are colored red.</DD>\n",
- "<DT><B>Analyse coverage</B></DT>\n",
- "<DD>Show the number of covered and uncovered lines in the module.</DD>\n",
- "<DT><B>Analyse calls</B></DT>\n",
- "<DD>Show the number of calls in the module.</DD>\n",
- "<DT><B>Reset module</B></DT>\n",
- "<DD>Delete all coverage data for the module.</DD>\n",
- "<DT><B>Export module</B></DT>\n",
- "<DD>Write all coverage data for the module to a file. The data can\n",
- "later be imported from the \"Import\" page.</DD>\n",
- "</DL>\n",
- "<P>You can also reset or export data for all modules with the\n",
- "<B>Reset all</B> and <B>Export all</B> actions respectively. For these\n",
- "two actions there is no need to select a module.\n",
- "<P>Select module and action from the drop down menus below, and click\n",
- "the \"Execute\" button.\n",
- "</TD></TR>\n",
- "<TR><TD><BR><BR>\n",
- result_selections(),
- "</TD></TR></TABLE>"].
-
-result_selections() ->
- ModList = filter_modlist(cover:modules()++cover:imported_modules(),[]),
-
- ["<FORM ACTION=\"./result\" NAME=result_selection>\n",
- "<TABLE WIDTH=\"300\" BORDER=0 ALIGN=center>\n",
- "<TR><TD ALIGN=left>\n",
- "Module:\n",
- "<BR><SELECT NAME=module TITLE=\"Select module\">\n",
- ModList ++
- "</SELECT>\n",
- "</TD>\n",
- "<TD ALIGN=left>\n",
- "Action:\n",
- "<BR><SELECT NAME=action TITLE=\"Select action\">\n",
- "<OPTION VALUE=\"analyse_to_file\">Analyse to file</OPTION>\n"
- "<OPTION VALUE=\"coverage\">Analyse coverage</OPTION>\n"
- "<OPTION VALUE=\"calls\">Analyse calls</OPTION>\n"
- "<OPTION VALUE=\"reset\">Reset module</OPTION>\n"
- "<OPTION VALUE=\"reset_all\">Reset all</OPTION>\n"
- "<OPTION VALUE=\"export\">Export module</OPTION>\n"
- "<OPTION VALUE=\"export_all\">Export all</OPTION>\n"
- "</SELECT>\n",
- "</TD>\n",
- "<TD ALIGN=center VALIGN=bottom><INPUT TYPE=submit VALUE=Execute>\n"
- "</TD></TR>\n"
- "</TABLE>\n",
- "</FORM>\n"].
-
-filter_modlist([M|Ms],Already) ->
- case lists:member(M,Already) of
- true ->
- filter_modlist(Ms,Already);
- false ->
- MStr = atom_to_list(M),
- ["<OPTION VALUE=",MStr,">",MStr,"</OPTION>\n" |
- filter_modlist(Ms,[M|Already])]
- end;
-filter_modlist([],_Already) ->
- [].
-
-
-
-handle_result(Input) ->
- case parse(Input) of
- [{"module",M},{"action",A}] ->
- case A of
- "analyse_to_file" ->
- case cover:analyse_to_file(list_to_atom(M),[html]) of
- {ok,File} ->
- case file:read_file(File) of
- {ok,HTML}->
- file:delete(File),
- [header(),
- reload_menu_script(""),
- binary_to_list(HTML)];
- _ ->
- result_frame1("Can not read file" ++ File)
- end;
- {error,no_source_code_found} ->
- result_frame1("No source code found for \\\'" ++
- M ++ "\\\'")
- end;
- "calls" ->
- call_page(Input);
- "coverage" ->
- coverage_page(Input);
- "reset" ->
- cover:reset(list_to_atom(M)),
- result_frame1("Coverage data for \\\'" ++ M ++
- "\\\' is now reset");
- "reset_all" ->
- cover:reset(),
- result_frame1("All coverage data is now reset");
- "export" ->
- ExportFile = generate_filename(M),
- cover:export(ExportFile,list_to_atom(M)),
- result_frame1("Coverage data for \\\'" ++ M ++
- "\\\' is now exported to file \\\"" ++
- ExportFile ++ "\\\"");
- "export_all" ->
- ExportFile = generate_filename("COVER"),
- cover:export(ExportFile),
- result_frame1(
- "All coverage data is now exported to file \\\"" ++
- ExportFile ++ "\\\"")
- end;
- [{"action",_A}] ->
- result_frame1("No module is selected")
- end.
-
-generate_filename(Prefix) ->
- {ok,Cwd} = file:get_cwd(),
- filename:join(Cwd,Prefix ++ "_" ++ ts() ++ ".coverdata").
-
-ts() ->
- {{Y,M,D},{H,Min,S}} = calendar:now_to_local_time(erlang:timestamp()),
- io_lib:format("~4.4.0w~2.2.0w~2.2.0w-~2.2.0w~2.2.0w~2.2.0w",
- [Y,M,D,H,Min,S]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% The functions that builds the body of the page that shows the calls %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-call_result(Input)->
- Mod = list_to_atom(get_input_data(Input, "module")),
- case cover:analyse(Mod,calls) of
- {error,_}->
- error_body();
- {ok,_} ->
- call_result2(Mod,Input)
- end.
-
-call_result2(Mod,Input)->
- Result =
- case get_input_data(Input,"what") of
- "mod" ->
- call_result(mod,Mod);
- "func" ->
- call_result(func,Mod);
- "clause" ->
- call_result(clause,Mod);
- _->
- call_result(all,Mod)
- end,
- result_choice("calls",Mod) ++ Result.
-
-result_choice(Level,Mod)->
- ModStr=atom_to_list(Mod),
- [reload_menu_script(""),
- "<TABLE WIDTH=100%><TR>\n",
- "<TD><A HREF=./",Level,"?module=",ModStr,"&what=all>All Data</A></TD>\n",
- "<TD><A HREF=./",Level,"?module=",ModStr,"&what=mod>Module</A></TD>\n",
- "<TD><A HREF=./",Level,"?module=",ModStr,"&what=func>Function</A></TD>\n",
- "<TD><A HREF=./",Level,"?module=",ModStr,"&what=clause>Clause</A></TD>\n",
- "</TR></TABLE><BR>\n"].
-
-call_result(Mode,Module)->
- Content =
- case Mode of
- mod->
- format_cover_call(cover:analyse(Module,calls,module),mod);
- func->
- format_cover_call(cover:analyse(Module,calls,function),func);
- clause->
- format_cover_call(cover:analyse(Module,calls,clause),clause);
- _->
- format_cover_call(cover:analyse(Module,calls,module),mod) ++
- format_cover_call(cover:analyse(Module,calls,function),func)++
- format_cover_call(cover:analyse(Module,calls,clause),clause)
- end,
- getModDate(Module,date())++"<BR>"++
- "<TABLE WIDTH=\"100%\" BORDER=1>"
- ++ Content ++"</TABLE>".
-
-
-format_cover_call({error,_},_)->
- ["<TR><TD>\n",
- "<BR><BR><BR><BR>\n",
- "<FONT SIZE=5>The selected module is not Cover Compiled</FONT>\n",
- "<BR>\n",
- "</TD></TR>\n"];
-
-format_cover_call({ok,{Mod,Calls}},mod)->
- ["<TR BGCOLOR=\"#8899AA\"><TD COLSPAN=5><B>Module calls</B></TD></TR>\n",
- "<TR><TD COLSPAN=4><I>Module</I></TD>",
- "<TD ALIGN=\"right\"><I>Number of calls</I></TD></TR>\n",
- "<TR><TD COLSPAN=4>" ++ atom_to_list(Mod) ++"</TD>"
- "<TD ALIGN=\"right\">" ++ integer_to_list(Calls)++"</TD></TR>\n"];
-
-format_cover_call({ok,Calls},func)->
- ["<TR BGCOLOR=\"#8899AA\"><TD COLSPAN=5><B>Function calls</B></TD></TR>\n",
- "<TR><TD><I>Module</I></TD><TD><I>Function</I></TD>",
- "<TD COLSPAN=2 ALIGN=\"right\"><I>Arity</I></TD>",
- "<TD ALIGN=\"right\"><I>Number of calls </I></TD></TR>\n",
- lists:append(
- lists:map(
- fun({{Mod,Func,Arity},Nr_of_calls})->
- ["<TR><TD WIDTH=\"20%\">"++ atom_to_list(Mod)++"</TD>\n",
- "<TD WIDTH=\"20%\" >" ++ atom_to_list(Func) ++" </TD>\n",
- "<TD COLSPAN=2 WIDTH=\"40%\" ALIGN=\"right\">",
- integer_to_list(Arity),
- "</TD>\n",
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Nr_of_calls),
- "</TD></TR>\n"]
- end,
- Calls))];
-
-format_cover_call({ok,Calls},clause)->
- ["<TR BGCOLOR=\"#8899AA\"><TD COLSPAN=5><B>Clause calls</B></TD></TR>\n",
- "<TR><TD><I>Module</I></TD><TD><I>Function</I></TD>",
- "<TD ALIGN=\"right\"><I>Arity</I></TD>",
- "<TD ALIGN=\"right\"><I>Ordinal</I></TD>",
- "<TD ALIGN=\"right\"><I>Number of calls</I></TD></TR>\n",
- lists:append(
- lists:map(
- fun({{Mod,Func,Arity,Ord},Nr_of_calls})->
- ["<TR><TD WIDTH=\"20%\" >", atom_to_list(Mod), "</TD>\n",
- "<TD WIDTH=\"20%\" >", atom_to_list(Func), "</TD>\n",
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Arity),
- "</TD>\n",
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Ord),
- "</TD>\n",
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Nr_of_calls),
- "</TD></TR>\n"]
- end,
- Calls))].
-
-
-error_body()->
- ["<TABLE WIDTH=\"100%\" BORDER=1>\n",
- "<TR ALIGN=\"center\">\n",
- "<TD>\n",
- "<BR><BR><BR><BR><BR><BR>\n",
- "<FONT SIZE=5>The selected module is not Cover Compiled</FONT>\n",
- "<BR>\n",
- "</TD>\n",
- "</TR>\n",
- "</TABLE>\n"].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% The functions that builds the body of the page that shows coverage %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-coverage_result(Input)->
- Mod = list_to_atom(get_input_data(Input, "module")),
- case cover:analyse(Mod,coverage) of
- {error,_}->
- error_body();
- {ok,_} ->
- coverage_result2(Mod,Input)
- end.
-
-coverage_result2(Mod,Input)->
- Result =
- case get_input_data(Input,"what") of
- "mod" ->
- coverage_result(mod,Mod);
- "func" ->
- coverage_result(func,Mod);
- "clause" ->
- coverage_result(clause,Mod);
- _->
- coverage_result(all,Mod)
- end,
- result_choice("coverage",Mod) ++ Result.
-
-coverage_result(Mode,Module)->
- Content =
- case Mode of
- mod->
- format_cover_coverage(cover:analyse(Module,coverage,module),
- mod);
- func->
- format_cover_coverage(cover:analyse(Module,coverage,function),
- func);
- clause->
- format_cover_coverage(cover:analyse(Module,coverage,clause),
- clause);
- _->
- format_cover_coverage(cover:analyse(Module,coverage,module),
- mod) ++
- format_cover_coverage(cover:analyse(Module,coverage,function),
- func)++
- format_cover_coverage(cover:analyse(Module,coverage,clause),
- clause)
- end,
- getModDate(Module,date())++"<BR>"++
- "<TABLE WIDTH=\"100%\" BORDER=1>"
- ++ Content ++"</TABLE>".
-
-getModDate(Module,{Year,Mon,Day})->
- "<TABLE>
- <TR>
- <TD>Module:</TD>
- <TD>" ++ atom_to_list(Module) ++ "</TD>
- </TR>
- <TR>
- <TD>Date:</TD>
- <TD>" ++ integer_to_list(Day) ++ "/" ++
- integer_to_list(Mon) ++"&nbsp;-&nbsp;"++
- integer_to_list(Year) ++
- "</TD>
- </TR>
- </TABLE>".
-
-
-format_cover_coverage({error,_},_)->
- "<TR><TD>
- <BR><BR><BR><BR>
- <FONT SIZE=5>The selected module is not Cover Compiled</FONT>
- <BR>
- </TD></TR>";
-
-
-format_cover_coverage({ok,{Mod,{Cov,Not_cov}}},mod)->
- ["<TR BGCOLOR=\"#8899AA\"><TD COLSPAN=6><B>Module coverage</B></TD></TR>\n",
- "<TR><TD COLSPAN=4><I>Module</I></TD>\n",
- "<TD ALIGN=\"right\"><I>Covered</I></TD>\n"
- "<TD ALIGN=\"RIGHT\" NOWRAP=\"true\"><I>Not Covered</I></TD>\n",
- "</TR>\n",
- "<TR><TD COLSPAN=4>", atom_to_list(Mod), "</TD>\n"
- "<TD ALIGN=\"right\">", integer_to_list(Cov), "</TD>\n"
- "<TD ALIGN=\"right\" >", integer_to_list(Not_cov), "</TD></TR>\n"];
-
-format_cover_coverage({ok,Cov_res},func)->
- ["<TR BGCOLOR=\"#8899AA\"><TD COLSPAN=6><B>Function coverage</B></TD>\n",
- "</TR>\n",
- "<TR><TD><I>Module</I></TD><TD><I>Function</I></TD>",
- "<TD ALIGN=\"right\"><I>Arity</I></TD>",
- "<TD COLSPAN=2 ALIGN=\"right\"><I>Covered</I></TD>",
- "<TD ALIGN=\"right\" STYLE=\"white-space:nowrap\"><I>Not Covered</I></TD>",
- "</TR>\n",
- lists:append(
- lists:map(
- fun({{Mod,Func,Arity},{Cov,Not_cov}})->
- ["<TR><TD WIDTH=\"20%\" >"++ atom_to_list(Mod) ++" </TD>\n",
- "<TD WIDTH=\"20%\" >" ++ atom_to_list(Func) ++"</TD>\n",
- "<TD WIDTH=\"40%\" ALIGN=\"right\">",
- integer_to_list(Arity),
- "</TD>\n",
- "<TD WIDTH=\"40%\" ALIGN=\"right\" COLSPAN=2>",
- integer_to_list(Cov),
- "</TD>\n"
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Not_cov),
- "</TD></TR>\n"]
- end,
- Cov_res))];
-
-format_cover_coverage({ok,Cov_res},clause)->
- ["<TR BGCOLOR=\"#8899AA\"><TD COLSPAN=6><B>Clause coverage</B></TD></TR>\n",
- "<TR><TD><I>Module</I></TD><TD><I>Function</I></TD>\n",
- "<TD ALIGN=\"right\"><I>Arity</I></TD>\n",
- "<TD ALIGN=\"right\"><I>Ordinal<I></TD>\n",
- "<TD ALIGN=\"right\">Covered</TD>\n",
- "<TD ALIGN=\"right\" STYLE=\"white-space:nowrap\">Not Covered</TD></TR>\n",
- lists:append(
- lists:map(
- fun({{Mod,Func,Arity,Ord},{Cov,Not_cov}})->
- ["<TR><TD WIDTH=\"20%\" >"++ atom_to_list(Mod) ++"</TD>\n",
- "<TD WIDTH=\"20%\" >" ++ atom_to_list(Func) ++" </TD>\n",
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Arity),
- "</TD>\n"
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Ord),
- "</TD>\n"
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Cov),
- "</TD>\n"
- "<TD WIDTH=\"20%\" ALIGN=\"right\">",
- integer_to_list(Not_cov),
- "</TD></TR>\n"]
- end,
- Cov_res))].
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% The functions that builds the body of the import page %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-import_body(Dir,Err) ->
- [reload_menu_script(Err),
- "<H1 ALIGN=center>Import</H1>\n",
- "<TABLE BORDER=0 WIDTH=600 ALIGN=center>\n",
- "<TR><TD BGCOLOR=",?INFO_BG_COLOR,">\n",
- "<P>You can import coverage data from a previous analysis. If you do so\n",
- "the imported data will be merged with the current coverage data.\n",
- "<P>You can export data from the current analysis from the \"Result\"\n",
- "page.\n",
- "<P>Select the file to import here.\n",
- "</TD></TR>\n",
- "<TR><TD ALIGN=center><BR><BR>\n",
- "<FORM NAME=change_import_dir METHOD=post ACTION=\"./import\">\n",
- "<B>Change directory:</B><BR>\n",
- "<INPUT TYPE=text NAME=\"file\" SIZE=30 VALUE=",Dir,">",
- "<INPUT TYPE=hidden NAME=dir VALUE=",Dir,">\n",
- "<INPUT TYPE=submit VALUE=Ok><BR>\n",
- "</FORM>\n",
- browse_import(Dir),
- "</TABLE>"].
-
-browse_import(Dir) ->
- {ok,List} = file:list_dir(Dir),
- Sorted = lists:reverse(lists:sort(List)),
- {Dirs,Files} = filter_files(Dir,Sorted,[],[]),
- ["<FORM NAME=browse_import METHOD=post ACTION=\"./import\">\n"
- "<SELECT NAME=file TITLE=\"Select import file\" SIZE=10>\n",
- "<OPTION VALUE=\"..\" onDblClick=submit()>../</OPTION>\n",
- Dirs,
- Files,
- "</SELECT>\n",
- "<INPUT TYPE=hidden NAME=dir VALUE=",Dir,">\n",
- "<BR><INPUT TYPE=submit VALUE=Ok>\n"
- "</FORM>\n"].
-
-filter_files(Dir,[File|Files],Ds,Fs) ->
- case filename:extension(File) of
- ".coverdata" ->
- Fs1 = ["<OPTION VALUE=",File," onDblClick=submit()>",
- File,"</OPTION>\n" | Fs],
- filter_files(Dir,Files,Ds,Fs1);
- _ ->
- FullName = filename:join(Dir,File),
- case filelib:is_dir(FullName) of
- true ->
- Ds1 = ["<OPTION VALUE=",File," onDblClick=submit()>",
- File,"/</OPTION>\n" | Ds],
- filter_files(Dir,Files,Ds1,Fs);
- false ->
- filter_files(Dir,Files,Ds,Fs)
- end
- end;
-filter_files(_Dir,[],Ds,Fs) ->
- {Ds,Fs}.
-
-
-
-
-do_import(Input) ->
- case parse(Input) of
- [{"file",File0},{"dir",Dir}] ->
- File = filename:join(Dir,File0),
- case filelib:is_dir(File) of
- true ->
- import_frame1(File);
- false ->
- case filelib:is_file(File) of
- true ->
- case cover:import(File) of
- ok ->
- import_frame1(Dir);
- {error,{cant_open_file,ExportFile,_Reason}} ->
- import_frame1(Dir,
- "Error importing file\\n\\\""
- ++ ExportFile ++ "\\\"")
- end;
- false ->
- import_frame1(Dir,
- "Error importing file\\n\\\"" ++
- File ++ "\\\"")
- end
- end;
- [{"dir",Dir}] ->
- import_frame1(Dir,"No file is selected")
- end.
-
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% Different private helper functions %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%Create the Header for the page If we now the mimetype use that type %%
-%%otherwise use text %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-header() ->
- header("text/html").
-header(MimeType) ->
- "Pragma:no-cache\r\n" ++
- "Content-type: " ++ MimeType ++ "\r\n\r\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%Create the Htmlheader set the title of the page %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-html_header(Title) ->
- "<HTML>\n" ++
- "<HEAD>\n" ++
- "<TITLE>" ++ Title ++ "</TITLE>\n" ++
- "</HEAD>\n"
- "<BODY BGCOLOR=\"#FFFFFF\">\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Close the body- and Html tags %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-html_end()->
- "</BODY></HTML>".
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% A script which reloads the menu frame and possibly pops up an alert%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-reload_menu_script(Err) ->
- ["<SCRIPT>\n",
- "function reloadMenu()\n",
- " {\n",
- " parent.menu.document.location.href=\"./menu_frame\";\n",
- case Err of
- "" -> "";
- _ -> " alert(\""++Err++"\");\n"
- end,
- case get_warnings() of
- [] ->
- "";
- Warnings ->
- " alert(\""++fix_newline(lists:flatten(Warnings))++"\");\n"
- end,
- " }\n",
- "</SCRIPT>\n",
- "<BODY onLoad=reloadMenu() BGCOLOR=\"#FFFFFF\">"].
-
-fix_newline([$\n|Rest]) ->
- [$\\,$n|fix_newline(Rest)];
-fix_newline([$"|Rest]) ->
- [$\\,$"|fix_newline(Rest)];
-fix_newline([Char|Rest]) ->
- [Char|fix_newline(Rest)];
-fix_newline([]) ->
- [].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Control the input data and return the intresting values or error %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_input_data(Input,Key)->
- case lists:keysearch(Key,1,parse(Input)) of
- {value,{Key,Value}} ->
- Value;
- false ->
- undefined
- end.
-
-parse(Input) ->
- httpd:parse_query(Input).
-
-
-get_warnings() ->
- cover_group_leader_proc ! {self(), get_warnings},
- receive {warnings,Warnings} ->
- Warnings
- end.
diff --git a/lib/tools/src/eprof.erl b/lib/tools/src/eprof.erl
index 0357e46a50..3ae899a078 100644
--- a/lib/tools/src/eprof.erl
+++ b/lib/tools/src/eprof.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -74,7 +74,6 @@
start() -> gen_server:start({local, ?MODULE}, ?MODULE, [], []).
stop() -> gen_server:call(?MODULE, stop, infinity).
-
analyze() ->
analyze(procs).
@@ -112,7 +111,7 @@ profile(Rootset, M, F, A, Pattern) when is_list(Rootset), is_atom(M), is_atom(F)
%% Returns when M:F/A has terminated
profile(Rootset, M, F, A, Pattern, Options) ->
- start(),
+ ok = start_internal(),
gen_server:call(?MODULE, {profile_start, Rootset, Pattern, {M,F,A}, Options}, infinity).
dump() ->
@@ -127,7 +126,7 @@ start_profiling(Rootset) ->
start_profiling(Rootset, Pattern) ->
start_profiling(Rootset, Pattern, ?default_options).
start_profiling(Rootset, Pattern, Options) ->
- start(),
+ ok = start_internal(),
gen_server:call(?MODULE, {profile_start, Rootset, Pattern, undefined, Options}, infinity).
stop_profiling() ->
@@ -251,9 +250,9 @@ handle_call({logfile, File}, _From, #state{ fd = OldFd } = S) ->
{ok, Fd} ->
case OldFd of
undefined -> ok;
- OldFd -> file:close(OldFd)
+ OldFd -> ok = file:close(OldFd)
end,
- {reply, ok, S#state{ fd = Fd}};
+ {reply, ok, S#state{fd = Fd}};
Error ->
{reply, Error, S}
end;
@@ -521,3 +520,10 @@ format(Fd, Format, Strings) ->
divide(_,0) -> 0.0;
divide(T,N) -> T/N.
+
+start_internal() ->
+ case start() of
+ {ok, _} -> ok;
+ {error, {already_started,_}} -> ok;
+ Error -> Error
+ end.
diff --git a/lib/tools/src/fprof.erl b/lib/tools/src/fprof.erl
index c5c24c8eb3..8db23dd151 100644
--- a/lib/tools/src/fprof.erl
+++ b/lib/tools/src/fprof.erl
@@ -1003,7 +1003,7 @@ handle_req(#analyse{dest = Dest,
already_open ->
ok;
ok ->
- file:close(DestPid)
+ ok = file:close(DestPid)
end,
State
end;
@@ -1364,7 +1364,7 @@ tracer_loop(Parent, Handler, State) ->
Trace when element(1, Trace) =:= trace_ts ->
tracer_loop(Parent, Handler, Handler(Trace, State));
{'EXIT', Parent, Reason} ->
- handler(end_of_trace, State),
+ _ = handler(end_of_trace, State),
exit(Reason);
_ ->
tracer_loop(Parent, Handler, State)
@@ -1450,12 +1450,10 @@ end_of_trace(Table, TS) ->
Procs = get(),
put(table, Table),
?dbg(2, "get() -> ~p~n", [Procs]),
- lists:map(
- fun ({Pid, _}) when is_pid(Pid) ->
- trace_exit(Table, Pid, TS)
- end,
- Procs),
- erase(),
+ _ = lists:map(fun ({Pid, _}) when is_pid(Pid) ->
+ trace_exit(Table, Pid, TS)
+ end, Procs),
+ _ = erase(),
ok.
@@ -1567,13 +1565,20 @@ trace_handler({trace_ts, Pid, return_to, {_M, _F, Args} = MFArgs, TS} = Trace,
trace_return_to(Table, Pid, Func, TS),
TS;
%%
-%% spawn
+%% spawn, only needed (and reliable) prior to 19.0
trace_handler({trace_ts, Pid, spawn, Child, MFArgs, TS} = Trace,
Table, _, Dump) ->
dump_stack(Dump, get(Pid), Trace),
trace_spawn(Table, Child, MFArgs, TS, Pid),
TS;
%%
+%% spawned, added in 19.0
+trace_handler({trace_ts, Pid, spawned, Parent, MFArgs, TS} = Trace,
+ Table, _, Dump) ->
+ dump_stack(Dump, get(Pid), Trace),
+ trace_spawn(Table, Pid, MFArgs, TS, Parent),
+ TS;
+%%
%% exit
trace_handler({trace_ts, Pid, exit, _Reason, TS} = Trace,
Table, _, Dump) ->
@@ -1622,15 +1627,24 @@ trace_handler({trace_ts, Pid, in, {_M, _F, Args} = MFArgs, TS} = Trace,
TS;
%%
%% gc_start
-trace_handler({trace_ts, Pid, gc_start, _Func, TS} = Trace,
- Table, _, Dump) ->
+trace_handler({trace_ts, Pid, gc_minor_start, _Func, TS} = Trace, Table, _, Dump) ->
dump_stack(Dump, get(Pid), Trace),
trace_gc_start(Table, Pid, TS),
TS;
+
+trace_handler({trace_ts, Pid, gc_major_start, _Func, TS} = Trace, Table, _, Dump) ->
+ dump_stack(Dump, get(Pid), Trace),
+ trace_gc_start(Table, Pid, TS),
+ TS;
+
%%
%% gc_end
-trace_handler({trace_ts, Pid, gc_end, _Func, TS} = Trace,
- Table, _, Dump) ->
+trace_handler({trace_ts, Pid, gc_minor_end, _Func, TS} = Trace, Table, _, Dump) ->
+ dump_stack(Dump, get(Pid), Trace),
+ trace_gc_end(Table, Pid, TS),
+ TS;
+
+trace_handler({trace_ts, Pid, gc_major_end, _Func, TS} = Trace, Table, _, Dump) ->
dump_stack(Dump, get(Pid), Trace),
trace_gc_end(Table, Pid, TS),
TS;
@@ -2014,8 +2028,10 @@ trace_spawn(Table, Pid, MFArgs, TS, Parent) ->
ets:insert(Table, #proc{id = Pid, parent = Parent,
spawned_as = MFArgs});
_ ->
- throw({inconsistent_trace_data, ?MODULE, ?LINE,
- [Pid, MFArgs, TS, Parent, Stack]})
+ %% In 19.0 we get both a spawn and spawned event,
+ %% however we do not know the order so we just ignore
+ %% the second event that comes
+ ok
end.
@@ -2029,7 +2045,7 @@ trace_exit(Table, Pid, TS) ->
[] ->
ok;
[_ | _] = Stack ->
- trace_return_to_int(Table, Pid, undefined, TS, Stack),
+ _ = trace_return_to_int(Table, Pid, undefined, TS, Stack),
ok
end,
ok.
@@ -2155,7 +2171,7 @@ trace_clock(_Table, _Pid, _T,
[[{suspend, _}], [{suspend, _}] | _]=_Stack, _Clock) ->
?dbg(9, "trace_clock(Table, ~w, ~w, ~w, ~w)~n",
[_Pid, _T, _Stack, _Clock]),
- void;
+ ok;
trace_clock(Table, Pid, T,
[[{garbage_collect, TS0}], [{suspend, _}]], Clock) ->
trace_clock_1(Table, Pid, T, TS0, undefined, garbage_collect, Clock);
@@ -2170,7 +2186,7 @@ trace_clock(Table, Pid, T, [[{Func0, TS0}], [{Func1, _} | _] | _], Clock) ->
trace_clock(Table, Pid, T, [[{Func0, TS0}]], Clock) ->
trace_clock_1(Table, Pid, T, TS0, undefined, Func0, Clock);
trace_clock(_, _, _, [], _) ->
- void.
+ ok.
trace_clock_1(Table, Pid, _, _, Caller, suspend, #clocks.own) ->
clock_add(Table, {Pid, Caller, suspend}, #clocks.own, 0);
@@ -2184,7 +2200,7 @@ trace_clock_1(Table, Pid, T, TS, Caller, Func, Clock) ->
clock_add(Table, Id, Clock, T) ->
?dbg(1, "clock_add(Table, ~w, ~w, ~w)~n", [Id, Clock, T]),
- try ets:update_counter(Table, Id, {Clock, T})
+ try ets:update_counter(Table, Id, {Clock, T}), ok
catch
error:badarg ->
ets:insert(Table, #clocks{id = Id}),
@@ -2193,7 +2209,7 @@ clock_add(Table, Id, Clock, T) ->
true -> ?dbg(0, "Negative counter value ~p ~p ~p ~p~n",
[X, Id, Clock, T])
end,
- X
+ ok
end.
clocks_add(Table, #clocks{id = Id} = Clocks) ->
diff --git a/lib/tools/src/instrument.erl b/lib/tools/src/instrument.erl
index 34c5ba04cc..055f4a7afb 100644
--- a/lib/tools/src/instrument.erl
+++ b/lib/tools/src/instrument.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/tools/src/lcnt.erl b/lib/tools/src/lcnt.erl
index 3a3cebf3ed..23d66b084e 100644
--- a/lib/tools/src/lcnt.erl
+++ b/lib/tools/src/lcnt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -23,67 +23,57 @@
-author("Björn-Egil Dahlberg").
%% gen_server callbacks
--export([
- init/1,
- handle_call/3,
- handle_cast/2,
- handle_info/2,
- terminate/2,
- code_change/3
- ]).
+-export([init/1,
+ handle_call/3,
+ handle_cast/2,
+ handle_info/2,
+ terminate/2,
+ code_change/3]).
%% start/stop
--export([
- start/0,
- stop/0
- ]).
+-export([start/0,
+ stop/0]).
%% erts_debug:lock_counters api
--export([
- rt_collect/0,
- rt_collect/1,
- rt_clear/0,
- rt_clear/1,
- rt_opt/1,
- rt_opt/2
- ]).
+-export([rt_collect/0,
+ rt_collect/1,
+ rt_clear/0,
+ rt_clear/1,
+ rt_opt/1,
+ rt_opt/2]).
%% gen_server call api
--export([
- raw/0,
- collect/0,
- collect/1,
- clear/0,
- clear/1,
- conflicts/0,
- conflicts/1,
- locations/0,
- locations/1,
- inspect/1,
- inspect/2,
- histogram/1,
- histogram/2,
- information/0,
- swap_pid_keys/0,
- % set options
- set/1,
- set/2,
-
- load/1,
- save/1
- ]).
+-export([raw/0,
+ collect/0,
+ collect/1,
+ clear/0,
+ clear/1,
+ conflicts/0,
+ conflicts/1,
+ locations/0,
+ locations/1,
+ inspect/1,
+ inspect/2,
+ histogram/1,
+ histogram/2,
+ information/0,
+ swap_pid_keys/0,
+ % set options
+ set/1,
+ set/2,
+
+ load/1,
+ save/1]).
%% convenience
--export([
- apply/3,
- apply/2,
- apply/1,
- all_conflicts/0,
- all_conflicts/1,
- pid/2, pid/3,
- port/1, port/2
- ]).
+-export([apply/3,
+ apply/2,
+ apply/1,
+ all_conflicts/0,
+ all_conflicts/1,
+ pid/2, pid/3,
+ port/1, port/2]).
-define(version, "1.0").
@@ -94,12 +84,12 @@
-record(stats, {
file :: atom(),
- line :: non_neg_integer(),
+ line :: non_neg_integer() | 'undefined',
tries :: non_neg_integer(),
colls :: non_neg_integer(),
time :: non_neg_integer(), % us
nt :: non_neg_integer(), % #timings collected
- hist :: tuple() % histogram
+ hist :: tuple() | 'undefined' % histogram
}).
-record(lock, {
@@ -135,6 +125,13 @@ start() -> gen_server:start({local, ?MODULE}, ?MODULE, [], []).
stop() -> gen_server:call(?MODULE, stop, infinity).
init([]) -> {ok, #state{ locks = [], duration = 0 } }.
+start_internal() ->
+ case start() of
+ {ok,_} -> ok;
+ {error, {already_started,_}} -> ok;
+ Error -> Error
+ end.
+
%% -------------------------------------------------------------------- %%
%%
%% API erts_debug:lock_counters
@@ -184,7 +181,7 @@ raw() -> call(raw).
set(Option, Value) -> call({set, Option, Value}).
set({Option, Value}) -> call({set, Option, Value}).
save(Filename) -> call({save, Filename}).
-load(Filename) -> start(), call({load, Filename}).
+load(Filename) -> ok = start_internal(), call({load, Filename}).
call(Msg) -> gen_server:call(?MODULE, Msg, infinity).
@@ -195,7 +192,7 @@ call(Msg) -> gen_server:call(?MODULE, Msg, infinity).
%% -------------------------------------------------------------------- %%
apply(M,F,As) when is_atom(M), is_atom(F), is_list(As) ->
- lcnt:start(),
+ ok = start_internal(),
Opt = lcnt:rt_opt({copy_save, true}),
lcnt:clear(),
Res = erlang:apply(M,F,As),
@@ -207,7 +204,7 @@ apply(Fun) when is_function(Fun) ->
lcnt:apply(Fun, []).
apply(Fun, As) when is_function(Fun) ->
- lcnt:start(),
+ ok = start_internal(),
Opt = lcnt:rt_opt({copy_save, true}),
lcnt:clear(),
Res = erlang:apply(Fun, As),
@@ -757,7 +754,7 @@ list2lock([F|Fs], Ls) ->
stats2stats([]) -> [];
stats2stats([Stat|Stats]) ->
- Sz = tuple_size(#stats{}),
+ Sz = record_info(size, stats),
[stat2stat(Stat,Sz)|stats2stats(Stats)].
stat2stat(Stat,Sz) when tuple_size(Stat) =:= Sz -> Stat;
diff --git a/lib/tools/src/make.erl b/lib/tools/src/make.erl
index 5d5a1ef2bd..26378f28a0 100644
--- a/lib/tools/src/make.erl
+++ b/lib/tools/src/make.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -299,10 +299,11 @@ check_includes(File, IncludePath, ObjMTime) ->
end.
check_includes2(Epp, File, ObjMTime) ->
+ A1 = erl_anno:new(1),
case epp:parse_erl_form(Epp) of
- {ok, {attribute, 1, file, {File, 1}}} ->
+ {ok, {attribute, A1, file, {File, A1}}} ->
check_includes2(Epp, File, ObjMTime);
- {ok, {attribute, 1, file, {IncFile, 1}}} ->
+ {ok, {attribute, A1, file, {IncFile, A1}}} ->
case file:read_file_info(IncFile) of
{ok, #file_info{mtime=MTime}} when MTime>ObjMTime ->
epp:close(Epp),
diff --git a/lib/tools/src/tags.erl b/lib/tools/src/tags.erl
index 2bc1865503..b833d96c19 100644
--- a/lib/tools/src/tags.erl
+++ b/lib/tools/src/tags.erl
@@ -101,7 +101,7 @@ files(Files, Options) ->
case open_out(Options) of
{ok, Os} ->
files_loop(Files, Os),
- close_out(Os),
+ ok = close_out(Os),
ok;
_ ->
error
@@ -169,7 +169,7 @@ filename(Name, Os) ->
case file:open(Name, [read]) of
{ok, Desc} ->
Acc = module(Desc, [], [], {1, 0}),
- file:close(Desc),
+ ok = file:close(Desc),
genout(Os, Name, Acc),
ok;
_ ->
diff --git a/lib/tools/src/tools.app.src b/lib/tools/src/tools.app.src
index 978b54719c..a00969eabe 100644
--- a/lib/tools/src/tools.app.src
+++ b/lib/tools/src/tools.app.src
@@ -21,7 +21,6 @@
[{description, "DEVTOOLS CXC 138 16"},
{vsn, "%VSN%"},
{modules, [cover,
- cover_web,
eprof,
fprof,
instrument,
@@ -36,12 +35,12 @@
xref_utils
]
},
- {registered,[webcover_server]},
+ {registered, []},
{applications, [kernel, stdlib]},
{env, [{file_util_search_methods,[{"", ""}, {"ebin", "esrc"}, {"ebin", "src"}]}
]
},
- {runtime_dependencies, ["webtool-0.8.10","stdlib-2.5","runtime_tools-1.8.14",
+ {runtime_dependencies, ["stdlib-2.5","runtime_tools-1.8.14",
"kernel-3.0","inets-5.10","erts-7.0",
"compiler-5.0"]}
]
diff --git a/lib/tools/src/tools.appup.src b/lib/tools/src/tools.appup.src
index 9eee8df184..fa48fa4219 100644
--- a/lib/tools/src/tools.appup.src
+++ b/lib/tools/src/tools.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/tools/src/xref.erl b/lib/tools/src/xref.erl
index 64add7afbb..32efa36fa2 100644
--- a/lib/tools/src/xref.erl
+++ b/lib/tools/src/xref.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/tools/src/xref_base.erl b/lib/tools/src/xref_base.erl
index 88031f6e77..f298a1ce81 100644
--- a/lib/tools/src/xref_base.erl
+++ b/lib/tools/src/xref_base.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -669,16 +669,45 @@ do_add_directory(Dir, AppName, Bui, Rec, Ver, War, State) ->
warnings(War, unreadable, Unreadable),
case Errors of
[] ->
- do_add_modules(FileNames, AppName, Bui, Ver, War, State, []);
+ do_add_modules(FileNames, AppName, Bui, Ver, War, State);
[Error | _] ->
throw(Error)
end.
-do_add_modules([], _AppName, _OB, _OV, _OW, State, Modules) ->
+do_add_modules(Files, AppName, OB, OV, OW, State0) ->
+ NFiles = length(Files),
+ Reader = fun(SplitName, State) ->
+ _Pid = read_module(SplitName, AppName, OB, OV, OW, State)
+ end,
+ N = parallelism(),
+ Files1 = start_readers(Files, Reader, State0, N),
+ %% Increase the number of readers towards the end to decrease the
+ %% waiting time for the collecting process:
+ Nx = N,
+ add_mods(Files1, Reader, State0, [], NFiles, Nx).
+
+add_mods(_, _ReaderFun, State, Modules, 0, _Nx) ->
{ok, sort(Modules), State};
-do_add_modules([File | Files], AppName, OB, OV, OW, State, Modules) ->
- {ok, M, NewState} = do_add_module(File, AppName, OB, OV, OW, State),
- do_add_modules(Files, AppName, OB, OV, OW, NewState, M ++ Modules).
+add_mods(Files, ReaderFun, State, Modules, N, Nx) ->
+ {I, Nx1} = case Nx > 0 of
+ false -> {1, Nx};
+ true -> {2, Nx - 1}
+ end,
+ Files1 = start_readers(Files, ReaderFun, State, I),
+ {ok, M, NewState} = process_module(State),
+ add_mods(Files1, ReaderFun, NewState, M ++ Modules, N - 1, Nx1).
+
+start_readers([SplitName|Files], ReaderFun, State, N) when N > 0 ->
+ _Pid = ReaderFun(SplitName, State),
+ start_readers(Files, ReaderFun, State, N - 1);
+start_readers(Files, _ReaderFun, _State, _) ->
+ Files.
+
+parallelism() ->
+ case erlang:system_info(multi_scheduling) of
+ enabled -> erlang:system_info(schedulers_online);
+ _ -> 1
+ end.
%% -> {ok, Module, State} | throw(Error)
do_add_a_module(File, AppName, Builtins, Verbose, Warnings, State) ->
@@ -692,50 +721,75 @@ do_add_a_module(File, AppName, Builtins, Verbose, Warnings, State) ->
%% -> {ok, Module, State} | throw(Error)
%% Options: verbose, warnings, builtins
-do_add_module({Dir, Basename}, AppName, Builtins, Verbose, Warnings, State) ->
- File = filename:join(Dir, Basename),
- {ok, M, Bad, NewState} =
- do_add_module1(Dir, File, AppName, Builtins, Verbose, Warnings, State),
- filter(fun({Tag,B}) -> warnings(Warnings, Tag, [[File,B]]) end, Bad),
- {ok, M, NewState}.
-
-do_add_module1(Dir, File, AppName, Builtins, Verbose, Warnings, State) ->
- message(Verbose, reading_beam, [File]),
- Mode = State#xref.mode,
+do_add_module(SplitName, AppName, Builtins, Verbose, Warnings, State) ->
+ _Pid = read_module(SplitName, AppName, Builtins, Verbose, Warnings, State),
+ process_module(State).
+
+read_module(SplitName, AppName, Builtins, Verbose, Warnings, State) ->
Me = self(),
- Fun = fun() -> Me ! {self(), abst(File, Builtins, Mode)} end,
- case xref_utils:subprocess(Fun, [link, {min_heap_size,100000}]) of
+ #xref{mode = Mode} = State,
+ Fun =
+ fun() ->
+ Me ! {?MODULE,
+ read_a_module(SplitName, AppName, Builtins, Verbose,
+ Warnings, Mode)}
+ end,
+ spawn_opt(Fun, [link, {min_heap_size, 1000000}, {priority, high}]).
+
+read_a_module({Dir, BaseName}, AppName, Builtins, Verbose, Warnings, Mode) ->
+ File = filename:join(Dir, BaseName),
+ case abst(File, Builtins, Mode) of
{ok, _M, no_abstract_code} when Verbose ->
- message(Verbose, skipped_beam, []),
- {ok, [], [], State};
+ message(Verbose, no_debug_info, [File]),
+ no;
{ok, _M, no_abstract_code} when not Verbose ->
message(Warnings, no_debug_info, [File]),
- {ok, [], [], State};
+ no;
{ok, M, Data, UnresCalls0} ->
- %% Remove duplicates. Identical unresolved calls on the
- %% same line are counted as _one_ unresolved call.
- UnresCalls = usort(UnresCalls0),
- message(Verbose, done, []),
- NoUnresCalls = length(UnresCalls),
- case NoUnresCalls of
- 0 -> ok;
- 1 -> warnings(Warnings, unresolved_summary1, [[M]]);
- N -> warnings(Warnings, unresolved_summary, [[M, N]])
- end,
- T = case xref_utils:file_info(File) of
- {ok, {_, _, _, Time}} -> Time;
- Error -> throw(Error)
- end,
- XMod = #xref_mod{name = M, app_name = AppName, dir = Dir,
- mtime = T, builtins = Builtins,
- no_unresolved = NoUnresCalls},
- do_add_module(State, XMod, UnresCalls, Data);
+ message(Verbose, done_file, [File]),
+ %% Remove duplicates. Identical unresolved calls on the
+ %% same line are counted as _one_ unresolved call.
+ UnresCalls = usort(UnresCalls0),
+ NoUnresCalls = length(UnresCalls),
+ case NoUnresCalls of
+ 0 -> ok;
+ 1 -> warnings(Warnings, unresolved_summary1, [[M]]);
+ N -> warnings(Warnings, unresolved_summary, [[M, N]])
+ end,
+ case xref_utils:file_info(File) of
+ {ok, {_, _, _, Time}} ->
+ XMod = #xref_mod{name = M, app_name = AppName,
+ dir = Dir, mtime = Time,
+ builtins = Builtins,
+ no_unresolved = NoUnresCalls},
+ {ok, PrepMod, Bad} =
+ prepare_module(Mode, XMod, UnresCalls, Data),
+ foreach(fun({Tag,B}) ->
+ warnings(Warnings, Tag,
+ [[File,B]])
+ end, Bad),
+ {ok, PrepMod};
+ Error -> Error
+ end;
Error ->
message(Verbose, error, []),
- throw(Error)
+ Error
end.
-abst(File, Builtins, Mode) when Mode =:= functions ->
+process_module(State) ->
+ receive
+ {?MODULE, Reply} ->
+ case Reply of
+ no ->
+ {ok, [], State};
+ {ok, PrepMod} ->
+ finish_module(PrepMod, State);
+ Error ->
+ throw(Error)
+ end
+ end.
+
+abst(File, Builtins, _Mode = functions) ->
case beam_lib:chunks(File, [abstract_code, exports, attributes]) of
{ok, {M,[{abstract_code,NoA},_X,_A]}} when NoA =:= no_abstract_code ->
{ok, M, NoA};
@@ -762,7 +816,7 @@ abst(File, Builtins, Mode) when Mode =:= functions ->
Error when element(1, Error) =:= error ->
Error
end;
-abst(File, Builtins, Mode) when Mode =:= modules ->
+abst(File, Builtins, _Mode = modules) ->
case beam_lib:chunks(File, [exports, imports, attributes]) of
{ok, {Mod, [{exports,X0}, {imports,I0}, {attributes,At}]}} ->
X1 = mfa_exports(X0, At, Mod),
@@ -856,19 +910,13 @@ deprecated_flag(_) -> undefined.
%% dom CallAt = LC U XC
%% Attrs is collected from the attribute 'xref' (experimental).
do_add_module(S, XMod, Unres, Data) ->
- M = XMod#xref_mod.name,
- case dict:find(M, S#xref.modules) of
- {ok, OldXMod} ->
- BF2 = module_file(XMod),
- BF1 = module_file(OldXMod),
- throw_error({module_clash, {M, BF1, BF2}});
- error ->
- do_add_module(S, M, XMod, Unres, Data)
- end.
+ #xref{mode = Mode} = S,
+ Mode = S#xref.mode,
+ {ok, PrepMod, Bad} = prepare_module(Mode, XMod, Unres, Data),
+ {ok, Ms, NS} = finish_module(PrepMod, S),
+ {ok, Ms, Bad, NS}.
-%%do_add_module(S, M, _XMod, _Unres, Data)->
-%% {ok, M, [], S};
-do_add_module(S, M, XMod, Unres0, Data) when S#xref.mode =:= functions ->
+prepare_module(_Mode = functions, XMod, Unres0, Data) ->
{DefAt0, LPreCAt0, XPreCAt0, LC0, XC0, X0, Attrs, Depr} = Data,
%% Bad is a list of bad values of 'xref' attributes.
{ALC0,AXC0,Bad0} = Attrs,
@@ -904,26 +952,27 @@ do_add_module(S, M, XMod, Unres0, Data) when S#xref.mode =:= functions ->
LC = union(LC1, ALC),
{DF1,DF_11,DF_21,DF_31,DBad} = depr_mod(Depr, X),
+ {EE, ECallAt} = inter_graph(X, L, LC, XC, CallAt),
+ {ok, {functions, XMod, [DefAt,L,X,LCallAt,XCallAt,CallAt,LC,XC,EE,ECallAt,
+ DF1,DF_11,DF_21,DF_31], NoCalls, Unres},
+ DBad++Bad};
+prepare_module(_Mode = modules, XMod, _Unres, Data) ->
+ {X0, I0, Depr} = Data,
+ X1 = xref_utils:xset(X0, [tspec(func)]),
+ I1 = xref_utils:xset(I0, [tspec(func)]),
+ {DF1,DF_11,DF_21,DF_31,DBad} = depr_mod(Depr, X1),
+ {ok, {modules, XMod, [X1,I1,DF1,DF_11,DF_21,DF_31]}, DBad}.
- %% {EE, ECallAt} = inter_graph(X, L, LC, XC, LCallAt, XCallAt),
- Self = self(),
- Fun = fun() -> inter_graph(Self, X, L, LC, XC, CallAt) end,
- {EE, ECallAt} =
- xref_utils:subprocess(Fun, [link, {min_heap_size,100000}]),
-
+finish_module({functions, XMod, List, NoCalls, Unres}, S) ->
+ ok = check_module(XMod, S),
[DefAt2,L2,X2,LCallAt2,XCallAt2,CallAt2,LC2,XC2,EE2,ECallAt2,
- DF2,DF_12,DF_22,DF_32] =
- pack([DefAt,L,X,LCallAt,XCallAt,CallAt,LC,XC,EE,ECallAt,
- DF1,DF_11,DF_21,DF_31]),
-
- %% Foo = [DefAt2,L2,X2,LCallAt2,XCallAt2,CallAt2,LC2,XC2,EE2,ECallAt2,
- %% DF2,DF_12,DF_22,DF_32],
- %% io:format("{~p, ~p, ~p},~n", [M, pack:lsize(Foo), pack:usize(Foo)]),
+ DF2,DF_12,DF_22,DF_32] = pack(List),
LU = range(LC2),
LPredefined = predefined_funs(LU),
+ M = XMod#xref_mod.name,
MS = xref_utils:xset(M, atom),
T = from_sets({MS,DefAt2,L2,X2,LCallAt2,XCallAt2,CallAt2,
LC2,XC2,LU,EE2,ECallAt2,Unres,LPredefined,
@@ -934,19 +983,28 @@ do_add_module(S, M, XMod, Unres0, Data) when S#xref.mode =:= functions ->
XMod1 = XMod#xref_mod{data = T, info = Info},
S1 = S#xref{modules = dict:store(M, XMod1, S#xref.modules)},
- {ok, [M], DBad++Bad, take_down(S1)};
-do_add_module(S, M, XMod, _Unres, Data) when S#xref.mode =:= modules ->
- {X0, I0, Depr} = Data,
- X1 = xref_utils:xset(X0, [tspec(func)]),
- I1 = xref_utils:xset(I0, [tspec(func)]),
- {DF1,DF_11,DF_21,DF_31,DBad} = depr_mod(Depr, X1),
- [X2,I2,DF2,DF_12,DF_22,DF_32] = pack([X1,I1,DF1,DF_11,DF_21,DF_31]),
+ {ok, [M], take_down(S1)};
+finish_module({modules, XMod, List}, S) ->
+ ok = check_module(XMod, S),
+ [X2,I2,DF2,DF_12,DF_22,DF_32] = pack(List),
+ M = XMod#xref_mod.name,
MS = xref_utils:xset(M, atom),
T = from_sets({MS, X2, I2, DF2, DF_12, DF_22, DF_32}),
Info = [],
XMod1 = XMod#xref_mod{data = T, info = Info},
S1 = S#xref{modules = dict:store(M, XMod1, S#xref.modules)},
- {ok, [M], DBad, take_down(S1)}.
+ {ok, [M], take_down(S1)}.
+
+check_module(XMod, State) ->
+ M = XMod#xref_mod.name,
+ case dict:find(M, State#xref.modules) of
+ {ok, OldXMod} ->
+ BF2 = module_file(XMod),
+ BF1 = module_file(OldXMod),
+ throw_error({module_clash, {M, BF1, BF2}});
+ error ->
+ ok
+ end.
depr_mod({Depr,Bad0}, X) ->
%% Bad0 are badly formed deprecated attributes.
@@ -992,9 +1050,6 @@ no_info(X, L, LC, XC, EE, Unres, NoCalls, NoUnresCalls) ->
%% Note: this is overwritten in do_set_up():
{no_inter_function_calls, no_elements(EE)}].
-inter_graph(Pid, X, L, LC, XC, CallAt) ->
- Pid ! {self(), inter_graph(X, L, LC, XC, CallAt)}.
-
%% Inter Call Graph.
%inter_graph(_X, _L, _LC, _XC, _CallAt) ->
% {empty_set(), empty_set()};
@@ -1727,7 +1782,7 @@ pack(T) ->
NT = pack1(T),
%% true = T =:= NT,
%% io:format("erasing ~p elements...~n", [length(erase())]),
- erase(), % wasting heap (and time)...
+ _ = erase(), % wasting heap (and time)...
foreach(fun({K,V}) -> put(K, V) end, PD),
NT.
@@ -1766,10 +1821,6 @@ tpack(T, I, L) ->
message(true, What, Arg) ->
case What of
- reading_beam ->
- io:format("~ts... ", Arg);
- skipped_beam ->
- io:format("skipped (no debug information)~n", Arg);
no_debug_info ->
io:format("Skipping ~ts (no debug information)~n", Arg);
unresolved_summary1 ->
@@ -1792,6 +1843,8 @@ message(true, What, Arg) ->
io:format("Setting up...", Arg);
done ->
io:format("done~n", Arg);
+ done_file ->
+ io:format("done reading ~ts~n", Arg);
error ->
io:format("error~n", Arg);
Else ->
diff --git a/lib/tools/src/xref_parser.yrl b/lib/tools/src/xref_parser.yrl
index 48602bb120..0711da79e2 100644
--- a/lib/tools/src/xref_parser.yrl
+++ b/lib/tools/src/xref_parser.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/tools/src/xref_utils.erl b/lib/tools/src/xref_utils.erl
index f69aa70244..b0c168e018 100644
--- a/lib/tools/src/xref_utils.erl
+++ b/lib/tools/src/xref_utils.erl
@@ -47,8 +47,6 @@
-export([options/2]).
--export([subprocess/2]).
-
-export([format_error/1]).
-import(lists, [append/1, delete/2, filter/2, foldl/3, foreach/2,
@@ -512,12 +510,6 @@ find_beam(Culprit) ->
options(Options, Valid) ->
split_options(Options, [], [], [], Valid).
-subprocess(Fun, Opts) ->
- Pid = spawn_opt(Fun, Opts),
- receive
- {Pid, Reply} -> Reply
- end.
-
format_error({error, Module, Error}) ->
Module:format_error(Error);
format_error({file_error, FileName, Reason}) ->
diff --git a/lib/tools/test/Makefile b/lib/tools/test/Makefile
index 49b86628b7..84c4e56aff 100644
--- a/lib/tools/test/Makefile
+++ b/lib/tools/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -53,8 +53,7 @@ RELSYSDIR = $(RELEASE_PATH)/tools_test
# FLAGS
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include \
- -I$(ERL_TOP)/lib/percept/include
+ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/percept/include
EBIN = .
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl
index 71570a55fa..b4c9264b30 100644
--- a/lib/tools/test/cover_SUITE.erl
+++ b/lib/tools/test/cover_SUITE.erl
@@ -21,53 +21,45 @@
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
NoStartStop = [eif,otp_5305,otp_5418,otp_7095,otp_8273,
otp_8340,otp_8188,compile_beam_opts,eep37,
- analyse_no_beam, line_0, compile_beam_no_file,
- otp_13277],
+ analyse_no_beam, line_0, compile_beam_no_file,
+ otp_13277, otp_13289],
StartStop = [start, compile, analyse, misc, stop,
- distribution, reconnect, die_and_reconnect,
- dont_reconnect_after_stop, stop_node_after_disconnect,
- export_import, otp_5031, otp_6115,
- otp_8270, otp_10979_hanging_node],
+ distribution, reconnect, die_and_reconnect,
+ dont_reconnect_after_stop, stop_node_after_disconnect,
+ export_import, otp_5031, otp_6115,
+ otp_8270, otp_10979_hanging_node],
case whereis(cover_server) of
- undefined ->
- [coverage,StartStop ++ NoStartStop];
- _pid ->
- [coverage|NoStartStop++[coverage_analysis]]
+ undefined ->
+ [coverage,StartStop ++ NoStartStop];
+ _pid ->
+ [coverage|NoStartStop++[coverage_analysis]]
end.
-groups() ->
- [].
-
init_per_suite(Config) ->
[{ct_is_running_cover,whereis(cover_server) =/= undefined}|Config].
end_per_suite(_Config) ->
ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
init_per_testcase(TC, Config) when TC =:= misc;
- TC =:= compile;
- TC =:= analyse;
- TC =:= distribution;
- TC =:= otp_5031;
- TC =:= stop ->
+ TC =:= compile;
+ TC =:= analyse;
+ TC =:= distribution;
+ TC =:= otp_5031;
+ TC =:= stop ->
case code:which(crypto) of
- Path when is_list(Path) ->
- init_per_testcase(dummy_tc, Config);
- _Else ->
- {skip, "No crypto file to test with"}
+ Path when is_list(Path) ->
+ init_per_testcase(dummy_tc, Config);
+ _Else ->
+ {skip, "No crypto file to test with"}
end;
init_per_testcase(_TestCase, Config) ->
Config.
@@ -75,10 +67,10 @@ init_per_testcase(_TestCase, Config) ->
end_per_testcase(TestCase, Config) ->
NoStop = [start,compile,analyse,misc],
DontStop = proplists:get_bool(ct_is_running_cover, Config) orelse
- lists:member(TestCase, NoStop),
+ lists:member(TestCase, NoStop),
case DontStop of
- true -> ok;
- false -> cover:stop()
+ true -> ok;
+ false -> cover:stop()
end,
ok.
@@ -87,7 +79,7 @@ coverage(Config) when is_list(Config) ->
?MODULE:do_coverage(Config).
do_coverage(Config) ->
- Outdir = ?config(priv_dir, Config),
+ Outdir = proplists:get_value(priv_dir, Config),
ExportFile = filename:join(Outdir, "export"),
ok = cover:export(ExportFile, ?MODULE),
{error,{already_started,_}} = cover:start(),
@@ -100,16 +92,16 @@ do_coverage(Config) ->
%% Cover escaping of '&' in HTML files.
case proplists:get_bool(ct_is_running_cover, Config) of
- false ->
- %% Cover server was implicitly started when this module
- %% was cover-compiled. We must stop the cover server, but
- %% we must ensure that this module is not on the call
- %% stack when it is unloaded. Therefore, the call that
- %% follows MUST be tail-recursive.
- cover:stop();
- true ->
- %% Cover server was started by common_test; don't stop it.
- ok
+ false ->
+ %% Cover server was implicitly started when this module
+ %% was cover-compiled. We must stop the cover server, but
+ %% we must ensure that this module is not on the call
+ %% stack when it is unloaded. Therefore, the call that
+ %% follows MUST be tail-recursive.
+ cover:stop();
+ true ->
+ %% Cover server was started by common_test; don't stop it.
+ ok
end.
%% This test case will only be run when common_test is running cover.
@@ -120,7 +112,7 @@ coverage_analysis(Config) when is_list(Config) ->
io:format("~p\n", [Analysis2]),
{ok,_Analysis3} = cover:analyze(?MODULE, calls, line),
- Outdir = ?config(priv_dir, Config),
+ Outdir = proplists:get_value(priv_dir, Config),
Outfile = filename:join(Outdir, ?MODULE),
{ok,Outfile} = cover:analyze_to_file(?MODULE, Outfile),
@@ -130,92 +122,90 @@ coverage_analysis(Config) when is_list(Config) ->
{ok,Outfile} = cover:analyze_to_file(?MODULE, Outfile, [html]),
ok.
-start(suite) -> [];
start(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(data_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
- ?line Files = lsfiles(),
- ?line remove(files(Files, ".out")),
+ Files = lsfiles(),
+ remove(files(Files, ".out")),
- ?line {ok, Pid} = cover:start(),
- ?line {error, {already_started, Pid}} = cover:start().
+ {ok, Pid} = cover:start(),
+ {error, {already_started, Pid}} = cover:start().
-compile(suite) -> [];
compile(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(data_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
- ?line Result1 = cover:compile_directory(),
- ?line SortedResult = lists:sort(Result1),
- ?line {ok, CWD} = file:get_cwd(),
- ?line Result2 = cover:compile_directory(CWD),
- ?line SortedResult = lists:sort(Result2),
- ?line [{error,DFile},{ok,a},{ok,b},{ok,cc},{ok,f}] = SortedResult,
- ?line [{ok,e}] = cover:compile_directory("d1"),
- ?line {error,enoent} = cover:compile_directory("d2"),
+ Result1 = cover:compile_directory(),
+ SortedResult = lists:sort(Result1),
+ {ok, CWD} = file:get_cwd(),
+ Result2 = cover:compile_directory(CWD),
+ SortedResult = lists:sort(Result2),
+ [{error,DFile},{ok,a},{ok,b},{ok,cc},{ok,f}] = SortedResult,
+ [{ok,e}] = cover:compile_directory("d1"),
+ {error,enoent} = cover:compile_directory("d2"),
[] = cover:compile([]),
Result21 = cover:compile([a,b,"cc.erl",d,"f"]),
SortedResult21 = lists:sort(Result21),
[{error,DFile},{ok,a},{ok,b},{ok,cc},{ok,f}] = SortedResult21,
- ?line {ok,a} = cover:compile(a),
- ?line {ok,b} = compile:file(b),
- ?line code:purge(b),
- ?line {module,b} = code:load_file(b),
- ?line {ok,d} = cover:compile("d.erl", [{d,'AGE',42}]),
- ?line {error,_BBFile} = cover:compile(bb),
+ {ok,a} = cover:compile(a),
+ {ok,b} = compile:file(b),
+ code:purge(b),
+ {module,b} = code:load_file(b),
+ {ok,d} = cover:compile("d.erl", [{d,'AGE',42}]),
+ {error,_BBFile} = cover:compile(bb),
- ?line StdlibDir = code:lib_dir(stdlib),
- ?line Lists = filename:join([StdlibDir, "src", "lists.erl"]),
- ?line {error, Lists} = cover:compile(Lists),
+ StdlibDir = code:lib_dir(stdlib),
+ Lists = filename:join([StdlibDir, "src", "lists.erl"]),
+ {error, Lists} = cover:compile(Lists),
%% For compiling beam: using dummy files v,w,x,y and z
- ?line file:set_cwd("compile_beam"),
- ?line {ok,_} = compile:file(v,[debug_info,report]),
- ?line {ok,_} = compile:file(w,[debug_info,report]),
- ?line {ok,_} = compile:file(x),
- ?line {ok,_} = compile:file("d/y",[debug_info,{outdir,"d"},report]),
- ?line Key = "A Krypto Key",
+ file:set_cwd("compile_beam"),
+ {ok,_} = compile:file(v,[debug_info,report]),
+ {ok,_} = compile:file(w,[debug_info,report]),
+ {ok,_} = compile:file(x),
+ {ok,_} = compile:file("d/y",[debug_info,{outdir,"d"},report]),
+ Key = "A Krypto Key",
CryptoWorks = crypto_works(),
case CryptoWorks of
- false ->
- {ok,_} = compile:file(crypt, [debug_info,report]),
- {ok,crypt} = cover:compile_beam("crypt.beam");
- true ->
- {ok,_} = compile:file(crypt, [{debug_info_key,Key},report]),
- {error,{encrypted_abstract_code,_}} =
- cover:compile_beam("crypt.beam"),
- ok = beam_lib:crypto_key_fun(simple_crypto_fun(Key)),
- {ok,crypt} = cover:compile_beam("crypt.beam")
+ false ->
+ {ok,_} = compile:file(crypt, [debug_info,report]),
+ {ok,crypt} = cover:compile_beam("crypt.beam");
+ true ->
+ {ok,_} = compile:file(crypt, [{debug_info_key,Key},report]),
+ {error,{encrypted_abstract_code,_}} =
+ cover:compile_beam("crypt.beam"),
+ ok = beam_lib:crypto_key_fun(simple_crypto_fun(Key)),
+ {ok,crypt} = cover:compile_beam("crypt.beam")
end,
- Path = filename:join([?config(data_dir, Config), "compile_beam", "v.erl"]),
- ?line {ok,v} = cover:compile_beam(v),
+ Path = filename:join([proplists:get_value(data_dir, Config), "compile_beam", "v.erl"]),
+ {ok,v} = cover:compile_beam(v),
{source,Path} = lists:keyfind(source, 1, v:module_info(compile)),
- ?line {ok,w} = cover:compile_beam("w.beam"),
- ?line {error,{no_abstract_code,"./x.beam"}} = cover:compile_beam(x),
- ?line {error,{already_cover_compiled,no_beam_found,a}}=cover:compile_beam(a),
- ?line {error,non_existing} = cover:compile_beam(z),
- ?line [{ok,y}] = cover:compile_beam_directory("d"),
- ?line Result3 = lists:sort(cover:compile_beam_directory()),
- ?line [{error,{no_abstract_code,XBeam}},{ok,crypt},{ok,v},{ok,w}] = Result3,
- ?line {error,enoent} = cover:compile_beam_directory("d2"),
+ {ok,w} = cover:compile_beam("w.beam"),
+ {error,{no_abstract_code,"./x.beam"}} = cover:compile_beam(x),
+ {error,{already_cover_compiled,no_beam_found,a}}=cover:compile_beam(a),
+ {error,non_existing} = cover:compile_beam(z),
+ [{ok,y}] = cover:compile_beam_directory("d"),
+ Result3 = lists:sort(cover:compile_beam_directory()),
+ [{error,{no_abstract_code,XBeam}},{ok,crypt},{ok,v},{ok,w}] = Result3,
+ {error,enoent} = cover:compile_beam_directory("d2"),
[] = cover:compile_beam([]),
Result31 = cover:compile_beam([crypt,"v.beam",w,"x"]),
SortedResult31 = lists:sort(Result31),
[{error,{no_abstract_code,XBeam}},{ok,crypt},{ok,v},{ok,w}] = SortedResult31,
- ?line decompile([v,w,y]),
- ?line Files = lsfiles(),
- ?line remove(files(Files, ".beam")).
+ decompile([v,w,y]),
+ Files = lsfiles(),
+ remove(files(Files, ".beam")).
crypto_works() ->
try crypto:start() of
- {error,{already_started,crypto}} -> true;
- ok -> true
+ {error,{already_started,crypto}} -> true;
+ ok -> true
catch
- error:_ ->
- false
+ error:_ ->
+ false
end.
simple_crypto_fun(Key) ->
@@ -223,90 +213,89 @@ simple_crypto_fun(Key) ->
({debug_info, des3_cbc, crypt, _}) -> Key
end.
-analyse(suite) -> [];
analyse(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(data_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
- ?line done = a:start(5),
+ done = a:start(5),
{ok, {a,{17,2}}=ACovMod} = cover:analyse(a, coverage, module),
{ok, [{{a,exit_kalle,0},{1,0}},
- {{a,loop,3},{5,1}},
- {{a,pong,1},{1,0}},
- {{a,start,1},{6,0}},
- {{a,stop,1},{0,1}},
- {{a,trycatch,1},{4,0}}]=ACovFunc} =
- cover:analyse(a, coverage, function),
+ {{a,loop,3},{5,1}},
+ {{a,pong,1},{1,0}},
+ {{a,start,1},{6,0}},
+ {{a,stop,1},{0,1}},
+ {{a,trycatch,1},{4,0}}]=ACovFunc} =
+ cover:analyse(a, coverage, function),
{ok, [{{a,exit_kalle,0,1},{1,0}},
- {{a,loop,3,1},{3,1}},
- {{a,loop,3,2},{2,0}},
- {{a,pong,1,1},{1,0}},
- {{a,start,1,1},{6,0}},
- {{a,stop,1,1},{0,1}},
- {{a,trycatch,1,1},{4,0}}]=ACovClause} =
- cover:analyse(a, coverage, clause),
- ?line {ok, [{{a,9},{1,0}},
- {{a,10},{1,0}},
- {{a,11},{1,0}},
- {{a,13},{1,0}},
- {{a,14},{1,0}},
- {{a,15},{1,0}},
- {{a,21},{0,1}},
- {{a,26},{1,0}},
- {{a,31},{1,0}},
- {{a,32},{1,0}},
- {{a,34},{1,0}},
- {{a,36},{0,1}},
- {{a,39},{1,0}},
- {{a,40},{1,0}},
- {{a,44},{1,0}},
- {{a,47},{1,0}},
- {{a,49},{1,0}},
- {{a,51},{1,0}},
- {{a,55},{1,0}}]=ACovLine} = cover:analyse(a, coverage, line),
+ {{a,loop,3,1},{3,1}},
+ {{a,loop,3,2},{2,0}},
+ {{a,pong,1,1},{1,0}},
+ {{a,start,1,1},{6,0}},
+ {{a,stop,1,1},{0,1}},
+ {{a,trycatch,1,1},{4,0}}]=ACovClause} =
+ cover:analyse(a, coverage, clause),
+ {ok, [{{a,9},{1,0}},
+ {{a,10},{1,0}},
+ {{a,11},{1,0}},
+ {{a,13},{1,0}},
+ {{a,14},{1,0}},
+ {{a,15},{1,0}},
+ {{a,21},{0,1}},
+ {{a,26},{1,0}},
+ {{a,31},{1,0}},
+ {{a,32},{1,0}},
+ {{a,34},{1,0}},
+ {{a,36},{0,1}},
+ {{a,39},{1,0}},
+ {{a,40},{1,0}},
+ {{a,44},{1,0}},
+ {{a,47},{1,0}},
+ {{a,49},{1,0}},
+ {{a,51},{1,0}},
+ {{a,55},{1,0}}]=ACovLine} = cover:analyse(a, coverage, line),
{ok, {a,15}=ACallsMod} = cover:analyse(a, calls, module),
{ok, [{{a,exit_kalle,0},1},
- {{a,loop,3},6},
- {{a,pong,1},5},
- {{a,start,1},1},
- {{a,stop,1},0},
- {{a,trycatch,1},2}]=ACallsFunc} = cover:analyse(a, calls, function),
+ {{a,loop,3},6},
+ {{a,pong,1},5},
+ {{a,start,1},1},
+ {{a,stop,1},0},
+ {{a,trycatch,1},2}]=ACallsFunc} = cover:analyse(a, calls, function),
{ok, [{{a,exit_kalle,0,1},1},
- {{a,loop,3,1},5},
- {{a,loop,3,2},1},
- {{a,pong,1,1},5},
- {{a,start,1,1},1},
- {{a,stop,1,1},0},
- {{a,trycatch,1,1},2}]=ACallsClause} = cover:analyse(a, calls, clause),
- ?line {ok, [{{a,9},1},
- {{a,10},1},
- {{a,11},1},
- {{a,13},1},
- {{a,14},1},
- {{a,15},1},
- {{a,21},0},
- {{a,26},5},
- {{a,31},5},
- {{a,32},5},
- {{a,34},5},
- {{a,36},0},
- {{a,39},1},
- {{a,40},1},
- {{a,44},2},
- {{a,47},1},
- {{a,49},1},
- {{a,51},2},
- {{a,55},1}]=ACallsLine} = cover:analyse(a, calls, line),
+ {{a,loop,3,1},5},
+ {{a,loop,3,2},1},
+ {{a,pong,1,1},5},
+ {{a,start,1,1},1},
+ {{a,stop,1,1},0},
+ {{a,trycatch,1,1},2}]=ACallsClause} = cover:analyse(a, calls, clause),
+ {ok, [{{a,9},1},
+ {{a,10},1},
+ {{a,11},1},
+ {{a,13},1},
+ {{a,14},1},
+ {{a,15},1},
+ {{a,21},0},
+ {{a,26},5},
+ {{a,31},5},
+ {{a,32},5},
+ {{a,34},5},
+ {{a,36},0},
+ {{a,39},1},
+ {{a,40},1},
+ {{a,44},2},
+ {{a,47},1},
+ {{a,49},1},
+ {{a,51},2},
+ {{a,55},1}]=ACallsLine} = cover:analyse(a, calls, line),
{ok,ACovFunc} = cover:analyse(a),
{ok,ACovMod} = cover:analyse(a, module),
{ok,ACallsFunc} = cover:analyse(a, calls),
- ?line {ok, "a.COVER.out"} = cover:analyse_to_file(a),
- ?line {ok, "e.COVER.out"} = cover:analyse_to_file(e),
- ?line {ok, "a.COVER.html"} = cover:analyse_to_file(a,[html]),
- ?line {ok, "e.COVER.html"} = cover:analyse_to_file(e,[html]),
+ {ok, "a.COVER.out"} = cover:analyse_to_file(a),
+ {ok, "e.COVER.out"} = cover:analyse_to_file(e),
+ {ok, "a.COVER.html"} = cover:analyse_to_file(a,[html]),
+ {ok, "e.COVER.html"} = cover:analyse_to_file(e,[html]),
%% Analyse all modules
Modules = cover:modules(),
@@ -355,7 +344,7 @@ analyse(Config) when is_list(Config) ->
{result,CovClause1,[]} = cover:analyse(Modules,coverage,clause),
true = lists:sort(CovClause) == lists:sort(CovClause1),
-
+
{result,CovLine1,[]} = cover:analyse(Modules,coverage,line),
true = lists:sort(CovLine) == lists:sort(CovLine1),
@@ -377,18 +366,18 @@ analyse(Config) when is_list(Config) ->
true = lists:sort(AllToFileHtml) == lists:sort(AllToFileHtml1),
%% analyse_to_file of file which is compiled from beam
- ?line {ok,f} = compile:file(f,[debug_info]),
- ?line code:purge(f),
- ?line {module,f} = code:load_file(f),
- ?line {ok,f} = cover:compile_beam(f),
- ?line f:f2(),
- ?line {ok, "f.COVER.out"} = cover:analyse_to_file(f),
+ {ok,f} = compile:file(f,[debug_info]),
+ code:purge(f),
+ {module,f} = code:load_file(f),
+ {ok,f} = cover:compile_beam(f),
+ f:f2(),
+ {ok, "f.COVER.out"} = cover:analyse_to_file(f),
%% Source code can be found via source
- ?line {ok,v} = compile:file("compile_beam/v",[debug_info]),
- ?line code:purge(v),
- ?line {module,v} = code:load_file(v),
- ?line {ok,v} = cover:compile_beam(v),
+ {ok,v} = compile:file("compile_beam/v",[debug_info]),
+ code:purge(v),
+ {module,v} = code:load_file(v),
+ {ok,v} = cover:compile_beam(v),
{ok,"v.COVER.out"} = cover:analyse_to_file(v),
%% Source code cannot be found
@@ -403,163 +392,161 @@ analyse(Config) when is_list(Config) ->
code:purge(z),
code:delete(z),
- ?line {error,{not_cover_compiled,b}} = cover:analyse(b),
- ?line {error,{not_cover_compiled,g}} = cover:analyse(g),
+ {error,{not_cover_compiled,b}} = cover:analyse(b),
+ {error,{not_cover_compiled,g}} = cover:analyse(g),
{result,[],[{not_cover_compiled,b}]} = cover:analyse([b]),
- ?line {error,{not_cover_compiled,b}} = cover:analyse_to_file(b),
+ {error,{not_cover_compiled,b}} = cover:analyse_to_file(b),
{error,{not_cover_compiled,g}} = cover:analyse_to_file(g),
{result,[],[{not_cover_compiled,g}]} = cover:analyse_to_file([g]).
-misc(suite) -> [];
misc(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(data_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
- ?line [a,cc,crypt,d,e,f,v] = lists:sort(cover:modules()),
+ [a,cc,crypt,d,e,f,v] = lists:sort(cover:modules()),
- ?line {ok,cc} = compile:file(cc),
- ?line code:purge(cc),
- ?line {module,cc} = code:load_file(cc),
- ?line [a,crypt,d,e,f,v] = lists:sort(cover:modules()),
+ {ok,cc} = compile:file(cc),
+ code:purge(cc),
+ {module,cc} = code:load_file(cc),
+ [a,crypt,d,e,f,v] = lists:sort(cover:modules()),
- ?line {file, _File} = cover:is_compiled(a),
- ?line false = cover:is_compiled(b),
- ?line false = cover:is_compiled(g),
+ {file, _File} = cover:is_compiled(a),
+ false = cover:is_compiled(b),
+ false = cover:is_compiled(g),
- ?line ok = cover:reset(a),
- ?line {ok, {a,{0,19}}} = cover:analyse(a, module),
- ?line ok = cover:reset().
+ ok = cover:reset(a),
+ {ok, {a,{0,19}}} = cover:analyse(a, module),
+ ok = cover:reset().
-stop(suite) -> [];
stop(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(data_dir, Config)),
-
- ?line cover_compiled = code:which(a),
- ?line {ok,d} = compile:file(d, [{d,'AGE',42}]),
- ?line code:purge(d),
- ?line {module,d} = code:load_file(d),
- ?line ok = cover:stop(),
- ?line Beam = code:which(a),
- ?line true = is_unloaded(Beam),
-
- ?line Files = lsfiles(),
- ?line remove(files(Files, ".out")),
- ?line remove(files(Files, ".html")),
- ?line remove(files(Files, ".beam")).
-
-distribution(suite) -> [];
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
+
+ cover_compiled = code:which(a),
+ {ok,d} = compile:file(d, [{d,'AGE',42}]),
+ code:purge(d),
+ {module,d} = code:load_file(d),
+ ok = cover:stop(),
+ Beam = code:which(a),
+ true = is_unloaded(Beam),
+
+ Files = lsfiles(),
+ remove(files(Files, ".out")),
+ remove(files(Files, ".html")),
+ remove(files(Files, ".beam")).
+
distribution(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line ok = file:set_cwd(DataDir),
+ DataDir = proplists:get_value(data_dir, Config),
+ ok = file:set_cwd(DataDir),
- ?line {ok,N1} = ?t:start_node(cover_SUITE_distribution1,slave,[]),
- ?line {ok,N2} = ?t:start_node(cover_SUITE_distribution2,slave,[]),
- ?line {ok,N3} = ?t:start_node(cover_SUITE_distribution3,slave,[]),
- ?line {ok,N4} = ?t:start_node(cover_SUITE_distribution4,slave,[]),
+ {ok,N1} = test_server:start_node(cover_SUITE_distribution1,slave,[]),
+ {ok,N2} = test_server:start_node(cover_SUITE_distribution2,slave,[]),
+ {ok,N3} = test_server:start_node(cover_SUITE_distribution3,slave,[]),
+ {ok,N4} = test_server:start_node(cover_SUITE_distribution4,slave,[]),
%% Check that an already compiled module is loaded on new nodes
- ?line {ok,f} = cover:compile(f),
- ?line {ok,[_,_,_,_]} = cover:start(nodes()),
- ?line cover_compiled = code:which(f),
- ?line cover_compiled = rpc:call(N1,code,which,[f]),
- ?line cover_compiled = rpc:call(N2,code,which,[f]),
- ?line cover_compiled = rpc:call(N3,code,which,[f]),
- ?line cover_compiled = rpc:call(N4,code,which,[f]),
+ {ok,f} = cover:compile(f),
+ {ok,[_,_,_,_]} = cover:start(nodes()),
+ cover_compiled = code:which(f),
+ cover_compiled = rpc:call(N1,code,which,[f]),
+ cover_compiled = rpc:call(N2,code,which,[f]),
+ cover_compiled = rpc:call(N3,code,which,[f]),
+ cover_compiled = rpc:call(N4,code,which,[f]),
%% Check that a node cannot be started twice
- ?line {ok,[]} = cover:start(N2),
+ {ok,[]} = cover:start(N2),
%% Check that the current node (i.e. the main node) is not started with
%% start/1 and not stopped with stop/1
- ?line {ok,[]} = cover:start(node()),
- ?line ok = cover:stop(node()),
- ?line true = is_pid(whereis(cover_server)),
+ {ok,[]} = cover:start(node()),
+ ok = cover:stop(node()),
+ true = is_pid(whereis(cover_server)),
%% Check that a new compiled module is loaded on all existing nodes
- ?line compile:file("compile_beam/v",[debug_info]),
- ?line {ok,v} = cover:compile_beam(v),
- ?line cover_compiled = code:which(v),
- ?line cover_compiled = rpc:call(N1,code,which,[v]),
- ?line cover_compiled = rpc:call(N2,code,which,[v]),
- ?line cover_compiled = rpc:call(N3,code,which,[v]),
- ?line cover_compiled = rpc:call(N4,code,which,[v]),
-
+ compile:file("compile_beam/v",[debug_info]),
+ {ok,v} = cover:compile_beam(v),
+ cover_compiled = code:which(v),
+ cover_compiled = rpc:call(N1,code,which,[v]),
+ cover_compiled = rpc:call(N2,code,which,[v]),
+ cover_compiled = rpc:call(N3,code,which,[v]),
+ cover_compiled = rpc:call(N4,code,which,[v]),
+
%% this is lost when the node is killed
- ?line rpc:call(N3,f,f2,[]),
- ?line rpc:call(N3,erlang,halt,[]),
+ rpc:call(N3,f,f2,[]),
+ rpc:call(N3,erlang,halt,[]),
%% this should be visible in analyse
- ?line rpc:call(N1,f,f1,[]),
+ rpc:call(N1,f,f1,[]),
%% Check that data is collected from remote node when stopped
- ?line ok = cover:stop(N1),
- ?line N1Beam = rpc:call(N1,code,which,[f]),
- ?line true = is_unloaded(N1Beam),
- ?line check_f_calls(1,0),
+ ok = cover:stop(N1),
+ N1Beam = rpc:call(N1,code,which,[f]),
+ true = is_unloaded(N1Beam),
+ check_f_calls(1,0),
%% Call f:f1() again on another node and check that number of calls is
%% accumulated.
- ?line f:f1(),
- ?line check_f_calls(2,0),
-
+ f:f1(),
+ check_f_calls(2,0),
+
%% Check that reset works on all nodes
- ?line f:f1(),
- ?line rpc:call(N2,f,f1,[]),
- ?line ok = cover:reset(f),
- ?line check_f_calls(0,0),
-
+ f:f1(),
+ rpc:call(N2,f,f1,[]),
+ ok = cover:reset(f),
+ check_f_calls(0,0),
+
%% Check that data is collected from all nodes
- ?line rpc:call(N2,f,f1,[]),
- ?line f:f2(),
- ?line check_f_calls(1,1),
+ rpc:call(N2,f,f1,[]),
+ f:f2(),
+ check_f_calls(1,1),
%% Check that same data is not fetched again (i.e. that analyse does
%% reset on the remote node(s))
- ?line check_f_calls(1,1),
+ check_f_calls(1,1),
%% Another checn that data is not fetched twice, i.e. when flushed
%% then analyse should not add the same data again.
- ?line rpc:call(N4,f,f2,[]),
- ?line ok = cover:flush(N4),
- ?line check_f_calls(1,2),
+ rpc:call(N4,f,f2,[]),
+ ok = cover:flush(N4),
+ check_f_calls(1,2),
%% Check that flush collects data so calls are not lost if node is killed
- ?line rpc:call(N4,f,f2,[]),
- ?line ok = cover:flush(N4),
- ?line rpc:call(N4,erlang,halt,[]),
- ?line check_f_calls(1,3),
+ rpc:call(N4,f,f2,[]),
+ ok = cover:flush(N4),
+ rpc:call(N4,erlang,halt,[]),
+ check_f_calls(1,3),
%% Check that stop() unloads on all nodes
- ?line ok = cover:stop(),
- ?line timer:sleep(100), %% Give nodes time to unload on slow machines.
- ?line LocalBeam = code:which(f),
- ?line N2Beam = rpc:call(N2,code,which,[f]),
- ?line true = is_unloaded(LocalBeam),
- ?line true = is_unloaded(N2Beam),
+ ok = cover:stop(),
+ timer:sleep(100), %% Give nodes time to unload on slow machines.
+ LocalBeam = code:which(f),
+ N2Beam = rpc:call(N2,code,which,[f]),
+ true = is_unloaded(LocalBeam),
+ true = is_unloaded(N2Beam),
%% Check that cover_server on remote node does not die if main node dies
- ?line {ok,[N1]} = cover:start(N1),
- ?line true = is_pid(N1Server = rpc:call(N1,erlang,whereis,[cover_server])),
- ?line exit(whereis(cover_server),kill),
- ?line timer:sleep(100),
- ?line N1Server = rpc:call(N1,erlang,whereis,[cover_server]),
+ {ok,[N1]} = cover:start(N1),
+ true = is_pid(N1Server = rpc:call(N1,erlang,whereis,[cover_server])),
+ exit(whereis(cover_server),kill),
+ timer:sleep(100),
+ N1Server = rpc:call(N1,erlang,whereis,[cover_server]),
%% Cleanup
- ?line Files = lsfiles(),
- ?line remove(files(Files, ".beam")),
- ?line ?t:stop_node(N1),
- ?line ?t:stop_node(N2).
+ Files = lsfiles(),
+ remove(files(Files, ".beam")),
+ test_server:stop_node(N1),
+ test_server:stop_node(N2).
%% Test that a lost node is reconnected
reconnect(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
ok = file:set_cwd(DataDir),
{ok,a} = compile:file(a),
{ok,b} = compile:file(b),
{ok,f} = compile:file(f),
- {ok,N1} = ?t:start_node(cover_SUITE_reconnect,peer,
- [{args," -pa " ++ DataDir},{start_cover,false}]),
+ {ok,N1} = test_server:start_node(cover_SUITE_reconnect,peer,
+ [{args," -pa " ++ DataDir},
+ {start_cover,false}]),
{ok,a} = cover:compile(a),
{ok,f} = cover:compile(f),
{ok,[N1]} = cover:start(nodes()),
@@ -600,19 +587,20 @@ reconnect(Config) ->
check_f_calls(2,1),
cover:stop(),
- ?t:stop_node(N1),
+ test_server:stop_node(N1),
ok.
%% Test that a lost node is reconnected - also if it has been dead
die_and_reconnect(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
ok = file:set_cwd(DataDir),
{ok,f} = compile:file(f),
NodeName = cover_SUITE_die_and_reconnect,
- {ok,N1} = ?t:start_node(NodeName,peer,
- [{args," -pa " ++ DataDir},{start_cover,false}]),
+ {ok,N1} = test_server:start_node(NodeName,peer,
+ [{args," -pa " ++ DataDir},
+ {start_cover,false}]),
%% {ok,a} = cover:compile(a),
{ok,f} = cover:compile(f),
{ok,[N1]} = cover:start(nodes()),
@@ -629,8 +617,9 @@ die_and_reconnect(Config) ->
check_f_calls(1,0), % only the first call - before the flush
%% Restart the node and check that cover reconnects
- {ok,N1} = ?t:start_node(NodeName,peer,
- [{args," -pa " ++ DataDir},{start_cover,false}]),
+ {ok,N1} = test_server:start_node(NodeName,peer,
+ [{args," -pa " ++ DataDir},
+ {start_cover,false}]),
timer:sleep(100),
[N1] = cover:which_nodes(), % we are reconnected
cover_compiled = rpc:call(N1,code,which,[f]),
@@ -642,20 +631,21 @@ die_and_reconnect(Config) ->
check_f_calls(2,0),
cover:stop(),
- ?t:stop_node(N1),
+ test_server:stop_node(N1),
ok.
%% Test that a stopped node is not marked as lost, i.e. that it is not
%% reconnected if it is restarted (OTP-10638)
dont_reconnect_after_stop(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
ok = file:set_cwd(DataDir),
{ok,f} = compile:file(f),
NodeName = cover_SUITE_dont_reconnect_after_stop,
- {ok,N1} = ?t:start_node(NodeName,peer,
- [{args," -pa " ++ DataDir},{start_cover,false}]),
+ {ok,N1} = test_server:start_node(NodeName,peer,
+ [{args," -pa " ++ DataDir},
+ {start_cover,false}]),
{ok,f} = cover:compile(f),
{ok,[N1]} = cover:start(nodes()),
@@ -670,8 +660,9 @@ dont_reconnect_after_stop(Config) ->
check_f_calls(1,0),
%% Restart the node and check that cover does not reconnect
- {ok,N1} = ?t:start_node(NodeName,peer,
- [{args," -pa " ++ DataDir},{start_cover,false}]),
+ {ok,N1} = test_server:start_node(NodeName,peer,
+ [{args," -pa " ++ DataDir},
+ {start_cover,false}]),
timer:sleep(300),
cover_which_nodes([]),
Beam = rpc:call(N1,code,which,[f]),
@@ -685,20 +676,21 @@ dont_reconnect_after_stop(Config) ->
check_f_calls(1,0),
cover:stop(),
- ?t:stop_node(N1),
+ test_server:stop_node(N1),
ok.
%% Test that a node which is stopped while it is marked as lost is not
%% reconnected if it is restarted (OTP-10638)
stop_node_after_disconnect(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
ok = file:set_cwd(DataDir),
{ok,f} = compile:file(f),
NodeName = cover_SUITE_stop_node_after_disconnect,
- {ok,N1} = ?t:start_node(NodeName,peer,
- [{args," -pa " ++ DataDir},{start_cover,false}]),
+ {ok,N1} = test_server:start_node(NodeName,peer,
+ [{args," -pa " ++ DataDir},
+ {start_cover,false}]),
{ok,f} = cover:compile(f),
{ok,[N1]} = cover:start(nodes()),
@@ -715,8 +707,9 @@ stop_node_after_disconnect(Config) ->
cover:stop(N1),
%% Restart the node and check that cover does not reconnect
- {ok,N1} = ?t:start_node(NodeName,peer,
- [{args," -pa " ++ DataDir},{start_cover,false}]),
+ {ok,N1} = test_server:start_node(NodeName,peer,
+ [{args," -pa " ++ DataDir},
+ {start_cover,false}]),
timer:sleep(300),
cover_which_nodes([]),
Beam = rpc:call(N1,code,which,[f]),
@@ -730,11 +723,11 @@ stop_node_after_disconnect(Config) ->
check_f_calls(1,0),
cover:stop(),
- ?t:stop_node(N1),
+ test_server:stop_node(N1),
ok.
distribution_performance(Config) ->
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
Dir = filename:join(PrivDir,"distribution_performance"),
AllFiles = filename:join(Dir,"*"),
ok = filelib:ensure_dir(AllFiles),
@@ -744,16 +737,16 @@ distribution_performance(Config) ->
C = 10, % and each function of C clauses
Mods = generate_modules(M,F,C,Dir),
-% ?t:break(""),
+ % test_server:break(""),
NodeName = cover_SUITE_distribution_performance,
- {ok,N1} = ?t:start_node(NodeName,peer,[{start_cover,false}]),
+ {ok,N1} = test_server:start_node(NodeName,peer,[{start_cover,false}]),
%% CFun = fun() ->
%% [{ok,_} = cover:compile_beam(Mod) || Mod <- Mods]
%% end,
CFun = fun() -> cover:compile_beam(Mods) end,
{CT,_CA} = timer:tc(CFun),
-% erlang:display(_CA),
+ % erlang:display(_CA),
erlang:display({compile,CT}),
{SNT,_} = timer:tc(fun() -> {ok,[N1]} = cover:start(nodes()) end),
@@ -761,27 +754,27 @@ distribution_performance(Config) ->
[1 = rpc:call(N1,Mod,f1,[1]) || Mod <- Mods],
-% Fun = fun() -> [cover:analyse(Mod,calls,function) || Mod<-Mods] end,
-% Fun = fun() -> analyse_all(Mods,calls,function) end,
-% Fun = fun() -> cover:analyse('_',calls,function) end,
+ % Fun = fun() -> [cover:analyse(Mod,calls,function) || Mod<-Mods] end,
+ % Fun = fun() -> analyse_all(Mods,calls,function) end,
+ % Fun = fun() -> cover:analyse('_',calls,function) end,
Fun = fun() -> cover:analyse(Mods,calls,function) end,
-% Fun = fun() -> [begin cover:analyse_to_file(Mod,[html]) end || Mod<-Mods] end,
-% Fun = fun() -> analyse_all_to_file(Mods,[html]) end,
-% Fun = fun() -> cover:analyse_to_file(Mods,[html]) end,
-% Fun = fun() -> cover:analyse_to_file([html]) end,
+ % Fun = fun() -> [begin cover:analyse_to_file(Mod,[html]) end || Mod<-Mods] end,
+ % Fun = fun() -> analyse_all_to_file(Mods,[html]) end,
+ % Fun = fun() -> cover:analyse_to_file(Mods,[html]) end,
+ % Fun = fun() -> cover:analyse_to_file([html]) end,
-% Fun = fun() -> cover:reset() end,
+ % Fun = fun() -> cover:reset() end,
{AT,_A} = timer:tc(Fun),
erlang:display({analyse,AT}),
-% erlang:display(lists:sort([X || X={_MFA,N} <- lists:append([L || {ok,L}<-A]), N=/=0])),
+ % erlang:display(lists:sort([X || X={_MFA,N} <- lists:append([L || {ok,L}<-A]), N=/=0])),
%% fprof:apply(Fun, [],[{procs,[whereis(cover_server)]}]),
%% fprof:profile(),
%% fprof:analyse(dest,[]),
- {SNT2,_} = timer:tc(fun() -> ?t:stop_node(N1) end),
+ {SNT2,_} = timer:tc(fun() -> test_server:stop_node(N1) end),
erlang:display({stop_node,SNT2}),
code:del_path(Dir),
@@ -793,10 +786,10 @@ distribution_performance(Config) ->
%% Run analysis in parallel
analyse_all(Mods,Analysis,Level) ->
Pids = [begin
- Pid = spawn(fun() ->
- {ok,A} = cover:analyse(Mod,Analysis,Level),
- exit(A)
- end),
+ Pid = spawn(fun() ->
+ {ok,A} = cover:analyse(Mod,Analysis,Level),
+ exit(A)
+ end),
erlang:monitor(process,Pid),
Pid
end || Mod <- Mods],
@@ -804,18 +797,18 @@ analyse_all(Mods,Analysis,Level) ->
analyse_all_to_file(Mods,Opts) ->
Pids = [begin
- Pid = cover:async_analyse_to_file(Mod,Opts),
- erlang:monitor(process,Pid),
- Pid
- end || Mod <- Mods],
+ Pid = cover:async_analyse_to_file(Mod,Opts),
+ erlang:monitor(process,Pid),
+ Pid
+ end || Mod <- Mods],
get_downs(Pids,[]).
get_downs([],Acc) ->
Acc;
get_downs(Pids,Acc) ->
receive
- {'DOWN', _Ref, _Type, Pid, A} ->
- get_downs(lists:delete(Pid,Pids),[A|Acc])
+ {'DOWN', _Ref, _Type, Pid, A} ->
+ get_downs(lists:delete(Pid,Pids),[A|Acc])
end.
generate_modules(0,_,_,_) ->
@@ -824,8 +817,8 @@ generate_modules(M,F,C,Dir) ->
ModStr = "m" ++ integer_to_list(M),
Mod = list_to_atom(ModStr),
Src = ["-module(",ModStr,").\n"
- "-compile(export_all).\n" |
- generate_functions(F,C)],
+ "-compile(export_all).\n" |
+ generate_functions(F,C)],
Erl = filename:join(Dir,ModStr++".erl"),
ok = file:write_file(Erl,Src),
{ok,Mod} = compile:file(Erl,[{outdir,Dir},debug_info,report]),
@@ -846,143 +839,133 @@ generate_clauses(C,Func) ->
generate_clauses(C-1,Func)].
-export_import(suite) -> [];
export_import(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line ok = file:set_cwd(DataDir),
- ?line PortCount = length(erlang:ports()),
+ DataDir = proplists:get_value(data_dir, Config),
+ ok = file:set_cwd(DataDir),
+ PortCount = length(erlang:ports()),
%% Export one module
- ?line {ok,f} = cover:compile(f),
- ?line f:f1(),
+ {ok,f} = cover:compile(f),
+ f:f1(),
%% check that no info is written about where data comes from when no
%% files are imported
- ?line ?t:capture_start(),
- ?line check_f_calls(1,0),
- ?line [] = ?t:capture_get(),
- ?line ?t:capture_stop(),
- ?line ok = cover:export("f_exported",f),
- ?line check_f_calls(1,0),
- ?line ok = cover:stop(),
-
+ test_server:capture_start(),
+ check_f_calls(1,0),
+ [] = test_server:capture_get(),
+ test_server:capture_stop(),
+ ok = cover:export("f_exported",f),
+ check_f_calls(1,0),
+ ok = cover:stop(),
+
%% Check that same data exists after import and that info is written about
%% data comming from imported file
- ?line ok = cover:import("f_exported"),
- ?line ?t:capture_start(),
- ?line check_f_calls(1,0),
- ?line [Text1] = ?t:capture_get(),
- ?line "Analysis includes data from imported files"++_ = lists:flatten(Text1),
- ?line ?t:capture_stop(),
+ ok = cover:import("f_exported"),
+ test_server:capture_start(),
+ check_f_calls(1,0),
+ [Text1] = test_server:capture_get(),
+ "Analysis includes data from imported files"++_ = lists:flatten(Text1),
+ test_server:capture_stop(),
%% Export all modules
- ?line {ok,a} = cover:compile(a),
- ?line ?t:capture_start(),
- ?line ok = cover:export("all_exported"),
- ?line [] = ?t:capture_get(),
-% ?line "Export includes data from imported files"++_ = lists:flatten(Text2),
- ?line ?t:capture_stop(),
- ?line ok = cover:stop(),
- ?line ok = cover:import("all_exported"),
- ?line check_f_calls(1,0),
+ {ok,a} = cover:compile(a),
+ test_server:capture_start(),
+ ok = cover:export("all_exported"),
+ [] = test_server:capture_get(),
+ % "Export includes data from imported files"++_ = lists:flatten(Text2),
+ test_server:capture_stop(),
+ ok = cover:stop(),
+ ok = cover:import("all_exported"),
+ check_f_calls(1,0),
%% Check that data is reset when module is compiled again, and that
%% warning is written when data is deleted for imported module.
- ?line ?t:capture_start(),
- ?line {ok,f} = cover:compile(f),
- ?line timer:sleep(10), % capture needs some time
- ?line [Text3] = ?t:capture_get(),
- ?line "WARNING: Deleting data for module f imported from" ++ _ =
- lists:flatten(Text3),
- ?line ?t:capture_stop(),
- ?line check_f_calls(0,0),
-
+ test_server:capture_start(),
+ {ok,f} = cover:compile(f),
+ timer:sleep(10), % capture needs some time
+ [Text3] = test_server:capture_get(),
+ "WARNING: Deleting data for module f imported from" ++ _ = lists:flatten(Text3),
+ test_server:capture_stop(),
+ check_f_calls(0,0),
+
%% Check that data is summed up when first compiled and then imported
%% The module which has been compiled (f) is loaded from the file
%% all_exported again (since it has been reset during cover compiling),
%% but the other module (a) is not loaded since it is already loaded
- ?line f:f1(),
- ?line f:f2(),
- ?line ok = cover:import("f_exported"),
- ?line ?t:capture_start(),
- ?line ok = cover:import("all_exported"),
- ?line [Text4] = ?t:capture_get(), % a is not loaded again
- ?line "WARNING: Module a already imported from " ++ _ = lists:flatten(Text4),
- ?line ?t:capture_stop(),
- ?line check_f_calls(3,1),
+ f:f1(),
+ f:f2(),
+ ok = cover:import("f_exported"),
+ test_server:capture_start(),
+ ok = cover:import("all_exported"),
+ [Text4] = test_server:capture_get(), % a is not loaded again
+ "WARNING: Module a already imported from " ++ _ = lists:flatten(Text4),
+ test_server:capture_stop(),
+ check_f_calls(3,1),
%% Check that warning is written when same file is imported twice,
%% and that data is not imported again
- ?line ?t:capture_start(),
- ?line ok = cover:import("all_exported"),
- ?line [Text5,Text6] = ?t:capture_get(),
- ?line "WARNING: Module f already imported from " ++ _ = lists:flatten(Text5),
- ?line "WARNING: Module a already imported from " ++ _ = lists:flatten(Text6),
- ?line ?t:capture_stop(),
- ?line check_f_calls(3,1),
+ test_server:capture_start(),
+ ok = cover:import("all_exported"),
+ [Text5,Text6] = test_server:capture_get(),
+ "WARNING: Module f already imported from " ++ _ = lists:flatten(Text5),
+ "WARNING: Module a already imported from " ++ _ = lists:flatten(Text6),
+ test_server:capture_stop(),
+ check_f_calls(3,1),
%% Check that reset removes all data and that the file which has been
%% reset can be imported again with no warning
- ?line cover:reset(f),
- ?line check_f_calls(0,0),
- ?line ?t:capture_start(),
- ?line ok = cover:import("all_exported"),
- ?line [Text7] = ?t:capture_get(), % warning only on mod a
- ?line "WARNING: Module a already imported from " ++ _ = lists:flatten(Text7),
- ?line ?t:capture_stop(),
- ?line check_f_calls(1,0),
+ cover:reset(f),
+ check_f_calls(0,0),
+ test_server:capture_start(),
+ ok = cover:import("all_exported"),
+ [Text7] = test_server:capture_get(), % warning only on mod a
+ "WARNING: Module a already imported from " ++ _ = lists:flatten(Text7),
+ test_server:capture_stop(),
+ check_f_calls(1,0),
%% same as above - only reset all
- ?line cover:reset(),
- ?line check_f_calls(0,0),
- ?line ?t:capture_start(),
- ?line ok = cover:import("all_exported"),
- ?line [] = ?t:capture_get(), % no warnings
- ?line ?t:capture_stop(),
- ?line check_f_calls(1,0),
+ cover:reset(),
+ check_f_calls(0,0),
+ test_server:capture_start(),
+ ok = cover:import("all_exported"),
+ [] = test_server:capture_get(), % no warnings
+ test_server:capture_stop(),
+ check_f_calls(1,0),
%% Check no raw files are left open
- ?line PortCount = length(erlang:ports()),
+ PortCount = length(erlang:ports()),
%% Cleanup
- ?line ok = cover:stop(),
- ?line Files = lsfiles(),
- ?line remove(["f_exported","all_exported"|files(Files, ".beam")]).
+ ok = cover:stop(),
+ Files = lsfiles(),
+ remove(["f_exported","all_exported"|files(Files, ".beam")]).
-otp_5031(suite) -> [];
otp_5031(Config) when is_list(Config) ->
+ ct:timetrap({seconds, 10}),
- Dog = ?t:timetrap(?t:seconds(10)),
-
- {ok,N1} = ?t:start_node(cover_SUITE_otp_5031,slave,[]),
- ?line {ok,[N1]} = cover:start(N1),
- ?line {error,not_main_node} = rpc:call(N1,cover,modules,[]),
- ?line cover:stop(),
- ?t:stop_node(N1),
-
- ?t:timetrap_cancel(Dog),
+ {ok,N1} = test_server:start_node(cover_SUITE_otp_5031,slave,[]),
+ {ok,[N1]} = cover:start(N1),
+ {error,not_main_node} = rpc:call(N1,cover,modules,[]),
+ cover:stop(),
+ test_server:stop_node(N1),
ok.
-eif(doc) ->
- ["Test the \'Exclude Included Functions\' functionality"];
-eif(suite) ->
- [];
+%% Test the \'Exclude Included Functions\' functionality
eif(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(filename:join(?config(data_dir, Config),
- "included_functions")),
- ?line {ok, cover_inc} = compile:file(cover_inc,[debug_info]),
- ?line {ok, cover_inc} = cover:compile_beam(cover_inc),
+ ok = file:set_cwd(filename:join(proplists:get_value(data_dir, Config),
+ "included_functions")),
+ {ok, cover_inc} = compile:file(cover_inc,[debug_info]),
+ {ok, cover_inc} = cover:compile_beam(cover_inc),
%% This function will cause an included function to be executed.
%% The analysis should only show the lines that actually exist
%% in cover_inc.beam - not the ones from the included file.
- ?line cover_inc:func(),
- ?line {ok, [_, _]} = cover:analyse(cover_inc, line),
+ cover_inc:func(),
+ {ok, [_, _]} = cover:analyse(cover_inc, line),
ok.
-
-otp_5305(suite) -> [];
+
otp_5305(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(priv_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
File = "t.erl",
Test = <<"-module(t).
@@ -991,35 +974,32 @@ otp_5305(Config) when is_list(Config) ->
t() ->
ets:fun2ms(fun(X) -> X end).
">>,
- ?line ok = file:write_file(File, Test),
- ?line {ok, t} = cover:compile(File),
- ?line ok = file:delete(File),
-
+ ok = file:write_file(File, Test),
+ {ok, t} = cover:compile(File),
+ ok = file:delete(File),
ok.
-otp_5418(suite) -> [];
otp_5418(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(priv_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
File = "t.erl",
Test = <<"-module(t).
">>,
- ?line ok = file:write_file(File, Test),
- ?line {ok, t} = cover:compile(File),
- ?line {ok,{t,{0,0}}} = cover:analyse(t, module),
- ?line ok = file:delete(File),
-
+ ok = file:write_file(File, Test),
+ {ok, t} = cover:compile(File),
+ {ok,{t,{0,0}}} = cover:analyse(t, module),
+ ok = file:delete(File),
ok.
otp_6115(Config) when is_list(Config) ->
- ?line {ok, CWD} = file:get_cwd(),
- ?line Dir = filename:join(?config(data_dir, Config), otp_6115),
- ?line ok = file:set_cwd(Dir),
- ?line {ok, f1} = compile:file(f1, [debug_info]),
- ?line {ok, f2} = compile:file(f2, [debug_info]),
+ {ok, CWD} = file:get_cwd(),
+ Dir = filename:join(proplists:get_value(data_dir, Config), otp_6115),
+ ok = file:set_cwd(Dir),
+ {ok, f1} = compile:file(f1, [debug_info]),
+ {ok, f2} = compile:file(f2, [debug_info]),
%% Cover compile f1, but not f2
- ?line {ok, f1} = cover:compile(f1),
+ {ok, f1} = cover:compile(f1),
%% If f1 is cover compiled, a process P is started with a
%% reference to the fun created in start_fail/0, and cover:stop() is
@@ -1033,39 +1013,37 @@ otp_6115(Config) when is_list(Config) ->
Pid2 = f1:start_b(),
%% Now stop cover
- ?line cover:stop(),
-
+ cover:stop(),
+
%% Ensure that f1 is loaded (and not cover compiled), and that
%% both Pid1 and Pid2 are dead.
case code:which(f1) of
- Beam when is_list(Beam) ->
- ok;
- Other ->
- ?line ?t:fail({"f1 is not reloaded", Other})
+ Beam when is_list(Beam) ->
+ ok;
+ Other ->
+ ct:fail({"f1 is not reloaded", Other})
end,
case process_info(Pid1) of
- undefined ->
- ok;
- _PI1 ->
- RefToOldP1 = erlang:check_process_code(Pid1, f1),
- ?t:fail({"Pid1 still alive", RefToOldP1})
+ undefined ->
+ ok;
+ _PI1 ->
+ RefToOldP1 = erlang:check_process_code(Pid1, f1),
+ ct:fail({"Pid1 still alive", RefToOldP1})
end,
case process_info(Pid2) of
- undefined ->
- ok;
- _PI2 ->
- RefToOldP2 = erlang:check_process_code(Pid1, f2),
- ?t:fail({"Pid2 still alive", RefToOldP2})
+ undefined ->
+ ok;
+ _PI2 ->
+ RefToOldP2 = erlang:check_process_code(Pid1, f2),
+ ct:fail({"Pid2 still alive", RefToOldP2})
end,
- ?line file:set_cwd(CWD),
+ file:set_cwd(CWD),
ok.
-otp_7095(doc) ->
- ["andalso/orelse"];
-otp_7095(suite) -> [];
+%% andalso/orelse
otp_7095(Config) when is_list(Config) ->
- ?line ok = file:set_cwd(?config(priv_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
File = "t.erl",
Test = <<"-module(t).
@@ -1151,90 +1129,84 @@ otp_7095(Config) when is_list(Config) ->
add_one(T) ->
put(T, get(T) + 1). % 82
">>,
- ?line ok = file:write_file(File, Test),
- ?line {ok, t} = cover:compile(File),
- ?line ok = t:t(),
- ?line {ok,[{{t,4},1},{{t,5},1},{{t,6},1},{{t,7},1},{{t,8},1},{{t,9},1},
- {{t,10},1},{{t,11},1},{{t,12},1},{{t,13},1},{{t,14},1},
- {{t,15},1},{{t,16},1},{{t,17},1},
- {{t,20},1},{{t,22},0},
- {{t,25},1},{{t,27},1},
- {{t,30},1},{{t,32},1},
- {{t,35},1},{{t,37},0},
- {{t,40},1},{{t,42},1},{{t,44},1},
- {{t,47},1},{{t,48},1},
- {{t,51},1},{{t,53},1},{{t,55},0},
- {{t,58},1},{{t,60},1},{{t,62},1},{{t,64},0},
- {{t,67},1},{{t,69},1},{{t,71},1},{{t,74},1},
- {{t,76},0},{{t,78},1},
- {{t,82},2}]} = cover:analyse(t, calls, line),
- ?line ok = file:delete(File),
-
+ ok = file:write_file(File, Test),
+ {ok, t} = cover:compile(File),
+ ok = t:t(),
+ {ok,[{{t,4},1},{{t,5},1},{{t,6},1},{{t,7},1},{{t,8},1},{{t,9},1},
+ {{t,10},1},{{t,11},1},{{t,12},1},{{t,13},1},{{t,14},1},
+ {{t,15},1},{{t,16},1},{{t,17},1},
+ {{t,20},1},{{t,22},0},
+ {{t,25},1},{{t,27},1},
+ {{t,30},1},{{t,32},1},
+ {{t,35},1},{{t,37},0},
+ {{t,40},1},{{t,42},1},{{t,44},1},
+ {{t,47},1},{{t,48},1},
+ {{t,51},1},{{t,53},1},{{t,55},0},
+ {{t,58},1},{{t,60},1},{{t,62},1},{{t,64},0},
+ {{t,67},1},{{t,69},1},{{t,71},1},{{t,74},1},
+ {{t,76},0},{{t,78},1},
+ {{t,82},2}]} = cover:analyse(t, calls, line),
+ ok = file:delete(File),
ok.
-otp_8270(doc) ->
- ["OTP-8270. Bug."];
-otp_8270(suite) -> [];
+%% OTP-8270. Bug.
otp_8270(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line ok = file:set_cwd(DataDir),
+ DataDir = proplists:get_value(data_dir, Config),
+ ok = file:set_cwd(DataDir),
- ?line PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
As = [{args," -pa " ++ PrivDir}],
- ?line {ok,N1} = ?t:start_node(cover_n1,slave,As),
- ?line {ok,N2} = ?t:start_node(cover_n2,slave,As),
- ?line {ok,N3} = ?t:start_node(cover_n3,slave,As),
-
+ {ok,N1} = test_server:start_node(cover_n1,slave,As),
+ {ok,N2} = test_server:start_node(cover_n2,slave,As),
+ {ok,N3} = test_server:start_node(cover_n3,slave,As),
+
timer:sleep(500),
{ok,[_,_,_]} = cover:start(nodes()),
- Test = <<
- "-module(m).\n"
- "-compile(export_all).\n"
- "t() -> t(0).\n"
- "l() ->\n"
- " catch ets:tab2list(cover_internal_data_table).\n"
- "t(Sz) ->\n"
- " case ets:info(cover_internal_data_table, size) of\n"
- " Sz ->\n"
- " m:t(Sz); % Not a local call! Newly loaded code is entered.\n"
- " NSz ->\n"
- " % error_logger:info_msg(\"~p: ~p ~p change~n L1 ~p~n\", \n"
- " % [node(), Sz, NSz, l()]),\n"
- " m:t(NSz)\n"
- " end.\n">>,
- ?line _File = c_mod(m, Test, Config),
+ Test = <<"-module(m).\n"
+ "-compile(export_all).\n"
+ "t() -> t(0).\n"
+ "l() ->\n"
+ " catch ets:tab2list(cover_internal_data_table).\n"
+ "t(Sz) ->\n"
+ " case ets:info(cover_internal_data_table, size) of\n"
+ " Sz ->\n"
+ " m:t(Sz); % Not a local call! Newly loaded code is entered.\n"
+ " NSz ->\n"
+ " % error_logger:info_msg(\"~p: ~p ~p change~n L1 ~p~n\", \n"
+ " % [node(), Sz, NSz, l()]),\n"
+ " m:t(NSz)\n"
+ " end.\n">>,
+ _File = c_mod(m, Test, Config),
Fun = fun m:t/0,
- ?line Pid1 = spawn(Fun),
- ?line Pid2 = spawn(N1, Fun),
- ?line Pid3 = spawn(N2, Fun),
- ?line Pid4 = spawn(N3, Fun),
+ Pid1 = spawn(Fun),
+ Pid2 = spawn(N1, Fun),
+ Pid3 = spawn(N2, Fun),
+ Pid4 = spawn(N3, Fun),
- ?line {ok, m} = cover:compile_beam(m),
+ {ok, m} = cover:compile_beam(m),
timer:sleep(1000),
- ?line Info = erlang:process_info(Pid1),
- ?line N1_info = rpc:call(N1, erlang, process_info, [Pid2]),
- ?line N2_info = rpc:call(N2, erlang, process_info, [Pid3]),
- ?line N3_info = rpc:call(N3, erlang, process_info, [Pid4]),
+ Info = erlang:process_info(Pid1),
+ N1_info = rpc:call(N1, erlang, process_info, [Pid2]),
+ N2_info = rpc:call(N2, erlang, process_info, [Pid3]),
+ N3_info = rpc:call(N3, erlang, process_info, [Pid4]),
- ?line true = is_list(Info),
- ?line {N1,true} = {N1,is_list(N1_info)},
- ?line {N2,true} = {N2,is_list(N2_info)},
- ?line {N3,true} = {N3,is_list(N3_info)},
+ true = is_list(Info),
+ {N1,true} = {N1,is_list(N1_info)},
+ {N2,true} = {N2,is_list(N2_info)},
+ {N3,true} = {N3,is_list(N3_info)},
exit(Pid1,kill),
- ?line ?t:stop_node(N1),
- ?line ?t:stop_node(N2),
- ?line ?t:stop_node(N3),
+ test_server:stop_node(N1),
+ test_server:stop_node(N2),
+ test_server:stop_node(N3),
ok.
-otp_8273(doc) ->
- ["OTP-8273. Bug."];
-otp_8273(suite) -> [];
+%% OTP-8273. Bug.
otp_8273(Config) when is_list(Config) ->
Test = <<"-module(t).
-export([t/0]).
@@ -1243,27 +1215,22 @@ otp_8273(Config) when is_list(Config) ->
bar = false orelse bar,
ok.
">>,
- ?line File = cc_mod(t, Test, Config),
- ?line ok = t:t(),
- ?line ok = file:delete(File),
+ File = cc_mod(t, Test, Config),
+ ok = t:t(),
+ ok = file:delete(File),
ok.
-otp_8340(doc) ->
- ["OTP-8340. Bug."];
-otp_8340(suite) -> [];
+%% OTP-8340. Bug.
otp_8340(Config) when is_list(Config) ->
- ?line [{{t,1},1},{{t,4},1}] =
- analyse_expr(<<"<< \n"
- " <<3:2, \n"
- " SeqId:62>> \n"
- " || SeqId <- [64] >>">>, Config),
-
+ [{{t,1},1},{{t,2},1},{{t,4},1}] =
+ analyse_expr(<<"<< \n"
+ " <<3:2, \n"
+ " SeqId:62>> \n"
+ " || SeqId <- [64] >>">>, Config),
ok.
-otp_8188(doc) ->
- ["Clauses on the same line."];
-otp_8188(suite) -> [];
+%% Clauses on the same line.
otp_8188(Config) when is_list(Config) ->
%% This example covers the bug report:
Test = <<"-module(t).
@@ -1279,10 +1246,10 @@ otp_8188(Config) when is_list(Config) ->
_Res =
?FOOBAR(X).
">>,
- ?line File = cc_mod(t, Test, Config),
- ?line false = t:test(nok),
- ?line {ok,[{{t,11},1},{{t,12},1}]} = cover:analyse(t, calls, line),
- ?line ok = file:delete(File),
+ File = cc_mod(t, Test, Config),
+ false = t:test(nok),
+ {ok,[{{t,11},1},{{t,12},1}]} = cover:analyse(t, calls, line),
+ ok = file:delete(File),
%% Bit string comprehensions are now traversed;
%% the handling of list comprehensions has been improved:
@@ -1293,39 +1260,39 @@ otp_8188(Config) when is_list(Config) ->
ok.
bug_8188(Cf) ->
- ?line [{{t,1},1},{{t,2},1},{{t,3},1}] =
- analyse_expr(<<"A = 3,\n" % 1
- " case A of\n" % 1
- " 2 -> two; 3 -> three end, A + 2">>, % 1
- Cf),
-
- ?line [{{t,1},1},
- {{t,2},0},
- {{t,3},1},
- {{t,4},1},
- {{t,5},1},
- {{t,6},0},
- {{t,7},1},
- {{t,9},2}] =
- analyse_expr(<<"case two() of\n" % 1
- " 1 -> 2;\n" % 0
- " _ -> begin 3 end\n" % 1
- " +\n" % 1
- " begin 4 end end, case two() of\n" % 1
- " 1 -> a;\n" % 0
- " 2 -> b; 3 -> c\n" % 1
- " end.\n"
- "two() -> 2">>, Cf), % 2
-
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},1},
- {{t,4},1}, {{t,5},1}, {{t,6},0}] =
- analyse_expr(<<" self() ! 1,\n"
- " receive \n"
- " X=1 -> a;\n"
- " X=2 -> b end, case X of \n"
- " 1 -> a;\n"
- " 2 -> b\n"
- " end">>, Cf),
+ [{{t,1},1},{{t,2},1},{{t,3},1}] =
+ analyse_expr(<<"A = 3,\n" % 1
+ " case A of\n" % 1
+ " 2 -> two; 3 -> three end, A + 2">>, % 1
+ Cf),
+
+ [{{t,1},1},
+ {{t,2},0},
+ {{t,3},1},
+ {{t,4},1},
+ {{t,5},1},
+ {{t,6},0},
+ {{t,7},1},
+ {{t,9},2}] =
+ analyse_expr(<<"case two() of\n" % 1
+ " 1 -> 2;\n" % 0
+ " _ -> begin 3 end\n" % 1
+ " +\n" % 1
+ " begin 4 end end, case two() of\n" % 1
+ " 1 -> a;\n" % 0
+ " 2 -> b; 3 -> c\n" % 1
+ " end.\n"
+ "two() -> 2">>, Cf), % 2
+
+ [{{t,1},1}, {{t,2},1}, {{t,3},1},
+ {{t,4},1}, {{t,5},1}, {{t,6},0}] =
+ analyse_expr(<<" self() ! 1,\n"
+ " receive \n"
+ " X=1 -> a;\n"
+ " X=2 -> b end, case X of \n"
+ " 1 -> a;\n"
+ " 2 -> b\n"
+ " end">>, Cf),
T0 = <<"t1(X) ->\n "
"case X of\n"
@@ -1339,42 +1306,42 @@ bug_8188(Cf) ->
" end">>,
T1 = [<<"a = t1(1). ">>,T0],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},1}, {{t,4},0},
- {{t,5},0}, {{t,6},1}, {{t,7},1}, {{t,8},0}, {{t,9},0}] =
- analyse_expr(T1, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},1}, {{t,4},0},
+ {{t,5},0}, {{t,6},1}, {{t,7},1}, {{t,8},0}, {{t,9},0}] =
+ analyse_expr(T1, Cf),
T2 = [<<"b = t1(2). ">>,T0],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
- {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}, {{t,9},0}] =
- analyse_expr(T2, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
+ {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}, {{t,9},0}] =
+ analyse_expr(T2, Cf),
T3 = [<<"c = t1(3). ">>,T0],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
- {{t,5},1}, {{t,6},1}, {{t,7},0}, {{t,8},1}, {{t,9},0}] =
- analyse_expr(T3, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
+ {{t,5},1}, {{t,6},1}, {{t,7},0}, {{t,8},1}, {{t,9},0}] =
+ analyse_expr(T3, Cf),
T4 = [<<"d = t1(4). ">>,T0],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},0},
- {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},0}, {{t,9},1}] =
- analyse_expr(T4, Cf),
-
- ?line [{{t,1},1},{{t,2},1},{{t,3},1},{{t,4},1},{{t,5},1}] =
- analyse_expr(
- <<"2 = x3(1). "
- "x3(X) ->\n"
- " case X of \n"
- " 1 -> case X of\n"
- " 1 -> a, Y = 2;\n"
- " 2 -> b, Y = 3 end, Y; 2 -> Y = 4 end, Y">>, Cf),
-
- ?line [{{t,1},1},{{t,2},1},{{t,3},1},{{t,4},1}] =
- analyse_expr(
- <<"1 = x4(1). "
- "x4(X) ->\n"
- " case X of\n"
- " 1 -> case X of\n"
- " 1 -> Y = 1 end, case X of 1 -> Y = 1 end, Y end">>,
- Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},0},
+ {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},0}, {{t,9},1}] =
+ analyse_expr(T4, Cf),
+
+ [{{t,1},1},{{t,2},1},{{t,3},1},{{t,4},1},{{t,5},1}] =
+ analyse_expr(
+ <<"2 = x3(1). "
+ "x3(X) ->\n"
+ " case X of \n"
+ " 1 -> case X of\n"
+ " 1 -> a, Y = 2;\n"
+ " 2 -> b, Y = 3 end, Y; 2 -> Y = 4 end, Y">>, Cf),
+
+ [{{t,1},1},{{t,2},1},{{t,3},1},{{t,4},1}] =
+ analyse_expr(
+ <<"1 = x4(1). "
+ "x4(X) ->\n"
+ " case X of\n"
+ " 1 -> case X of\n"
+ " 1 -> Y = 1 end, case X of 1 -> Y = 1 end, Y end">>,
+ Cf),
T10 = <<"t1(X) ->\n"
"if\n"
@@ -1386,19 +1353,16 @@ bug_8188(Cf) ->
" 2 -> b; 3 -> c\n"
" end">>,
T11 = [<<"a = t1(1). ">>,T10],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},1}, {{t,4},1},
- {{t,5},1}, {{t,6},1}, {{t,7},1}, {{t,8},0}] =
- analyse_expr(T11, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},1}, {{t,4},1},
+ {{t,5},1}, {{t,6},1}, {{t,7},1}, {{t,8},0}] = analyse_expr(T11, Cf),
T12 = [<<"b = t1(2). ">>,T10],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
- {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}] =
- analyse_expr(T12, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
+ {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}] = analyse_expr(T12, Cf),
T13 = [<<"c = t1(3). ">>,T10],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
- {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}] =
- analyse_expr(T13, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
+ {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}] = analyse_expr(T13, Cf),
T20 = <<"t1(X) ->\n"
"case X of\n"
@@ -1411,206 +1375,185 @@ bug_8188(Cf) ->
" end">>,
T21 = [<<"a = t1(1). ">>,T20],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},1}, {{t,4},0},
- {{t,5},0}, {{t,6},1}, {{t,7},1}, {{t,8},0}] =
- analyse_expr(T21, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},1}, {{t,4},0},
+ {{t,5},0}, {{t,6},1}, {{t,7},1}, {{t,8},0}] = analyse_expr(T21, Cf),
T22 = [<<"b = t1(2). ">>,T20],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
- {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}] =
- analyse_expr(T22, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
+ {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}] = analyse_expr(T22, Cf),
T23 = [<<"c = t1(3). ">>,T20],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
- {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}] =
- analyse_expr(T23, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0}, {{t,4},1},
+ {{t,5},0}, {{t,6},1}, {{t,7},0}, {{t,8},1}] = analyse_expr(T23, Cf),
T30 = <<
- "t1(X) ->\n"
- "case X of\n"
- " 1 -> a;\n"
- " 2 -> b; 3 -> case X of 1 -> a; 2 -> b; 3 -> c end end, case X of\n"
- " 1 -> a;\n"
- " 2 -> b; 3 -> c\n"
- " end\n">>,
+ "t1(X) ->\n"
+ "case X of\n"
+ " 1 -> a;\n"
+ " 2 -> b; 3 -> case X of 1 -> a; 2 -> b; 3 -> c end end, case X of\n"
+ " 1 -> a;\n"
+ " 2 -> b; 3 -> c\n"
+ " end\n">>,
T31 = [<<"a = t1(1). ">>,T30],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},1},
- {{t,4},1}, {{t,5},1}, {{t,6},0}] =
- analyse_expr(T31, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},1},
+ {{t,4},1}, {{t,5},1}, {{t,6},0}] = analyse_expr(T31, Cf),
T32 = [<<"b = t1(2). ">>,T30],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0},
- {{t,4},1}, {{t,5},0}, {{t,6},1}] =
- analyse_expr(T32, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0},
+ {{t,4},1}, {{t,5},0}, {{t,6},1}] = analyse_expr(T32, Cf),
T33 = [<<"c = t1(3). ">>,T30],
- ?line [{{t,1},1}, {{t,2},1}, {{t,3},0},
- {{t,4},1}, {{t,5},0}, {{t,6},1}] =
- analyse_expr(T33, Cf),
+ [{{t,1},1}, {{t,2},1}, {{t,3},0},
+ {{t,4},1}, {{t,5},0}, {{t,6},1}] = analyse_expr(T33, Cf),
%% 'try' now traverses the body as a body...
- ?line [{{t,1},1},{{t,2},1},{{t,3},1},{{t,4},0},{{t,6},1}] =
- analyse_expr(<<"try \n"
- " B = 2, \n"
- " C = erlang:error(foo), \n"
- " {B,C} \n"
- "catch _:_ -> \n"
- " foo \n"
- "end">>, Cf),
+ [{{t,1},1},{{t,2},1},{{t,3},1},{{t,4},0},{{t,6},1}] =
+ analyse_expr(<<"try \n"
+ " B = 2, \n"
+ " C = erlang:error(foo), \n"
+ " {B,C} \n"
+ "catch _:_ -> \n"
+ " foo \n"
+ "end">>, Cf),
%% receive after:
- ?line [{{t,1},1},{{t,2},0},{{t,3},1}] =
- analyse_expr(<<"receive \n"
- " X=1 -> a; \n"
- " X=2 -> b after begin 10 end -> X=3 end">>, Cf),
- ?line [{{t,1},1},{{t,2},0},{{t,3},1}] =
- analyse_expr(<<"receive \n"
- " X=1 -> a; \n"
- " X=2 -> b after 10 -> begin X=3 end end">>, Cf),
+ [{{t,1},1},{{t,2},0},{{t,3},1}] =
+ analyse_expr(<<"receive \n"
+ " X=1 -> a; \n"
+ " X=2 -> b after begin 10 end -> X=3 end">>, Cf),
+ [{{t,1},1},{{t,2},0},{{t,3},1}] =
+ analyse_expr(<<"receive \n"
+ " X=1 -> a; \n"
+ " X=2 -> b after 10 -> begin X=3 end end">>, Cf),
ok.
comprehension_8188(Cf) ->
- ?line [{{t,1},1}] =
- analyse_expr(<<"[begin X end || X <- [1,2,3], X > 1]">>, Cf),
- ?line [{{t,1},1},{{t,2},1}] =
- analyse_expr(<<"[begin X end || \n"
- " X <- [1,2,3], X > 1]">>, Cf),
- ?line [{{t,1},1},{{t,2},1},{{t,3},3}] =
- analyse_expr(<<"[begin X end || \n "
- " X <- [1,2,3], \n "
- " X > 1]">>, Cf),
- ?line [{{t,1},1},{{t,3},1},{{t,4},3}] =
- analyse_expr(<<"[begin X end || \n "
- " X <- \n "
- " [1,2,3], \n "
- " X > 1]">>, Cf),
- ?line [{{t,1},1},{{t,2},2}] =
- analyse_expr(<<"[ \n "
- " X || X <- [1,2,3], X > 1]">>, Cf),
- ?line [{{t,1},1},{{t,2},2},{{t,3},3}] =
- analyse_expr(<<"[ \n"
- " X || X <- [1,2,3], \n"
- " X > 1]">>, Cf),
- ?line [{{t,1},1},{{t,2},1},{{t,3},2}] =
- analyse_expr(<<"[ \n "
- " X || X <- [1,2,3], X > 1, \n"
- " X > 2]">>, Cf),
-
- ?line [{{t,1},1},
- {{t,3},2},
- {{t,5},1},
- {{t,7},1},
- {{t,8},0},
- {{t,12},3},
- {{t,15},2},
- {{t,17},2},
- {{t,18},1}] =
- analyse_expr(<<"[ \n" % 1
- " begin\n"
- " X * 2\n" % 2
- " end ||\n"
- " X <- [1,\n" % 1
- " case two() of\n"
- " 2 -> 2;\n" % 1
- " _ -> two\n" % 0
- " end,\n"
- " 3],\n"
- " begin\n"
- " math:sqrt(X) > 1.0\n" % 3
- " end,\n"
- " begin\n"
- " true\n" % 2
- " end,\n"
- " true]. \n" % 2
- " two() -> 2">>, Cf), % 1
-
- ?line [{{t,1},1},
- {{t,2},2},
- {{t,3},1},
- {{t,5},1},
- {{t,6},0},
- {{t,9},3},
- {{t,10},2},
- {{t,11},2},
- {{t,12},1}] =
- analyse_expr(<<"[ \n"
- " X * 2 || \n" % 2
- " X <- [1,\n" % 1
- " case two() of\n"
- " 2 -> 2;\n" % 1
- " _ -> two\n" % 0
- " end,\n"
- " 3],\n"
- " math:sqrt(X) > 1.0,\n" % 3
- " true,\n" % 2
- " true]. \n" % 2
- " two() -> 2">>, Cf), % 1
-
- %% The template cannot have a counter since it is not allowed to
- %% be a block.
- ?line [{{t,1},1},
- %% {{t,2},2},
- {{t,3},1},
- {{t,4},1},
- {{t,5},0},
- {{t,8},1},
- {{t,9},0},
- {{t,12},3},
- {{t,13},2},
- {{t,14},2}] =
- analyse_expr(<<"<< \n" % 1
- " << (X*2) >> || \n" % 2 (now: 0)
- " <<X>> <= << (case two() of\n"
- " 2 -> 1;\n" % 1
- " _ -> 2\n" % 0
- " end)/integer,\n"
- " (case two() of \n"
- " 2 -> 2;\n" % 1
- " _ -> two\n" % 0
- " end)/integer,\n"
- " 3 >>, \n"
- " math:sqrt(X) > 1.0,\n" % 3
- " true >>.\n" % 2
- "two() -> 2">>, Cf),
-
- ?line [{{t,1},1},
- %% {{t,2},4},
- {{t,4},1},
- {{t,6},1},
- {{t,7},0},
- {{t,10},3},
- {{t,11},2},
- {{t,12},4},
- {{t,13},1}] =
- analyse_expr(<<"<< \n" % 1
- " << (2)\n" % 4 (now: 0)
- " :(8) >> || \n"
- " <<X>> <= << 1,\n" % 1
- " (case two() of \n"
- " 2 -> 2;\n" % 1
- " _ -> two\n" % 0
- " end)/integer,\n"
- " 3 >>, \n"
- " math:sqrt(X) > 1.0,\n" % 3
- " <<_>> <= << 1, 2 >>,\n" % 2
- " true >>.\n" % 4
- "two() -> 2">>, Cf), % 1
-
+ [{{t,1},1}] = analyse_expr(<<"[begin X end || X <- [1,2,3], X > 1]">>, Cf),
+ [{{t,1},1},{{t,2},1}] = analyse_expr(<<"[begin X end || \n"
+ " X <- [1,2,3], X > 1]">>, Cf),
+ [{{t,1},1},{{t,2},1},{{t,3},3}] = analyse_expr(<<"[begin X end || \n "
+ " X <- [1,2,3], \n "
+ " X > 1]">>, Cf),
+ [{{t,1},1},{{t,3},1},{{t,4},3}] = analyse_expr(<<"[begin X end || \n "
+ " X <- \n "
+ " [1,2,3], \n "
+ " X > 1]">>, Cf),
+ [{{t,1},1},{{t,2},2}] = analyse_expr(<<"[ \n "
+ " X || X <- [1,2,3], X > 1]">>, Cf),
+ [{{t,1},1},{{t,2},2},{{t,3},3}] = analyse_expr(<<"[ \n"
+ " X || X <- [1,2,3], \n"
+ " X > 1]">>, Cf),
+ [{{t,1},1},{{t,2},1},{{t,3},2}] = analyse_expr(<<"[ \n "
+ " X || X <- [1,2,3], X > 1, \n"
+ " X > 2]">>, Cf),
+
+ [{{t,1},1},
+ {{t,3},2},
+ {{t,5},1},
+ {{t,7},1},
+ {{t,8},0},
+ {{t,12},3},
+ {{t,15},2},
+ {{t,17},2},
+ {{t,18},1}] = analyse_expr(<<"[ \n" % 1
+ " begin\n"
+ " X * 2\n" % 2
+ " end ||\n"
+ " X <- [1,\n" % 1
+ " case two() of\n"
+ " 2 -> 2;\n" % 1
+ " _ -> two\n" % 0
+ " end,\n"
+ " 3],\n"
+ " begin\n"
+ " math:sqrt(X) > 1.0\n" % 3
+ " end,\n"
+ " begin\n"
+ " true\n" % 2
+ " end,\n"
+ " true]. \n" % 2
+ " two() -> 2">>, Cf), % 1
+
+ [{{t,1},1},
+ {{t,2},2},
+ {{t,3},1},
+ {{t,5},1},
+ {{t,6},0},
+ {{t,9},3},
+ {{t,10},2},
+ {{t,11},2},
+ {{t,12},1}] = analyse_expr(<<"[ \n"
+ " X * 2 || \n" % 2
+ " X <- [1,\n" % 1
+ " case two() of\n"
+ " 2 -> 2;\n" % 1
+ " _ -> two\n" % 0
+ " end,\n"
+ " 3],\n"
+ " math:sqrt(X) > 1.0,\n" % 3
+ " true,\n" % 2
+ " true]. \n" % 2
+ " two() -> 2">>, Cf), % 1
+
+ [{{t,1},1},
+ {{t,2},2},
+ {{t,3},1},
+ {{t,4},1},
+ {{t,5},0},
+ {{t,8},1},
+ {{t,9},0},
+ {{t,12},3},
+ {{t,13},2},
+ {{t,14},2}] = analyse_expr(<<"<< \n" % 1
+ " << (X*2) >> || \n" % 2
+ " <<X>> <= << (case two() of\n"
+ " 2 -> 1;\n" % 1
+ " _ -> 2\n" % 0
+ " end)/integer,\n"
+ " (case two() of \n"
+ " 2 -> 2;\n" % 1
+ " _ -> two\n" % 0
+ " end)/integer,\n"
+ " 3 >>, \n"
+ " math:sqrt(X) > 1.0,\n" % 3
+ " true >>.\n" % 2
+ "two() -> 2">>, Cf),
+ [{{t,1},1},
+ {{t,2},4},
+ {{t,4},1},
+ {{t,6},1},
+ {{t,7},0},
+ {{t,10},3},
+ {{t,11},2},
+ {{t,12},4},
+ {{t,13},1}] = analyse_expr(<<"<< \n" % 1
+ " << (2)\n" % 4
+ " :(8) >> || \n"
+ " <<X>> <= << 1,\n" % 1
+ " (case two() of \n"
+ " 2 -> 2;\n" % 1
+ " _ -> two\n" % 0
+ " end)/integer,\n"
+ " 3 >>, \n"
+ " math:sqrt(X) > 1.0,\n" % 3
+ " <<_>> <= << 1, 2 >>,\n" % 2
+ " true >>.\n" % 4
+ "two() -> 2">>, Cf), % 1
ok.
eep37(Config) when is_list(Config) ->
[{{t,1},1},{{t,2},1},{{t,4},6},{{t,6},1},{{t,8},1}] =
- analyse_expr(<<"begin\n" % 1
- " F =\n" % 1
- " fun Fact(N) when N > 0 ->\n"
- " N * Fact(N - 1);\n" % 6
- " Fact(0) ->\n"
- " 1\n" % 1
- " end,\n"
- " F(6)\n" % 1
- "end\n">>,
- Config),
+ analyse_expr(<<"begin\n" % 1
+ " F =\n" % 1
+ " fun Fact(N) when N > 0 ->\n"
+ " N * Fact(N - 1);\n" % 6
+ " Fact(0) ->\n"
+ " 1\n" % 1
+ " end,\n"
+ " F(6)\n" % 1
+ "end\n">>,
+ Config),
ok.
otp_10979_hanging_node(_Config) ->
@@ -1623,42 +1566,40 @@ otp_10979_hanging_node(_Config) ->
P2 = processes(),
case P2--P1 of
- [] ->
- ok;
- New ->
- [io:format("New: ~p, ~p~n",[P,process_info(P)]) || P<-New],
- ct:fail(hanging_process)
+ [] ->
+ ok;
+ New ->
+ [io:format("New: ~p, ~p~n",[P,process_info(P)]) || P<-New],
+ ct:fail(hanging_process)
end,
ok.
-compile_beam_opts(doc) ->
- ["Take compiler options from beam in cover:compile_beam"];
-compile_beam_opts(suite) -> [];
+%% Take compiler options from beam in cover:compile_beam
compile_beam_opts(Config) when is_list(Config) ->
{ok, Cwd} = file:get_cwd(),
- ok = file:set_cwd(?config(priv_dir, Config)),
- IncDir = filename:join(?config(data_dir, Config),
- "included_functions"),
- File = filename:join([?config(data_dir, Config), "otp_11439", "t.erl"]),
+ ok = file:set_cwd(proplists:get_value(priv_dir, Config)),
+ IncDir = filename:join(proplists:get_value(data_dir, Config),
+ "included_functions"),
+ File = filename:join([proplists:get_value(data_dir, Config), "otp_11439", "t.erl"]),
%% use all compiler options allowed by cover:filter_options
%% i and d don't make sense when compiling from beam though
{ok, t} =
- compile:file(File, [{i, IncDir},
- {d, 'BOOL'},
- {d, 'MACRO', macro_defined},
- export_all,
- debug_info,
- return_errors]),
+ compile:file(File, [{i, IncDir},
+ {d, 'BOOL'},
+ {d, 'MACRO', macro_defined},
+ export_all,
+ debug_info,
+ return_errors]),
code:purge(t),
code:delete(t),
Exports =
- [{func1,0},
- {macro, 0},
- {exported,0},
- {nonexported,0},
- {module_info,0},
- {module_info,1}],
+ [{func1,0},
+ {macro, 0},
+ {exported,0},
+ {nonexported,0},
+ {module_info,0},
+ {module_info,1}],
Exports = t:module_info(exports),
{ok, t} = cover:compile_beam("t"),
Exports = t:module_info(exports),
@@ -1666,12 +1607,10 @@ compile_beam_opts(Config) when is_list(Config) ->
ok = file:set_cwd(Cwd),
ok.
-analyse_no_beam(doc) ->
- ["Don't crash if beam is not available"];
-analyse_no_beam(suite) -> [];
+%% Don't crash if beam is not available
analyse_no_beam(Config) when is_list(Config) ->
{ok, Cwd} = file:get_cwd(),
- ok = file:set_cwd(?config(data_dir, Config)),
+ ok = file:set_cwd(proplists:get_value(data_dir, Config)),
code:purge(t),
code:delete(t),
@@ -1709,8 +1648,8 @@ analyse_no_beam(Config) when is_list(Config) ->
%% file in this situation. The test below tests that this bug is
%% corrected.
line_0(Config) ->
- ok = file:set_cwd(filename:join(?config(data_dir, Config),
- "include_eunit_hrl")),
+ ok = file:set_cwd(filename:join(proplists:get_value(data_dir, Config),
+ "include_eunit_hrl")),
{ok, cover_inc_eunit} = compile:file(cover_inc_eunit,[debug_info]),
{ok, cover_inc_eunit} = cover:compile_beam(cover_inc_eunit),
{ok, CovOut} = cover:analyse_to_file(cover_inc_eunit),
@@ -1725,14 +1664,14 @@ line_0(Config) ->
%% OTP-13200: Return error instead of crashing when trying to compile
%% a beam which has no 'file' attribute.
compile_beam_no_file(Config) ->
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
Dir = filename:join(PrivDir,"compile_beam_no_file"),
ok = filelib:ensure_dir(filename:join(Dir,"*")),
code:add_patha(Dir),
Str = lists:concat(
- ["-module(nofile).\n"
- "-compile(export_all).\n"
- "foo() -> ok.\n"]),
+ ["-module(nofile).\n"
+ "-compile(export_all).\n"
+ "foo() -> ok.\n"]),
TT = do_scan(Str),
Forms = [ begin {ok,Y} = erl_parse:parse_form(X),Y end || X <- TT ],
{ok,_,Bin} = compile:forms(Forms,[debug_info]),
@@ -1748,8 +1687,7 @@ do_scan(Str) ->
{done,{ok,T,_},C} = erl_scan:tokens([],Str,0),
[ T | do_scan(C) ].
-otp_13277(doc) ->
- ["PR 856. Fix a bc bug."];
+%% PR 856. Fix a bc bug.
otp_13277(Config) ->
Test = <<"-module(t).
-export([t/0]).
@@ -1761,9 +1699,24 @@ otp_13277(Config) ->
t() ->
pad(<<\"hi\">>, 2).
">>,
- ?line File = cc_mod(t, Test, Config),
- ?line <<"hi##">> = t:t(),
- ?line ok = file:delete(File),
+ File = cc_mod(t, Test, Config),
+ <<"hi##">> = t:t(),
+ ok = file:delete(File),
+ ok.
+
+%% Test general expressions in a binary comprehension.
+otp_13289(Config) ->
+ Test = <<"-module(t).
+ -export([t/0]).
+
+ t() ->
+ << (id(<<I>>)) || I <- [1,2,3] >>.
+
+ id(I) -> I.
+ ">>,
+ File = cc_mod(t, Test, Config),
+ <<1,2,3>> = t:t(),
+ ok = file:delete(File),
ok.
%%--Auxiliary------------------------------------------------------------
@@ -1780,7 +1733,7 @@ analyse_expr(Expr, Config) ->
cc_mod(M, Binary, Config) ->
{ok, Dir} = file:get_cwd(),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ok = file:set_cwd(PrivDir),
File = atom_to_list(M) ++ ".erl",
try
@@ -1792,7 +1745,7 @@ cc_mod(M, Binary, Config) ->
c_mod(M, Binary, Config) ->
{ok, Dir} = file:get_cwd(),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ok = file:set_cwd(PrivDir),
File = atom_to_list(M) ++ ".erl",
try
@@ -1815,12 +1768,12 @@ lsfiles(Dir) ->
files(Files, Ext) ->
lists:filter(fun(File) ->
- case filename:extension(File) of
- Ext -> true;
- _ -> false
- end
- end,
- Files).
+ case filename:extension(File) of
+ Ext -> true;
+ _ -> false
+ end
+ end,
+ Files).
remove([File|Files]) ->
ok = file:delete(File),
@@ -1837,9 +1790,9 @@ decompile([]) ->
is_unloaded(What) ->
if
- is_list(What) -> true;
- What==non_existing -> true;
- true -> false
+ is_list(What) -> true;
+ What==non_existing -> true;
+ true -> false
end.
check_f_calls(F1,F2) ->
@@ -1849,18 +1802,18 @@ check_f_calls(F1,F2) ->
cover_which_nodes(Expected) ->
case cover:which_nodes() of
- Expected ->
- ok;
- Other ->
- {Time,ok} = timer:tc(fun Retry() ->
- case cover:which_nodes() of
- Expected -> ok;
- _ ->
- ?t:sleep(100),
- Retry()
- end
- end),
- io:format("~p ms before cover:which_nodes() returned ~p",
- [Time,Expected]),
- Expected = Other
+ Expected ->
+ ok;
+ Other ->
+ {Time,ok} = timer:tc(fun Retry() ->
+ case cover:which_nodes() of
+ Expected -> ok;
+ _ ->
+ timer:sleep(100),
+ Retry()
+ end
+ end),
+ io:format("~p ms before cover:which_nodes() returned ~p",
+ [Time,Expected]),
+ Expected = Other
end.
diff --git a/lib/tools/test/cover_SUITE_data/d.erl b/lib/tools/test/cover_SUITE_data/d.erl
index 696e27e49b..b1d8ebd62e 100644
--- a/lib/tools/test/cover_SUITE_data/d.erl
+++ b/lib/tools/test/cover_SUITE_data/d.erl
@@ -6,7 +6,7 @@
size/0]).
-export([init/0]). % spawn
--record(person, {name, age, location, moved=false}).
+-record(person, {name, age :: integer(), location, moved=false :: boolean()}).
%%%----------------------------------------------------------------------
%%% User interface functions
diff --git a/lib/tools/test/cprof_SUITE.erl b/lib/tools/test/cprof_SUITE.erl
index 7b22dea7ed..9cbc27fb17 100644
--- a/lib/tools/test/cprof_SUITE.erl
+++ b/lib/tools/test/cprof_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,9 +42,9 @@
-define(config(A,B),config(A,B)).
-export([config/2]).
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-endif.
-
+
-ifdef(debug).
-ifdef(STANDALONE).
-define(line, erlang:display({?MODULE,?LINE}), ).
@@ -56,7 +56,7 @@
-endif.
-define(dbgformat(A,B),noop).
-endif.
-
+
-ifdef(STANDALONE).
config(priv_dir, _) ->
".";
@@ -64,69 +64,43 @@ config(data_dir, _) ->
"cprof_SUITE_data".
-else.
%% When run in test server.
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2,
- not_run/1]).
+-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2,
+ not_run/1]).
-export([basic/1, on_load/1, modules/1]).
-
+
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(test_server:seconds(30)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
+end_per_testcase(_Case, _Config) ->
erlang:trace_pattern({'_','_','_'}, false, [local,meta,call_count]),
erlang:trace_pattern(on_load, false, [local,meta,call_count]),
erlang:trace(all, false, [all]),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,30}}].
all() ->
case test_server:is_native(cprof_SUITE) of
- true -> [not_run];
- false -> [basic, on_load, modules]
+ true -> [not_run];
+ false -> [basic, on_load, modules]
end.
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
not_run(Config) when is_list(Config) ->
{skipped,"Native code"}.
-basic(suite) ->
- [];
-basic(doc) ->
- ["Tests basic profiling"];
+%% Tests basic profiling
basic(Config) when is_list(Config) ->
basic_test().
-on_load(suite) ->
- [];
-on_load(doc) ->
- ["Tests profiling of unloaded module"];
+%% Tests profiling of unloaded module
on_load(Config) when is_list(Config) ->
on_load_test(Config).
-modules(suite) ->
- [];
-modules(doc) ->
- ["Tests profiling of several modules"];
+%% Tests profiling of several modules
modules(Config) when is_list(Config) ->
modules_test(Config).
@@ -137,164 +111,163 @@ modules(Config) when is_list(Config) ->
%%%
basic_test() ->
- ?line M = 1000,
+ M = 1000,
%%
- ?line M2 = M*2,
- ?line M3 = M*3,
- ?line M2__1 = M2 + 1,
- ?line M3__1 = M3 + 1,
- ?line N = cprof:stop(),
+ M2 = M*2,
+ M3 = M*3,
+ M2__1 = M2 + 1,
+ M3__1 = M3 + 1,
+ N = cprof:stop(),
%%
- ?line 2 = cprof:start(?MODULE, seq_r),
- ?line 1 = cprof:start(?MODULE, seq, 3),
- ?line L = seq(1, M, fun succ/1),
- ?line Lr = seq_r(1, M, fun succ/1),
- ?line L = lists:reverse(Lr),
+ 2 = cprof:start(?MODULE, seq_r),
+ 1 = cprof:start(?MODULE, seq, 3),
+ L = seq(1, M, fun succ/1),
+ Lr = seq_r(1, M, fun succ/1),
+ L = lists:reverse(Lr),
%%
- ?line io:format("~p~n~p~n~p~n",
- [erlang:trace_info({?MODULE,sec_r,3}, all),
- erlang:trace_info({?MODULE,sec_r,4}, all),
- erlang:trace_info({?MODULE,sec,3}, all)]),
+ io:format("~p~n~p~n~p~n",
+ [erlang:trace_info({?MODULE,sec_r,3}, all),
+ erlang:trace_info({?MODULE,sec_r,4}, all),
+ erlang:trace_info({?MODULE,sec,3}, all)]),
%%
- ?line ModAna1 = {?MODULE,M2__1,[{{?MODULE,seq_r,4},M},
- {{?MODULE,seq,3},M},
- {{?MODULE,seq_r,3},1}]},
- ?line ModAna1 = cprof:analyse(?MODULE,0),
- ?line {M2__1, [ModAna1]} = cprof:analyse(),
- ?line ModAna1 = cprof:analyse(?MODULE, 1),
- ?line {M2__1, [ModAna1]} = cprof:analyse(1),
+ ModAna1 = {?MODULE,M2__1,[{{?MODULE,seq_r,4},M},
+ {{?MODULE,seq,3},M},
+ {{?MODULE,seq_r,3},1}]},
+ ModAna1 = cprof:analyse(?MODULE,0),
+ {M2__1, [ModAna1]} = cprof:analyse(),
+ ModAna1 = cprof:analyse(?MODULE, 1),
+ {M2__1, [ModAna1]} = cprof:analyse(1),
%%
- ?line ModAna2 = {?MODULE,M2__1,[{{?MODULE,seq_r,4},M},
- {{?MODULE,seq,3},M}]},
- ?line ModAna2 = cprof:analyse(?MODULE, 2),
- ?line {M2__1, [ModAna2]} = cprof:analyse(2),
+ ModAna2 = {?MODULE,M2__1,[{{?MODULE,seq_r,4},M},
+ {{?MODULE,seq,3},M}]},
+ ModAna2 = cprof:analyse(?MODULE, 2),
+ {M2__1, [ModAna2]} = cprof:analyse(2),
%%
2 = cprof:pause(?MODULE, seq_r),
- ?line L = seq(1, M, fun succ/1),
- ?line Lr = seq_r(1, M, fun succ/1),
+ L = seq(1, M, fun succ/1),
+ Lr = seq_r(1, M, fun succ/1),
%%
- ?line ModAna3 = {?MODULE,M3__1,[{{?MODULE,seq,3},M2},
- {{?MODULE,seq_r,4},M},
- {{?MODULE,seq_r,3},1}]},
- ?line ModAna3 = cprof:analyse(?MODULE),
+ ModAna3 = {?MODULE,M3__1,[{{?MODULE,seq,3},M2},
+ {{?MODULE,seq_r,4},M},
+ {{?MODULE,seq_r,3},1}]},
+ ModAna3 = cprof:analyse(?MODULE),
%%
- ?line N = cprof:pause(),
- ?line L = seq(1, M, fun succ/1),
- ?line Lr = seq_r(1, M, fun succ/1),
+ N = cprof:pause(),
+ L = seq(1, M, fun succ/1),
+ Lr = seq_r(1, M, fun succ/1),
%%
- ?line {M3__1, [ModAna3]} = cprof:analyse(),
+ {M3__1, [ModAna3]} = cprof:analyse(),
%%
- ?line N = cprof:restart(),
- ?line L = seq(1, M, fun succ/1),
- ?line Lr = seq_r(1, M, fun succ/1),
+ N = cprof:restart(),
+ L = seq(1, M, fun succ/1),
+ Lr = seq_r(1, M, fun succ/1),
%%
- ?line ModAna1 = cprof:analyse(?MODULE),
+ ModAna1 = cprof:analyse(?MODULE),
%%
- ?line N = cprof:stop(),
- ?line {?MODULE,0,[]} = cprof:analyse(?MODULE),
- ?line {0,[]} = cprof:analyse(),
+ N = cprof:stop(),
+ {?MODULE,0,[]} = cprof:analyse(?MODULE),
+ {0,[]} = cprof:analyse(),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
on_load_test(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "cprof_SUITE_test"),
- ?line Module = cprof_SUITE_test,
- ?line M = 1000,
+ Priv = proplists:get_value(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "cprof_SUITE_test"),
+ Module = cprof_SUITE_test,
+ M = 1000,
%%
- ?line M2 = M*2,
- ?line M2__1 = M2 + 1,
- ?line N1 = cprof:start(),
+ M2 = M*2,
+ M2__1 = M2 + 1,
+ N1 = cprof:start(),
- ?line {ok,Module} = c:c(File, [{outdir,Priv}]),
+ {ok,Module} = c:c(File, [{outdir,Priv}]),
%% If this system is hipe-enabled, the loader may have called module_info/1
%% when Module was loaded above. Reset the call count to avoid seeing
%% the call in the analysis below.
- ?line 1 = cprof:restart(Module, module_info, 1),
-
- ?line L = Module:seq(1, M, fun succ/1),
- ?line Lr = Module:seq_r(1, M, fun succ/1),
- ?line Lr = lists:reverse(L),
- ?line N2 = cprof:pause(),
- ?line N3 = cprof:pause(Module),
- ?line {Module,M2__1,[{{Module,seq_r,4},M},
- {{Module,seq,3},M},
- {{Module,seq_r,3},1}]} = cprof:analyse(Module),
- ?line io:format("~p ~p ~p~n", [N1, N2, N3]),
- ?line code:purge(Module),
- ?line code:delete(Module),
- ?line N4 = N2 - N3,
+ 1 = cprof:restart(Module, module_info, 1),
+
+ L = Module:seq(1, M, fun succ/1),
+ Lr = Module:seq_r(1, M, fun succ/1),
+ Lr = lists:reverse(L),
+ N2 = cprof:pause(),
+ N3 = cprof:pause(Module),
+ {Module,M2__1,[{{Module,seq_r,4},M},
+ {{Module,seq,3},M},
+ {{Module,seq_r,3},1}]} = cprof:analyse(Module),
+ io:format("~p ~p ~p~n", [N1, N2, N3]),
+ code:purge(Module),
+ code:delete(Module),
+ N4 = N2 - N3,
%%
- ?line N4 = cprof:restart(),
- ?line {ok,Module} = c:c(File, [{outdir,Priv}]),
- ?line L = Module:seq(1, M, fun succ/1),
- ?line Lr = Module:seq_r(1, M, fun succ/1),
- ?line L = seq(1, M, fun succ/1),
- ?line Lr = seq_r(1, M, fun succ/1),
- ?line N2 = cprof:pause(),
- ?line {Module,0,[]} = cprof:analyse(Module),
- ?line M_1 = M - 1,
- ?line M4__4 = M*4 - 4,
- ?line M10_7 = M*10 - 7,
- ?line {?MODULE,M10_7,[{{?MODULE,succ,1},M4__4},
- {{?MODULE,seq_r,4},M},
- {{?MODULE,seq,3},M},
- {{?MODULE,'-on_load_test/1-fun-5-',1},M_1},
- {{?MODULE,'-on_load_test/1-fun-4-',1},M_1},
- {{?MODULE,'-on_load_test/1-fun-3-',1},M_1},
- {{?MODULE,'-on_load_test/1-fun-2-',1},M_1},
- {{?MODULE,seq_r,3},1}]}
- = cprof:analyse(?MODULE),
- ?line N2 = cprof:stop(),
+ N4 = cprof:restart(),
+ {ok,Module} = c:c(File, [{outdir,Priv}]),
+ L = Module:seq(1, M, fun succ/1),
+ Lr = Module:seq_r(1, M, fun succ/1),
+ L = seq(1, M, fun succ/1),
+ Lr = seq_r(1, M, fun succ/1),
+ N2 = cprof:pause(),
+ {Module,0,[]} = cprof:analyse(Module),
+ M_1 = M - 1,
+ M4__4 = M*4 - 4,
+ M10_7 = M*10 - 7,
+ {?MODULE,M10_7,[{{?MODULE,succ,1},M4__4},
+ {{?MODULE,seq_r,4},M},
+ {{?MODULE,seq,3},M},
+ {{?MODULE,'-on_load_test/1-fun-5-',1},M_1},
+ {{?MODULE,'-on_load_test/1-fun-4-',1},M_1},
+ {{?MODULE,'-on_load_test/1-fun-3-',1},M_1},
+ {{?MODULE,'-on_load_test/1-fun-2-',1},M_1},
+ {{?MODULE,seq_r,3},1}]}
+ = cprof:analyse(?MODULE),
+ N2 = cprof:stop(),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
modules_test(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "cprof_SUITE_test"),
- ?line Module = cprof_SUITE_test,
- ?line {ok,Module} = c:c(File, [{outdir,Priv}]),
- ?line M = 10,
+ Priv = proplists:get_value(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "cprof_SUITE_test"),
+ Module = cprof_SUITE_test,
+ {ok,Module} = c:c(File, [{outdir,Priv}]),
+ M = 10,
%%
- ?line M2 = M*2,
- ?line M2__1 = M2 + 1,
- ?line erlang:yield(),
- ?line N = cprof:start(),
- ?line L = Module:seq(1, M, fun succ/1),
- ?line Lr = Module:seq_r(1, M, fun succ/1),
- ?line L = seq(1, M, fun succ/1),
- ?line Lr = seq_r(1, M, fun succ/1),
- ?line N = cprof:pause(),
- ?line Lr = lists:reverse(L),
- ?line M_1 = M - 1,
- ?line M4_4 = M*4 - 4,
- ?line M10_7 = M*10 - 7,
- ?line M2__1 = M*2 + 1,
- ?line {Tot,ModList} = cprof:analyse(),
- ?line {value,{?MODULE,M10_7,[{{?MODULE,succ,1},M4_4},
- {{?MODULE,seq_r,4},M},
- {{?MODULE,seq,3},M},
- {{?MODULE,'-modules_test/1-fun-3-',1},M_1},
- {{?MODULE,'-modules_test/1-fun-2-',1},M_1},
- {{?MODULE,'-modules_test/1-fun-1-',1},M_1},
- {{?MODULE,'-modules_test/1-fun-0-',1},M_1},
- {{?MODULE,seq_r,3},1}]}} =
- lists:keysearch(?MODULE, 1, ModList),
- ?line {value,{Module,M2__1,[{{Module,seq_r,4},M},
- {{Module,seq,3},M},
- {{Module,seq_r,3},1}]}} =
- lists:keysearch(Module, 1, ModList),
- ?line Tot = lists:foldl(fun ({_,C,_}, A) -> C+A end, 0, ModList),
- ?line {cprof,_,Prof} = cprof:analyse(cprof),
- ?line {value,{{cprof,pause,0},1}} =
- lists:keysearch({cprof,pause,0}, 1, Prof),
- ?line N = cprof:stop(),
+ M2 = M*2,
+ M2__1 = M2 + 1,
+ erlang:yield(),
+ N = cprof:start(),
+ L = Module:seq(1, M, fun succ/1),
+ Lr = Module:seq_r(1, M, fun succ/1),
+ L = seq(1, M, fun succ/1),
+ Lr = seq_r(1, M, fun succ/1),
+ N = cprof:pause(),
+ Lr = lists:reverse(L),
+ M_1 = M - 1,
+ M4_4 = M*4 - 4,
+ M10_7 = M*10 - 7,
+ M2__1 = M*2 + 1,
+ {Tot,ModList} = cprof:analyse(),
+ {value,{?MODULE,M10_7,[{{?MODULE,succ,1},M4_4},
+ {{?MODULE,seq_r,4},M},
+ {{?MODULE,seq,3},M},
+ {{?MODULE,'-modules_test/1-fun-3-',1},M_1},
+ {{?MODULE,'-modules_test/1-fun-2-',1},M_1},
+ {{?MODULE,'-modules_test/1-fun-1-',1},M_1},
+ {{?MODULE,'-modules_test/1-fun-0-',1},M_1},
+ {{?MODULE,seq_r,3},1}]}} =
+ lists:keysearch(?MODULE, 1, ModList),
+ {value,{Module,M2__1,[{{Module,seq_r,4},M},
+ {{Module,seq,3},M},
+ {{Module,seq_r,3},1}]}} =
+ lists:keysearch(Module, 1, ModList),
+ Tot = lists:foldl(fun ({_,C,_}, A) -> C+A end, 0, ModList),
+ {cprof,_,Prof} = cprof:analyse(cprof),
+ {value,{{cprof,pause,0},1}} = lists:keysearch({cprof,pause,0}, 1, Prof),
+ N = cprof:stop(),
ok.
@@ -303,7 +276,6 @@ modules_test(Config) ->
%% Local helpers
-
%% Stack recursive seq
seq(Stop, Stop, Succ) when is_function(Succ) ->
[Stop];
@@ -322,6 +294,5 @@ seq_r(Start, Stop, Succ, R) ->
seq_r(Succ(Start), Stop, Succ, [Start | R]).
-
%% Successor
succ(X) -> X+1.
diff --git a/lib/tools/test/emacs_SUITE.erl b/lib/tools/test/emacs_SUITE.erl
index 0c2d077e5d..77a8813db5 100644
--- a/lib/tools/test/emacs_SUITE.erl
+++ b/lib/tools/test/emacs_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/tools/test/emem_SUITE.erl b/lib/tools/test/emem_SUITE.erl
index 95cda98558..6dca7f6739 100644
--- a/lib/tools/test/emem_SUITE.erl
+++ b/lib/tools/test/emem_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,15 +19,11 @@
%%
-module(emem_SUITE).
-%%-define(line_trace, 1).
-
--export([init_per_suite/1, end_per_suite/1,
+-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2,
+ init_per_suite/1, end_per_suite/1,
receive_and_save_trace/2, send_trace/2]).
-
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2]).
-
-export([live_node/1,
'sparc_sunos5.8_32b_emt2.0'/1,
'pc_win2000_32b_emt2.0'/1,
@@ -42,10 +38,7 @@
'sparc_sunos5.8_64b_emt1.0'/1]).
-include_lib("kernel/include/file.hrl").
-
--include_lib("test_server/include/test_server.hrl").
-
--define(DEFAULT_TIMEOUT, ?t:minutes(5)).
+-include_lib("common_test/include/ct.hrl").
-define(EMEM_64_32_COMMENT,
"64 bit trace; this build of emem can only handle 32 bit traces").
@@ -62,28 +55,19 @@
exit_code}).
%%
-%%
%% Exported suite functions
%%
-%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,5}}].
all() ->
- case is_debug_compiled() of
- true -> {skip, "Not run when debug compiled"};
- false -> test_cases()
+ case test_server:is_debug() of
+ true -> {skip, "Not run when debug compiled"};
+ false -> test_cases()
end.
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
test_cases() ->
[live_node, 'sparc_sunos5.8_32b_emt2.0',
@@ -99,31 +83,26 @@ test_cases() ->
init_per_testcase(Case, Config) when is_list(Config) ->
case maybe_skip(Config) of
- {skip, _}=Skip -> Skip;
+ {skip, _}=Skip ->
+ Skip;
ok ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
-
%% Until emem is completely stable we run these tests in a working
%% directory with an ignore_core_files file which will make the
%% search for core files ignore cores generated by this suite.
- ignore_cores:setup(?MODULE,
- Case,
- [{watchdog, Dog}, {testcase, Case} | Config])
+ ignore_cores:setup(?MODULE, Case, [{testcase, Case}|Config])
end.
end_per_testcase(_Case, Config) when is_list(Config) ->
ignore_cores:restore(Config),
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
maybe_skip(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
case filelib:is_dir(DataDir) of
false ->
{skip, "No data directory"};
true ->
- case ?config(emem, Config) of
+ case proplists:get_value(emem, Config) of
undefined ->
{skip, "emem not found"};
_ ->
@@ -159,13 +138,11 @@ end_per_suite(Config) when is_list(Config) ->
%%
%%
-live_node(doc) -> [];
-live_node(suite) -> [];
live_node(Config) when is_list(Config) ->
- ?line {ok, EmuFlag, Port} = start_emem(Config),
- ?line Nodename = mk_nodename(Config),
- ?line {ok, Node} = start_node(Nodename, EmuFlag),
- ?line NP = spawn(Node,
+ {ok, EmuFlag, Port} = start_emem(Config),
+ Nodename = mk_nodename(Config),
+ {ok, Node} = start_node(Nodename, EmuFlag),
+ NP = spawn(Node,
fun () ->
receive go -> ok end,
I = spawn(fun () -> ignorer end),
@@ -187,246 +164,216 @@ live_node(Config) when is_list(Config) ->
GC(),
GC()
end),
- ?line MRef = erlang:monitor(process, NP),
+ MRef = erlang:monitor(process, NP),
NP ! go,
- ?line receive
+ receive
{'DOWN', MRef, process, NP, Reason} ->
- ?line spawn(Node, fun () -> halt(17) end),
- ?line normal = Reason
+ spawn(Node, fun () -> halt(17) end),
+ normal = Reason
end,
- ?line Res = get_emem_result(Port),
- ?line {ok, Hostname} = inet:gethostname(),
- ?line ShortHostname = short_hostname(Hostname),
- ?line {true, _} = has_prefix(Nodename, Res#emem_res.nodename),
- ?line ShortHostname = short_hostname(Res#emem_res.hostname),
- ?line Bits = case erlang:system_info(wordsize) of
- 4 -> ?line "32 bits";
- 8 -> ?line "64 bits"
+ Res = get_emem_result(Port),
+ {ok, Hostname} = inet:gethostname(),
+ ShortHostname = short_hostname(Hostname),
+ {true, _} = has_prefix(Nodename, Res#emem_res.nodename),
+ ShortHostname = short_hostname(Res#emem_res.hostname),
+ Bits = case erlang:system_info(wordsize) of
+ 4 -> "32 bits";
+ 8 -> "64 bits"
end,
- ?line Bits = Res#emem_res.word_size,
- ?line "17" = Res#emem_res.exit_code,
- ?line emem_comment(Config).
+ Bits = Res#emem_res.word_size,
+ "17" = Res#emem_res.exit_code,
+ emem_comment(Config).
-'sparc_sunos5.8_32b_emt2.0'(doc) -> [];
-'sparc_sunos5.8_32b_emt2.0'(suite) -> [];
'sparc_sunos5.8_32b_emt2.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "test_server" = Res#emem_res.nodename,
- ?line "gorbag" = Res#emem_res.hostname,
- ?line "17074" = Res#emem_res.pid,
- ?line "2005-01-14 17:28:37.881980" = Res#emem_res.start_time,
- ?line "2.0" = Res#emem_res.trace_version,
- ?line "32 bits" = Res#emem_res.word_size,
- ?line ["15",
- "2665739", "8992", "548986", "16131", "539994",
- "4334192", "1", "99", "15", "98",
- "0", "0", "49", "0", "49"] = Res#emem_res.last_values,
- ?line ["5972061", "9662",
- "7987824", "5",
- "2375680", "3"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config).
-
-'pc_win2000_32b_emt2.0'(doc) -> [];
-'pc_win2000_32b_emt2.0'(suite) -> [];
+ Res = run_emem_on_casefile(Config),
+ "test_server" = Res#emem_res.nodename,
+ "gorbag" = Res#emem_res.hostname,
+ "17074" = Res#emem_res.pid,
+ "2005-01-14 17:28:37.881980" = Res#emem_res.start_time,
+ "2.0" = Res#emem_res.trace_version,
+ "32 bits" = Res#emem_res.word_size,
+ ["15", "2665739", "8992", "548986", "16131", "539994",
+ "4334192", "1", "99", "15", "98",
+ "0", "0", "49", "0", "49"] = Res#emem_res.last_values,
+ ["5972061", "9662", "7987824", "5",
+ "2375680", "3"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config).
+
'pc_win2000_32b_emt2.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "test_server" = Res#emem_res.nodename,
- ?line "E-788FCF5191B54" = Res#emem_res.hostname,
- ?line "504" = Res#emem_res.pid,
- ?line "2005-01-24 17:27:28.224000" = Res#emem_res.start_time,
- ?line "2.0" = Res#emem_res.trace_version,
- ?line "32 bits" = Res#emem_res.word_size,
- ?line ["11",
- "2932575", "8615", "641087", "68924", "632472"]
+ Res = run_emem_on_casefile(Config),
+ "test_server" = Res#emem_res.nodename,
+ "E-788FCF5191B54" = Res#emem_res.hostname,
+ "504" = Res#emem_res.pid,
+ "2005-01-24 17:27:28.224000" = Res#emem_res.start_time,
+ "2.0" = Res#emem_res.trace_version,
+ "32 bits" = Res#emem_res.word_size,
+ ["11", "2932575", "8615", "641087", "68924", "632472"]
= Res#emem_res.last_values,
- ?line ["5434206", "9285"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config).
+ ["5434206", "9285"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config).
-'pc.smp_linux2.2.19pre17_32b_emt2.0'(doc) -> [];
-'pc.smp_linux2.2.19pre17_32b_emt2.0'(suite) -> [];
'pc.smp_linux2.2.19pre17_32b_emt2.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "test_server" = Res#emem_res.nodename,
- ?line "four-roses" = Res#emem_res.hostname,
- ?line "20689" = Res#emem_res.pid,
- ?line "2005-01-20 13:11:26.143077" = Res#emem_res.start_time,
- ?line "2.0" = Res#emem_res.trace_version,
- ?line "32 bits" = Res#emem_res.word_size,
- ?line ["49",
- "2901817", "9011", "521610", "10875", "512599",
- "5392096", "2", "120", "10", "118",
- "0", "0", "59", "0", "59"] = Res#emem_res.last_values,
- ?line ["6182918", "9681",
- "9062112", "6",
- "2322432", "3"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config).
-
-
-'powerpc_darwin7.7.0_32b_emt2.0'(doc) -> [];
-'powerpc_darwin7.7.0_32b_emt2.0'(suite) -> [];
+ Res = run_emem_on_casefile(Config),
+ "test_server" = Res#emem_res.nodename,
+ "four-roses" = Res#emem_res.hostname,
+ "20689" = Res#emem_res.pid,
+ "2005-01-20 13:11:26.143077" = Res#emem_res.start_time,
+ "2.0" = Res#emem_res.trace_version,
+ "32 bits" = Res#emem_res.word_size,
+ ["49", "2901817", "9011", "521610", "10875", "512599",
+ "5392096", "2", "120", "10", "118",
+ "0", "0", "59", "0", "59"] = Res#emem_res.last_values,
+ ["6182918", "9681",
+ "9062112", "6",
+ "2322432", "3"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config).
+
+
'powerpc_darwin7.7.0_32b_emt2.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "test_server" = Res#emem_res.nodename,
- ?line "grima" = Res#emem_res.hostname,
- ?line "13021" = Res#emem_res.pid,
- ?line "2005-01-20 15:08:17.568668" = Res#emem_res.start_time,
- ?line "2.0" = Res#emem_res.trace_version,
- ?line "32 bits" = Res#emem_res.word_size,
- ?line ["9",
- "2784323", "8641", "531105", "15893", "522464"]
+ Res = run_emem_on_casefile(Config),
+ "test_server" = Res#emem_res.nodename,
+ "grima" = Res#emem_res.hostname,
+ "13021" = Res#emem_res.pid,
+ "2005-01-20 15:08:17.568668" = Res#emem_res.start_time,
+ "2.0" = Res#emem_res.trace_version,
+ "32 bits" = Res#emem_res.word_size,
+ ["9", "2784323", "8641", "531105", "15893", "522464"]
= Res#emem_res.last_values,
- ?line ["6150376", "9311"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config).
+ ["6150376", "9311"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config).
-'alpha_osf1v5.1_64b_emt2.0'(doc) -> [];
-'alpha_osf1v5.1_64b_emt2.0'(suite) -> [];
'alpha_osf1v5.1_64b_emt2.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "test_server" = Res#emem_res.nodename,
- ?line "thorin" = Res#emem_res.hostname,
- ?line "224630" = Res#emem_res.pid,
- ?line "2005-01-20 22:38:01.299632" = Res#emem_res.start_time,
- ?line "2.0" = Res#emem_res.trace_version,
- ?line "64 bits" = Res#emem_res.word_size,
- ?line case Res#emem_res.max_word_size of
- "32 bits" ->
- ?line emem_comment(Config, ?EMEM_64_32_COMMENT);
- "64 bits" ->
- ?line ["22",
- "6591992", "8625", "516785", "14805", "508160",
- "11429184", "5", "127", "254", "122",
- "0", "0", "61", "0", "61"] = Res#emem_res.last_values,
- ?line ["7041775", "9295",
- "11593024", "7",
- "2097152", "3"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config)
- end.
-
-'sparc_sunos5.8_64b_emt2.0'(doc) -> [];
-'sparc_sunos5.8_64b_emt2.0'(suite) -> [];
+ Res = run_emem_on_casefile(Config),
+ "test_server" = Res#emem_res.nodename,
+ "thorin" = Res#emem_res.hostname,
+ "224630" = Res#emem_res.pid,
+ "2005-01-20 22:38:01.299632" = Res#emem_res.start_time,
+ "2.0" = Res#emem_res.trace_version,
+ "64 bits" = Res#emem_res.word_size,
+ case Res#emem_res.max_word_size of
+ "32 bits" ->
+ emem_comment(Config, ?EMEM_64_32_COMMENT);
+ "64 bits" ->
+ ["22",
+ "6591992", "8625", "516785", "14805", "508160",
+ "11429184", "5", "127", "254", "122",
+ "0", "0", "61", "0", "61"] = Res#emem_res.last_values,
+ ["7041775", "9295",
+ "11593024", "7",
+ "2097152", "3"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config)
+ end.
+
'sparc_sunos5.8_64b_emt2.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "test_server" = Res#emem_res.nodename,
- ?line "gorbag" = Res#emem_res.hostname,
- ?line "10907" = Res#emem_res.pid,
- ?line "2005-01-20 13:48:34.677068" = Res#emem_res.start_time,
- ?line "2.0" = Res#emem_res.trace_version,
- ?line "64 bits" = Res#emem_res.word_size,
- ?line case Res#emem_res.max_word_size of
- "32 bits" ->
- ?line emem_comment(Config, ?EMEM_64_32_COMMENT);
- "64 bits" ->
- ?line ["16",
- "5032887", "8657", "530635", "14316", "521978",
- "8627140", "5", "139", "19", "134",
- "0", "0", "67", "0", "67"] = Res#emem_res.last_values,
- ?line ["11695070", "9324",
- "16360388", "10",
- "4136960", "3"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config)
- end.
-
-'sparc_sunos5.8_32b_emt1.0'(doc) -> [];
-'sparc_sunos5.8_32b_emt1.0'(suite) -> [];
+ Res = run_emem_on_casefile(Config),
+ "test_server" = Res#emem_res.nodename,
+ "gorbag" = Res#emem_res.hostname,
+ "10907" = Res#emem_res.pid,
+ "2005-01-20 13:48:34.677068" = Res#emem_res.start_time,
+ "2.0" = Res#emem_res.trace_version,
+ "64 bits" = Res#emem_res.word_size,
+ case Res#emem_res.max_word_size of
+ "32 bits" ->
+ emem_comment(Config, ?EMEM_64_32_COMMENT);
+ "64 bits" ->
+ ["16",
+ "5032887", "8657", "530635", "14316", "521978",
+ "8627140", "5", "139", "19", "134",
+ "0", "0", "67", "0", "67"] = Res#emem_res.last_values,
+ ["11695070", "9324",
+ "16360388", "10",
+ "4136960", "3"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config)
+ end.
+
'sparc_sunos5.8_32b_emt1.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "" = Res#emem_res.nodename,
- ?line "" = Res#emem_res.hostname,
- ?line "" = Res#emem_res.pid,
- ?line "" = Res#emem_res.start_time,
- ?line "1.0" = Res#emem_res.trace_version,
- ?line "32 bits" = Res#emem_res.word_size,
- ?line ["11",
- "2558261", "8643", "560610", "15325", "551967"]
+ Res = run_emem_on_casefile(Config),
+ "" = Res#emem_res.nodename,
+ "" = Res#emem_res.hostname,
+ "" = Res#emem_res.pid,
+ "" = Res#emem_res.start_time,
+ "1.0" = Res#emem_res.trace_version,
+ "32 bits" = Res#emem_res.word_size,
+ ["11", "2558261", "8643", "560610", "15325", "551967"]
= Res#emem_res.last_values,
- ?line ["2791121", "9317"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config).
+ ["2791121", "9317"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config).
-'pc_win2000_32b_emt1.0'(doc) -> [];
-'pc_win2000_32b_emt1.0'(suite) -> [];
'pc_win2000_32b_emt1.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "" = Res#emem_res.nodename,
- ?line "" = Res#emem_res.hostname,
- ?line "" = Res#emem_res.pid,
- ?line "" = Res#emem_res.start_time,
- ?line "1.0" = Res#emem_res.trace_version,
- ?line "32 bits" = Res#emem_res.word_size,
- ?line ["6",
- "2965248", "8614", "640897", "68903", "632283"]
+ Res = run_emem_on_casefile(Config),
+ "" = Res#emem_res.nodename,
+ "" = Res#emem_res.hostname,
+ "" = Res#emem_res.pid,
+ "" = Res#emem_res.start_time,
+ "1.0" = Res#emem_res.trace_version,
+ "32 bits" = Res#emem_res.word_size,
+ ["6", "2965248", "8614", "640897", "68903", "632283"]
= Res#emem_res.last_values,
- ?line ["3147090", "9283"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config).
+ ["3147090", "9283"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config).
-'powerpc_darwin7.7.0_32b_emt1.0'(doc) -> [];
-'powerpc_darwin7.7.0_32b_emt1.0'(suite) -> [];
'powerpc_darwin7.7.0_32b_emt1.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "" = Res#emem_res.nodename,
- ?line "" = Res#emem_res.hostname,
- ?line "" = Res#emem_res.pid,
- ?line "" = Res#emem_res.start_time,
- ?line "1.0" = Res#emem_res.trace_version,
- ?line "32 bits" = Res#emem_res.word_size,
- ?line ["8",
- "2852991", "8608", "529662", "15875", "521054"]
+ Res = run_emem_on_casefile(Config),
+ "" = Res#emem_res.nodename,
+ "" = Res#emem_res.hostname,
+ "" = Res#emem_res.pid,
+ "" = Res#emem_res.start_time,
+ "1.0" = Res#emem_res.trace_version,
+ "32 bits" = Res#emem_res.word_size,
+ ["8", "2852991", "8608", "529662", "15875", "521054"]
= Res#emem_res.last_values,
- ?line ["3173335", "9278"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config).
+ ["3173335", "9278"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config).
-'alpha_osf1v5.1_64b_emt1.0'(doc) -> [];
-'alpha_osf1v5.1_64b_emt1.0'(suite) -> [];
'alpha_osf1v5.1_64b_emt1.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "" = Res#emem_res.nodename,
- ?line "" = Res#emem_res.hostname,
- ?line "" = Res#emem_res.pid,
- ?line "" = Res#emem_res.start_time,
- ?line "1.0" = Res#emem_res.trace_version,
- ?line "64 bits" = Res#emem_res.word_size,
- ?line case Res#emem_res.max_word_size of
- "32 bits" ->
- ?line emem_comment(Config, ?EMEM_64_32_COMMENT);
- "64 bits" ->
- ?line ["22",
- "6820094", "8612", "515518", "14812", "506906"]
- = Res#emem_res.last_values,
- ?line ["7292413", "9282"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config)
- end.
-
-'sparc_sunos5.8_64b_emt1.0'(doc) -> [];
-'sparc_sunos5.8_64b_emt1.0'(suite) -> [];
+ Res = run_emem_on_casefile(Config),
+ "" = Res#emem_res.nodename,
+ "" = Res#emem_res.hostname,
+ "" = Res#emem_res.pid,
+ "" = Res#emem_res.start_time,
+ "1.0" = Res#emem_res.trace_version,
+ "64 bits" = Res#emem_res.word_size,
+ case Res#emem_res.max_word_size of
+ "32 bits" ->
+ emem_comment(Config, ?EMEM_64_32_COMMENT);
+ "64 bits" ->
+ ["22",
+ "6820094", "8612", "515518", "14812", "506906"]
+ = Res#emem_res.last_values,
+ ["7292413", "9282"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config)
+ end.
+
'sparc_sunos5.8_64b_emt1.0'(Config) when is_list(Config) ->
- ?line Res = run_emem_on_casefile(Config),
- ?line "" = Res#emem_res.nodename,
- ?line "" = Res#emem_res.hostname,
- ?line "" = Res#emem_res.pid,
- ?line "" = Res#emem_res.start_time,
- ?line "1.0" = Res#emem_res.trace_version,
- ?line "64 bits" = Res#emem_res.word_size,
- ?line case Res#emem_res.max_word_size of
- "32 bits" ->
- ?line emem_comment(Config, ?EMEM_64_32_COMMENT);
- "64 bits" ->
- ?line ["15",
- "4965746", "8234", "543940", "14443", "535706"]
- = Res#emem_res.last_values,
- ?line ["11697645", "8908"] = Res#emem_res.maximum,
- ?line "0" = Res#emem_res.exit_code,
- ?line emem_comment(Config)
- end.
+ Res = run_emem_on_casefile(Config),
+ "" = Res#emem_res.nodename,
+ "" = Res#emem_res.hostname,
+ "" = Res#emem_res.pid,
+ "" = Res#emem_res.start_time,
+ "1.0" = Res#emem_res.trace_version,
+ "64 bits" = Res#emem_res.word_size,
+ case Res#emem_res.max_word_size of
+ "32 bits" ->
+ emem_comment(Config, ?EMEM_64_32_COMMENT);
+ "64 bits" ->
+ ["15",
+ "4965746", "8234", "543940", "14443", "535706"]
+ = Res#emem_res.last_values,
+ ["11697645", "8908"] = Res#emem_res.maximum,
+ "0" = Res#emem_res.exit_code,
+ emem_comment(Config)
+ end.
%%
%%
@@ -444,84 +391,84 @@ receive_and_save_trace(PortNumber, FileName) when is_integer(PortNumber),
receive_loop(Socket, File) ->
receive
- {tcp, Socket, Data} ->
- ok = file:write(File, Data),
- receive_loop(Socket, File);
- {tcp_closed, Socket} ->
- file:close(File),
- ok;
- {tcp_error, Socket, Reason} ->
- file:close(File),
- {error, Reason}
+ {tcp, Socket, Data} ->
+ ok = file:write(File, Data),
+ receive_loop(Socket, File);
+ {tcp_closed, Socket} ->
+ file:close(File),
+ ok;
+ {tcp_error, Socket, Reason} ->
+ file:close(File),
+ {error, Reason}
end.
send_trace({Host, PortNumber}, FileName) when is_list(Host),
is_integer(PortNumber),
is_list(FileName) ->
- ?line {ok, F} = file:open(FileName, [read, compressed]),
- ?line {ok, S} = gen_tcp:connect(Host, PortNumber, [inet,{packet, 0}]),
- ?line send_loop(S, F);
+ {ok, F} = file:open(FileName, [read, compressed]),
+ {ok, S} = gen_tcp:connect(Host, PortNumber, [inet,{packet, 0}]),
+ send_loop(S, F);
send_trace(EmuFlag, FileName) when is_list(EmuFlag),
is_list(FileName) ->
- ?line ["+Mit", IpAddrStr, PortNoStr] = string:tokens(EmuFlag, " :"),
- ?line send_trace({IpAddrStr, list_to_integer(PortNoStr)}, FileName).
+ ["+Mit", IpAddrStr, PortNoStr] = string:tokens(EmuFlag, " :"),
+ send_trace({IpAddrStr, list_to_integer(PortNoStr)}, FileName).
send_loop(Socket, File) ->
- ?line case file:read(File, 128) of
- {ok, Data} ->
- ?line case gen_tcp:send(Socket, Data) of
- ok -> ?line send_loop(Socket, File);
- Error ->
- ?line gen_tcp:close(Socket),
- ?line file:close(File),
- Error
- end;
- eof ->
- ?line gen_tcp:close(Socket),
- ?line file:close(File),
- ?line ok;
- Error ->
- ?line gen_tcp:close(Socket),
- ?line file:close(File),
- ?line Error
- end.
+ case file:read(File, 128) of
+ {ok, Data} ->
+ case gen_tcp:send(Socket, Data) of
+ ok -> send_loop(Socket, File);
+ Error ->
+ gen_tcp:close(Socket),
+ file:close(File),
+ Error
+ end;
+ eof ->
+ gen_tcp:close(Socket),
+ file:close(File),
+ ok;
+ Error ->
+ gen_tcp:close(Socket),
+ file:close(File),
+ Error
+ end.
check_emem(Dir, Type) when is_atom(Type) ->
- ExeSuffix = case ?t:os_type() of
- {win32, _} -> ".exe";
- _ -> ""
- end,
+ ExeSuffix = case os:type() of
+ {win32, _} -> ".exe";
+ _ -> ""
+ end,
TypeSuffix = case Type of
- opt -> "";
- _ -> "." ++ atom_to_list(Type)
- end,
+ opt -> "";
+ _ -> "." ++ atom_to_list(Type)
+ end,
Emem = "emem" ++ TypeSuffix ++ ExeSuffix,
case check_file(filename:join([Dir, Emem])) of
- not_found -> ok;
- File ->
- Comment = case Type of
- opt -> "";
- _ -> "[emem " ++ atom_to_list(Type) ++ " compiled]"
- end,
- throw([{emem, File}, {emem_comment, Comment}])
+ not_found -> ok;
+ File ->
+ Comment = case Type of
+ opt -> "";
+ _ -> "[emem " ++ atom_to_list(Type) ++ " compiled]"
+ end,
+ throw([{emem, File}, {emem_comment, Comment}])
end.
check_dir(DirName) ->
case file:read_file_info(DirName) of
- {ok, #file_info {type = directory, access = A}} when A == read;
- A == read_write ->
- DirName;
- _ ->
- not_found
+ {ok, #file_info {type = directory, access = A}} when A == read;
+ A == read_write ->
+ DirName;
+ _ ->
+ not_found
end.
check_file(FileName) ->
case file:read_file_info(FileName) of
- {ok, #file_info {type = regular, access = A}} when A == read;
- A == read_write ->
- ?line FileName;
- _ ->
- ?line not_found
+ {ok, #file_info {type = regular, access = A}} when A == read;
+ A == read_write ->
+ FileName;
+ _ ->
+ not_found
end.
emem_comment(Config) when is_list(Config) ->
@@ -529,158 +476,158 @@ emem_comment(Config) when is_list(Config) ->
emem_comment(Config, ExtraComment)
when is_list(Config), is_list(ExtraComment) ->
- case {?config(emem_comment, Config), ExtraComment} of
- {"", ""} -> ?line ok;
- {"", XC} -> ?line {comment, XC};
- {EmemC, ""} -> ?line {comment, EmemC};
- {EmemC, XC} -> ?line {comment, EmemC ++ " " ++ XC}
+ case {proplists:get_value(emem_comment, Config), ExtraComment} of
+ {"", ""} -> ok;
+ {"", XC} -> {comment, XC};
+ {EmemC, ""} -> {comment, EmemC};
+ {EmemC, XC} -> {comment, EmemC ++ " " ++ XC}
end.
run_emem_on_casefile(Config) ->
- CaseName = atom_to_list(?config(testcase, Config)),
- ?line File = filename:join([?config(data_dir, Config), CaseName ++ ".gz"]),
- ?line case check_file(File) of
- not_found ->
- ?line ?t:fail({error, {filenotfound, File}});
- _ ->
- ?line ok
- end,
- ?line {ok, EmuFlag, Port} = start_emem(Config),
- ?line Parent = self(),
- ?line Ref = make_ref(),
- ?line spawn_link(fun () ->
- SRes = send_trace(EmuFlag, File),
- Parent ! {Ref, SRes}
- end),
- ?line Res = get_emem_result(Port),
- ?line receive
- {Ref, ok} ->
- ?line ok;
- {Ref, SendError} ->
- ?line ?t:format("Send result: ~p~n", [SendError])
- end,
- ?line Res.
+ CaseName = atom_to_list(proplists:get_value(testcase, Config)),
+ File = filename:join([proplists:get_value(data_dir, Config), CaseName ++ ".gz"]),
+ case check_file(File) of
+ not_found ->
+ ct:fail({error, {filenotfound, File}});
+ _ ->
+ ok
+ end,
+ {ok, EmuFlag, Port} = start_emem(Config),
+ Parent = self(),
+ Ref = make_ref(),
+ spawn_link(fun () ->
+ SRes = send_trace(EmuFlag, File),
+ Parent ! {Ref, SRes}
+ end),
+ Res = get_emem_result(Port),
+ receive
+ {Ref, ok} ->
+ ok;
+ {Ref, SendError} ->
+ io:format("Send result: ~p~n", [SendError])
+ end,
+ Res.
get_emem_result(Port) ->
- ?line {Res, LV} = get_emem_result(Port, {#emem_res{}, []}),
- ?line Res#emem_res{last_values = string:tokens(LV, " ")}.
+ {Res, LV} = get_emem_result(Port, {#emem_res{}, []}),
+ Res#emem_res{last_values = string:tokens(LV, " ")}.
get_emem_result(Port, {_EmemRes, _LastValues} = Res) ->
- ?line case get_emem_line(Port) of
- eof ->
- ?line Res;
- Line ->
- ?line get_emem_result(Port, parse_emem_line(Line, Res))
- end.
+ case get_emem_line(Port) of
+ eof ->
+ Res;
+ Line ->
+ get_emem_result(Port, parse_emem_line(Line, Res))
+ end.
parse_emem_main_header_footer_line(Line, {ER, LV} = Res) ->
%% Header
- ?line case has_prefix("> Nodename:", Line) of
- {true, NN} ->
- ?line throw({ER#emem_res{nodename = strip(NN)}, LV});
- false -> ?line ok
- end,
- ?line case has_prefix("> Hostname:", Line) of
- {true, HN} ->
- ?line throw({ER#emem_res{hostname = strip(HN)}, LV});
- false -> ?line ok
- end,
- ?line case has_prefix("> Pid:", Line) of
- {true, P} ->
- ?line throw({ER#emem_res{pid = strip(P)}, LV});
- false -> ?line ok
- end,
- ?line case has_prefix("> Start time (UTC):", Line) of
- {true, ST} ->
- ?line throw({ER#emem_res{start_time = strip(ST)}, LV});
- false -> ?line ok
- end,
- ?line case has_prefix("> Actual trace version:", Line) of
- {true, TV} ->
- ?line throw({ER#emem_res{trace_version = strip(TV)}, LV});
- false -> ?line ok
- end,
- ?line case has_prefix("> Maximum trace word size:", Line) of
- {true, MWS} ->
- ?line throw({ER#emem_res{max_word_size = strip(MWS)}, LV});
- false -> ?line ok
- end,
- ?line case has_prefix("> Actual trace word size:", Line) of
- {true, WS} ->
- ?line throw({ER#emem_res{word_size = strip(WS)}, LV});
- false -> ?line ok
- end,
+ case has_prefix("> Nodename:", Line) of
+ {true, NN} ->
+ throw({ER#emem_res{nodename = strip(NN)}, LV});
+ false -> ok
+ end,
+ case has_prefix("> Hostname:", Line) of
+ {true, HN} ->
+ throw({ER#emem_res{hostname = strip(HN)}, LV});
+ false -> ok
+ end,
+ case has_prefix("> Pid:", Line) of
+ {true, P} ->
+ throw({ER#emem_res{pid = strip(P)}, LV});
+ false -> ok
+ end,
+ case has_prefix("> Start time (UTC):", Line) of
+ {true, ST} ->
+ throw({ER#emem_res{start_time = strip(ST)}, LV});
+ false -> ok
+ end,
+ case has_prefix("> Actual trace version:", Line) of
+ {true, TV} ->
+ throw({ER#emem_res{trace_version = strip(TV)}, LV});
+ false -> ok
+ end,
+ case has_prefix("> Maximum trace word size:", Line) of
+ {true, MWS} ->
+ throw({ER#emem_res{max_word_size = strip(MWS)}, LV});
+ false -> ok
+ end,
+ case has_prefix("> Actual trace word size:", Line) of
+ {true, WS} ->
+ throw({ER#emem_res{word_size = strip(WS)}, LV});
+ false -> ok
+ end,
%% Footer
- ?line case has_prefix("> Maximum:", Line) of
- {true, M} ->
- ?line throw({ER#emem_res{maximum = string:tokens(M," ")}, LV});
- false -> ?line ok
- end,
- ?line case has_prefix("> Emulator exited with code:", Line) of
- {true, EC} ->
- ?line throw({ER#emem_res{exit_code = strip(EC)}, LV});
- false -> ?line ok
- end,
- ?line Res.
+ case has_prefix("> Maximum:", Line) of
+ {true, M} ->
+ throw({ER#emem_res{maximum = string:tokens(M," ")}, LV});
+ false -> ok
+ end,
+ case has_prefix("> Emulator exited with code:", Line) of
+ {true, EC} ->
+ throw({ER#emem_res{exit_code = strip(EC)}, LV});
+ false -> ok
+ end,
+ Res.
parse_emem_header_line(_Line, {_ER, _LV} = Res) ->
- ?line Res.
-
+ Res.
+
parse_emem_value_line(Line, {EmemRes, _OldLastValues}) ->
- ?line {EmemRes, Line}.
+ {EmemRes, Line}.
parse_emem_line("", Res) ->
- ?line Res;
+ Res;
parse_emem_line(Line, Res) ->
- ?line [Prefix | _] = Line,
+ [Prefix | _] = Line,
case Prefix of
- $> -> ?line catch parse_emem_main_header_footer_line(Line, Res);
- $| -> ?line catch parse_emem_header_line(Line, Res);
- _ -> ?line catch parse_emem_value_line(Line, Res)
+ $> -> catch parse_emem_main_header_footer_line(Line, Res);
+ $| -> catch parse_emem_header_line(Line, Res);
+ _ -> catch parse_emem_value_line(Line, Res)
end.
start_emem(Config) when is_list(Config) ->
- ?line Emem = ?config(emem, Config),
- ?line Cd = case ignore_cores:dir(Config) of
- false -> [];
- Dir -> [{cd, Dir}]
- end,
- ?line case open_port({spawn, Emem ++ " -t -n -o -i 1"},
- Cd ++ [{line, 1024}, eof]) of
- Port when is_port(Port) -> ?line {ok, read_emu_flag(Port), Port};
- Error -> ?line ?t:fail(Error)
- end.
+ Emem = proplists:get_value(emem, Config),
+ Cd = case ignore_cores:dir(Config) of
+ false -> [];
+ Dir -> [{cd, Dir}]
+ end,
+ case open_port({spawn, Emem ++ " -t -n -o -i 1"},
+ Cd ++ [{line, 1024}, eof]) of
+ Port when is_port(Port) -> {ok, read_emu_flag(Port), Port};
+ Error -> ct:fail(Error)
+ end.
read_emu_flag(Port) ->
- ?line Line = case get_emem_line(Port) of
- eof -> ?line ?t:fail(unexpected_end_of_file);
- L -> ?line L
- end,
- ?line case has_prefix("> Emulator command line argument:", Line) of
- {true, EmuFlag} -> EmuFlag;
- false -> ?line read_emu_flag(Port)
- end.
+ Line = case get_emem_line(Port) of
+ eof -> ct:fail(unexpected_end_of_file);
+ L -> L
+ end,
+ case has_prefix("> Emulator command line argument:", Line) of
+ {true, EmuFlag} -> EmuFlag;
+ false -> read_emu_flag(Port)
+ end.
get_emem_line(Port, Acc) ->
- ?line receive
- {Port, {data, {eol, Data}}} ->
- ?line Res = case Acc of
- [] -> ?line Data;
- _ -> ?line lists:flatten([Acc|Data])
- end,
- ?line ?t:format("~s", [Res]),
- ?line Res;
- {Port, {data, {noeol, Data}}} ->
- ?line get_emem_line(Port, [Acc|Data]);
- {Port, eof} ->
- ?line port_close(Port),
- ?line eof
- end.
+ receive
+ {Port, {data, {eol, Data}}} ->
+ Res = case Acc of
+ [] -> Data;
+ _ -> lists:flatten([Acc|Data])
+ end,
+ io:format("~s", [Res]),
+ Res;
+ {Port, {data, {noeol, Data}}} ->
+ get_emem_line(Port, [Acc|Data]);
+ {Port, eof} ->
+ port_close(Port),
+ eof
+ end.
get_emem_line(Port) ->
- ?line get_emem_line(Port, []).
+ get_emem_line(Port, []).
short_hostname([]) ->
[];
@@ -697,28 +644,13 @@ has_prefix(_, _) ->
false.
strip(Str) -> string:strip(Str).
-
+
mk_nodename(Config) ->
- {A, B, C} = now(),
+ Us = erlang:monotonic_time(),
atom_to_list(?MODULE)
- ++ "-" ++ atom_to_list(?config(testcase, Config))
- ++ "-" ++ integer_to_list(A*1000000000000 + B*1000000 + C).
+ ++ "-" ++ atom_to_list(proplists:get_value(testcase, Config))
+ ++ integer_to_list(Us).
start_node(Name, Args) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line ?t:start_node(Name, peer, [{args, Args ++ " -pa " ++ Pa}]).
-
-% stop_node(Node) ->
-% ?t:stop_node(Node).
-
-is_debug_compiled() ->
-is_debug_compiled(erlang:system_info(system_version)).
-
-is_debug_compiled([$d,$e,$b,$u,$g | _]) ->
- true;
-is_debug_compiled([ _, _, _, _]) ->
- false;
-is_debug_compiled([]) ->
- false;
-is_debug_compiled([_|Rest]) ->
- is_debug_compiled(Rest).
+ Pa = filename:dirname(code:which(?MODULE)),
+ test_server:start_node(Name, peer, [{args, Args ++ " -pa " ++ Pa}]).
diff --git a/lib/tools/test/eprof_SUITE.erl b/lib/tools/test/eprof_SUITE.erl
index 5428643667..e908413315 100644
--- a/lib/tools/test/eprof_SUITE.erl
+++ b/lib/tools/test/eprof_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,42 +19,25 @@
%%
-module(eprof_SUITE).
--include_lib("test_server/include/test_server.hrl").
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
+-include_lib("common_test/include/ct.hrl").
+-export([all/0, suite/0]).
-export([tiny/1,eed/1,basic/1,basic_option/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,60}}].
all() ->
[basic, basic_option, tiny, eed].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-basic(suite) -> [];
basic(Config) when is_list(Config) ->
%% load eprof_test and change directory
{ok, OldCurDir} = file:get_cwd(),
- Datadir = ?config(data_dir, Config),
- Privdir = ?config(priv_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
+ Privdir = proplists:get_value(priv_dir, Config),
{ok,eprof_test} = compile:file(filename:join(Datadir, "eprof_test"),
[trace,{outdir, Privdir}]),
ok = file:set_cwd(Privdir),
@@ -98,9 +81,6 @@ basic(Config) when is_list(Config) ->
%% error case
- error = eprof:profile([Pid], fun() -> eprof_test:go(10) end),
- Pid = whereis(eprof),
- error = eprof:profile([Pid], fun() -> eprof_test:go(10) end),
A = spawn(fun() -> receive _ -> ok end end),
profiling = eprof:profile([A]),
true = exit(A, kill_it),
@@ -139,8 +119,8 @@ basic_option_1(Config) ->
%% load eprof_test and change directory
{ok, OldCurDir} = file:get_cwd(),
- Datadir = ?config(data_dir, Config),
- Privdir = ?config(priv_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
+ Privdir = proplists:get_value(priv_dir, Config),
{ok,eprof_test} = compile:file(filename:join(Datadir, "eprof_test"),
[trace,{outdir, Privdir}]),
ok = file:set_cwd(Privdir),
@@ -178,13 +158,11 @@ basic_option_1(Config) ->
stopped = eprof:stop(),
ok.
-tiny(suite) -> [];
tiny(Config) when is_list(Config) ->
ensure_eprof_stopped(),
{ok, OldCurDir} = file:get_cwd(),
- Datadir = ?config(data_dir, Config),
- Privdir = ?config(priv_dir, Config),
- TTrap=?t:timetrap(60*1000),
+ Datadir = proplists:get_value(data_dir, Config),
+ Privdir = proplists:get_value(priv_dir, Config),
% (Trace)Compile to priv_dir and make sure the correct version is loaded.
{ok,eprof_suite_test} = compile:file(filename:join(Datadir,
"eprof_suite_test"),
@@ -200,16 +178,14 @@ tiny(Config) when is_list(Config) ->
ok = eprof:analyze(total),
ok = eprof:log("eprof_SUITE_logfile"),
stopped = eprof:stop(),
- ?t:timetrap_cancel(TTrap),
ok = file:set_cwd(OldCurDir),
ok.
-eed(suite) -> [];
eed(Config) when is_list(Config) ->
ensure_eprof_stopped(),
- Datadir = ?config(data_dir, Config),
- Privdir = ?config(priv_dir, Config),
- TTrap=?t:timetrap(5*60*1000),
+ Datadir = proplists:get_value(data_dir, Config),
+ Privdir = proplists:get_value(priv_dir, Config),
+ ct:timetrap({minutes, 5}),
%% (Trace)Compile to priv_dir and make sure the correct version is loaded.
code:purge(eed),
@@ -236,7 +212,6 @@ eed(Config) when is_list(Config) ->
ok = eprof:analyze(total),
ok = eprof:log("eprof_SUITE_logfile"),
stopped = eprof:stop(),
- ?t:timetrap_cancel(TTrap),
try
S = lists:flatten(io_lib:format("~p times slower",
[10*(T3-T2)/(T2-T1)])),
diff --git a/lib/tools/test/fprof_SUITE.erl b/lib/tools/test/fprof_SUITE.erl
index e8f179c630..affb45b7a6 100644
--- a/lib/tools/test/fprof_SUITE.erl
+++ b/lib/tools/test/fprof_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,28 +19,23 @@
%%
-module(fprof_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server framework exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, not_run/1]).
+-export([all/0, suite/0, not_run/1]).
%% Test suites
-export([stack_seq/1, tail_seq/1, create_file_slow/1, spawn_simple/1,
- imm_tail_seq/1, imm_create_file_slow/1, imm_compile/1,
- cpu_create_file_slow/1]).
+ imm_tail_seq/1, imm_create_file_slow/1, imm_compile/1,
+ cpu_create_file_slow/1]).
%% Other exports
-export([create_file_slow/2]).
-
%% Debug exports
-export([parse/1, verify/2]).
-export([spawn_simple_test/3]).
-
--define(line_trace,true).
-
%-define(debug,true).
-ifdef(debug).
-define(dbg(Str,Args), io:format(Str,Args)).
@@ -49,553 +44,495 @@
-endif.
-
%%%---------------------------------------------------------------------
%%% Test suites
%%%---------------------------------------------------------------------
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,60}}].
all() ->
case test_server:is_native(fprof_SUITE) of
- true -> [not_run];
- false ->
- [stack_seq, tail_seq, create_file_slow, spawn_simple,
- imm_tail_seq, imm_create_file_slow, imm_compile,
- cpu_create_file_slow]
+ true -> [not_run];
+ false ->
+ [stack_seq, tail_seq, create_file_slow, spawn_simple,
+ imm_tail_seq, imm_create_file_slow, imm_compile,
+ cpu_create_file_slow]
end.
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
not_run(Config) when is_list(Config) ->
{skipped, "Native code"}.
%%%---------------------------------------------------------------------
-stack_seq(doc) ->
- ["Tests a stack recursive variant of lists:seq/3"];
-stack_seq(suite) ->
- [];
+%% Tests a stack recursive variant of lists:seq/3
stack_seq(Config) when is_list(Config) ->
- ?line Timetrap = ?t:timetrap(?t:seconds(20)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line TraceFile =
- filename:join(PrivDir, ?MODULE_STRING"_stack_seq.trace"),
- ?line AnalysisFile =
- filename:join(PrivDir, ?MODULE_STRING"_stack_seq.analysis"),
- ?line Start = 1,
- ?line Stop = 1000,
- ?line Succ = fun (X) -> X + 1 end,
- ?line ok = fprof:stop(kill),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ TraceFile = filename:join(PrivDir,
+ ?MODULE_STRING"_stack_seq.trace"),
+ AnalysisFile = filename:join(PrivDir,
+ ?MODULE_STRING"_stack_seq.analysis"),
+ Start = 1,
+ Stop = 1000,
+ Succ = fun (X) -> X + 1 end,
+ ok = fprof:stop(kill),
%%
- ?line TS0 = erlang:now(),
- ?line R0 = fprof:apply(fun seq/3, [Start, Stop, Succ], [{file, TraceFile}]),
- ?line TS1 = erlang:now(),
- ?line R = seq(Start, Stop, Succ),
- ?line TS2 = erlang:now(),
- ?line ok = fprof:profile(file, TraceFile),
- ?line ok = fprof:analyse(),
- ?line ok = fprof:analyse(dest, AnalysisFile),
- ?line ok = fprof:stop(),
- ?line R = R0,
+ TS0 = erlang:monotonic_time(),
+ R0 = fprof:apply(fun seq/3, [Start, Stop, Succ], [{file, TraceFile}]),
+ TS1 = erlang:monotonic_time(),
+ R = seq(Start, Stop, Succ),
+ TS2 = erlang:monotonic_time(),
+ ok = fprof:profile(file, TraceFile),
+ ok = fprof:analyse(),
+ ok = fprof:analyse(dest, AnalysisFile),
+ ok = fprof:stop(),
+ R = R0,
%%
- ?line {ok, [T, P]} = parse(AnalysisFile),
- ?line io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
- ?line ok = (catch verify(T, P)),
- ?line Proc = pid_to_list(self()),
- ?line case P of
- [{analysis_options, _},
- [{totals, _, Acc, _}],
- [{Proc, _, undefined, _} | _]] ->
- ok
- end,
+ {ok, [T, P]} = parse(AnalysisFile),
+ io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
+ ok = (catch verify(T, P)),
+ Proc = pid_to_list(self()),
+ case P of
+ [{analysis_options, _},
+ [{totals, _, Acc, _}],
+ [{Proc, _, undefined, _} | _]] ->
+ ok
+ end,
%%
- ?line check_own_and_acc(TraceFile,AnalysisFile),
+ check_own_and_acc(TraceFile,AnalysisFile),
%%
- ?line ets:delete(T),
- ?line file:delete(TraceFile),
- ?line file:delete(AnalysisFile),
- ?line ?t:timetrap_cancel(Timetrap),
- ?line Acc1 = ts_sub(TS1, TS0),
- ?line Acc2 = ts_sub(TS2, TS1),
- ?line io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc1, Acc2]),
- {comment, io_lib:format("~p times slower", [Acc1/Acc2])}.
+ ets:delete(T),
+ file:delete(TraceFile),
+ file:delete(AnalysisFile),
+ Acc1 = TS1 - TS0,
+ Acc2 = TS2 - TS1,
+ io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc1, Acc2]),
+ {comment, io_lib:format("~p times slower", [divide(Acc1,Acc2)])}.
%%%---------------------------------------------------------------------
-tail_seq(doc) ->
- ["Tests a tail recursive variant of lists:seq/3"];
-tail_seq(suite) ->
- [];
+%% Tests a tail recursive variant of lists:seq/3
tail_seq(Config) when is_list(Config) ->
- ?line Timetrap = ?t:timetrap(?t:seconds(10)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line TraceFile =
- filename:join(PrivDir, ?MODULE_STRING"_tail_seq.trace"),
- ?line AnalysisFile =
- filename:join(PrivDir, ?MODULE_STRING"_tail_seq.analysis"),
- ?line Start = 1,
- ?line Stop = 1000,
- ?line Succ = fun (X) -> X + 1 end,
- ?line ok = fprof:stop(kill),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ TraceFile = filename:join(PrivDir,
+ ?MODULE_STRING"_tail_seq.trace"),
+ AnalysisFile = filename:join(PrivDir,
+ ?MODULE_STRING"_tail_seq.analysis"),
+ Start = 1,
+ Stop = 1000,
+ Succ = fun (X) -> X + 1 end,
+ ok = fprof:stop(kill),
%%
- ?line TS0 = erlang:now(),
- ?line R = seq_r(Start, Stop, Succ),
- ?line TS1 = erlang:now(),
+ TS0 = erlang:monotonic_time(),
+ R = seq_r(Start, Stop, Succ),
+ TS1 = erlang:monotonic_time(),
%%
- ?line R1 = fprof:apply(fun seq_r/3, [Start, Stop, Succ],
- [{file, TraceFile}]),
- ?line TS2 = erlang:now(),
- ?line ok = fprof:profile([{file,TraceFile}]),
- ?line ok = fprof:analyse(),
- ?line ok = fprof:analyse(dest, AnalysisFile),
- ?line ok = fprof:stop(),
- ?line R = R1,
+ R1 = fprof:apply(fun seq_r/3, [Start, Stop, Succ],
+ [{file, TraceFile}]),
+ TS2 = erlang:monotonic_time(),
+ ok = fprof:profile([{file,TraceFile}]),
+ ok = fprof:analyse(),
+ ok = fprof:analyse(dest, AnalysisFile),
+ ok = fprof:stop(),
+ R = R1,
%%
- ?line {ok, [T, P]} = parse(AnalysisFile),
- ?line io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
- ?line ok = verify(T, P),
- ?line Proc = pid_to_list(self()),
- ?line case P of
- [{analysis_options, _},
- [{totals, _, Acc, _}],
- [{Proc, _, undefined, _} | _]] ->
- ok
- end,
+ {ok, [T, P]} = parse(AnalysisFile),
+ io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
+ ok = verify(T, P),
+ Proc = pid_to_list(self()),
+ case P of
+ [{analysis_options, _},
+ [{totals, _, Acc, _}],
+ [{Proc, _, undefined, _} | _]] ->
+ ok
+ end,
%%
- ?line check_own_and_acc(TraceFile,AnalysisFile),
+ check_own_and_acc(TraceFile,AnalysisFile),
%%
- ?line ets:delete(T),
- ?line file:delete(TraceFile),
- ?line file:delete(AnalysisFile),
- ?line ?t:timetrap_cancel(Timetrap),
- ?line Acc1 = ts_sub(TS1, TS0),
- ?line Acc2 = ts_sub(TS2, TS1),
- ?line io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc2, Acc1]),
- {comment, io_lib:format("~p times slower", [Acc2/Acc1])}.
+ ets:delete(T),
+ file:delete(TraceFile),
+ file:delete(AnalysisFile),
+ Acc1 = TS1 - TS0,
+ Acc2 = TS2 - TS1,
+ io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc2, Acc1]),
+ {comment, io_lib:format("~p times slower", [divide(Acc2,Acc1)])}.
%%%---------------------------------------------------------------------
%% Tests the create_file_slow benchmark.
create_file_slow(Config) ->
case test_server:is_native(lists) orelse
- test_server:is_native(file) of
- true ->
- {skip,"Native libs -- tracing does not work"};
- false ->
- do_create_file_slow(Config)
+ test_server:is_native(file) of
+ true ->
+ {skip,"Native libs -- tracing does not work"};
+ false ->
+ do_create_file_slow(Config)
end.
do_create_file_slow(Config) ->
- ?line Timetrap = ?t:timetrap(?t:seconds(40)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line TraceFile =
- filename:join(PrivDir, ?MODULE_STRING"_create_file_slow.trace"),
- ?line AnalysisFile =
- filename:join(PrivDir, ?MODULE_STRING"_create_file_slow.analysis"),
- ?line DataFile =
- filename:join(PrivDir, ?MODULE_STRING"_create_file_slow.data"),
- ?line ok = fprof:stop(kill),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ TraceFile = filename:join(PrivDir,
+ ?MODULE_STRING"_create_file_slow.trace"),
+ AnalysisFile = filename:join(PrivDir,
+ ?MODULE_STRING"_create_file_slow.analysis"),
+ DataFile = filename:join(PrivDir,
+ ?MODULE_STRING"_create_file_slow.data"),
+ ok = fprof:stop(kill),
%%
- ?line TS0 = erlang:now(),
- ?line ok = create_file_slow(DataFile, 1024),
- ?line TS1 = erlang:now(),
+ TS0 = erlang:monotonic_time(),
+ ok = create_file_slow(DataFile, 1024),
+ TS1 = erlang:monotonic_time(),
%%
- ?line ok = file:delete(DataFile),
- ?line TS2 = erlang:now(),
- ?line ok = fprof:apply(?MODULE, create_file_slow, [DataFile, 1024],
- [{file, TraceFile}]),
- ?line TS3 = erlang:now(),
- ?line ok = fprof:profile(file, TraceFile),
- ?line ok = fprof:analyse(),
- ?line ok = fprof:analyse(dest, AnalysisFile),
- ?line ok = fprof:stop(),
+ ok = file:delete(DataFile),
+ TS2 = erlang:monotonic_time(),
+ ok = fprof:apply(?MODULE, create_file_slow, [DataFile, 1024],
+ [{file, TraceFile}]),
+ TS3 = erlang:monotonic_time(),
+ ok = fprof:profile(file, TraceFile),
+ ok = fprof:analyse(),
+ ok = fprof:analyse(dest, AnalysisFile),
+ ok = fprof:stop(),
%%
- ?line {ok, [T, P]} = parse(AnalysisFile),
- ?line io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
- ?line ok = verify(T, P),
- ?line Proc = pid_to_list(self()),
- ?line case P of
- [{analysis_options, _},
- [{totals, _, Acc, _}],
- [{Proc, _, undefined, _} | _]] ->
- ok
- end,
+ {ok, [T, P]} = parse(AnalysisFile),
+ io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
+ ok = verify(T, P),
+ Proc = pid_to_list(self()),
+ case P of
+ [{analysis_options, _},
+ [{totals, _, Acc, _}],
+ [{Proc, _, undefined, _} | _]] ->
+ ok
+ end,
%%
- ?line check_own_and_acc(TraceFile,AnalysisFile),
+ check_own_and_acc(TraceFile,AnalysisFile),
%%
- ?line ets:delete(T),
- ?line file:delete(DataFile),
- ?line file:delete(TraceFile),
- ?line file:delete(AnalysisFile),
- ?line ?t:timetrap_cancel(Timetrap),
- ?line Acc1 = ts_sub(TS1, TS0),
- ?line Acc3 = ts_sub(TS3, TS2),
- ?line io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc3, Acc1]),
- {comment, io_lib:format("~p times slower", [Acc3/Acc1])}.
+ ets:delete(T),
+ file:delete(DataFile),
+ file:delete(TraceFile),
+ file:delete(AnalysisFile),
+ Acc1 = TS1 - TS0,
+ Acc3 = TS3 - TS2,
+ io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc3, Acc1]),
+ {comment, io_lib:format("~p times slower", [divide(Acc3,Acc1)])}.
%%%---------------------------------------------------------------------
-spawn_simple(doc) ->
- ["Tests process spawn"];
-spawn_simple(suite) ->
- [];
+%% Tests process spawn
spawn_simple(Config) when is_list(Config) ->
- ?line Timetrap = ?t:timetrap(?t:seconds(30)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line TraceFile =
- filename:join(PrivDir, ?MODULE_STRING"_spawn_simple.trace"),
- ?line AnalysisFile =
- filename:join(PrivDir, ?MODULE_STRING"_spawn_simple.analysis"),
- ?line Start = 1,
- ?line Stop = 1000,
- ?line Succ = fun (X) -> X + 1 end,
- ?line ok = fprof:stop(kill),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ TraceFile = filename:join(PrivDir,
+ ?MODULE_STRING"_spawn_simple.trace"),
+ AnalysisFile = filename:join(PrivDir,
+ ?MODULE_STRING"_spawn_simple.analysis"),
+ Start = 1,
+ Stop = 1000,
+ Succ = fun (X) -> X + 1 end,
+ ok = fprof:stop(kill),
%%
- ?line TS0 = erlang:now(),
- ?line {{_, R1}, {_, R2}} = spawn_simple_test(Start, Stop, Succ),
- ?line TS1 = erlang:now(),
+ TS0 = erlang:monotonic_time(),
+ {{_, R1}, {_, R2}} = spawn_simple_test(Start, Stop, Succ),
+ TS1 = erlang:monotonic_time(),
%%
- ?line ok = fprof:trace(start, TraceFile),
- ?line {{P1, R3}, {P2, R4}} = spawn_simple_test(Start, Stop, Succ),
- ?line ok = fprof:trace(stop),
- ?line TS2 = erlang:now(),
- ?line ok = fprof:profile(file, TraceFile),
- ?line ok = fprof:analyse(),
- ?line ok = fprof:analyse(dest, AnalysisFile),
- ?line ok = fprof:stop(),
- ?line R1 = R3,
- ?line R2 = R4,
+ ok = fprof:trace(start, TraceFile),
+ {{P1, R3}, {P2, R4}} = spawn_simple_test(Start, Stop, Succ),
+ ok = fprof:trace(stop),
+ TS2 = erlang:monotonic_time(),
+ ok = fprof:profile(file, TraceFile),
+ ok = fprof:analyse(),
+ ok = fprof:analyse(dest, AnalysisFile),
+ ok = fprof:stop(),
+ R1 = R3,
+ R2 = R4,
%%
- ?line {ok, [T, P]} = parse(AnalysisFile),
- ?line io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
- ?line ok = verify(T, P),
- ?line Proc1 = pid_to_list(P1),
- ?line Proc2 = pid_to_list(P2),
- ?line Proc0 = pid_to_list(self()),
- ?line io:format("~p~n ~p ~p ~p~n", [P, Proc0, Proc1, Proc2]),
- ?line [{analysis_options, _}, [{totals, _, Acc, _}] | Procs] = P,
- ?line [[{Proc0, _, undefined, _} | _]] =
- lists:filter(fun ([Pt | _]) when element(1, Pt) == Proc0 -> true;
- (_) -> false
- end, Procs),
- ?line [[{Proc1, _, undefined, _},
- {spawned_by, Proc0},
- {spawned_as, {erlang, apply, ["#Fun"++_, []]}},
- {initial_calls, [{erlang, apply, 2},
- {?MODULE, '-spawn_simple_test/3-fun-0-', 4}]}
- | _]] =
- lists:filter(fun ([Pt | _]) when element(1, Pt) == Proc1 -> true;
- (_) -> false
- end, Procs),
- ?line [[{Proc2, _, undefined, _},
- {spawned_by, Proc0},
- {spawned_as, {erlang, apply, ["#Fun"++_, []]}},
- {initial_calls, [{erlang, apply, 2},
- {?MODULE, '-spawn_simple_test/3-fun-1-', 4}]}
- | _]] =
- lists:filter(fun ([Pt | _]) when element(1, Pt) == Proc2 -> true;
- (_) -> false
- end, Procs),
- ?line 3 = length(Procs),
- ?line R1 = lists:reverse(R2),
+ {ok, [T, P]} = parse(AnalysisFile),
+ io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
+ ok = verify(T, P),
+ Proc1 = pid_to_list(P1),
+ Proc2 = pid_to_list(P2),
+ Proc0 = pid_to_list(self()),
+ io:format("~p~n ~p ~p ~p~n", [P, Proc0, Proc1, Proc2]),
+ [{analysis_options, _}, [{totals, _, Acc, _}] | Procs] = P,
+ [[{Proc0, _, undefined, _} | _]] = lists:filter(
+ fun ([Pt | _]) when element(1, Pt) == Proc0 -> true;
+ (_) -> false
+ end, Procs),
+ [[{Proc1, _, undefined, _},
+ {spawned_by, Proc0},
+ {spawned_as, {erlang, apply, ["#Fun"++_, []]}},
+ {initial_calls, [{erlang, apply, 2},
+ {?MODULE, '-spawn_simple_test/3-fun-0-', 4}]}
+ | _]] = lists:filter(fun ([Pt | _]) when element(1, Pt) == Proc1 -> true;
+ (_) -> false
+ end, Procs),
+ [[{Proc2, _, undefined, _},
+ {spawned_by, Proc0},
+ {spawned_as, {erlang, apply, ["#Fun"++_, []]}},
+ {initial_calls, [{erlang, apply, 2},
+ {?MODULE, '-spawn_simple_test/3-fun-1-', 4}]}
+ | _]] = lists:filter(fun ([Pt | _]) when element(1, Pt) == Proc2 -> true;
+ (_) -> false
+ end, Procs),
+ 3 = length(Procs),
+ R1 = lists:reverse(R2),
%%
- ?line check_own_and_acc(TraceFile,AnalysisFile),
+ check_own_and_acc(TraceFile,AnalysisFile),
%%
- ?line ets:delete(T),
- ?line file:delete(TraceFile),
- ?line file:delete(AnalysisFile),
- ?line ?t:timetrap_cancel(Timetrap),
- ?line Acc1 = ts_sub(TS1, TS0),
- ?line Acc2 = ts_sub(TS2, TS1),
- ?line io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc2, Acc1]),
- {comment, io_lib:format("~p times slower", [Acc2/Acc1])}.
+ ets:delete(T),
+ file:delete(TraceFile),
+ file:delete(AnalysisFile),
+ Acc1 = TS1 - TS0,
+ Acc2 = TS2 - TS1,
+ io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc2, Acc1]),
+ {comment, io_lib:format("~p times slower", [divide(Acc2,Acc1)])}.
spawn_simple_test(Start, Stop, Succ) ->
Parent = self(),
- Seq =
- spawn_link(
- fun () ->
- Parent ! {self(), seq(Start, Stop, Succ)}
- end),
- SeqR =
- spawn_link(
- fun () ->
- Parent ! {self(), seq_r(Start, Stop, Succ)}
- end),
- receive {Seq, SeqResult} ->
- receive {SeqR, SeqRResult} ->
- {{Seq, SeqResult}, {SeqR, SeqRResult}}
- end
+ Seq = spawn_link(fun() ->
+ Parent ! {self(), seq(Start, Stop, Succ)}
+ end),
+
+ SeqR = spawn_link(fun() ->
+ Parent ! {self(), seq_r(Start, Stop, Succ)}
+ end),
+ receive
+ {Seq, SeqResult} ->
+ receive
+ {SeqR, SeqRResult} ->
+ {{Seq, SeqResult}, {SeqR, SeqRResult}}
+ end
end.
%%%---------------------------------------------------------------------
-imm_tail_seq(doc) ->
- ["Tests a tail recursive variant of lists:seq/3 ",
- "with immediate trace to profile"];
-imm_tail_seq(suite) ->
- [];
+%% Tests a tail recursive variant of lists:seq/3
+%% with immediate trace to profile
imm_tail_seq(Config) when is_list(Config) ->
- ?line Timetrap = ?t:timetrap(?t:seconds(10)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line AnalysisFile =
- filename:join(PrivDir, ?MODULE_STRING"_imm_tail_seq.analysis"),
- ?line Start = 1,
- ?line Stop = 1000,
- ?line Succ = fun (X) -> X + 1 end,
- ?line ok = fprof:stop(kill),
- ?line catch eprof:stop(),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ AnalysisFile = filename:join(PrivDir,
+ ?MODULE_STRING"_imm_tail_seq.analysis"),
+ Start = 1,
+ Stop = 1000,
+ Succ = fun (X) -> X + 1 end,
+ ok = fprof:stop(kill),
+ catch eprof:stop(),
%%
- ?line TS0 = erlang:now(),
- ?line R0 = seq_r(Start, Stop, Succ),
- ?line TS1 = erlang:now(),
+ TS0 = erlang:monotonic_time(),
+ R0 = seq_r(Start, Stop, Succ),
+ TS1 = erlang:monotonic_time(),
%%
- ?line profiling = eprof:start_profiling([self()]),
- ?line TS2 = erlang:now(),
- ?line R2 = seq_r(Start, Stop, Succ),
- ?line TS3 = erlang:now(),
- ?line profiling_stopped = eprof:stop_profiling(),
- ?line R2 = R0,
+ profiling = eprof:start_profiling([self()]),
+ TS2 = erlang:monotonic_time(),
+ R2 = seq_r(Start, Stop, Succ),
+ TS3 = erlang:monotonic_time(),
+ profiling_stopped = eprof:stop_profiling(),
+ R2 = R0,
%%
- ?line eprof:analyze(),
- ?line stopped = eprof:stop(),
+ eprof:analyze(),
+ stopped = eprof:stop(),
%%
- ?line {ok, Tracer} = fprof:profile(start),
- ?line ok = fprof:trace([start, {tracer, Tracer}]),
- ?line TS4 = erlang:now(),
- ?line R4 = seq_r(Start, Stop, Succ),
- ?line TS5 = erlang:now(),
- ?line ok = fprof:trace(stop),
- ?line ok = fprof:analyse(),
- ?line ok = fprof:analyse(dest, AnalysisFile),
- ?line ok = fprof:stop(),
- ?line R4 = R0,
+ {ok, Tracer} = fprof:profile(start),
+ ok = fprof:trace([start, {tracer, Tracer}]),
+ TS4 = erlang:monotonic_time(),
+ R4 = seq_r(Start, Stop, Succ),
+ TS5 = erlang:monotonic_time(),
+ ok = fprof:trace(stop),
+ ok = fprof:analyse(),
+ ok = fprof:analyse(dest, AnalysisFile),
+ ok = fprof:stop(),
+ R4 = R0,
%%
- ?line {ok, [T, P]} = parse(AnalysisFile),
- ?line io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
- ?line ok = verify(T, P),
- ?line Proc = pid_to_list(self()),
- ?line case P of
- [{analysis_options, _},
- [{totals, _, Acc, _}],
- [{Proc, _, undefined, _} | _]] ->
- ok
- end,
+ {ok, [T, P]} = parse(AnalysisFile),
+ io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
+ ok = verify(T, P),
+ Proc = pid_to_list(self()),
+ case P of
+ [{analysis_options, _},
+ [{totals, _, Acc, _}],
+ [{Proc, _, undefined, _} | _]] -> ok
+ end,
%%
- ?line ets:delete(T),
- ?line file:delete(AnalysisFile),
- ?line ?t:timetrap_cancel(Timetrap),
- ?line Acc1 = ts_sub(TS1, TS0),
- ?line Acc3 = ts_sub(TS3, TS2),
- ?line Acc5 = ts_sub(TS5, TS4),
- ?line io:format("~p (plain), ~p (eprof), ~p (fprof), ~p (cpu)~n",
- [Acc1/1000, Acc3/1000, Acc5/1000, Acc/1000]),
+ ets:delete(T),
+ file:delete(AnalysisFile),
+ Acc1 = TS1 - TS0,
+ Acc3 = TS3 - TS2,
+ Acc5 = TS5 - TS4,
+ io:format("~p (plain), ~p (eprof), ~p (fprof), ~p (cpu)~n",
+ [Acc1/1000, Acc3/1000, Acc5/1000, Acc/1000]),
{comment, io_lib:format("~p/~p (fprof/eprof) times slower",
- [Acc5/Acc1, Acc3/Acc1])}.
+ [divide(Acc5,Acc1), divide(Acc3,Acc1)])}.
%%%---------------------------------------------------------------------
-imm_create_file_slow(doc) ->
- ["Tests a tail recursive variant of lists:seq/3 ",
- "with immediate trace to profile"];
-imm_create_file_slow(suite) ->
- [];
+%% Tests a tail recursive variant of lists:seq/3
+%% with immediate trace to profile
imm_create_file_slow(Config) when is_list(Config) ->
- ?line Timetrap = ?t:timetrap(?t:seconds(60)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line DataFile =
- filename:join(PrivDir, ?MODULE_STRING"_imm_create_file_slow.data"),
- ?line AnalysisFile =
- filename:join(PrivDir, ?MODULE_STRING"_imm_create_file_slow.analysis"),
- ?line ok = fprof:stop(kill),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataFile = filename:join(PrivDir,
+ ?MODULE_STRING"_imm_create_file_slow.data"),
+ AnalysisFile = filename:join(PrivDir,
+ ?MODULE_STRING"_imm_create_file_slow.analysis"),
+ ok = fprof:stop(kill),
%%
- ?line TS0 = erlang:now(),
- ?line ok = create_file_slow(DataFile, 1024),
- ?line TS1 = erlang:now(),
- ?line ok = file:delete(DataFile),
+ TS0 = erlang:monotonic_time(),
+ ok = create_file_slow(DataFile, 1024),
+ TS1 = erlang:monotonic_time(),
+ ok = file:delete(DataFile),
%%
- ?line {ok, Tracer} = fprof:profile(start),
- ?line TS2 = erlang:now(),
- ?line ok = fprof:apply(?MODULE, create_file_slow, [DataFile, 1024],
- [{tracer, Tracer}, continue]),
- ?line TS3 = erlang:now(),
- ?line ok = fprof:profile(stop),
- ?line ok = fprof:analyse(),
- ?line ok = fprof:analyse(dest, AnalysisFile),
- ?line ok = fprof:stop(),
+ {ok, Tracer} = fprof:profile(start),
+ TS2 = erlang:monotonic_time(),
+ ok = fprof:apply(?MODULE, create_file_slow, [DataFile, 1024],
+ [{tracer, Tracer}, continue]),
+ TS3 = erlang:monotonic_time(),
+ ok = fprof:profile(stop),
+ ok = fprof:analyse(),
+ ok = fprof:analyse(dest, AnalysisFile),
+ ok = fprof:stop(),
%%
- ?line {ok, [T, P]} = parse(AnalysisFile),
- ?line io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
- ?line ok = verify(T, P),
- ?line Proc = pid_to_list(self()),
- ?line case P of
- [{analysis_options, _},
- [{totals, _, Acc, _}],
- [{Proc, _, undefined, _} | _]] ->
- ok
- end,
+ {ok, [T, P]} = parse(AnalysisFile),
+ io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
+ ok = verify(T, P),
+ Proc = pid_to_list(self()),
+ case P of
+ [{analysis_options, _},
+ [{totals, _, Acc, _}],
+ [{Proc, _, undefined, _} | _]] ->
+ ok
+ end,
%%
- ?line ets:delete(T),
- ?line file:delete(DataFile),
- ?line file:delete(AnalysisFile),
- ?line ?t:timetrap_cancel(Timetrap),
- ?line Acc1 = ts_sub(TS1, TS0),
- ?line Acc3 = ts_sub(TS3, TS2),
- ?line io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc3, Acc1]),
- {comment, io_lib:format("~p times slower", [Acc3/Acc1])}.
+ ets:delete(T),
+ file:delete(DataFile),
+ file:delete(AnalysisFile),
+ Acc1 = TS1 - TS0,
+ Acc3 = TS3 - TS2,
+ io:format("ts:~w, fprof:~w, bare:~w.~n", [Acc, Acc3, Acc1]),
+ {comment, io_lib:format("~p times slower", [divide(Acc3,Acc1)])}.
%%%---------------------------------------------------------------------
-imm_compile(doc) ->
- ["Tests to compile a small source file ",
- "with immediate trace to profile"];
-imm_compile(suite) ->
- [];
+%% Tests to compile a small source file with immediate trace to profile
imm_compile(Config) when is_list(Config) ->
- ?line Timetrap = ?t:timetrap(?t:minutes(20)),
- ?line DataDir = ?config(data_dir, Config),
- ?line SourceFile = filename:join(DataDir, "foo.erl"),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line AnalysisFile =
- filename:join(PrivDir, ?MODULE_STRING"_imm_compile.analysis"),
- ?line ok = fprof:stop(kill),
- ?line catch eprof:stop(),
+ ct:timetrap({minutes, 20}),
+ DataDir = proplists:get_value(data_dir, Config),
+ SourceFile = filename:join(DataDir, "foo.erl"),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ AnalysisFile = filename:join(PrivDir,
+ ?MODULE_STRING"_imm_compile.analysis"),
+ ok = fprof:stop(kill),
+ catch eprof:stop(),
%%
- ?line {ok, foo, _} = compile:file(SourceFile, [binary]),
- ?line TS0 = erlang:now(),
- ?line {ok, foo, _} = compile:file(SourceFile, [binary]),
- ?line TS1 = erlang:now(),
+ {ok, foo, _} = compile:file(SourceFile, [binary]),
+ TS0 = erlang:monotonic_time(),
+ {ok, foo, _} = compile:file(SourceFile, [binary]),
+ TS1 = erlang:monotonic_time(),
%%
- ?line profiling = eprof:start_profiling([self()]),
- ?line TS2 = erlang:now(),
- ?line {ok, foo, _} = compile:file(SourceFile, [binary]),
- ?line TS3 = erlang:now(),
- ?line profiling_stopped = eprof:stop_profiling(),
+ profiling = eprof:start_profiling([self()]),
+ TS2 = erlang:monotonic_time(),
+ {ok, foo, _} = compile:file(SourceFile, [binary]),
+ TS3 = erlang:monotonic_time(),
+ profiling_stopped = eprof:stop_profiling(),
%%
- ?line eprof:analyze(),
- ?line stopped = eprof:stop(),
+ eprof:analyze(),
+ stopped = eprof:stop(),
%%
- ?line {ok, Tracer} = fprof:profile(start),
- ?line ok = fprof:trace([start, {tracer, Tracer}]),
- ?line TS4 = erlang:now(),
- ?line {ok, foo, _} = compile:file(SourceFile, [binary]),
- ?line TS5 = erlang:now(),
- ?line ok = fprof:trace(stop),
+ {ok, Tracer} = fprof:profile(start),
+ ok = fprof:trace([start, {tracer, Tracer}]),
+ TS4 = erlang:monotonic_time(),
+ {ok, foo, _} = compile:file(SourceFile, [binary]),
+ TS5 = erlang:monotonic_time(),
+ ok = fprof:trace(stop),
%%
- ?line io:format("Analysing...~n"),
- ?line ok = fprof:analyse(dest, AnalysisFile),
- ?line ok = fprof:stop(),
+ io:format("Analysing...~n"),
+ ok = fprof:analyse(dest, AnalysisFile),
+ ok = fprof:stop(),
%%
- ?line {ok, [T, P]} = parse(AnalysisFile),
- ?line io:format("~p~n", [P]),
- ?line Acc1 = ts_sub(TS1, TS0),
- ?line Acc3 = ts_sub(TS3, TS2),
- ?line Acc5 = ts_sub(TS5, TS4),
- ?line io:format("Verifying...~n"),
- ?line ok = verify(T, P),
- ?line case P of
- [{analysis_options, _},
- [{totals, _, Acc, _}] | _] ->
- ok
- end,
+ {ok, [T, P]} = parse(AnalysisFile),
+ io:format("~p~n", [P]),
+ Acc1 = TS1 - TS0,
+ Acc3 = TS3 - TS2,
+ Acc5 = TS5 - TS4,
+ io:format("Verifying...~n"),
+ ok = verify(T, P),
+ case P of
+ [{analysis_options, _},
+ [{totals, _, Acc, _}] | _] ->
+ ok
+ end,
%%
- ?line ets:delete(T),
- ?line file:delete(AnalysisFile),
- ?line ?t:timetrap_cancel(Timetrap),
- ?line io:format("~p (plain), ~p (eprof), ~p (fprof), ~p(cpu)~n",
- [Acc1/1000, Acc3/1000, Acc5/1000, Acc/1000]),
+ ets:delete(T),
+ file:delete(AnalysisFile),
+ io:format("~p (plain), ~p (eprof), ~p (fprof), ~p(cpu)~n",
+ [Acc1/1000, Acc3/1000, Acc5/1000, Acc/1000]),
{comment, io_lib:format("~p/~p (fprof/eprof) times slower",
- [Acc5/Acc1, Acc3/Acc1])}.
+ [divide(Acc5,Acc1), divide(Acc3,Acc1)])}.
%%%---------------------------------------------------------------------
-cpu_create_file_slow(doc) ->
- ["Tests the create_file_slow benchmark using cpu_time"];
-cpu_create_file_slow(suite) ->
- [];
+%% Tests the create_file_slow benchmark using cpu_time
cpu_create_file_slow(Config) when is_list(Config) ->
- ?line Timetrap = ?t:timetrap(?t:seconds(40)),
- ?line PrivDir = ?config(priv_dir, Config),
- ?line TraceFile =
- filename:join(PrivDir, ?MODULE_STRING"_cpu_create_file_slow.trace"),
- ?line AnalysisFile =
- filename:join(PrivDir, ?MODULE_STRING"_cpu_create_file_slow.analysis"),
- ?line DataFile =
- filename:join(PrivDir, ?MODULE_STRING"_cpu_create_file_slow.data"),
- ?line ok = fprof:stop(kill),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ TraceFile =
+ filename:join(PrivDir, ?MODULE_STRING"_cpu_create_file_slow.trace"),
+ AnalysisFile =
+ filename:join(PrivDir, ?MODULE_STRING"_cpu_create_file_slow.analysis"),
+ DataFile =
+ filename:join(PrivDir, ?MODULE_STRING"_cpu_create_file_slow.data"),
+ ok = fprof:stop(kill),
%%
- ?line TS0 = erlang:now(),
- ?line Result = (catch fprof:apply(?MODULE, create_file_slow,
- [DataFile, 1024],
- [{file, TraceFile}, cpu_time])),
- ?line TS1 = erlang:now(),
- ?line TestResult =
- case Result of
- ok ->
- ?line ok = fprof:profile(file, TraceFile),
- ?line ok = fprof:analyse(),
- ?line ok = fprof:analyse(dest, AnalysisFile),
- ?line ok = fprof:stop(),
- %%
- ?line {ok, [T, P]} = parse(AnalysisFile),
- ?line io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
- ?line ok = verify(T, P),
- ?line Proc = pid_to_list(self()),
- ?line case P of
- [{analysis_options, _},
- [{totals, _, Acc, _}],
- [{Proc, _, undefined, _} | _]] ->
- ok
- end,
- %%
- ?line check_own_and_acc(TraceFile,AnalysisFile),
- %%
- ?line ets:delete(T),
- ?line file:delete(DataFile),
- ?line file:delete(TraceFile),
- ?line file:delete(AnalysisFile),
- ?line Acc1 = ts_sub(TS1, TS0),
- ?line io:format("cpu_ts:~w, fprof:~w~n", [Acc, Acc1]),
- {comment, io_lib:format("~p% cpu utilization",
- [100*Acc/Acc1])};
- {'EXIT', not_supported} ->
- case {os:type(), os:version()} of
- {{unix, sunos}, {Major, Minor, _}}
- when Major >= 5, Minor >= 7 ->
- test_server:fail(Result);
- _ ->
- {skipped, "not_supported"}
- end;
- _ ->
- test_server:fail(Result)
- end,
- ?line ?t:timetrap_cancel(Timetrap),
+ TS0 = erlang:monotonic_time(),
+ Result = (catch fprof:apply(?MODULE, create_file_slow,
+ [DataFile, 1024],
+ [{file, TraceFile}, cpu_time])),
+ TS1 = erlang:monotonic_time(),
+ TestResult =
+ case Result of
+ ok ->
+ ok = fprof:profile(file, TraceFile),
+ ok = fprof:analyse(),
+ ok = fprof:analyse(dest, AnalysisFile),
+ ok = fprof:stop(),
+ %%
+ {ok, [T, P]} = parse(AnalysisFile),
+ io:format("~p~n~n~p~n", [P, ets:tab2list(T)]),
+ ok = verify(T, P),
+ Proc = pid_to_list(self()),
+ case P of
+ [{analysis_options, _},
+ [{totals, _, Acc, _}],
+ [{Proc, _, undefined, _} | _]] ->
+ ok
+ end,
+ %%
+ check_own_and_acc(TraceFile,AnalysisFile),
+ %%
+ ets:delete(T),
+ file:delete(DataFile),
+ file:delete(TraceFile),
+ file:delete(AnalysisFile),
+ Acc1 = TS1 - TS0,
+ io:format("cpu_ts:~w, fprof:~w~n", [Acc, Acc1]),
+ {comment, io_lib:format("~p% cpu utilization", [100*divide(Acc,Acc1)])};
+ {'EXIT', not_supported} ->
+ case {os:type(), os:version()} of
+ {{unix, sunos}, {Major, Minor, _}}
+ when Major >= 5, Minor >= 7 ->
+ ct:fail(Result);
+ _ ->
+ {skipped, "not_supported"}
+ end;
+ _ ->
+ ct:fail(Result)
+ end,
TestResult.
-
%%%---------------------------------------------------------------------
%%% Functions to test
%%%---------------------------------------------------------------------
@@ -623,14 +560,14 @@ seq_r(Start, Stop, Succ, R) ->
create_file_slow(Name, N) when is_integer(N), N >= 0 ->
{ok, FD} =
- file:open(Name, [raw, write, delayed_write, binary]),
+ file:open(Name, [raw, write, delayed_write, binary]),
if N > 256 ->
- ok = file:write(FD,
- lists:map(fun (X) -> <<X:32/unsigned>> end,
- lists:seq(0, 255))),
- ok = create_file_slow(FD, 256, N);
+ ok = file:write(FD,
+ lists:map(fun (X) -> <<X:32/unsigned>> end,
+ lists:seq(0, 255))),
+ ok = create_file_slow(FD, 256, N);
true ->
- ok = create_file_slow(FD, 0, N)
+ ok = create_file_slow(FD, 0, N)
end,
ok = file:close(FD).
@@ -647,46 +584,44 @@ create_file_slow(FD, M, N) ->
%%%---------------------------------------------------------------------
-
verify(Tab, [{analysis_options, _},
- [{totals, Cnt, Acc, Own} | _] | Processes]) ->
+ [{totals, Cnt, Acc, Own} | _] | Processes]) ->
Processes_1 =
- lists:map(
- fun ([{Proc, Cnt_P, undefined, Own_P} | _]) ->
- case sum_process(Tab, Proc) of
- {Proc, Cnt_P, Acc_P, Own_P} = Clocks
- when Acc_P >= Own_P ->
- Clocks;
- Weird ->
- throw({error, [?MODULE, ?LINE, Weird]})
- end
- end,
- Processes),
+ lists:map(
+ fun ([{Proc, Cnt_P, undefined, Own_P} | _]) ->
+ case sum_process(Tab, Proc) of
+ {Proc, Cnt_P, Acc_P, Own_P} = Clocks
+ when Acc_P >= Own_P ->
+ Clocks;
+ Weird ->
+ throw({error, [?MODULE, ?LINE, Weird]})
+ end
+ end,
+ Processes),
case lists:foldl(
- fun ({_, Cnt_P2, Acc_P2, Own_P2},
- {totals, Cnt_T, Acc_T, Own_T}) ->
- {totals, Cnt_P2+Cnt_T, Acc_P2+Acc_T, Own_P2+Own_T}
- end,
- {totals, 0, 0, 0},
- Processes_1) of
- {totals, Cnt, Acc_T, Own} when Acc_T >= Acc ->
- ok;
- Weird ->
- throw({error, [?MODULE, ?LINE, Weird]})
+ fun ({_, Cnt_P2, Acc_P2, Own_P2},
+ {totals, Cnt_T, Acc_T, Own_T}) ->
+ {totals, Cnt_P2+Cnt_T, Acc_P2+Acc_T, Own_P2+Own_T}
+ end,
+ {totals, 0, 0, 0},
+ Processes_1) of
+ {totals, Cnt, Acc_T, Own} when Acc_T >= Acc ->
+ ok;
+ Weird ->
+ throw({error, [?MODULE, ?LINE, Weird]})
end.
-
sum_process(Tab, Proc) ->
ets_select_fold(
Tab, [{{{Proc, '_'}, '_'}, [], ['$_']}], 100,
fun ({{P, MFA}, {Callers, {MFA, Cnt, Acc, Own}, Called}},
- {P, Cnt_P, Acc_P, Own_P}) when P == Proc ->
- ok = verify_callers(Tab, Proc, MFA, Callers),
- ok = verify_called(Tab, Proc, MFA, Called),
- {P, Cnt+Cnt_P, Acc+Acc_P, Own+Own_P};
- (Weird, Clocks) ->
- throw({error, [?MODULE, ?LINE, Weird, Clocks]})
+ {P, Cnt_P, Acc_P, Own_P}) when P == Proc ->
+ ok = verify_callers(Tab, Proc, MFA, Callers),
+ ok = verify_called(Tab, Proc, MFA, Called),
+ {P, Cnt+Cnt_P, Acc+Acc_P, Own+Own_P};
+ (Weird, Clocks) ->
+ throw({error, [?MODULE, ?LINE, Weird, Clocks]})
end,
{Proc, 0, 0, 0}).
@@ -695,31 +630,31 @@ verify_callers(_, _, _, []) ->
verify_callers(Tab, Proc, MFA, [{Caller, Cnt, Acc, Own} | Tail]) ->
Id = {Proc, Caller},
case ets:lookup(Tab, Id) of
- [{Id, {_, {Caller, _, _, _}, Called}}] ->
- case lists:keysearch(MFA, 1, Called) of
- {value, {MFA, Cnt, Acc, Own}} ->
- verify_callers(Tab, Proc, MFA, Tail);
- false ->
- throw({error, [?MODULE, ?LINE, MFA, Id]})
- end;
- Weird ->
- throw({error, [?MODULE, ?LINE, Weird]})
+ [{Id, {_, {Caller, _, _, _}, Called}}] ->
+ case lists:keysearch(MFA, 1, Called) of
+ {value, {MFA, Cnt, Acc, Own}} ->
+ verify_callers(Tab, Proc, MFA, Tail);
+ false ->
+ throw({error, [?MODULE, ?LINE, MFA, Id]})
+ end;
+ Weird ->
+ throw({error, [?MODULE, ?LINE, Weird]})
end.
-
+
verify_called(_, _, _, []) ->
ok;
verify_called(Tab, Proc, MFA, [{Called, Cnt, Acc, Own} | Tail]) ->
Id = {Proc, Called},
case ets:lookup(Tab, Id) of
- [{Id, {Callers, {Called, _, _, _}, _}}] ->
- case lists:keysearch(MFA, 1, Callers) of
- {value, {MFA, Cnt, Acc, Own}} ->
- verify_called(Tab, Proc, MFA, Tail);
- false ->
- throw({error, [?MODULE, ?LINE, MFA, Id]})
- end;
- Weird ->
- throw({error, [?MODULE, ?LINE, Weird]})
+ [{Id, {Callers, {Called, _, _, _}, _}}] ->
+ case lists:keysearch(MFA, 1, Callers) of
+ {value, {MFA, Cnt, Acc, Own}} ->
+ verify_called(Tab, Proc, MFA, Tail);
+ false ->
+ throw({error, [?MODULE, ?LINE, MFA, Id]})
+ end;
+ Weird ->
+ throw({error, [?MODULE, ?LINE, Weird]})
end.
@@ -729,12 +664,12 @@ verify_called(Tab, Proc, MFA, [{Called, Cnt, Acc, Own} | Tail]) ->
%% entries when they are read.
parse(Filename) ->
case file:open(Filename, [read]) of
- {ok, FD} ->
- Result = parse_stream(FD),
- file:close(FD),
- Result;
- Error ->
- Error
+ {ok, FD} ->
+ Result = parse_stream(FD),
+ file:close(FD),
+ Result;
+ Error ->
+ Error
end.
parse_stream(FD) ->
@@ -743,31 +678,31 @@ parse_stream(FD) ->
parse_stream(FD, Tab, R, Proc) ->
case catch io:read(FD, '') of
- {'EXIT', _} ->
- {error, [?MODULE, ?LINE]};
- {ok, Term} ->
- case parse_term(Term) of
- {ok, {analysis_options, _} = Term_1}
- when Proc == void ->
- parse_stream(FD, Tab, [Term_1 | R], analysis_options);
- {ok, [{totals, _, _, _} | _] = Term_1}
- when Proc == analysis_options ->
- parse_stream(FD, Tab, [Term_1 | R], totals);
- {ok, [{P, _, _, _} | _] = Term_1} ->
- parse_stream(FD, Tab, [Term_1 | R], P);
- {ok, {_Callers, {MFA, _, _, _}, _Called} = Term_1}
- when Proc == totals; is_list(Proc) ->
- ets:insert(Tab, {{Proc, MFA}, Term_1}),
- parse_stream(FD, Tab, R, Proc);
- {ok, Term_1} ->
- {error, [?MODULE, ?LINE, Term_1]};
- E ->
- E
- end;
- eof ->
- {ok, [Tab, lists:reverse(R)]};
- Error ->
- Error
+ {'EXIT', _} ->
+ {error, [?MODULE, ?LINE]};
+ {ok, Term} ->
+ case parse_term(Term) of
+ {ok, {analysis_options, _} = Term_1}
+ when Proc == void ->
+ parse_stream(FD, Tab, [Term_1 | R], analysis_options);
+ {ok, [{totals, _, _, _} | _] = Term_1}
+ when Proc == analysis_options ->
+ parse_stream(FD, Tab, [Term_1 | R], totals);
+ {ok, [{P, _, _, _} | _] = Term_1} ->
+ parse_stream(FD, Tab, [Term_1 | R], P);
+ {ok, {_Callers, {MFA, _, _, _}, _Called} = Term_1}
+ when Proc == totals; is_list(Proc) ->
+ ets:insert(Tab, {{Proc, MFA}, Term_1}),
+ parse_stream(FD, Tab, R, Proc);
+ {ok, Term_1} ->
+ {error, [?MODULE, ?LINE, Term_1]};
+ E ->
+ E
+ end;
+ eof ->
+ {ok, [Tab, lists:reverse(R)]};
+ Error ->
+ Error
end.
parse_term({Callers, Func, Called})
@@ -777,10 +712,10 @@ parse_term({Callers, Func, Called})
Called_1 = lists:map(fun parse_clocks/1, Called),
Result = {Callers_1, Func_1, Called_1},
case chk_invariant(Result) of
- ok ->
- {ok, Result};
- Error ->
- Error
+ ok ->
+ {ok, Result};
+ Error ->
+ Error
end;
parse_term([{_, _, _, _} = Clocks | Tail]) ->
{ok, [parse_clocks(Clocks) | Tail]};
@@ -798,41 +733,41 @@ parse_clocks(Clocks) ->
chk_invariant({Callers, {MFA, Cnt, Acc, Own}, Called} = Term) ->
{_, Callers_Cnt, Callers_Acc, Callers_Own} = Callers_Sum = sum(Callers),
-% {_, Called_Cnt, Called_Acc, Called_Own} = Called_Sum = sum(Called),
+ % {_, Called_Cnt, Called_Acc, Called_Own} = Called_Sum = sum(Called),
case {MFA,
- lists:keymember(suspend, 1, Callers),
- lists:keymember(garbage_collect, 1, Callers),
- Called} of
- {suspend, false, _, []} ->
- ok;
- {suspend, _, _, _} = Weird ->
- {error, [?MODULE, ?LINE, Weird, Term]};
- {garbage_collect, false, false, []} ->
- ok;
- {garbage_collect, false, false, [{suspend, _, _, _}]} ->
- ok;
- {garbage_collect, _, _, _} = Weird ->
- {error, [?MODULE, ?LINE, Weird, Term]};
- {undefined, false, false, _}
- when Callers == [], Cnt == 0, Acc == 0, Own == 0 ->
- ok;
- {undefined, _, _, _} = Weird ->
- {error, [?MODULE, ?LINE, Weird, Term]};
- {_, _, _, _} ->
- case chk_self_call(Term) of
- true when Callers_Cnt /= Cnt; Callers_Acc /= Acc;
- Callers_Own /= Own ->
- {error, [?MODULE, ?LINE, Callers_Sum, Term]};
-% true when Called_Acc + Own /= Acc ->
-% io:format("WARNING: ~p:~p, ~p, ~p.~n",
-% [?MODULE, ?LINE, Term, Called_Sum]),
-% {error, [?MODULE, ?LINE, Term, Called_Sum]};
-% ok;
- true ->
- ok;
- false ->
- {error, [?MODULE, ?LINE, Term]}
- end
+ lists:keymember(suspend, 1, Callers),
+ lists:keymember(garbage_collect, 1, Callers),
+ Called} of
+ {suspend, false, _, []} ->
+ ok;
+ {suspend, _, _, _} = Weird ->
+ {error, [?MODULE, ?LINE, Weird, Term]};
+ {garbage_collect, false, false, []} ->
+ ok;
+ {garbage_collect, false, false, [{suspend, _, _, _}]} ->
+ ok;
+ {garbage_collect, _, _, _} = Weird ->
+ {error, [?MODULE, ?LINE, Weird, Term]};
+ {undefined, false, false, _}
+ when Callers == [], Cnt == 0, Acc == 0, Own == 0 ->
+ ok;
+ {undefined, _, _, _} = Weird ->
+ {error, [?MODULE, ?LINE, Weird, Term]};
+ {_, _, _, _} ->
+ case chk_self_call(Term) of
+ true when Callers_Cnt /= Cnt; Callers_Acc /= Acc;
+ Callers_Own /= Own ->
+ {error, [?MODULE, ?LINE, Callers_Sum, Term]};
+ % true when Called_Acc + Own /= Acc ->
+ % io:format("WARNING: ~p:~p, ~p, ~p.~n",
+ % [?MODULE, ?LINE, Term, Called_Sum]),
+ % {error, [?MODULE, ?LINE, Term, Called_Sum]};
+ % ok;
+ true ->
+ ok;
+ false ->
+ {error, [?MODULE, ?LINE, Term]}
+ end
end.
ts_sub({A, B, C}, {A0, B0, C0}) ->
@@ -840,28 +775,28 @@ ts_sub({A, B, C}, {A0, B0, C0}) ->
sum(Funcs) ->
{sum, _Cnt, _Acc, _Own} =
- lists:foldl(
- fun ({_, C1, A1, O1}, {sum, C2, A2, O2}) ->
- {sum, C1+C2, A1+A2, O1+O2}
- end,
- {sum, 0, 0, 0},
- Funcs).
+ lists:foldl(
+ fun ({_, C1, A1, O1}, {sum, C2, A2, O2}) ->
+ {sum, C1+C2, A1+A2, O1+O2}
+ end,
+ {sum, 0, 0, 0},
+ Funcs).
chk_self_call({Callers, {MFA, _Cnt, _Acc, _Own}, Called}) ->
case lists:keysearch(MFA, 1, Callers) of
- false ->
- true;
- {value, {MFA, C, 0, O}} ->
- case lists:keysearch(MFA, 1, Called) of
- false ->
- false;
- {value, {MFA, C, 0, O}} ->
- true;
- {value, _} ->
- false
- end;
- {value, _} ->
- false
+ false ->
+ true;
+ {value, {MFA, C, 0, O}} ->
+ case lists:keysearch(MFA, 1, Called) of
+ false ->
+ false;
+ {value, {MFA, C, 0, O}} ->
+ true;
+ {value, _} ->
+ false
+ end;
+ {value, _} ->
+ false
end.
@@ -879,9 +814,8 @@ ets_select_fold_1('$end_of_table', _, Acc) ->
Acc;
ets_select_fold_1({Matches, Continuation}, Fun, Acc) ->
ets_select_fold_1(ets:select(Continuation),
- Fun,
- lists:foldl(Fun, Acc, Matches)).
-
+ Fun,
+ lists:foldl(Fun, Acc, Matches)).
% ets_select_foreach(Table, MatchSpec, Limit, Fun) ->
@@ -910,7 +844,7 @@ check_own_and_acc(TraceFile, AnalysisFile) ->
check_own_and_acc(TraceFile, AnalysisFile, HandlerFun) ->
dbg:trace_client(file,TraceFile,{HandlerFun,{init,self()}}),
receive {result,Result} ->
- compare(Result,get_own_and_acc_from_analysis(AnalysisFile))
+ compare(Result,get_own_and_acc_from_analysis(AnalysisFile))
end.
%% handle_trace_traced(Trace, Msg) ->
@@ -924,21 +858,21 @@ handle_trace(Trace,{init,Parent}) ->
handle_trace({trace_ts,Pid,in,MFA,TS},P) ->
?dbg("~p",[{{in,Pid,MFA},get(Pid)}]),
case get(Pid) of
- [suspend|[suspend|_]=NewStack] ->
- T = ts_sub(TS,get({Pid,last_ts})),
- update_acc(Pid,NewStack,T),
- put(Pid,NewStack);
- [suspend|NewStack] = Stack ->
- T = ts_sub(TS,get({Pid,last_ts})),
- update_acc(Pid,Stack,T),
- put(Pid,NewStack);
- [] ->
- put(Pid,[MFA]),
- insert(Pid,MFA);
- undefined ->
- put(first_ts,TS),
- put(Pid,[MFA]),
- insert(Pid,MFA)
+ [suspend|[suspend|_]=NewStack] ->
+ T = ts_sub(TS,get({Pid,last_ts})),
+ update_acc(Pid,NewStack,T),
+ put(Pid,NewStack);
+ [suspend|NewStack] = Stack ->
+ T = ts_sub(TS,get({Pid,last_ts})),
+ update_acc(Pid,Stack,T),
+ put(Pid,NewStack);
+ [] ->
+ put(Pid,[MFA]),
+ insert(Pid,MFA);
+ undefined ->
+ put(first_ts,TS),
+ put(Pid,[MFA]),
+ insert(Pid,MFA)
end,
put({Pid,last_ts},TS),
P;
@@ -946,17 +880,17 @@ handle_trace({trace_ts,Pid,out,_MfaOrZero,TS},P) ->
?dbg("~p",[{{out,Pid,_MfaOrZero},get(Pid)}]),
T = ts_sub(TS,get({Pid,last_ts})),
case get(Pid) of
- [suspend|S] = Stack ->
- update_acc(Pid,S,T),
- put(Pid,[suspend|Stack]);
- [MFA|_] = Stack ->
- insert(Pid,suspend),
- update_own(Pid,MFA,T),
- update_acc(Pid,Stack,T),
- put(Pid,[suspend|Stack]);
- [] ->
- insert(Pid,suspend),
- put(Pid,[suspend])
+ [suspend|S] = Stack ->
+ update_acc(Pid,S,T),
+ put(Pid,[suspend|Stack]);
+ [MFA|_] = Stack ->
+ insert(Pid,suspend),
+ update_own(Pid,MFA,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,[suspend|Stack]);
+ [] ->
+ insert(Pid,suspend),
+ put(Pid,[suspend])
end,
put({Pid,last_ts},TS),
P;
@@ -964,26 +898,26 @@ handle_trace({trace_ts,Pid,call,MFA,{cp,Caller},TS},P) ->
?dbg("~p",[{{call,Pid,MFA},get(Pid)}]),
T = ts_sub(TS,get({Pid,last_ts})),
case get(Pid) of
- [MFA|_] = Stack ->
- %% recursive
- update_own(Pid,MFA,T),
- update_acc(Pid,Stack,T);
- [CallingMFA|_] = Stack when Caller==undefined ->
- insert(Pid,MFA),
- update_own(Pid,CallingMFA,T),
- update_acc(Pid,Stack,T),
- put(Pid,[MFA|Stack]);
- [] when Caller==undefined ->
- insert(Pid,MFA),
- insert(Pid,MFA),
- put(Pid,[MFA]);
- Stack0 ->
- Stack = [CallingMFA|_] = insert_caller(Caller,Stack0,[]),
- insert(Pid,MFA),
- insert(Pid,Caller),
- update_own(Pid,CallingMFA,T),
- update_acc(Pid,Stack,T),
- put(Pid,[MFA|Stack])
+ [MFA|_] = Stack ->
+ %% recursive
+ update_own(Pid,MFA,T),
+ update_acc(Pid,Stack,T);
+ [CallingMFA|_] = Stack when Caller==undefined ->
+ insert(Pid,MFA),
+ update_own(Pid,CallingMFA,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,[MFA|Stack]);
+ [] when Caller==undefined ->
+ insert(Pid,MFA),
+ insert(Pid,MFA),
+ put(Pid,[MFA]);
+ Stack0 ->
+ Stack = [CallingMFA|_] = insert_caller(Caller,Stack0,[]),
+ insert(Pid,MFA),
+ insert(Pid,Caller),
+ update_own(Pid,CallingMFA,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,[MFA|Stack])
end,
put({Pid,last_ts},TS),
P;
@@ -991,59 +925,91 @@ handle_trace({trace_ts,Pid,return_to,MFA,TS},P) ->
?dbg("~p",[{{return_to,Pid,MFA},get(Pid)}]),
T = ts_sub(TS,get({Pid,last_ts})),
case get(Pid) of
- [MFA|_] = Stack ->
- %% recursive
- update_own(Pid,MFA,T),
- update_acc(Pid,Stack,T),
- put(Pid,Stack);
- [ReturnFromMFA,MFA|RestOfStack] = Stack ->
- update_own(Pid,ReturnFromMFA,T),
- update_acc(Pid,Stack,T),
- put(Pid,[MFA|RestOfStack]);
- [ReturnFromMFA|RestOfStack] = Stack ->
- update_own(Pid,ReturnFromMFA,T),
- update_acc(Pid,Stack,T),
- case find_return_to(MFA,RestOfStack) of
- [] when MFA==undefined ->
- put(Pid,[]);
- [] ->
- insert(Pid,MFA),
- put(Pid,[MFA]);
- NewStack ->
- put(Pid,NewStack)
- end
+ [MFA|_] = Stack ->
+ %% recursive
+ update_own(Pid,MFA,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,Stack);
+ [ReturnFromMFA,MFA|RestOfStack] = Stack ->
+ update_own(Pid,ReturnFromMFA,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,[MFA|RestOfStack]);
+ [ReturnFromMFA|RestOfStack] = Stack ->
+ update_own(Pid,ReturnFromMFA,T),
+ update_acc(Pid,Stack,T),
+ case find_return_to(MFA,RestOfStack) of
+ [] when MFA==undefined ->
+ put(Pid,[]);
+ [] ->
+ insert(Pid,MFA),
+ put(Pid,[MFA]);
+ NewStack ->
+ put(Pid,NewStack)
+ end
end,
put({Pid,last_ts},TS),
P;
-handle_trace({trace_ts,Pid,gc_start,_,TS},P) ->
- ?dbg("~p",[{{gc_start,Pid},get(Pid)}]),
+handle_trace({trace_ts,Pid,gc_minor_start,_,TS},P) ->
+ ?dbg("~p",[{{gc_minor_start,Pid},get(Pid)}]),
case get(Pid) of
- [suspend|_] = Stack ->
- T = ts_sub(TS,get({Pid,last_ts})),
- insert(Pid,garbage_collect),
- update_acc(Pid,Stack,T),
- put(Pid,[garbage_collect|Stack]);
- [CallingMFA|_] = Stack ->
- T = ts_sub(TS,get({Pid,last_ts})),
- insert(Pid,garbage_collect),
- update_own(Pid,CallingMFA,T),
- update_acc(Pid,Stack,T),
- put(Pid,[garbage_collect|Stack]);
- undefined ->
- put(first_ts,TS),
- put(Pid,[garbage_collect]),
- insert(Pid,garbage_collect)
+ [suspend|_] = Stack ->
+ T = ts_sub(TS,get({Pid,last_ts})),
+ insert(Pid,garbage_collect),
+ update_acc(Pid,Stack,T),
+ put(Pid,[garbage_collect|Stack]);
+ [CallingMFA|_] = Stack ->
+ T = ts_sub(TS,get({Pid,last_ts})),
+ insert(Pid,garbage_collect),
+ update_own(Pid,CallingMFA,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,[garbage_collect|Stack]);
+ undefined ->
+ put(first_ts,TS),
+ put(Pid,[garbage_collect]),
+ insert(Pid,garbage_collect)
end,
put({Pid,last_ts},TS),
P;
-handle_trace({trace_ts,Pid,gc_end,_,TS},P) ->
- ?dbg("~p",[{{gc_end,Pid},get(Pid)}]),
+handle_trace({trace_ts,Pid,gc_major_start,_,TS},P) ->
+ ?dbg("~p",[{{gc_minor_start,Pid},get(Pid)}]),
+ case get(Pid) of
+ [suspend|_] = Stack ->
+ T = ts_sub(TS,get({Pid,last_ts})),
+ insert(Pid,garbage_collect),
+ update_acc(Pid,Stack,T),
+ put(Pid,[garbage_collect|Stack]);
+ [CallingMFA|_] = Stack ->
+ T = ts_sub(TS,get({Pid,last_ts})),
+ insert(Pid,garbage_collect),
+ update_own(Pid,CallingMFA,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,[garbage_collect|Stack]);
+ undefined ->
+ put(first_ts,TS),
+ put(Pid,[garbage_collect]),
+ insert(Pid,garbage_collect)
+ end,
+ put({Pid,last_ts},TS),
+ P;
+handle_trace({trace_ts,Pid,gc_minor_end,_,TS},P) ->
+ ?dbg("~p",[{{gc_minor_end,Pid},get(Pid)}]),
T = ts_sub(TS,get({Pid,last_ts})),
case get(Pid) of
- [garbage_collect|RestOfStack] = Stack ->
- update_own(Pid,garbage_collect,T),
- update_acc(Pid,Stack,T),
- put(Pid,RestOfStack)
+ [garbage_collect|RestOfStack] = Stack ->
+ update_own(Pid,garbage_collect,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,RestOfStack)
+ end,
+ put({Pid,last_ts},TS),
+ P;
+handle_trace({trace_ts,Pid,gc_major_end,_,TS},P) ->
+ ?dbg("~p",[{{gc_major_end,Pid},get(Pid)}]),
+ T = ts_sub(TS,get({Pid,last_ts})),
+ case get(Pid) of
+ [garbage_collect|RestOfStack] = Stack ->
+ update_own(Pid,garbage_collect,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,RestOfStack)
end,
put({Pid,last_ts},TS),
P;
@@ -1051,27 +1017,45 @@ handle_trace({trace_ts,Pid,spawn,NewPid,{M,F,Args},TS},P) ->
MFA = {M,F,length(Args)},
?dbg("~p",[{{spawn,Pid,NewPid,MFA},get(Pid)}]),
T = ts_sub(TS,get({Pid,last_ts})),
- put({NewPid,last_ts},TS),
- put(NewPid,[suspend,MFA]),
- insert(NewPid,suspend),
- insert(NewPid,MFA),
+ case get(NewPid) of
+ undefined ->
+ put({NewPid,last_ts},TS),
+ put(NewPid,[suspend,MFA]),
+ insert(NewPid,suspend),
+ insert(NewPid,MFA);
+ _Else ->
+ ok
+ end,
case get(Pid) of
- [SpawningMFA|_] = Stack ->
- update_own(Pid,SpawningMFA,T),
- update_acc(Pid,Stack,T)
+ [SpawningMFA|_] = Stack ->
+ update_own(Pid,SpawningMFA,T),
+ update_acc(Pid,Stack,T)
end,
put({Pid,last_ts},TS),
P;
+handle_trace({trace_ts,NewPid,spawned,Pid,{M,F,Args},TS},P) ->
+ MFA = {M,F,length(Args)},
+ ?dbg("~p",[{{spawned,NewPid,Pid,MFA},get(NewPid)}]),
+ case get(NewPid) of
+ undefined ->
+ put({NewPid,last_ts},TS),
+ put(NewPid,[suspend,MFA]),
+ insert(NewPid,suspend),
+ insert(NewPid,MFA);
+ _Else ->
+ ok
+ end,
+ P;
handle_trace({trace_ts,Pid,exit,_Reason,TS},P) ->
?dbg("~p",[{{exit,Pid,_Reason},get(Pid)}]),
T = ts_sub(TS,get({Pid,last_ts})),
case get(Pid) of
- [DyingMFA|_] = Stack ->
- update_own(Pid,DyingMFA,T),
- update_acc(Pid,Stack,T),
- put(Pid,[]);
- [] ->
- ok
+ [DyingMFA|_] = Stack ->
+ update_own(Pid,DyingMFA,T),
+ update_acc(Pid,Stack,T),
+ put(Pid,[]);
+ [] ->
+ ok
end,
put({Pid,last_ts},TS),
P;
@@ -1089,6 +1073,7 @@ handle_trace(end_of_trace,P) ->
P ! {result,[{totals,TotAcc,TotOwn}|ProcOwns]++Result},
P;
handle_trace(Other,_P) ->
+ ct:log("Got unexpected trace message: ~p",[Other]),
exit({unexpected,Other}).
find_return_to(MFA,[MFA|_]=Stack) ->
@@ -1107,10 +1092,10 @@ insert_caller(MFA,[],Result) ->
insert(Pid,MFA) ->
case ets:member(fprof_verify_tab,{Pid,MFA}) of
- false ->
- ets:insert(fprof_verify_tab,{{Pid,MFA},0,0});
- true ->
- ok
+ false ->
+ ets:insert(fprof_verify_tab,{{Pid,MFA},0,0});
+ true ->
+ ok
end.
update_own(Pid,MFA,T) ->
@@ -1118,11 +1103,11 @@ update_own(Pid,MFA,T) ->
update_acc(Pid,[MFA|Rest],T) ->
case lists:member(MFA,Rest) of
- true ->
- %% Only charge one time for recursive functions
- ok;
- false ->
- ets:update_counter(fprof_verify_tab,{Pid,MFA},{2,T})
+ true ->
+ %% Only charge one time for recursive functions
+ ok;
+ false ->
+ ets:update_counter(fprof_verify_tab,{Pid,MFA},{2,T})
end,
update_acc(Pid,Rest,T);
update_acc(_Pid,[],_T) ->
@@ -1140,63 +1125,63 @@ get_last_ts([],Last) ->
get_proc_owns([{{Pid,_MFA},_Acc,Own}|Rest],Result,Sum) ->
NewResult =
- case lists:keysearch(Pid,1,Result) of
- {value,{Pid,undefined,PidOwn}} ->
- lists:keyreplace(Pid,1,Result,{Pid,undefined,PidOwn+Own});
- false ->
- [{Pid,undefined,Own}|Result]
+ case lists:keysearch(Pid,1,Result) of
+ {value,{Pid,undefined,PidOwn}} ->
+ lists:keyreplace(Pid,1,Result,{Pid,undefined,PidOwn+Own});
+ false ->
+ [{Pid,undefined,Own}|Result]
end,
get_proc_owns(Rest,NewResult,Sum+Own);
get_proc_owns([],Result,Sum) ->
{Sum,Result}.
-
+
compare([X|Rest],FprofResult) ->
FprofResult1 =
- case lists:member(X,FprofResult) of
- true ->
- ?dbg("~p",[X]),
- lists:delete(X,FprofResult);
- false ->
- case lists:keysearch(element(1,X),1,FprofResult) of
- {value,Fprof} ->
- put(compare_error,true),
- io:format("Error: Different values\n"
- "Fprof: ~p\n"
- "Simulator: ~p",[Fprof,X]),
- lists:delete(Fprof,FprofResult);
- false ->
- put(compare_error,true),
- io:format("Error: Missing in fprof: ~p",[X]),
- FprofResult
- end
- end,
+ case lists:member(X,FprofResult) of
+ true ->
+ ?dbg("~p",[X]),
+ lists:delete(X,FprofResult);
+ false ->
+ case lists:keysearch(element(1,X),1,FprofResult) of
+ {value,Fprof} ->
+ put(compare_error,true),
+ io:format("Error: Different values\n"
+ "Fprof: ~p\n"
+ "Simulator: ~p",[Fprof,X]),
+ lists:delete(Fprof,FprofResult);
+ false ->
+ put(compare_error,true),
+ io:format("Error: Missing in fprof: ~p",[X]),
+ FprofResult
+ end
+ end,
compare(Rest,FprofResult1);
compare([],Rest) ->
case {remove_undefined(Rest,[]),get(compare_error)} of
- {[],undefined} -> ok;
- {Error,_} ->
- case Error of
- [] -> ok;
- _ -> io:format("\nMissing in simulator results:\n~p\n",[Error])
- end,
- ?t:fail({error,mismatch_between_simulator_and_fprof})
+ {[],undefined} -> ok;
+ {Error,_} ->
+ case Error of
+ [] -> ok;
+ _ -> io:format("\nMissing in simulator results:\n~p\n",[Error])
+ end,
+ ct:fail({error,mismatch_between_simulator_and_fprof})
end.
-
+
remove_undefined([{{_Pid,undefined},_,_}|Rest],Result) ->
remove_undefined(Rest,Result);
remove_undefined([X|Rest],Result) ->
remove_undefined(Rest,[X|Result]);
remove_undefined([],Result) ->
Result.
-
+
get_own_and_acc_from_analysis(Log) ->
case file:consult(Log) of
- {ok,[_Options,[{totals,_,TotAcc,TotOwn}]|Rest]} ->
- get_own_and_acc(undefined,Rest,
- [{totals,m1000(TotAcc),m1000(TotOwn)}]);
- Error ->
- exit({error,{cant_open,Log,Error}})
+ {ok,[_Options,[{totals,_,TotAcc,TotOwn}]|Rest]} ->
+ get_own_and_acc(undefined,Rest,
+ [{totals,m1000(TotAcc),m1000(TotOwn)}]);
+ Error ->
+ exit({error,{cant_open,Log,Error}})
end.
get_own_and_acc(_,[[{PidStr,_,Acc,Own}|_]|Rest],Result) ->
@@ -1212,3 +1197,5 @@ m1000(undefined) ->
m1000(X) ->
round(X*1000).
+divide(_,0) -> inf;
+divide(A,B) -> A / B.
diff --git a/lib/tools/test/ignore_cores.erl b/lib/tools/test/ignore_cores.erl
index 13f34cd10f..25dce346b9 100644
--- a/lib/tools/test/ignore_cores.erl
+++ b/lib/tools/test/ignore_cores.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
-module(ignore_cores).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-export([init/1, fini/1, setup/3, setup/4, restore/1, dir/1]).
@@ -53,7 +53,7 @@ init(Config) ->
fini(Config) ->
#ignore_cores{org_cwd = OrgCWD,
org_path = OrgPath,
- org_pwd_env = OrgPWD} = ?config(ignore_cores, Config),
+ org_pwd_env = OrgPWD} = proplists:get_value(ignore_cores, Config),
ok = file:set_cwd(OrgCWD),
true = code:set_path(OrgPath),
case OrgPWD of
@@ -70,10 +70,10 @@ setup(Suite, Testcase, Config, SetCwd) when is_atom(Suite),
is_list(Config) ->
#ignore_cores{org_cwd = OrgCWD,
org_path = OrgPath,
- org_pwd_env = OrgPWD} = ?config(ignore_cores, Config),
+ org_pwd_env = OrgPWD} = proplists:get_value(ignore_cores, Config),
Path = lists:map(fun (".") -> OrgCWD; (Dir) -> Dir end, OrgPath),
true = code:set_path(Path),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
IgnDir = filename:join([PrivDir,
atom_to_list(Suite)
++ "_"
@@ -94,7 +94,7 @@ setup(Suite, Testcase, Config, SetCwd) when is_atom(Suite),
end,
ok = file:write_file(filename:join([IgnDir, "ignore_core_files"]), <<>>),
%% cores are dumped in /cores on MacOS X
- CoresDir = case {?t:os_type(), filelib:is_dir("/cores")} of
+ CoresDir = case {os:type(), filelib:is_dir("/cores")} of
{{unix,darwin}, true} ->
filelib:fold_files("/cores",
"^core.*$",
@@ -119,7 +119,7 @@ restore(Config) ->
org_path = OrgPath,
org_pwd_env = OrgPWD,
ign_dir = IgnDir,
- cores_dir = CoresDir} = ?config(ignore_cores, Config),
+ cores_dir = CoresDir} = proplists:get_value(ignore_cores, Config),
try
case CoresDir of
false ->
@@ -155,5 +155,5 @@ restore(Config) ->
dir(Config) ->
- #ignore_cores{ign_dir = Dir} = ?config(ignore_cores, Config),
+ #ignore_cores{ign_dir = Dir} = proplists:get_value(ignore_cores, Config),
Dir.
diff --git a/lib/tools/test/instrument_SUITE.erl b/lib/tools/test/instrument_SUITE.erl
index 3b981a9303..f37d28c277 100644
--- a/lib/tools/test/instrument_SUITE.erl
+++ b/lib/tools/test/instrument_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,133 +19,99 @@
%%
-module(instrument_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2,end_per_testcase/2]).
-
+-export([all/0, suite/0]).
-export(['+Mim true'/1, '+Mis true'/1]).
--include_lib("test_server/include/test_server.hrl").
-
-init_per_testcase(_Case, Config) ->
- ?line Dog=?t:timetrap(10000),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,10}}].
all() ->
['+Mim true', '+Mis true'].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-'+Mim true'(doc) -> ["Check that memory data can be read and processed"];
-'+Mim true'(suite) -> [];
+%% Check that memory data can be read and processed
'+Mim true'(Config) when is_list(Config) ->
- ?line Node = start_slave("+Mim true"),
- ?line MD = rpc:call(Node, instrument, memory_data, []),
- ?line [{total,[{sizes,S1,S2,S3},{blocks,B1,B2,B3}]}]
+ Node = start_slave("+Mim true"),
+ MD = rpc:call(Node, instrument, memory_data, []),
+ [{total,[{sizes,S1,S2,S3},{blocks,B1,B2,B3}]}]
= rpc:call(Node, instrument, memory_status, [total]),
- ?line stop_slave(Node),
- ?line true = S1 =< S2,
- ?line true = S2 =< S3,
- ?line true = B1 =< B2,
- ?line true = B2 =< B3,
- ?line MDS = instrument:sort(MD),
- ?line {Low, High} = instrument:mem_limits(MDS),
- ?line true = Low < High,
- ?line {_, AL} = MDS,
- ?line SumBlocks = instrument:sum_blocks(MD),
- ?line case SumBlocks of
- N when is_integer(N) ->
- ?line N = lists:foldl(fun ({_,_,Size,_}, Sum) ->
- Size+Sum
- end,
- 0,
- AL),
- ?line N =< S3;
- Other ->
- ?line ?t:fail(Other)
- end,
- ?line lists:foldl(
- fun ({TDescr,Addr,Size,Proc}, MinAddr) ->
- ?line true = TDescr /= invalid_type,
- ?line true = is_integer(TDescr),
- ?line true = is_integer(Addr),
- ?line true = is_integer(Size),
- ?line true = Addr >= MinAddr,
- ?line case Proc of
- {0, Number, Serial} ->
- ?line true = is_integer(Number),
- ?line true = is_integer(Serial);
- undefined ->
- ok;
- BadProc ->
- ?line ?t:fail({badproc, BadProc})
- end,
- ?line NextMinAddr = Addr+Size,
- ?line true = NextMinAddr =< High,
- ?line NextMinAddr
- end,
- Low,
- AL),
- ?line {_, DAL} = instrument:descr(MDS),
- ?line lists:foreach(
- fun ({TDescr,_,_,Proc}) ->
- ?line true = TDescr /= invalid_type,
- ?line true = is_atom(TDescr) orelse is_list(TDescr),
- ?line true = is_pid(Proc) orelse Proc == undefined
- end,
- DAL),
- ?line ASL = lists:map(fun ({_,A,S,_}) -> {A,S} end, AL),
- ?line ASL = lists:map(fun ({_,A,S,_}) -> {A,S} end, DAL),
- ?line instrument:holes(MDS),
- ?line {comment,
- "total status - sum of blocks = " ++ integer_to_list(S1-SumBlocks)}.
-
-'+Mis true'(doc) -> ["Check that memory data can be read and processed"];
-'+Mis true'(suite) -> [];
+ stop_slave(Node),
+ true = S1 =< S2,
+ true = S2 =< S3,
+ true = B1 =< B2,
+ true = B2 =< B3,
+ MDS = instrument:sort(MD),
+ {Low, High} = instrument:mem_limits(MDS),
+ true = Low < High,
+ {_, AL} = MDS,
+ SumBlocks = instrument:sum_blocks(MD),
+ case SumBlocks of
+ N when is_integer(N) ->
+ N = lists:foldl(fun ({_,_,Size,_}, Sum) ->
+ Size+Sum
+ end, 0, AL),
+ true = N =< S3;
+ Other ->
+ ct:fail(Other)
+ end,
+ lists:foldl(
+ fun ({TDescr,Addr,Size,Proc}, MinAddr) ->
+ true = TDescr /= invalid_type,
+ true = is_integer(TDescr),
+ true = is_integer(Addr),
+ true = is_integer(Size),
+ true = Addr >= MinAddr,
+ case Proc of
+ {0, Number, Serial} ->
+ true = is_integer(Number),
+ true = is_integer(Serial);
+ undefined ->
+ ok;
+ BadProc ->
+ ct:fail({badproc, BadProc})
+ end,
+ NextMinAddr = Addr+Size,
+ true = NextMinAddr =< High,
+ NextMinAddr
+ end, Low, AL),
+ {_, DAL} = instrument:descr(MDS),
+ lists:foreach(
+ fun ({TDescr,_,_,Proc}) ->
+ true = TDescr /= invalid_type,
+ true = is_atom(TDescr) orelse is_list(TDescr),
+ true = is_pid(Proc) orelse Proc == undefined
+ end, DAL),
+ ASL = lists:map(fun ({_,A,S,_}) -> {A,S} end, AL),
+ ASL = lists:map(fun ({_,A,S,_}) -> {A,S} end, DAL),
+ instrument:holes(MDS),
+ {comment, "total status - sum of blocks = " ++ integer_to_list(S1-SumBlocks)}.
+
+%% Check that memory data can be read and processed
'+Mis true'(Config) when is_list(Config) ->
- ?line Node = start_slave("+Mis true"),
- ?line [{total,[{sizes,S1,S2,S3},{blocks,B1,B2,B3}]}]
+ Node = start_slave("+Mis true"),
+ [{total,[{sizes,S1,S2,S3},{blocks,B1,B2,B3}]}]
= rpc:call(Node, instrument, memory_status, [total]),
- ?line true = S1 =< S2,
- ?line true = S2 =< S3,
- ?line true = B1 =< B2,
- ?line true = B2 =< B3,
- ?line true = is_list(rpc:call(Node,instrument,memory_status,[allocators])),
- ?line true = is_list(rpc:call(Node,instrument,memory_status,[classes])),
- ?line true = is_list(rpc:call(Node,instrument,memory_status,[types])),
- ?line ok.
+ true = S1 =< S2,
+ true = S2 =< S3,
+ true = B1 =< B2,
+ true = B2 =< B3,
+ true = is_list(rpc:call(Node,instrument,memory_status,[allocators])),
+ true = is_list(rpc:call(Node,instrument,memory_status,[classes])),
+ true = is_list(rpc:call(Node,instrument,memory_status,[types])),
+ ok.
start_slave(Args) ->
- ?line {A, B, C} = now(),
- ?line MicroSecs = A*1000000000000 + B*1000000 + C,
- ?line Name = "instr_" ++ integer_to_list(MicroSecs),
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line {ok, Node} = ?t:start_node(list_to_atom(Name),
- slave,
- [{args, "-pa " ++ Pa ++ " " ++ Args}]),
- ?line Node.
+ MicroSecs = erlang:monotonic_time(),
+ Name = "instr" ++ integer_to_list(MicroSecs),
+ Pa = filename:dirname(code:which(?MODULE)),
+ {ok, Node} = test_server:start_node(list_to_atom(Name),
+ slave,
+ [{args, "-pa " ++ Pa ++ " " ++ Args}]),
+ Node.
stop_slave(Node) ->
- ?line true = ?t:stop_node(Node).
+ true = test_server:stop_node(Node).
diff --git a/lib/tools/test/lcnt_SUITE.erl b/lib/tools/test/lcnt_SUITE.erl
index f3789a4137..d39a5deeab 100644
--- a/lib/tools/test/lcnt_SUITE.erl
+++ b/lib/tools/test/lcnt_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,59 +19,39 @@
%%
-module(lcnt_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
--export([init_per_suite/1, end_per_suite/1]).
+-export([all/0, suite/0]).
-export([init_per_testcase/2, end_per_testcase/2]).
%% Test cases
--export([
- t_load/1,
- t_conflicts/1,
- t_locations/1,
- t_swap_keys/1
- ]).
-
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(4)).
-
-init_per_suite(Config) when is_list(Config) ->
- Config.
-
-end_per_suite(Config) when is_list(Config) ->
- Config.
+-export([t_load/1,
+ t_conflicts/1,
+ t_locations/1,
+ t_swap_keys/1]).
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog,Dog} | Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
catch lcnt:stop(),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> [t_load, t_conflicts, t_locations, t_swap_keys].
-
-groups() -> [].
-
-init_per_group(_GroupName, Config) -> Config.
-
-end_per_group(_GroupName, Config) -> Config.
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,4}}].
+all() ->
+ [t_load, t_conflicts, t_locations, t_swap_keys].
%%----------------------------------------------------------------------
%% Tests
%%----------------------------------------------------------------------
-t_load(suite) -> [];
-t_load(doc) -> ["Load data from file."];
+%% Load data from file.
t_load(Config) when is_list(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
Files = [filename:join([Path,"big_bang_40.lcnt"]),
filename:join([Path,"ehb_3_3_hist.lcnt"])],
ok = t_load_file(Files),
@@ -84,10 +64,9 @@ t_load_file([File|Files]) ->
ok = lcnt:stop(),
t_load_file(Files).
-t_conflicts(suite) -> [];
-t_conflicts(doc) -> ["API: conflicts"];
+%% API: conflicts
t_conflicts(Config) when is_list(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
Files = [filename:join([Path,"big_bang_40.lcnt"]),
filename:join([Path,"ehb_3_3_hist.lcnt"])],
ok = t_conflicts_file(Files),
@@ -118,10 +97,9 @@ test_conflicts_opts([Opt|Opts]) ->
ok = lcnt:conflicts(Opt),
test_conflicts_opts(Opts).
-t_locations(suite) -> [];
-t_locations(doc) -> ["API: locations"];
+%% API: locations
t_locations(Config) when is_list(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
Files = [filename:join([Path,"big_bang_40.lcnt"]),
filename:join([Path,"ehb_3_3_hist.lcnt"])],
ok = t_locations_file(Files),
@@ -151,10 +129,9 @@ test_locations_opts([Opt|Opts]) ->
ok = lcnt:locations(Opt),
test_locations_opts(Opts).
-t_swap_keys(suite) -> [];
-t_swap_keys(doc) -> ["Test interchanging port/process id with class"];
+%% Test interchanging port/process id with class
t_swap_keys(Config) when is_list(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
Files = [filename:join([Path,"big_bang_40.lcnt"]),
filename:join([Path,"ehb_3_3_hist.lcnt"])],
ok = t_swap_keys_file(Files),
@@ -169,12 +146,3 @@ t_swap_keys_file([File|Files]) ->
ok = lcnt:conflicts(),
ok = lcnt:stop(),
t_swap_keys_file(Files).
-
-
-%%----------------------------------------------------------------------
-%% Auxiliary tests
-%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Auxiliary
-%%----------------------------------------------------------------------
diff --git a/lib/tools/test/make_SUITE.erl b/lib/tools/test/make_SUITE.erl
index 70bc8502bf..e6284db8b8 100644
--- a/lib/tools/test/make_SUITE.erl
+++ b/lib/tools/test/make_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,12 +20,12 @@
-module(make_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, make_all/1, make_files/1]).
+ init_per_group/2,end_per_group/2, make_all/1, make_files/1]).
-export([otp_6057_init/1,
- otp_6057_a/1, otp_6057_b/1, otp_6057_c/1,
- otp_6057_end/1]).
+ otp_6057_a/1, otp_6057_b/1, otp_6057_c/1,
+ otp_6057_end/1]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
@@ -44,7 +44,7 @@ all() ->
groups() ->
[{otp_6057,[],[otp_6057_a, otp_6057_b,
- otp_6057_c]}].
+ otp_6057_c]}].
init_per_suite(Config) ->
Config.
@@ -61,52 +61,50 @@ end_per_group(_GroupName, Config) ->
test_files() -> ["test1", "test2", "test3", "test4"].
-make_all(suite) -> [];
make_all(Config) when is_list(Config) ->
- ?line Current = prepare_data_dir(Config),
- ?line up_to_date = make:all(),
- ?line ok = ensure_exists(test_files()),
- ?line ok = ensure_exists(["test5"],".S"), % Emakefile: [{test5,['S']}
- ?line file:set_cwd(Current),
- ?line ensure_no_messages(),
+ Current = prepare_data_dir(Config),
+ up_to_date = make:all(),
+ ok = ensure_exists(test_files()),
+ ok = ensure_exists(["test5"],".S"), % Emakefile: [{test5,['S']}
+ file:set_cwd(Current),
+ ensure_no_messages(),
ok.
-make_files(suite) -> [];
make_files(Config) when is_list(Config) ->
- ?line Current = prepare_data_dir(Config),
+ Current = prepare_data_dir(Config),
%% Make files that exist.
- ?line Files = [test1, test2],
- ?line up_to_date = make:files(Files), % ok files
- ?line ok = ensure_exists(Files),
+ Files = [test1, test2],
+ up_to_date = make:files(Files), % ok files
+ ok = ensure_exists(Files),
- ?line error = make:files([test1,test7]), % non existing file
- ?line up_to_date = make:files([test1,test2],[debug_info]), % with option
+ error = make:files([test1,test7]), % non existing file
+ up_to_date = make:files([test1,test2],[debug_info]), % with option
- ?line file:set_cwd(Current),
- ?line ensure_no_messages(),
+ file:set_cwd(Current),
+ ensure_no_messages(),
ok.
%% Moves to the data directory of this suite, clean it from any object
%% files (*.jam for a JAM emulator). Returns the previous directory.
prepare_data_dir(Config) ->
- ?line {ok, Current} = file:get_cwd(),
- ?line {value, {data_dir, Dir}} = lists:keysearch(data_dir, 1, Config),
- ?line file:set_cwd(Dir),
- ?line {ok, Files} = file:list_dir("."),
- ?line delete_obj(Files, code:objfile_extension()),
- ?line ensure_no_messages(),
+ {ok, Current} = file:get_cwd(),
+ {value, {data_dir, Dir}} = lists:keysearch(data_dir, 1, Config),
+ file:set_cwd(Dir),
+ {ok, Files} = file:list_dir("."),
+ delete_obj(Files, code:objfile_extension()),
+ ensure_no_messages(),
Current.
delete_obj([File|Rest], ObjExt) ->
- ?line case filename:extension(File) of
- ObjExt -> file:delete(File);
- ".S" -> file:delete(File);
- _ -> ok
- end,
- ?line delete_obj(Rest, ObjExt);
+ case filename:extension(File) of
+ ObjExt -> file:delete(File);
+ ".S" -> file:delete(File);
+ _ -> ok
+ end,
+ delete_obj(Rest, ObjExt);
delete_obj([], _) ->
ok.
@@ -120,26 +118,26 @@ ensure_exists([Name|Rest], ObjExt) when is_atom(Name) ->
ensure_exists([atom_to_list(Name)|Rest], ObjExt);
ensure_exists([Name|Rest], ObjExt) ->
case filelib:is_regular(Name++ObjExt) of
- true ->
- ensure_exists(Rest, ObjExt);
- false ->
- Name++ObjExt
+ true ->
+ ensure_exists(Rest, ObjExt);
+ false ->
+ Name++ObjExt
end;
ensure_exists([], _) ->
ok.
otp_6057_init(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Create the directories PrivDir/otp_6057/src1, /src2 and /ebin
Src1 = filename:join([PrivDir, otp_6057, src1]),
Src2 = filename:join([PrivDir, otp_6057, src2]),
Ebin = filename:join([PrivDir, otp_6057, ebin]),
- ?line ok = file:make_dir(filename:join(PrivDir, otp_6057)),
- ?line ok = file:make_dir(Src1),
- ?line ok = file:make_dir(Src2),
- ?line ok = file:make_dir(Ebin),
+ ok = file:make_dir(filename:join(PrivDir, otp_6057)),
+ ok = file:make_dir(Src1),
+ ok = file:make_dir(Src2),
+ ok = file:make_dir(Ebin),
%% Copy test1.erl and test2.erl to src1, and test3.erl to src2
Test1orig = filename:join(DataDir, "test1.erl"),
@@ -148,35 +146,32 @@ otp_6057_init(Config) when is_list(Config) ->
Test1 = filename:join(Src1, "test1.erl"),
Test2 = filename:join(Src1, "test2.erl"),
Test3 = filename:join(Src2, "test3.erl"),
- ?line {ok, _} = file:copy(Test1orig, Test1),
- ?line {ok, _} = file:copy(Test2orig, Test2),
- ?line {ok, _} = file:copy(Test3orig, Test3),
+ {ok, _} = file:copy(Test1orig, Test1),
+ {ok, _} = file:copy(Test2orig, Test2),
+ {ok, _} = file:copy(Test3orig, Test3),
%% Create an Emakefile in src1
Emakefile = filename:join(Src1, "Emakefile"),
- ?line {ok, Fd} = file:open(Emakefile, write),
- ?line ok = io:write(Fd, {["test1.erl","test2","../src2/test3"],
- [{outdir,"../ebin"}]}),
- ?line ok = io:fwrite(Fd, ".~n", []),
- ?line ok = file:close(Fd),
+ {ok, Fd} = file:open(Emakefile, write),
+ ok = io:write(Fd, {["test1.erl","test2","../src2/test3"],
+ [{outdir,"../ebin"}]}),
+ ok = io:fwrite(Fd, ".~n", []),
+ ok = file:close(Fd),
- ?line ensure_no_messages(),
+ ensure_no_messages(),
Config.
-otp_6057_a(suite) ->
- [];
-otp_6057_a(doc) ->
- ["Test that make:all/0, suite/0 looks for object file in correct place"];
+%% Test that make:all/0, suite/0 looks for object file in correct place
otp_6057_a(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Go to src1, saving old CWD
- ?line {ok, CWD} = file:get_cwd(),
+ {ok, CWD} = file:get_cwd(),
Src1 = filename:join([PrivDir, otp_6057, src1]),
- ?line ok = file:set_cwd(Src1),
+ ok = file:set_cwd(Src1),
%% Call make:all()
- ?line up_to_date = make:all(),
+ up_to_date = make:all(),
%% Ensure that all beam files are created in the ebin directory
Ebin = filename:join([PrivDir, otp_6057, ebin]),
@@ -184,109 +179,103 @@ otp_6057_a(Config) when is_list(Config) ->
Test2 = filename:join(Ebin, test2),
Test3 = filename:join(Ebin, test3),
case ensure_exists([Test1, Test2, Test3]) of
- ok -> ok;
- Missing ->
- ?line ?t:fail({"missing beam file", Missing})
+ ok -> ok;
+ Missing ->
+ ct:fail({"missing beam file", Missing})
end,
%% Check creation date of test1.beam and make sure it is not
%% recompiled if make:all() is called again.
%% (Sleep a while, if the file is recompiled within a second then
%% mtime will be the same).
- ?line {ok, FileInfo1} = file:read_file_info(Test1++".beam"),
+ {ok, FileInfo1} = file:read_file_info(Test1++".beam"),
Date1 = FileInfo1#file_info.mtime,
- ?t:sleep(?t:seconds(2)),
- ?line up_to_date = make:all(),
- ?line {ok, FileInfo2} = file:read_file_info(Test1++".beam"),
+ timer:sleep(2000),
+ up_to_date = make:all(),
+ {ok, FileInfo2} = file:read_file_info(Test1++".beam"),
case FileInfo2#file_info.mtime of
- Date1 -> ok;
- _Date2 ->
- ?line ?t:fail({"recompiled beam file", Test1++".beam"})
+ Date1 -> ok;
+ _Date2 ->
+ ct:fail({"recompiled beam file", Test1++".beam"})
end,
%% Remove the beam files
- ?line ok =
- ensure_removed([Test1++".beam",Test2++".beam",Test2++".beam"]),
+ ok =
+ ensure_removed([Test1++".beam",Test2++".beam",Test2++".beam"]),
%% Return to original CWD
- ?line ok = file:set_cwd(CWD),
+ ok = file:set_cwd(CWD),
- ?line ensure_no_messages(),
+ ensure_no_messages(),
ok.
-otp_6057_b(suite) ->
- [];
-otp_6057_b(doc) ->
- ["Test that make:files/1 can handle a file in another directory"];
+%% Test that make:files/1 can handle a file in another directory
otp_6057_b(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Go to src1, saving old CWD
- ?line {ok, CWD} = file:get_cwd(),
+ {ok, CWD} = file:get_cwd(),
Src1 = filename:join([PrivDir, otp_6057, src1]),
- ?line ok = file:set_cwd(Src1),
+ ok = file:set_cwd(Src1),
%% Ensure there is no beam file already
Ebin = filename:join([PrivDir, otp_6057, ebin]),
Test3 = filename:join(Ebin, "test3"),
- ?line ok = ensure_removed([Test3++".beam"]),
+ ok = ensure_removed([Test3++".beam"]),
%% Call make:files/1
- ?line up_to_date = make:files(["../src2/test3"]),
-
+ up_to_date = make:files(["../src2/test3"]),
+
%% Ensure that the beam file is created in the ebin directory
case ensure_exists([Test3]) of
- ok -> ok;
- Missing ->
- ?line ?t:fail({"missing beam file", Missing})
+ ok -> ok;
+ Missing ->
+ ct:fail({"missing beam file", Missing})
end,
%% Remove the beam file
- ?line ok = ensure_removed([Test3++".beam"]),
+ ok = ensure_removed([Test3++".beam"]),
%% Return to original CWD
- ?line ok = file:set_cwd(CWD),
+ ok = file:set_cwd(CWD),
- ?line ensure_no_messages(),
+ ensure_no_messages(),
ok.
-otp_6057_c(suite) ->
- [];
-otp_6057_c(doc) ->
- ["Test that make:files/1 find options in Emakefile if a file is "
- "given with the .erl extension there"];
+%% Test that make:files/1 find options in Emakefile if a file is
+%% given with the .erl extension there
otp_6057_c(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Go to src1, saving old CWD
- ?line {ok, CWD} = file:get_cwd(),
+ {ok, CWD} = file:get_cwd(),
Src1 = filename:join([PrivDir, otp_6057, src1]),
- ?line ok = file:set_cwd(Src1),
+ ok = file:set_cwd(Src1),
%% Ensure there are no beam files already
Ebin = filename:join([PrivDir, otp_6057, ebin]),
Test1 = filename:join(Ebin, "test1"),
Test2 = filename:join(Ebin, "test2"),
- ?line ok = ensure_removed([Test1++".beam",Test2++".beam"]),
+ ok = ensure_removed([Test1++".beam",Test2++".beam"]),
%% Call make:files/1
- ?line up_to_date = make:files([test1, test2]),
-
+ up_to_date = make:files([test1, test2]),
+
%% Ensure that the beam files are created in the ebin directory
Ebin = filename:join([PrivDir, otp_6057, ebin]),
case ensure_exists([Test1, Test2]) of
- ok -> ok;
- Missing ->
- ?line ?t:fail({"missing beam file", Missing})
+ ok -> ok;
+ Missing ->
+ ct:fail({"missing beam file", Missing})
end,
%% Remove the beam files
- ?line ok = ensure_removed([Test1++".beam", Test2++".beam"]),
+ ok = ensure_removed([Test1++".beam", Test2++".beam"]),
%% Return to original CWD
- ?line ok = file:set_cwd(CWD),
+ ok = file:set_cwd(CWD),
- ?line ensure_no_messages(),
+ ensure_no_messages(),
ok.
otp_6057_end(Config) when is_list(Config) ->
@@ -303,13 +292,12 @@ ensure_no_messages() ->
ensure_no_messages(N) ->
receive
- Any ->
- io:format("Unexpected message: ~p", [Any]),
- ensure_no_messages(N+1)
+ Any ->
+ io:format("Unexpected message: ~p", [Any]),
+ ensure_no_messages(N+1)
after 0 ->
- case N of
- 0 -> ok;
- N -> ?t:fail()
- end
+ case N of
+ 0 -> ok;
+ N -> ct:fail(failed)
+ end
end.
-
diff --git a/lib/tools/test/tools_SUITE.erl b/lib/tools/test/tools_SUITE.erl
index 9403124c96..b50f67a06a 100644
--- a/lib/tools/test/tools_SUITE.erl
+++ b/lib/tools/test/tools_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,60 +19,31 @@
%%
-module(tools_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-%% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
-define(application, tools).
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0]).
%% Test cases must be exported.
-export([app_test/1, appup_test/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[app_test, appup_test].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
%%%
%%% Test cases starts here.
%%%
-app_test(doc) ->
- ["Test that the .app file does not contain any `basic' errors"];
-app_test(suite) ->
- [];
+%% Test that the .app file does not contain any `basic' errors
app_test(Config) when is_list(Config) ->
- ?line ?t:app_test(tools, tolerant).
+ test_server:app_test(tools, tolerant).
%% Test that the .appup file does not contain any `basic' errors
appup_test(Config) when is_list(Config) ->
- ok = ?t:appup_test(tools).
+ ok = test_server:appup_test(tools).
diff --git a/lib/tools/test/xref_SUITE.erl b/lib/tools/test/xref_SUITE.erl
index ad47b31443..01dbac6ecb 100644
--- a/lib/tools/test/xref_SUITE.erl
+++ b/lib/tools/test/xref_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -30,48 +30,43 @@
-define(privdir, "xref_SUITE_priv").
-define(copydir, "xref_SUITE_priv/datacopy").
-else.
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-define(format(S, A), ok).
--define(datadir, ?config(data_dir, Conf)).
--define(privdir, ?config(priv_dir, Conf)).
--define(copydir, ?config(copy_dir, Conf)).
+-define(datadir, proplists:get_value(data_dir, Conf)).
+-define(privdir, proplists:get_value(priv_dir, Conf)).
+-define(copydir, proplists:get_value(copy_dir, Conf)).
-endif.
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, init/1, fini/1]).
+-export([all/0, suite/0, groups/0,
+ init_per_suite/1, end_per_suite/1]).
--export([
- addrem/1, convert/1, intergraph/1, lines/1, loops/1,
- no_data/1, modules/1]).
+-export([addrem/1, convert/1, intergraph/1, lines/1, loops/1,
+ no_data/1, modules/1]).
--export([
- add/1, default/1, info/1, lib/1, read/1, read2/1, remove/1,
- replace/1, update/1, deprecated/1, trycatch/1,
+-export([add/1, default/1, info/1, lib/1, read/1, read2/1, remove/1,
+ replace/1, update/1, deprecated/1, trycatch/1,
fun_mfa/1, fun_mfa_r14/1,
- fun_mfa_vars/1, qlc/1]).
+ fun_mfa_vars/1, qlc/1]).
--export([
- analyze/1, basic/1, md/1, q/1, variables/1, unused_locals/1]).
+-export([analyze/1, basic/1, md/1, q/1, variables/1, unused_locals/1]).
--export([
- format_error/1, otp_7423/1, otp_7831/1, otp_10192/1]).
+-export([format_error/1, otp_7423/1, otp_7831/1, otp_10192/1, otp_13708/1]).
-import(lists, [append/2, flatten/1, keysearch/3, member/2, sort/1, usort/1]).
-import(sofs, [converse/1, from_term/1, intersection/2, is_sofs_set/1,
- range/1, relation_to_family/1, set/1, to_external/1,
- union/2]).
-
--export([init_per_testcase/2, end_per_testcase/2]).
+ range/1, relation_to_family/1, set/1, to_external/1,
+ union/2]).
%% Checks some info counters of a server and some relations that should hold.
-export([check_count/1, check_state/1]).
-include_lib("kernel/include/file.hrl").
-
-include_lib("tools/src/xref.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,2}}].
all() ->
[{group, xref}, {group, files}, {group, analyses},
@@ -87,50 +82,26 @@ groups() ->
fun_mfa_r14, fun_mfa_vars, qlc]},
{analyses, [],
[analyze, basic, md, q, variables, unused_locals]},
- {misc, [], [format_error, otp_7423, otp_7831, otp_10192]}].
-
-init_per_suite(Config) ->
- init(Config).
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
+ {misc, [], [format_error, otp_7423, otp_7831, otp_10192, otp_13708]}].
-end_per_group(_GroupName, Config) ->
- Config.
-
-init(Conf) when is_list(Conf) ->
+init_per_suite(Conf) when is_list(Conf) ->
DataDir = ?datadir,
PrivDir = ?privdir,
- ?line CopyDir = fname(PrivDir, "datacopy"),
- ?line TarFile = fname(PrivDir, "datacopy.tgz"),
- ?line {ok, Tar} = erl_tar:open(TarFile, [write, compressed]),
- ?line ok = erl_tar:add(Tar, DataDir, CopyDir, [compressed]),
- ?line ok = erl_tar:close(Tar),
- ?line ok = erl_tar:extract(TarFile, [compressed]),
- ?line ok = file:delete(TarFile),
- [{copy_dir, CopyDir} | Conf].
-
-fini(Conf) when is_list(Conf) ->
- %% Nothing.
- Conf.
-
-init_per_testcase(_Case, Config) ->
- Dog=?t:timetrap(?t:minutes(2)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, _Config) ->
- Dog=?config(watchdog, _Config),
- test_server:timetrap_cancel(Dog),
+ CopyDir = fname(PrivDir, "datacopy"),
+ TarFile = fname(PrivDir, "datacopy.tgz"),
+ {ok, Tar} = erl_tar:open(TarFile, [write, compressed]),
+ ok = erl_tar:add(Tar, DataDir, CopyDir, [compressed]),
+ ok = erl_tar:close(Tar),
+ ok = erl_tar:extract(TarFile, [compressed]),
+ ok = file:delete(TarFile),
+ [{copy_dir, CopyDir}|Conf].
+
+end_per_suite(Conf) when is_list(Conf) ->
ok.
-
%% Seems a bit short...
-addrem(suite) -> [];
-addrem(doc) -> ["Simple test of removing modules"];
+%% Simple test of removing modules
addrem(Conf) when is_list(Conf) ->
S0 = new(),
@@ -149,8 +120,8 @@ addrem(Conf) when is_list(Conf) ->
LCallAt_m1 = [],
XCallAt_m1 = [{E1,13}],
Info1 = #xref_mod{name = m1, app_name = [a1]},
- ?line S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
- XC_m1, LC_m1),
+ S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
+ XC_m1, LC_m1),
D2 = {F2,7},
DefAt_m2 = [D2],
@@ -161,26 +132,25 @@ addrem(Conf) when is_list(Conf) ->
LCallAt_m2 = [],
XCallAt_m2 = [{E2,96}],
Info2 = #xref_mod{name = m2, app_name = [a2]},
- ?line S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
- XC_m2, LC_m2),
-
- ?line S5 = set_up(S2),
-
- ?line {ok, XMod1, S6} = remove_module(S5, m1),
- ?line [a1] = XMod1#xref_mod.app_name,
- ?line {ok, XMod2, S6a} = remove_module(S6, m2),
- ?line [a2] = XMod2#xref_mod.app_name,
- ?line S7 = set_up(S6a),
-
- ?line AppInfo1 = #xref_app{name = a1, rel_name = [r1]},
- ?line S9 = add_application(S7, AppInfo1),
- ?line S10 = set_up(S9),
- ?line AppInfo2 = #xref_app{name = a2, rel_name = [r1]},
- ?line _S11 = add_application(S10, AppInfo2),
+ S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
+ XC_m2, LC_m2),
+
+ S5 = set_up(S2),
+
+ {ok, XMod1, S6} = remove_module(S5, m1),
+ [a1] = XMod1#xref_mod.app_name,
+ {ok, XMod2, S6a} = remove_module(S6, m2),
+ [a2] = XMod2#xref_mod.app_name,
+ S7 = set_up(S6a),
+
+ AppInfo1 = #xref_app{name = a1, rel_name = [r1]},
+ S9 = add_application(S7, AppInfo1),
+ S10 = set_up(S9),
+ AppInfo2 = #xref_app{name = a2, rel_name = [r1]},
+ _S11 = add_application(S10, AppInfo2),
ok.
-convert(suite) -> [];
-convert(doc) -> ["Coercion of data"];
+%% Coercion of data
convert(Conf) when is_list(Conf) ->
S0 = new(),
@@ -215,8 +185,8 @@ convert(Conf) when is_list(Conf) ->
LCallAt_m1 = [],
XCallAt_m1 = [{E1,13},{E2,17},{E4,7}],
Info1 = #xref_mod{name = m1, app_name = [a1]},
- ?line S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
- XC_m1, LC_m1),
+ S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
+ XC_m1, LC_m1),
D2 = {F2,7},
D3 = {F3,9},
@@ -229,8 +199,8 @@ convert(Conf) when is_list(Conf) ->
LCallAt_m2 = [],
XCallAt_m2 = [{E3,96},{E6,12},{UE1,77}],
Info2 = #xref_mod{name = m2, app_name = [a2]},
- ?line S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
- XC_m2, LC_m2),
+ S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
+ XC_m2, LC_m2),
D4 = {F4,6},
D5 = {F5,97},
@@ -242,74 +212,74 @@ convert(Conf) when is_list(Conf) ->
LCallAt_m3 = [{E5,19}],
XCallAt_m3 = [{UE2,22}],
Info3 = #xref_mod{name = m3, app_name = [a3]},
- ?line S3 = add_module(S2, Info3, DefAt_m3, X_m3, LCallAt_m3, XCallAt_m3,
- XC_m3, LC_m3),
+ S3 = add_module(S2, Info3, DefAt_m3, X_m3, LCallAt_m3, XCallAt_m3,
+ XC_m3, LC_m3),
Info4 = #xref_mod{name = m4, app_name = [a2]},
- ?line S4 = add_module(S3, Info4, [], [], [], [], [], []),
+ S4 = add_module(S3, Info4, [], [], [], [], [], []),
AppInfo1 = #xref_app{name = a1, rel_name = [r1]},
- ?line S9 = add_application(S4, AppInfo1),
+ S9 = add_application(S4, AppInfo1),
AppInfo2 = #xref_app{name = a2, rel_name = [r1]},
- ?line S10 = add_application(S9, AppInfo2),
+ S10 = add_application(S9, AppInfo2),
AppInfo3 = #xref_app{name = a3, rel_name = [r2]},
- ?line S11 = add_application(S10, AppInfo3),
+ S11 = add_application(S10, AppInfo3),
RelInfo1 = #xref_rel{name = r1},
- ?line S12 = add_release(S11, RelInfo1),
+ S12 = add_release(S11, RelInfo1),
RelInfo2 = #xref_rel{name = r2},
- ?line S13 = add_release(S12, RelInfo2),
+ S13 = add_release(S12, RelInfo2),
- ?line S = set_up(S13),
+ S = set_up(S13),
- ?line {ok, _} = eval("(Lin)(m1->m1:Mod) * m1->m1", type_error, S),
- ?line {ok, _} = eval("(XXL)(Lin)(m1->m1:Mod) * m1->m1", type_error, S),
+ {ok, _} = eval("(Lin)(m1->m1:Mod) * m1->m1", type_error, S),
+ {ok, _} = eval("(XXL)(Lin)(m1->m1:Mod) * m1->m1", type_error, S),
- ?line AllDefAt = eval("(Lin) M", S),
- ?line AllV = eval("(Fun) M", S),
- ?line AllCallAt = eval("(XXL)(Lin) E", S),
- ?line AllE = eval("E", S),
+ AllDefAt = eval("(Lin) M", S),
+ AllV = eval("(Fun) M", S),
+ AllCallAt = eval("(XXL)(Lin) E", S),
+ AllE = eval("E", S),
- ?line AM = eval("AM", S),
- ?line A = eval("A", S),
- ?line R = eval("R", S),
+ AM = eval("AM", S),
+ A = eval("A", S),
+ R = eval("R", S),
% vertices
% general 1 step
- ?line {ok, _} = eval("(Fun) (Lin) M", AllV, S),
- ?line {ok, _} = eval("(Fun) (Lin) (Lin) M", AllV, S),
- ?line {ok, _} = eval(f("(Fun) (Lin) ~p", [[F1, F3]]), [F1,F3], S),
- ?line {ok, _} = eval(f("(Mod) ~p", [AllV]), [m1,m17,m2,m3], S),
- ?line {ok, _} = eval(f("(Mod) ~p", [[F1,F3,F6]]), [m1,m2], S),
- ?line {ok, _} = eval("(App) M", A, S),
- ?line {ok, _} = eval(f("(App) ~p", [[m1,m2,m4]]), [a1,a2], S),
- ?line {ok, _} = eval(f("(Rel) ~p", [A]), R, S),
- ?line {ok, _} = eval(f("(Rel) ~p", [[a1,a2,a2]]), [r1], S),
+ {ok, _} = eval("(Fun) (Lin) M", AllV, S),
+ {ok, _} = eval("(Fun) (Lin) (Lin) M", AllV, S),
+ {ok, _} = eval(f("(Fun) (Lin) ~p", [[F1, F3]]), [F1,F3], S),
+ {ok, _} = eval(f("(Mod) ~p", [AllV]), [m1,m17,m2,m3], S),
+ {ok, _} = eval(f("(Mod) ~p", [[F1,F3,F6]]), [m1,m2], S),
+ {ok, _} = eval("(App) M", A, S),
+ {ok, _} = eval(f("(App) ~p", [[m1,m2,m4]]), [a1,a2], S),
+ {ok, _} = eval(f("(Rel) ~p", [A]), R, S),
+ {ok, _} = eval(f("(Rel) ~p", [[a1,a2,a2]]), [r1], S),
% general 2 steps
- ?line {ok, _} = eval("(Mod) (Lin) M", [m1,m17,m2,m3], S),
- ?line {ok, _} = eval(f("(App) ~p", [AllV]), [a1,a2,a3], S),
- ?line {ok, _} = eval("(Rel) M", R, S),
+ {ok, _} = eval("(Mod) (Lin) M", [m1,m17,m2,m3], S),
+ {ok, _} = eval(f("(App) ~p", [AllV]), [a1,a2,a3], S),
+ {ok, _} = eval("(Rel) M", R, S),
% general 4 steps
- ?line {ok, _} = eval("(Rel) (Lin) M", [r1,r2], S),
+ {ok, _} = eval("(Rel) (Lin) M", [r1,r2], S),
% special 1 step
- ?line {ok, _} = eval(f("(Lin) ~p", [AllV]), AllDefAt, S),
- ?line {ok, _} = eval(f("(Lin) ~p", [[F1,F3]]), [{F1,12},{F3,9}], S),
- ?line {ok, _} = eval("(Fun) M", AllV, S),
- ?line {ok, _} = eval(f("(Fun) ~p", [[m1,m2]]), [F1,F2,F3,F6,F7,UF1], S),
- ?line {ok, _} = eval(f("(Mod) ~p", [A]), AM, S),
- ?line {ok, _} = eval(f("(Mod) ~p", [[a1,a2]]), [m1,m2,m4], S),
- ?line {ok, _} = eval(f("(App) ~p", [R]), A, S),
- ?line {ok, _} = eval(f("(App) ~p", [[r1]]), [a1,a2], S),
+ {ok, _} = eval(f("(Lin) ~p", [AllV]), AllDefAt, S),
+ {ok, _} = eval(f("(Lin) ~p", [[F1,F3]]), [{F1,12},{F3,9}], S),
+ {ok, _} = eval("(Fun) M", AllV, S),
+ {ok, _} = eval(f("(Fun) ~p", [[m1,m2]]), [F1,F2,F3,F6,F7,UF1], S),
+ {ok, _} = eval(f("(Mod) ~p", [A]), AM, S),
+ {ok, _} = eval(f("(Mod) ~p", [[a1,a2]]), [m1,m2,m4], S),
+ {ok, _} = eval(f("(App) ~p", [R]), A, S),
+ {ok, _} = eval(f("(App) ~p", [[r1]]), [a1,a2], S),
% special 2 steps
- ?line {ok, _} = eval("(Lin) M", AllDefAt, S),
- ?line AnalyzedV = eval("(Fun) AM", S),
- ?line {ok, _} = eval(f("(Fun) ~p", [A]), AnalyzedV, S),
- ?line {ok, _} = eval(f("(Mod) ~p", [R]), AM, S),
+ {ok, _} = eval("(Lin) M", AllDefAt, S),
+ AnalyzedV = eval("(Fun) AM", S),
+ {ok, _} = eval(f("(Fun) ~p", [A]), AnalyzedV, S),
+ {ok, _} = eval(f("(Mod) ~p", [R]), AM, S),
% special 4 steps
- ?line AnalyzedAllDefAt = eval("(Lin) AM", S),
- ?line {ok, _} = eval("(Lin) R", AnalyzedAllDefAt, S),
+ AnalyzedAllDefAt = eval("(Lin) AM", S),
+ {ok, _} = eval("(Lin) R", AnalyzedAllDefAt, S),
% edges
Ms = [{m1,m2},{m1,m3},{m2,m1},{m2,m3},{m3,m3}],
@@ -319,31 +289,30 @@ convert(Conf) when is_list(Conf) ->
Rs = [{r1,r1},{r1,r2},{r2,r2}],
% general 1 step
- ?line {ok, _} = eval("(Fun) (Lin) E", AllE, S),
- ?line {ok, _} = eval(f("(Fun)(Lin) ~p", [[E1, E6]]), [E1, E6], S),
- ?line {ok, _} = eval("(Mod) E", AllMs, S),
- ?line {ok, _} = eval(f("(Mod) ~p", [[E1, E6]]), [{m1,m2},{m2,m3}], S),
- ?line {ok, _} = eval(f("(App) ~p", [As]), As, S),
- ?line {ok, _} = eval("(App) [m1->m2,m2->m3]", [{a1,a2},{a2,a3}], S),
- ?line {ok, _} = eval(f("(Rel) ~p", [As]), Rs, S),
- ?line {ok, _} = eval("(Rel) a1->a2", [{r1,r1}], S),
+ {ok, _} = eval("(Fun) (Lin) E", AllE, S),
+ {ok, _} = eval(f("(Fun)(Lin) ~p", [[E1, E6]]), [E1, E6], S),
+ {ok, _} = eval("(Mod) E", AllMs, S),
+ {ok, _} = eval(f("(Mod) ~p", [[E1, E6]]), [{m1,m2},{m2,m3}], S),
+ {ok, _} = eval(f("(App) ~p", [As]), As, S),
+ {ok, _} = eval("(App) [m1->m2,m2->m3]", [{a1,a2},{a2,a3}], S),
+ {ok, _} = eval(f("(Rel) ~p", [As]), Rs, S),
+ {ok, _} = eval("(Rel) a1->a2", [{r1,r1}], S),
% special 1 step
- ?line {ok, _} = eval("(XXL) (Lin) (Fun) E", AllCallAt, S),
- ?line {ok, _} = eval("(XXL) (XXL) (Lin) (Fun) E", AllCallAt, S),
-
- ?line {ok, _} = eval(f("(XXL) (Lin) ~p", [[E1, E6]]),
- [{{D1,D3},[13]}, {{D7,D4},[12]}], S),
- ?line {ok, _} = eval(f("(Fun) ~p", [AllMs]), AllE, S),
- ?line {ok, _} = eval("(Fun) [m1->m2,m2->m3]", [E1,E2,E6], S),
- ?line {ok, _} = eval(f("(Mod) ~p", [As]), Ms, S),
- ?line {ok, _} = eval("(Mod) [a1->a2,a2->a3]", [{m1,m2},{m2,m3}], S),
- ?line {ok, _} = eval(f("(App) ~p", [Rs]), As, S),
- ?line {ok, _} = eval("(App) r1->r1", [{a1,a2},{a2,a1}], S),
+ {ok, _} = eval("(XXL) (Lin) (Fun) E", AllCallAt, S),
+ {ok, _} = eval("(XXL) (XXL) (Lin) (Fun) E", AllCallAt, S),
+
+ {ok, _} = eval(f("(XXL) (Lin) ~p", [[E1, E6]]),
+ [{{D1,D3},[13]}, {{D7,D4},[12]}], S),
+ {ok, _} = eval(f("(Fun) ~p", [AllMs]), AllE, S),
+ {ok, _} = eval("(Fun) [m1->m2,m2->m3]", [E1,E2,E6], S),
+ {ok, _} = eval(f("(Mod) ~p", [As]), Ms, S),
+ {ok, _} = eval("(Mod) [a1->a2,a2->a3]", [{m1,m2},{m2,m3}], S),
+ {ok, _} = eval(f("(App) ~p", [Rs]), As, S),
+ {ok, _} = eval("(App) r1->r1", [{a1,a2},{a2,a1}], S),
ok.
-intergraph(suite) -> [];
-intergraph(doc) -> ["Inter Call Graph"];
+%% Inter Call Graph
intergraph(Conf) when is_list(Conf) ->
S0 = new(),
@@ -392,8 +361,8 @@ intergraph(Conf) when is_list(Conf) ->
LCallAt_m1 = [{E1,1},{E2,2},{E3,3},{E5,5},{E6,6},{E7,7}],
XCallAt_m1 = [{E1,4}],
Info1 = #xref_mod{name = m1, app_name = [a1]},
- ?line S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
- XC_m1, LC_m1),
+ S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
+ XC_m1, LC_m1),
D6 = {F6,6},
D7 = {F7,7},
@@ -409,73 +378,72 @@ intergraph(Conf) when is_list(Conf) ->
LCallAt_m2 = [{E8,8},{E9,9},{E11,11},{E12,12},{E13,13},{E14,14}],
XCallAt_m2 = [{E10,10},{E15,15}],
Info2 = #xref_mod{name = m2, app_name = [a2]},
- ?line S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
- XC_m2, LC_m2),
+ S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
+ XC_m2, LC_m2),
AppInfo1 = #xref_app{name = a1, rel_name = [r1]},
- ?line S5 = add_application(S2, AppInfo1),
+ S5 = add_application(S2, AppInfo1),
AppInfo2 = #xref_app{name = a2, rel_name = [r1]},
- ?line S6 = add_application(S5, AppInfo2),
+ S6 = add_application(S5, AppInfo2),
RelInfo = #xref_rel{name = r1},
- ?line S7 = add_release(S6, RelInfo),
+ S7 = add_release(S6, RelInfo),
- ?line S = set_up(S7),
+ S = set_up(S7),
- ?line {ok, _} = eval("EE | m1", [E1,E5,E6,E7], S),
- ?line {ok, _} = eval("EE | m2", [{F6,F1}], S),
- ?line {ok, _} = eval("EE | m2 + EE | m2", [{F6,F1}], S),
+ {ok, _} = eval("EE | m1", [E1,E5,E6,E7], S),
+ {ok, _} = eval("EE | m2", [{F6,F1}], S),
+ {ok, _} = eval("EE | m2 + EE | m2", [{F6,F1}], S),
- ?line {ok, _} = eval("(Fun)(Lin)(E | m1)",
- to_external(union(set(XC_m1), set(LC_m1))), S),
- ?line {ok, _} = eval("(XXL)(ELin) (EE | m1)",
- [{{D2,D1},[1,2,4]},{{D4,D2},[5]},{{D5,D4},[6]},{{D4,D5},[7]}],
- S),
- ?line {ok, _} = eval("(XXL)(ELin)(EE | m2)", [{{D6,D1},[8,11,12]}], S),
- ?line {ok, _} = eval("(XXL)(ELin)(ELin)(EE | m2)",
- [{{D6,D1},[8,11,12]}], S),
+ {ok, _} = eval("(Fun)(Lin)(E | m1)",
+ to_external(union(set(XC_m1), set(LC_m1))), S),
+ {ok, _} = eval("(XXL)(ELin) (EE | m1)",
+ [{{D2,D1},[1,2,4]},{{D4,D2},[5]},{{D5,D4},[6]},{{D4,D5},[7]}],
+ S),
+ {ok, _} = eval("(XXL)(ELin)(EE | m2)", [{{D6,D1},[8,11,12]}], S),
+ {ok, _} = eval("(XXL)(ELin)(ELin)(EE | m2)",
+ [{{D6,D1},[8,11,12]}], S),
%% Combining graphs (equal or different):
- ?line {ok, _} = eval("(XXL)(ELin)(EE | m2 + EE | m2)",
- [{{D6,D1},[8,11,12]}], S),
- ?line {ok, _} = eval("(XXL)(ELin)(EE | m2 * EE | m2)",
- [{{D6,D1},[8,11,12]}], S),
- ?line {ok, _} = eval("(XXL)(ELin)(EE | m2 - EE | m1)",
- [{{D6,D1},[8,11,12]}], S),
- ?line {ok, _} = eval("(XXL)(ELin)(EE | m2 - E | m2)",
- [{{D6,D1},[8,11,12]}], S),
- ?line {ok, _} = eval("(XXL)(ELin)(Fun)(ELin)(EE | m2)",
- [{{D6,D1},[8,11,12]}], S),
- ?line {ok, _} = eval("EE | m1 + E | m1", LC_m1, S),
- ?line {ok, _} = eval(f("EE | ~p + E | ~p", [F2, F2]), [E1,E2], S),
+ {ok, _} = eval("(XXL)(ELin)(EE | m2 + EE | m2)",
+ [{{D6,D1},[8,11,12]}], S),
+ {ok, _} = eval("(XXL)(ELin)(EE | m2 * EE | m2)",
+ [{{D6,D1},[8,11,12]}], S),
+ {ok, _} = eval("(XXL)(ELin)(EE | m2 - EE | m1)",
+ [{{D6,D1},[8,11,12]}], S),
+ {ok, _} = eval("(XXL)(ELin)(EE | m2 - E | m2)",
+ [{{D6,D1},[8,11,12]}], S),
+ {ok, _} = eval("(XXL)(ELin)(Fun)(ELin)(EE | m2)",
+ [{{D6,D1},[8,11,12]}], S),
+ {ok, _} = eval("EE | m1 + E | m1", LC_m1, S),
+ {ok, _} = eval(f("EE | ~p + E | ~p", [F2, F2]), [E1,E2], S),
%% [1,4] from 'calls' is a subset of [1,2,4] from Inter Call Graph:
- ?line {ok, _} = eval(f("(XXL)(Lin) (E | ~p)", [F2]),
- [{{D2,D1},[1,4]},{{D2,D3},[2]}], S),
-
- ?line {ok, _} = eval(f("(XXL)(ELin) (EE | ~p)", [F2]),
- [{{D2,D1},[1,2,4]}], S),
- ?line {ok, _} = eval(f("(XXL)((ELin)(EE | ~p) + (Lin)(E | ~p))", [F2, F2]),
- [{{D2,D1},[1,2,4]},{{D2,D3},[2]}], S),
- ?line {ok, _} =
- eval(f("(XXL)((ELin) ~p + (Lin) ~p)", [{F2, F1}, {F2, F1}]),
- [{{D2,D1},[1,2,4]}], S),
- ?line {ok, _} = eval(f("(Fun)(Lin) ~p", [{F2, F1}]), [E1], S),
+ {ok, _} = eval(f("(XXL)(Lin) (E | ~p)", [F2]),
+ [{{D2,D1},[1,4]},{{D2,D3},[2]}], S),
+
+ {ok, _} = eval(f("(XXL)(ELin) (EE | ~p)", [F2]),
+ [{{D2,D1},[1,2,4]}], S),
+ {ok, _} = eval(f("(XXL)((ELin)(EE | ~p) + (Lin)(E | ~p))", [F2, F2]),
+ [{{D2,D1},[1,2,4]},{{D2,D3},[2]}], S),
+ {ok, _} =
+ eval(f("(XXL)((ELin) ~p + (Lin) ~p)", [{F2, F1}, {F2, F1}]),
+ [{{D2,D1},[1,2,4]}], S),
+ {ok, _} = eval(f("(Fun)(Lin) ~p", [{F2, F1}]), [E1], S),
%% The external call E4 is included in the reply:
- ?line {ok, _} = eval("(XXL)(Lin)(LC | m1)",
- [{{D2,D1},[1,4]},{{D2,D3},[2]},{{D3,D1},[3]},
- {{D4,D2},[5]},{{D4,D5},[7]},{{D5,D4},[6]}], S),
+ {ok, _} = eval("(XXL)(Lin)(LC | m1)",
+ [{{D2,D1},[1,4]},{{D2,D3},[2]},{{D3,D1},[3]},
+ {{D4,D2},[5]},{{D4,D5},[7]},{{D5,D4},[6]}], S),
%% The local call E1 is included in the reply:
- ?line {ok, _} = eval("(XXL)(Lin)(XC | m1)", [{{D2,D1},[1,4]}], S),
+ {ok, _} = eval("(XXL)(Lin)(XC | m1)", [{{D2,D1},[1,4]}], S),
- ?line {ok, _} = eval(f("(LLin) (E | ~p || ~p) + (XLin) (E | ~p || ~p)",
- [F2, F1, F2, F1]), [{E4,[1,4]}], S),
+ {ok, _} = eval(f("(LLin) (E | ~p || ~p) + (XLin) (E | ~p || ~p)",
+ [F2, F1, F2, F1]), [{E4,[1,4]}], S),
- ?line {ok, _} = eval("# (ELin) E", 6, S),
+ {ok, _} = eval("# (ELin) E", 6, S),
ok.
-lines(suite) -> [];
-lines(doc) -> ["More test of Inter Call Graph, and regular expressions"];
+%% More test of Inter Call Graph, and regular expressions
lines(Conf) when is_list(Conf) ->
S0 = new(),
@@ -509,8 +477,8 @@ lines(Conf) when is_list(Conf) ->
LCallAt_m1 = [{E1,1},{E3,3},{E6,6}],
XCallAt_m1 = [{E2,2},{E4,4},{E5,5},{E7,7}],
Info1 = #xref_mod{name = m1, app_name = [a1]},
- ?line S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
- XC_m1, LC_m1),
+ S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
+ XC_m1, LC_m1),
DefAt_m2 = [D4],
X_m2 = [F4],
@@ -520,81 +488,80 @@ lines(Conf) when is_list(Conf) ->
LCallAt_m2 = [],
XCallAt_m2 = [],
Info2 = #xref_mod{name = m2, app_name = [a2]},
- ?line S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
- XC_m2, LC_m2),
+ S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
+ XC_m2, LC_m2),
AppInfo1 = #xref_app{name = a1, rel_name = [r1]},
- ?line S5 = add_application(S2, AppInfo1),
+ S5 = add_application(S2, AppInfo1),
AppInfo2 = #xref_app{name = a2, rel_name = [r1]},
- ?line S6 = add_application(S5, AppInfo2),
+ S6 = add_application(S5, AppInfo2),
RelInfo = #xref_rel{name = r1},
- ?line S7 = add_release(S6, RelInfo),
-
- ?line S = set_up(S7),
-
- ?line {ok, _} = eval("(XXL) (ELin) (EE | m1)",
- [{{D1,D1},[1]},{{D1,D4},[1,4]},{{D3,D1},[3]},{{D3,D4},[3]},
- {{D5,D4},[6]}], S),
- ?line {ok, _} = eval("(XXL)(Lin) (E | m1)",
- [{{D1,D2},[1]},{{D1,D4},[4]},{{D2,D1},[2]},
- {{D2,D4},[5]},{{D3,D2},[3]},{{D5,D6},[6]},{{D6,D4},[7]}],
- S),
- ?line {ok, _} = eval("(E | m1) + (EE | m1)",
- [E1,E2,E3,E4,E5,E6,E7,{F1,F1},{F3,F1},{F3,F4},{F5,F4}],
- S),
- ?line {ok, _} = eval("(Lin)(E | m1)",
- [{E4,[4]},{E1,[1]},{E2,[2]},{E5,[5]},
- {E3,[3]},{E7,[7]},{E6,[6]}], S),
- ?line {ok, _} = eval("(ELin)(EE | m1)",
- [{{F1,F1},[1]},{{F1,F4},[1,4]},{{F3,F1},[3]},{{F3,F4},[3]},
- {{F5,F4},[6]}], S),
- ?line {ok, _} = eval("(Lin)(E | m1) + (ELin)(EE | m1)",
- [{E4,[1,4]},{E1,[1]},{E2,[2]},{E5,[5]},
- {E3,[3]},{E7,[7]},{E6,[6]},
- {{F1,F1},[1]},{{F3,F1},[3]},{{F3,F4},[3]},
- {{F5,F4},[6]}], S),
- ?line {ok, _} = eval("(Lin)(E | m1) - (ELin)(EE | m1)",
- [{E1,[1]},{E2,[2]},{E5,[5]},
- {E3,[3]},{E7,[7]},{E6,[6]}], S),
- ?line {ok, _} = eval("(Lin)(E | m1) * (ELin)(EE | m1)",
- [{E4,[4]}], S),
- ?line {ok, _} = eval("(XXL)(Lin) (E | m1)",
- [{{D1,D4},[4]},{{D1,D2},[1]},{{D2,D1},[2]},{{D2,D4},[5]},
- {{D3,D2},[3]},{{D6,D4},[7]},{{D5,D6},[6]}], S),
- ?line {ok, _} = eval("(XXL)(ELin) (EE | m1)",
- [{{D1,D1},[1]},{{D1,D4},[1,4]},{{D3,D1},[3]},{{D3,D4},[3]},
- {{D5,D4},[6]}], S),
- ?line {ok, _} = eval("(XXL)(Lin)(Fun)(Lin) (E | m1)",
- [{{D1,D4},[4]},{{D1,D2},[1]},{{D2,D1},[2]},{{D2,D4},[5]},
- {{D3,D2},[3]},{{D6,D4},[7]},{{D5,D6},[6]}], S),
- ?line {ok, _} = eval("(XXL)(ELin)(Fun)(ELin) (EE | m1)",
- [{{D1,D1},[1]},{{D1,D4},[1,4]},{{D3,D1},[3]},{{D3,D4},[3]},
- {{D5,D4},[6]}], S),
+ S7 = add_release(S6, RelInfo),
+
+ S = set_up(S7),
+
+ {ok, _} = eval("(XXL) (ELin) (EE | m1)",
+ [{{D1,D1},[1]},{{D1,D4},[1,4]},{{D3,D1},[3]},{{D3,D4},[3]},
+ {{D5,D4},[6]}], S),
+ {ok, _} = eval("(XXL)(Lin) (E | m1)",
+ [{{D1,D2},[1]},{{D1,D4},[4]},{{D2,D1},[2]},
+ {{D2,D4},[5]},{{D3,D2},[3]},{{D5,D6},[6]},{{D6,D4},[7]}],
+ S),
+ {ok, _} = eval("(E | m1) + (EE | m1)",
+ [E1,E2,E3,E4,E5,E6,E7,{F1,F1},{F3,F1},{F3,F4},{F5,F4}],
+ S),
+ {ok, _} = eval("(Lin)(E | m1)",
+ [{E4,[4]},{E1,[1]},{E2,[2]},{E5,[5]},
+ {E3,[3]},{E7,[7]},{E6,[6]}], S),
+ {ok, _} = eval("(ELin)(EE | m1)",
+ [{{F1,F1},[1]},{{F1,F4},[1,4]},{{F3,F1},[3]},{{F3,F4},[3]},
+ {{F5,F4},[6]}], S),
+ {ok, _} = eval("(Lin)(E | m1) + (ELin)(EE | m1)",
+ [{E4,[1,4]},{E1,[1]},{E2,[2]},{E5,[5]},
+ {E3,[3]},{E7,[7]},{E6,[6]},
+ {{F1,F1},[1]},{{F3,F1},[3]},{{F3,F4},[3]},
+ {{F5,F4},[6]}], S),
+ {ok, _} = eval("(Lin)(E | m1) - (ELin)(EE | m1)",
+ [{E1,[1]},{E2,[2]},{E5,[5]},
+ {E3,[3]},{E7,[7]},{E6,[6]}], S),
+ {ok, _} = eval("(Lin)(E | m1) * (ELin)(EE | m1)",
+ [{E4,[4]}], S),
+ {ok, _} = eval("(XXL)(Lin) (E | m1)",
+ [{{D1,D4},[4]},{{D1,D2},[1]},{{D2,D1},[2]},{{D2,D4},[5]},
+ {{D3,D2},[3]},{{D6,D4},[7]},{{D5,D6},[6]}], S),
+ {ok, _} = eval("(XXL)(ELin) (EE | m1)",
+ [{{D1,D1},[1]},{{D1,D4},[1,4]},{{D3,D1},[3]},{{D3,D4},[3]},
+ {{D5,D4},[6]}], S),
+ {ok, _} = eval("(XXL)(Lin)(Fun)(Lin) (E | m1)",
+ [{{D1,D4},[4]},{{D1,D2},[1]},{{D2,D1},[2]},{{D2,D4},[5]},
+ {{D3,D2},[3]},{{D6,D4},[7]},{{D5,D6},[6]}], S),
+ {ok, _} = eval("(XXL)(ELin)(Fun)(ELin) (EE | m1)",
+ [{{D1,D1},[1]},{{D1,D4},[1,4]},{{D3,D1},[3]},{{D3,D4},[3]},
+ {{D5,D4},[6]}], S),
%% A few tests on regexp.
- ?line {ok, _} = eval("\"(foo\":Mod", parse_error, S),
- ?line {ok, _} = eval("_Foo:_/_", parse_error, S),
- ?line {ok, _} = eval("\".*foo\"", parse_error, S),
- ?line {ok, _} = eval("_:_/_:Lin", parse_error, S),
- ?line {ok, _} = eval("_:_/_:Mod", parse_error, S),
- ?line {ok, _} = eval("_:_/_:App", parse_error, S),
- ?line {ok, _} = eval("_:_/_:Rel", parse_error, S),
- ?line {ok, _} = eval("m2:_/4", [F4], S),
- ?line {ok, _} = eval("m2:_/4:Fun", [F4], S),
- ?line {ok, _} = eval("\"m.?\":\"f.*\"/\"6\"", [F6], S),
- ?line {ok, _} = eval("_:_/6", [F6], S),
- ?line {ok, _} = eval("m1:\"f1\"/_", [F1], S),
- ?line {ok, _} = eval("\"m1\":f1/_", [F1], S),
- ?line {ok, _} = eval("\"m1\":Mod", [m1], S),
- ?line {ok, _} = eval("\"a1\":App", [a1], S),
- ?line {ok, _} = eval("\"r1\":Rel", [r1], S),
- ?line {ok, _} = eval("_:_/-1", [], S),
+ {ok, _} = eval("\"(foo\":Mod", parse_error, S),
+ {ok, _} = eval("_Foo:_/_", parse_error, S),
+ {ok, _} = eval("\".*foo\"", parse_error, S),
+ {ok, _} = eval("_:_/_:Lin", parse_error, S),
+ {ok, _} = eval("_:_/_:Mod", parse_error, S),
+ {ok, _} = eval("_:_/_:App", parse_error, S),
+ {ok, _} = eval("_:_/_:Rel", parse_error, S),
+ {ok, _} = eval("m2:_/4", [F4], S),
+ {ok, _} = eval("m2:_/4:Fun", [F4], S),
+ {ok, _} = eval("\"m.?\":\"f.*\"/\"6\"", [F6], S),
+ {ok, _} = eval("_:_/6", [F6], S),
+ {ok, _} = eval("m1:\"f1\"/_", [F1], S),
+ {ok, _} = eval("\"m1\":f1/_", [F1], S),
+ {ok, _} = eval("\"m1\":Mod", [m1], S),
+ {ok, _} = eval("\"a1\":App", [a1], S),
+ {ok, _} = eval("\"r1\":Rel", [r1], S),
+ {ok, _} = eval("_:_/-1", [], S),
ok.
-loops(suite) -> [];
-loops(doc) -> ["More Inter Call Graph, loops and \"unusual\" cases"];
+%% More Inter Call Graph, loops and "unusual" cases
loops(Conf) when is_list(Conf) ->
S0 = new(),
@@ -627,51 +594,49 @@ loops(Conf) when is_list(Conf) ->
LCallAt_m1 = [{E2,2},{E3,3},{E4,4}],
XCallAt_m1 = [{E1,1},{E5,5}],
Info1 = #xref_mod{name = m1, app_name = [a1]},
- ?line S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
- XC_m1, LC_m1),
+ S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
+ XC_m1, LC_m1),
- ?line S = set_up(S1),
+ S = set_up(S1),
% Neither F6 nor F7 is included. Perhaps one should change that?
- ?line {ok, _} = eval("EE | m1", [E1,E2,{F3,F3}], S),
- ?line {ok, _} = eval(f("(XXL)(ELin) (EE | ~p)", [F3]), [{{D3,D3},[3]}], S),
+ {ok, _} = eval("EE | m1", [E1,E2,{F3,F3}], S),
+ {ok, _} = eval(f("(XXL)(ELin) (EE | ~p)", [F3]), [{{D3,D3},[3]}], S),
- ?line {ok, _} = eval("m1->m1 | m1->m1", type_error, S),
- ?line {ok, _} = eval(f("~p | ~p", [F2, F1]), type_error, S),
+ {ok, _} = eval("m1->m1 | m1->m1", type_error, S),
+ {ok, _} = eval(f("~p | ~p", [F2, F1]), type_error, S),
- ?line {ok, _} = eval(f("range (closure EE | ~p)", [F1]), [F1], S),
- ?line {ok, _} = eval(f("domain (closure EE || ~p)", [F3]), [F3], S),
+ {ok, _} = eval(f("range (closure EE | ~p)", [F1]), [F1], S),
+ {ok, _} = eval(f("domain (closure EE || ~p)", [F3]), [F3], S),
- ?line {ok, _} = eval(f("domain (closure E || ~p)", [F3]), [F3,F4,F5], S),
+ {ok, _} = eval(f("domain (closure E || ~p)", [F3]), [F3,F4,F5], S),
- ?line {ok, _} = eval("components E", [[F1],[F2],[F3,F4,F5]], S),
- ?line {ok, _} = eval("components EE", [[F1],[F2],[F3]], S),
+ {ok, _} = eval("components E", [[F1],[F2],[F3,F4,F5]], S),
+ {ok, _} = eval("components EE", [[F1],[F2],[F3]], S),
ok.
-no_data(suite) -> [];
-no_data(doc) -> ["Simple tests when there is no data"];
+%% Simple tests when there is no data
no_data(Conf) when is_list(Conf) ->
S0 = new(),
- ?line S1 = set_up(S0),
- ?line {ok, _} = eval("M", [], S1),
- ?line {ok, _} = eval("A", [], S1),
- ?line {ok, _} = eval("R", [], S1),
+ S1 = set_up(S0),
+ {ok, _} = eval("M", [], S1),
+ {ok, _} = eval("A", [], S1),
+ {ok, _} = eval("R", [], S1),
ModInfo = #xref_mod{name = m, app_name = []},
- ?line S2 = add_module(S1, ModInfo, [], [], [], [], [], []),
+ S2 = add_module(S1, ModInfo, [], [], [], [], [], []),
AppInfo = #xref_app{name = a, rel_name = []},
- ?line S3 = add_application(S2, AppInfo),
+ S3 = add_application(S2, AppInfo),
RelInfo = #xref_rel{name = r, dir = ""},
- ?line S4 = add_release(S3, RelInfo),
- ?line S5 = set_up(S4),
- ?line {ok, _} = eval("M", [m], S5),
- ?line {ok, _} = eval("A", [a], S5),
- ?line {ok, _} = eval("R", [r], S5),
+ S4 = add_release(S3, RelInfo),
+ S5 = set_up(S4),
+ {ok, _} = eval("M", [m], S5),
+ {ok, _} = eval("A", [a], S5),
+ {ok, _} = eval("R", [r], S5),
ok.
-modules(suite) -> [];
-modules(doc) -> ["Modules mode"];
+%% Modules mode
modules(Conf) when is_list(Conf) ->
CopyDir = ?copydir,
Dir = fname(CopyDir, "rel2"),
@@ -684,34 +649,33 @@ modules(Conf) when is_list(Conf) ->
Xbeam = fname(EB2, "x.beam"),
Ybeam = fname(EB1_1, "y.beam"),
- ?line {ok, x} = compile:file(X, [debug_info, {outdir,EB2}]),
- ?line {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
-
- ?line {ok, S0} = xref_base:new([{xref_mode, modules}]),
- ?line {ok, release2, S1} =
- xref_base:add_release(S0, Dir, [{name,release2}]),
- ?line S = set_up(S1),
- ?line {{error, _, {unavailable_analysis, undefined_function_calls}}, _} =
- xref_base:analyze(S, undefined_function_calls),
- ?line {{error, _, {unavailable_analysis, locals_not_used}}, _} =
- xref_base:analyze(S, locals_not_used),
- ?line {{error, _, {unavailable_analysis, {call, foo}}}, _} =
- xref_base:analyze(S, {call, foo}),
- ?line {{error, _, {unavailable_analysis, {use, foo}}}, _} =
- xref_base:analyze(S, {use, foo}),
- ?line analyze(undefined_functions, [{x,undef,0}], S),
- ?line 5 = length(xref_base:info(S)),
+ {ok, x} = compile:file(X, [debug_info, {outdir,EB2}]),
+ {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
+
+ {ok, S0} = xref_base:new([{xref_mode, modules}]),
+ {ok, release2, S1} =
+ xref_base:add_release(S0, Dir, [{name,release2}]),
+ S = set_up(S1),
+ {{error, _, {unavailable_analysis, undefined_function_calls}}, _} =
+ xref_base:analyze(S, undefined_function_calls),
+ {{error, _, {unavailable_analysis, locals_not_used}}, _} =
+ xref_base:analyze(S, locals_not_used),
+ {{error, _, {unavailable_analysis, {call, foo}}}, _} =
+ xref_base:analyze(S, {call, foo}),
+ {{error, _, {unavailable_analysis, {use, foo}}}, _} =
+ xref_base:analyze(S, {use, foo}),
+ analyze(undefined_functions, [{x,undef,0}], S),
+ 5 = length(xref_base:info(S)),
%% More: all info, conversions.
- ?line ok = file:delete(Xbeam),
- ?line ok = file:delete(Ybeam),
- ?line ok = xref_base:delete(S),
+ ok = file:delete(Xbeam),
+ ok = file:delete(Ybeam),
+ ok = xref_base:delete(S),
ok.
-add(suite) -> [];
-add(doc) -> ["Add modules, applications, releases, directories"];
+%% Add modules, applications, releases, directories
add(Conf) when is_list(Conf) ->
CopyDir = ?copydir,
Dir = fname(CopyDir, "rel2"),
@@ -727,116 +691,114 @@ add(Conf) when is_list(Conf) ->
Xbeam = fname(EB2, "x.beam"),
Ybeam = fname(EB1_1, "y.beam"),
- ?line {ok, x} = compile:file(X, [debug_info, {outdir,EB2}]),
- ?line {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
-
- ?line case os:type() of
- {unix, _} ->
- ?line make_udir(UDir),
- ?line make_ufile(UFile);
- _ ->
- true
- end,
-
- ?line {error, _, {invalid_options,[not_an_option] }} =
- xref_base:new([not_an_option]),
- ?line {error, _, {invalid_options,[{verbose,not_a_value}] }} =
- xref_base:new([{verbose,not_a_value}]),
- ?line S = new(),
- ?line {error, _, {invalid_options,[not_an_option]}} =
- xref_base:set_up(S, [not_an_option]),
- ?line {error, _, {invalid_options,[{builtins,true},not_an_option]}} =
- xref_base:add_directory(S, foo, [{builtins,true},not_an_option]),
- ?line {error, _, {invalid_options,[{builtins,not_a_value}]}} =
- xref_base:add_directory(S, foo, [{builtins,not_a_value}]),
- ?line {error, _, {invalid_filename,{foo,bar}}} =
- xref_base:add_directory(S, {foo,bar}, []),
- ?line {error, _, {invalid_options,[{builtins,true},not_an_option]}} =
- xref_base:add_module(S, foo, [{builtins,true},not_an_option]),
- ?line {error, _, {invalid_options,[{builtins,not_a_value}]}} =
- xref_base:add_module(S, foo, [{builtins,not_a_value}]),
- ?line {error, _, {invalid_filename,{foo,bar}}} =
- xref_base:add_module(S, {foo,bar}, []),
- ?line {error, _, {invalid_options,[{builtins,true},not_an_option]}} =
- xref_base:add_application(S, foo, [{builtins,true},not_an_option]),
- ?line {error, _, {invalid_options,[{builtins,not_a_value}]}} =
- xref_base:add_application(S, foo, [{builtins,not_a_value}]),
- ?line {error, _, {invalid_filename,{foo,bar}}} =
- xref_base:add_application(S, {foo,bar}, []),
- ?line {error, _, {invalid_options,[not_an_option]}} =
- xref_base:add_release(S, foo, [not_an_option]),
- ?line {error, _, {invalid_options,[{builtins,not_a_value}]}} =
- xref_base:add_release(S, foo, [{builtins,not_a_value}]),
- ?line {error, _, {invalid_filename,{foo,bar}}} =
- xref_base:add_release(S, {foo,bar}, []),
- ?line {ok, S1} =
- xref_base:set_default(S, [{verbose,false}, {warnings, false}]),
- ?line case os:type() of
- {unix, _} ->
- ?line {error, _, {file_error, _, _}} =
- xref_base:add_release(S, UDir);
- _ ->
- true
- end,
- ?line {error, _, {file_error, _, _}} =
- xref_base:add_release(S, fname(["/a/b/c/d/e/f","__foo"])),
- ?line {ok, release2, S2} =
- xref_base:add_release(S1, Dir, [{name,release2}]),
- ?line {error, _, {module_clash, {x, _, _}}} =
- xref_base:add_module(S2, Xbeam),
- ?line {ok, S3} = xref_base:remove_release(S2, release2),
- ?line {ok, rel2, S4} = xref_base:add_release(S3, Dir),
- ?line {error, _, {release_clash, {rel2, _, _}}} =
- xref_base:add_release(S4, Dir),
- ?line {ok, S5} = xref_base:remove_release(S4, rel2),
+ {ok, x} = compile:file(X, [debug_info, {outdir,EB2}]),
+ {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
+
+ case os:type() of
+ {unix, _} ->
+ make_udir(UDir),
+ make_ufile(UFile);
+ _ ->
+ true
+ end,
+
+ {error, _, {invalid_options,[not_an_option] }} =
+ xref_base:new([not_an_option]),
+ {error, _, {invalid_options,[{verbose,not_a_value}] }} =
+ xref_base:new([{verbose,not_a_value}]),
+ S = new(),
+ {error, _, {invalid_options,[not_an_option]}} =
+ xref_base:set_up(S, [not_an_option]),
+ {error, _, {invalid_options,[{builtins,true},not_an_option]}} =
+ xref_base:add_directory(S, foo, [{builtins,true},not_an_option]),
+ {error, _, {invalid_options,[{builtins,not_a_value}]}} =
+ xref_base:add_directory(S, foo, [{builtins,not_a_value}]),
+ {error, _, {invalid_filename,{foo,bar}}} =
+ xref_base:add_directory(S, {foo,bar}, []),
+ {error, _, {invalid_options,[{builtins,true},not_an_option]}} =
+ xref_base:add_module(S, foo, [{builtins,true},not_an_option]),
+ {error, _, {invalid_options,[{builtins,not_a_value}]}} =
+ xref_base:add_module(S, foo, [{builtins,not_a_value}]),
+ {error, _, {invalid_filename,{foo,bar}}} =
+ xref_base:add_module(S, {foo,bar}, []),
+ {error, _, {invalid_options,[{builtins,true},not_an_option]}} =
+ xref_base:add_application(S, foo, [{builtins,true},not_an_option]),
+ {error, _, {invalid_options,[{builtins,not_a_value}]}} =
+ xref_base:add_application(S, foo, [{builtins,not_a_value}]),
+ {error, _, {invalid_filename,{foo,bar}}} =
+ xref_base:add_application(S, {foo,bar}, []),
+ {error, _, {invalid_options,[not_an_option]}} =
+ xref_base:add_release(S, foo, [not_an_option]),
+ {error, _, {invalid_options,[{builtins,not_a_value}]}} =
+ xref_base:add_release(S, foo, [{builtins,not_a_value}]),
+ {error, _, {invalid_filename,{foo,bar}}} =
+ xref_base:add_release(S, {foo,bar}, []),
+ {ok, S1} =
+ xref_base:set_default(S, [{verbose,false}, {warnings, false}]),
+ case os:type() of
+ {unix, _} ->
+ {error, _, {file_error, _, _}} =
+ xref_base:add_release(S, UDir);
+ _ ->
+ true
+ end,
+ {error, _, {file_error, _, _}} =
+ xref_base:add_release(S, fname(["/a/b/c/d/e/f","__foo"])),
+ {ok, release2, S2} =
+ xref_base:add_release(S1, Dir, [{name,release2}]),
+ {error, _, {module_clash, {x, _, _}}} =
+ xref_base:add_module(S2, Xbeam),
+ {ok, S3} = xref_base:remove_release(S2, release2),
+ {ok, rel2, S4} = xref_base:add_release(S3, Dir),
+ {error, _, {release_clash, {rel2, _, _}}} =
+ xref_base:add_release(S4, Dir),
+ {ok, S5} = xref_base:remove_release(S4, rel2),
%% One unreadable file and one JAM file found (no verification here):
- ?line {ok, [], S6} = xref_base:add_directory(S5, fname(CopyDir,"dir"),
- [{recurse,true}, {warnings,true}]),
- ?line case os:type() of
- {unix, _} ->
- ?line {error, _, {file_error, _, _}} =
- xref_base:add_directory(S6, UDir);
- _ ->
- true
- end,
- ?line {ok, app1, S7} = xref_base:add_application(S6, A1_1),
- ?line {error, _, {application_clash, {app1, _, _}}} =
- xref_base:add_application(S7, A1_1),
- ?line {ok, S8} = xref_base:remove_application(S7, app1),
- ?line ok = xref_base:delete(S8),
- ?line ok = file:delete(Xbeam),
- ?line ok = file:delete(Ybeam),
- ?line case os:type() of
- {unix, _} ->
- ?line ok = file:del_dir(UDir),
- ?line ok = file:delete(UFile);
- _ ->
- true
- end,
+ {ok, [], S6} = xref_base:add_directory(S5, fname(CopyDir,"dir"),
+ [{recurse,true}, {warnings,true}]),
+ case os:type() of
+ {unix, _} ->
+ {error, _, {file_error, _, _}} =
+ xref_base:add_directory(S6, UDir);
+ _ ->
+ true
+ end,
+ {ok, app1, S7} = xref_base:add_application(S6, A1_1),
+ {error, _, {application_clash, {app1, _, _}}} =
+ xref_base:add_application(S7, A1_1),
+ {ok, S8} = xref_base:remove_application(S7, app1),
+ ok = xref_base:delete(S8),
+ ok = file:delete(Xbeam),
+ ok = file:delete(Ybeam),
+ case os:type() of
+ {unix, _} ->
+ ok = file:del_dir(UDir),
+ ok = file:delete(UFile);
+ _ ->
+ true
+ end,
ok.
-default(suite) -> [];
-default(doc) -> ["Default values of options"];
+%% Default values of options
default(Conf) when is_list(Conf) ->
S = new(),
- ?line {error, _, {invalid_options,[not_an_option]}} =
- xref_base:set_default(S, not_an_option, true),
- ?line {error, _, {invalid_options,[{builtins, not_a_value}]}} =
- xref_base:set_default(S, builtins, not_a_value),
- ?line {error, _, {invalid_options,[not_an_option]}} =
- xref_base:get_default(S, not_an_option),
- ?line {error, _, {invalid_options,[not_an_option]}} =
- xref_base:set_default(S, [not_an_option]),
-
- ?line D = xref_base:get_default(S),
- ?line [{builtins,false},{recurse,false},{verbose,false},{warnings,true}] =
- D,
-
- ?line ok = xref_base:delete(S),
+ {error, _, {invalid_options,[not_an_option]}} =
+ xref_base:set_default(S, not_an_option, true),
+ {error, _, {invalid_options,[{builtins, not_a_value}]}} =
+ xref_base:set_default(S, builtins, not_a_value),
+ {error, _, {invalid_options,[not_an_option]}} =
+ xref_base:get_default(S, not_an_option),
+ {error, _, {invalid_options,[not_an_option]}} =
+ xref_base:set_default(S, [not_an_option]),
+
+ D = xref_base:get_default(S),
+ [{builtins,false},{recurse,false},{verbose,false},{warnings,true}] =
+ D,
+
+ ok = xref_base:delete(S),
ok.
-info(suite) -> [];
-info(doc) -> ["The info functions"];
+%% The info functions
info(Conf) when is_list(Conf) ->
CopyDir = ?copydir,
Dir = fname(CopyDir,"rel2"),
@@ -850,197 +812,195 @@ info(Conf) when is_list(Conf) ->
Xbeam = fname(EB2, "x.beam"),
Ybeam = fname(EB1_1, "y.beam"),
- ?line {ok, x} = compile:file(X, [debug_info, {outdir,EB2}]),
- ?line {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
-
- ?line {ok, _} = start(s),
- ?line {error, _, {no_such_info, release}} = xref:info(s, release),
- ?line {error, _, {no_such_info, release}} = xref:info(s, release, rel),
- ?line {error, _, {no_such_module, mod}} = xref:info(s, modules, mod),
- ?line {error, _, {no_such_application, app}} =
- xref:info(s, applications, app),
- ?line {error, _, {no_such_release, rel}} = xref:info(s, releases, rel),
- ?line ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
- ?line {ok, rel2} = xref:add_release(s, Dir),
- ?line 9 = length(xref:info(s)),
- ?line [{x,_}, {y, _}] = xref:info(s, modules),
- ?line [{app1,_}, {app2, _}] = xref:info(s, applications),
- ?line [{rel2,_}] = xref:info(s, releases),
- ?line [] = xref:info(s, libraries),
- ?line [{x,_}] = xref:info(s, modules, x),
- ?line [{rel2,_}] = xref:info(s, releases, rel2),
- ?line {error, _, {no_such_library, foo}} = xref:info(s, libraries, [foo]),
-
- ?line {ok, lib1} =
- compile:file(fname(LDir,lib1),[debug_info,{outdir,LDir}]),
- ?line {ok, lib2} =
- compile:file(fname(LDir,lib2),[debug_info,{outdir,LDir}]),
- ?line ok = xref:set_library_path(s, [LDir], [{verbose,false}]),
- ?line [{lib1,_}, {lib2, _}] = xref:info(s, libraries),
- ?line [{lib1,_}, {lib2, _}] = xref:info(s, libraries, [lib1,lib2]),
- ?line ok = file:delete(fname(LDir, "lib1.beam")),
- ?line ok = file:delete(fname(LDir, "lib2.beam")),
-
- ?line check_state(s),
-
- ?line xref:stop(s),
-
- ?line ok = file:delete(Xbeam),
- ?line ok = file:delete(Ybeam),
+ {ok, x} = compile:file(X, [debug_info, {outdir,EB2}]),
+ {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
+
+ {ok, _} = start(s),
+ {error, _, {no_such_info, release}} = xref:info(s, release),
+ {error, _, {no_such_info, release}} = xref:info(s, release, rel),
+ {error, _, {no_such_module, mod}} = xref:info(s, modules, mod),
+ {error, _, {no_such_application, app}} =
+ xref:info(s, applications, app),
+ {error, _, {no_such_release, rel}} = xref:info(s, releases, rel),
+ ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
+ {ok, rel2} = xref:add_release(s, Dir),
+ 9 = length(xref:info(s)),
+ [{x,_}, {y, _}] = xref:info(s, modules),
+ [{app1,_}, {app2, _}] = xref:info(s, applications),
+ [{rel2,_}] = xref:info(s, releases),
+ [] = xref:info(s, libraries),
+ [{x,_}] = xref:info(s, modules, x),
+ [{rel2,_}] = xref:info(s, releases, rel2),
+ {error, _, {no_such_library, foo}} = xref:info(s, libraries, [foo]),
+
+ {ok, lib1} =
+ compile:file(fname(LDir,lib1),[debug_info,{outdir,LDir}]),
+ {ok, lib2} =
+ compile:file(fname(LDir,lib2),[debug_info,{outdir,LDir}]),
+ ok = xref:set_library_path(s, [LDir], [{verbose,false}]),
+ [{lib1,_}, {lib2, _}] = xref:info(s, libraries),
+ [{lib1,_}, {lib2, _}] = xref:info(s, libraries, [lib1,lib2]),
+ ok = file:delete(fname(LDir, "lib1.beam")),
+ ok = file:delete(fname(LDir, "lib2.beam")),
+
+ check_state(s),
+
+ xref:stop(s),
+
+ ok = file:delete(Xbeam),
+ ok = file:delete(Ybeam),
ok.
-lib(suite) -> [];
-lib(doc) -> ["Library modules"];
+%% Library modules
lib(Conf) when is_list(Conf) ->
CopyDir = ?copydir,
Dir = fname(CopyDir,"lib_test"),
UDir = fname([CopyDir,"dir","non_existent"]),
- ?line {ok, lib1} = compile:file(fname(Dir,lib1),[debug_info,{outdir,Dir}]),
- ?line {ok, lib2} = compile:file(fname(Dir,lib2),[debug_info,{outdir,Dir}]),
- ?line {ok, lib3} = compile:file(fname(Dir,lib3),[debug_info,{outdir,Dir}]),
- ?line {ok, t} = compile:file(fname(Dir,t),[debug_info,{outdir,Dir}]),
-
- ?line {ok, _} = start(s),
- ?line ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
- ?line {ok, t} = xref:add_module(s, fname(Dir,"t.beam")),
- ?line {error, _, {invalid_options,[not_an_option]}} =
- xref:set_library_path(s, ["foo"], [not_an_option]),
- ?line {error, _, {invalid_path,otp}} = xref:set_library_path(s,otp),
- ?line {error, _, {invalid_path,[""]}} = xref:set_library_path(s,[""]),
- ?line {error, _, {invalid_path,[[$a | $b]]}} =
- xref:set_library_path(s,[[$a | $b]]),
- ?line {error, _, {invalid_path,[otp]}} = xref:set_library_path(s,[otp]),
- ?line {ok, []} = xref:get_library_path(s),
- ?line ok = xref:set_library_path(s, [Dir], [{verbose,false}]),
- ?line {ok, UnknownFunctions} = xref:q(s, "U"),
- ?line [{lib1,unknown,0}, {lib2,local,0},
- {lib2,unknown,0}, {unknown,unknown,0}]
- = UnknownFunctions,
- ?line {ok, [{lib2,f,0},{lib3,f,0}]} = xref:q(s, "DF"),
- ?line {ok, []} = xref:q(s, "DF_1"),
- ?line {ok, [{lib2,f,0}]} = xref:q(s, "DF_2"),
- ?line {ok, [{lib2,f,0}]} = xref:q(s, "DF_3"),
-
- ?line {ok, [unknown]} = xref:q(s, "UM"),
- ?line {ok, UnknownDefAt} = xref:q(s, "(Lin)U"),
- ?line [{{lib1,unknown,0},0},{{lib2,local,0},0}, {{lib2,unknown,0},0},
- {{unknown,unknown,0},0}] = UnknownDefAt,
- ?line {ok, LibFuns} = xref:q(s, "X * LM"),
- ?line [{lib2,f,0},{lib3,f,0}] = LibFuns,
- ?line {ok, LibMods} = xref:q(s, "LM"),
- ?line [lib1,lib2,lib3] = LibMods,
- ?line {ok, [{{lib2,f,0},0},{{lib3,f,0},0}]} = xref:q(s, "(Lin) (LM * X)"),
- ?line {ok, [{{lib1,unknown,0},0}, {{lib2,f,0},0}, {{lib2,local,0},0},
- {{lib2,unknown,0},0}, {{lib3,f,0},0}]} = xref:q(s,"(Lin)LM"),
- ?line {ok,[lib1,lib2,lib3,t,unknown]} = xref:q(s,"M"),
- ?line {ok,[{lib2,f,0},{lib3,f,0},{t,t,0}]} = xref:q(s,"X * M"),
- ?line check_state(s),
-
- ?line copy_file(fname(Dir, "lib1.erl"), fname(Dir,"lib1.beam")),
- ?line ok = xref:set_library_path(s, [Dir]),
- ?line {error, _, _} = xref:q(s, "U"),
+ {ok, lib1} = compile:file(fname(Dir,lib1),[debug_info,{outdir,Dir}]),
+ {ok, lib2} = compile:file(fname(Dir,lib2),[debug_info,{outdir,Dir}]),
+ {ok, lib3} = compile:file(fname(Dir,lib3),[debug_info,{outdir,Dir}]),
+ {ok, t} = compile:file(fname(Dir,t),[debug_info,{outdir,Dir}]),
+
+ {ok, _} = start(s),
+ ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
+ {ok, t} = xref:add_module(s, fname(Dir,"t.beam")),
+ {error, _, {invalid_options,[not_an_option]}} =
+ xref:set_library_path(s, ["foo"], [not_an_option]),
+ {error, _, {invalid_path,otp}} = xref:set_library_path(s,otp),
+ {error, _, {invalid_path,[""]}} = xref:set_library_path(s,[""]),
+ {error, _, {invalid_path,[[$a | $b]]}} =
+ xref:set_library_path(s,[[$a | $b]]),
+ {error, _, {invalid_path,[otp]}} = xref:set_library_path(s,[otp]),
+ {ok, []} = xref:get_library_path(s),
+ ok = xref:set_library_path(s, [Dir], [{verbose,false}]),
+ {ok, UnknownFunctions} = xref:q(s, "U"),
+ [{lib1,unknown,0}, {lib2,local,0},
+ {lib2,unknown,0}, {unknown,unknown,0}]
+ = UnknownFunctions,
+ {ok, [{lib2,f,0},{lib3,f,0}]} = xref:q(s, "DF"),
+ {ok, []} = xref:q(s, "DF_1"),
+ {ok, [{lib2,f,0}]} = xref:q(s, "DF_2"),
+ {ok, [{lib2,f,0}]} = xref:q(s, "DF_3"),
+
+ {ok, [unknown]} = xref:q(s, "UM"),
+ {ok, UnknownDefAt} = xref:q(s, "(Lin)U"),
+ [{{lib1,unknown,0},0},{{lib2,local,0},0}, {{lib2,unknown,0},0},
+ {{unknown,unknown,0},0}] = UnknownDefAt,
+ {ok, LibFuns} = xref:q(s, "X * LM"),
+ [{lib2,f,0},{lib3,f,0}] = LibFuns,
+ {ok, LibMods} = xref:q(s, "LM"),
+ [lib1,lib2,lib3] = LibMods,
+ {ok, [{{lib2,f,0},0},{{lib3,f,0},0}]} = xref:q(s, "(Lin) (LM * X)"),
+ {ok, [{{lib1,unknown,0},0}, {{lib2,f,0},0}, {{lib2,local,0},0},
+ {{lib2,unknown,0},0}, {{lib3,f,0},0}]} = xref:q(s,"(Lin)LM"),
+ {ok,[lib1,lib2,lib3,t,unknown]} = xref:q(s,"M"),
+ {ok,[{lib2,f,0},{lib3,f,0},{t,t,0}]} = xref:q(s,"X * M"),
+ check_state(s),
+
+ copy_file(fname(Dir, "lib1.erl"), fname(Dir,"lib1.beam")),
+ ok = xref:set_library_path(s, [Dir]),
+ {error, _, _} = xref:q(s, "U"),
%% OTP-3921. AM and LM not always disjoint.
- ?line {ok, lib1} = compile:file(fname(Dir,lib1),[debug_info,{outdir,Dir}]),
- ?line {ok, lib1} = xref:add_module(s, fname(Dir,"lib1.beam")),
- ?line check_state(s),
-
- ?line {error, _, {file_error, _, _}} = xref:set_library_path(s, [UDir]),
-
- ?line xref:stop(s),
- ?line ok = file:delete(fname(Dir, "lib1.beam")),
- ?line ok = file:delete(fname(Dir, "lib2.beam")),
- ?line ok = file:delete(fname(Dir, "lib3.beam")),
- ?line ok = file:delete(fname(Dir, "t.beam")),
-
- ?line {ok, cp} = compile:file(fname(Dir,cp),[debug_info,{outdir,Dir}]),
- ?line {ok, _} = start(s),
- ?line ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
- ?line {ok, cp} = xref:add_module(s, fname(Dir,"cp.beam")),
- ?line {ok, [{lists, sort, 1}]} = xref:q(s, "U"),
- ?line ok = xref:set_library_path(s, code_path),
- ?line {ok, []} = xref:q(s, "U"),
- ?line check_state(s),
- ?line xref:stop(s),
- ?line ok = file:delete(fname(Dir, "cp.beam")),
+ {ok, lib1} = compile:file(fname(Dir,lib1),[debug_info,{outdir,Dir}]),
+ {ok, lib1} = xref:add_module(s, fname(Dir,"lib1.beam")),
+ check_state(s),
+
+ {error, _, {file_error, _, _}} = xref:set_library_path(s, [UDir]),
+
+ xref:stop(s),
+ ok = file:delete(fname(Dir, "lib1.beam")),
+ ok = file:delete(fname(Dir, "lib2.beam")),
+ ok = file:delete(fname(Dir, "lib3.beam")),
+ ok = file:delete(fname(Dir, "t.beam")),
+
+ {ok, cp} = compile:file(fname(Dir,cp),[debug_info,{outdir,Dir}]),
+ {ok, _} = start(s),
+ ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
+ {ok, cp} = xref:add_module(s, fname(Dir,"cp.beam")),
+ {ok, [{lists, sort, 1}]} = xref:q(s, "U"),
+ ok = xref:set_library_path(s, code_path),
+ {ok, []} = xref:q(s, "U"),
+ check_state(s),
+ xref:stop(s),
+ ok = file:delete(fname(Dir, "cp.beam")),
ok.
-read(suite) -> [];
-read(doc) -> ["Data read from the Abstract Code"];
+%% Data read from the Abstract Code
read(Conf) when is_list(Conf) ->
CopyDir = ?copydir,
Dir = fname(CopyDir,"read"),
File = fname(Dir, "read"),
Beam = fname(Dir, "read.beam"),
- ?line {ok, read} = compile:file(File, [debug_info,{outdir,Dir}]),
- ?line do_read(File, abstract_v2),
- ?line copy_file(fname(Dir, "read.beam.v1"), Beam),
- ?line do_read(File, abstract_v1),
- ?line ok = file:delete(Beam),
+ {ok, read} = compile:file(File, [debug_info,{outdir,Dir}]),
+ do_read(File, abstract_v2),
+ copy_file(fname(Dir, "read.beam.v1"), Beam),
+ do_read(File, abstract_v1),
+ ok = file:delete(Beam),
ok.
do_read(File, Version) ->
- ?line {ok, _} = start(s),
- ?line ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
- ?line {ok, read} = xref:add_module(s, File),
+ {ok, _} = start(s),
+ ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
+ {ok, read} = xref:add_module(s, File),
- ?line {U, OK, OKB} = read_expected(Version),
+ {U, OK, OKB} = read_expected(Version),
%% {ok, UC} = xref:q(s, "(Lin) UC"),
%% RR = to_external(converse(family_to_relation(family(UC)))),
%% lists:foreach(fun(X) -> io:format("~w~n", [X]) end, RR),
Unres = to_external(relation_to_family(converse(from_term(U)))),
- ?line {ok, Unres} = xref:q(s, "(Lin) UC"),
+ {ok, Unres} = xref:q(s, "(Lin) UC"),
%% {ok, EE} = xref:q(s, "(Lin) (E - UC)"),
%% AA = to_external(converse(family_to_relation(family(EE)))),
%% lists:foreach(fun(X) -> io:format("~w~n", [X]) end, AA),
Calls = to_external(relation_to_family(converse(from_term(OK)))),
- ?line {ok, Calls} = xref:q(s, "(Lin) (E - UC) "),
-
- ?line ok = check_state(s),
- ?line {ok, UM} = xref:q(s, "UM"),
- ?line true = member('$M_EXPR', UM),
-
- ?line {ok, X} = xref:q(s, "X"),
- ?line true = member({read, module_info, 0}, X),
- ?line false = member({foo, module_info, 0}, X),
- ?line false = member({erlang, module_info, 0}, X),
- ?line {ok, Unknowns} = xref:q(s, "U"),
- ?line false = member({read, module_info, 0}, Unknowns),
- ?line true = member({foo, module_info, 0}, Unknowns),
- ?line true = member({erlang, module_info, 0}, Unknowns),
- ?line {ok, LC} = xref:q(s, "LC"),
- ?line true = member({{read,bi,0},{read,bi,0}}, LC),
-
- ?line ok = xref:set_library_path(s, add_erts_code_path(fname(code:lib_dir(kernel),ebin))),
- ?line io:format("~p~n",[(catch xref:get_library_path(s))]),
- ?line {ok, X2} = xref:q(s, "X"),
- ?line ok = check_state(s),
- ?line true = member({read, module_info, 0}, X2),
- ?line false = member({foo, module_info, 0}, X2),
- ?line true = member({erlang, module_info, 0}, X2),
- ?line {ok, Unknowns2} = xref:q(s, "U"),
- ?line false = member({read, module_info, 0}, Unknowns2),
- ?line true = member({foo, module_info, 0}, Unknowns2),
- ?line false = member({erlang, module_info, 0}, Unknowns2),
-
- ?line ok = xref:remove_module(s, read),
- ?line {ok, read} = xref:add_module(s, File, [{builtins,true}]),
+ {ok, Calls} = xref:q(s, "(Lin) (E - UC) "),
+
+ ok = check_state(s),
+ {ok, UM} = xref:q(s, "UM"),
+ true = member('$M_EXPR', UM),
+
+ {ok, X} = xref:q(s, "X"),
+ true = member({read, module_info, 0}, X),
+ false = member({foo, module_info, 0}, X),
+ false = member({erlang, module_info, 0}, X),
+ {ok, Unknowns} = xref:q(s, "U"),
+ false = member({read, module_info, 0}, Unknowns),
+ true = member({foo, module_info, 0}, Unknowns),
+ true = member({erlang, module_info, 0}, Unknowns),
+ {ok, LC} = xref:q(s, "LC"),
+ true = member({{read,bi,0},{read,bi,0}}, LC),
+
+ ok = xref:set_library_path(s, add_erts_code_path(fname(code:lib_dir(kernel),ebin))),
+ io:format("~p~n",[(catch xref:get_library_path(s))]),
+ {ok, X2} = xref:q(s, "X"),
+ ok = check_state(s),
+ true = member({read, module_info, 0}, X2),
+ false = member({foo, module_info, 0}, X2),
+ true = member({erlang, module_info, 0}, X2),
+ {ok, Unknowns2} = xref:q(s, "U"),
+ false = member({read, module_info, 0}, Unknowns2),
+ true = member({foo, module_info, 0}, Unknowns2),
+ false = member({erlang, module_info, 0}, Unknowns2),
+
+ ok = xref:remove_module(s, read),
+ {ok, read} = xref:add_module(s, File, [{builtins,true}]),
UnresB = to_external(relation_to_family(converse(from_term(U)))),
- ?line {ok, UnresB} = xref:q(s, "(Lin) UC"),
+ {ok, UnresB} = xref:q(s, "(Lin) UC"),
CallsB = to_external(relation_to_family(converse(from_term(OKB)))),
- ?line {ok, CallsB} = xref:q(s, "(Lin) (E - UC) "),
- ?line ok = check_state(s),
- ?line {ok, XU} = xref:q(s, "XU"),
- ?line Erl = set([{erlang,length,1},{erlang,integer,1},
- {erlang,binary_to_term,1}]),
- ?line [{erlang,binary_to_term,1},{erlang,length,1}] =
- to_external(intersection(set(XU), Erl)),
- ?line xref:stop(s).
+ {ok, CallsB} = xref:q(s, "(Lin) (E - UC) "),
+ ok = check_state(s),
+ {ok, XU} = xref:q(s, "XU"),
+ Erl = set([{erlang,length,1},{erlang,integer,1},
+ {erlang,binary_to_term,1}]),
+ [{erlang,binary_to_term,1},{erlang,length,1}] =
+ to_external(intersection(set(XU), Erl)),
+ xref:stop(s).
%% What is expected when xref_SUITE_data/read/read.erl is added:
read_expected(Version) ->
@@ -1052,174 +1012,172 @@ read_expected(Version) ->
FF = {read,funfuns,0},
U = [{POS1+5,{FF,{dist,'$F_EXPR',0}}},
- {POS1+8,{FF,{dist,'$F_EXPR',0}}},
- {POS2+8,{{read,funfuns,0},{expr,'$F_EXPR',1}}},
- {POS3+4,{FF,{expr,'$F_EXPR',2}}},
- {POS4+2,{FF,{modul,'$F_EXPR',1}}},
- {POS4+4,{FF,{spm,'$F_EXPR',1}}},
- {POS4+6,{FF,{spm,'$F_EXPR',1}}},
- {POS4+8,{FF,{spm,'$F_EXPR',1}}},
- {POS5+1,{FF,{'$M_EXPR','$F_EXPR',0}}},
- {POS5+2,{FF,{'$M_EXPR','$F_EXPR',0}}},
- {POS5+3,{FF,{'$M_EXPR','$F_EXPR',0}}},
- {POS6+1,{FF,{'$M_EXPR','$F_EXPR',0}}},
- {POS6+2,{FF,{'$M_EXPR','$F_EXPR',0}}},
- {POS6+4,{FF,{n,'$F_EXPR',-1}}},
- {POS7+1,{FF,{'$M_EXPR',f,1}}},
- {POS7+2,{FF,{'$M_EXPR',f,1}}},
- {POS8+2,{FF,{hej,'$F_EXPR',1}}},
- {POS8+3,{FF,{t,'$F_EXPR',1}}},
- {POS8+5,{FF,{a,'$F_EXPR',1}}},
- {POS8+7,{FF,{m,'$F_EXPR',1}}},
- {POS9+1,{FF,{'$M_EXPR',f,1}}},
- {POS9+3,{FF,{a,'$F_EXPR',1}}},
- {POS10+1,{FF,{'$M_EXPR',foo,1}}},
- {POS10+2,{FF,{'$M_EXPR','$F_EXPR',1}}},
- {POS10+3,{FF,{'$M_EXPR','$F_EXPR',2}}},
- {POS10+4,{FF,{'$M_EXPR','$F_EXPR',1}}},
- {POS10+5,{FF,{'$M_EXPR',san,1}}},
- {POS10+6,{FF,{'$M_EXPR','$F_EXPR',1}}},
- {POS11+1,{FF,{'$M_EXPR','$F_EXPR',1}}},
- {POS11+2,{FF,{'$M_EXPR','$F_EXPR',-1}}},
- {POS11+3,{FF,{m,f,-1}}},
- {POS11+4,{FF,{m,f,-1}}},
- {POS11+5,{FF,{'$M_EXPR','$F_EXPR',1}}},
- {POS11+6,{FF,{'$M_EXPR','$F_EXPR',1}}},
- {POS12+1,{FF,{'$M_EXPR','$F_EXPR',-1}}},
- {POS12+4,{FF,{'$M_EXPR','$F_EXPR',2}}},
- {POS12+7,{FF,{'$M_EXPR','$F_EXPR',-1}}},
- {POS12+8,{FF,{m4,f4,-1}}},
- {POS13+2,{FF,{debug,'$F_EXPR',0}}},
- {POS13+3,{FF,{'$M_EXPR','$F_EXPR',-1}}},
- {POS14+8,{{read,bi,0},{'$M_EXPR','$F_EXPR',1}}}],
+ {POS1+8,{FF,{dist,'$F_EXPR',0}}},
+ {POS2+8,{{read,funfuns,0},{expr,'$F_EXPR',1}}},
+ {POS3+4,{FF,{expr,'$F_EXPR',2}}},
+ {POS4+2,{FF,{modul,'$F_EXPR',1}}},
+ {POS4+4,{FF,{spm,'$F_EXPR',1}}},
+ {POS4+6,{FF,{spm,'$F_EXPR',1}}},
+ {POS4+8,{FF,{spm,'$F_EXPR',1}}},
+ {POS5+1,{FF,{'$M_EXPR','$F_EXPR',0}}},
+ {POS5+2,{FF,{'$M_EXPR','$F_EXPR',0}}},
+ {POS5+3,{FF,{'$M_EXPR','$F_EXPR',0}}},
+ {POS6+1,{FF,{'$M_EXPR','$F_EXPR',0}}},
+ {POS6+2,{FF,{'$M_EXPR','$F_EXPR',0}}},
+ {POS6+4,{FF,{n,'$F_EXPR',-1}}},
+ {POS7+1,{FF,{'$M_EXPR',f,1}}},
+ {POS7+2,{FF,{'$M_EXPR',f,1}}},
+ {POS8+2,{FF,{hej,'$F_EXPR',1}}},
+ {POS8+3,{FF,{t,'$F_EXPR',1}}},
+ {POS8+5,{FF,{a,'$F_EXPR',1}}},
+ {POS8+7,{FF,{m,'$F_EXPR',1}}},
+ {POS9+1,{FF,{'$M_EXPR',f,1}}},
+ {POS9+3,{FF,{a,'$F_EXPR',1}}},
+ {POS10+1,{FF,{'$M_EXPR',foo,1}}},
+ {POS10+2,{FF,{'$M_EXPR','$F_EXPR',1}}},
+ {POS10+3,{FF,{'$M_EXPR','$F_EXPR',2}}},
+ {POS10+4,{FF,{'$M_EXPR','$F_EXPR',1}}},
+ {POS10+5,{FF,{'$M_EXPR',san,1}}},
+ {POS10+6,{FF,{'$M_EXPR','$F_EXPR',1}}},
+ {POS11+1,{FF,{'$M_EXPR','$F_EXPR',1}}},
+ {POS11+2,{FF,{'$M_EXPR','$F_EXPR',-1}}},
+ {POS11+3,{FF,{m,f,-1}}},
+ {POS11+4,{FF,{m,f,-1}}},
+ {POS11+5,{FF,{'$M_EXPR','$F_EXPR',1}}},
+ {POS11+6,{FF,{'$M_EXPR','$F_EXPR',1}}},
+ {POS12+1,{FF,{'$M_EXPR','$F_EXPR',-1}}},
+ {POS12+4,{FF,{'$M_EXPR','$F_EXPR',2}}},
+ {POS12+7,{FF,{'$M_EXPR','$F_EXPR',-1}}},
+ {POS12+8,{FF,{m4,f4,-1}}},
+ {POS13+2,{FF,{debug,'$F_EXPR',0}}},
+ {POS13+3,{FF,{'$M_EXPR','$F_EXPR',-1}}},
+ {POS14+8,{{read,bi,0},{'$M_EXPR','$F_EXPR',1}}}],
O1 = [{20,{{read,lc,0},{ets,new,0}}},
- {21,{{read,lc,0},{ets,tab2list,1}}},
- {POS1+1,{FF,{erlang,spawn,1}}},
- {POS1+1,{FF,{mod17,fun17,0}}},
- {POS1+2,{FF,{erlang,spawn,1}}},
- {POS1+2,{FF,{read,local,0}}},
- {POS1+3,{FF,{erlang,spawn,1}}},
- {POS1+4,{FF,{dist,func,0}}},
- {POS1+4,{FF,{erlang,spawn,1}}},
- {POS1+5,{FF,{erlang,spawn,1}}},
- {POS1+6,{FF,{erlang,spawn_link,1}}},
- {POS1+6,{FF,{mod17,fun17,0}}},
- {POS1+7,{FF,{dist,func,0}}},
- {POS1+7,{FF,{erlang,spawn_link,1}}},
- {POS1+8,{FF,{erlang,spawn_link,1}}},
- {POS2+1,{FF,{d,f,0}}},
- {POS2+1,{FF,{dist,func,2}}},
- {POS2+1,{FF,{erlang,spawn,2}}},
- {POS2+2,{FF,{dist,func,2}}},
- {POS2+2,{FF,{erlang,spawn,2}}},
- {POS2+2,{FF,{mod42,func,0}}},
- {POS2+3,{FF,{d,f,0}}},
- {POS2+3,{FF,{dist,func,2}}},
- {POS2+3,{FF,{erlang,spawn_link,2}}},
- {POS2+4,{FF,{dist,func,2}}},
- {POS2+4,{FF,{erlang,spawn_link,2}}},
- {POS2+4,{FF,{mod42,func,0}}},
- {POS3+1,{FF,{dist,func,2}}},
- {POS3+3,{FF,{dist,func,2}}},
- {POS4+1,{FF,{erlang,spawn,4}}},
- {POS4+1,{FF,{modul,function,0}}},
- {POS4+2,{FF,{erlang,spawn,4}}},
- {POS4+3,{FF,{dist,func,2}}},
- {POS4+3,{FF,{erlang,spawn,4}}},
- {POS4+3,{FF,{spm,spf,2}}},
- {POS4+4,{FF,{dist,func,2}}},
- {POS4+4,{FF,{erlang,spawn,4}}},
- {POS4+5,{FF,{dist,func,2}}},
- {POS4+5,{FF,{erlang,spawn_link,4}}},
- {POS4+5,{FF,{spm,spf,2}}},
- {POS4+6,{FF,{dist,func,2}}},
- {POS4+6,{FF,{erlang,spawn_link,4}}},
- {POS4+7,{FF,{erlang,spawn_opt,4}}},
- {POS4+7,{FF,{read,bi,0}}},
- {POS4+7,{FF,{spm,spf,2}}},
- {POS4+8,{FF,{erlang,spawn_opt,4}}},
- {POS4+8,{FF,{read,bi,0}}},
- {POS5+1,{FF,{erlang,spawn,1}}},
- {POS5+2,{FF,{erlang,spawn,1}}},
- {POS5+3,{FF,{erlang,spawn_link,1}}},
- {POS6+1,{FF,{erlang,spawn,2}}},
- {POS6+2,{FF,{erlang,spawn_link,2}}},
- {POS7+1,{FF,{erlang,spawn,4}}},
- {POS7+2,{FF,{erlang,spawn_opt,4}}},
- {POS8+1,{FF,{hej,san,1}}},
- {POS8+4,{FF,{a,b,1}}},
- {POS8+4,{FF,{erlang,apply,2}}},
- {POS8+5,{FF,{erlang,apply,2}}},
- {POS8+6,{FF,{erlang,apply,3}}},
- {POS8+6,{FF,{m,f,1}}},
- {POS8+7,{FF,{erlang,apply,3}}},
- {POS9+1,{FF,{erlang,apply,3}}},
- {POS9+1,{FF,{read,bi,0}}},
- {POS9+2,{FF,{a,b,1}}},
- {POS9+2,{FF,{erlang,apply,2}}},
- {POS9+3,{FF,{erlang,apply,2}}},
- {POS9+4,{FF,{erlang,apply,2}}},
- {POS9+4,{FF,{erlang,not_a_function,1}}},
- {POS9+5,{FF,{erlang,apply,3}}},
- {POS9+5,{FF,{mod,func,2}}},
- {POS9+6,{FF,{erlang,apply,1}}},
- {POS9+7,{FF,{erlang,apply,2}}},
- {POS9+7,{FF,{math,add3,1}}},
- {POS9+8,{FF,{q,f,1}}},
- {POS10+4,{FF,{erlang,apply,2}}},
- {POS10+5,{FF,{mod1,fun1,1}}},
- {POS11+1,{FF,{erlang,apply,3}}},
- {POS11+2,{FF,{erlang,apply,3}}},
- {POS11+3,{FF,{erlang,apply,3}}},
- {POS11+4,{FF,{erlang,apply,3}}},
- {POS11+6,{FF,{erlang,apply,2}}},
- {POS12+1,{FF,{erlang,apply,2}}},
- {POS12+4,{FF,{erlang,apply,2}}},
- {POS12+5,{FF,{erlang,apply,3}}},
- {POS12+5,{FF,{m3,f3,2}}},
- {POS12+7,{FF,{erlang,apply,2}}},
- {POS12+8,{FF,{erlang,apply,3}}},
- {POS13+1,{FF,{dm,df,1}}},
- {POS13+6,{{read,bi,0},{foo,module_info,0}}},
- {POS13+7,{{read,bi,0},{read,module_info,0}}},
- {POS13+9,{{read,bi,0},{t,foo,1}}},
- {POS14+11,{{read,bi,0},{erlang,module_info,0}}},
- {POS14+17,{{read,bi,0},{read,bi,0}}}],
+ {21,{{read,lc,0},{ets,tab2list,1}}},
+ {POS1+1,{FF,{erlang,spawn,1}}},
+ {POS1+1,{FF,{mod17,fun17,0}}},
+ {POS1+2,{FF,{erlang,spawn,1}}},
+ {POS1+2,{FF,{read,local,0}}},
+ {POS1+3,{FF,{erlang,spawn,1}}},
+ {POS1+4,{FF,{dist,func,0}}},
+ {POS1+4,{FF,{erlang,spawn,1}}},
+ {POS1+5,{FF,{erlang,spawn,1}}},
+ {POS1+6,{FF,{erlang,spawn_link,1}}},
+ {POS1+6,{FF,{mod17,fun17,0}}},
+ {POS1+7,{FF,{dist,func,0}}},
+ {POS1+7,{FF,{erlang,spawn_link,1}}},
+ {POS1+8,{FF,{erlang,spawn_link,1}}},
+ {POS2+1,{FF,{d,f,0}}},
+ {POS2+1,{FF,{dist,func,2}}},
+ {POS2+1,{FF,{erlang,spawn,2}}},
+ {POS2+2,{FF,{dist,func,2}}},
+ {POS2+2,{FF,{erlang,spawn,2}}},
+ {POS2+2,{FF,{mod42,func,0}}},
+ {POS2+3,{FF,{d,f,0}}},
+ {POS2+3,{FF,{dist,func,2}}},
+ {POS2+3,{FF,{erlang,spawn_link,2}}},
+ {POS2+4,{FF,{dist,func,2}}},
+ {POS2+4,{FF,{erlang,spawn_link,2}}},
+ {POS2+4,{FF,{mod42,func,0}}},
+ {POS3+1,{FF,{dist,func,2}}},
+ {POS3+3,{FF,{dist,func,2}}},
+ {POS4+1,{FF,{erlang,spawn,4}}},
+ {POS4+1,{FF,{modul,function,0}}},
+ {POS4+2,{FF,{erlang,spawn,4}}},
+ {POS4+3,{FF,{dist,func,2}}},
+ {POS4+3,{FF,{erlang,spawn,4}}},
+ {POS4+3,{FF,{spm,spf,2}}},
+ {POS4+4,{FF,{dist,func,2}}},
+ {POS4+4,{FF,{erlang,spawn,4}}},
+ {POS4+5,{FF,{dist,func,2}}},
+ {POS4+5,{FF,{erlang,spawn_link,4}}},
+ {POS4+5,{FF,{spm,spf,2}}},
+ {POS4+6,{FF,{dist,func,2}}},
+ {POS4+6,{FF,{erlang,spawn_link,4}}},
+ {POS4+7,{FF,{erlang,spawn_opt,4}}},
+ {POS4+7,{FF,{read,bi,0}}},
+ {POS4+7,{FF,{spm,spf,2}}},
+ {POS4+8,{FF,{erlang,spawn_opt,4}}},
+ {POS4+8,{FF,{read,bi,0}}},
+ {POS5+1,{FF,{erlang,spawn,1}}},
+ {POS5+2,{FF,{erlang,spawn,1}}},
+ {POS5+3,{FF,{erlang,spawn_link,1}}},
+ {POS6+1,{FF,{erlang,spawn,2}}},
+ {POS6+2,{FF,{erlang,spawn_link,2}}},
+ {POS7+1,{FF,{erlang,spawn,4}}},
+ {POS7+2,{FF,{erlang,spawn_opt,4}}},
+ {POS8+1,{FF,{hej,san,1}}},
+ {POS8+4,{FF,{a,b,1}}},
+ {POS8+4,{FF,{erlang,apply,2}}},
+ {POS8+5,{FF,{erlang,apply,2}}},
+ {POS8+6,{FF,{m,f,1}}},
+ {POS9+1,{FF,{read,bi,0}}},
+ {POS9+2,{FF,{a,b,1}}},
+ {POS9+2,{FF,{erlang,apply,2}}},
+ {POS9+3,{FF,{erlang,apply,2}}},
+ {POS9+4,{FF,{erlang,apply,2}}},
+ {POS9+4,{FF,{erlang,not_a_function,1}}},
+ {POS9+5,{FF,{mod,func,2}}},
+ {POS9+6,{FF,{erlang,apply,1}}},
+ {POS9+7,{FF,{erlang,apply,2}}},
+ {POS9+7,{FF,{math,add3,1}}},
+ {POS9+8,{FF,{q,f,1}}},
+ {POS10+4,{FF,{erlang,apply,2}}},
+ {POS10+5,{FF,{mod1,fun1,1}}},
+ {POS11+6,{FF,{erlang,apply,2}}},
+ {POS12+1,{FF,{erlang,apply,2}}},
+ {POS12+4,{FF,{erlang,apply,2}}},
+ {POS12+5,{FF,{m3,f3,2}}},
+ {POS12+7,{FF,{erlang,apply,2}}},
+ {POS13+1,{FF,{dm,df,1}}},
+ {POS13+6,{{read,bi,0},{foo,module_info,0}}},
+ {POS13+7,{{read,bi,0},{read,module_info,0}}},
+ {POS13+9,{{read,bi,0},{t,foo,1}}},
+ {POS14+11,{{read,bi,0},{erlang,module_info,0}}},
+ {POS14+17,{{read,bi,0},{read,bi,0}}}],
OK = case Version of
- abstract_v1 ->
- [{POS8+3, {FF,{erlang,apply,3}}},
- {POS10+1, {FF,{erlang,apply,3}}},
- {POS10+6, {FF,{erlang,apply,3}}}]
- ++
+ abstract_v1 ->
[{0,{FF,{read,'$F_EXPR',178}}},
{0,{FF,{modul,'$F_EXPR',179}}}]
++ O1;
- _ ->
+ _ ->
[{16,{FF,{read,'$F_EXPR',178}}},
{17,{FF,{modul,'$F_EXPR',179}}}]
++
O1
- end,
+ end,
%% When builtins =:= true:
OKB1 = [{POS13+1,{FF,{erts_debug,apply,4}}},
{POS13+2,{FF,{erts_debug,apply,4}}},
{POS13+3,{FF,{erts_debug,apply,4}}},
- {POS1+3, {FF,{erlang,binary_to_term,1}}},
+ {POS1+3, {FF,{erlang,binary_to_term,1}}},
{POS3+1, {FF,{erlang,spawn,3}}},
{POS3+2, {FF,{erlang,spawn,3}}},
{POS3+3, {FF,{erlang,spawn_link,3}}},
{POS3+4, {FF,{erlang,spawn_link,3}}},
{POS6+4, {FF,{erlang,spawn,3}}},
+ {POS8+6,{FF,{erlang,apply,3}}},
+ {POS8+7,{FF,{erlang,apply,3}}},
+ {POS9+1,{FF,{erlang,apply,3}}},
+ {POS9+5,{FF,{erlang,apply,3}}},
+ {POS11+1,{FF,{erlang,apply,3}}},
+ {POS11+2,{FF,{erlang,apply,3}}},
+ {POS11+3,{FF,{erlang,apply,3}}},
+ {POS11+4,{FF,{erlang,apply,3}}},
+ {POS12+5,{FF,{erlang,apply,3}}},
+ {POS12+8,{FF,{erlang,apply,3}}},
{POS13+5, {{read,bi,0},{erlang,length,1}}},
{POS14+3, {{read,bi,0},{erlang,length,1}}}],
%% Operators (OTP-8647):
OKB = case Version of
abstract_v1 ->
- [];
+ [{POS8+3, {FF,{erlang,apply,3}}},
+ {POS10+1, {FF,{erlang,apply,3}}},
+ {POS10+6, {FF,{erlang,apply,3}}}];
_ ->
[{POS13+16, {{read,bi,0},{erlang,'!',2}}},
{POS13+16, {{read,bi,0},{erlang,'-',1}}},
@@ -1229,18 +1187,17 @@ read_expected(Version) ->
{POS15+2, {{read,bi,0},{erlang,'*',2}}},
{POS15+8, {{read,bi,0},{erlang,'/',2}}}]
end
- ++ [{POS14+19, {{read,bi,0},{erlang,'+',2}}},
- {POS14+21, {{read,bi,0},{erlang,'+',2}}},
- {POS13+16, {{read,bi,0},{erlang,'==',2}}},
- {POS14+15, {{read,bi,0},{erlang,'==',2}}},
- {POS13+5, {{read,bi,0},{erlang,'>',2}}},
- {POS14+3, {{read,bi,0},{erlang,'>',2}}}]
- ++ OKB1 ++ OK,
+ ++ [{POS14+19, {{read,bi,0},{erlang,'+',2}}},
+ {POS14+21, {{read,bi,0},{erlang,'+',2}}},
+ {POS13+16, {{read,bi,0},{erlang,'==',2}}},
+ {POS14+15, {{read,bi,0},{erlang,'==',2}}},
+ {POS13+5, {{read,bi,0},{erlang,'>',2}}},
+ {POS14+3, {{read,bi,0},{erlang,'>',2}}}]
+ ++ OKB1 ++ OK,
{U, OK, OKB}.
-read2(suite) -> [];
-read2(doc) -> ["Data read from the Abstract Code (cont)"];
+%% Data read from the Abstract Code (cont)
read2(Conf) when is_list(Conf) ->
%% Handles the spawn_opt versions added in R9 (OTP-4180).
%% Expected augmentations: try/catch, cond.
@@ -1250,40 +1207,40 @@ read2(Conf) when is_list(Conf) ->
MFile = fname(Dir, "read2"),
Beam = fname(Dir, "read2.beam"),
Test = <<"-module(read2).
- -compile(export_all).
-
- f() ->
- spawn_opt({read2,f}, % POS2
- [f()]),
- spawn_opt(fun() -> foo end, [link]),
- spawn_opt(f(),
- {read2,f}, [{min_heap_size,1000}]),
- spawn_opt(f(),
- fun() -> f() end, [flopp]),
- spawn_opt(f(),
- read2, f, [], []);
- f() ->
- %% Duplicated unresolved calls are ignored:
- (f())(foo,bar),(f())(foo,bar). % POS1
+ -compile(export_all).
+
+ f() ->
+ spawn_opt({read2,f}, % POS2
+ [f()]),
+ spawn_opt(fun() -> foo end, [link]),
+ spawn_opt(f(),
+ {read2,f}, [{min_heap_size,1000}]),
+ spawn_opt(f(),
+ fun() -> f() end, [flopp]),
+ spawn_opt(f(),
+ read2, f, [], []);
+ f() ->
+ %% Duplicated unresolved calls are ignored:
+ (f())(foo,bar),(f())(foo,bar). % POS1
">>,
- ?line ok = file:write_file(File, Test),
- ?line {ok, read2} = compile:file(File, [debug_info,{outdir,Dir}]),
+ ok = file:write_file(File, Test),
+ {ok, read2} = compile:file(File, [debug_info,{outdir,Dir}]),
- ?line {ok, _} = xref:start(s),
- ?line {ok, read2} = xref:add_module(s, MFile),
- ?line {U0, OK0} = read2_expected(),
+ {ok, _} = xref:start(s),
+ {ok, read2} = xref:add_module(s, MFile),
+ {U0, OK0} = read2_expected(),
U = to_external(relation_to_family(converse(from_term(U0)))),
OK = to_external(relation_to_family(converse(from_term(OK0)))),
- ?line {ok, U2} = xref:q(s, "(Lin) UC"),
- ?line {ok, OK2} = xref:q(s, "(Lin) (E - UC)"),
- ?line true = U =:= U2,
- ?line true = OK =:= OK2,
- ?line ok = check_state(s),
- ?line xref:stop(s),
-
- ?line ok = file:delete(File),
- ?line ok = file:delete(Beam),
+ {ok, U2} = xref:q(s, "(Lin) UC"),
+ {ok, OK2} = xref:q(s, "(Lin) (E - UC)"),
+ true = U =:= U2,
+ true = OK =:= OK2,
+ ok = check_state(s),
+ xref:stop(s),
+
+ ok = file:delete(File),
+ ok = file:delete(Beam),
ok.
@@ -1293,36 +1250,34 @@ read2_expected() ->
FF = {read2,f,0},
U = [{POS1,{FF,{'$M_EXPR','$F_EXPR',2}}}],
OK = [{POS2,{FF,{erlang,spawn_opt,2}}},
- {POS2,{FF,FF}},
- {POS2+1,{FF,FF}},
- {POS2+2,{FF,{erlang,spawn_opt,2}}},
- {POS2+3,{FF,{erlang,spawn_opt,3}}},
- {POS2+3,{FF,FF}},
- {POS2+3,{FF,FF}},
- {POS2+5,{FF,{erlang,spawn_opt,3}}},
- {POS2+5,{FF,FF}},
- {POS2+6,{FF,FF}},
- {POS2+7,{FF,{erlang,spawn_opt,5}}},
- {POS2+7,{FF,FF}},
- {POS2+7,{FF,FF}},
- {POS1,{FF,FF}}],
+ {POS2,{FF,FF}},
+ {POS2+1,{FF,FF}},
+ {POS2+2,{FF,{erlang,spawn_opt,2}}},
+ {POS2+3,{FF,{erlang,spawn_opt,3}}},
+ {POS2+3,{FF,FF}},
+ {POS2+3,{FF,FF}},
+ {POS2+5,{FF,{erlang,spawn_opt,3}}},
+ {POS2+5,{FF,FF}},
+ {POS2+6,{FF,FF}},
+ {POS2+7,{FF,{erlang,spawn_opt,5}}},
+ {POS2+7,{FF,FF}},
+ {POS2+7,{FF,FF}},
+ {POS1,{FF,FF}}],
{U, OK}.
-remove(suite) -> [];
-remove(doc) -> ["Remove modules, applications, releases"];
+%% Remove modules, applications, releases
remove(Conf) when is_list(Conf) ->
S = new(),
- ?line {error, _, {no_such_module, mod}} =
- xref_base:remove_module(S, mod),
- ?line {error, _, {no_such_application, app}} =
- xref_base:remove_application(S, app),
- ?line {error, _, {no_such_release, rel}} =
- xref_base:remove_release(S, rel),
- ?line ok = xref_base:delete(S),
+ {error, _, {no_such_module, mod}} =
+ xref_base:remove_module(S, mod),
+ {error, _, {no_such_application, app}} =
+ xref_base:remove_application(S, app),
+ {error, _, {no_such_release, rel}} =
+ xref_base:remove_release(S, rel),
+ ok = xref_base:delete(S),
ok.
-replace(suite) -> [];
-replace(doc) -> ["Replace modules, applications, releases"];
+%% Replace modules, applications, releases
replace(Conf) when is_list(Conf) ->
CopyDir = ?copydir,
Dir = fname(CopyDir,"rel2"),
@@ -1336,105 +1291,103 @@ replace(Conf) when is_list(Conf) ->
Xbeam = fname(EB1_1, "x.beam"),
Ybeam = fname(EB1_1, "y.beam"),
- ?line {ok, x} = compile:file(X, [debug_info, {outdir,EB1_0}]),
- ?line {ok, x} = compile:file(X, [debug_info, {outdir,EB1_1}]),
- ?line {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
-
- ?line {ok, _} = start(s),
- ?line {ok, false} = xref:set_default(s, verbose, false),
- ?line {ok, true} = xref:set_default(s, warnings, false),
- ?line {ok, rel2} = xref:add_release(s, Dir, []),
- ?line {error, _, _} = xref:replace_application(s, app1, "no_data"),
- ?line {error, _, {no_such_application, app12}} =
- xref:replace_application(s, app12, A1_0, []),
- ?line {error, _, {invalid_filename,{foo,bar}}} =
- xref:replace_application(s, app1, {foo,bar}, []),
- ?line {error, _, {invalid_options,[not_an_option]}} =
- xref:replace_application(s, foo, bar, [not_an_option]),
- ?line {error, _, {invalid_options,[{builtins,not_a_value}]}} =
- xref:replace_application(s, foo, bar, [{builtins,not_a_value}]),
- ?line {ok, app1} =
- xref:replace_application(s, app1, A1_0),
- ?line [{_, AppInfo}] = xref:info(s, applications, app1),
- ?line {value, {release, [rel2]}} = keysearch(release, 1, AppInfo),
-
- ?line {error, _, {no_such_module, xx}} =
- xref:replace_module(s, xx, Xbeam, []),
- ?line {error, _, {invalid_options,[{builtins,true},not_an_option]}} =
- xref:replace_module(s, foo, bar,[{builtins,true},not_an_option]),
- ?line {error, _, {invalid_options,[{builtins,not_a_value}]}} =
- xref:replace_module(s, foo, bar, [{builtins,not_a_value}]),
- ?line {error, _, {invalid_filename,{foo,bar}}} =
- xref:replace_module(s, x, {foo,bar}),
- ?line {ok, x} = xref:replace_module(s, x, Xbeam),
- ?line [{x, ModInfo}] = xref:info(s, modules, x),
- ?line {value, {application, [app1]}} =
- keysearch(application, 1, ModInfo),
-
- ?line {ok, x} = compile:file(X, [no_debug_info, {outdir,EB1_1}]),
- ?line {error, _, {no_debug_info, _}} = xref:replace_module(s, x, Xbeam),
- ?line {error, _, {module_mismatch, x,y}} =
- xref:replace_module(s, x, Ybeam),
- ?line case os:type() of
- {unix, _} ->
- ?line hide_file(Ybeam),
- ?line {error, _, {file_error, _, _}} =
- xref:replace_module(s, x, Ybeam);
- _ ->
- true
- end,
- ?line ok = xref:remove_module(s, x),
- ?line {error, _, {no_debug_info, _}} = xref:add_module(s, Xbeam),
+ {ok, x} = compile:file(X, [debug_info, {outdir,EB1_0}]),
+ {ok, x} = compile:file(X, [debug_info, {outdir,EB1_1}]),
+ {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
+
+ {ok, _} = start(s),
+ {ok, false} = xref:set_default(s, verbose, false),
+ {ok, true} = xref:set_default(s, warnings, false),
+ {ok, rel2} = xref:add_release(s, Dir, []),
+ {error, _, _} = xref:replace_application(s, app1, "no_data"),
+ {error, _, {no_such_application, app12}} =
+ xref:replace_application(s, app12, A1_0, []),
+ {error, _, {invalid_filename,{foo,bar}}} =
+ xref:replace_application(s, app1, {foo,bar}, []),
+ {error, _, {invalid_options,[not_an_option]}} =
+ xref:replace_application(s, foo, bar, [not_an_option]),
+ {error, _, {invalid_options,[{builtins,not_a_value}]}} =
+ xref:replace_application(s, foo, bar, [{builtins,not_a_value}]),
+ {ok, app1} =
+ xref:replace_application(s, app1, A1_0),
+ [{_, AppInfo}] = xref:info(s, applications, app1),
+ {value, {release, [rel2]}} = keysearch(release, 1, AppInfo),
+
+ {error, _, {no_such_module, xx}} =
+ xref:replace_module(s, xx, Xbeam, []),
+ {error, _, {invalid_options,[{builtins,true},not_an_option]}} =
+ xref:replace_module(s, foo, bar,[{builtins,true},not_an_option]),
+ {error, _, {invalid_options,[{builtins,not_a_value}]}} =
+ xref:replace_module(s, foo, bar, [{builtins,not_a_value}]),
+ {error, _, {invalid_filename,{foo,bar}}} =
+ xref:replace_module(s, x, {foo,bar}),
+ {ok, x} = xref:replace_module(s, x, Xbeam),
+ [{x, ModInfo}] = xref:info(s, modules, x),
+ {value, {application, [app1]}} =
+ keysearch(application, 1, ModInfo),
+
+ {ok, x} = compile:file(X, [no_debug_info, {outdir,EB1_1}]),
+ {error, _, {no_debug_info, _}} = xref:replace_module(s, x, Xbeam),
+ {error, _, {module_mismatch, x,y}} =
+ xref:replace_module(s, x, Ybeam),
+ case os:type() of
+ {unix, _} ->
+ hide_file(Ybeam),
+ {error, _, {file_error, _, _}} =
+ xref:replace_module(s, x, Ybeam);
+ _ ->
+ true
+ end,
+ ok = xref:remove_module(s, x),
+ {error, _, {no_debug_info, _}} = xref:add_module(s, Xbeam),
%% "app2" is ignored, the old application name is kept
- ?line {ok, app1} = xref:replace_application(s, app1, A2),
+ {ok, app1} = xref:replace_application(s, app1, A2),
- ?line xref:stop(s),
- ?line ok = file:delete(fname(EB1_0, "x.beam")),
- ?line ok = file:delete(Xbeam),
- ?line ok = file:delete(Ybeam),
+ xref:stop(s),
+ ok = file:delete(fname(EB1_0, "x.beam")),
+ ok = file:delete(Xbeam),
+ ok = file:delete(Ybeam),
ok.
-update(suite) -> [];
-update(doc) -> ["The update() function"];
+%% The update() function
update(Conf) when is_list(Conf) ->
CopyDir = ?copydir,
Dir = fname(CopyDir,"update"),
Source = fname(Dir, "x.erl"),
Beam = fname(Dir, "x.beam"),
- ?line copy_file(fname(Dir, "x.erl.1"), Source),
- ?line {ok, x} = compile:file(Source, [debug_info, {outdir,Dir}]),
-
- ?line {ok, _} = start(s),
- ?line ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
- ?line {ok, [x]} = xref:add_directory(s, Dir, [{builtins,true}]),
- ?line {error, _, {invalid_options,[not_an_option]}} =
- xref:update(s, [not_an_option]),
- ?line {ok, []} = xref:update(s),
- ?line {ok, [{erlang,atom_to_list,1}]} = xref:q(s, "XU"),
-
- ?line [{x, ModInfo}] = xref:info(s, modules, x),
- ?line case keysearch(directory, 1, ModInfo) of
- {value, {directory, Dir}} -> ok
- end,
+ copy_file(fname(Dir, "x.erl.1"), Source),
+ {ok, x} = compile:file(Source, [debug_info, {outdir,Dir}]),
+
+ {ok, _} = start(s),
+ ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
+ {ok, [x]} = xref:add_directory(s, Dir, [{builtins,true}]),
+ {error, _, {invalid_options,[not_an_option]}} =
+ xref:update(s, [not_an_option]),
+ {ok, []} = xref:update(s),
+ {ok, [{erlang,atom_to_list,1}]} = xref:q(s, "XU"),
+
+ [{x, ModInfo}] = xref:info(s, modules, x),
+ case keysearch(directory, 1, ModInfo) of
+ {value, {directory, Dir}} -> ok
+ end,
timer:sleep(2000), % make sure modification time has changed
- ?line copy_file(fname(Dir, "x.erl.2"), Source),
- ?line {ok, x} = compile:file(Source, [debug_info, {outdir,Dir}]),
- ?line {ok, [x]} = xref:update(s, []),
- ?line {ok, [{erlang,list_to_atom,1}]} = xref:q(s, "XU"),
+ copy_file(fname(Dir, "x.erl.2"), Source),
+ {ok, x} = compile:file(Source, [debug_info, {outdir,Dir}]),
+ {ok, [x]} = xref:update(s, []),
+ {ok, [{erlang,list_to_atom,1}]} = xref:q(s, "XU"),
timer:sleep(2000),
- ?line {ok, x} = compile:file(Source, [no_debug_info,{outdir,Dir}]),
- ?line {error, _, {no_debug_info, _}} = xref:update(s),
+ {ok, x} = compile:file(Source, [no_debug_info,{outdir,Dir}]),
+ {error, _, {no_debug_info, _}} = xref:update(s),
- ?line xref:stop(s),
- ?line ok = file:delete(Beam),
- ?line ok = file:delete(Source),
+ xref:stop(s),
+ ok = file:delete(Beam),
+ ok = file:delete(Source),
ok.
-deprecated(suite) -> [];
-deprecated(doc) -> ["OTP-4695: Deprecated functions."];
+%% OTP-4695: Deprecated functions.
deprecated(Conf) when is_list(Conf) ->
Dir = ?copydir,
File = fname(Dir, "depr.erl"),
@@ -1444,79 +1397,79 @@ deprecated(Conf) when is_list(Conf) ->
%% This file has been compiled to ?datadir/depr_r9c.beam
%% using the R9C compiler. From R10B and onwards the linter
%% checks the 'deprecated' attribute as well.
-% Test = <<"-module(depr).
+ % Test = <<"-module(depr).
-% -export([t/0,f/1,bar/2,f/2,g/3]).
+ % -export([t/0,f/1,bar/2,f/2,g/3]).
-% -deprecated([{f,1}, % DF
-% {bar,2,eventually}]). % DF_3
-% -deprecated([{f,1,next_major_release}]). % DF_2 (again)
-% -deprecated([{frutt,0,next_version}]). % message...
-% -deprecated([{f,2,next_major_release}, % DF_2
-% {g,3,next_version}, % DF_1
-% {ignored,10,100}]). % message...
-% -deprecated([{does_not_exist,1}]). % message...
+ % -deprecated([{f,1}, % DF
+ % {bar,2,eventually}]). % DF_3
+ % -deprecated([{f,1,next_major_release}]). % DF_2 (again)
+ % -deprecated([{frutt,0,next_version}]). % message...
+ % -deprecated([{f,2,next_major_release}, % DF_2
+ % {g,3,next_version}, % DF_1
+ % {ignored,10,100}]). % message...
+ % -deprecated([{does_not_exist,1}]). % message...
-% -deprecated(foo). % message...
+ % -deprecated(foo). % message...
-% t() ->
-% frutt(1),
-% g(1,2, 3),
-% ?MODULE:f(10).
+ % t() ->
+ % frutt(1),
+ % g(1,2, 3),
+ % ?MODULE:f(10).
-% f(A) ->
-% ?MODULE:f(A,A).
+ % f(A) ->
+ % ?MODULE:f(A,A).
-% f(X, Y) ->
-% ?MODULE:g(X, Y, X).
+ % f(X, Y) ->
+ % ?MODULE:g(X, Y, X).
-% g(F, G, H) ->
-% ?MODULE:bar(F, {G,H}).
+ % g(F, G, H) ->
+ % ?MODULE:bar(F, {G,H}).
-% bar(_, _) ->
-% true.
+ % bar(_, _) ->
+ % true.
-% frutt(_) ->
-% frutt().
+ % frutt(_) ->
+ % frutt().
-% frutt() ->
-% true.
-% ">>,
+ % frutt() ->
+ % true.
+ % ">>,
-% ?line ok = file:write_file(File, Test),
-% ?line {ok, depr_r9c} = compile:file(File, [debug_info,{outdir,Dir}]),
+ % ok = file:write_file(File, Test),
+ % {ok, depr_r9c} = compile:file(File, [debug_info,{outdir,Dir}]),
- ?line {ok, _} = xref:start(s),
- ?line {ok, depr_r9c} = xref:add_module(s, MFile_r9c),
+ {ok, _} = xref:start(s),
+ {ok, depr_r9c} = xref:add_module(s, MFile_r9c),
M9 = depr_r9c,
DF_1 = usort([{{M9,f,2},{M9,g,3}}]),
DF_2 = usort(DF_1++[{{M9,f,1},{M9,f,2}},{{M9,t,0},{M9,f,1}}]),
DF_3 = usort(DF_2++[{{M9,g,3},{M9,bar,2}}]),
DF = usort(DF_3++[{{M9,t,0},{M9,f,1}}]),
- ?line {ok,DF} = xref:analyze(s, deprecated_function_calls),
- ?line {ok,DF_1} =
- xref:analyze(s, {deprecated_function_calls,next_version}),
- ?line {ok,DF_2} =
- xref:analyze(s, {deprecated_function_calls,next_major_release}),
- ?line {ok,DF_3} =
- xref:analyze(s, {deprecated_function_calls,eventually}),
+ {ok,DF} = xref:analyze(s, deprecated_function_calls),
+ {ok,DF_1} =
+ xref:analyze(s, {deprecated_function_calls,next_version}),
+ {ok,DF_2} =
+ xref:analyze(s, {deprecated_function_calls,next_major_release}),
+ {ok,DF_3} =
+ xref:analyze(s, {deprecated_function_calls,eventually}),
D = to_external(range(from_term(DF))),
D_1 = to_external(range(from_term(DF_1))),
D_2 = to_external(range(from_term(DF_2))),
D_3 = to_external(range(from_term(DF_3))),
- ?line {ok,D} = xref:analyze(s, deprecated_functions),
- ?line {ok,D_1} =
- xref:analyze(s, {deprecated_functions,next_version}),
- ?line {ok,D_2} =
- xref:analyze(s, {deprecated_functions,next_major_release}),
- ?line {ok,D_3} =
- xref:analyze(s, {deprecated_functions,eventually}),
+ {ok,D} = xref:analyze(s, deprecated_functions),
+ {ok,D_1} =
+ xref:analyze(s, {deprecated_functions,next_version}),
+ {ok,D_2} =
+ xref:analyze(s, {deprecated_functions,next_major_release}),
+ {ok,D_3} =
+ xref:analyze(s, {deprecated_functions,eventually}),
- ?line ok = check_state(s),
- ?line xref:stop(s),
+ ok = check_state(s),
+ xref:stop(s),
Test2= <<"-module(depr).
@@ -1544,11 +1497,11 @@ deprecated(Conf) when is_list(Conf) ->
?MODULE:t().
">>,
- ?line ok = file:write_file(File, Test2),
- ?line {ok, depr} = compile:file(File, [debug_info,{outdir,Dir}]),
+ ok = file:write_file(File, Test2),
+ {ok, depr} = compile:file(File, [debug_info,{outdir,Dir}]),
- ?line {ok, _} = xref:start(s),
- ?line {ok, depr} = xref:add_module(s, MFile),
+ {ok, _} = xref:start(s),
+ {ok, depr} = xref:add_module(s, MFile),
M = depr,
DFa_1 = usort([{{M,f,2},{M,g,3}}]),
@@ -1556,16 +1509,16 @@ deprecated(Conf) when is_list(Conf) ->
DFa_3 = usort(DFa_2++[{{M,bar,2},{M,t,0}},{{M,g,3},{M,bar,2}}]),
DFa = DFa_3,
- ?line {ok,DFa} = xref:analyze(s, deprecated_function_calls),
- ?line {ok,DFa_1} =
- xref:analyze(s, {deprecated_function_calls,next_version}),
- ?line {ok,DFa_2} =
- xref:analyze(s, {deprecated_function_calls,next_major_release}),
- ?line {ok,DFa_3} =
- xref:analyze(s, {deprecated_function_calls,eventually}),
+ {ok,DFa} = xref:analyze(s, deprecated_function_calls),
+ {ok,DFa_1} =
+ xref:analyze(s, {deprecated_function_calls,next_version}),
+ {ok,DFa_2} =
+ xref:analyze(s, {deprecated_function_calls,next_major_release}),
+ {ok,DFa_3} =
+ xref:analyze(s, {deprecated_function_calls,eventually}),
- ?line ok = check_state(s),
- ?line xref:stop(s),
+ ok = check_state(s),
+ xref:stop(s),
%% All of the module is deprecated.
Test3= <<"-module(depr).
@@ -1593,35 +1546,34 @@ deprecated(Conf) when is_list(Conf) ->
?MODULE:t().
">>,
- ?line ok = file:write_file(File, Test3),
- ?line {ok, depr} = compile:file(File, [debug_info,{outdir,Dir}]),
+ ok = file:write_file(File, Test3),
+ {ok, depr} = compile:file(File, [debug_info,{outdir,Dir}]),
- ?line {ok, _} = xref:start(s),
- ?line {ok, depr} = xref:add_module(s, MFile),
+ {ok, _} = xref:start(s),
+ {ok, depr} = xref:add_module(s, MFile),
DFb_1 = usort([{{M,f,2},{M,g,3}}]),
DFb_2 = usort(DFb_1++[{{M,f,1},{M,f,2}},{{M,t,0},{M,f,1}}]),
DFb_3 = DFb_2,
DFb = usort(DFb_2++[{{M,bar,2},{M,t,0}},{{M,g,3},{M,bar,2}}]),
- ?line {ok,DFb} = xref:analyze(s, deprecated_function_calls),
- ?line {ok,DFb_1} =
- xref:analyze(s, {deprecated_function_calls,next_version}),
- ?line {ok,DFb_2} =
- xref:analyze(s, {deprecated_function_calls,next_major_release}),
- ?line {ok,DFb_3} =
- xref:analyze(s, {deprecated_function_calls,eventually}),
+ {ok,DFb} = xref:analyze(s, deprecated_function_calls),
+ {ok,DFb_1} =
+ xref:analyze(s, {deprecated_function_calls,next_version}),
+ {ok,DFb_2} =
+ xref:analyze(s, {deprecated_function_calls,next_major_release}),
+ {ok,DFb_3} =
+ xref:analyze(s, {deprecated_function_calls,eventually}),
- ?line ok = check_state(s),
- ?line xref:stop(s),
+ ok = check_state(s),
+ xref:stop(s),
- ?line ok = file:delete(File),
- ?line ok = file:delete(Beam),
+ ok = file:delete(File),
+ ok = file:delete(Beam),
ok.
-trycatch(suite) -> [];
-trycatch(doc) -> ["OTP-5152: try/catch, final (?) version."];
+%% OTP-5152: try/catch, final (?) version.
trycatch(Conf) when is_list(Conf) ->
Dir = ?copydir,
File = fname(Dir, "trycatch.erl"),
@@ -1645,11 +1597,11 @@ trycatch(Conf) when is_list(Conf) ->
end.
">>,
- ?line ok = file:write_file(File, Test),
- ?line {ok, trycatch} = compile:file(File, [debug_info,{outdir,Dir}]),
+ ok = file:write_file(File, Test),
+ {ok, trycatch} = compile:file(File, [debug_info,{outdir,Dir}]),
- ?line {ok, _} = xref:start(s),
- ?line {ok, trycatch} = xref:add_module(s, MFile),
+ {ok, _} = xref:start(s),
+ {ok, trycatch} = xref:add_module(s, MFile),
A = trycatch,
{ok,[{{{A,A,0},{bar,bar,0}},[10]},
{{{A,A,0},{bar,foo,0}},[8]},
@@ -1658,18 +1610,17 @@ trycatch(Conf) when is_list(Conf) ->
{{{A,A,0},{fini,shed,0}},[15]},
{{{A,A,0},{foo,bar,0}},[7]},
{{{A,A,0},{foo,foo,0}},[9]}]} =
- xref:q(s, "(Lin) (E | trycatch:trycatch/0)"),
+ xref:q(s, "(Lin) (E | trycatch:trycatch/0)"),
- ?line ok = check_state(s),
- ?line xref:stop(s),
+ ok = check_state(s),
+ xref:stop(s),
- ?line ok = file:delete(File),
- ?line ok = file:delete(Beam),
+ ok = file:delete(File),
+ ok = file:delete(Beam),
ok.
-fun_mfa(suite) -> [];
-fun_mfa(doc) -> ["OTP-5653: fun M:F/A."];
+%% OTP-5653: fun M:F/A.
fun_mfa(Conf) when is_list(Conf) ->
Dir = ?copydir,
File = fname(Dir, "fun_mfa.erl"),
@@ -1694,42 +1645,42 @@ fun_mfa(Conf) when is_list(Conf) ->
fun t3/0().
">>,
- ?line ok = file:write_file(File, Test),
+ ok = file:write_file(File, Test),
A = fun_mfa,
- ?line {ok, A} = compile:file(File, [debug_info,{outdir,Dir}]),
- ?line {ok, _} = xref:start(s),
- ?line {ok, A} = xref:add_module(s, MFile, {warnings,false}),
- ?line {ok, [{{{A,t,0},{'$M_EXPR','$F_EXPR',0}},[7]},
- {{{A,t,0},{A,t,0}},[6]},
- {{{A,t1,0},{'$M_EXPR','$F_EXPR',0}},[11]},
- {{{A,t1,0},{A,t,0}},[10]},
- {{{A,t2,0},{A,t,0}},[14]},
- {{{A,t3,0},{fun_mfa,t3,0}},[17]}]} =
- xref:q(s, "(Lin) E"),
-
- ?line ok = check_state(s),
- ?line xref:stop(s),
-
- ?line ok = file:delete(File),
- ?line ok = file:delete(Beam),
+ {ok, A} = compile:file(File, [debug_info,{outdir,Dir}]),
+ {ok, _} = xref:start(s),
+ {ok, A} = xref:add_module(s, MFile, {warnings,false}),
+ {ok, [{{{A,t,0},{'$M_EXPR','$F_EXPR',0}},[7]},
+ {{{A,t,0},{A,t,0}},[6]},
+ {{{A,t1,0},{'$M_EXPR','$F_EXPR',0}},[11]},
+ {{{A,t1,0},{A,t,0}},[10]},
+ {{{A,t2,0},{A,t,0}},[14]},
+ {{{A,t3,0},{fun_mfa,t3,0}},[17]}]} =
+ xref:q(s, "(Lin) E"),
+
+ ok = check_state(s),
+ xref:stop(s),
+
+ ok = file:delete(File),
+ ok = file:delete(Beam),
ok.
%% Same as the previous test case, except that we use a BEAM file
%% that was compiled by an R14 compiler to test backward compatibility.
fun_mfa_r14(Conf) when is_list(Conf) ->
- Dir = ?config(data_dir, Conf),
+ Dir = proplists:get_value(data_dir, Conf),
MFile = fname(Dir, "fun_mfa_r14"),
A = fun_mfa_r14,
{ok, _} = xref:start(s),
{ok, A} = xref:add_module(s, MFile, {warnings,false}),
{ok, [{{{A,t,0},{'$M_EXPR','$F_EXPR',0}},[7]},
- {{{A,t,0},{A,t,0}},[6]},
- {{{A,t1,0},{'$M_EXPR','$F_EXPR',0}},[11]},
- {{{A,t1,0},{A,t,0}},[10]},
- {{{A,t2,0},{A,t,0}},[14]},
- {{{A,t3,0},{A,t3,0}},[17]}]} =
- xref:q(s, "(Lin) E"),
+ {{{A,t,0},{A,t,0}},[6]},
+ {{{A,t1,0},{'$M_EXPR','$F_EXPR',0}},[11]},
+ {{{A,t1,0},{A,t,0}},[10]},
+ {{{A,t2,0},{A,t,0}},[14]},
+ {{{A,t3,0},{A,t3,0}},[17]}]} =
+ xref:q(s, "(Lin) E"),
ok = check_state(s),
xref:stop(s),
@@ -1777,17 +1728,17 @@ fun_mfa_vars(Conf) when is_list(Conf) ->
{ok, _} = xref:start(s),
{ok, A} = xref:add_module(s, MFile, {warnings,false}),
{ok, [{{{A,t,1},{'$M_EXPR','$F_EXPR',2}},[7]},
- {{{A,t,1},{'$M_EXPR',bar,2}},[6]},
- {{{A,t1,1},{'$M_EXPR','$F_EXPR',1}},[11]},
- {{{A,t1,1},{A,'$F_EXPR',1}},[10]},
- {{{A,t2,3},{'$M_EXPR','$F_EXPR',-1}},[14]},
- {{{A,t2,3},{'$M_EXPR','$F_EXPR',1}},[15]},
- {{{A,t3,1},{'$M_EXPR','$F_EXPR',3}},[19]},
- {{{A,t3,1},{fun_mfa_vars,t,-1}},[18]},
- {{{A,t4,2},{'$M_EXPR','$F_EXPR',3}},[22,23]},
- {{{A,t5,2},{'$M_EXPR','$F_EXPR',0}},[27]},
- {{{A,t5,2},{'$M_EXPR',t,-1}},[26]}]} =
- xref:q(s, "(Lin) E"),
+ {{{A,t,1},{'$M_EXPR',bar,2}},[6]},
+ {{{A,t1,1},{'$M_EXPR','$F_EXPR',1}},[11]},
+ {{{A,t1,1},{A,'$F_EXPR',1}},[10]},
+ {{{A,t2,3},{'$M_EXPR','$F_EXPR',-1}},[14]},
+ {{{A,t2,3},{'$M_EXPR','$F_EXPR',1}},[15]},
+ {{{A,t3,1},{'$M_EXPR','$F_EXPR',3}},[19]},
+ {{{A,t3,1},{fun_mfa_vars,t,-1}},[18]},
+ {{{A,t4,2},{'$M_EXPR','$F_EXPR',3}},[22,23]},
+ {{{A,t5,2},{'$M_EXPR','$F_EXPR',0}},[27]},
+ {{{A,t5,2},{'$M_EXPR',t,-1}},[26]}]} =
+ xref:q(s, "(Lin) E"),
ok = check_state(s),
xref:stop(s),
@@ -1796,8 +1747,7 @@ fun_mfa_vars(Conf) when is_list(Conf) ->
ok = file:delete(Beam),
ok.
-qlc(suite) -> [];
-qlc(doc) -> ["OTP-5195: A bug fix when using qlc:q/1,2."];
+%% OTP-5195: A bug fix when using qlc:q/1,2.
qlc(Conf) when is_list(Conf) ->
Dir = ?copydir,
File = fname(Dir, "qlc.erl"),
@@ -1822,32 +1772,31 @@ qlc(Conf) when is_list(Conf) ->
ok.
">>,
- ?line ok = file:write_file(File, Test),
+ ok = file:write_file(File, Test),
A = qlc,
- ?line {ok, A} = compile:file(File, [debug_info,{outdir,Dir}]),
- ?line {ok, _} = xref:start(s),
- ?line {ok, A} = xref:add_module(s, MFile, {warnings,false}),
- ?line {ok, _} = xref:q(s, "(Lin) E"), % is can be loaded
+ {ok, A} = compile:file(File, [debug_info,{outdir,Dir}]),
+ {ok, _} = xref:start(s),
+ {ok, A} = xref:add_module(s, MFile, {warnings,false}),
+ {ok, _} = xref:q(s, "(Lin) E"), % is can be loaded
- ?line ok = check_state(s),
- ?line xref:stop(s),
+ ok = check_state(s),
+ xref:stop(s),
- ?line ok = file:delete(File),
- ?line ok = file:delete(Beam),
+ ok = file:delete(File),
+ ok = file:delete(Beam),
ok.
-analyze(suite) -> [];
-analyze(doc) -> ["Simple analyses"];
+%% Simple analyses
analyze(Conf) when is_list(Conf) ->
S0 = new(),
- ?line {{error, _, {invalid_options,[not_an_option]}}, _} =
- xref_base:analyze(S0, undefined_function_calls, [not_an_option]),
- ?line {{error, _, {invalid_query,{q}}}, _} = xref_base:q(S0,{q}),
- ?line {{error, _, {unknown_analysis,foo}}, _} = xref_base:analyze(S0, foo),
- ?line {{error, _, {unknown_constant,"foo:bar/-1"}}, _} =
- xref_base:analyze(S0, {use,{foo,bar,-1}}),
+ {{error, _, {invalid_options,[not_an_option]}}, _} =
+ xref_base:analyze(S0, undefined_function_calls, [not_an_option]),
+ {{error, _, {invalid_query,{q}}}, _} = xref_base:q(S0,{q}),
+ {{error, _, {unknown_analysis,foo}}, _} = xref_base:analyze(S0, foo),
+ {{error, _, {unknown_constant,"foo:bar/-1"}}, _} =
+ xref_base:analyze(S0, {use,{foo,bar,-1}}),
CopyDir = ?copydir,
Dir = fname(CopyDir,"rel2"),
@@ -1860,57 +1809,50 @@ analyze(Conf) when is_list(Conf) ->
Xbeam = fname(EB2, "x.beam"),
Ybeam = fname(EB1_1, "y.beam"),
- ?line {ok, x} = compile:file(X, [debug_info, {outdir,EB2}]),
- ?line {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
-
- ?line {ok, rel2, S1} = xref_base:add_release(S0, Dir, [{verbose,false}]),
- ?line S = set_up(S1),
-
- ?line {ok, _} =
- analyze(undefined_function_calls, [{{x,xx,0},{x,undef,0}}], S),
- ?line {ok, _} = analyze(undefined_functions, [{x,undef,0}], S),
- ?line {ok, _} = analyze(locals_not_used, [{x,l,0},{x,l1,0}], S),
- ?line {ok, _} = analyze(exports_not_used, [{x,xx,0},{y,t,0}], S),
-
- ?line {ok, _} =
- analyze(deprecated_function_calls, [{{y,t,0},{x,t,0}}], S),
- ?line {ok, _} = analyze({deprecated_function_calls,next_version}, [], S),
- ?line {ok, _} =
- analyze({deprecated_function_calls,next_major_release}, [], S),
- ?line {ok, _} = analyze({deprecated_function_calls,eventually},
- [{{y,t,0},{x,t,0}}], S),
- ?line {ok, _} = analyze(deprecated_functions, [{x,t,0}], S),
- ?line {ok, _} = analyze({deprecated_functions,next_version}, [], S),
- ?line {ok, _} =
- analyze({deprecated_functions,next_major_release}, [], S),
- ?line {ok, _} = analyze({deprecated_functions,eventually}, [{x,t,0}], S),
-
- ?line {ok, _} = analyze({call, {x,xx,0}}, [{x,undef,0}], S),
- ?line {ok, _} =
- analyze({call, [{x,xx,0},{x,l,0}]}, [{x,l1,0},{x,undef,0}], S),
- ?line {ok, _} = analyze({use, {x,l,0}}, [{x,l1,0}], S),
- ?line {ok, _} =
- analyze({use, [{x,l,0},{x,l1,0}]}, [{x,l,0},{x,l1,0}], S),
-
- ?line {ok, _} = analyze({module_call, x}, [x], S),
- ?line {ok, _} = analyze({module_call, [x,y]}, [x], S),
- ?line {ok, _} = analyze({module_use, x}, [x,y], S),
- ?line {ok, _} = analyze({module_use, [x,y]}, [x,y], S),
-
- ?line {ok, _} = analyze({application_call, app1}, [app2], S),
- ?line {ok, _} = analyze({application_call, [app1,app2]}, [app2], S),
- ?line {ok, _} = analyze({application_use, app2}, [app1,app2], S),
- ?line {ok, _} = analyze({application_use, [app1,app2]}, [app1,app2], S),
-
- ?line ok = xref_base:delete(S),
- ?line ok = file:delete(Xbeam),
- ?line ok = file:delete(Ybeam),
+ {ok, x} = compile:file(X, [debug_info, {outdir,EB2}]),
+ {ok, y} = compile:file(Y, [debug_info, {outdir,EB1_1}]),
+
+ {ok, rel2, S1} = xref_base:add_release(S0, Dir, [{verbose,false}]),
+ S = set_up(S1),
+
+ {ok, _} = analyze(undefined_function_calls, [{{x,xx,0},{x,undef,0}}], S),
+ {ok, _} = analyze(undefined_functions, [{x,undef,0}], S),
+ {ok, _} = analyze(locals_not_used, [{x,l,0},{x,l1,0}], S),
+ {ok, _} = analyze(exports_not_used, [{x,xx,0},{y,t,0}], S),
+
+ {ok, _} = analyze(deprecated_function_calls, [{{y,t,0},{x,t,0}}], S),
+ {ok, _} = analyze({deprecated_function_calls,next_version}, [], S),
+ {ok, _} = analyze({deprecated_function_calls,next_major_release}, [], S),
+ {ok, _} = analyze({deprecated_function_calls,eventually},
+ [{{y,t,0},{x,t,0}}], S),
+ {ok, _} = analyze(deprecated_functions, [{x,t,0}], S),
+ {ok, _} = analyze({deprecated_functions,next_version}, [], S),
+ {ok, _} = analyze({deprecated_functions,next_major_release}, [], S),
+ {ok, _} = analyze({deprecated_functions,eventually}, [{x,t,0}], S),
+
+ {ok, _} = analyze({call, {x,xx,0}}, [{x,undef,0}], S),
+ {ok, _} = analyze({call, [{x,xx,0},{x,l,0}]}, [{x,l1,0},{x,undef,0}], S),
+ {ok, _} = analyze({use, {x,l,0}}, [{x,l1,0}], S),
+ {ok, _} = analyze({use, [{x,l,0},{x,l1,0}]}, [{x,l,0},{x,l1,0}], S),
+
+ {ok, _} = analyze({module_call, x}, [x], S),
+ {ok, _} = analyze({module_call, [x,y]}, [x], S),
+ {ok, _} = analyze({module_use, x}, [x,y], S),
+ {ok, _} = analyze({module_use, [x,y]}, [x,y], S),
+
+ {ok, _} = analyze({application_call, app1}, [app2], S),
+ {ok, _} = analyze({application_call, [app1,app2]}, [app2], S),
+ {ok, _} = analyze({application_use, app2}, [app1,app2], S),
+ {ok, _} = analyze({application_use, [app1,app2]}, [app1,app2], S),
+
+ ok = xref_base:delete(S),
+ ok = file:delete(Xbeam),
+ ok = file:delete(Ybeam),
ok.
-basic(suite) -> [];
-basic(doc) -> ["Use of operators"];
+%% Use of operators
basic(Conf) when is_list(Conf) ->
- ?line S0 = new(),
+ S0 = new(),
F1 = {m1,f1,1},
F6 = {m1,f2,6}, % X
@@ -1944,8 +1886,8 @@ basic(Conf) when is_list(Conf) ->
LCallAt_m1 = [{E7,12}],
XCallAt_m1 = [{E1,13},{E2,17},{E4,7}],
Info1 = #xref_mod{name = m1, app_name = [a1]},
- ?line S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
- XC_m1, LC_m1),
+ S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
+ XC_m1, LC_m1),
D2 = {F2,7},
D3 = {F3,9},
@@ -1958,8 +1900,8 @@ basic(Conf) when is_list(Conf) ->
LCallAt_m2 = [],
XCallAt_m2 = [{E3,96},{E6,12},{UE1,77}],
Info2 = #xref_mod{name = m2, app_name = [a2]},
- ?line S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
- XC_m2, LC_m2),
+ S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
+ XC_m2, LC_m2),
D4 = {F4,6},
D5 = {F5,97},
@@ -1971,186 +1913,185 @@ basic(Conf) when is_list(Conf) ->
LCallAt_m3 = [{E5,19}],
XCallAt_m3 = [{UE2,22}],
Info3 = #xref_mod{name = m3, app_name = [a3]},
- ?line S3 = add_module(S2, Info3, DefAt_m3, X_m3, LCallAt_m3, XCallAt_m3,
- XC_m3, LC_m3),
+ S3 = add_module(S2, Info3, DefAt_m3, X_m3, LCallAt_m3, XCallAt_m3,
+ XC_m3, LC_m3),
Info4 = #xref_mod{name = m4, app_name = [a2]},
- ?line S4 = add_module(S3, Info4, [], [], [], [], [], []),
+ S4 = add_module(S3, Info4, [], [], [], [], [], []),
AppInfo1 = #xref_app{name = a1, rel_name = [r1]},
- ?line S9 = add_application(S4, AppInfo1),
+ S9 = add_application(S4, AppInfo1),
AppInfo2 = #xref_app{name = a2, rel_name = [r1]},
- ?line S10 = add_application(S9, AppInfo2),
+ S10 = add_application(S9, AppInfo2),
AppInfo3 = #xref_app{name = a3, rel_name = [r2]},
- ?line S11 = add_application(S10, AppInfo3),
+ S11 = add_application(S10, AppInfo3),
RelInfo1 = #xref_rel{name = r1},
- ?line S12 = add_release(S11, RelInfo1),
+ S12 = add_release(S11, RelInfo1),
RelInfo2 = #xref_rel{name = r2},
- ?line S13 = add_release(S12, RelInfo2),
+ S13 = add_release(S12, RelInfo2),
- ?line S = set_up(S13),
+ S = set_up(S13),
- ?line {ok, _} = eval("[m1,m2] + m:f/1", unknown_constant, S),
- ?line {ok, _} = eval("[m1, m2, m:f/1]", type_mismatch, S),
+ {ok, _} = eval("[m1,m2] + m:f/1", unknown_constant, S),
+ {ok, _} = eval("[m1, m2, m:f/1]", type_mismatch, S),
- ?line {ok, _} = eval("[m1, m1->m2]", type_mismatch, S),
- ?line {ok, _} = eval("components:f/1", unknown_constant, S),
- ?line {ok, _} = eval("'of':f/1", unknown_constant, S),
- ?line {ok, _} = eval("of:f/1", parse_error, S),
- ?line {ok, _} = eval("components", unknown_constant, S),
- ?line {ok, _} = eval("[components, of, closure]", parse_error, S),
- ?line {ok, _} = eval("[components, 'of', closure]", unknown_constant, S),
+ {ok, _} = eval("[m1, m1->m2]", type_mismatch, S),
+ {ok, _} = eval("components:f/1", unknown_constant, S),
+ {ok, _} = eval("'of':f/1", unknown_constant, S),
+ {ok, _} = eval("of:f/1", parse_error, S),
+ {ok, _} = eval("components", unknown_constant, S),
+ {ok, _} = eval("[components, of, closure]", parse_error, S),
+ {ok, _} = eval("[components, 'of', closure]", unknown_constant, S),
- ?line {ok, _} = eval("[a1->a2,m1->m2]", type_mismatch, S),
- ?line {ok, _} = eval("a1->a2,m1->m2", parse_error, S),
+ {ok, _} = eval("[a1->a2,m1->m2]", type_mismatch, S),
+ {ok, _} = eval("a1->a2,m1->m2", parse_error, S),
- ?line {ok, _} = eval("m1->a1", type_mismatch, S),
- ?line {ok, _} = eval("[{m1,f1,1}] : App", parse_error, S),
- ?line {ok, _} = eval("[{m1,f1,1}] : Fun", [F1], S),
- ?line {ok, _} = eval("range X", type_error, S),
- ?line {ok, _} = eval("domain X", type_error, S),
- ?line {ok, _} = eval("range M", type_error, S),
- ?line {ok, _} = eval("domain M", type_error, S),
+ {ok, _} = eval("m1->a1", type_mismatch, S),
+ {ok, _} = eval("[{m1,f1,1}] : App", parse_error, S),
+ {ok, _} = eval("[{m1,f1,1}] : Fun", [F1], S),
+ {ok, _} = eval("range X", type_error, S),
+ {ok, _} = eval("domain X", type_error, S),
+ {ok, _} = eval("range M", type_error, S),
+ {ok, _} = eval("domain M", type_error, S),
% Misc.
- ?line {ok, _} = eval("not_a_prefix_operator m1", parse_error, S),
- ?line {ok, _} = eval(f("(Mod) ~p", [[F1,F6,F5]]), [m1,m3], S),
- ?line {ok, _} = eval("(Lin) M - (Lin) m1",
- [{F2,7},{F3,9},{F7,19},{F4,6},{F5,97},{UF2,0}], S),
- ?line {ok, _} = eval(f("(Lin) M * (Lin) ~p", [[F1,F6]]),
- [{F1,12},{F6,3}], S),
-
- ?line {ok, _} = eval(f("X * ~p", [[F1, F2, F3, F4, F5]]), [F3, F4], S),
- ?line {ok, _} = eval("X", [F6,F3,F7,F4], S),
- ?line {ok, _} = eval("X * AM", [F6,F3,F7,F4], S),
- ?line {ok, _} = eval("X * a2", [F3,F7], S),
-
- ?line {ok, _} = eval("L * r1", [F1,F2], S),
- ?line {ok, _} = eval("U", [UF1, UF2], S),
- ?line {ok, _} = eval("U * AM", [UF1], S),
- ?line {ok, _} = eval("U * UM", [UF2], S),
- ?line {ok, _} = eval("XU * [m1, m2]", [F6,F3,F7,UF1], S),
- ?line {ok, _} = eval("LU * [m3, m4]", [F5], S),
- ?line {ok, _} = eval("UU", [F1,F2], S),
-
- ?line {ok, _} = eval("XC | m1", [E1,E2,E4], S),
- ?line {ok, _} = eval(f("XC | ~p", [F1]), [E1,E4], S),
- ?line {ok, _} = eval(f("(XXL) (Lin) (XC | ~p)", [F1]),
- [{{D1,D3},[13]},{{D1,D4},[7]}],S),
- ?line {ok, _} = eval(f("XC | (~p + ~p)", [F1, F2]), [E1,E4,E3,UE1], S),
- ?line {ok, _} = eval(f("(XXL) (Lin) (XC | ~p)", [F1]),
- [{{D1,D3},[13]},{{D1,D4},[7]}], S),
- ?line {ok, _} = eval("LC | m3", [E5], S),
- ?line {ok, _} = eval(f("LC | ~p", [F1]), [E7], S),
- ?line {ok, _} = eval(f("LC | (~p + ~p)", [F1, F4]), [E7, E5], S),
- ?line {ok, _} = eval("E | m1", [E1,E2,E4,E7], S),
- ?line {ok, _} = eval(f("E | ~p", [F1]), [E1,E7,E4], S),
- ?line {ok, _} = eval(f("E | (~p + ~p)", [F1, F2]), [E1,E7,E4,E3,UE1], S),
-
- ?line {ok, _} = eval("XC || m1", [E3,UE2], S),
- ?line {ok, _} = eval(f("XC || ~p", [F6]), [E3], S),
- ?line {ok, _} = eval(f("XC || (~p + ~p)", [F4, UF2]), [UE1,E4,E6], S),
- ?line {ok, _} = eval("LC || m3", [E5], S),
- ?line {ok, _} = eval(f("LC || ~p", [F1]), [], S),
- ?line {ok, _} = eval(f("LC || ~p", [F6]), [E7], S),
- ?line {ok, _} = eval(f("LC || (~p + ~p)", [F5, F6]), [E7,E5], S),
- ?line {ok, _} = eval("E || m1", [E3,UE2,E7], S),
- ?line {ok, _} = eval(f("E || ~p", [F6]), [E3,E7], S),
- ?line {ok, _} = eval(f("E || (~p + ~p)", [F3,F4]), [E1,E4,E6], S),
-
- ?line {ok, _} = eval(f("~p + ~p", [F1,F2]), [F1,F2], S),
- ?line {ok, _} = eval(f("~p * ~p", [m1,[F1,F6,F2]]), [F1,F6], S),
- ?line {ok, _} = eval(f("~p * ~p", [F1,F2]), [], S),
+ {ok, _} = eval("not_a_prefix_operator m1", parse_error, S),
+ {ok, _} = eval(f("(Mod) ~p", [[F1,F6,F5]]), [m1,m3], S),
+ {ok, _} = eval("(Lin) M - (Lin) m1",
+ [{F2,7},{F3,9},{F7,19},{F4,6},{F5,97},{UF2,0}], S),
+ {ok, _} = eval(f("(Lin) M * (Lin) ~p", [[F1,F6]]),
+ [{F1,12},{F6,3}], S),
+
+ {ok, _} = eval(f("X * ~p", [[F1, F2, F3, F4, F5]]), [F3, F4], S),
+ {ok, _} = eval("X", [F6,F3,F7,F4], S),
+ {ok, _} = eval("X * AM", [F6,F3,F7,F4], S),
+ {ok, _} = eval("X * a2", [F3,F7], S),
+
+ {ok, _} = eval("L * r1", [F1,F2], S),
+ {ok, _} = eval("U", [UF1, UF2], S),
+ {ok, _} = eval("U * AM", [UF1], S),
+ {ok, _} = eval("U * UM", [UF2], S),
+ {ok, _} = eval("XU * [m1, m2]", [F6,F3,F7,UF1], S),
+ {ok, _} = eval("LU * [m3, m4]", [F5], S),
+ {ok, _} = eval("UU", [F1,F2], S),
+
+ {ok, _} = eval("XC | m1", [E1,E2,E4], S),
+ {ok, _} = eval(f("XC | ~p", [F1]), [E1,E4], S),
+ {ok, _} = eval(f("(XXL) (Lin) (XC | ~p)", [F1]),
+ [{{D1,D3},[13]},{{D1,D4},[7]}],S),
+ {ok, _} = eval(f("XC | (~p + ~p)", [F1, F2]), [E1,E4,E3,UE1], S),
+ {ok, _} = eval(f("(XXL) (Lin) (XC | ~p)", [F1]),
+ [{{D1,D3},[13]},{{D1,D4},[7]}], S),
+ {ok, _} = eval("LC | m3", [E5], S),
+ {ok, _} = eval(f("LC | ~p", [F1]), [E7], S),
+ {ok, _} = eval(f("LC | (~p + ~p)", [F1, F4]), [E7, E5], S),
+ {ok, _} = eval("E | m1", [E1,E2,E4,E7], S),
+ {ok, _} = eval(f("E | ~p", [F1]), [E1,E7,E4], S),
+ {ok, _} = eval(f("E | (~p + ~p)", [F1, F2]), [E1,E7,E4,E3,UE1], S),
+
+ {ok, _} = eval("XC || m1", [E3,UE2], S),
+ {ok, _} = eval(f("XC || ~p", [F6]), [E3], S),
+ {ok, _} = eval(f("XC || (~p + ~p)", [F4, UF2]), [UE1,E4,E6], S),
+ {ok, _} = eval("LC || m3", [E5], S),
+ {ok, _} = eval(f("LC || ~p", [F1]), [], S),
+ {ok, _} = eval(f("LC || ~p", [F6]), [E7], S),
+ {ok, _} = eval(f("LC || (~p + ~p)", [F5, F6]), [E7,E5], S),
+ {ok, _} = eval("E || m1", [E3,UE2,E7], S),
+ {ok, _} = eval(f("E || ~p", [F6]), [E3,E7], S),
+ {ok, _} = eval(f("E || (~p + ~p)", [F3,F4]), [E1,E4,E6], S),
+
+ {ok, _} = eval(f("~p + ~p", [F1,F2]), [F1,F2], S),
+ {ok, _} = eval(f("~p * ~p", [m1,[F1,F6,F2]]), [F1,F6], S),
+ {ok, _} = eval(f("~p * ~p", [F1,F2]), [], S),
%% range, domain
- ?line {ok, _} = eval("range (E || m1)", [F6,UF1], S),
- ?line {ok, _} = eval("domain (E || m1)", [F1,F2,F5], S),
- ?line {ok, _} = eval(f("E | domain ~p", [[E1, {F2,F4}]]),
- [E1,E7,E4,E3,UE1], S),
+ {ok, _} = eval("range (E || m1)", [F6,UF1], S),
+ {ok, _} = eval("domain (E || m1)", [F1,F2,F5], S),
+ {ok, _} = eval(f("E | domain ~p", [[E1, {F2,F4}]]),
+ [E1,E7,E4,E3,UE1], S),
%% components, condensation, use, call
- ?line {ok, _} = eval("(Lin) components E", type_error, S),
- ?line {ok, _} = eval("components (Lin) E", type_error, S),
- ?line {ok, _} = eval("components V", type_error, S),
- ?line {ok, _} = eval("components E + components E", type_error, S),
-
- ?line {ok, _} = eval(f("range (closure E | ~p)", [[F1,F2]]),
- [F6,F3,F7,F4,F5,UF1,UF2], S),
- ?line {ok, _} =
- eval(f("domain (closure E || ~p)", [[UF2,F7]]), [F1,F2,F6], S),
- ?line {ok, _} = eval("components E", [], S),
- ?line {ok, _} = eval("components (Mod) E", [[m1,m2,m3]], S),
- ?line {ok, _} = eval("components closure (Mod) E", [[m1,m2,m3]], S),
- ?line {ok, _} = eval("condensation (Mod) E",
- [{[m1,m2,m3],[m17]}], S),
- ?line {ok, _} = eval("condensation closure (Mod) E",
- [{[m1,m2,m3],[m17]}], S),
- ?line {ok, _} = eval("condensation closure closure closure (Mod) E",
- [{[m1,m2,m3],[m17]}], S),
- ?line {ok, _} = eval("weak condensation (Mod) E",
- [{[m1,m2,m3],[m1,m2,m3]},{[m1,m2,m3],[m17]},{[m17],[m17]}], S),
- ?line {ok, _} = eval("strict condensation (Mod) E",
- [{[m1,m2,m3],[m17]}], S),
- ?line {ok, _} = eval("range condensation (Mod) E",
- [[m17]], S),
- ?line {ok, _} = eval("domain condensation (Mod) E",
- [[m1,m2,m3]], S),
+ {ok, _} = eval("(Lin) components E", type_error, S),
+ {ok, _} = eval("components (Lin) E", type_error, S),
+ {ok, _} = eval("components V", type_error, S),
+ {ok, _} = eval("components E + components E", type_error, S),
+
+ {ok, _} = eval(f("range (closure E | ~p)", [[F1,F2]]),
+ [F6,F3,F7,F4,F5,UF1,UF2], S),
+ {ok, _} =
+ eval(f("domain (closure E || ~p)", [[UF2,F7]]), [F1,F2,F6], S),
+ {ok, _} = eval("components E", [], S),
+ {ok, _} = eval("components (Mod) E", [[m1,m2,m3]], S),
+ {ok, _} = eval("components closure (Mod) E", [[m1,m2,m3]], S),
+ {ok, _} = eval("condensation (Mod) E",
+ [{[m1,m2,m3],[m17]}], S),
+ {ok, _} = eval("condensation closure (Mod) E",
+ [{[m1,m2,m3],[m17]}], S),
+ {ok, _} = eval("condensation closure closure closure (Mod) E",
+ [{[m1,m2,m3],[m17]}], S),
+ {ok, _} = eval("weak condensation (Mod) E",
+ [{[m1,m2,m3],[m1,m2,m3]},{[m1,m2,m3],[m17]},{[m17],[m17]}], S),
+ {ok, _} = eval("strict condensation (Mod) E",
+ [{[m1,m2,m3],[m17]}], S),
+ {ok, _} = eval("range condensation (Mod) E",
+ [[m17]], S),
+ {ok, _} = eval("domain condensation (Mod) E",
+ [[m1,m2,m3]], S),
%% |, ||, |||
- ?line {ok, _} = eval("(Lin) E || V", type_error, S),
- ?line {ok, _} = eval("E ||| (Lin) V", type_error, S),
- ?line {ok, _} = eval("E ||| m1", [E7], S),
- ?line {ok, _} = eval("closure E ||| m1", [E7,{F1,UF1},{F6,UF1}], S),
- ?line {ok, _} = eval("closure E ||| [m1,m2]",
- [{F1,UF1},{F2,F7},{F1,F7},{F6,UF1},{F2,UF1},{F7,UF1},E7,E1,E2,E3], S),
- ?line {ok, _} = eval("AE | a1", [{a1,a1},{a1,a2},{a1,a3}], S),
+ {ok, _} = eval("(Lin) E || V", type_error, S),
+ {ok, _} = eval("E ||| (Lin) V", type_error, S),
+ {ok, _} = eval("E ||| m1", [E7], S),
+ {ok, _} = eval("closure E ||| m1", [E7,{F1,UF1},{F6,UF1}], S),
+ {ok, _} = eval("closure E ||| [m1,m2]",
+ [{F1,UF1},{F2,F7},{F1,F7},{F6,UF1},{F2,UF1},{F7,UF1},E7,E1,E2,E3], S),
+ {ok, _} = eval("AE | a1", [{a1,a1},{a1,a2},{a1,a3}], S),
%% path ('of')
- ?line {ok, _} = eval("(Lin) {m1,m2} of E", type_error, S),
- ?line {ok, _} = eval("{m1,m2} of (Lin) E", type_error, S),
- ?line [m1,m2] = eval("{m1,m2} of {m1,m2}", S),
- ?line {ok, _} = eval("{m1,m2} of m1", type_error, S),
- ?line {ok, _} = eval("{a3,m1} of ME", type_mismatch, S),
- ?line [m1,m1] = eval("{m1} of ME", S),
- ?line [m1,m1] = eval("{m1} of closure closure ME", S),
- ?line false = eval("{m17} of ME", S),
- ?line [m2,m1,m2] = eval("{m2} : Mod of ME", S),
- ?line [m1,m2,m17] = eval("{m1, m17} of ME", S),
- ?line [m1,m2,m17] = eval("m1 -> m17 of ME", S),
- ?line {ok, _} = eval("[m1->m17,m17->m1] of ME", type_error, S),
- ?line case eval(f("~p of E", [{F1,F7,UF1}]), S) of
- [F1,F6,F7,F4,F5,UF1] -> ok
- end,
- ?line [a2,a1,a2] = eval("{a2} of AE", S),
+ {ok, _} = eval("(Lin) {m1,m2} of E", type_error, S),
+ {ok, _} = eval("{m1,m2} of (Lin) E", type_error, S),
+ [m1,m2] = eval("{m1,m2} of {m1,m2}", S),
+ {ok, _} = eval("{m1,m2} of m1", type_error, S),
+ {ok, _} = eval("{a3,m1} of ME", type_mismatch, S),
+ [m1,m1] = eval("{m1} of ME", S),
+ [m1,m1] = eval("{m1} of closure closure ME", S),
+ false = eval("{m17} of ME", S),
+ [m2,m1,m2] = eval("{m2} : Mod of ME", S),
+ [m1,m2,m17] = eval("{m1, m17} of ME", S),
+ [m1,m2,m17] = eval("m1 -> m17 of ME", S),
+ {ok, _} = eval("[m1->m17,m17->m1] of ME", type_error, S),
+ case eval(f("~p of E", [{F1,F7,UF1}]), S) of
+ [F1,F6,F7,F4,F5,UF1] -> ok
+ end,
+ [a2,a1,a2] = eval("{a2} of AE", S),
%% weak/strict
- ?line {ok, _} = eval("weak {m1,m2}", [{m1,m1},{m1,m2},{m2,m2}], S),
- ?line {ok, _} = eval("strict [{m1,m1},{m1,m2},{m2,m2}]", [{m1,m2}], S),
- ?line {ok, _} = eval("range weak [{m1,m2}] : Mod", [m1,m2], S),
- ?line {ok, _} = eval("domain strict [{m1,m1},{m1,m2},{m2,m2}]", [m1], S),
+ {ok, _} = eval("weak {m1,m2}", [{m1,m1},{m1,m2},{m2,m2}], S),
+ {ok, _} = eval("strict [{m1,m1},{m1,m2},{m2,m2}]", [{m1,m2}], S),
+ {ok, _} = eval("range weak [{m1,m2}] : Mod", [m1,m2], S),
+ {ok, _} = eval("domain strict [{m1,m1},{m1,m2},{m2,m2}]", [m1], S),
%% #, number of
- ?line {ok, _} = eval("# [{r1,r2}] : Rel", 1, S),
- ?line {ok, _} = eval("# [{a3,a1}] : App", 1, S),
- ?line {ok, _} = eval("# AE", 7, S),
- ?line {ok, _} = eval("# ME", 8, S),
- ?line {ok, _} = eval("# AE + # ME", 15, S),
- ?line {ok, _} = eval("# AE * # ME", 56, S),
- ?line {ok, _} = eval("# AE - # ME", -1, S),
- ?line {ok, _} = eval("# E", 9, S),
- ?line {ok, _} = eval("# V", 9, S),
- ?line {ok, _} = eval("# (Lin) E", 9, S),
- ?line {ok, _} = eval("# (ELin) E", 7, S),
- ?line {ok, _} = eval("# closure E", type_error, S),
- ?line {ok, _} = eval("# weak {m1,m2}", 3, S),
- ?line {ok, _} = eval("#strict condensation (Mod) E", 1, S),
- ?line {ok, _} = eval("#components closure (Mod) E", 1, S),
- ?line {ok, _} = eval("# range strict condensation (Mod) E", 1, S),
+ {ok, _} = eval("# [{r1,r2}] : Rel", 1, S),
+ {ok, _} = eval("# [{a3,a1}] : App", 1, S),
+ {ok, _} = eval("# AE", 7, S),
+ {ok, _} = eval("# ME", 8, S),
+ {ok, _} = eval("# AE + # ME", 15, S),
+ {ok, _} = eval("# AE * # ME", 56, S),
+ {ok, _} = eval("# AE - # ME", -1, S),
+ {ok, _} = eval("# E", 9, S),
+ {ok, _} = eval("# V", 9, S),
+ {ok, _} = eval("# (Lin) E", 9, S),
+ {ok, _} = eval("# (ELin) E", 7, S),
+ {ok, _} = eval("# closure E", type_error, S),
+ {ok, _} = eval("# weak {m1,m2}", 3, S),
+ {ok, _} = eval("#strict condensation (Mod) E", 1, S),
+ {ok, _} = eval("#components closure (Mod) E", 1, S),
+ {ok, _} = eval("# range strict condensation (Mod) E", 1, S),
ok.
-md(suite) -> [];
-md(doc) -> ["The xref:m() and xref:d() functions"];
+%% The xref:m() and xref:d() functions
md(Conf) when is_list(Conf) ->
CopyDir = ?copydir,
Dir = fname(CopyDir,"md"),
@@ -2159,63 +2100,61 @@ md(Conf) when is_list(Conf) ->
Xbeam = fname(Dir, "x__x.beam"),
Ybeam = fname(Dir, "y__y.beam"),
- ?line {error, _, {invalid_filename,{foo,bar}}} = xref:m({foo,bar}),
- ?line {error, _, {invalid_filename,{foo,bar}}} = xref:d({foo,bar}),
+ {error, _, {invalid_filename,{foo,bar}}} = xref:m({foo,bar}),
+ {error, _, {invalid_filename,{foo,bar}}} = xref:d({foo,bar}),
- ?line {ok, x__x} = compile:file(X, [debug_info, {outdir,Dir}]),
- ?line {ok, y__y} = compile:file(Y, [debug_info, {outdir,Dir}]),
+ {ok, x__x} = compile:file(X, [debug_info, {outdir,Dir}]),
+ {ok, y__y} = compile:file(Y, [debug_info, {outdir,Dir}]),
- ?line {error, _, {no_such_module, foo_bar}} = xref:m(foo_bar),
- ?line OldPath = code:get_path(),
- ?line true = code:set_path([Dir | OldPath]),
- ?line MInfo = xref:m(x__x),
- ?line [{{x__x,t,1},{y__y,t,2}}] = info_tag(MInfo, undefined),
- ?line [] = info_tag(MInfo, unused),
- ?line [] = info_tag(MInfo, deprecated),
- ?line DInfo = xref:d(Dir),
- ?line [{{x__x,t,1},{y__y,t,2}}] = info_tag(DInfo, undefined),
- ?line [{y__y,l,0},{y__y,l1,0}] = info_tag(DInfo, unused),
- ?line [] = info_tag(MInfo, deprecated),
+ {error, _, {no_such_module, foo_bar}} = xref:m(foo_bar),
+ OldPath = code:get_path(),
+ true = code:set_path([Dir | OldPath]),
+ MInfo = xref:m(x__x),
+ [{{x__x,t,1},{y__y,t,2}}] = info_tag(MInfo, undefined),
+ [] = info_tag(MInfo, unused),
+ [] = info_tag(MInfo, deprecated),
+ DInfo = xref:d(Dir),
+ [{{x__x,t,1},{y__y,t,2}}] = info_tag(DInfo, undefined),
+ [{y__y,l,0},{y__y,l1,0}] = info_tag(DInfo, unused),
+ [] = info_tag(MInfo, deprecated),
%% Switch from 'functions' mode to 'modules' mode.
- ?line {ok, x__x} = compile:file(X, [no_debug_info, {outdir,Dir}]),
- ?line {ok, y__y} = compile:file(Y, [no_debug_info, {outdir,Dir}]),
- ?line MInfoMod = xref:m(x__x),
- ?line [{y__y,t,2}] = info_tag(MInfoMod, undefined),
- ?line [] = info_tag(MInfo, deprecated),
- ?line DInfoMod = xref:d(Dir),
- ?line [{y__y,t,2}] = info_tag(DInfoMod, undefined),
- ?line [] = info_tag(MInfo, deprecated),
-
- ?line true = code:set_path(OldPath),
- ?line ok = file:delete(Xbeam),
- ?line ok = file:delete(Ybeam),
+ {ok, x__x} = compile:file(X, [no_debug_info, {outdir,Dir}]),
+ {ok, y__y} = compile:file(Y, [no_debug_info, {outdir,Dir}]),
+ MInfoMod = xref:m(x__x),
+ [{y__y,t,2}] = info_tag(MInfoMod, undefined),
+ [] = info_tag(MInfo, deprecated),
+ DInfoMod = xref:d(Dir),
+ [{y__y,t,2}] = info_tag(DInfoMod, undefined),
+ [] = info_tag(MInfo, deprecated),
+
+ true = code:set_path(OldPath),
+ ok = file:delete(Xbeam),
+ ok = file:delete(Ybeam),
ok.
-q(suite) -> [];
-q(doc) -> ["User queries"];
+%% User queries
q(Conf) when is_list(Conf) ->
- ?line S0 = new(),
- ?line {ok, _} = eval("'foo", parse_error, S0),
- ?line {ok, _} = eval("TT = E, TT = V", variable_reassigned, S0),
- ?line {ok, _} = eval("TT = E, TTT", unknown_variable, S0),
- ?line {ok, S} = eval("TT := E", [], S0),
- ?line {ok, S1} = eval("TT * TT * TT", [], S),
- ?line {ok, _S2} = xref_base:forget(S1, 'TT'),
+ S0 = new(),
+ {ok, _} = eval("'foo", parse_error, S0),
+ {ok, _} = eval("TT = E, TT = V", variable_reassigned, S0),
+ {ok, _} = eval("TT = E, TTT", unknown_variable, S0),
+ {ok, S} = eval("TT := E", [], S0),
+ {ok, S1} = eval("TT * TT * TT", [], S),
+ {ok, _S2} = xref_base:forget(S1, 'TT'),
ok.
-variables(suite) -> [];
-variables(doc) -> ["Setting and getting values of query variables"];
+%% Setting and getting values of query variables
variables(Conf) when is_list(Conf) ->
- ?line Sa = new(),
- ?line {{error, _, {invalid_options,[not_an_option]}}, _} =
- xref_base:variables(Sa, [not_an_option]),
- ?line {error, _, {not_user_variable,foo}} = xref_base:forget(Sa, foo),
- ?line Sa1 = set_up(Sa),
- ?line {error, _, {not_user_variable,foo}} = xref_base:forget(Sa1, foo),
- ?line ok = xref_base:delete(Sa1),
+ Sa = new(),
+ {{error, _, {invalid_options,[not_an_option]}}, _} =
+ xref_base:variables(Sa, [not_an_option]),
+ {error, _, {not_user_variable,foo}} = xref_base:forget(Sa, foo),
+ Sa1 = set_up(Sa),
+ {error, _, {not_user_variable,foo}} = xref_base:forget(Sa1, foo),
+ ok = xref_base:delete(Sa1),
- ?line S0 = new(),
+ S0 = new(),
F1 = {m1,f1,1},
F2 = {m2,f1,2},
@@ -2234,8 +2173,8 @@ variables(Conf) when is_list(Conf) ->
LCallAt_m1 = [],
XCallAt_m1 = [{E1,13},{E3,17}],
Info1 = #xref_mod{name = m1, app_name = [a1]},
- ?line S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
- XC_m1, LC_m1),
+ S1 = add_module(S0, Info1, DefAt_m1, X_m1, LCallAt_m1, XCallAt_m1,
+ XC_m1, LC_m1),
D2 = {F2,7},
DefAt_m2 = [D2],
@@ -2246,66 +2185,65 @@ variables(Conf) when is_list(Conf) ->
LCallAt_m2 = [],
XCallAt_m2 = [{E2,96}],
Info2 = #xref_mod{name = m2, app_name = [a2]},
- ?line S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
- XC_m2, LC_m2),
-
- ?line S = set_up(S2),
-
- ?line eval("T1=E, T2=E*T1, T3 = T2*T2, T4=range T3, T5=T3|T4, T5",
- [E1,E2,E3], S),
- ?line eval("((E*E)*(E*E)) | (range ((E*E)*(E*E)))",
- [E1,E2,E3], S),
- ?line eval("T1=V*V,T2=T1*V,T3=V*V*V,T3",
- [F1,F2,Lib], S),
- ?line eval("T1=V*V, T2=V*V, T1*T2",
- [F1,F2,Lib], S),
-
- ?line {ok, S100} = eval("T0 := E", [E1, E2, E3], S),
- ?line {ok, S101} = eval("T1 := E | m1", [E1, E3], S100),
- ?line {ok, S102} = eval("T2 := E | m2", [E2], S101),
- ?line {{ok, [{user, ['T0', 'T1', 'T2']}]}, _} = xref_base:variables(S102),
- ?line {ok, S103} = xref_base:forget(S102, 'T0'),
- ?line {{ok, [{user, ['T1', 'T2']}]}, S104} =
- xref_base:variables(S103, [user]),
- ?line {ok, S105} = xref_base:forget(S104),
- ?line {{ok, [{user, []}]}, S106} = xref_base:variables(S105),
- ?line {{ok, [{predefined,_}]}, S107_0} =
- xref_base:variables(S106, [predefined]),
-
- ?line {ok, S107_1} =
- eval("TT := E, TT2 := V, TT1 := TT * TT", [E1,E2,E3], S107_0),
- ?line {{ok, [{user, ['TT', 'TT1', 'TT2']}]}, _} =
- xref_base:variables(S107_1),
- ?line {ok, S107} = xref_base:forget(S107_1),
+ S2 = add_module(S1, Info2, DefAt_m2, X_m2, LCallAt_m2, XCallAt_m2,
+ XC_m2, LC_m2),
+
+ S = set_up(S2),
+
+ eval("T1=E, T2=E*T1, T3 = T2*T2, T4=range T3, T5=T3|T4, T5",
+ [E1,E2,E3], S),
+ eval("((E*E)*(E*E)) | (range ((E*E)*(E*E)))",
+ [E1,E2,E3], S),
+ eval("T1=V*V,T2=T1*V,T3=V*V*V,T3",
+ [F1,F2,Lib], S),
+ eval("T1=V*V, T2=V*V, T1*T2",
+ [F1,F2,Lib], S),
+
+ {ok, S100} = eval("T0 := E", [E1, E2, E3], S),
+ {ok, S101} = eval("T1 := E | m1", [E1, E3], S100),
+ {ok, S102} = eval("T2 := E | m2", [E2], S101),
+ {{ok, [{user, ['T0', 'T1', 'T2']}]}, _} = xref_base:variables(S102),
+ {ok, S103} = xref_base:forget(S102, 'T0'),
+ {{ok, [{user, ['T1', 'T2']}]}, S104} =
+ xref_base:variables(S103, [user]),
+ {ok, S105} = xref_base:forget(S104),
+ {{ok, [{user, []}]}, S106} = xref_base:variables(S105),
+ {{ok, [{predefined,_}]}, S107_0} =
+ xref_base:variables(S106, [predefined]),
+
+ {ok, S107_1} =
+ eval("TT := E, TT2 := V, TT1 := TT * TT", [E1,E2,E3], S107_0),
+ {{ok, [{user, ['TT', 'TT1', 'TT2']}]}, _} =
+ xref_base:variables(S107_1),
+ {ok, S107} = xref_base:forget(S107_1),
CopyDir = ?copydir,
- ?line Dir = fname(CopyDir,"lib_test"),
+ Dir = fname(CopyDir,"lib_test"),
Beam = fname(Dir, "lib1.beam"),
- ?line copy_file(fname(Dir, "lib1.erl"), Beam),
- ?line {ok, S108} =
- xref_base:set_library_path(S107, [Dir], [{verbose,false}]),
- ?line {{error, _, _}, _} = xref_base:variables(S108, [{verbose,false}]),
- ?line {ok, S109} = xref_base:set_library_path(S108, [], [{verbose,false}]),
+ copy_file(fname(Dir, "lib1.erl"), Beam),
+ {ok, S108} =
+ xref_base:set_library_path(S107, [Dir], [{verbose,false}]),
+ {{error, _, _}, _} = xref_base:variables(S108, [{verbose,false}]),
+ {ok, S109} = xref_base:set_library_path(S108, [], [{verbose,false}]),
- ?line Tabs = length(ets:all()),
+ Tabs = length(ets:all()),
- ?line {ok, S110} = eval("Eplus := closure E, TT := Eplus",
- 'closure()', S109),
- ?line {{ok, [{user, ['Eplus','TT']}]}, S111} = xref_base:variables(S110),
- ?line {ok, S112} = xref_base:forget(S111, ['TT','Eplus']),
- ?line true = Tabs =:= length(ets:all()),
+ {ok, S110} = eval("Eplus := closure E, TT := Eplus",
+ 'closure()', S109),
+ {{ok, [{user, ['Eplus','TT']}]}, S111} = xref_base:variables(S110),
+ {ok, S112} = xref_base:forget(S111, ['TT','Eplus']),
+ true = Tabs =:= length(ets:all()),
- ?line {ok, NS0} = eval("Eplus := closure E", 'closure()', S112),
- ?line {{ok, [{user, ['Eplus']}]}, NS} = xref_base:variables(NS0),
- ?line ok = xref_base:delete(NS),
- ?line true = Tabs =:= length(ets:all()),
+ {ok, NS0} = eval("Eplus := closure E", 'closure()', S112),
+ {{ok, [{user, ['Eplus']}]}, NS} = xref_base:variables(NS0),
+ ok = xref_base:delete(NS),
+ true = Tabs =:= length(ets:all()),
- ?line ok = file:delete(Beam),
+ ok = file:delete(Beam),
ok.
-unused_locals(suite) -> [];
-unused_locals(doc) -> ["OTP-5071. Too many unused functions."];
+%% OTP-5071. Too many unused functions.
unused_locals(Conf) when is_list(Conf) ->
Dir = ?copydir,
@@ -2326,8 +2264,8 @@ unused_locals(Conf) when is_list(Conf) ->
start(M, F, A) ->
spawn(M, F, A).
">>,
- ?line ok = file:write_file(File1, Test1),
- ?line {ok, a} = compile:file(File1, [debug_info,{outdir,Dir}]),
+ ok = file:write_file(File1, Test1),
+ {ok, a} = compile:file(File1, [debug_info,{outdir,Dir}]),
File2 = fname(Dir, "b.erl"),
MFile2 = fname(Dir, "b"),
@@ -2343,123 +2281,109 @@ unused_locals(Conf) when is_list(Conf) ->
apply(a, g, [X, Y]).
">>,
- ?line ok = file:write_file(File2, Test2),
- ?line {ok, b} = compile:file(File2, [debug_info,{outdir,Dir}]),
+ ok = file:write_file(File2, Test2),
+ {ok, b} = compile:file(File2, [debug_info,{outdir,Dir}]),
- ?line {ok, _} = xref:start(s),
- ?line {ok, a} = xref:add_module(s, MFile1),
- ?line {ok, b} = xref:add_module(s, MFile2),
- ?line {ok, []} = xref:analyse(s, locals_not_used),
- ?line ok = check_state(s),
- ?line xref:stop(s),
+ {ok, _} = xref:start(s),
+ {ok, a} = xref:add_module(s, MFile1),
+ {ok, b} = xref:add_module(s, MFile2),
+ {ok, []} = xref:analyse(s, locals_not_used),
+ ok = check_state(s),
+ xref:stop(s),
- ?line ok = file:delete(File1),
- ?line ok = file:delete(Beam1),
- ?line ok = file:delete(File2),
- ?line ok = file:delete(Beam2),
+ ok = file:delete(File1),
+ ok = file:delete(Beam1),
+ ok = file:delete(File2),
+ ok = file:delete(Beam2),
ok.
-format_error(suite) -> [];
-format_error(doc) -> ["Format error messages"];
+%% Format error messages
format_error(Conf) when is_list(Conf) ->
- ?line {ok, _Pid} = start(s),
- ?line ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
+ {ok, _Pid} = start(s),
+ ok = xref:set_default(s, [{verbose,false}, {warnings, false}]),
%% Parse error messages.
- ?line "Invalid regular expression \"add(\"" ++ _ =
- fstring(xref:q(s,'"add("')),
- ?line 'Invalid operator foo\n' =
- fatom(xref:q(s,'foo E')),
- ?line 'Invalid wildcard variable \'_Var\' (only \'_\' is allowed)\n'
- = fatom(xref:q(s,"module:function/_Var")),
- ?line 'Missing type of regular expression ".*"\n'
- = fatom(xref:q(s,'".*"')),
- ?line 'Type does not match structure of constant: \'M\' : Fun\n'
- = fatom(xref:q(s,"'M' : Fun")),
- ?line 'Type does not match structure of constant: ".*" : Fun\n'
- = fatom(xref:q(s,'".*" : Fun')),
- ?line 'Type does not match structure of constant: [m:f/1, m1:f2/3] : App\n'
- = fatom(xref:q(s,"[m:f/1,m1:f2/3] : App")),
- ?line 'Parse error on line 1: syntax error before: \'-\'\n' =
- fatom(xref:q(s,"E + -")),
- ?line "Parse error on line 1: unterminated atom starting with 'foo'\n"
- = flatten(xref:format_error(xref:q(s,"'foo"))),
- ?line 'Parse error at end of string: syntax error before: \n' =
- fatom(xref:q(s,"E +")),
- ?line 'Parse error on line 1: syntax error before: \'Lin\'\n' =
- fatom(xref:q(s,"Lin")),
+ "Invalid regular expression \"add(\"" ++ _ = fstring(xref:q(s,'"add("')),
+ 'Invalid operator foo\n' = fatom(xref:q(s,'foo E')),
+ 'Invalid wildcard variable \'_Var\' (only \'_\' is allowed)\n'
+ = fatom(xref:q(s,"module:function/_Var")),
+ 'Missing type of regular expression ".*"\n'
+ = fatom(xref:q(s,'".*"')),
+ 'Type does not match structure of constant: \'M\' : Fun\n'
+ = fatom(xref:q(s,"'M' : Fun")),
+ 'Type does not match structure of constant: ".*" : Fun\n'
+ = fatom(xref:q(s,'".*" : Fun')),
+ 'Type does not match structure of constant: [m:f/1, m1:f2/3] : App\n'
+ = fatom(xref:q(s,"[m:f/1,m1:f2/3] : App")),
+ 'Parse error on line 1: syntax error before: \'-\'\n'
+ = fatom(xref:q(s,"E + -")),
+ "Parse error on line 1: unterminated atom starting with 'foo'\n"
+ = flatten(xref:format_error(xref:q(s,"'foo"))),
+ 'Parse error at end of string: syntax error before: \n'
+ = fatom(xref:q(s,"E +")),
+ 'Parse error on line 1: syntax error before: \'Lin\'\n'
+ = fatom(xref:q(s,"Lin")),
%% Other messages
- ?line 'Variable \'QQ\' used before set\n' =
- fatom(xref:q(s,"QQ")),
- ?line 'Unknown constant a\n' =
- fatom(xref:q(s,"{a} of E")),
+ 'Variable \'QQ\' used before set\n' = fatom(xref:q(s,"QQ")),
+ 'Unknown constant a\n' = fatom(xref:q(s,"{a} of E")),
%% Testing xref_parser:t2s/1.
- ?line 'Variable assigned more than once: E := E + E\n' =
- fatom(xref:q(s,"E:=E + E")),
- ?line 'Variable assigned more than once: E = E + E\n' =
- fatom(xref:q(s,"E=E + E")),
- ?line "Operator applied to argument(s) of different or invalid type(s): "
- "E + V * V\n" =
- flatten(xref:format_error(xref:q(s,"E + (V * V)"))),
- ?line {error,xref_compiler,{type_error,"(V + V) * E"}} =
- xref:q(s,"(V + V) * E"),
- ?line "Type does not match structure of constant: [m:f/3 -> g:h/17] : "
- "App\n" =
- flatten(xref:format_error(xref:q(s,"[{{m,f,3},{g,h,17}}] : App"))),
- ?line 'Type does not match structure of constant: [m -> f, g -> h] : Fun\n'
- = fatom(xref:q(s,"[{m,f},g->h] : Fun")),
- ?line 'Type does not match structure of constant: {m, n, o} : Fun\n' =
- fatom(xref:q(s,"{m,n,o} : Fun")),
- ?line {error,xref_compiler,{type_error,"range (Lin) V"}} =
- xref:q(s,"range ((Lin) V)"),
- ?line {error,xref_compiler,{type_error,"condensation range E"}} =
- xref:q(s,"condensation (range E)"),
- ?line {error,xref_compiler,{type_error,"condensation (# E + # V)"}} =
- xref:q(s,"condensation (# E + # V)"),
- ?line {error,xref_compiler,{type_error,"range (# E + # E)"}} =
- xref:q(s,"range (#E + #E)"),
- ?line {error,xref_compiler,{type_error,"range (# E)"}} =
- xref:q(s,"range #E"), % Hm...
- ?line {error,xref_compiler,{type_error,"E + # E"}} =
- xref:q(s,"E + #E + #E"), % Hm...
- ?line {error,xref_compiler,{type_error,"V * E || V | V"}} =
- xref:q(s,"V * (E || V) | V"),
- ?line {error,xref_compiler,{type_error,"E || (E | V)"}} =
- xref:q(s,"V * E || (E | V)"),
- ?line {error,xref_compiler,{type_error,"E * \"m\" : Mod"}} =
- xref:q(s,'E * "m" : Mod'),
- ?line {error,xref_compiler,{type_error,"E * (\"m\":f/_ + m:\"f\"/3)"}} =
- xref:q(s,'E * ("m":f/_ + m:"f"/3)'),
-
- ?line xref:stop(s),
+ 'Variable assigned more than once: E := E + E\n' = fatom(xref:q(s,"E:=E + E")),
+ 'Variable assigned more than once: E = E + E\n' = fatom(xref:q(s,"E=E + E")),
+ "Operator applied to argument(s) of different or invalid type(s): "
+ "E + V * V\n" = flatten(xref:format_error(xref:q(s,"E + (V * V)"))),
+ {error,xref_compiler,{type_error,"(V + V) * E"}} = xref:q(s,"(V + V) * E"),
+ "Type does not match structure of constant: [m:f/3 -> g:h/17] : "
+ "App\n" = flatten(xref:format_error(xref:q(s,"[{{m,f,3},{g,h,17}}] : App"))),
+ 'Type does not match structure of constant: [m -> f, g -> h] : Fun\n'
+ = fatom(xref:q(s,"[{m,f},g->h] : Fun")),
+ 'Type does not match structure of constant: {m, n, o} : Fun\n' =
+ fatom(xref:q(s,"{m,n,o} : Fun")),
+ {error,xref_compiler,{type_error,"range (Lin) V"}} =
+ xref:q(s,"range ((Lin) V)"),
+ {error,xref_compiler,{type_error,"condensation range E"}} =
+ xref:q(s,"condensation (range E)"),
+ {error,xref_compiler,{type_error,"condensation (# E + # V)"}} =
+ xref:q(s,"condensation (# E + # V)"),
+ {error,xref_compiler,{type_error,"range (# E + # E)"}} =
+ xref:q(s,"range (#E + #E)"),
+ {error,xref_compiler,{type_error,"range (# E)"}} =
+ xref:q(s,"range #E"), % Hm...
+ {error,xref_compiler,{type_error,"E + # E"}} =
+ xref:q(s,"E + #E + #E"), % Hm...
+ {error,xref_compiler,{type_error,"V * E || V | V"}} =
+ xref:q(s,"V * (E || V) | V"),
+ {error,xref_compiler,{type_error,"E || (E | V)"}} =
+ xref:q(s,"V * E || (E | V)"),
+ {error,xref_compiler,{type_error,"E * \"m\" : Mod"}} =
+ xref:q(s,'E * "m" : Mod'),
+ {error,xref_compiler,{type_error,"E * (\"m\":f/_ + m:\"f\"/3)"}} =
+ xref:q(s,'E * ("m":f/_ + m:"f"/3)'),
+
+ xref:stop(s),
ok.
-otp_7423(suite) -> [];
-otp_7423(doc) -> ["OTP-7423. Xref scanner bug."];
+%% OTP-7423. Xref scanner bug.
otp_7423(Conf) when is_list(Conf) ->
- ?line {ok, _Pid} = start(s),
+ {ok, _Pid} = start(s),
S = "E | [compiler] : App || [{erlang,
size,
1}] : Fun",
- ?line {error,xref_compiler,{unknown_constant,"compiler"}} = xref:q(s,S),
- ?line xref:stop(s),
+ {error,xref_compiler,{unknown_constant,"compiler"}} = xref:q(s,S),
+ xref:stop(s),
ok.
-otp_7831(suite) -> [];
-otp_7831(doc) -> ["OTP-7831. Allow anonymous Xref processes."];
+%% OTP-7831. Allow anonymous Xref processes.
otp_7831(Conf) when is_list(Conf) ->
- ?line {ok, Pid1} = xref:start([]),
- ?line xref:stop(Pid1),
- ?line {ok, Pid2} = xref:start([{xref_mode, modules}]),
- ?line xref:stop(Pid2),
+ {ok, Pid1} = xref:start([]),
+ xref:stop(Pid1),
+ {ok, Pid2} = xref:start([{xref_mode, modules}]),
+ xref:stop(Pid2),
ok.
-otp_10192(suite) -> [];
-otp_10192(doc) ->
- ["OTP-10192. Allow filenames with character codes greater than 126."];
+%% OTP-10192. Allow filenames with character codes greater than 126.
otp_10192(Conf) when is_list(Conf) ->
PrivDir = ?privdir,
{ok, _Pid} = xref:start(s),
@@ -2469,6 +2393,19 @@ otp_10192(Conf) when is_list(Conf) ->
xref:stop(s),
ok.
+%% OTP-10192. Allow filenames with character codes greater than 126.
+otp_13708(Conf) when is_list(Conf) ->
+ {ok, _} = start(s),
+ ok = xref:set_default(s, [{verbose, true}]),
+ {ok, []} = xref:q(s,"E"),
+ xref:stop(s),
+
+ CopyDir = ?copydir,
+ Dir = fname(CopyDir,"lib_test"),
+ {ok, _} = start(s),
+ ok = xref:set_library_path(s, [Dir], [{verbose, true}]),
+ xref:stop(s).
+
%%%
%%% Utilities
%%%
@@ -2483,59 +2420,59 @@ fname(Dir, Basename) ->
filename:join(Dir, Basename).
new() ->
- ?line {ok, S} = xref_base:new(),
+ {ok, S} = xref_base:new(),
S.
set_up(S) ->
- ?line {ok, S1} = xref_base:set_up(S, [{verbose, false}]),
+ {ok, S1} = xref_base:set_up(S, [{verbose, false}]),
S1.
eval(Query, E, S) ->
?format("------------------------------~n", []),
?format("Evaluating ~p~n", [Query]),
- ?line {Answer, NewState} = xref_base:q(S, Query, [{verbose, false}]),
+ {Answer, NewState} = xref_base:q(S, Query, [{verbose, false}]),
{Reply, Expected} =
- case Answer of
- {ok, R} when is_list(E) ->
- {unsetify(R), sort(E)};
- {ok, R} ->
- {unsetify(R), E};
- {error, _Module, Reason} ->
- {element(1, Reason), E}
- end,
+ case Answer of
+ {ok, R} when is_list(E) ->
+ {unsetify(R), sort(E)};
+ {ok, R} ->
+ {unsetify(R), E};
+ {error, _Module, Reason} ->
+ {element(1, Reason), E}
+ end,
if
- Reply =:= Expected ->
- ?format("As expected, got ~n~p~n", [Expected]),
- {ok, NewState};
- true ->
- ?format("Expected ~n~p~nbut got ~n~p~n", [Expected, Reply]),
- not_ok
+ Reply =:= Expected ->
+ ?format("As expected, got ~n~p~n", [Expected]),
+ {ok, NewState};
+ true ->
+ ?format("Expected ~n~p~nbut got ~n~p~n", [Expected, Reply]),
+ not_ok
end.
analyze(Query, E, S) ->
?format("------------------------------~n", []),
?format("Evaluating ~p~n", [Query]),
- ?line {{ok, L}, NewState} =
- xref_base:analyze(S, Query, [{verbose, false}]),
+ {{ok, L}, NewState} =
+ xref_base:analyze(S, Query, [{verbose, false}]),
case {unsetify(L), sort(E)} of
- {X,X} ->
- ?format("As was expected, got ~n~p~n", [X]),
- {ok, NewState};
- {_R,_X} ->
- ?format("Expected ~n~p~nbut got ~n~p~n", [_X, _R]),
- not_ok
+ {X,X} ->
+ ?format("As was expected, got ~n~p~n", [X]),
+ {ok, NewState};
+ {_R,_X} ->
+ ?format("Expected ~n~p~nbut got ~n~p~n", [_X, _R]),
+ not_ok
end.
unsetify(S) ->
case is_sofs_set(S) of
- true -> to_external(S);
- false -> S
+ true -> to_external(S);
+ false -> S
end.
%% Note: assumes S has been set up; the new state is not returned
eval(Query, S) ->
- ?line {{ok, Answer}, _NewState} =
- xref_base:q(S, Query, [{verbose, false}]),
+ {{ok, Answer}, _NewState} =
+ xref_base:q(S, Query, [{verbose, false}]),
unsetify(Answer).
add_module(S, XMod, DefAt, X, LCallAt, XCallAt, XC, LC) ->
@@ -2545,159 +2482,159 @@ add_module(S, XMod, DefAt, X, LCallAt, XCallAt, XC, LC) ->
Depr = {Depr0,DBad},
Data = {DefAt, LCallAt, XCallAt, LC, XC, X, Attr, Depr},
Unres = [],
- ?line {ok, _Module, _Bad, State} =
- xref_base:do_add_module(S, XMod, Unres, Data),
+ {ok, _Module, _Bad, State} =
+ xref_base:do_add_module(S, XMod, Unres, Data),
State.
add_application(S, XApp) ->
- ?line xref_base:do_add_application(S, XApp).
+ xref_base:do_add_application(S, XApp).
add_release(S, XRel) ->
- ?line xref_base:do_add_release(S, XRel).
+ xref_base:do_add_release(S, XRel).
remove_module(S, M) ->
- ?line xref_base:do_remove_module(S, M).
+ xref_base:do_remove_module(S, M).
info_tag(Info, Tag) ->
{value, {_Tag, Value}} = lists:keysearch(Tag, 1, Info),
Value.
make_ufile(FileName) ->
- ?line ok = file:write_file(FileName, term_to_binary(foo)),
- ?line hide_file(FileName).
+ ok = file:write_file(FileName, term_to_binary(foo)),
+ hide_file(FileName).
make_udir(Dir) ->
- ?line ok = file:make_dir(Dir),
- ?line hide_file(Dir).
+ ok = file:make_dir(Dir),
+ hide_file(Dir).
hide_file(FileName) ->
- ?line {ok, FileInfo} = file:read_file_info(FileName),
- ?line NewFileInfo = FileInfo#file_info{mode = 0},
- ?line ok = file:write_file_info(FileName, NewFileInfo).
+ {ok, FileInfo} = file:read_file_info(FileName),
+ NewFileInfo = FileInfo#file_info{mode = 0},
+ ok = file:write_file_info(FileName, NewFileInfo).
%% Note that S has to be set up before calling this checking function.
check_state(S) ->
- ?line Info = xref:info(S),
+ Info = xref:info(S),
- ?line modules_mode_check(S, Info),
+ modules_mode_check(S, Info),
case info(Info, mode) of
- modules ->
- ok;
- functions ->
- functions_mode_check(S, Info)
+ modules ->
+ ok;
+ functions ->
+ functions_mode_check(S, Info)
end.
%% The manual mentions some facts that should always hold.
%% Here they are again.
functions_mode_check(S, Info) ->
%% F = L + X,
- ?line {ok, F} = xref:q(S, "F"),
- ?line {ok, F} = xref:q(S, "L + X"),
+ {ok, F} = xref:q(S, "F"),
+ {ok, F} = xref:q(S, "L + X"),
%% V = X + L + B + U,
- ?line {ok, V} = xref:q(S, "V"),
- ?line {ok, V} = xref:q(S, "X + L + B + U"),
+ {ok, V} = xref:q(S, "V"),
+ {ok, V} = xref:q(S, "X + L + B + U"),
%% X, L, B and U are disjoint.
- ?line {ok, []} =
- xref:q(S, "X * L + X * B + X * U + L * B + L * U + B * U"),
+ {ok, []} =
+ xref:q(S, "X * L + X * B + X * U + L * B + L * U + B * U"),
%% V = UU + XU + LU,
- ?line {ok, V} = xref:q(S, "UU + XU + LU"),
+ {ok, V} = xref:q(S, "UU + XU + LU"),
%% E = LC + XC
- ?line {ok, E} = xref:q(S, "E"),
- ?line {ok, E} = xref:q(S, "LC + XC"),
+ {ok, E} = xref:q(S, "E"),
+ {ok, E} = xref:q(S, "LC + XC"),
%% U subset of XU,
- ?line {ok, []} = xref:q(S, "U - XU"),
+ {ok, []} = xref:q(S, "U - XU"),
%% LU = range LC
- ?line {ok, []} = xref:q(S, "(LU - range LC) + (range LC - LU)"),
+ {ok, []} = xref:q(S, "(LU - range LC) + (range LC - LU)"),
%% XU = range XC
- ?line {ok, []} = xref:q(S, "(XU - range XC) + (range XC - XU)"),
+ {ok, []} = xref:q(S, "(XU - range XC) + (range XC - XU)"),
%% LU subset F
- ?line {ok, []} = xref:q(S, "LU - F"),
+ {ok, []} = xref:q(S, "LU - F"),
%% UU subset F
- ?line {ok, []} = xref:q(S, "UU - F"),
+ {ok, []} = xref:q(S, "UU - F"),
%% ME = (Mod) E
- ?line {ok, ME} = xref:q(S, "ME"),
- ?line {ok, ME} = xref:q(S, "(Mod) E"),
+ {ok, ME} = xref:q(S, "ME"),
+ {ok, ME} = xref:q(S, "(Mod) E"),
%% AE = (App) E
- ?line {ok, AE} = xref:q(S, "AE"),
- ?line {ok, AE} = xref:q(S, "(App) E"),
+ {ok, AE} = xref:q(S, "AE"),
+ {ok, AE} = xref:q(S, "(App) E"),
%% RE = (Rel) E
- ?line {ok, RE} = xref:q(S, "RE"),
- ?line {ok, RE} = xref:q(S, "(Rel) E"),
+ {ok, RE} = xref:q(S, "RE"),
+ {ok, RE} = xref:q(S, "(Rel) E"),
%% (Mod) V subset of M
- ?line {ok, []} = xref:q(S, "(Mod) V - M"),
+ {ok, []} = xref:q(S, "(Mod) V - M"),
%% range UC subset of U
- ?line {ok, []} = xref:q(S, "range UC - U"),
+ {ok, []} = xref:q(S, "range UC - U"),
%% Some checks on the numbers returned by the info functions.
- ?line {Resolved, Unresolved} = info(Info, no_calls),
- ?line AllCalls = Resolved + Unresolved,
- ?line {ok, AllCalls} = xref:q(S, "# (XLin) E + # (LLin) E"),
+ {Resolved, Unresolved} = info(Info, no_calls),
+ AllCalls = Resolved + Unresolved,
+ {ok, AllCalls} = xref:q(S, "# (XLin) E + # (LLin) E"),
- ?line {Local, Exported} = info(Info, no_functions),
- ?line LX = Local+Exported,
- ?line {ok, LXs} = xref:q(S, 'Extra = _:module_info/"(0|1)" + LM,
- # (F - Extra)'),
- ?line true = LX =:= LXs,
+ {Local, Exported} = info(Info, no_functions),
+ LX = Local+Exported,
+ {ok, LXs} = xref:q(S, 'Extra = _:module_info/"(0|1)" + LM,
+ # (F - Extra)'),
+ true = LX =:= LXs,
- ?line {LocalCalls, ExternalCalls, UnresCalls} =
- info(Info, no_function_calls),
- ?line LEU = LocalCalls + ExternalCalls + UnresCalls,
- ?line {ok, LEU} = xref:q(S, "# LC + # XC"),
+ {LocalCalls, ExternalCalls, UnresCalls} =
+ info(Info, no_function_calls),
+ LEU = LocalCalls + ExternalCalls + UnresCalls,
+ {ok, LEU} = xref:q(S, "# LC + # XC"),
- ?line InterFunctionCalls = info(Info, no_inter_function_calls),
- ?line {ok, InterFunctionCalls} = xref:q(S, "# EE"),
+ InterFunctionCalls = info(Info, no_inter_function_calls),
+ {ok, InterFunctionCalls} = xref:q(S, "# EE"),
%% And some more checks on counters...
- ?line check_count(S),
+ check_count(S),
%% ... and more
- ?line {ok, []} = xref:q(S, "LM - X - U - B"),
+ {ok, []} = xref:q(S, "LM - X - U - B"),
ok.
modules_mode_check(S, Info) ->
%% B subset of XU,
- ?line {ok, []} = xref:q(S, "B - XU"),
+ {ok, []} = xref:q(S, "B - XU"),
%% M = AM + LM + UM
- ?line {ok, M} = xref:q(S, "M"),
- ?line {ok, M} = xref:q(S, "AM + LM + UM"),
+ {ok, M} = xref:q(S, "M"),
+ {ok, M} = xref:q(S, "AM + LM + UM"),
%% DF is a subset of X U B, etc.
- ?line {ok, []} = xref:q(S, "DF - X - B"),
- ?line {ok, []} = xref:q(S, "DF_3 - DF"),
- ?line {ok, []} = xref:q(S, "DF_2 - DF_3"),
- ?line {ok, []} = xref:q(S, "DF_1 - DF_2"),
+ {ok, []} = xref:q(S, "DF - X - B"),
+ {ok, []} = xref:q(S, "DF_3 - DF"),
+ {ok, []} = xref:q(S, "DF_2 - DF_3"),
+ {ok, []} = xref:q(S, "DF_1 - DF_2"),
%% AM, LM and UM are disjoint.
- ?line {ok, []} = xref:q(S, "AM * LM + AM * UM + LM * UM"),
+ {ok, []} = xref:q(S, "AM * LM + AM * UM + LM * UM"),
%% (App) M subset of A
- ?line {ok, []} = xref:q(S, "(App) M - A"),
+ {ok, []} = xref:q(S, "(App) M - A"),
- ?line AM = info(Info, no_analyzed_modules),
- ?line {ok, AM} = xref:q(S, "# AM"),
+ AM = info(Info, no_analyzed_modules),
+ {ok, AM} = xref:q(S, "# AM"),
- ?line A = info(Info, no_applications),
- ?line {ok, A} = xref:q(S, "# A"),
+ A = info(Info, no_applications),
+ {ok, A} = xref:q(S, "# A"),
- ?line NoR = info(Info, no_releases),
- ?line {ok, NoR} = xref:q(S, "# R"),
+ NoR = info(Info, no_releases),
+ {ok, NoR} = xref:q(S, "# R"),
ok.
@@ -2709,7 +2646,7 @@ check_count(S) ->
{ok, M} = xref:q(S, 'AM'),
{ok, _} = xref:q(S,
- "Extra := _:module_info/\"(0|1)\" + LM"),
+ "Extra := _:module_info/\"(0|1)\" + LM"),
%% info/1:
{ok, NoR} = xref:q(S, '# R'),
@@ -2744,7 +2681,7 @@ check_count(S) ->
info_module([M | Ms], S) ->
{ok, NoCalls} = per_module("T = (E | ~p : Mod), # (XLin) T + # (LLin) T",
- M, S),
+ M, S),
{ok, NoFunCalls} = per_module("# (E | ~p : Mod)", M, S),
{ok, NoXCalls} = per_module("# (XC | ~p : Mod)", M, S),
{ok, NoLCalls} = per_module("# (LC | ~p : Mod)", M, S),
@@ -2784,40 +2721,38 @@ fstring(R) ->
flatten(xref:format_error(R)).
start(Server) ->
- ?line case xref:start(Server) of
- {error, {already_started, _Pid}} ->
- ?line xref:stop(Server),
- ?line xref:start(Server);
- R -> R
- end.
+ case xref:start(Server) of
+ {error, {already_started, _Pid}} ->
+ xref:stop(Server),
+ xref:start(Server);
+ R -> R
+ end.
add_erts_code_path(KernelPath) ->
VersionDirs =
- filelib:is_dir(
- filename:join(
- [code:lib_dir(),
- lists:flatten(
- ["kernel-",
- [X ||
- {kernel,_,X} <-
- application_controller:which_applications()]])])),
+ filelib:is_dir(
+ filename:join(
+ [code:lib_dir(),
+ lists:flatten(
+ ["kernel-",
+ [X ||
+ {kernel,_,X} <-
+ application_controller:which_applications()]])])),
case VersionDirs of
- true ->
- case code:lib_dir(erts) of
- String when is_list(String) ->
- [KernelPath, fname(String,"ebin")];
- _Other1 ->
- [KernelPath]
- end;
- false ->
- % Clearcase?
- PrelPath = filename:join([code:lib_dir(),"..","erts","preloaded"]),
- case filelib:is_dir(PrelPath) of
- true ->
- [KernelPath, fname(PrelPath,"ebin")];
- false ->
- [KernelPath]
- end
+ true ->
+ case code:lib_dir(erts) of
+ String when is_list(String) ->
+ [KernelPath, fname(String,"ebin")];
+ _Other1 ->
+ [KernelPath]
+ end;
+ false ->
+ % Clearcase?
+ PrelPath = filename:join([code:lib_dir(),"..","erts","preloaded"]),
+ case filelib:is_dir(PrelPath) of
+ true ->
+ [KernelPath, fname(PrelPath,"ebin")];
+ false ->
+ [KernelPath]
+ end
end.
-
-
diff --git a/lib/tools/vsn.mk b/lib/tools/vsn.mk
index 70564f05c6..e6287b0430 100644
--- a/lib/tools/vsn.mk
+++ b/lib/tools/vsn.mk
@@ -1 +1 @@
-TOOLS_VSN = 2.8.3
+TOOLS_VSN = 2.8.5
diff --git a/lib/typer/Makefile b/lib/typer/Makefile
index dee9805005..bd1b6458a8 100644
--- a/lib/typer/Makefile
+++ b/lib/typer/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2009. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/typer/doc/Makefile b/lib/typer/doc/Makefile
index 822f8f5d03..1015ca78eb 100644
--- a/lib/typer/doc/Makefile
+++ b/lib/typer/doc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2012. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/typer/doc/src/Makefile b/lib/typer/doc/src/Makefile
index 161fbd0752..3724a2e4d1 100644
--- a/lib/typer/doc/src/Makefile
+++ b/lib/typer/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2012. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/typer/doc/src/book.xml b/lib/typer/doc/src/book.xml
index fd2bccc0a9..20da44ae04 100644
--- a/lib/typer/doc/src/book.xml
+++ b/lib/typer/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/typer/doc/src/notes.xml b/lib/typer/doc/src/notes.xml
index 21a2a6d597..9ef5ca1c70 100644
--- a/lib/typer/doc/src/notes.xml
+++ b/lib/typer/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2014</year>
+ <year>2014</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,21 @@
</header>
<p>This document describes the changes made to TypEr.</p>
+<section><title>TypEr 0.9.11</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>TypEr 0.9.10</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/typer/doc/src/part_notes.xml b/lib/typer/doc/src/part_notes.xml
index 63086f82c5..3234f0903e 100644
--- a/lib/typer/doc/src/part_notes.xml
+++ b/lib/typer/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2006</year><year>2013</year>
+ <year>2006</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/typer/doc/src/ref_man.xml b/lib/typer/doc/src/ref_man.xml
index f50d79b385..c793207443 100644
--- a/lib/typer/doc/src/ref_man.xml
+++ b/lib/typer/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2014</year>
+ <year>2014</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/typer/doc/src/typer_app.xml b/lib/typer/doc/src/typer_app.xml
index 2618f4a380..d52df5d0da 100644
--- a/lib/typer/doc/src/typer_app.xml
+++ b/lib/typer/doc/src/typer_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>2014</year>
+ <year>2014</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/typer/src/Makefile b/lib/typer/src/Makefile
index 620ca21827..6c5d8b0726 100644
--- a/lib/typer/src/Makefile
+++ b/lib/typer/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2006-2012. All Rights Reserved.
+# Copyright Ericsson AB 2006-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/typer/src/typer.appup.src b/lib/typer/src/typer.appup.src
index 46132dba48..3b7464a97c 100644
--- a/lib/typer/src/typer.appup.src
+++ b/lib/typer/src/typer.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/typer/src/typer.erl b/lib/typer/src/typer.erl
index 562530c868..5c82750a21 100644
--- a/lib/typer/src/typer.erl
+++ b/lib/typer/src/typer.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -137,11 +137,14 @@ extract(#analysis{macros = Macros,
NewCodeServer =
try
NewRecords = dialyzer_codeserver:get_temp_records(CodeServer1),
+ NewExpTypes = dialyzer_codeserver:get_temp_exported_types(CodeServer1),
+ case sets:size(NewExpTypes) of 0 -> ok end,
OldRecords = dialyzer_plt:get_types(TrustPLT), % XXX change to the PLT?
MergedRecords = dialyzer_utils:merge_records(NewRecords, OldRecords),
CodeServer2 = dialyzer_codeserver:set_temp_records(MergedRecords, CodeServer1),
- CodeServer3 = dialyzer_utils:process_record_remote_types(CodeServer2),
- dialyzer_contracts:process_contract_remote_types(CodeServer3)
+ CodeServer3 = dialyzer_codeserver:finalize_exported_types(NewExpTypes, CodeServer2),
+ CodeServer4 = dialyzer_utils:process_record_remote_types(CodeServer3),
+ dialyzer_contracts:process_contract_remote_types(CodeServer4)
catch
throw:{error, ErrorMsg} ->
compile_error(ErrorMsg)
@@ -845,8 +848,7 @@ collect_info(Analysis) ->
%% io:format("Merged Records ~p",[MergedRecords]),
TmpCServer1 = dialyzer_codeserver:set_temp_records(MergedRecords, TmpCServer),
TmpCServer2 =
- dialyzer_codeserver:insert_temp_exported_types(MergedExpTypes,
- TmpCServer1),
+ dialyzer_codeserver:finalize_exported_types(MergedExpTypes, TmpCServer1),
TmpCServer3 = dialyzer_utils:process_record_remote_types(TmpCServer2),
dialyzer_contracts:process_contract_remote_types(TmpCServer3)
catch
diff --git a/lib/typer/test/Makefile b/lib/typer/test/Makefile
index d6dd22b6cf..fb5570d9f0 100644
--- a/lib/typer/test/Makefile
+++ b/lib/typer/test/Makefile
@@ -25,7 +25,7 @@ RELSYSDIR = $(RELEASE_PATH)/typer_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/typer/vsn.mk b/lib/typer/vsn.mk
index 507593ef56..ed12e067c1 100644
--- a/lib/typer/vsn.mk
+++ b/lib/typer/vsn.mk
@@ -1 +1 @@
-TYPER_VSN = 0.9.10
+TYPER_VSN = 0.9.11
diff --git a/lib/webtool/AUTHORS b/lib/webtool/AUTHORS
deleted file mode 100644
index 5f173dd264..0000000000
--- a/lib/webtool/AUTHORS
+++ /dev/null
@@ -1,4 +0,0 @@
-Original Authors and Contributors:
-
-Siri Hansen
-Martin Gustafsson
diff --git a/lib/webtool/Makefile b/lib/webtool/Makefile
deleted file mode 100644
index 9afcb87af2..0000000000
--- a/lib/webtool/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 2001-2009. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# %CopyrightEnd%
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-SUB_DIRECTORIES = src priv doc/src
-
-include vsn.mk
-VSN = $(WEBTOOL_VSN)
-
-SPECIAL_TARGETS =
-
-# ----------------------------------------------------
-# Default Subdir Targets
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_subdir.mk
-
-
diff --git a/lib/webtool/doc/html/.gitignore b/lib/webtool/doc/html/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/webtool/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/webtool/doc/man1/.gitignore b/lib/webtool/doc/man1/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/webtool/doc/man1/.gitignore
+++ /dev/null
diff --git a/lib/webtool/doc/man3/.gitignore b/lib/webtool/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/webtool/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/webtool/doc/pdf/.gitignore b/lib/webtool/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/webtool/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/webtool/doc/src/Makefile b/lib/webtool/doc/src/Makefile
deleted file mode 100644
index 57de52a616..0000000000
--- a/lib/webtool/doc/src/Makefile
+++ /dev/null
@@ -1,132 +0,0 @@
-# ``Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
-# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
-# AB. All Rights Reserved.''
-#
-# $Id$
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(WEBTOOL_VSN)
-APPLICATION=webtool
-
-DOC_EXTRA_FRONT_PAGE_INFO=Important note: \
-The Webtool application is obsolete and will be removed \
-in the next major OTP release
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-
-XML_REF1_FILES = start_webtool.xml
-
-XML_REF3_FILES = webtool.xml
-
-XML_PART_FILES = \
- part.xml \
- part_notes.xml \
- part_notes_history.xml
-
-XML_CHAPTER_FILES = \
- webtool_chapter.xml \
- notes.xml \
- notes_history.xml
-
-BOOK_FILES = book.xml
-
-XML_FILES = \
- $(BOOK_FILES) $(XML_CHAPTER_FILES) \
- $(XML_PART_FILES) $(XML_REF3_FILES) \
- $(XML_REF1_FILES) $(XML_APPLICATION_FILES)
-
-GIF_FILES =
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN1_FILES = $(XML_REF1_FILES:%.xml=$(MAN1DIR)/%.1)
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-DVIPS_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN1DIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
-
-man: $(MAN1_FILES) $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_docs_spec: docs
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(HTMLDIR)/* \
- "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man1"
- $(INSTALL_DATA) $(MAN1_FILES) "$(RELEASE_PATH)/man/man1"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DATA) $(MAN3_FILES) "$(RELEASE_PATH)/man/man3"
-
-release_spec:
-
diff --git a/lib/webtool/doc/src/book.xml b/lib/webtool/doc/src/book.xml
deleted file mode 100644
index feccee7c62..0000000000
--- a/lib/webtool/doc/src/book.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>2001</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>WebTool</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev>1.0</rev>
- </header>
- <insidecover>
- </insidecover>
- <pagetext>WebTool</pagetext>
- <preamble>
- </preamble>
- <parts lift="no">
- <xi:include href="part.xml"/>
- </parts>
- <applications>
- <xi:include href="ref_man.xml"/>
- </applications>
- <releasenotes>
- <xi:include href="notes.xml"/>
- </releasenotes>
- <listofterms></listofterms>
- <index></index>
-</book>
-
diff --git a/lib/webtool/doc/src/fascicules.xml b/lib/webtool/doc/src/fascicules.xml
deleted file mode 100644
index 37feca543f..0000000000
--- a/lib/webtool/doc/src/fascicules.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
-
-<fascicules>
- <fascicule file="part" href="part_frame.html" entry="no">
- User's Guide
- </fascicule>
- <fascicule file="ref_man" href="ref_man_frame.html" entry="yes">
- Reference Manual
- </fascicule>
- <fascicule file="part_notes" href="part_notes_frame.html" entry="no">
- Release Notes
- </fascicule>
- <fascicule file="" href="../../../../doc/print.html" entry="no">
- Off-Print
- </fascicule>
-</fascicules>
-
diff --git a/lib/webtool/doc/src/notes.xml b/lib/webtool/doc/src/notes.xml
deleted file mode 100644
index 0ebb66ae3c..0000000000
--- a/lib/webtool/doc/src/notes.xml
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>Webtool Release Notes</title>
- <prepared>otp_appnotes</prepared>
- <docno>nil</docno>
- <date>nil</date>
- <rev>nil</rev>
- <file>notes.xml</file>
- </header>
- <p>This document describes the changes made to the Webtool
- application.</p>
-
-<section><title>WebTool 0.9.1</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Remove dependency to inets <c>mod_include</c> in
- configuration.</p>
- <p>
- Own Id: OTP-13406</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.9</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The Webtool application has been marked as obsolete and
- will be removed from OTP in the next major release (OTP
- 19.0).</p>
- <p>
- Own Id: OTP-10922 Aux Id: OTP-12705 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.10</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Application upgrade (appup) files are corrected for the
- following applications: </p>
- <p>
- <c>asn1, common_test, compiler, crypto, debugger,
- dialyzer, edoc, eldap, erl_docgen, et, eunit, gs, hipe,
- inets, observer, odbc, os_mon, otp_mibs, parsetools,
- percept, public_key, reltool, runtime_tools, ssh,
- syntax_tools, test_server, tools, typer, webtool, wx,
- xmerl</c></p>
- <p>
- A new test utility for testing appup files is added to
- test_server. This is now used by most applications in
- OTP.</p>
- <p>
- (Thanks to Tobias Schlager)</p>
- <p>
- Own Id: OTP-11744</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.9.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.9.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Miscellaneous documentation build updates</p>
- <p>
- Own Id: OTP-9813</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.9</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Do not install *.bat files on non-win32 machines (Thanks
- to Hans Ulrich Niedermann)</p>
- <p>
- Own Id: OTP-9515</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.8</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Various small documentation fixes (Thanks to Bernard
- Duggan)</p>
- <p>
- Own Id: OTP-9172</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.7</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Up until now Netscape has been the default web browser on
- Unix/Linux. Webtool has now been updated to start Firefox
- as default browser instead.</p>
- <p>
- Own Id: OTP-8651 Aux Id: OTP-8650 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.6</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc updates</p>
- <p>
- Own Id: OTP-8456</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.5</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The documentation is now built with open source tools
- (xsltproc and fop) that exists on most platforms. One
- visible change is that the frames are removed.</p>
- <p>
- Own Id: OTP-8201</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>WebTool 0.8.4</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The copyright notices have been updated.</p>
- <p>
- Own Id: OTP-7851</p>
- </item>
- </list>
- </section>
-
-</section>
-<section><title>WebTool 0.8.3.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Minor updates.</p>
- <p>
- Own Id: OTP-6998</p>
- </item>
- </list>
- </section>
-
-</section>
-
- <section>
- <title>WebTool 0.8.3.1</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Minor Makefile changes.</p>
- <p>Own Id: OTP-6689</p>
- </item>
- <item>
- <p>Obsolete guard tests (such as list()) have been replaced
- with the modern guard tests (such as is_list()).</p>
- <p>Own Id: OTP-6725</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>WebTool 0.8.3</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Removed some dead code discovered by Dialyzer.</p>
- <p>Own Id: OTP-6041</p>
- </item>
- </list>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/webtool/doc/src/notes_history.xml b/lib/webtool/doc/src/notes_history.xml
deleted file mode 100644
index 792475d948..0000000000
--- a/lib/webtool/doc/src/notes_history.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2006</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>Webtool Release Notes History</title>
- <prepared>otp_appnotes</prepared>
- <docno>nil</docno>
- <date>nil</date>
- <rev>nil</rev>
- </header>
-
- <section>
- <title>Webtool 0.8.2</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Bugfix: <c>webtool</c> crashed when trying to find a free
- port number if connection failed with other reason than
- <c>econnrefused</c>.</p>
- <p>Own Id: OTP-5166</p>
- </item>
- </list>
- </section>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Misc improvements:</p>
- <list type="bulleted">
- <item>The function <c>debug_app/1</c> and some error
- printouts are added to simplify debugging of own
- application.</item>
- <item>Multiple webtool instances can now be started on
- the same host. If the default port (8888) is in use, port
- 8889 is tried. If 8889 is also used, 8890 is tried and so
- on. Max number of ports tried is 256.</item>
- <item><em>Incompatible:</em> If <c>Data</c> is set to
- <c>PortNumber</c> in <c>start(Path,Data)</c>, the default
- data will be used for ip-number (<c>127.0.0.1</c>) and
- server name (<c>localhost</c>).</item>
- </list>
- <p>*** POTENTIAL INCOMPATIBILITY ***</p>
- <p>Own Id: OTP-4724</p>
- </item>
- </list>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/webtool/doc/src/part.xml b/lib/webtool/doc/src/part.xml
deleted file mode 100644
index b0c4ee310d..0000000000
--- a/lib/webtool/doc/src/part.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2001</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>WebTool User's Guide</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p><em>WebTool</em> provides a easy way to use web based tools with
- Erlang/OTP. It configures and starts a webserver as well as all
- available tools.</p>
- </description>
- <xi:include href="webtool_chapter.xml"/>
-</part>
-
diff --git a/lib/webtool/doc/src/part_notes.xml b/lib/webtool/doc/src/part_notes.xml
deleted file mode 100644
index db2b790f3f..0000000000
--- a/lib/webtool/doc/src/part_notes.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>WebTool Release Notes</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p><em>WebTool</em> provides an easy way to use web based tools with
- Erlang/OTP. It configures and starts a webserver as well as all
- available tools.</p>
- <p>For information about older versions, see
- <url href="part_notes_history_frame.html">Release Notes History</url>.</p>
- </description>
- <xi:include href="notes"/>
-</part>
-
diff --git a/lib/webtool/doc/src/part_notes_history.xml b/lib/webtool/doc/src/part_notes_history.xml
deleted file mode 100644
index 50ce62e58d..0000000000
--- a/lib/webtool/doc/src/part_notes_history.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part>
- <header>
- <copyright>
- <year>2006</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>WebTool Release Notes History</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p><em>WebTool</em> provides a easy way to use web based tools with
- Erlang/OTP. It configures and starts a webserver as well as all
- available tools.</p>
- </description>
- <include file="notes_history"></include>
-</part>
-
diff --git a/lib/webtool/doc/src/ref_man.xml b/lib/webtool/doc/src/ref_man.xml
deleted file mode 100644
index aa81392b11..0000000000
--- a/lib/webtool/doc/src/ref_man.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2001</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>WebTool Reference Manual</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p><em>WebTool</em> provides an easy way to use web based tools with
- Erlang/OTP. It configures and starts a webserver as well as all
- available tools.</p>
- </description>
- <xi:include href="webtool.xml"/>
- <xi:include href="start_webtool.xml"/>
-</application>
-
diff --git a/lib/webtool/doc/src/start_webtool.xml b/lib/webtool/doc/src/start_webtool.xml
deleted file mode 100644
index e9c94c4271..0000000000
--- a/lib/webtool/doc/src/start_webtool.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE comref SYSTEM "comref.dtd">
-
-<comref>
- <header>
- <copyright>
- <year>2003</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>start_webtool</title>
- <prepared></prepared>
- <responsible></responsible>
- <docno>1</docno>
- <approved></approved>
- <checked></checked>
- <date>2003-06-18</date>
- <rev></rev>
- <file>start_webtool.sgml</file>
- </header>
- <com>start_webtool</com>
- <comsummary>WebTool Start Script</comsummary>
- <description>
- <p>The <c>start_webtool</c> script starts WebTool, a WebTool
- application and a web browser pointing to this application.</p>
- </description>
- <funcs>
- <func>
- <name>start_webtool application [ browser ]</name>
- <fsummary>Start a WebTool Application</fsummary>
- <desc>
- <p>Starts WebTool, the given WebTool Application and a web
- browser pointing to this application.
- </p>
- <p>If no argument is given, a list of available applications
- is displayed, e.g.</p>
- <pre>
->start_webtool
-Starting webtool...
-WebTool is available at http://localhost:8888/
-Or http://127.0.0.1:8888/
-
-Usage: start_webtool application [ browser ]
-
-Available applications are: [orber,appmon,crashdump_viewer,webcover]
-Default browser is 'iexplore' (Internet Explorer) on Windows or else 'firefox' </pre>
- <p>To start any of the listed applications, give the
- application name as the first argument, e.g.</p>
- <pre>
->start_webtool webcover
-Starting webtool...
-WebTool is available at http://localhost:8888/
-Or http://127.0.0.1:8888/
-Starting webcover...
-Sending URL to netscape...done </pre>
- <p>The WebTool application WebCover is then started and the
- default browser is used. The default browser is Internet
- Explorer on Windows or else Firefox.
- </p>
- <p>To use another browser, give the browser's start command
- as the second argument, e.g.</p>
- <pre>
->start_webtool webcover mozilla
-Starting webtool...
-WebTool is available at http://localhost:8888/
-Or http://127.0.0.1:8888/
-Starting webcover...
-Sending URL to mozilla...done </pre>
- <p>If the given browser name is not known to WebTool, WebTool
- will run it as a command with the start URL as the only
- argument, e.g.</p>
- <pre>
->start_webtool webcover mybrowser
-Starting webtool...
-WebTool is available at http://localhost:8888/
-Or http://127.0.0.1:8888/
-Starting webcover...
-Starting mybrowser... </pre>
- <p>Here the command <c>"mybrowser http://localhost:8888/webcover"</c> is executed.
- </p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>See Also</title>
- <p><seealso marker="webtool">webtool(3)</seealso></p>
- </section>
-</comref>
-
diff --git a/lib/webtool/doc/src/webtool.xml b/lib/webtool/doc/src/webtool.xml
deleted file mode 100644
index 2647518dae..0000000000
--- a/lib/webtool/doc/src/webtool.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>2001</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>webtool</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <module>webtool</module>
- <modulesummary>WebTool is a tool used to simplify the implementation of web based tools with Erlang/OTP.</modulesummary>
- <description>
- <p>WebTool makes it easy to use web based tools with Erlang/OTP. WebTool
- configures and starts the webserver httpd.</p>
- </description>
- <funcs>
- <func>
- <name>start()-> {ok,Pid}| {stop,Reason}</name>
- <fsummary>Start WebTool.</fsummary>
- <desc>
- <p>Start WebTool with default data, i.e. port 8888, ip-number
- 127.0.0.1, and server-name <c>localhost</c>. If port 8888 is
- in use, port 8889 is tried instead. If 8889 is also in use,
- 8890 is tried and so on. Max number of ports tried is 256.
- </p>
- <p>The <c>mime.types</c> file and WebTool's own HTML files
- are assumed to be in the directory
- <c><![CDATA[webtool-<vsn>/priv/root/conf]]></c>.</p>
- </desc>
- </func>
- <func>
- <name>start(Path,Data)->{ok,Pid}|{stop,Reason}</name>
- <fsummary>Start WebTool with default configuration.</fsummary>
- <type>
- <v>Path = string() | standard_path</v>
- <v>Data = [Port,Address,Name] | PortNumber | standard_data</v>
- <v>Port = {port,PortNumber}</v>
- <v>Address = {bind_address,IpNumber}</v>
- <v>Name = {server_name,ServerName}</v>
- <v>PortNumber = integer()</v>
- <v>IpNumber = tuple(), e.g. {127,0,0,1}</v>
- <v>ServerName = string()</v>
- <v>Pid = pid()</v>
- </type>
- <desc>
- <p>Use this function to start WebTool if the default port,
- ip-number,servername or path can not be used.</p>
- <p><c>Path</c> is the directory where the <c>mime.types</c>
- file and WebTool's own HTML files are located. By default
- this is <c><![CDATA[webtool-<vsn>/priv]]></c>, and in most cases there
- is no need to change this. If <c>Path</c> is set to
- <c>standard_path</c> the default will be used.</p>
- <p>If <c>Data</c> is set to <c>PortNumber</c>, the default data
- will be used for ip-number (<c>127.0.0.1</c>) and server
- name (<c>localhost</c>).</p>
- </desc>
- </func>
- <func>
- <name>stop()->void</name>
- <fsummary>Stop WebTool.</fsummary>
- <desc>
- <p>Stop WebTool and the tools started by WebTool.</p>
- </desc>
- </func>
- <func>
- <name>debug_app(Module)->void</name>
- <fsummary>Debug a WebTool application.</fsummary>
- <type>
- <v>Module = atom()</v>
- </type>
- <desc>
- <p>Debug a WebTool application by tracing all functions in the
- given module which are called from WebTool.</p>
- </desc>
- </func>
- <func>
- <name>stop_debug()->void</name>
- <fsummary>Stop debugging an application and format the trace log.</fsummary>
- <desc>
- <p>Stop the tracing started by <c>debug_app/1</c>, and format
- the trace log.</p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following callback function must be implemented by each web
- based tool that will be used via WebTool. When started, WebTool
- searches the Erlang code path for *.tool files to locate all web
- based tools and their callback functions. See the <seealso marker="webtool_chapter">WebTool User's Guide</seealso> for more
- information about the *.tool files.</p>
- </section>
- <funcs>
- <func>
- <name>Module:Func(Data)-> {Name,WebData}|error</name>
- <fsummary>Returns configuration data needed by WebTool to configure and start a tool.</fsummary>
- <type>
- <v>Data = term()</v>
- <v>Name = atom()</v>
- <v>WebData = [WebOptions]</v>
- <v>WebOptions = LinkData | Alias | Start</v>
- <v>LinkData = {web_data,{ToolName,Url}}</v>
- <v>Alias = {alias,{VirtualPath,RealPath}} | {alias,{erl_alias,Path,[Modules]}</v>
- <v>Start = {start,StartData}</v>
- <v>ToolName = Url = VirtualPath = RealPath = Path = string()</v>
- <v>Modules = atom()</v>
- <v>StartData = AppData | ChildSpec | Func</v>
- <v>AppData = {app,AppName}</v>
- <v>ChildSpec = {child,child_spec()}</v>
- <d>See the Reference Manual for the module supervisor in the STDLIB application for details about child_spec().</d>
- <v>Func = {func,{StartMod,StartFunc,StartArg}, {StopMod,StopFunc,StopArg}}</v>
- <v>AppName = StartMod = StartFunc = StopMod = StopFunc =atom()</v>
- <v>StartArg = StopArg = [term()]</v>
- </type>
- <desc>
- <p>This is the configuration function (<c>config_func</c>)
- which must be stated in the <c>*.tool</c> file.</p>
- <p>The function is called by WebTool at startup to retrieve the
- data needed to start and configure the tool. <c>LinkData</c> is
- used by WebTool to create the link to the tool. <c>Alias</c> is
- used to create the aliases needed by the webserver. <c>Start</c>
- is used to start and stop the tool.</p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>See Also</title>
- <p><seealso marker="start_webtool">start_webtool(1)</seealso>,
- <seealso marker="webtool_chapter">WebTool User's Guide</seealso></p>
- </section>
-</erlref>
-
diff --git a/lib/webtool/doc/src/webtool_chapter.xml b/lib/webtool/doc/src/webtool_chapter.xml
deleted file mode 100644
index 160a42f855..0000000000
--- a/lib/webtool/doc/src/webtool_chapter.xml
+++ /dev/null
@@ -1,246 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2001</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- </legalnotice>
-
- <title>WebTool User Guide</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>webtool_chapter.xml</file>
- </header>
-
- <section>
- <title>Introduction </title>
- <p>WebTool provides an easy and efficient way to implement web
- based tools with Erlang/OTP. WebTool configures and starts the
- webserver and the various web based tools.</p>
- <p>All tools that shall run under WebTool must have a *.tool
- file in the code path or in its priv directory. When WebTool
- starts it searches the code path for such files. For each
- <c>ebin</c> directory in the path, the <c>priv</c> directory is
- also searched. The *.tool files contain the configuration data
- for each web based tool.</p>
- </section>
-
- <section>
- <title>Starting WebTool</title>
- <p>Start WebTool by calling the function <c>webtool:start/0</c> or
- <c>webtool:start/2</c>. If <c>webtool:start/0</c> is used the
- start page of WebTool is available at
- <em>http://localhost:8888/</em> or
- <em>http://127.0.0.1:8888/</em>, and the directory containing
- the root directory for the webserver, is assumed to be
- <c><![CDATA[webtool-<vsn>/priv]]></c>.</p>
- <p>Use <c>webtool:start/2</c> if the default path for the root
- directory, port, ip-number or server name can not be used. See
- the Reference Manual for <seealso marker="webtool">webtool</seealso> for more information.</p>
- <p>WebTool, with the default configuration as in <c>start/0</c>,
- can also be started with the <c>start_webtool</c> script which
- is available in the <c>priv</c> directory of the WebTool
- application. See the Reference Manual for <seealso marker="start_webtool">start_webtool</seealso> for further
- information about this script. For Windows users, the batch file
- <c>start_webtool.bat</c> can be used for the same purpose.</p>
- </section>
-
- <section>
- <title>Using WebTool</title>
- <p>Start WebTool and point the browser to the corresponding URL.
- At the top of the page there is a frame with a link named
- <em>WebTool</em>. Click that link and a page where it is
- possible to start the available tools will appear in the main
- frame.</p>
- </section>
-
- <section>
- <title>Start a web based tool</title>
- <p>Click on the link labeled <em>WebTool</em> in the topmost frame,
- select the checkbox for each tool to start and
- click on the button labeled <em>Start</em>. A link to each tool
- that WebTool succeeded to start will appear in the topmost frame.</p>
- </section>
-
- <section>
- <title>Stop a web based tool</title>
- <p>Click on the link labeled <em>WebTool</em> in the topmost
- frame. Select <em>Stop Tools</em> in the left frame. Select the
- checkbox for each tool to stop and click on the button labeled
- <em>Stop</em>.</p>
- </section>
-
- <section>
- <title>Develop new web based tools</title>
- <p>WebTool can be used as a framework when developing new web based
- tools.</p>
- <p>A web based tool running under WebTool will typically consist of
- three parts.</p>
- <list type="bulleted">
- <item>A *.tool file which defines how WebTool can find the tool's
- configuration data</item>
- <item>The Erlang code generating the web interface to the tool (HTML
- code)</item>
- <item>The tool itself.</item>
- </list>
- <p>In most cases it is a good idea to separate the code for
- creation of the html-pages and the code for the logic. This
- increases the readability of the code and the logic might be
- possible to reuse.</p>
-
- <section>
- <title>The *.tool file</title>
- <p>When WebTool starts it searches the current path for
- <c>*.tool</c> files to find all available tools. The *.tool
- file contains a version identifier and a list of tuples which
- is the configuration data. The version identifier specifies
- the *.tool file version, i.e. not the version of
- webtool. Currently the only valid version is "1.2" and the
- only valid configuration tag is
- <c>config_func</c>. <c>config_func</c> specifies which
- function WebTool must call to get further configuration data
- for the tool. This means that a *.tool file generally must
- look like this:</p>
- <code type="none">
- {version,"1.2"}.
- [{config_func,{Module,Function,Arguments}}]. </code>
- <p><c>Module</c> is the name of the module where the callback
- function is defined. <c>Function</c> is the name of the
- callback function, and <c>Arguments</c> is the list of
- arguments to the callback function.</p>
- </section>
-
- <section>
- <title>The configuration function</title>
- <p>The *.tool file points out a configuration function. This
- function must return a list of configuration parameters (see
- the Reference Manual for <seealso marker="webtool">webtool</seealso>).</p>
- <p>The <c>web_data</c> parameter is mandatory and it specifies
- the name of the tool and the link to the tool's start
- page. All other parameters are optional.</p>
- <p>If the tool requires any processes to run, the <c>start</c>
- parameter specifies the function that WebTool must call in
- order to start the process(es).</p>
- <p>The <c>alias</c> parameters are passed directly on to the
- webserver (INETS). The webserver has three ways to create
- dynamic web pages CGI, Eval Scheme and Erl Scheme. All tools
- running under WebTool must use Erl Scheme.</p>
- <p>Erl Scheme tries to resemble plain CGI. The big difference is
- that Erl Scheme can only execute Erlang code. The code will
- furthermore be executed on the same instance as the webserver.</p>
- <p>An URL which calls an Erlang function with Erl Scheme can have
- the following syntax:</p>
- <code type="none"><![CDATA[
-http://Servername:Port/ErlScriptAlias/Mod/Func<?QueryString> ]]></code>
- <p>An <c>alias</c> parameter in the configuration function can be
- an ErlScriptAlias as used in the above URL. The definition of
- an ErlScriptAlias shall be like this:</p>
- <p><c>{alias,{erl_alias,Path,[Modules]}}</c>, e.g.</p>
- <p><c>{alias,{erl_alias,"/testtool",[helloworld]}}</c></p>
- <p>The following URL will then cause a call to the function
- helloworld:helloworld/2 (if WebTool is started with default
- settings i.e. servername "localhost" and port 8888):</p>
- <p><c>http://localhost:8888/testtool/helloworld/helloworld</c></p>
- <p>Note that the module <c>helloworld</c> must be in the code
- path of the node running WebTool.</p>
- <p>Functions that are called via the Erl Scheme must take two
- arguments, <c>Environment</c> and <c>Input</c>.
- </p>
- <list type="bulleted">
- <item><c>Environment</c> is a list of key/value tuples.</item>
- <item><c>Input</c> is the part of the URL after the "?", i.e. the
- part of the URL containing name-value pairs. If the page was
- called with the URL:
- <br></br>
-<c><![CDATA[http://localhost:8888/testtool/helloworld/helloworld?input1=one&amp;input2=two]]></c> <br></br>
-<c>Input</c> will be the string
- <c><![CDATA["input1=one&amp;input2=two"]]></c>. In the module
- <c>httpd</c> in the INETS application there is a function
- <c>parse_query</c> which will parse such a string and return
- a list of key-value tuples.</item>
- </list>
- <p>An <c>alias</c> parameter in the configuration function can
- also be a normal path alias. This can e.g. be used to point
- out a directory where HTML files are stored. The following
- definition states that the URL
- <c>http://localhost:8888/mytool_home/</c> really points to the
- directory <c>/usr/local/otp/lib/myapp-1.0/priv</c>:</p>
- <p><c>{alias,{"/mytool_home","/usr/local/otp/lib/myapp-1.0/priv"}}</c></p>
- <p>See the INETS documentation, especially the module
- <c>mod_esi</c>, for a more in depth coverage of the Erl Scheme.</p>
- </section>
-
- <section>
- <title>A small example</title>
- <p>A Hello World example that uses Erl Scheme would look like
- this. Note that this example does not have a process running
- and thus does not need a <c>start</c> parameter in the
- configuration function.
- </p>
- <p><em>helloworld.erl:</em></p>
- <pre>
- -module(helloworld).
- -export([config_data/0]).
- -export([helloworld/2]).
-
- config_data()->
- {testtool,
- [{web_data,{"TestTool","/testtool/helloworld/helloworld"}},
- {alias,{erl_alias,"/testtool",[helloworld]}}]}.
-
- helloworld(_Env,_Input)-&gt;
- [header(),html_header(),helloworld_body(),html_end()].
-
- header() -&gt;
- header("text/html").
-
- header(MimeType) -&gt;
- "Content-type: " ++ MimeType ++ "\r\n\r\n".
-
- html_header() -&gt;
- "&lt;HTML&gt;
- &lt;HEAD&gt;
- &lt;TITLE&gt;Hello world Example &lt;/TITLE&gt;
- &lt;/HEAD&gt;\n".
-
- helloworld_body()-&gt;
- "&lt;BODY&gt;Hello World&lt;/BODY&gt;".
-
- html_end()-&gt;
- "&lt;/HTML&gt;".
- </pre>
- <p>To use this example with WebTool a *.tool file must be created
- and added to a directory in the current path, e.g. the same
- directory as the compiled <c>helloworld.beam</c>.</p>
- <p><em>testtool.tool:</em></p>
- <code type="none">
- {version,"1.2"}.
- [{config_func, {helloworld,config_data,[]}}].
- </code>
- <p>When <c>helloworld.erl</c> is compiled, start WebTool by
- calling the function <c>webtool:start()</c> and point your
- browser to <em>http://localhost:8888/</em>. Select WebTool in
- the topmost frame and start TestTool from the web page. Click
- on the link labeled <em>TestTool</em> in the topmost frame.</p>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/webtool/ebin/.gitignore b/lib/webtool/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/webtool/ebin/.gitignore
+++ /dev/null
diff --git a/lib/webtool/info b/lib/webtool/info
deleted file mode 100644
index 4d8dc6f2cb..0000000000
--- a/lib/webtool/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: tools
-short: A tool that simplifying the use of web based Erlang tools
diff --git a/lib/webtool/priv/Makefile b/lib/webtool/priv/Makefile
deleted file mode 100644
index 4963767a4d..0000000000
--- a/lib/webtool/priv/Makefile
+++ /dev/null
@@ -1,82 +0,0 @@
-# ``Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
-# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
-# AB. All Rights Reserved.''
-#
-# $Id$
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(WEBTOOL_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/webtool-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-WEBSERVER_CONFIG_FILES = root/conf/mime.types
-
-HTDOCS_FILES = root/doc/index.html \
- root/doc/tool_management.html \
- root/doc/start_info.html
-
-ifeq ($(findstring win32,$(TARGET)),win32)
-WIN32_SCRIPTS= bin/start_webtool.bat
-else
-WIN32_SCRIPTS=
-endif
-SCRIPTS = bin/start_webtool $(WIN32_SCRIPTS)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt:
-
-clean:
-
-docs:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/priv"
- $(INSTALL_DIR) "$(RELSYSDIR)/priv/root"
- $(INSTALL_DIR) "$(RELSYSDIR)/priv/root/conf"
- $(INSTALL_DIR) "$(RELSYSDIR)/priv/root/doc"
- $(INSTALL_DATA) $(HTDOCS_FILES) "$(RELSYSDIR)/priv/root/doc"
- $(INSTALL_DATA) $(WEBSERVER_CONFIG_FILES) "$(RELSYSDIR)/priv/root/conf"
- $(INSTALL_DIR) "$(RELSYSDIR)/priv/bin"
- $(INSTALL_SCRIPT) $(SCRIPTS) "$(RELSYSDIR)/priv/bin"
-
-release_docs_spec:
-
-
diff --git a/lib/webtool/priv/bin/start_webtool b/lib/webtool/priv/bin/start_webtool
deleted file mode 100755
index e552fb5af0..0000000000
--- a/lib/webtool/priv/bin/start_webtool
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-erl -sname webtool -s webtool script_start $@
diff --git a/lib/webtool/priv/bin/start_webtool.bat b/lib/webtool/priv/bin/start_webtool.bat
deleted file mode 100644
index cd16aa6200..0000000000
--- a/lib/webtool/priv/bin/start_webtool.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@ECHO OFF
-CALL erl -sname webtool -s webtool script_start %* -s erlang halt \ No newline at end of file
diff --git a/lib/webtool/priv/root/conf/mime.types b/lib/webtool/priv/root/conf/mime.types
deleted file mode 100644
index 32f7cd853c..0000000000
--- a/lib/webtool/priv/root/conf/mime.types
+++ /dev/null
@@ -1,99 +0,0 @@
-# This is a comment. I love comments.
-
-application/activemessage
-application/andrew-inset
-application/applefile
-application/atomicmail
-application/dca-rft
-application/dec-dx
-application/mac-binhex40 hqx
-application/mac-compactpro cpt
-application/macwriteii
-application/msword doc
-application/news-message-id
-application/news-transmission
-application/octet-stream bin dms lha lzh exe class
-application/oda oda
-application/pdf pdf
-application/postscript ai eps ps
-application/powerpoint ppt
-application/remote-printing
-application/rtf rtf
-application/slate
-application/wita
-application/wordperfect5.1
-application/x-bcpio bcpio
-application/x-cdlink vcd
-application/x-compress Z
-application/x-cpio cpio
-application/x-csh csh
-application/x-director dcr dir dxr
-application/x-dvi dvi
-application/x-gtar gtar
-application/x-gzip gz
-application/x-hdf hdf
-application/x-httpd-cgi cgi
-application/x-koan skp skd skt skm
-application/x-latex latex
-application/x-mif mif
-application/x-netcdf nc cdf
-application/x-sh sh
-application/x-shar shar
-application/x-stuffit sit
-application/x-sv4cpio sv4cpio
-application/x-sv4crc sv4crc
-application/x-tar tar
-application/x-tcl tcl
-application/x-tex tex
-application/x-texinfo texinfo texi
-application/x-troff t tr roff
-application/x-troff-man man
-application/x-troff-me me
-application/x-troff-ms ms
-application/x-ustar ustar
-application/x-wais-source src
-application/zip zip
-audio/basic au snd
-audio/mpeg mpga mp2
-audio/x-aiff aif aiff aifc
-audio/x-pn-realaudio ram
-audio/x-pn-realaudio-plugin rpm
-audio/x-realaudio ra
-audio/x-wav wav
-chemical/x-pdb pdb xyz
-image/gif gif
-image/ief ief
-image/jpeg jpeg jpg jpe
-image/png png
-image/tiff tiff tif
-image/x-cmu-raster ras
-image/x-portable-anymap pnm
-image/x-portable-bitmap pbm
-image/x-portable-graymap pgm
-image/x-portable-pixmap ppm
-image/x-rgb rgb
-image/x-xbitmap xbm
-image/x-xpixmap xpm
-image/x-xwindowdump xwd
-message/external-body
-message/news
-message/partial
-message/rfc822
-multipart/alternative
-multipart/appledouble
-multipart/digest
-multipart/mixed
-multipart/parallel
-text/html html htm
-text/x-server-parsed-html shtml
-text/plain txt
-text/richtext rtx
-text/tab-separated-values tsv
-text/x-setext etx
-text/x-sgml sgml sgm
-video/mpeg mpeg mpg mpe
-video/quicktime qt mov
-video/x-msvideo avi
-video/x-sgi-movie movie
-x-conference/x-cooltalk ice
-x-world/x-vrml wrl vrml
diff --git a/lib/webtool/priv/root/doc/index.html b/lib/webtool/priv/root/doc/index.html
deleted file mode 100644
index 9fbb143cc7..0000000000
--- a/lib/webtool/priv/root/doc/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>Erlang WebTool</TITLE>
-</HEAD>
-<FRAMESET ROWS="60,*">
-<FRAME NAME="top1" SRC="webtool/webtool/started_tools">
-<FRAME NAME="app_frame" SRC="./start_info.html">
-</FRAMESET>
-</HTML>
-
-
diff --git a/lib/webtool/priv/root/doc/start_info.html b/lib/webtool/priv/root/doc/start_info.html
deleted file mode 100644
index fcf44433f1..0000000000
--- a/lib/webtool/priv/root/doc/start_info.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<HTML>
-<HEAD>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF">
-<TABLE WIDTH=100% HEIGHT=100%>
-<TR VALIGN="middle">
-<TD ALIGN="center">
-
-<TABLE WIDTH="60%">
-<TR>
-<TD ALIGN="center"><FONT SIZE=6>Welcome <BR> to<BR> WebTool</FONT></TD>
-</TR>
-
-<TR>
-<TD><BR><BR><BR><BR>
-</TD>
-</TR>
-
-<TR>
-<TD ALIGN="center">Click on the link WebTool on the top of the page, or <A HREF=tool_management.html>here</a> to start the Web based tools.</TD>
-</TR>
-</TABLE>
-
-</TD>
-</TR>
-</TABLE>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/lib/webtool/priv/root/doc/tool_management.html b/lib/webtool/priv/root/doc/tool_management.html
deleted file mode 100644
index 19d9dbcb9e..0000000000
--- a/lib/webtool/priv/root/doc/tool_management.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>Erlang WebTool </TITLE>
-</HEAD>
-<FRAMESET COLS="200,*">
-<FRAME NAME="left" SRC="/webtool/webtool/toolbar">
-<FRAME NAME="right" SRC="/webtool/webtool/start_tools">
-</FRAMESET>
-
diff --git a/lib/webtool/src/webtool.app.src b/lib/webtool/src/webtool.app.src
deleted file mode 100644
index 6b9750c2b4..0000000000
--- a/lib/webtool/src/webtool.app.src
+++ /dev/null
@@ -1,28 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-{application,webtool,
- [{description,"Toolbar lookalike for the web"},
- {vsn,"%VSN%"},
- {modules,[webtool,webtool_sup]},
- {registered,[web_tool,websup]},
- {applications,[kernel,stdlib]},
- {runtime_dependencies, ["stdlib-2.0","observer-2.0","kernel-3.0",
- "inets-5.10","erts-6.0"]}]}.
-
diff --git a/lib/webtool/src/webtool.appup.src b/lib/webtool/src/webtool.appup.src
deleted file mode 100644
index 1394d0d6d5..0000000000
--- a/lib/webtool/src/webtool.appup.src
+++ /dev/null
@@ -1,22 +0,0 @@
-%% -*- erlang -*-
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-{"%VSN%",
- [{<<".*">>,[{restart_application, webtool}]}],
- [{<<".*">>,[{restart_application, webtool}]}]
-}.
diff --git a/lib/webtool/src/webtool.erl b/lib/webtool/src/webtool.erl
deleted file mode 100644
index a0f2b5aab0..0000000000
--- a/lib/webtool/src/webtool.erl
+++ /dev/null
@@ -1,1207 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2010. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(webtool).
--behaviour(gen_server).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% The general idea is: %%
-%% %%
-%% %%
-%% 1. Scan through the path for *.tool files and find all the web %%
-%% based tools. Query each tool for configuration data. %%
-%% 2. Add Alias for Erlscript and html for each tool to %%
-%% the webserver configuration data. %%
-%% 3. Start the webserver. %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% API functions
--export([start/0, start/2, stop/0]).
-
-%% Starting Webtool from a shell script
--export([script_start/0, script_start/1]).
-
-%% Web api
--export([started_tools/2, toolbar/2, start_tools/2, stop_tools/2]).
-
-%% API against other tools
--export([is_localhost/0]).
-
-%% Debug export s
--export([get_tools1/1]).
--export([debug/1, stop_debug/0, debug_app/1]).
-
-%% gen_server callbacks
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
-
--include_lib("kernel/include/file.hrl").
--include_lib("stdlib/include/ms_transform.hrl").
-
--record(state,{priv_dir,app_data,supvis,web_data,started=[]}).
-
--define(MAX_NUMBER_OF_WEBTOOLS,256).
--define(DEFAULT_PORT,8888).% must be >1024 or the user must be root on unix
--define(DEFAULT_ADDR,{127,0,0,1}).
-
--define(WEBTOOL_ALIAS,{webtool,[{alias,{erl_alias,"/webtool",[webtool]}}]}).
--define(HEADER,"Pragma:no-cache\r\n Content-type: text/html\r\n\r\n").
--define(HTML_HEADER,"<HTML>\r\n<HEAD>\r\n<TITLE>WebTool</TITLE>\r\n</HEAD>\r\n<BODY BGCOLOR=\"#FFFFFF\">\r\n").
--define(HTML_HEADER_RELOAD,"<HTML>\r\n<HEAD>\r\n<TITLE>WebTool
- </TITLE>\r\n</HEAD>\r\n
- <BODY BGCOLOR=\"#FFFFFF\" onLoad=reloadCompiledList()>\r\n").
-
--define(HTML_END,"</BODY></HTML>").
-
--define(SEND_URL_TIMEOUT,5000).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% For debugging only. %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Start tracing with
-%% debug(Functions).
-%% Functions = local | global | FunctionList
-%% FunctionList = [Function]
-%% Function = {FunctionName,Arity} | FunctionName |
-%% {Module, FunctionName, Arity} | {Module,FunctionName}
-debug(F) ->
- ttb:tracer(all,[{file,"webtool.trc"}]), % tracing all nodes
- ttb:p(all,[call,timestamp]),
- MS = [{'_',[],[{return_trace},{message,{caller}}]}],
- tp(F,MS),
- ttb:ctp(?MODULE,stop_debug), % don't want tracing of the stop_debug func
- ok.
-tp(local,MS) -> % all functions
- ttb:tpl(?MODULE,MS);
-tp(global,MS) -> % all exported functions
- ttb:tp(?MODULE,MS);
-tp([{M,F,A}|T],MS) -> % Other module
- ttb:tpl(M,F,A,MS),
- tp(T,MS);
-tp([{M,F}|T],MS) when is_atom(F) -> % Other module
- ttb:tpl(M,F,MS),
- tp(T,MS);
-tp([{F,A}|T],MS) -> % function/arity
- ttb:tpl(?MODULE,F,A,MS),
- tp(T,MS);
-tp([F|T],MS) -> % function
- ttb:tpl(?MODULE,F,MS),
- tp(T,MS);
-tp([],_MS) ->
- ok.
-stop_debug() ->
- ttb:stop([format]).
-
-debug_app(Mod) ->
- ttb:tracer(all,[{file,"webtool_app.trc"},{handler,{fun out/4,true}}]),
- ttb:p(all,[call,timestamp]),
- MS = [{'_',[],[{return_trace},{message,{caller}}]}],
- ttb:tp(Mod,MS),
- ok.
-
-out(_,{trace_ts,Pid,call,MFA={M,F,A},{W,_,_},TS},_,S)
- when W==webtool;W==mod_esi->
- io:format("~w: (~p)~ncall ~s~n", [TS,Pid,ffunc(MFA)]),
- [{M,F,length(A)}|S];
-out(_,{trace_ts,Pid,return_from,MFA,R,TS},_,[MFA|S]) ->
- io:format("~w: (~p)~nreturned from ~s -> ~p~n", [TS,Pid,ffunc(MFA),R]),
- S;
-out(_,_,_,_) ->
- ok.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Functions called via script. %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-script_start() ->
- usage(),
- halt().
-script_start([App]) ->
- DefaultBrowser =
- case os:type() of
- {win32,_} -> iexplore;
- _ -> firefox
- end,
- script_start([App,DefaultBrowser]);
-script_start([App,Browser]) ->
- io:format("Starting webtool...\n"),
- start(),
- AvailableApps = get_applications(),
- {OSType,_} = os:type(),
- case lists:keysearch(App,1,AvailableApps) of
- {value,{App,StartPage}} ->
- io:format("Starting ~w...\n",[App]),
- start_tools([],"app=" ++ atom_to_list(App)),
- PortStr = integer_to_list(get_port()),
- Url = case StartPage of
- "/" ++ Page ->
- "http://localhost:" ++ PortStr ++ "/" ++ Page;
- _ ->
- "http://localhost:" ++ PortStr ++ "/" ++ StartPage
- end,
- case Browser of
- none ->
- ok;
- iexplore when OSType == win32->
- io:format("Starting internet explorer...\n"),
- {ok,R} = win32reg:open(""),
- Key="\\local_machine\\SOFTWARE\\Microsoft\\IE Setup\\Setup",
- win32reg:change_key(R,Key),
- {ok,Val} = win32reg:value(R,"Path"),
- IExplore=filename:join(win32reg:expand(Val),"iexplore.exe"),
- os:cmd("\"" ++ IExplore ++ "\" " ++ Url);
- _ when OSType == win32 ->
- io:format("Starting ~w...\n",[Browser]),
- os:cmd("\"" ++ atom_to_list(Browser) ++ "\" " ++ Url);
- B when B==firefox; B==mozilla ->
- io:format("Sending URL to ~w...",[Browser]),
- BStr = atom_to_list(Browser),
- SendCmd = BStr ++ " -raise -remote \'openUrl(" ++
- Url ++ ")\'",
- Port = open_port({spawn,SendCmd},[exit_status]),
- receive
- {Port,{exit_status,0}} ->
- io:format("done\n"),
- ok;
- {Port,{exit_status,_Error}} ->
- io:format(" not running, starting ~w...\n",
- [Browser]),
- os:cmd(BStr ++ " " ++ Url),
- ok
- after ?SEND_URL_TIMEOUT ->
- io:format(" failed, starting ~w...\n",[Browser]),
- erlang:port_close(Port),
- os:cmd(BStr ++ " " ++ Url)
- end;
- _ ->
- io:format("Starting ~w...\n",[Browser]),
- os:cmd(atom_to_list(Browser) ++ " " ++ Url)
- end,
- ok;
- false ->
- stop(),
- io:format("\n{error,{unknown_app,~p}}\n",[App]),
- halt()
- end.
-
-usage() ->
- io:format("Starting webtool...\n"),
- start(),
- Apps = lists:map(fun({A,_}) -> A end,get_applications()),
- io:format(
- "\nUsage: start_webtool application [ browser ]\n"
- "\nAvailable applications are: ~p\n"
- "Default browser is \'iexplore\' (Internet Explorer) on Windows "
- "or else \'firefox\'\n",
- [Apps]),
- stop().
-
-
-get_applications() ->
- gen_server:call(web_tool,get_applications).
-
-get_port() ->
- gen_server:call(web_tool,get_port).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Api functions to the genserver. %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%----------------------------------------------------------------------
-%
-%----------------------------------------------------------------------
-
-start()->
- start(standard_path,standard_data).
-
-start(Path,standard_data)->
- case get_standard_data() of
- {error,Reason} ->
- {error,Reason};
- Data ->
- start(Path,Data)
- end;
-
-start(standard_path,Data)->
- Path=get_path(),
- start(Path,Data);
-
-start(Path,Port) when is_integer(Port)->
- Data = get_standard_data(Port),
- start(Path,Data);
-
-start(Path,Data0)->
- Data = Data0 ++ rest_of_standard_data(),
- gen_server:start({local,web_tool},webtool,{Path,Data},[]).
-
-stop()->
- gen_server:call(web_tool,stoppit).
-
-%----------------------------------------------------------------------
-%Web Api functions called by the web
-%----------------------------------------------------------------------
-started_tools(Env,Input)->
- gen_server:call(web_tool,{started_tools,Env,Input}).
-
-toolbar(Env,Input)->
- gen_server:call(web_tool,{toolbar,Env,Input}).
-
-start_tools(Env,Input)->
- gen_server:call(web_tool,{start_tools,Env,Input}).
-
-stop_tools(Env,Input)->
- gen_server:call(web_tool,{stop_tools,Env,Input}).
-%----------------------------------------------------------------------
-%Support API for other tools
-%----------------------------------------------------------------------
-
-is_localhost()->
- gen_server:call(web_tool,is_localhost).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%%The gen_server callback functions that builds the webbpages %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-handle_call(get_applications,_,State)->
- MS = ets:fun2ms(fun({Tool,{web_data,{_,Start}}}) -> {Tool,Start} end),
- Tools = ets:select(State#state.app_data,MS),
- {reply,Tools,State};
-
-handle_call(get_port,_,State)->
- {value,{port,Port}}=lists:keysearch(port,1,State#state.web_data),
- {reply,Port,State};
-
-handle_call({started_tools,_Env,_Input},_,State)->
- {reply,started_tools_page(State),State};
-
-handle_call({toolbar,_Env,_Input},_,State)->
- {reply,toolbar(),State};
-
-handle_call({start_tools,Env,Input},_,State)->
- {NewState,Page}=start_tools_page(Env,Input,State),
- {reply,Page,NewState};
-
-handle_call({stop_tools,Env,Input},_,State)->
- {NewState,Page}=stop_tools_page(Env,Input,State),
- {reply,Page,NewState};
-
-handle_call(stoppit,_From,Data)->
- {stop,normal,ok,Data};
-
-handle_call(is_localhost,_From,Data)->
- Result=case proplists:get_value(bind_address, Data#state.web_data) of
- ?DEFAULT_ADDR ->
- true;
- _IpNumber ->
- false
- end,
- {reply,Result,Data}.
-
-
-handle_info(_Message,State)->
- {noreply,State}.
-
-handle_cast(_Request,State)->
- {noreply,State}.
-
-code_change(_,State,_)->
- {ok,State}.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% The other functions needed by the gen_server behaviour
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%----------------------------------------------------------------------
-% Start the gen_server
-%----------------------------------------------------------------------
-init({Path,Config})->
- case filelib:is_dir(Path) of
- true ->
- {ok, Table} = get_tool_files_data(),
- insert_app(?WEBTOOL_ALIAS, Table),
- case webtool_sup:start_link() of
- {ok, Pid} ->
- case start_webserver(Table, Path, Config) of
- {ok, _} ->
- print_url(Config),
- {ok,#state{priv_dir=Path,
- app_data=Table,
- supvis=Pid,
- web_data=Config}};
- {error, Error} ->
- {stop, {error, Error}}
- end;
- Error ->
- {stop,Error}
- end;
- false ->
- {stop, {error, error_dir}}
- end.
-
-terminate(_Reason,Data)->
- %%shut down the webbserver
- shutdown_server(Data),
- %%Shutdown the different tools that are started with application:start
- shutdown_apps(Data),
- %%Shutdown the supervisor and its children will die
- shutdown_supervisor(Data),
- ok.
-
-print_url(ConfigData)->
- Server=proplists:get_value(server_name,ConfigData,"undefined"),
- Port=proplists:get_value(port,ConfigData,"undefined"),
- {A,B,C,D}=proplists:get_value(bind_address,ConfigData,"undefined"),
- io:format("WebTool is available at http://~s:~w/~n",[Server,Port]),
- io:format("Or http://~w.~w.~w.~w:~w/~n",[A,B,C,D,Port]).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% begin build the pages
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------------------------------------
-%The page that shows the started tools
-%----------------------------------------------------------------------
-started_tools_page(State)->
- [?HEADER,?HTML_HEADER,started_tools(State),?HTML_END].
-
-toolbar()->
- [?HEADER,?HTML_HEADER,toolbar_page(),?HTML_END].
-
-
-start_tools_page(_Env,Input,State)->
- %%io:format("~n======= ~n ~p ~n============~n",[Input]),
- case get_tools(Input) of
- {tools,Tools}->
- %%io:format("~n======= ~n ~p ~n============~n",[Tools]),
- {ok,NewState}=handle_apps(Tools,State,start),
- {NewState,[?HEADER,?HTML_HEADER_RELOAD,reload_started_apps(),
- show_unstarted_apps(NewState),?HTML_END]};
- _ ->
- {State,[?HEADER,?HTML_HEADER,show_unstarted_apps(State),?HTML_END]}
- end.
-
-stop_tools_page(_Env,Input,State)->
- case get_tools(Input) of
- {tools,Tools}->
- {ok,NewState}=handle_apps(Tools,State,stop),
- {NewState,[?HEADER,?HTML_HEADER_RELOAD,reload_started_apps(),
- show_started_apps(NewState),?HTML_END]};
- _ ->
- {State,[?HEADER,?HTML_HEADER,show_started_apps(State),?HTML_END]}
- end.
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%% Functions that start and config the webserver
-%% 1. Collect the config data
-%% 2. Start webserver
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------------------------------------
-% Start the webserver
-%----------------------------------------------------------------------
-start_webserver(Data,Path,Config)->
- case get_conf_data(Data,Path,Config) of
- {ok,Conf_data}->
- %%io:format("Conf_data: ~p~n",[Conf_data]),
- start_server(Conf_data);
- {error,Error} ->
- {error,{error_server_conf_file,Error}}
- end.
-
-start_server(Conf_data)->
- case inets:start(httpd, Conf_data, stand_alone) of
- {ok,Pid}->
- {ok,Pid};
- Error->
- {error,{server_error,Error}}
- end.
-
-%----------------------------------------------------------------------
-% Create config data for the webserver
-%----------------------------------------------------------------------
-get_conf_data(Data,Path,Config)->
- Aliases=get_aliases(Data),
- ServerRoot = filename:join([Path,"root"]),
- MimeTypesFile = filename:join([ServerRoot,"conf","mime.types"]),
- case httpd_conf:load_mime_types(MimeTypesFile) of
- {ok,MimeTypes} ->
- Config1 = Config ++ Aliases,
- Config2 = [{server_root,ServerRoot},
- {document_root,filename:join([Path,"root/doc"])},
- {mime_types,MimeTypes} |
- Config1],
- {ok,Config2};
- Error ->
- Error
- end.
-
-%----------------------------------------------------------------------
-% Control the path for *.tools files
-%----------------------------------------------------------------------
-get_tool_files_data()->
- Tools=get_tools1(code:get_path()),
- %%io:format("Data : ~p ~n",[Tools]),
- get_file_content(Tools).
-
-%----------------------------------------------------------------------
-%Control that the data in the file really is erlang terms
-%----------------------------------------------------------------------
-get_file_content(Tools)->
- Get_data=fun({tool,ToolData}) ->
- %%io:format("Data : ~p ~n",[ToolData]),
- case proplists:get_value(config_func,ToolData) of
- {M,F,A}->
- case catch apply(M,F,A) of
- {'EXIT',_} ->
- bad_data;
- Data when is_tuple(Data) ->
- Data;
- _->
- bad_data
- end;
- _ ->
- bad_data
- end
- end,
- insert_file_content([X ||X<-lists:map(Get_data,Tools),X/=bad_data]).
-
-%----------------------------------------------------------------------
-%Insert the data from the file in to the ets:table
-%----------------------------------------------------------------------
-insert_file_content(Content)->
- Table=ets:new(app_data,[bag]),
- lists:foreach(fun(X)->
- insert_app(X,Table)
- end,Content),
- {ok,Table}.
-
-%----------------------------------------------------------------------
-%Control that we got a a tuple of a atom and a list if so add the
-%elements in the list to the ets:table
-%----------------------------------------------------------------------
-insert_app({Name,Key_val_list},Table) when is_list(Key_val_list),is_atom(Name)->
- %%io:format("ToolData: ~p: ~p~n",[Name,Key_val_list]),
- lists:foreach(
- fun({alias,{erl_alias,Alias,Mods}}) ->
- Key_val = {erl_script_alias,{Alias,Mods}},
- %%io:format("Insert: ~p~n",[Key_val]),
- ets:insert(Table,{Name,Key_val});
- (Key_val_pair)->
- %%io:format("Insert: ~p~n",[Key_val_pair]),
- ets:insert(Table,{Name,Key_val_pair})
- end,
- Key_val_list);
-
-insert_app(_,_)->
- ok.
-
-%----------------------------------------------------------------------
-% Select all the alias in the database
-%----------------------------------------------------------------------
-get_aliases(Data)->
- MS = ets:fun2ms(fun({_,{erl_script_alias,Alias}}) ->
- {erl_script_alias,Alias};
- ({_,{alias,Alias}}) ->
- {alias,Alias}
- end),
- ets:select(Data,MS).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Helper functions %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_standard_data(Port)->
- [
- {port,Port},
- {bind_address,?DEFAULT_ADDR},
- {server_name,"localhost"}
- ].
-
-get_standard_data()->
- case get_free_port(?DEFAULT_PORT,?MAX_NUMBER_OF_WEBTOOLS) of
- {error,Reason} -> {error,Reason};
- Port ->
- [
- {port,Port},
- {bind_address,?DEFAULT_ADDR},
- {server_name,"localhost"}
- ]
- end.
-
-get_free_port(_Port,0) ->
- {error,no_free_port_found};
-get_free_port(Port,N) ->
- case gen_tcp:connect("localhost",Port,[]) of
- {error, _Reason} ->
- Port;
- {ok,Sock} ->
- gen_tcp:close(Sock),
- get_free_port(Port+1,N-1)
- end.
-
-rest_of_standard_data() ->
- [
- %% Do not allow the server to be crashed by malformed http-request
- {max_header_siz,1024},
- {max_header_action,reply414},
- %% Go on a straight ip-socket
- {com_type,ip_comm},
- %% Do not change the order of these module names!!
- {modules,[mod_alias,
- mod_auth,
- mod_esi,
- mod_actions,
- mod_cgi,
- mod_dir,
- mod_get,
- mod_head,
- mod_log,
- mod_disk_log]},
- {directory_index,["index.html"]},
- {default_type,"text/plain"}
- ].
-
-
-get_path()->
- code:priv_dir(webtool).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% These functions is used to shutdown the webserver
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------------------------------------
-% Shut down the webbserver
-%----------------------------------------------------------------------
-shutdown_server(State)->
- {Addr,Port} = get_addr_and_port(State#state.web_data),
- inets:stop(httpd,{Addr,Port}).
-
-get_addr_and_port(Config) ->
- Addr = proplists:get_value(bind_address,Config,?DEFAULT_ADDR),
- Port = proplists:get_value(port,Config,?DEFAULT_PORT),
- {Addr,Port}.
-
-%----------------------------------------------------------------------
-% Select all apps in the table and close them
-%----------------------------------------------------------------------
-shutdown_apps(State)->
- Data=State#state.app_data,
- MS = ets:fun2ms(fun({_,{start,HowToStart}}) -> HowToStart end),
- lists:foreach(fun(Start_app)->
- stop_app(Start_app)
- end,
- ets:select(Data,MS)).
-
-%----------------------------------------------------------------------
-%Shuts down the supervisor that supervises tools that is not
-%Designed as applications
-%----------------------------------------------------------------------
-shutdown_supervisor(State)->
- %io:format("~n==================~n"),
- webtool_sup:stop(State#state.supvis).
- %io:format("~n==================~n").
-
-%----------------------------------------------------------------------
-%close the individual apps.
-%----------------------------------------------------------------------
-stop_app({child,_Real_name})->
- ok;
-
-stop_app({app,Real_name})->
- application:stop(Real_name);
-
-stop_app({func,_Start,Stop})->
- case Stop of
- {M,F,A} ->
- catch apply(M,F,A);
- _NoStop ->
- ok
- end.
-
-
-
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%% These functions creates the webpage where the user can select if
-%% to start apps or to stop apps
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-toolbar_page()->
- "<TABLE>
- <TR>
- <TD>
- <B>Select Action</B>
- </TD>
- </TR>
- <TR>
- <TD>
- <A HREF=\"./start_tools\" TARGET=right> Start Tools</A>
- </TD>
- </TR>
- <TR>
- <TD>
- <A HREF=\"./stop_tools\" TARGET=right> Stop Tools</A>
- </TD>
- </TR>
- </TABLE>".
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%% These functions creates the webbpage that shows the started apps
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------------------------------------
-% started_tools(State)->String (html table)
-% State is a record of type state
-%----------------------------------------------------------------------
-started_tools(State)->
- Names=get_started_apps(State#state.app_data,State#state.started),
- "<TABLE BORDER=1 WIDTH=100%>
- "++ make_rows(Names,[],0) ++"
- </TABLE>".
-%----------------------------------------------------------------------
-%get_started_apps(Data,Started)-> [{web_name,link}]
-%selects the started apps from the ets table of apps.
-%----------------------------------------------------------------------
-
-get_started_apps(Data,Started)->
- SelectData=fun({Name,Link}) ->
- {Name,Link}
- end,
- MS = lists:map(fun(A) -> {{A,{web_data,'$1'}},[],['$1']} end,Started),
-
- [{"WebTool","/tool_management.html"} |
- [SelectData(X) || X <- ets:select(Data,MS)]].
-
-%----------------------------------------------------------------------
-% make_rows(List,Result,Fields)-> String (The rows of a htmltable
-% List a list of tupler discibed above
-% Result an accumulator for the result
-% Field, counter that counts the number of cols in each row.
-%----------------------------------------------------------------------
-make_rows([],Result,Fields)->
- Result ++ fill_out(Fields);
-make_rows([Data|Paths],Result,Field)when Field==0->
- make_rows(Paths,Result ++ "<TR>" ++ make_field(Data),Field+1);
-
-make_rows([Path|Paths],Result,Field)when Field==4->
- make_rows(Paths,Result ++ make_field(Path) ++ "</TR>",0);
-
-make_rows([Path|Paths],Result,Field)->
- make_rows(Paths,Result ++ make_field(Path),Field+1).
-
-%----------------------------------------------------------------------
-% make_fields(Path)-> String that is a field i a html table
-% Path is a name url tuple {Name,url}
-%----------------------------------------------------------------------
-make_field(Path)->
- "<TD WIDTH=20%>" ++ get_name(Path) ++ "</TD>".
-
-
-%----------------------------------------------------------------------
-%get_name({Nae,Url})->String that represents a <A> tag in html.
-%----------------------------------------------------------------------
-get_name({Name,Url})->
- "<A HREF=\"" ++ Url ++ "\" TARGET=app_frame>" ++ Name ++ "</A>".
-
-
-%----------------------------------------------------------------------
-% fill_out(Nr)-> String, that represent Nr fields in a html-table.
-%----------------------------------------------------------------------
-fill_out(Nr)when Nr==0->
- [];
-fill_out(Nr)when Nr==4->
- "<TD WIDTH=\"20%\" >&nbsp</TD></TR>";
-
-fill_out(Nr)->
- "<TD WIDTH=\"20%\">&nbsp</TD>" ++ fill_out(Nr+1).
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%%These functions starts applicatons and builds the page showing tools
-%%to start
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%----------------------------------------------------------------------
-%Controls whether the user selected a tool to start
-%----------------------------------------------------------------------
-get_tools(Input)->
- case httpd:parse_query(Input) of
- []->
- no_tools;
- Tools->
- FormatData=fun({_Name,Data}) -> list_to_atom(Data) end,
- SelectData=
- fun({Name,_Data}) -> string:equal(Name,"app") end,
- {tools,[FormatData(X)||X<-Tools,SelectData(X)]}
- end.
-
-%----------------------------------------------------------------------
-% Selects the data to start the applications the user has ordered
-% starting of
-%----------------------------------------------------------------------
-handle_apps([],State,_Cmd)->
- {ok,State};
-
-handle_apps([Tool|Tools],State,Cmd)->
- case ets:match_object(State#state.app_data,{Tool,{start,'_'}}) of
- []->
- Started = case Cmd of
- start ->
- [Tool|State#state.started];
- stop ->
- lists:delete(Tool,State#state.started)
- end,
- {ok,#state{priv_dir=State#state.priv_dir,
- app_data=State#state.app_data,
- supvis=State#state.supvis,
- web_data=State#state.web_data,
- started=Started}};
- ToStart ->
- case handle_apps2(ToStart,State,Cmd) of
- {ok,NewState}->
- handle_apps(Tools,NewState,Cmd);
- _->
- handle_apps(Tools,State,Cmd)
- end
- end.
-
-%----------------------------------------------------------------------
-%execute every start or stop data about a tool.
-%----------------------------------------------------------------------
-handle_apps2([{Name,Start_data}],State,Cmd)->
- case handle_app({Name,Start_data},State#state.app_data,State#state.supvis,Cmd) of
- ok->
- Started = case Cmd of
- start ->
- [Name|State#state.started];
- stop ->
-
- lists:delete(Name,State#state.started)
- end,
- {ok,#state{priv_dir=State#state.priv_dir,
- app_data=State#state.app_data,
- supvis=State#state.supvis,
- web_data=State#state.web_data,
- started=Started}};
- _->
- error
- end;
-
-handle_apps2([{Name,Start_data}|Rest],State,Cmd)->
- case handle_app({Name,Start_data},State#state.app_data,State#state.supvis,Cmd)of
- ok->
- handle_apps2(Rest,State,Cmd);
- _->
- error
- end.
-
-
-%----------------------------------------------------------------------
-% Handle start and stop of applications
-%----------------------------------------------------------------------
-
-handle_app({Name,{start,{func,Start,Stop}}},Data,_Pid,Cmd)->
- Action = case Cmd of
- start ->
- Start;
- _ ->
- Stop
- end,
- case Action of
- {M,F,A} ->
- case catch apply(M,F,A) of
- {'EXIT',_} = Exit->
- %%! Here the tool disappears from the webtool interface!!
- io:format("\n=======ERROR (webtool, line ~w) =======\n"
- "Could not start application \'~p\'\n\n"
- "~w:~w(~s) ->\n"
- "~p\n\n",
- [?LINE,Name,M,F,format_args(A),Exit]),
- ets:delete(Data,Name);
- _OK->
- ok
- end;
- _NoStart ->
- ok
- end;
-
-
-handle_app({Name,{start,{child,ChildSpec}}},Data,Pid,Cmd)->
- case Cmd of
- start ->
- case catch supervisor:start_child(Pid,ChildSpec) of
- {ok,_}->
- ok;
- {ok,_,_}->
- ok;
- {error,Reason}->
- %%! Here the tool disappears from the webtool interface!!
- io:format("\n=======ERROR (webtool, line ~w) =======\n"
- "Could not start application \'~p\'\n\n"
- "supervisor:start_child(~p,~p) ->\n"
- "~p\n\n",
- [?LINE,Name,Pid,ChildSpec,{error,Reason}]),
- ets:delete(Data,Name);
- Error ->
- %%! Here the tool disappears from the webtool interface!!
- io:format("\n=======ERROR (webtool, line ~w) =======\n"
- "Could not start application \'~p\'\n\n"
- "supervisor:start_child(~p,~p) ->\n"
- "~p\n\n",
- [?LINE,Name,Pid,ChildSpec,Error]),
- ets:delete(Data,Name)
- end;
- stop ->
- case catch supervisor:terminate_child(websup,element(1,ChildSpec)) of
- ok ->
- supervisor:delete_child(websup,element(1,ChildSpec));
- _ ->
- error
- end
- end;
-
-
-
-handle_app({Name,{start,{app,Real_name}}},Data,_Pid,Cmd)->
- case Cmd of
- start ->
- case application:start(Real_name,temporary) of
- ok->
- io:write(Name),
- ok;
- {error,{already_started,_}}->
- %% Remove it from the database so we dont start
- %% anything already started
- ets:match_delete(Data,{Name,{start,{app,Real_name}}}),
- ok;
- {error,_Reason}=Error->
- %%! Here the tool disappears from the webtool interface!!
- io:format("\n=======ERROR (webtool, line ~w) =======\n"
- "Could not start application \'~p\'\n\n"
- "application:start(~p,~p) ->\n"
- "~p\n\n",
- [?LINE,Name,Real_name,temporary,Error]),
- ets:delete(Data,Name)
- end;
-
- stop ->
- application:stop(Real_name)
- end;
-
-%----------------------------------------------------------------------
-% If the data is incorrect delete the app
-%----------------------------------------------------------------------
-handle_app({Name,Incorrect},Data,_Pid,Cmd)->
- %%! Here the tool disappears from the webtool interface!!
- io:format("\n=======ERROR (webtool, line ~w) =======\n"
- "Could not ~w application \'~p\'\n\n"
- "Incorrect data: ~p\n\n",
- [?LINE,Cmd,Name,Incorrect]),
- ets:delete(Data,Name).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% this functions creates the page that shows the unstarted tools %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-reload_started_apps()->
- "<script>
- function reloadCompiledList()
- {
- parent.parent.top1.document.location.href=\"/webtool/webtool/started_tools\";
- }
- </script>".
-
-show_unstarted_apps(State)->
- "<TABLE HEIGHT=100% WIDTH=100% BORDER=0>
- <TR HEIGHT=80%><TD ALIGN=\"center\" VALIGN=\"middle\">
- <FORM NAME=\"stop_apps\" ACTION=\"/webtool/webtool/start_tools\" >
- <TABLE BORDER=1 WIDTH=60%>
- <TR BGCOLOR=\"#8899AA\">
- <TD ALIGN=CENTER COLSPAN=2><FONT SIZE=4>Available Tools<FONT></TD>
- </TR>
- <TR>
- <TD WIDTH=50%>
- <TABLE BORDER=0>
- "++ list_available_apps(State)++"
- <TR><TD COLSPAN=2>&nbsp;</TD></TR>
- <TR>
- <TD COLSPAN=2 ALIGN=\"center\">
- <INPUT TYPE=submit VALUE=\"Start\">
- </TD>
- </TR>
- </TABLE>
- </TD>
- <TD>
- To Start a Tool:
- <UL>
- <LI>Select the
- checkbox for each tool to
- start.</LI>
- <LI>Click on the
- button marked <EM>Start</EM>.</LI></UL>
- </TD>
- </TR>
- </TABLE>
- </FORM>
- </TD></TR>
- <TR><TD>&nbsp;</TD></TR>
- </TABLE>".
-
-
-
-list_available_apps(State)->
- MS = ets:fun2ms(fun({Tool,{web_data,{Name,_}}}) -> {Tool,Name} end),
- Unstarted_apps=
- lists:filter(
- fun({Tool,_})->
- false==lists:member(Tool,State#state.started)
- end,
- ets:select(State#state.app_data,MS)),
- case Unstarted_apps of
- []->
- "<TR><TD>All tools are started</TD></TR>";
- _->
- list_apps(Unstarted_apps)
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% these functions creates the page that shows the started apps %%
-%% the user can select to shutdown %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-show_started_apps(State)->
- "<TABLE HEIGHT=100% WIDTH=100% BORDER=0>
- <TR HEIGHT=80%><TD ALIGN=\"center\" VALIGN=\"middle\">
- <FORM NAME=\"stop_apps\" ACTION=\"/webtool/webtool/stop_tools\" >
- <TABLE BORDER=1 WIDTH=60%>
- <TR BGCOLOR=\"#8899AA\">
- <TD ALIGN=CENTER COLSPAN=2><FONT SIZE=4>Started Tools<FONT></TD>
- </TR>
- <TR>
- <TD WIDTH=50%>
- <TABLE BORDER=0>
- "++ list_started_apps(State)++"
- <TR><TD COLSPAN=2>&nbsp;</TD></TR>
- <TR>
- <TD COLSPAN=2 ALIGN=\"center\">
- <INPUT TYPE=submit VALUE=\"Stop\">
- </TD>
- </TR>
- </TABLE>
- </TD>
- <TD>
- Stop a Tool:
- <UL>
- <LI>Select the
- checkbox for each tool to
- stop.</LI>
- <LI>Click on the
- button marked <EM>Stop</EM>.</LI></UL>
- </TD>
- </TR>
- </TABLE>
- </FORM>
- </TD></TR>
- <TR><TD>&nbsp;</TD></TR>
- </TABLE>".
-
-list_started_apps(State)->
- MS = lists:map(fun(A) -> {{A,{web_data,{'$1','_'}}},[],[{{A,'$1'}}]} end,
- State#state.started),
- Started_apps= ets:select(State#state.app_data,MS),
- case Started_apps of
- []->
- "<TR><TD>No tool is started yet.</TD></TR>";
- _->
- list_apps(Started_apps)
- end.
-
-
-list_apps(Apps) ->
- lists:map(fun({Tool,Name})->
- "<TR><TD>
- <INPUT TYPE=\"checkbox\" NAME=\"app\" VALUE=\""
- ++ atom_to_list(Tool) ++ "\">
- " ++ Name ++ "
- </TD></TR>"
- end,
- Apps).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Collecting the data from the *.tool files %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%----------------------------------------
-% get_tools(Dirs) => [{M,F,A},{M,F,A}...{M,F,A}]
-% Dirs - [string()] Directory names
-% Calls get_tools2/2 recursively for a number of directories
-% to retireve the configuration data for the web based tools.
-%----------------------------------------
-get_tools1(Dirs)->
- get_tools1(Dirs,[]).
-
-get_tools1([Dir|Rest],Data) when is_list(Dir) ->
- Tools=case filename:basename(Dir) of
- %% Dir is an 'ebin' directory, check in '../priv' as well
- "ebin" ->
- [get_tools2(filename:join(filename:dirname(Dir),"priv")) |
- get_tools2(Dir)];
- _ ->
- get_tools2(Dir)
- end,
- get_tools1(Rest,[Tools|Data]);
-
-get_tools1([],Data) ->
- lists:flatten(Data).
-
-%----------------------------------------
-% get_tools2(Directory) => DataList
-% DataList : [WebTuple]|[]
-% WebTuple: {tool,[{web,M,F,A}]}
-%
-%----------------------------------------
-get_tools2(Dir)->
- get_tools2(tool_files(Dir),[]).
-
-get_tools2([ToolFile|Rest],Data) ->
- case get_tools3(ToolFile) of
- {tool,WebData} ->
- get_tools2(Rest,[{tool,WebData}|Data]);
- {error,_Reason} ->
- get_tools2(Rest,Data);
- nodata ->
- get_tools2(Rest,Data)
- end;
-
-get_tools2([],Data) ->
- Data.
-
-%----------------------------------------
-% get_tools3(ToolFile) => {ok,Tool}|{error,Reason}|nodata
-% Tool: {tool,[KeyValTuple]}
-% ToolFile - string() A .tool file
-% Now we have the file get the data and sort it out
-%----------------------------------------
-get_tools3(ToolFile) ->
- case file:consult(ToolFile) of
- {error,open} ->
- {error,nofile};
- {error,read} ->
- {error,format};
- {ok,[{version,"1.2"},ToolInfo]} when is_list(ToolInfo)->
- webdata(ToolInfo);
- {ok,[{version,_Vsn},_Info]} ->
- {error,old_version};
- {ok,_Other} ->
- {error,format}
- end.
-
-
-%----------------------------------------------------------------------
-% webdata(TupleList)-> ToolTuple| nodata
-% ToolTuple: {tool,[{config_func,{M,F,A}}]}
-%
-% There are a little unneccesary work in this format but it is extendable
-%----------------------------------------------------------------------
-webdata(TupleList)->
- case proplists:get_value(config_func,TupleList,nodata) of
- {M,F,A} ->
- {tool,[{config_func,{M,F,A}}]};
- _ ->
- nodata
- end.
-
-
-%=============================================================================
-% Functions for getting *.tool configuration files
-%=============================================================================
-
-%----------------------------------------
-% tool_files(Dir) => ToolFiles
-% Dir - string() Directory name
-% ToolFiles - [string()]
-% Return the list of all files in Dir ending with .tool (appended to Dir)
-%----------------------------------------
-tool_files(Dir) ->
- case file:list_dir(Dir) of
- {ok,Files} ->
- filter_tool_files(Dir,Files);
- {error,_Reason} ->
- []
- end.
-
-%----------------------------------------
-% filter_tool_files(Dir,Files) => ToolFiles
-% Dir - string() Directory name
-% Files, ToolFiles - [string()] File names
-% Filters out the files in Files ending with .tool and append them to Dir
-%----------------------------------------
-filter_tool_files(_Dir,[]) ->
- [];
-filter_tool_files(Dir,[File|Rest]) ->
- case filename:extension(File) of
- ".tool" ->
- [filename:join(Dir,File)|filter_tool_files(Dir,Rest)];
- _ ->
- filter_tool_files(Dir,Rest)
- end.
-
-
-%%%-----------------------------------------------------------------
-%%% format functions
-ffunc({M,F,A}) when is_list(A) ->
- io_lib:format("~w:~w(~s)\n",[M,F,format_args(A)]);
-ffunc({M,F,A}) when is_integer(A) ->
- io_lib:format("~w:~w/~w\n",[M,F,A]).
-
-format_args([]) ->
- "";
-format_args(Args) ->
- Str = lists:append(["~p"|lists:duplicate(length(Args)-1,",~p")]),
- io_lib:format(Str,Args).
diff --git a/lib/webtool/src/webtool_sup.erl b/lib/webtool/src/webtool_sup.erl
deleted file mode 100644
index e4a05c53ae..0000000000
--- a/lib/webtool/src/webtool_sup.erl
+++ /dev/null
@@ -1,75 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(webtool_sup).
-
--behaviour(supervisor).
-
-%% External exports
--export([start_link/0,stop/1]).
-
-%% supervisor callbacks
--export([init/1]).
-
-%%%----------------------------------------------------------------------
-%%% API
-%%%----------------------------------------------------------------------
-start_link() ->
- supervisor:start_link({local,websup},webtool_sup, []).
-
-stop(Pid)->
- exit(Pid,normal).
-%%%----------------------------------------------------------------------
-%%% Callback functions from supervisor
-%%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Func: init/1
-%% Returns: {ok, {SupFlags, [ChildSpec]}} |
-%% ignore |
-%% {error, Reason}
-%%----------------------------------------------------------------------
-init(_StartArgs) ->
- %%Child1 =
- %%Child2 ={webcover_backend,{webcover_backend,start_link,[]},permanent,2000,worker,[webcover_backend]},
- %%{ok,{{simple_one_for_one,5,10},[Child1]}}.
- {ok,{{one_for_one,100,10},[]}}.
-
-%%%----------------------------------------------------------------------
-%%% Internal functions
-%%%----------------------------------------------------------------------
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/webtool/test/Makefile b/lib/webtool/test/Makefile
deleted file mode 100644
index 93aa1c09eb..0000000000
--- a/lib/webtool/test/Makefile
+++ /dev/null
@@ -1,65 +0,0 @@
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- webtool_SUITE
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
-INSTALL_PROGS= $(TARGET_FILES)
-
-EMAKEFILE=Emakefile
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/webtool_test
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-
-ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
-
-EBIN = .
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-make_emakefile:
- $(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) $(MODULES) \
- > $(EMAKEFILE)
- $(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) '*_SUITE_make' \
- >> $(EMAKEFILE)
-
-tests debug opt: make_emakefile
- erl $(ERL_MAKE_FLAGS) -make
-
-clean:
- rm -f $(EMAKEFILE)
- rm -f $(TARGET_FILES) $(GEN_FILES)
- rm -f core
-
-docs:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
-
-release_tests_spec: make_emakefile
- $(INSTALL_DIR) "$(RELSYSDIR)"
- $(INSTALL_DATA) $(EMAKEFILE) $(ERL_FILES) "$(RELSYSDIR)"
- $(INSTALL_DATA) webtool.spec "$(RELSYSDIR)"
- chmod -R u+w "$(RELSYSDIR)"
-
-release_docs_spec:
diff --git a/lib/webtool/test/webtool.spec b/lib/webtool/test/webtool.spec
deleted file mode 100644
index 134e6ed40c..0000000000
--- a/lib/webtool/test/webtool.spec
+++ /dev/null
@@ -1 +0,0 @@
-{suites,"../webtool_test",all}.
diff --git a/lib/webtool/test/webtool_SUITE.erl b/lib/webtool/test/webtool_SUITE.erl
deleted file mode 100644
index 9e2d9a2e0f..0000000000
--- a/lib/webtool/test/webtool_SUITE.erl
+++ /dev/null
@@ -1,51 +0,0 @@
-%% ``Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
-%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
-%% AB. All Rights Reserved.''
-%%
--module(webtool_SUITE).
-
--compile([export_all]).
--include_lib("common_test/include/ct.hrl").
-
-suite() ->
- [{ct_hooks, [ts_install_cth]}].
-
-all() ->
- [app, appup].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-app() ->
- [{doc, "Test that the webtool app file is ok"}].
-app(Config) when is_list(Config) ->
- ok = ?t:app_test(webtool).
-
-appup() ->
- [{doc, "Test that the webtool appup file is ok"}].
-appup(Config) when is_list(Config) ->
- ok = ?t:appup_test(webtool).
diff --git a/lib/webtool/vsn.mk b/lib/webtool/vsn.mk
deleted file mode 100644
index 92201282c0..0000000000
--- a/lib/webtool/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-WEBTOOL_VSN=0.9.1
diff --git a/lib/wx/Makefile b/lib/wx/Makefile
index b3b7aaa8aa..2397950925 100644
--- a/lib/wx/Makefile
+++ b/lib/wx/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2012. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/Makefile b/lib/wx/api_gen/Makefile
index 3fa8f1feee..e3580de2d5 100644
--- a/lib/wx/api_gen/Makefile
+++ b/lib/wx/api_gen/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2014. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/gen_util.erl b/lib/wx/api_gen/gen_util.erl
index ff245a6359..cd42ad2d96 100644
--- a/lib/wx/api_gen/gen_util.erl
+++ b/lib/wx/api_gen/gen_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/gl_gen.erl b/lib/wx/api_gen/gl_gen.erl
index ab8f842d31..54635bdd2e 100644
--- a/lib/wx/api_gen/gl_gen.erl
+++ b/lib/wx/api_gen/gl_gen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -191,8 +191,9 @@ parse_define([#xmlElement{name=initializer,content=Contents}|_R],Def,_Os) ->
try
case Val0 of
"0x" ++ Val1 ->
- _ = list_to_integer(Val1, 16),
- Def#def{val=Val1, type=hex};
+ Val2 = strip_type_cast(Val1),
+ _ = list_to_integer(Val2, 16),
+ Def#def{val=Val2, type=hex};
_ ->
Val = list_to_integer(Val0),
Def#def{val=Val, type=int}
@@ -214,6 +215,15 @@ extract_def2([#xmlElement{content=Cs}|R]) ->
extract_def2(Cs) ++ extract_def2(R);
extract_def2([]) -> [].
+strip_type_cast(Int) ->
+ lists:reverse(strip_type_cast2(lists:reverse(Int))).
+
+strip_type_cast2("u"++Rest) -> Rest; %% unsigned
+strip_type_cast2("lu"++Rest) -> Rest; %% unsigned long
+strip_type_cast2("llu"++Rest) -> Rest; %% unsigned long long
+strip_type_cast2(Rest) -> Rest.
+
+
strip_comment("/*" ++ Rest) ->
strip_comment_until_end(Rest);
strip_comment("//" ++ _) -> [];
diff --git a/lib/wx/api_gen/gl_gen_c.erl b/lib/wx/api_gen/gl_gen_c.erl
index f06772dbb2..c6d4f3a520 100644
--- a/lib/wx/api_gen/gl_gen_c.erl
+++ b/lib/wx/api_gen/gl_gen_c.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/gl_gen_erl.erl b/lib/wx/api_gen/gl_gen_erl.erl
index 84e9600bc0..1be8d775be 100644
--- a/lib/wx/api_gen/gl_gen_erl.erl
+++ b/lib/wx/api_gen/gl_gen_erl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -463,7 +463,7 @@ doc_return_types(T, Ps0) ->
Ps = [P || P=#arg{in=In, where=Where} <- Ps0,In =/= true, Where =/= c],
doc_return_types2(T, Ps).
-doc_return_types2(void, []) -> "ok";
+doc_return_types2(void, []) -> "'ok'";
doc_return_types2(void, [#arg{type=T}]) -> doc_arg_type2(T);
doc_return_types2(T, []) -> doc_arg_type2(T);
doc_return_types2(void, Ps) ->
diff --git a/lib/wx/api_gen/gl_scan_doc.erl b/lib/wx/api_gen/gl_scan_doc.erl
index d8bad02abf..0a1c25ae13 100644
--- a/lib/wx/api_gen/gl_scan_doc.erl
+++ b/lib/wx/api_gen/gl_scan_doc.erl
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/wx_extra/wxEvtHandler.c_src b/lib/wx/api_gen/wx_extra/wxEvtHandler.c_src
index 08fef1c2ff..b9cb4f08cc 100644
--- a/lib/wx/api_gen/wx_extra/wxEvtHandler.c_src
+++ b/lib/wx/api_gen/wx_extra/wxEvtHandler.c_src
@@ -43,7 +43,7 @@ case 101: { // wxEvtHandler::Disconnect
int eventType = wxeEventTypeFromAtom(bp); bp += *eventTypeLen;
if(eventType > 0) {
if(recurse_level > 1) {
- delayed_delete->Append(Ecmd.Save());
+ delayed_delete->Append(Ecmd.Save(op));
} else {
bool Result = This->Disconnect((int) *winid,(int) *lastId,eventType,
(wxObjectEventFunction)(wxEventFunction)
diff --git a/lib/wx/api_gen/wx_extra/wxEvtHandler.erl b/lib/wx/api_gen/wx_extra/wxEvtHandler.erl
index 85ebc093f5..17e10fb306 100644
--- a/lib/wx/api_gen/wx_extra/wxEvtHandler.erl
+++ b/lib/wx/api_gen/wx_extra/wxEvtHandler.erl
@@ -33,7 +33,7 @@
-type wxEvtHandler() :: wx:wx_object().
%% @doc Equivalent to {@link connect/3. connect(This, EventType, [])}
--spec connect(This::wxEvtHandler(), EventType::wxEventType()) -> ok.
+-spec connect(This::wxEvtHandler(), EventType::wxEventType()) -> 'ok'.
connect(This, EventType) ->
connect(This, EventType, []).
@@ -55,9 +55,9 @@ connect(This, EventType) ->
%% to process the event. Default not specfied i.e. a message will
%% be delivered to the process calling this function.
%% {userData, term()} An erlang term that will be sent with the event. Default: [].
--spec connect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> ok when
- Option :: {id, integer()} | {lastId, integer()} | {skip, boolean()} |
- callback | {callback, function()} | {userData, term()}.
+-spec connect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> 'ok' when
+ Option :: {'id', integer()} | {'lastId', integer()} | {'skip', boolean()} |
+ 'callback' | {'callback', function()} | {'userData', term()}.
connect(This=#wx_ref{type=ThisT}, EventType, Options) ->
EvH = parse_opts(Options, #evh{et=EventType}),
?CLASS(ThisT,wxEvtHandler),
@@ -115,7 +115,7 @@ disconnect(This=#wx_ref{type=ThisT,ref=_ThisRef}, EventType) when is_atom(EventT
%% EventType may be the atom 'null' to match any eventtype.
%% Notice that the options skip and userdata is not used to match the eventhandler.
-spec disconnect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> boolean() when
- Option :: {id, integer()} | {lastId, integer()} | {callback, function()}.
+ Option :: {'id', integer()} | {'lastId', integer()} | {'callback', function()}.
disconnect(This=#wx_ref{type=ThisT,ref=_ThisRef}, EventType, Opts) ->
?CLASS(ThisT,wxEvtHandler),
EvH = parse_opts(Opts, #evh{et=EventType}),
diff --git a/lib/wx/api_gen/wx_extra/wxListCtrl.c_src b/lib/wx/api_gen/wx_extra/wxListCtrl.c_src
index 545d5c1c0d..7bf9a481de 100644
--- a/lib/wx/api_gen/wx_extra/wxListCtrl.c_src
+++ b/lib/wx/api_gen/wx_extra/wxListCtrl.c_src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/wx_extra/wxListCtrl.erl b/lib/wx/api_gen/wx_extra/wxListCtrl.erl
index a2ce547f00..acdb69fdeb 100644
--- a/lib/wx/api_gen/wx_extra/wxListCtrl.erl
+++ b/lib/wx/api_gen/wx_extra/wxListCtrl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/wx_extra/wxPrintout.erl b/lib/wx/api_gen/wx_extra/wxPrintout.erl
index 0552b5aa1a..ba42c737b4 100644
--- a/lib/wx/api_gen/wx_extra/wxPrintout.erl
+++ b/lib/wx/api_gen/wx_extra/wxPrintout.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/wx_extra/wxTreeCtrl.c_src b/lib/wx/api_gen/wx_extra/wxTreeCtrl.c_src
index a82ebcc46b..a21f74e798 100644
--- a/lib/wx/api_gen/wx_extra/wxTreeCtrl.c_src
+++ b/lib/wx/api_gen/wx_extra/wxTreeCtrl.c_src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/wx_extra/wxXmlResource.erl b/lib/wx/api_gen/wx_extra/wxXmlResource.erl
index 2100bbd010..7700e2333e 100644
--- a/lib/wx/api_gen/wx_extra/wxXmlResource.erl
+++ b/lib/wx/api_gen/wx_extra/wxXmlResource.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/wx_gen.erl b/lib/wx/api_gen/wx_gen.erl
index ec2c35cc0e..cfae2197f8 100644
--- a/lib/wx/api_gen/wx_gen.erl
+++ b/lib/wx/api_gen/wx_gen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/wx_gen.hrl b/lib/wx/api_gen/wx_gen.hrl
index 6aa4ed3796..4b7a7f3bb8 100644
--- a/lib/wx/api_gen/wx_gen.hrl
+++ b/lib/wx/api_gen/wx_gen.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl
index 71b2038c56..84d3990786 100644
--- a/lib/wx/api_gen/wx_gen_cpp.erl
+++ b/lib/wx/api_gen/wx_gen_cpp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -195,11 +195,13 @@ gen_funcs(Defs) ->
w("void WxeApp::wxe_dispatch(wxeCommand& Ecmd)~n{~n"),
w(" char * bp = Ecmd.buffer;~n"),
+ w(" int op = Ecmd.op;~n"),
+ w(" Ecmd.op = -1;~n"),
w(" wxeMemEnv *memenv = getMemEnv(Ecmd.port);~n"),
%% w(" wxMBConvUTF32 UTFconverter;~n"),
- w(" wxeReturn rt = wxeReturn(WXE_DRV_PORT, Ecmd.caller, true);~n"),
+ w(" wxeReturn rt = wxeReturn(WXE_DRV_PORT, Ecmd.caller, true);~n"),
w(" try {~n"),
- w(" switch (Ecmd.op)~n{~n"),
+ w(" switch (op)~n{~n"),
%% w(" case WXE_CREATE_PORT:~n", []),
%% w(" { newMemEnv(Ecmd.port); } break;~n", []),
%% w(" case WXE_REMOVE_PORT:~n", []),
@@ -208,8 +210,8 @@ gen_funcs(Defs) ->
w(" void *This = getPtr(bp,memenv);~n"),
w(" wxeRefData *refd = getRefData(This);~n"),
w(" if(This && refd) {~n"),
- w(" if(recurse_level > 1 && refd->type != 4) {~n"),
- w(" delayed_delete->Append(Ecmd.Save());~n"),
+ w(" if(recurse_level > 1 && refd->type != 8) {~n"),
+ w(" delayed_delete->Append(Ecmd.Save(op));~n"),
w(" } else {~n"),
w(" delete_object(This, refd);~n"),
w(" ((WxeApp *) wxTheApp)->clearPtr(This);}~n"),
@@ -228,7 +230,7 @@ gen_funcs(Defs) ->
w(" default: {~n"),
w(" wxeReturn error = wxeReturn(WXE_DRV_PORT, Ecmd.caller, false);"),
w(" error.addAtom(\"_wxe_error_\");~n"),
- w(" error.addInt((int) Ecmd.op);~n"),
+ w(" error.addInt((int) op);~n"),
w(" error.addAtom(\"not_supported\");~n"),
w(" error.addTupleCount(3);~n"),
w(" error.send();~n"),
@@ -239,7 +241,7 @@ gen_funcs(Defs) ->
w("} catch (wxe_badarg badarg) { // try~n"),
w(" wxeReturn error = wxeReturn(WXE_DRV_PORT, Ecmd.caller, false);"),
w(" error.addAtom(\"_wxe_error_\");~n"),
- w(" error.addInt((int) Ecmd.op);~n"),
+ w(" error.addInt((int) op);~n"),
w(" error.addAtom(\"badarg\");~n"),
w(" error.addInt((int) badarg.ref);~n"),
w(" error.addTupleCount(2);~n"),
@@ -253,7 +255,21 @@ gen_funcs(Defs) ->
],
w("bool WxeApp::delete_object(void *ptr, wxeRefData *refd) {~n", []),
+ w(" if(wxe_debug) {\n"
+ " wxString msg;\n"
+ " const wxChar *class_info = wxT(\"unknown\");\n"
+ " if(refd->type < 10) {\n"
+ " wxClassInfo *cinfo = ((wxObject *)ptr)->GetClassInfo();\n"
+ " class_info = cinfo->GetClassName();\n"
+ " }\n"
+ " msg.Printf(wxT(\"Deleting {wx_ref, %d, %s} at %p \"), refd->ref, class_info, ptr);\n"
+ " send_msg(\"debug\", &msg);\n"
+ " };\n"),
+
w(" switch(refd->type) {~n", []),
+ w("#if wxUSE_GRAPHICS_CONTEXT~n", []),
+ w(" case 4: delete (wxGraphicsObject *) ptr; break;~n", []),
+ w("#endif~n", []),
Case = fun(C=#class{name=Class, id=Id, abstract=IsAbs, parent=P}) when P /= "static" ->
UglyWorkaround = lists:member(Class, UglySkipList),
HaveVirtual = virtual_dest(C),
@@ -759,7 +775,7 @@ call_wx(_N,{constructor,_},#type{base={class,RClass}},Ps) ->
end;
false ->
case is_dc(RClass) of
- true -> 4;
+ true -> 8;
false ->
case hd(reverse(wx_gen_erl:parents(RClass))) of
root -> Id;
@@ -817,19 +833,19 @@ return_res1(#type{name=Type,base={class,_},single=list,ref=reference}) ->
return_res1(#type{name=Type,base={comp,_,_},single=array,by_val=true}) ->
{Type ++ " Result = ", ""};
return_res1(#type{name=Type,single=true,by_val=true, base={class, _}}) ->
- %% Temporary memory leak !!!!!!
- case {need_copy_constr(Type),Type} of
- {true, _} -> ok;
- {_, "wxGraphics" ++ _} -> ok;
- _ ->
- io:format("~s::~s Building return value of temp ~s~n",
- [get(current_class),get(current_func),Type])
- end,
- case need_copy_constr(Type) of
- true ->
+ case {need_copy_constr(Type), Type} of
+ {true, _} ->
{Type ++ " * Result = new E" ++ Type ++ "(", "); newPtr((void *) Result,"
++ "3, memenv);"};
- false ->
+ {false, "wxGraphics" ++ _} ->
+ %% {"wxGraphicsObject * Result = new wxGraphicsObject(", "); newPtr((void *) Result,"
+ %% ++ "3, memenv);"};
+ {Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result,"
+ ++ "4, memenv);"};
+ {false, _} ->
+ %% Temporary memory leak !!!!!!
+ io:format("~s::~s Building return value of temp ~s~n",
+ [get(current_class),get(current_func),Type]),
{Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result,"
++ "3, memenv);"}
end;
diff --git a/lib/wx/api_gen/wx_gen_erl.erl b/lib/wx/api_gen/wx_gen_erl.erl
index c28b9238dc..794de25002 100644
--- a/lib/wx/api_gen/wx_gen_erl.erl
+++ b/lib/wx/api_gen/wx_gen_erl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -379,7 +379,7 @@ gen_dest(#class{name=CName,abstract=Abs}, Ms) ->
gen_dest2(Class, Id) ->
w("%% @doc Destroys this object, do not use object again~n", []),
- w("-spec destroy(This::~s()) -> ok.~n", [Class]),
+ w("-spec destroy(This::~s()) -> 'ok'.~n", [Class]),
w("destroy(Obj=#wx_ref{type=Type}) ->~n", []),
w(" ?CLASS(Type,~s),~n",[Class]),
case Id of
@@ -482,7 +482,7 @@ arg_type_test(#param{name=Name0,in=In,type=#type{base={class,T},single=true},def
arg_type_test(#param{name=Name0,in=In,type=#type{base={class,T}}, def=none},EOS,Acc)
when In =/= false ->
Name = erl_arg_name(Name0),
- w(" [?CLASS(~sT,~s) || #wx_ref{type=~sT} <- ~s],~s", [Name,T,Name,Name,EOS]),
+ w(" _ = [?CLASS(~sT,~s) || #wx_ref{type=~sT} <- ~s],~s", [Name,T,Name,Name,EOS]),
Acc;
arg_type_test(#param{name=Name0,def=none,in=In,
type={merged,
@@ -770,7 +770,7 @@ write_spec(Args, Optional, {complex, Res}, Eol) ->
optional_type(Opts, Eol) ->
"Option :: " ++ args(fun optional_type2/1, Eol++"\t\t | ", Opts).
optional_type2(#param{name=Name, def=_Def, type=T}) ->
- "{" ++ erl_option_name(Name) ++ ", " ++ doc_arg_type2(T) ++ "}". %% %% Default: " ++ Def.
+ "{'" ++ erl_option_name(Name) ++ "', " ++ doc_arg_type2(T) ++ "}". %% %% Default: " ++ Def.
doc_link("utils", Func) ->
w("%% @doc See <a href=\"http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#~s\">"
@@ -861,7 +861,7 @@ doc_arg_type3(T, _) -> ?error({unknown_type,T}).
doc_return_types(T, Ps) ->
doc_return_types2(T, [P || P=#param{in=In} <- Ps,In =/= true]).
-doc_return_types2(void, []) -> {simple, "ok"};
+doc_return_types2(void, []) -> {simple, "'ok'"};
doc_return_types2(void, [#param{type=T}]) -> {simple, doc_arg_type2(T, out)};
doc_return_types2(T, []) -> {simple, doc_arg_type2(T, out)};
doc_return_types2(void, Ps) when length(Ps) < 4 ->
@@ -1089,7 +1089,7 @@ gen_enums_ints() ->
%% open_write("../include/wx.hrl"), opened in gen_event_recs
w("~n%% Hardcoded Records~n", []),
w("-record(wxMouseState, {x :: integer(), y :: integer(),~n"
- " leftDown :: boolean(), middleDown :: boolean, rightDown :: boolean, ~n"
+ " leftDown :: boolean(), middleDown :: boolean(), rightDown :: boolean(), ~n"
" controlDown :: boolean(), shiftDown :: boolean(),~n"
" altDown :: boolean(), metaDown :: boolean(), cmdDown :: boolean()~n"
" }).~n", []),
@@ -1220,7 +1220,7 @@ gen_event_recs() ->
build_event_rec(Class=#class{name=Name, event=Evs}) ->
EvTypes = [event_type_name(Ev) || Ev <- Evs],
- Str = args(fun(Ev) -> Ev end, " | ", EvTypes),
+ Str = args(fun(Ev) -> "'" ++ Ev ++ "'" end, " | ", EvTypes),
Attr = filter_attrs(Class),
Rec = event_rec_name(Name),
%%GetName = fun(#param{name=N}) ->event_attr_name(N) end,
diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf
index b8458e901b..786e536f93 100644
--- a/lib/wx/api_gen/wxapi.conf
+++ b/lib/wx/api_gen/wxapi.conf
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -802,9 +802,9 @@
'CanRedo','CanUndo','Copy','Cut','GetInsertionPoint','GetLastPosition',
'GetValue','Paste','Redo','Replace','Remove','SetInsertionPoint',
'SetInsertionPointEnd','SetSelection','SetValue','Undo']}.
-{class, wxGauge, wxControl, [],
- ['wxGauge','~wxGauge','Create','GetBezelFace','GetRange','GetShadowWidth',
- 'GetValue','IsVertical','SetBezelFace','SetRange','SetShadowWidth','SetValue',
+{class, wxGauge, wxControl, [],
+ ['wxGauge','~wxGauge','Create','GetRange',
+ 'GetValue','IsVertical','SetRange','SetValue',
'Pulse']}.
{class, wxGenericDirCtrl, wxControl, [],
['wxGenericDirCtrl','~wxGenericDirCtrl','Create','Init','CollapseTree',
@@ -844,7 +844,7 @@
'GetItemSpacing','GetItemState',
'GetItemText','GetItemTextColour',
'GetNextItem','GetSelectedItemCount','GetTextColour','GetTopItem',
- 'GetViewRect',{'HitTest',[{"pSubItem",nowhere}, {"flags", in}]},
+ 'GetViewRect',{'HitTest',[{"pSubItem",out}]},
'InsertColumn','InsertItem',
%%'OnGetItemAttr', 'OnGetItemImage','OnGetItemText',
'RefreshItem','RefreshItems','ScrollList',
diff --git a/lib/wx/c_src/Makefile.in b/lib/wx/c_src/Makefile.in
index 09e3390846..daa8afce83 100644
--- a/lib/wx/c_src/Makefile.in
+++ b/lib/wx/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2014. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/egl_impl.cpp b/lib/wx/c_src/egl_impl.cpp
index 6c7c26f284..61e05ee6f1 100644
--- a/lib/wx/c_src/egl_impl.cpp
+++ b/lib/wx/c_src/egl_impl.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2011-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2011-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/egl_impl.h b/lib/wx/c_src/egl_impl.h
index 8562ae7d96..719b4926db 100644
--- a/lib/wx/c_src/egl_impl.h
+++ b/lib/wx/c_src/egl_impl.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2010. All Rights Reserved.
+ * Copyright Ericsson AB 2010-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/gen/gl_fdefs.h b/lib/wx/c_src/gen/gl_fdefs.h
index 3a8ac7287e..6719a288b8 100644
--- a/lib/wx/c_src/gen/gl_fdefs.h
+++ b/lib/wx/c_src/gen/gl_fdefs.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/gen/gl_finit.h b/lib/wx/c_src/gen/gl_finit.h
index 53e6666c67..297a26d4c7 100644
--- a/lib/wx/c_src/gen/gl_finit.h
+++ b/lib/wx/c_src/gen/gl_finit.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/gen/gl_funcs.cpp b/lib/wx/c_src/gen/gl_funcs.cpp
index 1abd601da9..4dd3ad44ef 100644
--- a/lib/wx/c_src/gen/gl_funcs.cpp
+++ b/lib/wx/c_src/gen/gl_funcs.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/gen/glu_finit.h b/lib/wx/c_src/gen/glu_finit.h
index 5685cc633a..afd16d781f 100644
--- a/lib/wx/c_src/gen/glu_finit.h
+++ b/lib/wx/c_src/gen/glu_finit.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp
index 03b0baf875..4243d8a35a 100644
--- a/lib/wx/c_src/gen/wxe_funcs.cpp
+++ b/lib/wx/c_src/gen/wxe_funcs.cpp
@@ -40,17 +40,19 @@
void WxeApp::wxe_dispatch(wxeCommand& Ecmd)
{
char * bp = Ecmd.buffer;
+ int op = Ecmd.op;
+ Ecmd.op = -1;
wxeMemEnv *memenv = getMemEnv(Ecmd.port);
- wxeReturn rt = wxeReturn(WXE_DRV_PORT, Ecmd.caller, true);
+ wxeReturn rt = wxeReturn(WXE_DRV_PORT, Ecmd.caller, true);
try {
- switch (Ecmd.op)
+ switch (op)
{
case DESTROY_OBJECT: {
void *This = getPtr(bp,memenv);
wxeRefData *refd = getRefData(This);
if(This && refd) {
- if(recurse_level > 1 && refd->type != 4) {
- delayed_delete->Append(Ecmd.Save());
+ if(recurse_level > 1 && refd->type != 8) {
+ delayed_delete->Append(Ecmd.Save(op));
} else {
delete_object(This, refd);
((WxeApp *) wxTheApp)->clearPtr(This);}
@@ -114,7 +116,7 @@ case 101: { // wxEvtHandler::Disconnect
int eventType = wxeEventTypeFromAtom(bp); bp += *eventTypeLen;
if(eventType > 0) {
if(recurse_level > 1) {
- delayed_delete->Append(Ecmd.Save());
+ delayed_delete->Append(Ecmd.Save(op));
} else {
bool Result = This->Disconnect((int) *winid,(int) *lastId,eventType,
(wxObjectEventFunction)(wxEventFunction)
@@ -5887,27 +5889,27 @@ case wxMirrorDC_new: { // wxMirrorDC::wxMirrorDC
wxDC *dc = (wxDC *) getPtr(bp,memenv); bp += 4;
bool * mirror = (bool *) bp; bp += 4;
wxMirrorDC * Result = new EwxMirrorDC(*dc,*mirror);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxMirrorDC");
break;
}
case wxScreenDC_new: { // wxScreenDC::wxScreenDC
wxScreenDC * Result = new EwxScreenDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxScreenDC");
break;
}
#if wxUSE_POSTSCRIPT
case wxPostScriptDC_new_0: { // wxPostScriptDC::wxPostScriptDC
wxPostScriptDC * Result = new EwxPostScriptDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxPostScriptDC");
break;
}
case wxPostScriptDC_new_1: { // wxPostScriptDC::wxPostScriptDC
wxPrintData *printData = (wxPrintData *) getPtr(bp,memenv); bp += 4;
wxPostScriptDC * Result = new EwxPostScriptDC(*printData);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxPostScriptDC");
break;
}
@@ -5929,7 +5931,7 @@ case wxPostScriptDC_GetResolution: { // wxPostScriptDC::GetResolution
#if !wxCHECK_VERSION(2,9,0)
case wxWindowDC_new_0: { // wxWindowDC::wxWindowDC
wxWindowDC * Result = new EwxWindowDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxWindowDC");
break;
}
@@ -5937,14 +5939,14 @@ case wxWindowDC_new_0: { // wxWindowDC::wxWindowDC
case wxWindowDC_new_1: { // wxWindowDC::wxWindowDC
wxWindow *win = (wxWindow *) getPtr(bp,memenv); bp += 4;
wxWindowDC * Result = new EwxWindowDC(win);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxWindowDC");
break;
}
#if !wxCHECK_VERSION(2,9,0)
case wxClientDC_new_0: { // wxClientDC::wxClientDC
wxClientDC * Result = new EwxClientDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxClientDC");
break;
}
@@ -5952,14 +5954,14 @@ case wxClientDC_new_0: { // wxClientDC::wxClientDC
case wxClientDC_new_1: { // wxClientDC::wxClientDC
wxWindow *win = (wxWindow *) getPtr(bp,memenv); bp += 4;
wxClientDC * Result = new EwxClientDC(win);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxClientDC");
break;
}
#if !wxCHECK_VERSION(2,9,0)
case wxPaintDC_new_0: { // wxPaintDC::wxPaintDC
wxPaintDC * Result = new EwxPaintDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxPaintDC");
break;
}
@@ -5967,27 +5969,27 @@ case wxPaintDC_new_0: { // wxPaintDC::wxPaintDC
case wxPaintDC_new_1: { // wxPaintDC::wxPaintDC
wxWindow *win = (wxWindow *) getPtr(bp,memenv); bp += 4;
wxPaintDC * Result = new EwxPaintDC(win);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxPaintDC");
break;
}
case wxMemoryDC_new_1_0: { // wxMemoryDC::wxMemoryDC
wxBitmap *bitmap = (wxBitmap *) getPtr(bp,memenv); bp += 4;
wxMemoryDC * Result = new EwxMemoryDC(*bitmap);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxMemoryDC");
break;
}
case wxMemoryDC_new_1_1: { // wxMemoryDC::wxMemoryDC
wxDC * dc = (wxDC *) getPtr(bp,memenv); bp += 4;
wxMemoryDC * Result = new EwxMemoryDC(dc);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxMemoryDC");
break;
}
case wxMemoryDC_new_0: { // wxMemoryDC::wxMemoryDC
wxMemoryDC * Result = new EwxMemoryDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxMemoryDC");
break;
}
@@ -6007,7 +6009,7 @@ case wxMemoryDC_SelectObjectAsSource: { // wxMemoryDC::SelectObjectAsSource
}
case wxBufferedDC_new_0: { // wxBufferedDC::wxBufferedDC
wxBufferedDC * Result = new EwxBufferedDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedDC");
break;
}
@@ -6025,7 +6027,7 @@ buffer = (wxBitmap *) getPtr(bp,memenv); bp += 4;
} break;
}};
wxBufferedDC * Result = new EwxBufferedDC(dc,*buffer,style);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedDC");
break;
}
@@ -6042,7 +6044,7 @@ case wxBufferedDC_new_3: { // wxBufferedDC::wxBufferedDC
} break;
}};
wxBufferedDC * Result = new EwxBufferedDC(dc,area,style);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedDC");
break;
}
@@ -6089,7 +6091,7 @@ case wxBufferedPaintDC_new_3: { // wxBufferedPaintDC::wxBufferedPaintDC
} break;
}};
wxBufferedPaintDC * Result = new EwxBufferedPaintDC(window,*buffer,style);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedPaintDC");
break;
}
@@ -6103,7 +6105,7 @@ case wxBufferedPaintDC_new_2: { // wxBufferedPaintDC::wxBufferedPaintDC
} break;
}};
wxBufferedPaintDC * Result = new EwxBufferedPaintDC(window,style);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedPaintDC");
break;
}
@@ -6145,7 +6147,7 @@ case wxGraphicsContext_CreatePen: { // wxGraphicsContext::CreatePen
wxGraphicsContext *This = (wxGraphicsContext *) getPtr(bp,memenv); bp += 4;
wxPen *pen = (wxPen *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsPen * Result = new wxGraphicsPen(This->CreatePen(*pen)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsPen * Result = new wxGraphicsPen(This->CreatePen(*pen)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsPen");
break;
}
@@ -6153,7 +6155,7 @@ case wxGraphicsContext_CreateBrush: { // wxGraphicsContext::CreateBrush
wxGraphicsContext *This = (wxGraphicsContext *) getPtr(bp,memenv); bp += 4;
wxBrush *brush = (wxBrush *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateBrush(*brush)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateBrush(*brush)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -6177,7 +6179,7 @@ case wxGraphicsContext_CreateRadialGradientBrush: { // wxGraphicsContext::Create
int * cColorA = (int *) bp; bp += 4;
wxColour cColor = wxColour(*cColorR,*cColorG,*cColorB,*cColorA);
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateRadialGradientBrush(*xo,*yo,*xc,*yc,*radius,oColor,cColor)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateRadialGradientBrush(*xo,*yo,*xc,*yc,*radius,oColor,cColor)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -6201,7 +6203,7 @@ case wxGraphicsContext_CreateLinearGradientBrush: { // wxGraphicsContext::Create
int * c2A = (int *) bp; bp += 4;
wxColour c2 = wxColour(*c2R,*c2G,*c2B,*c2A);
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateLinearGradientBrush(*x1,*y1,*x2,*y2,c1,c2)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateLinearGradientBrush(*x1,*y1,*x2,*y2,c1,c2)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -6221,7 +6223,7 @@ case wxGraphicsContext_CreateFont: { // wxGraphicsContext::CreateFont
} break;
}};
if(!This) throw wxe_badarg(0);
- wxGraphicsFont * Result = new wxGraphicsFont(This->CreateFont(*font,col)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsFont * Result = new wxGraphicsFont(This->CreateFont(*font,col)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsFont");
break;
}
@@ -6261,14 +6263,14 @@ case wxGraphicsContext_CreateMatrix: { // wxGraphicsContext::CreateMatrix
} break;
}};
if(!This) throw wxe_badarg(0);
- wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->CreateMatrix(a,b,c,d,tx,ty)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->CreateMatrix(a,b,c,d,tx,ty)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsMatrix");
break;
}
case wxGraphicsContext_CreatePath: { // wxGraphicsContext::CreatePath
wxGraphicsContext *This = (wxGraphicsContext *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsPath * Result = new wxGraphicsPath(This->CreatePath()); newPtr((void *) Result,3, memenv);;
+ wxGraphicsPath * Result = new wxGraphicsPath(This->CreatePath()); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsPath");
break;
}
@@ -6512,7 +6514,7 @@ case wxGraphicsContext_Translate: { // wxGraphicsContext::Translate
case wxGraphicsContext_GetTransform: { // wxGraphicsContext::GetTransform
wxGraphicsContext *This = (wxGraphicsContext *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->GetTransform()); newPtr((void *) Result,3, memenv);;
+ wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->GetTransform()); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsMatrix");
break;
}
@@ -6998,7 +7000,7 @@ case wxGraphicsRenderer_CreatePen: { // wxGraphicsRenderer::CreatePen
wxGraphicsRenderer *This = (wxGraphicsRenderer *) getPtr(bp,memenv); bp += 4;
wxPen *pen = (wxPen *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsPen * Result = new wxGraphicsPen(This->CreatePen(*pen)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsPen * Result = new wxGraphicsPen(This->CreatePen(*pen)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsPen");
break;
}
@@ -7006,7 +7008,7 @@ case wxGraphicsRenderer_CreateBrush: { // wxGraphicsRenderer::CreateBrush
wxGraphicsRenderer *This = (wxGraphicsRenderer *) getPtr(bp,memenv); bp += 4;
wxBrush *brush = (wxBrush *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateBrush(*brush)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateBrush(*brush)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -7029,7 +7031,7 @@ case wxGraphicsRenderer_CreateLinearGradientBrush: { // wxGraphicsRenderer::Crea
int * c2A = (int *) bp; bp += 4;
wxColour c2 = wxColour(*c2R,*c2G,*c2B,*c2A);
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateLinearGradientBrush(*x1,*y1,*x2,*y2,c1,c2)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateLinearGradientBrush(*x1,*y1,*x2,*y2,c1,c2)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -7054,7 +7056,7 @@ case wxGraphicsRenderer_CreateRadialGradientBrush: { // wxGraphicsRenderer::Crea
int * cColorA = (int *) bp; bp += 4;
wxColour cColor = wxColour(*cColorR,*cColorG,*cColorB,*cColorA);
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateRadialGradientBrush(*xo,*yo,*xc,*yc,*radius,oColor,cColor)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateRadialGradientBrush(*xo,*yo,*xc,*yc,*radius,oColor,cColor)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -7074,7 +7076,7 @@ case wxGraphicsRenderer_CreateFont: { // wxGraphicsRenderer::CreateFont
} break;
}};
if(!This) throw wxe_badarg(0);
- wxGraphicsFont * Result = new wxGraphicsFont(This->CreateFont(*font,col)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsFont * Result = new wxGraphicsFont(This->CreateFont(*font,col)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsFont");
break;
}
@@ -7114,14 +7116,14 @@ case wxGraphicsRenderer_CreateMatrix: { // wxGraphicsRenderer::CreateMatrix
} break;
}};
if(!This) throw wxe_badarg(0);
- wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->CreateMatrix(a,b,c,d,tx,ty)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->CreateMatrix(a,b,c,d,tx,ty)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsMatrix");
break;
}
case wxGraphicsRenderer_CreatePath: { // wxGraphicsRenderer::CreatePath
wxGraphicsRenderer *This = (wxGraphicsRenderer *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsPath * Result = new wxGraphicsPath(This->CreatePath()); newPtr((void *) Result,3, memenv);;
+ wxGraphicsPath * Result = new wxGraphicsPath(This->CreatePath()); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsPath");
break;
}
@@ -14628,13 +14630,6 @@ validator = (wxValidator *) getPtr(bp,memenv); bp += 4;
rt.addBool(Result);
break;
}
-case wxGauge_GetBezelFace: { // wxGauge::GetBezelFace
- wxGauge *This = (wxGauge *) getPtr(bp,memenv); bp += 4;
- if(!This) throw wxe_badarg(0);
- int Result = This->GetBezelFace();
- rt.addInt(Result);
- break;
-}
case wxGauge_GetRange: { // wxGauge::GetRange
wxGauge *This = (wxGauge *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
@@ -14642,13 +14637,6 @@ case wxGauge_GetRange: { // wxGauge::GetRange
rt.addInt(Result);
break;
}
-case wxGauge_GetShadowWidth: { // wxGauge::GetShadowWidth
- wxGauge *This = (wxGauge *) getPtr(bp,memenv); bp += 4;
- if(!This) throw wxe_badarg(0);
- int Result = This->GetShadowWidth();
- rt.addInt(Result);
- break;
-}
case wxGauge_GetValue: { // wxGauge::GetValue
wxGauge *This = (wxGauge *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
@@ -14663,13 +14651,6 @@ case wxGauge_IsVertical: { // wxGauge::IsVertical
rt.addBool(Result);
break;
}
-case wxGauge_SetBezelFace: { // wxGauge::SetBezelFace
- wxGauge *This = (wxGauge *) getPtr(bp,memenv); bp += 4;
- int * w = (int *) bp; bp += 4;
- if(!This) throw wxe_badarg(0);
- This->SetBezelFace(*w);
- break;
-}
case wxGauge_SetRange: { // wxGauge::SetRange
wxGauge *This = (wxGauge *) getPtr(bp,memenv); bp += 4;
int * r = (int *) bp; bp += 4;
@@ -14677,13 +14658,6 @@ case wxGauge_SetRange: { // wxGauge::SetRange
This->SetRange(*r);
break;
}
-case wxGauge_SetShadowWidth: { // wxGauge::SetShadowWidth
- wxGauge *This = (wxGauge *) getPtr(bp,memenv); bp += 4;
- int * w = (int *) bp; bp += 4;
- if(!This) throw wxe_badarg(0);
- This->SetShadowWidth(*w);
- break;
-}
case wxGauge_SetValue: { // wxGauge::SetValue
wxGauge *This = (wxGauge *) getPtr(bp,memenv); bp += 4;
int * pos = (int *) bp; bp += 4;
@@ -15631,14 +15605,18 @@ case wxListCtrl_GetViewRect: { // wxListCtrl::GetViewRect
break;
}
case wxListCtrl_HitTest: { // wxListCtrl::HitTest
+ int flags;
+ long pSubItem;
wxListCtrl *This = (wxListCtrl *) getPtr(bp,memenv); bp += 4;
int * pointX = (int *) bp; bp += 4;
int * pointY = (int *) bp; bp += 4;
wxPoint point = wxPoint(*pointX,*pointY);
- int * flags = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- long Result = This->HitTest(point,*flags);
+ long Result = This->HitTest(point,flags,&pSubItem);
rt.addInt(Result);
+ rt.addInt(flags);
+ rt.addInt(pSubItem);
+ rt.addTupleCount(3);
break;
}
case wxListCtrl_InsertColumn_2: { // wxListCtrl::InsertColumn
@@ -32073,7 +32051,7 @@ case wxDCOverlay_Clear: { // wxDCOverlay::Clear
}
default: {
wxeReturn error = wxeReturn(WXE_DRV_PORT, Ecmd.caller, false); error.addAtom("_wxe_error_");
- error.addInt((int) Ecmd.op);
+ error.addInt((int) op);
error.addAtom("not_supported");
error.addTupleCount(3);
error.send();
@@ -32083,7 +32061,7 @@ case wxDCOverlay_Clear: { // wxDCOverlay::Clear
rt.send();
} catch (wxe_badarg badarg) { // try
wxeReturn error = wxeReturn(WXE_DRV_PORT, Ecmd.caller, false); error.addAtom("_wxe_error_");
- error.addInt((int) Ecmd.op);
+ error.addInt((int) op);
error.addAtom("badarg");
error.addInt((int) badarg.ref);
error.addTupleCount(2);
@@ -32093,7 +32071,20 @@ case wxDCOverlay_Clear: { // wxDCOverlay::Clear
bool WxeApp::delete_object(void *ptr, wxeRefData *refd) {
+ if(wxe_debug) {
+ wxString msg;
+ const wxChar *class_info = wxT("unknown");
+ if(refd->type < 10) {
+ wxClassInfo *cinfo = ((wxObject *)ptr)->GetClassInfo();
+ class_info = cinfo->GetClassName();
+ }
+ msg.Printf(wxT("Deleting {wx_ref, %d, %s} at %p "), refd->ref, class_info, ptr);
+ send_msg("debug", &msg);
+ };
switch(refd->type) {
+#if wxUSE_GRAPHICS_CONTEXT
+ case 4: delete (wxGraphicsObject *) ptr; break;
+#endif
case 24: delete (wxGridCellBoolRenderer *) ptr; break;
case 25: delete (wxGridCellBoolEditor *) ptr; break;
case 26: delete (wxGridCellFloatRenderer *) ptr; break;
diff --git a/lib/wx/c_src/gen/wxe_macros.h b/lib/wx/c_src/gen/wxe_macros.h
index 0d3b79b7f9..82b39b49cd 100644
--- a/lib/wx/c_src/gen/wxe_macros.h
+++ b/lib/wx/c_src/gen/wxe_macros.h
@@ -1506,1924 +1506,1920 @@
#define wxGauge_new_0 1602
#define wxGauge_new_4 1603
#define wxGauge_Create 1604
-#define wxGauge_GetBezelFace 1605
-#define wxGauge_GetRange 1606
-#define wxGauge_GetShadowWidth 1607
-#define wxGauge_GetValue 1608
-#define wxGauge_IsVertical 1609
-#define wxGauge_SetBezelFace 1610
-#define wxGauge_SetRange 1611
-#define wxGauge_SetShadowWidth 1612
-#define wxGauge_SetValue 1613
-#define wxGauge_Pulse 1614
-#define wxGauge_destroy 1615
-#define wxGenericDirCtrl_new_0 1616
-#define wxGenericDirCtrl_new_2 1617
-#define wxGenericDirCtrl_destruct 1618
-#define wxGenericDirCtrl_Create 1619
-#define wxGenericDirCtrl_Init 1620
-#define wxGenericDirCtrl_CollapseTree 1621
-#define wxGenericDirCtrl_ExpandPath 1622
-#define wxGenericDirCtrl_GetDefaultPath 1623
-#define wxGenericDirCtrl_GetPath 1624
-#define wxGenericDirCtrl_GetFilePath 1625
-#define wxGenericDirCtrl_GetFilter 1626
-#define wxGenericDirCtrl_GetFilterIndex 1627
-#define wxGenericDirCtrl_GetRootId 1628
-#define wxGenericDirCtrl_GetTreeCtrl 1629
-#define wxGenericDirCtrl_ReCreateTree 1630
-#define wxGenericDirCtrl_SetDefaultPath 1631
-#define wxGenericDirCtrl_SetFilter 1632
-#define wxGenericDirCtrl_SetFilterIndex 1633
-#define wxGenericDirCtrl_SetPath 1634
-#define wxStaticBox_new_4 1636
-#define wxStaticBox_new_0 1637
-#define wxStaticBox_Create 1638
-#define wxStaticBox_destroy 1639
-#define wxStaticLine_new_2 1641
-#define wxStaticLine_new_0 1642
-#define wxStaticLine_Create 1643
-#define wxStaticLine_IsVertical 1644
-#define wxStaticLine_GetDefaultSize 1645
-#define wxStaticLine_destroy 1646
-#define wxListBox_new_3 1649
-#define wxListBox_new_0 1650
-#define wxListBox_destruct 1652
-#define wxListBox_Create 1654
-#define wxListBox_Deselect 1655
-#define wxListBox_GetSelections 1656
-#define wxListBox_InsertItems 1657
-#define wxListBox_IsSelected 1658
-#define wxListBox_Set 1659
-#define wxListBox_HitTest 1660
-#define wxListBox_SetFirstItem_1_0 1661
-#define wxListBox_SetFirstItem_1_1 1662
-#define wxListCtrl_new_0 1663
-#define wxListCtrl_new_2 1664
-#define wxListCtrl_Arrange 1665
-#define wxListCtrl_AssignImageList 1666
-#define wxListCtrl_ClearAll 1667
-#define wxListCtrl_Create 1668
-#define wxListCtrl_DeleteAllItems 1669
-#define wxListCtrl_DeleteColumn 1670
-#define wxListCtrl_DeleteItem 1671
-#define wxListCtrl_EditLabel 1672
-#define wxListCtrl_EnsureVisible 1673
-#define wxListCtrl_FindItem_3_0 1674
-#define wxListCtrl_FindItem_3_1 1675
-#define wxListCtrl_GetColumn 1676
-#define wxListCtrl_GetColumnCount 1677
-#define wxListCtrl_GetColumnWidth 1678
-#define wxListCtrl_GetCountPerPage 1679
-#define wxListCtrl_GetEditControl 1680
-#define wxListCtrl_GetImageList 1681
-#define wxListCtrl_GetItem 1682
-#define wxListCtrl_GetItemBackgroundColour 1683
-#define wxListCtrl_GetItemCount 1684
-#define wxListCtrl_GetItemData 1685
-#define wxListCtrl_GetItemFont 1686
-#define wxListCtrl_GetItemPosition 1687
-#define wxListCtrl_GetItemRect 1688
-#define wxListCtrl_GetItemSpacing 1689
-#define wxListCtrl_GetItemState 1690
-#define wxListCtrl_GetItemText 1691
-#define wxListCtrl_GetItemTextColour 1692
-#define wxListCtrl_GetNextItem 1693
-#define wxListCtrl_GetSelectedItemCount 1694
-#define wxListCtrl_GetTextColour 1695
-#define wxListCtrl_GetTopItem 1696
-#define wxListCtrl_GetViewRect 1697
-#define wxListCtrl_HitTest 1698
-#define wxListCtrl_InsertColumn_2 1699
-#define wxListCtrl_InsertColumn_3 1700
-#define wxListCtrl_InsertItem_1 1701
-#define wxListCtrl_InsertItem_2_1 1702
-#define wxListCtrl_InsertItem_2_0 1703
-#define wxListCtrl_InsertItem_3 1704
-#define wxListCtrl_RefreshItem 1705
-#define wxListCtrl_RefreshItems 1706
-#define wxListCtrl_ScrollList 1707
-#define wxListCtrl_SetBackgroundColour 1708
-#define wxListCtrl_SetColumn 1709
-#define wxListCtrl_SetColumnWidth 1710
-#define wxListCtrl_SetImageList 1711
-#define wxListCtrl_SetItem_1 1712
-#define wxListCtrl_SetItem_4 1713
-#define wxListCtrl_SetItemBackgroundColour 1714
-#define wxListCtrl_SetItemCount 1715
-#define wxListCtrl_SetItemData 1716
-#define wxListCtrl_SetItemFont 1717
-#define wxListCtrl_SetItemImage 1718
-#define wxListCtrl_SetItemColumnImage 1719
-#define wxListCtrl_SetItemPosition 1720
-#define wxListCtrl_SetItemState 1721
-#define wxListCtrl_SetItemText 1722
-#define wxListCtrl_SetItemTextColour 1723
-#define wxListCtrl_SetSingleStyle 1724
-#define wxListCtrl_SetTextColour 1725
-#define wxListCtrl_SetWindowStyleFlag 1726
-#define wxListCtrl_SortItems 1727
-#define wxListCtrl_destroy 1728
-#define wxListView_ClearColumnImage 1729
-#define wxListView_Focus 1730
-#define wxListView_GetFirstSelected 1731
-#define wxListView_GetFocusedItem 1732
-#define wxListView_GetNextSelected 1733
-#define wxListView_IsSelected 1734
-#define wxListView_Select 1735
-#define wxListView_SetColumnImage 1736
-#define wxListItem_new_0 1737
-#define wxListItem_new_1 1738
-#define wxListItem_destruct 1739
-#define wxListItem_Clear 1740
-#define wxListItem_GetAlign 1741
-#define wxListItem_GetBackgroundColour 1742
-#define wxListItem_GetColumn 1743
-#define wxListItem_GetFont 1744
-#define wxListItem_GetId 1745
-#define wxListItem_GetImage 1746
-#define wxListItem_GetMask 1747
-#define wxListItem_GetState 1748
-#define wxListItem_GetText 1749
-#define wxListItem_GetTextColour 1750
-#define wxListItem_GetWidth 1751
-#define wxListItem_SetAlign 1752
-#define wxListItem_SetBackgroundColour 1753
-#define wxListItem_SetColumn 1754
-#define wxListItem_SetFont 1755
-#define wxListItem_SetId 1756
-#define wxListItem_SetImage 1757
-#define wxListItem_SetMask 1758
-#define wxListItem_SetState 1759
-#define wxListItem_SetStateMask 1760
-#define wxListItem_SetText 1761
-#define wxListItem_SetTextColour 1762
-#define wxListItem_SetWidth 1763
-#define wxListItemAttr_new_0 1764
-#define wxListItemAttr_new_3 1765
-#define wxListItemAttr_GetBackgroundColour 1766
-#define wxListItemAttr_GetFont 1767
-#define wxListItemAttr_GetTextColour 1768
-#define wxListItemAttr_HasBackgroundColour 1769
-#define wxListItemAttr_HasFont 1770
-#define wxListItemAttr_HasTextColour 1771
-#define wxListItemAttr_SetBackgroundColour 1772
-#define wxListItemAttr_SetFont 1773
-#define wxListItemAttr_SetTextColour 1774
-#define wxListItemAttr_destroy 1775
-#define wxImageList_new_0 1776
-#define wxImageList_new_3 1777
-#define wxImageList_Add_1 1778
-#define wxImageList_Add_2_0 1779
-#define wxImageList_Add_2_1 1780
-#define wxImageList_Create 1781
-#define wxImageList_Draw 1783
-#define wxImageList_GetBitmap 1784
-#define wxImageList_GetIcon 1785
-#define wxImageList_GetImageCount 1786
-#define wxImageList_GetSize 1787
-#define wxImageList_Remove 1788
-#define wxImageList_RemoveAll 1789
-#define wxImageList_Replace_2 1790
-#define wxImageList_Replace_3 1791
-#define wxImageList_destroy 1792
-#define wxTextAttr_new_0 1793
-#define wxTextAttr_new_2 1794
-#define wxTextAttr_GetAlignment 1795
-#define wxTextAttr_GetBackgroundColour 1796
-#define wxTextAttr_GetFont 1797
-#define wxTextAttr_GetLeftIndent 1798
-#define wxTextAttr_GetLeftSubIndent 1799
-#define wxTextAttr_GetRightIndent 1800
-#define wxTextAttr_GetTabs 1801
-#define wxTextAttr_GetTextColour 1802
-#define wxTextAttr_HasBackgroundColour 1803
-#define wxTextAttr_HasFont 1804
-#define wxTextAttr_HasTextColour 1805
-#define wxTextAttr_GetFlags 1806
-#define wxTextAttr_IsDefault 1807
-#define wxTextAttr_SetAlignment 1808
-#define wxTextAttr_SetBackgroundColour 1809
-#define wxTextAttr_SetFlags 1810
-#define wxTextAttr_SetFont 1811
-#define wxTextAttr_SetLeftIndent 1812
-#define wxTextAttr_SetRightIndent 1813
-#define wxTextAttr_SetTabs 1814
-#define wxTextAttr_SetTextColour 1815
-#define wxTextAttr_destroy 1816
-#define wxTextCtrl_new_3 1818
-#define wxTextCtrl_new_0 1819
-#define wxTextCtrl_destruct 1821
-#define wxTextCtrl_AppendText 1822
-#define wxTextCtrl_CanCopy 1823
-#define wxTextCtrl_CanCut 1824
-#define wxTextCtrl_CanPaste 1825
-#define wxTextCtrl_CanRedo 1826
-#define wxTextCtrl_CanUndo 1827
-#define wxTextCtrl_Clear 1828
-#define wxTextCtrl_Copy 1829
-#define wxTextCtrl_Create 1830
-#define wxTextCtrl_Cut 1831
-#define wxTextCtrl_DiscardEdits 1832
-#define wxTextCtrl_ChangeValue 1833
-#define wxTextCtrl_EmulateKeyPress 1834
-#define wxTextCtrl_GetDefaultStyle 1835
-#define wxTextCtrl_GetInsertionPoint 1836
-#define wxTextCtrl_GetLastPosition 1837
-#define wxTextCtrl_GetLineLength 1838
-#define wxTextCtrl_GetLineText 1839
-#define wxTextCtrl_GetNumberOfLines 1840
-#define wxTextCtrl_GetRange 1841
-#define wxTextCtrl_GetSelection 1842
-#define wxTextCtrl_GetStringSelection 1843
-#define wxTextCtrl_GetStyle 1844
-#define wxTextCtrl_GetValue 1845
-#define wxTextCtrl_IsEditable 1846
-#define wxTextCtrl_IsModified 1847
-#define wxTextCtrl_IsMultiLine 1848
-#define wxTextCtrl_IsSingleLine 1849
-#define wxTextCtrl_LoadFile 1850
-#define wxTextCtrl_MarkDirty 1851
-#define wxTextCtrl_Paste 1852
-#define wxTextCtrl_PositionToXY 1853
-#define wxTextCtrl_Redo 1854
-#define wxTextCtrl_Remove 1855
-#define wxTextCtrl_Replace 1856
-#define wxTextCtrl_SaveFile 1857
-#define wxTextCtrl_SetDefaultStyle 1858
-#define wxTextCtrl_SetEditable 1859
-#define wxTextCtrl_SetInsertionPoint 1860
-#define wxTextCtrl_SetInsertionPointEnd 1861
-#define wxTextCtrl_SetMaxLength 1863
-#define wxTextCtrl_SetSelection 1864
-#define wxTextCtrl_SetStyle 1865
-#define wxTextCtrl_SetValue 1866
-#define wxTextCtrl_ShowPosition 1867
-#define wxTextCtrl_Undo 1868
-#define wxTextCtrl_WriteText 1869
-#define wxTextCtrl_XYToPosition 1870
-#define wxNotebook_new_0 1873
-#define wxNotebook_new_3 1874
-#define wxNotebook_destruct 1875
-#define wxNotebook_AddPage 1876
-#define wxNotebook_AdvanceSelection 1877
-#define wxNotebook_AssignImageList 1878
-#define wxNotebook_Create 1879
-#define wxNotebook_DeleteAllPages 1880
-#define wxNotebook_DeletePage 1881
-#define wxNotebook_RemovePage 1882
-#define wxNotebook_GetCurrentPage 1883
-#define wxNotebook_GetImageList 1884
-#define wxNotebook_GetPage 1886
-#define wxNotebook_GetPageCount 1887
-#define wxNotebook_GetPageImage 1888
-#define wxNotebook_GetPageText 1889
-#define wxNotebook_GetRowCount 1890
-#define wxNotebook_GetSelection 1891
-#define wxNotebook_GetThemeBackgroundColour 1892
-#define wxNotebook_HitTest 1894
-#define wxNotebook_InsertPage 1896
-#define wxNotebook_SetImageList 1897
-#define wxNotebook_SetPadding 1898
-#define wxNotebook_SetPageSize 1899
-#define wxNotebook_SetPageImage 1900
-#define wxNotebook_SetPageText 1901
-#define wxNotebook_SetSelection 1902
-#define wxNotebook_ChangeSelection 1903
-#define wxChoicebook_new_0 1904
-#define wxChoicebook_new_3 1905
-#define wxChoicebook_AddPage 1906
-#define wxChoicebook_AdvanceSelection 1907
-#define wxChoicebook_AssignImageList 1908
-#define wxChoicebook_Create 1909
-#define wxChoicebook_DeleteAllPages 1910
-#define wxChoicebook_DeletePage 1911
-#define wxChoicebook_RemovePage 1912
-#define wxChoicebook_GetCurrentPage 1913
-#define wxChoicebook_GetImageList 1914
-#define wxChoicebook_GetPage 1916
-#define wxChoicebook_GetPageCount 1917
-#define wxChoicebook_GetPageImage 1918
-#define wxChoicebook_GetPageText 1919
-#define wxChoicebook_GetSelection 1920
-#define wxChoicebook_HitTest 1921
-#define wxChoicebook_InsertPage 1922
-#define wxChoicebook_SetImageList 1923
-#define wxChoicebook_SetPageSize 1924
-#define wxChoicebook_SetPageImage 1925
-#define wxChoicebook_SetPageText 1926
-#define wxChoicebook_SetSelection 1927
-#define wxChoicebook_ChangeSelection 1928
-#define wxChoicebook_destroy 1929
-#define wxToolbook_new_0 1930
-#define wxToolbook_new_3 1931
-#define wxToolbook_AddPage 1932
-#define wxToolbook_AdvanceSelection 1933
-#define wxToolbook_AssignImageList 1934
-#define wxToolbook_Create 1935
-#define wxToolbook_DeleteAllPages 1936
-#define wxToolbook_DeletePage 1937
-#define wxToolbook_RemovePage 1938
-#define wxToolbook_GetCurrentPage 1939
-#define wxToolbook_GetImageList 1940
-#define wxToolbook_GetPage 1942
-#define wxToolbook_GetPageCount 1943
-#define wxToolbook_GetPageImage 1944
-#define wxToolbook_GetPageText 1945
-#define wxToolbook_GetSelection 1946
-#define wxToolbook_HitTest 1948
-#define wxToolbook_InsertPage 1949
-#define wxToolbook_SetImageList 1950
-#define wxToolbook_SetPageSize 1951
-#define wxToolbook_SetPageImage 1952
-#define wxToolbook_SetPageText 1953
-#define wxToolbook_SetSelection 1954
-#define wxToolbook_ChangeSelection 1955
-#define wxToolbook_destroy 1956
-#define wxListbook_new_0 1957
-#define wxListbook_new_3 1958
-#define wxListbook_AddPage 1959
-#define wxListbook_AdvanceSelection 1960
-#define wxListbook_AssignImageList 1961
-#define wxListbook_Create 1962
-#define wxListbook_DeleteAllPages 1963
-#define wxListbook_DeletePage 1964
-#define wxListbook_RemovePage 1965
-#define wxListbook_GetCurrentPage 1966
-#define wxListbook_GetImageList 1967
-#define wxListbook_GetPage 1969
-#define wxListbook_GetPageCount 1970
-#define wxListbook_GetPageImage 1971
-#define wxListbook_GetPageText 1972
-#define wxListbook_GetSelection 1973
-#define wxListbook_HitTest 1975
-#define wxListbook_InsertPage 1976
-#define wxListbook_SetImageList 1977
-#define wxListbook_SetPageSize 1978
-#define wxListbook_SetPageImage 1979
-#define wxListbook_SetPageText 1980
-#define wxListbook_SetSelection 1981
-#define wxListbook_ChangeSelection 1982
-#define wxListbook_destroy 1983
-#define wxTreebook_new_0 1984
-#define wxTreebook_new_3 1985
-#define wxTreebook_AddPage 1986
-#define wxTreebook_AdvanceSelection 1987
-#define wxTreebook_AssignImageList 1988
-#define wxTreebook_Create 1989
-#define wxTreebook_DeleteAllPages 1990
-#define wxTreebook_DeletePage 1991
-#define wxTreebook_RemovePage 1992
-#define wxTreebook_GetCurrentPage 1993
-#define wxTreebook_GetImageList 1994
-#define wxTreebook_GetPage 1996
-#define wxTreebook_GetPageCount 1997
-#define wxTreebook_GetPageImage 1998
-#define wxTreebook_GetPageText 1999
-#define wxTreebook_GetSelection 2000
-#define wxTreebook_ExpandNode 2001
-#define wxTreebook_IsNodeExpanded 2002
-#define wxTreebook_HitTest 2004
-#define wxTreebook_InsertPage 2005
-#define wxTreebook_InsertSubPage 2006
-#define wxTreebook_SetImageList 2007
-#define wxTreebook_SetPageSize 2008
-#define wxTreebook_SetPageImage 2009
-#define wxTreebook_SetPageText 2010
-#define wxTreebook_SetSelection 2011
-#define wxTreebook_ChangeSelection 2012
-#define wxTreebook_destroy 2013
-#define wxTreeCtrl_new_2 2016
-#define wxTreeCtrl_new_0 2017
-#define wxTreeCtrl_destruct 2019
-#define wxTreeCtrl_AddRoot 2020
-#define wxTreeCtrl_AppendItem 2021
-#define wxTreeCtrl_AssignImageList 2022
-#define wxTreeCtrl_AssignStateImageList 2023
-#define wxTreeCtrl_Collapse 2024
-#define wxTreeCtrl_CollapseAndReset 2025
-#define wxTreeCtrl_Create 2026
-#define wxTreeCtrl_Delete 2027
-#define wxTreeCtrl_DeleteAllItems 2028
-#define wxTreeCtrl_DeleteChildren 2029
-#define wxTreeCtrl_EditLabel 2030
-#define wxTreeCtrl_EnsureVisible 2031
-#define wxTreeCtrl_Expand 2032
-#define wxTreeCtrl_GetBoundingRect 2033
-#define wxTreeCtrl_GetChildrenCount 2035
-#define wxTreeCtrl_GetCount 2036
-#define wxTreeCtrl_GetEditControl 2037
-#define wxTreeCtrl_GetFirstChild 2038
-#define wxTreeCtrl_GetNextChild 2039
-#define wxTreeCtrl_GetFirstVisibleItem 2040
-#define wxTreeCtrl_GetImageList 2041
-#define wxTreeCtrl_GetIndent 2042
-#define wxTreeCtrl_GetItemBackgroundColour 2043
-#define wxTreeCtrl_GetItemData 2044
-#define wxTreeCtrl_GetItemFont 2045
-#define wxTreeCtrl_GetItemImage_1 2046
-#define wxTreeCtrl_GetItemImage_2 2047
-#define wxTreeCtrl_GetItemText 2048
-#define wxTreeCtrl_GetItemTextColour 2049
-#define wxTreeCtrl_GetLastChild 2050
-#define wxTreeCtrl_GetNextSibling 2051
-#define wxTreeCtrl_GetNextVisible 2052
-#define wxTreeCtrl_GetItemParent 2053
-#define wxTreeCtrl_GetPrevSibling 2054
-#define wxTreeCtrl_GetPrevVisible 2055
-#define wxTreeCtrl_GetRootItem 2056
-#define wxTreeCtrl_GetSelection 2057
-#define wxTreeCtrl_GetSelections 2058
-#define wxTreeCtrl_GetStateImageList 2059
-#define wxTreeCtrl_HitTest 2060
-#define wxTreeCtrl_InsertItem 2062
-#define wxTreeCtrl_IsBold 2063
-#define wxTreeCtrl_IsExpanded 2064
-#define wxTreeCtrl_IsSelected 2065
-#define wxTreeCtrl_IsVisible 2066
-#define wxTreeCtrl_ItemHasChildren 2067
-#define wxTreeCtrl_IsTreeItemIdOk 2068
-#define wxTreeCtrl_PrependItem 2069
-#define wxTreeCtrl_ScrollTo 2070
-#define wxTreeCtrl_SelectItem_1 2071
-#define wxTreeCtrl_SelectItem_2 2072
-#define wxTreeCtrl_SetIndent 2073
-#define wxTreeCtrl_SetImageList 2074
-#define wxTreeCtrl_SetItemBackgroundColour 2075
-#define wxTreeCtrl_SetItemBold 2076
-#define wxTreeCtrl_SetItemData 2077
-#define wxTreeCtrl_SetItemDropHighlight 2078
-#define wxTreeCtrl_SetItemFont 2079
-#define wxTreeCtrl_SetItemHasChildren 2080
-#define wxTreeCtrl_SetItemImage_2 2081
-#define wxTreeCtrl_SetItemImage_3 2082
-#define wxTreeCtrl_SetItemText 2083
-#define wxTreeCtrl_SetItemTextColour 2084
-#define wxTreeCtrl_SetStateImageList 2085
-#define wxTreeCtrl_SetWindowStyle 2086
-#define wxTreeCtrl_SortChildren 2087
-#define wxTreeCtrl_Toggle 2088
-#define wxTreeCtrl_ToggleItemSelection 2089
-#define wxTreeCtrl_Unselect 2090
-#define wxTreeCtrl_UnselectAll 2091
-#define wxTreeCtrl_UnselectItem 2092
-#define wxScrollBar_new_0 2093
-#define wxScrollBar_new_3 2094
-#define wxScrollBar_destruct 2095
-#define wxScrollBar_Create 2096
-#define wxScrollBar_GetRange 2097
-#define wxScrollBar_GetPageSize 2098
-#define wxScrollBar_GetThumbPosition 2099
-#define wxScrollBar_GetThumbSize 2100
-#define wxScrollBar_SetThumbPosition 2101
-#define wxScrollBar_SetScrollbar 2102
-#define wxSpinButton_new_2 2104
-#define wxSpinButton_new_0 2105
-#define wxSpinButton_Create 2106
-#define wxSpinButton_GetMax 2107
-#define wxSpinButton_GetMin 2108
-#define wxSpinButton_GetValue 2109
-#define wxSpinButton_SetRange 2110
-#define wxSpinButton_SetValue 2111
-#define wxSpinButton_destroy 2112
-#define wxSpinCtrl_new_0 2113
-#define wxSpinCtrl_new_2 2114
-#define wxSpinCtrl_Create 2116
-#define wxSpinCtrl_SetValue_1_1 2119
-#define wxSpinCtrl_SetValue_1_0 2120
-#define wxSpinCtrl_GetValue 2122
-#define wxSpinCtrl_SetRange 2124
-#define wxSpinCtrl_SetSelection 2125
-#define wxSpinCtrl_GetMin 2127
-#define wxSpinCtrl_GetMax 2129
-#define wxSpinCtrl_destroy 2130
-#define wxStaticText_new_0 2131
-#define wxStaticText_new_4 2132
-#define wxStaticText_Create 2133
-#define wxStaticText_GetLabel 2134
-#define wxStaticText_SetLabel 2135
-#define wxStaticText_Wrap 2136
-#define wxStaticText_destroy 2137
-#define wxStaticBitmap_new_0 2138
-#define wxStaticBitmap_new_4 2139
-#define wxStaticBitmap_Create 2140
-#define wxStaticBitmap_GetBitmap 2141
-#define wxStaticBitmap_SetBitmap 2142
-#define wxStaticBitmap_destroy 2143
-#define wxRadioBox_new 2144
-#define wxRadioBox_destruct 2146
-#define wxRadioBox_Create 2147
-#define wxRadioBox_Enable_2 2148
-#define wxRadioBox_Enable_1 2149
-#define wxRadioBox_GetSelection 2150
-#define wxRadioBox_GetString 2151
-#define wxRadioBox_SetSelection 2152
-#define wxRadioBox_Show_2 2153
-#define wxRadioBox_Show_1 2154
-#define wxRadioBox_GetColumnCount 2155
-#define wxRadioBox_GetItemHelpText 2156
-#define wxRadioBox_GetItemToolTip 2157
-#define wxRadioBox_GetItemFromPoint 2159
-#define wxRadioBox_GetRowCount 2160
-#define wxRadioBox_IsItemEnabled 2161
-#define wxRadioBox_IsItemShown 2162
-#define wxRadioBox_SetItemHelpText 2163
-#define wxRadioBox_SetItemToolTip 2164
-#define wxRadioButton_new_0 2165
-#define wxRadioButton_new_4 2166
-#define wxRadioButton_Create 2167
-#define wxRadioButton_GetValue 2168
-#define wxRadioButton_SetValue 2169
-#define wxRadioButton_destroy 2170
-#define wxSlider_new_6 2172
-#define wxSlider_new_0 2173
-#define wxSlider_Create 2174
-#define wxSlider_GetLineSize 2175
-#define wxSlider_GetMax 2176
-#define wxSlider_GetMin 2177
-#define wxSlider_GetPageSize 2178
-#define wxSlider_GetThumbLength 2179
-#define wxSlider_GetValue 2180
-#define wxSlider_SetLineSize 2181
-#define wxSlider_SetPageSize 2182
-#define wxSlider_SetRange 2183
-#define wxSlider_SetThumbLength 2184
-#define wxSlider_SetValue 2185
-#define wxSlider_destroy 2186
-#define wxDialog_new_4 2188
-#define wxDialog_new_0 2189
-#define wxDialog_destruct 2191
-#define wxDialog_Create 2192
-#define wxDialog_CreateButtonSizer 2193
-#define wxDialog_CreateStdDialogButtonSizer 2194
-#define wxDialog_EndModal 2195
-#define wxDialog_GetAffirmativeId 2196
-#define wxDialog_GetReturnCode 2197
-#define wxDialog_IsModal 2198
-#define wxDialog_SetAffirmativeId 2199
-#define wxDialog_SetReturnCode 2200
-#define wxDialog_Show 2201
-#define wxDialog_ShowModal 2202
-#define wxColourDialog_new_0 2203
-#define wxColourDialog_new_2 2204
-#define wxColourDialog_destruct 2205
-#define wxColourDialog_Create 2206
-#define wxColourDialog_GetColourData 2207
-#define wxColourData_new_0 2208
-#define wxColourData_new_1 2209
-#define wxColourData_destruct 2210
-#define wxColourData_GetChooseFull 2211
-#define wxColourData_GetColour 2212
-#define wxColourData_GetCustomColour 2214
-#define wxColourData_SetChooseFull 2215
-#define wxColourData_SetColour 2216
-#define wxColourData_SetCustomColour 2217
-#define wxPalette_new_0 2218
-#define wxPalette_new_4 2219
-#define wxPalette_destruct 2221
-#define wxPalette_Create 2222
-#define wxPalette_GetColoursCount 2223
-#define wxPalette_GetPixel 2224
-#define wxPalette_GetRGB 2225
-#define wxPalette_IsOk 2226
-#define wxDirDialog_new 2230
-#define wxDirDialog_destruct 2231
-#define wxDirDialog_GetPath 2232
-#define wxDirDialog_GetMessage 2233
-#define wxDirDialog_SetMessage 2234
-#define wxDirDialog_SetPath 2235
-#define wxFileDialog_new 2239
-#define wxFileDialog_destruct 2240
-#define wxFileDialog_GetDirectory 2241
-#define wxFileDialog_GetFilename 2242
-#define wxFileDialog_GetFilenames 2243
-#define wxFileDialog_GetFilterIndex 2244
-#define wxFileDialog_GetMessage 2245
-#define wxFileDialog_GetPath 2246
-#define wxFileDialog_GetPaths 2247
-#define wxFileDialog_GetWildcard 2248
-#define wxFileDialog_SetDirectory 2249
-#define wxFileDialog_SetFilename 2250
-#define wxFileDialog_SetFilterIndex 2251
-#define wxFileDialog_SetMessage 2252
-#define wxFileDialog_SetPath 2253
-#define wxFileDialog_SetWildcard 2254
-#define wxPickerBase_SetInternalMargin 2255
-#define wxPickerBase_GetInternalMargin 2256
-#define wxPickerBase_SetTextCtrlProportion 2257
-#define wxPickerBase_SetPickerCtrlProportion 2258
-#define wxPickerBase_GetTextCtrlProportion 2259
-#define wxPickerBase_GetPickerCtrlProportion 2260
-#define wxPickerBase_HasTextCtrl 2261
-#define wxPickerBase_GetTextCtrl 2262
-#define wxPickerBase_IsTextCtrlGrowable 2263
-#define wxPickerBase_SetPickerCtrlGrowable 2264
-#define wxPickerBase_SetTextCtrlGrowable 2265
-#define wxPickerBase_IsPickerCtrlGrowable 2266
-#define wxFilePickerCtrl_new_0 2267
-#define wxFilePickerCtrl_new_3 2268
-#define wxFilePickerCtrl_Create 2269
-#define wxFilePickerCtrl_GetPath 2270
-#define wxFilePickerCtrl_SetPath 2271
-#define wxFilePickerCtrl_destroy 2272
-#define wxDirPickerCtrl_new_0 2273
-#define wxDirPickerCtrl_new_3 2274
-#define wxDirPickerCtrl_Create 2275
-#define wxDirPickerCtrl_GetPath 2276
-#define wxDirPickerCtrl_SetPath 2277
-#define wxDirPickerCtrl_destroy 2278
-#define wxColourPickerCtrl_new_0 2279
-#define wxColourPickerCtrl_new_3 2280
-#define wxColourPickerCtrl_Create 2281
-#define wxColourPickerCtrl_GetColour 2282
-#define wxColourPickerCtrl_SetColour_1_1 2283
-#define wxColourPickerCtrl_SetColour_1_0 2284
-#define wxColourPickerCtrl_destroy 2285
-#define wxDatePickerCtrl_new_0 2286
-#define wxDatePickerCtrl_new_3 2287
-#define wxDatePickerCtrl_GetRange 2288
-#define wxDatePickerCtrl_GetValue 2289
-#define wxDatePickerCtrl_SetRange 2290
-#define wxDatePickerCtrl_SetValue 2291
-#define wxDatePickerCtrl_destroy 2292
-#define wxFontPickerCtrl_new_0 2293
-#define wxFontPickerCtrl_new_3 2294
-#define wxFontPickerCtrl_Create 2295
-#define wxFontPickerCtrl_GetSelectedFont 2296
-#define wxFontPickerCtrl_SetSelectedFont 2297
-#define wxFontPickerCtrl_GetMaxPointSize 2298
-#define wxFontPickerCtrl_SetMaxPointSize 2299
-#define wxFontPickerCtrl_destroy 2300
-#define wxFindReplaceDialog_new_0 2303
-#define wxFindReplaceDialog_new_4 2304
-#define wxFindReplaceDialog_destruct 2305
-#define wxFindReplaceDialog_Create 2306
-#define wxFindReplaceDialog_GetData 2307
-#define wxFindReplaceData_new_0 2308
-#define wxFindReplaceData_new_1 2309
-#define wxFindReplaceData_GetFindString 2310
-#define wxFindReplaceData_GetReplaceString 2311
-#define wxFindReplaceData_GetFlags 2312
-#define wxFindReplaceData_SetFlags 2313
-#define wxFindReplaceData_SetFindString 2314
-#define wxFindReplaceData_SetReplaceString 2315
-#define wxFindReplaceData_destroy 2316
-#define wxMultiChoiceDialog_new_0 2317
-#define wxMultiChoiceDialog_new_5 2319
-#define wxMultiChoiceDialog_GetSelections 2320
-#define wxMultiChoiceDialog_SetSelections 2321
-#define wxMultiChoiceDialog_destroy 2322
-#define wxSingleChoiceDialog_new_0 2323
-#define wxSingleChoiceDialog_new_5 2325
-#define wxSingleChoiceDialog_GetSelection 2326
-#define wxSingleChoiceDialog_GetStringSelection 2327
-#define wxSingleChoiceDialog_SetSelection 2328
-#define wxSingleChoiceDialog_destroy 2329
-#define wxTextEntryDialog_new 2330
-#define wxTextEntryDialog_GetValue 2331
-#define wxTextEntryDialog_SetValue 2332
-#define wxTextEntryDialog_destroy 2333
-#define wxPasswordEntryDialog_new 2334
-#define wxPasswordEntryDialog_destroy 2335
-#define wxFontData_new_0 2336
-#define wxFontData_new_1 2337
-#define wxFontData_destruct 2338
-#define wxFontData_EnableEffects 2339
-#define wxFontData_GetAllowSymbols 2340
-#define wxFontData_GetColour 2341
-#define wxFontData_GetChosenFont 2342
-#define wxFontData_GetEnableEffects 2343
-#define wxFontData_GetInitialFont 2344
-#define wxFontData_GetShowHelp 2345
-#define wxFontData_SetAllowSymbols 2346
-#define wxFontData_SetChosenFont 2347
-#define wxFontData_SetColour 2348
-#define wxFontData_SetInitialFont 2349
-#define wxFontData_SetRange 2350
-#define wxFontData_SetShowHelp 2351
-#define wxFontDialog_new_0 2355
-#define wxFontDialog_new_2 2357
-#define wxFontDialog_Create 2359
-#define wxFontDialog_GetFontData 2360
-#define wxFontDialog_destroy 2362
-#define wxProgressDialog_new 2363
-#define wxProgressDialog_destruct 2364
-#define wxProgressDialog_Resume 2365
-#define wxProgressDialog_Update_2 2366
-#define wxProgressDialog_Update_0 2367
-#define wxMessageDialog_new 2368
-#define wxMessageDialog_destruct 2369
-#define wxPageSetupDialog_new 2370
-#define wxPageSetupDialog_destruct 2371
-#define wxPageSetupDialog_GetPageSetupData 2372
-#define wxPageSetupDialog_ShowModal 2373
-#define wxPageSetupDialogData_new_0 2374
-#define wxPageSetupDialogData_new_1_0 2375
-#define wxPageSetupDialogData_new_1_1 2376
-#define wxPageSetupDialogData_destruct 2377
-#define wxPageSetupDialogData_EnableHelp 2378
-#define wxPageSetupDialogData_EnableMargins 2379
-#define wxPageSetupDialogData_EnableOrientation 2380
-#define wxPageSetupDialogData_EnablePaper 2381
-#define wxPageSetupDialogData_EnablePrinter 2382
-#define wxPageSetupDialogData_GetDefaultMinMargins 2383
-#define wxPageSetupDialogData_GetEnableMargins 2384
-#define wxPageSetupDialogData_GetEnableOrientation 2385
-#define wxPageSetupDialogData_GetEnablePaper 2386
-#define wxPageSetupDialogData_GetEnablePrinter 2387
-#define wxPageSetupDialogData_GetEnableHelp 2388
-#define wxPageSetupDialogData_GetDefaultInfo 2389
-#define wxPageSetupDialogData_GetMarginTopLeft 2390
-#define wxPageSetupDialogData_GetMarginBottomRight 2391
-#define wxPageSetupDialogData_GetMinMarginTopLeft 2392
-#define wxPageSetupDialogData_GetMinMarginBottomRight 2393
-#define wxPageSetupDialogData_GetPaperId 2394
-#define wxPageSetupDialogData_GetPaperSize 2395
-#define wxPageSetupDialogData_GetPrintData 2397
-#define wxPageSetupDialogData_IsOk 2398
-#define wxPageSetupDialogData_SetDefaultInfo 2399
-#define wxPageSetupDialogData_SetDefaultMinMargins 2400
-#define wxPageSetupDialogData_SetMarginTopLeft 2401
-#define wxPageSetupDialogData_SetMarginBottomRight 2402
-#define wxPageSetupDialogData_SetMinMarginTopLeft 2403
-#define wxPageSetupDialogData_SetMinMarginBottomRight 2404
-#define wxPageSetupDialogData_SetPaperId 2405
-#define wxPageSetupDialogData_SetPaperSize_1_1 2406
-#define wxPageSetupDialogData_SetPaperSize_1_0 2407
-#define wxPageSetupDialogData_SetPrintData 2408
-#define wxPrintDialog_new_2_0 2409
-#define wxPrintDialog_new_2_1 2410
-#define wxPrintDialog_destruct 2411
-#define wxPrintDialog_GetPrintDialogData 2412
-#define wxPrintDialog_GetPrintDC 2413
-#define wxPrintDialogData_new_0 2414
-#define wxPrintDialogData_new_1_1 2415
-#define wxPrintDialogData_new_1_0 2416
-#define wxPrintDialogData_destruct 2417
-#define wxPrintDialogData_EnableHelp 2418
-#define wxPrintDialogData_EnablePageNumbers 2419
-#define wxPrintDialogData_EnablePrintToFile 2420
-#define wxPrintDialogData_EnableSelection 2421
-#define wxPrintDialogData_GetAllPages 2422
-#define wxPrintDialogData_GetCollate 2423
-#define wxPrintDialogData_GetFromPage 2424
-#define wxPrintDialogData_GetMaxPage 2425
-#define wxPrintDialogData_GetMinPage 2426
-#define wxPrintDialogData_GetNoCopies 2427
-#define wxPrintDialogData_GetPrintData 2428
-#define wxPrintDialogData_GetPrintToFile 2429
-#define wxPrintDialogData_GetSelection 2430
-#define wxPrintDialogData_GetToPage 2431
-#define wxPrintDialogData_IsOk 2432
-#define wxPrintDialogData_SetCollate 2433
-#define wxPrintDialogData_SetFromPage 2434
-#define wxPrintDialogData_SetMaxPage 2435
-#define wxPrintDialogData_SetMinPage 2436
-#define wxPrintDialogData_SetNoCopies 2437
-#define wxPrintDialogData_SetPrintData 2438
-#define wxPrintDialogData_SetPrintToFile 2439
-#define wxPrintDialogData_SetSelection 2440
-#define wxPrintDialogData_SetToPage 2441
-#define wxPrintData_new_0 2442
-#define wxPrintData_new_1 2443
-#define wxPrintData_destruct 2444
-#define wxPrintData_GetCollate 2445
-#define wxPrintData_GetBin 2446
-#define wxPrintData_GetColour 2447
-#define wxPrintData_GetDuplex 2448
-#define wxPrintData_GetNoCopies 2449
-#define wxPrintData_GetOrientation 2450
-#define wxPrintData_GetPaperId 2451
-#define wxPrintData_GetPrinterName 2452
-#define wxPrintData_GetQuality 2453
-#define wxPrintData_IsOk 2454
-#define wxPrintData_SetBin 2455
-#define wxPrintData_SetCollate 2456
-#define wxPrintData_SetColour 2457
-#define wxPrintData_SetDuplex 2458
-#define wxPrintData_SetNoCopies 2459
-#define wxPrintData_SetOrientation 2460
-#define wxPrintData_SetPaperId 2461
-#define wxPrintData_SetPrinterName 2462
-#define wxPrintData_SetQuality 2463
-#define wxPrintPreview_new_2 2466
-#define wxPrintPreview_new_3 2467
-#define wxPrintPreview_destruct 2469
-#define wxPrintPreview_GetCanvas 2470
-#define wxPrintPreview_GetCurrentPage 2471
-#define wxPrintPreview_GetFrame 2472
-#define wxPrintPreview_GetMaxPage 2473
-#define wxPrintPreview_GetMinPage 2474
-#define wxPrintPreview_GetPrintout 2475
-#define wxPrintPreview_GetPrintoutForPrinting 2476
-#define wxPrintPreview_IsOk 2477
-#define wxPrintPreview_PaintPage 2478
-#define wxPrintPreview_Print 2479
-#define wxPrintPreview_RenderPage 2480
-#define wxPrintPreview_SetCanvas 2481
-#define wxPrintPreview_SetCurrentPage 2482
-#define wxPrintPreview_SetFrame 2483
-#define wxPrintPreview_SetPrintout 2484
-#define wxPrintPreview_SetZoom 2485
-#define wxPreviewFrame_new 2486
-#define wxPreviewFrame_destruct 2487
-#define wxPreviewFrame_CreateControlBar 2488
-#define wxPreviewFrame_CreateCanvas 2489
-#define wxPreviewFrame_Initialize 2490
-#define wxPreviewFrame_OnCloseWindow 2491
-#define wxPreviewControlBar_new 2492
-#define wxPreviewControlBar_destruct 2493
-#define wxPreviewControlBar_CreateButtons 2494
-#define wxPreviewControlBar_GetPrintPreview 2495
-#define wxPreviewControlBar_GetZoomControl 2496
-#define wxPreviewControlBar_SetZoomControl 2497
-#define wxPrinter_new 2499
-#define wxPrinter_CreateAbortWindow 2500
-#define wxPrinter_GetAbort 2501
-#define wxPrinter_GetLastError 2502
-#define wxPrinter_GetPrintDialogData 2503
-#define wxPrinter_Print 2504
-#define wxPrinter_PrintDialog 2505
-#define wxPrinter_ReportError 2506
-#define wxPrinter_Setup 2507
-#define wxPrinter_destroy 2508
-#define wxXmlResource_new_1 2509
-#define wxXmlResource_new_2 2510
-#define wxXmlResource_destruct 2511
-#define wxXmlResource_AttachUnknownControl 2512
-#define wxXmlResource_ClearHandlers 2513
-#define wxXmlResource_CompareVersion 2514
-#define wxXmlResource_Get 2515
-#define wxXmlResource_GetFlags 2516
-#define wxXmlResource_GetVersion 2517
-#define wxXmlResource_GetXRCID 2518
-#define wxXmlResource_InitAllHandlers 2519
-#define wxXmlResource_Load 2520
-#define wxXmlResource_LoadBitmap 2521
-#define wxXmlResource_LoadDialog_2 2522
-#define wxXmlResource_LoadDialog_3 2523
-#define wxXmlResource_LoadFrame_2 2524
-#define wxXmlResource_LoadFrame_3 2525
-#define wxXmlResource_LoadIcon 2526
-#define wxXmlResource_LoadMenu 2527
-#define wxXmlResource_LoadMenuBar_2 2528
-#define wxXmlResource_LoadMenuBar_1 2529
-#define wxXmlResource_LoadPanel_2 2530
-#define wxXmlResource_LoadPanel_3 2531
-#define wxXmlResource_LoadToolBar 2532
-#define wxXmlResource_Set 2533
-#define wxXmlResource_SetFlags 2534
-#define wxXmlResource_Unload 2535
-#define wxXmlResource_xrcctrl 2536
-#define wxHtmlEasyPrinting_new 2537
-#define wxHtmlEasyPrinting_destruct 2538
-#define wxHtmlEasyPrinting_GetPrintData 2539
-#define wxHtmlEasyPrinting_GetPageSetupData 2540
-#define wxHtmlEasyPrinting_PreviewFile 2541
-#define wxHtmlEasyPrinting_PreviewText 2542
-#define wxHtmlEasyPrinting_PrintFile 2543
-#define wxHtmlEasyPrinting_PrintText 2544
-#define wxHtmlEasyPrinting_PageSetup 2545
-#define wxHtmlEasyPrinting_SetFonts 2546
-#define wxHtmlEasyPrinting_SetHeader 2547
-#define wxHtmlEasyPrinting_SetFooter 2548
-#define wxGLCanvas_new_2 2550
-#define wxGLCanvas_new_3_1 2551
-#define wxGLCanvas_new_3_0 2552
-#define wxGLCanvas_GetContext 2553
-#define wxGLCanvas_SetCurrent 2555
-#define wxGLCanvas_SwapBuffers 2556
-#define wxGLCanvas_destroy 2557
-#define wxAuiManager_new 2558
-#define wxAuiManager_destruct 2559
-#define wxAuiManager_AddPane_2_1 2560
-#define wxAuiManager_AddPane_3 2561
-#define wxAuiManager_AddPane_2_0 2562
-#define wxAuiManager_DetachPane 2563
-#define wxAuiManager_GetAllPanes 2564
-#define wxAuiManager_GetArtProvider 2565
-#define wxAuiManager_GetDockSizeConstraint 2566
-#define wxAuiManager_GetFlags 2567
-#define wxAuiManager_GetManagedWindow 2568
-#define wxAuiManager_GetManager 2569
-#define wxAuiManager_GetPane_1_1 2570
-#define wxAuiManager_GetPane_1_0 2571
-#define wxAuiManager_HideHint 2572
-#define wxAuiManager_InsertPane 2573
-#define wxAuiManager_LoadPaneInfo 2574
-#define wxAuiManager_LoadPerspective 2575
-#define wxAuiManager_SavePaneInfo 2576
-#define wxAuiManager_SavePerspective 2577
-#define wxAuiManager_SetArtProvider 2578
-#define wxAuiManager_SetDockSizeConstraint 2579
-#define wxAuiManager_SetFlags 2580
-#define wxAuiManager_SetManagedWindow 2581
-#define wxAuiManager_ShowHint 2582
-#define wxAuiManager_UnInit 2583
-#define wxAuiManager_Update 2584
-#define wxAuiPaneInfo_new_0 2585
-#define wxAuiPaneInfo_new_1 2586
-#define wxAuiPaneInfo_destruct 2587
-#define wxAuiPaneInfo_BestSize_1 2588
-#define wxAuiPaneInfo_BestSize_2 2589
-#define wxAuiPaneInfo_Bottom 2590
-#define wxAuiPaneInfo_BottomDockable 2591
-#define wxAuiPaneInfo_Caption 2592
-#define wxAuiPaneInfo_CaptionVisible 2593
-#define wxAuiPaneInfo_Centre 2594
-#define wxAuiPaneInfo_CentrePane 2595
-#define wxAuiPaneInfo_CloseButton 2596
-#define wxAuiPaneInfo_DefaultPane 2597
-#define wxAuiPaneInfo_DestroyOnClose 2598
-#define wxAuiPaneInfo_Direction 2599
-#define wxAuiPaneInfo_Dock 2600
-#define wxAuiPaneInfo_Dockable 2601
-#define wxAuiPaneInfo_Fixed 2602
-#define wxAuiPaneInfo_Float 2603
-#define wxAuiPaneInfo_Floatable 2604
-#define wxAuiPaneInfo_FloatingPosition_1 2605
-#define wxAuiPaneInfo_FloatingPosition_2 2606
-#define wxAuiPaneInfo_FloatingSize_1 2607
-#define wxAuiPaneInfo_FloatingSize_2 2608
-#define wxAuiPaneInfo_Gripper 2609
-#define wxAuiPaneInfo_GripperTop 2610
-#define wxAuiPaneInfo_HasBorder 2611
-#define wxAuiPaneInfo_HasCaption 2612
-#define wxAuiPaneInfo_HasCloseButton 2613
-#define wxAuiPaneInfo_HasFlag 2614
-#define wxAuiPaneInfo_HasGripper 2615
-#define wxAuiPaneInfo_HasGripperTop 2616
-#define wxAuiPaneInfo_HasMaximizeButton 2617
-#define wxAuiPaneInfo_HasMinimizeButton 2618
-#define wxAuiPaneInfo_HasPinButton 2619
-#define wxAuiPaneInfo_Hide 2620
-#define wxAuiPaneInfo_IsBottomDockable 2621
-#define wxAuiPaneInfo_IsDocked 2622
-#define wxAuiPaneInfo_IsFixed 2623
-#define wxAuiPaneInfo_IsFloatable 2624
-#define wxAuiPaneInfo_IsFloating 2625
-#define wxAuiPaneInfo_IsLeftDockable 2626
-#define wxAuiPaneInfo_IsMovable 2627
-#define wxAuiPaneInfo_IsOk 2628
-#define wxAuiPaneInfo_IsResizable 2629
-#define wxAuiPaneInfo_IsRightDockable 2630
-#define wxAuiPaneInfo_IsShown 2631
-#define wxAuiPaneInfo_IsToolbar 2632
-#define wxAuiPaneInfo_IsTopDockable 2633
-#define wxAuiPaneInfo_Layer 2634
-#define wxAuiPaneInfo_Left 2635
-#define wxAuiPaneInfo_LeftDockable 2636
-#define wxAuiPaneInfo_MaxSize_1 2637
-#define wxAuiPaneInfo_MaxSize_2 2638
-#define wxAuiPaneInfo_MaximizeButton 2639
-#define wxAuiPaneInfo_MinSize_1 2640
-#define wxAuiPaneInfo_MinSize_2 2641
-#define wxAuiPaneInfo_MinimizeButton 2642
-#define wxAuiPaneInfo_Movable 2643
-#define wxAuiPaneInfo_Name 2644
-#define wxAuiPaneInfo_PaneBorder 2645
-#define wxAuiPaneInfo_PinButton 2646
-#define wxAuiPaneInfo_Position 2647
-#define wxAuiPaneInfo_Resizable 2648
-#define wxAuiPaneInfo_Right 2649
-#define wxAuiPaneInfo_RightDockable 2650
-#define wxAuiPaneInfo_Row 2651
-#define wxAuiPaneInfo_SafeSet 2652
-#define wxAuiPaneInfo_SetFlag 2653
-#define wxAuiPaneInfo_Show 2654
-#define wxAuiPaneInfo_ToolbarPane 2655
-#define wxAuiPaneInfo_Top 2656
-#define wxAuiPaneInfo_TopDockable 2657
-#define wxAuiPaneInfo_Window 2658
-#define wxAuiPaneInfo_GetWindow 2659
-#define wxAuiPaneInfo_GetFrame 2660
-#define wxAuiPaneInfo_GetDirection 2661
-#define wxAuiPaneInfo_GetLayer 2662
-#define wxAuiPaneInfo_GetRow 2663
-#define wxAuiPaneInfo_GetPosition 2664
-#define wxAuiPaneInfo_GetFloatingPosition 2665
-#define wxAuiPaneInfo_GetFloatingSize 2666
-#define wxAuiNotebook_new_0 2667
-#define wxAuiNotebook_new_2 2668
-#define wxAuiNotebook_AddPage 2669
-#define wxAuiNotebook_Create 2670
-#define wxAuiNotebook_DeletePage 2671
-#define wxAuiNotebook_GetArtProvider 2672
-#define wxAuiNotebook_GetPage 2673
-#define wxAuiNotebook_GetPageBitmap 2674
-#define wxAuiNotebook_GetPageCount 2675
-#define wxAuiNotebook_GetPageIndex 2676
-#define wxAuiNotebook_GetPageText 2677
-#define wxAuiNotebook_GetSelection 2678
-#define wxAuiNotebook_InsertPage 2679
-#define wxAuiNotebook_RemovePage 2680
-#define wxAuiNotebook_SetArtProvider 2681
-#define wxAuiNotebook_SetFont 2682
-#define wxAuiNotebook_SetPageBitmap 2683
-#define wxAuiNotebook_SetPageText 2684
-#define wxAuiNotebook_SetSelection 2685
-#define wxAuiNotebook_SetTabCtrlHeight 2686
-#define wxAuiNotebook_SetUniformBitmapSize 2687
-#define wxAuiNotebook_destroy 2688
-#define wxAuiTabArt_SetFlags 2689
-#define wxAuiTabArt_SetMeasuringFont 2690
-#define wxAuiTabArt_SetNormalFont 2691
-#define wxAuiTabArt_SetSelectedFont 2692
-#define wxAuiTabArt_SetColour 2693
-#define wxAuiTabArt_SetActiveColour 2694
-#define wxAuiDockArt_GetColour 2695
-#define wxAuiDockArt_GetFont 2696
-#define wxAuiDockArt_GetMetric 2697
-#define wxAuiDockArt_SetColour 2698
-#define wxAuiDockArt_SetFont 2699
-#define wxAuiDockArt_SetMetric 2700
-#define wxAuiSimpleTabArt_new 2701
-#define wxAuiSimpleTabArt_destroy 2702
-#define wxMDIParentFrame_new_0 2703
-#define wxMDIParentFrame_new_4 2704
-#define wxMDIParentFrame_destruct 2705
-#define wxMDIParentFrame_ActivateNext 2706
-#define wxMDIParentFrame_ActivatePrevious 2707
-#define wxMDIParentFrame_ArrangeIcons 2708
-#define wxMDIParentFrame_Cascade 2709
-#define wxMDIParentFrame_Create 2710
-#define wxMDIParentFrame_GetActiveChild 2711
-#define wxMDIParentFrame_GetClientWindow 2712
-#define wxMDIParentFrame_Tile 2713
-#define wxMDIChildFrame_new_0 2714
-#define wxMDIChildFrame_new_4 2715
-#define wxMDIChildFrame_destruct 2716
-#define wxMDIChildFrame_Activate 2717
-#define wxMDIChildFrame_Create 2718
-#define wxMDIChildFrame_Maximize 2719
-#define wxMDIChildFrame_Restore 2720
-#define wxMDIClientWindow_new_0 2721
-#define wxMDIClientWindow_new_2 2722
-#define wxMDIClientWindow_destruct 2723
-#define wxMDIClientWindow_CreateClient 2724
-#define wxLayoutAlgorithm_new 2725
-#define wxLayoutAlgorithm_LayoutFrame 2726
-#define wxLayoutAlgorithm_LayoutMDIFrame 2727
-#define wxLayoutAlgorithm_LayoutWindow 2728
-#define wxLayoutAlgorithm_destroy 2729
-#define wxEvent_GetId 2730
-#define wxEvent_GetSkipped 2731
-#define wxEvent_GetTimestamp 2732
-#define wxEvent_IsCommandEvent 2733
-#define wxEvent_ResumePropagation 2734
-#define wxEvent_ShouldPropagate 2735
-#define wxEvent_Skip 2736
-#define wxEvent_StopPropagation 2737
-#define wxCommandEvent_getClientData 2738
-#define wxCommandEvent_GetExtraLong 2739
-#define wxCommandEvent_GetInt 2740
-#define wxCommandEvent_GetSelection 2741
-#define wxCommandEvent_GetString 2742
-#define wxCommandEvent_IsChecked 2743
-#define wxCommandEvent_IsSelection 2744
-#define wxCommandEvent_SetInt 2745
-#define wxCommandEvent_SetString 2746
-#define wxScrollEvent_GetOrientation 2747
-#define wxScrollEvent_GetPosition 2748
-#define wxScrollWinEvent_GetOrientation 2749
-#define wxScrollWinEvent_GetPosition 2750
-#define wxMouseEvent_AltDown 2751
-#define wxMouseEvent_Button 2752
-#define wxMouseEvent_ButtonDClick 2753
-#define wxMouseEvent_ButtonDown 2754
-#define wxMouseEvent_ButtonUp 2755
-#define wxMouseEvent_CmdDown 2756
-#define wxMouseEvent_ControlDown 2757
-#define wxMouseEvent_Dragging 2758
-#define wxMouseEvent_Entering 2759
-#define wxMouseEvent_GetButton 2760
-#define wxMouseEvent_GetPosition 2763
-#define wxMouseEvent_GetLogicalPosition 2764
-#define wxMouseEvent_GetLinesPerAction 2765
-#define wxMouseEvent_GetWheelRotation 2766
-#define wxMouseEvent_GetWheelDelta 2767
-#define wxMouseEvent_GetX 2768
-#define wxMouseEvent_GetY 2769
-#define wxMouseEvent_IsButton 2770
-#define wxMouseEvent_IsPageScroll 2771
-#define wxMouseEvent_Leaving 2772
-#define wxMouseEvent_LeftDClick 2773
-#define wxMouseEvent_LeftDown 2774
-#define wxMouseEvent_LeftIsDown 2775
-#define wxMouseEvent_LeftUp 2776
-#define wxMouseEvent_MetaDown 2777
-#define wxMouseEvent_MiddleDClick 2778
-#define wxMouseEvent_MiddleDown 2779
-#define wxMouseEvent_MiddleIsDown 2780
-#define wxMouseEvent_MiddleUp 2781
-#define wxMouseEvent_Moving 2782
-#define wxMouseEvent_RightDClick 2783
-#define wxMouseEvent_RightDown 2784
-#define wxMouseEvent_RightIsDown 2785
-#define wxMouseEvent_RightUp 2786
-#define wxMouseEvent_ShiftDown 2787
-#define wxSetCursorEvent_GetCursor 2788
-#define wxSetCursorEvent_GetX 2789
-#define wxSetCursorEvent_GetY 2790
-#define wxSetCursorEvent_HasCursor 2791
-#define wxSetCursorEvent_SetCursor 2792
-#define wxKeyEvent_AltDown 2793
-#define wxKeyEvent_CmdDown 2794
-#define wxKeyEvent_ControlDown 2795
-#define wxKeyEvent_GetKeyCode 2796
-#define wxKeyEvent_GetModifiers 2797
-#define wxKeyEvent_GetPosition 2800
-#define wxKeyEvent_GetRawKeyCode 2801
-#define wxKeyEvent_GetRawKeyFlags 2802
-#define wxKeyEvent_GetUnicodeKey 2803
-#define wxKeyEvent_GetX 2804
-#define wxKeyEvent_GetY 2805
-#define wxKeyEvent_HasModifiers 2806
-#define wxKeyEvent_MetaDown 2807
-#define wxKeyEvent_ShiftDown 2808
-#define wxSizeEvent_GetSize 2809
-#define wxMoveEvent_GetPosition 2810
-#define wxEraseEvent_GetDC 2811
-#define wxFocusEvent_GetWindow 2812
-#define wxChildFocusEvent_GetWindow 2813
-#define wxMenuEvent_GetMenu 2814
-#define wxMenuEvent_GetMenuId 2815
-#define wxMenuEvent_IsPopup 2816
-#define wxCloseEvent_CanVeto 2817
-#define wxCloseEvent_GetLoggingOff 2818
-#define wxCloseEvent_SetCanVeto 2819
-#define wxCloseEvent_SetLoggingOff 2820
-#define wxCloseEvent_Veto 2821
-#define wxShowEvent_SetShow 2822
-#define wxShowEvent_GetShow 2823
-#define wxIconizeEvent_Iconized 2824
-#define wxJoystickEvent_ButtonDown 2825
-#define wxJoystickEvent_ButtonIsDown 2826
-#define wxJoystickEvent_ButtonUp 2827
-#define wxJoystickEvent_GetButtonChange 2828
-#define wxJoystickEvent_GetButtonState 2829
-#define wxJoystickEvent_GetJoystick 2830
-#define wxJoystickEvent_GetPosition 2831
-#define wxJoystickEvent_GetZPosition 2832
-#define wxJoystickEvent_IsButton 2833
-#define wxJoystickEvent_IsMove 2834
-#define wxJoystickEvent_IsZMove 2835
-#define wxUpdateUIEvent_CanUpdate 2836
-#define wxUpdateUIEvent_Check 2837
-#define wxUpdateUIEvent_Enable 2838
-#define wxUpdateUIEvent_Show 2839
-#define wxUpdateUIEvent_GetChecked 2840
-#define wxUpdateUIEvent_GetEnabled 2841
-#define wxUpdateUIEvent_GetShown 2842
-#define wxUpdateUIEvent_GetSetChecked 2843
-#define wxUpdateUIEvent_GetSetEnabled 2844
-#define wxUpdateUIEvent_GetSetShown 2845
-#define wxUpdateUIEvent_GetSetText 2846
-#define wxUpdateUIEvent_GetText 2847
-#define wxUpdateUIEvent_GetMode 2848
-#define wxUpdateUIEvent_GetUpdateInterval 2849
-#define wxUpdateUIEvent_ResetUpdateTime 2850
-#define wxUpdateUIEvent_SetMode 2851
-#define wxUpdateUIEvent_SetText 2852
-#define wxUpdateUIEvent_SetUpdateInterval 2853
-#define wxMouseCaptureChangedEvent_GetCapturedWindow 2854
-#define wxPaletteChangedEvent_SetChangedWindow 2855
-#define wxPaletteChangedEvent_GetChangedWindow 2856
-#define wxQueryNewPaletteEvent_SetPaletteRealized 2857
-#define wxQueryNewPaletteEvent_GetPaletteRealized 2858
-#define wxNavigationKeyEvent_GetDirection 2859
-#define wxNavigationKeyEvent_SetDirection 2860
-#define wxNavigationKeyEvent_IsWindowChange 2861
-#define wxNavigationKeyEvent_SetWindowChange 2862
-#define wxNavigationKeyEvent_IsFromTab 2863
-#define wxNavigationKeyEvent_SetFromTab 2864
-#define wxNavigationKeyEvent_GetCurrentFocus 2865
-#define wxNavigationKeyEvent_SetCurrentFocus 2866
-#define wxHelpEvent_GetOrigin 2867
-#define wxHelpEvent_GetPosition 2868
-#define wxHelpEvent_SetOrigin 2869
-#define wxHelpEvent_SetPosition 2870
-#define wxContextMenuEvent_GetPosition 2871
-#define wxContextMenuEvent_SetPosition 2872
-#define wxIdleEvent_CanSend 2873
-#define wxIdleEvent_GetMode 2874
-#define wxIdleEvent_RequestMore 2875
-#define wxIdleEvent_MoreRequested 2876
-#define wxIdleEvent_SetMode 2877
-#define wxGridEvent_AltDown 2878
-#define wxGridEvent_ControlDown 2879
-#define wxGridEvent_GetCol 2880
-#define wxGridEvent_GetPosition 2881
-#define wxGridEvent_GetRow 2882
-#define wxGridEvent_MetaDown 2883
-#define wxGridEvent_Selecting 2884
-#define wxGridEvent_ShiftDown 2885
-#define wxNotifyEvent_Allow 2886
-#define wxNotifyEvent_IsAllowed 2887
-#define wxNotifyEvent_Veto 2888
-#define wxSashEvent_GetEdge 2889
-#define wxSashEvent_GetDragRect 2890
-#define wxSashEvent_GetDragStatus 2891
-#define wxListEvent_GetCacheFrom 2892
-#define wxListEvent_GetCacheTo 2893
-#define wxListEvent_GetKeyCode 2894
-#define wxListEvent_GetIndex 2895
-#define wxListEvent_GetColumn 2896
-#define wxListEvent_GetPoint 2897
-#define wxListEvent_GetLabel 2898
-#define wxListEvent_GetText 2899
-#define wxListEvent_GetImage 2900
-#define wxListEvent_GetData 2901
-#define wxListEvent_GetMask 2902
-#define wxListEvent_GetItem 2903
-#define wxListEvent_IsEditCancelled 2904
-#define wxDateEvent_GetDate 2905
-#define wxCalendarEvent_GetWeekDay 2906
-#define wxFileDirPickerEvent_GetPath 2907
-#define wxColourPickerEvent_GetColour 2908
-#define wxFontPickerEvent_GetFont 2909
-#define wxStyledTextEvent_GetPosition 2910
-#define wxStyledTextEvent_GetKey 2911
-#define wxStyledTextEvent_GetModifiers 2912
-#define wxStyledTextEvent_GetModificationType 2913
-#define wxStyledTextEvent_GetText 2914
-#define wxStyledTextEvent_GetLength 2915
-#define wxStyledTextEvent_GetLinesAdded 2916
-#define wxStyledTextEvent_GetLine 2917
-#define wxStyledTextEvent_GetFoldLevelNow 2918
-#define wxStyledTextEvent_GetFoldLevelPrev 2919
-#define wxStyledTextEvent_GetMargin 2920
-#define wxStyledTextEvent_GetMessage 2921
-#define wxStyledTextEvent_GetWParam 2922
-#define wxStyledTextEvent_GetLParam 2923
-#define wxStyledTextEvent_GetListType 2924
-#define wxStyledTextEvent_GetX 2925
-#define wxStyledTextEvent_GetY 2926
-#define wxStyledTextEvent_GetDragText 2927
-#define wxStyledTextEvent_GetDragAllowMove 2928
-#define wxStyledTextEvent_GetDragResult 2929
-#define wxStyledTextEvent_GetShift 2930
-#define wxStyledTextEvent_GetControl 2931
-#define wxStyledTextEvent_GetAlt 2932
-#define utils_wxGetKeyState 2933
-#define utils_wxGetMousePosition 2934
-#define utils_wxGetMouseState 2935
-#define utils_wxSetDetectableAutoRepeat 2936
-#define utils_wxBell 2937
-#define utils_wxFindMenuItemId 2938
-#define utils_wxGenericFindWindowAtPoint 2939
-#define utils_wxFindWindowAtPoint 2940
-#define utils_wxBeginBusyCursor 2941
-#define utils_wxEndBusyCursor 2942
-#define utils_wxIsBusy 2943
-#define utils_wxShutdown 2944
-#define utils_wxShell 2945
-#define utils_wxLaunchDefaultBrowser 2946
-#define utils_wxGetEmailAddress 2947
-#define utils_wxGetUserId 2948
-#define utils_wxGetHomeDir 2949
-#define utils_wxNewId 2950
-#define utils_wxRegisterId 2951
-#define utils_wxGetCurrentId 2952
-#define utils_wxGetOsDescription 2953
-#define utils_wxIsPlatformLittleEndian 2954
-#define utils_wxIsPlatform64Bit 2955
-#define gdicmn_wxDisplaySize 2956
-#define gdicmn_wxSetCursor 2957
-#define wxPrintout_new 2958
-#define wxPrintout_destruct 2959
-#define wxPrintout_GetDC 2960
-#define wxPrintout_GetPageSizeMM 2961
-#define wxPrintout_GetPageSizePixels 2962
-#define wxPrintout_GetPaperRectPixels 2963
-#define wxPrintout_GetPPIPrinter 2964
-#define wxPrintout_GetPPIScreen 2965
-#define wxPrintout_GetTitle 2966
-#define wxPrintout_IsPreview 2967
-#define wxPrintout_FitThisSizeToPaper 2968
-#define wxPrintout_FitThisSizeToPage 2969
-#define wxPrintout_FitThisSizeToPageMargins 2970
-#define wxPrintout_MapScreenSizeToPaper 2971
-#define wxPrintout_MapScreenSizeToPage 2972
-#define wxPrintout_MapScreenSizeToPageMargins 2973
-#define wxPrintout_MapScreenSizeToDevice 2974
-#define wxPrintout_GetLogicalPaperRect 2975
-#define wxPrintout_GetLogicalPageRect 2976
-#define wxPrintout_GetLogicalPageMarginsRect 2977
-#define wxPrintout_SetLogicalOrigin 2978
-#define wxPrintout_OffsetLogicalOrigin 2979
-#define wxStyledTextCtrl_new_2 2980
-#define wxStyledTextCtrl_new_0 2981
-#define wxStyledTextCtrl_destruct 2982
-#define wxStyledTextCtrl_Create 2983
-#define wxStyledTextCtrl_AddText 2984
-#define wxStyledTextCtrl_AddStyledText 2985
-#define wxStyledTextCtrl_InsertText 2986
-#define wxStyledTextCtrl_ClearAll 2987
-#define wxStyledTextCtrl_ClearDocumentStyle 2988
-#define wxStyledTextCtrl_GetLength 2989
-#define wxStyledTextCtrl_GetCharAt 2990
-#define wxStyledTextCtrl_GetCurrentPos 2991
-#define wxStyledTextCtrl_GetAnchor 2992
-#define wxStyledTextCtrl_GetStyleAt 2993
-#define wxStyledTextCtrl_Redo 2994
-#define wxStyledTextCtrl_SetUndoCollection 2995
-#define wxStyledTextCtrl_SelectAll 2996
-#define wxStyledTextCtrl_SetSavePoint 2997
-#define wxStyledTextCtrl_GetStyledText 2998
-#define wxStyledTextCtrl_CanRedo 2999
-#define wxStyledTextCtrl_MarkerLineFromHandle 3000
-#define wxStyledTextCtrl_MarkerDeleteHandle 3001
-#define wxStyledTextCtrl_GetUndoCollection 3002
-#define wxStyledTextCtrl_GetViewWhiteSpace 3003
-#define wxStyledTextCtrl_SetViewWhiteSpace 3004
-#define wxStyledTextCtrl_PositionFromPoint 3005
-#define wxStyledTextCtrl_PositionFromPointClose 3006
-#define wxStyledTextCtrl_GotoLine 3007
-#define wxStyledTextCtrl_GotoPos 3008
-#define wxStyledTextCtrl_SetAnchor 3009
-#define wxStyledTextCtrl_GetCurLine 3010
-#define wxStyledTextCtrl_GetEndStyled 3011
-#define wxStyledTextCtrl_ConvertEOLs 3012
-#define wxStyledTextCtrl_GetEOLMode 3013
-#define wxStyledTextCtrl_SetEOLMode 3014
-#define wxStyledTextCtrl_StartStyling 3015
-#define wxStyledTextCtrl_SetStyling 3016
-#define wxStyledTextCtrl_GetBufferedDraw 3017
-#define wxStyledTextCtrl_SetBufferedDraw 3018
-#define wxStyledTextCtrl_SetTabWidth 3019
-#define wxStyledTextCtrl_GetTabWidth 3020
-#define wxStyledTextCtrl_SetCodePage 3021
-#define wxStyledTextCtrl_MarkerDefine 3022
-#define wxStyledTextCtrl_MarkerSetForeground 3023
-#define wxStyledTextCtrl_MarkerSetBackground 3024
-#define wxStyledTextCtrl_MarkerAdd 3025
-#define wxStyledTextCtrl_MarkerDelete 3026
-#define wxStyledTextCtrl_MarkerDeleteAll 3027
-#define wxStyledTextCtrl_MarkerGet 3028
-#define wxStyledTextCtrl_MarkerNext 3029
-#define wxStyledTextCtrl_MarkerPrevious 3030
-#define wxStyledTextCtrl_MarkerDefineBitmap 3031
-#define wxStyledTextCtrl_MarkerAddSet 3032
-#define wxStyledTextCtrl_MarkerSetAlpha 3033
-#define wxStyledTextCtrl_SetMarginType 3034
-#define wxStyledTextCtrl_GetMarginType 3035
-#define wxStyledTextCtrl_SetMarginWidth 3036
-#define wxStyledTextCtrl_GetMarginWidth 3037
-#define wxStyledTextCtrl_SetMarginMask 3038
-#define wxStyledTextCtrl_GetMarginMask 3039
-#define wxStyledTextCtrl_SetMarginSensitive 3040
-#define wxStyledTextCtrl_GetMarginSensitive 3041
-#define wxStyledTextCtrl_StyleClearAll 3042
-#define wxStyledTextCtrl_StyleSetForeground 3043
-#define wxStyledTextCtrl_StyleSetBackground 3044
-#define wxStyledTextCtrl_StyleSetBold 3045
-#define wxStyledTextCtrl_StyleSetItalic 3046
-#define wxStyledTextCtrl_StyleSetSize 3047
-#define wxStyledTextCtrl_StyleSetFaceName 3048
-#define wxStyledTextCtrl_StyleSetEOLFilled 3049
-#define wxStyledTextCtrl_StyleResetDefault 3050
-#define wxStyledTextCtrl_StyleSetUnderline 3051
-#define wxStyledTextCtrl_StyleSetCase 3052
-#define wxStyledTextCtrl_StyleSetHotSpot 3053
-#define wxStyledTextCtrl_SetSelForeground 3054
-#define wxStyledTextCtrl_SetSelBackground 3055
-#define wxStyledTextCtrl_GetSelAlpha 3056
-#define wxStyledTextCtrl_SetSelAlpha 3057
-#define wxStyledTextCtrl_SetCaretForeground 3058
-#define wxStyledTextCtrl_CmdKeyAssign 3059
-#define wxStyledTextCtrl_CmdKeyClear 3060
-#define wxStyledTextCtrl_CmdKeyClearAll 3061
-#define wxStyledTextCtrl_SetStyleBytes 3062
-#define wxStyledTextCtrl_StyleSetVisible 3063
-#define wxStyledTextCtrl_GetCaretPeriod 3064
-#define wxStyledTextCtrl_SetCaretPeriod 3065
-#define wxStyledTextCtrl_SetWordChars 3066
-#define wxStyledTextCtrl_BeginUndoAction 3067
-#define wxStyledTextCtrl_EndUndoAction 3068
-#define wxStyledTextCtrl_IndicatorSetStyle 3069
-#define wxStyledTextCtrl_IndicatorGetStyle 3070
-#define wxStyledTextCtrl_IndicatorSetForeground 3071
-#define wxStyledTextCtrl_IndicatorGetForeground 3072
-#define wxStyledTextCtrl_SetWhitespaceForeground 3073
-#define wxStyledTextCtrl_SetWhitespaceBackground 3074
-#define wxStyledTextCtrl_GetStyleBits 3075
-#define wxStyledTextCtrl_SetLineState 3076
-#define wxStyledTextCtrl_GetLineState 3077
-#define wxStyledTextCtrl_GetMaxLineState 3078
-#define wxStyledTextCtrl_GetCaretLineVisible 3079
-#define wxStyledTextCtrl_SetCaretLineVisible 3080
-#define wxStyledTextCtrl_GetCaretLineBackground 3081
-#define wxStyledTextCtrl_SetCaretLineBackground 3082
-#define wxStyledTextCtrl_AutoCompShow 3083
-#define wxStyledTextCtrl_AutoCompCancel 3084
-#define wxStyledTextCtrl_AutoCompActive 3085
-#define wxStyledTextCtrl_AutoCompPosStart 3086
-#define wxStyledTextCtrl_AutoCompComplete 3087
-#define wxStyledTextCtrl_AutoCompStops 3088
-#define wxStyledTextCtrl_AutoCompSetSeparator 3089
-#define wxStyledTextCtrl_AutoCompGetSeparator 3090
-#define wxStyledTextCtrl_AutoCompSelect 3091
-#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3092
-#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3093
-#define wxStyledTextCtrl_AutoCompSetFillUps 3094
-#define wxStyledTextCtrl_AutoCompSetChooseSingle 3095
-#define wxStyledTextCtrl_AutoCompGetChooseSingle 3096
-#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3097
-#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3098
-#define wxStyledTextCtrl_UserListShow 3099
-#define wxStyledTextCtrl_AutoCompSetAutoHide 3100
-#define wxStyledTextCtrl_AutoCompGetAutoHide 3101
-#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3102
-#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3103
-#define wxStyledTextCtrl_RegisterImage 3104
-#define wxStyledTextCtrl_ClearRegisteredImages 3105
-#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3106
-#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3107
-#define wxStyledTextCtrl_AutoCompSetMaxWidth 3108
-#define wxStyledTextCtrl_AutoCompGetMaxWidth 3109
-#define wxStyledTextCtrl_AutoCompSetMaxHeight 3110
-#define wxStyledTextCtrl_AutoCompGetMaxHeight 3111
-#define wxStyledTextCtrl_SetIndent 3112
-#define wxStyledTextCtrl_GetIndent 3113
-#define wxStyledTextCtrl_SetUseTabs 3114
-#define wxStyledTextCtrl_GetUseTabs 3115
-#define wxStyledTextCtrl_SetLineIndentation 3116
-#define wxStyledTextCtrl_GetLineIndentation 3117
-#define wxStyledTextCtrl_GetLineIndentPosition 3118
-#define wxStyledTextCtrl_GetColumn 3119
-#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3120
-#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3121
-#define wxStyledTextCtrl_SetIndentationGuides 3122
-#define wxStyledTextCtrl_GetIndentationGuides 3123
-#define wxStyledTextCtrl_SetHighlightGuide 3124
-#define wxStyledTextCtrl_GetHighlightGuide 3125
-#define wxStyledTextCtrl_GetLineEndPosition 3126
-#define wxStyledTextCtrl_GetCodePage 3127
-#define wxStyledTextCtrl_GetCaretForeground 3128
-#define wxStyledTextCtrl_GetReadOnly 3129
-#define wxStyledTextCtrl_SetCurrentPos 3130
-#define wxStyledTextCtrl_SetSelectionStart 3131
-#define wxStyledTextCtrl_GetSelectionStart 3132
-#define wxStyledTextCtrl_SetSelectionEnd 3133
-#define wxStyledTextCtrl_GetSelectionEnd 3134
-#define wxStyledTextCtrl_SetPrintMagnification 3135
-#define wxStyledTextCtrl_GetPrintMagnification 3136
-#define wxStyledTextCtrl_SetPrintColourMode 3137
-#define wxStyledTextCtrl_GetPrintColourMode 3138
-#define wxStyledTextCtrl_FindText 3139
-#define wxStyledTextCtrl_FormatRange 3140
-#define wxStyledTextCtrl_GetFirstVisibleLine 3141
-#define wxStyledTextCtrl_GetLine 3142
-#define wxStyledTextCtrl_GetLineCount 3143
-#define wxStyledTextCtrl_SetMarginLeft 3144
-#define wxStyledTextCtrl_GetMarginLeft 3145
-#define wxStyledTextCtrl_SetMarginRight 3146
-#define wxStyledTextCtrl_GetMarginRight 3147
-#define wxStyledTextCtrl_GetModify 3148
-#define wxStyledTextCtrl_SetSelection 3149
-#define wxStyledTextCtrl_GetSelectedText 3150
-#define wxStyledTextCtrl_GetTextRange 3151
-#define wxStyledTextCtrl_HideSelection 3152
-#define wxStyledTextCtrl_LineFromPosition 3153
-#define wxStyledTextCtrl_PositionFromLine 3154
-#define wxStyledTextCtrl_LineScroll 3155
-#define wxStyledTextCtrl_EnsureCaretVisible 3156
-#define wxStyledTextCtrl_ReplaceSelection 3157
-#define wxStyledTextCtrl_SetReadOnly 3158
-#define wxStyledTextCtrl_CanPaste 3159
-#define wxStyledTextCtrl_CanUndo 3160
-#define wxStyledTextCtrl_EmptyUndoBuffer 3161
-#define wxStyledTextCtrl_Undo 3162
-#define wxStyledTextCtrl_Cut 3163
-#define wxStyledTextCtrl_Copy 3164
-#define wxStyledTextCtrl_Paste 3165
-#define wxStyledTextCtrl_Clear 3166
-#define wxStyledTextCtrl_SetText 3167
-#define wxStyledTextCtrl_GetText 3168
-#define wxStyledTextCtrl_GetTextLength 3169
-#define wxStyledTextCtrl_GetOvertype 3170
-#define wxStyledTextCtrl_SetCaretWidth 3171
-#define wxStyledTextCtrl_GetCaretWidth 3172
-#define wxStyledTextCtrl_SetTargetStart 3173
-#define wxStyledTextCtrl_GetTargetStart 3174
-#define wxStyledTextCtrl_SetTargetEnd 3175
-#define wxStyledTextCtrl_GetTargetEnd 3176
-#define wxStyledTextCtrl_ReplaceTarget 3177
-#define wxStyledTextCtrl_SearchInTarget 3178
-#define wxStyledTextCtrl_SetSearchFlags 3179
-#define wxStyledTextCtrl_GetSearchFlags 3180
-#define wxStyledTextCtrl_CallTipShow 3181
-#define wxStyledTextCtrl_CallTipCancel 3182
-#define wxStyledTextCtrl_CallTipActive 3183
-#define wxStyledTextCtrl_CallTipPosAtStart 3184
-#define wxStyledTextCtrl_CallTipSetHighlight 3185
-#define wxStyledTextCtrl_CallTipSetBackground 3186
-#define wxStyledTextCtrl_CallTipSetForeground 3187
-#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3188
-#define wxStyledTextCtrl_CallTipUseStyle 3189
-#define wxStyledTextCtrl_VisibleFromDocLine 3190
-#define wxStyledTextCtrl_DocLineFromVisible 3191
-#define wxStyledTextCtrl_WrapCount 3192
-#define wxStyledTextCtrl_SetFoldLevel 3193
-#define wxStyledTextCtrl_GetFoldLevel 3194
-#define wxStyledTextCtrl_GetLastChild 3195
-#define wxStyledTextCtrl_GetFoldParent 3196
-#define wxStyledTextCtrl_ShowLines 3197
-#define wxStyledTextCtrl_HideLines 3198
-#define wxStyledTextCtrl_GetLineVisible 3199
-#define wxStyledTextCtrl_SetFoldExpanded 3200
-#define wxStyledTextCtrl_GetFoldExpanded 3201
-#define wxStyledTextCtrl_ToggleFold 3202
-#define wxStyledTextCtrl_EnsureVisible 3203
-#define wxStyledTextCtrl_SetFoldFlags 3204
-#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3205
-#define wxStyledTextCtrl_SetTabIndents 3206
-#define wxStyledTextCtrl_GetTabIndents 3207
-#define wxStyledTextCtrl_SetBackSpaceUnIndents 3208
-#define wxStyledTextCtrl_GetBackSpaceUnIndents 3209
-#define wxStyledTextCtrl_SetMouseDwellTime 3210
-#define wxStyledTextCtrl_GetMouseDwellTime 3211
-#define wxStyledTextCtrl_WordStartPosition 3212
-#define wxStyledTextCtrl_WordEndPosition 3213
-#define wxStyledTextCtrl_SetWrapMode 3214
-#define wxStyledTextCtrl_GetWrapMode 3215
-#define wxStyledTextCtrl_SetWrapVisualFlags 3216
-#define wxStyledTextCtrl_GetWrapVisualFlags 3217
-#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3218
-#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3219
-#define wxStyledTextCtrl_SetWrapStartIndent 3220
-#define wxStyledTextCtrl_GetWrapStartIndent 3221
-#define wxStyledTextCtrl_SetLayoutCache 3222
-#define wxStyledTextCtrl_GetLayoutCache 3223
-#define wxStyledTextCtrl_SetScrollWidth 3224
-#define wxStyledTextCtrl_GetScrollWidth 3225
-#define wxStyledTextCtrl_TextWidth 3226
-#define wxStyledTextCtrl_GetEndAtLastLine 3227
-#define wxStyledTextCtrl_TextHeight 3228
-#define wxStyledTextCtrl_SetUseVerticalScrollBar 3229
-#define wxStyledTextCtrl_GetUseVerticalScrollBar 3230
-#define wxStyledTextCtrl_AppendText 3231
-#define wxStyledTextCtrl_GetTwoPhaseDraw 3232
-#define wxStyledTextCtrl_SetTwoPhaseDraw 3233
-#define wxStyledTextCtrl_TargetFromSelection 3234
-#define wxStyledTextCtrl_LinesJoin 3235
-#define wxStyledTextCtrl_LinesSplit 3236
-#define wxStyledTextCtrl_SetFoldMarginColour 3237
-#define wxStyledTextCtrl_SetFoldMarginHiColour 3238
-#define wxStyledTextCtrl_LineDown 3239
-#define wxStyledTextCtrl_LineDownExtend 3240
-#define wxStyledTextCtrl_LineUp 3241
-#define wxStyledTextCtrl_LineUpExtend 3242
-#define wxStyledTextCtrl_CharLeft 3243
-#define wxStyledTextCtrl_CharLeftExtend 3244
-#define wxStyledTextCtrl_CharRight 3245
-#define wxStyledTextCtrl_CharRightExtend 3246
-#define wxStyledTextCtrl_WordLeft 3247
-#define wxStyledTextCtrl_WordLeftExtend 3248
-#define wxStyledTextCtrl_WordRight 3249
-#define wxStyledTextCtrl_WordRightExtend 3250
-#define wxStyledTextCtrl_Home 3251
-#define wxStyledTextCtrl_HomeExtend 3252
-#define wxStyledTextCtrl_LineEnd 3253
-#define wxStyledTextCtrl_LineEndExtend 3254
-#define wxStyledTextCtrl_DocumentStart 3255
-#define wxStyledTextCtrl_DocumentStartExtend 3256
-#define wxStyledTextCtrl_DocumentEnd 3257
-#define wxStyledTextCtrl_DocumentEndExtend 3258
-#define wxStyledTextCtrl_PageUp 3259
-#define wxStyledTextCtrl_PageUpExtend 3260
-#define wxStyledTextCtrl_PageDown 3261
-#define wxStyledTextCtrl_PageDownExtend 3262
-#define wxStyledTextCtrl_EditToggleOvertype 3263
-#define wxStyledTextCtrl_Cancel 3264
-#define wxStyledTextCtrl_DeleteBack 3265
-#define wxStyledTextCtrl_Tab 3266
-#define wxStyledTextCtrl_BackTab 3267
-#define wxStyledTextCtrl_NewLine 3268
-#define wxStyledTextCtrl_FormFeed 3269
-#define wxStyledTextCtrl_VCHome 3270
-#define wxStyledTextCtrl_VCHomeExtend 3271
-#define wxStyledTextCtrl_ZoomIn 3272
-#define wxStyledTextCtrl_ZoomOut 3273
-#define wxStyledTextCtrl_DelWordLeft 3274
-#define wxStyledTextCtrl_DelWordRight 3275
-#define wxStyledTextCtrl_LineCut 3276
-#define wxStyledTextCtrl_LineDelete 3277
-#define wxStyledTextCtrl_LineTranspose 3278
-#define wxStyledTextCtrl_LineDuplicate 3279
-#define wxStyledTextCtrl_LowerCase 3280
-#define wxStyledTextCtrl_UpperCase 3281
-#define wxStyledTextCtrl_LineScrollDown 3282
-#define wxStyledTextCtrl_LineScrollUp 3283
-#define wxStyledTextCtrl_DeleteBackNotLine 3284
-#define wxStyledTextCtrl_HomeDisplay 3285
-#define wxStyledTextCtrl_HomeDisplayExtend 3286
-#define wxStyledTextCtrl_LineEndDisplay 3287
-#define wxStyledTextCtrl_LineEndDisplayExtend 3288
-#define wxStyledTextCtrl_HomeWrapExtend 3289
-#define wxStyledTextCtrl_LineEndWrap 3290
-#define wxStyledTextCtrl_LineEndWrapExtend 3291
-#define wxStyledTextCtrl_VCHomeWrap 3292
-#define wxStyledTextCtrl_VCHomeWrapExtend 3293
-#define wxStyledTextCtrl_LineCopy 3294
-#define wxStyledTextCtrl_MoveCaretInsideView 3295
-#define wxStyledTextCtrl_LineLength 3296
-#define wxStyledTextCtrl_BraceHighlight 3297
-#define wxStyledTextCtrl_BraceBadLight 3298
-#define wxStyledTextCtrl_BraceMatch 3299
-#define wxStyledTextCtrl_GetViewEOL 3300
-#define wxStyledTextCtrl_SetViewEOL 3301
-#define wxStyledTextCtrl_SetModEventMask 3302
-#define wxStyledTextCtrl_GetEdgeColumn 3303
-#define wxStyledTextCtrl_SetEdgeColumn 3304
-#define wxStyledTextCtrl_SetEdgeMode 3305
-#define wxStyledTextCtrl_GetEdgeMode 3306
-#define wxStyledTextCtrl_GetEdgeColour 3307
-#define wxStyledTextCtrl_SetEdgeColour 3308
-#define wxStyledTextCtrl_SearchAnchor 3309
-#define wxStyledTextCtrl_SearchNext 3310
-#define wxStyledTextCtrl_SearchPrev 3311
-#define wxStyledTextCtrl_LinesOnScreen 3312
-#define wxStyledTextCtrl_UsePopUp 3313
-#define wxStyledTextCtrl_SelectionIsRectangle 3314
-#define wxStyledTextCtrl_SetZoom 3315
-#define wxStyledTextCtrl_GetZoom 3316
-#define wxStyledTextCtrl_GetModEventMask 3317
-#define wxStyledTextCtrl_SetSTCFocus 3318
-#define wxStyledTextCtrl_GetSTCFocus 3319
-#define wxStyledTextCtrl_SetStatus 3320
-#define wxStyledTextCtrl_GetStatus 3321
-#define wxStyledTextCtrl_SetMouseDownCaptures 3322
-#define wxStyledTextCtrl_GetMouseDownCaptures 3323
-#define wxStyledTextCtrl_SetSTCCursor 3324
-#define wxStyledTextCtrl_GetSTCCursor 3325
-#define wxStyledTextCtrl_SetControlCharSymbol 3326
-#define wxStyledTextCtrl_GetControlCharSymbol 3327
-#define wxStyledTextCtrl_WordPartLeft 3328
-#define wxStyledTextCtrl_WordPartLeftExtend 3329
-#define wxStyledTextCtrl_WordPartRight 3330
-#define wxStyledTextCtrl_WordPartRightExtend 3331
-#define wxStyledTextCtrl_SetVisiblePolicy 3332
-#define wxStyledTextCtrl_DelLineLeft 3333
-#define wxStyledTextCtrl_DelLineRight 3334
-#define wxStyledTextCtrl_GetXOffset 3335
-#define wxStyledTextCtrl_ChooseCaretX 3336
-#define wxStyledTextCtrl_SetXCaretPolicy 3337
-#define wxStyledTextCtrl_SetYCaretPolicy 3338
-#define wxStyledTextCtrl_GetPrintWrapMode 3339
-#define wxStyledTextCtrl_SetHotspotActiveForeground 3340
-#define wxStyledTextCtrl_SetHotspotActiveBackground 3341
-#define wxStyledTextCtrl_SetHotspotActiveUnderline 3342
-#define wxStyledTextCtrl_SetHotspotSingleLine 3343
-#define wxStyledTextCtrl_ParaDownExtend 3344
-#define wxStyledTextCtrl_ParaUp 3345
-#define wxStyledTextCtrl_ParaUpExtend 3346
-#define wxStyledTextCtrl_PositionBefore 3347
-#define wxStyledTextCtrl_PositionAfter 3348
-#define wxStyledTextCtrl_CopyRange 3349
-#define wxStyledTextCtrl_CopyText 3350
-#define wxStyledTextCtrl_SetSelectionMode 3351
-#define wxStyledTextCtrl_GetSelectionMode 3352
-#define wxStyledTextCtrl_LineDownRectExtend 3353
-#define wxStyledTextCtrl_LineUpRectExtend 3354
-#define wxStyledTextCtrl_CharLeftRectExtend 3355
-#define wxStyledTextCtrl_CharRightRectExtend 3356
-#define wxStyledTextCtrl_HomeRectExtend 3357
-#define wxStyledTextCtrl_VCHomeRectExtend 3358
-#define wxStyledTextCtrl_LineEndRectExtend 3359
-#define wxStyledTextCtrl_PageUpRectExtend 3360
-#define wxStyledTextCtrl_PageDownRectExtend 3361
-#define wxStyledTextCtrl_StutteredPageUp 3362
-#define wxStyledTextCtrl_StutteredPageUpExtend 3363
-#define wxStyledTextCtrl_StutteredPageDown 3364
-#define wxStyledTextCtrl_StutteredPageDownExtend 3365
-#define wxStyledTextCtrl_WordLeftEnd 3366
-#define wxStyledTextCtrl_WordLeftEndExtend 3367
-#define wxStyledTextCtrl_WordRightEnd 3368
-#define wxStyledTextCtrl_WordRightEndExtend 3369
-#define wxStyledTextCtrl_SetWhitespaceChars 3370
-#define wxStyledTextCtrl_SetCharsDefault 3371
-#define wxStyledTextCtrl_AutoCompGetCurrent 3372
-#define wxStyledTextCtrl_Allocate 3373
-#define wxStyledTextCtrl_FindColumn 3374
-#define wxStyledTextCtrl_GetCaretSticky 3375
-#define wxStyledTextCtrl_SetCaretSticky 3376
-#define wxStyledTextCtrl_ToggleCaretSticky 3377
-#define wxStyledTextCtrl_SetPasteConvertEndings 3378
-#define wxStyledTextCtrl_GetPasteConvertEndings 3379
-#define wxStyledTextCtrl_SelectionDuplicate 3380
-#define wxStyledTextCtrl_SetCaretLineBackAlpha 3381
-#define wxStyledTextCtrl_GetCaretLineBackAlpha 3382
-#define wxStyledTextCtrl_StartRecord 3383
-#define wxStyledTextCtrl_StopRecord 3384
-#define wxStyledTextCtrl_SetLexer 3385
-#define wxStyledTextCtrl_GetLexer 3386
-#define wxStyledTextCtrl_Colourise 3387
-#define wxStyledTextCtrl_SetProperty 3388
-#define wxStyledTextCtrl_SetKeyWords 3389
-#define wxStyledTextCtrl_SetLexerLanguage 3390
-#define wxStyledTextCtrl_GetProperty 3391
-#define wxStyledTextCtrl_GetStyleBitsNeeded 3392
-#define wxStyledTextCtrl_GetCurrentLine 3393
-#define wxStyledTextCtrl_StyleSetSpec 3394
-#define wxStyledTextCtrl_StyleSetFont 3395
-#define wxStyledTextCtrl_StyleSetFontAttr 3396
-#define wxStyledTextCtrl_StyleSetCharacterSet 3397
-#define wxStyledTextCtrl_StyleSetFontEncoding 3398
-#define wxStyledTextCtrl_CmdKeyExecute 3399
-#define wxStyledTextCtrl_SetMargins 3400
-#define wxStyledTextCtrl_GetSelection 3401
-#define wxStyledTextCtrl_PointFromPosition 3402
-#define wxStyledTextCtrl_ScrollToLine 3403
-#define wxStyledTextCtrl_ScrollToColumn 3404
-#define wxStyledTextCtrl_SetVScrollBar 3405
-#define wxStyledTextCtrl_SetHScrollBar 3406
-#define wxStyledTextCtrl_GetLastKeydownProcessed 3407
-#define wxStyledTextCtrl_SetLastKeydownProcessed 3408
-#define wxStyledTextCtrl_SaveFile 3409
-#define wxStyledTextCtrl_LoadFile 3410
-#define wxStyledTextCtrl_DoDragOver 3411
-#define wxStyledTextCtrl_DoDropText 3412
-#define wxStyledTextCtrl_GetUseAntiAliasing 3413
-#define wxStyledTextCtrl_AddTextRaw 3414
-#define wxStyledTextCtrl_InsertTextRaw 3415
-#define wxStyledTextCtrl_GetCurLineRaw 3416
-#define wxStyledTextCtrl_GetLineRaw 3417
-#define wxStyledTextCtrl_GetSelectedTextRaw 3418
-#define wxStyledTextCtrl_GetTextRangeRaw 3419
-#define wxStyledTextCtrl_SetTextRaw 3420
-#define wxStyledTextCtrl_GetTextRaw 3421
-#define wxStyledTextCtrl_AppendTextRaw 3422
-#define wxArtProvider_GetBitmap 3423
-#define wxArtProvider_GetIcon 3424
-#define wxTreeEvent_GetKeyCode 3425
-#define wxTreeEvent_GetItem 3426
-#define wxTreeEvent_GetKeyEvent 3427
-#define wxTreeEvent_GetLabel 3428
-#define wxTreeEvent_GetOldItem 3429
-#define wxTreeEvent_GetPoint 3430
-#define wxTreeEvent_IsEditCancelled 3431
-#define wxTreeEvent_SetToolTip 3432
-#define wxNotebookEvent_GetOldSelection 3433
-#define wxNotebookEvent_GetSelection 3434
-#define wxNotebookEvent_SetOldSelection 3435
-#define wxNotebookEvent_SetSelection 3436
-#define wxFileDataObject_new 3437
-#define wxFileDataObject_AddFile 3438
-#define wxFileDataObject_GetFilenames 3439
-#define wxFileDataObject_destroy 3440
-#define wxTextDataObject_new 3441
-#define wxTextDataObject_GetTextLength 3442
-#define wxTextDataObject_GetText 3443
-#define wxTextDataObject_SetText 3444
-#define wxTextDataObject_destroy 3445
-#define wxBitmapDataObject_new_1_1 3446
-#define wxBitmapDataObject_new_1_0 3447
-#define wxBitmapDataObject_GetBitmap 3448
-#define wxBitmapDataObject_SetBitmap 3449
-#define wxBitmapDataObject_destroy 3450
-#define wxClipboard_new 3452
-#define wxClipboard_destruct 3453
-#define wxClipboard_AddData 3454
-#define wxClipboard_Clear 3455
-#define wxClipboard_Close 3456
-#define wxClipboard_Flush 3457
-#define wxClipboard_GetData 3458
-#define wxClipboard_IsOpened 3459
-#define wxClipboard_Open 3460
-#define wxClipboard_SetData 3461
-#define wxClipboard_UsePrimarySelection 3463
-#define wxClipboard_IsSupported 3464
-#define wxClipboard_Get 3465
-#define wxSpinEvent_GetPosition 3466
-#define wxSpinEvent_SetPosition 3467
-#define wxSplitterWindow_new_0 3468
-#define wxSplitterWindow_new_2 3469
-#define wxSplitterWindow_destruct 3470
-#define wxSplitterWindow_Create 3471
-#define wxSplitterWindow_GetMinimumPaneSize 3472
-#define wxSplitterWindow_GetSashGravity 3473
-#define wxSplitterWindow_GetSashPosition 3474
-#define wxSplitterWindow_GetSplitMode 3475
-#define wxSplitterWindow_GetWindow1 3476
-#define wxSplitterWindow_GetWindow2 3477
-#define wxSplitterWindow_Initialize 3478
-#define wxSplitterWindow_IsSplit 3479
-#define wxSplitterWindow_ReplaceWindow 3480
-#define wxSplitterWindow_SetSashGravity 3481
-#define wxSplitterWindow_SetSashPosition 3482
-#define wxSplitterWindow_SetSashSize 3483
-#define wxSplitterWindow_SetMinimumPaneSize 3484
-#define wxSplitterWindow_SetSplitMode 3485
-#define wxSplitterWindow_SplitHorizontally 3486
-#define wxSplitterWindow_SplitVertically 3487
-#define wxSplitterWindow_Unsplit 3488
-#define wxSplitterWindow_UpdateSize 3489
-#define wxSplitterEvent_GetSashPosition 3490
-#define wxSplitterEvent_GetX 3491
-#define wxSplitterEvent_GetY 3492
-#define wxSplitterEvent_GetWindowBeingRemoved 3493
-#define wxSplitterEvent_SetSashPosition 3494
-#define wxHtmlWindow_new_0 3495
-#define wxHtmlWindow_new_2 3496
-#define wxHtmlWindow_AppendToPage 3497
-#define wxHtmlWindow_GetOpenedAnchor 3498
-#define wxHtmlWindow_GetOpenedPage 3499
-#define wxHtmlWindow_GetOpenedPageTitle 3500
-#define wxHtmlWindow_GetRelatedFrame 3501
-#define wxHtmlWindow_HistoryBack 3502
-#define wxHtmlWindow_HistoryCanBack 3503
-#define wxHtmlWindow_HistoryCanForward 3504
-#define wxHtmlWindow_HistoryClear 3505
-#define wxHtmlWindow_HistoryForward 3506
-#define wxHtmlWindow_LoadFile 3507
-#define wxHtmlWindow_LoadPage 3508
-#define wxHtmlWindow_SelectAll 3509
-#define wxHtmlWindow_SelectionToText 3510
-#define wxHtmlWindow_SelectLine 3511
-#define wxHtmlWindow_SelectWord 3512
-#define wxHtmlWindow_SetBorders 3513
-#define wxHtmlWindow_SetFonts 3514
-#define wxHtmlWindow_SetPage 3515
-#define wxHtmlWindow_SetRelatedFrame 3516
-#define wxHtmlWindow_SetRelatedStatusBar 3517
-#define wxHtmlWindow_ToText 3518
-#define wxHtmlWindow_destroy 3519
-#define wxHtmlLinkEvent_GetLinkInfo 3520
-#define wxSystemSettings_GetColour 3521
-#define wxSystemSettings_GetFont 3522
-#define wxSystemSettings_GetMetric 3523
-#define wxSystemSettings_GetScreenType 3524
-#define wxSystemOptions_GetOption 3525
-#define wxSystemOptions_GetOptionInt 3526
-#define wxSystemOptions_HasOption 3527
-#define wxSystemOptions_IsFalse 3528
-#define wxSystemOptions_SetOption_2_1 3529
-#define wxSystemOptions_SetOption_2_0 3530
-#define wxAuiNotebookEvent_SetSelection 3531
-#define wxAuiNotebookEvent_GetSelection 3532
-#define wxAuiNotebookEvent_SetOldSelection 3533
-#define wxAuiNotebookEvent_GetOldSelection 3534
-#define wxAuiNotebookEvent_SetDragSource 3535
-#define wxAuiNotebookEvent_GetDragSource 3536
-#define wxAuiManagerEvent_SetManager 3537
-#define wxAuiManagerEvent_GetManager 3538
-#define wxAuiManagerEvent_SetPane 3539
-#define wxAuiManagerEvent_GetPane 3540
-#define wxAuiManagerEvent_SetButton 3541
-#define wxAuiManagerEvent_GetButton 3542
-#define wxAuiManagerEvent_SetDC 3543
-#define wxAuiManagerEvent_GetDC 3544
-#define wxAuiManagerEvent_Veto 3545
-#define wxAuiManagerEvent_GetVeto 3546
-#define wxAuiManagerEvent_SetCanVeto 3547
-#define wxAuiManagerEvent_CanVeto 3548
-#define wxLogNull_new 3549
-#define wxLogNull_destroy 3550
-#define wxTaskBarIcon_new 3551
-#define wxTaskBarIcon_destruct 3552
-#define wxTaskBarIcon_PopupMenu 3553
-#define wxTaskBarIcon_RemoveIcon 3554
-#define wxTaskBarIcon_SetIcon 3555
-#define wxLocale_new_0 3556
-#define wxLocale_new_2 3558
-#define wxLocale_destruct 3559
-#define wxLocale_Init 3561
-#define wxLocale_AddCatalog_1 3562
-#define wxLocale_AddCatalog_3 3563
-#define wxLocale_AddCatalogLookupPathPrefix 3564
-#define wxLocale_GetCanonicalName 3565
-#define wxLocale_GetLanguage 3566
-#define wxLocale_GetLanguageName 3567
-#define wxLocale_GetLocale 3568
-#define wxLocale_GetName 3569
-#define wxLocale_GetString_2 3570
-#define wxLocale_GetString_4 3571
-#define wxLocale_GetHeaderValue 3572
-#define wxLocale_GetSysName 3573
-#define wxLocale_GetSystemEncoding 3574
-#define wxLocale_GetSystemEncodingName 3575
-#define wxLocale_GetSystemLanguage 3576
-#define wxLocale_IsLoaded 3577
-#define wxLocale_IsOk 3578
-#define wxActivateEvent_GetActive 3579
-#define wxPopupWindow_new_2 3581
-#define wxPopupWindow_new_0 3582
-#define wxPopupWindow_destruct 3584
-#define wxPopupWindow_Create 3585
-#define wxPopupWindow_Position 3586
-#define wxPopupTransientWindow_new_0 3587
-#define wxPopupTransientWindow_new_2 3588
-#define wxPopupTransientWindow_destruct 3589
-#define wxPopupTransientWindow_Popup 3590
-#define wxPopupTransientWindow_Dismiss 3591
-#define wxOverlay_new 3592
-#define wxOverlay_destruct 3593
-#define wxOverlay_Reset 3594
-#define wxDCOverlay_new_6 3595
-#define wxDCOverlay_new_2 3596
-#define wxDCOverlay_destruct 3597
-#define wxDCOverlay_Clear 3598
+#define wxGauge_GetRange 1605
+#define wxGauge_GetValue 1606
+#define wxGauge_IsVertical 1607
+#define wxGauge_SetRange 1608
+#define wxGauge_SetValue 1609
+#define wxGauge_Pulse 1610
+#define wxGauge_destroy 1611
+#define wxGenericDirCtrl_new_0 1612
+#define wxGenericDirCtrl_new_2 1613
+#define wxGenericDirCtrl_destruct 1614
+#define wxGenericDirCtrl_Create 1615
+#define wxGenericDirCtrl_Init 1616
+#define wxGenericDirCtrl_CollapseTree 1617
+#define wxGenericDirCtrl_ExpandPath 1618
+#define wxGenericDirCtrl_GetDefaultPath 1619
+#define wxGenericDirCtrl_GetPath 1620
+#define wxGenericDirCtrl_GetFilePath 1621
+#define wxGenericDirCtrl_GetFilter 1622
+#define wxGenericDirCtrl_GetFilterIndex 1623
+#define wxGenericDirCtrl_GetRootId 1624
+#define wxGenericDirCtrl_GetTreeCtrl 1625
+#define wxGenericDirCtrl_ReCreateTree 1626
+#define wxGenericDirCtrl_SetDefaultPath 1627
+#define wxGenericDirCtrl_SetFilter 1628
+#define wxGenericDirCtrl_SetFilterIndex 1629
+#define wxGenericDirCtrl_SetPath 1630
+#define wxStaticBox_new_4 1632
+#define wxStaticBox_new_0 1633
+#define wxStaticBox_Create 1634
+#define wxStaticBox_destroy 1635
+#define wxStaticLine_new_2 1637
+#define wxStaticLine_new_0 1638
+#define wxStaticLine_Create 1639
+#define wxStaticLine_IsVertical 1640
+#define wxStaticLine_GetDefaultSize 1641
+#define wxStaticLine_destroy 1642
+#define wxListBox_new_3 1645
+#define wxListBox_new_0 1646
+#define wxListBox_destruct 1648
+#define wxListBox_Create 1650
+#define wxListBox_Deselect 1651
+#define wxListBox_GetSelections 1652
+#define wxListBox_InsertItems 1653
+#define wxListBox_IsSelected 1654
+#define wxListBox_Set 1655
+#define wxListBox_HitTest 1656
+#define wxListBox_SetFirstItem_1_0 1657
+#define wxListBox_SetFirstItem_1_1 1658
+#define wxListCtrl_new_0 1659
+#define wxListCtrl_new_2 1660
+#define wxListCtrl_Arrange 1661
+#define wxListCtrl_AssignImageList 1662
+#define wxListCtrl_ClearAll 1663
+#define wxListCtrl_Create 1664
+#define wxListCtrl_DeleteAllItems 1665
+#define wxListCtrl_DeleteColumn 1666
+#define wxListCtrl_DeleteItem 1667
+#define wxListCtrl_EditLabel 1668
+#define wxListCtrl_EnsureVisible 1669
+#define wxListCtrl_FindItem_3_0 1670
+#define wxListCtrl_FindItem_3_1 1671
+#define wxListCtrl_GetColumn 1672
+#define wxListCtrl_GetColumnCount 1673
+#define wxListCtrl_GetColumnWidth 1674
+#define wxListCtrl_GetCountPerPage 1675
+#define wxListCtrl_GetEditControl 1676
+#define wxListCtrl_GetImageList 1677
+#define wxListCtrl_GetItem 1678
+#define wxListCtrl_GetItemBackgroundColour 1679
+#define wxListCtrl_GetItemCount 1680
+#define wxListCtrl_GetItemData 1681
+#define wxListCtrl_GetItemFont 1682
+#define wxListCtrl_GetItemPosition 1683
+#define wxListCtrl_GetItemRect 1684
+#define wxListCtrl_GetItemSpacing 1685
+#define wxListCtrl_GetItemState 1686
+#define wxListCtrl_GetItemText 1687
+#define wxListCtrl_GetItemTextColour 1688
+#define wxListCtrl_GetNextItem 1689
+#define wxListCtrl_GetSelectedItemCount 1690
+#define wxListCtrl_GetTextColour 1691
+#define wxListCtrl_GetTopItem 1692
+#define wxListCtrl_GetViewRect 1693
+#define wxListCtrl_HitTest 1694
+#define wxListCtrl_InsertColumn_2 1695
+#define wxListCtrl_InsertColumn_3 1696
+#define wxListCtrl_InsertItem_1 1697
+#define wxListCtrl_InsertItem_2_1 1698
+#define wxListCtrl_InsertItem_2_0 1699
+#define wxListCtrl_InsertItem_3 1700
+#define wxListCtrl_RefreshItem 1701
+#define wxListCtrl_RefreshItems 1702
+#define wxListCtrl_ScrollList 1703
+#define wxListCtrl_SetBackgroundColour 1704
+#define wxListCtrl_SetColumn 1705
+#define wxListCtrl_SetColumnWidth 1706
+#define wxListCtrl_SetImageList 1707
+#define wxListCtrl_SetItem_1 1708
+#define wxListCtrl_SetItem_4 1709
+#define wxListCtrl_SetItemBackgroundColour 1710
+#define wxListCtrl_SetItemCount 1711
+#define wxListCtrl_SetItemData 1712
+#define wxListCtrl_SetItemFont 1713
+#define wxListCtrl_SetItemImage 1714
+#define wxListCtrl_SetItemColumnImage 1715
+#define wxListCtrl_SetItemPosition 1716
+#define wxListCtrl_SetItemState 1717
+#define wxListCtrl_SetItemText 1718
+#define wxListCtrl_SetItemTextColour 1719
+#define wxListCtrl_SetSingleStyle 1720
+#define wxListCtrl_SetTextColour 1721
+#define wxListCtrl_SetWindowStyleFlag 1722
+#define wxListCtrl_SortItems 1723
+#define wxListCtrl_destroy 1724
+#define wxListView_ClearColumnImage 1725
+#define wxListView_Focus 1726
+#define wxListView_GetFirstSelected 1727
+#define wxListView_GetFocusedItem 1728
+#define wxListView_GetNextSelected 1729
+#define wxListView_IsSelected 1730
+#define wxListView_Select 1731
+#define wxListView_SetColumnImage 1732
+#define wxListItem_new_0 1733
+#define wxListItem_new_1 1734
+#define wxListItem_destruct 1735
+#define wxListItem_Clear 1736
+#define wxListItem_GetAlign 1737
+#define wxListItem_GetBackgroundColour 1738
+#define wxListItem_GetColumn 1739
+#define wxListItem_GetFont 1740
+#define wxListItem_GetId 1741
+#define wxListItem_GetImage 1742
+#define wxListItem_GetMask 1743
+#define wxListItem_GetState 1744
+#define wxListItem_GetText 1745
+#define wxListItem_GetTextColour 1746
+#define wxListItem_GetWidth 1747
+#define wxListItem_SetAlign 1748
+#define wxListItem_SetBackgroundColour 1749
+#define wxListItem_SetColumn 1750
+#define wxListItem_SetFont 1751
+#define wxListItem_SetId 1752
+#define wxListItem_SetImage 1753
+#define wxListItem_SetMask 1754
+#define wxListItem_SetState 1755
+#define wxListItem_SetStateMask 1756
+#define wxListItem_SetText 1757
+#define wxListItem_SetTextColour 1758
+#define wxListItem_SetWidth 1759
+#define wxListItemAttr_new_0 1760
+#define wxListItemAttr_new_3 1761
+#define wxListItemAttr_GetBackgroundColour 1762
+#define wxListItemAttr_GetFont 1763
+#define wxListItemAttr_GetTextColour 1764
+#define wxListItemAttr_HasBackgroundColour 1765
+#define wxListItemAttr_HasFont 1766
+#define wxListItemAttr_HasTextColour 1767
+#define wxListItemAttr_SetBackgroundColour 1768
+#define wxListItemAttr_SetFont 1769
+#define wxListItemAttr_SetTextColour 1770
+#define wxListItemAttr_destroy 1771
+#define wxImageList_new_0 1772
+#define wxImageList_new_3 1773
+#define wxImageList_Add_1 1774
+#define wxImageList_Add_2_0 1775
+#define wxImageList_Add_2_1 1776
+#define wxImageList_Create 1777
+#define wxImageList_Draw 1779
+#define wxImageList_GetBitmap 1780
+#define wxImageList_GetIcon 1781
+#define wxImageList_GetImageCount 1782
+#define wxImageList_GetSize 1783
+#define wxImageList_Remove 1784
+#define wxImageList_RemoveAll 1785
+#define wxImageList_Replace_2 1786
+#define wxImageList_Replace_3 1787
+#define wxImageList_destroy 1788
+#define wxTextAttr_new_0 1789
+#define wxTextAttr_new_2 1790
+#define wxTextAttr_GetAlignment 1791
+#define wxTextAttr_GetBackgroundColour 1792
+#define wxTextAttr_GetFont 1793
+#define wxTextAttr_GetLeftIndent 1794
+#define wxTextAttr_GetLeftSubIndent 1795
+#define wxTextAttr_GetRightIndent 1796
+#define wxTextAttr_GetTabs 1797
+#define wxTextAttr_GetTextColour 1798
+#define wxTextAttr_HasBackgroundColour 1799
+#define wxTextAttr_HasFont 1800
+#define wxTextAttr_HasTextColour 1801
+#define wxTextAttr_GetFlags 1802
+#define wxTextAttr_IsDefault 1803
+#define wxTextAttr_SetAlignment 1804
+#define wxTextAttr_SetBackgroundColour 1805
+#define wxTextAttr_SetFlags 1806
+#define wxTextAttr_SetFont 1807
+#define wxTextAttr_SetLeftIndent 1808
+#define wxTextAttr_SetRightIndent 1809
+#define wxTextAttr_SetTabs 1810
+#define wxTextAttr_SetTextColour 1811
+#define wxTextAttr_destroy 1812
+#define wxTextCtrl_new_3 1814
+#define wxTextCtrl_new_0 1815
+#define wxTextCtrl_destruct 1817
+#define wxTextCtrl_AppendText 1818
+#define wxTextCtrl_CanCopy 1819
+#define wxTextCtrl_CanCut 1820
+#define wxTextCtrl_CanPaste 1821
+#define wxTextCtrl_CanRedo 1822
+#define wxTextCtrl_CanUndo 1823
+#define wxTextCtrl_Clear 1824
+#define wxTextCtrl_Copy 1825
+#define wxTextCtrl_Create 1826
+#define wxTextCtrl_Cut 1827
+#define wxTextCtrl_DiscardEdits 1828
+#define wxTextCtrl_ChangeValue 1829
+#define wxTextCtrl_EmulateKeyPress 1830
+#define wxTextCtrl_GetDefaultStyle 1831
+#define wxTextCtrl_GetInsertionPoint 1832
+#define wxTextCtrl_GetLastPosition 1833
+#define wxTextCtrl_GetLineLength 1834
+#define wxTextCtrl_GetLineText 1835
+#define wxTextCtrl_GetNumberOfLines 1836
+#define wxTextCtrl_GetRange 1837
+#define wxTextCtrl_GetSelection 1838
+#define wxTextCtrl_GetStringSelection 1839
+#define wxTextCtrl_GetStyle 1840
+#define wxTextCtrl_GetValue 1841
+#define wxTextCtrl_IsEditable 1842
+#define wxTextCtrl_IsModified 1843
+#define wxTextCtrl_IsMultiLine 1844
+#define wxTextCtrl_IsSingleLine 1845
+#define wxTextCtrl_LoadFile 1846
+#define wxTextCtrl_MarkDirty 1847
+#define wxTextCtrl_Paste 1848
+#define wxTextCtrl_PositionToXY 1849
+#define wxTextCtrl_Redo 1850
+#define wxTextCtrl_Remove 1851
+#define wxTextCtrl_Replace 1852
+#define wxTextCtrl_SaveFile 1853
+#define wxTextCtrl_SetDefaultStyle 1854
+#define wxTextCtrl_SetEditable 1855
+#define wxTextCtrl_SetInsertionPoint 1856
+#define wxTextCtrl_SetInsertionPointEnd 1857
+#define wxTextCtrl_SetMaxLength 1859
+#define wxTextCtrl_SetSelection 1860
+#define wxTextCtrl_SetStyle 1861
+#define wxTextCtrl_SetValue 1862
+#define wxTextCtrl_ShowPosition 1863
+#define wxTextCtrl_Undo 1864
+#define wxTextCtrl_WriteText 1865
+#define wxTextCtrl_XYToPosition 1866
+#define wxNotebook_new_0 1869
+#define wxNotebook_new_3 1870
+#define wxNotebook_destruct 1871
+#define wxNotebook_AddPage 1872
+#define wxNotebook_AdvanceSelection 1873
+#define wxNotebook_AssignImageList 1874
+#define wxNotebook_Create 1875
+#define wxNotebook_DeleteAllPages 1876
+#define wxNotebook_DeletePage 1877
+#define wxNotebook_RemovePage 1878
+#define wxNotebook_GetCurrentPage 1879
+#define wxNotebook_GetImageList 1880
+#define wxNotebook_GetPage 1882
+#define wxNotebook_GetPageCount 1883
+#define wxNotebook_GetPageImage 1884
+#define wxNotebook_GetPageText 1885
+#define wxNotebook_GetRowCount 1886
+#define wxNotebook_GetSelection 1887
+#define wxNotebook_GetThemeBackgroundColour 1888
+#define wxNotebook_HitTest 1890
+#define wxNotebook_InsertPage 1892
+#define wxNotebook_SetImageList 1893
+#define wxNotebook_SetPadding 1894
+#define wxNotebook_SetPageSize 1895
+#define wxNotebook_SetPageImage 1896
+#define wxNotebook_SetPageText 1897
+#define wxNotebook_SetSelection 1898
+#define wxNotebook_ChangeSelection 1899
+#define wxChoicebook_new_0 1900
+#define wxChoicebook_new_3 1901
+#define wxChoicebook_AddPage 1902
+#define wxChoicebook_AdvanceSelection 1903
+#define wxChoicebook_AssignImageList 1904
+#define wxChoicebook_Create 1905
+#define wxChoicebook_DeleteAllPages 1906
+#define wxChoicebook_DeletePage 1907
+#define wxChoicebook_RemovePage 1908
+#define wxChoicebook_GetCurrentPage 1909
+#define wxChoicebook_GetImageList 1910
+#define wxChoicebook_GetPage 1912
+#define wxChoicebook_GetPageCount 1913
+#define wxChoicebook_GetPageImage 1914
+#define wxChoicebook_GetPageText 1915
+#define wxChoicebook_GetSelection 1916
+#define wxChoicebook_HitTest 1917
+#define wxChoicebook_InsertPage 1918
+#define wxChoicebook_SetImageList 1919
+#define wxChoicebook_SetPageSize 1920
+#define wxChoicebook_SetPageImage 1921
+#define wxChoicebook_SetPageText 1922
+#define wxChoicebook_SetSelection 1923
+#define wxChoicebook_ChangeSelection 1924
+#define wxChoicebook_destroy 1925
+#define wxToolbook_new_0 1926
+#define wxToolbook_new_3 1927
+#define wxToolbook_AddPage 1928
+#define wxToolbook_AdvanceSelection 1929
+#define wxToolbook_AssignImageList 1930
+#define wxToolbook_Create 1931
+#define wxToolbook_DeleteAllPages 1932
+#define wxToolbook_DeletePage 1933
+#define wxToolbook_RemovePage 1934
+#define wxToolbook_GetCurrentPage 1935
+#define wxToolbook_GetImageList 1936
+#define wxToolbook_GetPage 1938
+#define wxToolbook_GetPageCount 1939
+#define wxToolbook_GetPageImage 1940
+#define wxToolbook_GetPageText 1941
+#define wxToolbook_GetSelection 1942
+#define wxToolbook_HitTest 1944
+#define wxToolbook_InsertPage 1945
+#define wxToolbook_SetImageList 1946
+#define wxToolbook_SetPageSize 1947
+#define wxToolbook_SetPageImage 1948
+#define wxToolbook_SetPageText 1949
+#define wxToolbook_SetSelection 1950
+#define wxToolbook_ChangeSelection 1951
+#define wxToolbook_destroy 1952
+#define wxListbook_new_0 1953
+#define wxListbook_new_3 1954
+#define wxListbook_AddPage 1955
+#define wxListbook_AdvanceSelection 1956
+#define wxListbook_AssignImageList 1957
+#define wxListbook_Create 1958
+#define wxListbook_DeleteAllPages 1959
+#define wxListbook_DeletePage 1960
+#define wxListbook_RemovePage 1961
+#define wxListbook_GetCurrentPage 1962
+#define wxListbook_GetImageList 1963
+#define wxListbook_GetPage 1965
+#define wxListbook_GetPageCount 1966
+#define wxListbook_GetPageImage 1967
+#define wxListbook_GetPageText 1968
+#define wxListbook_GetSelection 1969
+#define wxListbook_HitTest 1971
+#define wxListbook_InsertPage 1972
+#define wxListbook_SetImageList 1973
+#define wxListbook_SetPageSize 1974
+#define wxListbook_SetPageImage 1975
+#define wxListbook_SetPageText 1976
+#define wxListbook_SetSelection 1977
+#define wxListbook_ChangeSelection 1978
+#define wxListbook_destroy 1979
+#define wxTreebook_new_0 1980
+#define wxTreebook_new_3 1981
+#define wxTreebook_AddPage 1982
+#define wxTreebook_AdvanceSelection 1983
+#define wxTreebook_AssignImageList 1984
+#define wxTreebook_Create 1985
+#define wxTreebook_DeleteAllPages 1986
+#define wxTreebook_DeletePage 1987
+#define wxTreebook_RemovePage 1988
+#define wxTreebook_GetCurrentPage 1989
+#define wxTreebook_GetImageList 1990
+#define wxTreebook_GetPage 1992
+#define wxTreebook_GetPageCount 1993
+#define wxTreebook_GetPageImage 1994
+#define wxTreebook_GetPageText 1995
+#define wxTreebook_GetSelection 1996
+#define wxTreebook_ExpandNode 1997
+#define wxTreebook_IsNodeExpanded 1998
+#define wxTreebook_HitTest 2000
+#define wxTreebook_InsertPage 2001
+#define wxTreebook_InsertSubPage 2002
+#define wxTreebook_SetImageList 2003
+#define wxTreebook_SetPageSize 2004
+#define wxTreebook_SetPageImage 2005
+#define wxTreebook_SetPageText 2006
+#define wxTreebook_SetSelection 2007
+#define wxTreebook_ChangeSelection 2008
+#define wxTreebook_destroy 2009
+#define wxTreeCtrl_new_2 2012
+#define wxTreeCtrl_new_0 2013
+#define wxTreeCtrl_destruct 2015
+#define wxTreeCtrl_AddRoot 2016
+#define wxTreeCtrl_AppendItem 2017
+#define wxTreeCtrl_AssignImageList 2018
+#define wxTreeCtrl_AssignStateImageList 2019
+#define wxTreeCtrl_Collapse 2020
+#define wxTreeCtrl_CollapseAndReset 2021
+#define wxTreeCtrl_Create 2022
+#define wxTreeCtrl_Delete 2023
+#define wxTreeCtrl_DeleteAllItems 2024
+#define wxTreeCtrl_DeleteChildren 2025
+#define wxTreeCtrl_EditLabel 2026
+#define wxTreeCtrl_EnsureVisible 2027
+#define wxTreeCtrl_Expand 2028
+#define wxTreeCtrl_GetBoundingRect 2029
+#define wxTreeCtrl_GetChildrenCount 2031
+#define wxTreeCtrl_GetCount 2032
+#define wxTreeCtrl_GetEditControl 2033
+#define wxTreeCtrl_GetFirstChild 2034
+#define wxTreeCtrl_GetNextChild 2035
+#define wxTreeCtrl_GetFirstVisibleItem 2036
+#define wxTreeCtrl_GetImageList 2037
+#define wxTreeCtrl_GetIndent 2038
+#define wxTreeCtrl_GetItemBackgroundColour 2039
+#define wxTreeCtrl_GetItemData 2040
+#define wxTreeCtrl_GetItemFont 2041
+#define wxTreeCtrl_GetItemImage_1 2042
+#define wxTreeCtrl_GetItemImage_2 2043
+#define wxTreeCtrl_GetItemText 2044
+#define wxTreeCtrl_GetItemTextColour 2045
+#define wxTreeCtrl_GetLastChild 2046
+#define wxTreeCtrl_GetNextSibling 2047
+#define wxTreeCtrl_GetNextVisible 2048
+#define wxTreeCtrl_GetItemParent 2049
+#define wxTreeCtrl_GetPrevSibling 2050
+#define wxTreeCtrl_GetPrevVisible 2051
+#define wxTreeCtrl_GetRootItem 2052
+#define wxTreeCtrl_GetSelection 2053
+#define wxTreeCtrl_GetSelections 2054
+#define wxTreeCtrl_GetStateImageList 2055
+#define wxTreeCtrl_HitTest 2056
+#define wxTreeCtrl_InsertItem 2058
+#define wxTreeCtrl_IsBold 2059
+#define wxTreeCtrl_IsExpanded 2060
+#define wxTreeCtrl_IsSelected 2061
+#define wxTreeCtrl_IsVisible 2062
+#define wxTreeCtrl_ItemHasChildren 2063
+#define wxTreeCtrl_IsTreeItemIdOk 2064
+#define wxTreeCtrl_PrependItem 2065
+#define wxTreeCtrl_ScrollTo 2066
+#define wxTreeCtrl_SelectItem_1 2067
+#define wxTreeCtrl_SelectItem_2 2068
+#define wxTreeCtrl_SetIndent 2069
+#define wxTreeCtrl_SetImageList 2070
+#define wxTreeCtrl_SetItemBackgroundColour 2071
+#define wxTreeCtrl_SetItemBold 2072
+#define wxTreeCtrl_SetItemData 2073
+#define wxTreeCtrl_SetItemDropHighlight 2074
+#define wxTreeCtrl_SetItemFont 2075
+#define wxTreeCtrl_SetItemHasChildren 2076
+#define wxTreeCtrl_SetItemImage_2 2077
+#define wxTreeCtrl_SetItemImage_3 2078
+#define wxTreeCtrl_SetItemText 2079
+#define wxTreeCtrl_SetItemTextColour 2080
+#define wxTreeCtrl_SetStateImageList 2081
+#define wxTreeCtrl_SetWindowStyle 2082
+#define wxTreeCtrl_SortChildren 2083
+#define wxTreeCtrl_Toggle 2084
+#define wxTreeCtrl_ToggleItemSelection 2085
+#define wxTreeCtrl_Unselect 2086
+#define wxTreeCtrl_UnselectAll 2087
+#define wxTreeCtrl_UnselectItem 2088
+#define wxScrollBar_new_0 2089
+#define wxScrollBar_new_3 2090
+#define wxScrollBar_destruct 2091
+#define wxScrollBar_Create 2092
+#define wxScrollBar_GetRange 2093
+#define wxScrollBar_GetPageSize 2094
+#define wxScrollBar_GetThumbPosition 2095
+#define wxScrollBar_GetThumbSize 2096
+#define wxScrollBar_SetThumbPosition 2097
+#define wxScrollBar_SetScrollbar 2098
+#define wxSpinButton_new_2 2100
+#define wxSpinButton_new_0 2101
+#define wxSpinButton_Create 2102
+#define wxSpinButton_GetMax 2103
+#define wxSpinButton_GetMin 2104
+#define wxSpinButton_GetValue 2105
+#define wxSpinButton_SetRange 2106
+#define wxSpinButton_SetValue 2107
+#define wxSpinButton_destroy 2108
+#define wxSpinCtrl_new_0 2109
+#define wxSpinCtrl_new_2 2110
+#define wxSpinCtrl_Create 2112
+#define wxSpinCtrl_SetValue_1_1 2115
+#define wxSpinCtrl_SetValue_1_0 2116
+#define wxSpinCtrl_GetValue 2118
+#define wxSpinCtrl_SetRange 2120
+#define wxSpinCtrl_SetSelection 2121
+#define wxSpinCtrl_GetMin 2123
+#define wxSpinCtrl_GetMax 2125
+#define wxSpinCtrl_destroy 2126
+#define wxStaticText_new_0 2127
+#define wxStaticText_new_4 2128
+#define wxStaticText_Create 2129
+#define wxStaticText_GetLabel 2130
+#define wxStaticText_SetLabel 2131
+#define wxStaticText_Wrap 2132
+#define wxStaticText_destroy 2133
+#define wxStaticBitmap_new_0 2134
+#define wxStaticBitmap_new_4 2135
+#define wxStaticBitmap_Create 2136
+#define wxStaticBitmap_GetBitmap 2137
+#define wxStaticBitmap_SetBitmap 2138
+#define wxStaticBitmap_destroy 2139
+#define wxRadioBox_new 2140
+#define wxRadioBox_destruct 2142
+#define wxRadioBox_Create 2143
+#define wxRadioBox_Enable_2 2144
+#define wxRadioBox_Enable_1 2145
+#define wxRadioBox_GetSelection 2146
+#define wxRadioBox_GetString 2147
+#define wxRadioBox_SetSelection 2148
+#define wxRadioBox_Show_2 2149
+#define wxRadioBox_Show_1 2150
+#define wxRadioBox_GetColumnCount 2151
+#define wxRadioBox_GetItemHelpText 2152
+#define wxRadioBox_GetItemToolTip 2153
+#define wxRadioBox_GetItemFromPoint 2155
+#define wxRadioBox_GetRowCount 2156
+#define wxRadioBox_IsItemEnabled 2157
+#define wxRadioBox_IsItemShown 2158
+#define wxRadioBox_SetItemHelpText 2159
+#define wxRadioBox_SetItemToolTip 2160
+#define wxRadioButton_new_0 2161
+#define wxRadioButton_new_4 2162
+#define wxRadioButton_Create 2163
+#define wxRadioButton_GetValue 2164
+#define wxRadioButton_SetValue 2165
+#define wxRadioButton_destroy 2166
+#define wxSlider_new_6 2168
+#define wxSlider_new_0 2169
+#define wxSlider_Create 2170
+#define wxSlider_GetLineSize 2171
+#define wxSlider_GetMax 2172
+#define wxSlider_GetMin 2173
+#define wxSlider_GetPageSize 2174
+#define wxSlider_GetThumbLength 2175
+#define wxSlider_GetValue 2176
+#define wxSlider_SetLineSize 2177
+#define wxSlider_SetPageSize 2178
+#define wxSlider_SetRange 2179
+#define wxSlider_SetThumbLength 2180
+#define wxSlider_SetValue 2181
+#define wxSlider_destroy 2182
+#define wxDialog_new_4 2184
+#define wxDialog_new_0 2185
+#define wxDialog_destruct 2187
+#define wxDialog_Create 2188
+#define wxDialog_CreateButtonSizer 2189
+#define wxDialog_CreateStdDialogButtonSizer 2190
+#define wxDialog_EndModal 2191
+#define wxDialog_GetAffirmativeId 2192
+#define wxDialog_GetReturnCode 2193
+#define wxDialog_IsModal 2194
+#define wxDialog_SetAffirmativeId 2195
+#define wxDialog_SetReturnCode 2196
+#define wxDialog_Show 2197
+#define wxDialog_ShowModal 2198
+#define wxColourDialog_new_0 2199
+#define wxColourDialog_new_2 2200
+#define wxColourDialog_destruct 2201
+#define wxColourDialog_Create 2202
+#define wxColourDialog_GetColourData 2203
+#define wxColourData_new_0 2204
+#define wxColourData_new_1 2205
+#define wxColourData_destruct 2206
+#define wxColourData_GetChooseFull 2207
+#define wxColourData_GetColour 2208
+#define wxColourData_GetCustomColour 2210
+#define wxColourData_SetChooseFull 2211
+#define wxColourData_SetColour 2212
+#define wxColourData_SetCustomColour 2213
+#define wxPalette_new_0 2214
+#define wxPalette_new_4 2215
+#define wxPalette_destruct 2217
+#define wxPalette_Create 2218
+#define wxPalette_GetColoursCount 2219
+#define wxPalette_GetPixel 2220
+#define wxPalette_GetRGB 2221
+#define wxPalette_IsOk 2222
+#define wxDirDialog_new 2226
+#define wxDirDialog_destruct 2227
+#define wxDirDialog_GetPath 2228
+#define wxDirDialog_GetMessage 2229
+#define wxDirDialog_SetMessage 2230
+#define wxDirDialog_SetPath 2231
+#define wxFileDialog_new 2235
+#define wxFileDialog_destruct 2236
+#define wxFileDialog_GetDirectory 2237
+#define wxFileDialog_GetFilename 2238
+#define wxFileDialog_GetFilenames 2239
+#define wxFileDialog_GetFilterIndex 2240
+#define wxFileDialog_GetMessage 2241
+#define wxFileDialog_GetPath 2242
+#define wxFileDialog_GetPaths 2243
+#define wxFileDialog_GetWildcard 2244
+#define wxFileDialog_SetDirectory 2245
+#define wxFileDialog_SetFilename 2246
+#define wxFileDialog_SetFilterIndex 2247
+#define wxFileDialog_SetMessage 2248
+#define wxFileDialog_SetPath 2249
+#define wxFileDialog_SetWildcard 2250
+#define wxPickerBase_SetInternalMargin 2251
+#define wxPickerBase_GetInternalMargin 2252
+#define wxPickerBase_SetTextCtrlProportion 2253
+#define wxPickerBase_SetPickerCtrlProportion 2254
+#define wxPickerBase_GetTextCtrlProportion 2255
+#define wxPickerBase_GetPickerCtrlProportion 2256
+#define wxPickerBase_HasTextCtrl 2257
+#define wxPickerBase_GetTextCtrl 2258
+#define wxPickerBase_IsTextCtrlGrowable 2259
+#define wxPickerBase_SetPickerCtrlGrowable 2260
+#define wxPickerBase_SetTextCtrlGrowable 2261
+#define wxPickerBase_IsPickerCtrlGrowable 2262
+#define wxFilePickerCtrl_new_0 2263
+#define wxFilePickerCtrl_new_3 2264
+#define wxFilePickerCtrl_Create 2265
+#define wxFilePickerCtrl_GetPath 2266
+#define wxFilePickerCtrl_SetPath 2267
+#define wxFilePickerCtrl_destroy 2268
+#define wxDirPickerCtrl_new_0 2269
+#define wxDirPickerCtrl_new_3 2270
+#define wxDirPickerCtrl_Create 2271
+#define wxDirPickerCtrl_GetPath 2272
+#define wxDirPickerCtrl_SetPath 2273
+#define wxDirPickerCtrl_destroy 2274
+#define wxColourPickerCtrl_new_0 2275
+#define wxColourPickerCtrl_new_3 2276
+#define wxColourPickerCtrl_Create 2277
+#define wxColourPickerCtrl_GetColour 2278
+#define wxColourPickerCtrl_SetColour_1_1 2279
+#define wxColourPickerCtrl_SetColour_1_0 2280
+#define wxColourPickerCtrl_destroy 2281
+#define wxDatePickerCtrl_new_0 2282
+#define wxDatePickerCtrl_new_3 2283
+#define wxDatePickerCtrl_GetRange 2284
+#define wxDatePickerCtrl_GetValue 2285
+#define wxDatePickerCtrl_SetRange 2286
+#define wxDatePickerCtrl_SetValue 2287
+#define wxDatePickerCtrl_destroy 2288
+#define wxFontPickerCtrl_new_0 2289
+#define wxFontPickerCtrl_new_3 2290
+#define wxFontPickerCtrl_Create 2291
+#define wxFontPickerCtrl_GetSelectedFont 2292
+#define wxFontPickerCtrl_SetSelectedFont 2293
+#define wxFontPickerCtrl_GetMaxPointSize 2294
+#define wxFontPickerCtrl_SetMaxPointSize 2295
+#define wxFontPickerCtrl_destroy 2296
+#define wxFindReplaceDialog_new_0 2299
+#define wxFindReplaceDialog_new_4 2300
+#define wxFindReplaceDialog_destruct 2301
+#define wxFindReplaceDialog_Create 2302
+#define wxFindReplaceDialog_GetData 2303
+#define wxFindReplaceData_new_0 2304
+#define wxFindReplaceData_new_1 2305
+#define wxFindReplaceData_GetFindString 2306
+#define wxFindReplaceData_GetReplaceString 2307
+#define wxFindReplaceData_GetFlags 2308
+#define wxFindReplaceData_SetFlags 2309
+#define wxFindReplaceData_SetFindString 2310
+#define wxFindReplaceData_SetReplaceString 2311
+#define wxFindReplaceData_destroy 2312
+#define wxMultiChoiceDialog_new_0 2313
+#define wxMultiChoiceDialog_new_5 2315
+#define wxMultiChoiceDialog_GetSelections 2316
+#define wxMultiChoiceDialog_SetSelections 2317
+#define wxMultiChoiceDialog_destroy 2318
+#define wxSingleChoiceDialog_new_0 2319
+#define wxSingleChoiceDialog_new_5 2321
+#define wxSingleChoiceDialog_GetSelection 2322
+#define wxSingleChoiceDialog_GetStringSelection 2323
+#define wxSingleChoiceDialog_SetSelection 2324
+#define wxSingleChoiceDialog_destroy 2325
+#define wxTextEntryDialog_new 2326
+#define wxTextEntryDialog_GetValue 2327
+#define wxTextEntryDialog_SetValue 2328
+#define wxTextEntryDialog_destroy 2329
+#define wxPasswordEntryDialog_new 2330
+#define wxPasswordEntryDialog_destroy 2331
+#define wxFontData_new_0 2332
+#define wxFontData_new_1 2333
+#define wxFontData_destruct 2334
+#define wxFontData_EnableEffects 2335
+#define wxFontData_GetAllowSymbols 2336
+#define wxFontData_GetColour 2337
+#define wxFontData_GetChosenFont 2338
+#define wxFontData_GetEnableEffects 2339
+#define wxFontData_GetInitialFont 2340
+#define wxFontData_GetShowHelp 2341
+#define wxFontData_SetAllowSymbols 2342
+#define wxFontData_SetChosenFont 2343
+#define wxFontData_SetColour 2344
+#define wxFontData_SetInitialFont 2345
+#define wxFontData_SetRange 2346
+#define wxFontData_SetShowHelp 2347
+#define wxFontDialog_new_0 2351
+#define wxFontDialog_new_2 2353
+#define wxFontDialog_Create 2355
+#define wxFontDialog_GetFontData 2356
+#define wxFontDialog_destroy 2358
+#define wxProgressDialog_new 2359
+#define wxProgressDialog_destruct 2360
+#define wxProgressDialog_Resume 2361
+#define wxProgressDialog_Update_2 2362
+#define wxProgressDialog_Update_0 2363
+#define wxMessageDialog_new 2364
+#define wxMessageDialog_destruct 2365
+#define wxPageSetupDialog_new 2366
+#define wxPageSetupDialog_destruct 2367
+#define wxPageSetupDialog_GetPageSetupData 2368
+#define wxPageSetupDialog_ShowModal 2369
+#define wxPageSetupDialogData_new_0 2370
+#define wxPageSetupDialogData_new_1_0 2371
+#define wxPageSetupDialogData_new_1_1 2372
+#define wxPageSetupDialogData_destruct 2373
+#define wxPageSetupDialogData_EnableHelp 2374
+#define wxPageSetupDialogData_EnableMargins 2375
+#define wxPageSetupDialogData_EnableOrientation 2376
+#define wxPageSetupDialogData_EnablePaper 2377
+#define wxPageSetupDialogData_EnablePrinter 2378
+#define wxPageSetupDialogData_GetDefaultMinMargins 2379
+#define wxPageSetupDialogData_GetEnableMargins 2380
+#define wxPageSetupDialogData_GetEnableOrientation 2381
+#define wxPageSetupDialogData_GetEnablePaper 2382
+#define wxPageSetupDialogData_GetEnablePrinter 2383
+#define wxPageSetupDialogData_GetEnableHelp 2384
+#define wxPageSetupDialogData_GetDefaultInfo 2385
+#define wxPageSetupDialogData_GetMarginTopLeft 2386
+#define wxPageSetupDialogData_GetMarginBottomRight 2387
+#define wxPageSetupDialogData_GetMinMarginTopLeft 2388
+#define wxPageSetupDialogData_GetMinMarginBottomRight 2389
+#define wxPageSetupDialogData_GetPaperId 2390
+#define wxPageSetupDialogData_GetPaperSize 2391
+#define wxPageSetupDialogData_GetPrintData 2393
+#define wxPageSetupDialogData_IsOk 2394
+#define wxPageSetupDialogData_SetDefaultInfo 2395
+#define wxPageSetupDialogData_SetDefaultMinMargins 2396
+#define wxPageSetupDialogData_SetMarginTopLeft 2397
+#define wxPageSetupDialogData_SetMarginBottomRight 2398
+#define wxPageSetupDialogData_SetMinMarginTopLeft 2399
+#define wxPageSetupDialogData_SetMinMarginBottomRight 2400
+#define wxPageSetupDialogData_SetPaperId 2401
+#define wxPageSetupDialogData_SetPaperSize_1_1 2402
+#define wxPageSetupDialogData_SetPaperSize_1_0 2403
+#define wxPageSetupDialogData_SetPrintData 2404
+#define wxPrintDialog_new_2_0 2405
+#define wxPrintDialog_new_2_1 2406
+#define wxPrintDialog_destruct 2407
+#define wxPrintDialog_GetPrintDialogData 2408
+#define wxPrintDialog_GetPrintDC 2409
+#define wxPrintDialogData_new_0 2410
+#define wxPrintDialogData_new_1_1 2411
+#define wxPrintDialogData_new_1_0 2412
+#define wxPrintDialogData_destruct 2413
+#define wxPrintDialogData_EnableHelp 2414
+#define wxPrintDialogData_EnablePageNumbers 2415
+#define wxPrintDialogData_EnablePrintToFile 2416
+#define wxPrintDialogData_EnableSelection 2417
+#define wxPrintDialogData_GetAllPages 2418
+#define wxPrintDialogData_GetCollate 2419
+#define wxPrintDialogData_GetFromPage 2420
+#define wxPrintDialogData_GetMaxPage 2421
+#define wxPrintDialogData_GetMinPage 2422
+#define wxPrintDialogData_GetNoCopies 2423
+#define wxPrintDialogData_GetPrintData 2424
+#define wxPrintDialogData_GetPrintToFile 2425
+#define wxPrintDialogData_GetSelection 2426
+#define wxPrintDialogData_GetToPage 2427
+#define wxPrintDialogData_IsOk 2428
+#define wxPrintDialogData_SetCollate 2429
+#define wxPrintDialogData_SetFromPage 2430
+#define wxPrintDialogData_SetMaxPage 2431
+#define wxPrintDialogData_SetMinPage 2432
+#define wxPrintDialogData_SetNoCopies 2433
+#define wxPrintDialogData_SetPrintData 2434
+#define wxPrintDialogData_SetPrintToFile 2435
+#define wxPrintDialogData_SetSelection 2436
+#define wxPrintDialogData_SetToPage 2437
+#define wxPrintData_new_0 2438
+#define wxPrintData_new_1 2439
+#define wxPrintData_destruct 2440
+#define wxPrintData_GetCollate 2441
+#define wxPrintData_GetBin 2442
+#define wxPrintData_GetColour 2443
+#define wxPrintData_GetDuplex 2444
+#define wxPrintData_GetNoCopies 2445
+#define wxPrintData_GetOrientation 2446
+#define wxPrintData_GetPaperId 2447
+#define wxPrintData_GetPrinterName 2448
+#define wxPrintData_GetQuality 2449
+#define wxPrintData_IsOk 2450
+#define wxPrintData_SetBin 2451
+#define wxPrintData_SetCollate 2452
+#define wxPrintData_SetColour 2453
+#define wxPrintData_SetDuplex 2454
+#define wxPrintData_SetNoCopies 2455
+#define wxPrintData_SetOrientation 2456
+#define wxPrintData_SetPaperId 2457
+#define wxPrintData_SetPrinterName 2458
+#define wxPrintData_SetQuality 2459
+#define wxPrintPreview_new_2 2462
+#define wxPrintPreview_new_3 2463
+#define wxPrintPreview_destruct 2465
+#define wxPrintPreview_GetCanvas 2466
+#define wxPrintPreview_GetCurrentPage 2467
+#define wxPrintPreview_GetFrame 2468
+#define wxPrintPreview_GetMaxPage 2469
+#define wxPrintPreview_GetMinPage 2470
+#define wxPrintPreview_GetPrintout 2471
+#define wxPrintPreview_GetPrintoutForPrinting 2472
+#define wxPrintPreview_IsOk 2473
+#define wxPrintPreview_PaintPage 2474
+#define wxPrintPreview_Print 2475
+#define wxPrintPreview_RenderPage 2476
+#define wxPrintPreview_SetCanvas 2477
+#define wxPrintPreview_SetCurrentPage 2478
+#define wxPrintPreview_SetFrame 2479
+#define wxPrintPreview_SetPrintout 2480
+#define wxPrintPreview_SetZoom 2481
+#define wxPreviewFrame_new 2482
+#define wxPreviewFrame_destruct 2483
+#define wxPreviewFrame_CreateControlBar 2484
+#define wxPreviewFrame_CreateCanvas 2485
+#define wxPreviewFrame_Initialize 2486
+#define wxPreviewFrame_OnCloseWindow 2487
+#define wxPreviewControlBar_new 2488
+#define wxPreviewControlBar_destruct 2489
+#define wxPreviewControlBar_CreateButtons 2490
+#define wxPreviewControlBar_GetPrintPreview 2491
+#define wxPreviewControlBar_GetZoomControl 2492
+#define wxPreviewControlBar_SetZoomControl 2493
+#define wxPrinter_new 2495
+#define wxPrinter_CreateAbortWindow 2496
+#define wxPrinter_GetAbort 2497
+#define wxPrinter_GetLastError 2498
+#define wxPrinter_GetPrintDialogData 2499
+#define wxPrinter_Print 2500
+#define wxPrinter_PrintDialog 2501
+#define wxPrinter_ReportError 2502
+#define wxPrinter_Setup 2503
+#define wxPrinter_destroy 2504
+#define wxXmlResource_new_1 2505
+#define wxXmlResource_new_2 2506
+#define wxXmlResource_destruct 2507
+#define wxXmlResource_AttachUnknownControl 2508
+#define wxXmlResource_ClearHandlers 2509
+#define wxXmlResource_CompareVersion 2510
+#define wxXmlResource_Get 2511
+#define wxXmlResource_GetFlags 2512
+#define wxXmlResource_GetVersion 2513
+#define wxXmlResource_GetXRCID 2514
+#define wxXmlResource_InitAllHandlers 2515
+#define wxXmlResource_Load 2516
+#define wxXmlResource_LoadBitmap 2517
+#define wxXmlResource_LoadDialog_2 2518
+#define wxXmlResource_LoadDialog_3 2519
+#define wxXmlResource_LoadFrame_2 2520
+#define wxXmlResource_LoadFrame_3 2521
+#define wxXmlResource_LoadIcon 2522
+#define wxXmlResource_LoadMenu 2523
+#define wxXmlResource_LoadMenuBar_2 2524
+#define wxXmlResource_LoadMenuBar_1 2525
+#define wxXmlResource_LoadPanel_2 2526
+#define wxXmlResource_LoadPanel_3 2527
+#define wxXmlResource_LoadToolBar 2528
+#define wxXmlResource_Set 2529
+#define wxXmlResource_SetFlags 2530
+#define wxXmlResource_Unload 2531
+#define wxXmlResource_xrcctrl 2532
+#define wxHtmlEasyPrinting_new 2533
+#define wxHtmlEasyPrinting_destruct 2534
+#define wxHtmlEasyPrinting_GetPrintData 2535
+#define wxHtmlEasyPrinting_GetPageSetupData 2536
+#define wxHtmlEasyPrinting_PreviewFile 2537
+#define wxHtmlEasyPrinting_PreviewText 2538
+#define wxHtmlEasyPrinting_PrintFile 2539
+#define wxHtmlEasyPrinting_PrintText 2540
+#define wxHtmlEasyPrinting_PageSetup 2541
+#define wxHtmlEasyPrinting_SetFonts 2542
+#define wxHtmlEasyPrinting_SetHeader 2543
+#define wxHtmlEasyPrinting_SetFooter 2544
+#define wxGLCanvas_new_2 2546
+#define wxGLCanvas_new_3_1 2547
+#define wxGLCanvas_new_3_0 2548
+#define wxGLCanvas_GetContext 2549
+#define wxGLCanvas_SetCurrent 2551
+#define wxGLCanvas_SwapBuffers 2552
+#define wxGLCanvas_destroy 2553
+#define wxAuiManager_new 2554
+#define wxAuiManager_destruct 2555
+#define wxAuiManager_AddPane_2_1 2556
+#define wxAuiManager_AddPane_3 2557
+#define wxAuiManager_AddPane_2_0 2558
+#define wxAuiManager_DetachPane 2559
+#define wxAuiManager_GetAllPanes 2560
+#define wxAuiManager_GetArtProvider 2561
+#define wxAuiManager_GetDockSizeConstraint 2562
+#define wxAuiManager_GetFlags 2563
+#define wxAuiManager_GetManagedWindow 2564
+#define wxAuiManager_GetManager 2565
+#define wxAuiManager_GetPane_1_1 2566
+#define wxAuiManager_GetPane_1_0 2567
+#define wxAuiManager_HideHint 2568
+#define wxAuiManager_InsertPane 2569
+#define wxAuiManager_LoadPaneInfo 2570
+#define wxAuiManager_LoadPerspective 2571
+#define wxAuiManager_SavePaneInfo 2572
+#define wxAuiManager_SavePerspective 2573
+#define wxAuiManager_SetArtProvider 2574
+#define wxAuiManager_SetDockSizeConstraint 2575
+#define wxAuiManager_SetFlags 2576
+#define wxAuiManager_SetManagedWindow 2577
+#define wxAuiManager_ShowHint 2578
+#define wxAuiManager_UnInit 2579
+#define wxAuiManager_Update 2580
+#define wxAuiPaneInfo_new_0 2581
+#define wxAuiPaneInfo_new_1 2582
+#define wxAuiPaneInfo_destruct 2583
+#define wxAuiPaneInfo_BestSize_1 2584
+#define wxAuiPaneInfo_BestSize_2 2585
+#define wxAuiPaneInfo_Bottom 2586
+#define wxAuiPaneInfo_BottomDockable 2587
+#define wxAuiPaneInfo_Caption 2588
+#define wxAuiPaneInfo_CaptionVisible 2589
+#define wxAuiPaneInfo_Centre 2590
+#define wxAuiPaneInfo_CentrePane 2591
+#define wxAuiPaneInfo_CloseButton 2592
+#define wxAuiPaneInfo_DefaultPane 2593
+#define wxAuiPaneInfo_DestroyOnClose 2594
+#define wxAuiPaneInfo_Direction 2595
+#define wxAuiPaneInfo_Dock 2596
+#define wxAuiPaneInfo_Dockable 2597
+#define wxAuiPaneInfo_Fixed 2598
+#define wxAuiPaneInfo_Float 2599
+#define wxAuiPaneInfo_Floatable 2600
+#define wxAuiPaneInfo_FloatingPosition_1 2601
+#define wxAuiPaneInfo_FloatingPosition_2 2602
+#define wxAuiPaneInfo_FloatingSize_1 2603
+#define wxAuiPaneInfo_FloatingSize_2 2604
+#define wxAuiPaneInfo_Gripper 2605
+#define wxAuiPaneInfo_GripperTop 2606
+#define wxAuiPaneInfo_HasBorder 2607
+#define wxAuiPaneInfo_HasCaption 2608
+#define wxAuiPaneInfo_HasCloseButton 2609
+#define wxAuiPaneInfo_HasFlag 2610
+#define wxAuiPaneInfo_HasGripper 2611
+#define wxAuiPaneInfo_HasGripperTop 2612
+#define wxAuiPaneInfo_HasMaximizeButton 2613
+#define wxAuiPaneInfo_HasMinimizeButton 2614
+#define wxAuiPaneInfo_HasPinButton 2615
+#define wxAuiPaneInfo_Hide 2616
+#define wxAuiPaneInfo_IsBottomDockable 2617
+#define wxAuiPaneInfo_IsDocked 2618
+#define wxAuiPaneInfo_IsFixed 2619
+#define wxAuiPaneInfo_IsFloatable 2620
+#define wxAuiPaneInfo_IsFloating 2621
+#define wxAuiPaneInfo_IsLeftDockable 2622
+#define wxAuiPaneInfo_IsMovable 2623
+#define wxAuiPaneInfo_IsOk 2624
+#define wxAuiPaneInfo_IsResizable 2625
+#define wxAuiPaneInfo_IsRightDockable 2626
+#define wxAuiPaneInfo_IsShown 2627
+#define wxAuiPaneInfo_IsToolbar 2628
+#define wxAuiPaneInfo_IsTopDockable 2629
+#define wxAuiPaneInfo_Layer 2630
+#define wxAuiPaneInfo_Left 2631
+#define wxAuiPaneInfo_LeftDockable 2632
+#define wxAuiPaneInfo_MaxSize_1 2633
+#define wxAuiPaneInfo_MaxSize_2 2634
+#define wxAuiPaneInfo_MaximizeButton 2635
+#define wxAuiPaneInfo_MinSize_1 2636
+#define wxAuiPaneInfo_MinSize_2 2637
+#define wxAuiPaneInfo_MinimizeButton 2638
+#define wxAuiPaneInfo_Movable 2639
+#define wxAuiPaneInfo_Name 2640
+#define wxAuiPaneInfo_PaneBorder 2641
+#define wxAuiPaneInfo_PinButton 2642
+#define wxAuiPaneInfo_Position 2643
+#define wxAuiPaneInfo_Resizable 2644
+#define wxAuiPaneInfo_Right 2645
+#define wxAuiPaneInfo_RightDockable 2646
+#define wxAuiPaneInfo_Row 2647
+#define wxAuiPaneInfo_SafeSet 2648
+#define wxAuiPaneInfo_SetFlag 2649
+#define wxAuiPaneInfo_Show 2650
+#define wxAuiPaneInfo_ToolbarPane 2651
+#define wxAuiPaneInfo_Top 2652
+#define wxAuiPaneInfo_TopDockable 2653
+#define wxAuiPaneInfo_Window 2654
+#define wxAuiPaneInfo_GetWindow 2655
+#define wxAuiPaneInfo_GetFrame 2656
+#define wxAuiPaneInfo_GetDirection 2657
+#define wxAuiPaneInfo_GetLayer 2658
+#define wxAuiPaneInfo_GetRow 2659
+#define wxAuiPaneInfo_GetPosition 2660
+#define wxAuiPaneInfo_GetFloatingPosition 2661
+#define wxAuiPaneInfo_GetFloatingSize 2662
+#define wxAuiNotebook_new_0 2663
+#define wxAuiNotebook_new_2 2664
+#define wxAuiNotebook_AddPage 2665
+#define wxAuiNotebook_Create 2666
+#define wxAuiNotebook_DeletePage 2667
+#define wxAuiNotebook_GetArtProvider 2668
+#define wxAuiNotebook_GetPage 2669
+#define wxAuiNotebook_GetPageBitmap 2670
+#define wxAuiNotebook_GetPageCount 2671
+#define wxAuiNotebook_GetPageIndex 2672
+#define wxAuiNotebook_GetPageText 2673
+#define wxAuiNotebook_GetSelection 2674
+#define wxAuiNotebook_InsertPage 2675
+#define wxAuiNotebook_RemovePage 2676
+#define wxAuiNotebook_SetArtProvider 2677
+#define wxAuiNotebook_SetFont 2678
+#define wxAuiNotebook_SetPageBitmap 2679
+#define wxAuiNotebook_SetPageText 2680
+#define wxAuiNotebook_SetSelection 2681
+#define wxAuiNotebook_SetTabCtrlHeight 2682
+#define wxAuiNotebook_SetUniformBitmapSize 2683
+#define wxAuiNotebook_destroy 2684
+#define wxAuiTabArt_SetFlags 2685
+#define wxAuiTabArt_SetMeasuringFont 2686
+#define wxAuiTabArt_SetNormalFont 2687
+#define wxAuiTabArt_SetSelectedFont 2688
+#define wxAuiTabArt_SetColour 2689
+#define wxAuiTabArt_SetActiveColour 2690
+#define wxAuiDockArt_GetColour 2691
+#define wxAuiDockArt_GetFont 2692
+#define wxAuiDockArt_GetMetric 2693
+#define wxAuiDockArt_SetColour 2694
+#define wxAuiDockArt_SetFont 2695
+#define wxAuiDockArt_SetMetric 2696
+#define wxAuiSimpleTabArt_new 2697
+#define wxAuiSimpleTabArt_destroy 2698
+#define wxMDIParentFrame_new_0 2699
+#define wxMDIParentFrame_new_4 2700
+#define wxMDIParentFrame_destruct 2701
+#define wxMDIParentFrame_ActivateNext 2702
+#define wxMDIParentFrame_ActivatePrevious 2703
+#define wxMDIParentFrame_ArrangeIcons 2704
+#define wxMDIParentFrame_Cascade 2705
+#define wxMDIParentFrame_Create 2706
+#define wxMDIParentFrame_GetActiveChild 2707
+#define wxMDIParentFrame_GetClientWindow 2708
+#define wxMDIParentFrame_Tile 2709
+#define wxMDIChildFrame_new_0 2710
+#define wxMDIChildFrame_new_4 2711
+#define wxMDIChildFrame_destruct 2712
+#define wxMDIChildFrame_Activate 2713
+#define wxMDIChildFrame_Create 2714
+#define wxMDIChildFrame_Maximize 2715
+#define wxMDIChildFrame_Restore 2716
+#define wxMDIClientWindow_new_0 2717
+#define wxMDIClientWindow_new_2 2718
+#define wxMDIClientWindow_destruct 2719
+#define wxMDIClientWindow_CreateClient 2720
+#define wxLayoutAlgorithm_new 2721
+#define wxLayoutAlgorithm_LayoutFrame 2722
+#define wxLayoutAlgorithm_LayoutMDIFrame 2723
+#define wxLayoutAlgorithm_LayoutWindow 2724
+#define wxLayoutAlgorithm_destroy 2725
+#define wxEvent_GetId 2726
+#define wxEvent_GetSkipped 2727
+#define wxEvent_GetTimestamp 2728
+#define wxEvent_IsCommandEvent 2729
+#define wxEvent_ResumePropagation 2730
+#define wxEvent_ShouldPropagate 2731
+#define wxEvent_Skip 2732
+#define wxEvent_StopPropagation 2733
+#define wxCommandEvent_getClientData 2734
+#define wxCommandEvent_GetExtraLong 2735
+#define wxCommandEvent_GetInt 2736
+#define wxCommandEvent_GetSelection 2737
+#define wxCommandEvent_GetString 2738
+#define wxCommandEvent_IsChecked 2739
+#define wxCommandEvent_IsSelection 2740
+#define wxCommandEvent_SetInt 2741
+#define wxCommandEvent_SetString 2742
+#define wxScrollEvent_GetOrientation 2743
+#define wxScrollEvent_GetPosition 2744
+#define wxScrollWinEvent_GetOrientation 2745
+#define wxScrollWinEvent_GetPosition 2746
+#define wxMouseEvent_AltDown 2747
+#define wxMouseEvent_Button 2748
+#define wxMouseEvent_ButtonDClick 2749
+#define wxMouseEvent_ButtonDown 2750
+#define wxMouseEvent_ButtonUp 2751
+#define wxMouseEvent_CmdDown 2752
+#define wxMouseEvent_ControlDown 2753
+#define wxMouseEvent_Dragging 2754
+#define wxMouseEvent_Entering 2755
+#define wxMouseEvent_GetButton 2756
+#define wxMouseEvent_GetPosition 2759
+#define wxMouseEvent_GetLogicalPosition 2760
+#define wxMouseEvent_GetLinesPerAction 2761
+#define wxMouseEvent_GetWheelRotation 2762
+#define wxMouseEvent_GetWheelDelta 2763
+#define wxMouseEvent_GetX 2764
+#define wxMouseEvent_GetY 2765
+#define wxMouseEvent_IsButton 2766
+#define wxMouseEvent_IsPageScroll 2767
+#define wxMouseEvent_Leaving 2768
+#define wxMouseEvent_LeftDClick 2769
+#define wxMouseEvent_LeftDown 2770
+#define wxMouseEvent_LeftIsDown 2771
+#define wxMouseEvent_LeftUp 2772
+#define wxMouseEvent_MetaDown 2773
+#define wxMouseEvent_MiddleDClick 2774
+#define wxMouseEvent_MiddleDown 2775
+#define wxMouseEvent_MiddleIsDown 2776
+#define wxMouseEvent_MiddleUp 2777
+#define wxMouseEvent_Moving 2778
+#define wxMouseEvent_RightDClick 2779
+#define wxMouseEvent_RightDown 2780
+#define wxMouseEvent_RightIsDown 2781
+#define wxMouseEvent_RightUp 2782
+#define wxMouseEvent_ShiftDown 2783
+#define wxSetCursorEvent_GetCursor 2784
+#define wxSetCursorEvent_GetX 2785
+#define wxSetCursorEvent_GetY 2786
+#define wxSetCursorEvent_HasCursor 2787
+#define wxSetCursorEvent_SetCursor 2788
+#define wxKeyEvent_AltDown 2789
+#define wxKeyEvent_CmdDown 2790
+#define wxKeyEvent_ControlDown 2791
+#define wxKeyEvent_GetKeyCode 2792
+#define wxKeyEvent_GetModifiers 2793
+#define wxKeyEvent_GetPosition 2796
+#define wxKeyEvent_GetRawKeyCode 2797
+#define wxKeyEvent_GetRawKeyFlags 2798
+#define wxKeyEvent_GetUnicodeKey 2799
+#define wxKeyEvent_GetX 2800
+#define wxKeyEvent_GetY 2801
+#define wxKeyEvent_HasModifiers 2802
+#define wxKeyEvent_MetaDown 2803
+#define wxKeyEvent_ShiftDown 2804
+#define wxSizeEvent_GetSize 2805
+#define wxMoveEvent_GetPosition 2806
+#define wxEraseEvent_GetDC 2807
+#define wxFocusEvent_GetWindow 2808
+#define wxChildFocusEvent_GetWindow 2809
+#define wxMenuEvent_GetMenu 2810
+#define wxMenuEvent_GetMenuId 2811
+#define wxMenuEvent_IsPopup 2812
+#define wxCloseEvent_CanVeto 2813
+#define wxCloseEvent_GetLoggingOff 2814
+#define wxCloseEvent_SetCanVeto 2815
+#define wxCloseEvent_SetLoggingOff 2816
+#define wxCloseEvent_Veto 2817
+#define wxShowEvent_SetShow 2818
+#define wxShowEvent_GetShow 2819
+#define wxIconizeEvent_Iconized 2820
+#define wxJoystickEvent_ButtonDown 2821
+#define wxJoystickEvent_ButtonIsDown 2822
+#define wxJoystickEvent_ButtonUp 2823
+#define wxJoystickEvent_GetButtonChange 2824
+#define wxJoystickEvent_GetButtonState 2825
+#define wxJoystickEvent_GetJoystick 2826
+#define wxJoystickEvent_GetPosition 2827
+#define wxJoystickEvent_GetZPosition 2828
+#define wxJoystickEvent_IsButton 2829
+#define wxJoystickEvent_IsMove 2830
+#define wxJoystickEvent_IsZMove 2831
+#define wxUpdateUIEvent_CanUpdate 2832
+#define wxUpdateUIEvent_Check 2833
+#define wxUpdateUIEvent_Enable 2834
+#define wxUpdateUIEvent_Show 2835
+#define wxUpdateUIEvent_GetChecked 2836
+#define wxUpdateUIEvent_GetEnabled 2837
+#define wxUpdateUIEvent_GetShown 2838
+#define wxUpdateUIEvent_GetSetChecked 2839
+#define wxUpdateUIEvent_GetSetEnabled 2840
+#define wxUpdateUIEvent_GetSetShown 2841
+#define wxUpdateUIEvent_GetSetText 2842
+#define wxUpdateUIEvent_GetText 2843
+#define wxUpdateUIEvent_GetMode 2844
+#define wxUpdateUIEvent_GetUpdateInterval 2845
+#define wxUpdateUIEvent_ResetUpdateTime 2846
+#define wxUpdateUIEvent_SetMode 2847
+#define wxUpdateUIEvent_SetText 2848
+#define wxUpdateUIEvent_SetUpdateInterval 2849
+#define wxMouseCaptureChangedEvent_GetCapturedWindow 2850
+#define wxPaletteChangedEvent_SetChangedWindow 2851
+#define wxPaletteChangedEvent_GetChangedWindow 2852
+#define wxQueryNewPaletteEvent_SetPaletteRealized 2853
+#define wxQueryNewPaletteEvent_GetPaletteRealized 2854
+#define wxNavigationKeyEvent_GetDirection 2855
+#define wxNavigationKeyEvent_SetDirection 2856
+#define wxNavigationKeyEvent_IsWindowChange 2857
+#define wxNavigationKeyEvent_SetWindowChange 2858
+#define wxNavigationKeyEvent_IsFromTab 2859
+#define wxNavigationKeyEvent_SetFromTab 2860
+#define wxNavigationKeyEvent_GetCurrentFocus 2861
+#define wxNavigationKeyEvent_SetCurrentFocus 2862
+#define wxHelpEvent_GetOrigin 2863
+#define wxHelpEvent_GetPosition 2864
+#define wxHelpEvent_SetOrigin 2865
+#define wxHelpEvent_SetPosition 2866
+#define wxContextMenuEvent_GetPosition 2867
+#define wxContextMenuEvent_SetPosition 2868
+#define wxIdleEvent_CanSend 2869
+#define wxIdleEvent_GetMode 2870
+#define wxIdleEvent_RequestMore 2871
+#define wxIdleEvent_MoreRequested 2872
+#define wxIdleEvent_SetMode 2873
+#define wxGridEvent_AltDown 2874
+#define wxGridEvent_ControlDown 2875
+#define wxGridEvent_GetCol 2876
+#define wxGridEvent_GetPosition 2877
+#define wxGridEvent_GetRow 2878
+#define wxGridEvent_MetaDown 2879
+#define wxGridEvent_Selecting 2880
+#define wxGridEvent_ShiftDown 2881
+#define wxNotifyEvent_Allow 2882
+#define wxNotifyEvent_IsAllowed 2883
+#define wxNotifyEvent_Veto 2884
+#define wxSashEvent_GetEdge 2885
+#define wxSashEvent_GetDragRect 2886
+#define wxSashEvent_GetDragStatus 2887
+#define wxListEvent_GetCacheFrom 2888
+#define wxListEvent_GetCacheTo 2889
+#define wxListEvent_GetKeyCode 2890
+#define wxListEvent_GetIndex 2891
+#define wxListEvent_GetColumn 2892
+#define wxListEvent_GetPoint 2893
+#define wxListEvent_GetLabel 2894
+#define wxListEvent_GetText 2895
+#define wxListEvent_GetImage 2896
+#define wxListEvent_GetData 2897
+#define wxListEvent_GetMask 2898
+#define wxListEvent_GetItem 2899
+#define wxListEvent_IsEditCancelled 2900
+#define wxDateEvent_GetDate 2901
+#define wxCalendarEvent_GetWeekDay 2902
+#define wxFileDirPickerEvent_GetPath 2903
+#define wxColourPickerEvent_GetColour 2904
+#define wxFontPickerEvent_GetFont 2905
+#define wxStyledTextEvent_GetPosition 2906
+#define wxStyledTextEvent_GetKey 2907
+#define wxStyledTextEvent_GetModifiers 2908
+#define wxStyledTextEvent_GetModificationType 2909
+#define wxStyledTextEvent_GetText 2910
+#define wxStyledTextEvent_GetLength 2911
+#define wxStyledTextEvent_GetLinesAdded 2912
+#define wxStyledTextEvent_GetLine 2913
+#define wxStyledTextEvent_GetFoldLevelNow 2914
+#define wxStyledTextEvent_GetFoldLevelPrev 2915
+#define wxStyledTextEvent_GetMargin 2916
+#define wxStyledTextEvent_GetMessage 2917
+#define wxStyledTextEvent_GetWParam 2918
+#define wxStyledTextEvent_GetLParam 2919
+#define wxStyledTextEvent_GetListType 2920
+#define wxStyledTextEvent_GetX 2921
+#define wxStyledTextEvent_GetY 2922
+#define wxStyledTextEvent_GetDragText 2923
+#define wxStyledTextEvent_GetDragAllowMove 2924
+#define wxStyledTextEvent_GetDragResult 2925
+#define wxStyledTextEvent_GetShift 2926
+#define wxStyledTextEvent_GetControl 2927
+#define wxStyledTextEvent_GetAlt 2928
+#define utils_wxGetKeyState 2929
+#define utils_wxGetMousePosition 2930
+#define utils_wxGetMouseState 2931
+#define utils_wxSetDetectableAutoRepeat 2932
+#define utils_wxBell 2933
+#define utils_wxFindMenuItemId 2934
+#define utils_wxGenericFindWindowAtPoint 2935
+#define utils_wxFindWindowAtPoint 2936
+#define utils_wxBeginBusyCursor 2937
+#define utils_wxEndBusyCursor 2938
+#define utils_wxIsBusy 2939
+#define utils_wxShutdown 2940
+#define utils_wxShell 2941
+#define utils_wxLaunchDefaultBrowser 2942
+#define utils_wxGetEmailAddress 2943
+#define utils_wxGetUserId 2944
+#define utils_wxGetHomeDir 2945
+#define utils_wxNewId 2946
+#define utils_wxRegisterId 2947
+#define utils_wxGetCurrentId 2948
+#define utils_wxGetOsDescription 2949
+#define utils_wxIsPlatformLittleEndian 2950
+#define utils_wxIsPlatform64Bit 2951
+#define gdicmn_wxDisplaySize 2952
+#define gdicmn_wxSetCursor 2953
+#define wxPrintout_new 2954
+#define wxPrintout_destruct 2955
+#define wxPrintout_GetDC 2956
+#define wxPrintout_GetPageSizeMM 2957
+#define wxPrintout_GetPageSizePixels 2958
+#define wxPrintout_GetPaperRectPixels 2959
+#define wxPrintout_GetPPIPrinter 2960
+#define wxPrintout_GetPPIScreen 2961
+#define wxPrintout_GetTitle 2962
+#define wxPrintout_IsPreview 2963
+#define wxPrintout_FitThisSizeToPaper 2964
+#define wxPrintout_FitThisSizeToPage 2965
+#define wxPrintout_FitThisSizeToPageMargins 2966
+#define wxPrintout_MapScreenSizeToPaper 2967
+#define wxPrintout_MapScreenSizeToPage 2968
+#define wxPrintout_MapScreenSizeToPageMargins 2969
+#define wxPrintout_MapScreenSizeToDevice 2970
+#define wxPrintout_GetLogicalPaperRect 2971
+#define wxPrintout_GetLogicalPageRect 2972
+#define wxPrintout_GetLogicalPageMarginsRect 2973
+#define wxPrintout_SetLogicalOrigin 2974
+#define wxPrintout_OffsetLogicalOrigin 2975
+#define wxStyledTextCtrl_new_2 2976
+#define wxStyledTextCtrl_new_0 2977
+#define wxStyledTextCtrl_destruct 2978
+#define wxStyledTextCtrl_Create 2979
+#define wxStyledTextCtrl_AddText 2980
+#define wxStyledTextCtrl_AddStyledText 2981
+#define wxStyledTextCtrl_InsertText 2982
+#define wxStyledTextCtrl_ClearAll 2983
+#define wxStyledTextCtrl_ClearDocumentStyle 2984
+#define wxStyledTextCtrl_GetLength 2985
+#define wxStyledTextCtrl_GetCharAt 2986
+#define wxStyledTextCtrl_GetCurrentPos 2987
+#define wxStyledTextCtrl_GetAnchor 2988
+#define wxStyledTextCtrl_GetStyleAt 2989
+#define wxStyledTextCtrl_Redo 2990
+#define wxStyledTextCtrl_SetUndoCollection 2991
+#define wxStyledTextCtrl_SelectAll 2992
+#define wxStyledTextCtrl_SetSavePoint 2993
+#define wxStyledTextCtrl_GetStyledText 2994
+#define wxStyledTextCtrl_CanRedo 2995
+#define wxStyledTextCtrl_MarkerLineFromHandle 2996
+#define wxStyledTextCtrl_MarkerDeleteHandle 2997
+#define wxStyledTextCtrl_GetUndoCollection 2998
+#define wxStyledTextCtrl_GetViewWhiteSpace 2999
+#define wxStyledTextCtrl_SetViewWhiteSpace 3000
+#define wxStyledTextCtrl_PositionFromPoint 3001
+#define wxStyledTextCtrl_PositionFromPointClose 3002
+#define wxStyledTextCtrl_GotoLine 3003
+#define wxStyledTextCtrl_GotoPos 3004
+#define wxStyledTextCtrl_SetAnchor 3005
+#define wxStyledTextCtrl_GetCurLine 3006
+#define wxStyledTextCtrl_GetEndStyled 3007
+#define wxStyledTextCtrl_ConvertEOLs 3008
+#define wxStyledTextCtrl_GetEOLMode 3009
+#define wxStyledTextCtrl_SetEOLMode 3010
+#define wxStyledTextCtrl_StartStyling 3011
+#define wxStyledTextCtrl_SetStyling 3012
+#define wxStyledTextCtrl_GetBufferedDraw 3013
+#define wxStyledTextCtrl_SetBufferedDraw 3014
+#define wxStyledTextCtrl_SetTabWidth 3015
+#define wxStyledTextCtrl_GetTabWidth 3016
+#define wxStyledTextCtrl_SetCodePage 3017
+#define wxStyledTextCtrl_MarkerDefine 3018
+#define wxStyledTextCtrl_MarkerSetForeground 3019
+#define wxStyledTextCtrl_MarkerSetBackground 3020
+#define wxStyledTextCtrl_MarkerAdd 3021
+#define wxStyledTextCtrl_MarkerDelete 3022
+#define wxStyledTextCtrl_MarkerDeleteAll 3023
+#define wxStyledTextCtrl_MarkerGet 3024
+#define wxStyledTextCtrl_MarkerNext 3025
+#define wxStyledTextCtrl_MarkerPrevious 3026
+#define wxStyledTextCtrl_MarkerDefineBitmap 3027
+#define wxStyledTextCtrl_MarkerAddSet 3028
+#define wxStyledTextCtrl_MarkerSetAlpha 3029
+#define wxStyledTextCtrl_SetMarginType 3030
+#define wxStyledTextCtrl_GetMarginType 3031
+#define wxStyledTextCtrl_SetMarginWidth 3032
+#define wxStyledTextCtrl_GetMarginWidth 3033
+#define wxStyledTextCtrl_SetMarginMask 3034
+#define wxStyledTextCtrl_GetMarginMask 3035
+#define wxStyledTextCtrl_SetMarginSensitive 3036
+#define wxStyledTextCtrl_GetMarginSensitive 3037
+#define wxStyledTextCtrl_StyleClearAll 3038
+#define wxStyledTextCtrl_StyleSetForeground 3039
+#define wxStyledTextCtrl_StyleSetBackground 3040
+#define wxStyledTextCtrl_StyleSetBold 3041
+#define wxStyledTextCtrl_StyleSetItalic 3042
+#define wxStyledTextCtrl_StyleSetSize 3043
+#define wxStyledTextCtrl_StyleSetFaceName 3044
+#define wxStyledTextCtrl_StyleSetEOLFilled 3045
+#define wxStyledTextCtrl_StyleResetDefault 3046
+#define wxStyledTextCtrl_StyleSetUnderline 3047
+#define wxStyledTextCtrl_StyleSetCase 3048
+#define wxStyledTextCtrl_StyleSetHotSpot 3049
+#define wxStyledTextCtrl_SetSelForeground 3050
+#define wxStyledTextCtrl_SetSelBackground 3051
+#define wxStyledTextCtrl_GetSelAlpha 3052
+#define wxStyledTextCtrl_SetSelAlpha 3053
+#define wxStyledTextCtrl_SetCaretForeground 3054
+#define wxStyledTextCtrl_CmdKeyAssign 3055
+#define wxStyledTextCtrl_CmdKeyClear 3056
+#define wxStyledTextCtrl_CmdKeyClearAll 3057
+#define wxStyledTextCtrl_SetStyleBytes 3058
+#define wxStyledTextCtrl_StyleSetVisible 3059
+#define wxStyledTextCtrl_GetCaretPeriod 3060
+#define wxStyledTextCtrl_SetCaretPeriod 3061
+#define wxStyledTextCtrl_SetWordChars 3062
+#define wxStyledTextCtrl_BeginUndoAction 3063
+#define wxStyledTextCtrl_EndUndoAction 3064
+#define wxStyledTextCtrl_IndicatorSetStyle 3065
+#define wxStyledTextCtrl_IndicatorGetStyle 3066
+#define wxStyledTextCtrl_IndicatorSetForeground 3067
+#define wxStyledTextCtrl_IndicatorGetForeground 3068
+#define wxStyledTextCtrl_SetWhitespaceForeground 3069
+#define wxStyledTextCtrl_SetWhitespaceBackground 3070
+#define wxStyledTextCtrl_GetStyleBits 3071
+#define wxStyledTextCtrl_SetLineState 3072
+#define wxStyledTextCtrl_GetLineState 3073
+#define wxStyledTextCtrl_GetMaxLineState 3074
+#define wxStyledTextCtrl_GetCaretLineVisible 3075
+#define wxStyledTextCtrl_SetCaretLineVisible 3076
+#define wxStyledTextCtrl_GetCaretLineBackground 3077
+#define wxStyledTextCtrl_SetCaretLineBackground 3078
+#define wxStyledTextCtrl_AutoCompShow 3079
+#define wxStyledTextCtrl_AutoCompCancel 3080
+#define wxStyledTextCtrl_AutoCompActive 3081
+#define wxStyledTextCtrl_AutoCompPosStart 3082
+#define wxStyledTextCtrl_AutoCompComplete 3083
+#define wxStyledTextCtrl_AutoCompStops 3084
+#define wxStyledTextCtrl_AutoCompSetSeparator 3085
+#define wxStyledTextCtrl_AutoCompGetSeparator 3086
+#define wxStyledTextCtrl_AutoCompSelect 3087
+#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3088
+#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3089
+#define wxStyledTextCtrl_AutoCompSetFillUps 3090
+#define wxStyledTextCtrl_AutoCompSetChooseSingle 3091
+#define wxStyledTextCtrl_AutoCompGetChooseSingle 3092
+#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3093
+#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3094
+#define wxStyledTextCtrl_UserListShow 3095
+#define wxStyledTextCtrl_AutoCompSetAutoHide 3096
+#define wxStyledTextCtrl_AutoCompGetAutoHide 3097
+#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3098
+#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3099
+#define wxStyledTextCtrl_RegisterImage 3100
+#define wxStyledTextCtrl_ClearRegisteredImages 3101
+#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3102
+#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3103
+#define wxStyledTextCtrl_AutoCompSetMaxWidth 3104
+#define wxStyledTextCtrl_AutoCompGetMaxWidth 3105
+#define wxStyledTextCtrl_AutoCompSetMaxHeight 3106
+#define wxStyledTextCtrl_AutoCompGetMaxHeight 3107
+#define wxStyledTextCtrl_SetIndent 3108
+#define wxStyledTextCtrl_GetIndent 3109
+#define wxStyledTextCtrl_SetUseTabs 3110
+#define wxStyledTextCtrl_GetUseTabs 3111
+#define wxStyledTextCtrl_SetLineIndentation 3112
+#define wxStyledTextCtrl_GetLineIndentation 3113
+#define wxStyledTextCtrl_GetLineIndentPosition 3114
+#define wxStyledTextCtrl_GetColumn 3115
+#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3116
+#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3117
+#define wxStyledTextCtrl_SetIndentationGuides 3118
+#define wxStyledTextCtrl_GetIndentationGuides 3119
+#define wxStyledTextCtrl_SetHighlightGuide 3120
+#define wxStyledTextCtrl_GetHighlightGuide 3121
+#define wxStyledTextCtrl_GetLineEndPosition 3122
+#define wxStyledTextCtrl_GetCodePage 3123
+#define wxStyledTextCtrl_GetCaretForeground 3124
+#define wxStyledTextCtrl_GetReadOnly 3125
+#define wxStyledTextCtrl_SetCurrentPos 3126
+#define wxStyledTextCtrl_SetSelectionStart 3127
+#define wxStyledTextCtrl_GetSelectionStart 3128
+#define wxStyledTextCtrl_SetSelectionEnd 3129
+#define wxStyledTextCtrl_GetSelectionEnd 3130
+#define wxStyledTextCtrl_SetPrintMagnification 3131
+#define wxStyledTextCtrl_GetPrintMagnification 3132
+#define wxStyledTextCtrl_SetPrintColourMode 3133
+#define wxStyledTextCtrl_GetPrintColourMode 3134
+#define wxStyledTextCtrl_FindText 3135
+#define wxStyledTextCtrl_FormatRange 3136
+#define wxStyledTextCtrl_GetFirstVisibleLine 3137
+#define wxStyledTextCtrl_GetLine 3138
+#define wxStyledTextCtrl_GetLineCount 3139
+#define wxStyledTextCtrl_SetMarginLeft 3140
+#define wxStyledTextCtrl_GetMarginLeft 3141
+#define wxStyledTextCtrl_SetMarginRight 3142
+#define wxStyledTextCtrl_GetMarginRight 3143
+#define wxStyledTextCtrl_GetModify 3144
+#define wxStyledTextCtrl_SetSelection 3145
+#define wxStyledTextCtrl_GetSelectedText 3146
+#define wxStyledTextCtrl_GetTextRange 3147
+#define wxStyledTextCtrl_HideSelection 3148
+#define wxStyledTextCtrl_LineFromPosition 3149
+#define wxStyledTextCtrl_PositionFromLine 3150
+#define wxStyledTextCtrl_LineScroll 3151
+#define wxStyledTextCtrl_EnsureCaretVisible 3152
+#define wxStyledTextCtrl_ReplaceSelection 3153
+#define wxStyledTextCtrl_SetReadOnly 3154
+#define wxStyledTextCtrl_CanPaste 3155
+#define wxStyledTextCtrl_CanUndo 3156
+#define wxStyledTextCtrl_EmptyUndoBuffer 3157
+#define wxStyledTextCtrl_Undo 3158
+#define wxStyledTextCtrl_Cut 3159
+#define wxStyledTextCtrl_Copy 3160
+#define wxStyledTextCtrl_Paste 3161
+#define wxStyledTextCtrl_Clear 3162
+#define wxStyledTextCtrl_SetText 3163
+#define wxStyledTextCtrl_GetText 3164
+#define wxStyledTextCtrl_GetTextLength 3165
+#define wxStyledTextCtrl_GetOvertype 3166
+#define wxStyledTextCtrl_SetCaretWidth 3167
+#define wxStyledTextCtrl_GetCaretWidth 3168
+#define wxStyledTextCtrl_SetTargetStart 3169
+#define wxStyledTextCtrl_GetTargetStart 3170
+#define wxStyledTextCtrl_SetTargetEnd 3171
+#define wxStyledTextCtrl_GetTargetEnd 3172
+#define wxStyledTextCtrl_ReplaceTarget 3173
+#define wxStyledTextCtrl_SearchInTarget 3174
+#define wxStyledTextCtrl_SetSearchFlags 3175
+#define wxStyledTextCtrl_GetSearchFlags 3176
+#define wxStyledTextCtrl_CallTipShow 3177
+#define wxStyledTextCtrl_CallTipCancel 3178
+#define wxStyledTextCtrl_CallTipActive 3179
+#define wxStyledTextCtrl_CallTipPosAtStart 3180
+#define wxStyledTextCtrl_CallTipSetHighlight 3181
+#define wxStyledTextCtrl_CallTipSetBackground 3182
+#define wxStyledTextCtrl_CallTipSetForeground 3183
+#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3184
+#define wxStyledTextCtrl_CallTipUseStyle 3185
+#define wxStyledTextCtrl_VisibleFromDocLine 3186
+#define wxStyledTextCtrl_DocLineFromVisible 3187
+#define wxStyledTextCtrl_WrapCount 3188
+#define wxStyledTextCtrl_SetFoldLevel 3189
+#define wxStyledTextCtrl_GetFoldLevel 3190
+#define wxStyledTextCtrl_GetLastChild 3191
+#define wxStyledTextCtrl_GetFoldParent 3192
+#define wxStyledTextCtrl_ShowLines 3193
+#define wxStyledTextCtrl_HideLines 3194
+#define wxStyledTextCtrl_GetLineVisible 3195
+#define wxStyledTextCtrl_SetFoldExpanded 3196
+#define wxStyledTextCtrl_GetFoldExpanded 3197
+#define wxStyledTextCtrl_ToggleFold 3198
+#define wxStyledTextCtrl_EnsureVisible 3199
+#define wxStyledTextCtrl_SetFoldFlags 3200
+#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3201
+#define wxStyledTextCtrl_SetTabIndents 3202
+#define wxStyledTextCtrl_GetTabIndents 3203
+#define wxStyledTextCtrl_SetBackSpaceUnIndents 3204
+#define wxStyledTextCtrl_GetBackSpaceUnIndents 3205
+#define wxStyledTextCtrl_SetMouseDwellTime 3206
+#define wxStyledTextCtrl_GetMouseDwellTime 3207
+#define wxStyledTextCtrl_WordStartPosition 3208
+#define wxStyledTextCtrl_WordEndPosition 3209
+#define wxStyledTextCtrl_SetWrapMode 3210
+#define wxStyledTextCtrl_GetWrapMode 3211
+#define wxStyledTextCtrl_SetWrapVisualFlags 3212
+#define wxStyledTextCtrl_GetWrapVisualFlags 3213
+#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3214
+#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3215
+#define wxStyledTextCtrl_SetWrapStartIndent 3216
+#define wxStyledTextCtrl_GetWrapStartIndent 3217
+#define wxStyledTextCtrl_SetLayoutCache 3218
+#define wxStyledTextCtrl_GetLayoutCache 3219
+#define wxStyledTextCtrl_SetScrollWidth 3220
+#define wxStyledTextCtrl_GetScrollWidth 3221
+#define wxStyledTextCtrl_TextWidth 3222
+#define wxStyledTextCtrl_GetEndAtLastLine 3223
+#define wxStyledTextCtrl_TextHeight 3224
+#define wxStyledTextCtrl_SetUseVerticalScrollBar 3225
+#define wxStyledTextCtrl_GetUseVerticalScrollBar 3226
+#define wxStyledTextCtrl_AppendText 3227
+#define wxStyledTextCtrl_GetTwoPhaseDraw 3228
+#define wxStyledTextCtrl_SetTwoPhaseDraw 3229
+#define wxStyledTextCtrl_TargetFromSelection 3230
+#define wxStyledTextCtrl_LinesJoin 3231
+#define wxStyledTextCtrl_LinesSplit 3232
+#define wxStyledTextCtrl_SetFoldMarginColour 3233
+#define wxStyledTextCtrl_SetFoldMarginHiColour 3234
+#define wxStyledTextCtrl_LineDown 3235
+#define wxStyledTextCtrl_LineDownExtend 3236
+#define wxStyledTextCtrl_LineUp 3237
+#define wxStyledTextCtrl_LineUpExtend 3238
+#define wxStyledTextCtrl_CharLeft 3239
+#define wxStyledTextCtrl_CharLeftExtend 3240
+#define wxStyledTextCtrl_CharRight 3241
+#define wxStyledTextCtrl_CharRightExtend 3242
+#define wxStyledTextCtrl_WordLeft 3243
+#define wxStyledTextCtrl_WordLeftExtend 3244
+#define wxStyledTextCtrl_WordRight 3245
+#define wxStyledTextCtrl_WordRightExtend 3246
+#define wxStyledTextCtrl_Home 3247
+#define wxStyledTextCtrl_HomeExtend 3248
+#define wxStyledTextCtrl_LineEnd 3249
+#define wxStyledTextCtrl_LineEndExtend 3250
+#define wxStyledTextCtrl_DocumentStart 3251
+#define wxStyledTextCtrl_DocumentStartExtend 3252
+#define wxStyledTextCtrl_DocumentEnd 3253
+#define wxStyledTextCtrl_DocumentEndExtend 3254
+#define wxStyledTextCtrl_PageUp 3255
+#define wxStyledTextCtrl_PageUpExtend 3256
+#define wxStyledTextCtrl_PageDown 3257
+#define wxStyledTextCtrl_PageDownExtend 3258
+#define wxStyledTextCtrl_EditToggleOvertype 3259
+#define wxStyledTextCtrl_Cancel 3260
+#define wxStyledTextCtrl_DeleteBack 3261
+#define wxStyledTextCtrl_Tab 3262
+#define wxStyledTextCtrl_BackTab 3263
+#define wxStyledTextCtrl_NewLine 3264
+#define wxStyledTextCtrl_FormFeed 3265
+#define wxStyledTextCtrl_VCHome 3266
+#define wxStyledTextCtrl_VCHomeExtend 3267
+#define wxStyledTextCtrl_ZoomIn 3268
+#define wxStyledTextCtrl_ZoomOut 3269
+#define wxStyledTextCtrl_DelWordLeft 3270
+#define wxStyledTextCtrl_DelWordRight 3271
+#define wxStyledTextCtrl_LineCut 3272
+#define wxStyledTextCtrl_LineDelete 3273
+#define wxStyledTextCtrl_LineTranspose 3274
+#define wxStyledTextCtrl_LineDuplicate 3275
+#define wxStyledTextCtrl_LowerCase 3276
+#define wxStyledTextCtrl_UpperCase 3277
+#define wxStyledTextCtrl_LineScrollDown 3278
+#define wxStyledTextCtrl_LineScrollUp 3279
+#define wxStyledTextCtrl_DeleteBackNotLine 3280
+#define wxStyledTextCtrl_HomeDisplay 3281
+#define wxStyledTextCtrl_HomeDisplayExtend 3282
+#define wxStyledTextCtrl_LineEndDisplay 3283
+#define wxStyledTextCtrl_LineEndDisplayExtend 3284
+#define wxStyledTextCtrl_HomeWrapExtend 3285
+#define wxStyledTextCtrl_LineEndWrap 3286
+#define wxStyledTextCtrl_LineEndWrapExtend 3287
+#define wxStyledTextCtrl_VCHomeWrap 3288
+#define wxStyledTextCtrl_VCHomeWrapExtend 3289
+#define wxStyledTextCtrl_LineCopy 3290
+#define wxStyledTextCtrl_MoveCaretInsideView 3291
+#define wxStyledTextCtrl_LineLength 3292
+#define wxStyledTextCtrl_BraceHighlight 3293
+#define wxStyledTextCtrl_BraceBadLight 3294
+#define wxStyledTextCtrl_BraceMatch 3295
+#define wxStyledTextCtrl_GetViewEOL 3296
+#define wxStyledTextCtrl_SetViewEOL 3297
+#define wxStyledTextCtrl_SetModEventMask 3298
+#define wxStyledTextCtrl_GetEdgeColumn 3299
+#define wxStyledTextCtrl_SetEdgeColumn 3300
+#define wxStyledTextCtrl_SetEdgeMode 3301
+#define wxStyledTextCtrl_GetEdgeMode 3302
+#define wxStyledTextCtrl_GetEdgeColour 3303
+#define wxStyledTextCtrl_SetEdgeColour 3304
+#define wxStyledTextCtrl_SearchAnchor 3305
+#define wxStyledTextCtrl_SearchNext 3306
+#define wxStyledTextCtrl_SearchPrev 3307
+#define wxStyledTextCtrl_LinesOnScreen 3308
+#define wxStyledTextCtrl_UsePopUp 3309
+#define wxStyledTextCtrl_SelectionIsRectangle 3310
+#define wxStyledTextCtrl_SetZoom 3311
+#define wxStyledTextCtrl_GetZoom 3312
+#define wxStyledTextCtrl_GetModEventMask 3313
+#define wxStyledTextCtrl_SetSTCFocus 3314
+#define wxStyledTextCtrl_GetSTCFocus 3315
+#define wxStyledTextCtrl_SetStatus 3316
+#define wxStyledTextCtrl_GetStatus 3317
+#define wxStyledTextCtrl_SetMouseDownCaptures 3318
+#define wxStyledTextCtrl_GetMouseDownCaptures 3319
+#define wxStyledTextCtrl_SetSTCCursor 3320
+#define wxStyledTextCtrl_GetSTCCursor 3321
+#define wxStyledTextCtrl_SetControlCharSymbol 3322
+#define wxStyledTextCtrl_GetControlCharSymbol 3323
+#define wxStyledTextCtrl_WordPartLeft 3324
+#define wxStyledTextCtrl_WordPartLeftExtend 3325
+#define wxStyledTextCtrl_WordPartRight 3326
+#define wxStyledTextCtrl_WordPartRightExtend 3327
+#define wxStyledTextCtrl_SetVisiblePolicy 3328
+#define wxStyledTextCtrl_DelLineLeft 3329
+#define wxStyledTextCtrl_DelLineRight 3330
+#define wxStyledTextCtrl_GetXOffset 3331
+#define wxStyledTextCtrl_ChooseCaretX 3332
+#define wxStyledTextCtrl_SetXCaretPolicy 3333
+#define wxStyledTextCtrl_SetYCaretPolicy 3334
+#define wxStyledTextCtrl_GetPrintWrapMode 3335
+#define wxStyledTextCtrl_SetHotspotActiveForeground 3336
+#define wxStyledTextCtrl_SetHotspotActiveBackground 3337
+#define wxStyledTextCtrl_SetHotspotActiveUnderline 3338
+#define wxStyledTextCtrl_SetHotspotSingleLine 3339
+#define wxStyledTextCtrl_ParaDownExtend 3340
+#define wxStyledTextCtrl_ParaUp 3341
+#define wxStyledTextCtrl_ParaUpExtend 3342
+#define wxStyledTextCtrl_PositionBefore 3343
+#define wxStyledTextCtrl_PositionAfter 3344
+#define wxStyledTextCtrl_CopyRange 3345
+#define wxStyledTextCtrl_CopyText 3346
+#define wxStyledTextCtrl_SetSelectionMode 3347
+#define wxStyledTextCtrl_GetSelectionMode 3348
+#define wxStyledTextCtrl_LineDownRectExtend 3349
+#define wxStyledTextCtrl_LineUpRectExtend 3350
+#define wxStyledTextCtrl_CharLeftRectExtend 3351
+#define wxStyledTextCtrl_CharRightRectExtend 3352
+#define wxStyledTextCtrl_HomeRectExtend 3353
+#define wxStyledTextCtrl_VCHomeRectExtend 3354
+#define wxStyledTextCtrl_LineEndRectExtend 3355
+#define wxStyledTextCtrl_PageUpRectExtend 3356
+#define wxStyledTextCtrl_PageDownRectExtend 3357
+#define wxStyledTextCtrl_StutteredPageUp 3358
+#define wxStyledTextCtrl_StutteredPageUpExtend 3359
+#define wxStyledTextCtrl_StutteredPageDown 3360
+#define wxStyledTextCtrl_StutteredPageDownExtend 3361
+#define wxStyledTextCtrl_WordLeftEnd 3362
+#define wxStyledTextCtrl_WordLeftEndExtend 3363
+#define wxStyledTextCtrl_WordRightEnd 3364
+#define wxStyledTextCtrl_WordRightEndExtend 3365
+#define wxStyledTextCtrl_SetWhitespaceChars 3366
+#define wxStyledTextCtrl_SetCharsDefault 3367
+#define wxStyledTextCtrl_AutoCompGetCurrent 3368
+#define wxStyledTextCtrl_Allocate 3369
+#define wxStyledTextCtrl_FindColumn 3370
+#define wxStyledTextCtrl_GetCaretSticky 3371
+#define wxStyledTextCtrl_SetCaretSticky 3372
+#define wxStyledTextCtrl_ToggleCaretSticky 3373
+#define wxStyledTextCtrl_SetPasteConvertEndings 3374
+#define wxStyledTextCtrl_GetPasteConvertEndings 3375
+#define wxStyledTextCtrl_SelectionDuplicate 3376
+#define wxStyledTextCtrl_SetCaretLineBackAlpha 3377
+#define wxStyledTextCtrl_GetCaretLineBackAlpha 3378
+#define wxStyledTextCtrl_StartRecord 3379
+#define wxStyledTextCtrl_StopRecord 3380
+#define wxStyledTextCtrl_SetLexer 3381
+#define wxStyledTextCtrl_GetLexer 3382
+#define wxStyledTextCtrl_Colourise 3383
+#define wxStyledTextCtrl_SetProperty 3384
+#define wxStyledTextCtrl_SetKeyWords 3385
+#define wxStyledTextCtrl_SetLexerLanguage 3386
+#define wxStyledTextCtrl_GetProperty 3387
+#define wxStyledTextCtrl_GetStyleBitsNeeded 3388
+#define wxStyledTextCtrl_GetCurrentLine 3389
+#define wxStyledTextCtrl_StyleSetSpec 3390
+#define wxStyledTextCtrl_StyleSetFont 3391
+#define wxStyledTextCtrl_StyleSetFontAttr 3392
+#define wxStyledTextCtrl_StyleSetCharacterSet 3393
+#define wxStyledTextCtrl_StyleSetFontEncoding 3394
+#define wxStyledTextCtrl_CmdKeyExecute 3395
+#define wxStyledTextCtrl_SetMargins 3396
+#define wxStyledTextCtrl_GetSelection 3397
+#define wxStyledTextCtrl_PointFromPosition 3398
+#define wxStyledTextCtrl_ScrollToLine 3399
+#define wxStyledTextCtrl_ScrollToColumn 3400
+#define wxStyledTextCtrl_SetVScrollBar 3401
+#define wxStyledTextCtrl_SetHScrollBar 3402
+#define wxStyledTextCtrl_GetLastKeydownProcessed 3403
+#define wxStyledTextCtrl_SetLastKeydownProcessed 3404
+#define wxStyledTextCtrl_SaveFile 3405
+#define wxStyledTextCtrl_LoadFile 3406
+#define wxStyledTextCtrl_DoDragOver 3407
+#define wxStyledTextCtrl_DoDropText 3408
+#define wxStyledTextCtrl_GetUseAntiAliasing 3409
+#define wxStyledTextCtrl_AddTextRaw 3410
+#define wxStyledTextCtrl_InsertTextRaw 3411
+#define wxStyledTextCtrl_GetCurLineRaw 3412
+#define wxStyledTextCtrl_GetLineRaw 3413
+#define wxStyledTextCtrl_GetSelectedTextRaw 3414
+#define wxStyledTextCtrl_GetTextRangeRaw 3415
+#define wxStyledTextCtrl_SetTextRaw 3416
+#define wxStyledTextCtrl_GetTextRaw 3417
+#define wxStyledTextCtrl_AppendTextRaw 3418
+#define wxArtProvider_GetBitmap 3419
+#define wxArtProvider_GetIcon 3420
+#define wxTreeEvent_GetKeyCode 3421
+#define wxTreeEvent_GetItem 3422
+#define wxTreeEvent_GetKeyEvent 3423
+#define wxTreeEvent_GetLabel 3424
+#define wxTreeEvent_GetOldItem 3425
+#define wxTreeEvent_GetPoint 3426
+#define wxTreeEvent_IsEditCancelled 3427
+#define wxTreeEvent_SetToolTip 3428
+#define wxNotebookEvent_GetOldSelection 3429
+#define wxNotebookEvent_GetSelection 3430
+#define wxNotebookEvent_SetOldSelection 3431
+#define wxNotebookEvent_SetSelection 3432
+#define wxFileDataObject_new 3433
+#define wxFileDataObject_AddFile 3434
+#define wxFileDataObject_GetFilenames 3435
+#define wxFileDataObject_destroy 3436
+#define wxTextDataObject_new 3437
+#define wxTextDataObject_GetTextLength 3438
+#define wxTextDataObject_GetText 3439
+#define wxTextDataObject_SetText 3440
+#define wxTextDataObject_destroy 3441
+#define wxBitmapDataObject_new_1_1 3442
+#define wxBitmapDataObject_new_1_0 3443
+#define wxBitmapDataObject_GetBitmap 3444
+#define wxBitmapDataObject_SetBitmap 3445
+#define wxBitmapDataObject_destroy 3446
+#define wxClipboard_new 3448
+#define wxClipboard_destruct 3449
+#define wxClipboard_AddData 3450
+#define wxClipboard_Clear 3451
+#define wxClipboard_Close 3452
+#define wxClipboard_Flush 3453
+#define wxClipboard_GetData 3454
+#define wxClipboard_IsOpened 3455
+#define wxClipboard_Open 3456
+#define wxClipboard_SetData 3457
+#define wxClipboard_UsePrimarySelection 3459
+#define wxClipboard_IsSupported 3460
+#define wxClipboard_Get 3461
+#define wxSpinEvent_GetPosition 3462
+#define wxSpinEvent_SetPosition 3463
+#define wxSplitterWindow_new_0 3464
+#define wxSplitterWindow_new_2 3465
+#define wxSplitterWindow_destruct 3466
+#define wxSplitterWindow_Create 3467
+#define wxSplitterWindow_GetMinimumPaneSize 3468
+#define wxSplitterWindow_GetSashGravity 3469
+#define wxSplitterWindow_GetSashPosition 3470
+#define wxSplitterWindow_GetSplitMode 3471
+#define wxSplitterWindow_GetWindow1 3472
+#define wxSplitterWindow_GetWindow2 3473
+#define wxSplitterWindow_Initialize 3474
+#define wxSplitterWindow_IsSplit 3475
+#define wxSplitterWindow_ReplaceWindow 3476
+#define wxSplitterWindow_SetSashGravity 3477
+#define wxSplitterWindow_SetSashPosition 3478
+#define wxSplitterWindow_SetSashSize 3479
+#define wxSplitterWindow_SetMinimumPaneSize 3480
+#define wxSplitterWindow_SetSplitMode 3481
+#define wxSplitterWindow_SplitHorizontally 3482
+#define wxSplitterWindow_SplitVertically 3483
+#define wxSplitterWindow_Unsplit 3484
+#define wxSplitterWindow_UpdateSize 3485
+#define wxSplitterEvent_GetSashPosition 3486
+#define wxSplitterEvent_GetX 3487
+#define wxSplitterEvent_GetY 3488
+#define wxSplitterEvent_GetWindowBeingRemoved 3489
+#define wxSplitterEvent_SetSashPosition 3490
+#define wxHtmlWindow_new_0 3491
+#define wxHtmlWindow_new_2 3492
+#define wxHtmlWindow_AppendToPage 3493
+#define wxHtmlWindow_GetOpenedAnchor 3494
+#define wxHtmlWindow_GetOpenedPage 3495
+#define wxHtmlWindow_GetOpenedPageTitle 3496
+#define wxHtmlWindow_GetRelatedFrame 3497
+#define wxHtmlWindow_HistoryBack 3498
+#define wxHtmlWindow_HistoryCanBack 3499
+#define wxHtmlWindow_HistoryCanForward 3500
+#define wxHtmlWindow_HistoryClear 3501
+#define wxHtmlWindow_HistoryForward 3502
+#define wxHtmlWindow_LoadFile 3503
+#define wxHtmlWindow_LoadPage 3504
+#define wxHtmlWindow_SelectAll 3505
+#define wxHtmlWindow_SelectionToText 3506
+#define wxHtmlWindow_SelectLine 3507
+#define wxHtmlWindow_SelectWord 3508
+#define wxHtmlWindow_SetBorders 3509
+#define wxHtmlWindow_SetFonts 3510
+#define wxHtmlWindow_SetPage 3511
+#define wxHtmlWindow_SetRelatedFrame 3512
+#define wxHtmlWindow_SetRelatedStatusBar 3513
+#define wxHtmlWindow_ToText 3514
+#define wxHtmlWindow_destroy 3515
+#define wxHtmlLinkEvent_GetLinkInfo 3516
+#define wxSystemSettings_GetColour 3517
+#define wxSystemSettings_GetFont 3518
+#define wxSystemSettings_GetMetric 3519
+#define wxSystemSettings_GetScreenType 3520
+#define wxSystemOptions_GetOption 3521
+#define wxSystemOptions_GetOptionInt 3522
+#define wxSystemOptions_HasOption 3523
+#define wxSystemOptions_IsFalse 3524
+#define wxSystemOptions_SetOption_2_1 3525
+#define wxSystemOptions_SetOption_2_0 3526
+#define wxAuiNotebookEvent_SetSelection 3527
+#define wxAuiNotebookEvent_GetSelection 3528
+#define wxAuiNotebookEvent_SetOldSelection 3529
+#define wxAuiNotebookEvent_GetOldSelection 3530
+#define wxAuiNotebookEvent_SetDragSource 3531
+#define wxAuiNotebookEvent_GetDragSource 3532
+#define wxAuiManagerEvent_SetManager 3533
+#define wxAuiManagerEvent_GetManager 3534
+#define wxAuiManagerEvent_SetPane 3535
+#define wxAuiManagerEvent_GetPane 3536
+#define wxAuiManagerEvent_SetButton 3537
+#define wxAuiManagerEvent_GetButton 3538
+#define wxAuiManagerEvent_SetDC 3539
+#define wxAuiManagerEvent_GetDC 3540
+#define wxAuiManagerEvent_Veto 3541
+#define wxAuiManagerEvent_GetVeto 3542
+#define wxAuiManagerEvent_SetCanVeto 3543
+#define wxAuiManagerEvent_CanVeto 3544
+#define wxLogNull_new 3545
+#define wxLogNull_destroy 3546
+#define wxTaskBarIcon_new 3547
+#define wxTaskBarIcon_destruct 3548
+#define wxTaskBarIcon_PopupMenu 3549
+#define wxTaskBarIcon_RemoveIcon 3550
+#define wxTaskBarIcon_SetIcon 3551
+#define wxLocale_new_0 3552
+#define wxLocale_new_2 3554
+#define wxLocale_destruct 3555
+#define wxLocale_Init 3557
+#define wxLocale_AddCatalog_1 3558
+#define wxLocale_AddCatalog_3 3559
+#define wxLocale_AddCatalogLookupPathPrefix 3560
+#define wxLocale_GetCanonicalName 3561
+#define wxLocale_GetLanguage 3562
+#define wxLocale_GetLanguageName 3563
+#define wxLocale_GetLocale 3564
+#define wxLocale_GetName 3565
+#define wxLocale_GetString_2 3566
+#define wxLocale_GetString_4 3567
+#define wxLocale_GetHeaderValue 3568
+#define wxLocale_GetSysName 3569
+#define wxLocale_GetSystemEncoding 3570
+#define wxLocale_GetSystemEncodingName 3571
+#define wxLocale_GetSystemLanguage 3572
+#define wxLocale_IsLoaded 3573
+#define wxLocale_IsOk 3574
+#define wxActivateEvent_GetActive 3575
+#define wxPopupWindow_new_2 3577
+#define wxPopupWindow_new_0 3578
+#define wxPopupWindow_destruct 3580
+#define wxPopupWindow_Create 3581
+#define wxPopupWindow_Position 3582
+#define wxPopupTransientWindow_new_0 3583
+#define wxPopupTransientWindow_new_2 3584
+#define wxPopupTransientWindow_destruct 3585
+#define wxPopupTransientWindow_Popup 3586
+#define wxPopupTransientWindow_Dismiss 3587
+#define wxOverlay_new 3588
+#define wxOverlay_destruct 3589
+#define wxOverlay_Reset 3590
+#define wxDCOverlay_new_6 3591
+#define wxDCOverlay_new_2 3592
+#define wxDCOverlay_destruct 3593
+#define wxDCOverlay_Clear 3594
diff --git a/lib/wx/c_src/wxe_callback_impl.cpp b/lib/wx/c_src/wxe_callback_impl.cpp
index eae8e99a95..77359e9256 100644
--- a/lib/wx/c_src/wxe_callback_impl.cpp
+++ b/lib/wx/c_src/wxe_callback_impl.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_callback_impl.h b/lib/wx/c_src/wxe_callback_impl.h
index 829a60af0d..bebe8ad7da 100644
--- a/lib/wx/c_src/wxe_callback_impl.h
+++ b/lib/wx/c_src/wxe_callback_impl.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2014. All Rights Reserved.
+ * Copyright Ericsson AB 2014-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_driver.c b/lib/wx/c_src/wxe_driver.c
index 6f027ea25b..5da71818e5 100644
--- a/lib/wx/c_src/wxe_driver.c
+++ b/lib/wx/c_src/wxe_driver.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_driver.h b/lib/wx/c_src/wxe_driver.h
index 925078962e..f9bca049c8 100644
--- a/lib/wx/c_src/wxe_driver.h
+++ b/lib/wx/c_src/wxe_driver.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_events.h b/lib/wx/c_src/wxe_events.h
index 0908541812..0301bc5d7b 100644
--- a/lib/wx/c_src/wxe_events.h
+++ b/lib/wx/c_src/wxe_events.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_gl.cpp b/lib/wx/c_src/wxe_gl.cpp
index 7f2e767a6b..f27ac70dc2 100644
--- a/lib/wx/c_src/wxe_gl.cpp
+++ b/lib/wx/c_src/wxe_gl.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_gl.h b/lib/wx/c_src/wxe_gl.h
index 45a2a1ac23..38a1087723 100644
--- a/lib/wx/c_src/wxe_gl.h
+++ b/lib/wx/c_src/wxe_gl.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_helpers.cpp b/lib/wx/c_src/wxe_helpers.cpp
index 1696b8bd50..d1f607d2af 100644
--- a/lib/wx/c_src/wxe_helpers.cpp
+++ b/lib/wx/c_src/wxe_helpers.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2014. All Rights Reserved.
+ * Copyright Ericsson AB 2014-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -47,8 +47,8 @@ void wxeCommand::Delete()
if(len > 64)
driver_free(buffer);
buffer = NULL;
- op = -1;
}
+ op = -2;
}
/* ****************************************************************************
@@ -84,7 +84,7 @@ wxeCommand * wxeFifo::Get()
pos = m_first++;
m_n--;
m_first %= m_max;
- } while(m_q[pos].op == -1);
+ } while(m_q[pos].op < 0);
return &m_q[pos];
}
@@ -96,7 +96,7 @@ wxeCommand * wxeFifo::Peek(unsigned int *i)
return NULL;
pos = (m_first+*i) % m_max;
(*i)++;
- } while(m_q[pos].op == -1);
+ } while(m_q[pos].op < 0);
return &m_q[pos];
}
@@ -213,7 +213,7 @@ void wxeFifo::Realloc()
// Strip end of queue if ops are already taken care of, avoids reallocs
void wxeFifo::Strip()
{
- while((m_n > 0) && (m_q[(m_first + m_n - 1)%m_max].op == -1)) {
+ while((m_n > 0) && (m_q[(m_first + m_n - 1)%m_max].op < -1)) {
m_n--;
}
}
@@ -226,7 +226,7 @@ unsigned int wxeFifo::Cleanup(unsigned int def)
// Realloced we need to start from the beginning
return 0;
} else {
- return def;
+ return def < cb_start? def : cb_start;
}
}
diff --git a/lib/wx/c_src/wxe_helpers.h b/lib/wx/c_src/wxe_helpers.h
index ff949e332b..70ffccdc13 100644
--- a/lib/wx/c_src/wxe_helpers.h
+++ b/lib/wx/c_src/wxe_helpers.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2014. All Rights Reserved.
+ * Copyright Ericsson AB 2014-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@ class wxeCommand
wxeCommand();
virtual ~wxeCommand(); // Use Delete()
- wxeCommand * Save() { return this; };
+ wxeCommand * Save(int Op) { op = Op; return this; };
void Delete();
ErlDrvTermData caller;
diff --git a/lib/wx/c_src/wxe_impl.cpp b/lib/wx/c_src/wxe_impl.cpp
index f81d0bbbd9..0d2da5d4a7 100644
--- a/lib/wx/c_src/wxe_impl.cpp
+++ b/lib/wx/c_src/wxe_impl.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -238,9 +238,10 @@ void WxeApp::dispatch_cmds()
if(wxe_status != WXE_INITIATED)
return;
recurse_level++;
- // fprintf(stderr, "\r\ndispatch_normal %d\r\n", level);fflush(stderr);
+ // fprintf(stderr, "\r\ndispatch_normal %d\r\n", recurse_level);fflush(stderr);
+ wxe_queue->cb_start = 0;
dispatch(wxe_queue);
- // fprintf(stderr, "\r\ndispatch_done \r\n");fflush(stderr);
+ // fprintf(stderr, "\r\ndispatch_done %d\r\n", recurse_level);fflush(stderr);
recurse_level--;
// Cleanup old memenv's and deleted objects
@@ -489,7 +490,7 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd)
if(it != ptr2ref.end()) {
wxeRefData *refd = it->second;
if(refd->alloc_in_erl) {
- if((refd->type == 4) && ((wxObject *)ptr)->IsKindOf(CLASSINFO(wxBufferedDC))) {
+ if((refd->type == 8) && ((wxObject *)ptr)->IsKindOf(CLASSINFO(wxBufferedDC))) {
((wxBufferedDC *)ptr)->m_dc = NULL; // Workaround
}
wxString msg;
@@ -499,7 +500,7 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd)
msg.Printf(wxT("Memory leak: {wx_ref, %d, %s}"),
refd->ref, cinfo->GetClassName());
send_msg("error", &msg);
- } else {
+ } else if(refd->type != 4) {
cleanup_ref = delete_object(ptr, refd);
}
if(cleanup_ref) {
@@ -561,7 +562,12 @@ int WxeApp::newPtr(void * ptr, int type, wxeMemEnv *memenv) {
if(wxe_debug) {
wxString msg;
- msg.Printf(wxT("Creating {wx_ref, %d, unknown} at %p "), ref, ptr);
+ const wxChar *class_info = wxT("unknown");
+ if(type < 10) {
+ wxClassInfo *cinfo = ((wxObject *)ptr)->GetClassInfo();
+ class_info = cinfo->GetClassName();
+ }
+ msg.Printf(wxT("Creating {wx_ref, %d, %s} at %p "), ref, class_info, ptr);
send_msg("debug", &msg);
}
@@ -613,12 +619,6 @@ void WxeApp::clearPtr(void * ptr) {
refd->memenv->ref2ptr[ref] = NULL;
free.Append(ref);
- if(wxe_debug) {
- wxString msg;
- msg.Printf(wxT("Deleting {wx_ref, %d, unknown} at %p "), ref, ptr);
- send_msg("debug", &msg);
- }
-
if(((int) refd->pid) != -1) {
// Send terminate pid to owner
wxeReturn rt = wxeReturn(WXE_DRV_PORT,refd->pid, false);
diff --git a/lib/wx/c_src/wxe_impl.h b/lib/wx/c_src/wxe_impl.h
index fd25296c73..57dac997ab 100644
--- a/lib/wx/c_src/wxe_impl.h
+++ b/lib/wx/c_src/wxe_impl.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_main.cpp b/lib/wx/c_src/wxe_main.cpp
index 1d732554ea..6fcde42eb5 100644
--- a/lib/wx/c_src/wxe_main.cpp
+++ b/lib/wx/c_src/wxe_main.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2014. All Rights Reserved.
+ * Copyright Ericsson AB 2014-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -125,8 +125,8 @@ void *wxe_main_loop(void *vpdl)
{
int result;
int argc = 1;
- char * temp = (char *) "Erlang";
- char * argv[] = {temp,NULL};
+ const wxChar temp[10] = L"Erlang";
+ wxChar * argv[] = {(wxChar *)temp, NULL};
ErlDrvPDL pdl = (ErlDrvPDL) vpdl;
driver_pdl_inc_refc(pdl);
diff --git a/lib/wx/c_src/wxe_memory.h b/lib/wx/c_src/wxe_memory.h
index 2dae424cf8..66c83e40c3 100644
--- a/lib/wx/c_src/wxe_memory.h
+++ b/lib/wx/c_src/wxe_memory.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2014. All Rights Reserved.
+ * Copyright Ericsson AB 2014-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -48,8 +48,9 @@ class wxeRefData {
int type;
// 0 = wxWindow subclasses, 1 = wxObject subclasses
// 2 = wxDialog subclasses, 3 = allocated wxObjects but not returned from new
- // 4 = wxObjects that should always be deleted directly (wxDC derivates)
- // > 4 classes which lack virtual destr, or are supposed to be allocated on
+ // 4 = wxGraphicsObjects or it's subclasses that can no be overloaded
+ // 8 = wxObjects that should always be deleted directly (wxDC derivates)
+ // > 10 classes which lack virtual destr, or are supposed to be allocated on
// the stack
bool alloc_in_erl;
wxeMemEnv *memenv;
diff --git a/lib/wx/c_src/wxe_ps_init.c b/lib/wx/c_src/wxe_ps_init.c
index 7a5b2fabc0..e6b677d469 100644
--- a/lib/wx/c_src/wxe_ps_init.c
+++ b/lib/wx/c_src/wxe_ps_init.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_return.cpp b/lib/wx/c_src/wxe_return.cpp
index 2dd7a8478b..0a034be489 100644
--- a/lib/wx/c_src/wxe_return.cpp
+++ b/lib/wx/c_src/wxe_return.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/c_src/wxe_return.h b/lib/wx/c_src/wxe_return.h
index 6c38ae32e1..7c712ea424 100644
--- a/lib/wx/c_src/wxe_return.h
+++ b/lib/wx/c_src/wxe_return.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2016. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/lib/wx/config.mk.in b/lib/wx/config.mk.in
index 0e98545240..2fa09209d2 100644
--- a/lib/wx/config.mk.in
+++ b/lib/wx/config.mk.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/configure.in b/lib/wx/configure.in
index bf27b72aa7..dbe237cd74 100644
--- a/lib/wx/configure.in
+++ b/lib/wx/configure.in
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. -*-m4-*-
dnl %CopyrightBegin%
dnl
-dnl Copyright Ericsson AB 2008-2013. All Rights Reserved.
+dnl Copyright Ericsson AB 2008-2016. All Rights Reserved.
dnl
dnl Licensed under the Apache License, Version 2.0 (the "License");
dnl you may not use this file except in compliance with the License.
diff --git a/lib/wx/doc/specs/.gitignore b/lib/wx/doc/specs/.gitignore
new file mode 100644
index 0000000000..322eebcb06
--- /dev/null
+++ b/lib/wx/doc/specs/.gitignore
@@ -0,0 +1 @@
+specs_*.xml
diff --git a/lib/wx/doc/src/Makefile b/lib/wx/doc/src/Makefile
index a0684d112d..23890f47f0 100644
--- a/lib/wx/doc/src/Makefile
+++ b/lib/wx/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2012. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -63,10 +63,15 @@ HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
+SPECS_FILES = $(XML_REF3_FILES:%.xml=$(SPECDIR)/specs_%.xml)
+
+TOP_SPECS_FILE = specs.xml
+
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
XML_FLAGS +=
+SPECS_FLAGS = -I../../include -I../../src
DVIPS_FLAGS +=
# ----------------------------------------------------
@@ -111,6 +116,7 @@ clean clean_docs:
rm -rf $(HTMLDIR)/*
rm -f $(MAN3DIR)/*
rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
+ rm -f $(SPECDIR)/*
rm -f errs core *~ ../html/edoc-info
rm -f $(XML_REF3_FILES) $(XML_CHAPTER_FILES) *.html
diff --git a/lib/wx/doc/src/book.xml b/lib/wx/doc/src/book.xml
index d438e08749..555c2a9625 100644
--- a/lib/wx/doc/src/book.xml
+++ b/lib/wx/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2009</year><year>2013</year>
+ <year>2009</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/wx/doc/src/notes.xml b/lib/wx/doc/src/notes.xml
index f895540b25..4f0e166924 100644
--- a/lib/wx/doc/src/notes.xml
+++ b/lib/wx/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2009</year><year>2013</year>
+ <year>2009</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,43 @@
<p>This document describes the changes made to the wxErlang
application.</p>
+<section><title>Wx 1.7</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed bugs which could cause called functions to be
+ invoked twice or not at all when callbacks where invoked
+ at the same time.</p>
+ <p>
+ Own Id: OTP-13491</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Changed atom 'boolean' fields in #wxMouseState{} to
+ 'boolean()'.</p>
+ <p>
+ Moved out arguments in wxListCtrl:hitTest to result.</p>
+ <p>
+ Removed no-op functions in wxGauge that have been removed
+ from wxWidgets-3.1.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13553</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Wx 1.6.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/wx/doc/src/part.xml b/lib/wx/doc/src/part.xml
index 7823c5312b..cab7dfbc68 100644
--- a/lib/wx/doc/src/part.xml
+++ b/lib/wx/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2009</year><year>2013</year>
+ <year>2009</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/wx/doc/src/part_notes.xml b/lib/wx/doc/src/part_notes.xml
index d3bdacb432..5a5a6494c1 100644
--- a/lib/wx/doc/src/part_notes.xml
+++ b/lib/wx/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2009</year><year>2013</year>
+ <year>2009</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/wx/doc/src/ref_man.xml.src b/lib/wx/doc/src/ref_man.xml.src
index 2c843fa593..14d64f5b35 100644
--- a/lib/wx/doc/src/ref_man.xml.src
+++ b/lib/wx/doc/src/ref_man.xml.src
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2009</year><year>2013</year>
+ <year>2009</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/wx/doc/src/specs.xml b/lib/wx/doc/src/specs.xml
new file mode 100644
index 0000000000..2e19baafc4
--- /dev/null
+++ b/lib/wx/doc/src/specs.xml
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<specs xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="../specs/specs_wx.xml"/>
+ <xi:include href="../specs/specs_wx_object.xml"/>
+ <xi:include href="../specs/specs_wxAcceleratorEntry.xml"/>
+ <xi:include href="../specs/specs_wxAcceleratorTable.xml"/>
+ <xi:include href="../specs/specs_wxActivateEvent.xml"/>
+ <xi:include href="../specs/specs_wxArtProvider.xml"/>
+ <xi:include href="../specs/specs_wxAuiDockArt.xml"/>
+ <xi:include href="../specs/specs_wxAuiManager.xml"/>
+ <xi:include href="../specs/specs_wxAuiManagerEvent.xml"/>
+ <xi:include href="../specs/specs_wxAuiNotebook.xml"/>
+ <xi:include href="../specs/specs_wxAuiNotebookEvent.xml"/>
+ <xi:include href="../specs/specs_wxAuiPaneInfo.xml"/>
+ <xi:include href="../specs/specs_wxAuiSimpleTabArt.xml"/>
+ <xi:include href="../specs/specs_wxAuiTabArt.xml"/>
+ <xi:include href="../specs/specs_wxBitmapButton.xml"/>
+ <xi:include href="../specs/specs_wxBitmapDataObject.xml"/>
+ <xi:include href="../specs/specs_wxBitmap.xml"/>
+ <xi:include href="../specs/specs_wxBoxSizer.xml"/>
+ <xi:include href="../specs/specs_wxBrush.xml"/>
+ <xi:include href="../specs/specs_wxBufferedDC.xml"/>
+ <xi:include href="../specs/specs_wxBufferedPaintDC.xml"/>
+ <xi:include href="../specs/specs_wxButton.xml"/>
+ <xi:include href="../specs/specs_wxCalendarCtrl.xml"/>
+ <xi:include href="../specs/specs_wxCalendarDateAttr.xml"/>
+ <xi:include href="../specs/specs_wxCalendarEvent.xml"/>
+ <xi:include href="../specs/specs_wxCaret.xml"/>
+ <xi:include href="../specs/specs_wxCheckBox.xml"/>
+ <xi:include href="../specs/specs_wxCheckListBox.xml"/>
+ <xi:include href="../specs/specs_wxChildFocusEvent.xml"/>
+ <xi:include href="../specs/specs_wxChoicebook.xml"/>
+ <xi:include href="../specs/specs_wxChoice.xml"/>
+ <xi:include href="../specs/specs_wxClientDC.xml"/>
+ <xi:include href="../specs/specs_wxClipboard.xml"/>
+ <xi:include href="../specs/specs_wxClipboardTextEvent.xml"/>
+ <xi:include href="../specs/specs_wxCloseEvent.xml"/>
+ <xi:include href="../specs/specs_wxColourData.xml"/>
+ <xi:include href="../specs/specs_wxColourDialog.xml"/>
+ <xi:include href="../specs/specs_wxColourPickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxColourPickerEvent.xml"/>
+ <xi:include href="../specs/specs_wxComboBox.xml"/>
+ <xi:include href="../specs/specs_wxCommandEvent.xml"/>
+ <xi:include href="../specs/specs_wxContextMenuEvent.xml"/>
+ <xi:include href="../specs/specs_wxControl.xml"/>
+ <xi:include href="../specs/specs_wxControlWithItems.xml"/>
+ <xi:include href="../specs/specs_wxCursor.xml"/>
+ <xi:include href="../specs/specs_wxDataObject.xml"/>
+ <xi:include href="../specs/specs_wxDateEvent.xml"/>
+ <xi:include href="../specs/specs_wxDatePickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxDC.xml"/>
+ <xi:include href="../specs/specs_wxDCOverlay.xml"/>
+ <xi:include href="../specs/specs_wxDialog.xml"/>
+ <xi:include href="../specs/specs_wxDirDialog.xml"/>
+ <xi:include href="../specs/specs_wxDirPickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxDisplayChangedEvent.xml"/>
+ <xi:include href="../specs/specs_wxEraseEvent.xml"/>
+ <xi:include href="../specs/specs_wxEvent.xml"/>
+ <xi:include href="../specs/specs_wxEvtHandler.xml"/>
+ <xi:include href="../specs/specs_wxFileDataObject.xml"/>
+ <xi:include href="../specs/specs_wxFileDialog.xml"/>
+ <xi:include href="../specs/specs_wxFileDirPickerEvent.xml"/>
+ <xi:include href="../specs/specs_wxFilePickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxFindReplaceData.xml"/>
+ <xi:include href="../specs/specs_wxFindReplaceDialog.xml"/>
+ <xi:include href="../specs/specs_wxFlexGridSizer.xml"/>
+ <xi:include href="../specs/specs_wxFocusEvent.xml"/>
+ <xi:include href="../specs/specs_wxFontData.xml"/>
+ <xi:include href="../specs/specs_wxFontDialog.xml"/>
+ <xi:include href="../specs/specs_wxFont.xml"/>
+ <xi:include href="../specs/specs_wxFontPickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxFontPickerEvent.xml"/>
+ <xi:include href="../specs/specs_wxFrame.xml"/>
+ <xi:include href="../specs/specs_wxGauge.xml"/>
+ <xi:include href="../specs/specs_wxGBSizerItem.xml"/>
+ <xi:include href="../specs/specs_wxGenericDirCtrl.xml"/>
+ <xi:include href="../specs/specs_wxGLCanvas.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsBrush.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsContext.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsFont.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsMatrix.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsObject.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsPath.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsPen.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridBagSizer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellAttr.xml"/>
+ <xi:include href="../specs/specs_wxGridCellBoolEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellBoolRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellChoiceEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellFloatEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellFloatRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellNumberEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellNumberRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellStringRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellTextEditor.xml"/>
+ <xi:include href="../specs/specs_wxGrid.xml"/>
+ <xi:include href="../specs/specs_wxGridEvent.xml"/>
+ <xi:include href="../specs/specs_wxGridSizer.xml"/>
+ <xi:include href="../specs/specs_wxHelpEvent.xml"/>
+ <xi:include href="../specs/specs_wxHtmlEasyPrinting.xml"/>
+ <xi:include href="../specs/specs_wxHtmlLinkEvent.xml"/>
+ <xi:include href="../specs/specs_wxHtmlWindow.xml"/>
+ <xi:include href="../specs/specs_wxIconBundle.xml"/>
+ <xi:include href="../specs/specs_wxIcon.xml"/>
+ <xi:include href="../specs/specs_wxIconizeEvent.xml"/>
+ <xi:include href="../specs/specs_wxIdleEvent.xml"/>
+ <xi:include href="../specs/specs_wxImage.xml"/>
+ <xi:include href="../specs/specs_wxImageList.xml"/>
+ <xi:include href="../specs/specs_wxInitDialogEvent.xml"/>
+ <xi:include href="../specs/specs_wxJoystickEvent.xml"/>
+ <xi:include href="../specs/specs_wxKeyEvent.xml"/>
+ <xi:include href="../specs/specs_wxLayoutAlgorithm.xml"/>
+ <xi:include href="../specs/specs_wxListbook.xml"/>
+ <xi:include href="../specs/specs_wxListBox.xml"/>
+ <xi:include href="../specs/specs_wxListCtrl.xml"/>
+ <xi:include href="../specs/specs_wxListEvent.xml"/>
+ <xi:include href="../specs/specs_wxListItemAttr.xml"/>
+ <xi:include href="../specs/specs_wxListItem.xml"/>
+ <xi:include href="../specs/specs_wxListView.xml"/>
+ <xi:include href="../specs/specs_wxLocale.xml"/>
+ <xi:include href="../specs/specs_wxLogNull.xml"/>
+ <xi:include href="../specs/specs_wxMask.xml"/>
+ <xi:include href="../specs/specs_wxMaximizeEvent.xml"/>
+ <xi:include href="../specs/specs_wxMDIChildFrame.xml"/>
+ <xi:include href="../specs/specs_wxMDIClientWindow.xml"/>
+ <xi:include href="../specs/specs_wxMDIParentFrame.xml"/>
+ <xi:include href="../specs/specs_wxMemoryDC.xml"/>
+ <xi:include href="../specs/specs_wxMenuBar.xml"/>
+ <xi:include href="../specs/specs_wxMenu.xml"/>
+ <xi:include href="../specs/specs_wxMenuEvent.xml"/>
+ <xi:include href="../specs/specs_wxMenuItem.xml"/>
+ <xi:include href="../specs/specs_wxMessageDialog.xml"/>
+ <xi:include href="../specs/specs_wxMiniFrame.xml"/>
+ <xi:include href="../specs/specs_wxMirrorDC.xml"/>
+ <xi:include href="../specs/specs_wxMouseCaptureChangedEvent.xml"/>
+ <xi:include href="../specs/specs_wxMouseCaptureLostEvent.xml"/>
+ <xi:include href="../specs/specs_wxMouseEvent.xml"/>
+ <xi:include href="../specs/specs_wxMoveEvent.xml"/>
+ <xi:include href="../specs/specs_wxMultiChoiceDialog.xml"/>
+ <xi:include href="../specs/specs_wxNavigationKeyEvent.xml"/>
+ <xi:include href="../specs/specs_wxNotebook.xml"/>
+ <xi:include href="../specs/specs_wxNotebookEvent.xml"/>
+ <xi:include href="../specs/specs_wxNotifyEvent.xml"/>
+ <xi:include href="../specs/specs_wxOverlay.xml"/>
+ <xi:include href="../specs/specs_wxPageSetupDialogData.xml"/>
+ <xi:include href="../specs/specs_wxPageSetupDialog.xml"/>
+ <xi:include href="../specs/specs_wxPaintDC.xml"/>
+ <xi:include href="../specs/specs_wxPaintEvent.xml"/>
+ <xi:include href="../specs/specs_wxPaletteChangedEvent.xml"/>
+ <xi:include href="../specs/specs_wxPalette.xml"/>
+ <xi:include href="../specs/specs_wxPanel.xml"/>
+ <xi:include href="../specs/specs_wxPasswordEntryDialog.xml"/>
+ <xi:include href="../specs/specs_wxPen.xml"/>
+ <xi:include href="../specs/specs_wxPickerBase.xml"/>
+ <xi:include href="../specs/specs_wxPopupTransientWindow.xml"/>
+ <xi:include href="../specs/specs_wxPopupWindow.xml"/>
+ <xi:include href="../specs/specs_wxPostScriptDC.xml"/>
+ <xi:include href="../specs/specs_wxPreviewCanvas.xml"/>
+ <xi:include href="../specs/specs_wxPreviewControlBar.xml"/>
+ <xi:include href="../specs/specs_wxPreviewFrame.xml"/>
+ <xi:include href="../specs/specs_wxPrintData.xml"/>
+ <xi:include href="../specs/specs_wxPrintDialogData.xml"/>
+ <xi:include href="../specs/specs_wxPrintDialog.xml"/>
+ <xi:include href="../specs/specs_wxPrinter.xml"/>
+ <xi:include href="../specs/specs_wxPrintout.xml"/>
+ <xi:include href="../specs/specs_wxPrintPreview.xml"/>
+ <xi:include href="../specs/specs_wxProgressDialog.xml"/>
+ <xi:include href="../specs/specs_wxQueryNewPaletteEvent.xml"/>
+ <xi:include href="../specs/specs_wxRadioBox.xml"/>
+ <xi:include href="../specs/specs_wxRadioButton.xml"/>
+ <xi:include href="../specs/specs_wxRegion.xml"/>
+ <xi:include href="../specs/specs_wxSashEvent.xml"/>
+ <xi:include href="../specs/specs_wxSashLayoutWindow.xml"/>
+ <xi:include href="../specs/specs_wxSashWindow.xml"/>
+ <xi:include href="../specs/specs_wxScreenDC.xml"/>
+ <xi:include href="../specs/specs_wxScrollBar.xml"/>
+ <xi:include href="../specs/specs_wxScrolledWindow.xml"/>
+ <xi:include href="../specs/specs_wxScrollEvent.xml"/>
+ <xi:include href="../specs/specs_wxScrollWinEvent.xml"/>
+ <xi:include href="../specs/specs_wxSetCursorEvent.xml"/>
+ <xi:include href="../specs/specs_wxShowEvent.xml"/>
+ <xi:include href="../specs/specs_wxSingleChoiceDialog.xml"/>
+ <xi:include href="../specs/specs_wxSizeEvent.xml"/>
+ <xi:include href="../specs/specs_wxSizer.xml"/>
+ <xi:include href="../specs/specs_wxSizerFlags.xml"/>
+ <xi:include href="../specs/specs_wxSizerItem.xml"/>
+ <xi:include href="../specs/specs_wxSlider.xml"/>
+ <xi:include href="../specs/specs_wxSpinButton.xml"/>
+ <xi:include href="../specs/specs_wxSpinCtrl.xml"/>
+ <xi:include href="../specs/specs_wxSpinEvent.xml"/>
+ <xi:include href="../specs/specs_wxSplashScreen.xml"/>
+ <xi:include href="../specs/specs_wxSplitterEvent.xml"/>
+ <xi:include href="../specs/specs_wxSplitterWindow.xml"/>
+ <xi:include href="../specs/specs_wxStaticBitmap.xml"/>
+ <xi:include href="../specs/specs_wxStaticBox.xml"/>
+ <xi:include href="../specs/specs_wxStaticBoxSizer.xml"/>
+ <xi:include href="../specs/specs_wxStaticLine.xml"/>
+ <xi:include href="../specs/specs_wxStaticText.xml"/>
+ <xi:include href="../specs/specs_wxStatusBar.xml"/>
+ <xi:include href="../specs/specs_wxStdDialogButtonSizer.xml"/>
+ <xi:include href="../specs/specs_wxStyledTextCtrl.xml"/>
+ <xi:include href="../specs/specs_wxStyledTextEvent.xml"/>
+ <xi:include href="../specs/specs_wxSysColourChangedEvent.xml"/>
+ <xi:include href="../specs/specs_wxSystemOptions.xml"/>
+ <xi:include href="../specs/specs_wxSystemSettings.xml"/>
+ <xi:include href="../specs/specs_wxTaskBarIcon.xml"/>
+ <xi:include href="../specs/specs_wxTaskBarIconEvent.xml"/>
+ <xi:include href="../specs/specs_wxTextAttr.xml"/>
+ <xi:include href="../specs/specs_wxTextCtrl.xml"/>
+ <xi:include href="../specs/specs_wxTextDataObject.xml"/>
+ <xi:include href="../specs/specs_wxTextEntryDialog.xml"/>
+ <xi:include href="../specs/specs_wxToggleButton.xml"/>
+ <xi:include href="../specs/specs_wxToolBar.xml"/>
+ <xi:include href="../specs/specs_wxToolbook.xml"/>
+ <xi:include href="../specs/specs_wxToolTip.xml"/>
+ <xi:include href="../specs/specs_wxTopLevelWindow.xml"/>
+ <xi:include href="../specs/specs_wxTreebook.xml"/>
+ <xi:include href="../specs/specs_wxTreeCtrl.xml"/>
+ <xi:include href="../specs/specs_wxTreeEvent.xml"/>
+ <xi:include href="../specs/specs_wxUpdateUIEvent.xml"/>
+ <xi:include href="../specs/specs_wxWindowCreateEvent.xml"/>
+ <xi:include href="../specs/specs_wxWindowDC.xml"/>
+ <xi:include href="../specs/specs_wxWindowDestroyEvent.xml"/>
+ <xi:include href="../specs/specs_wxWindow.xml"/>
+ <xi:include href="../specs/specs_wxXmlResource.xml"/>
+ <xi:include href="../specs/specs_wx_misc.xml"/>
+ <xi:include href="../specs/specs_glu.xml"/>
+ <xi:include href="../specs/specs_gl.xml"/>
+</specs>
diff --git a/lib/wx/examples/Makefile b/lib/wx/examples/Makefile
index 997c3be6ec..fa4576928a 100644
--- a/lib/wx/examples/Makefile
+++ b/lib/wx/examples/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/Makefile b/lib/wx/examples/demo/Makefile
index cdd2e1385b..7b5de2253b 100644
--- a/lib/wx/examples/demo/Makefile
+++ b/lib/wx/examples/demo/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/demo.erl b/lib/wx/examples/demo/demo.erl
index ed826dd3f0..99c28b3177 100644
--- a/lib/wx/examples/demo/demo.erl
+++ b/lib/wx/examples/demo/demo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_aui.erl b/lib/wx/examples/demo/ex_aui.erl
index 7fbf841d16..d8fc0021f1 100644
--- a/lib/wx/examples/demo/ex_aui.erl
+++ b/lib/wx/examples/demo/ex_aui.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_button.erl b/lib/wx/examples/demo/ex_button.erl
index bfa7f785c2..a2086b0506 100644
--- a/lib/wx/examples/demo/ex_button.erl
+++ b/lib/wx/examples/demo/ex_button.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_canvas.erl b/lib/wx/examples/demo/ex_canvas.erl
index cdc783055c..b00ce81993 100644
--- a/lib/wx/examples/demo/ex_canvas.erl
+++ b/lib/wx/examples/demo/ex_canvas.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -136,11 +136,14 @@ handle_event(#wx{event = #wxCommand{type = command_button_clicked}},
{noreply, State};
handle_event(#wx{event = #wxSize{size={W,H}}},
State = #state{bitmap=Prev, canvas=Canvas}) ->
- Bitmap = wxBitmap:new(W,H),
- draw(Canvas, Bitmap, fun(DC) -> wxDC:clear(DC) end),
- wxBitmap:destroy(Prev),
- {noreply, State#state{bitmap = Bitmap}};
-
+ if W > 0 andalso H > 0 ->
+ Bitmap = wxBitmap:new(W,H),
+ draw(Canvas, Bitmap, fun(DC) -> wxDC:clear(DC) end),
+ wxBitmap:destroy(Prev),
+ {noreply, State#state{bitmap = Bitmap}};
+ true ->
+ {noreply, State}
+ end;
handle_event(#wx{event = #wxMouse{type=left_down, x=X, y=Y}}, State) ->
{noreply, State#state{pos={X,Y}}};
handle_event(#wx{event = #wxMouse{type=motion, x=X1, y=Y1}},
@@ -219,4 +222,4 @@ redraw(DC, Bitmap) ->
wxMemoryDC:destroy(MemoryDC).
get_pos(W,H) ->
- {random:uniform(W), random:uniform(H)}.
+ {rand:uniform(W), rand:uniform(H)}.
diff --git a/lib/wx/examples/demo/ex_canvas_paint.erl b/lib/wx/examples/demo/ex_canvas_paint.erl
index 90638fcf5b..75eb840b04 100644
--- a/lib/wx/examples/demo/ex_canvas_paint.erl
+++ b/lib/wx/examples/demo/ex_canvas_paint.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -157,10 +157,15 @@ handle_event(#wx{event = #wxMouse{type = motion, x = X, y = Y}},
{noreply, State#state{old_pos = {X,Y}}};
%% Resize event
handle_event(#wx{event = #wxSize{size = {W,H}}}, State = #state{bitmap=Prev}) ->
- wxBitmap:destroy(Prev),
- Bitmap = wxBitmap:new(W,H),
- draw(State#state.canvas, Bitmap, fun(DC) -> wxDC:clear(DC) end),
- {noreply, State#state{bitmap=Bitmap}};
+ case W > 0 andalso H > 0 of
+ true ->
+ wxBitmap:destroy(Prev),
+ Bitmap = wxBitmap:new(W,H),
+ draw(State#state.canvas, Bitmap, fun(DC) -> wxDC:clear(DC) end),
+ {noreply, State#state{bitmap=Bitmap}};
+ false ->
+ {noreply, State}
+ end;
handle_event(#wx{event = #wxMouse{type = left_dclick,x = X,y = Y}}, State = #state{}) ->
wxPanel:connect(State#state.canvas, motion),
{noreply, State#state{old_pos = {X,Y}}};
@@ -235,11 +240,10 @@ draw(Canvas, Bitmap, Fun) ->
CDC = wxClientDC:new(Canvas),
Fun(MemoryDC),
-
wxDC:blit(CDC, {0,0},
{wxBitmap:getWidth(Bitmap), wxBitmap:getHeight(Bitmap)},
MemoryDC, {0,0}),
-
+
wxClientDC:destroy(CDC),
wxMemoryDC:destroy(MemoryDC).
diff --git a/lib/wx/examples/demo/ex_choices.erl b/lib/wx/examples/demo/ex_choices.erl
index 31857e45f1..6cba2ffe87 100644
--- a/lib/wx/examples/demo/ex_choices.erl
+++ b/lib/wx/examples/demo/ex_choices.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_cursor.erl b/lib/wx/examples/demo/ex_cursor.erl
index 207973af96..1b0c71156f 100644
--- a/lib/wx/examples/demo/ex_cursor.erl
+++ b/lib/wx/examples/demo/ex_cursor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_dialogs.erl b/lib/wx/examples/demo/ex_dialogs.erl
index 03792b2e8d..1a90812958 100644
--- a/lib/wx/examples/demo/ex_dialogs.erl
+++ b/lib/wx/examples/demo/ex_dialogs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_frame_utils.erl b/lib/wx/examples/demo/ex_frame_utils.erl
index 68eda8b6b7..7f5c928617 100644
--- a/lib/wx/examples/demo/ex_frame_utils.erl
+++ b/lib/wx/examples/demo/ex_frame_utils.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_gauge.erl b/lib/wx/examples/demo/ex_gauge.erl
index 9ee9134be1..6312e3cc0c 100644
--- a/lib/wx/examples/demo/ex_gauge.erl
+++ b/lib/wx/examples/demo/ex_gauge.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_gl.erl b/lib/wx/examples/demo/ex_gl.erl
index 2693654136..3137b72161 100644
--- a/lib/wx/examples/demo/ex_gl.erl
+++ b/lib/wx/examples/demo/ex_gl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_graphicsContext.erl b/lib/wx/examples/demo/ex_graphicsContext.erl
index 3cb6f8a139..1193578037 100644
--- a/lib/wx/examples/demo/ex_graphicsContext.erl
+++ b/lib/wx/examples/demo/ex_graphicsContext.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -135,6 +135,8 @@ draw(Win, Pen, Brush, Font) ->
wxGraphicsContext:drawPath(Canvas, Path)
end,
wx:foreach(F, lists:seq(1,10)),
+ wxGraphicsObject:destroy(Path),
+ wxGraphicsObject:destroy(Canvas),
ok
catch _:{not_supported, _} ->
Err = "wxGraphicsContext not available in this build of wxwidgets",
diff --git a/lib/wx/examples/demo/ex_grid.erl b/lib/wx/examples/demo/ex_grid.erl
index c062b7bff5..57bae6ae4d 100644
--- a/lib/wx/examples/demo/ex_grid.erl
+++ b/lib/wx/examples/demo/ex_grid.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_htmlWindow.erl b/lib/wx/examples/demo/ex_htmlWindow.erl
index d9fa5310ef..5b39fe47fc 100644
--- a/lib/wx/examples/demo/ex_htmlWindow.erl
+++ b/lib/wx/examples/demo/ex_htmlWindow.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_listCtrl.erl b/lib/wx/examples/demo/ex_listCtrl.erl
index e5eb898f29..598df0d115 100644
--- a/lib/wx/examples/demo/ex_listCtrl.erl
+++ b/lib/wx/examples/demo/ex_listCtrl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_notebook.erl b/lib/wx/examples/demo/ex_notebook.erl
index 1b6a1a0ee4..5b49e634db 100644
--- a/lib/wx/examples/demo/ex_notebook.erl
+++ b/lib/wx/examples/demo/ex_notebook.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_pickers.erl b/lib/wx/examples/demo/ex_pickers.erl
index 8c07609f9d..016e70c8c7 100644
--- a/lib/wx/examples/demo/ex_pickers.erl
+++ b/lib/wx/examples/demo/ex_pickers.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_popupMenu.erl b/lib/wx/examples/demo/ex_popupMenu.erl
index 976c51cd20..c4b025201c 100644
--- a/lib/wx/examples/demo/ex_popupMenu.erl
+++ b/lib/wx/examples/demo/ex_popupMenu.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_radioBox.erl b/lib/wx/examples/demo/ex_radioBox.erl
index 004bbb5290..893cd70e96 100644
--- a/lib/wx/examples/demo/ex_radioBox.erl
+++ b/lib/wx/examples/demo/ex_radioBox.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_sashWindow.erl b/lib/wx/examples/demo/ex_sashWindow.erl
index 7d0473ab8f..63528f65d1 100644
--- a/lib/wx/examples/demo/ex_sashWindow.erl
+++ b/lib/wx/examples/demo/ex_sashWindow.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_sizers.erl b/lib/wx/examples/demo/ex_sizers.erl
index 07dbaa4c65..800f17f014 100644
--- a/lib/wx/examples/demo/ex_sizers.erl
+++ b/lib/wx/examples/demo/ex_sizers.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_slider.erl b/lib/wx/examples/demo/ex_slider.erl
index 839af56aec..32d48d44e3 100644
--- a/lib/wx/examples/demo/ex_slider.erl
+++ b/lib/wx/examples/demo/ex_slider.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_splitterWindow.erl b/lib/wx/examples/demo/ex_splitterWindow.erl
index 932027863f..14f63600a3 100644
--- a/lib/wx/examples/demo/ex_splitterWindow.erl
+++ b/lib/wx/examples/demo/ex_splitterWindow.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_static.erl b/lib/wx/examples/demo/ex_static.erl
index 2f36732aed..c0a6a0b054 100644
--- a/lib/wx/examples/demo/ex_static.erl
+++ b/lib/wx/examples/demo/ex_static.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_textCtrl.erl b/lib/wx/examples/demo/ex_textCtrl.erl
index 0674b5ef1c..99492259cb 100644
--- a/lib/wx/examples/demo/ex_textCtrl.erl
+++ b/lib/wx/examples/demo/ex_textCtrl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/demo/ex_treeCtrl.erl b/lib/wx/examples/demo/ex_treeCtrl.erl
index 4c69c7091c..fc0d9ba117 100644
--- a/lib/wx/examples/demo/ex_treeCtrl.erl
+++ b/lib/wx/examples/demo/ex_treeCtrl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/simple/Makefile b/lib/wx/examples/simple/Makefile
index 997913f036..22986ee696 100644
--- a/lib/wx/examples/simple/Makefile
+++ b/lib/wx/examples/simple/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/simple/hello.erl b/lib/wx/examples/simple/hello.erl
index 1dde9b1fd2..36bce56329 100644
--- a/lib/wx/examples/simple/hello.erl
+++ b/lib/wx/examples/simple/hello.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/simple/hello2.erl b/lib/wx/examples/simple/hello2.erl
index ac919c7668..671b23d892 100644
--- a/lib/wx/examples/simple/hello2.erl
+++ b/lib/wx/examples/simple/hello2.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/simple/menu.erl b/lib/wx/examples/simple/menu.erl
index 3851e7ca7e..479df1ef98 100644
--- a/lib/wx/examples/simple/menu.erl
+++ b/lib/wx/examples/simple/menu.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/simple/minimal.erl b/lib/wx/examples/simple/minimal.erl
index fb0eb3c3d9..9f6365e008 100644
--- a/lib/wx/examples/simple/minimal.erl
+++ b/lib/wx/examples/simple/minimal.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/sudoku/Makefile b/lib/wx/examples/sudoku/Makefile
index 56186a8b14..e6f35c689a 100644
--- a/lib/wx/examples/sudoku/Makefile
+++ b/lib/wx/examples/sudoku/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/sudoku/sudoku.erl b/lib/wx/examples/sudoku/sudoku.erl
index 0a0cf10d32..97f35870de 100644
--- a/lib/wx/examples/sudoku/sudoku.erl
+++ b/lib/wx/examples/sudoku/sudoku.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/sudoku/sudoku.hrl b/lib/wx/examples/sudoku/sudoku.hrl
index 026b2054c9..f8358274bd 100644
--- a/lib/wx/examples/sudoku/sudoku.hrl
+++ b/lib/wx/examples/sudoku/sudoku.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/sudoku/sudoku_board.erl b/lib/wx/examples/sudoku/sudoku_board.erl
index 50b539afa0..2e25c1a486 100644
--- a/lib/wx/examples/sudoku/sudoku_board.erl
+++ b/lib/wx/examples/sudoku/sudoku_board.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/sudoku/sudoku_game.erl b/lib/wx/examples/sudoku/sudoku_game.erl
index e3c39b4ec9..1e579a7c88 100644
--- a/lib/wx/examples/sudoku/sudoku_game.erl
+++ b/lib/wx/examples/sudoku/sudoku_game.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -151,8 +151,7 @@ test() -> %% Known to solvable
{{9,2},4}, {{9,4},5}, {{9,6},8}, {{9,8},7}].
new_game(S) ->
- {X,Y,Z} = erlang:now(),
- random:seed(Y,X,Z),
+ rand:seed(exsplus),
case new_game(1,1,gb_sets:empty(),empty_table(S#s{}),[], 0) of
stop -> new_game(S);
Game -> Game
@@ -171,7 +170,7 @@ new_game(R,C,BT,St,Acc,Cnt) when R < 10, C < 10 ->
[{{BR,BC},BVal,BBT,BST}|BAcc] = Acc,
new_game(BR,BC,gb_sets:add(BVal,BBT),BST,BAcc,Cnt+1);
Size ->
- Ind = random:uniform(Size),
+ Ind = rand:uniform(Size),
V = lists:nth(Ind,gb_sets:to_list(S)),
new_game(R,C+1,gb_sets:empty(),
add({R,C,M},V,St),
@@ -207,7 +206,7 @@ pick_shown(Given,Left,S0,Level,Gfx) ->
io:format("Below level ~p ~p~n", [GivenSz,Level]),
S0;
true ->
- Ran = random:uniform(LeftSz),
+ Ran = rand:uniform(LeftSz),
V = lists:nth(Ran,gb_sets:to_list(Left)),
S1 = rebuild_all(rcm(V),S0#s{v=setelement(V,S0#s.v,0)}),
case solve(S1, true) of
diff --git a/lib/wx/examples/sudoku/sudoku_gui.erl b/lib/wx/examples/sudoku/sudoku_gui.erl
index a5d24fa604..81d20814e1 100644
--- a/lib/wx/examples/sudoku/sudoku_gui.erl
+++ b/lib/wx/examples/sudoku/sudoku_gui.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/xrc/Makefile b/lib/wx/examples/xrc/Makefile
index 2028958fa1..446afa0b26 100644
--- a/lib/wx/examples/xrc/Makefile
+++ b/lib/wx/examples/xrc/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2009-2012. All Rights Reserved.
+# Copyright Ericsson AB 2009-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/examples/xrc/xrc.erl b/lib/wx/examples/xrc/xrc.erl
index 7f9519a69d..729f4ad0db 100644
--- a/lib/wx/examples/xrc/xrc.erl
+++ b/lib/wx/examples/xrc/xrc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/include/gl.hrl b/lib/wx/include/gl.hrl
index a7dc2f2495..d708515e1b 100644
--- a/lib/wx/include/gl.hrl
+++ b/lib/wx/include/gl.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1723,7 +1723,7 @@
-define(GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER, 16#8A44).
-define(GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER, 16#8A45).
-define(GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, 16#8A46).
--define(GL_INVALID_INDEX, 16#FFFFFFFFu).
+-define(GL_INVALID_INDEX, 16#FFFFFFFF).
-define(GL_COPY_READ_BUFFER, 16#8F36).
-define(GL_COPY_WRITE_BUFFER, 16#8F37).
-define(GL_DEPTH_CLAMP, 16#864F).
@@ -1746,7 +1746,7 @@
-define(GL_CONDITION_SATISFIED, 16#911C).
-define(GL_WAIT_FAILED, 16#911D).
-define(GL_SYNC_FLUSH_COMMANDS_BIT, 16#00000001).
--define(GL_TIMEOUT_IGNORED, 16#FFFFFFFFFFFFFFFFull).
+-define(GL_TIMEOUT_IGNORED, 16#FFFFFFFFFFFFFFFF).
-define(GL_SAMPLE_POSITION, 16#8E50).
-define(GL_SAMPLE_MASK, 16#8E51).
-define(GL_SAMPLE_MASK_VALUE, 16#8E52).
diff --git a/lib/wx/include/glu.hrl b/lib/wx/include/glu.hrl
index e1ba0099b6..4dcc73c523 100644
--- a/lib/wx/include/glu.hrl
+++ b/lib/wx/include/glu.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/include/wx.hrl b/lib/wx/include/wx.hrl
index 333ceca50c..af7cca7ed2 100644
--- a/lib/wx/include/wx.hrl
+++ b/lib/wx/include/wx.hrl
@@ -33,236 +33,192 @@
%% Here comes the definitions of all event records.
%% they contain the event type and possible some extra information.
--record(wxNavigationKey,{type :: wxNavigationKeyEventType(), %% Callback event: {@link wxNavigationKeyEvent}
- flags :: integer(),
- focus :: wxWindow:wxWindow()}).
--type wxNavigationKeyEventType() :: navigation_key.
--type wxNavigationKey() :: #wxNavigationKey{}. %% Callback event: {@link wxNavigationKeyEvent}
+-record(wxInitDialog, {type :: wxInitDialogEventType()}). %% Callback event: {@link wxInitDialogEvent}
+-type wxInitDialogEventType() :: 'init_dialog'.
+-type wxInitDialog() :: #wxInitDialog{}. %% Callback event: {@link wxInitDialogEvent}
--record(wxSash,{type :: wxSashEventType(), %% Callback event: {@link wxSashEvent}
- edge :: wx:wx_enum(),
- dragRect :: {X::integer(), Y::integer(), W::integer(), H::integer()},
- dragStatus :: wx:wx_enum()}).
--type wxSashEventType() :: sash_dragged.
--type wxSash() :: #wxSash{}. %% Callback event: {@link wxSashEvent}
+-record(wxClose, {type :: wxCloseEventType()}). %% Callback event: {@link wxCloseEvent}
+-type wxCloseEventType() :: 'close_window' | 'end_session' | 'query_end_session'.
+-type wxClose() :: #wxClose{}. %% Callback event: {@link wxCloseEvent}
--record(wxList,{type :: wxListEventType(), %% Callback event: {@link wxListEvent}
- code :: integer(),
- oldItemIndex :: integer(),
- itemIndex :: integer(),
- col :: integer(),
- pointDrag :: {X::integer(), Y::integer()}}).
--type wxListEventType() :: command_list_begin_drag | command_list_begin_rdrag | command_list_begin_label_edit | command_list_end_label_edit | command_list_delete_item | command_list_delete_all_items | command_list_key_down | command_list_insert_item | command_list_col_click | command_list_col_right_click | command_list_col_begin_drag | command_list_col_dragging | command_list_col_end_drag | command_list_item_selected | command_list_item_deselected | command_list_item_right_click | command_list_item_middle_click | command_list_item_activated | command_list_item_focused | command_list_cache_hint.
--type wxList() :: #wxList{}. %% Callback event: {@link wxListEvent}
+-record(wxStyledText,{type :: wxStyledTextEventType(), %% Callback event: {@link wxStyledTextEvent}
+ position :: integer(),
+ key :: integer(),
+ modifiers :: integer(),
+ modificationType :: integer(),
+ text :: unicode:chardata(),
+ length :: integer(),
+ linesAdded :: integer(),
+ line :: integer(),
+ foldLevelNow :: integer(),
+ foldLevelPrev :: integer(),
+ margin :: integer(),
+ message :: integer(),
+ wParam :: integer(),
+ lParam :: integer(),
+ listType :: integer(),
+ x :: integer(),
+ y :: integer(),
+ dragText :: unicode:chardata(),
+ dragAllowMove :: boolean(),
+ dragResult :: wx:wx_enum()}).
+-type wxStyledTextEventType() :: 'stc_change' | 'stc_styleneeded' | 'stc_charadded' | 'stc_savepointreached' | 'stc_savepointleft' | 'stc_romodifyattempt' | 'stc_key' | 'stc_doubleclick' | 'stc_updateui' | 'stc_modified' | 'stc_macrorecord' | 'stc_marginclick' | 'stc_needshown' | 'stc_painted' | 'stc_userlistselection' | 'stc_uridropped' | 'stc_dwellstart' | 'stc_dwellend' | 'stc_start_drag' | 'stc_drag_over' | 'stc_do_drop' | 'stc_zoom' | 'stc_hotspot_click' | 'stc_hotspot_dclick' | 'stc_calltip_click' | 'stc_autocomp_selection'.
+-type wxStyledText() :: #wxStyledText{}. %% Callback event: {@link wxStyledTextEvent}
+
+-record(wxFileDirPicker,{type :: wxFileDirPickerEventType(), %% Callback event: {@link wxFileDirPickerEvent}
+ path :: unicode:chardata()}).
+-type wxFileDirPickerEventType() :: 'command_filepicker_changed' | 'command_dirpicker_changed'.
+-type wxFileDirPicker() :: #wxFileDirPicker{}. %% Callback event: {@link wxFileDirPickerEvent}
-record(wxNotebook,{type :: wxNotebookEventType(), %% Callback event: {@link wxNotebookEvent}
nSel :: integer(),
nOldSel :: integer()}).
--type wxNotebookEventType() :: command_notebook_page_changed | command_notebook_page_changing.
+-type wxNotebookEventType() :: 'command_notebook_page_changed' | 'command_notebook_page_changing'.
-type wxNotebook() :: #wxNotebook{}. %% Callback event: {@link wxNotebookEvent}
--record(wxDisplayChanged, {type :: wxDisplayChangedEventType()}). %% Callback event: {@link wxDisplayChangedEvent}
--type wxDisplayChangedEventType() :: display_changed.
--type wxDisplayChanged() :: #wxDisplayChanged{}. %% Callback event: {@link wxDisplayChangedEvent}
-
--record(wxErase,{type :: wxEraseEventType(), %% Callback event: {@link wxEraseEvent}
- dc :: wxDC:wxDC()}).
--type wxEraseEventType() :: erase_background.
--type wxErase() :: #wxErase{}. %% Callback event: {@link wxEraseEvent}
-
--record(wxKey,{type :: wxKeyEventType(), %% Callback event: {@link wxKeyEvent}
- x :: integer(),
- y :: integer(),
- keyCode :: integer(),
- controlDown :: boolean(),
- shiftDown :: boolean(),
- altDown :: boolean(),
- metaDown :: boolean(),
- scanCode :: boolean(),
- uniChar :: integer(),
- rawCode :: integer(),
- rawFlags :: integer()}).
--type wxKeyEventType() :: char | char_hook | key_down | key_up.
--type wxKey() :: #wxKey{}. %% Callback event: {@link wxKeyEvent}
-
--record(wxWindowDestroy, {type :: wxWindowDestroyEventType()}). %% Callback event: {@link wxWindowDestroyEvent}
--type wxWindowDestroyEventType() :: destroy.
--type wxWindowDestroy() :: #wxWindowDestroy{}. %% Callback event: {@link wxWindowDestroyEvent}
+-record(wxIdle, {type :: wxIdleEventType()}). %% Callback event: {@link wxIdleEvent}
+-type wxIdleEventType() :: 'idle'.
+-type wxIdle() :: #wxIdle{}. %% Callback event: {@link wxIdleEvent}
--record(wxCalendar,{type :: wxCalendarEventType(), %% Callback event: {@link wxCalendarEvent}
- wday :: wx:wx_enum(),
- date :: wx:wx_datetime()}).
--type wxCalendarEventType() :: calendar_sel_changed | calendar_day_changed | calendar_month_changed | calendar_year_changed | calendar_doubleclicked | calendar_weekday_clicked.
--type wxCalendar() :: #wxCalendar{}. %% Callback event: {@link wxCalendarEvent}
+-record(wxColourPicker,{type :: wxColourPickerEventType(), %% Callback event: {@link wxColourPickerEvent}
+ colour :: wx:wx_colour()}).
+-type wxColourPickerEventType() :: 'command_colourpicker_changed'.
+-type wxColourPicker() :: #wxColourPicker{}. %% Callback event: {@link wxColourPickerEvent}
-record(wxSplitter, {type :: wxSplitterEventType()}). %% Callback event: {@link wxSplitterEvent}
--type wxSplitterEventType() :: command_splitter_sash_pos_changed | command_splitter_sash_pos_changing | command_splitter_doubleclicked | command_splitter_unsplit.
+-type wxSplitterEventType() :: 'command_splitter_sash_pos_changed' | 'command_splitter_sash_pos_changing' | 'command_splitter_doubleclicked' | 'command_splitter_unsplit'.
-type wxSplitter() :: #wxSplitter{}. %% Callback event: {@link wxSplitterEvent}
--record(wxScroll,{type :: wxScrollEventType(), %% Callback event: {@link wxScrollEvent}
- commandInt :: integer(),
- extraLong :: integer()}).
--type wxScrollEventType() :: scroll_top | scroll_bottom | scroll_lineup | scroll_linedown | scroll_pageup | scroll_pagedown | scroll_thumbtrack | scroll_thumbrelease | scroll_changed.
--type wxScroll() :: #wxScroll{}. %% Callback event: {@link wxScrollEvent}
-
--record(wxMenu,{type :: wxMenuEventType(), %% Callback event: {@link wxMenuEvent}
- menuId :: integer(),
- menu :: wxMenu:wxMenu()}).
--type wxMenuEventType() :: menu_open | menu_close | menu_highlight.
--type wxMenu() :: #wxMenu{}. %% Callback event: {@link wxMenuEvent}
-
--record(wxContextMenu,{type :: wxContextMenuEventType(), %% Callback event: {@link wxContextMenuEvent}
- pos :: {X::integer(), Y::integer()}}).
--type wxContextMenuEventType() :: context_menu.
--type wxContextMenu() :: #wxContextMenu{}. %% Callback event: {@link wxContextMenuEvent}
-
--record(wxShow,{type :: wxShowEventType(), %% Callback event: {@link wxShowEvent}
- show :: boolean()}).
--type wxShowEventType() :: show.
--type wxShow() :: #wxShow{}. %% Callback event: {@link wxShowEvent}
+-record(wxSash,{type :: wxSashEventType(), %% Callback event: {@link wxSashEvent}
+ edge :: wx:wx_enum(),
+ dragRect :: {X::integer(), Y::integer(), W::integer(), H::integer()},
+ dragStatus :: wx:wx_enum()}).
+-type wxSashEventType() :: 'sash_dragged'.
+-type wxSash() :: #wxSash{}. %% Callback event: {@link wxSashEvent}
--record(wxSpin,{type :: wxSpinEventType(), %% Callback event: {@link wxSpinEvent}
- commandInt :: integer()}).
--type wxSpinEventType() :: command_spinctrl_updated | spin_up | spin_down | spin.
--type wxSpin() :: #wxSpin{}. %% Callback event: {@link wxSpinEvent}
+-record(wxHelp, {type :: wxHelpEventType()}). %% Callback event: {@link wxHelpEvent}
+-type wxHelpEventType() :: 'help' | 'detailed_help'.
+-type wxHelp() :: #wxHelp{}. %% Callback event: {@link wxHelpEvent}
--record(wxSetCursor,{type :: wxSetCursorEventType(), %% Callback event: {@link wxSetCursorEvent}
- x :: integer(),
- y :: integer(),
- cursor :: wxCursor:wxCursor()}).
--type wxSetCursorEventType() :: set_cursor.
--type wxSetCursor() :: #wxSetCursor{}. %% Callback event: {@link wxSetCursorEvent}
+-record(wxDisplayChanged, {type :: wxDisplayChangedEventType()}). %% Callback event: {@link wxDisplayChangedEvent}
+-type wxDisplayChangedEventType() :: 'display_changed'.
+-type wxDisplayChanged() :: #wxDisplayChanged{}. %% Callback event: {@link wxDisplayChangedEvent}
-record(wxMouseCaptureLost, {type :: wxMouseCaptureLostEventType()}). %% Callback event: {@link wxMouseCaptureLostEvent}
--type wxMouseCaptureLostEventType() :: mouse_capture_lost.
+-type wxMouseCaptureLostEventType() :: 'mouse_capture_lost'.
-type wxMouseCaptureLost() :: #wxMouseCaptureLost{}. %% Callback event: {@link wxMouseCaptureLostEvent}
-record(wxFontPicker,{type :: wxFontPickerEventType(), %% Callback event: {@link wxFontPickerEvent}
font :: wxFont:wxFont()}).
--type wxFontPickerEventType() :: command_fontpicker_changed.
+-type wxFontPickerEventType() :: 'command_fontpicker_changed'.
-type wxFontPicker() :: #wxFontPicker{}. %% Callback event: {@link wxFontPickerEvent}
--record(wxScrollWin,{type :: wxScrollWinEventType(), %% Callback event: {@link wxScrollWinEvent}
+-record(wxFocus,{type :: wxFocusEventType(), %% Callback event: {@link wxFocusEvent}
+ win :: wxWindow:wxWindow()}).
+-type wxFocusEventType() :: 'set_focus' | 'kill_focus'.
+-type wxFocus() :: #wxFocus{}. %% Callback event: {@link wxFocusEvent}
+
+-record(wxPaletteChanged, {type :: wxPaletteChangedEventType()}). %% Callback event: {@link wxPaletteChangedEvent}
+-type wxPaletteChangedEventType() :: 'palette_changed'.
+-type wxPaletteChanged() :: #wxPaletteChanged{}. %% Callback event: {@link wxPaletteChangedEvent}
+
+-record(wxScroll,{type :: wxScrollEventType(), %% Callback event: {@link wxScrollEvent}
commandInt :: integer(),
extraLong :: integer()}).
--type wxScrollWinEventType() :: scrollwin_top | scrollwin_bottom | scrollwin_lineup | scrollwin_linedown | scrollwin_pageup | scrollwin_pagedown | scrollwin_thumbtrack | scrollwin_thumbrelease.
--type wxScrollWin() :: #wxScrollWin{}. %% Callback event: {@link wxScrollWinEvent}
-
--record(wxPaint, {type :: wxPaintEventType()}). %% Callback event: {@link wxPaintEvent}
--type wxPaintEventType() :: paint.
--type wxPaint() :: #wxPaint{}. %% Callback event: {@link wxPaintEvent}
+-type wxScrollEventType() :: 'scroll_top' | 'scroll_bottom' | 'scroll_lineup' | 'scroll_linedown' | 'scroll_pageup' | 'scroll_pagedown' | 'scroll_thumbtrack' | 'scroll_thumbrelease' | 'scroll_changed'.
+-type wxScroll() :: #wxScroll{}. %% Callback event: {@link wxScrollEvent}
-record(wxChildFocus, {type :: wxChildFocusEventType()}). %% Callback event: {@link wxChildFocusEvent}
--type wxChildFocusEventType() :: child_focus.
+-type wxChildFocusEventType() :: 'child_focus'.
-type wxChildFocus() :: #wxChildFocus{}. %% Callback event: {@link wxChildFocusEvent}
+-record(wxAuiNotebook,{type :: wxAuiNotebookEventType(), %% Callback event: {@link wxAuiNotebookEvent}
+ old_selection :: integer(),
+ selection :: integer(),
+ drag_source :: wxAuiNotebook:wxAuiNotebook()}).
+-type wxAuiNotebookEventType() :: 'command_auinotebook_page_close' | 'command_auinotebook_page_changed' | 'command_auinotebook_page_changing' | 'command_auinotebook_button' | 'command_auinotebook_begin_drag' | 'command_auinotebook_end_drag' | 'command_auinotebook_drag_motion' | 'command_auinotebook_allow_dnd' | 'command_auinotebook_tab_middle_down' | 'command_auinotebook_tab_middle_up' | 'command_auinotebook_tab_right_down' | 'command_auinotebook_tab_right_up' | 'command_auinotebook_page_closed' | 'command_auinotebook_drag_done' | 'command_auinotebook_bg_dclick'.
+-type wxAuiNotebook() :: #wxAuiNotebook{}. %% Callback event: {@link wxAuiNotebookEvent}
+
+-record(wxSize,{type :: wxSizeEventType(), %% Callback event: {@link wxSizeEvent}
+ size :: {W::integer(), H::integer()},
+ rect :: {X::integer(), Y::integer(), W::integer(), H::integer()}}).
+-type wxSizeEventType() :: 'size'.
+-type wxSize() :: #wxSize{}. %% Callback event: {@link wxSizeEvent}
+
+-record(wxCommand,{type :: wxCommandEventType(), %% Callback event: {@link wxCommandEvent}
+ cmdString :: unicode:chardata(),
+ commandInt :: integer(),
+ extraLong :: integer()}).
+-type wxCommandEventType() :: 'command_button_clicked' | 'command_checkbox_clicked' | 'command_choice_selected' | 'command_listbox_selected' | 'command_listbox_doubleclicked' | 'command_text_updated' | 'command_text_enter' | 'command_menu_selected' | 'command_slider_updated' | 'command_radiobox_selected' | 'command_radiobutton_selected' | 'command_scrollbar_updated' | 'command_vlbox_selected' | 'command_combobox_selected' | 'command_tool_rclicked' | 'command_tool_enter' | 'command_checklistbox_toggled' | 'command_togglebutton_clicked' | 'command_left_click' | 'command_left_dclick' | 'command_right_click' | 'command_set_focus' | 'command_kill_focus' | 'command_enter'.
+-type wxCommand() :: #wxCommand{}. %% Callback event: {@link wxCommandEvent}
+
-record(wxMaximize, {type :: wxMaximizeEventType()}). %% Callback event: {@link wxMaximizeEvent}
--type wxMaximizeEventType() :: maximize.
+-type wxMaximizeEventType() :: 'maximize'.
-type wxMaximize() :: #wxMaximize{}. %% Callback event: {@link wxMaximizeEvent}
--record(wxFileDirPicker,{type :: wxFileDirPickerEventType(), %% Callback event: {@link wxFileDirPickerEvent}
- path :: unicode:chardata()}).
--type wxFileDirPickerEventType() :: command_filepicker_changed | command_dirpicker_changed.
--type wxFileDirPicker() :: #wxFileDirPicker{}. %% Callback event: {@link wxFileDirPickerEvent}
+-record(wxSpin,{type :: wxSpinEventType(), %% Callback event: {@link wxSpinEvent}
+ commandInt :: integer()}).
+-type wxSpinEventType() :: 'command_spinctrl_updated' | 'spin_up' | 'spin_down' | 'spin'.
+-type wxSpin() :: #wxSpin{}. %% Callback event: {@link wxSpinEvent}
--record(wxFocus,{type :: wxFocusEventType(), %% Callback event: {@link wxFocusEvent}
- win :: wxWindow:wxWindow()}).
--type wxFocusEventType() :: set_focus | kill_focus.
--type wxFocus() :: #wxFocus{}. %% Callback event: {@link wxFocusEvent}
+-record(wxMenu,{type :: wxMenuEventType(), %% Callback event: {@link wxMenuEvent}
+ menuId :: integer(),
+ menu :: wxMenu:wxMenu()}).
+-type wxMenuEventType() :: 'menu_open' | 'menu_close' | 'menu_highlight'.
+-type wxMenu() :: #wxMenu{}. %% Callback event: {@link wxMenuEvent}
--record(wxDate,{type :: wxDateEventType(), %% Callback event: {@link wxDateEvent}
- date :: wx:wx_datetime()}).
--type wxDateEventType() :: date_changed.
--type wxDate() :: #wxDate{}. %% Callback event: {@link wxDateEvent}
+-record(wxShow,{type :: wxShowEventType(), %% Callback event: {@link wxShowEvent}
+ show :: boolean()}).
+-type wxShowEventType() :: 'show'.
+-type wxShow() :: #wxShow{}. %% Callback event: {@link wxShowEvent}
--record(wxHtmlLink,{type :: wxHtmlLinkEventType(), %% Callback event: {@link wxHtmlLinkEvent}
- linkInfo :: wx:wx_wxHtmlLinkInfo()}).
--type wxHtmlLinkEventType() :: command_html_link_clicked.
--type wxHtmlLink() :: #wxHtmlLink{}. %% Callback event: {@link wxHtmlLinkEvent}
+-record(wxWindowDestroy, {type :: wxWindowDestroyEventType()}). %% Callback event: {@link wxWindowDestroyEvent}
+-type wxWindowDestroyEventType() :: 'destroy'.
+-type wxWindowDestroy() :: #wxWindowDestroy{}. %% Callback event: {@link wxWindowDestroyEvent}
--record(wxHelp, {type :: wxHelpEventType()}). %% Callback event: {@link wxHelpEvent}
--type wxHelpEventType() :: help | detailed_help.
--type wxHelp() :: #wxHelp{}. %% Callback event: {@link wxHelpEvent}
+-record(wxContextMenu,{type :: wxContextMenuEventType(), %% Callback event: {@link wxContextMenuEvent}
+ pos :: {X::integer(), Y::integer()}}).
+-type wxContextMenuEventType() :: 'context_menu'.
+-type wxContextMenu() :: #wxContextMenu{}. %% Callback event: {@link wxContextMenuEvent}
-record(wxActivate,{type :: wxActivateEventType(), %% Callback event: {@link wxActivateEvent}
active :: boolean()}).
--type wxActivateEventType() :: activate | activate_app | hibernate.
+-type wxActivateEventType() :: 'activate' | 'activate_app' | 'hibernate'.
-type wxActivate() :: #wxActivate{}. %% Callback event: {@link wxActivateEvent}
--record(wxStyledText,{type :: wxStyledTextEventType(), %% Callback event: {@link wxStyledTextEvent}
- position :: integer(),
- key :: integer(),
- modifiers :: integer(),
- modificationType :: integer(),
- text :: unicode:chardata(),
- length :: integer(),
- linesAdded :: integer(),
- line :: integer(),
- foldLevelNow :: integer(),
- foldLevelPrev :: integer(),
- margin :: integer(),
- message :: integer(),
- wParam :: integer(),
- lParam :: integer(),
- listType :: integer(),
- x :: integer(),
- y :: integer(),
- dragText :: unicode:chardata(),
- dragAllowMove :: boolean(),
- dragResult :: wx:wx_enum()}).
--type wxStyledTextEventType() :: stc_change | stc_styleneeded | stc_charadded | stc_savepointreached | stc_savepointleft | stc_romodifyattempt | stc_key | stc_doubleclick | stc_updateui | stc_modified | stc_macrorecord | stc_marginclick | stc_needshown | stc_painted | stc_userlistselection | stc_uridropped | stc_dwellstart | stc_dwellend | stc_start_drag | stc_drag_over | stc_do_drop | stc_zoom | stc_hotspot_click | stc_hotspot_dclick | stc_calltip_click | stc_autocomp_selection.
--type wxStyledText() :: #wxStyledText{}. %% Callback event: {@link wxStyledTextEvent}
-
--record(wxSysColourChanged, {type :: wxSysColourChangedEventType()}). %% Callback event: {@link wxSysColourChangedEvent}
--type wxSysColourChangedEventType() :: sys_colour_changed.
--type wxSysColourChanged() :: #wxSysColourChanged{}. %% Callback event: {@link wxSysColourChangedEvent}
+-record(wxMove,{type :: wxMoveEventType(), %% Callback event: {@link wxMoveEvent}
+ pos :: {X::integer(), Y::integer()},
+ rect :: {X::integer(), Y::integer(), W::integer(), H::integer()}}).
+-type wxMoveEventType() :: 'move'.
+-type wxMove() :: #wxMove{}. %% Callback event: {@link wxMoveEvent}
--record(wxGrid,{type :: wxGridEventType(), %% Callback event: {@link wxGridEvent}
- row :: integer(),
+-record(wxList,{type :: wxListEventType(), %% Callback event: {@link wxListEvent}
+ code :: integer(),
+ oldItemIndex :: integer(),
+ itemIndex :: integer(),
col :: integer(),
- x :: integer(),
- y :: integer(),
- selecting :: boolean(),
- control :: boolean(),
- meta :: boolean(),
- shift :: boolean(),
- alt :: boolean()}).
--type wxGridEventType() :: grid_cell_left_click | grid_cell_right_click | grid_cell_left_dclick | grid_cell_right_dclick | grid_label_left_click | grid_label_right_click | grid_label_left_dclick | grid_label_right_dclick | grid_row_size | grid_col_size | grid_range_select | grid_cell_change | grid_select_cell | grid_editor_shown | grid_editor_hidden | grid_editor_created | grid_cell_begin_drag.
--type wxGrid() :: #wxGrid{}. %% Callback event: {@link wxGridEvent}
-
--record(wxPaletteChanged, {type :: wxPaletteChangedEventType()}). %% Callback event: {@link wxPaletteChangedEvent}
--type wxPaletteChangedEventType() :: palette_changed.
--type wxPaletteChanged() :: #wxPaletteChanged{}. %% Callback event: {@link wxPaletteChangedEvent}
+ pointDrag :: {X::integer(), Y::integer()}}).
+-type wxListEventType() :: 'command_list_begin_drag' | 'command_list_begin_rdrag' | 'command_list_begin_label_edit' | 'command_list_end_label_edit' | 'command_list_delete_item' | 'command_list_delete_all_items' | 'command_list_key_down' | 'command_list_insert_item' | 'command_list_col_click' | 'command_list_col_right_click' | 'command_list_col_begin_drag' | 'command_list_col_dragging' | 'command_list_col_end_drag' | 'command_list_item_selected' | 'command_list_item_deselected' | 'command_list_item_right_click' | 'command_list_item_middle_click' | 'command_list_item_activated' | 'command_list_item_focused' | 'command_list_cache_hint'.
+-type wxList() :: #wxList{}. %% Callback event: {@link wxListEvent}
--record(wxUpdateUI, {type :: wxUpdateUIEventType()}). %% Callback event: {@link wxUpdateUIEvent}
--type wxUpdateUIEventType() :: update_ui.
--type wxUpdateUI() :: #wxUpdateUI{}. %% Callback event: {@link wxUpdateUIEvent}
+-record(wxClipboardText, {type :: wxClipboardTextEventType()}). %% Callback event: {@link wxClipboardTextEvent}
+-type wxClipboardTextEventType() :: 'command_text_copy' | 'command_text_cut' | 'command_text_paste'.
+-type wxClipboardText() :: #wxClipboardText{}. %% Callback event: {@link wxClipboardTextEvent}
--record(wxSize,{type :: wxSizeEventType(), %% Callback event: {@link wxSizeEvent}
- size :: {W::integer(), H::integer()},
- rect :: {X::integer(), Y::integer(), W::integer(), H::integer()}}).
--type wxSizeEventType() :: size.
--type wxSize() :: #wxSize{}. %% Callback event: {@link wxSizeEvent}
+-record(wxScrollWin,{type :: wxScrollWinEventType(), %% Callback event: {@link wxScrollWinEvent}
+ commandInt :: integer(),
+ extraLong :: integer()}).
+-type wxScrollWinEventType() :: 'scrollwin_top' | 'scrollwin_bottom' | 'scrollwin_lineup' | 'scrollwin_linedown' | 'scrollwin_pageup' | 'scrollwin_pagedown' | 'scrollwin_thumbtrack' | 'scrollwin_thumbrelease'.
+-type wxScrollWin() :: #wxScrollWin{}. %% Callback event: {@link wxScrollWinEvent}
-record(wxIconize,{type :: wxIconizeEventType(), %% Callback event: {@link wxIconizeEvent}
iconized :: boolean()}).
--type wxIconizeEventType() :: iconize.
+-type wxIconizeEventType() :: 'iconize'.
-type wxIconize() :: #wxIconize{}. %% Callback event: {@link wxIconizeEvent}
--record(wxAuiNotebook,{type :: wxAuiNotebookEventType(), %% Callback event: {@link wxAuiNotebookEvent}
- old_selection :: integer(),
- selection :: integer(),
- drag_source :: wxAuiNotebook:wxAuiNotebook()}).
--type wxAuiNotebookEventType() :: command_auinotebook_page_close | command_auinotebook_page_changed | command_auinotebook_page_changing | command_auinotebook_button | command_auinotebook_begin_drag | command_auinotebook_end_drag | command_auinotebook_drag_motion | command_auinotebook_allow_dnd | command_auinotebook_tab_middle_down | command_auinotebook_tab_middle_up | command_auinotebook_tab_right_down | command_auinotebook_tab_right_up | command_auinotebook_page_closed | command_auinotebook_drag_done | command_auinotebook_bg_dclick.
--type wxAuiNotebook() :: #wxAuiNotebook{}. %% Callback event: {@link wxAuiNotebookEvent}
-
--record(wxClose, {type :: wxCloseEventType()}). %% Callback event: {@link wxCloseEvent}
--type wxCloseEventType() :: close_window | end_session | query_end_session.
--type wxClose() :: #wxClose{}. %% Callback event: {@link wxCloseEvent}
-
--record(wxMouseCaptureChanged, {type :: wxMouseCaptureChangedEventType()}). %% Callback event: {@link wxMouseCaptureChangedEvent}
--type wxMouseCaptureChangedEventType() :: mouse_capture_changed.
--type wxMouseCaptureChanged() :: #wxMouseCaptureChanged{}. %% Callback event: {@link wxMouseCaptureChangedEvent}
+-record(wxUpdateUI, {type :: wxUpdateUIEventType()}). %% Callback event: {@link wxUpdateUIEvent}
+-type wxUpdateUIEventType() :: 'update_ui'.
+-type wxUpdateUI() :: #wxUpdateUI{}. %% Callback event: {@link wxUpdateUIEvent}
-record(wxMouse,{type :: wxMouseEventType(), %% Callback event: {@link wxMouseEvent}
x :: integer(),
@@ -277,17 +233,86 @@
wheelRotation :: integer(),
wheelDelta :: integer(),
linesPerAction :: integer()}).
--type wxMouseEventType() :: left_down | left_up | middle_down | middle_up | right_down | right_up | motion | enter_window | leave_window | left_dclick | middle_dclick | right_dclick | mousewheel.
+-type wxMouseEventType() :: 'left_down' | 'left_up' | 'middle_down' | 'middle_up' | 'right_down' | 'right_up' | 'motion' | 'enter_window' | 'leave_window' | 'left_dclick' | 'middle_dclick' | 'right_dclick' | 'mousewheel'.
-type wxMouse() :: #wxMouse{}. %% Callback event: {@link wxMouseEvent}
--record(wxClipboardText, {type :: wxClipboardTextEventType()}). %% Callback event: {@link wxClipboardTextEvent}
--type wxClipboardTextEventType() :: command_text_copy | command_text_cut | command_text_paste.
--type wxClipboardText() :: #wxClipboardText{}. %% Callback event: {@link wxClipboardTextEvent}
+-record(wxTree,{type :: wxTreeEventType(), %% Callback event: {@link wxTreeEvent}
+ item :: integer(),
+ itemOld :: integer(),
+ pointDrag :: {X::integer(), Y::integer()}}).
+-type wxTreeEventType() :: 'command_tree_begin_drag' | 'command_tree_begin_rdrag' | 'command_tree_begin_label_edit' | 'command_tree_end_label_edit' | 'command_tree_delete_item' | 'command_tree_get_info' | 'command_tree_set_info' | 'command_tree_item_expanded' | 'command_tree_item_expanding' | 'command_tree_item_collapsed' | 'command_tree_item_collapsing' | 'command_tree_sel_changed' | 'command_tree_sel_changing' | 'command_tree_key_down' | 'command_tree_item_activated' | 'command_tree_item_right_click' | 'command_tree_item_middle_click' | 'command_tree_end_drag' | 'command_tree_state_image_click' | 'command_tree_item_gettooltip' | 'command_tree_item_menu'.
+-type wxTree() :: #wxTree{}. %% Callback event: {@link wxTreeEvent}
+
+-record(wxSysColourChanged, {type :: wxSysColourChangedEventType()}). %% Callback event: {@link wxSysColourChangedEvent}
+-type wxSysColourChangedEventType() :: 'sys_colour_changed'.
+-type wxSysColourChanged() :: #wxSysColourChanged{}. %% Callback event: {@link wxSysColourChangedEvent}
+
+-record(wxNavigationKey,{type :: wxNavigationKeyEventType(), %% Callback event: {@link wxNavigationKeyEvent}
+ flags :: integer(),
+ focus :: wxWindow:wxWindow()}).
+-type wxNavigationKeyEventType() :: 'navigation_key'.
+-type wxNavigationKey() :: #wxNavigationKey{}. %% Callback event: {@link wxNavigationKeyEvent}
+
+-record(wxQueryNewPalette, {type :: wxQueryNewPaletteEventType()}). %% Callback event: {@link wxQueryNewPaletteEvent}
+-type wxQueryNewPaletteEventType() :: 'query_new_palette'.
+-type wxQueryNewPalette() :: #wxQueryNewPalette{}. %% Callback event: {@link wxQueryNewPaletteEvent}
+
+-record(wxMouseCaptureChanged, {type :: wxMouseCaptureChangedEventType()}). %% Callback event: {@link wxMouseCaptureChangedEvent}
+-type wxMouseCaptureChangedEventType() :: 'mouse_capture_changed'.
+-type wxMouseCaptureChanged() :: #wxMouseCaptureChanged{}. %% Callback event: {@link wxMouseCaptureChangedEvent}
+
+-record(wxHtmlLink,{type :: wxHtmlLinkEventType(), %% Callback event: {@link wxHtmlLinkEvent}
+ linkInfo :: wx:wx_wxHtmlLinkInfo()}).
+-type wxHtmlLinkEventType() :: 'command_html_link_clicked'.
+-type wxHtmlLink() :: #wxHtmlLink{}. %% Callback event: {@link wxHtmlLinkEvent}
+
+-record(wxKey,{type :: wxKeyEventType(), %% Callback event: {@link wxKeyEvent}
+ x :: integer(),
+ y :: integer(),
+ keyCode :: integer(),
+ controlDown :: boolean(),
+ shiftDown :: boolean(),
+ altDown :: boolean(),
+ metaDown :: boolean(),
+ scanCode :: boolean(),
+ uniChar :: integer(),
+ rawCode :: integer(),
+ rawFlags :: integer()}).
+-type wxKeyEventType() :: 'char' | 'char_hook' | 'key_down' | 'key_up'.
+-type wxKey() :: #wxKey{}. %% Callback event: {@link wxKeyEvent}
+
+-record(wxTaskBarIcon, {type :: wxTaskBarIconEventType()}). %% Callback event: {@link wxTaskBarIconEvent}
+-type wxTaskBarIconEventType() :: 'taskbar_move' | 'taskbar_left_down' | 'taskbar_left_up' | 'taskbar_right_down' | 'taskbar_right_up' | 'taskbar_left_dclick' | 'taskbar_right_dclick'.
+-type wxTaskBarIcon() :: #wxTaskBarIcon{}. %% Callback event: {@link wxTaskBarIconEvent}
+
+-record(wxGrid,{type :: wxGridEventType(), %% Callback event: {@link wxGridEvent}
+ row :: integer(),
+ col :: integer(),
+ x :: integer(),
+ y :: integer(),
+ selecting :: boolean(),
+ control :: boolean(),
+ meta :: boolean(),
+ shift :: boolean(),
+ alt :: boolean()}).
+-type wxGridEventType() :: 'grid_cell_left_click' | 'grid_cell_right_click' | 'grid_cell_left_dclick' | 'grid_cell_right_dclick' | 'grid_label_left_click' | 'grid_label_right_click' | 'grid_label_left_dclick' | 'grid_label_right_dclick' | 'grid_row_size' | 'grid_col_size' | 'grid_range_select' | 'grid_cell_change' | 'grid_select_cell' | 'grid_editor_shown' | 'grid_editor_hidden' | 'grid_editor_created' | 'grid_cell_begin_drag'.
+-type wxGrid() :: #wxGrid{}. %% Callback event: {@link wxGridEvent}
+
+-record(wxCalendar,{type :: wxCalendarEventType(), %% Callback event: {@link wxCalendarEvent}
+ wday :: wx:wx_enum(),
+ date :: wx:wx_datetime()}).
+-type wxCalendarEventType() :: 'calendar_sel_changed' | 'calendar_day_changed' | 'calendar_month_changed' | 'calendar_year_changed' | 'calendar_doubleclicked' | 'calendar_weekday_clicked'.
+-type wxCalendar() :: #wxCalendar{}. %% Callback event: {@link wxCalendarEvent}
-record(wxWindowCreate, {type :: wxWindowCreateEventType()}). %% Callback event: {@link wxWindowCreateEvent}
--type wxWindowCreateEventType() :: create.
+-type wxWindowCreateEventType() :: 'create'.
-type wxWindowCreate() :: #wxWindowCreate{}. %% Callback event: {@link wxWindowCreateEvent}
+-record(wxDate,{type :: wxDateEventType(), %% Callback event: {@link wxDateEvent}
+ date :: wx:wx_datetime()}).
+-type wxDateEventType() :: 'date_changed'.
+-type wxDate() :: #wxDate{}. %% Callback event: {@link wxDateEvent}
+
-record(wxAuiManager,{type :: wxAuiManagerEventType(), %% Callback event: {@link wxAuiManagerEvent}
manager :: wxAuiManager:wxAuiManager(),
pane :: wxAuiPaneInfo:wxAuiPaneInfo(),
@@ -295,65 +320,40 @@
veto_flag :: boolean(),
canveto_flag :: boolean(),
dc :: wxDC:wxDC()}).
--type wxAuiManagerEventType() :: aui_pane_button | aui_pane_close | aui_pane_maximize | aui_pane_restore | aui_pane_activated | aui_render | aui_find_manager.
+-type wxAuiManagerEventType() :: 'aui_pane_button' | 'aui_pane_close' | 'aui_pane_maximize' | 'aui_pane_restore' | 'aui_pane_activated' | 'aui_render' | 'aui_find_manager'.
-type wxAuiManager() :: #wxAuiManager{}. %% Callback event: {@link wxAuiManagerEvent}
--record(wxInitDialog, {type :: wxInitDialogEventType()}). %% Callback event: {@link wxInitDialogEvent}
--type wxInitDialogEventType() :: init_dialog.
--type wxInitDialog() :: #wxInitDialog{}. %% Callback event: {@link wxInitDialogEvent}
-
--record(wxCommand,{type :: wxCommandEventType(), %% Callback event: {@link wxCommandEvent}
- cmdString :: unicode:chardata(),
- commandInt :: integer(),
- extraLong :: integer()}).
--type wxCommandEventType() :: command_button_clicked | command_checkbox_clicked | command_choice_selected | command_listbox_selected | command_listbox_doubleclicked | command_text_updated | command_text_enter | command_menu_selected | command_slider_updated | command_radiobox_selected | command_radiobutton_selected | command_scrollbar_updated | command_vlbox_selected | command_combobox_selected | command_tool_rclicked | command_tool_enter | command_checklistbox_toggled | command_togglebutton_clicked | command_left_click | command_left_dclick | command_right_click | command_set_focus | command_kill_focus | command_enter.
--type wxCommand() :: #wxCommand{}. %% Callback event: {@link wxCommandEvent}
-
-record(wxJoystick,{type :: wxJoystickEventType(), %% Callback event: {@link wxJoystickEvent}
pos :: {X::integer(), Y::integer()},
zPosition :: integer(),
buttonChange :: integer(),
buttonState :: integer(),
joyStick :: integer()}).
--type wxJoystickEventType() :: joy_button_down | joy_button_up | joy_move | joy_zmove.
+-type wxJoystickEventType() :: 'joy_button_down' | 'joy_button_up' | 'joy_move' | 'joy_zmove'.
-type wxJoystick() :: #wxJoystick{}. %% Callback event: {@link wxJoystickEvent}
--record(wxQueryNewPalette, {type :: wxQueryNewPaletteEventType()}). %% Callback event: {@link wxQueryNewPaletteEvent}
--type wxQueryNewPaletteEventType() :: query_new_palette.
--type wxQueryNewPalette() :: #wxQueryNewPalette{}. %% Callback event: {@link wxQueryNewPaletteEvent}
-
--record(wxMove,{type :: wxMoveEventType(), %% Callback event: {@link wxMoveEvent}
- pos :: {X::integer(), Y::integer()},
- rect :: {X::integer(), Y::integer(), W::integer(), H::integer()}}).
--type wxMoveEventType() :: move.
--type wxMove() :: #wxMove{}. %% Callback event: {@link wxMoveEvent}
-
--record(wxIdle, {type :: wxIdleEventType()}). %% Callback event: {@link wxIdleEvent}
--type wxIdleEventType() :: idle.
--type wxIdle() :: #wxIdle{}. %% Callback event: {@link wxIdleEvent}
-
--record(wxColourPicker,{type :: wxColourPickerEventType(), %% Callback event: {@link wxColourPickerEvent}
- colour :: wx:wx_colour()}).
--type wxColourPickerEventType() :: command_colourpicker_changed.
--type wxColourPicker() :: #wxColourPicker{}. %% Callback event: {@link wxColourPickerEvent}
+-record(wxPaint, {type :: wxPaintEventType()}). %% Callback event: {@link wxPaintEvent}
+-type wxPaintEventType() :: 'paint'.
+-type wxPaint() :: #wxPaint{}. %% Callback event: {@link wxPaintEvent}
--record(wxTaskBarIcon, {type :: wxTaskBarIconEventType()}). %% Callback event: {@link wxTaskBarIconEvent}
--type wxTaskBarIconEventType() :: taskbar_move | taskbar_left_down | taskbar_left_up | taskbar_right_down | taskbar_right_up | taskbar_left_dclick | taskbar_right_dclick.
--type wxTaskBarIcon() :: #wxTaskBarIcon{}. %% Callback event: {@link wxTaskBarIconEvent}
+-record(wxErase,{type :: wxEraseEventType(), %% Callback event: {@link wxEraseEvent}
+ dc :: wxDC:wxDC()}).
+-type wxEraseEventType() :: 'erase_background'.
+-type wxErase() :: #wxErase{}. %% Callback event: {@link wxEraseEvent}
--record(wxTree,{type :: wxTreeEventType(), %% Callback event: {@link wxTreeEvent}
- item :: integer(),
- itemOld :: integer(),
- pointDrag :: {X::integer(), Y::integer()}}).
--type wxTreeEventType() :: command_tree_begin_drag | command_tree_begin_rdrag | command_tree_begin_label_edit | command_tree_end_label_edit | command_tree_delete_item | command_tree_get_info | command_tree_set_info | command_tree_item_expanded | command_tree_item_expanding | command_tree_item_collapsed | command_tree_item_collapsing | command_tree_sel_changed | command_tree_sel_changing | command_tree_key_down | command_tree_item_activated | command_tree_item_right_click | command_tree_item_middle_click | command_tree_end_drag | command_tree_state_image_click | command_tree_item_gettooltip | command_tree_item_menu.
--type wxTree() :: #wxTree{}. %% Callback event: {@link wxTreeEvent}
+-record(wxSetCursor,{type :: wxSetCursorEventType(), %% Callback event: {@link wxSetCursorEvent}
+ x :: integer(),
+ y :: integer(),
+ cursor :: wxCursor:wxCursor()}).
+-type wxSetCursorEventType() :: 'set_cursor'.
+-type wxSetCursor() :: #wxSetCursor{}. %% Callback event: {@link wxSetCursorEvent}
-type event() :: wxActivate() | wxAuiManager() | wxAuiNotebook() | wxCalendar() | wxChildFocus() | wxClipboardText() | wxClose() | wxColourPicker() | wxCommand() | wxContextMenu() | wxDate() | wxDisplayChanged() | wxErase() | wxFileDirPicker() | wxFocus() | wxFontPicker() | wxGrid() | wxHelp() | wxHtmlLink() | wxIconize() | wxIdle() | wxInitDialog() | wxJoystick() | wxKey() | wxList() | wxMaximize() | wxMenu() | wxMouse() | wxMouseCaptureChanged() | wxMouseCaptureLost() | wxMove() | wxNavigationKey() | wxNotebook() | wxPaint() | wxPaletteChanged() | wxQueryNewPalette() | wxSash() | wxScroll() | wxScrollWin() | wxSetCursor() | wxShow() | wxSize() | wxSpin() | wxSplitter() | wxStyledText() | wxSysColourChanged() | wxTaskBarIcon() | wxTree() | wxUpdateUI() | wxWindowCreate() | wxWindowDestroy().
-type wxEventType() :: wxActivateEventType() | wxAuiManagerEventType() | wxAuiNotebookEventType() | wxCalendarEventType() | wxChildFocusEventType() | wxClipboardTextEventType() | wxCloseEventType() | wxColourPickerEventType() | wxCommandEventType() | wxContextMenuEventType() | wxDateEventType() | wxDisplayChangedEventType() | wxEraseEventType() | wxFileDirPickerEventType() | wxFocusEventType() | wxFontPickerEventType() | wxGridEventType() | wxHelpEventType() | wxHtmlLinkEventType() | wxIconizeEventType() | wxIdleEventType() | wxInitDialogEventType() | wxJoystickEventType() | wxKeyEventType() | wxListEventType() | wxMaximizeEventType() | wxMenuEventType() | wxMouseCaptureChangedEventType() | wxMouseCaptureLostEventType() | wxMouseEventType() | wxMoveEventType() | wxNavigationKeyEventType() | wxNotebookEventType() | wxPaintEventType() | wxPaletteChangedEventType() | wxQueryNewPaletteEventType() | wxSashEventType() | wxScrollEventType() | wxScrollWinEventType() | wxSetCursorEventType() | wxShowEventType() | wxSizeEventType() | wxSpinEventType() | wxSplitterEventType() | wxStyledTextEventType() | wxSysColourChangedEventType() | wxTaskBarIconEventType() | wxTreeEventType() | wxUpdateUIEventType() | wxWindowCreateEventType() | wxWindowDestroyEventType().
%% Hardcoded Records
-record(wxMouseState, {x :: integer(), y :: integer(),
- leftDown :: boolean(), middleDown :: boolean, rightDown :: boolean,
+ leftDown :: boolean(), middleDown :: boolean(), rightDown :: boolean(),
controlDown :: boolean(), shiftDown :: boolean(),
altDown :: boolean(), metaDown :: boolean(), cmdDown :: boolean()
}).
diff --git a/lib/wx/src/Makefile b/lib/wx/src/Makefile
index b345e34684..21b45af2c4 100644
--- a/lib/wx/src/Makefile
+++ b/lib/wx/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2012. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/gl.erl b/lib/wx/src/gen/gl.erl
index bedd4e9cca..e10b99b10a 100644
--- a/lib/wx/src/gen/gl.erl
+++ b/lib/wx/src/gen/gl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -321,7 +321,7 @@ send_bin(Tuple) when is_tuple(Tuple) ->
%% in the frame buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearIndex.xml">external</a> documentation.
--spec clearIndex(C) -> ok when C :: float().
+-spec clearIndex(C) -> 'ok' when C :: float().
clearIndex(C) ->
cast(5037, <<C:?GLfloat>>).
@@ -332,7 +332,7 @@ clearIndex(C) ->
%% range [0 1].
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearColor.xml">external</a> documentation.
--spec clearColor(Red, Green, Blue, Alpha) -> ok when Red :: clamp(),Green :: clamp(),Blue :: clamp(),Alpha :: clamp().
+-spec clearColor(Red, Green, Blue, Alpha) -> 'ok' when Red :: clamp(),Green :: clamp(),Blue :: clamp(),Alpha :: clamp().
clearColor(Red,Green,Blue,Alpha) ->
cast(5038, <<Red:?GLclampf,Green:?GLclampf,Blue:?GLclampf,Alpha:?GLclampf>>).
@@ -362,7 +362,7 @@ clearColor(Red,Green,Blue,Alpha) ->
%% that buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClear.xml">external</a> documentation.
--spec clear(Mask) -> ok when Mask :: integer().
+-spec clear(Mask) -> 'ok' when Mask :: integer().
clear(Mask) ->
cast(5039, <<Mask:?GLbitfield>>).
@@ -379,7 +379,7 @@ clear(Mask) ->
%% writing.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIndexMask.xml">external</a> documentation.
--spec indexMask(Mask) -> ok when Mask :: integer().
+-spec indexMask(Mask) -> 'ok' when Mask :: integer().
indexMask(Mask) ->
cast(5040, <<Mask:?GLuint>>).
@@ -395,7 +395,7 @@ indexMask(Mask) ->
%% enabled or disabled for entire color components.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorMask.xml">external</a> documentation.
--spec colorMask(Red, Green, Blue, Alpha) -> ok when Red :: 0|1,Green :: 0|1,Blue :: 0|1,Alpha :: 0|1.
+-spec colorMask(Red, Green, Blue, Alpha) -> 'ok' when Red :: 0|1,Green :: 0|1,Blue :: 0|1,Alpha :: 0|1.
colorMask(Red,Green,Blue,Alpha) ->
cast(5041, <<Red:?GLboolean,Green:?GLboolean,Blue:?GLboolean,Alpha:?GLboolean>>).
@@ -438,7 +438,7 @@ colorMask(Red,Green,Blue,Alpha) ->
%% operations. ``gl:alphaFunc'' does not affect screen clear operations.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAlphaFunc.xml">external</a> documentation.
--spec alphaFunc(Func, Ref) -> ok when Func :: enum(),Ref :: clamp().
+-spec alphaFunc(Func, Ref) -> 'ok' when Func :: enum(),Ref :: clamp().
alphaFunc(Func,Ref) ->
cast(5042, <<Func:?GLenum,Ref:?GLclampf>>).
@@ -513,7 +513,7 @@ alphaFunc(Func,Ref) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml">external</a> documentation.
--spec blendFunc(Sfactor, Dfactor) -> ok when Sfactor :: enum(),Dfactor :: enum().
+-spec blendFunc(Sfactor, Dfactor) -> 'ok' when Sfactor :: enum(),Dfactor :: enum().
blendFunc(Sfactor,Dfactor) ->
cast(5043, <<Sfactor:?GLenum,Dfactor:?GLenum>>).
@@ -543,7 +543,7 @@ blendFunc(Sfactor,Dfactor) ->
%% the source and destination colors.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLogicOp.xml">external</a> documentation.
--spec logicOp(Opcode) -> ok when Opcode :: enum().
+-spec logicOp(Opcode) -> 'ok' when Opcode :: enum().
logicOp(Opcode) ->
cast(5044, <<Opcode:?GLenum>>).
@@ -559,7 +559,7 @@ logicOp(Opcode) ->
%% front-facing and back-facing. See {@link gl:frontFace/1} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCullFace.xml">external</a> documentation.
--spec cullFace(Mode) -> ok when Mode :: enum().
+-spec cullFace(Mode) -> 'ok' when Mode :: enum().
cullFace(Mode) ->
cast(5045, <<Mode:?GLenum>>).
@@ -582,7 +582,7 @@ cullFace(Mode) ->
%% default, counterclockwise polygons are taken to be front-facing.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFrontFace.xml">external</a> documentation.
--spec frontFace(Mode) -> ok when Mode :: enum().
+-spec frontFace(Mode) -> 'ok' when Mode :: enum().
frontFace(Mode) ->
cast(5046, <<Mode:?GLenum>>).
@@ -594,7 +594,7 @@ frontFace(Mode) ->
%% built-in variable gl_PointSize will be used.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPointSize.xml">external</a> documentation.
--spec pointSize(Size) -> ok when Size :: float().
+-spec pointSize(Size) -> 'ok' when Size :: float().
pointSize(Size) ->
cast(5047, <<Size:?GLfloat>>).
@@ -626,7 +626,7 @@ pointSize(Size) ->
%% , `?GL_SMOOTH_LINE_WIDTH_RANGE', and `?GL_SMOOTH_LINE_WIDTH_GRANULARITY'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLineWidth.xml">external</a> documentation.
--spec lineWidth(Width) -> ok when Width :: float().
+-spec lineWidth(Width) -> 'ok' when Width :: float().
lineWidth(Width) ->
cast(5048, <<Width:?GLfloat>>).
@@ -658,7 +658,7 @@ lineWidth(Width) ->
%% stippling is disabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLineStipple.xml">external</a> documentation.
--spec lineStipple(Factor, Pattern) -> ok when Factor :: integer(),Pattern :: integer().
+-spec lineStipple(Factor, Pattern) -> 'ok' when Factor :: integer(),Pattern :: integer().
lineStipple(Factor,Pattern) ->
cast(5049, <<Factor:?GLint,Pattern:?GLushort>>).
@@ -686,7 +686,7 @@ lineStipple(Factor,Pattern) ->
%% control the rasterization of the polygon.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPolygonMode.xml">external</a> documentation.
--spec polygonMode(Face, Mode) -> ok when Face :: enum(),Mode :: enum().
+-spec polygonMode(Face, Mode) -> 'ok' when Face :: enum(),Mode :: enum().
polygonMode(Face,Mode) ->
cast(5050, <<Face:?GLenum,Mode:?GLenum>>).
@@ -704,7 +704,7 @@ polygonMode(Face,Mode) ->
%% to surfaces, and for rendering solids with highlighted edges.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPolygonOffset.xml">external</a> documentation.
--spec polygonOffset(Factor, Units) -> ok when Factor :: float(),Units :: float().
+-spec polygonOffset(Factor, Units) -> 'ok' when Factor :: float(),Units :: float().
polygonOffset(Factor,Units) ->
cast(5051, <<Factor:?GLfloat,Units:?GLfloat>>).
@@ -735,7 +735,7 @@ polygonOffset(Factor,Units) ->
%% the stipple pattern consists of all 1's.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPolygonStipple.xml">external</a> documentation.
--spec polygonStipple(Mask) -> ok when Mask :: binary().
+-spec polygonStipple(Mask) -> 'ok' when Mask :: binary().
polygonStipple(Mask) ->
send_bin(Mask),
cast(5052, <<>>).
@@ -774,12 +774,12 @@ getPolygonStipple() ->
%% is set to `?GL_POINT' or `?GL_LINE'. See {@link gl:polygonMode/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEdgeFlag.xml">external</a> documentation.
--spec edgeFlag(Flag) -> ok when Flag :: 0|1.
+-spec edgeFlag(Flag) -> 'ok' when Flag :: 0|1.
edgeFlag(Flag) ->
cast(5054, <<Flag:?GLboolean>>).
%% @equiv edgeFlag(Flag)
--spec edgeFlagv(Flag) -> ok when Flag :: {Flag :: 0|1}.
+-spec edgeFlagv(Flag) -> 'ok' when Flag :: {Flag :: 0|1}.
edgeFlagv({Flag}) -> edgeFlag(Flag).
%% @doc Define the scissor box
@@ -799,7 +799,7 @@ edgeFlagv({Flag}) -> edgeFlag(Flag).
%% window.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissor.xml">external</a> documentation.
--spec scissor(X, Y, Width, Height) -> ok when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec scissor(X, Y, Width, Height) -> 'ok' when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
scissor(X,Y,Width,Height) ->
cast(5055, <<X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
@@ -827,7 +827,7 @@ scissor(X,Y,Width,Height) ->
%% disabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClipPlane.xml">external</a> documentation.
--spec clipPlane(Plane, Equation) -> ok when Plane :: enum(),Equation :: {float(),float(),float(),float()}.
+-spec clipPlane(Plane, Equation) -> 'ok' when Plane :: enum(),Equation :: {float(),float(),float(),float()}.
clipPlane(Plane,{E1,E2,E3,E4}) ->
cast(5056, <<Plane:?GLenum,0:32,E1:?GLdouble,E2:?GLdouble,E3:?GLdouble,E4:?GLdouble>>).
@@ -884,7 +884,7 @@ getClipPlane(Plane) ->
%% buffers. The context is selected at GL initialization.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffer.xml">external</a> documentation.
--spec drawBuffer(Mode) -> ok when Mode :: enum().
+-spec drawBuffer(Mode) -> 'ok' when Mode :: enum().
drawBuffer(Mode) ->
cast(5058, <<Mode:?GLenum>>).
@@ -909,7 +909,7 @@ drawBuffer(Mode) ->
%% in double-buffered configurations.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glReadBuffer.xml">external</a> documentation.
--spec readBuffer(Mode) -> ok when Mode :: enum().
+-spec readBuffer(Mode) -> 'ok' when Mode :: enum().
readBuffer(Mode) ->
cast(5059, <<Mode:?GLenum>>).
@@ -1019,13 +1019,13 @@ readBuffer(Mode) ->
%% and clamped to the implementation-dependent point size range.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml">external</a> documentation.
--spec enable(Cap) -> ok when Cap :: enum().
+-spec enable(Cap) -> 'ok' when Cap :: enum().
enable(Cap) ->
cast(5060, <<Cap:?GLenum>>).
%% @doc
%% See {@link enable/1}
--spec disable(Cap) -> ok when Cap :: enum().
+-spec disable(Cap) -> 'ok' when Cap :: enum().
disable(Cap) ->
cast(5061, <<Cap:?GLenum>>).
@@ -1115,13 +1115,13 @@ isEnabled(Cap) ->
%% is called. See {@link gl:vertexPointer/4} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnableClientState.xml">external</a> documentation.
--spec enableClientState(Cap) -> ok when Cap :: enum().
+-spec enableClientState(Cap) -> 'ok' when Cap :: enum().
enableClientState(Cap) ->
cast(5063, <<Cap:?GLenum>>).
%% @doc
%% See {@link enableClientState/1}
--spec disableClientState(Cap) -> ok when Cap :: enum().
+-spec disableClientState(Cap) -> 'ok' when Cap :: enum().
disableClientState(Cap) ->
cast(5064, <<Cap:?GLenum>>).
@@ -2089,13 +2089,13 @@ getIntegerv(Pname) ->
%% Initially, the attribute stack is empty.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPushAttrib.xml">external</a> documentation.
--spec pushAttrib(Mask) -> ok when Mask :: integer().
+-spec pushAttrib(Mask) -> 'ok' when Mask :: integer().
pushAttrib(Mask) ->
cast(5069, <<Mask:?GLbitfield>>).
%% @doc
%% See {@link pushAttrib/1}
--spec popAttrib() -> ok.
+-spec popAttrib() -> 'ok'.
popAttrib() ->
cast(5070, <<>>).
@@ -2123,13 +2123,13 @@ popAttrib() ->
%% Initially, the client attribute stack is empty.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPushClientAttrib.xml">external</a> documentation.
--spec pushClientAttrib(Mask) -> ok when Mask :: integer().
+-spec pushClientAttrib(Mask) -> 'ok' when Mask :: integer().
pushClientAttrib(Mask) ->
cast(5071, <<Mask:?GLbitfield>>).
%% @doc
%% See {@link pushClientAttrib/1}
--spec popClientAttrib() -> ok.
+-spec popClientAttrib() -> 'ok'.
popClientAttrib() ->
cast(5072, <<>>).
@@ -2274,7 +2274,7 @@ getString(Name) ->
%% state, and all changes to the frame buffer contents.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFinish.xml">external</a> documentation.
--spec finish() -> ok.
+-spec finish() -> 'ok'.
finish() ->
cast(5076, <<>>).
@@ -2292,7 +2292,7 @@ finish() ->
%% for user input that depends on the generated image.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFlush.xml">external</a> documentation.
--spec flush() -> ok.
+-spec flush() -> 'ok'.
flush() ->
cast(5077, <<>>).
@@ -2334,7 +2334,7 @@ flush() ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glHint.xml">external</a> documentation.
--spec hint(Target, Mode) -> ok when Target :: enum(),Mode :: enum().
+-spec hint(Target, Mode) -> 'ok' when Target :: enum(),Mode :: enum().
hint(Target,Mode) ->
cast(5078, <<Target:?GLenum,Mode:?GLenum>>).
@@ -2344,7 +2344,7 @@ hint(Target,Mode) ->
%% buffer. Values specified by ``gl:clearDepth'' are clamped to the range [0 1].
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearDepth.xml">external</a> documentation.
--spec clearDepth(Depth) -> ok when Depth :: clamp().
+-spec clearDepth(Depth) -> 'ok' when Depth :: clamp().
clearDepth(Depth) ->
cast(5079, <<Depth:?GLclampd>>).
@@ -2385,7 +2385,7 @@ clearDepth(Depth) ->
%% always passes.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthFunc.xml">external</a> documentation.
--spec depthFunc(Func) -> ok when Func :: enum().
+-spec depthFunc(Func) -> 'ok' when Func :: enum().
depthFunc(Func) ->
cast(5080, <<Func:?GLenum>>).
@@ -2396,7 +2396,7 @@ depthFunc(Func) ->
%% depth buffer writing is enabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthMask.xml">external</a> documentation.
--spec depthMask(Flag) -> ok when Flag :: 0|1.
+-spec depthMask(Flag) -> 'ok' when Flag :: 0|1.
depthMask(Flag) ->
cast(5081, <<Flag:?GLboolean>>).
@@ -2413,7 +2413,7 @@ depthMask(Flag) ->
%% the depth buffer range is fully utilized.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthRange.xml">external</a> documentation.
--spec depthRange(Near_val, Far_val) -> ok when Near_val :: clamp(),Far_val :: clamp().
+-spec depthRange(Near_val, Far_val) -> 'ok' when Near_val :: clamp(),Far_val :: clamp().
depthRange(Near_val,Far_val) ->
cast(5082, <<Near_val:?GLclampd,Far_val:?GLclampd>>).
@@ -2425,7 +2425,7 @@ depthRange(Near_val,Far_val) ->
%% Values specified by ``gl:clearAccum'' are clamped to the range [-1 1].
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearAccum.xml">external</a> documentation.
--spec clearAccum(Red, Green, Blue, Alpha) -> ok when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
+-spec clearAccum(Red, Green, Blue, Alpha) -> 'ok' when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
clearAccum(Red,Green,Blue,Alpha) ->
cast(5083, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat,Alpha:?GLfloat>>).
@@ -2484,7 +2484,7 @@ clearAccum(Red,Green,Blue,Alpha) ->
%% to set it to, then call {@link gl:clear/1} with the accumulation buffer enabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAccum.xml">external</a> documentation.
--spec accum(Op, Value) -> ok when Op :: enum(),Value :: float().
+-spec accum(Op, Value) -> 'ok' when Op :: enum(),Value :: float().
accum(Op,Value) ->
cast(5084, <<Op:?GLenum,Value:?GLfloat>>).
@@ -2507,7 +2507,7 @@ accum(Op,Value) ->
%% with argument `?GL_MATRIX_MODE'. The initial value is `?GL_MODELVIEW'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixMode.xml">external</a> documentation.
--spec matrixMode(Mode) -> ok when Mode :: enum().
+-spec matrixMode(Mode) -> 'ok' when Mode :: enum().
matrixMode(Mode) ->
cast(5085, <<Mode:?GLenum>>).
@@ -2532,7 +2532,7 @@ matrixMode(Mode) ->
%% matrix stack.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml">external</a> documentation.
--spec ortho(Left, Right, Bottom, Top, Near_val, Far_val) -> ok when Left :: float(),Right :: float(),Bottom :: float(),Top :: float(),Near_val :: float(),Far_val :: float().
+-spec ortho(Left, Right, Bottom, Top, Near_val, Far_val) -> 'ok' when Left :: float(),Right :: float(),Bottom :: float(),Top :: float(),Near_val :: float(),Far_val :: float().
ortho(Left,Right,Bottom,Top,Near_val,Far_val) ->
cast(5086, <<Left:?GLdouble,Right:?GLdouble,Bottom:?GLdouble,Top:?GLdouble,Near_val:?GLdouble,Far_val:?GLdouble>>).
@@ -2562,7 +2562,7 @@ ortho(Left,Right,Bottom,Top,Near_val,Far_val) ->
%% matrix stack.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml">external</a> documentation.
--spec frustum(Left, Right, Bottom, Top, Near_val, Far_val) -> ok when Left :: float(),Right :: float(),Bottom :: float(),Top :: float(),Near_val :: float(),Far_val :: float().
+-spec frustum(Left, Right, Bottom, Top, Near_val, Far_val) -> 'ok' when Left :: float(),Right :: float(),Bottom :: float(),Top :: float(),Near_val :: float(),Far_val :: float().
frustum(Left,Right,Bottom,Top,Near_val,Far_val) ->
cast(5087, <<Left:?GLdouble,Right:?GLdouble,Bottom:?GLdouble,Top:?GLdouble,Near_val:?GLdouble,Far_val:?GLdouble>>).
@@ -2580,7 +2580,7 @@ frustum(Left,Right,Bottom,Top,Near_val,Far_val) ->
%% To query this range, call {@link gl:getBooleanv/1} with argument `?GL_MAX_VIEWPORT_DIMS'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glViewport.xml">external</a> documentation.
--spec viewport(X, Y, Width, Height) -> ok when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec viewport(X, Y, Width, Height) -> 'ok' when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
viewport(X,Y,Width,Height) ->
cast(5088, <<X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
@@ -2605,13 +2605,13 @@ viewport(X,Y,Width,Height) ->
%% GL state.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPushMatrix.xml">external</a> documentation.
--spec pushMatrix() -> ok.
+-spec pushMatrix() -> 'ok'.
pushMatrix() ->
cast(5089, <<>>).
%% @doc
%% See {@link pushMatrix/0}
--spec popMatrix() -> ok.
+-spec popMatrix() -> 'ok'.
popMatrix() ->
cast(5090, <<>>).
@@ -2625,7 +2625,7 @@ popMatrix() ->
%% but in some cases it is more efficient.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadIdentity.xml">external</a> documentation.
--spec loadIdentity() -> ok.
+-spec loadIdentity() -> 'ok'.
loadIdentity() ->
cast(5091, <<>>).
@@ -2645,7 +2645,7 @@ loadIdentity() ->
%% Projection and texture transformations are similarly defined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadMatrix.xml">external</a> documentation.
--spec loadMatrixd(M) -> ok when M :: matrix().
+-spec loadMatrixd(M) -> 'ok' when M :: matrix().
loadMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5092, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
loadMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -2653,7 +2653,7 @@ loadMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc
%% See {@link loadMatrixd/1}
--spec loadMatrixf(M) -> ok when M :: matrix().
+-spec loadMatrixf(M) -> 'ok' when M :: matrix().
loadMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5093, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
loadMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -2668,7 +2668,7 @@ loadMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% It is either the projection matrix, modelview matrix, or the texture matrix.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultMatrix.xml">external</a> documentation.
--spec multMatrixd(M) -> ok when M :: matrix().
+-spec multMatrixd(M) -> 'ok' when M :: matrix().
multMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5094, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
multMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -2676,7 +2676,7 @@ multMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc
%% See {@link multMatrixd/1}
--spec multMatrixf(M) -> ok when M :: matrix().
+-spec multMatrixf(M) -> 'ok' when M :: matrix().
multMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5095, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
multMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -2699,13 +2699,13 @@ multMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% to save and restore the unrotated coordinate system.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml">external</a> documentation.
--spec rotated(Angle, X, Y, Z) -> ok when Angle :: float(),X :: float(),Y :: float(),Z :: float().
+-spec rotated(Angle, X, Y, Z) -> 'ok' when Angle :: float(),X :: float(),Y :: float(),Z :: float().
rotated(Angle,X,Y,Z) ->
cast(5096, <<Angle:?GLdouble,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link rotated/4}
--spec rotatef(Angle, X, Y, Z) -> ok when Angle :: float(),X :: float(),Y :: float(),Z :: float().
+-spec rotatef(Angle, X, Y, Z) -> 'ok' when Angle :: float(),X :: float(),Y :: float(),Z :: float().
rotatef(Angle,X,Y,Z) ->
cast(5097, <<Angle:?GLfloat,X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
@@ -2728,13 +2728,13 @@ rotatef(Angle,X,Y,Z) ->
%% coordinate system.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScale.xml">external</a> documentation.
--spec scaled(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec scaled(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
scaled(X,Y,Z) ->
cast(5098, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link scaled/3}
--spec scalef(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec scalef(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
scalef(X,Y,Z) ->
cast(5099, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
@@ -2753,13 +2753,13 @@ scalef(X,Y,Z) ->
%% coordinate system.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTranslate.xml">external</a> documentation.
--spec translated(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec translated(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
translated(X,Y,Z) ->
cast(5100, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link translated/3}
--spec translatef(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec translatef(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
translatef(X,Y,Z) ->
cast(5101, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
@@ -2788,7 +2788,7 @@ isList(List) ->
%% display list are ignored. If `Range' is 0, nothing happens.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteLists.xml">external</a> documentation.
--spec deleteLists(List, Range) -> ok when List :: integer(),Range :: integer().
+-spec deleteLists(List, Range) -> 'ok' when List :: integer(),Range :: integer().
deleteLists(List,Range) ->
cast(5103, <<List:?GLuint,Range:?GLsizei>>).
@@ -2851,14 +2851,14 @@ genLists(Range) ->
%% when {@link gl:endList/0} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNewList.xml">external</a> documentation.
--spec newList(List, Mode) -> ok when List :: integer(),Mode :: enum().
+-spec newList(List, Mode) -> 'ok' when List :: integer(),Mode :: enum().
newList(List,Mode) ->
cast(5105, <<List:?GLuint,Mode:?GLenum>>).
%% @doc glBeginList
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginList.xml">external</a> documentation.
--spec endList() -> ok.
+-spec endList() -> 'ok'.
endList() ->
cast(5106, <<>>).
@@ -2880,7 +2880,7 @@ endList() ->
%% , and {@link gl:pushMatrix/0} to preserve GL state across ``gl:callList'' calls.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCallList.xml">external</a> documentation.
--spec callList(List) -> ok when List :: integer().
+-spec callList(List) -> 'ok' when List :: integer().
callList(List) ->
cast(5107, <<List:?GLuint>>).
@@ -2947,7 +2947,7 @@ callList(List) ->
%% to preserve GL state across ``gl:callLists'' calls.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCallLists.xml">external</a> documentation.
--spec callLists(Lists) -> ok when Lists :: [integer()].
+-spec callLists(Lists) -> 'ok' when Lists :: [integer()].
callLists(Lists) ->
cast(5108, <<(length(Lists)):?GLuint,
(<< <<C:?GLuint>> || C <- Lists>>)/binary,0:(((1+length(Lists)) rem 2)*32)>>).
@@ -2961,7 +2961,7 @@ callLists(Lists) ->
%% the others are ignored.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glListBase.xml">external</a> documentation.
--spec listBase(Base) -> ok when Base :: integer().
+-spec listBase(Base) -> 'ok' when Base :: integer().
listBase(Base) ->
cast(5109, <<Base:?GLuint>>).
@@ -3032,13 +3032,13 @@ listBase(Base) ->
%% (3), `?GL_QUADS' (4), and `?GL_QUAD_STRIP' (2).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBegin.xml">external</a> documentation.
--spec 'begin'(Mode) -> ok when Mode :: enum().
+-spec 'begin'(Mode) -> 'ok' when Mode :: enum().
'begin'(Mode) ->
cast(5110, <<Mode:?GLenum>>).
%% @doc
%% See {@link 'begin'/1}
--spec 'end'() -> ok.
+-spec 'end'() -> 'ok'.
'end'() ->
cast(5111, <<>>).
@@ -3052,122 +3052,122 @@ listBase(Base) ->
%% y, and z are specified, w defaults to 1.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml">external</a> documentation.
--spec vertex2d(X, Y) -> ok when X :: float(),Y :: float().
+-spec vertex2d(X, Y) -> 'ok' when X :: float(),Y :: float().
vertex2d(X,Y) ->
cast(5112, <<X:?GLdouble,Y:?GLdouble>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex2f(X, Y) -> ok when X :: float(),Y :: float().
+-spec vertex2f(X, Y) -> 'ok' when X :: float(),Y :: float().
vertex2f(X,Y) ->
cast(5113, <<X:?GLfloat,Y:?GLfloat>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex2i(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec vertex2i(X, Y) -> 'ok' when X :: integer(),Y :: integer().
vertex2i(X,Y) ->
cast(5114, <<X:?GLint,Y:?GLint>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex2s(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec vertex2s(X, Y) -> 'ok' when X :: integer(),Y :: integer().
vertex2s(X,Y) ->
cast(5115, <<X:?GLshort,Y:?GLshort>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex3d(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec vertex3d(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
vertex3d(X,Y,Z) ->
cast(5116, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex3f(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec vertex3f(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
vertex3f(X,Y,Z) ->
cast(5117, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex3i(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec vertex3i(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
vertex3i(X,Y,Z) ->
cast(5118, <<X:?GLint,Y:?GLint,Z:?GLint>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex3s(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec vertex3s(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
vertex3s(X,Y,Z) ->
cast(5119, <<X:?GLshort,Y:?GLshort,Z:?GLshort>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex4d(X, Y, Z, W) -> ok when X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertex4d(X, Y, Z, W) -> 'ok' when X :: float(),Y :: float(),Z :: float(),W :: float().
vertex4d(X,Y,Z,W) ->
cast(5120, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex4f(X, Y, Z, W) -> ok when X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertex4f(X, Y, Z, W) -> 'ok' when X :: float(),Y :: float(),Z :: float(),W :: float().
vertex4f(X,Y,Z,W) ->
cast(5121, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex4i(X, Y, Z, W) -> ok when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertex4i(X, Y, Z, W) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertex4i(X,Y,Z,W) ->
cast(5122, <<X:?GLint,Y:?GLint,Z:?GLint,W:?GLint>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex4s(X, Y, Z, W) -> ok when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertex4s(X, Y, Z, W) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertex4s(X,Y,Z,W) ->
cast(5123, <<X:?GLshort,Y:?GLshort,Z:?GLshort,W:?GLshort>>).
%% @equiv vertex2d(X,Y)
--spec vertex2dv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertex2dv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertex2dv({X,Y}) -> vertex2d(X,Y).
%% @equiv vertex2f(X,Y)
--spec vertex2fv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertex2fv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertex2fv({X,Y}) -> vertex2f(X,Y).
%% @equiv vertex2i(X,Y)
--spec vertex2iv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertex2iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertex2iv({X,Y}) -> vertex2i(X,Y).
%% @equiv vertex2s(X,Y)
--spec vertex2sv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertex2sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertex2sv({X,Y}) -> vertex2s(X,Y).
%% @equiv vertex3d(X,Y,Z)
--spec vertex3dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertex3dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertex3dv({X,Y,Z}) -> vertex3d(X,Y,Z).
%% @equiv vertex3f(X,Y,Z)
--spec vertex3fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertex3fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertex3fv({X,Y,Z}) -> vertex3f(X,Y,Z).
%% @equiv vertex3i(X,Y,Z)
--spec vertex3iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertex3iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertex3iv({X,Y,Z}) -> vertex3i(X,Y,Z).
%% @equiv vertex3s(X,Y,Z)
--spec vertex3sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertex3sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertex3sv({X,Y,Z}) -> vertex3s(X,Y,Z).
%% @equiv vertex4d(X,Y,Z,W)
--spec vertex4dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertex4dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertex4dv({X,Y,Z,W}) -> vertex4d(X,Y,Z,W).
%% @equiv vertex4f(X,Y,Z,W)
--spec vertex4fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertex4fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertex4fv({X,Y,Z,W}) -> vertex4f(X,Y,Z,W).
%% @equiv vertex4i(X,Y,Z,W)
--spec vertex4iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertex4iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertex4iv({X,Y,Z,W}) -> vertex4i(X,Y,Z,W).
%% @equiv vertex4s(X,Y,Z,W)
--spec vertex4sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertex4sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertex4sv({X,Y,Z,W}) -> vertex4s(X,Y,Z,W).
%% @doc Set the current normal vector
@@ -3187,52 +3187,52 @@ vertex4sv({X,Y,Z,W}) -> vertex4s(X,Y,Z,W).
%% Normalization is initially disabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml">external</a> documentation.
--spec normal3b(Nx, Ny, Nz) -> ok when Nx :: integer(),Ny :: integer(),Nz :: integer().
+-spec normal3b(Nx, Ny, Nz) -> 'ok' when Nx :: integer(),Ny :: integer(),Nz :: integer().
normal3b(Nx,Ny,Nz) ->
cast(5124, <<Nx:?GLbyte,Ny:?GLbyte,Nz:?GLbyte>>).
%% @doc
%% See {@link normal3b/3}
--spec normal3d(Nx, Ny, Nz) -> ok when Nx :: float(),Ny :: float(),Nz :: float().
+-spec normal3d(Nx, Ny, Nz) -> 'ok' when Nx :: float(),Ny :: float(),Nz :: float().
normal3d(Nx,Ny,Nz) ->
cast(5125, <<Nx:?GLdouble,Ny:?GLdouble,Nz:?GLdouble>>).
%% @doc
%% See {@link normal3b/3}
--spec normal3f(Nx, Ny, Nz) -> ok when Nx :: float(),Ny :: float(),Nz :: float().
+-spec normal3f(Nx, Ny, Nz) -> 'ok' when Nx :: float(),Ny :: float(),Nz :: float().
normal3f(Nx,Ny,Nz) ->
cast(5126, <<Nx:?GLfloat,Ny:?GLfloat,Nz:?GLfloat>>).
%% @doc
%% See {@link normal3b/3}
--spec normal3i(Nx, Ny, Nz) -> ok when Nx :: integer(),Ny :: integer(),Nz :: integer().
+-spec normal3i(Nx, Ny, Nz) -> 'ok' when Nx :: integer(),Ny :: integer(),Nz :: integer().
normal3i(Nx,Ny,Nz) ->
cast(5127, <<Nx:?GLint,Ny:?GLint,Nz:?GLint>>).
%% @doc
%% See {@link normal3b/3}
--spec normal3s(Nx, Ny, Nz) -> ok when Nx :: integer(),Ny :: integer(),Nz :: integer().
+-spec normal3s(Nx, Ny, Nz) -> 'ok' when Nx :: integer(),Ny :: integer(),Nz :: integer().
normal3s(Nx,Ny,Nz) ->
cast(5128, <<Nx:?GLshort,Ny:?GLshort,Nz:?GLshort>>).
%% @equiv normal3b(Nx,Ny,Nz)
--spec normal3bv(V) -> ok when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
+-spec normal3bv(V) -> 'ok' when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
normal3bv({Nx,Ny,Nz}) -> normal3b(Nx,Ny,Nz).
%% @equiv normal3d(Nx,Ny,Nz)
--spec normal3dv(V) -> ok when V :: {Nx :: float(),Ny :: float(),Nz :: float()}.
+-spec normal3dv(V) -> 'ok' when V :: {Nx :: float(),Ny :: float(),Nz :: float()}.
normal3dv({Nx,Ny,Nz}) -> normal3d(Nx,Ny,Nz).
%% @equiv normal3f(Nx,Ny,Nz)
--spec normal3fv(V) -> ok when V :: {Nx :: float(),Ny :: float(),Nz :: float()}.
+-spec normal3fv(V) -> 'ok' when V :: {Nx :: float(),Ny :: float(),Nz :: float()}.
normal3fv({Nx,Ny,Nz}) -> normal3f(Nx,Ny,Nz).
%% @equiv normal3i(Nx,Ny,Nz)
--spec normal3iv(V) -> ok when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
+-spec normal3iv(V) -> 'ok' when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
normal3iv({Nx,Ny,Nz}) -> normal3i(Nx,Ny,Nz).
%% @equiv normal3s(Nx,Ny,Nz)
--spec normal3sv(V) -> ok when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
+-spec normal3sv(V) -> 'ok' when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
normal3sv({Nx,Ny,Nz}) -> normal3s(Nx,Ny,Nz).
%% @doc Set the current color index
@@ -3249,52 +3249,52 @@ normal3sv({Nx,Ny,Nz}) -> normal3s(Nx,Ny,Nz).
%% value that do not correspond to bits in the frame buffer are masked out.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml">external</a> documentation.
--spec indexd(C) -> ok when C :: float().
+-spec indexd(C) -> 'ok' when C :: float().
indexd(C) ->
cast(5129, <<C:?GLdouble>>).
%% @doc
%% See {@link indexd/1}
--spec indexf(C) -> ok when C :: float().
+-spec indexf(C) -> 'ok' when C :: float().
indexf(C) ->
cast(5130, <<C:?GLfloat>>).
%% @doc
%% See {@link indexd/1}
--spec indexi(C) -> ok when C :: integer().
+-spec indexi(C) -> 'ok' when C :: integer().
indexi(C) ->
cast(5131, <<C:?GLint>>).
%% @doc
%% See {@link indexd/1}
--spec indexs(C) -> ok when C :: integer().
+-spec indexs(C) -> 'ok' when C :: integer().
indexs(C) ->
cast(5132, <<C:?GLshort>>).
%% @doc
%% See {@link indexd/1}
--spec indexub(C) -> ok when C :: integer().
+-spec indexub(C) -> 'ok' when C :: integer().
indexub(C) ->
cast(5133, <<C:?GLubyte>>).
%% @equiv indexd(C)
--spec indexdv(C) -> ok when C :: {C :: float()}.
+-spec indexdv(C) -> 'ok' when C :: {C :: float()}.
indexdv({C}) -> indexd(C).
%% @equiv indexf(C)
--spec indexfv(C) -> ok when C :: {C :: float()}.
+-spec indexfv(C) -> 'ok' when C :: {C :: float()}.
indexfv({C}) -> indexf(C).
%% @equiv indexi(C)
--spec indexiv(C) -> ok when C :: {C :: integer()}.
+-spec indexiv(C) -> 'ok' when C :: {C :: integer()}.
indexiv({C}) -> indexi(C).
%% @equiv indexs(C)
--spec indexsv(C) -> ok when C :: {C :: integer()}.
+-spec indexsv(C) -> 'ok' when C :: {C :: integer()}.
indexsv({C}) -> indexs(C).
%% @equiv indexub(C)
--spec indexubv(C) -> ok when C :: {C :: integer()}.
+-spec indexubv(C) -> 'ok' when C :: {C :: integer()}.
indexubv({C}) -> indexub(C).
%% @doc Set the current color
@@ -3323,162 +3323,162 @@ indexubv({C}) -> indexub(C).
%% are interpolated or written into a color buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColor.xml">external</a> documentation.
--spec color3b(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3b(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3b(Red,Green,Blue) ->
cast(5134, <<Red:?GLbyte,Green:?GLbyte,Blue:?GLbyte>>).
%% @doc
%% See {@link color3b/3}
--spec color3d(Red, Green, Blue) -> ok when Red :: float(),Green :: float(),Blue :: float().
+-spec color3d(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float().
color3d(Red,Green,Blue) ->
cast(5135, <<Red:?GLdouble,Green:?GLdouble,Blue:?GLdouble>>).
%% @doc
%% See {@link color3b/3}
--spec color3f(Red, Green, Blue) -> ok when Red :: float(),Green :: float(),Blue :: float().
+-spec color3f(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float().
color3f(Red,Green,Blue) ->
cast(5136, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat>>).
%% @doc
%% See {@link color3b/3}
--spec color3i(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3i(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3i(Red,Green,Blue) ->
cast(5137, <<Red:?GLint,Green:?GLint,Blue:?GLint>>).
%% @doc
%% See {@link color3b/3}
--spec color3s(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3s(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3s(Red,Green,Blue) ->
cast(5138, <<Red:?GLshort,Green:?GLshort,Blue:?GLshort>>).
%% @doc
%% See {@link color3b/3}
--spec color3ub(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3ub(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3ub(Red,Green,Blue) ->
cast(5139, <<Red:?GLubyte,Green:?GLubyte,Blue:?GLubyte>>).
%% @doc
%% See {@link color3b/3}
--spec color3ui(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3ui(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3ui(Red,Green,Blue) ->
cast(5140, <<Red:?GLuint,Green:?GLuint,Blue:?GLuint>>).
%% @doc
%% See {@link color3b/3}
--spec color3us(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3us(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3us(Red,Green,Blue) ->
cast(5141, <<Red:?GLushort,Green:?GLushort,Blue:?GLushort>>).
%% @doc
%% See {@link color3b/3}
--spec color4b(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4b(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4b(Red,Green,Blue,Alpha) ->
cast(5142, <<Red:?GLbyte,Green:?GLbyte,Blue:?GLbyte,Alpha:?GLbyte>>).
%% @doc
%% See {@link color3b/3}
--spec color4d(Red, Green, Blue, Alpha) -> ok when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
+-spec color4d(Red, Green, Blue, Alpha) -> 'ok' when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
color4d(Red,Green,Blue,Alpha) ->
cast(5143, <<Red:?GLdouble,Green:?GLdouble,Blue:?GLdouble,Alpha:?GLdouble>>).
%% @doc
%% See {@link color3b/3}
--spec color4f(Red, Green, Blue, Alpha) -> ok when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
+-spec color4f(Red, Green, Blue, Alpha) -> 'ok' when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
color4f(Red,Green,Blue,Alpha) ->
cast(5144, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat,Alpha:?GLfloat>>).
%% @doc
%% See {@link color3b/3}
--spec color4i(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4i(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4i(Red,Green,Blue,Alpha) ->
cast(5145, <<Red:?GLint,Green:?GLint,Blue:?GLint,Alpha:?GLint>>).
%% @doc
%% See {@link color3b/3}
--spec color4s(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4s(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4s(Red,Green,Blue,Alpha) ->
cast(5146, <<Red:?GLshort,Green:?GLshort,Blue:?GLshort,Alpha:?GLshort>>).
%% @doc
%% See {@link color3b/3}
--spec color4ub(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4ub(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4ub(Red,Green,Blue,Alpha) ->
cast(5147, <<Red:?GLubyte,Green:?GLubyte,Blue:?GLubyte,Alpha:?GLubyte>>).
%% @doc
%% See {@link color3b/3}
--spec color4ui(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4ui(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4ui(Red,Green,Blue,Alpha) ->
cast(5148, <<Red:?GLuint,Green:?GLuint,Blue:?GLuint,Alpha:?GLuint>>).
%% @doc
%% See {@link color3b/3}
--spec color4us(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4us(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4us(Red,Green,Blue,Alpha) ->
cast(5149, <<Red:?GLushort,Green:?GLushort,Blue:?GLushort,Alpha:?GLushort>>).
%% @equiv color3b(Red,Green,Blue)
--spec color3bv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3bv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3bv({Red,Green,Blue}) -> color3b(Red,Green,Blue).
%% @equiv color3d(Red,Green,Blue)
--spec color3dv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float()}.
+-spec color3dv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}.
color3dv({Red,Green,Blue}) -> color3d(Red,Green,Blue).
%% @equiv color3f(Red,Green,Blue)
--spec color3fv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float()}.
+-spec color3fv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}.
color3fv({Red,Green,Blue}) -> color3f(Red,Green,Blue).
%% @equiv color3i(Red,Green,Blue)
--spec color3iv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3iv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3iv({Red,Green,Blue}) -> color3i(Red,Green,Blue).
%% @equiv color3s(Red,Green,Blue)
--spec color3sv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3sv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3sv({Red,Green,Blue}) -> color3s(Red,Green,Blue).
%% @equiv color3ub(Red,Green,Blue)
--spec color3ubv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3ubv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3ubv({Red,Green,Blue}) -> color3ub(Red,Green,Blue).
%% @equiv color3ui(Red,Green,Blue)
--spec color3uiv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3uiv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3uiv({Red,Green,Blue}) -> color3ui(Red,Green,Blue).
%% @equiv color3us(Red,Green,Blue)
--spec color3usv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3usv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3usv({Red,Green,Blue}) -> color3us(Red,Green,Blue).
%% @equiv color4b(Red,Green,Blue,Alpha)
--spec color4bv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4bv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4bv({Red,Green,Blue,Alpha}) -> color4b(Red,Green,Blue,Alpha).
%% @equiv color4d(Red,Green,Blue,Alpha)
--spec color4dv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float(),Alpha :: float()}.
+-spec color4dv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float(),Alpha :: float()}.
color4dv({Red,Green,Blue,Alpha}) -> color4d(Red,Green,Blue,Alpha).
%% @equiv color4f(Red,Green,Blue,Alpha)
--spec color4fv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float(),Alpha :: float()}.
+-spec color4fv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float(),Alpha :: float()}.
color4fv({Red,Green,Blue,Alpha}) -> color4f(Red,Green,Blue,Alpha).
%% @equiv color4i(Red,Green,Blue,Alpha)
--spec color4iv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4iv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4iv({Red,Green,Blue,Alpha}) -> color4i(Red,Green,Blue,Alpha).
%% @equiv color4s(Red,Green,Blue,Alpha)
--spec color4sv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4sv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4sv({Red,Green,Blue,Alpha}) -> color4s(Red,Green,Blue,Alpha).
%% @equiv color4ub(Red,Green,Blue,Alpha)
--spec color4ubv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4ubv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4ubv({Red,Green,Blue,Alpha}) -> color4ub(Red,Green,Blue,Alpha).
%% @equiv color4ui(Red,Green,Blue,Alpha)
--spec color4uiv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4uiv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4uiv({Red,Green,Blue,Alpha}) -> color4ui(Red,Green,Blue,Alpha).
%% @equiv color4us(Red,Green,Blue,Alpha)
--spec color4usv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4usv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4usv({Red,Green,Blue,Alpha}) -> color4us(Red,Green,Blue,Alpha).
%% @doc Set the current texture coordinates
@@ -3496,162 +3496,162 @@ color4usv({Red,Green,Blue,Alpha}) -> color4us(Red,Green,Blue,Alpha).
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml">external</a> documentation.
--spec texCoord1d(S) -> ok when S :: float().
+-spec texCoord1d(S) -> 'ok' when S :: float().
texCoord1d(S) ->
cast(5150, <<S:?GLdouble>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord1f(S) -> ok when S :: float().
+-spec texCoord1f(S) -> 'ok' when S :: float().
texCoord1f(S) ->
cast(5151, <<S:?GLfloat>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord1i(S) -> ok when S :: integer().
+-spec texCoord1i(S) -> 'ok' when S :: integer().
texCoord1i(S) ->
cast(5152, <<S:?GLint>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord1s(S) -> ok when S :: integer().
+-spec texCoord1s(S) -> 'ok' when S :: integer().
texCoord1s(S) ->
cast(5153, <<S:?GLshort>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord2d(S, T) -> ok when S :: float(),T :: float().
+-spec texCoord2d(S, T) -> 'ok' when S :: float(),T :: float().
texCoord2d(S,T) ->
cast(5154, <<S:?GLdouble,T:?GLdouble>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord2f(S, T) -> ok when S :: float(),T :: float().
+-spec texCoord2f(S, T) -> 'ok' when S :: float(),T :: float().
texCoord2f(S,T) ->
cast(5155, <<S:?GLfloat,T:?GLfloat>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord2i(S, T) -> ok when S :: integer(),T :: integer().
+-spec texCoord2i(S, T) -> 'ok' when S :: integer(),T :: integer().
texCoord2i(S,T) ->
cast(5156, <<S:?GLint,T:?GLint>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord2s(S, T) -> ok when S :: integer(),T :: integer().
+-spec texCoord2s(S, T) -> 'ok' when S :: integer(),T :: integer().
texCoord2s(S,T) ->
cast(5157, <<S:?GLshort,T:?GLshort>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord3d(S, T, R) -> ok when S :: float(),T :: float(),R :: float().
+-spec texCoord3d(S, T, R) -> 'ok' when S :: float(),T :: float(),R :: float().
texCoord3d(S,T,R) ->
cast(5158, <<S:?GLdouble,T:?GLdouble,R:?GLdouble>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord3f(S, T, R) -> ok when S :: float(),T :: float(),R :: float().
+-spec texCoord3f(S, T, R) -> 'ok' when S :: float(),T :: float(),R :: float().
texCoord3f(S,T,R) ->
cast(5159, <<S:?GLfloat,T:?GLfloat,R:?GLfloat>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord3i(S, T, R) -> ok when S :: integer(),T :: integer(),R :: integer().
+-spec texCoord3i(S, T, R) -> 'ok' when S :: integer(),T :: integer(),R :: integer().
texCoord3i(S,T,R) ->
cast(5160, <<S:?GLint,T:?GLint,R:?GLint>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord3s(S, T, R) -> ok when S :: integer(),T :: integer(),R :: integer().
+-spec texCoord3s(S, T, R) -> 'ok' when S :: integer(),T :: integer(),R :: integer().
texCoord3s(S,T,R) ->
cast(5161, <<S:?GLshort,T:?GLshort,R:?GLshort>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord4d(S, T, R, Q) -> ok when S :: float(),T :: float(),R :: float(),Q :: float().
+-spec texCoord4d(S, T, R, Q) -> 'ok' when S :: float(),T :: float(),R :: float(),Q :: float().
texCoord4d(S,T,R,Q) ->
cast(5162, <<S:?GLdouble,T:?GLdouble,R:?GLdouble,Q:?GLdouble>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord4f(S, T, R, Q) -> ok when S :: float(),T :: float(),R :: float(),Q :: float().
+-spec texCoord4f(S, T, R, Q) -> 'ok' when S :: float(),T :: float(),R :: float(),Q :: float().
texCoord4f(S,T,R,Q) ->
cast(5163, <<S:?GLfloat,T:?GLfloat,R:?GLfloat,Q:?GLfloat>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord4i(S, T, R, Q) -> ok when S :: integer(),T :: integer(),R :: integer(),Q :: integer().
+-spec texCoord4i(S, T, R, Q) -> 'ok' when S :: integer(),T :: integer(),R :: integer(),Q :: integer().
texCoord4i(S,T,R,Q) ->
cast(5164, <<S:?GLint,T:?GLint,R:?GLint,Q:?GLint>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord4s(S, T, R, Q) -> ok when S :: integer(),T :: integer(),R :: integer(),Q :: integer().
+-spec texCoord4s(S, T, R, Q) -> 'ok' when S :: integer(),T :: integer(),R :: integer(),Q :: integer().
texCoord4s(S,T,R,Q) ->
cast(5165, <<S:?GLshort,T:?GLshort,R:?GLshort,Q:?GLshort>>).
%% @equiv texCoord1d(S)
--spec texCoord1dv(V) -> ok when V :: {S :: float()}.
+-spec texCoord1dv(V) -> 'ok' when V :: {S :: float()}.
texCoord1dv({S}) -> texCoord1d(S).
%% @equiv texCoord1f(S)
--spec texCoord1fv(V) -> ok when V :: {S :: float()}.
+-spec texCoord1fv(V) -> 'ok' when V :: {S :: float()}.
texCoord1fv({S}) -> texCoord1f(S).
%% @equiv texCoord1i(S)
--spec texCoord1iv(V) -> ok when V :: {S :: integer()}.
+-spec texCoord1iv(V) -> 'ok' when V :: {S :: integer()}.
texCoord1iv({S}) -> texCoord1i(S).
%% @equiv texCoord1s(S)
--spec texCoord1sv(V) -> ok when V :: {S :: integer()}.
+-spec texCoord1sv(V) -> 'ok' when V :: {S :: integer()}.
texCoord1sv({S}) -> texCoord1s(S).
%% @equiv texCoord2d(S,T)
--spec texCoord2dv(V) -> ok when V :: {S :: float(),T :: float()}.
+-spec texCoord2dv(V) -> 'ok' when V :: {S :: float(),T :: float()}.
texCoord2dv({S,T}) -> texCoord2d(S,T).
%% @equiv texCoord2f(S,T)
--spec texCoord2fv(V) -> ok when V :: {S :: float(),T :: float()}.
+-spec texCoord2fv(V) -> 'ok' when V :: {S :: float(),T :: float()}.
texCoord2fv({S,T}) -> texCoord2f(S,T).
%% @equiv texCoord2i(S,T)
--spec texCoord2iv(V) -> ok when V :: {S :: integer(),T :: integer()}.
+-spec texCoord2iv(V) -> 'ok' when V :: {S :: integer(),T :: integer()}.
texCoord2iv({S,T}) -> texCoord2i(S,T).
%% @equiv texCoord2s(S,T)
--spec texCoord2sv(V) -> ok when V :: {S :: integer(),T :: integer()}.
+-spec texCoord2sv(V) -> 'ok' when V :: {S :: integer(),T :: integer()}.
texCoord2sv({S,T}) -> texCoord2s(S,T).
%% @equiv texCoord3d(S,T,R)
--spec texCoord3dv(V) -> ok when V :: {S :: float(),T :: float(),R :: float()}.
+-spec texCoord3dv(V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float()}.
texCoord3dv({S,T,R}) -> texCoord3d(S,T,R).
%% @equiv texCoord3f(S,T,R)
--spec texCoord3fv(V) -> ok when V :: {S :: float(),T :: float(),R :: float()}.
+-spec texCoord3fv(V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float()}.
texCoord3fv({S,T,R}) -> texCoord3f(S,T,R).
%% @equiv texCoord3i(S,T,R)
--spec texCoord3iv(V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer()}.
+-spec texCoord3iv(V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer()}.
texCoord3iv({S,T,R}) -> texCoord3i(S,T,R).
%% @equiv texCoord3s(S,T,R)
--spec texCoord3sv(V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer()}.
+-spec texCoord3sv(V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer()}.
texCoord3sv({S,T,R}) -> texCoord3s(S,T,R).
%% @equiv texCoord4d(S,T,R,Q)
--spec texCoord4dv(V) -> ok when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
+-spec texCoord4dv(V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
texCoord4dv({S,T,R,Q}) -> texCoord4d(S,T,R,Q).
%% @equiv texCoord4f(S,T,R,Q)
--spec texCoord4fv(V) -> ok when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
+-spec texCoord4fv(V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
texCoord4fv({S,T,R,Q}) -> texCoord4f(S,T,R,Q).
%% @equiv texCoord4i(S,T,R,Q)
--spec texCoord4iv(V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
+-spec texCoord4iv(V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
texCoord4iv({S,T,R,Q}) -> texCoord4i(S,T,R,Q).
%% @equiv texCoord4s(S,T,R,Q)
--spec texCoord4sv(V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
+-spec texCoord4sv(V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
texCoord4sv({S,T,R,Q}) -> texCoord4s(S,T,R,Q).
%% @doc Specify the raster position for pixel operations
@@ -3696,122 +3696,122 @@ texCoord4sv({S,T,R,Q}) -> texCoord4s(S,T,R,Q).
%% initial value.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml">external</a> documentation.
--spec rasterPos2d(X, Y) -> ok when X :: float(),Y :: float().
+-spec rasterPos2d(X, Y) -> 'ok' when X :: float(),Y :: float().
rasterPos2d(X,Y) ->
cast(5166, <<X:?GLdouble,Y:?GLdouble>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos2f(X, Y) -> ok when X :: float(),Y :: float().
+-spec rasterPos2f(X, Y) -> 'ok' when X :: float(),Y :: float().
rasterPos2f(X,Y) ->
cast(5167, <<X:?GLfloat,Y:?GLfloat>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos2i(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec rasterPos2i(X, Y) -> 'ok' when X :: integer(),Y :: integer().
rasterPos2i(X,Y) ->
cast(5168, <<X:?GLint,Y:?GLint>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos2s(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec rasterPos2s(X, Y) -> 'ok' when X :: integer(),Y :: integer().
rasterPos2s(X,Y) ->
cast(5169, <<X:?GLshort,Y:?GLshort>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos3d(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec rasterPos3d(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
rasterPos3d(X,Y,Z) ->
cast(5170, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos3f(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec rasterPos3f(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
rasterPos3f(X,Y,Z) ->
cast(5171, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos3i(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec rasterPos3i(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
rasterPos3i(X,Y,Z) ->
cast(5172, <<X:?GLint,Y:?GLint,Z:?GLint>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos3s(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec rasterPos3s(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
rasterPos3s(X,Y,Z) ->
cast(5173, <<X:?GLshort,Y:?GLshort,Z:?GLshort>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos4d(X, Y, Z, W) -> ok when X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec rasterPos4d(X, Y, Z, W) -> 'ok' when X :: float(),Y :: float(),Z :: float(),W :: float().
rasterPos4d(X,Y,Z,W) ->
cast(5174, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos4f(X, Y, Z, W) -> ok when X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec rasterPos4f(X, Y, Z, W) -> 'ok' when X :: float(),Y :: float(),Z :: float(),W :: float().
rasterPos4f(X,Y,Z,W) ->
cast(5175, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos4i(X, Y, Z, W) -> ok when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec rasterPos4i(X, Y, Z, W) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
rasterPos4i(X,Y,Z,W) ->
cast(5176, <<X:?GLint,Y:?GLint,Z:?GLint,W:?GLint>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos4s(X, Y, Z, W) -> ok when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec rasterPos4s(X, Y, Z, W) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
rasterPos4s(X,Y,Z,W) ->
cast(5177, <<X:?GLshort,Y:?GLshort,Z:?GLshort,W:?GLshort>>).
%% @equiv rasterPos2d(X,Y)
--spec rasterPos2dv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec rasterPos2dv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
rasterPos2dv({X,Y}) -> rasterPos2d(X,Y).
%% @equiv rasterPos2f(X,Y)
--spec rasterPos2fv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec rasterPos2fv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
rasterPos2fv({X,Y}) -> rasterPos2f(X,Y).
%% @equiv rasterPos2i(X,Y)
--spec rasterPos2iv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec rasterPos2iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
rasterPos2iv({X,Y}) -> rasterPos2i(X,Y).
%% @equiv rasterPos2s(X,Y)
--spec rasterPos2sv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec rasterPos2sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
rasterPos2sv({X,Y}) -> rasterPos2s(X,Y).
%% @equiv rasterPos3d(X,Y,Z)
--spec rasterPos3dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec rasterPos3dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
rasterPos3dv({X,Y,Z}) -> rasterPos3d(X,Y,Z).
%% @equiv rasterPos3f(X,Y,Z)
--spec rasterPos3fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec rasterPos3fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
rasterPos3fv({X,Y,Z}) -> rasterPos3f(X,Y,Z).
%% @equiv rasterPos3i(X,Y,Z)
--spec rasterPos3iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec rasterPos3iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
rasterPos3iv({X,Y,Z}) -> rasterPos3i(X,Y,Z).
%% @equiv rasterPos3s(X,Y,Z)
--spec rasterPos3sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec rasterPos3sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
rasterPos3sv({X,Y,Z}) -> rasterPos3s(X,Y,Z).
%% @equiv rasterPos4d(X,Y,Z,W)
--spec rasterPos4dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec rasterPos4dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
rasterPos4dv({X,Y,Z,W}) -> rasterPos4d(X,Y,Z,W).
%% @equiv rasterPos4f(X,Y,Z,W)
--spec rasterPos4fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec rasterPos4fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
rasterPos4fv({X,Y,Z,W}) -> rasterPos4f(X,Y,Z,W).
%% @equiv rasterPos4i(X,Y,Z,W)
--spec rasterPos4iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec rasterPos4iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
rasterPos4iv({X,Y,Z,W}) -> rasterPos4i(X,Y,Z,W).
%% @equiv rasterPos4s(X,Y,Z,W)
--spec rasterPos4sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec rasterPos4sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
rasterPos4sv({X,Y,Z,W}) -> rasterPos4s(X,Y,Z,W).
%% @doc Draw a rectangle
@@ -3828,49 +3828,49 @@ rasterPos4sv({X,Y,Z,W}) -> rasterPos4s(X,Y,Z,W).
%% the rectangle is constructed with a counterclockwise winding.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRect.xml">external</a> documentation.
--spec rectd(X1, Y1, X2, Y2) -> ok when X1 :: float(),Y1 :: float(),X2 :: float(),Y2 :: float().
+-spec rectd(X1, Y1, X2, Y2) -> 'ok' when X1 :: float(),Y1 :: float(),X2 :: float(),Y2 :: float().
rectd(X1,Y1,X2,Y2) ->
cast(5178, <<X1:?GLdouble,Y1:?GLdouble,X2:?GLdouble,Y2:?GLdouble>>).
%% @doc
%% See {@link rectd/4}
--spec rectf(X1, Y1, X2, Y2) -> ok when X1 :: float(),Y1 :: float(),X2 :: float(),Y2 :: float().
+-spec rectf(X1, Y1, X2, Y2) -> 'ok' when X1 :: float(),Y1 :: float(),X2 :: float(),Y2 :: float().
rectf(X1,Y1,X2,Y2) ->
cast(5179, <<X1:?GLfloat,Y1:?GLfloat,X2:?GLfloat,Y2:?GLfloat>>).
%% @doc
%% See {@link rectd/4}
--spec recti(X1, Y1, X2, Y2) -> ok when X1 :: integer(),Y1 :: integer(),X2 :: integer(),Y2 :: integer().
+-spec recti(X1, Y1, X2, Y2) -> 'ok' when X1 :: integer(),Y1 :: integer(),X2 :: integer(),Y2 :: integer().
recti(X1,Y1,X2,Y2) ->
cast(5180, <<X1:?GLint,Y1:?GLint,X2:?GLint,Y2:?GLint>>).
%% @doc
%% See {@link rectd/4}
--spec rects(X1, Y1, X2, Y2) -> ok when X1 :: integer(),Y1 :: integer(),X2 :: integer(),Y2 :: integer().
+-spec rects(X1, Y1, X2, Y2) -> 'ok' when X1 :: integer(),Y1 :: integer(),X2 :: integer(),Y2 :: integer().
rects(X1,Y1,X2,Y2) ->
cast(5181, <<X1:?GLshort,Y1:?GLshort,X2:?GLshort,Y2:?GLshort>>).
%% @doc
%% See {@link rectd/4}
--spec rectdv(V1, V2) -> ok when V1 :: {float(),float()},V2 :: {float(),float()}.
+-spec rectdv(V1, V2) -> 'ok' when V1 :: {float(),float()},V2 :: {float(),float()}.
rectdv({V1,V2},{V1,V2}) ->
cast(5182, <<V1:?GLdouble,V2:?GLdouble,V1:?GLdouble,V2:?GLdouble>>).
%% @doc
%% See {@link rectd/4}
--spec rectfv(V1, V2) -> ok when V1 :: {float(),float()},V2 :: {float(),float()}.
+-spec rectfv(V1, V2) -> 'ok' when V1 :: {float(),float()},V2 :: {float(),float()}.
rectfv({V1,V2},{V1,V2}) ->
cast(5183, <<V1:?GLfloat,V2:?GLfloat,V1:?GLfloat,V2:?GLfloat>>).
%% @doc
%% See {@link rectd/4}
--spec rectiv(V1, V2) -> ok when V1 :: {integer(),integer()},V2 :: {integer(),integer()}.
+-spec rectiv(V1, V2) -> 'ok' when V1 :: {integer(),integer()},V2 :: {integer(),integer()}.
rectiv({V1,V2},{V1,V2}) ->
cast(5184, <<V1:?GLint,V2:?GLint,V1:?GLint,V2:?GLint>>).
%% @doc
%% See {@link rectd/4}
--spec rectsv(V1, V2) -> ok when V1 :: {integer(),integer()},V2 :: {integer(),integer()}.
+-spec rectsv(V1, V2) -> 'ok' when V1 :: {integer(),integer()},V2 :: {integer(),integer()}.
rectsv({V1,V2},{V1,V2}) ->
cast(5185, <<V1:?GLshort,V2:?GLshort,V1:?GLshort,V2:?GLshort>>).
@@ -3898,7 +3898,7 @@ rectsv({V1,V2},{V1,V2}) ->
%% , or {@link gl:drawRangeElements/6} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexPointer.xml">external</a> documentation.
--spec vertexPointer(Size, Type, Stride, Ptr) -> ok when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec vertexPointer(Size, Type, Stride, Ptr) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
vertexPointer(Size,Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5186, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
vertexPointer(Size,Type,Stride,Ptr) ->
@@ -3929,7 +3929,7 @@ vertexPointer(Size,Type,Stride,Ptr) ->
%% , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNormalPointer.xml">external</a> documentation.
--spec normalPointer(Type, Stride, Ptr) -> ok when Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec normalPointer(Type, Stride, Ptr) -> 'ok' when Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
normalPointer(Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5188, <<Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
normalPointer(Type,Stride,Ptr) ->
@@ -3961,7 +3961,7 @@ normalPointer(Type,Stride,Ptr) ->
%% , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorPointer.xml">external</a> documentation.
--spec colorPointer(Size, Type, Stride, Ptr) -> ok when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec colorPointer(Size, Type, Stride, Ptr) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
colorPointer(Size,Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5190, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
colorPointer(Size,Type,Stride,Ptr) ->
@@ -3991,7 +3991,7 @@ colorPointer(Size,Type,Stride,Ptr) ->
%% , {@link gl:drawRangeElements/6} , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIndexPointer.xml">external</a> documentation.
--spec indexPointer(Type, Stride, Ptr) -> ok when Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec indexPointer(Type, Stride, Ptr) -> 'ok' when Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
indexPointer(Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5192, <<Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
indexPointer(Type,Stride,Ptr) ->
@@ -4025,7 +4025,7 @@ indexPointer(Type,Stride,Ptr) ->
%% or {@link gl:drawRangeElements/6} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexCoordPointer.xml">external</a> documentation.
--spec texCoordPointer(Size, Type, Stride, Ptr) -> ok when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec texCoordPointer(Size, Type, Stride, Ptr) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
texCoordPointer(Size,Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5194, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
texCoordPointer(Size,Type,Stride,Ptr) ->
@@ -4054,7 +4054,7 @@ texCoordPointer(Size,Type,Stride,Ptr) ->
%% , {@link gl:drawRangeElements/6} , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEdgeFlagPointer.xml">external</a> documentation.
--spec edgeFlagPointer(Stride, Ptr) -> ok when Stride :: integer(),Ptr :: offset()|mem().
+-spec edgeFlagPointer(Stride, Ptr) -> 'ok' when Stride :: integer(),Ptr :: offset()|mem().
edgeFlagPointer(Stride,Ptr) when is_integer(Ptr) ->
cast(5196, <<Stride:?GLsizei,Ptr:?GLuint>>);
edgeFlagPointer(Stride,Ptr) ->
@@ -4082,7 +4082,7 @@ edgeFlagPointer(Stride,Ptr) ->
%% and a call that follows a change to array data may access original data.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glArrayElement.xml">external</a> documentation.
--spec arrayElement(I) -> ok when I :: integer().
+-spec arrayElement(I) -> 'ok' when I :: integer().
arrayElement(I) ->
cast(5198, <<I:?GLint>>).
@@ -4103,7 +4103,7 @@ arrayElement(I) ->
%% after ``gl:drawArrays'' returns. Attributes that aren't modified remain well defined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArrays.xml">external</a> documentation.
--spec drawArrays(Mode, First, Count) -> ok when Mode :: enum(),First :: integer(),Count :: integer().
+-spec drawArrays(Mode, First, Count) -> 'ok' when Mode :: enum(),First :: integer(),Count :: integer().
drawArrays(Mode,First,Count) ->
cast(5199, <<Mode:?GLenum,First:?GLint,Count:?GLsizei>>).
@@ -4125,7 +4125,7 @@ drawArrays(Mode,First,Count) ->
%% values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml">external</a> documentation.
--spec drawElements(Mode, Count, Type, Indices) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem().
+-spec drawElements(Mode, Count, Type, Indices) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem().
drawElements(Mode,Count,Type,Indices) when is_integer(Indices) ->
cast(5200, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint>>);
drawElements(Mode,Count,Type,Indices) ->
@@ -4153,7 +4153,7 @@ drawElements(Mode,Count,Type,Indices) ->
%% which follows is located at the first possible floating-point aligned address.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glInterleavedArrays.xml">external</a> documentation.
--spec interleavedArrays(Format, Stride, Pointer) -> ok when Format :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec interleavedArrays(Format, Stride, Pointer) -> 'ok' when Format :: enum(),Stride :: integer(),Pointer :: offset()|mem().
interleavedArrays(Format,Stride,Pointer) when is_integer(Pointer) ->
cast(5202, <<Format:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
interleavedArrays(Format,Stride,Pointer) ->
@@ -4187,7 +4187,7 @@ interleavedArrays(Format,Stride,Pointer) ->
%% and `?GL_SMOOTH', respectively.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShadeModel.xml">external</a> documentation.
--spec shadeModel(Mode) -> ok when Mode :: enum().
+-spec shadeModel(Mode) -> 'ok' when Mode :: enum().
shadeModel(Mode) ->
cast(5204, <<Mode:?GLenum>>).
@@ -4281,26 +4281,26 @@ shadeModel(Mode) ->
%% attenuation factors are (1, 0, 0), resulting in no attenuation.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLight.xml">external</a> documentation.
--spec lightf(Light, Pname, Param) -> ok when Light :: enum(),Pname :: enum(),Param :: float().
+-spec lightf(Light, Pname, Param) -> 'ok' when Light :: enum(),Pname :: enum(),Param :: float().
lightf(Light,Pname,Param) ->
cast(5205, <<Light:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link lightf/3}
--spec lighti(Light, Pname, Param) -> ok when Light :: enum(),Pname :: enum(),Param :: integer().
+-spec lighti(Light, Pname, Param) -> 'ok' when Light :: enum(),Pname :: enum(),Param :: integer().
lighti(Light,Pname,Param) ->
cast(5206, <<Light:?GLenum,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link lightf/3}
--spec lightfv(Light, Pname, Params) -> ok when Light :: enum(),Pname :: enum(),Params :: tuple().
+-spec lightfv(Light, Pname, Params) -> 'ok' when Light :: enum(),Pname :: enum(),Params :: tuple().
lightfv(Light,Pname,Params) ->
cast(5207, <<Light:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link lightf/3}
--spec lightiv(Light, Pname, Params) -> ok when Light :: enum(),Pname :: enum(),Params :: tuple().
+-spec lightiv(Light, Pname, Params) -> 'ok' when Light :: enum(),Pname :: enum(),Params :: tuple().
lightiv(Light,Pname,Params) ->
cast(5208, <<Light:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -4452,26 +4452,26 @@ getLightiv(Light,Pname) ->
%% as in the RGBA case, determine how much above ambient the resulting index is.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLightModel.xml">external</a> documentation.
--spec lightModelf(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec lightModelf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
lightModelf(Pname,Param) ->
cast(5211, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link lightModelf/2}
--spec lightModeli(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec lightModeli(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
lightModeli(Pname,Param) ->
cast(5212, <<Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link lightModelf/2}
--spec lightModelfv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec lightModelfv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
lightModelfv(Pname,Params) ->
cast(5213, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link lightModelf/2}
--spec lightModeliv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec lightModeliv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
lightModeliv(Pname,Params) ->
cast(5214, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
@@ -4539,26 +4539,26 @@ lightModeliv(Pname,Params) ->
%% of color index lighting.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMaterial.xml">external</a> documentation.
--spec materialf(Face, Pname, Param) -> ok when Face :: enum(),Pname :: enum(),Param :: float().
+-spec materialf(Face, Pname, Param) -> 'ok' when Face :: enum(),Pname :: enum(),Param :: float().
materialf(Face,Pname,Param) ->
cast(5215, <<Face:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link materialf/3}
--spec materiali(Face, Pname, Param) -> ok when Face :: enum(),Pname :: enum(),Param :: integer().
+-spec materiali(Face, Pname, Param) -> 'ok' when Face :: enum(),Pname :: enum(),Param :: integer().
materiali(Face,Pname,Param) ->
cast(5216, <<Face:?GLenum,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link materialf/3}
--spec materialfv(Face, Pname, Params) -> ok when Face :: enum(),Pname :: enum(),Params :: tuple().
+-spec materialfv(Face, Pname, Params) -> 'ok' when Face :: enum(),Pname :: enum(),Params :: tuple().
materialfv(Face,Pname,Params) ->
cast(5217, <<Face:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link materialf/3}
--spec materialiv(Face, Pname, Params) -> ok when Face :: enum(),Pname :: enum(),Params :: tuple().
+-spec materialiv(Face, Pname, Params) -> 'ok' when Face :: enum(),Pname :: enum(),Params :: tuple().
materialiv(Face,Pname,Params) ->
cast(5218, <<Face:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -4629,7 +4629,7 @@ getMaterialiv(Face,Pname) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorMaterial.xml">external</a> documentation.
--spec colorMaterial(Face, Mode) -> ok when Face :: enum(),Mode :: enum().
+-spec colorMaterial(Face, Mode) -> 'ok' when Face :: enum(),Mode :: enum().
colorMaterial(Face,Mode) ->
cast(5221, <<Face:?GLenum,Mode:?GLenum>>).
@@ -4651,7 +4651,7 @@ colorMaterial(Face,Mode) ->
%% the resulting image about the current raster position.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPixelZoom.xml">external</a> documentation.
--spec pixelZoom(Xfactor, Yfactor) -> ok when Xfactor :: float(),Yfactor :: float().
+-spec pixelZoom(Xfactor, Yfactor) -> 'ok' when Xfactor :: float(),Yfactor :: float().
pixelZoom(Xfactor,Yfactor) ->
cast(5222, <<Xfactor:?GLfloat,Yfactor:?GLfloat>>).
@@ -4839,13 +4839,13 @@ pixelZoom(Xfactor,Yfactor) ->
%% Boolean parameters are set to false if `Param' is 0 and true otherwise.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPixelStore.xml">external</a> documentation.
--spec pixelStoref(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec pixelStoref(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
pixelStoref(Pname,Param) ->
cast(5223, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link pixelStoref/2}
--spec pixelStorei(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec pixelStorei(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
pixelStorei(Pname,Param) ->
cast(5224, <<Pname:?GLenum,Param:?GLint>>).
@@ -4997,13 +4997,13 @@ pixelStorei(Pname,Param) ->
%% is converted to floating point before being assigned to real-valued parameters.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPixelTransfer.xml">external</a> documentation.
--spec pixelTransferf(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec pixelTransferf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
pixelTransferf(Pname,Param) ->
cast(5225, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link pixelTransferf/2}
--spec pixelTransferi(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec pixelTransferi(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
pixelTransferi(Pname,Param) ->
cast(5226, <<Pname:?GLenum,Param:?GLint>>).
@@ -5086,21 +5086,21 @@ pixelTransferi(Pname,Param) ->
%% <td> A </td><td> 1 </td><td> 0 </td></tr></tbody></table>
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPixelMap.xml">external</a> documentation.
--spec pixelMapfv(Map, Mapsize, Values) -> ok when Map :: enum(),Mapsize :: integer(),Values :: binary().
+-spec pixelMapfv(Map, Mapsize, Values) -> 'ok' when Map :: enum(),Mapsize :: integer(),Values :: binary().
pixelMapfv(Map,Mapsize,Values) ->
send_bin(Values),
cast(5227, <<Map:?GLenum,Mapsize:?GLsizei>>).
%% @doc
%% See {@link pixelMapfv/3}
--spec pixelMapuiv(Map, Mapsize, Values) -> ok when Map :: enum(),Mapsize :: integer(),Values :: binary().
+-spec pixelMapuiv(Map, Mapsize, Values) -> 'ok' when Map :: enum(),Mapsize :: integer(),Values :: binary().
pixelMapuiv(Map,Mapsize,Values) ->
send_bin(Values),
cast(5228, <<Map:?GLenum,Mapsize:?GLsizei>>).
%% @doc
%% See {@link pixelMapfv/3}
--spec pixelMapusv(Map, Mapsize, Values) -> ok when Map :: enum(),Mapsize :: integer(),Values :: binary().
+-spec pixelMapusv(Map, Mapsize, Values) -> 'ok' when Map :: enum(),Mapsize :: integer(),Values :: binary().
pixelMapusv(Map,Mapsize,Values) ->
send_bin(Values),
cast(5229, <<Map:?GLenum,Mapsize:?GLsizei>>).
@@ -5129,21 +5129,21 @@ pixelMapusv(Map,Mapsize,Values) ->
%% symbolic constant.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetPixelMap.xml">external</a> documentation.
--spec getPixelMapfv(Map, Values) -> ok when Map :: enum(),Values :: mem().
+-spec getPixelMapfv(Map, Values) -> 'ok' when Map :: enum(),Values :: mem().
getPixelMapfv(Map,Values) ->
send_bin(Values),
call(5230, <<Map:?GLenum>>).
%% @doc
%% See {@link getPixelMapfv/2}
--spec getPixelMapuiv(Map, Values) -> ok when Map :: enum(),Values :: mem().
+-spec getPixelMapuiv(Map, Values) -> 'ok' when Map :: enum(),Values :: mem().
getPixelMapuiv(Map,Values) ->
send_bin(Values),
call(5231, <<Map:?GLenum>>).
%% @doc
%% See {@link getPixelMapfv/2}
--spec getPixelMapusv(Map, Values) -> ok when Map :: enum(),Values :: mem().
+-spec getPixelMapusv(Map, Values) -> 'ok' when Map :: enum(),Values :: mem().
getPixelMapusv(Map,Values) ->
send_bin(Values),
call(5232, <<Map:?GLenum>>).
@@ -5191,7 +5191,7 @@ getPixelMapusv(Map,Values) ->
%% or index.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBitmap.xml">external</a> documentation.
--spec bitmap(Width, Height, Xorig, Yorig, Xmove, Ymove, Bitmap) -> ok when Width :: integer(),Height :: integer(),Xorig :: float(),Yorig :: float(),Xmove :: float(),Ymove :: float(),Bitmap :: offset()|mem().
+-spec bitmap(Width, Height, Xorig, Yorig, Xmove, Ymove, Bitmap) -> 'ok' when Width :: integer(),Height :: integer(),Xorig :: float(),Yorig :: float(),Xmove :: float(),Ymove :: float(),Bitmap :: offset()|mem().
bitmap(Width,Height,Xorig,Yorig,Xmove,Ymove,Bitmap) when is_integer(Bitmap) ->
cast(5233, <<Width:?GLsizei,Height:?GLsizei,Xorig:?GLfloat,Yorig:?GLfloat,Xmove:?GLfloat,Ymove:?GLfloat,Bitmap:?GLuint>>);
bitmap(Width,Height,Xorig,Yorig,Xmove,Ymove,Bitmap) ->
@@ -5292,7 +5292,7 @@ bitmap(Width,Height,Xorig,Yorig,Xmove,Ymove,Bitmap) ->
%% data is written into memory. See {@link gl:pixelStoref/2} for a description.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml">external</a> documentation.
--spec readPixels(X, Y, Width, Height, Format, Type, Pixels) -> ok when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: mem().
+-spec readPixels(X, Y, Width, Height, Format, Type, Pixels) -> 'ok' when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: mem().
readPixels(X,Y,Width,Height,Format,Type,Pixels) ->
send_bin(Pixels),
call(5235, <<X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum>>).
@@ -5537,7 +5537,7 @@ readPixels(X,Y,Width,Height,Format,Type,Pixels) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawPixels.xml">external</a> documentation.
--spec drawPixels(Width, Height, Format, Type, Pixels) -> ok when Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec drawPixels(Width, Height, Format, Type, Pixels) -> 'ok' when Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
drawPixels(Width,Height,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5236, <<Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
drawPixels(Width,Height,Format,Type,Pixels) ->
@@ -5644,7 +5644,7 @@ drawPixels(Width,Height,Format,Type,Pixels) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyPixels.xml">external</a> documentation.
--spec copyPixels(X, Y, Width, Height, Type) -> ok when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Type :: enum().
+-spec copyPixels(X, Y, Width, Height, Type) -> 'ok' when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Type :: enum().
copyPixels(X,Y,Width,Height,Type) ->
cast(5238, <<X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei,Type:?GLenum>>).
@@ -5707,7 +5707,7 @@ copyPixels(X,Y,Width,Height,Type) ->
%% `?GL_ALWAYS': Always passes.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilFunc.xml">external</a> documentation.
--spec stencilFunc(Func, Ref, Mask) -> ok when Func :: enum(),Ref :: integer(),Mask :: integer().
+-spec stencilFunc(Func, Ref, Mask) -> 'ok' when Func :: enum(),Ref :: integer(),Mask :: integer().
stencilFunc(Func,Ref,Mask) ->
cast(5239, <<Func:?GLenum,Ref:?GLint,Mask:?GLuint>>).
@@ -5725,7 +5725,7 @@ stencilFunc(Func,Ref,Mask) ->
%% to set front and back stencil writemasks to different values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilMask.xml">external</a> documentation.
--spec stencilMask(Mask) -> ok when Mask :: integer().
+-spec stencilMask(Mask) -> 'ok' when Mask :: integer().
stencilMask(Mask) ->
cast(5240, <<Mask:?GLuint>>).
@@ -5786,7 +5786,7 @@ stencilMask(Mask) ->
%% stencil action when the stencil test fails and passes, respectively.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilOp.xml">external</a> documentation.
--spec stencilOp(Fail, Zfail, Zpass) -> ok when Fail :: enum(),Zfail :: enum(),Zpass :: enum().
+-spec stencilOp(Fail, Zfail, Zpass) -> 'ok' when Fail :: enum(),Zfail :: enum(),Zpass :: enum().
stencilOp(Fail,Zfail,Zpass) ->
cast(5241, <<Fail:?GLenum,Zfail:?GLenum,Zpass:?GLenum>>).
@@ -5797,7 +5797,7 @@ stencilOp(Fail,Zfail,Zpass) ->
%% buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearStencil.xml">external</a> documentation.
--spec clearStencil(S) -> ok when S :: integer().
+-spec clearStencil(S) -> 'ok' when S :: integer().
clearStencil(S) ->
cast(5242, <<S:?GLint>>).
@@ -5876,39 +5876,39 @@ clearStencil(S) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml">external</a> documentation.
--spec texGend(Coord, Pname, Param) -> ok when Coord :: enum(),Pname :: enum(),Param :: float().
+-spec texGend(Coord, Pname, Param) -> 'ok' when Coord :: enum(),Pname :: enum(),Param :: float().
texGend(Coord,Pname,Param) ->
cast(5243, <<Coord:?GLenum,Pname:?GLenum,Param:?GLdouble>>).
%% @doc
%% See {@link texGend/3}
--spec texGenf(Coord, Pname, Param) -> ok when Coord :: enum(),Pname :: enum(),Param :: float().
+-spec texGenf(Coord, Pname, Param) -> 'ok' when Coord :: enum(),Pname :: enum(),Param :: float().
texGenf(Coord,Pname,Param) ->
cast(5244, <<Coord:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link texGend/3}
--spec texGeni(Coord, Pname, Param) -> ok when Coord :: enum(),Pname :: enum(),Param :: integer().
+-spec texGeni(Coord, Pname, Param) -> 'ok' when Coord :: enum(),Pname :: enum(),Param :: integer().
texGeni(Coord,Pname,Param) ->
cast(5245, <<Coord:?GLenum,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link texGend/3}
--spec texGendv(Coord, Pname, Params) -> ok when Coord :: enum(),Pname :: enum(),Params :: tuple().
+-spec texGendv(Coord, Pname, Params) -> 'ok' when Coord :: enum(),Pname :: enum(),Params :: tuple().
texGendv(Coord,Pname,Params) ->
cast(5246, <<Coord:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,0:32,
(<< <<C:?GLdouble>> ||C <- tuple_to_list(Params)>>)/binary>>).
%% @doc
%% See {@link texGend/3}
--spec texGenfv(Coord, Pname, Params) -> ok when Coord :: enum(),Pname :: enum(),Params :: tuple().
+-spec texGenfv(Coord, Pname, Params) -> 'ok' when Coord :: enum(),Pname :: enum(),Params :: tuple().
texGenfv(Coord,Pname,Params) ->
cast(5247, <<Coord:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link texGend/3}
--spec texGeniv(Coord, Pname, Params) -> ok when Coord :: enum(),Pname :: enum(),Params :: tuple().
+-spec texGeniv(Coord, Pname, Params) -> 'ok' when Coord :: enum(),Pname :: enum(),Params :: tuple().
texGeniv(Coord,Pname,Params) ->
cast(5248, <<Coord:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -5955,14 +5955,14 @@ getTexGeniv(Coord,Pname) ->
%% @doc glTexEnvf
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexEnvf.xml">external</a> documentation.
--spec texEnvf(Target, Pname, Param) -> ok when Target :: enum(),Pname :: enum(),Param :: float().
+-spec texEnvf(Target, Pname, Param) -> 'ok' when Target :: enum(),Pname :: enum(),Param :: float().
texEnvf(Target,Pname,Param) ->
cast(5252, <<Target:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc glTexEnvi
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexEnvi.xml">external</a> documentation.
--spec texEnvi(Target, Pname, Param) -> ok when Target :: enum(),Pname :: enum(),Param :: integer().
+-spec texEnvi(Target, Pname, Param) -> 'ok' when Target :: enum(),Pname :: enum(),Param :: integer().
texEnvi(Target,Pname,Param) ->
cast(5253, <<Target:?GLenum,Pname:?GLenum,Param:?GLint>>).
@@ -6127,14 +6127,14 @@ texEnvi(Target,Pname,Param) ->
%% replacement. The default value is `?GL_FALSE'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexEnv.xml">external</a> documentation.
--spec texEnvfv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texEnvfv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texEnvfv(Target,Pname,Params) ->
cast(5254, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link texEnvfv/3}
--spec texEnviv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texEnviv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texEnviv(Target,Pname,Params) ->
cast(5255, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -6447,26 +6447,26 @@ getTexEnviv(Target,Pname) ->
%% to `?GL_REPEAT'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexParameter.xml">external</a> documentation.
--spec texParameterf(Target, Pname, Param) -> ok when Target :: enum(),Pname :: enum(),Param :: float().
+-spec texParameterf(Target, Pname, Param) -> 'ok' when Target :: enum(),Pname :: enum(),Param :: float().
texParameterf(Target,Pname,Param) ->
cast(5258, <<Target:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link texParameterf/3}
--spec texParameteri(Target, Pname, Param) -> ok when Target :: enum(),Pname :: enum(),Param :: integer().
+-spec texParameteri(Target, Pname, Param) -> 'ok' when Target :: enum(),Pname :: enum(),Param :: integer().
texParameteri(Target,Pname,Param) ->
cast(5259, <<Target:?GLenum,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link texParameterf/3}
--spec texParameterfv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texParameterfv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texParameterfv(Target,Pname,Params) ->
cast(5260, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link texParameterf/3}
--spec texParameteriv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texParameteriv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texParameteriv(Target,Pname,Params) ->
cast(5261, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -6743,7 +6743,7 @@ getTexLevelParameteriv(Target,Level,Pname) ->
%% comparison.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage1D.xml">external</a> documentation.
--spec texImage1D(Target, Level, InternalFormat, Width, Border, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texImage1D(Target, Level, InternalFormat, Width, Border, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texImage1D(Target,Level,InternalFormat,Width,Border,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5266, <<Target:?GLenum,Level:?GLint,InternalFormat:?GLint,Width:?GLsizei,Border:?GLint,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texImage1D(Target,Level,InternalFormat,Width,Border,Format,Type,Pixels) ->
@@ -6865,7 +6865,7 @@ texImage1D(Target,Level,InternalFormat,Width,Border,Format,Type,Pixels) ->
%% comparison.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml">external</a> documentation.
--spec texImage2D(Target, Level, InternalFormat, Width, Height, Border, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Height :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texImage2D(Target, Level, InternalFormat, Width, Height, Border, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Height :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texImage2D(Target,Level,InternalFormat,Width,Height,Border,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5268, <<Target:?GLenum,Level:?GLint,InternalFormat:?GLint,Width:?GLsizei,Height:?GLsizei,Border:?GLint,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texImage2D(Target,Level,InternalFormat,Width,Height,Border,Format,Type,Pixels) ->
@@ -6910,7 +6910,7 @@ texImage2D(Target,Level,InternalFormat,Width,Height,Border,Format,Type,Pixels) -
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetTexImage.xml">external</a> documentation.
--spec getTexImage(Target, Level, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),Format :: enum(),Type :: enum(),Pixels :: mem().
+-spec getTexImage(Target, Level, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),Format :: enum(),Type :: enum(),Pixels :: mem().
getTexImage(Target,Level,Format,Type,Pixels) ->
send_bin(Pixels),
call(5270, <<Target:?GLenum,Level:?GLint,Format:?GLenum,Type:?GLenum>>).
@@ -6943,7 +6943,7 @@ genTextures(N) ->
%% textures.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTextures.xml">external</a> documentation.
--spec deleteTextures(Textures) -> ok when Textures :: [integer()].
+-spec deleteTextures(Textures) -> 'ok' when Textures :: [integer()].
deleteTextures(Textures) ->
cast(5272, <<(length(Textures)):?GLuint,
(<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+length(Textures)) rem 2)*32)>>).
@@ -6995,7 +6995,7 @@ deleteTextures(Textures) ->
%% , {@link gl:texImage2D/9} , {@link gl:texImage3D/10} or another similar function.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindTexture.xml">external</a> documentation.
--spec bindTexture(Target, Texture) -> ok when Target :: enum(),Texture :: integer().
+-spec bindTexture(Target, Texture) -> 'ok' when Target :: enum(),Texture :: integer().
bindTexture(Target,Texture) ->
cast(5273, <<Target:?GLenum,Texture:?GLuint>>).
@@ -7024,7 +7024,7 @@ bindTexture(Target,Texture) ->
%% priority of a default texture.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPrioritizeTextures.xml">external</a> documentation.
--spec prioritizeTextures(Textures, Priorities) -> ok when Textures :: [integer()],Priorities :: [clamp()].
+-spec prioritizeTextures(Textures, Priorities) -> 'ok' when Textures :: [integer()],Priorities :: [clamp()].
prioritizeTextures(Textures,Priorities) ->
cast(5274, <<(length(Textures)):?GLuint,
(<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+length(Textures)) rem 2)*32),(length(Priorities)):?GLuint,
@@ -7072,7 +7072,7 @@ isTexture(Texture) ->
%% @doc glTexSubImage
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage.xml">external</a> documentation.
--spec texSubImage1D(Target, Level, Xoffset, Width, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Width :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texSubImage1D(Target, Level, Xoffset, Width, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Width :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texSubImage1D(Target,Level,Xoffset,Width,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5277, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Width:?GLsizei,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texSubImage1D(Target,Level,Xoffset,Width,Format,Type,Pixels) ->
@@ -7082,7 +7082,7 @@ texSubImage1D(Target,Level,Xoffset,Width,Format,Type,Pixels) ->
%% @doc glTexSubImage
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage.xml">external</a> documentation.
--spec texSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5279, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,Type,Pixels) ->
@@ -7118,7 +7118,7 @@ texSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,Type,Pixels) ->
%% can be used to accomplish the conversion.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage1D.xml">external</a> documentation.
--spec copyTexImage1D(Target, Level, Internalformat, X, Y, Width, Border) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Border :: integer().
+-spec copyTexImage1D(Target, Level, Internalformat, X, Y, Width, Border) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Border :: integer().
copyTexImage1D(Target,Level,Internalformat,X,Y,Width,Border) ->
cast(5281, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei,Border:?GLint>>).
@@ -7149,7 +7149,7 @@ copyTexImage1D(Target,Level,Internalformat,X,Y,Width,Border) ->
%% can be used to accomplish the conversion.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage2D.xml">external</a> documentation.
--spec copyTexImage2D(Target, Level, Internalformat, X, Y, Width, Height, Border) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Border :: integer().
+-spec copyTexImage2D(Target, Level, Internalformat, X, Y, Width, Height, Border) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Border :: integer().
copyTexImage2D(Target,Level,Internalformat,X,Y,Width,Height,Border) ->
cast(5282, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei,Border:?GLint>>).
@@ -7178,7 +7178,7 @@ copyTexImage2D(Target,Level,Internalformat,X,Y,Width,Height,Border) ->
%% of the specified texture array or to texel values outside the specified subregion.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage1D.xml">external</a> documentation.
--spec copyTexSubImage1D(Target, Level, Xoffset, X, Y, Width) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer().
+-spec copyTexSubImage1D(Target, Level, Xoffset, X, Y, Width) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer().
copyTexSubImage1D(Target,Level,Xoffset,X,Y,Width) ->
cast(5283, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,X:?GLint,Y:?GLint,Width:?GLsizei>>).
@@ -7211,14 +7211,14 @@ copyTexSubImage1D(Target,Level,Xoffset,X,Y,Width) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage2D.xml">external</a> documentation.
--spec copyTexSubImage2D(Target, Level, Xoffset, Yoffset, X, Y, Width, Height) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec copyTexSubImage2D(Target, Level, Xoffset, Yoffset, X, Y, Width, Height) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
copyTexSubImage2D(Target,Level,Xoffset,Yoffset,X,Y,Width,Height) ->
cast(5284, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
%% @doc glMap
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMap.xml">external</a> documentation.
--spec map1d(Target, U1, U2, Stride, Order, Points) -> ok when Target :: enum(),U1 :: float(),U2 :: float(),Stride :: integer(),Order :: integer(),Points :: binary().
+-spec map1d(Target, U1, U2, Stride, Order, Points) -> 'ok' when Target :: enum(),U1 :: float(),U2 :: float(),Stride :: integer(),Order :: integer(),Points :: binary().
map1d(Target,U1,U2,Stride,Order,Points) ->
send_bin(Points),
cast(5285, <<Target:?GLenum,0:32,U1:?GLdouble,U2:?GLdouble,Stride:?GLint,Order:?GLint>>).
@@ -7226,7 +7226,7 @@ map1d(Target,U1,U2,Stride,Order,Points) ->
%% @doc glMap
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMap.xml">external</a> documentation.
--spec map1f(Target, U1, U2, Stride, Order, Points) -> ok when Target :: enum(),U1 :: float(),U2 :: float(),Stride :: integer(),Order :: integer(),Points :: binary().
+-spec map1f(Target, U1, U2, Stride, Order, Points) -> 'ok' when Target :: enum(),U1 :: float(),U2 :: float(),Stride :: integer(),Order :: integer(),Points :: binary().
map1f(Target,U1,U2,Stride,Order,Points) ->
send_bin(Points),
cast(5286, <<Target:?GLenum,U1:?GLfloat,U2:?GLfloat,Stride:?GLint,Order:?GLint>>).
@@ -7234,7 +7234,7 @@ map1f(Target,U1,U2,Stride,Order,Points) ->
%% @doc glMap
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMap.xml">external</a> documentation.
--spec map2d(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> ok when Target :: enum(),U1 :: float(),U2 :: float(),Ustride :: integer(),Uorder :: integer(),V1 :: float(),V2 :: float(),Vstride :: integer(),Vorder :: integer(),Points :: binary().
+-spec map2d(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> 'ok' when Target :: enum(),U1 :: float(),U2 :: float(),Ustride :: integer(),Uorder :: integer(),V1 :: float(),V2 :: float(),Vstride :: integer(),Vorder :: integer(),Points :: binary().
map2d(Target,U1,U2,Ustride,Uorder,V1,V2,Vstride,Vorder,Points) ->
send_bin(Points),
cast(5287, <<Target:?GLenum,0:32,U1:?GLdouble,U2:?GLdouble,Ustride:?GLint,Uorder:?GLint,V1:?GLdouble,V2:?GLdouble,Vstride:?GLint,Vorder:?GLint>>).
@@ -7242,7 +7242,7 @@ map2d(Target,U1,U2,Ustride,Uorder,V1,V2,Vstride,Vorder,Points) ->
%% @doc glMap
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMap.xml">external</a> documentation.
--spec map2f(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> ok when Target :: enum(),U1 :: float(),U2 :: float(),Ustride :: integer(),Uorder :: integer(),V1 :: float(),V2 :: float(),Vstride :: integer(),Vorder :: integer(),Points :: binary().
+-spec map2f(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> 'ok' when Target :: enum(),U1 :: float(),U2 :: float(),Ustride :: integer(),Uorder :: integer(),V1 :: float(),V2 :: float(),Vstride :: integer(),Vorder :: integer(),Points :: binary().
map2f(Target,U1,U2,Ustride,Uorder,V1,V2,Vstride,Vorder,Points) ->
send_bin(Points),
cast(5288, <<Target:?GLenum,U1:?GLfloat,U2:?GLfloat,Ustride:?GLint,Uorder:?GLint,V1:?GLfloat,V2:?GLfloat,Vstride:?GLint,Vorder:?GLint>>).
@@ -7278,21 +7278,21 @@ map2f(Target,U1,U2,Ustride,Uorder,V1,V2,Vstride,Vorder,Points) ->
%% to the nearest integer values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetMap.xml">external</a> documentation.
--spec getMapdv(Target, Query, V) -> ok when Target :: enum(),Query :: enum(),V :: mem().
+-spec getMapdv(Target, Query, V) -> 'ok' when Target :: enum(),Query :: enum(),V :: mem().
getMapdv(Target,Query,V) ->
send_bin(V),
call(5289, <<Target:?GLenum,Query:?GLenum>>).
%% @doc
%% See {@link getMapdv/3}
--spec getMapfv(Target, Query, V) -> ok when Target :: enum(),Query :: enum(),V :: mem().
+-spec getMapfv(Target, Query, V) -> 'ok' when Target :: enum(),Query :: enum(),V :: mem().
getMapfv(Target,Query,V) ->
send_bin(V),
call(5290, <<Target:?GLenum,Query:?GLenum>>).
%% @doc
%% See {@link getMapdv/3}
--spec getMapiv(Target, Query, V) -> ok when Target :: enum(),Query :: enum(),V :: mem().
+-spec getMapiv(Target, Query, V) -> 'ok' when Target :: enum(),Query :: enum(),V :: mem().
getMapiv(Target,Query,V) ->
send_bin(V),
call(5291, <<Target:?GLenum,Query:?GLenum>>).
@@ -7343,42 +7343,42 @@ getMapiv(Target,Query,V) ->
%% a normal map is enabled, no normal is generated for ``gl:evalCoord2'' commands.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml">external</a> documentation.
--spec evalCoord1d(U) -> ok when U :: float().
+-spec evalCoord1d(U) -> 'ok' when U :: float().
evalCoord1d(U) ->
cast(5292, <<U:?GLdouble>>).
%% @doc
%% See {@link evalCoord1d/1}
--spec evalCoord1f(U) -> ok when U :: float().
+-spec evalCoord1f(U) -> 'ok' when U :: float().
evalCoord1f(U) ->
cast(5293, <<U:?GLfloat>>).
%% @equiv evalCoord1d(U)
--spec evalCoord1dv(U) -> ok when U :: {U :: float()}.
+-spec evalCoord1dv(U) -> 'ok' when U :: {U :: float()}.
evalCoord1dv({U}) -> evalCoord1d(U).
%% @equiv evalCoord1f(U)
--spec evalCoord1fv(U) -> ok when U :: {U :: float()}.
+-spec evalCoord1fv(U) -> 'ok' when U :: {U :: float()}.
evalCoord1fv({U}) -> evalCoord1f(U).
%% @doc
%% See {@link evalCoord1d/1}
--spec evalCoord2d(U, V) -> ok when U :: float(),V :: float().
+-spec evalCoord2d(U, V) -> 'ok' when U :: float(),V :: float().
evalCoord2d(U,V) ->
cast(5294, <<U:?GLdouble,V:?GLdouble>>).
%% @doc
%% See {@link evalCoord1d/1}
--spec evalCoord2f(U, V) -> ok when U :: float(),V :: float().
+-spec evalCoord2f(U, V) -> 'ok' when U :: float(),V :: float().
evalCoord2f(U,V) ->
cast(5295, <<U:?GLfloat,V:?GLfloat>>).
%% @equiv evalCoord2d(U,V)
--spec evalCoord2dv(U) -> ok when U :: {U :: float(),V :: float()}.
+-spec evalCoord2dv(U) -> 'ok' when U :: {U :: float(),V :: float()}.
evalCoord2dv({U,V}) -> evalCoord2d(U,V).
%% @equiv evalCoord2f(U,V)
--spec evalCoord2fv(U) -> ok when U :: {U :: float(),V :: float()}.
+-spec evalCoord2fv(U) -> 'ok' when U :: {U :: float(),V :: float()}.
evalCoord2fv({U,V}) -> evalCoord2f(U,V).
%% @doc Define a one- or two-dimensional mesh
@@ -7413,25 +7413,25 @@ evalCoord2fv({U,V}) -> evalCoord2f(U,V).
%% and {@link gl:evalPoint1/1} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMapGrid.xml">external</a> documentation.
--spec mapGrid1d(Un, U1, U2) -> ok when Un :: integer(),U1 :: float(),U2 :: float().
+-spec mapGrid1d(Un, U1, U2) -> 'ok' when Un :: integer(),U1 :: float(),U2 :: float().
mapGrid1d(Un,U1,U2) ->
cast(5296, <<Un:?GLint,0:32,U1:?GLdouble,U2:?GLdouble>>).
%% @doc
%% See {@link mapGrid1d/3}
--spec mapGrid1f(Un, U1, U2) -> ok when Un :: integer(),U1 :: float(),U2 :: float().
+-spec mapGrid1f(Un, U1, U2) -> 'ok' when Un :: integer(),U1 :: float(),U2 :: float().
mapGrid1f(Un,U1,U2) ->
cast(5297, <<Un:?GLint,U1:?GLfloat,U2:?GLfloat>>).
%% @doc
%% See {@link mapGrid1d/3}
--spec mapGrid2d(Un, U1, U2, Vn, V1, V2) -> ok when Un :: integer(),U1 :: float(),U2 :: float(),Vn :: integer(),V1 :: float(),V2 :: float().
+-spec mapGrid2d(Un, U1, U2, Vn, V1, V2) -> 'ok' when Un :: integer(),U1 :: float(),U2 :: float(),Vn :: integer(),V1 :: float(),V2 :: float().
mapGrid2d(Un,U1,U2,Vn,V1,V2) ->
cast(5298, <<Un:?GLint,0:32,U1:?GLdouble,U2:?GLdouble,Vn:?GLint,0:32,V1:?GLdouble,V2:?GLdouble>>).
%% @doc
%% See {@link mapGrid1d/3}
--spec mapGrid2f(Un, U1, U2, Vn, V1, V2) -> ok when Un :: integer(),U1 :: float(),U2 :: float(),Vn :: integer(),V1 :: float(),V2 :: float().
+-spec mapGrid2f(Un, U1, U2, Vn, V1, V2) -> 'ok' when Un :: integer(),U1 :: float(),U2 :: float(),Vn :: integer(),V1 :: float(),V2 :: float().
mapGrid2f(Un,U1,U2,Vn,V1,V2) ->
cast(5299, <<Un:?GLint,U1:?GLfloat,U2:?GLfloat,Vn:?GLint,V1:?GLfloat,V2:?GLfloat>>).
@@ -7460,13 +7460,13 @@ mapGrid2f(Un,U1,U2,Vn,V1,V2) ->
%% if j=m, then the value computed from j.&amp;Delta; v+v 1 is exactly v 2.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEvalPoint.xml">external</a> documentation.
--spec evalPoint1(I) -> ok when I :: integer().
+-spec evalPoint1(I) -> 'ok' when I :: integer().
evalPoint1(I) ->
cast(5300, <<I:?GLint>>).
%% @doc
%% See {@link evalPoint1/1}
--spec evalPoint2(I, J) -> ok when I :: integer(),J :: integer().
+-spec evalPoint2(I, J) -> 'ok' when I :: integer(),J :: integer().
evalPoint2(I,J) ->
cast(5301, <<I:?GLint,J:?GLint>>).
@@ -7525,13 +7525,13 @@ evalPoint2(I,J) ->
%% computed from j.&amp;Delta; v+v 1 is exactly v 2.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEvalMesh.xml">external</a> documentation.
--spec evalMesh1(Mode, I1, I2) -> ok when Mode :: enum(),I1 :: integer(),I2 :: integer().
+-spec evalMesh1(Mode, I1, I2) -> 'ok' when Mode :: enum(),I1 :: integer(),I2 :: integer().
evalMesh1(Mode,I1,I2) ->
cast(5302, <<Mode:?GLenum,I1:?GLint,I2:?GLint>>).
%% @doc
%% See {@link evalMesh1/3}
--spec evalMesh2(Mode, I1, I2, J1, J2) -> ok when Mode :: enum(),I1 :: integer(),I2 :: integer(),J1 :: integer(),J2 :: integer().
+-spec evalMesh2(Mode, I1, I2, J1, J2) -> 'ok' when Mode :: enum(),I1 :: integer(),I2 :: integer(),J1 :: integer(),J2 :: integer().
evalMesh2(Mode,I1,I2,J1,J2) ->
cast(5303, <<Mode:?GLenum,I1:?GLint,I2:?GLint,J1:?GLint,J2:?GLint>>).
@@ -7601,26 +7601,26 @@ evalMesh2(Mode,I1,I2,J1,J2) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFog.xml">external</a> documentation.
--spec fogf(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec fogf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
fogf(Pname,Param) ->
cast(5304, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link fogf/2}
--spec fogi(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec fogi(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
fogi(Pname,Param) ->
cast(5305, <<Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link fogf/2}
--spec fogfv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec fogfv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
fogfv(Pname,Params) ->
cast(5306, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link fogf/2}
--spec fogiv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec fogiv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
fogiv(Pname,Params) ->
cast(5307, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
@@ -7733,7 +7733,7 @@ fogiv(Pname,Params) ->
%% by the texture matrix.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFeedbackBuffer.xml">external</a> documentation.
--spec feedbackBuffer(Size, Type, Buffer) -> ok when Size :: integer(),Type :: enum(),Buffer :: mem().
+-spec feedbackBuffer(Size, Type, Buffer) -> 'ok' when Size :: integer(),Type :: enum(),Buffer :: mem().
feedbackBuffer(Size,Type,Buffer) ->
send_bin(Buffer),
call(5308, <<Size:?GLsizei,Type:?GLenum>>).
@@ -7752,7 +7752,7 @@ feedbackBuffer(Size,Type,Buffer) ->
%% commands with respect to the specification of graphics primitives is maintained.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPassThrough.xml">external</a> documentation.
--spec passThrough(Token) -> ok when Token :: float().
+-spec passThrough(Token) -> 'ok' when Token :: float().
passThrough(Token) ->
cast(5309, <<Token:?GLfloat>>).
@@ -7797,7 +7797,7 @@ passThrough(Token) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSelectBuffer.xml">external</a> documentation.
--spec selectBuffer(Size, Buffer) -> ok when Size :: integer(),Buffer :: mem().
+-spec selectBuffer(Size, Buffer) -> 'ok' when Size :: integer(),Buffer :: mem().
selectBuffer(Size,Buffer) ->
send_bin(Buffer),
call(5310, <<Size:?GLsizei>>).
@@ -7812,7 +7812,7 @@ selectBuffer(Size,Buffer) ->
%% while the render mode is not `?GL_SELECT' are ignored.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glInitNames.xml">external</a> documentation.
--spec initNames() -> ok.
+-spec initNames() -> 'ok'.
initNames() ->
cast(5311, <<>>).
@@ -7828,7 +7828,7 @@ initNames() ->
%% while the render mode is not `?GL_SELECT' are ignored.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadName.xml">external</a> documentation.
--spec loadName(Name) -> ok when Name :: integer().
+-spec loadName(Name) -> 'ok' when Name :: integer().
loadName(Name) ->
cast(5312, <<Name:?GLuint>>).
@@ -7852,13 +7852,13 @@ loadName(Name) ->
%% or {@link gl:pushName/1} while the render mode is not `?GL_SELECT' are ignored.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPushName.xml">external</a> documentation.
--spec pushName(Name) -> ok when Name :: integer().
+-spec pushName(Name) -> 'ok' when Name :: integer().
pushName(Name) ->
cast(5313, <<Name:?GLuint>>).
%% @doc
%% See {@link pushName/1}
--spec popName() -> ok.
+-spec popName() -> 'ok'.
popName() ->
cast(5314, <<>>).
@@ -7870,7 +7870,7 @@ popName() ->
%% is set to (0, 0, 0, 0).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendColor.xml">external</a> documentation.
--spec blendColor(Red, Green, Blue, Alpha) -> ok when Red :: clamp(),Green :: clamp(),Blue :: clamp(),Alpha :: clamp().
+-spec blendColor(Red, Green, Blue, Alpha) -> 'ok' when Red :: clamp(),Green :: clamp(),Blue :: clamp(),Alpha :: clamp().
blendColor(Red,Green,Blue,Alpha) ->
cast(5315, <<Red:?GLclampf,Green:?GLclampf,Blue:?GLclampf,Alpha:?GLclampf>>).
@@ -7911,7 +7911,7 @@ blendColor(Red,Green,Blue,Alpha) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendEquation.xml">external</a> documentation.
--spec blendEquation(Mode) -> ok when Mode :: enum().
+-spec blendEquation(Mode) -> 'ok' when Mode :: enum().
blendEquation(Mode) ->
cast(5316, <<Mode:?GLenum>>).
@@ -7940,7 +7940,7 @@ blendEquation(Mode) ->
%% their previous values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawRangeElements.xml">external</a> documentation.
--spec drawRangeElements(Mode, Start, End, Count, Type, Indices) -> ok when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem().
+-spec drawRangeElements(Mode, Start, End, Count, Type, Indices) -> 'ok' when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem().
drawRangeElements(Mode,Start,End,Count,Type,Indices) when is_integer(Indices) ->
cast(5317, <<Mode:?GLenum,Start:?GLuint,End:?GLuint,Count:?GLsizei,Type:?GLenum,Indices:?GLuint>>);
drawRangeElements(Mode,Start,End,Count,Type,Indices) ->
@@ -8048,7 +8048,7 @@ drawRangeElements(Mode,Start,End,Count,Type,Indices) ->
%% uses the R, G, and B values. A four-component image uses all of the RGBA components.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage3D.xml">external</a> documentation.
--spec texImage3D(Target, Level, InternalFormat, Width, Height, Depth, Border, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texImage3D(Target, Level, InternalFormat, Width, Height, Depth, Border, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texImage3D(Target,Level,InternalFormat,Width,Height,Depth,Border,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5319, <<Target:?GLenum,Level:?GLint,InternalFormat:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Border:?GLint,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texImage3D(Target,Level,InternalFormat,Width,Height,Depth,Border,Format,Type,Pixels) ->
@@ -8058,7 +8058,7 @@ texImage3D(Target,Level,InternalFormat,Width,Height,Depth,Border,Format,Type,Pix
%% @doc glTexSubImage
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage.xml">external</a> documentation.
--spec texSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5321, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Zoffset:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,Type,Pixels) ->
@@ -8095,7 +8095,7 @@ texSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,Typ
%% the specified subregion.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage3D.xml">external</a> documentation.
--spec copyTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, X, Y, Width, Height) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec copyTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, X, Y, Width, Height) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
copyTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,X,Y,Width,Height) ->
cast(5323, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Zoffset:?GLint,X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
@@ -8195,7 +8195,7 @@ copyTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,X,Y,Width,Height) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorTable.xml">external</a> documentation.
--spec colorTable(Target, Internalformat, Width, Format, Type, Table) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Format :: enum(),Type :: enum(),Table :: offset()|mem().
+-spec colorTable(Target, Internalformat, Width, Format, Type, Table) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Format :: enum(),Type :: enum(),Table :: offset()|mem().
colorTable(Target,Internalformat,Width,Format,Type,Table) when is_integer(Table) ->
cast(5324, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Format:?GLenum,Type:?GLenum,Table:?GLuint>>);
colorTable(Target,Internalformat,Width,Format,Type,Table) ->
@@ -8220,13 +8220,13 @@ colorTable(Target,Internalformat,Width,Format,Type,Table) ->
%% The color tables themselves are specified by calling {@link gl:colorTable/6} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorTableParameter.xml">external</a> documentation.
--spec colorTableParameterfv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: {float(),float(),float(),float()}.
+-spec colorTableParameterfv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: {float(),float(),float(),float()}.
colorTableParameterfv(Target,Pname,{P1,P2,P3,P4}) ->
cast(5326, <<Target:?GLenum,Pname:?GLenum,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>).
%% @doc
%% See {@link colorTableParameterfv/3}
--spec colorTableParameteriv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: {integer(),integer(),integer(),integer()}.
+-spec colorTableParameteriv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: {integer(),integer(),integer(),integer()}.
colorTableParameteriv(Target,Pname,{P1,P2,P3,P4}) ->
cast(5327, <<Target:?GLenum,Pname:?GLenum,P1:?GLint,P2:?GLint,P3:?GLint,P4:?GLint>>).
@@ -8270,7 +8270,7 @@ colorTableParameteriv(Target,Pname,{P1,P2,P3,P4}) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyColorTable.xml">external</a> documentation.
--spec copyColorTable(Target, Internalformat, X, Y, Width) -> ok when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer().
+-spec copyColorTable(Target, Internalformat, X, Y, Width) -> 'ok' when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer().
copyColorTable(Target,Internalformat,X,Y,Width) ->
cast(5328, <<Target:?GLenum,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei>>).
@@ -8295,7 +8295,7 @@ copyColorTable(Target,Internalformat,X,Y,Width) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetColorTable.xml">external</a> documentation.
--spec getColorTable(Target, Format, Type, Table) -> ok when Target :: enum(),Format :: enum(),Type :: enum(),Table :: mem().
+-spec getColorTable(Target, Format, Type, Table) -> 'ok' when Target :: enum(),Format :: enum(),Type :: enum(),Table :: mem().
getColorTable(Target,Format,Type,Table) ->
send_bin(Table),
call(5329, <<Target:?GLenum,Format:?GLenum,Type:?GLenum>>).
@@ -8358,7 +8358,7 @@ getColorTableParameteriv(Target,Pname) ->
%% is treated as a byte offset into the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorSubTable.xml">external</a> documentation.
--spec colorSubTable(Target, Start, Count, Format, Type, Data) -> ok when Target :: enum(),Start :: integer(),Count :: integer(),Format :: enum(),Type :: enum(),Data :: offset()|mem().
+-spec colorSubTable(Target, Start, Count, Format, Type, Data) -> 'ok' when Target :: enum(),Start :: integer(),Count :: integer(),Format :: enum(),Type :: enum(),Data :: offset()|mem().
colorSubTable(Target,Start,Count,Format,Type,Data) when is_integer(Data) ->
cast(5332, <<Target:?GLenum,Start:?GLsizei,Count:?GLsizei,Format:?GLenum,Type:?GLenum,Data:?GLuint>>);
colorSubTable(Target,Start,Count,Format,Type,Data) ->
@@ -8375,7 +8375,7 @@ colorSubTable(Target,Start,Count,Format,Type,Data) ->
%% has no effect.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyColorSubTable.xml">external</a> documentation.
--spec copyColorSubTable(Target, Start, X, Y, Width) -> ok when Target :: enum(),Start :: integer(),X :: integer(),Y :: integer(),Width :: integer().
+-spec copyColorSubTable(Target, Start, X, Y, Width) -> 'ok' when Target :: enum(),Start :: integer(),X :: integer(),Y :: integer(),Width :: integer().
copyColorSubTable(Target,Start,X,Y,Width) ->
cast(5334, <<Target:?GLenum,Start:?GLsizei,X:?GLint,Y:?GLint,Width:?GLsizei>>).
@@ -8428,7 +8428,7 @@ copyColorSubTable(Target,Start,X,Y,Width) ->
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glConvolutionFilter1D.xml">external</a> documentation.
--spec convolutionFilter1D(Target, Internalformat, Width, Format, Type, Image) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Format :: enum(),Type :: enum(),Image :: offset()|mem().
+-spec convolutionFilter1D(Target, Internalformat, Width, Format, Type, Image) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Format :: enum(),Type :: enum(),Image :: offset()|mem().
convolutionFilter1D(Target,Internalformat,Width,Format,Type,Image) when is_integer(Image) ->
cast(5335, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Format:?GLenum,Type:?GLenum,Image:?GLuint>>);
convolutionFilter1D(Target,Internalformat,Width,Format,Type,Image) ->
@@ -8485,7 +8485,7 @@ convolutionFilter1D(Target,Internalformat,Width,Format,Type,Image) ->
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glConvolutionFilter2D.xml">external</a> documentation.
--spec convolutionFilter2D(Target, Internalformat, Width, Height, Format, Type, Image) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Image :: offset()|mem().
+-spec convolutionFilter2D(Target, Internalformat, Width, Height, Format, Type, Image) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Image :: offset()|mem().
convolutionFilter2D(Target,Internalformat,Width,Height,Format,Type,Image) when is_integer(Image) ->
cast(5337, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum,Image:?GLuint>>);
convolutionFilter2D(Target,Internalformat,Width,Height,Format,Type,Image) ->
@@ -8526,24 +8526,24 @@ convolutionFilter2D(Target,Internalformat,Width,Height,Format,Type,Image) ->
%% image were replicated.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glConvolutionParameter.xml">external</a> documentation.
--spec convolutionParameterf(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec convolutionParameterf(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
convolutionParameterf(Target,Pname,Params) ->
cast(5339, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @equiv convolutionParameterf(Target,Pname,Params)
--spec convolutionParameterfv(Target :: enum(),Pname :: enum(),Params) -> ok when Params :: {Params :: tuple()}.
+-spec convolutionParameterfv(Target :: enum(),Pname :: enum(),Params) -> 'ok' when Params :: {Params :: tuple()}.
convolutionParameterfv(Target,Pname,{Params}) -> convolutionParameterf(Target,Pname,Params).
%% @doc
%% See {@link convolutionParameterf/3}
--spec convolutionParameteri(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec convolutionParameteri(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
convolutionParameteri(Target,Pname,Params) ->
cast(5340, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @equiv convolutionParameteri(Target,Pname,Params)
--spec convolutionParameteriv(Target :: enum(),Pname :: enum(),Params) -> ok when Params :: {Params :: tuple()}.
+-spec convolutionParameteriv(Target :: enum(),Pname :: enum(),Params) -> 'ok' when Params :: {Params :: tuple()}.
convolutionParameteriv(Target,Pname,{Params}) -> convolutionParameteri(Target,Pname,Params).
%% @doc Copy pixels into a one-dimensional convolution filter
@@ -8595,7 +8595,7 @@ convolutionParameteriv(Target,Pname,{Params}) -> convolutionParameteri(Target,P
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyConvolutionFilter1D.xml">external</a> documentation.
--spec copyConvolutionFilter1D(Target, Internalformat, X, Y, Width) -> ok when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer().
+-spec copyConvolutionFilter1D(Target, Internalformat, X, Y, Width) -> 'ok' when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer().
copyConvolutionFilter1D(Target,Internalformat,X,Y,Width) ->
cast(5341, <<Target:?GLenum,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei>>).
@@ -8649,7 +8649,7 @@ copyConvolutionFilter1D(Target,Internalformat,X,Y,Width) ->
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyConvolutionFilter2D.xml">external</a> documentation.
--spec copyConvolutionFilter2D(Target, Internalformat, X, Y, Width, Height) -> ok when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec copyConvolutionFilter2D(Target, Internalformat, X, Y, Width, Height) -> 'ok' when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
copyConvolutionFilter2D(Target,Internalformat,X,Y,Width,Height) ->
cast(5342, <<Target:?GLenum,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
@@ -8675,7 +8675,7 @@ copyConvolutionFilter2D(Target,Internalformat,X,Y,Width,Height) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetConvolutionFilter.xml">external</a> documentation.
--spec getConvolutionFilter(Target, Format, Type, Image) -> ok when Target :: enum(),Format :: enum(),Type :: enum(),Image :: mem().
+-spec getConvolutionFilter(Target, Format, Type, Image) -> 'ok' when Target :: enum(),Format :: enum(),Type :: enum(),Image :: mem().
getConvolutionFilter(Target,Format,Type,Image) ->
send_bin(Image),
call(5343, <<Target:?GLenum,Format:?GLenum,Type:?GLenum>>).
@@ -8775,7 +8775,7 @@ getConvolutionParameteriv(Target,Pname) ->
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSeparableFilter2D.xml">external</a> documentation.
--spec separableFilter2D(Target, Internalformat, Width, Height, Format, Type, Row, Column) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Row :: offset()|mem(),Column :: offset()|mem().
+-spec separableFilter2D(Target, Internalformat, Width, Height, Format, Type, Row, Column) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Row :: offset()|mem(),Column :: offset()|mem().
separableFilter2D(Target,Internalformat,Width,Height,Format,Type,Row,Column) when is_integer(Row), is_integer(Column) ->
cast(5346, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum,Row:?GLuint,Column:?GLuint>>);
separableFilter2D(Target,Internalformat,Width,Height,Format,Type,Row,Column) ->
@@ -8804,7 +8804,7 @@ separableFilter2D(Target,Internalformat,Width,Height,Format,Type,Row,Column) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetHistogram.xml">external</a> documentation.
--spec getHistogram(Target, Reset, Format, Type, Values) -> ok when Target :: enum(),Reset :: 0|1,Format :: enum(),Type :: enum(),Values :: mem().
+-spec getHistogram(Target, Reset, Format, Type, Values) -> 'ok' when Target :: enum(),Reset :: 0|1,Format :: enum(),Type :: enum(),Values :: mem().
getHistogram(Target,Reset,Format,Type,Values) ->
send_bin(Values),
call(5348, <<Target:?GLenum,Reset:?GLboolean,0:24,Format:?GLenum,Type:?GLenum>>).
@@ -8868,7 +8868,7 @@ getHistogramParameteriv(Target,Pname) ->
%% are not modified, even if `Reset' is `?GL_TRUE'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetMinmax.xml">external</a> documentation.
--spec getMinmax(Target, Reset, Format, Types, Values) -> ok when Target :: enum(),Reset :: 0|1,Format :: enum(),Types :: enum(),Values :: mem().
+-spec getMinmax(Target, Reset, Format, Types, Values) -> 'ok' when Target :: enum(),Reset :: 0|1,Format :: enum(),Types :: enum(),Values :: mem().
getMinmax(Target,Reset,Format,Types,Values) ->
send_bin(Values),
call(5351, <<Target:?GLenum,Reset:?GLboolean,0:24,Format:?GLenum,Types:?GLenum>>).
@@ -8926,7 +8926,7 @@ getMinmaxParameteriv(Target,Pname) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glHistogram.xml">external</a> documentation.
--spec histogram(Target, Width, Internalformat, Sink) -> ok when Target :: enum(),Width :: integer(),Internalformat :: enum(),Sink :: 0|1.
+-spec histogram(Target, Width, Internalformat, Sink) -> 'ok' when Target :: enum(),Width :: integer(),Internalformat :: enum(),Sink :: 0|1.
histogram(Target,Width,Internalformat,Sink) ->
cast(5354, <<Target:?GLenum,Width:?GLsizei,Internalformat:?GLenum,Sink:?GLboolean>>).
@@ -8955,7 +8955,7 @@ histogram(Target,Width,Internalformat,Sink) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMinmax.xml">external</a> documentation.
--spec minmax(Target, Internalformat, Sink) -> ok when Target :: enum(),Internalformat :: enum(),Sink :: 0|1.
+-spec minmax(Target, Internalformat, Sink) -> 'ok' when Target :: enum(),Internalformat :: enum(),Sink :: 0|1.
minmax(Target,Internalformat,Sink) ->
cast(5355, <<Target:?GLenum,Internalformat:?GLenum,Sink:?GLboolean>>).
@@ -8964,7 +8964,7 @@ minmax(Target,Internalformat,Sink) ->
%% ``gl:resetHistogram'' resets all the elements of the current histogram table to zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glResetHistogram.xml">external</a> documentation.
--spec resetHistogram(Target) -> ok when Target :: enum().
+-spec resetHistogram(Target) -> 'ok' when Target :: enum().
resetHistogram(Target) ->
cast(5356, <<Target:?GLenum>>).
@@ -8975,7 +8975,7 @@ resetHistogram(Target) ->
%% ``minimum'' element receives the maximum possible component values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glResetMinmax.xml">external</a> documentation.
--spec resetMinmax(Target) -> ok when Target :: enum().
+-spec resetMinmax(Target) -> 'ok' when Target :: enum().
resetMinmax(Target) ->
cast(5357, <<Target:?GLenum>>).
@@ -8986,7 +8986,7 @@ resetMinmax(Target) ->
%% but must be at least 80.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glActiveTexture.xml">external</a> documentation.
--spec activeTexture(Texture) -> ok when Texture :: enum().
+-spec activeTexture(Texture) -> 'ok' when Texture :: enum().
activeTexture(Texture) ->
cast(5358, <<Texture:?GLenum>>).
@@ -9012,7 +9012,7 @@ activeTexture(Texture) ->
%% on each sample.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSampleCoverage.xml">external</a> documentation.
--spec sampleCoverage(Value, Invert) -> ok when Value :: clamp(),Invert :: 0|1.
+-spec sampleCoverage(Value, Invert) -> 'ok' when Value :: clamp(),Invert :: 0|1.
sampleCoverage(Value,Invert) ->
cast(5359, <<Value:?GLclampf,Invert:?GLboolean>>).
@@ -9070,7 +9070,7 @@ sampleCoverage(Value,Invert) ->
%% b s×|width b/w|×|height b/h|×|depth b/d|
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage3D.xml">external</a> documentation.
--spec compressedTexImage3D(Target, Level, Internalformat, Width, Height, Depth, Border, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexImage3D(Target, Level, Internalformat, Width, Height, Depth, Border, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexImage3D(Target,Level,Internalformat,Width,Height,Depth,Border,ImageSize,Data) when is_integer(Data) ->
cast(5360, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Border:?GLint,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexImage3D(Target,Level,Internalformat,Width,Height,Depth,Border,ImageSize,Data) ->
@@ -9132,7 +9132,7 @@ compressedTexImage3D(Target,Level,Internalformat,Width,Height,Depth,Border,Image
%% b s×|width b/w|×|height b/h|
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage2D.xml">external</a> documentation.
--spec compressedTexImage2D(Target, Level, Internalformat, Width, Height, Border, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexImage2D(Target, Level, Internalformat, Width, Height, Border, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexImage2D(Target,Level,Internalformat,Width,Height,Border,ImageSize,Data) when is_integer(Data) ->
cast(5362, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Border:?GLint,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexImage2D(Target,Level,Internalformat,Width,Height,Border,ImageSize,Data) ->
@@ -9189,7 +9189,7 @@ compressedTexImage2D(Target,Level,Internalformat,Width,Height,Border,ImageSize,D
%% b s×|width b/w|
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage1D.xml">external</a> documentation.
--spec compressedTexImage1D(Target, Level, Internalformat, Width, Border, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexImage1D(Target, Level, Internalformat, Width, Border, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexImage1D(Target,Level,Internalformat,Width,Border,ImageSize,Data) when is_integer(Data) ->
cast(5364, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,Width:?GLsizei,Border:?GLint,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexImage1D(Target,Level,Internalformat,Width,Border,ImageSize,Data) ->
@@ -9219,7 +9219,7 @@ compressedTexImage1D(Target,Level,Internalformat,Width,Border,ImageSize,Data) ->
%% as a byte offset into the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage3D.xml">external</a> documentation.
--spec compressedTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,ImageSize,Data) when is_integer(Data) ->
cast(5366, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Zoffset:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Format:?GLenum,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,ImageSize,Data) ->
@@ -9248,7 +9248,7 @@ compressedTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,
%% as a byte offset into the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage2D.xml">external</a> documentation.
--spec compressedTexSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,ImageSize,Data) when is_integer(Data) ->
cast(5368, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,ImageSize,Data) ->
@@ -9277,7 +9277,7 @@ compressedTexSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,ImageSi
%% as a byte offset into the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage1D.xml">external</a> documentation.
--spec compressedTexSubImage1D(Target, Level, Xoffset, Width, Format, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Width :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexSubImage1D(Target, Level, Xoffset, Width, Format, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Width :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexSubImage1D(Target,Level,Xoffset,Width,Format,ImageSize,Data) when is_integer(Data) ->
cast(5370, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Width:?GLsizei,Format:?GLenum,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexSubImage1D(Target,Level,Xoffset,Width,Format,ImageSize,Data) ->
@@ -9307,7 +9307,7 @@ compressedTexSubImage1D(Target,Level,Xoffset,Width,Format,ImageSize,Data) ->
%% loading routine used for loading `Target' textures.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetCompressedTexImage.xml">external</a> documentation.
--spec getCompressedTexImage(Target, Lod, Img) -> ok when Target :: enum(),Lod :: integer(),Img :: mem().
+-spec getCompressedTexImage(Target, Lod, Img) -> 'ok' when Target :: enum(),Lod :: integer(),Img :: mem().
getCompressedTexImage(Target,Lod,Img) ->
send_bin(Img),
call(5372, <<Target:?GLenum,Lod:?GLint>>).
@@ -9320,7 +9320,7 @@ getCompressedTexImage(Target,Lod,Img) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClientActiveTexture.xml">external</a> documentation.
--spec clientActiveTexture(Texture) -> ok when Texture :: enum().
+-spec clientActiveTexture(Texture) -> 'ok' when Texture :: enum().
clientActiveTexture(Texture) ->
cast(5373, <<Texture:?GLenum>>).
@@ -9338,162 +9338,162 @@ clientActiveTexture(Texture) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml">external</a> documentation.
--spec multiTexCoord1d(Target, S) -> ok when Target :: enum(),S :: float().
+-spec multiTexCoord1d(Target, S) -> 'ok' when Target :: enum(),S :: float().
multiTexCoord1d(Target,S) ->
cast(5374, <<Target:?GLenum,0:32,S:?GLdouble>>).
%% @equiv multiTexCoord1d(Target,S)
--spec multiTexCoord1dv(Target :: enum(),V) -> ok when V :: {S :: float()}.
+-spec multiTexCoord1dv(Target :: enum(),V) -> 'ok' when V :: {S :: float()}.
multiTexCoord1dv(Target,{S}) -> multiTexCoord1d(Target,S).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord1f(Target, S) -> ok when Target :: enum(),S :: float().
+-spec multiTexCoord1f(Target, S) -> 'ok' when Target :: enum(),S :: float().
multiTexCoord1f(Target,S) ->
cast(5375, <<Target:?GLenum,S:?GLfloat>>).
%% @equiv multiTexCoord1f(Target,S)
--spec multiTexCoord1fv(Target :: enum(),V) -> ok when V :: {S :: float()}.
+-spec multiTexCoord1fv(Target :: enum(),V) -> 'ok' when V :: {S :: float()}.
multiTexCoord1fv(Target,{S}) -> multiTexCoord1f(Target,S).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord1i(Target, S) -> ok when Target :: enum(),S :: integer().
+-spec multiTexCoord1i(Target, S) -> 'ok' when Target :: enum(),S :: integer().
multiTexCoord1i(Target,S) ->
cast(5376, <<Target:?GLenum,S:?GLint>>).
%% @equiv multiTexCoord1i(Target,S)
--spec multiTexCoord1iv(Target :: enum(),V) -> ok when V :: {S :: integer()}.
+-spec multiTexCoord1iv(Target :: enum(),V) -> 'ok' when V :: {S :: integer()}.
multiTexCoord1iv(Target,{S}) -> multiTexCoord1i(Target,S).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord1s(Target, S) -> ok when Target :: enum(),S :: integer().
+-spec multiTexCoord1s(Target, S) -> 'ok' when Target :: enum(),S :: integer().
multiTexCoord1s(Target,S) ->
cast(5377, <<Target:?GLenum,S:?GLshort>>).
%% @equiv multiTexCoord1s(Target,S)
--spec multiTexCoord1sv(Target :: enum(),V) -> ok when V :: {S :: integer()}.
+-spec multiTexCoord1sv(Target :: enum(),V) -> 'ok' when V :: {S :: integer()}.
multiTexCoord1sv(Target,{S}) -> multiTexCoord1s(Target,S).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord2d(Target, S, T) -> ok when Target :: enum(),S :: float(),T :: float().
+-spec multiTexCoord2d(Target, S, T) -> 'ok' when Target :: enum(),S :: float(),T :: float().
multiTexCoord2d(Target,S,T) ->
cast(5378, <<Target:?GLenum,0:32,S:?GLdouble,T:?GLdouble>>).
%% @equiv multiTexCoord2d(Target,S,T)
--spec multiTexCoord2dv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float()}.
+-spec multiTexCoord2dv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float()}.
multiTexCoord2dv(Target,{S,T}) -> multiTexCoord2d(Target,S,T).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord2f(Target, S, T) -> ok when Target :: enum(),S :: float(),T :: float().
+-spec multiTexCoord2f(Target, S, T) -> 'ok' when Target :: enum(),S :: float(),T :: float().
multiTexCoord2f(Target,S,T) ->
cast(5379, <<Target:?GLenum,S:?GLfloat,T:?GLfloat>>).
%% @equiv multiTexCoord2f(Target,S,T)
--spec multiTexCoord2fv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float()}.
+-spec multiTexCoord2fv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float()}.
multiTexCoord2fv(Target,{S,T}) -> multiTexCoord2f(Target,S,T).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord2i(Target, S, T) -> ok when Target :: enum(),S :: integer(),T :: integer().
+-spec multiTexCoord2i(Target, S, T) -> 'ok' when Target :: enum(),S :: integer(),T :: integer().
multiTexCoord2i(Target,S,T) ->
cast(5380, <<Target:?GLenum,S:?GLint,T:?GLint>>).
%% @equiv multiTexCoord2i(Target,S,T)
--spec multiTexCoord2iv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer()}.
+-spec multiTexCoord2iv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer()}.
multiTexCoord2iv(Target,{S,T}) -> multiTexCoord2i(Target,S,T).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord2s(Target, S, T) -> ok when Target :: enum(),S :: integer(),T :: integer().
+-spec multiTexCoord2s(Target, S, T) -> 'ok' when Target :: enum(),S :: integer(),T :: integer().
multiTexCoord2s(Target,S,T) ->
cast(5381, <<Target:?GLenum,S:?GLshort,T:?GLshort>>).
%% @equiv multiTexCoord2s(Target,S,T)
--spec multiTexCoord2sv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer()}.
+-spec multiTexCoord2sv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer()}.
multiTexCoord2sv(Target,{S,T}) -> multiTexCoord2s(Target,S,T).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord3d(Target, S, T, R) -> ok when Target :: enum(),S :: float(),T :: float(),R :: float().
+-spec multiTexCoord3d(Target, S, T, R) -> 'ok' when Target :: enum(),S :: float(),T :: float(),R :: float().
multiTexCoord3d(Target,S,T,R) ->
cast(5382, <<Target:?GLenum,0:32,S:?GLdouble,T:?GLdouble,R:?GLdouble>>).
%% @equiv multiTexCoord3d(Target,S,T,R)
--spec multiTexCoord3dv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float(),R :: float()}.
+-spec multiTexCoord3dv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float()}.
multiTexCoord3dv(Target,{S,T,R}) -> multiTexCoord3d(Target,S,T,R).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord3f(Target, S, T, R) -> ok when Target :: enum(),S :: float(),T :: float(),R :: float().
+-spec multiTexCoord3f(Target, S, T, R) -> 'ok' when Target :: enum(),S :: float(),T :: float(),R :: float().
multiTexCoord3f(Target,S,T,R) ->
cast(5383, <<Target:?GLenum,S:?GLfloat,T:?GLfloat,R:?GLfloat>>).
%% @equiv multiTexCoord3f(Target,S,T,R)
--spec multiTexCoord3fv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float(),R :: float()}.
+-spec multiTexCoord3fv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float()}.
multiTexCoord3fv(Target,{S,T,R}) -> multiTexCoord3f(Target,S,T,R).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord3i(Target, S, T, R) -> ok when Target :: enum(),S :: integer(),T :: integer(),R :: integer().
+-spec multiTexCoord3i(Target, S, T, R) -> 'ok' when Target :: enum(),S :: integer(),T :: integer(),R :: integer().
multiTexCoord3i(Target,S,T,R) ->
cast(5384, <<Target:?GLenum,S:?GLint,T:?GLint,R:?GLint>>).
%% @equiv multiTexCoord3i(Target,S,T,R)
--spec multiTexCoord3iv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer()}.
+-spec multiTexCoord3iv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer()}.
multiTexCoord3iv(Target,{S,T,R}) -> multiTexCoord3i(Target,S,T,R).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord3s(Target, S, T, R) -> ok when Target :: enum(),S :: integer(),T :: integer(),R :: integer().
+-spec multiTexCoord3s(Target, S, T, R) -> 'ok' when Target :: enum(),S :: integer(),T :: integer(),R :: integer().
multiTexCoord3s(Target,S,T,R) ->
cast(5385, <<Target:?GLenum,S:?GLshort,T:?GLshort,R:?GLshort>>).
%% @equiv multiTexCoord3s(Target,S,T,R)
--spec multiTexCoord3sv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer()}.
+-spec multiTexCoord3sv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer()}.
multiTexCoord3sv(Target,{S,T,R}) -> multiTexCoord3s(Target,S,T,R).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord4d(Target, S, T, R, Q) -> ok when Target :: enum(),S :: float(),T :: float(),R :: float(),Q :: float().
+-spec multiTexCoord4d(Target, S, T, R, Q) -> 'ok' when Target :: enum(),S :: float(),T :: float(),R :: float(),Q :: float().
multiTexCoord4d(Target,S,T,R,Q) ->
cast(5386, <<Target:?GLenum,0:32,S:?GLdouble,T:?GLdouble,R:?GLdouble,Q:?GLdouble>>).
%% @equiv multiTexCoord4d(Target,S,T,R,Q)
--spec multiTexCoord4dv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
+-spec multiTexCoord4dv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
multiTexCoord4dv(Target,{S,T,R,Q}) -> multiTexCoord4d(Target,S,T,R,Q).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord4f(Target, S, T, R, Q) -> ok when Target :: enum(),S :: float(),T :: float(),R :: float(),Q :: float().
+-spec multiTexCoord4f(Target, S, T, R, Q) -> 'ok' when Target :: enum(),S :: float(),T :: float(),R :: float(),Q :: float().
multiTexCoord4f(Target,S,T,R,Q) ->
cast(5387, <<Target:?GLenum,S:?GLfloat,T:?GLfloat,R:?GLfloat,Q:?GLfloat>>).
%% @equiv multiTexCoord4f(Target,S,T,R,Q)
--spec multiTexCoord4fv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
+-spec multiTexCoord4fv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
multiTexCoord4fv(Target,{S,T,R,Q}) -> multiTexCoord4f(Target,S,T,R,Q).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord4i(Target, S, T, R, Q) -> ok when Target :: enum(),S :: integer(),T :: integer(),R :: integer(),Q :: integer().
+-spec multiTexCoord4i(Target, S, T, R, Q) -> 'ok' when Target :: enum(),S :: integer(),T :: integer(),R :: integer(),Q :: integer().
multiTexCoord4i(Target,S,T,R,Q) ->
cast(5388, <<Target:?GLenum,S:?GLint,T:?GLint,R:?GLint,Q:?GLint>>).
%% @equiv multiTexCoord4i(Target,S,T,R,Q)
--spec multiTexCoord4iv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
+-spec multiTexCoord4iv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
multiTexCoord4iv(Target,{S,T,R,Q}) -> multiTexCoord4i(Target,S,T,R,Q).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord4s(Target, S, T, R, Q) -> ok when Target :: enum(),S :: integer(),T :: integer(),R :: integer(),Q :: integer().
+-spec multiTexCoord4s(Target, S, T, R, Q) -> 'ok' when Target :: enum(),S :: integer(),T :: integer(),R :: integer(),Q :: integer().
multiTexCoord4s(Target,S,T,R,Q) ->
cast(5389, <<Target:?GLenum,S:?GLshort,T:?GLshort,R:?GLshort,Q:?GLshort>>).
%% @equiv multiTexCoord4s(Target,S,T,R,Q)
--spec multiTexCoord4sv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
+-spec multiTexCoord4sv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
multiTexCoord4sv(Target,{S,T,R,Q}) -> multiTexCoord4s(Target,S,T,R,Q).
%% @doc Replace the current matrix with the specified row-major ordered matrix
@@ -9515,7 +9515,7 @@ multiTexCoord4sv(Target,{S,T,R,Q}) -> multiTexCoord4s(Target,S,T,R,Q).
%% with M T, where T represents the transpose.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrix.xml">external</a> documentation.
--spec loadTransposeMatrixf(M) -> ok when M :: matrix().
+-spec loadTransposeMatrixf(M) -> 'ok' when M :: matrix().
loadTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5390, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
loadTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -9523,7 +9523,7 @@ loadTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc
%% See {@link loadTransposeMatrixf/1}
--spec loadTransposeMatrixd(M) -> ok when M :: matrix().
+-spec loadTransposeMatrixd(M) -> 'ok' when M :: matrix().
loadTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5391, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
loadTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -9538,7 +9538,7 @@ loadTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% It is either the projection matrix, modelview matrix, or the texture matrix.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrix.xml">external</a> documentation.
--spec multTransposeMatrixf(M) -> ok when M :: matrix().
+-spec multTransposeMatrixf(M) -> 'ok' when M :: matrix().
multTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5392, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
multTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -9546,7 +9546,7 @@ multTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc
%% See {@link multTransposeMatrixf/1}
--spec multTransposeMatrixd(M) -> ok when M :: matrix().
+-spec multTransposeMatrixd(M) -> 'ok' when M :: matrix().
multTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5393, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
multTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -9625,7 +9625,7 @@ multTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendFuncSeparate.xml">external</a> documentation.
--spec blendFuncSeparate(SfactorRGB, DfactorRGB, SfactorAlpha, DfactorAlpha) -> ok when SfactorRGB :: enum(),DfactorRGB :: enum(),SfactorAlpha :: enum(),DfactorAlpha :: enum().
+-spec blendFuncSeparate(SfactorRGB, DfactorRGB, SfactorAlpha, DfactorAlpha) -> 'ok' when SfactorRGB :: enum(),DfactorRGB :: enum(),SfactorAlpha :: enum(),DfactorAlpha :: enum().
blendFuncSeparate(SfactorRGB,DfactorRGB,SfactorAlpha,DfactorAlpha) ->
cast(5394, <<SfactorRGB:?GLenum,DfactorRGB:?GLenum,SfactorAlpha:?GLenum,DfactorAlpha:?GLenum>>).
@@ -9650,7 +9650,7 @@ blendFuncSeparate(SfactorRGB,DfactorRGB,SfactorAlpha,DfactorAlpha) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultiDrawArrays.xml">external</a> documentation.
--spec multiDrawArrays(Mode, First, Count) -> ok when Mode :: enum(),First :: [integer()],Count :: [integer()].
+-spec multiDrawArrays(Mode, First, Count) -> 'ok' when Mode :: enum(),First :: [integer()],Count :: [integer()].
multiDrawArrays(Mode,First,Count) ->
cast(5395, <<Mode:?GLenum,(length(First)):?GLuint,
(<< <<C:?GLint>> || C <- First>>)/binary,0:(((length(First)) rem 2)*32),(length(Count)):?GLuint,
@@ -9669,26 +9669,26 @@ multiDrawArrays(Mode,First,Count) ->
%% The default value is `?GL_UPPER_LEFT'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPointParameter.xml">external</a> documentation.
--spec pointParameterf(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec pointParameterf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
pointParameterf(Pname,Param) ->
cast(5396, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link pointParameterf/2}
--spec pointParameterfv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec pointParameterfv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
pointParameterfv(Pname,Params) ->
cast(5397, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link pointParameterf/2}
--spec pointParameteri(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec pointParameteri(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
pointParameteri(Pname,Param) ->
cast(5398, <<Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link pointParameterf/2}
--spec pointParameteriv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec pointParameteriv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
pointParameteriv(Pname,Params) ->
cast(5399, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
@@ -9700,22 +9700,22 @@ pointParameteriv(Pname,Params) ->
%% the fog color (see {@link gl:fogf/2} ).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFogCoord.xml">external</a> documentation.
--spec fogCoordf(Coord) -> ok when Coord :: float().
+-spec fogCoordf(Coord) -> 'ok' when Coord :: float().
fogCoordf(Coord) ->
cast(5400, <<Coord:?GLfloat>>).
%% @equiv fogCoordf(Coord)
--spec fogCoordfv(Coord) -> ok when Coord :: {Coord :: float()}.
+-spec fogCoordfv(Coord) -> 'ok' when Coord :: {Coord :: float()}.
fogCoordfv({Coord}) -> fogCoordf(Coord).
%% @doc
%% See {@link fogCoordf/1}
--spec fogCoordd(Coord) -> ok when Coord :: float().
+-spec fogCoordd(Coord) -> 'ok' when Coord :: float().
fogCoordd(Coord) ->
cast(5401, <<Coord:?GLdouble>>).
%% @equiv fogCoordd(Coord)
--spec fogCoorddv(Coord) -> ok when Coord :: {Coord :: float()}.
+-spec fogCoorddv(Coord) -> 'ok' when Coord :: {Coord :: float()}.
fogCoorddv({Coord}) -> fogCoordd(Coord).
%% @doc Define an array of fog coordinates
@@ -9741,7 +9741,7 @@ fogCoorddv({Coord}) -> fogCoordd(Coord).
%% , {@link gl:drawRangeElements/6} , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFogCoordPointer.xml">external</a> documentation.
--spec fogCoordPointer(Type, Stride, Pointer) -> ok when Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec fogCoordPointer(Type, Stride, Pointer) -> 'ok' when Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
fogCoordPointer(Type,Stride,Pointer) when is_integer(Pointer) ->
cast(5402, <<Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
fogCoordPointer(Type,Stride,Pointer) ->
@@ -9778,82 +9778,82 @@ fogCoordPointer(Type,Stride,Pointer) ->
%% are interpolated or written into a color buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml">external</a> documentation.
--spec secondaryColor3b(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3b(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3b(Red,Green,Blue) ->
cast(5404, <<Red:?GLbyte,Green:?GLbyte,Blue:?GLbyte>>).
%% @equiv secondaryColor3b(Red,Green,Blue)
--spec secondaryColor3bv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3bv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3bv({Red,Green,Blue}) -> secondaryColor3b(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3d(Red, Green, Blue) -> ok when Red :: float(),Green :: float(),Blue :: float().
+-spec secondaryColor3d(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float().
secondaryColor3d(Red,Green,Blue) ->
cast(5405, <<Red:?GLdouble,Green:?GLdouble,Blue:?GLdouble>>).
%% @equiv secondaryColor3d(Red,Green,Blue)
--spec secondaryColor3dv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float()}.
+-spec secondaryColor3dv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}.
secondaryColor3dv({Red,Green,Blue}) -> secondaryColor3d(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3f(Red, Green, Blue) -> ok when Red :: float(),Green :: float(),Blue :: float().
+-spec secondaryColor3f(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float().
secondaryColor3f(Red,Green,Blue) ->
cast(5406, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat>>).
%% @equiv secondaryColor3f(Red,Green,Blue)
--spec secondaryColor3fv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float()}.
+-spec secondaryColor3fv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}.
secondaryColor3fv({Red,Green,Blue}) -> secondaryColor3f(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3i(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3i(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3i(Red,Green,Blue) ->
cast(5407, <<Red:?GLint,Green:?GLint,Blue:?GLint>>).
%% @equiv secondaryColor3i(Red,Green,Blue)
--spec secondaryColor3iv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3iv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3iv({Red,Green,Blue}) -> secondaryColor3i(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3s(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3s(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3s(Red,Green,Blue) ->
cast(5408, <<Red:?GLshort,Green:?GLshort,Blue:?GLshort>>).
%% @equiv secondaryColor3s(Red,Green,Blue)
--spec secondaryColor3sv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3sv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3sv({Red,Green,Blue}) -> secondaryColor3s(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3ub(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3ub(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3ub(Red,Green,Blue) ->
cast(5409, <<Red:?GLubyte,Green:?GLubyte,Blue:?GLubyte>>).
%% @equiv secondaryColor3ub(Red,Green,Blue)
--spec secondaryColor3ubv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3ubv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3ubv({Red,Green,Blue}) -> secondaryColor3ub(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3ui(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3ui(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3ui(Red,Green,Blue) ->
cast(5410, <<Red:?GLuint,Green:?GLuint,Blue:?GLuint>>).
%% @equiv secondaryColor3ui(Red,Green,Blue)
--spec secondaryColor3uiv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3uiv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3uiv({Red,Green,Blue}) -> secondaryColor3ui(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3us(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3us(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3us(Red,Green,Blue) ->
cast(5411, <<Red:?GLushort,Green:?GLushort,Blue:?GLushort>>).
%% @equiv secondaryColor3us(Red,Green,Blue)
--spec secondaryColor3usv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3usv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3usv({Red,Green,Blue}) -> secondaryColor3us(Red,Green,Blue).
%% @doc Define an array of secondary colors
@@ -9881,7 +9881,7 @@ secondaryColor3usv({Red,Green,Blue}) -> secondaryColor3us(Red,Green,Blue).
%% is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColorPointer.xml">external</a> documentation.
--spec secondaryColorPointer(Size, Type, Stride, Pointer) -> ok when Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec secondaryColorPointer(Size, Type, Stride, Pointer) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
secondaryColorPointer(Size,Type,Stride,Pointer) when is_integer(Pointer) ->
cast(5412, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
secondaryColorPointer(Size,Type,Stride,Pointer) ->
@@ -9927,82 +9927,82 @@ secondaryColorPointer(Size,Type,Stride,Pointer) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml">external</a> documentation.
--spec windowPos2d(X, Y) -> ok when X :: float(),Y :: float().
+-spec windowPos2d(X, Y) -> 'ok' when X :: float(),Y :: float().
windowPos2d(X,Y) ->
cast(5414, <<X:?GLdouble,Y:?GLdouble>>).
%% @equiv windowPos2d(X,Y)
--spec windowPos2dv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec windowPos2dv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
windowPos2dv({X,Y}) -> windowPos2d(X,Y).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos2f(X, Y) -> ok when X :: float(),Y :: float().
+-spec windowPos2f(X, Y) -> 'ok' when X :: float(),Y :: float().
windowPos2f(X,Y) ->
cast(5415, <<X:?GLfloat,Y:?GLfloat>>).
%% @equiv windowPos2f(X,Y)
--spec windowPos2fv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec windowPos2fv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
windowPos2fv({X,Y}) -> windowPos2f(X,Y).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos2i(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec windowPos2i(X, Y) -> 'ok' when X :: integer(),Y :: integer().
windowPos2i(X,Y) ->
cast(5416, <<X:?GLint,Y:?GLint>>).
%% @equiv windowPos2i(X,Y)
--spec windowPos2iv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec windowPos2iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
windowPos2iv({X,Y}) -> windowPos2i(X,Y).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos2s(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec windowPos2s(X, Y) -> 'ok' when X :: integer(),Y :: integer().
windowPos2s(X,Y) ->
cast(5417, <<X:?GLshort,Y:?GLshort>>).
%% @equiv windowPos2s(X,Y)
--spec windowPos2sv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec windowPos2sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
windowPos2sv({X,Y}) -> windowPos2s(X,Y).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos3d(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec windowPos3d(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
windowPos3d(X,Y,Z) ->
cast(5418, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @equiv windowPos3d(X,Y,Z)
--spec windowPos3dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec windowPos3dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
windowPos3dv({X,Y,Z}) -> windowPos3d(X,Y,Z).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos3f(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec windowPos3f(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
windowPos3f(X,Y,Z) ->
cast(5419, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
%% @equiv windowPos3f(X,Y,Z)
--spec windowPos3fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec windowPos3fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
windowPos3fv({X,Y,Z}) -> windowPos3f(X,Y,Z).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos3i(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec windowPos3i(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
windowPos3i(X,Y,Z) ->
cast(5420, <<X:?GLint,Y:?GLint,Z:?GLint>>).
%% @equiv windowPos3i(X,Y,Z)
--spec windowPos3iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec windowPos3iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
windowPos3iv({X,Y,Z}) -> windowPos3i(X,Y,Z).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos3s(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec windowPos3s(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
windowPos3s(X,Y,Z) ->
cast(5421, <<X:?GLshort,Y:?GLshort,Z:?GLshort>>).
%% @equiv windowPos3s(X,Y,Z)
--spec windowPos3sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec windowPos3sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
windowPos3sv({X,Y,Z}) -> windowPos3s(X,Y,Z).
%% @doc Generate query object names
@@ -10032,7 +10032,7 @@ genQueries(N) ->
%% query objects.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteQueries.xml">external</a> documentation.
--spec deleteQueries(Ids) -> ok when Ids :: [integer()].
+-spec deleteQueries(Ids) -> 'ok' when Ids :: [integer()].
deleteQueries(Ids) ->
cast(5423, <<(length(Ids)):?GLuint,
(<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((1+length(Ids)) rem 2)*32)>>).
@@ -10114,13 +10114,13 @@ isQuery(Id) ->
%% is not yet complete.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQuery.xml">external</a> documentation.
--spec beginQuery(Target, Id) -> ok when Target :: enum(),Id :: integer().
+-spec beginQuery(Target, Id) -> 'ok' when Target :: enum(),Id :: integer().
beginQuery(Target,Id) ->
cast(5425, <<Target:?GLenum,Id:?GLuint>>).
%% @doc
%% See {@link beginQuery/2}
--spec endQuery(Target) -> ok when Target :: enum().
+-spec endQuery(Target) -> 'ok' when Target :: enum().
endQuery(Target) ->
cast(5426, <<Target:?GLenum>>).
@@ -10236,7 +10236,7 @@ getQueryObjectuiv(Id,Pname) ->
%% buffer object based on its initial binding target.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBuffer.xml">external</a> documentation.
--spec bindBuffer(Target, Buffer) -> ok when Target :: enum(),Buffer :: integer().
+-spec bindBuffer(Target, Buffer) -> 'ok' when Target :: enum(),Buffer :: integer().
bindBuffer(Target,Buffer) ->
cast(5430, <<Target:?GLenum,Buffer:?GLuint>>).
@@ -10251,7 +10251,7 @@ bindBuffer(Target,Buffer) ->
%% buffer objects.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteBuffers.xml">external</a> documentation.
--spec deleteBuffers(Buffers) -> ok when Buffers :: [integer()].
+-spec deleteBuffers(Buffers) -> 'ok' when Buffers :: [integer()].
deleteBuffers(Buffers) ->
cast(5431, <<(length(Buffers)):?GLuint,
(<< <<C:?GLuint>> || C <- Buffers>>)/binary,0:(((1+length(Buffers)) rem 2)*32)>>).
@@ -10323,7 +10323,7 @@ isBuffer(Buffer) ->
%% source for GL drawing and image specification commands.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBufferData.xml">external</a> documentation.
--spec bufferData(Target, Size, Data, Usage) -> ok when Target :: enum(),Size :: integer(),Data :: offset()|mem(),Usage :: enum().
+-spec bufferData(Target, Size, Data, Usage) -> 'ok' when Target :: enum(),Size :: integer(),Data :: offset()|mem(),Usage :: enum().
bufferData(Target,Size,Data,Usage) when is_integer(Data) ->
cast(5434, <<Target:?GLenum,0:32,Size:?GLsizeiptr,Data:?GLuint,Usage:?GLenum>>);
bufferData(Target,Size,Data,Usage) ->
@@ -10339,7 +10339,7 @@ bufferData(Target,Size,Data,Usage) ->
%% the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBufferSubData.xml">external</a> documentation.
--spec bufferSubData(Target, Offset, Size, Data) -> ok when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: offset()|mem().
+-spec bufferSubData(Target, Offset, Size, Data) -> 'ok' when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: offset()|mem().
bufferSubData(Target,Offset,Size,Data) when is_integer(Data) ->
cast(5436, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr,Data:?GLuint>>);
bufferSubData(Target,Offset,Size,Data) ->
@@ -10355,7 +10355,7 @@ bufferSubData(Target,Offset,Size,Data) ->
%% together define a range beyond the bounds of the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetBufferSubData.xml">external</a> documentation.
--spec getBufferSubData(Target, Offset, Size, Data) -> ok when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: mem().
+-spec getBufferSubData(Target, Offset, Size, Data) -> 'ok' when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: mem().
getBufferSubData(Target,Offset,Size,Data) ->
send_bin(Data),
call(5438, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>).
@@ -10422,7 +10422,7 @@ getBufferParameteriv(Target,Pname) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendEquationSeparate.xml">external</a> documentation.
--spec blendEquationSeparate(ModeRGB, ModeAlpha) -> ok when ModeRGB :: enum(),ModeAlpha :: enum().
+-spec blendEquationSeparate(ModeRGB, ModeAlpha) -> 'ok' when ModeRGB :: enum(),ModeAlpha :: enum().
blendEquationSeparate(ModeRGB,ModeAlpha) ->
cast(5440, <<ModeRGB:?GLenum,ModeAlpha:?GLenum>>).
@@ -10462,7 +10462,7 @@ blendEquationSeparate(ModeRGB,ModeAlpha) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffers.xml">external</a> documentation.
--spec drawBuffers(Bufs) -> ok when Bufs :: [enum()].
+-spec drawBuffers(Bufs) -> 'ok' when Bufs :: [enum()].
drawBuffers(Bufs) ->
cast(5441, <<(length(Bufs)):?GLuint,
(<< <<C:?GLenum>> || C <- Bufs>>)/binary,0:(((1+length(Bufs)) rem 2)*32)>>).
@@ -10524,7 +10524,7 @@ drawBuffers(Bufs) ->
%% specify stencil action when the stencil test fails and passes, respectively.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilOpSeparate.xml">external</a> documentation.
--spec stencilOpSeparate(Face, Sfail, Dpfail, Dppass) -> ok when Face :: enum(),Sfail :: enum(),Dpfail :: enum(),Dppass :: enum().
+-spec stencilOpSeparate(Face, Sfail, Dpfail, Dppass) -> 'ok' when Face :: enum(),Sfail :: enum(),Dpfail :: enum(),Dppass :: enum().
stencilOpSeparate(Face,Sfail,Dpfail,Dppass) ->
cast(5442, <<Face:?GLenum,Sfail:?GLenum,Dpfail:?GLenum,Dppass:?GLenum>>).
@@ -10587,7 +10587,7 @@ stencilOpSeparate(Face,Sfail,Dpfail,Dppass) ->
%% `?GL_ALWAYS': Always passes.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilFuncSeparate.xml">external</a> documentation.
--spec stencilFuncSeparate(Face, Func, Ref, Mask) -> ok when Face :: enum(),Func :: enum(),Ref :: integer(),Mask :: integer().
+-spec stencilFuncSeparate(Face, Func, Ref, Mask) -> 'ok' when Face :: enum(),Func :: enum(),Ref :: integer(),Mask :: integer().
stencilFuncSeparate(Face,Func,Ref,Mask) ->
cast(5443, <<Face:?GLenum,Func:?GLenum,Ref:?GLint,Mask:?GLuint>>).
@@ -10605,7 +10605,7 @@ stencilFuncSeparate(Face,Func,Ref,Mask) ->
%% were called with `Face' set to `?GL_FRONT_AND_BACK'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilMaskSeparate.xml">external</a> documentation.
--spec stencilMaskSeparate(Face, Mask) -> ok when Face :: enum(),Mask :: integer().
+-spec stencilMaskSeparate(Face, Mask) -> 'ok' when Face :: enum(),Mask :: integer().
stencilMaskSeparate(Face,Mask) ->
cast(5444, <<Face:?GLenum,Mask:?GLuint>>).
@@ -10629,7 +10629,7 @@ stencilMaskSeparate(Face,Mask) ->
%% all program objects to which it is attached.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAttachShader.xml">external</a> documentation.
--spec attachShader(Program, Shader) -> ok when Program :: integer(),Shader :: integer().
+-spec attachShader(Program, Shader) -> 'ok' when Program :: integer(),Shader :: integer().
attachShader(Program,Shader) ->
cast(5445, <<Program:?GLuint,Shader:?GLuint>>).
@@ -10666,7 +10666,7 @@ attachShader(Program,Shader) ->
%% effect until the next time the program object is linked.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml">external</a> documentation.
--spec bindAttribLocation(Program, Index, Name) -> ok when Program :: integer(),Index :: integer(),Name :: string().
+-spec bindAttribLocation(Program, Index, Name) -> 'ok' when Program :: integer(),Index :: integer(),Name :: string().
bindAttribLocation(Program,Index,Name) ->
cast(5446, <<Program:?GLuint,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>).
@@ -10686,7 +10686,7 @@ bindAttribLocation(Program,Index,Name) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShader.xml">external</a> documentation.
--spec compileShader(Shader) -> ok when Shader :: integer().
+-spec compileShader(Shader) -> 'ok' when Shader :: integer().
compileShader(Shader) ->
cast(5447, <<Shader:?GLuint>>).
@@ -10753,7 +10753,7 @@ createShader(Type) ->
%% with arguments `Program' and `?GL_DELETE_STATUS'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml">external</a> documentation.
--spec deleteProgram(Program) -> ok when Program :: integer().
+-spec deleteProgram(Program) -> 'ok' when Program :: integer().
deleteProgram(Program) ->
cast(5450, <<Program:?GLuint>>).
@@ -10772,7 +10772,7 @@ deleteProgram(Program) ->
%% with arguments `Shader' and `?GL_DELETE_STATUS'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteShader.xml">external</a> documentation.
--spec deleteShader(Shader) -> ok when Shader :: integer().
+-spec deleteShader(Shader) -> 'ok' when Shader :: integer().
deleteShader(Shader) ->
cast(5451, <<Shader:?GLuint>>).
@@ -10787,7 +10787,7 @@ deleteShader(Shader) ->
%% detached.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml">external</a> documentation.
--spec detachShader(Program, Shader) -> ok when Program :: integer(),Shader :: integer().
+-spec detachShader(Program, Shader) -> 'ok' when Program :: integer(),Shader :: integer().
detachShader(Program,Shader) ->
cast(5452, <<Program:?GLuint,Shader:?GLuint>>).
@@ -10802,13 +10802,13 @@ detachShader(Program,Shader) ->
%% , or {@link gl:multiDrawArrays/3} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml">external</a> documentation.
--spec disableVertexAttribArray(Index) -> ok when Index :: integer().
+-spec disableVertexAttribArray(Index) -> 'ok' when Index :: integer().
disableVertexAttribArray(Index) ->
cast(5453, <<Index:?GLuint>>).
%% @doc
%% See {@link disableVertexAttribArray/1}
--spec enableVertexAttribArray(Index) -> ok when Index :: integer().
+-spec enableVertexAttribArray(Index) -> 'ok' when Index :: integer().
enableVertexAttribArray(Index) ->
cast(5454, <<Index:?GLuint>>).
@@ -11515,7 +11515,7 @@ isShader(Shader) ->
%% log or the program that is part of the program object.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLinkProgram.xml">external</a> documentation.
--spec linkProgram(Program) -> ok when Program :: integer().
+-spec linkProgram(Program) -> 'ok' when Program :: integer().
linkProgram(Program) ->
cast(5472, <<Program:?GLuint>>).
@@ -11533,7 +11533,7 @@ linkProgram(Program) ->
%% scanned or parsed at this time; they are simply copied into the specified shader object.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderSource.xml">external</a> documentation.
--spec shaderSource(Shader, String) -> ok when Shader :: integer(),String :: iolist().
+-spec shaderSource(Shader, String) -> 'ok' when Shader :: integer(),String :: iolist().
shaderSource(Shader,String) ->
StringTemp = list_to_binary([[Str|[0]] || Str <- String ]),
cast(5473, <<Shader:?GLuint,(length(String)):?GLuint,(size(StringTemp)):?GLuint,(StringTemp)/binary,0:((8-((size(StringTemp)+0) rem 8)) rem 8)>>).
@@ -11575,7 +11575,7 @@ shaderSource(Shader,String) ->
%% the results of fragment shader execution will be undefined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgram.xml">external</a> documentation.
--spec useProgram(Program) -> ok when Program :: integer().
+-spec useProgram(Program) -> 'ok' when Program :: integer().
useProgram(Program) ->
cast(5474, <<Program:?GLuint>>).
@@ -11643,125 +11643,125 @@ useProgram(Program) ->
%% a single matrix, and a count greater than 1 can be used to modify an array of matrices.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml">external</a> documentation.
--spec uniform1f(Location, V0) -> ok when Location :: integer(),V0 :: float().
+-spec uniform1f(Location, V0) -> 'ok' when Location :: integer(),V0 :: float().
uniform1f(Location,V0) ->
cast(5475, <<Location:?GLint,V0:?GLfloat>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2f(Location, V0, V1) -> ok when Location :: integer(),V0 :: float(),V1 :: float().
+-spec uniform2f(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float().
uniform2f(Location,V0,V1) ->
cast(5476, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3f(Location, V0, V1, V2) -> ok when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
+-spec uniform3f(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
uniform3f(Location,V0,V1,V2) ->
cast(5477, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4f(Location, V0, V1, V2, V3) -> ok when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
+-spec uniform4f(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
uniform4f(Location,V0,V1,V2,V3) ->
cast(5478, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1i(Location, V0) -> ok when Location :: integer(),V0 :: integer().
+-spec uniform1i(Location, V0) -> 'ok' when Location :: integer(),V0 :: integer().
uniform1i(Location,V0) ->
cast(5479, <<Location:?GLint,V0:?GLint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2i(Location, V0, V1) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer().
+-spec uniform2i(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer().
uniform2i(Location,V0,V1) ->
cast(5480, <<Location:?GLint,V0:?GLint,V1:?GLint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3i(Location, V0, V1, V2) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
+-spec uniform3i(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
uniform3i(Location,V0,V1,V2) ->
cast(5481, <<Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4i(Location, V0, V1, V2, V3) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
+-spec uniform4i(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
uniform4i(Location,V0,V1,V2,V3) ->
cast(5482, <<Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint,V3:?GLint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1fv(Location, Value) -> ok when Location :: integer(),Value :: [float()].
+-spec uniform1fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [float()].
uniform1fv(Location,Value) ->
cast(5483, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLfloat>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2fv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float()}].
+-spec uniform2fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float()}].
uniform2fv(Location,Value) ->
cast(5484, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3fv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float(),float()}].
+-spec uniform3fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float()}].
uniform3fv(Location,Value) ->
cast(5485, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4fv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float(),float(),float()}].
+-spec uniform4fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float(),float()}].
uniform4fv(Location,Value) ->
cast(5486, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1iv(Location, Value) -> ok when Location :: integer(),Value :: [integer()].
+-spec uniform1iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [integer()].
uniform1iv(Location,Value) ->
cast(5487, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLint>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2iv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer()}].
+-spec uniform2iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer()}].
uniform2iv(Location,Value) ->
cast(5488, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3iv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer(),integer()}].
+-spec uniform3iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer()}].
uniform3iv(Location,Value) ->
cast(5489, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4iv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
+-spec uniform4iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
uniform4iv(Location,Value) ->
cast(5490, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
+-spec uniformMatrix2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
uniformMatrix2fv(Location,Transpose,Value) ->
cast(5491, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix3fv(Location,Transpose,Value) ->
cast(5492, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4fv(Location,Transpose,Value) ->
cast(5493, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat,V13:?GLfloat,V14:?GLfloat,V15:?GLfloat,V16:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>).
@@ -11789,7 +11789,7 @@ uniformMatrix4fv(Location,Transpose,Value) ->
%% information strings.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgram.xml">external</a> documentation.
--spec validateProgram(Program) -> ok when Program :: integer().
+-spec validateProgram(Program) -> 'ok' when Program :: integer().
validateProgram(Program) ->
cast(5494, <<Program:?GLuint>>).
@@ -11864,191 +11864,191 @@ validateProgram(Program) ->
%% attribute.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml">external</a> documentation.
--spec vertexAttrib1d(Index, X) -> ok when Index :: integer(),X :: float().
+-spec vertexAttrib1d(Index, X) -> 'ok' when Index :: integer(),X :: float().
vertexAttrib1d(Index,X) ->
cast(5495, <<Index:?GLuint,0:32,X:?GLdouble>>).
%% @equiv vertexAttrib1d(Index,X)
--spec vertexAttrib1dv(Index :: integer(),V) -> ok when V :: {X :: float()}.
+-spec vertexAttrib1dv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}.
vertexAttrib1dv(Index,{X}) -> vertexAttrib1d(Index,X).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib1f(Index, X) -> ok when Index :: integer(),X :: float().
+-spec vertexAttrib1f(Index, X) -> 'ok' when Index :: integer(),X :: float().
vertexAttrib1f(Index,X) ->
cast(5496, <<Index:?GLuint,X:?GLfloat>>).
%% @equiv vertexAttrib1f(Index,X)
--spec vertexAttrib1fv(Index :: integer(),V) -> ok when V :: {X :: float()}.
+-spec vertexAttrib1fv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}.
vertexAttrib1fv(Index,{X}) -> vertexAttrib1f(Index,X).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib1s(Index, X) -> ok when Index :: integer(),X :: integer().
+-spec vertexAttrib1s(Index, X) -> 'ok' when Index :: integer(),X :: integer().
vertexAttrib1s(Index,X) ->
cast(5497, <<Index:?GLuint,X:?GLshort>>).
%% @equiv vertexAttrib1s(Index,X)
--spec vertexAttrib1sv(Index :: integer(),V) -> ok when V :: {X :: integer()}.
+-spec vertexAttrib1sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer()}.
vertexAttrib1sv(Index,{X}) -> vertexAttrib1s(Index,X).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib2d(Index, X, Y) -> ok when Index :: integer(),X :: float(),Y :: float().
+-spec vertexAttrib2d(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float().
vertexAttrib2d(Index,X,Y) ->
cast(5498, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble>>).
%% @equiv vertexAttrib2d(Index,X,Y)
--spec vertexAttrib2dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertexAttrib2dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertexAttrib2dv(Index,{X,Y}) -> vertexAttrib2d(Index,X,Y).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib2f(Index, X, Y) -> ok when Index :: integer(),X :: float(),Y :: float().
+-spec vertexAttrib2f(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float().
vertexAttrib2f(Index,X,Y) ->
cast(5499, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat>>).
%% @equiv vertexAttrib2f(Index,X,Y)
--spec vertexAttrib2fv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertexAttrib2fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertexAttrib2fv(Index,{X,Y}) -> vertexAttrib2f(Index,X,Y).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib2s(Index, X, Y) -> ok when Index :: integer(),X :: integer(),Y :: integer().
+-spec vertexAttrib2s(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer().
vertexAttrib2s(Index,X,Y) ->
cast(5500, <<Index:?GLuint,X:?GLshort,Y:?GLshort>>).
%% @equiv vertexAttrib2s(Index,X,Y)
--spec vertexAttrib2sv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertexAttrib2sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertexAttrib2sv(Index,{X,Y}) -> vertexAttrib2s(Index,X,Y).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib3d(Index, X, Y, Z) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float().
+-spec vertexAttrib3d(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float().
vertexAttrib3d(Index,X,Y,Z) ->
cast(5501, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @equiv vertexAttrib3d(Index,X,Y,Z)
--spec vertexAttrib3dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertexAttrib3dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertexAttrib3dv(Index,{X,Y,Z}) -> vertexAttrib3d(Index,X,Y,Z).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib3f(Index, X, Y, Z) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float().
+-spec vertexAttrib3f(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float().
vertexAttrib3f(Index,X,Y,Z) ->
cast(5502, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
%% @equiv vertexAttrib3f(Index,X,Y,Z)
--spec vertexAttrib3fv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertexAttrib3fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertexAttrib3fv(Index,{X,Y,Z}) -> vertexAttrib3f(Index,X,Y,Z).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib3s(Index, X, Y, Z) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
+-spec vertexAttrib3s(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
vertexAttrib3s(Index,X,Y,Z) ->
cast(5503, <<Index:?GLuint,X:?GLshort,Y:?GLshort,Z:?GLshort>>).
%% @equiv vertexAttrib3s(Index,X,Y,Z)
--spec vertexAttrib3sv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertexAttrib3sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertexAttrib3sv(Index,{X,Y,Z}) -> vertexAttrib3s(Index,X,Y,Z).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nbv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Nbv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Nbv(Index,{V1,V2,V3,V4}) ->
cast(5504, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Niv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Niv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Niv(Index,{V1,V2,V3,V4}) ->
cast(5505, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nsv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Nsv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Nsv(Index,{V1,V2,V3,V4}) ->
cast(5506, <<Index:?GLuint,V1:?GLshort,V2:?GLshort,V3:?GLshort,V4:?GLshort>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nub(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertexAttrib4Nub(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertexAttrib4Nub(Index,X,Y,Z,W) ->
cast(5507, <<Index:?GLuint,X:?GLubyte,Y:?GLubyte,Z:?GLubyte,W:?GLubyte>>).
%% @equiv vertexAttrib4Nub(Index,X,Y,Z,W)
--spec vertexAttrib4Nubv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertexAttrib4Nubv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertexAttrib4Nubv(Index,{X,Y,Z,W}) -> vertexAttrib4Nub(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nuiv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Nuiv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Nuiv(Index,{V1,V2,V3,V4}) ->
cast(5508, <<Index:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nusv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Nusv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Nusv(Index,{V1,V2,V3,V4}) ->
cast(5509, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4bv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4bv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4bv(Index,{V1,V2,V3,V4}) ->
cast(5510, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4d(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertexAttrib4d(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
vertexAttrib4d(Index,X,Y,Z,W) ->
cast(5511, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @equiv vertexAttrib4d(Index,X,Y,Z,W)
--spec vertexAttrib4dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertexAttrib4dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertexAttrib4dv(Index,{X,Y,Z,W}) -> vertexAttrib4d(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4f(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertexAttrib4f(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
vertexAttrib4f(Index,X,Y,Z,W) ->
cast(5512, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @equiv vertexAttrib4f(Index,X,Y,Z,W)
--spec vertexAttrib4fv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertexAttrib4fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertexAttrib4fv(Index,{X,Y,Z,W}) -> vertexAttrib4f(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4iv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4iv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4iv(Index,{V1,V2,V3,V4}) ->
cast(5513, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4s(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertexAttrib4s(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertexAttrib4s(Index,X,Y,Z,W) ->
cast(5514, <<Index:?GLuint,X:?GLshort,Y:?GLshort,Z:?GLshort,W:?GLshort>>).
%% @equiv vertexAttrib4s(Index,X,Y,Z,W)
--spec vertexAttrib4sv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertexAttrib4sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertexAttrib4sv(Index,{X,Y,Z,W}) -> vertexAttrib4s(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4ubv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4ubv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4ubv(Index,{V1,V2,V3,V4}) ->
cast(5515, <<Index:?GLuint,V1:?GLubyte,V2:?GLubyte,V3:?GLubyte,V4:?GLubyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4uiv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4uiv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4uiv(Index,{V1,V2,V3,V4}) ->
cast(5516, <<Index:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4usv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4usv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4usv(Index,{V1,V2,V3,V4}) ->
cast(5517, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>).
@@ -12092,7 +12092,7 @@ vertexAttrib4usv(Index,{V1,V2,V3,V4}) ->
%% , see `glMultiDrawElements', or {@link gl:drawRangeElements/6} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml">external</a> documentation.
--spec vertexAttribPointer(Index, Size, Type, Normalized, Stride, Pointer) -> ok when Index :: integer(),Size :: integer(),Type :: enum(),Normalized :: 0|1,Stride :: integer(),Pointer :: offset()|mem().
+-spec vertexAttribPointer(Index, Size, Type, Normalized, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Normalized :: 0|1,Stride :: integer(),Pointer :: offset()|mem().
vertexAttribPointer(Index,Size,Type,Normalized,Stride,Pointer) when is_integer(Pointer) ->
cast(5518, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Normalized:?GLboolean,0:24,Stride:?GLsizei,Pointer:?GLuint>>);
vertexAttribPointer(Index,Size,Type,Normalized,Stride,Pointer) ->
@@ -12101,42 +12101,42 @@ vertexAttribPointer(Index,Size,Type,Normalized,Stride,Pointer) ->
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2x3fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix2x3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
uniformMatrix2x3fv(Location,Transpose,Value) ->
cast(5520, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3x2fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3x2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
uniformMatrix3x2fv(Location,Transpose,Value) ->
cast(5521, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2x4fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix2x4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix2x4fv(Location,Transpose,Value) ->
cast(5522, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4x2fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4x2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4x2fv(Location,Transpose,Value) ->
cast(5523, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3x4fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3x4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix3x4fv(Location,Transpose,Value) ->
cast(5524, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4x3fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4x3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4x3fv(Location,Transpose,Value) ->
cast(5525, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
@@ -12144,7 +12144,7 @@ uniformMatrix4x3fv(Location,Transpose,Value) ->
%% @doc glColorMaski
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorMaski.xml">external</a> documentation.
--spec colorMaski(Index, R, G, B, A) -> ok when Index :: integer(),R :: 0|1,G :: 0|1,B :: 0|1,A :: 0|1.
+-spec colorMaski(Index, R, G, B, A) -> 'ok' when Index :: integer(),R :: 0|1,G :: 0|1,B :: 0|1,A :: 0|1.
colorMaski(Index,R,G,B,A) ->
cast(5526, <<Index:?GLuint,R:?GLboolean,G:?GLboolean,B:?GLboolean,A:?GLboolean>>).
@@ -12162,14 +12162,14 @@ getIntegeri_v(Target,Index) ->
%% @doc
%% See {@link enable/1}
--spec enablei(Target, Index) -> ok when Target :: enum(),Index :: integer().
+-spec enablei(Target, Index) -> 'ok' when Target :: enum(),Index :: integer().
enablei(Target,Index) ->
cast(5529, <<Target:?GLenum,Index:?GLuint>>).
%% @doc glEnablei
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnablei.xml">external</a> documentation.
--spec disablei(Target, Index) -> ok when Target :: enum(),Index :: integer().
+-spec disablei(Target, Index) -> 'ok' when Target :: enum(),Index :: integer().
disablei(Target,Index) ->
cast(5530, <<Target:?GLenum,Index:?GLuint>>).
@@ -12204,13 +12204,13 @@ isEnabledi(Target,Index) ->
%% </td></tr></tbody></table>
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginTransformFeedback.xml">external</a> documentation.
--spec beginTransformFeedback(PrimitiveMode) -> ok when PrimitiveMode :: enum().
+-spec beginTransformFeedback(PrimitiveMode) -> 'ok' when PrimitiveMode :: enum().
beginTransformFeedback(PrimitiveMode) ->
cast(5532, <<PrimitiveMode:?GLenum>>).
%% @doc
%% See {@link beginTransformFeedback/1}
--spec endTransformFeedback() -> ok.
+-spec endTransformFeedback() -> 'ok'.
endTransformFeedback() ->
cast(5533, <<>>).
@@ -12229,7 +12229,7 @@ endTransformFeedback() ->
%% while used as an indexed target.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBufferRange.xml">external</a> documentation.
--spec bindBufferRange(Target, Index, Buffer, Offset, Size) -> ok when Target :: enum(),Index :: integer(),Buffer :: integer(),Offset :: integer(),Size :: integer().
+-spec bindBufferRange(Target, Index, Buffer, Offset, Size) -> 'ok' when Target :: enum(),Index :: integer(),Buffer :: integer(),Offset :: integer(),Size :: integer().
bindBufferRange(Target,Index,Buffer,Offset,Size) ->
cast(5534, <<Target:?GLenum,Index:?GLuint,Buffer:?GLuint,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>).
@@ -12244,7 +12244,7 @@ bindBufferRange(Target,Index,Buffer,Offset,Size) ->
%% binding point specified by `Target' .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBufferBase.xml">external</a> documentation.
--spec bindBufferBase(Target, Index, Buffer) -> ok when Target :: enum(),Index :: integer(),Buffer :: integer().
+-spec bindBufferBase(Target, Index, Buffer) -> 'ok' when Target :: enum(),Index :: integer(),Buffer :: integer().
bindBufferBase(Target,Index,Buffer) ->
cast(5535, <<Target:?GLenum,Index:?GLuint,Buffer:?GLuint>>).
@@ -12282,7 +12282,7 @@ bindBufferBase(Target,Index,Buffer) ->
%% and the buffer mode is `?GL_INTERLEAVED_ATTRIBS'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTransformFeedbackVaryings.xml">external</a> documentation.
--spec transformFeedbackVaryings(Program, Varyings, BufferMode) -> ok when Program :: integer(),Varyings :: iolist(),BufferMode :: enum().
+-spec transformFeedbackVaryings(Program, Varyings, BufferMode) -> 'ok' when Program :: integer(),Varyings :: iolist(),BufferMode :: enum().
transformFeedbackVaryings(Program,Varyings,BufferMode) ->
VaryingsTemp = list_to_binary([[Str|[0]] || Str <- Varyings ]),
cast(5536, <<Program:?GLuint,(length(Varyings)):?GLuint,(size(VaryingsTemp)):?GLuint,(VaryingsTemp)/binary,0:((8-((size(VaryingsTemp)+0) rem 8)) rem 8),BufferMode:?GLenum>>).
@@ -12331,7 +12331,7 @@ getTransformFeedbackVarying(Program,Index,BufSize) ->
%% only if the selected read buffer has fixed point components and disabled otherwise.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClampColor.xml">external</a> documentation.
--spec clampColor(Target, Clamp) -> ok when Target :: enum(),Clamp :: enum().
+-spec clampColor(Target, Clamp) -> 'ok' when Target :: enum(),Clamp :: enum().
clampColor(Target,Clamp) ->
cast(5538, <<Target:?GLenum,Clamp:?GLenum>>).
@@ -12363,20 +12363,20 @@ clampColor(Target,Clamp) ->
%% waiting for the query to complete.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginConditionalRender.xml">external</a> documentation.
--spec beginConditionalRender(Id, Mode) -> ok when Id :: integer(),Mode :: enum().
+-spec beginConditionalRender(Id, Mode) -> 'ok' when Id :: integer(),Mode :: enum().
beginConditionalRender(Id,Mode) ->
cast(5539, <<Id:?GLuint,Mode:?GLenum>>).
%% @doc
%% See {@link beginConditionalRender/2}
--spec endConditionalRender() -> ok.
+-spec endConditionalRender() -> 'ok'.
endConditionalRender() ->
cast(5540, <<>>).
%% @doc glVertexAttribIPointer
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribIPointer.xml">external</a> documentation.
--spec vertexAttribIPointer(Index, Size, Type, Stride, Pointer) -> ok when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec vertexAttribIPointer(Index, Size, Type, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
vertexAttribIPointer(Index,Size,Type,Stride,Pointer) when is_integer(Pointer) ->
cast(5541, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
vertexAttribIPointer(Index,Size,Type,Stride,Pointer) ->
@@ -12398,105 +12398,105 @@ getVertexAttribIuiv(Index,Pname) ->
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI1i(Index, X) -> ok when Index :: integer(),X :: integer().
+-spec vertexAttribI1i(Index, X) -> 'ok' when Index :: integer(),X :: integer().
vertexAttribI1i(Index,X) ->
cast(5545, <<Index:?GLuint,X:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI2i(Index, X, Y) -> ok when Index :: integer(),X :: integer(),Y :: integer().
+-spec vertexAttribI2i(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer().
vertexAttribI2i(Index,X,Y) ->
cast(5546, <<Index:?GLuint,X:?GLint,Y:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI3i(Index, X, Y, Z) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
+-spec vertexAttribI3i(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
vertexAttribI3i(Index,X,Y,Z) ->
cast(5547, <<Index:?GLuint,X:?GLint,Y:?GLint,Z:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4i(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertexAttribI4i(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertexAttribI4i(Index,X,Y,Z,W) ->
cast(5548, <<Index:?GLuint,X:?GLint,Y:?GLint,Z:?GLint,W:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI1ui(Index, X) -> ok when Index :: integer(),X :: integer().
+-spec vertexAttribI1ui(Index, X) -> 'ok' when Index :: integer(),X :: integer().
vertexAttribI1ui(Index,X) ->
cast(5549, <<Index:?GLuint,X:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI2ui(Index, X, Y) -> ok when Index :: integer(),X :: integer(),Y :: integer().
+-spec vertexAttribI2ui(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer().
vertexAttribI2ui(Index,X,Y) ->
cast(5550, <<Index:?GLuint,X:?GLuint,Y:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI3ui(Index, X, Y, Z) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
+-spec vertexAttribI3ui(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
vertexAttribI3ui(Index,X,Y,Z) ->
cast(5551, <<Index:?GLuint,X:?GLuint,Y:?GLuint,Z:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4ui(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertexAttribI4ui(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertexAttribI4ui(Index,X,Y,Z,W) ->
cast(5552, <<Index:?GLuint,X:?GLuint,Y:?GLuint,Z:?GLuint,W:?GLuint>>).
%% @equiv vertexAttribI1i(Index,X)
--spec vertexAttribI1iv(Index :: integer(),V) -> ok when V :: {X :: integer()}.
+-spec vertexAttribI1iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer()}.
vertexAttribI1iv(Index,{X}) -> vertexAttribI1i(Index,X).
%% @equiv vertexAttribI2i(Index,X,Y)
--spec vertexAttribI2iv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertexAttribI2iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertexAttribI2iv(Index,{X,Y}) -> vertexAttribI2i(Index,X,Y).
%% @equiv vertexAttribI3i(Index,X,Y,Z)
--spec vertexAttribI3iv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertexAttribI3iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertexAttribI3iv(Index,{X,Y,Z}) -> vertexAttribI3i(Index,X,Y,Z).
%% @equiv vertexAttribI4i(Index,X,Y,Z,W)
--spec vertexAttribI4iv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertexAttribI4iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertexAttribI4iv(Index,{X,Y,Z,W}) -> vertexAttribI4i(Index,X,Y,Z,W).
%% @equiv vertexAttribI1ui(Index,X)
--spec vertexAttribI1uiv(Index :: integer(),V) -> ok when V :: {X :: integer()}.
+-spec vertexAttribI1uiv(Index :: integer(),V) -> 'ok' when V :: {X :: integer()}.
vertexAttribI1uiv(Index,{X}) -> vertexAttribI1ui(Index,X).
%% @equiv vertexAttribI2ui(Index,X,Y)
--spec vertexAttribI2uiv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertexAttribI2uiv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertexAttribI2uiv(Index,{X,Y}) -> vertexAttribI2ui(Index,X,Y).
%% @equiv vertexAttribI3ui(Index,X,Y,Z)
--spec vertexAttribI3uiv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertexAttribI3uiv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertexAttribI3uiv(Index,{X,Y,Z}) -> vertexAttribI3ui(Index,X,Y,Z).
%% @equiv vertexAttribI4ui(Index,X,Y,Z,W)
--spec vertexAttribI4uiv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertexAttribI4uiv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertexAttribI4uiv(Index,{X,Y,Z,W}) -> vertexAttribI4ui(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4bv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttribI4bv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttribI4bv(Index,{V1,V2,V3,V4}) ->
cast(5553, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4sv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttribI4sv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttribI4sv(Index,{V1,V2,V3,V4}) ->
cast(5554, <<Index:?GLuint,V1:?GLshort,V2:?GLshort,V3:?GLshort,V4:?GLshort>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4ubv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttribI4ubv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttribI4ubv(Index,{V1,V2,V3,V4}) ->
cast(5555, <<Index:?GLuint,V1:?GLubyte,V2:?GLubyte,V3:?GLubyte,V4:?GLubyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4usv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttribI4usv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttribI4usv(Index,{V1,V2,V3,V4}) ->
cast(5556, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>).
@@ -12529,7 +12529,7 @@ getUniformuiv(Program,Location) ->
%% More than one varying out variable is bound to the same color number.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFragDataLocation.xml">external</a> documentation.
--spec bindFragDataLocation(Program, Color, Name) -> ok when Program :: integer(),Color :: integer(),Name :: string().
+-spec bindFragDataLocation(Program, Color, Name) -> 'ok' when Program :: integer(),Color :: integer(),Name :: string().
bindFragDataLocation(Program,Color,Name) ->
cast(5558, <<Program:?GLuint,Color:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>).
@@ -12548,59 +12548,59 @@ getFragDataLocation(Program,Name) ->
%% @doc
%% See {@link uniform1f/2}
--spec uniform1ui(Location, V0) -> ok when Location :: integer(),V0 :: integer().
+-spec uniform1ui(Location, V0) -> 'ok' when Location :: integer(),V0 :: integer().
uniform1ui(Location,V0) ->
cast(5560, <<Location:?GLint,V0:?GLuint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2ui(Location, V0, V1) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer().
+-spec uniform2ui(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer().
uniform2ui(Location,V0,V1) ->
cast(5561, <<Location:?GLint,V0:?GLuint,V1:?GLuint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3ui(Location, V0, V1, V2) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
+-spec uniform3ui(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
uniform3ui(Location,V0,V1,V2) ->
cast(5562, <<Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4ui(Location, V0, V1, V2, V3) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
+-spec uniform4ui(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
uniform4ui(Location,V0,V1,V2,V3) ->
cast(5563, <<Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1uiv(Location, Value) -> ok when Location :: integer(),Value :: [integer()].
+-spec uniform1uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [integer()].
uniform1uiv(Location,Value) ->
cast(5564, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLuint>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2uiv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer()}].
+-spec uniform2uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer()}].
uniform2uiv(Location,Value) ->
cast(5565, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3uiv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer(),integer()}].
+-spec uniform3uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer()}].
uniform3uiv(Location,Value) ->
cast(5566, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4uiv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
+-spec uniform4uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
uniform4uiv(Location,Value) ->
cast(5567, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link texParameterf/3}
--spec texParameterIiv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texParameterIiv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texParameterIiv(Target,Pname,Params) ->
cast(5568, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -12608,7 +12608,7 @@ texParameterIiv(Target,Pname,Params) ->
%% @doc glTexParameterI
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexParameterI.xml">external</a> documentation.
--spec texParameterIuiv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texParameterIuiv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texParameterIuiv(Target,Pname,Params) ->
cast(5569, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLuint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -12655,21 +12655,21 @@ getTexParameterIuiv(Target,Pname) ->
%% and the buffer being cleared is defined. However, this is not an error.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearBuffer.xml">external</a> documentation.
--spec clearBufferiv(Buffer, Drawbuffer, Value) -> ok when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
+-spec clearBufferiv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
clearBufferiv(Buffer,Drawbuffer,Value) ->
cast(5572, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>).
%% @doc
%% See {@link clearBufferiv/3}
--spec clearBufferuiv(Buffer, Drawbuffer, Value) -> ok when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
+-spec clearBufferuiv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
clearBufferuiv(Buffer,Drawbuffer,Value) ->
cast(5573, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint,
(<< <<C:?GLuint>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>).
%% @doc
%% See {@link clearBufferiv/3}
--spec clearBufferfv(Buffer, Drawbuffer, Value) -> ok when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
+-spec clearBufferfv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
clearBufferfv(Buffer,Drawbuffer,Value) ->
cast(5574, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>).
@@ -12677,7 +12677,7 @@ clearBufferfv(Buffer,Drawbuffer,Value) ->
%% @doc glClearBufferfi
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearBufferfi.xml">external</a> documentation.
--spec clearBufferfi(Buffer, Drawbuffer, Depth, Stencil) -> ok when Buffer :: enum(),Drawbuffer :: integer(),Depth :: float(),Stencil :: integer().
+-spec clearBufferfi(Buffer, Drawbuffer, Depth, Stencil) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Depth :: float(),Stencil :: integer().
clearBufferfi(Buffer,Drawbuffer,Depth,Stencil) ->
cast(5575, <<Buffer:?GLenum,Drawbuffer:?GLint,Depth:?GLfloat,Stencil:?GLint>>).
@@ -12690,14 +12690,14 @@ getStringi(Name,Index) ->
%% @doc glDrawArraysInstance
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysInstance.xml">external</a> documentation.
--spec drawArraysInstanced(Mode, First, Count, Primcount) -> ok when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer().
+-spec drawArraysInstanced(Mode, First, Count, Primcount) -> 'ok' when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer().
drawArraysInstanced(Mode,First,Count,Primcount) ->
cast(5577, <<Mode:?GLenum,First:?GLint,Count:?GLsizei,Primcount:?GLsizei>>).
%% @doc glDrawElementsInstance
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstance.xml">external</a> documentation.
--spec drawElementsInstanced(Mode, Count, Type, Indices, Primcount) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer().
+-spec drawElementsInstanced(Mode, Count, Type, Indices, Primcount) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer().
drawElementsInstanced(Mode,Count,Type,Indices,Primcount) when is_integer(Indices) ->
cast(5578, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei>>);
drawElementsInstanced(Mode,Count,Type,Indices,Primcount) ->
@@ -12768,7 +12768,7 @@ drawElementsInstanced(Mode,Count,Type,Indices,Primcount) ->
%% or greater than or equal to the clamped number of texels in the texel array.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexBuffer.xml">external</a> documentation.
--spec texBuffer(Target, Internalformat, Buffer) -> ok when Target :: enum(),Internalformat :: enum(),Buffer :: integer().
+-spec texBuffer(Target, Internalformat, Buffer) -> 'ok' when Target :: enum(),Internalformat :: enum(),Buffer :: integer().
texBuffer(Target,Internalformat,Buffer) ->
cast(5580, <<Target:?GLenum,Internalformat:?GLenum,Buffer:?GLuint>>).
@@ -12790,7 +12790,7 @@ texBuffer(Target,Internalformat,Buffer) ->
%% occurs before the basevertex offset is added to the array index.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPrimitiveRestartIndex.xml">external</a> documentation.
--spec primitiveRestartIndex(Index) -> ok when Index :: integer().
+-spec primitiveRestartIndex(Index) -> 'ok' when Index :: integer().
primitiveRestartIndex(Index) ->
cast(5581, <<Index:?GLuint>>).
@@ -12860,7 +12860,7 @@ getBufferParameteri64v(Target,Pname) ->
%% is not zero, then `Textarget' must be `?GL_TEXTURE_3D'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFramebufferTexture.xml">external</a> documentation.
--spec framebufferTexture(Target, Attachment, Texture, Level) -> ok when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer().
+-spec framebufferTexture(Target, Attachment, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer().
framebufferTexture(Target,Attachment,Texture,Level) ->
cast(5584, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint>>).
@@ -12876,7 +12876,7 @@ framebufferTexture(Target,Attachment,Texture,Level) ->
%% `Index' must be less than the value of `?GL_MAX_VERTEX_ATTRIBUTES'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribDivisor.xml">external</a> documentation.
--spec vertexAttribDivisor(Index, Divisor) -> ok when Index :: integer(),Divisor :: integer().
+-spec vertexAttribDivisor(Index, Divisor) -> 'ok' when Index :: integer(),Divisor :: integer().
vertexAttribDivisor(Index,Divisor) ->
cast(5585, <<Index:?GLuint,Divisor:?GLuint>>).
@@ -12897,39 +12897,39 @@ vertexAttribDivisor(Index,Divisor) ->
%% that subset of the fragment's samples is implementation dependent.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMinSampleShading.xml">external</a> documentation.
--spec minSampleShading(Value) -> ok when Value :: clamp().
+-spec minSampleShading(Value) -> 'ok' when Value :: clamp().
minSampleShading(Value) ->
cast(5586, <<Value:?GLclampf>>).
%% @doc
%% See {@link blendEquation/1}
--spec blendEquationi(Buf, Mode) -> ok when Buf :: integer(),Mode :: enum().
+-spec blendEquationi(Buf, Mode) -> 'ok' when Buf :: integer(),Mode :: enum().
blendEquationi(Buf,Mode) ->
cast(5587, <<Buf:?GLuint,Mode:?GLenum>>).
%% @doc
%% See {@link blendEquationSeparate/2}
--spec blendEquationSeparatei(Buf, ModeRGB, ModeAlpha) -> ok when Buf :: integer(),ModeRGB :: enum(),ModeAlpha :: enum().
+-spec blendEquationSeparatei(Buf, ModeRGB, ModeAlpha) -> 'ok' when Buf :: integer(),ModeRGB :: enum(),ModeAlpha :: enum().
blendEquationSeparatei(Buf,ModeRGB,ModeAlpha) ->
cast(5588, <<Buf:?GLuint,ModeRGB:?GLenum,ModeAlpha:?GLenum>>).
%% @doc glBlendFunci
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunci.xml">external</a> documentation.
--spec blendFunci(Buf, Src, Dst) -> ok when Buf :: integer(),Src :: enum(),Dst :: enum().
+-spec blendFunci(Buf, Src, Dst) -> 'ok' when Buf :: integer(),Src :: enum(),Dst :: enum().
blendFunci(Buf,Src,Dst) ->
cast(5589, <<Buf:?GLuint,Src:?GLenum,Dst:?GLenum>>).
%% @doc
%% See {@link blendFuncSeparate/4}
--spec blendFuncSeparatei(Buf, SrcRGB, DstRGB, SrcAlpha, DstAlpha) -> ok when Buf :: integer(),SrcRGB :: enum(),DstRGB :: enum(),SrcAlpha :: enum(),DstAlpha :: enum().
+-spec blendFuncSeparatei(Buf, SrcRGB, DstRGB, SrcAlpha, DstAlpha) -> 'ok' when Buf :: integer(),SrcRGB :: enum(),DstRGB :: enum(),SrcAlpha :: enum(),DstAlpha :: enum().
blendFuncSeparatei(Buf,SrcRGB,DstRGB,SrcAlpha,DstAlpha) ->
cast(5590, <<Buf:?GLuint,SrcRGB:?GLenum,DstRGB:?GLenum,SrcAlpha:?GLenum,DstAlpha:?GLenum>>).
%% @doc glLoadTransposeMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrixARB.xml">external</a> documentation.
--spec loadTransposeMatrixfARB(M) -> ok when M :: matrix().
+-spec loadTransposeMatrixfARB(M) -> 'ok' when M :: matrix().
loadTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5591, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
loadTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -12938,7 +12938,7 @@ loadTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc glLoadTransposeMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrixARB.xml">external</a> documentation.
--spec loadTransposeMatrixdARB(M) -> ok when M :: matrix().
+-spec loadTransposeMatrixdARB(M) -> 'ok' when M :: matrix().
loadTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5592, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
loadTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -12947,7 +12947,7 @@ loadTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc glMultTransposeMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrixARB.xml">external</a> documentation.
--spec multTransposeMatrixfARB(M) -> ok when M :: matrix().
+-spec multTransposeMatrixfARB(M) -> 'ok' when M :: matrix().
multTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5593, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
multTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -12956,7 +12956,7 @@ multTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc glMultTransposeMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrixARB.xml">external</a> documentation.
--spec multTransposeMatrixdARB(M) -> ok when M :: matrix().
+-spec multTransposeMatrixdARB(M) -> 'ok' when M :: matrix().
multTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5594, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
multTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -12965,7 +12965,7 @@ multTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightbvARB(Weights) -> ok when Weights :: [integer()].
+-spec weightbvARB(Weights) -> 'ok' when Weights :: [integer()].
weightbvARB(Weights) ->
cast(5595, <<(length(Weights)):?GLuint,
(<< <<C:?GLbyte>> || C <- Weights>>)/binary,0:((8-((length(Weights)+ 4) rem 8)) rem 8)>>).
@@ -12973,7 +12973,7 @@ weightbvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightsvARB(Weights) -> ok when Weights :: [integer()].
+-spec weightsvARB(Weights) -> 'ok' when Weights :: [integer()].
weightsvARB(Weights) ->
cast(5596, <<(length(Weights)):?GLuint,
(<< <<C:?GLshort>> || C <- Weights>>)/binary,0:((8-((length(Weights)*2+ 4) rem 8)) rem 8)>>).
@@ -12981,7 +12981,7 @@ weightsvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightivARB(Weights) -> ok when Weights :: [integer()].
+-spec weightivARB(Weights) -> 'ok' when Weights :: [integer()].
weightivARB(Weights) ->
cast(5597, <<(length(Weights)):?GLuint,
(<< <<C:?GLint>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>).
@@ -12989,7 +12989,7 @@ weightivARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightfvARB(Weights) -> ok when Weights :: [float()].
+-spec weightfvARB(Weights) -> 'ok' when Weights :: [float()].
weightfvARB(Weights) ->
cast(5598, <<(length(Weights)):?GLuint,
(<< <<C:?GLfloat>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>).
@@ -12997,7 +12997,7 @@ weightfvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightdvARB(Weights) -> ok when Weights :: [float()].
+-spec weightdvARB(Weights) -> 'ok' when Weights :: [float()].
weightdvARB(Weights) ->
cast(5599, <<(length(Weights)):?GLuint,0:32,
(<< <<C:?GLdouble>> || C <- Weights>>)/binary>>).
@@ -13005,7 +13005,7 @@ weightdvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightubvARB(Weights) -> ok when Weights :: [integer()].
+-spec weightubvARB(Weights) -> 'ok' when Weights :: [integer()].
weightubvARB(Weights) ->
cast(5600, <<(length(Weights)):?GLuint,
(<< <<C:?GLubyte>> || C <- Weights>>)/binary,0:((8-((length(Weights)+ 4) rem 8)) rem 8)>>).
@@ -13013,7 +13013,7 @@ weightubvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightusvARB(Weights) -> ok when Weights :: [integer()].
+-spec weightusvARB(Weights) -> 'ok' when Weights :: [integer()].
weightusvARB(Weights) ->
cast(5601, <<(length(Weights)):?GLuint,
(<< <<C:?GLushort>> || C <- Weights>>)/binary,0:((8-((length(Weights)*2+ 4) rem 8)) rem 8)>>).
@@ -13021,7 +13021,7 @@ weightusvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightuivARB(Weights) -> ok when Weights :: [integer()].
+-spec weightuivARB(Weights) -> 'ok' when Weights :: [integer()].
weightuivARB(Weights) ->
cast(5602, <<(length(Weights)):?GLuint,
(<< <<C:?GLuint>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>).
@@ -13029,21 +13029,21 @@ weightuivARB(Weights) ->
%% @doc glVertexBlenARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexBlenARB.xml">external</a> documentation.
--spec vertexBlendARB(Count) -> ok when Count :: integer().
+-spec vertexBlendARB(Count) -> 'ok' when Count :: integer().
vertexBlendARB(Count) ->
cast(5603, <<Count:?GLint>>).
%% @doc glCurrentPaletteMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCurrentPaletteMatrixARB.xml">external</a> documentation.
--spec currentPaletteMatrixARB(Index) -> ok when Index :: integer().
+-spec currentPaletteMatrixARB(Index) -> 'ok' when Index :: integer().
currentPaletteMatrixARB(Index) ->
cast(5604, <<Index:?GLint>>).
%% @doc glMatrixIndexARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation.
--spec matrixIndexubvARB(Indices) -> ok when Indices :: [integer()].
+-spec matrixIndexubvARB(Indices) -> 'ok' when Indices :: [integer()].
matrixIndexubvARB(Indices) ->
cast(5605, <<(length(Indices)):?GLuint,
(<< <<C:?GLubyte>> || C <- Indices>>)/binary,0:((8-((length(Indices)+ 4) rem 8)) rem 8)>>).
@@ -13051,7 +13051,7 @@ matrixIndexubvARB(Indices) ->
%% @doc glMatrixIndexARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation.
--spec matrixIndexusvARB(Indices) -> ok when Indices :: [integer()].
+-spec matrixIndexusvARB(Indices) -> 'ok' when Indices :: [integer()].
matrixIndexusvARB(Indices) ->
cast(5606, <<(length(Indices)):?GLuint,
(<< <<C:?GLushort>> || C <- Indices>>)/binary,0:((8-((length(Indices)*2+ 4) rem 8)) rem 8)>>).
@@ -13059,7 +13059,7 @@ matrixIndexusvARB(Indices) ->
%% @doc glMatrixIndexARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation.
--spec matrixIndexuivARB(Indices) -> ok when Indices :: [integer()].
+-spec matrixIndexuivARB(Indices) -> 'ok' when Indices :: [integer()].
matrixIndexuivARB(Indices) ->
cast(5607, <<(length(Indices)):?GLuint,
(<< <<C:?GLuint>> || C <- Indices>>)/binary,0:(((1+length(Indices)) rem 2)*32)>>).
@@ -13067,21 +13067,21 @@ matrixIndexuivARB(Indices) ->
%% @doc glProgramStringARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramStringARB.xml">external</a> documentation.
--spec programStringARB(Target, Format, String) -> ok when Target :: enum(),Format :: enum(),String :: string().
+-spec programStringARB(Target, Format, String) -> 'ok' when Target :: enum(),Format :: enum(),String :: string().
programStringARB(Target,Format,String) ->
cast(5608, <<Target:?GLenum,Format:?GLenum,(list_to_binary([String|[0]]))/binary,0:((8-((length(String)+ 1) rem 8)) rem 8)>>).
%% @doc glBindProgramARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindProgramARB.xml">external</a> documentation.
--spec bindProgramARB(Target, Program) -> ok when Target :: enum(),Program :: integer().
+-spec bindProgramARB(Target, Program) -> 'ok' when Target :: enum(),Program :: integer().
bindProgramARB(Target,Program) ->
cast(5609, <<Target:?GLenum,Program:?GLuint>>).
%% @doc glDeleteProgramsARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgramsARB.xml">external</a> documentation.
--spec deleteProgramsARB(Programs) -> ok when Programs :: [integer()].
+-spec deleteProgramsARB(Programs) -> 'ok' when Programs :: [integer()].
deleteProgramsARB(Programs) ->
cast(5610, <<(length(Programs)):?GLuint,
(<< <<C:?GLuint>> || C <- Programs>>)/binary,0:(((1+length(Programs)) rem 2)*32)>>).
@@ -13096,56 +13096,56 @@ genProgramsARB(N) ->
%% @doc glProgramEnvParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation.
--spec programEnvParameter4dARB(Target, Index, X, Y, Z, W) -> ok when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec programEnvParameter4dARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
programEnvParameter4dARB(Target,Index,X,Y,Z,W) ->
cast(5612, <<Target:?GLenum,Index:?GLuint,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc glProgramEnvParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation.
--spec programEnvParameter4dvARB(Target, Index, Params) -> ok when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
+-spec programEnvParameter4dvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
programEnvParameter4dvARB(Target,Index,{P1,P2,P3,P4}) ->
cast(5613, <<Target:?GLenum,Index:?GLuint,P1:?GLdouble,P2:?GLdouble,P3:?GLdouble,P4:?GLdouble>>).
%% @doc glProgramEnvParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation.
--spec programEnvParameter4fARB(Target, Index, X, Y, Z, W) -> ok when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec programEnvParameter4fARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
programEnvParameter4fARB(Target,Index,X,Y,Z,W) ->
cast(5614, <<Target:?GLenum,Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @doc glProgramEnvParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation.
--spec programEnvParameter4fvARB(Target, Index, Params) -> ok when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
+-spec programEnvParameter4fvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
programEnvParameter4fvARB(Target,Index,{P1,P2,P3,P4}) ->
cast(5615, <<Target:?GLenum,Index:?GLuint,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>).
%% @doc glProgramLocalParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation.
--spec programLocalParameter4dARB(Target, Index, X, Y, Z, W) -> ok when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec programLocalParameter4dARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
programLocalParameter4dARB(Target,Index,X,Y,Z,W) ->
cast(5616, <<Target:?GLenum,Index:?GLuint,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc glProgramLocalParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation.
--spec programLocalParameter4dvARB(Target, Index, Params) -> ok when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
+-spec programLocalParameter4dvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
programLocalParameter4dvARB(Target,Index,{P1,P2,P3,P4}) ->
cast(5617, <<Target:?GLenum,Index:?GLuint,P1:?GLdouble,P2:?GLdouble,P3:?GLdouble,P4:?GLdouble>>).
%% @doc glProgramLocalParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation.
--spec programLocalParameter4fARB(Target, Index, X, Y, Z, W) -> ok when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec programLocalParameter4fARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
programLocalParameter4fARB(Target,Index,X,Y,Z,W) ->
cast(5618, <<Target:?GLenum,Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @doc glProgramLocalParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation.
--spec programLocalParameter4fvARB(Target, Index, Params) -> ok when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
+-spec programLocalParameter4fvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
programLocalParameter4fvARB(Target,Index,{P1,P2,P3,P4}) ->
cast(5619, <<Target:?GLenum,Index:?GLuint,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>).
@@ -13180,7 +13180,7 @@ getProgramLocalParameterfvARB(Target,Index) ->
%% @doc glGetProgramStringARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramStringARB.xml">external</a> documentation.
--spec getProgramStringARB(Target, Pname, String) -> ok when Target :: enum(),Pname :: enum(),String :: mem().
+-spec getProgramStringARB(Target, Pname, String) -> 'ok' when Target :: enum(),Pname :: enum(),String :: mem().
getProgramStringARB(Target,Pname,String) ->
send_bin(String),
call(5624, <<Target:?GLenum,Pname:?GLenum>>).
@@ -13195,7 +13195,7 @@ getBufferParameterivARB(Target,Pname) ->
%% @doc glDeleteObjectARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteObjectARB.xml">external</a> documentation.
--spec deleteObjectARB(Obj) -> ok when Obj :: integer().
+-spec deleteObjectARB(Obj) -> 'ok' when Obj :: integer().
deleteObjectARB(Obj) ->
cast(5626, <<Obj:?GLhandleARB>>).
@@ -13209,7 +13209,7 @@ getHandleARB(Pname) ->
%% @doc glDetachObjectARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDetachObjectARB.xml">external</a> documentation.
--spec detachObjectARB(ContainerObj, AttachedObj) -> ok when ContainerObj :: integer(),AttachedObj :: integer().
+-spec detachObjectARB(ContainerObj, AttachedObj) -> 'ok' when ContainerObj :: integer(),AttachedObj :: integer().
detachObjectARB(ContainerObj,AttachedObj) ->
cast(5628, <<ContainerObj:?GLhandleARB,AttachedObj:?GLhandleARB>>).
@@ -13223,7 +13223,7 @@ createShaderObjectARB(ShaderType) ->
%% @doc glShaderSourceARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderSourceARB.xml">external</a> documentation.
--spec shaderSourceARB(ShaderObj, String) -> ok when ShaderObj :: integer(),String :: iolist().
+-spec shaderSourceARB(ShaderObj, String) -> 'ok' when ShaderObj :: integer(),String :: iolist().
shaderSourceARB(ShaderObj,String) ->
StringTemp = list_to_binary([[Str|[0]] || Str <- String ]),
cast(5630, <<ShaderObj:?GLhandleARB,(length(String)):?GLuint,(size(StringTemp)):?GLuint,(StringTemp)/binary,0:((8-((size(StringTemp)+4) rem 8)) rem 8)>>).
@@ -13231,7 +13231,7 @@ shaderSourceARB(ShaderObj,String) ->
%% @doc glCompileShaderARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShaderARB.xml">external</a> documentation.
--spec compileShaderARB(ShaderObj) -> ok when ShaderObj :: integer().
+-spec compileShaderARB(ShaderObj) -> 'ok' when ShaderObj :: integer().
compileShaderARB(ShaderObj) ->
cast(5631, <<ShaderObj:?GLhandleARB>>).
@@ -13245,28 +13245,28 @@ createProgramObjectARB() ->
%% @doc glAttachObjectARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAttachObjectARB.xml">external</a> documentation.
--spec attachObjectARB(ContainerObj, Obj) -> ok when ContainerObj :: integer(),Obj :: integer().
+-spec attachObjectARB(ContainerObj, Obj) -> 'ok' when ContainerObj :: integer(),Obj :: integer().
attachObjectARB(ContainerObj,Obj) ->
cast(5633, <<ContainerObj:?GLhandleARB,Obj:?GLhandleARB>>).
%% @doc glLinkProgramARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLinkProgramARB.xml">external</a> documentation.
--spec linkProgramARB(ProgramObj) -> ok when ProgramObj :: integer().
+-spec linkProgramARB(ProgramObj) -> 'ok' when ProgramObj :: integer().
linkProgramARB(ProgramObj) ->
cast(5634, <<ProgramObj:?GLhandleARB>>).
%% @doc glUseProgramObjectARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgramObjectARB.xml">external</a> documentation.
--spec useProgramObjectARB(ProgramObj) -> ok when ProgramObj :: integer().
+-spec useProgramObjectARB(ProgramObj) -> 'ok' when ProgramObj :: integer().
useProgramObjectARB(ProgramObj) ->
cast(5635, <<ProgramObj:?GLhandleARB>>).
%% @doc glValidateProgramARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgramARB.xml">external</a> documentation.
--spec validateProgramARB(ProgramObj) -> ok when ProgramObj :: integer().
+-spec validateProgramARB(ProgramObj) -> 'ok' when ProgramObj :: integer().
validateProgramARB(ProgramObj) ->
cast(5636, <<ProgramObj:?GLhandleARB>>).
@@ -13336,7 +13336,7 @@ getShaderSourceARB(Obj,MaxLength) ->
%% @doc glBindAttribLocationARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocationARB.xml">external</a> documentation.
--spec bindAttribLocationARB(ProgramObj, Index, Name) -> ok when ProgramObj :: integer(),Index :: integer(),Name :: string().
+-spec bindAttribLocationARB(ProgramObj, Index, Name) -> 'ok' when ProgramObj :: integer(),Index :: integer(),Name :: string().
bindAttribLocationARB(ProgramObj,Index,Name) ->
cast(5646, <<ProgramObj:?GLhandleARB,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>).
@@ -13378,7 +13378,7 @@ isRenderbuffer(Renderbuffer) ->
%% object to `Target' .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindRenderbuffer.xml">external</a> documentation.
--spec bindRenderbuffer(Target, Renderbuffer) -> ok when Target :: enum(),Renderbuffer :: integer().
+-spec bindRenderbuffer(Target, Renderbuffer) -> 'ok' when Target :: enum(),Renderbuffer :: integer().
bindRenderbuffer(Target,Renderbuffer) ->
cast(5650, <<Target:?GLenum,Renderbuffer:?GLuint>>).
@@ -13400,7 +13400,7 @@ bindRenderbuffer(Target,Renderbuffer) ->
%% renderbuffer image is specifically `not' detached from any non-bound framebuffers.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteRenderbuffers.xml">external</a> documentation.
--spec deleteRenderbuffers(Renderbuffers) -> ok when Renderbuffers :: [integer()].
+-spec deleteRenderbuffers(Renderbuffers) -> 'ok' when Renderbuffers :: [integer()].
deleteRenderbuffers(Renderbuffers) ->
cast(5651, <<(length(Renderbuffers)):?GLuint,
(<< <<C:?GLuint>> || C <- Renderbuffers>>)/binary,0:(((1+length(Renderbuffers)) rem 2)*32)>>).
@@ -13440,7 +13440,7 @@ genRenderbuffers(N) ->
%% undefined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRenderbufferStorage.xml">external</a> documentation.
--spec renderbufferStorage(Target, Internalformat, Width, Height) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer().
+-spec renderbufferStorage(Target, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer().
renderbufferStorage(Target,Internalformat,Width,Height) ->
cast(5653, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>).
@@ -13500,7 +13500,7 @@ isFramebuffer(Framebuffer) ->
%% object to `Target' .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFramebuffer.xml">external</a> documentation.
--spec bindFramebuffer(Target, Framebuffer) -> ok when Target :: enum(),Framebuffer :: integer().
+-spec bindFramebuffer(Target, Framebuffer) -> 'ok' when Target :: enum(),Framebuffer :: integer().
bindFramebuffer(Target,Framebuffer) ->
cast(5656, <<Target:?GLenum,Framebuffer:?GLuint>>).
@@ -13515,7 +13515,7 @@ bindFramebuffer(Target,Framebuffer) ->
%% had been executed with the corresponding `Target' and `Framebuffer' zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteFramebuffers.xml">external</a> documentation.
--spec deleteFramebuffers(Framebuffers) -> ok when Framebuffers :: [integer()].
+-spec deleteFramebuffers(Framebuffers) -> 'ok' when Framebuffers :: [integer()].
deleteFramebuffers(Framebuffers) ->
cast(5657, <<(length(Framebuffers)):?GLuint,
(<< <<C:?GLuint>> || C <- Framebuffers>>)/binary,0:(((1+length(Framebuffers)) rem 2)*32)>>).
@@ -13591,19 +13591,19 @@ checkFramebufferStatus(Target) ->
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTexture1D(Target, Attachment, Textarget, Texture, Level) -> ok when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer().
+-spec framebufferTexture1D(Target, Attachment, Textarget, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer().
framebufferTexture1D(Target,Attachment,Textarget,Texture,Level) ->
cast(5660, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint>>).
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTexture2D(Target, Attachment, Textarget, Texture, Level) -> ok when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer().
+-spec framebufferTexture2D(Target, Attachment, Textarget, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer().
framebufferTexture2D(Target,Attachment,Textarget,Texture,Level) ->
cast(5661, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint>>).
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTexture3D(Target, Attachment, Textarget, Texture, Level, Zoffset) -> ok when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer(),Zoffset :: integer().
+-spec framebufferTexture3D(Target, Attachment, Textarget, Texture, Level, Zoffset) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer(),Zoffset :: integer().
framebufferTexture3D(Target,Attachment,Textarget,Texture,Level,Zoffset) ->
cast(5662, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint,Zoffset:?GLint>>).
@@ -13635,7 +13635,7 @@ framebufferTexture3D(Target,Attachment,Textarget,Texture,Level,Zoffset) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFramebufferRenderbuffer.xml">external</a> documentation.
--spec framebufferRenderbuffer(Target, Attachment, Renderbuffertarget, Renderbuffer) -> ok when Target :: enum(),Attachment :: enum(),Renderbuffertarget :: enum(),Renderbuffer :: integer().
+-spec framebufferRenderbuffer(Target, Attachment, Renderbuffertarget, Renderbuffer) -> 'ok' when Target :: enum(),Attachment :: enum(),Renderbuffertarget :: enum(),Renderbuffer :: integer().
framebufferRenderbuffer(Target,Attachment,Renderbuffertarget,Renderbuffer) ->
cast(5663, <<Target:?GLenum,Attachment:?GLenum,Renderbuffertarget:?GLenum,Renderbuffer:?GLuint>>).
@@ -13751,7 +13751,7 @@ getFramebufferAttachmentParameteriv(Target,Attachment,Pname) ->
%% independently.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenerateMipmap.xml">external</a> documentation.
--spec generateMipmap(Target) -> ok when Target :: enum().
+-spec generateMipmap(Target) -> 'ok' when Target :: enum().
generateMipmap(Target) ->
cast(5665, <<Target:?GLenum>>).
@@ -13793,7 +13793,7 @@ generateMipmap(Target) ->
%% buffers are the same, the result of the operation is undefined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlitFramebuffer.xml">external</a> documentation.
--spec blitFramebuffer(SrcX0, SrcY0, SrcX1, SrcY1, DstX0, DstY0, DstX1, DstY1, Mask, Filter) -> ok when SrcX0 :: integer(),SrcY0 :: integer(),SrcX1 :: integer(),SrcY1 :: integer(),DstX0 :: integer(),DstY0 :: integer(),DstX1 :: integer(),DstY1 :: integer(),Mask :: integer(),Filter :: enum().
+-spec blitFramebuffer(SrcX0, SrcY0, SrcX1, SrcY1, DstX0, DstY0, DstX1, DstY1, Mask, Filter) -> 'ok' when SrcX0 :: integer(),SrcY0 :: integer(),SrcX1 :: integer(),SrcY1 :: integer(),DstX0 :: integer(),DstY0 :: integer(),DstX1 :: integer(),DstY1 :: integer(),Mask :: integer(),Filter :: enum().
blitFramebuffer(SrcX0,SrcY0,SrcX1,SrcY1,DstX0,DstY0,DstX1,DstY1,Mask,Filter) ->
cast(5666, <<SrcX0:?GLint,SrcY0:?GLint,SrcX1:?GLint,SrcY1:?GLint,DstX0:?GLint,DstY0:?GLint,DstX1:?GLint,DstY1:?GLint,Mask:?GLbitfield,Filter:?GLenum>>).
@@ -13817,19 +13817,19 @@ blitFramebuffer(SrcX0,SrcY0,SrcX1,SrcY1,DstX0,DstY0,DstX1,DstY1,Mask,Filter) ->
%% are undefined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRenderbufferStorageMultisample.xml">external</a> documentation.
--spec renderbufferStorageMultisample(Target, Samples, Internalformat, Width, Height) -> ok when Target :: enum(),Samples :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer().
+-spec renderbufferStorageMultisample(Target, Samples, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer().
renderbufferStorageMultisample(Target,Samples,Internalformat,Width,Height) ->
cast(5667, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>).
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTextureLayer(Target, Attachment, Texture, Level, Layer) -> ok when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Layer :: integer().
+-spec framebufferTextureLayer(Target, Attachment, Texture, Level, Layer) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Layer :: integer().
framebufferTextureLayer(Target,Attachment,Texture,Level,Layer) ->
cast(5668, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint,Layer:?GLint>>).
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTextureFaceARB(Target, Attachment, Texture, Level, Face) -> ok when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Face :: enum().
+-spec framebufferTextureFaceARB(Target, Attachment, Texture, Level, Face) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Face :: enum().
framebufferTextureFaceARB(Target,Attachment,Texture,Level,Face) ->
cast(5669, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint,Face:?GLenum>>).
@@ -13843,7 +13843,7 @@ framebufferTextureFaceARB(Target,Attachment,Texture,Level,Face) ->
%% to indicate distinct subranges of the mapping which require flushing.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFlushMappedBufferRange.xml">external</a> documentation.
--spec flushMappedBufferRange(Target, Offset, Length) -> ok when Target :: enum(),Offset :: integer(),Length :: integer().
+-spec flushMappedBufferRange(Target, Offset, Length) -> 'ok' when Target :: enum(),Offset :: integer(),Length :: integer().
flushMappedBufferRange(Target,Offset,Length) ->
cast(5670, <<Target:?GLenum,0:32,Offset:?GLintptr,Length:?GLsizeiptr>>).
@@ -13858,7 +13858,7 @@ flushMappedBufferRange(Target,Offset,Length) ->
%% array object, and any previous vertex array object binding is broken.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindVertexArray.xml">external</a> documentation.
--spec bindVertexArray(Array) -> ok when Array :: integer().
+-spec bindVertexArray(Array) -> 'ok' when Array :: integer().
bindVertexArray(Array) ->
cast(5671, <<Array:?GLuint>>).
@@ -13871,7 +13871,7 @@ bindVertexArray(Array) ->
%% current. Unused names in `Arrays' are silently ignored, as is the value zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteVertexArrays.xml">external</a> documentation.
--spec deleteVertexArrays(Arrays) -> ok when Arrays :: [integer()].
+-spec deleteVertexArrays(Arrays) -> 'ok' when Arrays :: [integer()].
deleteVertexArrays(Arrays) ->
cast(5672, <<(length(Arrays)):?GLuint,
(<< <<C:?GLuint>> || C <- Arrays>>)/binary,0:(((1+length(Arrays)) rem 2)*32)>>).
@@ -14045,7 +14045,7 @@ getUniformBlockIndex(Program,UniformBlockName) ->
%% vertex, geometry, or fragment programming stages of program, respectively, is returned.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniformBlock.xml">external</a> documentation.
--spec getActiveUniformBlockiv(Program, UniformBlockIndex, Pname, Params) -> ok when Program :: integer(),UniformBlockIndex :: integer(),Pname :: enum(),Params :: mem().
+-spec getActiveUniformBlockiv(Program, UniformBlockIndex, Pname, Params) -> 'ok' when Program :: integer(),UniformBlockIndex :: integer(),Pname :: enum(),Params :: mem().
getActiveUniformBlockiv(Program,UniformBlockIndex,Pname,Params) ->
send_bin(Params),
call(5679, <<Program:?GLuint,UniformBlockIndex:?GLuint,Pname:?GLenum>>).
@@ -14095,7 +14095,7 @@ getActiveUniformBlockName(Program,UniformBlockIndex,BufSize) ->
%% assigned to each of its active uniform blocks is reset to zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniformBlockBinding.xml">external</a> documentation.
--spec uniformBlockBinding(Program, UniformBlockIndex, UniformBlockBinding) -> ok when Program :: integer(),UniformBlockIndex :: integer(),UniformBlockBinding :: integer().
+-spec uniformBlockBinding(Program, UniformBlockIndex, UniformBlockBinding) -> 'ok' when Program :: integer(),UniformBlockIndex :: integer(),UniformBlockBinding :: integer().
uniformBlockBinding(Program,UniformBlockIndex,UniformBlockBinding) ->
cast(5681, <<Program:?GLuint,UniformBlockIndex:?GLuint,UniformBlockBinding:?GLuint>>).
@@ -14121,7 +14121,7 @@ uniformBlockBinding(Program,UniformBlockIndex,UniformBlockBinding) ->
%% , `Writeoffset' and `Size' must not overlap.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyBufferSubData.xml">external</a> documentation.
--spec copyBufferSubData(ReadTarget, WriteTarget, ReadOffset, WriteOffset, Size) -> ok when ReadTarget :: enum(),WriteTarget :: enum(),ReadOffset :: integer(),WriteOffset :: integer(),Size :: integer().
+-spec copyBufferSubData(ReadTarget, WriteTarget, ReadOffset, WriteOffset, Size) -> 'ok' when ReadTarget :: enum(),WriteTarget :: enum(),ReadOffset :: integer(),WriteOffset :: integer(),Size :: integer().
copyBufferSubData(ReadTarget,WriteTarget,ReadOffset,WriteOffset,Size) ->
cast(5682, <<ReadTarget:?GLenum,WriteTarget:?GLenum,ReadOffset:?GLintptr,WriteOffset:?GLintptr,Size:?GLsizeiptr>>).
@@ -14135,7 +14135,7 @@ copyBufferSubData(ReadTarget,WriteTarget,ReadOffset,WriteOffset,Size) ->
%% operation is undefined if the sum would be negative.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsBaseVertex.xml">external</a> documentation.
--spec drawElementsBaseVertex(Mode, Count, Type, Indices, Basevertex) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer().
+-spec drawElementsBaseVertex(Mode, Count, Type, Indices, Basevertex) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer().
drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) when is_integer(Indices) ->
cast(5683, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Basevertex:?GLint>>);
drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) ->
@@ -14157,7 +14157,7 @@ drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) ->
%% if the sum would be negative.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawRangeElementsBaseVertex.xml">external</a> documentation.
--spec drawRangeElementsBaseVertex(Mode, Start, End, Count, Type, Indices, Basevertex) -> ok when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer().
+-spec drawRangeElementsBaseVertex(Mode, Start, End, Count, Type, Indices, Basevertex) -> 'ok' when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer().
drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) when is_integer(Indices) ->
cast(5685, <<Mode:?GLenum,Start:?GLuint,End:?GLuint,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Basevertex:?GLint>>);
drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) ->
@@ -14174,7 +14174,7 @@ drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) ->
%% conditions). The operation is undefined if the sum would be negative.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseVertex.xml">external</a> documentation.
--spec drawElementsInstancedBaseVertex(Mode, Count, Type, Indices, Primcount, Basevertex) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer().
+-spec drawElementsInstancedBaseVertex(Mode, Count, Type, Indices, Primcount, Basevertex) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer().
drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) when is_integer(Indices) ->
cast(5687, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Basevertex:?GLint>>);
drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) ->
@@ -14211,7 +14211,7 @@ drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) ->
%% by using the flat qualifier when declaring the output.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProvokingVertex.xml">external</a> documentation.
--spec provokingVertex(Mode) -> ok when Mode :: enum().
+-spec provokingVertex(Mode) -> 'ok' when Mode :: enum().
provokingVertex(Mode) ->
cast(5689, <<Mode:?GLenum>>).
@@ -14263,7 +14263,7 @@ isSync(Sync) ->
%% ``gl:deleteSync'' will silently ignore a `Sync' value of zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteSync.xml">external</a> documentation.
--spec deleteSync(Sync) -> ok when Sync :: integer().
+-spec deleteSync(Sync) -> 'ok' when Sync :: integer().
deleteSync(Sync) ->
cast(5692, <<Sync:?GLsync>>).
@@ -14311,7 +14311,7 @@ clientWaitSync(Sync,Flags,Timeout) ->
%% If an error occurs, ``gl:waitSync'' does not cause the GL server to block.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWaitSync.xml">external</a> documentation.
--spec waitSync(Sync, Flags, Timeout) -> ok when Sync :: integer(),Flags :: integer(),Timeout :: integer().
+-spec waitSync(Sync, Flags, Timeout) -> 'ok' when Sync :: integer(),Flags :: integer(),Timeout :: integer().
waitSync(Sync,Flags,Timeout) ->
cast(5694, <<Sync:?GLsync,Flags:?GLbitfield,0:32,Timeout:?GLuint64>>).
@@ -14380,7 +14380,7 @@ getSynciv(Sync,Pname,BufSize) ->
%% on the multisample texture targets.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2DMultisample.xml">external</a> documentation.
--spec texImage2DMultisample(Target, Samples, Internalformat, Width, Height, Fixedsamplelocations) -> ok when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Fixedsamplelocations :: 0|1.
+-spec texImage2DMultisample(Target, Samples, Internalformat, Width, Height, Fixedsamplelocations) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Fixedsamplelocations :: 0|1.
texImage2DMultisample(Target,Samples,Internalformat,Width,Height,Fixedsamplelocations) ->
cast(5697, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLint,Width:?GLsizei,Height:?GLsizei,Fixedsamplelocations:?GLboolean>>).
@@ -14408,7 +14408,7 @@ texImage2DMultisample(Target,Samples,Internalformat,Width,Height,Fixedsampleloca
%% on the multisample texture targets.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage3DMultisample.xml">external</a> documentation.
--spec texImage3DMultisample(Target, Samples, Internalformat, Width, Height, Depth, Fixedsamplelocations) -> ok when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Fixedsamplelocations :: 0|1.
+-spec texImage3DMultisample(Target, Samples, Internalformat, Width, Height, Depth, Fixedsamplelocations) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Fixedsamplelocations :: 0|1.
texImage3DMultisample(Target,Samples,Internalformat,Width,Height,Depth,Fixedsamplelocations) ->
cast(5698, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Fixedsamplelocations:?GLboolean>>).
@@ -14441,28 +14441,28 @@ getMultisamplefv(Pname,Index) ->
%% to sample 32 x `M' + `B'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSampleMaski.xml">external</a> documentation.
--spec sampleMaski(Index, Mask) -> ok when Index :: integer(),Mask :: integer().
+-spec sampleMaski(Index, Mask) -> 'ok' when Index :: integer(),Mask :: integer().
sampleMaski(Index,Mask) ->
cast(5700, <<Index:?GLuint,Mask:?GLbitfield>>).
%% @doc glNamedStringARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNamedStringARB.xml">external</a> documentation.
--spec namedStringARB(Type, Name, String) -> ok when Type :: enum(),Name :: string(),String :: string().
+-spec namedStringARB(Type, Name, String) -> 'ok' when Type :: enum(),Name :: string(),String :: string().
namedStringARB(Type,Name,String) ->
cast(5701, <<Type:?GLenum,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8),(list_to_binary([String|[0]]))/binary,0:((8-((length(String)+ 1) rem 8)) rem 8)>>).
%% @doc glDeleteNamedStringARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteNamedStringARB.xml">external</a> documentation.
--spec deleteNamedStringARB(Name) -> ok when Name :: string().
+-spec deleteNamedStringARB(Name) -> 'ok' when Name :: string().
deleteNamedStringARB(Name) ->
cast(5702, <<(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>).
%% @doc glCompileShaderIncludeARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShaderIncludeARB.xml">external</a> documentation.
--spec compileShaderIncludeARB(Shader, Path) -> ok when Shader :: integer(),Path :: iolist().
+-spec compileShaderIncludeARB(Shader, Path) -> 'ok' when Shader :: integer(),Path :: iolist().
compileShaderIncludeARB(Shader,Path) ->
PathTemp = list_to_binary([[Str|[0]] || Str <- Path ]),
cast(5703, <<Shader:?GLuint,(length(Path)):?GLuint,(size(PathTemp)):?GLuint,(PathTemp)/binary,0:((8-((size(PathTemp)+0) rem 8)) rem 8)>>).
@@ -14491,7 +14491,7 @@ getNamedStringivARB(Name,Pname) ->
%% @doc glBindFragDataLocationIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFragDataLocationIndexe.xml">external</a> documentation.
--spec bindFragDataLocationIndexed(Program, ColorNumber, Index, Name) -> ok when Program :: integer(),ColorNumber :: integer(),Index :: integer(),Name :: string().
+-spec bindFragDataLocationIndexed(Program, ColorNumber, Index, Name) -> 'ok' when Program :: integer(),ColorNumber :: integer(),Index :: integer(),Name :: string().
bindFragDataLocationIndexed(Program,ColorNumber,Index,Name) ->
cast(5707, <<Program:?GLuint,ColorNumber:?GLuint,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>).
@@ -14533,7 +14533,7 @@ genSamplers(Count) ->
%% names in samplers are silently ignored, as is the reserved name zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteSamplers.xml">external</a> documentation.
--spec deleteSamplers(Samplers) -> ok when Samplers :: [integer()].
+-spec deleteSamplers(Samplers) -> 'ok' when Samplers :: [integer()].
deleteSamplers(Samplers) ->
cast(5710, <<(length(Samplers)):?GLuint,
(<< <<C:?GLuint>> || C <- Samplers>>)/binary,0:(((1+length(Samplers)) rem 2)*32)>>).
@@ -14564,7 +14564,7 @@ isSampler(Sampler) ->
%% be bound to multiple texture units simultaneously.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindSampler.xml">external</a> documentation.
--spec bindSampler(Unit, Sampler) -> ok when Unit :: integer(),Sampler :: integer().
+-spec bindSampler(Unit, Sampler) -> 'ok' when Unit :: integer(),Sampler :: integer().
bindSampler(Unit,Sampler) ->
cast(5712, <<Unit:?GLuint,Sampler:?GLuint>>).
@@ -14710,33 +14710,33 @@ bindSampler(Unit,Sampler) ->
%% bound texture. result is assigned to R t.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSamplerParameter.xml">external</a> documentation.
--spec samplerParameteri(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: integer().
+-spec samplerParameteri(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: integer().
samplerParameteri(Sampler,Pname,Param) ->
cast(5713, <<Sampler:?GLuint,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link samplerParameteri/3}
--spec samplerParameteriv(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
+-spec samplerParameteriv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
samplerParameteriv(Sampler,Pname,Param) ->
cast(5714, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint,
(<< <<C:?GLint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>).
%% @doc
%% See {@link samplerParameteri/3}
--spec samplerParameterf(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: float().
+-spec samplerParameterf(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: float().
samplerParameterf(Sampler,Pname,Param) ->
cast(5715, <<Sampler:?GLuint,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link samplerParameteri/3}
--spec samplerParameterfv(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: [float()].
+-spec samplerParameterfv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [float()].
samplerParameterfv(Sampler,Pname,Param) ->
cast(5716, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint,
(<< <<C:?GLfloat>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>).
%% @doc
%% See {@link samplerParameteri/3}
--spec samplerParameterIiv(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
+-spec samplerParameterIiv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
samplerParameterIiv(Sampler,Pname,Param) ->
cast(5717, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint,
(<< <<C:?GLint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>).
@@ -14744,7 +14744,7 @@ samplerParameterIiv(Sampler,Pname,Param) ->
%% @doc glSamplerParameterI
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSamplerParameterI.xml">external</a> documentation.
--spec samplerParameterIuiv(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
+-spec samplerParameterIuiv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
samplerParameterIuiv(Sampler,Pname,Param) ->
cast(5718, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint,
(<< <<C:?GLuint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>).
@@ -14826,7 +14826,7 @@ getSamplerParameterIuiv(Sampler,Pname) ->
%% that query object.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glQueryCounter.xml">external</a> documentation.
--spec queryCounter(Id, Target) -> ok when Id :: integer(),Target :: enum().
+-spec queryCounter(Id, Target) -> 'ok' when Id :: integer(),Target :: enum().
queryCounter(Id,Target) ->
cast(5723, <<Id:?GLuint,Target:?GLenum>>).
@@ -14870,7 +14870,7 @@ getQueryObjectui64v(Id,Pname) ->
%% well defined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysIndirect.xml">external</a> documentation.
--spec drawArraysIndirect(Mode, Indirect) -> ok when Mode :: enum(),Indirect :: offset()|mem().
+-spec drawArraysIndirect(Mode, Indirect) -> 'ok' when Mode :: enum(),Indirect :: offset()|mem().
drawArraysIndirect(Mode,Indirect) when is_integer(Indirect) ->
cast(5726, <<Mode:?GLenum,Indirect:?GLuint>>);
drawArraysIndirect(Mode,Indirect) ->
@@ -14910,7 +14910,7 @@ drawArraysIndirect(Mode,Indirect) ->
%% well defined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsIndirect.xml">external</a> documentation.
--spec drawElementsIndirect(Mode, Type, Indirect) -> ok when Mode :: enum(),Type :: enum(),Indirect :: offset()|mem().
+-spec drawElementsIndirect(Mode, Type, Indirect) -> 'ok' when Mode :: enum(),Type :: enum(),Indirect :: offset()|mem().
drawElementsIndirect(Mode,Type,Indirect) when is_integer(Indirect) ->
cast(5728, <<Mode:?GLenum,Type:?GLenum,Indirect:?GLuint>>);
drawElementsIndirect(Mode,Type,Indirect) ->
@@ -14919,115 +14919,115 @@ drawElementsIndirect(Mode,Type,Indirect) ->
%% @doc
%% See {@link uniform1f/2}
--spec uniform1d(Location, X) -> ok when Location :: integer(),X :: float().
+-spec uniform1d(Location, X) -> 'ok' when Location :: integer(),X :: float().
uniform1d(Location,X) ->
cast(5730, <<Location:?GLint,0:32,X:?GLdouble>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2d(Location, X, Y) -> ok when Location :: integer(),X :: float(),Y :: float().
+-spec uniform2d(Location, X, Y) -> 'ok' when Location :: integer(),X :: float(),Y :: float().
uniform2d(Location,X,Y) ->
cast(5731, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3d(Location, X, Y, Z) -> ok when Location :: integer(),X :: float(),Y :: float(),Z :: float().
+-spec uniform3d(Location, X, Y, Z) -> 'ok' when Location :: integer(),X :: float(),Y :: float(),Z :: float().
uniform3d(Location,X,Y,Z) ->
cast(5732, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4d(Location, X, Y, Z, W) -> ok when Location :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec uniform4d(Location, X, Y, Z, W) -> 'ok' when Location :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
uniform4d(Location,X,Y,Z,W) ->
cast(5733, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1dv(Location, Value) -> ok when Location :: integer(),Value :: [float()].
+-spec uniform1dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [float()].
uniform1dv(Location,Value) ->
cast(5734, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32,
(<< <<C:?GLdouble>> || C <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2dv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float()}].
+-spec uniform2dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float()}].
uniform2dv(Location,Value) ->
cast(5735, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3dv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float(),float()}].
+-spec uniform3dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float()}].
uniform3dv(Location,Value) ->
cast(5736, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4dv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float(),float(),float()}].
+-spec uniform4dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float(),float()}].
uniform4dv(Location,Value) ->
cast(5737, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
+-spec uniformMatrix2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
uniformMatrix2dv(Location,Transpose,Value) ->
cast(5738, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix3dv(Location,Transpose,Value) ->
cast(5739, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4dv(Location,Transpose,Value) ->
cast(5740, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble,V13:?GLdouble,V14:?GLdouble,V15:?GLdouble,V16:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2x3dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix2x3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
uniformMatrix2x3dv(Location,Transpose,Value) ->
cast(5741, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2x4dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix2x4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix2x4dv(Location,Transpose,Value) ->
cast(5742, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3x2dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3x2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
uniformMatrix3x2dv(Location,Transpose,Value) ->
cast(5743, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3x4dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3x4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix3x4dv(Location,Transpose,Value) ->
cast(5744, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4x2dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4x2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4x2dv(Location,Transpose,Value) ->
cast(5745, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4x3dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4x3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4x3dv(Location,Transpose,Value) ->
cast(5746, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
@@ -15126,7 +15126,7 @@ getActiveSubroutineName(Program,Shadertype,Index,Bufsize) ->
%% for the shader stage.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniformSubroutines.xml">external</a> documentation.
--spec uniformSubroutinesuiv(Shadertype, Indices) -> ok when Shadertype :: enum(),Indices :: [integer()].
+-spec uniformSubroutinesuiv(Shadertype, Indices) -> 'ok' when Shadertype :: enum(),Indices :: [integer()].
uniformSubroutinesuiv(Shadertype,Indices) ->
cast(5752, <<Shadertype:?GLenum,(length(Indices)):?GLuint,
(<< <<C:?GLuint>> || C <- Indices>>)/binary,0:(((length(Indices)) rem 2)*32)>>).
@@ -15199,13 +15199,13 @@ getProgramStageiv(Program,Shadertype,Pname) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPatchParameter.xml">external</a> documentation.
--spec patchParameteri(Pname, Value) -> ok when Pname :: enum(),Value :: integer().
+-spec patchParameteri(Pname, Value) -> 'ok' when Pname :: enum(),Value :: integer().
patchParameteri(Pname,Value) ->
cast(5755, <<Pname:?GLenum,Value:?GLint>>).
%% @doc
%% See {@link patchParameteri/2}
--spec patchParameterfv(Pname, Values) -> ok when Pname :: enum(),Values :: [float()].
+-spec patchParameterfv(Pname, Values) -> 'ok' when Pname :: enum(),Values :: [float()].
patchParameterfv(Pname,Values) ->
cast(5756, <<Pname:?GLenum,(length(Values)):?GLuint,
(<< <<C:?GLfloat>> || C <- Values>>)/binary,0:(((length(Values)) rem 2)*32)>>).
@@ -15229,7 +15229,7 @@ patchParameterfv(Pname,Values) ->
%% the currently bound transform feedback object.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindTransformFeedback.xml">external</a> documentation.
--spec bindTransformFeedback(Target, Id) -> ok when Target :: enum(),Id :: integer().
+-spec bindTransformFeedback(Target, Id) -> 'ok' when Target :: enum(),Id :: integer().
bindTransformFeedback(Target,Id) ->
cast(5757, <<Target:?GLenum,Id:?GLuint>>).
@@ -15242,7 +15242,7 @@ bindTransformFeedback(Target,Id) ->
%% becomes unused, but the underlying object is not deleted until it is no longer active.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTransformFeedbacks.xml">external</a> documentation.
--spec deleteTransformFeedbacks(Ids) -> ok when Ids :: [integer()].
+-spec deleteTransformFeedbacks(Ids) -> 'ok' when Ids :: [integer()].
deleteTransformFeedbacks(Ids) ->
cast(5758, <<(length(Ids)):?GLuint,
(<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((1+length(Ids)) rem 2)*32)>>).
@@ -15282,7 +15282,7 @@ isTransformFeedback(Id) ->
%% while transform feedback is paused.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPauseTransformFeedback.xml">external</a> documentation.
--spec pauseTransformFeedback() -> ok.
+-spec pauseTransformFeedback() -> 'ok'.
pauseTransformFeedback() ->
cast(5761, <<>>).
@@ -15295,7 +15295,7 @@ pauseTransformFeedback() ->
%% while transform feedback is paused.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glResumeTransformFeedback.xml">external</a> documentation.
--spec resumeTransformFeedback() -> ok.
+-spec resumeTransformFeedback() -> 'ok'.
resumeTransformFeedback() ->
cast(5762, <<>>).
@@ -15309,7 +15309,7 @@ resumeTransformFeedback() ->
%% by `Id' .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedback.xml">external</a> documentation.
--spec drawTransformFeedback(Mode, Id) -> ok when Mode :: enum(),Id :: integer().
+-spec drawTransformFeedback(Mode, Id) -> 'ok' when Mode :: enum(),Id :: integer().
drawTransformFeedback(Mode,Id) ->
cast(5763, <<Mode:?GLenum,Id:?GLuint>>).
@@ -15327,14 +15327,14 @@ drawTransformFeedback(Mode,Id) ->
%% with `Stream' set to zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackStream.xml">external</a> documentation.
--spec drawTransformFeedbackStream(Mode, Id, Stream) -> ok when Mode :: enum(),Id :: integer(),Stream :: integer().
+-spec drawTransformFeedbackStream(Mode, Id, Stream) -> 'ok' when Mode :: enum(),Id :: integer(),Stream :: integer().
drawTransformFeedbackStream(Mode,Id,Stream) ->
cast(5764, <<Mode:?GLenum,Id:?GLuint,Stream:?GLuint>>).
%% @doc glBeginQueryIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQueryIndexe.xml">external</a> documentation.
--spec beginQueryIndexed(Target, Index, Id) -> ok when Target :: enum(),Index :: integer(),Id :: integer().
+-spec beginQueryIndexed(Target, Index, Id) -> 'ok' when Target :: enum(),Index :: integer(),Id :: integer().
beginQueryIndexed(Target,Index,Id) ->
cast(5765, <<Target:?GLenum,Index:?GLuint,Id:?GLuint>>).
@@ -15411,7 +15411,7 @@ beginQueryIndexed(Target,Index,Id) ->
%% is not yet complete.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQueryIndexed.xml">external</a> documentation.
--spec endQueryIndexed(Target, Index) -> ok when Target :: enum(),Index :: integer().
+-spec endQueryIndexed(Target, Index) -> 'ok' when Target :: enum(),Index :: integer().
endQueryIndexed(Target,Index) ->
cast(5766, <<Target:?GLenum,Index:?GLuint>>).
@@ -15441,7 +15441,7 @@ getQueryIndexediv(Target,Index,Pname) ->
%% freed by the call to ``gl:releaseShaderCompiler''.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glReleaseShaderCompiler.xml">external</a> documentation.
--spec releaseShaderCompiler() -> ok.
+-spec releaseShaderCompiler() -> 'ok'.
releaseShaderCompiler() ->
cast(5768, <<>>).
@@ -15463,7 +15463,7 @@ releaseShaderCompiler() ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderBinary.xml">external</a> documentation.
--spec shaderBinary(Shaders, Binaryformat, Binary) -> ok when Shaders :: [integer()],Binaryformat :: enum(),Binary :: binary().
+-spec shaderBinary(Shaders, Binaryformat, Binary) -> 'ok' when Shaders :: [integer()],Binaryformat :: enum(),Binary :: binary().
shaderBinary(Shaders,Binaryformat,Binary) ->
send_bin(Binary),
cast(5769, <<(length(Shaders)):?GLuint,
@@ -15496,14 +15496,14 @@ getShaderPrecisionFormat(Shadertype,Precisiontype) ->
%% @doc
%% See {@link depthRange/2}
--spec depthRangef(N, F) -> ok when N :: clamp(),F :: clamp().
+-spec depthRangef(N, F) -> 'ok' when N :: clamp(),F :: clamp().
depthRangef(N,F) ->
cast(5771, <<N:?GLclampf,F:?GLclampf>>).
%% @doc glClearDepthf
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearDepthf.xml">external</a> documentation.
--spec clearDepthf(D) -> ok when D :: clamp().
+-spec clearDepthf(D) -> 'ok' when D :: clamp().
clearDepthf(D) ->
cast(5772, <<D:?GLclampf>>).
@@ -15551,7 +15551,7 @@ getProgramBinary(Program,BufSize) ->
%% the program was linked before saving are restored with ``gl:programBinary'' is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramBinary.xml">external</a> documentation.
--spec programBinary(Program, BinaryFormat, Binary) -> ok when Program :: integer(),BinaryFormat :: enum(),Binary :: binary().
+-spec programBinary(Program, BinaryFormat, Binary) -> 'ok' when Program :: integer(),BinaryFormat :: enum(),Binary :: binary().
programBinary(Program,BinaryFormat,Binary) ->
send_bin(Binary),
cast(5774, <<Program:?GLuint,BinaryFormat:?GLenum>>).
@@ -15577,7 +15577,7 @@ programBinary(Program,BinaryFormat,Binary) ->
%% is `?GL_FALSE'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramParameter.xml">external</a> documentation.
--spec programParameteri(Program, Pname, Value) -> ok when Program :: integer(),Pname :: enum(),Value :: integer().
+-spec programParameteri(Program, Pname, Value) -> 'ok' when Program :: integer(),Pname :: enum(),Value :: integer().
programParameteri(Program,Pname,Value) ->
cast(5775, <<Program:?GLuint,Pname:?GLenum,Value:?GLint>>).
@@ -15602,7 +15602,7 @@ programParameteri(Program,Pname,Value) ->
%% , an error is generated.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgramStages.xml">external</a> documentation.
--spec useProgramStages(Pipeline, Stages, Program) -> ok when Pipeline :: integer(),Stages :: integer(),Program :: integer().
+-spec useProgramStages(Pipeline, Stages, Program) -> 'ok' when Pipeline :: integer(),Stages :: integer(),Program :: integer().
useProgramStages(Pipeline,Stages,Program) ->
cast(5776, <<Pipeline:?GLuint,Stages:?GLbitfield,Program:?GLuint>>).
@@ -15614,7 +15614,7 @@ useProgramStages(Pipeline,Stages,Program) ->
%% no program has been made current through a call to {@link gl:useProgram/1} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glActiveShaderProgram.xml">external</a> documentation.
--spec activeShaderProgram(Pipeline, Program) -> ok when Pipeline :: integer(),Program :: integer().
+-spec activeShaderProgram(Pipeline, Program) -> 'ok' when Pipeline :: integer(),Program :: integer().
activeShaderProgram(Pipeline,Program) ->
cast(5777, <<Pipeline:?GLuint,Program:?GLuint>>).
@@ -15644,7 +15644,7 @@ createShaderProgramv(Type,Strings) ->
%% taken from its program objects.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindProgramPipeline.xml">external</a> documentation.
--spec bindProgramPipeline(Pipeline) -> ok when Pipeline :: integer().
+-spec bindProgramPipeline(Pipeline) -> 'ok' when Pipeline :: integer().
bindProgramPipeline(Pipeline) ->
cast(5779, <<Pipeline:?GLuint>>).
@@ -15658,7 +15658,7 @@ bindProgramPipeline(Pipeline) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgramPipelines.xml">external</a> documentation.
--spec deleteProgramPipelines(Pipelines) -> ok when Pipelines :: [integer()].
+-spec deleteProgramPipelines(Pipelines) -> 'ok' when Pipelines :: [integer()].
deleteProgramPipelines(Pipelines) ->
cast(5780, <<(length(Pipelines)):?GLuint,
(<< <<C:?GLuint>> || C <- Pipelines>>)/binary,0:(((1+length(Pipelines)) rem 2)*32)>>).
@@ -15790,334 +15790,334 @@ getProgramPipelineiv(Pipeline,Pname) ->
%% a single matrix, and a count greater than 1 can be used to modify an array of matrices.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramUniform.xml">external</a> documentation.
--spec programUniform1i(Program, Location, V0) -> ok when Program :: integer(),Location :: integer(),V0 :: integer().
+-spec programUniform1i(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer().
programUniform1i(Program,Location,V0) ->
cast(5784, <<Program:?GLuint,Location:?GLint,V0:?GLint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1iv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [integer()].
+-spec programUniform1iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [integer()].
programUniform1iv(Program,Location,Value) ->
cast(5785, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLint>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1f(Program, Location, V0) -> ok when Program :: integer(),Location :: integer(),V0 :: float().
+-spec programUniform1f(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float().
programUniform1f(Program,Location,V0) ->
cast(5786, <<Program:?GLuint,Location:?GLint,V0:?GLfloat>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1fv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [float()].
+-spec programUniform1fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [float()].
programUniform1fv(Program,Location,Value) ->
cast(5787, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLfloat>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1d(Program, Location, V0) -> ok when Program :: integer(),Location :: integer(),V0 :: float().
+-spec programUniform1d(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float().
programUniform1d(Program,Location,V0) ->
cast(5788, <<Program:?GLuint,Location:?GLint,V0:?GLdouble>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1dv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [float()].
+-spec programUniform1dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [float()].
programUniform1dv(Program,Location,Value) ->
cast(5789, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32,
(<< <<C:?GLdouble>> || C <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1ui(Program, Location, V0) -> ok when Program :: integer(),Location :: integer(),V0 :: integer().
+-spec programUniform1ui(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer().
programUniform1ui(Program,Location,V0) ->
cast(5790, <<Program:?GLuint,Location:?GLint,V0:?GLuint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1uiv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [integer()].
+-spec programUniform1uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [integer()].
programUniform1uiv(Program,Location,Value) ->
cast(5791, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLuint>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2i(Program, Location, V0, V1) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer().
+-spec programUniform2i(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer().
programUniform2i(Program,Location,V0,V1) ->
cast(5792, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2iv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}].
+-spec programUniform2iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}].
programUniform2iv(Program,Location,Value) ->
cast(5793, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2f(Program, Location, V0, V1) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float().
+-spec programUniform2f(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float().
programUniform2f(Program,Location,V0,V1) ->
cast(5794, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2fv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float()}].
+-spec programUniform2fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float()}].
programUniform2fv(Program,Location,Value) ->
cast(5795, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2d(Program, Location, V0, V1) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float().
+-spec programUniform2d(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float().
programUniform2d(Program,Location,V0,V1) ->
cast(5796, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2dv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float()}].
+-spec programUniform2dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float()}].
programUniform2dv(Program,Location,Value) ->
cast(5797, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2ui(Program, Location, V0, V1) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer().
+-spec programUniform2ui(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer().
programUniform2ui(Program,Location,V0,V1) ->
cast(5798, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2uiv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}].
+-spec programUniform2uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}].
programUniform2uiv(Program,Location,Value) ->
cast(5799, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3i(Program, Location, V0, V1, V2) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
+-spec programUniform3i(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
programUniform3i(Program,Location,V0,V1,V2) ->
cast(5800, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3iv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}].
+-spec programUniform3iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}].
programUniform3iv(Program,Location,Value) ->
cast(5801, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3f(Program, Location, V0, V1, V2) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
+-spec programUniform3f(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
programUniform3f(Program,Location,V0,V1,V2) ->
cast(5802, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3fv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}].
+-spec programUniform3fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}].
programUniform3fv(Program,Location,Value) ->
cast(5803, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3d(Program, Location, V0, V1, V2) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
+-spec programUniform3d(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
programUniform3d(Program,Location,V0,V1,V2) ->
cast(5804, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble,V2:?GLdouble>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3dv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}].
+-spec programUniform3dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}].
programUniform3dv(Program,Location,Value) ->
cast(5805, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3ui(Program, Location, V0, V1, V2) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
+-spec programUniform3ui(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
programUniform3ui(Program,Location,V0,V1,V2) ->
cast(5806, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3uiv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}].
+-spec programUniform3uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}].
programUniform3uiv(Program,Location,Value) ->
cast(5807, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4i(Program, Location, V0, V1, V2, V3) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
+-spec programUniform4i(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
programUniform4i(Program,Location,V0,V1,V2,V3) ->
cast(5808, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint,V3:?GLint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4iv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
+-spec programUniform4iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
programUniform4iv(Program,Location,Value) ->
cast(5809, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4f(Program, Location, V0, V1, V2, V3) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
+-spec programUniform4f(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
programUniform4f(Program,Location,V0,V1,V2,V3) ->
cast(5810, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4fv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}].
+-spec programUniform4fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}].
programUniform4fv(Program,Location,Value) ->
cast(5811, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4d(Program, Location, V0, V1, V2, V3) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
+-spec programUniform4d(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
programUniform4d(Program,Location,V0,V1,V2,V3) ->
cast(5812, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4dv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}].
+-spec programUniform4dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}].
programUniform4dv(Program,Location,Value) ->
cast(5813, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4ui(Program, Location, V0, V1, V2, V3) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
+-spec programUniform4ui(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
programUniform4ui(Program,Location,V0,V1,V2,V3) ->
cast(5814, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4uiv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
+-spec programUniform4uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
programUniform4uiv(Program,Location,Value) ->
cast(5815, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
+-spec programUniformMatrix2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
programUniformMatrix2fv(Program,Location,Transpose,Value) ->
cast(5816, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix3fv(Program,Location,Transpose,Value) ->
cast(5817, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4fv(Program,Location,Transpose,Value) ->
cast(5818, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat,V13:?GLfloat,V14:?GLfloat,V15:?GLfloat,V16:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
+-spec programUniformMatrix2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
programUniformMatrix2dv(Program,Location,Transpose,Value) ->
cast(5819, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix3dv(Program,Location,Transpose,Value) ->
cast(5820, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4dv(Program,Location,Transpose,Value) ->
cast(5821, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble,V13:?GLdouble,V14:?GLdouble,V15:?GLdouble,V16:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2x3fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix2x3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
programUniformMatrix2x3fv(Program,Location,Transpose,Value) ->
cast(5822, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3x2fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3x2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
programUniformMatrix3x2fv(Program,Location,Transpose,Value) ->
cast(5823, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2x4fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix2x4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix2x4fv(Program,Location,Transpose,Value) ->
cast(5824, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4x2fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4x2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4x2fv(Program,Location,Transpose,Value) ->
cast(5825, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3x4fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3x4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix3x4fv(Program,Location,Transpose,Value) ->
cast(5826, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4x3fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4x3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4x3fv(Program,Location,Transpose,Value) ->
cast(5827, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2x3dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix2x3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
programUniformMatrix2x3dv(Program,Location,Transpose,Value) ->
cast(5828, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3x2dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3x2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
programUniformMatrix3x2dv(Program,Location,Transpose,Value) ->
cast(5829, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2x4dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix2x4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix2x4dv(Program,Location,Transpose,Value) ->
cast(5830, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4x2dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4x2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4x2dv(Program,Location,Transpose,Value) ->
cast(5831, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3x4dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3x4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix3x4dv(Program,Location,Transpose,Value) ->
cast(5832, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4x3dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4x3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4x3dv(Program,Location,Transpose,Value) ->
cast(5833, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
@@ -16138,7 +16138,7 @@ programUniformMatrix4x3dv(Program,Location,Transpose,Value) ->
%% pipeline object is created with name `Pipeline' and the default state vector.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgramPipeline.xml">external</a> documentation.
--spec validateProgramPipeline(Pipeline) -> ok when Pipeline :: integer().
+-spec validateProgramPipeline(Pipeline) -> 'ok' when Pipeline :: integer().
validateProgramPipeline(Pipeline) ->
cast(5834, <<Pipeline:?GLuint>>).
@@ -16162,51 +16162,51 @@ getProgramPipelineInfoLog(Pipeline,BufSize) ->
%% @doc glVertexAttribL
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation.
--spec vertexAttribL1d(Index, X) -> ok when Index :: integer(),X :: float().
+-spec vertexAttribL1d(Index, X) -> 'ok' when Index :: integer(),X :: float().
vertexAttribL1d(Index,X) ->
cast(5836, <<Index:?GLuint,0:32,X:?GLdouble>>).
%% @doc glVertexAttribL
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation.
--spec vertexAttribL2d(Index, X, Y) -> ok when Index :: integer(),X :: float(),Y :: float().
+-spec vertexAttribL2d(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float().
vertexAttribL2d(Index,X,Y) ->
cast(5837, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble>>).
%% @doc glVertexAttribL
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation.
--spec vertexAttribL3d(Index, X, Y, Z) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float().
+-spec vertexAttribL3d(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float().
vertexAttribL3d(Index,X,Y,Z) ->
cast(5838, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc glVertexAttribL
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation.
--spec vertexAttribL4d(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertexAttribL4d(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
vertexAttribL4d(Index,X,Y,Z,W) ->
cast(5839, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @equiv vertexAttribL1d(Index,X)
--spec vertexAttribL1dv(Index :: integer(),V) -> ok when V :: {X :: float()}.
+-spec vertexAttribL1dv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}.
vertexAttribL1dv(Index,{X}) -> vertexAttribL1d(Index,X).
%% @equiv vertexAttribL2d(Index,X,Y)
--spec vertexAttribL2dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertexAttribL2dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertexAttribL2dv(Index,{X,Y}) -> vertexAttribL2d(Index,X,Y).
%% @equiv vertexAttribL3d(Index,X,Y,Z)
--spec vertexAttribL3dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertexAttribL3dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertexAttribL3dv(Index,{X,Y,Z}) -> vertexAttribL3d(Index,X,Y,Z).
%% @equiv vertexAttribL4d(Index,X,Y,Z,W)
--spec vertexAttribL4dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertexAttribL4dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertexAttribL4dv(Index,{X,Y,Z,W}) -> vertexAttribL4d(Index,X,Y,Z,W).
%% @doc glVertexAttribLPointer
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribLPointer.xml">external</a> documentation.
--spec vertexAttribLPointer(Index, Size, Type, Stride, Pointer) -> ok when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec vertexAttribLPointer(Index, Size, Type, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
vertexAttribLPointer(Index,Size,Type,Stride,Pointer) when is_integer(Pointer) ->
cast(5840, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
vertexAttribLPointer(Index,Size,Type,Stride,Pointer) ->
@@ -16223,7 +16223,7 @@ getVertexAttribLdv(Index,Pname) ->
%% @doc glViewportArrayv
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glViewportArrayv.xml">external</a> documentation.
--spec viewportArrayv(First, V) -> ok when First :: integer(),V :: [{float(),float(),float(),float()}].
+-spec viewportArrayv(First, V) -> 'ok' when First :: integer(),V :: [{float(),float(),float(),float()}].
viewportArrayv(First,V) ->
cast(5843, <<First:?GLuint,(length(V)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- V>>)/binary>>).
@@ -16263,20 +16263,20 @@ viewportArrayv(First,V) ->
%% 1, v); }
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glViewportIndexed.xml">external</a> documentation.
--spec viewportIndexedf(Index, X, Y, W, H) -> ok when Index :: integer(),X :: float(),Y :: float(),W :: float(),H :: float().
+-spec viewportIndexedf(Index, X, Y, W, H) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),W :: float(),H :: float().
viewportIndexedf(Index,X,Y,W,H) ->
cast(5844, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,W:?GLfloat,H:?GLfloat>>).
%% @doc
%% See {@link viewportIndexedf/5}
--spec viewportIndexedfv(Index, V) -> ok when Index :: integer(),V :: {float(),float(),float(),float()}.
+-spec viewportIndexedfv(Index, V) -> 'ok' when Index :: integer(),V :: {float(),float(),float(),float()}.
viewportIndexedfv(Index,{V1,V2,V3,V4}) ->
cast(5845, <<Index:?GLuint,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>>).
%% @doc glScissorArrayv
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorArrayv.xml">external</a> documentation.
--spec scissorArrayv(First, V) -> ok when First :: integer(),V :: [{integer(),integer(),integer(),integer()}].
+-spec scissorArrayv(First, V) -> 'ok' when First :: integer(),V :: [{integer(),integer(),integer(),integer()}].
scissorArrayv(First,V) ->
cast(5846, <<First:?GLuint,(length(V)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- V>>)/binary>>).
@@ -16284,21 +16284,21 @@ scissorArrayv(First,V) ->
%% @doc glScissorIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorIndexe.xml">external</a> documentation.
--spec scissorIndexed(Index, Left, Bottom, Width, Height) -> ok when Index :: integer(),Left :: integer(),Bottom :: integer(),Width :: integer(),Height :: integer().
+-spec scissorIndexed(Index, Left, Bottom, Width, Height) -> 'ok' when Index :: integer(),Left :: integer(),Bottom :: integer(),Width :: integer(),Height :: integer().
scissorIndexed(Index,Left,Bottom,Width,Height) ->
cast(5847, <<Index:?GLuint,Left:?GLint,Bottom:?GLint,Width:?GLsizei,Height:?GLsizei>>).
%% @doc glScissorIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorIndexe.xml">external</a> documentation.
--spec scissorIndexedv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec scissorIndexedv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
scissorIndexedv(Index,{V1,V2,V3,V4}) ->
cast(5848, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>).
%% @doc glDepthRangeArrayv
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthRangeArrayv.xml">external</a> documentation.
--spec depthRangeArrayv(First, V) -> ok when First :: integer(),V :: [{clamp(),clamp()}].
+-spec depthRangeArrayv(First, V) -> 'ok' when First :: integer(),V :: [{clamp(),clamp()}].
depthRangeArrayv(First,V) ->
cast(5849, <<First:?GLuint,0:32,(length(V)):?GLuint,0:32,
(<< <<V1:?GLclampd,V2:?GLclampd>> || {V1,V2} <- V>>)/binary>>).
@@ -16306,7 +16306,7 @@ depthRangeArrayv(First,V) ->
%% @doc glDepthRangeIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthRangeIndexe.xml">external</a> documentation.
--spec depthRangeIndexed(Index, N, F) -> ok when Index :: integer(),N :: clamp(),F :: clamp().
+-spec depthRangeIndexed(Index, N, F) -> 'ok' when Index :: integer(),N :: clamp(),F :: clamp().
depthRangeIndexed(Index,N,F) ->
cast(5850, <<Index:?GLuint,0:32,N:?GLclampd,F:?GLclampd>>).
@@ -16325,7 +16325,7 @@ getDoublei_v(Target,Index) ->
%% @doc glDebugMessageControlARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDebugMessageControlARB.xml">external</a> documentation.
--spec debugMessageControlARB(Source, Type, Severity, Ids, Enabled) -> ok when Source :: enum(),Type :: enum(),Severity :: enum(),Ids :: [integer()],Enabled :: 0|1.
+-spec debugMessageControlARB(Source, Type, Severity, Ids, Enabled) -> 'ok' when Source :: enum(),Type :: enum(),Severity :: enum(),Ids :: [integer()],Enabled :: 0|1.
debugMessageControlARB(Source,Type,Severity,Ids,Enabled) ->
cast(5853, <<Source:?GLenum,Type:?GLenum,Severity:?GLenum,(length(Ids)):?GLuint,
(<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((length(Ids)) rem 2)*32),Enabled:?GLboolean>>).
@@ -16333,7 +16333,7 @@ debugMessageControlARB(Source,Type,Severity,Ids,Enabled) ->
%% @doc glDebugMessageInsertARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDebugMessageInsertARB.xml">external</a> documentation.
--spec debugMessageInsertARB(Source, Type, Id, Severity, Buf) -> ok when Source :: enum(),Type :: enum(),Id :: integer(),Severity :: enum(),Buf :: string().
+-spec debugMessageInsertARB(Source, Type, Id, Severity, Buf) -> 'ok' when Source :: enum(),Type :: enum(),Id :: integer(),Severity :: enum(),Buf :: string().
debugMessageInsertARB(Source,Type,Id,Severity,Buf) ->
cast(5854, <<Source:?GLenum,Type:?GLenum,Id:?GLuint,Severity:?GLenum,(list_to_binary([Buf|[0]]))/binary,0:((8-((length(Buf)+ 1) rem 8)) rem 8)>>).
@@ -16370,7 +16370,7 @@ getGraphicsResetStatusARB() ->
%% value of `?gl_InstanceID'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysInstancedBaseInstance.xml">external</a> documentation.
--spec drawArraysInstancedBaseInstance(Mode, First, Count, Primcount, Baseinstance) -> ok when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer(),Baseinstance :: integer().
+-spec drawArraysInstancedBaseInstance(Mode, First, Count, Primcount, Baseinstance) -> 'ok' when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer(),Baseinstance :: integer().
drawArraysInstancedBaseInstance(Mode,First,Count,Primcount,Baseinstance) ->
cast(5857, <<Mode:?GLenum,First:?GLint,Count:?GLsizei,Primcount:?GLsizei,Baseinstance:?GLuint>>).
@@ -16393,7 +16393,7 @@ drawArraysInstancedBaseInstance(Mode,First,Count,Primcount,Baseinstance) ->
%% value of `?gl_InstanceID'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseInstance.xml">external</a> documentation.
--spec drawElementsInstancedBaseInstance(Mode, Count, Type, Indices, Primcount, Baseinstance) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Baseinstance :: integer().
+-spec drawElementsInstancedBaseInstance(Mode, Count, Type, Indices, Primcount, Baseinstance) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Baseinstance :: integer().
drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance) when is_integer(Indices) ->
cast(5858, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Baseinstance:?GLuint>>);
drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance) ->
@@ -16417,7 +16417,7 @@ drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance
%% value of `?gl_InstanceID'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseVertexBaseInstance.xml">external</a> documentation.
--spec drawElementsInstancedBaseVertexBaseInstance(Mode, Count, Type, Indices, Primcount, Basevertex, Baseinstance) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer(),Baseinstance :: integer().
+-spec drawElementsInstancedBaseVertexBaseInstance(Mode, Count, Type, Indices, Primcount, Basevertex, Baseinstance) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer(),Baseinstance :: integer().
drawElementsInstancedBaseVertexBaseInstance(Mode,Count,Type,Indices,Primcount,Basevertex,Baseinstance) when is_integer(Indices) ->
cast(5860, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Basevertex:?GLint,Baseinstance:?GLuint>>);
drawElementsInstancedBaseVertexBaseInstance(Mode,Count,Type,Indices,Primcount,Basevertex,Baseinstance) ->
@@ -16427,14 +16427,14 @@ drawElementsInstancedBaseVertexBaseInstance(Mode,Count,Type,Indices,Primcount,Ba
%% @doc glDrawTransformFeedbackInstance
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackInstance.xml">external</a> documentation.
--spec drawTransformFeedbackInstanced(Mode, Id, Primcount) -> ok when Mode :: enum(),Id :: integer(),Primcount :: integer().
+-spec drawTransformFeedbackInstanced(Mode, Id, Primcount) -> 'ok' when Mode :: enum(),Id :: integer(),Primcount :: integer().
drawTransformFeedbackInstanced(Mode,Id,Primcount) ->
cast(5862, <<Mode:?GLenum,Id:?GLuint,Primcount:?GLsizei>>).
%% @doc glDrawTransformFeedbackStreamInstance
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackStreamInstance.xml">external</a> documentation.
--spec drawTransformFeedbackStreamInstanced(Mode, Id, Stream, Primcount) -> ok when Mode :: enum(),Id :: integer(),Stream :: integer(),Primcount :: integer().
+-spec drawTransformFeedbackStreamInstanced(Mode, Id, Stream, Primcount) -> 'ok' when Mode :: enum(),Id :: integer(),Stream :: integer(),Primcount :: integer().
drawTransformFeedbackStreamInstanced(Mode,Id,Stream,Primcount) ->
cast(5863, <<Mode:?GLenum,Id:?GLuint,Stream:?GLuint,Primcount:?GLsizei>>).
@@ -16503,7 +16503,7 @@ getInternalformativ(Target,Internalformat,Pname,BufSize) ->
%% respectively.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindImageTexture.xml">external</a> documentation.
--spec bindImageTexture(Unit, Texture, Level, Layered, Layer, Access, Format) -> ok when Unit :: integer(),Texture :: integer(),Level :: integer(),Layered :: 0|1,Layer :: integer(),Access :: enum(),Format :: enum().
+-spec bindImageTexture(Unit, Texture, Level, Layered, Layer, Access, Format) -> 'ok' when Unit :: integer(),Texture :: integer(),Level :: integer(),Layered :: 0|1,Layer :: integer(),Access :: enum(),Format :: enum().
bindImageTexture(Unit,Texture,Level,Layered,Layer,Access,Format) ->
cast(5865, <<Unit:?GLuint,Texture:?GLuint,Level:?GLint,Layered:?GLboolean,0:24,Layer:?GLint,Access:?GLenum,Format:?GLenum>>).
@@ -16630,7 +16630,7 @@ bindImageTexture(Unit,Texture,Level,Layered,Layer,Access,Format) ->
%% passes is necessary.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMemoryBarrier.xml">external</a> documentation.
--spec memoryBarrier(Barriers) -> ok when Barriers :: integer().
+-spec memoryBarrier(Barriers) -> 'ok' when Barriers :: integer().
memoryBarrier(Barriers) ->
cast(5866, <<Barriers:?GLbitfield>>).
@@ -16663,7 +16663,7 @@ memoryBarrier(Barriers) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage1D.xml">external</a> documentation.
--spec texStorage1D(Target, Levels, Internalformat, Width) -> ok when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer().
+-spec texStorage1D(Target, Levels, Internalformat, Width) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer().
texStorage1D(Target,Levels,Internalformat,Width) ->
cast(5867, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei>>).
@@ -16708,7 +16708,7 @@ texStorage1D(Target,Levels,Internalformat,Width) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage2D.xml">external</a> documentation.
--spec texStorage2D(Target, Levels, Internalformat, Width, Height) -> ok when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer().
+-spec texStorage2D(Target, Levels, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer().
texStorage2D(Target,Levels,Internalformat,Width,Height) ->
cast(5868, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>).
@@ -16751,21 +16751,21 @@ texStorage2D(Target,Levels,Internalformat,Width,Height) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage3D.xml">external</a> documentation.
--spec texStorage3D(Target, Levels, Internalformat, Width, Height, Depth) -> ok when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer().
+-spec texStorage3D(Target, Levels, Internalformat, Width, Height, Depth) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer().
texStorage3D(Target,Levels,Internalformat,Width,Height,Depth) ->
cast(5869, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei>>).
%% @doc glDepthBoundsEXT
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthBoundsEXT.xml">external</a> documentation.
--spec depthBoundsEXT(Zmin, Zmax) -> ok when Zmin :: clamp(),Zmax :: clamp().
+-spec depthBoundsEXT(Zmin, Zmax) -> 'ok' when Zmin :: clamp(),Zmax :: clamp().
depthBoundsEXT(Zmin,Zmax) ->
cast(5870, <<Zmin:?GLclampd,Zmax:?GLclampd>>).
%% @doc glStencilClearTagEXT
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilClearTagEXT.xml">external</a> documentation.
--spec stencilClearTagEXT(StencilTagBits, StencilClearTag) -> ok when StencilTagBits :: integer(),StencilClearTag :: integer().
+-spec stencilClearTagEXT(StencilTagBits, StencilClearTag) -> 'ok' when StencilTagBits :: integer(),StencilClearTag :: integer().
stencilClearTagEXT(StencilTagBits,StencilClearTag) ->
cast(5871, <<StencilTagBits:?GLsizei,StencilClearTag:?GLuint>>).
diff --git a/lib/wx/src/gen/glu.erl b/lib/wx/src/gen/glu.erl
index 5faba48930..47d9a83999 100644
--- a/lib/wx/src/gen/glu.erl
+++ b/lib/wx/src/gen/glu.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -356,7 +356,7 @@ checkExtension(ExtName,ExtString) ->
%% at the +`y' axis.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluCylinder.xml">external</a> documentation.
--spec cylinder(Quad, Base, Top, Height, Slices, Stacks) -> ok when Quad :: integer(),Base :: float(),Top :: float(),Height :: float(),Slices :: integer(),Stacks :: integer().
+-spec cylinder(Quad, Base, Top, Height, Slices, Stacks) -> 'ok' when Quad :: integer(),Base :: float(),Top :: float(),Height :: float(),Slices :: integer(),Stacks :: integer().
cylinder(Quad,Base,Top,Height,Slices,Stacks) ->
cast(5017, <<Quad:?GLUquadric,Base:?GLdouble,Top:?GLdouble,Height:?GLdouble,Slices:?GLint,Stacks:?GLint>>).
@@ -367,7 +367,7 @@ cylinder(Quad,Base,Top,Height,Slices,Stacks) ->
%% cannot be used again.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluDeleteQuadric.xml">external</a> documentation.
--spec deleteQuadric(Quad) -> ok when Quad :: integer().
+-spec deleteQuadric(Quad) -> 'ok' when Quad :: integer().
deleteQuadric(Quad) ->
cast(5018, <<Quad:?GLUquadric>>).
@@ -390,7 +390,7 @@ deleteQuadric(Quad) ->
%% (0, -`r', 0) it is (0.5, 0).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluDisk.xml">external</a> documentation.
--spec disk(Quad, Inner, Outer, Slices, Loops) -> ok when Quad :: integer(),Inner :: float(),Outer :: float(),Slices :: integer(),Loops :: integer().
+-spec disk(Quad, Inner, Outer, Slices, Loops) -> 'ok' when Quad :: integer(),Inner :: float(),Outer :: float(),Slices :: integer(),Loops :: integer().
disk(Quad,Inner,Outer,Slices,Loops) ->
cast(5019, <<Quad:?GLUquadric,Inner:?GLdouble,Outer:?GLdouble,Slices:?GLint,Loops:?GLint>>).
@@ -468,7 +468,7 @@ getString(Name) ->
%% -eyez);
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluLookAt.xml">external</a> documentation.
--spec lookAt(EyeX, EyeY, EyeZ, CenterX, CenterY, CenterZ, UpX, UpY, UpZ) -> ok when EyeX :: float(),EyeY :: float(),EyeZ :: float(),CenterX :: float(),CenterY :: float(),CenterZ :: float(),UpX :: float(),UpY :: float(),UpZ :: float().
+-spec lookAt(EyeX, EyeY, EyeZ, CenterX, CenterY, CenterZ, UpX, UpY, UpZ) -> 'ok' when EyeX :: float(),EyeY :: float(),EyeZ :: float(),CenterX :: float(),CenterY :: float(),CenterZ :: float(),UpX :: float(),UpY :: float(),UpZ :: float().
lookAt(EyeX,EyeY,EyeZ,CenterX,CenterY,CenterZ,UpX,UpY,UpZ) ->
cast(5022, <<EyeX:?GLdouble,EyeY:?GLdouble,EyeZ:?GLdouble,CenterX:?GLdouble,CenterY:?GLdouble,CenterZ:?GLdouble,UpX:?GLdouble,UpY:?GLdouble,UpZ:?GLdouble>>).
@@ -489,7 +489,7 @@ newQuadric() ->
%% to calling {@link gl:ortho/6} with near=-1 and far=1.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluOrtho2D.xml">external</a> documentation.
--spec ortho2D(Left, Right, Bottom, Top) -> ok when Left :: float(),Right :: float(),Bottom :: float(),Top :: float().
+-spec ortho2D(Left, Right, Bottom, Top) -> 'ok' when Left :: float(),Right :: float(),Bottom :: float(),Top :: float().
ortho2D(Left,Right,Bottom,Top) ->
cast(5024, <<Left:?GLdouble,Right:?GLdouble,Bottom:?GLdouble,Top:?GLdouble>>).
@@ -518,7 +518,7 @@ ortho2D(Left,Right,Bottom,Top) ->
%% at (0, -`r', 0) it is (0.5, 0.0).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluPartialDisk.xml">external</a> documentation.
--spec partialDisk(Quad, Inner, Outer, Slices, Loops, Start, Sweep) -> ok when Quad :: integer(),Inner :: float(),Outer :: float(),Slices :: integer(),Loops :: integer(),Start :: float(),Sweep :: float().
+-spec partialDisk(Quad, Inner, Outer, Slices, Loops, Start, Sweep) -> 'ok' when Quad :: integer(),Inner :: float(),Outer :: float(),Slices :: integer(),Loops :: integer(),Start :: float(),Sweep :: float().
partialDisk(Quad,Inner,Outer,Slices,Loops,Start,Sweep) ->
cast(5025, <<Quad:?GLUquadric,Inner:?GLdouble,Outer:?GLdouble,Slices:?GLint,Loops:?GLint,Start:?GLdouble,Sweep:?GLdouble>>).
@@ -542,7 +542,7 @@ partialDisk(Quad,Inner,Outer,Slices,Loops,Start,Sweep) ->
%% (f/aspect 0 0 0 0 f 0 0 0 0(zFar+zNear)/(zNear-zFar)(2×zFar×zNear)/(zNear-zFar) 0 0 -1 0)
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml">external</a> documentation.
--spec perspective(Fovy, Aspect, ZNear, ZFar) -> ok when Fovy :: float(),Aspect :: float(),ZNear :: float(),ZFar :: float().
+-spec perspective(Fovy, Aspect, ZNear, ZFar) -> 'ok' when Fovy :: float(),Aspect :: float(),ZNear :: float(),ZFar :: float().
perspective(Fovy,Aspect,ZNear,ZFar) ->
cast(5026, <<Fovy:?GLdouble,Aspect:?GLdouble,ZNear:?GLdouble,ZFar:?GLdouble>>).
@@ -568,7 +568,7 @@ perspective(Fovy,Aspect,ZNear,ZFar) ->
%% it was subdivided without the pick matrix.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluPickMatrix.xml">external</a> documentation.
--spec pickMatrix(X, Y, DelX, DelY, Viewport) -> ok when X :: float(),Y :: float(),DelX :: float(),DelY :: float(),Viewport :: {integer(),integer(),integer(),integer()}.
+-spec pickMatrix(X, Y, DelX, DelY, Viewport) -> 'ok' when X :: float(),Y :: float(),DelX :: float(),DelY :: float(),Viewport :: {integer(),integer(),integer(),integer()}.
pickMatrix(X,Y,DelX,DelY,{V1,V2,V3,V4}) ->
cast(5027, <<X:?GLdouble,Y:?GLdouble,DelX:?GLdouble,DelY:?GLdouble,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>).
@@ -621,7 +621,7 @@ project(ObjX,ObjY,ObjZ,{M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12},{P1,P2,P3,P4,P5,
%% `?GLU_POINT': Quadrics are rendered as a set of points.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluQuadricDrawStyle.xml">external</a> documentation.
--spec quadricDrawStyle(Quad, Draw) -> ok when Quad :: integer(),Draw :: enum().
+-spec quadricDrawStyle(Quad, Draw) -> 'ok' when Quad :: integer(),Draw :: enum().
quadricDrawStyle(Quad,Draw) ->
cast(5029, <<Quad:?GLUquadric,Draw:?GLenum>>).
@@ -638,7 +638,7 @@ quadricDrawStyle(Quad,Draw) ->
%% initial value.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluQuadricNormals.xml">external</a> documentation.
--spec quadricNormals(Quad, Normal) -> ok when Quad :: integer(),Normal :: enum().
+-spec quadricNormals(Quad, Normal) -> 'ok' when Quad :: integer(),Normal :: enum().
quadricNormals(Quad,Normal) ->
cast(5030, <<Quad:?GLUquadric,Normal:?GLenum>>).
@@ -656,7 +656,7 @@ quadricNormals(Quad,Normal) ->
%% being drawn.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluQuadricOrientation.xml">external</a> documentation.
--spec quadricOrientation(Quad, Orientation) -> ok when Quad :: integer(),Orientation :: enum().
+-spec quadricOrientation(Quad, Orientation) -> 'ok' when Quad :: integer(),Orientation :: enum().
quadricOrientation(Quad,Orientation) ->
cast(5031, <<Quad:?GLUquadric,Orientation:?GLenum>>).
@@ -671,7 +671,7 @@ quadricOrientation(Quad,Orientation) ->
%% rendered.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluQuadricTexture.xml">external</a> documentation.
--spec quadricTexture(Quad, Texture) -> ok when Quad :: integer(),Texture :: 0|1.
+-spec quadricTexture(Quad, Texture) -> 'ok' when Quad :: integer(),Texture :: 0|1.
quadricTexture(Quad,Texture) ->
cast(5032, <<Quad:?GLUquadric,Texture:?GLboolean>>).
@@ -714,7 +714,7 @@ scaleImage(Format,WIn,HIn,TypeIn,DataIn,WOut,HOut,TypeOut,DataOut) ->
%% axis, and back to 1.0 at the +`y' axis.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluSphere.xml">external</a> documentation.
--spec sphere(Quad, Radius, Slices, Stacks) -> ok when Quad :: integer(),Radius :: float(),Slices :: integer(),Stacks :: integer().
+-spec sphere(Quad, Radius, Slices, Stacks) -> 'ok' when Quad :: integer(),Radius :: float(),Slices :: integer(),Stacks :: integer().
sphere(Quad,Radius,Slices,Stacks) ->
cast(5034, <<Quad:?GLUquadric,Radius:?GLdouble,Slices:?GLint,Stacks:?GLint>>).
diff --git a/lib/wx/src/gen/wxAcceleratorEntry.erl b/lib/wx/src/gen/wxAcceleratorEntry.erl
index b4ad3adcca..78d2ec47de 100644
--- a/lib/wx/src/gen/wxAcceleratorEntry.erl
+++ b/lib/wx/src/gen/wxAcceleratorEntry.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,10 +47,10 @@ new() ->
%% Entry::wxAcceleratorEntry().<br />
%%
-spec new([Option]) -> wxAcceleratorEntry() when
- Option :: {flags, integer()}
- | {keyCode, integer()}
- | {cmd, integer()}
- | {item, wxMenuItem:wxMenuItem()};
+ Option :: {'flags', integer()}
+ | {'keyCode', integer()}
+ | {'cmd', integer()}
+ | {'item', wxMenuItem:wxMenuItem()};
(Entry) -> wxAcceleratorEntry() when
Entry::wxAcceleratorEntry().
new(Options)
@@ -93,7 +93,7 @@ getKeyCode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv set(This,Flags,KeyCode,Cmd, [])
--spec set(This, Flags, KeyCode, Cmd) -> ok when
+-spec set(This, Flags, KeyCode, Cmd) -> 'ok' when
This::wxAcceleratorEntry(), Flags::integer(), KeyCode::integer(), Cmd::integer().
set(This,Flags,KeyCode,Cmd)
@@ -101,9 +101,9 @@ set(This,Flags,KeyCode,Cmd)
set(This,Flags,KeyCode,Cmd, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxacceleratorentry.html#wxacceleratorentryset">external documentation</a>.
--spec set(This, Flags, KeyCode, Cmd, [Option]) -> ok when
+-spec set(This, Flags, KeyCode, Cmd, [Option]) -> 'ok' when
This::wxAcceleratorEntry(), Flags::integer(), KeyCode::integer(), Cmd::integer(),
- Option :: {item, wxMenuItem:wxMenuItem()}.
+ Option :: {'item', wxMenuItem:wxMenuItem()}.
set(#wx_ref{type=ThisT,ref=ThisRef},Flags,KeyCode,Cmd, Options)
when is_integer(Flags),is_integer(KeyCode),is_integer(Cmd),is_list(Options) ->
?CLASS(ThisT,wxAcceleratorEntry),
@@ -114,7 +114,7 @@ set(#wx_ref{type=ThisT,ref=ThisRef},Flags,KeyCode,Cmd, Options)
<<ThisRef:32/?UI,Flags:32/?UI,KeyCode:32/?UI,Cmd:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAcceleratorEntry()) -> ok.
+-spec destroy(This::wxAcceleratorEntry()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAcceleratorEntry),
wxe_util:destroy(?wxAcceleratorEntry_destroy,Obj),
diff --git a/lib/wx/src/gen/wxAcceleratorTable.erl b/lib/wx/src/gen/wxAcceleratorTable.erl
index 3edfee7709..4efcaaa7d0 100644
--- a/lib/wx/src/gen/wxAcceleratorTable.erl
+++ b/lib/wx/src/gen/wxAcceleratorTable.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@ new() ->
N::integer(), Entries::[wxAcceleratorEntry:wxAcceleratorEntry()].
new(N,Entries)
when is_integer(N),is_list(Entries) ->
- [?CLASS(EntriesT,wxAcceleratorEntry) || #wx_ref{type=EntriesT} <- Entries],
+ _ = [?CLASS(EntriesT,wxAcceleratorEntry) || #wx_ref{type=EntriesT} <- Entries],
wxe_util:construct(?wxAcceleratorTable_new_2,
<<N:32/?UI,(length(Entries)):32/?UI,
(<< <<(C#wx_ref.ref):32/?UI>> || C <- Entries>>)/binary, 0:(((0+length(Entries)) rem 2)*32)>>).
@@ -60,7 +60,7 @@ ok(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAcceleratorTable()) -> ok.
+-spec destroy(This::wxAcceleratorTable()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAcceleratorTable),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxActivateEvent.erl b/lib/wx/src/gen/wxActivateEvent.erl
index 157b25f05a..06c5d47746 100644
--- a/lib/wx/src/gen/wxActivateEvent.erl
+++ b/lib/wx/src/gen/wxActivateEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxArtProvider.erl b/lib/wx/src/gen/wxArtProvider.erl
index 7dc170beff..da220a90c8 100644
--- a/lib/wx/src/gen/wxArtProvider.erl
+++ b/lib/wx/src/gen/wxArtProvider.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,8 +46,8 @@ getBitmap(Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxartprovider.html#wxartprovidergetbitmap">external documentation</a>.
-spec getBitmap(Id, [Option]) -> wxBitmap:wxBitmap() when
Id::unicode:chardata(),
- Option :: {client, unicode:chardata()}
- | {size, {W::integer(), H::integer()}}.
+ Option :: {'client', unicode:chardata()}
+ | {'size', {W::integer(), H::integer()}}.
getBitmap(Id, Options)
when is_list(Id),is_list(Options) ->
Id_UC = unicode:characters_to_binary([Id,0]),
@@ -69,8 +69,8 @@ getIcon(Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxartprovider.html#wxartprovidergeticon">external documentation</a>.
-spec getIcon(Id, [Option]) -> wxIcon:wxIcon() when
Id::unicode:chardata(),
- Option :: {client, unicode:chardata()}
- | {size, {W::integer(), H::integer()}}.
+ Option :: {'client', unicode:chardata()}
+ | {'size', {W::integer(), H::integer()}}.
getIcon(Id, Options)
when is_list(Id),is_list(Options) ->
Id_UC = unicode:characters_to_binary([Id,0]),
diff --git a/lib/wx/src/gen/wxAuiDockArt.erl b/lib/wx/src/gen/wxAuiDockArt.erl
index 4149b1d424..5b7890f132 100644
--- a/lib/wx/src/gen/wxAuiDockArt.erl
+++ b/lib/wx/src/gen/wxAuiDockArt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@ getMetric(#wx_ref{type=ThisT,ref=ThisRef},Id)
<<ThisRef:32/?UI,Id:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauidockart.html#wxauidockartsetcolour">external documentation</a>.
--spec setColour(This, Id, Colour) -> ok when
+-spec setColour(This, Id, Colour) -> 'ok' when
This::wxAuiDockArt(), Id::integer(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Id,Colour)
when is_integer(Id),tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -72,7 +72,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Id,Colour)
<<ThisRef:32/?UI,Id:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauidockart.html#wxauidockartsetfont">external documentation</a>.
--spec setFont(This, Id, Font) -> ok when
+-spec setFont(This, Id, Font) -> 'ok' when
This::wxAuiDockArt(), Id::integer(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},Id,#wx_ref{type=FontT,ref=FontRef})
when is_integer(Id) ->
@@ -82,7 +82,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},Id,#wx_ref{type=FontT,ref=FontRef})
<<ThisRef:32/?UI,Id:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauidockart.html#wxauidockartsetmetric">external documentation</a>.
--spec setMetric(This, Id, New_val) -> ok when
+-spec setMetric(This, Id, New_val) -> 'ok' when
This::wxAuiDockArt(), Id::integer(), New_val::integer().
setMetric(#wx_ref{type=ThisT,ref=ThisRef},Id,New_val)
when is_integer(Id),is_integer(New_val) ->
diff --git a/lib/wx/src/gen/wxAuiManager.erl b/lib/wx/src/gen/wxAuiManager.erl
index bf22e3091d..37693060e1 100644
--- a/lib/wx/src/gen/wxAuiManager.erl
+++ b/lib/wx/src/gen/wxAuiManager.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,8 +52,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerwxauimanager">external documentation</a>.
-spec new([Option]) -> wxAuiManager() when
- Option :: {managed_wnd, wxWindow:wxWindow()}
- | {flags, integer()}.
+ Option :: {'managed_wnd', wxWindow:wxWindow()}
+ | {'flags', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({managed_wnd, #wx_ref{type=Managed_wndT,ref=Managed_wndRef}}, Acc) -> ?CLASS(Managed_wndT,wxWindow),[<<1:32/?UI,Managed_wndRef:32/?UI>>|Acc];
@@ -78,8 +78,8 @@ addPane(This,Window)
%%
-spec addPane(This, Window, [Option]) -> boolean() when
This::wxAuiManager(), Window::wxWindow:wxWindow(),
- Option :: {direction, integer()}
- | {caption, unicode:chardata()};
+ Option :: {'direction', integer()}
+ | {'caption', unicode:chardata()};
(This, Window, Pane_info) -> boolean() when
This::wxAuiManager(), Window::wxWindow:wxWindow(), Pane_info::wxAuiPaneInfo:wxAuiPaneInfo().
addPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}, Options)
@@ -189,7 +189,7 @@ getPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerhidehint">external documentation</a>.
--spec hideHint(This) -> ok when
+-spec hideHint(This) -> 'ok' when
This::wxAuiManager().
hideHint(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -207,7 +207,7 @@ insertPane(This,Window,Insert_location)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerinsertpane">external documentation</a>.
-spec insertPane(This, Window, Insert_location, [Option]) -> boolean() when
This::wxAuiManager(), Window::wxWindow:wxWindow(), Insert_location::wxAuiPaneInfo:wxAuiPaneInfo(),
- Option :: {insert_level, integer()}.
+ Option :: {'insert_level', integer()}.
insertPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},#wx_ref{type=Insert_locationT,ref=Insert_locationRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiManager),
@@ -220,7 +220,7 @@ insertPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},#
<<ThisRef:32/?UI,WindowRef:32/?UI,Insert_locationRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerloadpaneinfo">external documentation</a>.
--spec loadPaneInfo(This, Pane_part, Pane) -> ok when
+-spec loadPaneInfo(This, Pane_part, Pane) -> 'ok' when
This::wxAuiManager(), Pane_part::unicode:chardata(), Pane::wxAuiPaneInfo:wxAuiPaneInfo().
loadPaneInfo(#wx_ref{type=ThisT,ref=ThisRef},Pane_part,#wx_ref{type=PaneT,ref=PaneRef})
when is_list(Pane_part) ->
@@ -241,7 +241,7 @@ loadPerspective(This,Perspective)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerloadperspective">external documentation</a>.
-spec loadPerspective(This, Perspective, [Option]) -> boolean() when
This::wxAuiManager(), Perspective::unicode:chardata(),
- Option :: {update, boolean()}.
+ Option :: {'update', boolean()}.
loadPerspective(#wx_ref{type=ThisT,ref=ThisRef},Perspective, Options)
when is_list(Perspective),is_list(Options) ->
?CLASS(ThisT,wxAuiManager),
@@ -270,7 +270,7 @@ savePerspective(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagersetartprovider">external documentation</a>.
--spec setArtProvider(This, Art_provider) -> ok when
+-spec setArtProvider(This, Art_provider) -> 'ok' when
This::wxAuiManager(), Art_provider::wxAuiDockArt:wxAuiDockArt().
setArtProvider(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Art_providerT,ref=Art_providerRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -279,7 +279,7 @@ setArtProvider(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Art_providerT,ref=Ar
<<ThisRef:32/?UI,Art_providerRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagersetdocksizeconstraint">external documentation</a>.
--spec setDockSizeConstraint(This, Width_pct, Height_pct) -> ok when
+-spec setDockSizeConstraint(This, Width_pct, Height_pct) -> 'ok' when
This::wxAuiManager(), Width_pct::number(), Height_pct::number().
setDockSizeConstraint(#wx_ref{type=ThisT,ref=ThisRef},Width_pct,Height_pct)
when is_number(Width_pct),is_number(Height_pct) ->
@@ -288,7 +288,7 @@ setDockSizeConstraint(#wx_ref{type=ThisT,ref=ThisRef},Width_pct,Height_pct)
<<ThisRef:32/?UI,0:32,Width_pct:64/?F,Height_pct:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagersetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxAuiManager(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -297,7 +297,7 @@ setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagersetmanagedwindow">external documentation</a>.
--spec setManagedWindow(This, Managed_wnd) -> ok when
+-spec setManagedWindow(This, Managed_wnd) -> 'ok' when
This::wxAuiManager(), Managed_wnd::wxWindow:wxWindow().
setManagedWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Managed_wndT,ref=Managed_wndRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -306,7 +306,7 @@ setManagedWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Managed_wndT,ref=M
<<ThisRef:32/?UI,Managed_wndRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagershowhint">external documentation</a>.
--spec showHint(This, Rect) -> ok when
+-spec showHint(This, Rect) -> 'ok' when
This::wxAuiManager(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
showHint(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -315,7 +315,7 @@ showHint(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanageruninit">external documentation</a>.
--spec unInit(This) -> ok when
+-spec unInit(This) -> 'ok' when
This::wxAuiManager().
unInit(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -323,7 +323,7 @@ unInit(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerupdate">external documentation</a>.
--spec update(This) -> ok when
+-spec update(This) -> 'ok' when
This::wxAuiManager().
update(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -331,7 +331,7 @@ update(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAuiManager()) -> ok.
+-spec destroy(This::wxAuiManager()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAuiManager),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxAuiManagerEvent.erl b/lib/wx/src/gen/wxAuiManagerEvent.erl
index 88e4433f24..2878c5b272 100644
--- a/lib/wx/src/gen/wxAuiManagerEvent.erl
+++ b/lib/wx/src/gen/wxAuiManagerEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxAuiManagerEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetmanager">external documentation</a>.
--spec setManager(This, Mgr) -> ok when
+-spec setManager(This, Mgr) -> 'ok' when
This::wxAuiManagerEvent(), Mgr::wxAuiManager:wxAuiManager().
setManager(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MgrT,ref=MgrRef}) ->
?CLASS(ThisT,wxAuiManagerEvent),
@@ -63,7 +63,7 @@ getManager(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetpane">external documentation</a>.
--spec setPane(This, P) -> ok when
+-spec setPane(This, P) -> 'ok' when
This::wxAuiManagerEvent(), P::wxAuiPaneInfo:wxAuiPaneInfo().
setPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PT,ref=PRef}) ->
?CLASS(ThisT,wxAuiManagerEvent),
@@ -80,7 +80,7 @@ getPane(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetbutton">external documentation</a>.
--spec setButton(This, B) -> ok when
+-spec setButton(This, B) -> 'ok' when
This::wxAuiManagerEvent(), B::integer().
setButton(#wx_ref{type=ThisT,ref=ThisRef},B)
when is_integer(B) ->
@@ -97,7 +97,7 @@ getButton(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetdc">external documentation</a>.
--spec setDC(This, Pdc) -> ok when
+-spec setDC(This, Pdc) -> 'ok' when
This::wxAuiManagerEvent(), Pdc::wxDC:wxDC().
setDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PdcT,ref=PdcRef}) ->
?CLASS(ThisT,wxAuiManagerEvent),
@@ -114,7 +114,7 @@ getDC(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv veto(This, [])
--spec veto(This) -> ok when
+-spec veto(This) -> 'ok' when
This::wxAuiManagerEvent().
veto(This)
@@ -122,9 +122,9 @@ veto(This)
veto(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventveto">external documentation</a>.
--spec veto(This, [Option]) -> ok when
+-spec veto(This, [Option]) -> 'ok' when
This::wxAuiManagerEvent(),
- Option :: {veto, boolean()}.
+ Option :: {'veto', boolean()}.
veto(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiManagerEvent),
@@ -143,7 +143,7 @@ getVeto(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetcanveto">external documentation</a>.
--spec setCanVeto(This, Can_veto) -> ok when
+-spec setCanVeto(This, Can_veto) -> 'ok' when
This::wxAuiManagerEvent(), Can_veto::boolean().
setCanVeto(#wx_ref{type=ThisT,ref=ThisRef},Can_veto)
when is_boolean(Can_veto) ->
diff --git a/lib/wx/src/gen/wxAuiNotebook.erl b/lib/wx/src/gen/wxAuiNotebook.erl
index 7ec1acb26d..42da35e16a 100644
--- a/lib/wx/src/gen/wxAuiNotebook.erl
+++ b/lib/wx/src/gen/wxAuiNotebook.erl
@@ -100,10 +100,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebookwxauinotebook">external documentation</a>.
-spec new(Parent, [Option]) -> wxAuiNotebook() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -127,8 +127,8 @@ addPage(This,Page,Caption)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebookaddpage">external documentation</a>.
-spec addPage(This, Page, Caption, [Option]) -> boolean() when
This::wxAuiNotebook(), Page::wxWindow:wxWindow(), Caption::unicode:chardata(),
- Option :: {select, boolean()}
- | {bitmap, wxBitmap:wxBitmap()}.
+ Option :: {'select', boolean()}
+ | {'bitmap', wxBitmap:wxBitmap()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Caption, Options)
when is_list(Caption),is_list(Options) ->
?CLASS(ThisT,wxAuiNotebook),
@@ -152,10 +152,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebookcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxAuiNotebook(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiNotebook),
@@ -249,8 +249,8 @@ insertPage(This,Page_idx,Page,Caption)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebookinsertpage">external documentation</a>.
-spec insertPage(This, Page_idx, Page, Caption, [Option]) -> boolean() when
This::wxAuiNotebook(), Page_idx::integer(), Page::wxWindow:wxWindow(), Caption::unicode:chardata(),
- Option :: {select, boolean()}
- | {bitmap, wxBitmap:wxBitmap()}.
+ Option :: {'select', boolean()}
+ | {'bitmap', wxBitmap:wxBitmap()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},Page_idx,#wx_ref{type=PageT,ref=PageRef},Caption, Options)
when is_integer(Page_idx),is_list(Caption),is_list(Options) ->
?CLASS(ThisT,wxAuiNotebook),
@@ -273,7 +273,7 @@ removePage(#wx_ref{type=ThisT,ref=ThisRef},Page)
<<ThisRef:32/?UI,Page:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebooksetartprovider">external documentation</a>.
--spec setArtProvider(This, Art) -> ok when
+-spec setArtProvider(This, Art) -> 'ok' when
This::wxAuiNotebook(), Art::wxAuiTabArt:wxAuiTabArt().
setArtProvider(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ArtT,ref=ArtRef}) ->
?CLASS(ThisT,wxAuiNotebook),
@@ -320,7 +320,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},New_page)
<<ThisRef:32/?UI,New_page:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebooksettabctrlheight">external documentation</a>.
--spec setTabCtrlHeight(This, Height) -> ok when
+-spec setTabCtrlHeight(This, Height) -> 'ok' when
This::wxAuiNotebook(), Height::integer().
setTabCtrlHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
when is_integer(Height) ->
@@ -329,7 +329,7 @@ setTabCtrlHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
<<ThisRef:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebooksetuniformbitmapsize">external documentation</a>.
--spec setUniformBitmapSize(This, Size) -> ok when
+-spec setUniformBitmapSize(This, Size) -> 'ok' when
This::wxAuiNotebook(), Size::{W::integer(), H::integer()}.
setUniformBitmapSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -338,7 +338,7 @@ setUniformBitmapSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAuiNotebook()) -> ok.
+-spec destroy(This::wxAuiNotebook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAuiNotebook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxAuiNotebookEvent.erl b/lib/wx/src/gen/wxAuiNotebookEvent.erl
index 33509e3269..a51a85b7f4 100644
--- a/lib/wx/src/gen/wxAuiNotebookEvent.erl
+++ b/lib/wx/src/gen/wxAuiNotebookEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxAuiNotebookEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebookevent.html#wxauinotebookeventsetselection">external documentation</a>.
--spec setSelection(This, S) -> ok when
+-spec setSelection(This, S) -> 'ok' when
This::wxAuiNotebookEvent(), S::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},S)
when is_integer(S) ->
@@ -69,7 +69,7 @@ getSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebookevent.html#wxauinotebookeventsetoldselection">external documentation</a>.
--spec setOldSelection(This, S) -> ok when
+-spec setOldSelection(This, S) -> 'ok' when
This::wxAuiNotebookEvent(), S::integer().
setOldSelection(#wx_ref{type=ThisT,ref=ThisRef},S)
when is_integer(S) ->
@@ -86,7 +86,7 @@ getOldSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebookevent.html#wxauinotebookeventsetdragsource">external documentation</a>.
--spec setDragSource(This, S) -> ok when
+-spec setDragSource(This, S) -> 'ok' when
This::wxAuiNotebookEvent(), S::wxAuiNotebook:wxAuiNotebook().
setDragSource(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ST,ref=SRef}) ->
?CLASS(ThisT,wxAuiNotebookEvent),
diff --git a/lib/wx/src/gen/wxAuiPaneInfo.erl b/lib/wx/src/gen/wxAuiPaneInfo.erl
index 1f15e9cd39..858da200be 100644
--- a/lib/wx/src/gen/wxAuiPaneInfo.erl
+++ b/lib/wx/src/gen/wxAuiPaneInfo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -103,7 +103,7 @@ bottomDockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfobottomdockable">external documentation</a>.
-spec bottomDockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
bottomDockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -134,7 +134,7 @@ captionVisible(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfocaptionvisible">external documentation</a>.
-spec captionVisible(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
captionVisible(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -171,7 +171,7 @@ closeButton(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfoclosebutton">external documentation</a>.
-spec closeButton(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
closeButton(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -200,7 +200,7 @@ destroyOnClose(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfodestroyonclose">external documentation</a>.
-spec destroyOnClose(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
destroyOnClose(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -238,7 +238,7 @@ dockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfodockable">external documentation</a>.
-spec dockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
dockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -275,7 +275,7 @@ floatable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfofloatable">external documentation</a>.
-spec floatable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
floatable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -332,7 +332,7 @@ gripper(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfogripper">external documentation</a>.
-spec gripper(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
gripper(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -353,7 +353,7 @@ gripperTop(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfogrippertop">external documentation</a>.
-spec gripperTop(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {attop, boolean()}.
+ Option :: {'attop', boolean()}.
gripperTop(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -576,7 +576,7 @@ leftDockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfoleftdockable">external documentation</a>.
-spec leftDockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
leftDockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -615,7 +615,7 @@ maximizeButton(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfomaximizebutton">external documentation</a>.
-spec maximizeButton(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
maximizeButton(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -654,7 +654,7 @@ minimizeButton(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfominimizebutton">external documentation</a>.
-spec minimizeButton(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
minimizeButton(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -675,7 +675,7 @@ movable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfomovable">external documentation</a>.
-spec movable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
movable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -706,7 +706,7 @@ paneBorder(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfopaneborder">external documentation</a>.
-spec paneBorder(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
paneBorder(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -727,7 +727,7 @@ pinButton(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfopinbutton">external documentation</a>.
-spec pinButton(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
pinButton(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -757,7 +757,7 @@ resizable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinforesizable">external documentation</a>.
-spec resizable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {resizable, boolean()}.
+ Option :: {'resizable', boolean()}.
resizable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -786,7 +786,7 @@ rightDockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinforightdockable">external documentation</a>.
-spec rightDockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
rightDockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -806,7 +806,7 @@ row(#wx_ref{type=ThisT,ref=ThisRef},Row)
<<ThisRef:32/?UI,Row:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfosafeset">external documentation</a>.
--spec safeSet(This, Source) -> ok when
+-spec safeSet(This, Source) -> 'ok' when
This::wxAuiPaneInfo(), Source::wxAuiPaneInfo().
safeSet(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SourceT,ref=SourceRef}) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -834,7 +834,7 @@ show(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfoshow">external documentation</a>.
-spec show(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -871,7 +871,7 @@ topDockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfotopdockable">external documentation</a>.
-spec topDockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
topDockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -955,7 +955,7 @@ getFloatingSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAuiPaneInfo()) -> ok.
+-spec destroy(This::wxAuiPaneInfo()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAuiPaneInfo),
wxe_util:destroy(?wxAuiPaneInfo_destruct,Obj),
diff --git a/lib/wx/src/gen/wxAuiSimpleTabArt.erl b/lib/wx/src/gen/wxAuiSimpleTabArt.erl
index 57d12e2eb4..eae00e5591 100644
--- a/lib/wx/src/gen/wxAuiSimpleTabArt.erl
+++ b/lib/wx/src/gen/wxAuiSimpleTabArt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAuiSimpleTabArt()) -> ok.
+-spec destroy(This::wxAuiSimpleTabArt()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAuiSimpleTabArt),
wxe_util:destroy(?wxAuiSimpleTabArt_destroy,Obj),
diff --git a/lib/wx/src/gen/wxAuiTabArt.erl b/lib/wx/src/gen/wxAuiTabArt.erl
index 80924c0269..324c167aa5 100644
--- a/lib/wx/src/gen/wxAuiTabArt.erl
+++ b/lib/wx/src/gen/wxAuiTabArt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxAuiTabArt() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxAuiTabArt(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -46,7 +46,7 @@ setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetmeasuringfont">external documentation</a>.
--spec setMeasuringFont(This, Font) -> ok when
+-spec setMeasuringFont(This, Font) -> 'ok' when
This::wxAuiTabArt(), Font::wxFont:wxFont().
setMeasuringFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxAuiTabArt),
@@ -55,7 +55,7 @@ setMeasuringFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetnormalfont">external documentation</a>.
--spec setNormalFont(This, Font) -> ok when
+-spec setNormalFont(This, Font) -> 'ok' when
This::wxAuiTabArt(), Font::wxFont:wxFont().
setNormalFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxAuiTabArt),
@@ -64,7 +64,7 @@ setNormalFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) -
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetselectedfont">external documentation</a>.
--spec setSelectedFont(This, Font) -> ok when
+-spec setSelectedFont(This, Font) -> 'ok' when
This::wxAuiTabArt(), Font::wxFont:wxFont().
setSelectedFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxAuiTabArt),
@@ -73,7 +73,7 @@ setSelectedFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef})
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxAuiTabArt(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -82,7 +82,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetactivecolour">external documentation</a>.
--spec setActiveColour(This, Colour) -> ok when
+-spec setActiveColour(This, Colour) -> 'ok' when
This::wxAuiTabArt(), Colour::wx:wx_colour().
setActiveColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
diff --git a/lib/wx/src/gen/wxBitmap.erl b/lib/wx/src/gen/wxBitmap.erl
index 988dc5b1af..e7830dae9b 100644
--- a/lib/wx/src/gen/wxBitmap.erl
+++ b/lib/wx/src/gen/wxBitmap.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -67,20 +67,20 @@ new(Image)
%% <br /> Also:<br />
%% new(Filename, [Option]) -> wxBitmap() when<br />
%% Filename::unicode:chardata(),<br />
-%% Option :: {type, wx:wx_enum()};<br />
+%% Option :: {'type', wx:wx_enum()};<br />
%% (Image, [Option]) -> wxBitmap() when<br />
%% Image::wxImage:wxImage(),<br />
-%% Option :: {depth, integer()}.<br />
+%% Option :: {'depth', integer()}.<br />
%%
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec new(Width, Height) -> wxBitmap() when
Width::integer(), Height::integer();
(Filename, [Option]) -> wxBitmap() when
Filename::unicode:chardata(),
- Option :: {type, wx:wx_enum()};
+ Option :: {'type', wx:wx_enum()};
(Image, [Option]) -> wxBitmap() when
Image::wxImage:wxImage(),
- Option :: {depth, integer()}.
+ Option :: {'depth', integer()}.
new(Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -106,13 +106,13 @@ new(#wx_ref{type=ImageT,ref=ImageRef}, Options)
%% <br /> Also:<br />
%% new(Width, Height, [Option]) -> wxBitmap() when<br />
%% Width::integer(), Height::integer(),<br />
-%% Option :: {depth, integer()}.<br />
+%% Option :: {'depth', integer()}.<br />
%%
-spec new(Bits, Width, Height) -> wxBitmap() when
Bits::binary(), Width::integer(), Height::integer();
(Width, Height, [Option]) -> wxBitmap() when
Width::integer(), Height::integer(),
- Option :: {depth, integer()}.
+ Option :: {'depth', integer()}.
new(Bits,Width,Height)
when is_binary(Bits),is_integer(Width),is_integer(Height) ->
@@ -128,7 +128,7 @@ new(Width,Height, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapwxbitmap">external documentation</a>.
-spec new(Bits, Width, Height, [Option]) -> wxBitmap() when
Bits::binary(), Width::integer(), Height::integer(),
- Option :: {depth, integer()}.
+ Option :: {'depth', integer()}.
new(Bits,Width,Height, Options)
when is_binary(Bits),is_integer(Width),is_integer(Height),is_list(Options) ->
wxe_util:send_bin(Bits),
@@ -166,7 +166,7 @@ create(This,Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapcreate">external documentation</a>.
-spec create(This, Width, Height, [Option]) -> boolean() when
This::wxBitmap(), Width::integer(), Height::integer(),
- Option :: {depth, integer()}.
+ Option :: {'depth', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxBitmap),
@@ -237,7 +237,7 @@ loadFile(This,Name)
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec loadFile(This, Name, [Option]) -> boolean() when
This::wxBitmap(), Name::unicode:chardata(),
- Option :: {type, wx:wx_enum()}.
+ Option :: {'type', wx:wx_enum()}.
loadFile(#wx_ref{type=ThisT,ref=ThisRef},Name, Options)
when is_list(Name),is_list(Options) ->
?CLASS(ThisT,wxBitmap),
@@ -268,7 +268,7 @@ saveFile(This,Name,Type)
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec saveFile(This, Name, Type, [Option]) -> boolean() when
This::wxBitmap(), Name::unicode:chardata(), Type::wx:wx_enum(),
- Option :: {palette, wxPalette:wxPalette()}.
+ Option :: {'palette', wxPalette:wxPalette()}.
saveFile(#wx_ref{type=ThisT,ref=ThisRef},Name,Type, Options)
when is_list(Name),is_integer(Type),is_list(Options) ->
?CLASS(ThisT,wxBitmap),
@@ -280,7 +280,7 @@ saveFile(#wx_ref{type=ThisT,ref=ThisRef},Name,Type, Options)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8,Type:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetdepth">external documentation</a>.
--spec setDepth(This, Depth) -> ok when
+-spec setDepth(This, Depth) -> 'ok' when
This::wxBitmap(), Depth::integer().
setDepth(#wx_ref{type=ThisT,ref=ThisRef},Depth)
when is_integer(Depth) ->
@@ -289,7 +289,7 @@ setDepth(#wx_ref{type=ThisT,ref=ThisRef},Depth)
<<ThisRef:32/?UI,Depth:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetheight">external documentation</a>.
--spec setHeight(This, Height) -> ok when
+-spec setHeight(This, Height) -> 'ok' when
This::wxBitmap(), Height::integer().
setHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
when is_integer(Height) ->
@@ -298,7 +298,7 @@ setHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
<<ThisRef:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetmask">external documentation</a>.
--spec setMask(This, Mask) -> ok when
+-spec setMask(This, Mask) -> 'ok' when
This::wxBitmap(), Mask::wxMask:wxMask().
setMask(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MaskT,ref=MaskRef}) ->
?CLASS(ThisT,wxBitmap),
@@ -307,7 +307,7 @@ setMask(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MaskT,ref=MaskRef}) ->
<<ThisRef:32/?UI,MaskRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetpalette">external documentation</a>.
--spec setPalette(This, Palette) -> ok when
+-spec setPalette(This, Palette) -> 'ok' when
This::wxBitmap(), Palette::wxPalette:wxPalette().
setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}) ->
?CLASS(ThisT,wxBitmap),
@@ -316,7 +316,7 @@ setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}
<<ThisRef:32/?UI,PaletteRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetwidth">external documentation</a>.
--spec setWidth(This, Width) -> ok when
+-spec setWidth(This, Width) -> 'ok' when
This::wxBitmap(), Width::integer().
setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -325,7 +325,7 @@ setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBitmap()) -> ok.
+-spec destroy(This::wxBitmap()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBitmap),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBitmapButton.erl b/lib/wx/src/gen/wxBitmapButton.erl
index 642828b0b0..d1d2d037e8 100644
--- a/lib/wx/src/gen/wxBitmapButton.erl
+++ b/lib/wx/src/gen/wxBitmapButton.erl
@@ -100,10 +100,10 @@ new(Parent,Id,Bitmap)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonwxbitmapbutton">external documentation</a>.
-spec new(Parent, Id, Bitmap, [Option]) -> wxBitmapButton() when
Parent::wxWindow:wxWindow(), Id::integer(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -128,10 +128,10 @@ create(This,Parent,Id,Bitmap)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttoncreate">external documentation</a>.
-spec create(This, Parent, Id, Bitmap, [Option]) -> boolean() when
This::wxBitmapButton(), Parent::wxWindow:wxWindow(), Id::integer(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxBitmapButton),
@@ -179,7 +179,7 @@ getBitmapSelected(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonsetbitmapdisabled">external documentation</a>.
--spec setBitmapDisabled(This, Disabled) -> ok when
+-spec setBitmapDisabled(This, Disabled) -> 'ok' when
This::wxBitmapButton(), Disabled::wxBitmap:wxBitmap().
setBitmapDisabled(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DisabledT,ref=DisabledRef}) ->
?CLASS(ThisT,wxBitmapButton),
@@ -188,7 +188,7 @@ setBitmapDisabled(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DisabledT,ref=Dis
<<ThisRef:32/?UI,DisabledRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonsetbitmapfocus">external documentation</a>.
--spec setBitmapFocus(This, Focus) -> ok when
+-spec setBitmapFocus(This, Focus) -> 'ok' when
This::wxBitmapButton(), Focus::wxBitmap:wxBitmap().
setBitmapFocus(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FocusT,ref=FocusRef}) ->
?CLASS(ThisT,wxBitmapButton),
@@ -197,7 +197,7 @@ setBitmapFocus(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FocusT,ref=FocusRef}
<<ThisRef:32/?UI,FocusRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonsetbitmaplabel">external documentation</a>.
--spec setBitmapLabel(This, Bitmap) -> ok when
+-spec setBitmapLabel(This, Bitmap) -> 'ok' when
This::wxBitmapButton(), Bitmap::wxBitmap:wxBitmap().
setBitmapLabel(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) ->
?CLASS(ThisT,wxBitmapButton),
@@ -206,7 +206,7 @@ setBitmapLabel(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRe
<<ThisRef:32/?UI,BitmapRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonsetbitmapselected">external documentation</a>.
--spec setBitmapSelected(This, Sel) -> ok when
+-spec setBitmapSelected(This, Sel) -> 'ok' when
This::wxBitmapButton(), Sel::wxBitmap:wxBitmap().
setBitmapSelected(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SelT,ref=SelRef}) ->
?CLASS(ThisT,wxBitmapButton),
@@ -215,7 +215,7 @@ setBitmapSelected(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SelT,ref=SelRef})
<<ThisRef:32/?UI,SelRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBitmapButton()) -> ok.
+-spec destroy(This::wxBitmapButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBitmapButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBitmapDataObject.erl b/lib/wx/src/gen/wxBitmapDataObject.erl
index 9fcbb4df41..58094a5910 100644
--- a/lib/wx/src/gen/wxBitmapDataObject.erl
+++ b/lib/wx/src/gen/wxBitmapDataObject.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -51,7 +51,7 @@ new() ->
%% Bitmap::wxBitmap:wxBitmap().<br />
%%
-spec new([Option]) -> wxBitmapDataObject() when
- Option :: {bitmap, wxBitmap:wxBitmap()};
+ Option :: {'bitmap', wxBitmap:wxBitmap()};
(Bitmap) -> wxBitmapDataObject() when
Bitmap::wxBitmap:wxBitmap().
new(Options)
@@ -75,7 +75,7 @@ getBitmap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapdataobject.html#wxbitmapdataobjectsetbitmap">external documentation</a>.
--spec setBitmap(This, Bitmap) -> ok when
+-spec setBitmap(This, Bitmap) -> 'ok' when
This::wxBitmapDataObject(), Bitmap::wxBitmap:wxBitmap().
setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) ->
?CLASS(ThisT,wxBitmapDataObject),
@@ -84,7 +84,7 @@ setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) -
<<ThisRef:32/?UI,BitmapRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBitmapDataObject()) -> ok.
+-spec destroy(This::wxBitmapDataObject()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBitmapDataObject),
wxe_util:destroy(?wxBitmapDataObject_destroy,Obj),
diff --git a/lib/wx/src/gen/wxBoxSizer.erl b/lib/wx/src/gen/wxBoxSizer.erl
index 04f26f95d9..595be0a452 100644
--- a/lib/wx/src/gen/wxBoxSizer.erl
+++ b/lib/wx/src/gen/wxBoxSizer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -64,7 +64,7 @@ getOrientation(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBoxSizer()) -> ok.
+-spec destroy(This::wxBoxSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBoxSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBrush.erl b/lib/wx/src/gen/wxBrush.erl
index 3d6112a351..8f5eced1b9 100644
--- a/lib/wx/src/gen/wxBrush.erl
+++ b/lib/wx/src/gen/wxBrush.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@ new(#wx_ref{type=StippleBitmapT,ref=StippleBitmapRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushwxbrush">external documentation</a>.
-spec new(Colour, [Option]) -> wxBrush() when
Colour::wx:wx_colour(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(Colour, Options)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4,is_list(Options) ->
MOpts = fun({style, Style}, Acc) -> [<<1:32/?UI,Style:32/?UI>>|Acc];
@@ -113,7 +113,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushsetcolour">external documentation</a>.
--spec setColour(This, Col) -> ok when
+-spec setColour(This, Col) -> 'ok' when
This::wxBrush(), Col::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -122,7 +122,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushsetcolour">external documentation</a>.
--spec setColour(This, R, G, B) -> ok when
+-spec setColour(This, R, G, B) -> 'ok' when
This::wxBrush(), R::integer(), G::integer(), B::integer().
setColour(#wx_ref{type=ThisT,ref=ThisRef},R,G,B)
when is_integer(R),is_integer(G),is_integer(B) ->
@@ -131,7 +131,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},R,G,B)
<<ThisRef:32/?UI,R:32/?UI,G:32/?UI,B:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushsetstipple">external documentation</a>.
--spec setStipple(This, Stipple) -> ok when
+-spec setStipple(This, Stipple) -> 'ok' when
This::wxBrush(), Stipple::wxBitmap:wxBitmap().
setStipple(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StippleT,ref=StippleRef}) ->
?CLASS(ThisT,wxBrush),
@@ -140,7 +140,7 @@ setStipple(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StippleT,ref=StippleRef}
<<ThisRef:32/?UI,StippleRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushsetstyle">external documentation</a>.
--spec setStyle(This, Style) -> ok when
+-spec setStyle(This, Style) -> 'ok' when
This::wxBrush(), Style::integer().
setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -149,7 +149,7 @@ setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBrush()) -> ok.
+-spec destroy(This::wxBrush()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBrush),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBufferedDC.erl b/lib/wx/src/gen/wxBufferedDC.erl
index 5959a3c3ab..7856f6bb96 100644
--- a/lib/wx/src/gen/wxBufferedDC.erl
+++ b/lib/wx/src/gen/wxBufferedDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -81,15 +81,15 @@ new(Dc)
%% <br /> Also:<br />
%% new(Dc, [Option]) -> wxBufferedDC() when<br />
%% Dc::wxDC:wxDC(),<br />
-%% Option :: {buffer, wxBitmap:wxBitmap()}<br />
-%% | {style, integer()}.<br />
+%% Option :: {'buffer', wxBitmap:wxBitmap()}<br />
+%% | {'style', integer()}.<br />
%%
-spec new(Dc, Area) -> wxBufferedDC() when
Dc::wxDC:wxDC(), Area::{W::integer(), H::integer()};
(Dc, [Option]) -> wxBufferedDC() when
Dc::wxDC:wxDC(),
- Option :: {buffer, wxBitmap:wxBitmap()}
- | {style, integer()}.
+ Option :: {'buffer', wxBitmap:wxBitmap()}
+ | {'style', integer()}.
new(Dc,Area={AreaW,AreaH})
when is_record(Dc, wx_ref),is_integer(AreaW),is_integer(AreaH) ->
@@ -107,7 +107,7 @@ new(#wx_ref{type=DcT,ref=DcRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbuffereddc.html#wxbuffereddcwxbuffereddc">external documentation</a>.
-spec new(Dc, Area, [Option]) -> wxBufferedDC() when
Dc::wxDC:wxDC(), Area::{W::integer(), H::integer()},
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=DcT,ref=DcRef},{AreaW,AreaH}, Options)
when is_integer(AreaW),is_integer(AreaH),is_list(Options) ->
?CLASS(DcT,wxDC),
@@ -118,7 +118,7 @@ new(#wx_ref{type=DcT,ref=DcRef},{AreaW,AreaH}, Options)
<<DcRef:32/?UI,AreaW:32/?UI,AreaH:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv init(This,Dc, [])
--spec init(This, Dc) -> ok when
+-spec init(This, Dc) -> 'ok' when
This::wxBufferedDC(), Dc::wxDC:wxDC().
init(This,Dc)
@@ -127,17 +127,17 @@ init(This,Dc)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbuffereddc.html#wxbuffereddcinit">external documentation</a>.
%% <br /> Also:<br />
-%% init(This, Dc, [Option]) -> ok when<br />
+%% init(This, Dc, [Option]) -> 'ok' when<br />
%% This::wxBufferedDC(), Dc::wxDC:wxDC(),<br />
-%% Option :: {buffer, wxBitmap:wxBitmap()}<br />
-%% | {style, integer()}.<br />
+%% Option :: {'buffer', wxBitmap:wxBitmap()}<br />
+%% | {'style', integer()}.<br />
%%
--spec init(This, Dc, Area) -> ok when
+-spec init(This, Dc, Area) -> 'ok' when
This::wxBufferedDC(), Dc::wxDC:wxDC(), Area::{W::integer(), H::integer()};
- (This, Dc, [Option]) -> ok when
+ (This, Dc, [Option]) -> 'ok' when
This::wxBufferedDC(), Dc::wxDC:wxDC(),
- Option :: {buffer, wxBitmap:wxBitmap()}
- | {style, integer()}.
+ Option :: {'buffer', wxBitmap:wxBitmap()}
+ | {'style', integer()}.
init(This,Dc,Area={AreaW,AreaH})
when is_record(This, wx_ref),is_record(Dc, wx_ref),is_integer(AreaW),is_integer(AreaH) ->
@@ -154,9 +154,9 @@ init(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}, Options)
<<ThisRef:32/?UI,DcRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbuffereddc.html#wxbuffereddcinit">external documentation</a>.
--spec init(This, Dc, Area, [Option]) -> ok when
+-spec init(This, Dc, Area, [Option]) -> 'ok' when
This::wxBufferedDC(), Dc::wxDC:wxDC(), Area::{W::integer(), H::integer()},
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
init(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef},{AreaW,AreaH}, Options)
when is_integer(AreaW),is_integer(AreaH),is_list(Options) ->
?CLASS(ThisT,wxBufferedDC),
@@ -168,7 +168,7 @@ init(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef},{AreaW,AreaH},
<<ThisRef:32/?UI,DcRef:32/?UI,AreaW:32/?UI,AreaH:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBufferedDC()) -> ok.
+-spec destroy(This::wxBufferedDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBufferedDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBufferedPaintDC.erl b/lib/wx/src/gen/wxBufferedPaintDC.erl
index a45ec6540b..5af5098d27 100644
--- a/lib/wx/src/gen/wxBufferedPaintDC.erl
+++ b/lib/wx/src/gen/wxBufferedPaintDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -78,13 +78,13 @@ new(Window)
%% <br /> Also:<br />
%% new(Window, [Option]) -> wxBufferedPaintDC() when<br />
%% Window::wxWindow:wxWindow(),<br />
-%% Option :: {style, integer()}.<br />
+%% Option :: {'style', integer()}.<br />
%%
-spec new(Window, Buffer) -> wxBufferedPaintDC() when
Window::wxWindow:wxWindow(), Buffer::wxBitmap:wxBitmap();
(Window, [Option]) -> wxBufferedPaintDC() when
Window::wxWindow:wxWindow(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(Window,Buffer)
when is_record(Window, wx_ref),is_record(Buffer, wx_ref) ->
@@ -101,7 +101,7 @@ new(#wx_ref{type=WindowT,ref=WindowRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbufferedpaintdc.html#wxbufferedpaintdcwxbufferedpaintdc">external documentation</a>.
-spec new(Window, Buffer, [Option]) -> wxBufferedPaintDC() when
Window::wxWindow:wxWindow(), Buffer::wxBitmap:wxBitmap(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=WindowT,ref=WindowRef},#wx_ref{type=BufferT,ref=BufferRef}, Options)
when is_list(Options) ->
?CLASS(WindowT,wxWindow),
@@ -113,7 +113,7 @@ new(#wx_ref{type=WindowT,ref=WindowRef},#wx_ref{type=BufferT,ref=BufferRef}, Opt
<<WindowRef:32/?UI,BufferRef:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBufferedPaintDC()) -> ok.
+-spec destroy(This::wxBufferedPaintDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBufferedPaintDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxButton.erl b/lib/wx/src/gen/wxButton.erl
index c94303bbea..65d45caa13 100644
--- a/lib/wx/src/gen/wxButton.erl
+++ b/lib/wx/src/gen/wxButton.erl
@@ -97,11 +97,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbutton.html#wxbuttonwxbutton">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxButton() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {label, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'label', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,11 +126,11 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbutton.html#wxbuttoncreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxButton(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {label, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'label', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxButton),
@@ -152,7 +152,7 @@ getDefaultSize() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbutton.html#wxbuttonsetdefault">external documentation</a>.
--spec setDefault(This) -> ok when
+-spec setDefault(This) -> 'ok' when
This::wxButton().
setDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxButton),
@@ -160,7 +160,7 @@ setDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbutton.html#wxbuttonsetlabel">external documentation</a>.
--spec setLabel(This, Label) -> ok when
+-spec setLabel(This, Label) -> 'ok' when
This::wxButton(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
when is_list(Label) ->
@@ -170,7 +170,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
<<ThisRef:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxButton()) -> ok.
+-spec destroy(This::wxButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCalendarCtrl.erl b/lib/wx/src/gen/wxCalendarCtrl.erl
index 1d4baeed08..93fcb61464 100644
--- a/lib/wx/src/gen/wxCalendarCtrl.erl
+++ b/lib/wx/src/gen/wxCalendarCtrl.erl
@@ -103,10 +103,10 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlwxcalendarctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxCalendarCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {date, wx:wx_datetime()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'date', wx:wx_datetime()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -130,10 +130,10 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxCalendarCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {date, wx:wx_datetime()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'date', wx:wx_datetime()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxCalendarCtrl),
@@ -165,7 +165,7 @@ getDate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv enableYearChange(This, [])
--spec enableYearChange(This) -> ok when
+-spec enableYearChange(This) -> 'ok' when
This::wxCalendarCtrl().
enableYearChange(This)
@@ -173,9 +173,9 @@ enableYearChange(This)
enableYearChange(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlenableyearchange">external documentation</a>.
--spec enableYearChange(This, [Option]) -> ok when
+-spec enableYearChange(This, [Option]) -> 'ok' when
This::wxCalendarCtrl(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableYearChange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCalendarCtrl),
@@ -186,7 +186,7 @@ enableYearChange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableMonthChange(This, [])
--spec enableMonthChange(This) -> ok when
+-spec enableMonthChange(This) -> 'ok' when
This::wxCalendarCtrl().
enableMonthChange(This)
@@ -194,9 +194,9 @@ enableMonthChange(This)
enableMonthChange(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlenablemonthchange">external documentation</a>.
--spec enableMonthChange(This, [Option]) -> ok when
+-spec enableMonthChange(This, [Option]) -> 'ok' when
This::wxCalendarCtrl(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableMonthChange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCalendarCtrl),
@@ -207,7 +207,7 @@ enableMonthChange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableHolidayDisplay(This, [])
--spec enableHolidayDisplay(This) -> ok when
+-spec enableHolidayDisplay(This) -> 'ok' when
This::wxCalendarCtrl().
enableHolidayDisplay(This)
@@ -215,9 +215,9 @@ enableHolidayDisplay(This)
enableHolidayDisplay(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlenableholidaydisplay">external documentation</a>.
--spec enableHolidayDisplay(This, [Option]) -> ok when
+-spec enableHolidayDisplay(This, [Option]) -> 'ok' when
This::wxCalendarCtrl(),
- Option :: {display, boolean()}.
+ Option :: {'display', boolean()}.
enableHolidayDisplay(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCalendarCtrl),
@@ -228,7 +228,7 @@ enableHolidayDisplay(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsetheadercolours">external documentation</a>.
--spec setHeaderColours(This, ColFg, ColBg) -> ok when
+-spec setHeaderColours(This, ColFg, ColBg) -> 'ok' when
This::wxCalendarCtrl(), ColFg::wx:wx_colour(), ColBg::wx:wx_colour().
setHeaderColours(#wx_ref{type=ThisT,ref=ThisRef},ColFg,ColBg)
when tuple_size(ColFg) =:= 3; tuple_size(ColFg) =:= 4,tuple_size(ColBg) =:= 3; tuple_size(ColBg) =:= 4 ->
@@ -253,7 +253,7 @@ getHeaderColourBg(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsethighlightcolours">external documentation</a>.
--spec setHighlightColours(This, ColFg, ColBg) -> ok when
+-spec setHighlightColours(This, ColFg, ColBg) -> 'ok' when
This::wxCalendarCtrl(), ColFg::wx:wx_colour(), ColBg::wx:wx_colour().
setHighlightColours(#wx_ref{type=ThisT,ref=ThisRef},ColFg,ColBg)
when tuple_size(ColFg) =:= 3; tuple_size(ColFg) =:= 4,tuple_size(ColBg) =:= 3; tuple_size(ColBg) =:= 4 ->
@@ -278,7 +278,7 @@ getHighlightColourBg(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsetholidaycolours">external documentation</a>.
--spec setHolidayColours(This, ColFg, ColBg) -> ok when
+-spec setHolidayColours(This, ColFg, ColBg) -> 'ok' when
This::wxCalendarCtrl(), ColFg::wx:wx_colour(), ColBg::wx:wx_colour().
setHolidayColours(#wx_ref{type=ThisT,ref=ThisRef},ColFg,ColBg)
when tuple_size(ColFg) =:= 3; tuple_size(ColFg) =:= 4,tuple_size(ColBg) =:= 3; tuple_size(ColBg) =:= 4 ->
@@ -312,7 +312,7 @@ getAttr(#wx_ref{type=ThisT,ref=ThisRef},Day)
<<ThisRef:32/?UI,Day:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsetattr">external documentation</a>.
--spec setAttr(This, Day, Attr) -> ok when
+-spec setAttr(This, Day, Attr) -> 'ok' when
This::wxCalendarCtrl(), Day::integer(), Attr::wxCalendarDateAttr:wxCalendarDateAttr().
setAttr(#wx_ref{type=ThisT,ref=ThisRef},Day,#wx_ref{type=AttrT,ref=AttrRef})
when is_integer(Day) ->
@@ -322,7 +322,7 @@ setAttr(#wx_ref{type=ThisT,ref=ThisRef},Day,#wx_ref{type=AttrT,ref=AttrRef})
<<ThisRef:32/?UI,Day:32/?UI,AttrRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsetholiday">external documentation</a>.
--spec setHoliday(This, Day) -> ok when
+-spec setHoliday(This, Day) -> 'ok' when
This::wxCalendarCtrl(), Day::integer().
setHoliday(#wx_ref{type=ThisT,ref=ThisRef},Day)
when is_integer(Day) ->
@@ -331,7 +331,7 @@ setHoliday(#wx_ref{type=ThisT,ref=ThisRef},Day)
<<ThisRef:32/?UI,Day:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlresetattr">external documentation</a>.
--spec resetAttr(This, Day) -> ok when
+-spec resetAttr(This, Day) -> 'ok' when
This::wxCalendarCtrl(), Day::integer().
resetAttr(#wx_ref{type=ThisT,ref=ThisRef},Day)
when is_integer(Day) ->
@@ -352,7 +352,7 @@ hitTest(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
<<ThisRef:32/?UI,PosX:32/?UI,PosY:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCalendarCtrl()) -> ok.
+-spec destroy(This::wxCalendarCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCalendarCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCalendarDateAttr.erl b/lib/wx/src/gen/wxCalendarDateAttr.erl
index 4fde4ddbda..cb670fd273 100644
--- a/lib/wx/src/gen/wxCalendarDateAttr.erl
+++ b/lib/wx/src/gen/wxCalendarDateAttr.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -67,21 +67,21 @@ new(ColText)
%% <br /> Also:<br />
%% new(ColText, [Option]) -> wxCalendarDateAttr() when<br />
%% ColText::wx:wx_colour(),<br />
-%% Option :: {colBack, wx:wx_colour()}<br />
-%% | {colBorder, wx:wx_colour()}<br />
-%% | {font, wxFont:wxFont()}<br />
-%% | {border, wx:wx_enum()}.<br />
+%% Option :: {'colBack', wx:wx_colour()}<br />
+%% | {'colBorder', wx:wx_colour()}<br />
+%% | {'font', wxFont:wxFont()}<br />
+%% | {'border', wx:wx_enum()}.<br />
%%
%%<br /> Border = ?wxCAL_BORDER_NONE | ?wxCAL_BORDER_SQUARE | ?wxCAL_BORDER_ROUND
-spec new(Border, [Option]) -> wxCalendarDateAttr() when
Border::wx:wx_enum(),
- Option :: {colBorder, wx:wx_colour()};
+ Option :: {'colBorder', wx:wx_colour()};
(ColText, [Option]) -> wxCalendarDateAttr() when
ColText::wx:wx_colour(),
- Option :: {colBack, wx:wx_colour()}
- | {colBorder, wx:wx_colour()}
- | {font, wxFont:wxFont()}
- | {border, wx:wx_enum()}.
+ Option :: {'colBack', wx:wx_colour()}
+ | {'colBorder', wx:wx_colour()}
+ | {'font', wxFont:wxFont()}
+ | {'border', wx:wx_enum()}.
new(Border, Options)
when is_integer(Border),is_list(Options) ->
MOpts = fun({colBorder, ColBorder}, Acc) -> [<<1:32/?UI,(wxe_util:colour_bin(ColBorder)):16/binary,0:32>>|Acc];
@@ -101,7 +101,7 @@ new(ColText, Options)
<<(wxe_util:colour_bin(ColText)):16/binary, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxCalendarDateAttr(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -110,7 +110,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxCalendarDateAttr(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -119,7 +119,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetbordercolour">external documentation</a>.
--spec setBorderColour(This, Col) -> ok when
+-spec setBorderColour(This, Col) -> 'ok' when
This::wxCalendarDateAttr(), Col::wx:wx_colour().
setBorderColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -128,7 +128,7 @@ setBorderColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxCalendarDateAttr(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxCalendarDateAttr),
@@ -138,7 +138,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetborder">external documentation</a>.
%%<br /> Border = ?wxCAL_BORDER_NONE | ?wxCAL_BORDER_SQUARE | ?wxCAL_BORDER_ROUND
--spec setBorder(This, Border) -> ok when
+-spec setBorder(This, Border) -> 'ok' when
This::wxCalendarDateAttr(), Border::wx:wx_enum().
setBorder(#wx_ref{type=ThisT,ref=ThisRef},Border)
when is_integer(Border) ->
@@ -147,7 +147,7 @@ setBorder(#wx_ref{type=ThisT,ref=ThisRef},Border)
<<ThisRef:32/?UI,Border:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetholiday">external documentation</a>.
--spec setHoliday(This, Holiday) -> ok when
+-spec setHoliday(This, Holiday) -> 'ok' when
This::wxCalendarDateAttr(), Holiday::boolean().
setHoliday(#wx_ref{type=ThisT,ref=ThisRef},Holiday)
when is_boolean(Holiday) ->
@@ -245,7 +245,7 @@ getBorder(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCalendarDateAttr()) -> ok.
+-spec destroy(This::wxCalendarDateAttr()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCalendarDateAttr),
wxe_util:destroy(?wxCalendarDateAttr_destroy,Obj),
diff --git a/lib/wx/src/gen/wxCalendarEvent.erl b/lib/wx/src/gen/wxCalendarEvent.erl
index d0573e584f..c4bd8fcf49 100644
--- a/lib/wx/src/gen/wxCalendarEvent.erl
+++ b/lib/wx/src/gen/wxCalendarEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxCaret.erl b/lib/wx/src/gen/wxCaret.erl
index 0e648e4e56..8833a920d5 100644
--- a/lib/wx/src/gen/wxCaret.erl
+++ b/lib/wx/src/gen/wxCaret.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -106,7 +106,7 @@ getWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcarethide">external documentation</a>.
--spec hide(This) -> ok when
+-spec hide(This) -> 'ok' when
This::wxCaret().
hide(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxCaret),
@@ -130,7 +130,7 @@ isVisible(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretmove">external documentation</a>.
--spec move(This, Pt) -> ok when
+-spec move(This, Pt) -> 'ok' when
This::wxCaret(), Pt::{X::integer(), Y::integer()}.
move(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -139,7 +139,7 @@ move(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretmove">external documentation</a>.
--spec move(This, X, Y) -> ok when
+-spec move(This, X, Y) -> 'ok' when
This::wxCaret(), X::integer(), Y::integer().
move(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -148,7 +148,7 @@ move(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretsetblinktime">external documentation</a>.
--spec setBlinkTime(Milliseconds) -> ok when
+-spec setBlinkTime(Milliseconds) -> 'ok' when
Milliseconds::integer().
setBlinkTime(Milliseconds)
when is_integer(Milliseconds) ->
@@ -156,7 +156,7 @@ setBlinkTime(Milliseconds)
<<Milliseconds:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretsetsize">external documentation</a>.
--spec setSize(This, Size) -> ok when
+-spec setSize(This, Size) -> 'ok' when
This::wxCaret(), Size::{W::integer(), H::integer()}.
setSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -165,7 +165,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretsetsize">external documentation</a>.
--spec setSize(This, Width, Height) -> ok when
+-spec setSize(This, Width, Height) -> 'ok' when
This::wxCaret(), Width::integer(), Height::integer().
setSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -174,7 +174,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @equiv show(This, [])
--spec show(This) -> ok when
+-spec show(This) -> 'ok' when
This::wxCaret().
show(This)
@@ -182,9 +182,9 @@ show(This)
show(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretshow">external documentation</a>.
--spec show(This, [Option]) -> ok when
+-spec show(This, [Option]) -> 'ok' when
This::wxCaret(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCaret),
@@ -195,7 +195,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCaret()) -> ok.
+-spec destroy(This::wxCaret()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCaret),
wxe_util:destroy(?wxCaret_destruct,Obj),
diff --git a/lib/wx/src/gen/wxCheckBox.erl b/lib/wx/src/gen/wxCheckBox.erl
index 2cea4d04b4..3276add802 100644
--- a/lib/wx/src/gen/wxCheckBox.erl
+++ b/lib/wx/src/gen/wxCheckBox.erl
@@ -98,10 +98,10 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcheckbox.html#wxcheckboxwxcheckbox">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxCheckBox() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,10 +126,10 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcheckbox.html#wxcheckboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxCheckBox(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxCheckBox),
@@ -186,7 +186,7 @@ isChecked(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcheckbox.html#wxcheckboxsetvalue">external documentation</a>.
--spec setValue(This, State) -> ok when
+-spec setValue(This, State) -> 'ok' when
This::wxCheckBox(), State::boolean().
setValue(#wx_ref{type=ThisT,ref=ThisRef},State)
when is_boolean(State) ->
@@ -196,7 +196,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},State)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcheckbox.html#wxcheckboxset3statevalue">external documentation</a>.
%%<br /> State = ?wxCHK_UNCHECKED | ?wxCHK_CHECKED | ?wxCHK_UNDETERMINED
--spec set3StateValue(This, State) -> ok when
+-spec set3StateValue(This, State) -> 'ok' when
This::wxCheckBox(), State::wx:wx_enum().
set3StateValue(#wx_ref{type=ThisT,ref=ThisRef},State)
when is_integer(State) ->
@@ -205,7 +205,7 @@ set3StateValue(#wx_ref{type=ThisT,ref=ThisRef},State)
<<ThisRef:32/?UI,State:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCheckBox()) -> ok.
+-spec destroy(This::wxCheckBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCheckBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCheckListBox.erl b/lib/wx/src/gen/wxCheckListBox.erl
index f6013e4863..888f29518c 100644
--- a/lib/wx/src/gen/wxCheckListBox.erl
+++ b/lib/wx/src/gen/wxCheckListBox.erl
@@ -105,11 +105,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchecklistbox.html#wxchecklistboxwxchecklistbox">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxCheckListBox() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {choices, [unicode:chardata()]}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'choices', [unicode:chardata()]}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,7 +124,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
<<ParentRef:32/?UI,Id:32/?UI, BinOpt/binary>>).
%% @equiv check(This,Index, [])
--spec check(This, Index) -> ok when
+-spec check(This, Index) -> 'ok' when
This::wxCheckListBox(), Index::integer().
check(This,Index)
@@ -132,9 +132,9 @@ check(This,Index)
check(This,Index, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchecklistbox.html#wxchecklistboxcheck">external documentation</a>.
--spec check(This, Index, [Option]) -> ok when
+-spec check(This, Index, [Option]) -> 'ok' when
This::wxCheckListBox(), Index::integer(),
- Option :: {check, boolean()}.
+ Option :: {'check', boolean()}.
check(#wx_ref{type=ThisT,ref=ThisRef},Index, Options)
when is_integer(Index),is_list(Options) ->
?CLASS(ThisT,wxCheckListBox),
@@ -154,7 +154,7 @@ isChecked(#wx_ref{type=ThisT,ref=ThisRef},Index)
<<ThisRef:32/?UI,Index:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCheckListBox()) -> ok.
+-spec destroy(This::wxCheckListBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCheckListBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxChildFocusEvent.erl b/lib/wx/src/gen/wxChildFocusEvent.erl
index d97c4b3565..8d9718e4c5 100644
--- a/lib/wx/src/gen/wxChildFocusEvent.erl
+++ b/lib/wx/src/gen/wxChildFocusEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxChoice.erl b/lib/wx/src/gen/wxChoice.erl
index 73867d6597..1a90b275d1 100644
--- a/lib/wx/src/gen/wxChoice.erl
+++ b/lib/wx/src/gen/wxChoice.erl
@@ -103,11 +103,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoice.html#wxchoicewxchoice">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxChoice() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {choices, [unicode:chardata()]}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'choices', [unicode:chardata()]}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,8 +132,8 @@ create(This,Parent,Id,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoice.html#wxchoicecreate">external documentation</a>.
-spec create(This, Parent, Id, Pos, Size, Choices, [Option]) -> boolean() when
This::wxChoice(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ThisT,wxChoice),
@@ -148,7 +148,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{P
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,PosX:32/?UI,PosY:32/?UI,SizeW:32/?UI,SizeH:32/?UI,(length(Choices_UCA)):32/?UI, (<< <<(byte_size(UC_Str)):32/?UI, UC_Str/binary>>|| UC_Str <- Choices_UCA>>)/binary, 0:(((8- ((0 + lists:sum([byte_size(S)+4||S<-Choices_UCA])) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoice.html#wxchoicedelete">external documentation</a>.
--spec delete(This, N) -> ok when
+-spec delete(This, N) -> 'ok' when
This::wxChoice(), N::integer().
delete(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -165,7 +165,7 @@ getColumns(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv setColumns(This, [])
--spec setColumns(This) -> ok when
+-spec setColumns(This) -> 'ok' when
This::wxChoice().
setColumns(This)
@@ -173,9 +173,9 @@ setColumns(This)
setColumns(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoice.html#wxchoicesetcolumns">external documentation</a>.
--spec setColumns(This, [Option]) -> ok when
+-spec setColumns(This, [Option]) -> 'ok' when
This::wxChoice(),
- Option :: {n, integer()}.
+ Option :: {'n', integer()}.
setColumns(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxChoice),
@@ -186,7 +186,7 @@ setColumns(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxChoice()) -> ok.
+-spec destroy(This::wxChoice()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxChoice),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxChoicebook.erl b/lib/wx/src/gen/wxChoicebook.erl
index 37a44a813a..34b62ff75b 100644
--- a/lib/wx/src/gen/wxChoicebook.erl
+++ b/lib/wx/src/gen/wxChoicebook.erl
@@ -101,9 +101,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookwxchoicebook">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxChoicebook() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,8 +126,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxChoicebook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxChoicebook),
@@ -141,7 +141,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxChoicebook().
advanceSelection(This)
@@ -149,9 +149,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxChoicebook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxChoicebook),
@@ -162,7 +162,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxChoicebook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxChoicebook),
@@ -181,9 +181,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxChoicebook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxChoicebook),
@@ -302,8 +302,8 @@ insertPage(This,N,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookinsertpage">external documentation</a>.
-spec insertPage(This, N, Page, Text, [Option]) -> boolean() when
This::wxChoicebook(), N::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(N),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxChoicebook),
@@ -317,7 +317,7 @@ insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Tex
<<ThisRef:32/?UI,N:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxChoicebook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxChoicebook),
@@ -326,7 +326,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxChoicebook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -372,7 +372,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxChoicebook()) -> ok.
+-spec destroy(This::wxChoicebook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxChoicebook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxClientDC.erl b/lib/wx/src/gen/wxClientDC.erl
index 35ad2cc16b..4965536690 100644
--- a/lib/wx/src/gen/wxClientDC.erl
+++ b/lib/wx/src/gen/wxClientDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -80,7 +80,7 @@ new(#wx_ref{type=WinT,ref=WinRef}) ->
<<WinRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxClientDC()) -> ok.
+-spec destroy(This::wxClientDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxClientDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxClipboard.erl b/lib/wx/src/gen/wxClipboard.erl
index 71bc43a791..747e4f1610 100644
--- a/lib/wx/src/gen/wxClipboard.erl
+++ b/lib/wx/src/gen/wxClipboard.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ addData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DataT,ref=DataRef}) ->
<<ThisRef:32/?UI,DataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxclipboard.html#wxclipboardclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxClipboard().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxClipboard),
@@ -60,7 +60,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxclipboard.html#wxclipboardclose">external documentation</a>.
--spec close(This) -> ok when
+-spec close(This) -> 'ok' when
This::wxClipboard().
close(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxClipboard),
@@ -110,7 +110,7 @@ setData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DataT,ref=DataRef}) ->
<<ThisRef:32/?UI,DataRef:32/?UI>>).
%% @equiv usePrimarySelection(This, [])
--spec usePrimarySelection(This) -> ok when
+-spec usePrimarySelection(This) -> 'ok' when
This::wxClipboard().
usePrimarySelection(This)
@@ -118,9 +118,9 @@ usePrimarySelection(This)
usePrimarySelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxclipboard.html#wxclipboarduseprimaryselection">external documentation</a>.
--spec usePrimarySelection(This, [Option]) -> ok when
+-spec usePrimarySelection(This, [Option]) -> 'ok' when
This::wxClipboard(),
- Option :: {primary, boolean()}.
+ Option :: {'primary', boolean()}.
usePrimarySelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxClipboard),
@@ -147,7 +147,7 @@ get() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxClipboard()) -> ok.
+-spec destroy(This::wxClipboard()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxClipboard),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxClipboardTextEvent.erl b/lib/wx/src/gen/wxClipboardTextEvent.erl
index 659419b73f..afcc9932d1 100644
--- a/lib/wx/src/gen/wxClipboardTextEvent.erl
+++ b/lib/wx/src/gen/wxClipboardTextEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxCloseEvent.erl b/lib/wx/src/gen/wxCloseEvent.erl
index 2b2a927fc1..6a683c6e8c 100644
--- a/lib/wx/src/gen/wxCloseEvent.erl
+++ b/lib/wx/src/gen/wxCloseEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -61,7 +61,7 @@ getLoggingOff(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcloseevent.html#wxcloseeventsetcanveto">external documentation</a>.
--spec setCanVeto(This, CanVeto) -> ok when
+-spec setCanVeto(This, CanVeto) -> 'ok' when
This::wxCloseEvent(), CanVeto::boolean().
setCanVeto(#wx_ref{type=ThisT,ref=ThisRef},CanVeto)
when is_boolean(CanVeto) ->
@@ -70,7 +70,7 @@ setCanVeto(#wx_ref{type=ThisT,ref=ThisRef},CanVeto)
<<ThisRef:32/?UI,(wxe_util:from_bool(CanVeto)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcloseevent.html#wxcloseeventsetloggingoff">external documentation</a>.
--spec setLoggingOff(This, LogOff) -> ok when
+-spec setLoggingOff(This, LogOff) -> 'ok' when
This::wxCloseEvent(), LogOff::boolean().
setLoggingOff(#wx_ref{type=ThisT,ref=ThisRef},LogOff)
when is_boolean(LogOff) ->
@@ -79,7 +79,7 @@ setLoggingOff(#wx_ref{type=ThisT,ref=ThisRef},LogOff)
<<ThisRef:32/?UI,(wxe_util:from_bool(LogOff)):32/?UI>>).
%% @equiv veto(This, [])
--spec veto(This) -> ok when
+-spec veto(This) -> 'ok' when
This::wxCloseEvent().
veto(This)
@@ -87,9 +87,9 @@ veto(This)
veto(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcloseevent.html#wxcloseeventveto">external documentation</a>.
--spec veto(This, [Option]) -> ok when
+-spec veto(This, [Option]) -> 'ok' when
This::wxCloseEvent(),
- Option :: {veto, boolean()}.
+ Option :: {'veto', boolean()}.
veto(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCloseEvent),
diff --git a/lib/wx/src/gen/wxColourData.erl b/lib/wx/src/gen/wxColourData.erl
index 16569cd490..92586688f6 100644
--- a/lib/wx/src/gen/wxColourData.erl
+++ b/lib/wx/src/gen/wxColourData.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -76,7 +76,7 @@ getCustomColour(#wx_ref{type=ThisT,ref=ThisRef},I)
<<ThisRef:32/?UI,I:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdata.html#wxcolourdatasetchoosefull">external documentation</a>.
--spec setChooseFull(This, Flag) -> ok when
+-spec setChooseFull(This, Flag) -> 'ok' when
This::wxColourData(), Flag::boolean().
setChooseFull(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -85,7 +85,7 @@ setChooseFull(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdata.html#wxcolourdatasetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxColourData(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -94,7 +94,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdata.html#wxcolourdatasetcustomcolour">external documentation</a>.
--spec setCustomColour(This, I, Colour) -> ok when
+-spec setCustomColour(This, I, Colour) -> 'ok' when
This::wxColourData(), I::integer(), Colour::wx:wx_colour().
setCustomColour(#wx_ref{type=ThisT,ref=ThisRef},I,Colour)
when is_integer(I),tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -103,7 +103,7 @@ setCustomColour(#wx_ref{type=ThisT,ref=ThisRef},I,Colour)
<<ThisRef:32/?UI,I:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxColourData()) -> ok.
+-spec destroy(This::wxColourData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxColourData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxColourDialog.erl b/lib/wx/src/gen/wxColourDialog.erl
index 15eee30727..9c97434d9a 100644
--- a/lib/wx/src/gen/wxColourDialog.erl
+++ b/lib/wx/src/gen/wxColourDialog.erl
@@ -105,7 +105,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdialog.html#wxcolourdialogwxcolourdialog">external documentation</a>.
-spec new(Parent, [Option]) -> wxColourDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {data, wxColourData:wxColourData()}.
+ Option :: {'data', wxColourData:wxColourData()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,7 +126,7 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdialog.html#wxcolourdialogcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxColourDialog(), Parent::wxWindow:wxWindow(),
- Option :: {data, wxColourData:wxColourData()}.
+ Option :: {'data', wxColourData:wxColourData()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxColourDialog),
@@ -146,7 +146,7 @@ getColourData(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxColourDialog()) -> ok.
+-spec destroy(This::wxColourDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxColourDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxColourPickerCtrl.erl b/lib/wx/src/gen/wxColourPickerCtrl.erl
index 486441c005..9c987b4dde 100644
--- a/lib/wx/src/gen/wxColourPickerCtrl.erl
+++ b/lib/wx/src/gen/wxColourPickerCtrl.erl
@@ -102,11 +102,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourpickerctrl.html#wxcolourpickerctrlwxcolourpickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxColourPickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {col, wx:wx_colour()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'col', wx:wx_colour()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -131,11 +131,11 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourpickerctrl.html#wxcolourpickerctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxColourPickerCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {col, wx:wx_colour()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'col', wx:wx_colour()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxColourPickerCtrl),
@@ -160,12 +160,12 @@ getColour(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourpickerctrl.html#wxcolourpickerctrlsetcolour">external documentation</a>.
%% <br /> Also:<br />
-%% setColour(This, Col) -> ok when<br />
+%% setColour(This, Col) -> 'ok' when<br />
%% This::wxColourPickerCtrl(), Col::wx:wx_colour().<br />
%%
-spec setColour(This, Text) -> boolean() when
This::wxColourPickerCtrl(), Text::unicode:chardata();
- (This, Col) -> ok when
+ (This, Col) -> 'ok' when
This::wxColourPickerCtrl(), Col::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -180,7 +180,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxColourPickerCtrl()) -> ok.
+-spec destroy(This::wxColourPickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxColourPickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxColourPickerEvent.erl b/lib/wx/src/gen/wxColourPickerEvent.erl
index 933dd1ffae..a4e09fb066 100644
--- a/lib/wx/src/gen/wxColourPickerEvent.erl
+++ b/lib/wx/src/gen/wxColourPickerEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxComboBox.erl b/lib/wx/src/gen/wxComboBox.erl
index 37d6e71605..bbdf768eba 100644
--- a/lib/wx/src/gen/wxComboBox.erl
+++ b/lib/wx/src/gen/wxComboBox.erl
@@ -105,12 +105,12 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxwxcombobox">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxComboBox() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {choices, [unicode:chardata()]}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'choices', [unicode:chardata()]}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -136,8 +136,8 @@ create(This,Parent,Id,Value,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Value, Pos, Size, Choices, [Option]) -> boolean() when
This::wxComboBox(), Parent::wxWindow:wxWindow(), Id::integer(), Value::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Value,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_list(Value),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ThisT,wxComboBox),
@@ -193,7 +193,7 @@ canUndo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxcopy">external documentation</a>.
--spec copy(This) -> ok when
+-spec copy(This) -> 'ok' when
This::wxComboBox().
copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -201,7 +201,7 @@ copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxcut">external documentation</a>.
--spec cut(This) -> ok when
+-spec cut(This) -> 'ok' when
This::wxComboBox().
cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -233,7 +233,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxpaste">external documentation</a>.
--spec paste(This) -> ok when
+-spec paste(This) -> 'ok' when
This::wxComboBox().
paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -241,7 +241,7 @@ paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxredo">external documentation</a>.
--spec redo(This) -> ok when
+-spec redo(This) -> 'ok' when
This::wxComboBox().
redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -249,7 +249,7 @@ redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxreplace">external documentation</a>.
--spec replace(This, From, To, Value) -> ok when
+-spec replace(This, From, To, Value) -> 'ok' when
This::wxComboBox(), From::integer(), To::integer(), Value::unicode:chardata().
replace(#wx_ref{type=ThisT,ref=ThisRef},From,To,Value)
when is_integer(From),is_integer(To),is_list(Value) ->
@@ -259,7 +259,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},From,To,Value)
<<ThisRef:32/?UI,From:32/?UI,To:32/?UI,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((0+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxremove">external documentation</a>.
--spec remove(This, From, To) -> ok when
+-spec remove(This, From, To) -> 'ok' when
This::wxComboBox(), From::integer(), To::integer().
remove(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -268,7 +268,7 @@ remove(#wx_ref{type=ThisT,ref=ThisRef},From,To)
<<ThisRef:32/?UI,From:32/?UI,To:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetinsertionpoint">external documentation</a>.
--spec setInsertionPoint(This, Pos) -> ok when
+-spec setInsertionPoint(This, Pos) -> 'ok' when
This::wxComboBox(), Pos::integer().
setInsertionPoint(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -277,7 +277,7 @@ setInsertionPoint(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetinsertionpointend">external documentation</a>.
--spec setInsertionPointEnd(This) -> ok when
+-spec setInsertionPointEnd(This) -> 'ok' when
This::wxComboBox().
setInsertionPointEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -285,7 +285,7 @@ setInsertionPointEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetselection">external documentation</a>.
--spec setSelection(This, N) -> ok when
+-spec setSelection(This, N) -> 'ok' when
This::wxComboBox(), N::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -294,7 +294,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetselection">external documentation</a>.
--spec setSelection(This, From, To) -> ok when
+-spec setSelection(This, From, To) -> 'ok' when
This::wxComboBox(), From::integer(), To::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -303,7 +303,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},From,To)
<<ThisRef:32/?UI,From:32/?UI,To:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetvalue">external documentation</a>.
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxComboBox(), Value::unicode:chardata().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_list(Value) ->
@@ -313,7 +313,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
<<ThisRef:32/?UI,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((0+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxundo">external documentation</a>.
--spec undo(This) -> ok when
+-spec undo(This) -> 'ok' when
This::wxComboBox().
undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -321,7 +321,7 @@ undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxComboBox()) -> ok.
+-spec destroy(This::wxComboBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxComboBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCommandEvent.erl b/lib/wx/src/gen/wxCommandEvent.erl
index acd0d9e2d9..781482aebb 100644
--- a/lib/wx/src/gen/wxCommandEvent.erl
+++ b/lib/wx/src/gen/wxCommandEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -102,7 +102,7 @@ isSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcommandevent.html#wxcommandeventsetint">external documentation</a>.
--spec setInt(This, I) -> ok when
+-spec setInt(This, I) -> 'ok' when
This::wxCommandEvent(), I::integer().
setInt(#wx_ref{type=ThisT,ref=ThisRef},I)
when is_integer(I) ->
@@ -111,7 +111,7 @@ setInt(#wx_ref{type=ThisT,ref=ThisRef},I)
<<ThisRef:32/?UI,I:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcommandevent.html#wxcommandeventsetstring">external documentation</a>.
--spec setString(This, S) -> ok when
+-spec setString(This, S) -> 'ok' when
This::wxCommandEvent(), S::unicode:chardata().
setString(#wx_ref{type=ThisT,ref=ThisRef},S)
when is_list(S) ->
diff --git a/lib/wx/src/gen/wxContextMenuEvent.erl b/lib/wx/src/gen/wxContextMenuEvent.erl
index 4e0729922b..f1c953badb 100644
--- a/lib/wx/src/gen/wxContextMenuEvent.erl
+++ b/lib/wx/src/gen/wxContextMenuEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -57,7 +57,7 @@ getPosition(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontextmenuevent.html#wxcontextmenueventsetposition">external documentation</a>.
--spec setPosition(This, Pos) -> ok when
+-spec setPosition(This, Pos) -> 'ok' when
This::wxContextMenuEvent(), Pos::{X::integer(), Y::integer()}.
setPosition(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
when is_integer(PosX),is_integer(PosY) ->
diff --git a/lib/wx/src/gen/wxControl.erl b/lib/wx/src/gen/wxControl.erl
index f84ec34b02..a84f88639b 100644
--- a/lib/wx/src/gen/wxControl.erl
+++ b/lib/wx/src/gen/wxControl.erl
@@ -86,7 +86,7 @@ getLabel(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrol.html#wxcontrolsetlabel">external documentation</a>.
--spec setLabel(This, Label) -> ok when
+-spec setLabel(This, Label) -> 'ok' when
This::wxControl(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
when is_list(Label) ->
diff --git a/lib/wx/src/gen/wxControlWithItems.erl b/lib/wx/src/gen/wxControlWithItems.erl
index d52c7917a2..c4d116d9e7 100644
--- a/lib/wx/src/gen/wxControlWithItems.erl
+++ b/lib/wx/src/gen/wxControlWithItems.erl
@@ -104,7 +104,7 @@ append(#wx_ref{type=ThisT,ref=ThisRef},Item,ClientData)
<<ThisRef:32/?UI,(byte_size(Item_UC)):32/?UI,(Item_UC)/binary, 0:(((8- ((0+byte_size(Item_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsappend">external documentation</a>.
--spec appendStrings(This, Strings) -> ok when
+-spec appendStrings(This, Strings) -> 'ok' when
This::wxControlWithItems(), Strings::[unicode:chardata()].
appendStrings(#wx_ref{type=ThisT,ref=ThisRef},Strings)
when is_list(Strings) ->
@@ -115,7 +115,7 @@ appendStrings(#wx_ref{type=ThisT,ref=ThisRef},Strings)
<<ThisRef:32/?UI,(length(Strings_UCA)):32/?UI, (<< <<(byte_size(UC_Str)):32/?UI, UC_Str/binary>>|| UC_Str <- Strings_UCA>>)/binary, 0:(((8- ((0 + lists:sum([byte_size(S)+4||S<-Strings_UCA])) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxControlWithItems().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxControlWithItems),
@@ -123,7 +123,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsdelete">external documentation</a>.
--spec delete(This, N) -> ok when
+-spec delete(This, N) -> 'ok' when
This::wxControlWithItems(), N::integer().
delete(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -142,7 +142,7 @@ findString(This,S)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsfindstring">external documentation</a>.
-spec findString(This, S, [Option]) -> integer() when
This::wxControlWithItems(), S::unicode:chardata(),
- Option :: {bCase, boolean()}.
+ Option :: {'bCase', boolean()}.
findString(#wx_ref{type=ThisT,ref=ThisRef},S, Options)
when is_list(S),is_list(Options) ->
?CLASS(ThisT,wxControlWithItems),
@@ -163,7 +163,7 @@ getClientData(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemssetclientobject">external documentation</a>.
--spec setClientData(This, N, ClientData) -> ok when
+-spec setClientData(This, N, ClientData) -> 'ok' when
This::wxControlWithItems(), N::integer(), ClientData::term().
setClientData(#wx_ref{type=ThisT,ref=ThisRef},N,ClientData)
when is_integer(N) ->
@@ -235,7 +235,7 @@ isEmpty(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsselect">external documentation</a>.
--spec select(This, N) -> ok when
+-spec select(This, N) -> 'ok' when
This::wxControlWithItems(), N::integer().
select(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -244,7 +244,7 @@ select(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemssetselection">external documentation</a>.
--spec setSelection(This, N) -> ok when
+-spec setSelection(This, N) -> 'ok' when
This::wxControlWithItems(), N::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -253,7 +253,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemssetstring">external documentation</a>.
--spec setString(This, N, S) -> ok when
+-spec setString(This, N, S) -> 'ok' when
This::wxControlWithItems(), N::integer(), S::unicode:chardata().
setString(#wx_ref{type=ThisT,ref=ThisRef},N,S)
when is_integer(N),is_list(S) ->
diff --git a/lib/wx/src/gen/wxCursor.erl b/lib/wx/src/gen/wxCursor.erl
index ee5fec7d4a..689935576a 100644
--- a/lib/wx/src/gen/wxCursor.erl
+++ b/lib/wx/src/gen/wxCursor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -78,8 +78,8 @@ new(Bits,Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcursor.html#wxcursorwxcursor">external documentation</a>.
-spec new(Bits, Width, Height, [Option]) -> wxCursor() when
Bits::binary(), Width::integer(), Height::integer(),
- Option :: {hotSpotX, integer()}
- | {hotSpotY, integer()}.
+ Option :: {'hotSpotX', integer()}
+ | {'hotSpotY', integer()}.
new(Bits,Width,Height, Options)
when is_binary(Bits),is_integer(Width),is_integer(Height),is_list(Options) ->
wxe_util:send_bin(Bits),
@@ -99,7 +99,7 @@ ok(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCursor()) -> ok.
+-spec destroy(This::wxCursor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCursor),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDC.erl b/lib/wx/src/gen/wxDC.erl
index dad4126493..ad7a4251ec 100644
--- a/lib/wx/src/gen/wxDC.erl
+++ b/lib/wx/src/gen/wxDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -69,9 +69,9 @@ blit(This,DestPt={DestPtX,DestPtY},Sz={SzW,SzH},Source,SrcPt={SrcPtX,SrcPtY})
%%<br /> Rop = integer
-spec blit(This, DestPt, Sz, Source, SrcPt, [Option]) -> boolean() when
This::wxDC(), DestPt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}, Source::wxDC(), SrcPt::{X::integer(), Y::integer()},
- Option :: {rop, wx:wx_enum()}
- | {useMask, boolean()}
- | {srcPtMask, {X::integer(), Y::integer()}}.
+ Option :: {'rop', wx:wx_enum()}
+ | {'useMask', boolean()}
+ | {'srcPtMask', {X::integer(), Y::integer()}}.
blit(#wx_ref{type=ThisT,ref=ThisRef},{DestPtX,DestPtY},{SzW,SzH},#wx_ref{type=SourceT,ref=SourceRef},{SrcPtX,SrcPtY}, Options)
when is_integer(DestPtX),is_integer(DestPtY),is_integer(SzW),is_integer(SzH),is_integer(SrcPtX),is_integer(SrcPtY),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -85,7 +85,7 @@ blit(#wx_ref{type=ThisT,ref=ThisRef},{DestPtX,DestPtY},{SzW,SzH},#wx_ref{type=So
<<ThisRef:32/?UI,DestPtX:32/?UI,DestPtY:32/?UI,SzW:32/?UI,SzH:32/?UI,SourceRef:32/?UI,SrcPtX:32/?UI,SrcPtY:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdccalcboundingbox">external documentation</a>.
--spec calcBoundingBox(This, X, Y) -> ok when
+-spec calcBoundingBox(This, X, Y) -> 'ok' when
This::wxDC(), X::integer(), Y::integer().
calcBoundingBox(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -94,7 +94,7 @@ calcBoundingBox(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxDC().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -102,7 +102,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdccomputescaleandorigin">external documentation</a>.
--spec computeScaleAndOrigin(This) -> ok when
+-spec computeScaleAndOrigin(This) -> 'ok' when
This::wxDC().
computeScaleAndOrigin(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -110,7 +110,7 @@ computeScaleAndOrigin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdccrosshair">external documentation</a>.
--spec crossHair(This, Pt) -> ok when
+-spec crossHair(This, Pt) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}.
crossHair(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -119,7 +119,7 @@ crossHair(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdestroyclippingregion">external documentation</a>.
--spec destroyClippingRegion(This) -> ok when
+-spec destroyClippingRegion(This) -> 'ok' when
This::wxDC().
destroyClippingRegion(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -163,7 +163,7 @@ deviceToLogicalYRel(#wx_ref{type=ThisT,ref=ThisRef},Y)
<<ThisRef:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawarc">external documentation</a>.
--spec drawArc(This, Pt1, Pt2, Centre) -> ok when
+-spec drawArc(This, Pt1, Pt2, Centre) -> 'ok' when
This::wxDC(), Pt1::{X::integer(), Y::integer()}, Pt2::{X::integer(), Y::integer()}, Centre::{X::integer(), Y::integer()}.
drawArc(#wx_ref{type=ThisT,ref=ThisRef},{Pt1X,Pt1Y},{Pt2X,Pt2Y},{CentreX,CentreY})
when is_integer(Pt1X),is_integer(Pt1Y),is_integer(Pt2X),is_integer(Pt2Y),is_integer(CentreX),is_integer(CentreY) ->
@@ -172,7 +172,7 @@ drawArc(#wx_ref{type=ThisT,ref=ThisRef},{Pt1X,Pt1Y},{Pt2X,Pt2Y},{CentreX,CentreY
<<ThisRef:32/?UI,Pt1X:32/?UI,Pt1Y:32/?UI,Pt2X:32/?UI,Pt2Y:32/?UI,CentreX:32/?UI,CentreY:32/?UI>>).
%% @equiv drawBitmap(This,Bmp,Pt, [])
--spec drawBitmap(This, Bmp, Pt) -> ok when
+-spec drawBitmap(This, Bmp, Pt) -> 'ok' when
This::wxDC(), Bmp::wxBitmap:wxBitmap(), Pt::{X::integer(), Y::integer()}.
drawBitmap(This,Bmp,Pt={PtX,PtY})
@@ -180,9 +180,9 @@ drawBitmap(This,Bmp,Pt={PtX,PtY})
drawBitmap(This,Bmp,Pt, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawbitmap">external documentation</a>.
--spec drawBitmap(This, Bmp, Pt, [Option]) -> ok when
+-spec drawBitmap(This, Bmp, Pt, [Option]) -> 'ok' when
This::wxDC(), Bmp::wxBitmap:wxBitmap(), Pt::{X::integer(), Y::integer()},
- Option :: {useMask, boolean()}.
+ Option :: {'useMask', boolean()}.
drawBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},{PtX,PtY}, Options)
when is_integer(PtX),is_integer(PtY),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -194,7 +194,7 @@ drawBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},{PtX,Pt
<<ThisRef:32/?UI,BmpRef:32/?UI,PtX:32/?UI,PtY:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawcheckmark">external documentation</a>.
--spec drawCheckMark(This, Rect) -> ok when
+-spec drawCheckMark(This, Rect) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
drawCheckMark(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -203,7 +203,7 @@ drawCheckMark(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawcircle">external documentation</a>.
--spec drawCircle(This, Pt, Radius) -> ok when
+-spec drawCircle(This, Pt, Radius) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Radius::integer().
drawCircle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},Radius)
when is_integer(PtX),is_integer(PtY),is_integer(Radius) ->
@@ -212,7 +212,7 @@ drawCircle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},Radius)
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,Radius:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawellipse">external documentation</a>.
--spec drawEllipse(This, Rect) -> ok when
+-spec drawEllipse(This, Rect) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -221,7 +221,7 @@ drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawellipse">external documentation</a>.
--spec drawEllipse(This, Pt, Sz) -> ok when
+-spec drawEllipse(This, Pt, Sz) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}.
drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH) ->
@@ -230,7 +230,7 @@ drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawellipticarc">external documentation</a>.
--spec drawEllipticArc(This, Pt, Sz, Sa, Ea) -> ok when
+-spec drawEllipticArc(This, Pt, Sz, Sa, Ea) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}, Sa::number(), Ea::number().
drawEllipticArc(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH},Sa,Ea)
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH),is_number(Sa),is_number(Ea) ->
@@ -239,7 +239,7 @@ drawEllipticArc(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH},Sa,Ea)
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI,0:32,Sa:64/?F,Ea:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawicon">external documentation</a>.
--spec drawIcon(This, Icon, Pt) -> ok when
+-spec drawIcon(This, Icon, Pt) -> 'ok' when
This::wxDC(), Icon::wxIcon:wxIcon(), Pt::{X::integer(), Y::integer()}.
drawIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -249,7 +249,7 @@ drawIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef},{PtX,Pt
<<ThisRef:32/?UI,IconRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @equiv drawLabel(This,Text,Rect, [])
--spec drawLabel(This, Text, Rect) -> ok when
+-spec drawLabel(This, Text, Rect) -> 'ok' when
This::wxDC(), Text::unicode:chardata(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
drawLabel(This,Text,Rect={RectX,RectY,RectW,RectH})
@@ -257,10 +257,10 @@ drawLabel(This,Text,Rect={RectX,RectY,RectW,RectH})
drawLabel(This,Text,Rect, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawlabel">external documentation</a>.
--spec drawLabel(This, Text, Rect, [Option]) -> ok when
+-spec drawLabel(This, Text, Rect, [Option]) -> 'ok' when
This::wxDC(), Text::unicode:chardata(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()},
- Option :: {alignment, integer()}
- | {indexAccel, integer()}.
+ Option :: {'alignment', integer()}
+ | {'indexAccel', integer()}.
drawLabel(#wx_ref{type=ThisT,ref=ThisRef},Text,{RectX,RectY,RectW,RectH}, Options)
when is_list(Text),is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -273,7 +273,7 @@ drawLabel(#wx_ref{type=ThisT,ref=ThisRef},Text,{RectX,RectY,RectW,RectH}, Option
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawline">external documentation</a>.
--spec drawLine(This, Pt1, Pt2) -> ok when
+-spec drawLine(This, Pt1, Pt2) -> 'ok' when
This::wxDC(), Pt1::{X::integer(), Y::integer()}, Pt2::{X::integer(), Y::integer()}.
drawLine(#wx_ref{type=ThisT,ref=ThisRef},{Pt1X,Pt1Y},{Pt2X,Pt2Y})
when is_integer(Pt1X),is_integer(Pt1Y),is_integer(Pt2X),is_integer(Pt2Y) ->
@@ -282,7 +282,7 @@ drawLine(#wx_ref{type=ThisT,ref=ThisRef},{Pt1X,Pt1Y},{Pt2X,Pt2Y})
<<ThisRef:32/?UI,Pt1X:32/?UI,Pt1Y:32/?UI,Pt2X:32/?UI,Pt2Y:32/?UI>>).
%% @equiv drawLines(This,Points, [])
--spec drawLines(This, Points) -> ok when
+-spec drawLines(This, Points) -> 'ok' when
This::wxDC(), Points::[{X::integer(), Y::integer()}].
drawLines(This,Points)
@@ -290,10 +290,10 @@ drawLines(This,Points)
drawLines(This,Points, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawlines">external documentation</a>.
--spec drawLines(This, Points, [Option]) -> ok when
+-spec drawLines(This, Points, [Option]) -> 'ok' when
This::wxDC(), Points::[{X::integer(), Y::integer()}],
- Option :: {xoffset, integer()}
- | {yoffset, integer()}.
+ Option :: {'xoffset', integer()}
+ | {'yoffset', integer()}.
drawLines(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
when is_list(Points),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -306,7 +306,7 @@ drawLines(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
(<< <<X:32/?I,Y:32/?I>> || {X,Y} <- Points>>)/binary, BinOpt/binary>>).
%% @equiv drawPolygon(This,Points, [])
--spec drawPolygon(This, Points) -> ok when
+-spec drawPolygon(This, Points) -> 'ok' when
This::wxDC(), Points::[{X::integer(), Y::integer()}].
drawPolygon(This,Points)
@@ -315,11 +315,11 @@ drawPolygon(This,Points)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawpolygon">external documentation</a>.
%%<br /> FillStyle = integer
--spec drawPolygon(This, Points, [Option]) -> ok when
+-spec drawPolygon(This, Points, [Option]) -> 'ok' when
This::wxDC(), Points::[{X::integer(), Y::integer()}],
- Option :: {xoffset, integer()}
- | {yoffset, integer()}
- | {fillStyle, wx:wx_enum()}.
+ Option :: {'xoffset', integer()}
+ | {'yoffset', integer()}
+ | {'fillStyle', wx:wx_enum()}.
drawPolygon(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
when is_list(Points),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -333,7 +333,7 @@ drawPolygon(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
(<< <<X:32/?I,Y:32/?I>> || {X,Y} <- Points>>)/binary, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawpoint">external documentation</a>.
--spec drawPoint(This, Pt) -> ok when
+-spec drawPoint(This, Pt) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}.
drawPoint(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -342,7 +342,7 @@ drawPoint(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawrectangle">external documentation</a>.
--spec drawRectangle(This, Rect) -> ok when
+-spec drawRectangle(This, Rect) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -351,7 +351,7 @@ drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawrectangle">external documentation</a>.
--spec drawRectangle(This, Pt, Sz) -> ok when
+-spec drawRectangle(This, Pt, Sz) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}.
drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH) ->
@@ -360,7 +360,7 @@ drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawrotatedtext">external documentation</a>.
--spec drawRotatedText(This, Text, Pt, Angle) -> ok when
+-spec drawRotatedText(This, Text, Pt, Angle) -> 'ok' when
This::wxDC(), Text::unicode:chardata(), Pt::{X::integer(), Y::integer()}, Angle::number().
drawRotatedText(#wx_ref{type=ThisT,ref=ThisRef},Text,{PtX,PtY},Angle)
when is_list(Text),is_integer(PtX),is_integer(PtY),is_number(Angle) ->
@@ -370,7 +370,7 @@ drawRotatedText(#wx_ref{type=ThisT,ref=ThisRef},Text,{PtX,PtY},Angle)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8,PtX:32/?UI,PtY:32/?UI,Angle:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawroundedrectangle">external documentation</a>.
--spec drawRoundedRectangle(This, R, Radius) -> ok when
+-spec drawRoundedRectangle(This, R, Radius) -> 'ok' when
This::wxDC(), R::{X::integer(), Y::integer(), W::integer(), H::integer()}, Radius::number().
drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},{RX,RY,RW,RH},Radius)
when is_integer(RX),is_integer(RY),is_integer(RW),is_integer(RH),is_number(Radius) ->
@@ -379,7 +379,7 @@ drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},{RX,RY,RW,RH},Radius)
<<ThisRef:32/?UI,RX:32/?UI,RY:32/?UI,RW:32/?UI,RH:32/?UI,0:32,Radius:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawroundedrectangle">external documentation</a>.
--spec drawRoundedRectangle(This, Pt, Sz, Radius) -> ok when
+-spec drawRoundedRectangle(This, Pt, Sz, Radius) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}, Radius::number().
drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH},Radius)
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH),is_number(Radius) ->
@@ -388,7 +388,7 @@ drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH},Radius)
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI,0:32,Radius:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawtext">external documentation</a>.
--spec drawText(This, Text, Pt) -> ok when
+-spec drawText(This, Text, Pt) -> 'ok' when
This::wxDC(), Text::unicode:chardata(), Pt::{X::integer(), Y::integer()}.
drawText(#wx_ref{type=ThisT,ref=ThisRef},Text,{PtX,PtY})
when is_list(Text),is_integer(PtX),is_integer(PtY) ->
@@ -398,7 +398,7 @@ drawText(#wx_ref{type=ThisT,ref=ThisRef},Text,{PtX,PtY})
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcenddoc">external documentation</a>.
--spec endDoc(This) -> ok when
+-spec endDoc(This) -> 'ok' when
This::wxDC().
endDoc(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -406,7 +406,7 @@ endDoc(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcendpage">external documentation</a>.
--spec endPage(This) -> ok when
+-spec endPage(This) -> 'ok' when
This::wxDC().
endPage(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -425,7 +425,7 @@ floodFill(This,Pt={PtX,PtY},Col)
%%<br /> Style = integer
-spec floodFill(This, Pt, Col, [Option]) -> boolean() when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Col::wx:wx_colour(),
- Option :: {style, wx:wx_enum()}.
+ Option :: {'style', wx:wx_enum()}.
floodFill(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},Col, Options)
when is_integer(PtX),is_integer(PtY),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4,is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -530,7 +530,7 @@ getMultiLineTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcgetmultilinetextextent">external documentation</a>.
-spec getMultiLineTextExtent(This, String, [Option]) -> {Width::integer(), Height::integer(), HeightLine::integer()} when
This::wxDC(), String::unicode:chardata(),
- Option :: {font, wxFont:wxFont()}.
+ Option :: {'font', wxFont:wxFont()}.
getMultiLineTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String, Options)
when is_list(String),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -616,7 +616,7 @@ getTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String)
-spec getTextExtent(This, String, [Option]) -> Result when
Result :: {X::integer(), Y::integer(), Descent::integer(), ExternalLeading::integer()},
This::wxDC(), String::unicode:chardata(),
- Option :: {theFont, wxFont:wxFont()}.
+ Option :: {'theFont', wxFont:wxFont()}.
getTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String, Options)
when is_list(String),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -644,7 +644,7 @@ getUserScale(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcgradientfillconcentric">external documentation</a>.
--spec gradientFillConcentric(This, Rect, InitialColour, DestColour) -> ok when
+-spec gradientFillConcentric(This, Rect, InitialColour, DestColour) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, InitialColour::wx:wx_colour(), DestColour::wx:wx_colour().
gradientFillConcentric(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},InitialColour,DestColour)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),tuple_size(InitialColour) =:= 3; tuple_size(InitialColour) =:= 4,tuple_size(DestColour) =:= 3; tuple_size(DestColour) =:= 4 ->
@@ -653,7 +653,7 @@ gradientFillConcentric(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI,(wxe_util:colour_bin(InitialColour)):16/binary,(wxe_util:colour_bin(DestColour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcgradientfillconcentric">external documentation</a>.
--spec gradientFillConcentric(This, Rect, InitialColour, DestColour, CircleCenter) -> ok when
+-spec gradientFillConcentric(This, Rect, InitialColour, DestColour, CircleCenter) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, InitialColour::wx:wx_colour(), DestColour::wx:wx_colour(), CircleCenter::{X::integer(), Y::integer()}.
gradientFillConcentric(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},InitialColour,DestColour,{CircleCenterX,CircleCenterY})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),tuple_size(InitialColour) =:= 3; tuple_size(InitialColour) =:= 4,tuple_size(DestColour) =:= 3; tuple_size(DestColour) =:= 4,is_integer(CircleCenterX),is_integer(CircleCenterY) ->
@@ -662,7 +662,7 @@ gradientFillConcentric(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI,(wxe_util:colour_bin(InitialColour)):16/binary,(wxe_util:colour_bin(DestColour)):16/binary,CircleCenterX:32/?UI,CircleCenterY:32/?UI>>).
%% @equiv gradientFillLinear(This,Rect,InitialColour,DestColour, [])
--spec gradientFillLinear(This, Rect, InitialColour, DestColour) -> ok when
+-spec gradientFillLinear(This, Rect, InitialColour, DestColour) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, InitialColour::wx:wx_colour(), DestColour::wx:wx_colour().
gradientFillLinear(This,Rect={RectX,RectY,RectW,RectH},InitialColour,DestColour)
@@ -671,9 +671,9 @@ gradientFillLinear(This,Rect={RectX,RectY,RectW,RectH},InitialColour,DestColour)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcgradientfilllinear">external documentation</a>.
%%<br /> NDirection = ?wxLEFT | ?wxRIGHT | ?wxUP | ?wxDOWN | ?wxTOP | ?wxBOTTOM | ?wxNORTH | ?wxSOUTH | ?wxWEST | ?wxEAST | ?wxALL
--spec gradientFillLinear(This, Rect, InitialColour, DestColour, [Option]) -> ok when
+-spec gradientFillLinear(This, Rect, InitialColour, DestColour, [Option]) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, InitialColour::wx:wx_colour(), DestColour::wx:wx_colour(),
- Option :: {nDirection, wx:wx_enum()}.
+ Option :: {'nDirection', wx:wx_enum()}.
gradientFillLinear(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},InitialColour,DestColour, Options)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),tuple_size(InitialColour) =:= 3; tuple_size(InitialColour) =:= 4,tuple_size(DestColour) =:= 3; tuple_size(DestColour) =:= 4,is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -760,7 +760,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcresetboundingbox">external documentation</a>.
--spec resetBoundingBox(This) -> ok when
+-spec resetBoundingBox(This) -> 'ok' when
This::wxDC().
resetBoundingBox(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -768,7 +768,7 @@ resetBoundingBox(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetaxisorientation">external documentation</a>.
--spec setAxisOrientation(This, XLeftRight, YBottomUp) -> ok when
+-spec setAxisOrientation(This, XLeftRight, YBottomUp) -> 'ok' when
This::wxDC(), XLeftRight::boolean(), YBottomUp::boolean().
setAxisOrientation(#wx_ref{type=ThisT,ref=ThisRef},XLeftRight,YBottomUp)
when is_boolean(XLeftRight),is_boolean(YBottomUp) ->
@@ -777,7 +777,7 @@ setAxisOrientation(#wx_ref{type=ThisT,ref=ThisRef},XLeftRight,YBottomUp)
<<ThisRef:32/?UI,(wxe_util:from_bool(XLeftRight)):32/?UI,(wxe_util:from_bool(YBottomUp)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetbackground">external documentation</a>.
--spec setBackground(This, Brush) -> ok when
+-spec setBackground(This, Brush) -> 'ok' when
This::wxDC(), Brush::wxBrush:wxBrush().
setBackground(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
?CLASS(ThisT,wxDC),
@@ -786,7 +786,7 @@ setBackground(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef})
<<ThisRef:32/?UI,BrushRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetbackgroundmode">external documentation</a>.
--spec setBackgroundMode(This, Mode) -> ok when
+-spec setBackgroundMode(This, Mode) -> 'ok' when
This::wxDC(), Mode::integer().
setBackgroundMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -795,7 +795,7 @@ setBackgroundMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
<<ThisRef:32/?UI,Mode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetbrush">external documentation</a>.
--spec setBrush(This, Brush) -> ok when
+-spec setBrush(This, Brush) -> 'ok' when
This::wxDC(), Brush::wxBrush:wxBrush().
setBrush(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
?CLASS(ThisT,wxDC),
@@ -805,12 +805,12 @@ setBrush(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetclippingregion">external documentation</a>.
%% <br /> Also:<br />
-%% setClippingRegion(This, Rect) -> ok when<br />
+%% setClippingRegion(This, Rect) -> 'ok' when<br />
%% This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.<br />
%%
--spec setClippingRegion(This, Region) -> ok when
+-spec setClippingRegion(This, Region) -> 'ok' when
This::wxDC(), Region::wxRegion:wxRegion();
- (This, Rect) -> ok when
+ (This, Rect) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
setClippingRegion(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RegionT,ref=RegionRef}) ->
?CLASS(ThisT,wxDC),
@@ -824,7 +824,7 @@ setClippingRegion(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetclippingregion">external documentation</a>.
--spec setClippingRegion(This, Pt, Sz) -> ok when
+-spec setClippingRegion(This, Pt, Sz) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}.
setClippingRegion(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH) ->
@@ -833,7 +833,7 @@ setClippingRegion(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetdeviceorigin">external documentation</a>.
--spec setDeviceOrigin(This, X, Y) -> ok when
+-spec setDeviceOrigin(This, X, Y) -> 'ok' when
This::wxDC(), X::integer(), Y::integer().
setDeviceOrigin(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -842,7 +842,7 @@ setDeviceOrigin(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxDC(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxDC),
@@ -852,7 +852,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetlayoutdirection">external documentation</a>.
%%<br /> Dir = ?wxLayout_Default | ?wxLayout_LeftToRight | ?wxLayout_RightToLeft
--spec setLayoutDirection(This, Dir) -> ok when
+-spec setLayoutDirection(This, Dir) -> 'ok' when
This::wxDC(), Dir::wx:wx_enum().
setLayoutDirection(#wx_ref{type=ThisT,ref=ThisRef},Dir)
when is_integer(Dir) ->
@@ -862,7 +862,7 @@ setLayoutDirection(#wx_ref{type=ThisT,ref=ThisRef},Dir)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetlogicalfunction">external documentation</a>.
%%<br /> Function = integer
--spec setLogicalFunction(This, Function) -> ok when
+-spec setLogicalFunction(This, Function) -> 'ok' when
This::wxDC(), Function::wx:wx_enum().
setLogicalFunction(#wx_ref{type=ThisT,ref=ThisRef},Function)
when is_integer(Function) ->
@@ -872,7 +872,7 @@ setLogicalFunction(#wx_ref{type=ThisT,ref=ThisRef},Function)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetmapmode">external documentation</a>.
%%<br /> Mode = integer
--spec setMapMode(This, Mode) -> ok when
+-spec setMapMode(This, Mode) -> 'ok' when
This::wxDC(), Mode::wx:wx_enum().
setMapMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -881,7 +881,7 @@ setMapMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
<<ThisRef:32/?UI,Mode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetpalette">external documentation</a>.
--spec setPalette(This, Palette) -> ok when
+-spec setPalette(This, Palette) -> 'ok' when
This::wxDC(), Palette::wxPalette:wxPalette().
setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}) ->
?CLASS(ThisT,wxDC),
@@ -890,7 +890,7 @@ setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}
<<ThisRef:32/?UI,PaletteRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetpen">external documentation</a>.
--spec setPen(This, Pen) -> ok when
+-spec setPen(This, Pen) -> 'ok' when
This::wxDC(), Pen::wxPen:wxPen().
setPen(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PenT,ref=PenRef}) ->
?CLASS(ThisT,wxDC),
@@ -899,7 +899,7 @@ setPen(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PenT,ref=PenRef}) ->
<<ThisRef:32/?UI,PenRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsettextbackground">external documentation</a>.
--spec setTextBackground(This, Colour) -> ok when
+-spec setTextBackground(This, Colour) -> 'ok' when
This::wxDC(), Colour::wx:wx_colour().
setTextBackground(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -908,7 +908,7 @@ setTextBackground(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsettextforeground">external documentation</a>.
--spec setTextForeground(This, Colour) -> ok when
+-spec setTextForeground(This, Colour) -> 'ok' when
This::wxDC(), Colour::wx:wx_colour().
setTextForeground(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -917,7 +917,7 @@ setTextForeground(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetuserscale">external documentation</a>.
--spec setUserScale(This, X, Y) -> ok when
+-spec setUserScale(This, X, Y) -> 'ok' when
This::wxDC(), X::number(), Y::number().
setUserScale(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_number(X),is_number(Y) ->
@@ -936,7 +936,7 @@ startDoc(#wx_ref{type=ThisT,ref=ThisRef},Message)
<<ThisRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcstartpage">external documentation</a>.
--spec startPage(This) -> ok when
+-spec startPage(This) -> 'ok' when
This::wxDC().
startPage(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
diff --git a/lib/wx/src/gen/wxDCOverlay.erl b/lib/wx/src/gen/wxDCOverlay.erl
index f98e310ba6..6eb0be1d64 100644
--- a/lib/wx/src/gen/wxDCOverlay.erl
+++ b/lib/wx/src/gen/wxDCOverlay.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -55,7 +55,7 @@ new(#wx_ref{type=OverlayT,ref=OverlayRef},#wx_ref{type=DcT,ref=DcRef},X,Y,Width,
<<OverlayRef:32/?UI,DcRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdcoverlay.html#wxdcoverlayclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxDCOverlay().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDCOverlay),
@@ -63,7 +63,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDCOverlay()) -> ok.
+-spec destroy(This::wxDCOverlay()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDCOverlay),
wxe_util:destroy(?wxDCOverlay_destruct,Obj),
diff --git a/lib/wx/src/gen/wxDataObject.erl b/lib/wx/src/gen/wxDataObject.erl
index 7d47c0cad4..00a5dad4cc 100644
--- a/lib/wx/src/gen/wxDataObject.erl
+++ b/lib/wx/src/gen/wxDataObject.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxDateEvent.erl b/lib/wx/src/gen/wxDateEvent.erl
index 6b01c71ade..e15cb62cb2 100644
--- a/lib/wx/src/gen/wxDateEvent.erl
+++ b/lib/wx/src/gen/wxDateEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxDatePickerCtrl.erl b/lib/wx/src/gen/wxDatePickerCtrl.erl
index 057f91d4e8..1b306a498a 100644
--- a/lib/wx/src/gen/wxDatePickerCtrl.erl
+++ b/lib/wx/src/gen/wxDatePickerCtrl.erl
@@ -102,11 +102,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdatepickerctrl.html#wxdatepickerctrlwxdatepickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxDatePickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {date, wx:wx_datetime()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'date', wx:wx_datetime()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -138,7 +138,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdatepickerctrl.html#wxdatepickerctrlsetrange">external documentation</a>.
--spec setRange(This, Dt1, Dt2) -> ok when
+-spec setRange(This, Dt1, Dt2) -> 'ok' when
This::wxDatePickerCtrl(), Dt1::wx:wx_datetime(), Dt2::wx:wx_datetime().
setRange(#wx_ref{type=ThisT,ref=ThisRef},Dt1,Dt2)
when tuple_size(Dt1) =:= 2,tuple_size(Dt2) =:= 2 ->
@@ -147,7 +147,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},Dt1,Dt2)
<<ThisRef:32/?UI,(wxe_util:datetime_bin(Dt1)):24/binary,(wxe_util:datetime_bin(Dt2)):24/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdatepickerctrl.html#wxdatepickerctrlsetvalue">external documentation</a>.
--spec setValue(This, Date) -> ok when
+-spec setValue(This, Date) -> 'ok' when
This::wxDatePickerCtrl(), Date::wx:wx_datetime().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Date)
when tuple_size(Date) =:= 2 ->
@@ -156,7 +156,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Date)
<<ThisRef:32/?UI,(wxe_util:datetime_bin(Date)):24/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDatePickerCtrl()) -> ok.
+-spec destroy(This::wxDatePickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDatePickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDialog.erl b/lib/wx/src/gen/wxDialog.erl
index c3f4828c68..9f98644828 100644
--- a/lib/wx/src/gen/wxDialog.erl
+++ b/lib/wx/src/gen/wxDialog.erl
@@ -103,9 +103,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogwxdialog">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxDialog() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -129,9 +129,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogcreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxDialog(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxDialog),
@@ -164,7 +164,7 @@ createStdDialogButtonSizer(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogendmodal">external documentation</a>.
--spec endModal(This, RetCode) -> ok when
+-spec endModal(This, RetCode) -> 'ok' when
This::wxDialog(), RetCode::integer().
endModal(#wx_ref{type=ThisT,ref=ThisRef},RetCode)
when is_integer(RetCode) ->
@@ -197,7 +197,7 @@ isModal(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogsetaffirmativeid">external documentation</a>.
--spec setAffirmativeId(This, AffirmativeId) -> ok when
+-spec setAffirmativeId(This, AffirmativeId) -> 'ok' when
This::wxDialog(), AffirmativeId::integer().
setAffirmativeId(#wx_ref{type=ThisT,ref=ThisRef},AffirmativeId)
when is_integer(AffirmativeId) ->
@@ -206,7 +206,7 @@ setAffirmativeId(#wx_ref{type=ThisT,ref=ThisRef},AffirmativeId)
<<ThisRef:32/?UI,AffirmativeId:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogsetreturncode">external documentation</a>.
--spec setReturnCode(This, ReturnCode) -> ok when
+-spec setReturnCode(This, ReturnCode) -> 'ok' when
This::wxDialog(), ReturnCode::integer().
setReturnCode(#wx_ref{type=ThisT,ref=ThisRef},ReturnCode)
when is_integer(ReturnCode) ->
@@ -225,7 +225,7 @@ show(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogshow">external documentation</a>.
-spec show(This, [Option]) -> boolean() when
This::wxDialog(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxDialog),
@@ -244,7 +244,7 @@ showModal(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDialog()) -> ok.
+-spec destroy(This::wxDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDirDialog.erl b/lib/wx/src/gen/wxDirDialog.erl
index aa7a419bcd..1b6b9dba71 100644
--- a/lib/wx/src/gen/wxDirDialog.erl
+++ b/lib/wx/src/gen/wxDirDialog.erl
@@ -99,11 +99,11 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirdialog.html#wxdirdialogwxdirdialog">external documentation</a>.
-spec new(Parent, [Option]) -> wxDirDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {title, unicode:chardata()}
- | {defaultPath, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {sz, {W::integer(), H::integer()}}.
+ Option :: {'title', unicode:chardata()}
+ | {'defaultPath', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'sz', {W::integer(), H::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -134,7 +134,7 @@ getMessage(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirdialog.html#wxdirdialogsetmessage">external documentation</a>.
--spec setMessage(This, Message) -> ok when
+-spec setMessage(This, Message) -> 'ok' when
This::wxDirDialog(), Message::unicode:chardata().
setMessage(#wx_ref{type=ThisT,ref=ThisRef},Message)
when is_list(Message) ->
@@ -144,7 +144,7 @@ setMessage(#wx_ref{type=ThisT,ref=ThisRef},Message)
<<ThisRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirdialog.html#wxdirdialogsetpath">external documentation</a>.
--spec setPath(This, Path) -> ok when
+-spec setPath(This, Path) -> 'ok' when
This::wxDirDialog(), Path::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
when is_list(Path) ->
@@ -154,7 +154,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
<<ThisRef:32/?UI,(byte_size(Path_UC)):32/?UI,(Path_UC)/binary, 0:(((8- ((0+byte_size(Path_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDirDialog()) -> ok.
+-spec destroy(This::wxDirDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDirDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDirPickerCtrl.erl b/lib/wx/src/gen/wxDirPickerCtrl.erl
index fea7ee71a1..3bedeb7f54 100644
--- a/lib/wx/src/gen/wxDirPickerCtrl.erl
+++ b/lib/wx/src/gen/wxDirPickerCtrl.erl
@@ -102,12 +102,12 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirpickerctrl.html#wxdirpickerctrlwxdirpickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxDirPickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {path, unicode:chardata()}
- | {message, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'path', unicode:chardata()}
+ | {'message', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -133,12 +133,12 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirpickerctrl.html#wxdirpickerctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxDirPickerCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {path, unicode:chardata()}
- | {message, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'path', unicode:chardata()}
+ | {'message', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxDirPickerCtrl),
@@ -163,7 +163,7 @@ getPath(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirpickerctrl.html#wxdirpickerctrlsetpath">external documentation</a>.
--spec setPath(This, Str) -> ok when
+-spec setPath(This, Str) -> 'ok' when
This::wxDirPickerCtrl(), Str::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -173,7 +173,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDirPickerCtrl()) -> ok.
+-spec destroy(This::wxDirPickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDirPickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDisplayChangedEvent.erl b/lib/wx/src/gen/wxDisplayChangedEvent.erl
index b5cd85a10a..763d6aa0a4 100644
--- a/lib/wx/src/gen/wxDisplayChangedEvent.erl
+++ b/lib/wx/src/gen/wxDisplayChangedEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxEraseEvent.erl b/lib/wx/src/gen/wxEraseEvent.erl
index 638f36a14b..0cc7ee0441 100644
--- a/lib/wx/src/gen/wxEraseEvent.erl
+++ b/lib/wx/src/gen/wxEraseEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxEvent.erl b/lib/wx/src/gen/wxEvent.erl
index 285ed6ecbb..677badd364 100644
--- a/lib/wx/src/gen/wxEvent.erl
+++ b/lib/wx/src/gen/wxEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -69,7 +69,7 @@ isCommandEvent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxevent.html#wxeventresumepropagation">external documentation</a>.
--spec resumePropagation(This, PropagationLevel) -> ok when
+-spec resumePropagation(This, PropagationLevel) -> 'ok' when
This::wxEvent(), PropagationLevel::integer().
resumePropagation(#wx_ref{type=ThisT,ref=ThisRef},PropagationLevel)
when is_integer(PropagationLevel) ->
@@ -86,7 +86,7 @@ shouldPropagate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv skip(This, [])
--spec skip(This) -> ok when
+-spec skip(This) -> 'ok' when
This::wxEvent().
skip(This)
@@ -94,9 +94,9 @@ skip(This)
skip(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxevent.html#wxeventskip">external documentation</a>.
--spec skip(This, [Option]) -> ok when
+-spec skip(This, [Option]) -> 'ok' when
This::wxEvent(),
- Option :: {skip, boolean()}.
+ Option :: {'skip', boolean()}.
skip(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxEvent),
diff --git a/lib/wx/src/gen/wxEvtHandler.erl b/lib/wx/src/gen/wxEvtHandler.erl
index 2d0a87f4dd..8d56ad952c 100644
--- a/lib/wx/src/gen/wxEvtHandler.erl
+++ b/lib/wx/src/gen/wxEvtHandler.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@
-type wxEvtHandler() :: wx:wx_object().
%% @doc Equivalent to {@link connect/3. connect(This, EventType, [])}
--spec connect(This::wxEvtHandler(), EventType::wxEventType()) -> ok.
+-spec connect(This::wxEvtHandler(), EventType::wxEventType()) -> 'ok'.
connect(This, EventType) ->
connect(This, EventType, []).
@@ -75,9 +75,9 @@ connect(This, EventType) ->
%% to process the event. Default not specfied i.e. a message will
%% be delivered to the process calling this function.
%% {userData, term()} An erlang term that will be sent with the event. Default: [].
--spec connect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> ok when
- Option :: {id, integer()} | {lastId, integer()} | {skip, boolean()} |
- callback | {callback, function()} | {userData, term()}.
+-spec connect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> 'ok' when
+ Option :: {'id', integer()} | {'lastId', integer()} | {'skip', boolean()} |
+ 'callback' | {'callback', function()} | {'userData', term()}.
connect(This=#wx_ref{type=ThisT}, EventType, Options) ->
EvH = parse_opts(Options, #evh{et=EventType}),
?CLASS(ThisT,wxEvtHandler),
@@ -135,7 +135,7 @@ disconnect(This=#wx_ref{type=ThisT,ref=_ThisRef}, EventType) when is_atom(EventT
%% EventType may be the atom 'null' to match any eventtype.
%% Notice that the options skip and userdata is not used to match the eventhandler.
-spec disconnect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> boolean() when
- Option :: {id, integer()} | {lastId, integer()} | {callback, function()}.
+ Option :: {'id', integer()} | {'lastId', integer()} | {'callback', function()}.
disconnect(This=#wx_ref{type=ThisT,ref=_ThisRef}, EventType, Opts) ->
?CLASS(ThisT,wxEvtHandler),
EvH = parse_opts(Opts, #evh{et=EventType}),
diff --git a/lib/wx/src/gen/wxFileDataObject.erl b/lib/wx/src/gen/wxFileDataObject.erl
index b132e2291b..06d8ceb9cd 100644
--- a/lib/wx/src/gen/wxFileDataObject.erl
+++ b/lib/wx/src/gen/wxFileDataObject.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@ new() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledataobject.html#wxfiledataobjectaddfile">external documentation</a>.
--spec addFile(This, Filename) -> ok when
+-spec addFile(This, Filename) -> 'ok' when
This::wxFileDataObject(), Filename::unicode:chardata().
addFile(#wx_ref{type=ThisT,ref=ThisRef},Filename)
when is_list(Filename) ->
@@ -64,7 +64,7 @@ getFilenames(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFileDataObject()) -> ok.
+-spec destroy(This::wxFileDataObject()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFileDataObject),
wxe_util:destroy(?wxFileDataObject_destroy,Obj),
diff --git a/lib/wx/src/gen/wxFileDialog.erl b/lib/wx/src/gen/wxFileDialog.erl
index 36ee6463ae..070fce3a39 100644
--- a/lib/wx/src/gen/wxFileDialog.erl
+++ b/lib/wx/src/gen/wxFileDialog.erl
@@ -101,13 +101,13 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogwxfiledialog">external documentation</a>.
-spec new(Parent, [Option]) -> wxFileDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {message, unicode:chardata()}
- | {defaultDir, unicode:chardata()}
- | {defaultFile, unicode:chardata()}
- | {wildCard, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {sz, {W::integer(), H::integer()}}.
+ Option :: {'message', unicode:chardata()}
+ | {'defaultDir', unicode:chardata()}
+ | {'defaultFile', unicode:chardata()}
+ | {'wildCard', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'sz', {W::integer(), H::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -188,7 +188,7 @@ getWildcard(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetdirectory">external documentation</a>.
--spec setDirectory(This, Dir) -> ok when
+-spec setDirectory(This, Dir) -> 'ok' when
This::wxFileDialog(), Dir::unicode:chardata().
setDirectory(#wx_ref{type=ThisT,ref=ThisRef},Dir)
when is_list(Dir) ->
@@ -198,7 +198,7 @@ setDirectory(#wx_ref{type=ThisT,ref=ThisRef},Dir)
<<ThisRef:32/?UI,(byte_size(Dir_UC)):32/?UI,(Dir_UC)/binary, 0:(((8- ((0+byte_size(Dir_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetfilename">external documentation</a>.
--spec setFilename(This, Name) -> ok when
+-spec setFilename(This, Name) -> 'ok' when
This::wxFileDialog(), Name::unicode:chardata().
setFilename(#wx_ref{type=ThisT,ref=ThisRef},Name)
when is_list(Name) ->
@@ -208,7 +208,7 @@ setFilename(#wx_ref{type=ThisT,ref=ThisRef},Name)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetfilterindex">external documentation</a>.
--spec setFilterIndex(This, FilterIndex) -> ok when
+-spec setFilterIndex(This, FilterIndex) -> 'ok' when
This::wxFileDialog(), FilterIndex::integer().
setFilterIndex(#wx_ref{type=ThisT,ref=ThisRef},FilterIndex)
when is_integer(FilterIndex) ->
@@ -217,7 +217,7 @@ setFilterIndex(#wx_ref{type=ThisT,ref=ThisRef},FilterIndex)
<<ThisRef:32/?UI,FilterIndex:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetmessage">external documentation</a>.
--spec setMessage(This, Message) -> ok when
+-spec setMessage(This, Message) -> 'ok' when
This::wxFileDialog(), Message::unicode:chardata().
setMessage(#wx_ref{type=ThisT,ref=ThisRef},Message)
when is_list(Message) ->
@@ -227,7 +227,7 @@ setMessage(#wx_ref{type=ThisT,ref=ThisRef},Message)
<<ThisRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetpath">external documentation</a>.
--spec setPath(This, Path) -> ok when
+-spec setPath(This, Path) -> 'ok' when
This::wxFileDialog(), Path::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
when is_list(Path) ->
@@ -237,7 +237,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
<<ThisRef:32/?UI,(byte_size(Path_UC)):32/?UI,(Path_UC)/binary, 0:(((8- ((0+byte_size(Path_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetwildcard">external documentation</a>.
--spec setWildcard(This, WildCard) -> ok when
+-spec setWildcard(This, WildCard) -> 'ok' when
This::wxFileDialog(), WildCard::unicode:chardata().
setWildcard(#wx_ref{type=ThisT,ref=ThisRef},WildCard)
when is_list(WildCard) ->
@@ -247,7 +247,7 @@ setWildcard(#wx_ref{type=ThisT,ref=ThisRef},WildCard)
<<ThisRef:32/?UI,(byte_size(WildCard_UC)):32/?UI,(WildCard_UC)/binary, 0:(((8- ((0+byte_size(WildCard_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFileDialog()) -> ok.
+-spec destroy(This::wxFileDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFileDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFileDirPickerEvent.erl b/lib/wx/src/gen/wxFileDirPickerEvent.erl
index f2e834f2cb..81e485021b 100644
--- a/lib/wx/src/gen/wxFileDirPickerEvent.erl
+++ b/lib/wx/src/gen/wxFileDirPickerEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxFilePickerCtrl.erl b/lib/wx/src/gen/wxFilePickerCtrl.erl
index 2b57a5927b..396403dc22 100644
--- a/lib/wx/src/gen/wxFilePickerCtrl.erl
+++ b/lib/wx/src/gen/wxFilePickerCtrl.erl
@@ -102,13 +102,13 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfilepickerctrl.html#wxfilepickerctrlwxfilepickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxFilePickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {path, unicode:chardata()}
- | {message, unicode:chardata()}
- | {wildcard, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'path', unicode:chardata()}
+ | {'message', unicode:chardata()}
+ | {'wildcard', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -135,13 +135,13 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfilepickerctrl.html#wxfilepickerctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxFilePickerCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {path, unicode:chardata()}
- | {message, unicode:chardata()}
- | {wildcard, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'path', unicode:chardata()}
+ | {'message', unicode:chardata()}
+ | {'wildcard', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxFilePickerCtrl),
@@ -167,7 +167,7 @@ getPath(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfilepickerctrl.html#wxfilepickerctrlsetpath">external documentation</a>.
--spec setPath(This, Str) -> ok when
+-spec setPath(This, Str) -> 'ok' when
This::wxFilePickerCtrl(), Str::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -177,7 +177,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFilePickerCtrl()) -> ok.
+-spec destroy(This::wxFilePickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFilePickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFindReplaceData.erl b/lib/wx/src/gen/wxFindReplaceData.erl
index c31f945d73..9b4b910f7e 100644
--- a/lib/wx/src/gen/wxFindReplaceData.erl
+++ b/lib/wx/src/gen/wxFindReplaceData.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -75,7 +75,7 @@ getFlags(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedata.html#wxfindreplacedatasetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxFindReplaceData(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -84,7 +84,7 @@ setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedata.html#wxfindreplacedatasetfindstring">external documentation</a>.
--spec setFindString(This, Str) -> ok when
+-spec setFindString(This, Str) -> 'ok' when
This::wxFindReplaceData(), Str::unicode:chardata().
setFindString(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -94,7 +94,7 @@ setFindString(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedata.html#wxfindreplacedatasetreplacestring">external documentation</a>.
--spec setReplaceString(This, Str) -> ok when
+-spec setReplaceString(This, Str) -> 'ok' when
This::wxFindReplaceData(), Str::unicode:chardata().
setReplaceString(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -104,7 +104,7 @@ setReplaceString(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFindReplaceData()) -> ok.
+-spec destroy(This::wxFindReplaceData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFindReplaceData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFindReplaceDialog.erl b/lib/wx/src/gen/wxFindReplaceDialog.erl
index d265e232b3..a34fc329ae 100644
--- a/lib/wx/src/gen/wxFindReplaceDialog.erl
+++ b/lib/wx/src/gen/wxFindReplaceDialog.erl
@@ -105,7 +105,7 @@ new(Parent,Data,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedialog.html#wxfindreplacedialogwxfindreplacedialog">external documentation</a>.
-spec new(Parent, Data, Title, [Option]) -> wxFindReplaceDialog() when
Parent::wxWindow:wxWindow(), Data::wxFindReplaceData:wxFindReplaceData(), Title::unicode:chardata(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=DataT,ref=DataRef},Title, Options)
when is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -128,7 +128,7 @@ create(This,Parent,Data,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedialog.html#wxfindreplacedialogcreate">external documentation</a>.
-spec create(This, Parent, Data, Title, [Option]) -> boolean() when
This::wxFindReplaceDialog(), Parent::wxWindow:wxWindow(), Data::wxFindReplaceData:wxFindReplaceData(), Title::unicode:chardata(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=DataT,ref=DataRef},Title, Options)
when is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxFindReplaceDialog),
@@ -150,7 +150,7 @@ getData(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFindReplaceDialog()) -> ok.
+-spec destroy(This::wxFindReplaceDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFindReplaceDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFlexGridSizer.erl b/lib/wx/src/gen/wxFlexGridSizer.erl
index 3e191c8f7b..80ef8f6b24 100644
--- a/lib/wx/src/gen/wxFlexGridSizer.erl
+++ b/lib/wx/src/gen/wxFlexGridSizer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -64,8 +64,8 @@ new(Cols)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizerwxflexgridsizer">external documentation</a>.
-spec new(Cols, [Option]) -> wxFlexGridSizer() when
Cols::integer(),
- Option :: {vgap, integer()}
- | {hgap, integer()}.
+ Option :: {'vgap', integer()}
+ | {'hgap', integer()}.
new(Cols, Options)
when is_integer(Cols),is_list(Options) ->
MOpts = fun({vgap, Vgap}, Acc) -> [<<1:32/?UI,Vgap:32/?UI>>|Acc];
@@ -84,7 +84,7 @@ new(Rows,Cols,Vgap,Hgap)
<<Rows:32/?UI,Cols:32/?UI,Vgap:32/?UI,Hgap:32/?UI>>).
%% @equiv addGrowableCol(This,Idx, [])
--spec addGrowableCol(This, Idx) -> ok when
+-spec addGrowableCol(This, Idx) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer().
addGrowableCol(This,Idx)
@@ -92,9 +92,9 @@ addGrowableCol(This,Idx)
addGrowableCol(This,Idx, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizeraddgrowablecol">external documentation</a>.
--spec addGrowableCol(This, Idx, [Option]) -> ok when
+-spec addGrowableCol(This, Idx, [Option]) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer(),
- Option :: {proportion, integer()}.
+ Option :: {'proportion', integer()}.
addGrowableCol(#wx_ref{type=ThisT,ref=ThisRef},Idx, Options)
when is_integer(Idx),is_list(Options) ->
?CLASS(ThisT,wxFlexGridSizer),
@@ -105,7 +105,7 @@ addGrowableCol(#wx_ref{type=ThisT,ref=ThisRef},Idx, Options)
<<ThisRef:32/?UI,Idx:32/?UI, BinOpt/binary>>).
%% @equiv addGrowableRow(This,Idx, [])
--spec addGrowableRow(This, Idx) -> ok when
+-spec addGrowableRow(This, Idx) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer().
addGrowableRow(This,Idx)
@@ -113,9 +113,9 @@ addGrowableRow(This,Idx)
addGrowableRow(This,Idx, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizeraddgrowablerow">external documentation</a>.
--spec addGrowableRow(This, Idx, [Option]) -> ok when
+-spec addGrowableRow(This, Idx, [Option]) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer(),
- Option :: {proportion, integer()}.
+ Option :: {'proportion', integer()}.
addGrowableRow(#wx_ref{type=ThisT,ref=ThisRef},Idx, Options)
when is_integer(Idx),is_list(Options) ->
?CLASS(ThisT,wxFlexGridSizer),
@@ -143,7 +143,7 @@ getNonFlexibleGrowMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizerremovegrowablecol">external documentation</a>.
--spec removeGrowableCol(This, Idx) -> ok when
+-spec removeGrowableCol(This, Idx) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer().
removeGrowableCol(#wx_ref{type=ThisT,ref=ThisRef},Idx)
when is_integer(Idx) ->
@@ -152,7 +152,7 @@ removeGrowableCol(#wx_ref{type=ThisT,ref=ThisRef},Idx)
<<ThisRef:32/?UI,Idx:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizerremovegrowablerow">external documentation</a>.
--spec removeGrowableRow(This, Idx) -> ok when
+-spec removeGrowableRow(This, Idx) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer().
removeGrowableRow(#wx_ref{type=ThisT,ref=ThisRef},Idx)
when is_integer(Idx) ->
@@ -161,7 +161,7 @@ removeGrowableRow(#wx_ref{type=ThisT,ref=ThisRef},Idx)
<<ThisRef:32/?UI,Idx:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizersetflexibledirection">external documentation</a>.
--spec setFlexibleDirection(This, Direction) -> ok when
+-spec setFlexibleDirection(This, Direction) -> 'ok' when
This::wxFlexGridSizer(), Direction::integer().
setFlexibleDirection(#wx_ref{type=ThisT,ref=ThisRef},Direction)
when is_integer(Direction) ->
@@ -171,7 +171,7 @@ setFlexibleDirection(#wx_ref{type=ThisT,ref=ThisRef},Direction)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizersetnonflexiblegrowmode">external documentation</a>.
%%<br /> Mode = ?wxFLEX_GROWMODE_NONE | ?wxFLEX_GROWMODE_SPECIFIED | ?wxFLEX_GROWMODE_ALL
--spec setNonFlexibleGrowMode(This, Mode) -> ok when
+-spec setNonFlexibleGrowMode(This, Mode) -> 'ok' when
This::wxFlexGridSizer(), Mode::wx:wx_enum().
setNonFlexibleGrowMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -180,7 +180,7 @@ setNonFlexibleGrowMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
<<ThisRef:32/?UI,Mode:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFlexGridSizer()) -> ok.
+-spec destroy(This::wxFlexGridSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFlexGridSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFocusEvent.erl b/lib/wx/src/gen/wxFocusEvent.erl
index 07e1115ee4..ae113ce21c 100644
--- a/lib/wx/src/gen/wxFocusEvent.erl
+++ b/lib/wx/src/gen/wxFocusEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxFont.erl b/lib/wx/src/gen/wxFont.erl
index 5b949260a0..56e6e96b6d 100644
--- a/lib/wx/src/gen/wxFont.erl
+++ b/lib/wx/src/gen/wxFont.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -68,9 +68,9 @@ new(Size,Family,Style,Weight)
%%<br /> Style = ?wxFONTSTYLE_NORMAL | ?wxFONTSTYLE_ITALIC | ?wxFONTSTYLE_SLANT | ?wxFONTSTYLE_MAX
-spec new(Size, Family, Style, Weight, [Option]) -> wxFont() when
Size::integer(), Family::wx:wx_enum(), Style::wx:wx_enum(), Weight::integer(),
- Option :: {underlined, boolean()}
- | {face, unicode:chardata()}
- | {encoding, wx:wx_enum()}.
+ Option :: {'underlined', boolean()}
+ | {'face', unicode:chardata()}
+ | {'encoding', wx:wx_enum()}.
new(Size,Family,Style,Weight, Options)
when is_integer(Size),is_integer(Family),is_integer(Style),is_integer(Weight),is_list(Options) ->
MOpts = fun({underlined, Underlined}, Acc) -> [<<1:32/?UI,(wxe_util:from_bool(Underlined)):32/?UI>>|Acc];
@@ -172,7 +172,7 @@ ok(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetdefaultencoding">external documentation</a>.
%%<br /> Encoding = ?wxFONTENCODING_SYSTEM | ?wxFONTENCODING_DEFAULT | ?wxFONTENCODING_ISO8859_1 | ?wxFONTENCODING_ISO8859_2 | ?wxFONTENCODING_ISO8859_3 | ?wxFONTENCODING_ISO8859_4 | ?wxFONTENCODING_ISO8859_5 | ?wxFONTENCODING_ISO8859_6 | ?wxFONTENCODING_ISO8859_7 | ?wxFONTENCODING_ISO8859_8 | ?wxFONTENCODING_ISO8859_9 | ?wxFONTENCODING_ISO8859_10 | ?wxFONTENCODING_ISO8859_11 | ?wxFONTENCODING_ISO8859_12 | ?wxFONTENCODING_ISO8859_13 | ?wxFONTENCODING_ISO8859_14 | ?wxFONTENCODING_ISO8859_15 | ?wxFONTENCODING_ISO8859_MAX | ?wxFONTENCODING_KOI8 | ?wxFONTENCODING_KOI8_U | ?wxFONTENCODING_ALTERNATIVE | ?wxFONTENCODING_BULGARIAN | ?wxFONTENCODING_CP437 | ?wxFONTENCODING_CP850 | ?wxFONTENCODING_CP852 | ?wxFONTENCODING_CP855 | ?wxFONTENCODING_CP866 | ?wxFONTENCODING_CP874 | ?wxFONTENCODING_CP932 | ?wxFONTENCODING_CP936 | ?wxFONTENCODING_CP949 | ?wxFONTENCODING_CP950 | ?wxFONTENCODING_CP1250 | ?wxFONTENCODING_CP1251 | ?wxFONTENCODING_CP1252 | ?wxFONTENCODING_CP1253 | ?wxFONTENCODING_CP1254 | ?wxFONTENCODING_CP1255 | ?wxFONTENCODING_CP1256 | ?wxFONTENCODING_CP1257 | ?wxFONTENCODING_CP12_MAX | ?wxFONTENCODING_UTF7 | ?wxFONTENCODING_UTF8 | ?wxFONTENCODING_EUC_JP | ?wxFONTENCODING_UTF16BE | ?wxFONTENCODING_UTF16LE | ?wxFONTENCODING_UTF32BE | ?wxFONTENCODING_UTF32LE | ?wxFONTENCODING_MACROMAN | ?wxFONTENCODING_MACJAPANESE | ?wxFONTENCODING_MACCHINESETRAD | ?wxFONTENCODING_MACKOREAN | ?wxFONTENCODING_MACARABIC | ?wxFONTENCODING_MACHEBREW | ?wxFONTENCODING_MACGREEK | ?wxFONTENCODING_MACCYRILLIC | ?wxFONTENCODING_MACDEVANAGARI | ?wxFONTENCODING_MACGURMUKHI | ?wxFONTENCODING_MACGUJARATI | ?wxFONTENCODING_MACORIYA | ?wxFONTENCODING_MACBENGALI | ?wxFONTENCODING_MACTAMIL | ?wxFONTENCODING_MACTELUGU | ?wxFONTENCODING_MACKANNADA | ?wxFONTENCODING_MACMALAJALAM | ?wxFONTENCODING_MACSINHALESE | ?wxFONTENCODING_MACBURMESE | ?wxFONTENCODING_MACKHMER | ?wxFONTENCODING_MACTHAI | ?wxFONTENCODING_MACLAOTIAN | ?wxFONTENCODING_MACGEORGIAN | ?wxFONTENCODING_MACARMENIAN | ?wxFONTENCODING_MACCHINESESIMP | ?wxFONTENCODING_MACTIBETAN | ?wxFONTENCODING_MACMONGOLIAN | ?wxFONTENCODING_MACETHIOPIC | ?wxFONTENCODING_MACCENTRALEUR | ?wxFONTENCODING_MACVIATNAMESE | ?wxFONTENCODING_MACARABICEXT | ?wxFONTENCODING_MACSYMBOL | ?wxFONTENCODING_MACDINGBATS | ?wxFONTENCODING_MACTURKISH | ?wxFONTENCODING_MACCROATIAN | ?wxFONTENCODING_MACICELANDIC | ?wxFONTENCODING_MACROMANIAN | ?wxFONTENCODING_MACCELTIC | ?wxFONTENCODING_MACGAELIC | ?wxFONTENCODING_MACKEYBOARD | ?wxFONTENCODING_MAX | ?wxFONTENCODING_MACMIN | ?wxFONTENCODING_MACMAX | ?wxFONTENCODING_UTF16 | ?wxFONTENCODING_UTF32 | ?wxFONTENCODING_UNICODE | ?wxFONTENCODING_GB2312 | ?wxFONTENCODING_BIG5 | ?wxFONTENCODING_SHIFT_JIS
--spec setDefaultEncoding(Encoding) -> ok when
+-spec setDefaultEncoding(Encoding) -> 'ok' when
Encoding::wx:wx_enum().
setDefaultEncoding(Encoding)
when is_integer(Encoding) ->
@@ -191,7 +191,7 @@ setFaceName(#wx_ref{type=ThisT,ref=ThisRef},FaceName)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetfamily">external documentation</a>.
%%<br /> Family = ?wxFONTFAMILY_DEFAULT | ?wxFONTFAMILY_DECORATIVE | ?wxFONTFAMILY_ROMAN | ?wxFONTFAMILY_SCRIPT | ?wxFONTFAMILY_SWISS | ?wxFONTFAMILY_MODERN | ?wxFONTFAMILY_TELETYPE | ?wxFONTFAMILY_MAX | ?wxFONTFAMILY_UNKNOWN
--spec setFamily(This, Family) -> ok when
+-spec setFamily(This, Family) -> 'ok' when
This::wxFont(), Family::wx:wx_enum().
setFamily(#wx_ref{type=ThisT,ref=ThisRef},Family)
when is_integer(Family) ->
@@ -200,7 +200,7 @@ setFamily(#wx_ref{type=ThisT,ref=ThisRef},Family)
<<ThisRef:32/?UI,Family:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetpointsize">external documentation</a>.
--spec setPointSize(This, PointSize) -> ok when
+-spec setPointSize(This, PointSize) -> 'ok' when
This::wxFont(), PointSize::integer().
setPointSize(#wx_ref{type=ThisT,ref=ThisRef},PointSize)
when is_integer(PointSize) ->
@@ -210,7 +210,7 @@ setPointSize(#wx_ref{type=ThisT,ref=ThisRef},PointSize)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetstyle">external documentation</a>.
%%<br /> Style = ?wxFONTSTYLE_NORMAL | ?wxFONTSTYLE_ITALIC | ?wxFONTSTYLE_SLANT | ?wxFONTSTYLE_MAX
--spec setStyle(This, Style) -> ok when
+-spec setStyle(This, Style) -> 'ok' when
This::wxFont(), Style::wx:wx_enum().
setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -219,7 +219,7 @@ setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetunderlined">external documentation</a>.
--spec setUnderlined(This, Underlined) -> ok when
+-spec setUnderlined(This, Underlined) -> 'ok' when
This::wxFont(), Underlined::boolean().
setUnderlined(#wx_ref{type=ThisT,ref=ThisRef},Underlined)
when is_boolean(Underlined) ->
@@ -228,7 +228,7 @@ setUnderlined(#wx_ref{type=ThisT,ref=ThisRef},Underlined)
<<ThisRef:32/?UI,(wxe_util:from_bool(Underlined)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetweight">external documentation</a>.
--spec setWeight(This, Weight) -> ok when
+-spec setWeight(This, Weight) -> 'ok' when
This::wxFont(), Weight::integer().
setWeight(#wx_ref{type=ThisT,ref=ThisRef},Weight)
when is_integer(Weight) ->
@@ -237,7 +237,7 @@ setWeight(#wx_ref{type=ThisT,ref=ThisRef},Weight)
<<ThisRef:32/?UI,Weight:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFont()) -> ok.
+-spec destroy(This::wxFont()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFont),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFontData.erl b/lib/wx/src/gen/wxFontData.erl
index a3c1f729ab..2d1a1b5568 100644
--- a/lib/wx/src/gen/wxFontData.erl
+++ b/lib/wx/src/gen/wxFontData.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ new(#wx_ref{type=DataT,ref=DataRef}) ->
<<DataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdataenableeffects">external documentation</a>.
--spec enableEffects(This, Flag) -> ok when
+-spec enableEffects(This, Flag) -> 'ok' when
This::wxFontData(), Flag::boolean().
enableEffects(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -109,7 +109,7 @@ getShowHelp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetallowsymbols">external documentation</a>.
--spec setAllowSymbols(This, Flag) -> ok when
+-spec setAllowSymbols(This, Flag) -> 'ok' when
This::wxFontData(), Flag::boolean().
setAllowSymbols(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -118,7 +118,7 @@ setAllowSymbols(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetchosenfont">external documentation</a>.
--spec setChosenFont(This, Font) -> ok when
+-spec setChosenFont(This, Font) -> 'ok' when
This::wxFontData(), Font::wxFont:wxFont().
setChosenFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxFontData),
@@ -127,7 +127,7 @@ setChosenFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) -
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxFontData(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -136,7 +136,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetinitialfont">external documentation</a>.
--spec setInitialFont(This, Font) -> ok when
+-spec setInitialFont(This, Font) -> 'ok' when
This::wxFontData(), Font::wxFont:wxFont().
setInitialFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxFontData),
@@ -145,7 +145,7 @@ setInitialFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef})
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetrange">external documentation</a>.
--spec setRange(This, MinRange, MaxRange) -> ok when
+-spec setRange(This, MinRange, MaxRange) -> 'ok' when
This::wxFontData(), MinRange::integer(), MaxRange::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},MinRange,MaxRange)
when is_integer(MinRange),is_integer(MaxRange) ->
@@ -154,7 +154,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},MinRange,MaxRange)
<<ThisRef:32/?UI,MinRange:32/?UI,MaxRange:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetshowhelp">external documentation</a>.
--spec setShowHelp(This, Flag) -> ok when
+-spec setShowHelp(This, Flag) -> 'ok' when
This::wxFontData(), Flag::boolean().
setShowHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -163,7 +163,7 @@ setShowHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFontData()) -> ok.
+-spec destroy(This::wxFontData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFontData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFontDialog.erl b/lib/wx/src/gen/wxFontDialog.erl
index de199cfcce..3e6a913973 100644
--- a/lib/wx/src/gen/wxFontDialog.erl
+++ b/lib/wx/src/gen/wxFontDialog.erl
@@ -122,7 +122,7 @@ getFontData(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFontDialog()) -> ok.
+-spec destroy(This::wxFontDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFontDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFontPickerCtrl.erl b/lib/wx/src/gen/wxFontPickerCtrl.erl
index c21061e0fe..0356f795eb 100644
--- a/lib/wx/src/gen/wxFontPickerCtrl.erl
+++ b/lib/wx/src/gen/wxFontPickerCtrl.erl
@@ -103,11 +103,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontpickerctrl.html#wxfontpickerctrlwxfontpickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxFontPickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {initial, wxFont:wxFont()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'initial', wxFont:wxFont()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,11 +132,11 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontpickerctrl.html#wxfontpickerctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxFontPickerCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {initial, wxFont:wxFont()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'initial', wxFont:wxFont()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxFontPickerCtrl),
@@ -160,7 +160,7 @@ getSelectedFont(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontpickerctrl.html#wxfontpickerctrlsetselectedfont">external documentation</a>.
--spec setSelectedFont(This, F) -> ok when
+-spec setSelectedFont(This, F) -> 'ok' when
This::wxFontPickerCtrl(), F::wxFont:wxFont().
setSelectedFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FT,ref=FRef}) ->
?CLASS(ThisT,wxFontPickerCtrl),
@@ -177,7 +177,7 @@ getMaxPointSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontpickerctrl.html#wxfontpickerctrlsetmaxpointsize">external documentation</a>.
--spec setMaxPointSize(This, Max) -> ok when
+-spec setMaxPointSize(This, Max) -> 'ok' when
This::wxFontPickerCtrl(), Max::integer().
setMaxPointSize(#wx_ref{type=ThisT,ref=ThisRef},Max)
when is_integer(Max) ->
@@ -186,7 +186,7 @@ setMaxPointSize(#wx_ref{type=ThisT,ref=ThisRef},Max)
<<ThisRef:32/?UI,Max:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFontPickerCtrl()) -> ok.
+-spec destroy(This::wxFontPickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFontPickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFontPickerEvent.erl b/lib/wx/src/gen/wxFontPickerEvent.erl
index 70485149e1..20fd1f9546 100644
--- a/lib/wx/src/gen/wxFontPickerEvent.erl
+++ b/lib/wx/src/gen/wxFontPickerEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxFrame.erl b/lib/wx/src/gen/wxFrame.erl
index 75860cd9b7..93aad5b235 100644
--- a/lib/wx/src/gen/wxFrame.erl
+++ b/lib/wx/src/gen/wxFrame.erl
@@ -105,9 +105,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframewxframe">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxFrame() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -131,9 +131,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframecreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxFrame(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxFrame),
@@ -158,9 +158,9 @@ createStatusBar(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframecreatestatusbar">external documentation</a>.
-spec createStatusBar(This, [Option]) -> wxStatusBar:wxStatusBar() when
This::wxFrame(),
- Option :: {number, integer()}
- | {style, integer()}
- | {id, integer()}.
+ Option :: {'number', integer()}
+ | {'style', integer()}
+ | {'id', integer()}.
createStatusBar(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxFrame),
@@ -183,8 +183,8 @@ createToolBar(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframecreatetoolbar">external documentation</a>.
-spec createToolBar(This, [Option]) -> wxToolBar:wxToolBar() when
This::wxFrame(),
- Option :: {style, integer()}
- | {id, integer()}.
+ Option :: {'style', integer()}
+ | {'id', integer()}.
createToolBar(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxFrame),
@@ -245,7 +245,7 @@ processCommand(#wx_ref{type=ThisT,ref=ThisRef},Winid)
<<ThisRef:32/?UI,Winid:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesendsizeevent">external documentation</a>.
--spec sendSizeEvent(This) -> ok when
+-spec sendSizeEvent(This) -> 'ok' when
This::wxFrame().
sendSizeEvent(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxFrame),
@@ -253,7 +253,7 @@ sendSizeEvent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetmenubar">external documentation</a>.
--spec setMenuBar(This, Menubar) -> ok when
+-spec setMenuBar(This, Menubar) -> 'ok' when
This::wxFrame(), Menubar::wxMenuBar:wxMenuBar().
setMenuBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenubarT,ref=MenubarRef}) ->
?CLASS(ThisT,wxFrame),
@@ -262,7 +262,7 @@ setMenuBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenubarT,ref=MenubarRef}
<<ThisRef:32/?UI,MenubarRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetstatusbar">external documentation</a>.
--spec setStatusBar(This, Statbar) -> ok when
+-spec setStatusBar(This, Statbar) -> 'ok' when
This::wxFrame(), Statbar::wxStatusBar:wxStatusBar().
setStatusBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StatbarT,ref=StatbarRef}) ->
?CLASS(ThisT,wxFrame),
@@ -271,7 +271,7 @@ setStatusBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StatbarT,ref=StatbarRe
<<ThisRef:32/?UI,StatbarRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetstatusbarpane">external documentation</a>.
--spec setStatusBarPane(This, N) -> ok when
+-spec setStatusBarPane(This, N) -> 'ok' when
This::wxFrame(), N::integer().
setStatusBarPane(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -280,7 +280,7 @@ setStatusBarPane(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @equiv setStatusText(This,Text, [])
--spec setStatusText(This, Text) -> ok when
+-spec setStatusText(This, Text) -> 'ok' when
This::wxFrame(), Text::unicode:chardata().
setStatusText(This,Text)
@@ -288,9 +288,9 @@ setStatusText(This,Text)
setStatusText(This,Text, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetstatustext">external documentation</a>.
--spec setStatusText(This, Text, [Option]) -> ok when
+-spec setStatusText(This, Text, [Option]) -> 'ok' when
This::wxFrame(), Text::unicode:chardata(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
setStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxFrame),
@@ -302,7 +302,7 @@ setStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetstatuswidths">external documentation</a>.
--spec setStatusWidths(This, Widths_field) -> ok when
+-spec setStatusWidths(This, Widths_field) -> 'ok' when
This::wxFrame(), Widths_field::[integer()].
setStatusWidths(#wx_ref{type=ThisT,ref=ThisRef},Widths_field)
when is_list(Widths_field) ->
@@ -312,7 +312,7 @@ setStatusWidths(#wx_ref{type=ThisT,ref=ThisRef},Widths_field)
(<< <<C:32/?I>> || C <- Widths_field>>)/binary, 0:(((0+length(Widths_field)) rem 2)*32)>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesettoolbar">external documentation</a>.
--spec setToolBar(This, Toolbar) -> ok when
+-spec setToolBar(This, Toolbar) -> 'ok' when
This::wxFrame(), Toolbar::wxToolBar:wxToolBar().
setToolBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ToolbarT,ref=ToolbarRef}) ->
?CLASS(ThisT,wxFrame),
@@ -321,7 +321,7 @@ setToolBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ToolbarT,ref=ToolbarRef}
<<ThisRef:32/?UI,ToolbarRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFrame()) -> ok.
+-spec destroy(This::wxFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGBSizerItem.erl b/lib/wx/src/gen/wxGBSizerItem.erl
index 6498a78626..eb4d3e68e6 100644
--- a/lib/wx/src/gen/wxGBSizerItem.erl
+++ b/lib/wx/src/gen/wxGBSizerItem.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxGLCanvas.erl b/lib/wx/src/gen/wxGLCanvas.erl
index 9d3d13740d..2007047bd3 100644
--- a/lib/wx/src/gen/wxGLCanvas.erl
+++ b/lib/wx/src/gen/wxGLCanvas.erl
@@ -89,25 +89,25 @@ new(Parent)
%% <br /> Also:<br />
%% new(Parent, [Option]) -> wxGLCanvas() when<br />
%% Parent::wxWindow:wxWindow(),<br />
-%% Option :: {id, integer()}<br />
-%% | {pos, {X::integer(), Y::integer()}}<br />
-%% | {size, {W::integer(), H::integer()}}<br />
-%% | {style, integer()}<br />
-%% | {name, unicode:chardata()}<br />
-%% | {attribList, [integer()]}<br />
-%% | {palette, wxPalette:wxPalette()}.<br />
+%% Option :: {'id', integer()}<br />
+%% | {'pos', {X::integer(), Y::integer()}}<br />
+%% | {'size', {W::integer(), H::integer()}}<br />
+%% | {'style', integer()}<br />
+%% | {'name', unicode:chardata()}<br />
+%% | {'attribList', [integer()]}<br />
+%% | {'palette', wxPalette:wxPalette()}.<br />
%%
-spec new(Parent, Shared) -> wxGLCanvas() when
Parent::wxWindow:wxWindow(), Shared::wx:wx_object() | wxGLCanvas();
(Parent, [Option]) -> wxGLCanvas() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {name, unicode:chardata()}
- | {attribList, [integer()]}
- | {palette, wxPalette:wxPalette()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'name', unicode:chardata()}
+ | {'attribList', [integer()]}
+ | {'palette', wxPalette:wxPalette()}.
new(Parent,Shared)
when is_record(Parent, wx_ref),is_record(Shared, wx_ref) ->
@@ -131,13 +131,13 @@ new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxglcanvas.html#wxglcanvaswxglcanvas">external documentation</a>.
-spec new(Parent, Shared, [Option]) -> wxGLCanvas() when
Parent::wxWindow:wxWindow(), Shared::wx:wx_object() | wxGLCanvas(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {name, unicode:chardata()}
- | {attribList, [integer()]}
- | {palette, wxPalette:wxPalette()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'name', unicode:chardata()}
+ | {'attribList', [integer()]}
+ | {'palette', wxPalette:wxPalette()}.
new(#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=SharedT,ref=SharedRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -169,7 +169,7 @@ getContext(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxglcanvas.html#wxglcanvassetcurrent">external documentation</a>.
--spec setCurrent(This) -> ok when
+-spec setCurrent(This) -> 'ok' when
This::wxGLCanvas().
setCurrent(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGLCanvas),
@@ -179,7 +179,7 @@ setCurrent(#wx_ref{type=ThisT,ref=ThisRef}) ->
_Result.
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxglcanvas.html#wxglcanvasswapbuffers">external documentation</a>.
--spec swapBuffers(This) -> ok when
+-spec swapBuffers(This) -> 'ok' when
This::wxGLCanvas().
swapBuffers(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGLCanvas),
@@ -187,7 +187,7 @@ swapBuffers(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGLCanvas()) -> ok.
+-spec destroy(This::wxGLCanvas()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGLCanvas),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGauge.erl b/lib/wx/src/gen/wxGauge.erl
index 51c35145c4..fa2e7618e8 100644
--- a/lib/wx/src/gen/wxGauge.erl
+++ b/lib/wx/src/gen/wxGauge.erl
@@ -30,9 +30,8 @@
-module(wxGauge).
-include("wxe.hrl").
--export([create/4,create/5,destroy/1,getBezelFace/1,getRange/1,getShadowWidth/1,
- getValue/1,isVertical/1,new/0,new/3,new/4,pulse/1,setBezelFace/2,setRange/2,
- setShadowWidth/2,setValue/2]).
+-export([create/4,create/5,destroy/1,getRange/1,getValue/1,isVertical/1,new/0,
+ new/3,new/4,pulse/1,setRange/2,setValue/2]).
%% inherited exports
-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
@@ -98,10 +97,10 @@ new(Parent,Id,Range)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugewxgauge">external documentation</a>.
-spec new(Parent, Id, Range, [Option]) -> wxGauge() when
Parent::wxWindow:wxWindow(), Id::integer(), Range::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Range, Options)
when is_integer(Id),is_integer(Range),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -125,10 +124,10 @@ create(This,Parent,Id,Range)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugecreate">external documentation</a>.
-spec create(This, Parent, Id, Range, [Option]) -> boolean() when
This::wxGauge(), Parent::wxWindow:wxWindow(), Id::integer(), Range::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Range, Options)
when is_integer(Id),is_integer(Range),is_list(Options) ->
?CLASS(ThisT,wxGauge),
@@ -142,14 +141,6 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Ra
wxe_util:call(?wxGauge_Create,
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,Range:32/?UI, BinOpt/binary>>).
-%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugegetbezelface">external documentation</a>.
--spec getBezelFace(This) -> integer() when
- This::wxGauge().
-getBezelFace(#wx_ref{type=ThisT,ref=ThisRef}) ->
- ?CLASS(ThisT,wxGauge),
- wxe_util:call(?wxGauge_GetBezelFace,
- <<ThisRef:32/?UI>>).
-
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugegetrange">external documentation</a>.
-spec getRange(This) -> integer() when
This::wxGauge().
@@ -158,14 +149,6 @@ getRange(#wx_ref{type=ThisT,ref=ThisRef}) ->
wxe_util:call(?wxGauge_GetRange,
<<ThisRef:32/?UI>>).
-%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugegetshadowwidth">external documentation</a>.
--spec getShadowWidth(This) -> integer() when
- This::wxGauge().
-getShadowWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
- ?CLASS(ThisT,wxGauge),
- wxe_util:call(?wxGauge_GetShadowWidth,
- <<ThisRef:32/?UI>>).
-
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugegetvalue">external documentation</a>.
-spec getValue(This) -> integer() when
This::wxGauge().
@@ -182,17 +165,8 @@ isVertical(#wx_ref{type=ThisT,ref=ThisRef}) ->
wxe_util:call(?wxGauge_IsVertical,
<<ThisRef:32/?UI>>).
-%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugesetbezelface">external documentation</a>.
--spec setBezelFace(This, W) -> ok when
- This::wxGauge(), W::integer().
-setBezelFace(#wx_ref{type=ThisT,ref=ThisRef},W)
- when is_integer(W) ->
- ?CLASS(ThisT,wxGauge),
- wxe_util:cast(?wxGauge_SetBezelFace,
- <<ThisRef:32/?UI,W:32/?UI>>).
-
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugesetrange">external documentation</a>.
--spec setRange(This, R) -> ok when
+-spec setRange(This, R) -> 'ok' when
This::wxGauge(), R::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},R)
when is_integer(R) ->
@@ -200,17 +174,8 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},R)
wxe_util:cast(?wxGauge_SetRange,
<<ThisRef:32/?UI,R:32/?UI>>).
-%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugesetshadowwidth">external documentation</a>.
--spec setShadowWidth(This, W) -> ok when
- This::wxGauge(), W::integer().
-setShadowWidth(#wx_ref{type=ThisT,ref=ThisRef},W)
- when is_integer(W) ->
- ?CLASS(ThisT,wxGauge),
- wxe_util:cast(?wxGauge_SetShadowWidth,
- <<ThisRef:32/?UI,W:32/?UI>>).
-
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugesetvalue">external documentation</a>.
--spec setValue(This, Pos) -> ok when
+-spec setValue(This, Pos) -> 'ok' when
This::wxGauge(), Pos::integer().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -219,7 +184,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugepulse">external documentation</a>.
--spec pulse(This) -> ok when
+-spec pulse(This) -> 'ok' when
This::wxGauge().
pulse(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGauge),
@@ -227,7 +192,7 @@ pulse(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGauge()) -> ok.
+-spec destroy(This::wxGauge()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGauge),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGenericDirCtrl.erl b/lib/wx/src/gen/wxGenericDirCtrl.erl
index bc26a1645e..3ea99c682d 100644
--- a/lib/wx/src/gen/wxGenericDirCtrl.erl
+++ b/lib/wx/src/gen/wxGenericDirCtrl.erl
@@ -99,13 +99,13 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlwxgenericdirctrl">external documentation</a>.
-spec new(Parent, [Option]) -> wxGenericDirCtrl() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {dir, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {filter, unicode:chardata()}
- | {defaultFilter, integer()}.
+ Option :: {'id', integer()}
+ | {'dir', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'filter', unicode:chardata()}
+ | {'defaultFilter', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,13 +132,13 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxGenericDirCtrl(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {dir, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {filter, unicode:chardata()}
- | {defaultFilter, integer()}.
+ Option :: {'id', integer()}
+ | {'dir', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'filter', unicode:chardata()}
+ | {'defaultFilter', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGenericDirCtrl),
@@ -156,7 +156,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlinit">external documentation</a>.
--spec init(This) -> ok when
+-spec init(This) -> 'ok' when
This::wxGenericDirCtrl().
init(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGenericDirCtrl),
@@ -164,7 +164,7 @@ init(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlcollapsetree">external documentation</a>.
--spec collapseTree(This) -> ok when
+-spec collapseTree(This) -> 'ok' when
This::wxGenericDirCtrl().
collapseTree(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGenericDirCtrl),
@@ -238,7 +238,7 @@ getTreeCtrl(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlrecreatetree">external documentation</a>.
--spec reCreateTree(This) -> ok when
+-spec reCreateTree(This) -> 'ok' when
This::wxGenericDirCtrl().
reCreateTree(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGenericDirCtrl),
@@ -246,7 +246,7 @@ reCreateTree(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlsetdefaultpath">external documentation</a>.
--spec setDefaultPath(This, Path) -> ok when
+-spec setDefaultPath(This, Path) -> 'ok' when
This::wxGenericDirCtrl(), Path::unicode:chardata().
setDefaultPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
when is_list(Path) ->
@@ -256,7 +256,7 @@ setDefaultPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
<<ThisRef:32/?UI,(byte_size(Path_UC)):32/?UI,(Path_UC)/binary, 0:(((8- ((0+byte_size(Path_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlsetfilter">external documentation</a>.
--spec setFilter(This, Filter) -> ok when
+-spec setFilter(This, Filter) -> 'ok' when
This::wxGenericDirCtrl(), Filter::unicode:chardata().
setFilter(#wx_ref{type=ThisT,ref=ThisRef},Filter)
when is_list(Filter) ->
@@ -266,7 +266,7 @@ setFilter(#wx_ref{type=ThisT,ref=ThisRef},Filter)
<<ThisRef:32/?UI,(byte_size(Filter_UC)):32/?UI,(Filter_UC)/binary, 0:(((8- ((0+byte_size(Filter_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlsetfilterindex">external documentation</a>.
--spec setFilterIndex(This, N) -> ok when
+-spec setFilterIndex(This, N) -> 'ok' when
This::wxGenericDirCtrl(), N::integer().
setFilterIndex(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -275,7 +275,7 @@ setFilterIndex(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlsetpath">external documentation</a>.
--spec setPath(This, Path) -> ok when
+-spec setPath(This, Path) -> 'ok' when
This::wxGenericDirCtrl(), Path::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
when is_list(Path) ->
@@ -285,7 +285,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
<<ThisRef:32/?UI,(byte_size(Path_UC)):32/?UI,(Path_UC)/binary, 0:(((8- ((0+byte_size(Path_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGenericDirCtrl()) -> ok.
+-spec destroy(This::wxGenericDirCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGenericDirCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGraphicsBrush.erl b/lib/wx/src/gen/wxGraphicsBrush.erl
index d8c2dc680f..f8093e984a 100644
--- a/lib/wx/src/gen/wxGraphicsBrush.erl
+++ b/lib/wx/src/gen/wxGraphicsBrush.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxGraphicsContext.erl b/lib/wx/src/gen/wxGraphicsContext.erl
index 4fc62f87fb..0aa2119210 100644
--- a/lib/wx/src/gen/wxGraphicsContext.erl
+++ b/lib/wx/src/gen/wxGraphicsContext.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -114,7 +114,7 @@ createFont(This,Font)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextcreatefont">external documentation</a>.
-spec createFont(This, Font, [Option]) -> wxGraphicsFont:wxGraphicsFont() when
This::wxGraphicsContext(), Font::wxFont:wxFont(),
- Option :: {col, wx:wx_colour()}.
+ Option :: {'col', wx:wx_colour()}.
createFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -136,12 +136,12 @@ createMatrix(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextcreatematrix">external documentation</a>.
-spec createMatrix(This, [Option]) -> wxGraphicsMatrix:wxGraphicsMatrix() when
This::wxGraphicsContext(),
- Option :: {a, number()}
- | {b, number()}
- | {c, number()}
- | {d, number()}
- | {tx, number()}
- | {ty, number()}.
+ Option :: {'a', number()}
+ | {'b', number()}
+ | {'c', number()}
+ | {'d', number()}
+ | {'tx', number()}
+ | {'ty', number()}.
createMatrix(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -165,7 +165,7 @@ createPath(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextclip">external documentation</a>.
--spec clip(This, Region) -> ok when
+-spec clip(This, Region) -> 'ok' when
This::wxGraphicsContext(), Region::wxRegion:wxRegion().
clip(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RegionT,ref=RegionRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -174,7 +174,7 @@ clip(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RegionT,ref=RegionRef}) ->
<<ThisRef:32/?UI,RegionRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextclip">external documentation</a>.
--spec clip(This, X, Y, W, H) -> ok when
+-spec clip(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), X::number(), Y::number(), W::number(), H::number().
clip(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -183,7 +183,7 @@ clip(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextresetclip">external documentation</a>.
--spec resetClip(This) -> ok when
+-spec resetClip(This) -> 'ok' when
This::wxGraphicsContext().
resetClip(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -191,7 +191,7 @@ resetClip(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawbitmap">external documentation</a>.
--spec drawBitmap(This, Bmp, X, Y, W, H) -> ok when
+-spec drawBitmap(This, Bmp, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), Bmp::wxBitmap:wxBitmap(), X::number(), Y::number(), W::number(), H::number().
drawBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -201,7 +201,7 @@ drawBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},X,Y,W,H
<<ThisRef:32/?UI,BmpRef:32/?UI,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawellipse">external documentation</a>.
--spec drawEllipse(This, X, Y, W, H) -> ok when
+-spec drawEllipse(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), X::number(), Y::number(), W::number(), H::number().
drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -210,7 +210,7 @@ drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawicon">external documentation</a>.
--spec drawIcon(This, Icon, X, Y, W, H) -> ok when
+-spec drawIcon(This, Icon, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), Icon::wxIcon:wxIcon(), X::number(), Y::number(), W::number(), H::number().
drawIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -220,7 +220,7 @@ drawIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef},X,Y,W,H
<<ThisRef:32/?UI,IconRef:32/?UI,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @equiv drawLines(This,Points, [])
--spec drawLines(This, Points) -> ok when
+-spec drawLines(This, Points) -> 'ok' when
This::wxGraphicsContext(), Points::[{X::float(), Y::float()}].
drawLines(This,Points)
@@ -229,9 +229,9 @@ drawLines(This,Points)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawlines">external documentation</a>.
%%<br /> FillStyle = integer
--spec drawLines(This, Points, [Option]) -> ok when
+-spec drawLines(This, Points, [Option]) -> 'ok' when
This::wxGraphicsContext(), Points::[{X::float(), Y::float()}],
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
drawLines(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
when is_list(Points),is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -243,7 +243,7 @@ drawLines(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
(<< <<X:64/?F,Y:64/?F>> || {X,Y} <- Points>>)/binary, BinOpt/binary>>).
%% @equiv drawPath(This,Path, [])
--spec drawPath(This, Path) -> ok when
+-spec drawPath(This, Path) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath().
drawPath(This,Path)
@@ -252,9 +252,9 @@ drawPath(This,Path)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawpath">external documentation</a>.
%%<br /> FillStyle = integer
--spec drawPath(This, Path, [Option]) -> ok when
+-spec drawPath(This, Path, [Option]) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath(),
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
drawPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -266,7 +266,7 @@ drawPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}, Option
<<ThisRef:32/?UI,PathRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawrectangle">external documentation</a>.
--spec drawRectangle(This, X, Y, W, H) -> ok when
+-spec drawRectangle(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), X::number(), Y::number(), W::number(), H::number().
drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -275,7 +275,7 @@ drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawroundedrectangle">external documentation</a>.
--spec drawRoundedRectangle(This, X, Y, W, H, Radius) -> ok when
+-spec drawRoundedRectangle(This, X, Y, W, H, Radius) -> 'ok' when
This::wxGraphicsContext(), X::number(), Y::number(), W::number(), H::number(), Radius::number().
drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H,Radius)
when is_number(X),is_number(Y),is_number(W),is_number(H),is_number(Radius) ->
@@ -284,7 +284,7 @@ drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H,Radius)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F,Radius:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawtext">external documentation</a>.
--spec drawText(This, Str, X, Y) -> ok when
+-spec drawText(This, Str, X, Y) -> 'ok' when
This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number().
drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y)
when is_list(Str),is_number(X),is_number(Y) ->
@@ -295,12 +295,12 @@ drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawtext">external documentation</a>.
%% <br /> Also:<br />
-%% drawText(This, Str, X, Y, BackgroundBrush) -> ok when<br />
+%% drawText(This, Str, X, Y, BackgroundBrush) -> 'ok' when<br />
%% This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number(), BackgroundBrush::wxGraphicsBrush:wxGraphicsBrush().<br />
%%
--spec drawText(This, Str, X, Y, Angle) -> ok when
+-spec drawText(This, Str, X, Y, Angle) -> 'ok' when
This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number(), Angle::number();
- (This, Str, X, Y, BackgroundBrush) -> ok when
+ (This, Str, X, Y, BackgroundBrush) -> 'ok' when
This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number(), BackgroundBrush::wxGraphicsBrush:wxGraphicsBrush().
drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y,Angle)
when is_list(Str),is_number(X),is_number(Y),is_number(Angle) ->
@@ -317,7 +317,7 @@ drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y,#wx_ref{type=BackgroundBrushT,r
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8,X:64/?F,Y:64/?F,BackgroundBrushRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawtext">external documentation</a>.
--spec drawText(This, Str, X, Y, Angle, BackgroundBrush) -> ok when
+-spec drawText(This, Str, X, Y, Angle, BackgroundBrush) -> 'ok' when
This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number(), Angle::number(), BackgroundBrush::wxGraphicsBrush:wxGraphicsBrush().
drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y,Angle,#wx_ref{type=BackgroundBrushT,ref=BackgroundBrushRef})
when is_list(Str),is_number(X),is_number(Y),is_number(Angle) ->
@@ -328,7 +328,7 @@ drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y,Angle,#wx_ref{type=BackgroundBr
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8,X:64/?F,Y:64/?F,Angle:64/?F,BackgroundBrushRef:32/?UI>>).
%% @equiv fillPath(This,Path, [])
--spec fillPath(This, Path) -> ok when
+-spec fillPath(This, Path) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath().
fillPath(This,Path)
@@ -337,9 +337,9 @@ fillPath(This,Path)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextfillpath">external documentation</a>.
%%<br /> FillStyle = integer
--spec fillPath(This, Path, [Option]) -> ok when
+-spec fillPath(This, Path, [Option]) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath(),
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
fillPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -351,7 +351,7 @@ fillPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}, Option
<<ThisRef:32/?UI,PathRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextstrokepath">external documentation</a>.
--spec strokePath(This, Path) -> ok when
+-spec strokePath(This, Path) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath().
strokePath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -381,7 +381,7 @@ getTextExtent(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextrotate">external documentation</a>.
--spec rotate(This, Angle) -> ok when
+-spec rotate(This, Angle) -> 'ok' when
This::wxGraphicsContext(), Angle::number().
rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle)
when is_number(Angle) ->
@@ -390,7 +390,7 @@ rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle)
<<ThisRef:32/?UI,0:32,Angle:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextscale">external documentation</a>.
--spec scale(This, XScale, YScale) -> ok when
+-spec scale(This, XScale, YScale) -> 'ok' when
This::wxGraphicsContext(), XScale::number(), YScale::number().
scale(#wx_ref{type=ThisT,ref=ThisRef},XScale,YScale)
when is_number(XScale),is_number(YScale) ->
@@ -399,7 +399,7 @@ scale(#wx_ref{type=ThisT,ref=ThisRef},XScale,YScale)
<<ThisRef:32/?UI,0:32,XScale:64/?F,YScale:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontexttranslate">external documentation</a>.
--spec translate(This, Dx, Dy) -> ok when
+-spec translate(This, Dx, Dy) -> 'ok' when
This::wxGraphicsContext(), Dx::number(), Dy::number().
translate(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy)
when is_number(Dx),is_number(Dy) ->
@@ -416,7 +416,7 @@ getTransform(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsettransform">external documentation</a>.
--spec setTransform(This, Matrix) -> ok when
+-spec setTransform(This, Matrix) -> 'ok' when
This::wxGraphicsContext(), Matrix::wxGraphicsMatrix:wxGraphicsMatrix().
setTransform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -425,7 +425,7 @@ setTransform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixRef}
<<ThisRef:32/?UI,MatrixRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextconcattransform">external documentation</a>.
--spec concatTransform(This, Matrix) -> ok when
+-spec concatTransform(This, Matrix) -> 'ok' when
This::wxGraphicsContext(), Matrix::wxGraphicsMatrix:wxGraphicsMatrix().
concatTransform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -434,7 +434,7 @@ concatTransform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixR
<<ThisRef:32/?UI,MatrixRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsetbrush">external documentation</a>.
--spec setBrush(This, Brush) -> ok when
+-spec setBrush(This, Brush) -> 'ok' when
This::wxGraphicsContext(), Brush::wxGraphicsBrush:wxGraphicsBrush() | wxBrush:wxBrush().
setBrush(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -448,7 +448,7 @@ setBrush(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
<<ThisRef:32/?UI,BrushRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxGraphicsContext(), Font::wxGraphicsFont:wxGraphicsFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -457,7 +457,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsetfont">external documentation</a>.
--spec setFont(This, Font, Colour) -> ok when
+-spec setFont(This, Font, Colour) -> 'ok' when
This::wxGraphicsContext(), Font::wxFont:wxFont(), Colour::wx:wx_colour().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -467,7 +467,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef},Colour)
<<ThisRef:32/?UI,FontRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsetpen">external documentation</a>.
--spec setPen(This, Pen) -> ok when
+-spec setPen(This, Pen) -> 'ok' when
This::wxGraphicsContext(), Pen::wxPen:wxPen() | wxGraphicsPen:wxGraphicsPen().
setPen(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PenT,ref=PenRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -481,7 +481,7 @@ setPen(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PenT,ref=PenRef}) ->
<<ThisRef:32/?UI,PenRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextstrokeline">external documentation</a>.
--spec strokeLine(This, X1, Y1, X2, Y2) -> ok when
+-spec strokeLine(This, X1, Y1, X2, Y2) -> 'ok' when
This::wxGraphicsContext(), X1::number(), Y1::number(), X2::number(), Y2::number().
strokeLine(#wx_ref{type=ThisT,ref=ThisRef},X1,Y1,X2,Y2)
when is_number(X1),is_number(Y1),is_number(X2),is_number(Y2) ->
@@ -490,7 +490,7 @@ strokeLine(#wx_ref{type=ThisT,ref=ThisRef},X1,Y1,X2,Y2)
<<ThisRef:32/?UI,0:32,X1:64/?F,Y1:64/?F,X2:64/?F,Y2:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextstrokelines">external documentation</a>.
--spec strokeLines(This, Points) -> ok when
+-spec strokeLines(This, Points) -> 'ok' when
This::wxGraphicsContext(), Points::[{X::float(), Y::float()}].
strokeLines(#wx_ref{type=ThisT,ref=ThisRef},Points)
when is_list(Points) ->
@@ -500,7 +500,7 @@ strokeLines(#wx_ref{type=ThisT,ref=ThisRef},Points)
(<< <<X:64/?F,Y:64/?F>> || {X,Y} <- Points>>)/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGraphicsContext()) -> ok.
+-spec destroy(This::wxGraphicsContext()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGraphicsContext),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGraphicsFont.erl b/lib/wx/src/gen/wxGraphicsFont.erl
index b41d018269..d3832b4cdf 100644
--- a/lib/wx/src/gen/wxGraphicsFont.erl
+++ b/lib/wx/src/gen/wxGraphicsFont.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxGraphicsMatrix.erl b/lib/wx/src/gen/wxGraphicsMatrix.erl
index c513b99954..d388643ef7 100644
--- a/lib/wx/src/gen/wxGraphicsMatrix.erl
+++ b/lib/wx/src/gen/wxGraphicsMatrix.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -41,7 +41,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGraphicsMatrix() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixconcat">external documentation</a>.
--spec concat(This, T) -> ok when
+-spec concat(This, T) -> 'ok' when
This::wxGraphicsMatrix(), T::wxGraphicsMatrix().
concat(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=TT,ref=TRef}) ->
?CLASS(ThisT,wxGraphicsMatrix),
@@ -59,7 +59,7 @@ get(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixinvert">external documentation</a>.
--spec invert(This) -> ok when
+-spec invert(This) -> 'ok' when
This::wxGraphicsMatrix().
invert(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGraphicsMatrix),
@@ -84,7 +84,7 @@ isIdentity(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixrotate">external documentation</a>.
--spec rotate(This, Angle) -> ok when
+-spec rotate(This, Angle) -> 'ok' when
This::wxGraphicsMatrix(), Angle::number().
rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle)
when is_number(Angle) ->
@@ -93,7 +93,7 @@ rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle)
<<ThisRef:32/?UI,0:32,Angle:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixscale">external documentation</a>.
--spec scale(This, XScale, YScale) -> ok when
+-spec scale(This, XScale, YScale) -> 'ok' when
This::wxGraphicsMatrix(), XScale::number(), YScale::number().
scale(#wx_ref{type=ThisT,ref=ThisRef},XScale,YScale)
when is_number(XScale),is_number(YScale) ->
@@ -102,7 +102,7 @@ scale(#wx_ref{type=ThisT,ref=ThisRef},XScale,YScale)
<<ThisRef:32/?UI,0:32,XScale:64/?F,YScale:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixtranslate">external documentation</a>.
--spec translate(This, Dx, Dy) -> ok when
+-spec translate(This, Dx, Dy) -> 'ok' when
This::wxGraphicsMatrix(), Dx::number(), Dy::number().
translate(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy)
when is_number(Dx),is_number(Dy) ->
@@ -111,7 +111,7 @@ translate(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy)
<<ThisRef:32/?UI,0:32,Dx:64/?F,Dy:64/?F>>).
%% @equiv set(This, [])
--spec set(This) -> ok when
+-spec set(This) -> 'ok' when
This::wxGraphicsMatrix().
set(This)
@@ -119,14 +119,14 @@ set(This)
set(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixset">external documentation</a>.
--spec set(This, [Option]) -> ok when
+-spec set(This, [Option]) -> 'ok' when
This::wxGraphicsMatrix(),
- Option :: {a, number()}
- | {b, number()}
- | {c, number()}
- | {d, number()}
- | {tx, number()}
- | {ty, number()}.
+ Option :: {'a', number()}
+ | {'b', number()}
+ | {'c', number()}
+ | {'d', number()}
+ | {'tx', number()}
+ | {'ty', number()}.
set(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsMatrix),
diff --git a/lib/wx/src/gen/wxGraphicsObject.erl b/lib/wx/src/gen/wxGraphicsObject.erl
index abb4d6dc2d..8657b8d2eb 100644
--- a/lib/wx/src/gen/wxGraphicsObject.erl
+++ b/lib/wx/src/gen/wxGraphicsObject.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ isNull(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGraphicsObject()) -> ok.
+-spec destroy(This::wxGraphicsObject()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGraphicsObject),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGraphicsPath.erl b/lib/wx/src/gen/wxGraphicsPath.erl
index 6d65093775..266271d537 100644
--- a/lib/wx/src/gen/wxGraphicsPath.erl
+++ b/lib/wx/src/gen/wxGraphicsPath.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGraphicsPath() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathmovetopoint">external documentation</a>.
--spec moveToPoint(This, P) -> ok when
+-spec moveToPoint(This, P) -> 'ok' when
This::wxGraphicsPath(), P::{X::float(), Y::float()}.
moveToPoint(#wx_ref{type=ThisT,ref=ThisRef},{PX,PY})
when is_number(PX),is_number(PY) ->
@@ -53,7 +53,7 @@ moveToPoint(#wx_ref{type=ThisT,ref=ThisRef},{PX,PY})
<<ThisRef:32/?UI,0:32,PX:64/?F,PY:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathmovetopoint">external documentation</a>.
--spec moveToPoint(This, X, Y) -> ok when
+-spec moveToPoint(This, X, Y) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number().
moveToPoint(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_number(X),is_number(Y) ->
@@ -62,7 +62,7 @@ moveToPoint(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddarc">external documentation</a>.
--spec addArc(This, C, R, StartAngle, EndAngle, Clockwise) -> ok when
+-spec addArc(This, C, R, StartAngle, EndAngle, Clockwise) -> 'ok' when
This::wxGraphicsPath(), C::{X::float(), Y::float()}, R::number(), StartAngle::number(), EndAngle::number(), Clockwise::boolean().
addArc(#wx_ref{type=ThisT,ref=ThisRef},{CX,CY},R,StartAngle,EndAngle,Clockwise)
when is_number(CX),is_number(CY),is_number(R),is_number(StartAngle),is_number(EndAngle),is_boolean(Clockwise) ->
@@ -71,7 +71,7 @@ addArc(#wx_ref{type=ThisT,ref=ThisRef},{CX,CY},R,StartAngle,EndAngle,Clockwise)
<<ThisRef:32/?UI,0:32,CX:64/?F,CY:64/?F,R:64/?F,StartAngle:64/?F,EndAngle:64/?F,(wxe_util:from_bool(Clockwise)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddarc">external documentation</a>.
--spec addArc(This, X, Y, R, StartAngle, EndAngle, Clockwise) -> ok when
+-spec addArc(This, X, Y, R, StartAngle, EndAngle, Clockwise) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), R::number(), StartAngle::number(), EndAngle::number(), Clockwise::boolean().
addArc(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R,StartAngle,EndAngle,Clockwise)
when is_number(X),is_number(Y),is_number(R),is_number(StartAngle),is_number(EndAngle),is_boolean(Clockwise) ->
@@ -80,7 +80,7 @@ addArc(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R,StartAngle,EndAngle,Clockwise)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,R:64/?F,StartAngle:64/?F,EndAngle:64/?F,(wxe_util:from_bool(Clockwise)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddarctopoint">external documentation</a>.
--spec addArcToPoint(This, X1, Y1, X2, Y2, R) -> ok when
+-spec addArcToPoint(This, X1, Y1, X2, Y2, R) -> 'ok' when
This::wxGraphicsPath(), X1::number(), Y1::number(), X2::number(), Y2::number(), R::number().
addArcToPoint(#wx_ref{type=ThisT,ref=ThisRef},X1,Y1,X2,Y2,R)
when is_number(X1),is_number(Y1),is_number(X2),is_number(Y2),is_number(R) ->
@@ -89,7 +89,7 @@ addArcToPoint(#wx_ref{type=ThisT,ref=ThisRef},X1,Y1,X2,Y2,R)
<<ThisRef:32/?UI,0:32,X1:64/?F,Y1:64/?F,X2:64/?F,Y2:64/?F,R:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddcircle">external documentation</a>.
--spec addCircle(This, X, Y, R) -> ok when
+-spec addCircle(This, X, Y, R) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), R::number().
addCircle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R)
when is_number(X),is_number(Y),is_number(R) ->
@@ -98,7 +98,7 @@ addCircle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,R:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddcurvetopoint">external documentation</a>.
--spec addCurveToPoint(This, C1, C2, E) -> ok when
+-spec addCurveToPoint(This, C1, C2, E) -> 'ok' when
This::wxGraphicsPath(), C1::{X::float(), Y::float()}, C2::{X::float(), Y::float()}, E::{X::float(), Y::float()}.
addCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},{C1X,C1Y},{C2X,C2Y},{EX,EY})
when is_number(C1X),is_number(C1Y),is_number(C2X),is_number(C2Y),is_number(EX),is_number(EY) ->
@@ -107,7 +107,7 @@ addCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},{C1X,C1Y},{C2X,C2Y},{EX,EY})
<<ThisRef:32/?UI,0:32,C1X:64/?F,C1Y:64/?F,C2X:64/?F,C2Y:64/?F,EX:64/?F,EY:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddcurvetopoint">external documentation</a>.
--spec addCurveToPoint(This, Cx1, Cy1, Cx2, Cy2, X, Y) -> ok when
+-spec addCurveToPoint(This, Cx1, Cy1, Cx2, Cy2, X, Y) -> 'ok' when
This::wxGraphicsPath(), Cx1::number(), Cy1::number(), Cx2::number(), Cy2::number(), X::number(), Y::number().
addCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},Cx1,Cy1,Cx2,Cy2,X,Y)
when is_number(Cx1),is_number(Cy1),is_number(Cx2),is_number(Cy2),is_number(X),is_number(Y) ->
@@ -116,7 +116,7 @@ addCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},Cx1,Cy1,Cx2,Cy2,X,Y)
<<ThisRef:32/?UI,0:32,Cx1:64/?F,Cy1:64/?F,Cx2:64/?F,Cy2:64/?F,X:64/?F,Y:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddellipse">external documentation</a>.
--spec addEllipse(This, X, Y, W, H) -> ok when
+-spec addEllipse(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), W::number(), H::number().
addEllipse(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -125,7 +125,7 @@ addEllipse(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddlinetopoint">external documentation</a>.
--spec addLineToPoint(This, P) -> ok when
+-spec addLineToPoint(This, P) -> 'ok' when
This::wxGraphicsPath(), P::{X::float(), Y::float()}.
addLineToPoint(#wx_ref{type=ThisT,ref=ThisRef},{PX,PY})
when is_number(PX),is_number(PY) ->
@@ -134,7 +134,7 @@ addLineToPoint(#wx_ref{type=ThisT,ref=ThisRef},{PX,PY})
<<ThisRef:32/?UI,0:32,PX:64/?F,PY:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddlinetopoint">external documentation</a>.
--spec addLineToPoint(This, X, Y) -> ok when
+-spec addLineToPoint(This, X, Y) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number().
addLineToPoint(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_number(X),is_number(Y) ->
@@ -143,7 +143,7 @@ addLineToPoint(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddpath">external documentation</a>.
--spec addPath(This, Path) -> ok when
+-spec addPath(This, Path) -> 'ok' when
This::wxGraphicsPath(), Path::wxGraphicsPath().
addPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}) ->
?CLASS(ThisT,wxGraphicsPath),
@@ -152,7 +152,7 @@ addPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}) ->
<<ThisRef:32/?UI,PathRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddquadcurvetopoint">external documentation</a>.
--spec addQuadCurveToPoint(This, Cx, Cy, X, Y) -> ok when
+-spec addQuadCurveToPoint(This, Cx, Cy, X, Y) -> 'ok' when
This::wxGraphicsPath(), Cx::number(), Cy::number(), X::number(), Y::number().
addQuadCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},Cx,Cy,X,Y)
when is_number(Cx),is_number(Cy),is_number(X),is_number(Y) ->
@@ -161,7 +161,7 @@ addQuadCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},Cx,Cy,X,Y)
<<ThisRef:32/?UI,0:32,Cx:64/?F,Cy:64/?F,X:64/?F,Y:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddrectangle">external documentation</a>.
--spec addRectangle(This, X, Y, W, H) -> ok when
+-spec addRectangle(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), W::number(), H::number().
addRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -170,7 +170,7 @@ addRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddroundedrectangle">external documentation</a>.
--spec addRoundedRectangle(This, X, Y, W, H, Radius) -> ok when
+-spec addRoundedRectangle(This, X, Y, W, H, Radius) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), W::number(), H::number(), Radius::number().
addRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H,Radius)
when is_number(X),is_number(Y),is_number(W),is_number(H),is_number(Radius) ->
@@ -179,7 +179,7 @@ addRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H,Radius)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F,Radius:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathclosesubpath">external documentation</a>.
--spec closeSubpath(This) -> ok when
+-spec closeSubpath(This) -> 'ok' when
This::wxGraphicsPath().
closeSubpath(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGraphicsPath),
@@ -198,14 +198,14 @@ contains(This,C={CX,CY})
%% <br /> Also:<br />
%% contains(This, C, [Option]) -> boolean() when<br />
%% This::wxGraphicsPath(), C::{X::float(), Y::float()},<br />
-%% Option :: {fillStyle, wx:wx_enum()}.<br />
+%% Option :: {'fillStyle', wx:wx_enum()}.<br />
%%
%%<br /> FillStyle = integer
-spec contains(This, X, Y) -> boolean() when
This::wxGraphicsPath(), X::number(), Y::number();
(This, C, [Option]) -> boolean() when
This::wxGraphicsPath(), C::{X::float(), Y::float()},
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
contains(This,X,Y)
when is_record(This, wx_ref),is_number(X),is_number(Y) ->
@@ -223,7 +223,7 @@ contains(#wx_ref{type=ThisT,ref=ThisRef},{CX,CY}, Options)
%%<br /> FillStyle = integer
-spec contains(This, X, Y, [Option]) -> boolean() when
This::wxGraphicsPath(), X::number(), Y::number(),
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
contains(#wx_ref{type=ThisT,ref=ThisRef},X,Y, Options)
when is_number(X),is_number(Y),is_list(Options) ->
?CLASS(ThisT,wxGraphicsPath),
@@ -250,7 +250,7 @@ getCurrentPoint(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathtransform">external documentation</a>.
--spec transform(This, Matrix) -> ok when
+-spec transform(This, Matrix) -> 'ok' when
This::wxGraphicsPath(), Matrix::wxGraphicsMatrix:wxGraphicsMatrix().
transform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixRef}) ->
?CLASS(ThisT,wxGraphicsPath),
diff --git a/lib/wx/src/gen/wxGraphicsPen.erl b/lib/wx/src/gen/wxGraphicsPen.erl
index 48f995e887..fa6283539e 100644
--- a/lib/wx/src/gen/wxGraphicsPen.erl
+++ b/lib/wx/src/gen/wxGraphicsPen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxGraphicsRenderer.erl b/lib/wx/src/gen/wxGraphicsRenderer.erl
index b4f50e35fe..a1b67476e3 100644
--- a/lib/wx/src/gen/wxGraphicsRenderer.erl
+++ b/lib/wx/src/gen/wxGraphicsRenderer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -106,7 +106,7 @@ createFont(This,Font)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsrenderer.html#wxgraphicsrenderercreatefont">external documentation</a>.
-spec createFont(This, Font, [Option]) -> wxGraphicsFont:wxGraphicsFont() when
This::wxGraphicsRenderer(), Font::wxFont:wxFont(),
- Option :: {col, wx:wx_colour()}.
+ Option :: {'col', wx:wx_colour()}.
createFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsRenderer),
@@ -128,12 +128,12 @@ createMatrix(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsrenderer.html#wxgraphicsrenderercreatematrix">external documentation</a>.
-spec createMatrix(This, [Option]) -> wxGraphicsMatrix:wxGraphicsMatrix() when
This::wxGraphicsRenderer(),
- Option :: {a, number()}
- | {b, number()}
- | {c, number()}
- | {d, number()}
- | {tx, number()}
- | {ty, number()}.
+ Option :: {'a', number()}
+ | {'b', number()}
+ | {'c', number()}
+ | {'d', number()}
+ | {'tx', number()}
+ | {'ty', number()}.
createMatrix(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsRenderer),
diff --git a/lib/wx/src/gen/wxGrid.erl b/lib/wx/src/gen/wxGrid.erl
index 49bd89f188..a1533cbd9f 100644
--- a/lib/wx/src/gen/wxGrid.erl
+++ b/lib/wx/src/gen/wxGrid.erl
@@ -154,17 +154,17 @@ new(Parent,Id)
%% <br /> Also:<br />
%% new(Parent, Id, [Option]) -> wxGrid() when<br />
%% Parent::wxWindow:wxWindow(), Id::integer(),<br />
-%% Option :: {pos, {X::integer(), Y::integer()}}<br />
-%% | {size, {W::integer(), H::integer()}}<br />
-%% | {style, integer()}.<br />
+%% Option :: {'pos', {X::integer(), Y::integer()}}<br />
+%% | {'size', {W::integer(), H::integer()}}<br />
+%% | {'style', integer()}.<br />
%%
-spec new(Parent, X, Y) -> wxGrid() when
Parent::wxWindow:wxWindow(), X::integer(), Y::integer();
(Parent, Id, [Option]) -> wxGrid() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(Parent,X,Y)
when is_record(Parent, wx_ref),is_integer(X),is_integer(Y) ->
@@ -183,9 +183,9 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridwxgrid">external documentation</a>.
-spec new(Parent, X, Y, [Option]) -> wxGrid() when
Parent::wxWindow:wxWindow(), X::integer(), Y::integer(),
- Option :: {w, integer()}
- | {h, integer()}
- | {style, integer()}.
+ Option :: {'w', integer()}
+ | {'h', integer()}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},X,Y, Options)
when is_integer(X),is_integer(Y),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -208,8 +208,8 @@ appendCols(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridappendcols">external documentation</a>.
-spec appendCols(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {numCols, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'numCols', integer()}
+ | {'updateLabels', boolean()}.
appendCols(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -231,8 +231,8 @@ appendRows(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridappendrows">external documentation</a>.
-spec appendRows(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {numRows, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'numRows', integer()}
+ | {'updateLabels', boolean()}.
appendRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -244,7 +244,7 @@ appendRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosize">external documentation</a>.
--spec autoSize(This) -> ok when
+-spec autoSize(This) -> 'ok' when
This::wxGrid().
autoSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -252,7 +252,7 @@ autoSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv autoSizeColumn(This,Col, [])
--spec autoSizeColumn(This, Col) -> ok when
+-spec autoSizeColumn(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
autoSizeColumn(This,Col)
@@ -260,9 +260,9 @@ autoSizeColumn(This,Col)
autoSizeColumn(This,Col, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosizecolumn">external documentation</a>.
--spec autoSizeColumn(This, Col, [Option]) -> ok when
+-spec autoSizeColumn(This, Col, [Option]) -> 'ok' when
This::wxGrid(), Col::integer(),
- Option :: {setAsMin, boolean()}.
+ Option :: {'setAsMin', boolean()}.
autoSizeColumn(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
when is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -273,7 +273,7 @@ autoSizeColumn(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
<<ThisRef:32/?UI,Col:32/?UI, BinOpt/binary>>).
%% @equiv autoSizeColumns(This, [])
--spec autoSizeColumns(This) -> ok when
+-spec autoSizeColumns(This) -> 'ok' when
This::wxGrid().
autoSizeColumns(This)
@@ -281,9 +281,9 @@ autoSizeColumns(This)
autoSizeColumns(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosizecolumns">external documentation</a>.
--spec autoSizeColumns(This, [Option]) -> ok when
+-spec autoSizeColumns(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {setAsMin, boolean()}.
+ Option :: {'setAsMin', boolean()}.
autoSizeColumns(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -294,7 +294,7 @@ autoSizeColumns(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv autoSizeRow(This,Row, [])
--spec autoSizeRow(This, Row) -> ok when
+-spec autoSizeRow(This, Row) -> 'ok' when
This::wxGrid(), Row::integer().
autoSizeRow(This,Row)
@@ -302,9 +302,9 @@ autoSizeRow(This,Row)
autoSizeRow(This,Row, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosizerow">external documentation</a>.
--spec autoSizeRow(This, Row, [Option]) -> ok when
+-spec autoSizeRow(This, Row, [Option]) -> 'ok' when
This::wxGrid(), Row::integer(),
- Option :: {setAsMin, boolean()}.
+ Option :: {'setAsMin', boolean()}.
autoSizeRow(#wx_ref{type=ThisT,ref=ThisRef},Row, Options)
when is_integer(Row),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -315,7 +315,7 @@ autoSizeRow(#wx_ref{type=ThisT,ref=ThisRef},Row, Options)
<<ThisRef:32/?UI,Row:32/?UI, BinOpt/binary>>).
%% @equiv autoSizeRows(This, [])
--spec autoSizeRows(This) -> ok when
+-spec autoSizeRows(This) -> 'ok' when
This::wxGrid().
autoSizeRows(This)
@@ -323,9 +323,9 @@ autoSizeRows(This)
autoSizeRows(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosizerows">external documentation</a>.
--spec autoSizeRows(This, [Option]) -> ok when
+-spec autoSizeRows(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {setAsMin, boolean()}.
+ Option :: {'setAsMin', boolean()}.
autoSizeRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -336,7 +336,7 @@ autoSizeRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridbeginbatch">external documentation</a>.
--spec beginBatch(This) -> ok when
+-spec beginBatch(This) -> 'ok' when
This::wxGrid().
beginBatch(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -403,7 +403,7 @@ cellToRect(#wx_ref{type=ThisT,ref=ThisRef},Row,Col)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridcleargrid">external documentation</a>.
--spec clearGrid(This) -> ok when
+-spec clearGrid(This) -> 'ok' when
This::wxGrid().
clearGrid(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -411,7 +411,7 @@ clearGrid(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridclearselection">external documentation</a>.
--spec clearSelection(This) -> ok when
+-spec clearSelection(This) -> 'ok' when
This::wxGrid().
clearSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -430,7 +430,7 @@ createGrid(This,NumRows,NumCols)
%%<br /> Selmode = ?wxGrid_wxGridSelectCells | ?wxGrid_wxGridSelectRows | ?wxGrid_wxGridSelectColumns
-spec createGrid(This, NumRows, NumCols, [Option]) -> boolean() when
This::wxGrid(), NumRows::integer(), NumCols::integer(),
- Option :: {selmode, wx:wx_enum()}.
+ Option :: {'selmode', wx:wx_enum()}.
createGrid(#wx_ref{type=ThisT,ref=ThisRef},NumRows,NumCols, Options)
when is_integer(NumRows),is_integer(NumCols),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -451,9 +451,9 @@ deleteCols(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddeletecols">external documentation</a>.
-spec deleteCols(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {pos, integer()}
- | {numCols, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'pos', integer()}
+ | {'numCols', integer()}
+ | {'updateLabels', boolean()}.
deleteCols(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -476,9 +476,9 @@ deleteRows(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddeleterows">external documentation</a>.
-spec deleteRows(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {pos, integer()}
- | {numRows, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'pos', integer()}
+ | {'numRows', integer()}
+ | {'updateLabels', boolean()}.
deleteRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -491,7 +491,7 @@ deleteRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddisablecelleditcontrol">external documentation</a>.
--spec disableCellEditControl(This) -> ok when
+-spec disableCellEditControl(This) -> 'ok' when
This::wxGrid().
disableCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -499,7 +499,7 @@ disableCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddisabledragcolsize">external documentation</a>.
--spec disableDragColSize(This) -> ok when
+-spec disableDragColSize(This) -> 'ok' when
This::wxGrid().
disableDragColSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -507,7 +507,7 @@ disableDragColSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddisabledraggridsize">external documentation</a>.
--spec disableDragGridSize(This) -> ok when
+-spec disableDragGridSize(This) -> 'ok' when
This::wxGrid().
disableDragGridSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -515,7 +515,7 @@ disableDragGridSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddisabledragrowsize">external documentation</a>.
--spec disableDragRowSize(This) -> ok when
+-spec disableDragRowSize(This) -> 'ok' when
This::wxGrid().
disableDragRowSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -523,7 +523,7 @@ disableDragRowSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv enableCellEditControl(This, [])
--spec enableCellEditControl(This) -> ok when
+-spec enableCellEditControl(This) -> 'ok' when
This::wxGrid().
enableCellEditControl(This)
@@ -531,9 +531,9 @@ enableCellEditControl(This)
enableCellEditControl(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenablecelleditcontrol">external documentation</a>.
--spec enableCellEditControl(This, [Option]) -> ok when
+-spec enableCellEditControl(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -544,7 +544,7 @@ enableCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableDragColSize(This, [])
--spec enableDragColSize(This) -> ok when
+-spec enableDragColSize(This) -> 'ok' when
This::wxGrid().
enableDragColSize(This)
@@ -552,9 +552,9 @@ enableDragColSize(This)
enableDragColSize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenabledragcolsize">external documentation</a>.
--spec enableDragColSize(This, [Option]) -> ok when
+-spec enableDragColSize(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableDragColSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -565,7 +565,7 @@ enableDragColSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableDragGridSize(This, [])
--spec enableDragGridSize(This) -> ok when
+-spec enableDragGridSize(This) -> 'ok' when
This::wxGrid().
enableDragGridSize(This)
@@ -573,9 +573,9 @@ enableDragGridSize(This)
enableDragGridSize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenabledraggridsize">external documentation</a>.
--spec enableDragGridSize(This, [Option]) -> ok when
+-spec enableDragGridSize(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableDragGridSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -586,7 +586,7 @@ enableDragGridSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableDragRowSize(This, [])
--spec enableDragRowSize(This) -> ok when
+-spec enableDragRowSize(This) -> 'ok' when
This::wxGrid().
enableDragRowSize(This)
@@ -594,9 +594,9 @@ enableDragRowSize(This)
enableDragRowSize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenabledragrowsize">external documentation</a>.
--spec enableDragRowSize(This, [Option]) -> ok when
+-spec enableDragRowSize(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableDragRowSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -607,7 +607,7 @@ enableDragRowSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenableediting">external documentation</a>.
--spec enableEditing(This, Edit) -> ok when
+-spec enableEditing(This, Edit) -> 'ok' when
This::wxGrid(), Edit::boolean().
enableEditing(#wx_ref{type=ThisT,ref=ThisRef},Edit)
when is_boolean(Edit) ->
@@ -616,7 +616,7 @@ enableEditing(#wx_ref{type=ThisT,ref=ThisRef},Edit)
<<ThisRef:32/?UI,(wxe_util:from_bool(Edit)):32/?UI>>).
%% @equiv enableGridLines(This, [])
--spec enableGridLines(This) -> ok when
+-spec enableGridLines(This) -> 'ok' when
This::wxGrid().
enableGridLines(This)
@@ -624,9 +624,9 @@ enableGridLines(This)
enableGridLines(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenablegridlines">external documentation</a>.
--spec enableGridLines(This, [Option]) -> ok when
+-spec enableGridLines(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableGridLines(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -637,7 +637,7 @@ enableGridLines(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridendbatch">external documentation</a>.
--spec endBatch(This) -> ok when
+-spec endBatch(This) -> 'ok' when
This::wxGrid().
endBatch(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -645,7 +645,7 @@ endBatch(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridfit">external documentation</a>.
--spec fit(This) -> ok when
+-spec fit(This) -> 'ok' when
This::wxGrid().
fit(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -653,7 +653,7 @@ fit(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridforcerefresh">external documentation</a>.
--spec forceRefresh(This) -> ok when
+-spec forceRefresh(This) -> 'ok' when
This::wxGrid().
forceRefresh(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1136,7 +1136,7 @@ getGridCornerLabelWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridhidecelleditcontrol">external documentation</a>.
--spec hideCellEditControl(This) -> ok when
+-spec hideCellEditControl(This) -> 'ok' when
This::wxGrid().
hideCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1154,9 +1154,9 @@ insertCols(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridinsertcols">external documentation</a>.
-spec insertCols(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {pos, integer()}
- | {numCols, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'pos', integer()}
+ | {'numCols', integer()}
+ | {'updateLabels', boolean()}.
insertCols(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1179,9 +1179,9 @@ insertRows(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridinsertrows">external documentation</a>.
-spec insertRows(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {pos, integer()}
- | {numRows, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'pos', integer()}
+ | {'numRows', integer()}
+ | {'updateLabels', boolean()}.
insertRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1264,13 +1264,13 @@ isVisible(This,Coords={CoordsR,CoordsC})
%% <br /> Also:<br />
%% isVisible(This, Coords, [Option]) -> boolean() when<br />
%% This::wxGrid(), Coords::{R::integer(), C::integer()},<br />
-%% Option :: {wholeCellVisible, boolean()}.<br />
+%% Option :: {'wholeCellVisible', boolean()}.<br />
%%
-spec isVisible(This, Row, Col) -> boolean() when
This::wxGrid(), Row::integer(), Col::integer();
(This, Coords, [Option]) -> boolean() when
This::wxGrid(), Coords::{R::integer(), C::integer()},
- Option :: {wholeCellVisible, boolean()}.
+ Option :: {'wholeCellVisible', boolean()}.
isVisible(This,Row,Col)
when is_record(This, wx_ref),is_integer(Row),is_integer(Col) ->
@@ -1287,7 +1287,7 @@ isVisible(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridisvisible">external documentation</a>.
-spec isVisible(This, Row, Col, [Option]) -> boolean() when
This::wxGrid(), Row::integer(), Col::integer(),
- Option :: {wholeCellVisible, boolean()}.
+ Option :: {'wholeCellVisible', boolean()}.
isVisible(#wx_ref{type=ThisT,ref=ThisRef},Row,Col, Options)
when is_integer(Row),is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1298,7 +1298,7 @@ isVisible(#wx_ref{type=ThisT,ref=ThisRef},Row,Col, Options)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridmakecellvisible">external documentation</a>.
--spec makeCellVisible(This, Coords) -> ok when
+-spec makeCellVisible(This, Coords) -> 'ok' when
This::wxGrid(), Coords::{R::integer(), C::integer()}.
makeCellVisible(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC})
when is_integer(CoordsR),is_integer(CoordsC) ->
@@ -1307,7 +1307,7 @@ makeCellVisible(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC})
<<ThisRef:32/?UI,CoordsR:32/?UI,CoordsC:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridmakecellvisible">external documentation</a>.
--spec makeCellVisible(This, Row, Col) -> ok when
+-spec makeCellVisible(This, Row, Col) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer().
makeCellVisible(#wx_ref{type=ThisT,ref=ThisRef},Row,Col)
when is_integer(Row),is_integer(Col) ->
@@ -1404,7 +1404,7 @@ movePageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridregisterdatatype">external documentation</a>.
--spec registerDataType(This, TypeName, Renderer, Editor) -> ok when
+-spec registerDataType(This, TypeName, Renderer, Editor) -> 'ok' when
This::wxGrid(), TypeName::unicode:chardata(), Renderer::wxGridCellRenderer:wxGridCellRenderer(), Editor::wxGridCellEditor:wxGridCellEditor().
registerDataType(#wx_ref{type=ThisT,ref=ThisRef},TypeName,#wx_ref{type=RendererT,ref=RendererRef},#wx_ref{type=EditorT,ref=EditorRef})
when is_list(TypeName) ->
@@ -1416,7 +1416,7 @@ registerDataType(#wx_ref{type=ThisT,ref=ThisRef},TypeName,#wx_ref{type=RendererT
<<ThisRef:32/?UI,(byte_size(TypeName_UC)):32/?UI,(TypeName_UC)/binary, 0:(((8- ((0+byte_size(TypeName_UC)) band 16#7)) band 16#7))/unit:8,RendererRef:32/?UI,EditorRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsaveeditcontrolvalue">external documentation</a>.
--spec saveEditControlValue(This) -> ok when
+-spec saveEditControlValue(This) -> 'ok' when
This::wxGrid().
saveEditControlValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1424,7 +1424,7 @@ saveEditControlValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectall">external documentation</a>.
--spec selectAll(This) -> ok when
+-spec selectAll(This) -> 'ok' when
This::wxGrid().
selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1432,7 +1432,7 @@ selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv selectBlock(This,TopLeft,BottomRight, [])
--spec selectBlock(This, TopLeft, BottomRight) -> ok when
+-spec selectBlock(This, TopLeft, BottomRight) -> 'ok' when
This::wxGrid(), TopLeft::{R::integer(), C::integer()}, BottomRight::{R::integer(), C::integer()}.
selectBlock(This,TopLeft={TopLeftR,TopLeftC},BottomRight={BottomRightR,BottomRightC})
@@ -1440,9 +1440,9 @@ selectBlock(This,TopLeft={TopLeftR,TopLeftC},BottomRight={BottomRightR,BottomRig
selectBlock(This,TopLeft,BottomRight, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectblock">external documentation</a>.
--spec selectBlock(This, TopLeft, BottomRight, [Option]) -> ok when
+-spec selectBlock(This, TopLeft, BottomRight, [Option]) -> 'ok' when
This::wxGrid(), TopLeft::{R::integer(), C::integer()}, BottomRight::{R::integer(), C::integer()},
- Option :: {addToSelected, boolean()}.
+ Option :: {'addToSelected', boolean()}.
selectBlock(#wx_ref{type=ThisT,ref=ThisRef},{TopLeftR,TopLeftC},{BottomRightR,BottomRightC}, Options)
when is_integer(TopLeftR),is_integer(TopLeftC),is_integer(BottomRightR),is_integer(BottomRightC),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1453,7 +1453,7 @@ selectBlock(#wx_ref{type=ThisT,ref=ThisRef},{TopLeftR,TopLeftC},{BottomRightR,Bo
<<ThisRef:32/?UI,TopLeftR:32/?UI,TopLeftC:32/?UI,BottomRightR:32/?UI,BottomRightC:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv selectBlock(This,TopRow,LeftCol,BottomRow,RightCol, [])
--spec selectBlock(This, TopRow, LeftCol, BottomRow, RightCol) -> ok when
+-spec selectBlock(This, TopRow, LeftCol, BottomRow, RightCol) -> 'ok' when
This::wxGrid(), TopRow::integer(), LeftCol::integer(), BottomRow::integer(), RightCol::integer().
selectBlock(This,TopRow,LeftCol,BottomRow,RightCol)
@@ -1461,9 +1461,9 @@ selectBlock(This,TopRow,LeftCol,BottomRow,RightCol)
selectBlock(This,TopRow,LeftCol,BottomRow,RightCol, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectblock">external documentation</a>.
--spec selectBlock(This, TopRow, LeftCol, BottomRow, RightCol, [Option]) -> ok when
+-spec selectBlock(This, TopRow, LeftCol, BottomRow, RightCol, [Option]) -> 'ok' when
This::wxGrid(), TopRow::integer(), LeftCol::integer(), BottomRow::integer(), RightCol::integer(),
- Option :: {addToSelected, boolean()}.
+ Option :: {'addToSelected', boolean()}.
selectBlock(#wx_ref{type=ThisT,ref=ThisRef},TopRow,LeftCol,BottomRow,RightCol, Options)
when is_integer(TopRow),is_integer(LeftCol),is_integer(BottomRow),is_integer(RightCol),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1474,7 +1474,7 @@ selectBlock(#wx_ref{type=ThisT,ref=ThisRef},TopRow,LeftCol,BottomRow,RightCol, O
<<ThisRef:32/?UI,TopRow:32/?UI,LeftCol:32/?UI,BottomRow:32/?UI,RightCol:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv selectCol(This,Col, [])
--spec selectCol(This, Col) -> ok when
+-spec selectCol(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
selectCol(This,Col)
@@ -1482,9 +1482,9 @@ selectCol(This,Col)
selectCol(This,Col, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectcol">external documentation</a>.
--spec selectCol(This, Col, [Option]) -> ok when
+-spec selectCol(This, Col, [Option]) -> 'ok' when
This::wxGrid(), Col::integer(),
- Option :: {addToSelected, boolean()}.
+ Option :: {'addToSelected', boolean()}.
selectCol(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
when is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1495,7 +1495,7 @@ selectCol(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
<<ThisRef:32/?UI,Col:32/?UI, BinOpt/binary>>).
%% @equiv selectRow(This,Row, [])
--spec selectRow(This, Row) -> ok when
+-spec selectRow(This, Row) -> 'ok' when
This::wxGrid(), Row::integer().
selectRow(This,Row)
@@ -1503,9 +1503,9 @@ selectRow(This,Row)
selectRow(This,Row, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectrow">external documentation</a>.
--spec selectRow(This, Row, [Option]) -> ok when
+-spec selectRow(This, Row, [Option]) -> 'ok' when
This::wxGrid(), Row::integer(),
- Option :: {addToSelected, boolean()}.
+ Option :: {'addToSelected', boolean()}.
selectRow(#wx_ref{type=ThisT,ref=ThisRef},Row, Options)
when is_integer(Row),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1516,7 +1516,7 @@ selectRow(#wx_ref{type=ThisT,ref=ThisRef},Row, Options)
<<ThisRef:32/?UI,Row:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellalignment">external documentation</a>.
--spec setCellAlignment(This, Align) -> ok when
+-spec setCellAlignment(This, Align) -> 'ok' when
This::wxGrid(), Align::integer().
setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align)
when is_integer(Align) ->
@@ -1525,7 +1525,7 @@ setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align)
<<ThisRef:32/?UI,Align:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellalignment">external documentation</a>.
--spec setCellAlignment(This, Align, Row, Col) -> ok when
+-spec setCellAlignment(This, Align, Row, Col) -> 'ok' when
This::wxGrid(), Align::integer(), Row::integer(), Col::integer().
setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align,Row,Col)
when is_integer(Align),is_integer(Row),is_integer(Col) ->
@@ -1534,7 +1534,7 @@ setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align,Row,Col)
<<ThisRef:32/?UI,Align:32/?UI,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellalignment">external documentation</a>.
--spec setCellAlignment(This, Row, Col, Horiz, Vert) -> ok when
+-spec setCellAlignment(This, Row, Col, Horiz, Vert) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Horiz::integer(), Vert::integer().
setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,Horiz,Vert)
when is_integer(Row),is_integer(Col),is_integer(Horiz),is_integer(Vert) ->
@@ -1543,7 +1543,7 @@ setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,Horiz,Vert)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,Horiz:32/?UI,Vert:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellbackgroundcolour">external documentation</a>.
--spec setCellBackgroundColour(This, Col) -> ok when
+-spec setCellBackgroundColour(This, Col) -> 'ok' when
This::wxGrid(), Col::wx:wx_colour().
setCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -1553,12 +1553,12 @@ setCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellbackgroundcolour">external documentation</a>.
%% <br /> Also:<br />
-%% setCellBackgroundColour(This, Colour, Row, Col) -> ok when<br />
+%% setCellBackgroundColour(This, Colour, Row, Col) -> 'ok' when<br />
%% This::wxGrid(), Colour::wx:wx_colour(), Row::integer(), Col::integer().<br />
%%
--spec setCellBackgroundColour(This, Row, Col, Val) -> ok when
+-spec setCellBackgroundColour(This, Row, Col, Val) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Val::wx:wx_colour();
- (This, Colour, Row, Col) -> ok when
+ (This, Colour, Row, Col) -> 'ok' when
This::wxGrid(), Colour::wx:wx_colour(), Row::integer(), Col::integer().
setCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,Val)
when is_integer(Row),is_integer(Col),tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1572,7 +1572,7 @@ setCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour,Row,Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcelleditor">external documentation</a>.
--spec setCellEditor(This, Row, Col, Editor) -> ok when
+-spec setCellEditor(This, Row, Col, Editor) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Editor::wxGridCellEditor:wxGridCellEditor().
setCellEditor(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=EditorT,ref=EditorRef})
when is_integer(Row),is_integer(Col) ->
@@ -1582,7 +1582,7 @@ setCellEditor(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=EditorT,ref=E
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,EditorRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellfont">external documentation</a>.
--spec setCellFont(This, Row, Col, Val) -> ok when
+-spec setCellFont(This, Row, Col, Val) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Val::wxFont:wxFont().
setCellFont(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=ValT,ref=ValRef})
when is_integer(Row),is_integer(Col) ->
@@ -1592,7 +1592,7 @@ setCellFont(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=ValT,ref=ValRef
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,ValRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellrenderer">external documentation</a>.
--spec setCellRenderer(This, Row, Col, Renderer) -> ok when
+-spec setCellRenderer(This, Row, Col, Renderer) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Renderer::wxGridCellRenderer:wxGridCellRenderer().
setCellRenderer(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=RendererT,ref=RendererRef})
when is_integer(Row),is_integer(Col) ->
@@ -1602,7 +1602,7 @@ setCellRenderer(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=RendererT,r
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,RendererRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcelltextcolour">external documentation</a>.
--spec setCellTextColour(This, Col) -> ok when
+-spec setCellTextColour(This, Col) -> 'ok' when
This::wxGrid(), Col::wx:wx_colour().
setCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -1612,12 +1612,12 @@ setCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcelltextcolour">external documentation</a>.
%% <br /> Also:<br />
-%% setCellTextColour(This, Val, Row, Col) -> ok when<br />
+%% setCellTextColour(This, Val, Row, Col) -> 'ok' when<br />
%% This::wxGrid(), Val::wx:wx_colour(), Row::integer(), Col::integer().<br />
%%
--spec setCellTextColour(This, Row, Col, Val) -> ok when
+-spec setCellTextColour(This, Row, Col, Val) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Val::wx:wx_colour();
- (This, Val, Row, Col) -> ok when
+ (This, Val, Row, Col) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour(), Row::integer(), Col::integer().
setCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,Val)
when is_integer(Row),is_integer(Col),tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1631,7 +1631,7 @@ setCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val,Row,Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellvalue">external documentation</a>.
--spec setCellValue(This, Coords, S) -> ok when
+-spec setCellValue(This, Coords, S) -> 'ok' when
This::wxGrid(), Coords::{R::integer(), C::integer()}, S::unicode:chardata().
setCellValue(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC},S)
when is_integer(CoordsR),is_integer(CoordsC),is_list(S) ->
@@ -1642,12 +1642,12 @@ setCellValue(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC},S)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellvalue">external documentation</a>.
%% <br /> Also:<br />
-%% setCellValue(This, Val, Row, Col) -> ok when<br />
+%% setCellValue(This, Val, Row, Col) -> 'ok' when<br />
%% This::wxGrid(), Val::unicode:chardata(), Row::integer(), Col::integer().<br />
%%
--spec setCellValue(This, Row, Col, S) -> ok when
+-spec setCellValue(This, Row, Col, S) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), S::unicode:chardata();
- (This, Val, Row, Col) -> ok when
+ (This, Val, Row, Col) -> 'ok' when
This::wxGrid(), Val::unicode:chardata(), Row::integer(), Col::integer().
setCellValue(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,S)
when is_integer(Row),is_integer(Col),is_list(S) ->
@@ -1663,7 +1663,7 @@ setCellValue(#wx_ref{type=ThisT,ref=ThisRef},Val,Row,Col)
<<ThisRef:32/?UI,(byte_size(Val_UC)):32/?UI,(Val_UC)/binary, 0:(((8- ((0+byte_size(Val_UC)) band 16#7)) band 16#7))/unit:8,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolattr">external documentation</a>.
--spec setColAttr(This, Col, Attr) -> ok when
+-spec setColAttr(This, Col, Attr) -> 'ok' when
This::wxGrid(), Col::integer(), Attr::wxGridCellAttr:wxGridCellAttr().
setColAttr(#wx_ref{type=ThisT,ref=ThisRef},Col,#wx_ref{type=AttrT,ref=AttrRef})
when is_integer(Col) ->
@@ -1673,7 +1673,7 @@ setColAttr(#wx_ref{type=ThisT,ref=ThisRef},Col,#wx_ref{type=AttrT,ref=AttrRef})
<<ThisRef:32/?UI,Col:32/?UI,AttrRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolformatbool">external documentation</a>.
--spec setColFormatBool(This, Col) -> ok when
+-spec setColFormatBool(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
setColFormatBool(#wx_ref{type=ThisT,ref=ThisRef},Col)
when is_integer(Col) ->
@@ -1682,7 +1682,7 @@ setColFormatBool(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolformatnumber">external documentation</a>.
--spec setColFormatNumber(This, Col) -> ok when
+-spec setColFormatNumber(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
setColFormatNumber(#wx_ref{type=ThisT,ref=ThisRef},Col)
when is_integer(Col) ->
@@ -1691,7 +1691,7 @@ setColFormatNumber(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,Col:32/?UI>>).
%% @equiv setColFormatFloat(This,Col, [])
--spec setColFormatFloat(This, Col) -> ok when
+-spec setColFormatFloat(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
setColFormatFloat(This,Col)
@@ -1699,10 +1699,10 @@ setColFormatFloat(This,Col)
setColFormatFloat(This,Col, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolformatfloat">external documentation</a>.
--spec setColFormatFloat(This, Col, [Option]) -> ok when
+-spec setColFormatFloat(This, Col, [Option]) -> 'ok' when
This::wxGrid(), Col::integer(),
- Option :: {width, integer()}
- | {precision, integer()}.
+ Option :: {'width', integer()}
+ | {'precision', integer()}.
setColFormatFloat(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
when is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1714,7 +1714,7 @@ setColFormatFloat(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
<<ThisRef:32/?UI,Col:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolformatcustom">external documentation</a>.
--spec setColFormatCustom(This, Col, TypeName) -> ok when
+-spec setColFormatCustom(This, Col, TypeName) -> 'ok' when
This::wxGrid(), Col::integer(), TypeName::unicode:chardata().
setColFormatCustom(#wx_ref{type=ThisT,ref=ThisRef},Col,TypeName)
when is_integer(Col),is_list(TypeName) ->
@@ -1724,7 +1724,7 @@ setColFormatCustom(#wx_ref{type=ThisT,ref=ThisRef},Col,TypeName)
<<ThisRef:32/?UI,Col:32/?UI,(byte_size(TypeName_UC)):32/?UI,(TypeName_UC)/binary, 0:(((8- ((4+byte_size(TypeName_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcollabelalignment">external documentation</a>.
--spec setColLabelAlignment(This, Horiz, Vert) -> ok when
+-spec setColLabelAlignment(This, Horiz, Vert) -> 'ok' when
This::wxGrid(), Horiz::integer(), Vert::integer().
setColLabelAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
when is_integer(Horiz),is_integer(Vert) ->
@@ -1733,7 +1733,7 @@ setColLabelAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
<<ThisRef:32/?UI,Horiz:32/?UI,Vert:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcollabelsize">external documentation</a>.
--spec setColLabelSize(This, Height) -> ok when
+-spec setColLabelSize(This, Height) -> 'ok' when
This::wxGrid(), Height::integer().
setColLabelSize(#wx_ref{type=ThisT,ref=ThisRef},Height)
when is_integer(Height) ->
@@ -1742,7 +1742,7 @@ setColLabelSize(#wx_ref{type=ThisT,ref=ThisRef},Height)
<<ThisRef:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcollabelvalue">external documentation</a>.
--spec setColLabelValue(This, Col, Val) -> ok when
+-spec setColLabelValue(This, Col, Val) -> 'ok' when
This::wxGrid(), Col::integer(), Val::unicode:chardata().
setColLabelValue(#wx_ref{type=ThisT,ref=ThisRef},Col,Val)
when is_integer(Col),is_list(Val) ->
@@ -1752,7 +1752,7 @@ setColLabelValue(#wx_ref{type=ThisT,ref=ThisRef},Col,Val)
<<ThisRef:32/?UI,Col:32/?UI,(byte_size(Val_UC)):32/?UI,(Val_UC)/binary, 0:(((8- ((4+byte_size(Val_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolminimalwidth">external documentation</a>.
--spec setColMinimalWidth(This, Col, Width) -> ok when
+-spec setColMinimalWidth(This, Col, Width) -> 'ok' when
This::wxGrid(), Col::integer(), Width::integer().
setColMinimalWidth(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
when is_integer(Col),is_integer(Width) ->
@@ -1761,7 +1761,7 @@ setColMinimalWidth(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
<<ThisRef:32/?UI,Col:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolminimalacceptablewidth">external documentation</a>.
--spec setColMinimalAcceptableWidth(This, Width) -> ok when
+-spec setColMinimalAcceptableWidth(This, Width) -> 'ok' when
This::wxGrid(), Width::integer().
setColMinimalAcceptableWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -1770,7 +1770,7 @@ setColMinimalAcceptableWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolsize">external documentation</a>.
--spec setColSize(This, Col, Width) -> ok when
+-spec setColSize(This, Col, Width) -> 'ok' when
This::wxGrid(), Col::integer(), Width::integer().
setColSize(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
when is_integer(Col),is_integer(Width) ->
@@ -1779,7 +1779,7 @@ setColSize(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
<<ThisRef:32/?UI,Col:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcellalignment">external documentation</a>.
--spec setDefaultCellAlignment(This, Horiz, Vert) -> ok when
+-spec setDefaultCellAlignment(This, Horiz, Vert) -> 'ok' when
This::wxGrid(), Horiz::integer(), Vert::integer().
setDefaultCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
when is_integer(Horiz),is_integer(Vert) ->
@@ -1788,7 +1788,7 @@ setDefaultCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
<<ThisRef:32/?UI,Horiz:32/?UI,Vert:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcellbackgroundcolour">external documentation</a>.
--spec setDefaultCellBackgroundColour(This, Val) -> ok when
+-spec setDefaultCellBackgroundColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setDefaultCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1797,7 +1797,7 @@ setDefaultCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcellfont">external documentation</a>.
--spec setDefaultCellFont(This, Val) -> ok when
+-spec setDefaultCellFont(This, Val) -> 'ok' when
This::wxGrid(), Val::wxFont:wxFont().
setDefaultCellFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ValT,ref=ValRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1806,7 +1806,7 @@ setDefaultCellFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ValT,ref=ValRef}
<<ThisRef:32/?UI,ValRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcelltextcolour">external documentation</a>.
--spec setDefaultCellTextColour(This, Val) -> ok when
+-spec setDefaultCellTextColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setDefaultCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1815,7 +1815,7 @@ setDefaultCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaulteditor">external documentation</a>.
--spec setDefaultEditor(This, Editor) -> ok when
+-spec setDefaultEditor(This, Editor) -> 'ok' when
This::wxGrid(), Editor::wxGridCellEditor:wxGridCellEditor().
setDefaultEditor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EditorT,ref=EditorRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1824,7 +1824,7 @@ setDefaultEditor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EditorT,ref=Editor
<<ThisRef:32/?UI,EditorRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultrenderer">external documentation</a>.
--spec setDefaultRenderer(This, Renderer) -> ok when
+-spec setDefaultRenderer(This, Renderer) -> 'ok' when
This::wxGrid(), Renderer::wxGridCellRenderer:wxGridCellRenderer().
setDefaultRenderer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RendererT,ref=RendererRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1833,7 +1833,7 @@ setDefaultRenderer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RendererT,ref=Re
<<ThisRef:32/?UI,RendererRef:32/?UI>>).
%% @equiv setDefaultColSize(This,Width, [])
--spec setDefaultColSize(This, Width) -> ok when
+-spec setDefaultColSize(This, Width) -> 'ok' when
This::wxGrid(), Width::integer().
setDefaultColSize(This,Width)
@@ -1841,9 +1841,9 @@ setDefaultColSize(This,Width)
setDefaultColSize(This,Width, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcolsize">external documentation</a>.
--spec setDefaultColSize(This, Width, [Option]) -> ok when
+-spec setDefaultColSize(This, Width, [Option]) -> 'ok' when
This::wxGrid(), Width::integer(),
- Option :: {resizeExistingCols, boolean()}.
+ Option :: {'resizeExistingCols', boolean()}.
setDefaultColSize(#wx_ref{type=ThisT,ref=ThisRef},Width, Options)
when is_integer(Width),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1854,7 +1854,7 @@ setDefaultColSize(#wx_ref{type=ThisT,ref=ThisRef},Width, Options)
<<ThisRef:32/?UI,Width:32/?UI, BinOpt/binary>>).
%% @equiv setDefaultRowSize(This,Height, [])
--spec setDefaultRowSize(This, Height) -> ok when
+-spec setDefaultRowSize(This, Height) -> 'ok' when
This::wxGrid(), Height::integer().
setDefaultRowSize(This,Height)
@@ -1862,9 +1862,9 @@ setDefaultRowSize(This,Height)
setDefaultRowSize(This,Height, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultrowsize">external documentation</a>.
--spec setDefaultRowSize(This, Height, [Option]) -> ok when
+-spec setDefaultRowSize(This, Height, [Option]) -> 'ok' when
This::wxGrid(), Height::integer(),
- Option :: {resizeExistingRows, boolean()}.
+ Option :: {'resizeExistingRows', boolean()}.
setDefaultRowSize(#wx_ref{type=ThisT,ref=ThisRef},Height, Options)
when is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1875,7 +1875,7 @@ setDefaultRowSize(#wx_ref{type=ThisT,ref=ThisRef},Height, Options)
<<ThisRef:32/?UI,Height:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetgridcursor">external documentation</a>.
--spec setGridCursor(This, Row, Col) -> ok when
+-spec setGridCursor(This, Row, Col) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer().
setGridCursor(#wx_ref{type=ThisT,ref=ThisRef},Row,Col)
when is_integer(Row),is_integer(Col) ->
@@ -1884,7 +1884,7 @@ setGridCursor(#wx_ref{type=ThisT,ref=ThisRef},Row,Col)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetgridlinecolour">external documentation</a>.
--spec setGridLineColour(This, Val) -> ok when
+-spec setGridLineColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setGridLineColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1893,7 +1893,7 @@ setGridLineColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetlabelbackgroundcolour">external documentation</a>.
--spec setLabelBackgroundColour(This, Val) -> ok when
+-spec setLabelBackgroundColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setLabelBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1902,7 +1902,7 @@ setLabelBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetlabelfont">external documentation</a>.
--spec setLabelFont(This, Val) -> ok when
+-spec setLabelFont(This, Val) -> 'ok' when
This::wxGrid(), Val::wxFont:wxFont().
setLabelFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ValT,ref=ValRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1911,7 +1911,7 @@ setLabelFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ValT,ref=ValRef}) ->
<<ThisRef:32/?UI,ValRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetlabeltextcolour">external documentation</a>.
--spec setLabelTextColour(This, Val) -> ok when
+-spec setLabelTextColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setLabelTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1920,7 +1920,7 @@ setLabelTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetmargins">external documentation</a>.
--spec setMargins(This, ExtraWidth, ExtraHeight) -> ok when
+-spec setMargins(This, ExtraWidth, ExtraHeight) -> 'ok' when
This::wxGrid(), ExtraWidth::integer(), ExtraHeight::integer().
setMargins(#wx_ref{type=ThisT,ref=ThisRef},ExtraWidth,ExtraHeight)
when is_integer(ExtraWidth),is_integer(ExtraHeight) ->
@@ -1929,7 +1929,7 @@ setMargins(#wx_ref{type=ThisT,ref=ThisRef},ExtraWidth,ExtraHeight)
<<ThisRef:32/?UI,ExtraWidth:32/?UI,ExtraHeight:32/?UI>>).
%% @equiv setReadOnly(This,Row,Col, [])
--spec setReadOnly(This, Row, Col) -> ok when
+-spec setReadOnly(This, Row, Col) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer().
setReadOnly(This,Row,Col)
@@ -1937,9 +1937,9 @@ setReadOnly(This,Row,Col)
setReadOnly(This,Row,Col, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetreadonly">external documentation</a>.
--spec setReadOnly(This, Row, Col, [Option]) -> ok when
+-spec setReadOnly(This, Row, Col, [Option]) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(),
- Option :: {isReadOnly, boolean()}.
+ Option :: {'isReadOnly', boolean()}.
setReadOnly(#wx_ref{type=ThisT,ref=ThisRef},Row,Col, Options)
when is_integer(Row),is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1950,7 +1950,7 @@ setReadOnly(#wx_ref{type=ThisT,ref=ThisRef},Row,Col, Options)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowattr">external documentation</a>.
--spec setRowAttr(This, Row, Attr) -> ok when
+-spec setRowAttr(This, Row, Attr) -> 'ok' when
This::wxGrid(), Row::integer(), Attr::wxGridCellAttr:wxGridCellAttr().
setRowAttr(#wx_ref{type=ThisT,ref=ThisRef},Row,#wx_ref{type=AttrT,ref=AttrRef})
when is_integer(Row) ->
@@ -1960,7 +1960,7 @@ setRowAttr(#wx_ref{type=ThisT,ref=ThisRef},Row,#wx_ref{type=AttrT,ref=AttrRef})
<<ThisRef:32/?UI,Row:32/?UI,AttrRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowlabelalignment">external documentation</a>.
--spec setRowLabelAlignment(This, Horiz, Vert) -> ok when
+-spec setRowLabelAlignment(This, Horiz, Vert) -> 'ok' when
This::wxGrid(), Horiz::integer(), Vert::integer().
setRowLabelAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
when is_integer(Horiz),is_integer(Vert) ->
@@ -1969,7 +1969,7 @@ setRowLabelAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
<<ThisRef:32/?UI,Horiz:32/?UI,Vert:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowlabelsize">external documentation</a>.
--spec setRowLabelSize(This, Width) -> ok when
+-spec setRowLabelSize(This, Width) -> 'ok' when
This::wxGrid(), Width::integer().
setRowLabelSize(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -1978,7 +1978,7 @@ setRowLabelSize(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowlabelvalue">external documentation</a>.
--spec setRowLabelValue(This, Row, Val) -> ok when
+-spec setRowLabelValue(This, Row, Val) -> 'ok' when
This::wxGrid(), Row::integer(), Val::unicode:chardata().
setRowLabelValue(#wx_ref{type=ThisT,ref=ThisRef},Row,Val)
when is_integer(Row),is_list(Val) ->
@@ -1988,7 +1988,7 @@ setRowLabelValue(#wx_ref{type=ThisT,ref=ThisRef},Row,Val)
<<ThisRef:32/?UI,Row:32/?UI,(byte_size(Val_UC)):32/?UI,(Val_UC)/binary, 0:(((8- ((4+byte_size(Val_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowminimalheight">external documentation</a>.
--spec setRowMinimalHeight(This, Row, Width) -> ok when
+-spec setRowMinimalHeight(This, Row, Width) -> 'ok' when
This::wxGrid(), Row::integer(), Width::integer().
setRowMinimalHeight(#wx_ref{type=ThisT,ref=ThisRef},Row,Width)
when is_integer(Row),is_integer(Width) ->
@@ -1997,7 +1997,7 @@ setRowMinimalHeight(#wx_ref{type=ThisT,ref=ThisRef},Row,Width)
<<ThisRef:32/?UI,Row:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowminimalacceptableheight">external documentation</a>.
--spec setRowMinimalAcceptableHeight(This, Width) -> ok when
+-spec setRowMinimalAcceptableHeight(This, Width) -> 'ok' when
This::wxGrid(), Width::integer().
setRowMinimalAcceptableHeight(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -2006,7 +2006,7 @@ setRowMinimalAcceptableHeight(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowsize">external documentation</a>.
--spec setRowSize(This, Row, Height) -> ok when
+-spec setRowSize(This, Row, Height) -> 'ok' when
This::wxGrid(), Row::integer(), Height::integer().
setRowSize(#wx_ref{type=ThisT,ref=ThisRef},Row,Height)
when is_integer(Row),is_integer(Height) ->
@@ -2015,7 +2015,7 @@ setRowSize(#wx_ref{type=ThisT,ref=ThisRef},Row,Height)
<<ThisRef:32/?UI,Row:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetscrolllinex">external documentation</a>.
--spec setScrollLineX(This, X) -> ok when
+-spec setScrollLineX(This, X) -> 'ok' when
This::wxGrid(), X::integer().
setScrollLineX(#wx_ref{type=ThisT,ref=ThisRef},X)
when is_integer(X) ->
@@ -2024,7 +2024,7 @@ setScrollLineX(#wx_ref{type=ThisT,ref=ThisRef},X)
<<ThisRef:32/?UI,X:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetscrollliney">external documentation</a>.
--spec setScrollLineY(This, Y) -> ok when
+-spec setScrollLineY(This, Y) -> 'ok' when
This::wxGrid(), Y::integer().
setScrollLineY(#wx_ref{type=ThisT,ref=ThisRef},Y)
when is_integer(Y) ->
@@ -2033,7 +2033,7 @@ setScrollLineY(#wx_ref{type=ThisT,ref=ThisRef},Y)
<<ThisRef:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetselectionbackground">external documentation</a>.
--spec setSelectionBackground(This, C) -> ok when
+-spec setSelectionBackground(This, C) -> 'ok' when
This::wxGrid(), C::wx:wx_colour().
setSelectionBackground(#wx_ref{type=ThisT,ref=ThisRef},C)
when tuple_size(C) =:= 3; tuple_size(C) =:= 4 ->
@@ -2042,7 +2042,7 @@ setSelectionBackground(#wx_ref{type=ThisT,ref=ThisRef},C)
<<ThisRef:32/?UI,(wxe_util:colour_bin(C)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetselectionforeground">external documentation</a>.
--spec setSelectionForeground(This, C) -> ok when
+-spec setSelectionForeground(This, C) -> 'ok' when
This::wxGrid(), C::wx:wx_colour().
setSelectionForeground(#wx_ref{type=ThisT,ref=ThisRef},C)
when tuple_size(C) =:= 3; tuple_size(C) =:= 4 ->
@@ -2052,7 +2052,7 @@ setSelectionForeground(#wx_ref{type=ThisT,ref=ThisRef},C)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetselectionmode">external documentation</a>.
%%<br /> Selmode = ?wxGrid_wxGridSelectCells | ?wxGrid_wxGridSelectRows | ?wxGrid_wxGridSelectColumns
--spec setSelectionMode(This, Selmode) -> ok when
+-spec setSelectionMode(This, Selmode) -> 'ok' when
This::wxGrid(), Selmode::wx:wx_enum().
setSelectionMode(#wx_ref{type=ThisT,ref=ThisRef},Selmode)
when is_integer(Selmode) ->
@@ -2061,7 +2061,7 @@ setSelectionMode(#wx_ref{type=ThisT,ref=ThisRef},Selmode)
<<ThisRef:32/?UI,Selmode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridshowcelleditcontrol">external documentation</a>.
--spec showCellEditControl(This) -> ok when
+-spec showCellEditControl(This) -> 'ok' when
This::wxGrid().
showCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -2079,7 +2079,7 @@ xToCol(This,X)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridxtocol">external documentation</a>.
-spec xToCol(This, X, [Option]) -> integer() when
This::wxGrid(), X::integer(),
- Option :: {clipToMinMax, boolean()}.
+ Option :: {'clipToMinMax', boolean()}.
xToCol(#wx_ref{type=ThisT,ref=ThisRef},X, Options)
when is_integer(X),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -2117,7 +2117,7 @@ yToRow(#wx_ref{type=ThisT,ref=ThisRef},Y)
<<ThisRef:32/?UI,Y:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGrid()) -> ok.
+-spec destroy(This::wxGrid()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGrid),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGridBagSizer.erl b/lib/wx/src/gen/wxGridBagSizer.erl
index adbc66adca..93ed002d6c 100644
--- a/lib/wx/src/gen/wxGridBagSizer.erl
+++ b/lib/wx/src/gen/wxGridBagSizer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -65,8 +65,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridbagsizer.html#wxgridbagsizerwxgridbagsizer">external documentation</a>.
-spec new([Option]) -> wxGridBagSizer() when
- Option :: {vgap, integer()}
- | {hgap, integer()}.
+ Option :: {'vgap', integer()}
+ | {'hgap', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({vgap, Vgap}, Acc) -> [<<1:32/?UI,Vgap:32/?UI>>|Acc];
@@ -96,10 +96,10 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
%% This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(), Pos::{R::integer(), C::integer()};<br />
%% (This, Window, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()}.<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()}.<br />
%%
-spec add(This, Width, Height) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Width::integer(), Height::integer();
@@ -107,10 +107,10 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(), Pos::{R::integer(), C::integer()};
(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
add(This,Width,Height)
when is_record(This, wx_ref),is_integer(Width),is_integer(Height) ->
@@ -141,31 +141,31 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}, Options
%% <br /> Also:<br />
%% add(This, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxGridBagSizer(), Width::integer(), Height::integer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()};<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()};<br />
%% (This, Window, Pos, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(), Pos::{R::integer(), C::integer()},<br />
-%% Option :: {span, {RS::integer(), CS::integer()}}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()}.<br />
+%% Option :: {'span', {RS::integer(), CS::integer()}}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()}.<br />
%%
-spec add(This, Width, Height, Pos) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Width::integer(), Height::integer(), Pos::{R::integer(), C::integer()};
(This, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Width::integer(), Height::integer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()};
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()};
(This, Window, Pos, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(), Pos::{R::integer(), C::integer()},
- Option :: {span, {RS::integer(), CS::integer()}}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'span', {RS::integer(), CS::integer()}}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
add(This,Width,Height,Pos={PosR,PosC})
when is_record(This, wx_ref),is_integer(Width),is_integer(Height),is_integer(PosR),is_integer(PosC) ->
@@ -202,10 +202,10 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},{PosR,Po
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridbagsizer.html#wxgridbagsizeradd">external documentation</a>.
-spec add(This, Width, Height, Pos, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Width::integer(), Height::integer(), Pos::{R::integer(), C::integer()},
- Option :: {span, {RS::integer(), CS::integer()}}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'span', {RS::integer(), CS::integer()}}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
add(#wx_ref{type=ThisT,ref=ThisRef},Width,Height,{PosR,PosC}, Options)
when is_integer(Width),is_integer(Height),is_integer(PosR),is_integer(PosC),is_list(Options) ->
?CLASS(ThisT,wxGridBagSizer),
@@ -238,13 +238,13 @@ checkForIntersection(This,Item)
%% <br /> Also:<br />
%% checkForIntersection(This, Item, [Option]) -> boolean() when<br />
%% This::wxGridBagSizer(), Item::wxGBSizerItem:wxGBSizerItem(),<br />
-%% Option :: {excludeItem, wxGBSizerItem:wxGBSizerItem()}.<br />
+%% Option :: {'excludeItem', wxGBSizerItem:wxGBSizerItem()}.<br />
%%
-spec checkForIntersection(This, Pos, Span) -> boolean() when
This::wxGridBagSizer(), Pos::{R::integer(), C::integer()}, Span::{RS::integer(), CS::integer()};
(This, Item, [Option]) -> boolean() when
This::wxGridBagSizer(), Item::wxGBSizerItem:wxGBSizerItem(),
- Option :: {excludeItem, wxGBSizerItem:wxGBSizerItem()}.
+ Option :: {'excludeItem', wxGBSizerItem:wxGBSizerItem()}.
checkForIntersection(This,Pos={PosR,PosC},Span={SpanRS,SpanCS})
when is_record(This, wx_ref),is_integer(PosR),is_integer(PosC),is_integer(SpanRS),is_integer(SpanCS) ->
@@ -262,7 +262,7 @@ checkForIntersection(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=Item
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridbagsizer.html#wxgridbagsizercheckforintersection">external documentation</a>.
-spec checkForIntersection(This, Pos, Span, [Option]) -> boolean() when
This::wxGridBagSizer(), Pos::{R::integer(), C::integer()}, Span::{RS::integer(), CS::integer()},
- Option :: {excludeItem, wxGBSizerItem:wxGBSizerItem()}.
+ Option :: {'excludeItem', wxGBSizerItem:wxGBSizerItem()}.
checkForIntersection(#wx_ref{type=ThisT,ref=ThisRef},{PosR,PosC},{SpanRS,SpanCS}, Options)
when is_integer(PosR),is_integer(PosC),is_integer(SpanRS),is_integer(SpanCS),is_list(Options) ->
?CLASS(ThisT,wxGridBagSizer),
@@ -381,7 +381,7 @@ getItemSpan(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef})
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridbagsizer.html#wxgridbagsizersetemptycellsize">external documentation</a>.
--spec setEmptyCellSize(This, Sz) -> ok when
+-spec setEmptyCellSize(This, Sz) -> 'ok' when
This::wxGridBagSizer(), Sz::{W::integer(), H::integer()}.
setEmptyCellSize(#wx_ref{type=ThisT,ref=ThisRef},{SzW,SzH})
when is_integer(SzW),is_integer(SzH) ->
@@ -442,7 +442,7 @@ setItemSpan(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},
<<ThisRef:32/?UI,WindowRef:32/?UI,SpanRS:32/?UI,SpanCS:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridBagSizer()) -> ok.
+-spec destroy(This::wxGridBagSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridBagSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGridCellAttr.erl b/lib/wx/src/gen/wxGridCellAttr.erl
index 4880c1fab2..b279be25d8 100644
--- a/lib/wx/src/gen/wxGridCellAttr.erl
+++ b/lib/wx/src/gen/wxGridCellAttr.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -40,7 +40,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGridCellAttr() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxGridCellAttr(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -49,7 +49,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxGridCellAttr(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -58,7 +58,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxGridCellAttr(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxGridCellAttr),
@@ -67,7 +67,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetalignment">external documentation</a>.
--spec setAlignment(This, HAlign, VAlign) -> ok when
+-spec setAlignment(This, HAlign, VAlign) -> 'ok' when
This::wxGridCellAttr(), HAlign::integer(), VAlign::integer().
setAlignment(#wx_ref{type=ThisT,ref=ThisRef},HAlign,VAlign)
when is_integer(HAlign),is_integer(VAlign) ->
@@ -76,7 +76,7 @@ setAlignment(#wx_ref{type=ThisT,ref=ThisRef},HAlign,VAlign)
<<ThisRef:32/?UI,HAlign:32/?UI,VAlign:32/?UI>>).
%% @equiv setReadOnly(This, [])
--spec setReadOnly(This) -> ok when
+-spec setReadOnly(This) -> 'ok' when
This::wxGridCellAttr().
setReadOnly(This)
@@ -84,9 +84,9 @@ setReadOnly(This)
setReadOnly(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetreadonly">external documentation</a>.
--spec setReadOnly(This, [Option]) -> ok when
+-spec setReadOnly(This, [Option]) -> 'ok' when
This::wxGridCellAttr(),
- Option :: {isReadOnly, boolean()}.
+ Option :: {'isReadOnly', boolean()}.
setReadOnly(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGridCellAttr),
@@ -97,7 +97,7 @@ setReadOnly(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetrenderer">external documentation</a>.
--spec setRenderer(This, Renderer) -> ok when
+-spec setRenderer(This, Renderer) -> 'ok' when
This::wxGridCellAttr(), Renderer::wxGridCellRenderer:wxGridCellRenderer().
setRenderer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RendererT,ref=RendererRef}) ->
?CLASS(ThisT,wxGridCellAttr),
@@ -106,7 +106,7 @@ setRenderer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RendererT,ref=RendererR
<<ThisRef:32/?UI,RendererRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrseteditor">external documentation</a>.
--spec setEditor(This, Editor) -> ok when
+-spec setEditor(This, Editor) -> 'ok' when
This::wxGridCellAttr(), Editor::wxGridCellEditor:wxGridCellEditor().
setEditor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EditorT,ref=EditorRef}) ->
?CLASS(ThisT,wxGridCellAttr),
@@ -223,7 +223,7 @@ isReadOnly(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetdefattr">external documentation</a>.
--spec setDefAttr(This, DefAttr) -> ok when
+-spec setDefAttr(This, DefAttr) -> 'ok' when
This::wxGridCellAttr(), DefAttr::wxGridCellAttr().
setDefAttr(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DefAttrT,ref=DefAttrRef}) ->
?CLASS(ThisT,wxGridCellAttr),
diff --git a/lib/wx/src/gen/wxGridCellBoolEditor.erl b/lib/wx/src/gen/wxGridCellBoolEditor.erl
index 1308ab84ae..1d949d54ff 100644
--- a/lib/wx/src/gen/wxGridCellBoolEditor.erl
+++ b/lib/wx/src/gen/wxGridCellBoolEditor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -58,15 +58,15 @@ isTrueValue(Value)
<<(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((4+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @equiv useStringValues([])
--spec useStringValues() -> ok.
+-spec useStringValues() -> 'ok'.
useStringValues() ->
useStringValues([]).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellbooleditor.html#wxgridcellbooleditorusestringvalues">external documentation</a>.
--spec useStringValues([Option]) -> ok when
- Option :: {valueTrue, unicode:chardata()}
- | {valueFalse, unicode:chardata()}.
+-spec useStringValues([Option]) -> 'ok' when
+ Option :: {'valueTrue', unicode:chardata()}
+ | {'valueFalse', unicode:chardata()}.
useStringValues(Options)
when is_list(Options) ->
MOpts = fun({valueTrue, ValueTrue}, Acc) -> ValueTrue_UC = unicode:characters_to_binary([ValueTrue,0]),[<<1:32/?UI,(byte_size(ValueTrue_UC)):32/?UI,(ValueTrue_UC)/binary, 0:(((8- ((0+byte_size(ValueTrue_UC)) band 16#7)) band 16#7))/unit:8>>|Acc];
@@ -77,7 +77,7 @@ useStringValues(Options)
<<BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellBoolEditor()) -> ok.
+-spec destroy(This::wxGridCellBoolEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellBoolEditor),
wxe_util:destroy(?wxGridCellBoolEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellBoolRenderer.erl b/lib/wx/src/gen/wxGridCellBoolRenderer.erl
index 55f54100f3..acdb9cb18f 100644
--- a/lib/wx/src/gen/wxGridCellBoolRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellBoolRenderer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellBoolRenderer()) -> ok.
+-spec destroy(This::wxGridCellBoolRenderer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellBoolRenderer),
wxe_util:destroy(?wxGridCellBoolRenderer_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellChoiceEditor.erl b/lib/wx/src/gen/wxGridCellChoiceEditor.erl
index 8aa4420ffb..d5487c3618 100644
--- a/lib/wx/src/gen/wxGridCellChoiceEditor.erl
+++ b/lib/wx/src/gen/wxGridCellChoiceEditor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@ new(Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellchoiceeditor.html#wxgridcellchoiceeditorwxgridcellchoiceeditor">external documentation</a>.
-spec new(Choices, [Option]) -> wxGridCellChoiceEditor() when
Choices::[unicode:chardata()],
- Option :: {allowOthers, boolean()}.
+ Option :: {'allowOthers', boolean()}.
new(Choices, Options)
when is_list(Choices),is_list(Options) ->
Choices_UCA = [unicode:characters_to_binary([ChoicesTemp,0]) ||
@@ -65,7 +65,7 @@ new(Choices, Options)
<<(length(Choices_UCA)):32/?UI, (<< <<(byte_size(UC_Str)):32/?UI, UC_Str/binary>>|| UC_Str <- Choices_UCA>>)/binary, 0:(((8- ((4 + lists:sum([byte_size(S)+4||S<-Choices_UCA])) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellchoiceeditor.html#wxgridcellchoiceeditorsetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellChoiceEditor(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -75,7 +75,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellChoiceEditor()) -> ok.
+-spec destroy(This::wxGridCellChoiceEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellChoiceEditor),
wxe_util:destroy(?wxGridCellChoiceEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellEditor.erl b/lib/wx/src/gen/wxGridCellEditor.erl
index 253868300e..d14b1c994c 100644
--- a/lib/wx/src/gen/wxGridCellEditor.erl
+++ b/lib/wx/src/gen/wxGridCellEditor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -39,7 +39,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGridCellEditor() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorcreate">external documentation</a>.
--spec create(This, Parent, Id, EvtHandler) -> ok when
+-spec create(This, Parent, Id, EvtHandler) -> 'ok' when
This::wxGridCellEditor(), Parent::wxWindow:wxWindow(), Id::integer(), EvtHandler::wxEvtHandler:wxEvtHandler().
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=EvtHandlerT,ref=EvtHandlerRef})
when is_integer(Id) ->
@@ -58,7 +58,7 @@ isCreated(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorsetsize">external documentation</a>.
--spec setSize(This, Rect) -> ok when
+-spec setSize(This, Rect) -> 'ok' when
This::wxGridCellEditor(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
setSize(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -67,7 +67,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @equiv show(This,Show, [])
--spec show(This, Show) -> ok when
+-spec show(This, Show) -> 'ok' when
This::wxGridCellEditor(), Show::boolean().
show(This,Show)
@@ -75,9 +75,9 @@ show(This,Show)
show(This,Show, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorshow">external documentation</a>.
--spec show(This, Show, [Option]) -> ok when
+-spec show(This, Show, [Option]) -> 'ok' when
This::wxGridCellEditor(), Show::boolean(),
- Option :: {attr, wxGridCellAttr:wxGridCellAttr()}.
+ Option :: {'attr', wxGridCellAttr:wxGridCellAttr()}.
show(#wx_ref{type=ThisT,ref=ThisRef},Show, Options)
when is_boolean(Show),is_list(Options) ->
?CLASS(ThisT,wxGridCellEditor),
@@ -88,7 +88,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef},Show, Options)
<<ThisRef:32/?UI,(wxe_util:from_bool(Show)):32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorpaintbackground">external documentation</a>.
--spec paintBackground(This, RectCell, Attr) -> ok when
+-spec paintBackground(This, RectCell, Attr) -> 'ok' when
This::wxGridCellEditor(), RectCell::{X::integer(), Y::integer(), W::integer(), H::integer()}, Attr::wxGridCellAttr:wxGridCellAttr().
paintBackground(#wx_ref{type=ThisT,ref=ThisRef},{RectCellX,RectCellY,RectCellW,RectCellH},#wx_ref{type=AttrT,ref=AttrRef})
when is_integer(RectCellX),is_integer(RectCellY),is_integer(RectCellW),is_integer(RectCellH) ->
@@ -98,7 +98,7 @@ paintBackground(#wx_ref{type=ThisT,ref=ThisRef},{RectCellX,RectCellY,RectCellW,R
<<ThisRef:32/?UI,RectCellX:32/?UI,RectCellY:32/?UI,RectCellW:32/?UI,RectCellH:32/?UI,AttrRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorbeginedit">external documentation</a>.
--spec beginEdit(This, Row, Col, Grid) -> ok when
+-spec beginEdit(This, Row, Col, Grid) -> 'ok' when
This::wxGridCellEditor(), Row::integer(), Col::integer(), Grid::wxGrid:wxGrid().
beginEdit(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=GridT,ref=GridRef})
when is_integer(Row),is_integer(Col) ->
@@ -118,7 +118,7 @@ endEdit(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=GridT,ref=GridRef})
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,GridRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorreset">external documentation</a>.
--spec reset(This) -> ok when
+-spec reset(This) -> 'ok' when
This::wxGridCellEditor().
reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGridCellEditor),
@@ -126,7 +126,7 @@ reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorstartingkey">external documentation</a>.
--spec startingKey(This, Event) -> ok when
+-spec startingKey(This, Event) -> 'ok' when
This::wxGridCellEditor(), Event::wxKeyEvent:wxKeyEvent().
startingKey(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef}) ->
?CLASS(ThisT,wxGridCellEditor),
@@ -135,7 +135,7 @@ startingKey(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef}) -
<<ThisRef:32/?UI,EventRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorstartingclick">external documentation</a>.
--spec startingClick(This) -> ok when
+-spec startingClick(This) -> 'ok' when
This::wxGridCellEditor().
startingClick(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGridCellEditor),
@@ -143,7 +143,7 @@ startingClick(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorhandlereturn">external documentation</a>.
--spec handleReturn(This, Event) -> ok when
+-spec handleReturn(This, Event) -> 'ok' when
This::wxGridCellEditor(), Event::wxKeyEvent:wxKeyEvent().
handleReturn(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef}) ->
?CLASS(ThisT,wxGridCellEditor),
diff --git a/lib/wx/src/gen/wxGridCellFloatEditor.erl b/lib/wx/src/gen/wxGridCellFloatEditor.erl
index 6dd8ec7647..6e85469ecf 100644
--- a/lib/wx/src/gen/wxGridCellFloatEditor.erl
+++ b/lib/wx/src/gen/wxGridCellFloatEditor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -50,8 +50,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloateditor.html#wxgridcellfloateditorwxgridcellfloateditor">external documentation</a>.
-spec new([Option]) -> wxGridCellFloatEditor() when
- Option :: {width, integer()}
- | {precision, integer()}.
+ Option :: {'width', integer()}
+ | {'precision', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({width, Width}, Acc) -> [<<1:32/?UI,Width:32/?UI>>|Acc];
@@ -62,7 +62,7 @@ new(Options)
<<BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloateditor.html#wxgridcellfloateditorsetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellFloatEditor(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -72,7 +72,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellFloatEditor()) -> ok.
+-spec destroy(This::wxGridCellFloatEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellFloatEditor),
wxe_util:destroy(?wxGridCellFloatEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellFloatRenderer.erl b/lib/wx/src/gen/wxGridCellFloatRenderer.erl
index c0f4157970..ccb29902b3 100644
--- a/lib/wx/src/gen/wxGridCellFloatRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellFloatRenderer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -50,8 +50,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloatrenderer.html#wxgridcellfloatrendererwxgridcellfloatrenderer">external documentation</a>.
-spec new([Option]) -> wxGridCellFloatRenderer() when
- Option :: {width, integer()}
- | {precision, integer()}.
+ Option :: {'width', integer()}
+ | {'precision', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({width, Width}, Acc) -> [<<1:32/?UI,Width:32/?UI>>|Acc];
@@ -78,7 +78,7 @@ getWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloatrenderer.html#wxgridcellfloatrenderersetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellFloatRenderer(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -88,7 +88,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloatrenderer.html#wxgridcellfloatrenderersetprecision">external documentation</a>.
--spec setPrecision(This, Precision) -> ok when
+-spec setPrecision(This, Precision) -> 'ok' when
This::wxGridCellFloatRenderer(), Precision::integer().
setPrecision(#wx_ref{type=ThisT,ref=ThisRef},Precision)
when is_integer(Precision) ->
@@ -97,7 +97,7 @@ setPrecision(#wx_ref{type=ThisT,ref=ThisRef},Precision)
<<ThisRef:32/?UI,Precision:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloatrenderer.html#wxgridcellfloatrenderersetwidth">external documentation</a>.
--spec setWidth(This, Width) -> ok when
+-spec setWidth(This, Width) -> 'ok' when
This::wxGridCellFloatRenderer(), Width::integer().
setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -106,7 +106,7 @@ setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellFloatRenderer()) -> ok.
+-spec destroy(This::wxGridCellFloatRenderer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellFloatRenderer),
wxe_util:destroy(?wxGridCellFloatRenderer_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellNumberEditor.erl b/lib/wx/src/gen/wxGridCellNumberEditor.erl
index e08cade3e0..7a47024b2f 100644
--- a/lib/wx/src/gen/wxGridCellNumberEditor.erl
+++ b/lib/wx/src/gen/wxGridCellNumberEditor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,8 +52,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellnumbereditor.html#wxgridcellnumbereditorwxgridcellnumbereditor">external documentation</a>.
-spec new([Option]) -> wxGridCellNumberEditor() when
- Option :: {min, integer()}
- | {max, integer()}.
+ Option :: {'min', integer()}
+ | {'max', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({min, Min}, Acc) -> [<<1:32/?UI,Min:32/?UI>>|Acc];
@@ -72,7 +72,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellnumbereditor.html#wxgridcellnumbereditorsetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellNumberEditor(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -82,7 +82,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellNumberEditor()) -> ok.
+-spec destroy(This::wxGridCellNumberEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellNumberEditor),
wxe_util:destroy(?wxGridCellNumberEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellNumberRenderer.erl b/lib/wx/src/gen/wxGridCellNumberRenderer.erl
index 437654f2bb..1267bb4167 100644
--- a/lib/wx/src/gen/wxGridCellNumberRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellNumberRenderer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -48,7 +48,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellNumberRenderer()) -> ok.
+-spec destroy(This::wxGridCellNumberRenderer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellNumberRenderer),
wxe_util:destroy(?wxGridCellNumberRenderer_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellRenderer.erl b/lib/wx/src/gen/wxGridCellRenderer.erl
index 0821f3b632..53d43f12a4 100644
--- a/lib/wx/src/gen/wxGridCellRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellRenderer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGridCellRenderer() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellrenderer.html#wxgridcellrendererdraw">external documentation</a>.
--spec draw(This, Grid, Attr, Dc, Rect, Row, Col, IsSelected) -> ok when
+-spec draw(This, Grid, Attr, Dc, Rect, Row, Col, IsSelected) -> 'ok' when
This::wxGridCellRenderer(), Grid::wxGrid:wxGrid(), Attr::wxGridCellAttr:wxGridCellAttr(), Dc::wxDC:wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, Row::integer(), Col::integer(), IsSelected::boolean().
draw(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=GridT,ref=GridRef},#wx_ref{type=AttrT,ref=AttrRef},#wx_ref{type=DcT,ref=DcRef},{RectX,RectY,RectW,RectH},Row,Col,IsSelected)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),is_integer(Row),is_integer(Col),is_boolean(IsSelected) ->
diff --git a/lib/wx/src/gen/wxGridCellStringRenderer.erl b/lib/wx/src/gen/wxGridCellStringRenderer.erl
index c9d7474988..7602187a7a 100644
--- a/lib/wx/src/gen/wxGridCellStringRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellStringRenderer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellStringRenderer()) -> ok.
+-spec destroy(This::wxGridCellStringRenderer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellStringRenderer),
wxe_util:destroy(?wxGridCellStringRenderer_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellTextEditor.erl b/lib/wx/src/gen/wxGridCellTextEditor.erl
index 303f1e90b6..4ddb4a7028 100644
--- a/lib/wx/src/gen/wxGridCellTextEditor.erl
+++ b/lib/wx/src/gen/wxGridCellTextEditor.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -49,7 +49,7 @@ new() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelltexteditor.html#wxgridcelltexteditorsetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellTextEditor(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -59,7 +59,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellTextEditor()) -> ok.
+-spec destroy(This::wxGridCellTextEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellTextEditor),
wxe_util:destroy(?wxGridCellTextEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridEvent.erl b/lib/wx/src/gen/wxGridEvent.erl
index e1fb27bc5b..c459d7fdbf 100644
--- a/lib/wx/src/gen/wxGridEvent.erl
+++ b/lib/wx/src/gen/wxGridEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxGridSizer.erl b/lib/wx/src/gen/wxGridSizer.erl
index 78fe5b16ed..bb2127f92a 100644
--- a/lib/wx/src/gen/wxGridSizer.erl
+++ b/lib/wx/src/gen/wxGridSizer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -59,8 +59,8 @@ new(Cols)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizerwxgridsizer">external documentation</a>.
-spec new(Cols, [Option]) -> wxGridSizer() when
Cols::integer(),
- Option :: {vgap, integer()}
- | {hgap, integer()}.
+ Option :: {'vgap', integer()}
+ | {'hgap', integer()}.
new(Cols, Options)
when is_integer(Cols),is_list(Options) ->
MOpts = fun({vgap, Vgap}, Acc) -> [<<1:32/?UI,Vgap:32/?UI>>|Acc];
@@ -111,7 +111,7 @@ getVGap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizersetcols">external documentation</a>.
--spec setCols(This, Cols) -> ok when
+-spec setCols(This, Cols) -> 'ok' when
This::wxGridSizer(), Cols::integer().
setCols(#wx_ref{type=ThisT,ref=ThisRef},Cols)
when is_integer(Cols) ->
@@ -120,7 +120,7 @@ setCols(#wx_ref{type=ThisT,ref=ThisRef},Cols)
<<ThisRef:32/?UI,Cols:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizersethgap">external documentation</a>.
--spec setHGap(This, Gap) -> ok when
+-spec setHGap(This, Gap) -> 'ok' when
This::wxGridSizer(), Gap::integer().
setHGap(#wx_ref{type=ThisT,ref=ThisRef},Gap)
when is_integer(Gap) ->
@@ -129,7 +129,7 @@ setHGap(#wx_ref{type=ThisT,ref=ThisRef},Gap)
<<ThisRef:32/?UI,Gap:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizersetrows">external documentation</a>.
--spec setRows(This, Rows) -> ok when
+-spec setRows(This, Rows) -> 'ok' when
This::wxGridSizer(), Rows::integer().
setRows(#wx_ref{type=ThisT,ref=ThisRef},Rows)
when is_integer(Rows) ->
@@ -138,7 +138,7 @@ setRows(#wx_ref{type=ThisT,ref=ThisRef},Rows)
<<ThisRef:32/?UI,Rows:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizersetvgap">external documentation</a>.
--spec setVGap(This, Gap) -> ok when
+-spec setVGap(This, Gap) -> 'ok' when
This::wxGridSizer(), Gap::integer().
setVGap(#wx_ref{type=ThisT,ref=ThisRef},Gap)
when is_integer(Gap) ->
@@ -147,7 +147,7 @@ setVGap(#wx_ref{type=ThisT,ref=ThisRef},Gap)
<<ThisRef:32/?UI,Gap:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridSizer()) -> ok.
+-spec destroy(This::wxGridSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxHelpEvent.erl b/lib/wx/src/gen/wxHelpEvent.erl
index 20affab33d..251167d41e 100644
--- a/lib/wx/src/gen/wxHelpEvent.erl
+++ b/lib/wx/src/gen/wxHelpEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@ getPosition(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhelpevent.html#wxhelpeventsetorigin">external documentation</a>.
%%<br /> Origin = ?wxHelpEvent_Origin_Unknown | ?wxHelpEvent_Origin_Keyboard | ?wxHelpEvent_Origin_HelpButton
--spec setOrigin(This, Origin) -> ok when
+-spec setOrigin(This, Origin) -> 'ok' when
This::wxHelpEvent(), Origin::wx:wx_enum().
setOrigin(#wx_ref{type=ThisT,ref=ThisRef},Origin)
when is_integer(Origin) ->
@@ -72,7 +72,7 @@ setOrigin(#wx_ref{type=ThisT,ref=ThisRef},Origin)
<<ThisRef:32/?UI,Origin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhelpevent.html#wxhelpeventsetposition">external documentation</a>.
--spec setPosition(This, Pos) -> ok when
+-spec setPosition(This, Pos) -> 'ok' when
This::wxHelpEvent(), Pos::{X::integer(), Y::integer()}.
setPosition(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
when is_integer(PosX),is_integer(PosY) ->
diff --git a/lib/wx/src/gen/wxHtmlEasyPrinting.erl b/lib/wx/src/gen/wxHtmlEasyPrinting.erl
index 0a3d79caee..a2cf46ed8d 100644
--- a/lib/wx/src/gen/wxHtmlEasyPrinting.erl
+++ b/lib/wx/src/gen/wxHtmlEasyPrinting.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,8 +46,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingwxhtmleasyprinting">external documentation</a>.
-spec new([Option]) -> wxHtmlEasyPrinting() when
- Option :: {name, unicode:chardata()}
- | {parentWindow, wxWindow:wxWindow()}.
+ Option :: {'name', unicode:chardata()}
+ | {'parentWindow', wxWindow:wxWindow()}.
new(Options)
when is_list(Options) ->
MOpts = fun({name, Name}, Acc) -> Name_UC = unicode:characters_to_binary([Name,0]),[<<1:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>|Acc];
@@ -94,7 +94,7 @@ previewText(This,Htmltext)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingpreviewtext">external documentation</a>.
-spec previewText(This, Htmltext, [Option]) -> boolean() when
This::wxHtmlEasyPrinting(), Htmltext::unicode:chardata(),
- Option :: {basepath, unicode:chardata()}.
+ Option :: {'basepath', unicode:chardata()}.
previewText(#wx_ref{type=ThisT,ref=ThisRef},Htmltext, Options)
when is_list(Htmltext),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -126,7 +126,7 @@ printText(This,Htmltext)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingprinttext">external documentation</a>.
-spec printText(This, Htmltext, [Option]) -> boolean() when
This::wxHtmlEasyPrinting(), Htmltext::unicode:chardata(),
- Option :: {basepath, unicode:chardata()}.
+ Option :: {'basepath', unicode:chardata()}.
printText(#wx_ref{type=ThisT,ref=ThisRef},Htmltext, Options)
when is_list(Htmltext),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -138,7 +138,7 @@ printText(#wx_ref{type=ThisT,ref=ThisRef},Htmltext, Options)
<<ThisRef:32/?UI,(byte_size(Htmltext_UC)):32/?UI,(Htmltext_UC)/binary, 0:(((8- ((0+byte_size(Htmltext_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingpagesetup">external documentation</a>.
--spec pageSetup(This) -> ok when
+-spec pageSetup(This) -> 'ok' when
This::wxHtmlEasyPrinting().
pageSetup(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -146,7 +146,7 @@ pageSetup(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv setFonts(This,Normal_face,Fixed_face, [])
--spec setFonts(This, Normal_face, Fixed_face) -> ok when
+-spec setFonts(This, Normal_face, Fixed_face) -> 'ok' when
This::wxHtmlEasyPrinting(), Normal_face::unicode:chardata(), Fixed_face::unicode:chardata().
setFonts(This,Normal_face,Fixed_face)
@@ -154,9 +154,9 @@ setFonts(This,Normal_face,Fixed_face)
setFonts(This,Normal_face,Fixed_face, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingsetfonts">external documentation</a>.
--spec setFonts(This, Normal_face, Fixed_face, [Option]) -> ok when
+-spec setFonts(This, Normal_face, Fixed_face, [Option]) -> 'ok' when
This::wxHtmlEasyPrinting(), Normal_face::unicode:chardata(), Fixed_face::unicode:chardata(),
- Option :: {sizes, [integer()]}.
+ Option :: {'sizes', [integer()]}.
setFonts(#wx_ref{type=ThisT,ref=ThisRef},Normal_face,Fixed_face, Options)
when is_list(Normal_face),is_list(Fixed_face),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -170,7 +170,7 @@ setFonts(#wx_ref{type=ThisT,ref=ThisRef},Normal_face,Fixed_face, Options)
<<ThisRef:32/?UI,(byte_size(Normal_face_UC)):32/?UI,(Normal_face_UC)/binary, 0:(((8- ((0+byte_size(Normal_face_UC)) band 16#7)) band 16#7))/unit:8,(byte_size(Fixed_face_UC)):32/?UI,(Fixed_face_UC)/binary, 0:(((8- ((4+byte_size(Fixed_face_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv setHeader(This,Header, [])
--spec setHeader(This, Header) -> ok when
+-spec setHeader(This, Header) -> 'ok' when
This::wxHtmlEasyPrinting(), Header::unicode:chardata().
setHeader(This,Header)
@@ -178,9 +178,9 @@ setHeader(This,Header)
setHeader(This,Header, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingsetheader">external documentation</a>.
--spec setHeader(This, Header, [Option]) -> ok when
+-spec setHeader(This, Header, [Option]) -> 'ok' when
This::wxHtmlEasyPrinting(), Header::unicode:chardata(),
- Option :: {pg, integer()}.
+ Option :: {'pg', integer()}.
setHeader(#wx_ref{type=ThisT,ref=ThisRef},Header, Options)
when is_list(Header),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -192,7 +192,7 @@ setHeader(#wx_ref{type=ThisT,ref=ThisRef},Header, Options)
<<ThisRef:32/?UI,(byte_size(Header_UC)):32/?UI,(Header_UC)/binary, 0:(((8- ((0+byte_size(Header_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv setFooter(This,Footer, [])
--spec setFooter(This, Footer) -> ok when
+-spec setFooter(This, Footer) -> 'ok' when
This::wxHtmlEasyPrinting(), Footer::unicode:chardata().
setFooter(This,Footer)
@@ -200,9 +200,9 @@ setFooter(This,Footer)
setFooter(This,Footer, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingsetfooter">external documentation</a>.
--spec setFooter(This, Footer, [Option]) -> ok when
+-spec setFooter(This, Footer, [Option]) -> 'ok' when
This::wxHtmlEasyPrinting(), Footer::unicode:chardata(),
- Option :: {pg, integer()}.
+ Option :: {'pg', integer()}.
setFooter(#wx_ref{type=ThisT,ref=ThisRef},Footer, Options)
when is_list(Footer),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -214,7 +214,7 @@ setFooter(#wx_ref{type=ThisT,ref=ThisRef},Footer, Options)
<<ThisRef:32/?UI,(byte_size(Footer_UC)):32/?UI,(Footer_UC)/binary, 0:(((8- ((0+byte_size(Footer_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxHtmlEasyPrinting()) -> ok.
+-spec destroy(This::wxHtmlEasyPrinting()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxHtmlEasyPrinting),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxHtmlLinkEvent.erl b/lib/wx/src/gen/wxHtmlLinkEvent.erl
index 08594c95f0..ad1bf4e1bc 100644
--- a/lib/wx/src/gen/wxHtmlLinkEvent.erl
+++ b/lib/wx/src/gen/wxHtmlLinkEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxHtmlWindow.erl b/lib/wx/src/gen/wxHtmlWindow.erl
index 759b8ba0fd..f9bb135fcf 100644
--- a/lib/wx/src/gen/wxHtmlWindow.erl
+++ b/lib/wx/src/gen/wxHtmlWindow.erl
@@ -107,10 +107,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowwxhtmlwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxHtmlWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -190,7 +190,7 @@ historyCanForward(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowhistoryclear">external documentation</a>.
--spec historyClear(This) -> ok when
+-spec historyClear(This) -> 'ok' when
This::wxHtmlWindow().
historyClear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxHtmlWindow),
@@ -226,7 +226,7 @@ loadPage(#wx_ref{type=ThisT,ref=ThisRef},Location)
<<ThisRef:32/?UI,(byte_size(Location_UC)):32/?UI,(Location_UC)/binary, 0:(((8- ((0+byte_size(Location_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowselectall">external documentation</a>.
--spec selectAll(This) -> ok when
+-spec selectAll(This) -> 'ok' when
This::wxHtmlWindow().
selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxHtmlWindow),
@@ -242,7 +242,7 @@ selectionToText(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowselectline">external documentation</a>.
--spec selectLine(This, Pos) -> ok when
+-spec selectLine(This, Pos) -> 'ok' when
This::wxHtmlWindow(), Pos::{X::integer(), Y::integer()}.
selectLine(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
when is_integer(PosX),is_integer(PosY) ->
@@ -251,7 +251,7 @@ selectLine(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
<<ThisRef:32/?UI,PosX:32/?UI,PosY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowselectword">external documentation</a>.
--spec selectWord(This, Pos) -> ok when
+-spec selectWord(This, Pos) -> 'ok' when
This::wxHtmlWindow(), Pos::{X::integer(), Y::integer()}.
selectWord(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
when is_integer(PosX),is_integer(PosY) ->
@@ -260,7 +260,7 @@ selectWord(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
<<ThisRef:32/?UI,PosX:32/?UI,PosY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowsetborders">external documentation</a>.
--spec setBorders(This, B) -> ok when
+-spec setBorders(This, B) -> 'ok' when
This::wxHtmlWindow(), B::integer().
setBorders(#wx_ref{type=ThisT,ref=ThisRef},B)
when is_integer(B) ->
@@ -269,7 +269,7 @@ setBorders(#wx_ref{type=ThisT,ref=ThisRef},B)
<<ThisRef:32/?UI,B:32/?UI>>).
%% @equiv setFonts(This,Normal_face,Fixed_face, [])
--spec setFonts(This, Normal_face, Fixed_face) -> ok when
+-spec setFonts(This, Normal_face, Fixed_face) -> 'ok' when
This::wxHtmlWindow(), Normal_face::unicode:chardata(), Fixed_face::unicode:chardata().
setFonts(This,Normal_face,Fixed_face)
@@ -277,9 +277,9 @@ setFonts(This,Normal_face,Fixed_face)
setFonts(This,Normal_face,Fixed_face, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowsetfonts">external documentation</a>.
--spec setFonts(This, Normal_face, Fixed_face, [Option]) -> ok when
+-spec setFonts(This, Normal_face, Fixed_face, [Option]) -> 'ok' when
This::wxHtmlWindow(), Normal_face::unicode:chardata(), Fixed_face::unicode:chardata(),
- Option :: {sizes, integer()}.
+ Option :: {'sizes', integer()}.
setFonts(#wx_ref{type=ThisT,ref=ThisRef},Normal_face,Fixed_face, Options)
when is_list(Normal_face),is_list(Fixed_face),is_list(Options) ->
?CLASS(ThisT,wxHtmlWindow),
@@ -302,7 +302,7 @@ setPage(#wx_ref{type=ThisT,ref=ThisRef},Source)
<<ThisRef:32/?UI,(byte_size(Source_UC)):32/?UI,(Source_UC)/binary, 0:(((8- ((0+byte_size(Source_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowsetrelatedframe">external documentation</a>.
--spec setRelatedFrame(This, Frame, Format) -> ok when
+-spec setRelatedFrame(This, Frame, Format) -> 'ok' when
This::wxHtmlWindow(), Frame::wxFrame:wxFrame(), Format::unicode:chardata().
setRelatedFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef},Format)
when is_list(Format) ->
@@ -313,7 +313,7 @@ setRelatedFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef
<<ThisRef:32/?UI,FrameRef:32/?UI,(byte_size(Format_UC)):32/?UI,(Format_UC)/binary, 0:(((8- ((4+byte_size(Format_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowsetrelatedstatusbar">external documentation</a>.
--spec setRelatedStatusBar(This, Bar) -> ok when
+-spec setRelatedStatusBar(This, Bar) -> 'ok' when
This::wxHtmlWindow(), Bar::integer().
setRelatedStatusBar(#wx_ref{type=ThisT,ref=ThisRef},Bar)
when is_integer(Bar) ->
@@ -330,7 +330,7 @@ toText(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxHtmlWindow()) -> ok.
+-spec destroy(This::wxHtmlWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxHtmlWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxIcon.erl b/lib/wx/src/gen/wxIcon.erl
index 82042b0ba2..c9ec32dffc 100644
--- a/lib/wx/src/gen/wxIcon.erl
+++ b/lib/wx/src/gen/wxIcon.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -71,9 +71,9 @@ new(#wx_ref{type=LocT,ref=LocRef}) ->
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec new(Filename, [Option]) -> wxIcon() when
Filename::unicode:chardata(),
- Option :: {type, wx:wx_enum()}
- | {desiredWidth, integer()}
- | {desiredHeight, integer()}.
+ Option :: {'type', wx:wx_enum()}
+ | {'desiredWidth', integer()}
+ | {'desiredHeight', integer()}.
new(Filename, Options)
when is_list(Filename),is_list(Options) ->
Filename_UC = unicode:characters_to_binary([Filename,0]),
@@ -86,7 +86,7 @@ new(Filename, Options)
<<(byte_size(Filename_UC)):32/?UI,(Filename_UC)/binary, 0:(((8- ((4+byte_size(Filename_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxicon.html#wxiconcopyfrombitmap">external documentation</a>.
--spec copyFromBitmap(This, Bmp) -> ok when
+-spec copyFromBitmap(This, Bmp) -> 'ok' when
This::wxIcon(), Bmp::wxBitmap:wxBitmap().
copyFromBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
?CLASS(ThisT,wxIcon),
@@ -95,7 +95,7 @@ copyFromBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
<<ThisRef:32/?UI,BmpRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxIcon()) -> ok.
+-spec destroy(This::wxIcon()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxIcon),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxIconBundle.erl b/lib/wx/src/gen/wxIconBundle.erl
index acf98d0a12..47785963e3 100644
--- a/lib/wx/src/gen/wxIconBundle.erl
+++ b/lib/wx/src/gen/wxIconBundle.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -64,7 +64,7 @@ new(File,Type)
<<(byte_size(File_UC)):32/?UI,(File_UC)/binary, 0:(((8- ((4+byte_size(File_UC)) band 16#7)) band 16#7))/unit:8,Type:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxiconbundle.html#wxiconbundleaddicon">external documentation</a>.
--spec addIcon(This, Icon) -> ok when
+-spec addIcon(This, Icon) -> 'ok' when
This::wxIconBundle(), Icon::wxIcon:wxIcon().
addIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}) ->
?CLASS(ThisT,wxIconBundle),
@@ -73,7 +73,7 @@ addIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}) ->
<<ThisRef:32/?UI,IconRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxiconbundle.html#wxiconbundleaddicon">external documentation</a>.
--spec addIcon(This, File, Type) -> ok when
+-spec addIcon(This, File, Type) -> 'ok' when
This::wxIconBundle(), File::unicode:chardata(), Type::integer().
addIcon(#wx_ref{type=ThisT,ref=ThisRef},File,Type)
when is_list(File),is_integer(Type) ->
@@ -97,7 +97,7 @@ getIcon(This)
%%
-spec getIcon(This, [Option]) -> wxIcon:wxIcon() when
This::wxIconBundle(),
- Option :: {size, integer()};
+ Option :: {'size', integer()};
(This, Size) -> wxIcon:wxIcon() when
This::wxIconBundle(), Size::{W::integer(), H::integer()}.
getIcon(#wx_ref{type=ThisT,ref=ThisRef}, Options)
@@ -115,7 +115,7 @@ getIcon(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxIconBundle()) -> ok.
+-spec destroy(This::wxIconBundle()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxIconBundle),
wxe_util:destroy(?wxIconBundle_destruct,Obj),
diff --git a/lib/wx/src/gen/wxIconizeEvent.erl b/lib/wx/src/gen/wxIconizeEvent.erl
index 495f636946..c53a4cc406 100644
--- a/lib/wx/src/gen/wxIconizeEvent.erl
+++ b/lib/wx/src/gen/wxIconizeEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxIdleEvent.erl b/lib/wx/src/gen/wxIdleEvent.erl
index 4b83b5f50a..1cb3e34ef6 100644
--- a/lib/wx/src/gen/wxIdleEvent.erl
+++ b/lib/wx/src/gen/wxIdleEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -62,7 +62,7 @@ getMode() ->
<<>>).
%% @equiv requestMore(This, [])
--spec requestMore(This) -> ok when
+-spec requestMore(This) -> 'ok' when
This::wxIdleEvent().
requestMore(This)
@@ -70,9 +70,9 @@ requestMore(This)
requestMore(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxidleevent.html#wxidleeventrequestmore">external documentation</a>.
--spec requestMore(This, [Option]) -> ok when
+-spec requestMore(This, [Option]) -> 'ok' when
This::wxIdleEvent(),
- Option :: {needMore, boolean()}.
+ Option :: {'needMore', boolean()}.
requestMore(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxIdleEvent),
@@ -92,7 +92,7 @@ moreRequested(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxidleevent.html#wxidleeventsetmode">external documentation</a>.
%%<br /> Mode = ?wxIDLE_PROCESS_ALL | ?wxIDLE_PROCESS_SPECIFIED
--spec setMode(Mode) -> ok when
+-spec setMode(Mode) -> 'ok' when
Mode::wx:wx_enum().
setMode(Mode)
when is_integer(Mode) ->
diff --git a/lib/wx/src/gen/wxImage.erl b/lib/wx/src/gen/wxImage.erl
index 05d1038eee..e82f3d609e 100644
--- a/lib/wx/src/gen/wxImage.erl
+++ b/lib/wx/src/gen/wxImage.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -71,15 +71,15 @@ new(Name)
%% <br /> Also:<br />
%% new(Name, [Option]) -> wxImage() when<br />
%% Name::unicode:chardata(),<br />
-%% Option :: {type, integer()}<br />
-%% | {index, integer()}.<br />
+%% Option :: {'type', integer()}<br />
+%% | {'index', integer()}.<br />
%%
-spec new(Width, Height) -> wxImage() when
Width::integer(), Height::integer();
(Name, [Option]) -> wxImage() when
Name::unicode:chardata(),
- Option :: {type, integer()}
- | {index, integer()}.
+ Option :: {'type', integer()}
+ | {'index', integer()}.
new(Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -98,19 +98,19 @@ new(Name, Options)
%% <br /> Also:<br />
%% new(Width, Height, [Option]) -> wxImage() when<br />
%% Width::integer(), Height::integer(),<br />
-%% Option :: {clear, boolean()};<br />
+%% Option :: {'clear', boolean()};<br />
%% (Name, Mimetype, [Option]) -> wxImage() when<br />
%% Name::unicode:chardata(), Mimetype::unicode:chardata(),<br />
-%% Option :: {index, integer()}.<br />
+%% Option :: {'index', integer()}.<br />
%%
-spec new(Width, Height, Data) -> wxImage() when
Width::integer(), Height::integer(), Data::binary();
(Width, Height, [Option]) -> wxImage() when
Width::integer(), Height::integer(),
- Option :: {clear, boolean()};
+ Option :: {'clear', boolean()};
(Name, Mimetype, [Option]) -> wxImage() when
Name::unicode:chardata(), Mimetype::unicode:chardata(),
- Option :: {index, integer()}.
+ Option :: {'index', integer()}.
new(Width,Height,Data)
when is_integer(Width),is_integer(Height),is_binary(Data) ->
@@ -136,13 +136,13 @@ new(Name,Mimetype, Options)
%% <br /> Also:<br />
%% new(Width, Height, Data, [Option]) -> wxImage() when<br />
%% Width::integer(), Height::integer(), Data::binary(),<br />
-%% Option :: {static_data, boolean()}.<br />
+%% Option :: {'static_data', boolean()}.<br />
%%
-spec new(Width, Height, Data, Alpha) -> wxImage() when
Width::integer(), Height::integer(), Data::binary(), Alpha::binary();
(Width, Height, Data, [Option]) -> wxImage() when
Width::integer(), Height::integer(), Data::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
new(Width,Height,Data,Alpha)
when is_integer(Width),is_integer(Height),is_binary(Data),is_binary(Alpha) ->
@@ -159,7 +159,7 @@ new(Width,Height,Data, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagewximage">external documentation</a>.
-spec new(Width, Height, Data, Alpha, [Option]) -> wxImage() when
Width::integer(), Height::integer(), Data::binary(), Alpha::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
new(Width,Height,Data,Alpha, Options)
when is_integer(Width),is_integer(Height),is_binary(Data),is_binary(Alpha),is_list(Options) ->
wxe_util:send_bin(Data),
@@ -208,7 +208,7 @@ convertAlphaToMask(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageconvertalphatomask">external documentation</a>.
-spec convertAlphaToMask(This, [Option]) -> boolean() when
This::wxImage(),
- Option :: {threshold, integer()}.
+ Option :: {'threshold', integer()}.
convertAlphaToMask(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -229,9 +229,9 @@ convertToGreyscale(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageconverttogreyscale">external documentation</a>.
-spec convertToGreyscale(This, [Option]) -> wxImage() when
This::wxImage(),
- Option :: {lr, number()}
- | {lg, number()}
- | {lb, number()}.
+ Option :: {'lr', number()}
+ | {'lg', number()}
+ | {'lb', number()}.
convertToGreyscale(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -272,13 +272,13 @@ create(This,Width,Height)
%% <br /> Also:<br />
%% create(This, Width, Height, [Option]) -> boolean() when<br />
%% This::wxImage(), Width::integer(), Height::integer(),<br />
-%% Option :: {clear, boolean()}.<br />
+%% Option :: {'clear', boolean()}.<br />
%%
-spec create(This, Width, Height, Data) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(), Data::binary();
(This, Width, Height, [Option]) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(),
- Option :: {clear, boolean()}.
+ Option :: {'clear', boolean()}.
create(This,Width,Height,Data)
when is_record(This, wx_ref),is_integer(Width),is_integer(Height),is_binary(Data) ->
@@ -296,13 +296,13 @@ create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
%% <br /> Also:<br />
%% create(This, Width, Height, Data, [Option]) -> boolean() when<br />
%% This::wxImage(), Width::integer(), Height::integer(), Data::binary(),<br />
-%% Option :: {static_data, boolean()}.<br />
+%% Option :: {'static_data', boolean()}.<br />
%%
-spec create(This, Width, Height, Data, Alpha) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(), Data::binary(), Alpha::binary();
(This, Width, Height, Data, [Option]) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(), Data::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
create(This,Width,Height,Data,Alpha)
when is_record(This, wx_ref),is_integer(Width),is_integer(Height),is_binary(Data),is_binary(Alpha) ->
@@ -320,7 +320,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height,Data, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagecreate">external documentation</a>.
-spec create(This, Width, Height, Data, Alpha, [Option]) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(), Data::binary(), Alpha::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height,Data,Alpha, Options)
when is_integer(Width),is_integer(Height),is_binary(Data),is_binary(Alpha),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -333,7 +333,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height,Data,Alpha, Options)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagedestroy">external documentation</a>.
--spec 'Destroy'(This) -> ok when
+-spec 'Destroy'(This) -> 'ok' when
This::wxImage().
'Destroy'(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxImage),
@@ -353,9 +353,9 @@ findFirstUnusedColour(This)
-spec findFirstUnusedColour(This, [Option]) -> Result when
Result :: {Res ::boolean(), R::integer(), G::integer(), B::integer()},
This::wxImage(),
- Option :: {startR, integer()}
- | {startG, integer()}
- | {startB, integer()}.
+ Option :: {'startR', integer()}
+ | {'startG', integer()}
+ | {'startB', integer()}.
findFirstUnusedColour(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -428,7 +428,7 @@ getImageCount(Name)
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec getImageCount(Name, [Option]) -> integer() when
Name::unicode:chardata(),
- Option :: {type, wx:wx_enum()}.
+ Option :: {'type', wx:wx_enum()}.
getImageCount(Name, Options)
when is_list(Name),is_list(Options) ->
Name_UC = unicode:characters_to_binary([Name,0]),
@@ -560,7 +560,7 @@ hasOption(#wx_ref{type=ThisT,ref=ThisRef},Name)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageinitalpha">external documentation</a>.
--spec initAlpha(This) -> ok when
+-spec initAlpha(This) -> 'ok' when
This::wxImage().
initAlpha(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxImage),
@@ -568,7 +568,7 @@ initAlpha(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageinitstandardhandlers">external documentation</a>.
--spec initStandardHandlers() -> ok.
+-spec initStandardHandlers() -> 'ok'.
initStandardHandlers() ->
wxe_util:cast(?wxImage_InitStandardHandlers,
<<>>).
@@ -584,7 +584,7 @@ isTransparent(This,X,Y)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageistransparent">external documentation</a>.
-spec isTransparent(This, X, Y, [Option]) -> boolean() when
This::wxImage(), X::integer(), Y::integer(),
- Option :: {threshold, integer()}.
+ Option :: {'threshold', integer()}.
isTransparent(#wx_ref{type=ThisT,ref=ThisRef},X,Y, Options)
when is_integer(X),is_integer(Y),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -605,8 +605,8 @@ loadFile(This,Name)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageloadfile">external documentation</a>.
-spec loadFile(This, Name, [Option]) -> boolean() when
This::wxImage(), Name::unicode:chardata(),
- Option :: {type, integer()}
- | {index, integer()}.
+ Option :: {'type', integer()}
+ | {'index', integer()}.
loadFile(#wx_ref{type=ThisT,ref=ThisRef},Name, Options)
when is_list(Name),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -621,7 +621,7 @@ loadFile(#wx_ref{type=ThisT,ref=ThisRef},Name, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageloadfile">external documentation</a>.
-spec loadFile(This, Name, Mimetype, [Option]) -> boolean() when
This::wxImage(), Name::unicode:chardata(), Mimetype::unicode:chardata(),
- Option :: {index, integer()}.
+ Option :: {'index', integer()}.
loadFile(#wx_ref{type=ThisT,ref=ThisRef},Name,Mimetype, Options)
when is_list(Name),is_list(Mimetype),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -661,7 +661,7 @@ mirror(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagemirror">external documentation</a>.
-spec mirror(This, [Option]) -> wxImage() when
This::wxImage(),
- Option :: {horizontally, boolean()}.
+ Option :: {'horizontally', boolean()}.
mirror(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -672,7 +672,7 @@ mirror(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagereplace">external documentation</a>.
--spec replace(This, R1, G1, B1, R2, G2, B2) -> ok when
+-spec replace(This, R1, G1, B1, R2, G2, B2) -> 'ok' when
This::wxImage(), R1::integer(), G1::integer(), B1::integer(), R2::integer(), G2::integer(), B2::integer().
replace(#wx_ref{type=ThisT,ref=ThisRef},R1,G1,B1,R2,G2,B2)
when is_integer(R1),is_integer(G1),is_integer(B1),is_integer(R2),is_integer(G2),is_integer(B2) ->
@@ -692,7 +692,7 @@ rescale(This,Width,Height)
%%<br /> Quality = integer
-spec rescale(This, Width, Height, [Option]) -> wxImage() when
This::wxImage(), Width::integer(), Height::integer(),
- Option :: {quality, wx:wx_enum()}.
+ Option :: {'quality', wx:wx_enum()}.
rescale(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -713,9 +713,9 @@ resize(This,Size={SizeW,SizeH},Pos={PosX,PosY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageresize">external documentation</a>.
-spec resize(This, Size, Pos, [Option]) -> wxImage() when
This::wxImage(), Size::{W::integer(), H::integer()}, Pos::{X::integer(), Y::integer()},
- Option :: {r, integer()}
- | {g, integer()}
- | {b, integer()}.
+ Option :: {'r', integer()}
+ | {'g', integer()}
+ | {'b', integer()}.
resize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH},{PosX,PosY}, Options)
when is_integer(SizeW),is_integer(SizeH),is_integer(PosX),is_integer(PosY),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -738,8 +738,8 @@ rotate(This,Angle,Centre_of_rotation={Centre_of_rotationX,Centre_of_rotationY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagerotate">external documentation</a>.
-spec rotate(This, Angle, Centre_of_rotation, [Option]) -> wxImage() when
This::wxImage(), Angle::number(), Centre_of_rotation::{X::integer(), Y::integer()},
- Option :: {interpolating, boolean()}
- | {offset_after_rotation, {X::integer(), Y::integer()}}.
+ Option :: {'interpolating', boolean()}
+ | {'offset_after_rotation', {X::integer(), Y::integer()}}.
rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle,{Centre_of_rotationX,Centre_of_rotationY}, Options)
when is_number(Angle),is_integer(Centre_of_rotationX),is_integer(Centre_of_rotationY),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -751,7 +751,7 @@ rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle,{Centre_of_rotationX,Centre_of_rota
<<ThisRef:32/?UI,0:32,Angle:64/?F,Centre_of_rotationX:32/?UI,Centre_of_rotationY:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagerotatehue">external documentation</a>.
--spec rotateHue(This, Angle) -> ok when
+-spec rotateHue(This, Angle) -> 'ok' when
This::wxImage(), Angle::number().
rotateHue(#wx_ref{type=ThisT,ref=ThisRef},Angle)
when is_number(Angle) ->
@@ -770,7 +770,7 @@ rotate90(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagerotate90">external documentation</a>.
-spec rotate90(This, [Option]) -> wxImage() when
This::wxImage(),
- Option :: {clockwise, boolean()}.
+ Option :: {'clockwise', boolean()}.
rotate90(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -825,7 +825,7 @@ scale(This,Width,Height)
%%<br /> Quality = integer
-spec scale(This, Width, Height, [Option]) -> wxImage() when
This::wxImage(), Width::integer(), Height::integer(),
- Option :: {quality, wx:wx_enum()}.
+ Option :: {'quality', wx:wx_enum()}.
scale(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -846,9 +846,9 @@ size(This,Size={SizeW,SizeH},Pos={PosX,PosY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesize">external documentation</a>.
-spec size(This, Size, Pos, [Option]) -> wxImage() when
This::wxImage(), Size::{W::integer(), H::integer()}, Pos::{X::integer(), Y::integer()},
- Option :: {r, integer()}
- | {g, integer()}
- | {b, integer()}.
+ Option :: {'r', integer()}
+ | {'g', integer()}
+ | {'b', integer()}.
size(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH},{PosX,PosY}, Options)
when is_integer(SizeW),is_integer(SizeH),is_integer(PosX),is_integer(PosY),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -861,7 +861,7 @@ size(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH},{PosX,PosY}, Options)
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI,PosX:32/?UI,PosY:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setAlpha(This,Alpha, [])
--spec setAlpha(This, Alpha) -> ok when
+-spec setAlpha(This, Alpha) -> 'ok' when
This::wxImage(), Alpha::binary().
setAlpha(This,Alpha)
@@ -869,9 +869,9 @@ setAlpha(This,Alpha)
setAlpha(This,Alpha, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetalpha">external documentation</a>.
--spec setAlpha(This, Alpha, [Option]) -> ok when
+-spec setAlpha(This, Alpha, [Option]) -> 'ok' when
This::wxImage(), Alpha::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
setAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha, Options)
when is_binary(Alpha),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -883,7 +883,7 @@ setAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetalpha">external documentation</a>.
--spec setAlpha(This, X, Y, Alpha) -> ok when
+-spec setAlpha(This, X, Y, Alpha) -> 'ok' when
This::wxImage(), X::integer(), Y::integer(), Alpha::integer().
setAlpha(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Alpha)
when is_integer(X),is_integer(Y),is_integer(Alpha) ->
@@ -892,7 +892,7 @@ setAlpha(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Alpha)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,Alpha:32/?UI>>).
%% @equiv setData(This,Data, [])
--spec setData(This, Data) -> ok when
+-spec setData(This, Data) -> 'ok' when
This::wxImage(), Data::binary().
setData(This,Data)
@@ -900,9 +900,9 @@ setData(This,Data)
setData(This,Data, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetdata">external documentation</a>.
--spec setData(This, Data, [Option]) -> ok when
+-spec setData(This, Data, [Option]) -> 'ok' when
This::wxImage(), Data::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
setData(#wx_ref{type=ThisT,ref=ThisRef},Data, Options)
when is_binary(Data),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -914,7 +914,7 @@ setData(#wx_ref{type=ThisT,ref=ThisRef},Data, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setData(This,Data,New_width,New_height, [])
--spec setData(This, Data, New_width, New_height) -> ok when
+-spec setData(This, Data, New_width, New_height) -> 'ok' when
This::wxImage(), Data::binary(), New_width::integer(), New_height::integer().
setData(This,Data,New_width,New_height)
@@ -922,9 +922,9 @@ setData(This,Data,New_width,New_height)
setData(This,Data,New_width,New_height, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetdata">external documentation</a>.
--spec setData(This, Data, New_width, New_height, [Option]) -> ok when
+-spec setData(This, Data, New_width, New_height, [Option]) -> 'ok' when
This::wxImage(), Data::binary(), New_width::integer(), New_height::integer(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
setData(#wx_ref{type=ThisT,ref=ThisRef},Data,New_width,New_height, Options)
when is_binary(Data),is_integer(New_width),is_integer(New_height),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -936,7 +936,7 @@ setData(#wx_ref{type=ThisT,ref=ThisRef},Data,New_width,New_height, Options)
<<ThisRef:32/?UI,New_width:32/?UI,New_height:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setMask(This, [])
--spec setMask(This) -> ok when
+-spec setMask(This) -> 'ok' when
This::wxImage().
setMask(This)
@@ -944,9 +944,9 @@ setMask(This)
setMask(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetmask">external documentation</a>.
--spec setMask(This, [Option]) -> ok when
+-spec setMask(This, [Option]) -> 'ok' when
This::wxImage(),
- Option :: {mask, boolean()}.
+ Option :: {'mask', boolean()}.
setMask(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -957,7 +957,7 @@ setMask(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetmaskcolour">external documentation</a>.
--spec setMaskColour(This, R, G, B) -> ok when
+-spec setMaskColour(This, R, G, B) -> 'ok' when
This::wxImage(), R::integer(), G::integer(), B::integer().
setMaskColour(#wx_ref{type=ThisT,ref=ThisRef},R,G,B)
when is_integer(R),is_integer(G),is_integer(B) ->
@@ -977,12 +977,12 @@ setMaskFromImage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MaskT,ref=MaskRef}
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetoption">external documentation</a>.
%% <br /> Also:<br />
-%% setOption(This, Name, Value) -> ok when<br />
+%% setOption(This, Name, Value) -> 'ok' when<br />
%% This::wxImage(), Name::unicode:chardata(), Value::unicode:chardata().<br />
%%
--spec setOption(This, Name, Value) -> ok when
+-spec setOption(This, Name, Value) -> 'ok' when
This::wxImage(), Name::unicode:chardata(), Value::integer();
- (This, Name, Value) -> ok when
+ (This, Name, Value) -> 'ok' when
This::wxImage(), Name::unicode:chardata(), Value::unicode:chardata().
setOption(#wx_ref{type=ThisT,ref=ThisRef},Name,Value)
when is_list(Name),is_integer(Value) ->
@@ -999,7 +999,7 @@ setOption(#wx_ref{type=ThisT,ref=ThisRef},Name,Value)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((4+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetpalette">external documentation</a>.
--spec setPalette(This, Palette) -> ok when
+-spec setPalette(This, Palette) -> 'ok' when
This::wxImage(), Palette::wxPalette:wxPalette().
setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}) ->
?CLASS(ThisT,wxImage),
@@ -1008,7 +1008,7 @@ setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}
<<ThisRef:32/?UI,PaletteRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetrgb">external documentation</a>.
--spec setRGB(This, Rect, R, G, B) -> ok when
+-spec setRGB(This, Rect, R, G, B) -> 'ok' when
This::wxImage(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, R::integer(), G::integer(), B::integer().
setRGB(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},R,G,B)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),is_integer(R),is_integer(G),is_integer(B) ->
@@ -1017,7 +1017,7 @@ setRGB(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},R,G,B)
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI,R:32/?UI,G:32/?UI,B:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetrgb">external documentation</a>.
--spec setRGB(This, X, Y, R, G, B) -> ok when
+-spec setRGB(This, X, Y, R, G, B) -> 'ok' when
This::wxImage(), X::integer(), Y::integer(), R::integer(), G::integer(), B::integer().
setRGB(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R,G,B)
when is_integer(X),is_integer(Y),is_integer(R),is_integer(G),is_integer(B) ->
@@ -1026,7 +1026,7 @@ setRGB(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R,G,B)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,R:32/?UI,G:32/?UI,B:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxImage()) -> ok.
+-spec destroy(This::wxImage()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxImage),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxImageList.erl b/lib/wx/src/gen/wxImageList.erl
index 89e0b2cd41..39a44c0afe 100644
--- a/lib/wx/src/gen/wxImageList.erl
+++ b/lib/wx/src/gen/wxImageList.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -54,8 +54,8 @@ new(Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximagelist.html#wximagelistwximagelist">external documentation</a>.
-spec new(Width, Height, [Option]) -> wxImageList() when
Width::integer(), Height::integer(),
- Option :: {mask, boolean()}
- | {initialCount, integer()}.
+ Option :: {'mask', boolean()}
+ | {'initialCount', integer()}.
new(Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
MOpts = fun({mask, Mask}, Acc) -> [<<1:32/?UI,(wxe_util:from_bool(Mask)):32/?UI>>|Acc];
@@ -107,8 +107,8 @@ create(This,Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximagelist.html#wximagelistcreate">external documentation</a>.
-spec create(This, Width, Height, [Option]) -> boolean() when
This::wxImageList(), Width::integer(), Height::integer(),
- Option :: {mask, boolean()}
- | {initialCount, integer()}.
+ Option :: {'mask', boolean()}
+ | {'initialCount', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxImageList),
@@ -130,8 +130,8 @@ draw(This,Index,Dc,X,Y)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximagelist.html#wximagelistdraw">external documentation</a>.
-spec draw(This, Index, Dc, X, Y, [Option]) -> boolean() when
This::wxImageList(), Index::integer(), Dc::wxDC:wxDC(), X::integer(), Y::integer(),
- Option :: {flags, integer()}
- | {solidBackground, boolean()}.
+ Option :: {'flags', integer()}
+ | {'solidBackground', boolean()}.
draw(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=DcT,ref=DcRef},X,Y, Options)
when is_integer(Index),is_integer(X),is_integer(Y),is_list(Options) ->
?CLASS(ThisT,wxImageList),
@@ -218,7 +218,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=BitmapT,ref=BitmapRef
<<ThisRef:32/?UI,Index:32/?UI,BitmapRef:32/?UI,MaskRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxImageList()) -> ok.
+-spec destroy(This::wxImageList()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxImageList),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxInitDialogEvent.erl b/lib/wx/src/gen/wxInitDialogEvent.erl
index 3ab90b947c..54e344616e 100644
--- a/lib/wx/src/gen/wxInitDialogEvent.erl
+++ b/lib/wx/src/gen/wxInitDialogEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxJoystickEvent.erl b/lib/wx/src/gen/wxJoystickEvent.erl
index 5d82b629c3..6bad079953 100644
--- a/lib/wx/src/gen/wxJoystickEvent.erl
+++ b/lib/wx/src/gen/wxJoystickEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -57,7 +57,7 @@ buttonDown(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxjoystickevent.html#wxjoystickeventbuttondown">external documentation</a>.
-spec buttonDown(This, [Option]) -> boolean() when
This::wxJoystickEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonDown(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxJoystickEvent),
@@ -78,7 +78,7 @@ buttonIsDown(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxjoystickevent.html#wxjoystickeventbuttonisdown">external documentation</a>.
-spec buttonIsDown(This, [Option]) -> boolean() when
This::wxJoystickEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonIsDown(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxJoystickEvent),
@@ -99,7 +99,7 @@ buttonUp(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxjoystickevent.html#wxjoystickeventbuttonup">external documentation</a>.
-spec buttonUp(This, [Option]) -> boolean() when
This::wxJoystickEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonUp(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxJoystickEvent),
diff --git a/lib/wx/src/gen/wxKeyEvent.erl b/lib/wx/src/gen/wxKeyEvent.erl
index 6a3b5de502..8f215c6eb7 100644
--- a/lib/wx/src/gen/wxKeyEvent.erl
+++ b/lib/wx/src/gen/wxKeyEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxLayoutAlgorithm.erl b/lib/wx/src/gen/wxLayoutAlgorithm.erl
index 6a3e77b3de..f389b83281 100644
--- a/lib/wx/src/gen/wxLayoutAlgorithm.erl
+++ b/lib/wx/src/gen/wxLayoutAlgorithm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@ layoutFrame(This,Frame)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlayoutalgorithm.html#wxlayoutalgorithmlayoutframe">external documentation</a>.
-spec layoutFrame(This, Frame, [Option]) -> boolean() when
This::wxLayoutAlgorithm(), Frame::wxFrame:wxFrame(),
- Option :: {mainWindow, wxWindow:wxWindow()}.
+ Option :: {'mainWindow', wxWindow:wxWindow()}.
layoutFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxLayoutAlgorithm),
@@ -75,7 +75,7 @@ layoutMDIFrame(This,Frame)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlayoutalgorithm.html#wxlayoutalgorithmlayoutmdiframe">external documentation</a>.
-spec layoutMDIFrame(This, Frame, [Option]) -> boolean() when
This::wxLayoutAlgorithm(), Frame::wxMDIParentFrame:wxMDIParentFrame(),
- Option :: {rect, {X::integer(), Y::integer(), W::integer(), H::integer()}}.
+ Option :: {'rect', {X::integer(), Y::integer(), W::integer(), H::integer()}}.
layoutMDIFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxLayoutAlgorithm),
@@ -97,7 +97,7 @@ layoutWindow(This,Frame)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlayoutalgorithm.html#wxlayoutalgorithmlayoutwindow">external documentation</a>.
-spec layoutWindow(This, Frame, [Option]) -> boolean() when
This::wxLayoutAlgorithm(), Frame::wxWindow:wxWindow(),
- Option :: {mainWindow, wxWindow:wxWindow()}.
+ Option :: {'mainWindow', wxWindow:wxWindow()}.
layoutWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxLayoutAlgorithm),
@@ -109,7 +109,7 @@ layoutWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef},
<<ThisRef:32/?UI,FrameRef:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxLayoutAlgorithm()) -> ok.
+-spec destroy(This::wxLayoutAlgorithm()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxLayoutAlgorithm),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxListBox.erl b/lib/wx/src/gen/wxListBox.erl
index eaa026839e..9ab3616e9b 100644
--- a/lib/wx/src/gen/wxListBox.erl
+++ b/lib/wx/src/gen/wxListBox.erl
@@ -103,11 +103,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxwxlistbox">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxListBox() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {choices, [unicode:chardata()]}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'choices', [unicode:chardata()]}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,8 +132,8 @@ create(This,Parent,Id,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Pos, Size, Choices, [Option]) -> boolean() when
This::wxListBox(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ThisT,wxListBox),
@@ -148,7 +148,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{P
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,PosX:32/?UI,PosY:32/?UI,SizeW:32/?UI,SizeH:32/?UI,(length(Choices_UCA)):32/?UI, (<< <<(byte_size(UC_Str)):32/?UI, UC_Str/binary>>|| UC_Str <- Choices_UCA>>)/binary, 0:(((8- ((0 + lists:sum([byte_size(S)+4||S<-Choices_UCA])) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxdeselect">external documentation</a>.
--spec deselect(This, N) -> ok when
+-spec deselect(This, N) -> 'ok' when
This::wxListBox(), N::integer().
deselect(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -166,7 +166,7 @@ getSelections(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxinsertitems">external documentation</a>.
--spec insertItems(This, Items, Pos) -> ok when
+-spec insertItems(This, Items, Pos) -> 'ok' when
This::wxListBox(), Items::[unicode:chardata()], Pos::integer().
insertItems(#wx_ref{type=ThisT,ref=ThisRef},Items,Pos)
when is_list(Items),is_integer(Pos) ->
@@ -186,7 +186,7 @@ isSelected(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxset">external documentation</a>.
--spec set(This, Items) -> ok when
+-spec set(This, Items) -> 'ok' when
This::wxListBox(), Items::[unicode:chardata()].
set(#wx_ref{type=ThisT,ref=ThisRef},Items)
when is_list(Items) ->
@@ -207,12 +207,12 @@ hitTest(#wx_ref{type=ThisT,ref=ThisRef},{PointX,PointY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxsetfirstitem">external documentation</a>.
%% <br /> Also:<br />
-%% setFirstItem(This, S) -> ok when<br />
+%% setFirstItem(This, S) -> 'ok' when<br />
%% This::wxListBox(), S::unicode:chardata().<br />
%%
--spec setFirstItem(This, N) -> ok when
+-spec setFirstItem(This, N) -> 'ok' when
This::wxListBox(), N::integer();
- (This, S) -> ok when
+ (This, S) -> 'ok' when
This::wxListBox(), S::unicode:chardata().
setFirstItem(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -227,7 +227,7 @@ setFirstItem(#wx_ref{type=ThisT,ref=ThisRef},S)
<<ThisRef:32/?UI,(byte_size(S_UC)):32/?UI,(S_UC)/binary, 0:(((8- ((0+byte_size(S_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListBox()) -> ok.
+-spec destroy(This::wxListBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxListCtrl.erl b/lib/wx/src/gen/wxListCtrl.erl
index 6750931fdb..d1a063d900 100644
--- a/lib/wx/src/gen/wxListCtrl.erl
+++ b/lib/wx/src/gen/wxListCtrl.erl
@@ -38,7 +38,7 @@
getItemData/2,getItemFont/2,getItemPosition/2,getItemRect/2,getItemRect/3,
getItemSpacing/1,getItemState/3,getItemText/2,getItemTextColour/2,
getNextItem/2,getNextItem/3,getSelectedItemCount/1,getTextColour/1,
- getTopItem/1,getViewRect/1,hitTest/3,insertColumn/3,insertColumn/4,
+ getTopItem/1,getViewRect/1,hitTest/2,insertColumn/3,insertColumn/4,
insertItem/2,insertItem/3,insertItem/4,refreshItem/2,refreshItems/3,
scrollList/3,setBackgroundColour/2,setColumn/3,setColumnWidth/3,setImageList/3,
setItem/2,setItem/4,setItem/5,setItemBackgroundColour/3,setItemColumnImage/4,
@@ -156,7 +156,7 @@ arrange(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlarrange">external documentation</a>.
-spec arrange(This, [Option]) -> boolean() when
This::wxListCtrl(),
- Option :: {flag, integer()}.
+ Option :: {'flag', integer()}.
arrange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -167,7 +167,7 @@ arrange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList, Which) -> ok when
+-spec assignImageList(This, ImageList, Which) -> 'ok' when
This::wxListCtrl(), ImageList::wxImageList:wxImageList(), Which::integer().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef},Which)
when is_integer(Which) ->
@@ -177,7 +177,7 @@ assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=Imag
<<ThisRef:32/?UI,ImageListRef:32/?UI,Which:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlclearall">external documentation</a>.
--spec clearAll(This) -> ok when
+-spec clearAll(This) -> 'ok' when
This::wxListCtrl().
clearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxListCtrl),
@@ -278,7 +278,7 @@ findItem(This,Start,Str)
%%
-spec findItem(This, Start, Str, [Option]) -> integer() when
This::wxListCtrl(), Start::integer(), Str::unicode:chardata(),
- Option :: {partial, boolean()};
+ Option :: {'partial', boolean()};
(This, Start, Pt, Direction) -> integer() when
This::wxListCtrl(), Start::integer(), Pt::{X::integer(), Y::integer()}, Direction::integer().
findItem(#wx_ref{type=ThisT,ref=ThisRef},Start,Str, Options)
@@ -415,7 +415,7 @@ getItemRect(This,Item)
-spec getItemRect(This, Item, [Option]) -> Result when
Result :: {Res ::boolean(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}},
This::wxListCtrl(), Item::integer(),
- Option :: {code, integer()}.
+ Option :: {'code', integer()}.
getItemRect(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -471,8 +471,8 @@ getNextItem(This,Item)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlgetnextitem">external documentation</a>.
-spec getNextItem(This, Item, [Option]) -> integer() when
This::wxListCtrl(), Item::integer(),
- Option :: {geometry, integer()}
- | {state, integer()}.
+ Option :: {'geometry', integer()}
+ | {'state', integer()}.
getNextItem(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -516,13 +516,14 @@ getViewRect(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlhittest">external documentation</a>.
--spec hitTest(This, Point, Flags) -> integer() when
- This::wxListCtrl(), Point::{X::integer(), Y::integer()}, Flags::integer().
-hitTest(#wx_ref{type=ThisT,ref=ThisRef},{PointX,PointY},Flags)
- when is_integer(PointX),is_integer(PointY),is_integer(Flags) ->
+-spec hitTest(This, Point) -> Result when
+ Result ::{Res ::integer(), Flags::integer(), PSubItem::integer()},
+ This::wxListCtrl(), Point::{X::integer(), Y::integer()}.
+hitTest(#wx_ref{type=ThisT,ref=ThisRef},{PointX,PointY})
+ when is_integer(PointX),is_integer(PointY) ->
?CLASS(ThisT,wxListCtrl),
wxe_util:call(?wxListCtrl_HitTest,
- <<ThisRef:32/?UI,PointX:32/?UI,PointY:32/?UI,Flags:32/?UI>>).
+ <<ThisRef:32/?UI,PointX:32/?UI,PointY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlinsertcolumn">external documentation</a>.
%% <br /> Also:<br />
@@ -547,8 +548,8 @@ insertColumn(#wx_ref{type=ThisT,ref=ThisRef},Col,#wx_ref{type=InfoT,ref=InfoRef}
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlinsertcolumn">external documentation</a>.
-spec insertColumn(This, Col, Heading, [Option]) -> integer() when
This::wxListCtrl(), Col::integer(), Heading::unicode:chardata(),
- Option :: {format, integer()}
- | {width, integer()}.
+ Option :: {'format', integer()}
+ | {'width', integer()}.
insertColumn(#wx_ref{type=ThisT,ref=ThisRef},Col,Heading, Options)
when is_integer(Col),is_list(Heading),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -601,7 +602,7 @@ insertItem(#wx_ref{type=ThisT,ref=ThisRef},Index,Label,ImageIndex)
<<ThisRef:32/?UI,Index:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8,ImageIndex:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlrefreshitem">external documentation</a>.
--spec refreshItem(This, Item) -> ok when
+-spec refreshItem(This, Item) -> 'ok' when
This::wxListCtrl(), Item::integer().
refreshItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -610,7 +611,7 @@ refreshItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,Item:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlrefreshitems">external documentation</a>.
--spec refreshItems(This, ItemFrom, ItemTo) -> ok when
+-spec refreshItems(This, ItemFrom, ItemTo) -> 'ok' when
This::wxListCtrl(), ItemFrom::integer(), ItemTo::integer().
refreshItems(#wx_ref{type=ThisT,ref=ThisRef},ItemFrom,ItemTo)
when is_integer(ItemFrom),is_integer(ItemTo) ->
@@ -656,7 +657,7 @@ setColumnWidth(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
<<ThisRef:32/?UI,Col:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetimagelist">external documentation</a>.
--spec setImageList(This, ImageList, Which) -> ok when
+-spec setImageList(This, ImageList, Which) -> 'ok' when
This::wxListCtrl(), ImageList::wxImageList:wxImageList(), Which::integer().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef},Which)
when is_integer(Which) ->
@@ -685,7 +686,7 @@ setItem(This,Index,Col,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitem">external documentation</a>.
-spec setItem(This, Index, Col, Label, [Option]) -> integer() when
This::wxListCtrl(), Index::integer(), Col::integer(), Label::unicode:chardata(),
- Option :: {imageId, integer()}.
+ Option :: {'imageId', integer()}.
setItem(#wx_ref{type=ThisT,ref=ThisRef},Index,Col,Label, Options)
when is_integer(Index),is_integer(Col),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -697,7 +698,7 @@ setItem(#wx_ref{type=ThisT,ref=ThisRef},Index,Col,Label, Options)
<<ThisRef:32/?UI,Index:32/?UI,Col:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitembackgroundcolour">external documentation</a>.
--spec setItemBackgroundColour(This, Item, Col) -> ok when
+-spec setItemBackgroundColour(This, Item, Col) -> 'ok' when
This::wxListCtrl(), Item::integer(), Col::wx:wx_colour().
setItemBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
when is_integer(Item),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -706,7 +707,7 @@ setItemBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
<<ThisRef:32/?UI,Item:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemcount">external documentation</a>.
--spec setItemCount(This, Count) -> ok when
+-spec setItemCount(This, Count) -> 'ok' when
This::wxListCtrl(), Count::integer().
setItemCount(#wx_ref{type=ThisT,ref=ThisRef},Count)
when is_integer(Count) ->
@@ -724,7 +725,7 @@ setItemData(#wx_ref{type=ThisT,ref=ThisRef},Item,Data)
<<ThisRef:32/?UI,Item:32/?UI,Data:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemfont">external documentation</a>.
--spec setItemFont(This, Item, F) -> ok when
+-spec setItemFont(This, Item, F) -> 'ok' when
This::wxListCtrl(), Item::integer(), F::wxFont:wxFont().
setItemFont(#wx_ref{type=ThisT,ref=ThisRef},Item,#wx_ref{type=FT,ref=FRef})
when is_integer(Item) ->
@@ -744,7 +745,7 @@ setItemImage(This,Item,Image)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemimage">external documentation</a>.
-spec setItemImage(This, Item, Image, [Option]) -> boolean() when
This::wxListCtrl(), Item::integer(), Image::integer(),
- Option :: {selImage, integer()}.
+ Option :: {'selImage', integer()}.
setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image, Options)
when is_integer(Item),is_integer(Image),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -782,7 +783,7 @@ setItemState(#wx_ref{type=ThisT,ref=ThisRef},Item,State,StateMask)
<<ThisRef:32/?UI,Item:32/?UI,State:32/?UI,StateMask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemtext">external documentation</a>.
--spec setItemText(This, Item, Str) -> ok when
+-spec setItemText(This, Item, Str) -> 'ok' when
This::wxListCtrl(), Item::integer(), Str::unicode:chardata().
setItemText(#wx_ref{type=ThisT,ref=ThisRef},Item,Str)
when is_integer(Item),is_list(Str) ->
@@ -792,7 +793,7 @@ setItemText(#wx_ref{type=ThisT,ref=ThisRef},Item,Str)
<<ThisRef:32/?UI,Item:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((4+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemtextcolour">external documentation</a>.
--spec setItemTextColour(This, Item, Col) -> ok when
+-spec setItemTextColour(This, Item, Col) -> 'ok' when
This::wxListCtrl(), Item::integer(), Col::wx:wx_colour().
setItemTextColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
when is_integer(Item),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -801,7 +802,7 @@ setItemTextColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
<<ThisRef:32/?UI,Item:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @equiv setSingleStyle(This,Style, [])
--spec setSingleStyle(This, Style) -> ok when
+-spec setSingleStyle(This, Style) -> 'ok' when
This::wxListCtrl(), Style::integer().
setSingleStyle(This,Style)
@@ -809,9 +810,9 @@ setSingleStyle(This,Style)
setSingleStyle(This,Style, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetsinglestyle">external documentation</a>.
--spec setSingleStyle(This, Style, [Option]) -> ok when
+-spec setSingleStyle(This, Style, [Option]) -> 'ok' when
This::wxListCtrl(), Style::integer(),
- Option :: {add, boolean()}.
+ Option :: {'add', boolean()}.
setSingleStyle(#wx_ref{type=ThisT,ref=ThisRef},Style, Options)
when is_integer(Style),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -822,7 +823,7 @@ setSingleStyle(#wx_ref{type=ThisT,ref=ThisRef},Style, Options)
<<ThisRef:32/?UI,Style:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsettextcolour">external documentation</a>.
--spec setTextColour(This, Col) -> ok when
+-spec setTextColour(This, Col) -> 'ok' when
This::wxListCtrl(), Col::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -831,7 +832,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetwindowstyleflag">external documentation</a>.
--spec setWindowStyleFlag(This, Style) -> ok when
+-spec setWindowStyleFlag(This, Style) -> 'ok' when
This::wxListCtrl(), Style::integer().
setWindowStyleFlag(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -858,7 +859,7 @@ sortItems(#wx_ref{type=ThisT,ref=ThisRef}, SortCallBack)
SortId = wxe_util:get_cbId(Sort),
wxe_util:call(?wxListCtrl_SortItems, <<ThisRef:32/?UI,SortId:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListCtrl()) -> ok.
+-spec destroy(This::wxListCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxListEvent.erl b/lib/wx/src/gen/wxListEvent.erl
index b989f9233c..b66773fcc7 100644
--- a/lib/wx/src/gen/wxListEvent.erl
+++ b/lib/wx/src/gen/wxListEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxListItem.erl b/lib/wx/src/gen/wxListItem.erl
index 568eba4c6a..1530a8c514 100644
--- a/lib/wx/src/gen/wxListItem.erl
+++ b/lib/wx/src/gen/wxListItem.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -54,7 +54,7 @@ new(#wx_ref{type=ItemT,ref=ItemRef}) ->
<<ItemRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxListItem().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxListItem),
@@ -152,7 +152,7 @@ getWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetalign">external documentation</a>.
%%<br /> Align = ?wxLIST_FORMAT_LEFT | ?wxLIST_FORMAT_RIGHT | ?wxLIST_FORMAT_CENTRE | ?wxLIST_FORMAT_CENTER
--spec setAlign(This, Align) -> ok when
+-spec setAlign(This, Align) -> 'ok' when
This::wxListItem(), Align::wx:wx_enum().
setAlign(#wx_ref{type=ThisT,ref=ThisRef},Align)
when is_integer(Align) ->
@@ -161,7 +161,7 @@ setAlign(#wx_ref{type=ThisT,ref=ThisRef},Align)
<<ThisRef:32/?UI,Align:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxListItem(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -170,7 +170,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetcolumn">external documentation</a>.
--spec setColumn(This, Col) -> ok when
+-spec setColumn(This, Col) -> 'ok' when
This::wxListItem(), Col::integer().
setColumn(#wx_ref{type=ThisT,ref=ThisRef},Col)
when is_integer(Col) ->
@@ -179,7 +179,7 @@ setColumn(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxListItem(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxListItem),
@@ -188,7 +188,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetid">external documentation</a>.
--spec setId(This, Id) -> ok when
+-spec setId(This, Id) -> 'ok' when
This::wxListItem(), Id::integer().
setId(#wx_ref{type=ThisT,ref=ThisRef},Id)
when is_integer(Id) ->
@@ -197,7 +197,7 @@ setId(#wx_ref{type=ThisT,ref=ThisRef},Id)
<<ThisRef:32/?UI,Id:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetimage">external documentation</a>.
--spec setImage(This, Image) -> ok when
+-spec setImage(This, Image) -> 'ok' when
This::wxListItem(), Image::integer().
setImage(#wx_ref{type=ThisT,ref=ThisRef},Image)
when is_integer(Image) ->
@@ -206,7 +206,7 @@ setImage(#wx_ref{type=ThisT,ref=ThisRef},Image)
<<ThisRef:32/?UI,Image:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetmask">external documentation</a>.
--spec setMask(This, Mask) -> ok when
+-spec setMask(This, Mask) -> 'ok' when
This::wxListItem(), Mask::integer().
setMask(#wx_ref{type=ThisT,ref=ThisRef},Mask)
when is_integer(Mask) ->
@@ -215,7 +215,7 @@ setMask(#wx_ref{type=ThisT,ref=ThisRef},Mask)
<<ThisRef:32/?UI,Mask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetstate">external documentation</a>.
--spec setState(This, State) -> ok when
+-spec setState(This, State) -> 'ok' when
This::wxListItem(), State::integer().
setState(#wx_ref{type=ThisT,ref=ThisRef},State)
when is_integer(State) ->
@@ -224,7 +224,7 @@ setState(#wx_ref{type=ThisT,ref=ThisRef},State)
<<ThisRef:32/?UI,State:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetstatemask">external documentation</a>.
--spec setStateMask(This, StateMask) -> ok when
+-spec setStateMask(This, StateMask) -> 'ok' when
This::wxListItem(), StateMask::integer().
setStateMask(#wx_ref{type=ThisT,ref=ThisRef},StateMask)
when is_integer(StateMask) ->
@@ -233,7 +233,7 @@ setStateMask(#wx_ref{type=ThisT,ref=ThisRef},StateMask)
<<ThisRef:32/?UI,StateMask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsettext">external documentation</a>.
--spec setText(This, Text) -> ok when
+-spec setText(This, Text) -> 'ok' when
This::wxListItem(), Text::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -243,7 +243,7 @@ setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxListItem(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -252,7 +252,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetwidth">external documentation</a>.
--spec setWidth(This, Width) -> ok when
+-spec setWidth(This, Width) -> 'ok' when
This::wxListItem(), Width::integer().
setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -261,7 +261,7 @@ setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListItem()) -> ok.
+-spec destroy(This::wxListItem()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListItem),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxListItemAttr.erl b/lib/wx/src/gen/wxListItemAttr.erl
index 0c594ede8f..360366c1be 100644
--- a/lib/wx/src/gen/wxListItemAttr.erl
+++ b/lib/wx/src/gen/wxListItemAttr.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -101,7 +101,7 @@ hasTextColour(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitemattr.html#wxlistitemattrsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxListItemAttr(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -110,7 +110,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitemattr.html#wxlistitemattrsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxListItemAttr(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxListItemAttr),
@@ -119,7 +119,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitemattr.html#wxlistitemattrsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxListItemAttr(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -128,7 +128,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListItemAttr()) -> ok.
+-spec destroy(This::wxListItemAttr()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListItemAttr),
wxe_util:destroy(?wxListItemAttr_destroy,Obj),
diff --git a/lib/wx/src/gen/wxListView.erl b/lib/wx/src/gen/wxListView.erl
index 288afcee82..908bf4c1c9 100644
--- a/lib/wx/src/gen/wxListView.erl
+++ b/lib/wx/src/gen/wxListView.erl
@@ -81,7 +81,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxListView() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistview.html#wxlistviewclearcolumnimage">external documentation</a>.
--spec clearColumnImage(This, Col) -> ok when
+-spec clearColumnImage(This, Col) -> 'ok' when
This::wxListView(), Col::integer().
clearColumnImage(#wx_ref{type=ThisT,ref=ThisRef},Col)
when is_integer(Col) ->
@@ -90,7 +90,7 @@ clearColumnImage(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistview.html#wxlistviewfocus">external documentation</a>.
--spec focus(This, Index) -> ok when
+-spec focus(This, Index) -> 'ok' when
This::wxListView(), Index::integer().
focus(#wx_ref{type=ThisT,ref=ThisRef},Index)
when is_integer(Index) ->
@@ -133,7 +133,7 @@ isSelected(#wx_ref{type=ThisT,ref=ThisRef},Index)
<<ThisRef:32/?UI,Index:32/?UI>>).
%% @equiv select(This,N, [])
--spec select(This, N) -> ok when
+-spec select(This, N) -> 'ok' when
This::wxListView(), N::integer().
select(This,N)
@@ -141,9 +141,9 @@ select(This,N)
select(This,N, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistview.html#wxlistviewselect">external documentation</a>.
--spec select(This, N, [Option]) -> ok when
+-spec select(This, N, [Option]) -> 'ok' when
This::wxListView(), N::integer(),
- Option :: {on, boolean()}.
+ Option :: {'on', boolean()}.
select(#wx_ref{type=ThisT,ref=ThisRef},N, Options)
when is_integer(N),is_list(Options) ->
?CLASS(ThisT,wxListView),
@@ -154,7 +154,7 @@ select(#wx_ref{type=ThisT,ref=ThisRef},N, Options)
<<ThisRef:32/?UI,N:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistview.html#wxlistviewsetcolumnimage">external documentation</a>.
--spec setColumnImage(This, Col, Image) -> ok when
+-spec setColumnImage(This, Col, Image) -> 'ok' when
This::wxListView(), Col::integer(), Image::integer().
setColumnImage(#wx_ref{type=ThisT,ref=ThisRef},Col,Image)
when is_integer(Col),is_integer(Image) ->
diff --git a/lib/wx/src/gen/wxListbook.erl b/lib/wx/src/gen/wxListbook.erl
index 6ea34e8eb1..a7050e1db9 100644
--- a/lib/wx/src/gen/wxListbook.erl
+++ b/lib/wx/src/gen/wxListbook.erl
@@ -101,9 +101,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookwxlistbook">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxListbook() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,8 +126,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxListbook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxListbook),
@@ -141,7 +141,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxListbook().
advanceSelection(This)
@@ -149,9 +149,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxListbook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxListbook),
@@ -162,7 +162,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxListbook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxListbook),
@@ -181,9 +181,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxListbook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxListbook),
@@ -302,8 +302,8 @@ insertPage(This,N,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookinsertpage">external documentation</a>.
-spec insertPage(This, N, Page, Text, [Option]) -> boolean() when
This::wxListbook(), N::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(N),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxListbook),
@@ -317,7 +317,7 @@ insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Tex
<<ThisRef:32/?UI,N:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxListbook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxListbook),
@@ -326,7 +326,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxListbook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -372,7 +372,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListbook()) -> ok.
+-spec destroy(This::wxListbook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListbook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxLocale.erl b/lib/wx/src/gen/wxLocale.erl
index c0488022e0..d473731bf8 100644
--- a/lib/wx/src/gen/wxLocale.erl
+++ b/lib/wx/src/gen/wxLocale.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -56,7 +56,7 @@ new(Language)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocalewxlocale">external documentation</a>.
-spec new(Language, [Option]) -> wxLocale() when
Language::integer(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
new(Language, Options)
when is_integer(Language),is_list(Options) ->
MOpts = fun({flags, Flags}, Acc) -> [<<1:32/?UI,Flags:32/?UI>>|Acc];
@@ -76,8 +76,8 @@ init(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocaleinit">external documentation</a>.
-spec init(This, [Option]) -> boolean() when
This::wxLocale(),
- Option :: {language, integer()}
- | {flags, integer()}.
+ Option :: {'language', integer()}
+ | {'flags', integer()}.
init(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxLocale),
@@ -111,7 +111,7 @@ addCatalog(#wx_ref{type=ThisT,ref=ThisRef},SzDomain,MsgIdLanguage,MsgIdCharset)
<<ThisRef:32/?UI,(byte_size(SzDomain_UC)):32/?UI,(SzDomain_UC)/binary, 0:(((8- ((0+byte_size(SzDomain_UC)) band 16#7)) band 16#7))/unit:8,MsgIdLanguage:32/?UI,(byte_size(MsgIdCharset_UC)):32/?UI,(MsgIdCharset_UC)/binary, 0:(((8- ((0+byte_size(MsgIdCharset_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocaleaddcataloglookuppathprefix">external documentation</a>.
--spec addCatalogLookupPathPrefix(Prefix) -> ok when
+-spec addCatalogLookupPathPrefix(Prefix) -> 'ok' when
Prefix::unicode:chardata().
addCatalogLookupPathPrefix(Prefix)
when is_list(Prefix) ->
@@ -170,7 +170,7 @@ getString(This,SzOrigString)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocalegetstring">external documentation</a>.
-spec getString(This, SzOrigString, [Option]) -> unicode:charlist() when
This::wxLocale(), SzOrigString::unicode:chardata(),
- Option :: {szDomain, unicode:chardata()}.
+ Option :: {'szDomain', unicode:chardata()}.
getString(#wx_ref{type=ThisT,ref=ThisRef},SzOrigString, Options)
when is_list(SzOrigString),is_list(Options) ->
?CLASS(ThisT,wxLocale),
@@ -192,7 +192,7 @@ getString(This,SzOrigString,SzOrigString2,N)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocalegetstring">external documentation</a>.
-spec getString(This, SzOrigString, SzOrigString2, N, [Option]) -> unicode:charlist() when
This::wxLocale(), SzOrigString::unicode:chardata(), SzOrigString2::unicode:chardata(), N::integer(),
- Option :: {szDomain, unicode:chardata()}.
+ Option :: {'szDomain', unicode:chardata()}.
getString(#wx_ref{type=ThisT,ref=ThisRef},SzOrigString,SzOrigString2,N, Options)
when is_list(SzOrigString),is_list(SzOrigString2),is_integer(N),is_list(Options) ->
?CLASS(ThisT,wxLocale),
@@ -215,7 +215,7 @@ getHeaderValue(This,SzHeader)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocalegetheadervalue">external documentation</a>.
-spec getHeaderValue(This, SzHeader, [Option]) -> unicode:charlist() when
This::wxLocale(), SzHeader::unicode:chardata(),
- Option :: {szDomain, unicode:chardata()}.
+ Option :: {'szDomain', unicode:chardata()}.
getHeaderValue(#wx_ref{type=ThisT,ref=ThisRef},SzHeader, Options)
when is_list(SzHeader),is_list(Options) ->
?CLASS(ThisT,wxLocale),
@@ -272,7 +272,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxLocale()) -> ok.
+-spec destroy(This::wxLocale()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxLocale),
wxe_util:destroy(?wxLocale_destruct,Obj),
diff --git a/lib/wx/src/gen/wxLogNull.erl b/lib/wx/src/gen/wxLogNull.erl
index aa45245cd0..e82601a350 100644
--- a/lib/wx/src/gen/wxLogNull.erl
+++ b/lib/wx/src/gen/wxLogNull.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,7 +42,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxLogNull()) -> ok.
+-spec destroy(This::wxLogNull()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxLogNull),
wxe_util:destroy(?wxLogNull_destroy,Obj),
diff --git a/lib/wx/src/gen/wxMDIChildFrame.erl b/lib/wx/src/gen/wxMDIChildFrame.erl
index ed29e5431f..b294e4898d 100644
--- a/lib/wx/src/gen/wxMDIChildFrame.erl
+++ b/lib/wx/src/gen/wxMDIChildFrame.erl
@@ -108,9 +108,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframewxmdichildframe">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxMDIChildFrame() when
Parent::wxMDIParentFrame:wxMDIParentFrame(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxMDIParentFrame),
@@ -124,7 +124,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
<<ParentRef:32/?UI,Id:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((4+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframeactivate">external documentation</a>.
--spec activate(This) -> ok when
+-spec activate(This) -> 'ok' when
This::wxMDIChildFrame().
activate(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIChildFrame),
@@ -142,9 +142,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframecreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxMDIChildFrame(), Parent::wxMDIParentFrame:wxMDIParentFrame(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxMDIChildFrame),
@@ -159,7 +159,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Ti
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((0+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv maximize(This, [])
--spec maximize(This) -> ok when
+-spec maximize(This) -> 'ok' when
This::wxMDIChildFrame().
maximize(This)
@@ -167,9 +167,9 @@ maximize(This)
maximize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframemaximize">external documentation</a>.
--spec maximize(This, [Option]) -> ok when
+-spec maximize(This, [Option]) -> 'ok' when
This::wxMDIChildFrame(),
- Option :: {maximize, boolean()}.
+ Option :: {'maximize', boolean()}.
maximize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMDIChildFrame),
@@ -180,7 +180,7 @@ maximize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframerestore">external documentation</a>.
--spec restore(This) -> ok when
+-spec restore(This) -> 'ok' when
This::wxMDIChildFrame().
restore(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIChildFrame),
@@ -188,7 +188,7 @@ restore(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMDIChildFrame()) -> ok.
+-spec destroy(This::wxMDIChildFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMDIChildFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMDIClientWindow.erl b/lib/wx/src/gen/wxMDIClientWindow.erl
index 6f10627086..ddc31760f4 100644
--- a/lib/wx/src/gen/wxMDIClientWindow.erl
+++ b/lib/wx/src/gen/wxMDIClientWindow.erl
@@ -96,7 +96,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiclientwindow.html#wxmdiclientwindowwxmdiclientwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxMDIClientWindow() when
Parent::wxMDIParentFrame:wxMDIParentFrame(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxMDIParentFrame),
@@ -117,7 +117,7 @@ createClient(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiclientwindow.html#wxmdiclientwindowcreateclient">external documentation</a>.
-spec createClient(This, Parent, [Option]) -> boolean() when
This::wxMDIClientWindow(), Parent::wxMDIParentFrame:wxMDIParentFrame(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
createClient(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMDIClientWindow),
@@ -129,7 +129,7 @@ createClient(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMDIClientWindow()) -> ok.
+-spec destroy(This::wxMDIClientWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMDIClientWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMDIParentFrame.erl b/lib/wx/src/gen/wxMDIParentFrame.erl
index 47d9182d60..63b4ec8e23 100644
--- a/lib/wx/src/gen/wxMDIParentFrame.erl
+++ b/lib/wx/src/gen/wxMDIParentFrame.erl
@@ -109,9 +109,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframewxmdiparentframe">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxMDIParentFrame() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -125,7 +125,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
<<ParentRef:32/?UI,Id:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((4+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframeactivatenext">external documentation</a>.
--spec activateNext(This) -> ok when
+-spec activateNext(This) -> 'ok' when
This::wxMDIParentFrame().
activateNext(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -133,7 +133,7 @@ activateNext(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframeactivateprevious">external documentation</a>.
--spec activatePrevious(This) -> ok when
+-spec activatePrevious(This) -> 'ok' when
This::wxMDIParentFrame().
activatePrevious(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -141,7 +141,7 @@ activatePrevious(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframearrangeicons">external documentation</a>.
--spec arrangeIcons(This) -> ok when
+-spec arrangeIcons(This) -> 'ok' when
This::wxMDIParentFrame().
arrangeIcons(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -149,7 +149,7 @@ arrangeIcons(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframecascade">external documentation</a>.
--spec cascade(This) -> ok when
+-spec cascade(This) -> 'ok' when
This::wxMDIParentFrame().
cascade(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -167,9 +167,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframecreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxMDIParentFrame(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -200,7 +200,7 @@ getClientWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv tile(This, [])
--spec tile(This) -> ok when
+-spec tile(This) -> 'ok' when
This::wxMDIParentFrame().
tile(This)
@@ -209,9 +209,9 @@ tile(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframetile">external documentation</a>.
%%<br /> Orient = ?wxHORIZONTAL | ?wxVERTICAL | ?wxBOTH
--spec tile(This, [Option]) -> ok when
+-spec tile(This, [Option]) -> 'ok' when
This::wxMDIParentFrame(),
- Option :: {orient, wx:wx_enum()}.
+ Option :: {'orient', wx:wx_enum()}.
tile(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -222,7 +222,7 @@ tile(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMDIParentFrame()) -> ok.
+-spec destroy(This::wxMDIParentFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMDIParentFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMask.erl b/lib/wx/src/gen/wxMask.erl
index 343f8e4938..f50392eb34 100644
--- a/lib/wx/src/gen/wxMask.erl
+++ b/lib/wx/src/gen/wxMask.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -101,7 +101,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef},Colou
<<ThisRef:32/?UI,BitmapRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMask()) -> ok.
+-spec destroy(This::wxMask()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMask),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMaximizeEvent.erl b/lib/wx/src/gen/wxMaximizeEvent.erl
index 32abc5536c..ae23757810 100644
--- a/lib/wx/src/gen/wxMaximizeEvent.erl
+++ b/lib/wx/src/gen/wxMaximizeEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxMemoryDC.erl b/lib/wx/src/gen/wxMemoryDC.erl
index 7fddaa7bf1..f1a5669e17 100644
--- a/lib/wx/src/gen/wxMemoryDC.erl
+++ b/lib/wx/src/gen/wxMemoryDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -81,7 +81,7 @@ new(#wx_ref{type=DcT,ref=DcRef}) ->
<<DcRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmemorydc.html#wxmemorydcselectobject">external documentation</a>.
--spec selectObject(This, Bmp) -> ok when
+-spec selectObject(This, Bmp) -> 'ok' when
This::wxMemoryDC(), Bmp::wxBitmap:wxBitmap().
selectObject(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
?CLASS(ThisT,wxMemoryDC),
@@ -90,7 +90,7 @@ selectObject(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
<<ThisRef:32/?UI,BmpRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmemorydc.html#wxmemorydcselectobjectassource">external documentation</a>.
--spec selectObjectAsSource(This, Bmp) -> ok when
+-spec selectObjectAsSource(This, Bmp) -> 'ok' when
This::wxMemoryDC(), Bmp::wxBitmap:wxBitmap().
selectObjectAsSource(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
?CLASS(ThisT,wxMemoryDC),
@@ -99,7 +99,7 @@ selectObjectAsSource(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRe
<<ThisRef:32/?UI,BmpRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMemoryDC()) -> ok.
+-spec destroy(This::wxMemoryDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMemoryDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMenu.erl b/lib/wx/src/gen/wxMenu.erl
index a9911e7ded..317ea38685 100644
--- a/lib/wx/src/gen/wxMenu.erl
+++ b/lib/wx/src/gen/wxMenu.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -55,7 +55,7 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuwxmenu">external documentation</a>.
-spec new([Option]) -> wxMenu() when
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({style, Style}, Acc) -> [<<1:32/?UI,Style:32/?UI>>|Acc];
@@ -67,7 +67,7 @@ new(Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuwxmenu">external documentation</a>.
-spec new(Title, [Option]) -> wxMenu() when
Title::unicode:chardata(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(Title, Options)
when is_list(Title),is_list(Options) ->
Title_UC = unicode:characters_to_binary([Title,0]),
@@ -98,16 +98,16 @@ append(This,Itemid,Text)
%% <br /> Also:<br />
%% append(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when<br />
%% This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),<br />
-%% Option :: {help, unicode:chardata()}<br />
-%% | {kind, wx:wx_enum()}.<br />
+%% Option :: {'help', unicode:chardata()}<br />
+%% | {'kind', wx:wx_enum()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec append(This, Itemid, Text, Submenu) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu();
(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}
- | {kind, wx:wx_enum()}.
+ Option :: {'help', unicode:chardata()}
+ | {'kind', wx:wx_enum()}.
append(This,Itemid,Text,Submenu)
when is_record(This, wx_ref),is_integer(Itemid),is_list(Text),is_record(Submenu, wx_ref) ->
@@ -127,13 +127,13 @@ append(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
%% <br /> Also:<br />
%% append(This, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when<br />
%% This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),<br />
-%% Option :: {help, unicode:chardata()}.<br />
+%% Option :: {'help', unicode:chardata()}.<br />
%%
--spec append(This, Itemid, Text, Help, IsCheckable) -> ok when
+-spec append(This, Itemid, Text, Help, IsCheckable) -> 'ok' when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Help::unicode:chardata(), IsCheckable::boolean();
(This, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
append(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text,Help,IsCheckable)
when is_integer(Itemid),is_list(Text),is_list(Help),is_boolean(IsCheckable) ->
?CLASS(ThisT,wxMenu),
@@ -163,7 +163,7 @@ appendCheckItem(This,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuappendcheckitem">external documentation</a>.
-spec appendCheckItem(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
appendCheckItem(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
when is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -185,7 +185,7 @@ appendRadioItem(This,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuappendradioitem">external documentation</a>.
-spec appendRadioItem(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
appendRadioItem(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
when is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -205,7 +205,7 @@ appendSeparator(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenubreak">external documentation</a>.
--spec break(This) -> ok when
+-spec break(This) -> 'ok' when
This::wxMenu().
break(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMenu),
@@ -213,7 +213,7 @@ break(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenucheck">external documentation</a>.
--spec check(This, Itemid, Check) -> ok when
+-spec check(This, Itemid, Check) -> 'ok' when
This::wxMenu(), Itemid::integer(), Check::boolean().
check(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Check)
when is_integer(Itemid),is_boolean(Check) ->
@@ -262,7 +262,7 @@ delete(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
<<ThisRef:32/?UI,ItemRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuenable">external documentation</a>.
--spec enable(This, Itemid, Enable) -> ok when
+-spec enable(This, Itemid, Enable) -> 'ok' when
This::wxMenu(), Itemid::integer(), Enable::boolean().
enable(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Enable)
when is_integer(Itemid),is_boolean(Enable) ->
@@ -367,9 +367,9 @@ insert(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=ItemT,ref=ItemRef})
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec insert(This, Pos, Itemid, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Pos::integer(), Itemid::integer(),
- Option :: {text, unicode:chardata()}
- | {help, unicode:chardata()}
- | {kind, wx:wx_enum()}.
+ Option :: {'text', unicode:chardata()}
+ | {'help', unicode:chardata()}
+ | {'kind', wx:wx_enum()}.
insert(#wx_ref{type=ThisT,ref=ThisRef},Pos,Itemid, Options)
when is_integer(Pos),is_integer(Itemid),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -393,13 +393,13 @@ insert(This,Pos,Itemid,Text,Submenu)
%% <br /> Also:<br />
%% insert(This, Pos, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when<br />
%% This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),<br />
-%% Option :: {help, unicode:chardata()}.<br />
+%% Option :: {'help', unicode:chardata()}.<br />
%%
--spec insert(This, Pos, Itemid, Text, Help, IsCheckable) -> ok when
+-spec insert(This, Pos, Itemid, Text, Help, IsCheckable) -> 'ok' when
This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(), Help::unicode:chardata(), IsCheckable::boolean();
(This, Pos, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
insert(#wx_ref{type=ThisT,ref=ThisRef},Pos,Itemid,Text,Help,IsCheckable)
when is_integer(Pos),is_integer(Itemid),is_list(Text),is_list(Help),is_boolean(IsCheckable) ->
?CLASS(ThisT,wxMenu),
@@ -429,7 +429,7 @@ insertCheckItem(This,Pos,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuinsertcheckitem">external documentation</a>.
-spec insertCheckItem(This, Pos, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
insertCheckItem(#wx_ref{type=ThisT,ref=ThisRef},Pos,Itemid,Text, Options)
when is_integer(Pos),is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -451,7 +451,7 @@ insertRadioItem(This,Pos,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuinsertradioitem">external documentation</a>.
-spec insertRadioItem(This, Pos, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
insertRadioItem(#wx_ref{type=ThisT,ref=ThisRef},Pos,Itemid,Text, Options)
when is_integer(Pos),is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -513,9 +513,9 @@ prepend(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec prepend(This, Itemid, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(),
- Option :: {text, unicode:chardata()}
- | {help, unicode:chardata()}
- | {kind, wx:wx_enum()}.
+ Option :: {'text', unicode:chardata()}
+ | {'help', unicode:chardata()}
+ | {'kind', wx:wx_enum()}.
prepend(#wx_ref{type=ThisT,ref=ThisRef},Itemid, Options)
when is_integer(Itemid),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -539,13 +539,13 @@ prepend(This,Itemid,Text,Submenu)
%% <br /> Also:<br />
%% prepend(This, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when<br />
%% This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),<br />
-%% Option :: {help, unicode:chardata()}.<br />
+%% Option :: {'help', unicode:chardata()}.<br />
%%
--spec prepend(This, Itemid, Text, Help, IsCheckable) -> ok when
+-spec prepend(This, Itemid, Text, Help, IsCheckable) -> 'ok' when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Help::unicode:chardata(), IsCheckable::boolean();
(This, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
prepend(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text,Help,IsCheckable)
when is_integer(Itemid),is_list(Text),is_list(Help),is_boolean(IsCheckable) ->
?CLASS(ThisT,wxMenu),
@@ -575,7 +575,7 @@ prependCheckItem(This,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuprependcheckitem">external documentation</a>.
-spec prependCheckItem(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
prependCheckItem(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
when is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -597,7 +597,7 @@ prependRadioItem(This,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuprependradioitem">external documentation</a>.
-spec prependRadioItem(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
prependRadioItem(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
when is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -637,7 +637,7 @@ remove(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
<<ThisRef:32/?UI,ItemRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenusethelpstring">external documentation</a>.
--spec setHelpString(This, Itemid, HelpString) -> ok when
+-spec setHelpString(This, Itemid, HelpString) -> 'ok' when
This::wxMenu(), Itemid::integer(), HelpString::unicode:chardata().
setHelpString(#wx_ref{type=ThisT,ref=ThisRef},Itemid,HelpString)
when is_integer(Itemid),is_list(HelpString) ->
@@ -647,7 +647,7 @@ setHelpString(#wx_ref{type=ThisT,ref=ThisRef},Itemid,HelpString)
<<ThisRef:32/?UI,Itemid:32/?UI,(byte_size(HelpString_UC)):32/?UI,(HelpString_UC)/binary, 0:(((8- ((4+byte_size(HelpString_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenusetlabel">external documentation</a>.
--spec setLabel(This, Itemid, Label) -> ok when
+-spec setLabel(This, Itemid, Label) -> 'ok' when
This::wxMenu(), Itemid::integer(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Label)
when is_integer(Itemid),is_list(Label) ->
@@ -657,7 +657,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Label)
<<ThisRef:32/?UI,Itemid:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenusettitle">external documentation</a>.
--spec setTitle(This, Title) -> ok when
+-spec setTitle(This, Title) -> 'ok' when
This::wxMenu(), Title::unicode:chardata().
setTitle(#wx_ref{type=ThisT,ref=ThisRef},Title)
when is_list(Title) ->
@@ -667,7 +667,7 @@ setTitle(#wx_ref{type=ThisT,ref=ThisRef},Title)
<<ThisRef:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((0+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMenu()) -> ok.
+-spec destroy(This::wxMenu()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMenu),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMenuBar.erl b/lib/wx/src/gen/wxMenuBar.erl
index 5e879da5ed..05f7a423d5 100644
--- a/lib/wx/src/gen/wxMenuBar.erl
+++ b/lib/wx/src/gen/wxMenuBar.erl
@@ -106,7 +106,7 @@ append(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef},Title)
<<ThisRef:32/?UI,MenuRef:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((4+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarcheck">external documentation</a>.
--spec check(This, Itemid, Check) -> ok when
+-spec check(This, Itemid, Check) -> 'ok' when
This::wxMenuBar(), Itemid::integer(), Check::boolean().
check(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Check)
when is_integer(Itemid),is_boolean(Check) ->
@@ -125,7 +125,7 @@ enable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarenable">external documentation</a>.
-spec enable(This, [Option]) -> boolean() when
This::wxMenuBar(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMenuBar),
@@ -136,7 +136,7 @@ enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarenable">external documentation</a>.
--spec enable(This, Itemid, Enable) -> ok when
+-spec enable(This, Itemid, Enable) -> 'ok' when
This::wxMenuBar(), Itemid::integer(), Enable::boolean().
enable(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Enable)
when is_integer(Itemid),is_boolean(Enable) ->
@@ -145,7 +145,7 @@ enable(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Enable)
<<ThisRef:32/?UI,Itemid:32/?UI,(wxe_util:from_bool(Enable)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarenabletop">external documentation</a>.
--spec enableTop(This, Pos, Flag) -> ok when
+-spec enableTop(This, Pos, Flag) -> 'ok' when
This::wxMenuBar(), Pos::integer(), Flag::boolean().
enableTop(#wx_ref{type=ThisT,ref=ThisRef},Pos,Flag)
when is_integer(Pos),is_boolean(Flag) ->
@@ -293,7 +293,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=MenuT,ref=MenuRef},Titl
<<ThisRef:32/?UI,Pos:32/?UI,MenuRef:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((0+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarsethelpstring">external documentation</a>.
--spec setHelpString(This, Itemid, HelpString) -> ok when
+-spec setHelpString(This, Itemid, HelpString) -> 'ok' when
This::wxMenuBar(), Itemid::integer(), HelpString::unicode:chardata().
setHelpString(#wx_ref{type=ThisT,ref=ThisRef},Itemid,HelpString)
when is_integer(Itemid),is_list(HelpString) ->
@@ -303,7 +303,7 @@ setHelpString(#wx_ref{type=ThisT,ref=ThisRef},Itemid,HelpString)
<<ThisRef:32/?UI,Itemid:32/?UI,(byte_size(HelpString_UC)):32/?UI,(HelpString_UC)/binary, 0:(((8- ((4+byte_size(HelpString_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarsetlabel">external documentation</a>.
--spec setLabel(This, S) -> ok when
+-spec setLabel(This, S) -> 'ok' when
This::wxMenuBar(), S::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},S)
when is_list(S) ->
@@ -313,7 +313,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},S)
<<ThisRef:32/?UI,(byte_size(S_UC)):32/?UI,(S_UC)/binary, 0:(((8- ((0+byte_size(S_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarsetlabel">external documentation</a>.
--spec setLabel(This, Itemid, Label) -> ok when
+-spec setLabel(This, Itemid, Label) -> 'ok' when
This::wxMenuBar(), Itemid::integer(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Label)
when is_integer(Itemid),is_list(Label) ->
@@ -323,7 +323,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Label)
<<ThisRef:32/?UI,Itemid:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarsetlabeltop">external documentation</a>.
--spec setLabelTop(This, Pos, Label) -> ok when
+-spec setLabelTop(This, Pos, Label) -> 'ok' when
This::wxMenuBar(), Pos::integer(), Label::unicode:chardata().
setLabelTop(#wx_ref{type=ThisT,ref=ThisRef},Pos,Label)
when is_integer(Pos),is_list(Label) ->
@@ -333,7 +333,7 @@ setLabelTop(#wx_ref{type=ThisT,ref=ThisRef},Pos,Label)
<<ThisRef:32/?UI,Pos:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMenuBar()) -> ok.
+-spec destroy(This::wxMenuBar()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMenuBar),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMenuEvent.erl b/lib/wx/src/gen/wxMenuEvent.erl
index e30906fb3d..422c97e980 100644
--- a/lib/wx/src/gen/wxMenuEvent.erl
+++ b/lib/wx/src/gen/wxMenuEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxMenuItem.erl b/lib/wx/src/gen/wxMenuItem.erl
index 94f160c02e..324910d15d 100644
--- a/lib/wx/src/gen/wxMenuItem.erl
+++ b/lib/wx/src/gen/wxMenuItem.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,12 +47,12 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemwxmenuitem">external documentation</a>.
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec new([Option]) -> wxMenuItem() when
- Option :: {parentMenu, wxMenu:wxMenu()}
- | {id, integer()}
- | {text, unicode:chardata()}
- | {help, unicode:chardata()}
- | {kind, wx:wx_enum()}
- | {subMenu, wxMenu:wxMenu()}.
+ Option :: {'parentMenu', wxMenu:wxMenu()}
+ | {'id', integer()}
+ | {'text', unicode:chardata()}
+ | {'help', unicode:chardata()}
+ | {'kind', wx:wx_enum()}
+ | {'subMenu', wxMenu:wxMenu()}.
new(Options)
when is_list(Options) ->
MOpts = fun({parentMenu, #wx_ref{type=ParentMenuT,ref=ParentMenuRef}}, Acc) -> ?CLASS(ParentMenuT,wxMenu),[<<1:32/?UI,ParentMenuRef:32/?UI>>|Acc];
@@ -67,7 +67,7 @@ new(Options)
<<BinOpt/binary>>).
%% @equiv check(This, [])
--spec check(This) -> ok when
+-spec check(This) -> 'ok' when
This::wxMenuItem().
check(This)
@@ -75,9 +75,9 @@ check(This)
check(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemcheck">external documentation</a>.
--spec check(This, [Option]) -> ok when
+-spec check(This, [Option]) -> 'ok' when
This::wxMenuItem(),
- Option :: {check, boolean()}.
+ Option :: {'check', boolean()}.
check(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMenuItem),
@@ -88,7 +88,7 @@ check(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enable(This, [])
--spec enable(This) -> ok when
+-spec enable(This) -> 'ok' when
This::wxMenuItem().
enable(This)
@@ -96,9 +96,9 @@ enable(This)
enable(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemenable">external documentation</a>.
--spec enable(This, [Option]) -> ok when
+-spec enable(This, [Option]) -> 'ok' when
This::wxMenuItem(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMenuItem),
@@ -223,7 +223,7 @@ isSubMenu(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsetbitmap">external documentation</a>.
--spec setBitmap(This, Bitmap) -> ok when
+-spec setBitmap(This, Bitmap) -> 'ok' when
This::wxMenuItem(), Bitmap::wxBitmap:wxBitmap().
setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) ->
?CLASS(ThisT,wxMenuItem),
@@ -232,7 +232,7 @@ setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) -
<<ThisRef:32/?UI,BitmapRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsethelp">external documentation</a>.
--spec setHelp(This, Str) -> ok when
+-spec setHelp(This, Str) -> 'ok' when
This::wxMenuItem(), Str::unicode:chardata().
setHelp(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -242,7 +242,7 @@ setHelp(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsetmenu">external documentation</a>.
--spec setMenu(This, Menu) -> ok when
+-spec setMenu(This, Menu) -> 'ok' when
This::wxMenuItem(), Menu::wxMenu:wxMenu().
setMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}) ->
?CLASS(ThisT,wxMenuItem),
@@ -251,7 +251,7 @@ setMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}) ->
<<ThisRef:32/?UI,MenuRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsetsubmenu">external documentation</a>.
--spec setSubMenu(This, Menu) -> ok when
+-spec setSubMenu(This, Menu) -> 'ok' when
This::wxMenuItem(), Menu::wxMenu:wxMenu().
setSubMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}) ->
?CLASS(ThisT,wxMenuItem),
@@ -260,7 +260,7 @@ setSubMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}) ->
<<ThisRef:32/?UI,MenuRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsettext">external documentation</a>.
--spec setText(This, Str) -> ok when
+-spec setText(This, Str) -> 'ok' when
This::wxMenuItem(), Str::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -270,7 +270,7 @@ setText(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMenuItem()) -> ok.
+-spec destroy(This::wxMenuItem()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMenuItem),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMessageDialog.erl b/lib/wx/src/gen/wxMessageDialog.erl
index 1fe99b2b88..30e47529cc 100644
--- a/lib/wx/src/gen/wxMessageDialog.erl
+++ b/lib/wx/src/gen/wxMessageDialog.erl
@@ -99,9 +99,9 @@ new(Parent,Message)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmessagedialog.html#wxmessagedialogwxmessagedialog">external documentation</a>.
-spec new(Parent, Message, [Option]) -> wxMessageDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(),
- Option :: {caption, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'caption', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
when is_list(Message),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -115,7 +115,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
<<ParentRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMessageDialog()) -> ok.
+-spec destroy(This::wxMessageDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMessageDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMiniFrame.erl b/lib/wx/src/gen/wxMiniFrame.erl
index f731cc5416..4ae9764819 100644
--- a/lib/wx/src/gen/wxMiniFrame.erl
+++ b/lib/wx/src/gen/wxMiniFrame.erl
@@ -107,9 +107,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxminiframe.html#wxminiframewxminiframe">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxMiniFrame() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -133,9 +133,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxminiframe.html#wxminiframecreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxMiniFrame(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxMiniFrame),
@@ -150,7 +150,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Ti
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((0+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMiniFrame()) -> ok.
+-spec destroy(This::wxMiniFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMiniFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMirrorDC.erl b/lib/wx/src/gen/wxMirrorDC.erl
index 459205e18b..df2d133cab 100644
--- a/lib/wx/src/gen/wxMirrorDC.erl
+++ b/lib/wx/src/gen/wxMirrorDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -71,7 +71,7 @@ new(#wx_ref{type=DcT,ref=DcRef},Mirror)
<<DcRef:32/?UI,(wxe_util:from_bool(Mirror)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMirrorDC()) -> ok.
+-spec destroy(This::wxMirrorDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMirrorDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMouseCaptureChangedEvent.erl b/lib/wx/src/gen/wxMouseCaptureChangedEvent.erl
index d9d4ab9ba4..7a0c3c43b8 100644
--- a/lib/wx/src/gen/wxMouseCaptureChangedEvent.erl
+++ b/lib/wx/src/gen/wxMouseCaptureChangedEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxMouseEvent.erl b/lib/wx/src/gen/wxMouseEvent.erl
index 8fcdc79620..a6aba1470e 100644
--- a/lib/wx/src/gen/wxMouseEvent.erl
+++ b/lib/wx/src/gen/wxMouseEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -78,7 +78,7 @@ buttonDClick(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmouseevent.html#wxmouseeventbuttondclick">external documentation</a>.
-spec buttonDClick(This, [Option]) -> boolean() when
This::wxMouseEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonDClick(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMouseEvent),
@@ -99,7 +99,7 @@ buttonDown(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmouseevent.html#wxmouseeventbuttondown">external documentation</a>.
-spec buttonDown(This, [Option]) -> boolean() when
This::wxMouseEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonDown(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMouseEvent),
@@ -120,7 +120,7 @@ buttonUp(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmouseevent.html#wxmouseeventbuttonup">external documentation</a>.
-spec buttonUp(This, [Option]) -> boolean() when
This::wxMouseEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonUp(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMouseEvent),
diff --git a/lib/wx/src/gen/wxMoveEvent.erl b/lib/wx/src/gen/wxMoveEvent.erl
index bbab536400..dbd45bccd4 100644
--- a/lib/wx/src/gen/wxMoveEvent.erl
+++ b/lib/wx/src/gen/wxMoveEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxMultiChoiceDialog.erl b/lib/wx/src/gen/wxMultiChoiceDialog.erl
index 96e9c070a3..0436515256 100644
--- a/lib/wx/src/gen/wxMultiChoiceDialog.erl
+++ b/lib/wx/src/gen/wxMultiChoiceDialog.erl
@@ -105,8 +105,8 @@ new(Parent,Message,Caption,Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmultichoicedialog.html#wxmultichoicedialogwxmultichoicedialog">external documentation</a>.
-spec new(Parent, Message, Caption, Choices, [Option]) -> wxMultiChoiceDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message,Caption,Choices, Options)
when is_list(Message),is_list(Caption),is_list(Choices),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -130,7 +130,7 @@ getSelections(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmultichoicedialog.html#wxmultichoicedialogsetselections">external documentation</a>.
--spec setSelections(This, Selections) -> ok when
+-spec setSelections(This, Selections) -> 'ok' when
This::wxMultiChoiceDialog(), Selections::[integer()].
setSelections(#wx_ref{type=ThisT,ref=ThisRef},Selections)
when is_list(Selections) ->
@@ -140,7 +140,7 @@ setSelections(#wx_ref{type=ThisT,ref=ThisRef},Selections)
(<< <<C:32/?I>> || C <- Selections>>)/binary, 0:(((0+length(Selections)) rem 2)*32)>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMultiChoiceDialog()) -> ok.
+-spec destroy(This::wxMultiChoiceDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMultiChoiceDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxNavigationKeyEvent.erl b/lib/wx/src/gen/wxNavigationKeyEvent.erl
index 58b465fdd5..c75d317723 100644
--- a/lib/wx/src/gen/wxNavigationKeyEvent.erl
+++ b/lib/wx/src/gen/wxNavigationKeyEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -54,7 +54,7 @@ getDirection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnavigationkeyevent.html#wxnavigationkeyeventsetdirection">external documentation</a>.
--spec setDirection(This, BForward) -> ok when
+-spec setDirection(This, BForward) -> 'ok' when
This::wxNavigationKeyEvent(), BForward::boolean().
setDirection(#wx_ref{type=ThisT,ref=ThisRef},BForward)
when is_boolean(BForward) ->
@@ -71,7 +71,7 @@ isWindowChange(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnavigationkeyevent.html#wxnavigationkeyeventsetwindowchange">external documentation</a>.
--spec setWindowChange(This, BIs) -> ok when
+-spec setWindowChange(This, BIs) -> 'ok' when
This::wxNavigationKeyEvent(), BIs::boolean().
setWindowChange(#wx_ref{type=ThisT,ref=ThisRef},BIs)
when is_boolean(BIs) ->
@@ -88,7 +88,7 @@ isFromTab(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnavigationkeyevent.html#wxnavigationkeyeventsetfromtab">external documentation</a>.
--spec setFromTab(This, BIs) -> ok when
+-spec setFromTab(This, BIs) -> 'ok' when
This::wxNavigationKeyEvent(), BIs::boolean().
setFromTab(#wx_ref{type=ThisT,ref=ThisRef},BIs)
when is_boolean(BIs) ->
@@ -105,7 +105,7 @@ getCurrentFocus(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnavigationkeyevent.html#wxnavigationkeyeventsetcurrentfocus">external documentation</a>.
--spec setCurrentFocus(This, Win) -> ok when
+-spec setCurrentFocus(This, Win) -> 'ok' when
This::wxNavigationKeyEvent(), Win::wxWindow:wxWindow().
setCurrentFocus(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef}) ->
?CLASS(ThisT,wxNavigationKeyEvent),
diff --git a/lib/wx/src/gen/wxNotebook.erl b/lib/wx/src/gen/wxNotebook.erl
index 5011375aad..24f96ac88c 100644
--- a/lib/wx/src/gen/wxNotebook.erl
+++ b/lib/wx/src/gen/wxNotebook.erl
@@ -101,9 +101,9 @@ new(Parent,Winid)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookwxnotebook">external documentation</a>.
-spec new(Parent, Winid, [Option]) -> wxNotebook() when
Parent::wxWindow:wxWindow(), Winid::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Winid, Options)
when is_integer(Winid),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,8 +126,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxNotebook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxNotebook),
@@ -141,7 +141,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxNotebook().
advanceSelection(This)
@@ -149,9 +149,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxNotebook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxNotebook),
@@ -162,7 +162,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxNotebook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxNotebook),
@@ -181,9 +181,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxNotebook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxNotebook),
@@ -318,8 +318,8 @@ insertPage(This,Position,Win,StrText)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookinsertpage">external documentation</a>.
-spec insertPage(This, Position, Win, StrText, [Option]) -> boolean() when
This::wxNotebook(), Position::integer(), Win::wxWindow:wxWindow(), StrText::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},Position,#wx_ref{type=WinT,ref=WinRef},StrText, Options)
when is_integer(Position),is_list(StrText),is_list(Options) ->
?CLASS(ThisT,wxNotebook),
@@ -333,7 +333,7 @@ insertPage(#wx_ref{type=ThisT,ref=ThisRef},Position,#wx_ref{type=WinT,ref=WinRef
<<ThisRef:32/?UI,Position:32/?UI,WinRef:32/?UI,(byte_size(StrText_UC)):32/?UI,(StrText_UC)/binary, 0:(((8- ((0+byte_size(StrText_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxNotebook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxNotebook),
@@ -342,7 +342,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebooksetpadding">external documentation</a>.
--spec setPadding(This, Padding) -> ok when
+-spec setPadding(This, Padding) -> 'ok' when
This::wxNotebook(), Padding::{W::integer(), H::integer()}.
setPadding(#wx_ref{type=ThisT,ref=ThisRef},{PaddingW,PaddingH})
when is_integer(PaddingW),is_integer(PaddingH) ->
@@ -351,7 +351,7 @@ setPadding(#wx_ref{type=ThisT,ref=ThisRef},{PaddingW,PaddingH})
<<ThisRef:32/?UI,PaddingW:32/?UI,PaddingH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxNotebook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -397,7 +397,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},NPage)
<<ThisRef:32/?UI,NPage:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxNotebook()) -> ok.
+-spec destroy(This::wxNotebook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxNotebook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxNotebookEvent.erl b/lib/wx/src/gen/wxNotebookEvent.erl
index 931313008d..899c5b14ca 100644
--- a/lib/wx/src/gen/wxNotebookEvent.erl
+++ b/lib/wx/src/gen/wxNotebookEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -67,7 +67,7 @@ getSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebookevent.html#wxnotebookeventsetoldselection">external documentation</a>.
--spec setOldSelection(This, NOldSel) -> ok when
+-spec setOldSelection(This, NOldSel) -> 'ok' when
This::wxNotebookEvent(), NOldSel::integer().
setOldSelection(#wx_ref{type=ThisT,ref=ThisRef},NOldSel)
when is_integer(NOldSel) ->
@@ -76,7 +76,7 @@ setOldSelection(#wx_ref{type=ThisT,ref=ThisRef},NOldSel)
<<ThisRef:32/?UI,NOldSel:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebookevent.html#wxnotebookeventsetselection">external documentation</a>.
--spec setSelection(This, NSel) -> ok when
+-spec setSelection(This, NSel) -> 'ok' when
This::wxNotebookEvent(), NSel::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},NSel)
when is_integer(NSel) ->
diff --git a/lib/wx/src/gen/wxNotifyEvent.erl b/lib/wx/src/gen/wxNotifyEvent.erl
index f43d72db3c..5f53b3af55 100644
--- a/lib/wx/src/gen/wxNotifyEvent.erl
+++ b/lib/wx/src/gen/wxNotifyEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,7 +45,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxNotifyEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotifyevent.html#wxnotifyeventallow">external documentation</a>.
--spec allow(This) -> ok when
+-spec allow(This) -> 'ok' when
This::wxNotifyEvent().
allow(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxNotifyEvent),
@@ -61,7 +61,7 @@ isAllowed(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotifyevent.html#wxnotifyeventveto">external documentation</a>.
--spec veto(This) -> ok when
+-spec veto(This) -> 'ok' when
This::wxNotifyEvent().
veto(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxNotifyEvent),
diff --git a/lib/wx/src/gen/wxOverlay.erl b/lib/wx/src/gen/wxOverlay.erl
index 7da3ece657..efe6e69589 100644
--- a/lib/wx/src/gen/wxOverlay.erl
+++ b/lib/wx/src/gen/wxOverlay.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,7 +42,7 @@ new() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxoverlay.html#wxoverlayreset">external documentation</a>.
--spec reset(This) -> ok when
+-spec reset(This) -> 'ok' when
This::wxOverlay().
reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxOverlay),
@@ -50,7 +50,7 @@ reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxOverlay()) -> ok.
+-spec destroy(This::wxOverlay()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxOverlay),
wxe_util:destroy(?wxOverlay_destruct,Obj),
diff --git a/lib/wx/src/gen/wxPageSetupDialog.erl b/lib/wx/src/gen/wxPageSetupDialog.erl
index e6e6412d2c..091ba4628e 100644
--- a/lib/wx/src/gen/wxPageSetupDialog.erl
+++ b/lib/wx/src/gen/wxPageSetupDialog.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialog.html#wxpagesetupdialogwxpagesetupdialog">external documentation</a>.
-spec new(Parent, [Option]) -> wxPageSetupDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {data, wxPageSetupDialogData:wxPageSetupDialogData()}.
+ Option :: {'data', wxPageSetupDialogData:wxPageSetupDialogData()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -73,7 +73,7 @@ showModal(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPageSetupDialog()) -> ok.
+-spec destroy(This::wxPageSetupDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPageSetupDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPageSetupDialogData.erl b/lib/wx/src/gen/wxPageSetupDialogData.erl
index bcfd55d8bc..56c059c232 100644
--- a/lib/wx/src/gen/wxPageSetupDialogData.erl
+++ b/lib/wx/src/gen/wxPageSetupDialogData.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -62,7 +62,7 @@ new(#wx_ref{type=PrintDataT,ref=PrintDataRef}) ->
<<PrintDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenablehelp">external documentation</a>.
--spec enableHelp(This, Flag) -> ok when
+-spec enableHelp(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enableHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -71,7 +71,7 @@ enableHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenablemargins">external documentation</a>.
--spec enableMargins(This, Flag) -> ok when
+-spec enableMargins(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enableMargins(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -80,7 +80,7 @@ enableMargins(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenableorientation">external documentation</a>.
--spec enableOrientation(This, Flag) -> ok when
+-spec enableOrientation(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enableOrientation(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -89,7 +89,7 @@ enableOrientation(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenablepaper">external documentation</a>.
--spec enablePaper(This, Flag) -> ok when
+-spec enablePaper(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enablePaper(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -98,7 +98,7 @@ enablePaper(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenableprinter">external documentation</a>.
--spec enablePrinter(This, Flag) -> ok when
+-spec enablePrinter(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enablePrinter(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -228,7 +228,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetdefaultinfo">external documentation</a>.
--spec setDefaultInfo(This, Flag) -> ok when
+-spec setDefaultInfo(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
setDefaultInfo(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -237,7 +237,7 @@ setDefaultInfo(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetdefaultminmargins">external documentation</a>.
--spec setDefaultMinMargins(This, Flag) -> ok when
+-spec setDefaultMinMargins(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
setDefaultMinMargins(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -246,7 +246,7 @@ setDefaultMinMargins(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetmargintopleft">external documentation</a>.
--spec setMarginTopLeft(This, Pt) -> ok when
+-spec setMarginTopLeft(This, Pt) -> 'ok' when
This::wxPageSetupDialogData(), Pt::{X::integer(), Y::integer()}.
setMarginTopLeft(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -255,7 +255,7 @@ setMarginTopLeft(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetmarginbottomright">external documentation</a>.
--spec setMarginBottomRight(This, Pt) -> ok when
+-spec setMarginBottomRight(This, Pt) -> 'ok' when
This::wxPageSetupDialogData(), Pt::{X::integer(), Y::integer()}.
setMarginBottomRight(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -264,7 +264,7 @@ setMarginBottomRight(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetminmargintopleft">external documentation</a>.
--spec setMinMarginTopLeft(This, Pt) -> ok when
+-spec setMinMarginTopLeft(This, Pt) -> 'ok' when
This::wxPageSetupDialogData(), Pt::{X::integer(), Y::integer()}.
setMinMarginTopLeft(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -273,7 +273,7 @@ setMinMarginTopLeft(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetminmarginbottomright">external documentation</a>.
--spec setMinMarginBottomRight(This, Pt) -> ok when
+-spec setMinMarginBottomRight(This, Pt) -> 'ok' when
This::wxPageSetupDialogData(), Pt::{X::integer(), Y::integer()}.
setMinMarginBottomRight(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -283,7 +283,7 @@ setMinMarginBottomRight(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetpaperid">external documentation</a>.
%%<br /> Id = ?wxPAPER_NONE | ?wxPAPER_LETTER | ?wxPAPER_LEGAL | ?wxPAPER_A4 | ?wxPAPER_CSHEET | ?wxPAPER_DSHEET | ?wxPAPER_ESHEET | ?wxPAPER_LETTERSMALL | ?wxPAPER_TABLOID | ?wxPAPER_LEDGER | ?wxPAPER_STATEMENT | ?wxPAPER_EXECUTIVE | ?wxPAPER_A3 | ?wxPAPER_A4SMALL | ?wxPAPER_A5 | ?wxPAPER_B4 | ?wxPAPER_B5 | ?wxPAPER_FOLIO | ?wxPAPER_QUARTO | ?wxPAPER_10X14 | ?wxPAPER_11X17 | ?wxPAPER_NOTE | ?wxPAPER_ENV_9 | ?wxPAPER_ENV_10 | ?wxPAPER_ENV_11 | ?wxPAPER_ENV_12 | ?wxPAPER_ENV_14 | ?wxPAPER_ENV_DL | ?wxPAPER_ENV_C5 | ?wxPAPER_ENV_C3 | ?wxPAPER_ENV_C4 | ?wxPAPER_ENV_C6 | ?wxPAPER_ENV_C65 | ?wxPAPER_ENV_B4 | ?wxPAPER_ENV_B5 | ?wxPAPER_ENV_B6 | ?wxPAPER_ENV_ITALY | ?wxPAPER_ENV_MONARCH | ?wxPAPER_ENV_PERSONAL | ?wxPAPER_FANFOLD_US | ?wxPAPER_FANFOLD_STD_GERMAN | ?wxPAPER_FANFOLD_LGL_GERMAN | ?wxPAPER_ISO_B4 | ?wxPAPER_JAPANESE_POSTCARD | ?wxPAPER_9X11 | ?wxPAPER_10X11 | ?wxPAPER_15X11 | ?wxPAPER_ENV_INVITE | ?wxPAPER_LETTER_EXTRA | ?wxPAPER_LEGAL_EXTRA | ?wxPAPER_TABLOID_EXTRA | ?wxPAPER_A4_EXTRA | ?wxPAPER_LETTER_TRANSVERSE | ?wxPAPER_A4_TRANSVERSE | ?wxPAPER_LETTER_EXTRA_TRANSVERSE | ?wxPAPER_A_PLUS | ?wxPAPER_B_PLUS | ?wxPAPER_LETTER_PLUS | ?wxPAPER_A4_PLUS | ?wxPAPER_A5_TRANSVERSE | ?wxPAPER_B5_TRANSVERSE | ?wxPAPER_A3_EXTRA | ?wxPAPER_A5_EXTRA | ?wxPAPER_B5_EXTRA | ?wxPAPER_A2 | ?wxPAPER_A3_TRANSVERSE | ?wxPAPER_A3_EXTRA_TRANSVERSE | ?wxPAPER_DBL_JAPANESE_POSTCARD | ?wxPAPER_A6 | ?wxPAPER_JENV_KAKU2 | ?wxPAPER_JENV_KAKU3 | ?wxPAPER_JENV_CHOU3 | ?wxPAPER_JENV_CHOU4 | ?wxPAPER_LETTER_ROTATED | ?wxPAPER_A3_ROTATED | ?wxPAPER_A4_ROTATED | ?wxPAPER_A5_ROTATED | ?wxPAPER_B4_JIS_ROTATED | ?wxPAPER_B5_JIS_ROTATED | ?wxPAPER_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_A6_ROTATED | ?wxPAPER_JENV_KAKU2_ROTATED | ?wxPAPER_JENV_KAKU3_ROTATED | ?wxPAPER_JENV_CHOU3_ROTATED | ?wxPAPER_JENV_CHOU4_ROTATED | ?wxPAPER_B6_JIS | ?wxPAPER_B6_JIS_ROTATED | ?wxPAPER_12X11 | ?wxPAPER_JENV_YOU4 | ?wxPAPER_JENV_YOU4_ROTATED | ?wxPAPER_P16K | ?wxPAPER_P32K | ?wxPAPER_P32KBIG | ?wxPAPER_PENV_1 | ?wxPAPER_PENV_2 | ?wxPAPER_PENV_3 | ?wxPAPER_PENV_4 | ?wxPAPER_PENV_5 | ?wxPAPER_PENV_6 | ?wxPAPER_PENV_7 | ?wxPAPER_PENV_8 | ?wxPAPER_PENV_9 | ?wxPAPER_PENV_10 | ?wxPAPER_P16K_ROTATED | ?wxPAPER_P32K_ROTATED | ?wxPAPER_P32KBIG_ROTATED | ?wxPAPER_PENV_1_ROTATED | ?wxPAPER_PENV_2_ROTATED | ?wxPAPER_PENV_3_ROTATED | ?wxPAPER_PENV_4_ROTATED | ?wxPAPER_PENV_5_ROTATED | ?wxPAPER_PENV_6_ROTATED | ?wxPAPER_PENV_7_ROTATED | ?wxPAPER_PENV_8_ROTATED | ?wxPAPER_PENV_9_ROTATED | ?wxPAPER_PENV_10_ROTATED
--spec setPaperId(This, Id) -> ok when
+-spec setPaperId(This, Id) -> 'ok' when
This::wxPageSetupDialogData(), Id::wx:wx_enum().
setPaperId(#wx_ref{type=ThisT,ref=ThisRef},Id)
when is_integer(Id) ->
@@ -293,13 +293,13 @@ setPaperId(#wx_ref{type=ThisT,ref=ThisRef},Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetpapersize">external documentation</a>.
%% <br /> Also:<br />
-%% setPaperSize(This, Sz) -> ok when<br />
+%% setPaperSize(This, Sz) -> 'ok' when<br />
%% This::wxPageSetupDialogData(), Sz::{W::integer(), H::integer()}.<br />
%%
%%<br /> Id = ?wxPAPER_NONE | ?wxPAPER_LETTER | ?wxPAPER_LEGAL | ?wxPAPER_A4 | ?wxPAPER_CSHEET | ?wxPAPER_DSHEET | ?wxPAPER_ESHEET | ?wxPAPER_LETTERSMALL | ?wxPAPER_TABLOID | ?wxPAPER_LEDGER | ?wxPAPER_STATEMENT | ?wxPAPER_EXECUTIVE | ?wxPAPER_A3 | ?wxPAPER_A4SMALL | ?wxPAPER_A5 | ?wxPAPER_B4 | ?wxPAPER_B5 | ?wxPAPER_FOLIO | ?wxPAPER_QUARTO | ?wxPAPER_10X14 | ?wxPAPER_11X17 | ?wxPAPER_NOTE | ?wxPAPER_ENV_9 | ?wxPAPER_ENV_10 | ?wxPAPER_ENV_11 | ?wxPAPER_ENV_12 | ?wxPAPER_ENV_14 | ?wxPAPER_ENV_DL | ?wxPAPER_ENV_C5 | ?wxPAPER_ENV_C3 | ?wxPAPER_ENV_C4 | ?wxPAPER_ENV_C6 | ?wxPAPER_ENV_C65 | ?wxPAPER_ENV_B4 | ?wxPAPER_ENV_B5 | ?wxPAPER_ENV_B6 | ?wxPAPER_ENV_ITALY | ?wxPAPER_ENV_MONARCH | ?wxPAPER_ENV_PERSONAL | ?wxPAPER_FANFOLD_US | ?wxPAPER_FANFOLD_STD_GERMAN | ?wxPAPER_FANFOLD_LGL_GERMAN | ?wxPAPER_ISO_B4 | ?wxPAPER_JAPANESE_POSTCARD | ?wxPAPER_9X11 | ?wxPAPER_10X11 | ?wxPAPER_15X11 | ?wxPAPER_ENV_INVITE | ?wxPAPER_LETTER_EXTRA | ?wxPAPER_LEGAL_EXTRA | ?wxPAPER_TABLOID_EXTRA | ?wxPAPER_A4_EXTRA | ?wxPAPER_LETTER_TRANSVERSE | ?wxPAPER_A4_TRANSVERSE | ?wxPAPER_LETTER_EXTRA_TRANSVERSE | ?wxPAPER_A_PLUS | ?wxPAPER_B_PLUS | ?wxPAPER_LETTER_PLUS | ?wxPAPER_A4_PLUS | ?wxPAPER_A5_TRANSVERSE | ?wxPAPER_B5_TRANSVERSE | ?wxPAPER_A3_EXTRA | ?wxPAPER_A5_EXTRA | ?wxPAPER_B5_EXTRA | ?wxPAPER_A2 | ?wxPAPER_A3_TRANSVERSE | ?wxPAPER_A3_EXTRA_TRANSVERSE | ?wxPAPER_DBL_JAPANESE_POSTCARD | ?wxPAPER_A6 | ?wxPAPER_JENV_KAKU2 | ?wxPAPER_JENV_KAKU3 | ?wxPAPER_JENV_CHOU3 | ?wxPAPER_JENV_CHOU4 | ?wxPAPER_LETTER_ROTATED | ?wxPAPER_A3_ROTATED | ?wxPAPER_A4_ROTATED | ?wxPAPER_A5_ROTATED | ?wxPAPER_B4_JIS_ROTATED | ?wxPAPER_B5_JIS_ROTATED | ?wxPAPER_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_A6_ROTATED | ?wxPAPER_JENV_KAKU2_ROTATED | ?wxPAPER_JENV_KAKU3_ROTATED | ?wxPAPER_JENV_CHOU3_ROTATED | ?wxPAPER_JENV_CHOU4_ROTATED | ?wxPAPER_B6_JIS | ?wxPAPER_B6_JIS_ROTATED | ?wxPAPER_12X11 | ?wxPAPER_JENV_YOU4 | ?wxPAPER_JENV_YOU4_ROTATED | ?wxPAPER_P16K | ?wxPAPER_P32K | ?wxPAPER_P32KBIG | ?wxPAPER_PENV_1 | ?wxPAPER_PENV_2 | ?wxPAPER_PENV_3 | ?wxPAPER_PENV_4 | ?wxPAPER_PENV_5 | ?wxPAPER_PENV_6 | ?wxPAPER_PENV_7 | ?wxPAPER_PENV_8 | ?wxPAPER_PENV_9 | ?wxPAPER_PENV_10 | ?wxPAPER_P16K_ROTATED | ?wxPAPER_P32K_ROTATED | ?wxPAPER_P32KBIG_ROTATED | ?wxPAPER_PENV_1_ROTATED | ?wxPAPER_PENV_2_ROTATED | ?wxPAPER_PENV_3_ROTATED | ?wxPAPER_PENV_4_ROTATED | ?wxPAPER_PENV_5_ROTATED | ?wxPAPER_PENV_6_ROTATED | ?wxPAPER_PENV_7_ROTATED | ?wxPAPER_PENV_8_ROTATED | ?wxPAPER_PENV_9_ROTATED | ?wxPAPER_PENV_10_ROTATED
--spec setPaperSize(This, Id) -> ok when
+-spec setPaperSize(This, Id) -> 'ok' when
This::wxPageSetupDialogData(), Id::wx:wx_enum();
- (This, Sz) -> ok when
+ (This, Sz) -> 'ok' when
This::wxPageSetupDialogData(), Sz::{W::integer(), H::integer()}.
setPaperSize(#wx_ref{type=ThisT,ref=ThisRef},Id)
when is_integer(Id) ->
@@ -313,7 +313,7 @@ setPaperSize(#wx_ref{type=ThisT,ref=ThisRef},{SzW,SzH})
<<ThisRef:32/?UI,SzW:32/?UI,SzH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetprintdata">external documentation</a>.
--spec setPrintData(This, PrintData) -> ok when
+-spec setPrintData(This, PrintData) -> 'ok' when
This::wxPageSetupDialogData(), PrintData::wxPrintData:wxPrintData().
setPrintData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintDataT,ref=PrintDataRef}) ->
?CLASS(ThisT,wxPageSetupDialogData),
@@ -322,7 +322,7 @@ setPrintData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintDataT,ref=PrintDa
<<ThisRef:32/?UI,PrintDataRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPageSetupDialogData()) -> ok.
+-spec destroy(This::wxPageSetupDialogData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPageSetupDialogData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPaintDC.erl b/lib/wx/src/gen/wxPaintDC.erl
index b2f2d6a977..b571219020 100644
--- a/lib/wx/src/gen/wxPaintDC.erl
+++ b/lib/wx/src/gen/wxPaintDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -80,7 +80,7 @@ new(#wx_ref{type=WinT,ref=WinRef}) ->
<<WinRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPaintDC()) -> ok.
+-spec destroy(This::wxPaintDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPaintDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPaintEvent.erl b/lib/wx/src/gen/wxPaintEvent.erl
index 20885bf69c..8df874b34c 100644
--- a/lib/wx/src/gen/wxPaintEvent.erl
+++ b/lib/wx/src/gen/wxPaintEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxPalette.erl b/lib/wx/src/gen/wxPalette.erl
index 9883283828..799ce2b90d 100644
--- a/lib/wx/src/gen/wxPalette.erl
+++ b/lib/wx/src/gen/wxPalette.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -101,7 +101,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPalette()) -> ok.
+-spec destroy(This::wxPalette()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPalette),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPaletteChangedEvent.erl b/lib/wx/src/gen/wxPaletteChangedEvent.erl
index 80e15af0ec..bc054fa285 100644
--- a/lib/wx/src/gen/wxPaletteChangedEvent.erl
+++ b/lib/wx/src/gen/wxPaletteChangedEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,7 +45,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxPaletteChangedEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpalettechangedevent.html#wxpalettechangedeventsetchangedwindow">external documentation</a>.
--spec setChangedWindow(This, Win) -> ok when
+-spec setChangedWindow(This, Win) -> 'ok' when
This::wxPaletteChangedEvent(), Win::wxWindow:wxWindow().
setChangedWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef}) ->
?CLASS(ThisT,wxPaletteChangedEvent),
diff --git a/lib/wx/src/gen/wxPanel.erl b/lib/wx/src/gen/wxPanel.erl
index ceb894fe31..07898cf19e 100644
--- a/lib/wx/src/gen/wxPanel.erl
+++ b/lib/wx/src/gen/wxPanel.erl
@@ -94,10 +94,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpanel.html#wxpanelwxpanel">external documentation</a>.
-spec new(Parent, [Option]) -> wxPanel() when
Parent::wxWindow:wxWindow(),
- Option :: {winid, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'winid', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -121,7 +121,7 @@ new(Parent,X,Y,Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpanel.html#wxpanelwxpanel">external documentation</a>.
-spec new(Parent, X, Y, Width, Height, [Option]) -> wxPanel() when
Parent::wxWindow:wxWindow(), X::integer(), Y::integer(), Width::integer(), Height::integer(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},X,Y,Width,Height, Options)
when is_integer(X),is_integer(Y),is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,7 +132,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},X,Y,Width,Height, Options)
<<ParentRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpanel.html#wxpanelinitdialog">external documentation</a>.
--spec initDialog(This) -> ok when
+-spec initDialog(This) -> 'ok' when
This::wxPanel().
initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPanel),
@@ -140,7 +140,7 @@ initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpanel.html#wxpanelsetfocusignoringchildren">external documentation</a>.
--spec setFocusIgnoringChildren(This) -> ok when
+-spec setFocusIgnoringChildren(This) -> 'ok' when
This::wxPanel().
setFocusIgnoringChildren(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPanel),
@@ -148,7 +148,7 @@ setFocusIgnoringChildren(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPanel()) -> ok.
+-spec destroy(This::wxPanel()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPanel),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPasswordEntryDialog.erl b/lib/wx/src/gen/wxPasswordEntryDialog.erl
index ac3f1c9d8c..e8ee8c8f37 100644
--- a/lib/wx/src/gen/wxPasswordEntryDialog.erl
+++ b/lib/wx/src/gen/wxPasswordEntryDialog.erl
@@ -101,10 +101,10 @@ new(Parent,Message)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpasswordentrydialog.html#wxpasswordentrydialogwxpasswordentrydialog">external documentation</a>.
-spec new(Parent, Message, [Option]) -> wxPasswordEntryDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(),
- Option :: {caption, unicode:chardata()}
- | {value, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'caption', unicode:chardata()}
+ | {'value', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
when is_list(Message),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -119,7 +119,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
<<ParentRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPasswordEntryDialog()) -> ok.
+-spec destroy(This::wxPasswordEntryDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPasswordEntryDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPen.erl b/lib/wx/src/gen/wxPen.erl
index cd6fa9884c..7a2bbb827e 100644
--- a/lib/wx/src/gen/wxPen.erl
+++ b/lib/wx/src/gen/wxPen.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -54,8 +54,8 @@ new(Colour)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpenwxpen">external documentation</a>.
-spec new(Colour, [Option]) -> wxPen() when
Colour::wx:wx_colour(),
- Option :: {width, integer()}
- | {style, integer()}.
+ Option :: {'width', integer()}
+ | {'style', integer()}.
new(Colour, Options)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4,is_list(Options) ->
MOpts = fun({width, Width}, Acc) -> [<<1:32/?UI,Width:32/?UI>>|Acc];
@@ -115,7 +115,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetcap">external documentation</a>.
%%<br /> CapStyle = integer
--spec setCap(This, CapStyle) -> ok when
+-spec setCap(This, CapStyle) -> 'ok' when
This::wxPen(), CapStyle::wx:wx_enum().
setCap(#wx_ref{type=ThisT,ref=ThisRef},CapStyle)
when is_integer(CapStyle) ->
@@ -124,7 +124,7 @@ setCap(#wx_ref{type=ThisT,ref=ThisRef},CapStyle)
<<ThisRef:32/?UI,CapStyle:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxPen(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -133,7 +133,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetcolour">external documentation</a>.
--spec setColour(This, Red, Green, Blue) -> ok when
+-spec setColour(This, Red, Green, Blue) -> 'ok' when
This::wxPen(), Red::integer(), Green::integer(), Blue::integer().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Red,Green,Blue)
when is_integer(Red),is_integer(Green),is_integer(Blue) ->
@@ -143,7 +143,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Red,Green,Blue)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetjoin">external documentation</a>.
%%<br /> JoinStyle = integer
--spec setJoin(This, JoinStyle) -> ok when
+-spec setJoin(This, JoinStyle) -> 'ok' when
This::wxPen(), JoinStyle::wx:wx_enum().
setJoin(#wx_ref{type=ThisT,ref=ThisRef},JoinStyle)
when is_integer(JoinStyle) ->
@@ -152,7 +152,7 @@ setJoin(#wx_ref{type=ThisT,ref=ThisRef},JoinStyle)
<<ThisRef:32/?UI,JoinStyle:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetstyle">external documentation</a>.
--spec setStyle(This, Style) -> ok when
+-spec setStyle(This, Style) -> 'ok' when
This::wxPen(), Style::integer().
setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -161,7 +161,7 @@ setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetwidth">external documentation</a>.
--spec setWidth(This, Width) -> ok when
+-spec setWidth(This, Width) -> 'ok' when
This::wxPen(), Width::integer().
setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -170,7 +170,7 @@ setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPen()) -> ok.
+-spec destroy(This::wxPen()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPen),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPickerBase.erl b/lib/wx/src/gen/wxPickerBase.erl
index bbdeaf6af8..33931f9119 100644
--- a/lib/wx/src/gen/wxPickerBase.erl
+++ b/lib/wx/src/gen/wxPickerBase.erl
@@ -83,7 +83,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxPickerBase() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesetinternalmargin">external documentation</a>.
--spec setInternalMargin(This, Newmargin) -> ok when
+-spec setInternalMargin(This, Newmargin) -> 'ok' when
This::wxPickerBase(), Newmargin::integer().
setInternalMargin(#wx_ref{type=ThisT,ref=ThisRef},Newmargin)
when is_integer(Newmargin) ->
@@ -100,7 +100,7 @@ getInternalMargin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesettextctrlproportion">external documentation</a>.
--spec setTextCtrlProportion(This, Prop) -> ok when
+-spec setTextCtrlProportion(This, Prop) -> 'ok' when
This::wxPickerBase(), Prop::integer().
setTextCtrlProportion(#wx_ref{type=ThisT,ref=ThisRef},Prop)
when is_integer(Prop) ->
@@ -109,7 +109,7 @@ setTextCtrlProportion(#wx_ref{type=ThisT,ref=ThisRef},Prop)
<<ThisRef:32/?UI,Prop:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesetpickerctrlproportion">external documentation</a>.
--spec setPickerCtrlProportion(This, Prop) -> ok when
+-spec setPickerCtrlProportion(This, Prop) -> 'ok' when
This::wxPickerBase(), Prop::integer().
setPickerCtrlProportion(#wx_ref{type=ThisT,ref=ThisRef},Prop)
when is_integer(Prop) ->
@@ -158,7 +158,7 @@ isTextCtrlGrowable(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv setPickerCtrlGrowable(This, [])
--spec setPickerCtrlGrowable(This) -> ok when
+-spec setPickerCtrlGrowable(This) -> 'ok' when
This::wxPickerBase().
setPickerCtrlGrowable(This)
@@ -166,9 +166,9 @@ setPickerCtrlGrowable(This)
setPickerCtrlGrowable(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesetpickerctrlgrowable">external documentation</a>.
--spec setPickerCtrlGrowable(This, [Option]) -> ok when
+-spec setPickerCtrlGrowable(This, [Option]) -> 'ok' when
This::wxPickerBase(),
- Option :: {grow, boolean()}.
+ Option :: {'grow', boolean()}.
setPickerCtrlGrowable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPickerBase),
@@ -179,7 +179,7 @@ setPickerCtrlGrowable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setTextCtrlGrowable(This, [])
--spec setTextCtrlGrowable(This) -> ok when
+-spec setTextCtrlGrowable(This) -> 'ok' when
This::wxPickerBase().
setTextCtrlGrowable(This)
@@ -187,9 +187,9 @@ setTextCtrlGrowable(This)
setTextCtrlGrowable(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesettextctrlgrowable">external documentation</a>.
--spec setTextCtrlGrowable(This, [Option]) -> ok when
+-spec setTextCtrlGrowable(This, [Option]) -> 'ok' when
This::wxPickerBase(),
- Option :: {grow, boolean()}.
+ Option :: {'grow', boolean()}.
setTextCtrlGrowable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPickerBase),
diff --git a/lib/wx/src/gen/wxPopupTransientWindow.erl b/lib/wx/src/gen/wxPopupTransientWindow.erl
index c07c6e239e..b1feef6dcb 100644
--- a/lib/wx/src/gen/wxPopupTransientWindow.erl
+++ b/lib/wx/src/gen/wxPopupTransientWindow.erl
@@ -96,7 +96,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopuptransientwindow.html#wxpopuptransientwindowwxpopuptransientwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxPopupTransientWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -107,7 +107,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
<<ParentRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv popup(This, [])
--spec popup(This) -> ok when
+-spec popup(This) -> 'ok' when
This::wxPopupTransientWindow().
popup(This)
@@ -115,9 +115,9 @@ popup(This)
popup(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopuptransientwindow.html#wxpopuptransientwindowpopup">external documentation</a>.
--spec popup(This, [Option]) -> ok when
+-spec popup(This, [Option]) -> 'ok' when
This::wxPopupTransientWindow(),
- Option :: {focus, wxWindow:wxWindow()}.
+ Option :: {'focus', wxWindow:wxWindow()}.
popup(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPopupTransientWindow),
@@ -128,7 +128,7 @@ popup(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopuptransientwindow.html#wxpopuptransientwindowdismiss">external documentation</a>.
--spec dismiss(This) -> ok when
+-spec dismiss(This) -> 'ok' when
This::wxPopupTransientWindow().
dismiss(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPopupTransientWindow),
@@ -136,7 +136,7 @@ dismiss(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPopupTransientWindow()) -> ok.
+-spec destroy(This::wxPopupTransientWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPopupTransientWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPopupWindow.erl b/lib/wx/src/gen/wxPopupWindow.erl
index 439f5fac54..962fd9903b 100644
--- a/lib/wx/src/gen/wxPopupWindow.erl
+++ b/lib/wx/src/gen/wxPopupWindow.erl
@@ -94,7 +94,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopupwindow.html#wxpopupwindowwxpopupwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxPopupWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -115,7 +115,7 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopupwindow.html#wxpopupwindowcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxPopupWindow(), Parent::wxWindow:wxWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPopupWindow),
@@ -127,7 +127,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopupwindow.html#wxpopupwindowposition">external documentation</a>.
--spec position(This, PtOrigin, Size) -> ok when
+-spec position(This, PtOrigin, Size) -> 'ok' when
This::wxPopupWindow(), PtOrigin::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}.
position(#wx_ref{type=ThisT,ref=ThisRef},{PtOriginX,PtOriginY},{SizeW,SizeH})
when is_integer(PtOriginX),is_integer(PtOriginY),is_integer(SizeW),is_integer(SizeH) ->
@@ -136,7 +136,7 @@ position(#wx_ref{type=ThisT,ref=ThisRef},{PtOriginX,PtOriginY},{SizeW,SizeH})
<<ThisRef:32/?UI,PtOriginX:32/?UI,PtOriginY:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPopupWindow()) -> ok.
+-spec destroy(This::wxPopupWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPopupWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPostScriptDC.erl b/lib/wx/src/gen/wxPostScriptDC.erl
index 2af3b53cf0..07764bca74 100644
--- a/lib/wx/src/gen/wxPostScriptDC.erl
+++ b/lib/wx/src/gen/wxPostScriptDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -78,7 +78,7 @@ new(#wx_ref{type=PrintDataT,ref=PrintDataRef}) ->
<<PrintDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpostscriptdc.html#wxpostscriptdcsetresolution">external documentation</a>.
--spec setResolution(Ppi) -> ok when
+-spec setResolution(Ppi) -> 'ok' when
Ppi::integer().
setResolution(Ppi)
when is_integer(Ppi) ->
@@ -92,7 +92,7 @@ getResolution() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPostScriptDC()) -> ok.
+-spec destroy(This::wxPostScriptDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPostScriptDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPreviewControlBar.erl b/lib/wx/src/gen/wxPreviewControlBar.erl
index 0e1828e87b..4dd224b26b 100644
--- a/lib/wx/src/gen/wxPreviewControlBar.erl
+++ b/lib/wx/src/gen/wxPreviewControlBar.erl
@@ -91,9 +91,9 @@ new(Preview,Buttons,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewcontrolbar.html#wxpreviewcontrolbarwxpreviewcontrolbar">external documentation</a>.
-spec new(Preview, Buttons, Parent, [Option]) -> wxPreviewControlBar() when
Preview::wxPrintPreview:wxPrintPreview(), Buttons::integer(), Parent::wxWindow:wxWindow(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=PreviewT,ref=PreviewRef},Buttons,#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_integer(Buttons),is_list(Options) ->
?CLASS(PreviewT,wxPrintPreview),
@@ -107,7 +107,7 @@ new(#wx_ref{type=PreviewT,ref=PreviewRef},Buttons,#wx_ref{type=ParentT,ref=Paren
<<PreviewRef:32/?UI,Buttons:32/?UI,ParentRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewcontrolbar.html#wxpreviewcontrolbarcreatebuttons">external documentation</a>.
--spec createButtons(This) -> ok when
+-spec createButtons(This) -> 'ok' when
This::wxPreviewControlBar().
createButtons(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPreviewControlBar),
@@ -131,7 +131,7 @@ getZoomControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewcontrolbar.html#wxpreviewcontrolbarsetzoomcontrol">external documentation</a>.
--spec setZoomControl(This, Zoom) -> ok when
+-spec setZoomControl(This, Zoom) -> 'ok' when
This::wxPreviewControlBar(), Zoom::integer().
setZoomControl(#wx_ref{type=ThisT,ref=ThisRef},Zoom)
when is_integer(Zoom) ->
@@ -140,7 +140,7 @@ setZoomControl(#wx_ref{type=ThisT,ref=ThisRef},Zoom)
<<ThisRef:32/?UI,Zoom:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPreviewControlBar()) -> ok.
+-spec destroy(This::wxPreviewControlBar()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPreviewControlBar),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPreviewFrame.erl b/lib/wx/src/gen/wxPreviewFrame.erl
index fe684478a5..2f530b49ea 100644
--- a/lib/wx/src/gen/wxPreviewFrame.erl
+++ b/lib/wx/src/gen/wxPreviewFrame.erl
@@ -102,10 +102,10 @@ new(Preview,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframewxpreviewframe">external documentation</a>.
-spec new(Preview, Parent, [Option]) -> wxPreviewFrame() when
Preview::wxPrintPreview:wxPrintPreview(), Parent::wxWindow:wxWindow(),
- Option :: {title, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'title', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=PreviewT,ref=PreviewRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(PreviewT,wxPrintPreview),
@@ -120,7 +120,7 @@ new(#wx_ref{type=PreviewT,ref=PreviewRef},#wx_ref{type=ParentT,ref=ParentRef}, O
<<PreviewRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframecreatecontrolbar">external documentation</a>.
--spec createControlBar(This) -> ok when
+-spec createControlBar(This) -> 'ok' when
This::wxPreviewFrame().
createControlBar(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPreviewFrame),
@@ -128,7 +128,7 @@ createControlBar(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframecreatecanvas">external documentation</a>.
--spec createCanvas(This) -> ok when
+-spec createCanvas(This) -> 'ok' when
This::wxPreviewFrame().
createCanvas(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPreviewFrame),
@@ -136,7 +136,7 @@ createCanvas(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframeinitialize">external documentation</a>.
--spec initialize(This) -> ok when
+-spec initialize(This) -> 'ok' when
This::wxPreviewFrame().
initialize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPreviewFrame),
@@ -144,7 +144,7 @@ initialize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframeonclosewindow">external documentation</a>.
--spec onCloseWindow(This, Event) -> ok when
+-spec onCloseWindow(This, Event) -> 'ok' when
This::wxPreviewFrame(), Event::wxCloseEvent:wxCloseEvent().
onCloseWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef}) ->
?CLASS(ThisT,wxPreviewFrame),
@@ -153,7 +153,7 @@ onCloseWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef})
<<ThisRef:32/?UI,EventRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPreviewFrame()) -> ok.
+-spec destroy(This::wxPreviewFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPreviewFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintData.erl b/lib/wx/src/gen/wxPrintData.erl
index 757685c36b..6b6b678adf 100644
--- a/lib/wx/src/gen/wxPrintData.erl
+++ b/lib/wx/src/gen/wxPrintData.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -137,7 +137,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetbin">external documentation</a>.
%%<br /> Bin = ?wxPRINTBIN_DEFAULT | ?wxPRINTBIN_ONLYONE | ?wxPRINTBIN_LOWER | ?wxPRINTBIN_MIDDLE | ?wxPRINTBIN_MANUAL | ?wxPRINTBIN_ENVELOPE | ?wxPRINTBIN_ENVMANUAL | ?wxPRINTBIN_AUTO | ?wxPRINTBIN_TRACTOR | ?wxPRINTBIN_SMALLFMT | ?wxPRINTBIN_LARGEFMT | ?wxPRINTBIN_LARGECAPACITY | ?wxPRINTBIN_CASSETTE | ?wxPRINTBIN_FORMSOURCE | ?wxPRINTBIN_USER
--spec setBin(This, Bin) -> ok when
+-spec setBin(This, Bin) -> 'ok' when
This::wxPrintData(), Bin::wx:wx_enum().
setBin(#wx_ref{type=ThisT,ref=ThisRef},Bin)
when is_integer(Bin) ->
@@ -146,7 +146,7 @@ setBin(#wx_ref{type=ThisT,ref=ThisRef},Bin)
<<ThisRef:32/?UI,Bin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetcollate">external documentation</a>.
--spec setCollate(This, Flag) -> ok when
+-spec setCollate(This, Flag) -> 'ok' when
This::wxPrintData(), Flag::boolean().
setCollate(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -155,7 +155,7 @@ setCollate(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxPrintData(), Colour::boolean().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when is_boolean(Colour) ->
@@ -165,7 +165,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetduplex">external documentation</a>.
%%<br /> Duplex = ?wxDUPLEX_SIMPLEX | ?wxDUPLEX_HORIZONTAL | ?wxDUPLEX_VERTICAL
--spec setDuplex(This, Duplex) -> ok when
+-spec setDuplex(This, Duplex) -> 'ok' when
This::wxPrintData(), Duplex::wx:wx_enum().
setDuplex(#wx_ref{type=ThisT,ref=ThisRef},Duplex)
when is_integer(Duplex) ->
@@ -174,7 +174,7 @@ setDuplex(#wx_ref{type=ThisT,ref=ThisRef},Duplex)
<<ThisRef:32/?UI,Duplex:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetnocopies">external documentation</a>.
--spec setNoCopies(This, V) -> ok when
+-spec setNoCopies(This, V) -> 'ok' when
This::wxPrintData(), V::integer().
setNoCopies(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -183,7 +183,7 @@ setNoCopies(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetorientation">external documentation</a>.
--spec setOrientation(This, Orient) -> ok when
+-spec setOrientation(This, Orient) -> 'ok' when
This::wxPrintData(), Orient::integer().
setOrientation(#wx_ref{type=ThisT,ref=ThisRef},Orient)
when is_integer(Orient) ->
@@ -193,7 +193,7 @@ setOrientation(#wx_ref{type=ThisT,ref=ThisRef},Orient)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetpaperid">external documentation</a>.
%%<br /> SizeId = ?wxPAPER_NONE | ?wxPAPER_LETTER | ?wxPAPER_LEGAL | ?wxPAPER_A4 | ?wxPAPER_CSHEET | ?wxPAPER_DSHEET | ?wxPAPER_ESHEET | ?wxPAPER_LETTERSMALL | ?wxPAPER_TABLOID | ?wxPAPER_LEDGER | ?wxPAPER_STATEMENT | ?wxPAPER_EXECUTIVE | ?wxPAPER_A3 | ?wxPAPER_A4SMALL | ?wxPAPER_A5 | ?wxPAPER_B4 | ?wxPAPER_B5 | ?wxPAPER_FOLIO | ?wxPAPER_QUARTO | ?wxPAPER_10X14 | ?wxPAPER_11X17 | ?wxPAPER_NOTE | ?wxPAPER_ENV_9 | ?wxPAPER_ENV_10 | ?wxPAPER_ENV_11 | ?wxPAPER_ENV_12 | ?wxPAPER_ENV_14 | ?wxPAPER_ENV_DL | ?wxPAPER_ENV_C5 | ?wxPAPER_ENV_C3 | ?wxPAPER_ENV_C4 | ?wxPAPER_ENV_C6 | ?wxPAPER_ENV_C65 | ?wxPAPER_ENV_B4 | ?wxPAPER_ENV_B5 | ?wxPAPER_ENV_B6 | ?wxPAPER_ENV_ITALY | ?wxPAPER_ENV_MONARCH | ?wxPAPER_ENV_PERSONAL | ?wxPAPER_FANFOLD_US | ?wxPAPER_FANFOLD_STD_GERMAN | ?wxPAPER_FANFOLD_LGL_GERMAN | ?wxPAPER_ISO_B4 | ?wxPAPER_JAPANESE_POSTCARD | ?wxPAPER_9X11 | ?wxPAPER_10X11 | ?wxPAPER_15X11 | ?wxPAPER_ENV_INVITE | ?wxPAPER_LETTER_EXTRA | ?wxPAPER_LEGAL_EXTRA | ?wxPAPER_TABLOID_EXTRA | ?wxPAPER_A4_EXTRA | ?wxPAPER_LETTER_TRANSVERSE | ?wxPAPER_A4_TRANSVERSE | ?wxPAPER_LETTER_EXTRA_TRANSVERSE | ?wxPAPER_A_PLUS | ?wxPAPER_B_PLUS | ?wxPAPER_LETTER_PLUS | ?wxPAPER_A4_PLUS | ?wxPAPER_A5_TRANSVERSE | ?wxPAPER_B5_TRANSVERSE | ?wxPAPER_A3_EXTRA | ?wxPAPER_A5_EXTRA | ?wxPAPER_B5_EXTRA | ?wxPAPER_A2 | ?wxPAPER_A3_TRANSVERSE | ?wxPAPER_A3_EXTRA_TRANSVERSE | ?wxPAPER_DBL_JAPANESE_POSTCARD | ?wxPAPER_A6 | ?wxPAPER_JENV_KAKU2 | ?wxPAPER_JENV_KAKU3 | ?wxPAPER_JENV_CHOU3 | ?wxPAPER_JENV_CHOU4 | ?wxPAPER_LETTER_ROTATED | ?wxPAPER_A3_ROTATED | ?wxPAPER_A4_ROTATED | ?wxPAPER_A5_ROTATED | ?wxPAPER_B4_JIS_ROTATED | ?wxPAPER_B5_JIS_ROTATED | ?wxPAPER_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_A6_ROTATED | ?wxPAPER_JENV_KAKU2_ROTATED | ?wxPAPER_JENV_KAKU3_ROTATED | ?wxPAPER_JENV_CHOU3_ROTATED | ?wxPAPER_JENV_CHOU4_ROTATED | ?wxPAPER_B6_JIS | ?wxPAPER_B6_JIS_ROTATED | ?wxPAPER_12X11 | ?wxPAPER_JENV_YOU4 | ?wxPAPER_JENV_YOU4_ROTATED | ?wxPAPER_P16K | ?wxPAPER_P32K | ?wxPAPER_P32KBIG | ?wxPAPER_PENV_1 | ?wxPAPER_PENV_2 | ?wxPAPER_PENV_3 | ?wxPAPER_PENV_4 | ?wxPAPER_PENV_5 | ?wxPAPER_PENV_6 | ?wxPAPER_PENV_7 | ?wxPAPER_PENV_8 | ?wxPAPER_PENV_9 | ?wxPAPER_PENV_10 | ?wxPAPER_P16K_ROTATED | ?wxPAPER_P32K_ROTATED | ?wxPAPER_P32KBIG_ROTATED | ?wxPAPER_PENV_1_ROTATED | ?wxPAPER_PENV_2_ROTATED | ?wxPAPER_PENV_3_ROTATED | ?wxPAPER_PENV_4_ROTATED | ?wxPAPER_PENV_5_ROTATED | ?wxPAPER_PENV_6_ROTATED | ?wxPAPER_PENV_7_ROTATED | ?wxPAPER_PENV_8_ROTATED | ?wxPAPER_PENV_9_ROTATED | ?wxPAPER_PENV_10_ROTATED
--spec setPaperId(This, SizeId) -> ok when
+-spec setPaperId(This, SizeId) -> 'ok' when
This::wxPrintData(), SizeId::wx:wx_enum().
setPaperId(#wx_ref{type=ThisT,ref=ThisRef},SizeId)
when is_integer(SizeId) ->
@@ -202,7 +202,7 @@ setPaperId(#wx_ref{type=ThisT,ref=ThisRef},SizeId)
<<ThisRef:32/?UI,SizeId:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetprintername">external documentation</a>.
--spec setPrinterName(This, Name) -> ok when
+-spec setPrinterName(This, Name) -> 'ok' when
This::wxPrintData(), Name::unicode:chardata().
setPrinterName(#wx_ref{type=ThisT,ref=ThisRef},Name)
when is_list(Name) ->
@@ -212,7 +212,7 @@ setPrinterName(#wx_ref{type=ThisT,ref=ThisRef},Name)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetquality">external documentation</a>.
--spec setQuality(This, Quality) -> ok when
+-spec setQuality(This, Quality) -> 'ok' when
This::wxPrintData(), Quality::integer().
setQuality(#wx_ref{type=ThisT,ref=ThisRef},Quality)
when is_integer(Quality) ->
@@ -221,7 +221,7 @@ setQuality(#wx_ref{type=ThisT,ref=ThisRef},Quality)
<<ThisRef:32/?UI,Quality:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintData()) -> ok.
+-spec destroy(This::wxPrintData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintDialog.erl b/lib/wx/src/gen/wxPrintDialog.erl
index a337089d5a..d4188e79c4 100644
--- a/lib/wx/src/gen/wxPrintDialog.erl
+++ b/lib/wx/src/gen/wxPrintDialog.erl
@@ -103,7 +103,7 @@ new(Parent)
%%
-spec new(Parent, [Option]) -> wxPrintDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {data, wxPrintDialogData:wxPrintDialogData()};
+ Option :: {'data', wxPrintDialogData:wxPrintDialogData()};
(Parent, Data) -> wxPrintDialog() when
Parent::wxWindow:wxWindow(), Data::wxPrintData:wxPrintData().
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
@@ -137,7 +137,7 @@ getPrintDC(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintDialog()) -> ok.
+-spec destroy(This::wxPrintDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintDialogData.erl b/lib/wx/src/gen/wxPrintDialogData.erl
index 3ed49808e6..5d39008a64 100644
--- a/lib/wx/src/gen/wxPrintDialogData.erl
+++ b/lib/wx/src/gen/wxPrintDialogData.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -59,7 +59,7 @@ new(#wx_ref{type=DialogDataT,ref=DialogDataRef}) ->
<<DialogDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdataenablehelp">external documentation</a>.
--spec enableHelp(This, Flag) -> ok when
+-spec enableHelp(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
enableHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -68,7 +68,7 @@ enableHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdataenablepagenumbers">external documentation</a>.
--spec enablePageNumbers(This, Flag) -> ok when
+-spec enablePageNumbers(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
enablePageNumbers(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -77,7 +77,7 @@ enablePageNumbers(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdataenableprinttofile">external documentation</a>.
--spec enablePrintToFile(This, Flag) -> ok when
+-spec enablePrintToFile(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
enablePrintToFile(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -86,7 +86,7 @@ enablePrintToFile(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdataenableselection">external documentation</a>.
--spec enableSelection(This, Flag) -> ok when
+-spec enableSelection(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
enableSelection(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -183,7 +183,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetcollate">external documentation</a>.
--spec setCollate(This, Flag) -> ok when
+-spec setCollate(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
setCollate(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -192,7 +192,7 @@ setCollate(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetfrompage">external documentation</a>.
--spec setFromPage(This, V) -> ok when
+-spec setFromPage(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setFromPage(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -201,7 +201,7 @@ setFromPage(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetmaxpage">external documentation</a>.
--spec setMaxPage(This, V) -> ok when
+-spec setMaxPage(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setMaxPage(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -210,7 +210,7 @@ setMaxPage(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetminpage">external documentation</a>.
--spec setMinPage(This, V) -> ok when
+-spec setMinPage(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setMinPage(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -219,7 +219,7 @@ setMinPage(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetnocopies">external documentation</a>.
--spec setNoCopies(This, V) -> ok when
+-spec setNoCopies(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setNoCopies(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -228,7 +228,7 @@ setNoCopies(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetprintdata">external documentation</a>.
--spec setPrintData(This, PrintData) -> ok when
+-spec setPrintData(This, PrintData) -> 'ok' when
This::wxPrintDialogData(), PrintData::wxPrintData:wxPrintData().
setPrintData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintDataT,ref=PrintDataRef}) ->
?CLASS(ThisT,wxPrintDialogData),
@@ -237,7 +237,7 @@ setPrintData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintDataT,ref=PrintDa
<<ThisRef:32/?UI,PrintDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetprinttofile">external documentation</a>.
--spec setPrintToFile(This, Flag) -> ok when
+-spec setPrintToFile(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
setPrintToFile(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -246,7 +246,7 @@ setPrintToFile(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetselection">external documentation</a>.
--spec setSelection(This, Flag) -> ok when
+-spec setSelection(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -255,7 +255,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasettopage">external documentation</a>.
--spec setToPage(This, V) -> ok when
+-spec setToPage(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setToPage(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -264,7 +264,7 @@ setToPage(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintDialogData()) -> ok.
+-spec destroy(This::wxPrintDialogData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintDialogData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintPreview.erl b/lib/wx/src/gen/wxPrintPreview.erl
index cb3ccccbbe..a0034a5e5c 100644
--- a/lib/wx/src/gen/wxPrintPreview.erl
+++ b/lib/wx/src/gen/wxPrintPreview.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -49,8 +49,8 @@ new(Printout)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewwxprintpreview">external documentation</a>.
-spec new(Printout, [Option]) -> wxPrintPreview() when
Printout::wxPrintout:wxPrintout(),
- Option :: {printoutForPrinting, wxPrintout:wxPrintout()}
- | {data, wxPrintDialogData:wxPrintDialogData()}.
+ Option :: {'printoutForPrinting', wxPrintout:wxPrintout()}
+ | {'data', wxPrintDialogData:wxPrintDialogData()}.
new(#wx_ref{type=PrintoutT,ref=PrintoutRef}, Options)
when is_list(Options) ->
?CLASS(PrintoutT,wxPrintout),
@@ -164,7 +164,7 @@ renderPage(#wx_ref{type=ThisT,ref=ThisRef},PageNum)
<<ThisRef:32/?UI,PageNum:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewsetcanvas">external documentation</a>.
--spec setCanvas(This, Canvas) -> ok when
+-spec setCanvas(This, Canvas) -> 'ok' when
This::wxPrintPreview(), Canvas::wxPreviewCanvas:wxPreviewCanvas().
setCanvas(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CanvasT,ref=CanvasRef}) ->
?CLASS(ThisT,wxPrintPreview),
@@ -182,7 +182,7 @@ setCurrentPage(#wx_ref{type=ThisT,ref=ThisRef},PageNum)
<<ThisRef:32/?UI,PageNum:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewsetframe">external documentation</a>.
--spec setFrame(This, Frame) -> ok when
+-spec setFrame(This, Frame) -> 'ok' when
This::wxPrintPreview(), Frame::wxFrame:wxFrame().
setFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}) ->
?CLASS(ThisT,wxPrintPreview),
@@ -191,7 +191,7 @@ setFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}) ->
<<ThisRef:32/?UI,FrameRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewsetprintout">external documentation</a>.
--spec setPrintout(This, Printout) -> ok when
+-spec setPrintout(This, Printout) -> 'ok' when
This::wxPrintPreview(), Printout::wxPrintout:wxPrintout().
setPrintout(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintoutT,ref=PrintoutRef}) ->
?CLASS(ThisT,wxPrintPreview),
@@ -200,7 +200,7 @@ setPrintout(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintoutT,ref=PrintoutR
<<ThisRef:32/?UI,PrintoutRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewsetzoom">external documentation</a>.
--spec setZoom(This, Percent) -> ok when
+-spec setZoom(This, Percent) -> 'ok' when
This::wxPrintPreview(), Percent::integer().
setZoom(#wx_ref{type=ThisT,ref=ThisRef},Percent)
when is_integer(Percent) ->
@@ -209,7 +209,7 @@ setZoom(#wx_ref{type=ThisT,ref=ThisRef},Percent)
<<ThisRef:32/?UI,Percent:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintPreview()) -> ok.
+-spec destroy(This::wxPrintPreview()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintPreview),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrinter.erl b/lib/wx/src/gen/wxPrinter.erl
index ec27b3cab9..b9fb1c07bd 100644
--- a/lib/wx/src/gen/wxPrinter.erl
+++ b/lib/wx/src/gen/wxPrinter.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprinter.html#wxprinterwxprinter">external documentation</a>.
-spec new([Option]) -> wxPrinter() when
- Option :: {data, wxPrintDialogData:wxPrintDialogData()}.
+ Option :: {'data', wxPrintDialogData:wxPrintDialogData()}.
new(Options)
when is_list(Options) ->
MOpts = fun({data, #wx_ref{type=DataT,ref=DataRef}}, Acc) -> ?CLASS(DataT,wxPrintDialogData),[<<1:32/?UI,DataRef:32/?UI>>|Acc];
@@ -97,7 +97,7 @@ print(This,Parent,Printout)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprinter.html#wxprinterprint">external documentation</a>.
-spec print(This, Parent, Printout, [Option]) -> boolean() when
This::wxPrinter(), Parent::wxWindow:wxWindow(), Printout::wxPrintout:wxPrintout(),
- Option :: {prompt, boolean()}.
+ Option :: {'prompt', boolean()}.
print(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=PrintoutT,ref=PrintoutRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPrinter),
@@ -119,7 +119,7 @@ printDialog(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef})
<<ThisRef:32/?UI,ParentRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprinter.html#wxprinterreporterror">external documentation</a>.
--spec reportError(This, Parent, Printout, Message) -> ok when
+-spec reportError(This, Parent, Printout, Message) -> 'ok' when
This::wxPrinter(), Parent::wxWindow:wxWindow(), Printout::wxPrintout:wxPrintout(), Message::unicode:chardata().
reportError(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=PrintoutT,ref=PrintoutRef},Message)
when is_list(Message) ->
@@ -140,7 +140,7 @@ setup(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}) ->
<<ThisRef:32/?UI,ParentRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrinter()) -> ok.
+-spec destroy(This::wxPrinter()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrinter),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintout.erl b/lib/wx/src/gen/wxPrintout.erl
index 45ca116251..7b28d0947d 100644
--- a/lib/wx/src/gen/wxPrintout.erl
+++ b/lib/wx/src/gen/wxPrintout.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -187,7 +187,7 @@ isPreview(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutfitthissizetopaper">external documentation</a>.
--spec fitThisSizeToPaper(This, ImageSize) -> ok when
+-spec fitThisSizeToPaper(This, ImageSize) -> 'ok' when
This::wxPrintout(), ImageSize::{W::integer(), H::integer()}.
fitThisSizeToPaper(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH})
when is_integer(ImageSizeW),is_integer(ImageSizeH) ->
@@ -196,7 +196,7 @@ fitThisSizeToPaper(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH})
<<ThisRef:32/?UI,ImageSizeW:32/?UI,ImageSizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutfitthissizetopage">external documentation</a>.
--spec fitThisSizeToPage(This, ImageSize) -> ok when
+-spec fitThisSizeToPage(This, ImageSize) -> 'ok' when
This::wxPrintout(), ImageSize::{W::integer(), H::integer()}.
fitThisSizeToPage(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH})
when is_integer(ImageSizeW),is_integer(ImageSizeH) ->
@@ -205,7 +205,7 @@ fitThisSizeToPage(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH})
<<ThisRef:32/?UI,ImageSizeW:32/?UI,ImageSizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutfitthissizetopagemargins">external documentation</a>.
--spec fitThisSizeToPageMargins(This, ImageSize, PageSetupData) -> ok when
+-spec fitThisSizeToPageMargins(This, ImageSize, PageSetupData) -> 'ok' when
This::wxPrintout(), ImageSize::{W::integer(), H::integer()}, PageSetupData::wxPageSetupDialogData:wxPageSetupDialogData().
fitThisSizeToPageMargins(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH},#wx_ref{type=PageSetupDataT,ref=PageSetupDataRef})
when is_integer(ImageSizeW),is_integer(ImageSizeH) ->
@@ -215,7 +215,7 @@ fitThisSizeToPageMargins(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH}
<<ThisRef:32/?UI,ImageSizeW:32/?UI,ImageSizeH:32/?UI,PageSetupDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutmapscreensizetopaper">external documentation</a>.
--spec mapScreenSizeToPaper(This) -> ok when
+-spec mapScreenSizeToPaper(This) -> 'ok' when
This::wxPrintout().
mapScreenSizeToPaper(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPrintout),
@@ -223,7 +223,7 @@ mapScreenSizeToPaper(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutmapscreensizetopage">external documentation</a>.
--spec mapScreenSizeToPage(This) -> ok when
+-spec mapScreenSizeToPage(This) -> 'ok' when
This::wxPrintout().
mapScreenSizeToPage(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPrintout),
@@ -231,7 +231,7 @@ mapScreenSizeToPage(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutmapscreensizetopagemargins">external documentation</a>.
--spec mapScreenSizeToPageMargins(This, PageSetupData) -> ok when
+-spec mapScreenSizeToPageMargins(This, PageSetupData) -> 'ok' when
This::wxPrintout(), PageSetupData::wxPageSetupDialogData:wxPageSetupDialogData().
mapScreenSizeToPageMargins(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageSetupDataT,ref=PageSetupDataRef}) ->
?CLASS(ThisT,wxPrintout),
@@ -240,7 +240,7 @@ mapScreenSizeToPageMargins(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageSetu
<<ThisRef:32/?UI,PageSetupDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutmapscreensizetodevice">external documentation</a>.
--spec mapScreenSizeToDevice(This) -> ok when
+-spec mapScreenSizeToDevice(This) -> 'ok' when
This::wxPrintout().
mapScreenSizeToDevice(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPrintout),
@@ -273,7 +273,7 @@ getLogicalPageMarginsRect(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageSetup
<<ThisRef:32/?UI,PageSetupDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutsetlogicalorigin">external documentation</a>.
--spec setLogicalOrigin(This, X, Y) -> ok when
+-spec setLogicalOrigin(This, X, Y) -> 'ok' when
This::wxPrintout(), X::integer(), Y::integer().
setLogicalOrigin(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -282,7 +282,7 @@ setLogicalOrigin(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutoffsetlogicalorigin">external documentation</a>.
--spec offsetLogicalOrigin(This, Xoff, Yoff) -> ok when
+-spec offsetLogicalOrigin(This, Xoff, Yoff) -> 'ok' when
This::wxPrintout(), Xoff::integer(), Yoff::integer().
offsetLogicalOrigin(#wx_ref{type=ThisT,ref=ThisRef},Xoff,Yoff)
when is_integer(Xoff),is_integer(Yoff) ->
@@ -291,7 +291,7 @@ offsetLogicalOrigin(#wx_ref{type=ThisT,ref=ThisRef},Xoff,Yoff)
<<ThisRef:32/?UI,Xoff:32/?UI,Yoff:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintout()) -> ok.
+-spec destroy(This::wxPrintout()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintout),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxProgressDialog.erl b/lib/wx/src/gen/wxProgressDialog.erl
index 665b900729..8e275f9dc8 100644
--- a/lib/wx/src/gen/wxProgressDialog.erl
+++ b/lib/wx/src/gen/wxProgressDialog.erl
@@ -99,9 +99,9 @@ new(Title,Message)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprogressdialog.html#wxprogressdialogwxprogressdialog">external documentation</a>.
-spec new(Title, Message, [Option]) -> wxProgressDialog() when
Title::unicode:chardata(), Message::unicode:chardata(),
- Option :: {maximum, integer()}
- | {parent, wxWindow:wxWindow()}
- | {style, integer()}.
+ Option :: {'maximum', integer()}
+ | {'parent', wxWindow:wxWindow()}
+ | {'style', integer()}.
new(Title,Message, Options)
when is_list(Title),is_list(Message),is_list(Options) ->
Title_UC = unicode:characters_to_binary([Title,0]),
@@ -115,7 +115,7 @@ new(Title,Message, Options)
<<(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((4+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((4+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprogressdialog.html#wxprogressdialogresume">external documentation</a>.
--spec resume(This) -> ok when
+-spec resume(This) -> 'ok' when
This::wxProgressDialog().
resume(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxProgressDialog),
@@ -123,7 +123,7 @@ resume(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprogressdialog.html#wxprogressdialogupdate">external documentation</a>.
--spec update(This) -> ok when
+-spec update(This) -> 'ok' when
This::wxProgressDialog().
update(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxProgressDialog),
@@ -141,7 +141,7 @@ update(This,Value)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprogressdialog.html#wxprogressdialogupdate">external documentation</a>.
-spec update(This, Value, [Option]) -> boolean() when
This::wxProgressDialog(), Value::integer(),
- Option :: {newmsg, unicode:chardata()}.
+ Option :: {'newmsg', unicode:chardata()}.
update(#wx_ref{type=ThisT,ref=ThisRef},Value, Options)
when is_integer(Value),is_list(Options) ->
?CLASS(ThisT,wxProgressDialog),
@@ -152,7 +152,7 @@ update(#wx_ref{type=ThisT,ref=ThisRef},Value, Options)
<<ThisRef:32/?UI,Value:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxProgressDialog()) -> ok.
+-spec destroy(This::wxProgressDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxProgressDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxQueryNewPaletteEvent.erl b/lib/wx/src/gen/wxQueryNewPaletteEvent.erl
index 11ca65923d..d32f893212 100644
--- a/lib/wx/src/gen/wxQueryNewPaletteEvent.erl
+++ b/lib/wx/src/gen/wxQueryNewPaletteEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,7 +45,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxQueryNewPaletteEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxquerynewpaletteevent.html#wxquerynewpaletteeventsetpaletterealized">external documentation</a>.
--spec setPaletteRealized(This, Realized) -> ok when
+-spec setPaletteRealized(This, Realized) -> 'ok' when
This::wxQueryNewPaletteEvent(), Realized::boolean().
setPaletteRealized(#wx_ref{type=ThisT,ref=ThisRef},Realized)
when is_boolean(Realized) ->
diff --git a/lib/wx/src/gen/wxRadioBox.erl b/lib/wx/src/gen/wxRadioBox.erl
index 5ef1deff66..348d75db2a 100644
--- a/lib/wx/src/gen/wxRadioBox.erl
+++ b/lib/wx/src/gen/wxRadioBox.erl
@@ -92,9 +92,9 @@ new(Parent,Id,Title,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxwxradiobox">external documentation</a>.
-spec new(Parent, Id, Title, Pos, Size, Choices, [Option]) -> wxRadioBox() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {majorDim, integer()}
- | {style, integer()}
- | {val, wx:wx_object()}.
+ Option :: {'majorDim', integer()}
+ | {'style', integer()}
+ | {'val', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_list(Title),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -120,9 +120,9 @@ create(This,Parent,Id,Title,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Title, Pos, Size, Choices, [Option]) -> boolean() when
This::wxRadioBox(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {majorDim, integer()}
- | {style, integer()}
- | {val, wx:wx_object()}.
+ Option :: {'majorDim', integer()}
+ | {'style', integer()}
+ | {'val', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_list(Title),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ThisT,wxRadioBox),
@@ -150,13 +150,13 @@ enable(This)
%% <br /> Also:<br />
%% enable(This, [Option]) -> boolean() when<br />
%% This::wxRadioBox(),<br />
-%% Option :: {enable, boolean()}.<br />
+%% Option :: {'enable', boolean()}.<br />
%%
-spec enable(This, N) -> boolean() when
This::wxRadioBox(), N::integer();
(This, [Option]) -> boolean() when
This::wxRadioBox(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(This,N)
when is_record(This, wx_ref),is_integer(N) ->
@@ -173,7 +173,7 @@ enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxenable">external documentation</a>.
-spec enable(This, N, [Option]) -> boolean() when
This::wxRadioBox(), N::integer(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(#wx_ref{type=ThisT,ref=ThisRef},N, Options)
when is_integer(N),is_list(Options) ->
?CLASS(ThisT,wxRadioBox),
@@ -201,7 +201,7 @@ getString(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxsetselection">external documentation</a>.
--spec setSelection(This, N) -> ok when
+-spec setSelection(This, N) -> 'ok' when
This::wxRadioBox(), N::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -221,13 +221,13 @@ show(This)
%% <br /> Also:<br />
%% show(This, [Option]) -> boolean() when<br />
%% This::wxRadioBox(),<br />
-%% Option :: {show, boolean()}.<br />
+%% Option :: {'show', boolean()}.<br />
%%
-spec show(This, N) -> boolean() when
This::wxRadioBox(), N::integer();
(This, [Option]) -> boolean() when
This::wxRadioBox(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(This,N)
when is_record(This, wx_ref),is_integer(N) ->
@@ -244,7 +244,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxshow">external documentation</a>.
-spec show(This, N, [Option]) -> boolean() when
This::wxRadioBox(), N::integer(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef},N, Options)
when is_integer(N),is_list(Options) ->
?CLASS(ThisT,wxRadioBox),
@@ -316,7 +316,7 @@ isItemShown(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxsetitemhelptext">external documentation</a>.
--spec setItemHelpText(This, N, HelpText) -> ok when
+-spec setItemHelpText(This, N, HelpText) -> 'ok' when
This::wxRadioBox(), N::integer(), HelpText::unicode:chardata().
setItemHelpText(#wx_ref{type=ThisT,ref=ThisRef},N,HelpText)
when is_integer(N),is_list(HelpText) ->
@@ -326,7 +326,7 @@ setItemHelpText(#wx_ref{type=ThisT,ref=ThisRef},N,HelpText)
<<ThisRef:32/?UI,N:32/?UI,(byte_size(HelpText_UC)):32/?UI,(HelpText_UC)/binary, 0:(((8- ((4+byte_size(HelpText_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxsetitemtooltip">external documentation</a>.
--spec setItemToolTip(This, Item, Text) -> ok when
+-spec setItemToolTip(This, Item, Text) -> 'ok' when
This::wxRadioBox(), Item::integer(), Text::unicode:chardata().
setItemToolTip(#wx_ref{type=ThisT,ref=ThisRef},Item,Text)
when is_integer(Item),is_list(Text) ->
@@ -336,7 +336,7 @@ setItemToolTip(#wx_ref{type=ThisT,ref=ThisRef},Item,Text)
<<ThisRef:32/?UI,Item:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxRadioBox()) -> ok.
+-spec destroy(This::wxRadioBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxRadioBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxRadioButton.erl b/lib/wx/src/gen/wxRadioButton.erl
index 3b4689a27b..4487724be6 100644
--- a/lib/wx/src/gen/wxRadioButton.erl
+++ b/lib/wx/src/gen/wxRadioButton.erl
@@ -96,10 +96,10 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobutton.html#wxradiobuttonwxradiobutton">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxRadioButton() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobutton.html#wxradiobuttoncreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxRadioButton(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxRadioButton),
@@ -151,7 +151,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobutton.html#wxradiobuttonsetvalue">external documentation</a>.
--spec setValue(This, Val) -> ok when
+-spec setValue(This, Val) -> 'ok' when
This::wxRadioButton(), Val::boolean().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Val)
when is_boolean(Val) ->
@@ -160,7 +160,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:from_bool(Val)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxRadioButton()) -> ok.
+-spec destroy(This::wxRadioButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxRadioButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxRegion.erl b/lib/wx/src/gen/wxRegion.erl
index 63662eb163..2e8c1af10e 100644
--- a/lib/wx/src/gen/wxRegion.erl
+++ b/lib/wx/src/gen/wxRegion.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -79,7 +79,7 @@ new(X,Y,W,H)
<<X:32/?UI,Y:32/?UI,W:32/?UI,H:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxregion.html#wxregionclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxRegion().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxRegion),
@@ -263,7 +263,7 @@ union(This,Bmp,Transp)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxregion.html#wxregionunion">external documentation</a>.
-spec union(This, Bmp, Transp, [Option]) -> boolean() when
This::wxRegion(), Bmp::wxBitmap:wxBitmap(), Transp::wx:wx_colour(),
- Option :: {tolerance, integer()}.
+ Option :: {'tolerance', integer()}.
union(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},Transp, Options)
when tuple_size(Transp) =:= 3; tuple_size(Transp) =:= 4,is_list(Options) ->
?CLASS(ThisT,wxRegion),
@@ -313,7 +313,7 @@ union(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,W:32/?UI,H:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxRegion()) -> ok.
+-spec destroy(This::wxRegion()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxRegion),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSashEvent.erl b/lib/wx/src/gen/wxSashEvent.erl
index e4d31043e0..3bd8b92ff6 100644
--- a/lib/wx/src/gen/wxSashEvent.erl
+++ b/lib/wx/src/gen/wxSashEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxSashLayoutWindow.erl b/lib/wx/src/gen/wxSashLayoutWindow.erl
index 223c07419d..ae081ae800 100644
--- a/lib/wx/src/gen/wxSashLayoutWindow.erl
+++ b/lib/wx/src/gen/wxSashLayoutWindow.erl
@@ -100,10 +100,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowwxsashlayoutwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxSashLayoutWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -127,10 +127,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxSashLayoutWindow(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSashLayoutWindow),
@@ -164,7 +164,7 @@ getOrientation(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowsetalignment">external documentation</a>.
%%<br /> Align = ?wxLAYOUT_NONE | ?wxLAYOUT_TOP | ?wxLAYOUT_LEFT | ?wxLAYOUT_RIGHT | ?wxLAYOUT_BOTTOM
--spec setAlignment(This, Align) -> ok when
+-spec setAlignment(This, Align) -> 'ok' when
This::wxSashLayoutWindow(), Align::wx:wx_enum().
setAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align)
when is_integer(Align) ->
@@ -173,7 +173,7 @@ setAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align)
<<ThisRef:32/?UI,Align:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowsetdefaultsize">external documentation</a>.
--spec setDefaultSize(This, Size) -> ok when
+-spec setDefaultSize(This, Size) -> 'ok' when
This::wxSashLayoutWindow(), Size::{W::integer(), H::integer()}.
setDefaultSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -183,7 +183,7 @@ setDefaultSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowsetorientation">external documentation</a>.
%%<br /> Orient = ?wxLAYOUT_HORIZONTAL | ?wxLAYOUT_VERTICAL
--spec setOrientation(This, Orient) -> ok when
+-spec setOrientation(This, Orient) -> 'ok' when
This::wxSashLayoutWindow(), Orient::wx:wx_enum().
setOrientation(#wx_ref{type=ThisT,ref=ThisRef},Orient)
when is_integer(Orient) ->
@@ -192,7 +192,7 @@ setOrientation(#wx_ref{type=ThisT,ref=ThisRef},Orient)
<<ThisRef:32/?UI,Orient:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSashLayoutWindow()) -> ok.
+-spec destroy(This::wxSashLayoutWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSashLayoutWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSashWindow.erl b/lib/wx/src/gen/wxSashWindow.erl
index 4a39726ffd..773e0f1ab0 100644
--- a/lib/wx/src/gen/wxSashWindow.erl
+++ b/lib/wx/src/gen/wxSashWindow.erl
@@ -96,10 +96,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowwxsashwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxSashWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -155,7 +155,7 @@ getMinimumSizeY(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetmaximumsizex">external documentation</a>.
--spec setMaximumSizeX(This, Max) -> ok when
+-spec setMaximumSizeX(This, Max) -> 'ok' when
This::wxSashWindow(), Max::integer().
setMaximumSizeX(#wx_ref{type=ThisT,ref=ThisRef},Max)
when is_integer(Max) ->
@@ -164,7 +164,7 @@ setMaximumSizeX(#wx_ref{type=ThisT,ref=ThisRef},Max)
<<ThisRef:32/?UI,Max:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetmaximumsizey">external documentation</a>.
--spec setMaximumSizeY(This, Max) -> ok when
+-spec setMaximumSizeY(This, Max) -> 'ok' when
This::wxSashWindow(), Max::integer().
setMaximumSizeY(#wx_ref{type=ThisT,ref=ThisRef},Max)
when is_integer(Max) ->
@@ -173,7 +173,7 @@ setMaximumSizeY(#wx_ref{type=ThisT,ref=ThisRef},Max)
<<ThisRef:32/?UI,Max:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetminimumsizex">external documentation</a>.
--spec setMinimumSizeX(This, Min) -> ok when
+-spec setMinimumSizeX(This, Min) -> 'ok' when
This::wxSashWindow(), Min::integer().
setMinimumSizeX(#wx_ref{type=ThisT,ref=ThisRef},Min)
when is_integer(Min) ->
@@ -182,7 +182,7 @@ setMinimumSizeX(#wx_ref{type=ThisT,ref=ThisRef},Min)
<<ThisRef:32/?UI,Min:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetminimumsizey">external documentation</a>.
--spec setMinimumSizeY(This, Min) -> ok when
+-spec setMinimumSizeY(This, Min) -> 'ok' when
This::wxSashWindow(), Min::integer().
setMinimumSizeY(#wx_ref{type=ThisT,ref=ThisRef},Min)
when is_integer(Min) ->
@@ -192,7 +192,7 @@ setMinimumSizeY(#wx_ref{type=ThisT,ref=ThisRef},Min)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetsashvisible">external documentation</a>.
%%<br /> Edge = ?wxSASH_TOP | ?wxSASH_RIGHT | ?wxSASH_BOTTOM | ?wxSASH_LEFT | ?wxSASH_NONE
--spec setSashVisible(This, Edge, Sash) -> ok when
+-spec setSashVisible(This, Edge, Sash) -> 'ok' when
This::wxSashWindow(), Edge::wx:wx_enum(), Sash::boolean().
setSashVisible(#wx_ref{type=ThisT,ref=ThisRef},Edge,Sash)
when is_integer(Edge),is_boolean(Sash) ->
@@ -201,7 +201,7 @@ setSashVisible(#wx_ref{type=ThisT,ref=ThisRef},Edge,Sash)
<<ThisRef:32/?UI,Edge:32/?UI,(wxe_util:from_bool(Sash)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSashWindow()) -> ok.
+-spec destroy(This::wxSashWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSashWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxScreenDC.erl b/lib/wx/src/gen/wxScreenDC.erl
index 2766d8d397..a36c25025c 100644
--- a/lib/wx/src/gen/wxScreenDC.erl
+++ b/lib/wx/src/gen/wxScreenDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -68,7 +68,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxScreenDC()) -> ok.
+-spec destroy(This::wxScreenDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxScreenDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxScrollBar.erl b/lib/wx/src/gen/wxScrollBar.erl
index ccddf84835..7f70d9d97b 100644
--- a/lib/wx/src/gen/wxScrollBar.erl
+++ b/lib/wx/src/gen/wxScrollBar.erl
@@ -97,10 +97,10 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrollbar.html#wxscrollbarwxscrollbar">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxScrollBar() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrollbar.html#wxscrollbarcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxScrollBar(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxScrollBar),
@@ -174,7 +174,7 @@ getThumbSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrollbar.html#wxscrollbarsetthumbposition">external documentation</a>.
--spec setThumbPosition(This, ViewStart) -> ok when
+-spec setThumbPosition(This, ViewStart) -> 'ok' when
This::wxScrollBar(), ViewStart::integer().
setThumbPosition(#wx_ref{type=ThisT,ref=ThisRef},ViewStart)
when is_integer(ViewStart) ->
@@ -183,7 +183,7 @@ setThumbPosition(#wx_ref{type=ThisT,ref=ThisRef},ViewStart)
<<ThisRef:32/?UI,ViewStart:32/?UI>>).
%% @equiv setScrollbar(This,Position,ThumbSize,Range,PageSize, [])
--spec setScrollbar(This, Position, ThumbSize, Range, PageSize) -> ok when
+-spec setScrollbar(This, Position, ThumbSize, Range, PageSize) -> 'ok' when
This::wxScrollBar(), Position::integer(), ThumbSize::integer(), Range::integer(), PageSize::integer().
setScrollbar(This,Position,ThumbSize,Range,PageSize)
@@ -191,9 +191,9 @@ setScrollbar(This,Position,ThumbSize,Range,PageSize)
setScrollbar(This,Position,ThumbSize,Range,PageSize, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrollbar.html#wxscrollbarsetscrollbar">external documentation</a>.
--spec setScrollbar(This, Position, ThumbSize, Range, PageSize, [Option]) -> ok when
+-spec setScrollbar(This, Position, ThumbSize, Range, PageSize, [Option]) -> 'ok' when
This::wxScrollBar(), Position::integer(), ThumbSize::integer(), Range::integer(), PageSize::integer(),
- Option :: {refresh, boolean()}.
+ Option :: {'refresh', boolean()}.
setScrollbar(#wx_ref{type=ThisT,ref=ThisRef},Position,ThumbSize,Range,PageSize, Options)
when is_integer(Position),is_integer(ThumbSize),is_integer(Range),is_integer(PageSize),is_list(Options) ->
?CLASS(ThisT,wxScrollBar),
@@ -204,7 +204,7 @@ setScrollbar(#wx_ref{type=ThisT,ref=ThisRef},Position,ThumbSize,Range,PageSize,
<<ThisRef:32/?UI,Position:32/?UI,ThumbSize:32/?UI,Range:32/?UI,PageSize:32/?UI, 0:32,BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxScrollBar()) -> ok.
+-spec destroy(This::wxScrollBar()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxScrollBar),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxScrollEvent.erl b/lib/wx/src/gen/wxScrollEvent.erl
index d8b29dfa2d..6a79fd0cdc 100644
--- a/lib/wx/src/gen/wxScrollEvent.erl
+++ b/lib/wx/src/gen/wxScrollEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxScrollWinEvent.erl b/lib/wx/src/gen/wxScrollWinEvent.erl
index a5bfb101f0..4c344a411b 100644
--- a/lib/wx/src/gen/wxScrollWinEvent.erl
+++ b/lib/wx/src/gen/wxScrollWinEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxScrolledWindow.erl b/lib/wx/src/gen/wxScrolledWindow.erl
index 7c807980b4..70bc5adbd9 100644
--- a/lib/wx/src/gen/wxScrolledWindow.erl
+++ b/lib/wx/src/gen/wxScrolledWindow.erl
@@ -99,10 +99,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowwxscrolledwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxScrolledWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {winid, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'winid', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -152,7 +152,7 @@ calcUnscrolledPosition(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowenablescrolling">external documentation</a>.
--spec enableScrolling(This, X_scrolling, Y_scrolling) -> ok when
+-spec enableScrolling(This, X_scrolling, Y_scrolling) -> 'ok' when
This::wxScrolledWindow(), X_scrolling::boolean(), Y_scrolling::boolean().
enableScrolling(#wx_ref{type=ThisT,ref=ThisRef},X_scrolling,Y_scrolling)
when is_boolean(X_scrolling),is_boolean(Y_scrolling) ->
@@ -177,7 +177,7 @@ getViewStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowdopreparedc">external documentation</a>.
--spec doPrepareDC(This, Dc) -> ok when
+-spec doPrepareDC(This, Dc) -> 'ok' when
This::wxScrolledWindow(), Dc::wxDC:wxDC().
doPrepareDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}) ->
?CLASS(ThisT,wxScrolledWindow),
@@ -186,7 +186,7 @@ doPrepareDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}) ->
<<ThisRef:32/?UI,DcRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowpreparedc">external documentation</a>.
--spec prepareDC(This, Dc) -> ok when
+-spec prepareDC(This, Dc) -> 'ok' when
This::wxScrolledWindow(), Dc::wxDC:wxDC().
prepareDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}) ->
?CLASS(ThisT,wxScrolledWindow),
@@ -195,7 +195,7 @@ prepareDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}) ->
<<ThisRef:32/?UI,DcRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowscroll">external documentation</a>.
--spec scroll(This, X, Y) -> ok when
+-spec scroll(This, X, Y) -> 'ok' when
This::wxScrolledWindow(), X::integer(), Y::integer().
scroll(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -204,7 +204,7 @@ scroll(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @equiv setScrollbars(This,PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY, [])
--spec setScrollbars(This, PixelsPerUnitX, PixelsPerUnitY, NoUnitsX, NoUnitsY) -> ok when
+-spec setScrollbars(This, PixelsPerUnitX, PixelsPerUnitY, NoUnitsX, NoUnitsY) -> 'ok' when
This::wxScrolledWindow(), PixelsPerUnitX::integer(), PixelsPerUnitY::integer(), NoUnitsX::integer(), NoUnitsY::integer().
setScrollbars(This,PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY)
@@ -212,11 +212,11 @@ setScrollbars(This,PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY)
setScrollbars(This,PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowsetscrollbars">external documentation</a>.
--spec setScrollbars(This, PixelsPerUnitX, PixelsPerUnitY, NoUnitsX, NoUnitsY, [Option]) -> ok when
+-spec setScrollbars(This, PixelsPerUnitX, PixelsPerUnitY, NoUnitsX, NoUnitsY, [Option]) -> 'ok' when
This::wxScrolledWindow(), PixelsPerUnitX::integer(), PixelsPerUnitY::integer(), NoUnitsX::integer(), NoUnitsY::integer(),
- Option :: {xPos, integer()}
- | {yPos, integer()}
- | {noRefresh, boolean()}.
+ Option :: {'xPos', integer()}
+ | {'yPos', integer()}
+ | {'noRefresh', boolean()}.
setScrollbars(#wx_ref{type=ThisT,ref=ThisRef},PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY, Options)
when is_integer(PixelsPerUnitX),is_integer(PixelsPerUnitY),is_integer(NoUnitsX),is_integer(NoUnitsY),is_list(Options) ->
?CLASS(ThisT,wxScrolledWindow),
@@ -229,7 +229,7 @@ setScrollbars(#wx_ref{type=ThisT,ref=ThisRef},PixelsPerUnitX,PixelsPerUnitY,NoUn
<<ThisRef:32/?UI,PixelsPerUnitX:32/?UI,PixelsPerUnitY:32/?UI,NoUnitsX:32/?UI,NoUnitsY:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowsetscrollrate">external documentation</a>.
--spec setScrollRate(This, Xstep, Ystep) -> ok when
+-spec setScrollRate(This, Xstep, Ystep) -> 'ok' when
This::wxScrolledWindow(), Xstep::integer(), Ystep::integer().
setScrollRate(#wx_ref{type=ThisT,ref=ThisRef},Xstep,Ystep)
when is_integer(Xstep),is_integer(Ystep) ->
@@ -238,7 +238,7 @@ setScrollRate(#wx_ref{type=ThisT,ref=ThisRef},Xstep,Ystep)
<<ThisRef:32/?UI,Xstep:32/?UI,Ystep:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowsettargetwindow">external documentation</a>.
--spec setTargetWindow(This, Target) -> ok when
+-spec setTargetWindow(This, Target) -> 'ok' when
This::wxScrolledWindow(), Target::wxWindow:wxWindow().
setTargetWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=TargetT,ref=TargetRef}) ->
?CLASS(ThisT,wxScrolledWindow),
@@ -247,7 +247,7 @@ setTargetWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=TargetT,ref=TargetR
<<ThisRef:32/?UI,TargetRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxScrolledWindow()) -> ok.
+-spec destroy(This::wxScrolledWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxScrolledWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSetCursorEvent.erl b/lib/wx/src/gen/wxSetCursorEvent.erl
index 0e2fbc5cba..a97cbfb5ae 100644
--- a/lib/wx/src/gen/wxSetCursorEvent.erl
+++ b/lib/wx/src/gen/wxSetCursorEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -77,7 +77,7 @@ hasCursor(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsetcursorevent.html#wxsetcursoreventsetcursor">external documentation</a>.
--spec setCursor(This, Cursor) -> ok when
+-spec setCursor(This, Cursor) -> 'ok' when
This::wxSetCursorEvent(), Cursor::wxCursor:wxCursor().
setCursor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CursorT,ref=CursorRef}) ->
?CLASS(ThisT,wxSetCursorEvent),
diff --git a/lib/wx/src/gen/wxShowEvent.erl b/lib/wx/src/gen/wxShowEvent.erl
index 3723213ebd..c4f37afe7b 100644
--- a/lib/wx/src/gen/wxShowEvent.erl
+++ b/lib/wx/src/gen/wxShowEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,7 +45,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxShowEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxshowevent.html#wxshoweventsetshow">external documentation</a>.
--spec setShow(This, Show) -> ok when
+-spec setShow(This, Show) -> 'ok' when
This::wxShowEvent(), Show::boolean().
setShow(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
diff --git a/lib/wx/src/gen/wxSingleChoiceDialog.erl b/lib/wx/src/gen/wxSingleChoiceDialog.erl
index 641cb2836f..baff296d11 100644
--- a/lib/wx/src/gen/wxSingleChoiceDialog.erl
+++ b/lib/wx/src/gen/wxSingleChoiceDialog.erl
@@ -105,8 +105,8 @@ new(Parent,Message,Caption,Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsinglechoicedialog.html#wxsinglechoicedialogwxsinglechoicedialog">external documentation</a>.
-spec new(Parent, Message, Caption, Choices, [Option]) -> wxSingleChoiceDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message,Caption,Choices, Options)
when is_list(Message),is_list(Caption),is_list(Choices),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -138,7 +138,7 @@ getStringSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsinglechoicedialog.html#wxsinglechoicedialogsetselection">external documentation</a>.
--spec setSelection(This, Sel) -> ok when
+-spec setSelection(This, Sel) -> 'ok' when
This::wxSingleChoiceDialog(), Sel::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},Sel)
when is_integer(Sel) ->
@@ -147,7 +147,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},Sel)
<<ThisRef:32/?UI,Sel:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSingleChoiceDialog()) -> ok.
+-spec destroy(This::wxSingleChoiceDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSingleChoiceDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSizeEvent.erl b/lib/wx/src/gen/wxSizeEvent.erl
index 5bef3a845d..bc881817ad 100644
--- a/lib/wx/src/gen/wxSizeEvent.erl
+++ b/lib/wx/src/gen/wxSizeEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxSizer.erl b/lib/wx/src/gen/wxSizer.erl
index 06f6fa7463..ab357c0846 100644
--- a/lib/wx/src/gen/wxSizer.erl
+++ b/lib/wx/src/gen/wxSizer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -54,10 +54,10 @@ add(This,Window)
%% <br /> Also:<br />
%% add(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()};<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()};<br />
%% (This, Window, Flags) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().<br />
%%
@@ -65,10 +65,10 @@ add(This,Window)
This::wxSizer(), Width::integer(), Height::integer();
(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()};
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()};
(This, Window, Flags) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().
@@ -108,10 +108,10 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},#wx_ref{
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizeradd">external documentation</a>.
-spec add(This, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Width::integer(), Height::integer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
add(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -144,7 +144,7 @@ addStretchSpacer(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizeraddstretchspacer">external documentation</a>.
-spec addStretchSpacer(This, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(),
- Option :: {prop, integer()}.
+ Option :: {'prop', integer()}.
addStretchSpacer(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -163,7 +163,7 @@ calcMin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv clear(This, [])
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxSizer().
clear(This)
@@ -171,9 +171,9 @@ clear(This)
clear(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerclear">external documentation</a>.
--spec clear(This, [Option]) -> ok when
+-spec clear(This, [Option]) -> 'ok' when
This::wxSizer(),
- Option :: {delete_windows, boolean()}.
+ Option :: {'delete_windows', boolean()}.
clear(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -218,7 +218,7 @@ fit(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerfitinside">external documentation</a>.
--spec fitInside(This, Window) -> ok when
+-spec fitInside(This, Window) -> 'ok' when
This::wxSizer(), Window::wxWindow:wxWindow().
fitInside(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSizer),
@@ -256,7 +256,7 @@ getItem(#wx_ref{type=ThisT,ref=ThisRef},Index)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizergetitem">external documentation</a>.
-spec getItem(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {recursive, boolean()}.
+ Option :: {'recursive', boolean()}.
getItem(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -318,7 +318,7 @@ hide(#wx_ref{type=ThisT,ref=ThisRef},Index)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerhide">external documentation</a>.
-spec hide(This, Window, [Option]) -> boolean() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {recursive, boolean()}.
+ Option :: {'recursive', boolean()}.
hide(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -348,10 +348,10 @@ insert(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=ItemT,ref=ItemRef})
%% <br /> Also:<br />
%% insert(This, Index, Window, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Index::integer(), Window::wxWindow:wxWindow() | wxSizer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()};<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()};<br />
%% (This, Index, Window, Flags) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Index::integer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().<br />
%%
@@ -359,10 +359,10 @@ insert(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=ItemT,ref=ItemRef})
This::wxSizer(), Index::integer(), Width::integer(), Height::integer();
(This, Index, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Index::integer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()};
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()};
(This, Index, Window, Flags) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Index::integer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().
@@ -403,10 +403,10 @@ insert(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=WindowT,ref=WindowRef}
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerinsert">external documentation</a>.
-spec insert(This, Index, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Index::integer(), Width::integer(), Height::integer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
insert(#wx_ref{type=ThisT,ref=ThisRef},Index,Width,Height, Options)
when is_integer(Index),is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -439,7 +439,7 @@ insertStretchSpacer(This,Index)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerinsertstretchspacer">external documentation</a>.
-spec insertStretchSpacer(This, Index, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Index::integer(),
- Option :: {prop, integer()}.
+ Option :: {'prop', integer()}.
insertStretchSpacer(#wx_ref{type=ThisT,ref=ThisRef},Index, Options)
when is_integer(Index),is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -475,7 +475,7 @@ isShown(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerlayout">external documentation</a>.
--spec layout(This) -> ok when
+-spec layout(This) -> 'ok' when
This::wxSizer().
layout(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSizer),
@@ -495,10 +495,10 @@ prepend(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
%% <br /> Also:<br />
%% prepend(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()};<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()};<br />
%% (This, Window, Flags) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().<br />
%%
@@ -506,10 +506,10 @@ prepend(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
This::wxSizer(), Width::integer(), Height::integer();
(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()};
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()};
(This, Window, Flags) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().
@@ -549,10 +549,10 @@ prepend(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},#wx_
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerprepend">external documentation</a>.
-spec prepend(This, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Width::integer(), Height::integer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
prepend(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -585,7 +585,7 @@ prependStretchSpacer(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerprependstretchspacer">external documentation</a>.
-spec prependStretchSpacer(This, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(),
- Option :: {prop, integer()}.
+ Option :: {'prop', integer()}.
prependStretchSpacer(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -596,7 +596,7 @@ prependStretchSpacer(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerrecalcsizes">external documentation</a>.
--spec recalcSizes(This) -> ok when
+-spec recalcSizes(This) -> 'ok' when
This::wxSizer().
recalcSizes(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSizer),
@@ -646,7 +646,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=NewitemT,ref=NewitemR
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerreplace">external documentation</a>.
-spec replace(This, Oldwin, Newwin, [Option]) -> boolean() when
This::wxSizer(), Oldwin::wxWindow:wxWindow() | wxSizer(), Newwin::wxWindow:wxWindow() | wxSizer(),
- Option :: {recursive, boolean()}.
+ Option :: {'recursive', boolean()}.
replace(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=OldwinT,ref=OldwinRef},#wx_ref{type=NewwinT,ref=NewwinRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -665,7 +665,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=OldwinT,ref=OldwinRef},#wx_
<<ThisRef:32/?UI,OldwinRef:32/?UI,NewwinRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetdimension">external documentation</a>.
--spec setDimension(This, X, Y, Width, Height) -> ok when
+-spec setDimension(This, X, Y, Width, Height) -> 'ok' when
This::wxSizer(), X::integer(), Y::integer(), Width::integer(), Height::integer().
setDimension(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Width,Height)
when is_integer(X),is_integer(Y),is_integer(Width),is_integer(Height) ->
@@ -674,7 +674,7 @@ setDimension(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Width,Height)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetminsize">external documentation</a>.
--spec setMinSize(This, Size) -> ok when
+-spec setMinSize(This, Size) -> 'ok' when
This::wxSizer(), Size::{W::integer(), H::integer()}.
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -683,7 +683,7 @@ setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetminsize">external documentation</a>.
--spec setMinSize(This, Width, Height) -> ok when
+-spec setMinSize(This, Width, Height) -> 'ok' when
This::wxSizer(), Width::integer(), Height::integer().
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -744,7 +744,7 @@ setItemMinSize(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRe
<<ThisRef:32/?UI,WindowRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetsizehints">external documentation</a>.
--spec setSizeHints(This, Window) -> ok when
+-spec setSizeHints(This, Window) -> 'ok' when
This::wxSizer(), Window::wxWindow:wxWindow().
setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSizer),
@@ -753,7 +753,7 @@ setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetvirtualsizehints">external documentation</a>.
--spec setVirtualSizeHints(This, Window) -> ok when
+-spec setVirtualSizeHints(This, Window) -> 'ok' when
This::wxSizer(), Window::wxWindow:wxWindow().
setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSizer),
@@ -765,14 +765,14 @@ setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=Win
%% <br /> Also:<br />
%% show(This, Window) -> boolean() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer();<br />
-%% (This, Show) -> ok when<br />
+%% (This, Show) -> 'ok' when<br />
%% This::wxSizer(), Show::boolean().<br />
%%
-spec show(This, Index) -> boolean() when
This::wxSizer(), Index::integer();
(This, Window) -> boolean() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer();
- (This, Show) -> ok when
+ (This, Show) -> 'ok' when
This::wxSizer(), Show::boolean().
show(This,Index)
@@ -792,16 +792,16 @@ show(#wx_ref{type=ThisT,ref=ThisRef},Show)
%% <br /> Also:<br />
%% show(This, Window, [Option]) -> boolean() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),<br />
-%% Option :: {show, boolean()}<br />
-%% | {recursive, boolean()}.<br />
+%% Option :: {'show', boolean()}<br />
+%% | {'recursive', boolean()}.<br />
%%
-spec show(This, Index, [Option]) -> boolean() when
This::wxSizer(), Index::integer(),
- Option :: {show, boolean()};
+ Option :: {'show', boolean()};
(This, Window, [Option]) -> boolean() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {show, boolean()}
- | {recursive, boolean()}.
+ Option :: {'show', boolean()}
+ | {'recursive', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef},Index, Options)
when is_integer(Index),is_list(Options) ->
?CLASS(ThisT,wxSizer),
diff --git a/lib/wx/src/gen/wxSizerFlags.erl b/lib/wx/src/gen/wxSizerFlags.erl
index 1cbe38426f..45573446e5 100644
--- a/lib/wx/src/gen/wxSizerFlags.erl
+++ b/lib/wx/src/gen/wxSizerFlags.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizerflags.html#wxsizerflagswxsizerflags">external documentation</a>.
-spec new([Option]) -> wxSizerFlags() when
- Option :: {proportion, integer()}.
+ Option :: {'proportion', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({proportion, Proportion}, Acc) -> [<<1:32/?UI,Proportion:32/?UI>>|Acc];
@@ -73,7 +73,7 @@ border(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizerflags.html#wxsizerflagsborder">external documentation</a>.
-spec border(This, [Option]) -> wxSizerFlags() when
This::wxSizerFlags(),
- Option :: {direction, integer()}.
+ Option :: {'direction', integer()}.
border(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizerFlags),
@@ -142,7 +142,7 @@ right(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSizerFlags()) -> ok.
+-spec destroy(This::wxSizerFlags()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSizerFlags),
wxe_util:destroy(?wxSizerFlags_destroy,Obj),
diff --git a/lib/wx/src/gen/wxSizerItem.erl b/lib/wx/src/gen/wxSizerItem.erl
index 807941df5a..ec21ee85b6 100644
--- a/lib/wx/src/gen/wxSizerItem.erl
+++ b/lib/wx/src/gen/wxSizerItem.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -105,7 +105,7 @@ calcMin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemdeletewindows">external documentation</a>.
--spec deleteWindows(This) -> ok when
+-spec deleteWindows(This) -> 'ok' when
This::wxSizerItem().
deleteWindows(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSizerItem),
@@ -113,7 +113,7 @@ deleteWindows(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemdetachsizer">external documentation</a>.
--spec detachSizer(This) -> ok when
+-spec detachSizer(This) -> 'ok' when
This::wxSizerItem().
detachSizer(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSizerItem),
@@ -249,7 +249,7 @@ isWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetborder">external documentation</a>.
--spec setBorder(This, Border) -> ok when
+-spec setBorder(This, Border) -> 'ok' when
This::wxSizerItem(), Border::integer().
setBorder(#wx_ref{type=ThisT,ref=ThisRef},Border)
when is_integer(Border) ->
@@ -258,7 +258,7 @@ setBorder(#wx_ref{type=ThisT,ref=ThisRef},Border)
<<ThisRef:32/?UI,Border:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetdimension">external documentation</a>.
--spec setDimension(This, Pos, Size) -> ok when
+-spec setDimension(This, Pos, Size) -> 'ok' when
This::wxSizerItem(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}.
setDimension(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY},{SizeW,SizeH})
when is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH) ->
@@ -267,7 +267,7 @@ setDimension(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY},{SizeW,SizeH})
<<ThisRef:32/?UI,PosX:32/?UI,PosY:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetflag">external documentation</a>.
--spec setFlag(This, Flag) -> ok when
+-spec setFlag(This, Flag) -> 'ok' when
This::wxSizerItem(), Flag::integer().
setFlag(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_integer(Flag) ->
@@ -276,7 +276,7 @@ setFlag(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,Flag:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetinitsize">external documentation</a>.
--spec setInitSize(This, X, Y) -> ok when
+-spec setInitSize(This, X, Y) -> 'ok' when
This::wxSizerItem(), X::integer(), Y::integer().
setInitSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -285,7 +285,7 @@ setInitSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetminsize">external documentation</a>.
--spec setMinSize(This, Size) -> ok when
+-spec setMinSize(This, Size) -> 'ok' when
This::wxSizerItem(), Size::{W::integer(), H::integer()}.
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -294,7 +294,7 @@ setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetminsize">external documentation</a>.
--spec setMinSize(This, X, Y) -> ok when
+-spec setMinSize(This, X, Y) -> 'ok' when
This::wxSizerItem(), X::integer(), Y::integer().
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -303,7 +303,7 @@ setMinSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetproportion">external documentation</a>.
--spec setProportion(This, Proportion) -> ok when
+-spec setProportion(This, Proportion) -> 'ok' when
This::wxSizerItem(), Proportion::integer().
setProportion(#wx_ref{type=ThisT,ref=ThisRef},Proportion)
when is_integer(Proportion) ->
@@ -313,12 +313,12 @@ setProportion(#wx_ref{type=ThisT,ref=ThisRef},Proportion)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetratio">external documentation</a>.
%% <br /> Also:<br />
-%% setRatio(This, Size) -> ok when<br />
+%% setRatio(This, Size) -> 'ok' when<br />
%% This::wxSizerItem(), Size::{W::integer(), H::integer()}.<br />
%%
--spec setRatio(This, Ratio) -> ok when
+-spec setRatio(This, Ratio) -> 'ok' when
This::wxSizerItem(), Ratio::number();
- (This, Size) -> ok when
+ (This, Size) -> 'ok' when
This::wxSizerItem(), Size::{W::integer(), H::integer()}.
setRatio(#wx_ref{type=ThisT,ref=ThisRef},Ratio)
when is_number(Ratio) ->
@@ -332,7 +332,7 @@ setRatio(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetratio">external documentation</a>.
--spec setRatio(This, Width, Height) -> ok when
+-spec setRatio(This, Width, Height) -> 'ok' when
This::wxSizerItem(), Width::integer(), Height::integer().
setRatio(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -341,7 +341,7 @@ setRatio(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetsizer">external documentation</a>.
--spec setSizer(This, Sizer) -> ok when
+-spec setSizer(This, Sizer) -> 'ok' when
This::wxSizerItem(), Sizer::wxSizer:wxSizer().
setSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}) ->
?CLASS(ThisT,wxSizerItem),
@@ -350,7 +350,7 @@ setSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}) ->
<<ThisRef:32/?UI,SizerRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetspacer">external documentation</a>.
--spec setSpacer(This, Size) -> ok when
+-spec setSpacer(This, Size) -> 'ok' when
This::wxSizerItem(), Size::{W::integer(), H::integer()}.
setSpacer(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -359,7 +359,7 @@ setSpacer(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetspacer">external documentation</a>.
--spec setSpacer(This, Width, Height) -> ok when
+-spec setSpacer(This, Width, Height) -> 'ok' when
This::wxSizerItem(), Width::integer(), Height::integer().
setSpacer(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -368,7 +368,7 @@ setSpacer(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetwindow">external documentation</a>.
--spec setWindow(This, Window) -> ok when
+-spec setWindow(This, Window) -> 'ok' when
This::wxSizerItem(), Window::wxWindow:wxWindow().
setWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSizerItem),
@@ -377,7 +377,7 @@ setWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) -
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemshow">external documentation</a>.
--spec show(This, Show) -> ok when
+-spec show(This, Show) -> 'ok' when
This::wxSizerItem(), Show::boolean().
show(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -386,7 +386,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef},Show)
<<ThisRef:32/?UI,(wxe_util:from_bool(Show)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSizerItem()) -> ok.
+-spec destroy(This::wxSizerItem()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSizerItem),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSlider.erl b/lib/wx/src/gen/wxSlider.erl
index 02103aed01..a215b3c1d5 100644
--- a/lib/wx/src/gen/wxSlider.erl
+++ b/lib/wx/src/gen/wxSlider.erl
@@ -98,10 +98,10 @@ new(Parent,Id,Value,MinValue,MaxValue)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxsliderwxslider">external documentation</a>.
-spec new(Parent, Id, Value, MinValue, MaxValue, [Option]) -> wxSlider() when
Parent::wxWindow:wxWindow(), Id::integer(), Value::integer(), MinValue::integer(), MaxValue::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Value,MinValue,MaxValue, Options)
when is_integer(Id),is_integer(Value),is_integer(MinValue),is_integer(MaxValue),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -125,10 +125,10 @@ create(This,Parent,Id,Value,MinValue,MaxValue)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidercreate">external documentation</a>.
-spec create(This, Parent, Id, Value, MinValue, MaxValue, [Option]) -> boolean() when
This::wxSlider(), Parent::wxWindow:wxWindow(), Id::integer(), Value::integer(), MinValue::integer(), MaxValue::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Value,MinValue,MaxValue, Options)
when is_integer(Id),is_integer(Value),is_integer(MinValue),is_integer(MaxValue),is_list(Options) ->
?CLASS(ThisT,wxSlider),
@@ -191,7 +191,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetlinesize">external documentation</a>.
--spec setLineSize(This, LineSize) -> ok when
+-spec setLineSize(This, LineSize) -> 'ok' when
This::wxSlider(), LineSize::integer().
setLineSize(#wx_ref{type=ThisT,ref=ThisRef},LineSize)
when is_integer(LineSize) ->
@@ -200,7 +200,7 @@ setLineSize(#wx_ref{type=ThisT,ref=ThisRef},LineSize)
<<ThisRef:32/?UI,LineSize:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetpagesize">external documentation</a>.
--spec setPageSize(This, PageSize) -> ok when
+-spec setPageSize(This, PageSize) -> 'ok' when
This::wxSlider(), PageSize::integer().
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},PageSize)
when is_integer(PageSize) ->
@@ -209,7 +209,7 @@ setPageSize(#wx_ref{type=ThisT,ref=ThisRef},PageSize)
<<ThisRef:32/?UI,PageSize:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetrange">external documentation</a>.
--spec setRange(This, MinValue, MaxValue) -> ok when
+-spec setRange(This, MinValue, MaxValue) -> 'ok' when
This::wxSlider(), MinValue::integer(), MaxValue::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},MinValue,MaxValue)
when is_integer(MinValue),is_integer(MaxValue) ->
@@ -218,7 +218,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},MinValue,MaxValue)
<<ThisRef:32/?UI,MinValue:32/?UI,MaxValue:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetthumblength">external documentation</a>.
--spec setThumbLength(This, LenPixels) -> ok when
+-spec setThumbLength(This, LenPixels) -> 'ok' when
This::wxSlider(), LenPixels::integer().
setThumbLength(#wx_ref{type=ThisT,ref=ThisRef},LenPixels)
when is_integer(LenPixels) ->
@@ -227,7 +227,7 @@ setThumbLength(#wx_ref{type=ThisT,ref=ThisRef},LenPixels)
<<ThisRef:32/?UI,LenPixels:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetvalue">external documentation</a>.
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxSlider(), Value::integer().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_integer(Value) ->
@@ -236,7 +236,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
<<ThisRef:32/?UI,Value:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSlider()) -> ok.
+-spec destroy(This::wxSlider()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSlider),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSpinButton.erl b/lib/wx/src/gen/wxSpinButton.erl
index 82b48f87da..1c8d674d05 100644
--- a/lib/wx/src/gen/wxSpinButton.erl
+++ b/lib/wx/src/gen/wxSpinButton.erl
@@ -97,10 +97,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinbutton.html#wxspinbuttonwxspinbutton">external documentation</a>.
-spec new(Parent, [Option]) -> wxSpinButton() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinbutton.html#wxspinbuttoncreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxSpinButton(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSpinButton),
@@ -166,7 +166,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinbutton.html#wxspinbuttonsetrange">external documentation</a>.
--spec setRange(This, MinVal, MaxVal) -> ok when
+-spec setRange(This, MinVal, MaxVal) -> 'ok' when
This::wxSpinButton(), MinVal::integer(), MaxVal::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},MinVal,MaxVal)
when is_integer(MinVal),is_integer(MaxVal) ->
@@ -175,7 +175,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},MinVal,MaxVal)
<<ThisRef:32/?UI,MinVal:32/?UI,MaxVal:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinbutton.html#wxspinbuttonsetvalue">external documentation</a>.
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxSpinButton(), Value::integer().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_integer(Value) ->
@@ -184,7 +184,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
<<ThisRef:32/?UI,Value:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSpinButton()) -> ok.
+-spec destroy(This::wxSpinButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSpinButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSpinCtrl.erl b/lib/wx/src/gen/wxSpinCtrl.erl
index 89fa971543..f8a46dd146 100644
--- a/lib/wx/src/gen/wxSpinCtrl.erl
+++ b/lib/wx/src/gen/wxSpinCtrl.erl
@@ -97,14 +97,14 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlwxspinctrl">external documentation</a>.
-spec new(Parent, [Option]) -> wxSpinCtrl() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {min, integer()}
- | {max, integer()}
- | {initial, integer()}.
+ Option :: {'id', integer()}
+ | {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'min', integer()}
+ | {'max', integer()}
+ | {'initial', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,14 +132,14 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxSpinCtrl(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {min, integer()}
- | {max, integer()}
- | {initial, integer()}.
+ Option :: {'id', integer()}
+ | {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'min', integer()}
+ | {'max', integer()}
+ | {'initial', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSpinCtrl),
@@ -159,12 +159,12 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlsetvalue">external documentation</a>.
%% <br /> Also:<br />
-%% setValue(This, Text) -> ok when<br />
+%% setValue(This, Text) -> 'ok' when<br />
%% This::wxSpinCtrl(), Text::unicode:chardata().<br />
%%
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxSpinCtrl(), Value::integer();
- (This, Text) -> ok when
+ (This, Text) -> 'ok' when
This::wxSpinCtrl(), Text::unicode:chardata().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_integer(Value) ->
@@ -187,7 +187,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlsetrange">external documentation</a>.
--spec setRange(This, MinVal, MaxVal) -> ok when
+-spec setRange(This, MinVal, MaxVal) -> 'ok' when
This::wxSpinCtrl(), MinVal::integer(), MaxVal::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},MinVal,MaxVal)
when is_integer(MinVal),is_integer(MaxVal) ->
@@ -196,7 +196,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},MinVal,MaxVal)
<<ThisRef:32/?UI,MinVal:32/?UI,MaxVal:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlsetselection">external documentation</a>.
--spec setSelection(This, From, To) -> ok when
+-spec setSelection(This, From, To) -> 'ok' when
This::wxSpinCtrl(), From::integer(), To::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -221,7 +221,7 @@ getMax(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSpinCtrl()) -> ok.
+-spec destroy(This::wxSpinCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSpinCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSpinEvent.erl b/lib/wx/src/gen/wxSpinEvent.erl
index 21ebdd500f..1c99927de7 100644
--- a/lib/wx/src/gen/wxSpinEvent.erl
+++ b/lib/wx/src/gen/wxSpinEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -59,7 +59,7 @@ getPosition(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinevent.html#wxspineventsetposition">external documentation</a>.
--spec setPosition(This, Pos) -> ok when
+-spec setPosition(This, Pos) -> 'ok' when
This::wxSpinEvent(), Pos::integer().
setPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
diff --git a/lib/wx/src/gen/wxSplashScreen.erl b/lib/wx/src/gen/wxSplashScreen.erl
index fad8cfcd8e..3b53e670c1 100644
--- a/lib/wx/src/gen/wxSplashScreen.erl
+++ b/lib/wx/src/gen/wxSplashScreen.erl
@@ -107,9 +107,9 @@ new(Bitmap,SplashStyle,Milliseconds,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplashscreen.html#wxsplashscreenwxsplashscreen">external documentation</a>.
-spec new(Bitmap, SplashStyle, Milliseconds, Parent, Id, [Option]) -> wxSplashScreen() when
Bitmap::wxBitmap:wxBitmap(), SplashStyle::integer(), Milliseconds::integer(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=BitmapT,ref=BitmapRef},SplashStyle,Milliseconds,#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(SplashStyle),is_integer(Milliseconds),is_integer(Id),is_list(Options) ->
?CLASS(BitmapT,wxBitmap),
@@ -139,7 +139,7 @@ getTimeout(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSplashScreen()) -> ok.
+-spec destroy(This::wxSplashScreen()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSplashScreen),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSplitterEvent.erl b/lib/wx/src/gen/wxSplitterEvent.erl
index e8001ec540..87b70b5955 100644
--- a/lib/wx/src/gen/wxSplitterEvent.erl
+++ b/lib/wx/src/gen/wxSplitterEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -83,7 +83,7 @@ getWindowBeingRemoved(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterevent.html#wxsplittereventsetsashposition">external documentation</a>.
--spec setSashPosition(This, Pos) -> ok when
+-spec setSashPosition(This, Pos) -> 'ok' when
This::wxSplitterEvent(), Pos::integer().
setSashPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
diff --git a/lib/wx/src/gen/wxSplitterWindow.erl b/lib/wx/src/gen/wxSplitterWindow.erl
index 7db8dc60c4..f311d5011f 100644
--- a/lib/wx/src/gen/wxSplitterWindow.erl
+++ b/lib/wx/src/gen/wxSplitterWindow.erl
@@ -99,10 +99,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowwxsplitterwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxSplitterWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,10 +126,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxSplitterWindow(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -193,7 +193,7 @@ getWindow2(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowinitialize">external documentation</a>.
--spec initialize(This, Window) -> ok when
+-spec initialize(This, Window) -> 'ok' when
This::wxSplitterWindow(), Window::wxWindow:wxWindow().
initialize(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -220,7 +220,7 @@ replaceWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinOldT,ref=WinOldRef
<<ThisRef:32/?UI,WinOldRef:32/?UI,WinNewRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetsashgravity">external documentation</a>.
--spec setSashGravity(This, Gravity) -> ok when
+-spec setSashGravity(This, Gravity) -> 'ok' when
This::wxSplitterWindow(), Gravity::number().
setSashGravity(#wx_ref{type=ThisT,ref=ThisRef},Gravity)
when is_number(Gravity) ->
@@ -229,7 +229,7 @@ setSashGravity(#wx_ref{type=ThisT,ref=ThisRef},Gravity)
<<ThisRef:32/?UI,0:32,Gravity:64/?F>>).
%% @equiv setSashPosition(This,Position, [])
--spec setSashPosition(This, Position) -> ok when
+-spec setSashPosition(This, Position) -> 'ok' when
This::wxSplitterWindow(), Position::integer().
setSashPosition(This,Position)
@@ -237,9 +237,9 @@ setSashPosition(This,Position)
setSashPosition(This,Position, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetsashposition">external documentation</a>.
--spec setSashPosition(This, Position, [Option]) -> ok when
+-spec setSashPosition(This, Position, [Option]) -> 'ok' when
This::wxSplitterWindow(), Position::integer(),
- Option :: {redraw, boolean()}.
+ Option :: {'redraw', boolean()}.
setSashPosition(#wx_ref{type=ThisT,ref=ThisRef},Position, Options)
when is_integer(Position),is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -250,7 +250,7 @@ setSashPosition(#wx_ref{type=ThisT,ref=ThisRef},Position, Options)
<<ThisRef:32/?UI,Position:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetsashsize">external documentation</a>.
--spec setSashSize(This, Width) -> ok when
+-spec setSashSize(This, Width) -> 'ok' when
This::wxSplitterWindow(), Width::integer().
setSashSize(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -259,7 +259,7 @@ setSashSize(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetminimumpanesize">external documentation</a>.
--spec setMinimumPaneSize(This, Min) -> ok when
+-spec setMinimumPaneSize(This, Min) -> 'ok' when
This::wxSplitterWindow(), Min::integer().
setMinimumPaneSize(#wx_ref{type=ThisT,ref=ThisRef},Min)
when is_integer(Min) ->
@@ -268,7 +268,7 @@ setMinimumPaneSize(#wx_ref{type=ThisT,ref=ThisRef},Min)
<<ThisRef:32/?UI,Min:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetsplitmode">external documentation</a>.
--spec setSplitMode(This, Mode) -> ok when
+-spec setSplitMode(This, Mode) -> 'ok' when
This::wxSplitterWindow(), Mode::integer().
setSplitMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -287,7 +287,7 @@ splitHorizontally(This,Window1,Window2)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsplithorizontally">external documentation</a>.
-spec splitHorizontally(This, Window1, Window2, [Option]) -> boolean() when
This::wxSplitterWindow(), Window1::wxWindow:wxWindow(), Window2::wxWindow:wxWindow(),
- Option :: {sashPosition, integer()}.
+ Option :: {'sashPosition', integer()}.
splitHorizontally(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Window1T,ref=Window1Ref},#wx_ref{type=Window2T,ref=Window2Ref}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -310,7 +310,7 @@ splitVertically(This,Window1,Window2)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsplitvertically">external documentation</a>.
-spec splitVertically(This, Window1, Window2, [Option]) -> boolean() when
This::wxSplitterWindow(), Window1::wxWindow:wxWindow(), Window2::wxWindow:wxWindow(),
- Option :: {sashPosition, integer()}.
+ Option :: {'sashPosition', integer()}.
splitVertically(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Window1T,ref=Window1Ref},#wx_ref{type=Window2T,ref=Window2Ref}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -333,7 +333,7 @@ unsplit(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowunsplit">external documentation</a>.
-spec unsplit(This, [Option]) -> boolean() when
This::wxSplitterWindow(),
- Option :: {toRemove, wxWindow:wxWindow()}.
+ Option :: {'toRemove', wxWindow:wxWindow()}.
unsplit(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -344,7 +344,7 @@ unsplit(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowupdatesize">external documentation</a>.
--spec updateSize(This) -> ok when
+-spec updateSize(This) -> 'ok' when
This::wxSplitterWindow().
updateSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -352,7 +352,7 @@ updateSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSplitterWindow()) -> ok.
+-spec destroy(This::wxSplitterWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSplitterWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticBitmap.erl b/lib/wx/src/gen/wxStaticBitmap.erl
index 4da50262b9..3ef1499a28 100644
--- a/lib/wx/src/gen/wxStaticBitmap.erl
+++ b/lib/wx/src/gen/wxStaticBitmap.erl
@@ -96,9 +96,9 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbitmap.html#wxstaticbitmapwxstaticbitmap">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxStaticBitmap() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::wxBitmap:wxBitmap(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=LabelT,ref=LabelRef}, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -122,9 +122,9 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbitmap.html#wxstaticbitmapcreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxStaticBitmap(), Parent::wxWindow:wxWindow(), Id::integer(), Label::wxBitmap:wxBitmap(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=LabelT,ref=LabelRef}, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxStaticBitmap),
@@ -147,7 +147,7 @@ getBitmap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbitmap.html#wxstaticbitmapsetbitmap">external documentation</a>.
--spec setBitmap(This, Bitmap) -> ok when
+-spec setBitmap(This, Bitmap) -> 'ok' when
This::wxStaticBitmap(), Bitmap::wxBitmap:wxBitmap().
setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) ->
?CLASS(ThisT,wxStaticBitmap),
@@ -156,7 +156,7 @@ setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) -
<<ThisRef:32/?UI,BitmapRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticBitmap()) -> ok.
+-spec destroy(This::wxStaticBitmap()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticBitmap),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticBox.erl b/lib/wx/src/gen/wxStaticBox.erl
index 04584f23b2..46cca3b6f3 100644
--- a/lib/wx/src/gen/wxStaticBox.erl
+++ b/lib/wx/src/gen/wxStaticBox.erl
@@ -96,9 +96,9 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbox.html#wxstaticboxwxstaticbox">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxStaticBox() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -122,9 +122,9 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbox.html#wxstaticboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxStaticBox(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxStaticBox),
@@ -139,7 +139,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,La
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticBox()) -> ok.
+-spec destroy(This::wxStaticBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticBoxSizer.erl b/lib/wx/src/gen/wxStaticBoxSizer.erl
index 9edf495679..2c69cb86b0 100644
--- a/lib/wx/src/gen/wxStaticBoxSizer.erl
+++ b/lib/wx/src/gen/wxStaticBoxSizer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -71,7 +71,7 @@ new(#wx_ref{type=BoxT,ref=BoxRef},Orient)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticboxsizer.html#wxstaticboxsizerwxstaticboxsizer">external documentation</a>.
-spec new(Orient, Win, [Option]) -> wxStaticBoxSizer() when
Orient::integer(), Win::wxWindow:wxWindow(),
- Option :: {label, unicode:chardata()}.
+ Option :: {'label', unicode:chardata()}.
new(Orient,#wx_ref{type=WinT,ref=WinRef}, Options)
when is_integer(Orient),is_list(Options) ->
?CLASS(WinT,wxWindow),
@@ -90,7 +90,7 @@ getStaticBox(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticBoxSizer()) -> ok.
+-spec destroy(This::wxStaticBoxSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticBoxSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticLine.erl b/lib/wx/src/gen/wxStaticLine.erl
index 6d23c5ac3d..94dd339cfc 100644
--- a/lib/wx/src/gen/wxStaticLine.erl
+++ b/lib/wx/src/gen/wxStaticLine.erl
@@ -97,10 +97,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticline.html#wxstaticlinewxstaticline">external documentation</a>.
-spec new(Parent, [Option]) -> wxStaticLine() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticline.html#wxstaticlinecreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxStaticLine(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStaticLine),
@@ -156,7 +156,7 @@ getDefaultSize() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticLine()) -> ok.
+-spec destroy(This::wxStaticLine()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticLine),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticText.erl b/lib/wx/src/gen/wxStaticText.erl
index 635f29a1e8..37d0219bc6 100644
--- a/lib/wx/src/gen/wxStaticText.erl
+++ b/lib/wx/src/gen/wxStaticText.erl
@@ -96,9 +96,9 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatictext.html#wxstatictextwxstatictext">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxStaticText() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -122,9 +122,9 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatictext.html#wxstatictextcreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxStaticText(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxStaticText),
@@ -147,7 +147,7 @@ getLabel(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatictext.html#wxstatictextsetlabel">external documentation</a>.
--spec setLabel(This, Label) -> ok when
+-spec setLabel(This, Label) -> 'ok' when
This::wxStaticText(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
when is_list(Label) ->
@@ -157,7 +157,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
<<ThisRef:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatictext.html#wxstatictextwrap">external documentation</a>.
--spec wrap(This, Width) -> ok when
+-spec wrap(This, Width) -> 'ok' when
This::wxStaticText(), Width::integer().
wrap(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -166,7 +166,7 @@ wrap(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticText()) -> ok.
+-spec destroy(This::wxStaticText()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticText),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStatusBar.erl b/lib/wx/src/gen/wxStatusBar.erl
index 2cd0d4a43e..d0ce65273b 100644
--- a/lib/wx/src/gen/wxStatusBar.erl
+++ b/lib/wx/src/gen/wxStatusBar.erl
@@ -97,8 +97,8 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarwxstatusbar">external documentation</a>.
-spec new(Parent, [Option]) -> wxStatusBar() when
Parent::wxWindow:wxWindow(),
- Option :: {winid, integer()}
- | {style, integer()}.
+ Option :: {'winid', integer()}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -120,8 +120,8 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxStatusBar(), Parent::wxWindow:wxWindow(),
- Option :: {winid, integer()}
- | {style, integer()}.
+ Option :: {'winid', integer()}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -162,7 +162,7 @@ getStatusText(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbargetstatustext">external documentation</a>.
-spec getStatusText(This, [Option]) -> unicode:charlist() when
This::wxStatusBar(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
getStatusText(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -173,7 +173,7 @@ getStatusText(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv popStatusText(This, [])
--spec popStatusText(This) -> ok when
+-spec popStatusText(This) -> 'ok' when
This::wxStatusBar().
popStatusText(This)
@@ -181,9 +181,9 @@ popStatusText(This)
popStatusText(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarpopstatustext">external documentation</a>.
--spec popStatusText(This, [Option]) -> ok when
+-spec popStatusText(This, [Option]) -> 'ok' when
This::wxStatusBar(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
popStatusText(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -194,7 +194,7 @@ popStatusText(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv pushStatusText(This,Text, [])
--spec pushStatusText(This, Text) -> ok when
+-spec pushStatusText(This, Text) -> 'ok' when
This::wxStatusBar(), Text::unicode:chardata().
pushStatusText(This,Text)
@@ -202,9 +202,9 @@ pushStatusText(This,Text)
pushStatusText(This,Text, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarpushstatustext">external documentation</a>.
--spec pushStatusText(This, Text, [Option]) -> ok when
+-spec pushStatusText(This, Text, [Option]) -> 'ok' when
This::wxStatusBar(), Text::unicode:chardata(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
pushStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -216,7 +216,7 @@ pushStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv setFieldsCount(This,Number, [])
--spec setFieldsCount(This, Number) -> ok when
+-spec setFieldsCount(This, Number) -> 'ok' when
This::wxStatusBar(), Number::integer().
setFieldsCount(This,Number)
@@ -224,9 +224,9 @@ setFieldsCount(This,Number)
setFieldsCount(This,Number, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetfieldscount">external documentation</a>.
--spec setFieldsCount(This, Number, [Option]) -> ok when
+-spec setFieldsCount(This, Number, [Option]) -> 'ok' when
This::wxStatusBar(), Number::integer(),
- Option :: {widths, [integer()]}.
+ Option :: {'widths', [integer()]}.
setFieldsCount(#wx_ref{type=ThisT,ref=ThisRef},Number, Options)
when is_integer(Number),is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -238,7 +238,7 @@ setFieldsCount(#wx_ref{type=ThisT,ref=ThisRef},Number, Options)
<<ThisRef:32/?UI,Number:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetminheight">external documentation</a>.
--spec setMinHeight(This, Height) -> ok when
+-spec setMinHeight(This, Height) -> 'ok' when
This::wxStatusBar(), Height::integer().
setMinHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
when is_integer(Height) ->
@@ -247,7 +247,7 @@ setMinHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
<<ThisRef:32/?UI,Height:32/?UI>>).
%% @equiv setStatusText(This,Text, [])
--spec setStatusText(This, Text) -> ok when
+-spec setStatusText(This, Text) -> 'ok' when
This::wxStatusBar(), Text::unicode:chardata().
setStatusText(This,Text)
@@ -255,9 +255,9 @@ setStatusText(This,Text)
setStatusText(This,Text, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetstatustext">external documentation</a>.
--spec setStatusText(This, Text, [Option]) -> ok when
+-spec setStatusText(This, Text, [Option]) -> 'ok' when
This::wxStatusBar(), Text::unicode:chardata(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
setStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -269,7 +269,7 @@ setStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetstatuswidths">external documentation</a>.
--spec setStatusWidths(This, Widths_field) -> ok when
+-spec setStatusWidths(This, Widths_field) -> 'ok' when
This::wxStatusBar(), Widths_field::[integer()].
setStatusWidths(#wx_ref{type=ThisT,ref=ThisRef},Widths_field)
when is_list(Widths_field) ->
@@ -279,7 +279,7 @@ setStatusWidths(#wx_ref{type=ThisT,ref=ThisRef},Widths_field)
(<< <<C:32/?I>> || C <- Widths_field>>)/binary, 0:(((0+length(Widths_field)) rem 2)*32)>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetstatusstyles">external documentation</a>.
--spec setStatusStyles(This, Styles) -> ok when
+-spec setStatusStyles(This, Styles) -> 'ok' when
This::wxStatusBar(), Styles::[integer()].
setStatusStyles(#wx_ref{type=ThisT,ref=ThisRef},Styles)
when is_list(Styles) ->
@@ -289,7 +289,7 @@ setStatusStyles(#wx_ref{type=ThisT,ref=ThisRef},Styles)
(<< <<C:32/?I>> || C <- Styles>>)/binary, 0:(((0+length(Styles)) rem 2)*32)>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStatusBar()) -> ok.
+-spec destroy(This::wxStatusBar()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStatusBar),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStdDialogButtonSizer.erl b/lib/wx/src/gen/wxStdDialogButtonSizer.erl
index 2843eaf98b..70e8981def 100644
--- a/lib/wx/src/gen/wxStdDialogButtonSizer.erl
+++ b/lib/wx/src/gen/wxStdDialogButtonSizer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -57,7 +57,7 @@ new() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizeraddbutton">external documentation</a>.
--spec addButton(This, Button) -> ok when
+-spec addButton(This, Button) -> 'ok' when
This::wxStdDialogButtonSizer(), Button::wxButton:wxButton().
addButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -66,7 +66,7 @@ addButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) -
<<ThisRef:32/?UI,ButtonRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizerrealize">external documentation</a>.
--spec realize(This) -> ok when
+-spec realize(This) -> 'ok' when
This::wxStdDialogButtonSizer().
realize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -74,7 +74,7 @@ realize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizersetaffirmativebutton">external documentation</a>.
--spec setAffirmativeButton(This, Button) -> ok when
+-spec setAffirmativeButton(This, Button) -> 'ok' when
This::wxStdDialogButtonSizer(), Button::wxButton:wxButton().
setAffirmativeButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -83,7 +83,7 @@ setAffirmativeButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=Bu
<<ThisRef:32/?UI,ButtonRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizersetcancelbutton">external documentation</a>.
--spec setCancelButton(This, Button) -> ok when
+-spec setCancelButton(This, Button) -> 'ok' when
This::wxStdDialogButtonSizer(), Button::wxButton:wxButton().
setCancelButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -92,7 +92,7 @@ setCancelButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonR
<<ThisRef:32/?UI,ButtonRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizersetnegativebutton">external documentation</a>.
--spec setNegativeButton(This, Button) -> ok when
+-spec setNegativeButton(This, Button) -> 'ok' when
This::wxStdDialogButtonSizer(), Button::wxButton:wxButton().
setNegativeButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -101,7 +101,7 @@ setNegativeButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=Butto
<<ThisRef:32/?UI,ButtonRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStdDialogButtonSizer()) -> ok.
+-spec destroy(This::wxStdDialogButtonSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStdDialogButtonSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStyledTextCtrl.erl b/lib/wx/src/gen/wxStyledTextCtrl.erl
index 8e629db9ff..15ef728659 100644
--- a/lib/wx/src/gen/wxStyledTextCtrl.erl
+++ b/lib/wx/src/gen/wxStyledTextCtrl.erl
@@ -197,10 +197,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwxstyledtextctrl">external documentation</a>.
-spec new(Parent, [Option]) -> wxStyledTextCtrl() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -224,10 +224,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxStyledTextCtrl(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -242,7 +242,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrladdtext">external documentation</a>.
--spec addText(This, Text) -> ok when
+-spec addText(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
addText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -252,7 +252,7 @@ addText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrladdstyledtext">external documentation</a>.
--spec addStyledText(This, Data) -> ok when
+-spec addStyledText(This, Data) -> 'ok' when
This::wxStyledTextCtrl(), Data::wx:wx_object().
addStyledText(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DataT,ref=DataRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -261,7 +261,7 @@ addStyledText(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DataT,ref=DataRef}) -
<<ThisRef:32/?UI,DataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlinserttext">external documentation</a>.
--spec insertText(This, Pos, Text) -> ok when
+-spec insertText(This, Pos, Text) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer(), Text::unicode:chardata().
insertText(#wx_ref{type=ThisT,ref=ThisRef},Pos,Text)
when is_integer(Pos),is_list(Text) ->
@@ -271,7 +271,7 @@ insertText(#wx_ref{type=ThisT,ref=ThisRef},Pos,Text)
<<ThisRef:32/?UI,Pos:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlclearall">external documentation</a>.
--spec clearAll(This) -> ok when
+-spec clearAll(This) -> 'ok' when
This::wxStyledTextCtrl().
clearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -279,7 +279,7 @@ clearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcleardocumentstyle">external documentation</a>.
--spec clearDocumentStyle(This) -> ok when
+-spec clearDocumentStyle(This) -> 'ok' when
This::wxStyledTextCtrl().
clearDocumentStyle(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -329,7 +329,7 @@ getStyleAt(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlredo">external documentation</a>.
--spec redo(This) -> ok when
+-spec redo(This) -> 'ok' when
This::wxStyledTextCtrl().
redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -337,7 +337,7 @@ redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetundocollection">external documentation</a>.
--spec setUndoCollection(This, CollectUndo) -> ok when
+-spec setUndoCollection(This, CollectUndo) -> 'ok' when
This::wxStyledTextCtrl(), CollectUndo::boolean().
setUndoCollection(#wx_ref{type=ThisT,ref=ThisRef},CollectUndo)
when is_boolean(CollectUndo) ->
@@ -346,7 +346,7 @@ setUndoCollection(#wx_ref{type=ThisT,ref=ThisRef},CollectUndo)
<<ThisRef:32/?UI,(wxe_util:from_bool(CollectUndo)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlselectall">external documentation</a>.
--spec selectAll(This) -> ok when
+-spec selectAll(This) -> 'ok' when
This::wxStyledTextCtrl().
selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -354,7 +354,7 @@ selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetsavepoint">external documentation</a>.
--spec setSavePoint(This) -> ok when
+-spec setSavePoint(This) -> 'ok' when
This::wxStyledTextCtrl().
setSavePoint(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -388,7 +388,7 @@ markerLineFromHandle(#wx_ref{type=ThisT,ref=ThisRef},Handle)
<<ThisRef:32/?UI,Handle:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdeletehandle">external documentation</a>.
--spec markerDeleteHandle(This, Handle) -> ok when
+-spec markerDeleteHandle(This, Handle) -> 'ok' when
This::wxStyledTextCtrl(), Handle::integer().
markerDeleteHandle(#wx_ref{type=ThisT,ref=ThisRef},Handle)
when is_integer(Handle) ->
@@ -413,7 +413,7 @@ getViewWhiteSpace(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetviewwhitespace">external documentation</a>.
--spec setViewWhiteSpace(This, ViewWS) -> ok when
+-spec setViewWhiteSpace(This, ViewWS) -> 'ok' when
This::wxStyledTextCtrl(), ViewWS::integer().
setViewWhiteSpace(#wx_ref{type=ThisT,ref=ThisRef},ViewWS)
when is_integer(ViewWS) ->
@@ -440,7 +440,7 @@ positionFromPointClose(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlgotoline">external documentation</a>.
--spec gotoLine(This, Line) -> ok when
+-spec gotoLine(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
gotoLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -449,7 +449,7 @@ gotoLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlgotopos">external documentation</a>.
--spec gotoPos(This, Pos) -> ok when
+-spec gotoPos(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
gotoPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -458,7 +458,7 @@ gotoPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetanchor">external documentation</a>.
--spec setAnchor(This, PosAnchor) -> ok when
+-spec setAnchor(This, PosAnchor) -> 'ok' when
This::wxStyledTextCtrl(), PosAnchor::integer().
setAnchor(#wx_ref{type=ThisT,ref=ThisRef},PosAnchor)
when is_integer(PosAnchor) ->
@@ -484,7 +484,7 @@ getEndStyled(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlconverteols">external documentation</a>.
--spec convertEOLs(This, EolMode) -> ok when
+-spec convertEOLs(This, EolMode) -> 'ok' when
This::wxStyledTextCtrl(), EolMode::integer().
convertEOLs(#wx_ref{type=ThisT,ref=ThisRef},EolMode)
when is_integer(EolMode) ->
@@ -501,7 +501,7 @@ getEOLMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlseteolmode">external documentation</a>.
--spec setEOLMode(This, EolMode) -> ok when
+-spec setEOLMode(This, EolMode) -> 'ok' when
This::wxStyledTextCtrl(), EolMode::integer().
setEOLMode(#wx_ref{type=ThisT,ref=ThisRef},EolMode)
when is_integer(EolMode) ->
@@ -510,7 +510,7 @@ setEOLMode(#wx_ref{type=ThisT,ref=ThisRef},EolMode)
<<ThisRef:32/?UI,EolMode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstartstyling">external documentation</a>.
--spec startStyling(This, Pos, Mask) -> ok when
+-spec startStyling(This, Pos, Mask) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer(), Mask::integer().
startStyling(#wx_ref{type=ThisT,ref=ThisRef},Pos,Mask)
when is_integer(Pos),is_integer(Mask) ->
@@ -519,7 +519,7 @@ startStyling(#wx_ref{type=ThisT,ref=ThisRef},Pos,Mask)
<<ThisRef:32/?UI,Pos:32/?UI,Mask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetstyling">external documentation</a>.
--spec setStyling(This, Length, Style) -> ok when
+-spec setStyling(This, Length, Style) -> 'ok' when
This::wxStyledTextCtrl(), Length::integer(), Style::integer().
setStyling(#wx_ref{type=ThisT,ref=ThisRef},Length,Style)
when is_integer(Length),is_integer(Style) ->
@@ -536,7 +536,7 @@ getBufferedDraw(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetbuffereddraw">external documentation</a>.
--spec setBufferedDraw(This, Buffered) -> ok when
+-spec setBufferedDraw(This, Buffered) -> 'ok' when
This::wxStyledTextCtrl(), Buffered::boolean().
setBufferedDraw(#wx_ref{type=ThisT,ref=ThisRef},Buffered)
when is_boolean(Buffered) ->
@@ -545,7 +545,7 @@ setBufferedDraw(#wx_ref{type=ThisT,ref=ThisRef},Buffered)
<<ThisRef:32/?UI,(wxe_util:from_bool(Buffered)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettabwidth">external documentation</a>.
--spec setTabWidth(This, TabWidth) -> ok when
+-spec setTabWidth(This, TabWidth) -> 'ok' when
This::wxStyledTextCtrl(), TabWidth::integer().
setTabWidth(#wx_ref{type=ThisT,ref=ThisRef},TabWidth)
when is_integer(TabWidth) ->
@@ -562,7 +562,7 @@ getTabWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcodepage">external documentation</a>.
--spec setCodePage(This, CodePage) -> ok when
+-spec setCodePage(This, CodePage) -> 'ok' when
This::wxStyledTextCtrl(), CodePage::integer().
setCodePage(#wx_ref{type=ThisT,ref=ThisRef},CodePage)
when is_integer(CodePage) ->
@@ -571,7 +571,7 @@ setCodePage(#wx_ref{type=ThisT,ref=ThisRef},CodePage)
<<ThisRef:32/?UI,CodePage:32/?UI>>).
%% @equiv markerDefine(This,MarkerNumber,MarkerSymbol, [])
--spec markerDefine(This, MarkerNumber, MarkerSymbol) -> ok when
+-spec markerDefine(This, MarkerNumber, MarkerSymbol) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), MarkerSymbol::integer().
markerDefine(This,MarkerNumber,MarkerSymbol)
@@ -579,10 +579,10 @@ markerDefine(This,MarkerNumber,MarkerSymbol)
markerDefine(This,MarkerNumber,MarkerSymbol, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdefine">external documentation</a>.
--spec markerDefine(This, MarkerNumber, MarkerSymbol, [Option]) -> ok when
+-spec markerDefine(This, MarkerNumber, MarkerSymbol, [Option]) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), MarkerSymbol::integer(),
- Option :: {foreground, wx:wx_colour()}
- | {background, wx:wx_colour()}.
+ Option :: {'foreground', wx:wx_colour()}
+ | {'background', wx:wx_colour()}.
markerDefine(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,MarkerSymbol, Options)
when is_integer(MarkerNumber),is_integer(MarkerSymbol),is_list(Options) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -594,7 +594,7 @@ markerDefine(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,MarkerSymbol, Options)
<<ThisRef:32/?UI,MarkerNumber:32/?UI,MarkerSymbol:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkersetforeground">external documentation</a>.
--spec markerSetForeground(This, MarkerNumber, Fore) -> ok when
+-spec markerSetForeground(This, MarkerNumber, Fore) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), Fore::wx:wx_colour().
markerSetForeground(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Fore)
when is_integer(MarkerNumber),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -603,7 +603,7 @@ markerSetForeground(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Fore)
<<ThisRef:32/?UI,MarkerNumber:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkersetbackground">external documentation</a>.
--spec markerSetBackground(This, MarkerNumber, Back) -> ok when
+-spec markerSetBackground(This, MarkerNumber, Back) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), Back::wx:wx_colour().
markerSetBackground(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Back)
when is_integer(MarkerNumber),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -621,7 +621,7 @@ markerAdd(#wx_ref{type=ThisT,ref=ThisRef},Line,MarkerNumber)
<<ThisRef:32/?UI,Line:32/?UI,MarkerNumber:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdelete">external documentation</a>.
--spec markerDelete(This, Line, MarkerNumber) -> ok when
+-spec markerDelete(This, Line, MarkerNumber) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), MarkerNumber::integer().
markerDelete(#wx_ref{type=ThisT,ref=ThisRef},Line,MarkerNumber)
when is_integer(Line),is_integer(MarkerNumber) ->
@@ -630,7 +630,7 @@ markerDelete(#wx_ref{type=ThisT,ref=ThisRef},Line,MarkerNumber)
<<ThisRef:32/?UI,Line:32/?UI,MarkerNumber:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdeleteall">external documentation</a>.
--spec markerDeleteAll(This, MarkerNumber) -> ok when
+-spec markerDeleteAll(This, MarkerNumber) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer().
markerDeleteAll(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber)
when is_integer(MarkerNumber) ->
@@ -666,7 +666,7 @@ markerPrevious(#wx_ref{type=ThisT,ref=ThisRef},LineStart,MarkerMask)
<<ThisRef:32/?UI,LineStart:32/?UI,MarkerMask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdefinebitmap">external documentation</a>.
--spec markerDefineBitmap(This, MarkerNumber, Bmp) -> ok when
+-spec markerDefineBitmap(This, MarkerNumber, Bmp) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), Bmp::wxBitmap:wxBitmap().
markerDefineBitmap(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,#wx_ref{type=BmpT,ref=BmpRef})
when is_integer(MarkerNumber) ->
@@ -676,7 +676,7 @@ markerDefineBitmap(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,#wx_ref{type=Bmp
<<ThisRef:32/?UI,MarkerNumber:32/?UI,BmpRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkeraddset">external documentation</a>.
--spec markerAddSet(This, Line, Set) -> ok when
+-spec markerAddSet(This, Line, Set) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), Set::integer().
markerAddSet(#wx_ref{type=ThisT,ref=ThisRef},Line,Set)
when is_integer(Line),is_integer(Set) ->
@@ -685,7 +685,7 @@ markerAddSet(#wx_ref{type=ThisT,ref=ThisRef},Line,Set)
<<ThisRef:32/?UI,Line:32/?UI,Set:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkersetalpha">external documentation</a>.
--spec markerSetAlpha(This, MarkerNumber, Alpha) -> ok when
+-spec markerSetAlpha(This, MarkerNumber, Alpha) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), Alpha::integer().
markerSetAlpha(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Alpha)
when is_integer(MarkerNumber),is_integer(Alpha) ->
@@ -694,7 +694,7 @@ markerSetAlpha(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Alpha)
<<ThisRef:32/?UI,MarkerNumber:32/?UI,Alpha:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmargintype">external documentation</a>.
--spec setMarginType(This, Margin, MarginType) -> ok when
+-spec setMarginType(This, Margin, MarginType) -> 'ok' when
This::wxStyledTextCtrl(), Margin::integer(), MarginType::integer().
setMarginType(#wx_ref{type=ThisT,ref=ThisRef},Margin,MarginType)
when is_integer(Margin),is_integer(MarginType) ->
@@ -712,7 +712,7 @@ getMarginType(#wx_ref{type=ThisT,ref=ThisRef},Margin)
<<ThisRef:32/?UI,Margin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginwidth">external documentation</a>.
--spec setMarginWidth(This, Margin, PixelWidth) -> ok when
+-spec setMarginWidth(This, Margin, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), Margin::integer(), PixelWidth::integer().
setMarginWidth(#wx_ref{type=ThisT,ref=ThisRef},Margin,PixelWidth)
when is_integer(Margin),is_integer(PixelWidth) ->
@@ -730,7 +730,7 @@ getMarginWidth(#wx_ref{type=ThisT,ref=ThisRef},Margin)
<<ThisRef:32/?UI,Margin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginmask">external documentation</a>.
--spec setMarginMask(This, Margin, Mask) -> ok when
+-spec setMarginMask(This, Margin, Mask) -> 'ok' when
This::wxStyledTextCtrl(), Margin::integer(), Mask::integer().
setMarginMask(#wx_ref{type=ThisT,ref=ThisRef},Margin,Mask)
when is_integer(Margin),is_integer(Mask) ->
@@ -748,7 +748,7 @@ getMarginMask(#wx_ref{type=ThisT,ref=ThisRef},Margin)
<<ThisRef:32/?UI,Margin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginsensitive">external documentation</a>.
--spec setMarginSensitive(This, Margin, Sensitive) -> ok when
+-spec setMarginSensitive(This, Margin, Sensitive) -> 'ok' when
This::wxStyledTextCtrl(), Margin::integer(), Sensitive::boolean().
setMarginSensitive(#wx_ref{type=ThisT,ref=ThisRef},Margin,Sensitive)
when is_integer(Margin),is_boolean(Sensitive) ->
@@ -766,7 +766,7 @@ getMarginSensitive(#wx_ref{type=ThisT,ref=ThisRef},Margin)
<<ThisRef:32/?UI,Margin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstyleclearall">external documentation</a>.
--spec styleClearAll(This) -> ok when
+-spec styleClearAll(This) -> 'ok' when
This::wxStyledTextCtrl().
styleClearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -774,7 +774,7 @@ styleClearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetforeground">external documentation</a>.
--spec styleSetForeground(This, Style, Fore) -> ok when
+-spec styleSetForeground(This, Style, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Fore::wx:wx_colour().
styleSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Style,Fore)
when is_integer(Style),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -783,7 +783,7 @@ styleSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Style,Fore)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetbackground">external documentation</a>.
--spec styleSetBackground(This, Style, Back) -> ok when
+-spec styleSetBackground(This, Style, Back) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Back::wx:wx_colour().
styleSetBackground(#wx_ref{type=ThisT,ref=ThisRef},Style,Back)
when is_integer(Style),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -792,7 +792,7 @@ styleSetBackground(#wx_ref{type=ThisT,ref=ThisRef},Style,Back)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetbold">external documentation</a>.
--spec styleSetBold(This, Style, Bold) -> ok when
+-spec styleSetBold(This, Style, Bold) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Bold::boolean().
styleSetBold(#wx_ref{type=ThisT,ref=ThisRef},Style,Bold)
when is_integer(Style),is_boolean(Bold) ->
@@ -801,7 +801,7 @@ styleSetBold(#wx_ref{type=ThisT,ref=ThisRef},Style,Bold)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Bold)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetitalic">external documentation</a>.
--spec styleSetItalic(This, Style, Italic) -> ok when
+-spec styleSetItalic(This, Style, Italic) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Italic::boolean().
styleSetItalic(#wx_ref{type=ThisT,ref=ThisRef},Style,Italic)
when is_integer(Style),is_boolean(Italic) ->
@@ -810,7 +810,7 @@ styleSetItalic(#wx_ref{type=ThisT,ref=ThisRef},Style,Italic)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Italic)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetsize">external documentation</a>.
--spec styleSetSize(This, Style, SizePoints) -> ok when
+-spec styleSetSize(This, Style, SizePoints) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), SizePoints::integer().
styleSetSize(#wx_ref{type=ThisT,ref=ThisRef},Style,SizePoints)
when is_integer(Style),is_integer(SizePoints) ->
@@ -819,7 +819,7 @@ styleSetSize(#wx_ref{type=ThisT,ref=ThisRef},Style,SizePoints)
<<ThisRef:32/?UI,Style:32/?UI,SizePoints:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetfacename">external documentation</a>.
--spec styleSetFaceName(This, Style, FontName) -> ok when
+-spec styleSetFaceName(This, Style, FontName) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), FontName::unicode:chardata().
styleSetFaceName(#wx_ref{type=ThisT,ref=ThisRef},Style,FontName)
when is_integer(Style),is_list(FontName) ->
@@ -829,7 +829,7 @@ styleSetFaceName(#wx_ref{type=ThisT,ref=ThisRef},Style,FontName)
<<ThisRef:32/?UI,Style:32/?UI,(byte_size(FontName_UC)):32/?UI,(FontName_UC)/binary, 0:(((8- ((4+byte_size(FontName_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstyleseteolfilled">external documentation</a>.
--spec styleSetEOLFilled(This, Style, Filled) -> ok when
+-spec styleSetEOLFilled(This, Style, Filled) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Filled::boolean().
styleSetEOLFilled(#wx_ref{type=ThisT,ref=ThisRef},Style,Filled)
when is_integer(Style),is_boolean(Filled) ->
@@ -838,7 +838,7 @@ styleSetEOLFilled(#wx_ref{type=ThisT,ref=ThisRef},Style,Filled)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Filled)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstyleresetdefault">external documentation</a>.
--spec styleResetDefault(This) -> ok when
+-spec styleResetDefault(This) -> 'ok' when
This::wxStyledTextCtrl().
styleResetDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -846,7 +846,7 @@ styleResetDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetunderline">external documentation</a>.
--spec styleSetUnderline(This, Style, Underline) -> ok when
+-spec styleSetUnderline(This, Style, Underline) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Underline::boolean().
styleSetUnderline(#wx_ref{type=ThisT,ref=ThisRef},Style,Underline)
when is_integer(Style),is_boolean(Underline) ->
@@ -855,7 +855,7 @@ styleSetUnderline(#wx_ref{type=ThisT,ref=ThisRef},Style,Underline)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Underline)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetcase">external documentation</a>.
--spec styleSetCase(This, Style, CaseForce) -> ok when
+-spec styleSetCase(This, Style, CaseForce) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), CaseForce::integer().
styleSetCase(#wx_ref{type=ThisT,ref=ThisRef},Style,CaseForce)
when is_integer(Style),is_integer(CaseForce) ->
@@ -864,7 +864,7 @@ styleSetCase(#wx_ref{type=ThisT,ref=ThisRef},Style,CaseForce)
<<ThisRef:32/?UI,Style:32/?UI,CaseForce:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesethotspot">external documentation</a>.
--spec styleSetHotSpot(This, Style, Hotspot) -> ok when
+-spec styleSetHotSpot(This, Style, Hotspot) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Hotspot::boolean().
styleSetHotSpot(#wx_ref{type=ThisT,ref=ThisRef},Style,Hotspot)
when is_integer(Style),is_boolean(Hotspot) ->
@@ -873,7 +873,7 @@ styleSetHotSpot(#wx_ref{type=ThisT,ref=ThisRef},Style,Hotspot)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Hotspot)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselforeground">external documentation</a>.
--spec setSelForeground(This, UseSetting, Fore) -> ok when
+-spec setSelForeground(This, UseSetting, Fore) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Fore::wx:wx_colour().
setSelForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
when is_boolean(UseSetting),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -882,7 +882,7 @@ setSelForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselbackground">external documentation</a>.
--spec setSelBackground(This, UseSetting, Back) -> ok when
+-spec setSelBackground(This, UseSetting, Back) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Back::wx:wx_colour().
setSelBackground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
when is_boolean(UseSetting),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -899,7 +899,7 @@ getSelAlpha(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselalpha">external documentation</a>.
--spec setSelAlpha(This, Alpha) -> ok when
+-spec setSelAlpha(This, Alpha) -> 'ok' when
This::wxStyledTextCtrl(), Alpha::integer().
setSelAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha)
when is_integer(Alpha) ->
@@ -908,7 +908,7 @@ setSelAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha)
<<ThisRef:32/?UI,Alpha:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretforeground">external documentation</a>.
--spec setCaretForeground(This, Fore) -> ok when
+-spec setCaretForeground(This, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Fore::wx:wx_colour().
setCaretForeground(#wx_ref{type=ThisT,ref=ThisRef},Fore)
when tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -917,7 +917,7 @@ setCaretForeground(#wx_ref{type=ThisT,ref=ThisRef},Fore)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcmdkeyassign">external documentation</a>.
--spec cmdKeyAssign(This, Key, Modifiers, Cmd) -> ok when
+-spec cmdKeyAssign(This, Key, Modifiers, Cmd) -> 'ok' when
This::wxStyledTextCtrl(), Key::integer(), Modifiers::integer(), Cmd::integer().
cmdKeyAssign(#wx_ref{type=ThisT,ref=ThisRef},Key,Modifiers,Cmd)
when is_integer(Key),is_integer(Modifiers),is_integer(Cmd) ->
@@ -926,7 +926,7 @@ cmdKeyAssign(#wx_ref{type=ThisT,ref=ThisRef},Key,Modifiers,Cmd)
<<ThisRef:32/?UI,Key:32/?UI,Modifiers:32/?UI,Cmd:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcmdkeyclear">external documentation</a>.
--spec cmdKeyClear(This, Key, Modifiers) -> ok when
+-spec cmdKeyClear(This, Key, Modifiers) -> 'ok' when
This::wxStyledTextCtrl(), Key::integer(), Modifiers::integer().
cmdKeyClear(#wx_ref{type=ThisT,ref=ThisRef},Key,Modifiers)
when is_integer(Key),is_integer(Modifiers) ->
@@ -935,7 +935,7 @@ cmdKeyClear(#wx_ref{type=ThisT,ref=ThisRef},Key,Modifiers)
<<ThisRef:32/?UI,Key:32/?UI,Modifiers:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcmdkeyclearall">external documentation</a>.
--spec cmdKeyClearAll(This) -> ok when
+-spec cmdKeyClearAll(This) -> 'ok' when
This::wxStyledTextCtrl().
cmdKeyClearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -952,7 +952,7 @@ setStyleBytes(#wx_ref{type=ThisT,ref=ThisRef},Length)
<<ThisRef:32/?UI,Length:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetvisible">external documentation</a>.
--spec styleSetVisible(This, Style, Visible) -> ok when
+-spec styleSetVisible(This, Style, Visible) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Visible::boolean().
styleSetVisible(#wx_ref{type=ThisT,ref=ThisRef},Style,Visible)
when is_integer(Style),is_boolean(Visible) ->
@@ -969,7 +969,7 @@ getCaretPeriod(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretperiod">external documentation</a>.
--spec setCaretPeriod(This, PeriodMilliseconds) -> ok when
+-spec setCaretPeriod(This, PeriodMilliseconds) -> 'ok' when
This::wxStyledTextCtrl(), PeriodMilliseconds::integer().
setCaretPeriod(#wx_ref{type=ThisT,ref=ThisRef},PeriodMilliseconds)
when is_integer(PeriodMilliseconds) ->
@@ -978,7 +978,7 @@ setCaretPeriod(#wx_ref{type=ThisT,ref=ThisRef},PeriodMilliseconds)
<<ThisRef:32/?UI,PeriodMilliseconds:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwordchars">external documentation</a>.
--spec setWordChars(This, Characters) -> ok when
+-spec setWordChars(This, Characters) -> 'ok' when
This::wxStyledTextCtrl(), Characters::unicode:chardata().
setWordChars(#wx_ref{type=ThisT,ref=ThisRef},Characters)
when is_list(Characters) ->
@@ -988,7 +988,7 @@ setWordChars(#wx_ref{type=ThisT,ref=ThisRef},Characters)
<<ThisRef:32/?UI,(byte_size(Characters_UC)):32/?UI,(Characters_UC)/binary, 0:(((8- ((0+byte_size(Characters_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlbeginundoaction">external documentation</a>.
--spec beginUndoAction(This) -> ok when
+-spec beginUndoAction(This) -> 'ok' when
This::wxStyledTextCtrl().
beginUndoAction(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -996,7 +996,7 @@ beginUndoAction(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlendundoaction">external documentation</a>.
--spec endUndoAction(This) -> ok when
+-spec endUndoAction(This) -> 'ok' when
This::wxStyledTextCtrl().
endUndoAction(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1004,7 +1004,7 @@ endUndoAction(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlindicatorsetstyle">external documentation</a>.
--spec indicatorSetStyle(This, Indic, Style) -> ok when
+-spec indicatorSetStyle(This, Indic, Style) -> 'ok' when
This::wxStyledTextCtrl(), Indic::integer(), Style::integer().
indicatorSetStyle(#wx_ref{type=ThisT,ref=ThisRef},Indic,Style)
when is_integer(Indic),is_integer(Style) ->
@@ -1022,7 +1022,7 @@ indicatorGetStyle(#wx_ref{type=ThisT,ref=ThisRef},Indic)
<<ThisRef:32/?UI,Indic:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlindicatorsetforeground">external documentation</a>.
--spec indicatorSetForeground(This, Indic, Fore) -> ok when
+-spec indicatorSetForeground(This, Indic, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Indic::integer(), Fore::wx:wx_colour().
indicatorSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Indic,Fore)
when is_integer(Indic),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -1040,7 +1040,7 @@ indicatorGetForeground(#wx_ref{type=ThisT,ref=ThisRef},Indic)
<<ThisRef:32/?UI,Indic:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwhitespaceforeground">external documentation</a>.
--spec setWhitespaceForeground(This, UseSetting, Fore) -> ok when
+-spec setWhitespaceForeground(This, UseSetting, Fore) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Fore::wx:wx_colour().
setWhitespaceForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
when is_boolean(UseSetting),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -1049,7 +1049,7 @@ setWhitespaceForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwhitespacebackground">external documentation</a>.
--spec setWhitespaceBackground(This, UseSetting, Back) -> ok when
+-spec setWhitespaceBackground(This, UseSetting, Back) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Back::wx:wx_colour().
setWhitespaceBackground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
when is_boolean(UseSetting),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -1066,7 +1066,7 @@ getStyleBits(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlinestate">external documentation</a>.
--spec setLineState(This, Line, State) -> ok when
+-spec setLineState(This, Line, State) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), State::integer().
setLineState(#wx_ref{type=ThisT,ref=ThisRef},Line,State)
when is_integer(Line),is_integer(State) ->
@@ -1100,7 +1100,7 @@ getCaretLineVisible(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretlinevisible">external documentation</a>.
--spec setCaretLineVisible(This, Show) -> ok when
+-spec setCaretLineVisible(This, Show) -> 'ok' when
This::wxStyledTextCtrl(), Show::boolean().
setCaretLineVisible(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -1117,7 +1117,7 @@ getCaretLineBackground(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretlinebackground">external documentation</a>.
--spec setCaretLineBackground(This, Back) -> ok when
+-spec setCaretLineBackground(This, Back) -> 'ok' when
This::wxStyledTextCtrl(), Back::wx:wx_colour().
setCaretLineBackground(#wx_ref{type=ThisT,ref=ThisRef},Back)
when tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -1126,7 +1126,7 @@ setCaretLineBackground(#wx_ref{type=ThisT,ref=ThisRef},Back)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompshow">external documentation</a>.
--spec autoCompShow(This, LenEntered, ItemList) -> ok when
+-spec autoCompShow(This, LenEntered, ItemList) -> 'ok' when
This::wxStyledTextCtrl(), LenEntered::integer(), ItemList::unicode:chardata().
autoCompShow(#wx_ref{type=ThisT,ref=ThisRef},LenEntered,ItemList)
when is_integer(LenEntered),is_list(ItemList) ->
@@ -1136,7 +1136,7 @@ autoCompShow(#wx_ref{type=ThisT,ref=ThisRef},LenEntered,ItemList)
<<ThisRef:32/?UI,LenEntered:32/?UI,(byte_size(ItemList_UC)):32/?UI,(ItemList_UC)/binary, 0:(((8- ((4+byte_size(ItemList_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompcancel">external documentation</a>.
--spec autoCompCancel(This) -> ok when
+-spec autoCompCancel(This) -> 'ok' when
This::wxStyledTextCtrl().
autoCompCancel(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1160,7 +1160,7 @@ autoCompPosStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompcomplete">external documentation</a>.
--spec autoCompComplete(This) -> ok when
+-spec autoCompComplete(This) -> 'ok' when
This::wxStyledTextCtrl().
autoCompComplete(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1168,7 +1168,7 @@ autoCompComplete(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompstops">external documentation</a>.
--spec autoCompStops(This, CharacterSet) -> ok when
+-spec autoCompStops(This, CharacterSet) -> 'ok' when
This::wxStyledTextCtrl(), CharacterSet::unicode:chardata().
autoCompStops(#wx_ref{type=ThisT,ref=ThisRef},CharacterSet)
when is_list(CharacterSet) ->
@@ -1178,7 +1178,7 @@ autoCompStops(#wx_ref{type=ThisT,ref=ThisRef},CharacterSet)
<<ThisRef:32/?UI,(byte_size(CharacterSet_UC)):32/?UI,(CharacterSet_UC)/binary, 0:(((8- ((0+byte_size(CharacterSet_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetseparator">external documentation</a>.
--spec autoCompSetSeparator(This, SeparatorCharacter) -> ok when
+-spec autoCompSetSeparator(This, SeparatorCharacter) -> 'ok' when
This::wxStyledTextCtrl(), SeparatorCharacter::integer().
autoCompSetSeparator(#wx_ref{type=ThisT,ref=ThisRef},SeparatorCharacter)
when is_integer(SeparatorCharacter) ->
@@ -1195,7 +1195,7 @@ autoCompGetSeparator(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompselect">external documentation</a>.
--spec autoCompSelect(This, Text) -> ok when
+-spec autoCompSelect(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
autoCompSelect(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -1205,7 +1205,7 @@ autoCompSelect(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetcancelatstart">external documentation</a>.
--spec autoCompSetCancelAtStart(This, Cancel) -> ok when
+-spec autoCompSetCancelAtStart(This, Cancel) -> 'ok' when
This::wxStyledTextCtrl(), Cancel::boolean().
autoCompSetCancelAtStart(#wx_ref{type=ThisT,ref=ThisRef},Cancel)
when is_boolean(Cancel) ->
@@ -1222,7 +1222,7 @@ autoCompGetCancelAtStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetfillups">external documentation</a>.
--spec autoCompSetFillUps(This, CharacterSet) -> ok when
+-spec autoCompSetFillUps(This, CharacterSet) -> 'ok' when
This::wxStyledTextCtrl(), CharacterSet::unicode:chardata().
autoCompSetFillUps(#wx_ref{type=ThisT,ref=ThisRef},CharacterSet)
when is_list(CharacterSet) ->
@@ -1232,7 +1232,7 @@ autoCompSetFillUps(#wx_ref{type=ThisT,ref=ThisRef},CharacterSet)
<<ThisRef:32/?UI,(byte_size(CharacterSet_UC)):32/?UI,(CharacterSet_UC)/binary, 0:(((8- ((0+byte_size(CharacterSet_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetchoosesingle">external documentation</a>.
--spec autoCompSetChooseSingle(This, ChooseSingle) -> ok when
+-spec autoCompSetChooseSingle(This, ChooseSingle) -> 'ok' when
This::wxStyledTextCtrl(), ChooseSingle::boolean().
autoCompSetChooseSingle(#wx_ref{type=ThisT,ref=ThisRef},ChooseSingle)
when is_boolean(ChooseSingle) ->
@@ -1249,7 +1249,7 @@ autoCompGetChooseSingle(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetignorecase">external documentation</a>.
--spec autoCompSetIgnoreCase(This, IgnoreCase) -> ok when
+-spec autoCompSetIgnoreCase(This, IgnoreCase) -> 'ok' when
This::wxStyledTextCtrl(), IgnoreCase::boolean().
autoCompSetIgnoreCase(#wx_ref{type=ThisT,ref=ThisRef},IgnoreCase)
when is_boolean(IgnoreCase) ->
@@ -1266,7 +1266,7 @@ autoCompGetIgnoreCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrluserlistshow">external documentation</a>.
--spec userListShow(This, ListType, ItemList) -> ok when
+-spec userListShow(This, ListType, ItemList) -> 'ok' when
This::wxStyledTextCtrl(), ListType::integer(), ItemList::unicode:chardata().
userListShow(#wx_ref{type=ThisT,ref=ThisRef},ListType,ItemList)
when is_integer(ListType),is_list(ItemList) ->
@@ -1276,7 +1276,7 @@ userListShow(#wx_ref{type=ThisT,ref=ThisRef},ListType,ItemList)
<<ThisRef:32/?UI,ListType:32/?UI,(byte_size(ItemList_UC)):32/?UI,(ItemList_UC)/binary, 0:(((8- ((4+byte_size(ItemList_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetautohide">external documentation</a>.
--spec autoCompSetAutoHide(This, AutoHide) -> ok when
+-spec autoCompSetAutoHide(This, AutoHide) -> 'ok' when
This::wxStyledTextCtrl(), AutoHide::boolean().
autoCompSetAutoHide(#wx_ref{type=ThisT,ref=ThisRef},AutoHide)
when is_boolean(AutoHide) ->
@@ -1293,7 +1293,7 @@ autoCompGetAutoHide(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetdroprestofword">external documentation</a>.
--spec autoCompSetDropRestOfWord(This, DropRestOfWord) -> ok when
+-spec autoCompSetDropRestOfWord(This, DropRestOfWord) -> 'ok' when
This::wxStyledTextCtrl(), DropRestOfWord::boolean().
autoCompSetDropRestOfWord(#wx_ref{type=ThisT,ref=ThisRef},DropRestOfWord)
when is_boolean(DropRestOfWord) ->
@@ -1310,7 +1310,7 @@ autoCompGetDropRestOfWord(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlregisterimage">external documentation</a>.
--spec registerImage(This, Type, Bmp) -> ok when
+-spec registerImage(This, Type, Bmp) -> 'ok' when
This::wxStyledTextCtrl(), Type::integer(), Bmp::wxBitmap:wxBitmap().
registerImage(#wx_ref{type=ThisT,ref=ThisRef},Type,#wx_ref{type=BmpT,ref=BmpRef})
when is_integer(Type) ->
@@ -1320,7 +1320,7 @@ registerImage(#wx_ref{type=ThisT,ref=ThisRef},Type,#wx_ref{type=BmpT,ref=BmpRef}
<<ThisRef:32/?UI,Type:32/?UI,BmpRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlclearregisteredimages">external documentation</a>.
--spec clearRegisteredImages(This) -> ok when
+-spec clearRegisteredImages(This) -> 'ok' when
This::wxStyledTextCtrl().
clearRegisteredImages(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1336,7 +1336,7 @@ autoCompGetTypeSeparator(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsettypeseparator">external documentation</a>.
--spec autoCompSetTypeSeparator(This, SeparatorCharacter) -> ok when
+-spec autoCompSetTypeSeparator(This, SeparatorCharacter) -> 'ok' when
This::wxStyledTextCtrl(), SeparatorCharacter::integer().
autoCompSetTypeSeparator(#wx_ref{type=ThisT,ref=ThisRef},SeparatorCharacter)
when is_integer(SeparatorCharacter) ->
@@ -1345,7 +1345,7 @@ autoCompSetTypeSeparator(#wx_ref{type=ThisT,ref=ThisRef},SeparatorCharacter)
<<ThisRef:32/?UI,SeparatorCharacter:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetmaxwidth">external documentation</a>.
--spec autoCompSetMaxWidth(This, CharacterCount) -> ok when
+-spec autoCompSetMaxWidth(This, CharacterCount) -> 'ok' when
This::wxStyledTextCtrl(), CharacterCount::integer().
autoCompSetMaxWidth(#wx_ref{type=ThisT,ref=ThisRef},CharacterCount)
when is_integer(CharacterCount) ->
@@ -1362,7 +1362,7 @@ autoCompGetMaxWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetmaxheight">external documentation</a>.
--spec autoCompSetMaxHeight(This, RowCount) -> ok when
+-spec autoCompSetMaxHeight(This, RowCount) -> 'ok' when
This::wxStyledTextCtrl(), RowCount::integer().
autoCompSetMaxHeight(#wx_ref{type=ThisT,ref=ThisRef},RowCount)
when is_integer(RowCount) ->
@@ -1379,7 +1379,7 @@ autoCompGetMaxHeight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetindent">external documentation</a>.
--spec setIndent(This, IndentSize) -> ok when
+-spec setIndent(This, IndentSize) -> 'ok' when
This::wxStyledTextCtrl(), IndentSize::integer().
setIndent(#wx_ref{type=ThisT,ref=ThisRef},IndentSize)
when is_integer(IndentSize) ->
@@ -1396,7 +1396,7 @@ getIndent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetusetabs">external documentation</a>.
--spec setUseTabs(This, UseTabs) -> ok when
+-spec setUseTabs(This, UseTabs) -> 'ok' when
This::wxStyledTextCtrl(), UseTabs::boolean().
setUseTabs(#wx_ref{type=ThisT,ref=ThisRef},UseTabs)
when is_boolean(UseTabs) ->
@@ -1413,7 +1413,7 @@ getUseTabs(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlineindentation">external documentation</a>.
--spec setLineIndentation(This, Line, IndentSize) -> ok when
+-spec setLineIndentation(This, Line, IndentSize) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), IndentSize::integer().
setLineIndentation(#wx_ref{type=ThisT,ref=ThisRef},Line,IndentSize)
when is_integer(Line),is_integer(IndentSize) ->
@@ -1449,7 +1449,7 @@ getColumn(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetusehorizontalscrollbar">external documentation</a>.
--spec setUseHorizontalScrollBar(This, Show) -> ok when
+-spec setUseHorizontalScrollBar(This, Show) -> 'ok' when
This::wxStyledTextCtrl(), Show::boolean().
setUseHorizontalScrollBar(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -1466,7 +1466,7 @@ getUseHorizontalScrollBar(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetindentationguides">external documentation</a>.
--spec setIndentationGuides(This, Show) -> ok when
+-spec setIndentationGuides(This, Show) -> 'ok' when
This::wxStyledTextCtrl(), Show::boolean().
setIndentationGuides(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -1483,7 +1483,7 @@ getIndentationGuides(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethighlightguide">external documentation</a>.
--spec setHighlightGuide(This, Column) -> ok when
+-spec setHighlightGuide(This, Column) -> 'ok' when
This::wxStyledTextCtrl(), Column::integer().
setHighlightGuide(#wx_ref{type=ThisT,ref=ThisRef},Column)
when is_integer(Column) ->
@@ -1533,7 +1533,7 @@ getReadOnly(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcurrentpos">external documentation</a>.
--spec setCurrentPos(This, Pos) -> ok when
+-spec setCurrentPos(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setCurrentPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1542,7 +1542,7 @@ setCurrentPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselectionstart">external documentation</a>.
--spec setSelectionStart(This, Pos) -> ok when
+-spec setSelectionStart(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setSelectionStart(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1559,7 +1559,7 @@ getSelectionStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselectionend">external documentation</a>.
--spec setSelectionEnd(This, Pos) -> ok when
+-spec setSelectionEnd(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setSelectionEnd(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1576,7 +1576,7 @@ getSelectionEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetprintmagnification">external documentation</a>.
--spec setPrintMagnification(This, Magnification) -> ok when
+-spec setPrintMagnification(This, Magnification) -> 'ok' when
This::wxStyledTextCtrl(), Magnification::integer().
setPrintMagnification(#wx_ref{type=ThisT,ref=ThisRef},Magnification)
when is_integer(Magnification) ->
@@ -1593,7 +1593,7 @@ getPrintMagnification(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetprintcolourmode">external documentation</a>.
--spec setPrintColourMode(This, Mode) -> ok when
+-spec setPrintColourMode(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setPrintColourMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -1620,7 +1620,7 @@ findText(This,MinPos,MaxPos,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlfindtext">external documentation</a>.
-spec findText(This, MinPos, MaxPos, Text, [Option]) -> integer() when
This::wxStyledTextCtrl(), MinPos::integer(), MaxPos::integer(), Text::unicode:chardata(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
findText(#wx_ref{type=ThisT,ref=ThisRef},MinPos,MaxPos,Text, Options)
when is_integer(MinPos),is_integer(MaxPos),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1668,7 +1668,7 @@ getLineCount(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginleft">external documentation</a>.
--spec setMarginLeft(This, PixelWidth) -> ok when
+-spec setMarginLeft(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
setMarginLeft(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -1685,7 +1685,7 @@ getMarginLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginright">external documentation</a>.
--spec setMarginRight(This, PixelWidth) -> ok when
+-spec setMarginRight(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
setMarginRight(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -1710,7 +1710,7 @@ getModify(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselection">external documentation</a>.
--spec setSelection(This, Start, End) -> ok when
+-spec setSelection(This, Start, End) -> 'ok' when
This::wxStyledTextCtrl(), Start::integer(), End::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
when is_integer(Start),is_integer(End) ->
@@ -1736,7 +1736,7 @@ getTextRange(#wx_ref{type=ThisT,ref=ThisRef},StartPos,EndPos)
<<ThisRef:32/?UI,StartPos:32/?UI,EndPos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhideselection">external documentation</a>.
--spec hideSelection(This, Normal) -> ok when
+-spec hideSelection(This, Normal) -> 'ok' when
This::wxStyledTextCtrl(), Normal::boolean().
hideSelection(#wx_ref{type=ThisT,ref=ThisRef},Normal)
when is_boolean(Normal) ->
@@ -1763,7 +1763,7 @@ positionFromLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinescroll">external documentation</a>.
--spec lineScroll(This, Columns, Lines) -> ok when
+-spec lineScroll(This, Columns, Lines) -> 'ok' when
This::wxStyledTextCtrl(), Columns::integer(), Lines::integer().
lineScroll(#wx_ref{type=ThisT,ref=ThisRef},Columns,Lines)
when is_integer(Columns),is_integer(Lines) ->
@@ -1772,7 +1772,7 @@ lineScroll(#wx_ref{type=ThisT,ref=ThisRef},Columns,Lines)
<<ThisRef:32/?UI,Columns:32/?UI,Lines:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlensurecaretvisible">external documentation</a>.
--spec ensureCaretVisible(This) -> ok when
+-spec ensureCaretVisible(This) -> 'ok' when
This::wxStyledTextCtrl().
ensureCaretVisible(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1780,7 +1780,7 @@ ensureCaretVisible(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlreplaceselection">external documentation</a>.
--spec replaceSelection(This, Text) -> ok when
+-spec replaceSelection(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
replaceSelection(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -1790,7 +1790,7 @@ replaceSelection(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetreadonly">external documentation</a>.
--spec setReadOnly(This, ReadOnly) -> ok when
+-spec setReadOnly(This, ReadOnly) -> 'ok' when
This::wxStyledTextCtrl(), ReadOnly::boolean().
setReadOnly(#wx_ref{type=ThisT,ref=ThisRef},ReadOnly)
when is_boolean(ReadOnly) ->
@@ -1815,7 +1815,7 @@ canUndo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlemptyundobuffer">external documentation</a>.
--spec emptyUndoBuffer(This) -> ok when
+-spec emptyUndoBuffer(This) -> 'ok' when
This::wxStyledTextCtrl().
emptyUndoBuffer(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1823,7 +1823,7 @@ emptyUndoBuffer(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlundo">external documentation</a>.
--spec undo(This) -> ok when
+-spec undo(This) -> 'ok' when
This::wxStyledTextCtrl().
undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1831,7 +1831,7 @@ undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcut">external documentation</a>.
--spec cut(This) -> ok when
+-spec cut(This) -> 'ok' when
This::wxStyledTextCtrl().
cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1839,7 +1839,7 @@ cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcopy">external documentation</a>.
--spec copy(This) -> ok when
+-spec copy(This) -> 'ok' when
This::wxStyledTextCtrl().
copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1847,7 +1847,7 @@ copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpaste">external documentation</a>.
--spec paste(This) -> ok when
+-spec paste(This) -> 'ok' when
This::wxStyledTextCtrl().
paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1855,7 +1855,7 @@ paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxStyledTextCtrl().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1863,7 +1863,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettext">external documentation</a>.
--spec setText(This, Text) -> ok when
+-spec setText(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -1897,7 +1897,7 @@ getOvertype(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretwidth">external documentation</a>.
--spec setCaretWidth(This, PixelWidth) -> ok when
+-spec setCaretWidth(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
setCaretWidth(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -1914,7 +1914,7 @@ getCaretWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettargetstart">external documentation</a>.
--spec setTargetStart(This, Pos) -> ok when
+-spec setTargetStart(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setTargetStart(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1931,7 +1931,7 @@ getTargetStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettargetend">external documentation</a>.
--spec setTargetEnd(This, Pos) -> ok when
+-spec setTargetEnd(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setTargetEnd(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1968,7 +1968,7 @@ searchInTarget(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetsearchflags">external documentation</a>.
--spec setSearchFlags(This, Flags) -> ok when
+-spec setSearchFlags(This, Flags) -> 'ok' when
This::wxStyledTextCtrl(), Flags::integer().
setSearchFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -1985,7 +1985,7 @@ getSearchFlags(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipshow">external documentation</a>.
--spec callTipShow(This, Pos, Definition) -> ok when
+-spec callTipShow(This, Pos, Definition) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer(), Definition::unicode:chardata().
callTipShow(#wx_ref{type=ThisT,ref=ThisRef},Pos,Definition)
when is_integer(Pos),is_list(Definition) ->
@@ -1995,7 +1995,7 @@ callTipShow(#wx_ref{type=ThisT,ref=ThisRef},Pos,Definition)
<<ThisRef:32/?UI,Pos:32/?UI,(byte_size(Definition_UC)):32/?UI,(Definition_UC)/binary, 0:(((8- ((4+byte_size(Definition_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipcancel">external documentation</a>.
--spec callTipCancel(This) -> ok when
+-spec callTipCancel(This) -> 'ok' when
This::wxStyledTextCtrl().
callTipCancel(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2019,7 +2019,7 @@ callTipPosAtStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipsethighlight">external documentation</a>.
--spec callTipSetHighlight(This, Start, End) -> ok when
+-spec callTipSetHighlight(This, Start, End) -> 'ok' when
This::wxStyledTextCtrl(), Start::integer(), End::integer().
callTipSetHighlight(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
when is_integer(Start),is_integer(End) ->
@@ -2028,7 +2028,7 @@ callTipSetHighlight(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
<<ThisRef:32/?UI,Start:32/?UI,End:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipsetbackground">external documentation</a>.
--spec callTipSetBackground(This, Back) -> ok when
+-spec callTipSetBackground(This, Back) -> 'ok' when
This::wxStyledTextCtrl(), Back::wx:wx_colour().
callTipSetBackground(#wx_ref{type=ThisT,ref=ThisRef},Back)
when tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -2037,7 +2037,7 @@ callTipSetBackground(#wx_ref{type=ThisT,ref=ThisRef},Back)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipsetforeground">external documentation</a>.
--spec callTipSetForeground(This, Fore) -> ok when
+-spec callTipSetForeground(This, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Fore::wx:wx_colour().
callTipSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Fore)
when tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -2046,7 +2046,7 @@ callTipSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Fore)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipsetforegroundhighlight">external documentation</a>.
--spec callTipSetForegroundHighlight(This, Fore) -> ok when
+-spec callTipSetForegroundHighlight(This, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Fore::wx:wx_colour().
callTipSetForegroundHighlight(#wx_ref{type=ThisT,ref=ThisRef},Fore)
when tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -2055,7 +2055,7 @@ callTipSetForegroundHighlight(#wx_ref{type=ThisT,ref=ThisRef},Fore)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipusestyle">external documentation</a>.
--spec callTipUseStyle(This, TabSize) -> ok when
+-spec callTipUseStyle(This, TabSize) -> 'ok' when
This::wxStyledTextCtrl(), TabSize::integer().
callTipUseStyle(#wx_ref{type=ThisT,ref=ThisRef},TabSize)
when is_integer(TabSize) ->
@@ -2091,7 +2091,7 @@ wrapCount(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldlevel">external documentation</a>.
--spec setFoldLevel(This, Line, Level) -> ok when
+-spec setFoldLevel(This, Line, Level) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), Level::integer().
setFoldLevel(#wx_ref{type=ThisT,ref=ThisRef},Line,Level)
when is_integer(Line),is_integer(Level) ->
@@ -2127,7 +2127,7 @@ getFoldParent(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlshowlines">external documentation</a>.
--spec showLines(This, LineStart, LineEnd) -> ok when
+-spec showLines(This, LineStart, LineEnd) -> 'ok' when
This::wxStyledTextCtrl(), LineStart::integer(), LineEnd::integer().
showLines(#wx_ref{type=ThisT,ref=ThisRef},LineStart,LineEnd)
when is_integer(LineStart),is_integer(LineEnd) ->
@@ -2136,7 +2136,7 @@ showLines(#wx_ref{type=ThisT,ref=ThisRef},LineStart,LineEnd)
<<ThisRef:32/?UI,LineStart:32/?UI,LineEnd:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhidelines">external documentation</a>.
--spec hideLines(This, LineStart, LineEnd) -> ok when
+-spec hideLines(This, LineStart, LineEnd) -> 'ok' when
This::wxStyledTextCtrl(), LineStart::integer(), LineEnd::integer().
hideLines(#wx_ref{type=ThisT,ref=ThisRef},LineStart,LineEnd)
when is_integer(LineStart),is_integer(LineEnd) ->
@@ -2154,7 +2154,7 @@ getLineVisible(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldexpanded">external documentation</a>.
--spec setFoldExpanded(This, Line, Expanded) -> ok when
+-spec setFoldExpanded(This, Line, Expanded) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), Expanded::boolean().
setFoldExpanded(#wx_ref{type=ThisT,ref=ThisRef},Line,Expanded)
when is_integer(Line),is_boolean(Expanded) ->
@@ -2172,7 +2172,7 @@ getFoldExpanded(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrltogglefold">external documentation</a>.
--spec toggleFold(This, Line) -> ok when
+-spec toggleFold(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
toggleFold(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -2181,7 +2181,7 @@ toggleFold(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlensurevisible">external documentation</a>.
--spec ensureVisible(This, Line) -> ok when
+-spec ensureVisible(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
ensureVisible(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -2190,7 +2190,7 @@ ensureVisible(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldflags">external documentation</a>.
--spec setFoldFlags(This, Flags) -> ok when
+-spec setFoldFlags(This, Flags) -> 'ok' when
This::wxStyledTextCtrl(), Flags::integer().
setFoldFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -2199,7 +2199,7 @@ setFoldFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlensurevisibleenforcepolicy">external documentation</a>.
--spec ensureVisibleEnforcePolicy(This, Line) -> ok when
+-spec ensureVisibleEnforcePolicy(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
ensureVisibleEnforcePolicy(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -2208,7 +2208,7 @@ ensureVisibleEnforcePolicy(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettabindents">external documentation</a>.
--spec setTabIndents(This, TabIndents) -> ok when
+-spec setTabIndents(This, TabIndents) -> 'ok' when
This::wxStyledTextCtrl(), TabIndents::boolean().
setTabIndents(#wx_ref{type=ThisT,ref=ThisRef},TabIndents)
when is_boolean(TabIndents) ->
@@ -2225,7 +2225,7 @@ getTabIndents(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetbackspaceunindents">external documentation</a>.
--spec setBackSpaceUnIndents(This, BsUnIndents) -> ok when
+-spec setBackSpaceUnIndents(This, BsUnIndents) -> 'ok' when
This::wxStyledTextCtrl(), BsUnIndents::boolean().
setBackSpaceUnIndents(#wx_ref{type=ThisT,ref=ThisRef},BsUnIndents)
when is_boolean(BsUnIndents) ->
@@ -2242,7 +2242,7 @@ getBackSpaceUnIndents(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmousedwelltime">external documentation</a>.
--spec setMouseDwellTime(This, PeriodMilliseconds) -> ok when
+-spec setMouseDwellTime(This, PeriodMilliseconds) -> 'ok' when
This::wxStyledTextCtrl(), PeriodMilliseconds::integer().
setMouseDwellTime(#wx_ref{type=ThisT,ref=ThisRef},PeriodMilliseconds)
when is_integer(PeriodMilliseconds) ->
@@ -2277,7 +2277,7 @@ wordEndPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos,OnlyWordCharacters)
<<ThisRef:32/?UI,Pos:32/?UI,(wxe_util:from_bool(OnlyWordCharacters)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwrapmode">external documentation</a>.
--spec setWrapMode(This, Mode) -> ok when
+-spec setWrapMode(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setWrapMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -2294,7 +2294,7 @@ getWrapMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwrapvisualflags">external documentation</a>.
--spec setWrapVisualFlags(This, WrapVisualFlags) -> ok when
+-spec setWrapVisualFlags(This, WrapVisualFlags) -> 'ok' when
This::wxStyledTextCtrl(), WrapVisualFlags::integer().
setWrapVisualFlags(#wx_ref{type=ThisT,ref=ThisRef},WrapVisualFlags)
when is_integer(WrapVisualFlags) ->
@@ -2311,7 +2311,7 @@ getWrapVisualFlags(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwrapvisualflagslocation">external documentation</a>.
--spec setWrapVisualFlagsLocation(This, WrapVisualFlagsLocation) -> ok when
+-spec setWrapVisualFlagsLocation(This, WrapVisualFlagsLocation) -> 'ok' when
This::wxStyledTextCtrl(), WrapVisualFlagsLocation::integer().
setWrapVisualFlagsLocation(#wx_ref{type=ThisT,ref=ThisRef},WrapVisualFlagsLocation)
when is_integer(WrapVisualFlagsLocation) ->
@@ -2328,7 +2328,7 @@ getWrapVisualFlagsLocation(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwrapstartindent">external documentation</a>.
--spec setWrapStartIndent(This, Indent) -> ok when
+-spec setWrapStartIndent(This, Indent) -> 'ok' when
This::wxStyledTextCtrl(), Indent::integer().
setWrapStartIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
when is_integer(Indent) ->
@@ -2345,7 +2345,7 @@ getWrapStartIndent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlayoutcache">external documentation</a>.
--spec setLayoutCache(This, Mode) -> ok when
+-spec setLayoutCache(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setLayoutCache(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -2362,7 +2362,7 @@ getLayoutCache(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetscrollwidth">external documentation</a>.
--spec setScrollWidth(This, PixelWidth) -> ok when
+-spec setScrollWidth(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
setScrollWidth(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -2406,7 +2406,7 @@ textHeight(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetuseverticalscrollbar">external documentation</a>.
--spec setUseVerticalScrollBar(This, Show) -> ok when
+-spec setUseVerticalScrollBar(This, Show) -> 'ok' when
This::wxStyledTextCtrl(), Show::boolean().
setUseVerticalScrollBar(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -2423,7 +2423,7 @@ getUseVerticalScrollBar(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlappendtext">external documentation</a>.
--spec appendText(This, Text) -> ok when
+-spec appendText(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
appendText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -2441,7 +2441,7 @@ getTwoPhaseDraw(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettwophasedraw">external documentation</a>.
--spec setTwoPhaseDraw(This, TwoPhase) -> ok when
+-spec setTwoPhaseDraw(This, TwoPhase) -> 'ok' when
This::wxStyledTextCtrl(), TwoPhase::boolean().
setTwoPhaseDraw(#wx_ref{type=ThisT,ref=ThisRef},TwoPhase)
when is_boolean(TwoPhase) ->
@@ -2450,7 +2450,7 @@ setTwoPhaseDraw(#wx_ref{type=ThisT,ref=ThisRef},TwoPhase)
<<ThisRef:32/?UI,(wxe_util:from_bool(TwoPhase)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrltargetfromselection">external documentation</a>.
--spec targetFromSelection(This) -> ok when
+-spec targetFromSelection(This) -> 'ok' when
This::wxStyledTextCtrl().
targetFromSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2458,7 +2458,7 @@ targetFromSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinesjoin">external documentation</a>.
--spec linesJoin(This) -> ok when
+-spec linesJoin(This) -> 'ok' when
This::wxStyledTextCtrl().
linesJoin(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2466,7 +2466,7 @@ linesJoin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinessplit">external documentation</a>.
--spec linesSplit(This, PixelWidth) -> ok when
+-spec linesSplit(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
linesSplit(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -2475,7 +2475,7 @@ linesSplit(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
<<ThisRef:32/?UI,PixelWidth:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldmargincolour">external documentation</a>.
--spec setFoldMarginColour(This, UseSetting, Back) -> ok when
+-spec setFoldMarginColour(This, UseSetting, Back) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Back::wx:wx_colour().
setFoldMarginColour(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
when is_boolean(UseSetting),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -2484,7 +2484,7 @@ setFoldMarginColour(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldmarginhicolour">external documentation</a>.
--spec setFoldMarginHiColour(This, UseSetting, Fore) -> ok when
+-spec setFoldMarginHiColour(This, UseSetting, Fore) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Fore::wx:wx_colour().
setFoldMarginHiColour(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
when is_boolean(UseSetting),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -2493,7 +2493,7 @@ setFoldMarginHiColour(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinedown">external documentation</a>.
--spec lineDown(This) -> ok when
+-spec lineDown(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2501,7 +2501,7 @@ lineDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinedownextend">external documentation</a>.
--spec lineDownExtend(This) -> ok when
+-spec lineDownExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2509,7 +2509,7 @@ lineDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineup">external documentation</a>.
--spec lineUp(This) -> ok when
+-spec lineUp(This) -> 'ok' when
This::wxStyledTextCtrl().
lineUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2517,7 +2517,7 @@ lineUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineupextend">external documentation</a>.
--spec lineUpExtend(This) -> ok when
+-spec lineUpExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2525,7 +2525,7 @@ lineUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharleft">external documentation</a>.
--spec charLeft(This) -> ok when
+-spec charLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
charLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2533,7 +2533,7 @@ charLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharleftextend">external documentation</a>.
--spec charLeftExtend(This) -> ok when
+-spec charLeftExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
charLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2541,7 +2541,7 @@ charLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharright">external documentation</a>.
--spec charRight(This) -> ok when
+-spec charRight(This) -> 'ok' when
This::wxStyledTextCtrl().
charRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2549,7 +2549,7 @@ charRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharrightextend">external documentation</a>.
--spec charRightExtend(This) -> ok when
+-spec charRightExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
charRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2557,7 +2557,7 @@ charRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordleft">external documentation</a>.
--spec wordLeft(This) -> ok when
+-spec wordLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
wordLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2565,7 +2565,7 @@ wordLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordleftextend">external documentation</a>.
--spec wordLeftExtend(This) -> ok when
+-spec wordLeftExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2573,7 +2573,7 @@ wordLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordright">external documentation</a>.
--spec wordRight(This) -> ok when
+-spec wordRight(This) -> 'ok' when
This::wxStyledTextCtrl().
wordRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2581,7 +2581,7 @@ wordRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordrightextend">external documentation</a>.
--spec wordRightExtend(This) -> ok when
+-spec wordRightExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2589,7 +2589,7 @@ wordRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhome">external documentation</a>.
--spec home(This) -> ok when
+-spec home(This) -> 'ok' when
This::wxStyledTextCtrl().
home(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2597,7 +2597,7 @@ home(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomeextend">external documentation</a>.
--spec homeExtend(This) -> ok when
+-spec homeExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
homeExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2605,7 +2605,7 @@ homeExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineend">external documentation</a>.
--spec lineEnd(This) -> ok when
+-spec lineEnd(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2613,7 +2613,7 @@ lineEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineendextend">external documentation</a>.
--spec lineEndExtend(This) -> ok when
+-spec lineEndExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2621,7 +2621,7 @@ lineEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldocumentstart">external documentation</a>.
--spec documentStart(This) -> ok when
+-spec documentStart(This) -> 'ok' when
This::wxStyledTextCtrl().
documentStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2629,7 +2629,7 @@ documentStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldocumentstartextend">external documentation</a>.
--spec documentStartExtend(This) -> ok when
+-spec documentStartExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
documentStartExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2637,7 +2637,7 @@ documentStartExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldocumentend">external documentation</a>.
--spec documentEnd(This) -> ok when
+-spec documentEnd(This) -> 'ok' when
This::wxStyledTextCtrl().
documentEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2645,7 +2645,7 @@ documentEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldocumentendextend">external documentation</a>.
--spec documentEndExtend(This) -> ok when
+-spec documentEndExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
documentEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2653,7 +2653,7 @@ documentEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpageup">external documentation</a>.
--spec pageUp(This) -> ok when
+-spec pageUp(This) -> 'ok' when
This::wxStyledTextCtrl().
pageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2661,7 +2661,7 @@ pageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpageupextend">external documentation</a>.
--spec pageUpExtend(This) -> ok when
+-spec pageUpExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
pageUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2669,7 +2669,7 @@ pageUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpagedown">external documentation</a>.
--spec pageDown(This) -> ok when
+-spec pageDown(This) -> 'ok' when
This::wxStyledTextCtrl().
pageDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2677,7 +2677,7 @@ pageDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpagedownextend">external documentation</a>.
--spec pageDownExtend(This) -> ok when
+-spec pageDownExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
pageDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2685,7 +2685,7 @@ pageDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrledittoggleovertype">external documentation</a>.
--spec editToggleOvertype(This) -> ok when
+-spec editToggleOvertype(This) -> 'ok' when
This::wxStyledTextCtrl().
editToggleOvertype(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2693,7 +2693,7 @@ editToggleOvertype(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcancel">external documentation</a>.
--spec cancel(This) -> ok when
+-spec cancel(This) -> 'ok' when
This::wxStyledTextCtrl().
cancel(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2701,7 +2701,7 @@ cancel(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldeleteback">external documentation</a>.
--spec deleteBack(This) -> ok when
+-spec deleteBack(This) -> 'ok' when
This::wxStyledTextCtrl().
deleteBack(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2709,7 +2709,7 @@ deleteBack(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrltab">external documentation</a>.
--spec tab(This) -> ok when
+-spec tab(This) -> 'ok' when
This::wxStyledTextCtrl().
tab(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2717,7 +2717,7 @@ tab(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlbacktab">external documentation</a>.
--spec backTab(This) -> ok when
+-spec backTab(This) -> 'ok' when
This::wxStyledTextCtrl().
backTab(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2725,7 +2725,7 @@ backTab(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlnewline">external documentation</a>.
--spec newLine(This) -> ok when
+-spec newLine(This) -> 'ok' when
This::wxStyledTextCtrl().
newLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2733,7 +2733,7 @@ newLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlformfeed">external documentation</a>.
--spec formFeed(This) -> ok when
+-spec formFeed(This) -> 'ok' when
This::wxStyledTextCtrl().
formFeed(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2741,7 +2741,7 @@ formFeed(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchome">external documentation</a>.
--spec vCHome(This) -> ok when
+-spec vCHome(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHome(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2749,7 +2749,7 @@ vCHome(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchomeextend">external documentation</a>.
--spec vCHomeExtend(This) -> ok when
+-spec vCHomeExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHomeExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2757,7 +2757,7 @@ vCHomeExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlzoomin">external documentation</a>.
--spec zoomIn(This) -> ok when
+-spec zoomIn(This) -> 'ok' when
This::wxStyledTextCtrl().
zoomIn(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2765,7 +2765,7 @@ zoomIn(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlzoomout">external documentation</a>.
--spec zoomOut(This) -> ok when
+-spec zoomOut(This) -> 'ok' when
This::wxStyledTextCtrl().
zoomOut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2773,7 +2773,7 @@ zoomOut(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldelwordleft">external documentation</a>.
--spec delWordLeft(This) -> ok when
+-spec delWordLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
delWordLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2781,7 +2781,7 @@ delWordLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldelwordright">external documentation</a>.
--spec delWordRight(This) -> ok when
+-spec delWordRight(This) -> 'ok' when
This::wxStyledTextCtrl().
delWordRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2789,7 +2789,7 @@ delWordRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinecut">external documentation</a>.
--spec lineCut(This) -> ok when
+-spec lineCut(This) -> 'ok' when
This::wxStyledTextCtrl().
lineCut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2797,7 +2797,7 @@ lineCut(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinedelete">external documentation</a>.
--spec lineDelete(This) -> ok when
+-spec lineDelete(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDelete(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2805,7 +2805,7 @@ lineDelete(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinetranspose">external documentation</a>.
--spec lineTranspose(This) -> ok when
+-spec lineTranspose(This) -> 'ok' when
This::wxStyledTextCtrl().
lineTranspose(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2813,7 +2813,7 @@ lineTranspose(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineduplicate">external documentation</a>.
--spec lineDuplicate(This) -> ok when
+-spec lineDuplicate(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDuplicate(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2821,7 +2821,7 @@ lineDuplicate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllowercase">external documentation</a>.
--spec lowerCase(This) -> ok when
+-spec lowerCase(This) -> 'ok' when
This::wxStyledTextCtrl().
lowerCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2829,7 +2829,7 @@ lowerCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrluppercase">external documentation</a>.
--spec upperCase(This) -> ok when
+-spec upperCase(This) -> 'ok' when
This::wxStyledTextCtrl().
upperCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2837,7 +2837,7 @@ upperCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinescrolldown">external documentation</a>.
--spec lineScrollDown(This) -> ok when
+-spec lineScrollDown(This) -> 'ok' when
This::wxStyledTextCtrl().
lineScrollDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2845,7 +2845,7 @@ lineScrollDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinescrollup">external documentation</a>.
--spec lineScrollUp(This) -> ok when
+-spec lineScrollUp(This) -> 'ok' when
This::wxStyledTextCtrl().
lineScrollUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2853,7 +2853,7 @@ lineScrollUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldeletebacknotline">external documentation</a>.
--spec deleteBackNotLine(This) -> ok when
+-spec deleteBackNotLine(This) -> 'ok' when
This::wxStyledTextCtrl().
deleteBackNotLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2861,7 +2861,7 @@ deleteBackNotLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomedisplay">external documentation</a>.
--spec homeDisplay(This) -> ok when
+-spec homeDisplay(This) -> 'ok' when
This::wxStyledTextCtrl().
homeDisplay(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2869,7 +2869,7 @@ homeDisplay(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomedisplayextend">external documentation</a>.
--spec homeDisplayExtend(This) -> ok when
+-spec homeDisplayExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
homeDisplayExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2877,7 +2877,7 @@ homeDisplayExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineenddisplay">external documentation</a>.
--spec lineEndDisplay(This) -> ok when
+-spec lineEndDisplay(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndDisplay(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2885,7 +2885,7 @@ lineEndDisplay(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineenddisplayextend">external documentation</a>.
--spec lineEndDisplayExtend(This) -> ok when
+-spec lineEndDisplayExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndDisplayExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2893,7 +2893,7 @@ lineEndDisplayExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomewrapextend">external documentation</a>.
--spec homeWrapExtend(This) -> ok when
+-spec homeWrapExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
homeWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2901,7 +2901,7 @@ homeWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineendwrap">external documentation</a>.
--spec lineEndWrap(This) -> ok when
+-spec lineEndWrap(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndWrap(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2909,7 +2909,7 @@ lineEndWrap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineendwrapextend">external documentation</a>.
--spec lineEndWrapExtend(This) -> ok when
+-spec lineEndWrapExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2917,7 +2917,7 @@ lineEndWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchomewrap">external documentation</a>.
--spec vCHomeWrap(This) -> ok when
+-spec vCHomeWrap(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHomeWrap(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2925,7 +2925,7 @@ vCHomeWrap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchomewrapextend">external documentation</a>.
--spec vCHomeWrapExtend(This) -> ok when
+-spec vCHomeWrapExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHomeWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2933,7 +2933,7 @@ vCHomeWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinecopy">external documentation</a>.
--spec lineCopy(This) -> ok when
+-spec lineCopy(This) -> 'ok' when
This::wxStyledTextCtrl().
lineCopy(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2941,7 +2941,7 @@ lineCopy(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmovecaretinsideview">external documentation</a>.
--spec moveCaretInsideView(This) -> ok when
+-spec moveCaretInsideView(This) -> 'ok' when
This::wxStyledTextCtrl().
moveCaretInsideView(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2958,7 +2958,7 @@ lineLength(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlbracehighlight">external documentation</a>.
--spec braceHighlight(This, Pos1, Pos2) -> ok when
+-spec braceHighlight(This, Pos1, Pos2) -> 'ok' when
This::wxStyledTextCtrl(), Pos1::integer(), Pos2::integer().
braceHighlight(#wx_ref{type=ThisT,ref=ThisRef},Pos1,Pos2)
when is_integer(Pos1),is_integer(Pos2) ->
@@ -2967,7 +2967,7 @@ braceHighlight(#wx_ref{type=ThisT,ref=ThisRef},Pos1,Pos2)
<<ThisRef:32/?UI,Pos1:32/?UI,Pos2:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlbracebadlight">external documentation</a>.
--spec braceBadLight(This, Pos) -> ok when
+-spec braceBadLight(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
braceBadLight(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -2993,7 +2993,7 @@ getViewEOL(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetvieweol">external documentation</a>.
--spec setViewEOL(This, Visible) -> ok when
+-spec setViewEOL(This, Visible) -> 'ok' when
This::wxStyledTextCtrl(), Visible::boolean().
setViewEOL(#wx_ref{type=ThisT,ref=ThisRef},Visible)
when is_boolean(Visible) ->
@@ -3002,7 +3002,7 @@ setViewEOL(#wx_ref{type=ThisT,ref=ThisRef},Visible)
<<ThisRef:32/?UI,(wxe_util:from_bool(Visible)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmodeventmask">external documentation</a>.
--spec setModEventMask(This, Mask) -> ok when
+-spec setModEventMask(This, Mask) -> 'ok' when
This::wxStyledTextCtrl(), Mask::integer().
setModEventMask(#wx_ref{type=ThisT,ref=ThisRef},Mask)
when is_integer(Mask) ->
@@ -3019,7 +3019,7 @@ getEdgeColumn(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetedgecolumn">external documentation</a>.
--spec setEdgeColumn(This, Column) -> ok when
+-spec setEdgeColumn(This, Column) -> 'ok' when
This::wxStyledTextCtrl(), Column::integer().
setEdgeColumn(#wx_ref{type=ThisT,ref=ThisRef},Column)
when is_integer(Column) ->
@@ -3028,7 +3028,7 @@ setEdgeColumn(#wx_ref{type=ThisT,ref=ThisRef},Column)
<<ThisRef:32/?UI,Column:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetedgemode">external documentation</a>.
--spec setEdgeMode(This, Mode) -> ok when
+-spec setEdgeMode(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setEdgeMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -3053,7 +3053,7 @@ getEdgeColour(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetedgecolour">external documentation</a>.
--spec setEdgeColour(This, EdgeColour) -> ok when
+-spec setEdgeColour(This, EdgeColour) -> 'ok' when
This::wxStyledTextCtrl(), EdgeColour::wx:wx_colour().
setEdgeColour(#wx_ref{type=ThisT,ref=ThisRef},EdgeColour)
when tuple_size(EdgeColour) =:= 3; tuple_size(EdgeColour) =:= 4 ->
@@ -3062,7 +3062,7 @@ setEdgeColour(#wx_ref{type=ThisT,ref=ThisRef},EdgeColour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(EdgeColour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsearchanchor">external documentation</a>.
--spec searchAnchor(This) -> ok when
+-spec searchAnchor(This) -> 'ok' when
This::wxStyledTextCtrl().
searchAnchor(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3098,7 +3098,7 @@ linesOnScreen(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlusepopup">external documentation</a>.
--spec usePopUp(This, AllowPopUp) -> ok when
+-spec usePopUp(This, AllowPopUp) -> 'ok' when
This::wxStyledTextCtrl(), AllowPopUp::boolean().
usePopUp(#wx_ref{type=ThisT,ref=ThisRef},AllowPopUp)
when is_boolean(AllowPopUp) ->
@@ -3115,7 +3115,7 @@ selectionIsRectangle(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetzoom">external documentation</a>.
--spec setZoom(This, Zoom) -> ok when
+-spec setZoom(This, Zoom) -> 'ok' when
This::wxStyledTextCtrl(), Zoom::integer().
setZoom(#wx_ref{type=ThisT,ref=ThisRef},Zoom)
when is_integer(Zoom) ->
@@ -3140,7 +3140,7 @@ getModEventMask(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetstcfocus">external documentation</a>.
--spec setSTCFocus(This, Focus) -> ok when
+-spec setSTCFocus(This, Focus) -> 'ok' when
This::wxStyledTextCtrl(), Focus::boolean().
setSTCFocus(#wx_ref{type=ThisT,ref=ThisRef},Focus)
when is_boolean(Focus) ->
@@ -3157,7 +3157,7 @@ getSTCFocus(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetstatus">external documentation</a>.
--spec setStatus(This, StatusCode) -> ok when
+-spec setStatus(This, StatusCode) -> 'ok' when
This::wxStyledTextCtrl(), StatusCode::integer().
setStatus(#wx_ref{type=ThisT,ref=ThisRef},StatusCode)
when is_integer(StatusCode) ->
@@ -3174,7 +3174,7 @@ getStatus(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmousedowncaptures">external documentation</a>.
--spec setMouseDownCaptures(This, Captures) -> ok when
+-spec setMouseDownCaptures(This, Captures) -> 'ok' when
This::wxStyledTextCtrl(), Captures::boolean().
setMouseDownCaptures(#wx_ref{type=ThisT,ref=ThisRef},Captures)
when is_boolean(Captures) ->
@@ -3191,7 +3191,7 @@ getMouseDownCaptures(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetstccursor">external documentation</a>.
--spec setSTCCursor(This, CursorType) -> ok when
+-spec setSTCCursor(This, CursorType) -> 'ok' when
This::wxStyledTextCtrl(), CursorType::integer().
setSTCCursor(#wx_ref{type=ThisT,ref=ThisRef},CursorType)
when is_integer(CursorType) ->
@@ -3208,7 +3208,7 @@ getSTCCursor(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcontrolcharsymbol">external documentation</a>.
--spec setControlCharSymbol(This, Symbol) -> ok when
+-spec setControlCharSymbol(This, Symbol) -> 'ok' when
This::wxStyledTextCtrl(), Symbol::integer().
setControlCharSymbol(#wx_ref{type=ThisT,ref=ThisRef},Symbol)
when is_integer(Symbol) ->
@@ -3225,7 +3225,7 @@ getControlCharSymbol(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordpartleft">external documentation</a>.
--spec wordPartLeft(This) -> ok when
+-spec wordPartLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
wordPartLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3233,7 +3233,7 @@ wordPartLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordpartleftextend">external documentation</a>.
--spec wordPartLeftExtend(This) -> ok when
+-spec wordPartLeftExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordPartLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3241,7 +3241,7 @@ wordPartLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordpartright">external documentation</a>.
--spec wordPartRight(This) -> ok when
+-spec wordPartRight(This) -> 'ok' when
This::wxStyledTextCtrl().
wordPartRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3249,7 +3249,7 @@ wordPartRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordpartrightextend">external documentation</a>.
--spec wordPartRightExtend(This) -> ok when
+-spec wordPartRightExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordPartRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3257,7 +3257,7 @@ wordPartRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetvisiblepolicy">external documentation</a>.
--spec setVisiblePolicy(This, VisiblePolicy, VisibleSlop) -> ok when
+-spec setVisiblePolicy(This, VisiblePolicy, VisibleSlop) -> 'ok' when
This::wxStyledTextCtrl(), VisiblePolicy::integer(), VisibleSlop::integer().
setVisiblePolicy(#wx_ref{type=ThisT,ref=ThisRef},VisiblePolicy,VisibleSlop)
when is_integer(VisiblePolicy),is_integer(VisibleSlop) ->
@@ -3266,7 +3266,7 @@ setVisiblePolicy(#wx_ref{type=ThisT,ref=ThisRef},VisiblePolicy,VisibleSlop)
<<ThisRef:32/?UI,VisiblePolicy:32/?UI,VisibleSlop:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldellineleft">external documentation</a>.
--spec delLineLeft(This) -> ok when
+-spec delLineLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
delLineLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3274,7 +3274,7 @@ delLineLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldellineright">external documentation</a>.
--spec delLineRight(This) -> ok when
+-spec delLineRight(This) -> 'ok' when
This::wxStyledTextCtrl().
delLineRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3290,7 +3290,7 @@ getXOffset(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlchoosecaretx">external documentation</a>.
--spec chooseCaretX(This) -> ok when
+-spec chooseCaretX(This) -> 'ok' when
This::wxStyledTextCtrl().
chooseCaretX(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3298,7 +3298,7 @@ chooseCaretX(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetxcaretpolicy">external documentation</a>.
--spec setXCaretPolicy(This, CaretPolicy, CaretSlop) -> ok when
+-spec setXCaretPolicy(This, CaretPolicy, CaretSlop) -> 'ok' when
This::wxStyledTextCtrl(), CaretPolicy::integer(), CaretSlop::integer().
setXCaretPolicy(#wx_ref{type=ThisT,ref=ThisRef},CaretPolicy,CaretSlop)
when is_integer(CaretPolicy),is_integer(CaretSlop) ->
@@ -3307,7 +3307,7 @@ setXCaretPolicy(#wx_ref{type=ThisT,ref=ThisRef},CaretPolicy,CaretSlop)
<<ThisRef:32/?UI,CaretPolicy:32/?UI,CaretSlop:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetycaretpolicy">external documentation</a>.
--spec setYCaretPolicy(This, CaretPolicy, CaretSlop) -> ok when
+-spec setYCaretPolicy(This, CaretPolicy, CaretSlop) -> 'ok' when
This::wxStyledTextCtrl(), CaretPolicy::integer(), CaretSlop::integer().
setYCaretPolicy(#wx_ref{type=ThisT,ref=ThisRef},CaretPolicy,CaretSlop)
when is_integer(CaretPolicy),is_integer(CaretSlop) ->
@@ -3324,7 +3324,7 @@ getPrintWrapMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethotspotactiveforeground">external documentation</a>.
--spec setHotspotActiveForeground(This, UseSetting, Fore) -> ok when
+-spec setHotspotActiveForeground(This, UseSetting, Fore) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Fore::wx:wx_colour().
setHotspotActiveForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
when is_boolean(UseSetting),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -3333,7 +3333,7 @@ setHotspotActiveForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethotspotactivebackground">external documentation</a>.
--spec setHotspotActiveBackground(This, UseSetting, Back) -> ok when
+-spec setHotspotActiveBackground(This, UseSetting, Back) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Back::wx:wx_colour().
setHotspotActiveBackground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
when is_boolean(UseSetting),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -3342,7 +3342,7 @@ setHotspotActiveBackground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethotspotactiveunderline">external documentation</a>.
--spec setHotspotActiveUnderline(This, Underline) -> ok when
+-spec setHotspotActiveUnderline(This, Underline) -> 'ok' when
This::wxStyledTextCtrl(), Underline::boolean().
setHotspotActiveUnderline(#wx_ref{type=ThisT,ref=ThisRef},Underline)
when is_boolean(Underline) ->
@@ -3351,7 +3351,7 @@ setHotspotActiveUnderline(#wx_ref{type=ThisT,ref=ThisRef},Underline)
<<ThisRef:32/?UI,(wxe_util:from_bool(Underline)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethotspotsingleline">external documentation</a>.
--spec setHotspotSingleLine(This, SingleLine) -> ok when
+-spec setHotspotSingleLine(This, SingleLine) -> 'ok' when
This::wxStyledTextCtrl(), SingleLine::boolean().
setHotspotSingleLine(#wx_ref{type=ThisT,ref=ThisRef},SingleLine)
when is_boolean(SingleLine) ->
@@ -3360,7 +3360,7 @@ setHotspotSingleLine(#wx_ref{type=ThisT,ref=ThisRef},SingleLine)
<<ThisRef:32/?UI,(wxe_util:from_bool(SingleLine)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlparadownextend">external documentation</a>.
--spec paraDownExtend(This) -> ok when
+-spec paraDownExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
paraDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3368,7 +3368,7 @@ paraDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlparaup">external documentation</a>.
--spec paraUp(This) -> ok when
+-spec paraUp(This) -> 'ok' when
This::wxStyledTextCtrl().
paraUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3376,7 +3376,7 @@ paraUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlparaupextend">external documentation</a>.
--spec paraUpExtend(This) -> ok when
+-spec paraUpExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
paraUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3402,7 +3402,7 @@ positionAfter(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcopyrange">external documentation</a>.
--spec copyRange(This, Start, End) -> ok when
+-spec copyRange(This, Start, End) -> 'ok' when
This::wxStyledTextCtrl(), Start::integer(), End::integer().
copyRange(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
when is_integer(Start),is_integer(End) ->
@@ -3411,7 +3411,7 @@ copyRange(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
<<ThisRef:32/?UI,Start:32/?UI,End:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcopytext">external documentation</a>.
--spec copyText(This, Length, Text) -> ok when
+-spec copyText(This, Length, Text) -> 'ok' when
This::wxStyledTextCtrl(), Length::integer(), Text::unicode:chardata().
copyText(#wx_ref{type=ThisT,ref=ThisRef},Length,Text)
when is_integer(Length),is_list(Text) ->
@@ -3421,7 +3421,7 @@ copyText(#wx_ref{type=ThisT,ref=ThisRef},Length,Text)
<<ThisRef:32/?UI,Length:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselectionmode">external documentation</a>.
--spec setSelectionMode(This, Mode) -> ok when
+-spec setSelectionMode(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setSelectionMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -3438,7 +3438,7 @@ getSelectionMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinedownrectextend">external documentation</a>.
--spec lineDownRectExtend(This) -> ok when
+-spec lineDownRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDownRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3446,7 +3446,7 @@ lineDownRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineuprectextend">external documentation</a>.
--spec lineUpRectExtend(This) -> ok when
+-spec lineUpRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineUpRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3454,7 +3454,7 @@ lineUpRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharleftrectextend">external documentation</a>.
--spec charLeftRectExtend(This) -> ok when
+-spec charLeftRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
charLeftRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3462,7 +3462,7 @@ charLeftRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharrightrectextend">external documentation</a>.
--spec charRightRectExtend(This) -> ok when
+-spec charRightRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
charRightRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3470,7 +3470,7 @@ charRightRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomerectextend">external documentation</a>.
--spec homeRectExtend(This) -> ok when
+-spec homeRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
homeRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3478,7 +3478,7 @@ homeRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchomerectextend">external documentation</a>.
--spec vCHomeRectExtend(This) -> ok when
+-spec vCHomeRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHomeRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3486,7 +3486,7 @@ vCHomeRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineendrectextend">external documentation</a>.
--spec lineEndRectExtend(This) -> ok when
+-spec lineEndRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3494,7 +3494,7 @@ lineEndRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpageuprectextend">external documentation</a>.
--spec pageUpRectExtend(This) -> ok when
+-spec pageUpRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
pageUpRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3502,7 +3502,7 @@ pageUpRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpagedownrectextend">external documentation</a>.
--spec pageDownRectExtend(This) -> ok when
+-spec pageDownRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
pageDownRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3510,7 +3510,7 @@ pageDownRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstutteredpageup">external documentation</a>.
--spec stutteredPageUp(This) -> ok when
+-spec stutteredPageUp(This) -> 'ok' when
This::wxStyledTextCtrl().
stutteredPageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3518,7 +3518,7 @@ stutteredPageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstutteredpageupextend">external documentation</a>.
--spec stutteredPageUpExtend(This) -> ok when
+-spec stutteredPageUpExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
stutteredPageUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3526,7 +3526,7 @@ stutteredPageUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstutteredpagedown">external documentation</a>.
--spec stutteredPageDown(This) -> ok when
+-spec stutteredPageDown(This) -> 'ok' when
This::wxStyledTextCtrl().
stutteredPageDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3534,7 +3534,7 @@ stutteredPageDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstutteredpagedownextend">external documentation</a>.
--spec stutteredPageDownExtend(This) -> ok when
+-spec stutteredPageDownExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
stutteredPageDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3542,7 +3542,7 @@ stutteredPageDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordleftend">external documentation</a>.
--spec wordLeftEnd(This) -> ok when
+-spec wordLeftEnd(This) -> 'ok' when
This::wxStyledTextCtrl().
wordLeftEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3550,7 +3550,7 @@ wordLeftEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordleftendextend">external documentation</a>.
--spec wordLeftEndExtend(This) -> ok when
+-spec wordLeftEndExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordLeftEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3558,7 +3558,7 @@ wordLeftEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordrightend">external documentation</a>.
--spec wordRightEnd(This) -> ok when
+-spec wordRightEnd(This) -> 'ok' when
This::wxStyledTextCtrl().
wordRightEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3566,7 +3566,7 @@ wordRightEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordrightendextend">external documentation</a>.
--spec wordRightEndExtend(This) -> ok when
+-spec wordRightEndExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordRightEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3574,7 +3574,7 @@ wordRightEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwhitespacechars">external documentation</a>.
--spec setWhitespaceChars(This, Characters) -> ok when
+-spec setWhitespaceChars(This, Characters) -> 'ok' when
This::wxStyledTextCtrl(), Characters::unicode:chardata().
setWhitespaceChars(#wx_ref{type=ThisT,ref=ThisRef},Characters)
when is_list(Characters) ->
@@ -3584,7 +3584,7 @@ setWhitespaceChars(#wx_ref{type=ThisT,ref=ThisRef},Characters)
<<ThisRef:32/?UI,(byte_size(Characters_UC)):32/?UI,(Characters_UC)/binary, 0:(((8- ((0+byte_size(Characters_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcharsdefault">external documentation</a>.
--spec setCharsDefault(This) -> ok when
+-spec setCharsDefault(This) -> 'ok' when
This::wxStyledTextCtrl().
setCharsDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3600,7 +3600,7 @@ autoCompGetCurrent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlallocate">external documentation</a>.
--spec allocate(This, Bytes) -> ok when
+-spec allocate(This, Bytes) -> 'ok' when
This::wxStyledTextCtrl(), Bytes::integer().
allocate(#wx_ref{type=ThisT,ref=ThisRef},Bytes)
when is_integer(Bytes) ->
@@ -3626,7 +3626,7 @@ getCaretSticky(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretsticky">external documentation</a>.
--spec setCaretSticky(This, UseCaretStickyBehaviour) -> ok when
+-spec setCaretSticky(This, UseCaretStickyBehaviour) -> 'ok' when
This::wxStyledTextCtrl(), UseCaretStickyBehaviour::boolean().
setCaretSticky(#wx_ref{type=ThisT,ref=ThisRef},UseCaretStickyBehaviour)
when is_boolean(UseCaretStickyBehaviour) ->
@@ -3635,7 +3635,7 @@ setCaretSticky(#wx_ref{type=ThisT,ref=ThisRef},UseCaretStickyBehaviour)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseCaretStickyBehaviour)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrltogglecaretsticky">external documentation</a>.
--spec toggleCaretSticky(This) -> ok when
+-spec toggleCaretSticky(This) -> 'ok' when
This::wxStyledTextCtrl().
toggleCaretSticky(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3643,7 +3643,7 @@ toggleCaretSticky(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetpasteconvertendings">external documentation</a>.
--spec setPasteConvertEndings(This, Convert) -> ok when
+-spec setPasteConvertEndings(This, Convert) -> 'ok' when
This::wxStyledTextCtrl(), Convert::boolean().
setPasteConvertEndings(#wx_ref{type=ThisT,ref=ThisRef},Convert)
when is_boolean(Convert) ->
@@ -3660,7 +3660,7 @@ getPasteConvertEndings(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlselectionduplicate">external documentation</a>.
--spec selectionDuplicate(This) -> ok when
+-spec selectionDuplicate(This) -> 'ok' when
This::wxStyledTextCtrl().
selectionDuplicate(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3668,7 +3668,7 @@ selectionDuplicate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretlinebackalpha">external documentation</a>.
--spec setCaretLineBackAlpha(This, Alpha) -> ok when
+-spec setCaretLineBackAlpha(This, Alpha) -> 'ok' when
This::wxStyledTextCtrl(), Alpha::integer().
setCaretLineBackAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha)
when is_integer(Alpha) ->
@@ -3685,7 +3685,7 @@ getCaretLineBackAlpha(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstartrecord">external documentation</a>.
--spec startRecord(This) -> ok when
+-spec startRecord(This) -> 'ok' when
This::wxStyledTextCtrl().
startRecord(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3693,7 +3693,7 @@ startRecord(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstoprecord">external documentation</a>.
--spec stopRecord(This) -> ok when
+-spec stopRecord(This) -> 'ok' when
This::wxStyledTextCtrl().
stopRecord(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3701,7 +3701,7 @@ stopRecord(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlexer">external documentation</a>.
--spec setLexer(This, Lexer) -> ok when
+-spec setLexer(This, Lexer) -> 'ok' when
This::wxStyledTextCtrl(), Lexer::integer().
setLexer(#wx_ref{type=ThisT,ref=ThisRef},Lexer)
when is_integer(Lexer) ->
@@ -3718,7 +3718,7 @@ getLexer(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcolourise">external documentation</a>.
--spec colourise(This, Start, End) -> ok when
+-spec colourise(This, Start, End) -> 'ok' when
This::wxStyledTextCtrl(), Start::integer(), End::integer().
colourise(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
when is_integer(Start),is_integer(End) ->
@@ -3727,7 +3727,7 @@ colourise(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
<<ThisRef:32/?UI,Start:32/?UI,End:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetproperty">external documentation</a>.
--spec setProperty(This, Key, Value) -> ok when
+-spec setProperty(This, Key, Value) -> 'ok' when
This::wxStyledTextCtrl(), Key::unicode:chardata(), Value::unicode:chardata().
setProperty(#wx_ref{type=ThisT,ref=ThisRef},Key,Value)
when is_list(Key),is_list(Value) ->
@@ -3738,7 +3738,7 @@ setProperty(#wx_ref{type=ThisT,ref=ThisRef},Key,Value)
<<ThisRef:32/?UI,(byte_size(Key_UC)):32/?UI,(Key_UC)/binary, 0:(((8- ((0+byte_size(Key_UC)) band 16#7)) band 16#7))/unit:8,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((4+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetkeywords">external documentation</a>.
--spec setKeyWords(This, KeywordSet, KeyWords) -> ok when
+-spec setKeyWords(This, KeywordSet, KeyWords) -> 'ok' when
This::wxStyledTextCtrl(), KeywordSet::integer(), KeyWords::unicode:chardata().
setKeyWords(#wx_ref{type=ThisT,ref=ThisRef},KeywordSet,KeyWords)
when is_integer(KeywordSet),is_list(KeyWords) ->
@@ -3748,7 +3748,7 @@ setKeyWords(#wx_ref{type=ThisT,ref=ThisRef},KeywordSet,KeyWords)
<<ThisRef:32/?UI,KeywordSet:32/?UI,(byte_size(KeyWords_UC)):32/?UI,(KeyWords_UC)/binary, 0:(((8- ((4+byte_size(KeyWords_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlexerlanguage">external documentation</a>.
--spec setLexerLanguage(This, Language) -> ok when
+-spec setLexerLanguage(This, Language) -> 'ok' when
This::wxStyledTextCtrl(), Language::unicode:chardata().
setLexerLanguage(#wx_ref{type=ThisT,ref=ThisRef},Language)
when is_list(Language) ->
@@ -3784,7 +3784,7 @@ getCurrentLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetspec">external documentation</a>.
--spec styleSetSpec(This, StyleNum, Spec) -> ok when
+-spec styleSetSpec(This, StyleNum, Spec) -> 'ok' when
This::wxStyledTextCtrl(), StyleNum::integer(), Spec::unicode:chardata().
styleSetSpec(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,Spec)
when is_integer(StyleNum),is_list(Spec) ->
@@ -3794,7 +3794,7 @@ styleSetSpec(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,Spec)
<<ThisRef:32/?UI,StyleNum:32/?UI,(byte_size(Spec_UC)):32/?UI,(Spec_UC)/binary, 0:(((8- ((4+byte_size(Spec_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetfont">external documentation</a>.
--spec styleSetFont(This, StyleNum, Font) -> ok when
+-spec styleSetFont(This, StyleNum, Font) -> 'ok' when
This::wxStyledTextCtrl(), StyleNum::integer(), Font::wxFont:wxFont().
styleSetFont(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,#wx_ref{type=FontT,ref=FontRef})
when is_integer(StyleNum) ->
@@ -3804,7 +3804,7 @@ styleSetFont(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,#wx_ref{type=FontT,ref=Fon
<<ThisRef:32/?UI,StyleNum:32/?UI,FontRef:32/?UI>>).
%% @equiv styleSetFontAttr(This,StyleNum,Size,FaceName,Bold,Italic,Underline, [])
--spec styleSetFontAttr(This, StyleNum, Size, FaceName, Bold, Italic, Underline) -> ok when
+-spec styleSetFontAttr(This, StyleNum, Size, FaceName, Bold, Italic, Underline) -> 'ok' when
This::wxStyledTextCtrl(), StyleNum::integer(), Size::integer(), FaceName::unicode:chardata(), Bold::boolean(), Italic::boolean(), Underline::boolean().
styleSetFontAttr(This,StyleNum,Size,FaceName,Bold,Italic,Underline)
@@ -3813,9 +3813,9 @@ styleSetFontAttr(This,StyleNum,Size,FaceName,Bold,Italic,Underline)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetfontattr">external documentation</a>.
%%<br /> Encoding = ?wxFONTENCODING_SYSTEM | ?wxFONTENCODING_DEFAULT | ?wxFONTENCODING_ISO8859_1 | ?wxFONTENCODING_ISO8859_2 | ?wxFONTENCODING_ISO8859_3 | ?wxFONTENCODING_ISO8859_4 | ?wxFONTENCODING_ISO8859_5 | ?wxFONTENCODING_ISO8859_6 | ?wxFONTENCODING_ISO8859_7 | ?wxFONTENCODING_ISO8859_8 | ?wxFONTENCODING_ISO8859_9 | ?wxFONTENCODING_ISO8859_10 | ?wxFONTENCODING_ISO8859_11 | ?wxFONTENCODING_ISO8859_12 | ?wxFONTENCODING_ISO8859_13 | ?wxFONTENCODING_ISO8859_14 | ?wxFONTENCODING_ISO8859_15 | ?wxFONTENCODING_ISO8859_MAX | ?wxFONTENCODING_KOI8 | ?wxFONTENCODING_KOI8_U | ?wxFONTENCODING_ALTERNATIVE | ?wxFONTENCODING_BULGARIAN | ?wxFONTENCODING_CP437 | ?wxFONTENCODING_CP850 | ?wxFONTENCODING_CP852 | ?wxFONTENCODING_CP855 | ?wxFONTENCODING_CP866 | ?wxFONTENCODING_CP874 | ?wxFONTENCODING_CP932 | ?wxFONTENCODING_CP936 | ?wxFONTENCODING_CP949 | ?wxFONTENCODING_CP950 | ?wxFONTENCODING_CP1250 | ?wxFONTENCODING_CP1251 | ?wxFONTENCODING_CP1252 | ?wxFONTENCODING_CP1253 | ?wxFONTENCODING_CP1254 | ?wxFONTENCODING_CP1255 | ?wxFONTENCODING_CP1256 | ?wxFONTENCODING_CP1257 | ?wxFONTENCODING_CP12_MAX | ?wxFONTENCODING_UTF7 | ?wxFONTENCODING_UTF8 | ?wxFONTENCODING_EUC_JP | ?wxFONTENCODING_UTF16BE | ?wxFONTENCODING_UTF16LE | ?wxFONTENCODING_UTF32BE | ?wxFONTENCODING_UTF32LE | ?wxFONTENCODING_MACROMAN | ?wxFONTENCODING_MACJAPANESE | ?wxFONTENCODING_MACCHINESETRAD | ?wxFONTENCODING_MACKOREAN | ?wxFONTENCODING_MACARABIC | ?wxFONTENCODING_MACHEBREW | ?wxFONTENCODING_MACGREEK | ?wxFONTENCODING_MACCYRILLIC | ?wxFONTENCODING_MACDEVANAGARI | ?wxFONTENCODING_MACGURMUKHI | ?wxFONTENCODING_MACGUJARATI | ?wxFONTENCODING_MACORIYA | ?wxFONTENCODING_MACBENGALI | ?wxFONTENCODING_MACTAMIL | ?wxFONTENCODING_MACTELUGU | ?wxFONTENCODING_MACKANNADA | ?wxFONTENCODING_MACMALAJALAM | ?wxFONTENCODING_MACSINHALESE | ?wxFONTENCODING_MACBURMESE | ?wxFONTENCODING_MACKHMER | ?wxFONTENCODING_MACTHAI | ?wxFONTENCODING_MACLAOTIAN | ?wxFONTENCODING_MACGEORGIAN | ?wxFONTENCODING_MACARMENIAN | ?wxFONTENCODING_MACCHINESESIMP | ?wxFONTENCODING_MACTIBETAN | ?wxFONTENCODING_MACMONGOLIAN | ?wxFONTENCODING_MACETHIOPIC | ?wxFONTENCODING_MACCENTRALEUR | ?wxFONTENCODING_MACVIATNAMESE | ?wxFONTENCODING_MACARABICEXT | ?wxFONTENCODING_MACSYMBOL | ?wxFONTENCODING_MACDINGBATS | ?wxFONTENCODING_MACTURKISH | ?wxFONTENCODING_MACCROATIAN | ?wxFONTENCODING_MACICELANDIC | ?wxFONTENCODING_MACROMANIAN | ?wxFONTENCODING_MACCELTIC | ?wxFONTENCODING_MACGAELIC | ?wxFONTENCODING_MACKEYBOARD | ?wxFONTENCODING_MAX | ?wxFONTENCODING_MACMIN | ?wxFONTENCODING_MACMAX | ?wxFONTENCODING_UTF16 | ?wxFONTENCODING_UTF32 | ?wxFONTENCODING_UNICODE | ?wxFONTENCODING_GB2312 | ?wxFONTENCODING_BIG5 | ?wxFONTENCODING_SHIFT_JIS
--spec styleSetFontAttr(This, StyleNum, Size, FaceName, Bold, Italic, Underline, [Option]) -> ok when
+-spec styleSetFontAttr(This, StyleNum, Size, FaceName, Bold, Italic, Underline, [Option]) -> 'ok' when
This::wxStyledTextCtrl(), StyleNum::integer(), Size::integer(), FaceName::unicode:chardata(), Bold::boolean(), Italic::boolean(), Underline::boolean(),
- Option :: {encoding, wx:wx_enum()}.
+ Option :: {'encoding', wx:wx_enum()}.
styleSetFontAttr(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,Size,FaceName,Bold,Italic,Underline, Options)
when is_integer(StyleNum),is_integer(Size),is_list(FaceName),is_boolean(Bold),is_boolean(Italic),is_boolean(Underline),is_list(Options) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3827,7 +3827,7 @@ styleSetFontAttr(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,Size,FaceName,Bold,Ita
<<ThisRef:32/?UI,StyleNum:32/?UI,Size:32/?UI,(byte_size(FaceName_UC)):32/?UI,(FaceName_UC)/binary, 0:(((8- ((0+byte_size(FaceName_UC)) band 16#7)) band 16#7))/unit:8,(wxe_util:from_bool(Bold)):32/?UI,(wxe_util:from_bool(Italic)):32/?UI,(wxe_util:from_bool(Underline)):32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetcharacterset">external documentation</a>.
--spec styleSetCharacterSet(This, Style, CharacterSet) -> ok when
+-spec styleSetCharacterSet(This, Style, CharacterSet) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), CharacterSet::integer().
styleSetCharacterSet(#wx_ref{type=ThisT,ref=ThisRef},Style,CharacterSet)
when is_integer(Style),is_integer(CharacterSet) ->
@@ -3837,7 +3837,7 @@ styleSetCharacterSet(#wx_ref{type=ThisT,ref=ThisRef},Style,CharacterSet)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetfontencoding">external documentation</a>.
%%<br /> Encoding = ?wxFONTENCODING_SYSTEM | ?wxFONTENCODING_DEFAULT | ?wxFONTENCODING_ISO8859_1 | ?wxFONTENCODING_ISO8859_2 | ?wxFONTENCODING_ISO8859_3 | ?wxFONTENCODING_ISO8859_4 | ?wxFONTENCODING_ISO8859_5 | ?wxFONTENCODING_ISO8859_6 | ?wxFONTENCODING_ISO8859_7 | ?wxFONTENCODING_ISO8859_8 | ?wxFONTENCODING_ISO8859_9 | ?wxFONTENCODING_ISO8859_10 | ?wxFONTENCODING_ISO8859_11 | ?wxFONTENCODING_ISO8859_12 | ?wxFONTENCODING_ISO8859_13 | ?wxFONTENCODING_ISO8859_14 | ?wxFONTENCODING_ISO8859_15 | ?wxFONTENCODING_ISO8859_MAX | ?wxFONTENCODING_KOI8 | ?wxFONTENCODING_KOI8_U | ?wxFONTENCODING_ALTERNATIVE | ?wxFONTENCODING_BULGARIAN | ?wxFONTENCODING_CP437 | ?wxFONTENCODING_CP850 | ?wxFONTENCODING_CP852 | ?wxFONTENCODING_CP855 | ?wxFONTENCODING_CP866 | ?wxFONTENCODING_CP874 | ?wxFONTENCODING_CP932 | ?wxFONTENCODING_CP936 | ?wxFONTENCODING_CP949 | ?wxFONTENCODING_CP950 | ?wxFONTENCODING_CP1250 | ?wxFONTENCODING_CP1251 | ?wxFONTENCODING_CP1252 | ?wxFONTENCODING_CP1253 | ?wxFONTENCODING_CP1254 | ?wxFONTENCODING_CP1255 | ?wxFONTENCODING_CP1256 | ?wxFONTENCODING_CP1257 | ?wxFONTENCODING_CP12_MAX | ?wxFONTENCODING_UTF7 | ?wxFONTENCODING_UTF8 | ?wxFONTENCODING_EUC_JP | ?wxFONTENCODING_UTF16BE | ?wxFONTENCODING_UTF16LE | ?wxFONTENCODING_UTF32BE | ?wxFONTENCODING_UTF32LE | ?wxFONTENCODING_MACROMAN | ?wxFONTENCODING_MACJAPANESE | ?wxFONTENCODING_MACCHINESETRAD | ?wxFONTENCODING_MACKOREAN | ?wxFONTENCODING_MACARABIC | ?wxFONTENCODING_MACHEBREW | ?wxFONTENCODING_MACGREEK | ?wxFONTENCODING_MACCYRILLIC | ?wxFONTENCODING_MACDEVANAGARI | ?wxFONTENCODING_MACGURMUKHI | ?wxFONTENCODING_MACGUJARATI | ?wxFONTENCODING_MACORIYA | ?wxFONTENCODING_MACBENGALI | ?wxFONTENCODING_MACTAMIL | ?wxFONTENCODING_MACTELUGU | ?wxFONTENCODING_MACKANNADA | ?wxFONTENCODING_MACMALAJALAM | ?wxFONTENCODING_MACSINHALESE | ?wxFONTENCODING_MACBURMESE | ?wxFONTENCODING_MACKHMER | ?wxFONTENCODING_MACTHAI | ?wxFONTENCODING_MACLAOTIAN | ?wxFONTENCODING_MACGEORGIAN | ?wxFONTENCODING_MACARMENIAN | ?wxFONTENCODING_MACCHINESESIMP | ?wxFONTENCODING_MACTIBETAN | ?wxFONTENCODING_MACMONGOLIAN | ?wxFONTENCODING_MACETHIOPIC | ?wxFONTENCODING_MACCENTRALEUR | ?wxFONTENCODING_MACVIATNAMESE | ?wxFONTENCODING_MACARABICEXT | ?wxFONTENCODING_MACSYMBOL | ?wxFONTENCODING_MACDINGBATS | ?wxFONTENCODING_MACTURKISH | ?wxFONTENCODING_MACCROATIAN | ?wxFONTENCODING_MACICELANDIC | ?wxFONTENCODING_MACROMANIAN | ?wxFONTENCODING_MACCELTIC | ?wxFONTENCODING_MACGAELIC | ?wxFONTENCODING_MACKEYBOARD | ?wxFONTENCODING_MAX | ?wxFONTENCODING_MACMIN | ?wxFONTENCODING_MACMAX | ?wxFONTENCODING_UTF16 | ?wxFONTENCODING_UTF32 | ?wxFONTENCODING_UNICODE | ?wxFONTENCODING_GB2312 | ?wxFONTENCODING_BIG5 | ?wxFONTENCODING_SHIFT_JIS
--spec styleSetFontEncoding(This, Style, Encoding) -> ok when
+-spec styleSetFontEncoding(This, Style, Encoding) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Encoding::wx:wx_enum().
styleSetFontEncoding(#wx_ref{type=ThisT,ref=ThisRef},Style,Encoding)
when is_integer(Style),is_integer(Encoding) ->
@@ -3846,7 +3846,7 @@ styleSetFontEncoding(#wx_ref{type=ThisT,ref=ThisRef},Style,Encoding)
<<ThisRef:32/?UI,Style:32/?UI,Encoding:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcmdkeyexecute">external documentation</a>.
--spec cmdKeyExecute(This, Cmd) -> ok when
+-spec cmdKeyExecute(This, Cmd) -> 'ok' when
This::wxStyledTextCtrl(), Cmd::integer().
cmdKeyExecute(#wx_ref{type=ThisT,ref=ThisRef},Cmd)
when is_integer(Cmd) ->
@@ -3855,7 +3855,7 @@ cmdKeyExecute(#wx_ref{type=ThisT,ref=ThisRef},Cmd)
<<ThisRef:32/?UI,Cmd:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmargins">external documentation</a>.
--spec setMargins(This, Left, Right) -> ok when
+-spec setMargins(This, Left, Right) -> 'ok' when
This::wxStyledTextCtrl(), Left::integer(), Right::integer().
setMargins(#wx_ref{type=ThisT,ref=ThisRef},Left,Right)
when is_integer(Left),is_integer(Right) ->
@@ -3881,7 +3881,7 @@ pointFromPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlscrolltoline">external documentation</a>.
--spec scrollToLine(This, Line) -> ok when
+-spec scrollToLine(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
scrollToLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -3890,7 +3890,7 @@ scrollToLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlscrolltocolumn">external documentation</a>.
--spec scrollToColumn(This, Column) -> ok when
+-spec scrollToColumn(This, Column) -> 'ok' when
This::wxStyledTextCtrl(), Column::integer().
scrollToColumn(#wx_ref{type=ThisT,ref=ThisRef},Column)
when is_integer(Column) ->
@@ -3899,7 +3899,7 @@ scrollToColumn(#wx_ref{type=ThisT,ref=ThisRef},Column)
<<ThisRef:32/?UI,Column:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetvscrollbar">external documentation</a>.
--spec setVScrollBar(This, Bar) -> ok when
+-spec setVScrollBar(This, Bar) -> 'ok' when
This::wxStyledTextCtrl(), Bar::wxScrollBar:wxScrollBar().
setVScrollBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BarT,ref=BarRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3908,7 +3908,7 @@ setVScrollBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BarT,ref=BarRef}) ->
<<ThisRef:32/?UI,BarRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethscrollbar">external documentation</a>.
--spec setHScrollBar(This, Bar) -> ok when
+-spec setHScrollBar(This, Bar) -> 'ok' when
This::wxStyledTextCtrl(), Bar::wxScrollBar:wxScrollBar().
setHScrollBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BarT,ref=BarRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3925,7 +3925,7 @@ getLastKeydownProcessed(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlastkeydownprocessed">external documentation</a>.
--spec setLastKeydownProcessed(This, Val) -> ok when
+-spec setLastKeydownProcessed(This, Val) -> 'ok' when
This::wxStyledTextCtrl(), Val::boolean().
setLastKeydownProcessed(#wx_ref{type=ThisT,ref=ThisRef},Val)
when is_boolean(Val) ->
@@ -3983,7 +3983,7 @@ getUseAntiAliasing(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrladdtextraw">external documentation</a>.
--spec addTextRaw(This, Text) -> ok when
+-spec addTextRaw(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::binary().
addTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_binary(Text) ->
@@ -3993,7 +3993,7 @@ addTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlinserttextraw">external documentation</a>.
--spec insertTextRaw(This, Pos, Text) -> ok when
+-spec insertTextRaw(This, Pos, Text) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer(), Text::binary().
insertTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Pos,Text)
when is_integer(Pos),is_binary(Text) ->
@@ -4038,7 +4038,7 @@ getTextRangeRaw(#wx_ref{type=ThisT,ref=ThisRef},StartPos,EndPos)
<<ThisRef:32/?UI,StartPos:32/?UI,EndPos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettextraw">external documentation</a>.
--spec setTextRaw(This, Text) -> ok when
+-spec setTextRaw(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::binary().
setTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_binary(Text) ->
@@ -4056,7 +4056,7 @@ getTextRaw(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlappendtextraw">external documentation</a>.
--spec appendTextRaw(This, Text) -> ok when
+-spec appendTextRaw(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::binary().
appendTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_binary(Text) ->
@@ -4066,7 +4066,7 @@ appendTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStyledTextCtrl()) -> ok.
+-spec destroy(This::wxStyledTextCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStyledTextCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStyledTextEvent.erl b/lib/wx/src/gen/wxStyledTextEvent.erl
index d794673f69..bee5ffd04c 100644
--- a/lib/wx/src/gen/wxStyledTextEvent.erl
+++ b/lib/wx/src/gen/wxStyledTextEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxSysColourChangedEvent.erl b/lib/wx/src/gen/wxSysColourChangedEvent.erl
index 308b399198..bd7a4276a4 100644
--- a/lib/wx/src/gen/wxSysColourChangedEvent.erl
+++ b/lib/wx/src/gen/wxSysColourChangedEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxSystemOptions.erl b/lib/wx/src/gen/wxSystemOptions.erl
index fe2e1c98cd..28d77b1e26 100644
--- a/lib/wx/src/gen/wxSystemOptions.erl
+++ b/lib/wx/src/gen/wxSystemOptions.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -73,12 +73,12 @@ isFalse(Name)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsystemoptions.html#wxsystemoptionssetoption">external documentation</a>.
%% <br /> Also:<br />
-%% setOption(Name, Value) -> ok when<br />
+%% setOption(Name, Value) -> 'ok' when<br />
%% Name::unicode:chardata(), Value::unicode:chardata().<br />
%%
--spec setOption(Name, Value) -> ok when
+-spec setOption(Name, Value) -> 'ok' when
Name::unicode:chardata(), Value::integer();
- (Name, Value) -> ok when
+ (Name, Value) -> 'ok' when
Name::unicode:chardata(), Value::unicode:chardata().
setOption(Name,Value)
when is_list(Name),is_integer(Value) ->
diff --git a/lib/wx/src/gen/wxSystemSettings.erl b/lib/wx/src/gen/wxSystemSettings.erl
index 57fcf455dc..b48f783a45 100644
--- a/lib/wx/src/gen/wxSystemSettings.erl
+++ b/lib/wx/src/gen/wxSystemSettings.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -65,7 +65,7 @@ getMetric(Index)
%%<br /> Index = ?wxSYS_MOUSE_BUTTONS | ?wxSYS_BORDER_X | ?wxSYS_BORDER_Y | ?wxSYS_CURSOR_X | ?wxSYS_CURSOR_Y | ?wxSYS_DCLICK_X | ?wxSYS_DCLICK_Y | ?wxSYS_DRAG_X | ?wxSYS_DRAG_Y | ?wxSYS_EDGE_X | ?wxSYS_EDGE_Y | ?wxSYS_HSCROLL_ARROW_X | ?wxSYS_HSCROLL_ARROW_Y | ?wxSYS_HTHUMB_X | ?wxSYS_ICON_X | ?wxSYS_ICON_Y | ?wxSYS_ICONSPACING_X | ?wxSYS_ICONSPACING_Y | ?wxSYS_WINDOWMIN_X | ?wxSYS_WINDOWMIN_Y | ?wxSYS_SCREEN_X | ?wxSYS_SCREEN_Y | ?wxSYS_FRAMESIZE_X | ?wxSYS_FRAMESIZE_Y | ?wxSYS_SMALLICON_X | ?wxSYS_SMALLICON_Y | ?wxSYS_HSCROLL_Y | ?wxSYS_VSCROLL_X | ?wxSYS_VSCROLL_ARROW_X | ?wxSYS_VSCROLL_ARROW_Y | ?wxSYS_VTHUMB_Y | ?wxSYS_CAPTION_Y | ?wxSYS_MENU_Y | ?wxSYS_NETWORK_PRESENT | ?wxSYS_PENWINDOWS_PRESENT | ?wxSYS_SHOW_SOUNDS | ?wxSYS_SWAP_BUTTONS
-spec getMetric(Index, [Option]) -> integer() when
Index::wx:wx_enum(),
- Option :: {win, wxWindow:wxWindow()}.
+ Option :: {'win', wxWindow:wxWindow()}.
getMetric(Index, Options)
when is_integer(Index),is_list(Options) ->
MOpts = fun({win, #wx_ref{type=WinT,ref=WinRef}}, Acc) -> ?CLASS(WinT,wxWindow),[<<1:32/?UI,WinRef:32/?UI>>|Acc];
diff --git a/lib/wx/src/gen/wxTaskBarIcon.erl b/lib/wx/src/gen/wxTaskBarIcon.erl
index aab41f4645..af4859fb88 100644
--- a/lib/wx/src/gen/wxTaskBarIcon.erl
+++ b/lib/wx/src/gen/wxTaskBarIcon.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -73,7 +73,7 @@ setIcon(This,Icon)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtaskbaricon.html#wxtaskbariconseticon">external documentation</a>.
-spec setIcon(This, Icon, [Option]) -> boolean() when
This::wxTaskBarIcon(), Icon::wxIcon:wxIcon(),
- Option :: {tooltip, unicode:chardata()}.
+ Option :: {'tooltip', unicode:chardata()}.
setIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTaskBarIcon),
@@ -85,7 +85,7 @@ setIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}, Options
<<ThisRef:32/?UI,IconRef:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTaskBarIcon()) -> ok.
+-spec destroy(This::wxTaskBarIcon()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTaskBarIcon),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxTaskBarIconEvent.erl b/lib/wx/src/gen/wxTaskBarIconEvent.erl
index 199e4930c3..82def18484 100644
--- a/lib/wx/src/gen/wxTaskBarIconEvent.erl
+++ b/lib/wx/src/gen/wxTaskBarIconEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxTextAttr.erl b/lib/wx/src/gen/wxTextAttr.erl
index 9d4361f742..4f6031cc88 100644
--- a/lib/wx/src/gen/wxTextAttr.erl
+++ b/lib/wx/src/gen/wxTextAttr.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -58,9 +58,9 @@ new(ColText)
%%<br /> Alignment = ?wxTEXT_ALIGNMENT_DEFAULT | ?wxTEXT_ALIGNMENT_LEFT | ?wxTEXT_ALIGNMENT_CENTRE | ?wxTEXT_ALIGNMENT_CENTER | ?wxTEXT_ALIGNMENT_RIGHT | ?wxTEXT_ALIGNMENT_JUSTIFIED
-spec new(ColText, [Option]) -> wxTextAttr() when
ColText::wx:wx_colour(),
- Option :: {colBack, wx:wx_colour()}
- | {font, wxFont:wxFont()}
- | {alignment, wx:wx_enum()}.
+ Option :: {'colBack', wx:wx_colour()}
+ | {'font', wxFont:wxFont()}
+ | {'alignment', wx:wx_enum()}.
new(ColText, Options)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4,is_list(Options) ->
MOpts = fun({colBack, ColBack}, Acc) -> [<<1:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary,0:32>>|Acc];
@@ -178,7 +178,7 @@ isDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetalignment">external documentation</a>.
%%<br /> Alignment = ?wxTEXT_ALIGNMENT_DEFAULT | ?wxTEXT_ALIGNMENT_LEFT | ?wxTEXT_ALIGNMENT_CENTRE | ?wxTEXT_ALIGNMENT_CENTER | ?wxTEXT_ALIGNMENT_RIGHT | ?wxTEXT_ALIGNMENT_JUSTIFIED
--spec setAlignment(This, Alignment) -> ok when
+-spec setAlignment(This, Alignment) -> 'ok' when
This::wxTextAttr(), Alignment::wx:wx_enum().
setAlignment(#wx_ref{type=ThisT,ref=ThisRef},Alignment)
when is_integer(Alignment) ->
@@ -187,7 +187,7 @@ setAlignment(#wx_ref{type=ThisT,ref=ThisRef},Alignment)
<<ThisRef:32/?UI,Alignment:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxTextAttr(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -196,7 +196,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxTextAttr(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -205,7 +205,7 @@ setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @equiv setFont(This,Font, [])
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxTextAttr(), Font::wxFont:wxFont().
setFont(This,Font)
@@ -213,9 +213,9 @@ setFont(This,Font)
setFont(This,Font, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetfont">external documentation</a>.
--spec setFont(This, Font, [Option]) -> ok when
+-spec setFont(This, Font, [Option]) -> 'ok' when
This::wxTextAttr(), Font::wxFont:wxFont(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTextAttr),
@@ -227,7 +227,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}, Options
<<ThisRef:32/?UI,FontRef:32/?UI, BinOpt/binary>>).
%% @equiv setLeftIndent(This,Indent, [])
--spec setLeftIndent(This, Indent) -> ok when
+-spec setLeftIndent(This, Indent) -> 'ok' when
This::wxTextAttr(), Indent::integer().
setLeftIndent(This,Indent)
@@ -235,9 +235,9 @@ setLeftIndent(This,Indent)
setLeftIndent(This,Indent, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetleftindent">external documentation</a>.
--spec setLeftIndent(This, Indent, [Option]) -> ok when
+-spec setLeftIndent(This, Indent, [Option]) -> 'ok' when
This::wxTextAttr(), Indent::integer(),
- Option :: {subIndent, integer()}.
+ Option :: {'subIndent', integer()}.
setLeftIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent, Options)
when is_integer(Indent),is_list(Options) ->
?CLASS(ThisT,wxTextAttr),
@@ -248,7 +248,7 @@ setLeftIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent, Options)
<<ThisRef:32/?UI,Indent:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetrightindent">external documentation</a>.
--spec setRightIndent(This, Indent) -> ok when
+-spec setRightIndent(This, Indent) -> 'ok' when
This::wxTextAttr(), Indent::integer().
setRightIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
when is_integer(Indent) ->
@@ -257,7 +257,7 @@ setRightIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
<<ThisRef:32/?UI,Indent:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsettabs">external documentation</a>.
--spec setTabs(This, Tabs) -> ok when
+-spec setTabs(This, Tabs) -> 'ok' when
This::wxTextAttr(), Tabs::[integer()].
setTabs(#wx_ref{type=ThisT,ref=ThisRef},Tabs)
when is_list(Tabs) ->
@@ -267,7 +267,7 @@ setTabs(#wx_ref{type=ThisT,ref=ThisRef},Tabs)
(<< <<C:32/?I>> || C <- Tabs>>)/binary, 0:(((0+length(Tabs)) rem 2)*32)>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxTextAttr(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -276,7 +276,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTextAttr()) -> ok.
+-spec destroy(This::wxTextAttr()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTextAttr),
wxe_util:destroy(?wxTextAttr_destroy,Obj),
diff --git a/lib/wx/src/gen/wxTextCtrl.erl b/lib/wx/src/gen/wxTextCtrl.erl
index 5840812579..5f03398959 100644
--- a/lib/wx/src/gen/wxTextCtrl.erl
+++ b/lib/wx/src/gen/wxTextCtrl.erl
@@ -104,11 +104,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlwxtextctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxTextCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -123,7 +123,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
<<ParentRef:32/?UI,Id:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlappendtext">external documentation</a>.
--spec appendText(This, Text) -> ok when
+-spec appendText(This, Text) -> 'ok' when
This::wxTextCtrl(), Text::unicode:chardata().
appendText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -173,7 +173,7 @@ canUndo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxTextCtrl().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -181,7 +181,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlcopy">external documentation</a>.
--spec copy(This) -> ok when
+-spec copy(This) -> 'ok' when
This::wxTextCtrl().
copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -199,11 +199,11 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxTextCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxTextCtrl),
@@ -219,7 +219,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, O
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlcut">external documentation</a>.
--spec cut(This) -> ok when
+-spec cut(This) -> 'ok' when
This::wxTextCtrl().
cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -227,7 +227,7 @@ cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrldiscardedits">external documentation</a>.
--spec discardEdits(This) -> ok when
+-spec discardEdits(This) -> 'ok' when
This::wxTextCtrl().
discardEdits(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -235,7 +235,7 @@ discardEdits(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlchangevalue">external documentation</a>.
--spec changeValue(This, Value) -> ok when
+-spec changeValue(This, Value) -> 'ok' when
This::wxTextCtrl(), Value::unicode:chardata().
changeValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_list(Value) ->
@@ -389,7 +389,7 @@ loadFile(This,File)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlloadfile">external documentation</a>.
-spec loadFile(This, File, [Option]) -> boolean() when
This::wxTextCtrl(), File::unicode:chardata(),
- Option :: {fileType, integer()}.
+ Option :: {'fileType', integer()}.
loadFile(#wx_ref{type=ThisT,ref=ThisRef},File, Options)
when is_list(File),is_list(Options) ->
?CLASS(ThisT,wxTextCtrl),
@@ -401,7 +401,7 @@ loadFile(#wx_ref{type=ThisT,ref=ThisRef},File, Options)
<<ThisRef:32/?UI,(byte_size(File_UC)):32/?UI,(File_UC)/binary, 0:(((8- ((0+byte_size(File_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlmarkdirty">external documentation</a>.
--spec markDirty(This) -> ok when
+-spec markDirty(This) -> 'ok' when
This::wxTextCtrl().
markDirty(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -409,7 +409,7 @@ markDirty(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlpaste">external documentation</a>.
--spec paste(This) -> ok when
+-spec paste(This) -> 'ok' when
This::wxTextCtrl().
paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -427,7 +427,7 @@ positionToXY(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlredo">external documentation</a>.
--spec redo(This) -> ok when
+-spec redo(This) -> 'ok' when
This::wxTextCtrl().
redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -435,7 +435,7 @@ redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlremove">external documentation</a>.
--spec remove(This, From, To) -> ok when
+-spec remove(This, From, To) -> 'ok' when
This::wxTextCtrl(), From::integer(), To::integer().
remove(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -444,7 +444,7 @@ remove(#wx_ref{type=ThisT,ref=ThisRef},From,To)
<<ThisRef:32/?UI,From:32/?UI,To:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlreplace">external documentation</a>.
--spec replace(This, From, To, Value) -> ok when
+-spec replace(This, From, To, Value) -> 'ok' when
This::wxTextCtrl(), From::integer(), To::integer(), Value::unicode:chardata().
replace(#wx_ref{type=ThisT,ref=ThisRef},From,To,Value)
when is_integer(From),is_integer(To),is_list(Value) ->
@@ -464,8 +464,8 @@ saveFile(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsavefile">external documentation</a>.
-spec saveFile(This, [Option]) -> boolean() when
This::wxTextCtrl(),
- Option :: {file, unicode:chardata()}
- | {fileType, integer()}.
+ Option :: {'file', unicode:chardata()}
+ | {'fileType', integer()}.
saveFile(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTextCtrl),
@@ -486,7 +486,7 @@ setDefaultStyle(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StyleT,ref=StyleRef
<<ThisRef:32/?UI,StyleRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlseteditable">external documentation</a>.
--spec setEditable(This, Editable) -> ok when
+-spec setEditable(This, Editable) -> 'ok' when
This::wxTextCtrl(), Editable::boolean().
setEditable(#wx_ref{type=ThisT,ref=ThisRef},Editable)
when is_boolean(Editable) ->
@@ -495,7 +495,7 @@ setEditable(#wx_ref{type=ThisT,ref=ThisRef},Editable)
<<ThisRef:32/?UI,(wxe_util:from_bool(Editable)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetinsertionpoint">external documentation</a>.
--spec setInsertionPoint(This, Pos) -> ok when
+-spec setInsertionPoint(This, Pos) -> 'ok' when
This::wxTextCtrl(), Pos::integer().
setInsertionPoint(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -504,7 +504,7 @@ setInsertionPoint(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetinsertionpointend">external documentation</a>.
--spec setInsertionPointEnd(This) -> ok when
+-spec setInsertionPointEnd(This) -> 'ok' when
This::wxTextCtrl().
setInsertionPointEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -512,7 +512,7 @@ setInsertionPointEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetmaxlength">external documentation</a>.
--spec setMaxLength(This, Len) -> ok when
+-spec setMaxLength(This, Len) -> 'ok' when
This::wxTextCtrl(), Len::integer().
setMaxLength(#wx_ref{type=ThisT,ref=ThisRef},Len)
when is_integer(Len) ->
@@ -521,7 +521,7 @@ setMaxLength(#wx_ref{type=ThisT,ref=ThisRef},Len)
<<ThisRef:32/?UI,Len:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetselection">external documentation</a>.
--spec setSelection(This, From, To) -> ok when
+-spec setSelection(This, From, To) -> 'ok' when
This::wxTextCtrl(), From::integer(), To::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -540,7 +540,7 @@ setStyle(#wx_ref{type=ThisT,ref=ThisRef},Start,End,#wx_ref{type=StyleT,ref=Style
<<ThisRef:32/?UI,Start:32/?UI,End:32/?UI,StyleRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetvalue">external documentation</a>.
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxTextCtrl(), Value::unicode:chardata().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_list(Value) ->
@@ -550,7 +550,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
<<ThisRef:32/?UI,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((0+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlshowposition">external documentation</a>.
--spec showPosition(This, Pos) -> ok when
+-spec showPosition(This, Pos) -> 'ok' when
This::wxTextCtrl(), Pos::integer().
showPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -559,7 +559,7 @@ showPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlundo">external documentation</a>.
--spec undo(This) -> ok when
+-spec undo(This) -> 'ok' when
This::wxTextCtrl().
undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -567,7 +567,7 @@ undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlwritetext">external documentation</a>.
--spec writeText(This, Text) -> ok when
+-spec writeText(This, Text) -> 'ok' when
This::wxTextCtrl(), Text::unicode:chardata().
writeText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -586,7 +586,7 @@ xYToPosition(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTextCtrl()) -> ok.
+-spec destroy(This::wxTextCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTextCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxTextDataObject.erl b/lib/wx/src/gen/wxTextDataObject.erl
index 89e51b24cb..eb3e1f4bff 100644
--- a/lib/wx/src/gen/wxTextDataObject.erl
+++ b/lib/wx/src/gen/wxTextDataObject.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextdataobject.html#wxtextdataobjectwxtextdataobject">external documentation</a>.
-spec new([Option]) -> wxTextDataObject() when
- Option :: {text, unicode:chardata()}.
+ Option :: {'text', unicode:chardata()}.
new(Options)
when is_list(Options) ->
MOpts = fun({text, Text}, Acc) -> Text_UC = unicode:characters_to_binary([Text,0]),[<<1:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>|Acc];
@@ -73,7 +73,7 @@ getText(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextdataobject.html#wxtextdataobjectsettext">external documentation</a>.
--spec setText(This, Text) -> ok when
+-spec setText(This, Text) -> 'ok' when
This::wxTextDataObject(), Text::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -83,7 +83,7 @@ setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTextDataObject()) -> ok.
+-spec destroy(This::wxTextDataObject()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTextDataObject),
wxe_util:destroy(?wxTextDataObject_destroy,Obj),
diff --git a/lib/wx/src/gen/wxTextEntryDialog.erl b/lib/wx/src/gen/wxTextEntryDialog.erl
index a93c3857a8..eaf6dc3926 100644
--- a/lib/wx/src/gen/wxTextEntryDialog.erl
+++ b/lib/wx/src/gen/wxTextEntryDialog.erl
@@ -99,10 +99,10 @@ new(Parent,Message)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextentrydialog.html#wxtextentrydialogwxtextentrydialog">external documentation</a>.
-spec new(Parent, Message, [Option]) -> wxTextEntryDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(),
- Option :: {caption, unicode:chardata()}
- | {value, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'caption', unicode:chardata()}
+ | {'value', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
when is_list(Message),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -125,7 +125,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextentrydialog.html#wxtextentrydialogsetvalue">external documentation</a>.
--spec setValue(This, Val) -> ok when
+-spec setValue(This, Val) -> 'ok' when
This::wxTextEntryDialog(), Val::unicode:chardata().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Val)
when is_list(Val) ->
@@ -135,7 +135,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(byte_size(Val_UC)):32/?UI,(Val_UC)/binary, 0:(((8- ((0+byte_size(Val_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTextEntryDialog()) -> ok.
+-spec destroy(This::wxTextEntryDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTextEntryDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxToggleButton.erl b/lib/wx/src/gen/wxToggleButton.erl
index dffb4b159d..9e8dab1c32 100644
--- a/lib/wx/src/gen/wxToggleButton.erl
+++ b/lib/wx/src/gen/wxToggleButton.erl
@@ -96,10 +96,10 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtogglebutton.html#wxtogglebuttonwxtogglebutton">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxToggleButton() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtogglebutton.html#wxtogglebuttoncreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxToggleButton(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxToggleButton),
@@ -151,7 +151,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtogglebutton.html#wxtogglebuttonsetvalue">external documentation</a>.
--spec setValue(This, State) -> ok when
+-spec setValue(This, State) -> 'ok' when
This::wxToggleButton(), State::boolean().
setValue(#wx_ref{type=ThisT,ref=ThisRef},State)
when is_boolean(State) ->
@@ -160,7 +160,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},State)
<<ThisRef:32/?UI,(wxe_util:from_bool(State)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxToggleButton()) -> ok.
+-spec destroy(This::wxToggleButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxToggleButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxToolBar.erl b/lib/wx/src/gen/wxToolBar.erl
index b3cce2b6e9..9be37f943c 100644
--- a/lib/wx/src/gen/wxToolBar.erl
+++ b/lib/wx/src/gen/wxToolBar.erl
@@ -128,8 +128,8 @@ addTool(This,Toolid,Bitmap)
%% This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap();<br />
%% (This, Toolid, Bitmap, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(),<br />
-%% Option :: {shortHelpString, unicode:chardata()}<br />
-%% | {longHelpString, unicode:chardata()}.<br />
+%% Option :: {'shortHelpString', unicode:chardata()}<br />
+%% | {'longHelpString', unicode:chardata()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec addTool(This, Toolid, Label, Bitmap) -> wx:wx_object() when
@@ -138,8 +138,8 @@ addTool(This,Toolid,Bitmap)
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap();
(This, Toolid, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {shortHelpString, unicode:chardata()}
- | {longHelpString, unicode:chardata()}.
+ Option :: {'shortHelpString', unicode:chardata()}
+ | {'longHelpString', unicode:chardata()}.
addTool(This,Toolid,Label,Bitmap)
when is_record(This, wx_ref),is_integer(Toolid),is_list(Label),is_record(Bitmap, wx_ref) ->
@@ -163,28 +163,28 @@ addTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,#wx_ref{type=BitmapT,ref=BitmapRe
%% <br /> Also:<br />
%% addTool(This, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),<br />
-%% Option :: {shortHelp, unicode:chardata()}<br />
-%% | {kind, wx:wx_enum()};<br />
+%% Option :: {'shortHelp', unicode:chardata()}<br />
+%% | {'kind', wx:wx_enum()};<br />
%% (This, Toolid, Bitmap, BmpDisabled, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(),<br />
-%% Option :: {toggle, boolean()}<br />
-%% | {clientData, wx:wx_object()}<br />
-%% | {shortHelpString, unicode:chardata()}<br />
-%% | {longHelpString, unicode:chardata()}.<br />
+%% Option :: {'toggle', boolean()}<br />
+%% | {'clientData', wx:wx_object()}<br />
+%% | {'shortHelpString', unicode:chardata()}<br />
+%% | {'longHelpString', unicode:chardata()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec addTool(This, Toolid, Label, Bitmap, BmpDisabled) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap();
(This, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {shortHelp, unicode:chardata()}
- | {kind, wx:wx_enum()};
+ Option :: {'shortHelp', unicode:chardata()}
+ | {'kind', wx:wx_enum()};
(This, Toolid, Bitmap, BmpDisabled, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(),
- Option :: {toggle, boolean()}
- | {clientData, wx:wx_object()}
- | {shortHelpString, unicode:chardata()}
- | {longHelpString, unicode:chardata()}.
+ Option :: {'toggle', boolean()}
+ | {'clientData', wx:wx_object()}
+ | {'shortHelpString', unicode:chardata()}
+ | {'longHelpString', unicode:chardata()}.
addTool(This,Toolid,Label,Bitmap,BmpDisabled)
when is_record(This, wx_ref),is_integer(Toolid),is_list(Label),is_record(Bitmap, wx_ref),is_record(BmpDisabled, wx_ref) ->
@@ -218,20 +218,20 @@ addTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,#wx_ref{type=BitmapT,ref=BitmapRe
%% <br /> Also:<br />
%% addTool(This, Toolid, Label, Bitmap, BmpDisabled, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(),<br />
-%% Option :: {kind, wx:wx_enum()}<br />
-%% | {shortHelp, unicode:chardata()}<br />
-%% | {longHelp, unicode:chardata()}<br />
-%% | {data, wx:wx_object()}.<br />
+%% Option :: {'kind', wx:wx_enum()}<br />
+%% | {'shortHelp', unicode:chardata()}<br />
+%% | {'longHelp', unicode:chardata()}<br />
+%% | {'data', wx:wx_object()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec addTool(This, Toolid, Bitmap, BmpDisabled, Toggle, XPos) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(), Toggle::boolean(), XPos::integer();
(This, Toolid, Label, Bitmap, BmpDisabled, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(),
- Option :: {kind, wx:wx_enum()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}
- | {data, wx:wx_object()}.
+ Option :: {'kind', wx:wx_enum()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}
+ | {'data', wx:wx_object()}.
addTool(This,Toolid,Bitmap,BmpDisabled,Toggle,XPos)
when is_record(This, wx_ref),is_integer(Toolid),is_record(Bitmap, wx_ref),is_record(BmpDisabled, wx_ref),is_boolean(Toggle),is_integer(XPos) ->
@@ -254,10 +254,10 @@ addTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Label,#wx_ref{type=BitmapT,ref=Bi
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbaraddtool">external documentation</a>.
-spec addTool(This, Toolid, Bitmap, BmpDisabled, Toggle, XPos, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(), Toggle::boolean(), XPos::integer(),
- Option :: {yPos, integer()}
- | {clientData, wx:wx_object()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}.
+ Option :: {'yPos', integer()}
+ | {'clientData', wx:wx_object()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}.
addTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,#wx_ref{type=BitmapT,ref=BitmapRef},#wx_ref{type=BmpDisabledT,ref=BmpDisabledRef},Toggle,XPos, Options)
when is_integer(Toolid),is_boolean(Toggle),is_integer(XPos),is_list(Options) ->
?CLASS(ThisT,wxToolBar),
@@ -283,10 +283,10 @@ addCheckTool(This,Toolid,Label,Bitmap)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbaraddchecktool">external documentation</a>.
-spec addCheckTool(This, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {bmpDisabled, wxBitmap:wxBitmap()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}
- | {data, wx:wx_object()}.
+ Option :: {'bmpDisabled', wxBitmap:wxBitmap()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}
+ | {'data', wx:wx_object()}.
addCheckTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Label,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Toolid),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxToolBar),
@@ -312,10 +312,10 @@ addRadioTool(This,Toolid,Label,Bitmap)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbaraddradiotool">external documentation</a>.
-spec addRadioTool(This, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {bmpDisabled, wxBitmap:wxBitmap()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}
- | {data, wx:wx_object()}.
+ Option :: {'bmpDisabled', wxBitmap:wxBitmap()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}
+ | {'data', wx:wx_object()}.
addRadioTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Label,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Toolid),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxToolBar),
@@ -366,7 +366,7 @@ deleteToolByPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarenabletool">external documentation</a>.
--spec enableTool(This, Toolid, Enable) -> ok when
+-spec enableTool(This, Toolid, Enable) -> 'ok' when
This::wxToolBar(), Toolid::integer(), Enable::boolean().
enableTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Enable)
when is_integer(Toolid),is_boolean(Enable) ->
@@ -527,22 +527,22 @@ insertTool(This,Pos,Toolid,Bitmap)
%% <br /> Also:<br />
%% insertTool(This, Pos, Toolid, Bitmap, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Pos::integer(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(),<br />
-%% Option :: {bmpDisabled, wxBitmap:wxBitmap()}<br />
-%% | {toggle, boolean()}<br />
-%% | {clientData, wx:wx_object()}<br />
-%% | {shortHelp, unicode:chardata()}<br />
-%% | {longHelp, unicode:chardata()}.<br />
+%% Option :: {'bmpDisabled', wxBitmap:wxBitmap()}<br />
+%% | {'toggle', boolean()}<br />
+%% | {'clientData', wx:wx_object()}<br />
+%% | {'shortHelp', unicode:chardata()}<br />
+%% | {'longHelp', unicode:chardata()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec insertTool(This, Pos, Toolid, Label, Bitmap) -> wx:wx_object() when
This::wxToolBar(), Pos::integer(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap();
(This, Pos, Toolid, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Pos::integer(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {bmpDisabled, wxBitmap:wxBitmap()}
- | {toggle, boolean()}
- | {clientData, wx:wx_object()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}.
+ Option :: {'bmpDisabled', wxBitmap:wxBitmap()}
+ | {'toggle', boolean()}
+ | {'clientData', wx:wx_object()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}.
insertTool(This,Pos,Toolid,Label,Bitmap)
when is_record(This, wx_ref),is_integer(Pos),is_integer(Toolid),is_list(Label),is_record(Bitmap, wx_ref) ->
@@ -565,11 +565,11 @@ insertTool(#wx_ref{type=ThisT,ref=ThisRef},Pos,Toolid,#wx_ref{type=BitmapT,ref=B
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec insertTool(This, Pos, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Pos::integer(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {bmpDisabled, wxBitmap:wxBitmap()}
- | {kind, wx:wx_enum()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}
- | {clientData, wx:wx_object()}.
+ Option :: {'bmpDisabled', wxBitmap:wxBitmap()}
+ | {'kind', wx:wx_enum()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}
+ | {'clientData', wx:wx_object()}.
insertTool(#wx_ref{type=ThisT,ref=ThisRef},Pos,Toolid,Label,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Pos),is_integer(Toolid),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxToolBar),
@@ -603,7 +603,7 @@ removeTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid)
<<ThisRef:32/?UI,Toolid:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsetmargins">external documentation</a>.
--spec setMargins(This, X, Y) -> ok when
+-spec setMargins(This, X, Y) -> 'ok' when
This::wxToolBar(), X::integer(), Y::integer().
setMargins(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -612,7 +612,7 @@ setMargins(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoolbitmapsize">external documentation</a>.
--spec setToolBitmapSize(This, Size) -> ok when
+-spec setToolBitmapSize(This, Size) -> 'ok' when
This::wxToolBar(), Size::{W::integer(), H::integer()}.
setToolBitmapSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -621,7 +621,7 @@ setToolBitmapSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoollonghelp">external documentation</a>.
--spec setToolLongHelp(This, Toolid, HelpString) -> ok when
+-spec setToolLongHelp(This, Toolid, HelpString) -> 'ok' when
This::wxToolBar(), Toolid::integer(), HelpString::unicode:chardata().
setToolLongHelp(#wx_ref{type=ThisT,ref=ThisRef},Toolid,HelpString)
when is_integer(Toolid),is_list(HelpString) ->
@@ -631,7 +631,7 @@ setToolLongHelp(#wx_ref{type=ThisT,ref=ThisRef},Toolid,HelpString)
<<ThisRef:32/?UI,Toolid:32/?UI,(byte_size(HelpString_UC)):32/?UI,(HelpString_UC)/binary, 0:(((8- ((4+byte_size(HelpString_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoolpacking">external documentation</a>.
--spec setToolPacking(This, Packing) -> ok when
+-spec setToolPacking(This, Packing) -> 'ok' when
This::wxToolBar(), Packing::integer().
setToolPacking(#wx_ref{type=ThisT,ref=ThisRef},Packing)
when is_integer(Packing) ->
@@ -640,7 +640,7 @@ setToolPacking(#wx_ref{type=ThisT,ref=ThisRef},Packing)
<<ThisRef:32/?UI,Packing:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoolshorthelp">external documentation</a>.
--spec setToolShortHelp(This, Id, HelpString) -> ok when
+-spec setToolShortHelp(This, Id, HelpString) -> 'ok' when
This::wxToolBar(), Id::integer(), HelpString::unicode:chardata().
setToolShortHelp(#wx_ref{type=ThisT,ref=ThisRef},Id,HelpString)
when is_integer(Id),is_list(HelpString) ->
@@ -650,7 +650,7 @@ setToolShortHelp(#wx_ref{type=ThisT,ref=ThisRef},Id,HelpString)
<<ThisRef:32/?UI,Id:32/?UI,(byte_size(HelpString_UC)):32/?UI,(HelpString_UC)/binary, 0:(((8- ((4+byte_size(HelpString_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoolseparation">external documentation</a>.
--spec setToolSeparation(This, Separation) -> ok when
+-spec setToolSeparation(This, Separation) -> 'ok' when
This::wxToolBar(), Separation::integer().
setToolSeparation(#wx_ref{type=ThisT,ref=ThisRef},Separation)
when is_integer(Separation) ->
@@ -659,7 +659,7 @@ setToolSeparation(#wx_ref{type=ThisT,ref=ThisRef},Separation)
<<ThisRef:32/?UI,Separation:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbartoggletool">external documentation</a>.
--spec toggleTool(This, Toolid, Toggle) -> ok when
+-spec toggleTool(This, Toolid, Toggle) -> 'ok' when
This::wxToolBar(), Toolid::integer(), Toggle::boolean().
toggleTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Toggle)
when is_integer(Toolid),is_boolean(Toggle) ->
diff --git a/lib/wx/src/gen/wxToolTip.erl b/lib/wx/src/gen/wxToolTip.erl
index b462dac72a..163e764d8c 100644
--- a/lib/wx/src/gen/wxToolTip.erl
+++ b/lib/wx/src/gen/wxToolTip.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxToolTip() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtooltip.html#wxtooltipenable">external documentation</a>.
--spec enable(Flag) -> ok when
+-spec enable(Flag) -> 'ok' when
Flag::boolean().
enable(Flag)
when is_boolean(Flag) ->
@@ -44,7 +44,7 @@ enable(Flag)
<<(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtooltip.html#wxtooltipsetdelay">external documentation</a>.
--spec setDelay(Msecs) -> ok when
+-spec setDelay(Msecs) -> 'ok' when
Msecs::integer().
setDelay(Msecs)
when is_integer(Msecs) ->
@@ -61,7 +61,7 @@ new(Tip)
<<(byte_size(Tip_UC)):32/?UI,(Tip_UC)/binary, 0:(((8- ((4+byte_size(Tip_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtooltip.html#wxtooltipsettip">external documentation</a>.
--spec setTip(This, Tip) -> ok when
+-spec setTip(This, Tip) -> 'ok' when
This::wxToolTip(), Tip::unicode:chardata().
setTip(#wx_ref{type=ThisT,ref=ThisRef},Tip)
when is_list(Tip) ->
@@ -87,7 +87,7 @@ getWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxToolTip()) -> ok.
+-spec destroy(This::wxToolTip()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxToolTip),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxToolbook.erl b/lib/wx/src/gen/wxToolbook.erl
index cf77aefd8a..92dcbc726b 100644
--- a/lib/wx/src/gen/wxToolbook.erl
+++ b/lib/wx/src/gen/wxToolbook.erl
@@ -101,9 +101,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookwxtoolbook">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxToolbook() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,8 +126,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxToolbook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxToolbook),
@@ -141,7 +141,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxToolbook().
advanceSelection(This)
@@ -149,9 +149,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxToolbook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxToolbook),
@@ -162,7 +162,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxToolbook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxToolbook),
@@ -181,9 +181,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxToolbook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxToolbook),
@@ -302,8 +302,8 @@ insertPage(This,N,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookinsertpage">external documentation</a>.
-spec insertPage(This, N, Page, Text, [Option]) -> boolean() when
This::wxToolbook(), N::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(N),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxToolbook),
@@ -317,7 +317,7 @@ insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Tex
<<ThisRef:32/?UI,N:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxToolbook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxToolbook),
@@ -326,7 +326,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxToolbook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -372,7 +372,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxToolbook()) -> ok.
+-spec destroy(This::wxToolbook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxToolbook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxTopLevelWindow.erl b/lib/wx/src/gen/wxTopLevelWindow.erl
index 72813b0073..6ba81691c7 100644
--- a/lib/wx/src/gen/wxTopLevelWindow.erl
+++ b/lib/wx/src/gen/wxTopLevelWindow.erl
@@ -114,7 +114,7 @@ isActive(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv iconize(This, [])
--spec iconize(This) -> ok when
+-spec iconize(This) -> 'ok' when
This::wxTopLevelWindow().
iconize(This)
@@ -122,9 +122,9 @@ iconize(This)
iconize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowiconize">external documentation</a>.
--spec iconize(This, [Option]) -> ok when
+-spec iconize(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {iconize, boolean()}.
+ Option :: {'iconize', boolean()}.
iconize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -159,7 +159,7 @@ isMaximized(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv maximize(This, [])
--spec maximize(This) -> ok when
+-spec maximize(This) -> 'ok' when
This::wxTopLevelWindow().
maximize(This)
@@ -167,9 +167,9 @@ maximize(This)
maximize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowmaximize">external documentation</a>.
--spec maximize(This, [Option]) -> ok when
+-spec maximize(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {maximize, boolean()}.
+ Option :: {'maximize', boolean()}.
maximize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -180,7 +180,7 @@ maximize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv requestUserAttention(This, [])
--spec requestUserAttention(This) -> ok when
+-spec requestUserAttention(This) -> 'ok' when
This::wxTopLevelWindow().
requestUserAttention(This)
@@ -188,9 +188,9 @@ requestUserAttention(This)
requestUserAttention(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowrequestuserattention">external documentation</a>.
--spec requestUserAttention(This, [Option]) -> ok when
+-spec requestUserAttention(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
requestUserAttention(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -201,7 +201,7 @@ requestUserAttention(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowseticon">external documentation</a>.
--spec setIcon(This, Icon) -> ok when
+-spec setIcon(This, Icon) -> 'ok' when
This::wxTopLevelWindow(), Icon::wxIcon:wxIcon().
setIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -210,7 +210,7 @@ setIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}) ->
<<ThisRef:32/?UI,IconRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowseticons">external documentation</a>.
--spec setIcons(This, Icons) -> ok when
+-spec setIcons(This, Icons) -> 'ok' when
This::wxTopLevelWindow(), Icons::wxIconBundle:wxIconBundle().
setIcons(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconsT,ref=IconsRef}) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -219,7 +219,7 @@ setIcons(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconsT,ref=IconsRef}) ->
<<ThisRef:32/?UI,IconsRef:32/?UI>>).
%% @equiv centerOnScreen(This, [])
--spec centerOnScreen(This) -> ok when
+-spec centerOnScreen(This) -> 'ok' when
This::wxTopLevelWindow().
centerOnScreen(This)
@@ -227,9 +227,9 @@ centerOnScreen(This)
centerOnScreen(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowcenteronscreen">external documentation</a>.
--spec centerOnScreen(This, [Option]) -> ok when
+-spec centerOnScreen(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centerOnScreen(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -240,7 +240,7 @@ centerOnScreen(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv centreOnScreen(This, [])
--spec centreOnScreen(This) -> ok when
+-spec centreOnScreen(This) -> 'ok' when
This::wxTopLevelWindow().
centreOnScreen(This)
@@ -248,9 +248,9 @@ centreOnScreen(This)
centreOnScreen(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowcentreonscreen">external documentation</a>.
--spec centreOnScreen(This, [Option]) -> ok when
+-spec centreOnScreen(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centreOnScreen(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -270,7 +270,7 @@ setShape(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RegionT,ref=RegionRef}) ->
<<ThisRef:32/?UI,RegionRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowsettitle">external documentation</a>.
--spec setTitle(This, Title) -> ok when
+-spec setTitle(This, Title) -> 'ok' when
This::wxTopLevelWindow(), Title::unicode:chardata().
setTitle(#wx_ref{type=ThisT,ref=ThisRef},Title)
when is_list(Title) ->
@@ -290,7 +290,7 @@ showFullScreen(This,Show)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowshowfullscreen">external documentation</a>.
-spec showFullScreen(This, Show, [Option]) -> boolean() when
This::wxTopLevelWindow(), Show::boolean(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
showFullScreen(#wx_ref{type=ThisT,ref=ThisRef},Show, Options)
when is_boolean(Show),is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
diff --git a/lib/wx/src/gen/wxTreeCtrl.erl b/lib/wx/src/gen/wxTreeCtrl.erl
index 43dee9107d..97b43309ad 100644
--- a/lib/wx/src/gen/wxTreeCtrl.erl
+++ b/lib/wx/src/gen/wxTreeCtrl.erl
@@ -117,11 +117,11 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlwxtreectrl">external documentation</a>.
-spec new(Parent, [Option]) -> wxTreeCtrl() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -146,9 +146,9 @@ addRoot(This,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrladdroot">external documentation</a>.
-spec addRoot(This, Text, [Option]) -> integer() when
This::wxTreeCtrl(), Text::unicode:chardata(),
- Option :: {image, integer()}
- | {selectedImage, integer()}
- | {data, term()}.
+ Option :: {'image', integer()}
+ | {'selectedImage', integer()}
+ | {'data', term()}.
addRoot(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -172,9 +172,9 @@ appendItem(This,Parent,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlappenditem">external documentation</a>.
-spec appendItem(This, Parent, Text, [Option]) -> integer() when
This::wxTreeCtrl(), Parent::integer(), Text::unicode:chardata(),
- Option :: {image, integer()}
- | {selectedImage, integer()}
- | {data, term()}.
+ Option :: {'image', integer()}
+ | {'selectedImage', integer()}
+ | {'data', term()}.
appendItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Text, Options)
when is_integer(Parent),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -188,7 +188,7 @@ appendItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Text, Options)
<<ThisRef:32/?UI,0:32,Parent:64/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxTreeCtrl(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -197,7 +197,7 @@ assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=Imag
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlassignstateimagelist">external documentation</a>.
--spec assignStateImageList(This, ImageList) -> ok when
+-spec assignStateImageList(This, ImageList) -> 'ok' when
This::wxTreeCtrl(), ImageList::wxImageList:wxImageList().
assignStateImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -206,7 +206,7 @@ assignStateImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlcollapse">external documentation</a>.
--spec collapse(This, Item) -> ok when
+-spec collapse(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
collapse(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -215,7 +215,7 @@ collapse(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlcollapseandreset">external documentation</a>.
--spec collapseAndReset(This, Item) -> ok when
+-spec collapseAndReset(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
collapseAndReset(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -234,11 +234,11 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxTreeCtrl(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -254,7 +254,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrldelete">external documentation</a>.
--spec delete(This, Item) -> ok when
+-spec delete(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
delete(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -263,7 +263,7 @@ delete(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrldeleteallitems">external documentation</a>.
--spec deleteAllItems(This) -> ok when
+-spec deleteAllItems(This) -> 'ok' when
This::wxTreeCtrl().
deleteAllItems(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -271,7 +271,7 @@ deleteAllItems(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrldeletechildren">external documentation</a>.
--spec deleteChildren(This, Item) -> ok when
+-spec deleteChildren(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
deleteChildren(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -289,7 +289,7 @@ editLabel(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlensurevisible">external documentation</a>.
--spec ensureVisible(This, Item) -> ok when
+-spec ensureVisible(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
ensureVisible(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -298,7 +298,7 @@ ensureVisible(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlexpand">external documentation</a>.
--spec expand(This, Item) -> ok when
+-spec expand(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
expand(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -319,7 +319,7 @@ getBoundingRect(This,Item)
-spec getBoundingRect(This, Item, [Option]) -> Result when
Result :: {Res ::boolean(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}},
This::wxTreeCtrl(), Item::integer(),
- Option :: {textOnly, boolean()}.
+ Option :: {'textOnly', boolean()}.
getBoundingRect(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -340,7 +340,7 @@ getChildrenCount(This,Item)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlgetchildrencount">external documentation</a>.
-spec getChildrenCount(This, Item, [Option]) -> integer() when
This::wxTreeCtrl(), Item::integer(),
- Option :: {recursively, boolean()}.
+ Option :: {'recursively', boolean()}.
getChildrenCount(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -450,7 +450,7 @@ getItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item)
%%<br /> Which = ?wxTreeItemIcon_Normal | ?wxTreeItemIcon_Selected | ?wxTreeItemIcon_Expanded | ?wxTreeItemIcon_SelectedExpanded | ?wxTreeItemIcon_Max
-spec getItemImage(This, Item, [Option]) -> integer() when
This::wxTreeCtrl(), Item::integer(),
- Option :: {which, wx:wx_enum()}.
+ Option :: {'which', wx:wx_enum()}.
getItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -586,9 +586,9 @@ insertItem(This,Parent,Pos,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlinsertitem">external documentation</a>.
-spec insertItem(This, Parent, Pos, Text, [Option]) -> integer() when
This::wxTreeCtrl(), Parent::integer(), Pos::integer(), Text::unicode:chardata(),
- Option :: {image, integer()}
- | {selImage, integer()}
- | {data, term()}.
+ Option :: {'image', integer()}
+ | {'selImage', integer()}
+ | {'data', term()}.
insertItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Pos,Text, Options)
when is_integer(Parent),is_integer(Pos),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -665,9 +665,9 @@ prependItem(This,Parent,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlprependitem">external documentation</a>.
-spec prependItem(This, Parent, Text, [Option]) -> integer() when
This::wxTreeCtrl(), Parent::integer(), Text::unicode:chardata(),
- Option :: {image, integer()}
- | {selectedImage, integer()}
- | {data, term()}.
+ Option :: {'image', integer()}
+ | {'selectedImage', integer()}
+ | {'data', term()}.
prependItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Text, Options)
when is_integer(Parent),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -681,7 +681,7 @@ prependItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Text, Options)
<<ThisRef:32/?UI,0:32,Parent:64/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlscrollto">external documentation</a>.
--spec scrollTo(This, Item) -> ok when
+-spec scrollTo(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
scrollTo(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -690,7 +690,7 @@ scrollTo(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlselectitem">external documentation</a>.
--spec selectItem(This, Item) -> ok when
+-spec selectItem(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
selectItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -699,9 +699,9 @@ selectItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlselectitem">external documentation</a>.
--spec selectItem(This, Item, [Option]) -> ok when
+-spec selectItem(This, Item, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(),
- Option :: {select, boolean()}.
+ Option :: {'select', boolean()}.
selectItem(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -712,7 +712,7 @@ selectItem(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetindent">external documentation</a>.
--spec setIndent(This, Indent) -> ok when
+-spec setIndent(This, Indent) -> 'ok' when
This::wxTreeCtrl(), Indent::integer().
setIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
when is_integer(Indent) ->
@@ -721,7 +721,7 @@ setIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
<<ThisRef:32/?UI,Indent:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxTreeCtrl(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -730,7 +730,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitembackgroundcolour">external documentation</a>.
--spec setItemBackgroundColour(This, Item, Col) -> ok when
+-spec setItemBackgroundColour(This, Item, Col) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Col::wx:wx_colour().
setItemBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
when is_integer(Item),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -739,7 +739,7 @@ setItemBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
<<ThisRef:32/?UI,0:32,Item:64/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @equiv setItemBold(This,Item, [])
--spec setItemBold(This, Item) -> ok when
+-spec setItemBold(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
setItemBold(This,Item)
@@ -747,9 +747,9 @@ setItemBold(This,Item)
setItemBold(This,Item, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitembold">external documentation</a>.
--spec setItemBold(This, Item, [Option]) -> ok when
+-spec setItemBold(This, Item, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(),
- Option :: {bold, boolean()}.
+ Option :: {'bold', boolean()}.
setItemBold(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -760,7 +760,7 @@ setItemBold(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemdata">external documentation</a>.
--spec setItemData(This, Item, Data) -> ok when
+-spec setItemData(This, Item, Data) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Data::term().
setItemData(#wx_ref{type=ThisT,ref=ThisRef},Item,Data)
when is_integer(Item) ->
@@ -770,7 +770,7 @@ setItemData(#wx_ref{type=ThisT,ref=ThisRef},Item,Data)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @equiv setItemDropHighlight(This,Item, [])
--spec setItemDropHighlight(This, Item) -> ok when
+-spec setItemDropHighlight(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
setItemDropHighlight(This,Item)
@@ -778,9 +778,9 @@ setItemDropHighlight(This,Item)
setItemDropHighlight(This,Item, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemdrophighlight">external documentation</a>.
--spec setItemDropHighlight(This, Item, [Option]) -> ok when
+-spec setItemDropHighlight(This, Item, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(),
- Option :: {highlight, boolean()}.
+ Option :: {'highlight', boolean()}.
setItemDropHighlight(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -791,7 +791,7 @@ setItemDropHighlight(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemfont">external documentation</a>.
--spec setItemFont(This, Item, Font) -> ok when
+-spec setItemFont(This, Item, Font) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Font::wxFont:wxFont().
setItemFont(#wx_ref{type=ThisT,ref=ThisRef},Item,#wx_ref{type=FontT,ref=FontRef})
when is_integer(Item) ->
@@ -801,7 +801,7 @@ setItemFont(#wx_ref{type=ThisT,ref=ThisRef},Item,#wx_ref{type=FontT,ref=FontRef}
<<ThisRef:32/?UI,0:32,Item:64/?UI,FontRef:32/?UI>>).
%% @equiv setItemHasChildren(This,Item, [])
--spec setItemHasChildren(This, Item) -> ok when
+-spec setItemHasChildren(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
setItemHasChildren(This,Item)
@@ -809,9 +809,9 @@ setItemHasChildren(This,Item)
setItemHasChildren(This,Item, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemhaschildren">external documentation</a>.
--spec setItemHasChildren(This, Item, [Option]) -> ok when
+-spec setItemHasChildren(This, Item, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(),
- Option :: {has, boolean()}.
+ Option :: {'has', boolean()}.
setItemHasChildren(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -822,7 +822,7 @@ setItemHasChildren(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemimage">external documentation</a>.
--spec setItemImage(This, Item, Image) -> ok when
+-spec setItemImage(This, Item, Image) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Image::integer().
setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image)
when is_integer(Item),is_integer(Image) ->
@@ -832,9 +832,9 @@ setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemimage">external documentation</a>.
%%<br /> Which = ?wxTreeItemIcon_Normal | ?wxTreeItemIcon_Selected | ?wxTreeItemIcon_Expanded | ?wxTreeItemIcon_SelectedExpanded | ?wxTreeItemIcon_Max
--spec setItemImage(This, Item, Image, [Option]) -> ok when
+-spec setItemImage(This, Item, Image, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Image::integer(),
- Option :: {which, wx:wx_enum()}.
+ Option :: {'which', wx:wx_enum()}.
setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image, Options)
when is_integer(Item),is_integer(Image),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -845,7 +845,7 @@ setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI,Image:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemtext">external documentation</a>.
--spec setItemText(This, Item, Text) -> ok when
+-spec setItemText(This, Item, Text) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Text::unicode:chardata().
setItemText(#wx_ref{type=ThisT,ref=ThisRef},Item,Text)
when is_integer(Item),is_list(Text) ->
@@ -855,7 +855,7 @@ setItemText(#wx_ref{type=ThisT,ref=ThisRef},Item,Text)
<<ThisRef:32/?UI,0:32,Item:64/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemtextcolour">external documentation</a>.
--spec setItemTextColour(This, Item, Col) -> ok when
+-spec setItemTextColour(This, Item, Col) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Col::wx:wx_colour().
setItemTextColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
when is_integer(Item),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -864,7 +864,7 @@ setItemTextColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
<<ThisRef:32/?UI,0:32,Item:64/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetstateimagelist">external documentation</a>.
--spec setStateImageList(This, ImageList) -> ok when
+-spec setStateImageList(This, ImageList) -> 'ok' when
This::wxTreeCtrl(), ImageList::wxImageList:wxImageList().
setStateImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -873,7 +873,7 @@ setStateImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=Im
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetwindowstyle">external documentation</a>.
--spec setWindowStyle(This, Styles) -> ok when
+-spec setWindowStyle(This, Styles) -> 'ok' when
This::wxTreeCtrl(), Styles::integer().
setWindowStyle(#wx_ref{type=ThisT,ref=ThisRef},Styles)
when is_integer(Styles) ->
@@ -882,7 +882,7 @@ setWindowStyle(#wx_ref{type=ThisT,ref=ThisRef},Styles)
<<ThisRef:32/?UI,Styles:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsortchildren">external documentation</a>.
--spec sortChildren(This, Item) -> ok when
+-spec sortChildren(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
sortChildren(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -891,7 +891,7 @@ sortChildren(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrltoggle">external documentation</a>.
--spec toggle(This, Item) -> ok when
+-spec toggle(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
toggle(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -900,7 +900,7 @@ toggle(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrltoggleitemselection">external documentation</a>.
--spec toggleItemSelection(This, Item) -> ok when
+-spec toggleItemSelection(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
toggleItemSelection(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -909,7 +909,7 @@ toggleItemSelection(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlunselect">external documentation</a>.
--spec unselect(This) -> ok when
+-spec unselect(This) -> 'ok' when
This::wxTreeCtrl().
unselect(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -917,7 +917,7 @@ unselect(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlunselectall">external documentation</a>.
--spec unselectAll(This) -> ok when
+-spec unselectAll(This) -> 'ok' when
This::wxTreeCtrl().
unselectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -925,7 +925,7 @@ unselectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlunselectitem">external documentation</a>.
--spec unselectItem(This, Item) -> ok when
+-spec unselectItem(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
unselectItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -934,7 +934,7 @@ unselectItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTreeCtrl()) -> ok.
+-spec destroy(This::wxTreeCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTreeCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxTreeEvent.erl b/lib/wx/src/gen/wxTreeEvent.erl
index 54cdf9ef66..41e86fe41f 100644
--- a/lib/wx/src/gen/wxTreeEvent.erl
+++ b/lib/wx/src/gen/wxTreeEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -108,7 +108,7 @@ isEditCancelled(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreeevent.html#wxtreeeventsettooltip">external documentation</a>.
--spec setToolTip(This, ToolTip) -> ok when
+-spec setToolTip(This, ToolTip) -> 'ok' when
This::wxTreeEvent(), ToolTip::unicode:chardata().
setToolTip(#wx_ref{type=ThisT,ref=ThisRef},ToolTip)
when is_list(ToolTip) ->
diff --git a/lib/wx/src/gen/wxTreebook.erl b/lib/wx/src/gen/wxTreebook.erl
index 1900f47289..5d3c177f7e 100644
--- a/lib/wx/src/gen/wxTreebook.erl
+++ b/lib/wx/src/gen/wxTreebook.erl
@@ -102,9 +102,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookwxtreebook">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxTreebook() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -127,8 +127,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxTreebook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -142,7 +142,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxTreebook().
advanceSelection(This)
@@ -150,9 +150,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxTreebook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -163,7 +163,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxTreebook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreebook),
@@ -182,9 +182,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxTreebook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -293,7 +293,7 @@ expandNode(This,Pos)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookexpandnode">external documentation</a>.
-spec expandNode(This, Pos, [Option]) -> boolean() when
This::wxTreebook(), Pos::integer(),
- Option :: {expand, boolean()}.
+ Option :: {'expand', boolean()}.
expandNode(#wx_ref{type=ThisT,ref=ThisRef},Pos, Options)
when is_integer(Pos),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -333,8 +333,8 @@ insertPage(This,Pos,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookinsertpage">external documentation</a>.
-spec insertPage(This, Pos, Page, Text, [Option]) -> boolean() when
This::wxTreebook(), Pos::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(Pos),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -358,8 +358,8 @@ insertSubPage(This,Pos,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookinsertsubpage">external documentation</a>.
-spec insertSubPage(This, Pos, Page, Text, [Option]) -> boolean() when
This::wxTreebook(), Pos::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertSubPage(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(Pos),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -373,7 +373,7 @@ insertSubPage(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=PageT,ref=PageRef
<<ThisRef:32/?UI,Pos:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxTreebook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreebook),
@@ -382,7 +382,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxTreebook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -428,7 +428,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTreebook()) -> ok.
+-spec destroy(This::wxTreebook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTreebook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxUpdateUIEvent.erl b/lib/wx/src/gen/wxUpdateUIEvent.erl
index 5d4fb6e2b0..fec42ed8eb 100644
--- a/lib/wx/src/gen/wxUpdateUIEvent.erl
+++ b/lib/wx/src/gen/wxUpdateUIEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -59,7 +59,7 @@ canUpdate(#wx_ref{type=WinT,ref=WinRef}) ->
<<WinRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventcheck">external documentation</a>.
--spec check(This, Check) -> ok when
+-spec check(This, Check) -> 'ok' when
This::wxUpdateUIEvent(), Check::boolean().
check(#wx_ref{type=ThisT,ref=ThisRef},Check)
when is_boolean(Check) ->
@@ -68,7 +68,7 @@ check(#wx_ref{type=ThisT,ref=ThisRef},Check)
<<ThisRef:32/?UI,(wxe_util:from_bool(Check)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventenable">external documentation</a>.
--spec enable(This, Enable) -> ok when
+-spec enable(This, Enable) -> 'ok' when
This::wxUpdateUIEvent(), Enable::boolean().
enable(#wx_ref{type=ThisT,ref=ThisRef},Enable)
when is_boolean(Enable) ->
@@ -77,7 +77,7 @@ enable(#wx_ref{type=ThisT,ref=ThisRef},Enable)
<<ThisRef:32/?UI,(wxe_util:from_bool(Enable)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventshow">external documentation</a>.
--spec show(This, Show) -> ok when
+-spec show(This, Show) -> 'ok' when
This::wxUpdateUIEvent(), Show::boolean().
show(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -163,14 +163,14 @@ getUpdateInterval() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventresetupdatetime">external documentation</a>.
--spec resetUpdateTime() -> ok.
+-spec resetUpdateTime() -> 'ok'.
resetUpdateTime() ->
wxe_util:cast(?wxUpdateUIEvent_ResetUpdateTime,
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventsetmode">external documentation</a>.
%%<br /> Mode = ?wxUPDATE_UI_PROCESS_ALL | ?wxUPDATE_UI_PROCESS_SPECIFIED
--spec setMode(Mode) -> ok when
+-spec setMode(Mode) -> 'ok' when
Mode::wx:wx_enum().
setMode(Mode)
when is_integer(Mode) ->
@@ -178,7 +178,7 @@ setMode(Mode)
<<Mode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventsettext">external documentation</a>.
--spec setText(This, Text) -> ok when
+-spec setText(This, Text) -> 'ok' when
This::wxUpdateUIEvent(), Text::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -188,7 +188,7 @@ setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventsetupdateinterval">external documentation</a>.
--spec setUpdateInterval(UpdateInterval) -> ok when
+-spec setUpdateInterval(UpdateInterval) -> 'ok' when
UpdateInterval::integer().
setUpdateInterval(UpdateInterval)
when is_integer(UpdateInterval) ->
diff --git a/lib/wx/src/gen/wxWindow.erl b/lib/wx/src/gen/wxWindow.erl
index a8a61d547b..4ac7cc5d75 100644
--- a/lib/wx/src/gen/wxWindow.erl
+++ b/lib/wx/src/gen/wxWindow.erl
@@ -93,9 +93,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowwxwindow">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxWindow() when
Parent::wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -108,7 +108,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
<<ParentRef:32/?UI,Id:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcachebestsize">external documentation</a>.
--spec cacheBestSize(This, Size) -> ok when
+-spec cacheBestSize(This, Size) -> 'ok' when
This::wxWindow(), Size::{W::integer(), H::integer()}.
cacheBestSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -117,7 +117,7 @@ cacheBestSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcapturemouse">external documentation</a>.
--spec captureMouse(This) -> ok when
+-spec captureMouse(This) -> 'ok' when
This::wxWindow().
captureMouse(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -125,7 +125,7 @@ captureMouse(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv center(This, [])
--spec center(This) -> ok when
+-spec center(This) -> 'ok' when
This::wxWindow().
center(This)
@@ -133,9 +133,9 @@ center(This)
center(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcenter">external documentation</a>.
--spec center(This, [Option]) -> ok when
+-spec center(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
center(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -146,7 +146,7 @@ center(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv centerOnParent(This, [])
--spec centerOnParent(This) -> ok when
+-spec centerOnParent(This) -> 'ok' when
This::wxWindow().
centerOnParent(This)
@@ -154,9 +154,9 @@ centerOnParent(This)
centerOnParent(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcenteronparent">external documentation</a>.
--spec centerOnParent(This, [Option]) -> ok when
+-spec centerOnParent(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centerOnParent(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -167,7 +167,7 @@ centerOnParent(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv centre(This, [])
--spec centre(This) -> ok when
+-spec centre(This) -> 'ok' when
This::wxWindow().
centre(This)
@@ -175,9 +175,9 @@ centre(This)
centre(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcentre">external documentation</a>.
--spec centre(This, [Option]) -> ok when
+-spec centre(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centre(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -188,7 +188,7 @@ centre(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv centreOnParent(This, [])
--spec centreOnParent(This) -> ok when
+-spec centreOnParent(This) -> 'ok' when
This::wxWindow().
centreOnParent(This)
@@ -196,9 +196,9 @@ centreOnParent(This)
centreOnParent(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcentreonparent">external documentation</a>.
--spec centreOnParent(This, [Option]) -> ok when
+-spec centreOnParent(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centreOnParent(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -209,7 +209,7 @@ centreOnParent(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowclearbackground">external documentation</a>.
--spec clearBackground(This) -> ok when
+-spec clearBackground(This) -> 'ok' when
This::wxWindow().
clearBackground(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -245,7 +245,7 @@ close(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowclose">external documentation</a>.
-spec close(This, [Option]) -> boolean() when
This::wxWindow(),
- Option :: {force, boolean()}.
+ Option :: {'force', boolean()}.
close(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -308,7 +308,7 @@ enable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowenable">external documentation</a>.
-spec enable(This, [Option]) -> boolean() when
This::wxWindow(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -356,7 +356,7 @@ findWindowById(Winid)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfindwindowbyid">external documentation</a>.
-spec findWindowById(Winid, [Option]) -> wxWindow() when
Winid::integer(),
- Option :: {parent, wxWindow()}.
+ Option :: {'parent', wxWindow()}.
findWindowById(Winid, Options)
when is_integer(Winid),is_list(Options) ->
MOpts = fun({parent, #wx_ref{type=ParentT,ref=ParentRef}}, Acc) -> ?CLASS(ParentT,wxWindow),[<<1:32/?UI,ParentRef:32/?UI>>|Acc];
@@ -376,7 +376,7 @@ findWindowByName(Name)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfindwindowbyname">external documentation</a>.
-spec findWindowByName(Name, [Option]) -> wxWindow() when
Name::unicode:chardata(),
- Option :: {parent, wxWindow()}.
+ Option :: {'parent', wxWindow()}.
findWindowByName(Name, Options)
when is_list(Name),is_list(Options) ->
Name_UC = unicode:characters_to_binary([Name,0]),
@@ -397,7 +397,7 @@ findWindowByLabel(Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfindwindowbylabel">external documentation</a>.
-spec findWindowByLabel(Label, [Option]) -> wxWindow() when
Label::unicode:chardata(),
- Option :: {parent, wxWindow()}.
+ Option :: {'parent', wxWindow()}.
findWindowByLabel(Label, Options)
when is_list(Label),is_list(Options) ->
Label_UC = unicode:characters_to_binary([Label,0]),
@@ -408,7 +408,7 @@ findWindowByLabel(Label, Options)
<<(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfit">external documentation</a>.
--spec fit(This) -> ok when
+-spec fit(This) -> 'ok' when
This::wxWindow().
fit(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -416,7 +416,7 @@ fit(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfitinside">external documentation</a>.
--spec fitInside(This) -> ok when
+-spec fitInside(This) -> 'ok' when
This::wxWindow().
fitInside(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -424,7 +424,7 @@ fitInside(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfreeze">external documentation</a>.
--spec freeze(This) -> ok when
+-spec freeze(This) -> 'ok' when
This::wxWindow().
freeze(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -726,7 +726,7 @@ getTextExtent(This,String)
-spec getTextExtent(This, String, [Option]) -> Result when
Result :: {X::integer(), Y::integer(), Descent::integer(), ExternalLeading::integer()},
This::wxWindow(), String::unicode:chardata(),
- Option :: {theFont, wxFont:wxFont()}.
+ Option :: {'theFont', wxFont:wxFont()}.
getTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String, Options)
when is_list(String),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -812,7 +812,7 @@ hide(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowinheritattributes">external documentation</a>.
--spec inheritAttributes(This) -> ok when
+-spec inheritAttributes(This) -> 'ok' when
This::wxWindow().
inheritAttributes(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -820,7 +820,7 @@ inheritAttributes(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowinitdialog">external documentation</a>.
--spec initDialog(This) -> ok when
+-spec initDialog(This) -> 'ok' when
This::wxWindow().
initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -828,7 +828,7 @@ initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowinvalidatebestsize">external documentation</a>.
--spec invalidateBestSize(This) -> ok when
+-spec invalidateBestSize(This) -> 'ok' when
This::wxWindow().
invalidateBestSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -930,7 +930,7 @@ lineUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowlower">external documentation</a>.
--spec lower(This) -> ok when
+-spec lower(This) -> 'ok' when
This::wxWindow().
lower(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -938,7 +938,7 @@ lower(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv makeModal(This, [])
--spec makeModal(This) -> ok when
+-spec makeModal(This) -> 'ok' when
This::wxWindow().
makeModal(This)
@@ -946,9 +946,9 @@ makeModal(This)
makeModal(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmakemodal">external documentation</a>.
--spec makeModal(This, [Option]) -> ok when
+-spec makeModal(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {modal, boolean()}.
+ Option :: {'modal', boolean()}.
makeModal(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -959,7 +959,7 @@ makeModal(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv move(This,Pt, [])
--spec move(This, Pt) -> ok when
+-spec move(This, Pt) -> 'ok' when
This::wxWindow(), Pt::{X::integer(), Y::integer()}.
move(This,Pt={PtX,PtY})
@@ -968,15 +968,15 @@ move(This,Pt={PtX,PtY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmove">external documentation</a>.
%% <br /> Also:<br />
-%% move(This, Pt, [Option]) -> ok when<br />
+%% move(This, Pt, [Option]) -> 'ok' when<br />
%% This::wxWindow(), Pt::{X::integer(), Y::integer()},<br />
-%% Option :: {flags, integer()}.<br />
+%% Option :: {'flags', integer()}.<br />
%%
--spec move(This, X, Y) -> ok when
+-spec move(This, X, Y) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer();
- (This, Pt, [Option]) -> ok when
+ (This, Pt, [Option]) -> 'ok' when
This::wxWindow(), Pt::{X::integer(), Y::integer()},
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
move(This,X,Y)
when is_record(This, wx_ref),is_integer(X),is_integer(Y) ->
@@ -991,9 +991,9 @@ move(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY}, Options)
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmove">external documentation</a>.
--spec move(This, X, Y, [Option]) -> ok when
+-spec move(This, X, Y, [Option]) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
move(#wx_ref{type=ThisT,ref=ThisRef},X,Y, Options)
when is_integer(X),is_integer(Y),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1004,7 +1004,7 @@ move(#wx_ref{type=ThisT,ref=ThisRef},X,Y, Options)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmoveafterintaborder">external documentation</a>.
--spec moveAfterInTabOrder(This, Win) -> ok when
+-spec moveAfterInTabOrder(This, Win) -> 'ok' when
This::wxWindow(), Win::wxWindow().
moveAfterInTabOrder(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1013,7 +1013,7 @@ moveAfterInTabOrder(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef
<<ThisRef:32/?UI,WinRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmovebeforeintaborder">external documentation</a>.
--spec moveBeforeInTabOrder(This, Win) -> ok when
+-spec moveBeforeInTabOrder(This, Win) -> 'ok' when
This::wxWindow(), Win::wxWindow().
moveBeforeInTabOrder(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1032,7 +1032,7 @@ navigate(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindownavigate">external documentation</a>.
-spec navigate(This, [Option]) -> boolean() when
This::wxWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
navigate(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1069,7 +1069,7 @@ popEventHandler(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowpopeventhandler">external documentation</a>.
-spec popEventHandler(This, [Option]) -> wxEvtHandler:wxEvtHandler() when
This::wxWindow(),
- Option :: {deleteHandler, boolean()}.
+ Option :: {'deleteHandler', boolean()}.
popEventHandler(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1090,7 +1090,7 @@ popupMenu(This,Menu)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowpopupmenu">external documentation</a>.
-spec popupMenu(This, Menu, [Option]) -> boolean() when
This::wxWindow(), Menu::wxMenu:wxMenu(),
- Option :: {pos, {X::integer(), Y::integer()}}.
+ Option :: {'pos', {X::integer(), Y::integer()}}.
popupMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1112,7 +1112,7 @@ popupMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef},X,Y)
<<ThisRef:32/?UI,MenuRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowraise">external documentation</a>.
--spec raise(This) -> ok when
+-spec raise(This) -> 'ok' when
This::wxWindow().
raise(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1120,7 +1120,7 @@ raise(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv refresh(This, [])
--spec refresh(This) -> ok when
+-spec refresh(This) -> 'ok' when
This::wxWindow().
refresh(This)
@@ -1128,10 +1128,10 @@ refresh(This)
refresh(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowrefresh">external documentation</a>.
--spec refresh(This, [Option]) -> ok when
+-spec refresh(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {eraseBackground, boolean()}
- | {rect, {X::integer(), Y::integer(), W::integer(), H::integer()}}.
+ Option :: {'eraseBackground', boolean()}
+ | {'rect', {X::integer(), Y::integer(), W::integer(), H::integer()}}.
refresh(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1143,7 +1143,7 @@ refresh(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv refreshRect(This,Rect, [])
--spec refreshRect(This, Rect) -> ok when
+-spec refreshRect(This, Rect) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
refreshRect(This,Rect={RectX,RectY,RectW,RectH})
@@ -1151,9 +1151,9 @@ refreshRect(This,Rect={RectX,RectY,RectW,RectH})
refreshRect(This,Rect, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowrefreshrect">external documentation</a>.
--spec refreshRect(This, Rect, [Option]) -> ok when
+-spec refreshRect(This, Rect, [Option]) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()},
- Option :: {eraseBackground, boolean()}.
+ Option :: {'eraseBackground', boolean()}.
refreshRect(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}, Options)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1164,7 +1164,7 @@ refreshRect(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}, Options)
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowreleasemouse">external documentation</a>.
--spec releaseMouse(This) -> ok when
+-spec releaseMouse(This) -> 'ok' when
This::wxWindow().
releaseMouse(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1172,7 +1172,7 @@ releaseMouse(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowremovechild">external documentation</a>.
--spec removeChild(This, Child) -> ok when
+-spec removeChild(This, Child) -> 'ok' when
This::wxWindow(), Child::wxWindow().
removeChild(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ChildT,ref=ChildRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1225,7 +1225,7 @@ scrollPages(#wx_ref{type=ThisT,ref=ThisRef},Pages)
<<ThisRef:32/?UI,Pages:32/?UI>>).
%% @equiv scrollWindow(This,Dx,Dy, [])
--spec scrollWindow(This, Dx, Dy) -> ok when
+-spec scrollWindow(This, Dx, Dy) -> 'ok' when
This::wxWindow(), Dx::integer(), Dy::integer().
scrollWindow(This,Dx,Dy)
@@ -1233,9 +1233,9 @@ scrollWindow(This,Dx,Dy)
scrollWindow(This,Dx,Dy, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowscrollwindow">external documentation</a>.
--spec scrollWindow(This, Dx, Dy, [Option]) -> ok when
+-spec scrollWindow(This, Dx, Dy, [Option]) -> 'ok' when
This::wxWindow(), Dx::integer(), Dy::integer(),
- Option :: {rect, {X::integer(), Y::integer(), W::integer(), H::integer()}}.
+ Option :: {'rect', {X::integer(), Y::integer(), W::integer(), H::integer()}}.
scrollWindow(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy, Options)
when is_integer(Dx),is_integer(Dy),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1246,7 +1246,7 @@ scrollWindow(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy, Options)
<<ThisRef:32/?UI,Dx:32/?UI,Dy:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetacceleratortable">external documentation</a>.
--spec setAcceleratorTable(This, Accel) -> ok when
+-spec setAcceleratorTable(This, Accel) -> 'ok' when
This::wxWindow(), Accel::wxAcceleratorTable:wxAcceleratorTable().
setAcceleratorTable(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=AccelT,ref=AccelRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1255,7 +1255,7 @@ setAcceleratorTable(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=AccelT,ref=Acce
<<ThisRef:32/?UI,AccelRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetautolayout">external documentation</a>.
--spec setAutoLayout(This, AutoLayout) -> ok when
+-spec setAutoLayout(This, AutoLayout) -> 'ok' when
This::wxWindow(), AutoLayout::boolean().
setAutoLayout(#wx_ref{type=ThisT,ref=ThisRef},AutoLayout)
when is_boolean(AutoLayout) ->
@@ -1283,7 +1283,7 @@ setBackgroundStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetcaret">external documentation</a>.
--spec setCaret(This, Caret) -> ok when
+-spec setCaret(This, Caret) -> 'ok' when
This::wxWindow(), Caret::wxCaret:wxCaret().
setCaret(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CaretT,ref=CaretRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1293,12 +1293,12 @@ setCaret(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CaretT,ref=CaretRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetclientsize">external documentation</a>.
%% <br /> Also:<br />
-%% setClientSize(This, Rect) -> ok when<br />
+%% setClientSize(This, Rect) -> 'ok' when<br />
%% This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.<br />
%%
--spec setClientSize(This, Size) -> ok when
+-spec setClientSize(This, Size) -> 'ok' when
This::wxWindow(), Size::{W::integer(), H::integer()};
- (This, Rect) -> ok when
+ (This, Rect) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
setClientSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -1312,7 +1312,7 @@ setClientSize(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetclientsize">external documentation</a>.
--spec setClientSize(This, Width, Height) -> ok when
+-spec setClientSize(This, Width, Height) -> 'ok' when
This::wxWindow(), Width::integer(), Height::integer().
setClientSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -1321,7 +1321,7 @@ setClientSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetcontainingsizer">external documentation</a>.
--spec setContainingSizer(This, Sizer) -> ok when
+-spec setContainingSizer(This, Sizer) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer().
setContainingSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1339,7 +1339,7 @@ setCursor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CursorT,ref=CursorRef}) -
<<ThisRef:32/?UI,CursorRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetmaxsize">external documentation</a>.
--spec setMaxSize(This, MaxSize) -> ok when
+-spec setMaxSize(This, MaxSize) -> 'ok' when
This::wxWindow(), MaxSize::{W::integer(), H::integer()}.
setMaxSize(#wx_ref{type=ThisT,ref=ThisRef},{MaxSizeW,MaxSizeH})
when is_integer(MaxSizeW),is_integer(MaxSizeH) ->
@@ -1348,7 +1348,7 @@ setMaxSize(#wx_ref{type=ThisT,ref=ThisRef},{MaxSizeW,MaxSizeH})
<<ThisRef:32/?UI,MaxSizeW:32/?UI,MaxSizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetminsize">external documentation</a>.
--spec setMinSize(This, MinSize) -> ok when
+-spec setMinSize(This, MinSize) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()}.
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{MinSizeW,MinSizeH})
when is_integer(MinSizeW),is_integer(MinSizeH) ->
@@ -1357,7 +1357,7 @@ setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{MinSizeW,MinSizeH})
<<ThisRef:32/?UI,MinSizeW:32/?UI,MinSizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetownbackgroundcolour">external documentation</a>.
--spec setOwnBackgroundColour(This, Colour) -> ok when
+-spec setOwnBackgroundColour(This, Colour) -> 'ok' when
This::wxWindow(), Colour::wx:wx_colour().
setOwnBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -1366,7 +1366,7 @@ setOwnBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetownfont">external documentation</a>.
--spec setOwnFont(This, Font) -> ok when
+-spec setOwnFont(This, Font) -> 'ok' when
This::wxWindow(), Font::wxFont:wxFont().
setOwnFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1375,7 +1375,7 @@ setOwnFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetownforegroundcolour">external documentation</a>.
--spec setOwnForegroundColour(This, Colour) -> ok when
+-spec setOwnForegroundColour(This, Colour) -> 'ok' when
This::wxWindow(), Colour::wx:wx_colour().
setOwnForegroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -1384,7 +1384,7 @@ setOwnForegroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetdroptarget">external documentation</a>.
--spec setDropTarget(This, DropTarget) -> ok when
+-spec setDropTarget(This, DropTarget) -> 'ok' when
This::wxWindow(), DropTarget::wx:wx_object().
setDropTarget(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DropTargetT,ref=DropTargetRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1393,7 +1393,7 @@ setDropTarget(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DropTargetT,ref=DropT
<<ThisRef:32/?UI,DropTargetRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetextrastyle">external documentation</a>.
--spec setExtraStyle(This, ExStyle) -> ok when
+-spec setExtraStyle(This, ExStyle) -> 'ok' when
This::wxWindow(), ExStyle::integer().
setExtraStyle(#wx_ref{type=ThisT,ref=ThisRef},ExStyle)
when is_integer(ExStyle) ->
@@ -1402,7 +1402,7 @@ setExtraStyle(#wx_ref{type=ThisT,ref=ThisRef},ExStyle)
<<ThisRef:32/?UI,ExStyle:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetfocus">external documentation</a>.
--spec setFocus(This) -> ok when
+-spec setFocus(This) -> 'ok' when
This::wxWindow().
setFocus(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1410,7 +1410,7 @@ setFocus(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetfocusfromkbd">external documentation</a>.
--spec setFocusFromKbd(This) -> ok when
+-spec setFocusFromKbd(This) -> 'ok' when
This::wxWindow().
setFocusFromKbd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1436,7 +1436,7 @@ setForegroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsethelptext">external documentation</a>.
--spec setHelpText(This, Text) -> ok when
+-spec setHelpText(This, Text) -> 'ok' when
This::wxWindow(), Text::unicode:chardata().
setHelpText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -1446,7 +1446,7 @@ setHelpText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetid">external documentation</a>.
--spec setId(This, Winid) -> ok when
+-spec setId(This, Winid) -> 'ok' when
This::wxWindow(), Winid::integer().
setId(#wx_ref{type=ThisT,ref=ThisRef},Winid)
when is_integer(Winid) ->
@@ -1455,7 +1455,7 @@ setId(#wx_ref{type=ThisT,ref=ThisRef},Winid)
<<ThisRef:32/?UI,Winid:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetlabel">external documentation</a>.
--spec setLabel(This, Label) -> ok when
+-spec setLabel(This, Label) -> 'ok' when
This::wxWindow(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
when is_list(Label) ->
@@ -1465,7 +1465,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
<<ThisRef:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetname">external documentation</a>.
--spec setName(This, Name) -> ok when
+-spec setName(This, Name) -> 'ok' when
This::wxWindow(), Name::unicode:chardata().
setName(#wx_ref{type=ThisT,ref=ThisRef},Name)
when is_list(Name) ->
@@ -1475,7 +1475,7 @@ setName(#wx_ref{type=ThisT,ref=ThisRef},Name)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetpalette">external documentation</a>.
--spec setPalette(This, Pal) -> ok when
+-spec setPalette(This, Pal) -> 'ok' when
This::wxWindow(), Pal::wxPalette:wxPalette().
setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PalT,ref=PalRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1484,7 +1484,7 @@ setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PalT,ref=PalRef}) ->
<<ThisRef:32/?UI,PalRef:32/?UI>>).
%% @equiv setScrollbar(This,Orient,Pos,ThumbVisible,Range, [])
--spec setScrollbar(This, Orient, Pos, ThumbVisible, Range) -> ok when
+-spec setScrollbar(This, Orient, Pos, ThumbVisible, Range) -> 'ok' when
This::wxWindow(), Orient::integer(), Pos::integer(), ThumbVisible::integer(), Range::integer().
setScrollbar(This,Orient,Pos,ThumbVisible,Range)
@@ -1492,9 +1492,9 @@ setScrollbar(This,Orient,Pos,ThumbVisible,Range)
setScrollbar(This,Orient,Pos,ThumbVisible,Range, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetscrollbar">external documentation</a>.
--spec setScrollbar(This, Orient, Pos, ThumbVisible, Range, [Option]) -> ok when
+-spec setScrollbar(This, Orient, Pos, ThumbVisible, Range, [Option]) -> 'ok' when
This::wxWindow(), Orient::integer(), Pos::integer(), ThumbVisible::integer(), Range::integer(),
- Option :: {refresh, boolean()}.
+ Option :: {'refresh', boolean()}.
setScrollbar(#wx_ref{type=ThisT,ref=ThisRef},Orient,Pos,ThumbVisible,Range, Options)
when is_integer(Orient),is_integer(Pos),is_integer(ThumbVisible),is_integer(Range),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1505,7 +1505,7 @@ setScrollbar(#wx_ref{type=ThisT,ref=ThisRef},Orient,Pos,ThumbVisible,Range, Opti
<<ThisRef:32/?UI,Orient:32/?UI,Pos:32/?UI,ThumbVisible:32/?UI,Range:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setScrollPos(This,Orient,Pos, [])
--spec setScrollPos(This, Orient, Pos) -> ok when
+-spec setScrollPos(This, Orient, Pos) -> 'ok' when
This::wxWindow(), Orient::integer(), Pos::integer().
setScrollPos(This,Orient,Pos)
@@ -1513,9 +1513,9 @@ setScrollPos(This,Orient,Pos)
setScrollPos(This,Orient,Pos, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetscrollpos">external documentation</a>.
--spec setScrollPos(This, Orient, Pos, [Option]) -> ok when
+-spec setScrollPos(This, Orient, Pos, [Option]) -> 'ok' when
This::wxWindow(), Orient::integer(), Pos::integer(),
- Option :: {refresh, boolean()}.
+ Option :: {'refresh', boolean()}.
setScrollPos(#wx_ref{type=ThisT,ref=ThisRef},Orient,Pos, Options)
when is_integer(Orient),is_integer(Pos),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1527,12 +1527,12 @@ setScrollPos(#wx_ref{type=ThisT,ref=ThisRef},Orient,Pos, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsize">external documentation</a>.
%% <br /> Also:<br />
-%% setSize(This, Size) -> ok when<br />
+%% setSize(This, Size) -> 'ok' when<br />
%% This::wxWindow(), Size::{W::integer(), H::integer()}.<br />
%%
--spec setSize(This, Rect) -> ok when
+-spec setSize(This, Rect) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()};
- (This, Size) -> ok when
+ (This, Size) -> 'ok' when
This::wxWindow(), Size::{W::integer(), H::integer()}.
setSize(This,Rect={RectX,RectY,RectW,RectH})
@@ -1546,15 +1546,15 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsize">external documentation</a>.
%% <br /> Also:<br />
-%% setSize(This, Rect, [Option]) -> ok when<br />
+%% setSize(This, Rect, [Option]) -> 'ok' when<br />
%% This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()},<br />
-%% Option :: {sizeFlags, integer()}.<br />
+%% Option :: {'sizeFlags', integer()}.<br />
%%
--spec setSize(This, Width, Height) -> ok when
+-spec setSize(This, Width, Height) -> 'ok' when
This::wxWindow(), Width::integer(), Height::integer();
- (This, Rect, [Option]) -> ok when
+ (This, Rect, [Option]) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()},
- Option :: {sizeFlags, integer()}.
+ Option :: {'sizeFlags', integer()}.
setSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
?CLASS(ThisT,wxWindow),
@@ -1570,7 +1570,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}, Options)
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setSize(This,X,Y,Width,Height, [])
--spec setSize(This, X, Y, Width, Height) -> ok when
+-spec setSize(This, X, Y, Width, Height) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer(), Width::integer(), Height::integer().
setSize(This,X,Y,Width,Height)
@@ -1578,9 +1578,9 @@ setSize(This,X,Y,Width,Height)
setSize(This,X,Y,Width,Height, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsize">external documentation</a>.
--spec setSize(This, X, Y, Width, Height, [Option]) -> ok when
+-spec setSize(This, X, Y, Width, Height, [Option]) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer(), Width::integer(), Height::integer(),
- Option :: {sizeFlags, integer()}.
+ Option :: {'sizeFlags', integer()}.
setSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Width,Height, Options)
when is_integer(X),is_integer(Y),is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1591,7 +1591,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Width,Height, Options)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setSizeHints(This,MinSize, [])
--spec setSizeHints(This, MinSize) -> ok when
+-spec setSizeHints(This, MinSize) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()}.
setSizeHints(This,MinSize={MinSizeW,MinSizeH})
@@ -1600,17 +1600,17 @@ setSizeHints(This,MinSize={MinSizeW,MinSizeH})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsizehints">external documentation</a>.
%% <br /> Also:<br />
-%% setSizeHints(This, MinSize, [Option]) -> ok when<br />
+%% setSizeHints(This, MinSize, [Option]) -> 'ok' when<br />
%% This::wxWindow(), MinSize::{W::integer(), H::integer()},<br />
-%% Option :: {maxSize, {W::integer(), H::integer()}}<br />
-%% | {incSize, {W::integer(), H::integer()}}.<br />
+%% Option :: {'maxSize', {W::integer(), H::integer()}}<br />
+%% | {'incSize', {W::integer(), H::integer()}}.<br />
%%
--spec setSizeHints(This, MinW, MinH) -> ok when
+-spec setSizeHints(This, MinW, MinH) -> 'ok' when
This::wxWindow(), MinW::integer(), MinH::integer();
- (This, MinSize, [Option]) -> ok when
+ (This, MinSize, [Option]) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()},
- Option :: {maxSize, {W::integer(), H::integer()}}
- | {incSize, {W::integer(), H::integer()}}.
+ Option :: {'maxSize', {W::integer(), H::integer()}}
+ | {'incSize', {W::integer(), H::integer()}}.
setSizeHints(This,MinW,MinH)
when is_record(This, wx_ref),is_integer(MinW),is_integer(MinH) ->
@@ -1626,12 +1626,12 @@ setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},{MinSizeW,MinSizeH}, Options)
<<ThisRef:32/?UI,MinSizeW:32/?UI,MinSizeH:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsizehints">external documentation</a>.
--spec setSizeHints(This, MinW, MinH, [Option]) -> ok when
+-spec setSizeHints(This, MinW, MinH, [Option]) -> 'ok' when
This::wxWindow(), MinW::integer(), MinH::integer(),
- Option :: {maxW, integer()}
- | {maxH, integer()}
- | {incW, integer()}
- | {incH, integer()}.
+ Option :: {'maxW', integer()}
+ | {'maxH', integer()}
+ | {'incW', integer()}
+ | {'incH', integer()}.
setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},MinW,MinH, Options)
when is_integer(MinW),is_integer(MinH),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1645,7 +1645,7 @@ setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},MinW,MinH, Options)
<<ThisRef:32/?UI,MinW:32/?UI,MinH:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setSizer(This,Sizer, [])
--spec setSizer(This, Sizer) -> ok when
+-spec setSizer(This, Sizer) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer().
setSizer(This,Sizer)
@@ -1653,9 +1653,9 @@ setSizer(This,Sizer)
setSizer(This,Sizer, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsizer">external documentation</a>.
--spec setSizer(This, Sizer, [Option]) -> ok when
+-spec setSizer(This, Sizer, [Option]) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer(),
- Option :: {deleteOld, boolean()}.
+ Option :: {'deleteOld', boolean()}.
setSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1667,7 +1667,7 @@ setSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}, Opti
<<ThisRef:32/?UI,SizerRef:32/?UI, BinOpt/binary>>).
%% @equiv setSizerAndFit(This,Sizer, [])
--spec setSizerAndFit(This, Sizer) -> ok when
+-spec setSizerAndFit(This, Sizer) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer().
setSizerAndFit(This,Sizer)
@@ -1675,9 +1675,9 @@ setSizerAndFit(This,Sizer)
setSizerAndFit(This,Sizer, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsizerandfit">external documentation</a>.
--spec setSizerAndFit(This, Sizer, [Option]) -> ok when
+-spec setSizerAndFit(This, Sizer, [Option]) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer(),
- Option :: {deleteOld, boolean()}.
+ Option :: {'deleteOld', boolean()}.
setSizerAndFit(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1689,7 +1689,7 @@ setSizerAndFit(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}
<<ThisRef:32/?UI,SizerRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetthemeenabled">external documentation</a>.
--spec setThemeEnabled(This, EnableTheme) -> ok when
+-spec setThemeEnabled(This, EnableTheme) -> 'ok' when
This::wxWindow(), EnableTheme::boolean().
setThemeEnabled(#wx_ref{type=ThisT,ref=ThisRef},EnableTheme)
when is_boolean(EnableTheme) ->
@@ -1699,12 +1699,12 @@ setThemeEnabled(#wx_ref{type=ThisT,ref=ThisRef},EnableTheme)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsettooltip">external documentation</a>.
%% <br /> Also:<br />
-%% setToolTip(This, Tip) -> ok when<br />
+%% setToolTip(This, Tip) -> 'ok' when<br />
%% This::wxWindow(), Tip::wxToolTip:wxToolTip().<br />
%%
--spec setToolTip(This, Tip) -> ok when
+-spec setToolTip(This, Tip) -> 'ok' when
This::wxWindow(), Tip::unicode:chardata();
- (This, Tip) -> ok when
+ (This, Tip) -> 'ok' when
This::wxWindow(), Tip::wxToolTip:wxToolTip().
setToolTip(#wx_ref{type=ThisT,ref=ThisRef},Tip)
when is_list(Tip) ->
@@ -1719,7 +1719,7 @@ setToolTip(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=TipT,ref=TipRef}) ->
<<ThisRef:32/?UI,TipRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetvirtualsize">external documentation</a>.
--spec setVirtualSize(This, Size) -> ok when
+-spec setVirtualSize(This, Size) -> 'ok' when
This::wxWindow(), Size::{W::integer(), H::integer()}.
setVirtualSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -1728,7 +1728,7 @@ setVirtualSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetvirtualsize">external documentation</a>.
--spec setVirtualSize(This, X, Y) -> ok when
+-spec setVirtualSize(This, X, Y) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer().
setVirtualSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -1737,7 +1737,7 @@ setVirtualSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @equiv setVirtualSizeHints(This,MinSize, [])
--spec setVirtualSizeHints(This, MinSize) -> ok when
+-spec setVirtualSizeHints(This, MinSize) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()}.
setVirtualSizeHints(This,MinSize={MinSizeW,MinSizeH})
@@ -1746,15 +1746,15 @@ setVirtualSizeHints(This,MinSize={MinSizeW,MinSizeH})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetvirtualsizehints">external documentation</a>.
%% <br /> Also:<br />
-%% setVirtualSizeHints(This, MinSize, [Option]) -> ok when<br />
+%% setVirtualSizeHints(This, MinSize, [Option]) -> 'ok' when<br />
%% This::wxWindow(), MinSize::{W::integer(), H::integer()},<br />
-%% Option :: {maxSize, {W::integer(), H::integer()}}.<br />
+%% Option :: {'maxSize', {W::integer(), H::integer()}}.<br />
%%
--spec setVirtualSizeHints(This, MinW, MinH) -> ok when
+-spec setVirtualSizeHints(This, MinW, MinH) -> 'ok' when
This::wxWindow(), MinW::integer(), MinH::integer();
- (This, MinSize, [Option]) -> ok when
+ (This, MinSize, [Option]) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()},
- Option :: {maxSize, {W::integer(), H::integer()}}.
+ Option :: {'maxSize', {W::integer(), H::integer()}}.
setVirtualSizeHints(This,MinW,MinH)
when is_record(This, wx_ref),is_integer(MinW),is_integer(MinH) ->
@@ -1769,10 +1769,10 @@ setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},{MinSizeW,MinSizeH}, Options
<<ThisRef:32/?UI,MinSizeW:32/?UI,MinSizeH:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetvirtualsizehints">external documentation</a>.
--spec setVirtualSizeHints(This, MinW, MinH, [Option]) -> ok when
+-spec setVirtualSizeHints(This, MinW, MinH, [Option]) -> 'ok' when
This::wxWindow(), MinW::integer(), MinH::integer(),
- Option :: {maxW, integer()}
- | {maxH, integer()}.
+ Option :: {'maxW', integer()}
+ | {'maxH', integer()}.
setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},MinW,MinH, Options)
when is_integer(MinW),is_integer(MinH),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1784,7 +1784,7 @@ setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},MinW,MinH, Options)
<<ThisRef:32/?UI,MinW:32/?UI,MinH:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetwindowstyle">external documentation</a>.
--spec setWindowStyle(This, Style) -> ok when
+-spec setWindowStyle(This, Style) -> 'ok' when
This::wxWindow(), Style::integer().
setWindowStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -1793,7 +1793,7 @@ setWindowStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetwindowstyleflag">external documentation</a>.
--spec setWindowStyleFlag(This, Style) -> ok when
+-spec setWindowStyleFlag(This, Style) -> 'ok' when
This::wxWindow(), Style::integer().
setWindowStyleFlag(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -1803,7 +1803,7 @@ setWindowStyleFlag(#wx_ref{type=ThisT,ref=ThisRef},Style)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetwindowvariant">external documentation</a>.
%%<br /> Variant = ?wxWINDOW_VARIANT_NORMAL | ?wxWINDOW_VARIANT_SMALL | ?wxWINDOW_VARIANT_MINI | ?wxWINDOW_VARIANT_LARGE | ?wxWINDOW_VARIANT_MAX
--spec setWindowVariant(This, Variant) -> ok when
+-spec setWindowVariant(This, Variant) -> 'ok' when
This::wxWindow(), Variant::wx:wx_enum().
setWindowVariant(#wx_ref{type=ThisT,ref=ThisRef},Variant)
when is_integer(Variant) ->
@@ -1830,7 +1830,7 @@ show(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowshow">external documentation</a>.
-spec show(This, [Option]) -> boolean() when
This::wxWindow(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1841,7 +1841,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowthaw">external documentation</a>.
--spec thaw(This) -> ok when
+-spec thaw(This) -> 'ok' when
This::wxWindow().
thaw(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1865,7 +1865,7 @@ transferDataToWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowupdate">external documentation</a>.
--spec update(This) -> ok when
+-spec update(This) -> 'ok' when
This::wxWindow().
update(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1873,7 +1873,7 @@ update(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv updateWindowUI(This, [])
--spec updateWindowUI(This) -> ok when
+-spec updateWindowUI(This) -> 'ok' when
This::wxWindow().
updateWindowUI(This)
@@ -1881,9 +1881,9 @@ updateWindowUI(This)
updateWindowUI(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowupdatewindowui">external documentation</a>.
--spec updateWindowUI(This, [Option]) -> ok when
+-spec updateWindowUI(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
updateWindowUI(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1902,7 +1902,7 @@ validate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowwarppointer">external documentation</a>.
--spec warpPointer(This, X, Y) -> ok when
+-spec warpPointer(This, X, Y) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer().
warpPointer(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -1936,7 +1936,7 @@ isDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetdoublebuffered">external documentation</a>.
--spec setDoubleBuffered(This, On) -> ok when
+-spec setDoubleBuffered(This, On) -> 'ok' when
This::wxWindow(), On::boolean().
setDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef},On)
when is_boolean(On) ->
@@ -1945,7 +1945,7 @@ setDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef},On)
<<ThisRef:32/?UI,(wxe_util:from_bool(On)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxWindow()) -> ok.
+-spec destroy(This::wxWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxWindowCreateEvent.erl b/lib/wx/src/gen/wxWindowCreateEvent.erl
index d5b1c0d256..ded8d51a65 100644
--- a/lib/wx/src/gen/wxWindowCreateEvent.erl
+++ b/lib/wx/src/gen/wxWindowCreateEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxWindowDC.erl b/lib/wx/src/gen/wxWindowDC.erl
index 96f932d3d5..9b1045b84d 100644
--- a/lib/wx/src/gen/wxWindowDC.erl
+++ b/lib/wx/src/gen/wxWindowDC.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -78,7 +78,7 @@ new(#wx_ref{type=WinT,ref=WinRef}) ->
<<WinRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxWindowDC()) -> ok.
+-spec destroy(This::wxWindowDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxWindowDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxWindowDestroyEvent.erl b/lib/wx/src/gen/wxWindowDestroyEvent.erl
index d8e15397f7..0fd3724ad3 100644
--- a/lib/wx/src/gen/wxWindowDestroyEvent.erl
+++ b/lib/wx/src/gen/wxWindowDestroyEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/gen/wxXmlResource.erl b/lib/wx/src/gen/wxXmlResource.erl
index fec9a5b4a9..ae02c74751 100644
--- a/lib/wx/src/gen/wxXmlResource.erl
+++ b/lib/wx/src/gen/wxXmlResource.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -48,8 +48,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourcewxxmlresource">external documentation</a>.
-spec new([Option]) -> wxXmlResource() when
- Option :: {flags, integer()}
- | {domain, unicode:chardata()}.
+ Option :: {'flags', integer()}
+ | {'domain', unicode:chardata()}.
new(Options)
when is_list(Options) ->
MOpts = fun({flags, Flags}, Acc) -> [<<1:32/?UI,Flags:32/?UI>>|Acc];
@@ -62,8 +62,8 @@ new(Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourcewxxmlresource">external documentation</a>.
-spec new(Filemask, [Option]) -> wxXmlResource() when
Filemask::unicode:chardata(),
- Option :: {flags, integer()}
- | {domain, unicode:chardata()}.
+ Option :: {'flags', integer()}
+ | {'domain', unicode:chardata()}.
new(Filemask, Options)
when is_list(Filemask),is_list(Options) ->
Filemask_UC = unicode:characters_to_binary([Filemask,0]),
@@ -85,7 +85,7 @@ attachUnknownControl(This,Name,Control)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourceattachunknowncontrol">external documentation</a>.
-spec attachUnknownControl(This, Name, Control, [Option]) -> boolean() when
This::wxXmlResource(), Name::unicode:chardata(), Control::wxWindow:wxWindow(),
- Option :: {parent, wxWindow:wxWindow()}.
+ Option :: {'parent', wxWindow:wxWindow()}.
attachUnknownControl(#wx_ref{type=ThisT,ref=ThisRef},Name,#wx_ref{type=ControlT,ref=ControlRef}, Options)
when is_list(Name),is_list(Options) ->
?CLASS(ThisT,wxXmlResource),
@@ -98,7 +98,7 @@ attachUnknownControl(#wx_ref{type=ThisT,ref=ThisRef},Name,#wx_ref{type=ControlT,
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8,ControlRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourceclearhandlers">external documentation</a>.
--spec clearHandlers(This) -> ok when
+-spec clearHandlers(This) -> 'ok' when
This::wxXmlResource().
clearHandlers(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxXmlResource),
@@ -147,7 +147,7 @@ getXRCID(Str_id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourcegetxrcid">external documentation</a>.
-spec getXRCID(Str_id, [Option]) -> integer() when
Str_id::[unicode:chardata()],
- Option :: {value_if_not_found, integer()}.
+ Option :: {'value_if_not_found', integer()}.
getXRCID(Str_id, Options)
when is_list(Str_id),is_list(Options) ->
Str_id_UC = unicode:characters_to_binary([Str_id,0]),
@@ -158,7 +158,7 @@ getXRCID(Str_id, Options)
<<(byte_size(Str_id_UC)):32/?UI,(Str_id_UC)/binary, 0:(((8- ((4+byte_size(Str_id_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourceinitallhandlers">external documentation</a>.
--spec initAllHandlers(This) -> ok when
+-spec initAllHandlers(This) -> 'ok' when
This::wxXmlResource().
initAllHandlers(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxXmlResource),
@@ -315,7 +315,7 @@ set(#wx_ref{type=ResT,ref=ResRef}) ->
<<ResRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourcesetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxXmlResource(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -353,7 +353,7 @@ xrcctrl(Window = #wx_ref{}, Name, Type) when is_list(Name), is_atom(Type) ->
wx:typeCast(Res, Type).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxXmlResource()) -> ok.
+-spec destroy(This::wxXmlResource()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxXmlResource),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wx_misc.erl b/lib/wx/src/gen/wx_misc.erl
index 44a9309f7e..ce5d917136 100644
--- a/lib/wx/src/gen/wx_misc.erl
+++ b/lib/wx/src/gen/wx_misc.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@ setDetectableAutoRepeat(Flag)
<<(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxbell">external documentation</a>.
--spec bell() -> ok.
+-spec bell() -> 'ok'.
bell() ->
wxe_util:cast(?utils_wxBell,
<<>>).
@@ -96,14 +96,14 @@ findWindowAtPoint({PtX,PtY})
<<PtX:32/?UI,PtY:32/?UI>>).
%% @equiv beginBusyCursor([])
--spec beginBusyCursor() -> ok.
+-spec beginBusyCursor() -> 'ok'.
beginBusyCursor() ->
beginBusyCursor([]).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxbeginbusycursor">external documentation</a>.
--spec beginBusyCursor([Option]) -> ok when
- Option :: {cursor, wxCursor:wxCursor()}.
+-spec beginBusyCursor([Option]) -> 'ok' when
+ Option :: {'cursor', wxCursor:wxCursor()}.
beginBusyCursor(Options)
when is_list(Options) ->
MOpts = fun({cursor, #wx_ref{type=CursorT,ref=CursorRef}}, Acc) -> ?CLASS(CursorT,wxCursor),[<<1:32/?UI,CursorRef:32/?UI>>|Acc];
@@ -113,7 +113,7 @@ beginBusyCursor(Options)
<<BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxendbusycursor">external documentation</a>.
--spec endBusyCursor() -> ok.
+-spec endBusyCursor() -> 'ok'.
endBusyCursor() ->
wxe_util:cast(?utils_wxEndBusyCursor,
<<>>).
@@ -141,7 +141,7 @@ shell() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxshell">external documentation</a>.
-spec shell([Option]) -> boolean() when
- Option :: {command, unicode:chardata()}.
+ Option :: {'command', unicode:chardata()}.
shell(Options)
when is_list(Options) ->
MOpts = fun({command, Command}, Acc) -> Command_UC = unicode:characters_to_binary([Command,0]),[<<1:32/?UI,(byte_size(Command_UC)):32/?UI,(Command_UC)/binary, 0:(((8- ((0+byte_size(Command_UC)) band 16#7)) band 16#7))/unit:8>>|Acc];
@@ -161,7 +161,7 @@ launchDefaultBrowser(Url)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxlaunchdefaultbrowser">external documentation</a>.
-spec launchDefaultBrowser(Url, [Option]) -> boolean() when
Url::unicode:chardata(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
launchDefaultBrowser(Url, Options)
when is_list(Url),is_list(Options) ->
Url_UC = unicode:characters_to_binary([Url,0]),
@@ -196,7 +196,7 @@ newId() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxregisterid">external documentation</a>.
--spec registerId(Id) -> ok when
+-spec registerId(Id) -> 'ok' when
Id::integer().
registerId(Id)
when is_integer(Id) ->
@@ -234,7 +234,7 @@ displaySize() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_gdicmn.html#gdicmnwxsetcursor">external documentation</a>.
--spec setCursor(Cursor) -> ok when
+-spec setCursor(Cursor) -> 'ok' when
Cursor::wxCursor:wxCursor().
setCursor(#wx_ref{type=CursorT,ref=CursorRef}) ->
?CLASS(CursorT,wxCursor),
diff --git a/lib/wx/src/gen/wxe_debug.hrl b/lib/wx/src/gen/wxe_debug.hrl
index a2462a6fb2..78c6577439 100644
--- a/lib/wx/src/gen/wxe_debug.hrl
+++ b/lib/wx/src/gen/wxe_debug.hrl
@@ -1457,1925 +1457,1921 @@ wxdebug_table() ->
{1602, {wxGauge, new_0, 0}},
{1603, {wxGauge, new_4, 4}},
{1604, {wxGauge, create, 4}},
- {1605, {wxGauge, getBezelFace, 0}},
- {1606, {wxGauge, getRange, 0}},
- {1607, {wxGauge, getShadowWidth, 0}},
- {1608, {wxGauge, getValue, 0}},
- {1609, {wxGauge, isVertical, 0}},
- {1610, {wxGauge, setBezelFace, 1}},
- {1611, {wxGauge, setRange, 1}},
- {1612, {wxGauge, setShadowWidth, 1}},
- {1613, {wxGauge, setValue, 1}},
- {1614, {wxGauge, pulse, 0}},
- {1615, {wxGauge, 'Destroy', undefined}},
- {1616, {wxGenericDirCtrl, new_0, 0}},
- {1617, {wxGenericDirCtrl, new_2, 2}},
- {1618, {wxGenericDirCtrl, destruct, 0}},
- {1619, {wxGenericDirCtrl, create, 2}},
- {1620, {wxGenericDirCtrl, init, 0}},
- {1621, {wxGenericDirCtrl, collapseTree, 0}},
- {1622, {wxGenericDirCtrl, expandPath, 1}},
- {1623, {wxGenericDirCtrl, getDefaultPath, 0}},
- {1624, {wxGenericDirCtrl, getPath, 0}},
- {1625, {wxGenericDirCtrl, getFilePath, 0}},
- {1626, {wxGenericDirCtrl, getFilter, 0}},
- {1627, {wxGenericDirCtrl, getFilterIndex, 0}},
- {1628, {wxGenericDirCtrl, getRootId, 0}},
- {1629, {wxGenericDirCtrl, getTreeCtrl, 0}},
- {1630, {wxGenericDirCtrl, reCreateTree, 0}},
- {1631, {wxGenericDirCtrl, setDefaultPath, 1}},
- {1632, {wxGenericDirCtrl, setFilter, 1}},
- {1633, {wxGenericDirCtrl, setFilterIndex, 1}},
- {1634, {wxGenericDirCtrl, setPath, 1}},
- {1636, {wxStaticBox, new_4, 4}},
- {1637, {wxStaticBox, new_0, 0}},
- {1638, {wxStaticBox, create, 4}},
- {1639, {wxStaticBox, 'Destroy', undefined}},
- {1641, {wxStaticLine, new_2, 2}},
- {1642, {wxStaticLine, new_0, 0}},
- {1643, {wxStaticLine, create, 2}},
- {1644, {wxStaticLine, isVertical, 0}},
- {1645, {wxStaticLine, getDefaultSize, 0}},
- {1646, {wxStaticLine, 'Destroy', undefined}},
- {1649, {wxListBox, new_3, 3}},
- {1650, {wxListBox, new_0, 0}},
- {1652, {wxListBox, destruct, 0}},
- {1654, {wxListBox, create, 6}},
- {1655, {wxListBox, deselect, 1}},
- {1656, {wxListBox, getSelections, 1}},
- {1657, {wxListBox, insertItems, 2}},
- {1658, {wxListBox, isSelected, 1}},
- {1659, {wxListBox, set, 1}},
- {1660, {wxListBox, hitTest, 1}},
- {1661, {wxListBox, setFirstItem_1_0, 1}},
- {1662, {wxListBox, setFirstItem_1_1, 1}},
- {1663, {wxListCtrl, new_0, 0}},
- {1664, {wxListCtrl, new_2, 2}},
- {1665, {wxListCtrl, arrange, 1}},
- {1666, {wxListCtrl, assignImageList, 2}},
- {1667, {wxListCtrl, clearAll, 0}},
- {1668, {wxListCtrl, create, 2}},
- {1669, {wxListCtrl, deleteAllItems, 0}},
- {1670, {wxListCtrl, deleteColumn, 1}},
- {1671, {wxListCtrl, deleteItem, 1}},
- {1672, {wxListCtrl, editLabel, 1}},
- {1673, {wxListCtrl, ensureVisible, 1}},
- {1674, {wxListCtrl, findItem_3_0, 3}},
- {1675, {wxListCtrl, findItem_3_1, 3}},
- {1676, {wxListCtrl, getColumn, 2}},
- {1677, {wxListCtrl, getColumnCount, 0}},
- {1678, {wxListCtrl, getColumnWidth, 1}},
- {1679, {wxListCtrl, getCountPerPage, 0}},
- {1680, {wxListCtrl, getEditControl, 0}},
- {1681, {wxListCtrl, getImageList, 1}},
- {1682, {wxListCtrl, getItem, 1}},
- {1683, {wxListCtrl, getItemBackgroundColour, 1}},
- {1684, {wxListCtrl, getItemCount, 0}},
- {1685, {wxListCtrl, getItemData, 1}},
- {1686, {wxListCtrl, getItemFont, 1}},
- {1687, {wxListCtrl, getItemPosition, 2}},
- {1688, {wxListCtrl, getItemRect, 3}},
- {1689, {wxListCtrl, getItemSpacing, 0}},
- {1690, {wxListCtrl, getItemState, 2}},
- {1691, {wxListCtrl, getItemText, 1}},
- {1692, {wxListCtrl, getItemTextColour, 1}},
- {1693, {wxListCtrl, getNextItem, 2}},
- {1694, {wxListCtrl, getSelectedItemCount, 0}},
- {1695, {wxListCtrl, getTextColour, 0}},
- {1696, {wxListCtrl, getTopItem, 0}},
- {1697, {wxListCtrl, getViewRect, 0}},
- {1698, {wxListCtrl, hitTest, 2}},
- {1699, {wxListCtrl, insertColumn_2, 2}},
- {1700, {wxListCtrl, insertColumn_3, 3}},
- {1701, {wxListCtrl, insertItem_1, 1}},
- {1702, {wxListCtrl, insertItem_2_1, 2}},
- {1703, {wxListCtrl, insertItem_2_0, 2}},
- {1704, {wxListCtrl, insertItem_3, 3}},
- {1705, {wxListCtrl, refreshItem, 1}},
- {1706, {wxListCtrl, refreshItems, 2}},
- {1707, {wxListCtrl, scrollList, 2}},
- {1708, {wxListCtrl, setBackgroundColour, 1}},
- {1709, {wxListCtrl, setColumn, 2}},
- {1710, {wxListCtrl, setColumnWidth, 2}},
- {1711, {wxListCtrl, setImageList, 2}},
- {1712, {wxListCtrl, setItem_1, 1}},
- {1713, {wxListCtrl, setItem_4, 4}},
- {1714, {wxListCtrl, setItemBackgroundColour, 2}},
- {1715, {wxListCtrl, setItemCount, 1}},
- {1716, {wxListCtrl, setItemData, 2}},
- {1717, {wxListCtrl, setItemFont, 2}},
- {1718, {wxListCtrl, setItemImage, 3}},
- {1719, {wxListCtrl, setItemColumnImage, 3}},
- {1720, {wxListCtrl, setItemPosition, 2}},
- {1721, {wxListCtrl, setItemState, 3}},
- {1722, {wxListCtrl, setItemText, 2}},
- {1723, {wxListCtrl, setItemTextColour, 2}},
- {1724, {wxListCtrl, setSingleStyle, 2}},
- {1725, {wxListCtrl, setTextColour, 1}},
- {1726, {wxListCtrl, setWindowStyleFlag, 1}},
- {1727, {wxListCtrl, sortItems, 2}},
- {1728, {wxListCtrl, 'Destroy', undefined}},
- {1729, {wxListView, clearColumnImage, 1}},
- {1730, {wxListView, focus, 1}},
- {1731, {wxListView, getFirstSelected, 0}},
- {1732, {wxListView, getFocusedItem, 0}},
- {1733, {wxListView, getNextSelected, 1}},
- {1734, {wxListView, isSelected, 1}},
- {1735, {wxListView, select, 2}},
- {1736, {wxListView, setColumnImage, 2}},
- {1737, {wxListItem, new_0, 0}},
- {1738, {wxListItem, new_1, 1}},
- {1739, {wxListItem, destruct, 0}},
- {1740, {wxListItem, clear, 0}},
- {1741, {wxListItem, getAlign, 0}},
- {1742, {wxListItem, getBackgroundColour, 0}},
- {1743, {wxListItem, getColumn, 0}},
- {1744, {wxListItem, getFont, 0}},
- {1745, {wxListItem, getId, 0}},
- {1746, {wxListItem, getImage, 0}},
- {1747, {wxListItem, getMask, 0}},
- {1748, {wxListItem, getState, 0}},
- {1749, {wxListItem, getText, 0}},
- {1750, {wxListItem, getTextColour, 0}},
- {1751, {wxListItem, getWidth, 0}},
- {1752, {wxListItem, setAlign, 1}},
- {1753, {wxListItem, setBackgroundColour, 1}},
- {1754, {wxListItem, setColumn, 1}},
- {1755, {wxListItem, setFont, 1}},
- {1756, {wxListItem, setId, 1}},
- {1757, {wxListItem, setImage, 1}},
- {1758, {wxListItem, setMask, 1}},
- {1759, {wxListItem, setState, 1}},
- {1760, {wxListItem, setStateMask, 1}},
- {1761, {wxListItem, setText, 1}},
- {1762, {wxListItem, setTextColour, 1}},
- {1763, {wxListItem, setWidth, 1}},
- {1764, {wxListItemAttr, new_0, 0}},
- {1765, {wxListItemAttr, new_3, 3}},
- {1766, {wxListItemAttr, getBackgroundColour, 0}},
- {1767, {wxListItemAttr, getFont, 0}},
- {1768, {wxListItemAttr, getTextColour, 0}},
- {1769, {wxListItemAttr, hasBackgroundColour, 0}},
- {1770, {wxListItemAttr, hasFont, 0}},
- {1771, {wxListItemAttr, hasTextColour, 0}},
- {1772, {wxListItemAttr, setBackgroundColour, 1}},
- {1773, {wxListItemAttr, setFont, 1}},
- {1774, {wxListItemAttr, setTextColour, 1}},
- {1775, {wxListItemAttr, 'Destroy', undefined}},
- {1776, {wxImageList, new_0, 0}},
- {1777, {wxImageList, new_3, 3}},
- {1778, {wxImageList, add_1, 1}},
- {1779, {wxImageList, add_2_0, 2}},
- {1780, {wxImageList, add_2_1, 2}},
- {1781, {wxImageList, create, 3}},
- {1783, {wxImageList, draw, 5}},
- {1784, {wxImageList, getBitmap, 1}},
- {1785, {wxImageList, getIcon, 1}},
- {1786, {wxImageList, getImageCount, 0}},
- {1787, {wxImageList, getSize, 3}},
- {1788, {wxImageList, remove, 1}},
- {1789, {wxImageList, removeAll, 0}},
- {1790, {wxImageList, replace_2, 2}},
- {1791, {wxImageList, replace_3, 3}},
- {1792, {wxImageList, 'Destroy', undefined}},
- {1793, {wxTextAttr, new_0, 0}},
- {1794, {wxTextAttr, new_2, 2}},
- {1795, {wxTextAttr, getAlignment, 0}},
- {1796, {wxTextAttr, getBackgroundColour, 0}},
- {1797, {wxTextAttr, getFont, 0}},
- {1798, {wxTextAttr, getLeftIndent, 0}},
- {1799, {wxTextAttr, getLeftSubIndent, 0}},
- {1800, {wxTextAttr, getRightIndent, 0}},
- {1801, {wxTextAttr, getTabs, 0}},
- {1802, {wxTextAttr, getTextColour, 0}},
- {1803, {wxTextAttr, hasBackgroundColour, 0}},
- {1804, {wxTextAttr, hasFont, 0}},
- {1805, {wxTextAttr, hasTextColour, 0}},
- {1806, {wxTextAttr, getFlags, 0}},
- {1807, {wxTextAttr, isDefault, 0}},
- {1808, {wxTextAttr, setAlignment, 1}},
- {1809, {wxTextAttr, setBackgroundColour, 1}},
- {1810, {wxTextAttr, setFlags, 1}},
- {1811, {wxTextAttr, setFont, 2}},
- {1812, {wxTextAttr, setLeftIndent, 2}},
- {1813, {wxTextAttr, setRightIndent, 1}},
- {1814, {wxTextAttr, setTabs, 1}},
- {1815, {wxTextAttr, setTextColour, 1}},
- {1816, {wxTextAttr, 'Destroy', undefined}},
- {1818, {wxTextCtrl, new_3, 3}},
- {1819, {wxTextCtrl, new_0, 0}},
- {1821, {wxTextCtrl, destruct, 0}},
- {1822, {wxTextCtrl, appendText, 1}},
- {1823, {wxTextCtrl, canCopy, 0}},
- {1824, {wxTextCtrl, canCut, 0}},
- {1825, {wxTextCtrl, canPaste, 0}},
- {1826, {wxTextCtrl, canRedo, 0}},
- {1827, {wxTextCtrl, canUndo, 0}},
- {1828, {wxTextCtrl, clear, 0}},
- {1829, {wxTextCtrl, copy, 0}},
- {1830, {wxTextCtrl, create, 3}},
- {1831, {wxTextCtrl, cut, 0}},
- {1832, {wxTextCtrl, discardEdits, 0}},
- {1833, {wxTextCtrl, changeValue, 1}},
- {1834, {wxTextCtrl, emulateKeyPress, 1}},
- {1835, {wxTextCtrl, getDefaultStyle, 0}},
- {1836, {wxTextCtrl, getInsertionPoint, 0}},
- {1837, {wxTextCtrl, getLastPosition, 0}},
- {1838, {wxTextCtrl, getLineLength, 1}},
- {1839, {wxTextCtrl, getLineText, 1}},
- {1840, {wxTextCtrl, getNumberOfLines, 0}},
- {1841, {wxTextCtrl, getRange, 2}},
- {1842, {wxTextCtrl, getSelection, 2}},
- {1843, {wxTextCtrl, getStringSelection, 0}},
- {1844, {wxTextCtrl, getStyle, 2}},
- {1845, {wxTextCtrl, getValue, 0}},
- {1846, {wxTextCtrl, isEditable, 0}},
- {1847, {wxTextCtrl, isModified, 0}},
- {1848, {wxTextCtrl, isMultiLine, 0}},
- {1849, {wxTextCtrl, isSingleLine, 0}},
- {1850, {wxTextCtrl, loadFile, 2}},
- {1851, {wxTextCtrl, markDirty, 0}},
- {1852, {wxTextCtrl, paste, 0}},
- {1853, {wxTextCtrl, positionToXY, 3}},
- {1854, {wxTextCtrl, redo, 0}},
- {1855, {wxTextCtrl, remove, 2}},
- {1856, {wxTextCtrl, replace, 3}},
- {1857, {wxTextCtrl, saveFile, 1}},
- {1858, {wxTextCtrl, setDefaultStyle, 1}},
- {1859, {wxTextCtrl, setEditable, 1}},
- {1860, {wxTextCtrl, setInsertionPoint, 1}},
- {1861, {wxTextCtrl, setInsertionPointEnd, 0}},
- {1863, {wxTextCtrl, setMaxLength, 1}},
- {1864, {wxTextCtrl, setSelection, 2}},
- {1865, {wxTextCtrl, setStyle, 3}},
- {1866, {wxTextCtrl, setValue, 1}},
- {1867, {wxTextCtrl, showPosition, 1}},
- {1868, {wxTextCtrl, undo, 0}},
- {1869, {wxTextCtrl, writeText, 1}},
- {1870, {wxTextCtrl, xYToPosition, 2}},
- {1873, {wxNotebook, new_0, 0}},
- {1874, {wxNotebook, new_3, 3}},
- {1875, {wxNotebook, destruct, 0}},
- {1876, {wxNotebook, addPage, 3}},
- {1877, {wxNotebook, advanceSelection, 1}},
- {1878, {wxNotebook, assignImageList, 1}},
- {1879, {wxNotebook, create, 3}},
- {1880, {wxNotebook, deleteAllPages, 0}},
- {1881, {wxNotebook, deletePage, 1}},
- {1882, {wxNotebook, removePage, 1}},
- {1883, {wxNotebook, getCurrentPage, 0}},
- {1884, {wxNotebook, getImageList, 0}},
- {1886, {wxNotebook, getPage, 1}},
- {1887, {wxNotebook, getPageCount, 0}},
- {1888, {wxNotebook, getPageImage, 1}},
- {1889, {wxNotebook, getPageText, 1}},
- {1890, {wxNotebook, getRowCount, 0}},
- {1891, {wxNotebook, getSelection, 0}},
- {1892, {wxNotebook, getThemeBackgroundColour, 0}},
- {1894, {wxNotebook, hitTest, 2}},
- {1896, {wxNotebook, insertPage, 4}},
- {1897, {wxNotebook, setImageList, 1}},
- {1898, {wxNotebook, setPadding, 1}},
- {1899, {wxNotebook, setPageSize, 1}},
- {1900, {wxNotebook, setPageImage, 2}},
- {1901, {wxNotebook, setPageText, 2}},
- {1902, {wxNotebook, setSelection, 1}},
- {1903, {wxNotebook, changeSelection, 1}},
- {1904, {wxChoicebook, new_0, 0}},
- {1905, {wxChoicebook, new_3, 3}},
- {1906, {wxChoicebook, addPage, 3}},
- {1907, {wxChoicebook, advanceSelection, 1}},
- {1908, {wxChoicebook, assignImageList, 1}},
- {1909, {wxChoicebook, create, 3}},
- {1910, {wxChoicebook, deleteAllPages, 0}},
- {1911, {wxChoicebook, deletePage, 1}},
- {1912, {wxChoicebook, removePage, 1}},
- {1913, {wxChoicebook, getCurrentPage, 0}},
- {1914, {wxChoicebook, getImageList, 0}},
- {1916, {wxChoicebook, getPage, 1}},
- {1917, {wxChoicebook, getPageCount, 0}},
- {1918, {wxChoicebook, getPageImage, 1}},
- {1919, {wxChoicebook, getPageText, 1}},
- {1920, {wxChoicebook, getSelection, 0}},
- {1921, {wxChoicebook, hitTest, 2}},
- {1922, {wxChoicebook, insertPage, 4}},
- {1923, {wxChoicebook, setImageList, 1}},
- {1924, {wxChoicebook, setPageSize, 1}},
- {1925, {wxChoicebook, setPageImage, 2}},
- {1926, {wxChoicebook, setPageText, 2}},
- {1927, {wxChoicebook, setSelection, 1}},
- {1928, {wxChoicebook, changeSelection, 1}},
- {1929, {wxChoicebook, 'Destroy', undefined}},
- {1930, {wxToolbook, new_0, 0}},
- {1931, {wxToolbook, new_3, 3}},
- {1932, {wxToolbook, addPage, 3}},
- {1933, {wxToolbook, advanceSelection, 1}},
- {1934, {wxToolbook, assignImageList, 1}},
- {1935, {wxToolbook, create, 3}},
- {1936, {wxToolbook, deleteAllPages, 0}},
- {1937, {wxToolbook, deletePage, 1}},
- {1938, {wxToolbook, removePage, 1}},
- {1939, {wxToolbook, getCurrentPage, 0}},
- {1940, {wxToolbook, getImageList, 0}},
- {1942, {wxToolbook, getPage, 1}},
- {1943, {wxToolbook, getPageCount, 0}},
- {1944, {wxToolbook, getPageImage, 1}},
- {1945, {wxToolbook, getPageText, 1}},
- {1946, {wxToolbook, getSelection, 0}},
- {1948, {wxToolbook, hitTest, 2}},
- {1949, {wxToolbook, insertPage, 4}},
- {1950, {wxToolbook, setImageList, 1}},
- {1951, {wxToolbook, setPageSize, 1}},
- {1952, {wxToolbook, setPageImage, 2}},
- {1953, {wxToolbook, setPageText, 2}},
- {1954, {wxToolbook, setSelection, 1}},
- {1955, {wxToolbook, changeSelection, 1}},
- {1956, {wxToolbook, 'Destroy', undefined}},
- {1957, {wxListbook, new_0, 0}},
- {1958, {wxListbook, new_3, 3}},
- {1959, {wxListbook, addPage, 3}},
- {1960, {wxListbook, advanceSelection, 1}},
- {1961, {wxListbook, assignImageList, 1}},
- {1962, {wxListbook, create, 3}},
- {1963, {wxListbook, deleteAllPages, 0}},
- {1964, {wxListbook, deletePage, 1}},
- {1965, {wxListbook, removePage, 1}},
- {1966, {wxListbook, getCurrentPage, 0}},
- {1967, {wxListbook, getImageList, 0}},
- {1969, {wxListbook, getPage, 1}},
- {1970, {wxListbook, getPageCount, 0}},
- {1971, {wxListbook, getPageImage, 1}},
- {1972, {wxListbook, getPageText, 1}},
- {1973, {wxListbook, getSelection, 0}},
- {1975, {wxListbook, hitTest, 2}},
- {1976, {wxListbook, insertPage, 4}},
- {1977, {wxListbook, setImageList, 1}},
- {1978, {wxListbook, setPageSize, 1}},
- {1979, {wxListbook, setPageImage, 2}},
- {1980, {wxListbook, setPageText, 2}},
- {1981, {wxListbook, setSelection, 1}},
- {1982, {wxListbook, changeSelection, 1}},
- {1983, {wxListbook, 'Destroy', undefined}},
- {1984, {wxTreebook, new_0, 0}},
- {1985, {wxTreebook, new_3, 3}},
- {1986, {wxTreebook, addPage, 3}},
- {1987, {wxTreebook, advanceSelection, 1}},
- {1988, {wxTreebook, assignImageList, 1}},
- {1989, {wxTreebook, create, 3}},
- {1990, {wxTreebook, deleteAllPages, 0}},
- {1991, {wxTreebook, deletePage, 1}},
- {1992, {wxTreebook, removePage, 1}},
- {1993, {wxTreebook, getCurrentPage, 0}},
- {1994, {wxTreebook, getImageList, 0}},
- {1996, {wxTreebook, getPage, 1}},
- {1997, {wxTreebook, getPageCount, 0}},
- {1998, {wxTreebook, getPageImage, 1}},
- {1999, {wxTreebook, getPageText, 1}},
- {2000, {wxTreebook, getSelection, 0}},
- {2001, {wxTreebook, expandNode, 2}},
- {2002, {wxTreebook, isNodeExpanded, 1}},
- {2004, {wxTreebook, hitTest, 2}},
- {2005, {wxTreebook, insertPage, 4}},
- {2006, {wxTreebook, insertSubPage, 4}},
- {2007, {wxTreebook, setImageList, 1}},
- {2008, {wxTreebook, setPageSize, 1}},
- {2009, {wxTreebook, setPageImage, 2}},
- {2010, {wxTreebook, setPageText, 2}},
- {2011, {wxTreebook, setSelection, 1}},
- {2012, {wxTreebook, changeSelection, 1}},
- {2013, {wxTreebook, 'Destroy', undefined}},
- {2016, {wxTreeCtrl, new_2, 2}},
- {2017, {wxTreeCtrl, new_0, 0}},
- {2019, {wxTreeCtrl, destruct, 0}},
- {2020, {wxTreeCtrl, addRoot, 2}},
- {2021, {wxTreeCtrl, appendItem, 3}},
- {2022, {wxTreeCtrl, assignImageList, 1}},
- {2023, {wxTreeCtrl, assignStateImageList, 1}},
- {2024, {wxTreeCtrl, collapse, 1}},
- {2025, {wxTreeCtrl, collapseAndReset, 1}},
- {2026, {wxTreeCtrl, create, 2}},
- {2027, {wxTreeCtrl, delete, 1}},
- {2028, {wxTreeCtrl, deleteAllItems, 0}},
- {2029, {wxTreeCtrl, deleteChildren, 1}},
- {2030, {wxTreeCtrl, editLabel, 1}},
- {2031, {wxTreeCtrl, ensureVisible, 1}},
- {2032, {wxTreeCtrl, expand, 1}},
- {2033, {wxTreeCtrl, getBoundingRect, 3}},
- {2035, {wxTreeCtrl, getChildrenCount, 2}},
- {2036, {wxTreeCtrl, getCount, 0}},
- {2037, {wxTreeCtrl, getEditControl, 0}},
- {2038, {wxTreeCtrl, getFirstChild, 2}},
- {2039, {wxTreeCtrl, getNextChild, 2}},
- {2040, {wxTreeCtrl, getFirstVisibleItem, 0}},
- {2041, {wxTreeCtrl, getImageList, 0}},
- {2042, {wxTreeCtrl, getIndent, 0}},
- {2043, {wxTreeCtrl, getItemBackgroundColour, 1}},
- {2044, {wxTreeCtrl, getItemData, 1}},
- {2045, {wxTreeCtrl, getItemFont, 1}},
- {2046, {wxTreeCtrl, getItemImage_1, 1}},
- {2047, {wxTreeCtrl, getItemImage_2, 2}},
- {2048, {wxTreeCtrl, getItemText, 1}},
- {2049, {wxTreeCtrl, getItemTextColour, 1}},
- {2050, {wxTreeCtrl, getLastChild, 1}},
- {2051, {wxTreeCtrl, getNextSibling, 1}},
- {2052, {wxTreeCtrl, getNextVisible, 1}},
- {2053, {wxTreeCtrl, getItemParent, 1}},
- {2054, {wxTreeCtrl, getPrevSibling, 1}},
- {2055, {wxTreeCtrl, getPrevVisible, 1}},
- {2056, {wxTreeCtrl, getRootItem, 0}},
- {2057, {wxTreeCtrl, getSelection, 0}},
- {2058, {wxTreeCtrl, getSelections, 1}},
- {2059, {wxTreeCtrl, getStateImageList, 0}},
- {2060, {wxTreeCtrl, hitTest, 2}},
- {2062, {wxTreeCtrl, insertItem, 4}},
- {2063, {wxTreeCtrl, isBold, 1}},
- {2064, {wxTreeCtrl, isExpanded, 1}},
- {2065, {wxTreeCtrl, isSelected, 1}},
- {2066, {wxTreeCtrl, isVisible, 1}},
- {2067, {wxTreeCtrl, itemHasChildren, 1}},
- {2068, {wxTreeCtrl, isTreeItemIdOk, 1}},
- {2069, {wxTreeCtrl, prependItem, 3}},
- {2070, {wxTreeCtrl, scrollTo, 1}},
- {2071, {wxTreeCtrl, selectItem_1, 1}},
- {2072, {wxTreeCtrl, selectItem_2, 2}},
- {2073, {wxTreeCtrl, setIndent, 1}},
- {2074, {wxTreeCtrl, setImageList, 1}},
- {2075, {wxTreeCtrl, setItemBackgroundColour, 2}},
- {2076, {wxTreeCtrl, setItemBold, 2}},
- {2077, {wxTreeCtrl, setItemData, 2}},
- {2078, {wxTreeCtrl, setItemDropHighlight, 2}},
- {2079, {wxTreeCtrl, setItemFont, 2}},
- {2080, {wxTreeCtrl, setItemHasChildren, 2}},
- {2081, {wxTreeCtrl, setItemImage_2, 2}},
- {2082, {wxTreeCtrl, setItemImage_3, 3}},
- {2083, {wxTreeCtrl, setItemText, 2}},
- {2084, {wxTreeCtrl, setItemTextColour, 2}},
- {2085, {wxTreeCtrl, setStateImageList, 1}},
- {2086, {wxTreeCtrl, setWindowStyle, 1}},
- {2087, {wxTreeCtrl, sortChildren, 1}},
- {2088, {wxTreeCtrl, toggle, 1}},
- {2089, {wxTreeCtrl, toggleItemSelection, 1}},
- {2090, {wxTreeCtrl, unselect, 0}},
- {2091, {wxTreeCtrl, unselectAll, 0}},
- {2092, {wxTreeCtrl, unselectItem, 1}},
- {2093, {wxScrollBar, new_0, 0}},
- {2094, {wxScrollBar, new_3, 3}},
- {2095, {wxScrollBar, destruct, 0}},
- {2096, {wxScrollBar, create, 3}},
- {2097, {wxScrollBar, getRange, 0}},
- {2098, {wxScrollBar, getPageSize, 0}},
- {2099, {wxScrollBar, getThumbPosition, 0}},
- {2100, {wxScrollBar, getThumbSize, 0}},
- {2101, {wxScrollBar, setThumbPosition, 1}},
- {2102, {wxScrollBar, setScrollbar, 5}},
- {2104, {wxSpinButton, new_2, 2}},
- {2105, {wxSpinButton, new_0, 0}},
- {2106, {wxSpinButton, create, 2}},
- {2107, {wxSpinButton, getMax, 0}},
- {2108, {wxSpinButton, getMin, 0}},
- {2109, {wxSpinButton, getValue, 0}},
- {2110, {wxSpinButton, setRange, 2}},
- {2111, {wxSpinButton, setValue, 1}},
- {2112, {wxSpinButton, 'Destroy', undefined}},
- {2113, {wxSpinCtrl, new_0, 0}},
- {2114, {wxSpinCtrl, new_2, 2}},
- {2116, {wxSpinCtrl, create, 2}},
- {2119, {wxSpinCtrl, setValue_1_1, 1}},
- {2120, {wxSpinCtrl, setValue_1_0, 1}},
- {2122, {wxSpinCtrl, getValue, 0}},
- {2124, {wxSpinCtrl, setRange, 2}},
- {2125, {wxSpinCtrl, setSelection, 2}},
- {2127, {wxSpinCtrl, getMin, 0}},
- {2129, {wxSpinCtrl, getMax, 0}},
- {2130, {wxSpinCtrl, 'Destroy', undefined}},
- {2131, {wxStaticText, new_0, 0}},
- {2132, {wxStaticText, new_4, 4}},
- {2133, {wxStaticText, create, 4}},
- {2134, {wxStaticText, getLabel, 0}},
- {2135, {wxStaticText, setLabel, 1}},
- {2136, {wxStaticText, wrap, 1}},
- {2137, {wxStaticText, 'Destroy', undefined}},
- {2138, {wxStaticBitmap, new_0, 0}},
- {2139, {wxStaticBitmap, new_4, 4}},
- {2140, {wxStaticBitmap, create, 4}},
- {2141, {wxStaticBitmap, getBitmap, 0}},
- {2142, {wxStaticBitmap, setBitmap, 1}},
- {2143, {wxStaticBitmap, 'Destroy', undefined}},
- {2144, {wxRadioBox, new, 7}},
- {2146, {wxRadioBox, destruct, 0}},
- {2147, {wxRadioBox, create, 7}},
- {2148, {wxRadioBox, enable_2, 2}},
- {2149, {wxRadioBox, enable_1, 1}},
- {2150, {wxRadioBox, getSelection, 0}},
- {2151, {wxRadioBox, getString, 1}},
- {2152, {wxRadioBox, setSelection, 1}},
- {2153, {wxRadioBox, show_2, 2}},
- {2154, {wxRadioBox, show_1, 1}},
- {2155, {wxRadioBox, getColumnCount, 0}},
- {2156, {wxRadioBox, getItemHelpText, 1}},
- {2157, {wxRadioBox, getItemToolTip, 1}},
- {2159, {wxRadioBox, getItemFromPoint, 1}},
- {2160, {wxRadioBox, getRowCount, 0}},
- {2161, {wxRadioBox, isItemEnabled, 1}},
- {2162, {wxRadioBox, isItemShown, 1}},
- {2163, {wxRadioBox, setItemHelpText, 2}},
- {2164, {wxRadioBox, setItemToolTip, 2}},
- {2165, {wxRadioButton, new_0, 0}},
- {2166, {wxRadioButton, new_4, 4}},
- {2167, {wxRadioButton, create, 4}},
- {2168, {wxRadioButton, getValue, 0}},
- {2169, {wxRadioButton, setValue, 1}},
- {2170, {wxRadioButton, 'Destroy', undefined}},
- {2172, {wxSlider, new_6, 6}},
- {2173, {wxSlider, new_0, 0}},
- {2174, {wxSlider, create, 6}},
- {2175, {wxSlider, getLineSize, 0}},
- {2176, {wxSlider, getMax, 0}},
- {2177, {wxSlider, getMin, 0}},
- {2178, {wxSlider, getPageSize, 0}},
- {2179, {wxSlider, getThumbLength, 0}},
- {2180, {wxSlider, getValue, 0}},
- {2181, {wxSlider, setLineSize, 1}},
- {2182, {wxSlider, setPageSize, 1}},
- {2183, {wxSlider, setRange, 2}},
- {2184, {wxSlider, setThumbLength, 1}},
- {2185, {wxSlider, setValue, 1}},
- {2186, {wxSlider, 'Destroy', undefined}},
- {2188, {wxDialog, new_4, 4}},
- {2189, {wxDialog, new_0, 0}},
- {2191, {wxDialog, destruct, 0}},
- {2192, {wxDialog, create, 4}},
- {2193, {wxDialog, createButtonSizer, 1}},
- {2194, {wxDialog, createStdDialogButtonSizer, 1}},
- {2195, {wxDialog, endModal, 1}},
- {2196, {wxDialog, getAffirmativeId, 0}},
- {2197, {wxDialog, getReturnCode, 0}},
- {2198, {wxDialog, isModal, 0}},
- {2199, {wxDialog, setAffirmativeId, 1}},
- {2200, {wxDialog, setReturnCode, 1}},
- {2201, {wxDialog, show, 1}},
- {2202, {wxDialog, showModal, 0}},
- {2203, {wxColourDialog, new_0, 0}},
- {2204, {wxColourDialog, new_2, 2}},
- {2205, {wxColourDialog, destruct, 0}},
- {2206, {wxColourDialog, create, 2}},
- {2207, {wxColourDialog, getColourData, 0}},
- {2208, {wxColourData, new_0, 0}},
- {2209, {wxColourData, new_1, 1}},
- {2210, {wxColourData, destruct, 0}},
- {2211, {wxColourData, getChooseFull, 0}},
- {2212, {wxColourData, getColour, 0}},
- {2214, {wxColourData, getCustomColour, 1}},
- {2215, {wxColourData, setChooseFull, 1}},
- {2216, {wxColourData, setColour, 1}},
- {2217, {wxColourData, setCustomColour, 2}},
- {2218, {wxPalette, new_0, 0}},
- {2219, {wxPalette, new_4, 4}},
- {2221, {wxPalette, destruct, 0}},
- {2222, {wxPalette, create, 4}},
- {2223, {wxPalette, getColoursCount, 0}},
- {2224, {wxPalette, getPixel, 3}},
- {2225, {wxPalette, getRGB, 4}},
- {2226, {wxPalette, isOk, 0}},
- {2230, {wxDirDialog, new, 2}},
- {2231, {wxDirDialog, destruct, 0}},
- {2232, {wxDirDialog, getPath, 0}},
- {2233, {wxDirDialog, getMessage, 0}},
- {2234, {wxDirDialog, setMessage, 1}},
- {2235, {wxDirDialog, setPath, 1}},
- {2239, {wxFileDialog, new, 2}},
- {2240, {wxFileDialog, destruct, 0}},
- {2241, {wxFileDialog, getDirectory, 0}},
- {2242, {wxFileDialog, getFilename, 0}},
- {2243, {wxFileDialog, getFilenames, 1}},
- {2244, {wxFileDialog, getFilterIndex, 0}},
- {2245, {wxFileDialog, getMessage, 0}},
- {2246, {wxFileDialog, getPath, 0}},
- {2247, {wxFileDialog, getPaths, 1}},
- {2248, {wxFileDialog, getWildcard, 0}},
- {2249, {wxFileDialog, setDirectory, 1}},
- {2250, {wxFileDialog, setFilename, 1}},
- {2251, {wxFileDialog, setFilterIndex, 1}},
- {2252, {wxFileDialog, setMessage, 1}},
- {2253, {wxFileDialog, setPath, 1}},
- {2254, {wxFileDialog, setWildcard, 1}},
- {2255, {wxPickerBase, setInternalMargin, 1}},
- {2256, {wxPickerBase, getInternalMargin, 0}},
- {2257, {wxPickerBase, setTextCtrlProportion, 1}},
- {2258, {wxPickerBase, setPickerCtrlProportion, 1}},
- {2259, {wxPickerBase, getTextCtrlProportion, 0}},
- {2260, {wxPickerBase, getPickerCtrlProportion, 0}},
- {2261, {wxPickerBase, hasTextCtrl, 0}},
- {2262, {wxPickerBase, getTextCtrl, 0}},
- {2263, {wxPickerBase, isTextCtrlGrowable, 0}},
- {2264, {wxPickerBase, setPickerCtrlGrowable, 1}},
- {2265, {wxPickerBase, setTextCtrlGrowable, 1}},
- {2266, {wxPickerBase, isPickerCtrlGrowable, 0}},
- {2267, {wxFilePickerCtrl, new_0, 0}},
- {2268, {wxFilePickerCtrl, new_3, 3}},
- {2269, {wxFilePickerCtrl, create, 3}},
- {2270, {wxFilePickerCtrl, getPath, 0}},
- {2271, {wxFilePickerCtrl, setPath, 1}},
- {2272, {wxFilePickerCtrl, 'Destroy', undefined}},
- {2273, {wxDirPickerCtrl, new_0, 0}},
- {2274, {wxDirPickerCtrl, new_3, 3}},
- {2275, {wxDirPickerCtrl, create, 3}},
- {2276, {wxDirPickerCtrl, getPath, 0}},
- {2277, {wxDirPickerCtrl, setPath, 1}},
- {2278, {wxDirPickerCtrl, 'Destroy', undefined}},
- {2279, {wxColourPickerCtrl, new_0, 0}},
- {2280, {wxColourPickerCtrl, new_3, 3}},
- {2281, {wxColourPickerCtrl, create, 3}},
- {2282, {wxColourPickerCtrl, getColour, 0}},
- {2283, {wxColourPickerCtrl, setColour_1_1, 1}},
- {2284, {wxColourPickerCtrl, setColour_1_0, 1}},
- {2285, {wxColourPickerCtrl, 'Destroy', undefined}},
- {2286, {wxDatePickerCtrl, new_0, 0}},
- {2287, {wxDatePickerCtrl, new_3, 3}},
- {2288, {wxDatePickerCtrl, getRange, 2}},
- {2289, {wxDatePickerCtrl, getValue, 0}},
- {2290, {wxDatePickerCtrl, setRange, 2}},
- {2291, {wxDatePickerCtrl, setValue, 1}},
- {2292, {wxDatePickerCtrl, 'Destroy', undefined}},
- {2293, {wxFontPickerCtrl, new_0, 0}},
- {2294, {wxFontPickerCtrl, new_3, 3}},
- {2295, {wxFontPickerCtrl, create, 3}},
- {2296, {wxFontPickerCtrl, getSelectedFont, 0}},
- {2297, {wxFontPickerCtrl, setSelectedFont, 1}},
- {2298, {wxFontPickerCtrl, getMaxPointSize, 0}},
- {2299, {wxFontPickerCtrl, setMaxPointSize, 1}},
- {2300, {wxFontPickerCtrl, 'Destroy', undefined}},
- {2303, {wxFindReplaceDialog, new_0, 0}},
- {2304, {wxFindReplaceDialog, new_4, 4}},
- {2305, {wxFindReplaceDialog, destruct, 0}},
- {2306, {wxFindReplaceDialog, create, 4}},
- {2307, {wxFindReplaceDialog, getData, 0}},
- {2308, {wxFindReplaceData, new_0, 0}},
- {2309, {wxFindReplaceData, new_1, 1}},
- {2310, {wxFindReplaceData, getFindString, 0}},
- {2311, {wxFindReplaceData, getReplaceString, 0}},
- {2312, {wxFindReplaceData, getFlags, 0}},
- {2313, {wxFindReplaceData, setFlags, 1}},
- {2314, {wxFindReplaceData, setFindString, 1}},
- {2315, {wxFindReplaceData, setReplaceString, 1}},
- {2316, {wxFindReplaceData, 'Destroy', undefined}},
- {2317, {wxMultiChoiceDialog, new_0, 0}},
- {2319, {wxMultiChoiceDialog, new_5, 5}},
- {2320, {wxMultiChoiceDialog, getSelections, 0}},
- {2321, {wxMultiChoiceDialog, setSelections, 1}},
- {2322, {wxMultiChoiceDialog, 'Destroy', undefined}},
- {2323, {wxSingleChoiceDialog, new_0, 0}},
- {2325, {wxSingleChoiceDialog, new_5, 5}},
- {2326, {wxSingleChoiceDialog, getSelection, 0}},
- {2327, {wxSingleChoiceDialog, getStringSelection, 0}},
- {2328, {wxSingleChoiceDialog, setSelection, 1}},
- {2329, {wxSingleChoiceDialog, 'Destroy', undefined}},
- {2330, {wxTextEntryDialog, new, 3}},
- {2331, {wxTextEntryDialog, getValue, 0}},
- {2332, {wxTextEntryDialog, setValue, 1}},
- {2333, {wxTextEntryDialog, 'Destroy', undefined}},
- {2334, {wxPasswordEntryDialog, new, 3}},
- {2335, {wxPasswordEntryDialog, 'Destroy', undefined}},
- {2336, {wxFontData, new_0, 0}},
- {2337, {wxFontData, new_1, 1}},
- {2338, {wxFontData, destruct, 0}},
- {2339, {wxFontData, enableEffects, 1}},
- {2340, {wxFontData, getAllowSymbols, 0}},
- {2341, {wxFontData, getColour, 0}},
- {2342, {wxFontData, getChosenFont, 0}},
- {2343, {wxFontData, getEnableEffects, 0}},
- {2344, {wxFontData, getInitialFont, 0}},
- {2345, {wxFontData, getShowHelp, 0}},
- {2346, {wxFontData, setAllowSymbols, 1}},
- {2347, {wxFontData, setChosenFont, 1}},
- {2348, {wxFontData, setColour, 1}},
- {2349, {wxFontData, setInitialFont, 1}},
- {2350, {wxFontData, setRange, 2}},
- {2351, {wxFontData, setShowHelp, 1}},
- {2355, {wxFontDialog, new_0, 0}},
- {2357, {wxFontDialog, new_2, 2}},
- {2359, {wxFontDialog, create, 2}},
- {2360, {wxFontDialog, getFontData, 0}},
- {2362, {wxFontDialog, 'Destroy', undefined}},
- {2363, {wxProgressDialog, new, 3}},
- {2364, {wxProgressDialog, destruct, 0}},
- {2365, {wxProgressDialog, resume, 0}},
- {2366, {wxProgressDialog, update_2, 2}},
- {2367, {wxProgressDialog, update_0, 0}},
- {2368, {wxMessageDialog, new, 3}},
- {2369, {wxMessageDialog, destruct, 0}},
- {2370, {wxPageSetupDialog, new, 2}},
- {2371, {wxPageSetupDialog, destruct, 0}},
- {2372, {wxPageSetupDialog, getPageSetupData, 0}},
- {2373, {wxPageSetupDialog, showModal, 0}},
- {2374, {wxPageSetupDialogData, new_0, 0}},
- {2375, {wxPageSetupDialogData, new_1_0, 1}},
- {2376, {wxPageSetupDialogData, new_1_1, 1}},
- {2377, {wxPageSetupDialogData, destruct, 0}},
- {2378, {wxPageSetupDialogData, enableHelp, 1}},
- {2379, {wxPageSetupDialogData, enableMargins, 1}},
- {2380, {wxPageSetupDialogData, enableOrientation, 1}},
- {2381, {wxPageSetupDialogData, enablePaper, 1}},
- {2382, {wxPageSetupDialogData, enablePrinter, 1}},
- {2383, {wxPageSetupDialogData, getDefaultMinMargins, 0}},
- {2384, {wxPageSetupDialogData, getEnableMargins, 0}},
- {2385, {wxPageSetupDialogData, getEnableOrientation, 0}},
- {2386, {wxPageSetupDialogData, getEnablePaper, 0}},
- {2387, {wxPageSetupDialogData, getEnablePrinter, 0}},
- {2388, {wxPageSetupDialogData, getEnableHelp, 0}},
- {2389, {wxPageSetupDialogData, getDefaultInfo, 0}},
- {2390, {wxPageSetupDialogData, getMarginTopLeft, 0}},
- {2391, {wxPageSetupDialogData, getMarginBottomRight, 0}},
- {2392, {wxPageSetupDialogData, getMinMarginTopLeft, 0}},
- {2393, {wxPageSetupDialogData, getMinMarginBottomRight, 0}},
- {2394, {wxPageSetupDialogData, getPaperId, 0}},
- {2395, {wxPageSetupDialogData, getPaperSize, 0}},
- {2397, {wxPageSetupDialogData, getPrintData, 0}},
- {2398, {wxPageSetupDialogData, isOk, 0}},
- {2399, {wxPageSetupDialogData, setDefaultInfo, 1}},
- {2400, {wxPageSetupDialogData, setDefaultMinMargins, 1}},
- {2401, {wxPageSetupDialogData, setMarginTopLeft, 1}},
- {2402, {wxPageSetupDialogData, setMarginBottomRight, 1}},
- {2403, {wxPageSetupDialogData, setMinMarginTopLeft, 1}},
- {2404, {wxPageSetupDialogData, setMinMarginBottomRight, 1}},
- {2405, {wxPageSetupDialogData, setPaperId, 1}},
- {2406, {wxPageSetupDialogData, setPaperSize_1_1, 1}},
- {2407, {wxPageSetupDialogData, setPaperSize_1_0, 1}},
- {2408, {wxPageSetupDialogData, setPrintData, 1}},
- {2409, {wxPrintDialog, new_2_0, 2}},
- {2410, {wxPrintDialog, new_2_1, 2}},
- {2411, {wxPrintDialog, destruct, 0}},
- {2412, {wxPrintDialog, getPrintDialogData, 0}},
- {2413, {wxPrintDialog, getPrintDC, 0}},
- {2414, {wxPrintDialogData, new_0, 0}},
- {2415, {wxPrintDialogData, new_1_1, 1}},
- {2416, {wxPrintDialogData, new_1_0, 1}},
- {2417, {wxPrintDialogData, destruct, 0}},
- {2418, {wxPrintDialogData, enableHelp, 1}},
- {2419, {wxPrintDialogData, enablePageNumbers, 1}},
- {2420, {wxPrintDialogData, enablePrintToFile, 1}},
- {2421, {wxPrintDialogData, enableSelection, 1}},
- {2422, {wxPrintDialogData, getAllPages, 0}},
- {2423, {wxPrintDialogData, getCollate, 0}},
- {2424, {wxPrintDialogData, getFromPage, 0}},
- {2425, {wxPrintDialogData, getMaxPage, 0}},
- {2426, {wxPrintDialogData, getMinPage, 0}},
- {2427, {wxPrintDialogData, getNoCopies, 0}},
- {2428, {wxPrintDialogData, getPrintData, 0}},
- {2429, {wxPrintDialogData, getPrintToFile, 0}},
- {2430, {wxPrintDialogData, getSelection, 0}},
- {2431, {wxPrintDialogData, getToPage, 0}},
- {2432, {wxPrintDialogData, isOk, 0}},
- {2433, {wxPrintDialogData, setCollate, 1}},
- {2434, {wxPrintDialogData, setFromPage, 1}},
- {2435, {wxPrintDialogData, setMaxPage, 1}},
- {2436, {wxPrintDialogData, setMinPage, 1}},
- {2437, {wxPrintDialogData, setNoCopies, 1}},
- {2438, {wxPrintDialogData, setPrintData, 1}},
- {2439, {wxPrintDialogData, setPrintToFile, 1}},
- {2440, {wxPrintDialogData, setSelection, 1}},
- {2441, {wxPrintDialogData, setToPage, 1}},
- {2442, {wxPrintData, new_0, 0}},
- {2443, {wxPrintData, new_1, 1}},
- {2444, {wxPrintData, destruct, 0}},
- {2445, {wxPrintData, getCollate, 0}},
- {2446, {wxPrintData, getBin, 0}},
- {2447, {wxPrintData, getColour, 0}},
- {2448, {wxPrintData, getDuplex, 0}},
- {2449, {wxPrintData, getNoCopies, 0}},
- {2450, {wxPrintData, getOrientation, 0}},
- {2451, {wxPrintData, getPaperId, 0}},
- {2452, {wxPrintData, getPrinterName, 0}},
- {2453, {wxPrintData, getQuality, 0}},
- {2454, {wxPrintData, isOk, 0}},
- {2455, {wxPrintData, setBin, 1}},
- {2456, {wxPrintData, setCollate, 1}},
- {2457, {wxPrintData, setColour, 1}},
- {2458, {wxPrintData, setDuplex, 1}},
- {2459, {wxPrintData, setNoCopies, 1}},
- {2460, {wxPrintData, setOrientation, 1}},
- {2461, {wxPrintData, setPaperId, 1}},
- {2462, {wxPrintData, setPrinterName, 1}},
- {2463, {wxPrintData, setQuality, 1}},
- {2466, {wxPrintPreview, new_2, 2}},
- {2467, {wxPrintPreview, new_3, 3}},
- {2469, {wxPrintPreview, destruct, 0}},
- {2470, {wxPrintPreview, getCanvas, 0}},
- {2471, {wxPrintPreview, getCurrentPage, 0}},
- {2472, {wxPrintPreview, getFrame, 0}},
- {2473, {wxPrintPreview, getMaxPage, 0}},
- {2474, {wxPrintPreview, getMinPage, 0}},
- {2475, {wxPrintPreview, getPrintout, 0}},
- {2476, {wxPrintPreview, getPrintoutForPrinting, 0}},
- {2477, {wxPrintPreview, isOk, 0}},
- {2478, {wxPrintPreview, paintPage, 2}},
- {2479, {wxPrintPreview, print, 1}},
- {2480, {wxPrintPreview, renderPage, 1}},
- {2481, {wxPrintPreview, setCanvas, 1}},
- {2482, {wxPrintPreview, setCurrentPage, 1}},
- {2483, {wxPrintPreview, setFrame, 1}},
- {2484, {wxPrintPreview, setPrintout, 1}},
- {2485, {wxPrintPreview, setZoom, 1}},
- {2486, {wxPreviewFrame, new, 3}},
- {2487, {wxPreviewFrame, destruct, 0}},
- {2488, {wxPreviewFrame, createControlBar, 0}},
- {2489, {wxPreviewFrame, createCanvas, 0}},
- {2490, {wxPreviewFrame, initialize, 0}},
- {2491, {wxPreviewFrame, onCloseWindow, 1}},
- {2492, {wxPreviewControlBar, new, 4}},
- {2493, {wxPreviewControlBar, destruct, 0}},
- {2494, {wxPreviewControlBar, createButtons, 0}},
- {2495, {wxPreviewControlBar, getPrintPreview, 0}},
- {2496, {wxPreviewControlBar, getZoomControl, 0}},
- {2497, {wxPreviewControlBar, setZoomControl, 1}},
- {2499, {wxPrinter, new, 1}},
- {2500, {wxPrinter, createAbortWindow, 2}},
- {2501, {wxPrinter, getAbort, 0}},
- {2502, {wxPrinter, getLastError, 0}},
- {2503, {wxPrinter, getPrintDialogData, 0}},
- {2504, {wxPrinter, print, 3}},
- {2505, {wxPrinter, printDialog, 1}},
- {2506, {wxPrinter, reportError, 3}},
- {2507, {wxPrinter, setup, 1}},
- {2508, {wxPrinter, 'Destroy', undefined}},
- {2509, {wxXmlResource, new_1, 1}},
- {2510, {wxXmlResource, new_2, 2}},
- {2511, {wxXmlResource, destruct, 0}},
- {2512, {wxXmlResource, attachUnknownControl, 3}},
- {2513, {wxXmlResource, clearHandlers, 0}},
- {2514, {wxXmlResource, compareVersion, 4}},
- {2515, {wxXmlResource, get, 0}},
- {2516, {wxXmlResource, getFlags, 0}},
- {2517, {wxXmlResource, getVersion, 0}},
- {2518, {wxXmlResource, getXRCID, 2}},
- {2519, {wxXmlResource, initAllHandlers, 0}},
- {2520, {wxXmlResource, load, 1}},
- {2521, {wxXmlResource, loadBitmap, 1}},
- {2522, {wxXmlResource, loadDialog_2, 2}},
- {2523, {wxXmlResource, loadDialog_3, 3}},
- {2524, {wxXmlResource, loadFrame_2, 2}},
- {2525, {wxXmlResource, loadFrame_3, 3}},
- {2526, {wxXmlResource, loadIcon, 1}},
- {2527, {wxXmlResource, loadMenu, 1}},
- {2528, {wxXmlResource, loadMenuBar_2, 2}},
- {2529, {wxXmlResource, loadMenuBar_1, 1}},
- {2530, {wxXmlResource, loadPanel_2, 2}},
- {2531, {wxXmlResource, loadPanel_3, 3}},
- {2532, {wxXmlResource, loadToolBar, 2}},
- {2533, {wxXmlResource, set, 1}},
- {2534, {wxXmlResource, setFlags, 1}},
- {2535, {wxXmlResource, unload, 1}},
- {2536, {wxXmlResource, xrcctrl, 3}},
- {2537, {wxHtmlEasyPrinting, new, 1}},
- {2538, {wxHtmlEasyPrinting, destruct, 0}},
- {2539, {wxHtmlEasyPrinting, getPrintData, 0}},
- {2540, {wxHtmlEasyPrinting, getPageSetupData, 0}},
- {2541, {wxHtmlEasyPrinting, previewFile, 1}},
- {2542, {wxHtmlEasyPrinting, previewText, 2}},
- {2543, {wxHtmlEasyPrinting, printFile, 1}},
- {2544, {wxHtmlEasyPrinting, printText, 2}},
- {2545, {wxHtmlEasyPrinting, pageSetup, 0}},
- {2546, {wxHtmlEasyPrinting, setFonts, 3}},
- {2547, {wxHtmlEasyPrinting, setHeader, 2}},
- {2548, {wxHtmlEasyPrinting, setFooter, 2}},
- {2550, {wxGLCanvas, new_2, 2}},
- {2551, {wxGLCanvas, new_3_1, 3}},
- {2552, {wxGLCanvas, new_3_0, 3}},
- {2553, {wxGLCanvas, getContext, 0}},
- {2555, {wxGLCanvas, setCurrent, 0}},
- {2556, {wxGLCanvas, swapBuffers, 0}},
- {2557, {wxGLCanvas, 'Destroy', undefined}},
- {2558, {wxAuiManager, new, 1}},
- {2559, {wxAuiManager, destruct, 0}},
- {2560, {wxAuiManager, addPane_2_1, 2}},
- {2561, {wxAuiManager, addPane_3, 3}},
- {2562, {wxAuiManager, addPane_2_0, 2}},
- {2563, {wxAuiManager, detachPane, 1}},
- {2564, {wxAuiManager, getAllPanes, 0}},
- {2565, {wxAuiManager, getArtProvider, 0}},
- {2566, {wxAuiManager, getDockSizeConstraint, 2}},
- {2567, {wxAuiManager, getFlags, 0}},
- {2568, {wxAuiManager, getManagedWindow, 0}},
- {2569, {wxAuiManager, getManager, 1}},
- {2570, {wxAuiManager, getPane_1_1, 1}},
- {2571, {wxAuiManager, getPane_1_0, 1}},
- {2572, {wxAuiManager, hideHint, 0}},
- {2573, {wxAuiManager, insertPane, 3}},
- {2574, {wxAuiManager, loadPaneInfo, 2}},
- {2575, {wxAuiManager, loadPerspective, 2}},
- {2576, {wxAuiManager, savePaneInfo, 1}},
- {2577, {wxAuiManager, savePerspective, 0}},
- {2578, {wxAuiManager, setArtProvider, 1}},
- {2579, {wxAuiManager, setDockSizeConstraint, 2}},
- {2580, {wxAuiManager, setFlags, 1}},
- {2581, {wxAuiManager, setManagedWindow, 1}},
- {2582, {wxAuiManager, showHint, 1}},
- {2583, {wxAuiManager, unInit, 0}},
- {2584, {wxAuiManager, update, 0}},
- {2585, {wxAuiPaneInfo, new_0, 0}},
- {2586, {wxAuiPaneInfo, new_1, 1}},
- {2587, {wxAuiPaneInfo, destruct, 0}},
- {2588, {wxAuiPaneInfo, bestSize_1, 1}},
- {2589, {wxAuiPaneInfo, bestSize_2, 2}},
- {2590, {wxAuiPaneInfo, bottom, 0}},
- {2591, {wxAuiPaneInfo, bottomDockable, 1}},
- {2592, {wxAuiPaneInfo, caption, 1}},
- {2593, {wxAuiPaneInfo, captionVisible, 1}},
- {2594, {wxAuiPaneInfo, centre, 0}},
- {2595, {wxAuiPaneInfo, centrePane, 0}},
- {2596, {wxAuiPaneInfo, closeButton, 1}},
- {2597, {wxAuiPaneInfo, defaultPane, 0}},
- {2598, {wxAuiPaneInfo, destroyOnClose, 1}},
- {2599, {wxAuiPaneInfo, direction, 1}},
- {2600, {wxAuiPaneInfo, dock, 0}},
- {2601, {wxAuiPaneInfo, dockable, 1}},
- {2602, {wxAuiPaneInfo, fixed, 0}},
- {2603, {wxAuiPaneInfo, float, 0}},
- {2604, {wxAuiPaneInfo, floatable, 1}},
- {2605, {wxAuiPaneInfo, floatingPosition_1, 1}},
- {2606, {wxAuiPaneInfo, floatingPosition_2, 2}},
- {2607, {wxAuiPaneInfo, floatingSize_1, 1}},
- {2608, {wxAuiPaneInfo, floatingSize_2, 2}},
- {2609, {wxAuiPaneInfo, gripper, 1}},
- {2610, {wxAuiPaneInfo, gripperTop, 1}},
- {2611, {wxAuiPaneInfo, hasBorder, 0}},
- {2612, {wxAuiPaneInfo, hasCaption, 0}},
- {2613, {wxAuiPaneInfo, hasCloseButton, 0}},
- {2614, {wxAuiPaneInfo, hasFlag, 1}},
- {2615, {wxAuiPaneInfo, hasGripper, 0}},
- {2616, {wxAuiPaneInfo, hasGripperTop, 0}},
- {2617, {wxAuiPaneInfo, hasMaximizeButton, 0}},
- {2618, {wxAuiPaneInfo, hasMinimizeButton, 0}},
- {2619, {wxAuiPaneInfo, hasPinButton, 0}},
- {2620, {wxAuiPaneInfo, hide, 0}},
- {2621, {wxAuiPaneInfo, isBottomDockable, 0}},
- {2622, {wxAuiPaneInfo, isDocked, 0}},
- {2623, {wxAuiPaneInfo, isFixed, 0}},
- {2624, {wxAuiPaneInfo, isFloatable, 0}},
- {2625, {wxAuiPaneInfo, isFloating, 0}},
- {2626, {wxAuiPaneInfo, isLeftDockable, 0}},
- {2627, {wxAuiPaneInfo, isMovable, 0}},
- {2628, {wxAuiPaneInfo, isOk, 0}},
- {2629, {wxAuiPaneInfo, isResizable, 0}},
- {2630, {wxAuiPaneInfo, isRightDockable, 0}},
- {2631, {wxAuiPaneInfo, isShown, 0}},
- {2632, {wxAuiPaneInfo, isToolbar, 0}},
- {2633, {wxAuiPaneInfo, isTopDockable, 0}},
- {2634, {wxAuiPaneInfo, layer, 1}},
- {2635, {wxAuiPaneInfo, left, 0}},
- {2636, {wxAuiPaneInfo, leftDockable, 1}},
- {2637, {wxAuiPaneInfo, maxSize_1, 1}},
- {2638, {wxAuiPaneInfo, maxSize_2, 2}},
- {2639, {wxAuiPaneInfo, maximizeButton, 1}},
- {2640, {wxAuiPaneInfo, minSize_1, 1}},
- {2641, {wxAuiPaneInfo, minSize_2, 2}},
- {2642, {wxAuiPaneInfo, minimizeButton, 1}},
- {2643, {wxAuiPaneInfo, movable, 1}},
- {2644, {wxAuiPaneInfo, name, 1}},
- {2645, {wxAuiPaneInfo, paneBorder, 1}},
- {2646, {wxAuiPaneInfo, pinButton, 1}},
- {2647, {wxAuiPaneInfo, position, 1}},
- {2648, {wxAuiPaneInfo, resizable, 1}},
- {2649, {wxAuiPaneInfo, right, 0}},
- {2650, {wxAuiPaneInfo, rightDockable, 1}},
- {2651, {wxAuiPaneInfo, row, 1}},
- {2652, {wxAuiPaneInfo, safeSet, 1}},
- {2653, {wxAuiPaneInfo, setFlag, 2}},
- {2654, {wxAuiPaneInfo, show, 1}},
- {2655, {wxAuiPaneInfo, toolbarPane, 0}},
- {2656, {wxAuiPaneInfo, top, 0}},
- {2657, {wxAuiPaneInfo, topDockable, 1}},
- {2658, {wxAuiPaneInfo, window, 1}},
- {2659, {wxAuiPaneInfo, getWindow, 0}},
- {2660, {wxAuiPaneInfo, getFrame, 0}},
- {2661, {wxAuiPaneInfo, getDirection, 0}},
- {2662, {wxAuiPaneInfo, getLayer, 0}},
- {2663, {wxAuiPaneInfo, getRow, 0}},
- {2664, {wxAuiPaneInfo, getPosition, 0}},
- {2665, {wxAuiPaneInfo, getFloatingPosition, 0}},
- {2666, {wxAuiPaneInfo, getFloatingSize, 0}},
- {2667, {wxAuiNotebook, new_0, 0}},
- {2668, {wxAuiNotebook, new_2, 2}},
- {2669, {wxAuiNotebook, addPage, 3}},
- {2670, {wxAuiNotebook, create, 2}},
- {2671, {wxAuiNotebook, deletePage, 1}},
- {2672, {wxAuiNotebook, getArtProvider, 0}},
- {2673, {wxAuiNotebook, getPage, 1}},
- {2674, {wxAuiNotebook, getPageBitmap, 1}},
- {2675, {wxAuiNotebook, getPageCount, 0}},
- {2676, {wxAuiNotebook, getPageIndex, 1}},
- {2677, {wxAuiNotebook, getPageText, 1}},
- {2678, {wxAuiNotebook, getSelection, 0}},
- {2679, {wxAuiNotebook, insertPage, 4}},
- {2680, {wxAuiNotebook, removePage, 1}},
- {2681, {wxAuiNotebook, setArtProvider, 1}},
- {2682, {wxAuiNotebook, setFont, 1}},
- {2683, {wxAuiNotebook, setPageBitmap, 2}},
- {2684, {wxAuiNotebook, setPageText, 2}},
- {2685, {wxAuiNotebook, setSelection, 1}},
- {2686, {wxAuiNotebook, setTabCtrlHeight, 1}},
- {2687, {wxAuiNotebook, setUniformBitmapSize, 1}},
- {2688, {wxAuiNotebook, 'Destroy', undefined}},
- {2689, {wxAuiTabArt, setFlags, 1}},
- {2690, {wxAuiTabArt, setMeasuringFont, 1}},
- {2691, {wxAuiTabArt, setNormalFont, 1}},
- {2692, {wxAuiTabArt, setSelectedFont, 1}},
- {2693, {wxAuiTabArt, setColour, 1}},
- {2694, {wxAuiTabArt, setActiveColour, 1}},
- {2695, {wxAuiDockArt, getColour, 1}},
- {2696, {wxAuiDockArt, getFont, 1}},
- {2697, {wxAuiDockArt, getMetric, 1}},
- {2698, {wxAuiDockArt, setColour, 2}},
- {2699, {wxAuiDockArt, setFont, 2}},
- {2700, {wxAuiDockArt, setMetric, 2}},
- {2701, {wxAuiSimpleTabArt, new, 0}},
- {2702, {wxAuiSimpleTabArt, 'Destroy', undefined}},
- {2703, {wxMDIParentFrame, new_0, 0}},
- {2704, {wxMDIParentFrame, new_4, 4}},
- {2705, {wxMDIParentFrame, destruct, 0}},
- {2706, {wxMDIParentFrame, activateNext, 0}},
- {2707, {wxMDIParentFrame, activatePrevious, 0}},
- {2708, {wxMDIParentFrame, arrangeIcons, 0}},
- {2709, {wxMDIParentFrame, cascade, 0}},
- {2710, {wxMDIParentFrame, create, 4}},
- {2711, {wxMDIParentFrame, getActiveChild, 0}},
- {2712, {wxMDIParentFrame, getClientWindow, 0}},
- {2713, {wxMDIParentFrame, tile, 1}},
- {2714, {wxMDIChildFrame, new_0, 0}},
- {2715, {wxMDIChildFrame, new_4, 4}},
- {2716, {wxMDIChildFrame, destruct, 0}},
- {2717, {wxMDIChildFrame, activate, 0}},
- {2718, {wxMDIChildFrame, create, 4}},
- {2719, {wxMDIChildFrame, maximize, 1}},
- {2720, {wxMDIChildFrame, restore, 0}},
- {2721, {wxMDIClientWindow, new_0, 0}},
- {2722, {wxMDIClientWindow, new_2, 2}},
- {2723, {wxMDIClientWindow, destruct, 0}},
- {2724, {wxMDIClientWindow, createClient, 2}},
- {2725, {wxLayoutAlgorithm, new, 0}},
- {2726, {wxLayoutAlgorithm, layoutFrame, 2}},
- {2727, {wxLayoutAlgorithm, layoutMDIFrame, 2}},
- {2728, {wxLayoutAlgorithm, layoutWindow, 2}},
- {2729, {wxLayoutAlgorithm, 'Destroy', undefined}},
- {2730, {wxEvent, getId, 0}},
- {2731, {wxEvent, getSkipped, 0}},
- {2732, {wxEvent, getTimestamp, 0}},
- {2733, {wxEvent, isCommandEvent, 0}},
- {2734, {wxEvent, resumePropagation, 1}},
- {2735, {wxEvent, shouldPropagate, 0}},
- {2736, {wxEvent, skip, 1}},
- {2737, {wxEvent, stopPropagation, 0}},
- {2738, {wxCommandEvent, getClientData, 0}},
- {2739, {wxCommandEvent, getExtraLong, 0}},
- {2740, {wxCommandEvent, getInt, 0}},
- {2741, {wxCommandEvent, getSelection, 0}},
- {2742, {wxCommandEvent, getString, 0}},
- {2743, {wxCommandEvent, isChecked, 0}},
- {2744, {wxCommandEvent, isSelection, 0}},
- {2745, {wxCommandEvent, setInt, 1}},
- {2746, {wxCommandEvent, setString, 1}},
- {2747, {wxScrollEvent, getOrientation, 0}},
- {2748, {wxScrollEvent, getPosition, 0}},
- {2749, {wxScrollWinEvent, getOrientation, 0}},
- {2750, {wxScrollWinEvent, getPosition, 0}},
- {2751, {wxMouseEvent, altDown, 0}},
- {2752, {wxMouseEvent, button, 1}},
- {2753, {wxMouseEvent, buttonDClick, 1}},
- {2754, {wxMouseEvent, buttonDown, 1}},
- {2755, {wxMouseEvent, buttonUp, 1}},
- {2756, {wxMouseEvent, cmdDown, 0}},
- {2757, {wxMouseEvent, controlDown, 0}},
- {2758, {wxMouseEvent, dragging, 0}},
- {2759, {wxMouseEvent, entering, 0}},
- {2760, {wxMouseEvent, getButton, 0}},
- {2763, {wxMouseEvent, getPosition, 0}},
- {2764, {wxMouseEvent, getLogicalPosition, 1}},
- {2765, {wxMouseEvent, getLinesPerAction, 0}},
- {2766, {wxMouseEvent, getWheelRotation, 0}},
- {2767, {wxMouseEvent, getWheelDelta, 0}},
- {2768, {wxMouseEvent, getX, 0}},
- {2769, {wxMouseEvent, getY, 0}},
- {2770, {wxMouseEvent, isButton, 0}},
- {2771, {wxMouseEvent, isPageScroll, 0}},
- {2772, {wxMouseEvent, leaving, 0}},
- {2773, {wxMouseEvent, leftDClick, 0}},
- {2774, {wxMouseEvent, leftDown, 0}},
- {2775, {wxMouseEvent, leftIsDown, 0}},
- {2776, {wxMouseEvent, leftUp, 0}},
- {2777, {wxMouseEvent, metaDown, 0}},
- {2778, {wxMouseEvent, middleDClick, 0}},
- {2779, {wxMouseEvent, middleDown, 0}},
- {2780, {wxMouseEvent, middleIsDown, 0}},
- {2781, {wxMouseEvent, middleUp, 0}},
- {2782, {wxMouseEvent, moving, 0}},
- {2783, {wxMouseEvent, rightDClick, 0}},
- {2784, {wxMouseEvent, rightDown, 0}},
- {2785, {wxMouseEvent, rightIsDown, 0}},
- {2786, {wxMouseEvent, rightUp, 0}},
- {2787, {wxMouseEvent, shiftDown, 0}},
- {2788, {wxSetCursorEvent, getCursor, 0}},
- {2789, {wxSetCursorEvent, getX, 0}},
- {2790, {wxSetCursorEvent, getY, 0}},
- {2791, {wxSetCursorEvent, hasCursor, 0}},
- {2792, {wxSetCursorEvent, setCursor, 1}},
- {2793, {wxKeyEvent, altDown, 0}},
- {2794, {wxKeyEvent, cmdDown, 0}},
- {2795, {wxKeyEvent, controlDown, 0}},
- {2796, {wxKeyEvent, getKeyCode, 0}},
- {2797, {wxKeyEvent, getModifiers, 0}},
- {2800, {wxKeyEvent, getPosition, 0}},
- {2801, {wxKeyEvent, getRawKeyCode, 0}},
- {2802, {wxKeyEvent, getRawKeyFlags, 0}},
- {2803, {wxKeyEvent, getUnicodeKey, 0}},
- {2804, {wxKeyEvent, getX, 0}},
- {2805, {wxKeyEvent, getY, 0}},
- {2806, {wxKeyEvent, hasModifiers, 0}},
- {2807, {wxKeyEvent, metaDown, 0}},
- {2808, {wxKeyEvent, shiftDown, 0}},
- {2809, {wxSizeEvent, getSize, 0}},
- {2810, {wxMoveEvent, getPosition, 0}},
- {2811, {wxEraseEvent, getDC, 0}},
- {2812, {wxFocusEvent, getWindow, 0}},
- {2813, {wxChildFocusEvent, getWindow, 0}},
- {2814, {wxMenuEvent, getMenu, 0}},
- {2815, {wxMenuEvent, getMenuId, 0}},
- {2816, {wxMenuEvent, isPopup, 0}},
- {2817, {wxCloseEvent, canVeto, 0}},
- {2818, {wxCloseEvent, getLoggingOff, 0}},
- {2819, {wxCloseEvent, setCanVeto, 1}},
- {2820, {wxCloseEvent, setLoggingOff, 1}},
- {2821, {wxCloseEvent, veto, 1}},
- {2822, {wxShowEvent, setShow, 1}},
- {2823, {wxShowEvent, getShow, 0}},
- {2824, {wxIconizeEvent, iconized, 0}},
- {2825, {wxJoystickEvent, buttonDown, 1}},
- {2826, {wxJoystickEvent, buttonIsDown, 1}},
- {2827, {wxJoystickEvent, buttonUp, 1}},
- {2828, {wxJoystickEvent, getButtonChange, 0}},
- {2829, {wxJoystickEvent, getButtonState, 0}},
- {2830, {wxJoystickEvent, getJoystick, 0}},
- {2831, {wxJoystickEvent, getPosition, 0}},
- {2832, {wxJoystickEvent, getZPosition, 0}},
- {2833, {wxJoystickEvent, isButton, 0}},
- {2834, {wxJoystickEvent, isMove, 0}},
- {2835, {wxJoystickEvent, isZMove, 0}},
- {2836, {wxUpdateUIEvent, canUpdate, 1}},
- {2837, {wxUpdateUIEvent, check, 1}},
- {2838, {wxUpdateUIEvent, enable, 1}},
- {2839, {wxUpdateUIEvent, show, 1}},
- {2840, {wxUpdateUIEvent, getChecked, 0}},
- {2841, {wxUpdateUIEvent, getEnabled, 0}},
- {2842, {wxUpdateUIEvent, getShown, 0}},
- {2843, {wxUpdateUIEvent, getSetChecked, 0}},
- {2844, {wxUpdateUIEvent, getSetEnabled, 0}},
- {2845, {wxUpdateUIEvent, getSetShown, 0}},
- {2846, {wxUpdateUIEvent, getSetText, 0}},
- {2847, {wxUpdateUIEvent, getText, 0}},
- {2848, {wxUpdateUIEvent, getMode, 0}},
- {2849, {wxUpdateUIEvent, getUpdateInterval, 0}},
- {2850, {wxUpdateUIEvent, resetUpdateTime, 0}},
- {2851, {wxUpdateUIEvent, setMode, 1}},
- {2852, {wxUpdateUIEvent, setText, 1}},
- {2853, {wxUpdateUIEvent, setUpdateInterval, 1}},
- {2854, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}},
- {2855, {wxPaletteChangedEvent, setChangedWindow, 1}},
- {2856, {wxPaletteChangedEvent, getChangedWindow, 0}},
- {2857, {wxQueryNewPaletteEvent, setPaletteRealized, 1}},
- {2858, {wxQueryNewPaletteEvent, getPaletteRealized, 0}},
- {2859, {wxNavigationKeyEvent, getDirection, 0}},
- {2860, {wxNavigationKeyEvent, setDirection, 1}},
- {2861, {wxNavigationKeyEvent, isWindowChange, 0}},
- {2862, {wxNavigationKeyEvent, setWindowChange, 1}},
- {2863, {wxNavigationKeyEvent, isFromTab, 0}},
- {2864, {wxNavigationKeyEvent, setFromTab, 1}},
- {2865, {wxNavigationKeyEvent, getCurrentFocus, 0}},
- {2866, {wxNavigationKeyEvent, setCurrentFocus, 1}},
- {2867, {wxHelpEvent, getOrigin, 0}},
- {2868, {wxHelpEvent, getPosition, 0}},
- {2869, {wxHelpEvent, setOrigin, 1}},
- {2870, {wxHelpEvent, setPosition, 1}},
- {2871, {wxContextMenuEvent, getPosition, 0}},
- {2872, {wxContextMenuEvent, setPosition, 1}},
- {2873, {wxIdleEvent, canSend, 1}},
- {2874, {wxIdleEvent, getMode, 0}},
- {2875, {wxIdleEvent, requestMore, 1}},
- {2876, {wxIdleEvent, moreRequested, 0}},
- {2877, {wxIdleEvent, setMode, 1}},
- {2878, {wxGridEvent, altDown, 0}},
- {2879, {wxGridEvent, controlDown, 0}},
- {2880, {wxGridEvent, getCol, 0}},
- {2881, {wxGridEvent, getPosition, 0}},
- {2882, {wxGridEvent, getRow, 0}},
- {2883, {wxGridEvent, metaDown, 0}},
- {2884, {wxGridEvent, selecting, 0}},
- {2885, {wxGridEvent, shiftDown, 0}},
- {2886, {wxNotifyEvent, allow, 0}},
- {2887, {wxNotifyEvent, isAllowed, 0}},
- {2888, {wxNotifyEvent, veto, 0}},
- {2889, {wxSashEvent, getEdge, 0}},
- {2890, {wxSashEvent, getDragRect, 0}},
- {2891, {wxSashEvent, getDragStatus, 0}},
- {2892, {wxListEvent, getCacheFrom, 0}},
- {2893, {wxListEvent, getCacheTo, 0}},
- {2894, {wxListEvent, getKeyCode, 0}},
- {2895, {wxListEvent, getIndex, 0}},
- {2896, {wxListEvent, getColumn, 0}},
- {2897, {wxListEvent, getPoint, 0}},
- {2898, {wxListEvent, getLabel, 0}},
- {2899, {wxListEvent, getText, 0}},
- {2900, {wxListEvent, getImage, 0}},
- {2901, {wxListEvent, getData, 0}},
- {2902, {wxListEvent, getMask, 0}},
- {2903, {wxListEvent, getItem, 0}},
- {2904, {wxListEvent, isEditCancelled, 0}},
- {2905, {wxDateEvent, getDate, 0}},
- {2906, {wxCalendarEvent, getWeekDay, 0}},
- {2907, {wxFileDirPickerEvent, getPath, 0}},
- {2908, {wxColourPickerEvent, getColour, 0}},
- {2909, {wxFontPickerEvent, getFont, 0}},
- {2910, {wxStyledTextEvent, getPosition, 0}},
- {2911, {wxStyledTextEvent, getKey, 0}},
- {2912, {wxStyledTextEvent, getModifiers, 0}},
- {2913, {wxStyledTextEvent, getModificationType, 0}},
- {2914, {wxStyledTextEvent, getText, 0}},
- {2915, {wxStyledTextEvent, getLength, 0}},
- {2916, {wxStyledTextEvent, getLinesAdded, 0}},
- {2917, {wxStyledTextEvent, getLine, 0}},
- {2918, {wxStyledTextEvent, getFoldLevelNow, 0}},
- {2919, {wxStyledTextEvent, getFoldLevelPrev, 0}},
- {2920, {wxStyledTextEvent, getMargin, 0}},
- {2921, {wxStyledTextEvent, getMessage, 0}},
- {2922, {wxStyledTextEvent, getWParam, 0}},
- {2923, {wxStyledTextEvent, getLParam, 0}},
- {2924, {wxStyledTextEvent, getListType, 0}},
- {2925, {wxStyledTextEvent, getX, 0}},
- {2926, {wxStyledTextEvent, getY, 0}},
- {2927, {wxStyledTextEvent, getDragText, 0}},
- {2928, {wxStyledTextEvent, getDragAllowMove, 0}},
- {2929, {wxStyledTextEvent, getDragResult, 0}},
- {2930, {wxStyledTextEvent, getShift, 0}},
- {2931, {wxStyledTextEvent, getControl, 0}},
- {2932, {wxStyledTextEvent, getAlt, 0}},
- {2933, {utils, getKeyState, 1}},
- {2934, {utils, getMousePosition, 2}},
- {2935, {utils, getMouseState, 0}},
- {2936, {utils, setDetectableAutoRepeat, 1}},
- {2937, {utils, bell, 0}},
- {2938, {utils, findMenuItemId, 3}},
- {2939, {utils, genericFindWindowAtPoint, 1}},
- {2940, {utils, findWindowAtPoint, 1}},
- {2941, {utils, beginBusyCursor, 1}},
- {2942, {utils, endBusyCursor, 0}},
- {2943, {utils, isBusy, 0}},
- {2944, {utils, shutdown, 1}},
- {2945, {utils, shell, 1}},
- {2946, {utils, launchDefaultBrowser, 2}},
- {2947, {utils, getEmailAddress, 0}},
- {2948, {utils, getUserId, 0}},
- {2949, {utils, getHomeDir, 0}},
- {2950, {utils, newId, 0}},
- {2951, {utils, registerId, 1}},
- {2952, {utils, getCurrentId, 0}},
- {2953, {utils, getOsDescription, 0}},
- {2954, {utils, isPlatformLittleEndian, 0}},
- {2955, {utils, isPlatform64Bit, 0}},
- {2956, {gdicmn, displaySize, 2}},
- {2957, {gdicmn, setCursor, 1}},
- {2958, {wxPrintout, new, 1}},
- {2959, {wxPrintout, destruct, 0}},
- {2960, {wxPrintout, getDC, 0}},
- {2961, {wxPrintout, getPageSizeMM, 2}},
- {2962, {wxPrintout, getPageSizePixels, 2}},
- {2963, {wxPrintout, getPaperRectPixels, 0}},
- {2964, {wxPrintout, getPPIPrinter, 2}},
- {2965, {wxPrintout, getPPIScreen, 2}},
- {2966, {wxPrintout, getTitle, 0}},
- {2967, {wxPrintout, isPreview, 0}},
- {2968, {wxPrintout, fitThisSizeToPaper, 1}},
- {2969, {wxPrintout, fitThisSizeToPage, 1}},
- {2970, {wxPrintout, fitThisSizeToPageMargins, 2}},
- {2971, {wxPrintout, mapScreenSizeToPaper, 0}},
- {2972, {wxPrintout, mapScreenSizeToPage, 0}},
- {2973, {wxPrintout, mapScreenSizeToPageMargins, 1}},
- {2974, {wxPrintout, mapScreenSizeToDevice, 0}},
- {2975, {wxPrintout, getLogicalPaperRect, 0}},
- {2976, {wxPrintout, getLogicalPageRect, 0}},
- {2977, {wxPrintout, getLogicalPageMarginsRect, 1}},
- {2978, {wxPrintout, setLogicalOrigin, 2}},
- {2979, {wxPrintout, offsetLogicalOrigin, 2}},
- {2980, {wxStyledTextCtrl, new_2, 2}},
- {2981, {wxStyledTextCtrl, new_0, 0}},
- {2982, {wxStyledTextCtrl, destruct, 0}},
- {2983, {wxStyledTextCtrl, create, 2}},
- {2984, {wxStyledTextCtrl, addText, 1}},
- {2985, {wxStyledTextCtrl, addStyledText, 1}},
- {2986, {wxStyledTextCtrl, insertText, 2}},
- {2987, {wxStyledTextCtrl, clearAll, 0}},
- {2988, {wxStyledTextCtrl, clearDocumentStyle, 0}},
- {2989, {wxStyledTextCtrl, getLength, 0}},
- {2990, {wxStyledTextCtrl, getCharAt, 1}},
- {2991, {wxStyledTextCtrl, getCurrentPos, 0}},
- {2992, {wxStyledTextCtrl, getAnchor, 0}},
- {2993, {wxStyledTextCtrl, getStyleAt, 1}},
- {2994, {wxStyledTextCtrl, redo, 0}},
- {2995, {wxStyledTextCtrl, setUndoCollection, 1}},
- {2996, {wxStyledTextCtrl, selectAll, 0}},
- {2997, {wxStyledTextCtrl, setSavePoint, 0}},
- {2998, {wxStyledTextCtrl, getStyledText, 2}},
- {2999, {wxStyledTextCtrl, canRedo, 0}},
- {3000, {wxStyledTextCtrl, markerLineFromHandle, 1}},
- {3001, {wxStyledTextCtrl, markerDeleteHandle, 1}},
- {3002, {wxStyledTextCtrl, getUndoCollection, 0}},
- {3003, {wxStyledTextCtrl, getViewWhiteSpace, 0}},
- {3004, {wxStyledTextCtrl, setViewWhiteSpace, 1}},
- {3005, {wxStyledTextCtrl, positionFromPoint, 1}},
- {3006, {wxStyledTextCtrl, positionFromPointClose, 2}},
- {3007, {wxStyledTextCtrl, gotoLine, 1}},
- {3008, {wxStyledTextCtrl, gotoPos, 1}},
- {3009, {wxStyledTextCtrl, setAnchor, 1}},
- {3010, {wxStyledTextCtrl, getCurLine, 1}},
- {3011, {wxStyledTextCtrl, getEndStyled, 0}},
- {3012, {wxStyledTextCtrl, convertEOLs, 1}},
- {3013, {wxStyledTextCtrl, getEOLMode, 0}},
- {3014, {wxStyledTextCtrl, setEOLMode, 1}},
- {3015, {wxStyledTextCtrl, startStyling, 2}},
- {3016, {wxStyledTextCtrl, setStyling, 2}},
- {3017, {wxStyledTextCtrl, getBufferedDraw, 0}},
- {3018, {wxStyledTextCtrl, setBufferedDraw, 1}},
- {3019, {wxStyledTextCtrl, setTabWidth, 1}},
- {3020, {wxStyledTextCtrl, getTabWidth, 0}},
- {3021, {wxStyledTextCtrl, setCodePage, 1}},
- {3022, {wxStyledTextCtrl, markerDefine, 3}},
- {3023, {wxStyledTextCtrl, markerSetForeground, 2}},
- {3024, {wxStyledTextCtrl, markerSetBackground, 2}},
- {3025, {wxStyledTextCtrl, markerAdd, 2}},
- {3026, {wxStyledTextCtrl, markerDelete, 2}},
- {3027, {wxStyledTextCtrl, markerDeleteAll, 1}},
- {3028, {wxStyledTextCtrl, markerGet, 1}},
- {3029, {wxStyledTextCtrl, markerNext, 2}},
- {3030, {wxStyledTextCtrl, markerPrevious, 2}},
- {3031, {wxStyledTextCtrl, markerDefineBitmap, 2}},
- {3032, {wxStyledTextCtrl, markerAddSet, 2}},
- {3033, {wxStyledTextCtrl, markerSetAlpha, 2}},
- {3034, {wxStyledTextCtrl, setMarginType, 2}},
- {3035, {wxStyledTextCtrl, getMarginType, 1}},
- {3036, {wxStyledTextCtrl, setMarginWidth, 2}},
- {3037, {wxStyledTextCtrl, getMarginWidth, 1}},
- {3038, {wxStyledTextCtrl, setMarginMask, 2}},
- {3039, {wxStyledTextCtrl, getMarginMask, 1}},
- {3040, {wxStyledTextCtrl, setMarginSensitive, 2}},
- {3041, {wxStyledTextCtrl, getMarginSensitive, 1}},
- {3042, {wxStyledTextCtrl, styleClearAll, 0}},
- {3043, {wxStyledTextCtrl, styleSetForeground, 2}},
- {3044, {wxStyledTextCtrl, styleSetBackground, 2}},
- {3045, {wxStyledTextCtrl, styleSetBold, 2}},
- {3046, {wxStyledTextCtrl, styleSetItalic, 2}},
- {3047, {wxStyledTextCtrl, styleSetSize, 2}},
- {3048, {wxStyledTextCtrl, styleSetFaceName, 2}},
- {3049, {wxStyledTextCtrl, styleSetEOLFilled, 2}},
- {3050, {wxStyledTextCtrl, styleResetDefault, 0}},
- {3051, {wxStyledTextCtrl, styleSetUnderline, 2}},
- {3052, {wxStyledTextCtrl, styleSetCase, 2}},
- {3053, {wxStyledTextCtrl, styleSetHotSpot, 2}},
- {3054, {wxStyledTextCtrl, setSelForeground, 2}},
- {3055, {wxStyledTextCtrl, setSelBackground, 2}},
- {3056, {wxStyledTextCtrl, getSelAlpha, 0}},
- {3057, {wxStyledTextCtrl, setSelAlpha, 1}},
- {3058, {wxStyledTextCtrl, setCaretForeground, 1}},
- {3059, {wxStyledTextCtrl, cmdKeyAssign, 3}},
- {3060, {wxStyledTextCtrl, cmdKeyClear, 2}},
- {3061, {wxStyledTextCtrl, cmdKeyClearAll, 0}},
- {3062, {wxStyledTextCtrl, setStyleBytes, 2}},
- {3063, {wxStyledTextCtrl, styleSetVisible, 2}},
- {3064, {wxStyledTextCtrl, getCaretPeriod, 0}},
- {3065, {wxStyledTextCtrl, setCaretPeriod, 1}},
- {3066, {wxStyledTextCtrl, setWordChars, 1}},
- {3067, {wxStyledTextCtrl, beginUndoAction, 0}},
- {3068, {wxStyledTextCtrl, endUndoAction, 0}},
- {3069, {wxStyledTextCtrl, indicatorSetStyle, 2}},
- {3070, {wxStyledTextCtrl, indicatorGetStyle, 1}},
- {3071, {wxStyledTextCtrl, indicatorSetForeground, 2}},
- {3072, {wxStyledTextCtrl, indicatorGetForeground, 1}},
- {3073, {wxStyledTextCtrl, setWhitespaceForeground, 2}},
- {3074, {wxStyledTextCtrl, setWhitespaceBackground, 2}},
- {3075, {wxStyledTextCtrl, getStyleBits, 0}},
- {3076, {wxStyledTextCtrl, setLineState, 2}},
- {3077, {wxStyledTextCtrl, getLineState, 1}},
- {3078, {wxStyledTextCtrl, getMaxLineState, 0}},
- {3079, {wxStyledTextCtrl, getCaretLineVisible, 0}},
- {3080, {wxStyledTextCtrl, setCaretLineVisible, 1}},
- {3081, {wxStyledTextCtrl, getCaretLineBackground, 0}},
- {3082, {wxStyledTextCtrl, setCaretLineBackground, 1}},
- {3083, {wxStyledTextCtrl, autoCompShow, 2}},
- {3084, {wxStyledTextCtrl, autoCompCancel, 0}},
- {3085, {wxStyledTextCtrl, autoCompActive, 0}},
- {3086, {wxStyledTextCtrl, autoCompPosStart, 0}},
- {3087, {wxStyledTextCtrl, autoCompComplete, 0}},
- {3088, {wxStyledTextCtrl, autoCompStops, 1}},
- {3089, {wxStyledTextCtrl, autoCompSetSeparator, 1}},
- {3090, {wxStyledTextCtrl, autoCompGetSeparator, 0}},
- {3091, {wxStyledTextCtrl, autoCompSelect, 1}},
- {3092, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}},
- {3093, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}},
- {3094, {wxStyledTextCtrl, autoCompSetFillUps, 1}},
- {3095, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}},
- {3096, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}},
- {3097, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}},
- {3098, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}},
- {3099, {wxStyledTextCtrl, userListShow, 2}},
- {3100, {wxStyledTextCtrl, autoCompSetAutoHide, 1}},
- {3101, {wxStyledTextCtrl, autoCompGetAutoHide, 0}},
- {3102, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}},
- {3103, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}},
- {3104, {wxStyledTextCtrl, registerImage, 2}},
- {3105, {wxStyledTextCtrl, clearRegisteredImages, 0}},
- {3106, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}},
- {3107, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}},
- {3108, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}},
- {3109, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}},
- {3110, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}},
- {3111, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}},
- {3112, {wxStyledTextCtrl, setIndent, 1}},
- {3113, {wxStyledTextCtrl, getIndent, 0}},
- {3114, {wxStyledTextCtrl, setUseTabs, 1}},
- {3115, {wxStyledTextCtrl, getUseTabs, 0}},
- {3116, {wxStyledTextCtrl, setLineIndentation, 2}},
- {3117, {wxStyledTextCtrl, getLineIndentation, 1}},
- {3118, {wxStyledTextCtrl, getLineIndentPosition, 1}},
- {3119, {wxStyledTextCtrl, getColumn, 1}},
- {3120, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}},
- {3121, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}},
- {3122, {wxStyledTextCtrl, setIndentationGuides, 1}},
- {3123, {wxStyledTextCtrl, getIndentationGuides, 0}},
- {3124, {wxStyledTextCtrl, setHighlightGuide, 1}},
- {3125, {wxStyledTextCtrl, getHighlightGuide, 0}},
- {3126, {wxStyledTextCtrl, getLineEndPosition, 1}},
- {3127, {wxStyledTextCtrl, getCodePage, 0}},
- {3128, {wxStyledTextCtrl, getCaretForeground, 0}},
- {3129, {wxStyledTextCtrl, getReadOnly, 0}},
- {3130, {wxStyledTextCtrl, setCurrentPos, 1}},
- {3131, {wxStyledTextCtrl, setSelectionStart, 1}},
- {3132, {wxStyledTextCtrl, getSelectionStart, 0}},
- {3133, {wxStyledTextCtrl, setSelectionEnd, 1}},
- {3134, {wxStyledTextCtrl, getSelectionEnd, 0}},
- {3135, {wxStyledTextCtrl, setPrintMagnification, 1}},
- {3136, {wxStyledTextCtrl, getPrintMagnification, 0}},
- {3137, {wxStyledTextCtrl, setPrintColourMode, 1}},
- {3138, {wxStyledTextCtrl, getPrintColourMode, 0}},
- {3139, {wxStyledTextCtrl, findText, 4}},
- {3140, {wxStyledTextCtrl, formatRange, 7}},
- {3141, {wxStyledTextCtrl, getFirstVisibleLine, 0}},
- {3142, {wxStyledTextCtrl, getLine, 1}},
- {3143, {wxStyledTextCtrl, getLineCount, 0}},
- {3144, {wxStyledTextCtrl, setMarginLeft, 1}},
- {3145, {wxStyledTextCtrl, getMarginLeft, 0}},
- {3146, {wxStyledTextCtrl, setMarginRight, 1}},
- {3147, {wxStyledTextCtrl, getMarginRight, 0}},
- {3148, {wxStyledTextCtrl, getModify, 0}},
- {3149, {wxStyledTextCtrl, setSelection, 2}},
- {3150, {wxStyledTextCtrl, getSelectedText, 0}},
- {3151, {wxStyledTextCtrl, getTextRange, 2}},
- {3152, {wxStyledTextCtrl, hideSelection, 1}},
- {3153, {wxStyledTextCtrl, lineFromPosition, 1}},
- {3154, {wxStyledTextCtrl, positionFromLine, 1}},
- {3155, {wxStyledTextCtrl, lineScroll, 2}},
- {3156, {wxStyledTextCtrl, ensureCaretVisible, 0}},
- {3157, {wxStyledTextCtrl, replaceSelection, 1}},
- {3158, {wxStyledTextCtrl, setReadOnly, 1}},
- {3159, {wxStyledTextCtrl, canPaste, 0}},
- {3160, {wxStyledTextCtrl, canUndo, 0}},
- {3161, {wxStyledTextCtrl, emptyUndoBuffer, 0}},
- {3162, {wxStyledTextCtrl, undo, 0}},
- {3163, {wxStyledTextCtrl, cut, 0}},
- {3164, {wxStyledTextCtrl, copy, 0}},
- {3165, {wxStyledTextCtrl, paste, 0}},
- {3166, {wxStyledTextCtrl, clear, 0}},
- {3167, {wxStyledTextCtrl, setText, 1}},
- {3168, {wxStyledTextCtrl, getText, 0}},
- {3169, {wxStyledTextCtrl, getTextLength, 0}},
- {3170, {wxStyledTextCtrl, getOvertype, 0}},
- {3171, {wxStyledTextCtrl, setCaretWidth, 1}},
- {3172, {wxStyledTextCtrl, getCaretWidth, 0}},
- {3173, {wxStyledTextCtrl, setTargetStart, 1}},
- {3174, {wxStyledTextCtrl, getTargetStart, 0}},
- {3175, {wxStyledTextCtrl, setTargetEnd, 1}},
- {3176, {wxStyledTextCtrl, getTargetEnd, 0}},
- {3177, {wxStyledTextCtrl, replaceTarget, 1}},
- {3178, {wxStyledTextCtrl, searchInTarget, 1}},
- {3179, {wxStyledTextCtrl, setSearchFlags, 1}},
- {3180, {wxStyledTextCtrl, getSearchFlags, 0}},
- {3181, {wxStyledTextCtrl, callTipShow, 2}},
- {3182, {wxStyledTextCtrl, callTipCancel, 0}},
- {3183, {wxStyledTextCtrl, callTipActive, 0}},
- {3184, {wxStyledTextCtrl, callTipPosAtStart, 0}},
- {3185, {wxStyledTextCtrl, callTipSetHighlight, 2}},
- {3186, {wxStyledTextCtrl, callTipSetBackground, 1}},
- {3187, {wxStyledTextCtrl, callTipSetForeground, 1}},
- {3188, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}},
- {3189, {wxStyledTextCtrl, callTipUseStyle, 1}},
- {3190, {wxStyledTextCtrl, visibleFromDocLine, 1}},
- {3191, {wxStyledTextCtrl, docLineFromVisible, 1}},
- {3192, {wxStyledTextCtrl, wrapCount, 1}},
- {3193, {wxStyledTextCtrl, setFoldLevel, 2}},
- {3194, {wxStyledTextCtrl, getFoldLevel, 1}},
- {3195, {wxStyledTextCtrl, getLastChild, 2}},
- {3196, {wxStyledTextCtrl, getFoldParent, 1}},
- {3197, {wxStyledTextCtrl, showLines, 2}},
- {3198, {wxStyledTextCtrl, hideLines, 2}},
- {3199, {wxStyledTextCtrl, getLineVisible, 1}},
- {3200, {wxStyledTextCtrl, setFoldExpanded, 2}},
- {3201, {wxStyledTextCtrl, getFoldExpanded, 1}},
- {3202, {wxStyledTextCtrl, toggleFold, 1}},
- {3203, {wxStyledTextCtrl, ensureVisible, 1}},
- {3204, {wxStyledTextCtrl, setFoldFlags, 1}},
- {3205, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}},
- {3206, {wxStyledTextCtrl, setTabIndents, 1}},
- {3207, {wxStyledTextCtrl, getTabIndents, 0}},
- {3208, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}},
- {3209, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}},
- {3210, {wxStyledTextCtrl, setMouseDwellTime, 1}},
- {3211, {wxStyledTextCtrl, getMouseDwellTime, 0}},
- {3212, {wxStyledTextCtrl, wordStartPosition, 2}},
- {3213, {wxStyledTextCtrl, wordEndPosition, 2}},
- {3214, {wxStyledTextCtrl, setWrapMode, 1}},
- {3215, {wxStyledTextCtrl, getWrapMode, 0}},
- {3216, {wxStyledTextCtrl, setWrapVisualFlags, 1}},
- {3217, {wxStyledTextCtrl, getWrapVisualFlags, 0}},
- {3218, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}},
- {3219, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}},
- {3220, {wxStyledTextCtrl, setWrapStartIndent, 1}},
- {3221, {wxStyledTextCtrl, getWrapStartIndent, 0}},
- {3222, {wxStyledTextCtrl, setLayoutCache, 1}},
- {3223, {wxStyledTextCtrl, getLayoutCache, 0}},
- {3224, {wxStyledTextCtrl, setScrollWidth, 1}},
- {3225, {wxStyledTextCtrl, getScrollWidth, 0}},
- {3226, {wxStyledTextCtrl, textWidth, 2}},
- {3227, {wxStyledTextCtrl, getEndAtLastLine, 0}},
- {3228, {wxStyledTextCtrl, textHeight, 1}},
- {3229, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}},
- {3230, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}},
- {3231, {wxStyledTextCtrl, appendText, 1}},
- {3232, {wxStyledTextCtrl, getTwoPhaseDraw, 0}},
- {3233, {wxStyledTextCtrl, setTwoPhaseDraw, 1}},
- {3234, {wxStyledTextCtrl, targetFromSelection, 0}},
- {3235, {wxStyledTextCtrl, linesJoin, 0}},
- {3236, {wxStyledTextCtrl, linesSplit, 1}},
- {3237, {wxStyledTextCtrl, setFoldMarginColour, 2}},
- {3238, {wxStyledTextCtrl, setFoldMarginHiColour, 2}},
- {3239, {wxStyledTextCtrl, lineDown, 0}},
- {3240, {wxStyledTextCtrl, lineDownExtend, 0}},
- {3241, {wxStyledTextCtrl, lineUp, 0}},
- {3242, {wxStyledTextCtrl, lineUpExtend, 0}},
- {3243, {wxStyledTextCtrl, charLeft, 0}},
- {3244, {wxStyledTextCtrl, charLeftExtend, 0}},
- {3245, {wxStyledTextCtrl, charRight, 0}},
- {3246, {wxStyledTextCtrl, charRightExtend, 0}},
- {3247, {wxStyledTextCtrl, wordLeft, 0}},
- {3248, {wxStyledTextCtrl, wordLeftExtend, 0}},
- {3249, {wxStyledTextCtrl, wordRight, 0}},
- {3250, {wxStyledTextCtrl, wordRightExtend, 0}},
- {3251, {wxStyledTextCtrl, home, 0}},
- {3252, {wxStyledTextCtrl, homeExtend, 0}},
- {3253, {wxStyledTextCtrl, lineEnd, 0}},
- {3254, {wxStyledTextCtrl, lineEndExtend, 0}},
- {3255, {wxStyledTextCtrl, documentStart, 0}},
- {3256, {wxStyledTextCtrl, documentStartExtend, 0}},
- {3257, {wxStyledTextCtrl, documentEnd, 0}},
- {3258, {wxStyledTextCtrl, documentEndExtend, 0}},
- {3259, {wxStyledTextCtrl, pageUp, 0}},
- {3260, {wxStyledTextCtrl, pageUpExtend, 0}},
- {3261, {wxStyledTextCtrl, pageDown, 0}},
- {3262, {wxStyledTextCtrl, pageDownExtend, 0}},
- {3263, {wxStyledTextCtrl, editToggleOvertype, 0}},
- {3264, {wxStyledTextCtrl, cancel, 0}},
- {3265, {wxStyledTextCtrl, deleteBack, 0}},
- {3266, {wxStyledTextCtrl, tab, 0}},
- {3267, {wxStyledTextCtrl, backTab, 0}},
- {3268, {wxStyledTextCtrl, newLine, 0}},
- {3269, {wxStyledTextCtrl, formFeed, 0}},
- {3270, {wxStyledTextCtrl, vCHome, 0}},
- {3271, {wxStyledTextCtrl, vCHomeExtend, 0}},
- {3272, {wxStyledTextCtrl, zoomIn, 0}},
- {3273, {wxStyledTextCtrl, zoomOut, 0}},
- {3274, {wxStyledTextCtrl, delWordLeft, 0}},
- {3275, {wxStyledTextCtrl, delWordRight, 0}},
- {3276, {wxStyledTextCtrl, lineCut, 0}},
- {3277, {wxStyledTextCtrl, lineDelete, 0}},
- {3278, {wxStyledTextCtrl, lineTranspose, 0}},
- {3279, {wxStyledTextCtrl, lineDuplicate, 0}},
- {3280, {wxStyledTextCtrl, lowerCase, 0}},
- {3281, {wxStyledTextCtrl, upperCase, 0}},
- {3282, {wxStyledTextCtrl, lineScrollDown, 0}},
- {3283, {wxStyledTextCtrl, lineScrollUp, 0}},
- {3284, {wxStyledTextCtrl, deleteBackNotLine, 0}},
- {3285, {wxStyledTextCtrl, homeDisplay, 0}},
- {3286, {wxStyledTextCtrl, homeDisplayExtend, 0}},
- {3287, {wxStyledTextCtrl, lineEndDisplay, 0}},
- {3288, {wxStyledTextCtrl, lineEndDisplayExtend, 0}},
- {3289, {wxStyledTextCtrl, homeWrapExtend, 0}},
- {3290, {wxStyledTextCtrl, lineEndWrap, 0}},
- {3291, {wxStyledTextCtrl, lineEndWrapExtend, 0}},
- {3292, {wxStyledTextCtrl, vCHomeWrap, 0}},
- {3293, {wxStyledTextCtrl, vCHomeWrapExtend, 0}},
- {3294, {wxStyledTextCtrl, lineCopy, 0}},
- {3295, {wxStyledTextCtrl, moveCaretInsideView, 0}},
- {3296, {wxStyledTextCtrl, lineLength, 1}},
- {3297, {wxStyledTextCtrl, braceHighlight, 2}},
- {3298, {wxStyledTextCtrl, braceBadLight, 1}},
- {3299, {wxStyledTextCtrl, braceMatch, 1}},
- {3300, {wxStyledTextCtrl, getViewEOL, 0}},
- {3301, {wxStyledTextCtrl, setViewEOL, 1}},
- {3302, {wxStyledTextCtrl, setModEventMask, 1}},
- {3303, {wxStyledTextCtrl, getEdgeColumn, 0}},
- {3304, {wxStyledTextCtrl, setEdgeColumn, 1}},
- {3305, {wxStyledTextCtrl, setEdgeMode, 1}},
- {3306, {wxStyledTextCtrl, getEdgeMode, 0}},
- {3307, {wxStyledTextCtrl, getEdgeColour, 0}},
- {3308, {wxStyledTextCtrl, setEdgeColour, 1}},
- {3309, {wxStyledTextCtrl, searchAnchor, 0}},
- {3310, {wxStyledTextCtrl, searchNext, 2}},
- {3311, {wxStyledTextCtrl, searchPrev, 2}},
- {3312, {wxStyledTextCtrl, linesOnScreen, 0}},
- {3313, {wxStyledTextCtrl, usePopUp, 1}},
- {3314, {wxStyledTextCtrl, selectionIsRectangle, 0}},
- {3315, {wxStyledTextCtrl, setZoom, 1}},
- {3316, {wxStyledTextCtrl, getZoom, 0}},
- {3317, {wxStyledTextCtrl, getModEventMask, 0}},
- {3318, {wxStyledTextCtrl, setSTCFocus, 1}},
- {3319, {wxStyledTextCtrl, getSTCFocus, 0}},
- {3320, {wxStyledTextCtrl, setStatus, 1}},
- {3321, {wxStyledTextCtrl, getStatus, 0}},
- {3322, {wxStyledTextCtrl, setMouseDownCaptures, 1}},
- {3323, {wxStyledTextCtrl, getMouseDownCaptures, 0}},
- {3324, {wxStyledTextCtrl, setSTCCursor, 1}},
- {3325, {wxStyledTextCtrl, getSTCCursor, 0}},
- {3326, {wxStyledTextCtrl, setControlCharSymbol, 1}},
- {3327, {wxStyledTextCtrl, getControlCharSymbol, 0}},
- {3328, {wxStyledTextCtrl, wordPartLeft, 0}},
- {3329, {wxStyledTextCtrl, wordPartLeftExtend, 0}},
- {3330, {wxStyledTextCtrl, wordPartRight, 0}},
- {3331, {wxStyledTextCtrl, wordPartRightExtend, 0}},
- {3332, {wxStyledTextCtrl, setVisiblePolicy, 2}},
- {3333, {wxStyledTextCtrl, delLineLeft, 0}},
- {3334, {wxStyledTextCtrl, delLineRight, 0}},
- {3335, {wxStyledTextCtrl, getXOffset, 0}},
- {3336, {wxStyledTextCtrl, chooseCaretX, 0}},
- {3337, {wxStyledTextCtrl, setXCaretPolicy, 2}},
- {3338, {wxStyledTextCtrl, setYCaretPolicy, 2}},
- {3339, {wxStyledTextCtrl, getPrintWrapMode, 0}},
- {3340, {wxStyledTextCtrl, setHotspotActiveForeground, 2}},
- {3341, {wxStyledTextCtrl, setHotspotActiveBackground, 2}},
- {3342, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}},
- {3343, {wxStyledTextCtrl, setHotspotSingleLine, 1}},
- {3344, {wxStyledTextCtrl, paraDownExtend, 0}},
- {3345, {wxStyledTextCtrl, paraUp, 0}},
- {3346, {wxStyledTextCtrl, paraUpExtend, 0}},
- {3347, {wxStyledTextCtrl, positionBefore, 1}},
- {3348, {wxStyledTextCtrl, positionAfter, 1}},
- {3349, {wxStyledTextCtrl, copyRange, 2}},
- {3350, {wxStyledTextCtrl, copyText, 2}},
- {3351, {wxStyledTextCtrl, setSelectionMode, 1}},
- {3352, {wxStyledTextCtrl, getSelectionMode, 0}},
- {3353, {wxStyledTextCtrl, lineDownRectExtend, 0}},
- {3354, {wxStyledTextCtrl, lineUpRectExtend, 0}},
- {3355, {wxStyledTextCtrl, charLeftRectExtend, 0}},
- {3356, {wxStyledTextCtrl, charRightRectExtend, 0}},
- {3357, {wxStyledTextCtrl, homeRectExtend, 0}},
- {3358, {wxStyledTextCtrl, vCHomeRectExtend, 0}},
- {3359, {wxStyledTextCtrl, lineEndRectExtend, 0}},
- {3360, {wxStyledTextCtrl, pageUpRectExtend, 0}},
- {3361, {wxStyledTextCtrl, pageDownRectExtend, 0}},
- {3362, {wxStyledTextCtrl, stutteredPageUp, 0}},
- {3363, {wxStyledTextCtrl, stutteredPageUpExtend, 0}},
- {3364, {wxStyledTextCtrl, stutteredPageDown, 0}},
- {3365, {wxStyledTextCtrl, stutteredPageDownExtend, 0}},
- {3366, {wxStyledTextCtrl, wordLeftEnd, 0}},
- {3367, {wxStyledTextCtrl, wordLeftEndExtend, 0}},
- {3368, {wxStyledTextCtrl, wordRightEnd, 0}},
- {3369, {wxStyledTextCtrl, wordRightEndExtend, 0}},
- {3370, {wxStyledTextCtrl, setWhitespaceChars, 1}},
- {3371, {wxStyledTextCtrl, setCharsDefault, 0}},
- {3372, {wxStyledTextCtrl, autoCompGetCurrent, 0}},
- {3373, {wxStyledTextCtrl, allocate, 1}},
- {3374, {wxStyledTextCtrl, findColumn, 2}},
- {3375, {wxStyledTextCtrl, getCaretSticky, 0}},
- {3376, {wxStyledTextCtrl, setCaretSticky, 1}},
- {3377, {wxStyledTextCtrl, toggleCaretSticky, 0}},
- {3378, {wxStyledTextCtrl, setPasteConvertEndings, 1}},
- {3379, {wxStyledTextCtrl, getPasteConvertEndings, 0}},
- {3380, {wxStyledTextCtrl, selectionDuplicate, 0}},
- {3381, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}},
- {3382, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}},
- {3383, {wxStyledTextCtrl, startRecord, 0}},
- {3384, {wxStyledTextCtrl, stopRecord, 0}},
- {3385, {wxStyledTextCtrl, setLexer, 1}},
- {3386, {wxStyledTextCtrl, getLexer, 0}},
- {3387, {wxStyledTextCtrl, colourise, 2}},
- {3388, {wxStyledTextCtrl, setProperty, 2}},
- {3389, {wxStyledTextCtrl, setKeyWords, 2}},
- {3390, {wxStyledTextCtrl, setLexerLanguage, 1}},
- {3391, {wxStyledTextCtrl, getProperty, 1}},
- {3392, {wxStyledTextCtrl, getStyleBitsNeeded, 0}},
- {3393, {wxStyledTextCtrl, getCurrentLine, 0}},
- {3394, {wxStyledTextCtrl, styleSetSpec, 2}},
- {3395, {wxStyledTextCtrl, styleSetFont, 2}},
- {3396, {wxStyledTextCtrl, styleSetFontAttr, 7}},
- {3397, {wxStyledTextCtrl, styleSetCharacterSet, 2}},
- {3398, {wxStyledTextCtrl, styleSetFontEncoding, 2}},
- {3399, {wxStyledTextCtrl, cmdKeyExecute, 1}},
- {3400, {wxStyledTextCtrl, setMargins, 2}},
- {3401, {wxStyledTextCtrl, getSelection, 2}},
- {3402, {wxStyledTextCtrl, pointFromPosition, 1}},
- {3403, {wxStyledTextCtrl, scrollToLine, 1}},
- {3404, {wxStyledTextCtrl, scrollToColumn, 1}},
- {3405, {wxStyledTextCtrl, setVScrollBar, 1}},
- {3406, {wxStyledTextCtrl, setHScrollBar, 1}},
- {3407, {wxStyledTextCtrl, getLastKeydownProcessed, 0}},
- {3408, {wxStyledTextCtrl, setLastKeydownProcessed, 1}},
- {3409, {wxStyledTextCtrl, saveFile, 1}},
- {3410, {wxStyledTextCtrl, loadFile, 1}},
- {3411, {wxStyledTextCtrl, doDragOver, 3}},
- {3412, {wxStyledTextCtrl, doDropText, 3}},
- {3413, {wxStyledTextCtrl, getUseAntiAliasing, 0}},
- {3414, {wxStyledTextCtrl, addTextRaw, 1}},
- {3415, {wxStyledTextCtrl, insertTextRaw, 2}},
- {3416, {wxStyledTextCtrl, getCurLineRaw, 1}},
- {3417, {wxStyledTextCtrl, getLineRaw, 1}},
- {3418, {wxStyledTextCtrl, getSelectedTextRaw, 0}},
- {3419, {wxStyledTextCtrl, getTextRangeRaw, 2}},
- {3420, {wxStyledTextCtrl, setTextRaw, 1}},
- {3421, {wxStyledTextCtrl, getTextRaw, 0}},
- {3422, {wxStyledTextCtrl, appendTextRaw, 1}},
- {3423, {wxArtProvider, getBitmap, 2}},
- {3424, {wxArtProvider, getIcon, 2}},
- {3425, {wxTreeEvent, getKeyCode, 0}},
- {3426, {wxTreeEvent, getItem, 0}},
- {3427, {wxTreeEvent, getKeyEvent, 0}},
- {3428, {wxTreeEvent, getLabel, 0}},
- {3429, {wxTreeEvent, getOldItem, 0}},
- {3430, {wxTreeEvent, getPoint, 0}},
- {3431, {wxTreeEvent, isEditCancelled, 0}},
- {3432, {wxTreeEvent, setToolTip, 1}},
- {3433, {wxNotebookEvent, getOldSelection, 0}},
- {3434, {wxNotebookEvent, getSelection, 0}},
- {3435, {wxNotebookEvent, setOldSelection, 1}},
- {3436, {wxNotebookEvent, setSelection, 1}},
- {3437, {wxFileDataObject, new, 0}},
- {3438, {wxFileDataObject, addFile, 1}},
- {3439, {wxFileDataObject, getFilenames, 0}},
- {3440, {wxFileDataObject, 'Destroy', undefined}},
- {3441, {wxTextDataObject, new, 1}},
- {3442, {wxTextDataObject, getTextLength, 0}},
- {3443, {wxTextDataObject, getText, 0}},
- {3444, {wxTextDataObject, setText, 1}},
- {3445, {wxTextDataObject, 'Destroy', undefined}},
- {3446, {wxBitmapDataObject, new_1_1, 1}},
- {3447, {wxBitmapDataObject, new_1_0, 1}},
- {3448, {wxBitmapDataObject, getBitmap, 0}},
- {3449, {wxBitmapDataObject, setBitmap, 1}},
- {3450, {wxBitmapDataObject, 'Destroy', undefined}},
- {3452, {wxClipboard, new, 0}},
- {3453, {wxClipboard, destruct, 0}},
- {3454, {wxClipboard, addData, 1}},
- {3455, {wxClipboard, clear, 0}},
- {3456, {wxClipboard, close, 0}},
- {3457, {wxClipboard, flush, 0}},
- {3458, {wxClipboard, getData, 1}},
- {3459, {wxClipboard, isOpened, 0}},
- {3460, {wxClipboard, open, 0}},
- {3461, {wxClipboard, setData, 1}},
- {3463, {wxClipboard, usePrimarySelection, 1}},
- {3464, {wxClipboard, isSupported, 1}},
- {3465, {wxClipboard, get, 0}},
- {3466, {wxSpinEvent, getPosition, 0}},
- {3467, {wxSpinEvent, setPosition, 1}},
- {3468, {wxSplitterWindow, new_0, 0}},
- {3469, {wxSplitterWindow, new_2, 2}},
- {3470, {wxSplitterWindow, destruct, 0}},
- {3471, {wxSplitterWindow, create, 2}},
- {3472, {wxSplitterWindow, getMinimumPaneSize, 0}},
- {3473, {wxSplitterWindow, getSashGravity, 0}},
- {3474, {wxSplitterWindow, getSashPosition, 0}},
- {3475, {wxSplitterWindow, getSplitMode, 0}},
- {3476, {wxSplitterWindow, getWindow1, 0}},
- {3477, {wxSplitterWindow, getWindow2, 0}},
- {3478, {wxSplitterWindow, initialize, 1}},
- {3479, {wxSplitterWindow, isSplit, 0}},
- {3480, {wxSplitterWindow, replaceWindow, 2}},
- {3481, {wxSplitterWindow, setSashGravity, 1}},
- {3482, {wxSplitterWindow, setSashPosition, 2}},
- {3483, {wxSplitterWindow, setSashSize, 1}},
- {3484, {wxSplitterWindow, setMinimumPaneSize, 1}},
- {3485, {wxSplitterWindow, setSplitMode, 1}},
- {3486, {wxSplitterWindow, splitHorizontally, 3}},
- {3487, {wxSplitterWindow, splitVertically, 3}},
- {3488, {wxSplitterWindow, unsplit, 1}},
- {3489, {wxSplitterWindow, updateSize, 0}},
- {3490, {wxSplitterEvent, getSashPosition, 0}},
- {3491, {wxSplitterEvent, getX, 0}},
- {3492, {wxSplitterEvent, getY, 0}},
- {3493, {wxSplitterEvent, getWindowBeingRemoved, 0}},
- {3494, {wxSplitterEvent, setSashPosition, 1}},
- {3495, {wxHtmlWindow, new_0, 0}},
- {3496, {wxHtmlWindow, new_2, 2}},
- {3497, {wxHtmlWindow, appendToPage, 1}},
- {3498, {wxHtmlWindow, getOpenedAnchor, 0}},
- {3499, {wxHtmlWindow, getOpenedPage, 0}},
- {3500, {wxHtmlWindow, getOpenedPageTitle, 0}},
- {3501, {wxHtmlWindow, getRelatedFrame, 0}},
- {3502, {wxHtmlWindow, historyBack, 0}},
- {3503, {wxHtmlWindow, historyCanBack, 0}},
- {3504, {wxHtmlWindow, historyCanForward, 0}},
- {3505, {wxHtmlWindow, historyClear, 0}},
- {3506, {wxHtmlWindow, historyForward, 0}},
- {3507, {wxHtmlWindow, loadFile, 1}},
- {3508, {wxHtmlWindow, loadPage, 1}},
- {3509, {wxHtmlWindow, selectAll, 0}},
- {3510, {wxHtmlWindow, selectionToText, 0}},
- {3511, {wxHtmlWindow, selectLine, 1}},
- {3512, {wxHtmlWindow, selectWord, 1}},
- {3513, {wxHtmlWindow, setBorders, 1}},
- {3514, {wxHtmlWindow, setFonts, 3}},
- {3515, {wxHtmlWindow, setPage, 1}},
- {3516, {wxHtmlWindow, setRelatedFrame, 2}},
- {3517, {wxHtmlWindow, setRelatedStatusBar, 1}},
- {3518, {wxHtmlWindow, toText, 0}},
- {3519, {wxHtmlWindow, 'Destroy', undefined}},
- {3520, {wxHtmlLinkEvent, getLinkInfo, 0}},
- {3521, {wxSystemSettings, getColour, 1}},
- {3522, {wxSystemSettings, getFont, 1}},
- {3523, {wxSystemSettings, getMetric, 2}},
- {3524, {wxSystemSettings, getScreenType, 0}},
- {3525, {wxSystemOptions, getOption, 1}},
- {3526, {wxSystemOptions, getOptionInt, 1}},
- {3527, {wxSystemOptions, hasOption, 1}},
- {3528, {wxSystemOptions, isFalse, 1}},
- {3529, {wxSystemOptions, setOption_2_1, 2}},
- {3530, {wxSystemOptions, setOption_2_0, 2}},
- {3531, {wxAuiNotebookEvent, setSelection, 1}},
- {3532, {wxAuiNotebookEvent, getSelection, 0}},
- {3533, {wxAuiNotebookEvent, setOldSelection, 1}},
- {3534, {wxAuiNotebookEvent, getOldSelection, 0}},
- {3535, {wxAuiNotebookEvent, setDragSource, 1}},
- {3536, {wxAuiNotebookEvent, getDragSource, 0}},
- {3537, {wxAuiManagerEvent, setManager, 1}},
- {3538, {wxAuiManagerEvent, getManager, 0}},
- {3539, {wxAuiManagerEvent, setPane, 1}},
- {3540, {wxAuiManagerEvent, getPane, 0}},
- {3541, {wxAuiManagerEvent, setButton, 1}},
- {3542, {wxAuiManagerEvent, getButton, 0}},
- {3543, {wxAuiManagerEvent, setDC, 1}},
- {3544, {wxAuiManagerEvent, getDC, 0}},
- {3545, {wxAuiManagerEvent, veto, 1}},
- {3546, {wxAuiManagerEvent, getVeto, 0}},
- {3547, {wxAuiManagerEvent, setCanVeto, 1}},
- {3548, {wxAuiManagerEvent, canVeto, 0}},
- {3549, {wxLogNull, new, 0}},
- {3550, {wxLogNull, 'Destroy', undefined}},
- {3551, {wxTaskBarIcon, new, 0}},
- {3552, {wxTaskBarIcon, destruct, 0}},
- {3553, {wxTaskBarIcon, popupMenu, 1}},
- {3554, {wxTaskBarIcon, removeIcon, 0}},
- {3555, {wxTaskBarIcon, setIcon, 2}},
- {3556, {wxLocale, new_0, 0}},
- {3558, {wxLocale, new_2, 2}},
- {3559, {wxLocale, destruct, 0}},
- {3561, {wxLocale, init, 1}},
- {3562, {wxLocale, addCatalog_1, 1}},
- {3563, {wxLocale, addCatalog_3, 3}},
- {3564, {wxLocale, addCatalogLookupPathPrefix, 1}},
- {3565, {wxLocale, getCanonicalName, 0}},
- {3566, {wxLocale, getLanguage, 0}},
- {3567, {wxLocale, getLanguageName, 1}},
- {3568, {wxLocale, getLocale, 0}},
- {3569, {wxLocale, getName, 0}},
- {3570, {wxLocale, getString_2, 2}},
- {3571, {wxLocale, getString_4, 4}},
- {3572, {wxLocale, getHeaderValue, 2}},
- {3573, {wxLocale, getSysName, 0}},
- {3574, {wxLocale, getSystemEncoding, 0}},
- {3575, {wxLocale, getSystemEncodingName, 0}},
- {3576, {wxLocale, getSystemLanguage, 0}},
- {3577, {wxLocale, isLoaded, 1}},
- {3578, {wxLocale, isOk, 0}},
- {3579, {wxActivateEvent, getActive, 0}},
- {3581, {wxPopupWindow, new_2, 2}},
- {3582, {wxPopupWindow, new_0, 0}},
- {3584, {wxPopupWindow, destruct, 0}},
- {3585, {wxPopupWindow, create, 2}},
- {3586, {wxPopupWindow, position, 2}},
- {3587, {wxPopupTransientWindow, new_0, 0}},
- {3588, {wxPopupTransientWindow, new_2, 2}},
- {3589, {wxPopupTransientWindow, destruct, 0}},
- {3590, {wxPopupTransientWindow, popup, 1}},
- {3591, {wxPopupTransientWindow, dismiss, 0}},
- {3592, {wxOverlay, new, 0}},
- {3593, {wxOverlay, destruct, 0}},
- {3594, {wxOverlay, reset, 0}},
- {3595, {wxDCOverlay, new_6, 6}},
- {3596, {wxDCOverlay, new_2, 2}},
- {3597, {wxDCOverlay, destruct, 0}},
- {3598, {wxDCOverlay, clear, 0}},
+ {1605, {wxGauge, getRange, 0}},
+ {1606, {wxGauge, getValue, 0}},
+ {1607, {wxGauge, isVertical, 0}},
+ {1608, {wxGauge, setRange, 1}},
+ {1609, {wxGauge, setValue, 1}},
+ {1610, {wxGauge, pulse, 0}},
+ {1611, {wxGauge, 'Destroy', undefined}},
+ {1612, {wxGenericDirCtrl, new_0, 0}},
+ {1613, {wxGenericDirCtrl, new_2, 2}},
+ {1614, {wxGenericDirCtrl, destruct, 0}},
+ {1615, {wxGenericDirCtrl, create, 2}},
+ {1616, {wxGenericDirCtrl, init, 0}},
+ {1617, {wxGenericDirCtrl, collapseTree, 0}},
+ {1618, {wxGenericDirCtrl, expandPath, 1}},
+ {1619, {wxGenericDirCtrl, getDefaultPath, 0}},
+ {1620, {wxGenericDirCtrl, getPath, 0}},
+ {1621, {wxGenericDirCtrl, getFilePath, 0}},
+ {1622, {wxGenericDirCtrl, getFilter, 0}},
+ {1623, {wxGenericDirCtrl, getFilterIndex, 0}},
+ {1624, {wxGenericDirCtrl, getRootId, 0}},
+ {1625, {wxGenericDirCtrl, getTreeCtrl, 0}},
+ {1626, {wxGenericDirCtrl, reCreateTree, 0}},
+ {1627, {wxGenericDirCtrl, setDefaultPath, 1}},
+ {1628, {wxGenericDirCtrl, setFilter, 1}},
+ {1629, {wxGenericDirCtrl, setFilterIndex, 1}},
+ {1630, {wxGenericDirCtrl, setPath, 1}},
+ {1632, {wxStaticBox, new_4, 4}},
+ {1633, {wxStaticBox, new_0, 0}},
+ {1634, {wxStaticBox, create, 4}},
+ {1635, {wxStaticBox, 'Destroy', undefined}},
+ {1637, {wxStaticLine, new_2, 2}},
+ {1638, {wxStaticLine, new_0, 0}},
+ {1639, {wxStaticLine, create, 2}},
+ {1640, {wxStaticLine, isVertical, 0}},
+ {1641, {wxStaticLine, getDefaultSize, 0}},
+ {1642, {wxStaticLine, 'Destroy', undefined}},
+ {1645, {wxListBox, new_3, 3}},
+ {1646, {wxListBox, new_0, 0}},
+ {1648, {wxListBox, destruct, 0}},
+ {1650, {wxListBox, create, 6}},
+ {1651, {wxListBox, deselect, 1}},
+ {1652, {wxListBox, getSelections, 1}},
+ {1653, {wxListBox, insertItems, 2}},
+ {1654, {wxListBox, isSelected, 1}},
+ {1655, {wxListBox, set, 1}},
+ {1656, {wxListBox, hitTest, 1}},
+ {1657, {wxListBox, setFirstItem_1_0, 1}},
+ {1658, {wxListBox, setFirstItem_1_1, 1}},
+ {1659, {wxListCtrl, new_0, 0}},
+ {1660, {wxListCtrl, new_2, 2}},
+ {1661, {wxListCtrl, arrange, 1}},
+ {1662, {wxListCtrl, assignImageList, 2}},
+ {1663, {wxListCtrl, clearAll, 0}},
+ {1664, {wxListCtrl, create, 2}},
+ {1665, {wxListCtrl, deleteAllItems, 0}},
+ {1666, {wxListCtrl, deleteColumn, 1}},
+ {1667, {wxListCtrl, deleteItem, 1}},
+ {1668, {wxListCtrl, editLabel, 1}},
+ {1669, {wxListCtrl, ensureVisible, 1}},
+ {1670, {wxListCtrl, findItem_3_0, 3}},
+ {1671, {wxListCtrl, findItem_3_1, 3}},
+ {1672, {wxListCtrl, getColumn, 2}},
+ {1673, {wxListCtrl, getColumnCount, 0}},
+ {1674, {wxListCtrl, getColumnWidth, 1}},
+ {1675, {wxListCtrl, getCountPerPage, 0}},
+ {1676, {wxListCtrl, getEditControl, 0}},
+ {1677, {wxListCtrl, getImageList, 1}},
+ {1678, {wxListCtrl, getItem, 1}},
+ {1679, {wxListCtrl, getItemBackgroundColour, 1}},
+ {1680, {wxListCtrl, getItemCount, 0}},
+ {1681, {wxListCtrl, getItemData, 1}},
+ {1682, {wxListCtrl, getItemFont, 1}},
+ {1683, {wxListCtrl, getItemPosition, 2}},
+ {1684, {wxListCtrl, getItemRect, 3}},
+ {1685, {wxListCtrl, getItemSpacing, 0}},
+ {1686, {wxListCtrl, getItemState, 2}},
+ {1687, {wxListCtrl, getItemText, 1}},
+ {1688, {wxListCtrl, getItemTextColour, 1}},
+ {1689, {wxListCtrl, getNextItem, 2}},
+ {1690, {wxListCtrl, getSelectedItemCount, 0}},
+ {1691, {wxListCtrl, getTextColour, 0}},
+ {1692, {wxListCtrl, getTopItem, 0}},
+ {1693, {wxListCtrl, getViewRect, 0}},
+ {1694, {wxListCtrl, hitTest, 3}},
+ {1695, {wxListCtrl, insertColumn_2, 2}},
+ {1696, {wxListCtrl, insertColumn_3, 3}},
+ {1697, {wxListCtrl, insertItem_1, 1}},
+ {1698, {wxListCtrl, insertItem_2_1, 2}},
+ {1699, {wxListCtrl, insertItem_2_0, 2}},
+ {1700, {wxListCtrl, insertItem_3, 3}},
+ {1701, {wxListCtrl, refreshItem, 1}},
+ {1702, {wxListCtrl, refreshItems, 2}},
+ {1703, {wxListCtrl, scrollList, 2}},
+ {1704, {wxListCtrl, setBackgroundColour, 1}},
+ {1705, {wxListCtrl, setColumn, 2}},
+ {1706, {wxListCtrl, setColumnWidth, 2}},
+ {1707, {wxListCtrl, setImageList, 2}},
+ {1708, {wxListCtrl, setItem_1, 1}},
+ {1709, {wxListCtrl, setItem_4, 4}},
+ {1710, {wxListCtrl, setItemBackgroundColour, 2}},
+ {1711, {wxListCtrl, setItemCount, 1}},
+ {1712, {wxListCtrl, setItemData, 2}},
+ {1713, {wxListCtrl, setItemFont, 2}},
+ {1714, {wxListCtrl, setItemImage, 3}},
+ {1715, {wxListCtrl, setItemColumnImage, 3}},
+ {1716, {wxListCtrl, setItemPosition, 2}},
+ {1717, {wxListCtrl, setItemState, 3}},
+ {1718, {wxListCtrl, setItemText, 2}},
+ {1719, {wxListCtrl, setItemTextColour, 2}},
+ {1720, {wxListCtrl, setSingleStyle, 2}},
+ {1721, {wxListCtrl, setTextColour, 1}},
+ {1722, {wxListCtrl, setWindowStyleFlag, 1}},
+ {1723, {wxListCtrl, sortItems, 2}},
+ {1724, {wxListCtrl, 'Destroy', undefined}},
+ {1725, {wxListView, clearColumnImage, 1}},
+ {1726, {wxListView, focus, 1}},
+ {1727, {wxListView, getFirstSelected, 0}},
+ {1728, {wxListView, getFocusedItem, 0}},
+ {1729, {wxListView, getNextSelected, 1}},
+ {1730, {wxListView, isSelected, 1}},
+ {1731, {wxListView, select, 2}},
+ {1732, {wxListView, setColumnImage, 2}},
+ {1733, {wxListItem, new_0, 0}},
+ {1734, {wxListItem, new_1, 1}},
+ {1735, {wxListItem, destruct, 0}},
+ {1736, {wxListItem, clear, 0}},
+ {1737, {wxListItem, getAlign, 0}},
+ {1738, {wxListItem, getBackgroundColour, 0}},
+ {1739, {wxListItem, getColumn, 0}},
+ {1740, {wxListItem, getFont, 0}},
+ {1741, {wxListItem, getId, 0}},
+ {1742, {wxListItem, getImage, 0}},
+ {1743, {wxListItem, getMask, 0}},
+ {1744, {wxListItem, getState, 0}},
+ {1745, {wxListItem, getText, 0}},
+ {1746, {wxListItem, getTextColour, 0}},
+ {1747, {wxListItem, getWidth, 0}},
+ {1748, {wxListItem, setAlign, 1}},
+ {1749, {wxListItem, setBackgroundColour, 1}},
+ {1750, {wxListItem, setColumn, 1}},
+ {1751, {wxListItem, setFont, 1}},
+ {1752, {wxListItem, setId, 1}},
+ {1753, {wxListItem, setImage, 1}},
+ {1754, {wxListItem, setMask, 1}},
+ {1755, {wxListItem, setState, 1}},
+ {1756, {wxListItem, setStateMask, 1}},
+ {1757, {wxListItem, setText, 1}},
+ {1758, {wxListItem, setTextColour, 1}},
+ {1759, {wxListItem, setWidth, 1}},
+ {1760, {wxListItemAttr, new_0, 0}},
+ {1761, {wxListItemAttr, new_3, 3}},
+ {1762, {wxListItemAttr, getBackgroundColour, 0}},
+ {1763, {wxListItemAttr, getFont, 0}},
+ {1764, {wxListItemAttr, getTextColour, 0}},
+ {1765, {wxListItemAttr, hasBackgroundColour, 0}},
+ {1766, {wxListItemAttr, hasFont, 0}},
+ {1767, {wxListItemAttr, hasTextColour, 0}},
+ {1768, {wxListItemAttr, setBackgroundColour, 1}},
+ {1769, {wxListItemAttr, setFont, 1}},
+ {1770, {wxListItemAttr, setTextColour, 1}},
+ {1771, {wxListItemAttr, 'Destroy', undefined}},
+ {1772, {wxImageList, new_0, 0}},
+ {1773, {wxImageList, new_3, 3}},
+ {1774, {wxImageList, add_1, 1}},
+ {1775, {wxImageList, add_2_0, 2}},
+ {1776, {wxImageList, add_2_1, 2}},
+ {1777, {wxImageList, create, 3}},
+ {1779, {wxImageList, draw, 5}},
+ {1780, {wxImageList, getBitmap, 1}},
+ {1781, {wxImageList, getIcon, 1}},
+ {1782, {wxImageList, getImageCount, 0}},
+ {1783, {wxImageList, getSize, 3}},
+ {1784, {wxImageList, remove, 1}},
+ {1785, {wxImageList, removeAll, 0}},
+ {1786, {wxImageList, replace_2, 2}},
+ {1787, {wxImageList, replace_3, 3}},
+ {1788, {wxImageList, 'Destroy', undefined}},
+ {1789, {wxTextAttr, new_0, 0}},
+ {1790, {wxTextAttr, new_2, 2}},
+ {1791, {wxTextAttr, getAlignment, 0}},
+ {1792, {wxTextAttr, getBackgroundColour, 0}},
+ {1793, {wxTextAttr, getFont, 0}},
+ {1794, {wxTextAttr, getLeftIndent, 0}},
+ {1795, {wxTextAttr, getLeftSubIndent, 0}},
+ {1796, {wxTextAttr, getRightIndent, 0}},
+ {1797, {wxTextAttr, getTabs, 0}},
+ {1798, {wxTextAttr, getTextColour, 0}},
+ {1799, {wxTextAttr, hasBackgroundColour, 0}},
+ {1800, {wxTextAttr, hasFont, 0}},
+ {1801, {wxTextAttr, hasTextColour, 0}},
+ {1802, {wxTextAttr, getFlags, 0}},
+ {1803, {wxTextAttr, isDefault, 0}},
+ {1804, {wxTextAttr, setAlignment, 1}},
+ {1805, {wxTextAttr, setBackgroundColour, 1}},
+ {1806, {wxTextAttr, setFlags, 1}},
+ {1807, {wxTextAttr, setFont, 2}},
+ {1808, {wxTextAttr, setLeftIndent, 2}},
+ {1809, {wxTextAttr, setRightIndent, 1}},
+ {1810, {wxTextAttr, setTabs, 1}},
+ {1811, {wxTextAttr, setTextColour, 1}},
+ {1812, {wxTextAttr, 'Destroy', undefined}},
+ {1814, {wxTextCtrl, new_3, 3}},
+ {1815, {wxTextCtrl, new_0, 0}},
+ {1817, {wxTextCtrl, destruct, 0}},
+ {1818, {wxTextCtrl, appendText, 1}},
+ {1819, {wxTextCtrl, canCopy, 0}},
+ {1820, {wxTextCtrl, canCut, 0}},
+ {1821, {wxTextCtrl, canPaste, 0}},
+ {1822, {wxTextCtrl, canRedo, 0}},
+ {1823, {wxTextCtrl, canUndo, 0}},
+ {1824, {wxTextCtrl, clear, 0}},
+ {1825, {wxTextCtrl, copy, 0}},
+ {1826, {wxTextCtrl, create, 3}},
+ {1827, {wxTextCtrl, cut, 0}},
+ {1828, {wxTextCtrl, discardEdits, 0}},
+ {1829, {wxTextCtrl, changeValue, 1}},
+ {1830, {wxTextCtrl, emulateKeyPress, 1}},
+ {1831, {wxTextCtrl, getDefaultStyle, 0}},
+ {1832, {wxTextCtrl, getInsertionPoint, 0}},
+ {1833, {wxTextCtrl, getLastPosition, 0}},
+ {1834, {wxTextCtrl, getLineLength, 1}},
+ {1835, {wxTextCtrl, getLineText, 1}},
+ {1836, {wxTextCtrl, getNumberOfLines, 0}},
+ {1837, {wxTextCtrl, getRange, 2}},
+ {1838, {wxTextCtrl, getSelection, 2}},
+ {1839, {wxTextCtrl, getStringSelection, 0}},
+ {1840, {wxTextCtrl, getStyle, 2}},
+ {1841, {wxTextCtrl, getValue, 0}},
+ {1842, {wxTextCtrl, isEditable, 0}},
+ {1843, {wxTextCtrl, isModified, 0}},
+ {1844, {wxTextCtrl, isMultiLine, 0}},
+ {1845, {wxTextCtrl, isSingleLine, 0}},
+ {1846, {wxTextCtrl, loadFile, 2}},
+ {1847, {wxTextCtrl, markDirty, 0}},
+ {1848, {wxTextCtrl, paste, 0}},
+ {1849, {wxTextCtrl, positionToXY, 3}},
+ {1850, {wxTextCtrl, redo, 0}},
+ {1851, {wxTextCtrl, remove, 2}},
+ {1852, {wxTextCtrl, replace, 3}},
+ {1853, {wxTextCtrl, saveFile, 1}},
+ {1854, {wxTextCtrl, setDefaultStyle, 1}},
+ {1855, {wxTextCtrl, setEditable, 1}},
+ {1856, {wxTextCtrl, setInsertionPoint, 1}},
+ {1857, {wxTextCtrl, setInsertionPointEnd, 0}},
+ {1859, {wxTextCtrl, setMaxLength, 1}},
+ {1860, {wxTextCtrl, setSelection, 2}},
+ {1861, {wxTextCtrl, setStyle, 3}},
+ {1862, {wxTextCtrl, setValue, 1}},
+ {1863, {wxTextCtrl, showPosition, 1}},
+ {1864, {wxTextCtrl, undo, 0}},
+ {1865, {wxTextCtrl, writeText, 1}},
+ {1866, {wxTextCtrl, xYToPosition, 2}},
+ {1869, {wxNotebook, new_0, 0}},
+ {1870, {wxNotebook, new_3, 3}},
+ {1871, {wxNotebook, destruct, 0}},
+ {1872, {wxNotebook, addPage, 3}},
+ {1873, {wxNotebook, advanceSelection, 1}},
+ {1874, {wxNotebook, assignImageList, 1}},
+ {1875, {wxNotebook, create, 3}},
+ {1876, {wxNotebook, deleteAllPages, 0}},
+ {1877, {wxNotebook, deletePage, 1}},
+ {1878, {wxNotebook, removePage, 1}},
+ {1879, {wxNotebook, getCurrentPage, 0}},
+ {1880, {wxNotebook, getImageList, 0}},
+ {1882, {wxNotebook, getPage, 1}},
+ {1883, {wxNotebook, getPageCount, 0}},
+ {1884, {wxNotebook, getPageImage, 1}},
+ {1885, {wxNotebook, getPageText, 1}},
+ {1886, {wxNotebook, getRowCount, 0}},
+ {1887, {wxNotebook, getSelection, 0}},
+ {1888, {wxNotebook, getThemeBackgroundColour, 0}},
+ {1890, {wxNotebook, hitTest, 2}},
+ {1892, {wxNotebook, insertPage, 4}},
+ {1893, {wxNotebook, setImageList, 1}},
+ {1894, {wxNotebook, setPadding, 1}},
+ {1895, {wxNotebook, setPageSize, 1}},
+ {1896, {wxNotebook, setPageImage, 2}},
+ {1897, {wxNotebook, setPageText, 2}},
+ {1898, {wxNotebook, setSelection, 1}},
+ {1899, {wxNotebook, changeSelection, 1}},
+ {1900, {wxChoicebook, new_0, 0}},
+ {1901, {wxChoicebook, new_3, 3}},
+ {1902, {wxChoicebook, addPage, 3}},
+ {1903, {wxChoicebook, advanceSelection, 1}},
+ {1904, {wxChoicebook, assignImageList, 1}},
+ {1905, {wxChoicebook, create, 3}},
+ {1906, {wxChoicebook, deleteAllPages, 0}},
+ {1907, {wxChoicebook, deletePage, 1}},
+ {1908, {wxChoicebook, removePage, 1}},
+ {1909, {wxChoicebook, getCurrentPage, 0}},
+ {1910, {wxChoicebook, getImageList, 0}},
+ {1912, {wxChoicebook, getPage, 1}},
+ {1913, {wxChoicebook, getPageCount, 0}},
+ {1914, {wxChoicebook, getPageImage, 1}},
+ {1915, {wxChoicebook, getPageText, 1}},
+ {1916, {wxChoicebook, getSelection, 0}},
+ {1917, {wxChoicebook, hitTest, 2}},
+ {1918, {wxChoicebook, insertPage, 4}},
+ {1919, {wxChoicebook, setImageList, 1}},
+ {1920, {wxChoicebook, setPageSize, 1}},
+ {1921, {wxChoicebook, setPageImage, 2}},
+ {1922, {wxChoicebook, setPageText, 2}},
+ {1923, {wxChoicebook, setSelection, 1}},
+ {1924, {wxChoicebook, changeSelection, 1}},
+ {1925, {wxChoicebook, 'Destroy', undefined}},
+ {1926, {wxToolbook, new_0, 0}},
+ {1927, {wxToolbook, new_3, 3}},
+ {1928, {wxToolbook, addPage, 3}},
+ {1929, {wxToolbook, advanceSelection, 1}},
+ {1930, {wxToolbook, assignImageList, 1}},
+ {1931, {wxToolbook, create, 3}},
+ {1932, {wxToolbook, deleteAllPages, 0}},
+ {1933, {wxToolbook, deletePage, 1}},
+ {1934, {wxToolbook, removePage, 1}},
+ {1935, {wxToolbook, getCurrentPage, 0}},
+ {1936, {wxToolbook, getImageList, 0}},
+ {1938, {wxToolbook, getPage, 1}},
+ {1939, {wxToolbook, getPageCount, 0}},
+ {1940, {wxToolbook, getPageImage, 1}},
+ {1941, {wxToolbook, getPageText, 1}},
+ {1942, {wxToolbook, getSelection, 0}},
+ {1944, {wxToolbook, hitTest, 2}},
+ {1945, {wxToolbook, insertPage, 4}},
+ {1946, {wxToolbook, setImageList, 1}},
+ {1947, {wxToolbook, setPageSize, 1}},
+ {1948, {wxToolbook, setPageImage, 2}},
+ {1949, {wxToolbook, setPageText, 2}},
+ {1950, {wxToolbook, setSelection, 1}},
+ {1951, {wxToolbook, changeSelection, 1}},
+ {1952, {wxToolbook, 'Destroy', undefined}},
+ {1953, {wxListbook, new_0, 0}},
+ {1954, {wxListbook, new_3, 3}},
+ {1955, {wxListbook, addPage, 3}},
+ {1956, {wxListbook, advanceSelection, 1}},
+ {1957, {wxListbook, assignImageList, 1}},
+ {1958, {wxListbook, create, 3}},
+ {1959, {wxListbook, deleteAllPages, 0}},
+ {1960, {wxListbook, deletePage, 1}},
+ {1961, {wxListbook, removePage, 1}},
+ {1962, {wxListbook, getCurrentPage, 0}},
+ {1963, {wxListbook, getImageList, 0}},
+ {1965, {wxListbook, getPage, 1}},
+ {1966, {wxListbook, getPageCount, 0}},
+ {1967, {wxListbook, getPageImage, 1}},
+ {1968, {wxListbook, getPageText, 1}},
+ {1969, {wxListbook, getSelection, 0}},
+ {1971, {wxListbook, hitTest, 2}},
+ {1972, {wxListbook, insertPage, 4}},
+ {1973, {wxListbook, setImageList, 1}},
+ {1974, {wxListbook, setPageSize, 1}},
+ {1975, {wxListbook, setPageImage, 2}},
+ {1976, {wxListbook, setPageText, 2}},
+ {1977, {wxListbook, setSelection, 1}},
+ {1978, {wxListbook, changeSelection, 1}},
+ {1979, {wxListbook, 'Destroy', undefined}},
+ {1980, {wxTreebook, new_0, 0}},
+ {1981, {wxTreebook, new_3, 3}},
+ {1982, {wxTreebook, addPage, 3}},
+ {1983, {wxTreebook, advanceSelection, 1}},
+ {1984, {wxTreebook, assignImageList, 1}},
+ {1985, {wxTreebook, create, 3}},
+ {1986, {wxTreebook, deleteAllPages, 0}},
+ {1987, {wxTreebook, deletePage, 1}},
+ {1988, {wxTreebook, removePage, 1}},
+ {1989, {wxTreebook, getCurrentPage, 0}},
+ {1990, {wxTreebook, getImageList, 0}},
+ {1992, {wxTreebook, getPage, 1}},
+ {1993, {wxTreebook, getPageCount, 0}},
+ {1994, {wxTreebook, getPageImage, 1}},
+ {1995, {wxTreebook, getPageText, 1}},
+ {1996, {wxTreebook, getSelection, 0}},
+ {1997, {wxTreebook, expandNode, 2}},
+ {1998, {wxTreebook, isNodeExpanded, 1}},
+ {2000, {wxTreebook, hitTest, 2}},
+ {2001, {wxTreebook, insertPage, 4}},
+ {2002, {wxTreebook, insertSubPage, 4}},
+ {2003, {wxTreebook, setImageList, 1}},
+ {2004, {wxTreebook, setPageSize, 1}},
+ {2005, {wxTreebook, setPageImage, 2}},
+ {2006, {wxTreebook, setPageText, 2}},
+ {2007, {wxTreebook, setSelection, 1}},
+ {2008, {wxTreebook, changeSelection, 1}},
+ {2009, {wxTreebook, 'Destroy', undefined}},
+ {2012, {wxTreeCtrl, new_2, 2}},
+ {2013, {wxTreeCtrl, new_0, 0}},
+ {2015, {wxTreeCtrl, destruct, 0}},
+ {2016, {wxTreeCtrl, addRoot, 2}},
+ {2017, {wxTreeCtrl, appendItem, 3}},
+ {2018, {wxTreeCtrl, assignImageList, 1}},
+ {2019, {wxTreeCtrl, assignStateImageList, 1}},
+ {2020, {wxTreeCtrl, collapse, 1}},
+ {2021, {wxTreeCtrl, collapseAndReset, 1}},
+ {2022, {wxTreeCtrl, create, 2}},
+ {2023, {wxTreeCtrl, delete, 1}},
+ {2024, {wxTreeCtrl, deleteAllItems, 0}},
+ {2025, {wxTreeCtrl, deleteChildren, 1}},
+ {2026, {wxTreeCtrl, editLabel, 1}},
+ {2027, {wxTreeCtrl, ensureVisible, 1}},
+ {2028, {wxTreeCtrl, expand, 1}},
+ {2029, {wxTreeCtrl, getBoundingRect, 3}},
+ {2031, {wxTreeCtrl, getChildrenCount, 2}},
+ {2032, {wxTreeCtrl, getCount, 0}},
+ {2033, {wxTreeCtrl, getEditControl, 0}},
+ {2034, {wxTreeCtrl, getFirstChild, 2}},
+ {2035, {wxTreeCtrl, getNextChild, 2}},
+ {2036, {wxTreeCtrl, getFirstVisibleItem, 0}},
+ {2037, {wxTreeCtrl, getImageList, 0}},
+ {2038, {wxTreeCtrl, getIndent, 0}},
+ {2039, {wxTreeCtrl, getItemBackgroundColour, 1}},
+ {2040, {wxTreeCtrl, getItemData, 1}},
+ {2041, {wxTreeCtrl, getItemFont, 1}},
+ {2042, {wxTreeCtrl, getItemImage_1, 1}},
+ {2043, {wxTreeCtrl, getItemImage_2, 2}},
+ {2044, {wxTreeCtrl, getItemText, 1}},
+ {2045, {wxTreeCtrl, getItemTextColour, 1}},
+ {2046, {wxTreeCtrl, getLastChild, 1}},
+ {2047, {wxTreeCtrl, getNextSibling, 1}},
+ {2048, {wxTreeCtrl, getNextVisible, 1}},
+ {2049, {wxTreeCtrl, getItemParent, 1}},
+ {2050, {wxTreeCtrl, getPrevSibling, 1}},
+ {2051, {wxTreeCtrl, getPrevVisible, 1}},
+ {2052, {wxTreeCtrl, getRootItem, 0}},
+ {2053, {wxTreeCtrl, getSelection, 0}},
+ {2054, {wxTreeCtrl, getSelections, 1}},
+ {2055, {wxTreeCtrl, getStateImageList, 0}},
+ {2056, {wxTreeCtrl, hitTest, 2}},
+ {2058, {wxTreeCtrl, insertItem, 4}},
+ {2059, {wxTreeCtrl, isBold, 1}},
+ {2060, {wxTreeCtrl, isExpanded, 1}},
+ {2061, {wxTreeCtrl, isSelected, 1}},
+ {2062, {wxTreeCtrl, isVisible, 1}},
+ {2063, {wxTreeCtrl, itemHasChildren, 1}},
+ {2064, {wxTreeCtrl, isTreeItemIdOk, 1}},
+ {2065, {wxTreeCtrl, prependItem, 3}},
+ {2066, {wxTreeCtrl, scrollTo, 1}},
+ {2067, {wxTreeCtrl, selectItem_1, 1}},
+ {2068, {wxTreeCtrl, selectItem_2, 2}},
+ {2069, {wxTreeCtrl, setIndent, 1}},
+ {2070, {wxTreeCtrl, setImageList, 1}},
+ {2071, {wxTreeCtrl, setItemBackgroundColour, 2}},
+ {2072, {wxTreeCtrl, setItemBold, 2}},
+ {2073, {wxTreeCtrl, setItemData, 2}},
+ {2074, {wxTreeCtrl, setItemDropHighlight, 2}},
+ {2075, {wxTreeCtrl, setItemFont, 2}},
+ {2076, {wxTreeCtrl, setItemHasChildren, 2}},
+ {2077, {wxTreeCtrl, setItemImage_2, 2}},
+ {2078, {wxTreeCtrl, setItemImage_3, 3}},
+ {2079, {wxTreeCtrl, setItemText, 2}},
+ {2080, {wxTreeCtrl, setItemTextColour, 2}},
+ {2081, {wxTreeCtrl, setStateImageList, 1}},
+ {2082, {wxTreeCtrl, setWindowStyle, 1}},
+ {2083, {wxTreeCtrl, sortChildren, 1}},
+ {2084, {wxTreeCtrl, toggle, 1}},
+ {2085, {wxTreeCtrl, toggleItemSelection, 1}},
+ {2086, {wxTreeCtrl, unselect, 0}},
+ {2087, {wxTreeCtrl, unselectAll, 0}},
+ {2088, {wxTreeCtrl, unselectItem, 1}},
+ {2089, {wxScrollBar, new_0, 0}},
+ {2090, {wxScrollBar, new_3, 3}},
+ {2091, {wxScrollBar, destruct, 0}},
+ {2092, {wxScrollBar, create, 3}},
+ {2093, {wxScrollBar, getRange, 0}},
+ {2094, {wxScrollBar, getPageSize, 0}},
+ {2095, {wxScrollBar, getThumbPosition, 0}},
+ {2096, {wxScrollBar, getThumbSize, 0}},
+ {2097, {wxScrollBar, setThumbPosition, 1}},
+ {2098, {wxScrollBar, setScrollbar, 5}},
+ {2100, {wxSpinButton, new_2, 2}},
+ {2101, {wxSpinButton, new_0, 0}},
+ {2102, {wxSpinButton, create, 2}},
+ {2103, {wxSpinButton, getMax, 0}},
+ {2104, {wxSpinButton, getMin, 0}},
+ {2105, {wxSpinButton, getValue, 0}},
+ {2106, {wxSpinButton, setRange, 2}},
+ {2107, {wxSpinButton, setValue, 1}},
+ {2108, {wxSpinButton, 'Destroy', undefined}},
+ {2109, {wxSpinCtrl, new_0, 0}},
+ {2110, {wxSpinCtrl, new_2, 2}},
+ {2112, {wxSpinCtrl, create, 2}},
+ {2115, {wxSpinCtrl, setValue_1_1, 1}},
+ {2116, {wxSpinCtrl, setValue_1_0, 1}},
+ {2118, {wxSpinCtrl, getValue, 0}},
+ {2120, {wxSpinCtrl, setRange, 2}},
+ {2121, {wxSpinCtrl, setSelection, 2}},
+ {2123, {wxSpinCtrl, getMin, 0}},
+ {2125, {wxSpinCtrl, getMax, 0}},
+ {2126, {wxSpinCtrl, 'Destroy', undefined}},
+ {2127, {wxStaticText, new_0, 0}},
+ {2128, {wxStaticText, new_4, 4}},
+ {2129, {wxStaticText, create, 4}},
+ {2130, {wxStaticText, getLabel, 0}},
+ {2131, {wxStaticText, setLabel, 1}},
+ {2132, {wxStaticText, wrap, 1}},
+ {2133, {wxStaticText, 'Destroy', undefined}},
+ {2134, {wxStaticBitmap, new_0, 0}},
+ {2135, {wxStaticBitmap, new_4, 4}},
+ {2136, {wxStaticBitmap, create, 4}},
+ {2137, {wxStaticBitmap, getBitmap, 0}},
+ {2138, {wxStaticBitmap, setBitmap, 1}},
+ {2139, {wxStaticBitmap, 'Destroy', undefined}},
+ {2140, {wxRadioBox, new, 7}},
+ {2142, {wxRadioBox, destruct, 0}},
+ {2143, {wxRadioBox, create, 7}},
+ {2144, {wxRadioBox, enable_2, 2}},
+ {2145, {wxRadioBox, enable_1, 1}},
+ {2146, {wxRadioBox, getSelection, 0}},
+ {2147, {wxRadioBox, getString, 1}},
+ {2148, {wxRadioBox, setSelection, 1}},
+ {2149, {wxRadioBox, show_2, 2}},
+ {2150, {wxRadioBox, show_1, 1}},
+ {2151, {wxRadioBox, getColumnCount, 0}},
+ {2152, {wxRadioBox, getItemHelpText, 1}},
+ {2153, {wxRadioBox, getItemToolTip, 1}},
+ {2155, {wxRadioBox, getItemFromPoint, 1}},
+ {2156, {wxRadioBox, getRowCount, 0}},
+ {2157, {wxRadioBox, isItemEnabled, 1}},
+ {2158, {wxRadioBox, isItemShown, 1}},
+ {2159, {wxRadioBox, setItemHelpText, 2}},
+ {2160, {wxRadioBox, setItemToolTip, 2}},
+ {2161, {wxRadioButton, new_0, 0}},
+ {2162, {wxRadioButton, new_4, 4}},
+ {2163, {wxRadioButton, create, 4}},
+ {2164, {wxRadioButton, getValue, 0}},
+ {2165, {wxRadioButton, setValue, 1}},
+ {2166, {wxRadioButton, 'Destroy', undefined}},
+ {2168, {wxSlider, new_6, 6}},
+ {2169, {wxSlider, new_0, 0}},
+ {2170, {wxSlider, create, 6}},
+ {2171, {wxSlider, getLineSize, 0}},
+ {2172, {wxSlider, getMax, 0}},
+ {2173, {wxSlider, getMin, 0}},
+ {2174, {wxSlider, getPageSize, 0}},
+ {2175, {wxSlider, getThumbLength, 0}},
+ {2176, {wxSlider, getValue, 0}},
+ {2177, {wxSlider, setLineSize, 1}},
+ {2178, {wxSlider, setPageSize, 1}},
+ {2179, {wxSlider, setRange, 2}},
+ {2180, {wxSlider, setThumbLength, 1}},
+ {2181, {wxSlider, setValue, 1}},
+ {2182, {wxSlider, 'Destroy', undefined}},
+ {2184, {wxDialog, new_4, 4}},
+ {2185, {wxDialog, new_0, 0}},
+ {2187, {wxDialog, destruct, 0}},
+ {2188, {wxDialog, create, 4}},
+ {2189, {wxDialog, createButtonSizer, 1}},
+ {2190, {wxDialog, createStdDialogButtonSizer, 1}},
+ {2191, {wxDialog, endModal, 1}},
+ {2192, {wxDialog, getAffirmativeId, 0}},
+ {2193, {wxDialog, getReturnCode, 0}},
+ {2194, {wxDialog, isModal, 0}},
+ {2195, {wxDialog, setAffirmativeId, 1}},
+ {2196, {wxDialog, setReturnCode, 1}},
+ {2197, {wxDialog, show, 1}},
+ {2198, {wxDialog, showModal, 0}},
+ {2199, {wxColourDialog, new_0, 0}},
+ {2200, {wxColourDialog, new_2, 2}},
+ {2201, {wxColourDialog, destruct, 0}},
+ {2202, {wxColourDialog, create, 2}},
+ {2203, {wxColourDialog, getColourData, 0}},
+ {2204, {wxColourData, new_0, 0}},
+ {2205, {wxColourData, new_1, 1}},
+ {2206, {wxColourData, destruct, 0}},
+ {2207, {wxColourData, getChooseFull, 0}},
+ {2208, {wxColourData, getColour, 0}},
+ {2210, {wxColourData, getCustomColour, 1}},
+ {2211, {wxColourData, setChooseFull, 1}},
+ {2212, {wxColourData, setColour, 1}},
+ {2213, {wxColourData, setCustomColour, 2}},
+ {2214, {wxPalette, new_0, 0}},
+ {2215, {wxPalette, new_4, 4}},
+ {2217, {wxPalette, destruct, 0}},
+ {2218, {wxPalette, create, 4}},
+ {2219, {wxPalette, getColoursCount, 0}},
+ {2220, {wxPalette, getPixel, 3}},
+ {2221, {wxPalette, getRGB, 4}},
+ {2222, {wxPalette, isOk, 0}},
+ {2226, {wxDirDialog, new, 2}},
+ {2227, {wxDirDialog, destruct, 0}},
+ {2228, {wxDirDialog, getPath, 0}},
+ {2229, {wxDirDialog, getMessage, 0}},
+ {2230, {wxDirDialog, setMessage, 1}},
+ {2231, {wxDirDialog, setPath, 1}},
+ {2235, {wxFileDialog, new, 2}},
+ {2236, {wxFileDialog, destruct, 0}},
+ {2237, {wxFileDialog, getDirectory, 0}},
+ {2238, {wxFileDialog, getFilename, 0}},
+ {2239, {wxFileDialog, getFilenames, 1}},
+ {2240, {wxFileDialog, getFilterIndex, 0}},
+ {2241, {wxFileDialog, getMessage, 0}},
+ {2242, {wxFileDialog, getPath, 0}},
+ {2243, {wxFileDialog, getPaths, 1}},
+ {2244, {wxFileDialog, getWildcard, 0}},
+ {2245, {wxFileDialog, setDirectory, 1}},
+ {2246, {wxFileDialog, setFilename, 1}},
+ {2247, {wxFileDialog, setFilterIndex, 1}},
+ {2248, {wxFileDialog, setMessage, 1}},
+ {2249, {wxFileDialog, setPath, 1}},
+ {2250, {wxFileDialog, setWildcard, 1}},
+ {2251, {wxPickerBase, setInternalMargin, 1}},
+ {2252, {wxPickerBase, getInternalMargin, 0}},
+ {2253, {wxPickerBase, setTextCtrlProportion, 1}},
+ {2254, {wxPickerBase, setPickerCtrlProportion, 1}},
+ {2255, {wxPickerBase, getTextCtrlProportion, 0}},
+ {2256, {wxPickerBase, getPickerCtrlProportion, 0}},
+ {2257, {wxPickerBase, hasTextCtrl, 0}},
+ {2258, {wxPickerBase, getTextCtrl, 0}},
+ {2259, {wxPickerBase, isTextCtrlGrowable, 0}},
+ {2260, {wxPickerBase, setPickerCtrlGrowable, 1}},
+ {2261, {wxPickerBase, setTextCtrlGrowable, 1}},
+ {2262, {wxPickerBase, isPickerCtrlGrowable, 0}},
+ {2263, {wxFilePickerCtrl, new_0, 0}},
+ {2264, {wxFilePickerCtrl, new_3, 3}},
+ {2265, {wxFilePickerCtrl, create, 3}},
+ {2266, {wxFilePickerCtrl, getPath, 0}},
+ {2267, {wxFilePickerCtrl, setPath, 1}},
+ {2268, {wxFilePickerCtrl, 'Destroy', undefined}},
+ {2269, {wxDirPickerCtrl, new_0, 0}},
+ {2270, {wxDirPickerCtrl, new_3, 3}},
+ {2271, {wxDirPickerCtrl, create, 3}},
+ {2272, {wxDirPickerCtrl, getPath, 0}},
+ {2273, {wxDirPickerCtrl, setPath, 1}},
+ {2274, {wxDirPickerCtrl, 'Destroy', undefined}},
+ {2275, {wxColourPickerCtrl, new_0, 0}},
+ {2276, {wxColourPickerCtrl, new_3, 3}},
+ {2277, {wxColourPickerCtrl, create, 3}},
+ {2278, {wxColourPickerCtrl, getColour, 0}},
+ {2279, {wxColourPickerCtrl, setColour_1_1, 1}},
+ {2280, {wxColourPickerCtrl, setColour_1_0, 1}},
+ {2281, {wxColourPickerCtrl, 'Destroy', undefined}},
+ {2282, {wxDatePickerCtrl, new_0, 0}},
+ {2283, {wxDatePickerCtrl, new_3, 3}},
+ {2284, {wxDatePickerCtrl, getRange, 2}},
+ {2285, {wxDatePickerCtrl, getValue, 0}},
+ {2286, {wxDatePickerCtrl, setRange, 2}},
+ {2287, {wxDatePickerCtrl, setValue, 1}},
+ {2288, {wxDatePickerCtrl, 'Destroy', undefined}},
+ {2289, {wxFontPickerCtrl, new_0, 0}},
+ {2290, {wxFontPickerCtrl, new_3, 3}},
+ {2291, {wxFontPickerCtrl, create, 3}},
+ {2292, {wxFontPickerCtrl, getSelectedFont, 0}},
+ {2293, {wxFontPickerCtrl, setSelectedFont, 1}},
+ {2294, {wxFontPickerCtrl, getMaxPointSize, 0}},
+ {2295, {wxFontPickerCtrl, setMaxPointSize, 1}},
+ {2296, {wxFontPickerCtrl, 'Destroy', undefined}},
+ {2299, {wxFindReplaceDialog, new_0, 0}},
+ {2300, {wxFindReplaceDialog, new_4, 4}},
+ {2301, {wxFindReplaceDialog, destruct, 0}},
+ {2302, {wxFindReplaceDialog, create, 4}},
+ {2303, {wxFindReplaceDialog, getData, 0}},
+ {2304, {wxFindReplaceData, new_0, 0}},
+ {2305, {wxFindReplaceData, new_1, 1}},
+ {2306, {wxFindReplaceData, getFindString, 0}},
+ {2307, {wxFindReplaceData, getReplaceString, 0}},
+ {2308, {wxFindReplaceData, getFlags, 0}},
+ {2309, {wxFindReplaceData, setFlags, 1}},
+ {2310, {wxFindReplaceData, setFindString, 1}},
+ {2311, {wxFindReplaceData, setReplaceString, 1}},
+ {2312, {wxFindReplaceData, 'Destroy', undefined}},
+ {2313, {wxMultiChoiceDialog, new_0, 0}},
+ {2315, {wxMultiChoiceDialog, new_5, 5}},
+ {2316, {wxMultiChoiceDialog, getSelections, 0}},
+ {2317, {wxMultiChoiceDialog, setSelections, 1}},
+ {2318, {wxMultiChoiceDialog, 'Destroy', undefined}},
+ {2319, {wxSingleChoiceDialog, new_0, 0}},
+ {2321, {wxSingleChoiceDialog, new_5, 5}},
+ {2322, {wxSingleChoiceDialog, getSelection, 0}},
+ {2323, {wxSingleChoiceDialog, getStringSelection, 0}},
+ {2324, {wxSingleChoiceDialog, setSelection, 1}},
+ {2325, {wxSingleChoiceDialog, 'Destroy', undefined}},
+ {2326, {wxTextEntryDialog, new, 3}},
+ {2327, {wxTextEntryDialog, getValue, 0}},
+ {2328, {wxTextEntryDialog, setValue, 1}},
+ {2329, {wxTextEntryDialog, 'Destroy', undefined}},
+ {2330, {wxPasswordEntryDialog, new, 3}},
+ {2331, {wxPasswordEntryDialog, 'Destroy', undefined}},
+ {2332, {wxFontData, new_0, 0}},
+ {2333, {wxFontData, new_1, 1}},
+ {2334, {wxFontData, destruct, 0}},
+ {2335, {wxFontData, enableEffects, 1}},
+ {2336, {wxFontData, getAllowSymbols, 0}},
+ {2337, {wxFontData, getColour, 0}},
+ {2338, {wxFontData, getChosenFont, 0}},
+ {2339, {wxFontData, getEnableEffects, 0}},
+ {2340, {wxFontData, getInitialFont, 0}},
+ {2341, {wxFontData, getShowHelp, 0}},
+ {2342, {wxFontData, setAllowSymbols, 1}},
+ {2343, {wxFontData, setChosenFont, 1}},
+ {2344, {wxFontData, setColour, 1}},
+ {2345, {wxFontData, setInitialFont, 1}},
+ {2346, {wxFontData, setRange, 2}},
+ {2347, {wxFontData, setShowHelp, 1}},
+ {2351, {wxFontDialog, new_0, 0}},
+ {2353, {wxFontDialog, new_2, 2}},
+ {2355, {wxFontDialog, create, 2}},
+ {2356, {wxFontDialog, getFontData, 0}},
+ {2358, {wxFontDialog, 'Destroy', undefined}},
+ {2359, {wxProgressDialog, new, 3}},
+ {2360, {wxProgressDialog, destruct, 0}},
+ {2361, {wxProgressDialog, resume, 0}},
+ {2362, {wxProgressDialog, update_2, 2}},
+ {2363, {wxProgressDialog, update_0, 0}},
+ {2364, {wxMessageDialog, new, 3}},
+ {2365, {wxMessageDialog, destruct, 0}},
+ {2366, {wxPageSetupDialog, new, 2}},
+ {2367, {wxPageSetupDialog, destruct, 0}},
+ {2368, {wxPageSetupDialog, getPageSetupData, 0}},
+ {2369, {wxPageSetupDialog, showModal, 0}},
+ {2370, {wxPageSetupDialogData, new_0, 0}},
+ {2371, {wxPageSetupDialogData, new_1_0, 1}},
+ {2372, {wxPageSetupDialogData, new_1_1, 1}},
+ {2373, {wxPageSetupDialogData, destruct, 0}},
+ {2374, {wxPageSetupDialogData, enableHelp, 1}},
+ {2375, {wxPageSetupDialogData, enableMargins, 1}},
+ {2376, {wxPageSetupDialogData, enableOrientation, 1}},
+ {2377, {wxPageSetupDialogData, enablePaper, 1}},
+ {2378, {wxPageSetupDialogData, enablePrinter, 1}},
+ {2379, {wxPageSetupDialogData, getDefaultMinMargins, 0}},
+ {2380, {wxPageSetupDialogData, getEnableMargins, 0}},
+ {2381, {wxPageSetupDialogData, getEnableOrientation, 0}},
+ {2382, {wxPageSetupDialogData, getEnablePaper, 0}},
+ {2383, {wxPageSetupDialogData, getEnablePrinter, 0}},
+ {2384, {wxPageSetupDialogData, getEnableHelp, 0}},
+ {2385, {wxPageSetupDialogData, getDefaultInfo, 0}},
+ {2386, {wxPageSetupDialogData, getMarginTopLeft, 0}},
+ {2387, {wxPageSetupDialogData, getMarginBottomRight, 0}},
+ {2388, {wxPageSetupDialogData, getMinMarginTopLeft, 0}},
+ {2389, {wxPageSetupDialogData, getMinMarginBottomRight, 0}},
+ {2390, {wxPageSetupDialogData, getPaperId, 0}},
+ {2391, {wxPageSetupDialogData, getPaperSize, 0}},
+ {2393, {wxPageSetupDialogData, getPrintData, 0}},
+ {2394, {wxPageSetupDialogData, isOk, 0}},
+ {2395, {wxPageSetupDialogData, setDefaultInfo, 1}},
+ {2396, {wxPageSetupDialogData, setDefaultMinMargins, 1}},
+ {2397, {wxPageSetupDialogData, setMarginTopLeft, 1}},
+ {2398, {wxPageSetupDialogData, setMarginBottomRight, 1}},
+ {2399, {wxPageSetupDialogData, setMinMarginTopLeft, 1}},
+ {2400, {wxPageSetupDialogData, setMinMarginBottomRight, 1}},
+ {2401, {wxPageSetupDialogData, setPaperId, 1}},
+ {2402, {wxPageSetupDialogData, setPaperSize_1_1, 1}},
+ {2403, {wxPageSetupDialogData, setPaperSize_1_0, 1}},
+ {2404, {wxPageSetupDialogData, setPrintData, 1}},
+ {2405, {wxPrintDialog, new_2_0, 2}},
+ {2406, {wxPrintDialog, new_2_1, 2}},
+ {2407, {wxPrintDialog, destruct, 0}},
+ {2408, {wxPrintDialog, getPrintDialogData, 0}},
+ {2409, {wxPrintDialog, getPrintDC, 0}},
+ {2410, {wxPrintDialogData, new_0, 0}},
+ {2411, {wxPrintDialogData, new_1_1, 1}},
+ {2412, {wxPrintDialogData, new_1_0, 1}},
+ {2413, {wxPrintDialogData, destruct, 0}},
+ {2414, {wxPrintDialogData, enableHelp, 1}},
+ {2415, {wxPrintDialogData, enablePageNumbers, 1}},
+ {2416, {wxPrintDialogData, enablePrintToFile, 1}},
+ {2417, {wxPrintDialogData, enableSelection, 1}},
+ {2418, {wxPrintDialogData, getAllPages, 0}},
+ {2419, {wxPrintDialogData, getCollate, 0}},
+ {2420, {wxPrintDialogData, getFromPage, 0}},
+ {2421, {wxPrintDialogData, getMaxPage, 0}},
+ {2422, {wxPrintDialogData, getMinPage, 0}},
+ {2423, {wxPrintDialogData, getNoCopies, 0}},
+ {2424, {wxPrintDialogData, getPrintData, 0}},
+ {2425, {wxPrintDialogData, getPrintToFile, 0}},
+ {2426, {wxPrintDialogData, getSelection, 0}},
+ {2427, {wxPrintDialogData, getToPage, 0}},
+ {2428, {wxPrintDialogData, isOk, 0}},
+ {2429, {wxPrintDialogData, setCollate, 1}},
+ {2430, {wxPrintDialogData, setFromPage, 1}},
+ {2431, {wxPrintDialogData, setMaxPage, 1}},
+ {2432, {wxPrintDialogData, setMinPage, 1}},
+ {2433, {wxPrintDialogData, setNoCopies, 1}},
+ {2434, {wxPrintDialogData, setPrintData, 1}},
+ {2435, {wxPrintDialogData, setPrintToFile, 1}},
+ {2436, {wxPrintDialogData, setSelection, 1}},
+ {2437, {wxPrintDialogData, setToPage, 1}},
+ {2438, {wxPrintData, new_0, 0}},
+ {2439, {wxPrintData, new_1, 1}},
+ {2440, {wxPrintData, destruct, 0}},
+ {2441, {wxPrintData, getCollate, 0}},
+ {2442, {wxPrintData, getBin, 0}},
+ {2443, {wxPrintData, getColour, 0}},
+ {2444, {wxPrintData, getDuplex, 0}},
+ {2445, {wxPrintData, getNoCopies, 0}},
+ {2446, {wxPrintData, getOrientation, 0}},
+ {2447, {wxPrintData, getPaperId, 0}},
+ {2448, {wxPrintData, getPrinterName, 0}},
+ {2449, {wxPrintData, getQuality, 0}},
+ {2450, {wxPrintData, isOk, 0}},
+ {2451, {wxPrintData, setBin, 1}},
+ {2452, {wxPrintData, setCollate, 1}},
+ {2453, {wxPrintData, setColour, 1}},
+ {2454, {wxPrintData, setDuplex, 1}},
+ {2455, {wxPrintData, setNoCopies, 1}},
+ {2456, {wxPrintData, setOrientation, 1}},
+ {2457, {wxPrintData, setPaperId, 1}},
+ {2458, {wxPrintData, setPrinterName, 1}},
+ {2459, {wxPrintData, setQuality, 1}},
+ {2462, {wxPrintPreview, new_2, 2}},
+ {2463, {wxPrintPreview, new_3, 3}},
+ {2465, {wxPrintPreview, destruct, 0}},
+ {2466, {wxPrintPreview, getCanvas, 0}},
+ {2467, {wxPrintPreview, getCurrentPage, 0}},
+ {2468, {wxPrintPreview, getFrame, 0}},
+ {2469, {wxPrintPreview, getMaxPage, 0}},
+ {2470, {wxPrintPreview, getMinPage, 0}},
+ {2471, {wxPrintPreview, getPrintout, 0}},
+ {2472, {wxPrintPreview, getPrintoutForPrinting, 0}},
+ {2473, {wxPrintPreview, isOk, 0}},
+ {2474, {wxPrintPreview, paintPage, 2}},
+ {2475, {wxPrintPreview, print, 1}},
+ {2476, {wxPrintPreview, renderPage, 1}},
+ {2477, {wxPrintPreview, setCanvas, 1}},
+ {2478, {wxPrintPreview, setCurrentPage, 1}},
+ {2479, {wxPrintPreview, setFrame, 1}},
+ {2480, {wxPrintPreview, setPrintout, 1}},
+ {2481, {wxPrintPreview, setZoom, 1}},
+ {2482, {wxPreviewFrame, new, 3}},
+ {2483, {wxPreviewFrame, destruct, 0}},
+ {2484, {wxPreviewFrame, createControlBar, 0}},
+ {2485, {wxPreviewFrame, createCanvas, 0}},
+ {2486, {wxPreviewFrame, initialize, 0}},
+ {2487, {wxPreviewFrame, onCloseWindow, 1}},
+ {2488, {wxPreviewControlBar, new, 4}},
+ {2489, {wxPreviewControlBar, destruct, 0}},
+ {2490, {wxPreviewControlBar, createButtons, 0}},
+ {2491, {wxPreviewControlBar, getPrintPreview, 0}},
+ {2492, {wxPreviewControlBar, getZoomControl, 0}},
+ {2493, {wxPreviewControlBar, setZoomControl, 1}},
+ {2495, {wxPrinter, new, 1}},
+ {2496, {wxPrinter, createAbortWindow, 2}},
+ {2497, {wxPrinter, getAbort, 0}},
+ {2498, {wxPrinter, getLastError, 0}},
+ {2499, {wxPrinter, getPrintDialogData, 0}},
+ {2500, {wxPrinter, print, 3}},
+ {2501, {wxPrinter, printDialog, 1}},
+ {2502, {wxPrinter, reportError, 3}},
+ {2503, {wxPrinter, setup, 1}},
+ {2504, {wxPrinter, 'Destroy', undefined}},
+ {2505, {wxXmlResource, new_1, 1}},
+ {2506, {wxXmlResource, new_2, 2}},
+ {2507, {wxXmlResource, destruct, 0}},
+ {2508, {wxXmlResource, attachUnknownControl, 3}},
+ {2509, {wxXmlResource, clearHandlers, 0}},
+ {2510, {wxXmlResource, compareVersion, 4}},
+ {2511, {wxXmlResource, get, 0}},
+ {2512, {wxXmlResource, getFlags, 0}},
+ {2513, {wxXmlResource, getVersion, 0}},
+ {2514, {wxXmlResource, getXRCID, 2}},
+ {2515, {wxXmlResource, initAllHandlers, 0}},
+ {2516, {wxXmlResource, load, 1}},
+ {2517, {wxXmlResource, loadBitmap, 1}},
+ {2518, {wxXmlResource, loadDialog_2, 2}},
+ {2519, {wxXmlResource, loadDialog_3, 3}},
+ {2520, {wxXmlResource, loadFrame_2, 2}},
+ {2521, {wxXmlResource, loadFrame_3, 3}},
+ {2522, {wxXmlResource, loadIcon, 1}},
+ {2523, {wxXmlResource, loadMenu, 1}},
+ {2524, {wxXmlResource, loadMenuBar_2, 2}},
+ {2525, {wxXmlResource, loadMenuBar_1, 1}},
+ {2526, {wxXmlResource, loadPanel_2, 2}},
+ {2527, {wxXmlResource, loadPanel_3, 3}},
+ {2528, {wxXmlResource, loadToolBar, 2}},
+ {2529, {wxXmlResource, set, 1}},
+ {2530, {wxXmlResource, setFlags, 1}},
+ {2531, {wxXmlResource, unload, 1}},
+ {2532, {wxXmlResource, xrcctrl, 3}},
+ {2533, {wxHtmlEasyPrinting, new, 1}},
+ {2534, {wxHtmlEasyPrinting, destruct, 0}},
+ {2535, {wxHtmlEasyPrinting, getPrintData, 0}},
+ {2536, {wxHtmlEasyPrinting, getPageSetupData, 0}},
+ {2537, {wxHtmlEasyPrinting, previewFile, 1}},
+ {2538, {wxHtmlEasyPrinting, previewText, 2}},
+ {2539, {wxHtmlEasyPrinting, printFile, 1}},
+ {2540, {wxHtmlEasyPrinting, printText, 2}},
+ {2541, {wxHtmlEasyPrinting, pageSetup, 0}},
+ {2542, {wxHtmlEasyPrinting, setFonts, 3}},
+ {2543, {wxHtmlEasyPrinting, setHeader, 2}},
+ {2544, {wxHtmlEasyPrinting, setFooter, 2}},
+ {2546, {wxGLCanvas, new_2, 2}},
+ {2547, {wxGLCanvas, new_3_1, 3}},
+ {2548, {wxGLCanvas, new_3_0, 3}},
+ {2549, {wxGLCanvas, getContext, 0}},
+ {2551, {wxGLCanvas, setCurrent, 0}},
+ {2552, {wxGLCanvas, swapBuffers, 0}},
+ {2553, {wxGLCanvas, 'Destroy', undefined}},
+ {2554, {wxAuiManager, new, 1}},
+ {2555, {wxAuiManager, destruct, 0}},
+ {2556, {wxAuiManager, addPane_2_1, 2}},
+ {2557, {wxAuiManager, addPane_3, 3}},
+ {2558, {wxAuiManager, addPane_2_0, 2}},
+ {2559, {wxAuiManager, detachPane, 1}},
+ {2560, {wxAuiManager, getAllPanes, 0}},
+ {2561, {wxAuiManager, getArtProvider, 0}},
+ {2562, {wxAuiManager, getDockSizeConstraint, 2}},
+ {2563, {wxAuiManager, getFlags, 0}},
+ {2564, {wxAuiManager, getManagedWindow, 0}},
+ {2565, {wxAuiManager, getManager, 1}},
+ {2566, {wxAuiManager, getPane_1_1, 1}},
+ {2567, {wxAuiManager, getPane_1_0, 1}},
+ {2568, {wxAuiManager, hideHint, 0}},
+ {2569, {wxAuiManager, insertPane, 3}},
+ {2570, {wxAuiManager, loadPaneInfo, 2}},
+ {2571, {wxAuiManager, loadPerspective, 2}},
+ {2572, {wxAuiManager, savePaneInfo, 1}},
+ {2573, {wxAuiManager, savePerspective, 0}},
+ {2574, {wxAuiManager, setArtProvider, 1}},
+ {2575, {wxAuiManager, setDockSizeConstraint, 2}},
+ {2576, {wxAuiManager, setFlags, 1}},
+ {2577, {wxAuiManager, setManagedWindow, 1}},
+ {2578, {wxAuiManager, showHint, 1}},
+ {2579, {wxAuiManager, unInit, 0}},
+ {2580, {wxAuiManager, update, 0}},
+ {2581, {wxAuiPaneInfo, new_0, 0}},
+ {2582, {wxAuiPaneInfo, new_1, 1}},
+ {2583, {wxAuiPaneInfo, destruct, 0}},
+ {2584, {wxAuiPaneInfo, bestSize_1, 1}},
+ {2585, {wxAuiPaneInfo, bestSize_2, 2}},
+ {2586, {wxAuiPaneInfo, bottom, 0}},
+ {2587, {wxAuiPaneInfo, bottomDockable, 1}},
+ {2588, {wxAuiPaneInfo, caption, 1}},
+ {2589, {wxAuiPaneInfo, captionVisible, 1}},
+ {2590, {wxAuiPaneInfo, centre, 0}},
+ {2591, {wxAuiPaneInfo, centrePane, 0}},
+ {2592, {wxAuiPaneInfo, closeButton, 1}},
+ {2593, {wxAuiPaneInfo, defaultPane, 0}},
+ {2594, {wxAuiPaneInfo, destroyOnClose, 1}},
+ {2595, {wxAuiPaneInfo, direction, 1}},
+ {2596, {wxAuiPaneInfo, dock, 0}},
+ {2597, {wxAuiPaneInfo, dockable, 1}},
+ {2598, {wxAuiPaneInfo, fixed, 0}},
+ {2599, {wxAuiPaneInfo, float, 0}},
+ {2600, {wxAuiPaneInfo, floatable, 1}},
+ {2601, {wxAuiPaneInfo, floatingPosition_1, 1}},
+ {2602, {wxAuiPaneInfo, floatingPosition_2, 2}},
+ {2603, {wxAuiPaneInfo, floatingSize_1, 1}},
+ {2604, {wxAuiPaneInfo, floatingSize_2, 2}},
+ {2605, {wxAuiPaneInfo, gripper, 1}},
+ {2606, {wxAuiPaneInfo, gripperTop, 1}},
+ {2607, {wxAuiPaneInfo, hasBorder, 0}},
+ {2608, {wxAuiPaneInfo, hasCaption, 0}},
+ {2609, {wxAuiPaneInfo, hasCloseButton, 0}},
+ {2610, {wxAuiPaneInfo, hasFlag, 1}},
+ {2611, {wxAuiPaneInfo, hasGripper, 0}},
+ {2612, {wxAuiPaneInfo, hasGripperTop, 0}},
+ {2613, {wxAuiPaneInfo, hasMaximizeButton, 0}},
+ {2614, {wxAuiPaneInfo, hasMinimizeButton, 0}},
+ {2615, {wxAuiPaneInfo, hasPinButton, 0}},
+ {2616, {wxAuiPaneInfo, hide, 0}},
+ {2617, {wxAuiPaneInfo, isBottomDockable, 0}},
+ {2618, {wxAuiPaneInfo, isDocked, 0}},
+ {2619, {wxAuiPaneInfo, isFixed, 0}},
+ {2620, {wxAuiPaneInfo, isFloatable, 0}},
+ {2621, {wxAuiPaneInfo, isFloating, 0}},
+ {2622, {wxAuiPaneInfo, isLeftDockable, 0}},
+ {2623, {wxAuiPaneInfo, isMovable, 0}},
+ {2624, {wxAuiPaneInfo, isOk, 0}},
+ {2625, {wxAuiPaneInfo, isResizable, 0}},
+ {2626, {wxAuiPaneInfo, isRightDockable, 0}},
+ {2627, {wxAuiPaneInfo, isShown, 0}},
+ {2628, {wxAuiPaneInfo, isToolbar, 0}},
+ {2629, {wxAuiPaneInfo, isTopDockable, 0}},
+ {2630, {wxAuiPaneInfo, layer, 1}},
+ {2631, {wxAuiPaneInfo, left, 0}},
+ {2632, {wxAuiPaneInfo, leftDockable, 1}},
+ {2633, {wxAuiPaneInfo, maxSize_1, 1}},
+ {2634, {wxAuiPaneInfo, maxSize_2, 2}},
+ {2635, {wxAuiPaneInfo, maximizeButton, 1}},
+ {2636, {wxAuiPaneInfo, minSize_1, 1}},
+ {2637, {wxAuiPaneInfo, minSize_2, 2}},
+ {2638, {wxAuiPaneInfo, minimizeButton, 1}},
+ {2639, {wxAuiPaneInfo, movable, 1}},
+ {2640, {wxAuiPaneInfo, name, 1}},
+ {2641, {wxAuiPaneInfo, paneBorder, 1}},
+ {2642, {wxAuiPaneInfo, pinButton, 1}},
+ {2643, {wxAuiPaneInfo, position, 1}},
+ {2644, {wxAuiPaneInfo, resizable, 1}},
+ {2645, {wxAuiPaneInfo, right, 0}},
+ {2646, {wxAuiPaneInfo, rightDockable, 1}},
+ {2647, {wxAuiPaneInfo, row, 1}},
+ {2648, {wxAuiPaneInfo, safeSet, 1}},
+ {2649, {wxAuiPaneInfo, setFlag, 2}},
+ {2650, {wxAuiPaneInfo, show, 1}},
+ {2651, {wxAuiPaneInfo, toolbarPane, 0}},
+ {2652, {wxAuiPaneInfo, top, 0}},
+ {2653, {wxAuiPaneInfo, topDockable, 1}},
+ {2654, {wxAuiPaneInfo, window, 1}},
+ {2655, {wxAuiPaneInfo, getWindow, 0}},
+ {2656, {wxAuiPaneInfo, getFrame, 0}},
+ {2657, {wxAuiPaneInfo, getDirection, 0}},
+ {2658, {wxAuiPaneInfo, getLayer, 0}},
+ {2659, {wxAuiPaneInfo, getRow, 0}},
+ {2660, {wxAuiPaneInfo, getPosition, 0}},
+ {2661, {wxAuiPaneInfo, getFloatingPosition, 0}},
+ {2662, {wxAuiPaneInfo, getFloatingSize, 0}},
+ {2663, {wxAuiNotebook, new_0, 0}},
+ {2664, {wxAuiNotebook, new_2, 2}},
+ {2665, {wxAuiNotebook, addPage, 3}},
+ {2666, {wxAuiNotebook, create, 2}},
+ {2667, {wxAuiNotebook, deletePage, 1}},
+ {2668, {wxAuiNotebook, getArtProvider, 0}},
+ {2669, {wxAuiNotebook, getPage, 1}},
+ {2670, {wxAuiNotebook, getPageBitmap, 1}},
+ {2671, {wxAuiNotebook, getPageCount, 0}},
+ {2672, {wxAuiNotebook, getPageIndex, 1}},
+ {2673, {wxAuiNotebook, getPageText, 1}},
+ {2674, {wxAuiNotebook, getSelection, 0}},
+ {2675, {wxAuiNotebook, insertPage, 4}},
+ {2676, {wxAuiNotebook, removePage, 1}},
+ {2677, {wxAuiNotebook, setArtProvider, 1}},
+ {2678, {wxAuiNotebook, setFont, 1}},
+ {2679, {wxAuiNotebook, setPageBitmap, 2}},
+ {2680, {wxAuiNotebook, setPageText, 2}},
+ {2681, {wxAuiNotebook, setSelection, 1}},
+ {2682, {wxAuiNotebook, setTabCtrlHeight, 1}},
+ {2683, {wxAuiNotebook, setUniformBitmapSize, 1}},
+ {2684, {wxAuiNotebook, 'Destroy', undefined}},
+ {2685, {wxAuiTabArt, setFlags, 1}},
+ {2686, {wxAuiTabArt, setMeasuringFont, 1}},
+ {2687, {wxAuiTabArt, setNormalFont, 1}},
+ {2688, {wxAuiTabArt, setSelectedFont, 1}},
+ {2689, {wxAuiTabArt, setColour, 1}},
+ {2690, {wxAuiTabArt, setActiveColour, 1}},
+ {2691, {wxAuiDockArt, getColour, 1}},
+ {2692, {wxAuiDockArt, getFont, 1}},
+ {2693, {wxAuiDockArt, getMetric, 1}},
+ {2694, {wxAuiDockArt, setColour, 2}},
+ {2695, {wxAuiDockArt, setFont, 2}},
+ {2696, {wxAuiDockArt, setMetric, 2}},
+ {2697, {wxAuiSimpleTabArt, new, 0}},
+ {2698, {wxAuiSimpleTabArt, 'Destroy', undefined}},
+ {2699, {wxMDIParentFrame, new_0, 0}},
+ {2700, {wxMDIParentFrame, new_4, 4}},
+ {2701, {wxMDIParentFrame, destruct, 0}},
+ {2702, {wxMDIParentFrame, activateNext, 0}},
+ {2703, {wxMDIParentFrame, activatePrevious, 0}},
+ {2704, {wxMDIParentFrame, arrangeIcons, 0}},
+ {2705, {wxMDIParentFrame, cascade, 0}},
+ {2706, {wxMDIParentFrame, create, 4}},
+ {2707, {wxMDIParentFrame, getActiveChild, 0}},
+ {2708, {wxMDIParentFrame, getClientWindow, 0}},
+ {2709, {wxMDIParentFrame, tile, 1}},
+ {2710, {wxMDIChildFrame, new_0, 0}},
+ {2711, {wxMDIChildFrame, new_4, 4}},
+ {2712, {wxMDIChildFrame, destruct, 0}},
+ {2713, {wxMDIChildFrame, activate, 0}},
+ {2714, {wxMDIChildFrame, create, 4}},
+ {2715, {wxMDIChildFrame, maximize, 1}},
+ {2716, {wxMDIChildFrame, restore, 0}},
+ {2717, {wxMDIClientWindow, new_0, 0}},
+ {2718, {wxMDIClientWindow, new_2, 2}},
+ {2719, {wxMDIClientWindow, destruct, 0}},
+ {2720, {wxMDIClientWindow, createClient, 2}},
+ {2721, {wxLayoutAlgorithm, new, 0}},
+ {2722, {wxLayoutAlgorithm, layoutFrame, 2}},
+ {2723, {wxLayoutAlgorithm, layoutMDIFrame, 2}},
+ {2724, {wxLayoutAlgorithm, layoutWindow, 2}},
+ {2725, {wxLayoutAlgorithm, 'Destroy', undefined}},
+ {2726, {wxEvent, getId, 0}},
+ {2727, {wxEvent, getSkipped, 0}},
+ {2728, {wxEvent, getTimestamp, 0}},
+ {2729, {wxEvent, isCommandEvent, 0}},
+ {2730, {wxEvent, resumePropagation, 1}},
+ {2731, {wxEvent, shouldPropagate, 0}},
+ {2732, {wxEvent, skip, 1}},
+ {2733, {wxEvent, stopPropagation, 0}},
+ {2734, {wxCommandEvent, getClientData, 0}},
+ {2735, {wxCommandEvent, getExtraLong, 0}},
+ {2736, {wxCommandEvent, getInt, 0}},
+ {2737, {wxCommandEvent, getSelection, 0}},
+ {2738, {wxCommandEvent, getString, 0}},
+ {2739, {wxCommandEvent, isChecked, 0}},
+ {2740, {wxCommandEvent, isSelection, 0}},
+ {2741, {wxCommandEvent, setInt, 1}},
+ {2742, {wxCommandEvent, setString, 1}},
+ {2743, {wxScrollEvent, getOrientation, 0}},
+ {2744, {wxScrollEvent, getPosition, 0}},
+ {2745, {wxScrollWinEvent, getOrientation, 0}},
+ {2746, {wxScrollWinEvent, getPosition, 0}},
+ {2747, {wxMouseEvent, altDown, 0}},
+ {2748, {wxMouseEvent, button, 1}},
+ {2749, {wxMouseEvent, buttonDClick, 1}},
+ {2750, {wxMouseEvent, buttonDown, 1}},
+ {2751, {wxMouseEvent, buttonUp, 1}},
+ {2752, {wxMouseEvent, cmdDown, 0}},
+ {2753, {wxMouseEvent, controlDown, 0}},
+ {2754, {wxMouseEvent, dragging, 0}},
+ {2755, {wxMouseEvent, entering, 0}},
+ {2756, {wxMouseEvent, getButton, 0}},
+ {2759, {wxMouseEvent, getPosition, 0}},
+ {2760, {wxMouseEvent, getLogicalPosition, 1}},
+ {2761, {wxMouseEvent, getLinesPerAction, 0}},
+ {2762, {wxMouseEvent, getWheelRotation, 0}},
+ {2763, {wxMouseEvent, getWheelDelta, 0}},
+ {2764, {wxMouseEvent, getX, 0}},
+ {2765, {wxMouseEvent, getY, 0}},
+ {2766, {wxMouseEvent, isButton, 0}},
+ {2767, {wxMouseEvent, isPageScroll, 0}},
+ {2768, {wxMouseEvent, leaving, 0}},
+ {2769, {wxMouseEvent, leftDClick, 0}},
+ {2770, {wxMouseEvent, leftDown, 0}},
+ {2771, {wxMouseEvent, leftIsDown, 0}},
+ {2772, {wxMouseEvent, leftUp, 0}},
+ {2773, {wxMouseEvent, metaDown, 0}},
+ {2774, {wxMouseEvent, middleDClick, 0}},
+ {2775, {wxMouseEvent, middleDown, 0}},
+ {2776, {wxMouseEvent, middleIsDown, 0}},
+ {2777, {wxMouseEvent, middleUp, 0}},
+ {2778, {wxMouseEvent, moving, 0}},
+ {2779, {wxMouseEvent, rightDClick, 0}},
+ {2780, {wxMouseEvent, rightDown, 0}},
+ {2781, {wxMouseEvent, rightIsDown, 0}},
+ {2782, {wxMouseEvent, rightUp, 0}},
+ {2783, {wxMouseEvent, shiftDown, 0}},
+ {2784, {wxSetCursorEvent, getCursor, 0}},
+ {2785, {wxSetCursorEvent, getX, 0}},
+ {2786, {wxSetCursorEvent, getY, 0}},
+ {2787, {wxSetCursorEvent, hasCursor, 0}},
+ {2788, {wxSetCursorEvent, setCursor, 1}},
+ {2789, {wxKeyEvent, altDown, 0}},
+ {2790, {wxKeyEvent, cmdDown, 0}},
+ {2791, {wxKeyEvent, controlDown, 0}},
+ {2792, {wxKeyEvent, getKeyCode, 0}},
+ {2793, {wxKeyEvent, getModifiers, 0}},
+ {2796, {wxKeyEvent, getPosition, 0}},
+ {2797, {wxKeyEvent, getRawKeyCode, 0}},
+ {2798, {wxKeyEvent, getRawKeyFlags, 0}},
+ {2799, {wxKeyEvent, getUnicodeKey, 0}},
+ {2800, {wxKeyEvent, getX, 0}},
+ {2801, {wxKeyEvent, getY, 0}},
+ {2802, {wxKeyEvent, hasModifiers, 0}},
+ {2803, {wxKeyEvent, metaDown, 0}},
+ {2804, {wxKeyEvent, shiftDown, 0}},
+ {2805, {wxSizeEvent, getSize, 0}},
+ {2806, {wxMoveEvent, getPosition, 0}},
+ {2807, {wxEraseEvent, getDC, 0}},
+ {2808, {wxFocusEvent, getWindow, 0}},
+ {2809, {wxChildFocusEvent, getWindow, 0}},
+ {2810, {wxMenuEvent, getMenu, 0}},
+ {2811, {wxMenuEvent, getMenuId, 0}},
+ {2812, {wxMenuEvent, isPopup, 0}},
+ {2813, {wxCloseEvent, canVeto, 0}},
+ {2814, {wxCloseEvent, getLoggingOff, 0}},
+ {2815, {wxCloseEvent, setCanVeto, 1}},
+ {2816, {wxCloseEvent, setLoggingOff, 1}},
+ {2817, {wxCloseEvent, veto, 1}},
+ {2818, {wxShowEvent, setShow, 1}},
+ {2819, {wxShowEvent, getShow, 0}},
+ {2820, {wxIconizeEvent, iconized, 0}},
+ {2821, {wxJoystickEvent, buttonDown, 1}},
+ {2822, {wxJoystickEvent, buttonIsDown, 1}},
+ {2823, {wxJoystickEvent, buttonUp, 1}},
+ {2824, {wxJoystickEvent, getButtonChange, 0}},
+ {2825, {wxJoystickEvent, getButtonState, 0}},
+ {2826, {wxJoystickEvent, getJoystick, 0}},
+ {2827, {wxJoystickEvent, getPosition, 0}},
+ {2828, {wxJoystickEvent, getZPosition, 0}},
+ {2829, {wxJoystickEvent, isButton, 0}},
+ {2830, {wxJoystickEvent, isMove, 0}},
+ {2831, {wxJoystickEvent, isZMove, 0}},
+ {2832, {wxUpdateUIEvent, canUpdate, 1}},
+ {2833, {wxUpdateUIEvent, check, 1}},
+ {2834, {wxUpdateUIEvent, enable, 1}},
+ {2835, {wxUpdateUIEvent, show, 1}},
+ {2836, {wxUpdateUIEvent, getChecked, 0}},
+ {2837, {wxUpdateUIEvent, getEnabled, 0}},
+ {2838, {wxUpdateUIEvent, getShown, 0}},
+ {2839, {wxUpdateUIEvent, getSetChecked, 0}},
+ {2840, {wxUpdateUIEvent, getSetEnabled, 0}},
+ {2841, {wxUpdateUIEvent, getSetShown, 0}},
+ {2842, {wxUpdateUIEvent, getSetText, 0}},
+ {2843, {wxUpdateUIEvent, getText, 0}},
+ {2844, {wxUpdateUIEvent, getMode, 0}},
+ {2845, {wxUpdateUIEvent, getUpdateInterval, 0}},
+ {2846, {wxUpdateUIEvent, resetUpdateTime, 0}},
+ {2847, {wxUpdateUIEvent, setMode, 1}},
+ {2848, {wxUpdateUIEvent, setText, 1}},
+ {2849, {wxUpdateUIEvent, setUpdateInterval, 1}},
+ {2850, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}},
+ {2851, {wxPaletteChangedEvent, setChangedWindow, 1}},
+ {2852, {wxPaletteChangedEvent, getChangedWindow, 0}},
+ {2853, {wxQueryNewPaletteEvent, setPaletteRealized, 1}},
+ {2854, {wxQueryNewPaletteEvent, getPaletteRealized, 0}},
+ {2855, {wxNavigationKeyEvent, getDirection, 0}},
+ {2856, {wxNavigationKeyEvent, setDirection, 1}},
+ {2857, {wxNavigationKeyEvent, isWindowChange, 0}},
+ {2858, {wxNavigationKeyEvent, setWindowChange, 1}},
+ {2859, {wxNavigationKeyEvent, isFromTab, 0}},
+ {2860, {wxNavigationKeyEvent, setFromTab, 1}},
+ {2861, {wxNavigationKeyEvent, getCurrentFocus, 0}},
+ {2862, {wxNavigationKeyEvent, setCurrentFocus, 1}},
+ {2863, {wxHelpEvent, getOrigin, 0}},
+ {2864, {wxHelpEvent, getPosition, 0}},
+ {2865, {wxHelpEvent, setOrigin, 1}},
+ {2866, {wxHelpEvent, setPosition, 1}},
+ {2867, {wxContextMenuEvent, getPosition, 0}},
+ {2868, {wxContextMenuEvent, setPosition, 1}},
+ {2869, {wxIdleEvent, canSend, 1}},
+ {2870, {wxIdleEvent, getMode, 0}},
+ {2871, {wxIdleEvent, requestMore, 1}},
+ {2872, {wxIdleEvent, moreRequested, 0}},
+ {2873, {wxIdleEvent, setMode, 1}},
+ {2874, {wxGridEvent, altDown, 0}},
+ {2875, {wxGridEvent, controlDown, 0}},
+ {2876, {wxGridEvent, getCol, 0}},
+ {2877, {wxGridEvent, getPosition, 0}},
+ {2878, {wxGridEvent, getRow, 0}},
+ {2879, {wxGridEvent, metaDown, 0}},
+ {2880, {wxGridEvent, selecting, 0}},
+ {2881, {wxGridEvent, shiftDown, 0}},
+ {2882, {wxNotifyEvent, allow, 0}},
+ {2883, {wxNotifyEvent, isAllowed, 0}},
+ {2884, {wxNotifyEvent, veto, 0}},
+ {2885, {wxSashEvent, getEdge, 0}},
+ {2886, {wxSashEvent, getDragRect, 0}},
+ {2887, {wxSashEvent, getDragStatus, 0}},
+ {2888, {wxListEvent, getCacheFrom, 0}},
+ {2889, {wxListEvent, getCacheTo, 0}},
+ {2890, {wxListEvent, getKeyCode, 0}},
+ {2891, {wxListEvent, getIndex, 0}},
+ {2892, {wxListEvent, getColumn, 0}},
+ {2893, {wxListEvent, getPoint, 0}},
+ {2894, {wxListEvent, getLabel, 0}},
+ {2895, {wxListEvent, getText, 0}},
+ {2896, {wxListEvent, getImage, 0}},
+ {2897, {wxListEvent, getData, 0}},
+ {2898, {wxListEvent, getMask, 0}},
+ {2899, {wxListEvent, getItem, 0}},
+ {2900, {wxListEvent, isEditCancelled, 0}},
+ {2901, {wxDateEvent, getDate, 0}},
+ {2902, {wxCalendarEvent, getWeekDay, 0}},
+ {2903, {wxFileDirPickerEvent, getPath, 0}},
+ {2904, {wxColourPickerEvent, getColour, 0}},
+ {2905, {wxFontPickerEvent, getFont, 0}},
+ {2906, {wxStyledTextEvent, getPosition, 0}},
+ {2907, {wxStyledTextEvent, getKey, 0}},
+ {2908, {wxStyledTextEvent, getModifiers, 0}},
+ {2909, {wxStyledTextEvent, getModificationType, 0}},
+ {2910, {wxStyledTextEvent, getText, 0}},
+ {2911, {wxStyledTextEvent, getLength, 0}},
+ {2912, {wxStyledTextEvent, getLinesAdded, 0}},
+ {2913, {wxStyledTextEvent, getLine, 0}},
+ {2914, {wxStyledTextEvent, getFoldLevelNow, 0}},
+ {2915, {wxStyledTextEvent, getFoldLevelPrev, 0}},
+ {2916, {wxStyledTextEvent, getMargin, 0}},
+ {2917, {wxStyledTextEvent, getMessage, 0}},
+ {2918, {wxStyledTextEvent, getWParam, 0}},
+ {2919, {wxStyledTextEvent, getLParam, 0}},
+ {2920, {wxStyledTextEvent, getListType, 0}},
+ {2921, {wxStyledTextEvent, getX, 0}},
+ {2922, {wxStyledTextEvent, getY, 0}},
+ {2923, {wxStyledTextEvent, getDragText, 0}},
+ {2924, {wxStyledTextEvent, getDragAllowMove, 0}},
+ {2925, {wxStyledTextEvent, getDragResult, 0}},
+ {2926, {wxStyledTextEvent, getShift, 0}},
+ {2927, {wxStyledTextEvent, getControl, 0}},
+ {2928, {wxStyledTextEvent, getAlt, 0}},
+ {2929, {utils, getKeyState, 1}},
+ {2930, {utils, getMousePosition, 2}},
+ {2931, {utils, getMouseState, 0}},
+ {2932, {utils, setDetectableAutoRepeat, 1}},
+ {2933, {utils, bell, 0}},
+ {2934, {utils, findMenuItemId, 3}},
+ {2935, {utils, genericFindWindowAtPoint, 1}},
+ {2936, {utils, findWindowAtPoint, 1}},
+ {2937, {utils, beginBusyCursor, 1}},
+ {2938, {utils, endBusyCursor, 0}},
+ {2939, {utils, isBusy, 0}},
+ {2940, {utils, shutdown, 1}},
+ {2941, {utils, shell, 1}},
+ {2942, {utils, launchDefaultBrowser, 2}},
+ {2943, {utils, getEmailAddress, 0}},
+ {2944, {utils, getUserId, 0}},
+ {2945, {utils, getHomeDir, 0}},
+ {2946, {utils, newId, 0}},
+ {2947, {utils, registerId, 1}},
+ {2948, {utils, getCurrentId, 0}},
+ {2949, {utils, getOsDescription, 0}},
+ {2950, {utils, isPlatformLittleEndian, 0}},
+ {2951, {utils, isPlatform64Bit, 0}},
+ {2952, {gdicmn, displaySize, 2}},
+ {2953, {gdicmn, setCursor, 1}},
+ {2954, {wxPrintout, new, 1}},
+ {2955, {wxPrintout, destruct, 0}},
+ {2956, {wxPrintout, getDC, 0}},
+ {2957, {wxPrintout, getPageSizeMM, 2}},
+ {2958, {wxPrintout, getPageSizePixels, 2}},
+ {2959, {wxPrintout, getPaperRectPixels, 0}},
+ {2960, {wxPrintout, getPPIPrinter, 2}},
+ {2961, {wxPrintout, getPPIScreen, 2}},
+ {2962, {wxPrintout, getTitle, 0}},
+ {2963, {wxPrintout, isPreview, 0}},
+ {2964, {wxPrintout, fitThisSizeToPaper, 1}},
+ {2965, {wxPrintout, fitThisSizeToPage, 1}},
+ {2966, {wxPrintout, fitThisSizeToPageMargins, 2}},
+ {2967, {wxPrintout, mapScreenSizeToPaper, 0}},
+ {2968, {wxPrintout, mapScreenSizeToPage, 0}},
+ {2969, {wxPrintout, mapScreenSizeToPageMargins, 1}},
+ {2970, {wxPrintout, mapScreenSizeToDevice, 0}},
+ {2971, {wxPrintout, getLogicalPaperRect, 0}},
+ {2972, {wxPrintout, getLogicalPageRect, 0}},
+ {2973, {wxPrintout, getLogicalPageMarginsRect, 1}},
+ {2974, {wxPrintout, setLogicalOrigin, 2}},
+ {2975, {wxPrintout, offsetLogicalOrigin, 2}},
+ {2976, {wxStyledTextCtrl, new_2, 2}},
+ {2977, {wxStyledTextCtrl, new_0, 0}},
+ {2978, {wxStyledTextCtrl, destruct, 0}},
+ {2979, {wxStyledTextCtrl, create, 2}},
+ {2980, {wxStyledTextCtrl, addText, 1}},
+ {2981, {wxStyledTextCtrl, addStyledText, 1}},
+ {2982, {wxStyledTextCtrl, insertText, 2}},
+ {2983, {wxStyledTextCtrl, clearAll, 0}},
+ {2984, {wxStyledTextCtrl, clearDocumentStyle, 0}},
+ {2985, {wxStyledTextCtrl, getLength, 0}},
+ {2986, {wxStyledTextCtrl, getCharAt, 1}},
+ {2987, {wxStyledTextCtrl, getCurrentPos, 0}},
+ {2988, {wxStyledTextCtrl, getAnchor, 0}},
+ {2989, {wxStyledTextCtrl, getStyleAt, 1}},
+ {2990, {wxStyledTextCtrl, redo, 0}},
+ {2991, {wxStyledTextCtrl, setUndoCollection, 1}},
+ {2992, {wxStyledTextCtrl, selectAll, 0}},
+ {2993, {wxStyledTextCtrl, setSavePoint, 0}},
+ {2994, {wxStyledTextCtrl, getStyledText, 2}},
+ {2995, {wxStyledTextCtrl, canRedo, 0}},
+ {2996, {wxStyledTextCtrl, markerLineFromHandle, 1}},
+ {2997, {wxStyledTextCtrl, markerDeleteHandle, 1}},
+ {2998, {wxStyledTextCtrl, getUndoCollection, 0}},
+ {2999, {wxStyledTextCtrl, getViewWhiteSpace, 0}},
+ {3000, {wxStyledTextCtrl, setViewWhiteSpace, 1}},
+ {3001, {wxStyledTextCtrl, positionFromPoint, 1}},
+ {3002, {wxStyledTextCtrl, positionFromPointClose, 2}},
+ {3003, {wxStyledTextCtrl, gotoLine, 1}},
+ {3004, {wxStyledTextCtrl, gotoPos, 1}},
+ {3005, {wxStyledTextCtrl, setAnchor, 1}},
+ {3006, {wxStyledTextCtrl, getCurLine, 1}},
+ {3007, {wxStyledTextCtrl, getEndStyled, 0}},
+ {3008, {wxStyledTextCtrl, convertEOLs, 1}},
+ {3009, {wxStyledTextCtrl, getEOLMode, 0}},
+ {3010, {wxStyledTextCtrl, setEOLMode, 1}},
+ {3011, {wxStyledTextCtrl, startStyling, 2}},
+ {3012, {wxStyledTextCtrl, setStyling, 2}},
+ {3013, {wxStyledTextCtrl, getBufferedDraw, 0}},
+ {3014, {wxStyledTextCtrl, setBufferedDraw, 1}},
+ {3015, {wxStyledTextCtrl, setTabWidth, 1}},
+ {3016, {wxStyledTextCtrl, getTabWidth, 0}},
+ {3017, {wxStyledTextCtrl, setCodePage, 1}},
+ {3018, {wxStyledTextCtrl, markerDefine, 3}},
+ {3019, {wxStyledTextCtrl, markerSetForeground, 2}},
+ {3020, {wxStyledTextCtrl, markerSetBackground, 2}},
+ {3021, {wxStyledTextCtrl, markerAdd, 2}},
+ {3022, {wxStyledTextCtrl, markerDelete, 2}},
+ {3023, {wxStyledTextCtrl, markerDeleteAll, 1}},
+ {3024, {wxStyledTextCtrl, markerGet, 1}},
+ {3025, {wxStyledTextCtrl, markerNext, 2}},
+ {3026, {wxStyledTextCtrl, markerPrevious, 2}},
+ {3027, {wxStyledTextCtrl, markerDefineBitmap, 2}},
+ {3028, {wxStyledTextCtrl, markerAddSet, 2}},
+ {3029, {wxStyledTextCtrl, markerSetAlpha, 2}},
+ {3030, {wxStyledTextCtrl, setMarginType, 2}},
+ {3031, {wxStyledTextCtrl, getMarginType, 1}},
+ {3032, {wxStyledTextCtrl, setMarginWidth, 2}},
+ {3033, {wxStyledTextCtrl, getMarginWidth, 1}},
+ {3034, {wxStyledTextCtrl, setMarginMask, 2}},
+ {3035, {wxStyledTextCtrl, getMarginMask, 1}},
+ {3036, {wxStyledTextCtrl, setMarginSensitive, 2}},
+ {3037, {wxStyledTextCtrl, getMarginSensitive, 1}},
+ {3038, {wxStyledTextCtrl, styleClearAll, 0}},
+ {3039, {wxStyledTextCtrl, styleSetForeground, 2}},
+ {3040, {wxStyledTextCtrl, styleSetBackground, 2}},
+ {3041, {wxStyledTextCtrl, styleSetBold, 2}},
+ {3042, {wxStyledTextCtrl, styleSetItalic, 2}},
+ {3043, {wxStyledTextCtrl, styleSetSize, 2}},
+ {3044, {wxStyledTextCtrl, styleSetFaceName, 2}},
+ {3045, {wxStyledTextCtrl, styleSetEOLFilled, 2}},
+ {3046, {wxStyledTextCtrl, styleResetDefault, 0}},
+ {3047, {wxStyledTextCtrl, styleSetUnderline, 2}},
+ {3048, {wxStyledTextCtrl, styleSetCase, 2}},
+ {3049, {wxStyledTextCtrl, styleSetHotSpot, 2}},
+ {3050, {wxStyledTextCtrl, setSelForeground, 2}},
+ {3051, {wxStyledTextCtrl, setSelBackground, 2}},
+ {3052, {wxStyledTextCtrl, getSelAlpha, 0}},
+ {3053, {wxStyledTextCtrl, setSelAlpha, 1}},
+ {3054, {wxStyledTextCtrl, setCaretForeground, 1}},
+ {3055, {wxStyledTextCtrl, cmdKeyAssign, 3}},
+ {3056, {wxStyledTextCtrl, cmdKeyClear, 2}},
+ {3057, {wxStyledTextCtrl, cmdKeyClearAll, 0}},
+ {3058, {wxStyledTextCtrl, setStyleBytes, 2}},
+ {3059, {wxStyledTextCtrl, styleSetVisible, 2}},
+ {3060, {wxStyledTextCtrl, getCaretPeriod, 0}},
+ {3061, {wxStyledTextCtrl, setCaretPeriod, 1}},
+ {3062, {wxStyledTextCtrl, setWordChars, 1}},
+ {3063, {wxStyledTextCtrl, beginUndoAction, 0}},
+ {3064, {wxStyledTextCtrl, endUndoAction, 0}},
+ {3065, {wxStyledTextCtrl, indicatorSetStyle, 2}},
+ {3066, {wxStyledTextCtrl, indicatorGetStyle, 1}},
+ {3067, {wxStyledTextCtrl, indicatorSetForeground, 2}},
+ {3068, {wxStyledTextCtrl, indicatorGetForeground, 1}},
+ {3069, {wxStyledTextCtrl, setWhitespaceForeground, 2}},
+ {3070, {wxStyledTextCtrl, setWhitespaceBackground, 2}},
+ {3071, {wxStyledTextCtrl, getStyleBits, 0}},
+ {3072, {wxStyledTextCtrl, setLineState, 2}},
+ {3073, {wxStyledTextCtrl, getLineState, 1}},
+ {3074, {wxStyledTextCtrl, getMaxLineState, 0}},
+ {3075, {wxStyledTextCtrl, getCaretLineVisible, 0}},
+ {3076, {wxStyledTextCtrl, setCaretLineVisible, 1}},
+ {3077, {wxStyledTextCtrl, getCaretLineBackground, 0}},
+ {3078, {wxStyledTextCtrl, setCaretLineBackground, 1}},
+ {3079, {wxStyledTextCtrl, autoCompShow, 2}},
+ {3080, {wxStyledTextCtrl, autoCompCancel, 0}},
+ {3081, {wxStyledTextCtrl, autoCompActive, 0}},
+ {3082, {wxStyledTextCtrl, autoCompPosStart, 0}},
+ {3083, {wxStyledTextCtrl, autoCompComplete, 0}},
+ {3084, {wxStyledTextCtrl, autoCompStops, 1}},
+ {3085, {wxStyledTextCtrl, autoCompSetSeparator, 1}},
+ {3086, {wxStyledTextCtrl, autoCompGetSeparator, 0}},
+ {3087, {wxStyledTextCtrl, autoCompSelect, 1}},
+ {3088, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}},
+ {3089, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}},
+ {3090, {wxStyledTextCtrl, autoCompSetFillUps, 1}},
+ {3091, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}},
+ {3092, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}},
+ {3093, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}},
+ {3094, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}},
+ {3095, {wxStyledTextCtrl, userListShow, 2}},
+ {3096, {wxStyledTextCtrl, autoCompSetAutoHide, 1}},
+ {3097, {wxStyledTextCtrl, autoCompGetAutoHide, 0}},
+ {3098, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}},
+ {3099, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}},
+ {3100, {wxStyledTextCtrl, registerImage, 2}},
+ {3101, {wxStyledTextCtrl, clearRegisteredImages, 0}},
+ {3102, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}},
+ {3103, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}},
+ {3104, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}},
+ {3105, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}},
+ {3106, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}},
+ {3107, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}},
+ {3108, {wxStyledTextCtrl, setIndent, 1}},
+ {3109, {wxStyledTextCtrl, getIndent, 0}},
+ {3110, {wxStyledTextCtrl, setUseTabs, 1}},
+ {3111, {wxStyledTextCtrl, getUseTabs, 0}},
+ {3112, {wxStyledTextCtrl, setLineIndentation, 2}},
+ {3113, {wxStyledTextCtrl, getLineIndentation, 1}},
+ {3114, {wxStyledTextCtrl, getLineIndentPosition, 1}},
+ {3115, {wxStyledTextCtrl, getColumn, 1}},
+ {3116, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}},
+ {3117, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}},
+ {3118, {wxStyledTextCtrl, setIndentationGuides, 1}},
+ {3119, {wxStyledTextCtrl, getIndentationGuides, 0}},
+ {3120, {wxStyledTextCtrl, setHighlightGuide, 1}},
+ {3121, {wxStyledTextCtrl, getHighlightGuide, 0}},
+ {3122, {wxStyledTextCtrl, getLineEndPosition, 1}},
+ {3123, {wxStyledTextCtrl, getCodePage, 0}},
+ {3124, {wxStyledTextCtrl, getCaretForeground, 0}},
+ {3125, {wxStyledTextCtrl, getReadOnly, 0}},
+ {3126, {wxStyledTextCtrl, setCurrentPos, 1}},
+ {3127, {wxStyledTextCtrl, setSelectionStart, 1}},
+ {3128, {wxStyledTextCtrl, getSelectionStart, 0}},
+ {3129, {wxStyledTextCtrl, setSelectionEnd, 1}},
+ {3130, {wxStyledTextCtrl, getSelectionEnd, 0}},
+ {3131, {wxStyledTextCtrl, setPrintMagnification, 1}},
+ {3132, {wxStyledTextCtrl, getPrintMagnification, 0}},
+ {3133, {wxStyledTextCtrl, setPrintColourMode, 1}},
+ {3134, {wxStyledTextCtrl, getPrintColourMode, 0}},
+ {3135, {wxStyledTextCtrl, findText, 4}},
+ {3136, {wxStyledTextCtrl, formatRange, 7}},
+ {3137, {wxStyledTextCtrl, getFirstVisibleLine, 0}},
+ {3138, {wxStyledTextCtrl, getLine, 1}},
+ {3139, {wxStyledTextCtrl, getLineCount, 0}},
+ {3140, {wxStyledTextCtrl, setMarginLeft, 1}},
+ {3141, {wxStyledTextCtrl, getMarginLeft, 0}},
+ {3142, {wxStyledTextCtrl, setMarginRight, 1}},
+ {3143, {wxStyledTextCtrl, getMarginRight, 0}},
+ {3144, {wxStyledTextCtrl, getModify, 0}},
+ {3145, {wxStyledTextCtrl, setSelection, 2}},
+ {3146, {wxStyledTextCtrl, getSelectedText, 0}},
+ {3147, {wxStyledTextCtrl, getTextRange, 2}},
+ {3148, {wxStyledTextCtrl, hideSelection, 1}},
+ {3149, {wxStyledTextCtrl, lineFromPosition, 1}},
+ {3150, {wxStyledTextCtrl, positionFromLine, 1}},
+ {3151, {wxStyledTextCtrl, lineScroll, 2}},
+ {3152, {wxStyledTextCtrl, ensureCaretVisible, 0}},
+ {3153, {wxStyledTextCtrl, replaceSelection, 1}},
+ {3154, {wxStyledTextCtrl, setReadOnly, 1}},
+ {3155, {wxStyledTextCtrl, canPaste, 0}},
+ {3156, {wxStyledTextCtrl, canUndo, 0}},
+ {3157, {wxStyledTextCtrl, emptyUndoBuffer, 0}},
+ {3158, {wxStyledTextCtrl, undo, 0}},
+ {3159, {wxStyledTextCtrl, cut, 0}},
+ {3160, {wxStyledTextCtrl, copy, 0}},
+ {3161, {wxStyledTextCtrl, paste, 0}},
+ {3162, {wxStyledTextCtrl, clear, 0}},
+ {3163, {wxStyledTextCtrl, setText, 1}},
+ {3164, {wxStyledTextCtrl, getText, 0}},
+ {3165, {wxStyledTextCtrl, getTextLength, 0}},
+ {3166, {wxStyledTextCtrl, getOvertype, 0}},
+ {3167, {wxStyledTextCtrl, setCaretWidth, 1}},
+ {3168, {wxStyledTextCtrl, getCaretWidth, 0}},
+ {3169, {wxStyledTextCtrl, setTargetStart, 1}},
+ {3170, {wxStyledTextCtrl, getTargetStart, 0}},
+ {3171, {wxStyledTextCtrl, setTargetEnd, 1}},
+ {3172, {wxStyledTextCtrl, getTargetEnd, 0}},
+ {3173, {wxStyledTextCtrl, replaceTarget, 1}},
+ {3174, {wxStyledTextCtrl, searchInTarget, 1}},
+ {3175, {wxStyledTextCtrl, setSearchFlags, 1}},
+ {3176, {wxStyledTextCtrl, getSearchFlags, 0}},
+ {3177, {wxStyledTextCtrl, callTipShow, 2}},
+ {3178, {wxStyledTextCtrl, callTipCancel, 0}},
+ {3179, {wxStyledTextCtrl, callTipActive, 0}},
+ {3180, {wxStyledTextCtrl, callTipPosAtStart, 0}},
+ {3181, {wxStyledTextCtrl, callTipSetHighlight, 2}},
+ {3182, {wxStyledTextCtrl, callTipSetBackground, 1}},
+ {3183, {wxStyledTextCtrl, callTipSetForeground, 1}},
+ {3184, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}},
+ {3185, {wxStyledTextCtrl, callTipUseStyle, 1}},
+ {3186, {wxStyledTextCtrl, visibleFromDocLine, 1}},
+ {3187, {wxStyledTextCtrl, docLineFromVisible, 1}},
+ {3188, {wxStyledTextCtrl, wrapCount, 1}},
+ {3189, {wxStyledTextCtrl, setFoldLevel, 2}},
+ {3190, {wxStyledTextCtrl, getFoldLevel, 1}},
+ {3191, {wxStyledTextCtrl, getLastChild, 2}},
+ {3192, {wxStyledTextCtrl, getFoldParent, 1}},
+ {3193, {wxStyledTextCtrl, showLines, 2}},
+ {3194, {wxStyledTextCtrl, hideLines, 2}},
+ {3195, {wxStyledTextCtrl, getLineVisible, 1}},
+ {3196, {wxStyledTextCtrl, setFoldExpanded, 2}},
+ {3197, {wxStyledTextCtrl, getFoldExpanded, 1}},
+ {3198, {wxStyledTextCtrl, toggleFold, 1}},
+ {3199, {wxStyledTextCtrl, ensureVisible, 1}},
+ {3200, {wxStyledTextCtrl, setFoldFlags, 1}},
+ {3201, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}},
+ {3202, {wxStyledTextCtrl, setTabIndents, 1}},
+ {3203, {wxStyledTextCtrl, getTabIndents, 0}},
+ {3204, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}},
+ {3205, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}},
+ {3206, {wxStyledTextCtrl, setMouseDwellTime, 1}},
+ {3207, {wxStyledTextCtrl, getMouseDwellTime, 0}},
+ {3208, {wxStyledTextCtrl, wordStartPosition, 2}},
+ {3209, {wxStyledTextCtrl, wordEndPosition, 2}},
+ {3210, {wxStyledTextCtrl, setWrapMode, 1}},
+ {3211, {wxStyledTextCtrl, getWrapMode, 0}},
+ {3212, {wxStyledTextCtrl, setWrapVisualFlags, 1}},
+ {3213, {wxStyledTextCtrl, getWrapVisualFlags, 0}},
+ {3214, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}},
+ {3215, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}},
+ {3216, {wxStyledTextCtrl, setWrapStartIndent, 1}},
+ {3217, {wxStyledTextCtrl, getWrapStartIndent, 0}},
+ {3218, {wxStyledTextCtrl, setLayoutCache, 1}},
+ {3219, {wxStyledTextCtrl, getLayoutCache, 0}},
+ {3220, {wxStyledTextCtrl, setScrollWidth, 1}},
+ {3221, {wxStyledTextCtrl, getScrollWidth, 0}},
+ {3222, {wxStyledTextCtrl, textWidth, 2}},
+ {3223, {wxStyledTextCtrl, getEndAtLastLine, 0}},
+ {3224, {wxStyledTextCtrl, textHeight, 1}},
+ {3225, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}},
+ {3226, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}},
+ {3227, {wxStyledTextCtrl, appendText, 1}},
+ {3228, {wxStyledTextCtrl, getTwoPhaseDraw, 0}},
+ {3229, {wxStyledTextCtrl, setTwoPhaseDraw, 1}},
+ {3230, {wxStyledTextCtrl, targetFromSelection, 0}},
+ {3231, {wxStyledTextCtrl, linesJoin, 0}},
+ {3232, {wxStyledTextCtrl, linesSplit, 1}},
+ {3233, {wxStyledTextCtrl, setFoldMarginColour, 2}},
+ {3234, {wxStyledTextCtrl, setFoldMarginHiColour, 2}},
+ {3235, {wxStyledTextCtrl, lineDown, 0}},
+ {3236, {wxStyledTextCtrl, lineDownExtend, 0}},
+ {3237, {wxStyledTextCtrl, lineUp, 0}},
+ {3238, {wxStyledTextCtrl, lineUpExtend, 0}},
+ {3239, {wxStyledTextCtrl, charLeft, 0}},
+ {3240, {wxStyledTextCtrl, charLeftExtend, 0}},
+ {3241, {wxStyledTextCtrl, charRight, 0}},
+ {3242, {wxStyledTextCtrl, charRightExtend, 0}},
+ {3243, {wxStyledTextCtrl, wordLeft, 0}},
+ {3244, {wxStyledTextCtrl, wordLeftExtend, 0}},
+ {3245, {wxStyledTextCtrl, wordRight, 0}},
+ {3246, {wxStyledTextCtrl, wordRightExtend, 0}},
+ {3247, {wxStyledTextCtrl, home, 0}},
+ {3248, {wxStyledTextCtrl, homeExtend, 0}},
+ {3249, {wxStyledTextCtrl, lineEnd, 0}},
+ {3250, {wxStyledTextCtrl, lineEndExtend, 0}},
+ {3251, {wxStyledTextCtrl, documentStart, 0}},
+ {3252, {wxStyledTextCtrl, documentStartExtend, 0}},
+ {3253, {wxStyledTextCtrl, documentEnd, 0}},
+ {3254, {wxStyledTextCtrl, documentEndExtend, 0}},
+ {3255, {wxStyledTextCtrl, pageUp, 0}},
+ {3256, {wxStyledTextCtrl, pageUpExtend, 0}},
+ {3257, {wxStyledTextCtrl, pageDown, 0}},
+ {3258, {wxStyledTextCtrl, pageDownExtend, 0}},
+ {3259, {wxStyledTextCtrl, editToggleOvertype, 0}},
+ {3260, {wxStyledTextCtrl, cancel, 0}},
+ {3261, {wxStyledTextCtrl, deleteBack, 0}},
+ {3262, {wxStyledTextCtrl, tab, 0}},
+ {3263, {wxStyledTextCtrl, backTab, 0}},
+ {3264, {wxStyledTextCtrl, newLine, 0}},
+ {3265, {wxStyledTextCtrl, formFeed, 0}},
+ {3266, {wxStyledTextCtrl, vCHome, 0}},
+ {3267, {wxStyledTextCtrl, vCHomeExtend, 0}},
+ {3268, {wxStyledTextCtrl, zoomIn, 0}},
+ {3269, {wxStyledTextCtrl, zoomOut, 0}},
+ {3270, {wxStyledTextCtrl, delWordLeft, 0}},
+ {3271, {wxStyledTextCtrl, delWordRight, 0}},
+ {3272, {wxStyledTextCtrl, lineCut, 0}},
+ {3273, {wxStyledTextCtrl, lineDelete, 0}},
+ {3274, {wxStyledTextCtrl, lineTranspose, 0}},
+ {3275, {wxStyledTextCtrl, lineDuplicate, 0}},
+ {3276, {wxStyledTextCtrl, lowerCase, 0}},
+ {3277, {wxStyledTextCtrl, upperCase, 0}},
+ {3278, {wxStyledTextCtrl, lineScrollDown, 0}},
+ {3279, {wxStyledTextCtrl, lineScrollUp, 0}},
+ {3280, {wxStyledTextCtrl, deleteBackNotLine, 0}},
+ {3281, {wxStyledTextCtrl, homeDisplay, 0}},
+ {3282, {wxStyledTextCtrl, homeDisplayExtend, 0}},
+ {3283, {wxStyledTextCtrl, lineEndDisplay, 0}},
+ {3284, {wxStyledTextCtrl, lineEndDisplayExtend, 0}},
+ {3285, {wxStyledTextCtrl, homeWrapExtend, 0}},
+ {3286, {wxStyledTextCtrl, lineEndWrap, 0}},
+ {3287, {wxStyledTextCtrl, lineEndWrapExtend, 0}},
+ {3288, {wxStyledTextCtrl, vCHomeWrap, 0}},
+ {3289, {wxStyledTextCtrl, vCHomeWrapExtend, 0}},
+ {3290, {wxStyledTextCtrl, lineCopy, 0}},
+ {3291, {wxStyledTextCtrl, moveCaretInsideView, 0}},
+ {3292, {wxStyledTextCtrl, lineLength, 1}},
+ {3293, {wxStyledTextCtrl, braceHighlight, 2}},
+ {3294, {wxStyledTextCtrl, braceBadLight, 1}},
+ {3295, {wxStyledTextCtrl, braceMatch, 1}},
+ {3296, {wxStyledTextCtrl, getViewEOL, 0}},
+ {3297, {wxStyledTextCtrl, setViewEOL, 1}},
+ {3298, {wxStyledTextCtrl, setModEventMask, 1}},
+ {3299, {wxStyledTextCtrl, getEdgeColumn, 0}},
+ {3300, {wxStyledTextCtrl, setEdgeColumn, 1}},
+ {3301, {wxStyledTextCtrl, setEdgeMode, 1}},
+ {3302, {wxStyledTextCtrl, getEdgeMode, 0}},
+ {3303, {wxStyledTextCtrl, getEdgeColour, 0}},
+ {3304, {wxStyledTextCtrl, setEdgeColour, 1}},
+ {3305, {wxStyledTextCtrl, searchAnchor, 0}},
+ {3306, {wxStyledTextCtrl, searchNext, 2}},
+ {3307, {wxStyledTextCtrl, searchPrev, 2}},
+ {3308, {wxStyledTextCtrl, linesOnScreen, 0}},
+ {3309, {wxStyledTextCtrl, usePopUp, 1}},
+ {3310, {wxStyledTextCtrl, selectionIsRectangle, 0}},
+ {3311, {wxStyledTextCtrl, setZoom, 1}},
+ {3312, {wxStyledTextCtrl, getZoom, 0}},
+ {3313, {wxStyledTextCtrl, getModEventMask, 0}},
+ {3314, {wxStyledTextCtrl, setSTCFocus, 1}},
+ {3315, {wxStyledTextCtrl, getSTCFocus, 0}},
+ {3316, {wxStyledTextCtrl, setStatus, 1}},
+ {3317, {wxStyledTextCtrl, getStatus, 0}},
+ {3318, {wxStyledTextCtrl, setMouseDownCaptures, 1}},
+ {3319, {wxStyledTextCtrl, getMouseDownCaptures, 0}},
+ {3320, {wxStyledTextCtrl, setSTCCursor, 1}},
+ {3321, {wxStyledTextCtrl, getSTCCursor, 0}},
+ {3322, {wxStyledTextCtrl, setControlCharSymbol, 1}},
+ {3323, {wxStyledTextCtrl, getControlCharSymbol, 0}},
+ {3324, {wxStyledTextCtrl, wordPartLeft, 0}},
+ {3325, {wxStyledTextCtrl, wordPartLeftExtend, 0}},
+ {3326, {wxStyledTextCtrl, wordPartRight, 0}},
+ {3327, {wxStyledTextCtrl, wordPartRightExtend, 0}},
+ {3328, {wxStyledTextCtrl, setVisiblePolicy, 2}},
+ {3329, {wxStyledTextCtrl, delLineLeft, 0}},
+ {3330, {wxStyledTextCtrl, delLineRight, 0}},
+ {3331, {wxStyledTextCtrl, getXOffset, 0}},
+ {3332, {wxStyledTextCtrl, chooseCaretX, 0}},
+ {3333, {wxStyledTextCtrl, setXCaretPolicy, 2}},
+ {3334, {wxStyledTextCtrl, setYCaretPolicy, 2}},
+ {3335, {wxStyledTextCtrl, getPrintWrapMode, 0}},
+ {3336, {wxStyledTextCtrl, setHotspotActiveForeground, 2}},
+ {3337, {wxStyledTextCtrl, setHotspotActiveBackground, 2}},
+ {3338, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}},
+ {3339, {wxStyledTextCtrl, setHotspotSingleLine, 1}},
+ {3340, {wxStyledTextCtrl, paraDownExtend, 0}},
+ {3341, {wxStyledTextCtrl, paraUp, 0}},
+ {3342, {wxStyledTextCtrl, paraUpExtend, 0}},
+ {3343, {wxStyledTextCtrl, positionBefore, 1}},
+ {3344, {wxStyledTextCtrl, positionAfter, 1}},
+ {3345, {wxStyledTextCtrl, copyRange, 2}},
+ {3346, {wxStyledTextCtrl, copyText, 2}},
+ {3347, {wxStyledTextCtrl, setSelectionMode, 1}},
+ {3348, {wxStyledTextCtrl, getSelectionMode, 0}},
+ {3349, {wxStyledTextCtrl, lineDownRectExtend, 0}},
+ {3350, {wxStyledTextCtrl, lineUpRectExtend, 0}},
+ {3351, {wxStyledTextCtrl, charLeftRectExtend, 0}},
+ {3352, {wxStyledTextCtrl, charRightRectExtend, 0}},
+ {3353, {wxStyledTextCtrl, homeRectExtend, 0}},
+ {3354, {wxStyledTextCtrl, vCHomeRectExtend, 0}},
+ {3355, {wxStyledTextCtrl, lineEndRectExtend, 0}},
+ {3356, {wxStyledTextCtrl, pageUpRectExtend, 0}},
+ {3357, {wxStyledTextCtrl, pageDownRectExtend, 0}},
+ {3358, {wxStyledTextCtrl, stutteredPageUp, 0}},
+ {3359, {wxStyledTextCtrl, stutteredPageUpExtend, 0}},
+ {3360, {wxStyledTextCtrl, stutteredPageDown, 0}},
+ {3361, {wxStyledTextCtrl, stutteredPageDownExtend, 0}},
+ {3362, {wxStyledTextCtrl, wordLeftEnd, 0}},
+ {3363, {wxStyledTextCtrl, wordLeftEndExtend, 0}},
+ {3364, {wxStyledTextCtrl, wordRightEnd, 0}},
+ {3365, {wxStyledTextCtrl, wordRightEndExtend, 0}},
+ {3366, {wxStyledTextCtrl, setWhitespaceChars, 1}},
+ {3367, {wxStyledTextCtrl, setCharsDefault, 0}},
+ {3368, {wxStyledTextCtrl, autoCompGetCurrent, 0}},
+ {3369, {wxStyledTextCtrl, allocate, 1}},
+ {3370, {wxStyledTextCtrl, findColumn, 2}},
+ {3371, {wxStyledTextCtrl, getCaretSticky, 0}},
+ {3372, {wxStyledTextCtrl, setCaretSticky, 1}},
+ {3373, {wxStyledTextCtrl, toggleCaretSticky, 0}},
+ {3374, {wxStyledTextCtrl, setPasteConvertEndings, 1}},
+ {3375, {wxStyledTextCtrl, getPasteConvertEndings, 0}},
+ {3376, {wxStyledTextCtrl, selectionDuplicate, 0}},
+ {3377, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}},
+ {3378, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}},
+ {3379, {wxStyledTextCtrl, startRecord, 0}},
+ {3380, {wxStyledTextCtrl, stopRecord, 0}},
+ {3381, {wxStyledTextCtrl, setLexer, 1}},
+ {3382, {wxStyledTextCtrl, getLexer, 0}},
+ {3383, {wxStyledTextCtrl, colourise, 2}},
+ {3384, {wxStyledTextCtrl, setProperty, 2}},
+ {3385, {wxStyledTextCtrl, setKeyWords, 2}},
+ {3386, {wxStyledTextCtrl, setLexerLanguage, 1}},
+ {3387, {wxStyledTextCtrl, getProperty, 1}},
+ {3388, {wxStyledTextCtrl, getStyleBitsNeeded, 0}},
+ {3389, {wxStyledTextCtrl, getCurrentLine, 0}},
+ {3390, {wxStyledTextCtrl, styleSetSpec, 2}},
+ {3391, {wxStyledTextCtrl, styleSetFont, 2}},
+ {3392, {wxStyledTextCtrl, styleSetFontAttr, 7}},
+ {3393, {wxStyledTextCtrl, styleSetCharacterSet, 2}},
+ {3394, {wxStyledTextCtrl, styleSetFontEncoding, 2}},
+ {3395, {wxStyledTextCtrl, cmdKeyExecute, 1}},
+ {3396, {wxStyledTextCtrl, setMargins, 2}},
+ {3397, {wxStyledTextCtrl, getSelection, 2}},
+ {3398, {wxStyledTextCtrl, pointFromPosition, 1}},
+ {3399, {wxStyledTextCtrl, scrollToLine, 1}},
+ {3400, {wxStyledTextCtrl, scrollToColumn, 1}},
+ {3401, {wxStyledTextCtrl, setVScrollBar, 1}},
+ {3402, {wxStyledTextCtrl, setHScrollBar, 1}},
+ {3403, {wxStyledTextCtrl, getLastKeydownProcessed, 0}},
+ {3404, {wxStyledTextCtrl, setLastKeydownProcessed, 1}},
+ {3405, {wxStyledTextCtrl, saveFile, 1}},
+ {3406, {wxStyledTextCtrl, loadFile, 1}},
+ {3407, {wxStyledTextCtrl, doDragOver, 3}},
+ {3408, {wxStyledTextCtrl, doDropText, 3}},
+ {3409, {wxStyledTextCtrl, getUseAntiAliasing, 0}},
+ {3410, {wxStyledTextCtrl, addTextRaw, 1}},
+ {3411, {wxStyledTextCtrl, insertTextRaw, 2}},
+ {3412, {wxStyledTextCtrl, getCurLineRaw, 1}},
+ {3413, {wxStyledTextCtrl, getLineRaw, 1}},
+ {3414, {wxStyledTextCtrl, getSelectedTextRaw, 0}},
+ {3415, {wxStyledTextCtrl, getTextRangeRaw, 2}},
+ {3416, {wxStyledTextCtrl, setTextRaw, 1}},
+ {3417, {wxStyledTextCtrl, getTextRaw, 0}},
+ {3418, {wxStyledTextCtrl, appendTextRaw, 1}},
+ {3419, {wxArtProvider, getBitmap, 2}},
+ {3420, {wxArtProvider, getIcon, 2}},
+ {3421, {wxTreeEvent, getKeyCode, 0}},
+ {3422, {wxTreeEvent, getItem, 0}},
+ {3423, {wxTreeEvent, getKeyEvent, 0}},
+ {3424, {wxTreeEvent, getLabel, 0}},
+ {3425, {wxTreeEvent, getOldItem, 0}},
+ {3426, {wxTreeEvent, getPoint, 0}},
+ {3427, {wxTreeEvent, isEditCancelled, 0}},
+ {3428, {wxTreeEvent, setToolTip, 1}},
+ {3429, {wxNotebookEvent, getOldSelection, 0}},
+ {3430, {wxNotebookEvent, getSelection, 0}},
+ {3431, {wxNotebookEvent, setOldSelection, 1}},
+ {3432, {wxNotebookEvent, setSelection, 1}},
+ {3433, {wxFileDataObject, new, 0}},
+ {3434, {wxFileDataObject, addFile, 1}},
+ {3435, {wxFileDataObject, getFilenames, 0}},
+ {3436, {wxFileDataObject, 'Destroy', undefined}},
+ {3437, {wxTextDataObject, new, 1}},
+ {3438, {wxTextDataObject, getTextLength, 0}},
+ {3439, {wxTextDataObject, getText, 0}},
+ {3440, {wxTextDataObject, setText, 1}},
+ {3441, {wxTextDataObject, 'Destroy', undefined}},
+ {3442, {wxBitmapDataObject, new_1_1, 1}},
+ {3443, {wxBitmapDataObject, new_1_0, 1}},
+ {3444, {wxBitmapDataObject, getBitmap, 0}},
+ {3445, {wxBitmapDataObject, setBitmap, 1}},
+ {3446, {wxBitmapDataObject, 'Destroy', undefined}},
+ {3448, {wxClipboard, new, 0}},
+ {3449, {wxClipboard, destruct, 0}},
+ {3450, {wxClipboard, addData, 1}},
+ {3451, {wxClipboard, clear, 0}},
+ {3452, {wxClipboard, close, 0}},
+ {3453, {wxClipboard, flush, 0}},
+ {3454, {wxClipboard, getData, 1}},
+ {3455, {wxClipboard, isOpened, 0}},
+ {3456, {wxClipboard, open, 0}},
+ {3457, {wxClipboard, setData, 1}},
+ {3459, {wxClipboard, usePrimarySelection, 1}},
+ {3460, {wxClipboard, isSupported, 1}},
+ {3461, {wxClipboard, get, 0}},
+ {3462, {wxSpinEvent, getPosition, 0}},
+ {3463, {wxSpinEvent, setPosition, 1}},
+ {3464, {wxSplitterWindow, new_0, 0}},
+ {3465, {wxSplitterWindow, new_2, 2}},
+ {3466, {wxSplitterWindow, destruct, 0}},
+ {3467, {wxSplitterWindow, create, 2}},
+ {3468, {wxSplitterWindow, getMinimumPaneSize, 0}},
+ {3469, {wxSplitterWindow, getSashGravity, 0}},
+ {3470, {wxSplitterWindow, getSashPosition, 0}},
+ {3471, {wxSplitterWindow, getSplitMode, 0}},
+ {3472, {wxSplitterWindow, getWindow1, 0}},
+ {3473, {wxSplitterWindow, getWindow2, 0}},
+ {3474, {wxSplitterWindow, initialize, 1}},
+ {3475, {wxSplitterWindow, isSplit, 0}},
+ {3476, {wxSplitterWindow, replaceWindow, 2}},
+ {3477, {wxSplitterWindow, setSashGravity, 1}},
+ {3478, {wxSplitterWindow, setSashPosition, 2}},
+ {3479, {wxSplitterWindow, setSashSize, 1}},
+ {3480, {wxSplitterWindow, setMinimumPaneSize, 1}},
+ {3481, {wxSplitterWindow, setSplitMode, 1}},
+ {3482, {wxSplitterWindow, splitHorizontally, 3}},
+ {3483, {wxSplitterWindow, splitVertically, 3}},
+ {3484, {wxSplitterWindow, unsplit, 1}},
+ {3485, {wxSplitterWindow, updateSize, 0}},
+ {3486, {wxSplitterEvent, getSashPosition, 0}},
+ {3487, {wxSplitterEvent, getX, 0}},
+ {3488, {wxSplitterEvent, getY, 0}},
+ {3489, {wxSplitterEvent, getWindowBeingRemoved, 0}},
+ {3490, {wxSplitterEvent, setSashPosition, 1}},
+ {3491, {wxHtmlWindow, new_0, 0}},
+ {3492, {wxHtmlWindow, new_2, 2}},
+ {3493, {wxHtmlWindow, appendToPage, 1}},
+ {3494, {wxHtmlWindow, getOpenedAnchor, 0}},
+ {3495, {wxHtmlWindow, getOpenedPage, 0}},
+ {3496, {wxHtmlWindow, getOpenedPageTitle, 0}},
+ {3497, {wxHtmlWindow, getRelatedFrame, 0}},
+ {3498, {wxHtmlWindow, historyBack, 0}},
+ {3499, {wxHtmlWindow, historyCanBack, 0}},
+ {3500, {wxHtmlWindow, historyCanForward, 0}},
+ {3501, {wxHtmlWindow, historyClear, 0}},
+ {3502, {wxHtmlWindow, historyForward, 0}},
+ {3503, {wxHtmlWindow, loadFile, 1}},
+ {3504, {wxHtmlWindow, loadPage, 1}},
+ {3505, {wxHtmlWindow, selectAll, 0}},
+ {3506, {wxHtmlWindow, selectionToText, 0}},
+ {3507, {wxHtmlWindow, selectLine, 1}},
+ {3508, {wxHtmlWindow, selectWord, 1}},
+ {3509, {wxHtmlWindow, setBorders, 1}},
+ {3510, {wxHtmlWindow, setFonts, 3}},
+ {3511, {wxHtmlWindow, setPage, 1}},
+ {3512, {wxHtmlWindow, setRelatedFrame, 2}},
+ {3513, {wxHtmlWindow, setRelatedStatusBar, 1}},
+ {3514, {wxHtmlWindow, toText, 0}},
+ {3515, {wxHtmlWindow, 'Destroy', undefined}},
+ {3516, {wxHtmlLinkEvent, getLinkInfo, 0}},
+ {3517, {wxSystemSettings, getColour, 1}},
+ {3518, {wxSystemSettings, getFont, 1}},
+ {3519, {wxSystemSettings, getMetric, 2}},
+ {3520, {wxSystemSettings, getScreenType, 0}},
+ {3521, {wxSystemOptions, getOption, 1}},
+ {3522, {wxSystemOptions, getOptionInt, 1}},
+ {3523, {wxSystemOptions, hasOption, 1}},
+ {3524, {wxSystemOptions, isFalse, 1}},
+ {3525, {wxSystemOptions, setOption_2_1, 2}},
+ {3526, {wxSystemOptions, setOption_2_0, 2}},
+ {3527, {wxAuiNotebookEvent, setSelection, 1}},
+ {3528, {wxAuiNotebookEvent, getSelection, 0}},
+ {3529, {wxAuiNotebookEvent, setOldSelection, 1}},
+ {3530, {wxAuiNotebookEvent, getOldSelection, 0}},
+ {3531, {wxAuiNotebookEvent, setDragSource, 1}},
+ {3532, {wxAuiNotebookEvent, getDragSource, 0}},
+ {3533, {wxAuiManagerEvent, setManager, 1}},
+ {3534, {wxAuiManagerEvent, getManager, 0}},
+ {3535, {wxAuiManagerEvent, setPane, 1}},
+ {3536, {wxAuiManagerEvent, getPane, 0}},
+ {3537, {wxAuiManagerEvent, setButton, 1}},
+ {3538, {wxAuiManagerEvent, getButton, 0}},
+ {3539, {wxAuiManagerEvent, setDC, 1}},
+ {3540, {wxAuiManagerEvent, getDC, 0}},
+ {3541, {wxAuiManagerEvent, veto, 1}},
+ {3542, {wxAuiManagerEvent, getVeto, 0}},
+ {3543, {wxAuiManagerEvent, setCanVeto, 1}},
+ {3544, {wxAuiManagerEvent, canVeto, 0}},
+ {3545, {wxLogNull, new, 0}},
+ {3546, {wxLogNull, 'Destroy', undefined}},
+ {3547, {wxTaskBarIcon, new, 0}},
+ {3548, {wxTaskBarIcon, destruct, 0}},
+ {3549, {wxTaskBarIcon, popupMenu, 1}},
+ {3550, {wxTaskBarIcon, removeIcon, 0}},
+ {3551, {wxTaskBarIcon, setIcon, 2}},
+ {3552, {wxLocale, new_0, 0}},
+ {3554, {wxLocale, new_2, 2}},
+ {3555, {wxLocale, destruct, 0}},
+ {3557, {wxLocale, init, 1}},
+ {3558, {wxLocale, addCatalog_1, 1}},
+ {3559, {wxLocale, addCatalog_3, 3}},
+ {3560, {wxLocale, addCatalogLookupPathPrefix, 1}},
+ {3561, {wxLocale, getCanonicalName, 0}},
+ {3562, {wxLocale, getLanguage, 0}},
+ {3563, {wxLocale, getLanguageName, 1}},
+ {3564, {wxLocale, getLocale, 0}},
+ {3565, {wxLocale, getName, 0}},
+ {3566, {wxLocale, getString_2, 2}},
+ {3567, {wxLocale, getString_4, 4}},
+ {3568, {wxLocale, getHeaderValue, 2}},
+ {3569, {wxLocale, getSysName, 0}},
+ {3570, {wxLocale, getSystemEncoding, 0}},
+ {3571, {wxLocale, getSystemEncodingName, 0}},
+ {3572, {wxLocale, getSystemLanguage, 0}},
+ {3573, {wxLocale, isLoaded, 1}},
+ {3574, {wxLocale, isOk, 0}},
+ {3575, {wxActivateEvent, getActive, 0}},
+ {3577, {wxPopupWindow, new_2, 2}},
+ {3578, {wxPopupWindow, new_0, 0}},
+ {3580, {wxPopupWindow, destruct, 0}},
+ {3581, {wxPopupWindow, create, 2}},
+ {3582, {wxPopupWindow, position, 2}},
+ {3583, {wxPopupTransientWindow, new_0, 0}},
+ {3584, {wxPopupTransientWindow, new_2, 2}},
+ {3585, {wxPopupTransientWindow, destruct, 0}},
+ {3586, {wxPopupTransientWindow, popup, 1}},
+ {3587, {wxPopupTransientWindow, dismiss, 0}},
+ {3588, {wxOverlay, new, 0}},
+ {3589, {wxOverlay, destruct, 0}},
+ {3590, {wxOverlay, reset, 0}},
+ {3591, {wxDCOverlay, new_6, 6}},
+ {3592, {wxDCOverlay, new_2, 2}},
+ {3593, {wxDCOverlay, destruct, 0}},
+ {3594, {wxDCOverlay, clear, 0}},
{-1, {mod, func, -1}}
].
diff --git a/lib/wx/src/gen/wxe_funcs.hrl b/lib/wx/src/gen/wxe_funcs.hrl
index f5f839ac67..84fa592aaa 100644
--- a/lib/wx/src/gen/wxe_funcs.hrl
+++ b/lib/wx/src/gen/wxe_funcs.hrl
@@ -1454,1922 +1454,1918 @@
-define(wxGauge_new_0, 1602).
-define(wxGauge_new_4, 1603).
-define(wxGauge_Create, 1604).
--define(wxGauge_GetBezelFace, 1605).
--define(wxGauge_GetRange, 1606).
--define(wxGauge_GetShadowWidth, 1607).
--define(wxGauge_GetValue, 1608).
--define(wxGauge_IsVertical, 1609).
--define(wxGauge_SetBezelFace, 1610).
--define(wxGauge_SetRange, 1611).
--define(wxGauge_SetShadowWidth, 1612).
--define(wxGauge_SetValue, 1613).
--define(wxGauge_Pulse, 1614).
--define(wxGauge_destroy, 1615).
--define(wxGenericDirCtrl_new_0, 1616).
--define(wxGenericDirCtrl_new_2, 1617).
--define(wxGenericDirCtrl_destruct, 1618).
--define(wxGenericDirCtrl_Create, 1619).
--define(wxGenericDirCtrl_Init, 1620).
--define(wxGenericDirCtrl_CollapseTree, 1621).
--define(wxGenericDirCtrl_ExpandPath, 1622).
--define(wxGenericDirCtrl_GetDefaultPath, 1623).
--define(wxGenericDirCtrl_GetPath, 1624).
--define(wxGenericDirCtrl_GetFilePath, 1625).
--define(wxGenericDirCtrl_GetFilter, 1626).
--define(wxGenericDirCtrl_GetFilterIndex, 1627).
--define(wxGenericDirCtrl_GetRootId, 1628).
--define(wxGenericDirCtrl_GetTreeCtrl, 1629).
--define(wxGenericDirCtrl_ReCreateTree, 1630).
--define(wxGenericDirCtrl_SetDefaultPath, 1631).
--define(wxGenericDirCtrl_SetFilter, 1632).
--define(wxGenericDirCtrl_SetFilterIndex, 1633).
--define(wxGenericDirCtrl_SetPath, 1634).
--define(wxStaticBox_new_4, 1636).
--define(wxStaticBox_new_0, 1637).
--define(wxStaticBox_Create, 1638).
--define(wxStaticBox_destroy, 1639).
--define(wxStaticLine_new_2, 1641).
--define(wxStaticLine_new_0, 1642).
--define(wxStaticLine_Create, 1643).
--define(wxStaticLine_IsVertical, 1644).
--define(wxStaticLine_GetDefaultSize, 1645).
--define(wxStaticLine_destroy, 1646).
--define(wxListBox_new_3, 1649).
--define(wxListBox_new_0, 1650).
--define(wxListBox_destruct, 1652).
--define(wxListBox_Create, 1654).
--define(wxListBox_Deselect, 1655).
--define(wxListBox_GetSelections, 1656).
--define(wxListBox_InsertItems, 1657).
--define(wxListBox_IsSelected, 1658).
--define(wxListBox_Set, 1659).
--define(wxListBox_HitTest, 1660).
--define(wxListBox_SetFirstItem_1_0, 1661).
--define(wxListBox_SetFirstItem_1_1, 1662).
--define(wxListCtrl_new_0, 1663).
--define(wxListCtrl_new_2, 1664).
--define(wxListCtrl_Arrange, 1665).
--define(wxListCtrl_AssignImageList, 1666).
--define(wxListCtrl_ClearAll, 1667).
--define(wxListCtrl_Create, 1668).
--define(wxListCtrl_DeleteAllItems, 1669).
--define(wxListCtrl_DeleteColumn, 1670).
--define(wxListCtrl_DeleteItem, 1671).
--define(wxListCtrl_EditLabel, 1672).
--define(wxListCtrl_EnsureVisible, 1673).
--define(wxListCtrl_FindItem_3_0, 1674).
--define(wxListCtrl_FindItem_3_1, 1675).
--define(wxListCtrl_GetColumn, 1676).
--define(wxListCtrl_GetColumnCount, 1677).
--define(wxListCtrl_GetColumnWidth, 1678).
--define(wxListCtrl_GetCountPerPage, 1679).
--define(wxListCtrl_GetEditControl, 1680).
--define(wxListCtrl_GetImageList, 1681).
--define(wxListCtrl_GetItem, 1682).
--define(wxListCtrl_GetItemBackgroundColour, 1683).
--define(wxListCtrl_GetItemCount, 1684).
--define(wxListCtrl_GetItemData, 1685).
--define(wxListCtrl_GetItemFont, 1686).
--define(wxListCtrl_GetItemPosition, 1687).
--define(wxListCtrl_GetItemRect, 1688).
--define(wxListCtrl_GetItemSpacing, 1689).
--define(wxListCtrl_GetItemState, 1690).
--define(wxListCtrl_GetItemText, 1691).
--define(wxListCtrl_GetItemTextColour, 1692).
--define(wxListCtrl_GetNextItem, 1693).
--define(wxListCtrl_GetSelectedItemCount, 1694).
--define(wxListCtrl_GetTextColour, 1695).
--define(wxListCtrl_GetTopItem, 1696).
--define(wxListCtrl_GetViewRect, 1697).
--define(wxListCtrl_HitTest, 1698).
--define(wxListCtrl_InsertColumn_2, 1699).
--define(wxListCtrl_InsertColumn_3, 1700).
--define(wxListCtrl_InsertItem_1, 1701).
--define(wxListCtrl_InsertItem_2_1, 1702).
--define(wxListCtrl_InsertItem_2_0, 1703).
--define(wxListCtrl_InsertItem_3, 1704).
--define(wxListCtrl_RefreshItem, 1705).
--define(wxListCtrl_RefreshItems, 1706).
--define(wxListCtrl_ScrollList, 1707).
--define(wxListCtrl_SetBackgroundColour, 1708).
--define(wxListCtrl_SetColumn, 1709).
--define(wxListCtrl_SetColumnWidth, 1710).
--define(wxListCtrl_SetImageList, 1711).
--define(wxListCtrl_SetItem_1, 1712).
--define(wxListCtrl_SetItem_4, 1713).
--define(wxListCtrl_SetItemBackgroundColour, 1714).
--define(wxListCtrl_SetItemCount, 1715).
--define(wxListCtrl_SetItemData, 1716).
--define(wxListCtrl_SetItemFont, 1717).
--define(wxListCtrl_SetItemImage, 1718).
--define(wxListCtrl_SetItemColumnImage, 1719).
--define(wxListCtrl_SetItemPosition, 1720).
--define(wxListCtrl_SetItemState, 1721).
--define(wxListCtrl_SetItemText, 1722).
--define(wxListCtrl_SetItemTextColour, 1723).
--define(wxListCtrl_SetSingleStyle, 1724).
--define(wxListCtrl_SetTextColour, 1725).
--define(wxListCtrl_SetWindowStyleFlag, 1726).
--define(wxListCtrl_SortItems, 1727).
--define(wxListCtrl_destroy, 1728).
--define(wxListView_ClearColumnImage, 1729).
--define(wxListView_Focus, 1730).
--define(wxListView_GetFirstSelected, 1731).
--define(wxListView_GetFocusedItem, 1732).
--define(wxListView_GetNextSelected, 1733).
--define(wxListView_IsSelected, 1734).
--define(wxListView_Select, 1735).
--define(wxListView_SetColumnImage, 1736).
--define(wxListItem_new_0, 1737).
--define(wxListItem_new_1, 1738).
--define(wxListItem_destruct, 1739).
--define(wxListItem_Clear, 1740).
--define(wxListItem_GetAlign, 1741).
--define(wxListItem_GetBackgroundColour, 1742).
--define(wxListItem_GetColumn, 1743).
--define(wxListItem_GetFont, 1744).
--define(wxListItem_GetId, 1745).
--define(wxListItem_GetImage, 1746).
--define(wxListItem_GetMask, 1747).
--define(wxListItem_GetState, 1748).
--define(wxListItem_GetText, 1749).
--define(wxListItem_GetTextColour, 1750).
--define(wxListItem_GetWidth, 1751).
--define(wxListItem_SetAlign, 1752).
--define(wxListItem_SetBackgroundColour, 1753).
--define(wxListItem_SetColumn, 1754).
--define(wxListItem_SetFont, 1755).
--define(wxListItem_SetId, 1756).
--define(wxListItem_SetImage, 1757).
--define(wxListItem_SetMask, 1758).
--define(wxListItem_SetState, 1759).
--define(wxListItem_SetStateMask, 1760).
--define(wxListItem_SetText, 1761).
--define(wxListItem_SetTextColour, 1762).
--define(wxListItem_SetWidth, 1763).
--define(wxListItemAttr_new_0, 1764).
--define(wxListItemAttr_new_3, 1765).
--define(wxListItemAttr_GetBackgroundColour, 1766).
--define(wxListItemAttr_GetFont, 1767).
--define(wxListItemAttr_GetTextColour, 1768).
--define(wxListItemAttr_HasBackgroundColour, 1769).
--define(wxListItemAttr_HasFont, 1770).
--define(wxListItemAttr_HasTextColour, 1771).
--define(wxListItemAttr_SetBackgroundColour, 1772).
--define(wxListItemAttr_SetFont, 1773).
--define(wxListItemAttr_SetTextColour, 1774).
--define(wxListItemAttr_destroy, 1775).
--define(wxImageList_new_0, 1776).
--define(wxImageList_new_3, 1777).
--define(wxImageList_Add_1, 1778).
--define(wxImageList_Add_2_0, 1779).
--define(wxImageList_Add_2_1, 1780).
--define(wxImageList_Create, 1781).
--define(wxImageList_Draw, 1783).
--define(wxImageList_GetBitmap, 1784).
--define(wxImageList_GetIcon, 1785).
--define(wxImageList_GetImageCount, 1786).
--define(wxImageList_GetSize, 1787).
--define(wxImageList_Remove, 1788).
--define(wxImageList_RemoveAll, 1789).
--define(wxImageList_Replace_2, 1790).
--define(wxImageList_Replace_3, 1791).
--define(wxImageList_destroy, 1792).
--define(wxTextAttr_new_0, 1793).
--define(wxTextAttr_new_2, 1794).
--define(wxTextAttr_GetAlignment, 1795).
--define(wxTextAttr_GetBackgroundColour, 1796).
--define(wxTextAttr_GetFont, 1797).
--define(wxTextAttr_GetLeftIndent, 1798).
--define(wxTextAttr_GetLeftSubIndent, 1799).
--define(wxTextAttr_GetRightIndent, 1800).
--define(wxTextAttr_GetTabs, 1801).
--define(wxTextAttr_GetTextColour, 1802).
--define(wxTextAttr_HasBackgroundColour, 1803).
--define(wxTextAttr_HasFont, 1804).
--define(wxTextAttr_HasTextColour, 1805).
--define(wxTextAttr_GetFlags, 1806).
--define(wxTextAttr_IsDefault, 1807).
--define(wxTextAttr_SetAlignment, 1808).
--define(wxTextAttr_SetBackgroundColour, 1809).
--define(wxTextAttr_SetFlags, 1810).
--define(wxTextAttr_SetFont, 1811).
--define(wxTextAttr_SetLeftIndent, 1812).
--define(wxTextAttr_SetRightIndent, 1813).
--define(wxTextAttr_SetTabs, 1814).
--define(wxTextAttr_SetTextColour, 1815).
--define(wxTextAttr_destroy, 1816).
--define(wxTextCtrl_new_3, 1818).
--define(wxTextCtrl_new_0, 1819).
--define(wxTextCtrl_destruct, 1821).
--define(wxTextCtrl_AppendText, 1822).
--define(wxTextCtrl_CanCopy, 1823).
--define(wxTextCtrl_CanCut, 1824).
--define(wxTextCtrl_CanPaste, 1825).
--define(wxTextCtrl_CanRedo, 1826).
--define(wxTextCtrl_CanUndo, 1827).
--define(wxTextCtrl_Clear, 1828).
--define(wxTextCtrl_Copy, 1829).
--define(wxTextCtrl_Create, 1830).
--define(wxTextCtrl_Cut, 1831).
--define(wxTextCtrl_DiscardEdits, 1832).
--define(wxTextCtrl_ChangeValue, 1833).
--define(wxTextCtrl_EmulateKeyPress, 1834).
--define(wxTextCtrl_GetDefaultStyle, 1835).
--define(wxTextCtrl_GetInsertionPoint, 1836).
--define(wxTextCtrl_GetLastPosition, 1837).
--define(wxTextCtrl_GetLineLength, 1838).
--define(wxTextCtrl_GetLineText, 1839).
--define(wxTextCtrl_GetNumberOfLines, 1840).
--define(wxTextCtrl_GetRange, 1841).
--define(wxTextCtrl_GetSelection, 1842).
--define(wxTextCtrl_GetStringSelection, 1843).
--define(wxTextCtrl_GetStyle, 1844).
--define(wxTextCtrl_GetValue, 1845).
--define(wxTextCtrl_IsEditable, 1846).
--define(wxTextCtrl_IsModified, 1847).
--define(wxTextCtrl_IsMultiLine, 1848).
--define(wxTextCtrl_IsSingleLine, 1849).
--define(wxTextCtrl_LoadFile, 1850).
--define(wxTextCtrl_MarkDirty, 1851).
--define(wxTextCtrl_Paste, 1852).
--define(wxTextCtrl_PositionToXY, 1853).
--define(wxTextCtrl_Redo, 1854).
--define(wxTextCtrl_Remove, 1855).
--define(wxTextCtrl_Replace, 1856).
--define(wxTextCtrl_SaveFile, 1857).
--define(wxTextCtrl_SetDefaultStyle, 1858).
--define(wxTextCtrl_SetEditable, 1859).
--define(wxTextCtrl_SetInsertionPoint, 1860).
--define(wxTextCtrl_SetInsertionPointEnd, 1861).
--define(wxTextCtrl_SetMaxLength, 1863).
--define(wxTextCtrl_SetSelection, 1864).
--define(wxTextCtrl_SetStyle, 1865).
--define(wxTextCtrl_SetValue, 1866).
--define(wxTextCtrl_ShowPosition, 1867).
--define(wxTextCtrl_Undo, 1868).
--define(wxTextCtrl_WriteText, 1869).
--define(wxTextCtrl_XYToPosition, 1870).
--define(wxNotebook_new_0, 1873).
--define(wxNotebook_new_3, 1874).
--define(wxNotebook_destruct, 1875).
--define(wxNotebook_AddPage, 1876).
--define(wxNotebook_AdvanceSelection, 1877).
--define(wxNotebook_AssignImageList, 1878).
--define(wxNotebook_Create, 1879).
--define(wxNotebook_DeleteAllPages, 1880).
--define(wxNotebook_DeletePage, 1881).
--define(wxNotebook_RemovePage, 1882).
--define(wxNotebook_GetCurrentPage, 1883).
--define(wxNotebook_GetImageList, 1884).
--define(wxNotebook_GetPage, 1886).
--define(wxNotebook_GetPageCount, 1887).
--define(wxNotebook_GetPageImage, 1888).
--define(wxNotebook_GetPageText, 1889).
--define(wxNotebook_GetRowCount, 1890).
--define(wxNotebook_GetSelection, 1891).
--define(wxNotebook_GetThemeBackgroundColour, 1892).
--define(wxNotebook_HitTest, 1894).
--define(wxNotebook_InsertPage, 1896).
--define(wxNotebook_SetImageList, 1897).
--define(wxNotebook_SetPadding, 1898).
--define(wxNotebook_SetPageSize, 1899).
--define(wxNotebook_SetPageImage, 1900).
--define(wxNotebook_SetPageText, 1901).
--define(wxNotebook_SetSelection, 1902).
--define(wxNotebook_ChangeSelection, 1903).
--define(wxChoicebook_new_0, 1904).
--define(wxChoicebook_new_3, 1905).
--define(wxChoicebook_AddPage, 1906).
--define(wxChoicebook_AdvanceSelection, 1907).
--define(wxChoicebook_AssignImageList, 1908).
--define(wxChoicebook_Create, 1909).
--define(wxChoicebook_DeleteAllPages, 1910).
--define(wxChoicebook_DeletePage, 1911).
--define(wxChoicebook_RemovePage, 1912).
--define(wxChoicebook_GetCurrentPage, 1913).
--define(wxChoicebook_GetImageList, 1914).
--define(wxChoicebook_GetPage, 1916).
--define(wxChoicebook_GetPageCount, 1917).
--define(wxChoicebook_GetPageImage, 1918).
--define(wxChoicebook_GetPageText, 1919).
--define(wxChoicebook_GetSelection, 1920).
--define(wxChoicebook_HitTest, 1921).
--define(wxChoicebook_InsertPage, 1922).
--define(wxChoicebook_SetImageList, 1923).
--define(wxChoicebook_SetPageSize, 1924).
--define(wxChoicebook_SetPageImage, 1925).
--define(wxChoicebook_SetPageText, 1926).
--define(wxChoicebook_SetSelection, 1927).
--define(wxChoicebook_ChangeSelection, 1928).
--define(wxChoicebook_destroy, 1929).
--define(wxToolbook_new_0, 1930).
--define(wxToolbook_new_3, 1931).
--define(wxToolbook_AddPage, 1932).
--define(wxToolbook_AdvanceSelection, 1933).
--define(wxToolbook_AssignImageList, 1934).
--define(wxToolbook_Create, 1935).
--define(wxToolbook_DeleteAllPages, 1936).
--define(wxToolbook_DeletePage, 1937).
--define(wxToolbook_RemovePage, 1938).
--define(wxToolbook_GetCurrentPage, 1939).
--define(wxToolbook_GetImageList, 1940).
--define(wxToolbook_GetPage, 1942).
--define(wxToolbook_GetPageCount, 1943).
--define(wxToolbook_GetPageImage, 1944).
--define(wxToolbook_GetPageText, 1945).
--define(wxToolbook_GetSelection, 1946).
--define(wxToolbook_HitTest, 1948).
--define(wxToolbook_InsertPage, 1949).
--define(wxToolbook_SetImageList, 1950).
--define(wxToolbook_SetPageSize, 1951).
--define(wxToolbook_SetPageImage, 1952).
--define(wxToolbook_SetPageText, 1953).
--define(wxToolbook_SetSelection, 1954).
--define(wxToolbook_ChangeSelection, 1955).
--define(wxToolbook_destroy, 1956).
--define(wxListbook_new_0, 1957).
--define(wxListbook_new_3, 1958).
--define(wxListbook_AddPage, 1959).
--define(wxListbook_AdvanceSelection, 1960).
--define(wxListbook_AssignImageList, 1961).
--define(wxListbook_Create, 1962).
--define(wxListbook_DeleteAllPages, 1963).
--define(wxListbook_DeletePage, 1964).
--define(wxListbook_RemovePage, 1965).
--define(wxListbook_GetCurrentPage, 1966).
--define(wxListbook_GetImageList, 1967).
--define(wxListbook_GetPage, 1969).
--define(wxListbook_GetPageCount, 1970).
--define(wxListbook_GetPageImage, 1971).
--define(wxListbook_GetPageText, 1972).
--define(wxListbook_GetSelection, 1973).
--define(wxListbook_HitTest, 1975).
--define(wxListbook_InsertPage, 1976).
--define(wxListbook_SetImageList, 1977).
--define(wxListbook_SetPageSize, 1978).
--define(wxListbook_SetPageImage, 1979).
--define(wxListbook_SetPageText, 1980).
--define(wxListbook_SetSelection, 1981).
--define(wxListbook_ChangeSelection, 1982).
--define(wxListbook_destroy, 1983).
--define(wxTreebook_new_0, 1984).
--define(wxTreebook_new_3, 1985).
--define(wxTreebook_AddPage, 1986).
--define(wxTreebook_AdvanceSelection, 1987).
--define(wxTreebook_AssignImageList, 1988).
--define(wxTreebook_Create, 1989).
--define(wxTreebook_DeleteAllPages, 1990).
--define(wxTreebook_DeletePage, 1991).
--define(wxTreebook_RemovePage, 1992).
--define(wxTreebook_GetCurrentPage, 1993).
--define(wxTreebook_GetImageList, 1994).
--define(wxTreebook_GetPage, 1996).
--define(wxTreebook_GetPageCount, 1997).
--define(wxTreebook_GetPageImage, 1998).
--define(wxTreebook_GetPageText, 1999).
--define(wxTreebook_GetSelection, 2000).
--define(wxTreebook_ExpandNode, 2001).
--define(wxTreebook_IsNodeExpanded, 2002).
--define(wxTreebook_HitTest, 2004).
--define(wxTreebook_InsertPage, 2005).
--define(wxTreebook_InsertSubPage, 2006).
--define(wxTreebook_SetImageList, 2007).
--define(wxTreebook_SetPageSize, 2008).
--define(wxTreebook_SetPageImage, 2009).
--define(wxTreebook_SetPageText, 2010).
--define(wxTreebook_SetSelection, 2011).
--define(wxTreebook_ChangeSelection, 2012).
--define(wxTreebook_destroy, 2013).
--define(wxTreeCtrl_new_2, 2016).
--define(wxTreeCtrl_new_0, 2017).
--define(wxTreeCtrl_destruct, 2019).
--define(wxTreeCtrl_AddRoot, 2020).
--define(wxTreeCtrl_AppendItem, 2021).
--define(wxTreeCtrl_AssignImageList, 2022).
--define(wxTreeCtrl_AssignStateImageList, 2023).
--define(wxTreeCtrl_Collapse, 2024).
--define(wxTreeCtrl_CollapseAndReset, 2025).
--define(wxTreeCtrl_Create, 2026).
--define(wxTreeCtrl_Delete, 2027).
--define(wxTreeCtrl_DeleteAllItems, 2028).
--define(wxTreeCtrl_DeleteChildren, 2029).
--define(wxTreeCtrl_EditLabel, 2030).
--define(wxTreeCtrl_EnsureVisible, 2031).
--define(wxTreeCtrl_Expand, 2032).
--define(wxTreeCtrl_GetBoundingRect, 2033).
--define(wxTreeCtrl_GetChildrenCount, 2035).
--define(wxTreeCtrl_GetCount, 2036).
--define(wxTreeCtrl_GetEditControl, 2037).
--define(wxTreeCtrl_GetFirstChild, 2038).
--define(wxTreeCtrl_GetNextChild, 2039).
--define(wxTreeCtrl_GetFirstVisibleItem, 2040).
--define(wxTreeCtrl_GetImageList, 2041).
--define(wxTreeCtrl_GetIndent, 2042).
--define(wxTreeCtrl_GetItemBackgroundColour, 2043).
--define(wxTreeCtrl_GetItemData, 2044).
--define(wxTreeCtrl_GetItemFont, 2045).
--define(wxTreeCtrl_GetItemImage_1, 2046).
--define(wxTreeCtrl_GetItemImage_2, 2047).
--define(wxTreeCtrl_GetItemText, 2048).
--define(wxTreeCtrl_GetItemTextColour, 2049).
--define(wxTreeCtrl_GetLastChild, 2050).
--define(wxTreeCtrl_GetNextSibling, 2051).
--define(wxTreeCtrl_GetNextVisible, 2052).
--define(wxTreeCtrl_GetItemParent, 2053).
--define(wxTreeCtrl_GetPrevSibling, 2054).
--define(wxTreeCtrl_GetPrevVisible, 2055).
--define(wxTreeCtrl_GetRootItem, 2056).
--define(wxTreeCtrl_GetSelection, 2057).
--define(wxTreeCtrl_GetSelections, 2058).
--define(wxTreeCtrl_GetStateImageList, 2059).
--define(wxTreeCtrl_HitTest, 2060).
--define(wxTreeCtrl_InsertItem, 2062).
--define(wxTreeCtrl_IsBold, 2063).
--define(wxTreeCtrl_IsExpanded, 2064).
--define(wxTreeCtrl_IsSelected, 2065).
--define(wxTreeCtrl_IsVisible, 2066).
--define(wxTreeCtrl_ItemHasChildren, 2067).
--define(wxTreeCtrl_IsTreeItemIdOk, 2068).
--define(wxTreeCtrl_PrependItem, 2069).
--define(wxTreeCtrl_ScrollTo, 2070).
--define(wxTreeCtrl_SelectItem_1, 2071).
--define(wxTreeCtrl_SelectItem_2, 2072).
--define(wxTreeCtrl_SetIndent, 2073).
--define(wxTreeCtrl_SetImageList, 2074).
--define(wxTreeCtrl_SetItemBackgroundColour, 2075).
--define(wxTreeCtrl_SetItemBold, 2076).
--define(wxTreeCtrl_SetItemData, 2077).
--define(wxTreeCtrl_SetItemDropHighlight, 2078).
--define(wxTreeCtrl_SetItemFont, 2079).
--define(wxTreeCtrl_SetItemHasChildren, 2080).
--define(wxTreeCtrl_SetItemImage_2, 2081).
--define(wxTreeCtrl_SetItemImage_3, 2082).
--define(wxTreeCtrl_SetItemText, 2083).
--define(wxTreeCtrl_SetItemTextColour, 2084).
--define(wxTreeCtrl_SetStateImageList, 2085).
--define(wxTreeCtrl_SetWindowStyle, 2086).
--define(wxTreeCtrl_SortChildren, 2087).
--define(wxTreeCtrl_Toggle, 2088).
--define(wxTreeCtrl_ToggleItemSelection, 2089).
--define(wxTreeCtrl_Unselect, 2090).
--define(wxTreeCtrl_UnselectAll, 2091).
--define(wxTreeCtrl_UnselectItem, 2092).
--define(wxScrollBar_new_0, 2093).
--define(wxScrollBar_new_3, 2094).
--define(wxScrollBar_destruct, 2095).
--define(wxScrollBar_Create, 2096).
--define(wxScrollBar_GetRange, 2097).
--define(wxScrollBar_GetPageSize, 2098).
--define(wxScrollBar_GetThumbPosition, 2099).
--define(wxScrollBar_GetThumbSize, 2100).
--define(wxScrollBar_SetThumbPosition, 2101).
--define(wxScrollBar_SetScrollbar, 2102).
--define(wxSpinButton_new_2, 2104).
--define(wxSpinButton_new_0, 2105).
--define(wxSpinButton_Create, 2106).
--define(wxSpinButton_GetMax, 2107).
--define(wxSpinButton_GetMin, 2108).
--define(wxSpinButton_GetValue, 2109).
--define(wxSpinButton_SetRange, 2110).
--define(wxSpinButton_SetValue, 2111).
--define(wxSpinButton_destroy, 2112).
--define(wxSpinCtrl_new_0, 2113).
--define(wxSpinCtrl_new_2, 2114).
--define(wxSpinCtrl_Create, 2116).
--define(wxSpinCtrl_SetValue_1_1, 2119).
--define(wxSpinCtrl_SetValue_1_0, 2120).
--define(wxSpinCtrl_GetValue, 2122).
--define(wxSpinCtrl_SetRange, 2124).
--define(wxSpinCtrl_SetSelection, 2125).
--define(wxSpinCtrl_GetMin, 2127).
--define(wxSpinCtrl_GetMax, 2129).
--define(wxSpinCtrl_destroy, 2130).
--define(wxStaticText_new_0, 2131).
--define(wxStaticText_new_4, 2132).
--define(wxStaticText_Create, 2133).
--define(wxStaticText_GetLabel, 2134).
--define(wxStaticText_SetLabel, 2135).
--define(wxStaticText_Wrap, 2136).
--define(wxStaticText_destroy, 2137).
--define(wxStaticBitmap_new_0, 2138).
--define(wxStaticBitmap_new_4, 2139).
--define(wxStaticBitmap_Create, 2140).
--define(wxStaticBitmap_GetBitmap, 2141).
--define(wxStaticBitmap_SetBitmap, 2142).
--define(wxStaticBitmap_destroy, 2143).
--define(wxRadioBox_new, 2144).
--define(wxRadioBox_destruct, 2146).
--define(wxRadioBox_Create, 2147).
--define(wxRadioBox_Enable_2, 2148).
--define(wxRadioBox_Enable_1, 2149).
--define(wxRadioBox_GetSelection, 2150).
--define(wxRadioBox_GetString, 2151).
--define(wxRadioBox_SetSelection, 2152).
--define(wxRadioBox_Show_2, 2153).
--define(wxRadioBox_Show_1, 2154).
--define(wxRadioBox_GetColumnCount, 2155).
--define(wxRadioBox_GetItemHelpText, 2156).
--define(wxRadioBox_GetItemToolTip, 2157).
--define(wxRadioBox_GetItemFromPoint, 2159).
--define(wxRadioBox_GetRowCount, 2160).
--define(wxRadioBox_IsItemEnabled, 2161).
--define(wxRadioBox_IsItemShown, 2162).
--define(wxRadioBox_SetItemHelpText, 2163).
--define(wxRadioBox_SetItemToolTip, 2164).
--define(wxRadioButton_new_0, 2165).
--define(wxRadioButton_new_4, 2166).
--define(wxRadioButton_Create, 2167).
--define(wxRadioButton_GetValue, 2168).
--define(wxRadioButton_SetValue, 2169).
--define(wxRadioButton_destroy, 2170).
--define(wxSlider_new_6, 2172).
--define(wxSlider_new_0, 2173).
--define(wxSlider_Create, 2174).
--define(wxSlider_GetLineSize, 2175).
--define(wxSlider_GetMax, 2176).
--define(wxSlider_GetMin, 2177).
--define(wxSlider_GetPageSize, 2178).
--define(wxSlider_GetThumbLength, 2179).
--define(wxSlider_GetValue, 2180).
--define(wxSlider_SetLineSize, 2181).
--define(wxSlider_SetPageSize, 2182).
--define(wxSlider_SetRange, 2183).
--define(wxSlider_SetThumbLength, 2184).
--define(wxSlider_SetValue, 2185).
--define(wxSlider_destroy, 2186).
--define(wxDialog_new_4, 2188).
--define(wxDialog_new_0, 2189).
--define(wxDialog_destruct, 2191).
--define(wxDialog_Create, 2192).
--define(wxDialog_CreateButtonSizer, 2193).
--define(wxDialog_CreateStdDialogButtonSizer, 2194).
--define(wxDialog_EndModal, 2195).
--define(wxDialog_GetAffirmativeId, 2196).
--define(wxDialog_GetReturnCode, 2197).
--define(wxDialog_IsModal, 2198).
--define(wxDialog_SetAffirmativeId, 2199).
--define(wxDialog_SetReturnCode, 2200).
--define(wxDialog_Show, 2201).
--define(wxDialog_ShowModal, 2202).
--define(wxColourDialog_new_0, 2203).
--define(wxColourDialog_new_2, 2204).
--define(wxColourDialog_destruct, 2205).
--define(wxColourDialog_Create, 2206).
--define(wxColourDialog_GetColourData, 2207).
--define(wxColourData_new_0, 2208).
--define(wxColourData_new_1, 2209).
--define(wxColourData_destruct, 2210).
--define(wxColourData_GetChooseFull, 2211).
--define(wxColourData_GetColour, 2212).
--define(wxColourData_GetCustomColour, 2214).
--define(wxColourData_SetChooseFull, 2215).
--define(wxColourData_SetColour, 2216).
--define(wxColourData_SetCustomColour, 2217).
--define(wxPalette_new_0, 2218).
--define(wxPalette_new_4, 2219).
--define(wxPalette_destruct, 2221).
--define(wxPalette_Create, 2222).
--define(wxPalette_GetColoursCount, 2223).
--define(wxPalette_GetPixel, 2224).
--define(wxPalette_GetRGB, 2225).
--define(wxPalette_IsOk, 2226).
--define(wxDirDialog_new, 2230).
--define(wxDirDialog_destruct, 2231).
--define(wxDirDialog_GetPath, 2232).
--define(wxDirDialog_GetMessage, 2233).
--define(wxDirDialog_SetMessage, 2234).
--define(wxDirDialog_SetPath, 2235).
--define(wxFileDialog_new, 2239).
--define(wxFileDialog_destruct, 2240).
--define(wxFileDialog_GetDirectory, 2241).
--define(wxFileDialog_GetFilename, 2242).
--define(wxFileDialog_GetFilenames, 2243).
--define(wxFileDialog_GetFilterIndex, 2244).
--define(wxFileDialog_GetMessage, 2245).
--define(wxFileDialog_GetPath, 2246).
--define(wxFileDialog_GetPaths, 2247).
--define(wxFileDialog_GetWildcard, 2248).
--define(wxFileDialog_SetDirectory, 2249).
--define(wxFileDialog_SetFilename, 2250).
--define(wxFileDialog_SetFilterIndex, 2251).
--define(wxFileDialog_SetMessage, 2252).
--define(wxFileDialog_SetPath, 2253).
--define(wxFileDialog_SetWildcard, 2254).
--define(wxPickerBase_SetInternalMargin, 2255).
--define(wxPickerBase_GetInternalMargin, 2256).
--define(wxPickerBase_SetTextCtrlProportion, 2257).
--define(wxPickerBase_SetPickerCtrlProportion, 2258).
--define(wxPickerBase_GetTextCtrlProportion, 2259).
--define(wxPickerBase_GetPickerCtrlProportion, 2260).
--define(wxPickerBase_HasTextCtrl, 2261).
--define(wxPickerBase_GetTextCtrl, 2262).
--define(wxPickerBase_IsTextCtrlGrowable, 2263).
--define(wxPickerBase_SetPickerCtrlGrowable, 2264).
--define(wxPickerBase_SetTextCtrlGrowable, 2265).
--define(wxPickerBase_IsPickerCtrlGrowable, 2266).
--define(wxFilePickerCtrl_new_0, 2267).
--define(wxFilePickerCtrl_new_3, 2268).
--define(wxFilePickerCtrl_Create, 2269).
--define(wxFilePickerCtrl_GetPath, 2270).
--define(wxFilePickerCtrl_SetPath, 2271).
--define(wxFilePickerCtrl_destroy, 2272).
--define(wxDirPickerCtrl_new_0, 2273).
--define(wxDirPickerCtrl_new_3, 2274).
--define(wxDirPickerCtrl_Create, 2275).
--define(wxDirPickerCtrl_GetPath, 2276).
--define(wxDirPickerCtrl_SetPath, 2277).
--define(wxDirPickerCtrl_destroy, 2278).
--define(wxColourPickerCtrl_new_0, 2279).
--define(wxColourPickerCtrl_new_3, 2280).
--define(wxColourPickerCtrl_Create, 2281).
--define(wxColourPickerCtrl_GetColour, 2282).
--define(wxColourPickerCtrl_SetColour_1_1, 2283).
--define(wxColourPickerCtrl_SetColour_1_0, 2284).
--define(wxColourPickerCtrl_destroy, 2285).
--define(wxDatePickerCtrl_new_0, 2286).
--define(wxDatePickerCtrl_new_3, 2287).
--define(wxDatePickerCtrl_GetRange, 2288).
--define(wxDatePickerCtrl_GetValue, 2289).
--define(wxDatePickerCtrl_SetRange, 2290).
--define(wxDatePickerCtrl_SetValue, 2291).
--define(wxDatePickerCtrl_destroy, 2292).
--define(wxFontPickerCtrl_new_0, 2293).
--define(wxFontPickerCtrl_new_3, 2294).
--define(wxFontPickerCtrl_Create, 2295).
--define(wxFontPickerCtrl_GetSelectedFont, 2296).
--define(wxFontPickerCtrl_SetSelectedFont, 2297).
--define(wxFontPickerCtrl_GetMaxPointSize, 2298).
--define(wxFontPickerCtrl_SetMaxPointSize, 2299).
--define(wxFontPickerCtrl_destroy, 2300).
--define(wxFindReplaceDialog_new_0, 2303).
--define(wxFindReplaceDialog_new_4, 2304).
--define(wxFindReplaceDialog_destruct, 2305).
--define(wxFindReplaceDialog_Create, 2306).
--define(wxFindReplaceDialog_GetData, 2307).
--define(wxFindReplaceData_new_0, 2308).
--define(wxFindReplaceData_new_1, 2309).
--define(wxFindReplaceData_GetFindString, 2310).
--define(wxFindReplaceData_GetReplaceString, 2311).
--define(wxFindReplaceData_GetFlags, 2312).
--define(wxFindReplaceData_SetFlags, 2313).
--define(wxFindReplaceData_SetFindString, 2314).
--define(wxFindReplaceData_SetReplaceString, 2315).
--define(wxFindReplaceData_destroy, 2316).
--define(wxMultiChoiceDialog_new_0, 2317).
--define(wxMultiChoiceDialog_new_5, 2319).
--define(wxMultiChoiceDialog_GetSelections, 2320).
--define(wxMultiChoiceDialog_SetSelections, 2321).
--define(wxMultiChoiceDialog_destroy, 2322).
--define(wxSingleChoiceDialog_new_0, 2323).
--define(wxSingleChoiceDialog_new_5, 2325).
--define(wxSingleChoiceDialog_GetSelection, 2326).
--define(wxSingleChoiceDialog_GetStringSelection, 2327).
--define(wxSingleChoiceDialog_SetSelection, 2328).
--define(wxSingleChoiceDialog_destroy, 2329).
--define(wxTextEntryDialog_new, 2330).
--define(wxTextEntryDialog_GetValue, 2331).
--define(wxTextEntryDialog_SetValue, 2332).
--define(wxTextEntryDialog_destroy, 2333).
--define(wxPasswordEntryDialog_new, 2334).
--define(wxPasswordEntryDialog_destroy, 2335).
--define(wxFontData_new_0, 2336).
--define(wxFontData_new_1, 2337).
--define(wxFontData_destruct, 2338).
--define(wxFontData_EnableEffects, 2339).
--define(wxFontData_GetAllowSymbols, 2340).
--define(wxFontData_GetColour, 2341).
--define(wxFontData_GetChosenFont, 2342).
--define(wxFontData_GetEnableEffects, 2343).
--define(wxFontData_GetInitialFont, 2344).
--define(wxFontData_GetShowHelp, 2345).
--define(wxFontData_SetAllowSymbols, 2346).
--define(wxFontData_SetChosenFont, 2347).
--define(wxFontData_SetColour, 2348).
--define(wxFontData_SetInitialFont, 2349).
--define(wxFontData_SetRange, 2350).
--define(wxFontData_SetShowHelp, 2351).
--define(wxFontDialog_new_0, 2355).
--define(wxFontDialog_new_2, 2357).
--define(wxFontDialog_Create, 2359).
--define(wxFontDialog_GetFontData, 2360).
--define(wxFontDialog_destroy, 2362).
--define(wxProgressDialog_new, 2363).
--define(wxProgressDialog_destruct, 2364).
--define(wxProgressDialog_Resume, 2365).
--define(wxProgressDialog_Update_2, 2366).
--define(wxProgressDialog_Update_0, 2367).
--define(wxMessageDialog_new, 2368).
--define(wxMessageDialog_destruct, 2369).
--define(wxPageSetupDialog_new, 2370).
--define(wxPageSetupDialog_destruct, 2371).
--define(wxPageSetupDialog_GetPageSetupData, 2372).
--define(wxPageSetupDialog_ShowModal, 2373).
--define(wxPageSetupDialogData_new_0, 2374).
--define(wxPageSetupDialogData_new_1_0, 2375).
--define(wxPageSetupDialogData_new_1_1, 2376).
--define(wxPageSetupDialogData_destruct, 2377).
--define(wxPageSetupDialogData_EnableHelp, 2378).
--define(wxPageSetupDialogData_EnableMargins, 2379).
--define(wxPageSetupDialogData_EnableOrientation, 2380).
--define(wxPageSetupDialogData_EnablePaper, 2381).
--define(wxPageSetupDialogData_EnablePrinter, 2382).
--define(wxPageSetupDialogData_GetDefaultMinMargins, 2383).
--define(wxPageSetupDialogData_GetEnableMargins, 2384).
--define(wxPageSetupDialogData_GetEnableOrientation, 2385).
--define(wxPageSetupDialogData_GetEnablePaper, 2386).
--define(wxPageSetupDialogData_GetEnablePrinter, 2387).
--define(wxPageSetupDialogData_GetEnableHelp, 2388).
--define(wxPageSetupDialogData_GetDefaultInfo, 2389).
--define(wxPageSetupDialogData_GetMarginTopLeft, 2390).
--define(wxPageSetupDialogData_GetMarginBottomRight, 2391).
--define(wxPageSetupDialogData_GetMinMarginTopLeft, 2392).
--define(wxPageSetupDialogData_GetMinMarginBottomRight, 2393).
--define(wxPageSetupDialogData_GetPaperId, 2394).
--define(wxPageSetupDialogData_GetPaperSize, 2395).
--define(wxPageSetupDialogData_GetPrintData, 2397).
--define(wxPageSetupDialogData_IsOk, 2398).
--define(wxPageSetupDialogData_SetDefaultInfo, 2399).
--define(wxPageSetupDialogData_SetDefaultMinMargins, 2400).
--define(wxPageSetupDialogData_SetMarginTopLeft, 2401).
--define(wxPageSetupDialogData_SetMarginBottomRight, 2402).
--define(wxPageSetupDialogData_SetMinMarginTopLeft, 2403).
--define(wxPageSetupDialogData_SetMinMarginBottomRight, 2404).
--define(wxPageSetupDialogData_SetPaperId, 2405).
--define(wxPageSetupDialogData_SetPaperSize_1_1, 2406).
--define(wxPageSetupDialogData_SetPaperSize_1_0, 2407).
--define(wxPageSetupDialogData_SetPrintData, 2408).
--define(wxPrintDialog_new_2_0, 2409).
--define(wxPrintDialog_new_2_1, 2410).
--define(wxPrintDialog_destruct, 2411).
--define(wxPrintDialog_GetPrintDialogData, 2412).
--define(wxPrintDialog_GetPrintDC, 2413).
--define(wxPrintDialogData_new_0, 2414).
--define(wxPrintDialogData_new_1_1, 2415).
--define(wxPrintDialogData_new_1_0, 2416).
--define(wxPrintDialogData_destruct, 2417).
--define(wxPrintDialogData_EnableHelp, 2418).
--define(wxPrintDialogData_EnablePageNumbers, 2419).
--define(wxPrintDialogData_EnablePrintToFile, 2420).
--define(wxPrintDialogData_EnableSelection, 2421).
--define(wxPrintDialogData_GetAllPages, 2422).
--define(wxPrintDialogData_GetCollate, 2423).
--define(wxPrintDialogData_GetFromPage, 2424).
--define(wxPrintDialogData_GetMaxPage, 2425).
--define(wxPrintDialogData_GetMinPage, 2426).
--define(wxPrintDialogData_GetNoCopies, 2427).
--define(wxPrintDialogData_GetPrintData, 2428).
--define(wxPrintDialogData_GetPrintToFile, 2429).
--define(wxPrintDialogData_GetSelection, 2430).
--define(wxPrintDialogData_GetToPage, 2431).
--define(wxPrintDialogData_IsOk, 2432).
--define(wxPrintDialogData_SetCollate, 2433).
--define(wxPrintDialogData_SetFromPage, 2434).
--define(wxPrintDialogData_SetMaxPage, 2435).
--define(wxPrintDialogData_SetMinPage, 2436).
--define(wxPrintDialogData_SetNoCopies, 2437).
--define(wxPrintDialogData_SetPrintData, 2438).
--define(wxPrintDialogData_SetPrintToFile, 2439).
--define(wxPrintDialogData_SetSelection, 2440).
--define(wxPrintDialogData_SetToPage, 2441).
--define(wxPrintData_new_0, 2442).
--define(wxPrintData_new_1, 2443).
--define(wxPrintData_destruct, 2444).
--define(wxPrintData_GetCollate, 2445).
--define(wxPrintData_GetBin, 2446).
--define(wxPrintData_GetColour, 2447).
--define(wxPrintData_GetDuplex, 2448).
--define(wxPrintData_GetNoCopies, 2449).
--define(wxPrintData_GetOrientation, 2450).
--define(wxPrintData_GetPaperId, 2451).
--define(wxPrintData_GetPrinterName, 2452).
--define(wxPrintData_GetQuality, 2453).
--define(wxPrintData_IsOk, 2454).
--define(wxPrintData_SetBin, 2455).
--define(wxPrintData_SetCollate, 2456).
--define(wxPrintData_SetColour, 2457).
--define(wxPrintData_SetDuplex, 2458).
--define(wxPrintData_SetNoCopies, 2459).
--define(wxPrintData_SetOrientation, 2460).
--define(wxPrintData_SetPaperId, 2461).
--define(wxPrintData_SetPrinterName, 2462).
--define(wxPrintData_SetQuality, 2463).
--define(wxPrintPreview_new_2, 2466).
--define(wxPrintPreview_new_3, 2467).
--define(wxPrintPreview_destruct, 2469).
--define(wxPrintPreview_GetCanvas, 2470).
--define(wxPrintPreview_GetCurrentPage, 2471).
--define(wxPrintPreview_GetFrame, 2472).
--define(wxPrintPreview_GetMaxPage, 2473).
--define(wxPrintPreview_GetMinPage, 2474).
--define(wxPrintPreview_GetPrintout, 2475).
--define(wxPrintPreview_GetPrintoutForPrinting, 2476).
--define(wxPrintPreview_IsOk, 2477).
--define(wxPrintPreview_PaintPage, 2478).
--define(wxPrintPreview_Print, 2479).
--define(wxPrintPreview_RenderPage, 2480).
--define(wxPrintPreview_SetCanvas, 2481).
--define(wxPrintPreview_SetCurrentPage, 2482).
--define(wxPrintPreview_SetFrame, 2483).
--define(wxPrintPreview_SetPrintout, 2484).
--define(wxPrintPreview_SetZoom, 2485).
--define(wxPreviewFrame_new, 2486).
--define(wxPreviewFrame_destruct, 2487).
--define(wxPreviewFrame_CreateControlBar, 2488).
--define(wxPreviewFrame_CreateCanvas, 2489).
--define(wxPreviewFrame_Initialize, 2490).
--define(wxPreviewFrame_OnCloseWindow, 2491).
--define(wxPreviewControlBar_new, 2492).
--define(wxPreviewControlBar_destruct, 2493).
--define(wxPreviewControlBar_CreateButtons, 2494).
--define(wxPreviewControlBar_GetPrintPreview, 2495).
--define(wxPreviewControlBar_GetZoomControl, 2496).
--define(wxPreviewControlBar_SetZoomControl, 2497).
--define(wxPrinter_new, 2499).
--define(wxPrinter_CreateAbortWindow, 2500).
--define(wxPrinter_GetAbort, 2501).
--define(wxPrinter_GetLastError, 2502).
--define(wxPrinter_GetPrintDialogData, 2503).
--define(wxPrinter_Print, 2504).
--define(wxPrinter_PrintDialog, 2505).
--define(wxPrinter_ReportError, 2506).
--define(wxPrinter_Setup, 2507).
--define(wxPrinter_destroy, 2508).
--define(wxXmlResource_new_1, 2509).
--define(wxXmlResource_new_2, 2510).
--define(wxXmlResource_destruct, 2511).
--define(wxXmlResource_AttachUnknownControl, 2512).
--define(wxXmlResource_ClearHandlers, 2513).
--define(wxXmlResource_CompareVersion, 2514).
--define(wxXmlResource_Get, 2515).
--define(wxXmlResource_GetFlags, 2516).
--define(wxXmlResource_GetVersion, 2517).
--define(wxXmlResource_GetXRCID, 2518).
--define(wxXmlResource_InitAllHandlers, 2519).
--define(wxXmlResource_Load, 2520).
--define(wxXmlResource_LoadBitmap, 2521).
--define(wxXmlResource_LoadDialog_2, 2522).
--define(wxXmlResource_LoadDialog_3, 2523).
--define(wxXmlResource_LoadFrame_2, 2524).
--define(wxXmlResource_LoadFrame_3, 2525).
--define(wxXmlResource_LoadIcon, 2526).
--define(wxXmlResource_LoadMenu, 2527).
--define(wxXmlResource_LoadMenuBar_2, 2528).
--define(wxXmlResource_LoadMenuBar_1, 2529).
--define(wxXmlResource_LoadPanel_2, 2530).
--define(wxXmlResource_LoadPanel_3, 2531).
--define(wxXmlResource_LoadToolBar, 2532).
--define(wxXmlResource_Set, 2533).
--define(wxXmlResource_SetFlags, 2534).
--define(wxXmlResource_Unload, 2535).
--define(wxXmlResource_xrcctrl, 2536).
--define(wxHtmlEasyPrinting_new, 2537).
--define(wxHtmlEasyPrinting_destruct, 2538).
--define(wxHtmlEasyPrinting_GetPrintData, 2539).
--define(wxHtmlEasyPrinting_GetPageSetupData, 2540).
--define(wxHtmlEasyPrinting_PreviewFile, 2541).
--define(wxHtmlEasyPrinting_PreviewText, 2542).
--define(wxHtmlEasyPrinting_PrintFile, 2543).
--define(wxHtmlEasyPrinting_PrintText, 2544).
--define(wxHtmlEasyPrinting_PageSetup, 2545).
--define(wxHtmlEasyPrinting_SetFonts, 2546).
--define(wxHtmlEasyPrinting_SetHeader, 2547).
--define(wxHtmlEasyPrinting_SetFooter, 2548).
--define(wxGLCanvas_new_2, 2550).
--define(wxGLCanvas_new_3_1, 2551).
--define(wxGLCanvas_new_3_0, 2552).
--define(wxGLCanvas_GetContext, 2553).
--define(wxGLCanvas_SetCurrent, 2555).
--define(wxGLCanvas_SwapBuffers, 2556).
--define(wxGLCanvas_destroy, 2557).
--define(wxAuiManager_new, 2558).
--define(wxAuiManager_destruct, 2559).
--define(wxAuiManager_AddPane_2_1, 2560).
--define(wxAuiManager_AddPane_3, 2561).
--define(wxAuiManager_AddPane_2_0, 2562).
--define(wxAuiManager_DetachPane, 2563).
--define(wxAuiManager_GetAllPanes, 2564).
--define(wxAuiManager_GetArtProvider, 2565).
--define(wxAuiManager_GetDockSizeConstraint, 2566).
--define(wxAuiManager_GetFlags, 2567).
--define(wxAuiManager_GetManagedWindow, 2568).
--define(wxAuiManager_GetManager, 2569).
--define(wxAuiManager_GetPane_1_1, 2570).
--define(wxAuiManager_GetPane_1_0, 2571).
--define(wxAuiManager_HideHint, 2572).
--define(wxAuiManager_InsertPane, 2573).
--define(wxAuiManager_LoadPaneInfo, 2574).
--define(wxAuiManager_LoadPerspective, 2575).
--define(wxAuiManager_SavePaneInfo, 2576).
--define(wxAuiManager_SavePerspective, 2577).
--define(wxAuiManager_SetArtProvider, 2578).
--define(wxAuiManager_SetDockSizeConstraint, 2579).
--define(wxAuiManager_SetFlags, 2580).
--define(wxAuiManager_SetManagedWindow, 2581).
--define(wxAuiManager_ShowHint, 2582).
--define(wxAuiManager_UnInit, 2583).
--define(wxAuiManager_Update, 2584).
--define(wxAuiPaneInfo_new_0, 2585).
--define(wxAuiPaneInfo_new_1, 2586).
--define(wxAuiPaneInfo_destruct, 2587).
--define(wxAuiPaneInfo_BestSize_1, 2588).
--define(wxAuiPaneInfo_BestSize_2, 2589).
--define(wxAuiPaneInfo_Bottom, 2590).
--define(wxAuiPaneInfo_BottomDockable, 2591).
--define(wxAuiPaneInfo_Caption, 2592).
--define(wxAuiPaneInfo_CaptionVisible, 2593).
--define(wxAuiPaneInfo_Centre, 2594).
--define(wxAuiPaneInfo_CentrePane, 2595).
--define(wxAuiPaneInfo_CloseButton, 2596).
--define(wxAuiPaneInfo_DefaultPane, 2597).
--define(wxAuiPaneInfo_DestroyOnClose, 2598).
--define(wxAuiPaneInfo_Direction, 2599).
--define(wxAuiPaneInfo_Dock, 2600).
--define(wxAuiPaneInfo_Dockable, 2601).
--define(wxAuiPaneInfo_Fixed, 2602).
--define(wxAuiPaneInfo_Float, 2603).
--define(wxAuiPaneInfo_Floatable, 2604).
--define(wxAuiPaneInfo_FloatingPosition_1, 2605).
--define(wxAuiPaneInfo_FloatingPosition_2, 2606).
--define(wxAuiPaneInfo_FloatingSize_1, 2607).
--define(wxAuiPaneInfo_FloatingSize_2, 2608).
--define(wxAuiPaneInfo_Gripper, 2609).
--define(wxAuiPaneInfo_GripperTop, 2610).
--define(wxAuiPaneInfo_HasBorder, 2611).
--define(wxAuiPaneInfo_HasCaption, 2612).
--define(wxAuiPaneInfo_HasCloseButton, 2613).
--define(wxAuiPaneInfo_HasFlag, 2614).
--define(wxAuiPaneInfo_HasGripper, 2615).
--define(wxAuiPaneInfo_HasGripperTop, 2616).
--define(wxAuiPaneInfo_HasMaximizeButton, 2617).
--define(wxAuiPaneInfo_HasMinimizeButton, 2618).
--define(wxAuiPaneInfo_HasPinButton, 2619).
--define(wxAuiPaneInfo_Hide, 2620).
--define(wxAuiPaneInfo_IsBottomDockable, 2621).
--define(wxAuiPaneInfo_IsDocked, 2622).
--define(wxAuiPaneInfo_IsFixed, 2623).
--define(wxAuiPaneInfo_IsFloatable, 2624).
--define(wxAuiPaneInfo_IsFloating, 2625).
--define(wxAuiPaneInfo_IsLeftDockable, 2626).
--define(wxAuiPaneInfo_IsMovable, 2627).
--define(wxAuiPaneInfo_IsOk, 2628).
--define(wxAuiPaneInfo_IsResizable, 2629).
--define(wxAuiPaneInfo_IsRightDockable, 2630).
--define(wxAuiPaneInfo_IsShown, 2631).
--define(wxAuiPaneInfo_IsToolbar, 2632).
--define(wxAuiPaneInfo_IsTopDockable, 2633).
--define(wxAuiPaneInfo_Layer, 2634).
--define(wxAuiPaneInfo_Left, 2635).
--define(wxAuiPaneInfo_LeftDockable, 2636).
--define(wxAuiPaneInfo_MaxSize_1, 2637).
--define(wxAuiPaneInfo_MaxSize_2, 2638).
--define(wxAuiPaneInfo_MaximizeButton, 2639).
--define(wxAuiPaneInfo_MinSize_1, 2640).
--define(wxAuiPaneInfo_MinSize_2, 2641).
--define(wxAuiPaneInfo_MinimizeButton, 2642).
--define(wxAuiPaneInfo_Movable, 2643).
--define(wxAuiPaneInfo_Name, 2644).
--define(wxAuiPaneInfo_PaneBorder, 2645).
--define(wxAuiPaneInfo_PinButton, 2646).
--define(wxAuiPaneInfo_Position, 2647).
--define(wxAuiPaneInfo_Resizable, 2648).
--define(wxAuiPaneInfo_Right, 2649).
--define(wxAuiPaneInfo_RightDockable, 2650).
--define(wxAuiPaneInfo_Row, 2651).
--define(wxAuiPaneInfo_SafeSet, 2652).
--define(wxAuiPaneInfo_SetFlag, 2653).
--define(wxAuiPaneInfo_Show, 2654).
--define(wxAuiPaneInfo_ToolbarPane, 2655).
--define(wxAuiPaneInfo_Top, 2656).
--define(wxAuiPaneInfo_TopDockable, 2657).
--define(wxAuiPaneInfo_Window, 2658).
--define(wxAuiPaneInfo_GetWindow, 2659).
--define(wxAuiPaneInfo_GetFrame, 2660).
--define(wxAuiPaneInfo_GetDirection, 2661).
--define(wxAuiPaneInfo_GetLayer, 2662).
--define(wxAuiPaneInfo_GetRow, 2663).
--define(wxAuiPaneInfo_GetPosition, 2664).
--define(wxAuiPaneInfo_GetFloatingPosition, 2665).
--define(wxAuiPaneInfo_GetFloatingSize, 2666).
--define(wxAuiNotebook_new_0, 2667).
--define(wxAuiNotebook_new_2, 2668).
--define(wxAuiNotebook_AddPage, 2669).
--define(wxAuiNotebook_Create, 2670).
--define(wxAuiNotebook_DeletePage, 2671).
--define(wxAuiNotebook_GetArtProvider, 2672).
--define(wxAuiNotebook_GetPage, 2673).
--define(wxAuiNotebook_GetPageBitmap, 2674).
--define(wxAuiNotebook_GetPageCount, 2675).
--define(wxAuiNotebook_GetPageIndex, 2676).
--define(wxAuiNotebook_GetPageText, 2677).
--define(wxAuiNotebook_GetSelection, 2678).
--define(wxAuiNotebook_InsertPage, 2679).
--define(wxAuiNotebook_RemovePage, 2680).
--define(wxAuiNotebook_SetArtProvider, 2681).
--define(wxAuiNotebook_SetFont, 2682).
--define(wxAuiNotebook_SetPageBitmap, 2683).
--define(wxAuiNotebook_SetPageText, 2684).
--define(wxAuiNotebook_SetSelection, 2685).
--define(wxAuiNotebook_SetTabCtrlHeight, 2686).
--define(wxAuiNotebook_SetUniformBitmapSize, 2687).
--define(wxAuiNotebook_destroy, 2688).
--define(wxAuiTabArt_SetFlags, 2689).
--define(wxAuiTabArt_SetMeasuringFont, 2690).
--define(wxAuiTabArt_SetNormalFont, 2691).
--define(wxAuiTabArt_SetSelectedFont, 2692).
--define(wxAuiTabArt_SetColour, 2693).
--define(wxAuiTabArt_SetActiveColour, 2694).
--define(wxAuiDockArt_GetColour, 2695).
--define(wxAuiDockArt_GetFont, 2696).
--define(wxAuiDockArt_GetMetric, 2697).
--define(wxAuiDockArt_SetColour, 2698).
--define(wxAuiDockArt_SetFont, 2699).
--define(wxAuiDockArt_SetMetric, 2700).
--define(wxAuiSimpleTabArt_new, 2701).
--define(wxAuiSimpleTabArt_destroy, 2702).
--define(wxMDIParentFrame_new_0, 2703).
--define(wxMDIParentFrame_new_4, 2704).
--define(wxMDIParentFrame_destruct, 2705).
--define(wxMDIParentFrame_ActivateNext, 2706).
--define(wxMDIParentFrame_ActivatePrevious, 2707).
--define(wxMDIParentFrame_ArrangeIcons, 2708).
--define(wxMDIParentFrame_Cascade, 2709).
--define(wxMDIParentFrame_Create, 2710).
--define(wxMDIParentFrame_GetActiveChild, 2711).
--define(wxMDIParentFrame_GetClientWindow, 2712).
--define(wxMDIParentFrame_Tile, 2713).
--define(wxMDIChildFrame_new_0, 2714).
--define(wxMDIChildFrame_new_4, 2715).
--define(wxMDIChildFrame_destruct, 2716).
--define(wxMDIChildFrame_Activate, 2717).
--define(wxMDIChildFrame_Create, 2718).
--define(wxMDIChildFrame_Maximize, 2719).
--define(wxMDIChildFrame_Restore, 2720).
--define(wxMDIClientWindow_new_0, 2721).
--define(wxMDIClientWindow_new_2, 2722).
--define(wxMDIClientWindow_destruct, 2723).
--define(wxMDIClientWindow_CreateClient, 2724).
--define(wxLayoutAlgorithm_new, 2725).
--define(wxLayoutAlgorithm_LayoutFrame, 2726).
--define(wxLayoutAlgorithm_LayoutMDIFrame, 2727).
--define(wxLayoutAlgorithm_LayoutWindow, 2728).
--define(wxLayoutAlgorithm_destroy, 2729).
--define(wxEvent_GetId, 2730).
--define(wxEvent_GetSkipped, 2731).
--define(wxEvent_GetTimestamp, 2732).
--define(wxEvent_IsCommandEvent, 2733).
--define(wxEvent_ResumePropagation, 2734).
--define(wxEvent_ShouldPropagate, 2735).
--define(wxEvent_Skip, 2736).
--define(wxEvent_StopPropagation, 2737).
--define(wxCommandEvent_getClientData, 2738).
--define(wxCommandEvent_GetExtraLong, 2739).
--define(wxCommandEvent_GetInt, 2740).
--define(wxCommandEvent_GetSelection, 2741).
--define(wxCommandEvent_GetString, 2742).
--define(wxCommandEvent_IsChecked, 2743).
--define(wxCommandEvent_IsSelection, 2744).
--define(wxCommandEvent_SetInt, 2745).
--define(wxCommandEvent_SetString, 2746).
--define(wxScrollEvent_GetOrientation, 2747).
--define(wxScrollEvent_GetPosition, 2748).
--define(wxScrollWinEvent_GetOrientation, 2749).
--define(wxScrollWinEvent_GetPosition, 2750).
--define(wxMouseEvent_AltDown, 2751).
--define(wxMouseEvent_Button, 2752).
--define(wxMouseEvent_ButtonDClick, 2753).
--define(wxMouseEvent_ButtonDown, 2754).
--define(wxMouseEvent_ButtonUp, 2755).
--define(wxMouseEvent_CmdDown, 2756).
--define(wxMouseEvent_ControlDown, 2757).
--define(wxMouseEvent_Dragging, 2758).
--define(wxMouseEvent_Entering, 2759).
--define(wxMouseEvent_GetButton, 2760).
--define(wxMouseEvent_GetPosition, 2763).
--define(wxMouseEvent_GetLogicalPosition, 2764).
--define(wxMouseEvent_GetLinesPerAction, 2765).
--define(wxMouseEvent_GetWheelRotation, 2766).
--define(wxMouseEvent_GetWheelDelta, 2767).
--define(wxMouseEvent_GetX, 2768).
--define(wxMouseEvent_GetY, 2769).
--define(wxMouseEvent_IsButton, 2770).
--define(wxMouseEvent_IsPageScroll, 2771).
--define(wxMouseEvent_Leaving, 2772).
--define(wxMouseEvent_LeftDClick, 2773).
--define(wxMouseEvent_LeftDown, 2774).
--define(wxMouseEvent_LeftIsDown, 2775).
--define(wxMouseEvent_LeftUp, 2776).
--define(wxMouseEvent_MetaDown, 2777).
--define(wxMouseEvent_MiddleDClick, 2778).
--define(wxMouseEvent_MiddleDown, 2779).
--define(wxMouseEvent_MiddleIsDown, 2780).
--define(wxMouseEvent_MiddleUp, 2781).
--define(wxMouseEvent_Moving, 2782).
--define(wxMouseEvent_RightDClick, 2783).
--define(wxMouseEvent_RightDown, 2784).
--define(wxMouseEvent_RightIsDown, 2785).
--define(wxMouseEvent_RightUp, 2786).
--define(wxMouseEvent_ShiftDown, 2787).
--define(wxSetCursorEvent_GetCursor, 2788).
--define(wxSetCursorEvent_GetX, 2789).
--define(wxSetCursorEvent_GetY, 2790).
--define(wxSetCursorEvent_HasCursor, 2791).
--define(wxSetCursorEvent_SetCursor, 2792).
--define(wxKeyEvent_AltDown, 2793).
--define(wxKeyEvent_CmdDown, 2794).
--define(wxKeyEvent_ControlDown, 2795).
--define(wxKeyEvent_GetKeyCode, 2796).
--define(wxKeyEvent_GetModifiers, 2797).
--define(wxKeyEvent_GetPosition, 2800).
--define(wxKeyEvent_GetRawKeyCode, 2801).
--define(wxKeyEvent_GetRawKeyFlags, 2802).
--define(wxKeyEvent_GetUnicodeKey, 2803).
--define(wxKeyEvent_GetX, 2804).
--define(wxKeyEvent_GetY, 2805).
--define(wxKeyEvent_HasModifiers, 2806).
--define(wxKeyEvent_MetaDown, 2807).
--define(wxKeyEvent_ShiftDown, 2808).
--define(wxSizeEvent_GetSize, 2809).
--define(wxMoveEvent_GetPosition, 2810).
--define(wxEraseEvent_GetDC, 2811).
--define(wxFocusEvent_GetWindow, 2812).
--define(wxChildFocusEvent_GetWindow, 2813).
--define(wxMenuEvent_GetMenu, 2814).
--define(wxMenuEvent_GetMenuId, 2815).
--define(wxMenuEvent_IsPopup, 2816).
--define(wxCloseEvent_CanVeto, 2817).
--define(wxCloseEvent_GetLoggingOff, 2818).
--define(wxCloseEvent_SetCanVeto, 2819).
--define(wxCloseEvent_SetLoggingOff, 2820).
--define(wxCloseEvent_Veto, 2821).
--define(wxShowEvent_SetShow, 2822).
--define(wxShowEvent_GetShow, 2823).
--define(wxIconizeEvent_Iconized, 2824).
--define(wxJoystickEvent_ButtonDown, 2825).
--define(wxJoystickEvent_ButtonIsDown, 2826).
--define(wxJoystickEvent_ButtonUp, 2827).
--define(wxJoystickEvent_GetButtonChange, 2828).
--define(wxJoystickEvent_GetButtonState, 2829).
--define(wxJoystickEvent_GetJoystick, 2830).
--define(wxJoystickEvent_GetPosition, 2831).
--define(wxJoystickEvent_GetZPosition, 2832).
--define(wxJoystickEvent_IsButton, 2833).
--define(wxJoystickEvent_IsMove, 2834).
--define(wxJoystickEvent_IsZMove, 2835).
--define(wxUpdateUIEvent_CanUpdate, 2836).
--define(wxUpdateUIEvent_Check, 2837).
--define(wxUpdateUIEvent_Enable, 2838).
--define(wxUpdateUIEvent_Show, 2839).
--define(wxUpdateUIEvent_GetChecked, 2840).
--define(wxUpdateUIEvent_GetEnabled, 2841).
--define(wxUpdateUIEvent_GetShown, 2842).
--define(wxUpdateUIEvent_GetSetChecked, 2843).
--define(wxUpdateUIEvent_GetSetEnabled, 2844).
--define(wxUpdateUIEvent_GetSetShown, 2845).
--define(wxUpdateUIEvent_GetSetText, 2846).
--define(wxUpdateUIEvent_GetText, 2847).
--define(wxUpdateUIEvent_GetMode, 2848).
--define(wxUpdateUIEvent_GetUpdateInterval, 2849).
--define(wxUpdateUIEvent_ResetUpdateTime, 2850).
--define(wxUpdateUIEvent_SetMode, 2851).
--define(wxUpdateUIEvent_SetText, 2852).
--define(wxUpdateUIEvent_SetUpdateInterval, 2853).
--define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2854).
--define(wxPaletteChangedEvent_SetChangedWindow, 2855).
--define(wxPaletteChangedEvent_GetChangedWindow, 2856).
--define(wxQueryNewPaletteEvent_SetPaletteRealized, 2857).
--define(wxQueryNewPaletteEvent_GetPaletteRealized, 2858).
--define(wxNavigationKeyEvent_GetDirection, 2859).
--define(wxNavigationKeyEvent_SetDirection, 2860).
--define(wxNavigationKeyEvent_IsWindowChange, 2861).
--define(wxNavigationKeyEvent_SetWindowChange, 2862).
--define(wxNavigationKeyEvent_IsFromTab, 2863).
--define(wxNavigationKeyEvent_SetFromTab, 2864).
--define(wxNavigationKeyEvent_GetCurrentFocus, 2865).
--define(wxNavigationKeyEvent_SetCurrentFocus, 2866).
--define(wxHelpEvent_GetOrigin, 2867).
--define(wxHelpEvent_GetPosition, 2868).
--define(wxHelpEvent_SetOrigin, 2869).
--define(wxHelpEvent_SetPosition, 2870).
--define(wxContextMenuEvent_GetPosition, 2871).
--define(wxContextMenuEvent_SetPosition, 2872).
--define(wxIdleEvent_CanSend, 2873).
--define(wxIdleEvent_GetMode, 2874).
--define(wxIdleEvent_RequestMore, 2875).
--define(wxIdleEvent_MoreRequested, 2876).
--define(wxIdleEvent_SetMode, 2877).
--define(wxGridEvent_AltDown, 2878).
--define(wxGridEvent_ControlDown, 2879).
--define(wxGridEvent_GetCol, 2880).
--define(wxGridEvent_GetPosition, 2881).
--define(wxGridEvent_GetRow, 2882).
--define(wxGridEvent_MetaDown, 2883).
--define(wxGridEvent_Selecting, 2884).
--define(wxGridEvent_ShiftDown, 2885).
--define(wxNotifyEvent_Allow, 2886).
--define(wxNotifyEvent_IsAllowed, 2887).
--define(wxNotifyEvent_Veto, 2888).
--define(wxSashEvent_GetEdge, 2889).
--define(wxSashEvent_GetDragRect, 2890).
--define(wxSashEvent_GetDragStatus, 2891).
--define(wxListEvent_GetCacheFrom, 2892).
--define(wxListEvent_GetCacheTo, 2893).
--define(wxListEvent_GetKeyCode, 2894).
--define(wxListEvent_GetIndex, 2895).
--define(wxListEvent_GetColumn, 2896).
--define(wxListEvent_GetPoint, 2897).
--define(wxListEvent_GetLabel, 2898).
--define(wxListEvent_GetText, 2899).
--define(wxListEvent_GetImage, 2900).
--define(wxListEvent_GetData, 2901).
--define(wxListEvent_GetMask, 2902).
--define(wxListEvent_GetItem, 2903).
--define(wxListEvent_IsEditCancelled, 2904).
--define(wxDateEvent_GetDate, 2905).
--define(wxCalendarEvent_GetWeekDay, 2906).
--define(wxFileDirPickerEvent_GetPath, 2907).
--define(wxColourPickerEvent_GetColour, 2908).
--define(wxFontPickerEvent_GetFont, 2909).
--define(wxStyledTextEvent_GetPosition, 2910).
--define(wxStyledTextEvent_GetKey, 2911).
--define(wxStyledTextEvent_GetModifiers, 2912).
--define(wxStyledTextEvent_GetModificationType, 2913).
--define(wxStyledTextEvent_GetText, 2914).
--define(wxStyledTextEvent_GetLength, 2915).
--define(wxStyledTextEvent_GetLinesAdded, 2916).
--define(wxStyledTextEvent_GetLine, 2917).
--define(wxStyledTextEvent_GetFoldLevelNow, 2918).
--define(wxStyledTextEvent_GetFoldLevelPrev, 2919).
--define(wxStyledTextEvent_GetMargin, 2920).
--define(wxStyledTextEvent_GetMessage, 2921).
--define(wxStyledTextEvent_GetWParam, 2922).
--define(wxStyledTextEvent_GetLParam, 2923).
--define(wxStyledTextEvent_GetListType, 2924).
--define(wxStyledTextEvent_GetX, 2925).
--define(wxStyledTextEvent_GetY, 2926).
--define(wxStyledTextEvent_GetDragText, 2927).
--define(wxStyledTextEvent_GetDragAllowMove, 2928).
--define(wxStyledTextEvent_GetDragResult, 2929).
--define(wxStyledTextEvent_GetShift, 2930).
--define(wxStyledTextEvent_GetControl, 2931).
--define(wxStyledTextEvent_GetAlt, 2932).
--define(utils_wxGetKeyState, 2933).
--define(utils_wxGetMousePosition, 2934).
--define(utils_wxGetMouseState, 2935).
--define(utils_wxSetDetectableAutoRepeat, 2936).
--define(utils_wxBell, 2937).
--define(utils_wxFindMenuItemId, 2938).
--define(utils_wxGenericFindWindowAtPoint, 2939).
--define(utils_wxFindWindowAtPoint, 2940).
--define(utils_wxBeginBusyCursor, 2941).
--define(utils_wxEndBusyCursor, 2942).
--define(utils_wxIsBusy, 2943).
--define(utils_wxShutdown, 2944).
--define(utils_wxShell, 2945).
--define(utils_wxLaunchDefaultBrowser, 2946).
--define(utils_wxGetEmailAddress, 2947).
--define(utils_wxGetUserId, 2948).
--define(utils_wxGetHomeDir, 2949).
--define(utils_wxNewId, 2950).
--define(utils_wxRegisterId, 2951).
--define(utils_wxGetCurrentId, 2952).
--define(utils_wxGetOsDescription, 2953).
--define(utils_wxIsPlatformLittleEndian, 2954).
--define(utils_wxIsPlatform64Bit, 2955).
--define(gdicmn_wxDisplaySize, 2956).
--define(gdicmn_wxSetCursor, 2957).
--define(wxPrintout_new, 2958).
--define(wxPrintout_destruct, 2959).
--define(wxPrintout_GetDC, 2960).
--define(wxPrintout_GetPageSizeMM, 2961).
--define(wxPrintout_GetPageSizePixels, 2962).
--define(wxPrintout_GetPaperRectPixels, 2963).
--define(wxPrintout_GetPPIPrinter, 2964).
--define(wxPrintout_GetPPIScreen, 2965).
--define(wxPrintout_GetTitle, 2966).
--define(wxPrintout_IsPreview, 2967).
--define(wxPrintout_FitThisSizeToPaper, 2968).
--define(wxPrintout_FitThisSizeToPage, 2969).
--define(wxPrintout_FitThisSizeToPageMargins, 2970).
--define(wxPrintout_MapScreenSizeToPaper, 2971).
--define(wxPrintout_MapScreenSizeToPage, 2972).
--define(wxPrintout_MapScreenSizeToPageMargins, 2973).
--define(wxPrintout_MapScreenSizeToDevice, 2974).
--define(wxPrintout_GetLogicalPaperRect, 2975).
--define(wxPrintout_GetLogicalPageRect, 2976).
--define(wxPrintout_GetLogicalPageMarginsRect, 2977).
--define(wxPrintout_SetLogicalOrigin, 2978).
--define(wxPrintout_OffsetLogicalOrigin, 2979).
--define(wxStyledTextCtrl_new_2, 2980).
--define(wxStyledTextCtrl_new_0, 2981).
--define(wxStyledTextCtrl_destruct, 2982).
--define(wxStyledTextCtrl_Create, 2983).
--define(wxStyledTextCtrl_AddText, 2984).
--define(wxStyledTextCtrl_AddStyledText, 2985).
--define(wxStyledTextCtrl_InsertText, 2986).
--define(wxStyledTextCtrl_ClearAll, 2987).
--define(wxStyledTextCtrl_ClearDocumentStyle, 2988).
--define(wxStyledTextCtrl_GetLength, 2989).
--define(wxStyledTextCtrl_GetCharAt, 2990).
--define(wxStyledTextCtrl_GetCurrentPos, 2991).
--define(wxStyledTextCtrl_GetAnchor, 2992).
--define(wxStyledTextCtrl_GetStyleAt, 2993).
--define(wxStyledTextCtrl_Redo, 2994).
--define(wxStyledTextCtrl_SetUndoCollection, 2995).
--define(wxStyledTextCtrl_SelectAll, 2996).
--define(wxStyledTextCtrl_SetSavePoint, 2997).
--define(wxStyledTextCtrl_GetStyledText, 2998).
--define(wxStyledTextCtrl_CanRedo, 2999).
--define(wxStyledTextCtrl_MarkerLineFromHandle, 3000).
--define(wxStyledTextCtrl_MarkerDeleteHandle, 3001).
--define(wxStyledTextCtrl_GetUndoCollection, 3002).
--define(wxStyledTextCtrl_GetViewWhiteSpace, 3003).
--define(wxStyledTextCtrl_SetViewWhiteSpace, 3004).
--define(wxStyledTextCtrl_PositionFromPoint, 3005).
--define(wxStyledTextCtrl_PositionFromPointClose, 3006).
--define(wxStyledTextCtrl_GotoLine, 3007).
--define(wxStyledTextCtrl_GotoPos, 3008).
--define(wxStyledTextCtrl_SetAnchor, 3009).
--define(wxStyledTextCtrl_GetCurLine, 3010).
--define(wxStyledTextCtrl_GetEndStyled, 3011).
--define(wxStyledTextCtrl_ConvertEOLs, 3012).
--define(wxStyledTextCtrl_GetEOLMode, 3013).
--define(wxStyledTextCtrl_SetEOLMode, 3014).
--define(wxStyledTextCtrl_StartStyling, 3015).
--define(wxStyledTextCtrl_SetStyling, 3016).
--define(wxStyledTextCtrl_GetBufferedDraw, 3017).
--define(wxStyledTextCtrl_SetBufferedDraw, 3018).
--define(wxStyledTextCtrl_SetTabWidth, 3019).
--define(wxStyledTextCtrl_GetTabWidth, 3020).
--define(wxStyledTextCtrl_SetCodePage, 3021).
--define(wxStyledTextCtrl_MarkerDefine, 3022).
--define(wxStyledTextCtrl_MarkerSetForeground, 3023).
--define(wxStyledTextCtrl_MarkerSetBackground, 3024).
--define(wxStyledTextCtrl_MarkerAdd, 3025).
--define(wxStyledTextCtrl_MarkerDelete, 3026).
--define(wxStyledTextCtrl_MarkerDeleteAll, 3027).
--define(wxStyledTextCtrl_MarkerGet, 3028).
--define(wxStyledTextCtrl_MarkerNext, 3029).
--define(wxStyledTextCtrl_MarkerPrevious, 3030).
--define(wxStyledTextCtrl_MarkerDefineBitmap, 3031).
--define(wxStyledTextCtrl_MarkerAddSet, 3032).
--define(wxStyledTextCtrl_MarkerSetAlpha, 3033).
--define(wxStyledTextCtrl_SetMarginType, 3034).
--define(wxStyledTextCtrl_GetMarginType, 3035).
--define(wxStyledTextCtrl_SetMarginWidth, 3036).
--define(wxStyledTextCtrl_GetMarginWidth, 3037).
--define(wxStyledTextCtrl_SetMarginMask, 3038).
--define(wxStyledTextCtrl_GetMarginMask, 3039).
--define(wxStyledTextCtrl_SetMarginSensitive, 3040).
--define(wxStyledTextCtrl_GetMarginSensitive, 3041).
--define(wxStyledTextCtrl_StyleClearAll, 3042).
--define(wxStyledTextCtrl_StyleSetForeground, 3043).
--define(wxStyledTextCtrl_StyleSetBackground, 3044).
--define(wxStyledTextCtrl_StyleSetBold, 3045).
--define(wxStyledTextCtrl_StyleSetItalic, 3046).
--define(wxStyledTextCtrl_StyleSetSize, 3047).
--define(wxStyledTextCtrl_StyleSetFaceName, 3048).
--define(wxStyledTextCtrl_StyleSetEOLFilled, 3049).
--define(wxStyledTextCtrl_StyleResetDefault, 3050).
--define(wxStyledTextCtrl_StyleSetUnderline, 3051).
--define(wxStyledTextCtrl_StyleSetCase, 3052).
--define(wxStyledTextCtrl_StyleSetHotSpot, 3053).
--define(wxStyledTextCtrl_SetSelForeground, 3054).
--define(wxStyledTextCtrl_SetSelBackground, 3055).
--define(wxStyledTextCtrl_GetSelAlpha, 3056).
--define(wxStyledTextCtrl_SetSelAlpha, 3057).
--define(wxStyledTextCtrl_SetCaretForeground, 3058).
--define(wxStyledTextCtrl_CmdKeyAssign, 3059).
--define(wxStyledTextCtrl_CmdKeyClear, 3060).
--define(wxStyledTextCtrl_CmdKeyClearAll, 3061).
--define(wxStyledTextCtrl_SetStyleBytes, 3062).
--define(wxStyledTextCtrl_StyleSetVisible, 3063).
--define(wxStyledTextCtrl_GetCaretPeriod, 3064).
--define(wxStyledTextCtrl_SetCaretPeriod, 3065).
--define(wxStyledTextCtrl_SetWordChars, 3066).
--define(wxStyledTextCtrl_BeginUndoAction, 3067).
--define(wxStyledTextCtrl_EndUndoAction, 3068).
--define(wxStyledTextCtrl_IndicatorSetStyle, 3069).
--define(wxStyledTextCtrl_IndicatorGetStyle, 3070).
--define(wxStyledTextCtrl_IndicatorSetForeground, 3071).
--define(wxStyledTextCtrl_IndicatorGetForeground, 3072).
--define(wxStyledTextCtrl_SetWhitespaceForeground, 3073).
--define(wxStyledTextCtrl_SetWhitespaceBackground, 3074).
--define(wxStyledTextCtrl_GetStyleBits, 3075).
--define(wxStyledTextCtrl_SetLineState, 3076).
--define(wxStyledTextCtrl_GetLineState, 3077).
--define(wxStyledTextCtrl_GetMaxLineState, 3078).
--define(wxStyledTextCtrl_GetCaretLineVisible, 3079).
--define(wxStyledTextCtrl_SetCaretLineVisible, 3080).
--define(wxStyledTextCtrl_GetCaretLineBackground, 3081).
--define(wxStyledTextCtrl_SetCaretLineBackground, 3082).
--define(wxStyledTextCtrl_AutoCompShow, 3083).
--define(wxStyledTextCtrl_AutoCompCancel, 3084).
--define(wxStyledTextCtrl_AutoCompActive, 3085).
--define(wxStyledTextCtrl_AutoCompPosStart, 3086).
--define(wxStyledTextCtrl_AutoCompComplete, 3087).
--define(wxStyledTextCtrl_AutoCompStops, 3088).
--define(wxStyledTextCtrl_AutoCompSetSeparator, 3089).
--define(wxStyledTextCtrl_AutoCompGetSeparator, 3090).
--define(wxStyledTextCtrl_AutoCompSelect, 3091).
--define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3092).
--define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3093).
--define(wxStyledTextCtrl_AutoCompSetFillUps, 3094).
--define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3095).
--define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3096).
--define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3097).
--define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3098).
--define(wxStyledTextCtrl_UserListShow, 3099).
--define(wxStyledTextCtrl_AutoCompSetAutoHide, 3100).
--define(wxStyledTextCtrl_AutoCompGetAutoHide, 3101).
--define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3102).
--define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3103).
--define(wxStyledTextCtrl_RegisterImage, 3104).
--define(wxStyledTextCtrl_ClearRegisteredImages, 3105).
--define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3106).
--define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3107).
--define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3108).
--define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3109).
--define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3110).
--define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3111).
--define(wxStyledTextCtrl_SetIndent, 3112).
--define(wxStyledTextCtrl_GetIndent, 3113).
--define(wxStyledTextCtrl_SetUseTabs, 3114).
--define(wxStyledTextCtrl_GetUseTabs, 3115).
--define(wxStyledTextCtrl_SetLineIndentation, 3116).
--define(wxStyledTextCtrl_GetLineIndentation, 3117).
--define(wxStyledTextCtrl_GetLineIndentPosition, 3118).
--define(wxStyledTextCtrl_GetColumn, 3119).
--define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3120).
--define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3121).
--define(wxStyledTextCtrl_SetIndentationGuides, 3122).
--define(wxStyledTextCtrl_GetIndentationGuides, 3123).
--define(wxStyledTextCtrl_SetHighlightGuide, 3124).
--define(wxStyledTextCtrl_GetHighlightGuide, 3125).
--define(wxStyledTextCtrl_GetLineEndPosition, 3126).
--define(wxStyledTextCtrl_GetCodePage, 3127).
--define(wxStyledTextCtrl_GetCaretForeground, 3128).
--define(wxStyledTextCtrl_GetReadOnly, 3129).
--define(wxStyledTextCtrl_SetCurrentPos, 3130).
--define(wxStyledTextCtrl_SetSelectionStart, 3131).
--define(wxStyledTextCtrl_GetSelectionStart, 3132).
--define(wxStyledTextCtrl_SetSelectionEnd, 3133).
--define(wxStyledTextCtrl_GetSelectionEnd, 3134).
--define(wxStyledTextCtrl_SetPrintMagnification, 3135).
--define(wxStyledTextCtrl_GetPrintMagnification, 3136).
--define(wxStyledTextCtrl_SetPrintColourMode, 3137).
--define(wxStyledTextCtrl_GetPrintColourMode, 3138).
--define(wxStyledTextCtrl_FindText, 3139).
--define(wxStyledTextCtrl_FormatRange, 3140).
--define(wxStyledTextCtrl_GetFirstVisibleLine, 3141).
--define(wxStyledTextCtrl_GetLine, 3142).
--define(wxStyledTextCtrl_GetLineCount, 3143).
--define(wxStyledTextCtrl_SetMarginLeft, 3144).
--define(wxStyledTextCtrl_GetMarginLeft, 3145).
--define(wxStyledTextCtrl_SetMarginRight, 3146).
--define(wxStyledTextCtrl_GetMarginRight, 3147).
--define(wxStyledTextCtrl_GetModify, 3148).
--define(wxStyledTextCtrl_SetSelection, 3149).
--define(wxStyledTextCtrl_GetSelectedText, 3150).
--define(wxStyledTextCtrl_GetTextRange, 3151).
--define(wxStyledTextCtrl_HideSelection, 3152).
--define(wxStyledTextCtrl_LineFromPosition, 3153).
--define(wxStyledTextCtrl_PositionFromLine, 3154).
--define(wxStyledTextCtrl_LineScroll, 3155).
--define(wxStyledTextCtrl_EnsureCaretVisible, 3156).
--define(wxStyledTextCtrl_ReplaceSelection, 3157).
--define(wxStyledTextCtrl_SetReadOnly, 3158).
--define(wxStyledTextCtrl_CanPaste, 3159).
--define(wxStyledTextCtrl_CanUndo, 3160).
--define(wxStyledTextCtrl_EmptyUndoBuffer, 3161).
--define(wxStyledTextCtrl_Undo, 3162).
--define(wxStyledTextCtrl_Cut, 3163).
--define(wxStyledTextCtrl_Copy, 3164).
--define(wxStyledTextCtrl_Paste, 3165).
--define(wxStyledTextCtrl_Clear, 3166).
--define(wxStyledTextCtrl_SetText, 3167).
--define(wxStyledTextCtrl_GetText, 3168).
--define(wxStyledTextCtrl_GetTextLength, 3169).
--define(wxStyledTextCtrl_GetOvertype, 3170).
--define(wxStyledTextCtrl_SetCaretWidth, 3171).
--define(wxStyledTextCtrl_GetCaretWidth, 3172).
--define(wxStyledTextCtrl_SetTargetStart, 3173).
--define(wxStyledTextCtrl_GetTargetStart, 3174).
--define(wxStyledTextCtrl_SetTargetEnd, 3175).
--define(wxStyledTextCtrl_GetTargetEnd, 3176).
--define(wxStyledTextCtrl_ReplaceTarget, 3177).
--define(wxStyledTextCtrl_SearchInTarget, 3178).
--define(wxStyledTextCtrl_SetSearchFlags, 3179).
--define(wxStyledTextCtrl_GetSearchFlags, 3180).
--define(wxStyledTextCtrl_CallTipShow, 3181).
--define(wxStyledTextCtrl_CallTipCancel, 3182).
--define(wxStyledTextCtrl_CallTipActive, 3183).
--define(wxStyledTextCtrl_CallTipPosAtStart, 3184).
--define(wxStyledTextCtrl_CallTipSetHighlight, 3185).
--define(wxStyledTextCtrl_CallTipSetBackground, 3186).
--define(wxStyledTextCtrl_CallTipSetForeground, 3187).
--define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3188).
--define(wxStyledTextCtrl_CallTipUseStyle, 3189).
--define(wxStyledTextCtrl_VisibleFromDocLine, 3190).
--define(wxStyledTextCtrl_DocLineFromVisible, 3191).
--define(wxStyledTextCtrl_WrapCount, 3192).
--define(wxStyledTextCtrl_SetFoldLevel, 3193).
--define(wxStyledTextCtrl_GetFoldLevel, 3194).
--define(wxStyledTextCtrl_GetLastChild, 3195).
--define(wxStyledTextCtrl_GetFoldParent, 3196).
--define(wxStyledTextCtrl_ShowLines, 3197).
--define(wxStyledTextCtrl_HideLines, 3198).
--define(wxStyledTextCtrl_GetLineVisible, 3199).
--define(wxStyledTextCtrl_SetFoldExpanded, 3200).
--define(wxStyledTextCtrl_GetFoldExpanded, 3201).
--define(wxStyledTextCtrl_ToggleFold, 3202).
--define(wxStyledTextCtrl_EnsureVisible, 3203).
--define(wxStyledTextCtrl_SetFoldFlags, 3204).
--define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3205).
--define(wxStyledTextCtrl_SetTabIndents, 3206).
--define(wxStyledTextCtrl_GetTabIndents, 3207).
--define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3208).
--define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3209).
--define(wxStyledTextCtrl_SetMouseDwellTime, 3210).
--define(wxStyledTextCtrl_GetMouseDwellTime, 3211).
--define(wxStyledTextCtrl_WordStartPosition, 3212).
--define(wxStyledTextCtrl_WordEndPosition, 3213).
--define(wxStyledTextCtrl_SetWrapMode, 3214).
--define(wxStyledTextCtrl_GetWrapMode, 3215).
--define(wxStyledTextCtrl_SetWrapVisualFlags, 3216).
--define(wxStyledTextCtrl_GetWrapVisualFlags, 3217).
--define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3218).
--define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3219).
--define(wxStyledTextCtrl_SetWrapStartIndent, 3220).
--define(wxStyledTextCtrl_GetWrapStartIndent, 3221).
--define(wxStyledTextCtrl_SetLayoutCache, 3222).
--define(wxStyledTextCtrl_GetLayoutCache, 3223).
--define(wxStyledTextCtrl_SetScrollWidth, 3224).
--define(wxStyledTextCtrl_GetScrollWidth, 3225).
--define(wxStyledTextCtrl_TextWidth, 3226).
--define(wxStyledTextCtrl_GetEndAtLastLine, 3227).
--define(wxStyledTextCtrl_TextHeight, 3228).
--define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3229).
--define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3230).
--define(wxStyledTextCtrl_AppendText, 3231).
--define(wxStyledTextCtrl_GetTwoPhaseDraw, 3232).
--define(wxStyledTextCtrl_SetTwoPhaseDraw, 3233).
--define(wxStyledTextCtrl_TargetFromSelection, 3234).
--define(wxStyledTextCtrl_LinesJoin, 3235).
--define(wxStyledTextCtrl_LinesSplit, 3236).
--define(wxStyledTextCtrl_SetFoldMarginColour, 3237).
--define(wxStyledTextCtrl_SetFoldMarginHiColour, 3238).
--define(wxStyledTextCtrl_LineDown, 3239).
--define(wxStyledTextCtrl_LineDownExtend, 3240).
--define(wxStyledTextCtrl_LineUp, 3241).
--define(wxStyledTextCtrl_LineUpExtend, 3242).
--define(wxStyledTextCtrl_CharLeft, 3243).
--define(wxStyledTextCtrl_CharLeftExtend, 3244).
--define(wxStyledTextCtrl_CharRight, 3245).
--define(wxStyledTextCtrl_CharRightExtend, 3246).
--define(wxStyledTextCtrl_WordLeft, 3247).
--define(wxStyledTextCtrl_WordLeftExtend, 3248).
--define(wxStyledTextCtrl_WordRight, 3249).
--define(wxStyledTextCtrl_WordRightExtend, 3250).
--define(wxStyledTextCtrl_Home, 3251).
--define(wxStyledTextCtrl_HomeExtend, 3252).
--define(wxStyledTextCtrl_LineEnd, 3253).
--define(wxStyledTextCtrl_LineEndExtend, 3254).
--define(wxStyledTextCtrl_DocumentStart, 3255).
--define(wxStyledTextCtrl_DocumentStartExtend, 3256).
--define(wxStyledTextCtrl_DocumentEnd, 3257).
--define(wxStyledTextCtrl_DocumentEndExtend, 3258).
--define(wxStyledTextCtrl_PageUp, 3259).
--define(wxStyledTextCtrl_PageUpExtend, 3260).
--define(wxStyledTextCtrl_PageDown, 3261).
--define(wxStyledTextCtrl_PageDownExtend, 3262).
--define(wxStyledTextCtrl_EditToggleOvertype, 3263).
--define(wxStyledTextCtrl_Cancel, 3264).
--define(wxStyledTextCtrl_DeleteBack, 3265).
--define(wxStyledTextCtrl_Tab, 3266).
--define(wxStyledTextCtrl_BackTab, 3267).
--define(wxStyledTextCtrl_NewLine, 3268).
--define(wxStyledTextCtrl_FormFeed, 3269).
--define(wxStyledTextCtrl_VCHome, 3270).
--define(wxStyledTextCtrl_VCHomeExtend, 3271).
--define(wxStyledTextCtrl_ZoomIn, 3272).
--define(wxStyledTextCtrl_ZoomOut, 3273).
--define(wxStyledTextCtrl_DelWordLeft, 3274).
--define(wxStyledTextCtrl_DelWordRight, 3275).
--define(wxStyledTextCtrl_LineCut, 3276).
--define(wxStyledTextCtrl_LineDelete, 3277).
--define(wxStyledTextCtrl_LineTranspose, 3278).
--define(wxStyledTextCtrl_LineDuplicate, 3279).
--define(wxStyledTextCtrl_LowerCase, 3280).
--define(wxStyledTextCtrl_UpperCase, 3281).
--define(wxStyledTextCtrl_LineScrollDown, 3282).
--define(wxStyledTextCtrl_LineScrollUp, 3283).
--define(wxStyledTextCtrl_DeleteBackNotLine, 3284).
--define(wxStyledTextCtrl_HomeDisplay, 3285).
--define(wxStyledTextCtrl_HomeDisplayExtend, 3286).
--define(wxStyledTextCtrl_LineEndDisplay, 3287).
--define(wxStyledTextCtrl_LineEndDisplayExtend, 3288).
--define(wxStyledTextCtrl_HomeWrapExtend, 3289).
--define(wxStyledTextCtrl_LineEndWrap, 3290).
--define(wxStyledTextCtrl_LineEndWrapExtend, 3291).
--define(wxStyledTextCtrl_VCHomeWrap, 3292).
--define(wxStyledTextCtrl_VCHomeWrapExtend, 3293).
--define(wxStyledTextCtrl_LineCopy, 3294).
--define(wxStyledTextCtrl_MoveCaretInsideView, 3295).
--define(wxStyledTextCtrl_LineLength, 3296).
--define(wxStyledTextCtrl_BraceHighlight, 3297).
--define(wxStyledTextCtrl_BraceBadLight, 3298).
--define(wxStyledTextCtrl_BraceMatch, 3299).
--define(wxStyledTextCtrl_GetViewEOL, 3300).
--define(wxStyledTextCtrl_SetViewEOL, 3301).
--define(wxStyledTextCtrl_SetModEventMask, 3302).
--define(wxStyledTextCtrl_GetEdgeColumn, 3303).
--define(wxStyledTextCtrl_SetEdgeColumn, 3304).
--define(wxStyledTextCtrl_SetEdgeMode, 3305).
--define(wxStyledTextCtrl_GetEdgeMode, 3306).
--define(wxStyledTextCtrl_GetEdgeColour, 3307).
--define(wxStyledTextCtrl_SetEdgeColour, 3308).
--define(wxStyledTextCtrl_SearchAnchor, 3309).
--define(wxStyledTextCtrl_SearchNext, 3310).
--define(wxStyledTextCtrl_SearchPrev, 3311).
--define(wxStyledTextCtrl_LinesOnScreen, 3312).
--define(wxStyledTextCtrl_UsePopUp, 3313).
--define(wxStyledTextCtrl_SelectionIsRectangle, 3314).
--define(wxStyledTextCtrl_SetZoom, 3315).
--define(wxStyledTextCtrl_GetZoom, 3316).
--define(wxStyledTextCtrl_GetModEventMask, 3317).
--define(wxStyledTextCtrl_SetSTCFocus, 3318).
--define(wxStyledTextCtrl_GetSTCFocus, 3319).
--define(wxStyledTextCtrl_SetStatus, 3320).
--define(wxStyledTextCtrl_GetStatus, 3321).
--define(wxStyledTextCtrl_SetMouseDownCaptures, 3322).
--define(wxStyledTextCtrl_GetMouseDownCaptures, 3323).
--define(wxStyledTextCtrl_SetSTCCursor, 3324).
--define(wxStyledTextCtrl_GetSTCCursor, 3325).
--define(wxStyledTextCtrl_SetControlCharSymbol, 3326).
--define(wxStyledTextCtrl_GetControlCharSymbol, 3327).
--define(wxStyledTextCtrl_WordPartLeft, 3328).
--define(wxStyledTextCtrl_WordPartLeftExtend, 3329).
--define(wxStyledTextCtrl_WordPartRight, 3330).
--define(wxStyledTextCtrl_WordPartRightExtend, 3331).
--define(wxStyledTextCtrl_SetVisiblePolicy, 3332).
--define(wxStyledTextCtrl_DelLineLeft, 3333).
--define(wxStyledTextCtrl_DelLineRight, 3334).
--define(wxStyledTextCtrl_GetXOffset, 3335).
--define(wxStyledTextCtrl_ChooseCaretX, 3336).
--define(wxStyledTextCtrl_SetXCaretPolicy, 3337).
--define(wxStyledTextCtrl_SetYCaretPolicy, 3338).
--define(wxStyledTextCtrl_GetPrintWrapMode, 3339).
--define(wxStyledTextCtrl_SetHotspotActiveForeground, 3340).
--define(wxStyledTextCtrl_SetHotspotActiveBackground, 3341).
--define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3342).
--define(wxStyledTextCtrl_SetHotspotSingleLine, 3343).
--define(wxStyledTextCtrl_ParaDownExtend, 3344).
--define(wxStyledTextCtrl_ParaUp, 3345).
--define(wxStyledTextCtrl_ParaUpExtend, 3346).
--define(wxStyledTextCtrl_PositionBefore, 3347).
--define(wxStyledTextCtrl_PositionAfter, 3348).
--define(wxStyledTextCtrl_CopyRange, 3349).
--define(wxStyledTextCtrl_CopyText, 3350).
--define(wxStyledTextCtrl_SetSelectionMode, 3351).
--define(wxStyledTextCtrl_GetSelectionMode, 3352).
--define(wxStyledTextCtrl_LineDownRectExtend, 3353).
--define(wxStyledTextCtrl_LineUpRectExtend, 3354).
--define(wxStyledTextCtrl_CharLeftRectExtend, 3355).
--define(wxStyledTextCtrl_CharRightRectExtend, 3356).
--define(wxStyledTextCtrl_HomeRectExtend, 3357).
--define(wxStyledTextCtrl_VCHomeRectExtend, 3358).
--define(wxStyledTextCtrl_LineEndRectExtend, 3359).
--define(wxStyledTextCtrl_PageUpRectExtend, 3360).
--define(wxStyledTextCtrl_PageDownRectExtend, 3361).
--define(wxStyledTextCtrl_StutteredPageUp, 3362).
--define(wxStyledTextCtrl_StutteredPageUpExtend, 3363).
--define(wxStyledTextCtrl_StutteredPageDown, 3364).
--define(wxStyledTextCtrl_StutteredPageDownExtend, 3365).
--define(wxStyledTextCtrl_WordLeftEnd, 3366).
--define(wxStyledTextCtrl_WordLeftEndExtend, 3367).
--define(wxStyledTextCtrl_WordRightEnd, 3368).
--define(wxStyledTextCtrl_WordRightEndExtend, 3369).
--define(wxStyledTextCtrl_SetWhitespaceChars, 3370).
--define(wxStyledTextCtrl_SetCharsDefault, 3371).
--define(wxStyledTextCtrl_AutoCompGetCurrent, 3372).
--define(wxStyledTextCtrl_Allocate, 3373).
--define(wxStyledTextCtrl_FindColumn, 3374).
--define(wxStyledTextCtrl_GetCaretSticky, 3375).
--define(wxStyledTextCtrl_SetCaretSticky, 3376).
--define(wxStyledTextCtrl_ToggleCaretSticky, 3377).
--define(wxStyledTextCtrl_SetPasteConvertEndings, 3378).
--define(wxStyledTextCtrl_GetPasteConvertEndings, 3379).
--define(wxStyledTextCtrl_SelectionDuplicate, 3380).
--define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3381).
--define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3382).
--define(wxStyledTextCtrl_StartRecord, 3383).
--define(wxStyledTextCtrl_StopRecord, 3384).
--define(wxStyledTextCtrl_SetLexer, 3385).
--define(wxStyledTextCtrl_GetLexer, 3386).
--define(wxStyledTextCtrl_Colourise, 3387).
--define(wxStyledTextCtrl_SetProperty, 3388).
--define(wxStyledTextCtrl_SetKeyWords, 3389).
--define(wxStyledTextCtrl_SetLexerLanguage, 3390).
--define(wxStyledTextCtrl_GetProperty, 3391).
--define(wxStyledTextCtrl_GetStyleBitsNeeded, 3392).
--define(wxStyledTextCtrl_GetCurrentLine, 3393).
--define(wxStyledTextCtrl_StyleSetSpec, 3394).
--define(wxStyledTextCtrl_StyleSetFont, 3395).
--define(wxStyledTextCtrl_StyleSetFontAttr, 3396).
--define(wxStyledTextCtrl_StyleSetCharacterSet, 3397).
--define(wxStyledTextCtrl_StyleSetFontEncoding, 3398).
--define(wxStyledTextCtrl_CmdKeyExecute, 3399).
--define(wxStyledTextCtrl_SetMargins, 3400).
--define(wxStyledTextCtrl_GetSelection, 3401).
--define(wxStyledTextCtrl_PointFromPosition, 3402).
--define(wxStyledTextCtrl_ScrollToLine, 3403).
--define(wxStyledTextCtrl_ScrollToColumn, 3404).
--define(wxStyledTextCtrl_SetVScrollBar, 3405).
--define(wxStyledTextCtrl_SetHScrollBar, 3406).
--define(wxStyledTextCtrl_GetLastKeydownProcessed, 3407).
--define(wxStyledTextCtrl_SetLastKeydownProcessed, 3408).
--define(wxStyledTextCtrl_SaveFile, 3409).
--define(wxStyledTextCtrl_LoadFile, 3410).
--define(wxStyledTextCtrl_DoDragOver, 3411).
--define(wxStyledTextCtrl_DoDropText, 3412).
--define(wxStyledTextCtrl_GetUseAntiAliasing, 3413).
--define(wxStyledTextCtrl_AddTextRaw, 3414).
--define(wxStyledTextCtrl_InsertTextRaw, 3415).
--define(wxStyledTextCtrl_GetCurLineRaw, 3416).
--define(wxStyledTextCtrl_GetLineRaw, 3417).
--define(wxStyledTextCtrl_GetSelectedTextRaw, 3418).
--define(wxStyledTextCtrl_GetTextRangeRaw, 3419).
--define(wxStyledTextCtrl_SetTextRaw, 3420).
--define(wxStyledTextCtrl_GetTextRaw, 3421).
--define(wxStyledTextCtrl_AppendTextRaw, 3422).
--define(wxArtProvider_GetBitmap, 3423).
--define(wxArtProvider_GetIcon, 3424).
--define(wxTreeEvent_GetKeyCode, 3425).
--define(wxTreeEvent_GetItem, 3426).
--define(wxTreeEvent_GetKeyEvent, 3427).
--define(wxTreeEvent_GetLabel, 3428).
--define(wxTreeEvent_GetOldItem, 3429).
--define(wxTreeEvent_GetPoint, 3430).
--define(wxTreeEvent_IsEditCancelled, 3431).
--define(wxTreeEvent_SetToolTip, 3432).
--define(wxNotebookEvent_GetOldSelection, 3433).
--define(wxNotebookEvent_GetSelection, 3434).
--define(wxNotebookEvent_SetOldSelection, 3435).
--define(wxNotebookEvent_SetSelection, 3436).
--define(wxFileDataObject_new, 3437).
--define(wxFileDataObject_AddFile, 3438).
--define(wxFileDataObject_GetFilenames, 3439).
--define(wxFileDataObject_destroy, 3440).
--define(wxTextDataObject_new, 3441).
--define(wxTextDataObject_GetTextLength, 3442).
--define(wxTextDataObject_GetText, 3443).
--define(wxTextDataObject_SetText, 3444).
--define(wxTextDataObject_destroy, 3445).
--define(wxBitmapDataObject_new_1_1, 3446).
--define(wxBitmapDataObject_new_1_0, 3447).
--define(wxBitmapDataObject_GetBitmap, 3448).
--define(wxBitmapDataObject_SetBitmap, 3449).
--define(wxBitmapDataObject_destroy, 3450).
--define(wxClipboard_new, 3452).
--define(wxClipboard_destruct, 3453).
--define(wxClipboard_AddData, 3454).
--define(wxClipboard_Clear, 3455).
--define(wxClipboard_Close, 3456).
--define(wxClipboard_Flush, 3457).
--define(wxClipboard_GetData, 3458).
--define(wxClipboard_IsOpened, 3459).
--define(wxClipboard_Open, 3460).
--define(wxClipboard_SetData, 3461).
--define(wxClipboard_UsePrimarySelection, 3463).
--define(wxClipboard_IsSupported, 3464).
--define(wxClipboard_Get, 3465).
--define(wxSpinEvent_GetPosition, 3466).
--define(wxSpinEvent_SetPosition, 3467).
--define(wxSplitterWindow_new_0, 3468).
--define(wxSplitterWindow_new_2, 3469).
--define(wxSplitterWindow_destruct, 3470).
--define(wxSplitterWindow_Create, 3471).
--define(wxSplitterWindow_GetMinimumPaneSize, 3472).
--define(wxSplitterWindow_GetSashGravity, 3473).
--define(wxSplitterWindow_GetSashPosition, 3474).
--define(wxSplitterWindow_GetSplitMode, 3475).
--define(wxSplitterWindow_GetWindow1, 3476).
--define(wxSplitterWindow_GetWindow2, 3477).
--define(wxSplitterWindow_Initialize, 3478).
--define(wxSplitterWindow_IsSplit, 3479).
--define(wxSplitterWindow_ReplaceWindow, 3480).
--define(wxSplitterWindow_SetSashGravity, 3481).
--define(wxSplitterWindow_SetSashPosition, 3482).
--define(wxSplitterWindow_SetSashSize, 3483).
--define(wxSplitterWindow_SetMinimumPaneSize, 3484).
--define(wxSplitterWindow_SetSplitMode, 3485).
--define(wxSplitterWindow_SplitHorizontally, 3486).
--define(wxSplitterWindow_SplitVertically, 3487).
--define(wxSplitterWindow_Unsplit, 3488).
--define(wxSplitterWindow_UpdateSize, 3489).
--define(wxSplitterEvent_GetSashPosition, 3490).
--define(wxSplitterEvent_GetX, 3491).
--define(wxSplitterEvent_GetY, 3492).
--define(wxSplitterEvent_GetWindowBeingRemoved, 3493).
--define(wxSplitterEvent_SetSashPosition, 3494).
--define(wxHtmlWindow_new_0, 3495).
--define(wxHtmlWindow_new_2, 3496).
--define(wxHtmlWindow_AppendToPage, 3497).
--define(wxHtmlWindow_GetOpenedAnchor, 3498).
--define(wxHtmlWindow_GetOpenedPage, 3499).
--define(wxHtmlWindow_GetOpenedPageTitle, 3500).
--define(wxHtmlWindow_GetRelatedFrame, 3501).
--define(wxHtmlWindow_HistoryBack, 3502).
--define(wxHtmlWindow_HistoryCanBack, 3503).
--define(wxHtmlWindow_HistoryCanForward, 3504).
--define(wxHtmlWindow_HistoryClear, 3505).
--define(wxHtmlWindow_HistoryForward, 3506).
--define(wxHtmlWindow_LoadFile, 3507).
--define(wxHtmlWindow_LoadPage, 3508).
--define(wxHtmlWindow_SelectAll, 3509).
--define(wxHtmlWindow_SelectionToText, 3510).
--define(wxHtmlWindow_SelectLine, 3511).
--define(wxHtmlWindow_SelectWord, 3512).
--define(wxHtmlWindow_SetBorders, 3513).
--define(wxHtmlWindow_SetFonts, 3514).
--define(wxHtmlWindow_SetPage, 3515).
--define(wxHtmlWindow_SetRelatedFrame, 3516).
--define(wxHtmlWindow_SetRelatedStatusBar, 3517).
--define(wxHtmlWindow_ToText, 3518).
--define(wxHtmlWindow_destroy, 3519).
--define(wxHtmlLinkEvent_GetLinkInfo, 3520).
--define(wxSystemSettings_GetColour, 3521).
--define(wxSystemSettings_GetFont, 3522).
--define(wxSystemSettings_GetMetric, 3523).
--define(wxSystemSettings_GetScreenType, 3524).
--define(wxSystemOptions_GetOption, 3525).
--define(wxSystemOptions_GetOptionInt, 3526).
--define(wxSystemOptions_HasOption, 3527).
--define(wxSystemOptions_IsFalse, 3528).
--define(wxSystemOptions_SetOption_2_1, 3529).
--define(wxSystemOptions_SetOption_2_0, 3530).
--define(wxAuiNotebookEvent_SetSelection, 3531).
--define(wxAuiNotebookEvent_GetSelection, 3532).
--define(wxAuiNotebookEvent_SetOldSelection, 3533).
--define(wxAuiNotebookEvent_GetOldSelection, 3534).
--define(wxAuiNotebookEvent_SetDragSource, 3535).
--define(wxAuiNotebookEvent_GetDragSource, 3536).
--define(wxAuiManagerEvent_SetManager, 3537).
--define(wxAuiManagerEvent_GetManager, 3538).
--define(wxAuiManagerEvent_SetPane, 3539).
--define(wxAuiManagerEvent_GetPane, 3540).
--define(wxAuiManagerEvent_SetButton, 3541).
--define(wxAuiManagerEvent_GetButton, 3542).
--define(wxAuiManagerEvent_SetDC, 3543).
--define(wxAuiManagerEvent_GetDC, 3544).
--define(wxAuiManagerEvent_Veto, 3545).
--define(wxAuiManagerEvent_GetVeto, 3546).
--define(wxAuiManagerEvent_SetCanVeto, 3547).
--define(wxAuiManagerEvent_CanVeto, 3548).
--define(wxLogNull_new, 3549).
--define(wxLogNull_destroy, 3550).
--define(wxTaskBarIcon_new, 3551).
--define(wxTaskBarIcon_destruct, 3552).
--define(wxTaskBarIcon_PopupMenu, 3553).
--define(wxTaskBarIcon_RemoveIcon, 3554).
--define(wxTaskBarIcon_SetIcon, 3555).
--define(wxLocale_new_0, 3556).
--define(wxLocale_new_2, 3558).
--define(wxLocale_destruct, 3559).
--define(wxLocale_Init, 3561).
--define(wxLocale_AddCatalog_1, 3562).
--define(wxLocale_AddCatalog_3, 3563).
--define(wxLocale_AddCatalogLookupPathPrefix, 3564).
--define(wxLocale_GetCanonicalName, 3565).
--define(wxLocale_GetLanguage, 3566).
--define(wxLocale_GetLanguageName, 3567).
--define(wxLocale_GetLocale, 3568).
--define(wxLocale_GetName, 3569).
--define(wxLocale_GetString_2, 3570).
--define(wxLocale_GetString_4, 3571).
--define(wxLocale_GetHeaderValue, 3572).
--define(wxLocale_GetSysName, 3573).
--define(wxLocale_GetSystemEncoding, 3574).
--define(wxLocale_GetSystemEncodingName, 3575).
--define(wxLocale_GetSystemLanguage, 3576).
--define(wxLocale_IsLoaded, 3577).
--define(wxLocale_IsOk, 3578).
--define(wxActivateEvent_GetActive, 3579).
--define(wxPopupWindow_new_2, 3581).
--define(wxPopupWindow_new_0, 3582).
--define(wxPopupWindow_destruct, 3584).
--define(wxPopupWindow_Create, 3585).
--define(wxPopupWindow_Position, 3586).
--define(wxPopupTransientWindow_new_0, 3587).
--define(wxPopupTransientWindow_new_2, 3588).
--define(wxPopupTransientWindow_destruct, 3589).
--define(wxPopupTransientWindow_Popup, 3590).
--define(wxPopupTransientWindow_Dismiss, 3591).
--define(wxOverlay_new, 3592).
--define(wxOverlay_destruct, 3593).
--define(wxOverlay_Reset, 3594).
--define(wxDCOverlay_new_6, 3595).
--define(wxDCOverlay_new_2, 3596).
--define(wxDCOverlay_destruct, 3597).
--define(wxDCOverlay_Clear, 3598).
+-define(wxGauge_GetRange, 1605).
+-define(wxGauge_GetValue, 1606).
+-define(wxGauge_IsVertical, 1607).
+-define(wxGauge_SetRange, 1608).
+-define(wxGauge_SetValue, 1609).
+-define(wxGauge_Pulse, 1610).
+-define(wxGauge_destroy, 1611).
+-define(wxGenericDirCtrl_new_0, 1612).
+-define(wxGenericDirCtrl_new_2, 1613).
+-define(wxGenericDirCtrl_destruct, 1614).
+-define(wxGenericDirCtrl_Create, 1615).
+-define(wxGenericDirCtrl_Init, 1616).
+-define(wxGenericDirCtrl_CollapseTree, 1617).
+-define(wxGenericDirCtrl_ExpandPath, 1618).
+-define(wxGenericDirCtrl_GetDefaultPath, 1619).
+-define(wxGenericDirCtrl_GetPath, 1620).
+-define(wxGenericDirCtrl_GetFilePath, 1621).
+-define(wxGenericDirCtrl_GetFilter, 1622).
+-define(wxGenericDirCtrl_GetFilterIndex, 1623).
+-define(wxGenericDirCtrl_GetRootId, 1624).
+-define(wxGenericDirCtrl_GetTreeCtrl, 1625).
+-define(wxGenericDirCtrl_ReCreateTree, 1626).
+-define(wxGenericDirCtrl_SetDefaultPath, 1627).
+-define(wxGenericDirCtrl_SetFilter, 1628).
+-define(wxGenericDirCtrl_SetFilterIndex, 1629).
+-define(wxGenericDirCtrl_SetPath, 1630).
+-define(wxStaticBox_new_4, 1632).
+-define(wxStaticBox_new_0, 1633).
+-define(wxStaticBox_Create, 1634).
+-define(wxStaticBox_destroy, 1635).
+-define(wxStaticLine_new_2, 1637).
+-define(wxStaticLine_new_0, 1638).
+-define(wxStaticLine_Create, 1639).
+-define(wxStaticLine_IsVertical, 1640).
+-define(wxStaticLine_GetDefaultSize, 1641).
+-define(wxStaticLine_destroy, 1642).
+-define(wxListBox_new_3, 1645).
+-define(wxListBox_new_0, 1646).
+-define(wxListBox_destruct, 1648).
+-define(wxListBox_Create, 1650).
+-define(wxListBox_Deselect, 1651).
+-define(wxListBox_GetSelections, 1652).
+-define(wxListBox_InsertItems, 1653).
+-define(wxListBox_IsSelected, 1654).
+-define(wxListBox_Set, 1655).
+-define(wxListBox_HitTest, 1656).
+-define(wxListBox_SetFirstItem_1_0, 1657).
+-define(wxListBox_SetFirstItem_1_1, 1658).
+-define(wxListCtrl_new_0, 1659).
+-define(wxListCtrl_new_2, 1660).
+-define(wxListCtrl_Arrange, 1661).
+-define(wxListCtrl_AssignImageList, 1662).
+-define(wxListCtrl_ClearAll, 1663).
+-define(wxListCtrl_Create, 1664).
+-define(wxListCtrl_DeleteAllItems, 1665).
+-define(wxListCtrl_DeleteColumn, 1666).
+-define(wxListCtrl_DeleteItem, 1667).
+-define(wxListCtrl_EditLabel, 1668).
+-define(wxListCtrl_EnsureVisible, 1669).
+-define(wxListCtrl_FindItem_3_0, 1670).
+-define(wxListCtrl_FindItem_3_1, 1671).
+-define(wxListCtrl_GetColumn, 1672).
+-define(wxListCtrl_GetColumnCount, 1673).
+-define(wxListCtrl_GetColumnWidth, 1674).
+-define(wxListCtrl_GetCountPerPage, 1675).
+-define(wxListCtrl_GetEditControl, 1676).
+-define(wxListCtrl_GetImageList, 1677).
+-define(wxListCtrl_GetItem, 1678).
+-define(wxListCtrl_GetItemBackgroundColour, 1679).
+-define(wxListCtrl_GetItemCount, 1680).
+-define(wxListCtrl_GetItemData, 1681).
+-define(wxListCtrl_GetItemFont, 1682).
+-define(wxListCtrl_GetItemPosition, 1683).
+-define(wxListCtrl_GetItemRect, 1684).
+-define(wxListCtrl_GetItemSpacing, 1685).
+-define(wxListCtrl_GetItemState, 1686).
+-define(wxListCtrl_GetItemText, 1687).
+-define(wxListCtrl_GetItemTextColour, 1688).
+-define(wxListCtrl_GetNextItem, 1689).
+-define(wxListCtrl_GetSelectedItemCount, 1690).
+-define(wxListCtrl_GetTextColour, 1691).
+-define(wxListCtrl_GetTopItem, 1692).
+-define(wxListCtrl_GetViewRect, 1693).
+-define(wxListCtrl_HitTest, 1694).
+-define(wxListCtrl_InsertColumn_2, 1695).
+-define(wxListCtrl_InsertColumn_3, 1696).
+-define(wxListCtrl_InsertItem_1, 1697).
+-define(wxListCtrl_InsertItem_2_1, 1698).
+-define(wxListCtrl_InsertItem_2_0, 1699).
+-define(wxListCtrl_InsertItem_3, 1700).
+-define(wxListCtrl_RefreshItem, 1701).
+-define(wxListCtrl_RefreshItems, 1702).
+-define(wxListCtrl_ScrollList, 1703).
+-define(wxListCtrl_SetBackgroundColour, 1704).
+-define(wxListCtrl_SetColumn, 1705).
+-define(wxListCtrl_SetColumnWidth, 1706).
+-define(wxListCtrl_SetImageList, 1707).
+-define(wxListCtrl_SetItem_1, 1708).
+-define(wxListCtrl_SetItem_4, 1709).
+-define(wxListCtrl_SetItemBackgroundColour, 1710).
+-define(wxListCtrl_SetItemCount, 1711).
+-define(wxListCtrl_SetItemData, 1712).
+-define(wxListCtrl_SetItemFont, 1713).
+-define(wxListCtrl_SetItemImage, 1714).
+-define(wxListCtrl_SetItemColumnImage, 1715).
+-define(wxListCtrl_SetItemPosition, 1716).
+-define(wxListCtrl_SetItemState, 1717).
+-define(wxListCtrl_SetItemText, 1718).
+-define(wxListCtrl_SetItemTextColour, 1719).
+-define(wxListCtrl_SetSingleStyle, 1720).
+-define(wxListCtrl_SetTextColour, 1721).
+-define(wxListCtrl_SetWindowStyleFlag, 1722).
+-define(wxListCtrl_SortItems, 1723).
+-define(wxListCtrl_destroy, 1724).
+-define(wxListView_ClearColumnImage, 1725).
+-define(wxListView_Focus, 1726).
+-define(wxListView_GetFirstSelected, 1727).
+-define(wxListView_GetFocusedItem, 1728).
+-define(wxListView_GetNextSelected, 1729).
+-define(wxListView_IsSelected, 1730).
+-define(wxListView_Select, 1731).
+-define(wxListView_SetColumnImage, 1732).
+-define(wxListItem_new_0, 1733).
+-define(wxListItem_new_1, 1734).
+-define(wxListItem_destruct, 1735).
+-define(wxListItem_Clear, 1736).
+-define(wxListItem_GetAlign, 1737).
+-define(wxListItem_GetBackgroundColour, 1738).
+-define(wxListItem_GetColumn, 1739).
+-define(wxListItem_GetFont, 1740).
+-define(wxListItem_GetId, 1741).
+-define(wxListItem_GetImage, 1742).
+-define(wxListItem_GetMask, 1743).
+-define(wxListItem_GetState, 1744).
+-define(wxListItem_GetText, 1745).
+-define(wxListItem_GetTextColour, 1746).
+-define(wxListItem_GetWidth, 1747).
+-define(wxListItem_SetAlign, 1748).
+-define(wxListItem_SetBackgroundColour, 1749).
+-define(wxListItem_SetColumn, 1750).
+-define(wxListItem_SetFont, 1751).
+-define(wxListItem_SetId, 1752).
+-define(wxListItem_SetImage, 1753).
+-define(wxListItem_SetMask, 1754).
+-define(wxListItem_SetState, 1755).
+-define(wxListItem_SetStateMask, 1756).
+-define(wxListItem_SetText, 1757).
+-define(wxListItem_SetTextColour, 1758).
+-define(wxListItem_SetWidth, 1759).
+-define(wxListItemAttr_new_0, 1760).
+-define(wxListItemAttr_new_3, 1761).
+-define(wxListItemAttr_GetBackgroundColour, 1762).
+-define(wxListItemAttr_GetFont, 1763).
+-define(wxListItemAttr_GetTextColour, 1764).
+-define(wxListItemAttr_HasBackgroundColour, 1765).
+-define(wxListItemAttr_HasFont, 1766).
+-define(wxListItemAttr_HasTextColour, 1767).
+-define(wxListItemAttr_SetBackgroundColour, 1768).
+-define(wxListItemAttr_SetFont, 1769).
+-define(wxListItemAttr_SetTextColour, 1770).
+-define(wxListItemAttr_destroy, 1771).
+-define(wxImageList_new_0, 1772).
+-define(wxImageList_new_3, 1773).
+-define(wxImageList_Add_1, 1774).
+-define(wxImageList_Add_2_0, 1775).
+-define(wxImageList_Add_2_1, 1776).
+-define(wxImageList_Create, 1777).
+-define(wxImageList_Draw, 1779).
+-define(wxImageList_GetBitmap, 1780).
+-define(wxImageList_GetIcon, 1781).
+-define(wxImageList_GetImageCount, 1782).
+-define(wxImageList_GetSize, 1783).
+-define(wxImageList_Remove, 1784).
+-define(wxImageList_RemoveAll, 1785).
+-define(wxImageList_Replace_2, 1786).
+-define(wxImageList_Replace_3, 1787).
+-define(wxImageList_destroy, 1788).
+-define(wxTextAttr_new_0, 1789).
+-define(wxTextAttr_new_2, 1790).
+-define(wxTextAttr_GetAlignment, 1791).
+-define(wxTextAttr_GetBackgroundColour, 1792).
+-define(wxTextAttr_GetFont, 1793).
+-define(wxTextAttr_GetLeftIndent, 1794).
+-define(wxTextAttr_GetLeftSubIndent, 1795).
+-define(wxTextAttr_GetRightIndent, 1796).
+-define(wxTextAttr_GetTabs, 1797).
+-define(wxTextAttr_GetTextColour, 1798).
+-define(wxTextAttr_HasBackgroundColour, 1799).
+-define(wxTextAttr_HasFont, 1800).
+-define(wxTextAttr_HasTextColour, 1801).
+-define(wxTextAttr_GetFlags, 1802).
+-define(wxTextAttr_IsDefault, 1803).
+-define(wxTextAttr_SetAlignment, 1804).
+-define(wxTextAttr_SetBackgroundColour, 1805).
+-define(wxTextAttr_SetFlags, 1806).
+-define(wxTextAttr_SetFont, 1807).
+-define(wxTextAttr_SetLeftIndent, 1808).
+-define(wxTextAttr_SetRightIndent, 1809).
+-define(wxTextAttr_SetTabs, 1810).
+-define(wxTextAttr_SetTextColour, 1811).
+-define(wxTextAttr_destroy, 1812).
+-define(wxTextCtrl_new_3, 1814).
+-define(wxTextCtrl_new_0, 1815).
+-define(wxTextCtrl_destruct, 1817).
+-define(wxTextCtrl_AppendText, 1818).
+-define(wxTextCtrl_CanCopy, 1819).
+-define(wxTextCtrl_CanCut, 1820).
+-define(wxTextCtrl_CanPaste, 1821).
+-define(wxTextCtrl_CanRedo, 1822).
+-define(wxTextCtrl_CanUndo, 1823).
+-define(wxTextCtrl_Clear, 1824).
+-define(wxTextCtrl_Copy, 1825).
+-define(wxTextCtrl_Create, 1826).
+-define(wxTextCtrl_Cut, 1827).
+-define(wxTextCtrl_DiscardEdits, 1828).
+-define(wxTextCtrl_ChangeValue, 1829).
+-define(wxTextCtrl_EmulateKeyPress, 1830).
+-define(wxTextCtrl_GetDefaultStyle, 1831).
+-define(wxTextCtrl_GetInsertionPoint, 1832).
+-define(wxTextCtrl_GetLastPosition, 1833).
+-define(wxTextCtrl_GetLineLength, 1834).
+-define(wxTextCtrl_GetLineText, 1835).
+-define(wxTextCtrl_GetNumberOfLines, 1836).
+-define(wxTextCtrl_GetRange, 1837).
+-define(wxTextCtrl_GetSelection, 1838).
+-define(wxTextCtrl_GetStringSelection, 1839).
+-define(wxTextCtrl_GetStyle, 1840).
+-define(wxTextCtrl_GetValue, 1841).
+-define(wxTextCtrl_IsEditable, 1842).
+-define(wxTextCtrl_IsModified, 1843).
+-define(wxTextCtrl_IsMultiLine, 1844).
+-define(wxTextCtrl_IsSingleLine, 1845).
+-define(wxTextCtrl_LoadFile, 1846).
+-define(wxTextCtrl_MarkDirty, 1847).
+-define(wxTextCtrl_Paste, 1848).
+-define(wxTextCtrl_PositionToXY, 1849).
+-define(wxTextCtrl_Redo, 1850).
+-define(wxTextCtrl_Remove, 1851).
+-define(wxTextCtrl_Replace, 1852).
+-define(wxTextCtrl_SaveFile, 1853).
+-define(wxTextCtrl_SetDefaultStyle, 1854).
+-define(wxTextCtrl_SetEditable, 1855).
+-define(wxTextCtrl_SetInsertionPoint, 1856).
+-define(wxTextCtrl_SetInsertionPointEnd, 1857).
+-define(wxTextCtrl_SetMaxLength, 1859).
+-define(wxTextCtrl_SetSelection, 1860).
+-define(wxTextCtrl_SetStyle, 1861).
+-define(wxTextCtrl_SetValue, 1862).
+-define(wxTextCtrl_ShowPosition, 1863).
+-define(wxTextCtrl_Undo, 1864).
+-define(wxTextCtrl_WriteText, 1865).
+-define(wxTextCtrl_XYToPosition, 1866).
+-define(wxNotebook_new_0, 1869).
+-define(wxNotebook_new_3, 1870).
+-define(wxNotebook_destruct, 1871).
+-define(wxNotebook_AddPage, 1872).
+-define(wxNotebook_AdvanceSelection, 1873).
+-define(wxNotebook_AssignImageList, 1874).
+-define(wxNotebook_Create, 1875).
+-define(wxNotebook_DeleteAllPages, 1876).
+-define(wxNotebook_DeletePage, 1877).
+-define(wxNotebook_RemovePage, 1878).
+-define(wxNotebook_GetCurrentPage, 1879).
+-define(wxNotebook_GetImageList, 1880).
+-define(wxNotebook_GetPage, 1882).
+-define(wxNotebook_GetPageCount, 1883).
+-define(wxNotebook_GetPageImage, 1884).
+-define(wxNotebook_GetPageText, 1885).
+-define(wxNotebook_GetRowCount, 1886).
+-define(wxNotebook_GetSelection, 1887).
+-define(wxNotebook_GetThemeBackgroundColour, 1888).
+-define(wxNotebook_HitTest, 1890).
+-define(wxNotebook_InsertPage, 1892).
+-define(wxNotebook_SetImageList, 1893).
+-define(wxNotebook_SetPadding, 1894).
+-define(wxNotebook_SetPageSize, 1895).
+-define(wxNotebook_SetPageImage, 1896).
+-define(wxNotebook_SetPageText, 1897).
+-define(wxNotebook_SetSelection, 1898).
+-define(wxNotebook_ChangeSelection, 1899).
+-define(wxChoicebook_new_0, 1900).
+-define(wxChoicebook_new_3, 1901).
+-define(wxChoicebook_AddPage, 1902).
+-define(wxChoicebook_AdvanceSelection, 1903).
+-define(wxChoicebook_AssignImageList, 1904).
+-define(wxChoicebook_Create, 1905).
+-define(wxChoicebook_DeleteAllPages, 1906).
+-define(wxChoicebook_DeletePage, 1907).
+-define(wxChoicebook_RemovePage, 1908).
+-define(wxChoicebook_GetCurrentPage, 1909).
+-define(wxChoicebook_GetImageList, 1910).
+-define(wxChoicebook_GetPage, 1912).
+-define(wxChoicebook_GetPageCount, 1913).
+-define(wxChoicebook_GetPageImage, 1914).
+-define(wxChoicebook_GetPageText, 1915).
+-define(wxChoicebook_GetSelection, 1916).
+-define(wxChoicebook_HitTest, 1917).
+-define(wxChoicebook_InsertPage, 1918).
+-define(wxChoicebook_SetImageList, 1919).
+-define(wxChoicebook_SetPageSize, 1920).
+-define(wxChoicebook_SetPageImage, 1921).
+-define(wxChoicebook_SetPageText, 1922).
+-define(wxChoicebook_SetSelection, 1923).
+-define(wxChoicebook_ChangeSelection, 1924).
+-define(wxChoicebook_destroy, 1925).
+-define(wxToolbook_new_0, 1926).
+-define(wxToolbook_new_3, 1927).
+-define(wxToolbook_AddPage, 1928).
+-define(wxToolbook_AdvanceSelection, 1929).
+-define(wxToolbook_AssignImageList, 1930).
+-define(wxToolbook_Create, 1931).
+-define(wxToolbook_DeleteAllPages, 1932).
+-define(wxToolbook_DeletePage, 1933).
+-define(wxToolbook_RemovePage, 1934).
+-define(wxToolbook_GetCurrentPage, 1935).
+-define(wxToolbook_GetImageList, 1936).
+-define(wxToolbook_GetPage, 1938).
+-define(wxToolbook_GetPageCount, 1939).
+-define(wxToolbook_GetPageImage, 1940).
+-define(wxToolbook_GetPageText, 1941).
+-define(wxToolbook_GetSelection, 1942).
+-define(wxToolbook_HitTest, 1944).
+-define(wxToolbook_InsertPage, 1945).
+-define(wxToolbook_SetImageList, 1946).
+-define(wxToolbook_SetPageSize, 1947).
+-define(wxToolbook_SetPageImage, 1948).
+-define(wxToolbook_SetPageText, 1949).
+-define(wxToolbook_SetSelection, 1950).
+-define(wxToolbook_ChangeSelection, 1951).
+-define(wxToolbook_destroy, 1952).
+-define(wxListbook_new_0, 1953).
+-define(wxListbook_new_3, 1954).
+-define(wxListbook_AddPage, 1955).
+-define(wxListbook_AdvanceSelection, 1956).
+-define(wxListbook_AssignImageList, 1957).
+-define(wxListbook_Create, 1958).
+-define(wxListbook_DeleteAllPages, 1959).
+-define(wxListbook_DeletePage, 1960).
+-define(wxListbook_RemovePage, 1961).
+-define(wxListbook_GetCurrentPage, 1962).
+-define(wxListbook_GetImageList, 1963).
+-define(wxListbook_GetPage, 1965).
+-define(wxListbook_GetPageCount, 1966).
+-define(wxListbook_GetPageImage, 1967).
+-define(wxListbook_GetPageText, 1968).
+-define(wxListbook_GetSelection, 1969).
+-define(wxListbook_HitTest, 1971).
+-define(wxListbook_InsertPage, 1972).
+-define(wxListbook_SetImageList, 1973).
+-define(wxListbook_SetPageSize, 1974).
+-define(wxListbook_SetPageImage, 1975).
+-define(wxListbook_SetPageText, 1976).
+-define(wxListbook_SetSelection, 1977).
+-define(wxListbook_ChangeSelection, 1978).
+-define(wxListbook_destroy, 1979).
+-define(wxTreebook_new_0, 1980).
+-define(wxTreebook_new_3, 1981).
+-define(wxTreebook_AddPage, 1982).
+-define(wxTreebook_AdvanceSelection, 1983).
+-define(wxTreebook_AssignImageList, 1984).
+-define(wxTreebook_Create, 1985).
+-define(wxTreebook_DeleteAllPages, 1986).
+-define(wxTreebook_DeletePage, 1987).
+-define(wxTreebook_RemovePage, 1988).
+-define(wxTreebook_GetCurrentPage, 1989).
+-define(wxTreebook_GetImageList, 1990).
+-define(wxTreebook_GetPage, 1992).
+-define(wxTreebook_GetPageCount, 1993).
+-define(wxTreebook_GetPageImage, 1994).
+-define(wxTreebook_GetPageText, 1995).
+-define(wxTreebook_GetSelection, 1996).
+-define(wxTreebook_ExpandNode, 1997).
+-define(wxTreebook_IsNodeExpanded, 1998).
+-define(wxTreebook_HitTest, 2000).
+-define(wxTreebook_InsertPage, 2001).
+-define(wxTreebook_InsertSubPage, 2002).
+-define(wxTreebook_SetImageList, 2003).
+-define(wxTreebook_SetPageSize, 2004).
+-define(wxTreebook_SetPageImage, 2005).
+-define(wxTreebook_SetPageText, 2006).
+-define(wxTreebook_SetSelection, 2007).
+-define(wxTreebook_ChangeSelection, 2008).
+-define(wxTreebook_destroy, 2009).
+-define(wxTreeCtrl_new_2, 2012).
+-define(wxTreeCtrl_new_0, 2013).
+-define(wxTreeCtrl_destruct, 2015).
+-define(wxTreeCtrl_AddRoot, 2016).
+-define(wxTreeCtrl_AppendItem, 2017).
+-define(wxTreeCtrl_AssignImageList, 2018).
+-define(wxTreeCtrl_AssignStateImageList, 2019).
+-define(wxTreeCtrl_Collapse, 2020).
+-define(wxTreeCtrl_CollapseAndReset, 2021).
+-define(wxTreeCtrl_Create, 2022).
+-define(wxTreeCtrl_Delete, 2023).
+-define(wxTreeCtrl_DeleteAllItems, 2024).
+-define(wxTreeCtrl_DeleteChildren, 2025).
+-define(wxTreeCtrl_EditLabel, 2026).
+-define(wxTreeCtrl_EnsureVisible, 2027).
+-define(wxTreeCtrl_Expand, 2028).
+-define(wxTreeCtrl_GetBoundingRect, 2029).
+-define(wxTreeCtrl_GetChildrenCount, 2031).
+-define(wxTreeCtrl_GetCount, 2032).
+-define(wxTreeCtrl_GetEditControl, 2033).
+-define(wxTreeCtrl_GetFirstChild, 2034).
+-define(wxTreeCtrl_GetNextChild, 2035).
+-define(wxTreeCtrl_GetFirstVisibleItem, 2036).
+-define(wxTreeCtrl_GetImageList, 2037).
+-define(wxTreeCtrl_GetIndent, 2038).
+-define(wxTreeCtrl_GetItemBackgroundColour, 2039).
+-define(wxTreeCtrl_GetItemData, 2040).
+-define(wxTreeCtrl_GetItemFont, 2041).
+-define(wxTreeCtrl_GetItemImage_1, 2042).
+-define(wxTreeCtrl_GetItemImage_2, 2043).
+-define(wxTreeCtrl_GetItemText, 2044).
+-define(wxTreeCtrl_GetItemTextColour, 2045).
+-define(wxTreeCtrl_GetLastChild, 2046).
+-define(wxTreeCtrl_GetNextSibling, 2047).
+-define(wxTreeCtrl_GetNextVisible, 2048).
+-define(wxTreeCtrl_GetItemParent, 2049).
+-define(wxTreeCtrl_GetPrevSibling, 2050).
+-define(wxTreeCtrl_GetPrevVisible, 2051).
+-define(wxTreeCtrl_GetRootItem, 2052).
+-define(wxTreeCtrl_GetSelection, 2053).
+-define(wxTreeCtrl_GetSelections, 2054).
+-define(wxTreeCtrl_GetStateImageList, 2055).
+-define(wxTreeCtrl_HitTest, 2056).
+-define(wxTreeCtrl_InsertItem, 2058).
+-define(wxTreeCtrl_IsBold, 2059).
+-define(wxTreeCtrl_IsExpanded, 2060).
+-define(wxTreeCtrl_IsSelected, 2061).
+-define(wxTreeCtrl_IsVisible, 2062).
+-define(wxTreeCtrl_ItemHasChildren, 2063).
+-define(wxTreeCtrl_IsTreeItemIdOk, 2064).
+-define(wxTreeCtrl_PrependItem, 2065).
+-define(wxTreeCtrl_ScrollTo, 2066).
+-define(wxTreeCtrl_SelectItem_1, 2067).
+-define(wxTreeCtrl_SelectItem_2, 2068).
+-define(wxTreeCtrl_SetIndent, 2069).
+-define(wxTreeCtrl_SetImageList, 2070).
+-define(wxTreeCtrl_SetItemBackgroundColour, 2071).
+-define(wxTreeCtrl_SetItemBold, 2072).
+-define(wxTreeCtrl_SetItemData, 2073).
+-define(wxTreeCtrl_SetItemDropHighlight, 2074).
+-define(wxTreeCtrl_SetItemFont, 2075).
+-define(wxTreeCtrl_SetItemHasChildren, 2076).
+-define(wxTreeCtrl_SetItemImage_2, 2077).
+-define(wxTreeCtrl_SetItemImage_3, 2078).
+-define(wxTreeCtrl_SetItemText, 2079).
+-define(wxTreeCtrl_SetItemTextColour, 2080).
+-define(wxTreeCtrl_SetStateImageList, 2081).
+-define(wxTreeCtrl_SetWindowStyle, 2082).
+-define(wxTreeCtrl_SortChildren, 2083).
+-define(wxTreeCtrl_Toggle, 2084).
+-define(wxTreeCtrl_ToggleItemSelection, 2085).
+-define(wxTreeCtrl_Unselect, 2086).
+-define(wxTreeCtrl_UnselectAll, 2087).
+-define(wxTreeCtrl_UnselectItem, 2088).
+-define(wxScrollBar_new_0, 2089).
+-define(wxScrollBar_new_3, 2090).
+-define(wxScrollBar_destruct, 2091).
+-define(wxScrollBar_Create, 2092).
+-define(wxScrollBar_GetRange, 2093).
+-define(wxScrollBar_GetPageSize, 2094).
+-define(wxScrollBar_GetThumbPosition, 2095).
+-define(wxScrollBar_GetThumbSize, 2096).
+-define(wxScrollBar_SetThumbPosition, 2097).
+-define(wxScrollBar_SetScrollbar, 2098).
+-define(wxSpinButton_new_2, 2100).
+-define(wxSpinButton_new_0, 2101).
+-define(wxSpinButton_Create, 2102).
+-define(wxSpinButton_GetMax, 2103).
+-define(wxSpinButton_GetMin, 2104).
+-define(wxSpinButton_GetValue, 2105).
+-define(wxSpinButton_SetRange, 2106).
+-define(wxSpinButton_SetValue, 2107).
+-define(wxSpinButton_destroy, 2108).
+-define(wxSpinCtrl_new_0, 2109).
+-define(wxSpinCtrl_new_2, 2110).
+-define(wxSpinCtrl_Create, 2112).
+-define(wxSpinCtrl_SetValue_1_1, 2115).
+-define(wxSpinCtrl_SetValue_1_0, 2116).
+-define(wxSpinCtrl_GetValue, 2118).
+-define(wxSpinCtrl_SetRange, 2120).
+-define(wxSpinCtrl_SetSelection, 2121).
+-define(wxSpinCtrl_GetMin, 2123).
+-define(wxSpinCtrl_GetMax, 2125).
+-define(wxSpinCtrl_destroy, 2126).
+-define(wxStaticText_new_0, 2127).
+-define(wxStaticText_new_4, 2128).
+-define(wxStaticText_Create, 2129).
+-define(wxStaticText_GetLabel, 2130).
+-define(wxStaticText_SetLabel, 2131).
+-define(wxStaticText_Wrap, 2132).
+-define(wxStaticText_destroy, 2133).
+-define(wxStaticBitmap_new_0, 2134).
+-define(wxStaticBitmap_new_4, 2135).
+-define(wxStaticBitmap_Create, 2136).
+-define(wxStaticBitmap_GetBitmap, 2137).
+-define(wxStaticBitmap_SetBitmap, 2138).
+-define(wxStaticBitmap_destroy, 2139).
+-define(wxRadioBox_new, 2140).
+-define(wxRadioBox_destruct, 2142).
+-define(wxRadioBox_Create, 2143).
+-define(wxRadioBox_Enable_2, 2144).
+-define(wxRadioBox_Enable_1, 2145).
+-define(wxRadioBox_GetSelection, 2146).
+-define(wxRadioBox_GetString, 2147).
+-define(wxRadioBox_SetSelection, 2148).
+-define(wxRadioBox_Show_2, 2149).
+-define(wxRadioBox_Show_1, 2150).
+-define(wxRadioBox_GetColumnCount, 2151).
+-define(wxRadioBox_GetItemHelpText, 2152).
+-define(wxRadioBox_GetItemToolTip, 2153).
+-define(wxRadioBox_GetItemFromPoint, 2155).
+-define(wxRadioBox_GetRowCount, 2156).
+-define(wxRadioBox_IsItemEnabled, 2157).
+-define(wxRadioBox_IsItemShown, 2158).
+-define(wxRadioBox_SetItemHelpText, 2159).
+-define(wxRadioBox_SetItemToolTip, 2160).
+-define(wxRadioButton_new_0, 2161).
+-define(wxRadioButton_new_4, 2162).
+-define(wxRadioButton_Create, 2163).
+-define(wxRadioButton_GetValue, 2164).
+-define(wxRadioButton_SetValue, 2165).
+-define(wxRadioButton_destroy, 2166).
+-define(wxSlider_new_6, 2168).
+-define(wxSlider_new_0, 2169).
+-define(wxSlider_Create, 2170).
+-define(wxSlider_GetLineSize, 2171).
+-define(wxSlider_GetMax, 2172).
+-define(wxSlider_GetMin, 2173).
+-define(wxSlider_GetPageSize, 2174).
+-define(wxSlider_GetThumbLength, 2175).
+-define(wxSlider_GetValue, 2176).
+-define(wxSlider_SetLineSize, 2177).
+-define(wxSlider_SetPageSize, 2178).
+-define(wxSlider_SetRange, 2179).
+-define(wxSlider_SetThumbLength, 2180).
+-define(wxSlider_SetValue, 2181).
+-define(wxSlider_destroy, 2182).
+-define(wxDialog_new_4, 2184).
+-define(wxDialog_new_0, 2185).
+-define(wxDialog_destruct, 2187).
+-define(wxDialog_Create, 2188).
+-define(wxDialog_CreateButtonSizer, 2189).
+-define(wxDialog_CreateStdDialogButtonSizer, 2190).
+-define(wxDialog_EndModal, 2191).
+-define(wxDialog_GetAffirmativeId, 2192).
+-define(wxDialog_GetReturnCode, 2193).
+-define(wxDialog_IsModal, 2194).
+-define(wxDialog_SetAffirmativeId, 2195).
+-define(wxDialog_SetReturnCode, 2196).
+-define(wxDialog_Show, 2197).
+-define(wxDialog_ShowModal, 2198).
+-define(wxColourDialog_new_0, 2199).
+-define(wxColourDialog_new_2, 2200).
+-define(wxColourDialog_destruct, 2201).
+-define(wxColourDialog_Create, 2202).
+-define(wxColourDialog_GetColourData, 2203).
+-define(wxColourData_new_0, 2204).
+-define(wxColourData_new_1, 2205).
+-define(wxColourData_destruct, 2206).
+-define(wxColourData_GetChooseFull, 2207).
+-define(wxColourData_GetColour, 2208).
+-define(wxColourData_GetCustomColour, 2210).
+-define(wxColourData_SetChooseFull, 2211).
+-define(wxColourData_SetColour, 2212).
+-define(wxColourData_SetCustomColour, 2213).
+-define(wxPalette_new_0, 2214).
+-define(wxPalette_new_4, 2215).
+-define(wxPalette_destruct, 2217).
+-define(wxPalette_Create, 2218).
+-define(wxPalette_GetColoursCount, 2219).
+-define(wxPalette_GetPixel, 2220).
+-define(wxPalette_GetRGB, 2221).
+-define(wxPalette_IsOk, 2222).
+-define(wxDirDialog_new, 2226).
+-define(wxDirDialog_destruct, 2227).
+-define(wxDirDialog_GetPath, 2228).
+-define(wxDirDialog_GetMessage, 2229).
+-define(wxDirDialog_SetMessage, 2230).
+-define(wxDirDialog_SetPath, 2231).
+-define(wxFileDialog_new, 2235).
+-define(wxFileDialog_destruct, 2236).
+-define(wxFileDialog_GetDirectory, 2237).
+-define(wxFileDialog_GetFilename, 2238).
+-define(wxFileDialog_GetFilenames, 2239).
+-define(wxFileDialog_GetFilterIndex, 2240).
+-define(wxFileDialog_GetMessage, 2241).
+-define(wxFileDialog_GetPath, 2242).
+-define(wxFileDialog_GetPaths, 2243).
+-define(wxFileDialog_GetWildcard, 2244).
+-define(wxFileDialog_SetDirectory, 2245).
+-define(wxFileDialog_SetFilename, 2246).
+-define(wxFileDialog_SetFilterIndex, 2247).
+-define(wxFileDialog_SetMessage, 2248).
+-define(wxFileDialog_SetPath, 2249).
+-define(wxFileDialog_SetWildcard, 2250).
+-define(wxPickerBase_SetInternalMargin, 2251).
+-define(wxPickerBase_GetInternalMargin, 2252).
+-define(wxPickerBase_SetTextCtrlProportion, 2253).
+-define(wxPickerBase_SetPickerCtrlProportion, 2254).
+-define(wxPickerBase_GetTextCtrlProportion, 2255).
+-define(wxPickerBase_GetPickerCtrlProportion, 2256).
+-define(wxPickerBase_HasTextCtrl, 2257).
+-define(wxPickerBase_GetTextCtrl, 2258).
+-define(wxPickerBase_IsTextCtrlGrowable, 2259).
+-define(wxPickerBase_SetPickerCtrlGrowable, 2260).
+-define(wxPickerBase_SetTextCtrlGrowable, 2261).
+-define(wxPickerBase_IsPickerCtrlGrowable, 2262).
+-define(wxFilePickerCtrl_new_0, 2263).
+-define(wxFilePickerCtrl_new_3, 2264).
+-define(wxFilePickerCtrl_Create, 2265).
+-define(wxFilePickerCtrl_GetPath, 2266).
+-define(wxFilePickerCtrl_SetPath, 2267).
+-define(wxFilePickerCtrl_destroy, 2268).
+-define(wxDirPickerCtrl_new_0, 2269).
+-define(wxDirPickerCtrl_new_3, 2270).
+-define(wxDirPickerCtrl_Create, 2271).
+-define(wxDirPickerCtrl_GetPath, 2272).
+-define(wxDirPickerCtrl_SetPath, 2273).
+-define(wxDirPickerCtrl_destroy, 2274).
+-define(wxColourPickerCtrl_new_0, 2275).
+-define(wxColourPickerCtrl_new_3, 2276).
+-define(wxColourPickerCtrl_Create, 2277).
+-define(wxColourPickerCtrl_GetColour, 2278).
+-define(wxColourPickerCtrl_SetColour_1_1, 2279).
+-define(wxColourPickerCtrl_SetColour_1_0, 2280).
+-define(wxColourPickerCtrl_destroy, 2281).
+-define(wxDatePickerCtrl_new_0, 2282).
+-define(wxDatePickerCtrl_new_3, 2283).
+-define(wxDatePickerCtrl_GetRange, 2284).
+-define(wxDatePickerCtrl_GetValue, 2285).
+-define(wxDatePickerCtrl_SetRange, 2286).
+-define(wxDatePickerCtrl_SetValue, 2287).
+-define(wxDatePickerCtrl_destroy, 2288).
+-define(wxFontPickerCtrl_new_0, 2289).
+-define(wxFontPickerCtrl_new_3, 2290).
+-define(wxFontPickerCtrl_Create, 2291).
+-define(wxFontPickerCtrl_GetSelectedFont, 2292).
+-define(wxFontPickerCtrl_SetSelectedFont, 2293).
+-define(wxFontPickerCtrl_GetMaxPointSize, 2294).
+-define(wxFontPickerCtrl_SetMaxPointSize, 2295).
+-define(wxFontPickerCtrl_destroy, 2296).
+-define(wxFindReplaceDialog_new_0, 2299).
+-define(wxFindReplaceDialog_new_4, 2300).
+-define(wxFindReplaceDialog_destruct, 2301).
+-define(wxFindReplaceDialog_Create, 2302).
+-define(wxFindReplaceDialog_GetData, 2303).
+-define(wxFindReplaceData_new_0, 2304).
+-define(wxFindReplaceData_new_1, 2305).
+-define(wxFindReplaceData_GetFindString, 2306).
+-define(wxFindReplaceData_GetReplaceString, 2307).
+-define(wxFindReplaceData_GetFlags, 2308).
+-define(wxFindReplaceData_SetFlags, 2309).
+-define(wxFindReplaceData_SetFindString, 2310).
+-define(wxFindReplaceData_SetReplaceString, 2311).
+-define(wxFindReplaceData_destroy, 2312).
+-define(wxMultiChoiceDialog_new_0, 2313).
+-define(wxMultiChoiceDialog_new_5, 2315).
+-define(wxMultiChoiceDialog_GetSelections, 2316).
+-define(wxMultiChoiceDialog_SetSelections, 2317).
+-define(wxMultiChoiceDialog_destroy, 2318).
+-define(wxSingleChoiceDialog_new_0, 2319).
+-define(wxSingleChoiceDialog_new_5, 2321).
+-define(wxSingleChoiceDialog_GetSelection, 2322).
+-define(wxSingleChoiceDialog_GetStringSelection, 2323).
+-define(wxSingleChoiceDialog_SetSelection, 2324).
+-define(wxSingleChoiceDialog_destroy, 2325).
+-define(wxTextEntryDialog_new, 2326).
+-define(wxTextEntryDialog_GetValue, 2327).
+-define(wxTextEntryDialog_SetValue, 2328).
+-define(wxTextEntryDialog_destroy, 2329).
+-define(wxPasswordEntryDialog_new, 2330).
+-define(wxPasswordEntryDialog_destroy, 2331).
+-define(wxFontData_new_0, 2332).
+-define(wxFontData_new_1, 2333).
+-define(wxFontData_destruct, 2334).
+-define(wxFontData_EnableEffects, 2335).
+-define(wxFontData_GetAllowSymbols, 2336).
+-define(wxFontData_GetColour, 2337).
+-define(wxFontData_GetChosenFont, 2338).
+-define(wxFontData_GetEnableEffects, 2339).
+-define(wxFontData_GetInitialFont, 2340).
+-define(wxFontData_GetShowHelp, 2341).
+-define(wxFontData_SetAllowSymbols, 2342).
+-define(wxFontData_SetChosenFont, 2343).
+-define(wxFontData_SetColour, 2344).
+-define(wxFontData_SetInitialFont, 2345).
+-define(wxFontData_SetRange, 2346).
+-define(wxFontData_SetShowHelp, 2347).
+-define(wxFontDialog_new_0, 2351).
+-define(wxFontDialog_new_2, 2353).
+-define(wxFontDialog_Create, 2355).
+-define(wxFontDialog_GetFontData, 2356).
+-define(wxFontDialog_destroy, 2358).
+-define(wxProgressDialog_new, 2359).
+-define(wxProgressDialog_destruct, 2360).
+-define(wxProgressDialog_Resume, 2361).
+-define(wxProgressDialog_Update_2, 2362).
+-define(wxProgressDialog_Update_0, 2363).
+-define(wxMessageDialog_new, 2364).
+-define(wxMessageDialog_destruct, 2365).
+-define(wxPageSetupDialog_new, 2366).
+-define(wxPageSetupDialog_destruct, 2367).
+-define(wxPageSetupDialog_GetPageSetupData, 2368).
+-define(wxPageSetupDialog_ShowModal, 2369).
+-define(wxPageSetupDialogData_new_0, 2370).
+-define(wxPageSetupDialogData_new_1_0, 2371).
+-define(wxPageSetupDialogData_new_1_1, 2372).
+-define(wxPageSetupDialogData_destruct, 2373).
+-define(wxPageSetupDialogData_EnableHelp, 2374).
+-define(wxPageSetupDialogData_EnableMargins, 2375).
+-define(wxPageSetupDialogData_EnableOrientation, 2376).
+-define(wxPageSetupDialogData_EnablePaper, 2377).
+-define(wxPageSetupDialogData_EnablePrinter, 2378).
+-define(wxPageSetupDialogData_GetDefaultMinMargins, 2379).
+-define(wxPageSetupDialogData_GetEnableMargins, 2380).
+-define(wxPageSetupDialogData_GetEnableOrientation, 2381).
+-define(wxPageSetupDialogData_GetEnablePaper, 2382).
+-define(wxPageSetupDialogData_GetEnablePrinter, 2383).
+-define(wxPageSetupDialogData_GetEnableHelp, 2384).
+-define(wxPageSetupDialogData_GetDefaultInfo, 2385).
+-define(wxPageSetupDialogData_GetMarginTopLeft, 2386).
+-define(wxPageSetupDialogData_GetMarginBottomRight, 2387).
+-define(wxPageSetupDialogData_GetMinMarginTopLeft, 2388).
+-define(wxPageSetupDialogData_GetMinMarginBottomRight, 2389).
+-define(wxPageSetupDialogData_GetPaperId, 2390).
+-define(wxPageSetupDialogData_GetPaperSize, 2391).
+-define(wxPageSetupDialogData_GetPrintData, 2393).
+-define(wxPageSetupDialogData_IsOk, 2394).
+-define(wxPageSetupDialogData_SetDefaultInfo, 2395).
+-define(wxPageSetupDialogData_SetDefaultMinMargins, 2396).
+-define(wxPageSetupDialogData_SetMarginTopLeft, 2397).
+-define(wxPageSetupDialogData_SetMarginBottomRight, 2398).
+-define(wxPageSetupDialogData_SetMinMarginTopLeft, 2399).
+-define(wxPageSetupDialogData_SetMinMarginBottomRight, 2400).
+-define(wxPageSetupDialogData_SetPaperId, 2401).
+-define(wxPageSetupDialogData_SetPaperSize_1_1, 2402).
+-define(wxPageSetupDialogData_SetPaperSize_1_0, 2403).
+-define(wxPageSetupDialogData_SetPrintData, 2404).
+-define(wxPrintDialog_new_2_0, 2405).
+-define(wxPrintDialog_new_2_1, 2406).
+-define(wxPrintDialog_destruct, 2407).
+-define(wxPrintDialog_GetPrintDialogData, 2408).
+-define(wxPrintDialog_GetPrintDC, 2409).
+-define(wxPrintDialogData_new_0, 2410).
+-define(wxPrintDialogData_new_1_1, 2411).
+-define(wxPrintDialogData_new_1_0, 2412).
+-define(wxPrintDialogData_destruct, 2413).
+-define(wxPrintDialogData_EnableHelp, 2414).
+-define(wxPrintDialogData_EnablePageNumbers, 2415).
+-define(wxPrintDialogData_EnablePrintToFile, 2416).
+-define(wxPrintDialogData_EnableSelection, 2417).
+-define(wxPrintDialogData_GetAllPages, 2418).
+-define(wxPrintDialogData_GetCollate, 2419).
+-define(wxPrintDialogData_GetFromPage, 2420).
+-define(wxPrintDialogData_GetMaxPage, 2421).
+-define(wxPrintDialogData_GetMinPage, 2422).
+-define(wxPrintDialogData_GetNoCopies, 2423).
+-define(wxPrintDialogData_GetPrintData, 2424).
+-define(wxPrintDialogData_GetPrintToFile, 2425).
+-define(wxPrintDialogData_GetSelection, 2426).
+-define(wxPrintDialogData_GetToPage, 2427).
+-define(wxPrintDialogData_IsOk, 2428).
+-define(wxPrintDialogData_SetCollate, 2429).
+-define(wxPrintDialogData_SetFromPage, 2430).
+-define(wxPrintDialogData_SetMaxPage, 2431).
+-define(wxPrintDialogData_SetMinPage, 2432).
+-define(wxPrintDialogData_SetNoCopies, 2433).
+-define(wxPrintDialogData_SetPrintData, 2434).
+-define(wxPrintDialogData_SetPrintToFile, 2435).
+-define(wxPrintDialogData_SetSelection, 2436).
+-define(wxPrintDialogData_SetToPage, 2437).
+-define(wxPrintData_new_0, 2438).
+-define(wxPrintData_new_1, 2439).
+-define(wxPrintData_destruct, 2440).
+-define(wxPrintData_GetCollate, 2441).
+-define(wxPrintData_GetBin, 2442).
+-define(wxPrintData_GetColour, 2443).
+-define(wxPrintData_GetDuplex, 2444).
+-define(wxPrintData_GetNoCopies, 2445).
+-define(wxPrintData_GetOrientation, 2446).
+-define(wxPrintData_GetPaperId, 2447).
+-define(wxPrintData_GetPrinterName, 2448).
+-define(wxPrintData_GetQuality, 2449).
+-define(wxPrintData_IsOk, 2450).
+-define(wxPrintData_SetBin, 2451).
+-define(wxPrintData_SetCollate, 2452).
+-define(wxPrintData_SetColour, 2453).
+-define(wxPrintData_SetDuplex, 2454).
+-define(wxPrintData_SetNoCopies, 2455).
+-define(wxPrintData_SetOrientation, 2456).
+-define(wxPrintData_SetPaperId, 2457).
+-define(wxPrintData_SetPrinterName, 2458).
+-define(wxPrintData_SetQuality, 2459).
+-define(wxPrintPreview_new_2, 2462).
+-define(wxPrintPreview_new_3, 2463).
+-define(wxPrintPreview_destruct, 2465).
+-define(wxPrintPreview_GetCanvas, 2466).
+-define(wxPrintPreview_GetCurrentPage, 2467).
+-define(wxPrintPreview_GetFrame, 2468).
+-define(wxPrintPreview_GetMaxPage, 2469).
+-define(wxPrintPreview_GetMinPage, 2470).
+-define(wxPrintPreview_GetPrintout, 2471).
+-define(wxPrintPreview_GetPrintoutForPrinting, 2472).
+-define(wxPrintPreview_IsOk, 2473).
+-define(wxPrintPreview_PaintPage, 2474).
+-define(wxPrintPreview_Print, 2475).
+-define(wxPrintPreview_RenderPage, 2476).
+-define(wxPrintPreview_SetCanvas, 2477).
+-define(wxPrintPreview_SetCurrentPage, 2478).
+-define(wxPrintPreview_SetFrame, 2479).
+-define(wxPrintPreview_SetPrintout, 2480).
+-define(wxPrintPreview_SetZoom, 2481).
+-define(wxPreviewFrame_new, 2482).
+-define(wxPreviewFrame_destruct, 2483).
+-define(wxPreviewFrame_CreateControlBar, 2484).
+-define(wxPreviewFrame_CreateCanvas, 2485).
+-define(wxPreviewFrame_Initialize, 2486).
+-define(wxPreviewFrame_OnCloseWindow, 2487).
+-define(wxPreviewControlBar_new, 2488).
+-define(wxPreviewControlBar_destruct, 2489).
+-define(wxPreviewControlBar_CreateButtons, 2490).
+-define(wxPreviewControlBar_GetPrintPreview, 2491).
+-define(wxPreviewControlBar_GetZoomControl, 2492).
+-define(wxPreviewControlBar_SetZoomControl, 2493).
+-define(wxPrinter_new, 2495).
+-define(wxPrinter_CreateAbortWindow, 2496).
+-define(wxPrinter_GetAbort, 2497).
+-define(wxPrinter_GetLastError, 2498).
+-define(wxPrinter_GetPrintDialogData, 2499).
+-define(wxPrinter_Print, 2500).
+-define(wxPrinter_PrintDialog, 2501).
+-define(wxPrinter_ReportError, 2502).
+-define(wxPrinter_Setup, 2503).
+-define(wxPrinter_destroy, 2504).
+-define(wxXmlResource_new_1, 2505).
+-define(wxXmlResource_new_2, 2506).
+-define(wxXmlResource_destruct, 2507).
+-define(wxXmlResource_AttachUnknownControl, 2508).
+-define(wxXmlResource_ClearHandlers, 2509).
+-define(wxXmlResource_CompareVersion, 2510).
+-define(wxXmlResource_Get, 2511).
+-define(wxXmlResource_GetFlags, 2512).
+-define(wxXmlResource_GetVersion, 2513).
+-define(wxXmlResource_GetXRCID, 2514).
+-define(wxXmlResource_InitAllHandlers, 2515).
+-define(wxXmlResource_Load, 2516).
+-define(wxXmlResource_LoadBitmap, 2517).
+-define(wxXmlResource_LoadDialog_2, 2518).
+-define(wxXmlResource_LoadDialog_3, 2519).
+-define(wxXmlResource_LoadFrame_2, 2520).
+-define(wxXmlResource_LoadFrame_3, 2521).
+-define(wxXmlResource_LoadIcon, 2522).
+-define(wxXmlResource_LoadMenu, 2523).
+-define(wxXmlResource_LoadMenuBar_2, 2524).
+-define(wxXmlResource_LoadMenuBar_1, 2525).
+-define(wxXmlResource_LoadPanel_2, 2526).
+-define(wxXmlResource_LoadPanel_3, 2527).
+-define(wxXmlResource_LoadToolBar, 2528).
+-define(wxXmlResource_Set, 2529).
+-define(wxXmlResource_SetFlags, 2530).
+-define(wxXmlResource_Unload, 2531).
+-define(wxXmlResource_xrcctrl, 2532).
+-define(wxHtmlEasyPrinting_new, 2533).
+-define(wxHtmlEasyPrinting_destruct, 2534).
+-define(wxHtmlEasyPrinting_GetPrintData, 2535).
+-define(wxHtmlEasyPrinting_GetPageSetupData, 2536).
+-define(wxHtmlEasyPrinting_PreviewFile, 2537).
+-define(wxHtmlEasyPrinting_PreviewText, 2538).
+-define(wxHtmlEasyPrinting_PrintFile, 2539).
+-define(wxHtmlEasyPrinting_PrintText, 2540).
+-define(wxHtmlEasyPrinting_PageSetup, 2541).
+-define(wxHtmlEasyPrinting_SetFonts, 2542).
+-define(wxHtmlEasyPrinting_SetHeader, 2543).
+-define(wxHtmlEasyPrinting_SetFooter, 2544).
+-define(wxGLCanvas_new_2, 2546).
+-define(wxGLCanvas_new_3_1, 2547).
+-define(wxGLCanvas_new_3_0, 2548).
+-define(wxGLCanvas_GetContext, 2549).
+-define(wxGLCanvas_SetCurrent, 2551).
+-define(wxGLCanvas_SwapBuffers, 2552).
+-define(wxGLCanvas_destroy, 2553).
+-define(wxAuiManager_new, 2554).
+-define(wxAuiManager_destruct, 2555).
+-define(wxAuiManager_AddPane_2_1, 2556).
+-define(wxAuiManager_AddPane_3, 2557).
+-define(wxAuiManager_AddPane_2_0, 2558).
+-define(wxAuiManager_DetachPane, 2559).
+-define(wxAuiManager_GetAllPanes, 2560).
+-define(wxAuiManager_GetArtProvider, 2561).
+-define(wxAuiManager_GetDockSizeConstraint, 2562).
+-define(wxAuiManager_GetFlags, 2563).
+-define(wxAuiManager_GetManagedWindow, 2564).
+-define(wxAuiManager_GetManager, 2565).
+-define(wxAuiManager_GetPane_1_1, 2566).
+-define(wxAuiManager_GetPane_1_0, 2567).
+-define(wxAuiManager_HideHint, 2568).
+-define(wxAuiManager_InsertPane, 2569).
+-define(wxAuiManager_LoadPaneInfo, 2570).
+-define(wxAuiManager_LoadPerspective, 2571).
+-define(wxAuiManager_SavePaneInfo, 2572).
+-define(wxAuiManager_SavePerspective, 2573).
+-define(wxAuiManager_SetArtProvider, 2574).
+-define(wxAuiManager_SetDockSizeConstraint, 2575).
+-define(wxAuiManager_SetFlags, 2576).
+-define(wxAuiManager_SetManagedWindow, 2577).
+-define(wxAuiManager_ShowHint, 2578).
+-define(wxAuiManager_UnInit, 2579).
+-define(wxAuiManager_Update, 2580).
+-define(wxAuiPaneInfo_new_0, 2581).
+-define(wxAuiPaneInfo_new_1, 2582).
+-define(wxAuiPaneInfo_destruct, 2583).
+-define(wxAuiPaneInfo_BestSize_1, 2584).
+-define(wxAuiPaneInfo_BestSize_2, 2585).
+-define(wxAuiPaneInfo_Bottom, 2586).
+-define(wxAuiPaneInfo_BottomDockable, 2587).
+-define(wxAuiPaneInfo_Caption, 2588).
+-define(wxAuiPaneInfo_CaptionVisible, 2589).
+-define(wxAuiPaneInfo_Centre, 2590).
+-define(wxAuiPaneInfo_CentrePane, 2591).
+-define(wxAuiPaneInfo_CloseButton, 2592).
+-define(wxAuiPaneInfo_DefaultPane, 2593).
+-define(wxAuiPaneInfo_DestroyOnClose, 2594).
+-define(wxAuiPaneInfo_Direction, 2595).
+-define(wxAuiPaneInfo_Dock, 2596).
+-define(wxAuiPaneInfo_Dockable, 2597).
+-define(wxAuiPaneInfo_Fixed, 2598).
+-define(wxAuiPaneInfo_Float, 2599).
+-define(wxAuiPaneInfo_Floatable, 2600).
+-define(wxAuiPaneInfo_FloatingPosition_1, 2601).
+-define(wxAuiPaneInfo_FloatingPosition_2, 2602).
+-define(wxAuiPaneInfo_FloatingSize_1, 2603).
+-define(wxAuiPaneInfo_FloatingSize_2, 2604).
+-define(wxAuiPaneInfo_Gripper, 2605).
+-define(wxAuiPaneInfo_GripperTop, 2606).
+-define(wxAuiPaneInfo_HasBorder, 2607).
+-define(wxAuiPaneInfo_HasCaption, 2608).
+-define(wxAuiPaneInfo_HasCloseButton, 2609).
+-define(wxAuiPaneInfo_HasFlag, 2610).
+-define(wxAuiPaneInfo_HasGripper, 2611).
+-define(wxAuiPaneInfo_HasGripperTop, 2612).
+-define(wxAuiPaneInfo_HasMaximizeButton, 2613).
+-define(wxAuiPaneInfo_HasMinimizeButton, 2614).
+-define(wxAuiPaneInfo_HasPinButton, 2615).
+-define(wxAuiPaneInfo_Hide, 2616).
+-define(wxAuiPaneInfo_IsBottomDockable, 2617).
+-define(wxAuiPaneInfo_IsDocked, 2618).
+-define(wxAuiPaneInfo_IsFixed, 2619).
+-define(wxAuiPaneInfo_IsFloatable, 2620).
+-define(wxAuiPaneInfo_IsFloating, 2621).
+-define(wxAuiPaneInfo_IsLeftDockable, 2622).
+-define(wxAuiPaneInfo_IsMovable, 2623).
+-define(wxAuiPaneInfo_IsOk, 2624).
+-define(wxAuiPaneInfo_IsResizable, 2625).
+-define(wxAuiPaneInfo_IsRightDockable, 2626).
+-define(wxAuiPaneInfo_IsShown, 2627).
+-define(wxAuiPaneInfo_IsToolbar, 2628).
+-define(wxAuiPaneInfo_IsTopDockable, 2629).
+-define(wxAuiPaneInfo_Layer, 2630).
+-define(wxAuiPaneInfo_Left, 2631).
+-define(wxAuiPaneInfo_LeftDockable, 2632).
+-define(wxAuiPaneInfo_MaxSize_1, 2633).
+-define(wxAuiPaneInfo_MaxSize_2, 2634).
+-define(wxAuiPaneInfo_MaximizeButton, 2635).
+-define(wxAuiPaneInfo_MinSize_1, 2636).
+-define(wxAuiPaneInfo_MinSize_2, 2637).
+-define(wxAuiPaneInfo_MinimizeButton, 2638).
+-define(wxAuiPaneInfo_Movable, 2639).
+-define(wxAuiPaneInfo_Name, 2640).
+-define(wxAuiPaneInfo_PaneBorder, 2641).
+-define(wxAuiPaneInfo_PinButton, 2642).
+-define(wxAuiPaneInfo_Position, 2643).
+-define(wxAuiPaneInfo_Resizable, 2644).
+-define(wxAuiPaneInfo_Right, 2645).
+-define(wxAuiPaneInfo_RightDockable, 2646).
+-define(wxAuiPaneInfo_Row, 2647).
+-define(wxAuiPaneInfo_SafeSet, 2648).
+-define(wxAuiPaneInfo_SetFlag, 2649).
+-define(wxAuiPaneInfo_Show, 2650).
+-define(wxAuiPaneInfo_ToolbarPane, 2651).
+-define(wxAuiPaneInfo_Top, 2652).
+-define(wxAuiPaneInfo_TopDockable, 2653).
+-define(wxAuiPaneInfo_Window, 2654).
+-define(wxAuiPaneInfo_GetWindow, 2655).
+-define(wxAuiPaneInfo_GetFrame, 2656).
+-define(wxAuiPaneInfo_GetDirection, 2657).
+-define(wxAuiPaneInfo_GetLayer, 2658).
+-define(wxAuiPaneInfo_GetRow, 2659).
+-define(wxAuiPaneInfo_GetPosition, 2660).
+-define(wxAuiPaneInfo_GetFloatingPosition, 2661).
+-define(wxAuiPaneInfo_GetFloatingSize, 2662).
+-define(wxAuiNotebook_new_0, 2663).
+-define(wxAuiNotebook_new_2, 2664).
+-define(wxAuiNotebook_AddPage, 2665).
+-define(wxAuiNotebook_Create, 2666).
+-define(wxAuiNotebook_DeletePage, 2667).
+-define(wxAuiNotebook_GetArtProvider, 2668).
+-define(wxAuiNotebook_GetPage, 2669).
+-define(wxAuiNotebook_GetPageBitmap, 2670).
+-define(wxAuiNotebook_GetPageCount, 2671).
+-define(wxAuiNotebook_GetPageIndex, 2672).
+-define(wxAuiNotebook_GetPageText, 2673).
+-define(wxAuiNotebook_GetSelection, 2674).
+-define(wxAuiNotebook_InsertPage, 2675).
+-define(wxAuiNotebook_RemovePage, 2676).
+-define(wxAuiNotebook_SetArtProvider, 2677).
+-define(wxAuiNotebook_SetFont, 2678).
+-define(wxAuiNotebook_SetPageBitmap, 2679).
+-define(wxAuiNotebook_SetPageText, 2680).
+-define(wxAuiNotebook_SetSelection, 2681).
+-define(wxAuiNotebook_SetTabCtrlHeight, 2682).
+-define(wxAuiNotebook_SetUniformBitmapSize, 2683).
+-define(wxAuiNotebook_destroy, 2684).
+-define(wxAuiTabArt_SetFlags, 2685).
+-define(wxAuiTabArt_SetMeasuringFont, 2686).
+-define(wxAuiTabArt_SetNormalFont, 2687).
+-define(wxAuiTabArt_SetSelectedFont, 2688).
+-define(wxAuiTabArt_SetColour, 2689).
+-define(wxAuiTabArt_SetActiveColour, 2690).
+-define(wxAuiDockArt_GetColour, 2691).
+-define(wxAuiDockArt_GetFont, 2692).
+-define(wxAuiDockArt_GetMetric, 2693).
+-define(wxAuiDockArt_SetColour, 2694).
+-define(wxAuiDockArt_SetFont, 2695).
+-define(wxAuiDockArt_SetMetric, 2696).
+-define(wxAuiSimpleTabArt_new, 2697).
+-define(wxAuiSimpleTabArt_destroy, 2698).
+-define(wxMDIParentFrame_new_0, 2699).
+-define(wxMDIParentFrame_new_4, 2700).
+-define(wxMDIParentFrame_destruct, 2701).
+-define(wxMDIParentFrame_ActivateNext, 2702).
+-define(wxMDIParentFrame_ActivatePrevious, 2703).
+-define(wxMDIParentFrame_ArrangeIcons, 2704).
+-define(wxMDIParentFrame_Cascade, 2705).
+-define(wxMDIParentFrame_Create, 2706).
+-define(wxMDIParentFrame_GetActiveChild, 2707).
+-define(wxMDIParentFrame_GetClientWindow, 2708).
+-define(wxMDIParentFrame_Tile, 2709).
+-define(wxMDIChildFrame_new_0, 2710).
+-define(wxMDIChildFrame_new_4, 2711).
+-define(wxMDIChildFrame_destruct, 2712).
+-define(wxMDIChildFrame_Activate, 2713).
+-define(wxMDIChildFrame_Create, 2714).
+-define(wxMDIChildFrame_Maximize, 2715).
+-define(wxMDIChildFrame_Restore, 2716).
+-define(wxMDIClientWindow_new_0, 2717).
+-define(wxMDIClientWindow_new_2, 2718).
+-define(wxMDIClientWindow_destruct, 2719).
+-define(wxMDIClientWindow_CreateClient, 2720).
+-define(wxLayoutAlgorithm_new, 2721).
+-define(wxLayoutAlgorithm_LayoutFrame, 2722).
+-define(wxLayoutAlgorithm_LayoutMDIFrame, 2723).
+-define(wxLayoutAlgorithm_LayoutWindow, 2724).
+-define(wxLayoutAlgorithm_destroy, 2725).
+-define(wxEvent_GetId, 2726).
+-define(wxEvent_GetSkipped, 2727).
+-define(wxEvent_GetTimestamp, 2728).
+-define(wxEvent_IsCommandEvent, 2729).
+-define(wxEvent_ResumePropagation, 2730).
+-define(wxEvent_ShouldPropagate, 2731).
+-define(wxEvent_Skip, 2732).
+-define(wxEvent_StopPropagation, 2733).
+-define(wxCommandEvent_getClientData, 2734).
+-define(wxCommandEvent_GetExtraLong, 2735).
+-define(wxCommandEvent_GetInt, 2736).
+-define(wxCommandEvent_GetSelection, 2737).
+-define(wxCommandEvent_GetString, 2738).
+-define(wxCommandEvent_IsChecked, 2739).
+-define(wxCommandEvent_IsSelection, 2740).
+-define(wxCommandEvent_SetInt, 2741).
+-define(wxCommandEvent_SetString, 2742).
+-define(wxScrollEvent_GetOrientation, 2743).
+-define(wxScrollEvent_GetPosition, 2744).
+-define(wxScrollWinEvent_GetOrientation, 2745).
+-define(wxScrollWinEvent_GetPosition, 2746).
+-define(wxMouseEvent_AltDown, 2747).
+-define(wxMouseEvent_Button, 2748).
+-define(wxMouseEvent_ButtonDClick, 2749).
+-define(wxMouseEvent_ButtonDown, 2750).
+-define(wxMouseEvent_ButtonUp, 2751).
+-define(wxMouseEvent_CmdDown, 2752).
+-define(wxMouseEvent_ControlDown, 2753).
+-define(wxMouseEvent_Dragging, 2754).
+-define(wxMouseEvent_Entering, 2755).
+-define(wxMouseEvent_GetButton, 2756).
+-define(wxMouseEvent_GetPosition, 2759).
+-define(wxMouseEvent_GetLogicalPosition, 2760).
+-define(wxMouseEvent_GetLinesPerAction, 2761).
+-define(wxMouseEvent_GetWheelRotation, 2762).
+-define(wxMouseEvent_GetWheelDelta, 2763).
+-define(wxMouseEvent_GetX, 2764).
+-define(wxMouseEvent_GetY, 2765).
+-define(wxMouseEvent_IsButton, 2766).
+-define(wxMouseEvent_IsPageScroll, 2767).
+-define(wxMouseEvent_Leaving, 2768).
+-define(wxMouseEvent_LeftDClick, 2769).
+-define(wxMouseEvent_LeftDown, 2770).
+-define(wxMouseEvent_LeftIsDown, 2771).
+-define(wxMouseEvent_LeftUp, 2772).
+-define(wxMouseEvent_MetaDown, 2773).
+-define(wxMouseEvent_MiddleDClick, 2774).
+-define(wxMouseEvent_MiddleDown, 2775).
+-define(wxMouseEvent_MiddleIsDown, 2776).
+-define(wxMouseEvent_MiddleUp, 2777).
+-define(wxMouseEvent_Moving, 2778).
+-define(wxMouseEvent_RightDClick, 2779).
+-define(wxMouseEvent_RightDown, 2780).
+-define(wxMouseEvent_RightIsDown, 2781).
+-define(wxMouseEvent_RightUp, 2782).
+-define(wxMouseEvent_ShiftDown, 2783).
+-define(wxSetCursorEvent_GetCursor, 2784).
+-define(wxSetCursorEvent_GetX, 2785).
+-define(wxSetCursorEvent_GetY, 2786).
+-define(wxSetCursorEvent_HasCursor, 2787).
+-define(wxSetCursorEvent_SetCursor, 2788).
+-define(wxKeyEvent_AltDown, 2789).
+-define(wxKeyEvent_CmdDown, 2790).
+-define(wxKeyEvent_ControlDown, 2791).
+-define(wxKeyEvent_GetKeyCode, 2792).
+-define(wxKeyEvent_GetModifiers, 2793).
+-define(wxKeyEvent_GetPosition, 2796).
+-define(wxKeyEvent_GetRawKeyCode, 2797).
+-define(wxKeyEvent_GetRawKeyFlags, 2798).
+-define(wxKeyEvent_GetUnicodeKey, 2799).
+-define(wxKeyEvent_GetX, 2800).
+-define(wxKeyEvent_GetY, 2801).
+-define(wxKeyEvent_HasModifiers, 2802).
+-define(wxKeyEvent_MetaDown, 2803).
+-define(wxKeyEvent_ShiftDown, 2804).
+-define(wxSizeEvent_GetSize, 2805).
+-define(wxMoveEvent_GetPosition, 2806).
+-define(wxEraseEvent_GetDC, 2807).
+-define(wxFocusEvent_GetWindow, 2808).
+-define(wxChildFocusEvent_GetWindow, 2809).
+-define(wxMenuEvent_GetMenu, 2810).
+-define(wxMenuEvent_GetMenuId, 2811).
+-define(wxMenuEvent_IsPopup, 2812).
+-define(wxCloseEvent_CanVeto, 2813).
+-define(wxCloseEvent_GetLoggingOff, 2814).
+-define(wxCloseEvent_SetCanVeto, 2815).
+-define(wxCloseEvent_SetLoggingOff, 2816).
+-define(wxCloseEvent_Veto, 2817).
+-define(wxShowEvent_SetShow, 2818).
+-define(wxShowEvent_GetShow, 2819).
+-define(wxIconizeEvent_Iconized, 2820).
+-define(wxJoystickEvent_ButtonDown, 2821).
+-define(wxJoystickEvent_ButtonIsDown, 2822).
+-define(wxJoystickEvent_ButtonUp, 2823).
+-define(wxJoystickEvent_GetButtonChange, 2824).
+-define(wxJoystickEvent_GetButtonState, 2825).
+-define(wxJoystickEvent_GetJoystick, 2826).
+-define(wxJoystickEvent_GetPosition, 2827).
+-define(wxJoystickEvent_GetZPosition, 2828).
+-define(wxJoystickEvent_IsButton, 2829).
+-define(wxJoystickEvent_IsMove, 2830).
+-define(wxJoystickEvent_IsZMove, 2831).
+-define(wxUpdateUIEvent_CanUpdate, 2832).
+-define(wxUpdateUIEvent_Check, 2833).
+-define(wxUpdateUIEvent_Enable, 2834).
+-define(wxUpdateUIEvent_Show, 2835).
+-define(wxUpdateUIEvent_GetChecked, 2836).
+-define(wxUpdateUIEvent_GetEnabled, 2837).
+-define(wxUpdateUIEvent_GetShown, 2838).
+-define(wxUpdateUIEvent_GetSetChecked, 2839).
+-define(wxUpdateUIEvent_GetSetEnabled, 2840).
+-define(wxUpdateUIEvent_GetSetShown, 2841).
+-define(wxUpdateUIEvent_GetSetText, 2842).
+-define(wxUpdateUIEvent_GetText, 2843).
+-define(wxUpdateUIEvent_GetMode, 2844).
+-define(wxUpdateUIEvent_GetUpdateInterval, 2845).
+-define(wxUpdateUIEvent_ResetUpdateTime, 2846).
+-define(wxUpdateUIEvent_SetMode, 2847).
+-define(wxUpdateUIEvent_SetText, 2848).
+-define(wxUpdateUIEvent_SetUpdateInterval, 2849).
+-define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2850).
+-define(wxPaletteChangedEvent_SetChangedWindow, 2851).
+-define(wxPaletteChangedEvent_GetChangedWindow, 2852).
+-define(wxQueryNewPaletteEvent_SetPaletteRealized, 2853).
+-define(wxQueryNewPaletteEvent_GetPaletteRealized, 2854).
+-define(wxNavigationKeyEvent_GetDirection, 2855).
+-define(wxNavigationKeyEvent_SetDirection, 2856).
+-define(wxNavigationKeyEvent_IsWindowChange, 2857).
+-define(wxNavigationKeyEvent_SetWindowChange, 2858).
+-define(wxNavigationKeyEvent_IsFromTab, 2859).
+-define(wxNavigationKeyEvent_SetFromTab, 2860).
+-define(wxNavigationKeyEvent_GetCurrentFocus, 2861).
+-define(wxNavigationKeyEvent_SetCurrentFocus, 2862).
+-define(wxHelpEvent_GetOrigin, 2863).
+-define(wxHelpEvent_GetPosition, 2864).
+-define(wxHelpEvent_SetOrigin, 2865).
+-define(wxHelpEvent_SetPosition, 2866).
+-define(wxContextMenuEvent_GetPosition, 2867).
+-define(wxContextMenuEvent_SetPosition, 2868).
+-define(wxIdleEvent_CanSend, 2869).
+-define(wxIdleEvent_GetMode, 2870).
+-define(wxIdleEvent_RequestMore, 2871).
+-define(wxIdleEvent_MoreRequested, 2872).
+-define(wxIdleEvent_SetMode, 2873).
+-define(wxGridEvent_AltDown, 2874).
+-define(wxGridEvent_ControlDown, 2875).
+-define(wxGridEvent_GetCol, 2876).
+-define(wxGridEvent_GetPosition, 2877).
+-define(wxGridEvent_GetRow, 2878).
+-define(wxGridEvent_MetaDown, 2879).
+-define(wxGridEvent_Selecting, 2880).
+-define(wxGridEvent_ShiftDown, 2881).
+-define(wxNotifyEvent_Allow, 2882).
+-define(wxNotifyEvent_IsAllowed, 2883).
+-define(wxNotifyEvent_Veto, 2884).
+-define(wxSashEvent_GetEdge, 2885).
+-define(wxSashEvent_GetDragRect, 2886).
+-define(wxSashEvent_GetDragStatus, 2887).
+-define(wxListEvent_GetCacheFrom, 2888).
+-define(wxListEvent_GetCacheTo, 2889).
+-define(wxListEvent_GetKeyCode, 2890).
+-define(wxListEvent_GetIndex, 2891).
+-define(wxListEvent_GetColumn, 2892).
+-define(wxListEvent_GetPoint, 2893).
+-define(wxListEvent_GetLabel, 2894).
+-define(wxListEvent_GetText, 2895).
+-define(wxListEvent_GetImage, 2896).
+-define(wxListEvent_GetData, 2897).
+-define(wxListEvent_GetMask, 2898).
+-define(wxListEvent_GetItem, 2899).
+-define(wxListEvent_IsEditCancelled, 2900).
+-define(wxDateEvent_GetDate, 2901).
+-define(wxCalendarEvent_GetWeekDay, 2902).
+-define(wxFileDirPickerEvent_GetPath, 2903).
+-define(wxColourPickerEvent_GetColour, 2904).
+-define(wxFontPickerEvent_GetFont, 2905).
+-define(wxStyledTextEvent_GetPosition, 2906).
+-define(wxStyledTextEvent_GetKey, 2907).
+-define(wxStyledTextEvent_GetModifiers, 2908).
+-define(wxStyledTextEvent_GetModificationType, 2909).
+-define(wxStyledTextEvent_GetText, 2910).
+-define(wxStyledTextEvent_GetLength, 2911).
+-define(wxStyledTextEvent_GetLinesAdded, 2912).
+-define(wxStyledTextEvent_GetLine, 2913).
+-define(wxStyledTextEvent_GetFoldLevelNow, 2914).
+-define(wxStyledTextEvent_GetFoldLevelPrev, 2915).
+-define(wxStyledTextEvent_GetMargin, 2916).
+-define(wxStyledTextEvent_GetMessage, 2917).
+-define(wxStyledTextEvent_GetWParam, 2918).
+-define(wxStyledTextEvent_GetLParam, 2919).
+-define(wxStyledTextEvent_GetListType, 2920).
+-define(wxStyledTextEvent_GetX, 2921).
+-define(wxStyledTextEvent_GetY, 2922).
+-define(wxStyledTextEvent_GetDragText, 2923).
+-define(wxStyledTextEvent_GetDragAllowMove, 2924).
+-define(wxStyledTextEvent_GetDragResult, 2925).
+-define(wxStyledTextEvent_GetShift, 2926).
+-define(wxStyledTextEvent_GetControl, 2927).
+-define(wxStyledTextEvent_GetAlt, 2928).
+-define(utils_wxGetKeyState, 2929).
+-define(utils_wxGetMousePosition, 2930).
+-define(utils_wxGetMouseState, 2931).
+-define(utils_wxSetDetectableAutoRepeat, 2932).
+-define(utils_wxBell, 2933).
+-define(utils_wxFindMenuItemId, 2934).
+-define(utils_wxGenericFindWindowAtPoint, 2935).
+-define(utils_wxFindWindowAtPoint, 2936).
+-define(utils_wxBeginBusyCursor, 2937).
+-define(utils_wxEndBusyCursor, 2938).
+-define(utils_wxIsBusy, 2939).
+-define(utils_wxShutdown, 2940).
+-define(utils_wxShell, 2941).
+-define(utils_wxLaunchDefaultBrowser, 2942).
+-define(utils_wxGetEmailAddress, 2943).
+-define(utils_wxGetUserId, 2944).
+-define(utils_wxGetHomeDir, 2945).
+-define(utils_wxNewId, 2946).
+-define(utils_wxRegisterId, 2947).
+-define(utils_wxGetCurrentId, 2948).
+-define(utils_wxGetOsDescription, 2949).
+-define(utils_wxIsPlatformLittleEndian, 2950).
+-define(utils_wxIsPlatform64Bit, 2951).
+-define(gdicmn_wxDisplaySize, 2952).
+-define(gdicmn_wxSetCursor, 2953).
+-define(wxPrintout_new, 2954).
+-define(wxPrintout_destruct, 2955).
+-define(wxPrintout_GetDC, 2956).
+-define(wxPrintout_GetPageSizeMM, 2957).
+-define(wxPrintout_GetPageSizePixels, 2958).
+-define(wxPrintout_GetPaperRectPixels, 2959).
+-define(wxPrintout_GetPPIPrinter, 2960).
+-define(wxPrintout_GetPPIScreen, 2961).
+-define(wxPrintout_GetTitle, 2962).
+-define(wxPrintout_IsPreview, 2963).
+-define(wxPrintout_FitThisSizeToPaper, 2964).
+-define(wxPrintout_FitThisSizeToPage, 2965).
+-define(wxPrintout_FitThisSizeToPageMargins, 2966).
+-define(wxPrintout_MapScreenSizeToPaper, 2967).
+-define(wxPrintout_MapScreenSizeToPage, 2968).
+-define(wxPrintout_MapScreenSizeToPageMargins, 2969).
+-define(wxPrintout_MapScreenSizeToDevice, 2970).
+-define(wxPrintout_GetLogicalPaperRect, 2971).
+-define(wxPrintout_GetLogicalPageRect, 2972).
+-define(wxPrintout_GetLogicalPageMarginsRect, 2973).
+-define(wxPrintout_SetLogicalOrigin, 2974).
+-define(wxPrintout_OffsetLogicalOrigin, 2975).
+-define(wxStyledTextCtrl_new_2, 2976).
+-define(wxStyledTextCtrl_new_0, 2977).
+-define(wxStyledTextCtrl_destruct, 2978).
+-define(wxStyledTextCtrl_Create, 2979).
+-define(wxStyledTextCtrl_AddText, 2980).
+-define(wxStyledTextCtrl_AddStyledText, 2981).
+-define(wxStyledTextCtrl_InsertText, 2982).
+-define(wxStyledTextCtrl_ClearAll, 2983).
+-define(wxStyledTextCtrl_ClearDocumentStyle, 2984).
+-define(wxStyledTextCtrl_GetLength, 2985).
+-define(wxStyledTextCtrl_GetCharAt, 2986).
+-define(wxStyledTextCtrl_GetCurrentPos, 2987).
+-define(wxStyledTextCtrl_GetAnchor, 2988).
+-define(wxStyledTextCtrl_GetStyleAt, 2989).
+-define(wxStyledTextCtrl_Redo, 2990).
+-define(wxStyledTextCtrl_SetUndoCollection, 2991).
+-define(wxStyledTextCtrl_SelectAll, 2992).
+-define(wxStyledTextCtrl_SetSavePoint, 2993).
+-define(wxStyledTextCtrl_GetStyledText, 2994).
+-define(wxStyledTextCtrl_CanRedo, 2995).
+-define(wxStyledTextCtrl_MarkerLineFromHandle, 2996).
+-define(wxStyledTextCtrl_MarkerDeleteHandle, 2997).
+-define(wxStyledTextCtrl_GetUndoCollection, 2998).
+-define(wxStyledTextCtrl_GetViewWhiteSpace, 2999).
+-define(wxStyledTextCtrl_SetViewWhiteSpace, 3000).
+-define(wxStyledTextCtrl_PositionFromPoint, 3001).
+-define(wxStyledTextCtrl_PositionFromPointClose, 3002).
+-define(wxStyledTextCtrl_GotoLine, 3003).
+-define(wxStyledTextCtrl_GotoPos, 3004).
+-define(wxStyledTextCtrl_SetAnchor, 3005).
+-define(wxStyledTextCtrl_GetCurLine, 3006).
+-define(wxStyledTextCtrl_GetEndStyled, 3007).
+-define(wxStyledTextCtrl_ConvertEOLs, 3008).
+-define(wxStyledTextCtrl_GetEOLMode, 3009).
+-define(wxStyledTextCtrl_SetEOLMode, 3010).
+-define(wxStyledTextCtrl_StartStyling, 3011).
+-define(wxStyledTextCtrl_SetStyling, 3012).
+-define(wxStyledTextCtrl_GetBufferedDraw, 3013).
+-define(wxStyledTextCtrl_SetBufferedDraw, 3014).
+-define(wxStyledTextCtrl_SetTabWidth, 3015).
+-define(wxStyledTextCtrl_GetTabWidth, 3016).
+-define(wxStyledTextCtrl_SetCodePage, 3017).
+-define(wxStyledTextCtrl_MarkerDefine, 3018).
+-define(wxStyledTextCtrl_MarkerSetForeground, 3019).
+-define(wxStyledTextCtrl_MarkerSetBackground, 3020).
+-define(wxStyledTextCtrl_MarkerAdd, 3021).
+-define(wxStyledTextCtrl_MarkerDelete, 3022).
+-define(wxStyledTextCtrl_MarkerDeleteAll, 3023).
+-define(wxStyledTextCtrl_MarkerGet, 3024).
+-define(wxStyledTextCtrl_MarkerNext, 3025).
+-define(wxStyledTextCtrl_MarkerPrevious, 3026).
+-define(wxStyledTextCtrl_MarkerDefineBitmap, 3027).
+-define(wxStyledTextCtrl_MarkerAddSet, 3028).
+-define(wxStyledTextCtrl_MarkerSetAlpha, 3029).
+-define(wxStyledTextCtrl_SetMarginType, 3030).
+-define(wxStyledTextCtrl_GetMarginType, 3031).
+-define(wxStyledTextCtrl_SetMarginWidth, 3032).
+-define(wxStyledTextCtrl_GetMarginWidth, 3033).
+-define(wxStyledTextCtrl_SetMarginMask, 3034).
+-define(wxStyledTextCtrl_GetMarginMask, 3035).
+-define(wxStyledTextCtrl_SetMarginSensitive, 3036).
+-define(wxStyledTextCtrl_GetMarginSensitive, 3037).
+-define(wxStyledTextCtrl_StyleClearAll, 3038).
+-define(wxStyledTextCtrl_StyleSetForeground, 3039).
+-define(wxStyledTextCtrl_StyleSetBackground, 3040).
+-define(wxStyledTextCtrl_StyleSetBold, 3041).
+-define(wxStyledTextCtrl_StyleSetItalic, 3042).
+-define(wxStyledTextCtrl_StyleSetSize, 3043).
+-define(wxStyledTextCtrl_StyleSetFaceName, 3044).
+-define(wxStyledTextCtrl_StyleSetEOLFilled, 3045).
+-define(wxStyledTextCtrl_StyleResetDefault, 3046).
+-define(wxStyledTextCtrl_StyleSetUnderline, 3047).
+-define(wxStyledTextCtrl_StyleSetCase, 3048).
+-define(wxStyledTextCtrl_StyleSetHotSpot, 3049).
+-define(wxStyledTextCtrl_SetSelForeground, 3050).
+-define(wxStyledTextCtrl_SetSelBackground, 3051).
+-define(wxStyledTextCtrl_GetSelAlpha, 3052).
+-define(wxStyledTextCtrl_SetSelAlpha, 3053).
+-define(wxStyledTextCtrl_SetCaretForeground, 3054).
+-define(wxStyledTextCtrl_CmdKeyAssign, 3055).
+-define(wxStyledTextCtrl_CmdKeyClear, 3056).
+-define(wxStyledTextCtrl_CmdKeyClearAll, 3057).
+-define(wxStyledTextCtrl_SetStyleBytes, 3058).
+-define(wxStyledTextCtrl_StyleSetVisible, 3059).
+-define(wxStyledTextCtrl_GetCaretPeriod, 3060).
+-define(wxStyledTextCtrl_SetCaretPeriod, 3061).
+-define(wxStyledTextCtrl_SetWordChars, 3062).
+-define(wxStyledTextCtrl_BeginUndoAction, 3063).
+-define(wxStyledTextCtrl_EndUndoAction, 3064).
+-define(wxStyledTextCtrl_IndicatorSetStyle, 3065).
+-define(wxStyledTextCtrl_IndicatorGetStyle, 3066).
+-define(wxStyledTextCtrl_IndicatorSetForeground, 3067).
+-define(wxStyledTextCtrl_IndicatorGetForeground, 3068).
+-define(wxStyledTextCtrl_SetWhitespaceForeground, 3069).
+-define(wxStyledTextCtrl_SetWhitespaceBackground, 3070).
+-define(wxStyledTextCtrl_GetStyleBits, 3071).
+-define(wxStyledTextCtrl_SetLineState, 3072).
+-define(wxStyledTextCtrl_GetLineState, 3073).
+-define(wxStyledTextCtrl_GetMaxLineState, 3074).
+-define(wxStyledTextCtrl_GetCaretLineVisible, 3075).
+-define(wxStyledTextCtrl_SetCaretLineVisible, 3076).
+-define(wxStyledTextCtrl_GetCaretLineBackground, 3077).
+-define(wxStyledTextCtrl_SetCaretLineBackground, 3078).
+-define(wxStyledTextCtrl_AutoCompShow, 3079).
+-define(wxStyledTextCtrl_AutoCompCancel, 3080).
+-define(wxStyledTextCtrl_AutoCompActive, 3081).
+-define(wxStyledTextCtrl_AutoCompPosStart, 3082).
+-define(wxStyledTextCtrl_AutoCompComplete, 3083).
+-define(wxStyledTextCtrl_AutoCompStops, 3084).
+-define(wxStyledTextCtrl_AutoCompSetSeparator, 3085).
+-define(wxStyledTextCtrl_AutoCompGetSeparator, 3086).
+-define(wxStyledTextCtrl_AutoCompSelect, 3087).
+-define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3088).
+-define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3089).
+-define(wxStyledTextCtrl_AutoCompSetFillUps, 3090).
+-define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3091).
+-define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3092).
+-define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3093).
+-define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3094).
+-define(wxStyledTextCtrl_UserListShow, 3095).
+-define(wxStyledTextCtrl_AutoCompSetAutoHide, 3096).
+-define(wxStyledTextCtrl_AutoCompGetAutoHide, 3097).
+-define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3098).
+-define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3099).
+-define(wxStyledTextCtrl_RegisterImage, 3100).
+-define(wxStyledTextCtrl_ClearRegisteredImages, 3101).
+-define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3102).
+-define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3103).
+-define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3104).
+-define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3105).
+-define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3106).
+-define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3107).
+-define(wxStyledTextCtrl_SetIndent, 3108).
+-define(wxStyledTextCtrl_GetIndent, 3109).
+-define(wxStyledTextCtrl_SetUseTabs, 3110).
+-define(wxStyledTextCtrl_GetUseTabs, 3111).
+-define(wxStyledTextCtrl_SetLineIndentation, 3112).
+-define(wxStyledTextCtrl_GetLineIndentation, 3113).
+-define(wxStyledTextCtrl_GetLineIndentPosition, 3114).
+-define(wxStyledTextCtrl_GetColumn, 3115).
+-define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3116).
+-define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3117).
+-define(wxStyledTextCtrl_SetIndentationGuides, 3118).
+-define(wxStyledTextCtrl_GetIndentationGuides, 3119).
+-define(wxStyledTextCtrl_SetHighlightGuide, 3120).
+-define(wxStyledTextCtrl_GetHighlightGuide, 3121).
+-define(wxStyledTextCtrl_GetLineEndPosition, 3122).
+-define(wxStyledTextCtrl_GetCodePage, 3123).
+-define(wxStyledTextCtrl_GetCaretForeground, 3124).
+-define(wxStyledTextCtrl_GetReadOnly, 3125).
+-define(wxStyledTextCtrl_SetCurrentPos, 3126).
+-define(wxStyledTextCtrl_SetSelectionStart, 3127).
+-define(wxStyledTextCtrl_GetSelectionStart, 3128).
+-define(wxStyledTextCtrl_SetSelectionEnd, 3129).
+-define(wxStyledTextCtrl_GetSelectionEnd, 3130).
+-define(wxStyledTextCtrl_SetPrintMagnification, 3131).
+-define(wxStyledTextCtrl_GetPrintMagnification, 3132).
+-define(wxStyledTextCtrl_SetPrintColourMode, 3133).
+-define(wxStyledTextCtrl_GetPrintColourMode, 3134).
+-define(wxStyledTextCtrl_FindText, 3135).
+-define(wxStyledTextCtrl_FormatRange, 3136).
+-define(wxStyledTextCtrl_GetFirstVisibleLine, 3137).
+-define(wxStyledTextCtrl_GetLine, 3138).
+-define(wxStyledTextCtrl_GetLineCount, 3139).
+-define(wxStyledTextCtrl_SetMarginLeft, 3140).
+-define(wxStyledTextCtrl_GetMarginLeft, 3141).
+-define(wxStyledTextCtrl_SetMarginRight, 3142).
+-define(wxStyledTextCtrl_GetMarginRight, 3143).
+-define(wxStyledTextCtrl_GetModify, 3144).
+-define(wxStyledTextCtrl_SetSelection, 3145).
+-define(wxStyledTextCtrl_GetSelectedText, 3146).
+-define(wxStyledTextCtrl_GetTextRange, 3147).
+-define(wxStyledTextCtrl_HideSelection, 3148).
+-define(wxStyledTextCtrl_LineFromPosition, 3149).
+-define(wxStyledTextCtrl_PositionFromLine, 3150).
+-define(wxStyledTextCtrl_LineScroll, 3151).
+-define(wxStyledTextCtrl_EnsureCaretVisible, 3152).
+-define(wxStyledTextCtrl_ReplaceSelection, 3153).
+-define(wxStyledTextCtrl_SetReadOnly, 3154).
+-define(wxStyledTextCtrl_CanPaste, 3155).
+-define(wxStyledTextCtrl_CanUndo, 3156).
+-define(wxStyledTextCtrl_EmptyUndoBuffer, 3157).
+-define(wxStyledTextCtrl_Undo, 3158).
+-define(wxStyledTextCtrl_Cut, 3159).
+-define(wxStyledTextCtrl_Copy, 3160).
+-define(wxStyledTextCtrl_Paste, 3161).
+-define(wxStyledTextCtrl_Clear, 3162).
+-define(wxStyledTextCtrl_SetText, 3163).
+-define(wxStyledTextCtrl_GetText, 3164).
+-define(wxStyledTextCtrl_GetTextLength, 3165).
+-define(wxStyledTextCtrl_GetOvertype, 3166).
+-define(wxStyledTextCtrl_SetCaretWidth, 3167).
+-define(wxStyledTextCtrl_GetCaretWidth, 3168).
+-define(wxStyledTextCtrl_SetTargetStart, 3169).
+-define(wxStyledTextCtrl_GetTargetStart, 3170).
+-define(wxStyledTextCtrl_SetTargetEnd, 3171).
+-define(wxStyledTextCtrl_GetTargetEnd, 3172).
+-define(wxStyledTextCtrl_ReplaceTarget, 3173).
+-define(wxStyledTextCtrl_SearchInTarget, 3174).
+-define(wxStyledTextCtrl_SetSearchFlags, 3175).
+-define(wxStyledTextCtrl_GetSearchFlags, 3176).
+-define(wxStyledTextCtrl_CallTipShow, 3177).
+-define(wxStyledTextCtrl_CallTipCancel, 3178).
+-define(wxStyledTextCtrl_CallTipActive, 3179).
+-define(wxStyledTextCtrl_CallTipPosAtStart, 3180).
+-define(wxStyledTextCtrl_CallTipSetHighlight, 3181).
+-define(wxStyledTextCtrl_CallTipSetBackground, 3182).
+-define(wxStyledTextCtrl_CallTipSetForeground, 3183).
+-define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3184).
+-define(wxStyledTextCtrl_CallTipUseStyle, 3185).
+-define(wxStyledTextCtrl_VisibleFromDocLine, 3186).
+-define(wxStyledTextCtrl_DocLineFromVisible, 3187).
+-define(wxStyledTextCtrl_WrapCount, 3188).
+-define(wxStyledTextCtrl_SetFoldLevel, 3189).
+-define(wxStyledTextCtrl_GetFoldLevel, 3190).
+-define(wxStyledTextCtrl_GetLastChild, 3191).
+-define(wxStyledTextCtrl_GetFoldParent, 3192).
+-define(wxStyledTextCtrl_ShowLines, 3193).
+-define(wxStyledTextCtrl_HideLines, 3194).
+-define(wxStyledTextCtrl_GetLineVisible, 3195).
+-define(wxStyledTextCtrl_SetFoldExpanded, 3196).
+-define(wxStyledTextCtrl_GetFoldExpanded, 3197).
+-define(wxStyledTextCtrl_ToggleFold, 3198).
+-define(wxStyledTextCtrl_EnsureVisible, 3199).
+-define(wxStyledTextCtrl_SetFoldFlags, 3200).
+-define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3201).
+-define(wxStyledTextCtrl_SetTabIndents, 3202).
+-define(wxStyledTextCtrl_GetTabIndents, 3203).
+-define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3204).
+-define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3205).
+-define(wxStyledTextCtrl_SetMouseDwellTime, 3206).
+-define(wxStyledTextCtrl_GetMouseDwellTime, 3207).
+-define(wxStyledTextCtrl_WordStartPosition, 3208).
+-define(wxStyledTextCtrl_WordEndPosition, 3209).
+-define(wxStyledTextCtrl_SetWrapMode, 3210).
+-define(wxStyledTextCtrl_GetWrapMode, 3211).
+-define(wxStyledTextCtrl_SetWrapVisualFlags, 3212).
+-define(wxStyledTextCtrl_GetWrapVisualFlags, 3213).
+-define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3214).
+-define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3215).
+-define(wxStyledTextCtrl_SetWrapStartIndent, 3216).
+-define(wxStyledTextCtrl_GetWrapStartIndent, 3217).
+-define(wxStyledTextCtrl_SetLayoutCache, 3218).
+-define(wxStyledTextCtrl_GetLayoutCache, 3219).
+-define(wxStyledTextCtrl_SetScrollWidth, 3220).
+-define(wxStyledTextCtrl_GetScrollWidth, 3221).
+-define(wxStyledTextCtrl_TextWidth, 3222).
+-define(wxStyledTextCtrl_GetEndAtLastLine, 3223).
+-define(wxStyledTextCtrl_TextHeight, 3224).
+-define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3225).
+-define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3226).
+-define(wxStyledTextCtrl_AppendText, 3227).
+-define(wxStyledTextCtrl_GetTwoPhaseDraw, 3228).
+-define(wxStyledTextCtrl_SetTwoPhaseDraw, 3229).
+-define(wxStyledTextCtrl_TargetFromSelection, 3230).
+-define(wxStyledTextCtrl_LinesJoin, 3231).
+-define(wxStyledTextCtrl_LinesSplit, 3232).
+-define(wxStyledTextCtrl_SetFoldMarginColour, 3233).
+-define(wxStyledTextCtrl_SetFoldMarginHiColour, 3234).
+-define(wxStyledTextCtrl_LineDown, 3235).
+-define(wxStyledTextCtrl_LineDownExtend, 3236).
+-define(wxStyledTextCtrl_LineUp, 3237).
+-define(wxStyledTextCtrl_LineUpExtend, 3238).
+-define(wxStyledTextCtrl_CharLeft, 3239).
+-define(wxStyledTextCtrl_CharLeftExtend, 3240).
+-define(wxStyledTextCtrl_CharRight, 3241).
+-define(wxStyledTextCtrl_CharRightExtend, 3242).
+-define(wxStyledTextCtrl_WordLeft, 3243).
+-define(wxStyledTextCtrl_WordLeftExtend, 3244).
+-define(wxStyledTextCtrl_WordRight, 3245).
+-define(wxStyledTextCtrl_WordRightExtend, 3246).
+-define(wxStyledTextCtrl_Home, 3247).
+-define(wxStyledTextCtrl_HomeExtend, 3248).
+-define(wxStyledTextCtrl_LineEnd, 3249).
+-define(wxStyledTextCtrl_LineEndExtend, 3250).
+-define(wxStyledTextCtrl_DocumentStart, 3251).
+-define(wxStyledTextCtrl_DocumentStartExtend, 3252).
+-define(wxStyledTextCtrl_DocumentEnd, 3253).
+-define(wxStyledTextCtrl_DocumentEndExtend, 3254).
+-define(wxStyledTextCtrl_PageUp, 3255).
+-define(wxStyledTextCtrl_PageUpExtend, 3256).
+-define(wxStyledTextCtrl_PageDown, 3257).
+-define(wxStyledTextCtrl_PageDownExtend, 3258).
+-define(wxStyledTextCtrl_EditToggleOvertype, 3259).
+-define(wxStyledTextCtrl_Cancel, 3260).
+-define(wxStyledTextCtrl_DeleteBack, 3261).
+-define(wxStyledTextCtrl_Tab, 3262).
+-define(wxStyledTextCtrl_BackTab, 3263).
+-define(wxStyledTextCtrl_NewLine, 3264).
+-define(wxStyledTextCtrl_FormFeed, 3265).
+-define(wxStyledTextCtrl_VCHome, 3266).
+-define(wxStyledTextCtrl_VCHomeExtend, 3267).
+-define(wxStyledTextCtrl_ZoomIn, 3268).
+-define(wxStyledTextCtrl_ZoomOut, 3269).
+-define(wxStyledTextCtrl_DelWordLeft, 3270).
+-define(wxStyledTextCtrl_DelWordRight, 3271).
+-define(wxStyledTextCtrl_LineCut, 3272).
+-define(wxStyledTextCtrl_LineDelete, 3273).
+-define(wxStyledTextCtrl_LineTranspose, 3274).
+-define(wxStyledTextCtrl_LineDuplicate, 3275).
+-define(wxStyledTextCtrl_LowerCase, 3276).
+-define(wxStyledTextCtrl_UpperCase, 3277).
+-define(wxStyledTextCtrl_LineScrollDown, 3278).
+-define(wxStyledTextCtrl_LineScrollUp, 3279).
+-define(wxStyledTextCtrl_DeleteBackNotLine, 3280).
+-define(wxStyledTextCtrl_HomeDisplay, 3281).
+-define(wxStyledTextCtrl_HomeDisplayExtend, 3282).
+-define(wxStyledTextCtrl_LineEndDisplay, 3283).
+-define(wxStyledTextCtrl_LineEndDisplayExtend, 3284).
+-define(wxStyledTextCtrl_HomeWrapExtend, 3285).
+-define(wxStyledTextCtrl_LineEndWrap, 3286).
+-define(wxStyledTextCtrl_LineEndWrapExtend, 3287).
+-define(wxStyledTextCtrl_VCHomeWrap, 3288).
+-define(wxStyledTextCtrl_VCHomeWrapExtend, 3289).
+-define(wxStyledTextCtrl_LineCopy, 3290).
+-define(wxStyledTextCtrl_MoveCaretInsideView, 3291).
+-define(wxStyledTextCtrl_LineLength, 3292).
+-define(wxStyledTextCtrl_BraceHighlight, 3293).
+-define(wxStyledTextCtrl_BraceBadLight, 3294).
+-define(wxStyledTextCtrl_BraceMatch, 3295).
+-define(wxStyledTextCtrl_GetViewEOL, 3296).
+-define(wxStyledTextCtrl_SetViewEOL, 3297).
+-define(wxStyledTextCtrl_SetModEventMask, 3298).
+-define(wxStyledTextCtrl_GetEdgeColumn, 3299).
+-define(wxStyledTextCtrl_SetEdgeColumn, 3300).
+-define(wxStyledTextCtrl_SetEdgeMode, 3301).
+-define(wxStyledTextCtrl_GetEdgeMode, 3302).
+-define(wxStyledTextCtrl_GetEdgeColour, 3303).
+-define(wxStyledTextCtrl_SetEdgeColour, 3304).
+-define(wxStyledTextCtrl_SearchAnchor, 3305).
+-define(wxStyledTextCtrl_SearchNext, 3306).
+-define(wxStyledTextCtrl_SearchPrev, 3307).
+-define(wxStyledTextCtrl_LinesOnScreen, 3308).
+-define(wxStyledTextCtrl_UsePopUp, 3309).
+-define(wxStyledTextCtrl_SelectionIsRectangle, 3310).
+-define(wxStyledTextCtrl_SetZoom, 3311).
+-define(wxStyledTextCtrl_GetZoom, 3312).
+-define(wxStyledTextCtrl_GetModEventMask, 3313).
+-define(wxStyledTextCtrl_SetSTCFocus, 3314).
+-define(wxStyledTextCtrl_GetSTCFocus, 3315).
+-define(wxStyledTextCtrl_SetStatus, 3316).
+-define(wxStyledTextCtrl_GetStatus, 3317).
+-define(wxStyledTextCtrl_SetMouseDownCaptures, 3318).
+-define(wxStyledTextCtrl_GetMouseDownCaptures, 3319).
+-define(wxStyledTextCtrl_SetSTCCursor, 3320).
+-define(wxStyledTextCtrl_GetSTCCursor, 3321).
+-define(wxStyledTextCtrl_SetControlCharSymbol, 3322).
+-define(wxStyledTextCtrl_GetControlCharSymbol, 3323).
+-define(wxStyledTextCtrl_WordPartLeft, 3324).
+-define(wxStyledTextCtrl_WordPartLeftExtend, 3325).
+-define(wxStyledTextCtrl_WordPartRight, 3326).
+-define(wxStyledTextCtrl_WordPartRightExtend, 3327).
+-define(wxStyledTextCtrl_SetVisiblePolicy, 3328).
+-define(wxStyledTextCtrl_DelLineLeft, 3329).
+-define(wxStyledTextCtrl_DelLineRight, 3330).
+-define(wxStyledTextCtrl_GetXOffset, 3331).
+-define(wxStyledTextCtrl_ChooseCaretX, 3332).
+-define(wxStyledTextCtrl_SetXCaretPolicy, 3333).
+-define(wxStyledTextCtrl_SetYCaretPolicy, 3334).
+-define(wxStyledTextCtrl_GetPrintWrapMode, 3335).
+-define(wxStyledTextCtrl_SetHotspotActiveForeground, 3336).
+-define(wxStyledTextCtrl_SetHotspotActiveBackground, 3337).
+-define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3338).
+-define(wxStyledTextCtrl_SetHotspotSingleLine, 3339).
+-define(wxStyledTextCtrl_ParaDownExtend, 3340).
+-define(wxStyledTextCtrl_ParaUp, 3341).
+-define(wxStyledTextCtrl_ParaUpExtend, 3342).
+-define(wxStyledTextCtrl_PositionBefore, 3343).
+-define(wxStyledTextCtrl_PositionAfter, 3344).
+-define(wxStyledTextCtrl_CopyRange, 3345).
+-define(wxStyledTextCtrl_CopyText, 3346).
+-define(wxStyledTextCtrl_SetSelectionMode, 3347).
+-define(wxStyledTextCtrl_GetSelectionMode, 3348).
+-define(wxStyledTextCtrl_LineDownRectExtend, 3349).
+-define(wxStyledTextCtrl_LineUpRectExtend, 3350).
+-define(wxStyledTextCtrl_CharLeftRectExtend, 3351).
+-define(wxStyledTextCtrl_CharRightRectExtend, 3352).
+-define(wxStyledTextCtrl_HomeRectExtend, 3353).
+-define(wxStyledTextCtrl_VCHomeRectExtend, 3354).
+-define(wxStyledTextCtrl_LineEndRectExtend, 3355).
+-define(wxStyledTextCtrl_PageUpRectExtend, 3356).
+-define(wxStyledTextCtrl_PageDownRectExtend, 3357).
+-define(wxStyledTextCtrl_StutteredPageUp, 3358).
+-define(wxStyledTextCtrl_StutteredPageUpExtend, 3359).
+-define(wxStyledTextCtrl_StutteredPageDown, 3360).
+-define(wxStyledTextCtrl_StutteredPageDownExtend, 3361).
+-define(wxStyledTextCtrl_WordLeftEnd, 3362).
+-define(wxStyledTextCtrl_WordLeftEndExtend, 3363).
+-define(wxStyledTextCtrl_WordRightEnd, 3364).
+-define(wxStyledTextCtrl_WordRightEndExtend, 3365).
+-define(wxStyledTextCtrl_SetWhitespaceChars, 3366).
+-define(wxStyledTextCtrl_SetCharsDefault, 3367).
+-define(wxStyledTextCtrl_AutoCompGetCurrent, 3368).
+-define(wxStyledTextCtrl_Allocate, 3369).
+-define(wxStyledTextCtrl_FindColumn, 3370).
+-define(wxStyledTextCtrl_GetCaretSticky, 3371).
+-define(wxStyledTextCtrl_SetCaretSticky, 3372).
+-define(wxStyledTextCtrl_ToggleCaretSticky, 3373).
+-define(wxStyledTextCtrl_SetPasteConvertEndings, 3374).
+-define(wxStyledTextCtrl_GetPasteConvertEndings, 3375).
+-define(wxStyledTextCtrl_SelectionDuplicate, 3376).
+-define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3377).
+-define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3378).
+-define(wxStyledTextCtrl_StartRecord, 3379).
+-define(wxStyledTextCtrl_StopRecord, 3380).
+-define(wxStyledTextCtrl_SetLexer, 3381).
+-define(wxStyledTextCtrl_GetLexer, 3382).
+-define(wxStyledTextCtrl_Colourise, 3383).
+-define(wxStyledTextCtrl_SetProperty, 3384).
+-define(wxStyledTextCtrl_SetKeyWords, 3385).
+-define(wxStyledTextCtrl_SetLexerLanguage, 3386).
+-define(wxStyledTextCtrl_GetProperty, 3387).
+-define(wxStyledTextCtrl_GetStyleBitsNeeded, 3388).
+-define(wxStyledTextCtrl_GetCurrentLine, 3389).
+-define(wxStyledTextCtrl_StyleSetSpec, 3390).
+-define(wxStyledTextCtrl_StyleSetFont, 3391).
+-define(wxStyledTextCtrl_StyleSetFontAttr, 3392).
+-define(wxStyledTextCtrl_StyleSetCharacterSet, 3393).
+-define(wxStyledTextCtrl_StyleSetFontEncoding, 3394).
+-define(wxStyledTextCtrl_CmdKeyExecute, 3395).
+-define(wxStyledTextCtrl_SetMargins, 3396).
+-define(wxStyledTextCtrl_GetSelection, 3397).
+-define(wxStyledTextCtrl_PointFromPosition, 3398).
+-define(wxStyledTextCtrl_ScrollToLine, 3399).
+-define(wxStyledTextCtrl_ScrollToColumn, 3400).
+-define(wxStyledTextCtrl_SetVScrollBar, 3401).
+-define(wxStyledTextCtrl_SetHScrollBar, 3402).
+-define(wxStyledTextCtrl_GetLastKeydownProcessed, 3403).
+-define(wxStyledTextCtrl_SetLastKeydownProcessed, 3404).
+-define(wxStyledTextCtrl_SaveFile, 3405).
+-define(wxStyledTextCtrl_LoadFile, 3406).
+-define(wxStyledTextCtrl_DoDragOver, 3407).
+-define(wxStyledTextCtrl_DoDropText, 3408).
+-define(wxStyledTextCtrl_GetUseAntiAliasing, 3409).
+-define(wxStyledTextCtrl_AddTextRaw, 3410).
+-define(wxStyledTextCtrl_InsertTextRaw, 3411).
+-define(wxStyledTextCtrl_GetCurLineRaw, 3412).
+-define(wxStyledTextCtrl_GetLineRaw, 3413).
+-define(wxStyledTextCtrl_GetSelectedTextRaw, 3414).
+-define(wxStyledTextCtrl_GetTextRangeRaw, 3415).
+-define(wxStyledTextCtrl_SetTextRaw, 3416).
+-define(wxStyledTextCtrl_GetTextRaw, 3417).
+-define(wxStyledTextCtrl_AppendTextRaw, 3418).
+-define(wxArtProvider_GetBitmap, 3419).
+-define(wxArtProvider_GetIcon, 3420).
+-define(wxTreeEvent_GetKeyCode, 3421).
+-define(wxTreeEvent_GetItem, 3422).
+-define(wxTreeEvent_GetKeyEvent, 3423).
+-define(wxTreeEvent_GetLabel, 3424).
+-define(wxTreeEvent_GetOldItem, 3425).
+-define(wxTreeEvent_GetPoint, 3426).
+-define(wxTreeEvent_IsEditCancelled, 3427).
+-define(wxTreeEvent_SetToolTip, 3428).
+-define(wxNotebookEvent_GetOldSelection, 3429).
+-define(wxNotebookEvent_GetSelection, 3430).
+-define(wxNotebookEvent_SetOldSelection, 3431).
+-define(wxNotebookEvent_SetSelection, 3432).
+-define(wxFileDataObject_new, 3433).
+-define(wxFileDataObject_AddFile, 3434).
+-define(wxFileDataObject_GetFilenames, 3435).
+-define(wxFileDataObject_destroy, 3436).
+-define(wxTextDataObject_new, 3437).
+-define(wxTextDataObject_GetTextLength, 3438).
+-define(wxTextDataObject_GetText, 3439).
+-define(wxTextDataObject_SetText, 3440).
+-define(wxTextDataObject_destroy, 3441).
+-define(wxBitmapDataObject_new_1_1, 3442).
+-define(wxBitmapDataObject_new_1_0, 3443).
+-define(wxBitmapDataObject_GetBitmap, 3444).
+-define(wxBitmapDataObject_SetBitmap, 3445).
+-define(wxBitmapDataObject_destroy, 3446).
+-define(wxClipboard_new, 3448).
+-define(wxClipboard_destruct, 3449).
+-define(wxClipboard_AddData, 3450).
+-define(wxClipboard_Clear, 3451).
+-define(wxClipboard_Close, 3452).
+-define(wxClipboard_Flush, 3453).
+-define(wxClipboard_GetData, 3454).
+-define(wxClipboard_IsOpened, 3455).
+-define(wxClipboard_Open, 3456).
+-define(wxClipboard_SetData, 3457).
+-define(wxClipboard_UsePrimarySelection, 3459).
+-define(wxClipboard_IsSupported, 3460).
+-define(wxClipboard_Get, 3461).
+-define(wxSpinEvent_GetPosition, 3462).
+-define(wxSpinEvent_SetPosition, 3463).
+-define(wxSplitterWindow_new_0, 3464).
+-define(wxSplitterWindow_new_2, 3465).
+-define(wxSplitterWindow_destruct, 3466).
+-define(wxSplitterWindow_Create, 3467).
+-define(wxSplitterWindow_GetMinimumPaneSize, 3468).
+-define(wxSplitterWindow_GetSashGravity, 3469).
+-define(wxSplitterWindow_GetSashPosition, 3470).
+-define(wxSplitterWindow_GetSplitMode, 3471).
+-define(wxSplitterWindow_GetWindow1, 3472).
+-define(wxSplitterWindow_GetWindow2, 3473).
+-define(wxSplitterWindow_Initialize, 3474).
+-define(wxSplitterWindow_IsSplit, 3475).
+-define(wxSplitterWindow_ReplaceWindow, 3476).
+-define(wxSplitterWindow_SetSashGravity, 3477).
+-define(wxSplitterWindow_SetSashPosition, 3478).
+-define(wxSplitterWindow_SetSashSize, 3479).
+-define(wxSplitterWindow_SetMinimumPaneSize, 3480).
+-define(wxSplitterWindow_SetSplitMode, 3481).
+-define(wxSplitterWindow_SplitHorizontally, 3482).
+-define(wxSplitterWindow_SplitVertically, 3483).
+-define(wxSplitterWindow_Unsplit, 3484).
+-define(wxSplitterWindow_UpdateSize, 3485).
+-define(wxSplitterEvent_GetSashPosition, 3486).
+-define(wxSplitterEvent_GetX, 3487).
+-define(wxSplitterEvent_GetY, 3488).
+-define(wxSplitterEvent_GetWindowBeingRemoved, 3489).
+-define(wxSplitterEvent_SetSashPosition, 3490).
+-define(wxHtmlWindow_new_0, 3491).
+-define(wxHtmlWindow_new_2, 3492).
+-define(wxHtmlWindow_AppendToPage, 3493).
+-define(wxHtmlWindow_GetOpenedAnchor, 3494).
+-define(wxHtmlWindow_GetOpenedPage, 3495).
+-define(wxHtmlWindow_GetOpenedPageTitle, 3496).
+-define(wxHtmlWindow_GetRelatedFrame, 3497).
+-define(wxHtmlWindow_HistoryBack, 3498).
+-define(wxHtmlWindow_HistoryCanBack, 3499).
+-define(wxHtmlWindow_HistoryCanForward, 3500).
+-define(wxHtmlWindow_HistoryClear, 3501).
+-define(wxHtmlWindow_HistoryForward, 3502).
+-define(wxHtmlWindow_LoadFile, 3503).
+-define(wxHtmlWindow_LoadPage, 3504).
+-define(wxHtmlWindow_SelectAll, 3505).
+-define(wxHtmlWindow_SelectionToText, 3506).
+-define(wxHtmlWindow_SelectLine, 3507).
+-define(wxHtmlWindow_SelectWord, 3508).
+-define(wxHtmlWindow_SetBorders, 3509).
+-define(wxHtmlWindow_SetFonts, 3510).
+-define(wxHtmlWindow_SetPage, 3511).
+-define(wxHtmlWindow_SetRelatedFrame, 3512).
+-define(wxHtmlWindow_SetRelatedStatusBar, 3513).
+-define(wxHtmlWindow_ToText, 3514).
+-define(wxHtmlWindow_destroy, 3515).
+-define(wxHtmlLinkEvent_GetLinkInfo, 3516).
+-define(wxSystemSettings_GetColour, 3517).
+-define(wxSystemSettings_GetFont, 3518).
+-define(wxSystemSettings_GetMetric, 3519).
+-define(wxSystemSettings_GetScreenType, 3520).
+-define(wxSystemOptions_GetOption, 3521).
+-define(wxSystemOptions_GetOptionInt, 3522).
+-define(wxSystemOptions_HasOption, 3523).
+-define(wxSystemOptions_IsFalse, 3524).
+-define(wxSystemOptions_SetOption_2_1, 3525).
+-define(wxSystemOptions_SetOption_2_0, 3526).
+-define(wxAuiNotebookEvent_SetSelection, 3527).
+-define(wxAuiNotebookEvent_GetSelection, 3528).
+-define(wxAuiNotebookEvent_SetOldSelection, 3529).
+-define(wxAuiNotebookEvent_GetOldSelection, 3530).
+-define(wxAuiNotebookEvent_SetDragSource, 3531).
+-define(wxAuiNotebookEvent_GetDragSource, 3532).
+-define(wxAuiManagerEvent_SetManager, 3533).
+-define(wxAuiManagerEvent_GetManager, 3534).
+-define(wxAuiManagerEvent_SetPane, 3535).
+-define(wxAuiManagerEvent_GetPane, 3536).
+-define(wxAuiManagerEvent_SetButton, 3537).
+-define(wxAuiManagerEvent_GetButton, 3538).
+-define(wxAuiManagerEvent_SetDC, 3539).
+-define(wxAuiManagerEvent_GetDC, 3540).
+-define(wxAuiManagerEvent_Veto, 3541).
+-define(wxAuiManagerEvent_GetVeto, 3542).
+-define(wxAuiManagerEvent_SetCanVeto, 3543).
+-define(wxAuiManagerEvent_CanVeto, 3544).
+-define(wxLogNull_new, 3545).
+-define(wxLogNull_destroy, 3546).
+-define(wxTaskBarIcon_new, 3547).
+-define(wxTaskBarIcon_destruct, 3548).
+-define(wxTaskBarIcon_PopupMenu, 3549).
+-define(wxTaskBarIcon_RemoveIcon, 3550).
+-define(wxTaskBarIcon_SetIcon, 3551).
+-define(wxLocale_new_0, 3552).
+-define(wxLocale_new_2, 3554).
+-define(wxLocale_destruct, 3555).
+-define(wxLocale_Init, 3557).
+-define(wxLocale_AddCatalog_1, 3558).
+-define(wxLocale_AddCatalog_3, 3559).
+-define(wxLocale_AddCatalogLookupPathPrefix, 3560).
+-define(wxLocale_GetCanonicalName, 3561).
+-define(wxLocale_GetLanguage, 3562).
+-define(wxLocale_GetLanguageName, 3563).
+-define(wxLocale_GetLocale, 3564).
+-define(wxLocale_GetName, 3565).
+-define(wxLocale_GetString_2, 3566).
+-define(wxLocale_GetString_4, 3567).
+-define(wxLocale_GetHeaderValue, 3568).
+-define(wxLocale_GetSysName, 3569).
+-define(wxLocale_GetSystemEncoding, 3570).
+-define(wxLocale_GetSystemEncodingName, 3571).
+-define(wxLocale_GetSystemLanguage, 3572).
+-define(wxLocale_IsLoaded, 3573).
+-define(wxLocale_IsOk, 3574).
+-define(wxActivateEvent_GetActive, 3575).
+-define(wxPopupWindow_new_2, 3577).
+-define(wxPopupWindow_new_0, 3578).
+-define(wxPopupWindow_destruct, 3580).
+-define(wxPopupWindow_Create, 3581).
+-define(wxPopupWindow_Position, 3582).
+-define(wxPopupTransientWindow_new_0, 3583).
+-define(wxPopupTransientWindow_new_2, 3584).
+-define(wxPopupTransientWindow_destruct, 3585).
+-define(wxPopupTransientWindow_Popup, 3586).
+-define(wxPopupTransientWindow_Dismiss, 3587).
+-define(wxOverlay_new, 3588).
+-define(wxOverlay_destruct, 3589).
+-define(wxOverlay_Reset, 3590).
+-define(wxDCOverlay_new_6, 3591).
+-define(wxDCOverlay_new_2, 3592).
+-define(wxDCOverlay_destruct, 3593).
+-define(wxDCOverlay_Clear, 3594).
diff --git a/lib/wx/src/wx.app.src b/lib/wx/src/wx.app.src
index 9b9358abf6..92984f13b5 100644
--- a/lib/wx/src/wx.app.src
+++ b/lib/wx/src/wx.app.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/wx.appup.src b/lib/wx/src/wx.appup.src
index aea54f6814..4c7200569f 100644
--- a/lib/wx/src/wx.appup.src
+++ b/lib/wx/src/wx.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/wx.erl b/lib/wx/src/wx.erl
index e9f612edf7..34bf06cf46 100644
--- a/lib/wx/src/wx.erl
+++ b/lib/wx/src/wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -66,7 +66,7 @@
get_env/0,set_env/1, debug/1,
batch/1,foreach/2,map/2,foldl/3,foldr/3,
getObjectType/1, typeCast/2,
- null/0, is_null/1]).
+ null/0, is_null/1, equal/2]).
-export([create_memory/1, get_memory_bin/1,
retain_memory/1, release_memory/1]).
@@ -106,8 +106,8 @@ new() ->
%% Or {silent_start, Bool}, which causes error messages at startup to
%% be suppressed. The latter can be used as a silent test of whether
%% wx is properly installed or not.
--spec new([Option]) -> wx_object() when Option :: {debug, list() | atom()} |
- {silent_start, boolean()}.
+-spec new([Option]) -> wx_object()
+ when Option :: {'debug', list() | atom()} | {'silent_start', boolean()}.
new(Options) when is_list(Options) ->
Debug = proplists:get_value(debug, Options, 0),
SilentStart = proplists:get_value(silent_start, Options, false),
@@ -118,7 +118,7 @@ new(Options) when is_list(Options) ->
null().
%% @doc Stops a wx server.
--spec destroy() -> ok.
+-spec destroy() -> 'ok'.
destroy() ->
wxe_server:stop(),
erase(?WXE_IDENTIFIER),
@@ -136,7 +136,7 @@ get_env() ->
%% @doc Sets the process wx environment, allows this process to use
%% another process wx environment.
--spec set_env(wx_env()) -> ok.
+-spec set_env(wx_env()) -> 'ok'.
set_env(#wx_env{sv=Pid, port=Port} = Env) ->
put(?WXE_IDENTIFIER, Env),
put(opengl_port, Port),
@@ -153,6 +153,10 @@ null() ->
-spec is_null(wx_object()) -> boolean().
is_null(#wx_ref{ref=NULL}) -> NULL =:= 0.
+%% @doc Returns true if both arguments references the same object, false otherwise
+-spec equal(wx_object(), wx_object()) -> boolean().
+equal(#wx_ref{ref=Ref1}, #wx_ref{ref=Ref2}) -> Ref1 =:= Ref2.
+
%% @doc Returns the object type
-spec getObjectType(wx_object()) -> atom().
getObjectType(#wx_ref{type=Type}) ->
@@ -187,7 +191,7 @@ batch(Fun) ->
end.
%% @doc Behaves like {@link //stdlib/lists:foreach/2} but batches wx commands. See {@link batch/1}.
--spec foreach(function(), list()) -> ok.
+-spec foreach(function(), list()) -> 'ok'.
foreach(Fun, List) ->
ok = wxe_util:cast(?BATCH_BEGIN, <<>>),
try lists:foreach(Fun, List)
@@ -263,7 +267,7 @@ get_memory_bin(#wx_mem{bin=Bin, size=Size}) ->
%% @doc Saves the memory from deletion until release_memory/1 is called.
%% If release_memory/1 is not called the memory will not be garbage collected.
--spec retain_memory(wx_memory()) -> ok.
+-spec retain_memory(wx_memory()) -> 'ok'.
retain_memory(#wx_mem{bin=Bin}) ->
wxe_util:send_bin(Bin),
ok = wxe_util:cast(?WXE_BIN_INCR, <<>>);
@@ -275,7 +279,7 @@ retain_memory(Bin) when is_binary(Bin) ->
wxe_util:send_bin(Bin),
ok = wxe_util:cast(?WXE_BIN_INCR, <<>>).
--spec release_memory(wx_memory()) -> ok.
+-spec release_memory(wx_memory()) -> 'ok'.
release_memory(#wx_mem{bin=Bin}) ->
wxe_util:send_bin(Bin),
ok = wxe_util:cast(?WXE_BIN_DECR, <<>>);
@@ -286,8 +290,8 @@ release_memory(Bin) when is_binary(Bin) ->
%% @doc Sets debug level. If debug level is 'verbose' or 'trace'
%% each call is printed on console. If Level is 'driver' each allocated
%% object and deletion is printed on the console.
--spec debug(Level | [Level]) -> ok
- when Level :: none | verbose | trace | driver | integer().
+-spec debug(Level | [Level]) -> 'ok'
+ when Level :: 'none' | 'verbose' | 'trace' | 'driver' | integer().
debug(Debug) ->
Level = calc_level(Debug),
@@ -328,7 +332,7 @@ set_debug(Level) when is_integer(Level) ->
end.
%% @doc Starts a wxErlang demo if examples directory exists and is compiled
--spec demo() -> ok | {error, atom()}.
+-spec demo() -> 'ok' | {'error', atom()}.
demo() ->
Priv = code:priv_dir(wx),
Demo = filename:join([filename:dirname(Priv),examples,demo]),
diff --git a/lib/wx/src/wx_object.erl b/lib/wx/src/wx_object.erl
index 35069425ac..40ee308358 100644
--- a/lib/wx/src/wx_object.erl
+++ b/lib/wx/src/wx_object.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -107,40 +107,41 @@
call/2, call/3,
cast/2,
reply/2,
- get_pid/1
+ get_pid/1,
+ set_pid/2
]).
%% -export([behaviour_info/1]).
-callback init(Args :: term()) ->
- {#wx_ref{}, State :: term()} | {#wx_ref{}, State :: term(), timeout() | hibernate} |
- {stop, Reason :: term()} | ignore.
+ {#wx_ref{}, State :: term()} | {#wx_ref{}, State :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term()} | 'ignore'.
-callback handle_event(Request :: #wx{}, State :: term()) ->
- {noreply, NewState :: term()} |
- {noreply, NewState :: term(), timeout() | hibernate} |
- {stop, Reason :: term(), NewState :: term()}.
+ {'noreply', NewState :: term()} |
+ {'noreply', NewState :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term(), NewState :: term()}.
-callback handle_call(Request :: term(), From :: {pid(), Tag :: term()},
State :: term()) ->
- {reply, Reply :: term(), NewState :: term()} |
- {reply, Reply :: term(), NewState :: term(), timeout() | hibernate} |
- {noreply, NewState :: term()} |
- {noreply, NewState :: term(), timeout() | hibernate} |
- {stop, Reason :: term(), Reply :: term(), NewState :: term()} |
- {stop, Reason :: term(), NewState :: term()}.
+ {'reply', Reply :: term(), NewState :: term()} |
+ {'reply', Reply :: term(), NewState :: term(), timeout() | 'hibernate'} |
+ {'noreply', NewState :: term()} |
+ {'noreply', NewState :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term(), Reply :: term(), NewState :: term()} |
+ {'stop', Reason :: term(), NewState :: term()}.
-callback handle_cast(Request :: term(), State :: term()) ->
- {noreply, NewState :: term()} |
- {noreply, NewState :: term(), timeout() | hibernate} |
- {stop, Reason :: term(), NewState :: term()}.
+ {'noreply', NewState :: term()} |
+ {'noreply', NewState :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term(), NewState :: term()}.
-callback handle_info(Info :: timeout() | term(), State :: term()) ->
- {noreply, NewState :: term()} |
- {noreply, NewState :: term(), timeout() | hibernate} |
- {stop, Reason :: term(), NewState :: term()}.
--callback terminate(Reason :: (normal | shutdown | {shutdown, term()} |
+ {'noreply', NewState :: term()} |
+ {'noreply', NewState :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term(), NewState :: term()}.
+-callback terminate(Reason :: ('normal' | 'shutdown' | {'shutdown', term()} |
term()),
State :: term()) ->
term().
--callback code_change(OldVsn :: (term() | {down, term()}), State :: term(),
+-callback code_change(OldVsn :: (term() | {'down', term()}), State :: term(),
Extra :: term()) ->
- {ok, NewState :: term()} | {error, Reason :: term()}.
+ {'ok', NewState :: term()} | {'error', Reason :: term()}.
%% System exports
@@ -306,6 +307,11 @@ cast(Name, Request) when is_atom(Name) orelse is_pid(Name) ->
get_pid(#wx_ref{state=Pid}) when is_pid(Pid) ->
Pid.
+%% @spec (Ref::wxObject(), pid()) -> wxObject()
+%% @doc Sets the controlling process of the object handle.
+set_pid(#wx_ref{}=R, Pid) when is_pid(Pid) ->
+ R#wx_ref{state=Pid}.
+
%% -----------------------------------------------------------------
%% Send a reply to the client.
%% -----------------------------------------------------------------
diff --git a/lib/wx/src/wxe.hrl b/lib/wx/src/wxe.hrl
index 75bd260d38..da65cb939d 100644
--- a/lib/wx/src/wxe.hrl
+++ b/lib/wx/src/wxe.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/wxe_master.erl b/lib/wx/src/wxe_master.erl
index cdf66aa6d1..e17a3327ac 100644
--- a/lib/wx/src/wxe_master.erl
+++ b/lib/wx/src/wxe_master.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -185,10 +185,10 @@ handle_cast(_Msg, State) ->
%% Description: Handling all non call/cast messages
%%--------------------------------------------------------------------
handle_info({wxe_driver, error, Msg}, State) ->
- error_logger:format("WX ERROR: ~s~n", [Msg]),
+ error_logger:error_report([{wx, error}, {message, lists:flatten(Msg)}]),
{noreply, State};
handle_info({wxe_driver, internal_error, Msg}, State) ->
- error_logger:format("WX INTERNAL ERROR: ~s~n", [Msg]),
+ error_logger:error_report([{wx, internal_error}, {message, lists:flatten(Msg)}]),
{noreply, State};
handle_info({wxe_driver, debug, Msg}, State) ->
io:format("WX DBG: ~s~n", [Msg]),
diff --git a/lib/wx/src/wxe_server.erl b/lib/wx/src/wxe_server.erl
index 693a008e3d..58fcaf8f23 100644
--- a/lib/wx/src/wxe_server.erl
+++ b/lib/wx/src/wxe_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/src/wxe_util.erl b/lib/wx/src/wxe_util.erl
index 398ceddd4f..bbcd9a65ea 100644
--- a/lib/wx/src/wxe_util.erl
+++ b/lib/wx/src/wxe_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -82,9 +82,11 @@ rec(Op) ->
{'_wxe_error_', Op, Error} ->
[{_,MF}] = ets:lookup(wx_debug_info,Op),
erlang:error({Error, MF});
- {'_wxe_error_', Old, Error} ->
- [{_,MF}] = ets:lookup(wx_debug_info,Old),
- erlang:exit({Error, MF})
+ {'_wxe_error_', Old, Error} ->
+ [{_,{M,F,A}}] = ets:lookup(wx_debug_info,Old),
+ Msg = io_lib:format("~p in ~w:~w/~w", [Error, M, F, A]),
+ wxe_master ! {wxe_driver, error, Msg},
+ rec(Op)
end.
construct(Op, Args) ->
diff --git a/lib/wx/test/Makefile b/lib/wx/test/Makefile
index 136cbd5454..9a78307be1 100644
--- a/lib/wx/test/Makefile
+++ b/lib/wx/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2012. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/test/wx_app_SUITE.erl b/lib/wx/test/wx_app_SUITE.erl
index 2d128df433..3fd5bf689d 100644
--- a/lib/wx/test/wx_app_SUITE.erl
+++ b/lib/wx/test/wx_app_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -49,7 +49,7 @@ end_per_testcase(Func,Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() -> [{ct_hooks,[ts_install_cth]}, {timetrap,{minutes,5}}].
all() ->
[fields, modules, exportall, app_depend, undef_funcs, appup].
@@ -221,12 +221,10 @@ check_apps([App|Apps]) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-undef_funcs(suite) ->
- [];
-undef_funcs(doc) ->
- [];
+undef_funcs() ->
+ [{timetrap,{minutes,10}}].
+
undef_funcs(Config) when is_list(Config) ->
- catch test_server:timetrap(timer:minutes(10)),
App = wx,
AppFile = key1search(app_file, Config),
Mods = key1search(modules, AppFile),
diff --git a/lib/wx/test/wx_basic_SUITE.erl b/lib/wx/test/wx_basic_SUITE.erl
index 0b919f6254..6a2528780e 100644
--- a/lib/wx/test/wx_basic_SUITE.erl
+++ b/lib/wx/test/wx_basic_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,7 +45,7 @@ end_per_testcase(Func,Config) ->
wx_test_lib:end_per_testcase(Func,Config).
%% SUITE specification
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() -> [{ct_hooks,[ts_install_cth]}, {timetrap,{minutes,2}}].
all() ->
[silent_start, create_window, several_apps, wx_api, wx_misc,
@@ -192,7 +192,9 @@ wx_api(Config) ->
?m(ok,wxButton:setLabel(Temp, "Testing")),
?m(ok,wxButton:destroy(Temp)),
?m({'EXIT',_},wxButton:getLabel(Temp)),
-
+ ?m(ok,wxButton:setLabel(Temp, "Testing")), %% Should generate an error report
+ ?m({'EXIT',_},wxButton:getLabel(Temp)),
+
case wx_test_lib:user_available(Config) of
true ->
%% Hmm popup doesn't return until mouse is pressed.
@@ -344,13 +346,13 @@ data_types(_Config) ->
ImgRGB = ?mt(wxImage, wxImage:new(128, 64, Colors)),
?m(true, wxImage:ok(ImgRGB)),
?m(false, wxImage:hasAlpha(ImgRGB)),
- ?m(Colors, wxImage:getData(ImgRGB)),
+ ?m(ok, case wxImage:getData(ImgRGB) of Colors -> ok; Other -> Other end),
ImgRGBA = ?mt(wxImage, wxImage:new(128, 64, Colors, Alpha)),
?m(true, wxImage:ok(ImgRGBA)),
?m(true, wxImage:hasAlpha(ImgRGBA)),
- ?m(Colors, wxImage:getData(ImgRGBA)),
- ?m(Alpha, wxImage:getAlpha(ImgRGBA)),
+ ?m(ok, case wxImage:getData(ImgRGBA) of Colors -> ok; Other -> Other end),
+ ?m(ok, case wxImage:getAlpha(ImgRGBA) of Alpha -> ok; Other -> Other end),
wxClientDC:destroy(CDC),
%%wx_test_lib:wx_destroy(Frame,Config).
@@ -361,7 +363,8 @@ wx_object(Config) ->
wx:new(),
Me = self(),
Init = fun() ->
- Frame = wxFrame:new(wx:null(), ?wxID_ANY, "Test wx_object", [{size, {500, 400}}]),
+ Frame0 = wxFrame:new(wx:null(), ?wxID_ANY, "Test wx_object", [{size, {500, 400}}]),
+ Frame = wx_object:set_pid(Frame0, self()),
Sz = wxBoxSizer:new(?wxHORIZONTAL),
Panel = wxPanel:new(Frame),
wxSizer:add(Sz, Panel, [{flag, ?wxEXPAND}, {proportion, 1}]),
@@ -371,6 +374,7 @@ wx_object(Config) ->
{Frame, {Frame, Panel}}
end,
Frame = ?mt(wxFrame, wx_obj_test:start([{init, Init}])),
+
timer:sleep(500),
?m(ok, check_events(flush())),
@@ -378,6 +382,11 @@ wx_object(Config) ->
?m({call, foobar, {Me, _}}, wx_object:call(Frame, foobar)),
?m(ok, wx_object:cast(Frame, foobar2)),
?m([{cast, foobar2}|_], flush()),
+
+ ?m(Frame, wx_obj_test:who_are_you(Frame)),
+ {call, {Frame,Panel}, _} = wx_object:call(Frame, fun(US) -> US end),
+ ?m(false, wxWindow:getParent(Panel) =:= Frame),
+ ?m(true, wx:equal(wxWindow:getParent(Panel),Frame)),
FramePid = wx_object:get_pid(Frame),
io:format("wx_object pid ~p~n",[FramePid]),
FramePid ! foo3,
diff --git a/lib/wx/test/wx_class_SUITE.erl b/lib/wx/test/wx_class_SUITE.erl
index 876db9893f..0a3c4659bf 100644
--- a/lib/wx/test/wx_class_SUITE.erl
+++ b/lib/wx/test/wx_class_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,12 +46,12 @@ end_per_testcase(Func,Config) ->
wx_test_lib:end_per_testcase(Func,Config).
%% SUITE specification
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() -> [{ct_hooks,[ts_install_cth]}, {timetrap,{minutes,2}}].
all() ->
[calendarCtrl, treeCtrl, notebook, staticBoxSizer,
clipboard, helpFrame, htmlWindow, listCtrlSort, listCtrlVirtual,
- radioBox, systemSettings, taskBarIcon, toolbar, popup].
+ radioBox, systemSettings, taskBarIcon, toolbar, popup, modal].
groups() ->
[].
@@ -621,3 +621,70 @@ lang_env() ->
format_env({match, List}) ->
[io:format(" ~ts~n",[L]) || L <- List];
format_env(nomatch) -> ok.
+
+%% Add a testcase that tests that we can recurse in showModal
+%% because it hangs in observer if object are not destroyed correctly
+%% when popping the stack
+
+modal(Config) ->
+ Wx = wx:new(),
+ case {?wxMAJOR_VERSION, ?wxMINOR_VERSION, ?wxRELEASE_NUMBER} of
+ {2, Min, Rel} when Min < 8 orelse (Min =:= 8 andalso Rel < 11) ->
+ {skip, "old wxWidgets version"};
+ _ ->
+ Frame = wxFrame:new(Wx, -1, "Test Modal windows"),
+ wxFrame:show(Frame),
+ Env = wx:get_env(),
+ Tester = self(),
+ ets:new(test_state, [named_table, public]),
+ Upd = wxUpdateUIEvent:getUpdateInterval(),
+ wxUpdateUIEvent:setUpdateInterval(500),
+ _Pid = spawn(fun() ->
+ wx:set_env(Env),
+ modal_dialog(Frame, 1, Tester)
+ end),
+ %% need to sleep so we know that the window is stuck in
+ %% the ShowModal event loop and not in an earlier event loop
+ %% wx2.8 invokes the event loop from more calls than wx-3
+ M1 = receive {dialog, W1, 1} -> timer:sleep(1200), ets:insert(test_state, {W1, ready}), W1 end,
+ M2 = receive {dialog, W2, 2} -> timer:sleep(1200), ets:insert(test_state, {W2, ready}), W2 end,
+
+ receive done -> ok end,
+ receive {dialog_done, M2, 2} -> M2 end,
+ receive {dialog_done, M1, 1} -> M1 end,
+
+ wxUpdateUIEvent:setUpdateInterval(Upd),
+ wx_test_lib:wx_destroy(Frame,Config)
+ end.
+
+modal_dialog(Parent, Level, Tester) when Level < 3 ->
+ M1 = wxTextEntryDialog:new(Parent, "Dialog " ++ integer_to_list(Level)),
+ io:format("Creating dialog ~p ~p~n",[Level, M1]),
+ wxDialog:connect(M1, show, [{callback, fun(#wx{event=Ev},_) ->
+ case Ev of
+ #wxShow{show=true} ->
+ Tester ! {dialog, M1, Level};
+ _ -> ignore
+ end
+ end}]),
+ DoOnce = fun(_,_) ->
+ case ets:take(test_state, M1) of
+ [] -> ignore;
+ [_] -> modal_dialog(M1, Level+1, Tester)
+ end
+ end,
+ wxDialog:connect(M1, update_ui, [{callback, DoOnce}]),
+ ?wxID_OK = wxDialog:showModal(M1),
+ wxDialog:destroy(M1),
+ case Level > 1 of
+ true ->
+ io:format("~p: End dialog ~p ~p~n",[?LINE, Level-1, Parent]),
+ wxDialog:endModal(Parent, ?wxID_OK);
+ false -> ok
+ end,
+ Tester ! {dialog_done, M1, Level},
+ ok;
+modal_dialog(Parent, Level, Tester) ->
+ io:format("~p: End dialog ~p ~p~n",[?LINE, Level-1, Parent]),
+ wxDialog:endModal(Parent, ?wxID_OK),
+ Tester ! done.
diff --git a/lib/wx/test/wx_event_SUITE.erl b/lib/wx/test/wx_event_SUITE.erl
index 516133e3e2..6512cedaf2 100644
--- a/lib/wx/test/wx_event_SUITE.erl
+++ b/lib/wx/test/wx_event_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@ end_per_testcase(Func,Config) ->
wx_test_lib:end_per_testcase(Func,Config).
%% SUITE specification
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() -> [{ct_hooks,[ts_install_cth]}, {timetrap,{minutes,2}}].
all() ->
[connect, disconnect, disconnect_cb, connect_msg_20, connect_cb_20,
diff --git a/lib/wx/test/wx_obj_test.erl b/lib/wx/test/wx_obj_test.erl
index 068e59f243..23142e28b2 100644
--- a/lib/wx/test/wx_obj_test.erl
+++ b/lib/wx/test/wx_obj_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,13 +19,13 @@
-module(wx_obj_test).
-include_lib("wx/include/wx.hrl").
--export([start/1, stop/1]).
+-export([start/1, stop/1, who_are_you/1]).
%% wx_object callbacks
-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
handle_sync_event/3, handle_event/2, handle_cast/2]).
--record(state, {parent, opts, user_state}).
+-record(state, {parent, me, opts, user_state}).
start(Opts) ->
wx_object:start_link(?MODULE, [{parent, self()}| Opts], []).
@@ -33,12 +33,15 @@ start(Opts) ->
stop(Object) ->
wx_object:stop(Object).
+who_are_you(Object) ->
+ wx_object:call(Object, who_are_you).
+
init(Opts) ->
Parent = proplists:get_value(parent, Opts),
put(parent_pid, Parent),
Init = proplists:get_value(init, Opts),
{Obj, UserState} = Init(),
- {Obj, #state{parent=Parent, opts=Opts, user_state=UserState}}.
+ {Obj, #state{me=Obj, parent=Parent, opts=Opts, user_state=UserState}}.
handle_sync_event(Event = #wx{obj=Panel, event=#wxPaint{}},
WxEvent, #state{parent=Parent, user_state=US, opts=Opts}) ->
@@ -59,6 +62,8 @@ handle_event(Event, State = #state{parent=Parent}) ->
Parent ! {event, Event},
{noreply, State}.
+handle_call(who_are_you, _From, State = #state{me=Me}) ->
+ {reply, Me, State};
handle_call(What, From, State = #state{user_state=US}) when is_function(What) ->
Result = What(US),
{reply, {call, Result, From}, State};
diff --git a/lib/wx/test/wx_opengl_SUITE.erl b/lib/wx/test/wx_opengl_SUITE.erl
index 5d6da4240d..643a0df6a3 100644
--- a/lib/wx/test/wx_opengl_SUITE.erl
+++ b/lib/wx/test/wx_opengl_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ end_per_testcase(Func,Config) ->
wx_test_lib:end_per_testcase(Func,Config).
%% SUITE specification
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() -> [{ct_hooks,[ts_install_cth]}, {timetrap,{minutes,2}}].
all() ->
[canvas, glu_tesselation].
diff --git a/lib/wx/test/wx_test_lib.erl b/lib/wx/test/wx_test_lib.erl
index 423e371fbb..9f26b8cb9d 100644
--- a/lib/wx/test/wx_test_lib.erl
+++ b/lib/wx/test/wx_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/test/wx_test_lib.hrl b/lib/wx/test/wx_test_lib.hrl
index d7ca98629a..68fdcf54e2 100644
--- a/lib/wx/test/wx_test_lib.hrl
+++ b/lib/wx/test/wx_test_lib.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/wx/test/wx_xtra_SUITE.erl b/lib/wx/test/wx_xtra_SUITE.erl
index 42f4fe53f6..c6268a7f46 100644
--- a/lib/wx/test/wx_xtra_SUITE.erl
+++ b/lib/wx/test/wx_xtra_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -45,7 +45,7 @@ end_per_testcase(Func,Config) ->
wx_test_lib:end_per_testcase(Func,Config).
%% SUITE specification
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() -> [{ct_hooks,[ts_install_cth]}, {timetrap,{minutes,2}}].
all() ->
[destroy_app, multiple_add_in_sizer, app_dies,
diff --git a/lib/wx/test/wxt b/lib/wx/test/wxt
index 700c0a432b..e720ed94f4 100755
--- a/lib/wx/test/wxt
+++ b/lib/wx/test/wxt
@@ -2,7 +2,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2009. All Rights Reserved.
+# Copyright Ericsson AB 2008-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/wx/test/wxt.erl b/lib/wx/test/wxt.erl
index 57529d4876..265cd5c981 100644
--- a/lib/wx/test/wxt.erl
+++ b/lib/wx/test/wxt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -16,13 +16,9 @@
%% limitations under the License.
%%
%% %CopyrightEnd%
-%%%-------------------------------------------------------------------
-%%% File : wxt.erl
-%%% Author : Dan Gudmundsson <[email protected]>
-%%% Description : Shortcuts for starting test with wx internal test_server
-%%%
-%%% Created : 4 Nov 2008 by Dan Gudmundsson <[email protected]>
-%%%-------------------------------------------------------------------
+%%
+%% Description : Shortcuts for running tests with wx internal test_server
+%%-------------------------------------------------------------------
-module(wxt).
-compile(export_all).
@@ -40,7 +36,7 @@ t(Mod, TC) when is_atom(Mod), is_atom(TC) ->
t({Mod,TC}, []);
t(all, Config) when is_list(Config) ->
Fs = filelib:wildcard("wx_*_SUITE.erl"),
- t([list_to_atom(filename:rootname(File)) || File <- Fs], Config);
+ t([list_to_atom(filename:rootname(File)) || File <- Fs, File =/= "wx_app_SUITE.erl"], Config);
t(Test,Config) when is_list(Config) ->
Tests = resolve(Test),
write_test_case(Test),
diff --git a/lib/wx/vsn.mk b/lib/wx/vsn.mk
index de723b2a2d..de4e5e1935 100644
--- a/lib/wx/vsn.mk
+++ b/lib/wx/vsn.mk
@@ -1 +1 @@
-WX_VSN = 1.6.1
+WX_VSN = 1.7
diff --git a/lib/xmerl/doc/src/Makefile b/lib/xmerl/doc/src/Makefile
index 5c39355278..2465217e8e 100644
--- a/lib/xmerl/doc/src/Makefile
+++ b/lib/xmerl/doc/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/doc/src/book.xml b/lib/xmerl/doc/src/book.xml
index 012a62c505..63b53f5811 100644
--- a/lib/xmerl/doc/src/book.xml
+++ b/lib/xmerl/doc/src/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/xmerl/doc/src/notes.xml b/lib/xmerl/doc/src/notes.xml
index 55367eb25e..0abcb87998 100644
--- a/lib/xmerl/doc/src/notes.xml
+++ b/lib/xmerl/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,6 +32,21 @@
<p>This document describes the changes made to the Xmerl application.</p>
+<section><title>Xmerl 1.3.11</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Internal changes</p>
+ <p>
+ Own Id: OTP-13551</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Xmerl 1.3.10</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/xmerl/doc/src/notes_history.xml b/lib/xmerl/doc/src/notes_history.xml
index 02d420c849..d4e560a336 100644
--- a/lib/xmerl/doc/src/notes_history.xml
+++ b/lib/xmerl/doc/src/notes_history.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2006</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/xmerl/doc/src/part.xml b/lib/xmerl/doc/src/part.xml
index e672bdc3f2..710a968212 100644
--- a/lib/xmerl/doc/src/part.xml
+++ b/lib/xmerl/doc/src/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/xmerl/doc/src/part_notes.xml b/lib/xmerl/doc/src/part_notes.xml
index a7c89ec560..4ed441c7d4 100644
--- a/lib/xmerl/doc/src/part_notes.xml
+++ b/lib/xmerl/doc/src/part_notes.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/xmerl/doc/src/ref_man.xml b/lib/xmerl/doc/src/ref_man.xml
index 8805f04fbc..cd41243fcb 100644
--- a/lib/xmerl/doc/src/ref_man.xml
+++ b/lib/xmerl/doc/src/ref_man.xml
@@ -4,7 +4,7 @@
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/xmerl/doc/src/xmerl_sax_parser.xml b/lib/xmerl/doc/src/xmerl_sax_parser.xml
index 2251be00bb..8ea197e209 100644
--- a/lib/xmerl/doc/src/xmerl_sax_parser.xml
+++ b/lib/xmerl/doc/src/xmerl_sax_parser.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2008</year>
- <year>2013</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/lib/xmerl/doc/src/xmerl_ug.xmlsrc b/lib/xmerl/doc/src/xmerl_ug.xmlsrc
index 5d1408b54c..e4aeaddc78 100644
--- a/lib/xmerl/doc/src/xmerl_ug.xmlsrc
+++ b/lib/xmerl/doc/src/xmerl_ug.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/lib/xmerl/include/xmerl.hrl b/lib/xmerl/include/xmerl.hrl
index 7d37241116..1e13255a49 100644
--- a/lib/xmerl/include/xmerl.hrl
+++ b/lib/xmerl/include/xmerl.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/Makefile b/lib/xmerl/src/Makefile
index f8f0320f46..51d9190797 100644
--- a/lib/xmerl/src/Makefile
+++ b/lib/xmerl/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2003-2012. All Rights Reserved.
+# Copyright Ericsson AB 2003-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl.appup.src b/lib/xmerl/src/xmerl.appup.src
index 388e4d8a86..e8012d8f36 100644
--- a/lib/xmerl/src/xmerl.appup.src
+++ b/lib/xmerl/src/xmerl.appup.src
@@ -1,7 +1,7 @@
%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2014. All Rights Reserved.
+%% Copyright Ericsson AB 2014-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl.erl b/lib/xmerl/src/xmerl.erl
index 7c8c6c56f4..32dad69166 100644
--- a/lib/xmerl/src/xmerl.erl
+++ b/lib/xmerl/src/xmerl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_b64Bin.yrl b/lib/xmerl/src/xmerl_b64Bin.yrl
index 46cf23ef34..7028cc079c 100644
--- a/lib/xmerl/src/xmerl_b64Bin.yrl
+++ b/lib/xmerl/src/xmerl_b64Bin.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_b64Bin_scan.erl b/lib/xmerl/src/xmerl_b64Bin_scan.erl
index 50ac5c05c2..9afe49fffe 100644
--- a/lib/xmerl/src/xmerl_b64Bin_scan.erl
+++ b/lib/xmerl/src/xmerl_b64Bin_scan.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_eventp.erl b/lib/xmerl/src/xmerl_eventp.erl
index 243f47f159..2cb76abc6e 100644
--- a/lib/xmerl/src/xmerl_eventp.erl
+++ b/lib/xmerl/src/xmerl_eventp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -199,7 +199,7 @@ cont2(F, Exception, Sofar, Fd, Fname, T, S) ->
find_good_split(list_to_binary([Sofar,Bin]),
F,Exception,Fd,Fname,T,S);
eof ->
- file:close(Fd),
+ ok = file:close(Fd),
NewS = xmerl_scan:cont_state([{Fname, eof}|T], S),
F(binary_to_list(Sofar), NewS);
Error ->
@@ -319,7 +319,7 @@ close(S) ->
[{_Fname, eof}|T] ->
xmerl_scan:cont_state(T, S);
[{_Sofar, _Fname, Fd}|T] ->
- file:close(Fd),
+ ok = file:close(Fd),
xmerl_scan:cont_state(T, S)
end.
diff --git a/lib/xmerl/src/xmerl_html.erl b/lib/xmerl/src/xmerl_html.erl
index 1c38ed111a..cb72eb4185 100644
--- a/lib/xmerl/src/xmerl_html.erl
+++ b/lib/xmerl/src/xmerl_html.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_internal.hrl b/lib/xmerl/src/xmerl_internal.hrl
index cbdfa4f673..e913159967 100644
--- a/lib/xmerl/src/xmerl_internal.hrl
+++ b/lib/xmerl/src/xmerl_internal.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_lib.erl b/lib/xmerl/src/xmerl_lib.erl
index a2d6a88c18..be0e28e62d 100644
--- a/lib/xmerl/src/xmerl_lib.erl
+++ b/lib/xmerl/src/xmerl_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_otpsgml.erl b/lib/xmerl/src/xmerl_otpsgml.erl
index bd6ac33997..cbd13263f6 100644
--- a/lib/xmerl/src/xmerl_otpsgml.erl
+++ b/lib/xmerl/src/xmerl_otpsgml.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_regexp.erl b/lib/xmerl/src/xmerl_regexp.erl
index 2b4696f8d2..fc89b80ff1 100644
--- a/lib/xmerl/src/xmerl_regexp.erl
+++ b/lib/xmerl/src/xmerl_regexp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_old_dom.erl b/lib/xmerl/src/xmerl_sax_old_dom.erl
index 2a1e5f6df8..fefcf03fce 100644
--- a/lib/xmerl/src/xmerl_sax_old_dom.erl
+++ b/lib/xmerl/src/xmerl_sax_old_dom.erl
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_old_dom.hrl b/lib/xmerl/src/xmerl_sax_old_dom.hrl
index 04c9253e83..923b59cd10 100644
--- a/lib/xmerl/src/xmerl_sax_old_dom.hrl
+++ b/lib/xmerl/src/xmerl_sax_old_dom.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_parser.erl b/lib/xmerl/src/xmerl_sax_parser.erl
index 6924db6c15..318a0cf7f4 100644
--- a/lib/xmerl/src/xmerl_sax_parser.erl
+++ b/lib/xmerl/src/xmerl_sax_parser.erl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,17 +32,13 @@
%%----------------------------------------------------------------------
%% External exports
%%----------------------------------------------------------------------
--export([
- file/2,
- stream/2
- ]).
+-export([file/2,
+ stream/2]).
%%----------------------------------------------------------------------
%% Internal exports
%%----------------------------------------------------------------------
--export([
- default_continuation_cb/1
- ]).
+-export([default_continuation_cb/1]).
%%----------------------------------------------------------------------
%% Macros
@@ -81,7 +77,7 @@ file(Name,Options) ->
{current_location, CL},
{entity, File}
|Options]),
- file:close(FD),
+ ok = file:close(FD),
Res
end.
diff --git a/lib/xmerl/src/xmerl_sax_parser.hrl b/lib/xmerl/src/xmerl_sax_parser.hrl
index e7067e7629..932ab0cec5 100644
--- a/lib/xmerl/src/xmerl_sax_parser.hrl
+++ b/lib/xmerl/src/xmerl_sax_parser.hrl
@@ -1,7 +1,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_parser_base.erlsrc b/lib/xmerl/src/xmerl_sax_parser_base.erlsrc
index 2c5caab07b..4d75805b9b 100644
--- a/lib/xmerl/src/xmerl_sax_parser_base.erlsrc
+++ b/lib/xmerl/src/xmerl_sax_parser_base.erlsrc
@@ -1,7 +1,7 @@
%%-*-erlang-*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -29,12 +29,10 @@
%%----------------------------------------------------------------------
%% External exports
%%----------------------------------------------------------------------
--export([
- parse/2,
+-export([parse/2,
parse_dtd/2,
is_name_char/1,
- is_name_start/1
- ]).
+ is_name_start/1]).
%%----------------------------------------------------------------------
%% Internal exports
@@ -1681,7 +1679,7 @@ handle_external_entity({file, FileToOpen}, State) ->
current_location=filename:dirname(FileToOpen),
entity=filename:basename(FileToOpen),
input_type=file}),
- file:close(FD),
+ ok = file:close(FD),
EntityState#xmerl_sax_parser_state.event_state
end;
handle_external_entity({http, Url}, State) ->
@@ -1700,8 +1698,8 @@ handle_external_entity({http, Url}, State) ->
current_location=filename:dirname(Url),
entity=filename:basename(Url),
input_type=file}),
- file:close(FD),
- file:delete(TmpFile),
+ ok = file:close(FD),
+ ok = file:delete(TmpFile),
EntityState#xmerl_sax_parser_state.event_state
end
catch
@@ -3471,17 +3469,17 @@ http_get_file(Host, Port, Key) ->
receive_msg(Socket, FD, true, SendTimeout)
catch
throw:{error, Error} ->
- file:close(FD),
- file:delete(Filename),
+ ok = file:close(FD),
+ ok = file:delete(Filename),
throw({error, Error})
end;
{error, _Reason} ->
- file:close(FD),
- file:delete(Filename),
+ ok = file:close(FD),
+ ok = file:delete(Filename),
throw({error, lists:flatten(io_lib:format("Couldn't fetch http://~s:~p/~s",
[Host, Port, Key]))})
end,
- file:close(FD),
+ ok = file:close(FD),
Filename.
%%----------------------------------------------------------------------
@@ -3498,11 +3496,11 @@ receive_msg(Socket, FD, WaitForHeader, Timeout) ->
{tcp_closed, Socket} ->
ok;
{tcp, Socket, Response} when WaitForHeader == false ->
- file:write(FD, Response),
+ ok = file:write(FD, Response),
receive_msg(Socket, FD, WaitForHeader, Timeout);
{tcp, Socket, Response} ->
MsgBody = remove_header(Response),
- file:write(FD, MsgBody),
+ ok = file:write(FD, MsgBody),
receive_msg(Socket, FD, false, Timeout);
{tcp_error, Socket, _Reason} ->
gen_tcp:close(Socket),
diff --git a/lib/xmerl/src/xmerl_sax_parser_latin1.erlsrc b/lib/xmerl/src/xmerl_sax_parser_latin1.erlsrc
index 3361ae837c..961806bf4c 100644
--- a/lib/xmerl/src/xmerl_sax_parser_latin1.erlsrc
+++ b/lib/xmerl/src/xmerl_sax_parser_latin1.erlsrc
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_parser_list.erlsrc b/lib/xmerl/src/xmerl_sax_parser_list.erlsrc
index ce0fdc4e7b..624a621d92 100644
--- a/lib/xmerl/src/xmerl_sax_parser_list.erlsrc
+++ b/lib/xmerl/src/xmerl_sax_parser_list.erlsrc
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_parser_utf16be.erlsrc b/lib/xmerl/src/xmerl_sax_parser_utf16be.erlsrc
index 8b1d36eae3..ff84ece97a 100644
--- a/lib/xmerl/src/xmerl_sax_parser_utf16be.erlsrc
+++ b/lib/xmerl/src/xmerl_sax_parser_utf16be.erlsrc
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_parser_utf16le.erlsrc b/lib/xmerl/src/xmerl_sax_parser_utf16le.erlsrc
index 63cfa11bf4..a330fce8d0 100644
--- a/lib/xmerl/src/xmerl_sax_parser_utf16le.erlsrc
+++ b/lib/xmerl/src/xmerl_sax_parser_utf16le.erlsrc
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_parser_utf8.erlsrc b/lib/xmerl/src/xmerl_sax_parser_utf8.erlsrc
index b827086a2e..d46d60d237 100644
--- a/lib/xmerl/src/xmerl_sax_parser_utf8.erlsrc
+++ b/lib/xmerl/src/xmerl_sax_parser_utf8.erlsrc
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_sax_simple_dom.erl b/lib/xmerl/src/xmerl_sax_simple_dom.erl
index 2ce2f03827..7eb3afd499 100644
--- a/lib/xmerl/src/xmerl_sax_simple_dom.erl
+++ b/lib/xmerl/src/xmerl_sax_simple_dom.erl
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_scan.erl b/lib/xmerl/src/xmerl_scan.erl
index 829716dcdb..2147a46a13 100644
--- a/lib/xmerl/src/xmerl_scan.erl
+++ b/lib/xmerl/src/xmerl_scan.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -605,7 +605,7 @@ scan_document(Str0, S=#xmerl_scanner{event_fun = Event,
schema ->
case schemaLocations(Res, S5) of
{ok, Schemas} ->
- cleanup(S5),
+ _ = cleanup(S5),
%%?dbg("Schemas: ~p~nRes: ~p~ninhertih_options(S): ~p~n",
%% [Schemas,Res,inherit_options(S5)]),
XSDRes = xmerl_xsd:process_validate(Schemas, Res,
diff --git a/lib/xmerl/src/xmerl_sgml.erl b/lib/xmerl/src/xmerl_sgml.erl
index 6c0ee55448..0d73df1e02 100644
--- a/lib/xmerl/src/xmerl_sgml.erl
+++ b/lib/xmerl/src/xmerl_sgml.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_simple.erl b/lib/xmerl/src/xmerl_simple.erl
index 32479066cd..4ad939abe0 100644
--- a/lib/xmerl/src/xmerl_simple.erl
+++ b/lib/xmerl/src/xmerl_simple.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_text.erl b/lib/xmerl/src/xmerl_text.erl
index 459c7d4562..eb1df6e5d3 100644
--- a/lib/xmerl/src/xmerl_text.erl
+++ b/lib/xmerl/src/xmerl_text.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_ucs.erl b/lib/xmerl/src/xmerl_ucs.erl
index f93d1d15c4..4b1fc30089 100644
--- a/lib/xmerl/src/xmerl_ucs.erl
+++ b/lib/xmerl/src/xmerl_ucs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_uri.erl b/lib/xmerl/src/xmerl_uri.erl
index 78278fba63..aa5a09ce56 100644
--- a/lib/xmerl/src/xmerl_uri.erl
+++ b/lib/xmerl/src/xmerl_uri.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_validate.erl b/lib/xmerl/src/xmerl_validate.erl
index 87b9a43ce9..8b4f5b91a2 100644
--- a/lib/xmerl/src/xmerl_validate.erl
+++ b/lib/xmerl/src/xmerl_validate.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_xlate.erl b/lib/xmerl/src/xmerl_xlate.erl
index 6bfd9595f0..181faa343d 100644
--- a/lib/xmerl/src/xmerl_xlate.erl
+++ b/lib/xmerl/src/xmerl_xlate.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_xml.erl b/lib/xmerl/src/xmerl_xml.erl
index 914bbad6be..28802666a4 100644
--- a/lib/xmerl/src/xmerl_xml.erl
+++ b/lib/xmerl/src/xmerl_xml.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_xpath.erl b/lib/xmerl/src/xmerl_xpath.erl
index 97ae3a1971..bbebda1030 100644
--- a/lib/xmerl/src/xmerl_xpath.erl
+++ b/lib/xmerl/src/xmerl_xpath.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_xpath_lib.erl b/lib/xmerl/src/xmerl_xpath_lib.erl
index 873fc41c4b..1660d7e91f 100644
--- a/lib/xmerl/src/xmerl_xpath_lib.erl
+++ b/lib/xmerl/src/xmerl_xpath_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_xpath_parse.yrl b/lib/xmerl/src/xmerl_xpath_parse.yrl
index 14a8c27352..1926e7ee84 100644
--- a/lib/xmerl/src/xmerl_xpath_parse.yrl
+++ b/lib/xmerl/src/xmerl_xpath_parse.yrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_xpath_pred.erl b/lib/xmerl/src/xmerl_xpath_pred.erl
index 582a4e4091..7105fb8bbf 100644
--- a/lib/xmerl/src/xmerl_xpath_pred.erl
+++ b/lib/xmerl/src/xmerl_xpath_pred.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_xpath_scan.erl b/lib/xmerl/src/xmerl_xpath_scan.erl
index 53d6032475..9032a01eca 100644
--- a/lib/xmerl/src/xmerl_xpath_scan.erl
+++ b/lib/xmerl/src/xmerl_xpath_scan.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -286,13 +286,13 @@ strip_ws(T) ->
T.
-special_token('@') -> true;
+%% special_token('@') -> true;
special_token('::') -> true;
special_token(',') -> true;
special_token('(') -> true;
special_token('[') -> true;
special_token('/') -> true;
-special_token('//') -> true;
+%% special_token('//') -> true;
special_token('|') -> true;
special_token('+') -> true;
special_token('-') -> true;
@@ -306,5 +306,4 @@ special_token('and') -> true;
special_token('or') -> true;
special_token('mod') -> true;
special_token('div') -> true;
-special_token(_) ->
- false.
+special_token(_) -> false.
diff --git a/lib/xmerl/src/xmerl_xs.erl b/lib/xmerl/src/xmerl_xs.erl
index 2a8e221e16..3e9f6622b8 100644
--- a/lib/xmerl/src/xmerl_xs.erl
+++ b/lib/xmerl/src/xmerl_xs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
diff --git a/lib/xmerl/src/xmerl_xsd.erl b/lib/xmerl/src/xmerl_xsd.erl
index 3038a54ee6..4b5efae8dd 100644
--- a/lib/xmerl/src/xmerl_xsd.erl
+++ b/lib/xmerl/src/xmerl_xsd.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -64,12 +64,10 @@
%%----------------------------------------------------------------------
%% External exports
%%----------------------------------------------------------------------
--export([
- validate/2,validate/3,process_validate/2,process_validate/3,
+-export([validate/2,validate/3,process_validate/2,process_validate/3,
process_schema/1,process_schema/2,
process_schemas/1,process_schemas/2,
- state2file/1,state2file/2,file2state/1,format_error/1
- ]).
+ state2file/1,state2file/2,file2state/1,format_error/1]).
%%----------------------------------------------------------------------
%% Internal exports
@@ -550,7 +548,7 @@ element_content({attribute,S=#xsd_state{scope=Scope}},Att,Env) ->
{AttRef,add_ref(S,AttRef)};
Name ->
{AttrType,S2} = attribute_type(Att,[Name|Env],S),
- S3 = check_cm(attribute,allowed_content(attribute,Env),AttrType,S2),
+ S3 = check_cm(attribute,allowed_content(attribute,Env),AttrType,S2),
{Attr,S4} = attribute_properties(Att#xmlElement.attributes,
#schema_attribute{type=AttrType},S3),
Object = {attribute,
@@ -568,7 +566,7 @@ element_content({element,S},El,Env) ->
%% 3.3.3 bullet 2.2
S3 = element_forbidden_properties(El,S2),
S4 = element_forbidden_content(El#xmlElement.content,S3),
- ElRef =
+ ElRef =
{element,
{get_QName(Ref,El#xmlElement.namespace,reset_scope(S)),
Occ}},
@@ -813,7 +811,6 @@ element_content({restriction,S},R,Env) ->
%% base (resolved by base_type/1) or the type defined in content.
{CM,S2} = type(R#xmlElement.content,S,[restriction|Env]),
S3 = check_cm(restriction,allowed_content(restriction,Env),CM,S2),
-
{BaseTypeName,CM2,S4} = restriction_base_type(R,CM,S3), %% a QName
%% S5 = add_circularity_mark(BaseTypeName,S4),
BaseTypeType = base_type_type(Env),
@@ -1178,7 +1175,7 @@ rename_redef_group(Name={LN,Scope,NS},S) ->
NewName = {LN,['#redefine'|Scope],NS},
case resolve({group,NewName},S) of
{SG=#schema_group{name=Name},_} ->
- save_object({group,SG#schema_group{name=NewName}},S),
+ _ = save_object({group,SG#schema_group{name=NewName}},S),
NewName;
_ ->
failed
@@ -1735,20 +1732,20 @@ allowed_content(SorC,_Parents) when SorC==sequence;SorC==choice ->
{choice,{1,1}},{sequence,{1,1}},
{any,{1,1}}],
occurance={0,unbounded}}]};
-allowed_content(E,_Parents)
- when E==any;E==selector;E==field;E==notation;E==include;E==import;
- E==anyAttribute ->
- {annotation,{0,1}};
-allowed_content(UKK,_Parents) when UKK==unique;UKK==key;UKK==keyref->
- #chain{content=
- [{annotation,{0,1}},
- #chain{content=
- [{selector,{1,1}},{selector,{1,unbounded}}]}]};
-allowed_content(annotation,_Parents) ->
- #alternative{content=[{appinfo,{1,1}},{documentation,{1,1}}],
- occurance={0,unbounded}};
-allowed_content(E,_Parents) when E==appinfo;E==documentation ->
- {any,{0,unbounded}};
+%% allowed_content(E,_Parents)
+%% when E==any;E==selector;E==field;E==notation;E==include;E==import;
+%% E==anyAttribute ->
+%% {annotation,{0,1}};
+%% allowed_content(UKK,_Parents) when UKK==unique;UKK==key;UKK==keyref->
+%% #chain{content=
+%% [{annotation,{0,1}},
+%% #chain{content=
+%% [{selector,{1,1}},{selector,{1,unbounded}}]}]};
+%% allowed_content(annotation,_Parents) ->
+%% #alternative{content=[{appinfo,{1,1}},{documentation,{1,1}}],
+%% occurance={0,unbounded}};
+%% allowed_content(E,_Parents) when E==appinfo;E==documentation ->
+%% {any,{0,unbounded}};
allowed_content(simpleType,_Parents) ->
#chain{content=
[{annotation,{0,1}},
@@ -1768,22 +1765,22 @@ allowed_content(restriction,Parents) ->
end;
allowed_content(LU,_Parent) when LU==list;LU==union ->
#chain{content=[{annotation,{0,1}},{simpleType,{0,1}}]};
-allowed_content(schema,_) ->
- #chain{content=
- [#alternative{content=
- [{include,{1,1}},{import,{1,1}},
- {redefine,{1,1}},{annotation,{1,1}}],
- occurance={0,1}},
- #chain{content=
- [#alternative{content=
- [#alternative{content=
- [{simpleType,{1,1}},{complexType,{1,1}},
- {group,{1,1}},{attributeGroup,{1,1}}]},
- {element,{1,1}},
- {attribute,{1,1}},
- {notation,{1,1}}]},
- {annotation,{0,unbounded}}],
- occurance={0,unbounded}}]};
+%% allowed_content(schema,_) ->
+%% #chain{content=
+%% [#alternative{content=
+%% [{include,{1,1}},{import,{1,1}},
+%% {redefine,{1,1}},{annotation,{1,1}}],
+%% occurance={0,1}},
+%% #chain{content=
+%% [#alternative{content=
+%% [#alternative{content=
+%% [{simpleType,{1,1}},{complexType,{1,1}},
+%% {group,{1,1}},{attributeGroup,{1,1}}]},
+%% {element,{1,1}},
+%% {attribute,{1,1}},
+%% {notation,{1,1}}]},
+%% {annotation,{0,unbounded}}],
+%% occurance={0,unbounded}}]};
allowed_content(redefine,_Parents) ->
#alternative{content=
[{annotation,{1,1}},
@@ -1803,31 +1800,31 @@ allowed_content(extension,Parents) ->
allowed_content2(extension,simpleContent);
_ ->
allowed_content2(extension,complexContent)
- end;
-allowed_content(minExclusive,_Parents) ->
- [];
-allowed_content(minInclusive,_Parents) ->
- [];
-allowed_content(maxExclusive,_Parents) ->
- [];
-allowed_content(maxInclusive,_Parents) ->
- [];
-allowed_content(totalDigits,_Parents) ->
- [];
-allowed_content(fractionDigits,_Parents) ->
- [];
-allowed_content(length,_Parents) ->
- [];
-allowed_content(minLength,_Parents) ->
- [];
-allowed_content(maxLength,_Parents) ->
- [];
-allowed_content(enumeration,_Parents) ->
- [];
-allowed_content(whiteSpace,_Parents) ->
- [];
-allowed_content(pattern,_Parents) ->
- [].
+ end.
+%% allowed_content(minExclusive,_Parents) ->
+%% [];
+%% allowed_content(minInclusive,_Parents) ->
+%% [];
+%% allowed_content(maxExclusive,_Parents) ->
+%% [];
+%% allowed_content(maxInclusive,_Parents) ->
+%% [];
+%% allowed_content(totalDigits,_Parents) ->
+%% [];
+%% allowed_content(fractionDigits,_Parents) ->
+%% [];
+%% allowed_content(length,_Parents) ->
+%% [];
+%% allowed_content(minLength,_Parents) ->
+%% [];
+%% allowed_content(maxLength,_Parents) ->
+%% [];
+%% allowed_content(enumeration,_Parents) ->
+%% [];
+%% allowed_content(whiteSpace,_Parents) ->
+%% [];
+%% allowed_content(pattern,_Parents) ->
+%% [].
@@ -1905,9 +1902,9 @@ set_occurance(Ch = #chain{},Occ) ->
set_occurance(Alt = #alternative{},Occ) ->
Alt#alternative{occurance=Occ};
set_occurance({Name,_},Occ) when is_atom(Name) ->
- {Name,Occ};
-set_occurance(CM,_) ->
- CM.
+ {Name,Occ}.
+%% set_occurance(CM,_) ->
+%% CM.
process_external_schema_once(E,Namespace,S) when is_record(E,xmlElement) ->
@@ -3436,7 +3433,7 @@ check_keys([Key=#id_constraint{selector={selector,SelectorPath},
{L,S1} when length(L)==length(TargetNodeSet) ->
%% Part1: 3.11.4.4.2.1
S2 = key_sequence_uniqueness(L,XMLEl,S1),
- save_key(Key#id_constraint{key_sequence=L},S2),
+ _ = save_key(Key#id_constraint{key_sequence=L},S2),
S2;
{Err,S1} ->
acc_errs(S1,{error_path(XMLEl,XMLEl#xmlElement.name),?MODULE,
@@ -4014,7 +4011,7 @@ merge_derived_types(XSDType,InstType,Blocks,Mode,S) ->
{error,S2} ->
{InstType,S2};
{MergedType,S2} ->
- save_merged_type(MergedType,S2),
+ _ = save_merged_type(MergedType,S2),
{MergedType,S2}
end.
@@ -4970,7 +4967,7 @@ save_schema_element(CM,S=#xsd_state{elementFormDefault = EFD,
undefined -> [];
_ -> TN
end,
- save_in_table({schema,TN2},Schema2,S),
+ _ = save_in_table({schema,TN2},Schema2,S),
save_to_file(S).
%% other_global_elements(S,ElementList) ->
@@ -5006,13 +5003,13 @@ save_to_file(S=#xsd_state{tab2file=TF}) ->
{ok,IO}=file:open(filename:rootname(S#xsd_state.schema_name)++".tab",
[write]),
io:format(IO,"~p~n",[catch ets:tab2list(S#xsd_state.table)]),
- file:close(IO);
+ ok = file:close(IO);
false ->
ok;
IOFile ->
{ok,IO}=file:open(IOFile,[write]),
io:format(IO,"~p~n",[catch ets:tab2list(S#xsd_state.table)]),
- file:close(IO)
+ ok = file:close(IO)
end.
save_merged_type(Type=#schema_simple_type{},S) ->
@@ -5034,25 +5031,25 @@ save_idc(unique,IDConstr,S) ->
save_unique(IDConstr,S).
save_key(Key,S) ->
- save_object({key,Key},S),
+ _ = save_object({key,Key},S),
S.
save_keyref(KeyRef=#id_constraint{category=keyref},S) ->
S1 = add_keyref(KeyRef,S),
- save_object({keyref,KeyRef},S1),
+ _ = save_object({keyref,KeyRef},S1),
S1;
save_keyref(_,S) ->
S.
save_unique(Unique,S) ->
- save_object({unique,Unique},S),
+ _ = save_object({unique,Unique},S),
S.
save_substitutionGroup([],S) ->
S;
save_substitutionGroup([{Head,Members}|SGs],S) ->
%% save {head,[members]}
- save_in_table({substitutionGroup,Head},Members,S),
+ _ = save_in_table({substitutionGroup,Head},Members,S),
%% save {member,head}, an element can only be a member in one
%% substitutionGroup
lists:foreach(fun(X)->save_in_table({substitutionGroup_member,X},Head,S) end,Members),
diff --git a/lib/xmerl/src/xmerl_xsd_type.erl b/lib/xmerl/src/xmerl_xsd_type.erl
index 2cd7e85edd..3ee5961522 100644
--- a/lib/xmerl/src/xmerl_xsd_type.erl
+++ b/lib/xmerl/src/xmerl_xsd_type.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -229,11 +229,13 @@ check_float(Value) ->
%% {Mantissa,Exponent}=lists:splitwith(Pred,Value),
%% SkipEe = fun([]) -> [];(L) -> tl(L) end,
case string:tokens(Value,"eE") of
- [Mantissa,Exponent] ->
- {ok,_} = check_decimal(Mantissa),
- {ok,_} = check_integer(Exponent);
- [Mantissa] ->
- check_decimal(Mantissa)
+ [Mantissa,Exponent] ->
+ {ok,_} = check_decimal(Mantissa),
+ {ok,_} = check_integer(Exponent),
+ ok;
+ [Mantissa] ->
+ {ok,_} = check_decimal(Mantissa),
+ ok
end,
{ok,Value}.
%% case {check_decimal(Mantissa),
@@ -367,7 +369,7 @@ check_dateTime("+"++_DateTime) ->
check_dateTime(DateTime) ->
[Date,Time] = string:tokens(DateTime,"T"),
[Y,M,D] = string:tokens(Date,"-"),
- check_year(Y),
+ {ok,_} = check_year(Y),
{ok,_} = check_positive_integer(M),
{ok,_} = check_positive_integer(D),
check_time(Time).
diff --git a/lib/xmerl/test/Makefile b/lib/xmerl/test/Makefile
index f9c03336c8..7a326e334f 100644
--- a/lib/xmerl/test/Makefile
+++ b/lib/xmerl/test/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2004-2012. All Rights Reserved.
+# Copyright Ericsson AB 2004-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -84,7 +84,7 @@ RELSYSDIR = $(RELEASE_PATH)/xmerl_test
# FLAGS
# ----------------------------------------------------
-#ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include -I$(ERL_TOP)/lib/xmerl/include/ $(XMERL_PRESERV_TEST_DIRS)
+ERL_COMPILE_FLAGS +=
# ----------------------------------------------------
diff --git a/lib/xmerl/test/xmerl_SUITE.erl b/lib/xmerl/test/xmerl_SUITE.erl
index 7ddf1066de..e97b8c6a4b 100644
--- a/lib/xmerl/test/xmerl_SUITE.erl
+++ b/lib/xmerl/test/xmerl_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%-include("xmerl.hrl").
-include_lib("xmerl/include/xmerl.hrl").
-include_lib("kernel/include/file.hrl").
@@ -63,276 +63,238 @@ groups() ->
{app_test, [], [{xmerl_app_test, all}]},
{appup_test, [], [{xmerl_appup_test, all}]}].
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+suite() ->
+ [{timetrap,{minutes,10}}].
%%----------------------------------------------------------------------
%% Initializations
%%----------------------------------------------------------------------
-init_per_suite(doc) ->
- ["Starts the test suite"];
+
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line ok=erl_tar:extract("cpd.tar.gz",[compressed]),
- ?line ok=erl_tar:extract("misc.tar.gz",[compressed]),
- ?line ok = change_mode(["cpd", "misc"]),
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
+ file:set_cwd(datadir(Config)),
+ ok=erl_tar:extract("cpd.tar.gz",[compressed]),
+ ok=erl_tar:extract("misc.tar.gz",[compressed]),
+ ok = change_mode(["cpd", "misc"]),
+ file:set_cwd(filename:join(datadir(Config),xpath)),
TestServerIncludeDir=filename:join(filename:dirname(code:priv_dir(test_server)), "include"),
- ?line {ok, xpath_lib} = compile:file(xpath_lib, [{i, TestServerIncludeDir}]),
- ?line {ok, xpath_text} = compile:file(xpath_text, [{i, TestServerIncludeDir}]),
- ?line {ok, xpath_abbrev} = compile:file(xpath_abbrev, [{i, TestServerIncludeDir}]),
- [{watchdog, Dog}|Config].
+ {ok, xpath_lib} = compile:file(xpath_lib, [{i, TestServerIncludeDir}]),
+ {ok, xpath_text} = compile:file(xpath_text, [{i, TestServerIncludeDir}]),
+ {ok, xpath_abbrev} = compile:file(xpath_abbrev, [{i, TestServerIncludeDir}]),
+ Config.
-ifndef(dont_rm_test_dirs).
-end_per_suite(doc) ->
- ["Stops the test suite"];
end_per_suite(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line ok=rm_files(["cpd", "misc"]),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- lists:keydelete(watchdog,1,Config).
+ file:set_cwd(datadir(Config)),
+ ok = rm_files(["cpd", "misc"]),
+ ok.
-else.
-end_per_suite(doc) ->
- ["Stops the test suite"];
-end_per_suite(Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- lists:keydelete(watchdog,1,Config).
+end_per_suite(_Config) ->
+ ok.
-endif.
%% initialization before each testcase
init_per_testcase(_TestCase,Config) ->
io:format("Config:~n~p",[Config]),
- ?line {ok, _} = file:read_file_info(filename:join([?config(priv_dir,Config)])),
- ?line code:add_patha(?config(priv_dir,Config)),
- Dog=test_server:timetrap({minutes,10}),
- [{watchdog, Dog}|Config].
+ {ok, _} = file:read_file_info(filename:join([privdir(Config)])),
+ code:add_patha(privdir(Config)),
+ Config.
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Func,_Config) ->
ok.
%%----------------------------------------------------------------------
%% Test cases
%%----------------------------------------------------------------------
-cpd_invalid1(suite) -> [];
cpd_invalid1(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"cpd_test.xml"]),[]) of
- {'EXIT',{fatal,Reason}} ->
- case Reason of
- {expected_markup,_Path,28,32} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
-
-cpd_invalid1_index(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"cpd_test.xml"]),[]) of
+ {'EXIT',{fatal,Reason}} ->
+ case Reason of
+ {expected_markup,_Path,28,32} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
+
cpd_invalid1_index(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"cpd_index.xml"]),[]) of
- {'EXIT',{fatal,Reason}} ->
- case Reason of
- {{error,{whitespace_was_expected}},_Path,1,19} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
-
-cpd_invalid2_index(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"cpd_index.xml"]),[]) of
+ {'EXIT',{fatal,Reason}} ->
+ case Reason of
+ {{error,{whitespace_was_expected}},_Path,1,19} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
+
cpd_invalid2_index(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"cpd_index2.xml"]),[]) of
- {'EXIT',{fatal,Reason}} ->
- case Reason of
- {{invalid_target_name,_Ver},_Path,2,3} ->ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
-
-cpd_invalid_index3(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"cpd_index2.xml"]),[]) of
+ {'EXIT',{fatal,Reason}} ->
+ case Reason of
+ {{invalid_target_name,_Ver},_Path,2,3} ->ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
+
cpd_invalid_index3(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"cpd_index3.xml"]),[]) of
- {'EXIT',{fatal,Reason}} ->
- case Reason of
- {expected_markup,_Path,1,2} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
-
-cpd_invalid_is_layer(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"cpd_index3.xml"]),[]) of
+ {'EXIT',{fatal,Reason}} ->
+ case Reason of
+ {expected_markup,_Path,1,2} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
+
cpd_invalid_is_layer(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"is_layer2.xml"]),[]) of
- {'EXIT',{fatal,_Reason}} -> ok
- end.
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"is_layer2.xml"]),[]) of
+ {'EXIT',{fatal,_Reason}} -> ok
+ end.
-cpd_expl_provided_DTD(suite) -> [];
cpd_expl_provided_DTD(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {#xmlElement{},[]} = xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"file_wo_DTD.xml"]),[{validation,true},{doctype_DTD,"separate_DTD.dtd"}]).
+ file:set_cwd(datadir(Config)),
+ {#xmlElement{},[]} = xmerl_scan:file(datadir_join(Config,[cpd,"file_wo_DTD.xml"]),
+ [{validation,true},{doctype_DTD,"separate_DTD.dtd"}]).
%%----------------------------------------------------------------------
-xpath_text1(suite) -> [];
xpath_text1(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_text:one().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_text:one().
-xpath_main(suite) -> [];
xpath_main(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_lib:test().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_lib:test().
-xpath_abbreviated_syntax(suite) -> [];
xpath_abbreviated_syntax(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:test().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:test().
-xpath_functions(suite) -> [];
xpath_functions(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:functions().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:functions().
-xpath_namespaces(suite) -> [];
xpath_namespaces(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:namespaces().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:namespaces().
%%----------------------------------------------------------------------
-latin1_alias(suite) -> [];
latin1_alias(Config) ->
-% ?line file:set_cwd(filename:join(?config(data_dir,Config),misc)),
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {_Elements,[]}=
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- misc,"motorcycles.xml"]),
- [{validation,true},
- {encoding,'iso-8859-1'}]).
-
-syntax_bug1(suite) -> [];
+% file:set_cwd(filename:join(datadir(Config),misc)),
+ file:set_cwd(datadir(Config)),
+ {_Elements,[]} = xmerl_scan:file(datadir_join(Config,[misc,"motorcycles.xml"]),
+ [{validation,true},
+ {encoding,'iso-8859-1'}]).
+
syntax_bug1(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {fatal,{"expected one of: ?>, standalone, encoding",
- {file,'misc/syntax_bug1.xml'},{line,1},{col,21}}} =
- case catch xmerl_scan:file('misc/syntax_bug1.xml') of
- {'EXIT',Reason} ->
- Reason;
- Err -> Err
- end.
-
-syntax_bug2(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ {fatal,{"expected one of: ?>, standalone, encoding",
+ {file,'misc/syntax_bug1.xml'},{line,1},{col,21}}
+ } = case catch xmerl_scan:file('misc/syntax_bug1.xml') of
+ {'EXIT',Reason} ->
+ Reason;
+ Err -> Err
+ end.
+
syntax_bug2(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {fatal,{"expected one of: ?>, whitespace_character",
- {file,'misc/syntax_bug2.xml'},{line,1},{col,20}}} =
- case catch xmerl_scan:file('misc/syntax_bug2.xml') of
- {'EXIT',Reason} ->
- Reason;
- Err -> Err
- end.
-
-syntax_bug3(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ {fatal,{"expected one of: ?>, whitespace_character",
+ {file,'misc/syntax_bug2.xml'},{line,1},{col,20}}
+ } = case catch xmerl_scan:file('misc/syntax_bug2.xml') of
+ {'EXIT',Reason} ->
+ Reason;
+ Err -> Err
+ end.
+
syntax_bug3(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {fatal,{{endtag_does_not_match,{was,obj,should_have_been,int}},
- {file,'misc/syntax_bug3.xml'},{line,4},{col,3}}} =
- case catch xmerl_scan:file('misc/syntax_bug3.xml') of
- {'EXIT',Reason} ->
- Reason;
- Err -> Err
- end.
-
-pe_ref1(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ {fatal,{{endtag_does_not_match,{was,obj,should_have_been,int}},
+ {file,'misc/syntax_bug3.xml'},{line,4},{col,3}}
+ } = case catch xmerl_scan:file('misc/syntax_bug3.xml') of
+ {'EXIT',Reason} ->
+ Reason;
+ Err -> Err
+ end.
+
pe_ref1(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {#xmlElement{},[]} = xmerl_scan:file(filename:join([?config(data_dir,Config), misc,"PE_ref1.xml"]),[{validation,true}]).
+ file:set_cwd(datadir(Config)),
+ {#xmlElement{},[]} = xmerl_scan:file(datadir_join(Config,[misc,"PE_ref1.xml"]),[{validation,true}]).
-copyright(suite) -> [];
copyright(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {#xmlElement{},[]} = xmerl_scan:file(filename:join([?config(data_dir,Config), misc,"cprght.xml"]),[{validation,true}]).
+ file:set_cwd(datadir(Config)),
+ {#xmlElement{},[]} = xmerl_scan:file(datadir_join(Config,[misc,"cprght.xml"]),[{validation,true}]).
-testXSEIF(suite) -> [];
testXSEIF(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {#xmlElement{},[]} = xmerl_scan:file(filename:join([?config(data_dir,Config), misc,"ReplBoard_1_1543-CNA11313Uen.xml"]),[{validation,true}]).
+ file:set_cwd(datadir(Config)),
+ {#xmlElement{},[]} = xmerl_scan:file(datadir_join(Config,[misc,"ReplBoard_1_1543-CNA11313Uen.xml"]),[{validation,true}]).
-export_simple1(suite) -> [];
-export_simple1(Config) ->
+export_simple1(_Config) ->
Simple = simple(),
Res = xmerl:export_simple(Simple,xmerl_xml,[{title, "Doc Title"}]),
- ?line "<?xml version="++_ = lists:flatten(Res),
+ "<?xml version="++_ = lists:flatten(Res),
%% Use of fun in simple content OTP-6679
Simple2 = simple2(),
Res2 = xmerl:export_simple(Simple2,xmerl_xml,[{title,"Doc Title"}]),
- ?line true = (Res2 =:= Res),
+ true = (Res2 =:= Res),
ok.
-export(suite) -> [];
export(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = datadir(Config),
Prolog = ["<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!DOCTYPE motorcycles SYSTEM \"motorcycles.dtd\">\n"],
TestFile = filename:join([DataDir,"misc","motorcycles.xml"]),
- ?line {E,_} = xmerl_scan:file(TestFile),
- ?line Exported = xmerl:export([E],xmerl_xml,[{prolog,Prolog}]),
+ {E,_} = xmerl_scan:file(TestFile),
+ Exported = xmerl:export([E],xmerl_xml,[{prolog,Prolog}]),
B = list_to_binary(Exported++"\n"),
- ?line {ok, B} = file:read_file(TestFile),
+ {ok, B} = file:read_file(TestFile),
ok.
%%----------------------------------------------------------------------
-sax_parse_and_export(suite) -> [];
sax_parse_and_export(Config) ->
- ?line ok = sax_parse_export_xml_big(Config),
- ?line ok = sax_parse_export_xml_small(Config).
+ ok = sax_parse_export_xml_big(Config),
+ ok = sax_parse_export_xml_small(Config).
%%----------------------------------------------------------------------
sax_parse_export_xml_big(Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
+ DataDir = datadir(Config),
+ OutDir = privdir(Config),
io:format("DataDir: ~p~n,OutDir:~p~n",[DataDir,OutDir]),
CMOMxml = filename:join([DataDir,"eventp","CMOM.xml"]),
- ?line {Ex,[]} = xmerl_eventp:file_sax(CMOMxml, xmerl_xml,[],[]),
+ {Ex,[]} = xmerl_eventp:file_sax(CMOMxml, xmerl_xml,[],[]),
OutFile = filename:join([OutDir,"cmom"]),
file:delete(OutFile),
StubFile = filename:join([DataDir,"eventp","CelloMOM.stub"]),
- ?line {ok,Bin} = file:read_file(StubFile),
- ?line {ok,IO} = file:open(OutFile,[write,append]),
- ?line ok = file:write(IO,Bin),
- ?line ok = io:format(IO,"~s~n~n",[lists:flatten(Ex)]),
+ {ok,Bin} = file:read_file(StubFile),
+ {ok,IO} = file:open(OutFile,[write,append]),
+ ok = file:write(IO,Bin),
+ ok = io:format(IO,"~s~n~n",[lists:flatten(Ex)]),
Cmd = lists:flatten(io_lib:format("cmp ~s ~s",[OutFile,CMOMxml])),
- ?line [] = os:cmd(Cmd),
+ [] = os:cmd(Cmd),
ok.
sax_parse_export_xml_small(Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
+ DataDir = datadir(Config),
+ OutDir = privdir(Config),
Wurfl_xml = filename:join([DataDir,"eventp","wurfl.xml"]),
- ?line {Ex,[]} = xmerl_eventp:file_sax(Wurfl_xml, xmerl_xml,[],[]),
+ {Ex,[]} = xmerl_eventp:file_sax(Wurfl_xml, xmerl_xml,[],[]),
OutFile = filename:join([OutDir,"wrfl"]),
file:delete(OutFile),
StubFile = filename:join([DataDir,"eventp","wurfl.stub"]),
- ?line {ok,Bin} = file:read_file(StubFile),
- ?line {ok,IO} = file:open(OutFile,[write,append]),
- ?line ok = file:write(IO,Bin),
- ?line ok = io:format(IO,"~s~n",[lists:flatten(Ex)]),
+ {ok,Bin} = file:read_file(StubFile),
+ {ok,IO} = file:open(OutFile,[write,append]),
+ ok = file:write(IO,Bin),
+ ok = io:format(IO,"~s~n",[lists:flatten(Ex)]),
Cmd = lists:flatten(io_lib:format("cmp ~s ~s",[OutFile,Wurfl_xml])),
- ?line [] = os:cmd(Cmd),
+ [] = os:cmd(Cmd),
ok.
@@ -435,31 +397,28 @@ generate_heading_col(N) ->
%% A Kleene Closure child in a sequence consumed all following
%% childs. This problem has been fixed.
%%
-ticket_5998(suite) -> [];
ticket_5998(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = datadir(Config),
%% First fix is tested by case syntax_bug2.
- ?line case catch xmerl_scan:file(filename:join([DataDir,misc,
- "ticket_5998_2.xml"])) of
- {'EXIT',{fatal,Reason1}} ->
- case Reason1 of
- {{endtag_does_not_match,
- {was,obj,should_have_been,int}},
- _,_,_} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end,
-
- ?line case catch xmerl_scan:file(filename:join([DataDir,misc,
- "ticket_5998_3.xml"])) of
- {'EXIT',{fatal,Reason2}} ->
- case Reason2 of
- {"expected one of: ?>, standalone, encoding",
- _,_,_} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
+ case catch xmerl_scan:file(filename:join([DataDir,misc,"ticket_5998_2.xml"])) of
+ {'EXIT',{fatal,Reason1}} ->
+ case Reason1 of
+ {{endtag_does_not_match,
+ {was,obj,should_have_been,int}},
+ _,_,_} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end,
+
+ case catch xmerl_scan:file(filename:join([DataDir,misc,"ticket_5998_3.xml"])) of
+ {'EXIT',{fatal,Reason2}} ->
+ case Reason2 of
+ {"expected one of: ?>, standalone, encoding",
+ _,_,_} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
%%
@@ -468,32 +427,29 @@ ticket_5998(Config) ->
%% A Kleene Closure child in a sequence consumed all following
%% childs. This problem has been fixed.
%%
-ticket_7211(suite) -> [];
ticket_7211(Config) ->
- DataDir = ?config(data_dir,Config),
- ?line {E,[]} =
- xmerl_scan:file(filename:join([DataDir,misc,"notes2.xml"]),
- [{fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]},
- {validation,dtd}]),
+ DataDir = datadir(Config),
+ {E,[]} = xmerl_scan:file(filename:join([DataDir,misc,"notes2.xml"]),
+ [{fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]},
+ {validation,dtd}]),
- ?line ok = case E of
- Rec when is_record(Rec,xmlElement) ->
- ok;
- _ ->
- E
- end,
+ ok = case E of
+ Rec when is_record(Rec,xmlElement) ->
+ ok;
+ _ ->
+ E
+ end,
- ?line {E2,[]} =
- xmerl_scan:file(filename:join([DataDir,misc,"XS.xml"]),
- [{fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]},
- {validation,dtd}]),
+ {E2,[]} = xmerl_scan:file(filename:join([DataDir,misc,"XS.xml"]),
+ [{fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]},
+ {validation,dtd}]),
- ?line ok = case E2 of
- Rec2 when is_record(Rec2,xmlElement) ->
- ok;
- _ ->
- E2
- end.
+ ok = case E2 of
+ Rec2 when is_record(Rec2,xmlElement) ->
+ ok;
+ _ ->
+ E2
+ end.
%%
%% ticket_7214
@@ -503,21 +459,19 @@ ticket_7211(Config) ->
%% all content, followed by other child elements caused a
%% failure. This is now corrected.
%%
-ticket_7214(suite) -> [];
ticket_7214(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = datadir(Config),
- ?line {E,[]} =
- xmerl_scan:file(filename:join([DataDir,misc,'block_tags.html']),
- [{validation,dtd},
- {fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]}]),
+ {E,[]} = xmerl_scan:file(filename:join([DataDir,misc,'block_tags.html']),
+ [{validation,dtd},
+ {fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]}]),
- ?line ok = case E of
- Rec when is_record(Rec,xmlElement) ->
- ok;
- _ ->
- E
- end.
+ ok = case E of
+ Rec when is_record(Rec,xmlElement) ->
+ ok;
+ _ ->
+ E
+ end.
%%
%% ticket_7430
@@ -525,81 +479,67 @@ ticket_7214(Config) ->
%% Problem with contents of numeric character references followed by
%% UTF-8 characters..
%%
-ticket_7430(suite) -> [];
ticket_7430(Config) ->
- DataDir = ?config(data_dir,Config),
-
- ?line {E,[]} =
- xmerl_scan:string("<a>\303\251&#xD;\303\251</a>",
- [{encoding, 'utf-8'}]),
-
- ?line ok = case E of
- {xmlElement,a,a,[],
- {xmlNamespace,[],[]},
- [],1,[],
- [{xmlText,[{a,1}],1,[],"é",text},
- {xmlText,[{a,1}],2,[],"\né",text}],
- [],_,undeclared} ->
- ok;
- _ ->
- E
- end.
-
-ticket_6873(suite) -> [];
+ DataDir = datadir(Config),
+
+ {E,[]} = xmerl_scan:string("<a>\303\251&#xD;\303\251</a>",[{encoding,'utf-8'}]),
+
+ ok = case E of
+ {xmlElement,a,a,[],
+ {xmlNamespace,[],[]},
+ [],1,[],
+ [{xmlText,[{a,1}],1,[],"é",text},
+ {xmlText,[{a,1}],2,[],"\né",text}],
+ [],_,undeclared} ->
+ ok;
+ _ ->
+ E
+ end.
+
ticket_6873(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:ticket_6873(),
- ?line ok = xpath_lib:ticket_6873().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:ticket_6873(),
+ ok = xpath_lib:ticket_6873().
-ticket_7496(suite) -> [];
ticket_7496(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:ticket_7496().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:ticket_7496().
-ticket_8156(suite) -> [];
ticket_8156(Config) ->
- ?line {ftp,{[],[]},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://testmachine1/w.erl"),
- ?line {ftp,{"user",[]},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://user@testmachine1/w.erl"),
- ?line {ftp,{"user","hello"},"testmachine1",21,"/w.erl"} =
- xmerl_uri:parse("ftp://user:hello@testmachine1/w.erl"),
- ?line {ftp,{[],[]},"testmachine1",3000,"/w.erl"} = xmerl_uri:parse("ftp://testmachine1:3000/w.erl"),
- ?line {ftp,{"user","hello"},"testmachine1",3000,"/w.erl"} =
- xmerl_uri:parse("ftp://user:hello@testmachine1:3000/w.erl"),
+ {ftp,{[],[]},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://testmachine1/w.erl"),
+ {ftp,{"user",[]},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://user@testmachine1/w.erl"),
+ {ftp,{"user","hello"},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://user:hello@testmachine1/w.erl"),
+ {ftp,{[],[]},"testmachine1",3000,"/w.erl"} = xmerl_uri:parse("ftp://testmachine1:3000/w.erl"),
+ {ftp,{"user","hello"},"testmachine1",3000,"/w.erl"} = xmerl_uri:parse("ftp://user:hello@testmachine1:3000/w.erl"),
ok.
-ticket_8697(suite) -> [];
-ticket_8697(doc) ->
- ["Test that xmerl_scan can decode unicode entities properly"];
+%% Test that xmerl_scan can decode unicode entities properly
ticket_8697(Config) ->
- ?line {UTF8Output, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>" ++ [229, 145, 156] ++ "</text>"),
- ?line #xmlElement{content = [#xmlText{value = UTF8Text}]} = UTF8Output,
- ?line [16#545C] = UTF8Text,
- ?line {DecEntityOutput, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>&#21596;</text>"),
- ?line #xmlElement{content = [#xmlText{value = DecEntityText}]} = DecEntityOutput,
- ?line [21596] = DecEntityText,
- ?line {HexEntityOutput, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>&#x545C;</text>"),
- ?line #xmlElement{content = [#xmlText{value = HexEntityText}]} = HexEntityOutput,
- ?line [16#545C] = HexEntityText,
+ {UTF8Output, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>" ++ [229, 145, 156] ++ "</text>"),
+ #xmlElement{content = [#xmlText{value = UTF8Text}]} = UTF8Output,
+ [16#545C] = UTF8Text,
+ {DecEntityOutput, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>&#21596;</text>"),
+ #xmlElement{content = [#xmlText{value = DecEntityText}]} = DecEntityOutput,
+ [21596] = DecEntityText,
+ {HexEntityOutput, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>&#x545C;</text>"),
+ #xmlElement{content = [#xmlText{value = HexEntityText}]} = HexEntityOutput,
+ [16#545C] = HexEntityText,
ok.
-ticket_9411(suite) -> [];
-ticket_9411(doc) ->
- ["Test that xmerl_scan handles attribute that contains for example &quot"];
+%% Test that xmerl_scan handles attribute that contains for example &quot
ticket_9411(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = datadir(Config),
- ?line {ok, Schema} = xmerl_xsd:process_schema(filename:join([DataDir,"misc/ticket_9411.xsd"])),
- ?line {ok, Bin} = file:read_file(filename:join([DataDir,"misc/ticket_9411.xml"])),
- ?line Xml = erlang:binary_to_list(Bin),
- ?line {E, _} = xmerl_scan:string(Xml),
- ?line {E, _} = xmerl_xsd:validate(E, Schema).
+ {ok, Schema} = xmerl_xsd:process_schema(filename:join([DataDir,"misc/ticket_9411.xsd"])),
+ {ok, Bin} = file:read_file(filename:join([DataDir,"misc/ticket_9411.xml"])),
+ Xml = erlang:binary_to_list(Bin),
+ {E, _} = xmerl_scan:string(Xml),
+ {E, _} = xmerl_xsd:validate(E, Schema).
-ticket_9457(suite) -> [];
-ticket_9457(doc) ->
- ["Test that xmerl_scan handles continuation correct when current input runs out at the end of an attribute value"];
+%% Test that xmerl_scan handles continuation correct when current input runs out at the end of an attribute value
ticket_9457(Config) ->
Opts = [{continuation_fun, fun ticket_9457_cont/3, start}, {space, normalize}],
- ?line {E, _} = xmerl_scan:string([], Opts).
+ {E, _} = xmerl_scan:string([], Opts).
ticket_9457_cont(Continue, Exception, GlobalState) ->
case xmerl_scan:cont_state(GlobalState) of
@@ -616,34 +556,23 @@ ticket_9457_cont(Continue, Exception, GlobalState) ->
end.
-ticket_9664_schema(suite) -> [];
-ticket_9664_schema(doc) ->
- ["Test that comments are handled correct whith"];
+%% Test that comments are handled correct whith
ticket_9664_schema(Config) ->
+ {E, _} = xmerl_scan:file(datadir_join(Config,[misc,"ticket_9664_schema.xml"]),[]),
+ {ok, S} = xmerl_xsd:process_schema(datadir_join(Config,[misc,"motorcycles.xsd"])),
+ {E1, _} = xmerl_xsd:validate(E, S),
- ?line {E, _} = xmerl_scan:file(filename:join([?config(data_dir, Config), misc,
- "ticket_9664_schema.xml"]),[]),
- ?line {ok, S} = xmerl_xsd:process_schema(filename:join([?config(data_dir, Config), misc,
- "motorcycles.xsd"])),
- ?line {E1, _} = xmerl_xsd:validate(E, S),
+ {E1,_} = xmerl_xsd:process_validate(datadir_join(Config,[misc,"motorcycles.xsd"]),E,[]),
- ?line {E1,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), misc,
- "motorcycles.xsd"]),E,[]),
-
- ?line {E1,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), misc,
- "ticket_9664_schema.xml"]),
- [{schemaLocation, [{"mc", "motorcycles.xsd"}]},
- {validation, schema}]),
+ {E1,_} = xmerl_scan:file(datadir_join(Config,[misc,"ticket_9664_schema.xml"]),
+ [{schemaLocation, [{"mc", "motorcycles.xsd"}]},
+ {validation, schema}]),
ok.
-ticket_9664_dtd(suite) -> [];
-ticket_9664_dtd(doc) ->
- ["Test that comments are handled correct whith"];
+%% Test that comments are handled correct whith
ticket_9664_dtd(Config) ->
- ?line {E, _} = xmerl_scan:file(filename:join([?config(data_dir, Config), misc,
- "ticket_9664_dtd.xml"]),[]),
- ?line {E, _} = xmerl_scan:file(filename:join([?config(data_dir, Config), misc,
- "ticket_9664_dtd.xml"]),[{validation, true}]),
+ {E, _} = xmerl_scan:file(datadir_join(Config,[misc,"ticket_9664_dtd.xml"]),[]),
+ {E, _} = xmerl_scan:file(datadir_join(Config,[misc,"ticket_9664_dtd.xml"]),[{validation, true}]),
ok.
@@ -653,11 +582,11 @@ ticket_9664_dtd(Config) ->
%% Dir is a directory
rm_f_(Dir) ->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
rm_files(FileList),
- ?line file:set_cwd(CWD),
+ file:set_cwd(CWD),
? line ok = file:del_dir(Dir).
rm_files([])->
@@ -667,27 +596,27 @@ rm_files([F|Fs]) ->
true ->
rm_f_(F);
_ ->
- ?line ok = file:delete(F)
+ ok = file:delete(F)
end,
rm_files(Fs).
change_mode(Files) ->
change_mode3(Files).
change_mode2(Dir)->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
change_mode3(FileList),
- ?line file:set_cwd(CWD).
+ file:set_cwd(CWD).
change_mode3([]) ->
ok;
change_mode3([F|Fs]) ->
case filelib:is_dir(F) of
- true ->
- chmod(F),
- change_mode2(F);
- _ ->
- chmod(F)
+ true ->
+ chmod(F),
+ change_mode2(F);
+ _ ->
+ chmod(F)
end,
change_mode3(Fs).
@@ -699,4 +628,11 @@ chmod(F) ->
_ ->
ok
end.
-
+
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+datadir(Config) ->
+ proplists:get_value(data_dir, Config).
+
+datadir_join(Config,Files) ->
+ filename:join([datadir(Config)|Files]).
diff --git a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl
index afd39b6598..aaa80097cd 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl
@@ -10,113 +10,113 @@
-export([test/0, check_node_set/2, ticket_6873/0, ticket_7496/0, functions/0]).
-export([namespaces/0]).
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("xmerl/include/xmerl.hrl").
test() ->
- ?line {E,_} = xmerl_scan:file("xpath.xml"),
+ {E,_} = xmerl_scan:file("xpath.xml"),
- ?line Res1 = xmerl_xpath:string("blipp",E),
- ?line ok = check_node_set("blipp",Res1),
- ?line Res2 = xmerl_xpath:string("*",E),
- ?line ok = check_node_set("*",Res2),
- ?line Res3 = xmerl_xpath:string("blipp/blupp/plopp/text()",E),
- ?line ok = check_node_set("blipp/blupp/plopp/text()",Res3),
- ?line Res4 = xmerl_xpath:string("blipp/blupp/@att2",E),
- ?line ok = check_node_set("blipp/blupp/@att2",Res4),
- ?line Res5 = xmerl_xpath:string("blipp/@*",E),
- ?line ok = check_node_set("blipp/@*",Res5),
- ?line Res6 = xmerl_xpath:string("blipp[2]",E),
- ?line ok = check_node_set("blipp[2]",Res6),
- ?line Res7 = xmerl_xpath:string("blipp[last()]",E),
- ?line ok = check_node_set("blipp[last()]",Res7),
- ?line Res8 = xmerl_xpath:string("*/blupp",E),
- ?line ok = check_node_set("*/blupp",Res8),
- ?line Res9 = xmerl_xpath:string("/myBS_model/blipp[3]/blupp[2]",E),
- ?line ok = check_node_set("/myBS_model/blipp[3]/blupp[2]",Res9),
- ?line Res10 = xmerl_xpath:string("blipp//plopp",E),
- ?line ok = check_node_set("blipp//plopp",Res10),
- ?line Res11 = xmerl_xpath:string("//plopp",E),
- ?line ok = check_node_set("//plopp",Res11),
- ?line Res12 = xmerl_xpath:string("//blupp/plopp",E),
- ?line ok = check_node_set("//blupp/plopp",Res12),
- ?line Res13 = xmerl_xpath:string(".",E),
- ?line ok = check_node_set(".",Res13),
- ?line Res14 = xmerl_xpath:string(".//blipp2",E),
- ?line ok = check_node_set(".//blipp2",Res14),
- ?line Res15 = xmerl_xpath:string(".//blipp2/blupp/plopp/..",E),
- ?line ok = check_node_set(".//blipp2/blupp/plopp/..",Res15),
- ?line Res16 = xmerl_xpath:string(".//blipp[2]/blupp/plopp/../@att2",E),
- ?line ok = check_node_set(".//blipp[2]/blupp/plopp/../@att2",Res16),
- ?line Res17 = xmerl_xpath:string(".//blipp/blupp/plopp[2]/../@att2",E),
- ?line ok = check_node_set(".//blipp/blupp/plopp[2]/../@att2",Res17),
- ?line Res18 = xmerl_xpath:string("blipp[@id='name2']",E),
- ?line ok = check_node_set("blipp[@id='name2']",Res18),
- ?line Res19 = xmerl_xpath:string("blipp[@id='name2'][3]",E),
- ?line ok = check_node_set("blipp[@id='name2'][3]",Res19),
- ?line Res20 = xmerl_xpath:string("//blupp[plopp=\"here are some more text\"]",E),
- ?line ok = check_node_set("//blupp[plopp=\"here are some more text\"]",Res20),
- ?line Res21 = xmerl_xpath:string("//blupp[plopp]",E),
- ?line ok = check_node_set("//blupp[plopp]",Res21),
- ?line Res22 = xmerl_xpath:string("blipp[@id and @test]",E),
- ?line ok = check_node_set("blipp[@id and @test]",Res22).
+ Res1 = xmerl_xpath:string("blipp",E),
+ ok = check_node_set("blipp",Res1),
+ Res2 = xmerl_xpath:string("*",E),
+ ok = check_node_set("*",Res2),
+ Res3 = xmerl_xpath:string("blipp/blupp/plopp/text()",E),
+ ok = check_node_set("blipp/blupp/plopp/text()",Res3),
+ Res4 = xmerl_xpath:string("blipp/blupp/@att2",E),
+ ok = check_node_set("blipp/blupp/@att2",Res4),
+ Res5 = xmerl_xpath:string("blipp/@*",E),
+ ok = check_node_set("blipp/@*",Res5),
+ Res6 = xmerl_xpath:string("blipp[2]",E),
+ ok = check_node_set("blipp[2]",Res6),
+ Res7 = xmerl_xpath:string("blipp[last()]",E),
+ ok = check_node_set("blipp[last()]",Res7),
+ Res8 = xmerl_xpath:string("*/blupp",E),
+ ok = check_node_set("*/blupp",Res8),
+ Res9 = xmerl_xpath:string("/myBS_model/blipp[3]/blupp[2]",E),
+ ok = check_node_set("/myBS_model/blipp[3]/blupp[2]",Res9),
+ Res10 = xmerl_xpath:string("blipp//plopp",E),
+ ok = check_node_set("blipp//plopp",Res10),
+ Res11 = xmerl_xpath:string("//plopp",E),
+ ok = check_node_set("//plopp",Res11),
+ Res12 = xmerl_xpath:string("//blupp/plopp",E),
+ ok = check_node_set("//blupp/plopp",Res12),
+ Res13 = xmerl_xpath:string(".",E),
+ ok = check_node_set(".",Res13),
+ Res14 = xmerl_xpath:string(".//blipp2",E),
+ ok = check_node_set(".//blipp2",Res14),
+ Res15 = xmerl_xpath:string(".//blipp2/blupp/plopp/..",E),
+ ok = check_node_set(".//blipp2/blupp/plopp/..",Res15),
+ Res16 = xmerl_xpath:string(".//blipp[2]/blupp/plopp/../@att2",E),
+ ok = check_node_set(".//blipp[2]/blupp/plopp/../@att2",Res16),
+ Res17 = xmerl_xpath:string(".//blipp/blupp/plopp[2]/../@att2",E),
+ ok = check_node_set(".//blipp/blupp/plopp[2]/../@att2",Res17),
+ Res18 = xmerl_xpath:string("blipp[@id='name2']",E),
+ ok = check_node_set("blipp[@id='name2']",Res18),
+ Res19 = xmerl_xpath:string("blipp[@id='name2'][3]",E),
+ ok = check_node_set("blipp[@id='name2'][3]",Res19),
+ Res20 = xmerl_xpath:string("//blupp[plopp=\"here are some more text\"]",E),
+ ok = check_node_set("//blupp[plopp=\"here are some more text\"]",Res20),
+ Res21 = xmerl_xpath:string("//blupp[plopp]",E),
+ ok = check_node_set("//blupp[plopp]",Res21),
+ Res22 = xmerl_xpath:string("blipp[@id and @test]",E),
+ ok = check_node_set("blipp[@id and @test]",Res22).
check_node_set("blipp",[E1,E2,E3]) ->
- ?line ok = xml_element_name(E1,blipp),
- ?line ok = xml_element_name(E2,blipp),
- ?line ok = xml_element_name(E3,blipp),
+ ok = xml_element_name(E1,blipp),
+ ok = xml_element_name(E2,blipp),
+ ok = xml_element_name(E3,blipp),
ok;
check_node_set("*",[E1,E2,E3,E4]) ->
- ?line ok = xml_element_name(E1,blipp),
- ?line ok = xml_element_name(E2,blipp),
- ?line ok = xml_element_name(E3,blipp),
- ?line ok = xml_element_name(E4,blipp2),
+ ok = xml_element_name(E1,blipp),
+ ok = xml_element_name(E2,blipp),
+ ok = xml_element_name(E3,blipp),
+ ok = xml_element_name(E4,blipp2),
ok;
check_node_set("blipp/blupp/plopp/text()",[T1,T2]) ->
- ?line #xmlText{value="here are some text"} = T1,
- ?line #xmlText{value="here are some more text"} = T2,
+ #xmlText{value="here are some text"} = T1,
+ #xmlText{value="here are some more text"} = T2,
ok;
check_node_set("blipp/blupp/@att2",[A1,A2]) ->
- ?line #xmlAttribute{name=att2} = A1,
- ?line #xmlAttribute{name=att2} = A2,
+ #xmlAttribute{name=att2} = A1,
+ #xmlAttribute{name=att2} = A2,
ok;
check_node_set("blipp/@*",[A1,A2,A3,A4]) ->
- ?line #xmlAttribute{} = A1,
- ?line #xmlAttribute{} = A2,
- ?line #xmlAttribute{} = A3,
- ?line #xmlAttribute{} = A4,
+ #xmlAttribute{} = A1,
+ #xmlAttribute{} = A2,
+ #xmlAttribute{} = A3,
+ #xmlAttribute{} = A4,
ok;
check_node_set("blipp[2]",[E]) ->
- ?line #xmlElement{name=blipp,
- attributes=[#xmlAttribute{name=id,value="name2"}]} = E,
+ #xmlElement{name=blipp,
+ attributes=[#xmlAttribute{name=id,value="name2"}]} = E,
ok;
check_node_set("blipp[last()]",[E]) ->
- ?line #xmlElement{name=blipp,
- attributes=[#xmlAttribute{name=id,value="name3"}|_]} = E,
+ #xmlElement{name=blipp,
+ attributes=[#xmlAttribute{name=id,value="name3"}|_]} = E,
ok;
check_node_set("*/blupp",[E1,E2,E3,E4,E5,E6]) ->
- ?line ok = xml_element_name(E1,blupp),
- ?line ok = xml_element_name(E2,blupp),
- ?line ok = xml_element_name(E3,blupp),
- ?line ok = xml_element_name(E4,blupp),
- ?line ok = xml_element_name(E5,blupp),
- ?line ok = xml_element_name(E6,blupp),
+ ok = xml_element_name(E1,blupp),
+ ok = xml_element_name(E2,blupp),
+ ok = xml_element_name(E3,blupp),
+ ok = xml_element_name(E4,blupp),
+ ok = xml_element_name(E5,blupp),
+ ok = xml_element_name(E6,blupp),
ok;
check_node_set("/myBS_model/blipp[3]/blupp[2]",[E]) ->
- ?line #xmlElement{name=blupp,
- attributes=[#xmlAttribute{name=att,value="bluppc2"}]}=E,
+ #xmlElement{name=blupp,
+ attributes=[#xmlAttribute{name=att,value="bluppc2"}]}=E,
ok;
check_node_set("blipp//plopp",[#xmlElement{name=plopp},#xmlElement{name=plopp}]) ->
ok;
check_node_set("//plopp",[E1,E2,E3]) ->
- ?line ok = xml_element_name(E1,plopp),
- ?line ok = xml_element_name(E2,plopp),
- ?line ok = xml_element_name(E3,plopp),
+ ok = xml_element_name(E1,plopp),
+ ok = xml_element_name(E2,plopp),
+ ok = xml_element_name(E3,plopp),
ok;
check_node_set("//blupp/plopp",[E1,E2,E3]) ->
- ?line ok = xml_element_name(E1,plopp),
- ?line ok = xml_element_name(E2,plopp),
- ?line ok = xml_element_name(E3,plopp),
+ ok = xml_element_name(E1,plopp),
+ ok = xml_element_name(E2,plopp),
+ ok = xml_element_name(E3,plopp),
ok;
check_node_set(".",[#xmlElement{name=myBS_model}]) ->
ok;
@@ -129,169 +129,168 @@ check_node_set(".//blipp[2]/blupp/plopp/../@att2",[#xmlAttribute{name=att2,value
check_node_set(".//blipp/blupp/plopp[2]/../@att2",[#xmlAttribute{name=att2,value="bluppc"}]) ->
ok;
check_node_set("blipp[@id='name2']",[E]) ->
- ?line #xmlElement{name=blipp,
- attributes=[#xmlAttribute{name=id,value="name2"}]}=E,
+ #xmlElement{name=blipp,
+ attributes=[#xmlAttribute{name=id,value="name2"}]}=E,
ok;
check_node_set("blipp[@id='name2'][3]",[]) ->
ok;
check_node_set("//blupp[plopp=\"here are some more text\"]",[E]) ->
- ?line #xmlElement{name=blupp,
- content=[_T,#xmlElement{name=plopp,content=C}|_]} = E,
- ?line true = lists:keymember("here are some more text",#xmlText.value,C),
+ #xmlElement{name=blupp,
+ content=[_T,#xmlElement{name=plopp,content=C}|_]} = E,
+ true = lists:keymember("here are some more text",#xmlText.value,C),
ok;
check_node_set("//blupp[plopp]",[E1,E2,E3]) ->
- ?line #xmlElement{name=blupp,
- content=C1} = E1,
- ?line true = lists:keymember(plopp,#xmlElement.name,C1),
- ?line #xmlElement{name=blupp,
- content=C2} = E2,
- ?line true = lists:keymember(plopp,#xmlElement.name,C2),
- ?line #xmlElement{name=blupp,
- content=C3} = E3,
- ?line true = lists:keymember(plopp,#xmlElement.name,C3),
+ #xmlElement{name=blupp,
+ content=C1} = E1,
+ true = lists:keymember(plopp,#xmlElement.name,C1),
+ #xmlElement{name=blupp,
+ content=C2} = E2,
+ true = lists:keymember(plopp,#xmlElement.name,C2),
+ #xmlElement{name=blupp,
+ content=C3} = E3,
+ true = lists:keymember(plopp,#xmlElement.name,C3),
ok;
check_node_set("blipp[@id and @test]",[E]) ->
- ?line #xmlElement{name=blipp,
- attributes=Atts} = E,
- ?line true = lists:keymember(id,#xmlAttribute.name,Atts),
- ?line true = lists:keymember(test,#xmlAttribute.name,Atts),
+ #xmlElement{name=blipp,
+ attributes=Atts} = E,
+ true = lists:keymember(id,#xmlAttribute.name,Atts),
+ true = lists:keymember(test,#xmlAttribute.name,Atts),
ok;
check_node_set(Pattern,NodeSet) ->
io:format("Pattern: ~p~nNodeSet: ~p~n",[Pattern,NodeSet]),
error.
xml_element_name(E,N) ->
- ?line #xmlElement{name=N} = E,
+ #xmlElement{name=N} = E,
ok.
ticket_6873() ->
- ?line [#xmlElement{}] = xmerl_xpath:string("//foo[contains(@bar, 'oe')]",element(1,xmerl_scan:string("<foo bar=\"Joe\" />"))),
+ [#xmlElement{}] = xmerl_xpath:string("//foo[contains(@bar, 'oe')]",element(1,xmerl_scan:string("<foo bar=\"Joe\" />"))),
ok.
ticket_7496() ->
Test = fun(Doc, XPath, Exp) ->
- Result = xmerl_xpath:string(XPath, Doc),
- ?line Exp = [Name || #xmlElement{name = Name} <- Result],
- ok
- end,
- ?line {Doc1,_} = xmerl_scan:string("<a><b/> <c/> <d/> <e/></a>"),
- ?line ok = Test(Doc1, "//b/following::*", [c, d, e]),
- ?line ok = Test(Doc1,"//b/following::*[1]", [c]),
- ?line ok = Test(Doc1,"//b/following::*[position()=1]", [c]),
- ?line ok = Test(Doc1,"//b/following::*[3]", [e]),
- ?line ok = Test(Doc1,"//b/following::*[position()=3]", [e]),
- ?line ok = Test(Doc1,"//e/preceding::*", [b, c, d]),
- ?line ok = Test(Doc1,"//e/preceding::*[1]", [d]),
- ?line ok = Test(Doc1,"//e/preceding::*[position()=1]", [d]),
- ?line ok = Test(Doc1,"//e/preceding::*[3]", [b]),
- ?line ok = Test(Doc1,"//e/preceding::*[position()=3]", [b]),
- ?line ok = Test(Doc1,"//b/following::*[position() mod 2=0]", [d]),
- ?line ok = Test(Doc1,"//b/self::*", [b]),
+ Result = xmerl_xpath:string(XPath, Doc),
+ Exp = [Name || #xmlElement{name = Name} <- Result],
+ ok
+ end,
+ {Doc1,_} = xmerl_scan:string("<a><b/> <c/> <d/> <e/></a>"),
+ ok = Test(Doc1, "//b/following::*", [c, d, e]),
+ ok = Test(Doc1,"//b/following::*[1]", [c]),
+ ok = Test(Doc1,"//b/following::*[position()=1]", [c]),
+ ok = Test(Doc1,"//b/following::*[3]", [e]),
+ ok = Test(Doc1,"//b/following::*[position()=3]", [e]),
+ ok = Test(Doc1,"//e/preceding::*", [b, c, d]),
+ ok = Test(Doc1,"//e/preceding::*[1]", [d]),
+ ok = Test(Doc1,"//e/preceding::*[position()=1]", [d]),
+ ok = Test(Doc1,"//e/preceding::*[3]", [b]),
+ ok = Test(Doc1,"//e/preceding::*[position()=3]", [b]),
+ ok = Test(Doc1,"//b/following::*[position() mod 2=0]", [d]),
+ ok = Test(Doc1,"//b/self::*", [b]),
+
+ {Doc2,_} = xmerl_scan:string("<a><b/> <c><d/></c> <e/> <f><g/></f> <h/> <i><j/></i> <k/></a>"),
+ ok = Test(Doc2,"//g/preceding::*", [b, c, d, e]),
+ ok = Test(Doc2, "//g/following::*", [h, i, j, k]),
+ ok = Test(Doc2,"//g/ancestor::*", [a, f]),
+ ok = Test(Doc2,"//g/ancestor::*[1]", [f]),
+ ok = Test(Doc2,"//g/ancestor::*[2]", [a]),
+ ok = Test(Doc2,"//g/ancestor-or-self::*", [a, f, g]),
+ ok = Test(Doc2,"//g/ancestor-or-self::*[1]", [g]),
+ ok = Test(Doc2,"//g/ancestor-or-self::*[2]", [f]),
+ ok = Test(Doc2,"//g/ancestor-or-self::*[3]", [a]),
+ ok = Test(Doc2,"/descendant::*", [a, b, c, d, e, f, g, h, i, j, k]),
+ ok = Test(Doc2,"//f/preceding-sibling::*", [b, c, e]),
+ ok = Test(Doc2,"//f/following-sibling::*", [h, i, k]),
+ ok = Test(Doc2,"//f/self::*", [f]),
+ ok = Test(Doc2,"//f/ancestor::*", [a]),
+ ok = Test(Doc2,"//f/descendant::*", [g]),
+ ok = Test(Doc2,"//f/preceding::*", [b, c, d, e]),
+ ok = Test(Doc2,"//f/following::*", [h, i, j, k]),
+ ok = Test(Doc2,"//text()[1]/following-sibling::*", [c, e, f, h, i, k]),
+
+ {Doc3,_} = xmerl_scan:file("documentRoot.xml"),
+ ok = Test(Doc3,"//child",[child,child,child]),
+ ok = Test(Doc3,"//child[@name='beta']",[child]),
+ [{xmlAttribute,id,[],[],[],_,1,[],"2",false}] =
+ xmerl_xpath:string("/documentRoot/parent/child[@name='beta']/@id",Doc3),
+ ok = Test(Doc3,"/documentRoot/parent/child|/documentRoot/parent/pet",
+ [child,child,child,pet,pet]),
+ ok = Test(Doc3,"//*[starts-with(local-name(),'p')]",
+ [parent,pet,pet]).
- ?line {Doc2,_} = xmerl_scan:string("<a><b/> <c><d/></c> <e/> <f><g/></f> <h/> <i><j/></i> <k/></a>"),
- ?line ok = Test(Doc2,"//g/preceding::*", [b, c, d, e]),
- ?line ok = Test(Doc2, "//g/following::*", [h, i, j, k]),
- ?line ok = Test(Doc2,"//g/ancestor::*", [a, f]),
- ?line ok = Test(Doc2,"//g/ancestor::*[1]", [f]),
- ?line ok = Test(Doc2,"//g/ancestor::*[2]", [a]),
- ?line ok = Test(Doc2,"//g/ancestor-or-self::*", [a, f, g]),
- ?line ok = Test(Doc2,"//g/ancestor-or-self::*[1]", [g]),
- ?line ok = Test(Doc2,"//g/ancestor-or-self::*[2]", [f]),
- ?line ok = Test(Doc2,"//g/ancestor-or-self::*[3]", [a]),
- ?line ok = Test(Doc2,"/descendant::*", [a, b, c, d, e, f, g, h, i, j, k]),
- ?line ok = Test(Doc2,"//f/preceding-sibling::*", [b, c, e]),
- ?line ok = Test(Doc2,"//f/following-sibling::*", [h, i, k]),
- ?line ok = Test(Doc2,"//f/self::*", [f]),
- ?line ok = Test(Doc2,"//f/ancestor::*", [a]),
- ?line ok = Test(Doc2,"//f/descendant::*", [g]),
- ?line ok = Test(Doc2,"//f/preceding::*", [b, c, d, e]),
- ?line ok = Test(Doc2,"//f/following::*", [h, i, j, k]),
- ?line ok = Test(Doc2,"//text()[1]/following-sibling::*", [c, e, f, h, i, k]),
-
- ?line {Doc3,_} = xmerl_scan:file("documentRoot.xml"),
- ?line ok = Test(Doc3,"//child",[child,child,child]),
- ?line ok = Test(Doc3,"//child[@name='beta']",[child]),
- ?line [{xmlAttribute,id,[],[],[],_,1,[],"2",false}] =
- xmerl_xpath:string("/documentRoot/parent/child[@name='beta']/@id",Doc3),
- ?line ok = Test(Doc3,"/documentRoot/parent/child|/documentRoot/parent/pet",
- [child,child,child,pet,pet]),
- ?line ok = Test(Doc3,"//*[starts-with(local-name(),'p')]",
- [parent,pet,pet]).
-
functions() ->
Test = fun(Doc, XPath, Exp) ->
- Result = xmerl_xpath:string(XPath, Doc),
- ?line Exp = [begin
- case Obj of
- #xmlElement{name = EName} ->
- EName;
- #xmlAttribute{name = AName} ->
- AName;
- #xmlText{value=Text} ->
- Text
- end
- end|| Obj <- Result],
- ok
- end,
+ Result = xmerl_xpath:string(XPath, Doc),
+ Exp = [begin
+ case Obj of
+ #xmlElement{name = EName} ->
+ EName;
+ #xmlAttribute{name = AName} ->
+ AName;
+ #xmlText{value=Text} ->
+ Text
+ end
+ end|| Obj <- Result],
+ ok
+ end,
Foo =
- "<foo>"
- " <bar>"
- " <name>Xml</name>"
- " <value>1</value>"
- " </bar>"
- " <bar>"
- " <name>Xpath</name>"
- " <value>2</value>"
- " </bar>"
- " <bar>"
- " <name>Erlang</name>"
- " <value>3</value>"
- " </bar>"
- "</foo>",
+ "<foo>"
+ " <bar>"
+ " <name>Xml</name>"
+ " <value>1</value>"
+ " </bar>"
+ " <bar>"
+ " <name>Xpath</name>"
+ " <value>2</value>"
+ " </bar>"
+ " <bar>"
+ " <name>Erlang</name>"
+ " <value>3</value>"
+ " </bar>"
+ "</foo>",
{Doc,_} = xmerl_scan:string(Foo),
- ?line ok = Test(Doc,"/foo/bar[name = 'Xml']/value/text()",["1"]),
- ?line ok = Test(Doc,"/foo/bar/node()/text()",
- ["Xml","1","Xpath","2","Erlang","3"]),
- ?line ok = Test(Doc,"/foo/bar[contains(name, 'path')]",[bar]),
- ?line ok = Test(Doc,"/foo/bar[starts-with(name, 'X')]",[bar,bar]),
- ?line ok = Test(Doc,"/foo/bar[value = string(1)]/value/text()",["1"]),
-
+ ok = Test(Doc,"/foo/bar[name = 'Xml']/value/text()",["1"]),
+ ok = Test(Doc,"/foo/bar/node()/text()",
+ ["Xml","1","Xpath","2","Erlang","3"]),
+ ok = Test(Doc,"/foo/bar[contains(name, 'path')]",[bar]),
+ ok = Test(Doc,"/foo/bar[starts-with(name, 'X')]",[bar,bar]),
+ ok = Test(Doc,"/foo/bar[value = string(1)]/value/text()",["1"]),
+
{Doc2,_}= xmerl_scan:file("purchaseOrder.xml"),
- ?line ok = Test(Doc2,"//*[starts-with(local-name(),'c')]",
- ['apo:comment',city,city,comment]),
- ?line ok = Test(Doc2,"//*[starts-with(name(),'c')]",
- [city,city,comment]),
- ?line ok = Test(Doc2,"//*[starts-with(name(),'{http://www.example.com/PO1')]",
- ['apo:purchaseOrder','apo:comment']).
+ ok = Test(Doc2,"//*[starts-with(local-name(),'c')]",
+ ['apo:comment',city,city,comment]),
+ ok = Test(Doc2,"//*[starts-with(name(),'c')]",
+ [city,city,comment]),
+ ok = Test(Doc2,"//*[starts-with(name(),'{http://www.example.com/PO1')]",
+ ['apo:purchaseOrder','apo:comment']).
namespaces() ->
{Doc,_} = xmerl_scan:file("purchaseOrder.xml", [{namespace_conformant, true}]),
%% Element name using regular namespace and context namespace declaration.
- ?line [#xmlElement{nsinfo = {_, "purchaseOrder"}}] =
- xmerl_xpath:string("/apo:purchaseOrder", Doc),
- ?line [#xmlElement{nsinfo = {_, "purchaseOrder"}}] =
- xmerl_xpath:string("/t:purchaseOrder", Doc, [{namespace, [{"t", "http://www.example.com/PO1"}]}]),
+ [#xmlElement{nsinfo = {_, "purchaseOrder"}}] =
+ xmerl_xpath:string("/apo:purchaseOrder", Doc),
+ [#xmlElement{nsinfo = {_, "purchaseOrder"}}] =
+ xmerl_xpath:string("/t:purchaseOrder", Doc, [{namespace, [{"t", "http://www.example.com/PO1"}]}]),
%% Wildcard element name using regular namespace and context namespace declaration.
- ?line [#xmlElement{nsinfo = {_, "comment"}}] =
- xmerl_xpath:string("./apo:*", Doc),
- ?line [#xmlElement{nsinfo = {_, "comment"}}] =
- xmerl_xpath:string("./t:*", Doc, [{namespace, [{"t", "http://www.example.com/PO1"}]}]),
+ [#xmlElement{nsinfo = {_, "comment"}}] =
+ xmerl_xpath:string("./apo:*", Doc),
+ [#xmlElement{nsinfo = {_, "comment"}}] =
+ xmerl_xpath:string("./t:*", Doc, [{namespace, [{"t", "http://www.example.com/PO1"}]}]),
%% Attribute name using regular namespace and context namespace declaration.
- ?line [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
- xmerl_xpath:string("//@xsi:type", Doc),
- ?line [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
- xmerl_xpath:string("//@t:type", Doc, [{namespace, [{"t", "http://www.w3.org/2001/XMLSchema-instance"}]}]),
+ [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
+ xmerl_xpath:string("//@xsi:type", Doc),
+ [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
+ xmerl_xpath:string("//@t:type", Doc, [{namespace, [{"t", "http://www.w3.org/2001/XMLSchema-instance"}]}]),
%% Wildcard attribute name using regular namespace and context namespace declaration.
- ?line [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
- xmerl_xpath:string("//@xsi:*", Doc),
- ?line [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
- xmerl_xpath:string("//@t:*", Doc, [{namespace, [{"t", "http://www.w3.org/2001/XMLSchema-instance"}]}]),
-
+ [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
+ xmerl_xpath:string("//@xsi:*", Doc),
+ [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
+ xmerl_xpath:string("//@t:*", Doc, [{namespace, [{"t", "http://www.w3.org/2001/XMLSchema-instance"}]}]),
ok.
diff --git a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl
index 4cde46826e..e539436c12 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl
@@ -9,109 +9,106 @@
-export([test/0,check_node_set/2,ticket_6873/0]).
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("xmerl/include/xmerl.hrl").
test() ->
- ?line {E,_} = xmerl_scan:file("myBS_model.xml"),
- ?line Res1 = xmerl_xpath:string("blipp",E),
- ?line ok = check_node_set("blipp",Res1),
- ?line Res2 = xmerl_xpath:string("//blipp",E),
- ?line ok = check_node_set("//blipp",Res2),
- ?line Res3 = xmerl_xpath:string("/myBS_model/blipp",E),
- ?line ok = check_node_set("/myBS_model/blipp",Res3),
- ?line Res4 = xmerl_xpath:string("blipp[@id=\"name1\"]",E),
- ?line ok = check_node_set("blipp[@id=\"name1\"]",Res4),
- ?line Res5 = xmerl_xpath:string("//blipp[@id=\"name1\"]",E),
- ?line ok = check_node_set("//blipp[@id=\"name1\"]",Res5),
- ?line Res6 = xmerl_xpath:string("/myBS_model/blipp[@id=\"name1\"]",E),
- ?line ok = check_node_set("/myBS_model/blipp[@id=\"name1\"]",Res6).
+ {E,_} = xmerl_scan:file("myBS_model.xml"),
+ Res1 = xmerl_xpath:string("blipp",E),
+ ok = check_node_set("blipp",Res1),
+ Res2 = xmerl_xpath:string("//blipp",E),
+ ok = check_node_set("//blipp",Res2),
+ Res3 = xmerl_xpath:string("/myBS_model/blipp",E),
+ ok = check_node_set("/myBS_model/blipp",Res3),
+ Res4 = xmerl_xpath:string("blipp[@id=\"name1\"]",E),
+ ok = check_node_set("blipp[@id=\"name1\"]",Res4),
+ Res5 = xmerl_xpath:string("//blipp[@id=\"name1\"]",E),
+ ok = check_node_set("//blipp[@id=\"name1\"]",Res5),
+ Res6 = xmerl_xpath:string("/myBS_model/blipp[@id=\"name1\"]",E),
+ ok = check_node_set("/myBS_model/blipp[@id=\"name1\"]",Res6).
check_node_set("blipp",[H1,H2]) ->
- ?line #xmlElement{name = blipp} = H1,
- ?line #xmlElement{name = blipp} = H2,
+ #xmlElement{name = blipp} = H1,
+ #xmlElement{name = blipp} = H2,
ok;
check_node_set("//blipp",[H1,H2]) ->
- ?line #xmlElement{name = blipp} = H1,
- ?line #xmlElement{name = blipp} = H2,
+ #xmlElement{name = blipp} = H1,
+ #xmlElement{name = blipp} = H2,
ok;
check_node_set("/myBS_model/blipp",[H1,H2]) ->
- ?line #xmlElement{name = blipp} = H1,
- ?line #xmlElement{name = blipp} = H2,
+ #xmlElement{name = blipp} = H1,
+ #xmlElement{name = blipp} = H2,
ok;
check_node_set("blipp[@id=\"name1\"]",[H]) ->
- ?line H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
+ H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
ok;
check_node_set("//blipp[@id=\"name1\"]",[H]) ->
- ?line H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
+ H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
ok;
check_node_set("/myBS_model/blipp[@id=\"name1\"]",[H]) ->
- ?line H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
+ H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
ok.
ticket_6873() ->
- GetId =
- fun(Atts) ->
- case lists:keysearch(id,#xmlAttribute.name,Atts) of
- {value,#xmlAttribute{value=AttV}} -> AttV;
- _ -> novalue
- end
- end,
- Test =
- fun(Doc, XPath, Exp) ->
- Result = xmerl_xpath:string(XPath, Doc),
- Exp = [begin
- case Obj of
- #xmlElement{name = EName,attributes=Atts} ->
- {EName,GetId(Atts)};
- #xmlAttribute{name = AName} ->
- AName;
- #xmlText{value=Text} ->
- Text
- end
- end|| Obj <- Result],
- ok
- end,
-
-
-
+ GetId = fun(Atts) ->
+ case lists:keysearch(id,#xmlAttribute.name,Atts) of
+ {value,#xmlAttribute{value=AttV}} -> AttV;
+ _ -> novalue
+ end
+ end,
+
+ Test = fun(Doc, XPath, Exp) ->
+ Result = xmerl_xpath:string(XPath, Doc),
+ Exp = [begin
+ case Obj of
+ #xmlElement{name = EName,attributes=Atts} ->
+ {EName,GetId(Atts)};
+ #xmlAttribute{name = AName} ->
+ AName;
+ #xmlText{value=Text} ->
+ Text
+ end
+ end|| Obj <- Result],
+ ok
+ end,
+
Doc1 = get_doc("e1074"),
- ?line ok = Test(Doc1,"/*",[{root,"1"}]),
- ?line ok = Test(Doc1,"/root",[{root,"1"}]),
- ?line ok = Test(Doc1,"/root/*",[{elem1,"2"},{elem1,"8"},{e,"12"}]),
- ?line ok = Test(Doc1,"/root/e",[{e,"12"}]),
- ?line ok = Test(Doc1,"//e",[{e,"12"},{e,"4"},{e,"6"},{e,"10"},{e,"11"}]),
- ?line ok = Test(Doc1,"//*[name() != 'e']",
- [{root,"1"},{elem1,"2"},{elem1,"8"},{elem2,"3"},
- {elem3,"5"},{elem3,"7"},{elem2,"9"}]),
- ?line ok = Test(Doc1,"//elem1/e",[{e,"10"},{e,"11"}]),
- ?line ok = Test(Doc1,"//elem1//e",[{e,"4"},{e,"6"},{e,"10"},{e,"11"}]),
- ?line ok = Test(Doc1,"//*[*]",
- [{root,"1"},{elem1,"2"},{elem1,"8"},
- {elem2,"3"},{elem3,"5"}]),
- ?line ok = Test(Doc1,"//*[not(*)]",
- [{e,"12"},{e,"4"},{elem3,"7"},{e,"6"},
- {elem2,"9"},{e,"10"},{e,"11"}]),
+ ok = Test(Doc1,"/*",[{root,"1"}]),
+ ok = Test(Doc1,"/root",[{root,"1"}]),
+ ok = Test(Doc1,"/root/*",[{elem1,"2"},{elem1,"8"},{e,"12"}]),
+ ok = Test(Doc1,"/root/e",[{e,"12"}]),
+ ok = Test(Doc1,"//e",[{e,"12"},{e,"4"},{e,"6"},{e,"10"},{e,"11"}]),
+ ok = Test(Doc1,"//*[name() != 'e']",
+ [{root,"1"},{elem1,"2"},{elem1,"8"},{elem2,"3"},
+ {elem3,"5"},{elem3,"7"},{elem2,"9"}]),
+ ok = Test(Doc1,"//elem1/e",[{e,"10"},{e,"11"}]),
+ ok = Test(Doc1,"//elem1//e",[{e,"4"},{e,"6"},{e,"10"},{e,"11"}]),
+ ok = Test(Doc1,"//*[*]",
+ [{root,"1"},{elem1,"2"},{elem1,"8"},
+ {elem2,"3"},{elem3,"5"}]),
+ ok = Test(Doc1,"//*[not(*)]",
+ [{e,"12"},{e,"4"},{elem3,"7"},{e,"6"},
+ {elem2,"9"},{e,"10"},{e,"11"}]),
%% contents would be empty in the above expression
- ?line [#xmlElement{content=[]}|_] = xmerl_xpath:string("//*[not(*)]",Doc1),
- ?line ok = Test(Doc1,"//*[e]",[{root,"1"},{elem1,"8"},{elem2,"3"},{elem3,"5"}]),
- ?line ok = Test(Doc1,"//*[count(e)>1]",[{elem1,"8"}]),
- ?line ok = Test(Doc1,"//*[not(e) and name() != 'e']",
- [{elem1,"2"},{elem3,"7"},{elem2,"9"}]),
- ?line ok = Test(Doc1,"/*/*/*/e",[{e,"4"}]),
- ?line ok = Test(Doc1,"//*[starts-with(name(), 'el')]",
- [{elem1,"2"},{elem1,"8"},{elem2,"3"},
- {elem3,"5"},{elem3,"7"},{elem2,"9"}]),
- ?line ok = Test(Doc1,"//*[contains(name(), 'lem1')]",
- [{elem1,"2"},{elem1,"8"}]),
- ?line ok = Test(Doc1,"/*/e | //elem2/e",[{e,"4"},{e,"12"}]),
+ [#xmlElement{content=[]}|_] = xmerl_xpath:string("//*[not(*)]",Doc1),
+ ok = Test(Doc1,"//*[e]",[{root,"1"},{elem1,"8"},{elem2,"3"},{elem3,"5"}]),
+ ok = Test(Doc1,"//*[count(e)>1]",[{elem1,"8"}]),
+ ok = Test(Doc1,"//*[not(e) and name() != 'e']",
+ [{elem1,"2"},{elem3,"7"},{elem2,"9"}]),
+ ok = Test(Doc1,"/*/*/*/e",[{e,"4"}]),
+ ok = Test(Doc1,"//*[starts-with(name(), 'el')]",
+ [{elem1,"2"},{elem1,"8"},{elem2,"3"},
+ {elem3,"5"},{elem3,"7"},{elem2,"9"}]),
+ ok = Test(Doc1,"//*[contains(name(), 'lem1')]",
+ [{elem1,"2"},{elem1,"8"}]),
+ ok = Test(Doc1,"/*/e | //elem2/e",[{e,"4"},{e,"12"}]),
io:format("Tested ~p~n",[e1074]),
Doc2 = get_doc("e1075"),
- ?line ok = Test(Doc2,"/*/*[1]",[{elem1,"2"}]),
- ?line ok = Test(Doc2,"/root/elem1[2]",[{elem1,"8"}]),
+ ok = Test(Doc2,"/*/*[1]",[{elem1,"2"}]),
+ ok = Test(Doc2,"/root/elem1[2]",[{elem1,"8"}]),
%% Get all first-born e elements in the document; that is, for all
%% e elements with e element siblings, include only the first
@@ -119,66 +116,61 @@ ticket_6873() ->
%% the document because the [1] predicate applies to e, which
%% represents the set of e elements under one element and not to
%% //e, which represents the set of e elements in the document.
- %% ?line ok = Test(Doc2,"//e[1]",[{e,"4"},{e,"6"},{e,"10"},{e,"12"}]),
+ %% ok = Test(Doc2,"//e[1]",[{e,"4"},{e,"6"},{e,"10"},{e,"12"}]),
%% The following expression retrieves the first e element in the
%% document:
- %% ?line ok = Test(Doc2,"(//e)[1]",[{e,4}]),
-
+ %% ok = Test(Doc2,"(//e)[1]",[{e,4}]),
+
%% For all e elements with e element siblings, include only the
%% first 3 siblings
- %% ?line ok = Test(Doc2,"//e[position() <= 3]",[{e,"4"},{e,"6"},{e,"10"},{e,"11"},{e,"12"}]),
+ %% ok = Test(Doc2,"//e[position() <= 3]",[{e,"4"},{e,"6"},{e,"10"},{e,"11"},{e,"12"}]),
%% Get all last-born e elements in the document; that is, for all
%% e elements with e element siblings, include only the last
%% sibling
- %% ?line ok = Test(Doc2,"//e[last()]",[{e,"4"},{e,"6"},{e,"11"},{e,"12"}]),
+ %% ok = Test(Doc2,"//e[last()]",[{e,"4"},{e,"6"},{e,"11"},{e,"12"}]),
%% Get the last e element in the document
- %% ?line ok = Test(Doc2,"(//e)[last()]", [{e,"12"}]),
-
+ %% ok = Test(Doc2,"(//e)[last()]", [{e,"12"}]),
io:format("Tested ~p~n",[e1075]),
-
Doc3 = get_doc("e1076"),
- ?line ok = Test(Doc3,"//*[.='cat']",[{elem1,"2"},{elem3,"6"}]),
- ?line ok = Test(Doc3,"//*[.='dog']",[]),
- ?line ok = Test(Doc3,"//*[contains(.,'cat')]",
- [{elem1,"2"},{elem1,"4"},{elem3,"6"}]),
- ?line ok = Test(Doc3,"//elem3[contains(.,'cat')]",[{elem3,"6"}]),
- ?line ok = Test(Doc3,"//*[contains(child::text(),'cat')]",[{elem1,"2"},{elem1,"4"},{elem3,"6"}]),
- ?line ok = Test(Doc3,"//*[count(*)=0 and contains(.,'cat')]",[{elem1,"2"},{elem3,"6"}]),
- ?line ok = Test(Doc3,"//*[contains(translate(.,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'CAT')]",[{elem1,"2"},{elem1,"4"},{elem1,"7"},{elem3,"6"}]),
+ ok = Test(Doc3,"//*[.='cat']",[{elem1,"2"},{elem3,"6"}]),
+ ok = Test(Doc3,"//*[.='dog']",[]),
+ ok = Test(Doc3,"//*[contains(.,'cat')]", [{elem1,"2"},{elem1,"4"},{elem3,"6"}]),
+ ok = Test(Doc3,"//elem3[contains(.,'cat')]",[{elem3,"6"}]),
+ ok = Test(Doc3,"//*[contains(child::text(),'cat')]",[{elem1,"2"},{elem1,"4"},{elem3,"6"}]),
+ ok = Test(Doc3,"//*[count(*)=0 and contains(.,'cat')]",[{elem1,"2"},{elem3,"6"}]),
+ ok = Test(Doc3,"//*[contains(translate(.,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'CAT')]",[{elem1,"2"},{elem1,"4"},{elem1,"7"},{elem3,"6"}]),
io:format("Tested ~p~n",[e1076]),
Doc4 = get_doc("e1078"),
- ?line ok = Test(Doc4,"//*[@pet='cat']",[{elem1,"2"}]),
- ?line ok = Test(Doc4,"//*[@pet='dog']",[{elem1,"7"}]),
- ?line ok = Test(Doc4,"//*[contains(@pet,'dog')]",
- [{elem1,"3"},{elem1,"7"}]),
- ?line ok = Test(Doc4,"//*[@age]",[{elem1,"3"},{elem3,"6"}]),
- ?line ok = Test(Doc4,"//elem1[@age]",[{elem1,"3"}]),
- ?line ok = Test(Doc4,"//*[@pet and @age]",[{elem1,"3"}]),
- ?line ok = Test(Doc4,"//*[contains(translate(@pet,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'CAT')]",[{elem1,"2"},{elem1,"4"}]),
-
- io:format("Tested ~p~n",[e1078]),
+ ok = Test(Doc4,"//*[@pet='cat']",[{elem1,"2"}]),
+ ok = Test(Doc4,"//*[@pet='dog']",[{elem1,"7"}]),
+ ok = Test(Doc4,"//*[contains(@pet,'dog')]",
+ [{elem1,"3"},{elem1,"7"}]),
+ ok = Test(Doc4,"//*[@age]",[{elem1,"3"},{elem3,"6"}]),
+ ok = Test(Doc4,"//elem1[@age]",[{elem1,"3"}]),
+ ok = Test(Doc4,"//*[@pet and @age]",[{elem1,"3"}]),
+ ok = Test(Doc4,"//*[contains(translate(@pet,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'CAT')]",[{elem1,"2"},{elem1,"4"}]),
+ io:format("Tested ~p~n",[e1078]),
Doc5 = get_doc("e1077"),
- ?line ok = Test(Doc5,"id('3')",[{e,"3"}]),
+ ok = Test(Doc5,"id('3')",[{e,"3"}]),
%% Get all e elements directly under element id 3
- %% ?line ok = Test(Doc5,"id('two')/e",[{e,"3"},{e,"4"},{e,"6"}]),
- ?line ok = Test(Doc5,"id('two 3 seven the fifth')",[{e,"seven"},{e,"3"},{e,"two"}]),
- ?line ok = Test(Doc5,"id('100')",[]),
-
+ %% ok = Test(Doc5,"id('two')/e",[{e,"3"},{e,"4"},{e,"6"}]),
+ ok = Test(Doc5,"id('two 3 seven the fifth')",[{e,"seven"},{e,"3"},{e,"two"}]),
+ ok = Test(Doc5,"id('100')",[]),
+
io:format("Tested ~p~n",[e1077]),
ok.
-
get_doc(Name) ->
- ?line {Doc,_} = xmerl_scan:file(Name++".xml"),
+ {Doc,_} = xmerl_scan:file(Name++".xml"),
Doc.
diff --git a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl
index e39ad6bcb0..77adde85e9 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl
@@ -9,20 +9,20 @@
-compile(export_all).
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("xmerl/include/xmerl.hrl").
-import(xmerl_xs,
- [ xslapply/2, value_of/1, select/2, built_in_rules/2 ]).
+ [ xslapply/2, value_of/1, select/2, built_in_rules/2 ]).
one() ->
- ?line {A,_}=xmerl_scan:file('motorcycles.xml'),
- ?line [["Suzuki","Yamaha"]] = template(A),
+ {A,_}=xmerl_scan:file('motorcycles.xml'),
+ [["Suzuki","Yamaha"]] = template(A),
ok.
%%% templates, test of OTP-5268
template(E = #xmlElement{name='motorcycles'}) ->
- [value_of(select("bike/name/manufacturer/text()",E))];
+ [value_of(select("bike/name/manufacturer/text()",E))];
template(E) -> built_in_rules(fun template/1, E).
diff --git a/lib/xmerl/test/xmerl_app_test.erl b/lib/xmerl/test/xmerl_app_test.erl
index 7b30eb260c..a7bfed8cc6 100644
--- a/lib/xmerl/test/xmerl_app_test.erl
+++ b/lib/xmerl/test/xmerl_app_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -56,8 +56,6 @@ end_per_group(_GroupName, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
init_per_suite(Config) when is_list(Config) ->
case is_app(xmerl) of
{ok, AppFile} ->
@@ -78,18 +76,12 @@ is_app(App) ->
end.
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
end_per_suite(Config) when is_list(Config) ->
Config.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-fields(suite) ->
- [];
-fields(doc) ->
- [];
fields(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Fields = [vsn, description, modules, registered, applications],
@@ -117,10 +109,6 @@ check_field(Name, AppFile, Missing) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-modules(suite) ->
- [];
-modules(doc) ->
- [];
modules(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Mods = key1search(modules, AppFile),
@@ -174,10 +162,6 @@ extra_modules(Mods, [Mod|Ebins], Extra) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-exportall(suite) ->
- [];
-exportall(doc) ->
- [];
exportall(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Mods = key1search(modules, AppFile),
@@ -207,24 +191,17 @@ check_export_all([Mod|Mods]) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-app_depend(suite) ->
- [];
-app_depend(doc) ->
- [];
app_depend(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Apps = key1search(applications, AppFile),
check_apps(Apps).
-check_apps([]) ->
- ok;
+check_apps([]) -> ok;
check_apps([App|Apps]) ->
case is_app(App) of
- {ok, _} ->
- check_apps(Apps);
- Error ->
- throw({error, {missing_app, {App, Error}}})
+ {ok, _} -> check_apps(Apps);
+ Error -> throw({error, {missing_app, {App, Error}}})
end.
diff --git a/lib/xmerl/test/xmerl_appup_test.erl b/lib/xmerl/test/xmerl_appup_test.erl
index 506bbfcd51..3a6ac12d33 100644
--- a/lib/xmerl/test/xmerl_appup_test.erl
+++ b/lib/xmerl/test/xmerl_appup_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,32 +31,6 @@
all() ->
[appup].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
-init_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
%% perform a simple check of the appup file
appup(Config) when is_list(Config) ->
- ok = ?t:appup_test(xmerl).
+ ok = test_server:appup_test(xmerl).
diff --git a/lib/xmerl/test/xmerl_sax_SUITE.erl b/lib/xmerl/test/xmerl_sax_SUITE.erl
index a15d9bd57c..f5c0a783c4 100644
--- a/lib/xmerl/test/xmerl_sax_SUITE.erl
+++ b/lib/xmerl/test/xmerl_sax_SUITE.erl
@@ -2,7 +2,7 @@
%%----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
%%======================================================================
@@ -38,25 +38,11 @@
%% Initializations
%%----------------------------------------------------------------------
-init_per_suite(doc) ->
- ["Starts the test suite"];
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(doc) ->
- ["Stops the test suite"];
-end_per_suite(Config) ->
- Config.
-
+all() ->
+ [{group, bugs}].
-
-%% initialization before each testcase
-init_per_testcase(_TestCase,Config) ->
- Config.
-
-%% clean up after each testcase
-end_per_testcase(_Func,_Config) ->
- ok.
+groups() ->
+ [{bugs, [], [ticket_8213, ticket_8214, ticket_11551]}].
%%----------------------------------------------------------------------
%% Tests
@@ -66,9 +52,8 @@ end_per_testcase(_Func,_Config) ->
%% Test Case
%% ID: ticket_8213
%% Description: Checks that end of document is checked properly when continuation fun is missing.
-ticket_8213(suite) -> [];
ticket_8213(_Config) ->
- ?line {ok,ok,[]} = xmerl_sax_parser:stream("<elem/>", [{event_fun, fun (_E,_,_) -> ok end}]),
+ {ok,ok,[]} = xmerl_sax_parser:stream("<elem/>", [{event_fun, fun (_E,_,_) -> ok end}]),
ok.
@@ -76,65 +61,41 @@ ticket_8213(_Config) ->
%% Test Case
%% ID: ticket_8214
%% Description: Checks that attributes with default namespace don't get [] in NS field.
-ticket_8214(suite) -> [];
ticket_8214(_Config) ->
- ?line {ok,ok,[]} =
- xmerl_sax_parser:stream("<elem attr='123' x:attr='234' xmlns='http://lshift.net/d' "
- "xmlns:x='http://lshift.net/x' />",
- [{event_fun, fun ({startElement,"http://lshift.net/d","elem",
- {[],"elem"},
- [{[],[],"attr","123"},{"http://lshift.net/x","x","attr","234"}]},
- _, _) ->ok;
- ({startElement, _, "elem",_,_}, _,_) ->
- throw({test, "Error in startElement tuple"});
- (_E,_,_) -> ok
- end}]),
+ Event = fun ({startElement,"http://lshift.net/d","elem",
+ {[],"elem"},
+ [{[],[],"attr","123"},{"http://lshift.net/x","x","attr","234"}]},
+ _, _) ->ok;
+ ({startElement, _, "elem",_,_}, _,_) ->
+ throw({test, "Error in startElement tuple"});
+ (_E,_,_) -> ok
+ end,
+
+ {ok,ok,[]} = xmerl_sax_parser:stream("<elem attr='123' x:attr='234' xmlns='http://lshift.net/d' "
+ "xmlns:x='http://lshift.net/x' />",
+ [{event_fun, Event}]),
ok.
%%----------------------------------------------------------------------
%% Test Case
%% ID: ticket_8214
%% Description: Checks that attributes with default namespace don't get [] in NS field.
-ticket_11551(suite) -> [];
-ticket_11551(Config) ->
+ticket_11551(_Config) ->
Stream1 = <<"<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>
<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>">>,
- ?line {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream1, []),
+ {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream1, []),
Stream2= <<"<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>
<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>">>,
- ?line {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream2, []),
+ {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream2, []),
Stream3= <<"<a>hej</a>
<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>">>,
- ?line {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream3, []),
+ {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream3, []),
ok.
-
-
-
-%%----------------------------------------------------------------------
-%% Bug test cases
-%%
-
-%%----------------------------------------------------------------------
-%% Test Suite
-%%
-all() ->
- [{group, bugs}].
-
-groups() ->
- [{bugs, [], [ticket_8213, ticket_8214, ticket_11551]}].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
diff --git a/lib/xmerl/test/xmerl_sax_std_SUITE.erl b/lib/xmerl/test/xmerl_sax_std_SUITE.erl
index 70e768ff04..525a3b175a 100644
--- a/lib/xmerl/test/xmerl_sax_std_SUITE.erl
+++ b/lib/xmerl/test/xmerl_sax_std_SUITE.erl
@@ -2,7 +2,7 @@
%%----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
%%======================================================================
@@ -38,50 +38,40 @@
%% Initializations
%%----------------------------------------------------------------------
-init_per_suite(doc) ->
- ["Starts the test suite"];
init_per_suite(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line ok=erl_tar:extract("ibm.tgz",[compressed]),
- ?line ok=erl_tar:extract("japanese.tgz",[compressed]),
- ?line ok=erl_tar:extract("oasis.tgz",[compressed]),
- ?line ok=erl_tar:extract("sun.tgz",[compressed]),
- ?line ok=erl_tar:extract("xmltest.tgz",[compressed]),
- ?line ok = change_mode(["ibm","japanese","oasis",
- "sun","xmltest"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ ok=erl_tar:extract("ibm.tgz",[compressed]),
+ ok=erl_tar:extract("japanese.tgz",[compressed]),
+ ok=erl_tar:extract("oasis.tgz",[compressed]),
+ ok=erl_tar:extract("sun.tgz",[compressed]),
+ ok=erl_tar:extract("xmltest.tgz",[compressed]),
+ ok = change_mode(["ibm","japanese","oasis",
+ "sun","xmltest"]),
Config.
-
+
-ifndef(dont_rm_test_dirs).
-
-end_per_suite(doc) ->
- ["Stops the test suite"];
+
end_per_suite(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line ok=rm_files(["ibm","japanese","oasis","sun","xmltest"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ ok=rm_files(["ibm","japanese","oasis","sun","xmltest"]),
Config.
-
+
-else.
-
-end_per_suite(doc) ->
- ["Stops the test suite"];
+
end_per_suite(Config) ->
Config.
-
+
-endif.
-
+
%% initialization before each testcase
init_per_testcase(_TestCase,Config) ->
io:format("Config:\n~p\n",[Config]),
- ?line {ok, _} = file:read_file_info(filename:join([?config(priv_dir,Config)])),
- ?line code:add_patha(?config(priv_dir,Config)),
-% Dog=test_server:timetrap({minutes,10}),
-% [{watchdog, Dog}|Config].
+ {ok, _} = file:read_file_info(filename:join([privdir(Config)])),
+ code:add_patha(privdir(Config)),
Config.
%% clean up after each testcase
end_per_testcase(_Func,_Config) ->
-% Dog=?config(watchdog, Config),
-% test_server:timetrap_cancel(Dog),
ok.
%%----------------------------------------------------------------------
@@ -94,12 +84,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-001
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-001'(suite) -> [];
'not-wf-sa-001'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/001.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/001.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -107,12 +96,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-002
%% Type: not-wf
%% Sections: 2.3 [4]
-'not-wf-sa-002'(suite) -> [];
'not-wf-sa-002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -120,12 +108,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-003
%% Type: not-wf
%% Sections: 2.6 [16]
-'not-wf-sa-003'(suite) -> [];
'not-wf-sa-003'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/003.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/003.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -133,12 +120,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-004
%% Type: not-wf
%% Sections: 2.6 [16]
-'not-wf-sa-004'(suite) -> [];
'not-wf-sa-004'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/004.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/004.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -146,12 +132,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-005
%% Type: not-wf
%% Sections: 2.6 [16]
-'not-wf-sa-005'(suite) -> [];
'not-wf-sa-005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -159,12 +144,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-006
%% Type: not-wf
%% Sections: 2.5 [16]
-'not-wf-sa-006'(suite) -> [];
'not-wf-sa-006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -172,12 +156,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-007
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-007'(suite) -> [];
'not-wf-sa-007'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/007.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/007.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -185,12 +168,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-008
%% Type: not-wf
%% Sections: 2.3 [5]
-'not-wf-sa-008'(suite) -> [];
'not-wf-sa-008'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/008.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/008.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -198,12 +180,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-009
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-009'(suite) -> [];
'not-wf-sa-009'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/009.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/009.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -211,12 +192,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-010
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-010'(suite) -> [];
'not-wf-sa-010'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/010.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/010.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -224,12 +204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-011
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-011'(suite) -> [];
'not-wf-sa-011'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/011.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/011.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -237,12 +216,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-012
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-012'(suite) -> [];
'not-wf-sa-012'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/012.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/012.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -250,12 +228,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-013
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-013'(suite) -> [];
'not-wf-sa-013'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/013.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/013.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -263,12 +240,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-014
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-014'(suite) -> [];
'not-wf-sa-014'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/014.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/014.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -276,12 +252,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-015
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-015'(suite) -> [];
'not-wf-sa-015'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/015.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/015.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -289,12 +264,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-016
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-016'(suite) -> [];
'not-wf-sa-016'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/016.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/016.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -302,12 +276,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-017
%% Type: not-wf
%% Sections: 2.7 [18]
-'not-wf-sa-017'(suite) -> [];
'not-wf-sa-017'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/017.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/017.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -315,12 +288,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-018
%% Type: not-wf
%% Sections: 2.7 [19]
-'not-wf-sa-018'(suite) -> [];
'not-wf-sa-018'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/018.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/018.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -328,12 +300,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-019
%% Type: not-wf
%% Sections: 3.1 [42]
-'not-wf-sa-019'(suite) -> [];
'not-wf-sa-019'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/019.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/019.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -341,12 +312,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-020
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-020'(suite) -> [];
'not-wf-sa-020'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/020.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/020.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -354,12 +324,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-021
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-021'(suite) -> [];
'not-wf-sa-021'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/021.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/021.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -367,12 +336,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-022
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-022'(suite) -> [];
'not-wf-sa-022'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/022.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/022.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -380,12 +348,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-023
%% Type: not-wf
%% Sections: 2.3 [5]
-'not-wf-sa-023'(suite) -> [];
'not-wf-sa-023'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/023.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/023.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -393,12 +360,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-024
%% Type: not-wf
%% Sections: 2.3 [5]
-'not-wf-sa-024'(suite) -> [];
'not-wf-sa-024'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/024.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/024.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -406,12 +372,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-025
%% Type: not-wf
%% Sections: 2.4 [14]
-'not-wf-sa-025'(suite) -> [];
'not-wf-sa-025'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/025.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/025.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -419,12 +384,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-026
%% Type: not-wf
%% Sections: 2.4 [14]
-'not-wf-sa-026'(suite) -> [];
'not-wf-sa-026'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/026.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/026.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -432,12 +396,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-027
%% Type: not-wf
%% Sections: 2.5 [15]
-'not-wf-sa-027'(suite) -> [];
'not-wf-sa-027'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/027.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/027.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -445,12 +408,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-028
%% Type: not-wf
%% Sections: 2.6 [16]
-'not-wf-sa-028'(suite) -> [];
'not-wf-sa-028'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/028.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/028.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -458,12 +420,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-029
%% Type: not-wf
%% Sections: 2.4 [14]
-'not-wf-sa-029'(suite) -> [];
'not-wf-sa-029'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/029.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/029.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -471,12 +432,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-030
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-030'(suite) -> [];
'not-wf-sa-030'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/030.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/030.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -484,12 +444,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-031
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-031'(suite) -> [];
'not-wf-sa-031'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/031.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/031.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -497,12 +456,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-032
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-032'(suite) -> [];
'not-wf-sa-032'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/032.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/032.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -510,12 +468,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-033
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-033'(suite) -> [];
'not-wf-sa-033'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/033.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/033.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -523,12 +480,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-034
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-034'(suite) -> [];
'not-wf-sa-034'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/034.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/034.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -536,12 +492,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-035
%% Type: not-wf
%% Sections: 3.1 [43]
-'not-wf-sa-035'(suite) -> [];
'not-wf-sa-035'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/035.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/035.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -549,15 +504,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-036
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-036'(suite) -> [];
'not-wf-sa-036'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/036.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/036.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"Illegal data\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"Illegal data\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -565,15 +519,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-037
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-037'(suite) -> [];
'not-wf-sa-037'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/037.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/037.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"&#32;\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"&#32;\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -581,12 +534,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-038
%% Type: not-wf
%% Sections: 3.1
-'not-wf-sa-038'(suite) -> [];
'not-wf-sa-038'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/038.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/038.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -594,12 +546,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-039
%% Type: not-wf
%% Sections: 3
-'not-wf-sa-039'(suite) -> [];
'not-wf-sa-039'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/039.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/039.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -607,15 +558,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-040
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-040'(suite) -> [];
'not-wf-sa-040'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/040.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/040.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<doc></doc>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"<doc></doc>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -623,15 +573,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-041
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-041'(suite) -> [];
'not-wf-sa-041'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/041.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/041.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<doc></doc>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"<doc></doc>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -639,12 +588,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-042
%% Type: not-wf
%% Sections: 3.1 [42]
-'not-wf-sa-042'(suite) -> [];
'not-wf-sa-042'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/042.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/042.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -652,15 +600,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-043
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-043'(suite) -> [];
'not-wf-sa-043'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/043.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/043.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"Illegal data\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"Illegal data\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -668,15 +615,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-044
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-044'(suite) -> [];
'not-wf-sa-044'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/044.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/044.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<doc/>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"<doc/>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -684,12 +630,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-045
%% Type: not-wf
%% Sections: 3.1 [44]
-'not-wf-sa-045'(suite) -> [];
'not-wf-sa-045'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/045.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/045.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -697,12 +642,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-046
%% Type: not-wf
%% Sections: 3.1 [40]
-'not-wf-sa-046'(suite) -> [];
'not-wf-sa-046'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/046.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/046.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -710,12 +654,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-047
%% Type: not-wf
%% Sections: 3.1 [44]
-'not-wf-sa-047'(suite) -> [];
'not-wf-sa-047'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/047.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/047.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -723,15 +666,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-048
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-048'(suite) -> [];
'not-wf-sa-048'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/048.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/048.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<![CDATA[]]>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"<![CDATA[]]>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -739,12 +681,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-049
%% Type: not-wf
%% Sections: 3.1 [40]
-'not-wf-sa-049'(suite) -> [];
'not-wf-sa-049'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/049.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/049.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -752,12 +693,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-050
%% Type: not-wf
%% Sections: 2.1 [1]
-'not-wf-sa-050'(suite) -> [];
'not-wf-sa-050'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/050.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/050.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -765,12 +705,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-051
%% Type: not-wf
%% Sections: 2.7 [18]
-'not-wf-sa-051'(suite) -> [];
'not-wf-sa-051'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/051.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/051.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -778,12 +717,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-052
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-052'(suite) -> [];
'not-wf-sa-052'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/052.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/052.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -791,12 +729,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-053
%% Type: not-wf
%% Sections: 3.1 [42]
-'not-wf-sa-053'(suite) -> [];
'not-wf-sa-053'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/053.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/053.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -804,12 +741,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-054
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'not-wf-sa-054'(suite) -> [];
'not-wf-sa-054'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/054.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/054.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -817,12 +753,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-055
%% Type: not-wf
%% Sections: 2.8 [28]
-'not-wf-sa-055'(suite) -> [];
'not-wf-sa-055'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/055.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/055.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -830,12 +765,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-056
%% Type: not-wf
%% Sections: 2.8 [28]
-'not-wf-sa-056'(suite) -> [];
'not-wf-sa-056'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/056.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/056.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -843,12 +777,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-057
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-057'(suite) -> [];
'not-wf-sa-057'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/057.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/057.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -856,12 +789,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-058
%% Type: not-wf
%% Sections: 3.3.1 [54]
-'not-wf-sa-058'(suite) -> [];
'not-wf-sa-058'(_Config) -> {skip, "Attlist Notation parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/058.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/058.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -869,12 +801,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-059
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'not-wf-sa-059'(suite) -> [];
'not-wf-sa-059'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/059.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/059.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -882,12 +813,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-060
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'not-wf-sa-060'(suite) -> [];
'not-wf-sa-060'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/060.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/060.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -895,12 +825,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-061
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'not-wf-sa-061'(suite) -> [];
'not-wf-sa-061'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/061.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/061.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -908,12 +837,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-062
%% Type: not-wf
%% Sections: 4.2 [71]
-'not-wf-sa-062'(suite) -> [];
'not-wf-sa-062'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/062.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/062.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -921,12 +849,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-063
%% Type: not-wf
%% Sections: 2.8 [29]
-'not-wf-sa-063'(suite) -> [];
'not-wf-sa-063'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/063.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/063.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -934,12 +861,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-064
%% Type: not-wf
%% Sections: 3.3 [53]
-'not-wf-sa-064'(suite) -> [];
'not-wf-sa-064'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/064.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/064.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -947,12 +873,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-065
%% Type: not-wf
%% Sections: 3.3 [53]
-'not-wf-sa-065'(suite) -> [];
'not-wf-sa-065'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/065.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/065.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -960,12 +885,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-066
%% Type: not-wf
%% Sections: 3.3 [52]
-'not-wf-sa-066'(suite) -> [];
'not-wf-sa-066'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/066.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/066.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -973,12 +897,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-067
%% Type: not-wf
%% Sections: 3.3 [53]
-'not-wf-sa-067'(suite) -> [];
'not-wf-sa-067'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/067.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/067.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -986,12 +909,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-068
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'not-wf-sa-068'(suite) -> [];
'not-wf-sa-068'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/068.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/068.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -999,12 +921,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-069
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'not-wf-sa-069'(suite) -> [];
'not-wf-sa-069'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/069.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/069.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1012,12 +933,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-070
%% Type: not-wf
%% Sections: 2.5 [16]
-'not-wf-sa-070'(suite) -> [];
'not-wf-sa-070'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/070.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/070.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1025,12 +945,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-071
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-071'(suite) -> [];
'not-wf-sa-071'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/071.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/071.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1038,12 +957,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-072
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-072'(suite) -> [];
'not-wf-sa-072'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/072.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/072.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1051,12 +969,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-073
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-073'(suite) -> [];
'not-wf-sa-073'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/073.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/073.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1064,12 +981,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-074
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-074'(suite) -> [];
'not-wf-sa-074'(_Config) -> {skip, "Entity not correct tag pair NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/074.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/074.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1077,12 +993,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-075
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-075'(suite) -> [];
'not-wf-sa-075'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/075.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/075.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1090,12 +1005,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-076
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-076'(suite) -> [];
'not-wf-sa-076'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/076.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/076.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1103,12 +1017,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-077
%% Type: not-wf
%% Sections: 41. [68]
-'not-wf-sa-077'(suite) -> [];
'not-wf-sa-077'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/077.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/077.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1116,12 +1029,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-078
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-078'(suite) -> [];
'not-wf-sa-078'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/078.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/078.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1129,12 +1041,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-079
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-079'(suite) -> [];
'not-wf-sa-079'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/079.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/079.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1142,12 +1053,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-080
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-080'(suite) -> [];
'not-wf-sa-080'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/080.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/080.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1155,12 +1065,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-081
%% Type: not-wf
%% Sections: 3.1
-'not-wf-sa-081'(suite) -> [];
'not-wf-sa-081'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/081.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/081.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1168,12 +1077,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-082
%% Type: not-wf
%% Sections: 3.1
-'not-wf-sa-082'(suite) -> [];
'not-wf-sa-082'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/082.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/082.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1181,12 +1089,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-083
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'not-wf-sa-083'(suite) -> [];
'not-wf-sa-083'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/083.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/083.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1194,12 +1101,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-084
%% Type: not-wf
%% Sections: 4.1
-'not-wf-sa-084'(suite) -> [];
'not-wf-sa-084'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/084.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/084.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1207,12 +1113,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-085
%% Type: not-wf
%% Sections: 2.3 [13]
-'not-wf-sa-085'(suite) -> [];
'not-wf-sa-085'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/085.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/085.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1220,12 +1125,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-086
%% Type: not-wf
%% Sections: 2.3 [13]
-'not-wf-sa-086'(suite) -> [];
'not-wf-sa-086'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/086.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/086.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1233,12 +1137,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-087
%% Type: not-wf
%% Sections: 2.3 [13]
-'not-wf-sa-087'(suite) -> [];
'not-wf-sa-087'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/087.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/087.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1246,12 +1149,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-088
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-088'(suite) -> [];
'not-wf-sa-088'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/088.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/088.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1259,12 +1161,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-089
%% Type: not-wf
%% Sections: 4.2 [74]
-'not-wf-sa-089'(suite) -> [];
'not-wf-sa-089'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/089.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/089.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1272,12 +1173,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-090
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-090'(suite) -> [];
'not-wf-sa-090'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/090.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/090.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1285,12 +1185,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-091
%% Type: not-wf
%% Sections: 4.2 [74]
-'not-wf-sa-091'(suite) -> [];
'not-wf-sa-091'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/091.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/091.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1298,12 +1197,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-092
%% Type: not-wf
%% Sections: 4.5
-'not-wf-sa-092'(suite) -> [];
'not-wf-sa-092'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/092.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/092.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1311,12 +1209,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-093
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-093'(suite) -> [];
'not-wf-sa-093'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/093.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/093.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1324,12 +1221,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-094
%% Type: not-wf
%% Sections: 2.8 [24]
-'not-wf-sa-094'(suite) -> [];
'not-wf-sa-094'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/094.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/094.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1337,12 +1233,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-095
%% Type: not-wf
%% Sections: 2.8 [23]
-'not-wf-sa-095'(suite) -> [];
'not-wf-sa-095'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/095.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/095.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1350,12 +1245,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-096
%% Type: not-wf
%% Sections: 2.9 [32]
-'not-wf-sa-096'(suite) -> [];
'not-wf-sa-096'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/096.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/096.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1363,12 +1257,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-097
%% Type: not-wf
%% Sections: 2.8 [24]
-'not-wf-sa-097'(suite) -> [];
'not-wf-sa-097'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/097.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/097.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1376,12 +1269,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-098
%% Type: not-wf
%% Sections: 2.8 [23]
-'not-wf-sa-098'(suite) -> [];
'not-wf-sa-098'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/098.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/098.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1389,12 +1281,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-099
%% Type: not-wf
%% Sections: 2.8 [23]
-'not-wf-sa-099'(suite) -> [];
'not-wf-sa-099'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/099.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/099.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1402,12 +1293,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-100
%% Type: not-wf
%% Sections: 2.9 [32]
-'not-wf-sa-100'(suite) -> [];
'not-wf-sa-100'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/100.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/100.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1415,12 +1305,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-101
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'not-wf-sa-101'(suite) -> [];
'not-wf-sa-101'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/101.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/101.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1428,12 +1317,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-102
%% Type: not-wf
%% Sections: 2.8 [26]
-'not-wf-sa-102'(suite) -> [];
'not-wf-sa-102'(Config) -> {skip, "Fix 2"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/102.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/102.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1441,12 +1329,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-103
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-103'(suite) -> [];
'not-wf-sa-103'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/103.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/103.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1454,12 +1341,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-104
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-104'(suite) -> [];
'not-wf-sa-104'(_Config) -> {skip, "Entity not correct tag pair NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/104.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/104.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1467,12 +1353,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-105
%% Type: not-wf
%% Sections: 2.7
-'not-wf-sa-105'(suite) -> [];
'not-wf-sa-105'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/105.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/105.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1480,12 +1365,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-106
%% Type: not-wf
%% Sections: 4.2
-'not-wf-sa-106'(suite) -> [];
'not-wf-sa-106'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/106.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/106.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1493,12 +1377,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-107
%% Type: not-wf
%% Sections: 2.8 [28]
-'not-wf-sa-107'(suite) -> [];
'not-wf-sa-107'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/107.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/107.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1506,12 +1389,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-108
%% Type: not-wf
%% Sections: 2.7 [19]
-'not-wf-sa-108'(suite) -> [];
'not-wf-sa-108'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/108.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/108.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1519,12 +1401,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-109
%% Type: not-wf
%% Sections: 4.2 [70]
-'not-wf-sa-109'(suite) -> [];
'not-wf-sa-109'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/109.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/109.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1532,15 +1413,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-110
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-110'(suite) -> [];
'not-wf-sa-110'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/110.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/110.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"&e;\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"&e;\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1548,12 +1428,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-111
%% Type: not-wf
%% Sections: 3.1 [43]
-'not-wf-sa-111'(suite) -> [];
'not-wf-sa-111'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/111.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/111.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1561,12 +1440,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-112
%% Type: not-wf
%% Sections: 2.7 [19]
-'not-wf-sa-112'(suite) -> [];
'not-wf-sa-112'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/112.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/112.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1574,12 +1452,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-113
%% Type: not-wf
%% Sections: 2.3 [9]
-'not-wf-sa-113'(suite) -> [];
'not-wf-sa-113'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/113.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/113.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1587,12 +1464,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-114
%% Type: not-wf
%% Sections: 2.3 [9]
-'not-wf-sa-114'(suite) -> [];
'not-wf-sa-114'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/114.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/114.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1600,12 +1476,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-115
%% Type: not-wf
%% Sections: 4.5
-'not-wf-sa-115'(suite) -> [];
'not-wf-sa-115'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/115.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/115.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1613,12 +1488,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-116
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-116'(suite) -> [];
'not-wf-sa-116'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/116.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/116.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1626,12 +1500,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-117
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-117'(suite) -> [];
'not-wf-sa-117'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/117.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/117.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1639,12 +1512,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-118
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-118'(suite) -> [];
'not-wf-sa-118'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/118.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/118.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1652,12 +1524,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-119
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-119'(suite) -> [];
'not-wf-sa-119'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/119.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/119.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1665,12 +1536,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-120
%% Type: not-wf
%% Sections: 4.5
-'not-wf-sa-120'(suite) -> [];
'not-wf-sa-120'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/120.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/120.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1678,12 +1548,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-121
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-121'(suite) -> [];
'not-wf-sa-121'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/121.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/121.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1691,12 +1560,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-122
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'not-wf-sa-122'(suite) -> [];
'not-wf-sa-122'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/122.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/122.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1704,12 +1572,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-123
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'not-wf-sa-123'(suite) -> [];
'not-wf-sa-123'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/123.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/123.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1717,12 +1584,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-124
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-124'(suite) -> [];
'not-wf-sa-124'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/124.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/124.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1730,12 +1596,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-125
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-125'(suite) -> [];
'not-wf-sa-125'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/125.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/125.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1743,12 +1608,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-126
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-126'(suite) -> [];
'not-wf-sa-126'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/126.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/126.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1756,12 +1620,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-127
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-127'(suite) -> [];
'not-wf-sa-127'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/127.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/127.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1769,12 +1632,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-128
%% Type: not-wf
%% Sections: 2.7 [18]
-'not-wf-sa-128'(suite) -> [];
'not-wf-sa-128'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/128.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/128.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1782,12 +1644,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-129
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-129'(suite) -> [];
'not-wf-sa-129'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/129.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/129.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1795,12 +1656,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-130
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-130'(suite) -> [];
'not-wf-sa-130'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/130.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/130.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1808,12 +1668,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-131
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-131'(suite) -> [];
'not-wf-sa-131'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/131.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/131.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1821,12 +1680,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-132
%% Type: not-wf
%% Sections: 3.2.1 [50]
-'not-wf-sa-132'(suite) -> [];
'not-wf-sa-132'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/132.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/132.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1834,12 +1692,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-133
%% Type: not-wf
%% Sections: 3.2.1
-'not-wf-sa-133'(suite) -> [];
'not-wf-sa-133'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/133.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/133.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1847,12 +1704,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-134
%% Type: not-wf
%% Sections: 3.2.1
-'not-wf-sa-134'(suite) -> [];
'not-wf-sa-134'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/134.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/134.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1860,12 +1716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-135
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'not-wf-sa-135'(suite) -> [];
'not-wf-sa-135'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/135.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/135.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1873,12 +1728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-136
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-136'(suite) -> [];
'not-wf-sa-136'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/136.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/136.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1886,12 +1740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-137
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-137'(suite) -> [];
'not-wf-sa-137'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/137.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/137.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1899,12 +1752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-138
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'not-wf-sa-138'(suite) -> [];
'not-wf-sa-138'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/138.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/138.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1912,12 +1764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-139
%% Type: not-wf
%% Sections: 3.2.1 [46]
-'not-wf-sa-139'(suite) -> [];
'not-wf-sa-139'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/139.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/139.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1925,12 +1776,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-140
%% Type: not-wf
%% Sections: 2.3 [4]
-'not-wf-sa-140'(suite) -> [];
'not-wf-sa-140'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/140.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/140.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1938,12 +1788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-141
%% Type: not-wf
%% Sections: 2.3 [5]
-'not-wf-sa-141'(suite) -> [];
'not-wf-sa-141'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/141.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/141.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1951,12 +1800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-142
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-142'(suite) -> [];
'not-wf-sa-142'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/142.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/142.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1964,12 +1812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-143
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-143'(suite) -> [];
'not-wf-sa-143'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/143.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/143.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1977,12 +1824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-144
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-144'(suite) -> [];
'not-wf-sa-144'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/144.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/144.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1990,12 +1836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-145
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-145'(suite) -> [];
'not-wf-sa-145'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/145.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/145.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2003,12 +1848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-146
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-146'(suite) -> [];
'not-wf-sa-146'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/146.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/146.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2016,12 +1860,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-147
%% Type: not-wf
%% Sections: 2.8 [22]
-'not-wf-sa-147'(suite) -> [];
'not-wf-sa-147'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/147.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/147.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2029,12 +1872,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-148
%% Type: not-wf
%% Sections: 2.8 [22]
-'not-wf-sa-148'(suite) -> [];
'not-wf-sa-148'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/148.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/148.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2042,12 +1884,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-149
%% Type: not-wf
%% Sections: 2.8 [28]
-'not-wf-sa-149'(suite) -> [];
'not-wf-sa-149'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/149.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/149.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2055,12 +1896,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-150
%% Type: not-wf
%% Sections: 3.1 [43]
-'not-wf-sa-150'(suite) -> [];
'not-wf-sa-150'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/150.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/150.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2068,16 +1908,15 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-151
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-151'(suite) -> [];
'not-wf-sa-151'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/151.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/151.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<?xml version=\"1.0\"?>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- % ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- % ?line check_result(R, "not-wf").
+ {ok,_,<<"<?xml version=\"1.0\"?>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ % R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ % check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2085,12 +1924,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-152
%% Type: not-wf
%% Sections: 2.8 [22]
-'not-wf-sa-152'(suite) -> [];
'not-wf-sa-152'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/152.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/152.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2098,12 +1936,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-153
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-153'(suite) -> [];
'not-wf-sa-153'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/153.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/153.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2111,12 +1948,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-154
%% Type: not-wf
%% Sections: 2.8 2.6 [23, 17]
-'not-wf-sa-154'(suite) -> [];
'not-wf-sa-154'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/154.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/154.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2124,12 +1960,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-155
%% Type: not-wf
%% Sections: 2.8 2.6 [23, 17]
-'not-wf-sa-155'(suite) -> [];
'not-wf-sa-155'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/155.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/155.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2137,12 +1972,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-156
%% Type: not-wf
%% Sections: 2.8 2.6 [23, 17]
-'not-wf-sa-156'(suite) -> [];
'not-wf-sa-156'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/156.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/156.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2150,12 +1984,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-157
%% Type: not-wf
%% Sections: 2.6 [17]
-'not-wf-sa-157'(suite) -> [];
'not-wf-sa-157'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/157.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/157.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2163,12 +1996,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-158
%% Type: not-wf
%% Sections: 3.3 [52]
-'not-wf-sa-158'(suite) -> [];
'not-wf-sa-158'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/158.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/158.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2176,12 +2008,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-159
%% Type: not-wf
%% Sections: 2.3 [9]
-'not-wf-sa-159'(suite) -> [];
'not-wf-sa-159'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/159.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/159.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2189,12 +2020,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-160
%% Type: not-wf
%% Sections: 2.8
-'not-wf-sa-160'(suite) -> [];
'not-wf-sa-160'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/160.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/160.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2202,12 +2032,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-161
%% Type: not-wf
%% Sections: 2.8
-'not-wf-sa-161'(suite) -> [];
'not-wf-sa-161'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/161.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/161.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2215,12 +2044,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-162
%% Type: not-wf
%% Sections: 2.8
-'not-wf-sa-162'(suite) -> [];
'not-wf-sa-162'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/162.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/162.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2228,12 +2056,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-163
%% Type: not-wf
%% Sections: 4.1 [69]
-'not-wf-sa-163'(suite) -> [];
'not-wf-sa-163'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/163.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/163.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2241,12 +2068,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-164
%% Type: not-wf
%% Sections: 4.1 [69]
-'not-wf-sa-164'(suite) -> [];
'not-wf-sa-164'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/164.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/164.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2254,12 +2080,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-165
%% Type: not-wf
%% Sections: 4.2 [72]
-'not-wf-sa-165'(suite) -> [];
'not-wf-sa-165'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/165.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/165.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2267,12 +2092,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-166
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-166'(suite) -> [];
'not-wf-sa-166'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/166.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/166.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2280,12 +2104,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-167
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-167'(suite) -> [];
'not-wf-sa-167'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/167.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/167.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2293,12 +2116,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-168
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-168'(suite) -> [];
'not-wf-sa-168'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/168.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/168.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2306,12 +2128,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-169
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-169'(suite) -> [];
'not-wf-sa-169'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/169.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/169.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2319,12 +2140,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-170
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-170'(suite) -> [];
'not-wf-sa-170'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/170.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/170.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2332,12 +2152,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-171
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-171'(suite) -> [];
'not-wf-sa-171'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/171.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/171.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2345,12 +2164,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-172
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-172'(suite) -> [];
'not-wf-sa-172'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/172.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/172.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2358,12 +2176,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-173
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-173'(suite) -> [];
'not-wf-sa-173'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/173.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/173.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2371,12 +2188,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-174
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-174'(suite) -> [];
'not-wf-sa-174'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/174.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/174.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2384,12 +2200,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-175
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-175'(suite) -> [];
'not-wf-sa-175'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/175.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/175.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2397,12 +2212,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-176
%% Type: not-wf
%% Sections: 3 [39]
-'not-wf-sa-176'(suite) -> [];
'not-wf-sa-176'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/176.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/176.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2410,12 +2224,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-177
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-177'(suite) -> [];
'not-wf-sa-177'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/177.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/177.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2423,12 +2236,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-178
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-178'(suite) -> [];
'not-wf-sa-178'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/178.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/178.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2436,12 +2248,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-179
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-179'(suite) -> [];
'not-wf-sa-179'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/179.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/179.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2449,12 +2260,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-180
%% Type: not-wf
%% Sections: 4.1
-'not-wf-sa-180'(suite) -> [];
'not-wf-sa-180'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/180.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/180.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2462,12 +2272,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-181
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-181'(suite) -> [];
'not-wf-sa-181'(_Config) -> {skip, "Entity not tag pair NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/181.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/181.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2475,12 +2284,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-182
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-182'(suite) -> [];
'not-wf-sa-182'(_Config) -> {skip, "Entity not tag pair NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/182.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/182.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2488,12 +2296,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-183
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-183'(suite) -> [];
'not-wf-sa-183'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/183.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/183.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2501,12 +2308,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-184
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-184'(suite) -> [];
'not-wf-sa-184'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/184.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/184.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2514,12 +2320,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-185
%% Type: not-wf
%% Sections: 4.1
-'not-wf-sa-185'(suite) -> [];
'not-wf-sa-185'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/185.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/185.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2527,12 +2332,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-186
%% Type: not-wf
%% Sections: 3.1 [44]
-'not-wf-sa-186'(suite) -> [];
'not-wf-sa-186'(Config) -> {skip, "Fix 2"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/186.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/186.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2540,12 +2344,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-001
%% Type: not-wf
%% Sections: 3.4 [62]
-'not-wf-not-sa-001'(suite) -> [];
'not-wf-not-sa-001'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/001.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/001.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2553,12 +2356,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-002
%% Type: not-wf
%% Sections: 2.6 [17]
-'not-wf-not-sa-002'(suite) -> [];
'not-wf-not-sa-002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2566,12 +2368,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-003
%% Type: not-wf
%% Sections: 3.4 [62]
-'not-wf-not-sa-003'(suite) -> [];
'not-wf-not-sa-003'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/003.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/003.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2579,12 +2380,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-004
%% Type: not-wf
%% Sections: 3.4 [62]
-'not-wf-not-sa-004'(suite) -> [];
'not-wf-not-sa-004'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/004.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/004.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2592,12 +2392,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-005
%% Type: error
%% Sections: 4.1
-'not-wf-not-sa-005'(suite) -> [];
'not-wf-not-sa-005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -2605,12 +2404,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-006
%% Type: not-wf
%% Sections: 3.4 [62]
-'not-wf-not-sa-006'(suite) -> [];
'not-wf-not-sa-006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2618,12 +2416,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-007
%% Type: not-wf
%% Sections: 4.3.2 [79]
-'not-wf-not-sa-007'(suite) -> [];
'not-wf-not-sa-007'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/007.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/007.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2631,12 +2428,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-008
%% Type: not-wf
%% Sections: 4.1 [69]
-'not-wf-not-sa-008'(suite) -> [];
'not-wf-not-sa-008'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/008.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/008.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2644,12 +2440,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-009
%% Type: not-wf
%% Sections: 2.8
-'not-wf-not-sa-009'(suite) -> [];
'not-wf-not-sa-009'(_Config) -> {skip, "not a complete content in PE NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/009.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/009.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2657,12 +2452,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-ext-sa-001
%% Type: not-wf
%% Sections: 4.1
-'not-wf-ext-sa-001'(suite) -> [];
'not-wf-ext-sa-001'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/001.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/001.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2670,12 +2464,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-ext-sa-002
%% Type: not-wf
%% Sections: 4.3.1 4.3.2 [77, 78]
-'not-wf-ext-sa-002'(suite) -> [];
'not-wf-ext-sa-002'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/002.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/002.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2683,12 +2476,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-ext-sa-003
%% Type: not-wf
%% Sections: 2.6 [17]
-'not-wf-ext-sa-003'(suite) -> [];
'not-wf-ext-sa-003'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/003.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/003.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2696,12 +2488,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: invalid--002
%% Type: invalid
%% Sections: 3.2.1
-'invalid--002'(suite) -> [];
'invalid--002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2709,12 +2500,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: invalid--005
%% Type: invalid
%% Sections: 2.8
-'invalid--005'(suite) -> [];
'invalid--005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2722,12 +2512,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: invalid--006
%% Type: invalid
%% Sections: 2.8
-'invalid--006'(suite) -> [];
'invalid--006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2735,12 +2524,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: invalid-not-sa-022
%% Type: invalid
%% Sections: 3.4 [62]
-'invalid-not-sa-022'(suite) -> [];
'invalid-not-sa-022'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/not-sa/022.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "invalid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/not-sa/022.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2748,12 +2536,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-001
%% Type: valid
%% Sections: 3.2.2 [51]
-'valid-sa-001'(suite) -> [];
'valid-sa-001'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/001.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/001.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2761,12 +2548,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-002
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-002'(suite) -> [];
'valid-sa-002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2774,12 +2560,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-003
%% Type: valid
%% Sections: 3.1 [42]
-'valid-sa-003'(suite) -> [];
'valid-sa-003'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/003.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/003.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2787,12 +2572,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-004
%% Type: valid
%% Sections: 3.1 [41]
-'valid-sa-004'(suite) -> [];
'valid-sa-004'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/004.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/004.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2800,12 +2584,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-005
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-005'(suite) -> [];
'valid-sa-005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2813,12 +2596,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-006
%% Type: valid
%% Sections: 3.1 [41]
-'valid-sa-006'(suite) -> [];
'valid-sa-006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2826,12 +2608,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-007
%% Type: valid
%% Sections: 3.1 4.6 [43]
-'valid-sa-007'(suite) -> [];
'valid-sa-007'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/007.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/007.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2839,12 +2620,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-008
%% Type: valid
%% Sections: 2.4 3.1 [43]
-'valid-sa-008'(suite) -> [];
'valid-sa-008'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/008.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/008.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2852,12 +2632,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-009
%% Type: valid
%% Sections: 2.3 3.1 [43]
-'valid-sa-009'(suite) -> [];
'valid-sa-009'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/009.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/009.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2865,12 +2644,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-010
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-010'(suite) -> [];
'valid-sa-010'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/010.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/010.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2878,12 +2656,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-011
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-011'(suite) -> [];
'valid-sa-011'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/011.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/011.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2891,12 +2668,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-012
%% Type: valid
%% Sections: 2.3 [4]
-'valid-sa-012'(suite) -> [];
'valid-sa-012'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/012.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/012.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2904,12 +2680,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-013
%% Type: valid
%% Sections: 2.3 3.1 [13] [40]
-'valid-sa-013'(suite) -> [];
'valid-sa-013'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/013.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/013.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2917,12 +2692,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-014
%% Type: valid
%% Sections: 2.3 3.1 [13] [40]
-'valid-sa-014'(suite) -> [];
'valid-sa-014'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/014.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/014.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2930,12 +2704,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-015
%% Type: valid
%% Sections: 2.3 3.1 [13] [40]
-'valid-sa-015'(suite) -> [];
'valid-sa-015'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/015.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/015.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2943,12 +2716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-016
%% Type: valid
%% Sections: 2.6 3.1 [16] [43]
-'valid-sa-016'(suite) -> [];
'valid-sa-016'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/016.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/016.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2956,12 +2728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-017
%% Type: valid
%% Sections: 2.6 3.1 [16] [43]
-'valid-sa-017'(suite) -> [];
'valid-sa-017'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/017.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/017.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2969,12 +2740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-018
%% Type: valid
%% Sections: 2.7 3.1 [18] [43]
-'valid-sa-018'(suite) -> [];
'valid-sa-018'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/018.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/018.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2982,12 +2752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-019
%% Type: valid
%% Sections: 2.7 3.1 [18] [43]
-'valid-sa-019'(suite) -> [];
'valid-sa-019'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/019.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/019.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2995,12 +2764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-020
%% Type: valid
%% Sections: 2.7 3.1 [18] [43]
-'valid-sa-020'(suite) -> [];
'valid-sa-020'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/020.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/020.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3008,12 +2776,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-021
%% Type: valid
%% Sections: 2.5 3.1 [15] [43]
-'valid-sa-021'(suite) -> [];
'valid-sa-021'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/021.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/021.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3021,12 +2788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-022
%% Type: valid
%% Sections: 2.5 3.1 [15] [43]
-'valid-sa-022'(suite) -> [];
'valid-sa-022'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/022.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/022.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3034,12 +2800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-023
%% Type: valid
%% Sections: 3.1 [43]
-'valid-sa-023'(suite) -> [];
'valid-sa-023'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/023.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/023.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3047,12 +2812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-024
%% Type: valid
%% Sections: 3.1 4.1 [43] [66]
-'valid-sa-024'(suite) -> [];
'valid-sa-024'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/024.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/024.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3060,12 +2824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-025
%% Type: valid
%% Sections: 3.2 [46]
-'valid-sa-025'(suite) -> [];
'valid-sa-025'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/025.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/025.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3073,12 +2836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-026
%% Type: valid
%% Sections: 3.2 [46]
-'valid-sa-026'(suite) -> [];
'valid-sa-026'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/026.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/026.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3086,12 +2848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-027
%% Type: valid
%% Sections: 3.2 [46]
-'valid-sa-027'(suite) -> [];
'valid-sa-027'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/027.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/027.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3099,12 +2860,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-028
%% Type: valid
%% Sections: 2.8 [24]
-'valid-sa-028'(suite) -> [];
'valid-sa-028'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/028.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/028.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3112,12 +2872,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-029
%% Type: valid
%% Sections: 2.8 [24]
-'valid-sa-029'(suite) -> [];
'valid-sa-029'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/029.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/029.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3125,12 +2884,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-030
%% Type: valid
%% Sections: 2.8 [25]
-'valid-sa-030'(suite) -> [];
'valid-sa-030'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/030.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/030.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3138,12 +2896,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-031
%% Type: valid
%% Sections: 4.3.3 [80]
-'valid-sa-031'(suite) -> [];
'valid-sa-031'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/031.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/031.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3151,12 +2908,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-032
%% Type: valid
%% Sections: 2.9 [32]
-'valid-sa-032'(suite) -> [];
'valid-sa-032'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/032.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/032.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3164,12 +2920,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-033
%% Type: valid
%% Sections: 2.8 [23]
-'valid-sa-033'(suite) -> [];
'valid-sa-033'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/033.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/033.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3177,12 +2932,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-034
%% Type: valid
%% Sections: 3.1 [44]
-'valid-sa-034'(suite) -> [];
'valid-sa-034'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/034.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/034.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3190,12 +2944,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-035
%% Type: valid
%% Sections: 3.1 [44]
-'valid-sa-035'(suite) -> [];
'valid-sa-035'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/035.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/035.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3203,12 +2956,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-036
%% Type: valid
%% Sections: 2.6 [16]
-'valid-sa-036'(suite) -> [];
'valid-sa-036'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/036.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/036.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3216,12 +2968,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-037
%% Type: valid
%% Sections: 2.6 [15]
-'valid-sa-037'(suite) -> [];
'valid-sa-037'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/037.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/037.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3229,12 +2980,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-038
%% Type: valid
%% Sections: 2.6 [15]
-'valid-sa-038'(suite) -> [];
'valid-sa-038'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/038.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/038.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3242,12 +2992,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-039
%% Type: valid
%% Sections: 2.6 [16]
-'valid-sa-039'(suite) -> [];
'valid-sa-039'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/039.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/039.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3255,12 +3004,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-040
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [54]
-'valid-sa-040'(suite) -> [];
'valid-sa-040'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/040.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/040.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3268,12 +3016,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-041
%% Type: valid
%% Sections: 3.3.1 4.1 [54] [66]
-'valid-sa-041'(suite) -> [];
'valid-sa-041'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/041.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/041.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3281,12 +3028,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-042
%% Type: valid
%% Sections: 3.3.1 4.1 [54] [66]
-'valid-sa-042'(suite) -> [];
'valid-sa-042'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/042.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/042.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3294,12 +3040,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-043
%% Type: valid
%% Sections: 3.3
-'valid-sa-043'(suite) -> [];
'valid-sa-043'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/043.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/043.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3307,12 +3052,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-044
%% Type: valid
%% Sections: 3.1 [44]
-'valid-sa-044'(suite) -> [];
'valid-sa-044'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/044.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/044.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3320,12 +3064,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-045
%% Type: valid
%% Sections: 3.3 [52]
-'valid-sa-045'(suite) -> [];
'valid-sa-045'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/045.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/045.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3333,12 +3076,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-046
%% Type: valid
%% Sections: 3.3 [52]
-'valid-sa-046'(suite) -> [];
'valid-sa-046'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/046.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/046.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3346,12 +3088,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-047
%% Type: valid
%% Sections: 3.1 [43]
-'valid-sa-047'(suite) -> [];
'valid-sa-047'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/047.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/047.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3359,12 +3100,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-048
%% Type: valid
%% Sections: 2.4 3.1 [14] [43]
-'valid-sa-048'(suite) -> [];
'valid-sa-048'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/048.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/048.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3372,12 +3112,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-049
%% Type: valid
%% Sections: 2.2 [2]
-'valid-sa-049'(suite) -> [];
'valid-sa-049'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/049.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/049.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3385,12 +3124,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-050
%% Type: valid
%% Sections: 2.2 [2]
-'valid-sa-050'(suite) -> [];
'valid-sa-050'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/050.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/050.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3398,12 +3136,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-051
%% Type: valid
%% Sections: 2.2 [2]
-'valid-sa-051'(suite) -> [];
'valid-sa-051'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/051.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/051.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3411,12 +3148,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-052
%% Type: valid
%% Sections: 2.2 [2]
-'valid-sa-052'(suite) -> [];
'valid-sa-052'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/052.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/052.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3424,12 +3160,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-053
%% Type: valid
%% Sections: 4.4.2
-'valid-sa-053'(suite) -> [];
'valid-sa-053'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/053.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/053.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3437,12 +3172,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-054
%% Type: valid
%% Sections: 3.1 [40] [42]
-'valid-sa-054'(suite) -> [];
'valid-sa-054'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/054.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/054.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3450,12 +3184,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-055
%% Type: valid
%% Sections: 2.6 2.10 [16]
-'valid-sa-055'(suite) -> [];
'valid-sa-055'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/055.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/055.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3463,12 +3196,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-056
%% Type: valid
%% Sections: 3.3.1 4.1 [54] [66]
-'valid-sa-056'(suite) -> [];
'valid-sa-056'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/056.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/056.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3476,12 +3208,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-057
%% Type: valid
%% Sections: 3.2.1 [47]
-'valid-sa-057'(suite) -> [];
'valid-sa-057'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/057.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/057.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3489,12 +3220,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-058
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-058'(suite) -> [];
'valid-sa-058'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/058.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/058.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3502,12 +3232,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-059
%% Type: valid
%% Sections: 3.2 3.3 [46] [53]
-'valid-sa-059'(suite) -> [];
'valid-sa-059'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/059.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/059.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3515,12 +3244,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-060
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-060'(suite) -> [];
'valid-sa-060'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/060.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/060.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3528,12 +3256,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-061
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-061'(suite) -> [];
'valid-sa-061'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/061.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/061.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3541,12 +3268,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-062
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-062'(suite) -> [];
'valid-sa-062'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/062.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/062.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3554,12 +3280,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-063
%% Type: valid
%% Sections: 2.3 [5]
-'valid-sa-063'(suite) -> [];
'valid-sa-063'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/063.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/063.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3567,12 +3292,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-064
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-064'(suite) -> [];
'valid-sa-064'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/064.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/064.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3580,12 +3304,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-065
%% Type: valid
%% Sections: 4.5
-'valid-sa-065'(suite) -> [];
'valid-sa-065'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/065.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/065.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3593,12 +3316,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-066
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-066'(suite) -> [];
'valid-sa-066'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/066.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/066.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3606,12 +3328,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-067
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-067'(suite) -> [];
'valid-sa-067'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/067.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/067.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3619,12 +3340,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-068
%% Type: valid
%% Sections: 2.11, 4.5
-'valid-sa-068'(suite) -> [];
'valid-sa-068'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/068.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/068.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3632,12 +3352,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-069
%% Type: valid
%% Sections: 4.7
-'valid-sa-069'(suite) -> [];
'valid-sa-069'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/069.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/069.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3645,12 +3364,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-070
%% Type: valid
%% Sections: 4.4.8
-'valid-sa-070'(suite) -> [];
'valid-sa-070'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/070.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/070.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3658,12 +3376,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-071
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-071'(suite) -> [];
'valid-sa-071'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/071.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/071.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3671,12 +3388,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-072
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-072'(suite) -> [];
'valid-sa-072'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/072.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/072.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3684,12 +3400,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-073
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-073'(suite) -> [];
'valid-sa-073'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/073.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/073.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3697,12 +3412,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-074
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-074'(suite) -> [];
'valid-sa-074'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/074.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/074.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3710,12 +3424,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-075
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-075'(suite) -> [];
'valid-sa-075'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/075.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/075.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3723,12 +3436,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-076
%% Type: valid
%% Sections: 3.3.1
-'valid-sa-076'(suite) -> [];
'valid-sa-076'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/076.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/076.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3736,12 +3448,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-077
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [54]
-'valid-sa-077'(suite) -> [];
'valid-sa-077'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/077.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/077.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3749,12 +3460,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-078
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [54]
-'valid-sa-078'(suite) -> [];
'valid-sa-078'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/078.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/078.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3762,12 +3472,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-079
%% Type: valid
%% Sections: 3.3 3.3.2 [52] [60]
-'valid-sa-079'(suite) -> [];
'valid-sa-079'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/079.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/079.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3775,12 +3484,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-080
%% Type: valid
%% Sections: 3.3 3.3.2 [52] [60]
-'valid-sa-080'(suite) -> [];
'valid-sa-080'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/080.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/080.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3788,12 +3496,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-081
%% Type: valid
%% Sections: 3.2.1 [50]
-'valid-sa-081'(suite) -> [];
'valid-sa-081'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/081.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/081.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3801,12 +3508,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-082
%% Type: valid
%% Sections: 4.2 [72]
-'valid-sa-082'(suite) -> [];
'valid-sa-082'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/082.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/082.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3814,12 +3520,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-083
%% Type: valid
%% Sections: 4.2 [72]
-'valid-sa-083'(suite) -> [];
'valid-sa-083'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/083.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/083.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3827,12 +3532,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-084
%% Type: valid
%% Sections: 2.10
-'valid-sa-084'(suite) -> [];
'valid-sa-084'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/084.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/084.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3840,12 +3544,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-085
%% Type: valid
%% Sections: 4
-'valid-sa-085'(suite) -> [];
'valid-sa-085'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/085.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/085.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3853,12 +3556,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-086
%% Type: valid
%% Sections: 4.2
-'valid-sa-086'(suite) -> [];
'valid-sa-086'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/086.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/086.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3866,12 +3568,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-087
%% Type: valid
%% Sections: 4.5
-'valid-sa-087'(suite) -> [];
'valid-sa-087'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/087.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/087.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3879,12 +3580,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-088
%% Type: valid
%% Sections: 4.5
-'valid-sa-088'(suite) -> [];
'valid-sa-088'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/088.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/088.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3892,12 +3592,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-089
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-089'(suite) -> [];
'valid-sa-089'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/089.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/089.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3905,12 +3604,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-090
%% Type: valid
%% Sections: 3.3.1
-'valid-sa-090'(suite) -> [];
'valid-sa-090'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/090.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/090.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3918,12 +3616,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-091
%% Type: valid
%% Sections: 3.3.1
-'valid-sa-091'(suite) -> [];
'valid-sa-091'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/091.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/091.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3931,12 +3628,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-092
%% Type: valid
%% Sections: 2.3 2.10
-'valid-sa-092'(suite) -> [];
'valid-sa-092'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/092.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/092.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3944,12 +3640,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-093
%% Type: valid
%% Sections: 2.10
-'valid-sa-093'(suite) -> [];
'valid-sa-093'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/093.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/093.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3957,12 +3652,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-094
%% Type: valid
%% Sections: 2.8
-'valid-sa-094'(suite) -> [];
'valid-sa-094'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/094.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/094.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3970,12 +3664,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-095
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-095'(suite) -> [];
'valid-sa-095'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/095.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/095.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3983,12 +3676,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-096
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-096'(suite) -> [];
'valid-sa-096'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/096.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/096.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3996,12 +3688,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-097
%% Type: valid
%% Sections: 3.3
-'valid-sa-097'(suite) -> [];
'valid-sa-097'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/097.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/097.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4009,12 +3700,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-098
%% Type: valid
%% Sections: 2.6 2.10 [16]
-'valid-sa-098'(suite) -> [];
'valid-sa-098'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/098.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/098.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4022,12 +3712,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-099
%% Type: valid
%% Sections: 4.3.3 [81]
-'valid-sa-099'(suite) -> [];
'valid-sa-099'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/099.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/099.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4035,12 +3724,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-100
%% Type: valid
%% Sections: 2.3 [12]
-'valid-sa-100'(suite) -> [];
'valid-sa-100'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/100.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/100.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4048,12 +3736,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-101
%% Type: valid
%% Sections: 4.5
-'valid-sa-101'(suite) -> [];
'valid-sa-101'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/101.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/101.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4061,12 +3748,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-102
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-102'(suite) -> [];
'valid-sa-102'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/102.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/102.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4074,12 +3760,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-103
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-103'(suite) -> [];
'valid-sa-103'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/103.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/103.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4087,12 +3772,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-104
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-104'(suite) -> [];
'valid-sa-104'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/104.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/104.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4100,12 +3784,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-105
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-105'(suite) -> [];
'valid-sa-105'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/105.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/105.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4113,12 +3796,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-106
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-106'(suite) -> [];
'valid-sa-106'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/106.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/106.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4126,12 +3808,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-107
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-107'(suite) -> [];
'valid-sa-107'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/107.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/107.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4139,12 +3820,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-108
%% Type: valid
%% Sections: 2.11, 3.3.3
-'valid-sa-108'(suite) -> [];
'valid-sa-108'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/108.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/108.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4152,12 +3832,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-109
%% Type: valid
%% Sections: 2.3 3.1 [10][40][41]
-'valid-sa-109'(suite) -> [];
'valid-sa-109'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/109.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/109.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4165,12 +3844,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-110
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-110'(suite) -> [];
'valid-sa-110'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/110.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/110.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4178,12 +3856,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-111
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-111'(suite) -> [];
'valid-sa-111'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/111.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/111.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4191,12 +3868,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-112
%% Type: valid
%% Sections: 3.2.1 [48][49]
-'valid-sa-112'(suite) -> [];
'valid-sa-112'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/112.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/112.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4204,12 +3880,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-113
%% Type: valid
%% Sections: 3.3 [52][53]
-'valid-sa-113'(suite) -> [];
'valid-sa-113'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/113.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/113.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4217,12 +3892,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-114
%% Type: valid
%% Sections: 2.7 [20]
-'valid-sa-114'(suite) -> [];
'valid-sa-114'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/114.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/114.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4230,12 +3904,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-115
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-115'(suite) -> [];
'valid-sa-115'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/115.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/115.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4243,12 +3916,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-116
%% Type: valid
%% Sections: 2.11
-'valid-sa-116'(suite) -> [];
'valid-sa-116'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/116.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/116.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4256,12 +3928,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-117
%% Type: valid
%% Sections: 4.5
-'valid-sa-117'(suite) -> [];
'valid-sa-117'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/117.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/117.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4269,12 +3940,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-118
%% Type: valid
%% Sections: 4.5
-'valid-sa-118'(suite) -> [];
'valid-sa-118'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/118.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/118.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4282,12 +3952,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-119
%% Type: valid
%% Sections: 2.5
-'valid-sa-119'(suite) -> [];
'valid-sa-119'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/119.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/119.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4295,12 +3964,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-001
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-001'(suite) -> [];
'valid-not-sa-001'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/001.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/001.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4308,12 +3976,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-002
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-002'(suite) -> [];
'valid-not-sa-002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4321,12 +3988,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-003
%% Type: valid
%% Sections: 4.1 [69]
-'valid-not-sa-003'(suite) -> [];
'valid-not-sa-003'(_Config) -> {skip, "external entity NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/003.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/003.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4334,12 +4000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-004
%% Type: valid
%% Sections: 4.1 [69]
-'valid-not-sa-004'(suite) -> [];
'valid-not-sa-004'(_Config) -> {skip, "external entity NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/004.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/004.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4347,12 +4012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-005
%% Type: valid
%% Sections: 4.1 [69]
-'valid-not-sa-005'(suite) -> [];
'valid-not-sa-005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4360,12 +4024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-006
%% Type: valid
%% Sections: 3.3 [52]
-'valid-not-sa-006'(suite) -> [];
'valid-not-sa-006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4373,12 +4036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-007
%% Type: valid
%% Sections: 3.3 [52]
-'valid-not-sa-007'(suite) -> [];
'valid-not-sa-007'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/007.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/007.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4386,12 +4048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-008
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-008'(suite) -> [];
'valid-not-sa-008'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/008.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/008.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4399,12 +4060,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-009
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-009'(suite) -> [];
'valid-not-sa-009'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/009.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/009.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4412,12 +4072,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-010
%% Type: valid
%% Sections: 3.3 [52]
-'valid-not-sa-010'(suite) -> [];
'valid-not-sa-010'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/010.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/010.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4425,12 +4084,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-011
%% Type: valid
%% Sections: 4.2 4.2.1 [72] [75]
-'valid-not-sa-011'(suite) -> [];
'valid-not-sa-011'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/011.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/011.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4438,12 +4096,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-012
%% Type: valid
%% Sections: 4.3.1 [77]
-'valid-not-sa-012'(suite) -> [];
'valid-not-sa-012'(Config) -> {skip, "Fix 3"}.
- %% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/012.xml"]),
- %% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %% ?line check_result(R, "valid").
+ %% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/012.xml"]),
+ %% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4451,12 +4108,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-013
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-013'(suite) -> [];
'valid-not-sa-013'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/013.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/013.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4464,12 +4120,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-014
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-014'(suite) -> [];
'valid-not-sa-014'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/014.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/014.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4477,12 +4132,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-015
%% Type: valid
%% Sections: 3.4 [63]
-'valid-not-sa-015'(suite) -> [];
'valid-not-sa-015'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/015.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/015.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4490,12 +4144,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-016
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-016'(suite) -> [];
'valid-not-sa-016'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/016.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/016.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4503,12 +4156,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-017
%% Type: valid
%% Sections: 4.2 [72]
-'valid-not-sa-017'(suite) -> [];
'valid-not-sa-017'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/017.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/017.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4516,12 +4168,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-018
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-018'(suite) -> [];
'valid-not-sa-018'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/018.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/018.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4529,12 +4180,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-019
%% Type: valid
%% Sections: 4.4.8
-'valid-not-sa-019'(suite) -> [];
'valid-not-sa-019'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/019.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/019.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4542,12 +4192,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-020
%% Type: valid
%% Sections: 4.4.8
-'valid-not-sa-020'(suite) -> [];
'valid-not-sa-020'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/020.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/020.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4555,12 +4204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-021
%% Type: valid
%% Sections: 4.2 [72]
-'valid-not-sa-021'(suite) -> [];
'valid-not-sa-021'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/021.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/021.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4568,12 +4216,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-023
%% Type: valid
%% Sections: 2.3 4.1 [10] [69]
-'valid-not-sa-023'(suite) -> [];
'valid-not-sa-023'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/023.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/023.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4581,12 +4228,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-024
%% Type: valid
%% Sections: 2.8, 4.1 [69]
-'valid-not-sa-024'(suite) -> [];
'valid-not-sa-024'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/024.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/024.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4594,12 +4240,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-025
%% Type: valid
%% Sections: 4.2
-'valid-not-sa-025'(suite) -> [];
'valid-not-sa-025'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/025.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/025.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4607,12 +4252,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-026
%% Type: valid
%% Sections: 3.3 [52]
-'valid-not-sa-026'(suite) -> [];
'valid-not-sa-026'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/026.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/026.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4620,12 +4264,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-027
%% Type: valid
%% Sections: 4.1 [69]
-'valid-not-sa-027'(suite) -> [];
'valid-not-sa-027'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/027.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/027.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4633,12 +4276,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-028
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-028'(suite) -> [];
'valid-not-sa-028'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/028.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/028.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4646,12 +4288,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-029
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-029'(suite) -> [];
'valid-not-sa-029'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/029.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/029.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4659,12 +4300,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-030
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-030'(suite) -> [];
'valid-not-sa-030'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/030.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/030.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4672,12 +4312,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-031
%% Type: valid
%% Sections: 2.7
-'valid-not-sa-031'(suite) -> [];
'valid-not-sa-031'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/031.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/031.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4685,12 +4324,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-001
%% Type: valid
%% Sections: 2.11
-'valid-ext-sa-001'(suite) -> [];
'valid-ext-sa-001'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/001.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/001.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4698,12 +4336,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-002
%% Type: valid
%% Sections: 2.11
-'valid-ext-sa-002'(suite) -> [];
'valid-ext-sa-002'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/002.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/002.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4711,12 +4348,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-003
%% Type: valid
%% Sections: 3.1 4.1 [43] [68]
-'valid-ext-sa-003'(suite) -> [];
'valid-ext-sa-003'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/003.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/003.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4724,12 +4360,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-004
%% Type: valid
%% Sections: 2.11
-'valid-ext-sa-004'(suite) -> [];
'valid-ext-sa-004'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/004.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/004.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4737,12 +4372,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-005
%% Type: valid
%% Sections: 3.2.1 4.2.2 [48] [75]
-'valid-ext-sa-005'(suite) -> [];
'valid-ext-sa-005'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/005.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/005.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4750,12 +4384,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-006
%% Type: valid
%% Sections: 2.11 3.2.1 3.2.2 4.2.2 [48] [51] [75]
-'valid-ext-sa-006'(suite) -> [];
'valid-ext-sa-006'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/006.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/006.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4763,12 +4396,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-007
%% Type: valid
%% Sections: 4.2.2 4.4.3 [75]
-'valid-ext-sa-007'(suite) -> [];
'valid-ext-sa-007'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/007.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/007.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4776,12 +4408,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-008
%% Type: valid
%% Sections: 4.2.2 4.3.3. 4.4.3 [75] [80]
-'valid-ext-sa-008'(suite) -> [];
'valid-ext-sa-008'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/008.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/008.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4789,12 +4420,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-009
%% Type: valid
%% Sections: 2.11
-'valid-ext-sa-009'(suite) -> [];
'valid-ext-sa-009'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/009.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/009.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4802,12 +4432,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-011
%% Type: valid
%% Sections: 2.11 4.2.2 [75]
-'valid-ext-sa-011'(suite) -> [];
'valid-ext-sa-011'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/011.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/011.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4815,12 +4444,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-012
%% Type: valid
%% Sections: 4.2.1 4.2.2
-'valid-ext-sa-012'(suite) -> [];
'valid-ext-sa-012'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/012.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/012.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4828,12 +4456,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-013
%% Type: valid
%% Sections: 3.3.3
-'valid-ext-sa-013'(suite) -> [];
'valid-ext-sa-013'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/013.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/013.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4841,12 +4468,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-014
%% Type: valid
%% Sections: 4.1 4.4.3 [68]
-'valid-ext-sa-014'(suite) -> [];
'valid-ext-sa-014'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/014.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/014.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -4864,12 +4490,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-euc-jp
%% Type: error
%% Sections: 4.3.3 [4,84]
-'pr-xml-euc-jp'(suite) -> [];
'pr-xml-euc-jp'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-euc-jp.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-euc-jp.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4877,12 +4502,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-iso-2022-jp
%% Type: error
%% Sections: 4.3.3 [4,84]
-'pr-xml-iso-2022-jp'(suite) -> [];
'pr-xml-iso-2022-jp'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-iso-2022-jp.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-iso-2022-jp.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4890,12 +4514,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-little
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'pr-xml-little'(suite) -> [];
'pr-xml-little'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-little-endian.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-little-endian.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4903,12 +4526,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-shift_jis
%% Type: error
%% Sections: 4.3.3 [4,84]
-'pr-xml-shift_jis'(suite) -> [];
'pr-xml-shift_jis'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-shift_jis.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-shift_jis.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4916,12 +4538,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-utf-16
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'pr-xml-utf-16'(suite) -> [];
'pr-xml-utf-16'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-utf-16.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-utf-16.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4929,12 +4550,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-utf-8
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'pr-xml-utf-8'(suite) -> [];
'pr-xml-utf-8'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-utf-8.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-utf-8.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4942,12 +4562,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-euc-jp
%% Type: error
%% Sections: 4.3.3 [4,84]
-'weekly-euc-jp'(suite) -> [];
'weekly-euc-jp'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-euc-jp.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-euc-jp.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4955,12 +4574,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-iso-2022-jp
%% Type: error
%% Sections: 4.3.3 [4,84]
-'weekly-iso-2022-jp'(suite) -> [];
'weekly-iso-2022-jp'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-iso-2022-jp.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-iso-2022-jp.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4968,12 +4586,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-little
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'weekly-little'(suite) -> [];
'weekly-little'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-little-endian.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-little-endian.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4981,12 +4598,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-shift_jis
%% Type: error
%% Sections: 4.3.3 [4,84]
-'weekly-shift_jis'(suite) -> [];
'weekly-shift_jis'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-shift_jis.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-shift_jis.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4994,12 +4610,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-utf-16
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'weekly-utf-16'(suite) -> [];
'weekly-utf-16'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-utf-16.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-utf-16.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5007,12 +4622,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-utf-8
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'weekly-utf-8'(suite) -> [];
'weekly-utf-8'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-utf-8.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-utf-8.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -5030,12 +4644,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pe01
%% Type: valid
%% Sections: 2.8
-'pe01'(suite) -> [];
'pe01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5043,12 +4656,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd00
%% Type: valid
%% Sections: 3.2.2 [51]
-'dtd00'(suite) -> [];
'dtd00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/dtd00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/dtd00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5056,12 +4668,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd01
%% Type: valid
%% Sections: 2.5 [15]
-'dtd01'(suite) -> [];
'dtd01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/dtd01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/dtd01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5069,12 +4680,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element
%% Type: valid
%% Sections: 3
-'element'(suite) -> [];
'element'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/element.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/element.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5082,12 +4692,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ext01
%% Type: valid
%% Sections: 4.3.1 4.3.2 [77] [78]
-'ext01'(suite) -> [];
'ext01'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/ext01.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/ext01.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5095,12 +4704,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ext02
%% Type: valid
%% Sections: 4.3.2 [78]
-'ext02'(suite) -> [];
'ext02'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/ext02.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/ext02.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5108,12 +4716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-sa01
%% Type: valid
%% Sections: 2.9
-'not-sa01'(suite) -> [];
'not-sa01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5121,12 +4728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-sa02
%% Type: valid
%% Sections: 2.9
-'not-sa02'(suite) -> [];
'not-sa02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5134,12 +4740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-sa03
%% Type: valid
%% Sections: 2.9
-'not-sa03'(suite) -> [];
'not-sa03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5147,12 +4752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-sa04
%% Type: valid
%% Sections: 2.9
-'not-sa04'(suite) -> [];
'not-sa04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5160,12 +4764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: notation01
%% Type: valid
%% Sections: 4.7 [82]
-'notation01'(suite) -> [];
'notation01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/notation01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/notation01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5173,12 +4776,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional
%% Type: valid
%% Sections: 3 3.2.1 [47]
-'optional'(suite) -> [];
'optional'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/optional.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/optional.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5186,12 +4788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: required00
%% Type: valid
%% Sections: 3.3.2 [60]
-'required00'(suite) -> [];
'required00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/required00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/required00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5199,12 +4800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa01
%% Type: valid
%% Sections: 2.9 [32]
-'sa01'(suite) -> [];
'sa01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5212,12 +4812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa02
%% Type: valid
%% Sections: 2.9 [32]
-'sa02'(suite) -> [];
'sa02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5225,12 +4824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa03
%% Type: valid
%% Sections: 2.9 [32]
-'sa03'(suite) -> [];
'sa03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5238,12 +4836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa04
%% Type: valid
%% Sections: 2.9 [32]
-'sa04'(suite) -> [];
'sa04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5251,12 +4848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa05
%% Type: valid
%% Sections: 2.9 [32]
-'sa05'(suite) -> [];
'sa05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5264,12 +4860,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-sgml01
%% Type: valid
%% Sections: 3.3.1 [59]
-'v-sgml01'(suite) -> [];
'v-sgml01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sgml01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sgml01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5277,12 +4872,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang01
%% Type: valid
%% Sections: 2.12 [35]
-'v-lang01'(suite) -> [];
'v-lang01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5290,12 +4884,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang02
%% Type: valid
%% Sections: 2.12 [35]
-'v-lang02'(suite) -> [];
'v-lang02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5303,12 +4896,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang03
%% Type: valid
%% Sections: 2.12 [36]
-'v-lang03'(suite) -> [];
'v-lang03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5316,12 +4908,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang04
%% Type: valid
%% Sections: 2.12 [37]
-'v-lang04'(suite) -> [];
'v-lang04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5329,12 +4920,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang05
%% Type: valid
%% Sections: 2.12 [35]
-'v-lang05'(suite) -> [];
'v-lang05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5342,12 +4932,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang06
%% Type: valid
%% Sections: 2.12 [37]
-'v-lang06'(suite) -> [];
'v-lang06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5355,12 +4944,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-pe00
%% Type: valid
%% Sections: 4.5
-'v-pe00'(suite) -> [];
'v-pe00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5368,12 +4956,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-pe03
%% Type: valid
%% Sections: 4.5
-'v-pe03'(suite) -> [];
'v-pe03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5381,12 +4968,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-pe02
%% Type: valid
%% Sections: 4.5
-'v-pe02'(suite) -> [];
'v-pe02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5394,12 +4980,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-dtd01
%% Type: invalid
%% Sections: 3.2.2
-'inv-dtd01'(suite) -> [];
'inv-dtd01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5407,12 +4992,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-dtd02
%% Type: invalid
%% Sections: 4.2.2
-'inv-dtd02'(suite) -> [];
'inv-dtd02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5420,12 +5004,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-dtd03
%% Type: invalid
%% Sections: 3
-'inv-dtd03'(suite) -> [];
'inv-dtd03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5433,12 +5016,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el01
%% Type: invalid
%% Sections: 3
-'el01'(suite) -> [];
'el01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5446,12 +5028,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el02
%% Type: invalid
%% Sections: 3
-'el02'(suite) -> [];
'el02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5459,12 +5040,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el03
%% Type: invalid
%% Sections: 3
-'el03'(suite) -> [];
'el03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5472,12 +5052,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el04
%% Type: invalid
%% Sections: 3.2
-'el04'(suite) -> [];
'el04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5485,12 +5064,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el05
%% Type: invalid
%% Sections: 3.2.2
-'el05'(suite) -> [];
'el05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5498,12 +5076,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el06
%% Type: invalid
%% Sections: 3
-'el06'(suite) -> [];
'el06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5511,12 +5088,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id01
%% Type: invalid
%% Sections: 3.3.1
-'id01'(suite) -> [];
'id01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5524,12 +5100,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id02
%% Type: invalid
%% Sections: 3.3.1
-'id02'(suite) -> [];
'id02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5537,12 +5112,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id03
%% Type: invalid
%% Sections: 3.3.1
-'id03'(suite) -> [];
'id03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5550,12 +5124,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id04
%% Type: invalid
%% Sections: 3.3.1
-'id04'(suite) -> [];
'id04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5563,12 +5136,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id05
%% Type: invalid
%% Sections: 3.3.1
-'id05'(suite) -> [];
'id05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5576,12 +5148,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id06
%% Type: invalid
%% Sections: 3.3.1
-'id06'(suite) -> [];
'id06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5589,12 +5160,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id07
%% Type: invalid
%% Sections: 3.3.1
-'id07'(suite) -> [];
'id07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5602,12 +5172,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id08
%% Type: invalid
%% Sections: 3.3.1
-'id08'(suite) -> [];
'id08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5615,12 +5184,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id09
%% Type: invalid
%% Sections: 3.3.1
-'id09'(suite) -> [];
'id09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5628,12 +5196,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa01
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa01'(suite) -> [];
'inv-not-sa01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5641,12 +5208,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa02
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa02'(suite) -> [];
'inv-not-sa02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5654,12 +5220,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa04
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa04'(suite) -> [];
'inv-not-sa04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5667,12 +5232,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa05
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa05'(suite) -> [];
'inv-not-sa05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5680,12 +5244,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa06
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa06'(suite) -> [];
'inv-not-sa06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5693,12 +5256,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa07
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa07'(suite) -> [];
'inv-not-sa07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5706,12 +5268,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa08
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa08'(suite) -> [];
'inv-not-sa08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5719,12 +5280,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa09
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa09'(suite) -> [];
'inv-not-sa09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5732,12 +5292,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa10
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa10'(suite) -> [];
'inv-not-sa10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5745,12 +5304,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa11
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa11'(suite) -> [];
'inv-not-sa11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5758,12 +5316,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa12
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa12'(suite) -> [];
'inv-not-sa12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5771,12 +5328,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa13
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa13'(suite) -> [];
'inv-not-sa13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5784,12 +5340,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa14
%% Type: invalid
%% Sections: 3
-'inv-not-sa14'(suite) -> [];
'inv-not-sa14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5797,12 +5352,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional01
%% Type: invalid
%% Sections: 3
-'optional01'(suite) -> [];
'optional01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5810,12 +5364,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional02
%% Type: invalid
%% Sections: 3
-'optional02'(suite) -> [];
'optional02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5823,12 +5376,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional03
%% Type: invalid
%% Sections: 3
-'optional03'(suite) -> [];
'optional03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5836,12 +5388,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional04
%% Type: invalid
%% Sections: 3
-'optional04'(suite) -> [];
'optional04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5849,12 +5400,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional05
%% Type: invalid
%% Sections: 3
-'optional05'(suite) -> [];
'optional05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5862,12 +5412,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional06
%% Type: invalid
%% Sections: 3
-'optional06'(suite) -> [];
'optional06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5875,12 +5424,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional07
%% Type: invalid
%% Sections: 3
-'optional07'(suite) -> [];
'optional07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5888,12 +5436,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional08
%% Type: invalid
%% Sections: 3
-'optional08'(suite) -> [];
'optional08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5901,12 +5448,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional09
%% Type: invalid
%% Sections: 3
-'optional09'(suite) -> [];
'optional09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5914,12 +5460,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional10
%% Type: invalid
%% Sections: 3
-'optional10'(suite) -> [];
'optional10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5927,12 +5472,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional11
%% Type: invalid
%% Sections: 3
-'optional11'(suite) -> [];
'optional11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5940,12 +5484,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional12
%% Type: invalid
%% Sections: 3
-'optional12'(suite) -> [];
'optional12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5953,12 +5496,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional13
%% Type: invalid
%% Sections: 3
-'optional13'(suite) -> [];
'optional13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5966,12 +5508,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional14
%% Type: invalid
%% Sections: 3
-'optional14'(suite) -> [];
'optional14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5979,12 +5520,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional20
%% Type: invalid
%% Sections: 3
-'optional20'(suite) -> [];
'optional20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5992,12 +5532,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional21
%% Type: invalid
%% Sections: 3
-'optional21'(suite) -> [];
'optional21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6005,12 +5544,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional22
%% Type: invalid
%% Sections: 3
-'optional22'(suite) -> [];
'optional22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6018,12 +5556,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional23
%% Type: invalid
%% Sections: 3
-'optional23'(suite) -> [];
'optional23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6031,12 +5568,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional24
%% Type: invalid
%% Sections: 3
-'optional24'(suite) -> [];
'optional24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6044,12 +5580,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional25
%% Type: invalid
%% Sections: 3
-'optional25'(suite) -> [];
'optional25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6057,12 +5592,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-required00
%% Type: invalid
%% Sections: 3.3.2
-'inv-required00'(suite) -> [];
'inv-required00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6070,12 +5604,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-required01
%% Type: invalid
%% Sections: 3.1 2.10
-'inv-required01'(suite) -> [];
'inv-required01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6083,12 +5616,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-required02
%% Type: invalid
%% Sections: 3.1 2.12
-'inv-required02'(suite) -> [];
'inv-required02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6096,12 +5628,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: root
%% Type: invalid
%% Sections: 2.8
-'root'(suite) -> [];
'root'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/root.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/root.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6109,12 +5640,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr01
%% Type: invalid
%% Sections: 3.3.1
-'attr01'(suite) -> [];
'attr01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6122,12 +5652,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr02
%% Type: invalid
%% Sections: 3.3.1
-'attr02'(suite) -> [];
'attr02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6135,12 +5664,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr03
%% Type: invalid
%% Sections: 3.3.1
-'attr03'(suite) -> [];
'attr03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6148,12 +5676,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr04
%% Type: invalid
%% Sections: 3.3.1
-'attr04'(suite) -> [];
'attr04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6161,12 +5688,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr05
%% Type: invalid
%% Sections: 3.3.1
-'attr05'(suite) -> [];
'attr05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6174,12 +5700,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr06
%% Type: invalid
%% Sections: 3.3.1
-'attr06'(suite) -> [];
'attr06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6187,12 +5712,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr07
%% Type: invalid
%% Sections: 3.3.1
-'attr07'(suite) -> [];
'attr07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6200,12 +5724,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr08
%% Type: invalid
%% Sections: 3.3.2
-'attr08'(suite) -> [];
'attr08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6213,12 +5736,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr09
%% Type: invalid
%% Sections: 3.3.2
-'attr09'(suite) -> [];
'attr09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6226,12 +5748,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr10
%% Type: invalid
%% Sections: 3.3.2
-'attr10'(suite) -> [];
'attr10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6239,12 +5760,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr11
%% Type: invalid
%% Sections: 3.3.2
-'attr11'(suite) -> [];
'attr11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6252,12 +5772,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr12
%% Type: invalid
%% Sections: 3.3.2
-'attr12'(suite) -> [];
'attr12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6265,12 +5784,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr13
%% Type: invalid
%% Sections: 3.3.2
-'attr13'(suite) -> [];
'attr13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6278,12 +5796,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr14
%% Type: invalid
%% Sections: 3.3.2
-'attr14'(suite) -> [];
'attr14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6291,12 +5808,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr15
%% Type: invalid
%% Sections: 3.3.2
-'attr15'(suite) -> [];
'attr15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6304,12 +5820,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr16
%% Type: invalid
%% Sections: 3.3.2
-'attr16'(suite) -> [];
'attr16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6317,12 +5832,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: utf16b
%% Type: invalid
%% Sections: 4.3.3 2.8
-'utf16b'(suite) -> [];
'utf16b'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/utf16b.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/utf16b.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6330,12 +5844,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: utf16l
%% Type: invalid
%% Sections: 4.3.3 2.8
-'utf16l'(suite) -> [];
'utf16l'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/utf16l.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/utf16l.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6343,12 +5856,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: empty
%% Type: invalid
%% Sections: 2.4 2.7 [18] 3
-'empty'(suite) -> [];
'empty'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/empty.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/empty.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6356,12 +5868,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa03
%% Type: not-wf
%% Sections: 2.9
-'not-wf-sa03'(suite) -> [];
'not-wf-sa03'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/not-sa03.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/not-sa03.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6369,12 +5880,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist01
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist01'(suite) -> [];
'attlist01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6382,12 +5892,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist02
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist02'(suite) -> [];
'attlist02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6395,12 +5904,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist03
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'attlist03'(suite) -> [];
'attlist03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6408,12 +5916,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist04
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist04'(suite) -> [];
'attlist04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6421,12 +5928,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist05
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist05'(suite) -> [];
'attlist05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6434,12 +5940,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist06
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist06'(suite) -> [];
'attlist06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6447,12 +5952,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist07
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist07'(suite) -> [];
'attlist07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6460,12 +5964,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist08
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist08'(suite) -> [];
'attlist08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6473,12 +5976,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist09
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist09'(suite) -> [];
'attlist09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6486,12 +5988,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist10
%% Type: not-wf
%% Sections: 3.1 [40]
-'attlist10'(suite) -> [];
'attlist10'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist10.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist10.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6499,12 +6000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist11
%% Type: not-wf
%% Sections: 3.1 [44]
-'attlist11'(suite) -> [];
'attlist11'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist11.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist11.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6512,12 +6012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: cond01
%% Type: not-wf
%% Sections: 3.4 [61]
-'cond01'(suite) -> [];
'cond01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/cond01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/cond01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6525,12 +6024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: cond02
%% Type: not-wf
%% Sections: 3.4 [61]
-'cond02'(suite) -> [];
'cond02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/cond02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/cond02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6538,12 +6036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: content01
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'content01'(suite) -> [];
'content01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6551,12 +6048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: content02
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'content02'(suite) -> [];
'content02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6564,12 +6060,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: content03
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'content03'(suite) -> [];
'content03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6577,12 +6072,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: decl01
%% Type: not-wf
%% Sections: 4.3.1 [77]
-'decl01'(suite) -> [];
'decl01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/decl01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/decl01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6590,12 +6084,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: nwf-dtd00
%% Type: not-wf
%% Sections: 3.2.1 [55]
-'nwf-dtd00'(suite) -> [];
'nwf-dtd00'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd00.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd00.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6603,12 +6096,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: nwf-dtd01
%% Type: not-wf
%% Sections: 3.2.1 [55]
-'nwf-dtd01'(suite) -> [];
'nwf-dtd01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6616,12 +6108,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd02
%% Type: not-wf
%% Sections: 4.1 [69]
-'dtd02'(suite) -> [];
'dtd02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6629,12 +6120,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd03
%% Type: not-wf
%% Sections: 4.1 [69]
-'dtd03'(suite) -> [];
'dtd03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6642,12 +6132,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd04
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'dtd04'(suite) -> [];
'dtd04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6655,12 +6144,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd05
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'dtd05'(suite) -> [];
'dtd05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6668,12 +6156,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd07
%% Type: not-wf
%% Sections: 4.3.1 [77]
-'dtd07'(suite) -> [];
'dtd07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6681,12 +6168,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element00
%% Type: not-wf
%% Sections: 3.1 [42]
-'element00'(suite) -> [];
'element00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6694,12 +6180,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element01
%% Type: not-wf
%% Sections: 3.1 [42]
-'element01'(suite) -> [];
'element01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6707,12 +6192,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element02
%% Type: not-wf
%% Sections: 3.1 [43]
-'element02'(suite) -> [];
'element02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6720,12 +6204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element03
%% Type: not-wf
%% Sections: 3.1 [43]
-'element03'(suite) -> [];
'element03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6733,12 +6216,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element04
%% Type: not-wf
%% Sections: 3.1 [43]
-'element04'(suite) -> [];
'element04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6746,12 +6228,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding01
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding01'(suite) -> [];
'encoding01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6759,12 +6240,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding02
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding02'(suite) -> [];
'encoding02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6772,12 +6252,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding03
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding03'(suite) -> [];
'encoding03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6785,12 +6264,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding04
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding04'(suite) -> [];
'encoding04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6798,12 +6276,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding05
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding05'(suite) -> [];
'encoding05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6811,12 +6288,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding06
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding06'(suite) -> [];
'encoding06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6824,12 +6300,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding07
%% Type: not-wf
%% Sections: 4.3.1 [77]
-'encoding07'(suite) -> [];
'encoding07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6837,12 +6312,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pi
%% Type: not-wf
%% Sections: 2.6 [16]
-'pi'(suite) -> [];
'pi'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pi.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pi.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6850,12 +6324,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid01
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid01'(suite) -> [];
'pubid01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6863,12 +6336,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid02
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid02'(suite) -> [];
'pubid02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6876,12 +6348,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid03
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid03'(suite) -> [];
'pubid03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6889,12 +6360,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid04
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid04'(suite) -> [];
'pubid04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6902,12 +6372,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid05
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid05'(suite) -> [];
'pubid05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6915,12 +6384,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml01
%% Type: not-wf
%% Sections: 3 [39]
-'sgml01'(suite) -> [];
'sgml01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6928,12 +6396,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml02
%% Type: not-wf
%% Sections: 2.8
-'sgml02'(suite) -> [];
'sgml02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6941,12 +6408,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml03
%% Type: not-wf
%% Sections: 2.5 [15]
-'sgml03'(suite) -> [];
'sgml03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6954,12 +6420,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml04
%% Type: not-wf
%% Sections: 3.3 [52]
-'sgml04'(suite) -> [];
'sgml04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6967,12 +6432,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml05
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml05'(suite) -> [];
'sgml05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6980,12 +6444,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml06
%% Type: not-wf
%% Sections: 3.3 [52]
-'sgml06'(suite) -> [];
'sgml06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6993,12 +6456,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml07
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml07'(suite) -> [];
'sgml07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7006,12 +6468,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml08
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml08'(suite) -> [];
'sgml08'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml08.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml08.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7019,12 +6480,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml09
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml09'(suite) -> [];
'sgml09'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml09.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml09.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7032,12 +6492,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml10
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml10'(suite) -> [];
'sgml10'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml10.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml10.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7045,12 +6504,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml11
%% Type: not-wf
%% Sections: 3.2 [46]
-'sgml11'(suite) -> [];
'sgml11'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml11.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml11.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7058,12 +6516,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml12
%% Type: not-wf
%% Sections: 3.2 [46]
-'sgml12'(suite) -> [];
'sgml12'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml12.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml12.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7071,12 +6528,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml13
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'sgml13'(suite) -> [];
'sgml13'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml13.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml13.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7084,12 +6540,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: uri01
%% Type: error
%% Sections: 4.2.2 [75]
-'uri01'(suite) -> [];
'uri01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/uri01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "error").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/uri01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Cases
@@ -7102,12 +6557,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01pass2
%% Type: valid
%% Sections: 2.2 [1]
-'o-p01pass2'(suite) -> [];
'o-p01pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7115,12 +6569,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p06pass1
%% Type: valid
%% Sections: 2.3 [6]
-'o-p06pass1'(suite) -> [];
'o-p06pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p06pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p06pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7128,12 +6581,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p07pass1
%% Type: valid
%% Sections: 2.3 [7]
-'o-p07pass1'(suite) -> [];
'o-p07pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p07pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p07pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7141,12 +6593,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p08pass1
%% Type: valid
%% Sections: 2.3 [8]
-'o-p08pass1'(suite) -> [];
'o-p08pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7154,12 +6605,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09pass1
%% Type: valid
%% Sections: 2.3 [9]
-'o-p09pass1'(suite) -> [];
'o-p09pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7167,12 +6617,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12pass1
%% Type: valid
%% Sections: 2.3 [12]
-'o-p12pass1'(suite) -> [];
'o-p12pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7180,12 +6629,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass4
%% Type: valid
%% Sections: 2.8 [22]
-'o-p22pass4'(suite) -> [];
'o-p22pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7193,12 +6641,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass5
%% Type: valid
%% Sections: 2.8 [22]
-'o-p22pass5'(suite) -> [];
'o-p22pass5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7206,12 +6653,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass6
%% Type: valid
%% Sections: 2.8 [22]
-'o-p22pass6'(suite) -> [];
'o-p22pass6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7219,12 +6665,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28pass1
%% Type: valid
%% Sections: 3.1 [43] [44]
-'o-p28pass1'(suite) -> [];
'o-p28pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7232,12 +6677,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28pass3
%% Type: valid
%% Sections: 2.8 4.1 [28] [69]
-'o-p28pass3'(suite) -> [];
'o-p28pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7245,12 +6689,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28pass4
%% Type: valid
%% Sections: 2.8 4.2.2 [28] [75]
-'o-p28pass4'(suite) -> [];
'o-p28pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7258,12 +6701,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28pass5
%% Type: valid
%% Sections: 2.8 4.1 [28] [69]
-'o-p28pass5'(suite) -> [];
'o-p28pass5'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass5.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass5.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7271,12 +6713,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p29pass1
%% Type: valid
%% Sections: 2.8 [29]
-'o-p29pass1'(suite) -> [];
'o-p29pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p29pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p29pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7284,12 +6725,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p30pass1
%% Type: valid
%% Sections: 2.8 4.2.2 [30] [75]
-'o-p30pass1'(suite) -> [];
'o-p30pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7297,12 +6737,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p30pass2
%% Type: valid
%% Sections: 2.8 4.2.2 4.3.1 [30] [75] [77]
-'o-p30pass2'(suite) -> [];
'o-p30pass2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30pass2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30pass2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7310,12 +6749,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p31pass1
%% Type: valid
%% Sections: 2.8 [31]
-'o-p31pass1'(suite) -> [];
'o-p31pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7323,12 +6761,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p31pass2
%% Type: valid
%% Sections: 2.8 3.4 4.2.2 [31] [62] [63] [75]
-'o-p31pass2'(suite) -> [];
'o-p31pass2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31pass2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31pass2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7336,12 +6773,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p43pass1
%% Type: valid
%% Sections: 2.4 2.5 2.6 2.7 [15] [16] [18]
-'o-p43pass1'(suite) -> [];
'o-p43pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7349,12 +6785,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45pass1
%% Type: valid
%% Sections: 3.2 [45]
-'o-p45pass1'(suite) -> [];
'o-p45pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7362,12 +6797,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46pass1
%% Type: valid
%% Sections: 3.2 3.2.1 3.2.2 [45] [46] [47] [51]
-'o-p46pass1'(suite) -> [];
'o-p46pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7375,12 +6809,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47pass1
%% Type: valid
%% Sections: 3.2 3.2.1 [45] [46] [47]
-'o-p47pass1'(suite) -> [];
'o-p47pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7388,12 +6821,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p48pass1
%% Type: valid
%% Sections: 3.2 3.2.1 [45] [46] [47]
-'o-p48pass1'(suite) -> [];
'o-p48pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7401,12 +6833,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p49pass1
%% Type: valid
%% Sections: 3.2 3.2.1 [45] [46] [47]
-'o-p49pass1'(suite) -> [];
'o-p49pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p49pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p49pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7414,12 +6845,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p50pass1
%% Type: valid
%% Sections: 3.2 3.2.1 [45] [46] [47]
-'o-p50pass1'(suite) -> [];
'o-p50pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p50pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p50pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7427,12 +6857,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51pass1
%% Type: valid
%% Sections: 3.2.2 [51]
-'o-p51pass1'(suite) -> [];
'o-p51pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7440,12 +6869,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p52pass1
%% Type: valid
%% Sections: 3.3 [52]
-'o-p52pass1'(suite) -> [];
'o-p52pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7453,12 +6881,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53pass1
%% Type: valid
%% Sections: 3.3 [53]
-'o-p53pass1'(suite) -> [];
'o-p53pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7466,12 +6893,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p54pass1
%% Type: valid
%% Sections: 3.3.1 [54]
-'o-p54pass1'(suite) -> [];
'o-p54pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p54pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p54pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7479,12 +6905,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p55pass1
%% Type: valid
%% Sections: 3.3.1 [55]
-'o-p55pass1'(suite) -> [];
'o-p55pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p55pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p55pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7492,12 +6917,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56pass1
%% Type: valid
%% Sections: 3.3.1 [56]
-'o-p56pass1'(suite) -> [];
'o-p56pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7505,12 +6929,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p57pass1
%% Type: valid
%% Sections: 3.3.1 [57]
-'o-p57pass1'(suite) -> [];
'o-p57pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p57pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p57pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7518,12 +6941,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58pass1
%% Type: valid
%% Sections: 3.3.1 [58]
-'o-p58pass1'(suite) -> [];
'o-p58pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7531,12 +6953,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p59pass1
%% Type: valid
%% Sections: 3.3.1 [59]
-'o-p59pass1'(suite) -> [];
'o-p59pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7544,12 +6965,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60pass1
%% Type: valid
%% Sections: 3.3.2 [60]
-'o-p60pass1'(suite) -> [];
'o-p60pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7557,12 +6977,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p61pass1
%% Type: valid
%% Sections: 3.4 [61]
-'o-p61pass1'(suite) -> [];
'o-p61pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p61pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p61pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7570,12 +6989,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p62pass1
%% Type: valid
%% Sections: 3.4 [62]
-'o-p62pass1'(suite) -> [];
'o-p62pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7583,12 +7001,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p63pass1
%% Type: valid
%% Sections: 3.4 [63]
-'o-p63pass1'(suite) -> [];
'o-p63pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7596,12 +7013,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p64pass1
%% Type: valid
%% Sections: 3.4 [64]
-'o-p64pass1'(suite) -> [];
'o-p64pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7609,12 +7025,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p68pass1
%% Type: valid
%% Sections: 4.1 [68]
-'o-p68pass1'(suite) -> [];
'o-p68pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7622,12 +7037,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p69pass1
%% Type: valid
%% Sections: 4.1 [69]
-'o-p69pass1'(suite) -> [];
'o-p69pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7635,12 +7049,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p70pass1
%% Type: valid
%% Sections: 4.2 [70]
-'o-p70pass1'(suite) -> [];
'o-p70pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p70pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p70pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7648,12 +7061,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71pass1
%% Type: valid
%% Sections: 4.2 [71]
-'o-p71pass1'(suite) -> [];
'o-p71pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7661,12 +7073,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72pass1
%% Type: valid
%% Sections: 4.2 [72]
-'o-p72pass1'(suite) -> [];
'o-p72pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7674,12 +7085,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73pass1
%% Type: valid
%% Sections: 4.2 [73]
-'o-p73pass1'(suite) -> [];
'o-p73pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7687,12 +7097,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76pass1
%% Type: valid
%% Sections: 4.2.2 [76]
-'o-p76pass1'(suite) -> [];
'o-p76pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7700,12 +7109,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01pass1
%% Type: invalid
%% Sections: 2.1 [1]
-'o-p01pass1'(suite) -> [];
'o-p01pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7713,12 +7121,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01pass3
%% Type: invalid
%% Sections: 2.1 [1]
-'o-p01pass3'(suite) -> [];
'o-p01pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7726,12 +7133,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03pass1
%% Type: invalid
%% Sections: 2.3 [3]
-'o-p03pass1'(suite) -> [];
'o-p03pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7739,12 +7145,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p04pass1
%% Type: invalid
%% Sections: 2.3 [4]
-'o-p04pass1'(suite) -> [];
'o-p04pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7752,12 +7157,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05pass1
%% Type: invalid
%% Sections: 2.3 [5]
-'o-p05pass1'(suite) -> [];
'o-p05pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7765,12 +7169,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p06fail1
%% Type: invalid
%% Sections: 2.3 [6]
-'o-p06fail1'(suite) -> [];
'o-p06fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p06fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p06fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7778,12 +7181,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p08fail1
%% Type: invalid
%% Sections: 2.3 [8]
-'o-p08fail1'(suite) -> [];
'o-p08fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7791,12 +7193,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p08fail2
%% Type: invalid
%% Sections: 2.3 [8]
-'o-p08fail2'(suite) -> [];
'o-p08fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7804,12 +7205,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p10pass1
%% Type: invalid
%% Sections: 2.3 [10]
-'o-p10pass1'(suite) -> [];
'o-p10pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7817,12 +7217,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p14pass1
%% Type: invalid
%% Sections: 2.4 [14]
-'o-p14pass1'(suite) -> [];
'o-p14pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7830,12 +7229,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p15pass1
%% Type: invalid
%% Sections: 2.5 [15]
-'o-p15pass1'(suite) -> [];
'o-p15pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7843,12 +7241,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16pass1
%% Type: invalid
%% Sections: 2.6 [16] [17]
-'o-p16pass1'(suite) -> [];
'o-p16pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7856,12 +7253,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16pass2
%% Type: invalid
%% Sections: 2.6 [16]
-'o-p16pass2'(suite) -> [];
'o-p16pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7869,12 +7265,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16pass3
%% Type: invalid
%% Sections: 2.6 [16]
-'o-p16pass3'(suite) -> [];
'o-p16pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7882,12 +7277,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p18pass1
%% Type: invalid
%% Sections: 2.7 [18]
-'o-p18pass1'(suite) -> [];
'o-p18pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7895,12 +7289,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass1
%% Type: invalid
%% Sections: 2.8 [22]
-'o-p22pass1'(suite) -> [];
'o-p22pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7908,12 +7301,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass2
%% Type: invalid
%% Sections: 2.8 [22]
-'o-p22pass2'(suite) -> [];
'o-p22pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7921,12 +7313,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass3
%% Type: invalid
%% Sections: 2.8 [22]
-'o-p22pass3'(suite) -> [];
'o-p22pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7934,12 +7325,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23pass1
%% Type: invalid
%% Sections: 2.8 [23]
-'o-p23pass1'(suite) -> [];
'o-p23pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7947,12 +7337,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23pass2
%% Type: invalid
%% Sections: 2.8 [23]
-'o-p23pass2'(suite) -> [];
'o-p23pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7960,12 +7349,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23pass3
%% Type: invalid
%% Sections: 2.8 [23]
-'o-p23pass3'(suite) -> [];
'o-p23pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7973,12 +7361,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23pass4
%% Type: invalid
%% Sections: 2.8 [23]
-'o-p23pass4'(suite) -> [];
'o-p23pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7986,12 +7373,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24pass1
%% Type: invalid
%% Sections: 2.8 [24]
-'o-p24pass1'(suite) -> [];
'o-p24pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7999,12 +7385,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24pass2
%% Type: invalid
%% Sections: 2.8 [24]
-'o-p24pass2'(suite) -> [];
'o-p24pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8012,12 +7397,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24pass3
%% Type: invalid
%% Sections: 2.8 [24]
-'o-p24pass3'(suite) -> [];
'o-p24pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8025,12 +7409,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24pass4
%% Type: invalid
%% Sections: 2.8 [24]
-'o-p24pass4'(suite) -> [];
'o-p24pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8038,12 +7421,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p25pass1
%% Type: invalid
%% Sections: 2.8 [25]
-'o-p25pass1'(suite) -> [];
'o-p25pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8051,12 +7433,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p25pass2
%% Type: invalid
%% Sections: 2.8 [25]
-'o-p25pass2'(suite) -> [];
'o-p25pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8064,12 +7445,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p26pass1
%% Type: invalid
%% Sections: 2.8 [26]
-'o-p26pass1'(suite) -> [];
'o-p26pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8077,12 +7457,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27pass1
%% Type: invalid
%% Sections: 2.8 [27]
-'o-p27pass1'(suite) -> [];
'o-p27pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8090,12 +7469,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27pass2
%% Type: invalid
%% Sections: 2.8 [27]
-'o-p27pass2'(suite) -> [];
'o-p27pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8103,12 +7481,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27pass3
%% Type: invalid
%% Sections: 2.8 [27]
-'o-p27pass3'(suite) -> [];
'o-p27pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8116,12 +7493,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27pass4
%% Type: invalid
%% Sections: 2.8 [27]
-'o-p27pass4'(suite) -> [];
'o-p27pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8129,12 +7505,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32pass1
%% Type: invalid
%% Sections: 2.9 [32]
-'o-p32pass1'(suite) -> [];
'o-p32pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8142,12 +7517,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32pass2
%% Type: invalid
%% Sections: 2.9 [32]
-'o-p32pass2'(suite) -> [];
'o-p32pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8155,12 +7529,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39pass1
%% Type: invalid
%% Sections: 3 3.1 [39] [44]
-'o-p39pass1'(suite) -> [];
'o-p39pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8168,12 +7541,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39pass2
%% Type: invalid
%% Sections: 3 3.1 [39] [43]
-'o-p39pass2'(suite) -> [];
'o-p39pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8181,12 +7553,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40pass1
%% Type: invalid
%% Sections: 3.1 [40]
-'o-p40pass1'(suite) -> [];
'o-p40pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8194,12 +7565,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40pass2
%% Type: invalid
%% Sections: 3.1 [40]
-'o-p40pass2'(suite) -> [];
'o-p40pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8207,12 +7577,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40pass3
%% Type: invalid
%% Sections: 3.1 [40] [41]
-'o-p40pass3'(suite) -> [];
'o-p40pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8220,12 +7589,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40pass4
%% Type: invalid
%% Sections: 3.1 [40]
-'o-p40pass4'(suite) -> [];
'o-p40pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8233,12 +7601,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41pass1
%% Type: invalid
%% Sections: 3.1 [41]
-'o-p41pass1'(suite) -> [];
'o-p41pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8246,12 +7613,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41pass2
%% Type: invalid
%% Sections: 3.1 [41]
-'o-p41pass2'(suite) -> [];
'o-p41pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8259,12 +7625,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42pass1
%% Type: invalid
%% Sections: 3.1 [42]
-'o-p42pass1'(suite) -> [];
'o-p42pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8272,12 +7637,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42pass2
%% Type: invalid
%% Sections: 3.1 [42]
-'o-p42pass2'(suite) -> [];
'o-p42pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8285,12 +7649,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass1
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass1'(suite) -> [];
'o-p44pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8298,12 +7661,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass2
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass2'(suite) -> [];
'o-p44pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8311,12 +7673,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass3
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass3'(suite) -> [];
'o-p44pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8324,12 +7685,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass4
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass4'(suite) -> [];
'o-p44pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8337,12 +7697,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass5
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass5'(suite) -> [];
'o-p44pass5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8350,12 +7709,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66pass1
%% Type: invalid
%% Sections: 4.1 [66]
-'o-p66pass1'(suite) -> [];
'o-p66pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8363,12 +7721,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p74pass1
%% Type: invalid
%% Sections: 4.2 [74]
-'o-p74pass1'(suite) -> [];
'o-p74pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8376,12 +7733,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75pass1
%% Type: invalid
%% Sections: 4.2.2 [75]
-'o-p75pass1'(suite) -> [];
'o-p75pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8389,12 +7745,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-e2
%% Type: invalid
%% Sections: 3.3.1 [58] [59] Errata [E2]
-'o-e2'(suite) -> [];
'o-e2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","e2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","e2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8402,12 +7757,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01fail1
%% Type: not-wf
%% Sections: 2.1 [1]
-'o-p01fail1'(suite) -> [];
'o-p01fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8415,12 +7769,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01fail2
%% Type: not-wf
%% Sections: 2.1 [1]
-'o-p01fail2'(suite) -> [];
'o-p01fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8428,15 +7781,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01fail3
%% Type: not-wf
%% Sections: 2.1 [1]
-'o-p01fail3'(suite) -> [];
'o-p01fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail3.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail3.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_, <<"<bad/>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_, <<"<bad/>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8444,12 +7796,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01fail4
%% Type: not-wf
%% Sections: 2.1 [1]
-'o-p01fail4'(suite) -> [];
'o-p01fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8457,12 +7808,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail1
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail1'(suite) -> [];
'o-p02fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8470,12 +7820,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail10
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail10'(suite) -> [];
'o-p02fail10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8483,12 +7832,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail11
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail11'(suite) -> [];
'o-p02fail11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8496,12 +7844,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail12
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail12'(suite) -> [];
'o-p02fail12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8509,12 +7856,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail13
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail13'(suite) -> [];
'o-p02fail13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8522,12 +7868,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail14
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail14'(suite) -> [];
'o-p02fail14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8535,12 +7880,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail15
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail15'(suite) -> [];
'o-p02fail15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8548,12 +7892,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail16
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail16'(suite) -> [];
'o-p02fail16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8561,12 +7904,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail17
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail17'(suite) -> [];
'o-p02fail17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8574,12 +7916,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail18
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail18'(suite) -> [];
'o-p02fail18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8587,12 +7928,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail19
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail19'(suite) -> [];
'o-p02fail19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8600,12 +7940,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail2
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail2'(suite) -> [];
'o-p02fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8613,12 +7952,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail20
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail20'(suite) -> [];
'o-p02fail20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8626,12 +7964,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail21
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail21'(suite) -> [];
'o-p02fail21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8639,12 +7976,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail22
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail22'(suite) -> [];
'o-p02fail22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8652,12 +7988,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail23
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail23'(suite) -> [];
'o-p02fail23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8665,12 +8000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail24
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail24'(suite) -> [];
'o-p02fail24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8678,12 +8012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail25
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail25'(suite) -> [];
'o-p02fail25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8691,12 +8024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail26
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail26'(suite) -> [];
'o-p02fail26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8704,12 +8036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail27
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail27'(suite) -> [];
'o-p02fail27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8717,12 +8048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail28
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail28'(suite) -> [];
'o-p02fail28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8730,12 +8060,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail29
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail29'(suite) -> [];
'o-p02fail29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8743,12 +8072,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail3
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail3'(suite) -> [];
'o-p02fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8756,12 +8084,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail30
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail30'(suite) -> [];
'o-p02fail30'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail30.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail30.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8769,12 +8096,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail31
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail31'(suite) -> [];
'o-p02fail31'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail31.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail31.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8782,12 +8108,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail4
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail4'(suite) -> [];
'o-p02fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8795,12 +8120,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail5
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail5'(suite) -> [];
'o-p02fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8808,12 +8132,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail6
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail6'(suite) -> [];
'o-p02fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8821,12 +8144,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail7
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail7'(suite) -> [];
'o-p02fail7'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail7.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail7.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8834,12 +8156,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail8
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail8'(suite) -> [];
'o-p02fail8'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail8.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail8.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8847,12 +8168,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail9
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail9'(suite) -> [];
'o-p02fail9'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail9.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail9.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8860,12 +8180,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail1
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail1'(suite) -> [];
'o-p03fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8873,12 +8192,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail10
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail10'(suite) -> [];
'o-p03fail10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8886,12 +8204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail11
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail11'(suite) -> [];
'o-p03fail11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8899,12 +8216,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail12
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail12'(suite) -> [];
'o-p03fail12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8912,12 +8228,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail13
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail13'(suite) -> [];
'o-p03fail13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8925,12 +8240,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail14
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail14'(suite) -> [];
'o-p03fail14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8938,12 +8252,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail15
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail15'(suite) -> [];
'o-p03fail15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8951,12 +8264,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail16
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail16'(suite) -> [];
'o-p03fail16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8964,12 +8276,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail17
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail17'(suite) -> [];
'o-p03fail17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8977,12 +8288,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail18
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail18'(suite) -> [];
'o-p03fail18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8990,12 +8300,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail19
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail19'(suite) -> [];
'o-p03fail19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9003,12 +8312,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail2
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail2'(suite) -> [];
'o-p03fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9016,12 +8324,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail20
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail20'(suite) -> [];
'o-p03fail20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9029,12 +8336,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail21
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail21'(suite) -> [];
'o-p03fail21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9042,12 +8348,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail22
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail22'(suite) -> [];
'o-p03fail22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9055,12 +8360,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail23
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail23'(suite) -> [];
'o-p03fail23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9068,12 +8372,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail24
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail24'(suite) -> [];
'o-p03fail24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9081,12 +8384,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail25
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail25'(suite) -> [];
'o-p03fail25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9094,12 +8396,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail26
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail26'(suite) -> [];
'o-p03fail26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9107,12 +8408,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail27
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail27'(suite) -> [];
'o-p03fail27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9120,12 +8420,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail28
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail28'(suite) -> [];
'o-p03fail28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9133,12 +8432,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail29
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail29'(suite) -> [];
'o-p03fail29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9146,12 +8444,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail3
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail3'(suite) -> [];
'o-p03fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9159,12 +8456,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail4
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail4'(suite) -> [];
'o-p03fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9172,12 +8468,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail5
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail5'(suite) -> [];
'o-p03fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9185,12 +8480,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail7
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail7'(suite) -> [];
'o-p03fail7'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail7.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail7.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9198,12 +8492,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail8
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail8'(suite) -> [];
'o-p03fail8'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail8.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail8.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9211,12 +8504,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail9
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail9'(suite) -> [];
'o-p03fail9'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail9.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail9.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9224,12 +8516,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p04fail1
%% Type: not-wf
%% Sections: 2.3 [4]
-'o-p04fail1'(suite) -> [];
'o-p04fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9237,12 +8528,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p04fail2
%% Type: not-wf
%% Sections: 2.3 [4]
-'o-p04fail2'(suite) -> [];
'o-p04fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9250,12 +8540,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p04fail3
%% Type: not-wf
%% Sections: 2.3 [4]
-'o-p04fail3'(suite) -> [];
'o-p04fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9263,12 +8552,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail1
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail1'(suite) -> [];
'o-p05fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9276,12 +8564,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail2
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail2'(suite) -> [];
'o-p05fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9289,12 +8576,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail3
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail3'(suite) -> [];
'o-p05fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9302,12 +8588,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail4
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail4'(suite) -> [];
'o-p05fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9315,12 +8600,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail5
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail5'(suite) -> [];
'o-p05fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9328,12 +8612,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail1
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail1'(suite) -> [];
'o-p09fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9341,12 +8624,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail2
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail2'(suite) -> [];
'o-p09fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9354,12 +8636,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail3
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail3'(suite) -> [];
'o-p09fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9367,12 +8648,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail4
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail4'(suite) -> [];
'o-p09fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9380,12 +8660,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail5
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail5'(suite) -> [];
'o-p09fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9393,12 +8672,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p10fail1
%% Type: not-wf
%% Sections: 2.3 [10]
-'o-p10fail1'(suite) -> [];
'o-p10fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9406,12 +8684,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p10fail2
%% Type: not-wf
%% Sections: 2.3 [10]
-'o-p10fail2'(suite) -> [];
'o-p10fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9419,12 +8696,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p10fail3
%% Type: not-wf
%% Sections: 2.3 [10]
-'o-p10fail3'(suite) -> [];
'o-p10fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9432,12 +8708,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p11fail1
%% Type: not-wf
%% Sections: 2.3 [11]
-'o-p11fail1'(suite) -> [];
'o-p11fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9445,12 +8720,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p11fail2
%% Type: not-wf
%% Sections: 2.3 [11]
-'o-p11fail2'(suite) -> [];
'o-p11fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9458,12 +8732,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail1
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail1'(suite) -> [];
'o-p12fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9471,12 +8744,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail2
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail2'(suite) -> [];
'o-p12fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9484,12 +8756,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail3
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail3'(suite) -> [];
'o-p12fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9497,12 +8768,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail4
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail4'(suite) -> [];
'o-p12fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9510,12 +8780,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail5
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail5'(suite) -> [];
'o-p12fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9523,12 +8792,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail6
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail6'(suite) -> [];
'o-p12fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9536,12 +8804,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail7
%% Type: not-wf
%% Sections: 2.3 [13]
-'o-p12fail7'(suite) -> [];
'o-p12fail7'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail7.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail7.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9549,12 +8816,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p14fail1
%% Type: not-wf
%% Sections: 2.4 [14]
-'o-p14fail1'(suite) -> [];
'o-p14fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9562,12 +8828,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p14fail2
%% Type: not-wf
%% Sections: 2.4 [14]
-'o-p14fail2'(suite) -> [];
'o-p14fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9575,12 +8840,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p14fail3
%% Type: not-wf
%% Sections: 2.4 [14]
-'o-p14fail3'(suite) -> [];
'o-p14fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9588,12 +8852,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p15fail1
%% Type: not-wf
%% Sections: 2.5 [15]
-'o-p15fail1'(suite) -> [];
'o-p15fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9601,12 +8864,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p15fail2
%% Type: not-wf
%% Sections: 2.5 [15]
-'o-p15fail2'(suite) -> [];
'o-p15fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9614,12 +8876,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p15fail3
%% Type: not-wf
%% Sections: 2.5 [15]
-'o-p15fail3'(suite) -> [];
'o-p15fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9627,12 +8888,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16fail1
%% Type: not-wf
%% Sections: 2.6 [16]
-'o-p16fail1'(suite) -> [];
'o-p16fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9640,12 +8900,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16fail2
%% Type: not-wf
%% Sections: 2.6 [16]
-'o-p16fail2'(suite) -> [];
'o-p16fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9653,12 +8912,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16fail3
%% Type: not-wf
%% Sections: 2.6 [16]
-'o-p16fail3'(suite) -> [];
'o-p16fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9666,12 +8924,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p18fail1
%% Type: not-wf
%% Sections: 2.7 [18]
-'o-p18fail1'(suite) -> [];
'o-p18fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9679,12 +8936,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p18fail2
%% Type: not-wf
%% Sections: 2.7 [18]
-'o-p18fail2'(suite) -> [];
'o-p18fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9692,12 +8948,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p18fail3
%% Type: not-wf
%% Sections: 2.7 [18]
-'o-p18fail3'(suite) -> [];
'o-p18fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9705,12 +8960,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22fail1
%% Type: not-wf
%% Sections: 2.8 [22]
-'o-p22fail1'(suite) -> [];
'o-p22fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9718,12 +8972,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22fail2
%% Type: not-wf
%% Sections: 2.8 [22]
-'o-p22fail2'(suite) -> [];
'o-p22fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9731,12 +8984,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail1
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail1'(suite) -> [];
'o-p23fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9744,12 +8996,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail2
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail2'(suite) -> [];
'o-p23fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9757,12 +9008,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail3
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail3'(suite) -> [];
'o-p23fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9770,12 +9020,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail4
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail4'(suite) -> [];
'o-p23fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9783,12 +9032,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail5
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail5'(suite) -> [];
'o-p23fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9796,12 +9044,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24fail1
%% Type: not-wf
%% Sections: 2.8 [24]
-'o-p24fail1'(suite) -> [];
'o-p24fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9809,12 +9056,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24fail2
%% Type: not-wf
%% Sections: 2.8 [24]
-'o-p24fail2'(suite) -> [];
'o-p24fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9822,12 +9068,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p25fail1
%% Type: not-wf
%% Sections: 2.8 [25]
-'o-p25fail1'(suite) -> [];
'o-p25fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9835,12 +9080,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p26fail1
%% Type: not-wf
%% Sections: 2.8 [26]
-'o-p26fail1'(suite) -> [];
'o-p26fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9848,12 +9092,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p26fail2
%% Type: not-wf
%% Sections: 2.8 [26]
-'o-p26fail2'(suite) -> [];
'o-p26fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9861,12 +9104,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27fail1
%% Type: not-wf
%% Sections: 2.8 [27]
-'o-p27fail1'(suite) -> [];
'o-p27fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9874,12 +9116,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28fail1
%% Type: not-wf
%% Sections: 2.8 [28]
-'o-p28fail1'(suite) -> [];
'o-p28fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9887,12 +9128,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p29fail1
%% Type: not-wf
%% Sections: 2.8 [29]
-'o-p29fail1'(suite) -> [];
'o-p29fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p29fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p29fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9900,12 +9140,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p30fail1
%% Type: not-wf
%% Sections: 2.8 [30]
-'o-p30fail1'(suite) -> [];
'o-p30fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9913,12 +9152,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p31fail1
%% Type: not-wf
%% Sections: 2.8 [31]
-'o-p31fail1'(suite) -> [];
'o-p31fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9926,12 +9164,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail1
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail1'(suite) -> [];
'o-p32fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9939,12 +9176,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail2
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail2'(suite) -> [];
'o-p32fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9952,12 +9188,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail3
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail3'(suite) -> [];
'o-p32fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9965,12 +9200,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail4
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail4'(suite) -> [];
'o-p32fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9978,12 +9212,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail5
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail5'(suite) -> [];
'o-p32fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9991,12 +9224,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail1
%% Type: not-wf
%% Sections: 3 [39]
-'o-p39fail1'(suite) -> [];
'o-p39fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10004,12 +9236,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail2
%% Type: not-wf
%% Sections: 3 [39]
-'o-p39fail2'(suite) -> [];
'o-p39fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10017,12 +9248,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail3
%% Type: not-wf
%% Sections: 3 [39]
-'o-p39fail3'(suite) -> [];
'o-p39fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10030,12 +9260,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail4
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p39fail4'(suite) -> [];
'o-p39fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10043,12 +9272,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail5
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p39fail5'(suite) -> [];
'o-p39fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10056,12 +9284,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40fail1
%% Type: not-wf
%% Sections: 3.1 [40]
-'o-p40fail1'(suite) -> [];
'o-p40fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10069,12 +9296,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40fail2
%% Type: not-wf
%% Sections: 3.1 [40]
-'o-p40fail2'(suite) -> [];
'o-p40fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10082,12 +9308,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40fail3
%% Type: not-wf
%% Sections: 3.1 [40]
-'o-p40fail3'(suite) -> [];
'o-p40fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10095,12 +9320,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40fail4
%% Type: not-wf
%% Sections: 3.1 [40]
-'o-p40fail4'(suite) -> [];
'o-p40fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10108,12 +9332,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41fail1
%% Type: not-wf
%% Sections: 3.1 [41]
-'o-p41fail1'(suite) -> [];
'o-p41fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10121,12 +9344,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41fail2
%% Type: not-wf
%% Sections: 3.1 [41]
-'o-p41fail2'(suite) -> [];
'o-p41fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10134,12 +9356,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41fail3
%% Type: not-wf
%% Sections: 3.1 [41]
-'o-p41fail3'(suite) -> [];
'o-p41fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10147,12 +9368,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42fail1
%% Type: not-wf
%% Sections: 3.1 [42]
-'o-p42fail1'(suite) -> [];
'o-p42fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10160,12 +9380,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42fail2
%% Type: not-wf
%% Sections: 3.1 [42]
-'o-p42fail2'(suite) -> [];
'o-p42fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10173,12 +9392,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42fail3
%% Type: not-wf
%% Sections: 3.1 [42]
-'o-p42fail3'(suite) -> [];
'o-p42fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10186,12 +9404,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p43fail1
%% Type: not-wf
%% Sections: 3.1 [43]
-'o-p43fail1'(suite) -> [];
'o-p43fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10199,12 +9416,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p43fail2
%% Type: not-wf
%% Sections: 3.1 [43]
-'o-p43fail2'(suite) -> [];
'o-p43fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10212,12 +9428,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p43fail3
%% Type: not-wf
%% Sections: 3.1 [43]
-'o-p43fail3'(suite) -> [];
'o-p43fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10225,12 +9440,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail1
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail1'(suite) -> [];
'o-p44fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10238,12 +9452,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail2
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail2'(suite) -> [];
'o-p44fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10251,12 +9464,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail3
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail3'(suite) -> [];
'o-p44fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10264,12 +9476,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail4
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail4'(suite) -> [];
'o-p44fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10277,12 +9488,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail5
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail5'(suite) -> [];
'o-p44fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10290,12 +9500,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45fail1
%% Type: not-wf
%% Sections: 3.2 [45]
-'o-p45fail1'(suite) -> [];
'o-p45fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10303,12 +9512,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45fail2
%% Type: not-wf
%% Sections: 3.2 [45]
-'o-p45fail2'(suite) -> [];
'o-p45fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10316,12 +9524,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45fail3
%% Type: not-wf
%% Sections: 3.2 [45]
-'o-p45fail3'(suite) -> [];
'o-p45fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10329,12 +9536,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45fail4
%% Type: not-wf
%% Sections: 3.2 [45]
-'o-p45fail4'(suite) -> [];
'o-p45fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10342,12 +9548,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail1
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail1'(suite) -> [];
'o-p46fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10355,12 +9560,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail2
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail2'(suite) -> [];
'o-p46fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10368,12 +9572,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail3
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail3'(suite) -> [];
'o-p46fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10381,12 +9584,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail4
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail4'(suite) -> [];
'o-p46fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10394,12 +9596,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail5
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail5'(suite) -> [];
'o-p46fail5'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail5.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail5.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10407,12 +9608,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail6
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail6'(suite) -> [];
'o-p46fail6'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail6.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail6.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10420,12 +9620,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47fail1
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'o-p47fail1'(suite) -> [];
'o-p47fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10433,12 +9632,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47fail2
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'o-p47fail2'(suite) -> [];
'o-p47fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10446,12 +9644,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47fail3
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'o-p47fail3'(suite) -> [];
'o-p47fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10459,12 +9656,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47fail4
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'o-p47fail4'(suite) -> [];
'o-p47fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10472,12 +9668,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p48fail1
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'o-p48fail1'(suite) -> [];
'o-p48fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10485,12 +9680,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p48fail2
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'o-p48fail2'(suite) -> [];
'o-p48fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10498,12 +9692,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p49fail1
%% Type: not-wf
%% Sections: 3.2.1 [49]
-'o-p49fail1'(suite) -> [];
'o-p49fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p49fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p49fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10511,12 +9704,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p50fail1
%% Type: not-wf
%% Sections: 3.2.1 [50]
-'o-p50fail1'(suite) -> [];
'o-p50fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p50fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p50fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10524,12 +9716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail1
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail1'(suite) -> [];
'o-p51fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10537,12 +9728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail2
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail2'(suite) -> [];
'o-p51fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10550,12 +9740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail3
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail3'(suite) -> [];
'o-p51fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10563,12 +9752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail4
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail4'(suite) -> [];
'o-p51fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10576,12 +9764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail5
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail5'(suite) -> [];
'o-p51fail5'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail5.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail5.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10589,12 +9776,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail6
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail6'(suite) -> [];
'o-p51fail6'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail6.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail6.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10602,12 +9788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail7
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail7'(suite) -> [];
'o-p51fail7'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail7.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail7.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10615,12 +9800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p52fail1
%% Type: not-wf
%% Sections: 3.3 [52]
-'o-p52fail1'(suite) -> [];
'o-p52fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10628,12 +9812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p52fail2
%% Type: not-wf
%% Sections: 3.3 [52]
-'o-p52fail2'(suite) -> [];
'o-p52fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10641,12 +9824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail1
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail1'(suite) -> [];
'o-p53fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10654,12 +9836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail2
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail2'(suite) -> [];
'o-p53fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10667,12 +9848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail3
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail3'(suite) -> [];
'o-p53fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10680,12 +9860,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail4
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail4'(suite) -> [];
'o-p53fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10693,12 +9872,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail5
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail5'(suite) -> [];
'o-p53fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10706,12 +9884,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p54fail1
%% Type: not-wf
%% Sections: 3.3.1 [54]
-'o-p54fail1'(suite) -> [];
'o-p54fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p54fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p54fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10719,12 +9896,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p55fail1
%% Type: not-wf
%% Sections: 3.3.1 [55]
-'o-p55fail1'(suite) -> [];
'o-p55fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p55fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p55fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10732,12 +9908,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail1
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail1'(suite) -> [];
'o-p56fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10745,12 +9920,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail2
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail2'(suite) -> [];
'o-p56fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10758,12 +9932,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail3
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail3'(suite) -> [];
'o-p56fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10771,12 +9944,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail4
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail4'(suite) -> [];
'o-p56fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10784,12 +9956,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail5
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail5'(suite) -> [];
'o-p56fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10797,12 +9968,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p57fail1
%% Type: not-wf
%% Sections: 3.3.1 [57]
-'o-p57fail1'(suite) -> [];
'o-p57fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p57fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p57fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10810,12 +9980,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail1
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail1'(suite) -> [];
'o-p58fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10823,12 +9992,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail2
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail2'(suite) -> [];
'o-p58fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10836,12 +10004,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail3
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail3'(suite) -> [];
'o-p58fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10849,12 +10016,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail4
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail4'(suite) -> [];
'o-p58fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10862,12 +10028,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail5
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail5'(suite) -> [];
'o-p58fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10875,12 +10040,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail6
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail6'(suite) -> [];
'o-p58fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10888,12 +10052,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail7
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail7'(suite) -> [];
'o-p58fail7'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail7.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail7.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10901,12 +10064,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail8
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail8'(suite) -> [];
'o-p58fail8'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail8.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail8.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10914,12 +10076,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p59fail1
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'o-p59fail1'(suite) -> [];
'o-p59fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10927,12 +10088,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p59fail2
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'o-p59fail2'(suite) -> [];
'o-p59fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10940,12 +10100,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p59fail3
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'o-p59fail3'(suite) -> [];
'o-p59fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10953,12 +10112,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail1
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail1'(suite) -> [];
'o-p60fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10966,12 +10124,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail2
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail2'(suite) -> [];
'o-p60fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10979,12 +10136,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail3
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail3'(suite) -> [];
'o-p60fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10992,12 +10148,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail4
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail4'(suite) -> [];
'o-p60fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11005,12 +10160,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail5
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail5'(suite) -> [];
'o-p60fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11018,12 +10172,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p61fail1
%% Type: not-wf
%% Sections: 3.4 [61]
-'o-p61fail1'(suite) -> [];
'o-p61fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p61fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p61fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11031,12 +10184,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p62fail1
%% Type: not-wf
%% Sections: 3.4 [62]
-'o-p62fail1'(suite) -> [];
'o-p62fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11044,12 +10196,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p62fail2
%% Type: not-wf
%% Sections: 3.4 [62]
-'o-p62fail2'(suite) -> [];
'o-p62fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11057,12 +10208,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p63fail1
%% Type: not-wf
%% Sections: 3.4 [63]
-'o-p63fail1'(suite) -> [];
'o-p63fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11070,12 +10220,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p63fail2
%% Type: not-wf
%% Sections: 3.4 [63]
-'o-p63fail2'(suite) -> [];
'o-p63fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11083,12 +10232,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p64fail1
%% Type: not-wf
%% Sections: 3.4 [64]
-'o-p64fail1'(suite) -> [];
'o-p64fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11096,12 +10244,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p64fail2
%% Type: not-wf
%% Sections: 3.4 [64]
-'o-p64fail2'(suite) -> [];
'o-p64fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11109,12 +10256,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail1
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail1'(suite) -> [];
'o-p66fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11122,12 +10268,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail2
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail2'(suite) -> [];
'o-p66fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11135,12 +10280,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail3
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail3'(suite) -> [];
'o-p66fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11148,12 +10292,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail4
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail4'(suite) -> [];
'o-p66fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11161,12 +10304,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail5
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail5'(suite) -> [];
'o-p66fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11174,12 +10316,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail6
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail6'(suite) -> [];
'o-p66fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11187,12 +10328,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p68fail1
%% Type: not-wf
%% Sections: 4.1 [68]
-'o-p68fail1'(suite) -> [];
'o-p68fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11200,12 +10340,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p68fail2
%% Type: not-wf
%% Sections: 4.1 [68]
-'o-p68fail2'(suite) -> [];
'o-p68fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11213,12 +10352,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p68fail3
%% Type: not-wf
%% Sections: 4.1 [68]
-'o-p68fail3'(suite) -> [];
'o-p68fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11226,12 +10364,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p69fail1
%% Type: not-wf
%% Sections: 4.1 [69]
-'o-p69fail1'(suite) -> [];
'o-p69fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11239,12 +10376,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p69fail2
%% Type: not-wf
%% Sections: 4.1 [69]
-'o-p69fail2'(suite) -> [];
'o-p69fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11252,12 +10388,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p69fail3
%% Type: not-wf
%% Sections: 4.1 [69]
-'o-p69fail3'(suite) -> [];
'o-p69fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11265,12 +10400,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p70fail1
%% Type: not-wf
%% Sections: 4.2 [70]
-'o-p70fail1'(suite) -> [];
'o-p70fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p70fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p70fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11278,12 +10412,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71fail1
%% Type: not-wf
%% Sections: 4.2 [71]
-'o-p71fail1'(suite) -> [];
'o-p71fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11291,12 +10424,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71fail2
%% Type: not-wf
%% Sections: 4.2 [71]
-'o-p71fail2'(suite) -> [];
'o-p71fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11304,12 +10436,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71fail3
%% Type: not-wf
%% Sections: 4.2 [71]
-'o-p71fail3'(suite) -> [];
'o-p71fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11317,12 +10448,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71fail4
%% Type: not-wf
%% Sections: 4.2 [71]
-'o-p71fail4'(suite) -> [];
'o-p71fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11330,12 +10460,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72fail1
%% Type: not-wf
%% Sections: 4.2 [72]
-'o-p72fail1'(suite) -> [];
'o-p72fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11343,12 +10472,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72fail2
%% Type: not-wf
%% Sections: 4.2 [72]
-'o-p72fail2'(suite) -> [];
'o-p72fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11356,12 +10484,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72fail3
%% Type: not-wf
%% Sections: 4.2 [72]
-'o-p72fail3'(suite) -> [];
'o-p72fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11369,12 +10496,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72fail4
%% Type: not-wf
%% Sections: 4.2 [72]
-'o-p72fail4'(suite) -> [];
'o-p72fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11382,12 +10508,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail1
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail1'(suite) -> [];
'o-p73fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11395,12 +10520,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail2
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail2'(suite) -> [];
'o-p73fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11408,12 +10532,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail3
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail3'(suite) -> [];
'o-p73fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11421,12 +10544,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail4
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail4'(suite) -> [];
'o-p73fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11434,12 +10556,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail5
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail5'(suite) -> [];
'o-p73fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11447,12 +10568,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p74fail1
%% Type: not-wf
%% Sections: 4.2 [74]
-'o-p74fail1'(suite) -> [];
'o-p74fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11460,12 +10580,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p74fail2
%% Type: not-wf
%% Sections: 4.2 [74]
-'o-p74fail2'(suite) -> [];
'o-p74fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11473,12 +10592,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p74fail3
%% Type: not-wf
%% Sections: 4.2 [74]
-'o-p74fail3'(suite) -> [];
'o-p74fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11486,12 +10604,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail1
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail1'(suite) -> [];
'o-p75fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11499,12 +10616,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail2
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail2'(suite) -> [];
'o-p75fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11512,12 +10628,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail3
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail3'(suite) -> [];
'o-p75fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11525,12 +10640,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail4
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail4'(suite) -> [];
'o-p75fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11538,12 +10652,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail5
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail5'(suite) -> [];
'o-p75fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11551,12 +10664,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail6
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail6'(suite) -> [];
'o-p75fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11564,12 +10676,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76fail1
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'o-p76fail1'(suite) -> [];
'o-p76fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11577,12 +10688,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76fail2
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'o-p76fail2'(suite) -> [];
'o-p76fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11590,12 +10700,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76fail3
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'o-p76fail3'(suite) -> [];
'o-p76fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11603,12 +10712,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76fail4
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'o-p76fail4'(suite) -> [];
'o-p76fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11616,12 +10724,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p11pass1
%% Type: error
%% Sections: 2.3, 4.2.2 [11]
-'o-p11pass1'(suite) -> [];
'o-p11pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "error").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11639,12 +10746,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P28-ibm28i01.xml
%% Type: invalid
%% Sections: 2.8
-'ibm-invalid-P28-ibm28i01'(suite) -> [];
'ibm-invalid-P28-ibm28i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P28/ibm28i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P28/ibm28i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11657,12 +10763,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P32-ibm32i01.xml
%% Type: invalid
%% Sections: 2.9
-'ibm-invalid-P32-ibm32i01'(suite) -> [];
'ibm-invalid-P32-ibm32i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11670,12 +10775,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P32-ibm32i03.xml
%% Type: invalid
%% Sections: 2.9
-'ibm-invalid-P32-ibm32i03'(suite) -> [];
'ibm-invalid-P32-ibm32i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11683,12 +10787,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P32-ibm32i04.xml
%% Type: invalid
%% Sections: 2.9
-'ibm-invalid-P32-ibm32i04'(suite) -> [];
'ibm-invalid-P32-ibm32i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11701,12 +10804,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P39-ibm39i01.xml
%% Type: invalid
%% Sections: 3
-'ibm-invalid-P39-ibm39i01'(suite) -> [];
'ibm-invalid-P39-ibm39i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11714,12 +10816,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P39-ibm39i02.xml
%% Type: invalid
%% Sections: 3
-'ibm-invalid-P39-ibm39i02'(suite) -> [];
'ibm-invalid-P39-ibm39i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11727,12 +10828,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P39-ibm39i03.xml
%% Type: invalid
%% Sections: 3
-'ibm-invalid-P39-ibm39i03'(suite) -> [];
'ibm-invalid-P39-ibm39i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11740,12 +10840,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P39-ibm39i04.xml
%% Type: invalid
%% Sections: 3
-'ibm-invalid-P39-ibm39i04'(suite) -> [];
'ibm-invalid-P39-ibm39i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11758,12 +10857,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P41-ibm41i01.xml
%% Type: invalid
%% Sections: 3.1
-'ibm-invalid-P41-ibm41i01'(suite) -> [];
'ibm-invalid-P41-ibm41i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P41/ibm41i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P41/ibm41i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11771,12 +10869,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P41-ibm41i02.xml
%% Type: invalid
%% Sections: 3.1
-'ibm-invalid-P41-ibm41i02'(suite) -> [];
'ibm-invalid-P41-ibm41i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P41/ibm41i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P41/ibm41i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11789,12 +10886,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P45-ibm45i01.xml
%% Type: invalid
%% Sections: 3.2
-'ibm-invalid-P45-ibm45i01'(suite) -> [];
'ibm-invalid-P45-ibm45i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P45/ibm45i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P45/ibm45i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11807,12 +10903,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P49-ibm49i01.xml
%% Type: invalid
%% Sections: 3.2.1
-'ibm-invalid-P49-ibm49i01'(suite) -> [];
'ibm-invalid-P49-ibm49i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P49/ibm49i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P49/ibm49i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11825,12 +10920,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P50-ibm50i01.xml
%% Type: invalid
%% Sections: 3.2.1
-'ibm-invalid-P50-ibm50i01'(suite) -> [];
'ibm-invalid-P50-ibm50i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P50/ibm50i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P50/ibm50i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11843,12 +10937,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P51-ibm51i01.xml
%% Type: invalid
%% Sections: 3.2.2
-'ibm-invalid-P51-ibm51i01'(suite) -> [];
'ibm-invalid-P51-ibm51i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P51/ibm51i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P51/ibm51i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11856,12 +10949,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P51-ibm51i03.xml
%% Type: invalid
%% Sections: 3.2.2
-'ibm-invalid-P51-ibm51i03'(suite) -> [];
'ibm-invalid-P51-ibm51i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P51/ibm51i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P51/ibm51i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11874,12 +10966,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i01.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i01'(suite) -> [];
'ibm-invalid-P56-ibm56i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11887,12 +10978,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i02.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i02'(suite) -> [];
'ibm-invalid-P56-ibm56i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11900,12 +10990,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i03.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i03'(suite) -> [];
'ibm-invalid-P56-ibm56i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11913,12 +11002,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i05.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i05'(suite) -> [];
'ibm-invalid-P56-ibm56i05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11926,12 +11014,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i06.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i06'(suite) -> [];
'ibm-invalid-P56-ibm56i06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11939,12 +11026,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i07.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i07'(suite) -> [];
'ibm-invalid-P56-ibm56i07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11952,12 +11038,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i08.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i08'(suite) -> [];
'ibm-invalid-P56-ibm56i08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11965,12 +11050,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i09.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i09'(suite) -> [];
'ibm-invalid-P56-ibm56i09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11978,12 +11062,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i10.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i10'(suite) -> [];
'ibm-invalid-P56-ibm56i10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11991,12 +11074,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i11.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i11'(suite) -> [];
'ibm-invalid-P56-ibm56i11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12004,12 +11086,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i12.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i12'(suite) -> [];
'ibm-invalid-P56-ibm56i12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12017,12 +11098,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i13.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i13'(suite) -> [];
'ibm-invalid-P56-ibm56i13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12030,12 +11110,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i14.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i14'(suite) -> [];
'ibm-invalid-P56-ibm56i14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12043,12 +11122,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i15.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i15'(suite) -> [];
'ibm-invalid-P56-ibm56i15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12056,12 +11134,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i16.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i16'(suite) -> [];
'ibm-invalid-P56-ibm56i16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12069,12 +11146,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i17.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i17'(suite) -> [];
'ibm-invalid-P56-ibm56i17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12082,12 +11158,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i18.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i18'(suite) -> [];
'ibm-invalid-P56-ibm56i18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12100,12 +11175,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P58-ibm58i01.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P58-ibm58i01'(suite) -> [];
'ibm-invalid-P58-ibm58i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P58/ibm58i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P58/ibm58i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12113,12 +11187,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P58-ibm58i02.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P58-ibm58i02'(suite) -> [];
'ibm-invalid-P58-ibm58i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P58/ibm58i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P58/ibm58i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12131,12 +11204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P59-ibm59i01.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P59-ibm59i01'(suite) -> [];
'ibm-invalid-P59-ibm59i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P59/ibm59i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P59/ibm59i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12149,12 +11221,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P60-ibm60i01.xml
%% Type: invalid
%% Sections: 3.3.2
-'ibm-invalid-P60-ibm60i01'(suite) -> [];
'ibm-invalid-P60-ibm60i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12162,12 +11233,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P60-ibm60i02.xml
%% Type: invalid
%% Sections: 3.3.2
-'ibm-invalid-P60-ibm60i02'(suite) -> [];
'ibm-invalid-P60-ibm60i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12175,12 +11245,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P60-ibm60i03.xml
%% Type: invalid
%% Sections: 3.3.2
-'ibm-invalid-P60-ibm60i03'(suite) -> [];
'ibm-invalid-P60-ibm60i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12188,12 +11257,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P60-ibm60i04.xml
%% Type: invalid
%% Sections: 3.3.2
-'ibm-invalid-P60-ibm60i04'(suite) -> [];
'ibm-invalid-P60-ibm60i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12206,12 +11274,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P68-ibm68i01.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P68-ibm68i01'(suite) -> [];
'ibm-invalid-P68-ibm68i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12219,12 +11286,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P68-ibm68i02.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P68-ibm68i02'(suite) -> [];
'ibm-invalid-P68-ibm68i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12232,12 +11298,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P68-ibm68i03.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P68-ibm68i03'(suite) -> [];
'ibm-invalid-P68-ibm68i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12245,12 +11310,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P68-ibm68i04.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P68-ibm68i04'(suite) -> [];
'ibm-invalid-P68-ibm68i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12263,12 +11327,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P69-ibm69i01.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P69-ibm69i01'(suite) -> [];
'ibm-invalid-P69-ibm69i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12276,12 +11339,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P69-ibm69i02.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P69-ibm69i02'(suite) -> [];
'ibm-invalid-P69-ibm69i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12289,12 +11351,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P69-ibm69i03.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P69-ibm69i03'(suite) -> [];
'ibm-invalid-P69-ibm69i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12302,12 +11363,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P69-ibm69i04.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P69-ibm69i04'(suite) -> [];
'ibm-invalid-P69-ibm69i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12320,12 +11380,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P76-ibm76i01.xml
%% Type: invalid
%% Sections: 4.2.2
-'ibm-invalid-P76-ibm76i01'(suite) -> [];
'ibm-invalid-P76-ibm76i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P76/ibm76i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P76/ibm76i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12343,12 +11402,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P01-ibm01n01.xml
%% Type: not-wf
%% Sections: 2.1
-'ibm-not-wf-P01-ibm01n01'(suite) -> [];
'ibm-not-wf-P01-ibm01n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12356,16 +11414,15 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P01-ibm01n02.xml
%% Type: not-wf
%% Sections: 2.1
-'ibm-not-wf-P01-ibm01n02'(suite) -> [];
'ibm-not-wf-P01-ibm01n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n02.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n02.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_, <<"<?xml version=\"1.0\"?>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- % ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- % ?line check_result(R, "not-wf").
+ {ok,_, <<"<?xml version=\"1.0\"?>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ % R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ % check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12373,15 +11430,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P01-ibm01n03.xml
%% Type: not-wf
%% Sections: 2.1
-'ibm-not-wf-P01-ibm01n03'(suite) -> [];
'ibm-not-wf-P01-ibm01n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n03.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n03.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_, <<"<title>Wrong combination!</title>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_, <<"<title>Wrong combination!</title>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12394,12 +11450,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n01.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n01'(suite) -> [];
'ibm-not-wf-P02-ibm02n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12407,12 +11462,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n02.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n02'(suite) -> [];
'ibm-not-wf-P02-ibm02n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12420,12 +11474,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n03.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n03'(suite) -> [];
'ibm-not-wf-P02-ibm02n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12433,12 +11486,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n04.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n04'(suite) -> [];
'ibm-not-wf-P02-ibm02n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12446,12 +11498,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n05.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n05'(suite) -> [];
'ibm-not-wf-P02-ibm02n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12459,12 +11510,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n06.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n06'(suite) -> [];
'ibm-not-wf-P02-ibm02n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12472,12 +11522,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n07.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n07'(suite) -> [];
'ibm-not-wf-P02-ibm02n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12485,12 +11534,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n08.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n08'(suite) -> [];
'ibm-not-wf-P02-ibm02n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12498,12 +11546,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n09.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n09'(suite) -> [];
'ibm-not-wf-P02-ibm02n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12511,12 +11558,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n10.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n10'(suite) -> [];
'ibm-not-wf-P02-ibm02n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12524,12 +11570,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n11.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n11'(suite) -> [];
'ibm-not-wf-P02-ibm02n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12537,12 +11582,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n12.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n12'(suite) -> [];
'ibm-not-wf-P02-ibm02n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12550,12 +11594,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n13.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n13'(suite) -> [];
'ibm-not-wf-P02-ibm02n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12563,12 +11606,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n14.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n14'(suite) -> [];
'ibm-not-wf-P02-ibm02n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12576,12 +11618,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n15.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n15'(suite) -> [];
'ibm-not-wf-P02-ibm02n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12589,12 +11630,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n16.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n16'(suite) -> [];
'ibm-not-wf-P02-ibm02n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12602,12 +11642,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n17.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n17'(suite) -> [];
'ibm-not-wf-P02-ibm02n17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12615,12 +11654,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n18.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n18'(suite) -> [];
'ibm-not-wf-P02-ibm02n18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12628,12 +11666,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n19.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n19'(suite) -> [];
'ibm-not-wf-P02-ibm02n19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12641,12 +11678,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n20.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n20'(suite) -> [];
'ibm-not-wf-P02-ibm02n20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12654,12 +11690,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n21.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n21'(suite) -> [];
'ibm-not-wf-P02-ibm02n21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12667,12 +11702,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n22.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n22'(suite) -> [];
'ibm-not-wf-P02-ibm02n22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12680,12 +11714,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n23.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n23'(suite) -> [];
'ibm-not-wf-P02-ibm02n23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12693,12 +11726,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n24.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n24'(suite) -> [];
'ibm-not-wf-P02-ibm02n24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12706,12 +11738,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n25.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n25'(suite) -> [];
'ibm-not-wf-P02-ibm02n25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12719,12 +11750,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n26.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n26'(suite) -> [];
'ibm-not-wf-P02-ibm02n26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12732,12 +11762,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n27.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n27'(suite) -> [];
'ibm-not-wf-P02-ibm02n27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12745,12 +11774,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n28.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n28'(suite) -> [];
'ibm-not-wf-P02-ibm02n28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12758,12 +11786,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n29.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n29'(suite) -> [];
'ibm-not-wf-P02-ibm02n29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12771,12 +11798,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n30.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n30'(suite) -> [];
'ibm-not-wf-P02-ibm02n30'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n30.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n30.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12784,12 +11810,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n31.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n31'(suite) -> [];
'ibm-not-wf-P02-ibm02n31'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n31.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n31.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12797,12 +11822,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n32.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n32'(suite) -> [];
'ibm-not-wf-P02-ibm02n32'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n32.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n32.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12810,12 +11834,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n33.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n33'(suite) -> [];
'ibm-not-wf-P02-ibm02n33'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n33.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n33.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12828,12 +11851,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P03-ibm03n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P03-ibm03n01'(suite) -> [];
'ibm-not-wf-P03-ibm03n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P03/ibm03n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P03/ibm03n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12846,12 +11868,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n01'(suite) -> [];
'ibm-not-wf-P04-ibm04n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12859,12 +11880,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n02'(suite) -> [];
'ibm-not-wf-P04-ibm04n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12872,12 +11892,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n03'(suite) -> [];
'ibm-not-wf-P04-ibm04n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12885,12 +11904,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n04.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n04'(suite) -> [];
'ibm-not-wf-P04-ibm04n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12898,12 +11916,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n05.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n05'(suite) -> [];
'ibm-not-wf-P04-ibm04n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12911,12 +11928,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n06.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n06'(suite) -> [];
'ibm-not-wf-P04-ibm04n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12924,12 +11940,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n07.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n07'(suite) -> [];
'ibm-not-wf-P04-ibm04n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12937,12 +11952,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n08.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n08'(suite) -> [];
'ibm-not-wf-P04-ibm04n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12950,12 +11964,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n09.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n09'(suite) -> [];
'ibm-not-wf-P04-ibm04n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12963,12 +11976,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n10.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n10'(suite) -> [];
'ibm-not-wf-P04-ibm04n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12976,12 +11988,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n11.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n11'(suite) -> [];
'ibm-not-wf-P04-ibm04n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12989,12 +12000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n12.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n12'(suite) -> [];
'ibm-not-wf-P04-ibm04n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13002,12 +12012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n13.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n13'(suite) -> [];
'ibm-not-wf-P04-ibm04n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13015,12 +12024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n14.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n14'(suite) -> [];
'ibm-not-wf-P04-ibm04n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13028,12 +12036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n15.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n15'(suite) -> [];
'ibm-not-wf-P04-ibm04n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13041,12 +12048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n16.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n16'(suite) -> [];
'ibm-not-wf-P04-ibm04n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13054,12 +12060,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n17.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n17'(suite) -> [];
'ibm-not-wf-P04-ibm04n17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13067,12 +12072,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n18.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n18'(suite) -> [];
'ibm-not-wf-P04-ibm04n18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13085,12 +12089,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P05-ibm05n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P05-ibm05n01'(suite) -> [];
'ibm-not-wf-P05-ibm05n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13098,12 +12101,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P05-ibm05n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P05-ibm05n02'(suite) -> [];
'ibm-not-wf-P05-ibm05n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13111,12 +12113,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P05-ibm05n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P05-ibm05n03'(suite) -> [];
'ibm-not-wf-P05-ibm05n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13129,12 +12130,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P09-ibm09n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P09-ibm09n01'(suite) -> [];
'ibm-not-wf-P09-ibm09n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13142,12 +12142,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P09-ibm09n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P09-ibm09n02'(suite) -> [];
'ibm-not-wf-P09-ibm09n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13155,12 +12154,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P09-ibm09n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P09-ibm09n03'(suite) -> [];
'ibm-not-wf-P09-ibm09n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13168,12 +12166,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P09-ibm09n04.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P09-ibm09n04'(suite) -> [];
'ibm-not-wf-P09-ibm09n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13186,12 +12183,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n01'(suite) -> [];
'ibm-not-wf-P10-ibm10n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13199,12 +12195,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n02'(suite) -> [];
'ibm-not-wf-P10-ibm10n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13212,12 +12207,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n03'(suite) -> [];
'ibm-not-wf-P10-ibm10n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13225,12 +12219,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n04.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n04'(suite) -> [];
'ibm-not-wf-P10-ibm10n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13238,12 +12231,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n05.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n05'(suite) -> [];
'ibm-not-wf-P10-ibm10n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13251,12 +12243,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n06.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n06'(suite) -> [];
'ibm-not-wf-P10-ibm10n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13264,12 +12255,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n07.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n07'(suite) -> [];
'ibm-not-wf-P10-ibm10n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13277,12 +12267,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n08.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n08'(suite) -> [];
'ibm-not-wf-P10-ibm10n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13295,12 +12284,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P11-ibm11n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P11-ibm11n01'(suite) -> [];
'ibm-not-wf-P11-ibm11n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13308,12 +12296,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P11-ibm11n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P11-ibm11n02'(suite) -> [];
'ibm-not-wf-P11-ibm11n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13321,12 +12308,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P11-ibm11n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P11-ibm11n03'(suite) -> [];
'ibm-not-wf-P11-ibm11n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13334,12 +12320,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P11-ibm11n04.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P11-ibm11n04'(suite) -> [];
'ibm-not-wf-P11-ibm11n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13352,12 +12337,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P12-ibm12n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P12-ibm12n01'(suite) -> [];
'ibm-not-wf-P12-ibm12n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13365,12 +12349,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P12-ibm12n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P12-ibm12n02'(suite) -> [];
'ibm-not-wf-P12-ibm12n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13378,12 +12361,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P12-ibm12n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P12-ibm12n03'(suite) -> [];
'ibm-not-wf-P12-ibm12n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13396,12 +12378,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P13-ibm13n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P13-ibm13n01'(suite) -> [];
'ibm-not-wf-P13-ibm13n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13409,12 +12390,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P13-ibm13n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P13-ibm13n02'(suite) -> [];
'ibm-not-wf-P13-ibm13n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13422,12 +12402,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P13-ibm13n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P13-ibm13n03'(suite) -> [];
'ibm-not-wf-P13-ibm13n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13440,12 +12419,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P14-ibm14n01.xml
%% Type: not-wf
%% Sections: 2.4
-'ibm-not-wf-P14-ibm14n01'(suite) -> [];
'ibm-not-wf-P14-ibm14n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13453,12 +12431,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P14-ibm14n02.xml
%% Type: not-wf
%% Sections: 2.4
-'ibm-not-wf-P14-ibm14n02'(suite) -> [];
'ibm-not-wf-P14-ibm14n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13466,12 +12443,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P14-ibm14n03.xml
%% Type: not-wf
%% Sections: 2.4
-'ibm-not-wf-P14-ibm14n03'(suite) -> [];
'ibm-not-wf-P14-ibm14n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13484,12 +12460,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P15-ibm15n01.xml
%% Type: not-wf
%% Sections: 2.5
-'ibm-not-wf-P15-ibm15n01'(suite) -> [];
'ibm-not-wf-P15-ibm15n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13497,12 +12472,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P15-ibm15n02.xml
%% Type: not-wf
%% Sections: 2.5
-'ibm-not-wf-P15-ibm15n02'(suite) -> [];
'ibm-not-wf-P15-ibm15n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13510,12 +12484,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P15-ibm15n03.xml
%% Type: not-wf
%% Sections: 2.5
-'ibm-not-wf-P15-ibm15n03'(suite) -> [];
'ibm-not-wf-P15-ibm15n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13523,12 +12496,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P15-ibm15n04.xml
%% Type: not-wf
%% Sections: 2.5
-'ibm-not-wf-P15-ibm15n04'(suite) -> [];
'ibm-not-wf-P15-ibm15n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13541,12 +12513,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P16-ibm16n01.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P16-ibm16n01'(suite) -> [];
'ibm-not-wf-P16-ibm16n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13554,12 +12525,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P16-ibm16n02.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P16-ibm16n02'(suite) -> [];
'ibm-not-wf-P16-ibm16n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13567,12 +12537,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P16-ibm16n03.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P16-ibm16n03'(suite) -> [];
'ibm-not-wf-P16-ibm16n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13580,12 +12549,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P16-ibm16n04.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P16-ibm16n04'(suite) -> [];
'ibm-not-wf-P16-ibm16n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13598,12 +12566,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P17-ibm17n01.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P17-ibm17n01'(suite) -> [];
'ibm-not-wf-P17-ibm17n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13611,12 +12578,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P17-ibm17n02.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P17-ibm17n02'(suite) -> [];
'ibm-not-wf-P17-ibm17n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13624,12 +12590,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P17-ibm17n03.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P17-ibm17n03'(suite) -> [];
'ibm-not-wf-P17-ibm17n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13637,12 +12602,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P17-ibm17n04.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P17-ibm17n04'(suite) -> [];
'ibm-not-wf-P17-ibm17n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13655,12 +12619,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P18-ibm18n01.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P18-ibm18n01'(suite) -> [];
'ibm-not-wf-P18-ibm18n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P18/ibm18n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P18/ibm18n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13668,12 +12631,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P18-ibm18n02.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P18-ibm18n02'(suite) -> [];
'ibm-not-wf-P18-ibm18n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P18/ibm18n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P18/ibm18n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13686,12 +12648,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P19-ibm19n01.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P19-ibm19n01'(suite) -> [];
'ibm-not-wf-P19-ibm19n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13699,12 +12660,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P19-ibm19n02.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P19-ibm19n02'(suite) -> [];
'ibm-not-wf-P19-ibm19n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13712,12 +12672,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P19-ibm19n03.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P19-ibm19n03'(suite) -> [];
'ibm-not-wf-P19-ibm19n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13730,12 +12689,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P20-ibm20n01.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P20-ibm20n01'(suite) -> [];
'ibm-not-wf-P20-ibm20n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P20/ibm20n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P20/ibm20n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13748,12 +12706,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P21-ibm21n01.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P21-ibm21n01'(suite) -> [];
'ibm-not-wf-P21-ibm21n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13761,12 +12718,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P21-ibm21n02.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P21-ibm21n02'(suite) -> [];
'ibm-not-wf-P21-ibm21n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13774,12 +12730,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P21-ibm21n03.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P21-ibm21n03'(suite) -> [];
'ibm-not-wf-P21-ibm21n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13792,12 +12747,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P22-ibm22n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P22-ibm22n01'(suite) -> [];
'ibm-not-wf-P22-ibm22n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13805,12 +12759,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P22-ibm22n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P22-ibm22n02'(suite) -> [];
'ibm-not-wf-P22-ibm22n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13818,12 +12771,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P22-ibm22n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P22-ibm22n03'(suite) -> [];
'ibm-not-wf-P22-ibm22n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13836,12 +12788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n01'(suite) -> [];
'ibm-not-wf-P23-ibm23n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13849,12 +12800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n02'(suite) -> [];
'ibm-not-wf-P23-ibm23n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13862,12 +12812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n03'(suite) -> [];
'ibm-not-wf-P23-ibm23n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13875,12 +12824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n04.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n04'(suite) -> [];
'ibm-not-wf-P23-ibm23n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13888,12 +12836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n05.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n05'(suite) -> [];
'ibm-not-wf-P23-ibm23n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13901,12 +12848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n06.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n06'(suite) -> [];
'ibm-not-wf-P23-ibm23n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13919,12 +12865,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n01'(suite) -> [];
'ibm-not-wf-P24-ibm24n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13932,12 +12877,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n02'(suite) -> [];
'ibm-not-wf-P24-ibm24n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13945,12 +12889,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n03'(suite) -> [];
'ibm-not-wf-P24-ibm24n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13958,12 +12901,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n04.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n04'(suite) -> [];
'ibm-not-wf-P24-ibm24n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13971,12 +12913,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n05.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n05'(suite) -> [];
'ibm-not-wf-P24-ibm24n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13984,12 +12925,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n06.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n06'(suite) -> [];
'ibm-not-wf-P24-ibm24n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13997,12 +12937,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n07.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n07'(suite) -> [];
'ibm-not-wf-P24-ibm24n07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14010,12 +12949,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n08.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n08'(suite) -> [];
'ibm-not-wf-P24-ibm24n08'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n08.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n08.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14023,12 +12961,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n09.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n09'(suite) -> [];
'ibm-not-wf-P24-ibm24n09'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n09.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n09.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14041,12 +12978,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P25-ibm25n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P25-ibm25n01'(suite) -> [];
'ibm-not-wf-P25-ibm25n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P25/ibm25n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P25/ibm25n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14054,12 +12990,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P25-ibm25n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P25-ibm25n02'(suite) -> [];
'ibm-not-wf-P25-ibm25n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P25/ibm25n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P25/ibm25n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14072,12 +13007,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P26-ibm26n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P26-ibm26n01'(suite) -> [];
'ibm-not-wf-P26-ibm26n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P26/ibm26n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P26/ibm26n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14090,15 +13024,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P27-ibm27n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P27-ibm27n01'(suite) -> [];
'ibm-not-wf-P27-ibm27n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P27/ibm27n01.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P27/ibm27n01.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_, <<"<!ELEMENT cat EMPTY>">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_, <<"<!ELEMENT cat EMPTY>">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14111,12 +13044,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n01'(suite) -> [];
'ibm-not-wf-P28-ibm28n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14124,12 +13056,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n02'(suite) -> [];
'ibm-not-wf-P28-ibm28n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14137,12 +13068,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n03'(suite) -> [];
'ibm-not-wf-P28-ibm28n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14150,12 +13080,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n04.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n04'(suite) -> [];
'ibm-not-wf-P28-ibm28n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14163,12 +13092,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n05.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n05'(suite) -> [];
'ibm-not-wf-P28-ibm28n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14176,12 +13104,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n06.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n06'(suite) -> [];
'ibm-not-wf-P28-ibm28n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14189,12 +13116,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n07.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n07'(suite) -> [];
'ibm-not-wf-P28-ibm28n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14202,12 +13128,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n08.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n08'(suite) -> [];
'ibm-not-wf-P28-ibm28n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14220,12 +13145,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-p28a-ibm28an01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-p28a-ibm28an01'(suite) -> [];
'ibm-not-wf-p28a-ibm28an01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/p28a/ibm28an01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/p28a/ibm28an01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14238,12 +13162,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n01'(suite) -> [];
'ibm-not-wf-P29-ibm29n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14251,12 +13174,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n02'(suite) -> [];
'ibm-not-wf-P29-ibm29n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14264,12 +13186,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n03'(suite) -> [];
'ibm-not-wf-P29-ibm29n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14277,12 +13198,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n04.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n04'(suite) -> [];
'ibm-not-wf-P29-ibm29n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14290,12 +13210,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n05.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n05'(suite) -> [];
'ibm-not-wf-P29-ibm29n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14303,12 +13222,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n06.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n06'(suite) -> [];
'ibm-not-wf-P29-ibm29n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14316,12 +13234,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n07.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n07'(suite) -> [];
'ibm-not-wf-P29-ibm29n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14334,12 +13251,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P30-ibm30n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P30-ibm30n01'(suite) -> [];
'ibm-not-wf-P30-ibm30n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P30/ibm30n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P30/ibm30n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14352,12 +13268,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P31-ibm31n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P31-ibm31n01'(suite) -> [];
'ibm-not-wf-P31-ibm31n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P31/ibm31n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P31/ibm31n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14370,12 +13285,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n01.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n01'(suite) -> [];
'ibm-not-wf-P32-ibm32n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14383,12 +13297,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n02.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n02'(suite) -> [];
'ibm-not-wf-P32-ibm32n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14396,12 +13309,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n03.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n03'(suite) -> [];
'ibm-not-wf-P32-ibm32n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14409,12 +13321,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n04.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n04'(suite) -> [];
'ibm-not-wf-P32-ibm32n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14422,12 +13333,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n05.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n05'(suite) -> [];
'ibm-not-wf-P32-ibm32n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14435,12 +13345,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n06.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n06'(suite) -> [];
'ibm-not-wf-P32-ibm32n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14448,12 +13357,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n07.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n07'(suite) -> [];
'ibm-not-wf-P32-ibm32n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14461,12 +13369,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n08.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n08'(suite) -> [];
'ibm-not-wf-P32-ibm32n08'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n08.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n08.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14474,12 +13381,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n09.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n09'(suite) -> [];
'ibm-not-wf-P32-ibm32n09'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n09.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n09.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14492,12 +13398,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n01.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n01'(suite) -> [];
'ibm-not-wf-P39-ibm39n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14505,12 +13410,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n02.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n02'(suite) -> [];
'ibm-not-wf-P39-ibm39n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14518,12 +13422,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n03.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n03'(suite) -> [];
'ibm-not-wf-P39-ibm39n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14531,12 +13434,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n04.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n04'(suite) -> [];
'ibm-not-wf-P39-ibm39n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14544,12 +13446,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n05.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n05'(suite) -> [];
'ibm-not-wf-P39-ibm39n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14557,15 +13458,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n06.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n06'(suite) -> [];
'ibm-not-wf-P39-ibm39n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n06.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n06.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"content after end tag\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"content after end tag\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14578,12 +13478,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n01'(suite) -> [];
'ibm-not-wf-P40-ibm40n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14591,12 +13490,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n02'(suite) -> [];
'ibm-not-wf-P40-ibm40n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14604,12 +13502,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n03.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n03'(suite) -> [];
'ibm-not-wf-P40-ibm40n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14617,12 +13514,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n04'(suite) -> [];
'ibm-not-wf-P40-ibm40n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14630,12 +13526,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n05.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n05'(suite) -> [];
'ibm-not-wf-P40-ibm40n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14648,12 +13543,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n01'(suite) -> [];
'ibm-not-wf-P41-ibm41n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14661,12 +13555,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n02'(suite) -> [];
'ibm-not-wf-P41-ibm41n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14674,12 +13567,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n03.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n03'(suite) -> [];
'ibm-not-wf-P41-ibm41n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14687,12 +13579,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n04'(suite) -> [];
'ibm-not-wf-P41-ibm41n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14700,12 +13591,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n05.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n05'(suite) -> [];
'ibm-not-wf-P41-ibm41n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14713,12 +13603,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n06.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n06'(suite) -> [];
'ibm-not-wf-P41-ibm41n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14726,12 +13615,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n07.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n07'(suite) -> [];
'ibm-not-wf-P41-ibm41n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14739,12 +13627,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n08.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n08'(suite) -> [];
'ibm-not-wf-P41-ibm41n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14752,12 +13639,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n09.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n09'(suite) -> [];
'ibm-not-wf-P41-ibm41n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14765,12 +13651,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n10.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n10'(suite) -> [];
'ibm-not-wf-P41-ibm41n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14778,12 +13663,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n11.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n11'(suite) -> [];
'ibm-not-wf-P41-ibm41n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14791,12 +13675,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n12.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n12'(suite) -> [];
'ibm-not-wf-P41-ibm41n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14804,12 +13687,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n13.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n13'(suite) -> [];
'ibm-not-wf-P41-ibm41n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14817,12 +13699,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n14.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n14'(suite) -> [];
'ibm-not-wf-P41-ibm41n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14835,12 +13716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n01'(suite) -> [];
'ibm-not-wf-P42-ibm42n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14848,12 +13728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n02'(suite) -> [];
'ibm-not-wf-P42-ibm42n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14861,12 +13740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n03.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n03'(suite) -> [];
'ibm-not-wf-P42-ibm42n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14874,12 +13752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n04'(suite) -> [];
'ibm-not-wf-P42-ibm42n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14887,12 +13764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n05.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n05'(suite) -> [];
'ibm-not-wf-P42-ibm42n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14905,12 +13781,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P43-ibm43n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P43-ibm43n01'(suite) -> [];
'ibm-not-wf-P43-ibm43n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14918,12 +13793,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P43-ibm43n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P43-ibm43n02'(suite) -> [];
'ibm-not-wf-P43-ibm43n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14931,12 +13805,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P43-ibm43n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P43-ibm43n04'(suite) -> [];
'ibm-not-wf-P43-ibm43n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14944,12 +13817,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P43-ibm43n05.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P43-ibm43n05'(suite) -> [];
'ibm-not-wf-P43-ibm43n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14962,12 +13834,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P44-ibm44n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P44-ibm44n01'(suite) -> [];
'ibm-not-wf-P44-ibm44n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14975,12 +13846,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P44-ibm44n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P44-ibm44n02'(suite) -> [];
'ibm-not-wf-P44-ibm44n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14988,12 +13858,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P44-ibm44n03.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P44-ibm44n03'(suite) -> [];
'ibm-not-wf-P44-ibm44n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15001,12 +13870,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P44-ibm44n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P44-ibm44n04'(suite) -> [];
'ibm-not-wf-P44-ibm44n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15019,12 +13887,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n01.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n01'(suite) -> [];
'ibm-not-wf-P45-ibm45n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15032,12 +13899,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n02.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n02'(suite) -> [];
'ibm-not-wf-P45-ibm45n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15045,12 +13911,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n03.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n03'(suite) -> [];
'ibm-not-wf-P45-ibm45n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15058,12 +13923,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n04.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n04'(suite) -> [];
'ibm-not-wf-P45-ibm45n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15071,12 +13935,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n05.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n05'(suite) -> [];
'ibm-not-wf-P45-ibm45n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15084,12 +13947,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n06.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n06'(suite) -> [];
'ibm-not-wf-P45-ibm45n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15097,12 +13959,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n07.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n07'(suite) -> [];
'ibm-not-wf-P45-ibm45n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15110,12 +13971,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n08.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n08'(suite) -> [];
'ibm-not-wf-P45-ibm45n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15123,12 +13983,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n09.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n09'(suite) -> [];
'ibm-not-wf-P45-ibm45n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15141,12 +14000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n01.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n01'(suite) -> [];
'ibm-not-wf-P46-ibm46n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15154,12 +14012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n02.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n02'(suite) -> [];
'ibm-not-wf-P46-ibm46n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15167,12 +14024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n03.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n03'(suite) -> [];
'ibm-not-wf-P46-ibm46n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15180,12 +14036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n04.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n04'(suite) -> [];
'ibm-not-wf-P46-ibm46n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15193,12 +14048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n05.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n05'(suite) -> [];
'ibm-not-wf-P46-ibm46n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15211,12 +14065,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n01.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n01'(suite) -> [];
'ibm-not-wf-P47-ibm47n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15224,12 +14077,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n02.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n02'(suite) -> [];
'ibm-not-wf-P47-ibm47n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15237,12 +14089,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n03.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n03'(suite) -> [];
'ibm-not-wf-P47-ibm47n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15250,12 +14101,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n04.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n04'(suite) -> [];
'ibm-not-wf-P47-ibm47n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15263,12 +14113,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n05.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n05'(suite) -> [];
'ibm-not-wf-P47-ibm47n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15276,12 +14125,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n06.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n06'(suite) -> [];
'ibm-not-wf-P47-ibm47n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15294,12 +14142,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n01.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n01'(suite) -> [];
'ibm-not-wf-P48-ibm48n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15307,12 +14154,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n02.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n02'(suite) -> [];
'ibm-not-wf-P48-ibm48n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15320,12 +14166,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n03.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n03'(suite) -> [];
'ibm-not-wf-P48-ibm48n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15333,12 +14178,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n04.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n04'(suite) -> [];
'ibm-not-wf-P48-ibm48n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15346,12 +14190,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n05.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n05'(suite) -> [];
'ibm-not-wf-P48-ibm48n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15359,12 +14202,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n06.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n06'(suite) -> [];
'ibm-not-wf-P48-ibm48n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15372,12 +14214,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n07.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n07'(suite) -> [];
'ibm-not-wf-P48-ibm48n07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15390,12 +14231,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n01.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n01'(suite) -> [];
'ibm-not-wf-P49-ibm49n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15403,12 +14243,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n02.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n02'(suite) -> [];
'ibm-not-wf-P49-ibm49n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15416,12 +14255,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n03.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n03'(suite) -> [];
'ibm-not-wf-P49-ibm49n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15429,12 +14267,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n04.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n04'(suite) -> [];
'ibm-not-wf-P49-ibm49n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15442,12 +14279,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n05.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n05'(suite) -> [];
'ibm-not-wf-P49-ibm49n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15455,12 +14291,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n06.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n06'(suite) -> [];
'ibm-not-wf-P49-ibm49n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15473,12 +14308,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n01.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n01'(suite) -> [];
'ibm-not-wf-P50-ibm50n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15486,12 +14320,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n02.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n02'(suite) -> [];
'ibm-not-wf-P50-ibm50n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15499,12 +14332,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n03.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n03'(suite) -> [];
'ibm-not-wf-P50-ibm50n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15512,12 +14344,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n04.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n04'(suite) -> [];
'ibm-not-wf-P50-ibm50n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15525,12 +14356,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n05.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n05'(suite) -> [];
'ibm-not-wf-P50-ibm50n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15538,12 +14368,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n06.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n06'(suite) -> [];
'ibm-not-wf-P50-ibm50n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15551,18 +14380,16 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n07.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n07'(suite) -> [];
'ibm-not-wf-P50-ibm50n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 50
-testcases67(suite) -> [].
%% ['ibm-not-wf-P50-ibm50n01','ibm-not-wf-P50-ibm50n02','ibm-not-wf-P50-ibm50n03','ibm-not-wf-P50-ibm50n04','ibm-not-wf-P50-ibm50n05','ibm-not-wf-P50-ibm50n06','ibm-not-wf-P50-ibm50n07'].
%%----------------------------------------------------------------------
@@ -15571,12 +14398,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n01.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n01'(suite) -> [];
'ibm-not-wf-P51-ibm51n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15584,12 +14410,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n02.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n02'(suite) -> [];
'ibm-not-wf-P51-ibm51n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15597,12 +14422,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n03.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n03'(suite) -> [];
'ibm-not-wf-P51-ibm51n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15610,12 +14434,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n04.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n04'(suite) -> [];
'ibm-not-wf-P51-ibm51n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15623,12 +14446,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n05.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n05'(suite) -> [];
'ibm-not-wf-P51-ibm51n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15636,12 +14458,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n06.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n06'(suite) -> [];
'ibm-not-wf-P51-ibm51n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15649,18 +14470,16 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n07.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n07'(suite) -> [];
'ibm-not-wf-P51-ibm51n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 51
-testcases68(suite) -> [].
%% ['ibm-not-wf-P51-ibm51n01','ibm-not-wf-P51-ibm51n02','ibm-not-wf-P51-ibm51n03','ibm-not-wf-P51-ibm51n04','ibm-not-wf-P51-ibm51n05','ibm-not-wf-P51-ibm51n06','ibm-not-wf-P51-ibm51n07'].
%%----------------------------------------------------------------------
@@ -15669,12 +14488,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n01.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n01'(suite) -> [];
'ibm-not-wf-P52-ibm52n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15682,12 +14500,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n02.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n02'(suite) -> [];
'ibm-not-wf-P52-ibm52n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15695,12 +14512,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n03.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n03'(suite) -> [];
'ibm-not-wf-P52-ibm52n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15708,12 +14524,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n04.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n04'(suite) -> [];
'ibm-not-wf-P52-ibm52n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15721,12 +14536,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n05.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n05'(suite) -> [];
'ibm-not-wf-P52-ibm52n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15734,12 +14548,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n06.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n06'(suite) -> [];
'ibm-not-wf-P52-ibm52n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15752,12 +14565,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n01.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n01'(suite) -> [];
'ibm-not-wf-P53-ibm53n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15765,12 +14577,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n02.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n02'(suite) -> [];
'ibm-not-wf-P53-ibm53n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15778,12 +14589,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n03.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n03'(suite) -> [];
'ibm-not-wf-P53-ibm53n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15791,12 +14601,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n04.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n04'(suite) -> [];
'ibm-not-wf-P53-ibm53n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15804,12 +14613,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n05.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n05'(suite) -> [];
'ibm-not-wf-P53-ibm53n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15817,12 +14625,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n06.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n06'(suite) -> [];
'ibm-not-wf-P53-ibm53n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15830,12 +14637,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n07.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n07'(suite) -> [];
'ibm-not-wf-P53-ibm53n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15843,12 +14649,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n08.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n08'(suite) -> [];
'ibm-not-wf-P53-ibm53n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15861,12 +14666,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P54-ibm54n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P54-ibm54n01'(suite) -> [];
'ibm-not-wf-P54-ibm54n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P54/ibm54n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P54/ibm54n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15874,12 +14678,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P54-ibm54n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P54-ibm54n02'(suite) -> [];
'ibm-not-wf-P54-ibm54n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P54/ibm54n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P54/ibm54n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15892,12 +14695,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P55-ibm55n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P55-ibm55n01'(suite) -> [];
'ibm-not-wf-P55-ibm55n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15905,12 +14707,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P55-ibm55n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P55-ibm55n02'(suite) -> [];
'ibm-not-wf-P55-ibm55n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15918,12 +14719,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P55-ibm55n03.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P55-ibm55n03'(suite) -> [];
'ibm-not-wf-P55-ibm55n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15936,12 +14736,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n01'(suite) -> [];
'ibm-not-wf-P56-ibm56n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15949,12 +14748,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n02'(suite) -> [];
'ibm-not-wf-P56-ibm56n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15962,12 +14760,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n03.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n03'(suite) -> [];
'ibm-not-wf-P56-ibm56n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15975,12 +14772,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n04.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n04'(suite) -> [];
'ibm-not-wf-P56-ibm56n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15988,12 +14784,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n05.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n05'(suite) -> [];
'ibm-not-wf-P56-ibm56n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16001,12 +14796,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n06.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n06'(suite) -> [];
'ibm-not-wf-P56-ibm56n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16014,12 +14808,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n07.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n07'(suite) -> [];
'ibm-not-wf-P56-ibm56n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16032,12 +14825,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P57-ibm57n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P57-ibm57n01'(suite) -> [];
'ibm-not-wf-P57-ibm57n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P57/ibm57n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P57/ibm57n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16050,12 +14842,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n01'(suite) -> [];
'ibm-not-wf-P58-ibm58n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16063,12 +14854,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n02'(suite) -> [];
'ibm-not-wf-P58-ibm58n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16076,12 +14866,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n03.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n03'(suite) -> [];
'ibm-not-wf-P58-ibm58n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16089,12 +14878,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n04.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n04'(suite) -> [];
'ibm-not-wf-P58-ibm58n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16102,12 +14890,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n05.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n05'(suite) -> [];
'ibm-not-wf-P58-ibm58n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16115,12 +14902,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n06.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n06'(suite) -> [];
'ibm-not-wf-P58-ibm58n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16128,12 +14914,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n07.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n07'(suite) -> [];
'ibm-not-wf-P58-ibm58n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16141,12 +14926,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n08.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n08'(suite) -> [];
'ibm-not-wf-P58-ibm58n08'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n08.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n08.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16159,12 +14943,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n01'(suite) -> [];
'ibm-not-wf-P59-ibm59n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16172,12 +14955,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n02'(suite) -> [];
'ibm-not-wf-P59-ibm59n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16185,12 +14967,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n03.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n03'(suite) -> [];
'ibm-not-wf-P59-ibm59n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16198,12 +14979,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n04.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n04'(suite) -> [];
'ibm-not-wf-P59-ibm59n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16211,12 +14991,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n05.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n05'(suite) -> [];
'ibm-not-wf-P59-ibm59n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16224,12 +15003,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n06.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n06'(suite) -> [];
'ibm-not-wf-P59-ibm59n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16242,12 +15020,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n01.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n01'(suite) -> [];
'ibm-not-wf-P60-ibm60n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16255,12 +15032,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n02.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n02'(suite) -> [];
'ibm-not-wf-P60-ibm60n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16268,12 +15044,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n03.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n03'(suite) -> [];
'ibm-not-wf-P60-ibm60n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16281,12 +15056,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n04.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n04'(suite) -> [];
'ibm-not-wf-P60-ibm60n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16294,12 +15068,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n05.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n05'(suite) -> [];
'ibm-not-wf-P60-ibm60n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16307,12 +15080,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n06.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n06'(suite) -> [];
'ibm-not-wf-P60-ibm60n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16320,12 +15092,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n07.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n07'(suite) -> [];
'ibm-not-wf-P60-ibm60n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16333,12 +15104,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n08.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n08'(suite) -> [];
'ibm-not-wf-P60-ibm60n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16351,12 +15121,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P61-ibm61n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P61-ibm61n01'(suite) -> [];
'ibm-not-wf-P61-ibm61n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P61/ibm61n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P61/ibm61n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16369,12 +15138,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n01'(suite) -> [];
'ibm-not-wf-P62-ibm62n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16382,12 +15150,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n02.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n02'(suite) -> [];
'ibm-not-wf-P62-ibm62n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16395,12 +15162,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n03.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n03'(suite) -> [];
'ibm-not-wf-P62-ibm62n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16408,12 +15174,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n04.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n04'(suite) -> [];
'ibm-not-wf-P62-ibm62n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16421,12 +15186,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n05.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n05'(suite) -> [];
'ibm-not-wf-P62-ibm62n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16434,12 +15198,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n06.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n06'(suite) -> [];
'ibm-not-wf-P62-ibm62n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16447,12 +15210,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n07.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n07'(suite) -> [];
'ibm-not-wf-P62-ibm62n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16460,12 +15222,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n08.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n08'(suite) -> [];
'ibm-not-wf-P62-ibm62n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16478,12 +15239,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n01'(suite) -> [];
'ibm-not-wf-P63-ibm63n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16491,12 +15251,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n02.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n02'(suite) -> [];
'ibm-not-wf-P63-ibm63n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16504,12 +15263,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n03.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n03'(suite) -> [];
'ibm-not-wf-P63-ibm63n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16517,12 +15275,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n04.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n04'(suite) -> [];
'ibm-not-wf-P63-ibm63n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16530,12 +15287,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n05.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n05'(suite) -> [];
'ibm-not-wf-P63-ibm63n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16543,12 +15299,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n06.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n06'(suite) -> [];
'ibm-not-wf-P63-ibm63n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16556,12 +15311,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n07.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n07'(suite) -> [];
'ibm-not-wf-P63-ibm63n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16574,12 +15328,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P64-ibm64n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P64-ibm64n01'(suite) -> [];
'ibm-not-wf-P64-ibm64n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16587,12 +15340,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P64-ibm64n02.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P64-ibm64n02'(suite) -> [];
'ibm-not-wf-P64-ibm64n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16600,12 +15352,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P64-ibm64n03.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P64-ibm64n03'(suite) -> [];
'ibm-not-wf-P64-ibm64n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16618,12 +15369,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P65-ibm65n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P65-ibm65n01'(suite) -> [];
'ibm-not-wf-P65-ibm65n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P65/ibm65n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P65/ibm65n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16631,12 +15381,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P65-ibm65n02.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P65-ibm65n02'(suite) -> [];
'ibm-not-wf-P65-ibm65n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P65/ibm65n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P65/ibm65n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16649,12 +15398,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n01.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n01'(suite) -> [];
'ibm-not-wf-P66-ibm66n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16662,12 +15410,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n02.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n02'(suite) -> [];
'ibm-not-wf-P66-ibm66n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16675,12 +15422,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n03.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n03'(suite) -> [];
'ibm-not-wf-P66-ibm66n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16688,12 +15434,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n04.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n04'(suite) -> [];
'ibm-not-wf-P66-ibm66n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16701,12 +15446,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n05.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n05'(suite) -> [];
'ibm-not-wf-P66-ibm66n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16714,12 +15458,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n06.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n06'(suite) -> [];
'ibm-not-wf-P66-ibm66n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16727,12 +15470,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n07.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n07'(suite) -> [];
'ibm-not-wf-P66-ibm66n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16740,12 +15482,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n08.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n08'(suite) -> [];
'ibm-not-wf-P66-ibm66n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16753,12 +15494,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n09.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n09'(suite) -> [];
'ibm-not-wf-P66-ibm66n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16766,12 +15506,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n10.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n10'(suite) -> [];
'ibm-not-wf-P66-ibm66n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16779,12 +15518,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n11.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n11'(suite) -> [];
'ibm-not-wf-P66-ibm66n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16792,12 +15530,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n12.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n12'(suite) -> [];
'ibm-not-wf-P66-ibm66n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16805,12 +15542,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n13.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n13'(suite) -> [];
'ibm-not-wf-P66-ibm66n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16818,12 +15554,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n14.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n14'(suite) -> [];
'ibm-not-wf-P66-ibm66n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16831,12 +15566,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n15.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n15'(suite) -> [];
'ibm-not-wf-P66-ibm66n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16849,12 +15583,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n01.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n01'(suite) -> [];
'ibm-not-wf-P68-ibm68n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16862,12 +15595,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n02.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n02'(suite) -> [];
'ibm-not-wf-P68-ibm68n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16875,12 +15607,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n03.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n03'(suite) -> [];
'ibm-not-wf-P68-ibm68n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16888,12 +15619,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n04.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n04'(suite) -> [];
'ibm-not-wf-P68-ibm68n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16901,12 +15631,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n05.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n05'(suite) -> [];
'ibm-not-wf-P68-ibm68n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16914,12 +15643,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n06.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n06'(suite) -> [];
'ibm-not-wf-P68-ibm68n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16927,12 +15655,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n07.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n07'(suite) -> [];
'ibm-not-wf-P68-ibm68n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16940,12 +15667,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n08.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n08'(suite) -> [];
'ibm-not-wf-P68-ibm68n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16953,12 +15679,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n09.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n09'(suite) -> [];
'ibm-not-wf-P68-ibm68n09'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n09.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n09.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16966,12 +15691,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n10.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n10'(suite) -> [];
'ibm-not-wf-P68-ibm68n10'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n10.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n10.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16984,12 +15708,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n01.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n01'(suite) -> [];
'ibm-not-wf-P69-ibm69n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16997,12 +15720,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n02.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n02'(suite) -> [];
'ibm-not-wf-P69-ibm69n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17010,12 +15732,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n03.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n03'(suite) -> [];
'ibm-not-wf-P69-ibm69n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17023,12 +15744,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n04.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n04'(suite) -> [];
'ibm-not-wf-P69-ibm69n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17036,12 +15756,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n05.xml
%% Type: error
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n05'(suite) -> [];
'ibm-not-wf-P69-ibm69n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -17049,12 +15768,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n06.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n06'(suite) -> [];
'ibm-not-wf-P69-ibm69n06'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17062,12 +15780,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n07.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n07'(suite) -> [];
'ibm-not-wf-P69-ibm69n07'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17080,12 +15797,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm70n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm70n01'(suite) -> [];
'ibm-not-wf-P71-ibm70n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm70n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm70n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17093,12 +15809,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n01'(suite) -> [];
'ibm-not-wf-P71-ibm71n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17106,12 +15821,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n02.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n02'(suite) -> [];
'ibm-not-wf-P71-ibm71n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17119,12 +15833,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n03.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n03'(suite) -> [];
'ibm-not-wf-P71-ibm71n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17132,12 +15845,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n04.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n04'(suite) -> [];
'ibm-not-wf-P71-ibm71n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17145,12 +15857,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n05.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n05'(suite) -> [];
'ibm-not-wf-P71-ibm71n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17158,12 +15869,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n06.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n06'(suite) -> [];
'ibm-not-wf-P71-ibm71n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17171,12 +15881,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n07.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n07'(suite) -> [];
'ibm-not-wf-P71-ibm71n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17184,12 +15893,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n08.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n08'(suite) -> [];
'ibm-not-wf-P71-ibm71n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17202,12 +15910,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n01'(suite) -> [];
'ibm-not-wf-P72-ibm72n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17215,12 +15922,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n02.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n02'(suite) -> [];
'ibm-not-wf-P72-ibm72n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17228,12 +15934,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n03.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n03'(suite) -> [];
'ibm-not-wf-P72-ibm72n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17241,12 +15946,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n04.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n04'(suite) -> [];
'ibm-not-wf-P72-ibm72n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17254,12 +15958,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n05.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n05'(suite) -> [];
'ibm-not-wf-P72-ibm72n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17267,12 +15970,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n06.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n06'(suite) -> [];
'ibm-not-wf-P72-ibm72n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17280,12 +15982,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n07.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n07'(suite) -> [];
'ibm-not-wf-P72-ibm72n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17293,12 +15994,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n08.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n08'(suite) -> [];
'ibm-not-wf-P72-ibm72n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17306,12 +16006,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n09.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n09'(suite) -> [];
'ibm-not-wf-P72-ibm72n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17324,12 +16023,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P73-ibm73n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P73-ibm73n01'(suite) -> [];
'ibm-not-wf-P73-ibm73n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P73/ibm73n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P73/ibm73n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17337,12 +16035,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P73-ibm73n03.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P73-ibm73n03'(suite) -> [];
'ibm-not-wf-P73-ibm73n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P73/ibm73n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P73/ibm73n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17355,12 +16052,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P74-ibm74n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P74-ibm74n01'(suite) -> [];
'ibm-not-wf-P74-ibm74n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P74/ibm74n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P74/ibm74n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17373,12 +16069,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n01.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n01'(suite) -> [];
'ibm-not-wf-P75-ibm75n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17386,12 +16081,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n02.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n02'(suite) -> [];
'ibm-not-wf-P75-ibm75n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17399,12 +16093,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n03.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n03'(suite) -> [];
'ibm-not-wf-P75-ibm75n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17412,12 +16105,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n04.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n04'(suite) -> [];
'ibm-not-wf-P75-ibm75n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17425,12 +16117,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n05.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n05'(suite) -> [];
'ibm-not-wf-P75-ibm75n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17438,12 +16129,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n06.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n06'(suite) -> [];
'ibm-not-wf-P75-ibm75n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17451,12 +16141,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n07.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n07'(suite) -> [];
'ibm-not-wf-P75-ibm75n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17464,12 +16153,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n08.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n08'(suite) -> [];
'ibm-not-wf-P75-ibm75n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17477,12 +16165,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n09.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n09'(suite) -> [];
'ibm-not-wf-P75-ibm75n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17490,12 +16177,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n10.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n10'(suite) -> [];
'ibm-not-wf-P75-ibm75n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17503,12 +16189,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n11.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n11'(suite) -> [];
'ibm-not-wf-P75-ibm75n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17516,12 +16201,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n12.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n12'(suite) -> [];
'ibm-not-wf-P75-ibm75n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17529,12 +16213,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n13.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n13'(suite) -> [];
'ibm-not-wf-P75-ibm75n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17547,12 +16230,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n01.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n01'(suite) -> [];
'ibm-not-wf-P76-ibm76n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17560,12 +16242,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n02.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n02'(suite) -> [];
'ibm-not-wf-P76-ibm76n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17573,12 +16254,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n03.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n03'(suite) -> [];
'ibm-not-wf-P76-ibm76n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17586,12 +16266,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n04.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n04'(suite) -> [];
'ibm-not-wf-P76-ibm76n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17599,12 +16278,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n05.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n05'(suite) -> [];
'ibm-not-wf-P76-ibm76n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17612,12 +16290,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n06.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n06'(suite) -> [];
'ibm-not-wf-P76-ibm76n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17625,12 +16302,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n07.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n07'(suite) -> [];
'ibm-not-wf-P76-ibm76n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17643,12 +16319,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P77-ibm77n01.xml
%% Type: not-wf
%% Sections: 4.3.1
-'ibm-not-wf-P77-ibm77n01'(suite) -> [];
'ibm-not-wf-P77-ibm77n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17656,12 +16331,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P77-ibm77n02.xml
%% Type: not-wf
%% Sections: 4.3.1
-'ibm-not-wf-P77-ibm77n02'(suite) -> [];
'ibm-not-wf-P77-ibm77n02'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n02.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n02.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17669,12 +16343,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P77-ibm77n03.xml
%% Type: not-wf
%% Sections: 4.3.1
-'ibm-not-wf-P77-ibm77n03'(suite) -> [];
'ibm-not-wf-P77-ibm77n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17682,12 +16355,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P77-ibm77n04.xml
%% Type: not-wf
%% Sections: 4.3.1
-'ibm-not-wf-P77-ibm77n04'(suite) -> [];
'ibm-not-wf-P77-ibm77n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17700,12 +16372,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P78-ibm78n01.xml
%% Type: not-wf
%% Sections: 4.3.2
-'ibm-not-wf-P78-ibm78n01'(suite) -> [];
'ibm-not-wf-P78-ibm78n01'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P78/ibm78n01.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P78/ibm78n01.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17713,12 +16384,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P78-ibm78n02.xml
%% Type: not-wf
%% Sections: 4.3.2
-'ibm-not-wf-P78-ibm78n02'(suite) -> [];
'ibm-not-wf-P78-ibm78n02'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P78/ibm78n02.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P78/ibm78n02.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17731,12 +16401,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P79-ibm79n01.xml
%% Type: not-wf
%% Sections: 4.3.2
-'ibm-not-wf-P79-ibm79n01'(suite) -> [];
'ibm-not-wf-P79-ibm79n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P79/ibm79n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P79/ibm79n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17744,12 +16413,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P79-ibm79n02.xml
%% Type: not-wf
%% Sections: 4.3.2
-'ibm-not-wf-P79-ibm79n02'(suite) -> [];
'ibm-not-wf-P79-ibm79n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P79/ibm79n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P79/ibm79n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17762,12 +16430,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n01.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n01'(suite) -> [];
'ibm-not-wf-P80-ibm80n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17775,12 +16442,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n02.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n02'(suite) -> [];
'ibm-not-wf-P80-ibm80n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17788,12 +16454,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n03.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n03'(suite) -> [];
'ibm-not-wf-P80-ibm80n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17801,12 +16466,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n04.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n04'(suite) -> [];
'ibm-not-wf-P80-ibm80n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17814,12 +16478,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n05.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n05'(suite) -> [];
'ibm-not-wf-P80-ibm80n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17827,12 +16490,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n06.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n06'(suite) -> [];
'ibm-not-wf-P80-ibm80n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17845,12 +16507,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n01.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n01'(suite) -> [];
'ibm-not-wf-P81-ibm81n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17858,12 +16519,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n02.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n02'(suite) -> [];
'ibm-not-wf-P81-ibm81n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17871,12 +16531,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n03.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n03'(suite) -> [];
'ibm-not-wf-P81-ibm81n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17884,12 +16543,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n04.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n04'(suite) -> [];
'ibm-not-wf-P81-ibm81n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17897,12 +16555,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n05.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n05'(suite) -> [];
'ibm-not-wf-P81-ibm81n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17910,12 +16567,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n06.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n06'(suite) -> [];
'ibm-not-wf-P81-ibm81n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17923,12 +16579,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n07.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n07'(suite) -> [];
'ibm-not-wf-P81-ibm81n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17936,12 +16591,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n08.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n08'(suite) -> [];
'ibm-not-wf-P81-ibm81n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17949,12 +16603,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n09.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n09'(suite) -> [];
'ibm-not-wf-P81-ibm81n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17967,12 +16620,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n01.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n01'(suite) -> [];
'ibm-not-wf-P82-ibm82n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17980,12 +16632,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n02.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n02'(suite) -> [];
'ibm-not-wf-P82-ibm82n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17993,12 +16644,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n03.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n03'(suite) -> [];
'ibm-not-wf-P82-ibm82n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18006,12 +16656,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n04.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n04'(suite) -> [];
'ibm-not-wf-P82-ibm82n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18019,12 +16668,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n05.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n05'(suite) -> [];
'ibm-not-wf-P82-ibm82n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18032,12 +16680,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n06.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n06'(suite) -> [];
'ibm-not-wf-P82-ibm82n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18045,12 +16692,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n07.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n07'(suite) -> [];
'ibm-not-wf-P82-ibm82n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18058,12 +16704,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n08.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n08'(suite) -> [];
'ibm-not-wf-P82-ibm82n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -18076,12 +16721,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n01.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n01'(suite) -> [];
'ibm-not-wf-P83-ibm83n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18089,12 +16733,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n02.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n02'(suite) -> [];
'ibm-not-wf-P83-ibm83n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18102,12 +16745,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n03.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n03'(suite) -> [];
'ibm-not-wf-P83-ibm83n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18115,12 +16757,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n04.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n04'(suite) -> [];
'ibm-not-wf-P83-ibm83n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18128,12 +16769,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n05.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n05'(suite) -> [];
'ibm-not-wf-P83-ibm83n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18141,12 +16781,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n06.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n06'(suite) -> [];
'ibm-not-wf-P83-ibm83n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -18159,12 +16798,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n01'(suite) -> [];
'ibm-not-wf-P85-ibm85n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18172,12 +16810,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n02'(suite) -> [];
'ibm-not-wf-P85-ibm85n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18185,12 +16822,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n03'(suite) -> [];
'ibm-not-wf-P85-ibm85n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18198,12 +16834,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n04'(suite) -> [];
'ibm-not-wf-P85-ibm85n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18211,12 +16846,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n05.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n05'(suite) -> [];
'ibm-not-wf-P85-ibm85n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18224,12 +16858,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n06.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n06'(suite) -> [];
'ibm-not-wf-P85-ibm85n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18237,12 +16870,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n07.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n07'(suite) -> [];
'ibm-not-wf-P85-ibm85n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18250,12 +16882,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n08.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n08'(suite) -> [];
'ibm-not-wf-P85-ibm85n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18263,12 +16894,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n09.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n09'(suite) -> [];
'ibm-not-wf-P85-ibm85n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18276,12 +16906,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n10.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n10'(suite) -> [];
'ibm-not-wf-P85-ibm85n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18289,12 +16918,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n100.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n100'(suite) -> [];
'ibm-not-wf-P85-ibm85n100'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n100.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n100.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18302,12 +16930,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n101.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n101'(suite) -> [];
'ibm-not-wf-P85-ibm85n101'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n101.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n101.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18315,12 +16942,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n102.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n102'(suite) -> [];
'ibm-not-wf-P85-ibm85n102'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n102.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n102.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18328,12 +16954,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n103.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n103'(suite) -> [];
'ibm-not-wf-P85-ibm85n103'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n103.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n103.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18341,12 +16966,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n104.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n104'(suite) -> [];
'ibm-not-wf-P85-ibm85n104'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n104.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n104.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18354,12 +16978,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n105.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n105'(suite) -> [];
'ibm-not-wf-P85-ibm85n105'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n105.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n105.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18367,12 +16990,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n106.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n106'(suite) -> [];
'ibm-not-wf-P85-ibm85n106'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n106.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n106.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18380,12 +17002,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n107.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n107'(suite) -> [];
'ibm-not-wf-P85-ibm85n107'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n107.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n107.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18393,12 +17014,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n108.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n108'(suite) -> [];
'ibm-not-wf-P85-ibm85n108'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n108.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n108.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18406,12 +17026,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n109.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n109'(suite) -> [];
'ibm-not-wf-P85-ibm85n109'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n109.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n109.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18419,12 +17038,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n11.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n11'(suite) -> [];
'ibm-not-wf-P85-ibm85n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18432,12 +17050,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n110.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n110'(suite) -> [];
'ibm-not-wf-P85-ibm85n110'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n110.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n110.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18445,12 +17062,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n111.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n111'(suite) -> [];
'ibm-not-wf-P85-ibm85n111'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n111.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n111.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18458,12 +17074,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n112.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n112'(suite) -> [];
'ibm-not-wf-P85-ibm85n112'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n112.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n112.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18471,12 +17086,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n113.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n113'(suite) -> [];
'ibm-not-wf-P85-ibm85n113'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n113.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n113.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18484,12 +17098,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n114.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n114'(suite) -> [];
'ibm-not-wf-P85-ibm85n114'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n114.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n114.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18497,12 +17110,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n115.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n115'(suite) -> [];
'ibm-not-wf-P85-ibm85n115'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n115.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n115.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18510,12 +17122,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n116.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n116'(suite) -> [];
'ibm-not-wf-P85-ibm85n116'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n116.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n116.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18523,12 +17134,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n117.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n117'(suite) -> [];
'ibm-not-wf-P85-ibm85n117'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n117.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n117.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18536,12 +17146,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n118.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n118'(suite) -> [];
'ibm-not-wf-P85-ibm85n118'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n118.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n118.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18549,12 +17158,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n119.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n119'(suite) -> [];
'ibm-not-wf-P85-ibm85n119'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n119.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n119.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18562,12 +17170,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n12.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n12'(suite) -> [];
'ibm-not-wf-P85-ibm85n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18575,12 +17182,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n120.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n120'(suite) -> [];
'ibm-not-wf-P85-ibm85n120'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n120.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n120.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18588,12 +17194,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n121.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n121'(suite) -> [];
'ibm-not-wf-P85-ibm85n121'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n121.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n121.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18601,12 +17206,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n122.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n122'(suite) -> [];
'ibm-not-wf-P85-ibm85n122'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n122.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n122.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18614,12 +17218,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n123.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n123'(suite) -> [];
'ibm-not-wf-P85-ibm85n123'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n123.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n123.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18627,12 +17230,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n124.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n124'(suite) -> [];
'ibm-not-wf-P85-ibm85n124'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n124.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n124.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18640,12 +17242,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n125.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n125'(suite) -> [];
'ibm-not-wf-P85-ibm85n125'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n125.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n125.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18653,12 +17254,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n126.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n126'(suite) -> [];
'ibm-not-wf-P85-ibm85n126'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n126.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n126.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18666,12 +17266,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n127.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n127'(suite) -> [];
'ibm-not-wf-P85-ibm85n127'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n127.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n127.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18679,12 +17278,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n128.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n128'(suite) -> [];
'ibm-not-wf-P85-ibm85n128'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n128.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n128.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18692,12 +17290,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n129.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n129'(suite) -> [];
'ibm-not-wf-P85-ibm85n129'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n129.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n129.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18705,12 +17302,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n13.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n13'(suite) -> [];
'ibm-not-wf-P85-ibm85n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18718,12 +17314,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n130.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n130'(suite) -> [];
'ibm-not-wf-P85-ibm85n130'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n130.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n130.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18731,12 +17326,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n131.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n131'(suite) -> [];
'ibm-not-wf-P85-ibm85n131'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n131.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n131.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18744,12 +17338,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n132.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n132'(suite) -> [];
'ibm-not-wf-P85-ibm85n132'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n132.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n132.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18757,12 +17350,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n133.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n133'(suite) -> [];
'ibm-not-wf-P85-ibm85n133'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n133.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n133.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18770,12 +17362,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n134.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n134'(suite) -> [];
'ibm-not-wf-P85-ibm85n134'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n134.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n134.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18783,12 +17374,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n135.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n135'(suite) -> [];
'ibm-not-wf-P85-ibm85n135'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n135.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n135.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18796,12 +17386,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n136.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n136'(suite) -> [];
'ibm-not-wf-P85-ibm85n136'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n136.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n136.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18809,12 +17398,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n137.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n137'(suite) -> [];
'ibm-not-wf-P85-ibm85n137'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n137.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n137.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18822,12 +17410,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n138.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n138'(suite) -> [];
'ibm-not-wf-P85-ibm85n138'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n138.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n138.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18835,12 +17422,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n139.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n139'(suite) -> [];
'ibm-not-wf-P85-ibm85n139'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n139.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n139.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18848,12 +17434,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n14.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n14'(suite) -> [];
'ibm-not-wf-P85-ibm85n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18861,12 +17446,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n140.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n140'(suite) -> [];
'ibm-not-wf-P85-ibm85n140'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n140.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n140.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18874,12 +17458,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n141.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n141'(suite) -> [];
'ibm-not-wf-P85-ibm85n141'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n141.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n141.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18887,12 +17470,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n142.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n142'(suite) -> [];
'ibm-not-wf-P85-ibm85n142'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n142.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n142.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18900,12 +17482,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n143.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n143'(suite) -> [];
'ibm-not-wf-P85-ibm85n143'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n143.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n143.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18913,12 +17494,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n144.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n144'(suite) -> [];
'ibm-not-wf-P85-ibm85n144'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n144.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n144.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18926,12 +17506,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n145.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n145'(suite) -> [];
'ibm-not-wf-P85-ibm85n145'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n145.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n145.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18939,12 +17518,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n146.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n146'(suite) -> [];
'ibm-not-wf-P85-ibm85n146'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n146.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n146.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18952,12 +17530,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n147.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n147'(suite) -> [];
'ibm-not-wf-P85-ibm85n147'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n147.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n147.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18965,12 +17542,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n148.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n148'(suite) -> [];
'ibm-not-wf-P85-ibm85n148'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n148.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n148.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18978,12 +17554,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n149.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n149'(suite) -> [];
'ibm-not-wf-P85-ibm85n149'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n149.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n149.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18991,12 +17566,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n15.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n15'(suite) -> [];
'ibm-not-wf-P85-ibm85n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19004,12 +17578,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n150.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n150'(suite) -> [];
'ibm-not-wf-P85-ibm85n150'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n150.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n150.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19017,12 +17590,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n151.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n151'(suite) -> [];
'ibm-not-wf-P85-ibm85n151'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n151.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n151.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19030,12 +17602,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n152.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n152'(suite) -> [];
'ibm-not-wf-P85-ibm85n152'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n152.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n152.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19043,12 +17614,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n153.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n153'(suite) -> [];
'ibm-not-wf-P85-ibm85n153'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n153.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n153.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19056,12 +17626,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n154.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n154'(suite) -> [];
'ibm-not-wf-P85-ibm85n154'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n154.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n154.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19069,12 +17638,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n155.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n155'(suite) -> [];
'ibm-not-wf-P85-ibm85n155'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n155.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n155.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19082,12 +17650,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n156.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n156'(suite) -> [];
'ibm-not-wf-P85-ibm85n156'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n156.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n156.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19095,12 +17662,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n157.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n157'(suite) -> [];
'ibm-not-wf-P85-ibm85n157'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n157.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n157.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19108,12 +17674,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n158.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n158'(suite) -> [];
'ibm-not-wf-P85-ibm85n158'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n158.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n158.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19121,12 +17686,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n159.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n159'(suite) -> [];
'ibm-not-wf-P85-ibm85n159'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n159.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n159.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19134,12 +17698,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n16.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n16'(suite) -> [];
'ibm-not-wf-P85-ibm85n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19147,12 +17710,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n160.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n160'(suite) -> [];
'ibm-not-wf-P85-ibm85n160'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n160.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n160.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19160,12 +17722,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n161.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n161'(suite) -> [];
'ibm-not-wf-P85-ibm85n161'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n161.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n161.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19173,12 +17734,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n162.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n162'(suite) -> [];
'ibm-not-wf-P85-ibm85n162'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n162.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n162.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19186,12 +17746,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n163.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n163'(suite) -> [];
'ibm-not-wf-P85-ibm85n163'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n163.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n163.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19199,12 +17758,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n164.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n164'(suite) -> [];
'ibm-not-wf-P85-ibm85n164'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n164.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n164.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19212,12 +17770,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n165.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n165'(suite) -> [];
'ibm-not-wf-P85-ibm85n165'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n165.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n165.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19225,12 +17782,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n166.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n166'(suite) -> [];
'ibm-not-wf-P85-ibm85n166'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n166.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n166.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19238,12 +17794,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n167.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n167'(suite) -> [];
'ibm-not-wf-P85-ibm85n167'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n167.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n167.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19251,12 +17806,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n168.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n168'(suite) -> [];
'ibm-not-wf-P85-ibm85n168'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n168.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n168.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19264,12 +17818,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n169.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n169'(suite) -> [];
'ibm-not-wf-P85-ibm85n169'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n169.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n169.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19277,12 +17830,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n17.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n17'(suite) -> [];
'ibm-not-wf-P85-ibm85n17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19290,12 +17842,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n170.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n170'(suite) -> [];
'ibm-not-wf-P85-ibm85n170'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n170.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n170.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19303,12 +17854,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n171.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n171'(suite) -> [];
'ibm-not-wf-P85-ibm85n171'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n171.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n171.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19316,12 +17866,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n172.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n172'(suite) -> [];
'ibm-not-wf-P85-ibm85n172'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n172.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n172.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19329,12 +17878,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n173.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n173'(suite) -> [];
'ibm-not-wf-P85-ibm85n173'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n173.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n173.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19342,12 +17890,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n174.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n174'(suite) -> [];
'ibm-not-wf-P85-ibm85n174'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n174.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n174.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19355,12 +17902,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n175.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n175'(suite) -> [];
'ibm-not-wf-P85-ibm85n175'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n175.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n175.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19368,12 +17914,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n176.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n176'(suite) -> [];
'ibm-not-wf-P85-ibm85n176'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n176.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n176.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19381,12 +17926,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n177.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n177'(suite) -> [];
'ibm-not-wf-P85-ibm85n177'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n177.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n177.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19394,12 +17938,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n178.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n178'(suite) -> [];
'ibm-not-wf-P85-ibm85n178'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n178.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n178.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19407,12 +17950,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n179.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n179'(suite) -> [];
'ibm-not-wf-P85-ibm85n179'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n179.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n179.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19420,12 +17962,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n18.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n18'(suite) -> [];
'ibm-not-wf-P85-ibm85n18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19433,12 +17974,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n180.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n180'(suite) -> [];
'ibm-not-wf-P85-ibm85n180'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n180.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n180.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19446,12 +17986,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n181.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n181'(suite) -> [];
'ibm-not-wf-P85-ibm85n181'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n181.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n181.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19459,12 +17998,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n182.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n182'(suite) -> [];
'ibm-not-wf-P85-ibm85n182'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n182.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n182.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19472,12 +18010,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n183.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n183'(suite) -> [];
'ibm-not-wf-P85-ibm85n183'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n183.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n183.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19485,12 +18022,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n184.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n184'(suite) -> [];
'ibm-not-wf-P85-ibm85n184'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n184.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n184.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19498,12 +18034,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n185.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n185'(suite) -> [];
'ibm-not-wf-P85-ibm85n185'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n185.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n185.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19511,12 +18046,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n186.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n186'(suite) -> [];
'ibm-not-wf-P85-ibm85n186'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n186.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n186.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19524,12 +18058,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n187.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n187'(suite) -> [];
'ibm-not-wf-P85-ibm85n187'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n187.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n187.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19537,12 +18070,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n188.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n188'(suite) -> [];
'ibm-not-wf-P85-ibm85n188'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n188.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n188.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19550,12 +18082,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n189.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n189'(suite) -> [];
'ibm-not-wf-P85-ibm85n189'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n189.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n189.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19563,12 +18094,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n19.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n19'(suite) -> [];
'ibm-not-wf-P85-ibm85n19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19576,12 +18106,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n190.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n190'(suite) -> [];
'ibm-not-wf-P85-ibm85n190'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n190.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n190.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19589,12 +18118,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n191.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n191'(suite) -> [];
'ibm-not-wf-P85-ibm85n191'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n191.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n191.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19602,12 +18130,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n192.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n192'(suite) -> [];
'ibm-not-wf-P85-ibm85n192'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n192.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n192.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19615,12 +18142,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n193.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n193'(suite) -> [];
'ibm-not-wf-P85-ibm85n193'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n193.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n193.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19628,12 +18154,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n194.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n194'(suite) -> [];
'ibm-not-wf-P85-ibm85n194'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n194.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n194.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19641,12 +18166,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n195.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n195'(suite) -> [];
'ibm-not-wf-P85-ibm85n195'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n195.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n195.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19654,12 +18178,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n196.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n196'(suite) -> [];
'ibm-not-wf-P85-ibm85n196'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n196.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n196.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19667,12 +18190,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n197.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n197'(suite) -> [];
'ibm-not-wf-P85-ibm85n197'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n197.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n197.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19680,12 +18202,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n198.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n198'(suite) -> [];
'ibm-not-wf-P85-ibm85n198'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n198.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n198.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19693,12 +18214,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n20.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n20'(suite) -> [];
'ibm-not-wf-P85-ibm85n20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19706,12 +18226,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n21.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n21'(suite) -> [];
'ibm-not-wf-P85-ibm85n21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19719,12 +18238,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n22.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n22'(suite) -> [];
'ibm-not-wf-P85-ibm85n22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19732,12 +18250,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n23.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n23'(suite) -> [];
'ibm-not-wf-P85-ibm85n23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19745,12 +18262,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n24.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n24'(suite) -> [];
'ibm-not-wf-P85-ibm85n24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19758,12 +18274,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n25.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n25'(suite) -> [];
'ibm-not-wf-P85-ibm85n25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19771,12 +18286,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n26.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n26'(suite) -> [];
'ibm-not-wf-P85-ibm85n26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19784,12 +18298,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n27.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n27'(suite) -> [];
'ibm-not-wf-P85-ibm85n27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19797,12 +18310,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n28.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n28'(suite) -> [];
'ibm-not-wf-P85-ibm85n28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19810,12 +18322,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n29.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n29'(suite) -> [];
'ibm-not-wf-P85-ibm85n29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19823,12 +18334,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n30.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n30'(suite) -> [];
'ibm-not-wf-P85-ibm85n30'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n30.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n30.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19836,12 +18346,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n31.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n31'(suite) -> [];
'ibm-not-wf-P85-ibm85n31'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n31.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n31.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19849,12 +18358,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n32.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n32'(suite) -> [];
'ibm-not-wf-P85-ibm85n32'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n32.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n32.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19862,12 +18370,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n33.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n33'(suite) -> [];
'ibm-not-wf-P85-ibm85n33'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n33.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n33.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19875,12 +18382,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n34.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n34'(suite) -> [];
'ibm-not-wf-P85-ibm85n34'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n34.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n34.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19888,12 +18394,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n35.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n35'(suite) -> [];
'ibm-not-wf-P85-ibm85n35'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n35.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n35.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19901,12 +18406,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n36.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n36'(suite) -> [];
'ibm-not-wf-P85-ibm85n36'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n36.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n36.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19914,12 +18418,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n37.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n37'(suite) -> [];
'ibm-not-wf-P85-ibm85n37'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n37.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n37.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19927,12 +18430,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n38.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n38'(suite) -> [];
'ibm-not-wf-P85-ibm85n38'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n38.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n38.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19940,12 +18442,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n39.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n39'(suite) -> [];
'ibm-not-wf-P85-ibm85n39'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n39.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n39.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19953,12 +18454,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n40.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n40'(suite) -> [];
'ibm-not-wf-P85-ibm85n40'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n40.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n40.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19966,12 +18466,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n41.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n41'(suite) -> [];
'ibm-not-wf-P85-ibm85n41'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n41.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n41.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19979,12 +18478,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n42.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n42'(suite) -> [];
'ibm-not-wf-P85-ibm85n42'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n42.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n42.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19992,12 +18490,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n43.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n43'(suite) -> [];
'ibm-not-wf-P85-ibm85n43'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n43.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n43.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20005,12 +18502,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n44.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n44'(suite) -> [];
'ibm-not-wf-P85-ibm85n44'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n44.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n44.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20018,12 +18514,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n45.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n45'(suite) -> [];
'ibm-not-wf-P85-ibm85n45'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n45.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n45.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20031,12 +18526,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n46.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n46'(suite) -> [];
'ibm-not-wf-P85-ibm85n46'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n46.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n46.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20044,12 +18538,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n47.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n47'(suite) -> [];
'ibm-not-wf-P85-ibm85n47'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n47.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n47.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20057,12 +18550,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n48.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n48'(suite) -> [];
'ibm-not-wf-P85-ibm85n48'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n48.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n48.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20070,12 +18562,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n49.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n49'(suite) -> [];
'ibm-not-wf-P85-ibm85n49'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n49.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n49.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20083,12 +18574,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n50.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n50'(suite) -> [];
'ibm-not-wf-P85-ibm85n50'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n50.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n50.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20096,12 +18586,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n51.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n51'(suite) -> [];
'ibm-not-wf-P85-ibm85n51'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n51.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n51.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20109,12 +18598,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n52.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n52'(suite) -> [];
'ibm-not-wf-P85-ibm85n52'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n52.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n52.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20122,12 +18610,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n53.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n53'(suite) -> [];
'ibm-not-wf-P85-ibm85n53'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n53.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n53.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20135,12 +18622,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n54.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n54'(suite) -> [];
'ibm-not-wf-P85-ibm85n54'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n54.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n54.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20148,12 +18634,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n55.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n55'(suite) -> [];
'ibm-not-wf-P85-ibm85n55'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n55.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n55.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20161,12 +18646,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n56.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n56'(suite) -> [];
'ibm-not-wf-P85-ibm85n56'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n56.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n56.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20174,12 +18658,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n57.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n57'(suite) -> [];
'ibm-not-wf-P85-ibm85n57'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n57.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n57.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20187,12 +18670,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n58.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n58'(suite) -> [];
'ibm-not-wf-P85-ibm85n58'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n58.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n58.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20200,12 +18682,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n59.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n59'(suite) -> [];
'ibm-not-wf-P85-ibm85n59'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n59.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n59.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20213,12 +18694,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n60.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n60'(suite) -> [];
'ibm-not-wf-P85-ibm85n60'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n60.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n60.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20226,12 +18706,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n61.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n61'(suite) -> [];
'ibm-not-wf-P85-ibm85n61'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n61.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n61.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20239,12 +18718,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n62.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n62'(suite) -> [];
'ibm-not-wf-P85-ibm85n62'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n62.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n62.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20252,12 +18730,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n63.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n63'(suite) -> [];
'ibm-not-wf-P85-ibm85n63'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n63.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n63.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20265,12 +18742,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n64.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n64'(suite) -> [];
'ibm-not-wf-P85-ibm85n64'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n64.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n64.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20278,12 +18754,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n65.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n65'(suite) -> [];
'ibm-not-wf-P85-ibm85n65'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n65.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n65.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20291,12 +18766,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n66.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n66'(suite) -> [];
'ibm-not-wf-P85-ibm85n66'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n66.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n66.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20304,12 +18778,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n67.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n67'(suite) -> [];
'ibm-not-wf-P85-ibm85n67'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n67.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n67.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20317,12 +18790,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n68.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n68'(suite) -> [];
'ibm-not-wf-P85-ibm85n68'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n68.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n68.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20330,12 +18802,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n69.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n69'(suite) -> [];
'ibm-not-wf-P85-ibm85n69'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n69.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n69.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20343,12 +18814,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n70.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n70'(suite) -> [];
'ibm-not-wf-P85-ibm85n70'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n70.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n70.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20356,12 +18826,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n71.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n71'(suite) -> [];
'ibm-not-wf-P85-ibm85n71'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n71.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n71.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20369,12 +18838,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n72.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n72'(suite) -> [];
'ibm-not-wf-P85-ibm85n72'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n72.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n72.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20382,12 +18850,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n73.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n73'(suite) -> [];
'ibm-not-wf-P85-ibm85n73'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n73.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n73.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20395,12 +18862,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n74.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n74'(suite) -> [];
'ibm-not-wf-P85-ibm85n74'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n74.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n74.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20408,12 +18874,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n75.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n75'(suite) -> [];
'ibm-not-wf-P85-ibm85n75'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n75.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n75.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20421,12 +18886,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n76.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n76'(suite) -> [];
'ibm-not-wf-P85-ibm85n76'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n76.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n76.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20434,12 +18898,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n77.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n77'(suite) -> [];
'ibm-not-wf-P85-ibm85n77'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n77.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n77.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20447,12 +18910,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n78.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n78'(suite) -> [];
'ibm-not-wf-P85-ibm85n78'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n78.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n78.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20460,12 +18922,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n79.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n79'(suite) -> [];
'ibm-not-wf-P85-ibm85n79'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n79.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n79.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20473,12 +18934,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n80.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n80'(suite) -> [];
'ibm-not-wf-P85-ibm85n80'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n80.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n80.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20486,12 +18946,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n81.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n81'(suite) -> [];
'ibm-not-wf-P85-ibm85n81'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n81.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n81.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20499,12 +18958,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n82.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n82'(suite) -> [];
'ibm-not-wf-P85-ibm85n82'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n82.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n82.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20512,12 +18970,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n83.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n83'(suite) -> [];
'ibm-not-wf-P85-ibm85n83'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n83.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n83.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20525,12 +18982,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n84.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n84'(suite) -> [];
'ibm-not-wf-P85-ibm85n84'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n84.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n84.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20538,12 +18994,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n85.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n85'(suite) -> [];
'ibm-not-wf-P85-ibm85n85'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n85.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n85.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20551,12 +19006,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n86.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n86'(suite) -> [];
'ibm-not-wf-P85-ibm85n86'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n86.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n86.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20564,12 +19018,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n87.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n87'(suite) -> [];
'ibm-not-wf-P85-ibm85n87'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n87.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n87.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20577,12 +19030,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n88.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n88'(suite) -> [];
'ibm-not-wf-P85-ibm85n88'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n88.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n88.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20590,12 +19042,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n89.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n89'(suite) -> [];
'ibm-not-wf-P85-ibm85n89'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n89.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n89.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20603,12 +19054,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n90.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n90'(suite) -> [];
'ibm-not-wf-P85-ibm85n90'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n90.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n90.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20616,12 +19066,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n91.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n91'(suite) -> [];
'ibm-not-wf-P85-ibm85n91'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n91.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n91.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20629,12 +19078,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n92.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n92'(suite) -> [];
'ibm-not-wf-P85-ibm85n92'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n92.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n92.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20642,12 +19090,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n93.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n93'(suite) -> [];
'ibm-not-wf-P85-ibm85n93'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n93.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n93.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20655,12 +19102,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n94.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n94'(suite) -> [];
'ibm-not-wf-P85-ibm85n94'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n94.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n94.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20668,12 +19114,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n95.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n95'(suite) -> [];
'ibm-not-wf-P85-ibm85n95'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n95.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n95.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20681,12 +19126,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n96.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n96'(suite) -> [];
'ibm-not-wf-P85-ibm85n96'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n96.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n96.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20694,12 +19138,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n97.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n97'(suite) -> [];
'ibm-not-wf-P85-ibm85n97'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n97.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n97.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20707,12 +19150,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n98.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n98'(suite) -> [];
'ibm-not-wf-P85-ibm85n98'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n98.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n98.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20720,12 +19162,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n99.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n99'(suite) -> [];
'ibm-not-wf-P85-ibm85n99'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n99.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n99.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -20738,12 +19179,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P86-ibm86n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P86-ibm86n01'(suite) -> [];
'ibm-not-wf-P86-ibm86n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20751,12 +19191,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P86-ibm86n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P86-ibm86n02'(suite) -> [];
'ibm-not-wf-P86-ibm86n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20764,12 +19203,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P86-ibm86n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P86-ibm86n03'(suite) -> [];
'ibm-not-wf-P86-ibm86n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20777,12 +19215,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P86-ibm86n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P86-ibm86n04'(suite) -> [];
'ibm-not-wf-P86-ibm86n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -20795,12 +19232,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n01'(suite) -> [];
'ibm-not-wf-P87-ibm87n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20808,12 +19244,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n02'(suite) -> [];
'ibm-not-wf-P87-ibm87n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20821,12 +19256,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n03'(suite) -> [];
'ibm-not-wf-P87-ibm87n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20834,12 +19268,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n04'(suite) -> [];
'ibm-not-wf-P87-ibm87n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20847,12 +19280,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n05.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n05'(suite) -> [];
'ibm-not-wf-P87-ibm87n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20860,12 +19292,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n06.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n06'(suite) -> [];
'ibm-not-wf-P87-ibm87n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20873,12 +19304,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n07.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n07'(suite) -> [];
'ibm-not-wf-P87-ibm87n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20886,12 +19316,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n08.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n08'(suite) -> [];
'ibm-not-wf-P87-ibm87n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20899,12 +19328,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n09.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n09'(suite) -> [];
'ibm-not-wf-P87-ibm87n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20912,12 +19340,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n10.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n10'(suite) -> [];
'ibm-not-wf-P87-ibm87n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20925,12 +19352,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n11.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n11'(suite) -> [];
'ibm-not-wf-P87-ibm87n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20938,12 +19364,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n12.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n12'(suite) -> [];
'ibm-not-wf-P87-ibm87n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20951,12 +19376,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n13.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n13'(suite) -> [];
'ibm-not-wf-P87-ibm87n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20964,12 +19388,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n14.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n14'(suite) -> [];
'ibm-not-wf-P87-ibm87n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20977,12 +19400,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n15.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n15'(suite) -> [];
'ibm-not-wf-P87-ibm87n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20990,12 +19412,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n16.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n16'(suite) -> [];
'ibm-not-wf-P87-ibm87n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21003,12 +19424,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n17.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n17'(suite) -> [];
'ibm-not-wf-P87-ibm87n17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21016,12 +19436,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n18.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n18'(suite) -> [];
'ibm-not-wf-P87-ibm87n18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21029,12 +19448,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n19.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n19'(suite) -> [];
'ibm-not-wf-P87-ibm87n19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21042,12 +19460,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n20.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n20'(suite) -> [];
'ibm-not-wf-P87-ibm87n20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21055,12 +19472,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n21.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n21'(suite) -> [];
'ibm-not-wf-P87-ibm87n21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21068,12 +19484,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n22.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n22'(suite) -> [];
'ibm-not-wf-P87-ibm87n22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21081,12 +19496,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n23.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n23'(suite) -> [];
'ibm-not-wf-P87-ibm87n23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21094,12 +19508,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n24.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n24'(suite) -> [];
'ibm-not-wf-P87-ibm87n24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21107,12 +19520,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n25.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n25'(suite) -> [];
'ibm-not-wf-P87-ibm87n25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21120,12 +19532,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n26.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n26'(suite) -> [];
'ibm-not-wf-P87-ibm87n26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21133,12 +19544,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n27.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n27'(suite) -> [];
'ibm-not-wf-P87-ibm87n27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21146,12 +19556,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n28.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n28'(suite) -> [];
'ibm-not-wf-P87-ibm87n28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21159,12 +19568,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n29.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n29'(suite) -> [];
'ibm-not-wf-P87-ibm87n29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21172,12 +19580,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n30.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n30'(suite) -> [];
'ibm-not-wf-P87-ibm87n30'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n30.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n30.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21185,12 +19592,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n31.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n31'(suite) -> [];
'ibm-not-wf-P87-ibm87n31'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n31.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n31.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21198,12 +19604,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n32.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n32'(suite) -> [];
'ibm-not-wf-P87-ibm87n32'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n32.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n32.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21211,12 +19616,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n33.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n33'(suite) -> [];
'ibm-not-wf-P87-ibm87n33'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n33.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n33.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21224,12 +19628,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n34.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n34'(suite) -> [];
'ibm-not-wf-P87-ibm87n34'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n34.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n34.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21237,12 +19640,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n35.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n35'(suite) -> [];
'ibm-not-wf-P87-ibm87n35'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n35.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n35.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21250,12 +19652,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n36.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n36'(suite) -> [];
'ibm-not-wf-P87-ibm87n36'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n36.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n36.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21263,12 +19664,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n37.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n37'(suite) -> [];
'ibm-not-wf-P87-ibm87n37'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n37.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n37.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21276,12 +19676,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n38.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n38'(suite) -> [];
'ibm-not-wf-P87-ibm87n38'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n38.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n38.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21289,12 +19688,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n39.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n39'(suite) -> [];
'ibm-not-wf-P87-ibm87n39'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n39.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n39.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21302,12 +19700,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n40.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n40'(suite) -> [];
'ibm-not-wf-P87-ibm87n40'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n40.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n40.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21315,12 +19712,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n41.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n41'(suite) -> [];
'ibm-not-wf-P87-ibm87n41'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n41.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n41.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21328,12 +19724,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n42.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n42'(suite) -> [];
'ibm-not-wf-P87-ibm87n42'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n42.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n42.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21341,12 +19736,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n43.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n43'(suite) -> [];
'ibm-not-wf-P87-ibm87n43'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n43.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n43.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21354,12 +19748,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n44.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n44'(suite) -> [];
'ibm-not-wf-P87-ibm87n44'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n44.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n44.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21367,12 +19760,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n45.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n45'(suite) -> [];
'ibm-not-wf-P87-ibm87n45'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n45.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n45.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21380,12 +19772,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n46.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n46'(suite) -> [];
'ibm-not-wf-P87-ibm87n46'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n46.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n46.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21393,12 +19784,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n47.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n47'(suite) -> [];
'ibm-not-wf-P87-ibm87n47'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n47.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n47.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21406,12 +19796,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n48.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n48'(suite) -> [];
'ibm-not-wf-P87-ibm87n48'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n48.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n48.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21419,12 +19808,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n49.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n49'(suite) -> [];
'ibm-not-wf-P87-ibm87n49'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n49.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n49.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21432,12 +19820,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n50.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n50'(suite) -> [];
'ibm-not-wf-P87-ibm87n50'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n50.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n50.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21445,12 +19832,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n51.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n51'(suite) -> [];
'ibm-not-wf-P87-ibm87n51'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n51.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n51.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21458,12 +19844,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n52.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n52'(suite) -> [];
'ibm-not-wf-P87-ibm87n52'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n52.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n52.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21471,12 +19856,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n53.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n53'(suite) -> [];
'ibm-not-wf-P87-ibm87n53'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n53.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n53.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21484,12 +19868,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n54.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n54'(suite) -> [];
'ibm-not-wf-P87-ibm87n54'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n54.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n54.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21497,12 +19880,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n55.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n55'(suite) -> [];
'ibm-not-wf-P87-ibm87n55'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n55.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n55.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21510,12 +19892,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n56.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n56'(suite) -> [];
'ibm-not-wf-P87-ibm87n56'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n56.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n56.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21523,12 +19904,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n57.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n57'(suite) -> [];
'ibm-not-wf-P87-ibm87n57'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n57.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n57.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21536,12 +19916,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n58.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n58'(suite) -> [];
'ibm-not-wf-P87-ibm87n58'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n58.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n58.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21549,12 +19928,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n59.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n59'(suite) -> [];
'ibm-not-wf-P87-ibm87n59'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n59.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n59.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21562,12 +19940,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n60.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n60'(suite) -> [];
'ibm-not-wf-P87-ibm87n60'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n60.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n60.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21575,12 +19952,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n61.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n61'(suite) -> [];
'ibm-not-wf-P87-ibm87n61'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n61.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n61.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21588,12 +19964,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n62.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n62'(suite) -> [];
'ibm-not-wf-P87-ibm87n62'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n62.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n62.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21601,12 +19976,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n63.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n63'(suite) -> [];
'ibm-not-wf-P87-ibm87n63'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n63.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n63.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21614,12 +19988,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n64.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n64'(suite) -> [];
'ibm-not-wf-P87-ibm87n64'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n64.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n64.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21627,12 +20000,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n66.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n66'(suite) -> [];
'ibm-not-wf-P87-ibm87n66'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n66.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n66.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21640,12 +20012,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n67.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n67'(suite) -> [];
'ibm-not-wf-P87-ibm87n67'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n67.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n67.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21653,12 +20024,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n68.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n68'(suite) -> [];
'ibm-not-wf-P87-ibm87n68'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n68.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n68.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21666,12 +20036,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n69.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n69'(suite) -> [];
'ibm-not-wf-P87-ibm87n69'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n69.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n69.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21679,12 +20048,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n70.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n70'(suite) -> [];
'ibm-not-wf-P87-ibm87n70'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n70.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n70.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21692,12 +20060,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n71.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n71'(suite) -> [];
'ibm-not-wf-P87-ibm87n71'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n71.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n71.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21705,12 +20072,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n72.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n72'(suite) -> [];
'ibm-not-wf-P87-ibm87n72'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n72.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n72.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21718,12 +20084,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n73.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n73'(suite) -> [];
'ibm-not-wf-P87-ibm87n73'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n73.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n73.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21731,12 +20096,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n74.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n74'(suite) -> [];
'ibm-not-wf-P87-ibm87n74'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n74.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n74.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21744,12 +20108,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n75.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n75'(suite) -> [];
'ibm-not-wf-P87-ibm87n75'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n75.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n75.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21757,12 +20120,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n76.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n76'(suite) -> [];
'ibm-not-wf-P87-ibm87n76'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n76.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n76.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21770,12 +20132,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n77.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n77'(suite) -> [];
'ibm-not-wf-P87-ibm87n77'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n77.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n77.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21783,12 +20144,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n78.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n78'(suite) -> [];
'ibm-not-wf-P87-ibm87n78'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n78.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n78.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21796,12 +20156,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n79.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n79'(suite) -> [];
'ibm-not-wf-P87-ibm87n79'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n79.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n79.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21809,12 +20168,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n80.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n80'(suite) -> [];
'ibm-not-wf-P87-ibm87n80'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n80.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n80.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21822,12 +20180,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n81.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n81'(suite) -> [];
'ibm-not-wf-P87-ibm87n81'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n81.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n81.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21835,12 +20192,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n82.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n82'(suite) -> [];
'ibm-not-wf-P87-ibm87n82'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n82.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n82.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21848,12 +20204,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n83.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n83'(suite) -> [];
'ibm-not-wf-P87-ibm87n83'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n83.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n83.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21861,12 +20216,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n84.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n84'(suite) -> [];
'ibm-not-wf-P87-ibm87n84'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n84.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n84.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21874,12 +20228,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n85.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n85'(suite) -> [];
'ibm-not-wf-P87-ibm87n85'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n85.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n85.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -21892,12 +20245,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n01'(suite) -> [];
'ibm-not-wf-P88-ibm88n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21905,12 +20257,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n02'(suite) -> [];
'ibm-not-wf-P88-ibm88n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21918,12 +20269,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n03'(suite) -> [];
'ibm-not-wf-P88-ibm88n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21931,12 +20281,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n04'(suite) -> [];
'ibm-not-wf-P88-ibm88n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21944,12 +20293,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n05.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n05'(suite) -> [];
'ibm-not-wf-P88-ibm88n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21957,12 +20305,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n06.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n06'(suite) -> [];
'ibm-not-wf-P88-ibm88n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21970,12 +20317,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n08.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n08'(suite) -> [];
'ibm-not-wf-P88-ibm88n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21983,12 +20329,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n09.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n09'(suite) -> [];
'ibm-not-wf-P88-ibm88n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21996,12 +20341,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n10.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n10'(suite) -> [];
'ibm-not-wf-P88-ibm88n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22009,12 +20353,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n11.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n11'(suite) -> [];
'ibm-not-wf-P88-ibm88n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22022,12 +20365,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n12.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n12'(suite) -> [];
'ibm-not-wf-P88-ibm88n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22035,12 +20377,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n13.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n13'(suite) -> [];
'ibm-not-wf-P88-ibm88n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22048,12 +20389,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n14.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n14'(suite) -> [];
'ibm-not-wf-P88-ibm88n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22061,12 +20401,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n15.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n15'(suite) -> [];
'ibm-not-wf-P88-ibm88n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22074,12 +20413,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n16.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n16'(suite) -> [];
'ibm-not-wf-P88-ibm88n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22092,12 +20430,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n01'(suite) -> [];
'ibm-not-wf-P89-ibm89n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22105,12 +20442,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n02'(suite) -> [];
'ibm-not-wf-P89-ibm89n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22118,12 +20454,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n03'(suite) -> [];
'ibm-not-wf-P89-ibm89n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22131,12 +20466,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n04'(suite) -> [];
'ibm-not-wf-P89-ibm89n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22144,12 +20478,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n05.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n05'(suite) -> [];
'ibm-not-wf-P89-ibm89n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22157,12 +20490,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n06.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n06'(suite) -> [];
'ibm-not-wf-P89-ibm89n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22170,12 +20502,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n07.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n07'(suite) -> [];
'ibm-not-wf-P89-ibm89n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22183,12 +20514,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n08.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n08'(suite) -> [];
'ibm-not-wf-P89-ibm89n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22196,12 +20526,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n09.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n09'(suite) -> [];
'ibm-not-wf-P89-ibm89n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22209,12 +20538,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n10.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n10'(suite) -> [];
'ibm-not-wf-P89-ibm89n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22222,12 +20550,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n11.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n11'(suite) -> [];
'ibm-not-wf-P89-ibm89n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22235,12 +20562,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n12.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n12'(suite) -> [];
'ibm-not-wf-P89-ibm89n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22258,12 +20584,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P01-ibm01v01.xml
%% Type: valid
%% Sections: 2.1
-'ibm-valid-P01-ibm01v01'(suite) -> [];
'ibm-valid-P01-ibm01v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P01/ibm01v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P01/ibm01v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22276,12 +20601,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P02-ibm02v01.xml
%% Type: valid
%% Sections: 2.2
-'ibm-valid-P02-ibm02v01'(suite) -> [];
'ibm-valid-P02-ibm02v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P02/ibm02v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P02/ibm02v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22294,12 +20618,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P03-ibm03v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P03-ibm03v01'(suite) -> [];
'ibm-valid-P03-ibm03v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P03/ibm03v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P03/ibm03v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22312,12 +20635,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v01'(suite) -> [];
'ibm-valid-P09-ibm09v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22325,12 +20647,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v02.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v02'(suite) -> [];
'ibm-valid-P09-ibm09v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22338,12 +20659,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v03.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v03'(suite) -> [];
'ibm-valid-P09-ibm09v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22351,12 +20671,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v04.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v04'(suite) -> [];
'ibm-valid-P09-ibm09v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22364,12 +20683,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v05.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v05'(suite) -> [];
'ibm-valid-P09-ibm09v05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22382,12 +20700,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v01'(suite) -> [];
'ibm-valid-P10-ibm10v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22395,12 +20712,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v02.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v02'(suite) -> [];
'ibm-valid-P10-ibm10v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22408,12 +20724,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v03.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v03'(suite) -> [];
'ibm-valid-P10-ibm10v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22421,12 +20736,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v04.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v04'(suite) -> [];
'ibm-valid-P10-ibm10v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22434,12 +20748,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v05.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v05'(suite) -> [];
'ibm-valid-P10-ibm10v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22447,12 +20760,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v06.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v06'(suite) -> [];
'ibm-valid-P10-ibm10v06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22460,12 +20772,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v07.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v07'(suite) -> [];
'ibm-valid-P10-ibm10v07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22473,12 +20784,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v08.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v08'(suite) -> [];
'ibm-valid-P10-ibm10v08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22491,12 +20801,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P11-ibm11v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P11-ibm11v01'(suite) -> [];
'ibm-valid-P11-ibm11v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22504,12 +20813,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P11-ibm11v02.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P11-ibm11v02'(suite) -> [];
'ibm-valid-P11-ibm11v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22517,12 +20825,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P11-ibm11v03.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P11-ibm11v03'(suite) -> [];
'ibm-valid-P11-ibm11v03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22530,12 +20837,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P11-ibm11v04.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P11-ibm11v04'(suite) -> [];
'ibm-valid-P11-ibm11v04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22548,12 +20854,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P12-ibm12v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P12-ibm12v01'(suite) -> [];
'ibm-valid-P12-ibm12v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22561,12 +20866,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P12-ibm12v02.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P12-ibm12v02'(suite) -> [];
'ibm-valid-P12-ibm12v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22574,12 +20878,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P12-ibm12v03.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P12-ibm12v03'(suite) -> [];
'ibm-valid-P12-ibm12v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22587,18 +20890,16 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P12-ibm12v04.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P12-ibm12v04'(suite) -> [];
'ibm-valid-P12-ibm12v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 12
-testcases111(suite) -> [].
%% ['ibm-valid-P12-ibm12v01','ibm-valid-P12-ibm12v02','ibm-valid-P12-ibm12v03','ibm-valid-P12-ibm12v04'].
%%----------------------------------------------------------------------
@@ -22607,18 +20908,16 @@ testcases111(suite) -> [].
%% ID: ibm-valid-P13-ibm13v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P13-ibm13v01'(suite) -> [];
'ibm-valid-P13-ibm13v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P13/ibm13v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P13/ibm13v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 13
-testcases112(suite) -> [].
%% ['ibm-valid-P13-ibm13v01'].
%%----------------------------------------------------------------------
@@ -22627,12 +20926,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P14-ibm14v01.xml
%% Type: valid
%% Sections: 2.4
-'ibm-valid-P14-ibm14v01'(suite) -> [];
'ibm-valid-P14-ibm14v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22640,12 +20938,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P14-ibm14v02.xml
%% Type: valid
%% Sections: 2.4
-'ibm-valid-P14-ibm14v02'(suite) -> [];
'ibm-valid-P14-ibm14v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22653,12 +20950,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P14-ibm14v03.xml
%% Type: valid
%% Sections: 2.4
-'ibm-valid-P14-ibm14v03'(suite) -> [];
'ibm-valid-P14-ibm14v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22671,12 +20967,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P15-ibm15v01.xml
%% Type: valid
%% Sections: 2.5
-'ibm-valid-P15-ibm15v01'(suite) -> [];
'ibm-valid-P15-ibm15v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22684,12 +20979,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P15-ibm15v02.xml
%% Type: valid
%% Sections: 2.5
-'ibm-valid-P15-ibm15v02'(suite) -> [];
'ibm-valid-P15-ibm15v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22697,12 +20991,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P15-ibm15v03.xml
%% Type: valid
%% Sections: 2.5
-'ibm-valid-P15-ibm15v03'(suite) -> [];
'ibm-valid-P15-ibm15v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22710,12 +21003,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P15-ibm15v04.xml
%% Type: valid
%% Sections: 2.5
-'ibm-valid-P15-ibm15v04'(suite) -> [];
'ibm-valid-P15-ibm15v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22728,12 +21020,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P16-ibm16v01.xml
%% Type: valid
%% Sections: 2.6
-'ibm-valid-P16-ibm16v01'(suite) -> [];
'ibm-valid-P16-ibm16v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22741,12 +21032,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P16-ibm16v02.xml
%% Type: valid
%% Sections: 2.6
-'ibm-valid-P16-ibm16v02'(suite) -> [];
'ibm-valid-P16-ibm16v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22754,12 +21044,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P16-ibm16v03.xml
%% Type: valid
%% Sections: 2.6
-'ibm-valid-P16-ibm16v03'(suite) -> [];
'ibm-valid-P16-ibm16v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22772,12 +21061,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P17-ibm17v01.xml
%% Type: valid
%% Sections: 2.6
-'ibm-valid-P17-ibm17v01'(suite) -> [];
'ibm-valid-P17-ibm17v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P17/ibm17v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P17/ibm17v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22790,12 +21078,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P18-ibm18v01.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P18-ibm18v01'(suite) -> [];
'ibm-valid-P18-ibm18v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P18/ibm18v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P18/ibm18v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22808,12 +21095,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P19-ibm19v01.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P19-ibm19v01'(suite) -> [];
'ibm-valid-P19-ibm19v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P19/ibm19v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P19/ibm19v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22826,12 +21112,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P20-ibm20v01.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P20-ibm20v01'(suite) -> [];
'ibm-valid-P20-ibm20v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P20/ibm20v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P20/ibm20v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22839,12 +21124,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P20-ibm20v02.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P20-ibm20v02'(suite) -> [];
'ibm-valid-P20-ibm20v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P20/ibm20v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P20/ibm20v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22857,12 +21141,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P21-ibm21v01.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P21-ibm21v01'(suite) -> [];
'ibm-valid-P21-ibm21v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P21/ibm21v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P21/ibm21v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22875,12 +21158,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v01'(suite) -> [];
'ibm-valid-P22-ibm22v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22888,12 +21170,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v02'(suite) -> [];
'ibm-valid-P22-ibm22v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22901,12 +21182,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v03.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v03'(suite) -> [];
'ibm-valid-P22-ibm22v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22914,12 +21194,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v04.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v04'(suite) -> [];
'ibm-valid-P22-ibm22v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22927,12 +21206,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v05.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v05'(suite) -> [];
'ibm-valid-P22-ibm22v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22940,12 +21218,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v06.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v06'(suite) -> [];
'ibm-valid-P22-ibm22v06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22953,12 +21230,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v07.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v07'(suite) -> [];
'ibm-valid-P22-ibm22v07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22971,12 +21247,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v01'(suite) -> [];
'ibm-valid-P23-ibm23v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22984,12 +21259,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v02'(suite) -> [];
'ibm-valid-P23-ibm23v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22997,12 +21271,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v03.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v03'(suite) -> [];
'ibm-valid-P23-ibm23v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23010,12 +21283,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v04.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v04'(suite) -> [];
'ibm-valid-P23-ibm23v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23023,12 +21295,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v05.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v05'(suite) -> [];
'ibm-valid-P23-ibm23v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23036,12 +21307,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v06.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v06'(suite) -> [];
'ibm-valid-P23-ibm23v06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23054,12 +21324,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P24-ibm24v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P24-ibm24v01'(suite) -> [];
'ibm-valid-P24-ibm24v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P24/ibm24v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P24/ibm24v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23067,12 +21336,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P24-ibm24v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P24-ibm24v02'(suite) -> [];
'ibm-valid-P24-ibm24v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P24/ibm24v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P24/ibm24v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23085,12 +21353,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P25-ibm25v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P25-ibm25v01'(suite) -> [];
'ibm-valid-P25-ibm25v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23098,12 +21365,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P25-ibm25v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P25-ibm25v02'(suite) -> [];
'ibm-valid-P25-ibm25v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23111,12 +21377,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P25-ibm25v03.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P25-ibm25v03'(suite) -> [];
'ibm-valid-P25-ibm25v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23124,12 +21389,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P25-ibm25v04.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P25-ibm25v04'(suite) -> [];
'ibm-valid-P25-ibm25v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23142,12 +21406,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P26-ibm26v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P26-ibm26v01'(suite) -> [];
'ibm-valid-P26-ibm26v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P26/ibm26v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P26/ibm26v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23160,12 +21423,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P27-ibm27v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P27-ibm27v01'(suite) -> [];
'ibm-valid-P27-ibm27v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23173,12 +21435,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P27-ibm27v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P27-ibm27v02'(suite) -> [];
'ibm-valid-P27-ibm27v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23186,12 +21447,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P27-ibm27v03.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P27-ibm27v03'(suite) -> [];
'ibm-valid-P27-ibm27v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23204,12 +21464,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P28-ibm28v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P28-ibm28v01'(suite) -> [];
'ibm-valid-P28-ibm28v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P28/ibm28v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P28/ibm28v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23217,12 +21476,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P28-ibm28v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P28-ibm28v02'(suite) -> [];
'ibm-valid-P28-ibm28v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P28/ibm28v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P28/ibm28v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23235,12 +21493,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P29-ibm29v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P29-ibm29v01'(suite) -> [];
'ibm-valid-P29-ibm29v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P29/ibm29v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P29/ibm29v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23248,12 +21505,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P29-ibm29v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P29-ibm29v02'(suite) -> [];
'ibm-valid-P29-ibm29v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P29/ibm29v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P29/ibm29v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23266,12 +21522,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P30-ibm30v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P30-ibm30v01'(suite) -> [];
'ibm-valid-P30-ibm30v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P30/ibm30v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P30/ibm30v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23279,12 +21534,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P30-ibm30v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P30-ibm30v02'(suite) -> [];
'ibm-valid-P30-ibm30v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P30/ibm30v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P30/ibm30v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23297,18 +21551,16 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P31-ibm31v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P31-ibm31v01'(suite) -> [];
'ibm-valid-P31-ibm31v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P31/ibm31v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P31/ibm31v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 31
-testcases130(suite) -> [].
%% ['ibm-valid-P31-ibm31v01'].
%%----------------------------------------------------------------------
@@ -23317,12 +21569,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P32-ibm32v01.xml
%% Type: valid
%% Sections: 2.9
-'ibm-valid-P32-ibm32v01'(suite) -> [];
'ibm-valid-P32-ibm32v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23330,12 +21581,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P32-ibm32v02.xml
%% Type: valid
%% Sections: 2.9
-'ibm-valid-P32-ibm32v02'(suite) -> [];
'ibm-valid-P32-ibm32v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23343,12 +21593,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P32-ibm32v03.xml
%% Type: valid
%% Sections: 2.9
-'ibm-valid-P32-ibm32v03'(suite) -> [];
'ibm-valid-P32-ibm32v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23356,12 +21605,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P32-ibm32v04.xml
%% Type: valid
%% Sections: 2.9
-'ibm-valid-P32-ibm32v04'(suite) -> [];
'ibm-valid-P32-ibm32v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23374,12 +21622,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P33-ibm33v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P33-ibm33v01'(suite) -> [];
'ibm-valid-P33-ibm33v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P33/ibm33v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P33/ibm33v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23392,12 +21639,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P34-ibm34v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P34-ibm34v01'(suite) -> [];
'ibm-valid-P34-ibm34v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P34/ibm34v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P34/ibm34v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23410,12 +21656,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P35-ibm35v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P35-ibm35v01'(suite) -> [];
'ibm-valid-P35-ibm35v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P35/ibm35v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P35/ibm35v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23428,12 +21673,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P36-ibm36v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P36-ibm36v01'(suite) -> [];
'ibm-valid-P36-ibm36v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P36/ibm36v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P36/ibm36v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23446,12 +21690,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P37-ibm37v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P37-ibm37v01'(suite) -> [];
'ibm-valid-P37-ibm37v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P37/ibm37v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P37/ibm37v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23464,12 +21707,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P38-ibm38v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P38-ibm38v01'(suite) -> [];
'ibm-valid-P38-ibm38v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P38/ibm38v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P38/ibm38v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23482,12 +21724,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P39-ibm39v01.xml
%% Type: valid
%% Sections: 3
-'ibm-valid-P39-ibm39v01'(suite) -> [];
'ibm-valid-P39-ibm39v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P39/ibm39v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P39/ibm39v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23500,12 +21741,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P40-ibm40v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P40-ibm40v01'(suite) -> [];
'ibm-valid-P40-ibm40v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P40/ibm40v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P40/ibm40v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23518,12 +21758,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P41-ibm41v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P41-ibm41v01'(suite) -> [];
'ibm-valid-P41-ibm41v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P41/ibm41v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P41/ibm41v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23536,12 +21775,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P42-ibm42v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P42-ibm42v01'(suite) -> [];
'ibm-valid-P42-ibm42v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P42/ibm42v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P42/ibm42v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23554,12 +21792,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P43-ibm43v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P43-ibm43v01'(suite) -> [];
'ibm-valid-P43-ibm43v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P43/ibm43v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P43/ibm43v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23572,12 +21809,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P44-ibm44v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P44-ibm44v01'(suite) -> [];
'ibm-valid-P44-ibm44v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P44/ibm44v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P44/ibm44v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23590,12 +21826,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P45-ibm45v01.xml
%% Type: valid
%% Sections: 3.2
-'ibm-valid-P45-ibm45v01'(suite) -> [];
'ibm-valid-P45-ibm45v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P45/ibm45v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P45/ibm45v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23608,12 +21843,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P47-ibm47v01.xml
%% Type: valid
%% Sections: 3.2.1
-'ibm-valid-P47-ibm47v01'(suite) -> [];
'ibm-valid-P47-ibm47v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P47/ibm47v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P47/ibm47v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23626,12 +21860,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P49-ibm49v01.xml
%% Type: valid
%% Sections: 3.2.1
-'ibm-valid-P49-ibm49v01'(suite) -> [];
'ibm-valid-P49-ibm49v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P49/ibm49v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P49/ibm49v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23644,12 +21877,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P50-ibm50v01.xml
%% Type: valid
%% Sections: 3.2.1
-'ibm-valid-P50-ibm50v01'(suite) -> [];
'ibm-valid-P50-ibm50v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P50/ibm50v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P50/ibm50v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23662,12 +21894,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P51-ibm51v01.xml
%% Type: valid
%% Sections: 3.2.2
-'ibm-valid-P51-ibm51v01'(suite) -> [];
'ibm-valid-P51-ibm51v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P51/ibm51v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P51/ibm51v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23675,12 +21906,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P51-ibm51v02.xml
%% Type: valid
%% Sections: 3.2.2
-'ibm-valid-P51-ibm51v02'(suite) -> [];
'ibm-valid-P51-ibm51v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P51/ibm51v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P51/ibm51v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23693,12 +21923,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P52-ibm52v01.xml
%% Type: valid
%% Sections: 3.3
-'ibm-valid-P52-ibm52v01'(suite) -> [];
'ibm-valid-P52-ibm52v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P52/ibm52v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P52/ibm52v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23711,12 +21940,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P54-ibm54v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P54-ibm54v01'(suite) -> [];
'ibm-valid-P54-ibm54v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23724,12 +21952,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P54-ibm54v02.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P54-ibm54v02'(suite) -> [];
'ibm-valid-P54-ibm54v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23737,12 +21964,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P54-ibm54v03.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P54-ibm54v03'(suite) -> [];
'ibm-valid-P54-ibm54v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23755,12 +21981,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P55-ibm55v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P55-ibm55v01'(suite) -> [];
'ibm-valid-P55-ibm55v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P55/ibm55v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P55/ibm55v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23773,12 +21998,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v01'(suite) -> [];
'ibm-valid-P56-ibm56v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23786,12 +22010,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v02.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v02'(suite) -> [];
'ibm-valid-P56-ibm56v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23799,12 +22022,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v03.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v03'(suite) -> [];
'ibm-valid-P56-ibm56v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23812,12 +22034,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v04.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v04'(suite) -> [];
'ibm-valid-P56-ibm56v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23825,12 +22046,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v05.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v05'(suite) -> [];
'ibm-valid-P56-ibm56v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23838,12 +22058,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v06.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v06'(suite) -> [];
'ibm-valid-P56-ibm56v06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23851,12 +22070,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v07.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v07'(suite) -> [];
'ibm-valid-P56-ibm56v07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23864,12 +22082,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v08.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v08'(suite) -> [];
'ibm-valid-P56-ibm56v08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23877,12 +22094,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v09.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v09'(suite) -> [];
'ibm-valid-P56-ibm56v09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23890,12 +22106,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v10.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v10'(suite) -> [];
'ibm-valid-P56-ibm56v10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23908,12 +22123,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P57-ibm57v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P57-ibm57v01'(suite) -> [];
'ibm-valid-P57-ibm57v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P57/ibm57v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P57/ibm57v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23926,12 +22140,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P58-ibm58v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P58-ibm58v01'(suite) -> [];
'ibm-valid-P58-ibm58v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P58/ibm58v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P58/ibm58v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23939,12 +22152,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P58-ibm58v02.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P58-ibm58v02'(suite) -> [];
'ibm-valid-P58-ibm58v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P58/ibm58v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P58/ibm58v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23957,12 +22169,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P59-ibm59v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P59-ibm59v01'(suite) -> [];
'ibm-valid-P59-ibm59v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P59/ibm59v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P59/ibm59v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23970,12 +22181,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P59-ibm59v02.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P59-ibm59v02'(suite) -> [];
'ibm-valid-P59-ibm59v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P59/ibm59v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P59/ibm59v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23988,12 +22198,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P60-ibm60v01.xml
%% Type: valid
%% Sections: 3.3.2
-'ibm-valid-P60-ibm60v01'(suite) -> [];
'ibm-valid-P60-ibm60v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24001,12 +22210,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P60-ibm60v02.xml
%% Type: valid
%% Sections: 3.3.2
-'ibm-valid-P60-ibm60v02'(suite) -> [];
'ibm-valid-P60-ibm60v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24014,12 +22222,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P60-ibm60v03.xml
%% Type: valid
%% Sections: 3.3.2
-'ibm-valid-P60-ibm60v03'(suite) -> [];
'ibm-valid-P60-ibm60v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24027,12 +22234,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P60-ibm60v04.xml
%% Type: valid
%% Sections: 3.3.2
-'ibm-valid-P60-ibm60v04'(suite) -> [];
'ibm-valid-P60-ibm60v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24045,12 +22251,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P61-ibm61v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P61-ibm61v01'(suite) -> [];
'ibm-valid-P61-ibm61v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P61/ibm61v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P61/ibm61v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24058,18 +22263,16 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P61-ibm61v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P61-ibm61v02'(suite) -> [];
'ibm-valid-P61-ibm61v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P61/ibm61v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P61/ibm61v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 61
-testcases157(suite) -> [].
%% ['ibm-valid-P61-ibm61v01','ibm-valid-P61-ibm61v02'].
%%----------------------------------------------------------------------
@@ -24078,12 +22281,11 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v01'(suite) -> [];
'ibm-valid-P62-ibm62v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24091,12 +22293,11 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v02'(suite) -> [];
'ibm-valid-P62-ibm62v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24104,12 +22305,11 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v03.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v03'(suite) -> [];
'ibm-valid-P62-ibm62v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24117,12 +22317,11 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v04.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v04'(suite) -> [];
'ibm-valid-P62-ibm62v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24130,18 +22329,16 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v05.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v05'(suite) -> [];
'ibm-valid-P62-ibm62v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 62
-testcases158(suite) -> [].
%% ['ibm-valid-P62-ibm62v01','ibm-valid-P62-ibm62v02','ibm-valid-P62-ibm62v03','ibm-valid-P62-ibm62v04','ibm-valid-P62-ibm62v05'].
%%----------------------------------------------------------------------
@@ -24150,12 +22347,11 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v01'(suite) -> [];
'ibm-valid-P63-ibm63v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24163,12 +22359,11 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v02'(suite) -> [];
'ibm-valid-P63-ibm63v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24176,12 +22371,11 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v03.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v03'(suite) -> [];
'ibm-valid-P63-ibm63v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24189,12 +22383,11 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v04.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v04'(suite) -> [];
'ibm-valid-P63-ibm63v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24202,18 +22395,16 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v05.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v05'(suite) -> [];
'ibm-valid-P63-ibm63v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 63
-testcases159(suite) -> [].
%% ['ibm-valid-P63-ibm63v01','ibm-valid-P63-ibm63v02','ibm-valid-P63-ibm63v03','ibm-valid-P63-ibm63v04','ibm-valid-P63-ibm63v05'].
%%----------------------------------------------------------------------
@@ -24222,12 +22413,11 @@ testcases159(suite) -> [].
%% ID: ibm-valid-P64-ibm64v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P64-ibm64v01'(suite) -> [];
'ibm-valid-P64-ibm64v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24235,12 +22425,11 @@ testcases159(suite) -> [].
%% ID: ibm-valid-P64-ibm64v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P64-ibm64v02'(suite) -> [];
'ibm-valid-P64-ibm64v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24248,18 +22437,16 @@ testcases159(suite) -> [].
%% ID: ibm-valid-P64-ibm64v03.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P64-ibm64v03'(suite) -> [];
'ibm-valid-P64-ibm64v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 64
-testcases160(suite) -> [].
%% ['ibm-valid-P64-ibm64v01','ibm-valid-P64-ibm64v02','ibm-valid-P64-ibm64v03'].
%%----------------------------------------------------------------------
@@ -24268,12 +22455,11 @@ testcases160(suite) -> [].
%% ID: ibm-valid-P65-ibm65v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P65-ibm65v01'(suite) -> [];
'ibm-valid-P65-ibm65v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P65/ibm65v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P65/ibm65v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24281,18 +22467,16 @@ testcases160(suite) -> [].
%% ID: ibm-valid-P65-ibm65v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P65-ibm65v02'(suite) -> [];
'ibm-valid-P65-ibm65v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P65/ibm65v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P65/ibm65v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 65
-testcases161(suite) -> [].
%% ['ibm-valid-P65-ibm65v01','ibm-valid-P65-ibm65v02'].
%%----------------------------------------------------------------------
@@ -24301,12 +22485,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P66-ibm66v01.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P66-ibm66v01'(suite) -> [];
'ibm-valid-P66-ibm66v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P66/ibm66v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P66/ibm66v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24319,12 +22502,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P67-ibm67v01.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P67-ibm67v01'(suite) -> [];
'ibm-valid-P67-ibm67v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P67/ibm67v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P67/ibm67v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24337,12 +22519,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P68-ibm68v01.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P68-ibm68v01'(suite) -> [];
'ibm-valid-P68-ibm68v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P68/ibm68v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P68/ibm68v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24350,12 +22531,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P68-ibm68v02.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P68-ibm68v02'(suite) -> [];
'ibm-valid-P68-ibm68v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P68/ibm68v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P68/ibm68v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24368,12 +22548,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P69-ibm69v01.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P69-ibm69v01'(suite) -> [];
'ibm-valid-P69-ibm69v01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P69/ibm69v01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P69/ibm69v01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24381,12 +22560,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P69-ibm69v02.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P69-ibm69v02'(suite) -> [];
'ibm-valid-P69-ibm69v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P69/ibm69v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P69/ibm69v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24399,12 +22577,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P70-ibm70v01.xml
%% Type: valid
%% Sections: 4.2
-'ibm-valid-P70-ibm70v01'(suite) -> [];
'ibm-valid-P70-ibm70v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P70/ibm70v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P70/ibm70v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24417,18 +22594,16 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P78-ibm78v01.xml
%% Type: valid
%% Sections: 4.3.2
-'ibm-valid-P78-ibm78v01'(suite) -> [];
'ibm-valid-P78-ibm78v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P78/ibm78v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P78/ibm78v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 78
-testcases167(suite) -> [].
%% ['ibm-valid-P78-ibm78v01'].
%%----------------------------------------------------------------------
@@ -24437,12 +22612,11 @@ testcases167(suite) -> [].
%% ID: ibm-valid-P79-ibm79v01.xml
%% Type: valid
%% Sections: 4.3.2
-'ibm-valid-P79-ibm79v01'(suite) -> [];
'ibm-valid-P79-ibm79v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P79/ibm79v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P79/ibm79v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24455,12 +22629,11 @@ testcases167(suite) -> [].
%% ID: ibm-valid-P82-ibm82v01.xml
%% Type: valid
%% Sections: 4.7
-'ibm-valid-P82-ibm82v01'(suite) -> [];
'ibm-valid-P82-ibm82v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P82/ibm82v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P82/ibm82v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24473,18 +22646,16 @@ testcases167(suite) -> [].
%% ID: ibm-valid-P85-ibm85v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P85-ibm85v01'(suite) -> [];
'ibm-valid-P85-ibm85v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P85/ibm85v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P85/ibm85v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 85
-testcases170(suite) -> [].
%% ['ibm-valid-P85-ibm85v01'].
%%----------------------------------------------------------------------
@@ -24493,12 +22664,11 @@ testcases170(suite) -> [].
%% ID: ibm-valid-P86-ibm86v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P86-ibm86v01'(suite) -> [];
'ibm-valid-P86-ibm86v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P86/ibm86v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P86/ibm86v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24511,12 +22681,11 @@ testcases170(suite) -> [].
%% ID: ibm-valid-P87-ibm87v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P87-ibm87v01'(suite) -> [];
'ibm-valid-P87-ibm87v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P87/ibm87v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P87/ibm87v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24529,12 +22698,11 @@ testcases170(suite) -> [].
%% ID: ibm-valid-P88-ibm88v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P88-ibm88v01'(suite) -> [];
'ibm-valid-P88-ibm88v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P88/ibm88v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P88/ibm88v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24547,12 +22715,11 @@ testcases170(suite) -> [].
%% ID: ibm-valid-P89-ibm89v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P89-ibm89v01'(suite) -> [];
'ibm-valid-P89-ibm89v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P89/ibm89v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P89/ibm89v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -25577,11 +23744,11 @@ end_per_group(_GroupName, Config) ->
%% Dir is a directory
rm_f_(Dir) ->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
rm_files(FileList),
- ?line file:set_cwd(CWD),
+ file:set_cwd(CWD),
? line ok = file:del_dir(Dir).
rm_files([])->
@@ -25591,7 +23758,7 @@ rm_files([F|Fs]) ->
true ->
rm_f_(F);
_ ->
- ?line ok = file:delete(F)
+ ok = file:delete(F)
end,
rm_files(Fs).
@@ -25599,11 +23766,11 @@ rm_files([F|Fs]) ->
change_mode(Files) ->
change_mode3(Files).
change_mode2(Dir)->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
change_mode3(FileList),
- ?line file:set_cwd(CWD).
+ file:set_cwd(CWD).
change_mode3([]) ->
ok;
change_mode3([F|Fs]) ->
@@ -25625,6 +23792,9 @@ chmod(F) ->
ok
end.
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+
%%----------------------------------------------------------------------
%% check_result
check_result({fatal_error,_,_,_,_}, "error") ->
diff --git a/lib/xmerl/test/xmerl_std_SUITE.erl b/lib/xmerl/test/xmerl_std_SUITE.erl
index 0ef44bb04e..5badfc708c 100644
--- a/lib/xmerl/test/xmerl_std_SUITE.erl
+++ b/lib/xmerl/test/xmerl_std_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@
%%----------------------------------------------------------------------
%% Include files
%%----------------------------------------------------------------------
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%-include("xmerl.hrl").
-include_lib("xmerl/include/xmerl.hrl").
@@ -62,12 +62,8 @@ groups() ->
{japanese_test_cases, [], 'xerox-japanese'(suite)},
{oasis_test_cases, [], 'nist-oasis'(suite)}].
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
+suite() ->
+ [{timetrap,{minutes,10}}].
'sun-valid'(suite) -> %% 28 test cases
@@ -755,10972 +751,9145 @@ end_per_group(_GroupName, Config) ->
%% Initializations
%%----------------------------------------------------------------------
-init_per_suite(doc) ->
- ["Starts the test suite"];
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line ok=erl_tar:extract("ibm.tgz",[compressed]),
- ?line ok=erl_tar:extract("japanese.tgz",[compressed]),
- ?line ok=erl_tar:extract("oasis.tgz",[compressed]),
- ?line ok=erl_tar:extract("sun.tgz",[compressed]),
- ?line ok=erl_tar:extract("xmltest.tgz",[compressed]),
- ?line ok = change_mode(["ibm","japanese","oasis",
- "sun","xmltest"]),
- [{watchdog, Dog}|Config].
-
+ file:set_cwd(datadir(Config)),
+ ok = erl_tar:extract("ibm.tgz",[compressed]),
+ ok = erl_tar:extract("japanese.tgz",[compressed]),
+ ok = erl_tar:extract("oasis.tgz",[compressed]),
+ ok = erl_tar:extract("sun.tgz",[compressed]),
+ ok = erl_tar:extract("xmltest.tgz",[compressed]),
+ ok = change_mode(["ibm","japanese","oasis",
+ "sun","xmltest"]),
+ Config.
-ifndef(dont_rm_test_dirs).
-end_per_suite(doc) ->
- ["Stops the test suite"];
end_per_suite(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line ok=rm_files(["ibm","japanese","oasis","sun","xmltest"]),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- lists:keydelete(watchdog,1,Config).
+ file:set_cwd(datadir(Config)),
+ ok = rm_files(["ibm","japanese","oasis","sun","xmltest"]),
+ ok.
-else.
-end_per_suite(doc) ->
- ["Stops the test suite"];
end_per_suite(Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- lists:keydelete(watchdog,1,Config).
+ ok.
-endif.
%% initialization before each testcase
init_per_testcase(_TestCase,Config) ->
io:format("Config:~n~p",[Config]),
- ?line {ok, _} = file:read_file_info(filename:join([?config(priv_dir,Config)])),
- ?line code:add_patha(?config(priv_dir,Config)),
- Dog=test_server:timetrap({minutes,10}),
- [{watchdog, Dog}|Config].
+ {ok, _} = file:read_file_info(filename:join([privdir(Config)])),
+ code:add_patha(privdir(Config)),
+ Config.
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Func,_Config) ->
ok.
%%----------------------------------------------------------------------
%% Test cases
%%----------------------------------------------------------------------
-'v-pe02'(suite) -> [];
'v-pe02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-pe02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-pe02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-pe03'(suite) -> [];
'v-pe03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-pe03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-pe03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-pe00'(suite) -> [];
'v-pe00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-pe00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-pe00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang06'(suite) -> [];
'v-lang06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang05'(suite) -> [];
'v-lang05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang04'(suite) -> [];
'v-lang04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang03'(suite) -> [];
'v-lang03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang02'(suite) -> [];
'v-lang02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang01'(suite) -> [];
'v-lang01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-sgml01'(suite) -> [];
'v-sgml01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-sgml01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-sgml01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa05'(suite) -> [];
'sa05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa04'(suite) -> [];
'sa04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa03'(suite) -> [];
'sa03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa02'(suite) -> [];
'sa02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa01'(suite) -> [];
'sa01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'required00'(suite) -> [];
'required00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"required00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"required00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional'(suite) -> [];
'optional'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'notation01'(suite) -> [];
'notation01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"notation01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"notation01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-sa04'(suite) -> [];
'not-sa04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-sa04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-sa04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-sa03'(suite) -> [];
'not-sa03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-sa03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-sa03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-sa02'(suite) -> [];
'not-sa02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-sa02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-sa02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-sa01'(suite) -> [];
'not-sa01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-sa01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-sa01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ext02'(suite) -> [];
'ext02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"ext02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"ext02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ext01'(suite) -> [];
'ext01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"ext01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"ext01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element'(suite) -> [];
'element'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd01'(suite) -> [];
'dtd01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd00'(suite) -> [];
'dtd00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pe01'(suite) -> [];
'pe01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pe01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pe01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'empty'(suite) -> [];
'empty'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"empty.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"empty.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'utf16l'(suite) -> [];
'utf16l'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"utf16l.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"utf16l.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'utf16b'(suite) -> [];
'utf16b'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"utf16b.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"utf16b.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr16'(suite) -> [];
'attr16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr15'(suite) -> [];
'attr15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr14'(suite) -> [];
'attr14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr13'(suite) -> [];
'attr13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr12'(suite) -> [];
'attr12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr11'(suite) -> [];
'attr11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr10'(suite) -> [];
'attr10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr09'(suite) -> [];
'attr09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr08'(suite) -> [];
'attr08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr07'(suite) -> [];
'attr07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr06'(suite) -> [];
'attr06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr05'(suite) -> [];
'attr05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr04'(suite) -> [];
'attr04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr03'(suite) -> [];
'attr03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr02'(suite) -> [];
'attr02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr01'(suite) -> [];
'attr01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'root'(suite) -> [];
'root'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"root.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"root.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-required02'(suite) -> [];
'inv-required02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-required02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-required02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-required01'(suite) -> [];
'inv-required01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-required01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-required01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-required00'(suite) -> [];
'inv-required00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-required00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-required00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional25'(suite) -> [];
'optional25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional24'(suite) -> [];
'optional24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional23'(suite) -> [];
'optional23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional22'(suite) -> [];
'optional22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional21'(suite) -> [];
'optional21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional20'(suite) -> [];
'optional20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional14'(suite) -> [];
'optional14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional13'(suite) -> [];
'optional13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional12'(suite) -> [];
'optional12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional11'(suite) -> [];
'optional11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional10'(suite) -> [];
'optional10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional09'(suite) -> [];
'optional09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional08'(suite) -> [];
'optional08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional07'(suite) -> [];
'optional07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional06'(suite) -> [];
'optional06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional05'(suite) -> [];
'optional05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional04'(suite) -> [];
'optional04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional03'(suite) -> [];
'optional03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional02'(suite) -> [];
'optional02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional01'(suite) -> [];
'optional01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa14'(suite) -> [];
'inv-not-sa14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa13'(suite) -> [];
'inv-not-sa13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa12'(suite) -> [];
'inv-not-sa12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa11'(suite) -> [];
'inv-not-sa11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa10'(suite) -> [];
'inv-not-sa10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa09'(suite) -> [];
'inv-not-sa09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa08'(suite) -> [];
'inv-not-sa08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa07'(suite) -> [];
'inv-not-sa07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa06'(suite) -> [];
'inv-not-sa06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa05'(suite) -> [];
'inv-not-sa05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa04'(suite) -> [];
'inv-not-sa04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa02'(suite) -> [];
'inv-not-sa02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa01'(suite) -> [];
'inv-not-sa01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id09'(suite) -> [];
'id09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id08'(suite) -> [];
'id08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id07'(suite) -> [];
'id07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id06'(suite) -> [];
'id06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id05'(suite) -> [];
'id05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id04'(suite) -> [];
'id04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id03'(suite) -> [];
'id03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id02'(suite) -> [];
'id02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id01'(suite) -> [];
'id01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el06'(suite) -> [];
'el06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el05'(suite) -> [];
'el05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el04'(suite) -> [];
'el04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el03'(suite) -> [];
'el03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el02'(suite) -> [];
'el02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el01'(suite) -> [];
'el01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-dtd03'(suite) -> [];
'inv-dtd03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-dtd03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-dtd03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-dtd02'(suite) -> [];
'inv-dtd02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-dtd02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-dtd02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-dtd01'(suite) -> [];
'inv-dtd01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-dtd01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-dtd01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'sgml13'(suite) -> [];
'sgml13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml12'(suite) -> [];
'sgml12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml11'(suite) -> [];
'sgml11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml10'(suite) -> [];
'sgml10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml09'(suite) -> [];
'sgml09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml08'(suite) -> [];
'sgml08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml07'(suite) -> [];
'sgml07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml06'(suite) -> [];
'sgml06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml05'(suite) -> [];
'sgml05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml04'(suite) -> [];
'sgml04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml03'(suite) -> [];
'sgml03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml02'(suite) -> [];
'sgml02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml01'(suite) -> [];
'sgml01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid05'(suite) -> [];
'pubid05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid04'(suite) -> [];
'pubid04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid03'(suite) -> [];
'pubid03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid02'(suite) -> [];
'pubid02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid01'(suite) -> [];
'pubid01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pi'(suite) -> [];
'pi'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pi.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pi.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding07'(suite) -> [];
'encoding07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding06'(suite) -> [];
'encoding06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding05'(suite) -> [];
'encoding05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding04'(suite) -> [];
'encoding04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding03'(suite) -> [];
'encoding03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding02'(suite) -> [];
'encoding02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding01'(suite) -> [];
'encoding01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element04'(suite) -> [];
'element04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element03'(suite) -> [];
'element03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element02'(suite) -> [];
'element02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element01'(suite) -> [];
'element01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element00'(suite) -> [];
'element00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd07'(suite) -> [];
'dtd07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd05'(suite) -> [];
'dtd05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd04'(suite) -> [];
'dtd04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd03'(suite) -> [];
'dtd03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd02'(suite) -> [];
'dtd02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'nwf-dtd01'(suite) -> [];
'nwf-dtd01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"nwf-dtd01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"nwf-dtd01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'nwf-dtd00'(suite) -> [];
'nwf-dtd00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"nwf-dtd00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"nwf-dtd00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'decl01'(suite) -> [];
'decl01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"decl01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"decl01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'content03'(suite) -> [];
'content03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"content03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"content03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'content02'(suite) -> [];
'content02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"content02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"content02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'content01'(suite) -> [];
'content01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"content01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"content01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'cond02'(suite) -> [];
'cond02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"cond02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"cond02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'cond01'(suite) -> [];
'cond01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"cond01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"cond01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist11'(suite) -> [];
'attlist11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist10'(suite) -> [];
'attlist10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist09'(suite) -> [];
'attlist09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist08'(suite) -> [];
'attlist08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist07'(suite) -> [];
'attlist07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist06'(suite) -> [];
'attlist06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist05'(suite) -> [];
'attlist05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist04'(suite) -> [];
'attlist04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist03'(suite) -> [];
'attlist03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist02'(suite) -> [];
'attlist02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist01'(suite) -> [];
'attlist01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa03'(suite) -> [];
'not-wf-sa03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-wf-sa03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-wf-sa03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'uri01'(suite) -> [];
-'uri01'(doc) ->
- ["URI fragments disallowed"];
+%% URI fragments disallowed
'uri01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"uri01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"uri01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["URI fragments disallowed"]}.
%%----------------------------------------------------------------------
-'valid-ext-sa-014'(suite) -> [];
'valid-ext-sa-014'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-014.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-014.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-013'(suite) -> [];
'valid-ext-sa-013'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-013.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-013.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-012'(suite) -> [];
'valid-ext-sa-012'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-012.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-012.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-011'(suite) -> [];
'valid-ext-sa-011'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-011.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-011.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-009'(suite) -> [];
'valid-ext-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-008'(suite) -> [];
'valid-ext-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-007'(suite) -> [];
'valid-ext-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-006'(suite) -> [];
'valid-ext-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-005'(suite) -> [];
'valid-ext-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-004'(suite) -> [];
'valid-ext-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-003'(suite) -> [];
'valid-ext-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-002'(suite) -> [];
'valid-ext-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-001'(suite) -> [];
'valid-ext-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-031'(suite) -> [];
'valid-not-sa-031'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-031.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-031.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-030'(suite) -> [];
'valid-not-sa-030'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-030.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-030.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-029'(suite) -> [];
'valid-not-sa-029'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-029.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-029.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-028'(suite) -> [];
'valid-not-sa-028'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-028.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-028.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-027'(suite) -> [];
'valid-not-sa-027'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-027.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-027.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-026'(suite) -> [];
'valid-not-sa-026'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-026.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-026.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-025'(suite) -> [];
'valid-not-sa-025'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-025.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-025.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-024'(suite) -> [];
'valid-not-sa-024'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-024.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-024.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-023'(suite) -> [];
'valid-not-sa-023'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-023.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-023.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-021'(suite) -> [];
'valid-not-sa-021'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-021.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-021.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-020'(suite) -> [];
'valid-not-sa-020'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-020.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-020.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-019'(suite) -> [];
'valid-not-sa-019'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-019.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-019.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-018'(suite) -> [];
'valid-not-sa-018'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-018.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-018.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-017'(suite) -> [];
'valid-not-sa-017'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-017.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-017.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-016'(suite) -> [];
'valid-not-sa-016'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-016.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-016.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-015'(suite) -> [];
'valid-not-sa-015'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-015.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-015.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-014'(suite) -> [];
'valid-not-sa-014'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-014.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-014.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-013'(suite) -> [];
'valid-not-sa-013'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-013.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-013.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-012'(suite) -> [];
'valid-not-sa-012'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-012.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-012.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-011'(suite) -> [];
'valid-not-sa-011'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-011.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-011.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-010'(suite) -> [];
'valid-not-sa-010'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-010.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-010.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-009'(suite) -> [];
'valid-not-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-008'(suite) -> [];
'valid-not-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-007'(suite) -> [];
'valid-not-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-006'(suite) -> [];
'valid-not-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-005'(suite) -> [];
'valid-not-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-004'(suite) -> [];
'valid-not-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-003'(suite) -> [];
'valid-not-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-002'(suite) -> [];
'valid-not-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-001'(suite) -> [];
'valid-not-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-119'(suite) -> [];
'valid-sa-119'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-119.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-119.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-118'(suite) -> [];
'valid-sa-118'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-118.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-118.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-117'(suite) -> [];
'valid-sa-117'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-117.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-117.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-116'(suite) -> [];
'valid-sa-116'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-116.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-116.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-115'(suite) -> [];
'valid-sa-115'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-115.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-115.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-114'(suite) -> [];
'valid-sa-114'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-114.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-114.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-113'(suite) -> [];
'valid-sa-113'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-113.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-113.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-112'(suite) -> [];
'valid-sa-112'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-112.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-112.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-111'(suite) -> [];
'valid-sa-111'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-111.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-111.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-110'(suite) -> [];
'valid-sa-110'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-110.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-110.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-109'(suite) -> [];
'valid-sa-109'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-109.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-109.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-108'(suite) -> [];
'valid-sa-108'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-108.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-108.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-107'(suite) -> [];
'valid-sa-107'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-107.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-107.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-106'(suite) -> [];
'valid-sa-106'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-106.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-106.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-105'(suite) -> [];
'valid-sa-105'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-105.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-105.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-104'(suite) -> [];
'valid-sa-104'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-104.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-104.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-103'(suite) -> [];
'valid-sa-103'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-103.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-103.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-102'(suite) -> [];
'valid-sa-102'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-102.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-102.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-101'(suite) -> [];
'valid-sa-101'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-101.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-101.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-100'(suite) -> [];
'valid-sa-100'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-100.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-100.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["recursive xml spec"]}.
-'valid-sa-099'(suite) -> [];
'valid-sa-099'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-099.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-099.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-098'(suite) -> [];
'valid-sa-098'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-098.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-098.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-097'(suite) -> [];
'valid-sa-097'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-097.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-097.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-096'(suite) -> [];
'valid-sa-096'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-096.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-096.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-095'(suite) -> [];
'valid-sa-095'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-095.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-095.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-094'(suite) -> [];
'valid-sa-094'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-094.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-094.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-093'(suite) -> [];
'valid-sa-093'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-093.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-093.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-092'(suite) -> [];
'valid-sa-092'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-092.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-092.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-091'(suite) -> [];
'valid-sa-091'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-091.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-091.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-090'(suite) -> [];
'valid-sa-090'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-090.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-090.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-089'(suite) -> [];
'valid-sa-089'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-089.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-089.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-088'(suite) -> [];
'valid-sa-088'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-088.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-088.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-087'(suite) -> [];
'valid-sa-087'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-087.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-087.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-086'(suite) -> [];
'valid-sa-086'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-086.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-086.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-085'(suite) -> [];
'valid-sa-085'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-085.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-085.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-084'(suite) -> [];
'valid-sa-084'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-084.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-084.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-083'(suite) -> [];
'valid-sa-083'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-083.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-083.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-082'(suite) -> [];
'valid-sa-082'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-082.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-082.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-081'(suite) -> [];
'valid-sa-081'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-081.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-081.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-080'(suite) -> [];
'valid-sa-080'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-080.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-080.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-079'(suite) -> [];
'valid-sa-079'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-079.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-079.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-078'(suite) -> [];
'valid-sa-078'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-078.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-078.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-077'(suite) -> [];
'valid-sa-077'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-077.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-077.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-076'(suite) -> [];
'valid-sa-076'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-076.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-076.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-075'(suite) -> [];
'valid-sa-075'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-075.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-075.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-074'(suite) -> [];
'valid-sa-074'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-074.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-074.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-073'(suite) -> [];
'valid-sa-073'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-073.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-073.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-072'(suite) -> [];
'valid-sa-072'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-072.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-072.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-071'(suite) -> [];
'valid-sa-071'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-071.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-071.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-070'(suite) -> [];
'valid-sa-070'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-070.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-070.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-069'(suite) -> [];
'valid-sa-069'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-069.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-069.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-068'(suite) -> [];
'valid-sa-068'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-068.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-068.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-067'(suite) -> [];
'valid-sa-067'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-067.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-067.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-066'(suite) -> [];
'valid-sa-066'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-066.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-066.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-065'(suite) -> [];
'valid-sa-065'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-065.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-065.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-064'(suite) -> [];
'valid-sa-064'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-064.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-064.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle UTF-8 encoded names, when they are converted to atoms"]}.
-'valid-sa-063'(suite) -> [];
'valid-sa-063'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-063.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-063.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle Unicode integer (UTF-8) encoded names, when they are converted to atoms"]}.
-'valid-sa-062'(suite) -> [];
'valid-sa-062'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-062.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-062.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-061'(suite) -> [];
'valid-sa-061'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-061.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-061.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-060'(suite) -> [];
'valid-sa-060'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-060.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-060.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-059'(suite) -> [];
'valid-sa-059'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-059.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-059.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-058'(suite) -> [];
'valid-sa-058'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-058.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-058.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-057'(suite) -> [];
'valid-sa-057'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-057.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-057.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-056'(suite) -> [];
'valid-sa-056'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-056.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-056.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-055'(suite) -> [];
'valid-sa-055'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-055.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-055.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-054'(suite) -> [];
'valid-sa-054'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-054.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-054.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-053'(suite) -> [];
'valid-sa-053'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-053.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-053.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-052'(suite) -> [];
'valid-sa-052'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-052.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-052.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-051'(suite) -> [];
'valid-sa-051'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-051.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-051.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle Unicode integer (UTF-16) encoded names, when they are converted to atoms"]}.
-'valid-sa-050'(suite) -> [];
'valid-sa-050'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-050.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-050.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-049'(suite) -> [];
'valid-sa-049'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-049.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-049.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-048'(suite) -> [];
'valid-sa-048'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-048.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-048.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-047'(suite) -> [];
'valid-sa-047'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-047.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-047.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-046'(suite) -> [];
'valid-sa-046'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-046.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-046.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-045'(suite) -> [];
'valid-sa-045'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-045.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-045.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-044'(suite) -> [];
'valid-sa-044'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-044.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-044.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-043'(suite) -> [];
'valid-sa-043'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-043.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-043.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-042'(suite) -> [];
'valid-sa-042'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-042.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-042.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-041'(suite) -> [];
'valid-sa-041'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-041.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-041.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-040'(suite) -> [];
'valid-sa-040'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-040.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-040.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-039'(suite) -> [];
'valid-sa-039'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-039.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-039.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-038'(suite) -> [];
'valid-sa-038'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-038.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-038.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-037'(suite) -> [];
'valid-sa-037'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-037.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-037.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-036'(suite) -> [];
'valid-sa-036'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-036.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-036.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-035'(suite) -> [];
'valid-sa-035'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-035.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-035.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-034'(suite) -> [];
'valid-sa-034'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-034.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-034.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-033'(suite) -> [];
'valid-sa-033'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-033.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-033.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-032'(suite) -> [];
'valid-sa-032'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-032.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-032.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-031'(suite) -> [];
'valid-sa-031'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-031.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-031.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-030'(suite) -> [];
'valid-sa-030'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-030.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-030.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-029'(suite) -> [];
'valid-sa-029'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-029.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-029.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-028'(suite) -> [];
'valid-sa-028'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-028.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-028.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-027'(suite) -> [];
'valid-sa-027'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-027.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-027.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-026'(suite) -> [];
'valid-sa-026'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-026.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-026.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-025'(suite) -> [];
'valid-sa-025'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-025.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-025.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-024'(suite) -> [];
'valid-sa-024'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-024.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-024.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-023'(suite) -> [];
'valid-sa-023'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-023.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-023.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-022'(suite) -> [];
'valid-sa-022'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-022.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-022.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-021'(suite) -> [];
'valid-sa-021'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-021.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-021.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-020'(suite) -> [];
'valid-sa-020'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-020.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-020.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-019'(suite) -> [];
'valid-sa-019'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-019.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-019.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-018'(suite) -> [];
'valid-sa-018'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-018.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-018.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-017'(suite) -> [];
'valid-sa-017'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-017.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-017.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-016'(suite) -> [];
'valid-sa-016'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-016.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-016.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-015'(suite) -> [];
'valid-sa-015'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-015.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-015.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-014'(suite) -> [];
'valid-sa-014'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-014.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-014.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-013'(suite) -> [];
'valid-sa-013'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-013.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-013.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-012'(suite) -> [];
'valid-sa-012'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-012.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-012.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-011'(suite) -> [];
'valid-sa-011'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-011.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-011.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-010'(suite) -> [];
'valid-sa-010'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-010.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-010.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-009'(suite) -> [];
'valid-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-008'(suite) -> [];
'valid-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-007'(suite) -> [];
'valid-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-006'(suite) -> [];
'valid-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-005'(suite) -> [];
'valid-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-004'(suite) -> [];
'valid-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-003'(suite) -> [];
'valid-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-002'(suite) -> [];
'valid-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-001'(suite) -> [];
'valid-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'invalid-not-sa-022'(suite) -> [];
'invalid-not-sa-022'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"invalid-not-sa-022.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"invalid-not-sa-022.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'invalid--006'(suite) -> [];
'invalid--006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"invalid--006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"invalid--006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'invalid--005'(suite) -> [];
'invalid--005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"invalid--005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"invalid--005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'invalid--002'(suite) -> [];
'invalid--002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"invalid--002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"invalid--002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-ext-sa-003'(suite) -> [];
'not-wf-ext-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-ext-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-ext-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-ext-sa-002'(suite) -> [];
'not-wf-ext-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-ext-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-ext-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-ext-sa-001'(suite) -> [];
'not-wf-ext-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-ext-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-ext-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-009'(suite) -> [];
'not-wf-not-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-008'(suite) -> [];
'not-wf-not-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-007'(suite) -> [];
'not-wf-not-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-006'(suite) -> [];
'not-wf-not-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-005'(suite) -> [];
'not-wf-not-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-004'(suite) -> [];
'not-wf-not-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-003'(suite) -> [];
'not-wf-not-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-002'(suite) -> [];
'not-wf-not-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-001'(suite) -> [];
'not-wf-not-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-186'(suite) -> [];
'not-wf-sa-186'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-186.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-186.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-185'(suite) -> [];
'not-wf-sa-185'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-185.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-185.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-184'(suite) -> [];
'not-wf-sa-184'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-184.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-184.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-183'(suite) -> [];
'not-wf-sa-183'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-183.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-183.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-182'(suite) -> [];
'not-wf-sa-182'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-182.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-182.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-181'(suite) -> [];
'not-wf-sa-181'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-181.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-181.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-180'(suite) -> [];
'not-wf-sa-180'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-180.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-180.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-179'(suite) -> [];
'not-wf-sa-179'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-179.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-179.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-178'(suite) -> [];
'not-wf-sa-178'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-178.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-178.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-177'(suite) -> [];
'not-wf-sa-177'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-177.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-177.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-176'(suite) -> [];
'not-wf-sa-176'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-176.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-176.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-175'(suite) -> [];
'not-wf-sa-175'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-175.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-175.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-174'(suite) -> [];
'not-wf-sa-174'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-174.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-174.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-173'(suite) -> [];
'not-wf-sa-173'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-173.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-173.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-172'(suite) -> [];
'not-wf-sa-172'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-172.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-172.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-171'(suite) -> [];
'not-wf-sa-171'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-171.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-171.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-170'(suite) -> [];
'not-wf-sa-170'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-170.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-170.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of UCS-4 characters"]}.
-'not-wf-sa-169'(suite) -> [];
'not-wf-sa-169'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-169.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-169.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of an illegal unpaired surrogate (DC00)"]}.
-'not-wf-sa-168'(suite) -> [];
'not-wf-sa-168'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-168.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-168.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of an illegal unpaired surrogate (D800)"]}.
-'not-wf-sa-167'(suite) -> [];
'not-wf-sa-167'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-167.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-167.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of an illegal FFFE"]}.
-'not-wf-sa-166'(suite) -> [];
'not-wf-sa-166'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-166.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-166.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of an illegal FFFE"]}.
-'not-wf-sa-165'(suite) -> [];
'not-wf-sa-165'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-165.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-165.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-164'(suite) -> [];
'not-wf-sa-164'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-164.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-164.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-163'(suite) -> [];
'not-wf-sa-163'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-163.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-163.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-162'(suite) -> [];
'not-wf-sa-162'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-162.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-162.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-161'(suite) -> [];
'not-wf-sa-161'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-161.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-161.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-160'(suite) -> [];
'not-wf-sa-160'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-160.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-160.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-159'(suite) -> [];
'not-wf-sa-159'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-159.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-159.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-158'(suite) -> [];
'not-wf-sa-158'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-158.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-158.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-157'(suite) -> [];
'not-wf-sa-157'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-157.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-157.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-156'(suite) -> [];
'not-wf-sa-156'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-156.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-156.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-155'(suite) -> [];
'not-wf-sa-155'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-155.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-155.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-154'(suite) -> [];
'not-wf-sa-154'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-154.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-154.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-153'(suite) -> [];
'not-wf-sa-153'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-153.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-153.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-152'(suite) -> [];
'not-wf-sa-152'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-152.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-152.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-151'(suite) -> [];
'not-wf-sa-151'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-151.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-151.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["don't bother wath's in the Misc production"]}.
-'not-wf-sa-150'(suite) -> [];
'not-wf-sa-150'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-150.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-150.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-149'(suite) -> [];
'not-wf-sa-149'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-149.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-149.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-148'(suite) -> [];
'not-wf-sa-148'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-148.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-148.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-147'(suite) -> [];
'not-wf-sa-147'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-147.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-147.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-146'(suite) -> [];
'not-wf-sa-146'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-146.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-146.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-145'(suite) -> [];
'not-wf-sa-145'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-145.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-145.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-144'(suite) -> [];
'not-wf-sa-144'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-144.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-144.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-143'(suite) -> [];
'not-wf-sa-143'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-143.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-143.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-142'(suite) -> [];
'not-wf-sa-142'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-142.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-142.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-141'(suite) -> [];
'not-wf-sa-141'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-141.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-141.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-140'(suite) -> [];
'not-wf-sa-140'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-140.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-140.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-139'(suite) -> [];
'not-wf-sa-139'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-139.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-139.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-138'(suite) -> [];
'not-wf-sa-138'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-138.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-138.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-137'(suite) -> [];
'not-wf-sa-137'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-137.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-137.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-136'(suite) -> [];
'not-wf-sa-136'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-136.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-136.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-135'(suite) -> [];
'not-wf-sa-135'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-135.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-135.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-134'(suite) -> [];
'not-wf-sa-134'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-134.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-134.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-133'(suite) -> [];
'not-wf-sa-133'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-133.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-133.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-132'(suite) -> [];
'not-wf-sa-132'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-132.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-132.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-131'(suite) -> [];
'not-wf-sa-131'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-131.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-131.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-130'(suite) -> [];
'not-wf-sa-130'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-130.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-130.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-129'(suite) -> [];
'not-wf-sa-129'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-129.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-129.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-128'(suite) -> [];
'not-wf-sa-128'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-128.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-128.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-127'(suite) -> [];
'not-wf-sa-127'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-127.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-127.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-126'(suite) -> [];
'not-wf-sa-126'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-126.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-126.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-125'(suite) -> [];
'not-wf-sa-125'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-125.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-125.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-124'(suite) -> [];
'not-wf-sa-124'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-124.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-124.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-123'(suite) -> [];
'not-wf-sa-123'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-123.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-123.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-122'(suite) -> [];
'not-wf-sa-122'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-122.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-122.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-121'(suite) -> [];
'not-wf-sa-121'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-121.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-121.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-120'(suite) -> [];
'not-wf-sa-120'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-120.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-120.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-119'(suite) -> [];
'not-wf-sa-119'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-119.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-119.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-118'(suite) -> [];
'not-wf-sa-118'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-118.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-118.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-117'(suite) -> [];
'not-wf-sa-117'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-117.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-117.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-116'(suite) -> [];
'not-wf-sa-116'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-116.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-116.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-115'(suite) -> [];
'not-wf-sa-115'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-115.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-115.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-114'(suite) -> [];
'not-wf-sa-114'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-114.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-114.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-113'(suite) -> [];
'not-wf-sa-113'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-113.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-113.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-112'(suite) -> [];
'not-wf-sa-112'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-112.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-112.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-111'(suite) -> [];
'not-wf-sa-111'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-111.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-111.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-110'(suite) -> [];
'not-wf-sa-110'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-110.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-110.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-109'(suite) -> [];
'not-wf-sa-109'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-109.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-109.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-108'(suite) -> [];
'not-wf-sa-108'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-108.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-108.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-107'(suite) -> [];
'not-wf-sa-107'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-107.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-107.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-106'(suite) -> [];
'not-wf-sa-106'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-106.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-106.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-105'(suite) -> [];
'not-wf-sa-105'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-105.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-105.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-104'(suite) -> [];
'not-wf-sa-104'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-104.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-104.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-103'(suite) -> [];
'not-wf-sa-103'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-103.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-103.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-102'(suite) -> [];
'not-wf-sa-102'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-102.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-102.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-101'(suite) -> [];
'not-wf-sa-101'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-101.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-101.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-100'(suite) -> [];
'not-wf-sa-100'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-100.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-100.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-099'(suite) -> [];
'not-wf-sa-099'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-099.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-099.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-098'(suite) -> [];
'not-wf-sa-098'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-098.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-098.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-097'(suite) -> [];
'not-wf-sa-097'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-097.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-097.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-096'(suite) -> [];
'not-wf-sa-096'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-096.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-096.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-095'(suite) -> [];
'not-wf-sa-095'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-095.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-095.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-094'(suite) -> [];
'not-wf-sa-094'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-094.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-094.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-093'(suite) -> [];
'not-wf-sa-093'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-093.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-093.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-092'(suite) -> [];
'not-wf-sa-092'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-092.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-092.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-091'(suite) -> [];
'not-wf-sa-091'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-091.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-091.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-090'(suite) -> [];
'not-wf-sa-090'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-090.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-090.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-089'(suite) -> [];
'not-wf-sa-089'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-089.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-089.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-088'(suite) -> [];
'not-wf-sa-088'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-088.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-088.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-087'(suite) -> [];
'not-wf-sa-087'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-087.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-087.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-086'(suite) -> [];
'not-wf-sa-086'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-086.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-086.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-085'(suite) -> [];
'not-wf-sa-085'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-085.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-085.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-084'(suite) -> [];
'not-wf-sa-084'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-084.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-084.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-083'(suite) -> [];
'not-wf-sa-083'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-083.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-083.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-082'(suite) -> [];
'not-wf-sa-082'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-082.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-082.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-081'(suite) -> [];
'not-wf-sa-081'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-081.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-081.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-080'(suite) -> [];
'not-wf-sa-080'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-080.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-080.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-079'(suite) -> [];
'not-wf-sa-079'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-079.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-079.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-078'(suite) -> [];
'not-wf-sa-078'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-078.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-078.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-077'(suite) -> [];
'not-wf-sa-077'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-077.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-077.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-076'(suite) -> [];
'not-wf-sa-076'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-076.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-076.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-075'(suite) -> [];
'not-wf-sa-075'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-075.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-075.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-074'(suite) -> [];
'not-wf-sa-074'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-074.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-074.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-073'(suite) -> [];
'not-wf-sa-073'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-073.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-073.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-072'(suite) -> [];
'not-wf-sa-072'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-072.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-072.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-071'(suite) -> [];
'not-wf-sa-071'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-071.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-071.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-070'(suite) -> [];
'not-wf-sa-070'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-070.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-070.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-069'(suite) -> [];
'not-wf-sa-069'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-069.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-069.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-068'(suite) -> [];
'not-wf-sa-068'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-068.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-068.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-067'(suite) -> [];
'not-wf-sa-067'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-067.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-067.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-066'(suite) -> [];
'not-wf-sa-066'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-066.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-066.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-065'(suite) -> [];
'not-wf-sa-065'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-065.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-065.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-064'(suite) -> [];
'not-wf-sa-064'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-064.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-064.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-063'(suite) -> [];
'not-wf-sa-063'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-063.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-063.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-062'(suite) -> [];
'not-wf-sa-062'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-062.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-062.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-061'(suite) -> [];
'not-wf-sa-061'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-061.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-061.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-060'(suite) -> [];
'not-wf-sa-060'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-060.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-060.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-059'(suite) -> [];
'not-wf-sa-059'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-059.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-059.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-058'(suite) -> [];
'not-wf-sa-058'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-058.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-058.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-057'(suite) -> [];
'not-wf-sa-057'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-057.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-057.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-056'(suite) -> [];
'not-wf-sa-056'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-056.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-056.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-055'(suite) -> [];
'not-wf-sa-055'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-055.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-055.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-054'(suite) -> [];
'not-wf-sa-054'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-054.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-054.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-053'(suite) -> [];
'not-wf-sa-053'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-053.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-053.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-052'(suite) -> [];
'not-wf-sa-052'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-052.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-052.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-051'(suite) -> [];
'not-wf-sa-051'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-051.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-051.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-050'(suite) -> [];
'not-wf-sa-050'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-050.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-050.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-049'(suite) -> [];
'not-wf-sa-049'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-049.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-049.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-048'(suite) -> [];
'not-wf-sa-048'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-048.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-048.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-047'(suite) -> [];
'not-wf-sa-047'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-047.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-047.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-046'(suite) -> [];
'not-wf-sa-046'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-046.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-046.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-045'(suite) -> [];
'not-wf-sa-045'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-045.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-045.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-044'(suite) -> [];
'not-wf-sa-044'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-044.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-044.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-043'(suite) -> [];
'not-wf-sa-043'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-043.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-043.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-042'(suite) -> [];
'not-wf-sa-042'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-042.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-042.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-041'(suite) -> [];
'not-wf-sa-041'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-041.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-041.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-040'(suite) -> [];
'not-wf-sa-040'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-040.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-040.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-039'(suite) -> [];
'not-wf-sa-039'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-039.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-039.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-038'(suite) -> [];
'not-wf-sa-038'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-038.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-038.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-037'(suite) -> [];
'not-wf-sa-037'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-037.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-037.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-036'(suite) -> [];
'not-wf-sa-036'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-036.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-036.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-035'(suite) -> [];
'not-wf-sa-035'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-035.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-035.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-034'(suite) -> [];
'not-wf-sa-034'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-034.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-034.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-033'(suite) -> [];
'not-wf-sa-033'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-033.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-033.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-032'(suite) -> [];
'not-wf-sa-032'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-032.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-032.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-031'(suite) -> [];
'not-wf-sa-031'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-031.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-031.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-030'(suite) -> [];
'not-wf-sa-030'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-030.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-030.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-029'(suite) -> [];
'not-wf-sa-029'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-029.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-029.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-028'(suite) -> [];
'not-wf-sa-028'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-028.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-028.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-027'(suite) -> [];
'not-wf-sa-027'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-027.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-027.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-026'(suite) -> [];
'not-wf-sa-026'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-026.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-026.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-025'(suite) -> [];
'not-wf-sa-025'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-025.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-025.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-024'(suite) -> [];
'not-wf-sa-024'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-024.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-024.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-023'(suite) -> [];
'not-wf-sa-023'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-023.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-023.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-022'(suite) -> [];
'not-wf-sa-022'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-022.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-022.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-021'(suite) -> [];
'not-wf-sa-021'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-021.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-021.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-020'(suite) -> [];
'not-wf-sa-020'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-020.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-020.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-019'(suite) -> [];
'not-wf-sa-019'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-019.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-019.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-018'(suite) -> [];
'not-wf-sa-018'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-018.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-018.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-017'(suite) -> [];
'not-wf-sa-017'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-017.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-017.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-016'(suite) -> [];
'not-wf-sa-016'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-016.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-016.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-015'(suite) -> [];
'not-wf-sa-015'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-015.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-015.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-014'(suite) -> [];
'not-wf-sa-014'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-014.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-014.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-013'(suite) -> [];
'not-wf-sa-013'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-013.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-013.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-012'(suite) -> [];
'not-wf-sa-012'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-012.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-012.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-011'(suite) -> [];
'not-wf-sa-011'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-011.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-011.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-010'(suite) -> [];
'not-wf-sa-010'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-010.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-010.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-009'(suite) -> [];
'not-wf-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-008'(suite) -> [];
'not-wf-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-007'(suite) -> [];
'not-wf-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-006'(suite) -> [];
'not-wf-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-005'(suite) -> [];
'not-wf-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-004'(suite) -> [];
'not-wf-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-003'(suite) -> [];
'not-wf-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-002'(suite) -> [];
'not-wf-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-001'(suite) -> [];
'not-wf-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'japanese-weekly-utf-8'(suite) -> [];
'japanese-weekly-utf-8'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-utf-8.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-utf-8.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of japanese characters"]}.
-'japanese-weekly-utf-16'(suite) -> [];
'japanese-weekly-utf-16'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-utf-16.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-utf-16.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support for UTF-16 encoding, and XML names which contain Japanese characters."]}.
-'japanese-weekly-shift_jis'(suite) -> [];
'japanese-weekly-shift_jis'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-shift_jis.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-shift_jis.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-weekly-little'(suite) -> [];
'japanese-weekly-little'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-little.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-little.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support for little-endian UTF-16 encoding, and XML names which contain Japanese characters."]}.
-'japanese-weekly-iso-2022-jp'(suite) -> [];
'japanese-weekly-iso-2022-jp'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-iso-2022-jp.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-iso-2022-jp.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-weekly-euc-jp'(suite) -> [];
'japanese-weekly-euc-jp'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-euc-jp.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-euc-jp.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-pr-xml-utf-8'(suite) -> [];
'japanese-pr-xml-utf-8'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-utf-8.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-utf-8.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support for UTF-8 text which relies on Japanese characters"]}.
-'japanese-pr-xml-utf-16'(suite) -> [];
'japanese-pr-xml-utf-16'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-utf-16.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-utf-16.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support UTF-16 text which relies on Japanese characters."]}.
-'japanese-pr-xml-shift_jis'(suite) -> [];
'japanese-pr-xml-shift_jis'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-shift_jis.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-shift_jis.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-pr-xml-little'(suite) -> [];
'japanese-pr-xml-little'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-little.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-little.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support for little-endian UTF-16 text which relies on Japanese characters."]}.
-'japanese-pr-xml-iso-2022-jp'(suite) -> [];
'japanese-pr-xml-iso-2022-jp'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-iso-2022-jp.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-iso-2022-jp.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-pr-xml-euc-jp'(suite) -> [];
'japanese-pr-xml-euc-jp'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-euc-jp.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-euc-jp.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'o-p11pass1'(suite) -> [];
'o-p11pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p11pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p11pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76fail4'(suite) -> [];
'o-p76fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76fail3'(suite) -> [];
'o-p76fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76fail2'(suite) -> [];
'o-p76fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76fail1'(suite) -> [];
'o-p76fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail6'(suite) -> [];
'o-p75fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail5'(suite) -> [];
'o-p75fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail4'(suite) -> [];
'o-p75fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail3'(suite) -> [];
'o-p75fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail2'(suite) -> [];
'o-p75fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail1'(suite) -> [];
'o-p75fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p74fail3'(suite) -> [];
'o-p74fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p74fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p74fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p74fail2'(suite) -> [];
'o-p74fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p74fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p74fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p74fail1'(suite) -> [];
'o-p74fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p74fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p74fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail5'(suite) -> [];
'o-p73fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail4'(suite) -> [];
'o-p73fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail3'(suite) -> [];
'o-p73fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail2'(suite) -> [];
'o-p73fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail1'(suite) -> [];
'o-p73fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72fail4'(suite) -> [];
'o-p72fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72fail3'(suite) -> [];
'o-p72fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72fail2'(suite) -> [];
'o-p72fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72fail1'(suite) -> [];
'o-p72fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71fail4'(suite) -> [];
'o-p71fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71fail3'(suite) -> [];
'o-p71fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71fail2'(suite) -> [];
'o-p71fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71fail1'(suite) -> [];
'o-p71fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p70fail1'(suite) -> [];
'o-p70fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p70fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p70fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p69fail3'(suite) -> [];
'o-p69fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p69fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p69fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p69fail2'(suite) -> [];
'o-p69fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p69fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p69fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p69fail1'(suite) -> [];
'o-p69fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p69fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p69fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p68fail3'(suite) -> [];
'o-p68fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p68fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p68fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p68fail2'(suite) -> [];
'o-p68fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p68fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p68fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p68fail1'(suite) -> [];
'o-p68fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p68fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p68fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail6'(suite) -> [];
'o-p66fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail5'(suite) -> [];
'o-p66fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail4'(suite) -> [];
'o-p66fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail3'(suite) -> [];
'o-p66fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail2'(suite) -> [];
'o-p66fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail1'(suite) -> [];
'o-p66fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p64fail2'(suite) -> [];
'o-p64fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p64fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p64fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p64fail1'(suite) -> [];
'o-p64fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p64fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p64fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p63fail2'(suite) -> [];
'o-p63fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p63fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p63fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p63fail1'(suite) -> [];
'o-p63fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p63fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p63fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p62fail2'(suite) -> [];
'o-p62fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p62fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p62fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p62fail1'(suite) -> [];
'o-p62fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p62fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p62fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p61fail1'(suite) -> [];
'o-p61fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p61fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p61fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail5'(suite) -> [];
'o-p60fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail4'(suite) -> [];
'o-p60fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail3'(suite) -> [];
'o-p60fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail2'(suite) -> [];
'o-p60fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail1'(suite) -> [];
'o-p60fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p59fail3'(suite) -> [];
'o-p59fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p59fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p59fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p59fail2'(suite) -> [];
'o-p59fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p59fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p59fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p59fail1'(suite) -> [];
'o-p59fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p59fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p59fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail8'(suite) -> [];
'o-p58fail8'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail8.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail8.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail7'(suite) -> [];
'o-p58fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail6'(suite) -> [];
'o-p58fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail5'(suite) -> [];
'o-p58fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail4'(suite) -> [];
'o-p58fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail3'(suite) -> [];
'o-p58fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail2'(suite) -> [];
'o-p58fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail1'(suite) -> [];
'o-p58fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p57fail1'(suite) -> [];
'o-p57fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p57fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p57fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail5'(suite) -> [];
'o-p56fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail4'(suite) -> [];
'o-p56fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail3'(suite) -> [];
'o-p56fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail2'(suite) -> [];
'o-p56fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail1'(suite) -> [];
'o-p56fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p55fail1'(suite) -> [];
'o-p55fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p55fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p55fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p54fail1'(suite) -> [];
'o-p54fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p54fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p54fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail5'(suite) -> [];
'o-p53fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail4'(suite) -> [];
'o-p53fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail3'(suite) -> [];
'o-p53fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail2'(suite) -> [];
'o-p53fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail1'(suite) -> [];
'o-p53fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p52fail2'(suite) -> [];
'o-p52fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p52fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p52fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p52fail1'(suite) -> [];
'o-p52fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p52fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p52fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail7'(suite) -> [];
'o-p51fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail6'(suite) -> [];
'o-p51fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail5'(suite) -> [];
'o-p51fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail4'(suite) -> [];
'o-p51fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail3'(suite) -> [];
'o-p51fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail2'(suite) -> [];
'o-p51fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail1'(suite) -> [];
'o-p51fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p50fail1'(suite) -> [];
'o-p50fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p50fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p50fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p49fail1'(suite) -> [];
'o-p49fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p49fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p49fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p48fail2'(suite) -> [];
'o-p48fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p48fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p48fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p48fail1'(suite) -> [];
'o-p48fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p48fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p48fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47fail4'(suite) -> [];
'o-p47fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47fail3'(suite) -> [];
'o-p47fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47fail2'(suite) -> [];
'o-p47fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47fail1'(suite) -> [];
'o-p47fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail6'(suite) -> [];
'o-p46fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail5'(suite) -> [];
'o-p46fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail4'(suite) -> [];
'o-p46fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail3'(suite) -> [];
'o-p46fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail2'(suite) -> [];
'o-p46fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail1'(suite) -> [];
'o-p46fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45fail4'(suite) -> [];
'o-p45fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45fail3'(suite) -> [];
'o-p45fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45fail2'(suite) -> [];
'o-p45fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45fail1'(suite) -> [];
'o-p45fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail5'(suite) -> [];
'o-p44fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail4'(suite) -> [];
'o-p44fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail3'(suite) -> [];
'o-p44fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail2'(suite) -> [];
'o-p44fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail1'(suite) -> [];
'o-p44fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p43fail3'(suite) -> [];
'o-p43fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p43fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p43fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p43fail2'(suite) -> [];
'o-p43fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p43fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p43fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p43fail1'(suite) -> [];
'o-p43fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p43fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p43fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42fail3'(suite) -> [];
'o-p42fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42fail2'(suite) -> [];
'o-p42fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42fail1'(suite) -> [];
'o-p42fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41fail3'(suite) -> [];
'o-p41fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41fail2'(suite) -> [];
'o-p41fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41fail1'(suite) -> [];
'o-p41fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40fail4'(suite) -> [];
'o-p40fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40fail3'(suite) -> [];
'o-p40fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40fail2'(suite) -> [];
'o-p40fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40fail1'(suite) -> [];
'o-p40fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail5'(suite) -> [];
'o-p39fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail4'(suite) -> [];
'o-p39fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail3'(suite) -> [];
'o-p39fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail2'(suite) -> [];
'o-p39fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail1'(suite) -> [];
'o-p39fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail5'(suite) -> [];
'o-p32fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail4'(suite) -> [];
'o-p32fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail3'(suite) -> [];
'o-p32fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail2'(suite) -> [];
'o-p32fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail1'(suite) -> [];
'o-p32fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p31fail1'(suite) -> [];
'o-p31fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p31fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p31fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p30fail1'(suite) -> [];
'o-p30fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p30fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p30fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p29fail1'(suite) -> [];
'o-p29fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p29fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p29fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28fail1'(suite) -> [];
'o-p28fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27fail1'(suite) -> [];
'o-p27fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p26fail2'(suite) -> [];
'o-p26fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p26fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p26fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p26fail1'(suite) -> [];
'o-p26fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p26fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p26fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p25fail1'(suite) -> [];
'o-p25fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p25fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p25fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24fail2'(suite) -> [];
'o-p24fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24fail1'(suite) -> [];
'o-p24fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail5'(suite) -> [];
'o-p23fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail4'(suite) -> [];
'o-p23fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail3'(suite) -> [];
'o-p23fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail2'(suite) -> [];
'o-p23fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail1'(suite) -> [];
'o-p23fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22fail2'(suite) -> [];
'o-p22fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22fail1'(suite) -> [];
'o-p22fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p18fail3'(suite) -> [];
'o-p18fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p18fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p18fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p18fail2'(suite) -> [];
'o-p18fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p18fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p18fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p18fail1'(suite) -> [];
'o-p18fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p18fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p18fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16fail3'(suite) -> [];
'o-p16fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16fail2'(suite) -> [];
'o-p16fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16fail1'(suite) -> [];
'o-p16fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p15fail3'(suite) -> [];
'o-p15fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p15fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p15fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p15fail2'(suite) -> [];
'o-p15fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p15fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p15fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p15fail1'(suite) -> [];
'o-p15fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p15fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p15fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p14fail3'(suite) -> [];
'o-p14fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p14fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p14fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p14fail2'(suite) -> [];
'o-p14fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p14fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p14fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p14fail1'(suite) -> [];
'o-p14fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p14fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p14fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail7'(suite) -> [];
'o-p12fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail6'(suite) -> [];
'o-p12fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail5'(suite) -> [];
'o-p12fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail4'(suite) -> [];
'o-p12fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail3'(suite) -> [];
'o-p12fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail2'(suite) -> [];
'o-p12fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail1'(suite) -> [];
'o-p12fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p11fail2'(suite) -> [];
'o-p11fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p11fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p11fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p11fail1'(suite) -> [];
'o-p11fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p11fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p11fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p10fail3'(suite) -> [];
'o-p10fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p10fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p10fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p10fail2'(suite) -> [];
'o-p10fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p10fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p10fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p10fail1'(suite) -> [];
'o-p10fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p10fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p10fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail5'(suite) -> [];
'o-p09fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail4'(suite) -> [];
'o-p09fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail3'(suite) -> [];
'o-p09fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail2'(suite) -> [];
'o-p09fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail1'(suite) -> [];
'o-p09fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail5'(suite) -> [];
'o-p05fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail4'(suite) -> [];
'o-p05fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail3'(suite) -> [];
'o-p05fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail2'(suite) -> [];
'o-p05fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail1'(suite) -> [];
'o-p05fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p04fail3'(suite) -> [];
'o-p04fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p04fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p04fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p04fail2'(suite) -> [];
'o-p04fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p04fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p04fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p04fail1'(suite) -> [];
'o-p04fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p04fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p04fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail9'(suite) -> [];
'o-p03fail9'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail9.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail9.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail8'(suite) -> [];
'o-p03fail8'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail8.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail8.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail7'(suite) -> [];
'o-p03fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail5'(suite) -> [];
'o-p03fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail4'(suite) -> [];
'o-p03fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail3'(suite) -> [];
'o-p03fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail29'(suite) -> [];
'o-p03fail29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail28'(suite) -> [];
'o-p03fail28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail27'(suite) -> [];
'o-p03fail27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail26'(suite) -> [];
'o-p03fail26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail25'(suite) -> [];
'o-p03fail25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail24'(suite) -> [];
'o-p03fail24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail23'(suite) -> [];
'o-p03fail23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail22'(suite) -> [];
'o-p03fail22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail21'(suite) -> [];
'o-p03fail21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail20'(suite) -> [];
'o-p03fail20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail2'(suite) -> [];
'o-p03fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail19'(suite) -> [];
'o-p03fail19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail18'(suite) -> [];
'o-p03fail18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail17'(suite) -> [];
'o-p03fail17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail16'(suite) -> [];
'o-p03fail16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail15'(suite) -> [];
'o-p03fail15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail14'(suite) -> [];
'o-p03fail14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail13'(suite) -> [];
'o-p03fail13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail12'(suite) -> [];
'o-p03fail12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail11'(suite) -> [];
'o-p03fail11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail10'(suite) -> [];
'o-p03fail10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail1'(suite) -> [];
'o-p03fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail9'(suite) -> [];
'o-p02fail9'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail9.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail9.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail8'(suite) -> [];
'o-p02fail8'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail8.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail8.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail7'(suite) -> [];
'o-p02fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail6'(suite) -> [];
'o-p02fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail5'(suite) -> [];
'o-p02fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail4'(suite) -> [];
'o-p02fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail31'(suite) -> [];
'o-p02fail31'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail31.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail31.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail30'(suite) -> [];
'o-p02fail30'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail30.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail30.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail3'(suite) -> [];
'o-p02fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail29'(suite) -> [];
'o-p02fail29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail28'(suite) -> [];
'o-p02fail28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail27'(suite) -> [];
'o-p02fail27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail26'(suite) -> [];
'o-p02fail26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail25'(suite) -> [];
'o-p02fail25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail24'(suite) -> [];
'o-p02fail24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail23'(suite) -> [];
'o-p02fail23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail22'(suite) -> [];
'o-p02fail22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail21'(suite) -> [];
'o-p02fail21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail20'(suite) -> [];
'o-p02fail20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail2'(suite) -> [];
'o-p02fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail19'(suite) -> [];
'o-p02fail19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail18'(suite) -> [];
'o-p02fail18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail17'(suite) -> [];
'o-p02fail17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail16'(suite) -> [];
'o-p02fail16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail15'(suite) -> [];
'o-p02fail15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail14'(suite) -> [];
'o-p02fail14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail13'(suite) -> [];
'o-p02fail13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail12'(suite) -> [];
'o-p02fail12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail11'(suite) -> [];
'o-p02fail11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail10'(suite) -> [];
'o-p02fail10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail1'(suite) -> [];
'o-p02fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01fail4'(suite) -> [];
'o-p01fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01fail3'(suite) -> [];
'o-p01fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01fail2'(suite) -> [];
'o-p01fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01fail1'(suite) -> [];
'o-p01fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-e2'(suite) -> [];
'o-e2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-e2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-e2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75pass1'(suite) -> [];
'o-p75pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p74pass1'(suite) -> [];
'o-p74pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p74pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p74pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66pass1'(suite) -> [];
'o-p66pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass5'(suite) -> [];
'o-p44pass5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass4'(suite) -> [];
'o-p44pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass3'(suite) -> [];
'o-p44pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass2'(suite) -> [];
'o-p44pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass1'(suite) -> [];
'o-p44pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42pass2'(suite) -> [];
'o-p42pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42pass1'(suite) -> [];
'o-p42pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41pass2'(suite) -> [];
'o-p41pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41pass1'(suite) -> [];
'o-p41pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40pass4'(suite) -> [];
'o-p40pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40pass3'(suite) -> [];
'o-p40pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40pass2'(suite) -> [];
'o-p40pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40pass1'(suite) -> [];
'o-p40pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39pass2'(suite) -> [];
'o-p39pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39pass1'(suite) -> [];
'o-p39pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32pass2'(suite) -> [];
'o-p32pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32pass1'(suite) -> [];
'o-p32pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27pass4'(suite) -> [];
'o-p27pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27pass3'(suite) -> [];
'o-p27pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27pass2'(suite) -> [];
'o-p27pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27pass1'(suite) -> [];
'o-p27pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p26pass1'(suite) -> [];
'o-p26pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p26pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p26pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p25pass2'(suite) -> [];
'o-p25pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p25pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p25pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p25pass1'(suite) -> [];
'o-p25pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p25pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p25pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24pass4'(suite) -> [];
'o-p24pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24pass3'(suite) -> [];
'o-p24pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24pass2'(suite) -> [];
'o-p24pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24pass1'(suite) -> [];
'o-p24pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23pass4'(suite) -> [];
'o-p23pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23pass3'(suite) -> [];
'o-p23pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23pass2'(suite) -> [];
'o-p23pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23pass1'(suite) -> [];
'o-p23pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass3'(suite) -> [];
'o-p22pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass2'(suite) -> [];
'o-p22pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass1'(suite) -> [];
'o-p22pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p18pass1'(suite) -> [];
'o-p18pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p18pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p18pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16pass3'(suite) -> [];
'o-p16pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16pass2'(suite) -> [];
'o-p16pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16pass1'(suite) -> [];
'o-p16pass1'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16pass1.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16pass1.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Hard to interpret the meaning of the XML1.0 spec. See section 2.6 and 2.3."]}.
-'o-p15pass1'(suite) -> [];
'o-p15pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p15pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p15pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p14pass1'(suite) -> [];
'o-p14pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p14pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p14pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p10pass1'(suite) -> [];
'o-p10pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p10pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p10pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p08fail2'(suite) -> [];
'o-p08fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p08fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p08fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p08fail1'(suite) -> [];
'o-p08fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p08fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p08fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p06fail1'(suite) -> [];
'o-p06fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p06fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p06fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05pass1'(suite) -> [];
'o-p05pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p04pass1'(suite) -> [];
'o-p04pass1'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p04pass1.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p04pass1.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'o-p03pass1'(suite) -> [];
'o-p03pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01pass3'(suite) -> [];
'o-p01pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01pass1'(suite) -> [];
'o-p01pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76pass1'(suite) -> [];
'o-p76pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73pass1'(suite) -> [];
'o-p73pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72pass1'(suite) -> [];
'o-p72pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71pass1'(suite) -> [];
'o-p71pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p70pass1'(suite) -> [];
'o-p70pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p70pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p70pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p69pass1'(suite) -> [];
'o-p69pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p69pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p69pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p68pass1'(suite) -> [];
'o-p68pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p68pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p68pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p64pass1'(suite) -> [];
'o-p64pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p64pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p64pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p63pass1'(suite) -> [];
'o-p63pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p63pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p63pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p62pass1'(suite) -> [];
'o-p62pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p62pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p62pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p61pass1'(suite) -> [];
'o-p61pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p61pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p61pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60pass1'(suite) -> [];
'o-p60pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p59pass1'(suite) -> [];
'o-p59pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p59pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p59pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58pass1'(suite) -> [];
'o-p58pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p57pass1'(suite) -> [];
'o-p57pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p57pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p57pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56pass1'(suite) -> [];
'o-p56pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p55pass1'(suite) -> [];
'o-p55pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p55pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p55pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p54pass1'(suite) -> [];
'o-p54pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p54pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p54pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53pass1'(suite) -> [];
'o-p53pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p52pass1'(suite) -> [];
'o-p52pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p52pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p52pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51pass1'(suite) -> [];
'o-p51pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p50pass1'(suite) -> [];
'o-p50pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p50pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p50pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p49pass1'(suite) -> [];
'o-p49pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p49pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p49pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p48pass1'(suite) -> [];
'o-p48pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p48pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p48pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47pass1'(suite) -> [];
'o-p47pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46pass1'(suite) -> [];
'o-p46pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45pass1'(suite) -> [];
'o-p45pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p43pass1'(suite) -> [];
'o-p43pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p43pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p43pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p31pass2'(suite) -> [];
'o-p31pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p31pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p31pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p31pass1'(suite) -> [];
'o-p31pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p31pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p31pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p30pass2'(suite) -> [];
'o-p30pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p30pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p30pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p30pass1'(suite) -> [];
'o-p30pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p30pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p30pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p29pass1'(suite) -> [];
'o-p29pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p29pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p29pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28pass5'(suite) -> [];
'o-p28pass5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28pass5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28pass5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28pass4'(suite) -> [];
'o-p28pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28pass3'(suite) -> [];
'o-p28pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28pass1'(suite) -> [];
'o-p28pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass6'(suite) -> [];
'o-p22pass6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass5'(suite) -> [];
'o-p22pass5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass4'(suite) -> [];
'o-p22pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12pass1'(suite) -> [];
'o-p12pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09pass1'(suite) -> [];
'o-p09pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p08pass1'(suite) -> [];
'o-p08pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p08pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p08pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p07pass1'(suite) -> [];
'o-p07pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p07pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p07pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p06pass1'(suite) -> [];
'o-p06pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p06pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p06pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01pass2'(suite) -> [];
'o-p01pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'ibm-invalid-P76-ibm76i01'(suite) -> [];
'ibm-invalid-P76-ibm76i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P76-ibm76i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P76-ibm76i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P69-ibm69i04'(suite) -> [];
'ibm-invalid-P69-ibm69i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P69-ibm69i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P69-ibm69i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P69-ibm69i03'(suite) -> [];
'ibm-invalid-P69-ibm69i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P69-ibm69i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P69-ibm69i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P69-ibm69i02'(suite) -> [];
'ibm-invalid-P69-ibm69i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P69-ibm69i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P69-ibm69i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P69-ibm69i01'(suite) -> [];
'ibm-invalid-P69-ibm69i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P69-ibm69i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P69-ibm69i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P68-ibm68i04'(suite) -> [];
'ibm-invalid-P68-ibm68i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P68-ibm68i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P68-ibm68i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P68-ibm68i03'(suite) -> [];
'ibm-invalid-P68-ibm68i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P68-ibm68i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P68-ibm68i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P68-ibm68i02'(suite) -> [];
'ibm-invalid-P68-ibm68i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P68-ibm68i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P68-ibm68i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P68-ibm68i01'(suite) -> [];
'ibm-invalid-P68-ibm68i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P68-ibm68i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P68-ibm68i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P60-ibm60i04'(suite) -> [];
'ibm-invalid-P60-ibm60i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P60-ibm60i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P60-ibm60i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P60-ibm60i03'(suite) -> [];
'ibm-invalid-P60-ibm60i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P60-ibm60i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P60-ibm60i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P60-ibm60i02'(suite) -> [];
'ibm-invalid-P60-ibm60i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P60-ibm60i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P60-ibm60i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P60-ibm60i01'(suite) -> [];
'ibm-invalid-P60-ibm60i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P60-ibm60i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P60-ibm60i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P59-ibm59i01'(suite) -> [];
'ibm-invalid-P59-ibm59i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P59-ibm59i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P59-ibm59i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P58-ibm58i02'(suite) -> [];
'ibm-invalid-P58-ibm58i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P58-ibm58i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P58-ibm58i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P58-ibm58i01'(suite) -> [];
'ibm-invalid-P58-ibm58i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P58-ibm58i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P58-ibm58i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i18'(suite) -> [];
'ibm-invalid-P56-ibm56i18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i17'(suite) -> [];
'ibm-invalid-P56-ibm56i17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i16'(suite) -> [];
'ibm-invalid-P56-ibm56i16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i15'(suite) -> [];
'ibm-invalid-P56-ibm56i15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i14'(suite) -> [];
'ibm-invalid-P56-ibm56i14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i13'(suite) -> [];
'ibm-invalid-P56-ibm56i13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i12'(suite) -> [];
'ibm-invalid-P56-ibm56i12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i11'(suite) -> [];
'ibm-invalid-P56-ibm56i11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i10'(suite) -> [];
'ibm-invalid-P56-ibm56i10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i09'(suite) -> [];
'ibm-invalid-P56-ibm56i09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i08'(suite) -> [];
'ibm-invalid-P56-ibm56i08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i07'(suite) -> [];
'ibm-invalid-P56-ibm56i07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i06'(suite) -> [];
'ibm-invalid-P56-ibm56i06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i05'(suite) -> [];
'ibm-invalid-P56-ibm56i05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i03'(suite) -> [];
'ibm-invalid-P56-ibm56i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i02'(suite) -> [];
'ibm-invalid-P56-ibm56i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i01'(suite) -> [];
'ibm-invalid-P56-ibm56i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P51-ibm51i03'(suite) -> [];
'ibm-invalid-P51-ibm51i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P51-ibm51i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P51-ibm51i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P51-ibm51i01'(suite) -> [];
'ibm-invalid-P51-ibm51i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P51-ibm51i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P51-ibm51i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P50-ibm50i01'(suite) -> [];
'ibm-invalid-P50-ibm50i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P50-ibm50i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P50-ibm50i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P49-ibm49i01'(suite) -> [];
'ibm-invalid-P49-ibm49i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P49-ibm49i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P49-ibm49i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P45-ibm45i01'(suite) -> [];
'ibm-invalid-P45-ibm45i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P45-ibm45i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P45-ibm45i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P41-ibm41i02'(suite) -> [];
'ibm-invalid-P41-ibm41i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P41-ibm41i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P41-ibm41i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P41-ibm41i01'(suite) -> [];
'ibm-invalid-P41-ibm41i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P41-ibm41i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P41-ibm41i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P39-ibm39i04'(suite) -> [];
'ibm-invalid-P39-ibm39i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P39-ibm39i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P39-ibm39i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P39-ibm39i03'(suite) -> [];
'ibm-invalid-P39-ibm39i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P39-ibm39i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P39-ibm39i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P39-ibm39i02'(suite) -> [];
'ibm-invalid-P39-ibm39i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P39-ibm39i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P39-ibm39i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P39-ibm39i01'(suite) -> [];
'ibm-invalid-P39-ibm39i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P39-ibm39i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P39-ibm39i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P32-ibm32i04'(suite) -> [];
'ibm-invalid-P32-ibm32i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P32-ibm32i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P32-ibm32i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P32-ibm32i03'(suite) -> [];
'ibm-invalid-P32-ibm32i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P32-ibm32i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P32-ibm32i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P32-ibm32i01'(suite) -> [];
'ibm-invalid-P32-ibm32i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P32-ibm32i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P32-ibm32i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P28-ibm28i01'(suite) -> [];
'ibm-invalid-P28-ibm28i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P28-ibm28i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P28-ibm28i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'ibm-not-wf-P89-ibm89n12'(suite) -> [];
'ibm-not-wf-P89-ibm89n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n11'(suite) -> [];
'ibm-not-wf-P89-ibm89n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n10'(suite) -> [];
'ibm-not-wf-P89-ibm89n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n09'(suite) -> [];
'ibm-not-wf-P89-ibm89n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n08'(suite) -> [];
'ibm-not-wf-P89-ibm89n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n07'(suite) -> [];
'ibm-not-wf-P89-ibm89n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n06'(suite) -> [];
'ibm-not-wf-P89-ibm89n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n05'(suite) -> [];
'ibm-not-wf-P89-ibm89n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n04'(suite) -> [];
'ibm-not-wf-P89-ibm89n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n03'(suite) -> [];
'ibm-not-wf-P89-ibm89n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n02'(suite) -> [];
'ibm-not-wf-P89-ibm89n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n01'(suite) -> [];
'ibm-not-wf-P89-ibm89n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n16'(suite) -> [];
'ibm-not-wf-P88-ibm88n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n15'(suite) -> [];
'ibm-not-wf-P88-ibm88n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n14'(suite) -> [];
'ibm-not-wf-P88-ibm88n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n13'(suite) -> [];
'ibm-not-wf-P88-ibm88n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n12'(suite) -> [];
'ibm-not-wf-P88-ibm88n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n11'(suite) -> [];
'ibm-not-wf-P88-ibm88n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n10'(suite) -> [];
'ibm-not-wf-P88-ibm88n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n09'(suite) -> [];
'ibm-not-wf-P88-ibm88n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n08'(suite) -> [];
'ibm-not-wf-P88-ibm88n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n06'(suite) -> [];
'ibm-not-wf-P88-ibm88n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n05'(suite) -> [];
'ibm-not-wf-P88-ibm88n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n04'(suite) -> [];
'ibm-not-wf-P88-ibm88n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n03'(suite) -> [];
'ibm-not-wf-P88-ibm88n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n02'(suite) -> [];
'ibm-not-wf-P88-ibm88n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n01'(suite) -> [];
'ibm-not-wf-P88-ibm88n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n85'(suite) -> [];
'ibm-not-wf-P87-ibm87n85'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n85.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n85.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n84'(suite) -> [];
'ibm-not-wf-P87-ibm87n84'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n84.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n84.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n83'(suite) -> [];
'ibm-not-wf-P87-ibm87n83'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n83.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n83.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n82'(suite) -> [];
'ibm-not-wf-P87-ibm87n82'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n82.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n82.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n81'(suite) -> [];
'ibm-not-wf-P87-ibm87n81'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n81.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n81.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n80'(suite) -> [];
'ibm-not-wf-P87-ibm87n80'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n80.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n80.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n79'(suite) -> [];
'ibm-not-wf-P87-ibm87n79'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n79.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n79.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n78'(suite) -> [];
'ibm-not-wf-P87-ibm87n78'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n78.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n78.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n77'(suite) -> [];
'ibm-not-wf-P87-ibm87n77'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n77.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n77.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n76'(suite) -> [];
'ibm-not-wf-P87-ibm87n76'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n76.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n76.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n75'(suite) -> [];
'ibm-not-wf-P87-ibm87n75'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n75.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n75.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n74'(suite) -> [];
'ibm-not-wf-P87-ibm87n74'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n74.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n74.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n73'(suite) -> [];
'ibm-not-wf-P87-ibm87n73'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n73.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n73.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n72'(suite) -> [];
'ibm-not-wf-P87-ibm87n72'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n72.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n72.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n71'(suite) -> [];
'ibm-not-wf-P87-ibm87n71'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n71.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n71.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n70'(suite) -> [];
'ibm-not-wf-P87-ibm87n70'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n70.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n70.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n69'(suite) -> [];
'ibm-not-wf-P87-ibm87n69'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n69.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n69.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n68'(suite) -> [];
'ibm-not-wf-P87-ibm87n68'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n68.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n68.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n67'(suite) -> [];
'ibm-not-wf-P87-ibm87n67'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n67.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n67.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n66'(suite) -> [];
'ibm-not-wf-P87-ibm87n66'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n66.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n66.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n64'(suite) -> [];
'ibm-not-wf-P87-ibm87n64'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n64.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n64.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n63'(suite) -> [];
'ibm-not-wf-P87-ibm87n63'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n63.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n63.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n62'(suite) -> [];
'ibm-not-wf-P87-ibm87n62'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n62.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n62.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n61'(suite) -> [];
'ibm-not-wf-P87-ibm87n61'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n61.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n61.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n60'(suite) -> [];
'ibm-not-wf-P87-ibm87n60'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n60.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n60.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n59'(suite) -> [];
'ibm-not-wf-P87-ibm87n59'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n59.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n59.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n58'(suite) -> [];
'ibm-not-wf-P87-ibm87n58'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n58.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n58.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n57'(suite) -> [];
'ibm-not-wf-P87-ibm87n57'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n57.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n57.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n56'(suite) -> [];
'ibm-not-wf-P87-ibm87n56'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n56.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n56.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n55'(suite) -> [];
'ibm-not-wf-P87-ibm87n55'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n55.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n55.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n54'(suite) -> [];
'ibm-not-wf-P87-ibm87n54'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n54.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n54.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n53'(suite) -> [];
'ibm-not-wf-P87-ibm87n53'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n53.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n53.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n52'(suite) -> [];
'ibm-not-wf-P87-ibm87n52'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n52.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n52.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n51'(suite) -> [];
'ibm-not-wf-P87-ibm87n51'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n51.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n51.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n50'(suite) -> [];
'ibm-not-wf-P87-ibm87n50'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n50.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n50.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n49'(suite) -> [];
'ibm-not-wf-P87-ibm87n49'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n49.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n49.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n48'(suite) -> [];
'ibm-not-wf-P87-ibm87n48'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n48.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n48.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n47'(suite) -> [];
'ibm-not-wf-P87-ibm87n47'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n47.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n47.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n46'(suite) -> [];
'ibm-not-wf-P87-ibm87n46'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n46.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n46.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n45'(suite) -> [];
'ibm-not-wf-P87-ibm87n45'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n45.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n45.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n44'(suite) -> [];
'ibm-not-wf-P87-ibm87n44'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n44.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n44.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n43'(suite) -> [];
'ibm-not-wf-P87-ibm87n43'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n43.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n43.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n42'(suite) -> [];
'ibm-not-wf-P87-ibm87n42'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n42.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n42.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n41'(suite) -> [];
'ibm-not-wf-P87-ibm87n41'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n41.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n41.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n40'(suite) -> [];
'ibm-not-wf-P87-ibm87n40'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n40.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n40.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n39'(suite) -> [];
'ibm-not-wf-P87-ibm87n39'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n39.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n39.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n38'(suite) -> [];
'ibm-not-wf-P87-ibm87n38'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n38.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n38.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n37'(suite) -> [];
'ibm-not-wf-P87-ibm87n37'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n37.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n37.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n36'(suite) -> [];
'ibm-not-wf-P87-ibm87n36'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n36.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n36.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n35'(suite) -> [];
'ibm-not-wf-P87-ibm87n35'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n35.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n35.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n34'(suite) -> [];
'ibm-not-wf-P87-ibm87n34'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n34.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n34.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n33'(suite) -> [];
'ibm-not-wf-P87-ibm87n33'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n33.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n33.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n32'(suite) -> [];
'ibm-not-wf-P87-ibm87n32'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n32.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n32.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n31'(suite) -> [];
'ibm-not-wf-P87-ibm87n31'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n31.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n31.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n30'(suite) -> [];
'ibm-not-wf-P87-ibm87n30'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n30.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n30.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n29'(suite) -> [];
'ibm-not-wf-P87-ibm87n29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n28'(suite) -> [];
'ibm-not-wf-P87-ibm87n28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n27'(suite) -> [];
'ibm-not-wf-P87-ibm87n27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n26'(suite) -> [];
'ibm-not-wf-P87-ibm87n26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n25'(suite) -> [];
'ibm-not-wf-P87-ibm87n25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n24'(suite) -> [];
'ibm-not-wf-P87-ibm87n24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n23'(suite) -> [];
'ibm-not-wf-P87-ibm87n23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n22'(suite) -> [];
'ibm-not-wf-P87-ibm87n22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n21'(suite) -> [];
'ibm-not-wf-P87-ibm87n21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n20'(suite) -> [];
'ibm-not-wf-P87-ibm87n20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n19'(suite) -> [];
'ibm-not-wf-P87-ibm87n19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n18'(suite) -> [];
'ibm-not-wf-P87-ibm87n18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n17'(suite) -> [];
'ibm-not-wf-P87-ibm87n17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n16'(suite) -> [];
'ibm-not-wf-P87-ibm87n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n15'(suite) -> [];
'ibm-not-wf-P87-ibm87n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n14'(suite) -> [];
'ibm-not-wf-P87-ibm87n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n13'(suite) -> [];
'ibm-not-wf-P87-ibm87n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n12'(suite) -> [];
'ibm-not-wf-P87-ibm87n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n11'(suite) -> [];
'ibm-not-wf-P87-ibm87n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n10'(suite) -> [];
'ibm-not-wf-P87-ibm87n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n09'(suite) -> [];
'ibm-not-wf-P87-ibm87n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n08'(suite) -> [];
'ibm-not-wf-P87-ibm87n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n07'(suite) -> [];
'ibm-not-wf-P87-ibm87n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n06'(suite) -> [];
'ibm-not-wf-P87-ibm87n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n05'(suite) -> [];
'ibm-not-wf-P87-ibm87n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n04'(suite) -> [];
'ibm-not-wf-P87-ibm87n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n03'(suite) -> [];
'ibm-not-wf-P87-ibm87n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n02'(suite) -> [];
'ibm-not-wf-P87-ibm87n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n01'(suite) -> [];
'ibm-not-wf-P87-ibm87n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P86-ibm86n04'(suite) -> [];
'ibm-not-wf-P86-ibm86n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P86-ibm86n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P86-ibm86n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P86-ibm86n03'(suite) -> [];
'ibm-not-wf-P86-ibm86n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P86-ibm86n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P86-ibm86n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P86-ibm86n02'(suite) -> [];
'ibm-not-wf-P86-ibm86n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P86-ibm86n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P86-ibm86n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P86-ibm86n01'(suite) -> [];
'ibm-not-wf-P86-ibm86n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P86-ibm86n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P86-ibm86n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n99'(suite) -> [];
'ibm-not-wf-P85-ibm85n99'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n99.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n99.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n98'(suite) -> [];
'ibm-not-wf-P85-ibm85n98'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n98.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n98.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n97'(suite) -> [];
'ibm-not-wf-P85-ibm85n97'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n97.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n97.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n96'(suite) -> [];
'ibm-not-wf-P85-ibm85n96'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n96.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n96.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n95'(suite) -> [];
'ibm-not-wf-P85-ibm85n95'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n95.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n95.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n94'(suite) -> [];
'ibm-not-wf-P85-ibm85n94'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n94.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n94.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n93'(suite) -> [];
'ibm-not-wf-P85-ibm85n93'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n93.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n93.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n92'(suite) -> [];
'ibm-not-wf-P85-ibm85n92'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n92.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n92.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n91'(suite) -> [];
'ibm-not-wf-P85-ibm85n91'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n91.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n91.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n90'(suite) -> [];
'ibm-not-wf-P85-ibm85n90'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n90.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n90.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n89'(suite) -> [];
'ibm-not-wf-P85-ibm85n89'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n89.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n89.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n88'(suite) -> [];
'ibm-not-wf-P85-ibm85n88'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n88.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n88.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n87'(suite) -> [];
'ibm-not-wf-P85-ibm85n87'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n87.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n87.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n86'(suite) -> [];
'ibm-not-wf-P85-ibm85n86'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n86.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n86.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n85'(suite) -> [];
'ibm-not-wf-P85-ibm85n85'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n85.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n85.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n84'(suite) -> [];
'ibm-not-wf-P85-ibm85n84'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n84.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n84.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n83'(suite) -> [];
'ibm-not-wf-P85-ibm85n83'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n83.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n83.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n82'(suite) -> [];
'ibm-not-wf-P85-ibm85n82'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n82.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n82.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n81'(suite) -> [];
'ibm-not-wf-P85-ibm85n81'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n81.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n81.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n80'(suite) -> [];
'ibm-not-wf-P85-ibm85n80'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n80.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n80.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n79'(suite) -> [];
'ibm-not-wf-P85-ibm85n79'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n79.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n79.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n78'(suite) -> [];
'ibm-not-wf-P85-ibm85n78'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n78.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n78.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n77'(suite) -> [];
'ibm-not-wf-P85-ibm85n77'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n77.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n77.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n76'(suite) -> [];
'ibm-not-wf-P85-ibm85n76'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n76.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n76.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n75'(suite) -> [];
'ibm-not-wf-P85-ibm85n75'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n75.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n75.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n74'(suite) -> [];
'ibm-not-wf-P85-ibm85n74'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n74.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n74.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n73'(suite) -> [];
'ibm-not-wf-P85-ibm85n73'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n73.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n73.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n72'(suite) -> [];
'ibm-not-wf-P85-ibm85n72'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n72.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n72.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n71'(suite) -> [];
'ibm-not-wf-P85-ibm85n71'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n71.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n71.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n70'(suite) -> [];
'ibm-not-wf-P85-ibm85n70'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n70.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n70.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n69'(suite) -> [];
'ibm-not-wf-P85-ibm85n69'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n69.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n69.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n68'(suite) -> [];
'ibm-not-wf-P85-ibm85n68'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n68.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n68.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n67'(suite) -> [];
'ibm-not-wf-P85-ibm85n67'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n67.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n67.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n66'(suite) -> [];
'ibm-not-wf-P85-ibm85n66'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n66.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n66.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n65'(suite) -> [];
'ibm-not-wf-P85-ibm85n65'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n65.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n65.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n64'(suite) -> [];
'ibm-not-wf-P85-ibm85n64'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n64.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n64.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n63'(suite) -> [];
'ibm-not-wf-P85-ibm85n63'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n63.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n63.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n62'(suite) -> [];
'ibm-not-wf-P85-ibm85n62'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n62.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n62.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n61'(suite) -> [];
'ibm-not-wf-P85-ibm85n61'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n61.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n61.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n60'(suite) -> [];
'ibm-not-wf-P85-ibm85n60'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n60.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n60.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n59'(suite) -> [];
'ibm-not-wf-P85-ibm85n59'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n59.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n59.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n58'(suite) -> [];
'ibm-not-wf-P85-ibm85n58'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n58.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n58.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n57'(suite) -> [];
'ibm-not-wf-P85-ibm85n57'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n57.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n57.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n56'(suite) -> [];
'ibm-not-wf-P85-ibm85n56'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n56.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n56.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n55'(suite) -> [];
'ibm-not-wf-P85-ibm85n55'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n55.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n55.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n54'(suite) -> [];
'ibm-not-wf-P85-ibm85n54'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n54.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n54.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n53'(suite) -> [];
'ibm-not-wf-P85-ibm85n53'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n53.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n53.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n52'(suite) -> [];
'ibm-not-wf-P85-ibm85n52'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n52.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n52.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n51'(suite) -> [];
'ibm-not-wf-P85-ibm85n51'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n51.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n51.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n50'(suite) -> [];
'ibm-not-wf-P85-ibm85n50'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n50.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n50.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n49'(suite) -> [];
'ibm-not-wf-P85-ibm85n49'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n49.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n49.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n48'(suite) -> [];
'ibm-not-wf-P85-ibm85n48'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n48.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n48.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n47'(suite) -> [];
'ibm-not-wf-P85-ibm85n47'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n47.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n47.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n46'(suite) -> [];
'ibm-not-wf-P85-ibm85n46'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n46.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n46.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n45'(suite) -> [];
'ibm-not-wf-P85-ibm85n45'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n45.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n45.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n44'(suite) -> [];
'ibm-not-wf-P85-ibm85n44'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n44.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n44.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n43'(suite) -> [];
'ibm-not-wf-P85-ibm85n43'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n43.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n43.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n42'(suite) -> [];
'ibm-not-wf-P85-ibm85n42'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n42.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n42.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n41'(suite) -> [];
'ibm-not-wf-P85-ibm85n41'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n41.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n41.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n40'(suite) -> [];
'ibm-not-wf-P85-ibm85n40'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n40.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n40.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n39'(suite) -> [];
'ibm-not-wf-P85-ibm85n39'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n39.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n39.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n38'(suite) -> [];
'ibm-not-wf-P85-ibm85n38'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n38.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n38.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n37'(suite) -> [];
'ibm-not-wf-P85-ibm85n37'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n37.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n37.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n36'(suite) -> [];
'ibm-not-wf-P85-ibm85n36'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n36.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n36.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n35'(suite) -> [];
'ibm-not-wf-P85-ibm85n35'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n35.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n35.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n34'(suite) -> [];
'ibm-not-wf-P85-ibm85n34'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n34.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n34.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n33'(suite) -> [];
'ibm-not-wf-P85-ibm85n33'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n33.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n33.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n32'(suite) -> [];
'ibm-not-wf-P85-ibm85n32'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n32.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n32.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n31'(suite) -> [];
'ibm-not-wf-P85-ibm85n31'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n31.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n31.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n30'(suite) -> [];
'ibm-not-wf-P85-ibm85n30'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n30.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n30.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n29'(suite) -> [];
'ibm-not-wf-P85-ibm85n29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n28'(suite) -> [];
'ibm-not-wf-P85-ibm85n28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n27'(suite) -> [];
'ibm-not-wf-P85-ibm85n27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n26'(suite) -> [];
'ibm-not-wf-P85-ibm85n26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n25'(suite) -> [];
'ibm-not-wf-P85-ibm85n25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n24'(suite) -> [];
'ibm-not-wf-P85-ibm85n24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n23'(suite) -> [];
'ibm-not-wf-P85-ibm85n23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n22'(suite) -> [];
'ibm-not-wf-P85-ibm85n22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n21'(suite) -> [];
'ibm-not-wf-P85-ibm85n21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n20'(suite) -> [];
'ibm-not-wf-P85-ibm85n20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n198'(suite) -> [];
'ibm-not-wf-P85-ibm85n198'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n198.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n198.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n197'(suite) -> [];
'ibm-not-wf-P85-ibm85n197'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n197.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n197.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n196'(suite) -> [];
'ibm-not-wf-P85-ibm85n196'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n196.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n196.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n195'(suite) -> [];
'ibm-not-wf-P85-ibm85n195'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n195.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n195.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n194'(suite) -> [];
'ibm-not-wf-P85-ibm85n194'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n194.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n194.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n193'(suite) -> [];
'ibm-not-wf-P85-ibm85n193'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n193.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n193.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n192'(suite) -> [];
'ibm-not-wf-P85-ibm85n192'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n192.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n192.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n191'(suite) -> [];
'ibm-not-wf-P85-ibm85n191'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n191.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n191.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n190'(suite) -> [];
'ibm-not-wf-P85-ibm85n190'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n190.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n190.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n19'(suite) -> [];
'ibm-not-wf-P85-ibm85n19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n189'(suite) -> [];
'ibm-not-wf-P85-ibm85n189'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n189.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n189.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n188'(suite) -> [];
'ibm-not-wf-P85-ibm85n188'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n188.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n188.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n187'(suite) -> [];
'ibm-not-wf-P85-ibm85n187'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n187.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n187.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n186'(suite) -> [];
'ibm-not-wf-P85-ibm85n186'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n186.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n186.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n185'(suite) -> [];
'ibm-not-wf-P85-ibm85n185'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n185.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n185.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n184'(suite) -> [];
'ibm-not-wf-P85-ibm85n184'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n184.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n184.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n183'(suite) -> [];
'ibm-not-wf-P85-ibm85n183'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n183.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n183.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n182'(suite) -> [];
'ibm-not-wf-P85-ibm85n182'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n182.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n182.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n181'(suite) -> [];
'ibm-not-wf-P85-ibm85n181'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n181.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n181.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n180'(suite) -> [];
'ibm-not-wf-P85-ibm85n180'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n180.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n180.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n18'(suite) -> [];
'ibm-not-wf-P85-ibm85n18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n179'(suite) -> [];
'ibm-not-wf-P85-ibm85n179'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n179.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n179.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n178'(suite) -> [];
'ibm-not-wf-P85-ibm85n178'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n178.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n178.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n177'(suite) -> [];
'ibm-not-wf-P85-ibm85n177'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n177.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n177.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n176'(suite) -> [];
'ibm-not-wf-P85-ibm85n176'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n176.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n176.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n175'(suite) -> [];
'ibm-not-wf-P85-ibm85n175'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n175.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n175.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n174'(suite) -> [];
'ibm-not-wf-P85-ibm85n174'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n174.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n174.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n173'(suite) -> [];
'ibm-not-wf-P85-ibm85n173'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n173.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n173.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n172'(suite) -> [];
'ibm-not-wf-P85-ibm85n172'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n172.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n172.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n171'(suite) -> [];
'ibm-not-wf-P85-ibm85n171'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n171.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n171.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n170'(suite) -> [];
'ibm-not-wf-P85-ibm85n170'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n170.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n170.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n17'(suite) -> [];
'ibm-not-wf-P85-ibm85n17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n169'(suite) -> [];
'ibm-not-wf-P85-ibm85n169'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n169.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n169.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n168'(suite) -> [];
'ibm-not-wf-P85-ibm85n168'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n168.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n168.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n167'(suite) -> [];
'ibm-not-wf-P85-ibm85n167'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n167.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n167.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n166'(suite) -> [];
'ibm-not-wf-P85-ibm85n166'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n166.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n166.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n165'(suite) -> [];
'ibm-not-wf-P85-ibm85n165'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n165.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n165.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n164'(suite) -> [];
'ibm-not-wf-P85-ibm85n164'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n164.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n164.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n163'(suite) -> [];
'ibm-not-wf-P85-ibm85n163'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n163.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n163.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n162'(suite) -> [];
'ibm-not-wf-P85-ibm85n162'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n162.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n162.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n161'(suite) -> [];
'ibm-not-wf-P85-ibm85n161'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n161.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n161.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n160'(suite) -> [];
'ibm-not-wf-P85-ibm85n160'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n160.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n160.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n16'(suite) -> [];
'ibm-not-wf-P85-ibm85n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n159'(suite) -> [];
'ibm-not-wf-P85-ibm85n159'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n159.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n159.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n158'(suite) -> [];
'ibm-not-wf-P85-ibm85n158'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n158.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n158.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n157'(suite) -> [];
'ibm-not-wf-P85-ibm85n157'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n157.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n157.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n156'(suite) -> [];
'ibm-not-wf-P85-ibm85n156'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n156.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n156.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n155'(suite) -> [];
'ibm-not-wf-P85-ibm85n155'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n155.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n155.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n154'(suite) -> [];
'ibm-not-wf-P85-ibm85n154'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n154.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n154.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n153'(suite) -> [];
'ibm-not-wf-P85-ibm85n153'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n153.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n153.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n152'(suite) -> [];
'ibm-not-wf-P85-ibm85n152'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n152.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n152.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n151'(suite) -> [];
'ibm-not-wf-P85-ibm85n151'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n151.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n151.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n150'(suite) -> [];
'ibm-not-wf-P85-ibm85n150'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n150.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n150.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n15'(suite) -> [];
'ibm-not-wf-P85-ibm85n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n149'(suite) -> [];
'ibm-not-wf-P85-ibm85n149'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n149.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n149.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n148'(suite) -> [];
'ibm-not-wf-P85-ibm85n148'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n148.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n148.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n147'(suite) -> [];
'ibm-not-wf-P85-ibm85n147'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n147.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n147.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n146'(suite) -> [];
'ibm-not-wf-P85-ibm85n146'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n146.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n146.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n145'(suite) -> [];
'ibm-not-wf-P85-ibm85n145'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n145.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n145.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n144'(suite) -> [];
'ibm-not-wf-P85-ibm85n144'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n144.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n144.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n143'(suite) -> [];
'ibm-not-wf-P85-ibm85n143'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n143.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n143.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n142'(suite) -> [];
'ibm-not-wf-P85-ibm85n142'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n142.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n142.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n141'(suite) -> [];
'ibm-not-wf-P85-ibm85n141'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n141.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n141.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n140'(suite) -> [];
'ibm-not-wf-P85-ibm85n140'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n140.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n140.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n14'(suite) -> [];
'ibm-not-wf-P85-ibm85n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n139'(suite) -> [];
'ibm-not-wf-P85-ibm85n139'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n139.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n139.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n138'(suite) -> [];
'ibm-not-wf-P85-ibm85n138'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n138.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n138.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n137'(suite) -> [];
'ibm-not-wf-P85-ibm85n137'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n137.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n137.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n136'(suite) -> [];
'ibm-not-wf-P85-ibm85n136'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n136.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n136.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n135'(suite) -> [];
'ibm-not-wf-P85-ibm85n135'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n135.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n135.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n134'(suite) -> [];
'ibm-not-wf-P85-ibm85n134'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n134.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n134.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n133'(suite) -> [];
'ibm-not-wf-P85-ibm85n133'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n133.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n133.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n132'(suite) -> [];
'ibm-not-wf-P85-ibm85n132'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n132.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n132.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n131'(suite) -> [];
'ibm-not-wf-P85-ibm85n131'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n131.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n131.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n130'(suite) -> [];
'ibm-not-wf-P85-ibm85n130'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n130.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n130.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n13'(suite) -> [];
'ibm-not-wf-P85-ibm85n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n129'(suite) -> [];
'ibm-not-wf-P85-ibm85n129'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n129.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n129.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n128'(suite) -> [];
'ibm-not-wf-P85-ibm85n128'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n128.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n128.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n127'(suite) -> [];
'ibm-not-wf-P85-ibm85n127'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n127.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n127.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n126'(suite) -> [];
'ibm-not-wf-P85-ibm85n126'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n126.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n126.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n125'(suite) -> [];
'ibm-not-wf-P85-ibm85n125'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n125.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n125.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n124'(suite) -> [];
'ibm-not-wf-P85-ibm85n124'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n124.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n124.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n123'(suite) -> [];
'ibm-not-wf-P85-ibm85n123'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n123.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n123.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n122'(suite) -> [];
'ibm-not-wf-P85-ibm85n122'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n122.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n122.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n121'(suite) -> [];
'ibm-not-wf-P85-ibm85n121'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n121.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n121.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n120'(suite) -> [];
'ibm-not-wf-P85-ibm85n120'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n120.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n120.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n12'(suite) -> [];
'ibm-not-wf-P85-ibm85n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n119'(suite) -> [];
'ibm-not-wf-P85-ibm85n119'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n119.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n119.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n118'(suite) -> [];
'ibm-not-wf-P85-ibm85n118'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n118.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n118.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n117'(suite) -> [];
'ibm-not-wf-P85-ibm85n117'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n117.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n117.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n116'(suite) -> [];
'ibm-not-wf-P85-ibm85n116'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n116.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n116.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n115'(suite) -> [];
'ibm-not-wf-P85-ibm85n115'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n115.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n115.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n114'(suite) -> [];
'ibm-not-wf-P85-ibm85n114'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n114.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n114.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n113'(suite) -> [];
'ibm-not-wf-P85-ibm85n113'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n113.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n113.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n112'(suite) -> [];
'ibm-not-wf-P85-ibm85n112'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n112.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n112.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n111'(suite) -> [];
'ibm-not-wf-P85-ibm85n111'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n111.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n111.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n110'(suite) -> [];
'ibm-not-wf-P85-ibm85n110'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n110.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n110.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n11'(suite) -> [];
'ibm-not-wf-P85-ibm85n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n109'(suite) -> [];
'ibm-not-wf-P85-ibm85n109'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n109.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n109.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n108'(suite) -> [];
'ibm-not-wf-P85-ibm85n108'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n108.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n108.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n107'(suite) -> [];
'ibm-not-wf-P85-ibm85n107'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n107.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n107.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n106'(suite) -> [];
'ibm-not-wf-P85-ibm85n106'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n106.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n106.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n105'(suite) -> [];
'ibm-not-wf-P85-ibm85n105'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n105.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n105.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n104'(suite) -> [];
'ibm-not-wf-P85-ibm85n104'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n104.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n104.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n103'(suite) -> [];
'ibm-not-wf-P85-ibm85n103'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n103.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n103.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n102'(suite) -> [];
'ibm-not-wf-P85-ibm85n102'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n102.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n102.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n101'(suite) -> [];
'ibm-not-wf-P85-ibm85n101'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n101.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n101.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n100'(suite) -> [];
'ibm-not-wf-P85-ibm85n100'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n100.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n100.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n10'(suite) -> [];
'ibm-not-wf-P85-ibm85n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n09'(suite) -> [];
'ibm-not-wf-P85-ibm85n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n08'(suite) -> [];
'ibm-not-wf-P85-ibm85n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n07'(suite) -> [];
'ibm-not-wf-P85-ibm85n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n06'(suite) -> [];
'ibm-not-wf-P85-ibm85n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n05'(suite) -> [];
'ibm-not-wf-P85-ibm85n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n04'(suite) -> [];
'ibm-not-wf-P85-ibm85n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n03'(suite) -> [];
'ibm-not-wf-P85-ibm85n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n02'(suite) -> [];
'ibm-not-wf-P85-ibm85n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n01'(suite) -> [];
'ibm-not-wf-P85-ibm85n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n06'(suite) -> [];
'ibm-not-wf-P83-ibm83n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n05'(suite) -> [];
'ibm-not-wf-P83-ibm83n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n04'(suite) -> [];
'ibm-not-wf-P83-ibm83n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n03'(suite) -> [];
'ibm-not-wf-P83-ibm83n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n02'(suite) -> [];
'ibm-not-wf-P83-ibm83n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n01'(suite) -> [];
'ibm-not-wf-P83-ibm83n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n08'(suite) -> [];
'ibm-not-wf-P82-ibm82n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n07'(suite) -> [];
'ibm-not-wf-P82-ibm82n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n06'(suite) -> [];
'ibm-not-wf-P82-ibm82n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n05'(suite) -> [];
'ibm-not-wf-P82-ibm82n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n04'(suite) -> [];
'ibm-not-wf-P82-ibm82n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n03'(suite) -> [];
'ibm-not-wf-P82-ibm82n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n02'(suite) -> [];
'ibm-not-wf-P82-ibm82n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n01'(suite) -> [];
'ibm-not-wf-P82-ibm82n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n09'(suite) -> [];
'ibm-not-wf-P81-ibm81n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n08'(suite) -> [];
'ibm-not-wf-P81-ibm81n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n07'(suite) -> [];
'ibm-not-wf-P81-ibm81n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n06'(suite) -> [];
'ibm-not-wf-P81-ibm81n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n05'(suite) -> [];
'ibm-not-wf-P81-ibm81n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n04'(suite) -> [];
'ibm-not-wf-P81-ibm81n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n03'(suite) -> [];
'ibm-not-wf-P81-ibm81n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n02'(suite) -> [];
'ibm-not-wf-P81-ibm81n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n01'(suite) -> [];
'ibm-not-wf-P81-ibm81n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n06'(suite) -> [];
'ibm-not-wf-P80-ibm80n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n05'(suite) -> [];
'ibm-not-wf-P80-ibm80n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n04'(suite) -> [];
'ibm-not-wf-P80-ibm80n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n03'(suite) -> [];
'ibm-not-wf-P80-ibm80n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n02'(suite) -> [];
'ibm-not-wf-P80-ibm80n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n01'(suite) -> [];
'ibm-not-wf-P80-ibm80n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P79-ibm79n02'(suite) -> [];
'ibm-not-wf-P79-ibm79n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P79-ibm79n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P79-ibm79n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P79-ibm79n01'(suite) -> [];
'ibm-not-wf-P79-ibm79n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P79-ibm79n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P79-ibm79n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P78-ibm78n02'(suite) -> [];
'ibm-not-wf-P78-ibm78n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P78-ibm78n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P78-ibm78n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P78-ibm78n01'(suite) -> [];
'ibm-not-wf-P78-ibm78n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P78-ibm78n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P78-ibm78n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P77-ibm77n04'(suite) -> [];
'ibm-not-wf-P77-ibm77n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P77-ibm77n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P77-ibm77n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P77-ibm77n03'(suite) -> [];
'ibm-not-wf-P77-ibm77n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P77-ibm77n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P77-ibm77n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P77-ibm77n02'(suite) -> [];
'ibm-not-wf-P77-ibm77n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P77-ibm77n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P77-ibm77n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P77-ibm77n01'(suite) -> [];
'ibm-not-wf-P77-ibm77n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P77-ibm77n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P77-ibm77n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n07'(suite) -> [];
'ibm-not-wf-P76-ibm76n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n06'(suite) -> [];
'ibm-not-wf-P76-ibm76n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n05'(suite) -> [];
'ibm-not-wf-P76-ibm76n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n04'(suite) -> [];
'ibm-not-wf-P76-ibm76n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n03'(suite) -> [];
'ibm-not-wf-P76-ibm76n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n02'(suite) -> [];
'ibm-not-wf-P76-ibm76n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n01'(suite) -> [];
'ibm-not-wf-P76-ibm76n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n13'(suite) -> [];
'ibm-not-wf-P75-ibm75n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n12'(suite) -> [];
'ibm-not-wf-P75-ibm75n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n11'(suite) -> [];
'ibm-not-wf-P75-ibm75n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n10'(suite) -> [];
'ibm-not-wf-P75-ibm75n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n09'(suite) -> [];
'ibm-not-wf-P75-ibm75n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n08'(suite) -> [];
'ibm-not-wf-P75-ibm75n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n07'(suite) -> [];
'ibm-not-wf-P75-ibm75n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n06'(suite) -> [];
'ibm-not-wf-P75-ibm75n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n05'(suite) -> [];
'ibm-not-wf-P75-ibm75n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n04'(suite) -> [];
'ibm-not-wf-P75-ibm75n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n03'(suite) -> [];
'ibm-not-wf-P75-ibm75n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n02'(suite) -> [];
'ibm-not-wf-P75-ibm75n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n01'(suite) -> [];
'ibm-not-wf-P75-ibm75n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P74-ibm74n01'(suite) -> [];
'ibm-not-wf-P74-ibm74n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P74-ibm74n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P74-ibm74n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P73-ibm73n03'(suite) -> [];
'ibm-not-wf-P73-ibm73n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P73-ibm73n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P73-ibm73n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P73-ibm73n01'(suite) -> [];
'ibm-not-wf-P73-ibm73n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P73-ibm73n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P73-ibm73n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n09'(suite) -> [];
'ibm-not-wf-P72-ibm72n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n08'(suite) -> [];
'ibm-not-wf-P72-ibm72n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n07'(suite) -> [];
'ibm-not-wf-P72-ibm72n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n06'(suite) -> [];
'ibm-not-wf-P72-ibm72n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n05'(suite) -> [];
'ibm-not-wf-P72-ibm72n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n04'(suite) -> [];
'ibm-not-wf-P72-ibm72n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n03'(suite) -> [];
'ibm-not-wf-P72-ibm72n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n02'(suite) -> [];
'ibm-not-wf-P72-ibm72n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n01'(suite) -> [];
'ibm-not-wf-P72-ibm72n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n08'(suite) -> [];
'ibm-not-wf-P71-ibm71n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n07'(suite) -> [];
'ibm-not-wf-P71-ibm71n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n06'(suite) -> [];
'ibm-not-wf-P71-ibm71n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n05'(suite) -> [];
'ibm-not-wf-P71-ibm71n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n04'(suite) -> [];
'ibm-not-wf-P71-ibm71n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n03'(suite) -> [];
'ibm-not-wf-P71-ibm71n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n02'(suite) -> [];
'ibm-not-wf-P71-ibm71n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n01'(suite) -> [];
'ibm-not-wf-P71-ibm71n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm70n01'(suite) -> [];
'ibm-not-wf-P71-ibm70n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm70n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm70n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n07'(suite) -> [];
'ibm-not-wf-P69-ibm69n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n06'(suite) -> [];
'ibm-not-wf-P69-ibm69n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n05'(suite) -> [];
'ibm-not-wf-P69-ibm69n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n04'(suite) -> [];
'ibm-not-wf-P69-ibm69n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n03'(suite) -> [];
'ibm-not-wf-P69-ibm69n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n02'(suite) -> [];
'ibm-not-wf-P69-ibm69n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n01'(suite) -> [];
'ibm-not-wf-P69-ibm69n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n10'(suite) -> [];
'ibm-not-wf-P68-ibm68n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n09'(suite) -> [];
'ibm-not-wf-P68-ibm68n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n08'(suite) -> [];
'ibm-not-wf-P68-ibm68n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n07'(suite) -> [];
'ibm-not-wf-P68-ibm68n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n06'(suite) -> [];
'ibm-not-wf-P68-ibm68n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n05'(suite) -> [];
'ibm-not-wf-P68-ibm68n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n04'(suite) -> [];
'ibm-not-wf-P68-ibm68n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n03'(suite) -> [];
'ibm-not-wf-P68-ibm68n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n02'(suite) -> [];
'ibm-not-wf-P68-ibm68n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n01'(suite) -> [];
'ibm-not-wf-P68-ibm68n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n15'(suite) -> [];
'ibm-not-wf-P66-ibm66n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n14'(suite) -> [];
'ibm-not-wf-P66-ibm66n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n13'(suite) -> [];
'ibm-not-wf-P66-ibm66n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n12'(suite) -> [];
'ibm-not-wf-P66-ibm66n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n11'(suite) -> [];
'ibm-not-wf-P66-ibm66n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n10'(suite) -> [];
'ibm-not-wf-P66-ibm66n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n09'(suite) -> [];
'ibm-not-wf-P66-ibm66n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n08'(suite) -> [];
'ibm-not-wf-P66-ibm66n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n07'(suite) -> [];
'ibm-not-wf-P66-ibm66n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n06'(suite) -> [];
'ibm-not-wf-P66-ibm66n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n05'(suite) -> [];
'ibm-not-wf-P66-ibm66n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n04'(suite) -> [];
'ibm-not-wf-P66-ibm66n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n03'(suite) -> [];
'ibm-not-wf-P66-ibm66n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n02'(suite) -> [];
'ibm-not-wf-P66-ibm66n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n01'(suite) -> [];
'ibm-not-wf-P66-ibm66n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P65-ibm65n02'(suite) -> [];
'ibm-not-wf-P65-ibm65n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P65-ibm65n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P65-ibm65n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P65-ibm65n01'(suite) -> [];
'ibm-not-wf-P65-ibm65n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P65-ibm65n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P65-ibm65n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P64-ibm64n03'(suite) -> [];
'ibm-not-wf-P64-ibm64n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P64-ibm64n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P64-ibm64n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P64-ibm64n02'(suite) -> [];
'ibm-not-wf-P64-ibm64n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P64-ibm64n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P64-ibm64n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P64-ibm64n01'(suite) -> [];
'ibm-not-wf-P64-ibm64n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P64-ibm64n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P64-ibm64n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n07'(suite) -> [];
'ibm-not-wf-P63-ibm63n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n06'(suite) -> [];
'ibm-not-wf-P63-ibm63n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n05'(suite) -> [];
'ibm-not-wf-P63-ibm63n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n04'(suite) -> [];
'ibm-not-wf-P63-ibm63n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n03'(suite) -> [];
'ibm-not-wf-P63-ibm63n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n02'(suite) -> [];
'ibm-not-wf-P63-ibm63n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n01'(suite) -> [];
'ibm-not-wf-P63-ibm63n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n08'(suite) -> [];
'ibm-not-wf-P62-ibm62n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n07'(suite) -> [];
'ibm-not-wf-P62-ibm62n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n06'(suite) -> [];
'ibm-not-wf-P62-ibm62n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n05'(suite) -> [];
'ibm-not-wf-P62-ibm62n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n04'(suite) -> [];
'ibm-not-wf-P62-ibm62n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n03'(suite) -> [];
'ibm-not-wf-P62-ibm62n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n02'(suite) -> [];
'ibm-not-wf-P62-ibm62n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n01'(suite) -> [];
'ibm-not-wf-P62-ibm62n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P61-ibm61n01'(suite) -> [];
'ibm-not-wf-P61-ibm61n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P61-ibm61n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P61-ibm61n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n08'(suite) -> [];
'ibm-not-wf-P60-ibm60n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n07'(suite) -> [];
'ibm-not-wf-P60-ibm60n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n06'(suite) -> [];
'ibm-not-wf-P60-ibm60n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n05'(suite) -> [];
'ibm-not-wf-P60-ibm60n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n04'(suite) -> [];
'ibm-not-wf-P60-ibm60n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n03'(suite) -> [];
'ibm-not-wf-P60-ibm60n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n02'(suite) -> [];
'ibm-not-wf-P60-ibm60n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n01'(suite) -> [];
'ibm-not-wf-P60-ibm60n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n06'(suite) -> [];
'ibm-not-wf-P59-ibm59n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n05'(suite) -> [];
'ibm-not-wf-P59-ibm59n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n04'(suite) -> [];
'ibm-not-wf-P59-ibm59n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n03'(suite) -> [];
'ibm-not-wf-P59-ibm59n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n02'(suite) -> [];
'ibm-not-wf-P59-ibm59n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n01'(suite) -> [];
'ibm-not-wf-P59-ibm59n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n08'(suite) -> [];
'ibm-not-wf-P58-ibm58n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n07'(suite) -> [];
'ibm-not-wf-P58-ibm58n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n06'(suite) -> [];
'ibm-not-wf-P58-ibm58n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n05'(suite) -> [];
'ibm-not-wf-P58-ibm58n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n04'(suite) -> [];
'ibm-not-wf-P58-ibm58n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n03'(suite) -> [];
'ibm-not-wf-P58-ibm58n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n02'(suite) -> [];
'ibm-not-wf-P58-ibm58n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n01'(suite) -> [];
'ibm-not-wf-P58-ibm58n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P57-ibm57n01'(suite) -> [];
'ibm-not-wf-P57-ibm57n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P57-ibm57n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P57-ibm57n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n07'(suite) -> [];
'ibm-not-wf-P56-ibm56n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n06'(suite) -> [];
'ibm-not-wf-P56-ibm56n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n05'(suite) -> [];
'ibm-not-wf-P56-ibm56n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n04'(suite) -> [];
'ibm-not-wf-P56-ibm56n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n03'(suite) -> [];
'ibm-not-wf-P56-ibm56n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n02'(suite) -> [];
'ibm-not-wf-P56-ibm56n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n01'(suite) -> [];
'ibm-not-wf-P56-ibm56n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P55-ibm55n03'(suite) -> [];
'ibm-not-wf-P55-ibm55n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P55-ibm55n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P55-ibm55n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P55-ibm55n02'(suite) -> [];
'ibm-not-wf-P55-ibm55n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P55-ibm55n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P55-ibm55n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P55-ibm55n01'(suite) -> [];
'ibm-not-wf-P55-ibm55n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P55-ibm55n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P55-ibm55n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P54-ibm54n02'(suite) -> [];
'ibm-not-wf-P54-ibm54n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P54-ibm54n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P54-ibm54n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P54-ibm54n01'(suite) -> [];
'ibm-not-wf-P54-ibm54n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P54-ibm54n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P54-ibm54n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n08'(suite) -> [];
'ibm-not-wf-P53-ibm53n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n07'(suite) -> [];
'ibm-not-wf-P53-ibm53n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n06'(suite) -> [];
'ibm-not-wf-P53-ibm53n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n05'(suite) -> [];
'ibm-not-wf-P53-ibm53n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n04'(suite) -> [];
'ibm-not-wf-P53-ibm53n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n03'(suite) -> [];
'ibm-not-wf-P53-ibm53n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n02'(suite) -> [];
'ibm-not-wf-P53-ibm53n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n01'(suite) -> [];
'ibm-not-wf-P53-ibm53n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n06'(suite) -> [];
'ibm-not-wf-P52-ibm52n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n05'(suite) -> [];
'ibm-not-wf-P52-ibm52n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n04'(suite) -> [];
'ibm-not-wf-P52-ibm52n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n03'(suite) -> [];
'ibm-not-wf-P52-ibm52n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n02'(suite) -> [];
'ibm-not-wf-P52-ibm52n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n01'(suite) -> [];
'ibm-not-wf-P52-ibm52n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n07'(suite) -> [];
'ibm-not-wf-P51-ibm51n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n06'(suite) -> [];
'ibm-not-wf-P51-ibm51n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n05'(suite) -> [];
'ibm-not-wf-P51-ibm51n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n04'(suite) -> [];
'ibm-not-wf-P51-ibm51n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n03'(suite) -> [];
'ibm-not-wf-P51-ibm51n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n02'(suite) -> [];
'ibm-not-wf-P51-ibm51n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n01'(suite) -> [];
'ibm-not-wf-P51-ibm51n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n07'(suite) -> [];
'ibm-not-wf-P50-ibm50n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n06'(suite) -> [];
'ibm-not-wf-P50-ibm50n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n05'(suite) -> [];
'ibm-not-wf-P50-ibm50n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n04'(suite) -> [];
'ibm-not-wf-P50-ibm50n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n03'(suite) -> [];
'ibm-not-wf-P50-ibm50n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n02'(suite) -> [];
'ibm-not-wf-P50-ibm50n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n01'(suite) -> [];
'ibm-not-wf-P50-ibm50n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n06'(suite) -> [];
'ibm-not-wf-P49-ibm49n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n05'(suite) -> [];
'ibm-not-wf-P49-ibm49n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n04'(suite) -> [];
'ibm-not-wf-P49-ibm49n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n03'(suite) -> [];
'ibm-not-wf-P49-ibm49n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n02'(suite) -> [];
'ibm-not-wf-P49-ibm49n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n01'(suite) -> [];
'ibm-not-wf-P49-ibm49n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n07'(suite) -> [];
'ibm-not-wf-P48-ibm48n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n06'(suite) -> [];
'ibm-not-wf-P48-ibm48n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n05'(suite) -> [];
'ibm-not-wf-P48-ibm48n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n04'(suite) -> [];
'ibm-not-wf-P48-ibm48n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n03'(suite) -> [];
'ibm-not-wf-P48-ibm48n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n02'(suite) -> [];
'ibm-not-wf-P48-ibm48n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n01'(suite) -> [];
'ibm-not-wf-P48-ibm48n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n06'(suite) -> [];
'ibm-not-wf-P47-ibm47n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n05'(suite) -> [];
'ibm-not-wf-P47-ibm47n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n04'(suite) -> [];
'ibm-not-wf-P47-ibm47n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n03'(suite) -> [];
'ibm-not-wf-P47-ibm47n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n02'(suite) -> [];
'ibm-not-wf-P47-ibm47n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n01'(suite) -> [];
'ibm-not-wf-P47-ibm47n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n05'(suite) -> [];
'ibm-not-wf-P46-ibm46n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n04'(suite) -> [];
'ibm-not-wf-P46-ibm46n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n03'(suite) -> [];
'ibm-not-wf-P46-ibm46n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n02'(suite) -> [];
'ibm-not-wf-P46-ibm46n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n01'(suite) -> [];
'ibm-not-wf-P46-ibm46n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n09'(suite) -> [];
'ibm-not-wf-P45-ibm45n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n08'(suite) -> [];
'ibm-not-wf-P45-ibm45n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n07'(suite) -> [];
'ibm-not-wf-P45-ibm45n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n06'(suite) -> [];
'ibm-not-wf-P45-ibm45n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n05'(suite) -> [];
'ibm-not-wf-P45-ibm45n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n04'(suite) -> [];
'ibm-not-wf-P45-ibm45n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n03'(suite) -> [];
'ibm-not-wf-P45-ibm45n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n02'(suite) -> [];
'ibm-not-wf-P45-ibm45n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n01'(suite) -> [];
'ibm-not-wf-P45-ibm45n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P44-ibm44n04'(suite) -> [];
'ibm-not-wf-P44-ibm44n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P44-ibm44n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P44-ibm44n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P44-ibm44n03'(suite) -> [];
'ibm-not-wf-P44-ibm44n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P44-ibm44n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P44-ibm44n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P44-ibm44n02'(suite) -> [];
'ibm-not-wf-P44-ibm44n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P44-ibm44n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P44-ibm44n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P44-ibm44n01'(suite) -> [];
'ibm-not-wf-P44-ibm44n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P44-ibm44n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P44-ibm44n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P43-ibm43n05'(suite) -> [];
'ibm-not-wf-P43-ibm43n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P43-ibm43n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P43-ibm43n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P43-ibm43n04'(suite) -> [];
'ibm-not-wf-P43-ibm43n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P43-ibm43n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P43-ibm43n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P43-ibm43n02'(suite) -> [];
'ibm-not-wf-P43-ibm43n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P43-ibm43n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P43-ibm43n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P43-ibm43n01'(suite) -> [];
'ibm-not-wf-P43-ibm43n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P43-ibm43n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P43-ibm43n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n05'(suite) -> [];
'ibm-not-wf-P42-ibm42n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n04'(suite) -> [];
'ibm-not-wf-P42-ibm42n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n03'(suite) -> [];
'ibm-not-wf-P42-ibm42n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n02'(suite) -> [];
'ibm-not-wf-P42-ibm42n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n01'(suite) -> [];
'ibm-not-wf-P42-ibm42n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n14'(suite) -> [];
'ibm-not-wf-P41-ibm41n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n13'(suite) -> [];
'ibm-not-wf-P41-ibm41n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n12'(suite) -> [];
'ibm-not-wf-P41-ibm41n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n11'(suite) -> [];
'ibm-not-wf-P41-ibm41n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n10'(suite) -> [];
'ibm-not-wf-P41-ibm41n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n09'(suite) -> [];
'ibm-not-wf-P41-ibm41n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n08'(suite) -> [];
'ibm-not-wf-P41-ibm41n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n07'(suite) -> [];
'ibm-not-wf-P41-ibm41n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n06'(suite) -> [];
'ibm-not-wf-P41-ibm41n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n05'(suite) -> [];
'ibm-not-wf-P41-ibm41n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n04'(suite) -> [];
'ibm-not-wf-P41-ibm41n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n03'(suite) -> [];
'ibm-not-wf-P41-ibm41n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n02'(suite) -> [];
'ibm-not-wf-P41-ibm41n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n01'(suite) -> [];
'ibm-not-wf-P41-ibm41n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n05'(suite) -> [];
'ibm-not-wf-P40-ibm40n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n04'(suite) -> [];
'ibm-not-wf-P40-ibm40n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n03'(suite) -> [];
'ibm-not-wf-P40-ibm40n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n02'(suite) -> [];
'ibm-not-wf-P40-ibm40n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n01'(suite) -> [];
'ibm-not-wf-P40-ibm40n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n06'(suite) -> [];
'ibm-not-wf-P39-ibm39n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n05'(suite) -> [];
'ibm-not-wf-P39-ibm39n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n04'(suite) -> [];
'ibm-not-wf-P39-ibm39n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n03'(suite) -> [];
'ibm-not-wf-P39-ibm39n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n02'(suite) -> [];
'ibm-not-wf-P39-ibm39n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n01'(suite) -> [];
'ibm-not-wf-P39-ibm39n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n09'(suite) -> [];
'ibm-not-wf-P32-ibm32n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n08'(suite) -> [];
'ibm-not-wf-P32-ibm32n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n07'(suite) -> [];
'ibm-not-wf-P32-ibm32n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n06'(suite) -> [];
'ibm-not-wf-P32-ibm32n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n05'(suite) -> [];
'ibm-not-wf-P32-ibm32n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n04'(suite) -> [];
'ibm-not-wf-P32-ibm32n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n03'(suite) -> [];
'ibm-not-wf-P32-ibm32n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n02'(suite) -> [];
'ibm-not-wf-P32-ibm32n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n01'(suite) -> [];
'ibm-not-wf-P32-ibm32n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P31-ibm31n01'(suite) -> [];
'ibm-not-wf-P31-ibm31n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P31-ibm31n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P31-ibm31n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P30-ibm30n01'(suite) -> [];
'ibm-not-wf-P30-ibm30n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P30-ibm30n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P30-ibm30n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n07'(suite) -> [];
'ibm-not-wf-P29-ibm29n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n06'(suite) -> [];
'ibm-not-wf-P29-ibm29n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n05'(suite) -> [];
'ibm-not-wf-P29-ibm29n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n04'(suite) -> [];
'ibm-not-wf-P29-ibm29n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n03'(suite) -> [];
'ibm-not-wf-P29-ibm29n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n02'(suite) -> [];
'ibm-not-wf-P29-ibm29n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n01'(suite) -> [];
'ibm-not-wf-P29-ibm29n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28a-ibm28an01'(suite) -> [];
'ibm-not-wf-P28a-ibm28an01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28a-ibm28an01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28a-ibm28an01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n08'(suite) -> [];
'ibm-not-wf-P28-ibm28n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n07'(suite) -> [];
'ibm-not-wf-P28-ibm28n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n06'(suite) -> [];
'ibm-not-wf-P28-ibm28n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n05'(suite) -> [];
'ibm-not-wf-P28-ibm28n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n04'(suite) -> [];
'ibm-not-wf-P28-ibm28n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n03'(suite) -> [];
'ibm-not-wf-P28-ibm28n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n02'(suite) -> [];
'ibm-not-wf-P28-ibm28n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n01'(suite) -> [];
'ibm-not-wf-P28-ibm28n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P27-ibm27n01'(suite) -> [];
'ibm-not-wf-P27-ibm27n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P27-ibm27n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P27-ibm27n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P26-ibm26n01'(suite) -> [];
'ibm-not-wf-P26-ibm26n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P26-ibm26n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P26-ibm26n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P25-ibm25n02'(suite) -> [];
'ibm-not-wf-P25-ibm25n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P25-ibm25n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P25-ibm25n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P25-ibm25n01'(suite) -> [];
'ibm-not-wf-P25-ibm25n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P25-ibm25n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P25-ibm25n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n09'(suite) -> [];
'ibm-not-wf-P24-ibm24n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n08'(suite) -> [];
'ibm-not-wf-P24-ibm24n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n07'(suite) -> [];
'ibm-not-wf-P24-ibm24n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n06'(suite) -> [];
'ibm-not-wf-P24-ibm24n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n05'(suite) -> [];
'ibm-not-wf-P24-ibm24n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n04'(suite) -> [];
'ibm-not-wf-P24-ibm24n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n03'(suite) -> [];
'ibm-not-wf-P24-ibm24n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n02'(suite) -> [];
'ibm-not-wf-P24-ibm24n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n01'(suite) -> [];
'ibm-not-wf-P24-ibm24n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n06'(suite) -> [];
'ibm-not-wf-P23-ibm23n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n05'(suite) -> [];
'ibm-not-wf-P23-ibm23n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n04'(suite) -> [];
'ibm-not-wf-P23-ibm23n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n03'(suite) -> [];
'ibm-not-wf-P23-ibm23n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n02'(suite) -> [];
'ibm-not-wf-P23-ibm23n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n01'(suite) -> [];
'ibm-not-wf-P23-ibm23n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P22-ibm22n03'(suite) -> [];
'ibm-not-wf-P22-ibm22n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P22-ibm22n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P22-ibm22n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P22-ibm22n02'(suite) -> [];
'ibm-not-wf-P22-ibm22n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P22-ibm22n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P22-ibm22n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P22-ibm22n01'(suite) -> [];
'ibm-not-wf-P22-ibm22n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P22-ibm22n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P22-ibm22n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P21-ibm21n03'(suite) -> [];
'ibm-not-wf-P21-ibm21n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P21-ibm21n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P21-ibm21n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P21-ibm21n02'(suite) -> [];
'ibm-not-wf-P21-ibm21n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P21-ibm21n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P21-ibm21n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P21-ibm21n01'(suite) -> [];
'ibm-not-wf-P21-ibm21n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P21-ibm21n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P21-ibm21n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P20-ibm20n01'(suite) -> [];
'ibm-not-wf-P20-ibm20n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P20-ibm20n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P20-ibm20n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P19-ibm19n03'(suite) -> [];
'ibm-not-wf-P19-ibm19n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P19-ibm19n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P19-ibm19n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P19-ibm19n02'(suite) -> [];
'ibm-not-wf-P19-ibm19n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P19-ibm19n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P19-ibm19n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P19-ibm19n01'(suite) -> [];
'ibm-not-wf-P19-ibm19n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P19-ibm19n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P19-ibm19n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P18-ibm18n02'(suite) -> [];
'ibm-not-wf-P18-ibm18n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P18-ibm18n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P18-ibm18n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P18-ibm18n01'(suite) -> [];
'ibm-not-wf-P18-ibm18n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P18-ibm18n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P18-ibm18n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P17-ibm17n04'(suite) -> [];
'ibm-not-wf-P17-ibm17n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P17-ibm17n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P17-ibm17n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P17-ibm17n03'(suite) -> [];
'ibm-not-wf-P17-ibm17n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P17-ibm17n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P17-ibm17n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P17-ibm17n02'(suite) -> [];
'ibm-not-wf-P17-ibm17n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P17-ibm17n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P17-ibm17n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P17-ibm17n01'(suite) -> [];
'ibm-not-wf-P17-ibm17n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P17-ibm17n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P17-ibm17n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P16-ibm16n04'(suite) -> [];
'ibm-not-wf-P16-ibm16n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P16-ibm16n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P16-ibm16n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P16-ibm16n03'(suite) -> [];
'ibm-not-wf-P16-ibm16n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P16-ibm16n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P16-ibm16n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P16-ibm16n02'(suite) -> [];
'ibm-not-wf-P16-ibm16n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P16-ibm16n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P16-ibm16n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P16-ibm16n01'(suite) -> [];
'ibm-not-wf-P16-ibm16n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P16-ibm16n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P16-ibm16n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P15-ibm15n04'(suite) -> [];
'ibm-not-wf-P15-ibm15n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P15-ibm15n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P15-ibm15n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P15-ibm15n03'(suite) -> [];
'ibm-not-wf-P15-ibm15n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P15-ibm15n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P15-ibm15n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P15-ibm15n02'(suite) -> [];
'ibm-not-wf-P15-ibm15n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P15-ibm15n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P15-ibm15n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P15-ibm15n01'(suite) -> [];
'ibm-not-wf-P15-ibm15n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P15-ibm15n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P15-ibm15n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P14-ibm14n03'(suite) -> [];
'ibm-not-wf-P14-ibm14n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P14-ibm14n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P14-ibm14n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P14-ibm14n02'(suite) -> [];
'ibm-not-wf-P14-ibm14n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P14-ibm14n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P14-ibm14n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P14-ibm14n01'(suite) -> [];
'ibm-not-wf-P14-ibm14n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P14-ibm14n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P14-ibm14n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P13-ibm13n03'(suite) -> [];
'ibm-not-wf-P13-ibm13n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P13-ibm13n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P13-ibm13n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P13-ibm13n02'(suite) -> [];
'ibm-not-wf-P13-ibm13n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P13-ibm13n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P13-ibm13n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P13-ibm13n01'(suite) -> [];
'ibm-not-wf-P13-ibm13n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P13-ibm13n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P13-ibm13n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P12-ibm12n03'(suite) -> [];
'ibm-not-wf-P12-ibm12n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P12-ibm12n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P12-ibm12n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P12-ibm12n02'(suite) -> [];
'ibm-not-wf-P12-ibm12n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P12-ibm12n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P12-ibm12n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P12-ibm12n01'(suite) -> [];
'ibm-not-wf-P12-ibm12n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P12-ibm12n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P12-ibm12n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P11-ibm11n04'(suite) -> [];
'ibm-not-wf-P11-ibm11n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P11-ibm11n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P11-ibm11n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P11-ibm11n03'(suite) -> [];
'ibm-not-wf-P11-ibm11n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P11-ibm11n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P11-ibm11n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P11-ibm11n02'(suite) -> [];
'ibm-not-wf-P11-ibm11n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P11-ibm11n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P11-ibm11n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P11-ibm11n01'(suite) -> [];
'ibm-not-wf-P11-ibm11n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P11-ibm11n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P11-ibm11n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n08'(suite) -> [];
'ibm-not-wf-P10-ibm10n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n07'(suite) -> [];
'ibm-not-wf-P10-ibm10n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n06'(suite) -> [];
'ibm-not-wf-P10-ibm10n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n05'(suite) -> [];
'ibm-not-wf-P10-ibm10n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n04'(suite) -> [];
'ibm-not-wf-P10-ibm10n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n03'(suite) -> [];
'ibm-not-wf-P10-ibm10n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n02'(suite) -> [];
'ibm-not-wf-P10-ibm10n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n01'(suite) -> [];
'ibm-not-wf-P10-ibm10n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P09-ibm09n04'(suite) -> [];
'ibm-not-wf-P09-ibm09n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P09-ibm09n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P09-ibm09n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P09-ibm09n03'(suite) -> [];
'ibm-not-wf-P09-ibm09n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P09-ibm09n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P09-ibm09n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P09-ibm09n02'(suite) -> [];
'ibm-not-wf-P09-ibm09n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P09-ibm09n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P09-ibm09n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P09-ibm09n01'(suite) -> [];
'ibm-not-wf-P09-ibm09n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P09-ibm09n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P09-ibm09n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P05-ibm05n03'(suite) -> [];
'ibm-not-wf-P05-ibm05n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P05-ibm05n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P05-ibm05n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P05-ibm05n02'(suite) -> [];
'ibm-not-wf-P05-ibm05n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P05-ibm05n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P05-ibm05n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P05-ibm05n01'(suite) -> [];
'ibm-not-wf-P05-ibm05n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P05-ibm05n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P05-ibm05n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n18'(suite) -> [];
'ibm-not-wf-P04-ibm04n18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n17'(suite) -> [];
'ibm-not-wf-P04-ibm04n17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n16'(suite) -> [];
'ibm-not-wf-P04-ibm04n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n15'(suite) -> [];
'ibm-not-wf-P04-ibm04n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n14'(suite) -> [];
'ibm-not-wf-P04-ibm04n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n13'(suite) -> [];
'ibm-not-wf-P04-ibm04n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n12'(suite) -> [];
'ibm-not-wf-P04-ibm04n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n11'(suite) -> [];
'ibm-not-wf-P04-ibm04n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n10'(suite) -> [];
'ibm-not-wf-P04-ibm04n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n09'(suite) -> [];
'ibm-not-wf-P04-ibm04n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n08'(suite) -> [];
'ibm-not-wf-P04-ibm04n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n07'(suite) -> [];
'ibm-not-wf-P04-ibm04n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n06'(suite) -> [];
'ibm-not-wf-P04-ibm04n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n05'(suite) -> [];
'ibm-not-wf-P04-ibm04n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n04'(suite) -> [];
'ibm-not-wf-P04-ibm04n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n03'(suite) -> [];
'ibm-not-wf-P04-ibm04n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n02'(suite) -> [];
'ibm-not-wf-P04-ibm04n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n01'(suite) -> [];
'ibm-not-wf-P04-ibm04n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P03-ibm03n01'(suite) -> [];
'ibm-not-wf-P03-ibm03n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P03-ibm03n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P03-ibm03n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n33'(suite) -> [];
'ibm-not-wf-P02-ibm02n33'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n33.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n33.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n32'(suite) -> [];
'ibm-not-wf-P02-ibm02n32'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n32.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n32.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n31'(suite) -> [];
'ibm-not-wf-P02-ibm02n31'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n31.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n31.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n30'(suite) -> [];
'ibm-not-wf-P02-ibm02n30'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n30.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n30.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n29'(suite) -> [];
'ibm-not-wf-P02-ibm02n29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n28'(suite) -> [];
'ibm-not-wf-P02-ibm02n28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n27'(suite) -> [];
'ibm-not-wf-P02-ibm02n27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n26'(suite) -> [];
'ibm-not-wf-P02-ibm02n26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n25'(suite) -> [];
'ibm-not-wf-P02-ibm02n25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n24'(suite) -> [];
'ibm-not-wf-P02-ibm02n24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n23'(suite) -> [];
'ibm-not-wf-P02-ibm02n23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n22'(suite) -> [];
'ibm-not-wf-P02-ibm02n22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n21'(suite) -> [];
'ibm-not-wf-P02-ibm02n21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n20'(suite) -> [];
'ibm-not-wf-P02-ibm02n20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n19'(suite) -> [];
'ibm-not-wf-P02-ibm02n19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n18'(suite) -> [];
'ibm-not-wf-P02-ibm02n18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n17'(suite) -> [];
'ibm-not-wf-P02-ibm02n17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n16'(suite) -> [];
'ibm-not-wf-P02-ibm02n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n15'(suite) -> [];
'ibm-not-wf-P02-ibm02n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n14'(suite) -> [];
'ibm-not-wf-P02-ibm02n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n13'(suite) -> [];
'ibm-not-wf-P02-ibm02n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n12'(suite) -> [];
'ibm-not-wf-P02-ibm02n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n11'(suite) -> [];
'ibm-not-wf-P02-ibm02n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n10'(suite) -> [];
'ibm-not-wf-P02-ibm02n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n09'(suite) -> [];
'ibm-not-wf-P02-ibm02n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n08'(suite) -> [];
'ibm-not-wf-P02-ibm02n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n07'(suite) -> [];
'ibm-not-wf-P02-ibm02n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n06'(suite) -> [];
'ibm-not-wf-P02-ibm02n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n05'(suite) -> [];
'ibm-not-wf-P02-ibm02n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n04'(suite) -> [];
'ibm-not-wf-P02-ibm02n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n03'(suite) -> [];
'ibm-not-wf-P02-ibm02n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n02'(suite) -> [];
'ibm-not-wf-P02-ibm02n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n01'(suite) -> [];
'ibm-not-wf-P02-ibm02n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P01-ibm01n03'(suite) -> [];
'ibm-not-wf-P01-ibm01n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P01-ibm01n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P01-ibm01n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P01-ibm01n02'(suite) -> [];
'ibm-not-wf-P01-ibm01n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P01-ibm01n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P01-ibm01n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P01-ibm01n01'(suite) -> [];
'ibm-not-wf-P01-ibm01n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P01-ibm01n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P01-ibm01n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'ibm-valid-P89-ibm89v01'(suite) -> [];
'ibm-valid-P89-ibm89v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P89-ibm89v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P89-ibm89v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P88-ibm88v01'(suite) -> [];
'ibm-valid-P88-ibm88v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P88-ibm88v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P88-ibm88v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P87-ibm87v01'(suite) -> [];
'ibm-valid-P87-ibm87v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P87-ibm87v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P87-ibm87v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P86-ibm86v01'(suite) -> [];
'ibm-valid-P86-ibm86v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P86-ibm86v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P86-ibm86v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P85-ibm85v01'(suite) -> [];
'ibm-valid-P85-ibm85v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P85-ibm85v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P85-ibm85v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P82-ibm82v01'(suite) -> [];
'ibm-valid-P82-ibm82v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P82-ibm82v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P82-ibm82v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P79-ibm79v01'(suite) -> [];
'ibm-valid-P79-ibm79v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P79-ibm79v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P79-ibm79v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P78-ibm78v01'(suite) -> [];
'ibm-valid-P78-ibm78v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P78-ibm78v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P78-ibm78v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P70-ibm70v01'(suite) -> [];
'ibm-valid-P70-ibm70v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P70-ibm70v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P70-ibm70v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P69-ibm69v02'(suite) -> [];
'ibm-valid-P69-ibm69v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P69-ibm69v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P69-ibm69v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P69-ibm69v01'(suite) -> [];
'ibm-valid-P69-ibm69v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P69-ibm69v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P69-ibm69v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P68-ibm68v02'(suite) -> [];
'ibm-valid-P68-ibm68v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P68-ibm68v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P68-ibm68v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P68-ibm68v01'(suite) -> [];
'ibm-valid-P68-ibm68v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P68-ibm68v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P68-ibm68v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P67-ibm67v01'(suite) -> [];
'ibm-valid-P67-ibm67v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P67-ibm67v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P67-ibm67v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P66-ibm66v01'(suite) -> [];
'ibm-valid-P66-ibm66v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P66-ibm66v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P66-ibm66v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P65-ibm65v02'(suite) -> [];
'ibm-valid-P65-ibm65v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P65-ibm65v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P65-ibm65v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P65-ibm65v01'(suite) -> [];
'ibm-valid-P65-ibm65v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P65-ibm65v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P65-ibm65v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P64-ibm64v03'(suite) -> [];
'ibm-valid-P64-ibm64v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P64-ibm64v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P64-ibm64v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P64-ibm64v02'(suite) -> [];
'ibm-valid-P64-ibm64v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P64-ibm64v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P64-ibm64v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P64-ibm64v01'(suite) -> [];
'ibm-valid-P64-ibm64v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P64-ibm64v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P64-ibm64v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v05'(suite) -> [];
'ibm-valid-P63-ibm63v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v04'(suite) -> [];
'ibm-valid-P63-ibm63v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v03'(suite) -> [];
'ibm-valid-P63-ibm63v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v02'(suite) -> [];
'ibm-valid-P63-ibm63v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v01'(suite) -> [];
'ibm-valid-P63-ibm63v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v05'(suite) -> [];
'ibm-valid-P62-ibm62v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v04'(suite) -> [];
'ibm-valid-P62-ibm62v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v03'(suite) -> [];
'ibm-valid-P62-ibm62v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v02'(suite) -> [];
'ibm-valid-P62-ibm62v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v01'(suite) -> [];
'ibm-valid-P62-ibm62v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P61-ibm61v02'(suite) -> [];
'ibm-valid-P61-ibm61v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P61-ibm61v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P61-ibm61v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P61-ibm61v01'(suite) -> [];
'ibm-valid-P61-ibm61v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P61-ibm61v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P61-ibm61v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P60-ibm60v04'(suite) -> [];
'ibm-valid-P60-ibm60v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P60-ibm60v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P60-ibm60v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P60-ibm60v03'(suite) -> [];
'ibm-valid-P60-ibm60v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P60-ibm60v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P60-ibm60v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P60-ibm60v02'(suite) -> [];
'ibm-valid-P60-ibm60v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P60-ibm60v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P60-ibm60v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P60-ibm60v01'(suite) -> [];
'ibm-valid-P60-ibm60v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P60-ibm60v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P60-ibm60v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P59-ibm59v02'(suite) -> [];
'ibm-valid-P59-ibm59v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P59-ibm59v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P59-ibm59v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P59-ibm59v01'(suite) -> [];
'ibm-valid-P59-ibm59v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P59-ibm59v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P59-ibm59v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P58-ibm58v02'(suite) -> [];
'ibm-valid-P58-ibm58v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P58-ibm58v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P58-ibm58v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P58-ibm58v01'(suite) -> [];
'ibm-valid-P58-ibm58v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P58-ibm58v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P58-ibm58v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P57-ibm57v01'(suite) -> [];
'ibm-valid-P57-ibm57v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P57-ibm57v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P57-ibm57v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v10'(suite) -> [];
'ibm-valid-P56-ibm56v10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v09'(suite) -> [];
'ibm-valid-P56-ibm56v09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v08'(suite) -> [];
'ibm-valid-P56-ibm56v08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v07'(suite) -> [];
'ibm-valid-P56-ibm56v07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v06'(suite) -> [];
'ibm-valid-P56-ibm56v06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v05'(suite) -> [];
'ibm-valid-P56-ibm56v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v04'(suite) -> [];
'ibm-valid-P56-ibm56v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v03'(suite) -> [];
'ibm-valid-P56-ibm56v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v02'(suite) -> [];
'ibm-valid-P56-ibm56v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v01'(suite) -> [];
'ibm-valid-P56-ibm56v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P55-ibm55v01'(suite) -> [];
'ibm-valid-P55-ibm55v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P55-ibm55v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P55-ibm55v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P54-ibm54v03'(suite) -> [];
'ibm-valid-P54-ibm54v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P54-ibm54v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P54-ibm54v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P54-ibm54v02'(suite) -> [];
'ibm-valid-P54-ibm54v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P54-ibm54v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P54-ibm54v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P54-ibm54v01'(suite) -> [];
'ibm-valid-P54-ibm54v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P54-ibm54v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P54-ibm54v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P52-ibm52v01'(suite) -> [];
'ibm-valid-P52-ibm52v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P52-ibm52v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P52-ibm52v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P51-ibm51v02'(suite) -> [];
'ibm-valid-P51-ibm51v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P51-ibm51v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P51-ibm51v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P51-ibm51v01'(suite) -> [];
'ibm-valid-P51-ibm51v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P51-ibm51v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P51-ibm51v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P50-ibm50v01'(suite) -> [];
'ibm-valid-P50-ibm50v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P50-ibm50v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P50-ibm50v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P49-ibm49v01'(suite) -> [];
'ibm-valid-P49-ibm49v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P49-ibm49v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P49-ibm49v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P47-ibm47v01'(suite) -> [];
'ibm-valid-P47-ibm47v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P47-ibm47v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P47-ibm47v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P45-ibm45v01'(suite) -> [];
'ibm-valid-P45-ibm45v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P45-ibm45v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P45-ibm45v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P44-ibm44v01'(suite) -> [];
'ibm-valid-P44-ibm44v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P44-ibm44v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P44-ibm44v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P43-ibm43v01'(suite) -> [];
'ibm-valid-P43-ibm43v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P43-ibm43v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P43-ibm43v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P42-ibm42v01'(suite) -> [];
'ibm-valid-P42-ibm42v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P42-ibm42v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P42-ibm42v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P41-ibm41v01'(suite) -> [];
'ibm-valid-P41-ibm41v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P41-ibm41v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P41-ibm41v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P40-ibm40v01'(suite) -> [];
'ibm-valid-P40-ibm40v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P40-ibm40v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P40-ibm40v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P39-ibm39v01'(suite) -> [];
'ibm-valid-P39-ibm39v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P39-ibm39v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P39-ibm39v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P38-ibm38v01'(suite) -> [];
'ibm-valid-P38-ibm38v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P38-ibm38v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P38-ibm38v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P37-ibm37v01'(suite) -> [];
'ibm-valid-P37-ibm37v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P37-ibm37v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P37-ibm37v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P36-ibm36v01'(suite) -> [];
'ibm-valid-P36-ibm36v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P36-ibm36v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P36-ibm36v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P35-ibm35v01'(suite) -> [];
'ibm-valid-P35-ibm35v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P35-ibm35v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P35-ibm35v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P34-ibm34v01'(suite) -> [];
'ibm-valid-P34-ibm34v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P34-ibm34v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P34-ibm34v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P33-ibm33v01'(suite) -> [];
'ibm-valid-P33-ibm33v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P33-ibm33v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P33-ibm33v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P32-ibm32v04'(suite) -> [];
'ibm-valid-P32-ibm32v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P32-ibm32v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P32-ibm32v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P32-ibm32v03'(suite) -> [];
'ibm-valid-P32-ibm32v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P32-ibm32v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P32-ibm32v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P32-ibm32v02'(suite) -> [];
'ibm-valid-P32-ibm32v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P32-ibm32v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P32-ibm32v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P32-ibm32v01'(suite) -> [];
'ibm-valid-P32-ibm32v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P32-ibm32v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P32-ibm32v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P31-ibm31v01'(suite) -> [];
'ibm-valid-P31-ibm31v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P31-ibm31v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P31-ibm31v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P30-ibm30v02'(suite) -> [];
'ibm-valid-P30-ibm30v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P30-ibm30v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P30-ibm30v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P30-ibm30v01'(suite) -> [];
'ibm-valid-P30-ibm30v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P30-ibm30v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P30-ibm30v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P29-ibm29v02'(suite) -> [];
'ibm-valid-P29-ibm29v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P29-ibm29v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P29-ibm29v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P29-ibm29v01'(suite) -> [];
'ibm-valid-P29-ibm29v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P29-ibm29v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P29-ibm29v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P28-ibm28v02'(suite) -> [];
'ibm-valid-P28-ibm28v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P28-ibm28v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P28-ibm28v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P28-ibm28v01'(suite) -> [];
'ibm-valid-P28-ibm28v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P28-ibm28v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P28-ibm28v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P27-ibm27v03'(suite) -> [];
'ibm-valid-P27-ibm27v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P27-ibm27v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P27-ibm27v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P27-ibm27v02'(suite) -> [];
'ibm-valid-P27-ibm27v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P27-ibm27v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P27-ibm27v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P27-ibm27v01'(suite) -> [];
'ibm-valid-P27-ibm27v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P27-ibm27v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P27-ibm27v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P26-ibm26v01'(suite) -> [];
'ibm-valid-P26-ibm26v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P26-ibm26v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P26-ibm26v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P25-ibm25v04'(suite) -> [];
'ibm-valid-P25-ibm25v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P25-ibm25v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P25-ibm25v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P25-ibm25v03'(suite) -> [];
'ibm-valid-P25-ibm25v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P25-ibm25v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P25-ibm25v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P25-ibm25v02'(suite) -> [];
'ibm-valid-P25-ibm25v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P25-ibm25v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P25-ibm25v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P25-ibm25v01'(suite) -> [];
'ibm-valid-P25-ibm25v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P25-ibm25v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P25-ibm25v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P24-ibm24v02'(suite) -> [];
'ibm-valid-P24-ibm24v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P24-ibm24v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P24-ibm24v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P24-ibm24v01'(suite) -> [];
'ibm-valid-P24-ibm24v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P24-ibm24v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P24-ibm24v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v06'(suite) -> [];
'ibm-valid-P23-ibm23v06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v05'(suite) -> [];
'ibm-valid-P23-ibm23v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v04'(suite) -> [];
'ibm-valid-P23-ibm23v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v03'(suite) -> [];
'ibm-valid-P23-ibm23v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v02'(suite) -> [];
'ibm-valid-P23-ibm23v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v01'(suite) -> [];
'ibm-valid-P23-ibm23v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v07'(suite) -> [];
'ibm-valid-P22-ibm22v07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v06'(suite) -> [];
'ibm-valid-P22-ibm22v06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v05'(suite) -> [];
'ibm-valid-P22-ibm22v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v04'(suite) -> [];
'ibm-valid-P22-ibm22v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v03'(suite) -> [];
'ibm-valid-P22-ibm22v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v02'(suite) -> [];
'ibm-valid-P22-ibm22v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v01'(suite) -> [];
'ibm-valid-P22-ibm22v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P21-ibm21v01'(suite) -> [];
'ibm-valid-P21-ibm21v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P21-ibm21v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P21-ibm21v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P20-ibm20v02'(suite) -> [];
'ibm-valid-P20-ibm20v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P20-ibm20v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P20-ibm20v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P20-ibm20v01'(suite) -> [];
'ibm-valid-P20-ibm20v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P20-ibm20v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P20-ibm20v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P19-ibm19v01'(suite) -> [];
'ibm-valid-P19-ibm19v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P19-ibm19v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P19-ibm19v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P18-ibm18v01'(suite) -> [];
'ibm-valid-P18-ibm18v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P18-ibm18v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P18-ibm18v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P17-ibm17v01'(suite) -> [];
'ibm-valid-P17-ibm17v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P17-ibm17v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P17-ibm17v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P16-ibm16v03'(suite) -> [];
'ibm-valid-P16-ibm16v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P16-ibm16v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P16-ibm16v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P16-ibm16v02'(suite) -> [];
'ibm-valid-P16-ibm16v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P16-ibm16v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P16-ibm16v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P16-ibm16v01'(suite) -> [];
'ibm-valid-P16-ibm16v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P16-ibm16v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P16-ibm16v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P15-ibm15v04'(suite) -> [];
'ibm-valid-P15-ibm15v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P15-ibm15v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P15-ibm15v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P15-ibm15v03'(suite) -> [];
'ibm-valid-P15-ibm15v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P15-ibm15v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P15-ibm15v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P15-ibm15v02'(suite) -> [];
'ibm-valid-P15-ibm15v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P15-ibm15v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P15-ibm15v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P15-ibm15v01'(suite) -> [];
'ibm-valid-P15-ibm15v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P15-ibm15v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P15-ibm15v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P14-ibm14v03'(suite) -> [];
'ibm-valid-P14-ibm14v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P14-ibm14v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P14-ibm14v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P14-ibm14v02'(suite) -> [];
'ibm-valid-P14-ibm14v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P14-ibm14v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P14-ibm14v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P14-ibm14v01'(suite) -> [];
'ibm-valid-P14-ibm14v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P14-ibm14v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P14-ibm14v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P13-ibm13v01'(suite) -> [];
'ibm-valid-P13-ibm13v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P13-ibm13v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P13-ibm13v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P12-ibm12v04'(suite) -> [];
'ibm-valid-P12-ibm12v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P12-ibm12v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P12-ibm12v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P12-ibm12v03'(suite) -> [];
'ibm-valid-P12-ibm12v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P12-ibm12v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P12-ibm12v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P12-ibm12v02'(suite) -> [];
'ibm-valid-P12-ibm12v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P12-ibm12v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P12-ibm12v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P12-ibm12v01'(suite) -> [];
'ibm-valid-P12-ibm12v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P12-ibm12v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P12-ibm12v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P11-ibm11v04'(suite) -> [];
'ibm-valid-P11-ibm11v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P11-ibm11v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P11-ibm11v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P11-ibm11v03'(suite) -> [];
'ibm-valid-P11-ibm11v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P11-ibm11v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P11-ibm11v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P11-ibm11v02'(suite) -> [];
'ibm-valid-P11-ibm11v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P11-ibm11v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P11-ibm11v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P11-ibm11v01'(suite) -> [];
'ibm-valid-P11-ibm11v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P11-ibm11v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P11-ibm11v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v08'(suite) -> [];
'ibm-valid-P10-ibm10v08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v07'(suite) -> [];
'ibm-valid-P10-ibm10v07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v06'(suite) -> [];
'ibm-valid-P10-ibm10v06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v05'(suite) -> [];
'ibm-valid-P10-ibm10v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v04'(suite) -> [];
'ibm-valid-P10-ibm10v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v03'(suite) -> [];
'ibm-valid-P10-ibm10v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v02'(suite) -> [];
'ibm-valid-P10-ibm10v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v01'(suite) -> [];
'ibm-valid-P10-ibm10v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v05'(suite) -> [];
'ibm-valid-P09-ibm09v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v04'(suite) -> [];
'ibm-valid-P09-ibm09v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v03'(suite) -> [];
'ibm-valid-P09-ibm09v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v02'(suite) -> [];
'ibm-valid-P09-ibm09v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v01'(suite) -> [];
'ibm-valid-P09-ibm09v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P03-ibm03v01'(suite) -> [];
'ibm-valid-P03-ibm03v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P03-ibm03v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P03-ibm03v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P02-ibm02v01'(suite) -> [];
'ibm-valid-P02-ibm02v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P02-ibm02v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P02-ibm02v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P01-ibm01v01'(suite) -> [];
'ibm-valid-P01-ibm01v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P01-ibm01v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P01-ibm01v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
@@ -11730,11 +9899,11 @@ end_per_testcase(_Func,Config) ->
%% Dir is a directory
rm_f_(Dir) ->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
rm_files(FileList),
- ?line file:set_cwd(CWD),
+ file:set_cwd(CWD),
? line ok = file:del_dir(Dir).
rm_files([])->
@@ -11744,7 +9913,7 @@ rm_files([F|Fs]) ->
true ->
rm_f_(F);
_ ->
- ?line ok = file:delete(F)
+ ok = file:delete(F)
end,
rm_files(Fs).
@@ -11752,11 +9921,11 @@ rm_files([F|Fs]) ->
change_mode(Files) ->
change_mode3(Files).
change_mode2(Dir)->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
change_mode3(FileList),
- ?line file:set_cwd(CWD).
+ file:set_cwd(CWD).
change_mode3([]) ->
ok;
change_mode3([F|Fs]) ->
@@ -11778,23 +9947,25 @@ chmod(F) ->
ok
end.
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+datadir(Config) ->
+ proplists:get_value(data_dir, Config).
-
+datadir_join(Config,Files) ->
+ filename:join([datadir(Config)|Files]).
%%add_xml_path(TestCase) ->
%testcase_dir(TestCase) ->
-% add_xml_path(lists:member(TestCase,ibm_test_cases(suite)),?ibm_dir,TestCase,
% [{fun japanese_test_cases/1,?japanese_dir},
% {fun oasis_test_cases/1,?oasis_dir},
% {fun sun_test_cases/1,?sun_dir},
% {fun xmltest_test_cases/1,?xmltest_dir}]).
%add_xml_path(true,Dir,_,_) ->
% io:format("directory in path:~p~n",[Dir]),
-%% ?line code:add_patha(Dir);
+%% code:add_patha(Dir);
% Dir;
%add_xml_path(_,_,TestCase,[{NextTCs,NextDir}|Rest]) ->
-% add_xml_path(lists:member(TestCase,NextTCs(suite)),NextDir,TestCase,Rest);
%add_xml_path(false,_,TC,[]) ->
% exit({error,{xmltests,uncovered_test_case,TC}}).
-
diff --git a/lib/xmerl/test/xmerl_test_lib.erl b/lib/xmerl/test/xmerl_test_lib.erl
index 62689353f2..58a6341587 100644
--- a/lib/xmerl/test/xmerl_test_lib.erl
+++ b/lib/xmerl/test/xmerl_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("xmerl/include/xmerl.hrl").
%% cmp_element/2
@@ -88,6 +88,6 @@ keysearch_delete(Key,N,List) ->
%% the original data directory.
get_data_dir(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Opts = [{return,list}],
re:replace(Data, "xmerl_sax_std_SUITE", "xmerl_std_SUITE", Opts).
diff --git a/lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl b/lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl
index ee648dc455..32ec380597 100644
--- a/lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl
+++ b/lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("xmerl/include/xmerl.hrl").
-include_lib("xmerl/include/xmerl_xsd.hrl").
@@ -39,1782 +39,1770 @@ all() ->
particlesKOSRTQUVW, stABCDE, stFGH, stIJK, stZ,
wildABCDEF, wildGHI, wildJKLMNQOP, wildZ].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
+suite() ->
+ [{timetrap,{minutes,3}}].
%% initialization before the test suite
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- xmerl_xsd_lib:unpack(Config,msx),
- {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,msx),
- test_server:timetrap_cancel(Dog),
- [{suite,msx},{xmerl_error_log,LogFile}|Config].
+ ct:timetrap({minutes,10}),
+ xmerl_xsd_lib:unpack(Config,msx),
+ {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,msx),
+ [{suite,msx},{xmerl_error_log,LogFile}|Config].
end_per_suite(Config) ->
- xmerl_xsd_lib:rmdir(Config,msx),
- xmerl_xsd_lib:close_error_log_file(Config),
- ok.
+ xmerl_xsd_lib:rmdir(Config,msx),
+ xmerl_xsd_lib:close_error_log_file(Config),
+ ok.
%% initialization before each testcase
init_per_testcase(TestCase,Config) ->
- Dog=test_server:timetrap({minutes,3}),
- [{testcase,TestCase},{watchdog, Dog}|Config].
+ [{testcase,TestCase}|Config].
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+end_per_testcase(_Func,_Config) ->
+ ok.
%% Syntax Checking for Attribute Declaration
att(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA001.xsd','./msxsdtest/attribute',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA001.xsd','./msxsdtest/attribute',invalid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA002.xsd','./msxsdtest/attribute',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA002.xsd','./msxsdtest/attribute',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA003.xsd','./msxsdtest/attribute',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA003.xsd','./msxsdtest/attribute',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA004.xsd','./msxsdtest/attribute',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA004.xsd','./msxsdtest/attribute',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA005.xsd','./msxsdtest/attribute',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA005.xsd','./msxsdtest/attribute',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA006.xsd','./msxsdtest/attribute',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA006.xsd','./msxsdtest/attribute',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA007.xsd','./msxsdtest/attribute',valid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA007.xsd','./msxsdtest/attribute',valid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA008.xsd','./msxsdtest/attribute',valid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA008.xsd','./msxsdtest/attribute',valid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB001.xsd','./msxsdtest/attribute',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB001.xsd','./msxsdtest/attribute',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB002.xsd','./msxsdtest/attribute',valid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB002.xsd','./msxsdtest/attribute',valid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB003.xsd','./msxsdtest/attribute',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB003.xsd','./msxsdtest/attribute',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB004.xsd','./msxsdtest/attribute',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB004.xsd','./msxsdtest/attribute',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB005.xsd','./msxsdtest/attribute',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB005.xsd','./msxsdtest/attribute',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB006.xsd','./msxsdtest/attribute',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB006.xsd','./msxsdtest/attribute',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC001.xsd','./msxsdtest/attribute',valid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC001.xsd','./msxsdtest/attribute',valid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC003.xsd','./msxsdtest/attribute',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC003.xsd','./msxsdtest/attribute',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC004.xsd','./msxsdtest/attribute',invalid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC004.xsd','./msxsdtest/attribute',invalid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC005.xsd','./msxsdtest/attribute',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC005.xsd','./msxsdtest/attribute',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC006.xsd','./msxsdtest/attribute',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC006.xsd','./msxsdtest/attribute',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC007.xsd','./msxsdtest/attribute',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC007.xsd','./msxsdtest/attribute',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC008.xsd','./msxsdtest/attribute',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC008.xsd','./msxsdtest/attribute',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC009.xsd','./msxsdtest/attribute',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC009.xsd','./msxsdtest/attribute',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC010.xsd','./msxsdtest/attribute',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC010.xsd','./msxsdtest/attribute',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD001.xsd','./msxsdtest/attribute',valid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD001.xsd','./msxsdtest/attribute',valid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD002.xsd','./msxsdtest/attribute',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD002.xsd','./msxsdtest/attribute',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD003.xsd','./msxsdtest/attribute',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD003.xsd','./msxsdtest/attribute',valid),
STResList26 = [STRes25|STResList25],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD003.xml','./msxsdtest/attribute',valid,S25),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD003.xml','./msxsdtest/attribute',valid,S25),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD004.xsd','./msxsdtest/attribute',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD004.xsd','./msxsdtest/attribute',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD004.xml','./msxsdtest/attribute',valid,S26),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD004.xml','./msxsdtest/attribute',valid,S26),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD005.xsd','./msxsdtest/attribute',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD005.xsd','./msxsdtest/attribute',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD006.xsd','./msxsdtest/attribute',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD006.xsd','./msxsdtest/attribute',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD007.xsd','./msxsdtest/attribute',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD007.xsd','./msxsdtest/attribute',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD007.xml','./msxsdtest/attribute',valid,S29),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD007.xml','./msxsdtest/attribute',valid,S29),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE001.xsd','./msxsdtest/attribute',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE001.xsd','./msxsdtest/attribute',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attE001.xml','./msxsdtest/attribute',valid,S30),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attE001.xml','./msxsdtest/attribute',valid,S30),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE002.xsd','./msxsdtest/attribute',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE002.xsd','./msxsdtest/attribute',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE003.xsd','./msxsdtest/attribute',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE003.xsd','./msxsdtest/attribute',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE004.xsd','./msxsdtest/attribute',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE004.xsd','./msxsdtest/attribute',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE005.xsd','./msxsdtest/attribute',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE005.xsd','./msxsdtest/attribute',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE006.xsd','./msxsdtest/attribute',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE006.xsd','./msxsdtest/attribute',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE007.xsd','./msxsdtest/attribute',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE007.xsd','./msxsdtest/attribute',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE008.xsd','./msxsdtest/attribute',valid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE008.xsd','./msxsdtest/attribute',valid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF001.xsd','./msxsdtest/attribute',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF001.xsd','./msxsdtest/attribute',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF001.xml','./msxsdtest/attribute',invalid,S38),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF001.xml','./msxsdtest/attribute',invalid,S38),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF002.xsd','./msxsdtest/attribute',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF002.xsd','./msxsdtest/attribute',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF002.xml','./msxsdtest/attribute',valid,S39),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF002.xml','./msxsdtest/attribute',valid,S39),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF003.xsd','./msxsdtest/attribute',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF003.xsd','./msxsdtest/attribute',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF003.xml','./msxsdtest/attribute',valid,S40),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF003.xml','./msxsdtest/attribute',valid,S40),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF004.xsd','./msxsdtest/attribute',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF004.xsd','./msxsdtest/attribute',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF005.xsd','./msxsdtest/attribute',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF005.xsd','./msxsdtest/attribute',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF006.xsd','./msxsdtest/attribute',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF006.xsd','./msxsdtest/attribute',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF007.xsd','./msxsdtest/attribute',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF007.xsd','./msxsdtest/attribute',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF008.xsd','./msxsdtest/attribute',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF008.xsd','./msxsdtest/attribute',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF009.xsd','./msxsdtest/attribute',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF009.xsd','./msxsdtest/attribute',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF010.xsd','./msxsdtest/attribute',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF010.xsd','./msxsdtest/attribute',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF011.xsd','./msxsdtest/attribute',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF011.xsd','./msxsdtest/attribute',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG001.xsd','./msxsdtest/attribute',valid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG001.xsd','./msxsdtest/attribute',valid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG002.xsd','./msxsdtest/attribute',valid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG002.xsd','./msxsdtest/attribute',valid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG003.xsd','./msxsdtest/attribute',valid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG003.xsd','./msxsdtest/attribute',valid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attH001.xsd','./msxsdtest/attribute',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attH001.xsd','./msxsdtest/attribute',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI001.xsd','./msxsdtest/attribute',valid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI001.xsd','./msxsdtest/attribute',valid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI002.xsd','./msxsdtest/attribute',valid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI002.xsd','./msxsdtest/attribute',valid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI003.xsd','./msxsdtest/attribute',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI003.xsd','./msxsdtest/attribute',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attI003.xml','./msxsdtest/attribute',valid,S55),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attI003.xml','./msxsdtest/attribute',valid,S55),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI004.xsd','./msxsdtest/attribute',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI004.xsd','./msxsdtest/attribute',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI005.xsd','./msxsdtest/attribute',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI005.xsd','./msxsdtest/attribute',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI006.xsd','./msxsdtest/attribute',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI006.xsd','./msxsdtest/attribute',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ001.xsd','./msxsdtest/attribute',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ001.xsd','./msxsdtest/attribute',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ001.xml','./msxsdtest/attribute',valid,S59),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ001.xml','./msxsdtest/attribute',valid,S59),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ002.xsd','./msxsdtest/attribute',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ002.xsd','./msxsdtest/attribute',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ002.xml','./msxsdtest/attribute',invalid,S60),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ002.xml','./msxsdtest/attribute',invalid,S60),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ003.xsd','./msxsdtest/attribute',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ003.xsd','./msxsdtest/attribute',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ003.xml','./msxsdtest/attribute',invalid,S61),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ003.xml','./msxsdtest/attribute',invalid,S61),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ004.xsd','./msxsdtest/attribute',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ004.xsd','./msxsdtest/attribute',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ004.xml','./msxsdtest/attribute',valid,S62),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ004.xml','./msxsdtest/attribute',valid,S62),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ005.xsd','./msxsdtest/attribute',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ005.xsd','./msxsdtest/attribute',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ005.xml','./msxsdtest/attribute',valid,S63),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ005.xml','./msxsdtest/attribute',valid,S63),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ006.xsd','./msxsdtest/attribute',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ006.xsd','./msxsdtest/attribute',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ006.xml','./msxsdtest/attribute',valid,S64),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ006.xml','./msxsdtest/attribute',valid,S64),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ007.xsd','./msxsdtest/attribute',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ007.xsd','./msxsdtest/attribute',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ007.xml','./msxsdtest/attribute',valid,S65),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ007.xml','./msxsdtest/attribute',valid,S65),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ008.xsd','./msxsdtest/attribute',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ008.xsd','./msxsdtest/attribute',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ008.xml','./msxsdtest/attribute',invalid,S66),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ008.xml','./msxsdtest/attribute',invalid,S66),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ009.xsd','./msxsdtest/attribute',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ009.xsd','./msxsdtest/attribute',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ009.xml','./msxsdtest/attribute',invalid,S67),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ009.xml','./msxsdtest/attribute',invalid,S67),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ010.xsd','./msxsdtest/attribute',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ010.xsd','./msxsdtest/attribute',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ010.xml','./msxsdtest/attribute',invalid,S68),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ010.xml','./msxsdtest/attribute',invalid,S68),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ011.xsd','./msxsdtest/attribute',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ011.xsd','./msxsdtest/attribute',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ012.xsd','./msxsdtest/attribute',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ012.xsd','./msxsdtest/attribute',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ013.xsd','./msxsdtest/attribute',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ013.xsd','./msxsdtest/attribute',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ014.xsd','./msxsdtest/attribute',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ014.xsd','./msxsdtest/attribute',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ015.xsd','./msxsdtest/attribute',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ015.xsd','./msxsdtest/attribute',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ016.xsd','./msxsdtest/attribute',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ016.xsd','./msxsdtest/attribute',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ017.xsd','./msxsdtest/attribute',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ017.xsd','./msxsdtest/attribute',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ018.xsd','./msxsdtest/attribute',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ018.xsd','./msxsdtest/attribute',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ018.xml','./msxsdtest/attribute',valid,S76),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ018.xml','./msxsdtest/attribute',valid,S76),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa001.xsd','./msxsdtest/attribute',invalid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa001.xsd','./msxsdtest/attribute',invalid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa002.xsd','./msxsdtest/attribute',valid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa002.xsd','./msxsdtest/attribute',valid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa003.xsd','./msxsdtest/attribute',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa003.xsd','./msxsdtest/attribute',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa004.xsd','./msxsdtest/attribute',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa004.xsd','./msxsdtest/attribute',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa005.xsd','./msxsdtest/attribute',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa005.xsd','./msxsdtest/attribute',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa006.xsd','./msxsdtest/attribute',valid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa006.xsd','./msxsdtest/attribute',valid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa007.xsd','./msxsdtest/attribute',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa007.xsd','./msxsdtest/attribute',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa008.xsd','./msxsdtest/attribute',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa008.xsd','./msxsdtest/attribute',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa009.xsd','./msxsdtest/attribute',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa009.xsd','./msxsdtest/attribute',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa010.xsd','./msxsdtest/attribute',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa010.xsd','./msxsdtest/attribute',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa011.xsd','./msxsdtest/attribute',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa011.xsd','./msxsdtest/attribute',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa012.xsd','./msxsdtest/attribute',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa012.xsd','./msxsdtest/attribute',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa013.xsd','./msxsdtest/attribute',invalid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa013.xsd','./msxsdtest/attribute',invalid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa014.xsd','./msxsdtest/attribute',invalid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa014.xsd','./msxsdtest/attribute',invalid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa015.xsd','./msxsdtest/attribute',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa015.xsd','./msxsdtest/attribute',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb001.xsd','./msxsdtest/attribute',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb001.xsd','./msxsdtest/attribute',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb002.xsd','./msxsdtest/attribute',valid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb002.xsd','./msxsdtest/attribute',valid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb003.xsd','./msxsdtest/attribute',valid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb003.xsd','./msxsdtest/attribute',valid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb004.xsd','./msxsdtest/attribute',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb004.xsd','./msxsdtest/attribute',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb005.xsd','./msxsdtest/attribute',invalid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb005.xsd','./msxsdtest/attribute',invalid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb006.xsd','./msxsdtest/attribute',valid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb006.xsd','./msxsdtest/attribute',valid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb007.xsd','./msxsdtest/attribute',valid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb007.xsd','./msxsdtest/attribute',valid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb008.xsd','./msxsdtest/attribute',valid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb008.xsd','./msxsdtest/attribute',valid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb009.xsd','./msxsdtest/attribute',valid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb009.xsd','./msxsdtest/attribute',valid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb010.xsd','./msxsdtest/attribute',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb010.xsd','./msxsdtest/attribute',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb011.xsd','./msxsdtest/attribute',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb011.xsd','./msxsdtest/attribute',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb012.xsd','./msxsdtest/attribute',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb012.xsd','./msxsdtest/attribute',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb013.xsd','./msxsdtest/attribute',invalid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb013.xsd','./msxsdtest/attribute',invalid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb014.xsd','./msxsdtest/attribute',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb014.xsd','./msxsdtest/attribute',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb015.xsd','./msxsdtest/attribute',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb015.xsd','./msxsdtest/attribute',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb016.xsd','./msxsdtest/attribute',invalid),
+ {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb016.xsd','./msxsdtest/attribute',invalid),
STResList108 = [STRes107|STResList107],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb017.xsd','./msxsdtest/attribute',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb017.xsd','./msxsdtest/attribute',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb018.xsd','./msxsdtest/attribute',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb018.xsd','./msxsdtest/attribute',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc001.xsd','./msxsdtest/attribute',invalid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc001.xsd','./msxsdtest/attribute',invalid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc002.xsd','./msxsdtest/attribute',valid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc002.xsd','./msxsdtest/attribute',valid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc003.xsd','./msxsdtest/attribute',valid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc003.xsd','./msxsdtest/attribute',valid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc004.xsd','./msxsdtest/attribute',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc004.xsd','./msxsdtest/attribute',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc005.xsd','./msxsdtest/attribute',invalid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc005.xsd','./msxsdtest/attribute',invalid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc006.xsd','./msxsdtest/attribute',valid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc006.xsd','./msxsdtest/attribute',valid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc007.xsd','./msxsdtest/attribute',valid),
+ {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc007.xsd','./msxsdtest/attribute',valid),
STResList117 = [STRes116|STResList116],
- ?line {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc008.xsd','./msxsdtest/attribute',valid),
+ {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc008.xsd','./msxsdtest/attribute',valid),
STResList118 = [STRes117|STResList117],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc009.xsd','./msxsdtest/attribute',valid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc009.xsd','./msxsdtest/attribute',valid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc010.xsd','./msxsdtest/attribute',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc010.xsd','./msxsdtest/attribute',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc011.xsd','./msxsdtest/attribute',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc011.xsd','./msxsdtest/attribute',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc012.xsd','./msxsdtest/attribute',invalid),
+ {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc012.xsd','./msxsdtest/attribute',invalid),
STResList122 = [STRes121|STResList121],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc013.xsd','./msxsdtest/attribute',invalid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc013.xsd','./msxsdtest/attribute',invalid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc014.xsd','./msxsdtest/attribute',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc014.xsd','./msxsdtest/attribute',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc015.xsd','./msxsdtest/attribute',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc015.xsd','./msxsdtest/attribute',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc016.xsd','./msxsdtest/attribute',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc016.xsd','./msxsdtest/attribute',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc017.xsd','./msxsdtest/attribute',invalid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc017.xsd','./msxsdtest/attribute',invalid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc018.xsd','./msxsdtest/attribute',invalid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc018.xsd','./msxsdtest/attribute',invalid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa001.xsd','./msxsdtest/attribute',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa001.xsd','./msxsdtest/attribute',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa001.xml','./msxsdtest/attribute',valid,S128),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa001.xml','./msxsdtest/attribute',valid,S128),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa002.xsd','./msxsdtest/attribute',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa002.xsd','./msxsdtest/attribute',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa002.xml','./msxsdtest/attribute',valid,S129),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa002.xml','./msxsdtest/attribute',valid,S129),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa003.xsd','./msxsdtest/attribute',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa003.xsd','./msxsdtest/attribute',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa003.xml','./msxsdtest/attribute',valid,S130),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa003.xml','./msxsdtest/attribute',valid,S130),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa004.xsd','./msxsdtest/attribute',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa004.xsd','./msxsdtest/attribute',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa004.xml','./msxsdtest/attribute',valid,S131),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa004.xml','./msxsdtest/attribute',valid,S131),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa005.xsd','./msxsdtest/attribute',valid),
+ {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa005.xsd','./msxsdtest/attribute',valid),
STResList133 = [STRes132|STResList132],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa005.xml','./msxsdtest/attribute',invalid,S132),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa005.xml','./msxsdtest/attribute',invalid,S132),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa006.xsd','./msxsdtest/attribute',valid),
+ {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa006.xsd','./msxsdtest/attribute',valid),
STResList134 = [STRes133|STResList133],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa006.xml','./msxsdtest/attribute',valid,S133),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa006.xml','./msxsdtest/attribute',valid,S133),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb001.xsd','./msxsdtest/attribute',valid),
+ {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb001.xsd','./msxsdtest/attribute',valid),
STResList135 = [STRes134|STResList134],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb001.xml','./msxsdtest/attribute',valid,S134),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb001.xml','./msxsdtest/attribute',valid,S134),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb002.xsd','./msxsdtest/attribute',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb002.xsd','./msxsdtest/attribute',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb002.xml','./msxsdtest/attribute',valid,S135),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb002.xml','./msxsdtest/attribute',valid,S135),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb003.xsd','./msxsdtest/attribute',valid),
+ {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb003.xsd','./msxsdtest/attribute',valid),
STResList137 = [STRes136|STResList136],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb003.xml','./msxsdtest/attribute',valid,S136),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb003.xml','./msxsdtest/attribute',valid,S136),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb004.xsd','./msxsdtest/attribute',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb004.xsd','./msxsdtest/attribute',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb004.xml','./msxsdtest/attribute',valid,S137),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb004.xml','./msxsdtest/attribute',valid,S137),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb005.xsd','./msxsdtest/attribute',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb005.xsd','./msxsdtest/attribute',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb005.xml','./msxsdtest/attribute',invalid,S138),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb005.xml','./msxsdtest/attribute',invalid,S138),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb006.xsd','./msxsdtest/attribute',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb006.xsd','./msxsdtest/attribute',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb006.xml','./msxsdtest/attribute',valid,S139),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb006.xml','./msxsdtest/attribute',valid,S139),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc001.xsd','./msxsdtest/attribute',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc001.xsd','./msxsdtest/attribute',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc001.xml','./msxsdtest/attribute',valid,S140),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc001.xml','./msxsdtest/attribute',valid,S140),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc002.xsd','./msxsdtest/attribute',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc002.xsd','./msxsdtest/attribute',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc002.xml','./msxsdtest/attribute',valid,S141),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc002.xml','./msxsdtest/attribute',valid,S141),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc003.xsd','./msxsdtest/attribute',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc003.xsd','./msxsdtest/attribute',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc003.xml','./msxsdtest/attribute',valid,S142),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc003.xml','./msxsdtest/attribute',valid,S142),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc004.xsd','./msxsdtest/attribute',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc004.xsd','./msxsdtest/attribute',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc004.xml','./msxsdtest/attribute',valid,S143),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc004.xml','./msxsdtest/attribute',valid,S143),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc005.xsd','./msxsdtest/attribute',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc005.xsd','./msxsdtest/attribute',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc005.xml','./msxsdtest/attribute',invalid,S144),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc005.xml','./msxsdtest/attribute',invalid,S144),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc006.xsd','./msxsdtest/attribute',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc006.xsd','./msxsdtest/attribute',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc006.xml','./msxsdtest/attribute',valid,S145),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc006.xml','./msxsdtest/attribute',valid,S145),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa001.xsd','./msxsdtest/attribute',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa001.xsd','./msxsdtest/attribute',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa001.xml','./msxsdtest/attribute',invalid,S146),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa001.xml','./msxsdtest/attribute',invalid,S146),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa002.xsd','./msxsdtest/attribute',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa002.xsd','./msxsdtest/attribute',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa002.xml','./msxsdtest/attribute',invalid,S147),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa002.xml','./msxsdtest/attribute',invalid,S147),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa003.xsd','./msxsdtest/attribute',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa003.xsd','./msxsdtest/attribute',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa003.xml','./msxsdtest/attribute',valid,S148),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa003.xml','./msxsdtest/attribute',valid,S148),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa004.xsd','./msxsdtest/attribute',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa004.xsd','./msxsdtest/attribute',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa004.xml','./msxsdtest/attribute',valid,S149),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa004.xml','./msxsdtest/attribute',valid,S149),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb001.xsd','./msxsdtest/attribute',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb001.xsd','./msxsdtest/attribute',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb001.xml','./msxsdtest/attribute',invalid,S150),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb001.xml','./msxsdtest/attribute',invalid,S150),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb002.xsd','./msxsdtest/attribute',valid),
+ {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb002.xsd','./msxsdtest/attribute',valid),
STResList152 = [STRes151|STResList151],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb002.xml','./msxsdtest/attribute',invalid,S151),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb002.xml','./msxsdtest/attribute',invalid,S151),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb003.xsd','./msxsdtest/attribute',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb003.xsd','./msxsdtest/attribute',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb003.xml','./msxsdtest/attribute',invalid,S152),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb003.xml','./msxsdtest/attribute',invalid,S152),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb004.xsd','./msxsdtest/attribute',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb004.xsd','./msxsdtest/attribute',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb004.xml','./msxsdtest/attribute',valid,S153),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb004.xml','./msxsdtest/attribute',valid,S153),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb005.xsd','./msxsdtest/attribute',valid),
+ {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb005.xsd','./msxsdtest/attribute',valid),
STResList155 = [STRes154|STResList154],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb005.xml','./msxsdtest/attribute',valid,S154),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb005.xml','./msxsdtest/attribute',valid,S154),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb006.xsd','./msxsdtest/attribute',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb006.xsd','./msxsdtest/attribute',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb006.xml','./msxsdtest/attribute',valid,S155),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb006.xml','./msxsdtest/attribute',valid,S155),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb007.xsd','./msxsdtest/attribute',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb007.xsd','./msxsdtest/attribute',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb007.xml','./msxsdtest/attribute',valid,S156),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb007.xml','./msxsdtest/attribute',valid,S156),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb008.xsd','./msxsdtest/attribute',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb008.xsd','./msxsdtest/attribute',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb008.xml','./msxsdtest/attribute',valid,S157),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb008.xml','./msxsdtest/attribute',valid,S157),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb009.xsd','./msxsdtest/attribute',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb009.xsd','./msxsdtest/attribute',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb009.xml','./msxsdtest/attribute',valid,S158),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb009.xml','./msxsdtest/attribute',valid,S158),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb010.xsd','./msxsdtest/attribute',valid),
+ {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb010.xsd','./msxsdtest/attribute',valid),
STResList160 = [STRes159|STResList159],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb010.xml','./msxsdtest/attribute',invalid,S159),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb010.xml','./msxsdtest/attribute',invalid,S159),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb011.xsd','./msxsdtest/attribute',valid),
+ {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb011.xsd','./msxsdtest/attribute',valid),
STResList161 = [STRes160|STResList160],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb011.xml','./msxsdtest/attribute',invalid,S160),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb011.xml','./msxsdtest/attribute',invalid,S160),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb012.xsd','./msxsdtest/attribute',valid),
+ {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb012.xsd','./msxsdtest/attribute',valid),
STResList162 = [STRes161|STResList161],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb012.xml','./msxsdtest/attribute',invalid,S161),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb012.xml','./msxsdtest/attribute',invalid,S161),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc001.xsd','./msxsdtest/attribute',valid),
+ {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc001.xsd','./msxsdtest/attribute',valid),
STResList163 = [STRes162|STResList162],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc001.xml','./msxsdtest/attribute',invalid,S162),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc001.xml','./msxsdtest/attribute',invalid,S162),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc002.xsd','./msxsdtest/attribute',valid),
+ {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc002.xsd','./msxsdtest/attribute',valid),
STResList164 = [STRes163|STResList163],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc002.xml','./msxsdtest/attribute',invalid,S163),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc002.xml','./msxsdtest/attribute',invalid,S163),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc003.xsd','./msxsdtest/attribute',valid),
+ {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc003.xsd','./msxsdtest/attribute',valid),
STResList165 = [STRes164|STResList164],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc003.xml','./msxsdtest/attribute',invalid,S164),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc003.xml','./msxsdtest/attribute',invalid,S164),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc004.xsd','./msxsdtest/attribute',valid),
+ {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc004.xsd','./msxsdtest/attribute',valid),
STResList166 = [STRes165|STResList165],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc004.xml','./msxsdtest/attribute',valid,S165),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc004.xml','./msxsdtest/attribute',valid,S165),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc005.xsd','./msxsdtest/attribute',valid),
+ {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc005.xsd','./msxsdtest/attribute',valid),
STResList167 = [STRes166|STResList166],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc005.xml','./msxsdtest/attribute',valid,S166),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc005.xml','./msxsdtest/attribute',valid,S166),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc006.xsd','./msxsdtest/attribute',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc006.xsd','./msxsdtest/attribute',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc006.xml','./msxsdtest/attribute',valid,S167),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc006.xml','./msxsdtest/attribute',valid,S167),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc007.xsd','./msxsdtest/attribute',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc007.xsd','./msxsdtest/attribute',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc007.xml','./msxsdtest/attribute',valid,S168),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc007.xml','./msxsdtest/attribute',valid,S168),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc008.xsd','./msxsdtest/attribute',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc008.xsd','./msxsdtest/attribute',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc008.xml','./msxsdtest/attribute',valid,S169),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc008.xml','./msxsdtest/attribute',valid,S169),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc009.xsd','./msxsdtest/attribute',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc009.xsd','./msxsdtest/attribute',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc009.xml','./msxsdtest/attribute',valid,S170),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc009.xml','./msxsdtest/attribute',valid,S170),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc010.xsd','./msxsdtest/attribute',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc010.xsd','./msxsdtest/attribute',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc010.xml','./msxsdtest/attribute',invalid,S171),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc010.xml','./msxsdtest/attribute',invalid,S171),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc011.xsd','./msxsdtest/attribute',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc011.xsd','./msxsdtest/attribute',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc011.xml','./msxsdtest/attribute',invalid,S172),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc011.xml','./msxsdtest/attribute',invalid,S172),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc012.xsd','./msxsdtest/attribute',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc012.xsd','./msxsdtest/attribute',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc012.xml','./msxsdtest/attribute',invalid,S173),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc012.xml','./msxsdtest/attribute',invalid,S173),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO001.xsd','./msxsdtest/attribute',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO001.xsd','./msxsdtest/attribute',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO001.xml','./msxsdtest/attribute',invalid,S174),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO001.xml','./msxsdtest/attribute',invalid,S174),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO002.xsd','./msxsdtest/attribute',invalid),
+ {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO002.xsd','./msxsdtest/attribute',invalid),
STResList176 = [STRes175|STResList175],
- ?line {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO003.xsd','./msxsdtest/attribute',invalid),
+ {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO003.xsd','./msxsdtest/attribute',invalid),
STResList177 = [STRes176|STResList176],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO004.xsd','./msxsdtest/attribute',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO004.xsd','./msxsdtest/attribute',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO004.xml','./msxsdtest/attribute',invalid,S177),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO004.xml','./msxsdtest/attribute',invalid,S177),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO005.xsd','./msxsdtest/attribute',invalid),
+ {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO005.xsd','./msxsdtest/attribute',invalid),
STResList179 = [STRes178|STResList178],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO006.xsd','./msxsdtest/attribute',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO006.xsd','./msxsdtest/attribute',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO006.xml','./msxsdtest/attribute',valid,S179),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO006.xml','./msxsdtest/attribute',valid,S179),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO007.xsd','./msxsdtest/attribute',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO007.xsd','./msxsdtest/attribute',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO007.xml','./msxsdtest/attribute',valid,S180),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO007.xml','./msxsdtest/attribute',valid,S180),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO008.xsd','./msxsdtest/attribute',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO008.xsd','./msxsdtest/attribute',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO008.xml','./msxsdtest/attribute',invalid,S181),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO008.xml','./msxsdtest/attribute',invalid,S181),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO009.xsd','./msxsdtest/attribute',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO009.xsd','./msxsdtest/attribute',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO009.xml','./msxsdtest/attribute',valid,S182),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO009.xml','./msxsdtest/attribute',valid,S182),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO010.xsd','./msxsdtest/attribute',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO010.xsd','./msxsdtest/attribute',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO010.xml','./msxsdtest/attribute',valid,S183),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO010.xml','./msxsdtest/attribute',valid,S183),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO011.xsd','./msxsdtest/attribute',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO011.xsd','./msxsdtest/attribute',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO011.xml','./msxsdtest/attribute',valid,S184),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO011.xml','./msxsdtest/attribute',valid,S184),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO012.xsd','./msxsdtest/attribute',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO012.xsd','./msxsdtest/attribute',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO012.xml','./msxsdtest/attribute',invalid,S185),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO012.xml','./msxsdtest/attribute',invalid,S185),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO013.xsd','./msxsdtest/attribute',invalid),
+ {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO013.xsd','./msxsdtest/attribute',invalid),
STResList187 = [STRes186|STResList186],
- ?line {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO014.xsd','./msxsdtest/attribute',invalid),
+ {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO014.xsd','./msxsdtest/attribute',invalid),
STResList188 = [STRes187|STResList187],
- ?line {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO015.xsd','./msxsdtest/attribute',invalid),
+ {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO015.xsd','./msxsdtest/attribute',invalid),
STResList189 = [STRes188|STResList188],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO016.xsd','./msxsdtest/attribute',invalid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO016.xsd','./msxsdtest/attribute',invalid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO017.xsd','./msxsdtest/attribute',invalid),
+ {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO017.xsd','./msxsdtest/attribute',invalid),
STResList191 = [STRes190|STResList190],
- ?line {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO018.xsd','./msxsdtest/attribute',valid),
+ {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO018.xsd','./msxsdtest/attribute',valid),
STResList192 = [STRes191|STResList191],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO019.xsd','./msxsdtest/attribute',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO019.xsd','./msxsdtest/attribute',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO020.xsd','./msxsdtest/attribute',invalid),
+ {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO020.xsd','./msxsdtest/attribute',invalid),
STResList194 = [STRes193|STResList193],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO021.xsd','./msxsdtest/attribute',invalid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO021.xsd','./msxsdtest/attribute',invalid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO022.xsd','./msxsdtest/attribute',invalid),
+ {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO022.xsd','./msxsdtest/attribute',invalid),
STResList196 = [STRes195|STResList195],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO023.xsd','./msxsdtest/attribute',invalid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO023.xsd','./msxsdtest/attribute',invalid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO024.xsd','./msxsdtest/attribute',invalid),
+ {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO024.xsd','./msxsdtest/attribute',invalid),
STResList198 = [STRes197|STResList197],
- ?line {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO025.xsd','./msxsdtest/attribute',valid),
+ {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO025.xsd','./msxsdtest/attribute',valid),
STResList199 = [STRes198|STResList198],
- ?line {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP001.xsd','./msxsdtest/attribute',invalid),
+ {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP001.xsd','./msxsdtest/attribute',invalid),
STResList200 = [STRes199|STResList199],
- ?line {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP002.xsd','./msxsdtest/attribute',invalid),
+ {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP002.xsd','./msxsdtest/attribute',invalid),
STResList201 = [STRes200|STResList200],
- ?line {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP003.xsd','./msxsdtest/attribute',invalid),
+ {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP003.xsd','./msxsdtest/attribute',invalid),
STResList202 = [STRes201|STResList201],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP004.xsd','./msxsdtest/attribute',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP004.xsd','./msxsdtest/attribute',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP004.xml','./msxsdtest/attribute',valid,S202),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP004.xml','./msxsdtest/attribute',valid,S202),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP005.xsd','./msxsdtest/attribute',valid),
+ {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP005.xsd','./msxsdtest/attribute',valid),
STResList204 = [STRes203|STResList203],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP005.xml','./msxsdtest/attribute',invalid,S203),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP005.xml','./msxsdtest/attribute',invalid,S203),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP006.xsd','./msxsdtest/attribute',invalid),
+ {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP006.xsd','./msxsdtest/attribute',invalid),
STResList205 = [STRes204|STResList204],
- ?line {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP007.xsd','./msxsdtest/attribute',valid),
+ {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP007.xsd','./msxsdtest/attribute',valid),
STResList206 = [STRes205|STResList205],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP007.xml','./msxsdtest/attribute',valid,S205),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP007.xml','./msxsdtest/attribute',valid,S205),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP008.xsd','./msxsdtest/attribute',valid),
+ {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP008.xsd','./msxsdtest/attribute',valid),
STResList207 = [STRes206|STResList206],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP008.xml','./msxsdtest/attribute',invalid,S206),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP008.xml','./msxsdtest/attribute',invalid,S206),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP009.xsd','./msxsdtest/attribute',valid),
+ {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP009.xsd','./msxsdtest/attribute',valid),
STResList208 = [STRes207|STResList207],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP009.xml','./msxsdtest/attribute',valid,S207),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP009.xml','./msxsdtest/attribute',valid,S207),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP010.xsd','./msxsdtest/attribute',valid),
+ {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP010.xsd','./msxsdtest/attribute',valid),
STResList209 = [STRes208|STResList208],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP010.xml','./msxsdtest/attribute',invalid,S208),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP010.xml','./msxsdtest/attribute',invalid,S208),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP011.xsd','./msxsdtest/attribute',valid),
+ {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP011.xsd','./msxsdtest/attribute',valid),
STResList210 = [STRes209|STResList209],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP011.xml','./msxsdtest/attribute',valid,S209),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP011.xml','./msxsdtest/attribute',valid,S209),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP012.xsd','./msxsdtest/attribute',valid),
+ {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP012.xsd','./msxsdtest/attribute',valid),
STResList211 = [STRes210|STResList210],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP012.xml','./msxsdtest/attribute',invalid,S210),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP012.xml','./msxsdtest/attribute',invalid,S210),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP013.xsd','./msxsdtest/attribute',valid),
+ {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP013.xsd','./msxsdtest/attribute',valid),
STResList212 = [STRes211|STResList211],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP013.xml','./msxsdtest/attribute',valid,S211),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP013.xml','./msxsdtest/attribute',valid,S211),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP014.xsd','./msxsdtest/attribute',valid),
+ {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP014.xsd','./msxsdtest/attribute',valid),
STResList213 = [STRes212|STResList212],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP014.xml','./msxsdtest/attribute',invalid,S212),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP014.xml','./msxsdtest/attribute',invalid,S212),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP015.xsd','./msxsdtest/attribute',valid),
+ {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP015.xsd','./msxsdtest/attribute',valid),
STResList214 = [STRes213|STResList213],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP015.xml','./msxsdtest/attribute',valid,S213),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP015.xml','./msxsdtest/attribute',valid,S213),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP016.xsd','./msxsdtest/attribute',valid),
+ {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP016.xsd','./msxsdtest/attribute',valid),
STResList215 = [STRes214|STResList214],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP016.xml','./msxsdtest/attribute',invalid,S214),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP016.xml','./msxsdtest/attribute',invalid,S214),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP017.xsd','./msxsdtest/attribute',valid),
+ {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP017.xsd','./msxsdtest/attribute',valid),
STResList216 = [STRes215|STResList215],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP017.xml','./msxsdtest/attribute',valid,S215),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP017.xml','./msxsdtest/attribute',valid,S215),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP018.xsd','./msxsdtest/attribute',valid),
+ {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP018.xsd','./msxsdtest/attribute',valid),
STResList217 = [STRes216|STResList216],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP018.xml','./msxsdtest/attribute',invalid,S216),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP018.xml','./msxsdtest/attribute',invalid,S216),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP019.xsd','./msxsdtest/attribute',valid),
+ {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP019.xsd','./msxsdtest/attribute',valid),
STResList218 = [STRes217|STResList217],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP019.xml','./msxsdtest/attribute',valid,S217),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP019.xml','./msxsdtest/attribute',valid,S217),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP020.xsd','./msxsdtest/attribute',valid),
+ {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP020.xsd','./msxsdtest/attribute',valid),
STResList219 = [STRes218|STResList218],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP020.xml','./msxsdtest/attribute',invalid,S218),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP020.xml','./msxsdtest/attribute',invalid,S218),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP021.xsd','./msxsdtest/attribute',valid),
+ {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP021.xsd','./msxsdtest/attribute',valid),
STResList220 = [STRes219|STResList219],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP021.xml','./msxsdtest/attribute',valid,S219),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP021.xml','./msxsdtest/attribute',valid,S219),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP022.xsd','./msxsdtest/attribute',valid),
+ {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP022.xsd','./msxsdtest/attribute',valid),
STResList221 = [STRes220|STResList220],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP022.xml','./msxsdtest/attribute',valid,S220),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP022.xml','./msxsdtest/attribute',valid,S220),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP023.xsd','./msxsdtest/attribute',valid),
+ {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP023.xsd','./msxsdtest/attribute',valid),
STResList222 = [STRes221|STResList221],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP023.xml','./msxsdtest/attribute',valid,S221),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP023.xml','./msxsdtest/attribute',valid,S221),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP024.xsd','./msxsdtest/attribute',valid),
+ {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP024.xsd','./msxsdtest/attribute',valid),
STResList223 = [STRes222|STResList222],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP024.xml','./msxsdtest/attribute',valid,S222),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP024.xml','./msxsdtest/attribute',valid,S222),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP025.xsd','./msxsdtest/attribute',valid),
+ {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP025.xsd','./msxsdtest/attribute',valid),
STResList224 = [STRes223|STResList223],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP025.xml','./msxsdtest/attribute',valid,S223),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP025.xml','./msxsdtest/attribute',valid,S223),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP026.xsd','./msxsdtest/attribute',valid),
+ {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP026.xsd','./msxsdtest/attribute',valid),
STResList225 = [STRes224|STResList224],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP026.xml','./msxsdtest/attribute',valid,S224),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP026.xml','./msxsdtest/attribute',valid,S224),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP027.xsd','./msxsdtest/attribute',valid),
+ {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP027.xsd','./msxsdtest/attribute',valid),
STResList226 = [STRes225|STResList225],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP027.xml','./msxsdtest/attribute',invalid,S225),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP027.xml','./msxsdtest/attribute',invalid,S225),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP028.xsd','./msxsdtest/attribute',valid),
+ {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP028.xsd','./msxsdtest/attribute',valid),
STResList227 = [STRes226|STResList226],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP028.xml','./msxsdtest/attribute',valid,S226),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP028.xml','./msxsdtest/attribute',valid,S226),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP029.xsd','./msxsdtest/attribute',valid),
+ {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP029.xsd','./msxsdtest/attribute',valid),
STResList228 = [STRes227|STResList227],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP029.xml','./msxsdtest/attribute',valid,S227),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP029.xml','./msxsdtest/attribute',valid,S227),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP030.xsd','./msxsdtest/attribute',invalid),
+ {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP030.xsd','./msxsdtest/attribute',invalid),
STResList229 = [STRes228|STResList228],
- ?line {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP031.xsd','./msxsdtest/attribute',valid),
+ {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP031.xsd','./msxsdtest/attribute',valid),
STResList230 = [STRes229|STResList229],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP031.xml','./msxsdtest/attribute',invalid,S229),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP031.xml','./msxsdtest/attribute',invalid,S229),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP032.xsd','./msxsdtest/attribute',valid),
+ {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP032.xsd','./msxsdtest/attribute',valid),
STResList231 = [STRes230|STResList230],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP032.xml','./msxsdtest/attribute',valid,S230),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP032.xml','./msxsdtest/attribute',valid,S230),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ001.xsd','./msxsdtest/attribute',invalid),
+ {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ001.xsd','./msxsdtest/attribute',invalid),
STResList232 = [STRes231|STResList231],
- ?line {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ002.xsd','./msxsdtest/attribute',invalid),
+ {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ002.xsd','./msxsdtest/attribute',invalid),
STResList233 = [STRes232|STResList232],
- ?line {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ003.xsd','./msxsdtest/attribute',valid),
+ {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ003.xsd','./msxsdtest/attribute',valid),
STResList234 = [STRes233|STResList233],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ003.xml','./msxsdtest/attribute',valid,S233),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ003.xml','./msxsdtest/attribute',valid,S233),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes234,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ004.xsd','./msxsdtest/attribute',invalid),
+ {STRes234,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ004.xsd','./msxsdtest/attribute',invalid),
STResList235 = [STRes234|STResList234],
- ?line {STRes235,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ005.xsd','./msxsdtest/attribute',invalid),
+ {STRes235,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ005.xsd','./msxsdtest/attribute',invalid),
STResList236 = [STRes235|STResList235],
- ?line {STRes236,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ006.xsd','./msxsdtest/attribute',invalid),
+ {STRes236,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ006.xsd','./msxsdtest/attribute',invalid),
STResList237 = [STRes236|STResList236],
- ?line {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ007.xsd','./msxsdtest/attribute',invalid),
+ {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ007.xsd','./msxsdtest/attribute',invalid),
STResList238 = [STRes237|STResList237],
- ?line {STRes238,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ008.xsd','./msxsdtest/attribute',invalid),
+ {STRes238,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ008.xsd','./msxsdtest/attribute',invalid),
STResList239 = [STRes238|STResList238],
- ?line {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ009.xsd','./msxsdtest/attribute',invalid),
+ {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ009.xsd','./msxsdtest/attribute',invalid),
STResList240 = [STRes239|STResList239],
- ?line {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ010.xsd','./msxsdtest/attribute',valid),
+ {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ010.xsd','./msxsdtest/attribute',valid),
STResList241 = [STRes240|STResList240],
- ?line {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ011.xsd','./msxsdtest/attribute',invalid),
+ {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ011.xsd','./msxsdtest/attribute',invalid),
STResList242 = [STRes241|STResList241],
- ?line {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ012.xsd','./msxsdtest/attribute',invalid),
+ {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ012.xsd','./msxsdtest/attribute',invalid),
STResList243 = [STRes242|STResList242],
- ?line {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ013.xsd','./msxsdtest/attribute',invalid),
+ {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ013.xsd','./msxsdtest/attribute',invalid),
STResList244 = [STRes243|STResList243],
- ?line {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ014.xsd','./msxsdtest/attribute',valid),
+ {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ014.xsd','./msxsdtest/attribute',valid),
STResList245 = [STRes244|STResList244],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ014.xml','./msxsdtest/attribute',valid,S244),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ014.xml','./msxsdtest/attribute',valid,S244),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes245,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ015.xsd','./msxsdtest/attribute',invalid),
+ {STRes245,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ015.xsd','./msxsdtest/attribute',invalid),
STResList246 = [STRes245|STResList245],
- ?line {STRes246,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ016.xsd','./msxsdtest/attribute',invalid),
+ {STRes246,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ016.xsd','./msxsdtest/attribute',invalid),
STResList247 = [STRes246|STResList246],
- ?line {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ017.xsd','./msxsdtest/attribute',invalid),
+ {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ017.xsd','./msxsdtest/attribute',invalid),
STResList248 = [STRes247|STResList247],
- ?line {STRes248,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ018.xsd','./msxsdtest/attribute',invalid),
+ {STRes248,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ018.xsd','./msxsdtest/attribute',invalid),
STResList249 = [STRes248|STResList248],
- ?line {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ019.xsd','./msxsdtest/attribute',valid),
+ {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ019.xsd','./msxsdtest/attribute',valid),
STResList250 = [STRes249|STResList249],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ019.xml','./msxsdtest/attribute',valid,S249),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ019.xml','./msxsdtest/attribute',valid,S249),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ001.xsd','./msxsdtest/attribute',valid),
+ {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ001.xsd','./msxsdtest/attribute',valid),
STResList251 = [STRes250|STResList250],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ001.xml','./msxsdtest/attribute',invalid,S250),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ001.xml','./msxsdtest/attribute',invalid,S250),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ002.xsd','./msxsdtest/attribute',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ002.xsd','./msxsdtest/attribute',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ002.xml','./msxsdtest/attribute',invalid,S251),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ002.xml','./msxsdtest/attribute',invalid,S251),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ003.xsd','./msxsdtest/attribute',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ003.xsd','./msxsdtest/attribute',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ003.xml','./msxsdtest/attribute',invalid,S252),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ003.xml','./msxsdtest/attribute',invalid,S252),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes253,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA001.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes253,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA001.xsd','./msxsdtest/attributeGroup',valid),
STResList254 = [STRes253|STResList253],
- ?line {STRes254,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA002.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes254,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA002.xsd','./msxsdtest/attributeGroup',invalid),
STResList255 = [STRes254|STResList254],
- ?line {STRes255,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA003.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes255,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA003.xsd','./msxsdtest/attributeGroup',invalid),
STResList256 = [STRes255|STResList255],
- ?line {STRes256,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA004.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes256,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA004.xsd','./msxsdtest/attributeGroup',invalid),
STResList257 = [STRes256|STResList256],
- ?line {STRes257,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA005.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes257,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA005.xsd','./msxsdtest/attributeGroup',invalid),
STResList258 = [STRes257|STResList257],
- ?line {STRes258,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA006.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes258,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA006.xsd','./msxsdtest/attributeGroup',invalid),
STResList259 = [STRes258|STResList258],
- ?line {STRes259,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA007.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes259,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA007.xsd','./msxsdtest/attributeGroup',invalid),
STResList260 = [STRes259|STResList259],
- ?line {STRes260,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA008.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes260,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA008.xsd','./msxsdtest/attributeGroup',invalid),
STResList261 = [STRes260|STResList260],
- ?line {STRes261,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA009.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes261,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA009.xsd','./msxsdtest/attributeGroup',invalid),
STResList262 = [STRes261|STResList261],
- ?line {STRes262,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB001.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes262,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB001.xsd','./msxsdtest/attributeGroup',valid),
STResList263 = [STRes262|STResList262],
- ?line {STRes263,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB002.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes263,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB002.xsd','./msxsdtest/attributeGroup',invalid),
STResList264 = [STRes263|STResList263],
- ?line {STRes264,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB003.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes264,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB003.xsd','./msxsdtest/attributeGroup',invalid),
STResList265 = [STRes264|STResList264],
- ?line {STRes265,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB004.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes265,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB004.xsd','./msxsdtest/attributeGroup',invalid),
STResList266 = [STRes265|STResList265],
- ?line {STRes266,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB005.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes266,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB005.xsd','./msxsdtest/attributeGroup',valid),
STResList267 = [STRes266|STResList266],
- ?line {STRes267,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB006.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes267,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB006.xsd','./msxsdtest/attributeGroup',invalid),
STResList268 = [STRes267|STResList267],
- ?line {STRes268,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB007.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes268,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB007.xsd','./msxsdtest/attributeGroup',invalid),
STResList269 = [STRes268|STResList268],
- ?line {STRes269,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB008.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes269,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB008.xsd','./msxsdtest/attributeGroup',valid),
STResList270 = [STRes269|STResList269],
- ?line {STRes270,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB009.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes270,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB009.xsd','./msxsdtest/attributeGroup',valid),
STResList271 = [STRes270|STResList270],
- ?line {STRes271,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB010.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes271,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB010.xsd','./msxsdtest/attributeGroup',invalid),
STResList272 = [STRes271|STResList271],
- ?line {STRes272,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB011.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes272,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB011.xsd','./msxsdtest/attributeGroup',invalid),
STResList273 = [STRes272|STResList272],
- ?line {STRes273,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB012.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes273,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB012.xsd','./msxsdtest/attributeGroup',valid),
STResList274 = [STRes273|STResList273],
- ?line {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB013.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB013.xsd','./msxsdtest/attributeGroup',invalid),
STResList275 = [STRes274|STResList274],
- ?line {STRes275,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB014.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes275,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB014.xsd','./msxsdtest/attributeGroup',valid),
STResList276 = [STRes275|STResList275],
- ?line {STRes276,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB015.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes276,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB015.xsd','./msxsdtest/attributeGroup',invalid),
STResList277 = [STRes276|STResList276],
- ?line {STRes277,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC001.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes277,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC001.xsd','./msxsdtest/attributeGroup',invalid),
STResList278 = [STRes277|STResList277],
- ?line {STRes278,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC002.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes278,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC002.xsd','./msxsdtest/attributeGroup',valid),
STResList279 = [STRes278|STResList278],
- ?line {STRes279,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC003.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes279,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC003.xsd','./msxsdtest/attributeGroup',valid),
STResList280 = [STRes279|STResList279],
- ?line {STRes280,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC004.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes280,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC004.xsd','./msxsdtest/attributeGroup',valid),
STResList281 = [STRes280|STResList280],
- ?line {STRes281,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC005.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes281,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC005.xsd','./msxsdtest/attributeGroup',valid),
STResList282 = [STRes281|STResList281],
- ?line {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC006.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC006.xsd','./msxsdtest/attributeGroup',valid),
STResList283 = [STRes282|STResList282],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC006.xml','./msxsdtest/attributeGroup',invalid,S282),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC006.xml','./msxsdtest/attributeGroup',invalid,S282),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC007.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC007.xsd','./msxsdtest/attributeGroup',valid),
STResList284 = [STRes283|STResList283],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC007.xml','./msxsdtest/attributeGroup',valid,S283),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC007.xml','./msxsdtest/attributeGroup',valid,S283),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes284,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC008.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes284,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC008.xsd','./msxsdtest/attributeGroup',invalid),
STResList285 = [STRes284|STResList284],
- ?line {STRes285,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC009.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes285,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC009.xsd','./msxsdtest/attributeGroup',invalid),
STResList286 = [STRes285|STResList285],
- ?line {STRes286,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC010.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes286,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC010.xsd','./msxsdtest/attributeGroup',invalid),
STResList287 = [STRes286|STResList286],
- ?line {STRes287,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC011.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes287,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC011.xsd','./msxsdtest/attributeGroup',invalid),
STResList288 = [STRes287|STResList287],
- ?line {STRes288,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC012.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes288,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC012.xsd','./msxsdtest/attributeGroup',valid),
STResList289 = [STRes288|STResList288],
- ?line {STRes289,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC013.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes289,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC013.xsd','./msxsdtest/attributeGroup',valid),
STResList290 = [STRes289|STResList289],
- ?line {STRes290,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC014.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes290,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC014.xsd','./msxsdtest/attributeGroup',valid),
STResList291 = [STRes290|STResList290],
- ?line {STRes291,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC015.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes291,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC015.xsd','./msxsdtest/attributeGroup',valid),
STResList292 = [STRes291|STResList291],
- ?line {STRes292,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC016.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes292,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC016.xsd','./msxsdtest/attributeGroup',valid),
STResList293 = [STRes292|STResList292],
- ?line {STRes293,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC017.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes293,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC017.xsd','./msxsdtest/attributeGroup',valid),
STResList294 = [STRes293|STResList293],
- ?line {STRes294,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC018.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes294,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC018.xsd','./msxsdtest/attributeGroup',invalid),
STResList295 = [STRes294|STResList294],
- ?line {STRes295,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC019.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes295,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC019.xsd','./msxsdtest/attributeGroup',invalid),
STResList296 = [STRes295|STResList295],
- ?line {STRes296,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC020.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes296,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC020.xsd','./msxsdtest/attributeGroup',invalid),
STResList297 = [STRes296|STResList296],
- ?line {STRes297,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC021.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes297,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC021.xsd','./msxsdtest/attributeGroup',invalid),
STResList298 = [STRes297|STResList297],
- ?line {STRes298,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC022.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes298,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC022.xsd','./msxsdtest/attributeGroup',valid),
STResList299 = [STRes298|STResList298],
- ?line {STRes299,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC023.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes299,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC023.xsd','./msxsdtest/attributeGroup',valid),
STResList300 = [STRes299|STResList299],
- ?line {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC024.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC024.xsd','./msxsdtest/attributeGroup',valid),
STResList301 = [STRes300|STResList300],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC024.xml','./msxsdtest/attributeGroup',valid,S300),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC024.xml','./msxsdtest/attributeGroup',valid,S300),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC025.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC025.xsd','./msxsdtest/attributeGroup',valid),
STResList302 = [STRes301|STResList301],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC025.xml','./msxsdtest/attributeGroup',invalid,S301),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC025.xml','./msxsdtest/attributeGroup',invalid,S301),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC026.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC026.xsd','./msxsdtest/attributeGroup',valid),
STResList303 = [STRes302|STResList302],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC026.xml','./msxsdtest/attributeGroup',valid,S302),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC026.xml','./msxsdtest/attributeGroup',valid,S302),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes303,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC027.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes303,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC027.xsd','./msxsdtest/attributeGroup',valid),
STResList304 = [STRes303|STResList303],
- ?line {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC028.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC028.xsd','./msxsdtest/attributeGroup',valid),
STResList305 = [STRes304|STResList304],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC028.xml','./msxsdtest/attributeGroup',invalid,S304),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC028.xml','./msxsdtest/attributeGroup',invalid,S304),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes305,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC029.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes305,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC029.xsd','./msxsdtest/attributeGroup',invalid),
STResList306 = [STRes305|STResList305],
- ?line {STRes306,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC030.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes306,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC030.xsd','./msxsdtest/attributeGroup',invalid),
STResList307 = [STRes306|STResList306],
- ?line {STRes307,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC031.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes307,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC031.xsd','./msxsdtest/attributeGroup',invalid),
STResList308 = [STRes307|STResList307],
- ?line {STRes308,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC032.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes308,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC032.xsd','./msxsdtest/attributeGroup',invalid),
STResList309 = [STRes308|STResList308],
- ?line {STRes309,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC033.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes309,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC033.xsd','./msxsdtest/attributeGroup',valid),
STResList310 = [STRes309|STResList309],
- ?line {STRes310,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC034.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes310,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC034.xsd','./msxsdtest/attributeGroup',valid),
STResList311 = [STRes310|STResList310],
- ?line {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC035.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC035.xsd','./msxsdtest/attributeGroup',valid),
STResList312 = [STRes311|STResList311],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC035.xml','./msxsdtest/attributeGroup',valid,S311),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC035.xml','./msxsdtest/attributeGroup',valid,S311),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC036.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC036.xsd','./msxsdtest/attributeGroup',valid),
STResList313 = [STRes312|STResList312],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC036.xml','./msxsdtest/attributeGroup',valid,S312),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC036.xml','./msxsdtest/attributeGroup',valid,S312),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC037.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC037.xsd','./msxsdtest/attributeGroup',valid),
STResList314 = [STRes313|STResList313],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC037.xml','./msxsdtest/attributeGroup',valid,S313),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC037.xml','./msxsdtest/attributeGroup',valid,S313),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC038.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC038.xsd','./msxsdtest/attributeGroup',valid),
STResList315 = [STRes314|STResList314],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC038.xml','./msxsdtest/attributeGroup',valid,S314),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC038.xml','./msxsdtest/attributeGroup',valid,S314),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes315,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC039.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes315,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC039.xsd','./msxsdtest/attributeGroup',invalid),
STResList316 = [STRes315|STResList315],
- ?line {STRes316,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC040.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes316,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC040.xsd','./msxsdtest/attributeGroup',invalid),
STResList317 = [STRes316|STResList316],
- ?line {STRes317,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC041.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes317,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC041.xsd','./msxsdtest/attributeGroup',valid),
STResList318 = [STRes317|STResList317],
- ?line {STRes318,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC042.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes318,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC042.xsd','./msxsdtest/attributeGroup',invalid),
STResList319 = [STRes318|STResList318],
- ?line {STRes319,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC043.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes319,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC043.xsd','./msxsdtest/attributeGroup',valid),
STResList320 = [STRes319|STResList319],
- ?line {STRes320,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC044.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes320,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC044.xsd','./msxsdtest/attributeGroup',invalid),
STResList321 = [STRes320|STResList320],
- ?line {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC045.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC045.xsd','./msxsdtest/attributeGroup',valid),
STResList322 = [STRes321|STResList321],
- ?line {STRes322,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD001.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes322,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD001.xsd','./msxsdtest/attributeGroup',valid),
STResList323 = [STRes322|STResList322],
- ?line {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD002.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD002.xsd','./msxsdtest/attributeGroup',invalid),
STResList324 = [STRes323|STResList323],
- ?line {STRes324,S324} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD003.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes324,S324} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD003.xsd','./msxsdtest/attributeGroup',valid),
STResList325 = [STRes324|STResList324],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD003.xml','./msxsdtest/attributeGroup',valid,S324),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD003.xml','./msxsdtest/attributeGroup',valid,S324),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD004.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD004.xsd','./msxsdtest/attributeGroup',valid),
STResList326 = [STRes325|STResList325],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD004.xml','./msxsdtest/attributeGroup',valid,S325),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD004.xml','./msxsdtest/attributeGroup',valid,S325),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD005.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD005.xsd','./msxsdtest/attributeGroup',valid),
STResList327 = [STRes326|STResList326],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD005.xml','./msxsdtest/attributeGroup',valid,S326),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD005.xml','./msxsdtest/attributeGroup',valid,S326),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes327,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD006.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes327,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD006.xsd','./msxsdtest/attributeGroup',invalid),
STResList328 = [STRes327|STResList327],
- ?line {STRes328,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD007.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes328,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD007.xsd','./msxsdtest/attributeGroup',invalid),
STResList329 = [STRes328|STResList328],
- ?line {STRes329,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD008.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes329,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD008.xsd','./msxsdtest/attributeGroup',invalid),
STResList330 = [STRes329|STResList329],
- ?line {STRes330,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD009.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes330,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD009.xsd','./msxsdtest/attributeGroup',invalid),
STResList331 = [STRes330|STResList330],
- ?line {STRes331,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD010.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes331,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD010.xsd','./msxsdtest/attributeGroup',valid),
STResList332 = [STRes331|STResList331],
- ?line {STRes332,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD011.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes332,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD011.xsd','./msxsdtest/attributeGroup',invalid),
STResList333 = [STRes332|STResList332],
- ?line {STRes333,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD012.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes333,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD012.xsd','./msxsdtest/attributeGroup',invalid),
STResList334 = [STRes333|STResList333],
- ?line {STRes334,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD013.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes334,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD013.xsd','./msxsdtest/attributeGroup',invalid),
STResList335 = [STRes334|STResList334],
- ?line {STRes335,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD014.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes335,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD014.xsd','./msxsdtest/attributeGroup',invalid),
STResList336 = [STRes335|STResList335],
- ?line {STRes336,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD015.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes336,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD015.xsd','./msxsdtest/attributeGroup',invalid),
STResList337 = [STRes336|STResList336],
- ?line {STRes337,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD016.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes337,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD016.xsd','./msxsdtest/attributeGroup',invalid),
STResList338 = [STRes337|STResList337],
- ?line {STRes338,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD017.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes338,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD017.xsd','./msxsdtest/attributeGroup',invalid),
STResList339 = [STRes338|STResList338],
- ?line {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD018.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD018.xsd','./msxsdtest/attributeGroup',valid),
STResList340 = [STRes339|STResList339],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD018.xml','./msxsdtest/attributeGroup',valid,S339),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD018.xml','./msxsdtest/attributeGroup',valid,S339),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD019.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD019.xsd','./msxsdtest/attributeGroup',valid),
STResList341 = [STRes340|STResList340],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD019.xml','./msxsdtest/attributeGroup',valid,S340),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD019.xml','./msxsdtest/attributeGroup',valid,S340),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD020.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD020.xsd','./msxsdtest/attributeGroup',valid),
STResList342 = [STRes341|STResList341],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD020.xml','./msxsdtest/attributeGroup',valid,S341),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD020.xml','./msxsdtest/attributeGroup',valid,S341),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD021.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD021.xsd','./msxsdtest/attributeGroup',valid),
STResList343 = [STRes342|STResList342],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD021.xml','./msxsdtest/attributeGroup',valid,S342),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD021.xml','./msxsdtest/attributeGroup',valid,S342),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD022.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD022.xsd','./msxsdtest/attributeGroup',valid),
STResList344 = [STRes343|STResList343],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD022.xml','./msxsdtest/attributeGroup',valid,S343),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD022.xml','./msxsdtest/attributeGroup',valid,S343),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD023.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD023.xsd','./msxsdtest/attributeGroup',valid),
STResList345 = [STRes344|STResList344],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD023.xml','./msxsdtest/attributeGroup',invalid,S344),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD023.xml','./msxsdtest/attributeGroup',invalid,S344),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes345,S345} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD024.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes345,S345} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD024.xsd','./msxsdtest/attributeGroup',valid),
STResList346 = [STRes345|STResList345],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD024.xml','./msxsdtest/attributeGroup',invalid,S345),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD024.xml','./msxsdtest/attributeGroup',invalid,S345),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes346,S346} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD025.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes346,S346} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD025.xsd','./msxsdtest/attributeGroup',valid),
STResList347 = [STRes346|STResList346],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD025.xml','./msxsdtest/attributeGroup',valid,S346),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD025.xml','./msxsdtest/attributeGroup',valid,S346),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes347,S347} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD026.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes347,S347} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD026.xsd','./msxsdtest/attributeGroup',valid),
STResList348 = [STRes347|STResList347],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD026.xml','./msxsdtest/attributeGroup',invalid,S347),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD026.xml','./msxsdtest/attributeGroup',invalid,S347),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes348,S348} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD027.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes348,S348} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD027.xsd','./msxsdtest/attributeGroup',valid),
STResList349 = [STRes348|STResList348],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD027.xml','./msxsdtest/attributeGroup',valid,S348),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD027.xml','./msxsdtest/attributeGroup',valid,S348),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes349,S349} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD028.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes349,S349} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD028.xsd','./msxsdtest/attributeGroup',valid),
STResList350 = [STRes349|STResList349],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD028.xml','./msxsdtest/attributeGroup',invalid,S349),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD028.xml','./msxsdtest/attributeGroup',invalid,S349),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD029.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD029.xsd','./msxsdtest/attributeGroup',valid),
STResList351 = [STRes350|STResList350],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD029.xml','./msxsdtest/attributeGroup',valid,S350),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD029.xml','./msxsdtest/attributeGroup',valid,S350),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD030.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD030.xsd','./msxsdtest/attributeGroup',valid),
STResList352 = [STRes351|STResList351],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD030.xml','./msxsdtest/attributeGroup',invalid,S351),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD030.xml','./msxsdtest/attributeGroup',invalid,S351),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD031.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD031.xsd','./msxsdtest/attributeGroup',valid),
STResList353 = [STRes352|STResList352],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD031.xml','./msxsdtest/attributeGroup',valid,S352),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD031.xml','./msxsdtest/attributeGroup',valid,S352),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD032.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD032.xsd','./msxsdtest/attributeGroup',valid),
STResList354 = [STRes353|STResList353],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD032.xml','./msxsdtest/attributeGroup',valid,S353),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD032.xml','./msxsdtest/attributeGroup',valid,S353),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD033.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD033.xsd','./msxsdtest/attributeGroup',valid),
STResList355 = [STRes354|STResList354],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD033.xml','./msxsdtest/attributeGroup',valid,S354),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD033.xml','./msxsdtest/attributeGroup',valid,S354),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes355,S355} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD034.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes355,S355} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD034.xsd','./msxsdtest/attributeGroup',valid),
STResList356 = [STRes355|STResList355],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD034.xml','./msxsdtest/attributeGroup',valid,S355),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD034.xml','./msxsdtest/attributeGroup',valid,S355),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD035.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD035.xsd','./msxsdtest/attributeGroup',valid),
STResList357 = [STRes356|STResList356],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD035.xml','./msxsdtest/attributeGroup',invalid,S356),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD035.xml','./msxsdtest/attributeGroup',invalid,S356),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes357,S357} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD036.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes357,S357} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD036.xsd','./msxsdtest/attributeGroup',valid),
STResList358 = [STRes357|STResList357],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD036.xml','./msxsdtest/attributeGroup',valid,S357),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD036.xml','./msxsdtest/attributeGroup',valid,S357),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD037.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD037.xsd','./msxsdtest/attributeGroup',invalid),
STResList359 = [STRes358|STResList358],
- ?line {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD038.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD038.xsd','./msxsdtest/attributeGroup',invalid),
STResList360 = [STRes359|STResList359],
- ?line {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD039.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD039.xsd','./msxsdtest/attributeGroup',invalid),
STResList361 = [STRes360|STResList360],
- ?line {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD040.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD040.xsd','./msxsdtest/attributeGroup',valid),
STResList362 = [STRes361|STResList361],
- ?line {STRes362,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD041.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes362,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD041.xsd','./msxsdtest/attributeGroup',invalid),
STResList363 = [STRes362|STResList362],
- ?line {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD042.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD042.xsd','./msxsdtest/attributeGroup',valid),
STResList364 = [STRes363|STResList363],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD042.xml','./msxsdtest/attributeGroup',invalid,S363),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD042.xml','./msxsdtest/attributeGroup',invalid,S363),
ITResList140 = [ITRes139|ITResList139],
@@ -1829,2574 +1817,2574 @@ att(Config) when is_list(Config) ->
ct(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA001.xsd','./msxsdtest/complexType',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA001.xsd','./msxsdtest/complexType',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA001.xml','./msxsdtest/complexType',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA001.xml','./msxsdtest/complexType',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA002.xsd','./msxsdtest/complexType',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA002.xsd','./msxsdtest/complexType',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA002.xml','./msxsdtest/complexType',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA002.xml','./msxsdtest/complexType',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA003.xsd','./msxsdtest/complexType',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA003.xsd','./msxsdtest/complexType',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA003.xml','./msxsdtest/complexType',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA003.xml','./msxsdtest/complexType',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA004.xsd','./msxsdtest/complexType',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA004.xsd','./msxsdtest/complexType',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA005.xsd','./msxsdtest/complexType',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA005.xsd','./msxsdtest/complexType',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA005.xml','./msxsdtest/complexType',valid,S4),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA005.xml','./msxsdtest/complexType',valid,S4),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA006.xsd','./msxsdtest/complexType',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA006.xsd','./msxsdtest/complexType',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA007.xsd','./msxsdtest/complexType',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA007.xsd','./msxsdtest/complexType',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA008.xsd','./msxsdtest/complexType',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA008.xsd','./msxsdtest/complexType',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA009.xsd','./msxsdtest/complexType',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA009.xsd','./msxsdtest/complexType',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA009.xml','./msxsdtest/complexType',valid,S8),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA009.xml','./msxsdtest/complexType',valid,S8),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA010.xsd','./msxsdtest/complexType',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA010.xsd','./msxsdtest/complexType',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA010.xml','./msxsdtest/complexType',valid,S9),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA010.xml','./msxsdtest/complexType',valid,S9),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA011.xsd','./msxsdtest/complexType',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA011.xsd','./msxsdtest/complexType',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA011.xml','./msxsdtest/complexType',valid,S10),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA011.xml','./msxsdtest/complexType',valid,S10),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA012.xsd','./msxsdtest/complexType',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA012.xsd','./msxsdtest/complexType',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA012.xml','./msxsdtest/complexType',valid,S11),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA012.xml','./msxsdtest/complexType',valid,S11),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA013.xsd','./msxsdtest/complexType',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA013.xsd','./msxsdtest/complexType',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA013.xml','./msxsdtest/complexType',valid,S12),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA013.xml','./msxsdtest/complexType',valid,S12),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA014.xsd','./msxsdtest/complexType',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA014.xsd','./msxsdtest/complexType',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA015.xsd','./msxsdtest/complexType',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA015.xsd','./msxsdtest/complexType',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA016.xsd','./msxsdtest/complexType',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA016.xsd','./msxsdtest/complexType',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA017.xsd','./msxsdtest/complexType',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA017.xsd','./msxsdtest/complexType',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA017.xml','./msxsdtest/complexType',valid,S16),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA017.xml','./msxsdtest/complexType',valid,S16),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA018.xsd','./msxsdtest/complexType',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA018.xsd','./msxsdtest/complexType',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA018.xml','./msxsdtest/complexType',valid,S17),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA018.xml','./msxsdtest/complexType',valid,S17),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA019.xsd','./msxsdtest/complexType',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA019.xsd','./msxsdtest/complexType',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA019.xml','./msxsdtest/complexType',valid,S18),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA019.xml','./msxsdtest/complexType',valid,S18),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA020.xsd','./msxsdtest/complexType',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA020.xsd','./msxsdtest/complexType',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA020.xml','./msxsdtest/complexType',valid,S19),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA020.xml','./msxsdtest/complexType',valid,S19),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA021.xsd','./msxsdtest/complexType',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA021.xsd','./msxsdtest/complexType',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA021.xml','./msxsdtest/complexType',valid,S20),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA021.xml','./msxsdtest/complexType',valid,S20),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA022.xsd','./msxsdtest/complexType',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA022.xsd','./msxsdtest/complexType',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA022.xml','./msxsdtest/complexType',valid,S21),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA022.xml','./msxsdtest/complexType',valid,S21),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA023.xsd','./msxsdtest/complexType',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA023.xsd','./msxsdtest/complexType',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA024.xsd','./msxsdtest/complexType',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA024.xsd','./msxsdtest/complexType',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA025.xsd','./msxsdtest/complexType',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA025.xsd','./msxsdtest/complexType',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA026.xsd','./msxsdtest/complexType',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA026.xsd','./msxsdtest/complexType',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA026.xml','./msxsdtest/complexType',valid,S25),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA026.xml','./msxsdtest/complexType',valid,S25),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA027.xsd','./msxsdtest/complexType',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA027.xsd','./msxsdtest/complexType',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA027.xml','./msxsdtest/complexType',valid,S26),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA027.xml','./msxsdtest/complexType',valid,S26),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA028.xsd','./msxsdtest/complexType',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA028.xsd','./msxsdtest/complexType',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA029.xsd','./msxsdtest/complexType',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA029.xsd','./msxsdtest/complexType',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA030.xsd','./msxsdtest/complexType',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA030.xsd','./msxsdtest/complexType',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA031.xsd','./msxsdtest/complexType',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA031.xsd','./msxsdtest/complexType',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA032.xsd','./msxsdtest/complexType',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA032.xsd','./msxsdtest/complexType',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA032.xml','./msxsdtest/complexType',valid,S31),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA032.xml','./msxsdtest/complexType',valid,S31),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA033.xsd','./msxsdtest/complexType',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA033.xsd','./msxsdtest/complexType',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA033.xml','./msxsdtest/complexType',valid,S32),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA033.xml','./msxsdtest/complexType',valid,S32),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA034.xsd','./msxsdtest/complexType',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA034.xsd','./msxsdtest/complexType',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA034.xml','./msxsdtest/complexType',valid,S33),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA034.xml','./msxsdtest/complexType',valid,S33),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA035.xsd','./msxsdtest/complexType',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA035.xsd','./msxsdtest/complexType',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA035.xml','./msxsdtest/complexType',valid,S34),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA035.xml','./msxsdtest/complexType',valid,S34),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA036.xsd','./msxsdtest/complexType',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA036.xsd','./msxsdtest/complexType',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA037.xsd','./msxsdtest/complexType',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA037.xsd','./msxsdtest/complexType',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA037.xml','./msxsdtest/complexType',valid,S36),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA037.xml','./msxsdtest/complexType',valid,S36),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA038.xsd','./msxsdtest/complexType',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA038.xsd','./msxsdtest/complexType',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA039.xsd','./msxsdtest/complexType',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA039.xsd','./msxsdtest/complexType',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA040.xsd','./msxsdtest/complexType',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA040.xsd','./msxsdtest/complexType',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA041.xsd','./msxsdtest/complexType',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA041.xsd','./msxsdtest/complexType',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA041.xml','./msxsdtest/complexType',valid,S40),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA041.xml','./msxsdtest/complexType',valid,S40),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA042.xsd','./msxsdtest/complexType',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA042.xsd','./msxsdtest/complexType',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA043.xsd','./msxsdtest/complexType',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA043.xsd','./msxsdtest/complexType',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA044.xsd','./msxsdtest/complexType',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA044.xsd','./msxsdtest/complexType',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA045.xsd','./msxsdtest/complexType',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA045.xsd','./msxsdtest/complexType',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA045.xml','./msxsdtest/complexType',valid,S44),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA045.xml','./msxsdtest/complexType',valid,S44),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA046.xsd','./msxsdtest/complexType',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA046.xsd','./msxsdtest/complexType',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA047.xsd','./msxsdtest/complexType',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA047.xsd','./msxsdtest/complexType',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA047.xml','./msxsdtest/complexType',valid,S46),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA047.xml','./msxsdtest/complexType',valid,S46),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA048.xsd','./msxsdtest/complexType',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA048.xsd','./msxsdtest/complexType',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA048.xml','./msxsdtest/complexType',valid,S47),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA048.xml','./msxsdtest/complexType',valid,S47),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA049.xsd','./msxsdtest/complexType',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA049.xsd','./msxsdtest/complexType',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA049.xml','./msxsdtest/complexType',valid,S48),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA049.xml','./msxsdtest/complexType',valid,S48),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB001.xsd','./msxsdtest/complexType',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB001.xsd','./msxsdtest/complexType',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB001.xml','./msxsdtest/complexType',valid,S49),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB001.xml','./msxsdtest/complexType',valid,S49),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB002.xsd','./msxsdtest/complexType',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB002.xsd','./msxsdtest/complexType',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB003.xsd','./msxsdtest/complexType',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB003.xsd','./msxsdtest/complexType',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB003.xml','./msxsdtest/complexType',valid,S51),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB003.xml','./msxsdtest/complexType',valid,S51),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB004.xsd','./msxsdtest/complexType',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB004.xsd','./msxsdtest/complexType',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB005.xsd','./msxsdtest/complexType',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB005.xsd','./msxsdtest/complexType',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB006.xsd','./msxsdtest/complexType',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB006.xsd','./msxsdtest/complexType',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB007.xsd','./msxsdtest/complexType',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB007.xsd','./msxsdtest/complexType',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB008.xsd','./msxsdtest/complexType',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB008.xsd','./msxsdtest/complexType',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB009.xsd','./msxsdtest/complexType',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB009.xsd','./msxsdtest/complexType',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB010.xsd','./msxsdtest/complexType',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB010.xsd','./msxsdtest/complexType',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB011.xsd','./msxsdtest/complexType',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB011.xsd','./msxsdtest/complexType',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB012.xsd','./msxsdtest/complexType',invalid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB012.xsd','./msxsdtest/complexType',invalid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB013.xsd','./msxsdtest/complexType',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB013.xsd','./msxsdtest/complexType',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB014.xsd','./msxsdtest/complexType',invalid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB014.xsd','./msxsdtest/complexType',invalid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB015.xsd','./msxsdtest/complexType',invalid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB015.xsd','./msxsdtest/complexType',invalid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB016.xsd','./msxsdtest/complexType',invalid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB016.xsd','./msxsdtest/complexType',invalid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB017.xsd','./msxsdtest/complexType',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB017.xsd','./msxsdtest/complexType',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB017.xml','./msxsdtest/complexType',valid,S65),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB017.xml','./msxsdtest/complexType',valid,S65),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB018.xsd','./msxsdtest/complexType',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB018.xsd','./msxsdtest/complexType',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB019.xsd','./msxsdtest/complexType',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB019.xsd','./msxsdtest/complexType',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB020.xsd','./msxsdtest/complexType',invalid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB020.xsd','./msxsdtest/complexType',invalid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB021.xsd','./msxsdtest/complexType',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB021.xsd','./msxsdtest/complexType',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB022.xsd','./msxsdtest/complexType',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB022.xsd','./msxsdtest/complexType',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB023.xsd','./msxsdtest/complexType',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB023.xsd','./msxsdtest/complexType',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB024.xsd','./msxsdtest/complexType',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB024.xsd','./msxsdtest/complexType',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB025.xsd','./msxsdtest/complexType',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB025.xsd','./msxsdtest/complexType',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB026.xsd','./msxsdtest/complexType',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB026.xsd','./msxsdtest/complexType',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB027.xsd','./msxsdtest/complexType',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB027.xsd','./msxsdtest/complexType',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB028.xsd','./msxsdtest/complexType',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB028.xsd','./msxsdtest/complexType',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB029.xsd','./msxsdtest/complexType',invalid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB029.xsd','./msxsdtest/complexType',invalid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB030.xsd','./msxsdtest/complexType',invalid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB030.xsd','./msxsdtest/complexType',invalid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB031.xsd','./msxsdtest/complexType',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB031.xsd','./msxsdtest/complexType',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB031.xml','./msxsdtest/complexType',valid,S79),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB031.xml','./msxsdtest/complexType',valid,S79),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB032.xsd','./msxsdtest/complexType',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB032.xsd','./msxsdtest/complexType',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB033.xsd','./msxsdtest/complexType',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB033.xsd','./msxsdtest/complexType',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB034.xsd','./msxsdtest/complexType',invalid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB034.xsd','./msxsdtest/complexType',invalid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB035.xsd','./msxsdtest/complexType',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB035.xsd','./msxsdtest/complexType',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB036.xsd','./msxsdtest/complexType',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB036.xsd','./msxsdtest/complexType',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB037.xsd','./msxsdtest/complexType',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB037.xsd','./msxsdtest/complexType',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB038.xsd','./msxsdtest/complexType',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB038.xsd','./msxsdtest/complexType',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB039.xsd','./msxsdtest/complexType',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB039.xsd','./msxsdtest/complexType',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB039.xml','./msxsdtest/complexType',valid,S87),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB039.xml','./msxsdtest/complexType',valid,S87),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB040.xsd','./msxsdtest/complexType',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB040.xsd','./msxsdtest/complexType',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB040.xml','./msxsdtest/complexType',valid,S88),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB040.xml','./msxsdtest/complexType',valid,S88),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB041.xsd','./msxsdtest/complexType',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB041.xsd','./msxsdtest/complexType',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB041.xml','./msxsdtest/complexType',valid,S89),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB041.xml','./msxsdtest/complexType',valid,S89),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB042.xsd','./msxsdtest/complexType',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB042.xsd','./msxsdtest/complexType',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB042.xml','./msxsdtest/complexType',valid,S90),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB042.xml','./msxsdtest/complexType',valid,S90),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB043.xsd','./msxsdtest/complexType',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB043.xsd','./msxsdtest/complexType',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB043.xml','./msxsdtest/complexType',valid,S91),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB043.xml','./msxsdtest/complexType',valid,S91),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB044.xsd','./msxsdtest/complexType',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB044.xsd','./msxsdtest/complexType',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB045.xsd','./msxsdtest/complexType',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB045.xsd','./msxsdtest/complexType',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB045.xml','./msxsdtest/complexType',valid,S93),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB045.xml','./msxsdtest/complexType',valid,S93),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB046.xsd','./msxsdtest/complexType',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB046.xsd','./msxsdtest/complexType',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB047.xsd','./msxsdtest/complexType',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB047.xsd','./msxsdtest/complexType',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB048.xsd','./msxsdtest/complexType',invalid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB048.xsd','./msxsdtest/complexType',invalid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB049.xsd','./msxsdtest/complexType',invalid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB049.xsd','./msxsdtest/complexType',invalid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB050.xsd','./msxsdtest/complexType',invalid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB050.xsd','./msxsdtest/complexType',invalid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB051.xsd','./msxsdtest/complexType',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB051.xsd','./msxsdtest/complexType',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB052.xsd','./msxsdtest/complexType',invalid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB052.xsd','./msxsdtest/complexType',invalid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB053.xsd','./msxsdtest/complexType',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB053.xsd','./msxsdtest/complexType',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB053.xml','./msxsdtest/complexType',valid,S101),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB053.xml','./msxsdtest/complexType',valid,S101),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB054.xsd','./msxsdtest/complexType',valid),
+ {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB054.xsd','./msxsdtest/complexType',valid),
STResList103 = [STRes102|STResList102],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB054.xml','./msxsdtest/complexType',valid,S102),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB054.xml','./msxsdtest/complexType',valid,S102),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB055.xsd','./msxsdtest/complexType',valid),
+ {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB055.xsd','./msxsdtest/complexType',valid),
STResList104 = [STRes103|STResList103],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB055.xml','./msxsdtest/complexType',valid,S103),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB055.xml','./msxsdtest/complexType',valid,S103),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB056.xsd','./msxsdtest/complexType',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB056.xsd','./msxsdtest/complexType',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB056.xml','./msxsdtest/complexType',valid,S104),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB056.xml','./msxsdtest/complexType',valid,S104),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB057.xsd','./msxsdtest/complexType',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB057.xsd','./msxsdtest/complexType',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB057.xml','./msxsdtest/complexType',valid,S105),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB057.xml','./msxsdtest/complexType',valid,S105),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB058.xsd','./msxsdtest/complexType',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB058.xsd','./msxsdtest/complexType',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB059.xsd','./msxsdtest/complexType',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB059.xsd','./msxsdtest/complexType',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB059.xml','./msxsdtest/complexType',valid,S107),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB059.xml','./msxsdtest/complexType',valid,S107),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB060.xsd','./msxsdtest/complexType',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB060.xsd','./msxsdtest/complexType',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB061.xsd','./msxsdtest/complexType',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB061.xsd','./msxsdtest/complexType',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB062.xsd','./msxsdtest/complexType',invalid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB062.xsd','./msxsdtest/complexType',invalid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB063.xsd','./msxsdtest/complexType',invalid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB063.xsd','./msxsdtest/complexType',invalid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB064.xsd','./msxsdtest/complexType',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB064.xsd','./msxsdtest/complexType',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB065.xsd','./msxsdtest/complexType',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB065.xsd','./msxsdtest/complexType',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB066.xsd','./msxsdtest/complexType',invalid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB066.xsd','./msxsdtest/complexType',invalid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB067.xsd','./msxsdtest/complexType',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB067.xsd','./msxsdtest/complexType',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB067.xml','./msxsdtest/complexType',valid,S115),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB067.xml','./msxsdtest/complexType',valid,S115),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB068.xsd','./msxsdtest/complexType',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB068.xsd','./msxsdtest/complexType',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB068.xml','./msxsdtest/complexType',valid,S116),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB068.xml','./msxsdtest/complexType',valid,S116),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB069.xsd','./msxsdtest/complexType',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB069.xsd','./msxsdtest/complexType',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB069.xml','./msxsdtest/complexType',valid,S117),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB069.xml','./msxsdtest/complexType',valid,S117),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB070.xsd','./msxsdtest/complexType',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB070.xsd','./msxsdtest/complexType',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB070.xml','./msxsdtest/complexType',valid,S118),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB070.xml','./msxsdtest/complexType',valid,S118),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB071.xsd','./msxsdtest/complexType',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB071.xsd','./msxsdtest/complexType',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB071.xml','./msxsdtest/complexType',valid,S119),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB071.xml','./msxsdtest/complexType',valid,S119),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB072.xsd','./msxsdtest/complexType',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB072.xsd','./msxsdtest/complexType',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB073.xsd','./msxsdtest/complexType',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB073.xsd','./msxsdtest/complexType',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB073.xml','./msxsdtest/complexType',valid,S121),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB073.xml','./msxsdtest/complexType',valid,S121),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB074.xsd','./msxsdtest/complexType',invalid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB074.xsd','./msxsdtest/complexType',invalid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB075.xsd','./msxsdtest/complexType',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB075.xsd','./msxsdtest/complexType',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB076.xsd','./msxsdtest/complexType',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB076.xsd','./msxsdtest/complexType',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB077.xsd','./msxsdtest/complexType',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB077.xsd','./msxsdtest/complexType',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB078.xsd','./msxsdtest/complexType',invalid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB078.xsd','./msxsdtest/complexType',invalid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB079.xsd','./msxsdtest/complexType',invalid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB079.xsd','./msxsdtest/complexType',invalid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB080.xsd','./msxsdtest/complexType',invalid),
+ {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB080.xsd','./msxsdtest/complexType',invalid),
STResList129 = [STRes128|STResList128],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB081.xsd','./msxsdtest/complexType',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB081.xsd','./msxsdtest/complexType',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB081.xml','./msxsdtest/complexType',valid,S129),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB081.xml','./msxsdtest/complexType',valid,S129),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB082.xsd','./msxsdtest/complexType',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB082.xsd','./msxsdtest/complexType',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB082.xml','./msxsdtest/complexType',valid,S130),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB082.xml','./msxsdtest/complexType',valid,S130),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB083.xsd','./msxsdtest/complexType',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB083.xsd','./msxsdtest/complexType',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB083.xml','./msxsdtest/complexType',valid,S131),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB083.xml','./msxsdtest/complexType',valid,S131),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB084.xsd','./msxsdtest/complexType',valid),
+ {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB084.xsd','./msxsdtest/complexType',valid),
STResList133 = [STRes132|STResList132],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB084.xml','./msxsdtest/complexType',valid,S132),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB084.xml','./msxsdtest/complexType',valid,S132),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB085.xsd','./msxsdtest/complexType',valid),
+ {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB085.xsd','./msxsdtest/complexType',valid),
STResList134 = [STRes133|STResList133],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB085.xml','./msxsdtest/complexType',valid,S133),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB085.xml','./msxsdtest/complexType',valid,S133),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB086.xsd','./msxsdtest/complexType',invalid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB086.xsd','./msxsdtest/complexType',invalid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB087.xsd','./msxsdtest/complexType',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB087.xsd','./msxsdtest/complexType',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB087.xml','./msxsdtest/complexType',valid,S135),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB087.xml','./msxsdtest/complexType',valid,S135),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB088.xsd','./msxsdtest/complexType',invalid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB088.xsd','./msxsdtest/complexType',invalid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB089.xsd','./msxsdtest/complexType',invalid),
+ {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB089.xsd','./msxsdtest/complexType',invalid),
STResList138 = [STRes137|STResList137],
- ?line {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB090.xsd','./msxsdtest/complexType',invalid),
+ {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB090.xsd','./msxsdtest/complexType',invalid),
STResList139 = [STRes138|STResList138],
- ?line {STRes139,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB091.xsd','./msxsdtest/complexType',invalid),
+ {STRes139,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB091.xsd','./msxsdtest/complexType',invalid),
STResList140 = [STRes139|STResList139],
- ?line {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB092.xsd','./msxsdtest/complexType',invalid),
+ {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB092.xsd','./msxsdtest/complexType',invalid),
STResList141 = [STRes140|STResList140],
- ?line {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB093.xsd','./msxsdtest/complexType',invalid),
+ {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB093.xsd','./msxsdtest/complexType',invalid),
STResList142 = [STRes141|STResList141],
- ?line {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB094.xsd','./msxsdtest/complexType',invalid),
+ {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB094.xsd','./msxsdtest/complexType',invalid),
STResList143 = [STRes142|STResList142],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB095.xsd','./msxsdtest/complexType',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB095.xsd','./msxsdtest/complexType',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB095.xml','./msxsdtest/complexType',valid,S143),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB095.xml','./msxsdtest/complexType',valid,S143),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB096.xsd','./msxsdtest/complexType',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB096.xsd','./msxsdtest/complexType',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB096.xml','./msxsdtest/complexType',valid,S144),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB096.xml','./msxsdtest/complexType',valid,S144),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB097.xsd','./msxsdtest/complexType',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB097.xsd','./msxsdtest/complexType',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB097.xml','./msxsdtest/complexType',valid,S145),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB097.xml','./msxsdtest/complexType',valid,S145),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB098.xsd','./msxsdtest/complexType',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB098.xsd','./msxsdtest/complexType',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB098.xml','./msxsdtest/complexType',valid,S146),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB098.xml','./msxsdtest/complexType',valid,S146),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB099.xsd','./msxsdtest/complexType',invalid),
+ {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB099.xsd','./msxsdtest/complexType',invalid),
STResList148 = [STRes147|STResList147],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB100.xsd','./msxsdtest/complexType',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB100.xsd','./msxsdtest/complexType',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB100.xml','./msxsdtest/complexType',valid,S148),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB100.xml','./msxsdtest/complexType',valid,S148),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes149,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB101.xsd','./msxsdtest/complexType',invalid),
+ {STRes149,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB101.xsd','./msxsdtest/complexType',invalid),
STResList150 = [STRes149|STResList149],
- ?line {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB102.xsd','./msxsdtest/complexType',invalid),
+ {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB102.xsd','./msxsdtest/complexType',invalid),
STResList151 = [STRes150|STResList150],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB103.xsd','./msxsdtest/complexType',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB103.xsd','./msxsdtest/complexType',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB104.xsd','./msxsdtest/complexType',invalid),
+ {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB104.xsd','./msxsdtest/complexType',invalid),
STResList153 = [STRes152|STResList152],
- ?line {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB105.xsd','./msxsdtest/complexType',invalid),
+ {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB105.xsd','./msxsdtest/complexType',invalid),
STResList154 = [STRes153|STResList153],
- ?line {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB106.xsd','./msxsdtest/complexType',invalid),
+ {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB106.xsd','./msxsdtest/complexType',invalid),
STResList155 = [STRes154|STResList154],
- ?line {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB107.xsd','./msxsdtest/complexType',invalid),
+ {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB107.xsd','./msxsdtest/complexType',invalid),
STResList156 = [STRes155|STResList155],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB108.xsd','./msxsdtest/complexType',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB108.xsd','./msxsdtest/complexType',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB108.xml','./msxsdtest/complexType',valid,S156),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB108.xml','./msxsdtest/complexType',valid,S156),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB109.xsd','./msxsdtest/complexType',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB109.xsd','./msxsdtest/complexType',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB109.xml','./msxsdtest/complexType',valid,S157),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB109.xml','./msxsdtest/complexType',valid,S157),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB110.xsd','./msxsdtest/complexType',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB110.xsd','./msxsdtest/complexType',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB110.xml','./msxsdtest/complexType',valid,S158),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB110.xml','./msxsdtest/complexType',valid,S158),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB111.xsd','./msxsdtest/complexType',valid),
+ {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB111.xsd','./msxsdtest/complexType',valid),
STResList160 = [STRes159|STResList159],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB111.xml','./msxsdtest/complexType',valid,S159),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB111.xml','./msxsdtest/complexType',valid,S159),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB112.xsd','./msxsdtest/complexType',invalid),
+ {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB112.xsd','./msxsdtest/complexType',invalid),
STResList161 = [STRes160|STResList160],
- ?line {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB113.xsd','./msxsdtest/complexType',valid),
+ {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB113.xsd','./msxsdtest/complexType',valid),
STResList162 = [STRes161|STResList161],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB113.xml','./msxsdtest/complexType',valid,S161),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB113.xml','./msxsdtest/complexType',valid,S161),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB114.xsd','./msxsdtest/complexType',invalid),
+ {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB114.xsd','./msxsdtest/complexType',invalid),
STResList163 = [STRes162|STResList162],
- ?line {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB115.xsd','./msxsdtest/complexType',invalid),
+ {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB115.xsd','./msxsdtest/complexType',invalid),
STResList164 = [STRes163|STResList163],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB116.xsd','./msxsdtest/complexType',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB116.xsd','./msxsdtest/complexType',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB117.xsd','./msxsdtest/complexType',invalid),
+ {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB117.xsd','./msxsdtest/complexType',invalid),
STResList166 = [STRes165|STResList165],
- ?line {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB118.xsd','./msxsdtest/complexType',invalid),
+ {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB118.xsd','./msxsdtest/complexType',invalid),
STResList167 = [STRes166|STResList166],
- ?line {STRes167,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB119.xsd','./msxsdtest/complexType',invalid),
+ {STRes167,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB119.xsd','./msxsdtest/complexType',invalid),
STResList168 = [STRes167|STResList167],
- ?line {STRes168,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB120.xsd','./msxsdtest/complexType',invalid),
+ {STRes168,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB120.xsd','./msxsdtest/complexType',invalid),
STResList169 = [STRes168|STResList168],
- ?line {STRes169,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB121.xsd','./msxsdtest/complexType',invalid),
+ {STRes169,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB121.xsd','./msxsdtest/complexType',invalid),
STResList170 = [STRes169|STResList169],
- ?line {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB122.xsd','./msxsdtest/complexType',invalid),
+ {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB122.xsd','./msxsdtest/complexType',invalid),
STResList171 = [STRes170|STResList170],
- ?line {STRes171,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB123.xsd','./msxsdtest/complexType',invalid),
+ {STRes171,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB123.xsd','./msxsdtest/complexType',invalid),
STResList172 = [STRes171|STResList171],
- ?line {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB124.xsd','./msxsdtest/complexType',invalid),
+ {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB124.xsd','./msxsdtest/complexType',invalid),
STResList173 = [STRes172|STResList172],
- ?line {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB125.xsd','./msxsdtest/complexType',invalid),
+ {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB125.xsd','./msxsdtest/complexType',invalid),
STResList174 = [STRes173|STResList173],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC001.xsd','./msxsdtest/complexType',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC001.xsd','./msxsdtest/complexType',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC001.xml','./msxsdtest/complexType',valid,S174),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC001.xml','./msxsdtest/complexType',valid,S174),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC002.xsd','./msxsdtest/complexType',invalid),
+ {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC002.xsd','./msxsdtest/complexType',invalid),
STResList176 = [STRes175|STResList175],
- ?line {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC003.xsd','./msxsdtest/complexType',invalid),
+ {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC003.xsd','./msxsdtest/complexType',invalid),
STResList177 = [STRes176|STResList176],
- ?line {STRes177,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC004.xsd','./msxsdtest/complexType',invalid),
+ {STRes177,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC004.xsd','./msxsdtest/complexType',invalid),
STResList178 = [STRes177|STResList177],
- ?line {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC005.xsd','./msxsdtest/complexType',invalid),
+ {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC005.xsd','./msxsdtest/complexType',invalid),
STResList179 = [STRes178|STResList178],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC006.xsd','./msxsdtest/complexType',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC006.xsd','./msxsdtest/complexType',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC006.xml','./msxsdtest/complexType',valid,S179),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC006.xml','./msxsdtest/complexType',valid,S179),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC007.xsd','./msxsdtest/complexType',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC007.xsd','./msxsdtest/complexType',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC007.xml','./msxsdtest/complexType',valid,S180),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC007.xml','./msxsdtest/complexType',valid,S180),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC008.xsd','./msxsdtest/complexType',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC008.xsd','./msxsdtest/complexType',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC008.xml','./msxsdtest/complexType',valid,S181),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC008.xml','./msxsdtest/complexType',valid,S181),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes182,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC009.xsd','./msxsdtest/complexType',invalid),
+ {STRes182,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC009.xsd','./msxsdtest/complexType',invalid),
STResList183 = [STRes182|STResList182],
- ?line {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC010.xsd','./msxsdtest/complexType',invalid),
+ {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC010.xsd','./msxsdtest/complexType',invalid),
STResList184 = [STRes183|STResList183],
- ?line {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC011.xsd','./msxsdtest/complexType',invalid),
+ {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC011.xsd','./msxsdtest/complexType',invalid),
STResList185 = [STRes184|STResList184],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC012.xsd','./msxsdtest/complexType',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC012.xsd','./msxsdtest/complexType',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC012.xml','./msxsdtest/complexType',valid,S185),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC012.xml','./msxsdtest/complexType',valid,S185),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD001.xsd','./msxsdtest/complexType',invalid),
+ {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD001.xsd','./msxsdtest/complexType',invalid),
STResList187 = [STRes186|STResList186],
- ?line {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD002.xsd','./msxsdtest/complexType',valid),
+ {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD002.xsd','./msxsdtest/complexType',valid),
STResList188 = [STRes187|STResList187],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD002.xml','./msxsdtest/complexType',valid,S187),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD002.xml','./msxsdtest/complexType',valid,S187),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD003.xsd','./msxsdtest/complexType',invalid),
+ {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD003.xsd','./msxsdtest/complexType',invalid),
STResList189 = [STRes188|STResList188],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD004.xsd','./msxsdtest/complexType',invalid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD004.xsd','./msxsdtest/complexType',invalid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD005.xsd','./msxsdtest/complexType',valid),
+ {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD005.xsd','./msxsdtest/complexType',valid),
STResList191 = [STRes190|STResList190],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD005.xml','./msxsdtest/complexType',valid,S190),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD005.xml','./msxsdtest/complexType',valid,S190),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD006.xsd','./msxsdtest/complexType',valid),
+ {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD006.xsd','./msxsdtest/complexType',valid),
STResList192 = [STRes191|STResList191],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD006.xml','./msxsdtest/complexType',valid,S191),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD006.xml','./msxsdtest/complexType',valid,S191),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD007.xsd','./msxsdtest/complexType',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD007.xsd','./msxsdtest/complexType',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD008.xsd','./msxsdtest/complexType',valid),
+ {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD008.xsd','./msxsdtest/complexType',valid),
STResList194 = [STRes193|STResList193],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD008.xml','./msxsdtest/complexType',valid,S193),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD008.xml','./msxsdtest/complexType',valid,S193),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD009.xsd','./msxsdtest/complexType',invalid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD009.xsd','./msxsdtest/complexType',invalid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD010.xsd','./msxsdtest/complexType',valid),
+ {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD010.xsd','./msxsdtest/complexType',valid),
STResList196 = [STRes195|STResList195],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD010.xml','./msxsdtest/complexType',valid,S195),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD010.xml','./msxsdtest/complexType',valid,S195),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD011.xsd','./msxsdtest/complexType',invalid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD011.xsd','./msxsdtest/complexType',invalid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD012.xsd','./msxsdtest/complexType',valid),
+ {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD012.xsd','./msxsdtest/complexType',valid),
STResList198 = [STRes197|STResList197],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD012.xml','./msxsdtest/complexType',valid,S197),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD012.xml','./msxsdtest/complexType',valid,S197),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD013.xsd','./msxsdtest/complexType',invalid),
+ {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD013.xsd','./msxsdtest/complexType',invalid),
STResList199 = [STRes198|STResList198],
- ?line {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD014.xsd','./msxsdtest/complexType',invalid),
+ {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD014.xsd','./msxsdtest/complexType',invalid),
STResList200 = [STRes199|STResList199],
- ?line {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD015.xsd','./msxsdtest/complexType',valid),
+ {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD015.xsd','./msxsdtest/complexType',valid),
STResList201 = [STRes200|STResList200],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD015.xml','./msxsdtest/complexType',valid,S200),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD015.xml','./msxsdtest/complexType',valid,S200),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD016.xsd','./msxsdtest/complexType',valid),
+ {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD016.xsd','./msxsdtest/complexType',valid),
STResList202 = [STRes201|STResList201],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD016.xml','./msxsdtest/complexType',valid,S201),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD016.xml','./msxsdtest/complexType',valid,S201),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD017.xsd','./msxsdtest/complexType',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD017.xsd','./msxsdtest/complexType',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD017.xml','./msxsdtest/complexType',valid,S202),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD017.xml','./msxsdtest/complexType',valid,S202),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD018.xsd','./msxsdtest/complexType',valid),
+ {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD018.xsd','./msxsdtest/complexType',valid),
STResList204 = [STRes203|STResList203],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD018.xml','./msxsdtest/complexType',valid,S203),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD018.xml','./msxsdtest/complexType',valid,S203),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD019.xsd','./msxsdtest/complexType',valid),
+ {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD019.xsd','./msxsdtest/complexType',valid),
STResList205 = [STRes204|STResList204],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD019.xml','./msxsdtest/complexType',valid,S204),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD019.xml','./msxsdtest/complexType',valid,S204),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD020.xsd','./msxsdtest/complexType',valid),
+ {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD020.xsd','./msxsdtest/complexType',valid),
STResList206 = [STRes205|STResList205],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD020.xml','./msxsdtest/complexType',valid,S205),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD020.xml','./msxsdtest/complexType',valid,S205),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD021.xsd','./msxsdtest/complexType',valid),
+ {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD021.xsd','./msxsdtest/complexType',valid),
STResList207 = [STRes206|STResList206],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD021.xml','./msxsdtest/complexType',valid,S206),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD021.xml','./msxsdtest/complexType',valid,S206),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD022.xsd','./msxsdtest/complexType',valid),
+ {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD022.xsd','./msxsdtest/complexType',valid),
STResList208 = [STRes207|STResList207],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD022.xml','./msxsdtest/complexType',valid,S207),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD022.xml','./msxsdtest/complexType',valid,S207),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD023.xsd','./msxsdtest/complexType',valid),
+ {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD023.xsd','./msxsdtest/complexType',valid),
STResList209 = [STRes208|STResList208],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD023.xml','./msxsdtest/complexType',valid,S208),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD023.xml','./msxsdtest/complexType',valid,S208),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD024.xsd','./msxsdtest/complexType',invalid),
+ {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD024.xsd','./msxsdtest/complexType',invalid),
STResList210 = [STRes209|STResList209],
- ?line {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD025.xsd','./msxsdtest/complexType',valid),
+ {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD025.xsd','./msxsdtest/complexType',valid),
STResList211 = [STRes210|STResList210],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD025.xml','./msxsdtest/complexType',valid,S210),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD025.xml','./msxsdtest/complexType',valid,S210),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD026.xsd','./msxsdtest/complexType',valid),
+ {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD026.xsd','./msxsdtest/complexType',valid),
STResList212 = [STRes211|STResList211],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD026.xml','./msxsdtest/complexType',valid,S211),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD026.xml','./msxsdtest/complexType',valid,S211),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD027.xsd','./msxsdtest/complexType',valid),
+ {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD027.xsd','./msxsdtest/complexType',valid),
STResList213 = [STRes212|STResList212],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD027.xml','./msxsdtest/complexType',valid,S212),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD027.xml','./msxsdtest/complexType',valid,S212),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD028.xsd','./msxsdtest/complexType',valid),
+ {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD028.xsd','./msxsdtest/complexType',valid),
STResList214 = [STRes213|STResList213],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD028.xml','./msxsdtest/complexType',valid,S213),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD028.xml','./msxsdtest/complexType',valid,S213),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD029.xsd','./msxsdtest/complexType',valid),
+ {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD029.xsd','./msxsdtest/complexType',valid),
STResList215 = [STRes214|STResList214],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD029.xml','./msxsdtest/complexType',valid,S214),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD029.xml','./msxsdtest/complexType',valid,S214),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD030.xsd','./msxsdtest/complexType',valid),
+ {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD030.xsd','./msxsdtest/complexType',valid),
STResList216 = [STRes215|STResList215],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD030.xml','./msxsdtest/complexType',valid,S215),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD030.xml','./msxsdtest/complexType',valid,S215),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD031.xsd','./msxsdtest/complexType',valid),
+ {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD031.xsd','./msxsdtest/complexType',valid),
STResList217 = [STRes216|STResList216],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD031.xml','./msxsdtest/complexType',valid,S216),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD031.xml','./msxsdtest/complexType',valid,S216),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD032.xsd','./msxsdtest/complexType',valid),
+ {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD032.xsd','./msxsdtest/complexType',valid),
STResList218 = [STRes217|STResList217],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD032.xml','./msxsdtest/complexType',valid,S217),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD032.xml','./msxsdtest/complexType',valid,S217),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD033.xsd','./msxsdtest/complexType',valid),
+ {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD033.xsd','./msxsdtest/complexType',valid),
STResList219 = [STRes218|STResList218],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD033.xml','./msxsdtest/complexType',valid,S218),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD033.xml','./msxsdtest/complexType',valid,S218),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD034.xsd','./msxsdtest/complexType',invalid),
+ {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD034.xsd','./msxsdtest/complexType',invalid),
STResList220 = [STRes219|STResList219],
- ?line {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD035.xsd','./msxsdtest/complexType',valid),
+ {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD035.xsd','./msxsdtest/complexType',valid),
STResList221 = [STRes220|STResList220],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD035.xml','./msxsdtest/complexType',valid,S220),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD035.xml','./msxsdtest/complexType',valid,S220),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD036.xsd','./msxsdtest/complexType',invalid),
+ {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD036.xsd','./msxsdtest/complexType',invalid),
STResList222 = [STRes221|STResList221],
- ?line {STRes222,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD037.xsd','./msxsdtest/complexType',invalid),
+ {STRes222,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD037.xsd','./msxsdtest/complexType',invalid),
STResList223 = [STRes222|STResList222],
- ?line {STRes223,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD038.xsd','./msxsdtest/complexType',invalid),
+ {STRes223,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD038.xsd','./msxsdtest/complexType',invalid),
STResList224 = [STRes223|STResList223],
- ?line {STRes224,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD039.xsd','./msxsdtest/complexType',invalid),
+ {STRes224,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD039.xsd','./msxsdtest/complexType',invalid),
STResList225 = [STRes224|STResList224],
- ?line {STRes225,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD040.xsd','./msxsdtest/complexType',invalid),
+ {STRes225,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD040.xsd','./msxsdtest/complexType',invalid),
STResList226 = [STRes225|STResList225],
- ?line {STRes226,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD041.xsd','./msxsdtest/complexType',invalid),
+ {STRes226,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD041.xsd','./msxsdtest/complexType',invalid),
STResList227 = [STRes226|STResList226],
- ?line {STRes227,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD042.xsd','./msxsdtest/complexType',invalid),
+ {STRes227,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD042.xsd','./msxsdtest/complexType',invalid),
STResList228 = [STRes227|STResList227],
- ?line {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD043.xsd','./msxsdtest/complexType',invalid),
+ {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD043.xsd','./msxsdtest/complexType',invalid),
STResList229 = [STRes228|STResList228],
- ?line {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE001.xsd','./msxsdtest/complexType',valid),
+ {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE001.xsd','./msxsdtest/complexType',valid),
STResList230 = [STRes229|STResList229],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE001.xml','./msxsdtest/complexType',valid,S229),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE001.xml','./msxsdtest/complexType',valid,S229),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE002.xsd','./msxsdtest/complexType',valid),
+ {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE002.xsd','./msxsdtest/complexType',valid),
STResList231 = [STRes230|STResList230],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE002.xml','./msxsdtest/complexType',valid,S230),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE002.xml','./msxsdtest/complexType',valid,S230),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE003.xsd','./msxsdtest/complexType',invalid),
+ {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE003.xsd','./msxsdtest/complexType',invalid),
STResList232 = [STRes231|STResList231],
- ?line {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE004.xsd','./msxsdtest/complexType',invalid),
+ {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE004.xsd','./msxsdtest/complexType',invalid),
STResList233 = [STRes232|STResList232],
- ?line {STRes233,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE005.xsd','./msxsdtest/complexType',invalid),
+ {STRes233,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE005.xsd','./msxsdtest/complexType',invalid),
STResList234 = [STRes233|STResList233],
- ?line {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE006.xsd','./msxsdtest/complexType',valid),
+ {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE006.xsd','./msxsdtest/complexType',valid),
STResList235 = [STRes234|STResList234],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE006.xml','./msxsdtest/complexType',valid,S234),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE006.xml','./msxsdtest/complexType',valid,S234),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE007.xsd','./msxsdtest/complexType',valid),
+ {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE007.xsd','./msxsdtest/complexType',valid),
STResList236 = [STRes235|STResList235],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE007.xml','./msxsdtest/complexType',valid,S235),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE007.xml','./msxsdtest/complexType',valid,S235),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE008.xsd','./msxsdtest/complexType',valid),
+ {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE008.xsd','./msxsdtest/complexType',valid),
STResList237 = [STRes236|STResList236],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE008.xml','./msxsdtest/complexType',valid,S236),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE008.xml','./msxsdtest/complexType',valid,S236),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE009.xsd','./msxsdtest/complexType',invalid),
+ {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE009.xsd','./msxsdtest/complexType',invalid),
STResList238 = [STRes237|STResList237],
- ?line {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE010.xsd','./msxsdtest/complexType',valid),
+ {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE010.xsd','./msxsdtest/complexType',valid),
STResList239 = [STRes238|STResList238],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE010.xml','./msxsdtest/complexType',valid,S238),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE010.xml','./msxsdtest/complexType',valid,S238),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE011.xsd','./msxsdtest/complexType',invalid),
+ {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE011.xsd','./msxsdtest/complexType',invalid),
STResList240 = [STRes239|STResList239],
- ?line {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE012.xsd','./msxsdtest/complexType',invalid),
+ {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE012.xsd','./msxsdtest/complexType',invalid),
STResList241 = [STRes240|STResList240],
- ?line {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE013.xsd','./msxsdtest/complexType',invalid),
+ {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE013.xsd','./msxsdtest/complexType',invalid),
STResList242 = [STRes241|STResList241],
- ?line {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE014.xsd','./msxsdtest/complexType',invalid),
+ {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE014.xsd','./msxsdtest/complexType',invalid),
STResList243 = [STRes242|STResList242],
- ?line {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE015.xsd','./msxsdtest/complexType',invalid),
+ {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE015.xsd','./msxsdtest/complexType',invalid),
STResList244 = [STRes243|STResList243],
- ?line {STRes244,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE016.xsd','./msxsdtest/complexType',invalid),
+ {STRes244,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE016.xsd','./msxsdtest/complexType',invalid),
STResList245 = [STRes244|STResList244],
- ?line {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE017.xsd','./msxsdtest/complexType',valid),
+ {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE017.xsd','./msxsdtest/complexType',valid),
STResList246 = [STRes245|STResList245],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE017.xml','./msxsdtest/complexType',valid,S245),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE017.xml','./msxsdtest/complexType',valid,S245),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF001.xsd','./msxsdtest/complexType',valid),
+ {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF001.xsd','./msxsdtest/complexType',valid),
STResList247 = [STRes246|STResList246],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF001.xml','./msxsdtest/complexType',valid,S246),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF001.xml','./msxsdtest/complexType',valid,S246),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF002.xsd','./msxsdtest/complexType',invalid),
+ {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF002.xsd','./msxsdtest/complexType',invalid),
STResList248 = [STRes247|STResList247],
- ?line {STRes248,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF003.xsd','./msxsdtest/complexType',invalid),
+ {STRes248,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF003.xsd','./msxsdtest/complexType',invalid),
STResList249 = [STRes248|STResList248],
- ?line {STRes249,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF004.xsd','./msxsdtest/complexType',invalid),
+ {STRes249,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF004.xsd','./msxsdtest/complexType',invalid),
STResList250 = [STRes249|STResList249],
- ?line {STRes250,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF005.xsd','./msxsdtest/complexType',invalid),
+ {STRes250,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF005.xsd','./msxsdtest/complexType',invalid),
STResList251 = [STRes250|STResList250],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF006.xsd','./msxsdtest/complexType',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF006.xsd','./msxsdtest/complexType',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF006.xml','./msxsdtest/complexType',valid,S251),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF006.xml','./msxsdtest/complexType',valid,S251),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF007.xsd','./msxsdtest/complexType',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF007.xsd','./msxsdtest/complexType',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF007.xml','./msxsdtest/complexType',valid,S252),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF007.xml','./msxsdtest/complexType',valid,S252),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes253,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF008.xsd','./msxsdtest/complexType',invalid),
+ {STRes253,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF008.xsd','./msxsdtest/complexType',invalid),
STResList254 = [STRes253|STResList253],
- ?line {STRes254,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF009.xsd','./msxsdtest/complexType',invalid),
+ {STRes254,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF009.xsd','./msxsdtest/complexType',invalid),
STResList255 = [STRes254|STResList254],
- ?line {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF010.xsd','./msxsdtest/complexType',valid),
+ {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF010.xsd','./msxsdtest/complexType',valid),
STResList256 = [STRes255|STResList255],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF010.xml','./msxsdtest/complexType',valid,S255),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF010.xml','./msxsdtest/complexType',valid,S255),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF011.xsd','./msxsdtest/complexType',valid),
+ {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF011.xsd','./msxsdtest/complexType',valid),
STResList257 = [STRes256|STResList256],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF011.xml','./msxsdtest/complexType',valid,S256),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF011.xml','./msxsdtest/complexType',valid,S256),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes257,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF012.xsd','./msxsdtest/complexType',invalid),
+ {STRes257,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF012.xsd','./msxsdtest/complexType',invalid),
STResList258 = [STRes257|STResList257],
- ?line {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF013.xsd','./msxsdtest/complexType',valid),
+ {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF013.xsd','./msxsdtest/complexType',valid),
STResList259 = [STRes258|STResList258],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF013.xml','./msxsdtest/complexType',valid,S258),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF013.xml','./msxsdtest/complexType',valid,S258),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF014.xsd','./msxsdtest/complexType',valid),
+ {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF014.xsd','./msxsdtest/complexType',valid),
STResList260 = [STRes259|STResList259],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF014.xml','./msxsdtest/complexType',valid,S259),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF014.xml','./msxsdtest/complexType',valid,S259),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes260,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF015.xsd','./msxsdtest/complexType',invalid),
+ {STRes260,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF015.xsd','./msxsdtest/complexType',invalid),
STResList261 = [STRes260|STResList260],
- ?line {STRes261,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF016.xsd','./msxsdtest/complexType',invalid),
+ {STRes261,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF016.xsd','./msxsdtest/complexType',invalid),
STResList262 = [STRes261|STResList261],
- ?line {STRes262,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF017.xsd','./msxsdtest/complexType',invalid),
+ {STRes262,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF017.xsd','./msxsdtest/complexType',invalid),
STResList263 = [STRes262|STResList262],
- ?line {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG001.xsd','./msxsdtest/complexType',valid),
+ {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG001.xsd','./msxsdtest/complexType',valid),
STResList264 = [STRes263|STResList263],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG001.xml','./msxsdtest/complexType',valid,S263),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG001.xml','./msxsdtest/complexType',valid,S263),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes264,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG002.xsd','./msxsdtest/complexType',invalid),
+ {STRes264,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG002.xsd','./msxsdtest/complexType',invalid),
STResList265 = [STRes264|STResList264],
- ?line {STRes265,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG003.xsd','./msxsdtest/complexType',invalid),
+ {STRes265,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG003.xsd','./msxsdtest/complexType',invalid),
STResList266 = [STRes265|STResList265],
- ?line {STRes266,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG004.xsd','./msxsdtest/complexType',invalid),
+ {STRes266,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG004.xsd','./msxsdtest/complexType',invalid),
STResList267 = [STRes266|STResList266],
- ?line {STRes267,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG005.xsd','./msxsdtest/complexType',invalid),
+ {STRes267,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG005.xsd','./msxsdtest/complexType',invalid),
STResList268 = [STRes267|STResList267],
- ?line {STRes268,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG006.xsd','./msxsdtest/complexType',invalid),
+ {STRes268,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG006.xsd','./msxsdtest/complexType',invalid),
STResList269 = [STRes268|STResList268],
- ?line {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG007.xsd','./msxsdtest/complexType',valid),
+ {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG007.xsd','./msxsdtest/complexType',valid),
STResList270 = [STRes269|STResList269],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG007.xml','./msxsdtest/complexType',valid,S269),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG007.xml','./msxsdtest/complexType',valid,S269),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG008.xsd','./msxsdtest/complexType',valid),
+ {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG008.xsd','./msxsdtest/complexType',valid),
STResList271 = [STRes270|STResList270],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG008.xml','./msxsdtest/complexType',valid,S270),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG008.xml','./msxsdtest/complexType',valid,S270),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG009.xsd','./msxsdtest/complexType',valid),
+ {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG009.xsd','./msxsdtest/complexType',valid),
STResList272 = [STRes271|STResList271],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG009.xml','./msxsdtest/complexType',valid,S271),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG009.xml','./msxsdtest/complexType',valid,S271),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG010.xsd','./msxsdtest/complexType',valid),
+ {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG010.xsd','./msxsdtest/complexType',valid),
STResList273 = [STRes272|STResList272],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG010.xml','./msxsdtest/complexType',valid,S272),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG010.xml','./msxsdtest/complexType',valid,S272),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG011.xsd','./msxsdtest/complexType',valid),
+ {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG011.xsd','./msxsdtest/complexType',valid),
STResList274 = [STRes273|STResList273],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG011.xml','./msxsdtest/complexType',valid,S273),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG011.xml','./msxsdtest/complexType',valid,S273),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG012.xsd','./msxsdtest/complexType',invalid),
+ {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG012.xsd','./msxsdtest/complexType',invalid),
STResList275 = [STRes274|STResList274],
- ?line {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG013.xsd','./msxsdtest/complexType',valid),
+ {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG013.xsd','./msxsdtest/complexType',valid),
STResList276 = [STRes275|STResList275],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG013.xml','./msxsdtest/complexType',valid,S275),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG013.xml','./msxsdtest/complexType',valid,S275),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes276,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG014.xsd','./msxsdtest/complexType',invalid),
+ {STRes276,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG014.xsd','./msxsdtest/complexType',invalid),
STResList277 = [STRes276|STResList276],
- ?line {STRes277,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG015.xsd','./msxsdtest/complexType',invalid),
+ {STRes277,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG015.xsd','./msxsdtest/complexType',invalid),
STResList278 = [STRes277|STResList277],
- ?line {STRes278,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG016.xsd','./msxsdtest/complexType',invalid),
+ {STRes278,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG016.xsd','./msxsdtest/complexType',invalid),
STResList279 = [STRes278|STResList278],
- ?line {STRes279,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG017.xsd','./msxsdtest/complexType',invalid),
+ {STRes279,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG017.xsd','./msxsdtest/complexType',invalid),
STResList280 = [STRes279|STResList279],
- ?line {STRes280,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG018.xsd','./msxsdtest/complexType',invalid),
+ {STRes280,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG018.xsd','./msxsdtest/complexType',invalid),
STResList281 = [STRes280|STResList280],
- ?line {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG019.xsd','./msxsdtest/complexType',valid),
+ {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG019.xsd','./msxsdtest/complexType',valid),
STResList282 = [STRes281|STResList281],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG019.xml','./msxsdtest/complexType',valid,S281),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG019.xml','./msxsdtest/complexType',valid,S281),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG020.xsd','./msxsdtest/complexType',valid),
+ {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG020.xsd','./msxsdtest/complexType',valid),
STResList283 = [STRes282|STResList282],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG020.xml','./msxsdtest/complexType',valid,S282),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG020.xml','./msxsdtest/complexType',valid,S282),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG021.xsd','./msxsdtest/complexType',valid),
+ {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG021.xsd','./msxsdtest/complexType',valid),
STResList284 = [STRes283|STResList283],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG021.xml','./msxsdtest/complexType',valid,S283),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG021.xml','./msxsdtest/complexType',valid,S283),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG022.xsd','./msxsdtest/complexType',valid),
+ {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG022.xsd','./msxsdtest/complexType',valid),
STResList285 = [STRes284|STResList284],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG022.xml','./msxsdtest/complexType',valid,S284),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG022.xml','./msxsdtest/complexType',valid,S284),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG023.xsd','./msxsdtest/complexType',valid),
+ {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG023.xsd','./msxsdtest/complexType',valid),
STResList286 = [STRes285|STResList285],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG023.xml','./msxsdtest/complexType',valid,S285),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG023.xml','./msxsdtest/complexType',valid,S285),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes286,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG024.xsd','./msxsdtest/complexType',invalid),
+ {STRes286,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG024.xsd','./msxsdtest/complexType',invalid),
STResList287 = [STRes286|STResList286],
- ?line {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG025.xsd','./msxsdtest/complexType',valid),
+ {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG025.xsd','./msxsdtest/complexType',valid),
STResList288 = [STRes287|STResList287],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG025.xml','./msxsdtest/complexType',valid,S287),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG025.xml','./msxsdtest/complexType',valid,S287),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes288,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG026.xsd','./msxsdtest/complexType',invalid),
+ {STRes288,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG026.xsd','./msxsdtest/complexType',invalid),
STResList289 = [STRes288|STResList288],
- ?line {STRes289,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG027.xsd','./msxsdtest/complexType',invalid),
+ {STRes289,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG027.xsd','./msxsdtest/complexType',invalid),
STResList290 = [STRes289|STResList289],
- ?line {STRes290,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG028.xsd','./msxsdtest/complexType',invalid),
+ {STRes290,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG028.xsd','./msxsdtest/complexType',invalid),
STResList291 = [STRes290|STResList290],
- ?line {STRes291,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG029.xsd','./msxsdtest/complexType',invalid),
+ {STRes291,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG029.xsd','./msxsdtest/complexType',invalid),
STResList292 = [STRes291|STResList291],
- ?line {STRes292,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG030.xsd','./msxsdtest/complexType',invalid),
+ {STRes292,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG030.xsd','./msxsdtest/complexType',invalid),
STResList293 = [STRes292|STResList292],
- ?line {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG031.xsd','./msxsdtest/complexType',valid),
+ {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG031.xsd','./msxsdtest/complexType',valid),
STResList294 = [STRes293|STResList293],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG031.xml','./msxsdtest/complexType',valid,S293),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG031.xml','./msxsdtest/complexType',valid,S293),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG032.xsd','./msxsdtest/complexType',valid),
+ {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG032.xsd','./msxsdtest/complexType',valid),
STResList295 = [STRes294|STResList294],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG032.xml','./msxsdtest/complexType',valid,S294),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG032.xml','./msxsdtest/complexType',valid,S294),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG033.xsd','./msxsdtest/complexType',valid),
+ {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG033.xsd','./msxsdtest/complexType',valid),
STResList296 = [STRes295|STResList295],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG033.xml','./msxsdtest/complexType',valid,S295),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG033.xml','./msxsdtest/complexType',valid,S295),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG034.xsd','./msxsdtest/complexType',valid),
+ {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG034.xsd','./msxsdtest/complexType',valid),
STResList297 = [STRes296|STResList296],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG034.xml','./msxsdtest/complexType',valid,S296),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG034.xml','./msxsdtest/complexType',valid,S296),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG035.xsd','./msxsdtest/complexType',valid),
+ {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG035.xsd','./msxsdtest/complexType',valid),
STResList298 = [STRes297|STResList297],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG035.xml','./msxsdtest/complexType',valid,S297),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG035.xml','./msxsdtest/complexType',valid,S297),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes298,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG036.xsd','./msxsdtest/complexType',invalid),
+ {STRes298,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG036.xsd','./msxsdtest/complexType',invalid),
STResList299 = [STRes298|STResList298],
- ?line {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG037.xsd','./msxsdtest/complexType',valid),
+ {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG037.xsd','./msxsdtest/complexType',valid),
STResList300 = [STRes299|STResList299],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG037.xml','./msxsdtest/complexType',valid,S299),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG037.xml','./msxsdtest/complexType',valid,S299),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes300,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG038.xsd','./msxsdtest/complexType',invalid),
+ {STRes300,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG038.xsd','./msxsdtest/complexType',invalid),
STResList301 = [STRes300|STResList300],
- ?line {STRes301,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG039.xsd','./msxsdtest/complexType',invalid),
+ {STRes301,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG039.xsd','./msxsdtest/complexType',invalid),
STResList302 = [STRes301|STResList301],
- ?line {STRes302,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG040.xsd','./msxsdtest/complexType',invalid),
+ {STRes302,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG040.xsd','./msxsdtest/complexType',invalid),
STResList303 = [STRes302|STResList302],
- ?line {STRes303,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG041.xsd','./msxsdtest/complexType',invalid),
+ {STRes303,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG041.xsd','./msxsdtest/complexType',invalid),
STResList304 = [STRes303|STResList303],
- ?line {STRes304,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG042.xsd','./msxsdtest/complexType',invalid),
+ {STRes304,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG042.xsd','./msxsdtest/complexType',invalid),
STResList305 = [STRes304|STResList304],
- ?line {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG043.xsd','./msxsdtest/complexType',valid),
+ {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG043.xsd','./msxsdtest/complexType',valid),
STResList306 = [STRes305|STResList305],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG043.xml','./msxsdtest/complexType',valid,S305),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG043.xml','./msxsdtest/complexType',valid,S305),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG044.xsd','./msxsdtest/complexType',valid),
+ {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG044.xsd','./msxsdtest/complexType',valid),
STResList307 = [STRes306|STResList306],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG044.xml','./msxsdtest/complexType',valid,S306),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG044.xml','./msxsdtest/complexType',valid,S306),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG045.xsd','./msxsdtest/complexType',valid),
+ {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG045.xsd','./msxsdtest/complexType',valid),
STResList308 = [STRes307|STResList307],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG045.xml','./msxsdtest/complexType',valid,S307),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG045.xml','./msxsdtest/complexType',valid,S307),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG046.xsd','./msxsdtest/complexType',valid),
+ {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG046.xsd','./msxsdtest/complexType',valid),
STResList309 = [STRes308|STResList308],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG046.xml','./msxsdtest/complexType',valid,S308),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG046.xml','./msxsdtest/complexType',valid,S308),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG047.xsd','./msxsdtest/complexType',valid),
+ {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG047.xsd','./msxsdtest/complexType',valid),
STResList310 = [STRes309|STResList309],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG047.xml','./msxsdtest/complexType',valid,S309),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG047.xml','./msxsdtest/complexType',valid,S309),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes310,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG048.xsd','./msxsdtest/complexType',invalid),
+ {STRes310,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG048.xsd','./msxsdtest/complexType',invalid),
STResList311 = [STRes310|STResList310],
- ?line {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG049.xsd','./msxsdtest/complexType',valid),
+ {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG049.xsd','./msxsdtest/complexType',valid),
STResList312 = [STRes311|STResList311],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG049.xml','./msxsdtest/complexType',valid,S311),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG049.xml','./msxsdtest/complexType',valid,S311),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes312,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG050.xsd','./msxsdtest/complexType',invalid),
+ {STRes312,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG050.xsd','./msxsdtest/complexType',invalid),
STResList313 = [STRes312|STResList312],
- ?line {STRes313,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG051.xsd','./msxsdtest/complexType',invalid),
+ {STRes313,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG051.xsd','./msxsdtest/complexType',invalid),
STResList314 = [STRes313|STResList313],
- ?line {STRes314,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG052.xsd','./msxsdtest/complexType',invalid),
+ {STRes314,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG052.xsd','./msxsdtest/complexType',invalid),
STResList315 = [STRes314|STResList314],
- ?line {STRes315,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG053.xsd','./msxsdtest/complexType',invalid),
+ {STRes315,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG053.xsd','./msxsdtest/complexType',invalid),
STResList316 = [STRes315|STResList315],
- ?line {STRes316,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG054.xsd','./msxsdtest/complexType',invalid),
+ {STRes316,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG054.xsd','./msxsdtest/complexType',invalid),
STResList317 = [STRes316|STResList316],
- ?line {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG055.xsd','./msxsdtest/complexType',valid),
+ {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG055.xsd','./msxsdtest/complexType',valid),
STResList318 = [STRes317|STResList317],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG055.xml','./msxsdtest/complexType',valid,S317),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG055.xml','./msxsdtest/complexType',valid,S317),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG056.xsd','./msxsdtest/complexType',valid),
+ {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG056.xsd','./msxsdtest/complexType',valid),
STResList319 = [STRes318|STResList318],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG056.xml','./msxsdtest/complexType',valid,S318),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG056.xml','./msxsdtest/complexType',valid,S318),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG057.xsd','./msxsdtest/complexType',valid),
+ {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG057.xsd','./msxsdtest/complexType',valid),
STResList320 = [STRes319|STResList319],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG057.xml','./msxsdtest/complexType',valid,S319),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG057.xml','./msxsdtest/complexType',valid,S319),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG058.xsd','./msxsdtest/complexType',valid),
+ {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG058.xsd','./msxsdtest/complexType',valid),
STResList321 = [STRes320|STResList320],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG058.xml','./msxsdtest/complexType',valid,S320),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG058.xml','./msxsdtest/complexType',valid,S320),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG059.xsd','./msxsdtest/complexType',invalid),
+ {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG059.xsd','./msxsdtest/complexType',invalid),
STResList322 = [STRes321|STResList321],
- ?line {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG060.xsd','./msxsdtest/complexType',valid),
+ {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG060.xsd','./msxsdtest/complexType',valid),
STResList323 = [STRes322|STResList322],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG060.xml','./msxsdtest/complexType',valid,S322),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG060.xml','./msxsdtest/complexType',valid,S322),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG061.xsd','./msxsdtest/complexType',invalid),
+ {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG061.xsd','./msxsdtest/complexType',invalid),
STResList324 = [STRes323|STResList323],
- ?line {STRes324,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG062.xsd','./msxsdtest/complexType',invalid),
+ {STRes324,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG062.xsd','./msxsdtest/complexType',invalid),
STResList325 = [STRes324|STResList324],
- ?line {STRes325,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG063.xsd','./msxsdtest/complexType',invalid),
+ {STRes325,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG063.xsd','./msxsdtest/complexType',invalid),
STResList326 = [STRes325|STResList325],
- ?line {STRes326,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG064.xsd','./msxsdtest/complexType',invalid),
+ {STRes326,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG064.xsd','./msxsdtest/complexType',invalid),
STResList327 = [STRes326|STResList326],
- ?line {STRes327,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG065.xsd','./msxsdtest/complexType',invalid),
+ {STRes327,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG065.xsd','./msxsdtest/complexType',invalid),
STResList328 = [STRes327|STResList327],
- ?line {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG066.xsd','./msxsdtest/complexType',valid),
+ {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG066.xsd','./msxsdtest/complexType',valid),
STResList329 = [STRes328|STResList328],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG066.xml','./msxsdtest/complexType',valid,S328),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG066.xml','./msxsdtest/complexType',valid,S328),
ITResList140 = [ITRes139|ITResList139],
- ?line {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG067.xsd','./msxsdtest/complexType',valid),
+ {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG067.xsd','./msxsdtest/complexType',valid),
STResList330 = [STRes329|STResList329],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG067.xml','./msxsdtest/complexType',valid,S329),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG067.xml','./msxsdtest/complexType',valid,S329),
ITResList141 = [ITRes140|ITResList140],
- ?line {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG068.xsd','./msxsdtest/complexType',valid),
+ {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG068.xsd','./msxsdtest/complexType',valid),
STResList331 = [STRes330|STResList330],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG068.xml','./msxsdtest/complexType',valid,S330),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG068.xml','./msxsdtest/complexType',valid,S330),
ITResList142 = [ITRes141|ITResList141],
- ?line {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG069.xsd','./msxsdtest/complexType',valid),
+ {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG069.xsd','./msxsdtest/complexType',valid),
STResList332 = [STRes331|STResList331],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG069.xml','./msxsdtest/complexType',valid,S331),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG069.xml','./msxsdtest/complexType',valid,S331),
ITResList143 = [ITRes142|ITResList142],
- ?line {STRes332,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG070.xsd','./msxsdtest/complexType',invalid),
+ {STRes332,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG070.xsd','./msxsdtest/complexType',invalid),
STResList333 = [STRes332|STResList332],
- ?line {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG071.xsd','./msxsdtest/complexType',valid),
+ {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG071.xsd','./msxsdtest/complexType',valid),
STResList334 = [STRes333|STResList333],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG071.xml','./msxsdtest/complexType',valid,S333),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG071.xml','./msxsdtest/complexType',valid,S333),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes334,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG072.xsd','./msxsdtest/complexType',invalid),
+ {STRes334,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG072.xsd','./msxsdtest/complexType',invalid),
STResList335 = [STRes334|STResList334],
- ?line {STRes335,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG073.xsd','./msxsdtest/complexType',invalid),
+ {STRes335,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG073.xsd','./msxsdtest/complexType',invalid),
STResList336 = [STRes335|STResList335],
- ?line {STRes336,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG074.xsd','./msxsdtest/complexType',invalid),
+ {STRes336,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG074.xsd','./msxsdtest/complexType',invalid),
STResList337 = [STRes336|STResList336],
- ?line {STRes337,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG075.xsd','./msxsdtest/complexType',invalid),
+ {STRes337,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG075.xsd','./msxsdtest/complexType',invalid),
STResList338 = [STRes337|STResList337],
- ?line {STRes338,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG076.xsd','./msxsdtest/complexType',invalid),
+ {STRes338,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG076.xsd','./msxsdtest/complexType',invalid),
STResList339 = [STRes338|STResList338],
- ?line {STRes339,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG077.xsd','./msxsdtest/complexType',invalid),
+ {STRes339,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG077.xsd','./msxsdtest/complexType',invalid),
STResList340 = [STRes339|STResList339],
- ?line {STRes340,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG078.xsd','./msxsdtest/complexType',invalid),
+ {STRes340,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG078.xsd','./msxsdtest/complexType',invalid),
STResList341 = [STRes340|STResList340],
- ?line {STRes341,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG079.xsd','./msxsdtest/complexType',invalid),
+ {STRes341,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG079.xsd','./msxsdtest/complexType',invalid),
STResList342 = [STRes341|STResList341],
- ?line {STRes342,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG080.xsd','./msxsdtest/complexType',invalid),
+ {STRes342,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG080.xsd','./msxsdtest/complexType',invalid),
STResList343 = [STRes342|STResList342],
- ?line {STRes343,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG081.xsd','./msxsdtest/complexType',invalid),
+ {STRes343,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG081.xsd','./msxsdtest/complexType',invalid),
STResList344 = [STRes343|STResList343],
- ?line {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH001.xsd','./msxsdtest/complexType',valid),
+ {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH001.xsd','./msxsdtest/complexType',valid),
STResList345 = [STRes344|STResList344],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH001.xml','./msxsdtest/complexType',valid,S344),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH001.xml','./msxsdtest/complexType',valid,S344),
ITResList145 = [ITRes144|ITResList144],
- ?line {STRes345,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH002.xsd','./msxsdtest/complexType',invalid),
+ {STRes345,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH002.xsd','./msxsdtest/complexType',invalid),
STResList346 = [STRes345|STResList345],
- ?line {STRes346,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH003.xsd','./msxsdtest/complexType',invalid),
+ {STRes346,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH003.xsd','./msxsdtest/complexType',invalid),
STResList347 = [STRes346|STResList346],
- ?line {STRes347,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH004.xsd','./msxsdtest/complexType',invalid),
+ {STRes347,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH004.xsd','./msxsdtest/complexType',invalid),
STResList348 = [STRes347|STResList347],
- ?line {STRes348,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH005.xsd','./msxsdtest/complexType',invalid),
+ {STRes348,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH005.xsd','./msxsdtest/complexType',invalid),
STResList349 = [STRes348|STResList348],
- ?line {STRes349,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH006.xsd','./msxsdtest/complexType',invalid),
+ {STRes349,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH006.xsd','./msxsdtest/complexType',invalid),
STResList350 = [STRes349|STResList349],
- ?line {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH007.xsd','./msxsdtest/complexType',valid),
+ {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH007.xsd','./msxsdtest/complexType',valid),
STResList351 = [STRes350|STResList350],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH007.xml','./msxsdtest/complexType',valid,S350),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH007.xml','./msxsdtest/complexType',valid,S350),
ITResList146 = [ITRes145|ITResList145],
- ?line {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH008.xsd','./msxsdtest/complexType',valid),
+ {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH008.xsd','./msxsdtest/complexType',valid),
STResList352 = [STRes351|STResList351],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH008.xml','./msxsdtest/complexType',valid,S351),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH008.xml','./msxsdtest/complexType',valid,S351),
ITResList147 = [ITRes146|ITResList146],
- ?line {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH009.xsd','./msxsdtest/complexType',valid),
+ {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH009.xsd','./msxsdtest/complexType',valid),
STResList353 = [STRes352|STResList352],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH009.xml','./msxsdtest/complexType',valid,S352),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH009.xml','./msxsdtest/complexType',valid,S352),
ITResList148 = [ITRes147|ITResList147],
- ?line {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH010.xsd','./msxsdtest/complexType',valid),
+ {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH010.xsd','./msxsdtest/complexType',valid),
STResList354 = [STRes353|STResList353],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH010.xml','./msxsdtest/complexType',valid,S353),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH010.xml','./msxsdtest/complexType',valid,S353),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH011.xsd','./msxsdtest/complexType',valid),
+ {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH011.xsd','./msxsdtest/complexType',valid),
STResList355 = [STRes354|STResList354],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH011.xml','./msxsdtest/complexType',valid,S354),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH011.xml','./msxsdtest/complexType',valid,S354),
ITResList150 = [ITRes149|ITResList149],
- ?line {STRes355,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH012.xsd','./msxsdtest/complexType',invalid),
+ {STRes355,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH012.xsd','./msxsdtest/complexType',invalid),
STResList356 = [STRes355|STResList355],
- ?line {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH013.xsd','./msxsdtest/complexType',valid),
+ {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH013.xsd','./msxsdtest/complexType',valid),
STResList357 = [STRes356|STResList356],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH013.xml','./msxsdtest/complexType',valid,S356),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH013.xml','./msxsdtest/complexType',valid,S356),
ITResList151 = [ITRes150|ITResList150],
- ?line {STRes357,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH014.xsd','./msxsdtest/complexType',invalid),
+ {STRes357,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH014.xsd','./msxsdtest/complexType',invalid),
STResList358 = [STRes357|STResList357],
- ?line {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH015.xsd','./msxsdtest/complexType',invalid),
+ {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH015.xsd','./msxsdtest/complexType',invalid),
STResList359 = [STRes358|STResList358],
- ?line {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH016.xsd','./msxsdtest/complexType',invalid),
+ {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH016.xsd','./msxsdtest/complexType',invalid),
STResList360 = [STRes359|STResList359],
- ?line {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH017.xsd','./msxsdtest/complexType',invalid),
+ {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH017.xsd','./msxsdtest/complexType',invalid),
STResList361 = [STRes360|STResList360],
- ?line {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH018.xsd','./msxsdtest/complexType',invalid),
+ {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH018.xsd','./msxsdtest/complexType',invalid),
STResList362 = [STRes361|STResList361],
- ?line {STRes362,S362} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH019.xsd','./msxsdtest/complexType',valid),
+ {STRes362,S362} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH019.xsd','./msxsdtest/complexType',valid),
STResList363 = [STRes362|STResList362],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH019.xml','./msxsdtest/complexType',valid,S362),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH019.xml','./msxsdtest/complexType',valid,S362),
ITResList152 = [ITRes151|ITResList151],
- ?line {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH020.xsd','./msxsdtest/complexType',valid),
+ {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH020.xsd','./msxsdtest/complexType',valid),
STResList364 = [STRes363|STResList363],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH020.xml','./msxsdtest/complexType',valid,S363),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH020.xml','./msxsdtest/complexType',valid,S363),
ITResList153 = [ITRes152|ITResList152],
- ?line {STRes364,S364} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH021.xsd','./msxsdtest/complexType',valid),
+ {STRes364,S364} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH021.xsd','./msxsdtest/complexType',valid),
STResList365 = [STRes364|STResList364],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH021.xml','./msxsdtest/complexType',valid,S364),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH021.xml','./msxsdtest/complexType',valid,S364),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes365,S365} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH022.xsd','./msxsdtest/complexType',valid),
+ {STRes365,S365} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH022.xsd','./msxsdtest/complexType',valid),
STResList366 = [STRes365|STResList365],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH022.xml','./msxsdtest/complexType',valid,S365),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH022.xml','./msxsdtest/complexType',valid,S365),
ITResList155 = [ITRes154|ITResList154],
- ?line {STRes366,S366} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH023.xsd','./msxsdtest/complexType',valid),
+ {STRes366,S366} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH023.xsd','./msxsdtest/complexType',valid),
STResList367 = [STRes366|STResList366],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH023.xml','./msxsdtest/complexType',valid,S366),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH023.xml','./msxsdtest/complexType',valid,S366),
ITResList156 = [ITRes155|ITResList155],
- ?line {STRes367,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH024.xsd','./msxsdtest/complexType',invalid),
+ {STRes367,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH024.xsd','./msxsdtest/complexType',invalid),
STResList368 = [STRes367|STResList367],
- ?line {STRes368,S368} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH025.xsd','./msxsdtest/complexType',valid),
+ {STRes368,S368} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH025.xsd','./msxsdtest/complexType',valid),
STResList369 = [STRes368|STResList368],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH025.xml','./msxsdtest/complexType',valid,S368),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH025.xml','./msxsdtest/complexType',valid,S368),
ITResList157 = [ITRes156|ITResList156],
- ?line {STRes369,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH026.xsd','./msxsdtest/complexType',invalid),
+ {STRes369,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH026.xsd','./msxsdtest/complexType',invalid),
STResList370 = [STRes369|STResList369],
- ?line {STRes370,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH027.xsd','./msxsdtest/complexType',invalid),
+ {STRes370,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH027.xsd','./msxsdtest/complexType',invalid),
STResList371 = [STRes370|STResList370],
- ?line {STRes371,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH028.xsd','./msxsdtest/complexType',invalid),
+ {STRes371,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH028.xsd','./msxsdtest/complexType',invalid),
STResList372 = [STRes371|STResList371],
- ?line {STRes372,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH029.xsd','./msxsdtest/complexType',invalid),
+ {STRes372,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH029.xsd','./msxsdtest/complexType',invalid),
STResList373 = [STRes372|STResList372],
- ?line {STRes373,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH030.xsd','./msxsdtest/complexType',invalid),
+ {STRes373,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH030.xsd','./msxsdtest/complexType',invalid),
STResList374 = [STRes373|STResList373],
- ?line {STRes374,S374} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH031.xsd','./msxsdtest/complexType',valid),
+ {STRes374,S374} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH031.xsd','./msxsdtest/complexType',valid),
STResList375 = [STRes374|STResList374],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH031.xml','./msxsdtest/complexType',valid,S374),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH031.xml','./msxsdtest/complexType',valid,S374),
ITResList158 = [ITRes157|ITResList157],
- ?line {STRes375,S375} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH032.xsd','./msxsdtest/complexType',valid),
+ {STRes375,S375} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH032.xsd','./msxsdtest/complexType',valid),
STResList376 = [STRes375|STResList375],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH032.xml','./msxsdtest/complexType',valid,S375),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH032.xml','./msxsdtest/complexType',valid,S375),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes376,S376} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH033.xsd','./msxsdtest/complexType',valid),
+ {STRes376,S376} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH033.xsd','./msxsdtest/complexType',valid),
STResList377 = [STRes376|STResList376],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH033.xml','./msxsdtest/complexType',valid,S376),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH033.xml','./msxsdtest/complexType',valid,S376),
ITResList160 = [ITRes159|ITResList159],
- ?line {STRes377,S377} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH034.xsd','./msxsdtest/complexType',valid),
+ {STRes377,S377} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH034.xsd','./msxsdtest/complexType',valid),
STResList378 = [STRes377|STResList377],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH034.xml','./msxsdtest/complexType',valid,S377),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH034.xml','./msxsdtest/complexType',valid,S377),
ITResList161 = [ITRes160|ITResList160],
- ?line {STRes378,S378} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH035.xsd','./msxsdtest/complexType',valid),
+ {STRes378,S378} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH035.xsd','./msxsdtest/complexType',valid),
STResList379 = [STRes378|STResList378],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH035.xml','./msxsdtest/complexType',valid,S378),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH035.xml','./msxsdtest/complexType',valid,S378),
ITResList162 = [ITRes161|ITResList161],
- ?line {STRes379,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH036.xsd','./msxsdtest/complexType',invalid),
+ {STRes379,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH036.xsd','./msxsdtest/complexType',invalid),
STResList380 = [STRes379|STResList379],
- ?line {STRes380,S380} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH037.xsd','./msxsdtest/complexType',valid),
+ {STRes380,S380} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH037.xsd','./msxsdtest/complexType',valid),
STResList381 = [STRes380|STResList380],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH037.xml','./msxsdtest/complexType',valid,S380),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH037.xml','./msxsdtest/complexType',valid,S380),
ITResList163 = [ITRes162|ITResList162],
- ?line {STRes381,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH038.xsd','./msxsdtest/complexType',invalid),
+ {STRes381,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH038.xsd','./msxsdtest/complexType',invalid),
STResList382 = [STRes381|STResList381],
- ?line {STRes382,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH039.xsd','./msxsdtest/complexType',invalid),
+ {STRes382,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH039.xsd','./msxsdtest/complexType',invalid),
STResList383 = [STRes382|STResList382],
- ?line {STRes383,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH040.xsd','./msxsdtest/complexType',invalid),
+ {STRes383,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH040.xsd','./msxsdtest/complexType',invalid),
STResList384 = [STRes383|STResList383],
- ?line {STRes384,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH041.xsd','./msxsdtest/complexType',invalid),
+ {STRes384,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH041.xsd','./msxsdtest/complexType',invalid),
STResList385 = [STRes384|STResList384],
- ?line {STRes385,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH042.xsd','./msxsdtest/complexType',invalid),
+ {STRes385,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH042.xsd','./msxsdtest/complexType',invalid),
STResList386 = [STRes385|STResList385],
- ?line {STRes386,S386} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH043.xsd','./msxsdtest/complexType',valid),
+ {STRes386,S386} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH043.xsd','./msxsdtest/complexType',valid),
STResList387 = [STRes386|STResList386],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH043.xml','./msxsdtest/complexType',valid,S386),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH043.xml','./msxsdtest/complexType',valid,S386),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes387,S387} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH044.xsd','./msxsdtest/complexType',valid),
+ {STRes387,S387} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH044.xsd','./msxsdtest/complexType',valid),
STResList388 = [STRes387|STResList387],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH044.xml','./msxsdtest/complexType',valid,S387),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH044.xml','./msxsdtest/complexType',valid,S387),
ITResList165 = [ITRes164|ITResList164],
- ?line {STRes388,S388} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH045.xsd','./msxsdtest/complexType',valid),
+ {STRes388,S388} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH045.xsd','./msxsdtest/complexType',valid),
STResList389 = [STRes388|STResList388],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH045.xml','./msxsdtest/complexType',valid,S388),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH045.xml','./msxsdtest/complexType',valid,S388),
ITResList166 = [ITRes165|ITResList165],
- ?line {STRes389,S389} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH046.xsd','./msxsdtest/complexType',valid),
+ {STRes389,S389} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH046.xsd','./msxsdtest/complexType',valid),
STResList390 = [STRes389|STResList389],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH046.xml','./msxsdtest/complexType',valid,S389),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH046.xml','./msxsdtest/complexType',valid,S389),
ITResList167 = [ITRes166|ITResList166],
- ?line {STRes390,S390} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH047.xsd','./msxsdtest/complexType',valid),
+ {STRes390,S390} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH047.xsd','./msxsdtest/complexType',valid),
STResList391 = [STRes390|STResList390],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH047.xml','./msxsdtest/complexType',valid,S390),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH047.xml','./msxsdtest/complexType',valid,S390),
ITResList168 = [ITRes167|ITResList167],
- ?line {STRes391,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH048.xsd','./msxsdtest/complexType',invalid),
+ {STRes391,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH048.xsd','./msxsdtest/complexType',invalid),
STResList392 = [STRes391|STResList391],
- ?line {STRes392,S392} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH049.xsd','./msxsdtest/complexType',valid),
+ {STRes392,S392} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH049.xsd','./msxsdtest/complexType',valid),
STResList393 = [STRes392|STResList392],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH049.xml','./msxsdtest/complexType',valid,S392),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH049.xml','./msxsdtest/complexType',valid,S392),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes393,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH050.xsd','./msxsdtest/complexType',invalid),
+ {STRes393,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH050.xsd','./msxsdtest/complexType',invalid),
STResList394 = [STRes393|STResList393],
- ?line {STRes394,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH051.xsd','./msxsdtest/complexType',invalid),
+ {STRes394,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH051.xsd','./msxsdtest/complexType',invalid),
STResList395 = [STRes394|STResList394],
- ?line {STRes395,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH052.xsd','./msxsdtest/complexType',invalid),
+ {STRes395,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH052.xsd','./msxsdtest/complexType',invalid),
STResList396 = [STRes395|STResList395],
- ?line {STRes396,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH053.xsd','./msxsdtest/complexType',invalid),
+ {STRes396,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH053.xsd','./msxsdtest/complexType',invalid),
STResList397 = [STRes396|STResList396],
- ?line {STRes397,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH054.xsd','./msxsdtest/complexType',invalid),
+ {STRes397,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH054.xsd','./msxsdtest/complexType',invalid),
STResList398 = [STRes397|STResList397],
- ?line {STRes398,S398} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH055.xsd','./msxsdtest/complexType',valid),
+ {STRes398,S398} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH055.xsd','./msxsdtest/complexType',valid),
STResList399 = [STRes398|STResList398],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH055.xml','./msxsdtest/complexType',valid,S398),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH055.xml','./msxsdtest/complexType',valid,S398),
ITResList170 = [ITRes169|ITResList169],
- ?line {STRes399,S399} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH056.xsd','./msxsdtest/complexType',valid),
+ {STRes399,S399} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH056.xsd','./msxsdtest/complexType',valid),
STResList400 = [STRes399|STResList399],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH056.xml','./msxsdtest/complexType',valid,S399),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH056.xml','./msxsdtest/complexType',valid,S399),
ITResList171 = [ITRes170|ITResList170],
- ?line {STRes400,S400} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH057.xsd','./msxsdtest/complexType',valid),
+ {STRes400,S400} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH057.xsd','./msxsdtest/complexType',valid),
STResList401 = [STRes400|STResList400],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH057.xml','./msxsdtest/complexType',valid,S400),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH057.xml','./msxsdtest/complexType',valid,S400),
ITResList172 = [ITRes171|ITResList171],
- ?line {STRes401,S401} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH058.xsd','./msxsdtest/complexType',valid),
+ {STRes401,S401} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH058.xsd','./msxsdtest/complexType',valid),
STResList402 = [STRes401|STResList401],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH058.xml','./msxsdtest/complexType',valid,S401),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH058.xml','./msxsdtest/complexType',valid,S401),
ITResList173 = [ITRes172|ITResList172],
- ?line {STRes402,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH059.xsd','./msxsdtest/complexType',invalid),
+ {STRes402,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH059.xsd','./msxsdtest/complexType',invalid),
STResList403 = [STRes402|STResList402],
- ?line {STRes403,S403} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH060.xsd','./msxsdtest/complexType',valid),
+ {STRes403,S403} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH060.xsd','./msxsdtest/complexType',valid),
STResList404 = [STRes403|STResList403],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH060.xml','./msxsdtest/complexType',valid,S403),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH060.xml','./msxsdtest/complexType',valid,S403),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes404,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH061.xsd','./msxsdtest/complexType',invalid),
+ {STRes404,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH061.xsd','./msxsdtest/complexType',invalid),
STResList405 = [STRes404|STResList404],
- ?line {STRes405,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH062.xsd','./msxsdtest/complexType',invalid),
+ {STRes405,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH062.xsd','./msxsdtest/complexType',invalid),
STResList406 = [STRes405|STResList405],
- ?line {STRes406,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH063.xsd','./msxsdtest/complexType',invalid),
+ {STRes406,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH063.xsd','./msxsdtest/complexType',invalid),
STResList407 = [STRes406|STResList406],
- ?line {STRes407,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH064.xsd','./msxsdtest/complexType',invalid),
+ {STRes407,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH064.xsd','./msxsdtest/complexType',invalid),
STResList408 = [STRes407|STResList407],
- ?line {STRes408,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH065.xsd','./msxsdtest/complexType',invalid),
+ {STRes408,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH065.xsd','./msxsdtest/complexType',invalid),
STResList409 = [STRes408|STResList408],
- ?line {STRes409,S409} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH066.xsd','./msxsdtest/complexType',valid),
+ {STRes409,S409} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH066.xsd','./msxsdtest/complexType',valid),
STResList410 = [STRes409|STResList409],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH066.xml','./msxsdtest/complexType',valid,S409),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH066.xml','./msxsdtest/complexType',valid,S409),
ITResList175 = [ITRes174|ITResList174],
- ?line {STRes410,S410} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH067.xsd','./msxsdtest/complexType',valid),
+ {STRes410,S410} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH067.xsd','./msxsdtest/complexType',valid),
STResList411 = [STRes410|STResList410],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH067.xml','./msxsdtest/complexType',valid,S410),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH067.xml','./msxsdtest/complexType',valid,S410),
ITResList176 = [ITRes175|ITResList175],
- ?line {STRes411,S411} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH068.xsd','./msxsdtest/complexType',valid),
+ {STRes411,S411} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH068.xsd','./msxsdtest/complexType',valid),
STResList412 = [STRes411|STResList411],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH068.xml','./msxsdtest/complexType',valid,S411),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH068.xml','./msxsdtest/complexType',valid,S411),
ITResList177 = [ITRes176|ITResList176],
- ?line {STRes412,S412} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH069.xsd','./msxsdtest/complexType',valid),
+ {STRes412,S412} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH069.xsd','./msxsdtest/complexType',valid),
STResList413 = [STRes412|STResList412],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH069.xml','./msxsdtest/complexType',valid,S412),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH069.xml','./msxsdtest/complexType',valid,S412),
ITResList178 = [ITRes177|ITResList177],
- ?line {STRes413,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH070.xsd','./msxsdtest/complexType',invalid),
+ {STRes413,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH070.xsd','./msxsdtest/complexType',invalid),
STResList414 = [STRes413|STResList413],
- ?line {STRes414,S414} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH071.xsd','./msxsdtest/complexType',valid),
+ {STRes414,S414} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH071.xsd','./msxsdtest/complexType',valid),
STResList415 = [STRes414|STResList414],
- ?line ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH071.xml','./msxsdtest/complexType',valid,S414),
+ ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH071.xml','./msxsdtest/complexType',valid,S414),
ITResList179 = [ITRes178|ITResList178],
- ?line {STRes415,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH072.xsd','./msxsdtest/complexType',invalid),
+ {STRes415,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH072.xsd','./msxsdtest/complexType',invalid),
STResList416 = [STRes415|STResList415],
- ?line {STRes416,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH073.xsd','./msxsdtest/complexType',invalid),
+ {STRes416,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH073.xsd','./msxsdtest/complexType',invalid),
STResList417 = [STRes416|STResList416],
- ?line {STRes417,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH074.xsd','./msxsdtest/complexType',invalid),
+ {STRes417,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH074.xsd','./msxsdtest/complexType',invalid),
STResList418 = [STRes417|STResList417],
- ?line {STRes418,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH075.xsd','./msxsdtest/complexType',invalid),
+ {STRes418,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH075.xsd','./msxsdtest/complexType',invalid),
STResList419 = [STRes418|STResList418],
- ?line {STRes419,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH076.xsd','./msxsdtest/complexType',invalid),
+ {STRes419,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH076.xsd','./msxsdtest/complexType',invalid),
STResList420 = [STRes419|STResList419],
- ?line {STRes420,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH077.xsd','./msxsdtest/complexType',invalid),
+ {STRes420,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH077.xsd','./msxsdtest/complexType',invalid),
STResList421 = [STRes420|STResList420],
- ?line {STRes421,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH078.xsd','./msxsdtest/complexType',invalid),
+ {STRes421,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH078.xsd','./msxsdtest/complexType',invalid),
STResList422 = [STRes421|STResList421],
- ?line {STRes422,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH079.xsd','./msxsdtest/complexType',invalid),
+ {STRes422,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH079.xsd','./msxsdtest/complexType',invalid),
STResList423 = [STRes422|STResList422],
- ?line {STRes423,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH080.xsd','./msxsdtest/complexType',invalid),
+ {STRes423,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH080.xsd','./msxsdtest/complexType',invalid),
STResList424 = [STRes423|STResList423],
- ?line {STRes424,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH081.xsd','./msxsdtest/complexType',invalid),
+ {STRes424,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH081.xsd','./msxsdtest/complexType',invalid),
STResList425 = [STRes424|STResList424],
- ?line {STRes425,S425} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH082.xsd','./msxsdtest/complexType',valid),
+ {STRes425,S425} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH082.xsd','./msxsdtest/complexType',valid),
STResList426 = [STRes425|STResList425],
- ?line ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH082.xml','./msxsdtest/complexType',valid,S425),
+ ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH082.xml','./msxsdtest/complexType',valid,S425),
ITResList180 = [ITRes179|ITResList179],
- ?line {STRes426,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI001.xsd','./msxsdtest/complexType',invalid),
+ {STRes426,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI001.xsd','./msxsdtest/complexType',invalid),
STResList427 = [STRes426|STResList426],
- ?line {STRes427,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI002.xsd','./msxsdtest/complexType',invalid),
+ {STRes427,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI002.xsd','./msxsdtest/complexType',invalid),
STResList428 = [STRes427|STResList427],
- ?line {STRes428,S428} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI003.xsd','./msxsdtest/complexType',valid),
+ {STRes428,S428} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI003.xsd','./msxsdtest/complexType',valid),
STResList429 = [STRes428|STResList428],
- ?line ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI003.xml','./msxsdtest/complexType',valid,S428),
+ ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI003.xml','./msxsdtest/complexType',valid,S428),
ITResList181 = [ITRes180|ITResList180],
- ?line {STRes429,S429} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI004.xsd','./msxsdtest/complexType',valid),
+ {STRes429,S429} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI004.xsd','./msxsdtest/complexType',valid),
STResList430 = [STRes429|STResList429],
- ?line ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI004.xml','./msxsdtest/complexType',valid,S429),
+ ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI004.xml','./msxsdtest/complexType',valid,S429),
ITResList182 = [ITRes181|ITResList181],
- ?line {STRes430,S430} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI005.xsd','./msxsdtest/complexType',valid),
+ {STRes430,S430} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI005.xsd','./msxsdtest/complexType',valid),
STResList431 = [STRes430|STResList430],
- ?line ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI005.xml','./msxsdtest/complexType',valid,S430),
+ ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI005.xml','./msxsdtest/complexType',valid,S430),
ITResList183 = [ITRes182|ITResList182],
- ?line {STRes431,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI006.xsd','./msxsdtest/complexType',invalid),
+ {STRes431,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI006.xsd','./msxsdtest/complexType',invalid),
STResList432 = [STRes431|STResList431],
- ?line {STRes432,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI007.xsd','./msxsdtest/complexType',invalid),
+ {STRes432,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI007.xsd','./msxsdtest/complexType',invalid),
STResList433 = [STRes432|STResList432],
- ?line {STRes433,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI008.xsd','./msxsdtest/complexType',invalid),
+ {STRes433,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI008.xsd','./msxsdtest/complexType',invalid),
STResList434 = [STRes433|STResList433],
- ?line {STRes434,S434} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI009.xsd','./msxsdtest/complexType',valid),
+ {STRes434,S434} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI009.xsd','./msxsdtest/complexType',valid),
STResList435 = [STRes434|STResList434],
- ?line ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI009.xml','./msxsdtest/complexType',valid,S434),
+ ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI009.xml','./msxsdtest/complexType',valid,S434),
ITResList184 = [ITRes183|ITResList183],
- ?line {STRes435,S435} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI010.xsd','./msxsdtest/complexType',valid),
+ {STRes435,S435} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI010.xsd','./msxsdtest/complexType',valid),
STResList436 = [STRes435|STResList435],
- ?line ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI010.xml','./msxsdtest/complexType',valid,S435),
+ ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI010.xml','./msxsdtest/complexType',valid,S435),
ITResList185 = [ITRes184|ITResList184],
- ?line {STRes436,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI011.xsd','./msxsdtest/complexType',invalid),
+ {STRes436,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI011.xsd','./msxsdtest/complexType',invalid),
STResList437 = [STRes436|STResList436],
- ?line {STRes437,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI012.xsd','./msxsdtest/complexType',invalid),
+ {STRes437,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI012.xsd','./msxsdtest/complexType',invalid),
STResList438 = [STRes437|STResList437],
- ?line {STRes438,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI013.xsd','./msxsdtest/complexType',invalid),
+ {STRes438,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI013.xsd','./msxsdtest/complexType',invalid),
STResList439 = [STRes438|STResList438],
- ?line {STRes439,S439} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI014.xsd','./msxsdtest/complexType',valid),
+ {STRes439,S439} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI014.xsd','./msxsdtest/complexType',valid),
STResList440 = [STRes439|STResList439],
- ?line ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI014.xml','./msxsdtest/complexType',valid,S439),
+ ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI014.xml','./msxsdtest/complexType',valid,S439),
ITResList186 = [ITRes185|ITResList185],
- ?line {STRes440,S440} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI015.xsd','./msxsdtest/complexType',valid),
+ {STRes440,S440} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI015.xsd','./msxsdtest/complexType',valid),
STResList441 = [STRes440|STResList440],
- ?line ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI015.xml','./msxsdtest/complexType',valid,S440),
+ ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI015.xml','./msxsdtest/complexType',valid,S440),
ITResList187 = [ITRes186|ITResList186],
- ?line {STRes441,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI016.xsd','./msxsdtest/complexType',invalid),
+ {STRes441,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI016.xsd','./msxsdtest/complexType',invalid),
STResList442 = [STRes441|STResList441],
- ?line {STRes442,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI017.xsd','./msxsdtest/complexType',invalid),
+ {STRes442,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI017.xsd','./msxsdtest/complexType',invalid),
STResList443 = [STRes442|STResList442],
- ?line {STRes443,S443} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI018.xsd','./msxsdtest/complexType',valid),
+ {STRes443,S443} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI018.xsd','./msxsdtest/complexType',valid),
STResList444 = [STRes443|STResList443],
- ?line ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI018.xml','./msxsdtest/complexType',valid,S443),
+ ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI018.xml','./msxsdtest/complexType',valid,S443),
ITResList188 = [ITRes187|ITResList187],
- ?line {STRes444,S444} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI019.xsd','./msxsdtest/complexType',valid),
+ {STRes444,S444} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI019.xsd','./msxsdtest/complexType',valid),
STResList445 = [STRes444|STResList444],
- ?line ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI019.xml','./msxsdtest/complexType',valid,S444),
+ ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI019.xml','./msxsdtest/complexType',valid,S444),
ITResList189 = [ITRes188|ITResList188],
- ?line {STRes445,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI020.xsd','./msxsdtest/complexType',invalid),
+ {STRes445,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI020.xsd','./msxsdtest/complexType',invalid),
STResList446 = [STRes445|STResList445],
- ?line {STRes446,S446} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI021.xsd','./msxsdtest/complexType',valid),
+ {STRes446,S446} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI021.xsd','./msxsdtest/complexType',valid),
STResList447 = [STRes446|STResList446],
- ?line ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI021.xml','./msxsdtest/complexType',valid,S446),
+ ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI021.xml','./msxsdtest/complexType',valid,S446),
ITResList190 = [ITRes189|ITResList189],
- ?line {STRes447,S447} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI022.xsd','./msxsdtest/complexType',valid),
+ {STRes447,S447} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI022.xsd','./msxsdtest/complexType',valid),
STResList448 = [STRes447|STResList447],
- ?line ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI022.xml','./msxsdtest/complexType',valid,S447),
+ ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI022.xml','./msxsdtest/complexType',valid,S447),
ITResList191 = [ITRes190|ITResList190],
- ?line {STRes448,S448} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI023.xsd','./msxsdtest/complexType',valid),
+ {STRes448,S448} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI023.xsd','./msxsdtest/complexType',valid),
STResList449 = [STRes448|STResList448],
- ?line ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI023.xml','./msxsdtest/complexType',valid,S448),
+ ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI023.xml','./msxsdtest/complexType',valid,S448),
ITResList192 = [ITRes191|ITResList191],
- ?line {STRes449,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI024.xsd','./msxsdtest/complexType',invalid),
+ {STRes449,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI024.xsd','./msxsdtest/complexType',invalid),
STResList450 = [STRes449|STResList449],
- ?line {STRes450,S450} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI025.xsd','./msxsdtest/complexType',valid),
+ {STRes450,S450} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI025.xsd','./msxsdtest/complexType',valid),
STResList451 = [STRes450|STResList450],
- ?line ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI025.xml','./msxsdtest/complexType',valid,S450),
+ ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI025.xml','./msxsdtest/complexType',valid,S450),
ITResList193 = [ITRes192|ITResList192],
- ?line {STRes451,S451} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI026.xsd','./msxsdtest/complexType',valid),
+ {STRes451,S451} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI026.xsd','./msxsdtest/complexType',valid),
STResList452 = [STRes451|STResList451],
- ?line ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI026.xml','./msxsdtest/complexType',valid,S451),
+ ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI026.xml','./msxsdtest/complexType',valid,S451),
ITResList194 = [ITRes193|ITResList193],
- ?line {STRes452,S452} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI027.xsd','./msxsdtest/complexType',valid),
+ {STRes452,S452} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI027.xsd','./msxsdtest/complexType',valid),
STResList453 = [STRes452|STResList452],
- ?line ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI027.xml','./msxsdtest/complexType',valid,S452),
+ ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI027.xml','./msxsdtest/complexType',valid,S452),
ITResList195 = [ITRes194|ITResList194],
- ?line {STRes453,S453} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI028.xsd','./msxsdtest/complexType',valid),
+ {STRes453,S453} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI028.xsd','./msxsdtest/complexType',valid),
STResList454 = [STRes453|STResList453],
- ?line ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI028.xml','./msxsdtest/complexType',valid,S453),
+ ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI028.xml','./msxsdtest/complexType',valid,S453),
ITResList196 = [ITRes195|ITResList195],
- ?line {STRes454,S454} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI029.xsd','./msxsdtest/complexType',valid),
+ {STRes454,S454} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI029.xsd','./msxsdtest/complexType',valid),
STResList455 = [STRes454|STResList454],
- ?line ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI029.xml','./msxsdtest/complexType',valid,S454),
+ ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI029.xml','./msxsdtest/complexType',valid,S454),
ITResList197 = [ITRes196|ITResList196],
- ?line {STRes455,S455} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI030.xsd','./msxsdtest/complexType',valid),
+ {STRes455,S455} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI030.xsd','./msxsdtest/complexType',valid),
STResList456 = [STRes455|STResList455],
- ?line ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI030.xml','./msxsdtest/complexType',invalid,S455),
+ ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI030.xml','./msxsdtest/complexType',invalid,S455),
ITResList198 = [ITRes197|ITResList197],
- ?line {STRes456,S456} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI031.xsd','./msxsdtest/complexType',valid),
+ {STRes456,S456} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI031.xsd','./msxsdtest/complexType',valid),
STResList457 = [STRes456|STResList456],
- ?line ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI031.xml','./msxsdtest/complexType',invalid,S456),
+ ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI031.xml','./msxsdtest/complexType',invalid,S456),
ITResList199 = [ITRes198|ITResList198],
- ?line {STRes457,S457} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI032.xsd','./msxsdtest/complexType',valid),
+ {STRes457,S457} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI032.xsd','./msxsdtest/complexType',valid),
STResList458 = [STRes457|STResList457],
- ?line ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI032.xml','./msxsdtest/complexType',invalid,S457),
+ ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI032.xml','./msxsdtest/complexType',invalid,S457),
ITResList200 = [ITRes199|ITResList199],
- ?line {STRes458,S458} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI033.xsd','./msxsdtest/complexType',valid),
+ {STRes458,S458} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI033.xsd','./msxsdtest/complexType',valid),
STResList459 = [STRes458|STResList458],
- ?line ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI033.xml','./msxsdtest/complexType',valid,S458),
+ ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI033.xml','./msxsdtest/complexType',valid,S458),
ITResList201 = [ITRes200|ITResList200],
- ?line {STRes459,S459} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI034.xsd','./msxsdtest/complexType',valid),
+ {STRes459,S459} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI034.xsd','./msxsdtest/complexType',valid),
STResList460 = [STRes459|STResList459],
- ?line ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI034.xml','./msxsdtest/complexType',valid,S459),
+ ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI034.xml','./msxsdtest/complexType',valid,S459),
ITResList202 = [ITRes201|ITResList201],
- ?line {STRes460,S460} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI035.xsd','./msxsdtest/complexType',valid),
+ {STRes460,S460} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI035.xsd','./msxsdtest/complexType',valid),
STResList461 = [STRes460|STResList460],
- ?line ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI035.xml','./msxsdtest/complexType',invalid,S460),
+ ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI035.xml','./msxsdtest/complexType',invalid,S460),
ITResList203 = [ITRes202|ITResList202],
- ?line {STRes461,S461} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI036.xsd','./msxsdtest/complexType',valid),
+ {STRes461,S461} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI036.xsd','./msxsdtest/complexType',valid),
STResList462 = [STRes461|STResList461],
- ?line ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI036.xml','./msxsdtest/complexType',valid,S461),
+ ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI036.xml','./msxsdtest/complexType',valid,S461),
ITResList204 = [ITRes203|ITResList203],
- ?line {STRes462,S462} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI037.xsd','./msxsdtest/complexType',valid),
+ {STRes462,S462} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI037.xsd','./msxsdtest/complexType',valid),
STResList463 = [STRes462|STResList462],
- ?line ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI037.xml','./msxsdtest/complexType',valid,S462),
+ ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI037.xml','./msxsdtest/complexType',valid,S462),
ITResList205 = [ITRes204|ITResList204],
- ?line {STRes463,S463} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI038.xsd','./msxsdtest/complexType',valid),
+ {STRes463,S463} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI038.xsd','./msxsdtest/complexType',valid),
STResList464 = [STRes463|STResList463],
- ?line ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI038.xml','./msxsdtest/complexType',invalid,S463),
+ ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI038.xml','./msxsdtest/complexType',invalid,S463),
ITResList206 = [ITRes205|ITResList205],
- ?line {STRes464,S464} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI039.xsd','./msxsdtest/complexType',valid),
+ {STRes464,S464} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI039.xsd','./msxsdtest/complexType',valid),
STResList465 = [STRes464|STResList464],
- ?line ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI039.xml','./msxsdtest/complexType',invalid,S464),
+ ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI039.xml','./msxsdtest/complexType',invalid,S464),
ITResList207 = [ITRes206|ITResList206],
- ?line {STRes465,S465} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI040.xsd','./msxsdtest/complexType',valid),
+ {STRes465,S465} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI040.xsd','./msxsdtest/complexType',valid),
STResList466 = [STRes465|STResList465],
- ?line ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI040.xml','./msxsdtest/complexType',valid,S465),
+ ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI040.xml','./msxsdtest/complexType',valid,S465),
ITResList208 = [ITRes207|ITResList207],
- ?line {STRes466,S466} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI041.xsd','./msxsdtest/complexType',valid),
+ {STRes466,S466} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI041.xsd','./msxsdtest/complexType',valid),
STResList467 = [STRes466|STResList466],
- ?line ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI041.xml','./msxsdtest/complexType',valid,S466),
+ ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI041.xml','./msxsdtest/complexType',valid,S466),
ITResList209 = [ITRes208|ITResList208],
- ?line {STRes467,S467} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI042.xsd','./msxsdtest/complexType',valid),
+ {STRes467,S467} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI042.xsd','./msxsdtest/complexType',valid),
STResList468 = [STRes467|STResList467],
- ?line ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI042.xml','./msxsdtest/complexType',invalid,S467),
+ ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI042.xml','./msxsdtest/complexType',invalid,S467),
ITResList210 = [ITRes209|ITResList209],
- ?line {STRes468,S468} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI043.xsd','./msxsdtest/complexType',valid),
+ {STRes468,S468} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI043.xsd','./msxsdtest/complexType',valid),
STResList469 = [STRes468|STResList468],
- ?line ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI043.xml','./msxsdtest/complexType',valid,S468),
+ ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI043.xml','./msxsdtest/complexType',valid,S468),
ITResList211 = [ITRes210|ITResList210],
- ?line {STRes469,S469} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI044.xsd','./msxsdtest/complexType',valid),
+ {STRes469,S469} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI044.xsd','./msxsdtest/complexType',valid),
STResList470 = [STRes469|STResList469],
- ?line ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI044.xml','./msxsdtest/complexType',valid,S469),
+ ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI044.xml','./msxsdtest/complexType',valid,S469),
ITResList212 = [ITRes211|ITResList211],
- ?line {STRes470,S470} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI045.xsd','./msxsdtest/complexType',valid),
+ {STRes470,S470} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI045.xsd','./msxsdtest/complexType',valid),
STResList471 = [STRes470|STResList470],
- ?line ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI045.xml','./msxsdtest/complexType',invalid,S470),
+ ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI045.xml','./msxsdtest/complexType',invalid,S470),
ITResList213 = [ITRes212|ITResList212],
- ?line {STRes471,S471} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI046.xsd','./msxsdtest/complexType',valid),
+ {STRes471,S471} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI046.xsd','./msxsdtest/complexType',valid),
STResList472 = [STRes471|STResList471],
- ?line ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI046.xml','./msxsdtest/complexType',valid,S471),
+ ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI046.xml','./msxsdtest/complexType',valid,S471),
ITResList214 = [ITRes213|ITResList213],
- ?line {STRes472,S472} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI047.xsd','./msxsdtest/complexType',valid),
+ {STRes472,S472} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI047.xsd','./msxsdtest/complexType',valid),
STResList473 = [STRes472|STResList472],
- ?line ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI047.xml','./msxsdtest/complexType',valid,S472),
+ ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI047.xml','./msxsdtest/complexType',valid,S472),
ITResList215 = [ITRes214|ITResList214],
- ?line {STRes473,S473} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI048.xsd','./msxsdtest/complexType',valid),
+ {STRes473,S473} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI048.xsd','./msxsdtest/complexType',valid),
STResList474 = [STRes473|STResList473],
- ?line ITRes215 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI048.xml','./msxsdtest/complexType',invalid,S473),
+ ITRes215 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI048.xml','./msxsdtest/complexType',invalid,S473),
ITResList216 = [ITRes215|ITResList215],
- ?line {STRes474,S474} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI049.xsd','./msxsdtest/complexType',valid),
+ {STRes474,S474} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI049.xsd','./msxsdtest/complexType',valid),
STResList475 = [STRes474|STResList474],
- ?line ITRes216 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI049.xml','./msxsdtest/complexType',invalid,S474),
+ ITRes216 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI049.xml','./msxsdtest/complexType',invalid,S474),
ITResList217 = [ITRes216|ITResList216],
- ?line {STRes475,S475} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI050.xsd','./msxsdtest/complexType',valid),
+ {STRes475,S475} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI050.xsd','./msxsdtest/complexType',valid),
STResList476 = [STRes475|STResList475],
- ?line ITRes217 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI050.xml','./msxsdtest/complexType',valid,S475),
+ ITRes217 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI050.xml','./msxsdtest/complexType',valid,S475),
ITResList218 = [ITRes217|ITResList217],
- ?line {STRes476,S476} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ001.xsd','./msxsdtest/complexType',valid),
+ {STRes476,S476} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ001.xsd','./msxsdtest/complexType',valid),
STResList477 = [STRes476|STResList476],
- ?line ITRes218 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctJ001.xml','./msxsdtest/complexType',valid,S476),
+ ITRes218 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctJ001.xml','./msxsdtest/complexType',valid,S476),
ITResList219 = [ITRes218|ITResList218],
- ?line {STRes477,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ002.xsd','./msxsdtest/complexType',invalid),
+ {STRes477,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ002.xsd','./msxsdtest/complexType',invalid),
STResList478 = [STRes477|STResList477],
- ?line {STRes478,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ003.xsd','./msxsdtest/complexType',invalid),
+ {STRes478,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ003.xsd','./msxsdtest/complexType',invalid),
STResList479 = [STRes478|STResList478],
- ?line {STRes479,S479} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctK001.xsd','./msxsdtest/complexType',valid),
+ {STRes479,S479} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctK001.xsd','./msxsdtest/complexType',valid),
STResList480 = [STRes479|STResList479],
- ?line ITRes219 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctK001.xml','./msxsdtest/complexType',valid,S479),
+ ITRes219 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctK001.xml','./msxsdtest/complexType',valid,S479),
ITResList220 = [ITRes219|ITResList219],
- ?line {STRes480,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctK002.xsd','./msxsdtest/complexType',invalid),
+ {STRes480,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctK002.xsd','./msxsdtest/complexType',invalid),
STResList481 = [STRes480|STResList480],
- ?line {STRes481,S481} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL001.xsd','./msxsdtest/complexType',valid),
+ {STRes481,S481} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL001.xsd','./msxsdtest/complexType',valid),
STResList482 = [STRes481|STResList481],
- ?line ITRes220 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL001.xml','./msxsdtest/complexType',invalid,S481),
+ ITRes220 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL001.xml','./msxsdtest/complexType',invalid,S481),
ITResList221 = [ITRes220|ITResList220],
- ?line {STRes482,S482} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL002.xsd','./msxsdtest/complexType',valid),
+ {STRes482,S482} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL002.xsd','./msxsdtest/complexType',valid),
STResList483 = [STRes482|STResList482],
- ?line ITRes221 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL002.xml','./msxsdtest/complexType',invalid,S482),
+ ITRes221 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL002.xml','./msxsdtest/complexType',invalid,S482),
ITResList222 = [ITRes221|ITResList221],
- ?line {STRes483,S483} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL003.xsd','./msxsdtest/complexType',valid),
+ {STRes483,S483} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL003.xsd','./msxsdtest/complexType',valid),
STResList484 = [STRes483|STResList483],
- ?line ITRes222 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL003.xml','./msxsdtest/complexType',valid,S483),
+ ITRes222 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL003.xml','./msxsdtest/complexType',valid,S483),
ITResList223 = [ITRes222|ITResList222],
- ?line {STRes484,S484} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL004.xsd','./msxsdtest/complexType',valid),
+ {STRes484,S484} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL004.xsd','./msxsdtest/complexType',valid),
STResList485 = [STRes484|STResList484],
- ?line ITRes223 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL004.xml','./msxsdtest/complexType',invalid,S484),
+ ITRes223 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL004.xml','./msxsdtest/complexType',invalid,S484),
ITResList224 = [ITRes223|ITResList223],
- ?line {STRes485,S485} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL005.xsd','./msxsdtest/complexType',valid),
+ {STRes485,S485} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL005.xsd','./msxsdtest/complexType',valid),
STResList486 = [STRes485|STResList485],
- ?line ITRes224 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL005.xml','./msxsdtest/complexType',valid,S485),
+ ITRes224 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL005.xml','./msxsdtest/complexType',valid,S485),
ITResList225 = [ITRes224|ITResList224],
- ?line {STRes486,S486} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL006.xsd','./msxsdtest/complexType',valid),
+ {STRes486,S486} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL006.xsd','./msxsdtest/complexType',valid),
STResList487 = [STRes486|STResList486],
- ?line ITRes225 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL006.xml','./msxsdtest/complexType',invalid,S486),
+ ITRes225 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL006.xml','./msxsdtest/complexType',invalid,S486),
ITResList226 = [ITRes225|ITResList225],
- ?line {STRes487,S487} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL007.xsd','./msxsdtest/complexType',valid),
+ {STRes487,S487} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL007.xsd','./msxsdtest/complexType',valid),
STResList488 = [STRes487|STResList487],
- ?line ITRes226 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL007.xml','./msxsdtest/complexType',valid,S487),
+ ITRes226 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL007.xml','./msxsdtest/complexType',valid,S487),
ITResList227 = [ITRes226|ITResList226],
- ?line {STRes488,S488} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL008.xsd','./msxsdtest/complexType',valid),
+ {STRes488,S488} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL008.xsd','./msxsdtest/complexType',valid),
STResList489 = [STRes488|STResList488],
- ?line ITRes227 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL008.xml','./msxsdtest/complexType',valid,S488),
+ ITRes227 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL008.xml','./msxsdtest/complexType',valid,S488),
ITResList228 = [ITRes227|ITResList227],
- ?line {STRes489,S489} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL009.xsd','./msxsdtest/complexType',valid),
+ {STRes489,S489} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL009.xsd','./msxsdtest/complexType',valid),
STResList490 = [STRes489|STResList489],
- ?line ITRes228 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL009.xml','./msxsdtest/complexType',invalid,S489),
+ ITRes228 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL009.xml','./msxsdtest/complexType',invalid,S489),
ITResList229 = [ITRes228|ITResList228],
- ?line {STRes490,S490} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL010.xsd','./msxsdtest/complexType',valid),
+ {STRes490,S490} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL010.xsd','./msxsdtest/complexType',valid),
STResList491 = [STRes490|STResList490],
- ?line ITRes229 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL010.xml','./msxsdtest/complexType',invalid,S490),
+ ITRes229 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL010.xml','./msxsdtest/complexType',invalid,S490),
ITResList230 = [ITRes229|ITResList229],
- ?line {STRes491,S491} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL011.xsd','./msxsdtest/complexType',valid),
+ {STRes491,S491} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL011.xsd','./msxsdtest/complexType',valid),
STResList492 = [STRes491|STResList491],
- ?line ITRes230 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL011.xml','./msxsdtest/complexType',valid,S491),
+ ITRes230 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL011.xml','./msxsdtest/complexType',valid,S491),
ITResList231 = [ITRes230|ITResList230],
- ?line {STRes492,S492} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL012.xsd','./msxsdtest/complexType',valid),
+ {STRes492,S492} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL012.xsd','./msxsdtest/complexType',valid),
STResList493 = [STRes492|STResList492],
- ?line ITRes231 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL012.xml','./msxsdtest/complexType',invalid,S492),
+ ITRes231 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL012.xml','./msxsdtest/complexType',invalid,S492),
ITResList232 = [ITRes231|ITResList231],
- ?line {STRes493,S493} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL013.xsd','./msxsdtest/complexType',valid),
+ {STRes493,S493} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL013.xsd','./msxsdtest/complexType',valid),
STResList494 = [STRes493|STResList493],
- ?line ITRes232 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL013.xml','./msxsdtest/complexType',invalid,S493),
+ ITRes232 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL013.xml','./msxsdtest/complexType',invalid,S493),
ITResList233 = [ITRes232|ITResList232],
- ?line {STRes494,S494} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL014.xsd','./msxsdtest/complexType',valid),
+ {STRes494,S494} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL014.xsd','./msxsdtest/complexType',valid),
STResList495 = [STRes494|STResList494],
- ?line ITRes233 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL014.xml','./msxsdtest/complexType',valid,S494),
+ ITRes233 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL014.xml','./msxsdtest/complexType',valid,S494),
ITResList234 = [ITRes233|ITResList233],
- ?line {STRes495,S495} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL015.xsd','./msxsdtest/complexType',valid),
+ {STRes495,S495} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL015.xsd','./msxsdtest/complexType',valid),
STResList496 = [STRes495|STResList495],
- ?line ITRes234 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL015.xml','./msxsdtest/complexType',valid,S495),
+ ITRes234 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL015.xml','./msxsdtest/complexType',valid,S495),
ITResList235 = [ITRes234|ITResList234],
- ?line {STRes496,S496} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL016.xsd','./msxsdtest/complexType',valid),
+ {STRes496,S496} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL016.xsd','./msxsdtest/complexType',valid),
STResList497 = [STRes496|STResList496],
- ?line ITRes235 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL016.xml','./msxsdtest/complexType',valid,S496),
+ ITRes235 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL016.xml','./msxsdtest/complexType',valid,S496),
ITResList236 = [ITRes235|ITResList235],
- ?line {STRes497,S497} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL017.xsd','./msxsdtest/complexType',valid),
+ {STRes497,S497} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL017.xsd','./msxsdtest/complexType',valid),
STResList498 = [STRes497|STResList497],
- ?line ITRes236 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL017.xml','./msxsdtest/complexType',valid,S497),
+ ITRes236 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL017.xml','./msxsdtest/complexType',valid,S497),
ITResList237 = [ITRes236|ITResList236],
- ?line {STRes498,S498} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL018.xsd','./msxsdtest/complexType',valid),
+ {STRes498,S498} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL018.xsd','./msxsdtest/complexType',valid),
STResList499 = [STRes498|STResList498],
- ?line ITRes237 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL018.xml','./msxsdtest/complexType',valid,S498),
+ ITRes237 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL018.xml','./msxsdtest/complexType',valid,S498),
ITResList238 = [ITRes237|ITResList237],
- ?line {STRes499,S499} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL019.xsd','./msxsdtest/complexType',valid),
+ {STRes499,S499} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL019.xsd','./msxsdtest/complexType',valid),
STResList500 = [STRes499|STResList499],
- ?line ITRes238 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL019.xml','./msxsdtest/complexType',valid,S499),
+ ITRes238 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL019.xml','./msxsdtest/complexType',valid,S499),
ITResList239 = [ITRes238|ITResList238],
- ?line {STRes500,S500} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL020.xsd','./msxsdtest/complexType',valid),
+ {STRes500,S500} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL020.xsd','./msxsdtest/complexType',valid),
STResList501 = [STRes500|STResList500],
- ?line ITRes239 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL020.xml','./msxsdtest/complexType',invalid,S500),
+ ITRes239 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL020.xml','./msxsdtest/complexType',invalid,S500),
ITResList240 = [ITRes239|ITResList239],
- ?line {STRes501,S501} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL021.xsd','./msxsdtest/complexType',valid),
+ {STRes501,S501} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL021.xsd','./msxsdtest/complexType',valid),
STResList502 = [STRes501|STResList501],
- ?line ITRes240 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL021.xml','./msxsdtest/complexType',valid,S501),
+ ITRes240 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL021.xml','./msxsdtest/complexType',valid,S501),
ITResList241 = [ITRes240|ITResList240],
- ?line {STRes502,S502} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/bug67200.xsd','./msxsdtest/complexType',valid),
+ {STRes502,S502} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/bug67200.xsd','./msxsdtest/complexType',valid),
STResList503 = [STRes502|STResList502],
- ?line ITRes241 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/bug67200.xml','./msxsdtest/complexType',valid,S502),
+ ITRes241 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/bug67200.xml','./msxsdtest/complexType',valid,S502),
ITResList242 = [ITRes241|ITResList241],
- ?line {STRes503,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM001.xsd','./msxsdtest/complexType',invalid),
+ {STRes503,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM001.xsd','./msxsdtest/complexType',invalid),
STResList504 = [STRes503|STResList503],
- ?line {STRes504,S504} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM002.xsd','./msxsdtest/complexType',valid),
+ {STRes504,S504} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM002.xsd','./msxsdtest/complexType',valid),
STResList505 = [STRes504|STResList504],
- ?line ITRes242 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctM002.xml','./msxsdtest/complexType',valid,S504),
+ ITRes242 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctM002.xml','./msxsdtest/complexType',valid,S504),
ITResList243 = [ITRes242|ITResList242],
- ?line {STRes505,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM003.xsd','./msxsdtest/complexType',invalid),
+ {STRes505,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM003.xsd','./msxsdtest/complexType',invalid),
STResList506 = [STRes505|STResList505],
- ?line {STRes506,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM004.xsd','./msxsdtest/complexType',invalid),
+ {STRes506,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM004.xsd','./msxsdtest/complexType',invalid),
STResList507 = [STRes506|STResList506],
- ?line {STRes507,S507} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN001.xsd','./msxsdtest/complexType',valid),
+ {STRes507,S507} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN001.xsd','./msxsdtest/complexType',valid),
STResList508 = [STRes507|STResList507],
- ?line ITRes243 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN001.xml','./msxsdtest/complexType',valid,S507),
+ ITRes243 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN001.xml','./msxsdtest/complexType',valid,S507),
ITResList244 = [ITRes243|ITResList243],
- ?line {STRes508,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN002.xsd','./msxsdtest/complexType',invalid),
+ {STRes508,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN002.xsd','./msxsdtest/complexType',invalid),
STResList509 = [STRes508|STResList508],
- ?line {STRes509,S509} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN003.xsd','./msxsdtest/complexType',valid),
+ {STRes509,S509} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN003.xsd','./msxsdtest/complexType',valid),
STResList510 = [STRes509|STResList509],
- ?line ITRes244 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN003.xml','./msxsdtest/complexType',valid,S509),
+ ITRes244 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN003.xml','./msxsdtest/complexType',valid,S509),
ITResList245 = [ITRes244|ITResList244],
- ?line {STRes510,S510} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN004.xsd','./msxsdtest/complexType',valid),
+ {STRes510,S510} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN004.xsd','./msxsdtest/complexType',valid),
STResList511 = [STRes510|STResList510],
- ?line ITRes245 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN004.xml','./msxsdtest/complexType',valid,S510),
+ ITRes245 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN004.xml','./msxsdtest/complexType',valid,S510),
ITResList246 = [ITRes245|ITResList245],
- ?line {STRes511,S511} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO001.xsd','./msxsdtest/complexType',valid),
+ {STRes511,S511} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO001.xsd','./msxsdtest/complexType',valid),
STResList512 = [STRes511|STResList511],
- ?line ITRes246 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO001.xml','./msxsdtest/complexType',valid,S511),
+ ITRes246 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO001.xml','./msxsdtest/complexType',valid,S511),
ITResList247 = [ITRes246|ITResList246],
- ?line {STRes512,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO002.xsd','./msxsdtest/complexType',invalid),
+ {STRes512,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO002.xsd','./msxsdtest/complexType',invalid),
STResList513 = [STRes512|STResList512],
- ?line {STRes513,S513} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO003.xsd','./msxsdtest/complexType',valid),
+ {STRes513,S513} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO003.xsd','./msxsdtest/complexType',valid),
STResList514 = [STRes513|STResList513],
- ?line ITRes247 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO003.xml','./msxsdtest/complexType',valid,S513),
+ ITRes247 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO003.xml','./msxsdtest/complexType',valid,S513),
ITResList248 = [ITRes247|ITResList247],
- ?line {STRes514,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO004.xsd','./msxsdtest/complexType',invalid),
+ {STRes514,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO004.xsd','./msxsdtest/complexType',invalid),
STResList515 = [STRes514|STResList514],
- ?line {STRes515,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO005.xsd','./msxsdtest/complexType',invalid),
+ {STRes515,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO005.xsd','./msxsdtest/complexType',invalid),
STResList516 = [STRes515|STResList515],
- ?line {STRes516,S516} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO006.xsd','./msxsdtest/complexType',valid),
+ {STRes516,S516} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO006.xsd','./msxsdtest/complexType',valid),
STResList517 = [STRes516|STResList516],
- ?line ITRes248 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO006.xml','./msxsdtest/complexType',valid,S516),
+ ITRes248 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO006.xml','./msxsdtest/complexType',valid,S516),
ITResList249 = [ITRes248|ITResList248],
- ?line {STRes517,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO007.xsd','./msxsdtest/complexType',invalid),
+ {STRes517,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO007.xsd','./msxsdtest/complexType',invalid),
STResList518 = [STRes517|STResList517],
@@ -4411,1332 +4399,1332 @@ ct(Config) when is_list(Config) ->
elem(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA001.xsd','./msxsdtest/element',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA001.xsd','./msxsdtest/element',invalid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA002.xsd','./msxsdtest/element',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA002.xsd','./msxsdtest/element',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA003.xsd','./msxsdtest/element',valid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA003.xsd','./msxsdtest/element',valid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA004.xsd','./msxsdtest/element',valid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA004.xsd','./msxsdtest/element',valid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA005.xsd','./msxsdtest/element',valid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA005.xsd','./msxsdtest/element',valid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA006.xsd','./msxsdtest/element',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA006.xsd','./msxsdtest/element',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA007.xsd','./msxsdtest/element',valid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA007.xsd','./msxsdtest/element',valid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA009.xsd','./msxsdtest/element',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA009.xsd','./msxsdtest/element',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA010.xsd','./msxsdtest/element',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA010.xsd','./msxsdtest/element',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA011.xsd','./msxsdtest/element',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA011.xsd','./msxsdtest/element',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA012.xsd','./msxsdtest/element',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA012.xsd','./msxsdtest/element',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA013.xsd','./msxsdtest/element',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA013.xsd','./msxsdtest/element',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA014.xsd','./msxsdtest/element',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA014.xsd','./msxsdtest/element',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA015.xsd','./msxsdtest/element',valid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA015.xsd','./msxsdtest/element',valid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA016.xsd','./msxsdtest/element',valid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA016.xsd','./msxsdtest/element',valid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA017.xsd','./msxsdtest/element',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA017.xsd','./msxsdtest/element',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB001.xsd','./msxsdtest/element',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB001.xsd','./msxsdtest/element',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB002.xsd','./msxsdtest/element',valid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB002.xsd','./msxsdtest/element',valid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB003.xsd','./msxsdtest/element',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB003.xsd','./msxsdtest/element',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB004.xsd','./msxsdtest/element',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB004.xsd','./msxsdtest/element',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB005.xsd','./msxsdtest/element',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB005.xsd','./msxsdtest/element',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB006.xsd','./msxsdtest/element',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB006.xsd','./msxsdtest/element',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB007.xsd','./msxsdtest/element',valid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB007.xsd','./msxsdtest/element',valid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB008.xsd','./msxsdtest/element',valid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB008.xsd','./msxsdtest/element',valid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB009.xsd','./msxsdtest/element',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB009.xsd','./msxsdtest/element',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB010.xsd','./msxsdtest/element',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB010.xsd','./msxsdtest/element',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC001.xsd','./msxsdtest/element',valid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC001.xsd','./msxsdtest/element',valid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC002.xsd','./msxsdtest/element',valid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC002.xsd','./msxsdtest/element',valid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC003.xsd','./msxsdtest/element',valid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC003.xsd','./msxsdtest/element',valid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC004.xsd','./msxsdtest/element',valid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC004.xsd','./msxsdtest/element',valid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC005.xsd','./msxsdtest/element',valid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC005.xsd','./msxsdtest/element',valid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC006.xsd','./msxsdtest/element',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC006.xsd','./msxsdtest/element',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC007.xsd','./msxsdtest/element',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC007.xsd','./msxsdtest/element',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC008.xsd','./msxsdtest/element',valid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC008.xsd','./msxsdtest/element',valid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC009.xsd','./msxsdtest/element',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC009.xsd','./msxsdtest/element',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC010.xsd','./msxsdtest/element',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC010.xsd','./msxsdtest/element',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC011.xsd','./msxsdtest/element',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC011.xsd','./msxsdtest/element',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC012.xsd','./msxsdtest/element',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC012.xsd','./msxsdtest/element',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC013.xsd','./msxsdtest/element',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC013.xsd','./msxsdtest/element',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC014.xsd','./msxsdtest/element',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC014.xsd','./msxsdtest/element',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC015.xsd','./msxsdtest/element',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC015.xsd','./msxsdtest/element',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC016.xsd','./msxsdtest/element',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC016.xsd','./msxsdtest/element',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC017.xsd','./msxsdtest/element',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC017.xsd','./msxsdtest/element',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC018.xsd','./msxsdtest/element',valid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC018.xsd','./msxsdtest/element',valid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC020.xsd','./msxsdtest/element',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC020.xsd','./msxsdtest/element',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD001.xsd','./msxsdtest/element',valid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD001.xsd','./msxsdtest/element',valid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD002.xsd','./msxsdtest/element',valid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD002.xsd','./msxsdtest/element',valid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD003.xsd','./msxsdtest/element',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD003.xsd','./msxsdtest/element',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD004.xsd','./msxsdtest/element',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD004.xsd','./msxsdtest/element',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD005.xsd','./msxsdtest/element',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD005.xsd','./msxsdtest/element',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD006.xsd','./msxsdtest/element',valid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD006.xsd','./msxsdtest/element',valid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE001.xsd','./msxsdtest/element',valid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE001.xsd','./msxsdtest/element',valid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE002.xsd','./msxsdtest/element',valid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE002.xsd','./msxsdtest/element',valid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE003.xsd','./msxsdtest/element',valid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE003.xsd','./msxsdtest/element',valid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE004.xsd','./msxsdtest/element',valid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE004.xsd','./msxsdtest/element',valid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE005.xsd','./msxsdtest/element',valid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE005.xsd','./msxsdtest/element',valid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE006.xsd','./msxsdtest/element',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE006.xsd','./msxsdtest/element',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE007.xsd','./msxsdtest/element',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE007.xsd','./msxsdtest/element',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE008.xsd','./msxsdtest/element',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE008.xsd','./msxsdtest/element',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE009.xsd','./msxsdtest/element',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE009.xsd','./msxsdtest/element',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF001.xsd','./msxsdtest/element',valid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF001.xsd','./msxsdtest/element',valid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF002.xsd','./msxsdtest/element',valid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF002.xsd','./msxsdtest/element',valid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF003.xsd','./msxsdtest/element',valid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF003.xsd','./msxsdtest/element',valid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF004.xsd','./msxsdtest/element',invalid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF004.xsd','./msxsdtest/element',invalid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF005.xsd','./msxsdtest/element',valid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF005.xsd','./msxsdtest/element',valid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF006.xsd','./msxsdtest/element',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF006.xsd','./msxsdtest/element',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF007.xsd','./msxsdtest/element',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF007.xsd','./msxsdtest/element',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF008.xsd','./msxsdtest/element',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF008.xsd','./msxsdtest/element',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF009.xsd','./msxsdtest/element',invalid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF009.xsd','./msxsdtest/element',invalid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF010.xsd','./msxsdtest/element',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF010.xsd','./msxsdtest/element',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF011.xsd','./msxsdtest/element',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF011.xsd','./msxsdtest/element',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF012.xsd','./msxsdtest/element',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF012.xsd','./msxsdtest/element',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF013.xsd','./msxsdtest/element',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF013.xsd','./msxsdtest/element',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF014.xsd','./msxsdtest/element',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF014.xsd','./msxsdtest/element',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF015.xsd','./msxsdtest/element',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF015.xsd','./msxsdtest/element',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF016.xsd','./msxsdtest/element',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF016.xsd','./msxsdtest/element',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF017.xsd','./msxsdtest/element',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF017.xsd','./msxsdtest/element',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF018.xsd','./msxsdtest/element',valid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF018.xsd','./msxsdtest/element',valid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG001.xsd','./msxsdtest/element',valid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG001.xsd','./msxsdtest/element',valid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG002.xsd','./msxsdtest/element',valid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG002.xsd','./msxsdtest/element',valid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG003.xsd','./msxsdtest/element',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG003.xsd','./msxsdtest/element',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG004.xsd','./msxsdtest/element',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG004.xsd','./msxsdtest/element',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG005.xsd','./msxsdtest/element',valid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG005.xsd','./msxsdtest/element',valid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH001.xsd','./msxsdtest/element',valid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH001.xsd','./msxsdtest/element',valid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH002.xsd','./msxsdtest/element',valid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH002.xsd','./msxsdtest/element',valid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH003.xsd','./msxsdtest/element',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH003.xsd','./msxsdtest/element',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH004.xsd','./msxsdtest/element',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH004.xsd','./msxsdtest/element',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH005.xsd','./msxsdtest/element',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH005.xsd','./msxsdtest/element',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH006.xsd','./msxsdtest/element',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH006.xsd','./msxsdtest/element',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI001.xsd','./msxsdtest/element',valid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI001.xsd','./msxsdtest/element',valid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI002.xsd','./msxsdtest/element',valid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI002.xsd','./msxsdtest/element',valid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI003.xsd','./msxsdtest/element',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI003.xsd','./msxsdtest/element',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI004.xsd','./msxsdtest/element',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI004.xsd','./msxsdtest/element',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI005.xsd','./msxsdtest/element',invalid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI005.xsd','./msxsdtest/element',invalid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ001.xsd','./msxsdtest/element',valid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ001.xsd','./msxsdtest/element',valid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ002.xsd','./msxsdtest/element',valid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ002.xsd','./msxsdtest/element',valid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ003.xsd','./msxsdtest/element',valid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ003.xsd','./msxsdtest/element',valid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ004.xsd','./msxsdtest/element',valid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ004.xsd','./msxsdtest/element',valid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ005.xsd','./msxsdtest/element',valid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ005.xsd','./msxsdtest/element',valid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ006.xsd','./msxsdtest/element',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ006.xsd','./msxsdtest/element',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ007.xsd','./msxsdtest/element',invalid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ007.xsd','./msxsdtest/element',invalid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ008.xsd','./msxsdtest/element',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ008.xsd','./msxsdtest/element',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ009.xsd','./msxsdtest/element',valid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ009.xsd','./msxsdtest/element',valid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ010.xsd','./msxsdtest/element',valid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ010.xsd','./msxsdtest/element',valid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ011.xsd','./msxsdtest/element',valid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ011.xsd','./msxsdtest/element',valid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ012.xsd','./msxsdtest/element',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ012.xsd','./msxsdtest/element',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ013.xsd','./msxsdtest/element',valid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ013.xsd','./msxsdtest/element',valid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ014.xsd','./msxsdtest/element',invalid),
+ {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ014.xsd','./msxsdtest/element',invalid),
STResList108 = [STRes107|STResList107],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ015.xsd','./msxsdtest/element',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ015.xsd','./msxsdtest/element',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ016.xsd','./msxsdtest/element',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ016.xsd','./msxsdtest/element',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ017.xsd','./msxsdtest/element',valid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ017.xsd','./msxsdtest/element',valid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ018.xsd','./msxsdtest/element',valid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ018.xsd','./msxsdtest/element',valid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ019.xsd','./msxsdtest/element',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ019.xsd','./msxsdtest/element',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ020.xsd','./msxsdtest/element',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ020.xsd','./msxsdtest/element',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ021.xsd','./msxsdtest/element',valid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ021.xsd','./msxsdtest/element',valid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK001.xsd','./msxsdtest/element',valid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK001.xsd','./msxsdtest/element',valid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK002.xsd','./msxsdtest/element',valid),
+ {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK002.xsd','./msxsdtest/element',valid),
STResList117 = [STRes116|STResList116],
- ?line {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK003.xsd','./msxsdtest/element',invalid),
+ {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK003.xsd','./msxsdtest/element',invalid),
STResList118 = [STRes117|STResList117],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK004.xsd','./msxsdtest/element',invalid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK004.xsd','./msxsdtest/element',invalid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK005.xsd','./msxsdtest/element',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK005.xsd','./msxsdtest/element',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK006.xsd','./msxsdtest/element',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK006.xsd','./msxsdtest/element',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK007.xsd','./msxsdtest/element',invalid),
+ {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK007.xsd','./msxsdtest/element',invalid),
STResList122 = [STRes121|STResList121],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL001.xsd','./msxsdtest/element',valid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL001.xsd','./msxsdtest/element',valid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL002.xsd','./msxsdtest/element',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL002.xsd','./msxsdtest/element',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL003.xsd','./msxsdtest/element',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL003.xsd','./msxsdtest/element',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL004.xsd','./msxsdtest/element',valid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL004.xsd','./msxsdtest/element',valid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL005.xsd','./msxsdtest/element',valid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL005.xsd','./msxsdtest/element',valid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM001.xsd','./msxsdtest/element',valid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM001.xsd','./msxsdtest/element',valid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM002.xsd','./msxsdtest/element',invalid),
+ {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM002.xsd','./msxsdtest/element',invalid),
STResList129 = [STRes128|STResList128],
- ?line {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM003.xsd','./msxsdtest/element',invalid),
+ {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM003.xsd','./msxsdtest/element',invalid),
STResList130 = [STRes129|STResList129],
- ?line {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM004.xsd','./msxsdtest/element',valid),
+ {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM004.xsd','./msxsdtest/element',valid),
STResList131 = [STRes130|STResList130],
- ?line {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM005.xsd','./msxsdtest/element',invalid),
+ {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM005.xsd','./msxsdtest/element',invalid),
STResList132 = [STRes131|STResList131],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN001.xsd','./msxsdtest/element',valid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN001.xsd','./msxsdtest/element',valid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN002.xsd','./msxsdtest/element',valid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN002.xsd','./msxsdtest/element',valid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN003.xsd','./msxsdtest/element',valid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN003.xsd','./msxsdtest/element',valid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN004.xsd','./msxsdtest/element',valid),
+ {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN004.xsd','./msxsdtest/element',valid),
STResList136 = [STRes135|STResList135],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN005.xsd','./msxsdtest/element',valid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN005.xsd','./msxsdtest/element',valid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN006.xsd','./msxsdtest/element',invalid),
+ {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN006.xsd','./msxsdtest/element',invalid),
STResList138 = [STRes137|STResList137],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO001.xsd','./msxsdtest/element',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO001.xsd','./msxsdtest/element',valid),
STResList139 = [STRes138|STResList138],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO001.xml','./msxsdtest/element',invalid,S138),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO001.xml','./msxsdtest/element',invalid,S138),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO002.xsd','./msxsdtest/element',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO002.xsd','./msxsdtest/element',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO002.xml','./msxsdtest/element',valid,S139),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO002.xml','./msxsdtest/element',valid,S139),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO003.xsd','./msxsdtest/element',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO003.xsd','./msxsdtest/element',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO003.xml','./msxsdtest/element',valid,S140),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO003.xml','./msxsdtest/element',valid,S140),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO004.xsd','./msxsdtest/element',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO004.xsd','./msxsdtest/element',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO004.xml','./msxsdtest/element',valid,S141),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO004.xml','./msxsdtest/element',valid,S141),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO005.xsd','./msxsdtest/element',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO005.xsd','./msxsdtest/element',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO005.xml','./msxsdtest/element',valid,S142),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO005.xml','./msxsdtest/element',valid,S142),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO006.xsd','./msxsdtest/element',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO006.xsd','./msxsdtest/element',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO006.xml','./msxsdtest/element',valid,S143),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO006.xml','./msxsdtest/element',valid,S143),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO007.xsd','./msxsdtest/element',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO007.xsd','./msxsdtest/element',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO007.xml','./msxsdtest/element',invalid,S144),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO007.xml','./msxsdtest/element',invalid,S144),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO008.xsd','./msxsdtest/element',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO008.xsd','./msxsdtest/element',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO008.xml','./msxsdtest/element',valid,S145),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO008.xml','./msxsdtest/element',valid,S145),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO009.xsd','./msxsdtest/element',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO009.xsd','./msxsdtest/element',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO009.xml','./msxsdtest/element',valid,S146),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO009.xml','./msxsdtest/element',valid,S146),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO010.xsd','./msxsdtest/element',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO010.xsd','./msxsdtest/element',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO010.xml','./msxsdtest/element',invalid,S147),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO010.xml','./msxsdtest/element',invalid,S147),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO011.xsd','./msxsdtest/element',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO011.xsd','./msxsdtest/element',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO011.xml','./msxsdtest/element',invalid,S148),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO011.xml','./msxsdtest/element',invalid,S148),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO012.xsd','./msxsdtest/element',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO012.xsd','./msxsdtest/element',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO012.xml','./msxsdtest/element',valid,S149),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO012.xml','./msxsdtest/element',valid,S149),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP001.xsd','./msxsdtest/element',invalid),
+ {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP001.xsd','./msxsdtest/element',invalid),
STResList151 = [STRes150|STResList150],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP002.xsd','./msxsdtest/element',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP002.xsd','./msxsdtest/element',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP003.xsd','./msxsdtest/element',valid),
+ {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP003.xsd','./msxsdtest/element',valid),
STResList153 = [STRes152|STResList152],
- ?line {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP004.xsd','./msxsdtest/element',valid),
+ {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP004.xsd','./msxsdtest/element',valid),
STResList154 = [STRes153|STResList153],
- ?line {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP005.xsd','./msxsdtest/element',invalid),
+ {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP005.xsd','./msxsdtest/element',invalid),
STResList155 = [STRes154|STResList154],
- ?line {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP006.xsd','./msxsdtest/element',invalid),
+ {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP006.xsd','./msxsdtest/element',invalid),
STResList156 = [STRes155|STResList155],
- ?line {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP007.xsd','./msxsdtest/element',invalid),
+ {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP007.xsd','./msxsdtest/element',invalid),
STResList157 = [STRes156|STResList156],
- ?line {STRes157,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP008.xsd','./msxsdtest/element',invalid),
+ {STRes157,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP008.xsd','./msxsdtest/element',invalid),
STResList158 = [STRes157|STResList157],
- ?line {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP009.xsd','./msxsdtest/element',invalid),
+ {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP009.xsd','./msxsdtest/element',invalid),
STResList159 = [STRes158|STResList158],
- ?line {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ001.xsd','./msxsdtest/element',valid),
+ {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ001.xsd','./msxsdtest/element',valid),
STResList160 = [STRes159|STResList159],
- ?line {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ002.xsd','./msxsdtest/element',valid),
+ {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ002.xsd','./msxsdtest/element',valid),
STResList161 = [STRes160|STResList160],
- ?line {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ003.xsd','./msxsdtest/element',valid),
+ {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ003.xsd','./msxsdtest/element',valid),
STResList162 = [STRes161|STResList161],
- ?line {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ004.xsd','./msxsdtest/element',invalid),
+ {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ004.xsd','./msxsdtest/element',invalid),
STResList163 = [STRes162|STResList162],
- ?line {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ005.xsd','./msxsdtest/element',valid),
+ {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ005.xsd','./msxsdtest/element',valid),
STResList164 = [STRes163|STResList163],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ006.xsd','./msxsdtest/element',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ006.xsd','./msxsdtest/element',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ007.xsd','./msxsdtest/element',valid),
+ {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ007.xsd','./msxsdtest/element',valid),
STResList166 = [STRes165|STResList165],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ007.xml','./msxsdtest/element',invalid,S165),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ007.xml','./msxsdtest/element',invalid,S165),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ008.xsd','./msxsdtest/element',valid),
+ {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ008.xsd','./msxsdtest/element',valid),
STResList167 = [STRes166|STResList166],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ008.xml','./msxsdtest/element',valid,S166),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ008.xml','./msxsdtest/element',valid,S166),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ009.xsd','./msxsdtest/element',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ009.xsd','./msxsdtest/element',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ009.xml','./msxsdtest/element',invalid,S167),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ009.xml','./msxsdtest/element',invalid,S167),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ010.xsd','./msxsdtest/element',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ010.xsd','./msxsdtest/element',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ010.xml','./msxsdtest/element',invalid,S168),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ010.xml','./msxsdtest/element',invalid,S168),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ011.xsd','./msxsdtest/element',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ011.xsd','./msxsdtest/element',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ011.xml','./msxsdtest/element',valid,S169),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ011.xml','./msxsdtest/element',valid,S169),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ012.xsd','./msxsdtest/element',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ012.xsd','./msxsdtest/element',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ012.xml','./msxsdtest/element',invalid,S170),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ012.xml','./msxsdtest/element',invalid,S170),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ013.xsd','./msxsdtest/element',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ013.xsd','./msxsdtest/element',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ013.xml','./msxsdtest/element',valid,S171),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ013.xml','./msxsdtest/element',valid,S171),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ014.xsd','./msxsdtest/element',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ014.xsd','./msxsdtest/element',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ014.xml','./msxsdtest/element',invalid,S172),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ014.xml','./msxsdtest/element',invalid,S172),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ015.xsd','./msxsdtest/element',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ015.xsd','./msxsdtest/element',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ015.xml','./msxsdtest/element',valid,S173),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ015.xml','./msxsdtest/element',valid,S173),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ016.xsd','./msxsdtest/element',valid),
+ {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ016.xsd','./msxsdtest/element',valid),
STResList175 = [STRes174|STResList174],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ017.xsd','./msxsdtest/element',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ017.xsd','./msxsdtest/element',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ017.xml','./msxsdtest/element',valid,S175),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ017.xml','./msxsdtest/element',valid,S175),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ018.xsd','./msxsdtest/element',valid),
+ {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ018.xsd','./msxsdtest/element',valid),
STResList177 = [STRes176|STResList176],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ018.xml','./msxsdtest/element',invalid,S176),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ018.xml','./msxsdtest/element',invalid,S176),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ019.xsd','./msxsdtest/element',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ019.xsd','./msxsdtest/element',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ019.xml','./msxsdtest/element',invalid,S177),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ019.xml','./msxsdtest/element',invalid,S177),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ020.xsd','./msxsdtest/element',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ020.xsd','./msxsdtest/element',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ020.xml','./msxsdtest/element',valid,S178),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ020.xml','./msxsdtest/element',valid,S178),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ021.xsd','./msxsdtest/element',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ021.xsd','./msxsdtest/element',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ021.xml','./msxsdtest/element',valid,S179),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ021.xml','./msxsdtest/element',valid,S179),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ022.xsd','./msxsdtest/element',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ022.xsd','./msxsdtest/element',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ022.xml','./msxsdtest/element',valid,S180),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ022.xml','./msxsdtest/element',valid,S180),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR001.xsd','./msxsdtest/element',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR001.xsd','./msxsdtest/element',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR001.xml','./msxsdtest/element',valid,S181),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR001.xml','./msxsdtest/element',valid,S181),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR002.xsd','./msxsdtest/element',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR002.xsd','./msxsdtest/element',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR002.xml','./msxsdtest/element',valid,S182),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR002.xml','./msxsdtest/element',valid,S182),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR003.xsd','./msxsdtest/element',invalid),
+ {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR003.xsd','./msxsdtest/element',invalid),
STResList184 = [STRes183|STResList183],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR004.xsd','./msxsdtest/element',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR004.xsd','./msxsdtest/element',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR004.xml','./msxsdtest/element',valid,S184),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR004.xml','./msxsdtest/element',valid,S184),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR005.xsd','./msxsdtest/element',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR005.xsd','./msxsdtest/element',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR005.xml','./msxsdtest/element',valid,S185),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR005.xml','./msxsdtest/element',valid,S185),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR006.xsd','./msxsdtest/element',invalid),
+ {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR006.xsd','./msxsdtest/element',invalid),
STResList187 = [STRes186|STResList186],
- ?line {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS001.xsd','./msxsdtest/element',invalid),
+ {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS001.xsd','./msxsdtest/element',invalid),
STResList188 = [STRes187|STResList187],
- ?line {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS002.xsd','./msxsdtest/element',valid),
+ {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS002.xsd','./msxsdtest/element',valid),
STResList189 = [STRes188|STResList188],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS002.xml','./msxsdtest/element',valid,S188),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS002.xml','./msxsdtest/element',valid,S188),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes189,S189} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS003.xsd','./msxsdtest/element',valid),
+ {STRes189,S189} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS003.xsd','./msxsdtest/element',valid),
STResList190 = [STRes189|STResList189],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS003.xml','./msxsdtest/element',valid,S189),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS003.xml','./msxsdtest/element',valid,S189),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS004.xsd','./msxsdtest/element',invalid),
+ {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS004.xsd','./msxsdtest/element',invalid),
STResList191 = [STRes190|STResList190],
- ?line {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS005.xsd','./msxsdtest/element',invalid),
+ {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS005.xsd','./msxsdtest/element',invalid),
STResList192 = [STRes191|STResList191],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS006.xsd','./msxsdtest/element',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS006.xsd','./msxsdtest/element',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS007.xsd','./msxsdtest/element',valid),
+ {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS007.xsd','./msxsdtest/element',valid),
STResList194 = [STRes193|STResList193],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS007.xml','./msxsdtest/element',valid,S193),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS007.xml','./msxsdtest/element',valid,S193),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes194,S194} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS008.xsd','./msxsdtest/element',valid),
+ {STRes194,S194} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS008.xsd','./msxsdtest/element',valid),
STResList195 = [STRes194|STResList194],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS008.xml','./msxsdtest/element',valid,S194),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS008.xml','./msxsdtest/element',valid,S194),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT001.xsd','./msxsdtest/element',valid),
+ {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT001.xsd','./msxsdtest/element',valid),
STResList196 = [STRes195|STResList195],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT001.xml','./msxsdtest/element',invalid,S195),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT001.xml','./msxsdtest/element',invalid,S195),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes196,S196} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT002.xsd','./msxsdtest/element',valid),
+ {STRes196,S196} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT002.xsd','./msxsdtest/element',valid),
STResList197 = [STRes196|STResList196],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT002.xml','./msxsdtest/element',valid,S196),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT002.xml','./msxsdtest/element',valid,S196),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT003.xsd','./msxsdtest/element',valid),
+ {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT003.xsd','./msxsdtest/element',valid),
STResList198 = [STRes197|STResList197],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT003.xml','./msxsdtest/element',valid,S197),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT003.xml','./msxsdtest/element',valid,S197),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT004.xsd','./msxsdtest/element',valid),
+ {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT004.xsd','./msxsdtest/element',valid),
STResList199 = [STRes198|STResList198],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT004.xml','./msxsdtest/element',invalid,S198),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT004.xml','./msxsdtest/element',invalid,S198),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT005.xsd','./msxsdtest/element',valid),
+ {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT005.xsd','./msxsdtest/element',valid),
STResList200 = [STRes199|STResList199],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT005.xml','./msxsdtest/element',invalid,S199),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT005.xml','./msxsdtest/element',invalid,S199),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT006.xsd','./msxsdtest/element',valid),
+ {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT006.xsd','./msxsdtest/element',valid),
STResList201 = [STRes200|STResList200],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT006.xml','./msxsdtest/element',invalid,S200),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT006.xml','./msxsdtest/element',invalid,S200),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT007.xsd','./msxsdtest/element',valid),
+ {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT007.xsd','./msxsdtest/element',valid),
STResList202 = [STRes201|STResList201],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT007.xml','./msxsdtest/element',valid,S201),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT007.xml','./msxsdtest/element',valid,S201),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT008.xsd','./msxsdtest/element',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT008.xsd','./msxsdtest/element',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT008.xml','./msxsdtest/element',valid,S202),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT008.xml','./msxsdtest/element',valid,S202),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT009.xsd','./msxsdtest/element',invalid),
+ {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT009.xsd','./msxsdtest/element',invalid),
STResList204 = [STRes203|STResList203],
- ?line {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT010.xsd','./msxsdtest/element',invalid),
+ {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT010.xsd','./msxsdtest/element',invalid),
STResList205 = [STRes204|STResList204],
- ?line {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT011.xsd','./msxsdtest/element',valid),
+ {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT011.xsd','./msxsdtest/element',valid),
STResList206 = [STRes205|STResList205],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT011.xml','./msxsdtest/element',invalid,S205),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT011.xml','./msxsdtest/element',invalid,S205),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT012.xsd','./msxsdtest/element',valid),
+ {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT012.xsd','./msxsdtest/element',valid),
STResList207 = [STRes206|STResList206],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT012.xml','./msxsdtest/element',invalid,S206),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT012.xml','./msxsdtest/element',invalid,S206),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT013.xsd','./msxsdtest/element',valid),
+ {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT013.xsd','./msxsdtest/element',valid),
STResList208 = [STRes207|STResList207],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT013.xml','./msxsdtest/element',invalid,S207),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT013.xml','./msxsdtest/element',invalid,S207),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT014.xsd','./msxsdtest/element',valid),
+ {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT014.xsd','./msxsdtest/element',valid),
STResList209 = [STRes208|STResList208],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT014.xml','./msxsdtest/element',valid,S208),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT014.xml','./msxsdtest/element',valid,S208),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT015.xsd','./msxsdtest/element',valid),
+ {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT015.xsd','./msxsdtest/element',valid),
STResList210 = [STRes209|STResList209],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT015.xml','./msxsdtest/element',valid,S209),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT015.xml','./msxsdtest/element',valid,S209),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT016.xsd','./msxsdtest/element',valid),
+ {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT016.xsd','./msxsdtest/element',valid),
STResList211 = [STRes210|STResList210],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT016.xml','./msxsdtest/element',valid,S210),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT016.xml','./msxsdtest/element',valid,S210),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT017.xsd','./msxsdtest/element',valid),
+ {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT017.xsd','./msxsdtest/element',valid),
STResList212 = [STRes211|STResList211],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT017.xml','./msxsdtest/element',invalid,S211),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT017.xml','./msxsdtest/element',invalid,S211),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT018.xsd','./msxsdtest/element',valid),
+ {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT018.xsd','./msxsdtest/element',valid),
STResList213 = [STRes212|STResList212],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT018.xml','./msxsdtest/element',invalid,S212),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT018.xml','./msxsdtest/element',invalid,S212),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT019.xsd','./msxsdtest/element',valid),
+ {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT019.xsd','./msxsdtest/element',valid),
STResList214 = [STRes213|STResList213],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT019.xml','./msxsdtest/element',invalid,S213),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT019.xml','./msxsdtest/element',invalid,S213),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT022.xsd','./msxsdtest/element',valid),
+ {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT022.xsd','./msxsdtest/element',valid),
STResList215 = [STRes214|STResList214],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT022.xml','./msxsdtest/element',valid,S214),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT022.xml','./msxsdtest/element',valid,S214),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT024.xsd','./msxsdtest/element',valid),
+ {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT024.xsd','./msxsdtest/element',valid),
STResList216 = [STRes215|STResList215],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT024.xml','./msxsdtest/element',invalid,S215),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT024.xml','./msxsdtest/element',invalid,S215),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT025.xsd','./msxsdtest/element',valid),
+ {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT025.xsd','./msxsdtest/element',valid),
STResList217 = [STRes216|STResList216],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT025.xml','./msxsdtest/element',valid,S216),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT025.xml','./msxsdtest/element',valid,S216),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT026.xsd','./msxsdtest/element',valid),
+ {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT026.xsd','./msxsdtest/element',valid),
STResList218 = [STRes217|STResList217],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT026.xml','./msxsdtest/element',valid,S217),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT026.xml','./msxsdtest/element',valid,S217),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT027.xsd','./msxsdtest/element',valid),
+ {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT027.xsd','./msxsdtest/element',valid),
STResList219 = [STRes218|STResList218],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT027.xml','./msxsdtest/element',valid,S218),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT027.xml','./msxsdtest/element',valid,S218),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT028.xsd','./msxsdtest/element',valid),
+ {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT028.xsd','./msxsdtest/element',valid),
STResList220 = [STRes219|STResList219],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT028.xml','./msxsdtest/element',valid,S219),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT028.xml','./msxsdtest/element',valid,S219),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT029.xsd','./msxsdtest/element',valid),
+ {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT029.xsd','./msxsdtest/element',valid),
STResList221 = [STRes220|STResList220],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT029.xml','./msxsdtest/element',valid,S220),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT029.xml','./msxsdtest/element',valid,S220),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT030.xsd','./msxsdtest/element',valid),
+ {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT030.xsd','./msxsdtest/element',valid),
STResList222 = [STRes221|STResList221],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT030.xml','./msxsdtest/element',valid,S221),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT030.xml','./msxsdtest/element',valid,S221),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT031.xsd','./msxsdtest/element',valid),
+ {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT031.xsd','./msxsdtest/element',valid),
STResList223 = [STRes222|STResList222],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT031.xml','./msxsdtest/element',invalid,S222),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT031.xml','./msxsdtest/element',invalid,S222),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT032.xsd','./msxsdtest/element',valid),
+ {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT032.xsd','./msxsdtest/element',valid),
STResList224 = [STRes223|STResList223],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT032.xml','./msxsdtest/element',valid,S223),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT032.xml','./msxsdtest/element',valid,S223),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT033.xsd','./msxsdtest/element',valid),
+ {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT033.xsd','./msxsdtest/element',valid),
STResList225 = [STRes224|STResList224],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT033.xml','./msxsdtest/element',invalid,S224),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT033.xml','./msxsdtest/element',invalid,S224),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT038.xsd','./msxsdtest/element',valid),
+ {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT038.xsd','./msxsdtest/element',valid),
STResList226 = [STRes225|STResList225],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT038.xml','./msxsdtest/element',valid,S225),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT038.xml','./msxsdtest/element',valid,S225),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT039.xsd','./msxsdtest/element',valid),
+ {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT039.xsd','./msxsdtest/element',valid),
STResList227 = [STRes226|STResList226],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT039.xml','./msxsdtest/element',invalid,S226),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT039.xml','./msxsdtest/element',invalid,S226),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT040.xsd','./msxsdtest/element',valid),
+ {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT040.xsd','./msxsdtest/element',valid),
STResList228 = [STRes227|STResList227],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT040.xml','./msxsdtest/element',valid,S227),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT040.xml','./msxsdtest/element',valid,S227),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes228,S228} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT041.xsd','./msxsdtest/element',valid),
+ {STRes228,S228} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT041.xsd','./msxsdtest/element',valid),
STResList229 = [STRes228|STResList228],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT041.xml','./msxsdtest/element',valid,S228),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT041.xml','./msxsdtest/element',valid,S228),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT042.xsd','./msxsdtest/element',valid),
+ {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT042.xsd','./msxsdtest/element',valid),
STResList230 = [STRes229|STResList229],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT042.xml','./msxsdtest/element',valid,S229),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT042.xml','./msxsdtest/element',valid,S229),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT043.xsd','./msxsdtest/element',valid),
+ {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT043.xsd','./msxsdtest/element',valid),
STResList231 = [STRes230|STResList230],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT043.xml','./msxsdtest/element',valid,S230),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT043.xml','./msxsdtest/element',valid,S230),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes231,S231} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT044.xsd','./msxsdtest/element',valid),
+ {STRes231,S231} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT044.xsd','./msxsdtest/element',valid),
STResList232 = [STRes231|STResList231],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT044.xml','./msxsdtest/element',valid,S231),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT044.xml','./msxsdtest/element',valid,S231),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes232,S232} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT045.xsd','./msxsdtest/element',valid),
+ {STRes232,S232} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT045.xsd','./msxsdtest/element',valid),
STResList233 = [STRes232|STResList232],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT045.xml','./msxsdtest/element',invalid,S232),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT045.xml','./msxsdtest/element',invalid,S232),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT046.xsd','./msxsdtest/element',valid),
+ {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT046.xsd','./msxsdtest/element',valid),
STResList234 = [STRes233|STResList233],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT046.xml','./msxsdtest/element',invalid,S233),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT046.xml','./msxsdtest/element',invalid,S233),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT047.xsd','./msxsdtest/element',valid),
+ {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT047.xsd','./msxsdtest/element',valid),
STResList235 = [STRes234|STResList234],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT047.xml','./msxsdtest/element',invalid,S234),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT047.xml','./msxsdtest/element',invalid,S234),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT048.xsd','./msxsdtest/element',valid),
+ {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT048.xsd','./msxsdtest/element',valid),
STResList236 = [STRes235|STResList235],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT048.xml','./msxsdtest/element',invalid,S235),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT048.xml','./msxsdtest/element',invalid,S235),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT049.xsd','./msxsdtest/element',valid),
+ {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT049.xsd','./msxsdtest/element',valid),
STResList237 = [STRes236|STResList236],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT049.xml','./msxsdtest/element',invalid,S236),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT049.xml','./msxsdtest/element',invalid,S236),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes237,S237} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT050.xsd','./msxsdtest/element',valid),
+ {STRes237,S237} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT050.xsd','./msxsdtest/element',valid),
STResList238 = [STRes237|STResList237],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT050.xml','./msxsdtest/element',invalid,S237),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT050.xml','./msxsdtest/element',invalid,S237),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT051.xsd','./msxsdtest/element',valid),
+ {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT051.xsd','./msxsdtest/element',valid),
STResList239 = [STRes238|STResList238],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT051.xml','./msxsdtest/element',invalid,S238),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT051.xml','./msxsdtest/element',invalid,S238),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes239,S239} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT052.xsd','./msxsdtest/element',valid),
+ {STRes239,S239} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT052.xsd','./msxsdtest/element',valid),
STResList240 = [STRes239|STResList239],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT052.xml','./msxsdtest/element',invalid,S239),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT052.xml','./msxsdtest/element',invalid,S239),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes240,S240} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT053.xsd','./msxsdtest/element',valid),
+ {STRes240,S240} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT053.xsd','./msxsdtest/element',valid),
STResList241 = [STRes240|STResList240],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT053.xml','./msxsdtest/element',invalid,S240),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT053.xml','./msxsdtest/element',invalid,S240),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes241,S241} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT054.xsd','./msxsdtest/element',valid),
+ {STRes241,S241} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT054.xsd','./msxsdtest/element',valid),
STResList242 = [STRes241|STResList241],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT054.xml','./msxsdtest/element',invalid,S241),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT054.xml','./msxsdtest/element',invalid,S241),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes242,S242} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT055.xsd','./msxsdtest/element',valid),
+ {STRes242,S242} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT055.xsd','./msxsdtest/element',valid),
STResList243 = [STRes242|STResList242],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT055.xml','./msxsdtest/element',invalid,S242),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT055.xml','./msxsdtest/element',invalid,S242),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes243,S243} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT056.xsd','./msxsdtest/element',valid),
+ {STRes243,S243} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT056.xsd','./msxsdtest/element',valid),
STResList244 = [STRes243|STResList243],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT056.xml','./msxsdtest/element',invalid,S243),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT056.xml','./msxsdtest/element',invalid,S243),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT057.xsd','./msxsdtest/element',valid),
+ {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT057.xsd','./msxsdtest/element',valid),
STResList245 = [STRes244|STResList244],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT057.xml','./msxsdtest/element',invalid,S244),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT057.xml','./msxsdtest/element',invalid,S244),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT058.xsd','./msxsdtest/element',valid),
+ {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT058.xsd','./msxsdtest/element',valid),
STResList246 = [STRes245|STResList245],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT058.xml','./msxsdtest/element',valid,S245),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT058.xml','./msxsdtest/element',valid,S245),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT074.xsd','./msxsdtest/element',valid),
+ {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT074.xsd','./msxsdtest/element',valid),
STResList247 = [STRes246|STResList246],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT074.xml','./msxsdtest/element',invalid,S246),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT074.xml','./msxsdtest/element',invalid,S246),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes247,S247} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU001.xsd','./msxsdtest/element',valid),
+ {STRes247,S247} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU001.xsd','./msxsdtest/element',valid),
STResList248 = [STRes247|STResList247],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU001.xml','./msxsdtest/element',valid,S247),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU001.xml','./msxsdtest/element',valid,S247),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU002.xsd','./msxsdtest/element',valid),
+ {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU002.xsd','./msxsdtest/element',valid),
STResList249 = [STRes248|STResList248],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU002.xml','./msxsdtest/element',valid,S248),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU002.xml','./msxsdtest/element',valid,S248),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU003.xsd','./msxsdtest/element',valid),
+ {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU003.xsd','./msxsdtest/element',valid),
STResList250 = [STRes249|STResList249],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU003.xml','./msxsdtest/element',valid,S249),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU003.xml','./msxsdtest/element',valid,S249),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU004.xsd','./msxsdtest/element',valid),
+ {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU004.xsd','./msxsdtest/element',valid),
STResList251 = [STRes250|STResList250],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU004.xml','./msxsdtest/element',valid,S250),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU004.xml','./msxsdtest/element',valid,S250),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU005.xsd','./msxsdtest/element',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU005.xsd','./msxsdtest/element',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU005.xml','./msxsdtest/element',valid,S251),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU005.xml','./msxsdtest/element',valid,S251),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU006.xsd','./msxsdtest/element',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU006.xsd','./msxsdtest/element',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU006.xml','./msxsdtest/element',valid,S252),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU006.xml','./msxsdtest/element',valid,S252),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU007.xsd','./msxsdtest/element',valid),
+ {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU007.xsd','./msxsdtest/element',valid),
STResList254 = [STRes253|STResList253],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU007.xml','./msxsdtest/element',valid,S253),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU007.xml','./msxsdtest/element',valid,S253),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU008.xsd','./msxsdtest/element',valid),
+ {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU008.xsd','./msxsdtest/element',valid),
STResList255 = [STRes254|STResList254],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU008.xml','./msxsdtest/element',valid,S254),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU008.xml','./msxsdtest/element',valid,S254),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU009.xsd','./msxsdtest/element',valid),
+ {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU009.xsd','./msxsdtest/element',valid),
STResList256 = [STRes255|STResList255],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU009.xml','./msxsdtest/element',valid,S255),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU009.xml','./msxsdtest/element',valid,S255),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU010.xsd','./msxsdtest/element',valid),
+ {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU010.xsd','./msxsdtest/element',valid),
STResList257 = [STRes256|STResList256],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU010.xml','./msxsdtest/element',valid,S256),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU010.xml','./msxsdtest/element',valid,S256),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU011.xsd','./msxsdtest/element',valid),
+ {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU011.xsd','./msxsdtest/element',valid),
STResList258 = [STRes257|STResList257],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU011.xml','./msxsdtest/element',valid,S257),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU011.xml','./msxsdtest/element',valid,S257),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU012.xsd','./msxsdtest/element',valid),
+ {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU012.xsd','./msxsdtest/element',valid),
STResList259 = [STRes258|STResList258],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU012.xml','./msxsdtest/element',valid,S258),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU012.xml','./msxsdtest/element',valid,S258),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU013.xsd','./msxsdtest/element',valid),
+ {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU013.xsd','./msxsdtest/element',valid),
STResList260 = [STRes259|STResList259],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU013.xml','./msxsdtest/element',valid,S259),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU013.xml','./msxsdtest/element',valid,S259),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU014.xsd','./msxsdtest/element',valid),
+ {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU014.xsd','./msxsdtest/element',valid),
STResList261 = [STRes260|STResList260],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU014.xml','./msxsdtest/element',valid,S260),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU014.xml','./msxsdtest/element',valid,S260),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU015.xsd','./msxsdtest/element',valid),
+ {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU015.xsd','./msxsdtest/element',valid),
STResList262 = [STRes261|STResList261],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU015.xml','./msxsdtest/element',valid,S261),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU015.xml','./msxsdtest/element',valid,S261),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU017.xsd','./msxsdtest/element',valid),
+ {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU017.xsd','./msxsdtest/element',valid),
STResList263 = [STRes262|STResList262],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU017.xml','./msxsdtest/element',valid,S262),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU017.xml','./msxsdtest/element',valid,S262),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU018.xsd','./msxsdtest/element',valid),
+ {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU018.xsd','./msxsdtest/element',valid),
STResList264 = [STRes263|STResList263],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU018.xml','./msxsdtest/element',valid,S263),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU018.xml','./msxsdtest/element',valid,S263),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU019.xsd','./msxsdtest/element',valid),
+ {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU019.xsd','./msxsdtest/element',valid),
STResList265 = [STRes264|STResList264],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU019.xml','./msxsdtest/element',valid,S264),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU019.xml','./msxsdtest/element',valid,S264),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU020.xsd','./msxsdtest/element',valid),
+ {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU020.xsd','./msxsdtest/element',valid),
STResList266 = [STRes265|STResList265],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU020.xml','./msxsdtest/element',valid,S265),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU020.xml','./msxsdtest/element',valid,S265),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU021.xsd','./msxsdtest/element',valid),
+ {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU021.xsd','./msxsdtest/element',valid),
STResList267 = [STRes266|STResList266],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU021.xml','./msxsdtest/element',valid,S266),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU021.xml','./msxsdtest/element',valid,S266),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU022.xsd','./msxsdtest/element',valid),
+ {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU022.xsd','./msxsdtest/element',valid),
STResList268 = [STRes267|STResList267],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU022.xml','./msxsdtest/element',valid,S267),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU022.xml','./msxsdtest/element',valid,S267),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU023.xsd','./msxsdtest/element',valid),
+ {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU023.xsd','./msxsdtest/element',valid),
STResList269 = [STRes268|STResList268],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU023.xml','./msxsdtest/element',valid,S268),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU023.xml','./msxsdtest/element',valid,S268),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU024.xsd','./msxsdtest/element',valid),
+ {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU024.xsd','./msxsdtest/element',valid),
STResList270 = [STRes269|STResList269],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU024.xml','./msxsdtest/element',valid,S269),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU024.xml','./msxsdtest/element',valid,S269),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU025.xsd','./msxsdtest/element',valid),
+ {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU025.xsd','./msxsdtest/element',valid),
STResList271 = [STRes270|STResList270],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU025.xml','./msxsdtest/element',invalid,S270),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU025.xml','./msxsdtest/element',invalid,S270),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ001.xsd','./msxsdtest/element',valid),
+ {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ001.xsd','./msxsdtest/element',valid),
STResList272 = [STRes271|STResList271],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ001.xml','./msxsdtest/element',invalid,S271),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ001.xml','./msxsdtest/element',invalid,S271),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ002.xsd','./msxsdtest/element',valid),
+ {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ002.xsd','./msxsdtest/element',valid),
STResList273 = [STRes272|STResList272],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ002.xml','./msxsdtest/element',valid,S272),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ002.xml','./msxsdtest/element',valid,S272),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ003.xsd','./msxsdtest/element',valid),
+ {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ003.xsd','./msxsdtest/element',valid),
STResList274 = [STRes273|STResList273],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ003.xml','./msxsdtest/element',valid,S273),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ003.xml','./msxsdtest/element',valid,S273),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ004.xsd','./msxsdtest/element',valid),
+ {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ004.xsd','./msxsdtest/element',valid),
STResList275 = [STRes274|STResList274],
- ?line {STRes275,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ005.xsd','./msxsdtest/element',valid),
+ {STRes275,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ005.xsd','./msxsdtest/element',valid),
STResList276 = [STRes275|STResList275],
@@ -5747,1148 +5735,1148 @@ elem(Config) when is_list(Config) ->
model_group(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA001.xsd','./msxsdtest/Group',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA001.xsd','./msxsdtest/Group',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA002.xsd','./msxsdtest/Group',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA002.xsd','./msxsdtest/Group',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA003.xsd','./msxsdtest/Group',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA003.xsd','./msxsdtest/Group',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA004.xsd','./msxsdtest/Group',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA004.xsd','./msxsdtest/Group',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA005.xsd','./msxsdtest/Group',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA005.xsd','./msxsdtest/Group',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA006.xsd','./msxsdtest/Group',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA006.xsd','./msxsdtest/Group',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA007.xsd','./msxsdtest/Group',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA007.xsd','./msxsdtest/Group',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA008.xsd','./msxsdtest/Group',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA008.xsd','./msxsdtest/Group',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA009.xsd','./msxsdtest/Group',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA009.xsd','./msxsdtest/Group',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA010.xsd','./msxsdtest/Group',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA010.xsd','./msxsdtest/Group',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA011.xsd','./msxsdtest/Group',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA011.xsd','./msxsdtest/Group',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA012.xsd','./msxsdtest/Group',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA012.xsd','./msxsdtest/Group',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB001.xsd','./msxsdtest/Group',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB001.xsd','./msxsdtest/Group',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB002.xsd','./msxsdtest/Group',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB002.xsd','./msxsdtest/Group',valid),
STResList14 = [STRes13|STResList13],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB002.xml','./msxsdtest/Group',valid,S13),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB002.xml','./msxsdtest/Group',valid,S13),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB003.xsd','./msxsdtest/Group',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB003.xsd','./msxsdtest/Group',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB003.xml','./msxsdtest/Group',valid,S14),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB003.xml','./msxsdtest/Group',valid,S14),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB004.xsd','./msxsdtest/Group',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB004.xsd','./msxsdtest/Group',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB004.xml','./msxsdtest/Group',valid,S15),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB004.xml','./msxsdtest/Group',valid,S15),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB005.xsd','./msxsdtest/Group',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB005.xsd','./msxsdtest/Group',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB005.xml','./msxsdtest/Group',valid,S16),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB005.xml','./msxsdtest/Group',valid,S16),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB006.xsd','./msxsdtest/Group',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB006.xsd','./msxsdtest/Group',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB006.xml','./msxsdtest/Group',valid,S17),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB006.xml','./msxsdtest/Group',valid,S17),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB007.xsd','./msxsdtest/Group',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB007.xsd','./msxsdtest/Group',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB008.xsd','./msxsdtest/Group',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB008.xsd','./msxsdtest/Group',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB009.xsd','./msxsdtest/Group',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB009.xsd','./msxsdtest/Group',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB009.xml','./msxsdtest/Group',valid,S20),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB009.xml','./msxsdtest/Group',valid,S20),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB010.xsd','./msxsdtest/Group',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB010.xsd','./msxsdtest/Group',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB010.xml','./msxsdtest/Group',valid,S21),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB010.xml','./msxsdtest/Group',valid,S21),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB011.xsd','./msxsdtest/Group',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB011.xsd','./msxsdtest/Group',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB012.xsd','./msxsdtest/Group',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB012.xsd','./msxsdtest/Group',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB013.xsd','./msxsdtest/Group',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB013.xsd','./msxsdtest/Group',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB014.xsd','./msxsdtest/Group',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB014.xsd','./msxsdtest/Group',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB015.xsd','./msxsdtest/Group',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB015.xsd','./msxsdtest/Group',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB016.xsd','./msxsdtest/Group',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB016.xsd','./msxsdtest/Group',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB017.xsd','./msxsdtest/Group',valid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB017.xsd','./msxsdtest/Group',valid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC001.xsd','./msxsdtest/Group',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC001.xsd','./msxsdtest/Group',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC002.xsd','./msxsdtest/Group',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC002.xsd','./msxsdtest/Group',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC003.xsd','./msxsdtest/Group',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC003.xsd','./msxsdtest/Group',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC004.xsd','./msxsdtest/Group',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC004.xsd','./msxsdtest/Group',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC005.xsd','./msxsdtest/Group',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC005.xsd','./msxsdtest/Group',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC006.xsd','./msxsdtest/Group',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC006.xsd','./msxsdtest/Group',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC007.xsd','./msxsdtest/Group',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC007.xsd','./msxsdtest/Group',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC008.xsd','./msxsdtest/Group',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC008.xsd','./msxsdtest/Group',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC009.xsd','./msxsdtest/Group',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC009.xsd','./msxsdtest/Group',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC010.xsd','./msxsdtest/Group',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC010.xsd','./msxsdtest/Group',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC011.xsd','./msxsdtest/Group',valid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC011.xsd','./msxsdtest/Group',valid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC012.xsd','./msxsdtest/Group',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC012.xsd','./msxsdtest/Group',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD001.xsd','./msxsdtest/Group',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD001.xsd','./msxsdtest/Group',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD002.xsd','./msxsdtest/Group',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD002.xsd','./msxsdtest/Group',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD003.xsd','./msxsdtest/Group',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD003.xsd','./msxsdtest/Group',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD004.xsd','./msxsdtest/Group',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD004.xsd','./msxsdtest/Group',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE001.xsd','./msxsdtest/Group',valid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE001.xsd','./msxsdtest/Group',valid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE002.xsd','./msxsdtest/Group',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE002.xsd','./msxsdtest/Group',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE003.xsd','./msxsdtest/Group',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE003.xsd','./msxsdtest/Group',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE003.xml','./msxsdtest/Group',invalid,S47),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE003.xml','./msxsdtest/Group',invalid,S47),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE004.xsd','./msxsdtest/Group',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE004.xsd','./msxsdtest/Group',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE004.xml','./msxsdtest/Group',valid,S48),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE004.xml','./msxsdtest/Group',valid,S48),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE005.xsd','./msxsdtest/Group',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE005.xsd','./msxsdtest/Group',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE005.xml','./msxsdtest/Group',invalid,S49),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE005.xml','./msxsdtest/Group',invalid,S49),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF001.xsd','./msxsdtest/Group',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF001.xsd','./msxsdtest/Group',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF001.xml','./msxsdtest/Group',valid,S50),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF001.xml','./msxsdtest/Group',valid,S50),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF002.xsd','./msxsdtest/Group',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF002.xsd','./msxsdtest/Group',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF002.xml','./msxsdtest/Group',valid,S51),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF002.xml','./msxsdtest/Group',valid,S51),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF003.xsd','./msxsdtest/Group',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF003.xsd','./msxsdtest/Group',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF003.xml','./msxsdtest/Group',invalid,S52),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF003.xml','./msxsdtest/Group',invalid,S52),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF004.xsd','./msxsdtest/Group',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF004.xsd','./msxsdtest/Group',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF004.xml','./msxsdtest/Group',valid,S53),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF004.xml','./msxsdtest/Group',valid,S53),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF005.xsd','./msxsdtest/Group',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF005.xsd','./msxsdtest/Group',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF005.xml','./msxsdtest/Group',valid,S54),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF005.xml','./msxsdtest/Group',valid,S54),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF006.xsd','./msxsdtest/Group',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF006.xsd','./msxsdtest/Group',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF006.xml','./msxsdtest/Group',invalid,S55),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF006.xml','./msxsdtest/Group',invalid,S55),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF007.xsd','./msxsdtest/Group',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF007.xsd','./msxsdtest/Group',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF007.xml','./msxsdtest/Group',valid,S56),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF007.xml','./msxsdtest/Group',valid,S56),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF008.xsd','./msxsdtest/Group',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF008.xsd','./msxsdtest/Group',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF008.xml','./msxsdtest/Group',invalid,S57),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF008.xml','./msxsdtest/Group',invalid,S57),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF009.xsd','./msxsdtest/Group',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF009.xsd','./msxsdtest/Group',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF009.xml','./msxsdtest/Group',valid,S58),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF009.xml','./msxsdtest/Group',valid,S58),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF010.xsd','./msxsdtest/Group',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF010.xsd','./msxsdtest/Group',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF010.xml','./msxsdtest/Group',invalid,S59),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF010.xml','./msxsdtest/Group',invalid,S59),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF011.xsd','./msxsdtest/Group',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF011.xsd','./msxsdtest/Group',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF011.xml','./msxsdtest/Group',valid,S60),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF011.xml','./msxsdtest/Group',valid,S60),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF012.xsd','./msxsdtest/Group',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF012.xsd','./msxsdtest/Group',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF012.xml','./msxsdtest/Group',invalid,S61),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF012.xml','./msxsdtest/Group',invalid,S61),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF013.xsd','./msxsdtest/Group',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF013.xsd','./msxsdtest/Group',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF013.xml','./msxsdtest/Group',invalid,S62),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF013.xml','./msxsdtest/Group',invalid,S62),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF014.xsd','./msxsdtest/Group',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF014.xsd','./msxsdtest/Group',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF014.xml','./msxsdtest/Group',valid,S63),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF014.xml','./msxsdtest/Group',valid,S63),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF015.xsd','./msxsdtest/Group',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF015.xsd','./msxsdtest/Group',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF015.xml','./msxsdtest/Group',invalid,S64),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF015.xml','./msxsdtest/Group',invalid,S64),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF016.xsd','./msxsdtest/Group',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF016.xsd','./msxsdtest/Group',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF016.xml','./msxsdtest/Group',invalid,S65),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF016.xml','./msxsdtest/Group',invalid,S65),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF017.xsd','./msxsdtest/Group',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF017.xsd','./msxsdtest/Group',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF017.xml','./msxsdtest/Group',valid,S66),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF017.xml','./msxsdtest/Group',valid,S66),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF018.xsd','./msxsdtest/Group',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF018.xsd','./msxsdtest/Group',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF018.xml','./msxsdtest/Group',valid,S67),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF018.xml','./msxsdtest/Group',valid,S67),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF019.xsd','./msxsdtest/Group',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF019.xsd','./msxsdtest/Group',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF019.xml','./msxsdtest/Group',invalid,S68),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF019.xml','./msxsdtest/Group',invalid,S68),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF020.xsd','./msxsdtest/Group',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF020.xsd','./msxsdtest/Group',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF021.xsd','./msxsdtest/Group',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF021.xsd','./msxsdtest/Group',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF021.xml','./msxsdtest/Group',valid,S70),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF021.xml','./msxsdtest/Group',valid,S70),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF022.xsd','./msxsdtest/Group',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF022.xsd','./msxsdtest/Group',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF023.xsd','./msxsdtest/Group',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF023.xsd','./msxsdtest/Group',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF024.xsd','./msxsdtest/Group',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF024.xsd','./msxsdtest/Group',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF025.xsd','./msxsdtest/Group',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF025.xsd','./msxsdtest/Group',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG001.xsd','./msxsdtest/Group',valid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG001.xsd','./msxsdtest/Group',valid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG002.xsd','./msxsdtest/Group',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG002.xsd','./msxsdtest/Group',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG003.xsd','./msxsdtest/Group',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG003.xsd','./msxsdtest/Group',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG003.xml','./msxsdtest/Group',invalid,S77),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG003.xml','./msxsdtest/Group',invalid,S77),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG004.xsd','./msxsdtest/Group',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG004.xsd','./msxsdtest/Group',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG004.xml','./msxsdtest/Group',valid,S78),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG004.xml','./msxsdtest/Group',valid,S78),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG005.xsd','./msxsdtest/Group',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG005.xsd','./msxsdtest/Group',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG005.xml','./msxsdtest/Group',invalid,S79),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG005.xml','./msxsdtest/Group',invalid,S79),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH001.xsd','./msxsdtest/Group',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH001.xsd','./msxsdtest/Group',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH001.xml','./msxsdtest/Group',valid,S80),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH001.xml','./msxsdtest/Group',valid,S80),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH002.xsd','./msxsdtest/Group',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH002.xsd','./msxsdtest/Group',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH002.xml','./msxsdtest/Group',valid,S81),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH002.xml','./msxsdtest/Group',valid,S81),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH003.xsd','./msxsdtest/Group',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH003.xsd','./msxsdtest/Group',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH003.xml','./msxsdtest/Group',invalid,S82),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH003.xml','./msxsdtest/Group',invalid,S82),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH004.xsd','./msxsdtest/Group',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH004.xsd','./msxsdtest/Group',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH004.xml','./msxsdtest/Group',valid,S83),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH004.xml','./msxsdtest/Group',valid,S83),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH005.xsd','./msxsdtest/Group',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH005.xsd','./msxsdtest/Group',valid),
STResList85 = [STRes84|STResList84],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH005.xml','./msxsdtest/Group',valid,S84),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH005.xml','./msxsdtest/Group',valid,S84),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH006.xsd','./msxsdtest/Group',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH006.xsd','./msxsdtest/Group',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH006.xml','./msxsdtest/Group',invalid,S85),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH006.xml','./msxsdtest/Group',invalid,S85),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH007.xsd','./msxsdtest/Group',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH007.xsd','./msxsdtest/Group',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH007.xml','./msxsdtest/Group',valid,S86),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH007.xml','./msxsdtest/Group',valid,S86),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH008.xsd','./msxsdtest/Group',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH008.xsd','./msxsdtest/Group',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH008.xml','./msxsdtest/Group',invalid,S87),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH008.xml','./msxsdtest/Group',invalid,S87),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH009.xsd','./msxsdtest/Group',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH009.xsd','./msxsdtest/Group',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH009.xml','./msxsdtest/Group',valid,S88),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH009.xml','./msxsdtest/Group',valid,S88),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH010.xsd','./msxsdtest/Group',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH010.xsd','./msxsdtest/Group',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH010.xml','./msxsdtest/Group',invalid,S89),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH010.xml','./msxsdtest/Group',invalid,S89),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH011.xsd','./msxsdtest/Group',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH011.xsd','./msxsdtest/Group',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH011.xml','./msxsdtest/Group',valid,S90),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH011.xml','./msxsdtest/Group',valid,S90),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH012.xsd','./msxsdtest/Group',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH012.xsd','./msxsdtest/Group',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH012.xml','./msxsdtest/Group',invalid,S91),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH012.xml','./msxsdtest/Group',invalid,S91),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH013.xsd','./msxsdtest/Group',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH013.xsd','./msxsdtest/Group',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH013.xml','./msxsdtest/Group',invalid,S92),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH013.xml','./msxsdtest/Group',invalid,S92),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH014.xsd','./msxsdtest/Group',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH014.xsd','./msxsdtest/Group',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH014.xml','./msxsdtest/Group',valid,S93),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH014.xml','./msxsdtest/Group',valid,S93),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH015.xsd','./msxsdtest/Group',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH015.xsd','./msxsdtest/Group',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH015.xml','./msxsdtest/Group',invalid,S94),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH015.xml','./msxsdtest/Group',invalid,S94),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH016.xsd','./msxsdtest/Group',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH016.xsd','./msxsdtest/Group',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH016.xml','./msxsdtest/Group',invalid,S95),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH016.xml','./msxsdtest/Group',invalid,S95),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH017.xsd','./msxsdtest/Group',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH017.xsd','./msxsdtest/Group',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH017.xml','./msxsdtest/Group',valid,S96),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH017.xml','./msxsdtest/Group',valid,S96),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH018.xsd','./msxsdtest/Group',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH018.xsd','./msxsdtest/Group',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH018.xml','./msxsdtest/Group',valid,S97),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH018.xml','./msxsdtest/Group',valid,S97),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH019.xsd','./msxsdtest/Group',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH019.xsd','./msxsdtest/Group',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH019.xml','./msxsdtest/Group',invalid,S98),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH019.xml','./msxsdtest/Group',invalid,S98),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH020.xsd','./msxsdtest/Group',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH020.xsd','./msxsdtest/Group',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH021.xsd','./msxsdtest/Group',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH021.xsd','./msxsdtest/Group',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH021.xml','./msxsdtest/Group',valid,S100),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH021.xml','./msxsdtest/Group',valid,S100),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH022.xsd','./msxsdtest/Group',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH022.xsd','./msxsdtest/Group',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH023.xsd','./msxsdtest/Group',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH023.xsd','./msxsdtest/Group',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH024.xsd','./msxsdtest/Group',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH024.xsd','./msxsdtest/Group',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH025.xsd','./msxsdtest/Group',invalid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH025.xsd','./msxsdtest/Group',invalid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI001.xsd','./msxsdtest/Group',valid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI001.xsd','./msxsdtest/Group',valid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI002.xsd','./msxsdtest/Group',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI002.xsd','./msxsdtest/Group',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI003.xsd','./msxsdtest/Group',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI003.xsd','./msxsdtest/Group',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI003.xml','./msxsdtest/Group',invalid,S107),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI003.xml','./msxsdtest/Group',invalid,S107),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI004.xsd','./msxsdtest/Group',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI004.xsd','./msxsdtest/Group',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI004.xml','./msxsdtest/Group',valid,S108),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI004.xml','./msxsdtest/Group',valid,S108),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI005.xsd','./msxsdtest/Group',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI005.xsd','./msxsdtest/Group',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI005.xml','./msxsdtest/Group',invalid,S109),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI005.xml','./msxsdtest/Group',invalid,S109),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ001.xsd','./msxsdtest/Group',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ001.xsd','./msxsdtest/Group',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ001.xml','./msxsdtest/Group',valid,S110),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ001.xml','./msxsdtest/Group',valid,S110),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ002.xsd','./msxsdtest/Group',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ002.xsd','./msxsdtest/Group',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ002.xml','./msxsdtest/Group',valid,S111),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ002.xml','./msxsdtest/Group',valid,S111),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ003.xsd','./msxsdtest/Group',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ003.xsd','./msxsdtest/Group',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ003.xml','./msxsdtest/Group',invalid,S112),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ003.xml','./msxsdtest/Group',invalid,S112),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ004.xsd','./msxsdtest/Group',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ004.xsd','./msxsdtest/Group',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ004.xml','./msxsdtest/Group',valid,S113),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ004.xml','./msxsdtest/Group',valid,S113),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ005.xsd','./msxsdtest/Group',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ005.xsd','./msxsdtest/Group',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ005.xml','./msxsdtest/Group',valid,S114),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ005.xml','./msxsdtest/Group',valid,S114),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ006.xsd','./msxsdtest/Group',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ006.xsd','./msxsdtest/Group',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ006.xml','./msxsdtest/Group',invalid,S115),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ006.xml','./msxsdtest/Group',invalid,S115),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ007.xsd','./msxsdtest/Group',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ007.xsd','./msxsdtest/Group',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ007.xml','./msxsdtest/Group',valid,S116),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ007.xml','./msxsdtest/Group',valid,S116),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ008.xsd','./msxsdtest/Group',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ008.xsd','./msxsdtest/Group',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ008.xml','./msxsdtest/Group',invalid,S117),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ008.xml','./msxsdtest/Group',invalid,S117),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ009.xsd','./msxsdtest/Group',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ009.xsd','./msxsdtest/Group',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ009.xml','./msxsdtest/Group',valid,S118),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ009.xml','./msxsdtest/Group',valid,S118),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ010.xsd','./msxsdtest/Group',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ010.xsd','./msxsdtest/Group',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ010.xml','./msxsdtest/Group',invalid,S119),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ010.xml','./msxsdtest/Group',invalid,S119),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ011.xsd','./msxsdtest/Group',valid),
+ {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ011.xsd','./msxsdtest/Group',valid),
STResList121 = [STRes120|STResList120],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ011.xml','./msxsdtest/Group',valid,S120),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ011.xml','./msxsdtest/Group',valid,S120),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ012.xsd','./msxsdtest/Group',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ012.xsd','./msxsdtest/Group',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ012.xml','./msxsdtest/Group',invalid,S121),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ012.xml','./msxsdtest/Group',invalid,S121),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ013.xsd','./msxsdtest/Group',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ013.xsd','./msxsdtest/Group',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ013.xml','./msxsdtest/Group',invalid,S122),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ013.xml','./msxsdtest/Group',invalid,S122),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ014.xsd','./msxsdtest/Group',valid),
+ {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ014.xsd','./msxsdtest/Group',valid),
STResList124 = [STRes123|STResList123],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ014.xml','./msxsdtest/Group',valid,S123),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ014.xml','./msxsdtest/Group',valid,S123),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ015.xsd','./msxsdtest/Group',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ015.xsd','./msxsdtest/Group',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ015.xml','./msxsdtest/Group',invalid,S124),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ015.xml','./msxsdtest/Group',invalid,S124),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ016.xsd','./msxsdtest/Group',valid),
+ {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ016.xsd','./msxsdtest/Group',valid),
STResList126 = [STRes125|STResList125],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ016.xml','./msxsdtest/Group',invalid,S125),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ016.xml','./msxsdtest/Group',invalid,S125),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ017.xsd','./msxsdtest/Group',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ017.xsd','./msxsdtest/Group',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ017.xml','./msxsdtest/Group',valid,S126),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ017.xml','./msxsdtest/Group',valid,S126),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ018.xsd','./msxsdtest/Group',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ018.xsd','./msxsdtest/Group',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ018.xml','./msxsdtest/Group',valid,S127),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ018.xml','./msxsdtest/Group',valid,S127),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ019.xsd','./msxsdtest/Group',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ019.xsd','./msxsdtest/Group',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ019.xml','./msxsdtest/Group',invalid,S128),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ019.xml','./msxsdtest/Group',invalid,S128),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ020.xsd','./msxsdtest/Group',invalid),
+ {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ020.xsd','./msxsdtest/Group',invalid),
STResList130 = [STRes129|STResList129],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ021.xsd','./msxsdtest/Group',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ021.xsd','./msxsdtest/Group',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ021.xml','./msxsdtest/Group',valid,S130),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ021.xml','./msxsdtest/Group',valid,S130),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ022.xsd','./msxsdtest/Group',invalid),
+ {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ022.xsd','./msxsdtest/Group',invalid),
STResList132 = [STRes131|STResList131],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ023.xsd','./msxsdtest/Group',invalid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ023.xsd','./msxsdtest/Group',invalid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ024.xsd','./msxsdtest/Group',invalid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ024.xsd','./msxsdtest/Group',invalid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ025.xsd','./msxsdtest/Group',invalid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ025.xsd','./msxsdtest/Group',invalid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK001.xsd','./msxsdtest/Group',valid),
+ {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK001.xsd','./msxsdtest/Group',valid),
STResList136 = [STRes135|STResList135],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK002.xsd','./msxsdtest/Group',invalid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK002.xsd','./msxsdtest/Group',invalid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK003.xsd','./msxsdtest/Group',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK003.xsd','./msxsdtest/Group',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK003.xml','./msxsdtest/Group',invalid,S137),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK003.xml','./msxsdtest/Group',invalid,S137),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK004.xsd','./msxsdtest/Group',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK004.xsd','./msxsdtest/Group',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK004.xml','./msxsdtest/Group',valid,S138),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK004.xml','./msxsdtest/Group',valid,S138),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK005.xsd','./msxsdtest/Group',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK005.xsd','./msxsdtest/Group',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK005.xml','./msxsdtest/Group',invalid,S139),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK005.xml','./msxsdtest/Group',invalid,S139),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL001.xsd','./msxsdtest/Group',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL001.xsd','./msxsdtest/Group',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL001.xml','./msxsdtest/Group',valid,S140),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL001.xml','./msxsdtest/Group',valid,S140),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL002.xsd','./msxsdtest/Group',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL002.xsd','./msxsdtest/Group',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL002.xml','./msxsdtest/Group',valid,S141),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL002.xml','./msxsdtest/Group',valid,S141),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL003.xsd','./msxsdtest/Group',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL003.xsd','./msxsdtest/Group',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL003.xml','./msxsdtest/Group',invalid,S142),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL003.xml','./msxsdtest/Group',invalid,S142),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL004.xsd','./msxsdtest/Group',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL004.xsd','./msxsdtest/Group',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL004.xml','./msxsdtest/Group',valid,S143),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL004.xml','./msxsdtest/Group',valid,S143),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL005.xsd','./msxsdtest/Group',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL005.xsd','./msxsdtest/Group',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL005.xml','./msxsdtest/Group',valid,S144),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL005.xml','./msxsdtest/Group',valid,S144),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL006.xsd','./msxsdtest/Group',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL006.xsd','./msxsdtest/Group',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL006.xml','./msxsdtest/Group',invalid,S145),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL006.xml','./msxsdtest/Group',invalid,S145),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL007.xsd','./msxsdtest/Group',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL007.xsd','./msxsdtest/Group',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL007.xml','./msxsdtest/Group',valid,S146),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL007.xml','./msxsdtest/Group',valid,S146),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL008.xsd','./msxsdtest/Group',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL008.xsd','./msxsdtest/Group',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL008.xml','./msxsdtest/Group',invalid,S147),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL008.xml','./msxsdtest/Group',invalid,S147),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL009.xsd','./msxsdtest/Group',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL009.xsd','./msxsdtest/Group',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL009.xml','./msxsdtest/Group',valid,S148),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL009.xml','./msxsdtest/Group',valid,S148),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL010.xsd','./msxsdtest/Group',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL010.xsd','./msxsdtest/Group',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL010.xml','./msxsdtest/Group',invalid,S149),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL010.xml','./msxsdtest/Group',invalid,S149),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL011.xsd','./msxsdtest/Group',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL011.xsd','./msxsdtest/Group',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL011.xml','./msxsdtest/Group',valid,S150),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL011.xml','./msxsdtest/Group',valid,S150),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL012.xsd','./msxsdtest/Group',valid),
+ {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL012.xsd','./msxsdtest/Group',valid),
STResList152 = [STRes151|STResList151],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL012.xml','./msxsdtest/Group',invalid,S151),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL012.xml','./msxsdtest/Group',invalid,S151),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL013.xsd','./msxsdtest/Group',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL013.xsd','./msxsdtest/Group',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL013.xml','./msxsdtest/Group',invalid,S152),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL013.xml','./msxsdtest/Group',invalid,S152),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL014.xsd','./msxsdtest/Group',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL014.xsd','./msxsdtest/Group',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL014.xml','./msxsdtest/Group',valid,S153),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL014.xml','./msxsdtest/Group',valid,S153),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL015.xsd','./msxsdtest/Group',valid),
+ {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL015.xsd','./msxsdtest/Group',valid),
STResList155 = [STRes154|STResList154],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL015.xml','./msxsdtest/Group',invalid,S154),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL015.xml','./msxsdtest/Group',invalid,S154),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL016.xsd','./msxsdtest/Group',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL016.xsd','./msxsdtest/Group',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL016.xml','./msxsdtest/Group',invalid,S155),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL016.xml','./msxsdtest/Group',invalid,S155),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL017.xsd','./msxsdtest/Group',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL017.xsd','./msxsdtest/Group',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL017.xml','./msxsdtest/Group',valid,S156),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL017.xml','./msxsdtest/Group',valid,S156),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL018.xsd','./msxsdtest/Group',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL018.xsd','./msxsdtest/Group',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL018.xml','./msxsdtest/Group',valid,S157),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL018.xml','./msxsdtest/Group',valid,S157),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL019.xsd','./msxsdtest/Group',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL019.xsd','./msxsdtest/Group',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL019.xml','./msxsdtest/Group',invalid,S158),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL019.xml','./msxsdtest/Group',invalid,S158),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL020.xsd','./msxsdtest/Group',invalid),
+ {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL020.xsd','./msxsdtest/Group',invalid),
STResList160 = [STRes159|STResList159],
- ?line {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL021.xsd','./msxsdtest/Group',valid),
+ {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL021.xsd','./msxsdtest/Group',valid),
STResList161 = [STRes160|STResList160],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL021.xml','./msxsdtest/Group',valid,S160),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL021.xml','./msxsdtest/Group',valid,S160),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL022.xsd','./msxsdtest/Group',invalid),
+ {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL022.xsd','./msxsdtest/Group',invalid),
STResList162 = [STRes161|STResList161],
- ?line {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL023.xsd','./msxsdtest/Group',invalid),
+ {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL023.xsd','./msxsdtest/Group',invalid),
STResList163 = [STRes162|STResList162],
- ?line {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL024.xsd','./msxsdtest/Group',invalid),
+ {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL024.xsd','./msxsdtest/Group',invalid),
STResList164 = [STRes163|STResList163],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL025.xsd','./msxsdtest/Group',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL025.xsd','./msxsdtest/Group',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM001.xsd','./msxsdtest/Group',valid),
+ {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM001.xsd','./msxsdtest/Group',valid),
STResList166 = [STRes165|STResList165],
- ?line {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM002.xsd','./msxsdtest/Group',invalid),
+ {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM002.xsd','./msxsdtest/Group',invalid),
STResList167 = [STRes166|STResList166],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM003.xsd','./msxsdtest/Group',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM003.xsd','./msxsdtest/Group',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM003.xml','./msxsdtest/Group',invalid,S167),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM003.xml','./msxsdtest/Group',invalid,S167),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM004.xsd','./msxsdtest/Group',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM004.xsd','./msxsdtest/Group',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM004.xml','./msxsdtest/Group',valid,S168),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM004.xml','./msxsdtest/Group',valid,S168),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM005.xsd','./msxsdtest/Group',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM005.xsd','./msxsdtest/Group',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM005.xml','./msxsdtest/Group',invalid,S169),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM005.xml','./msxsdtest/Group',invalid,S169),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN001.xsd','./msxsdtest/Group',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN001.xsd','./msxsdtest/Group',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN001.xml','./msxsdtest/Group',valid,S170),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN001.xml','./msxsdtest/Group',valid,S170),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN002.xsd','./msxsdtest/Group',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN002.xsd','./msxsdtest/Group',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN002.xml','./msxsdtest/Group',valid,S171),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN002.xml','./msxsdtest/Group',valid,S171),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN003.xsd','./msxsdtest/Group',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN003.xsd','./msxsdtest/Group',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN003.xml','./msxsdtest/Group',invalid,S172),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN003.xml','./msxsdtest/Group',invalid,S172),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN004.xsd','./msxsdtest/Group',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN004.xsd','./msxsdtest/Group',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN004.xml','./msxsdtest/Group',valid,S173),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN004.xml','./msxsdtest/Group',valid,S173),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN005.xsd','./msxsdtest/Group',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN005.xsd','./msxsdtest/Group',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN005.xml','./msxsdtest/Group',valid,S174),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN005.xml','./msxsdtest/Group',valid,S174),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN006.xsd','./msxsdtest/Group',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN006.xsd','./msxsdtest/Group',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN006.xml','./msxsdtest/Group',invalid,S175),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN006.xml','./msxsdtest/Group',invalid,S175),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN007.xsd','./msxsdtest/Group',valid),
+ {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN007.xsd','./msxsdtest/Group',valid),
STResList177 = [STRes176|STResList176],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN007.xml','./msxsdtest/Group',valid,S176),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN007.xml','./msxsdtest/Group',valid,S176),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN008.xsd','./msxsdtest/Group',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN008.xsd','./msxsdtest/Group',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN008.xml','./msxsdtest/Group',invalid,S177),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN008.xml','./msxsdtest/Group',invalid,S177),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN009.xsd','./msxsdtest/Group',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN009.xsd','./msxsdtest/Group',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN009.xml','./msxsdtest/Group',valid,S178),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN009.xml','./msxsdtest/Group',valid,S178),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN010.xsd','./msxsdtest/Group',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN010.xsd','./msxsdtest/Group',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN010.xml','./msxsdtest/Group',invalid,S179),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN010.xml','./msxsdtest/Group',invalid,S179),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN011.xsd','./msxsdtest/Group',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN011.xsd','./msxsdtest/Group',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN011.xml','./msxsdtest/Group',valid,S180),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN011.xml','./msxsdtest/Group',valid,S180),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN012.xsd','./msxsdtest/Group',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN012.xsd','./msxsdtest/Group',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN012.xml','./msxsdtest/Group',invalid,S181),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN012.xml','./msxsdtest/Group',invalid,S181),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN013.xsd','./msxsdtest/Group',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN013.xsd','./msxsdtest/Group',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN013.xml','./msxsdtest/Group',invalid,S182),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN013.xml','./msxsdtest/Group',invalid,S182),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN014.xsd','./msxsdtest/Group',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN014.xsd','./msxsdtest/Group',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN014.xml','./msxsdtest/Group',valid,S183),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN014.xml','./msxsdtest/Group',valid,S183),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN015.xsd','./msxsdtest/Group',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN015.xsd','./msxsdtest/Group',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN015.xml','./msxsdtest/Group',invalid,S184),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN015.xml','./msxsdtest/Group',invalid,S184),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN016.xsd','./msxsdtest/Group',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN016.xsd','./msxsdtest/Group',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN016.xml','./msxsdtest/Group',invalid,S185),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN016.xml','./msxsdtest/Group',invalid,S185),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN017.xsd','./msxsdtest/Group',valid),
+ {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN017.xsd','./msxsdtest/Group',valid),
STResList187 = [STRes186|STResList186],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN017.xml','./msxsdtest/Group',valid,S186),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN017.xml','./msxsdtest/Group',valid,S186),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN018.xsd','./msxsdtest/Group',valid),
+ {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN018.xsd','./msxsdtest/Group',valid),
STResList188 = [STRes187|STResList187],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN018.xml','./msxsdtest/Group',valid,S187),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN018.xml','./msxsdtest/Group',valid,S187),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN019.xsd','./msxsdtest/Group',valid),
+ {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN019.xsd','./msxsdtest/Group',valid),
STResList189 = [STRes188|STResList188],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN019.xml','./msxsdtest/Group',invalid,S188),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN019.xml','./msxsdtest/Group',invalid,S188),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN020.xsd','./msxsdtest/Group',invalid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN020.xsd','./msxsdtest/Group',invalid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN021.xsd','./msxsdtest/Group',valid),
+ {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN021.xsd','./msxsdtest/Group',valid),
STResList191 = [STRes190|STResList190],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN021.xml','./msxsdtest/Group',valid,S190),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN021.xml','./msxsdtest/Group',valid,S190),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN022.xsd','./msxsdtest/Group',invalid),
+ {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN022.xsd','./msxsdtest/Group',invalid),
STResList192 = [STRes191|STResList191],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN023.xsd','./msxsdtest/Group',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN023.xsd','./msxsdtest/Group',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN024.xsd','./msxsdtest/Group',invalid),
+ {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN024.xsd','./msxsdtest/Group',invalid),
STResList194 = [STRes193|STResList193],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN025.xsd','./msxsdtest/Group',invalid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN025.xsd','./msxsdtest/Group',invalid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO001.xsd','./msxsdtest/Group',valid),
+ {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO001.xsd','./msxsdtest/Group',valid),
STResList196 = [STRes195|STResList195],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO002.xsd','./msxsdtest/Group',invalid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO002.xsd','./msxsdtest/Group',invalid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO003.xsd','./msxsdtest/Group',invalid),
+ {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO003.xsd','./msxsdtest/Group',invalid),
STResList198 = [STRes197|STResList197],
- ?line {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO004.xsd','./msxsdtest/Group',valid),
+ {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO004.xsd','./msxsdtest/Group',valid),
STResList199 = [STRes198|STResList198],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO004.xml','./msxsdtest/Group',valid,S198),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO004.xml','./msxsdtest/Group',valid,S198),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO005.xsd','./msxsdtest/Group',valid),
+ {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO005.xsd','./msxsdtest/Group',valid),
STResList200 = [STRes199|STResList199],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO005.xml','./msxsdtest/Group',invalid,S199),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO005.xml','./msxsdtest/Group',invalid,S199),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO006.xsd','./msxsdtest/Group',valid),
+ {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO006.xsd','./msxsdtest/Group',valid),
STResList201 = [STRes200|STResList200],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO006.xml','./msxsdtest/Group',valid,S200),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO006.xml','./msxsdtest/Group',valid,S200),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO007.xsd','./msxsdtest/Group',valid),
+ {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO007.xsd','./msxsdtest/Group',valid),
STResList202 = [STRes201|STResList201],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO007.xml','./msxsdtest/Group',invalid,S201),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO007.xml','./msxsdtest/Group',invalid,S201),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO008.xsd','./msxsdtest/Group',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO008.xsd','./msxsdtest/Group',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO008.xml','./msxsdtest/Group',valid,S202),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO008.xml','./msxsdtest/Group',valid,S202),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO009.xsd','./msxsdtest/Group',valid),
+ {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO009.xsd','./msxsdtest/Group',valid),
STResList204 = [STRes203|STResList203],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO009.xml','./msxsdtest/Group',invalid,S203),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO009.xml','./msxsdtest/Group',invalid,S203),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO010.xsd','./msxsdtest/Group',invalid),
+ {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO010.xsd','./msxsdtest/Group',invalid),
STResList205 = [STRes204|STResList204],
- ?line {STRes205,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO011.xsd','./msxsdtest/Group',invalid),
+ {STRes205,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO011.xsd','./msxsdtest/Group',invalid),
STResList206 = [STRes205|STResList205],
- ?line {STRes206,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO012.xsd','./msxsdtest/Group',invalid),
+ {STRes206,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO012.xsd','./msxsdtest/Group',invalid),
STResList207 = [STRes206|STResList206],
- ?line {STRes207,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO013.xsd','./msxsdtest/Group',invalid),
+ {STRes207,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO013.xsd','./msxsdtest/Group',invalid),
STResList208 = [STRes207|STResList207],
- ?line {STRes208,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO014.xsd','./msxsdtest/Group',valid),
+ {STRes208,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO014.xsd','./msxsdtest/Group',valid),
STResList209 = [STRes208|STResList208],
- ?line {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO015.xsd','./msxsdtest/Group',invalid),
+ {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO015.xsd','./msxsdtest/Group',invalid),
STResList210 = [STRes209|STResList209],
- ?line {STRes210,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO016.xsd','./msxsdtest/Group',invalid),
+ {STRes210,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO016.xsd','./msxsdtest/Group',invalid),
STResList211 = [STRes210|STResList210],
- ?line {STRes211,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO017.xsd','./msxsdtest/Group',invalid),
+ {STRes211,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO017.xsd','./msxsdtest/Group',invalid),
STResList212 = [STRes211|STResList211],
- ?line {STRes212,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO018.xsd','./msxsdtest/Group',invalid),
+ {STRes212,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO018.xsd','./msxsdtest/Group',invalid),
STResList213 = [STRes212|STResList212],
- ?line {STRes213,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO019.xsd','./msxsdtest/Group',invalid),
+ {STRes213,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO019.xsd','./msxsdtest/Group',invalid),
STResList214 = [STRes213|STResList213],
- ?line {STRes214,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO020.xsd','./msxsdtest/Group',invalid),
+ {STRes214,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO020.xsd','./msxsdtest/Group',invalid),
STResList215 = [STRes214|STResList214],
- ?line {STRes215,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO021.xsd','./msxsdtest/Group',invalid),
+ {STRes215,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO021.xsd','./msxsdtest/Group',invalid),
STResList216 = [STRes215|STResList215],
- ?line {STRes216,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO022.xsd','./msxsdtest/Group',invalid),
+ {STRes216,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO022.xsd','./msxsdtest/Group',invalid),
STResList217 = [STRes216|STResList216],
- ?line {STRes217,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO023.xsd','./msxsdtest/Group',invalid),
+ {STRes217,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO023.xsd','./msxsdtest/Group',invalid),
STResList218 = [STRes217|STResList217],
- ?line {STRes218,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO024.xsd','./msxsdtest/Group',invalid),
+ {STRes218,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO024.xsd','./msxsdtest/Group',invalid),
STResList219 = [STRes218|STResList218],
- ?line {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO025.xsd','./msxsdtest/Group',invalid),
+ {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO025.xsd','./msxsdtest/Group',invalid),
STResList220 = [STRes219|STResList219],
- ?line {STRes220,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO026.xsd','./msxsdtest/Group',invalid),
+ {STRes220,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO026.xsd','./msxsdtest/Group',invalid),
STResList221 = [STRes220|STResList220],
- ?line {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO027.xsd','./msxsdtest/Group',invalid),
+ {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO027.xsd','./msxsdtest/Group',invalid),
STResList222 = [STRes221|STResList221],
@@ -6899,5332 +6887,5332 @@ model_group(Config) when is_list(Config) ->
idc_(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S22),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S23),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S23),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S24),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S24),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S25),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S25),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S26),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S26),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S27),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S27),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S28),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S28),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S29),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S29),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S30),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S30),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S31),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S31),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S32),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S32),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S33),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S33),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S34),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S34),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S35),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S35),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S36),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S36),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S37),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S37),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S38),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S38),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S39),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S39),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S40),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S40),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S41),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S41),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S42),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S42),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S43),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S43),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S44),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S44),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S45),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S45),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S46),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S46),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S47),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S47),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S48),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S48),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S49),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S49),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S50),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S50),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S51),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S51),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S52),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S52),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S53),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S53),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S54),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S54),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S55),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S55),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S56),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S56),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S57),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S57),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S58),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S58),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S59),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S59),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S60),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S60),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S61),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S61),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S62),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S62),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S63),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S63),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S64),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S64),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S65),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S65),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S66),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S66),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S67),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S67),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S68),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S68),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S69),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S69),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S70),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S70),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S71),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S71),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S72),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S72),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S73),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S73),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S74),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S74),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S75),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S75),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S76),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S76),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S77),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S77),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S78),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S78),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S79),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S79),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S80),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S80),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S81),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S81),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S82),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S82),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S83),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S83),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList85 = [STRes84|STResList84],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S84),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S84),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S85),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S85),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S86),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S86),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S87),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S87),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S88),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S88),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S89),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S89),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S90),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S90),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S91),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S91),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S92),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S92),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S93),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S93),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S94),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S94),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S95),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S95),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S96),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S96),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S97),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S97),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S98),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S98),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S99),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S99),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S100),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S100),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S101),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S101),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList103 = [STRes102|STResList102],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S102),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S102),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList104 = [STRes103|STResList103],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S103),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S103),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S104),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S104),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S105),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S105),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList107 = [STRes106|STResList106],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S106),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S106),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S107),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S107),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S108),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S108),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S109),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S109),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S110),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S110),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S111),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S111),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S112),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S112),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S113),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S113),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S114),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S114),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S115),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S115),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S116),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S116),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S117),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S117),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S118),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S118),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S119),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S119),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList121 = [STRes120|STResList120],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S120),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S120),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S121),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S121),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S122),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S122),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList124 = [STRes123|STResList123],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S123),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S123),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S124),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S124),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList126 = [STRes125|STResList125],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S125),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S125),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S126),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S126),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S127),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S127),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S128),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S128),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S129),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S129),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S130),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S130),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S131),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S131),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList133 = [STRes132|STResList132],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S132),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S132),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList134 = [STRes133|STResList133],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S133),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S133),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList135 = [STRes134|STResList134],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S134),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S134),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S135),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S135),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList137 = [STRes136|STResList136],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S136),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S136),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S137),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S137),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S138),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S138),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S139),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S139),
ITResList140 = [ITRes139|ITResList139],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S140),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S140),
ITResList141 = [ITRes140|ITResList140],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S141),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S141),
ITResList142 = [ITRes141|ITResList141],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S142),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S142),
ITResList143 = [ITRes142|ITResList142],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S143),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S143),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S144),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S144),
ITResList145 = [ITRes144|ITResList144],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S145),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S145),
ITResList146 = [ITRes145|ITResList145],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S146),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S146),
ITResList147 = [ITRes146|ITResList146],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S147),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S147),
ITResList148 = [ITRes147|ITResList147],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S148),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S148),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S149),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S149),
ITResList150 = [ITRes149|ITResList149],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S150),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S150),
ITResList151 = [ITRes150|ITResList150],
- ?line {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList152 = [STRes151|STResList151],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S151),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S151),
ITResList152 = [ITRes151|ITResList151],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S152),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S152),
ITResList153 = [ITRes152|ITResList152],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S153),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S153),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList155 = [STRes154|STResList154],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S154),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S154),
ITResList155 = [ITRes154|ITResList154],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S155),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S155),
ITResList156 = [ITRes155|ITResList155],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S156),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S156),
ITResList157 = [ITRes156|ITResList156],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S157),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S157),
ITResList158 = [ITRes157|ITResList157],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S158),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S158),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList160 = [STRes159|STResList159],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S159),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S159),
ITResList160 = [ITRes159|ITResList159],
- ?line {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList161 = [STRes160|STResList160],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S160),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S160),
ITResList161 = [ITRes160|ITResList160],
- ?line {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList162 = [STRes161|STResList161],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S161),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S161),
ITResList162 = [ITRes161|ITResList161],
- ?line {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList163 = [STRes162|STResList162],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S162),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S162),
ITResList163 = [ITRes162|ITResList162],
- ?line {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList164 = [STRes163|STResList163],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S163),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S163),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList165 = [STRes164|STResList164],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S164),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S164),
ITResList165 = [ITRes164|ITResList164],
- ?line {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList166 = [STRes165|STResList165],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S165),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S165),
ITResList166 = [ITRes165|ITResList165],
- ?line {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList167 = [STRes166|STResList166],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S166),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S166),
ITResList167 = [ITRes166|ITResList166],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S167),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S167),
ITResList168 = [ITRes167|ITResList167],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S168),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S168),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S169),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S169),
ITResList170 = [ITRes169|ITResList169],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S170),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S170),
ITResList171 = [ITRes170|ITResList170],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S171),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S171),
ITResList172 = [ITRes171|ITResList171],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S172),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S172),
ITResList173 = [ITRes172|ITResList172],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S173),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S173),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S174),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S174),
ITResList175 = [ITRes174|ITResList174],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S175),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S175),
ITResList176 = [ITRes175|ITResList175],
- ?line {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList177 = [STRes176|STResList176],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S176),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S176),
ITResList177 = [ITRes176|ITResList176],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S177),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S177),
ITResList178 = [ITRes177|ITResList177],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S178),
+ ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S178),
ITResList179 = [ITRes178|ITResList178],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S179),
+ ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S179),
ITResList180 = [ITRes179|ITResList179],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S180),
+ ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S180),
ITResList181 = [ITRes180|ITResList180],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S181),
+ ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S181),
ITResList182 = [ITRes181|ITResList181],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S182),
+ ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S182),
ITResList183 = [ITRes182|ITResList182],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S183),
+ ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S183),
ITResList184 = [ITRes183|ITResList183],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S184),
+ ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S184),
ITResList185 = [ITRes184|ITResList184],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S185),
+ ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S185),
ITResList186 = [ITRes185|ITResList185],
- ?line {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList187 = [STRes186|STResList186],
- ?line ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S186),
+ ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S186),
ITResList187 = [ITRes186|ITResList186],
- ?line {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList188 = [STRes187|STResList187],
- ?line ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S187),
+ ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S187),
ITResList188 = [ITRes187|ITResList187],
- ?line {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList189 = [STRes188|STResList188],
- ?line ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S188),
+ ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S188),
ITResList189 = [ITRes188|ITResList188],
- ?line {STRes189,S189} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes189,S189} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList190 = [STRes189|STResList189],
- ?line ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S189),
+ ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S189),
ITResList190 = [ITRes189|ITResList189],
- ?line {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList191 = [STRes190|STResList190],
- ?line ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S190),
+ ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S190),
ITResList191 = [ITRes190|ITResList190],
- ?line {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList192 = [STRes191|STResList191],
- ?line ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S191),
+ ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S191),
ITResList192 = [ITRes191|ITResList191],
- ?line {STRes192,S192} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes192,S192} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList193 = [STRes192|STResList192],
- ?line ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S192),
+ ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S192),
ITResList193 = [ITRes192|ITResList192],
- ?line {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList194 = [STRes193|STResList193],
- ?line ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S193),
+ ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S193),
ITResList194 = [ITRes193|ITResList193],
- ?line {STRes194,S194} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes194,S194} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList195 = [STRes194|STResList194],
- ?line ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S194),
+ ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S194),
ITResList195 = [ITRes194|ITResList194],
- ?line {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList196 = [STRes195|STResList195],
- ?line ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S195),
+ ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S195),
ITResList196 = [ITRes195|ITResList195],
- ?line {STRes196,S196} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes196,S196} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList197 = [STRes196|STResList196],
- ?line ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S196),
+ ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S196),
ITResList197 = [ITRes196|ITResList196],
- ?line {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList198 = [STRes197|STResList197],
- ?line ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S197),
+ ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S197),
ITResList198 = [ITRes197|ITResList197],
- ?line {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList199 = [STRes198|STResList198],
- ?line ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S198),
+ ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S198),
ITResList199 = [ITRes198|ITResList198],
- ?line {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList200 = [STRes199|STResList199],
- ?line ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S199),
+ ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S199),
ITResList200 = [ITRes199|ITResList199],
- ?line {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList201 = [STRes200|STResList200],
- ?line ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S200),
+ ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S200),
ITResList201 = [ITRes200|ITResList200],
- ?line {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList202 = [STRes201|STResList201],
- ?line ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S201),
+ ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S201),
ITResList202 = [ITRes201|ITResList201],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S202),
+ ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S202),
ITResList203 = [ITRes202|ITResList202],
- ?line {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList204 = [STRes203|STResList203],
- ?line ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S203),
+ ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S203),
ITResList204 = [ITRes203|ITResList203],
- ?line {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList205 = [STRes204|STResList204],
- ?line ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S204),
+ ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S204),
ITResList205 = [ITRes204|ITResList204],
- ?line {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList206 = [STRes205|STResList205],
- ?line ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S205),
+ ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S205),
ITResList206 = [ITRes205|ITResList205],
- ?line {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList207 = [STRes206|STResList206],
- ?line ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S206),
+ ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S206),
ITResList207 = [ITRes206|ITResList206],
- ?line {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList208 = [STRes207|STResList207],
- ?line ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S207),
+ ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S207),
ITResList208 = [ITRes207|ITResList207],
- ?line {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList209 = [STRes208|STResList208],
- ?line ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S208),
+ ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S208),
ITResList209 = [ITRes208|ITResList208],
- ?line {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList210 = [STRes209|STResList209],
- ?line ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S209),
+ ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S209),
ITResList210 = [ITRes209|ITResList209],
- ?line {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList211 = [STRes210|STResList210],
- ?line ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S210),
+ ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S210),
ITResList211 = [ITRes210|ITResList210],
- ?line {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList212 = [STRes211|STResList211],
- ?line ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S211),
+ ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S211),
ITResList212 = [ITRes211|ITResList211],
- ?line {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList213 = [STRes212|STResList212],
- ?line ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S212),
+ ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S212),
ITResList213 = [ITRes212|ITResList212],
- ?line {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList214 = [STRes213|STResList213],
- ?line ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S213),
+ ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S213),
ITResList214 = [ITRes213|ITResList213],
- ?line {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList215 = [STRes214|STResList214],
- ?line ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S214),
+ ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S214),
ITResList215 = [ITRes214|ITResList214],
- ?line {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList216 = [STRes215|STResList215],
- ?line ITRes215 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S215),
+ ITRes215 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S215),
ITResList216 = [ITRes215|ITResList215],
- ?line {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList217 = [STRes216|STResList216],
- ?line ITRes216 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S216),
+ ITRes216 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S216),
ITResList217 = [ITRes216|ITResList216],
- ?line {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList218 = [STRes217|STResList217],
- ?line ITRes217 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S217),
+ ITRes217 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S217),
ITResList218 = [ITRes217|ITResList217],
- ?line {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList219 = [STRes218|STResList218],
- ?line ITRes218 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S218),
+ ITRes218 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S218),
ITResList219 = [ITRes218|ITResList218],
- ?line {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList220 = [STRes219|STResList219],
- ?line ITRes219 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S219),
+ ITRes219 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S219),
ITResList220 = [ITRes219|ITResList219],
- ?line {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList221 = [STRes220|STResList220],
- ?line ITRes220 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S220),
+ ITRes220 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S220),
ITResList221 = [ITRes220|ITResList220],
- ?line {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList222 = [STRes221|STResList221],
- ?line ITRes221 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S221),
+ ITRes221 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S221),
ITResList222 = [ITRes221|ITResList221],
- ?line {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList223 = [STRes222|STResList222],
- ?line ITRes222 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S222),
+ ITRes222 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S222),
ITResList223 = [ITRes222|ITResList222],
- ?line {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList224 = [STRes223|STResList223],
- ?line ITRes223 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S223),
+ ITRes223 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S223),
ITResList224 = [ITRes223|ITResList223],
- ?line {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList225 = [STRes224|STResList224],
- ?line ITRes224 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S224),
+ ITRes224 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S224),
ITResList225 = [ITRes224|ITResList224],
- ?line {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList226 = [STRes225|STResList225],
- ?line ITRes225 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S225),
+ ITRes225 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S225),
ITResList226 = [ITRes225|ITResList225],
- ?line {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList227 = [STRes226|STResList226],
- ?line ITRes226 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S226),
+ ITRes226 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S226),
ITResList227 = [ITRes226|ITResList226],
- ?line {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList228 = [STRes227|STResList227],
- ?line ITRes227 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S227),
+ ITRes227 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S227),
ITResList228 = [ITRes227|ITResList227],
- ?line {STRes228,S228} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes228,S228} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList229 = [STRes228|STResList228],
- ?line ITRes228 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S228),
+ ITRes228 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S228),
ITResList229 = [ITRes228|ITResList228],
- ?line {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList230 = [STRes229|STResList229],
- ?line ITRes229 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S229),
+ ITRes229 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S229),
ITResList230 = [ITRes229|ITResList229],
- ?line {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList231 = [STRes230|STResList230],
- ?line ITRes230 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S230),
+ ITRes230 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S230),
ITResList231 = [ITRes230|ITResList230],
- ?line {STRes231,S231} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes231,S231} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList232 = [STRes231|STResList231],
- ?line ITRes231 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S231),
+ ITRes231 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S231),
ITResList232 = [ITRes231|ITResList231],
- ?line {STRes232,S232} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes232,S232} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList233 = [STRes232|STResList232],
- ?line ITRes232 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S232),
+ ITRes232 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S232),
ITResList233 = [ITRes232|ITResList232],
- ?line {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList234 = [STRes233|STResList233],
- ?line ITRes233 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S233),
+ ITRes233 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S233),
ITResList234 = [ITRes233|ITResList233],
- ?line {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList235 = [STRes234|STResList234],
- ?line ITRes234 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S234),
+ ITRes234 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S234),
ITResList235 = [ITRes234|ITResList234],
- ?line {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList236 = [STRes235|STResList235],
- ?line ITRes235 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S235),
+ ITRes235 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S235),
ITResList236 = [ITRes235|ITResList235],
- ?line {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList237 = [STRes236|STResList236],
- ?line ITRes236 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S236),
+ ITRes236 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S236),
ITResList237 = [ITRes236|ITResList236],
- ?line {STRes237,S237} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes237,S237} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList238 = [STRes237|STResList237],
- ?line ITRes237 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S237),
+ ITRes237 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S237),
ITResList238 = [ITRes237|ITResList237],
- ?line {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList239 = [STRes238|STResList238],
- ?line ITRes238 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S238),
+ ITRes238 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S238),
ITResList239 = [ITRes238|ITResList238],
- ?line {STRes239,S239} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes239,S239} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList240 = [STRes239|STResList239],
- ?line ITRes239 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S239),
+ ITRes239 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S239),
ITResList240 = [ITRes239|ITResList239],
- ?line {STRes240,S240} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes240,S240} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList241 = [STRes240|STResList240],
- ?line ITRes240 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S240),
+ ITRes240 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S240),
ITResList241 = [ITRes240|ITResList240],
- ?line {STRes241,S241} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes241,S241} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList242 = [STRes241|STResList241],
- ?line ITRes241 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S241),
+ ITRes241 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S241),
ITResList242 = [ITRes241|ITResList241],
- ?line {STRes242,S242} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes242,S242} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList243 = [STRes242|STResList242],
- ?line ITRes242 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S242),
+ ITRes242 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S242),
ITResList243 = [ITRes242|ITResList242],
- ?line {STRes243,S243} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes243,S243} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList244 = [STRes243|STResList243],
- ?line ITRes243 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S243),
+ ITRes243 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S243),
ITResList244 = [ITRes243|ITResList243],
- ?line {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList245 = [STRes244|STResList244],
- ?line ITRes244 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S244),
+ ITRes244 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S244),
ITResList245 = [ITRes244|ITResList244],
- ?line {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList246 = [STRes245|STResList245],
- ?line ITRes245 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S245),
+ ITRes245 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S245),
ITResList246 = [ITRes245|ITResList245],
- ?line {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList247 = [STRes246|STResList246],
- ?line ITRes246 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S246),
+ ITRes246 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S246),
ITResList247 = [ITRes246|ITResList246],
- ?line {STRes247,S247} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes247,S247} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList248 = [STRes247|STResList247],
- ?line ITRes247 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S247),
+ ITRes247 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S247),
ITResList248 = [ITRes247|ITResList247],
- ?line {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList249 = [STRes248|STResList248],
- ?line ITRes248 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S248),
+ ITRes248 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S248),
ITResList249 = [ITRes248|ITResList248],
- ?line {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList250 = [STRes249|STResList249],
- ?line ITRes249 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S249),
+ ITRes249 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S249),
ITResList250 = [ITRes249|ITResList249],
- ?line {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList251 = [STRes250|STResList250],
- ?line ITRes250 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S250),
+ ITRes250 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S250),
ITResList251 = [ITRes250|ITResList250],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes251 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S251),
+ ITRes251 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S251),
ITResList252 = [ITRes251|ITResList251],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes252 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S252),
+ ITRes252 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S252),
ITResList253 = [ITRes252|ITResList252],
- ?line {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList254 = [STRes253|STResList253],
- ?line ITRes253 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S253),
+ ITRes253 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S253),
ITResList254 = [ITRes253|ITResList253],
- ?line {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList255 = [STRes254|STResList254],
- ?line ITRes254 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S254),
+ ITRes254 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S254),
ITResList255 = [ITRes254|ITResList254],
- ?line {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList256 = [STRes255|STResList255],
- ?line ITRes255 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S255),
+ ITRes255 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S255),
ITResList256 = [ITRes255|ITResList255],
- ?line {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList257 = [STRes256|STResList256],
- ?line ITRes256 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S256),
+ ITRes256 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S256),
ITResList257 = [ITRes256|ITResList256],
- ?line {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList258 = [STRes257|STResList257],
- ?line ITRes257 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S257),
+ ITRes257 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S257),
ITResList258 = [ITRes257|ITResList257],
- ?line {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList259 = [STRes258|STResList258],
- ?line ITRes258 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S258),
+ ITRes258 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S258),
ITResList259 = [ITRes258|ITResList258],
- ?line {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList260 = [STRes259|STResList259],
- ?line ITRes259 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S259),
+ ITRes259 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S259),
ITResList260 = [ITRes259|ITResList259],
- ?line {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList261 = [STRes260|STResList260],
- ?line ITRes260 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S260),
+ ITRes260 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S260),
ITResList261 = [ITRes260|ITResList260],
- ?line {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList262 = [STRes261|STResList261],
- ?line ITRes261 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S261),
+ ITRes261 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S261),
ITResList262 = [ITRes261|ITResList261],
- ?line {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList263 = [STRes262|STResList262],
- ?line ITRes262 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S262),
+ ITRes262 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S262),
ITResList263 = [ITRes262|ITResList262],
- ?line {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList264 = [STRes263|STResList263],
- ?line ITRes263 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S263),
+ ITRes263 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S263),
ITResList264 = [ITRes263|ITResList263],
- ?line {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList265 = [STRes264|STResList264],
- ?line ITRes264 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S264),
+ ITRes264 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S264),
ITResList265 = [ITRes264|ITResList264],
- ?line {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList266 = [STRes265|STResList265],
- ?line ITRes265 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S265),
+ ITRes265 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S265),
ITResList266 = [ITRes265|ITResList265],
- ?line {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList267 = [STRes266|STResList266],
- ?line ITRes266 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S266),
+ ITRes266 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S266),
ITResList267 = [ITRes266|ITResList266],
- ?line {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList268 = [STRes267|STResList267],
- ?line ITRes267 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S267),
+ ITRes267 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S267),
ITResList268 = [ITRes267|ITResList267],
- ?line {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList269 = [STRes268|STResList268],
- ?line ITRes268 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S268),
+ ITRes268 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S268),
ITResList269 = [ITRes268|ITResList268],
- ?line {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList270 = [STRes269|STResList269],
- ?line ITRes269 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S269),
+ ITRes269 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S269),
ITResList270 = [ITRes269|ITResList269],
- ?line {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList271 = [STRes270|STResList270],
- ?line ITRes270 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S270),
+ ITRes270 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S270),
ITResList271 = [ITRes270|ITResList270],
- ?line {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList272 = [STRes271|STResList271],
- ?line ITRes271 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S271),
+ ITRes271 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S271),
ITResList272 = [ITRes271|ITResList271],
- ?line {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList273 = [STRes272|STResList272],
- ?line ITRes272 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S272),
+ ITRes272 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S272),
ITResList273 = [ITRes272|ITResList272],
- ?line {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList274 = [STRes273|STResList273],
- ?line ITRes273 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S273),
+ ITRes273 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S273),
ITResList274 = [ITRes273|ITResList273],
- ?line {STRes274,S274} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes274,S274} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList275 = [STRes274|STResList274],
- ?line ITRes274 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S274),
+ ITRes274 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S274),
ITResList275 = [ITRes274|ITResList274],
- ?line {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList276 = [STRes275|STResList275],
- ?line ITRes275 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S275),
+ ITRes275 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S275),
ITResList276 = [ITRes275|ITResList275],
- ?line {STRes276,S276} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes276,S276} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList277 = [STRes276|STResList276],
- ?line ITRes276 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S276),
+ ITRes276 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S276),
ITResList277 = [ITRes276|ITResList276],
- ?line {STRes277,S277} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes277,S277} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList278 = [STRes277|STResList277],
- ?line ITRes277 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S277),
+ ITRes277 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S277),
ITResList278 = [ITRes277|ITResList277],
- ?line {STRes278,S278} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes278,S278} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList279 = [STRes278|STResList278],
- ?line ITRes278 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S278),
+ ITRes278 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S278),
ITResList279 = [ITRes278|ITResList278],
- ?line {STRes279,S279} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes279,S279} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList280 = [STRes279|STResList279],
- ?line ITRes279 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S279),
+ ITRes279 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S279),
ITResList280 = [ITRes279|ITResList279],
- ?line {STRes280,S280} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes280,S280} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList281 = [STRes280|STResList280],
- ?line ITRes280 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S280),
+ ITRes280 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S280),
ITResList281 = [ITRes280|ITResList280],
- ?line {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList282 = [STRes281|STResList281],
- ?line ITRes281 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S281),
+ ITRes281 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S281),
ITResList282 = [ITRes281|ITResList281],
- ?line {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList283 = [STRes282|STResList282],
- ?line ITRes282 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S282),
+ ITRes282 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S282),
ITResList283 = [ITRes282|ITResList282],
- ?line {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList284 = [STRes283|STResList283],
- ?line ITRes283 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S283),
+ ITRes283 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S283),
ITResList284 = [ITRes283|ITResList283],
- ?line {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList285 = [STRes284|STResList284],
- ?line ITRes284 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S284),
+ ITRes284 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S284),
ITResList285 = [ITRes284|ITResList284],
- ?line {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList286 = [STRes285|STResList285],
- ?line ITRes285 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S285),
+ ITRes285 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S285),
ITResList286 = [ITRes285|ITResList285],
- ?line {STRes286,S286} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes286,S286} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList287 = [STRes286|STResList286],
- ?line ITRes286 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S286),
+ ITRes286 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S286),
ITResList287 = [ITRes286|ITResList286],
- ?line {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList288 = [STRes287|STResList287],
- ?line ITRes287 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S287),
+ ITRes287 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S287),
ITResList288 = [ITRes287|ITResList287],
- ?line {STRes288,S288} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes288,S288} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList289 = [STRes288|STResList288],
- ?line ITRes288 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S288),
+ ITRes288 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S288),
ITResList289 = [ITRes288|ITResList288],
- ?line {STRes289,S289} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes289,S289} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList290 = [STRes289|STResList289],
- ?line ITRes289 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S289),
+ ITRes289 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S289),
ITResList290 = [ITRes289|ITResList289],
- ?line {STRes290,S290} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes290,S290} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList291 = [STRes290|STResList290],
- ?line ITRes290 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S290),
+ ITRes290 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S290),
ITResList291 = [ITRes290|ITResList290],
- ?line {STRes291,S291} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes291,S291} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList292 = [STRes291|STResList291],
- ?line ITRes291 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S291),
+ ITRes291 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S291),
ITResList292 = [ITRes291|ITResList291],
- ?line {STRes292,S292} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes292,S292} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList293 = [STRes292|STResList292],
- ?line ITRes292 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S292),
+ ITRes292 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S292),
ITResList293 = [ITRes292|ITResList292],
- ?line {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList294 = [STRes293|STResList293],
- ?line ITRes293 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S293),
+ ITRes293 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S293),
ITResList294 = [ITRes293|ITResList293],
- ?line {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList295 = [STRes294|STResList294],
- ?line ITRes294 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S294),
+ ITRes294 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S294),
ITResList295 = [ITRes294|ITResList294],
- ?line {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList296 = [STRes295|STResList295],
- ?line ITRes295 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S295),
+ ITRes295 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S295),
ITResList296 = [ITRes295|ITResList295],
- ?line {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList297 = [STRes296|STResList296],
- ?line ITRes296 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S296),
+ ITRes296 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S296),
ITResList297 = [ITRes296|ITResList296],
- ?line {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList298 = [STRes297|STResList297],
- ?line ITRes297 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S297),
+ ITRes297 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S297),
ITResList298 = [ITRes297|ITResList297],
- ?line {STRes298,S298} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes298,S298} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList299 = [STRes298|STResList298],
- ?line ITRes298 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S298),
+ ITRes298 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S298),
ITResList299 = [ITRes298|ITResList298],
- ?line {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList300 = [STRes299|STResList299],
- ?line ITRes299 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S299),
+ ITRes299 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S299),
ITResList300 = [ITRes299|ITResList299],
- ?line {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList301 = [STRes300|STResList300],
- ?line ITRes300 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S300),
+ ITRes300 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S300),
ITResList301 = [ITRes300|ITResList300],
- ?line {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList302 = [STRes301|STResList301],
- ?line ITRes301 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S301),
+ ITRes301 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S301),
ITResList302 = [ITRes301|ITResList301],
- ?line {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList303 = [STRes302|STResList302],
- ?line ITRes302 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S302),
+ ITRes302 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S302),
ITResList303 = [ITRes302|ITResList302],
- ?line {STRes303,S303} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes303,S303} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList304 = [STRes303|STResList303],
- ?line ITRes303 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S303),
+ ITRes303 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S303),
ITResList304 = [ITRes303|ITResList303],
- ?line {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList305 = [STRes304|STResList304],
- ?line ITRes304 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S304),
+ ITRes304 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S304),
ITResList305 = [ITRes304|ITResList304],
- ?line {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList306 = [STRes305|STResList305],
- ?line ITRes305 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S305),
+ ITRes305 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S305),
ITResList306 = [ITRes305|ITResList305],
- ?line {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList307 = [STRes306|STResList306],
- ?line ITRes306 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S306),
+ ITRes306 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S306),
ITResList307 = [ITRes306|ITResList306],
- ?line {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList308 = [STRes307|STResList307],
- ?line ITRes307 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S307),
+ ITRes307 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S307),
ITResList308 = [ITRes307|ITResList307],
- ?line {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList309 = [STRes308|STResList308],
- ?line ITRes308 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S308),
+ ITRes308 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S308),
ITResList309 = [ITRes308|ITResList308],
- ?line {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList310 = [STRes309|STResList309],
- ?line ITRes309 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S309),
+ ITRes309 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S309),
ITResList310 = [ITRes309|ITResList309],
- ?line {STRes310,S310} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes310,S310} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList311 = [STRes310|STResList310],
- ?line ITRes310 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S310),
+ ITRes310 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S310),
ITResList311 = [ITRes310|ITResList310],
- ?line {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList312 = [STRes311|STResList311],
- ?line ITRes311 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S311),
+ ITRes311 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S311),
ITResList312 = [ITRes311|ITResList311],
- ?line {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList313 = [STRes312|STResList312],
- ?line ITRes312 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S312),
+ ITRes312 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S312),
ITResList313 = [ITRes312|ITResList312],
- ?line {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList314 = [STRes313|STResList313],
- ?line ITRes313 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S313),
+ ITRes313 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S313),
ITResList314 = [ITRes313|ITResList313],
- ?line {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList315 = [STRes314|STResList314],
- ?line ITRes314 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S314),
+ ITRes314 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S314),
ITResList315 = [ITRes314|ITResList314],
- ?line {STRes315,S315} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes315,S315} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList316 = [STRes315|STResList315],
- ?line ITRes315 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S315),
+ ITRes315 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S315),
ITResList316 = [ITRes315|ITResList315],
- ?line {STRes316,S316} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes316,S316} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList317 = [STRes316|STResList316],
- ?line ITRes316 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S316),
+ ITRes316 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S316),
ITResList317 = [ITRes316|ITResList316],
- ?line {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList318 = [STRes317|STResList317],
- ?line ITRes317 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S317),
+ ITRes317 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S317),
ITResList318 = [ITRes317|ITResList317],
- ?line {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList319 = [STRes318|STResList318],
- ?line ITRes318 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S318),
+ ITRes318 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S318),
ITResList319 = [ITRes318|ITResList318],
- ?line {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList320 = [STRes319|STResList319],
- ?line ITRes319 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S319),
+ ITRes319 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S319),
ITResList320 = [ITRes319|ITResList319],
- ?line {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList321 = [STRes320|STResList320],
- ?line ITRes320 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S320),
+ ITRes320 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S320),
ITResList321 = [ITRes320|ITResList320],
- ?line {STRes321,S321} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes321,S321} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList322 = [STRes321|STResList321],
- ?line ITRes321 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S321),
+ ITRes321 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S321),
ITResList322 = [ITRes321|ITResList321],
- ?line {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList323 = [STRes322|STResList322],
- ?line ITRes322 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S322),
+ ITRes322 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S322),
ITResList323 = [ITRes322|ITResList322],
- ?line {STRes323,S323} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes323,S323} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList324 = [STRes323|STResList323],
- ?line ITRes323 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S323),
+ ITRes323 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S323),
ITResList324 = [ITRes323|ITResList323],
- ?line {STRes324,S324} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes324,S324} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList325 = [STRes324|STResList324],
- ?line ITRes324 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S324),
+ ITRes324 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S324),
ITResList325 = [ITRes324|ITResList324],
- ?line {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList326 = [STRes325|STResList325],
- ?line ITRes325 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S325),
+ ITRes325 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S325),
ITResList326 = [ITRes325|ITResList325],
- ?line {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList327 = [STRes326|STResList326],
- ?line ITRes326 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S326),
+ ITRes326 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S326),
ITResList327 = [ITRes326|ITResList326],
- ?line {STRes327,S327} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes327,S327} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList328 = [STRes327|STResList327],
- ?line ITRes327 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S327),
+ ITRes327 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S327),
ITResList328 = [ITRes327|ITResList327],
- ?line {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList329 = [STRes328|STResList328],
- ?line ITRes328 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S328),
+ ITRes328 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S328),
ITResList329 = [ITRes328|ITResList328],
- ?line {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList330 = [STRes329|STResList329],
- ?line ITRes329 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S329),
+ ITRes329 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S329),
ITResList330 = [ITRes329|ITResList329],
- ?line {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList331 = [STRes330|STResList330],
- ?line ITRes330 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S330),
+ ITRes330 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S330),
ITResList331 = [ITRes330|ITResList330],
- ?line {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList332 = [STRes331|STResList331],
- ?line ITRes331 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S331),
+ ITRes331 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S331),
ITResList332 = [ITRes331|ITResList331],
- ?line {STRes332,S332} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes332,S332} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList333 = [STRes332|STResList332],
- ?line ITRes332 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S332),
+ ITRes332 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S332),
ITResList333 = [ITRes332|ITResList332],
- ?line {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList334 = [STRes333|STResList333],
- ?line ITRes333 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S333),
+ ITRes333 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S333),
ITResList334 = [ITRes333|ITResList333],
- ?line {STRes334,S334} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes334,S334} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList335 = [STRes334|STResList334],
- ?line ITRes334 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S334),
+ ITRes334 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S334),
ITResList335 = [ITRes334|ITResList334],
- ?line {STRes335,S335} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes335,S335} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList336 = [STRes335|STResList335],
- ?line ITRes335 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S335),
+ ITRes335 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S335),
ITResList336 = [ITRes335|ITResList335],
- ?line {STRes336,S336} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes336,S336} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList337 = [STRes336|STResList336],
- ?line ITRes336 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S336),
+ ITRes336 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S336),
ITResList337 = [ITRes336|ITResList336],
- ?line {STRes337,S337} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes337,S337} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList338 = [STRes337|STResList337],
- ?line ITRes337 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S337),
+ ITRes337 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S337),
ITResList338 = [ITRes337|ITResList337],
- ?line {STRes338,S338} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes338,S338} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList339 = [STRes338|STResList338],
- ?line ITRes338 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S338),
+ ITRes338 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S338),
ITResList339 = [ITRes338|ITResList338],
- ?line {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList340 = [STRes339|STResList339],
- ?line ITRes339 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S339),
+ ITRes339 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S339),
ITResList340 = [ITRes339|ITResList339],
- ?line {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList341 = [STRes340|STResList340],
- ?line ITRes340 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S340),
+ ITRes340 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S340),
ITResList341 = [ITRes340|ITResList340],
- ?line {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList342 = [STRes341|STResList341],
- ?line ITRes341 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S341),
+ ITRes341 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S341),
ITResList342 = [ITRes341|ITResList341],
- ?line {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList343 = [STRes342|STResList342],
- ?line ITRes342 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S342),
+ ITRes342 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S342),
ITResList343 = [ITRes342|ITResList342],
- ?line {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList344 = [STRes343|STResList343],
- ?line ITRes343 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S343),
+ ITRes343 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S343),
ITResList344 = [ITRes343|ITResList343],
- ?line {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList345 = [STRes344|STResList344],
- ?line ITRes344 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S344),
+ ITRes344 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S344),
ITResList345 = [ITRes344|ITResList344],
- ?line {STRes345,S345} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes345,S345} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList346 = [STRes345|STResList345],
- ?line ITRes345 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S345),
+ ITRes345 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S345),
ITResList346 = [ITRes345|ITResList345],
- ?line {STRes346,S346} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes346,S346} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList347 = [STRes346|STResList346],
- ?line ITRes346 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S346),
+ ITRes346 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S346),
ITResList347 = [ITRes346|ITResList346],
- ?line {STRes347,S347} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes347,S347} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList348 = [STRes347|STResList347],
- ?line ITRes347 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S347),
+ ITRes347 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S347),
ITResList348 = [ITRes347|ITResList347],
- ?line {STRes348,S348} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes348,S348} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList349 = [STRes348|STResList348],
- ?line ITRes348 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S348),
+ ITRes348 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S348),
ITResList349 = [ITRes348|ITResList348],
- ?line {STRes349,S349} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes349,S349} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList350 = [STRes349|STResList349],
- ?line ITRes349 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S349),
+ ITRes349 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S349),
ITResList350 = [ITRes349|ITResList349],
- ?line {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList351 = [STRes350|STResList350],
- ?line ITRes350 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S350),
+ ITRes350 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S350),
ITResList351 = [ITRes350|ITResList350],
- ?line {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList352 = [STRes351|STResList351],
- ?line ITRes351 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S351),
+ ITRes351 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S351),
ITResList352 = [ITRes351|ITResList351],
- ?line {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList353 = [STRes352|STResList352],
- ?line ITRes352 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S352),
+ ITRes352 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S352),
ITResList353 = [ITRes352|ITResList352],
- ?line {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList354 = [STRes353|STResList353],
- ?line ITRes353 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S353),
+ ITRes353 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S353),
ITResList354 = [ITRes353|ITResList353],
- ?line {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList355 = [STRes354|STResList354],
- ?line ITRes354 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S354),
+ ITRes354 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S354),
ITResList355 = [ITRes354|ITResList354],
- ?line {STRes355,S355} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes355,S355} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList356 = [STRes355|STResList355],
- ?line ITRes355 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S355),
+ ITRes355 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S355),
ITResList356 = [ITRes355|ITResList355],
- ?line {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList357 = [STRes356|STResList356],
- ?line ITRes356 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S356),
+ ITRes356 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S356),
ITResList357 = [ITRes356|ITResList356],
- ?line {STRes357,S357} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes357,S357} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList358 = [STRes357|STResList357],
- ?line ITRes357 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S357),
+ ITRes357 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S357),
ITResList358 = [ITRes357|ITResList357],
- ?line {STRes358,S358} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes358,S358} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList359 = [STRes358|STResList358],
- ?line ITRes358 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S358),
+ ITRes358 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S358),
ITResList359 = [ITRes358|ITResList358],
- ?line {STRes359,S359} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes359,S359} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList360 = [STRes359|STResList359],
- ?line ITRes359 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S359),
+ ITRes359 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S359),
ITResList360 = [ITRes359|ITResList359],
- ?line {STRes360,S360} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes360,S360} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList361 = [STRes360|STResList360],
- ?line ITRes360 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S360),
+ ITRes360 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S360),
ITResList361 = [ITRes360|ITResList360],
- ?line {STRes361,S361} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes361,S361} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList362 = [STRes361|STResList361],
- ?line ITRes361 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S361),
+ ITRes361 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S361),
ITResList362 = [ITRes361|ITResList361],
- ?line {STRes362,S362} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes362,S362} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList363 = [STRes362|STResList362],
- ?line ITRes362 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S362),
+ ITRes362 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S362),
ITResList363 = [ITRes362|ITResList362],
- ?line {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList364 = [STRes363|STResList363],
- ?line ITRes363 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S363),
+ ITRes363 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S363),
ITResList364 = [ITRes363|ITResList363],
- ?line {STRes364,S364} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes364,S364} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList365 = [STRes364|STResList364],
- ?line ITRes364 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S364),
+ ITRes364 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S364),
ITResList365 = [ITRes364|ITResList364],
- ?line {STRes365,S365} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes365,S365} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList366 = [STRes365|STResList365],
- ?line ITRes365 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_float.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S365),
+ ITRes365 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_float.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S365),
ITResList366 = [ITRes365|ITResList365],
- ?line {STRes366,S366} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes366,S366} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList367 = [STRes366|STResList366],
- ?line ITRes366 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S366),
+ ITRes366 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S366),
ITResList367 = [ITRes366|ITResList366],
- ?line {STRes367,S367} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes367,S367} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList368 = [STRes367|STResList367],
- ?line ITRes367 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S367),
+ ITRes367 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S367),
ITResList368 = [ITRes367|ITResList367],
- ?line {STRes368,S368} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes368,S368} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList369 = [STRes368|STResList368],
- ?line ITRes368 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S368),
+ ITRes368 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S368),
ITResList369 = [ITRes368|ITResList368],
- ?line {STRes369,S369} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes369,S369} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList370 = [STRes369|STResList369],
- ?line ITRes369 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S369),
+ ITRes369 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S369),
ITResList370 = [ITRes369|ITResList369],
- ?line {STRes370,S370} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes370,S370} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList371 = [STRes370|STResList370],
- ?line ITRes370 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S370),
+ ITRes370 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S370),
ITResList371 = [ITRes370|ITResList370],
- ?line {STRes371,S371} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes371,S371} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList372 = [STRes371|STResList371],
- ?line ITRes371 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S371),
+ ITRes371 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S371),
ITResList372 = [ITRes371|ITResList371],
- ?line {STRes372,S372} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes372,S372} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList373 = [STRes372|STResList372],
- ?line ITRes372 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S372),
+ ITRes372 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S372),
ITResList373 = [ITRes372|ITResList372],
- ?line {STRes373,S373} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes373,S373} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList374 = [STRes373|STResList373],
- ?line ITRes373 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S373),
+ ITRes373 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S373),
ITResList374 = [ITRes373|ITResList373],
- ?line {STRes374,S374} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes374,S374} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList375 = [STRes374|STResList374],
- ?line ITRes374 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S374),
+ ITRes374 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S374),
ITResList375 = [ITRes374|ITResList374],
- ?line {STRes375,S375} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes375,S375} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList376 = [STRes375|STResList375],
- ?line ITRes375 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S375),
+ ITRes375 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S375),
ITResList376 = [ITRes375|ITResList375],
- ?line {STRes376,S376} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes376,S376} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList377 = [STRes376|STResList376],
- ?line ITRes376 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S376),
+ ITRes376 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S376),
ITResList377 = [ITRes376|ITResList376],
- ?line {STRes377,S377} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes377,S377} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList378 = [STRes377|STResList377],
- ?line ITRes377 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S377),
+ ITRes377 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S377),
ITResList378 = [ITRes377|ITResList377],
- ?line {STRes378,S378} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes378,S378} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList379 = [STRes378|STResList378],
- ?line ITRes378 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S378),
+ ITRes378 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S378),
ITResList379 = [ITRes378|ITResList378],
- ?line {STRes379,S379} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes379,S379} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList380 = [STRes379|STResList379],
- ?line ITRes379 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S379),
+ ITRes379 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S379),
ITResList380 = [ITRes379|ITResList379],
- ?line {STRes380,S380} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes380,S380} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList381 = [STRes380|STResList380],
- ?line ITRes380 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S380),
+ ITRes380 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S380),
ITResList381 = [ITRes380|ITResList380],
- ?line {STRes381,S381} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes381,S381} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList382 = [STRes381|STResList381],
- ?line ITRes381 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S381),
+ ITRes381 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S381),
ITResList382 = [ITRes381|ITResList381],
- ?line {STRes382,S382} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes382,S382} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList383 = [STRes382|STResList382],
- ?line ITRes382 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S382),
+ ITRes382 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S382),
ITResList383 = [ITRes382|ITResList382],
- ?line {STRes383,S383} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes383,S383} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList384 = [STRes383|STResList383],
- ?line ITRes383 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S383),
+ ITRes383 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S383),
ITResList384 = [ITRes383|ITResList383],
- ?line {STRes384,S384} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes384,S384} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList385 = [STRes384|STResList384],
- ?line ITRes384 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S384),
+ ITRes384 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S384),
ITResList385 = [ITRes384|ITResList384],
- ?line {STRes385,S385} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes385,S385} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList386 = [STRes385|STResList385],
- ?line ITRes385 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S385),
+ ITRes385 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S385),
ITResList386 = [ITRes385|ITResList385],
- ?line {STRes386,S386} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes386,S386} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList387 = [STRes386|STResList386],
- ?line ITRes386 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S386),
+ ITRes386 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S386),
ITResList387 = [ITRes386|ITResList386],
- ?line {STRes387,S387} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes387,S387} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList388 = [STRes387|STResList387],
- ?line ITRes387 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S387),
+ ITRes387 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S387),
ITResList388 = [ITRes387|ITResList387],
- ?line {STRes388,S388} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes388,S388} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList389 = [STRes388|STResList388],
- ?line ITRes388 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S388),
+ ITRes388 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S388),
ITResList389 = [ITRes388|ITResList388],
- ?line {STRes389,S389} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes389,S389} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList390 = [STRes389|STResList389],
- ?line ITRes389 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S389),
+ ITRes389 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S389),
ITResList390 = [ITRes389|ITResList389],
- ?line {STRes390,S390} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes390,S390} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList391 = [STRes390|STResList390],
- ?line ITRes390 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S390),
+ ITRes390 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S390),
ITResList391 = [ITRes390|ITResList390],
- ?line {STRes391,S391} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes391,S391} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList392 = [STRes391|STResList391],
- ?line ITRes391 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S391),
+ ITRes391 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S391),
ITResList392 = [ITRes391|ITResList391],
- ?line {STRes392,S392} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes392,S392} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList393 = [STRes392|STResList392],
- ?line ITRes392 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S392),
+ ITRes392 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S392),
ITResList393 = [ITRes392|ITResList392],
- ?line {STRes393,S393} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes393,S393} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList394 = [STRes393|STResList393],
- ?line ITRes393 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S393),
+ ITRes393 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S393),
ITResList394 = [ITRes393|ITResList393],
- ?line {STRes394,S394} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes394,S394} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList395 = [STRes394|STResList394],
- ?line ITRes394 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S394),
+ ITRes394 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S394),
ITResList395 = [ITRes394|ITResList394],
- ?line {STRes395,S395} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes395,S395} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList396 = [STRes395|STResList395],
- ?line ITRes395 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S395),
+ ITRes395 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S395),
ITResList396 = [ITRes395|ITResList395],
- ?line {STRes396,S396} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes396,S396} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList397 = [STRes396|STResList396],
- ?line ITRes396 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S396),
+ ITRes396 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S396),
ITResList397 = [ITRes396|ITResList396],
- ?line {STRes397,S397} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes397,S397} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList398 = [STRes397|STResList397],
- ?line ITRes397 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S397),
+ ITRes397 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S397),
ITResList398 = [ITRes397|ITResList397],
- ?line {STRes398,S398} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes398,S398} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList399 = [STRes398|STResList398],
- ?line ITRes398 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S398),
+ ITRes398 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S398),
ITResList399 = [ITRes398|ITResList398],
- ?line {STRes399,S399} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes399,S399} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList400 = [STRes399|STResList399],
- ?line ITRes399 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S399),
+ ITRes399 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S399),
ITResList400 = [ITRes399|ITResList399],
- ?line {STRes400,S400} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes400,S400} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList401 = [STRes400|STResList400],
- ?line ITRes400 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S400),
+ ITRes400 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S400),
ITResList401 = [ITRes400|ITResList400],
- ?line {STRes401,S401} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes401,S401} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList402 = [STRes401|STResList401],
- ?line ITRes401 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S401),
+ ITRes401 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S401),
ITResList402 = [ITRes401|ITResList401],
- ?line {STRes402,S402} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes402,S402} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList403 = [STRes402|STResList402],
- ?line ITRes402 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S402),
+ ITRes402 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S402),
ITResList403 = [ITRes402|ITResList402],
- ?line {STRes403,S403} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes403,S403} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList404 = [STRes403|STResList403],
- ?line ITRes403 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S403),
+ ITRes403 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S403),
ITResList404 = [ITRes403|ITResList403],
- ?line {STRes404,S404} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes404,S404} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList405 = [STRes404|STResList404],
- ?line ITRes404 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S404),
+ ITRes404 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S404),
ITResList405 = [ITRes404|ITResList404],
- ?line {STRes405,S405} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes405,S405} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList406 = [STRes405|STResList405],
- ?line ITRes405 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S405),
+ ITRes405 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S405),
ITResList406 = [ITRes405|ITResList405],
- ?line {STRes406,S406} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes406,S406} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList407 = [STRes406|STResList406],
- ?line ITRes406 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S406),
+ ITRes406 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S406),
ITResList407 = [ITRes406|ITResList406],
- ?line {STRes407,S407} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes407,S407} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList408 = [STRes407|STResList407],
- ?line ITRes407 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S407),
+ ITRes407 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S407),
ITResList408 = [ITRes407|ITResList407],
- ?line {STRes408,S408} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes408,S408} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList409 = [STRes408|STResList408],
- ?line ITRes408 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S408),
+ ITRes408 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S408),
ITResList409 = [ITRes408|ITResList408],
- ?line {STRes409,S409} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes409,S409} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList410 = [STRes409|STResList409],
- ?line ITRes409 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S409),
+ ITRes409 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S409),
ITResList410 = [ITRes409|ITResList409],
- ?line {STRes410,S410} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes410,S410} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList411 = [STRes410|STResList410],
- ?line ITRes410 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S410),
+ ITRes410 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S410),
ITResList411 = [ITRes410|ITResList410],
- ?line {STRes411,S411} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes411,S411} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList412 = [STRes411|STResList411],
- ?line ITRes411 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S411),
+ ITRes411 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S411),
ITResList412 = [ITRes411|ITResList411],
- ?line {STRes412,S412} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes412,S412} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList413 = [STRes412|STResList412],
- ?line ITRes412 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S412),
+ ITRes412 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S412),
ITResList413 = [ITRes412|ITResList412],
- ?line {STRes413,S413} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes413,S413} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList414 = [STRes413|STResList413],
- ?line ITRes413 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S413),
+ ITRes413 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S413),
ITResList414 = [ITRes413|ITResList413],
- ?line {STRes414,S414} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes414,S414} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList415 = [STRes414|STResList414],
- ?line ITRes414 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S414),
+ ITRes414 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S414),
ITResList415 = [ITRes414|ITResList414],
- ?line {STRes415,S415} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes415,S415} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList416 = [STRes415|STResList415],
- ?line ITRes415 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S415),
+ ITRes415 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S415),
ITResList416 = [ITRes415|ITResList415],
- ?line {STRes416,S416} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes416,S416} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList417 = [STRes416|STResList416],
- ?line ITRes416 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S416),
+ ITRes416 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S416),
ITResList417 = [ITRes416|ITResList416],
- ?line {STRes417,S417} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes417,S417} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList418 = [STRes417|STResList417],
- ?line ITRes417 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S417),
+ ITRes417 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S417),
ITResList418 = [ITRes417|ITResList417],
- ?line {STRes418,S418} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes418,S418} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList419 = [STRes418|STResList418],
- ?line ITRes418 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S418),
+ ITRes418 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S418),
ITResList419 = [ITRes418|ITResList418],
- ?line {STRes419,S419} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes419,S419} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList420 = [STRes419|STResList419],
- ?line ITRes419 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S419),
+ ITRes419 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S419),
ITResList420 = [ITRes419|ITResList419],
- ?line {STRes420,S420} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes420,S420} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList421 = [STRes420|STResList420],
- ?line ITRes420 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S420),
+ ITRes420 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S420),
ITResList421 = [ITRes420|ITResList420],
- ?line {STRes421,S421} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes421,S421} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList422 = [STRes421|STResList421],
- ?line ITRes421 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S421),
+ ITRes421 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S421),
ITResList422 = [ITRes421|ITResList421],
- ?line {STRes422,S422} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes422,S422} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList423 = [STRes422|STResList422],
- ?line ITRes422 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S422),
+ ITRes422 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S422),
ITResList423 = [ITRes422|ITResList422],
- ?line {STRes423,S423} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes423,S423} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList424 = [STRes423|STResList423],
- ?line ITRes423 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S423),
+ ITRes423 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S423),
ITResList424 = [ITRes423|ITResList423],
- ?line {STRes424,S424} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes424,S424} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList425 = [STRes424|STResList424],
- ?line ITRes424 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S424),
+ ITRes424 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S424),
ITResList425 = [ITRes424|ITResList424],
- ?line {STRes425,S425} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes425,S425} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList426 = [STRes425|STResList425],
- ?line ITRes425 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S425),
+ ITRes425 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S425),
ITResList426 = [ITRes425|ITResList425],
- ?line {STRes426,S426} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes426,S426} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList427 = [STRes426|STResList426],
- ?line ITRes426 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S426),
+ ITRes426 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S426),
ITResList427 = [ITRes426|ITResList426],
- ?line {STRes427,S427} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes427,S427} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList428 = [STRes427|STResList427],
- ?line ITRes427 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S427),
+ ITRes427 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S427),
ITResList428 = [ITRes427|ITResList427],
- ?line {STRes428,S428} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes428,S428} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList429 = [STRes428|STResList428],
- ?line ITRes428 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S428),
+ ITRes428 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S428),
ITResList429 = [ITRes428|ITResList428],
- ?line {STRes429,S429} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes429,S429} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList430 = [STRes429|STResList429],
- ?line ITRes429 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S429),
+ ITRes429 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S429),
ITResList430 = [ITRes429|ITResList429],
- ?line {STRes430,S430} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes430,S430} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList431 = [STRes430|STResList430],
- ?line ITRes430 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S430),
+ ITRes430 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S430),
ITResList431 = [ITRes430|ITResList430],
- ?line {STRes431,S431} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes431,S431} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList432 = [STRes431|STResList431],
- ?line ITRes431 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S431),
+ ITRes431 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S431),
ITResList432 = [ITRes431|ITResList431],
- ?line {STRes432,S432} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes432,S432} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList433 = [STRes432|STResList432],
- ?line ITRes432 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S432),
+ ITRes432 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S432),
ITResList433 = [ITRes432|ITResList432],
- ?line {STRes433,S433} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes433,S433} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList434 = [STRes433|STResList433],
- ?line ITRes433 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S433),
+ ITRes433 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S433),
ITResList434 = [ITRes433|ITResList433],
- ?line {STRes434,S434} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes434,S434} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList435 = [STRes434|STResList434],
- ?line ITRes434 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S434),
+ ITRes434 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S434),
ITResList435 = [ITRes434|ITResList434],
- ?line {STRes435,S435} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes435,S435} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList436 = [STRes435|STResList435],
- ?line ITRes435 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S435),
+ ITRes435 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S435),
ITResList436 = [ITRes435|ITResList435],
- ?line {STRes436,S436} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes436,S436} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList437 = [STRes436|STResList436],
- ?line ITRes436 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S436),
+ ITRes436 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S436),
ITResList437 = [ITRes436|ITResList436],
- ?line {STRes437,S437} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes437,S437} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList438 = [STRes437|STResList437],
- ?line ITRes437 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S437),
+ ITRes437 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S437),
ITResList438 = [ITRes437|ITResList437],
- ?line {STRes438,S438} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes438,S438} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList439 = [STRes438|STResList438],
- ?line ITRes438 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S438),
+ ITRes438 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S438),
ITResList439 = [ITRes438|ITResList438],
- ?line {STRes439,S439} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes439,S439} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList440 = [STRes439|STResList439],
- ?line ITRes439 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S439),
+ ITRes439 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S439),
ITResList440 = [ITRes439|ITResList439],
- ?line {STRes440,S440} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes440,S440} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList441 = [STRes440|STResList440],
- ?line ITRes440 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S440),
+ ITRes440 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S440),
ITResList441 = [ITRes440|ITResList440],
- ?line {STRes441,S441} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes441,S441} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList442 = [STRes441|STResList441],
- ?line ITRes441 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S441),
+ ITRes441 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S441),
ITResList442 = [ITRes441|ITResList441],
- ?line {STRes442,S442} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes442,S442} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList443 = [STRes442|STResList442],
- ?line ITRes442 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S442),
+ ITRes442 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S442),
ITResList443 = [ITRes442|ITResList442],
- ?line {STRes443,S443} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes443,S443} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList444 = [STRes443|STResList443],
- ?line ITRes443 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S443),
+ ITRes443 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S443),
ITResList444 = [ITRes443|ITResList443],
- ?line {STRes444,S444} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes444,S444} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList445 = [STRes444|STResList444],
- ?line ITRes444 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S444),
+ ITRes444 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S444),
ITResList445 = [ITRes444|ITResList444],
- ?line {STRes445,S445} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes445,S445} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList446 = [STRes445|STResList445],
- ?line ITRes445 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S445),
+ ITRes445 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S445),
ITResList446 = [ITRes445|ITResList445],
- ?line {STRes446,S446} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes446,S446} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList447 = [STRes446|STResList446],
- ?line ITRes446 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S446),
+ ITRes446 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S446),
ITResList447 = [ITRes446|ITResList446],
- ?line {STRes447,S447} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes447,S447} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList448 = [STRes447|STResList447],
- ?line ITRes447 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S447),
+ ITRes447 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S447),
ITResList448 = [ITRes447|ITResList447],
- ?line {STRes448,S448} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes448,S448} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList449 = [STRes448|STResList448],
- ?line ITRes448 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S448),
+ ITRes448 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S448),
ITResList449 = [ITRes448|ITResList448],
- ?line {STRes449,S449} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes449,S449} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList450 = [STRes449|STResList449],
- ?line ITRes449 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S449),
+ ITRes449 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S449),
ITResList450 = [ITRes449|ITResList449],
- ?line {STRes450,S450} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes450,S450} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList451 = [STRes450|STResList450],
- ?line ITRes450 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S450),
+ ITRes450 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S450),
ITResList451 = [ITRes450|ITResList450],
- ?line {STRes451,S451} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes451,S451} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList452 = [STRes451|STResList451],
- ?line ITRes451 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S451),
+ ITRes451 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S451),
ITResList452 = [ITRes451|ITResList451],
- ?line {STRes452,S452} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes452,S452} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList453 = [STRes452|STResList452],
- ?line ITRes452 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S452),
+ ITRes452 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S452),
ITResList453 = [ITRes452|ITResList452],
- ?line {STRes453,S453} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes453,S453} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList454 = [STRes453|STResList453],
- ?line ITRes453 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S453),
+ ITRes453 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S453),
ITResList454 = [ITRes453|ITResList453],
- ?line {STRes454,S454} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes454,S454} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList455 = [STRes454|STResList454],
- ?line ITRes454 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S454),
+ ITRes454 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S454),
ITResList455 = [ITRes454|ITResList454],
- ?line {STRes455,S455} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes455,S455} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList456 = [STRes455|STResList455],
- ?line ITRes455 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S455),
+ ITRes455 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S455),
ITResList456 = [ITRes455|ITResList455],
- ?line {STRes456,S456} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes456,S456} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList457 = [STRes456|STResList456],
- ?line ITRes456 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S456),
+ ITRes456 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S456),
ITResList457 = [ITRes456|ITResList456],
- ?line {STRes457,S457} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes457,S457} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList458 = [STRes457|STResList457],
- ?line ITRes457 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S457),
+ ITRes457 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S457),
ITResList458 = [ITRes457|ITResList457],
- ?line {STRes458,S458} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes458,S458} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList459 = [STRes458|STResList458],
- ?line ITRes458 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S458),
+ ITRes458 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S458),
ITResList459 = [ITRes458|ITResList458],
- ?line {STRes459,S459} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes459,S459} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList460 = [STRes459|STResList459],
- ?line ITRes459 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S459),
+ ITRes459 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S459),
ITResList460 = [ITRes459|ITResList459],
- ?line {STRes460,S460} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes460,S460} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList461 = [STRes460|STResList460],
- ?line ITRes460 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S460),
+ ITRes460 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S460),
ITResList461 = [ITRes460|ITResList460],
- ?line {STRes461,S461} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes461,S461} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList462 = [STRes461|STResList461],
- ?line ITRes461 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S461),
+ ITRes461 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S461),
ITResList462 = [ITRes461|ITResList461],
- ?line {STRes462,S462} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes462,S462} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList463 = [STRes462|STResList462],
- ?line ITRes462 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S462),
+ ITRes462 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S462),
ITResList463 = [ITRes462|ITResList462],
- ?line {STRes463,S463} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes463,S463} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList464 = [STRes463|STResList463],
- ?line ITRes463 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S463),
+ ITRes463 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S463),
ITResList464 = [ITRes463|ITResList463],
- ?line {STRes464,S464} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes464,S464} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList465 = [STRes464|STResList464],
- ?line ITRes464 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S464),
+ ITRes464 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S464),
ITResList465 = [ITRes464|ITResList464],
- ?line {STRes465,S465} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes465,S465} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList466 = [STRes465|STResList465],
- ?line ITRes465 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S465),
+ ITRes465 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S465),
ITResList466 = [ITRes465|ITResList465],
- ?line {STRes466,S466} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes466,S466} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList467 = [STRes466|STResList466],
- ?line ITRes466 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S466),
+ ITRes466 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S466),
ITResList467 = [ITRes466|ITResList466],
- ?line {STRes467,S467} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes467,S467} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList468 = [STRes467|STResList467],
- ?line ITRes467 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S467),
+ ITRes467 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S467),
ITResList468 = [ITRes467|ITResList467],
- ?line {STRes468,S468} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes468,S468} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList469 = [STRes468|STResList468],
- ?line ITRes468 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S468),
+ ITRes468 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S468),
ITResList469 = [ITRes468|ITResList468],
- ?line {STRes469,S469} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes469,S469} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList470 = [STRes469|STResList469],
- ?line ITRes469 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S469),
+ ITRes469 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S469),
ITResList470 = [ITRes469|ITResList469],
- ?line {STRes470,S470} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes470,S470} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList471 = [STRes470|STResList470],
- ?line ITRes470 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S470),
+ ITRes470 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S470),
ITResList471 = [ITRes470|ITResList470],
- ?line {STRes471,S471} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes471,S471} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList472 = [STRes471|STResList471],
- ?line ITRes471 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S471),
+ ITRes471 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S471),
ITResList472 = [ITRes471|ITResList471],
- ?line {STRes472,S472} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes472,S472} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList473 = [STRes472|STResList472],
- ?line ITRes472 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S472),
+ ITRes472 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S472),
ITResList473 = [ITRes472|ITResList472],
- ?line {STRes473,S473} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes473,S473} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList474 = [STRes473|STResList473],
- ?line ITRes473 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S473),
+ ITRes473 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S473),
ITResList474 = [ITRes473|ITResList473],
- ?line {STRes474,S474} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes474,S474} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList475 = [STRes474|STResList474],
- ?line ITRes474 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S474),
+ ITRes474 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S474),
ITResList475 = [ITRes474|ITResList474],
- ?line {STRes475,S475} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes475,S475} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList476 = [STRes475|STResList475],
- ?line ITRes475 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S475),
+ ITRes475 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S475),
ITResList476 = [ITRes475|ITResList475],
- ?line {STRes476,S476} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes476,S476} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList477 = [STRes476|STResList476],
- ?line ITRes476 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S476),
+ ITRes476 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S476),
ITResList477 = [ITRes476|ITResList476],
- ?line {STRes477,S477} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes477,S477} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList478 = [STRes477|STResList477],
- ?line ITRes477 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S477),
+ ITRes477 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S477),
ITResList478 = [ITRes477|ITResList477],
- ?line {STRes478,S478} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes478,S478} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList479 = [STRes478|STResList478],
- ?line ITRes478 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S478),
+ ITRes478 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S478),
ITResList479 = [ITRes478|ITResList478],
- ?line {STRes479,S479} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes479,S479} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList480 = [STRes479|STResList479],
- ?line ITRes479 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S479),
+ ITRes479 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S479),
ITResList480 = [ITRes479|ITResList479],
- ?line {STRes480,S480} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes480,S480} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList481 = [STRes480|STResList480],
- ?line ITRes480 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S480),
+ ITRes480 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S480),
ITResList481 = [ITRes480|ITResList480],
- ?line {STRes481,S481} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes481,S481} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList482 = [STRes481|STResList481],
- ?line ITRes481 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S481),
+ ITRes481 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S481),
ITResList482 = [ITRes481|ITResList481],
- ?line {STRes482,S482} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes482,S482} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList483 = [STRes482|STResList482],
- ?line ITRes482 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S482),
+ ITRes482 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S482),
ITResList483 = [ITRes482|ITResList482],
- ?line {STRes483,S483} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes483,S483} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList484 = [STRes483|STResList483],
- ?line ITRes483 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S483),
+ ITRes483 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S483),
ITResList484 = [ITRes483|ITResList483],
- ?line {STRes484,S484} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes484,S484} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList485 = [STRes484|STResList484],
- ?line ITRes484 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S484),
+ ITRes484 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S484),
ITResList485 = [ITRes484|ITResList484],
- ?line {STRes485,S485} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes485,S485} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList486 = [STRes485|STResList485],
- ?line ITRes485 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S485),
+ ITRes485 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S485),
ITResList486 = [ITRes485|ITResList485],
- ?line {STRes486,S486} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes486,S486} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList487 = [STRes486|STResList486],
- ?line ITRes486 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S486),
+ ITRes486 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S486),
ITResList487 = [ITRes486|ITResList486],
- ?line {STRes487,S487} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes487,S487} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList488 = [STRes487|STResList487],
- ?line ITRes487 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S487),
+ ITRes487 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S487),
ITResList488 = [ITRes487|ITResList487],
- ?line {STRes488,S488} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes488,S488} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList489 = [STRes488|STResList488],
- ?line ITRes488 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S488),
+ ITRes488 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S488),
ITResList489 = [ITRes488|ITResList488],
- ?line {STRes489,S489} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes489,S489} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList490 = [STRes489|STResList489],
- ?line ITRes489 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S489),
+ ITRes489 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S489),
ITResList490 = [ITRes489|ITResList489],
- ?line {STRes490,S490} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes490,S490} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList491 = [STRes490|STResList490],
- ?line ITRes490 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S490),
+ ITRes490 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S490),
ITResList491 = [ITRes490|ITResList490],
- ?line {STRes491,S491} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes491,S491} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList492 = [STRes491|STResList491],
- ?line ITRes491 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S491),
+ ITRes491 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S491),
ITResList492 = [ITRes491|ITResList491],
- ?line {STRes492,S492} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes492,S492} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList493 = [STRes492|STResList492],
- ?line ITRes492 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S492),
+ ITRes492 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S492),
ITResList493 = [ITRes492|ITResList492],
- ?line {STRes493,S493} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes493,S493} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList494 = [STRes493|STResList493],
- ?line ITRes493 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S493),
+ ITRes493 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S493),
ITResList494 = [ITRes493|ITResList493],
- ?line {STRes494,S494} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes494,S494} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList495 = [STRes494|STResList494],
- ?line ITRes494 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S494),
+ ITRes494 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S494),
ITResList495 = [ITRes494|ITResList494],
- ?line {STRes495,S495} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes495,S495} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList496 = [STRes495|STResList495],
- ?line ITRes495 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S495),
+ ITRes495 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S495),
ITResList496 = [ITRes495|ITResList495],
- ?line {STRes496,S496} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes496,S496} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList497 = [STRes496|STResList496],
- ?line ITRes496 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S496),
+ ITRes496 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S496),
ITResList497 = [ITRes496|ITResList496],
- ?line {STRes497,S497} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes497,S497} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList498 = [STRes497|STResList497],
- ?line ITRes497 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S497),
+ ITRes497 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S497),
ITResList498 = [ITRes497|ITResList497],
- ?line {STRes498,S498} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes498,S498} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList499 = [STRes498|STResList498],
- ?line ITRes498 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S498),
+ ITRes498 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S498),
ITResList499 = [ITRes498|ITResList498],
- ?line {STRes499,S499} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes499,S499} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList500 = [STRes499|STResList499],
- ?line ITRes499 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S499),
+ ITRes499 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S499),
ITResList500 = [ITRes499|ITResList499],
- ?line {STRes500,S500} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes500,S500} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList501 = [STRes500|STResList500],
- ?line ITRes500 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S500),
+ ITRes500 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S500),
ITResList501 = [ITRes500|ITResList500],
- ?line {STRes501,S501} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes501,S501} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList502 = [STRes501|STResList501],
- ?line ITRes501 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S501),
+ ITRes501 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S501),
ITResList502 = [ITRes501|ITResList501],
- ?line {STRes502,S502} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes502,S502} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList503 = [STRes502|STResList502],
- ?line ITRes502 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S502),
+ ITRes502 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S502),
ITResList503 = [ITRes502|ITResList502],
- ?line {STRes503,S503} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes503,S503} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList504 = [STRes503|STResList503],
- ?line ITRes503 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S503),
+ ITRes503 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S503),
ITResList504 = [ITRes503|ITResList503],
- ?line {STRes504,S504} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes504,S504} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList505 = [STRes504|STResList504],
- ?line ITRes504 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S504),
+ ITRes504 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S504),
ITResList505 = [ITRes504|ITResList504],
- ?line {STRes505,S505} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes505,S505} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList506 = [STRes505|STResList505],
- ?line ITRes505 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S505),
+ ITRes505 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S505),
ITResList506 = [ITRes505|ITResList505],
- ?line {STRes506,S506} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes506,S506} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList507 = [STRes506|STResList506],
- ?line ITRes506 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S506),
+ ITRes506 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S506),
ITResList507 = [ITRes506|ITResList506],
- ?line {STRes507,S507} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes507,S507} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList508 = [STRes507|STResList507],
- ?line ITRes507 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S507),
+ ITRes507 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S507),
ITResList508 = [ITRes507|ITResList507],
- ?line {STRes508,S508} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes508,S508} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList509 = [STRes508|STResList508],
- ?line ITRes508 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S508),
+ ITRes508 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S508),
ITResList509 = [ITRes508|ITResList508],
- ?line {STRes509,S509} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes509,S509} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList510 = [STRes509|STResList509],
- ?line ITRes509 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S509),
+ ITRes509 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S509),
ITResList510 = [ITRes509|ITResList509],
- ?line {STRes510,S510} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes510,S510} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList511 = [STRes510|STResList510],
- ?line ITRes510 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S510),
+ ITRes510 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S510),
ITResList511 = [ITRes510|ITResList510],
- ?line {STRes511,S511} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes511,S511} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList512 = [STRes511|STResList511],
- ?line ITRes511 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S511),
+ ITRes511 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S511),
ITResList512 = [ITRes511|ITResList511],
- ?line {STRes512,S512} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes512,S512} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList513 = [STRes512|STResList512],
- ?line ITRes512 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S512),
+ ITRes512 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S512),
ITResList513 = [ITRes512|ITResList512],
- ?line {STRes513,S513} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes513,S513} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList514 = [STRes513|STResList513],
- ?line ITRes513 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S513),
+ ITRes513 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S513),
ITResList514 = [ITRes513|ITResList513],
- ?line {STRes514,S514} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes514,S514} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList515 = [STRes514|STResList514],
- ?line ITRes514 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S514),
+ ITRes514 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S514),
ITResList515 = [ITRes514|ITResList514],
- ?line {STRes515,S515} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes515,S515} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList516 = [STRes515|STResList515],
- ?line ITRes515 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S515),
+ ITRes515 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S515),
ITResList516 = [ITRes515|ITResList515],
- ?line {STRes516,S516} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes516,S516} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList517 = [STRes516|STResList516],
- ?line ITRes516 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S516),
+ ITRes516 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S516),
ITResList517 = [ITRes516|ITResList516],
- ?line {STRes517,S517} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes517,S517} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList518 = [STRes517|STResList517],
- ?line ITRes517 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S517),
+ ITRes517 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S517),
ITResList518 = [ITRes517|ITResList517],
- ?line {STRes518,S518} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes518,S518} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList519 = [STRes518|STResList518],
- ?line ITRes518 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S518),
+ ITRes518 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S518),
ITResList519 = [ITRes518|ITResList518],
- ?line {STRes519,S519} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes519,S519} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList520 = [STRes519|STResList519],
- ?line ITRes519 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S519),
+ ITRes519 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S519),
ITResList520 = [ITRes519|ITResList519],
- ?line {STRes520,S520} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes520,S520} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList521 = [STRes520|STResList520],
- ?line ITRes520 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S520),
+ ITRes520 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S520),
ITResList521 = [ITRes520|ITResList520],
- ?line {STRes521,S521} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes521,S521} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList522 = [STRes521|STResList521],
- ?line ITRes521 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S521),
+ ITRes521 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S521),
ITResList522 = [ITRes521|ITResList521],
- ?line {STRes522,S522} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes522,S522} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList523 = [STRes522|STResList522],
- ?line ITRes522 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S522),
+ ITRes522 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S522),
ITResList523 = [ITRes522|ITResList522],
- ?line {STRes523,S523} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes523,S523} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList524 = [STRes523|STResList523],
- ?line ITRes523 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S523),
+ ITRes523 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S523),
ITResList524 = [ITRes523|ITResList523],
- ?line {STRes524,S524} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes524,S524} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList525 = [STRes524|STResList524],
- ?line ITRes524 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S524),
+ ITRes524 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S524),
ITResList525 = [ITRes524|ITResList524],
- ?line {STRes525,S525} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes525,S525} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList526 = [STRes525|STResList525],
- ?line ITRes525 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S525),
+ ITRes525 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S525),
ITResList526 = [ITRes525|ITResList525],
- ?line {STRes526,S526} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes526,S526} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList527 = [STRes526|STResList526],
- ?line ITRes526 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S526),
+ ITRes526 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S526),
ITResList527 = [ITRes526|ITResList526],
- ?line {STRes527,S527} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes527,S527} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList528 = [STRes527|STResList527],
- ?line ITRes527 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S527),
+ ITRes527 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S527),
ITResList528 = [ITRes527|ITResList527],
- ?line {STRes528,S528} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes528,S528} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList529 = [STRes528|STResList528],
- ?line ITRes528 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S528),
+ ITRes528 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S528),
ITResList529 = [ITRes528|ITResList528],
- ?line {STRes529,S529} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes529,S529} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList530 = [STRes529|STResList529],
- ?line ITRes529 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S529),
+ ITRes529 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S529),
ITResList530 = [ITRes529|ITResList529],
- ?line {STRes530,S530} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes530,S530} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList531 = [STRes530|STResList530],
- ?line ITRes530 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S530),
+ ITRes530 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S530),
ITResList531 = [ITRes530|ITResList530],
- ?line {STRes531,S531} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes531,S531} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList532 = [STRes531|STResList531],
- ?line ITRes531 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S531),
+ ITRes531 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S531),
ITResList532 = [ITRes531|ITResList531],
- ?line {STRes532,S532} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes532,S532} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList533 = [STRes532|STResList532],
- ?line ITRes532 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S532),
+ ITRes532 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S532),
ITResList533 = [ITRes532|ITResList532],
- ?line {STRes533,S533} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes533,S533} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList534 = [STRes533|STResList533],
- ?line ITRes533 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S533),
+ ITRes533 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S533),
ITResList534 = [ITRes533|ITResList533],
- ?line {STRes534,S534} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes534,S534} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList535 = [STRes534|STResList534],
- ?line ITRes534 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S534),
+ ITRes534 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S534),
ITResList535 = [ITRes534|ITResList534],
- ?line {STRes535,S535} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes535,S535} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList536 = [STRes535|STResList535],
- ?line ITRes535 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S535),
+ ITRes535 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S535),
ITResList536 = [ITRes535|ITResList535],
- ?line {STRes536,S536} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes536,S536} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList537 = [STRes536|STResList536],
- ?line ITRes536 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S536),
+ ITRes536 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S536),
ITResList537 = [ITRes536|ITResList536],
- ?line {STRes537,S537} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes537,S537} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList538 = [STRes537|STResList537],
- ?line ITRes537 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S537),
+ ITRes537 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S537),
ITResList538 = [ITRes537|ITResList537],
- ?line {STRes538,S538} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes538,S538} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList539 = [STRes538|STResList538],
- ?line ITRes538 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S538),
+ ITRes538 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S538),
ITResList539 = [ITRes538|ITResList538],
- ?line {STRes539,S539} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes539,S539} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList540 = [STRes539|STResList539],
- ?line ITRes539 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S539),
+ ITRes539 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S539),
ITResList540 = [ITRes539|ITResList539],
- ?line {STRes540,S540} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes540,S540} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList541 = [STRes540|STResList540],
- ?line ITRes540 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S540),
+ ITRes540 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S540),
ITResList541 = [ITRes540|ITResList540],
- ?line {STRes541,S541} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes541,S541} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList542 = [STRes541|STResList541],
- ?line ITRes541 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S541),
+ ITRes541 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S541),
ITResList542 = [ITRes541|ITResList541],
- ?line {STRes542,S542} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes542,S542} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList543 = [STRes542|STResList542],
- ?line ITRes542 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S542),
+ ITRes542 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S542),
ITResList543 = [ITRes542|ITResList542],
- ?line {STRes543,S543} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes543,S543} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList544 = [STRes543|STResList543],
- ?line ITRes543 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S543),
+ ITRes543 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S543),
ITResList544 = [ITRes543|ITResList543],
- ?line {STRes544,S544} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes544,S544} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList545 = [STRes544|STResList544],
- ?line ITRes544 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S544),
+ ITRes544 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S544),
ITResList545 = [ITRes544|ITResList544],
- ?line {STRes545,S545} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes545,S545} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList546 = [STRes545|STResList545],
- ?line ITRes545 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S545),
+ ITRes545 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S545),
ITResList546 = [ITRes545|ITResList545],
- ?line {STRes546,S546} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes546,S546} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList547 = [STRes546|STResList546],
- ?line ITRes546 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S546),
+ ITRes546 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S546),
ITResList547 = [ITRes546|ITResList546],
- ?line {STRes547,S547} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes547,S547} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList548 = [STRes547|STResList547],
- ?line ITRes547 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S547),
+ ITRes547 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S547),
ITResList548 = [ITRes547|ITResList547],
- ?line {STRes548,S548} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes548,S548} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList549 = [STRes548|STResList548],
- ?line ITRes548 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S548),
+ ITRes548 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S548),
ITResList549 = [ITRes548|ITResList548],
- ?line {STRes549,S549} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes549,S549} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList550 = [STRes549|STResList549],
- ?line ITRes549 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S549),
+ ITRes549 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S549),
ITResList550 = [ITRes549|ITResList549],
- ?line {STRes550,S550} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes550,S550} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList551 = [STRes550|STResList550],
- ?line ITRes550 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S550),
+ ITRes550 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S550),
ITResList551 = [ITRes550|ITResList550],
- ?line {STRes551,S551} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes551,S551} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList552 = [STRes551|STResList551],
- ?line ITRes551 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S551),
+ ITRes551 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S551),
ITResList552 = [ITRes551|ITResList551],
- ?line {STRes552,S552} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes552,S552} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList553 = [STRes552|STResList552],
- ?line ITRes552 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S552),
+ ITRes552 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S552),
ITResList553 = [ITRes552|ITResList552],
- ?line {STRes553,S553} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes553,S553} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList554 = [STRes553|STResList553],
- ?line ITRes553 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S553),
+ ITRes553 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S553),
ITResList554 = [ITRes553|ITResList553],
- ?line {STRes554,S554} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes554,S554} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList555 = [STRes554|STResList554],
- ?line ITRes554 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S554),
+ ITRes554 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S554),
ITResList555 = [ITRes554|ITResList554],
- ?line {STRes555,S555} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes555,S555} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList556 = [STRes555|STResList555],
- ?line ITRes555 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S555),
+ ITRes555 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S555),
ITResList556 = [ITRes555|ITResList555],
- ?line {STRes556,S556} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes556,S556} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList557 = [STRes556|STResList556],
- ?line ITRes556 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S556),
+ ITRes556 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S556),
ITResList557 = [ITRes556|ITResList556],
- ?line {STRes557,S557} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes557,S557} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList558 = [STRes557|STResList557],
- ?line ITRes557 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S557),
+ ITRes557 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S557),
ITResList558 = [ITRes557|ITResList557],
- ?line {STRes558,S558} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes558,S558} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList559 = [STRes558|STResList558],
- ?line ITRes558 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S558),
+ ITRes558 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S558),
ITResList559 = [ITRes558|ITResList558],
- ?line {STRes559,S559} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes559,S559} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList560 = [STRes559|STResList559],
- ?line ITRes559 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S559),
+ ITRes559 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S559),
ITResList560 = [ITRes559|ITResList559],
- ?line {STRes560,S560} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes560,S560} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList561 = [STRes560|STResList560],
- ?line ITRes560 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S560),
+ ITRes560 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S560),
ITResList561 = [ITRes560|ITResList560],
- ?line {STRes561,S561} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes561,S561} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList562 = [STRes561|STResList561],
- ?line ITRes561 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S561),
+ ITRes561 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S561),
ITResList562 = [ITRes561|ITResList561],
- ?line {STRes562,S562} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes562,S562} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList563 = [STRes562|STResList562],
- ?line ITRes562 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S562),
+ ITRes562 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S562),
ITResList563 = [ITRes562|ITResList562],
- ?line {STRes563,S563} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes563,S563} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList564 = [STRes563|STResList563],
- ?line ITRes563 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S563),
+ ITRes563 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S563),
ITResList564 = [ITRes563|ITResList563],
- ?line {STRes564,S564} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes564,S564} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList565 = [STRes564|STResList564],
- ?line ITRes564 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S564),
+ ITRes564 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S564),
ITResList565 = [ITRes564|ITResList564],
- ?line {STRes565,S565} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes565,S565} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList566 = [STRes565|STResList565],
- ?line ITRes565 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S565),
+ ITRes565 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S565),
ITResList566 = [ITRes565|ITResList565],
- ?line {STRes566,S566} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes566,S566} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList567 = [STRes566|STResList566],
- ?line ITRes566 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S566),
+ ITRes566 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S566),
ITResList567 = [ITRes566|ITResList566],
- ?line {STRes567,S567} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes567,S567} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList568 = [STRes567|STResList567],
- ?line ITRes567 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S567),
+ ITRes567 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S567),
ITResList568 = [ITRes567|ITResList567],
- ?line {STRes568,S568} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes568,S568} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList569 = [STRes568|STResList568],
- ?line ITRes568 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S568),
+ ITRes568 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S568),
ITResList569 = [ITRes568|ITResList568],
- ?line {STRes569,S569} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes569,S569} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList570 = [STRes569|STResList569],
- ?line ITRes569 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S569),
+ ITRes569 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S569),
ITResList570 = [ITRes569|ITResList569],
- ?line {STRes570,S570} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes570,S570} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList571 = [STRes570|STResList570],
- ?line ITRes570 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S570),
+ ITRes570 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S570),
ITResList571 = [ITRes570|ITResList570],
- ?line {STRes571,S571} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes571,S571} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList572 = [STRes571|STResList571],
- ?line ITRes571 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S571),
+ ITRes571 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S571),
ITResList572 = [ITRes571|ITResList571],
- ?line {STRes572,S572} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes572,S572} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList573 = [STRes572|STResList572],
- ?line ITRes572 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S572),
+ ITRes572 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S572),
ITResList573 = [ITRes572|ITResList572],
- ?line {STRes573,S573} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes573,S573} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList574 = [STRes573|STResList573],
- ?line ITRes573 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S573),
+ ITRes573 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S573),
ITResList574 = [ITRes573|ITResList573],
- ?line {STRes574,S574} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes574,S574} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList575 = [STRes574|STResList574],
- ?line ITRes574 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S574),
+ ITRes574 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S574),
ITResList575 = [ITRes574|ITResList574],
- ?line {STRes575,S575} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes575,S575} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList576 = [STRes575|STResList575],
- ?line ITRes575 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S575),
+ ITRes575 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S575),
ITResList576 = [ITRes575|ITResList575],
- ?line {STRes576,S576} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes576,S576} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList577 = [STRes576|STResList576],
- ?line ITRes576 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S576),
+ ITRes576 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S576),
ITResList577 = [ITRes576|ITResList576],
- ?line {STRes577,S577} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes577,S577} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList578 = [STRes577|STResList577],
- ?line ITRes577 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S577),
+ ITRes577 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S577),
ITResList578 = [ITRes577|ITResList577],
- ?line {STRes578,S578} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes578,S578} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList579 = [STRes578|STResList578],
- ?line ITRes578 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S578),
+ ITRes578 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S578),
ITResList579 = [ITRes578|ITResList578],
- ?line {STRes579,S579} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes579,S579} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList580 = [STRes579|STResList579],
- ?line ITRes579 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S579),
+ ITRes579 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S579),
ITResList580 = [ITRes579|ITResList579],
- ?line {STRes580,S580} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes580,S580} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList581 = [STRes580|STResList580],
- ?line ITRes580 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S580),
+ ITRes580 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S580),
ITResList581 = [ITRes580|ITResList580],
- ?line {STRes581,S581} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes581,S581} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList582 = [STRes581|STResList581],
- ?line ITRes581 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S581),
+ ITRes581 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S581),
ITResList582 = [ITRes581|ITResList581],
- ?line {STRes582,S582} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes582,S582} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList583 = [STRes582|STResList582],
- ?line ITRes582 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S582),
+ ITRes582 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S582),
ITResList583 = [ITRes582|ITResList582],
- ?line {STRes583,S583} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes583,S583} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList584 = [STRes583|STResList583],
- ?line ITRes583 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S583),
+ ITRes583 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S583),
ITResList584 = [ITRes583|ITResList583],
- ?line {STRes584,S584} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes584,S584} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList585 = [STRes584|STResList584],
- ?line ITRes584 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S584),
+ ITRes584 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S584),
ITResList585 = [ITRes584|ITResList584],
- ?line {STRes585,S585} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes585,S585} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList586 = [STRes585|STResList585],
- ?line ITRes585 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S585),
+ ITRes585 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S585),
ITResList586 = [ITRes585|ITResList585],
- ?line {STRes586,S586} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes586,S586} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList587 = [STRes586|STResList586],
- ?line ITRes586 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S586),
+ ITRes586 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S586),
ITResList587 = [ITRes586|ITResList586],
- ?line {STRes587,S587} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes587,S587} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList588 = [STRes587|STResList587],
- ?line ITRes587 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S587),
+ ITRes587 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S587),
ITResList588 = [ITRes587|ITResList587],
- ?line {STRes588,S588} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes588,S588} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList589 = [STRes588|STResList588],
- ?line ITRes588 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S588),
+ ITRes588 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S588),
ITResList589 = [ITRes588|ITResList588],
- ?line {STRes589,S589} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes589,S589} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList590 = [STRes589|STResList589],
- ?line ITRes589 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S589),
+ ITRes589 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S589),
ITResList590 = [ITRes589|ITResList589],
- ?line {STRes590,S590} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes590,S590} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList591 = [STRes590|STResList590],
- ?line ITRes590 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S590),
+ ITRes590 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S590),
ITResList591 = [ITRes590|ITResList590],
- ?line {STRes591,S591} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes591,S591} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList592 = [STRes591|STResList591],
- ?line ITRes591 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S591),
+ ITRes591 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S591),
ITResList592 = [ITRes591|ITResList591],
- ?line {STRes592,S592} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes592,S592} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList593 = [STRes592|STResList592],
- ?line ITRes592 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S592),
+ ITRes592 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S592),
ITResList593 = [ITRes592|ITResList592],
- ?line {STRes593,S593} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes593,S593} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList594 = [STRes593|STResList593],
- ?line ITRes593 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S593),
+ ITRes593 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S593),
ITResList594 = [ITRes593|ITResList593],
- ?line {STRes594,S594} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes594,S594} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList595 = [STRes594|STResList594],
- ?line ITRes594 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S594),
+ ITRes594 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S594),
ITResList595 = [ITRes594|ITResList594],
- ?line {STRes595,S595} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes595,S595} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList596 = [STRes595|STResList595],
- ?line ITRes595 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S595),
+ ITRes595 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S595),
ITResList596 = [ITRes595|ITResList595],
- ?line {STRes596,S596} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes596,S596} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList597 = [STRes596|STResList596],
- ?line ITRes596 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S596),
+ ITRes596 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S596),
ITResList597 = [ITRes596|ITResList596],
- ?line {STRes597,S597} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes597,S597} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList598 = [STRes597|STResList597],
- ?line ITRes597 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S597),
+ ITRes597 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S597),
ITResList598 = [ITRes597|ITResList597],
- ?line {STRes598,S598} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes598,S598} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList599 = [STRes598|STResList598],
- ?line ITRes598 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S598),
+ ITRes598 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S598),
ITResList599 = [ITRes598|ITResList598],
- ?line {STRes599,S599} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes599,S599} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList600 = [STRes599|STResList599],
- ?line ITRes599 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S599),
+ ITRes599 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S599),
ITResList600 = [ITRes599|ITResList599],
- ?line {STRes600,S600} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes600,S600} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList601 = [STRes600|STResList600],
- ?line ITRes600 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S600),
+ ITRes600 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S600),
ITResList601 = [ITRes600|ITResList600],
- ?line {STRes601,S601} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes601,S601} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList602 = [STRes601|STResList601],
- ?line ITRes601 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S601),
+ ITRes601 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S601),
ITResList602 = [ITRes601|ITResList601],
- ?line {STRes602,S602} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes602,S602} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList603 = [STRes602|STResList602],
- ?line ITRes602 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S602),
+ ITRes602 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S602),
ITResList603 = [ITRes602|ITResList602],
- ?line {STRes603,S603} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes603,S603} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList604 = [STRes603|STResList603],
- ?line ITRes603 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S603),
+ ITRes603 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S603),
ITResList604 = [ITRes603|ITResList603],
- ?line {STRes604,S604} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes604,S604} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList605 = [STRes604|STResList604],
- ?line ITRes604 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S604),
+ ITRes604 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S604),
ITResList605 = [ITRes604|ITResList604],
- ?line {STRes605,S605} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes605,S605} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList606 = [STRes605|STResList605],
- ?line ITRes605 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S605),
+ ITRes605 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S605),
ITResList606 = [ITRes605|ITResList605],
- ?line {STRes606,S606} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes606,S606} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList607 = [STRes606|STResList606],
- ?line ITRes606 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S606),
+ ITRes606 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S606),
ITResList607 = [ITRes606|ITResList606],
- ?line {STRes607,S607} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes607,S607} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList608 = [STRes607|STResList607],
- ?line ITRes607 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S607),
+ ITRes607 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S607),
ITResList608 = [ITRes607|ITResList607],
- ?line {STRes608,S608} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes608,S608} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList609 = [STRes608|STResList608],
- ?line ITRes608 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S608),
+ ITRes608 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S608),
ITResList609 = [ITRes608|ITResList608],
- ?line {STRes609,S609} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes609,S609} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList610 = [STRes609|STResList609],
- ?line ITRes609 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S609),
+ ITRes609 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S609),
ITResList610 = [ITRes609|ITResList609],
- ?line {STRes610,S610} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes610,S610} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList611 = [STRes610|STResList610],
- ?line ITRes610 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S610),
+ ITRes610 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S610),
ITResList611 = [ITRes610|ITResList610],
- ?line {STRes611,S611} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes611,S611} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList612 = [STRes611|STResList611],
- ?line ITRes611 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S611),
+ ITRes611 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S611),
ITResList612 = [ITRes611|ITResList611],
- ?line {STRes612,S612} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes612,S612} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList613 = [STRes612|STResList612],
- ?line ITRes612 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S612),
+ ITRes612 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S612),
ITResList613 = [ITRes612|ITResList612],
- ?line {STRes613,S613} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes613,S613} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList614 = [STRes613|STResList613],
- ?line ITRes613 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S613),
+ ITRes613 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S613),
ITResList614 = [ITRes613|ITResList613],
- ?line {STRes614,S614} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes614,S614} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList615 = [STRes614|STResList614],
- ?line ITRes614 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S614),
+ ITRes614 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S614),
ITResList615 = [ITRes614|ITResList614],
- ?line {STRes615,S615} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes615,S615} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList616 = [STRes615|STResList615],
- ?line ITRes615 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S615),
+ ITRes615 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S615),
ITResList616 = [ITRes615|ITResList615],
- ?line {STRes616,S616} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes616,S616} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList617 = [STRes616|STResList616],
- ?line ITRes616 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S616),
+ ITRes616 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S616),
ITResList617 = [ITRes616|ITResList616],
- ?line {STRes617,S617} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes617,S617} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList618 = [STRes617|STResList617],
- ?line ITRes617 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S617),
+ ITRes617 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S617),
ITResList618 = [ITRes617|ITResList617],
- ?line {STRes618,S618} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes618,S618} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList619 = [STRes618|STResList618],
- ?line ITRes618 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S618),
+ ITRes618 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S618),
ITResList619 = [ITRes618|ITResList618],
- ?line {STRes619,S619} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes619,S619} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList620 = [STRes619|STResList619],
- ?line ITRes619 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S619),
+ ITRes619 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S619),
ITResList620 = [ITRes619|ITResList619],
- ?line {STRes620,S620} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes620,S620} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList621 = [STRes620|STResList620],
- ?line ITRes620 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S620),
+ ITRes620 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S620),
ITResList621 = [ITRes620|ITResList620],
- ?line {STRes621,S621} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes621,S621} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList622 = [STRes621|STResList621],
- ?line ITRes621 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S621),
+ ITRes621 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S621),
ITResList622 = [ITRes621|ITResList621],
- ?line {STRes622,S622} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes622,S622} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList623 = [STRes622|STResList622],
- ?line ITRes622 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S622),
+ ITRes622 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S622),
ITResList623 = [ITRes622|ITResList622],
- ?line {STRes623,S623} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes623,S623} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList624 = [STRes623|STResList623],
- ?line ITRes623 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S623),
+ ITRes623 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S623),
ITResList624 = [ITRes623|ITResList623],
- ?line {STRes624,S624} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes624,S624} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList625 = [STRes624|STResList624],
- ?line ITRes624 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S624),
+ ITRes624 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S624),
ITResList625 = [ITRes624|ITResList624],
- ?line {STRes625,S625} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes625,S625} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList626 = [STRes625|STResList625],
- ?line ITRes625 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S625),
+ ITRes625 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S625),
ITResList626 = [ITRes625|ITResList625],
- ?line {STRes626,S626} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes626,S626} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList627 = [STRes626|STResList626],
- ?line ITRes626 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S626),
+ ITRes626 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S626),
ITResList627 = [ITRes626|ITResList626],
- ?line {STRes627,S627} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes627,S627} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList628 = [STRes627|STResList627],
- ?line ITRes627 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S627),
+ ITRes627 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S627),
ITResList628 = [ITRes627|ITResList627],
- ?line {STRes628,S628} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes628,S628} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList629 = [STRes628|STResList628],
- ?line ITRes628 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S628),
+ ITRes628 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S628),
ITResList629 = [ITRes628|ITResList628],
- ?line {STRes629,S629} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes629,S629} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList630 = [STRes629|STResList629],
- ?line ITRes629 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S629),
+ ITRes629 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S629),
ITResList630 = [ITRes629|ITResList629],
- ?line {STRes630,S630} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes630,S630} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList631 = [STRes630|STResList630],
- ?line ITRes630 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S630),
+ ITRes630 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S630),
ITResList631 = [ITRes630|ITResList630],
- ?line {STRes631,S631} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes631,S631} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList632 = [STRes631|STResList631],
- ?line ITRes631 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S631),
+ ITRes631 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S631),
ITResList632 = [ITRes631|ITResList631],
- ?line {STRes632,S632} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes632,S632} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList633 = [STRes632|STResList632],
- ?line ITRes632 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S632),
+ ITRes632 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S632),
ITResList633 = [ITRes632|ITResList632],
- ?line {STRes633,S633} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes633,S633} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList634 = [STRes633|STResList633],
- ?line ITRes633 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S633),
+ ITRes633 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S633),
ITResList634 = [ITRes633|ITResList633],
- ?line {STRes634,S634} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes634,S634} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList635 = [STRes634|STResList634],
- ?line ITRes634 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S634),
+ ITRes634 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S634),
ITResList635 = [ITRes634|ITResList634],
- ?line {STRes635,S635} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes635,S635} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList636 = [STRes635|STResList635],
- ?line ITRes635 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S635),
+ ITRes635 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S635),
ITResList636 = [ITRes635|ITResList635],
- ?line {STRes636,S636} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes636,S636} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList637 = [STRes636|STResList636],
- ?line ITRes636 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S636),
+ ITRes636 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S636),
ITResList637 = [ITRes636|ITResList636],
- ?line {STRes637,S637} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes637,S637} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList638 = [STRes637|STResList637],
- ?line ITRes637 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S637),
+ ITRes637 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S637),
ITResList638 = [ITRes637|ITResList637],
- ?line {STRes638,S638} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes638,S638} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList639 = [STRes638|STResList638],
- ?line ITRes638 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S638),
+ ITRes638 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S638),
ITResList639 = [ITRes638|ITResList638],
- ?line {STRes639,S639} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes639,S639} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList640 = [STRes639|STResList639],
- ?line ITRes639 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S639),
+ ITRes639 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S639),
ITResList640 = [ITRes639|ITResList639],
- ?line {STRes640,S640} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes640,S640} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList641 = [STRes640|STResList640],
- ?line ITRes640 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S640),
+ ITRes640 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S640),
ITResList641 = [ITRes640|ITResList640],
- ?line {STRes641,S641} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes641,S641} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList642 = [STRes641|STResList641],
- ?line ITRes641 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S641),
+ ITRes641 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S641),
ITResList642 = [ITRes641|ITResList641],
- ?line {STRes642,S642} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes642,S642} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList643 = [STRes642|STResList642],
- ?line ITRes642 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S642),
+ ITRes642 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S642),
ITResList643 = [ITRes642|ITResList642],
- ?line {STRes643,S643} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes643,S643} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList644 = [STRes643|STResList643],
- ?line ITRes643 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S643),
+ ITRes643 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S643),
ITResList644 = [ITRes643|ITResList643],
- ?line {STRes644,S644} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes644,S644} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList645 = [STRes644|STResList644],
- ?line ITRes644 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S644),
+ ITRes644 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S644),
ITResList645 = [ITRes644|ITResList644],
- ?line {STRes645,S645} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes645,S645} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList646 = [STRes645|STResList645],
- ?line ITRes645 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S645),
+ ITRes645 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S645),
ITResList646 = [ITRes645|ITResList645],
- ?line {STRes646,S646} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes646,S646} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList647 = [STRes646|STResList646],
- ?line ITRes646 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S646),
+ ITRes646 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S646),
ITResList647 = [ITRes646|ITResList646],
- ?line {STRes647,S647} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes647,S647} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList648 = [STRes647|STResList647],
- ?line ITRes647 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S647),
+ ITRes647 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S647),
ITResList648 = [ITRes647|ITResList647],
- ?line {STRes648,S648} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes648,S648} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList649 = [STRes648|STResList648],
- ?line ITRes648 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S648),
+ ITRes648 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S648),
ITResList649 = [ITRes648|ITResList648],
- ?line {STRes649,S649} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes649,S649} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList650 = [STRes649|STResList649],
- ?line ITRes649 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S649),
+ ITRes649 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S649),
ITResList650 = [ITRes649|ITResList649],
- ?line {STRes650,S650} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes650,S650} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList651 = [STRes650|STResList650],
- ?line ITRes650 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S650),
+ ITRes650 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S650),
ITResList651 = [ITRes650|ITResList650],
- ?line {STRes651,S651} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes651,S651} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList652 = [STRes651|STResList651],
- ?line ITRes651 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S651),
+ ITRes651 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S651),
ITResList652 = [ITRes651|ITResList651],
- ?line {STRes652,S652} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes652,S652} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList653 = [STRes652|STResList652],
- ?line ITRes652 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S652),
+ ITRes652 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S652),
ITResList653 = [ITRes652|ITResList652],
- ?line {STRes653,S653} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes653,S653} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList654 = [STRes653|STResList653],
- ?line ITRes653 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S653),
+ ITRes653 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S653),
ITResList654 = [ITRes653|ITResList653],
- ?line {STRes654,S654} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes654,S654} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList655 = [STRes654|STResList654],
- ?line ITRes654 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S654),
+ ITRes654 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S654),
ITResList655 = [ITRes654|ITResList654],
- ?line {STRes655,S655} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes655,S655} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList656 = [STRes655|STResList655],
- ?line ITRes655 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S655),
+ ITRes655 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S655),
ITResList656 = [ITRes655|ITResList655],
- ?line {STRes656,S656} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes656,S656} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList657 = [STRes656|STResList656],
- ?line ITRes656 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S656),
+ ITRes656 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S656),
ITResList657 = [ITRes656|ITResList656],
- ?line {STRes657,S657} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes657,S657} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList658 = [STRes657|STResList657],
- ?line ITRes657 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S657),
+ ITRes657 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S657),
ITResList658 = [ITRes657|ITResList657],
- ?line {STRes658,S658} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes658,S658} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList659 = [STRes658|STResList658],
- ?line ITRes658 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S658),
+ ITRes658 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S658),
ITResList659 = [ITRes658|ITResList658],
- ?line {STRes659,S659} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes659,S659} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList660 = [STRes659|STResList659],
- ?line ITRes659 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S659),
+ ITRes659 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S659),
ITResList660 = [ITRes659|ITResList659],
- ?line {STRes660,S660} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes660,S660} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList661 = [STRes660|STResList660],
- ?line ITRes660 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S660),
+ ITRes660 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S660),
ITResList661 = [ITRes660|ITResList660],
- ?line {STRes661,S661} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes661,S661} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList662 = [STRes661|STResList661],
- ?line ITRes661 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S661),
+ ITRes661 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S661),
ITResList662 = [ITRes661|ITResList661],
- ?line {STRes662,S662} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes662,S662} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList663 = [STRes662|STResList662],
- ?line ITRes662 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S662),
+ ITRes662 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S662),
ITResList663 = [ITRes662|ITResList662],
- ?line {STRes663,S663} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes663,S663} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList664 = [STRes663|STResList663],
- ?line ITRes663 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S663),
+ ITRes663 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S663),
ITResList664 = [ITRes663|ITResList663],
- ?line {STRes664,S664} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes664,S664} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList665 = [STRes664|STResList664],
- ?line ITRes664 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S664),
+ ITRes664 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S664),
ITResList665 = [ITRes664|ITResList664],
- ?line {STRes665,S665} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes665,S665} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList666 = [STRes665|STResList665],
- ?line ITRes665 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S665),
+ ITRes665 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S665),
ITResList666 = [ITRes665|ITResList665],
- ?line {STRes666,S666} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes666,S666} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList667 = [STRes666|STResList666],
- ?line ITRes666 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S666),
+ ITRes666 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S666),
ITResList667 = [ITRes666|ITResList666],
- ?line {STRes667,S667} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes667,S667} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList668 = [STRes667|STResList667],
- ?line ITRes667 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S667),
+ ITRes667 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S667),
ITResList668 = [ITRes667|ITResList667],
- ?line {STRes668,S668} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes668,S668} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList669 = [STRes668|STResList668],
- ?line ITRes668 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S668),
+ ITRes668 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S668),
ITResList669 = [ITRes668|ITResList668],
- ?line {STRes669,S669} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes669,S669} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList670 = [STRes669|STResList669],
- ?line ITRes669 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S669),
+ ITRes669 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S669),
ITResList670 = [ITRes669|ITResList669],
- ?line {STRes670,S670} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes670,S670} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList671 = [STRes670|STResList670],
- ?line ITRes670 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S670),
+ ITRes670 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S670),
ITResList671 = [ITRes670|ITResList670],
- ?line {STRes671,S671} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes671,S671} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList672 = [STRes671|STResList671],
- ?line ITRes671 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S671),
+ ITRes671 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S671),
ITResList672 = [ITRes671|ITResList671],
- ?line {STRes672,S672} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes672,S672} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList673 = [STRes672|STResList672],
- ?line ITRes672 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S672),
+ ITRes672 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S672),
ITResList673 = [ITRes672|ITResList672],
- ?line {STRes673,S673} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes673,S673} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList674 = [STRes673|STResList673],
- ?line ITRes673 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S673),
+ ITRes673 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S673),
ITResList674 = [ITRes673|ITResList673],
- ?line {STRes674,S674} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes674,S674} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList675 = [STRes674|STResList674],
- ?line ITRes674 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S674),
+ ITRes674 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S674),
ITResList675 = [ITRes674|ITResList674],
- ?line {STRes675,S675} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes675,S675} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList676 = [STRes675|STResList675],
- ?line ITRes675 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S675),
+ ITRes675 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S675),
ITResList676 = [ITRes675|ITResList675],
- ?line {STRes676,S676} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes676,S676} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList677 = [STRes676|STResList676],
- ?line ITRes676 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S676),
+ ITRes676 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S676),
ITResList677 = [ITRes676|ITResList676],
- ?line {STRes677,S677} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes677,S677} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList678 = [STRes677|STResList677],
- ?line ITRes677 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S677),
+ ITRes677 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S677),
ITResList678 = [ITRes677|ITResList677],
- ?line {STRes678,S678} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes678,S678} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList679 = [STRes678|STResList678],
- ?line ITRes678 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S678),
+ ITRes678 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S678),
ITResList679 = [ITRes678|ITResList678],
- ?line {STRes679,S679} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes679,S679} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList680 = [STRes679|STResList679],
- ?line ITRes679 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S679),
+ ITRes679 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S679),
ITResList680 = [ITRes679|ITResList679],
- ?line {STRes680,S680} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes680,S680} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList681 = [STRes680|STResList680],
- ?line ITRes680 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S680),
+ ITRes680 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S680),
ITResList681 = [ITRes680|ITResList680],
- ?line {STRes681,S681} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes681,S681} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList682 = [STRes681|STResList681],
- ?line ITRes681 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S681),
+ ITRes681 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S681),
ITResList682 = [ITRes681|ITResList681],
- ?line {STRes682,S682} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes682,S682} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList683 = [STRes682|STResList682],
- ?line ITRes682 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S682),
+ ITRes682 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S682),
ITResList683 = [ITRes682|ITResList682],
- ?line {STRes683,S683} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes683,S683} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList684 = [STRes683|STResList683],
- ?line ITRes683 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S683),
+ ITRes683 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S683),
ITResList684 = [ITRes683|ITResList683],
- ?line {STRes684,S684} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes684,S684} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList685 = [STRes684|STResList684],
- ?line ITRes684 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S684),
+ ITRes684 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S684),
ITResList685 = [ITRes684|ITResList684],
- ?line {STRes685,S685} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes685,S685} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList686 = [STRes685|STResList685],
- ?line ITRes685 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S685),
+ ITRes685 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S685),
ITResList686 = [ITRes685|ITResList685],
- ?line {STRes686,S686} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes686,S686} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList687 = [STRes686|STResList686],
- ?line ITRes686 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S686),
+ ITRes686 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S686),
ITResList687 = [ITRes686|ITResList686],
- ?line {STRes687,S687} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes687,S687} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList688 = [STRes687|STResList687],
- ?line ITRes687 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S687),
+ ITRes687 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S687),
ITResList688 = [ITRes687|ITResList687],
- ?line {STRes688,S688} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes688,S688} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList689 = [STRes688|STResList688],
- ?line ITRes688 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S688),
+ ITRes688 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S688),
ITResList689 = [ITRes688|ITResList688],
- ?line {STRes689,S689} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes689,S689} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList690 = [STRes689|STResList689],
- ?line ITRes689 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S689),
+ ITRes689 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S689),
ITResList690 = [ITRes689|ITResList689],
- ?line {STRes690,S690} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes690,S690} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList691 = [STRes690|STResList690],
- ?line ITRes690 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S690),
+ ITRes690 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S690),
ITResList691 = [ITRes690|ITResList690],
- ?line {STRes691,S691} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes691,S691} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList692 = [STRes691|STResList691],
- ?line ITRes691 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S691),
+ ITRes691 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S691),
ITResList692 = [ITRes691|ITResList691],
- ?line {STRes692,S692} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes692,S692} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList693 = [STRes692|STResList692],
- ?line ITRes692 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S692),
+ ITRes692 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S692),
ITResList693 = [ITRes692|ITResList692],
- ?line {STRes693,S693} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes693,S693} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList694 = [STRes693|STResList693],
- ?line ITRes693 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S693),
+ ITRes693 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S693),
ITResList694 = [ITRes693|ITResList693],
- ?line {STRes694,S694} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes694,S694} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList695 = [STRes694|STResList694],
- ?line ITRes694 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S694),
+ ITRes694 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S694),
ITResList695 = [ITRes694|ITResList694],
- ?line {STRes695,S695} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes695,S695} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList696 = [STRes695|STResList695],
- ?line ITRes695 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S695),
+ ITRes695 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S695),
ITResList696 = [ITRes695|ITResList695],
- ?line {STRes696,S696} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes696,S696} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList697 = [STRes696|STResList696],
- ?line ITRes696 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S696),
+ ITRes696 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S696),
ITResList697 = [ITRes696|ITResList696],
- ?line {STRes697,S697} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes697,S697} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList698 = [STRes697|STResList697],
- ?line ITRes697 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S697),
+ ITRes697 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S697),
ITResList698 = [ITRes697|ITResList697],
- ?line {STRes698,S698} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes698,S698} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList699 = [STRes698|STResList698],
- ?line ITRes698 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S698),
+ ITRes698 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S698),
ITResList699 = [ITRes698|ITResList698],
- ?line {STRes699,S699} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes699,S699} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList700 = [STRes699|STResList699],
- ?line ITRes699 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S699),
+ ITRes699 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S699),
ITResList700 = [ITRes699|ITResList699],
- ?line {STRes700,S700} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes700,S700} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList701 = [STRes700|STResList700],
- ?line ITRes700 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S700),
+ ITRes700 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S700),
ITResList701 = [ITRes700|ITResList700],
- ?line {STRes701,S701} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes701,S701} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList702 = [STRes701|STResList701],
- ?line ITRes701 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S701),
+ ITRes701 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S701),
ITResList702 = [ITRes701|ITResList701],
- ?line {STRes702,S702} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes702,S702} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList703 = [STRes702|STResList702],
- ?line ITRes702 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S702),
+ ITRes702 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S702),
ITResList703 = [ITRes702|ITResList702],
- ?line {STRes703,S703} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes703,S703} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList704 = [STRes703|STResList703],
- ?line ITRes703 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S703),
+ ITRes703 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S703),
ITResList704 = [ITRes703|ITResList703],
- ?line {STRes704,S704} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes704,S704} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList705 = [STRes704|STResList704],
- ?line ITRes704 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S704),
+ ITRes704 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S704),
ITResList705 = [ITRes704|ITResList704],
- ?line {STRes705,S705} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes705,S705} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList706 = [STRes705|STResList705],
- ?line ITRes705 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S705),
+ ITRes705 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S705),
ITResList706 = [ITRes705|ITResList705],
- ?line {STRes706,S706} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes706,S706} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList707 = [STRes706|STResList706],
- ?line ITRes706 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S706),
+ ITRes706 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S706),
ITResList707 = [ITRes706|ITResList706],
- ?line {STRes707,S707} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes707,S707} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList708 = [STRes707|STResList707],
- ?line ITRes707 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S707),
+ ITRes707 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S707),
ITResList708 = [ITRes707|ITResList707],
- ?line {STRes708,S708} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes708,S708} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList709 = [STRes708|STResList708],
- ?line ITRes708 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S708),
+ ITRes708 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S708),
ITResList709 = [ITRes708|ITResList708],
- ?line {STRes709,S709} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes709,S709} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList710 = [STRes709|STResList709],
- ?line ITRes709 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S709),
+ ITRes709 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S709),
ITResList710 = [ITRes709|ITResList709],
- ?line {STRes710,S710} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes710,S710} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList711 = [STRes710|STResList710],
- ?line ITRes710 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S710),
+ ITRes710 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S710),
ITResList711 = [ITRes710|ITResList710],
- ?line {STRes711,S711} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes711,S711} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList712 = [STRes711|STResList711],
- ?line ITRes711 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S711),
+ ITRes711 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S711),
ITResList712 = [ITRes711|ITResList711],
- ?line {STRes712,S712} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes712,S712} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList713 = [STRes712|STResList712],
- ?line ITRes712 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S712),
+ ITRes712 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S712),
ITResList713 = [ITRes712|ITResList712],
- ?line {STRes713,S713} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes713,S713} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList714 = [STRes713|STResList713],
- ?line ITRes713 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S713),
+ ITRes713 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S713),
ITResList714 = [ITRes713|ITResList713],
- ?line {STRes714,S714} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes714,S714} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList715 = [STRes714|STResList714],
- ?line ITRes714 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S714),
+ ITRes714 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S714),
ITResList715 = [ITRes714|ITResList714],
- ?line {STRes715,S715} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes715,S715} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList716 = [STRes715|STResList715],
- ?line ITRes715 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S715),
+ ITRes715 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S715),
ITResList716 = [ITRes715|ITResList715],
- ?line {STRes716,S716} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes716,S716} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList717 = [STRes716|STResList716],
- ?line ITRes716 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S716),
+ ITRes716 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S716),
ITResList717 = [ITRes716|ITResList716],
- ?line {STRes717,S717} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes717,S717} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList718 = [STRes717|STResList717],
- ?line ITRes717 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S717),
+ ITRes717 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S717),
ITResList718 = [ITRes717|ITResList717],
- ?line {STRes718,S718} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes718,S718} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList719 = [STRes718|STResList718],
- ?line ITRes718 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S718),
+ ITRes718 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S718),
ITResList719 = [ITRes718|ITResList718],
- ?line {STRes719,S719} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes719,S719} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList720 = [STRes719|STResList719],
- ?line ITRes719 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S719),
+ ITRes719 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S719),
ITResList720 = [ITRes719|ITResList719],
- ?line {STRes720,S720} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes720,S720} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList721 = [STRes720|STResList720],
- ?line ITRes720 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S720),
+ ITRes720 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S720),
ITResList721 = [ITRes720|ITResList720],
- ?line {STRes721,S721} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes721,S721} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList722 = [STRes721|STResList721],
- ?line ITRes721 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S721),
+ ITRes721 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S721),
ITResList722 = [ITRes721|ITResList721],
- ?line {STRes722,S722} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes722,S722} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList723 = [STRes722|STResList722],
- ?line ITRes722 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S722),
+ ITRes722 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S722),
ITResList723 = [ITRes722|ITResList722],
- ?line {STRes723,S723} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes723,S723} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList724 = [STRes723|STResList723],
- ?line ITRes723 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S723),
+ ITRes723 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S723),
ITResList724 = [ITRes723|ITResList723],
- ?line {STRes724,S724} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes724,S724} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList725 = [STRes724|STResList724],
- ?line ITRes724 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S724),
+ ITRes724 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S724),
ITResList725 = [ITRes724|ITResList724],
- ?line {STRes725,S725} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes725,S725} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList726 = [STRes725|STResList725],
- ?line ITRes725 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S725),
+ ITRes725 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S725),
ITResList726 = [ITRes725|ITResList725],
- ?line {STRes726,S726} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes726,S726} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList727 = [STRes726|STResList726],
- ?line ITRes726 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_double.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S726),
+ ITRes726 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_double.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S726),
ITResList727 = [ITRes726|ITResList726],
- ?line {STRes727,S727} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes727,S727} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList728 = [STRes727|STResList727],
- ?line ITRes727 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S727),
+ ITRes727 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S727),
ITResList728 = [ITRes727|ITResList727],
- ?line {STRes728,S728} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes728,S728} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList729 = [STRes728|STResList728],
- ?line ITRes728 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S728),
+ ITRes728 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S728),
ITResList729 = [ITRes728|ITResList728],
- ?line {STRes729,S729} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes729,S729} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList730 = [STRes729|STResList729],
- ?line ITRes729 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S729),
+ ITRes729 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S729),
ITResList730 = [ITRes729|ITResList729],
- ?line {STRes730,S730} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes730,S730} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList731 = [STRes730|STResList730],
- ?line ITRes730 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S730),
+ ITRes730 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S730),
ITResList731 = [ITRes730|ITResList730],
- ?line {STRes731,S731} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes731,S731} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList732 = [STRes731|STResList731],
- ?line ITRes731 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S731),
+ ITRes731 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S731),
ITResList732 = [ITRes731|ITResList731],
- ?line {STRes732,S732} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes732,S732} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList733 = [STRes732|STResList732],
- ?line ITRes732 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S732),
+ ITRes732 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S732),
ITResList733 = [ITRes732|ITResList732],
- ?line {STRes733,S733} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes733,S733} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList734 = [STRes733|STResList733],
- ?line ITRes733 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S733),
+ ITRes733 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S733),
ITResList734 = [ITRes733|ITResList733],
- ?line {STRes734,S734} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes734,S734} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList735 = [STRes734|STResList734],
- ?line ITRes734 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S734),
+ ITRes734 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S734),
ITResList735 = [ITRes734|ITResList734],
- ?line {STRes735,S735} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes735,S735} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList736 = [STRes735|STResList735],
- ?line ITRes735 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S735),
+ ITRes735 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S735),
ITResList736 = [ITRes735|ITResList735],
- ?line {STRes736,S736} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes736,S736} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList737 = [STRes736|STResList736],
- ?line ITRes736 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S736),
+ ITRes736 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S736),
ITResList737 = [ITRes736|ITResList736],
- ?line {STRes737,S737} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes737,S737} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList738 = [STRes737|STResList737],
- ?line ITRes737 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S737),
+ ITRes737 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S737),
ITResList738 = [ITRes737|ITResList737],
- ?line {STRes738,S738} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes738,S738} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList739 = [STRes738|STResList738],
- ?line ITRes738 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S738),
+ ITRes738 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S738),
ITResList739 = [ITRes738|ITResList738],
- ?line {STRes739,S739} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes739,S739} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList740 = [STRes739|STResList739],
- ?line ITRes739 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S739),
+ ITRes739 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S739),
ITResList740 = [ITRes739|ITResList739],
- ?line {STRes740,S740} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes740,S740} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList741 = [STRes740|STResList740],
- ?line ITRes740 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S740),
+ ITRes740 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S740),
ITResList741 = [ITRes740|ITResList740],
- ?line {STRes741,S741} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes741,S741} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList742 = [STRes741|STResList741],
- ?line ITRes741 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S741),
+ ITRes741 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S741),
ITResList742 = [ITRes741|ITResList741],
- ?line {STRes742,S742} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes742,S742} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList743 = [STRes742|STResList742],
- ?line ITRes742 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S742),
+ ITRes742 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S742),
ITResList743 = [ITRes742|ITResList742],
- ?line {STRes743,S743} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes743,S743} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList744 = [STRes743|STResList743],
- ?line ITRes743 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S743),
+ ITRes743 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S743),
ITResList744 = [ITRes743|ITResList743],
- ?line {STRes744,S744} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes744,S744} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList745 = [STRes744|STResList744],
- ?line ITRes744 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S744),
+ ITRes744 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S744),
ITResList745 = [ITRes744|ITResList744],
- ?line {STRes745,S745} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes745,S745} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList746 = [STRes745|STResList745],
- ?line ITRes745 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S745),
+ ITRes745 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S745),
ITResList746 = [ITRes745|ITResList745],
- ?line {STRes746,S746} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes746,S746} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList747 = [STRes746|STResList746],
- ?line ITRes746 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S746),
+ ITRes746 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S746),
ITResList747 = [ITRes746|ITResList746],
- ?line {STRes747,S747} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes747,S747} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList748 = [STRes747|STResList747],
- ?line ITRes747 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S747),
+ ITRes747 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S747),
ITResList748 = [ITRes747|ITResList747],
- ?line {STRes748,S748} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes748,S748} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList749 = [STRes748|STResList748],
- ?line ITRes748 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S748),
+ ITRes748 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S748),
ITResList749 = [ITRes748|ITResList748],
- ?line {STRes749,S749} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes749,S749} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList750 = [STRes749|STResList749],
- ?line ITRes749 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S749),
+ ITRes749 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S749),
ITResList750 = [ITRes749|ITResList749],
- ?line {STRes750,S750} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes750,S750} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList751 = [STRes750|STResList750],
- ?line ITRes750 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S750),
+ ITRes750 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S750),
ITResList751 = [ITRes750|ITResList750],
- ?line {STRes751,S751} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes751,S751} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList752 = [STRes751|STResList751],
- ?line ITRes751 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S751),
+ ITRes751 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S751),
ITResList752 = [ITRes751|ITResList751],
- ?line {STRes752,S752} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes752,S752} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList753 = [STRes752|STResList752],
- ?line ITRes752 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S752),
+ ITRes752 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S752),
ITResList753 = [ITRes752|ITResList752],
- ?line {STRes753,S753} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes753,S753} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList754 = [STRes753|STResList753],
- ?line ITRes753 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S753),
+ ITRes753 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S753),
ITResList754 = [ITRes753|ITResList753],
- ?line {STRes754,S754} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes754,S754} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList755 = [STRes754|STResList754],
- ?line ITRes754 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S754),
+ ITRes754 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S754),
ITResList755 = [ITRes754|ITResList754],
- ?line {STRes755,S755} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes755,S755} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList756 = [STRes755|STResList755],
- ?line ITRes755 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S755),
+ ITRes755 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S755),
ITResList756 = [ITRes755|ITResList755],
- ?line {STRes756,S756} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes756,S756} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList757 = [STRes756|STResList756],
- ?line ITRes756 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S756),
+ ITRes756 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S756),
ITResList757 = [ITRes756|ITResList756],
- ?line {STRes757,S757} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes757,S757} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList758 = [STRes757|STResList757],
- ?line ITRes757 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S757),
+ ITRes757 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S757),
ITResList758 = [ITRes757|ITResList757],
- ?line {STRes758,S758} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes758,S758} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList759 = [STRes758|STResList758],
- ?line ITRes758 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S758),
+ ITRes758 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S758),
ITResList759 = [ITRes758|ITResList758],
- ?line {STRes759,S759} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes759,S759} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList760 = [STRes759|STResList759],
- ?line ITRes759 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S759),
+ ITRes759 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S759),
ITResList760 = [ITRes759|ITResList759],
- ?line {STRes760,S760} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes760,S760} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList761 = [STRes760|STResList760],
- ?line ITRes760 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S760),
+ ITRes760 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S760),
ITResList761 = [ITRes760|ITResList760],
- ?line {STRes761,S761} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes761,S761} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList762 = [STRes761|STResList761],
- ?line ITRes761 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S761),
+ ITRes761 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S761),
ITResList762 = [ITRes761|ITResList761],
- ?line {STRes762,S762} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes762,S762} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList763 = [STRes762|STResList762],
- ?line ITRes762 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S762),
+ ITRes762 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S762),
ITResList763 = [ITRes762|ITResList762],
- ?line {STRes763,S763} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes763,S763} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList764 = [STRes763|STResList763],
- ?line ITRes763 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S763),
+ ITRes763 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S763),
ITResList764 = [ITRes763|ITResList763],
- ?line {STRes764,S764} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes764,S764} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList765 = [STRes764|STResList764],
- ?line ITRes764 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S764),
+ ITRes764 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S764),
ITResList765 = [ITRes764|ITResList764],
- ?line {STRes765,S765} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes765,S765} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList766 = [STRes765|STResList765],
- ?line ITRes765 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S765),
+ ITRes765 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S765),
ITResList766 = [ITRes765|ITResList765],
- ?line {STRes766,S766} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes766,S766} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList767 = [STRes766|STResList766],
- ?line ITRes766 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S766),
+ ITRes766 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S766),
ITResList767 = [ITRes766|ITResList766],
- ?line {STRes767,S767} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes767,S767} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList768 = [STRes767|STResList767],
- ?line ITRes767 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S767),
+ ITRes767 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S767),
ITResList768 = [ITRes767|ITResList767],
- ?line {STRes768,S768} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes768,S768} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList769 = [STRes768|STResList768],
- ?line ITRes768 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S768),
+ ITRes768 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S768),
ITResList769 = [ITRes768|ITResList768],
- ?line {STRes769,S769} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes769,S769} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList770 = [STRes769|STResList769],
- ?line ITRes769 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S769),
+ ITRes769 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S769),
ITResList770 = [ITRes769|ITResList769],
- ?line {STRes770,S770} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes770,S770} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList771 = [STRes770|STResList770],
- ?line ITRes770 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S770),
+ ITRes770 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S770),
ITResList771 = [ITRes770|ITResList770],
- ?line {STRes771,S771} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes771,S771} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList772 = [STRes771|STResList771],
- ?line ITRes771 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S771),
+ ITRes771 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S771),
ITResList772 = [ITRes771|ITResList771],
- ?line {STRes772,S772} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes772,S772} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList773 = [STRes772|STResList772],
- ?line ITRes772 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S772),
+ ITRes772 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S772),
ITResList773 = [ITRes772|ITResList772],
- ?line {STRes773,S773} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes773,S773} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList774 = [STRes773|STResList773],
- ?line ITRes773 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S773),
+ ITRes773 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S773),
ITResList774 = [ITRes773|ITResList773],
- ?line {STRes774,S774} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes774,S774} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList775 = [STRes774|STResList774],
- ?line ITRes774 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S774),
+ ITRes774 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S774),
ITResList775 = [ITRes774|ITResList774],
- ?line {STRes775,S775} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes775,S775} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList776 = [STRes775|STResList775],
- ?line ITRes775 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S775),
+ ITRes775 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S775),
ITResList776 = [ITRes775|ITResList775],
- ?line {STRes776,S776} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes776,S776} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList777 = [STRes776|STResList776],
- ?line ITRes776 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S776),
+ ITRes776 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S776),
ITResList777 = [ITRes776|ITResList776],
- ?line {STRes777,S777} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes777,S777} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList778 = [STRes777|STResList777],
- ?line ITRes777 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S777),
+ ITRes777 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S777),
ITResList778 = [ITRes777|ITResList777],
- ?line {STRes778,S778} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes778,S778} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList779 = [STRes778|STResList778],
- ?line ITRes778 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S778),
+ ITRes778 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S778),
ITResList779 = [ITRes778|ITResList778],
- ?line {STRes779,S779} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes779,S779} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList780 = [STRes779|STResList779],
- ?line ITRes779 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S779),
+ ITRes779 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S779),
ITResList780 = [ITRes779|ITResList779],
- ?line {STRes780,S780} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes780,S780} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList781 = [STRes780|STResList780],
- ?line ITRes780 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S780),
+ ITRes780 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S780),
ITResList781 = [ITRes780|ITResList780],
- ?line {STRes781,S781} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes781,S781} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList782 = [STRes781|STResList781],
- ?line ITRes781 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S781),
+ ITRes781 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S781),
ITResList782 = [ITRes781|ITResList781],
- ?line {STRes782,S782} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes782,S782} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList783 = [STRes782|STResList782],
- ?line ITRes782 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S782),
+ ITRes782 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S782),
ITResList783 = [ITRes782|ITResList782],
- ?line {STRes783,S783} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes783,S783} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList784 = [STRes783|STResList783],
- ?line ITRes783 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S783),
+ ITRes783 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S783),
ITResList784 = [ITRes783|ITResList783],
- ?line {STRes784,S784} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes784,S784} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList785 = [STRes784|STResList784],
- ?line ITRes784 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S784),
+ ITRes784 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S784),
ITResList785 = [ITRes784|ITResList784],
- ?line {STRes785,S785} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes785,S785} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList786 = [STRes785|STResList785],
- ?line ITRes785 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S785),
+ ITRes785 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S785),
ITResList786 = [ITRes785|ITResList785],
- ?line {STRes786,S786} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes786,S786} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList787 = [STRes786|STResList786],
- ?line ITRes786 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S786),
+ ITRes786 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S786),
ITResList787 = [ITRes786|ITResList786],
- ?line {STRes787,S787} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes787,S787} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList788 = [STRes787|STResList787],
- ?line ITRes787 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S787),
+ ITRes787 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S787),
ITResList788 = [ITRes787|ITResList787],
- ?line {STRes788,S788} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes788,S788} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList789 = [STRes788|STResList788],
- ?line ITRes788 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S788),
+ ITRes788 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S788),
ITResList789 = [ITRes788|ITResList788],
- ?line {STRes789,S789} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes789,S789} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList790 = [STRes789|STResList789],
- ?line ITRes789 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S789),
+ ITRes789 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S789),
ITResList790 = [ITRes789|ITResList789],
- ?line {STRes790,S790} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes790,S790} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList791 = [STRes790|STResList790],
- ?line ITRes790 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S790),
+ ITRes790 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S790),
ITResList791 = [ITRes790|ITResList790],
- ?line {STRes791,S791} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes791,S791} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList792 = [STRes791|STResList791],
- ?line ITRes791 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S791),
+ ITRes791 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S791),
ITResList792 = [ITRes791|ITResList791],
- ?line {STRes792,S792} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes792,S792} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList793 = [STRes792|STResList792],
- ?line ITRes792 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S792),
+ ITRes792 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S792),
ITResList793 = [ITRes792|ITResList792],
- ?line {STRes793,S793} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes793,S793} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList794 = [STRes793|STResList793],
- ?line ITRes793 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S793),
+ ITRes793 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S793),
ITResList794 = [ITRes793|ITResList793],
- ?line {STRes794,S794} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes794,S794} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList795 = [STRes794|STResList794],
- ?line ITRes794 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S794),
+ ITRes794 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S794),
ITResList795 = [ITRes794|ITResList794],
- ?line {STRes795,S795} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes795,S795} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList796 = [STRes795|STResList795],
- ?line ITRes795 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S795),
+ ITRes795 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S795),
ITResList796 = [ITRes795|ITResList795],
- ?line {STRes796,S796} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes796,S796} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList797 = [STRes796|STResList796],
- ?line ITRes796 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S796),
+ ITRes796 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S796),
ITResList797 = [ITRes796|ITResList796],
- ?line {STRes797,S797} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes797,S797} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList798 = [STRes797|STResList797],
- ?line ITRes797 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S797),
+ ITRes797 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S797),
ITResList798 = [ITRes797|ITResList797],
- ?line {STRes798,S798} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes798,S798} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList799 = [STRes798|STResList798],
- ?line ITRes798 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S798),
+ ITRes798 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S798),
ITResList799 = [ITRes798|ITResList798],
- ?line {STRes799,S799} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes799,S799} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList800 = [STRes799|STResList799],
- ?line ITRes799 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S799),
+ ITRes799 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S799),
ITResList800 = [ITRes799|ITResList799],
- ?line {STRes800,S800} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes800,S800} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList801 = [STRes800|STResList800],
- ?line ITRes800 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S800),
+ ITRes800 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S800),
ITResList801 = [ITRes800|ITResList800],
- ?line {STRes801,S801} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes801,S801} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList802 = [STRes801|STResList801],
- ?line ITRes801 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S801),
+ ITRes801 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S801),
ITResList802 = [ITRes801|ITResList801],
- ?line {STRes802,S802} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes802,S802} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList803 = [STRes802|STResList802],
- ?line ITRes802 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S802),
+ ITRes802 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S802),
ITResList803 = [ITRes802|ITResList802],
- ?line {STRes803,S803} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes803,S803} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList804 = [STRes803|STResList803],
- ?line ITRes803 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S803),
+ ITRes803 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S803),
ITResList804 = [ITRes803|ITResList803],
- ?line {STRes804,S804} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes804,S804} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList805 = [STRes804|STResList804],
- ?line ITRes804 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S804),
+ ITRes804 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S804),
ITResList805 = [ITRes804|ITResList804],
- ?line {STRes805,S805} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes805,S805} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList806 = [STRes805|STResList805],
- ?line ITRes805 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S805),
+ ITRes805 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S805),
ITResList806 = [ITRes805|ITResList805],
- ?line {STRes806,S806} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes806,S806} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList807 = [STRes806|STResList806],
- ?line ITRes806 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S806),
+ ITRes806 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S806),
ITResList807 = [ITRes806|ITResList806],
- ?line {STRes807,S807} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes807,S807} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList808 = [STRes807|STResList807],
- ?line ITRes807 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S807),
+ ITRes807 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S807),
ITResList808 = [ITRes807|ITResList807],
- ?line {STRes808,S808} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes808,S808} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList809 = [STRes808|STResList808],
- ?line ITRes808 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S808),
+ ITRes808 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S808),
ITResList809 = [ITRes808|ITResList808],
- ?line {STRes809,S809} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes809,S809} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList810 = [STRes809|STResList809],
- ?line ITRes809 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S809),
+ ITRes809 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S809),
ITResList810 = [ITRes809|ITResList809],
- ?line {STRes810,S810} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes810,S810} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList811 = [STRes810|STResList810],
- ?line ITRes810 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S810),
+ ITRes810 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S810),
ITResList811 = [ITRes810|ITResList810],
- ?line {STRes811,S811} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes811,S811} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList812 = [STRes811|STResList811],
- ?line ITRes811 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S811),
+ ITRes811 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S811),
ITResList812 = [ITRes811|ITResList811],
- ?line {STRes812,S812} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes812,S812} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList813 = [STRes812|STResList812],
- ?line ITRes812 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S812),
+ ITRes812 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S812),
ITResList813 = [ITRes812|ITResList812],
- ?line {STRes813,S813} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes813,S813} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList814 = [STRes813|STResList813],
- ?line ITRes813 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S813),
+ ITRes813 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S813),
ITResList814 = [ITRes813|ITResList813],
- ?line {STRes814,S814} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes814,S814} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList815 = [STRes814|STResList814],
- ?line ITRes814 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S814),
+ ITRes814 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S814),
ITResList815 = [ITRes814|ITResList814],
- ?line {STRes815,S815} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes815,S815} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList816 = [STRes815|STResList815],
- ?line ITRes815 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S815),
+ ITRes815 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S815),
ITResList816 = [ITRes815|ITResList815],
- ?line {STRes816,S816} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes816,S816} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList817 = [STRes816|STResList816],
- ?line ITRes816 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S816),
+ ITRes816 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S816),
ITResList817 = [ITRes816|ITResList816],
- ?line {STRes817,S817} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes817,S817} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList818 = [STRes817|STResList817],
- ?line ITRes817 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S817),
+ ITRes817 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S817),
ITResList818 = [ITRes817|ITResList817],
- ?line {STRes818,S818} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes818,S818} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList819 = [STRes818|STResList818],
- ?line ITRes818 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S818),
+ ITRes818 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S818),
ITResList819 = [ITRes818|ITResList818],
- ?line {STRes819,S819} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes819,S819} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList820 = [STRes819|STResList819],
- ?line ITRes819 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S819),
+ ITRes819 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S819),
ITResList820 = [ITRes819|ITResList819],
- ?line {STRes820,S820} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes820,S820} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList821 = [STRes820|STResList820],
- ?line ITRes820 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S820),
+ ITRes820 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S820),
ITResList821 = [ITRes820|ITResList820],
- ?line {STRes821,S821} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes821,S821} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList822 = [STRes821|STResList821],
- ?line ITRes821 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S821),
+ ITRes821 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S821),
ITResList822 = [ITRes821|ITResList821],
- ?line {STRes822,S822} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes822,S822} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList823 = [STRes822|STResList822],
- ?line ITRes822 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S822),
+ ITRes822 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S822),
ITResList823 = [ITRes822|ITResList822],
- ?line {STRes823,S823} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes823,S823} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList824 = [STRes823|STResList823],
- ?line ITRes823 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S823),
+ ITRes823 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S823),
ITResList824 = [ITRes823|ITResList823],
- ?line {STRes824,S824} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes824,S824} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList825 = [STRes824|STResList824],
- ?line ITRes824 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S824),
+ ITRes824 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S824),
ITResList825 = [ITRes824|ITResList824],
- ?line {STRes825,S825} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes825,S825} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList826 = [STRes825|STResList825],
- ?line ITRes825 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S825),
+ ITRes825 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S825),
ITResList826 = [ITRes825|ITResList825],
- ?line {STRes826,S826} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes826,S826} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList827 = [STRes826|STResList826],
- ?line ITRes826 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S826),
+ ITRes826 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S826),
ITResList827 = [ITRes826|ITResList826],
- ?line {STRes827,S827} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes827,S827} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList828 = [STRes827|STResList827],
- ?line ITRes827 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S827),
+ ITRes827 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S827),
ITResList828 = [ITRes827|ITResList827],
- ?line {STRes828,S828} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes828,S828} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList829 = [STRes828|STResList828],
- ?line ITRes828 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S828),
+ ITRes828 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S828),
ITResList829 = [ITRes828|ITResList828],
- ?line {STRes829,S829} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes829,S829} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList830 = [STRes829|STResList829],
- ?line ITRes829 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S829),
+ ITRes829 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S829),
ITResList830 = [ITRes829|ITResList829],
- ?line {STRes830,S830} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes830,S830} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList831 = [STRes830|STResList830],
- ?line ITRes830 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S830),
+ ITRes830 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S830),
ITResList831 = [ITRes830|ITResList830],
- ?line {STRes831,S831} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes831,S831} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList832 = [STRes831|STResList831],
- ?line ITRes831 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S831),
+ ITRes831 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S831),
ITResList832 = [ITRes831|ITResList831],
- ?line {STRes832,S832} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes832,S832} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList833 = [STRes832|STResList832],
- ?line ITRes832 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S832),
+ ITRes832 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S832),
ITResList833 = [ITRes832|ITResList832],
- ?line {STRes833,S833} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes833,S833} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList834 = [STRes833|STResList833],
- ?line ITRes833 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S833),
+ ITRes833 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S833),
ITResList834 = [ITRes833|ITResList833],
- ?line {STRes834,S834} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes834,S834} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList835 = [STRes834|STResList834],
- ?line ITRes834 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S834),
+ ITRes834 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S834),
ITResList835 = [ITRes834|ITResList834],
- ?line {STRes835,S835} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes835,S835} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList836 = [STRes835|STResList835],
- ?line ITRes835 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S835),
+ ITRes835 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S835),
ITResList836 = [ITRes835|ITResList835],
- ?line {STRes836,S836} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes836,S836} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList837 = [STRes836|STResList836],
- ?line ITRes836 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S836),
+ ITRes836 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S836),
ITResList837 = [ITRes836|ITResList836],
- ?line {STRes837,S837} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes837,S837} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList838 = [STRes837|STResList837],
- ?line ITRes837 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S837),
+ ITRes837 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S837),
ITResList838 = [ITRes837|ITResList837],
- ?line {STRes838,S838} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes838,S838} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList839 = [STRes838|STResList838],
- ?line ITRes838 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_time.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S838),
+ ITRes838 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_time.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S838),
ITResList839 = [ITRes838|ITResList838],
- ?line {STRes839,S839} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes839,S839} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList840 = [STRes839|STResList839],
- ?line ITRes839 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S839),
+ ITRes839 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S839),
ITResList840 = [ITRes839|ITResList839],
- ?line {STRes840,S840} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes840,S840} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList841 = [STRes840|STResList840],
- ?line ITRes840 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S840),
+ ITRes840 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S840),
ITResList841 = [ITRes840|ITResList840],
- ?line {STRes841,S841} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes841,S841} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList842 = [STRes841|STResList841],
- ?line ITRes841 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S841),
+ ITRes841 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S841),
ITResList842 = [ITRes841|ITResList841],
- ?line {STRes842,S842} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes842,S842} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList843 = [STRes842|STResList842],
- ?line ITRes842 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S842),
+ ITRes842 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S842),
ITResList843 = [ITRes842|ITResList842],
- ?line {STRes843,S843} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes843,S843} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList844 = [STRes843|STResList843],
- ?line ITRes843 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S843),
+ ITRes843 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S843),
ITResList844 = [ITRes843|ITResList843],
- ?line {STRes844,S844} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes844,S844} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList845 = [STRes844|STResList844],
- ?line ITRes844 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S844),
+ ITRes844 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S844),
ITResList845 = [ITRes844|ITResList844],
- ?line {STRes845,S845} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes845,S845} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList846 = [STRes845|STResList845],
- ?line ITRes845 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S845),
+ ITRes845 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S845),
ITResList846 = [ITRes845|ITResList845],
- ?line {STRes846,S846} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes846,S846} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList847 = [STRes846|STResList846],
- ?line ITRes846 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S846),
+ ITRes846 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S846),
ITResList847 = [ITRes846|ITResList846],
- ?line {STRes847,S847} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes847,S847} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList848 = [STRes847|STResList847],
- ?line ITRes847 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_date.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S847),
+ ITRes847 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_date.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S847),
ITResList848 = [ITRes847|ITResList847],
- ?line {STRes848,S848} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes848,S848} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList849 = [STRes848|STResList848],
- ?line ITRes848 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S848),
+ ITRes848 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S848),
ITResList849 = [ITRes848|ITResList848],
- ?line {STRes849,S849} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes849,S849} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList850 = [STRes849|STResList849],
- ?line ITRes849 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S849),
+ ITRes849 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S849),
ITResList850 = [ITRes849|ITResList849],
- ?line {STRes850,S850} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes850,S850} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList851 = [STRes850|STResList850],
- ?line ITRes850 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S850),
+ ITRes850 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S850),
ITResList851 = [ITRes850|ITResList850],
- ?line {STRes851,S851} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes851,S851} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList852 = [STRes851|STResList851],
- ?line ITRes851 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S851),
+ ITRes851 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S851),
ITResList852 = [ITRes851|ITResList851],
- ?line {STRes852,S852} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes852,S852} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList853 = [STRes852|STResList852],
- ?line ITRes852 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S852),
+ ITRes852 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S852),
ITResList853 = [ITRes852|ITResList852],
- ?line {STRes853,S853} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes853,S853} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList854 = [STRes853|STResList853],
- ?line ITRes853 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S853),
+ ITRes853 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S853),
ITResList854 = [ITRes853|ITResList853],
- ?line {STRes854,S854} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes854,S854} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList855 = [STRes854|STResList854],
- ?line ITRes854 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S854),
+ ITRes854 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S854),
ITResList855 = [ITRes854|ITResList854],
- ?line {STRes855,S855} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes855,S855} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList856 = [STRes855|STResList855],
- ?line ITRes855 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S855),
+ ITRes855 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S855),
ITResList856 = [ITRes855|ITResList855],
- ?line {STRes856,S856} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes856,S856} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList857 = [STRes856|STResList856],
- ?line ITRes856 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S856),
+ ITRes856 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S856),
ITResList857 = [ITRes856|ITResList856],
- ?line {STRes857,S857} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes857,S857} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList858 = [STRes857|STResList857],
- ?line ITRes857 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S857),
+ ITRes857 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S857),
ITResList858 = [ITRes857|ITResList857],
- ?line {STRes858,S858} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes858,S858} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList859 = [STRes858|STResList858],
- ?line ITRes858 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S858),
+ ITRes858 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S858),
ITResList859 = [ITRes858|ITResList858],
- ?line {STRes859,S859} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes859,S859} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList860 = [STRes859|STResList859],
- ?line ITRes859 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S859),
+ ITRes859 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S859),
ITResList860 = [ITRes859|ITResList859],
- ?line {STRes860,S860} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes860,S860} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList861 = [STRes860|STResList860],
- ?line ITRes860 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S860),
+ ITRes860 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S860),
ITResList861 = [ITRes860|ITResList860],
- ?line {STRes861,S861} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes861,S861} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList862 = [STRes861|STResList861],
- ?line ITRes861 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S861),
+ ITRes861 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S861),
ITResList862 = [ITRes861|ITResList861],
- ?line {STRes862,S862} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes862,S862} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList863 = [STRes862|STResList862],
- ?line ITRes862 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S862),
+ ITRes862 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S862),
ITResList863 = [ITRes862|ITResList862],
- ?line {STRes863,S863} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes863,S863} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList864 = [STRes863|STResList863],
- ?line ITRes863 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S863),
+ ITRes863 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S863),
ITResList864 = [ITRes863|ITResList863],
- ?line {STRes864,S864} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes864,S864} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList865 = [STRes864|STResList864],
- ?line ITRes864 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S864),
+ ITRes864 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S864),
ITResList865 = [ITRes864|ITResList864],
- ?line {STRes865,S865} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes865,S865} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList866 = [STRes865|STResList865],
- ?line ITRes865 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S865),
+ ITRes865 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S865),
ITResList866 = [ITRes865|ITResList865],
- ?line {STRes866,S866} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes866,S866} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList867 = [STRes866|STResList866],
- ?line ITRes866 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S866),
+ ITRes866 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S866),
ITResList867 = [ITRes866|ITResList866],
- ?line {STRes867,S867} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes867,S867} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList868 = [STRes867|STResList867],
- ?line ITRes867 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S867),
+ ITRes867 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S867),
ITResList868 = [ITRes867|ITResList867],
- ?line {STRes868,S868} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes868,S868} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList869 = [STRes868|STResList868],
- ?line ITRes868 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S868),
+ ITRes868 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S868),
ITResList869 = [ITRes868|ITResList868],
- ?line {STRes869,S869} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes869,S869} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList870 = [STRes869|STResList869],
- ?line ITRes869 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S869),
+ ITRes869 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S869),
ITResList870 = [ITRes869|ITResList869],
- ?line {STRes870,S870} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes870,S870} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList871 = [STRes870|STResList870],
- ?line ITRes870 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S870),
+ ITRes870 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S870),
ITResList871 = [ITRes870|ITResList870],
- ?line {STRes871,S871} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes871,S871} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList872 = [STRes871|STResList871],
- ?line ITRes871 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S871),
+ ITRes871 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S871),
ITResList872 = [ITRes871|ITResList871],
- ?line {STRes872,S872} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes872,S872} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList873 = [STRes872|STResList872],
- ?line ITRes872 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S872),
+ ITRes872 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S872),
ITResList873 = [ITRes872|ITResList872],
- ?line {STRes873,S873} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes873,S873} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList874 = [STRes873|STResList873],
- ?line ITRes873 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S873),
+ ITRes873 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S873),
ITResList874 = [ITRes873|ITResList873],
- ?line {STRes874,S874} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes874,S874} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList875 = [STRes874|STResList874],
- ?line ITRes874 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S874),
+ ITRes874 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S874),
ITResList875 = [ITRes874|ITResList874],
- ?line {STRes875,S875} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes875,S875} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList876 = [STRes875|STResList875],
- ?line ITRes875 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S875),
+ ITRes875 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S875),
ITResList876 = [ITRes875|ITResList875],
- ?line {STRes876,S876} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes876,S876} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList877 = [STRes876|STResList876],
- ?line ITRes876 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S876),
+ ITRes876 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S876),
ITResList877 = [ITRes876|ITResList876],
- ?line {STRes877,S877} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes877,S877} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList878 = [STRes877|STResList877],
- ?line ITRes877 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S877),
+ ITRes877 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S877),
ITResList878 = [ITRes877|ITResList877],
- ?line {STRes878,S878} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes878,S878} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList879 = [STRes878|STResList878],
- ?line ITRes878 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S878),
+ ITRes878 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S878),
ITResList879 = [ITRes878|ITResList878],
- ?line {STRes879,S879} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes879,S879} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList880 = [STRes879|STResList879],
- ?line ITRes879 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S879),
+ ITRes879 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S879),
ITResList880 = [ITRes879|ITResList879],
- ?line {STRes880,S880} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes880,S880} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList881 = [STRes880|STResList880],
- ?line ITRes880 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S880),
+ ITRes880 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S880),
ITResList881 = [ITRes880|ITResList880],
- ?line {STRes881,S881} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes881,S881} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList882 = [STRes881|STResList881],
- ?line ITRes881 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S881),
+ ITRes881 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S881),
ITResList882 = [ITRes881|ITResList881],
- ?line {STRes882,S882} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes882,S882} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList883 = [STRes882|STResList882],
- ?line ITRes882 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S882),
+ ITRes882 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S882),
ITResList883 = [ITRes882|ITResList882],
- ?line {STRes883,S883} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes883,S883} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList884 = [STRes883|STResList883],
- ?line ITRes883 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S883),
+ ITRes883 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S883),
ITResList884 = [ITRes883|ITResList883],
- ?line {STRes884,S884} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes884,S884} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList885 = [STRes884|STResList884],
- ?line ITRes884 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S884),
+ ITRes884 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S884),
ITResList885 = [ITRes884|ITResList884],
- ?line {STRes885,S885} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes885,S885} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList886 = [STRes885|STResList885],
- ?line ITRes885 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S885),
+ ITRes885 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S885),
ITResList886 = [ITRes885|ITResList885],
- ?line {STRes886,S886} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes886,S886} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList887 = [STRes886|STResList886],
- ?line ITRes886 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S886),
+ ITRes886 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S886),
ITResList887 = [ITRes886|ITResList886],
- ?line {STRes887,S887} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes887,S887} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList888 = [STRes887|STResList887],
- ?line ITRes887 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S887),
+ ITRes887 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S887),
ITResList888 = [ITRes887|ITResList887],
@@ -12240,3756 +12228,3756 @@ idc_(Config) when is_list(Config) ->
id(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA001.xsd','./msxsdtest/identityConstraint',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA002.xsd','./msxsdtest/identityConstraint',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA003.xsd','./msxsdtest/identityConstraint',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA004.xsd','./msxsdtest/identityConstraint',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA005.xsd','./msxsdtest/identityConstraint',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA006.xsd','./msxsdtest/identityConstraint',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA007.xsd','./msxsdtest/identityConstraint',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA008.xsd','./msxsdtest/identityConstraint',valid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA009.xsd','./msxsdtest/identityConstraint',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA010.xsd','./msxsdtest/identityConstraint',valid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA011.xsd','./msxsdtest/identityConstraint',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA012.xsd','./msxsdtest/identityConstraint',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA013.xsd','./msxsdtest/identityConstraint',valid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA014.xsd','./msxsdtest/identityConstraint',valid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA015.xsd','./msxsdtest/identityConstraint',valid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA016.xsd','./msxsdtest/identityConstraint',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA017.xsd','./msxsdtest/identityConstraint',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA018.xsd','./msxsdtest/identityConstraint',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA019.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA019.xsd','./msxsdtest/identityConstraint',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA020.xsd','./msxsdtest/identityConstraint',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA021.xsd','./msxsdtest/identityConstraint',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA022.xsd','./msxsdtest/identityConstraint',valid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA023.xsd','./msxsdtest/identityConstraint',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA024.xsd','./msxsdtest/identityConstraint',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA025.xsd','./msxsdtest/identityConstraint',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA026.xsd','./msxsdtest/identityConstraint',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA027.xsd','./msxsdtest/identityConstraint',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA028.xsd','./msxsdtest/identityConstraint',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA029.xsd','./msxsdtest/identityConstraint',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA030.xsd','./msxsdtest/identityConstraint',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA031.xsd','./msxsdtest/identityConstraint',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA032.xsd','./msxsdtest/identityConstraint',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA033.xsd','./msxsdtest/identityConstraint',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA034.xsd','./msxsdtest/identityConstraint',valid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA035.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA035.xsd','./msxsdtest/identityConstraint',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA036.xsd','./msxsdtest/identityConstraint',valid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA037.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA037.xsd','./msxsdtest/identityConstraint',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA038.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA038.xsd','./msxsdtest/identityConstraint',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA039.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA039.xsd','./msxsdtest/identityConstraint',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA040.xsd','./msxsdtest/identityConstraint',valid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA041.xsd','./msxsdtest/identityConstraint',valid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA042.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA042.xsd','./msxsdtest/identityConstraint',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA043.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA043.xsd','./msxsdtest/identityConstraint',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA044.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA044.xsd','./msxsdtest/identityConstraint',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA045.xsd','./msxsdtest/identityConstraint',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA046.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA046.xsd','./msxsdtest/identityConstraint',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA047.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA047.xsd','./msxsdtest/identityConstraint',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA048.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA048.xsd','./msxsdtest/identityConstraint',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA049.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA049.xsd','./msxsdtest/identityConstraint',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA050.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA050.xsd','./msxsdtest/identityConstraint',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA051.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA051.xsd','./msxsdtest/identityConstraint',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA052.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA052.xsd','./msxsdtest/identityConstraint',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA053.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA053.xsd','./msxsdtest/identityConstraint',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA054.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA054.xsd','./msxsdtest/identityConstraint',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA055.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA055.xsd','./msxsdtest/identityConstraint',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA056.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA056.xsd','./msxsdtest/identityConstraint',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA057.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA057.xsd','./msxsdtest/identityConstraint',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA058.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA058.xsd','./msxsdtest/identityConstraint',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA059.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA059.xsd','./msxsdtest/identityConstraint',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA060.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA060.xsd','./msxsdtest/identityConstraint',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB001.xsd','./msxsdtest/identityConstraint',valid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB002.xsd','./msxsdtest/identityConstraint',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB003.xsd','./msxsdtest/identityConstraint',invalid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB004.xsd','./msxsdtest/identityConstraint',invalid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB005.xsd','./msxsdtest/identityConstraint',invalid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB006.xsd','./msxsdtest/identityConstraint',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB007.xsd','./msxsdtest/identityConstraint',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB008.xsd','./msxsdtest/identityConstraint',valid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB009.xsd','./msxsdtest/identityConstraint',valid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB010.xsd','./msxsdtest/identityConstraint',valid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB011.xsd','./msxsdtest/identityConstraint',valid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB012.xsd','./msxsdtest/identityConstraint',valid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB013.xsd','./msxsdtest/identityConstraint',valid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB014.xsd','./msxsdtest/identityConstraint',valid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB015.xsd','./msxsdtest/identityConstraint',valid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB016.xsd','./msxsdtest/identityConstraint',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB017.xsd','./msxsdtest/identityConstraint',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB018.xsd','./msxsdtest/identityConstraint',valid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB019.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB019.xsd','./msxsdtest/identityConstraint',invalid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB020.xsd','./msxsdtest/identityConstraint',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB021.xsd','./msxsdtest/identityConstraint',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB022.xsd','./msxsdtest/identityConstraint',valid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB023.xsd','./msxsdtest/identityConstraint',invalid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB024.xsd','./msxsdtest/identityConstraint',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB025.xsd','./msxsdtest/identityConstraint',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB026.xsd','./msxsdtest/identityConstraint',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB027.xsd','./msxsdtest/identityConstraint',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB028.xsd','./msxsdtest/identityConstraint',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB029.xsd','./msxsdtest/identityConstraint',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB030.xsd','./msxsdtest/identityConstraint',invalid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB031.xsd','./msxsdtest/identityConstraint',invalid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB032.xsd','./msxsdtest/identityConstraint',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB033.xsd','./msxsdtest/identityConstraint',valid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB034.xsd','./msxsdtest/identityConstraint',valid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB035.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB035.xsd','./msxsdtest/identityConstraint',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB036.xsd','./msxsdtest/identityConstraint',valid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB037.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB037.xsd','./msxsdtest/identityConstraint',invalid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB038.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB038.xsd','./msxsdtest/identityConstraint',invalid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB039.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB039.xsd','./msxsdtest/identityConstraint',invalid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB040.xsd','./msxsdtest/identityConstraint',valid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB041.xsd','./msxsdtest/identityConstraint',valid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB042.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB042.xsd','./msxsdtest/identityConstraint',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB043.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB043.xsd','./msxsdtest/identityConstraint',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB044.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB044.xsd','./msxsdtest/identityConstraint',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB045.xsd','./msxsdtest/identityConstraint',valid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB046.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB046.xsd','./msxsdtest/identityConstraint',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB047.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB047.xsd','./msxsdtest/identityConstraint',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB048.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB048.xsd','./msxsdtest/identityConstraint',invalid),
STResList108 = [STRes107|STResList107],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB049.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB049.xsd','./msxsdtest/identityConstraint',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB050.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB050.xsd','./msxsdtest/identityConstraint',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB051.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB051.xsd','./msxsdtest/identityConstraint',invalid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB052.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB052.xsd','./msxsdtest/identityConstraint',invalid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB053.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB053.xsd','./msxsdtest/identityConstraint',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB054.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB054.xsd','./msxsdtest/identityConstraint',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB055.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB055.xsd','./msxsdtest/identityConstraint',invalid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB056.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB056.xsd','./msxsdtest/identityConstraint',invalid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB057.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB057.xsd','./msxsdtest/identityConstraint',invalid),
STResList117 = [STRes116|STResList116],
- ?line {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB058.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB058.xsd','./msxsdtest/identityConstraint',invalid),
STResList118 = [STRes117|STResList117],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB059.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB059.xsd','./msxsdtest/identityConstraint',invalid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB060.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB060.xsd','./msxsdtest/identityConstraint',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC001.xsd','./msxsdtest/identityConstraint',valid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC002.xsd','./msxsdtest/identityConstraint',invalid),
STResList122 = [STRes121|STResList121],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC003.xsd','./msxsdtest/identityConstraint',invalid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC004.xsd','./msxsdtest/identityConstraint',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC005.xsd','./msxsdtest/identityConstraint',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC006.xsd','./msxsdtest/identityConstraint',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC007.xsd','./msxsdtest/identityConstraint',invalid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC008.xsd','./msxsdtest/identityConstraint',valid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC009.xsd','./msxsdtest/identityConstraint',valid),
STResList129 = [STRes128|STResList128],
- ?line {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC010.xsd','./msxsdtest/identityConstraint',valid),
STResList130 = [STRes129|STResList129],
- ?line {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC011.xsd','./msxsdtest/identityConstraint',valid),
STResList131 = [STRes130|STResList130],
- ?line {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC012.xsd','./msxsdtest/identityConstraint',valid),
STResList132 = [STRes131|STResList131],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC013.xsd','./msxsdtest/identityConstraint',valid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC014.xsd','./msxsdtest/identityConstraint',valid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC015.xsd','./msxsdtest/identityConstraint',valid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC016.xsd','./msxsdtest/identityConstraint',invalid),
STResList136 = [STRes135|STResList135],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC017.xsd','./msxsdtest/identityConstraint',invalid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC018.xsd','./msxsdtest/identityConstraint',invalid),
STResList138 = [STRes137|STResList137],
- ?line {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC019.xsd','./msxsdtest/identityConstraint',valid),
STResList139 = [STRes138|STResList138],
- ?line {STRes139,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes139,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC020.xsd','./msxsdtest/identityConstraint',invalid),
STResList140 = [STRes139|STResList139],
- ?line {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC021.xsd','./msxsdtest/identityConstraint',invalid),
STResList141 = [STRes140|STResList140],
- ?line {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC022.xsd','./msxsdtest/identityConstraint',valid),
STResList142 = [STRes141|STResList141],
- ?line {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC023.xsd','./msxsdtest/identityConstraint',invalid),
STResList143 = [STRes142|STResList142],
- ?line {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC024.xsd','./msxsdtest/identityConstraint',invalid),
STResList144 = [STRes143|STResList143],
- ?line {STRes144,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes144,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC025.xsd','./msxsdtest/identityConstraint',invalid),
STResList145 = [STRes144|STResList144],
- ?line {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC026.xsd','./msxsdtest/identityConstraint',invalid),
STResList146 = [STRes145|STResList145],
- ?line {STRes146,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes146,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC027.xsd','./msxsdtest/identityConstraint',invalid),
STResList147 = [STRes146|STResList146],
- ?line {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC028.xsd','./msxsdtest/identityConstraint',invalid),
STResList148 = [STRes147|STResList147],
- ?line {STRes148,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes148,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC029.xsd','./msxsdtest/identityConstraint',invalid),
STResList149 = [STRes148|STResList148],
- ?line {STRes149,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes149,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC030.xsd','./msxsdtest/identityConstraint',invalid),
STResList150 = [STRes149|STResList149],
- ?line {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC031.xsd','./msxsdtest/identityConstraint',invalid),
STResList151 = [STRes150|STResList150],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC032.xsd','./msxsdtest/identityConstraint',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC033.xsd','./msxsdtest/identityConstraint',valid),
STResList153 = [STRes152|STResList152],
- ?line {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC034.xsd','./msxsdtest/identityConstraint',valid),
STResList154 = [STRes153|STResList153],
- ?line {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC035.xsd','./msxsdtest/identityConstraint',valid),
STResList155 = [STRes154|STResList154],
- ?line {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC036.xsd','./msxsdtest/identityConstraint',valid),
STResList156 = [STRes155|STResList155],
- ?line {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC038.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC038.xsd','./msxsdtest/identityConstraint',invalid),
STResList157 = [STRes156|STResList156],
- ?line {STRes157,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC039.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes157,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC039.xsd','./msxsdtest/identityConstraint',valid),
STResList158 = [STRes157|STResList157],
- ?line {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC040.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC040.xsd','./msxsdtest/identityConstraint',invalid),
STResList159 = [STRes158|STResList158],
- ?line {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC041.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC041.xsd','./msxsdtest/identityConstraint',invalid),
STResList160 = [STRes159|STResList159],
- ?line {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC042.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC042.xsd','./msxsdtest/identityConstraint',invalid),
STResList161 = [STRes160|STResList160],
- ?line {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC043.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC043.xsd','./msxsdtest/identityConstraint',valid),
STResList162 = [STRes161|STResList161],
- ?line {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC044.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC044.xsd','./msxsdtest/identityConstraint',valid),
STResList163 = [STRes162|STResList162],
- ?line {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC045.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC045.xsd','./msxsdtest/identityConstraint',invalid),
STResList164 = [STRes163|STResList163],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC046.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC046.xsd','./msxsdtest/identityConstraint',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC047.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC047.xsd','./msxsdtest/identityConstraint',invalid),
STResList166 = [STRes165|STResList165],
- ?line {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC048.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC048.xsd','./msxsdtest/identityConstraint',valid),
STResList167 = [STRes166|STResList166],
- ?line {STRes167,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC049.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes167,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC049.xsd','./msxsdtest/identityConstraint',invalid),
STResList168 = [STRes167|STResList167],
- ?line {STRes168,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC050.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes168,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC050.xsd','./msxsdtest/identityConstraint',invalid),
STResList169 = [STRes168|STResList168],
- ?line {STRes169,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC051.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes169,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC051.xsd','./msxsdtest/identityConstraint',invalid),
STResList170 = [STRes169|STResList169],
- ?line {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC052.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC052.xsd','./msxsdtest/identityConstraint',invalid),
STResList171 = [STRes170|STResList170],
- ?line {STRes171,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC053.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes171,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC053.xsd','./msxsdtest/identityConstraint',invalid),
STResList172 = [STRes171|STResList171],
- ?line {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC054.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC054.xsd','./msxsdtest/identityConstraint',invalid),
STResList173 = [STRes172|STResList172],
- ?line {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC055.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC055.xsd','./msxsdtest/identityConstraint',invalid),
STResList174 = [STRes173|STResList173],
- ?line {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC056.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC056.xsd','./msxsdtest/identityConstraint',invalid),
STResList175 = [STRes174|STResList174],
- ?line {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC057.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC057.xsd','./msxsdtest/identityConstraint',invalid),
STResList176 = [STRes175|STResList175],
- ?line {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC058.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC058.xsd','./msxsdtest/identityConstraint',invalid),
STResList177 = [STRes176|STResList176],
- ?line {STRes177,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC059.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes177,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC059.xsd','./msxsdtest/identityConstraint',invalid),
STResList178 = [STRes177|STResList177],
- ?line {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC060.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC060.xsd','./msxsdtest/identityConstraint',invalid),
STResList179 = [STRes178|STResList178],
- ?line {STRes179,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC061.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes179,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC061.xsd','./msxsdtest/identityConstraint',invalid),
STResList180 = [STRes179|STResList179],
- ?line {STRes180,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC062.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes180,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC062.xsd','./msxsdtest/identityConstraint',invalid),
STResList181 = [STRes180|STResList180],
- ?line {STRes181,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC063.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes181,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC063.xsd','./msxsdtest/identityConstraint',invalid),
STResList182 = [STRes181|STResList181],
- ?line {STRes182,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes182,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD001.xsd','./msxsdtest/identityConstraint',valid),
STResList183 = [STRes182|STResList182],
- ?line {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD002.xsd','./msxsdtest/identityConstraint',invalid),
STResList184 = [STRes183|STResList183],
- ?line {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD003.xsd','./msxsdtest/identityConstraint',invalid),
STResList185 = [STRes184|STResList184],
- ?line {STRes185,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes185,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD004.xsd','./msxsdtest/identityConstraint',invalid),
STResList186 = [STRes185|STResList185],
- ?line {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD005.xsd','./msxsdtest/identityConstraint',invalid),
STResList187 = [STRes186|STResList186],
- ?line {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD006.xsd','./msxsdtest/identityConstraint',invalid),
STResList188 = [STRes187|STResList187],
- ?line {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD007.xsd','./msxsdtest/identityConstraint',invalid),
STResList189 = [STRes188|STResList188],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD008.xsd','./msxsdtest/identityConstraint',valid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD009.xsd','./msxsdtest/identityConstraint',valid),
STResList191 = [STRes190|STResList190],
- ?line {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD010.xsd','./msxsdtest/identityConstraint',valid),
STResList192 = [STRes191|STResList191],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD011.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD011.xsd','./msxsdtest/identityConstraint',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD012.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD012.xsd','./msxsdtest/identityConstraint',invalid),
STResList194 = [STRes193|STResList193],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD013.xsd','./msxsdtest/identityConstraint',valid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD014.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD014.xsd','./msxsdtest/identityConstraint',invalid),
STResList196 = [STRes195|STResList195],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD015.xsd','./msxsdtest/identityConstraint',valid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD016.xsd','./msxsdtest/identityConstraint',valid),
STResList198 = [STRes197|STResList197],
- ?line {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD017.xsd','./msxsdtest/identityConstraint',invalid),
STResList199 = [STRes198|STResList198],
- ?line {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD018.xsd','./msxsdtest/identityConstraint',invalid),
STResList200 = [STRes199|STResList199],
- ?line {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD019.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD019.xsd','./msxsdtest/identityConstraint',invalid),
STResList201 = [STRes200|STResList200],
- ?line {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD020.xsd','./msxsdtest/identityConstraint',invalid),
STResList202 = [STRes201|STResList201],
- ?line {STRes202,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes202,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD021.xsd','./msxsdtest/identityConstraint',invalid),
STResList203 = [STRes202|STResList202],
- ?line {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD022.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD022.xsd','./msxsdtest/identityConstraint',invalid),
STResList204 = [STRes203|STResList203],
- ?line {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD023.xsd','./msxsdtest/identityConstraint',invalid),
STResList205 = [STRes204|STResList204],
- ?line {STRes205,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes205,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD024.xsd','./msxsdtest/identityConstraint',invalid),
STResList206 = [STRes205|STResList205],
- ?line {STRes206,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes206,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD025.xsd','./msxsdtest/identityConstraint',invalid),
STResList207 = [STRes206|STResList206],
- ?line {STRes207,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes207,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD026.xsd','./msxsdtest/identityConstraint',invalid),
STResList208 = [STRes207|STResList207],
- ?line {STRes208,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes208,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD027.xsd','./msxsdtest/identityConstraint',invalid),
STResList209 = [STRes208|STResList208],
- ?line {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD028.xsd','./msxsdtest/identityConstraint',invalid),
STResList210 = [STRes209|STResList209],
- ?line {STRes210,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes210,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD029.xsd','./msxsdtest/identityConstraint',invalid),
STResList211 = [STRes210|STResList210],
- ?line {STRes211,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes211,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD030.xsd','./msxsdtest/identityConstraint',invalid),
STResList212 = [STRes211|STResList211],
- ?line {STRes212,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes212,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD031.xsd','./msxsdtest/identityConstraint',invalid),
STResList213 = [STRes212|STResList212],
- ?line {STRes213,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes213,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD032.xsd','./msxsdtest/identityConstraint',invalid),
STResList214 = [STRes213|STResList213],
- ?line {STRes214,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD033.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes214,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD033.xsd','./msxsdtest/identityConstraint',invalid),
STResList215 = [STRes214|STResList214],
- ?line {STRes215,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes215,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE001.xsd','./msxsdtest/identityConstraint',valid),
STResList216 = [STRes215|STResList215],
- ?line {STRes216,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes216,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE002.xsd','./msxsdtest/identityConstraint',invalid),
STResList217 = [STRes216|STResList216],
- ?line {STRes217,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes217,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE003.xsd','./msxsdtest/identityConstraint',invalid),
STResList218 = [STRes217|STResList217],
- ?line {STRes218,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes218,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE004.xsd','./msxsdtest/identityConstraint',invalid),
STResList219 = [STRes218|STResList218],
- ?line {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE005.xsd','./msxsdtest/identityConstraint',invalid),
STResList220 = [STRes219|STResList219],
- ?line {STRes220,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes220,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE006.xsd','./msxsdtest/identityConstraint',invalid),
STResList221 = [STRes220|STResList220],
- ?line {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE007.xsd','./msxsdtest/identityConstraint',invalid),
STResList222 = [STRes221|STResList221],
- ?line {STRes222,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes222,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE008.xsd','./msxsdtest/identityConstraint',valid),
STResList223 = [STRes222|STResList222],
- ?line {STRes223,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes223,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE009.xsd','./msxsdtest/identityConstraint',valid),
STResList224 = [STRes223|STResList223],
- ?line {STRes224,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes224,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE010.xsd','./msxsdtest/identityConstraint',valid),
STResList225 = [STRes224|STResList224],
- ?line {STRes225,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE011.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes225,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE011.xsd','./msxsdtest/identityConstraint',invalid),
STResList226 = [STRes225|STResList225],
- ?line {STRes226,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE012.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes226,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE012.xsd','./msxsdtest/identityConstraint',invalid),
STResList227 = [STRes226|STResList226],
- ?line {STRes227,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes227,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE013.xsd','./msxsdtest/identityConstraint',valid),
STResList228 = [STRes227|STResList227],
- ?line {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE014.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE014.xsd','./msxsdtest/identityConstraint',invalid),
STResList229 = [STRes228|STResList228],
- ?line {STRes229,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes229,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE015.xsd','./msxsdtest/identityConstraint',valid),
STResList230 = [STRes229|STResList229],
- ?line {STRes230,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes230,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE016.xsd','./msxsdtest/identityConstraint',valid),
STResList231 = [STRes230|STResList230],
- ?line {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE017.xsd','./msxsdtest/identityConstraint',invalid),
STResList232 = [STRes231|STResList231],
- ?line {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE018.xsd','./msxsdtest/identityConstraint',invalid),
STResList233 = [STRes232|STResList232],
- ?line {STRes233,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE019.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes233,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE019.xsd','./msxsdtest/identityConstraint',invalid),
STResList234 = [STRes233|STResList233],
- ?line {STRes234,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes234,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE020.xsd','./msxsdtest/identityConstraint',invalid),
STResList235 = [STRes234|STResList234],
- ?line {STRes235,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes235,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE021.xsd','./msxsdtest/identityConstraint',invalid),
STResList236 = [STRes235|STResList235],
- ?line {STRes236,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE022.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes236,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE022.xsd','./msxsdtest/identityConstraint',invalid),
STResList237 = [STRes236|STResList236],
- ?line {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE023.xsd','./msxsdtest/identityConstraint',invalid),
STResList238 = [STRes237|STResList237],
- ?line {STRes238,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes238,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE024.xsd','./msxsdtest/identityConstraint',invalid),
STResList239 = [STRes238|STResList238],
- ?line {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE025.xsd','./msxsdtest/identityConstraint',invalid),
STResList240 = [STRes239|STResList239],
- ?line {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE026.xsd','./msxsdtest/identityConstraint',invalid),
STResList241 = [STRes240|STResList240],
- ?line {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE027.xsd','./msxsdtest/identityConstraint',invalid),
STResList242 = [STRes241|STResList241],
- ?line {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE028.xsd','./msxsdtest/identityConstraint',invalid),
STResList243 = [STRes242|STResList242],
- ?line {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE029.xsd','./msxsdtest/identityConstraint',invalid),
STResList244 = [STRes243|STResList243],
- ?line {STRes244,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes244,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE030.xsd','./msxsdtest/identityConstraint',invalid),
STResList245 = [STRes244|STResList244],
- ?line {STRes245,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes245,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE031.xsd','./msxsdtest/identityConstraint',invalid),
STResList246 = [STRes245|STResList245],
- ?line {STRes246,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes246,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE032.xsd','./msxsdtest/identityConstraint',invalid),
STResList247 = [STRes246|STResList246],
- ?line {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE033.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE033.xsd','./msxsdtest/identityConstraint',invalid),
STResList248 = [STRes247|STResList247],
- ?line {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF001.xsd','./msxsdtest/identityConstraint',valid),
STResList249 = [STRes248|STResList248],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF001.xml','./msxsdtest/identityConstraint',valid,S248),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF001.xml','./msxsdtest/identityConstraint',valid,S248),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF003.xsd','./msxsdtest/identityConstraint',valid),
STResList250 = [STRes249|STResList249],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF003.xml','./msxsdtest/identityConstraint',valid,S249),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF003.xml','./msxsdtest/identityConstraint',valid,S249),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF004.xsd','./msxsdtest/identityConstraint',valid),
STResList251 = [STRes250|STResList250],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF004.xml','./msxsdtest/identityConstraint',valid,S250),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF004.xml','./msxsdtest/identityConstraint',valid,S250),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF005.xsd','./msxsdtest/identityConstraint',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF005.xml','./msxsdtest/identityConstraint',invalid,S251),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF005.xml','./msxsdtest/identityConstraint',invalid,S251),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF006.xsd','./msxsdtest/identityConstraint',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF006.xml','./msxsdtest/identityConstraint',invalid,S252),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF006.xml','./msxsdtest/identityConstraint',invalid,S252),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF007.xsd','./msxsdtest/identityConstraint',valid),
STResList254 = [STRes253|STResList253],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF007.xml','./msxsdtest/identityConstraint',valid,S253),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF007.xml','./msxsdtest/identityConstraint',valid,S253),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF008.xsd','./msxsdtest/identityConstraint',valid),
STResList255 = [STRes254|STResList254],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF008.xml','./msxsdtest/identityConstraint',invalid,S254),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF008.xml','./msxsdtest/identityConstraint',invalid,S254),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF009.xsd','./msxsdtest/identityConstraint',valid),
STResList256 = [STRes255|STResList255],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF009.xml','./msxsdtest/identityConstraint',valid,S255),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF009.xml','./msxsdtest/identityConstraint',valid,S255),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF010.xsd','./msxsdtest/identityConstraint',valid),
STResList257 = [STRes256|STResList256],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF010.xml','./msxsdtest/identityConstraint',invalid,S256),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF010.xml','./msxsdtest/identityConstraint',invalid,S256),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF011.xsd','./msxsdtest/identityConstraint',valid),
STResList258 = [STRes257|STResList257],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF011.xml','./msxsdtest/identityConstraint',valid,S257),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF011.xml','./msxsdtest/identityConstraint',valid,S257),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF012.xsd','./msxsdtest/identityConstraint',valid),
STResList259 = [STRes258|STResList258],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF012.xml','./msxsdtest/identityConstraint',valid,S258),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF012.xml','./msxsdtest/identityConstraint',valid,S258),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF013.xsd','./msxsdtest/identityConstraint',valid),
STResList260 = [STRes259|STResList259],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF013.xml','./msxsdtest/identityConstraint',valid,S259),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF013.xml','./msxsdtest/identityConstraint',valid,S259),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF014.xsd','./msxsdtest/identityConstraint',valid),
STResList261 = [STRes260|STResList260],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF014.xml','./msxsdtest/identityConstraint',valid,S260),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF014.xml','./msxsdtest/identityConstraint',valid,S260),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF015.xsd','./msxsdtest/identityConstraint',valid),
STResList262 = [STRes261|STResList261],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF015.xml','./msxsdtest/identityConstraint',invalid,S261),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF015.xml','./msxsdtest/identityConstraint',invalid,S261),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF016.xsd','./msxsdtest/identityConstraint',valid),
STResList263 = [STRes262|STResList262],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF016.xml','./msxsdtest/identityConstraint',invalid,S262),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF016.xml','./msxsdtest/identityConstraint',invalid,S262),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF017.xsd','./msxsdtest/identityConstraint',valid),
STResList264 = [STRes263|STResList263],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF017.xml','./msxsdtest/identityConstraint',invalid,S263),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF017.xml','./msxsdtest/identityConstraint',invalid,S263),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF018.xsd','./msxsdtest/identityConstraint',valid),
STResList265 = [STRes264|STResList264],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF018.xml','./msxsdtest/identityConstraint',invalid,S264),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF018.xml','./msxsdtest/identityConstraint',invalid,S264),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF019.xsd','./msxsdtest/identityConstraint',valid),
STResList266 = [STRes265|STResList265],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF019.xml','./msxsdtest/identityConstraint',valid,S265),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF019.xml','./msxsdtest/identityConstraint',valid,S265),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF020.xsd','./msxsdtest/identityConstraint',valid),
STResList267 = [STRes266|STResList266],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF020.xml','./msxsdtest/identityConstraint',valid,S266),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF020.xml','./msxsdtest/identityConstraint',valid,S266),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF021.xsd','./msxsdtest/identityConstraint',valid),
STResList268 = [STRes267|STResList267],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF021.xml','./msxsdtest/identityConstraint',valid,S267),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF021.xml','./msxsdtest/identityConstraint',valid,S267),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF022.xsd','./msxsdtest/identityConstraint',valid),
STResList269 = [STRes268|STResList268],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF022.xml','./msxsdtest/identityConstraint',valid,S268),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF022.xml','./msxsdtest/identityConstraint',valid,S268),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF023.xsd','./msxsdtest/identityConstraint',valid),
STResList270 = [STRes269|STResList269],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF023.xml','./msxsdtest/identityConstraint',valid,S269),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF023.xml','./msxsdtest/identityConstraint',valid,S269),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF024.xsd','./msxsdtest/identityConstraint',valid),
STResList271 = [STRes270|STResList270],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF024.xml','./msxsdtest/identityConstraint',valid,S270),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF024.xml','./msxsdtest/identityConstraint',valid,S270),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF025.xsd','./msxsdtest/identityConstraint',valid),
STResList272 = [STRes271|STResList271],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF025.xml','./msxsdtest/identityConstraint',valid,S271),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF025.xml','./msxsdtest/identityConstraint',valid,S271),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF026.xsd','./msxsdtest/identityConstraint',valid),
STResList273 = [STRes272|STResList272],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF026.xml','./msxsdtest/identityConstraint',valid,S272),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF026.xml','./msxsdtest/identityConstraint',valid,S272),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF027.xsd','./msxsdtest/identityConstraint',valid),
STResList274 = [STRes273|STResList273],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF027.xml','./msxsdtest/identityConstraint',valid,S273),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF027.xml','./msxsdtest/identityConstraint',valid,S273),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes274,S274} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes274,S274} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF028.xsd','./msxsdtest/identityConstraint',valid),
STResList275 = [STRes274|STResList274],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF028.xml','./msxsdtest/identityConstraint',valid,S274),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF028.xml','./msxsdtest/identityConstraint',valid,S274),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF029.xsd','./msxsdtest/identityConstraint',valid),
STResList276 = [STRes275|STResList275],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF029.xml','./msxsdtest/identityConstraint',valid,S275),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF029.xml','./msxsdtest/identityConstraint',valid,S275),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes276,S276} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes276,S276} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF030.xsd','./msxsdtest/identityConstraint',valid),
STResList277 = [STRes276|STResList276],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF030.xml','./msxsdtest/identityConstraint',valid,S276),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF030.xml','./msxsdtest/identityConstraint',valid,S276),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes277,S277} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes277,S277} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF031.xsd','./msxsdtest/identityConstraint',valid),
STResList278 = [STRes277|STResList277],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF031.xml','./msxsdtest/identityConstraint',valid,S277),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF031.xml','./msxsdtest/identityConstraint',valid,S277),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes278,S278} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF032.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes278,S278} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF032.xsd','./msxsdtest/identityConstraint',valid),
STResList279 = [STRes278|STResList278],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF032.xml','./msxsdtest/identityConstraint',valid,S278),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF032.xml','./msxsdtest/identityConstraint',valid,S278),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes279,S279} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes279,S279} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF033.xsd','./msxsdtest/identityConstraint',valid),
STResList280 = [STRes279|STResList279],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF033.xml','./msxsdtest/identityConstraint',valid,S279),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF033.xml','./msxsdtest/identityConstraint',valid,S279),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes280,S280} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes280,S280} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF034.xsd','./msxsdtest/identityConstraint',valid),
STResList281 = [STRes280|STResList280],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF034.xml','./msxsdtest/identityConstraint',valid,S280),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF034.xml','./msxsdtest/identityConstraint',valid,S280),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF035.xsd','./msxsdtest/identityConstraint',valid),
STResList282 = [STRes281|STResList281],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF035.xml','./msxsdtest/identityConstraint',valid,S281),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF035.xml','./msxsdtest/identityConstraint',valid,S281),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF036.xsd','./msxsdtest/identityConstraint',valid),
STResList283 = [STRes282|STResList282],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF036.xml','./msxsdtest/identityConstraint',valid,S282),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF036.xml','./msxsdtest/identityConstraint',valid,S282),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG001.xsd','./msxsdtest/identityConstraint',valid),
STResList284 = [STRes283|STResList283],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG001.xml','./msxsdtest/identityConstraint',valid,S283),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG001.xml','./msxsdtest/identityConstraint',valid,S283),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG003.xsd','./msxsdtest/identityConstraint',valid),
STResList285 = [STRes284|STResList284],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG003.xml','./msxsdtest/identityConstraint',invalid,S284),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG003.xml','./msxsdtest/identityConstraint',invalid,S284),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG004.xsd','./msxsdtest/identityConstraint',valid),
STResList286 = [STRes285|STResList285],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG004.xml','./msxsdtest/identityConstraint',valid,S285),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG004.xml','./msxsdtest/identityConstraint',valid,S285),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes286,S286} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes286,S286} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG005.xsd','./msxsdtest/identityConstraint',valid),
STResList287 = [STRes286|STResList286],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG005.xml','./msxsdtest/identityConstraint',invalid,S286),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG005.xml','./msxsdtest/identityConstraint',invalid,S286),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG006.xsd','./msxsdtest/identityConstraint',valid),
STResList288 = [STRes287|STResList287],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG006.xml','./msxsdtest/identityConstraint',invalid,S287),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG006.xml','./msxsdtest/identityConstraint',invalid,S287),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes288,S288} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes288,S288} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG007.xsd','./msxsdtest/identityConstraint',valid),
STResList289 = [STRes288|STResList288],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG007.xml','./msxsdtest/identityConstraint',valid,S288),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG007.xml','./msxsdtest/identityConstraint',valid,S288),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes289,S289} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes289,S289} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG008.xsd','./msxsdtest/identityConstraint',valid),
STResList290 = [STRes289|STResList289],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG008.xml','./msxsdtest/identityConstraint',invalid,S289),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG008.xml','./msxsdtest/identityConstraint',invalid,S289),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes290,S290} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes290,S290} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG009.xsd','./msxsdtest/identityConstraint',valid),
STResList291 = [STRes290|STResList290],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG009.xml','./msxsdtest/identityConstraint',invalid,S290),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG009.xml','./msxsdtest/identityConstraint',invalid,S290),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes291,S291} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes291,S291} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG010.xsd','./msxsdtest/identityConstraint',valid),
STResList292 = [STRes291|STResList291],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG010.xml','./msxsdtest/identityConstraint',invalid,S291),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG010.xml','./msxsdtest/identityConstraint',invalid,S291),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes292,S292} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes292,S292} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG011.xsd','./msxsdtest/identityConstraint',valid),
STResList293 = [STRes292|STResList292],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG011.xml','./msxsdtest/identityConstraint',invalid,S292),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG011.xml','./msxsdtest/identityConstraint',invalid,S292),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG012.xsd','./msxsdtest/identityConstraint',valid),
STResList294 = [STRes293|STResList293],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG012.xml','./msxsdtest/identityConstraint',invalid,S293),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG012.xml','./msxsdtest/identityConstraint',invalid,S293),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG013.xsd','./msxsdtest/identityConstraint',valid),
STResList295 = [STRes294|STResList294],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG013.xml','./msxsdtest/identityConstraint',valid,S294),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG013.xml','./msxsdtest/identityConstraint',valid,S294),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG014.xsd','./msxsdtest/identityConstraint',valid),
STResList296 = [STRes295|STResList295],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG014.xml','./msxsdtest/identityConstraint',valid,S295),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG014.xml','./msxsdtest/identityConstraint',valid,S295),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG015.xsd','./msxsdtest/identityConstraint',valid),
STResList297 = [STRes296|STResList296],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG015.xml','./msxsdtest/identityConstraint',valid,S296),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG015.xml','./msxsdtest/identityConstraint',valid,S296),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG016.xsd','./msxsdtest/identityConstraint',valid),
STResList298 = [STRes297|STResList297],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG016.xml','./msxsdtest/identityConstraint',valid,S297),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG016.xml','./msxsdtest/identityConstraint',valid,S297),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes298,S298} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes298,S298} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG017.xsd','./msxsdtest/identityConstraint',valid),
STResList299 = [STRes298|STResList298],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG017.xml','./msxsdtest/identityConstraint',valid,S298),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG017.xml','./msxsdtest/identityConstraint',valid,S298),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG018.xsd','./msxsdtest/identityConstraint',valid),
STResList300 = [STRes299|STResList299],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG018.xml','./msxsdtest/identityConstraint',valid,S299),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG018.xml','./msxsdtest/identityConstraint',valid,S299),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG019.xsd','./msxsdtest/identityConstraint',valid),
STResList301 = [STRes300|STResList300],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG019.xml','./msxsdtest/identityConstraint',valid,S300),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG019.xml','./msxsdtest/identityConstraint',valid,S300),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG020.xsd','./msxsdtest/identityConstraint',valid),
STResList302 = [STRes301|STResList301],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG020.xml','./msxsdtest/identityConstraint',invalid,S301),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG020.xml','./msxsdtest/identityConstraint',invalid,S301),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG021.xsd','./msxsdtest/identityConstraint',valid),
STResList303 = [STRes302|STResList302],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG021.xml','./msxsdtest/identityConstraint',valid,S302),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG021.xml','./msxsdtest/identityConstraint',valid,S302),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes303,S303} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes303,S303} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG022.xsd','./msxsdtest/identityConstraint',valid),
STResList304 = [STRes303|STResList303],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG022.xml','./msxsdtest/identityConstraint',valid,S303),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG022.xml','./msxsdtest/identityConstraint',valid,S303),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG023.xsd','./msxsdtest/identityConstraint',valid),
STResList305 = [STRes304|STResList304],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG023.xml','./msxsdtest/identityConstraint',valid,S304),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG023.xml','./msxsdtest/identityConstraint',valid,S304),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG024.xsd','./msxsdtest/identityConstraint',valid),
STResList306 = [STRes305|STResList305],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG024.xml','./msxsdtest/identityConstraint',valid,S305),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG024.xml','./msxsdtest/identityConstraint',valid,S305),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG025.xsd','./msxsdtest/identityConstraint',valid),
STResList307 = [STRes306|STResList306],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG025.xml','./msxsdtest/identityConstraint',invalid,S306),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG025.xml','./msxsdtest/identityConstraint',invalid,S306),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG026.xsd','./msxsdtest/identityConstraint',valid),
STResList308 = [STRes307|STResList307],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG026.xml','./msxsdtest/identityConstraint',valid,S307),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG026.xml','./msxsdtest/identityConstraint',valid,S307),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG027.xsd','./msxsdtest/identityConstraint',valid),
STResList309 = [STRes308|STResList308],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG027.xml','./msxsdtest/identityConstraint',valid,S308),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG027.xml','./msxsdtest/identityConstraint',valid,S308),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG028.xsd','./msxsdtest/identityConstraint',valid),
STResList310 = [STRes309|STResList309],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG028.xml','./msxsdtest/identityConstraint',valid,S309),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG028.xml','./msxsdtest/identityConstraint',valid,S309),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes310,S310} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes310,S310} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG029.xsd','./msxsdtest/identityConstraint',valid),
STResList311 = [STRes310|STResList310],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG029.xml','./msxsdtest/identityConstraint',valid,S310),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG029.xml','./msxsdtest/identityConstraint',valid,S310),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG030.xsd','./msxsdtest/identityConstraint',valid),
STResList312 = [STRes311|STResList311],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG030.xml','./msxsdtest/identityConstraint',valid,S311),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG030.xml','./msxsdtest/identityConstraint',valid,S311),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH001.xsd','./msxsdtest/identityConstraint',valid),
STResList313 = [STRes312|STResList312],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH001.xml','./msxsdtest/identityConstraint',valid,S312),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH001.xml','./msxsdtest/identityConstraint',valid,S312),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH003.xsd','./msxsdtest/identityConstraint',valid),
STResList314 = [STRes313|STResList313],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH003.xml','./msxsdtest/identityConstraint',valid,S313),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH003.xml','./msxsdtest/identityConstraint',valid,S313),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH004.xsd','./msxsdtest/identityConstraint',valid),
STResList315 = [STRes314|STResList314],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH004.xml','./msxsdtest/identityConstraint',valid,S314),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH004.xml','./msxsdtest/identityConstraint',valid,S314),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes315,S315} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes315,S315} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH005.xsd','./msxsdtest/identityConstraint',valid),
STResList316 = [STRes315|STResList315],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH005.xml','./msxsdtest/identityConstraint',invalid,S315),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH005.xml','./msxsdtest/identityConstraint',invalid,S315),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes316,S316} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes316,S316} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH006.xsd','./msxsdtest/identityConstraint',valid),
STResList317 = [STRes316|STResList316],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH006.xml','./msxsdtest/identityConstraint',invalid,S316),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH006.xml','./msxsdtest/identityConstraint',invalid,S316),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH007.xsd','./msxsdtest/identityConstraint',valid),
STResList318 = [STRes317|STResList317],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH007.xml','./msxsdtest/identityConstraint',valid,S317),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH007.xml','./msxsdtest/identityConstraint',valid,S317),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH008.xsd','./msxsdtest/identityConstraint',valid),
STResList319 = [STRes318|STResList318],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH008.xml','./msxsdtest/identityConstraint',valid,S318),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH008.xml','./msxsdtest/identityConstraint',valid,S318),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH009.xsd','./msxsdtest/identityConstraint',valid),
STResList320 = [STRes319|STResList319],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH009.xml','./msxsdtest/identityConstraint',valid,S319),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH009.xml','./msxsdtest/identityConstraint',valid,S319),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH010.xsd','./msxsdtest/identityConstraint',valid),
STResList321 = [STRes320|STResList320],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH010.xml','./msxsdtest/identityConstraint',invalid,S320),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH010.xml','./msxsdtest/identityConstraint',invalid,S320),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH011.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH011.xsd','./msxsdtest/identityConstraint',invalid),
STResList322 = [STRes321|STResList321],
- ?line {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH012.xsd','./msxsdtest/identityConstraint',valid),
STResList323 = [STRes322|STResList322],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH012.xml','./msxsdtest/identityConstraint',invalid,S322),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH012.xml','./msxsdtest/identityConstraint',invalid,S322),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH013.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH013.xsd','./msxsdtest/identityConstraint',invalid),
STResList324 = [STRes323|STResList323],
- ?line {STRes324,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH014.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes324,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH014.xsd','./msxsdtest/identityConstraint',invalid),
STResList325 = [STRes324|STResList324],
- ?line {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH015.xsd','./msxsdtest/identityConstraint',valid),
STResList326 = [STRes325|STResList325],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH015.xml','./msxsdtest/identityConstraint',valid,S325),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH015.xml','./msxsdtest/identityConstraint',valid,S325),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH016.xsd','./msxsdtest/identityConstraint',valid),
STResList327 = [STRes326|STResList326],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH016.xml','./msxsdtest/identityConstraint',valid,S326),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH016.xml','./msxsdtest/identityConstraint',valid,S326),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes327,S327} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes327,S327} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH017.xsd','./msxsdtest/identityConstraint',valid),
STResList328 = [STRes327|STResList327],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH017.xml','./msxsdtest/identityConstraint',valid,S327),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH017.xml','./msxsdtest/identityConstraint',valid,S327),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH018.xsd','./msxsdtest/identityConstraint',valid),
STResList329 = [STRes328|STResList328],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH018.xml','./msxsdtest/identityConstraint',valid,S328),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH018.xml','./msxsdtest/identityConstraint',valid,S328),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH019.xsd','./msxsdtest/identityConstraint',valid),
STResList330 = [STRes329|STResList329],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH019.xml','./msxsdtest/identityConstraint',valid,S329),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH019.xml','./msxsdtest/identityConstraint',valid,S329),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH020.xsd','./msxsdtest/identityConstraint',valid),
STResList331 = [STRes330|STResList330],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH020.xml','./msxsdtest/identityConstraint',valid,S330),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH020.xml','./msxsdtest/identityConstraint',valid,S330),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH021.xsd','./msxsdtest/identityConstraint',valid),
STResList332 = [STRes331|STResList331],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH021.xml','./msxsdtest/identityConstraint',valid,S331),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH021.xml','./msxsdtest/identityConstraint',valid,S331),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes332,S332} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes332,S332} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH022.xsd','./msxsdtest/identityConstraint',valid),
STResList333 = [STRes332|STResList332],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH022.xml','./msxsdtest/identityConstraint',valid,S332),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH022.xml','./msxsdtest/identityConstraint',valid,S332),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH023.xsd','./msxsdtest/identityConstraint',valid),
STResList334 = [STRes333|STResList333],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH023.xml','./msxsdtest/identityConstraint',valid,S333),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH023.xml','./msxsdtest/identityConstraint',valid,S333),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes334,S334} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes334,S334} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH024.xsd','./msxsdtest/identityConstraint',valid),
STResList335 = [STRes334|STResList334],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH024.xml','./msxsdtest/identityConstraint',valid,S334),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH024.xml','./msxsdtest/identityConstraint',valid,S334),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes335,S335} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes335,S335} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH025.xsd','./msxsdtest/identityConstraint',valid),
STResList336 = [STRes335|STResList335],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH025.xml','./msxsdtest/identityConstraint',valid,S335),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH025.xml','./msxsdtest/identityConstraint',valid,S335),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes336,S336} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes336,S336} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH026.xsd','./msxsdtest/identityConstraint',valid),
STResList337 = [STRes336|STResList336],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH026.xml','./msxsdtest/identityConstraint',valid,S336),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH026.xml','./msxsdtest/identityConstraint',valid,S336),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes337,S337} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes337,S337} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH027.xsd','./msxsdtest/identityConstraint',valid),
STResList338 = [STRes337|STResList337],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH027.xml','./msxsdtest/identityConstraint',valid,S337),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH027.xml','./msxsdtest/identityConstraint',valid,S337),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes338,S338} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes338,S338} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH028.xsd','./msxsdtest/identityConstraint',valid),
STResList339 = [STRes338|STResList338],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH028.xml','./msxsdtest/identityConstraint',valid,S338),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH028.xml','./msxsdtest/identityConstraint',valid,S338),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH029.xsd','./msxsdtest/identityConstraint',valid),
STResList340 = [STRes339|STResList339],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH029.xml','./msxsdtest/identityConstraint',valid,S339),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH029.xml','./msxsdtest/identityConstraint',valid,S339),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH030.xsd','./msxsdtest/identityConstraint',valid),
STResList341 = [STRes340|STResList340],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH030.xml','./msxsdtest/identityConstraint',valid,S340),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH030.xml','./msxsdtest/identityConstraint',valid,S340),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH031.xsd','./msxsdtest/identityConstraint',valid),
STResList342 = [STRes341|STResList341],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH031.xml','./msxsdtest/identityConstraint',valid,S341),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH031.xml','./msxsdtest/identityConstraint',valid,S341),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH032.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH032.xsd','./msxsdtest/identityConstraint',valid),
STResList343 = [STRes342|STResList342],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH032.xml','./msxsdtest/identityConstraint',valid,S342),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH032.xml','./msxsdtest/identityConstraint',valid,S342),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH034.xsd','./msxsdtest/identityConstraint',valid),
STResList344 = [STRes343|STResList343],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH034.xml','./msxsdtest/identityConstraint',valid,S343),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH034.xml','./msxsdtest/identityConstraint',valid,S343),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes344,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH035.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes344,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH035.xsd','./msxsdtest/identityConstraint',invalid),
STResList345 = [STRes344|STResList344],
- ?line {STRes345,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI001.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes345,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI001.xsd','./msxsdtest/identityConstraint',invalid),
STResList346 = [STRes345|STResList345],
- ?line {STRes346,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI002.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes346,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI002.xsd','./msxsdtest/identityConstraint',valid),
STResList347 = [STRes346|STResList346],
- ?line {STRes347,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes347,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI003.xsd','./msxsdtest/identityConstraint',invalid),
STResList348 = [STRes347|STResList347],
- ?line {STRes348,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes348,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI004.xsd','./msxsdtest/identityConstraint',invalid),
STResList349 = [STRes348|STResList348],
- ?line {STRes349,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes349,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI005.xsd','./msxsdtest/identityConstraint',invalid),
STResList350 = [STRes349|STResList349],
- ?line {STRes350,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes350,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI006.xsd','./msxsdtest/identityConstraint',invalid),
STResList351 = [STRes350|STResList350],
- ?line {STRes351,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes351,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI007.xsd','./msxsdtest/identityConstraint',invalid),
STResList352 = [STRes351|STResList351],
- ?line {STRes352,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes352,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI008.xsd','./msxsdtest/identityConstraint',valid),
STResList353 = [STRes352|STResList352],
- ?line {STRes353,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes353,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI009.xsd','./msxsdtest/identityConstraint',valid),
STResList354 = [STRes353|STResList353],
- ?line {STRes354,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI010.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes354,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI010.xsd','./msxsdtest/identityConstraint',invalid),
STResList355 = [STRes354|STResList354],
- ?line {STRes355,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes355,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI011.xsd','./msxsdtest/identityConstraint',valid),
STResList356 = [STRes355|STResList355],
- ?line {STRes356,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes356,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI012.xsd','./msxsdtest/identityConstraint',valid),
STResList357 = [STRes356|STResList356],
- ?line {STRes357,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes357,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI013.xsd','./msxsdtest/identityConstraint',valid),
STResList358 = [STRes357|STResList357],
- ?line {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI014.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI014.xsd','./msxsdtest/identityConstraint',invalid),
STResList359 = [STRes358|STResList358],
- ?line {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI015.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI015.xsd','./msxsdtest/identityConstraint',invalid),
STResList360 = [STRes359|STResList359],
- ?line {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI016.xsd','./msxsdtest/identityConstraint',invalid),
STResList361 = [STRes360|STResList360],
- ?line {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI017.xsd','./msxsdtest/identityConstraint',valid),
STResList362 = [STRes361|STResList361],
- ?line {STRes362,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes362,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI018.xsd','./msxsdtest/identityConstraint',invalid),
STResList363 = [STRes362|STResList362],
- ?line {STRes363,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes363,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI019.xsd','./msxsdtest/identityConstraint',valid),
STResList364 = [STRes363|STResList363],
- ?line {STRes364,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes364,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI020.xsd','./msxsdtest/identityConstraint',valid),
STResList365 = [STRes364|STResList364],
- ?line {STRes365,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes365,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI021.xsd','./msxsdtest/identityConstraint',valid),
STResList366 = [STRes365|STResList365],
- ?line {STRes366,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI022.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes366,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI022.xsd','./msxsdtest/identityConstraint',invalid),
STResList367 = [STRes366|STResList366],
- ?line {STRes367,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes367,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI023.xsd','./msxsdtest/identityConstraint',invalid),
STResList368 = [STRes367|STResList367],
- ?line {STRes368,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes368,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI024.xsd','./msxsdtest/identityConstraint',valid),
STResList369 = [STRes368|STResList368],
- ?line {STRes369,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes369,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI025.xsd','./msxsdtest/identityConstraint',valid),
STResList370 = [STRes369|STResList369],
- ?line {STRes370,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes370,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI026.xsd','./msxsdtest/identityConstraint',valid),
STResList371 = [STRes370|STResList370],
- ?line {STRes371,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes371,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI027.xsd','./msxsdtest/identityConstraint',valid),
STResList372 = [STRes371|STResList371],
- ?line {STRes372,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes372,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI028.xsd','./msxsdtest/identityConstraint',invalid),
STResList373 = [STRes372|STResList372],
- ?line {STRes373,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes373,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI029.xsd','./msxsdtest/identityConstraint',valid),
STResList374 = [STRes373|STResList373],
- ?line {STRes374,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes374,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI030.xsd','./msxsdtest/identityConstraint',valid),
STResList375 = [STRes374|STResList374],
- ?line {STRes375,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes375,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI031.xsd','./msxsdtest/identityConstraint',valid),
STResList376 = [STRes375|STResList375],
- ?line {STRes376,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI032.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes376,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI032.xsd','./msxsdtest/identityConstraint',valid),
STResList377 = [STRes376|STResList376],
- ?line {STRes377,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes377,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI033.xsd','./msxsdtest/identityConstraint',valid),
STResList378 = [STRes377|STResList377],
- ?line {STRes378,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes378,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI034.xsd','./msxsdtest/identityConstraint',valid),
STResList379 = [STRes378|STResList378],
- ?line {STRes379,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes379,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI035.xsd','./msxsdtest/identityConstraint',valid),
STResList380 = [STRes379|STResList379],
- ?line {STRes380,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes380,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI036.xsd','./msxsdtest/identityConstraint',valid),
STResList381 = [STRes380|STResList380],
- ?line {STRes381,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI037.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes381,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI037.xsd','./msxsdtest/identityConstraint',valid),
STResList382 = [STRes381|STResList381],
- ?line {STRes382,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI038.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes382,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI038.xsd','./msxsdtest/identityConstraint',invalid),
STResList383 = [STRes382|STResList382],
- ?line {STRes383,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI039.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes383,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI039.xsd','./msxsdtest/identityConstraint',valid),
STResList384 = [STRes383|STResList383],
- ?line {STRes384,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes384,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI040.xsd','./msxsdtest/identityConstraint',valid),
STResList385 = [STRes384|STResList384],
- ?line {STRes385,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes385,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI041.xsd','./msxsdtest/identityConstraint',valid),
STResList386 = [STRes385|STResList385],
- ?line {STRes386,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI042.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes386,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI042.xsd','./msxsdtest/identityConstraint',valid),
STResList387 = [STRes386|STResList386],
- ?line {STRes387,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI043.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes387,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI043.xsd','./msxsdtest/identityConstraint',valid),
STResList388 = [STRes387|STResList387],
- ?line {STRes388,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI044.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes388,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI044.xsd','./msxsdtest/identityConstraint',valid),
STResList389 = [STRes388|STResList388],
- ?line {STRes389,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes389,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI045.xsd','./msxsdtest/identityConstraint',valid),
STResList390 = [STRes389|STResList389],
- ?line {STRes390,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI046.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes390,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI046.xsd','./msxsdtest/identityConstraint',valid),
STResList391 = [STRes390|STResList390],
- ?line {STRes391,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI047.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes391,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI047.xsd','./msxsdtest/identityConstraint',valid),
STResList392 = [STRes391|STResList391],
- ?line {STRes392,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI048.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes392,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI048.xsd','./msxsdtest/identityConstraint',valid),
STResList393 = [STRes392|STResList392],
- ?line {STRes393,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI049.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes393,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI049.xsd','./msxsdtest/identityConstraint',valid),
STResList394 = [STRes393|STResList393],
- ?line {STRes394,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI050.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes394,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI050.xsd','./msxsdtest/identityConstraint',valid),
STResList395 = [STRes394|STResList394],
- ?line {STRes395,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI051.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes395,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI051.xsd','./msxsdtest/identityConstraint',valid),
STResList396 = [STRes395|STResList395],
- ?line {STRes396,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI052.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes396,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI052.xsd','./msxsdtest/identityConstraint',valid),
STResList397 = [STRes396|STResList396],
- ?line {STRes397,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI053.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes397,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI053.xsd','./msxsdtest/identityConstraint',valid),
STResList398 = [STRes397|STResList397],
- ?line {STRes398,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI054.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes398,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI054.xsd','./msxsdtest/identityConstraint',valid),
STResList399 = [STRes398|STResList398],
- ?line {STRes399,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI055.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes399,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI055.xsd','./msxsdtest/identityConstraint',valid),
STResList400 = [STRes399|STResList399],
- ?line {STRes400,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI056.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes400,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI056.xsd','./msxsdtest/identityConstraint',valid),
STResList401 = [STRes400|STResList400],
- ?line {STRes401,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI057.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes401,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI057.xsd','./msxsdtest/identityConstraint',valid),
STResList402 = [STRes401|STResList401],
- ?line {STRes402,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI058.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes402,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI058.xsd','./msxsdtest/identityConstraint',valid),
STResList403 = [STRes402|STResList402],
- ?line {STRes403,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI059.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes403,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI059.xsd','./msxsdtest/identityConstraint',valid),
STResList404 = [STRes403|STResList403],
- ?line {STRes404,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI060.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes404,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI060.xsd','./msxsdtest/identityConstraint',valid),
STResList405 = [STRes404|STResList404],
- ?line {STRes405,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI061.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes405,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI061.xsd','./msxsdtest/identityConstraint',valid),
STResList406 = [STRes405|STResList405],
- ?line {STRes406,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI062.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes406,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI062.xsd','./msxsdtest/identityConstraint',valid),
STResList407 = [STRes406|STResList406],
- ?line {STRes407,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI063.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes407,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI063.xsd','./msxsdtest/identityConstraint',valid),
STResList408 = [STRes407|STResList407],
- ?line {STRes408,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI064.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes408,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI064.xsd','./msxsdtest/identityConstraint',valid),
STResList409 = [STRes408|STResList408],
- ?line {STRes409,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI065.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes409,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI065.xsd','./msxsdtest/identityConstraint',valid),
STResList410 = [STRes409|STResList409],
- ?line {STRes410,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI066.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes410,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI066.xsd','./msxsdtest/identityConstraint',valid),
STResList411 = [STRes410|STResList410],
- ?line {STRes411,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI067.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes411,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI067.xsd','./msxsdtest/identityConstraint',valid),
STResList412 = [STRes411|STResList411],
- ?line {STRes412,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI068.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes412,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI068.xsd','./msxsdtest/identityConstraint',valid),
STResList413 = [STRes412|STResList412],
- ?line {STRes413,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI069.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes413,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI069.xsd','./msxsdtest/identityConstraint',valid),
STResList414 = [STRes413|STResList413],
- ?line {STRes414,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI070.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes414,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI070.xsd','./msxsdtest/identityConstraint',valid),
STResList415 = [STRes414|STResList414],
- ?line {STRes415,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI071.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes415,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI071.xsd','./msxsdtest/identityConstraint',valid),
STResList416 = [STRes415|STResList415],
- ?line {STRes416,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI072.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes416,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI072.xsd','./msxsdtest/identityConstraint',valid),
STResList417 = [STRes416|STResList416],
- ?line {STRes417,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI073.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes417,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI073.xsd','./msxsdtest/identityConstraint',valid),
STResList418 = [STRes417|STResList417],
- ?line {STRes418,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI074.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes418,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI074.xsd','./msxsdtest/identityConstraint',valid),
STResList419 = [STRes418|STResList418],
- ?line {STRes419,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI075.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes419,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI075.xsd','./msxsdtest/identityConstraint',valid),
STResList420 = [STRes419|STResList419],
- ?line {STRes420,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI076.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes420,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI076.xsd','./msxsdtest/identityConstraint',valid),
STResList421 = [STRes420|STResList420],
- ?line {STRes421,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI077.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes421,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI077.xsd','./msxsdtest/identityConstraint',valid),
STResList422 = [STRes421|STResList421],
- ?line {STRes422,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI078.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes422,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI078.xsd','./msxsdtest/identityConstraint',valid),
STResList423 = [STRes422|STResList422],
- ?line {STRes423,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI079.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes423,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI079.xsd','./msxsdtest/identityConstraint',valid),
STResList424 = [STRes423|STResList423],
- ?line {STRes424,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI080.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes424,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI080.xsd','./msxsdtest/identityConstraint',valid),
STResList425 = [STRes424|STResList424],
- ?line {STRes425,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI081.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes425,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI081.xsd','./msxsdtest/identityConstraint',valid),
STResList426 = [STRes425|STResList425],
- ?line {STRes426,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI082.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes426,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI082.xsd','./msxsdtest/identityConstraint',valid),
STResList427 = [STRes426|STResList426],
- ?line {STRes427,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI083.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes427,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI083.xsd','./msxsdtest/identityConstraint',valid),
STResList428 = [STRes427|STResList427],
- ?line {STRes428,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI084.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes428,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI084.xsd','./msxsdtest/identityConstraint',valid),
STResList429 = [STRes428|STResList428],
- ?line {STRes429,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI085.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes429,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI085.xsd','./msxsdtest/identityConstraint',valid),
STResList430 = [STRes429|STResList429],
- ?line {STRes430,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI086.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes430,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI086.xsd','./msxsdtest/identityConstraint',valid),
STResList431 = [STRes430|STResList430],
- ?line {STRes431,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI087.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes431,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI087.xsd','./msxsdtest/identityConstraint',valid),
STResList432 = [STRes431|STResList431],
- ?line {STRes432,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI088.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes432,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI088.xsd','./msxsdtest/identityConstraint',valid),
STResList433 = [STRes432|STResList432],
- ?line {STRes433,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI089.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes433,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI089.xsd','./msxsdtest/identityConstraint',valid),
STResList434 = [STRes433|STResList433],
- ?line {STRes434,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI090.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes434,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI090.xsd','./msxsdtest/identityConstraint',valid),
STResList435 = [STRes434|STResList434],
- ?line {STRes435,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI091.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes435,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI091.xsd','./msxsdtest/identityConstraint',valid),
STResList436 = [STRes435|STResList435],
- ?line {STRes436,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI092.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes436,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI092.xsd','./msxsdtest/identityConstraint',valid),
STResList437 = [STRes436|STResList436],
- ?line {STRes437,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI093.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes437,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI093.xsd','./msxsdtest/identityConstraint',valid),
STResList438 = [STRes437|STResList437],
- ?line {STRes438,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI094.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes438,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI094.xsd','./msxsdtest/identityConstraint',valid),
STResList439 = [STRes438|STResList438],
- ?line {STRes439,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI095.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes439,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI095.xsd','./msxsdtest/identityConstraint',valid),
STResList440 = [STRes439|STResList439],
- ?line {STRes440,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI096.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes440,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI096.xsd','./msxsdtest/identityConstraint',valid),
STResList441 = [STRes440|STResList440],
- ?line {STRes441,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI097.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes441,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI097.xsd','./msxsdtest/identityConstraint',valid),
STResList442 = [STRes441|STResList441],
- ?line {STRes442,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI098.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes442,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI098.xsd','./msxsdtest/identityConstraint',valid),
STResList443 = [STRes442|STResList442],
- ?line {STRes443,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI099.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes443,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI099.xsd','./msxsdtest/identityConstraint',valid),
STResList444 = [STRes443|STResList443],
- ?line {STRes444,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI100.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes444,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI100.xsd','./msxsdtest/identityConstraint',valid),
STResList445 = [STRes444|STResList444],
- ?line {STRes445,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI101.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes445,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI101.xsd','./msxsdtest/identityConstraint',valid),
STResList446 = [STRes445|STResList445],
- ?line {STRes446,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI102.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes446,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI102.xsd','./msxsdtest/identityConstraint',valid),
STResList447 = [STRes446|STResList446],
- ?line {STRes447,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI103.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes447,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI103.xsd','./msxsdtest/identityConstraint',valid),
STResList448 = [STRes447|STResList447],
- ?line {STRes448,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI104.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes448,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI104.xsd','./msxsdtest/identityConstraint',valid),
STResList449 = [STRes448|STResList448],
- ?line {STRes449,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI105.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes449,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI105.xsd','./msxsdtest/identityConstraint',valid),
STResList450 = [STRes449|STResList449],
- ?line {STRes450,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI106.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes450,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI106.xsd','./msxsdtest/identityConstraint',valid),
STResList451 = [STRes450|STResList450],
- ?line {STRes451,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI107.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes451,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI107.xsd','./msxsdtest/identityConstraint',valid),
STResList452 = [STRes451|STResList451],
- ?line {STRes452,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI108.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes452,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI108.xsd','./msxsdtest/identityConstraint',valid),
STResList453 = [STRes452|STResList452],
- ?line {STRes453,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI109.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes453,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI109.xsd','./msxsdtest/identityConstraint',valid),
STResList454 = [STRes453|STResList453],
- ?line {STRes454,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI110.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes454,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI110.xsd','./msxsdtest/identityConstraint',valid),
STResList455 = [STRes454|STResList454],
- ?line {STRes455,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI111.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes455,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI111.xsd','./msxsdtest/identityConstraint',valid),
STResList456 = [STRes455|STResList455],
- ?line {STRes456,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI112.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes456,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI112.xsd','./msxsdtest/identityConstraint',valid),
STResList457 = [STRes456|STResList456],
- ?line {STRes457,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI113.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes457,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI113.xsd','./msxsdtest/identityConstraint',valid),
STResList458 = [STRes457|STResList457],
- ?line {STRes458,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI114.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes458,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI114.xsd','./msxsdtest/identityConstraint',valid),
STResList459 = [STRes458|STResList458],
- ?line {STRes459,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI115.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes459,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI115.xsd','./msxsdtest/identityConstraint',valid),
STResList460 = [STRes459|STResList459],
- ?line {STRes460,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI116.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes460,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI116.xsd','./msxsdtest/identityConstraint',valid),
STResList461 = [STRes460|STResList460],
- ?line {STRes461,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI117.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes461,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI117.xsd','./msxsdtest/identityConstraint',valid),
STResList462 = [STRes461|STResList461],
- ?line {STRes462,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI118.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes462,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI118.xsd','./msxsdtest/identityConstraint',valid),
STResList463 = [STRes462|STResList462],
- ?line {STRes463,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI119.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes463,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI119.xsd','./msxsdtest/identityConstraint',valid),
STResList464 = [STRes463|STResList463],
- ?line {STRes464,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI120.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes464,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI120.xsd','./msxsdtest/identityConstraint',valid),
STResList465 = [STRes464|STResList464],
- ?line {STRes465,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI121.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes465,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI121.xsd','./msxsdtest/identityConstraint',valid),
STResList466 = [STRes465|STResList465],
- ?line {STRes466,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI122.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes466,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI122.xsd','./msxsdtest/identityConstraint',valid),
STResList467 = [STRes466|STResList466],
- ?line {STRes467,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI123.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes467,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI123.xsd','./msxsdtest/identityConstraint',valid),
STResList468 = [STRes467|STResList467],
- ?line {STRes468,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI124.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes468,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI124.xsd','./msxsdtest/identityConstraint',valid),
STResList469 = [STRes468|STResList468],
- ?line {STRes469,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI125.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes469,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI125.xsd','./msxsdtest/identityConstraint',valid),
STResList470 = [STRes469|STResList469],
- ?line {STRes470,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI126.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes470,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI126.xsd','./msxsdtest/identityConstraint',valid),
STResList471 = [STRes470|STResList470],
- ?line {STRes471,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI127.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes471,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI127.xsd','./msxsdtest/identityConstraint',valid),
STResList472 = [STRes471|STResList471],
- ?line {STRes472,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI128.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes472,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI128.xsd','./msxsdtest/identityConstraint',valid),
STResList473 = [STRes472|STResList472],
- ?line {STRes473,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI129.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes473,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI129.xsd','./msxsdtest/identityConstraint',valid),
STResList474 = [STRes473|STResList473],
- ?line {STRes474,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI130.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes474,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI130.xsd','./msxsdtest/identityConstraint',valid),
STResList475 = [STRes474|STResList474],
- ?line {STRes475,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI131.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes475,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI131.xsd','./msxsdtest/identityConstraint',valid),
STResList476 = [STRes475|STResList475],
- ?line {STRes476,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI132.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes476,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI132.xsd','./msxsdtest/identityConstraint',valid),
STResList477 = [STRes476|STResList476],
- ?line {STRes477,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI133.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes477,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI133.xsd','./msxsdtest/identityConstraint',valid),
STResList478 = [STRes477|STResList477],
- ?line {STRes478,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI134.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes478,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI134.xsd','./msxsdtest/identityConstraint',valid),
STResList479 = [STRes478|STResList478],
- ?line {STRes479,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI135.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes479,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI135.xsd','./msxsdtest/identityConstraint',valid),
STResList480 = [STRes479|STResList479],
- ?line {STRes480,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI136.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes480,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI136.xsd','./msxsdtest/identityConstraint',valid),
STResList481 = [STRes480|STResList480],
- ?line {STRes481,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI137.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes481,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI137.xsd','./msxsdtest/identityConstraint',valid),
STResList482 = [STRes481|STResList481],
- ?line {STRes482,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI138.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes482,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI138.xsd','./msxsdtest/identityConstraint',valid),
STResList483 = [STRes482|STResList482],
- ?line {STRes483,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI139.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes483,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI139.xsd','./msxsdtest/identityConstraint',valid),
STResList484 = [STRes483|STResList483],
- ?line {STRes484,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI140.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes484,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI140.xsd','./msxsdtest/identityConstraint',valid),
STResList485 = [STRes484|STResList484],
- ?line {STRes485,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI141.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes485,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI141.xsd','./msxsdtest/identityConstraint',valid),
STResList486 = [STRes485|STResList485],
- ?line {STRes486,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI142.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes486,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI142.xsd','./msxsdtest/identityConstraint',valid),
STResList487 = [STRes486|STResList486],
- ?line {STRes487,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI143.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes487,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI143.xsd','./msxsdtest/identityConstraint',valid),
STResList488 = [STRes487|STResList487],
- ?line {STRes488,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI144.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes488,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI144.xsd','./msxsdtest/identityConstraint',valid),
STResList489 = [STRes488|STResList488],
- ?line {STRes489,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI145.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes489,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI145.xsd','./msxsdtest/identityConstraint',invalid),
STResList490 = [STRes489|STResList489],
- ?line {STRes490,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI146.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes490,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI146.xsd','./msxsdtest/identityConstraint',invalid),
STResList491 = [STRes490|STResList490],
- ?line {STRes491,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI147.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes491,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI147.xsd','./msxsdtest/identityConstraint',invalid),
STResList492 = [STRes491|STResList491],
- ?line {STRes492,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI148.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes492,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI148.xsd','./msxsdtest/identityConstraint',invalid),
STResList493 = [STRes492|STResList492],
- ?line {STRes493,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI149.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes493,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI149.xsd','./msxsdtest/identityConstraint',invalid),
STResList494 = [STRes493|STResList493],
- ?line {STRes494,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI150.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes494,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI150.xsd','./msxsdtest/identityConstraint',invalid),
STResList495 = [STRes494|STResList494],
- ?line {STRes495,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI151.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes495,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI151.xsd','./msxsdtest/identityConstraint',invalid),
STResList496 = [STRes495|STResList495],
- ?line {STRes496,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI152.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes496,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI152.xsd','./msxsdtest/identityConstraint',invalid),
STResList497 = [STRes496|STResList496],
- ?line {STRes497,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ001.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes497,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ001.xsd','./msxsdtest/identityConstraint',invalid),
STResList498 = [STRes497|STResList497],
- ?line {STRes498,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes498,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ002.xsd','./msxsdtest/identityConstraint',invalid),
STResList499 = [STRes498|STResList498],
- ?line {STRes499,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes499,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ003.xsd','./msxsdtest/identityConstraint',invalid),
STResList500 = [STRes499|STResList499],
- ?line {STRes500,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes500,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ004.xsd','./msxsdtest/identityConstraint',valid),
STResList501 = [STRes500|STResList500],
- ?line {STRes501,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes501,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ005.xsd','./msxsdtest/identityConstraint',invalid),
STResList502 = [STRes501|STResList501],
- ?line {STRes502,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes502,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ006.xsd','./msxsdtest/identityConstraint',invalid),
STResList503 = [STRes502|STResList502],
- ?line {STRes503,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes503,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ007.xsd','./msxsdtest/identityConstraint',invalid),
STResList504 = [STRes503|STResList503],
- ?line {STRes504,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ008.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes504,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ008.xsd','./msxsdtest/identityConstraint',invalid),
STResList505 = [STRes504|STResList504],
- ?line {STRes505,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes505,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ009.xsd','./msxsdtest/identityConstraint',valid),
STResList506 = [STRes505|STResList505],
- ?line {STRes506,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes506,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ010.xsd','./msxsdtest/identityConstraint',valid),
STResList507 = [STRes506|STResList506],
- ?line {STRes507,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ011.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes507,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ011.xsd','./msxsdtest/identityConstraint',invalid),
STResList508 = [STRes507|STResList507],
- ?line {STRes508,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes508,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ012.xsd','./msxsdtest/identityConstraint',valid),
STResList509 = [STRes508|STResList508],
- ?line {STRes509,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes509,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ013.xsd','./msxsdtest/identityConstraint',valid),
STResList510 = [STRes509|STResList509],
- ?line {STRes510,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes510,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ014.xsd','./msxsdtest/identityConstraint',valid),
STResList511 = [STRes510|STResList510],
- ?line {STRes511,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ015.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes511,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ015.xsd','./msxsdtest/identityConstraint',invalid),
STResList512 = [STRes511|STResList511],
- ?line {STRes512,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes512,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ016.xsd','./msxsdtest/identityConstraint',invalid),
STResList513 = [STRes512|STResList512],
- ?line {STRes513,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes513,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ017.xsd','./msxsdtest/identityConstraint',invalid),
STResList514 = [STRes513|STResList513],
- ?line {STRes514,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes514,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ018.xsd','./msxsdtest/identityConstraint',valid),
STResList515 = [STRes514|STResList514],
- ?line {STRes515,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes515,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ019.xsd','./msxsdtest/identityConstraint',valid),
STResList516 = [STRes515|STResList515],
- ?line {STRes516,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes516,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ020.xsd','./msxsdtest/identityConstraint',valid),
STResList517 = [STRes516|STResList516],
- ?line {STRes517,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes517,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ021.xsd','./msxsdtest/identityConstraint',valid),
STResList518 = [STRes517|STResList517],
- ?line {STRes518,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes518,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ022.xsd','./msxsdtest/identityConstraint',valid),
STResList519 = [STRes518|STResList518],
- ?line {STRes519,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes519,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ023.xsd','./msxsdtest/identityConstraint',valid),
STResList520 = [STRes519|STResList519],
- ?line {STRes520,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes520,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ024.xsd','./msxsdtest/identityConstraint',valid),
STResList521 = [STRes520|STResList520],
- ?line {STRes521,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes521,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ025.xsd','./msxsdtest/identityConstraint',invalid),
STResList522 = [STRes521|STResList521],
- ?line {STRes522,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes522,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ026.xsd','./msxsdtest/identityConstraint',invalid),
STResList523 = [STRes522|STResList522],
- ?line {STRes523,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes523,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ027.xsd','./msxsdtest/identityConstraint',valid),
STResList524 = [STRes523|STResList523],
- ?line {STRes524,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes524,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ028.xsd','./msxsdtest/identityConstraint',valid),
STResList525 = [STRes524|STResList524],
- ?line {STRes525,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes525,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ029.xsd','./msxsdtest/identityConstraint',valid),
STResList526 = [STRes525|STResList525],
- ?line {STRes526,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes526,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ030.xsd','./msxsdtest/identityConstraint',invalid),
STResList527 = [STRes526|STResList526],
- ?line {STRes527,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes527,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ031.xsd','./msxsdtest/identityConstraint',valid),
STResList528 = [STRes527|STResList527],
- ?line {STRes528,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes528,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ032.xsd','./msxsdtest/identityConstraint',invalid),
STResList529 = [STRes528|STResList528],
- ?line {STRes529,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes529,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ033.xsd','./msxsdtest/identityConstraint',valid),
STResList530 = [STRes529|STResList529],
- ?line {STRes530,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes530,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ034.xsd','./msxsdtest/identityConstraint',valid),
STResList531 = [STRes530|STResList530],
- ?line {STRes531,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes531,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ035.xsd','./msxsdtest/identityConstraint',valid),
STResList532 = [STRes531|STResList531],
- ?line {STRes532,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ036.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes532,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ036.xsd','./msxsdtest/identityConstraint',invalid),
STResList533 = [STRes532|STResList532],
- ?line {STRes533,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ037.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes533,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ037.xsd','./msxsdtest/identityConstraint',valid),
STResList534 = [STRes533|STResList533],
- ?line {STRes534,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ038.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes534,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ038.xsd','./msxsdtest/identityConstraint',valid),
STResList535 = [STRes534|STResList534],
- ?line {STRes535,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ039.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes535,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ039.xsd','./msxsdtest/identityConstraint',valid),
STResList536 = [STRes535|STResList535],
- ?line {STRes536,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes536,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ040.xsd','./msxsdtest/identityConstraint',valid),
STResList537 = [STRes536|STResList536],
- ?line {STRes537,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes537,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ041.xsd','./msxsdtest/identityConstraint',valid),
STResList538 = [STRes537|STResList537],
- ?line {STRes538,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ042.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes538,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ042.xsd','./msxsdtest/identityConstraint',valid),
STResList539 = [STRes538|STResList538],
- ?line {STRes539,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ043.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes539,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ043.xsd','./msxsdtest/identityConstraint',valid),
STResList540 = [STRes539|STResList539],
- ?line {STRes540,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ044.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes540,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ044.xsd','./msxsdtest/identityConstraint',valid),
STResList541 = [STRes540|STResList540],
- ?line {STRes541,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes541,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ045.xsd','./msxsdtest/identityConstraint',valid),
STResList542 = [STRes541|STResList541],
- ?line {STRes542,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ046.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes542,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ046.xsd','./msxsdtest/identityConstraint',valid),
STResList543 = [STRes542|STResList542],
- ?line {STRes543,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ047.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes543,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ047.xsd','./msxsdtest/identityConstraint',valid),
STResList544 = [STRes543|STResList543],
- ?line {STRes544,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ048.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes544,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ048.xsd','./msxsdtest/identityConstraint',valid),
STResList545 = [STRes544|STResList544],
- ?line {STRes545,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ049.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes545,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ049.xsd','./msxsdtest/identityConstraint',valid),
STResList546 = [STRes545|STResList545],
- ?line {STRes546,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ050.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes546,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ050.xsd','./msxsdtest/identityConstraint',valid),
STResList547 = [STRes546|STResList546],
- ?line {STRes547,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ051.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes547,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ051.xsd','./msxsdtest/identityConstraint',valid),
STResList548 = [STRes547|STResList547],
- ?line {STRes548,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ052.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes548,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ052.xsd','./msxsdtest/identityConstraint',invalid),
STResList549 = [STRes548|STResList548],
- ?line {STRes549,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ053.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes549,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ053.xsd','./msxsdtest/identityConstraint',valid),
STResList550 = [STRes549|STResList549],
- ?line {STRes550,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ054.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes550,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ054.xsd','./msxsdtest/identityConstraint',valid),
STResList551 = [STRes550|STResList550],
- ?line {STRes551,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ055.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes551,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ055.xsd','./msxsdtest/identityConstraint',valid),
STResList552 = [STRes551|STResList551],
- ?line {STRes552,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ056.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes552,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ056.xsd','./msxsdtest/identityConstraint',invalid),
STResList553 = [STRes552|STResList552],
- ?line {STRes553,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ057.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes553,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ057.xsd','./msxsdtest/identityConstraint',valid),
STResList554 = [STRes553|STResList553],
- ?line {STRes554,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ058.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes554,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ058.xsd','./msxsdtest/identityConstraint',valid),
STResList555 = [STRes554|STResList554],
- ?line {STRes555,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ059.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes555,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ059.xsd','./msxsdtest/identityConstraint',valid),
STResList556 = [STRes555|STResList555],
- ?line {STRes556,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ060.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes556,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ060.xsd','./msxsdtest/identityConstraint',valid),
STResList557 = [STRes556|STResList556],
- ?line {STRes557,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ061.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes557,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ061.xsd','./msxsdtest/identityConstraint',valid),
STResList558 = [STRes557|STResList557],
- ?line {STRes558,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ062.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes558,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ062.xsd','./msxsdtest/identityConstraint',valid),
STResList559 = [STRes558|STResList558],
- ?line {STRes559,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ063.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes559,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ063.xsd','./msxsdtest/identityConstraint',valid),
STResList560 = [STRes559|STResList559],
- ?line {STRes560,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ064.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes560,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ064.xsd','./msxsdtest/identityConstraint',valid),
STResList561 = [STRes560|STResList560],
- ?line {STRes561,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ065.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes561,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ065.xsd','./msxsdtest/identityConstraint',valid),
STResList562 = [STRes561|STResList561],
- ?line {STRes562,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ066.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes562,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ066.xsd','./msxsdtest/identityConstraint',valid),
STResList563 = [STRes562|STResList562],
- ?line {STRes563,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ067.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes563,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ067.xsd','./msxsdtest/identityConstraint',valid),
STResList564 = [STRes563|STResList563],
- ?line {STRes564,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ068.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes564,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ068.xsd','./msxsdtest/identityConstraint',valid),
STResList565 = [STRes564|STResList564],
- ?line {STRes565,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ069.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes565,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ069.xsd','./msxsdtest/identityConstraint',valid),
STResList566 = [STRes565|STResList565],
- ?line {STRes566,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ070.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes566,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ070.xsd','./msxsdtest/identityConstraint',valid),
STResList567 = [STRes566|STResList566],
- ?line {STRes567,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ071.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes567,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ071.xsd','./msxsdtest/identityConstraint',valid),
STResList568 = [STRes567|STResList567],
- ?line {STRes568,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ072.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes568,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ072.xsd','./msxsdtest/identityConstraint',valid),
STResList569 = [STRes568|STResList568],
- ?line {STRes569,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ073.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes569,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ073.xsd','./msxsdtest/identityConstraint',valid),
STResList570 = [STRes569|STResList569],
- ?line {STRes570,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ074.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes570,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ074.xsd','./msxsdtest/identityConstraint',valid),
STResList571 = [STRes570|STResList570],
- ?line {STRes571,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ075.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes571,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ075.xsd','./msxsdtest/identityConstraint',valid),
STResList572 = [STRes571|STResList571],
- ?line {STRes572,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ076.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes572,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ076.xsd','./msxsdtest/identityConstraint',valid),
STResList573 = [STRes572|STResList572],
- ?line {STRes573,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ077.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes573,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ077.xsd','./msxsdtest/identityConstraint',valid),
STResList574 = [STRes573|STResList573],
- ?line {STRes574,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ078.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes574,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ078.xsd','./msxsdtest/identityConstraint',valid),
STResList575 = [STRes574|STResList574],
- ?line {STRes575,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ079.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes575,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ079.xsd','./msxsdtest/identityConstraint',valid),
STResList576 = [STRes575|STResList575],
- ?line {STRes576,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ080.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes576,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ080.xsd','./msxsdtest/identityConstraint',valid),
STResList577 = [STRes576|STResList576],
- ?line {STRes577,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ081.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes577,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ081.xsd','./msxsdtest/identityConstraint',valid),
STResList578 = [STRes577|STResList577],
- ?line {STRes578,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ082.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes578,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ082.xsd','./msxsdtest/identityConstraint',valid),
STResList579 = [STRes578|STResList578],
- ?line {STRes579,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ083.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes579,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ083.xsd','./msxsdtest/identityConstraint',valid),
STResList580 = [STRes579|STResList579],
- ?line {STRes580,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ084.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes580,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ084.xsd','./msxsdtest/identityConstraint',valid),
STResList581 = [STRes580|STResList580],
- ?line {STRes581,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ085.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes581,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ085.xsd','./msxsdtest/identityConstraint',valid),
STResList582 = [STRes581|STResList581],
- ?line {STRes582,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ086.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes582,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ086.xsd','./msxsdtest/identityConstraint',valid),
STResList583 = [STRes582|STResList582],
- ?line {STRes583,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ087.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes583,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ087.xsd','./msxsdtest/identityConstraint',valid),
STResList584 = [STRes583|STResList583],
- ?line {STRes584,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ088.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes584,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ088.xsd','./msxsdtest/identityConstraint',valid),
STResList585 = [STRes584|STResList584],
- ?line {STRes585,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ089.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes585,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ089.xsd','./msxsdtest/identityConstraint',valid),
STResList586 = [STRes585|STResList585],
- ?line {STRes586,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ090.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes586,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ090.xsd','./msxsdtest/identityConstraint',valid),
STResList587 = [STRes586|STResList586],
- ?line {STRes587,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ091.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes587,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ091.xsd','./msxsdtest/identityConstraint',valid),
STResList588 = [STRes587|STResList587],
- ?line {STRes588,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ092.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes588,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ092.xsd','./msxsdtest/identityConstraint',valid),
STResList589 = [STRes588|STResList588],
- ?line {STRes589,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ093.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes589,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ093.xsd','./msxsdtest/identityConstraint',valid),
STResList590 = [STRes589|STResList589],
- ?line {STRes590,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ094.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes590,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ094.xsd','./msxsdtest/identityConstraint',valid),
STResList591 = [STRes590|STResList590],
- ?line {STRes591,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ095.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes591,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ095.xsd','./msxsdtest/identityConstraint',valid),
STResList592 = [STRes591|STResList591],
- ?line {STRes592,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ096.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes592,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ096.xsd','./msxsdtest/identityConstraint',valid),
STResList593 = [STRes592|STResList592],
- ?line {STRes593,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ097.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes593,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ097.xsd','./msxsdtest/identityConstraint',valid),
STResList594 = [STRes593|STResList593],
- ?line {STRes594,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ098.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes594,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ098.xsd','./msxsdtest/identityConstraint',valid),
STResList595 = [STRes594|STResList594],
- ?line {STRes595,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ099.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes595,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ099.xsd','./msxsdtest/identityConstraint',valid),
STResList596 = [STRes595|STResList595],
- ?line {STRes596,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ100.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes596,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ100.xsd','./msxsdtest/identityConstraint',valid),
STResList597 = [STRes596|STResList596],
- ?line {STRes597,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ101.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes597,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ101.xsd','./msxsdtest/identityConstraint',valid),
STResList598 = [STRes597|STResList597],
- ?line {STRes598,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ102.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes598,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ102.xsd','./msxsdtest/identityConstraint',valid),
STResList599 = [STRes598|STResList598],
- ?line {STRes599,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ103.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes599,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ103.xsd','./msxsdtest/identityConstraint',valid),
STResList600 = [STRes599|STResList599],
- ?line {STRes600,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ104.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes600,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ104.xsd','./msxsdtest/identityConstraint',valid),
STResList601 = [STRes600|STResList600],
- ?line {STRes601,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ105.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes601,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ105.xsd','./msxsdtest/identityConstraint',valid),
STResList602 = [STRes601|STResList601],
- ?line {STRes602,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ106.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes602,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ106.xsd','./msxsdtest/identityConstraint',valid),
STResList603 = [STRes602|STResList602],
- ?line {STRes603,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ107.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes603,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ107.xsd','./msxsdtest/identityConstraint',valid),
STResList604 = [STRes603|STResList603],
- ?line {STRes604,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ108.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes604,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ108.xsd','./msxsdtest/identityConstraint',valid),
STResList605 = [STRes604|STResList604],
- ?line {STRes605,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ109.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes605,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ109.xsd','./msxsdtest/identityConstraint',valid),
STResList606 = [STRes605|STResList605],
- ?line {STRes606,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ110.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes606,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ110.xsd','./msxsdtest/identityConstraint',valid),
STResList607 = [STRes606|STResList606],
- ?line {STRes607,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ111.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes607,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ111.xsd','./msxsdtest/identityConstraint',valid),
STResList608 = [STRes607|STResList607],
- ?line {STRes608,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ112.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes608,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ112.xsd','./msxsdtest/identityConstraint',valid),
STResList609 = [STRes608|STResList608],
- ?line {STRes609,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ113.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes609,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ113.xsd','./msxsdtest/identityConstraint',valid),
STResList610 = [STRes609|STResList609],
- ?line {STRes610,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ114.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes610,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ114.xsd','./msxsdtest/identityConstraint',valid),
STResList611 = [STRes610|STResList610],
- ?line {STRes611,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ115.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes611,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ115.xsd','./msxsdtest/identityConstraint',valid),
STResList612 = [STRes611|STResList611],
- ?line {STRes612,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ116.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes612,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ116.xsd','./msxsdtest/identityConstraint',valid),
STResList613 = [STRes612|STResList612],
- ?line {STRes613,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ117.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes613,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ117.xsd','./msxsdtest/identityConstraint',valid),
STResList614 = [STRes613|STResList613],
- ?line {STRes614,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ118.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes614,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ118.xsd','./msxsdtest/identityConstraint',valid),
STResList615 = [STRes614|STResList614],
- ?line {STRes615,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ119.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes615,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ119.xsd','./msxsdtest/identityConstraint',valid),
STResList616 = [STRes615|STResList615],
- ?line {STRes616,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ120.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes616,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ120.xsd','./msxsdtest/identityConstraint',valid),
STResList617 = [STRes616|STResList616],
- ?line {STRes617,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ121.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes617,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ121.xsd','./msxsdtest/identityConstraint',valid),
STResList618 = [STRes617|STResList617],
- ?line {STRes618,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ122.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes618,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ122.xsd','./msxsdtest/identityConstraint',valid),
STResList619 = [STRes618|STResList618],
- ?line {STRes619,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ123.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes619,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ123.xsd','./msxsdtest/identityConstraint',valid),
STResList620 = [STRes619|STResList619],
- ?line {STRes620,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ124.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes620,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ124.xsd','./msxsdtest/identityConstraint',valid),
STResList621 = [STRes620|STResList620],
- ?line {STRes621,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ125.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes621,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ125.xsd','./msxsdtest/identityConstraint',valid),
STResList622 = [STRes621|STResList621],
- ?line {STRes622,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ126.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes622,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ126.xsd','./msxsdtest/identityConstraint',valid),
STResList623 = [STRes622|STResList622],
- ?line {STRes623,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ127.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes623,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ127.xsd','./msxsdtest/identityConstraint',valid),
STResList624 = [STRes623|STResList623],
- ?line {STRes624,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ128.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes624,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ128.xsd','./msxsdtest/identityConstraint',valid),
STResList625 = [STRes624|STResList624],
- ?line {STRes625,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ129.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes625,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ129.xsd','./msxsdtest/identityConstraint',valid),
STResList626 = [STRes625|STResList625],
- ?line {STRes626,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ130.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes626,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ130.xsd','./msxsdtest/identityConstraint',valid),
STResList627 = [STRes626|STResList626],
- ?line {STRes627,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ131.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes627,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ131.xsd','./msxsdtest/identityConstraint',valid),
STResList628 = [STRes627|STResList627],
- ?line {STRes628,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ132.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes628,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ132.xsd','./msxsdtest/identityConstraint',valid),
STResList629 = [STRes628|STResList628],
- ?line {STRes629,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ133.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes629,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ133.xsd','./msxsdtest/identityConstraint',valid),
STResList630 = [STRes629|STResList629],
- ?line {STRes630,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ134.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes630,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ134.xsd','./msxsdtest/identityConstraint',valid),
STResList631 = [STRes630|STResList630],
- ?line {STRes631,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ135.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes631,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ135.xsd','./msxsdtest/identityConstraint',valid),
STResList632 = [STRes631|STResList631],
- ?line {STRes632,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ136.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes632,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ136.xsd','./msxsdtest/identityConstraint',valid),
STResList633 = [STRes632|STResList632],
- ?line {STRes633,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ137.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes633,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ137.xsd','./msxsdtest/identityConstraint',valid),
STResList634 = [STRes633|STResList633],
- ?line {STRes634,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ138.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes634,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ138.xsd','./msxsdtest/identityConstraint',valid),
STResList635 = [STRes634|STResList634],
- ?line {STRes635,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ139.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes635,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ139.xsd','./msxsdtest/identityConstraint',valid),
STResList636 = [STRes635|STResList635],
- ?line {STRes636,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ140.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes636,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ140.xsd','./msxsdtest/identityConstraint',valid),
STResList637 = [STRes636|STResList636],
- ?line {STRes637,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ141.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes637,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ141.xsd','./msxsdtest/identityConstraint',valid),
STResList638 = [STRes637|STResList637],
- ?line {STRes638,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ142.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes638,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ142.xsd','./msxsdtest/identityConstraint',valid),
STResList639 = [STRes638|STResList638],
- ?line {STRes639,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ143.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes639,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ143.xsd','./msxsdtest/identityConstraint',valid),
STResList640 = [STRes639|STResList639],
- ?line {STRes640,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ144.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes640,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ144.xsd','./msxsdtest/identityConstraint',valid),
STResList641 = [STRes640|STResList640],
- ?line {STRes641,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ145.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes641,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ145.xsd','./msxsdtest/identityConstraint',valid),
STResList642 = [STRes641|STResList641],
- ?line {STRes642,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ146.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes642,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ146.xsd','./msxsdtest/identityConstraint',valid),
STResList643 = [STRes642|STResList642],
- ?line {STRes643,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ147.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes643,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ147.xsd','./msxsdtest/identityConstraint',valid),
STResList644 = [STRes643|STResList643],
- ?line {STRes644,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ148.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes644,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ148.xsd','./msxsdtest/identityConstraint',valid),
STResList645 = [STRes644|STResList644],
- ?line {STRes645,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ149.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes645,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ149.xsd','./msxsdtest/identityConstraint',valid),
STResList646 = [STRes645|STResList645],
- ?line {STRes646,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ150.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes646,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ150.xsd','./msxsdtest/identityConstraint',valid),
STResList647 = [STRes646|STResList646],
- ?line {STRes647,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ151.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes647,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ151.xsd','./msxsdtest/identityConstraint',valid),
STResList648 = [STRes647|STResList647],
- ?line {STRes648,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ152.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes648,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ152.xsd','./msxsdtest/identityConstraint',valid),
STResList649 = [STRes648|STResList648],
- ?line {STRes649,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ153.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes649,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ153.xsd','./msxsdtest/identityConstraint',valid),
STResList650 = [STRes649|STResList649],
- ?line {STRes650,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ154.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes650,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ154.xsd','./msxsdtest/identityConstraint',valid),
STResList651 = [STRes650|STResList650],
- ?line {STRes651,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ155.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes651,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ155.xsd','./msxsdtest/identityConstraint',valid),
STResList652 = [STRes651|STResList651],
- ?line {STRes652,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ156.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes652,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ156.xsd','./msxsdtest/identityConstraint',valid),
STResList653 = [STRes652|STResList652],
- ?line {STRes653,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ157.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes653,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ157.xsd','./msxsdtest/identityConstraint',valid),
STResList654 = [STRes653|STResList653],
- ?line {STRes654,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ158.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes654,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ158.xsd','./msxsdtest/identityConstraint',valid),
STResList655 = [STRes654|STResList654],
- ?line {STRes655,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ159.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes655,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ159.xsd','./msxsdtest/identityConstraint',valid),
STResList656 = [STRes655|STResList655],
- ?line {STRes656,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ160.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes656,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ160.xsd','./msxsdtest/identityConstraint',valid),
STResList657 = [STRes656|STResList656],
- ?line {STRes657,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ161.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes657,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ161.xsd','./msxsdtest/identityConstraint',valid),
STResList658 = [STRes657|STResList657],
- ?line {STRes658,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ162.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes658,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ162.xsd','./msxsdtest/identityConstraint',valid),
STResList659 = [STRes658|STResList658],
- ?line {STRes659,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ163.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes659,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ163.xsd','./msxsdtest/identityConstraint',valid),
STResList660 = [STRes659|STResList659],
- ?line {STRes660,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ164.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes660,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ164.xsd','./msxsdtest/identityConstraint',valid),
STResList661 = [STRes660|STResList660],
- ?line {STRes661,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ165.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes661,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ165.xsd','./msxsdtest/identityConstraint',valid),
STResList662 = [STRes661|STResList661],
- ?line {STRes662,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ166.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes662,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ166.xsd','./msxsdtest/identityConstraint',valid),
STResList663 = [STRes662|STResList662],
- ?line {STRes663,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ167.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes663,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ167.xsd','./msxsdtest/identityConstraint',valid),
STResList664 = [STRes663|STResList663],
- ?line {STRes664,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ168.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes664,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ168.xsd','./msxsdtest/identityConstraint',valid),
STResList665 = [STRes664|STResList664],
- ?line {STRes665,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ169.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes665,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ169.xsd','./msxsdtest/identityConstraint',valid),
STResList666 = [STRes665|STResList665],
- ?line {STRes666,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ170.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes666,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ170.xsd','./msxsdtest/identityConstraint',valid),
STResList667 = [STRes666|STResList666],
- ?line {STRes667,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ171.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes667,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ171.xsd','./msxsdtest/identityConstraint',valid),
STResList668 = [STRes667|STResList667],
- ?line {STRes668,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ172.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes668,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ172.xsd','./msxsdtest/identityConstraint',valid),
STResList669 = [STRes668|STResList668],
- ?line {STRes669,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ173.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes669,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ173.xsd','./msxsdtest/identityConstraint',valid),
STResList670 = [STRes669|STResList669],
- ?line {STRes670,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ174.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes670,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ174.xsd','./msxsdtest/identityConstraint',valid),
STResList671 = [STRes670|STResList670],
- ?line {STRes671,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ175.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes671,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ175.xsd','./msxsdtest/identityConstraint',valid),
STResList672 = [STRes671|STResList671],
- ?line {STRes672,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ176.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes672,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ176.xsd','./msxsdtest/identityConstraint',valid),
STResList673 = [STRes672|STResList672],
- ?line {STRes673,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ177.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes673,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ177.xsd','./msxsdtest/identityConstraint',valid),
STResList674 = [STRes673|STResList673],
- ?line {STRes674,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ178.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes674,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ178.xsd','./msxsdtest/identityConstraint',valid),
STResList675 = [STRes674|STResList674],
- ?line {STRes675,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ179.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes675,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ179.xsd','./msxsdtest/identityConstraint',valid),
STResList676 = [STRes675|STResList675],
- ?line {STRes676,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ180.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes676,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ180.xsd','./msxsdtest/identityConstraint',valid),
STResList677 = [STRes676|STResList676],
- ?line {STRes677,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ181.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes677,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ181.xsd','./msxsdtest/identityConstraint',valid),
STResList678 = [STRes677|STResList677],
- ?line {STRes678,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ182.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes678,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ182.xsd','./msxsdtest/identityConstraint',valid),
STResList679 = [STRes678|STResList678],
- ?line {STRes679,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ183.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes679,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ183.xsd','./msxsdtest/identityConstraint',valid),
STResList680 = [STRes679|STResList679],
- ?line {STRes680,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ184.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes680,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ184.xsd','./msxsdtest/identityConstraint',valid),
STResList681 = [STRes680|STResList680],
- ?line {STRes681,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ185.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes681,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ185.xsd','./msxsdtest/identityConstraint',valid),
STResList682 = [STRes681|STResList681],
- ?line {STRes682,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ186.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes682,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ186.xsd','./msxsdtest/identityConstraint',valid),
STResList683 = [STRes682|STResList682],
- ?line {STRes683,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ187.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes683,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ187.xsd','./msxsdtest/identityConstraint',valid),
STResList684 = [STRes683|STResList683],
- ?line {STRes684,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ188.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes684,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ188.xsd','./msxsdtest/identityConstraint',valid),
STResList685 = [STRes684|STResList684],
- ?line {STRes685,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ189.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes685,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ189.xsd','./msxsdtest/identityConstraint',valid),
STResList686 = [STRes685|STResList685],
- ?line {STRes686,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ190.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes686,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ190.xsd','./msxsdtest/identityConstraint',valid),
STResList687 = [STRes686|STResList686],
- ?line {STRes687,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ191.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes687,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ191.xsd','./msxsdtest/identityConstraint',valid),
STResList688 = [STRes687|STResList687],
- ?line {STRes688,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ192.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes688,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ192.xsd','./msxsdtest/identityConstraint',valid),
STResList689 = [STRes688|STResList688],
- ?line {STRes689,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ193.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes689,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ193.xsd','./msxsdtest/identityConstraint',valid),
STResList690 = [STRes689|STResList689],
- ?line {STRes690,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ194.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes690,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ194.xsd','./msxsdtest/identityConstraint',valid),
STResList691 = [STRes690|STResList690],
- ?line {STRes691,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ195.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes691,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ195.xsd','./msxsdtest/identityConstraint',valid),
STResList692 = [STRes691|STResList691],
- ?line {STRes692,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ196.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes692,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ196.xsd','./msxsdtest/identityConstraint',valid),
STResList693 = [STRes692|STResList692],
- ?line {STRes693,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ197.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes693,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ197.xsd','./msxsdtest/identityConstraint',valid),
STResList694 = [STRes693|STResList693],
- ?line {STRes694,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ198.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes694,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ198.xsd','./msxsdtest/identityConstraint',valid),
STResList695 = [STRes694|STResList694],
- ?line {STRes695,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ199.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes695,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ199.xsd','./msxsdtest/identityConstraint',valid),
STResList696 = [STRes695|STResList695],
- ?line {STRes696,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ200.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes696,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ200.xsd','./msxsdtest/identityConstraint',valid),
STResList697 = [STRes696|STResList696],
- ?line {STRes697,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ201.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes697,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ201.xsd','./msxsdtest/identityConstraint',valid),
STResList698 = [STRes697|STResList697],
- ?line {STRes698,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ202.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes698,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ202.xsd','./msxsdtest/identityConstraint',valid),
STResList699 = [STRes698|STResList698],
- ?line {STRes699,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ203.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes699,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ203.xsd','./msxsdtest/identityConstraint',valid),
STResList700 = [STRes699|STResList699],
- ?line {STRes700,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ204.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes700,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ204.xsd','./msxsdtest/identityConstraint',valid),
STResList701 = [STRes700|STResList700],
- ?line {STRes701,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ205.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes701,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ205.xsd','./msxsdtest/identityConstraint',invalid),
STResList702 = [STRes701|STResList701],
- ?line {STRes702,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ206.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes702,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ206.xsd','./msxsdtest/identityConstraint',invalid),
STResList703 = [STRes702|STResList702],
- ?line {STRes703,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ207.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes703,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ207.xsd','./msxsdtest/identityConstraint',invalid),
STResList704 = [STRes703|STResList703],
- ?line {STRes704,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ208.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes704,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ208.xsd','./msxsdtest/identityConstraint',invalid),
STResList705 = [STRes704|STResList704],
- ?line {STRes705,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ209.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes705,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ209.xsd','./msxsdtest/identityConstraint',invalid),
STResList706 = [STRes705|STResList705],
- ?line {STRes706,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ210.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes706,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ210.xsd','./msxsdtest/identityConstraint',invalid),
STResList707 = [STRes706|STResList706],
- ?line {STRes707,S707} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes707,S707} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK001.xsd','./msxsdtest/identityConstraint',valid),
STResList708 = [STRes707|STResList707],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK001.xml','./msxsdtest/identityConstraint',valid,S707),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK001.xml','./msxsdtest/identityConstraint',valid,S707),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes708,S708} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK002.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes708,S708} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK002.xsd','./msxsdtest/identityConstraint',valid),
STResList709 = [STRes708|STResList708],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK002.xml','./msxsdtest/identityConstraint',valid,S708),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK002.xml','./msxsdtest/identityConstraint',valid,S708),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes709,S709} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes709,S709} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK003.xsd','./msxsdtest/identityConstraint',valid),
STResList710 = [STRes709|STResList709],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK003.xml','./msxsdtest/identityConstraint',invalid,S709),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK003.xml','./msxsdtest/identityConstraint',invalid,S709),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes710,S710} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes710,S710} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK004.xsd','./msxsdtest/identityConstraint',valid),
STResList711 = [STRes710|STResList710],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK004.xml','./msxsdtest/identityConstraint',valid,S710),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK004.xml','./msxsdtest/identityConstraint',valid,S710),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes711,S711} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes711,S711} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK005.xsd','./msxsdtest/identityConstraint',valid),
STResList712 = [STRes711|STResList711],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK005.xml','./msxsdtest/identityConstraint',valid,S711),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK005.xml','./msxsdtest/identityConstraint',valid,S711),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes712,S712} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes712,S712} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK006.xsd','./msxsdtest/identityConstraint',valid),
STResList713 = [STRes712|STResList712],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK006.xml','./msxsdtest/identityConstraint',valid,S712),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK006.xml','./msxsdtest/identityConstraint',valid,S712),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes713,S713} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes713,S713} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK007.xsd','./msxsdtest/identityConstraint',valid),
STResList714 = [STRes713|STResList713],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK007.xml','./msxsdtest/identityConstraint',valid,S713),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK007.xml','./msxsdtest/identityConstraint',valid,S713),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes714,S714} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes714,S714} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK008.xsd','./msxsdtest/identityConstraint',valid),
STResList715 = [STRes714|STResList714],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK008.xml','./msxsdtest/identityConstraint',valid,S714),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK008.xml','./msxsdtest/identityConstraint',valid,S714),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes715,S715} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes715,S715} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK009.xsd','./msxsdtest/identityConstraint',valid),
STResList716 = [STRes715|STResList715],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK009.xml','./msxsdtest/identityConstraint',valid,S715),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK009.xml','./msxsdtest/identityConstraint',valid,S715),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes716,S716} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes716,S716} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK010.xsd','./msxsdtest/identityConstraint',valid),
STResList717 = [STRes716|STResList716],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK010.xml','./msxsdtest/identityConstraint',valid,S716),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK010.xml','./msxsdtest/identityConstraint',valid,S716),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes717,S717} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes717,S717} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK011.xsd','./msxsdtest/identityConstraint',valid),
STResList718 = [STRes717|STResList717],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK011.xml','./msxsdtest/identityConstraint',valid,S717),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK011.xml','./msxsdtest/identityConstraint',valid,S717),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes718,S718} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes718,S718} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK012.xsd','./msxsdtest/identityConstraint',valid),
STResList719 = [STRes718|STResList718],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK012.xml','./msxsdtest/identityConstraint',invalid,S718),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK012.xml','./msxsdtest/identityConstraint',invalid,S718),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes719,S719} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes719,S719} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK013.xsd','./msxsdtest/identityConstraint',valid),
STResList720 = [STRes719|STResList719],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK013.xml','./msxsdtest/identityConstraint',valid,S719),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK013.xml','./msxsdtest/identityConstraint',valid,S719),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes720,S720} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes720,S720} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK014.xsd','./msxsdtest/identityConstraint',valid),
STResList721 = [STRes720|STResList720],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK014.xml','./msxsdtest/identityConstraint',valid,S720),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK014.xml','./msxsdtest/identityConstraint',valid,S720),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes721,S721} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes721,S721} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK015.xsd','./msxsdtest/identityConstraint',valid),
STResList722 = [STRes721|STResList721],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK015.xml','./msxsdtest/identityConstraint',valid,S721),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK015.xml','./msxsdtest/identityConstraint',valid,S721),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes722,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes722,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK016.xsd','./msxsdtest/identityConstraint',invalid),
STResList723 = [STRes722|STResList722],
- ?line {STRes723,S723} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes723,S723} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK017.xsd','./msxsdtest/identityConstraint',valid),
STResList724 = [STRes723|STResList723],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK017.xml','./msxsdtest/identityConstraint',valid,S723),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK017.xml','./msxsdtest/identityConstraint',valid,S723),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes724,S724} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes724,S724} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL001.xsd','./msxsdtest/identityConstraint',valid),
STResList725 = [STRes724|STResList724],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL001.xml','./msxsdtest/identityConstraint',valid,S724),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL001.xml','./msxsdtest/identityConstraint',valid,S724),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes725,S725} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL002.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes725,S725} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL002.xsd','./msxsdtest/identityConstraint',valid),
STResList726 = [STRes725|STResList725],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL002.xml','./msxsdtest/identityConstraint',invalid,S725),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL002.xml','./msxsdtest/identityConstraint',invalid,S725),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes726,S726} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes726,S726} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL003.xsd','./msxsdtest/identityConstraint',valid),
STResList727 = [STRes726|STResList726],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL003.xml','./msxsdtest/identityConstraint',valid,S726),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL003.xml','./msxsdtest/identityConstraint',valid,S726),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes727,S727} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes727,S727} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL004.xsd','./msxsdtest/identityConstraint',valid),
STResList728 = [STRes727|STResList727],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL004.xml','./msxsdtest/identityConstraint',valid,S727),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL004.xml','./msxsdtest/identityConstraint',valid,S727),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes728,S728} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes728,S728} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL005.xsd','./msxsdtest/identityConstraint',valid),
STResList729 = [STRes728|STResList728],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL005.xml','./msxsdtest/identityConstraint',valid,S728),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL005.xml','./msxsdtest/identityConstraint',valid,S728),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes729,S729} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes729,S729} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL006.xsd','./msxsdtest/identityConstraint',valid),
STResList730 = [STRes729|STResList729],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL006.xml','./msxsdtest/identityConstraint',invalid,S729),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL006.xml','./msxsdtest/identityConstraint',invalid,S729),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes730,S730} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes730,S730} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL007.xsd','./msxsdtest/identityConstraint',valid),
STResList731 = [STRes730|STResList730],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL007.xml','./msxsdtest/identityConstraint',invalid,S730),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL007.xml','./msxsdtest/identityConstraint',invalid,S730),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes731,S731} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes731,S731} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL008.xsd','./msxsdtest/identityConstraint',valid),
STResList732 = [STRes731|STResList731],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL008.xml','./msxsdtest/identityConstraint',valid,S731),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL008.xml','./msxsdtest/identityConstraint',valid,S731),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes732,S732} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes732,S732} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL009.xsd','./msxsdtest/identityConstraint',valid),
STResList733 = [STRes732|STResList732],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL009.xml','./msxsdtest/identityConstraint',valid,S732),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL009.xml','./msxsdtest/identityConstraint',valid,S732),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes733,S733} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes733,S733} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL010.xsd','./msxsdtest/identityConstraint',valid),
STResList734 = [STRes733|STResList733],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL010.xml','./msxsdtest/identityConstraint',valid,S733),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL010.xml','./msxsdtest/identityConstraint',valid,S733),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes734,S734} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes734,S734} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL011.xsd','./msxsdtest/identityConstraint',valid),
STResList735 = [STRes734|STResList734],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL011.xml','./msxsdtest/identityConstraint',invalid,S734),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL011.xml','./msxsdtest/identityConstraint',invalid,S734),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes735,S735} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes735,S735} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL012.xsd','./msxsdtest/identityConstraint',valid),
STResList736 = [STRes735|STResList735],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL012.xml','./msxsdtest/identityConstraint',invalid,S735),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL012.xml','./msxsdtest/identityConstraint',invalid,S735),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes736,S736} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes736,S736} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL013.xsd','./msxsdtest/identityConstraint',valid),
STResList737 = [STRes736|STResList736],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL013.xml','./msxsdtest/identityConstraint',valid,S736),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL013.xml','./msxsdtest/identityConstraint',valid,S736),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes737,S737} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes737,S737} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL014.xsd','./msxsdtest/identityConstraint',valid),
STResList738 = [STRes737|STResList737],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL014.xml','./msxsdtest/identityConstraint',valid,S737),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL014.xml','./msxsdtest/identityConstraint',valid,S737),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes738,S738} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes738,S738} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL015.xsd','./msxsdtest/identityConstraint',valid),
STResList739 = [STRes738|STResList738],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL015.xml','./msxsdtest/identityConstraint',invalid,S738),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL015.xml','./msxsdtest/identityConstraint',invalid,S738),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes739,S739} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes739,S739} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL016.xsd','./msxsdtest/identityConstraint',valid),
STResList740 = [STRes739|STResList739],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL016.xml','./msxsdtest/identityConstraint',valid,S739),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL016.xml','./msxsdtest/identityConstraint',valid,S739),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes740,S740} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes740,S740} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL017.xsd','./msxsdtest/identityConstraint',valid),
STResList741 = [STRes740|STResList740],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL017.xml','./msxsdtest/identityConstraint',valid,S740),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL017.xml','./msxsdtest/identityConstraint',valid,S740),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes741,S741} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes741,S741} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL018.xsd','./msxsdtest/identityConstraint',valid),
STResList742 = [STRes741|STResList741],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL018.xml','./msxsdtest/identityConstraint',valid,S741),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL018.xml','./msxsdtest/identityConstraint',valid,S741),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes742,S742} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes742,S742} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL019.xsd','./msxsdtest/identityConstraint',valid),
STResList743 = [STRes742|STResList742],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL019.xml','./msxsdtest/identityConstraint',invalid,S742),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL019.xml','./msxsdtest/identityConstraint',invalid,S742),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes743,S743} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes743,S743} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL020.xsd','./msxsdtest/identityConstraint',valid),
STResList744 = [STRes743|STResList743],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL020.xml','./msxsdtest/identityConstraint',valid,S743),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL020.xml','./msxsdtest/identityConstraint',valid,S743),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes744,S744} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes744,S744} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL021.xsd','./msxsdtest/identityConstraint',valid),
STResList745 = [STRes744|STResList744],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL021.xml','./msxsdtest/identityConstraint',valid,S744),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL021.xml','./msxsdtest/identityConstraint',valid,S744),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes745,S745} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes745,S745} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL022.xsd','./msxsdtest/identityConstraint',valid),
STResList746 = [STRes745|STResList745],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL022.xml','./msxsdtest/identityConstraint',invalid,S745),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL022.xml','./msxsdtest/identityConstraint',invalid,S745),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes746,S746} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes746,S746} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL023.xsd','./msxsdtest/identityConstraint',valid),
STResList747 = [STRes746|STResList746],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL023.xml','./msxsdtest/identityConstraint',valid,S746),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL023.xml','./msxsdtest/identityConstraint',valid,S746),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes747,S747} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes747,S747} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL024.xsd','./msxsdtest/identityConstraint',valid),
STResList748 = [STRes747|STResList747],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL024.xml','./msxsdtest/identityConstraint',valid,S747),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL024.xml','./msxsdtest/identityConstraint',valid,S747),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes748,S748} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes748,S748} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL025.xsd','./msxsdtest/identityConstraint',valid),
STResList749 = [STRes748|STResList748],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL025.xml','./msxsdtest/identityConstraint',invalid,S748),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL025.xml','./msxsdtest/identityConstraint',invalid,S748),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes749,S749} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes749,S749} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL026.xsd','./msxsdtest/identityConstraint',valid),
STResList750 = [STRes749|STResList749],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL026.xml','./msxsdtest/identityConstraint',valid,S749),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL026.xml','./msxsdtest/identityConstraint',valid,S749),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes750,S750} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes750,S750} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL027.xsd','./msxsdtest/identityConstraint',valid),
STResList751 = [STRes750|STResList750],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL027.xml','./msxsdtest/identityConstraint',invalid,S750),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL027.xml','./msxsdtest/identityConstraint',invalid,S750),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes751,S751} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes751,S751} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL028.xsd','./msxsdtest/identityConstraint',valid),
STResList752 = [STRes751|STResList751],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL028.xml','./msxsdtest/identityConstraint',valid,S751),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL028.xml','./msxsdtest/identityConstraint',valid,S751),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes752,S752} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes752,S752} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL029.xsd','./msxsdtest/identityConstraint',valid),
STResList753 = [STRes752|STResList752],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL029.xml','./msxsdtest/identityConstraint',valid,S752),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL029.xml','./msxsdtest/identityConstraint',valid,S752),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes753,S753} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes753,S753} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL030.xsd','./msxsdtest/identityConstraint',valid),
STResList754 = [STRes753|STResList753],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL030.xml','./msxsdtest/identityConstraint',valid,S753),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL030.xml','./msxsdtest/identityConstraint',valid,S753),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes754,S754} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes754,S754} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL031.xsd','./msxsdtest/identityConstraint',valid),
STResList755 = [STRes754|STResList754],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL031.xml','./msxsdtest/identityConstraint',invalid,S754),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL031.xml','./msxsdtest/identityConstraint',invalid,S754),
ITResList140 = [ITRes139|ITResList139],
- ?line {STRes755,S755} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL032.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes755,S755} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL032.xsd','./msxsdtest/identityConstraint',valid),
STResList756 = [STRes755|STResList755],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL032.xml','./msxsdtest/identityConstraint',invalid,S755),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL032.xml','./msxsdtest/identityConstraint',invalid,S755),
ITResList141 = [ITRes140|ITResList140],
- ?line {STRes756,S756} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes756,S756} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL033.xsd','./msxsdtest/identityConstraint',valid),
STResList757 = [STRes756|STResList756],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL033.xml','./msxsdtest/identityConstraint',valid,S756),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL033.xml','./msxsdtest/identityConstraint',valid,S756),
ITResList142 = [ITRes141|ITResList141],
- ?line {STRes757,S757} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes757,S757} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL034.xsd','./msxsdtest/identityConstraint',valid),
STResList758 = [STRes757|STResList757],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL034.xml','./msxsdtest/identityConstraint',valid,S757),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL034.xml','./msxsdtest/identityConstraint',valid,S757),
ITResList143 = [ITRes142|ITResList142],
- ?line {STRes758,S758} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes758,S758} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL035.xsd','./msxsdtest/identityConstraint',valid),
STResList759 = [STRes758|STResList758],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL035.xml','./msxsdtest/identityConstraint',valid,S758),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL035.xml','./msxsdtest/identityConstraint',valid,S758),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes759,S759} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes759,S759} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL036.xsd','./msxsdtest/identityConstraint',valid),
STResList760 = [STRes759|STResList759],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL036.xml','./msxsdtest/identityConstraint',invalid,S759),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL036.xml','./msxsdtest/identityConstraint',invalid,S759),
ITResList145 = [ITRes144|ITResList144],
- ?line {STRes760,S760} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL037.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes760,S760} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL037.xsd','./msxsdtest/identityConstraint',valid),
STResList761 = [STRes760|STResList760],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL037.xml','./msxsdtest/identityConstraint',invalid,S760),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL037.xml','./msxsdtest/identityConstraint',invalid,S760),
ITResList146 = [ITRes145|ITResList145],
- ?line {STRes761,S761} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL038.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes761,S761} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL038.xsd','./msxsdtest/identityConstraint',valid),
STResList762 = [STRes761|STResList761],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL038.xml','./msxsdtest/identityConstraint',valid,S761),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL038.xml','./msxsdtest/identityConstraint',valid,S761),
ITResList147 = [ITRes146|ITResList146],
- ?line {STRes762,S762} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL039.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes762,S762} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL039.xsd','./msxsdtest/identityConstraint',valid),
STResList763 = [STRes762|STResList762],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL039.xml','./msxsdtest/identityConstraint',valid,S762),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL039.xml','./msxsdtest/identityConstraint',valid,S762),
ITResList148 = [ITRes147|ITResList147],
- ?line {STRes763,S763} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes763,S763} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL040.xsd','./msxsdtest/identityConstraint',valid),
STResList764 = [STRes763|STResList763],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL040.xml','./msxsdtest/identityConstraint',invalid,S763),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL040.xml','./msxsdtest/identityConstraint',invalid,S763),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes764,S764} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes764,S764} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL041.xsd','./msxsdtest/identityConstraint',valid),
STResList765 = [STRes764|STResList764],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL041.xml','./msxsdtest/identityConstraint',valid,S764),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL041.xml','./msxsdtest/identityConstraint',valid,S764),
ITResList150 = [ITRes149|ITResList149],
- ?line {STRes765,S765} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL042.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes765,S765} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL042.xsd','./msxsdtest/identityConstraint',valid),
STResList766 = [STRes765|STResList765],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL042.xml','./msxsdtest/identityConstraint',valid,S765),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL042.xml','./msxsdtest/identityConstraint',valid,S765),
ITResList151 = [ITRes150|ITResList150],
- ?line {STRes766,S766} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL043.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes766,S766} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL043.xsd','./msxsdtest/identityConstraint',valid),
STResList767 = [STRes766|STResList766],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL043.xml','./msxsdtest/identityConstraint',valid,S766),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL043.xml','./msxsdtest/identityConstraint',valid,S766),
ITResList152 = [ITRes151|ITResList151],
- ?line {STRes767,S767} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL044.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes767,S767} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL044.xsd','./msxsdtest/identityConstraint',valid),
STResList768 = [STRes767|STResList767],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL044.xml','./msxsdtest/identityConstraint',invalid,S767),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL044.xml','./msxsdtest/identityConstraint',invalid,S767),
ITResList153 = [ITRes152|ITResList152],
- ?line {STRes768,S768} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes768,S768} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL045.xsd','./msxsdtest/identityConstraint',valid),
STResList769 = [STRes768|STResList768],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL045.xml','./msxsdtest/identityConstraint',valid,S768),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL045.xml','./msxsdtest/identityConstraint',valid,S768),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes769,S769} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL046.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes769,S769} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL046.xsd','./msxsdtest/identityConstraint',valid),
STResList770 = [STRes769|STResList769],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL046.xml','./msxsdtest/identityConstraint',valid,S769),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL046.xml','./msxsdtest/identityConstraint',valid,S769),
ITResList155 = [ITRes154|ITResList154],
- ?line {STRes770,S770} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL047.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes770,S770} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL047.xsd','./msxsdtest/identityConstraint',valid),
STResList771 = [STRes770|STResList770],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL047.xml','./msxsdtest/identityConstraint',invalid,S770),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL047.xml','./msxsdtest/identityConstraint',invalid,S770),
ITResList156 = [ITRes155|ITResList155],
- ?line {STRes771,S771} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL048.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes771,S771} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL048.xsd','./msxsdtest/identityConstraint',valid),
STResList772 = [STRes771|STResList771],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL048.xml','./msxsdtest/identityConstraint',valid,S771),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL048.xml','./msxsdtest/identityConstraint',valid,S771),
ITResList157 = [ITRes156|ITResList156],
- ?line {STRes772,S772} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL049.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes772,S772} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL049.xsd','./msxsdtest/identityConstraint',valid),
STResList773 = [STRes772|STResList772],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL049.xml','./msxsdtest/identityConstraint',valid,S772),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL049.xml','./msxsdtest/identityConstraint',valid,S772),
ITResList158 = [ITRes157|ITResList157],
- ?line {STRes773,S773} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL050.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes773,S773} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL050.xsd','./msxsdtest/identityConstraint',valid),
STResList774 = [STRes773|STResList773],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL050.xml','./msxsdtest/identityConstraint',invalid,S773),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL050.xml','./msxsdtest/identityConstraint',invalid,S773),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes774,S774} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL051.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes774,S774} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL051.xsd','./msxsdtest/identityConstraint',valid),
STResList775 = [STRes774|STResList774],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL051.xml','./msxsdtest/identityConstraint',valid,S774),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL051.xml','./msxsdtest/identityConstraint',valid,S774),
ITResList160 = [ITRes159|ITResList159],
- ?line {STRes775,S775} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL052.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes775,S775} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL052.xsd','./msxsdtest/identityConstraint',valid),
STResList776 = [STRes775|STResList775],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL052.xml','./msxsdtest/identityConstraint',invalid,S775),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL052.xml','./msxsdtest/identityConstraint',invalid,S775),
ITResList161 = [ITRes160|ITResList160],
- ?line {STRes776,S776} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL053.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes776,S776} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL053.xsd','./msxsdtest/identityConstraint',valid),
STResList777 = [STRes776|STResList776],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL053.xml','./msxsdtest/identityConstraint',valid,S776),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL053.xml','./msxsdtest/identityConstraint',valid,S776),
ITResList162 = [ITRes161|ITResList161],
- ?line {STRes777,S777} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL054.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes777,S777} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL054.xsd','./msxsdtest/identityConstraint',valid),
STResList778 = [STRes777|STResList777],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL054.xml','./msxsdtest/identityConstraint',valid,S777),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL054.xml','./msxsdtest/identityConstraint',valid,S777),
ITResList163 = [ITRes162|ITResList162],
- ?line {STRes778,S778} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL055.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes778,S778} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL055.xsd','./msxsdtest/identityConstraint',valid),
STResList779 = [STRes778|STResList778],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL055.xml','./msxsdtest/identityConstraint',valid,S778),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL055.xml','./msxsdtest/identityConstraint',valid,S778),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes779,S779} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL056.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes779,S779} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL056.xsd','./msxsdtest/identityConstraint',valid),
STResList780 = [STRes779|STResList779],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL056.xml','./msxsdtest/identityConstraint',invalid,S779),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL056.xml','./msxsdtest/identityConstraint',invalid,S779),
ITResList165 = [ITRes164|ITResList164],
- ?line {STRes780,S780} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL057.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes780,S780} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL057.xsd','./msxsdtest/identityConstraint',valid),
STResList781 = [STRes780|STResList780],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL057.xml','./msxsdtest/identityConstraint',invalid,S780),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL057.xml','./msxsdtest/identityConstraint',invalid,S780),
ITResList166 = [ITRes165|ITResList165],
- ?line {STRes781,S781} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL058.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes781,S781} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL058.xsd','./msxsdtest/identityConstraint',valid),
STResList782 = [STRes781|STResList781],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL058.xml','./msxsdtest/identityConstraint',valid,S781),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL058.xml','./msxsdtest/identityConstraint',valid,S781),
ITResList167 = [ITRes166|ITResList166],
- ?line {STRes782,S782} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL059.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes782,S782} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL059.xsd','./msxsdtest/identityConstraint',valid),
STResList783 = [STRes782|STResList782],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL059.xml','./msxsdtest/identityConstraint',valid,S782),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL059.xml','./msxsdtest/identityConstraint',valid,S782),
ITResList168 = [ITRes167|ITResList167],
- ?line {STRes783,S783} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL060.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes783,S783} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL060.xsd','./msxsdtest/identityConstraint',valid),
STResList784 = [STRes783|STResList783],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL060.xml','./msxsdtest/identityConstraint',valid,S783),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL060.xml','./msxsdtest/identityConstraint',valid,S783),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes784,S784} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL061.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes784,S784} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL061.xsd','./msxsdtest/identityConstraint',valid),
STResList785 = [STRes784|STResList784],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL061.xml','./msxsdtest/identityConstraint',invalid,S784),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL061.xml','./msxsdtest/identityConstraint',invalid,S784),
ITResList170 = [ITRes169|ITResList169],
- ?line {STRes785,S785} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL062.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes785,S785} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL062.xsd','./msxsdtest/identityConstraint',valid),
STResList786 = [STRes785|STResList785],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL062.xml','./msxsdtest/identityConstraint',invalid,S785),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL062.xml','./msxsdtest/identityConstraint',invalid,S785),
ITResList171 = [ITRes170|ITResList170],
- ?line {STRes786,S786} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL063.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes786,S786} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL063.xsd','./msxsdtest/identityConstraint',valid),
STResList787 = [STRes786|STResList786],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL063.xml','./msxsdtest/identityConstraint',valid,S786),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL063.xml','./msxsdtest/identityConstraint',valid,S786),
ITResList172 = [ITRes171|ITResList171],
- ?line {STRes787,S787} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL064.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes787,S787} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL064.xsd','./msxsdtest/identityConstraint',valid),
STResList788 = [STRes787|STResList787],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL064.xml','./msxsdtest/identityConstraint',valid,S787),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL064.xml','./msxsdtest/identityConstraint',valid,S787),
ITResList173 = [ITRes172|ITResList172],
- ?line {STRes788,S788} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL065.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes788,S788} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL065.xsd','./msxsdtest/identityConstraint',valid),
STResList789 = [STRes788|STResList788],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL065.xml','./msxsdtest/identityConstraint',invalid,S788),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL065.xml','./msxsdtest/identityConstraint',invalid,S788),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes789,S789} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL066.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes789,S789} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL066.xsd','./msxsdtest/identityConstraint',valid),
STResList790 = [STRes789|STResList789],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL066.xml','./msxsdtest/identityConstraint',valid,S789),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL066.xml','./msxsdtest/identityConstraint',valid,S789),
ITResList175 = [ITRes174|ITResList174],
- ?line {STRes790,S790} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL067.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes790,S790} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL067.xsd','./msxsdtest/identityConstraint',valid),
STResList791 = [STRes790|STResList790],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL067.xml','./msxsdtest/identityConstraint',valid,S790),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL067.xml','./msxsdtest/identityConstraint',valid,S790),
ITResList176 = [ITRes175|ITResList175],
- ?line {STRes791,S791} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL068.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes791,S791} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL068.xsd','./msxsdtest/identityConstraint',valid),
STResList792 = [STRes791|STResList791],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL068.xml','./msxsdtest/identityConstraint',valid,S791),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL068.xml','./msxsdtest/identityConstraint',valid,S791),
ITResList177 = [ITRes176|ITResList176],
- ?line {STRes792,S792} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL069.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes792,S792} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL069.xsd','./msxsdtest/identityConstraint',valid),
STResList793 = [STRes792|STResList792],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL069.xml','./msxsdtest/identityConstraint',invalid,S792),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL069.xml','./msxsdtest/identityConstraint',invalid,S792),
ITResList178 = [ITRes177|ITResList177],
- ?line {STRes793,S793} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL070.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes793,S793} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL070.xsd','./msxsdtest/identityConstraint',valid),
STResList794 = [STRes793|STResList793],
- ?line ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL070.xml','./msxsdtest/identityConstraint',valid,S793),
+ ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL070.xml','./msxsdtest/identityConstraint',valid,S793),
ITResList179 = [ITRes178|ITResList178],
- ?line {STRes794,S794} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL071.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes794,S794} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL071.xsd','./msxsdtest/identityConstraint',valid),
STResList795 = [STRes794|STResList794],
- ?line ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL071.xml','./msxsdtest/identityConstraint',valid,S794),
+ ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL071.xml','./msxsdtest/identityConstraint',valid,S794),
ITResList180 = [ITRes179|ITResList179],
- ?line {STRes795,S795} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL072.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes795,S795} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL072.xsd','./msxsdtest/identityConstraint',valid),
STResList796 = [STRes795|STResList795],
- ?line ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL072.xml','./msxsdtest/identityConstraint',invalid,S795),
+ ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL072.xml','./msxsdtest/identityConstraint',invalid,S795),
ITResList181 = [ITRes180|ITResList180],
- ?line {STRes796,S796} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL073.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes796,S796} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL073.xsd','./msxsdtest/identityConstraint',valid),
STResList797 = [STRes796|STResList796],
- ?line ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL073.xml','./msxsdtest/identityConstraint',valid,S796),
+ ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL073.xml','./msxsdtest/identityConstraint',valid,S796),
ITResList182 = [ITRes181|ITResList181],
- ?line {STRes797,S797} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL074.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes797,S797} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL074.xsd','./msxsdtest/identityConstraint',valid),
STResList798 = [STRes797|STResList797],
- ?line ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL074.xml','./msxsdtest/identityConstraint',valid,S797),
+ ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL074.xml','./msxsdtest/identityConstraint',valid,S797),
ITResList183 = [ITRes182|ITResList182],
- ?line {STRes798,S798} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL075.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes798,S798} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL075.xsd','./msxsdtest/identityConstraint',valid),
STResList799 = [STRes798|STResList798],
- ?line ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL075.xml','./msxsdtest/identityConstraint',invalid,S798),
+ ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL075.xml','./msxsdtest/identityConstraint',invalid,S798),
ITResList184 = [ITRes183|ITResList183],
- ?line {STRes799,S799} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL076.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes799,S799} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL076.xsd','./msxsdtest/identityConstraint',valid),
STResList800 = [STRes799|STResList799],
- ?line ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL076.xml','./msxsdtest/identityConstraint',valid,S799),
+ ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL076.xml','./msxsdtest/identityConstraint',valid,S799),
ITResList185 = [ITRes184|ITResList184],
- ?line {STRes800,S800} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL077.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes800,S800} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL077.xsd','./msxsdtest/identityConstraint',valid),
STResList801 = [STRes800|STResList800],
- ?line ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL077.xml','./msxsdtest/identityConstraint',valid,S800),
+ ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL077.xml','./msxsdtest/identityConstraint',valid,S800),
ITResList186 = [ITRes185|ITResList185],
- ?line {STRes801,S801} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL078.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes801,S801} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL078.xsd','./msxsdtest/identityConstraint',valid),
STResList802 = [STRes801|STResList801],
- ?line ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL078.xml','./msxsdtest/identityConstraint',valid,S801),
+ ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL078.xml','./msxsdtest/identityConstraint',valid,S801),
ITResList187 = [ITRes186|ITResList186],
- ?line {STRes802,S802} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL079.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes802,S802} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL079.xsd','./msxsdtest/identityConstraint',valid),
STResList803 = [STRes802|STResList802],
- ?line ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL079.xml','./msxsdtest/identityConstraint',invalid,S802),
+ ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL079.xml','./msxsdtest/identityConstraint',invalid,S802),
ITResList188 = [ITRes187|ITResList187],
- ?line {STRes803,S803} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL080.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes803,S803} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL080.xsd','./msxsdtest/identityConstraint',valid),
STResList804 = [STRes803|STResList803],
- ?line ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL080.xml','./msxsdtest/identityConstraint',invalid,S803),
+ ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL080.xml','./msxsdtest/identityConstraint',invalid,S803),
ITResList189 = [ITRes188|ITResList188],
- ?line {STRes804,S804} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL081.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes804,S804} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL081.xsd','./msxsdtest/identityConstraint',valid),
STResList805 = [STRes804|STResList804],
- ?line ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL081.xml','./msxsdtest/identityConstraint',invalid,S804),
+ ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL081.xml','./msxsdtest/identityConstraint',invalid,S804),
ITResList190 = [ITRes189|ITResList189],
- ?line {STRes805,S805} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL082.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes805,S805} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL082.xsd','./msxsdtest/identityConstraint',valid),
STResList806 = [STRes805|STResList805],
- ?line ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL082.xml','./msxsdtest/identityConstraint',valid,S805),
+ ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL082.xml','./msxsdtest/identityConstraint',valid,S805),
ITResList191 = [ITRes190|ITResList190],
- ?line {STRes806,S806} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL083.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes806,S806} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL083.xsd','./msxsdtest/identityConstraint',valid),
STResList807 = [STRes806|STResList806],
- ?line ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL083.xml','./msxsdtest/identityConstraint',invalid,S806),
+ ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL083.xml','./msxsdtest/identityConstraint',invalid,S806),
ITResList192 = [ITRes191|ITResList191],
- ?line {STRes807,S807} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL084.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes807,S807} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL084.xsd','./msxsdtest/identityConstraint',valid),
STResList808 = [STRes807|STResList807],
- ?line ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL084.xml','./msxsdtest/identityConstraint',valid,S807),
+ ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL084.xml','./msxsdtest/identityConstraint',valid,S807),
ITResList193 = [ITRes192|ITResList192],
- ?line {STRes808,S808} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL085.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes808,S808} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL085.xsd','./msxsdtest/identityConstraint',valid),
STResList809 = [STRes808|STResList808],
- ?line ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL085.xml','./msxsdtest/identityConstraint',invalid,S808),
+ ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL085.xml','./msxsdtest/identityConstraint',invalid,S808),
ITResList194 = [ITRes193|ITResList193],
- ?line {STRes809,S809} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL086.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes809,S809} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL086.xsd','./msxsdtest/identityConstraint',valid),
STResList810 = [STRes809|STResList809],
- ?line ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL086.xml','./msxsdtest/identityConstraint',valid,S809),
+ ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL086.xml','./msxsdtest/identityConstraint',valid,S809),
ITResList195 = [ITRes194|ITResList194],
- ?line {STRes810,S810} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL087.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes810,S810} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL087.xsd','./msxsdtest/identityConstraint',valid),
STResList811 = [STRes810|STResList810],
- ?line ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL087.xml','./msxsdtest/identityConstraint',invalid,S810),
+ ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL087.xml','./msxsdtest/identityConstraint',invalid,S810),
ITResList196 = [ITRes195|ITResList195],
- ?line {STRes811,S811} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL088.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes811,S811} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL088.xsd','./msxsdtest/identityConstraint',valid),
STResList812 = [STRes811|STResList811],
- ?line ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL088.xml','./msxsdtest/identityConstraint',valid,S811),
+ ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL088.xml','./msxsdtest/identityConstraint',valid,S811),
ITResList197 = [ITRes196|ITResList196],
- ?line {STRes812,S812} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL089.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes812,S812} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL089.xsd','./msxsdtest/identityConstraint',valid),
STResList813 = [STRes812|STResList812],
- ?line ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL089.xml','./msxsdtest/identityConstraint',invalid,S812),
+ ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL089.xml','./msxsdtest/identityConstraint',invalid,S812),
ITResList198 = [ITRes197|ITResList197],
- ?line {STRes813,S813} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL090.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes813,S813} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL090.xsd','./msxsdtest/identityConstraint',valid),
STResList814 = [STRes813|STResList813],
- ?line ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL090.xml','./msxsdtest/identityConstraint',valid,S813),
+ ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL090.xml','./msxsdtest/identityConstraint',valid,S813),
ITResList199 = [ITRes198|ITResList198],
- ?line {STRes814,S814} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL091.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes814,S814} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL091.xsd','./msxsdtest/identityConstraint',valid),
STResList815 = [STRes814|STResList814],
- ?line ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL091.xml','./msxsdtest/identityConstraint',invalid,S814),
+ ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL091.xml','./msxsdtest/identityConstraint',invalid,S814),
ITResList200 = [ITRes199|ITResList199],
- ?line {STRes815,S815} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL092.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes815,S815} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL092.xsd','./msxsdtest/identityConstraint',valid),
STResList816 = [STRes815|STResList815],
- ?line ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL092.xml','./msxsdtest/identityConstraint',valid,S815),
+ ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL092.xml','./msxsdtest/identityConstraint',valid,S815),
ITResList201 = [ITRes200|ITResList200],
- ?line {STRes816,S816} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL093.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes816,S816} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL093.xsd','./msxsdtest/identityConstraint',valid),
STResList817 = [STRes816|STResList816],
- ?line ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL093.xml','./msxsdtest/identityConstraint',invalid,S816),
+ ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL093.xml','./msxsdtest/identityConstraint',invalid,S816),
ITResList202 = [ITRes201|ITResList201],
- ?line {STRes817,S817} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL094.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes817,S817} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL094.xsd','./msxsdtest/identityConstraint',valid),
STResList818 = [STRes817|STResList817],
- ?line ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL094.xml','./msxsdtest/identityConstraint',valid,S817),
+ ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL094.xml','./msxsdtest/identityConstraint',valid,S817),
ITResList203 = [ITRes202|ITResList202],
- ?line {STRes818,S818} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL095.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes818,S818} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL095.xsd','./msxsdtest/identityConstraint',valid),
STResList819 = [STRes818|STResList818],
- ?line ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL095.xml','./msxsdtest/identityConstraint',invalid,S818),
+ ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL095.xml','./msxsdtest/identityConstraint',invalid,S818),
ITResList204 = [ITRes203|ITResList203],
- ?line {STRes819,S819} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL096.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes819,S819} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL096.xsd','./msxsdtest/identityConstraint',valid),
STResList820 = [STRes819|STResList819],
- ?line ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL096.xml','./msxsdtest/identityConstraint',valid,S819),
+ ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL096.xml','./msxsdtest/identityConstraint',valid,S819),
ITResList205 = [ITRes204|ITResList204],
- ?line {STRes820,S820} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL097.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes820,S820} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL097.xsd','./msxsdtest/identityConstraint',valid),
STResList821 = [STRes820|STResList820],
- ?line ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL097.xml','./msxsdtest/identityConstraint',invalid,S820),
+ ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL097.xml','./msxsdtest/identityConstraint',invalid,S820),
ITResList206 = [ITRes205|ITResList205],
- ?line {STRes821,S821} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL098.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes821,S821} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL098.xsd','./msxsdtest/identityConstraint',valid),
STResList822 = [STRes821|STResList821],
- ?line ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL098.xml','./msxsdtest/identityConstraint',valid,S821),
+ ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL098.xml','./msxsdtest/identityConstraint',valid,S821),
ITResList207 = [ITRes206|ITResList206],
- ?line {STRes822,S822} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL099.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes822,S822} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL099.xsd','./msxsdtest/identityConstraint',valid),
STResList823 = [STRes822|STResList822],
- ?line ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL099.xml','./msxsdtest/identityConstraint',invalid,S822),
+ ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL099.xml','./msxsdtest/identityConstraint',invalid,S822),
ITResList208 = [ITRes207|ITResList207],
- ?line {STRes823,S823} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL100.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes823,S823} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL100.xsd','./msxsdtest/identityConstraint',valid),
STResList824 = [STRes823|STResList823],
- ?line ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL100.xml','./msxsdtest/identityConstraint',valid,S823),
+ ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL100.xml','./msxsdtest/identityConstraint',valid,S823),
ITResList209 = [ITRes208|ITResList208],
- ?line {STRes824,S824} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL101.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes824,S824} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL101.xsd','./msxsdtest/identityConstraint',valid),
STResList825 = [STRes824|STResList824],
- ?line ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL101.xml','./msxsdtest/identityConstraint',invalid,S824),
+ ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL101.xml','./msxsdtest/identityConstraint',invalid,S824),
ITResList210 = [ITRes209|ITResList209],
- ?line {STRes825,S825} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL102.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes825,S825} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL102.xsd','./msxsdtest/identityConstraint',valid),
STResList826 = [STRes825|STResList825],
- ?line ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL102.xml','./msxsdtest/identityConstraint',valid,S825),
+ ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL102.xml','./msxsdtest/identityConstraint',valid,S825),
ITResList211 = [ITRes210|ITResList210],
- ?line {STRes826,S826} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL103.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes826,S826} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL103.xsd','./msxsdtest/identityConstraint',valid),
STResList827 = [STRes826|STResList826],
- ?line ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL103.xml','./msxsdtest/identityConstraint',invalid,S826),
+ ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL103.xml','./msxsdtest/identityConstraint',invalid,S826),
ITResList212 = [ITRes211|ITResList211],
- ?line {STRes827,S827} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes827,S827} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ001.xsd','./msxsdtest/identityConstraint',valid),
STResList828 = [STRes827|STResList827],
- ?line ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ001.xml','./msxsdtest/identityConstraint',invalid,S827),
+ ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ001.xml','./msxsdtest/identityConstraint',invalid,S827),
ITResList213 = [ITRes212|ITResList212],
- ?line {STRes828,S828} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ002.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes828,S828} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ002.xsd','./msxsdtest/identityConstraint',valid),
STResList829 = [STRes828|STResList828],
- ?line ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ002.xml','./msxsdtest/identityConstraint',invalid,S828),
+ ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ002.xml','./msxsdtest/identityConstraint',invalid,S828),
ITResList214 = [ITRes213|ITResList213],
- ?line {STRes829,S829} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes829,S829} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ004.xsd','./msxsdtest/identityConstraint',valid),
STResList830 = [STRes829|STResList829],
- ?line ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ004.xml','./msxsdtest/identityConstraint',invalid,S829),
+ ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ004.xml','./msxsdtest/identityConstraint',invalid,S829),
ITResList215 = [ITRes214|ITResList214],
@@ -16000,318 +15988,318 @@ id(Config) when is_list(Config) ->
mgABCD(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA002.xsd','./msxsdtest/ModelGroups',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA003.xsd','./msxsdtest/ModelGroups',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA004.xsd','./msxsdtest/ModelGroups',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA005.xsd','./msxsdtest/ModelGroups',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA006.xsd','./msxsdtest/ModelGroups',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA007.xsd','./msxsdtest/ModelGroups',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA008.xsd','./msxsdtest/ModelGroups',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA009.xsd','./msxsdtest/ModelGroups',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA010.xsd','./msxsdtest/ModelGroups',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA011.xsd','./msxsdtest/ModelGroups',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA013.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA013.xsd','./msxsdtest/ModelGroups',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA018.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA018.xsd','./msxsdtest/ModelGroups',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA019.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA019.xsd','./msxsdtest/ModelGroups',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa001.xsd','./msxsdtest/ModelGroups',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa002.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa003.xsd','./msxsdtest/ModelGroups',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgAa003.xml','./msxsdtest/ModelGroups',valid,S21),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgAa003.xml','./msxsdtest/ModelGroups',valid,S21),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa004.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa005.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa006.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa007.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa008.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa009.xsd','./msxsdtest/ModelGroups',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa010.xsd','./msxsdtest/ModelGroups',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb001.xsd','./msxsdtest/ModelGroups',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb002.xsd','./msxsdtest/ModelGroups',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb003.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb004.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb005.xsd','./msxsdtest/ModelGroups',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb006.xsd','./msxsdtest/ModelGroups',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb007.xsd','./msxsdtest/ModelGroups',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb008.xsd','./msxsdtest/ModelGroups',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb009.xsd','./msxsdtest/ModelGroups',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb010.xsd','./msxsdtest/ModelGroups',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB001.xsd','./msxsdtest/ModelGroups',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB001.xml','./msxsdtest/ModelGroups',valid,S39),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB001.xml','./msxsdtest/ModelGroups',valid,S39),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB002.xsd','./msxsdtest/ModelGroups',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB002.xml','./msxsdtest/ModelGroups',valid,S40),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB002.xml','./msxsdtest/ModelGroups',valid,S40),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB003.xsd','./msxsdtest/ModelGroups',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB004.xsd','./msxsdtest/ModelGroups',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB004.xml','./msxsdtest/ModelGroups',valid,S42),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB004.xml','./msxsdtest/ModelGroups',valid,S42),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB006.xsd','./msxsdtest/ModelGroups',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB006.xml','./msxsdtest/ModelGroups',valid,S43),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB006.xml','./msxsdtest/ModelGroups',valid,S43),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB007.xsd','./msxsdtest/ModelGroups',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB008.xsd','./msxsdtest/ModelGroups',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB009.xsd','./msxsdtest/ModelGroups',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB010.xsd','./msxsdtest/ModelGroups',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC001.xsd','./msxsdtest/ModelGroups',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC001.xml','./msxsdtest/ModelGroups',invalid,S48),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC001.xml','./msxsdtest/ModelGroups',invalid,S48),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC002.xsd','./msxsdtest/ModelGroups',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC002.xml','./msxsdtest/ModelGroups',valid,S49),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC002.xml','./msxsdtest/ModelGroups',valid,S49),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC003.xsd','./msxsdtest/ModelGroups',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC003.xml','./msxsdtest/ModelGroups',invalid,S50),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC003.xml','./msxsdtest/ModelGroups',invalid,S50),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC004.xsd','./msxsdtest/ModelGroups',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC004.xml','./msxsdtest/ModelGroups',valid,S51),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC004.xml','./msxsdtest/ModelGroups',valid,S51),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC005.xsd','./msxsdtest/ModelGroups',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC005.xml','./msxsdtest/ModelGroups',invalid,S52),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC005.xml','./msxsdtest/ModelGroups',invalid,S52),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC006.xsd','./msxsdtest/ModelGroups',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC006.xml','./msxsdtest/ModelGroups',valid,S53),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC006.xml','./msxsdtest/ModelGroups',valid,S53),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC007.xsd','./msxsdtest/ModelGroups',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC007.xml','./msxsdtest/ModelGroups',invalid,S54),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC007.xml','./msxsdtest/ModelGroups',invalid,S54),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC008.xsd','./msxsdtest/ModelGroups',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC009.xsd','./msxsdtest/ModelGroups',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC010.xsd','./msxsdtest/ModelGroups',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC010.xml','./msxsdtest/ModelGroups',invalid,S57),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC010.xml','./msxsdtest/ModelGroups',invalid,S57),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC011.xsd','./msxsdtest/ModelGroups',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC011.xml','./msxsdtest/ModelGroups',valid,S58),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC011.xml','./msxsdtest/ModelGroups',valid,S58),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC012.xsd','./msxsdtest/ModelGroups',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC012.xml','./msxsdtest/ModelGroups',invalid,S59),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC012.xml','./msxsdtest/ModelGroups',invalid,S59),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC013.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC013.xsd','./msxsdtest/ModelGroups',invalid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC014.xsd','./msxsdtest/ModelGroups',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC014.xml','./msxsdtest/ModelGroups',valid,S61),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC014.xml','./msxsdtest/ModelGroups',valid,S61),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD001.xsd','./msxsdtest/ModelGroups',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD001.xml','./msxsdtest/ModelGroups',valid,S62),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD001.xml','./msxsdtest/ModelGroups',valid,S62),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD005.xsd','./msxsdtest/ModelGroups',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD005.xml','./msxsdtest/ModelGroups',valid,S63),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD005.xml','./msxsdtest/ModelGroups',valid,S63),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD009.xsd','./msxsdtest/ModelGroups',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD009.xml','./msxsdtest/ModelGroups',valid,S64),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD009.xml','./msxsdtest/ModelGroups',valid,S64),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD013.xsd','./msxsdtest/ModelGroups',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD013.xml','./msxsdtest/ModelGroups',valid,S65),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD013.xml','./msxsdtest/ModelGroups',valid,S65),
ITResList25 = [ITRes24|ITResList24],
@@ -16322,454 +16310,454 @@ mgABCD(Config) when is_list(Config) ->
mgEFG(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE002.xsd','./msxsdtest/ModelGroups',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE003.xsd','./msxsdtest/ModelGroups',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE004.xsd','./msxsdtest/ModelGroups',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE005.xsd','./msxsdtest/ModelGroups',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE006.xsd','./msxsdtest/ModelGroups',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE007.xsd','./msxsdtest/ModelGroups',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE008.xsd','./msxsdtest/ModelGroups',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE009.xsd','./msxsdtest/ModelGroups',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE010.xsd','./msxsdtest/ModelGroups',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE011.xsd','./msxsdtest/ModelGroups',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE013.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE013.xml','./msxsdtest/ModelGroups',valid,S12),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE013.xml','./msxsdtest/ModelGroups',valid,S12),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE018.xsd','./msxsdtest/ModelGroups',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE018.xml','./msxsdtest/ModelGroups',valid,S17),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE018.xml','./msxsdtest/ModelGroups',valid,S17),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa001.xsd','./msxsdtest/ModelGroups',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa002.xsd','./msxsdtest/ModelGroups',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa003.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa004.xsd','./msxsdtest/ModelGroups',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa005.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa006.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa007.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa008.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb001.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb002.xsd','./msxsdtest/ModelGroups',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb003.xsd','./msxsdtest/ModelGroups',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb004.xsd','./msxsdtest/ModelGroups',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgEb004.xml','./msxsdtest/ModelGroups',valid,S29),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgEb004.xml','./msxsdtest/ModelGroups',valid,S29),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb005.xsd','./msxsdtest/ModelGroups',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgEb005.xml','./msxsdtest/ModelGroups',valid,S30),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgEb005.xml','./msxsdtest/ModelGroups',valid,S30),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb006.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb007.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb008.xsd','./msxsdtest/ModelGroups',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF001.xsd','./msxsdtest/ModelGroups',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF001.xml','./msxsdtest/ModelGroups',valid,S34),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF001.xml','./msxsdtest/ModelGroups',valid,S34),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF002.xsd','./msxsdtest/ModelGroups',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF002.xml','./msxsdtest/ModelGroups',valid,S35),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF002.xml','./msxsdtest/ModelGroups',valid,S35),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF003.xsd','./msxsdtest/ModelGroups',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF004.xsd','./msxsdtest/ModelGroups',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF004.xml','./msxsdtest/ModelGroups',valid,S37),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF004.xml','./msxsdtest/ModelGroups',valid,S37),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF005.xsd','./msxsdtest/ModelGroups',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF005.xml','./msxsdtest/ModelGroups',valid,S38),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF005.xml','./msxsdtest/ModelGroups',valid,S38),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF006.xsd','./msxsdtest/ModelGroups',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF006.xml','./msxsdtest/ModelGroups',valid,S39),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF006.xml','./msxsdtest/ModelGroups',valid,S39),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF007.xsd','./msxsdtest/ModelGroups',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF007.xml','./msxsdtest/ModelGroups',valid,S40),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF007.xml','./msxsdtest/ModelGroups',valid,S40),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF008.xsd','./msxsdtest/ModelGroups',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF008.xml','./msxsdtest/ModelGroups',valid,S41),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF008.xml','./msxsdtest/ModelGroups',valid,S41),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF009.xsd','./msxsdtest/ModelGroups',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF009.xml','./msxsdtest/ModelGroups',valid,S42),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF009.xml','./msxsdtest/ModelGroups',valid,S42),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF010.xsd','./msxsdtest/ModelGroups',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF010.xml','./msxsdtest/ModelGroups',valid,S43),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF010.xml','./msxsdtest/ModelGroups',valid,S43),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF011.xsd','./msxsdtest/ModelGroups',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF011.xml','./msxsdtest/ModelGroups',valid,S44),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF011.xml','./msxsdtest/ModelGroups',valid,S44),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF012.xsd','./msxsdtest/ModelGroups',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF012.xml','./msxsdtest/ModelGroups',valid,S45),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF012.xml','./msxsdtest/ModelGroups',valid,S45),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF013.xsd','./msxsdtest/ModelGroups',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF013.xml','./msxsdtest/ModelGroups',valid,S46),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF013.xml','./msxsdtest/ModelGroups',valid,S46),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF014.xsd','./msxsdtest/ModelGroups',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF014.xml','./msxsdtest/ModelGroups',valid,S47),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF014.xml','./msxsdtest/ModelGroups',valid,S47),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF015.xsd','./msxsdtest/ModelGroups',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF015.xml','./msxsdtest/ModelGroups',valid,S48),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF015.xml','./msxsdtest/ModelGroups',valid,S48),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF016.xsd','./msxsdtest/ModelGroups',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF016.xml','./msxsdtest/ModelGroups',valid,S49),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF016.xml','./msxsdtest/ModelGroups',valid,S49),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF017.xsd','./msxsdtest/ModelGroups',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF017.xml','./msxsdtest/ModelGroups',valid,S50),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF017.xml','./msxsdtest/ModelGroups',valid,S50),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF018.xsd','./msxsdtest/ModelGroups',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF018.xml','./msxsdtest/ModelGroups',valid,S51),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF018.xml','./msxsdtest/ModelGroups',valid,S51),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF019.xsd','./msxsdtest/ModelGroups',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF019.xml','./msxsdtest/ModelGroups',valid,S52),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF019.xml','./msxsdtest/ModelGroups',valid,S52),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF020.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF020.xsd','./msxsdtest/ModelGroups',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF021.xsd','./msxsdtest/ModelGroups',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF022.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF022.xsd','./msxsdtest/ModelGroups',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF023.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF023.xsd','./msxsdtest/ModelGroups',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG001.xsd','./msxsdtest/ModelGroups',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG001.xml','./msxsdtest/ModelGroups',valid,S57),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG001.xml','./msxsdtest/ModelGroups',valid,S57),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG002.xsd','./msxsdtest/ModelGroups',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG003.xsd','./msxsdtest/ModelGroups',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG003.xml','./msxsdtest/ModelGroups',invalid,S59),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG003.xml','./msxsdtest/ModelGroups',invalid,S59),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG004.xsd','./msxsdtest/ModelGroups',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG004.xml','./msxsdtest/ModelGroups',valid,S60),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG004.xml','./msxsdtest/ModelGroups',valid,S60),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG005.xsd','./msxsdtest/ModelGroups',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG005.xml','./msxsdtest/ModelGroups',invalid,S61),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG005.xml','./msxsdtest/ModelGroups',invalid,S61),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG006.xsd','./msxsdtest/ModelGroups',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG006.xml','./msxsdtest/ModelGroups',valid,S62),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG006.xml','./msxsdtest/ModelGroups',valid,S62),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG007.xsd','./msxsdtest/ModelGroups',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG007.xml','./msxsdtest/ModelGroups',valid,S63),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG007.xml','./msxsdtest/ModelGroups',valid,S63),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG008.xsd','./msxsdtest/ModelGroups',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG008.xml','./msxsdtest/ModelGroups',invalid,S64),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG008.xml','./msxsdtest/ModelGroups',invalid,S64),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG009.xsd','./msxsdtest/ModelGroups',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG009.xml','./msxsdtest/ModelGroups',valid,S65),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG009.xml','./msxsdtest/ModelGroups',valid,S65),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG010.xsd','./msxsdtest/ModelGroups',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG010.xml','./msxsdtest/ModelGroups',valid,S66),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG010.xml','./msxsdtest/ModelGroups',valid,S66),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG011.xsd','./msxsdtest/ModelGroups',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG011.xml','./msxsdtest/ModelGroups',invalid,S67),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG011.xml','./msxsdtest/ModelGroups',invalid,S67),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG012.xsd','./msxsdtest/ModelGroups',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG012.xml','./msxsdtest/ModelGroups',valid,S68),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG012.xml','./msxsdtest/ModelGroups',valid,S68),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG013.xsd','./msxsdtest/ModelGroups',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG013.xml','./msxsdtest/ModelGroups',invalid,S69),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG013.xml','./msxsdtest/ModelGroups',invalid,S69),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG014.xsd','./msxsdtest/ModelGroups',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG014.xml','./msxsdtest/ModelGroups',valid,S70),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG014.xml','./msxsdtest/ModelGroups',valid,S70),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG015.xsd','./msxsdtest/ModelGroups',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG015.xml','./msxsdtest/ModelGroups',invalid,S71),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG015.xml','./msxsdtest/ModelGroups',invalid,S71),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG016.xsd','./msxsdtest/ModelGroups',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG016.xml','./msxsdtest/ModelGroups',valid,S72),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG016.xml','./msxsdtest/ModelGroups',valid,S72),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG017.xsd','./msxsdtest/ModelGroups',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG017.xml','./msxsdtest/ModelGroups',invalid,S73),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG017.xml','./msxsdtest/ModelGroups',invalid,S73),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG018.xsd','./msxsdtest/ModelGroups',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG018.xml','./msxsdtest/ModelGroups',invalid,S74),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG018.xml','./msxsdtest/ModelGroups',invalid,S74),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG019.xsd','./msxsdtest/ModelGroups',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG019.xml','./msxsdtest/ModelGroups',valid,S75),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG019.xml','./msxsdtest/ModelGroups',valid,S75),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG020.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG020.xsd','./msxsdtest/ModelGroups',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG020.xml','./msxsdtest/ModelGroups',invalid,S76),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG020.xml','./msxsdtest/ModelGroups',invalid,S76),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG021.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG021.xsd','./msxsdtest/ModelGroups',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG021.xml','./msxsdtest/ModelGroups',invalid,S77),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG021.xml','./msxsdtest/ModelGroups',invalid,S77),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG022.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG022.xsd','./msxsdtest/ModelGroups',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG022.xml','./msxsdtest/ModelGroups',valid,S78),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG022.xml','./msxsdtest/ModelGroups',valid,S78),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG023.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG023.xsd','./msxsdtest/ModelGroups',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG023.xml','./msxsdtest/ModelGroups',valid,S79),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG023.xml','./msxsdtest/ModelGroups',valid,S79),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG024.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG024.xsd','./msxsdtest/ModelGroups',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG024.xml','./msxsdtest/ModelGroups',invalid,S80),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG024.xml','./msxsdtest/ModelGroups',invalid,S80),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG025.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG025.xsd','./msxsdtest/ModelGroups',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG026.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG026.xsd','./msxsdtest/ModelGroups',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG026.xml','./msxsdtest/ModelGroups',valid,S82),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG026.xml','./msxsdtest/ModelGroups',valid,S82),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG027.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG027.xsd','./msxsdtest/ModelGroups',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG028.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG028.xsd','./msxsdtest/ModelGroups',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG029.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG029.xsd','./msxsdtest/ModelGroups',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG030.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG030.xsd','./msxsdtest/ModelGroups',invalid),
STResList87 = [STRes86|STResList86],
@@ -16780,454 +16768,454 @@ mgEFG(Config) when is_list(Config) ->
mgHIJ(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH002.xsd','./msxsdtest/ModelGroups',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH003.xsd','./msxsdtest/ModelGroups',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH004.xsd','./msxsdtest/ModelGroups',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH005.xsd','./msxsdtest/ModelGroups',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH006.xsd','./msxsdtest/ModelGroups',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH007.xsd','./msxsdtest/ModelGroups',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH008.xsd','./msxsdtest/ModelGroups',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH009.xsd','./msxsdtest/ModelGroups',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH010.xsd','./msxsdtest/ModelGroups',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH011.xsd','./msxsdtest/ModelGroups',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH013.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH013.xml','./msxsdtest/ModelGroups',valid,S12),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH013.xml','./msxsdtest/ModelGroups',valid,S12),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH018.xsd','./msxsdtest/ModelGroups',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH018.xml','./msxsdtest/ModelGroups',valid,S17),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH018.xml','./msxsdtest/ModelGroups',valid,S17),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa001.xsd','./msxsdtest/ModelGroups',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa002.xsd','./msxsdtest/ModelGroups',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa003.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa004.xsd','./msxsdtest/ModelGroups',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa005.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa006.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa007.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa008.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb001.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb002.xsd','./msxsdtest/ModelGroups',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb003.xsd','./msxsdtest/ModelGroups',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb004.xsd','./msxsdtest/ModelGroups',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgHb004.xml','./msxsdtest/ModelGroups',valid,S29),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgHb004.xml','./msxsdtest/ModelGroups',valid,S29),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb005.xsd','./msxsdtest/ModelGroups',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgHb005.xml','./msxsdtest/ModelGroups',valid,S30),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgHb005.xml','./msxsdtest/ModelGroups',valid,S30),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb006.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb007.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb008.xsd','./msxsdtest/ModelGroups',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI001.xsd','./msxsdtest/ModelGroups',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI001.xml','./msxsdtest/ModelGroups',valid,S34),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI001.xml','./msxsdtest/ModelGroups',valid,S34),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI002.xsd','./msxsdtest/ModelGroups',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI002.xml','./msxsdtest/ModelGroups',valid,S35),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI002.xml','./msxsdtest/ModelGroups',valid,S35),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI003.xsd','./msxsdtest/ModelGroups',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI004.xsd','./msxsdtest/ModelGroups',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI004.xml','./msxsdtest/ModelGroups',valid,S37),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI004.xml','./msxsdtest/ModelGroups',valid,S37),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI005.xsd','./msxsdtest/ModelGroups',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI005.xml','./msxsdtest/ModelGroups',valid,S38),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI005.xml','./msxsdtest/ModelGroups',valid,S38),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI006.xsd','./msxsdtest/ModelGroups',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI006.xml','./msxsdtest/ModelGroups',valid,S39),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI006.xml','./msxsdtest/ModelGroups',valid,S39),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI007.xsd','./msxsdtest/ModelGroups',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI007.xml','./msxsdtest/ModelGroups',valid,S40),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI007.xml','./msxsdtest/ModelGroups',valid,S40),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI008.xsd','./msxsdtest/ModelGroups',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI008.xml','./msxsdtest/ModelGroups',valid,S41),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI008.xml','./msxsdtest/ModelGroups',valid,S41),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI009.xsd','./msxsdtest/ModelGroups',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI009.xml','./msxsdtest/ModelGroups',valid,S42),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI009.xml','./msxsdtest/ModelGroups',valid,S42),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI010.xsd','./msxsdtest/ModelGroups',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI010.xml','./msxsdtest/ModelGroups',valid,S43),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI010.xml','./msxsdtest/ModelGroups',valid,S43),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI011.xsd','./msxsdtest/ModelGroups',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI011.xml','./msxsdtest/ModelGroups',valid,S44),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI011.xml','./msxsdtest/ModelGroups',valid,S44),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI012.xsd','./msxsdtest/ModelGroups',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI012.xml','./msxsdtest/ModelGroups',valid,S45),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI012.xml','./msxsdtest/ModelGroups',valid,S45),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI013.xsd','./msxsdtest/ModelGroups',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI013.xml','./msxsdtest/ModelGroups',valid,S46),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI013.xml','./msxsdtest/ModelGroups',valid,S46),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI014.xsd','./msxsdtest/ModelGroups',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI014.xml','./msxsdtest/ModelGroups',valid,S47),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI014.xml','./msxsdtest/ModelGroups',valid,S47),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI015.xsd','./msxsdtest/ModelGroups',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI015.xml','./msxsdtest/ModelGroups',valid,S48),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI015.xml','./msxsdtest/ModelGroups',valid,S48),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI016.xsd','./msxsdtest/ModelGroups',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI016.xml','./msxsdtest/ModelGroups',valid,S49),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI016.xml','./msxsdtest/ModelGroups',valid,S49),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI017.xsd','./msxsdtest/ModelGroups',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI017.xml','./msxsdtest/ModelGroups',valid,S50),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI017.xml','./msxsdtest/ModelGroups',valid,S50),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI018.xsd','./msxsdtest/ModelGroups',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI018.xml','./msxsdtest/ModelGroups',valid,S51),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI018.xml','./msxsdtest/ModelGroups',valid,S51),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI019.xsd','./msxsdtest/ModelGroups',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI019.xml','./msxsdtest/ModelGroups',valid,S52),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI019.xml','./msxsdtest/ModelGroups',valid,S52),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI020.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI020.xsd','./msxsdtest/ModelGroups',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI021.xsd','./msxsdtest/ModelGroups',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI022.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI022.xsd','./msxsdtest/ModelGroups',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI023.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI023.xsd','./msxsdtest/ModelGroups',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ001.xsd','./msxsdtest/ModelGroups',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ001.xml','./msxsdtest/ModelGroups',valid,S57),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ001.xml','./msxsdtest/ModelGroups',valid,S57),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ002.xsd','./msxsdtest/ModelGroups',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ003.xsd','./msxsdtest/ModelGroups',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ003.xml','./msxsdtest/ModelGroups',invalid,S59),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ003.xml','./msxsdtest/ModelGroups',invalid,S59),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ004.xsd','./msxsdtest/ModelGroups',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ004.xml','./msxsdtest/ModelGroups',valid,S60),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ004.xml','./msxsdtest/ModelGroups',valid,S60),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ005.xsd','./msxsdtest/ModelGroups',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ005.xml','./msxsdtest/ModelGroups',invalid,S61),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ005.xml','./msxsdtest/ModelGroups',invalid,S61),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ006.xsd','./msxsdtest/ModelGroups',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ006.xml','./msxsdtest/ModelGroups',valid,S62),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ006.xml','./msxsdtest/ModelGroups',valid,S62),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ007.xsd','./msxsdtest/ModelGroups',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ007.xml','./msxsdtest/ModelGroups',valid,S63),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ007.xml','./msxsdtest/ModelGroups',valid,S63),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ008.xsd','./msxsdtest/ModelGroups',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ008.xml','./msxsdtest/ModelGroups',invalid,S64),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ008.xml','./msxsdtest/ModelGroups',invalid,S64),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ009.xsd','./msxsdtest/ModelGroups',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ009.xml','./msxsdtest/ModelGroups',valid,S65),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ009.xml','./msxsdtest/ModelGroups',valid,S65),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ010.xsd','./msxsdtest/ModelGroups',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ010.xml','./msxsdtest/ModelGroups',valid,S66),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ010.xml','./msxsdtest/ModelGroups',valid,S66),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ011.xsd','./msxsdtest/ModelGroups',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ011.xml','./msxsdtest/ModelGroups',invalid,S67),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ011.xml','./msxsdtest/ModelGroups',invalid,S67),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ012.xsd','./msxsdtest/ModelGroups',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ012.xml','./msxsdtest/ModelGroups',valid,S68),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ012.xml','./msxsdtest/ModelGroups',valid,S68),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ013.xsd','./msxsdtest/ModelGroups',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ013.xml','./msxsdtest/ModelGroups',invalid,S69),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ013.xml','./msxsdtest/ModelGroups',invalid,S69),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ014.xsd','./msxsdtest/ModelGroups',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ014.xml','./msxsdtest/ModelGroups',valid,S70),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ014.xml','./msxsdtest/ModelGroups',valid,S70),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ015.xsd','./msxsdtest/ModelGroups',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ015.xml','./msxsdtest/ModelGroups',invalid,S71),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ015.xml','./msxsdtest/ModelGroups',invalid,S71),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ016.xsd','./msxsdtest/ModelGroups',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ016.xml','./msxsdtest/ModelGroups',valid,S72),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ016.xml','./msxsdtest/ModelGroups',valid,S72),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ017.xsd','./msxsdtest/ModelGroups',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ017.xml','./msxsdtest/ModelGroups',invalid,S73),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ017.xml','./msxsdtest/ModelGroups',invalid,S73),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ018.xsd','./msxsdtest/ModelGroups',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ018.xml','./msxsdtest/ModelGroups',invalid,S74),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ018.xml','./msxsdtest/ModelGroups',invalid,S74),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ019.xsd','./msxsdtest/ModelGroups',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ019.xml','./msxsdtest/ModelGroups',valid,S75),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ019.xml','./msxsdtest/ModelGroups',valid,S75),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ020.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ020.xsd','./msxsdtest/ModelGroups',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ020.xml','./msxsdtest/ModelGroups',invalid,S76),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ020.xml','./msxsdtest/ModelGroups',invalid,S76),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ021.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ021.xsd','./msxsdtest/ModelGroups',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ021.xml','./msxsdtest/ModelGroups',invalid,S77),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ021.xml','./msxsdtest/ModelGroups',invalid,S77),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ022.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ022.xsd','./msxsdtest/ModelGroups',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ022.xml','./msxsdtest/ModelGroups',valid,S78),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ022.xml','./msxsdtest/ModelGroups',valid,S78),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ023.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ023.xsd','./msxsdtest/ModelGroups',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ023.xml','./msxsdtest/ModelGroups',valid,S79),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ023.xml','./msxsdtest/ModelGroups',valid,S79),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ024.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ024.xsd','./msxsdtest/ModelGroups',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ024.xml','./msxsdtest/ModelGroups',invalid,S80),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ024.xml','./msxsdtest/ModelGroups',invalid,S80),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ025.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ025.xsd','./msxsdtest/ModelGroups',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ026.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ026.xsd','./msxsdtest/ModelGroups',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ026.xml','./msxsdtest/ModelGroups',valid,S82),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ026.xml','./msxsdtest/ModelGroups',valid,S82),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ027.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ027.xsd','./msxsdtest/ModelGroups',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ028.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ028.xsd','./msxsdtest/ModelGroups',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ029.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ029.xsd','./msxsdtest/ModelGroups',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ030.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ030.xsd','./msxsdtest/ModelGroups',invalid),
STResList87 = [STRes86|STResList86],
@@ -17238,64 +17226,64 @@ mgHIJ(Config) when is_list(Config) ->
mgK(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK002.xml','./msxsdtest/ModelGroups',invalid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK002.xml','./msxsdtest/ModelGroups',invalid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK003.xsd','./msxsdtest/ModelGroups',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK003.xml','./msxsdtest/ModelGroups',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK003.xml','./msxsdtest/ModelGroups',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK004.xsd','./msxsdtest/ModelGroups',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK004.xml','./msxsdtest/ModelGroups',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK004.xml','./msxsdtest/ModelGroups',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK005.xsd','./msxsdtest/ModelGroups',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK005.xml','./msxsdtest/ModelGroups',invalid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK005.xml','./msxsdtest/ModelGroups',invalid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK006.xml','./msxsdtest/ModelGroups',invalid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK006.xml','./msxsdtest/ModelGroups',invalid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK007.xml','./msxsdtest/ModelGroups',invalid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK007.xml','./msxsdtest/ModelGroups',invalid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK008.xml','./msxsdtest/ModelGroups',invalid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK008.xml','./msxsdtest/ModelGroups',invalid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK009.xml','./msxsdtest/ModelGroups',valid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK009.xml','./msxsdtest/ModelGroups',valid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK010.xsd','./msxsdtest/ModelGroups',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK010.xml','./msxsdtest/ModelGroups',invalid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK010.xml','./msxsdtest/ModelGroups',invalid,S9),
ITResList10 = [ITRes9|ITResList9],
@@ -17306,142 +17294,142 @@ mgK(Config) when is_list(Config) ->
mgLM(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL002.xml','./msxsdtest/ModelGroups',invalid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL002.xml','./msxsdtest/ModelGroups',invalid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL003.xsd','./msxsdtest/ModelGroups',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL003.xml','./msxsdtest/ModelGroups',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL003.xml','./msxsdtest/ModelGroups',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL004.xsd','./msxsdtest/ModelGroups',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL004.xml','./msxsdtest/ModelGroups',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL004.xml','./msxsdtest/ModelGroups',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL005.xsd','./msxsdtest/ModelGroups',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL005.xml','./msxsdtest/ModelGroups',invalid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL005.xml','./msxsdtest/ModelGroups',invalid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL006.xml','./msxsdtest/ModelGroups',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL006.xml','./msxsdtest/ModelGroups',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL007.xml','./msxsdtest/ModelGroups',invalid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL007.xml','./msxsdtest/ModelGroups',invalid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL008.xml','./msxsdtest/ModelGroups',valid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL008.xml','./msxsdtest/ModelGroups',valid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL009.xml','./msxsdtest/ModelGroups',valid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL009.xml','./msxsdtest/ModelGroups',valid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL010.xsd','./msxsdtest/ModelGroups',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL010.xml','./msxsdtest/ModelGroups',invalid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL010.xml','./msxsdtest/ModelGroups',invalid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM002.xsd','./msxsdtest/ModelGroups',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM002.xml','./msxsdtest/ModelGroups',invalid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM002.xml','./msxsdtest/ModelGroups',invalid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM003.xsd','./msxsdtest/ModelGroups',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM003.xml','./msxsdtest/ModelGroups',invalid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM003.xml','./msxsdtest/ModelGroups',invalid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM004.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM004.xml','./msxsdtest/ModelGroups',valid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM004.xml','./msxsdtest/ModelGroups',valid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM005.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM005.xml','./msxsdtest/ModelGroups',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM005.xml','./msxsdtest/ModelGroups',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM006.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM006.xml','./msxsdtest/ModelGroups',invalid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM006.xml','./msxsdtest/ModelGroups',invalid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM007.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM007.xml','./msxsdtest/ModelGroups',invalid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM007.xml','./msxsdtest/ModelGroups',invalid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM008.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM008.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM008.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM009.xsd','./msxsdtest/ModelGroups',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM009.xml','./msxsdtest/ModelGroups',valid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM009.xml','./msxsdtest/ModelGroups',valid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM010.xsd','./msxsdtest/ModelGroups',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM010.xml','./msxsdtest/ModelGroups',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM010.xml','./msxsdtest/ModelGroups',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM011.xsd','./msxsdtest/ModelGroups',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM011.xml','./msxsdtest/ModelGroups',valid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM011.xml','./msxsdtest/ModelGroups',valid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM012.xsd','./msxsdtest/ModelGroups',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM012.xml','./msxsdtest/ModelGroups',invalid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM012.xml','./msxsdtest/ModelGroups',invalid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM013.xsd','./msxsdtest/ModelGroups',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM013.xml','./msxsdtest/ModelGroups',valid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM013.xml','./msxsdtest/ModelGroups',valid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM014.xsd','./msxsdtest/ModelGroups',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM014.xml','./msxsdtest/ModelGroups',invalid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM014.xml','./msxsdtest/ModelGroups',invalid,S22),
ITResList23 = [ITRes22|ITResList22],
@@ -17452,100 +17440,100 @@ mgLM(Config) when is_list(Config) ->
mgN(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN002.xml','./msxsdtest/ModelGroups',invalid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN002.xml','./msxsdtest/ModelGroups',invalid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN003.xsd','./msxsdtest/ModelGroups',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN003.xml','./msxsdtest/ModelGroups',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN003.xml','./msxsdtest/ModelGroups',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN004.xsd','./msxsdtest/ModelGroups',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN004.xml','./msxsdtest/ModelGroups',invalid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN004.xml','./msxsdtest/ModelGroups',invalid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN005.xsd','./msxsdtest/ModelGroups',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN005.xml','./msxsdtest/ModelGroups',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN005.xml','./msxsdtest/ModelGroups',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN006.xml','./msxsdtest/ModelGroups',invalid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN006.xml','./msxsdtest/ModelGroups',invalid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN007.xml','./msxsdtest/ModelGroups',invalid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN007.xml','./msxsdtest/ModelGroups',invalid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN008.xml','./msxsdtest/ModelGroups',invalid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN008.xml','./msxsdtest/ModelGroups',invalid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN009.xml','./msxsdtest/ModelGroups',invalid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN009.xml','./msxsdtest/ModelGroups',invalid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN010.xsd','./msxsdtest/ModelGroups',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN010.xml','./msxsdtest/ModelGroups',invalid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN010.xml','./msxsdtest/ModelGroups',invalid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN011.xsd','./msxsdtest/ModelGroups',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN011.xml','./msxsdtest/ModelGroups',invalid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN011.xml','./msxsdtest/ModelGroups',invalid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN012.xsd','./msxsdtest/ModelGroups',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN012.xml','./msxsdtest/ModelGroups',valid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN012.xml','./msxsdtest/ModelGroups',valid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN013.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN013.xml','./msxsdtest/ModelGroups',invalid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN013.xml','./msxsdtest/ModelGroups',invalid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN014.xml','./msxsdtest/ModelGroups',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN014.xml','./msxsdtest/ModelGroups',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN015.xml','./msxsdtest/ModelGroups',invalid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN015.xml','./msxsdtest/ModelGroups',invalid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN016.xml','./msxsdtest/ModelGroups',invalid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN016.xml','./msxsdtest/ModelGroups',invalid,S15),
ITResList16 = [ITRes15|ITResList15],
@@ -17556,262 +17544,262 @@ mgN(Config) when is_list(Config) ->
mgOP(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO001.xsd','./msxsdtest/ModelGroups',invalid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO002.xml','./msxsdtest/ModelGroups',valid,S1),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO002.xml','./msxsdtest/ModelGroups',valid,S1),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO003.xsd','./msxsdtest/ModelGroups',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO004.xsd','./msxsdtest/ModelGroups',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO004.xml','./msxsdtest/ModelGroups',valid,S3),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO004.xml','./msxsdtest/ModelGroups',valid,S3),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO005.xsd','./msxsdtest/ModelGroups',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO005.xml','./msxsdtest/ModelGroups',valid,S4),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO005.xml','./msxsdtest/ModelGroups',valid,S4),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO006.xml','./msxsdtest/ModelGroups',valid,S5),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO006.xml','./msxsdtest/ModelGroups',valid,S5),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO007.xml','./msxsdtest/ModelGroups',valid,S6),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO007.xml','./msxsdtest/ModelGroups',valid,S6),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO008.xml','./msxsdtest/ModelGroups',valid,S7),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO008.xml','./msxsdtest/ModelGroups',valid,S7),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO009.xml','./msxsdtest/ModelGroups',valid,S8),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO009.xml','./msxsdtest/ModelGroups',valid,S8),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO010.xsd','./msxsdtest/ModelGroups',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO010.xml','./msxsdtest/ModelGroups',valid,S9),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO010.xml','./msxsdtest/ModelGroups',valid,S9),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO011.xsd','./msxsdtest/ModelGroups',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO011.xml','./msxsdtest/ModelGroups',valid,S10),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO011.xml','./msxsdtest/ModelGroups',valid,S10),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO013.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO013.xml','./msxsdtest/ModelGroups',valid,S12),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO013.xml','./msxsdtest/ModelGroups',valid,S12),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO018.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO018.xsd','./msxsdtest/ModelGroups',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO019.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO019.xsd','./msxsdtest/ModelGroups',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO020.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO020.xsd','./msxsdtest/ModelGroups',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO021.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO022.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO022.xsd','./msxsdtest/ModelGroups',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO023.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO023.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO024.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO024.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO025.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO025.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO026.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO026.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO027.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO027.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO028.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO028.xsd','./msxsdtest/ModelGroups',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO028.xml','./msxsdtest/ModelGroups',valid,S27),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO028.xml','./msxsdtest/ModelGroups',valid,S27),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO029.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO029.xsd','./msxsdtest/ModelGroups',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO029.xml','./msxsdtest/ModelGroups',valid,S28),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO029.xml','./msxsdtest/ModelGroups',valid,S28),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO030.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO030.xsd','./msxsdtest/ModelGroups',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO030.xml','./msxsdtest/ModelGroups',valid,S29),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO030.xml','./msxsdtest/ModelGroups',valid,S29),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO031.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO031.xsd','./msxsdtest/ModelGroups',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO031.xml','./msxsdtest/ModelGroups',valid,S30),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO031.xml','./msxsdtest/ModelGroups',valid,S30),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO032.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO032.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO033.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO033.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO034.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO034.xsd','./msxsdtest/ModelGroups',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO034.xml','./msxsdtest/ModelGroups',valid,S33),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO034.xml','./msxsdtest/ModelGroups',valid,S33),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO035.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO035.xsd','./msxsdtest/ModelGroups',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO035.xml','./msxsdtest/ModelGroups',valid,S34),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO035.xml','./msxsdtest/ModelGroups',valid,S34),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO036.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO036.xsd','./msxsdtest/ModelGroups',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO036.xml','./msxsdtest/ModelGroups',valid,S35),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO036.xml','./msxsdtest/ModelGroups',valid,S35),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO037.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO037.xsd','./msxsdtest/ModelGroups',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO037.xml','./msxsdtest/ModelGroups',valid,S36),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO037.xml','./msxsdtest/ModelGroups',valid,S36),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO038.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO038.xsd','./msxsdtest/ModelGroups',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO038.xml','./msxsdtest/ModelGroups',valid,S37),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO038.xml','./msxsdtest/ModelGroups',valid,S37),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP039.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP039.xsd','./msxsdtest/ModelGroups',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP040.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP040.xsd','./msxsdtest/ModelGroups',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP041.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP041.xsd','./msxsdtest/ModelGroups',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP042.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP042.xsd','./msxsdtest/ModelGroups',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP043.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP043.xsd','./msxsdtest/ModelGroups',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP049.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP049.xsd','./msxsdtest/ModelGroups',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP050.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP050.xsd','./msxsdtest/ModelGroups',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP055.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP055.xsd','./msxsdtest/ModelGroups',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP056.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP056.xsd','./msxsdtest/ModelGroups',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP057.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP057.xsd','./msxsdtest/ModelGroups',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP058.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP058.xsd','./msxsdtest/ModelGroups',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP059.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP059.xsd','./msxsdtest/ModelGroups',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP060.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP060.xsd','./msxsdtest/ModelGroups',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP061.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP061.xsd','./msxsdtest/ModelGroups',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP062.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP062.xsd','./msxsdtest/ModelGroups',invalid),
STResList53 = [STRes52|STResList52],
@@ -17822,202 +17810,202 @@ mgOP(Config) when is_list(Config) ->
mgQR(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ001.xsd','./msxsdtest/ModelGroups',invalid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ002.xml','./msxsdtest/ModelGroups',valid,S1),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ002.xml','./msxsdtest/ModelGroups',valid,S1),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ003.xsd','./msxsdtest/ModelGroups',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ003.xml','./msxsdtest/ModelGroups',valid,S2),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ003.xml','./msxsdtest/ModelGroups',valid,S2),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ004.xsd','./msxsdtest/ModelGroups',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ005.xsd','./msxsdtest/ModelGroups',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ006.xml','./msxsdtest/ModelGroups',valid,S5),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ006.xml','./msxsdtest/ModelGroups',valid,S5),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ007.xml','./msxsdtest/ModelGroups',valid,S6),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ007.xml','./msxsdtest/ModelGroups',valid,S6),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ008.xml','./msxsdtest/ModelGroups',valid,S7),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ008.xml','./msxsdtest/ModelGroups',valid,S7),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ009.xml','./msxsdtest/ModelGroups',valid,S8),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ009.xml','./msxsdtest/ModelGroups',valid,S8),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ010.xsd','./msxsdtest/ModelGroups',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ011.xsd','./msxsdtest/ModelGroups',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ013.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ013.xsd','./msxsdtest/ModelGroups',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ018.xsd','./msxsdtest/ModelGroups',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ018.xml','./msxsdtest/ModelGroups',valid,S17),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ018.xml','./msxsdtest/ModelGroups',valid,S17),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ019.xsd','./msxsdtest/ModelGroups',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ019.xml','./msxsdtest/ModelGroups',valid,S18),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ019.xml','./msxsdtest/ModelGroups',valid,S18),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ020.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ020.xsd','./msxsdtest/ModelGroups',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ020.xml','./msxsdtest/ModelGroups',valid,S19),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ020.xml','./msxsdtest/ModelGroups',valid,S19),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ021.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR001.xsd','./msxsdtest/ModelGroups',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR002.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR003.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR004.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR005.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR006.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR007.xsd','./msxsdtest/ModelGroups',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR008.xsd','./msxsdtest/ModelGroups',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR009.xsd','./msxsdtest/ModelGroups',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR010.xsd','./msxsdtest/ModelGroups',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR011.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR012.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR013.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR013.xsd','./msxsdtest/ModelGroups',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR014.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR014.xsd','./msxsdtest/ModelGroups',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR015.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR015.xsd','./msxsdtest/ModelGroups',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR016.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR016.xsd','./msxsdtest/ModelGroups',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR017.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR017.xsd','./msxsdtest/ModelGroups',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR018.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR018.xsd','./msxsdtest/ModelGroups',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR019.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR019.xsd','./msxsdtest/ModelGroups',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR020.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR020.xsd','./msxsdtest/ModelGroups',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR021.xsd','./msxsdtest/ModelGroups',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR022.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR022.xsd','./msxsdtest/ModelGroups',invalid),
STResList43 = [STRes42|STResList42],
@@ -18041,184 +18029,184 @@ mgS(Config) when is_list(Config) ->
particlesAB(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA001.xml','./msxsdtest/Particles',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA001.xml','./msxsdtest/Particles',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA003.xsd','./msxsdtest/Particles',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA003.xsd','./msxsdtest/Particles',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA003.xml','./msxsdtest/Particles',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA003.xml','./msxsdtest/Particles',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA004.xsd','./msxsdtest/Particles',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA004.xsd','./msxsdtest/Particles',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA004.xml','./msxsdtest/Particles',invalid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA004.xml','./msxsdtest/Particles',invalid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA005.xml','./msxsdtest/Particles',invalid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA005.xml','./msxsdtest/Particles',invalid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA006.xsd','./msxsdtest/Particles',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA006.xsd','./msxsdtest/Particles',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA006.xml','./msxsdtest/Particles',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA006.xml','./msxsdtest/Particles',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA007.xsd','./msxsdtest/Particles',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA007.xsd','./msxsdtest/Particles',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA007.xml','./msxsdtest/Particles',valid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA007.xml','./msxsdtest/Particles',valid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA008.xsd','./msxsdtest/Particles',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA008.xsd','./msxsdtest/Particles',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA008.xml','./msxsdtest/Particles',invalid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA008.xml','./msxsdtest/Particles',invalid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA009.xsd','./msxsdtest/Particles',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA009.xsd','./msxsdtest/Particles',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA009.xml','./msxsdtest/Particles',invalid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA009.xml','./msxsdtest/Particles',invalid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA010.xsd','./msxsdtest/Particles',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA010.xsd','./msxsdtest/Particles',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA010.xml','./msxsdtest/Particles',valid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA010.xml','./msxsdtest/Particles',valid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA011.xsd','./msxsdtest/Particles',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA011.xsd','./msxsdtest/Particles',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA011.xml','./msxsdtest/Particles',valid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA011.xml','./msxsdtest/Particles',valid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA012.xsd','./msxsdtest/Particles',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA012.xsd','./msxsdtest/Particles',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA012.xml','./msxsdtest/Particles',invalid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA012.xml','./msxsdtest/Particles',invalid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA013.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA013.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA013.xml','./msxsdtest/Particles',invalid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA013.xml','./msxsdtest/Particles',invalid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA014.xsd','./msxsdtest/Particles',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA014.xsd','./msxsdtest/Particles',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA014.xml','./msxsdtest/Particles',valid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA014.xml','./msxsdtest/Particles',valid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA015.xsd','./msxsdtest/Particles',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA015.xsd','./msxsdtest/Particles',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA015.xml','./msxsdtest/Particles',valid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA015.xml','./msxsdtest/Particles',valid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB001.xsd','./msxsdtest/Particles',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB001.xsd','./msxsdtest/Particles',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB001.xml','./msxsdtest/Particles',invalid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB001.xml','./msxsdtest/Particles',invalid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB002.xsd','./msxsdtest/Particles',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB002.xsd','./msxsdtest/Particles',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB002.xml','./msxsdtest/Particles',valid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB002.xml','./msxsdtest/Particles',valid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB003.xsd','./msxsdtest/Particles',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB003.xsd','./msxsdtest/Particles',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB003.xml','./msxsdtest/Particles',invalid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB003.xml','./msxsdtest/Particles',invalid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB004.xsd','./msxsdtest/Particles',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB004.xsd','./msxsdtest/Particles',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB004.xml','./msxsdtest/Particles',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB004.xml','./msxsdtest/Particles',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB005.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB005.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB005.xml','./msxsdtest/Particles',valid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB005.xml','./msxsdtest/Particles',valid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB006.xsd','./msxsdtest/Particles',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB006.xsd','./msxsdtest/Particles',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB006.xml','./msxsdtest/Particles',valid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB006.xml','./msxsdtest/Particles',valid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB007.xsd','./msxsdtest/Particles',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB007.xsd','./msxsdtest/Particles',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB007.xml','./msxsdtest/Particles',invalid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB007.xml','./msxsdtest/Particles',invalid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB008.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB008.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB008.xml','./msxsdtest/Particles',invalid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB008.xml','./msxsdtest/Particles',invalid,S22),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB009.xsd','./msxsdtest/Particles',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB009.xsd','./msxsdtest/Particles',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB009.xml','./msxsdtest/Particles',valid,S23),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB009.xml','./msxsdtest/Particles',valid,S23),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB010.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB010.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB010.xml','./msxsdtest/Particles',valid,S24),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB010.xml','./msxsdtest/Particles',valid,S24),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB011.xsd','./msxsdtest/Particles',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB011.xsd','./msxsdtest/Particles',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB011.xml','./msxsdtest/Particles',invalid,S25),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB011.xml','./msxsdtest/Particles',invalid,S25),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB012.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB012.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB012.xml','./msxsdtest/Particles',invalid,S26),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB012.xml','./msxsdtest/Particles',invalid,S26),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB013.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB013.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB013.xml','./msxsdtest/Particles',valid,S27),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB013.xml','./msxsdtest/Particles',valid,S27),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB014.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB014.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB014.xml','./msxsdtest/Particles',valid,S28),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB014.xml','./msxsdtest/Particles',valid,S28),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB015.xsd','./msxsdtest/Particles',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB015.xsd','./msxsdtest/Particles',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB015.xml','./msxsdtest/Particles',invalid,S29),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB015.xml','./msxsdtest/Particles',invalid,S29),
ITResList30 = [ITRes29|ITResList29],
@@ -18229,1100 +18217,1100 @@ particlesAB(Config) when is_list(Config) ->
particlesCDE(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC001.xml','./msxsdtest/Particles',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC001.xml','./msxsdtest/Particles',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC003.xsd','./msxsdtest/Particles',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC003.xsd','./msxsdtest/Particles',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC003.xml','./msxsdtest/Particles',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC003.xml','./msxsdtest/Particles',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC004.xsd','./msxsdtest/Particles',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC004.xsd','./msxsdtest/Particles',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC004.xml','./msxsdtest/Particles',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC004.xml','./msxsdtest/Particles',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC005.xml','./msxsdtest/Particles',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC005.xml','./msxsdtest/Particles',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC006.xsd','./msxsdtest/Particles',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC006.xsd','./msxsdtest/Particles',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC006.xml','./msxsdtest/Particles',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC006.xml','./msxsdtest/Particles',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC007.xsd','./msxsdtest/Particles',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC007.xsd','./msxsdtest/Particles',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC007.xml','./msxsdtest/Particles',invalid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC007.xml','./msxsdtest/Particles',invalid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC008.xsd','./msxsdtest/Particles',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC008.xsd','./msxsdtest/Particles',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC008.xml','./msxsdtest/Particles',valid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC008.xml','./msxsdtest/Particles',valid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC009.xsd','./msxsdtest/Particles',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC009.xsd','./msxsdtest/Particles',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC009.xml','./msxsdtest/Particles',valid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC009.xml','./msxsdtest/Particles',valid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC010.xsd','./msxsdtest/Particles',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC010.xsd','./msxsdtest/Particles',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC010.xml','./msxsdtest/Particles',valid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC010.xml','./msxsdtest/Particles',valid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC011.xsd','./msxsdtest/Particles',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC011.xsd','./msxsdtest/Particles',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC011.xml','./msxsdtest/Particles',valid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC011.xml','./msxsdtest/Particles',valid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC012.xsd','./msxsdtest/Particles',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC012.xsd','./msxsdtest/Particles',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC012.xml','./msxsdtest/Particles',invalid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC012.xml','./msxsdtest/Particles',invalid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC013.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC013.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC013.xml','./msxsdtest/Particles',invalid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC013.xml','./msxsdtest/Particles',invalid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC014.xsd','./msxsdtest/Particles',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC014.xsd','./msxsdtest/Particles',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC014.xml','./msxsdtest/Particles',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC014.xml','./msxsdtest/Particles',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC015.xsd','./msxsdtest/Particles',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC015.xsd','./msxsdtest/Particles',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC015.xml','./msxsdtest/Particles',valid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC015.xml','./msxsdtest/Particles',valid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC016.xsd','./msxsdtest/Particles',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC016.xsd','./msxsdtest/Particles',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC016.xml','./msxsdtest/Particles',valid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC016.xml','./msxsdtest/Particles',valid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC017.xsd','./msxsdtest/Particles',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC017.xsd','./msxsdtest/Particles',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC017.xml','./msxsdtest/Particles',invalid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC017.xml','./msxsdtest/Particles',invalid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC018.xsd','./msxsdtest/Particles',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC018.xsd','./msxsdtest/Particles',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC018.xml','./msxsdtest/Particles',invalid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC018.xml','./msxsdtest/Particles',invalid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC019.xsd','./msxsdtest/Particles',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC019.xsd','./msxsdtest/Particles',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC019.xml','./msxsdtest/Particles',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC019.xml','./msxsdtest/Particles',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC020.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC020.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC020.xml','./msxsdtest/Particles',invalid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC020.xml','./msxsdtest/Particles',invalid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC021.xsd','./msxsdtest/Particles',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC021.xsd','./msxsdtest/Particles',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC021.xml','./msxsdtest/Particles',valid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC021.xml','./msxsdtest/Particles',valid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC022.xsd','./msxsdtest/Particles',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC022.xsd','./msxsdtest/Particles',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC022.xml','./msxsdtest/Particles',invalid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC022.xml','./msxsdtest/Particles',invalid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC023.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC023.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC023.xml','./msxsdtest/Particles',invalid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC023.xml','./msxsdtest/Particles',invalid,S22),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC024.xsd','./msxsdtest/Particles',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC024.xsd','./msxsdtest/Particles',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC024.xml','./msxsdtest/Particles',invalid,S23),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC024.xml','./msxsdtest/Particles',invalid,S23),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC025.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC025.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC025.xml','./msxsdtest/Particles',invalid,S24),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC025.xml','./msxsdtest/Particles',invalid,S24),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC026.xsd','./msxsdtest/Particles',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC026.xsd','./msxsdtest/Particles',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC026.xml','./msxsdtest/Particles',invalid,S25),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC026.xml','./msxsdtest/Particles',invalid,S25),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC027.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC027.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC027.xml','./msxsdtest/Particles',valid,S26),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC027.xml','./msxsdtest/Particles',valid,S26),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC028.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC028.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC028.xml','./msxsdtest/Particles',valid,S27),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC028.xml','./msxsdtest/Particles',valid,S27),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC029.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC029.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC029.xml','./msxsdtest/Particles',valid,S28),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC029.xml','./msxsdtest/Particles',valid,S28),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC030.xsd','./msxsdtest/Particles',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC030.xsd','./msxsdtest/Particles',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC030.xml','./msxsdtest/Particles',valid,S29),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC030.xml','./msxsdtest/Particles',valid,S29),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC031.xsd','./msxsdtest/Particles',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC031.xsd','./msxsdtest/Particles',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC031.xml','./msxsdtest/Particles',invalid,S30),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC031.xml','./msxsdtest/Particles',invalid,S30),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC032.xsd','./msxsdtest/Particles',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC032.xsd','./msxsdtest/Particles',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC032.xml','./msxsdtest/Particles',invalid,S31),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC032.xml','./msxsdtest/Particles',invalid,S31),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC033.xsd','./msxsdtest/Particles',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC033.xsd','./msxsdtest/Particles',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC033.xml','./msxsdtest/Particles',invalid,S32),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC033.xml','./msxsdtest/Particles',invalid,S32),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC034.xsd','./msxsdtest/Particles',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC034.xsd','./msxsdtest/Particles',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC034.xml','./msxsdtest/Particles',valid,S33),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC034.xml','./msxsdtest/Particles',valid,S33),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC035.xsd','./msxsdtest/Particles',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC035.xsd','./msxsdtest/Particles',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC035.xml','./msxsdtest/Particles',invalid,S34),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC035.xml','./msxsdtest/Particles',invalid,S34),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC036.xsd','./msxsdtest/Particles',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC036.xsd','./msxsdtest/Particles',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC036.xml','./msxsdtest/Particles',invalid,S35),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC036.xml','./msxsdtest/Particles',invalid,S35),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC037.xsd','./msxsdtest/Particles',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC037.xsd','./msxsdtest/Particles',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC037.xml','./msxsdtest/Particles',valid,S36),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC037.xml','./msxsdtest/Particles',valid,S36),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC038.xsd','./msxsdtest/Particles',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC038.xsd','./msxsdtest/Particles',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC038.xml','./msxsdtest/Particles',invalid,S37),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC038.xml','./msxsdtest/Particles',invalid,S37),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC039.xsd','./msxsdtest/Particles',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC039.xsd','./msxsdtest/Particles',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC039.xml','./msxsdtest/Particles',invalid,S38),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC039.xml','./msxsdtest/Particles',invalid,S38),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC040.xsd','./msxsdtest/Particles',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC040.xsd','./msxsdtest/Particles',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC040.xml','./msxsdtest/Particles',valid,S39),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC040.xml','./msxsdtest/Particles',valid,S39),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC041.xsd','./msxsdtest/Particles',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC041.xsd','./msxsdtest/Particles',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC041.xml','./msxsdtest/Particles',valid,S40),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC041.xml','./msxsdtest/Particles',valid,S40),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC042.xsd','./msxsdtest/Particles',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC042.xsd','./msxsdtest/Particles',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC042.xml','./msxsdtest/Particles',invalid,S41),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC042.xml','./msxsdtest/Particles',invalid,S41),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC043.xsd','./msxsdtest/Particles',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC043.xsd','./msxsdtest/Particles',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC043.xml','./msxsdtest/Particles',valid,S42),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC043.xml','./msxsdtest/Particles',valid,S42),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC044.xsd','./msxsdtest/Particles',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC044.xsd','./msxsdtest/Particles',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC044.xml','./msxsdtest/Particles',valid,S43),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC044.xml','./msxsdtest/Particles',valid,S43),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC045.xsd','./msxsdtest/Particles',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC045.xsd','./msxsdtest/Particles',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC045.xml','./msxsdtest/Particles',valid,S44),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC045.xml','./msxsdtest/Particles',valid,S44),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC046.xsd','./msxsdtest/Particles',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC046.xsd','./msxsdtest/Particles',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC046.xml','./msxsdtest/Particles',valid,S45),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC046.xml','./msxsdtest/Particles',valid,S45),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC047.xsd','./msxsdtest/Particles',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC047.xsd','./msxsdtest/Particles',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC047.xml','./msxsdtest/Particles',invalid,S46),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC047.xml','./msxsdtest/Particles',invalid,S46),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC048.xsd','./msxsdtest/Particles',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC048.xsd','./msxsdtest/Particles',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC048.xml','./msxsdtest/Particles',invalid,S47),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC048.xml','./msxsdtest/Particles',invalid,S47),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa001.xsd','./msxsdtest/Particles',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa001.xsd','./msxsdtest/Particles',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa001.xml','./msxsdtest/Particles',invalid,S48),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa001.xml','./msxsdtest/Particles',invalid,S48),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa002.xsd','./msxsdtest/Particles',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa002.xsd','./msxsdtest/Particles',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa002.xml','./msxsdtest/Particles',valid,S49),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa002.xml','./msxsdtest/Particles',valid,S49),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa003.xsd','./msxsdtest/Particles',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa003.xsd','./msxsdtest/Particles',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa003.xml','./msxsdtest/Particles',invalid,S50),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa003.xml','./msxsdtest/Particles',invalid,S50),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa004.xsd','./msxsdtest/Particles',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa004.xsd','./msxsdtest/Particles',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa004.xml','./msxsdtest/Particles',invalid,S51),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa004.xml','./msxsdtest/Particles',invalid,S51),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa005.xsd','./msxsdtest/Particles',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa005.xsd','./msxsdtest/Particles',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa005.xml','./msxsdtest/Particles',invalid,S52),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa005.xml','./msxsdtest/Particles',invalid,S52),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa006.xsd','./msxsdtest/Particles',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa006.xsd','./msxsdtest/Particles',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa006.xml','./msxsdtest/Particles',invalid,S53),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa006.xml','./msxsdtest/Particles',invalid,S53),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa007.xsd','./msxsdtest/Particles',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa007.xsd','./msxsdtest/Particles',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa007.xml','./msxsdtest/Particles',valid,S54),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa007.xml','./msxsdtest/Particles',valid,S54),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa008.xsd','./msxsdtest/Particles',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa008.xsd','./msxsdtest/Particles',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa008.xml','./msxsdtest/Particles',invalid,S55),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa008.xml','./msxsdtest/Particles',invalid,S55),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa009.xsd','./msxsdtest/Particles',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa009.xsd','./msxsdtest/Particles',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa009.xml','./msxsdtest/Particles',invalid,S56),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa009.xml','./msxsdtest/Particles',invalid,S56),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa010.xsd','./msxsdtest/Particles',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa010.xsd','./msxsdtest/Particles',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa010.xml','./msxsdtest/Particles',invalid,S57),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa010.xml','./msxsdtest/Particles',invalid,S57),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa011.xsd','./msxsdtest/Particles',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa011.xsd','./msxsdtest/Particles',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa011.xml','./msxsdtest/Particles',invalid,S58),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa011.xml','./msxsdtest/Particles',invalid,S58),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb001.xsd','./msxsdtest/Particles',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb001.xsd','./msxsdtest/Particles',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb001.xml','./msxsdtest/Particles',invalid,S59),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb001.xml','./msxsdtest/Particles',invalid,S59),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb002.xsd','./msxsdtest/Particles',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb002.xsd','./msxsdtest/Particles',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb002.xml','./msxsdtest/Particles',valid,S60),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb002.xml','./msxsdtest/Particles',valid,S60),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb003.xsd','./msxsdtest/Particles',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb003.xsd','./msxsdtest/Particles',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb003.xml','./msxsdtest/Particles',invalid,S61),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb003.xml','./msxsdtest/Particles',invalid,S61),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb004.xsd','./msxsdtest/Particles',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb004.xsd','./msxsdtest/Particles',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb004.xml','./msxsdtest/Particles',invalid,S62),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb004.xml','./msxsdtest/Particles',invalid,S62),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb005.xsd','./msxsdtest/Particles',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb005.xsd','./msxsdtest/Particles',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb005.xml','./msxsdtest/Particles',invalid,S63),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb005.xml','./msxsdtest/Particles',invalid,S63),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb006.xsd','./msxsdtest/Particles',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb006.xsd','./msxsdtest/Particles',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb006.xml','./msxsdtest/Particles',invalid,S64),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb006.xml','./msxsdtest/Particles',invalid,S64),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb007.xsd','./msxsdtest/Particles',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb007.xsd','./msxsdtest/Particles',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb007.xml','./msxsdtest/Particles',valid,S65),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb007.xml','./msxsdtest/Particles',valid,S65),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb008.xsd','./msxsdtest/Particles',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb008.xsd','./msxsdtest/Particles',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb008.xml','./msxsdtest/Particles',invalid,S66),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb008.xml','./msxsdtest/Particles',invalid,S66),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb009.xsd','./msxsdtest/Particles',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb009.xsd','./msxsdtest/Particles',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb009.xml','./msxsdtest/Particles',invalid,S67),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb009.xml','./msxsdtest/Particles',invalid,S67),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb010.xsd','./msxsdtest/Particles',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb010.xsd','./msxsdtest/Particles',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb010.xml','./msxsdtest/Particles',invalid,S68),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb010.xml','./msxsdtest/Particles',invalid,S68),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb011.xsd','./msxsdtest/Particles',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb011.xsd','./msxsdtest/Particles',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb011.xml','./msxsdtest/Particles',invalid,S69),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb011.xml','./msxsdtest/Particles',invalid,S69),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc001.xsd','./msxsdtest/Particles',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc001.xsd','./msxsdtest/Particles',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc001.xml','./msxsdtest/Particles',valid,S70),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc001.xml','./msxsdtest/Particles',valid,S70),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc002.xsd','./msxsdtest/Particles',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc002.xsd','./msxsdtest/Particles',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc002.xml','./msxsdtest/Particles',valid,S71),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc002.xml','./msxsdtest/Particles',valid,S71),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc003.xsd','./msxsdtest/Particles',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc003.xsd','./msxsdtest/Particles',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc003.xml','./msxsdtest/Particles',valid,S72),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc003.xml','./msxsdtest/Particles',valid,S72),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc004.xsd','./msxsdtest/Particles',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc004.xsd','./msxsdtest/Particles',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc004.xml','./msxsdtest/Particles',valid,S73),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc004.xml','./msxsdtest/Particles',valid,S73),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc005.xsd','./msxsdtest/Particles',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc005.xsd','./msxsdtest/Particles',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc005.xml','./msxsdtest/Particles',valid,S74),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc005.xml','./msxsdtest/Particles',valid,S74),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc006.xsd','./msxsdtest/Particles',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc006.xsd','./msxsdtest/Particles',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc006.xml','./msxsdtest/Particles',valid,S75),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc006.xml','./msxsdtest/Particles',valid,S75),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc007.xsd','./msxsdtest/Particles',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc007.xsd','./msxsdtest/Particles',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc007.xml','./msxsdtest/Particles',valid,S76),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc007.xml','./msxsdtest/Particles',valid,S76),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc008.xsd','./msxsdtest/Particles',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc008.xsd','./msxsdtest/Particles',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc008.xml','./msxsdtest/Particles',valid,S77),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc008.xml','./msxsdtest/Particles',valid,S77),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc009.xsd','./msxsdtest/Particles',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc009.xsd','./msxsdtest/Particles',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc009.xml','./msxsdtest/Particles',valid,S78),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc009.xml','./msxsdtest/Particles',valid,S78),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa001.xsd','./msxsdtest/Particles',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa001.xsd','./msxsdtest/Particles',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa001.xml','./msxsdtest/Particles',valid,S79),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa001.xml','./msxsdtest/Particles',valid,S79),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa002.xsd','./msxsdtest/Particles',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa002.xsd','./msxsdtest/Particles',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa002.xml','./msxsdtest/Particles',invalid,S80),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa002.xml','./msxsdtest/Particles',invalid,S80),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa003.xsd','./msxsdtest/Particles',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa003.xsd','./msxsdtest/Particles',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa003.xml','./msxsdtest/Particles',valid,S81),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa003.xml','./msxsdtest/Particles',valid,S81),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa004.xsd','./msxsdtest/Particles',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa004.xsd','./msxsdtest/Particles',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa004.xml','./msxsdtest/Particles',valid,S82),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa004.xml','./msxsdtest/Particles',valid,S82),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa005.xsd','./msxsdtest/Particles',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa005.xsd','./msxsdtest/Particles',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa005.xml','./msxsdtest/Particles',invalid,S83),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa005.xml','./msxsdtest/Particles',invalid,S83),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa006.xsd','./msxsdtest/Particles',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa006.xsd','./msxsdtest/Particles',valid),
STResList85 = [STRes84|STResList84],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa006.xml','./msxsdtest/Particles',invalid,S84),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa006.xml','./msxsdtest/Particles',invalid,S84),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa007.xsd','./msxsdtest/Particles',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa007.xsd','./msxsdtest/Particles',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa007.xml','./msxsdtest/Particles',invalid,S85),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa007.xml','./msxsdtest/Particles',invalid,S85),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa008.xsd','./msxsdtest/Particles',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa008.xsd','./msxsdtest/Particles',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa008.xml','./msxsdtest/Particles',valid,S86),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa008.xml','./msxsdtest/Particles',valid,S86),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa009.xsd','./msxsdtest/Particles',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa009.xsd','./msxsdtest/Particles',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa009.xml','./msxsdtest/Particles',invalid,S87),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa009.xml','./msxsdtest/Particles',invalid,S87),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa010.xsd','./msxsdtest/Particles',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa010.xsd','./msxsdtest/Particles',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa010.xml','./msxsdtest/Particles',valid,S88),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa010.xml','./msxsdtest/Particles',valid,S88),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa011.xsd','./msxsdtest/Particles',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa011.xsd','./msxsdtest/Particles',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa011.xml','./msxsdtest/Particles',valid,S89),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa011.xml','./msxsdtest/Particles',valid,S89),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa012.xsd','./msxsdtest/Particles',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa012.xsd','./msxsdtest/Particles',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa012.xml','./msxsdtest/Particles',invalid,S90),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa012.xml','./msxsdtest/Particles',invalid,S90),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa013.xsd','./msxsdtest/Particles',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa013.xsd','./msxsdtest/Particles',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa013.xml','./msxsdtest/Particles',invalid,S91),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa013.xml','./msxsdtest/Particles',invalid,S91),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa014.xsd','./msxsdtest/Particles',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa014.xsd','./msxsdtest/Particles',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa014.xml','./msxsdtest/Particles',invalid,S92),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa014.xml','./msxsdtest/Particles',invalid,S92),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa015.xsd','./msxsdtest/Particles',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa015.xsd','./msxsdtest/Particles',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa015.xml','./msxsdtest/Particles',valid,S93),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa015.xml','./msxsdtest/Particles',valid,S93),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa016.xsd','./msxsdtest/Particles',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa016.xsd','./msxsdtest/Particles',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa016.xml','./msxsdtest/Particles',invalid,S94),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa016.xml','./msxsdtest/Particles',invalid,S94),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa017.xsd','./msxsdtest/Particles',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa017.xsd','./msxsdtest/Particles',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa017.xml','./msxsdtest/Particles',valid,S95),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa017.xml','./msxsdtest/Particles',valid,S95),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa018.xsd','./msxsdtest/Particles',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa018.xsd','./msxsdtest/Particles',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa018.xml','./msxsdtest/Particles',valid,S96),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa018.xml','./msxsdtest/Particles',valid,S96),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa019.xsd','./msxsdtest/Particles',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa019.xsd','./msxsdtest/Particles',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa019.xml','./msxsdtest/Particles',invalid,S97),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa019.xml','./msxsdtest/Particles',invalid,S97),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa020.xsd','./msxsdtest/Particles',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa020.xsd','./msxsdtest/Particles',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa020.xml','./msxsdtest/Particles',invalid,S98),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa020.xml','./msxsdtest/Particles',invalid,S98),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa021.xsd','./msxsdtest/Particles',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa021.xsd','./msxsdtest/Particles',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa021.xml','./msxsdtest/Particles',invalid,S99),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa021.xml','./msxsdtest/Particles',invalid,S99),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa022.xsd','./msxsdtest/Particles',invalid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa022.xsd','./msxsdtest/Particles',invalid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa023.xsd','./msxsdtest/Particles',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa023.xsd','./msxsdtest/Particles',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa024.xsd','./msxsdtest/Particles',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa024.xsd','./msxsdtest/Particles',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa025.xsd','./msxsdtest/Particles',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa025.xsd','./msxsdtest/Particles',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb001.xsd','./msxsdtest/Particles',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb001.xsd','./msxsdtest/Particles',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb001.xml','./msxsdtest/Particles',valid,S104),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb001.xml','./msxsdtest/Particles',valid,S104),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb002.xsd','./msxsdtest/Particles',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb002.xsd','./msxsdtest/Particles',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb002.xml','./msxsdtest/Particles',invalid,S105),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb002.xml','./msxsdtest/Particles',invalid,S105),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb003.xsd','./msxsdtest/Particles',valid),
+ {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb003.xsd','./msxsdtest/Particles',valid),
STResList107 = [STRes106|STResList106],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb003.xml','./msxsdtest/Particles',valid,S106),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb003.xml','./msxsdtest/Particles',valid,S106),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb004.xsd','./msxsdtest/Particles',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb004.xsd','./msxsdtest/Particles',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb004.xml','./msxsdtest/Particles',invalid,S107),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb004.xml','./msxsdtest/Particles',invalid,S107),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb005.xsd','./msxsdtest/Particles',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb005.xsd','./msxsdtest/Particles',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb005.xml','./msxsdtest/Particles',invalid,S108),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb005.xml','./msxsdtest/Particles',invalid,S108),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb006.xsd','./msxsdtest/Particles',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb006.xsd','./msxsdtest/Particles',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb006.xml','./msxsdtest/Particles',invalid,S109),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb006.xml','./msxsdtest/Particles',invalid,S109),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb007.xsd','./msxsdtest/Particles',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb007.xsd','./msxsdtest/Particles',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb007.xml','./msxsdtest/Particles',invalid,S110),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb007.xml','./msxsdtest/Particles',invalid,S110),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb008.xsd','./msxsdtest/Particles',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb008.xsd','./msxsdtest/Particles',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb008.xml','./msxsdtest/Particles',invalid,S111),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb008.xml','./msxsdtest/Particles',invalid,S111),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb009.xsd','./msxsdtest/Particles',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb009.xsd','./msxsdtest/Particles',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb009.xml','./msxsdtest/Particles',invalid,S112),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb009.xml','./msxsdtest/Particles',invalid,S112),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb010.xsd','./msxsdtest/Particles',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb010.xsd','./msxsdtest/Particles',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb010.xml','./msxsdtest/Particles',valid,S113),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb010.xml','./msxsdtest/Particles',valid,S113),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb011.xsd','./msxsdtest/Particles',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb011.xsd','./msxsdtest/Particles',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb011.xml','./msxsdtest/Particles',invalid,S114),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb011.xml','./msxsdtest/Particles',invalid,S114),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb012.xsd','./msxsdtest/Particles',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb012.xsd','./msxsdtest/Particles',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb012.xml','./msxsdtest/Particles',invalid,S115),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb012.xml','./msxsdtest/Particles',invalid,S115),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb013.xsd','./msxsdtest/Particles',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb013.xsd','./msxsdtest/Particles',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb013.xml','./msxsdtest/Particles',invalid,S116),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb013.xml','./msxsdtest/Particles',invalid,S116),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb014.xsd','./msxsdtest/Particles',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb014.xsd','./msxsdtest/Particles',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb014.xml','./msxsdtest/Particles',invalid,S117),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb014.xml','./msxsdtest/Particles',invalid,S117),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb015.xsd','./msxsdtest/Particles',invalid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb015.xsd','./msxsdtest/Particles',invalid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb016.xsd','./msxsdtest/Particles',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb016.xsd','./msxsdtest/Particles',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb016.xml','./msxsdtest/Particles',valid,S119),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb016.xml','./msxsdtest/Particles',valid,S119),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb017.xsd','./msxsdtest/Particles',valid),
+ {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb017.xsd','./msxsdtest/Particles',valid),
STResList121 = [STRes120|STResList120],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb017.xml','./msxsdtest/Particles',invalid,S120),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb017.xml','./msxsdtest/Particles',invalid,S120),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb018.xsd','./msxsdtest/Particles',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb018.xsd','./msxsdtest/Particles',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb018.xml','./msxsdtest/Particles',invalid,S121),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb018.xml','./msxsdtest/Particles',invalid,S121),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb019.xsd','./msxsdtest/Particles',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb019.xsd','./msxsdtest/Particles',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb019.xml','./msxsdtest/Particles',valid,S122),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb019.xml','./msxsdtest/Particles',valid,S122),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb020.xsd','./msxsdtest/Particles',valid),
+ {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb020.xsd','./msxsdtest/Particles',valid),
STResList124 = [STRes123|STResList123],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb020.xml','./msxsdtest/Particles',invalid,S123),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb020.xml','./msxsdtest/Particles',invalid,S123),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb021.xsd','./msxsdtest/Particles',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb021.xsd','./msxsdtest/Particles',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb021.xml','./msxsdtest/Particles',invalid,S124),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb021.xml','./msxsdtest/Particles',invalid,S124),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb022.xsd','./msxsdtest/Particles',valid),
+ {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb022.xsd','./msxsdtest/Particles',valid),
STResList126 = [STRes125|STResList125],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb022.xml','./msxsdtest/Particles',invalid,S125),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb022.xml','./msxsdtest/Particles',invalid,S125),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb023.xsd','./msxsdtest/Particles',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb023.xsd','./msxsdtest/Particles',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb023.xml','./msxsdtest/Particles',invalid,S126),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb023.xml','./msxsdtest/Particles',invalid,S126),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb024.xsd','./msxsdtest/Particles',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb024.xsd','./msxsdtest/Particles',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb024.xml','./msxsdtest/Particles',invalid,S127),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb024.xml','./msxsdtest/Particles',invalid,S127),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb025.xsd','./msxsdtest/Particles',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb025.xsd','./msxsdtest/Particles',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb025.xml','./msxsdtest/Particles',invalid,S128),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb025.xml','./msxsdtest/Particles',invalid,S128),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb026.xsd','./msxsdtest/Particles',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb026.xsd','./msxsdtest/Particles',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb026.xml','./msxsdtest/Particles',valid,S129),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb026.xml','./msxsdtest/Particles',valid,S129),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb027.xsd','./msxsdtest/Particles',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb027.xsd','./msxsdtest/Particles',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb027.xml','./msxsdtest/Particles',valid,S130),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb027.xml','./msxsdtest/Particles',valid,S130),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb028.xsd','./msxsdtest/Particles',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb028.xsd','./msxsdtest/Particles',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb028.xml','./msxsdtest/Particles',invalid,S131),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb028.xml','./msxsdtest/Particles',invalid,S131),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb029.xsd','./msxsdtest/Particles',valid),
+ {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb029.xsd','./msxsdtest/Particles',valid),
STResList133 = [STRes132|STResList132],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb029.xml','./msxsdtest/Particles',invalid,S132),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb029.xml','./msxsdtest/Particles',invalid,S132),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb030.xsd','./msxsdtest/Particles',valid),
+ {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb030.xsd','./msxsdtest/Particles',valid),
STResList134 = [STRes133|STResList133],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb030.xml','./msxsdtest/Particles',invalid,S133),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb030.xml','./msxsdtest/Particles',invalid,S133),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb031.xsd','./msxsdtest/Particles',valid),
+ {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb031.xsd','./msxsdtest/Particles',valid),
STResList135 = [STRes134|STResList134],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb031.xml','./msxsdtest/Particles',invalid,S134),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb031.xml','./msxsdtest/Particles',invalid,S134),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb032.xsd','./msxsdtest/Particles',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb032.xsd','./msxsdtest/Particles',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb032.xml','./msxsdtest/Particles',invalid,S135),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb032.xml','./msxsdtest/Particles',invalid,S135),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb033.xsd','./msxsdtest/Particles',valid),
+ {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb033.xsd','./msxsdtest/Particles',valid),
STResList137 = [STRes136|STResList136],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb033.xml','./msxsdtest/Particles',invalid,S136),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb033.xml','./msxsdtest/Particles',invalid,S136),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb034.xsd','./msxsdtest/Particles',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb034.xsd','./msxsdtest/Particles',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb034.xml','./msxsdtest/Particles',invalid,S137),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb034.xml','./msxsdtest/Particles',invalid,S137),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb035.xsd','./msxsdtest/Particles',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb035.xsd','./msxsdtest/Particles',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb035.xml','./msxsdtest/Particles',invalid,S138),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb035.xml','./msxsdtest/Particles',invalid,S138),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb036.xsd','./msxsdtest/Particles',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb036.xsd','./msxsdtest/Particles',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb036.xml','./msxsdtest/Particles',valid,S139),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb036.xml','./msxsdtest/Particles',valid,S139),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb037.xsd','./msxsdtest/Particles',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb037.xsd','./msxsdtest/Particles',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb037.xml','./msxsdtest/Particles',invalid,S140),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb037.xml','./msxsdtest/Particles',invalid,S140),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb038.xsd','./msxsdtest/Particles',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb038.xsd','./msxsdtest/Particles',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb038.xml','./msxsdtest/Particles',valid,S141),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb038.xml','./msxsdtest/Particles',valid,S141),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb039.xsd','./msxsdtest/Particles',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb039.xsd','./msxsdtest/Particles',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb039.xml','./msxsdtest/Particles',invalid,S142),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb039.xml','./msxsdtest/Particles',invalid,S142),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc001.xsd','./msxsdtest/Particles',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc001.xsd','./msxsdtest/Particles',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc001.xml','./msxsdtest/Particles',valid,S143),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc001.xml','./msxsdtest/Particles',valid,S143),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc002.xsd','./msxsdtest/Particles',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc002.xsd','./msxsdtest/Particles',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc002.xml','./msxsdtest/Particles',valid,S144),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc002.xml','./msxsdtest/Particles',valid,S144),
ITResList140 = [ITRes139|ITResList139],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc003.xsd','./msxsdtest/Particles',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc003.xsd','./msxsdtest/Particles',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc003.xml','./msxsdtest/Particles',invalid,S145),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc003.xml','./msxsdtest/Particles',invalid,S145),
ITResList141 = [ITRes140|ITResList140],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc004.xsd','./msxsdtest/Particles',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc004.xsd','./msxsdtest/Particles',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc004.xml','./msxsdtest/Particles',invalid,S146),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc004.xml','./msxsdtest/Particles',invalid,S146),
ITResList142 = [ITRes141|ITResList141],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc005.xsd','./msxsdtest/Particles',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc005.xsd','./msxsdtest/Particles',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc005.xml','./msxsdtest/Particles',invalid,S147),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc005.xml','./msxsdtest/Particles',invalid,S147),
ITResList143 = [ITRes142|ITResList142],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc006.xsd','./msxsdtest/Particles',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc006.xsd','./msxsdtest/Particles',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc006.xml','./msxsdtest/Particles',valid,S148),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc006.xml','./msxsdtest/Particles',valid,S148),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc007.xsd','./msxsdtest/Particles',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc007.xsd','./msxsdtest/Particles',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc007.xml','./msxsdtest/Particles',invalid,S149),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc007.xml','./msxsdtest/Particles',invalid,S149),
ITResList145 = [ITRes144|ITResList144],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc008.xsd','./msxsdtest/Particles',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc008.xsd','./msxsdtest/Particles',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc008.xml','./msxsdtest/Particles',invalid,S150),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc008.xml','./msxsdtest/Particles',invalid,S150),
ITResList146 = [ITRes145|ITResList145],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc009.xsd','./msxsdtest/Particles',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc009.xsd','./msxsdtest/Particles',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc010.xsd','./msxsdtest/Particles',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc010.xsd','./msxsdtest/Particles',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc010.xml','./msxsdtest/Particles',valid,S152),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc010.xml','./msxsdtest/Particles',valid,S152),
ITResList147 = [ITRes146|ITResList146],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc011.xsd','./msxsdtest/Particles',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc011.xsd','./msxsdtest/Particles',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc011.xml','./msxsdtest/Particles',invalid,S153),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc011.xml','./msxsdtest/Particles',invalid,S153),
ITResList148 = [ITRes147|ITResList147],
- ?line {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc012.xsd','./msxsdtest/Particles',valid),
+ {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc012.xsd','./msxsdtest/Particles',valid),
STResList155 = [STRes154|STResList154],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc012.xml','./msxsdtest/Particles',valid,S154),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc012.xml','./msxsdtest/Particles',valid,S154),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc013.xsd','./msxsdtest/Particles',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc013.xsd','./msxsdtest/Particles',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc013.xml','./msxsdtest/Particles',invalid,S155),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc013.xml','./msxsdtest/Particles',invalid,S155),
ITResList150 = [ITRes149|ITResList149],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc014.xsd','./msxsdtest/Particles',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc014.xsd','./msxsdtest/Particles',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc014.xml','./msxsdtest/Particles',invalid,S156),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc014.xml','./msxsdtest/Particles',invalid,S156),
ITResList151 = [ITRes150|ITResList150],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc015.xsd','./msxsdtest/Particles',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc015.xsd','./msxsdtest/Particles',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc015.xml','./msxsdtest/Particles',invalid,S157),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc015.xml','./msxsdtest/Particles',invalid,S157),
ITResList152 = [ITRes151|ITResList151],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc016.xsd','./msxsdtest/Particles',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc016.xsd','./msxsdtest/Particles',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc016.xml','./msxsdtest/Particles',valid,S158),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc016.xml','./msxsdtest/Particles',valid,S158),
ITResList153 = [ITRes152|ITResList152],
- ?line {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc017.xsd','./msxsdtest/Particles',valid),
+ {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc017.xsd','./msxsdtest/Particles',valid),
STResList160 = [STRes159|STResList159],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc017.xml','./msxsdtest/Particles',valid,S159),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc017.xml','./msxsdtest/Particles',valid,S159),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc018.xsd','./msxsdtest/Particles',valid),
+ {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc018.xsd','./msxsdtest/Particles',valid),
STResList161 = [STRes160|STResList160],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc018.xml','./msxsdtest/Particles',valid,S160),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc018.xml','./msxsdtest/Particles',valid,S160),
ITResList155 = [ITRes154|ITResList154],
- ?line {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc019.xsd','./msxsdtest/Particles',valid),
+ {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc019.xsd','./msxsdtest/Particles',valid),
STResList162 = [STRes161|STResList161],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc019.xml','./msxsdtest/Particles',valid,S161),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc019.xml','./msxsdtest/Particles',valid,S161),
ITResList156 = [ITRes155|ITResList155],
- ?line {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc020.xsd','./msxsdtest/Particles',valid),
+ {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc020.xsd','./msxsdtest/Particles',valid),
STResList163 = [STRes162|STResList162],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc020.xml','./msxsdtest/Particles',valid,S162),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc020.xml','./msxsdtest/Particles',valid,S162),
ITResList157 = [ITRes156|ITResList156],
- ?line {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc021.xsd','./msxsdtest/Particles',valid),
+ {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc021.xsd','./msxsdtest/Particles',valid),
STResList164 = [STRes163|STResList163],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc021.xml','./msxsdtest/Particles',valid,S163),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc021.xml','./msxsdtest/Particles',valid,S163),
ITResList158 = [ITRes157|ITResList157],
- ?line {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc022.xsd','./msxsdtest/Particles',valid),
+ {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc022.xsd','./msxsdtest/Particles',valid),
STResList165 = [STRes164|STResList164],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc022.xml','./msxsdtest/Particles',invalid,S164),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc022.xml','./msxsdtest/Particles',invalid,S164),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc023.xsd','./msxsdtest/Particles',valid),
+ {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc023.xsd','./msxsdtest/Particles',valid),
STResList166 = [STRes165|STResList165],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc023.xml','./msxsdtest/Particles',invalid,S165),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc023.xml','./msxsdtest/Particles',invalid,S165),
ITResList160 = [ITRes159|ITResList159],
- ?line {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc024.xsd','./msxsdtest/Particles',valid),
+ {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc024.xsd','./msxsdtest/Particles',valid),
STResList167 = [STRes166|STResList166],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc024.xml','./msxsdtest/Particles',invalid,S166),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc024.xml','./msxsdtest/Particles',invalid,S166),
ITResList161 = [ITRes160|ITResList160],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc025.xsd','./msxsdtest/Particles',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc025.xsd','./msxsdtest/Particles',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc025.xml','./msxsdtest/Particles',invalid,S167),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc025.xml','./msxsdtest/Particles',invalid,S167),
ITResList162 = [ITRes161|ITResList161],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc026.xsd','./msxsdtest/Particles',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc026.xsd','./msxsdtest/Particles',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc026.xml','./msxsdtest/Particles',invalid,S168),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc026.xml','./msxsdtest/Particles',invalid,S168),
ITResList163 = [ITRes162|ITResList162],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc027.xsd','./msxsdtest/Particles',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc027.xsd','./msxsdtest/Particles',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc027.xml','./msxsdtest/Particles',invalid,S169),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc027.xml','./msxsdtest/Particles',invalid,S169),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc028.xsd','./msxsdtest/Particles',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc028.xsd','./msxsdtest/Particles',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc028.xml','./msxsdtest/Particles',invalid,S170),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc028.xml','./msxsdtest/Particles',invalid,S170),
ITResList165 = [ITRes164|ITResList164],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc029.xsd','./msxsdtest/Particles',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc029.xsd','./msxsdtest/Particles',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc029.xml','./msxsdtest/Particles',valid,S171),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc029.xml','./msxsdtest/Particles',valid,S171),
ITResList166 = [ITRes165|ITResList165],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc030.xsd','./msxsdtest/Particles',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc030.xsd','./msxsdtest/Particles',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc030.xml','./msxsdtest/Particles',valid,S172),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc030.xml','./msxsdtest/Particles',valid,S172),
ITResList167 = [ITRes166|ITResList166],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc031.xsd','./msxsdtest/Particles',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc031.xsd','./msxsdtest/Particles',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc031.xml','./msxsdtest/Particles',valid,S173),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc031.xml','./msxsdtest/Particles',valid,S173),
ITResList168 = [ITRes167|ITResList167],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc032.xsd','./msxsdtest/Particles',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc032.xsd','./msxsdtest/Particles',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc032.xml','./msxsdtest/Particles',valid,S174),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc032.xml','./msxsdtest/Particles',valid,S174),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc033.xsd','./msxsdtest/Particles',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc033.xsd','./msxsdtest/Particles',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc033.xml','./msxsdtest/Particles',valid,S175),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc033.xml','./msxsdtest/Particles',valid,S175),
ITResList170 = [ITRes169|ITResList169],
- ?line {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc034.xsd','./msxsdtest/Particles',valid),
+ {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc034.xsd','./msxsdtest/Particles',valid),
STResList177 = [STRes176|STResList176],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc034.xml','./msxsdtest/Particles',valid,S176),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc034.xml','./msxsdtest/Particles',valid,S176),
ITResList171 = [ITRes170|ITResList170],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc035.xsd','./msxsdtest/Particles',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc035.xsd','./msxsdtest/Particles',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc035.xml','./msxsdtest/Particles',valid,S177),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc035.xml','./msxsdtest/Particles',valid,S177),
ITResList172 = [ITRes171|ITResList171],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc036.xsd','./msxsdtest/Particles',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc036.xsd','./msxsdtest/Particles',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc036.xml','./msxsdtest/Particles',valid,S178),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc036.xml','./msxsdtest/Particles',valid,S178),
ITResList173 = [ITRes172|ITResList172],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc037.xsd','./msxsdtest/Particles',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc037.xsd','./msxsdtest/Particles',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc037.xml','./msxsdtest/Particles',valid,S179),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc037.xml','./msxsdtest/Particles',valid,S179),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc038.xsd','./msxsdtest/Particles',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc038.xsd','./msxsdtest/Particles',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc038.xml','./msxsdtest/Particles',invalid,S180),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc038.xml','./msxsdtest/Particles',invalid,S180),
ITResList175 = [ITRes174|ITResList174],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc039.xsd','./msxsdtest/Particles',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc039.xsd','./msxsdtest/Particles',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc039.xml','./msxsdtest/Particles',invalid,S181),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc039.xml','./msxsdtest/Particles',invalid,S181),
ITResList176 = [ITRes175|ITResList175],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc040.xsd','./msxsdtest/Particles',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc040.xsd','./msxsdtest/Particles',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc040.xml','./msxsdtest/Particles',invalid,S182),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc040.xml','./msxsdtest/Particles',invalid,S182),
ITResList177 = [ITRes176|ITResList176],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc041.xsd','./msxsdtest/Particles',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc041.xsd','./msxsdtest/Particles',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc041.xml','./msxsdtest/Particles',invalid,S183),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc041.xml','./msxsdtest/Particles',invalid,S183),
ITResList178 = [ITRes177|ITResList177],
- ?line {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEd001.xsd','./msxsdtest/Particles',invalid),
+ {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEd001.xsd','./msxsdtest/Particles',invalid),
STResList185 = [STRes184|STResList184],
@@ -19333,764 +19321,764 @@ particlesCDE(Config) when is_list(Config) ->
particlesFHI(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa001.xml','./msxsdtest/Particles',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa001.xml','./msxsdtest/Particles',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa003.xsd','./msxsdtest/Particles',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa003.xsd','./msxsdtest/Particles',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa003.xml','./msxsdtest/Particles',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa003.xml','./msxsdtest/Particles',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa004.xsd','./msxsdtest/Particles',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa004.xsd','./msxsdtest/Particles',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa004.xml','./msxsdtest/Particles',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa004.xml','./msxsdtest/Particles',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa005.xml','./msxsdtest/Particles',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa005.xml','./msxsdtest/Particles',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb001.xsd','./msxsdtest/Particles',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb001.xsd','./msxsdtest/Particles',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFb001.xml','./msxsdtest/Particles',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFb001.xml','./msxsdtest/Particles',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb002.xsd','./msxsdtest/Particles',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb002.xsd','./msxsdtest/Particles',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb003.xsd','./msxsdtest/Particles',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb003.xsd','./msxsdtest/Particles',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb004.xsd','./msxsdtest/Particles',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb004.xsd','./msxsdtest/Particles',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFb004.xml','./msxsdtest/Particles',valid,S8),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFb004.xml','./msxsdtest/Particles',valid,S8),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb005.xsd','./msxsdtest/Particles',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb005.xsd','./msxsdtest/Particles',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb006.xsd','./msxsdtest/Particles',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb006.xsd','./msxsdtest/Particles',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa001.xsd','./msxsdtest/Particles',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa001.xsd','./msxsdtest/Particles',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa001.xml','./msxsdtest/Particles',valid,S11),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa001.xml','./msxsdtest/Particles',valid,S11),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa002.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa002.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa002.xml','./msxsdtest/Particles',valid,S12),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa002.xml','./msxsdtest/Particles',valid,S12),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa003.xsd','./msxsdtest/Particles',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa003.xsd','./msxsdtest/Particles',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa003.xml','./msxsdtest/Particles',valid,S13),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa003.xml','./msxsdtest/Particles',valid,S13),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa004.xsd','./msxsdtest/Particles',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa004.xsd','./msxsdtest/Particles',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa004.xml','./msxsdtest/Particles',valid,S14),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa004.xml','./msxsdtest/Particles',valid,S14),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa005.xsd','./msxsdtest/Particles',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa005.xsd','./msxsdtest/Particles',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa005.xml','./msxsdtest/Particles',valid,S15),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa005.xml','./msxsdtest/Particles',valid,S15),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa006.xsd','./msxsdtest/Particles',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa006.xsd','./msxsdtest/Particles',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa006.xml','./msxsdtest/Particles',valid,S16),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa006.xml','./msxsdtest/Particles',valid,S16),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa007.xsd','./msxsdtest/Particles',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa007.xsd','./msxsdtest/Particles',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa007.xml','./msxsdtest/Particles',valid,S17),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa007.xml','./msxsdtest/Particles',valid,S17),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa008.xsd','./msxsdtest/Particles',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa008.xsd','./msxsdtest/Particles',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa009.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa009.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa009.xml','./msxsdtest/Particles',valid,S19),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa009.xml','./msxsdtest/Particles',valid,S19),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa010.xsd','./msxsdtest/Particles',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa010.xsd','./msxsdtest/Particles',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa010.xml','./msxsdtest/Particles',valid,S20),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa010.xml','./msxsdtest/Particles',valid,S20),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa011.xsd','./msxsdtest/Particles',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa011.xsd','./msxsdtest/Particles',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa011.xml','./msxsdtest/Particles',valid,S21),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa011.xml','./msxsdtest/Particles',valid,S21),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa012.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa012.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa012.xml','./msxsdtest/Particles',valid,S22),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa012.xml','./msxsdtest/Particles',valid,S22),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa013.xsd','./msxsdtest/Particles',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa013.xsd','./msxsdtest/Particles',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa013.xml','./msxsdtest/Particles',valid,S23),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa013.xml','./msxsdtest/Particles',valid,S23),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa014.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa014.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa014.xml','./msxsdtest/Particles',valid,S24),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa014.xml','./msxsdtest/Particles',valid,S24),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa015.xsd','./msxsdtest/Particles',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa015.xsd','./msxsdtest/Particles',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa015.xml','./msxsdtest/Particles',valid,S25),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa015.xml','./msxsdtest/Particles',valid,S25),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa016.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa016.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa016.xml','./msxsdtest/Particles',valid,S26),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa016.xml','./msxsdtest/Particles',valid,S26),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa017.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa017.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa017.xml','./msxsdtest/Particles',valid,S27),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa017.xml','./msxsdtest/Particles',valid,S27),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa018.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa018.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa018.xml','./msxsdtest/Particles',valid,S28),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa018.xml','./msxsdtest/Particles',valid,S28),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb001.xsd','./msxsdtest/Particles',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb001.xsd','./msxsdtest/Particles',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb002.xsd','./msxsdtest/Particles',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb002.xsd','./msxsdtest/Particles',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb003.xsd','./msxsdtest/Particles',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb003.xsd','./msxsdtest/Particles',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb004.xsd','./msxsdtest/Particles',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb004.xsd','./msxsdtest/Particles',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb006.xsd','./msxsdtest/Particles',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb006.xsd','./msxsdtest/Particles',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb007.xsd','./msxsdtest/Particles',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb007.xsd','./msxsdtest/Particles',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb008.xsd','./msxsdtest/Particles',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb008.xsd','./msxsdtest/Particles',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb009.xsd','./msxsdtest/Particles',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb009.xsd','./msxsdtest/Particles',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb010.xsd','./msxsdtest/Particles',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb010.xsd','./msxsdtest/Particles',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb011.xsd','./msxsdtest/Particles',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb011.xsd','./msxsdtest/Particles',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa001.xsd','./msxsdtest/Particles',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa001.xsd','./msxsdtest/Particles',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa001.xml','./msxsdtest/Particles',valid,S39),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa001.xml','./msxsdtest/Particles',valid,S39),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa003.xsd','./msxsdtest/Particles',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa003.xsd','./msxsdtest/Particles',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa003.xml','./msxsdtest/Particles',valid,S40),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa003.xml','./msxsdtest/Particles',valid,S40),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa004.xsd','./msxsdtest/Particles',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa004.xsd','./msxsdtest/Particles',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa004.xml','./msxsdtest/Particles',valid,S41),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa004.xml','./msxsdtest/Particles',valid,S41),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa005.xsd','./msxsdtest/Particles',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa005.xsd','./msxsdtest/Particles',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa005.xml','./msxsdtest/Particles',valid,S42),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa005.xml','./msxsdtest/Particles',valid,S42),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa006.xsd','./msxsdtest/Particles',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa006.xsd','./msxsdtest/Particles',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa008.xsd','./msxsdtest/Particles',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa008.xsd','./msxsdtest/Particles',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb001.xsd','./msxsdtest/Particles',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb001.xsd','./msxsdtest/Particles',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb001.xml','./msxsdtest/Particles',valid,S45),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb001.xml','./msxsdtest/Particles',valid,S45),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb002.xsd','./msxsdtest/Particles',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb002.xsd','./msxsdtest/Particles',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb003.xsd','./msxsdtest/Particles',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb003.xsd','./msxsdtest/Particles',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb003.xml','./msxsdtest/Particles',valid,S47),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb003.xml','./msxsdtest/Particles',valid,S47),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb004.xsd','./msxsdtest/Particles',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb004.xsd','./msxsdtest/Particles',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb005.xsd','./msxsdtest/Particles',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb005.xsd','./msxsdtest/Particles',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb005.xml','./msxsdtest/Particles',valid,S49),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb005.xml','./msxsdtest/Particles',valid,S49),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb006.xsd','./msxsdtest/Particles',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb006.xsd','./msxsdtest/Particles',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb007.xsd','./msxsdtest/Particles',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb007.xsd','./msxsdtest/Particles',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc001.xsd','./msxsdtest/Particles',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc001.xsd','./msxsdtest/Particles',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc001.xml','./msxsdtest/Particles',valid,S52),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc001.xml','./msxsdtest/Particles',valid,S52),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc002.xsd','./msxsdtest/Particles',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc002.xsd','./msxsdtest/Particles',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc003.xsd','./msxsdtest/Particles',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc003.xsd','./msxsdtest/Particles',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc004.xsd','./msxsdtest/Particles',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc004.xsd','./msxsdtest/Particles',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc005.xsd','./msxsdtest/Particles',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc005.xsd','./msxsdtest/Particles',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc005.xml','./msxsdtest/Particles',valid,S56),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc005.xml','./msxsdtest/Particles',valid,S56),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc006.xsd','./msxsdtest/Particles',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc006.xsd','./msxsdtest/Particles',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc006.xml','./msxsdtest/Particles',valid,S57),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc006.xml','./msxsdtest/Particles',valid,S57),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc007.xsd','./msxsdtest/Particles',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc007.xsd','./msxsdtest/Particles',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc007.xml','./msxsdtest/Particles',valid,S58),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc007.xml','./msxsdtest/Particles',valid,S58),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId001.xsd','./msxsdtest/Particles',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId001.xsd','./msxsdtest/Particles',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId001.xml','./msxsdtest/Particles',valid,S59),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId001.xml','./msxsdtest/Particles',valid,S59),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId002.xsd','./msxsdtest/Particles',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId002.xsd','./msxsdtest/Particles',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId002.xml','./msxsdtest/Particles',valid,S60),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId002.xml','./msxsdtest/Particles',valid,S60),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId003.xsd','./msxsdtest/Particles',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId003.xsd','./msxsdtest/Particles',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId004.xsd','./msxsdtest/Particles',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId004.xsd','./msxsdtest/Particles',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId004.xml','./msxsdtest/Particles',valid,S62),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId004.xml','./msxsdtest/Particles',valid,S62),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId005.xsd','./msxsdtest/Particles',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId005.xsd','./msxsdtest/Particles',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId005.xml','./msxsdtest/Particles',valid,S63),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId005.xml','./msxsdtest/Particles',valid,S63),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId006.xsd','./msxsdtest/Particles',invalid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId006.xsd','./msxsdtest/Particles',invalid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId007.xsd','./msxsdtest/Particles',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId007.xsd','./msxsdtest/Particles',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId007.xml','./msxsdtest/Particles',valid,S65),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId007.xml','./msxsdtest/Particles',valid,S65),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId008.xsd','./msxsdtest/Particles',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId008.xsd','./msxsdtest/Particles',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId008.xml','./msxsdtest/Particles',valid,S66),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId008.xml','./msxsdtest/Particles',valid,S66),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId009.xsd','./msxsdtest/Particles',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId009.xsd','./msxsdtest/Particles',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId009.xml','./msxsdtest/Particles',valid,S67),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId009.xml','./msxsdtest/Particles',valid,S67),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId010.xsd','./msxsdtest/Particles',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId010.xsd','./msxsdtest/Particles',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId010.xml','./msxsdtest/Particles',valid,S68),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId010.xml','./msxsdtest/Particles',valid,S68),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId011.xsd','./msxsdtest/Particles',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId011.xsd','./msxsdtest/Particles',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId011.xml','./msxsdtest/Particles',valid,S69),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId011.xml','./msxsdtest/Particles',valid,S69),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId012.xsd','./msxsdtest/Particles',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId012.xsd','./msxsdtest/Particles',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe001.xsd','./msxsdtest/Particles',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe001.xsd','./msxsdtest/Particles',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe001.xml','./msxsdtest/Particles',valid,S71),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe001.xml','./msxsdtest/Particles',valid,S71),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe002.xsd','./msxsdtest/Particles',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe002.xsd','./msxsdtest/Particles',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe002.xml','./msxsdtest/Particles',valid,S72),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe002.xml','./msxsdtest/Particles',valid,S72),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe003.xsd','./msxsdtest/Particles',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe003.xsd','./msxsdtest/Particles',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe003.xml','./msxsdtest/Particles',valid,S73),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe003.xml','./msxsdtest/Particles',valid,S73),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe004.xsd','./msxsdtest/Particles',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe004.xsd','./msxsdtest/Particles',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe004.xml','./msxsdtest/Particles',valid,S74),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe004.xml','./msxsdtest/Particles',valid,S74),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe005.xsd','./msxsdtest/Particles',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe005.xsd','./msxsdtest/Particles',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe005.xml','./msxsdtest/Particles',valid,S75),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe005.xml','./msxsdtest/Particles',valid,S75),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe006.xsd','./msxsdtest/Particles',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe006.xsd','./msxsdtest/Particles',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe007.xsd','./msxsdtest/Particles',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe007.xsd','./msxsdtest/Particles',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe007.xml','./msxsdtest/Particles',valid,S77),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe007.xml','./msxsdtest/Particles',valid,S77),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe008.xsd','./msxsdtest/Particles',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe008.xsd','./msxsdtest/Particles',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe008.xml','./msxsdtest/Particles',valid,S78),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe008.xml','./msxsdtest/Particles',valid,S78),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe009.xsd','./msxsdtest/Particles',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe009.xsd','./msxsdtest/Particles',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe010.xsd','./msxsdtest/Particles',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe010.xsd','./msxsdtest/Particles',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe010.xml','./msxsdtest/Particles',valid,S80),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe010.xml','./msxsdtest/Particles',valid,S80),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe011.xsd','./msxsdtest/Particles',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe011.xsd','./msxsdtest/Particles',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe011.xml','./msxsdtest/Particles',valid,S81),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe011.xml','./msxsdtest/Particles',valid,S81),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe012.xsd','./msxsdtest/Particles',invalid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe012.xsd','./msxsdtest/Particles',invalid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe013.xsd','./msxsdtest/Particles',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe013.xsd','./msxsdtest/Particles',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe013.xml','./msxsdtest/Particles',valid,S83),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe013.xml','./msxsdtest/Particles',valid,S83),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe014.xsd','./msxsdtest/Particles',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe014.xsd','./msxsdtest/Particles',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe015.xsd','./msxsdtest/Particles',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe015.xsd','./msxsdtest/Particles',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe015.xml','./msxsdtest/Particles',valid,S85),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe015.xml','./msxsdtest/Particles',valid,S85),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe016.xsd','./msxsdtest/Particles',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe016.xsd','./msxsdtest/Particles',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe016.xml','./msxsdtest/Particles',valid,S86),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe016.xml','./msxsdtest/Particles',valid,S86),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf001.xsd','./msxsdtest/Particles',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf001.xsd','./msxsdtest/Particles',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf001.xml','./msxsdtest/Particles',valid,S87),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf001.xml','./msxsdtest/Particles',valid,S87),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf002.xsd','./msxsdtest/Particles',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf002.xsd','./msxsdtest/Particles',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf002.xml','./msxsdtest/Particles',valid,S88),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf002.xml','./msxsdtest/Particles',valid,S88),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf003.xsd','./msxsdtest/Particles',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf003.xsd','./msxsdtest/Particles',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf003.xml','./msxsdtest/Particles',valid,S89),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf003.xml','./msxsdtest/Particles',valid,S89),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf004.xsd','./msxsdtest/Particles',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf004.xsd','./msxsdtest/Particles',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf004.xml','./msxsdtest/Particles',valid,S90),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf004.xml','./msxsdtest/Particles',valid,S90),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf005.xsd','./msxsdtest/Particles',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf005.xsd','./msxsdtest/Particles',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf005.xml','./msxsdtest/Particles',valid,S91),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf005.xml','./msxsdtest/Particles',valid,S91),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf006.xsd','./msxsdtest/Particles',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf006.xsd','./msxsdtest/Particles',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf006.xml','./msxsdtest/Particles',valid,S92),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf006.xml','./msxsdtest/Particles',valid,S92),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf007.xsd','./msxsdtest/Particles',invalid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf007.xsd','./msxsdtest/Particles',invalid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf008.xsd','./msxsdtest/Particles',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf008.xsd','./msxsdtest/Particles',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf009.xsd','./msxsdtest/Particles',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf009.xsd','./msxsdtest/Particles',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg001.xsd','./msxsdtest/Particles',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg001.xsd','./msxsdtest/Particles',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg001.xml','./msxsdtest/Particles',valid,S96),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg001.xml','./msxsdtest/Particles',valid,S96),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg002.xsd','./msxsdtest/Particles',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg002.xsd','./msxsdtest/Particles',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg002.xml','./msxsdtest/Particles',valid,S97),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg002.xml','./msxsdtest/Particles',valid,S97),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg003.xsd','./msxsdtest/Particles',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg003.xsd','./msxsdtest/Particles',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg003.xml','./msxsdtest/Particles',valid,S98),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg003.xml','./msxsdtest/Particles',valid,S98),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg004.xsd','./msxsdtest/Particles',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg004.xsd','./msxsdtest/Particles',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg005.xsd','./msxsdtest/Particles',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg005.xsd','./msxsdtest/Particles',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg005.xml','./msxsdtest/Particles',valid,S100),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg005.xml','./msxsdtest/Particles',valid,S100),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg006.xsd','./msxsdtest/Particles',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg006.xsd','./msxsdtest/Particles',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg007.xsd','./msxsdtest/Particles',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg007.xsd','./msxsdtest/Particles',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg008.xsd','./msxsdtest/Particles',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg008.xsd','./msxsdtest/Particles',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg009.xsd','./msxsdtest/Particles',invalid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg009.xsd','./msxsdtest/Particles',invalid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg010.xsd','./msxsdtest/Particles',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg010.xsd','./msxsdtest/Particles',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg011.xsd','./msxsdtest/Particles',valid),
+ {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg011.xsd','./msxsdtest/Particles',valid),
STResList107 = [STRes106|STResList106],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg011.xml','./msxsdtest/Particles',valid,S106),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg011.xml','./msxsdtest/Particles',valid,S106),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg012.xsd','./msxsdtest/Particles',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg012.xsd','./msxsdtest/Particles',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg012.xml','./msxsdtest/Particles',valid,S107),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg012.xml','./msxsdtest/Particles',valid,S107),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg013.xsd','./msxsdtest/Particles',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg013.xsd','./msxsdtest/Particles',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg014.xsd','./msxsdtest/Particles',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg014.xsd','./msxsdtest/Particles',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg014.xml','./msxsdtest/Particles',valid,S109),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg014.xml','./msxsdtest/Particles',valid,S109),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg015.xsd','./msxsdtest/Particles',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg015.xsd','./msxsdtest/Particles',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg015.xml','./msxsdtest/Particles',valid,S110),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg015.xml','./msxsdtest/Particles',valid,S110),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg016.xsd','./msxsdtest/Particles',invalid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg016.xsd','./msxsdtest/Particles',invalid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIh001.xsd','./msxsdtest/Particles',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIh001.xsd','./msxsdtest/Particles',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj001.xsd','./msxsdtest/Particles',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj001.xsd','./msxsdtest/Particles',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj001.xml','./msxsdtest/Particles',valid,S113),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj001.xml','./msxsdtest/Particles',valid,S113),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj002.xsd','./msxsdtest/Particles',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj002.xsd','./msxsdtest/Particles',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj002.xml','./msxsdtest/Particles',valid,S114),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj002.xml','./msxsdtest/Particles',valid,S114),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj003.xsd','./msxsdtest/Particles',invalid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj003.xsd','./msxsdtest/Particles',invalid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj004.xsd','./msxsdtest/Particles',invalid),
+ {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj004.xsd','./msxsdtest/Particles',invalid),
STResList117 = [STRes116|STResList116],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj005.xsd','./msxsdtest/Particles',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj005.xsd','./msxsdtest/Particles',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj005.xml','./msxsdtest/Particles',valid,S117),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj005.xml','./msxsdtest/Particles',valid,S117),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj006.xsd','./msxsdtest/Particles',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj006.xsd','./msxsdtest/Particles',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj006.xml','./msxsdtest/Particles',valid,S118),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj006.xml','./msxsdtest/Particles',valid,S118),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj007.xsd','./msxsdtest/Particles',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj007.xsd','./msxsdtest/Particles',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj008.xsd','./msxsdtest/Particles',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj008.xsd','./msxsdtest/Particles',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj009.xsd','./msxsdtest/Particles',invalid),
+ {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj009.xsd','./msxsdtest/Particles',invalid),
STResList122 = [STRes121|STResList121],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj010.xsd','./msxsdtest/Particles',invalid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj010.xsd','./msxsdtest/Particles',invalid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj011.xsd','./msxsdtest/Particles',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj011.xsd','./msxsdtest/Particles',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj012.xsd','./msxsdtest/Particles',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj012.xsd','./msxsdtest/Particles',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj013.xsd','./msxsdtest/Particles',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj013.xsd','./msxsdtest/Particles',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj015.xsd','./msxsdtest/Particles',invalid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj015.xsd','./msxsdtest/Particles',invalid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj016.xsd','./msxsdtest/Particles',invalid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj016.xsd','./msxsdtest/Particles',invalid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk001.xsd','./msxsdtest/Particles',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk001.xsd','./msxsdtest/Particles',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk001.xml','./msxsdtest/Particles',valid,S128),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk001.xml','./msxsdtest/Particles',valid,S128),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk002.xsd','./msxsdtest/Particles',invalid),
+ {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk002.xsd','./msxsdtest/Particles',invalid),
STResList130 = [STRes129|STResList129],
- ?line {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk003.xsd','./msxsdtest/Particles',invalid),
+ {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk003.xsd','./msxsdtest/Particles',invalid),
STResList131 = [STRes130|STResList130],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk004.xsd','./msxsdtest/Particles',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk004.xsd','./msxsdtest/Particles',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk004.xml','./msxsdtest/Particles',valid,S131),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk004.xml','./msxsdtest/Particles',valid,S131),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk005.xsd','./msxsdtest/Particles',invalid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk005.xsd','./msxsdtest/Particles',invalid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk006.xsd','./msxsdtest/Particles',invalid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk006.xsd','./msxsdtest/Particles',invalid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk007.xsd','./msxsdtest/Particles',invalid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk007.xsd','./msxsdtest/Particles',invalid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk008.xsd','./msxsdtest/Particles',invalid),
+ {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk008.xsd','./msxsdtest/Particles',invalid),
STResList136 = [STRes135|STResList135],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk009.xsd','./msxsdtest/Particles',invalid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk009.xsd','./msxsdtest/Particles',invalid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk010.xsd','./msxsdtest/Particles',invalid),
+ {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk010.xsd','./msxsdtest/Particles',invalid),
STResList138 = [STRes137|STResList137],
- ?line {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk011.xsd','./msxsdtest/Particles',invalid),
+ {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk011.xsd','./msxsdtest/Particles',invalid),
STResList139 = [STRes138|STResList138],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk012.xsd','./msxsdtest/Particles',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk012.xsd','./msxsdtest/Particles',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk012.xml','./msxsdtest/Particles',valid,S139),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk012.xml','./msxsdtest/Particles',valid,S139),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk013.xsd','./msxsdtest/Particles',invalid),
+ {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk013.xsd','./msxsdtest/Particles',invalid),
STResList141 = [STRes140|STResList140],
- ?line {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk015.xsd','./msxsdtest/Particles',invalid),
+ {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk015.xsd','./msxsdtest/Particles',invalid),
STResList142 = [STRes141|STResList141],
- ?line {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk016.xsd','./msxsdtest/Particles',invalid),
+ {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk016.xsd','./msxsdtest/Particles',invalid),
STResList143 = [STRes142|STResList142],
- ?line {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk019.xsd','./msxsdtest/Particles',invalid),
+ {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk019.xsd','./msxsdtest/Particles',invalid),
STResList144 = [STRes143|STResList143],
- ?line {STRes144,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk020.xsd','./msxsdtest/Particles',invalid),
+ {STRes144,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk020.xsd','./msxsdtest/Particles',invalid),
STResList145 = [STRes144|STResList144],
- ?line {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk021.xsd','./msxsdtest/Particles',invalid),
+ {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk021.xsd','./msxsdtest/Particles',invalid),
STResList146 = [STRes145|STResList145],
- ?line {STRes146,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk022.xsd','./msxsdtest/Particles',invalid),
+ {STRes146,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk022.xsd','./msxsdtest/Particles',invalid),
STResList147 = [STRes146|STResList146],
- ?line {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk024.xsd','./msxsdtest/Particles',invalid),
+ {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk024.xsd','./msxsdtest/Particles',invalid),
STResList148 = [STRes147|STResList147],
- ?line {STRes148,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk025.xsd','./msxsdtest/Particles',invalid),
+ {STRes148,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk025.xsd','./msxsdtest/Particles',invalid),
STResList149 = [STRes148|STResList148],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk026.xsd','./msxsdtest/Particles',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk026.xsd','./msxsdtest/Particles',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk026.xml','./msxsdtest/Particles',valid,S149),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk026.xml','./msxsdtest/Particles',valid,S149),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk027.xsd','./msxsdtest/Particles',invalid),
+ {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk027.xsd','./msxsdtest/Particles',invalid),
STResList151 = [STRes150|STResList150],
@@ -20101,622 +20089,622 @@ particlesFHI(Config) when is_list(Config) ->
particlesJ(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa001.xml','./msxsdtest/Particles',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa001.xml','./msxsdtest/Particles',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa003.xsd','./msxsdtest/Particles',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa003.xsd','./msxsdtest/Particles',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa004.xsd','./msxsdtest/Particles',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa004.xsd','./msxsdtest/Particles',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa004.xml','./msxsdtest/Particles',valid,S3),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa004.xml','./msxsdtest/Particles',valid,S3),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa005.xml','./msxsdtest/Particles',valid,S4),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa005.xml','./msxsdtest/Particles',valid,S4),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa006.xsd','./msxsdtest/Particles',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa006.xsd','./msxsdtest/Particles',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa007.xsd','./msxsdtest/Particles',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa007.xsd','./msxsdtest/Particles',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa007.xml','./msxsdtest/Particles',valid,S6),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa007.xml','./msxsdtest/Particles',valid,S6),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa008.xsd','./msxsdtest/Particles',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa008.xsd','./msxsdtest/Particles',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa008.xml','./msxsdtest/Particles',valid,S7),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa008.xml','./msxsdtest/Particles',valid,S7),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa009.xsd','./msxsdtest/Particles',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa009.xsd','./msxsdtest/Particles',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa009.xml','./msxsdtest/Particles',valid,S8),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa009.xml','./msxsdtest/Particles',valid,S8),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa010.xsd','./msxsdtest/Particles',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa010.xsd','./msxsdtest/Particles',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa010.xml','./msxsdtest/Particles',valid,S9),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa010.xml','./msxsdtest/Particles',valid,S9),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa011.xsd','./msxsdtest/Particles',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa011.xsd','./msxsdtest/Particles',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa011.xml','./msxsdtest/Particles',valid,S10),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa011.xml','./msxsdtest/Particles',valid,S10),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa012.xsd','./msxsdtest/Particles',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa012.xsd','./msxsdtest/Particles',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb001.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb001.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb001.xml','./msxsdtest/Particles',valid,S12),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb001.xml','./msxsdtest/Particles',valid,S12),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb002.xsd','./msxsdtest/Particles',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb002.xsd','./msxsdtest/Particles',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb002.xml','./msxsdtest/Particles',valid,S13),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb002.xml','./msxsdtest/Particles',valid,S13),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb003.xsd','./msxsdtest/Particles',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb003.xsd','./msxsdtest/Particles',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb003.xml','./msxsdtest/Particles',valid,S14),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb003.xml','./msxsdtest/Particles',valid,S14),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb004.xsd','./msxsdtest/Particles',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb004.xsd','./msxsdtest/Particles',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb004.xml','./msxsdtest/Particles',valid,S15),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb004.xml','./msxsdtest/Particles',valid,S15),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb005.xsd','./msxsdtest/Particles',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb005.xsd','./msxsdtest/Particles',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb005.xml','./msxsdtest/Particles',valid,S16),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb005.xml','./msxsdtest/Particles',valid,S16),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb006.xsd','./msxsdtest/Particles',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb006.xsd','./msxsdtest/Particles',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb007.xsd','./msxsdtest/Particles',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb007.xsd','./msxsdtest/Particles',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb007.xml','./msxsdtest/Particles',valid,S18),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb007.xml','./msxsdtest/Particles',valid,S18),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb008.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb008.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb008.xml','./msxsdtest/Particles',valid,S19),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb008.xml','./msxsdtest/Particles',valid,S19),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb009.xsd','./msxsdtest/Particles',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb009.xsd','./msxsdtest/Particles',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb010.xsd','./msxsdtest/Particles',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb010.xsd','./msxsdtest/Particles',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb010.xml','./msxsdtest/Particles',valid,S21),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb010.xml','./msxsdtest/Particles',valid,S21),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb011.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb011.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb011.xml','./msxsdtest/Particles',valid,S22),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb011.xml','./msxsdtest/Particles',valid,S22),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb012.xsd','./msxsdtest/Particles',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb012.xsd','./msxsdtest/Particles',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb013.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb013.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb013.xml','./msxsdtest/Particles',valid,S24),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb013.xml','./msxsdtest/Particles',valid,S24),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb014.xsd','./msxsdtest/Particles',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb014.xsd','./msxsdtest/Particles',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb015.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb015.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb015.xml','./msxsdtest/Particles',valid,S26),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb015.xml','./msxsdtest/Particles',valid,S26),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb016.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb016.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb016.xml','./msxsdtest/Particles',valid,S27),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb016.xml','./msxsdtest/Particles',valid,S27),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc001.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc001.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc001.xml','./msxsdtest/Particles',valid,S28),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc001.xml','./msxsdtest/Particles',valid,S28),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc002.xsd','./msxsdtest/Particles',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc002.xsd','./msxsdtest/Particles',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc002.xml','./msxsdtest/Particles',valid,S29),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc002.xml','./msxsdtest/Particles',valid,S29),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc003.xsd','./msxsdtest/Particles',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc003.xsd','./msxsdtest/Particles',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc004.xsd','./msxsdtest/Particles',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc004.xsd','./msxsdtest/Particles',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc004.xml','./msxsdtest/Particles',valid,S31),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc004.xml','./msxsdtest/Particles',valid,S31),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc005.xsd','./msxsdtest/Particles',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc005.xsd','./msxsdtest/Particles',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc005.xml','./msxsdtest/Particles',valid,S32),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc005.xml','./msxsdtest/Particles',valid,S32),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc006.xsd','./msxsdtest/Particles',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc006.xsd','./msxsdtest/Particles',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc007.xsd','./msxsdtest/Particles',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc007.xsd','./msxsdtest/Particles',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc007.xml','./msxsdtest/Particles',valid,S34),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc007.xml','./msxsdtest/Particles',valid,S34),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc008.xsd','./msxsdtest/Particles',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc008.xsd','./msxsdtest/Particles',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc008.xml','./msxsdtest/Particles',valid,S35),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc008.xml','./msxsdtest/Particles',valid,S35),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc009.xsd','./msxsdtest/Particles',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc009.xsd','./msxsdtest/Particles',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc009.xml','./msxsdtest/Particles',valid,S36),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc009.xml','./msxsdtest/Particles',valid,S36),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc010.xsd','./msxsdtest/Particles',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc010.xsd','./msxsdtest/Particles',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc010.xml','./msxsdtest/Particles',valid,S37),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc010.xml','./msxsdtest/Particles',valid,S37),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc011.xsd','./msxsdtest/Particles',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc011.xsd','./msxsdtest/Particles',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc011.xml','./msxsdtest/Particles',valid,S38),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc011.xml','./msxsdtest/Particles',valid,S38),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc012.xsd','./msxsdtest/Particles',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc012.xsd','./msxsdtest/Particles',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd001.xsd','./msxsdtest/Particles',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd001.xsd','./msxsdtest/Particles',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd001.xml','./msxsdtest/Particles',valid,S40),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd001.xml','./msxsdtest/Particles',valid,S40),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd002.xsd','./msxsdtest/Particles',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd002.xsd','./msxsdtest/Particles',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd002.xml','./msxsdtest/Particles',valid,S41),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd002.xml','./msxsdtest/Particles',valid,S41),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd003.xsd','./msxsdtest/Particles',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd003.xsd','./msxsdtest/Particles',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd003.xml','./msxsdtest/Particles',valid,S42),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd003.xml','./msxsdtest/Particles',valid,S42),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd004.xsd','./msxsdtest/Particles',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd004.xsd','./msxsdtest/Particles',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd004.xml','./msxsdtest/Particles',valid,S43),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd004.xml','./msxsdtest/Particles',valid,S43),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd005.xsd','./msxsdtest/Particles',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd005.xsd','./msxsdtest/Particles',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd005.xml','./msxsdtest/Particles',valid,S44),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd005.xml','./msxsdtest/Particles',valid,S44),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd006.xsd','./msxsdtest/Particles',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd006.xsd','./msxsdtest/Particles',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd007.xsd','./msxsdtest/Particles',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd007.xsd','./msxsdtest/Particles',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd007.xml','./msxsdtest/Particles',valid,S46),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd007.xml','./msxsdtest/Particles',valid,S46),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd008.xsd','./msxsdtest/Particles',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd008.xsd','./msxsdtest/Particles',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd008.xml','./msxsdtest/Particles',valid,S47),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd008.xml','./msxsdtest/Particles',valid,S47),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd009.xsd','./msxsdtest/Particles',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd009.xsd','./msxsdtest/Particles',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd010.xsd','./msxsdtest/Particles',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd010.xsd','./msxsdtest/Particles',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd010.xml','./msxsdtest/Particles',valid,S49),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd010.xml','./msxsdtest/Particles',valid,S49),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd011.xsd','./msxsdtest/Particles',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd011.xsd','./msxsdtest/Particles',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd011.xml','./msxsdtest/Particles',valid,S50),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd011.xml','./msxsdtest/Particles',valid,S50),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd012.xsd','./msxsdtest/Particles',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd012.xsd','./msxsdtest/Particles',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd013.xsd','./msxsdtest/Particles',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd013.xsd','./msxsdtest/Particles',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd013.xml','./msxsdtest/Particles',valid,S52),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd013.xml','./msxsdtest/Particles',valid,S52),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd014.xsd','./msxsdtest/Particles',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd014.xsd','./msxsdtest/Particles',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd015.xsd','./msxsdtest/Particles',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd015.xsd','./msxsdtest/Particles',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd015.xml','./msxsdtest/Particles',valid,S54),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd015.xml','./msxsdtest/Particles',valid,S54),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd016.xsd','./msxsdtest/Particles',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd016.xsd','./msxsdtest/Particles',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd016.xml','./msxsdtest/Particles',valid,S55),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd016.xml','./msxsdtest/Particles',valid,S55),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe001.xsd','./msxsdtest/Particles',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe001.xsd','./msxsdtest/Particles',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe001.xml','./msxsdtest/Particles',valid,S56),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe001.xml','./msxsdtest/Particles',valid,S56),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe002.xsd','./msxsdtest/Particles',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe002.xsd','./msxsdtest/Particles',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe002.xml','./msxsdtest/Particles',valid,S57),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe002.xml','./msxsdtest/Particles',valid,S57),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe003.xsd','./msxsdtest/Particles',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe003.xsd','./msxsdtest/Particles',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe004.xsd','./msxsdtest/Particles',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe004.xsd','./msxsdtest/Particles',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe004.xml','./msxsdtest/Particles',valid,S59),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe004.xml','./msxsdtest/Particles',valid,S59),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe005.xsd','./msxsdtest/Particles',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe005.xsd','./msxsdtest/Particles',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe005.xml','./msxsdtest/Particles',valid,S60),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe005.xml','./msxsdtest/Particles',valid,S60),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe006.xsd','./msxsdtest/Particles',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe006.xsd','./msxsdtest/Particles',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe007.xsd','./msxsdtest/Particles',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe007.xsd','./msxsdtest/Particles',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe007.xml','./msxsdtest/Particles',valid,S62),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe007.xml','./msxsdtest/Particles',valid,S62),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe008.xsd','./msxsdtest/Particles',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe008.xsd','./msxsdtest/Particles',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe008.xml','./msxsdtest/Particles',valid,S63),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe008.xml','./msxsdtest/Particles',valid,S63),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe009.xsd','./msxsdtest/Particles',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe009.xsd','./msxsdtest/Particles',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe009.xml','./msxsdtest/Particles',valid,S64),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe009.xml','./msxsdtest/Particles',valid,S64),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe010.xsd','./msxsdtest/Particles',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe010.xsd','./msxsdtest/Particles',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe010.xml','./msxsdtest/Particles',valid,S65),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe010.xml','./msxsdtest/Particles',valid,S65),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe011.xsd','./msxsdtest/Particles',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe011.xsd','./msxsdtest/Particles',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe011.xml','./msxsdtest/Particles',valid,S66),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe011.xml','./msxsdtest/Particles',valid,S66),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe012.xsd','./msxsdtest/Particles',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe012.xsd','./msxsdtest/Particles',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf001.xsd','./msxsdtest/Particles',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf001.xsd','./msxsdtest/Particles',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf001.xml','./msxsdtest/Particles',valid,S68),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf001.xml','./msxsdtest/Particles',valid,S68),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf002.xsd','./msxsdtest/Particles',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf002.xsd','./msxsdtest/Particles',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf002.xml','./msxsdtest/Particles',valid,S69),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf002.xml','./msxsdtest/Particles',valid,S69),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf003.xsd','./msxsdtest/Particles',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf003.xsd','./msxsdtest/Particles',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf003.xml','./msxsdtest/Particles',valid,S70),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf003.xml','./msxsdtest/Particles',valid,S70),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf004.xsd','./msxsdtest/Particles',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf004.xsd','./msxsdtest/Particles',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf004.xml','./msxsdtest/Particles',valid,S71),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf004.xml','./msxsdtest/Particles',valid,S71),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf005.xsd','./msxsdtest/Particles',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf005.xsd','./msxsdtest/Particles',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf005.xml','./msxsdtest/Particles',valid,S72),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf005.xml','./msxsdtest/Particles',valid,S72),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf006.xsd','./msxsdtest/Particles',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf006.xsd','./msxsdtest/Particles',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf007.xsd','./msxsdtest/Particles',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf007.xsd','./msxsdtest/Particles',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf007.xml','./msxsdtest/Particles',valid,S74),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf007.xml','./msxsdtest/Particles',valid,S74),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf008.xsd','./msxsdtest/Particles',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf008.xsd','./msxsdtest/Particles',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf008.xml','./msxsdtest/Particles',valid,S75),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf008.xml','./msxsdtest/Particles',valid,S75),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf009.xsd','./msxsdtest/Particles',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf009.xsd','./msxsdtest/Particles',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf010.xsd','./msxsdtest/Particles',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf010.xsd','./msxsdtest/Particles',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf010.xml','./msxsdtest/Particles',valid,S77),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf010.xml','./msxsdtest/Particles',valid,S77),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf011.xsd','./msxsdtest/Particles',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf011.xsd','./msxsdtest/Particles',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf011.xml','./msxsdtest/Particles',valid,S78),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf011.xml','./msxsdtest/Particles',valid,S78),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf012.xsd','./msxsdtest/Particles',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf012.xsd','./msxsdtest/Particles',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf013.xsd','./msxsdtest/Particles',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf013.xsd','./msxsdtest/Particles',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf013.xml','./msxsdtest/Particles',valid,S80),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf013.xml','./msxsdtest/Particles',valid,S80),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf014.xsd','./msxsdtest/Particles',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf014.xsd','./msxsdtest/Particles',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf015.xsd','./msxsdtest/Particles',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf015.xsd','./msxsdtest/Particles',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf015.xml','./msxsdtest/Particles',valid,S82),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf015.xml','./msxsdtest/Particles',valid,S82),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf016.xsd','./msxsdtest/Particles',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf016.xsd','./msxsdtest/Particles',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf016.xml','./msxsdtest/Particles',valid,S83),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf016.xml','./msxsdtest/Particles',valid,S83),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJg001.xsd','./msxsdtest/Particles',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJg001.xsd','./msxsdtest/Particles',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJh001.xsd','./msxsdtest/Particles',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJh001.xsd','./msxsdtest/Particles',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj001.xsd','./msxsdtest/Particles',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj001.xsd','./msxsdtest/Particles',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj001.xml','./msxsdtest/Particles',valid,S86),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj001.xml','./msxsdtest/Particles',valid,S86),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj002.xsd','./msxsdtest/Particles',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj002.xsd','./msxsdtest/Particles',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj002.xml','./msxsdtest/Particles',valid,S87),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj002.xml','./msxsdtest/Particles',valid,S87),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj003.xsd','./msxsdtest/Particles',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj003.xsd','./msxsdtest/Particles',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj004.xsd','./msxsdtest/Particles',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj004.xsd','./msxsdtest/Particles',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj004.xml','./msxsdtest/Particles',valid,S89),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj004.xml','./msxsdtest/Particles',valid,S89),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj005.xsd','./msxsdtest/Particles',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj005.xsd','./msxsdtest/Particles',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj005.xml','./msxsdtest/Particles',valid,S90),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj005.xml','./msxsdtest/Particles',valid,S90),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj006.xsd','./msxsdtest/Particles',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj006.xsd','./msxsdtest/Particles',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj007.xsd','./msxsdtest/Particles',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj007.xsd','./msxsdtest/Particles',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj007.xml','./msxsdtest/Particles',valid,S92),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj007.xml','./msxsdtest/Particles',valid,S92),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj008.xsd','./msxsdtest/Particles',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj008.xsd','./msxsdtest/Particles',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj008.xml','./msxsdtest/Particles',valid,S93),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj008.xml','./msxsdtest/Particles',valid,S93),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj009.xsd','./msxsdtest/Particles',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj009.xsd','./msxsdtest/Particles',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj009.xml','./msxsdtest/Particles',valid,S94),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj009.xml','./msxsdtest/Particles',valid,S94),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj010.xsd','./msxsdtest/Particles',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj010.xsd','./msxsdtest/Particles',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj010.xml','./msxsdtest/Particles',valid,S95),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj010.xml','./msxsdtest/Particles',valid,S95),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj011.xsd','./msxsdtest/Particles',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj011.xsd','./msxsdtest/Particles',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj011.xml','./msxsdtest/Particles',valid,S96),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj011.xml','./msxsdtest/Particles',valid,S96),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj012.xsd','./msxsdtest/Particles',invalid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj012.xsd','./msxsdtest/Particles',invalid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk001.xsd','./msxsdtest/Particles',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk001.xsd','./msxsdtest/Particles',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk001.xml','./msxsdtest/Particles',valid,S98),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk001.xml','./msxsdtest/Particles',valid,S98),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk002.xsd','./msxsdtest/Particles',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk002.xsd','./msxsdtest/Particles',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk002.xml','./msxsdtest/Particles',valid,S99),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk002.xml','./msxsdtest/Particles',valid,S99),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk003.xsd','./msxsdtest/Particles',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk003.xsd','./msxsdtest/Particles',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk003.xml','./msxsdtest/Particles',valid,S100),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk003.xml','./msxsdtest/Particles',valid,S100),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk004.xsd','./msxsdtest/Particles',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk004.xsd','./msxsdtest/Particles',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk004.xml','./msxsdtest/Particles',valid,S101),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk004.xml','./msxsdtest/Particles',valid,S101),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk005.xsd','./msxsdtest/Particles',valid),
+ {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk005.xsd','./msxsdtest/Particles',valid),
STResList103 = [STRes102|STResList102],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk005.xml','./msxsdtest/Particles',valid,S102),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk005.xml','./msxsdtest/Particles',valid,S102),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk006.xsd','./msxsdtest/Particles',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk006.xsd','./msxsdtest/Particles',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk007.xsd','./msxsdtest/Particles',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk007.xsd','./msxsdtest/Particles',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk007.xml','./msxsdtest/Particles',valid,S104),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk007.xml','./msxsdtest/Particles',valid,S104),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk008.xsd','./msxsdtest/Particles',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk008.xsd','./msxsdtest/Particles',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk008.xml','./msxsdtest/Particles',valid,S105),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk008.xml','./msxsdtest/Particles',valid,S105),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk009.xsd','./msxsdtest/Particles',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk009.xsd','./msxsdtest/Particles',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk010.xsd','./msxsdtest/Particles',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk010.xsd','./msxsdtest/Particles',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk010.xml','./msxsdtest/Particles',valid,S107),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk010.xml','./msxsdtest/Particles',valid,S107),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk011.xsd','./msxsdtest/Particles',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk011.xsd','./msxsdtest/Particles',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk011.xml','./msxsdtest/Particles',valid,S108),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk011.xml','./msxsdtest/Particles',valid,S108),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk012.xsd','./msxsdtest/Particles',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk012.xsd','./msxsdtest/Particles',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk013.xsd','./msxsdtest/Particles',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk013.xsd','./msxsdtest/Particles',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk013.xml','./msxsdtest/Particles',valid,S110),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk013.xml','./msxsdtest/Particles',valid,S110),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk014.xsd','./msxsdtest/Particles',invalid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk014.xsd','./msxsdtest/Particles',invalid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk015.xsd','./msxsdtest/Particles',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk015.xsd','./msxsdtest/Particles',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk015.xml','./msxsdtest/Particles',valid,S112),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk015.xml','./msxsdtest/Particles',valid,S112),
ITResList83 = [ITRes82|ITResList82],
@@ -20727,1040 +20715,1040 @@ particlesJ(Config) when is_list(Config) ->
particlesKOSRTQUVW(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK001.xml','./msxsdtest/Particles',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK001.xml','./msxsdtest/Particles',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK003.xsd','./msxsdtest/Particles',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK003.xsd','./msxsdtest/Particles',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK003.xml','./msxsdtest/Particles',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK003.xml','./msxsdtest/Particles',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK004.xsd','./msxsdtest/Particles',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK004.xsd','./msxsdtest/Particles',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK005.xml','./msxsdtest/Particles',valid,S4),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK005.xml','./msxsdtest/Particles',valid,S4),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK006.xsd','./msxsdtest/Particles',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK006.xsd','./msxsdtest/Particles',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK008.xsd','./msxsdtest/Particles',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK008.xsd','./msxsdtest/Particles',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK008.xml','./msxsdtest/Particles',valid,S6),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK008.xml','./msxsdtest/Particles',valid,S6),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa001.xsd','./msxsdtest/Particles',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa001.xsd','./msxsdtest/Particles',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa001.xml','./msxsdtest/Particles',valid,S7),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa001.xml','./msxsdtest/Particles',valid,S7),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa002.xsd','./msxsdtest/Particles',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa002.xsd','./msxsdtest/Particles',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa003.xsd','./msxsdtest/Particles',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa003.xsd','./msxsdtest/Particles',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa003.xml','./msxsdtest/Particles',valid,S9),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa003.xml','./msxsdtest/Particles',valid,S9),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa004.xsd','./msxsdtest/Particles',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa004.xsd','./msxsdtest/Particles',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa005.xsd','./msxsdtest/Particles',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa005.xsd','./msxsdtest/Particles',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa006.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa006.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa006.xml','./msxsdtest/Particles',valid,S12),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa006.xml','./msxsdtest/Particles',valid,S12),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa007.xsd','./msxsdtest/Particles',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa007.xsd','./msxsdtest/Particles',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa008.xsd','./msxsdtest/Particles',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa008.xsd','./msxsdtest/Particles',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa009.xsd','./msxsdtest/Particles',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa009.xsd','./msxsdtest/Particles',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa010.xsd','./msxsdtest/Particles',invalid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa010.xsd','./msxsdtest/Particles',invalid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa011.xsd','./msxsdtest/Particles',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa011.xsd','./msxsdtest/Particles',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa011.xml','./msxsdtest/Particles',valid,S17),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa011.xml','./msxsdtest/Particles',valid,S17),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa012.xsd','./msxsdtest/Particles',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa012.xsd','./msxsdtest/Particles',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa012.xml','./msxsdtest/Particles',valid,S18),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa012.xml','./msxsdtest/Particles',valid,S18),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa013.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa013.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa013.xml','./msxsdtest/Particles',valid,S19),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa013.xml','./msxsdtest/Particles',valid,S19),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa014.xsd','./msxsdtest/Particles',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa014.xsd','./msxsdtest/Particles',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa014.xml','./msxsdtest/Particles',valid,S20),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa014.xml','./msxsdtest/Particles',valid,S20),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa015.xsd','./msxsdtest/Particles',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa015.xsd','./msxsdtest/Particles',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb001.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb001.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb001.xml','./msxsdtest/Particles',valid,S22),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb001.xml','./msxsdtest/Particles',valid,S22),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb002.xsd','./msxsdtest/Particles',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb002.xsd','./msxsdtest/Particles',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb002.xml','./msxsdtest/Particles',valid,S23),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb002.xml','./msxsdtest/Particles',valid,S23),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb003.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb003.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb003.xml','./msxsdtest/Particles',valid,S24),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb003.xml','./msxsdtest/Particles',valid,S24),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb004.xsd','./msxsdtest/Particles',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb004.xsd','./msxsdtest/Particles',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb004.xml','./msxsdtest/Particles',valid,S25),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb004.xml','./msxsdtest/Particles',valid,S25),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb005.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb005.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb005.xml','./msxsdtest/Particles',valid,S26),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb005.xml','./msxsdtest/Particles',valid,S26),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb006.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb006.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb006.xml','./msxsdtest/Particles',valid,S27),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb006.xml','./msxsdtest/Particles',valid,S27),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb007.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb007.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb007.xml','./msxsdtest/Particles',valid,S28),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb007.xml','./msxsdtest/Particles',valid,S28),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb008.xsd','./msxsdtest/Particles',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb008.xsd','./msxsdtest/Particles',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb008.xml','./msxsdtest/Particles',valid,S29),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb008.xml','./msxsdtest/Particles',valid,S29),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb009.xsd','./msxsdtest/Particles',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb009.xsd','./msxsdtest/Particles',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb009.xml','./msxsdtest/Particles',valid,S30),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb009.xml','./msxsdtest/Particles',valid,S30),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb010.xsd','./msxsdtest/Particles',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb010.xsd','./msxsdtest/Particles',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb011.xsd','./msxsdtest/Particles',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb011.xsd','./msxsdtest/Particles',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb012.xsd','./msxsdtest/Particles',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb012.xsd','./msxsdtest/Particles',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb012.xml','./msxsdtest/Particles',valid,S33),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb012.xml','./msxsdtest/Particles',valid,S33),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb013.xsd','./msxsdtest/Particles',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb013.xsd','./msxsdtest/Particles',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb013.xml','./msxsdtest/Particles',valid,S34),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb013.xml','./msxsdtest/Particles',valid,S34),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb014.xsd','./msxsdtest/Particles',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb014.xsd','./msxsdtest/Particles',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb015.xsd','./msxsdtest/Particles',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb015.xsd','./msxsdtest/Particles',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb015.xml','./msxsdtest/Particles',valid,S36),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb015.xml','./msxsdtest/Particles',valid,S36),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb016.xsd','./msxsdtest/Particles',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb016.xsd','./msxsdtest/Particles',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb017.xsd','./msxsdtest/Particles',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb017.xsd','./msxsdtest/Particles',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb018.xsd','./msxsdtest/Particles',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb018.xsd','./msxsdtest/Particles',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb018.xml','./msxsdtest/Particles',valid,S39),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb018.xml','./msxsdtest/Particles',valid,S39),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb019.xsd','./msxsdtest/Particles',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb019.xsd','./msxsdtest/Particles',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb020.xsd','./msxsdtest/Particles',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb020.xsd','./msxsdtest/Particles',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb021.xsd','./msxsdtest/Particles',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb021.xsd','./msxsdtest/Particles',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb022.xsd','./msxsdtest/Particles',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb022.xsd','./msxsdtest/Particles',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb022.xml','./msxsdtest/Particles',valid,S43),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb022.xml','./msxsdtest/Particles',valid,S43),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb023.xsd','./msxsdtest/Particles',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb023.xsd','./msxsdtest/Particles',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb024.xsd','./msxsdtest/Particles',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb024.xsd','./msxsdtest/Particles',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb025.xsd','./msxsdtest/Particles',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb025.xsd','./msxsdtest/Particles',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb026.xsd','./msxsdtest/Particles',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb026.xsd','./msxsdtest/Particles',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb027.xsd','./msxsdtest/Particles',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb027.xsd','./msxsdtest/Particles',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb028.xsd','./msxsdtest/Particles',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb028.xsd','./msxsdtest/Particles',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb029.xsd','./msxsdtest/Particles',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb029.xsd','./msxsdtest/Particles',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb030.xsd','./msxsdtest/Particles',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb030.xsd','./msxsdtest/Particles',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb031.xsd','./msxsdtest/Particles',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb031.xsd','./msxsdtest/Particles',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb032.xsd','./msxsdtest/Particles',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb032.xsd','./msxsdtest/Particles',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb032.xml','./msxsdtest/Particles',valid,S53),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb032.xml','./msxsdtest/Particles',valid,S53),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb033.xsd','./msxsdtest/Particles',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb033.xsd','./msxsdtest/Particles',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb034.xsd','./msxsdtest/Particles',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb034.xsd','./msxsdtest/Particles',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb035.xsd','./msxsdtest/Particles',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb035.xsd','./msxsdtest/Particles',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb036.xsd','./msxsdtest/Particles',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb036.xsd','./msxsdtest/Particles',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb037.xsd','./msxsdtest/Particles',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb037.xsd','./msxsdtest/Particles',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb038.xsd','./msxsdtest/Particles',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb038.xsd','./msxsdtest/Particles',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb039.xsd','./msxsdtest/Particles',invalid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb039.xsd','./msxsdtest/Particles',invalid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb040.xsd','./msxsdtest/Particles',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb040.xsd','./msxsdtest/Particles',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb041.xsd','./msxsdtest/Particles',invalid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb041.xsd','./msxsdtest/Particles',invalid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb042.xsd','./msxsdtest/Particles',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb042.xsd','./msxsdtest/Particles',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb042.xml','./msxsdtest/Particles',valid,S63),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb042.xml','./msxsdtest/Particles',valid,S63),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb043.xsd','./msxsdtest/Particles',invalid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb043.xsd','./msxsdtest/Particles',invalid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb044.xsd','./msxsdtest/Particles',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb044.xsd','./msxsdtest/Particles',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb045.xsd','./msxsdtest/Particles',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb045.xsd','./msxsdtest/Particles',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb046.xsd','./msxsdtest/Particles',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb046.xsd','./msxsdtest/Particles',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb047.xsd','./msxsdtest/Particles',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb047.xsd','./msxsdtest/Particles',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb047.xml','./msxsdtest/Particles',valid,S68),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb047.xml','./msxsdtest/Particles',valid,S68),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb048.xsd','./msxsdtest/Particles',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb048.xsd','./msxsdtest/Particles',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb048.xml','./msxsdtest/Particles',valid,S69),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb048.xml','./msxsdtest/Particles',valid,S69),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb049.xsd','./msxsdtest/Particles',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb049.xsd','./msxsdtest/Particles',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb050.xsd','./msxsdtest/Particles',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb050.xsd','./msxsdtest/Particles',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb051.xsd','./msxsdtest/Particles',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb051.xsd','./msxsdtest/Particles',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb052.xsd','./msxsdtest/Particles',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb052.xsd','./msxsdtest/Particles',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb052.xml','./msxsdtest/Particles',valid,S73),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb052.xml','./msxsdtest/Particles',valid,S73),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb053.xsd','./msxsdtest/Particles',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb053.xsd','./msxsdtest/Particles',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb053.xml','./msxsdtest/Particles',valid,S74),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb053.xml','./msxsdtest/Particles',valid,S74),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb054.xsd','./msxsdtest/Particles',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb054.xsd','./msxsdtest/Particles',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb054.xml','./msxsdtest/Particles',valid,S75),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb054.xml','./msxsdtest/Particles',valid,S75),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb055.xsd','./msxsdtest/Particles',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb055.xsd','./msxsdtest/Particles',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb055.xml','./msxsdtest/Particles',valid,S76),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb055.xml','./msxsdtest/Particles',valid,S76),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb056.xsd','./msxsdtest/Particles',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb056.xsd','./msxsdtest/Particles',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb056.xml','./msxsdtest/Particles',valid,S77),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb056.xml','./msxsdtest/Particles',valid,S77),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb057.xsd','./msxsdtest/Particles',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb057.xsd','./msxsdtest/Particles',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb057.xml','./msxsdtest/Particles',valid,S78),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb057.xml','./msxsdtest/Particles',valid,S78),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb058.xsd','./msxsdtest/Particles',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb058.xsd','./msxsdtest/Particles',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb059.xsd','./msxsdtest/Particles',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb059.xsd','./msxsdtest/Particles',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb059.xml','./msxsdtest/Particles',valid,S80),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb059.xml','./msxsdtest/Particles',valid,S80),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb060.xsd','./msxsdtest/Particles',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb060.xsd','./msxsdtest/Particles',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb060.xml','./msxsdtest/Particles',valid,S81),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb060.xml','./msxsdtest/Particles',valid,S81),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS001.xsd','./msxsdtest/Particles',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS001.xsd','./msxsdtest/Particles',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS001.xml','./msxsdtest/Particles',valid,S82),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS001.xml','./msxsdtest/Particles',valid,S82),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS002.xsd','./msxsdtest/Particles',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS002.xsd','./msxsdtest/Particles',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS003.xsd','./msxsdtest/Particles',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS003.xsd','./msxsdtest/Particles',valid),
STResList85 = [STRes84|STResList84],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS003.xml','./msxsdtest/Particles',valid,S84),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS003.xml','./msxsdtest/Particles',valid,S84),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS004.xsd','./msxsdtest/Particles',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS004.xsd','./msxsdtest/Particles',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS004.xml','./msxsdtest/Particles',valid,S85),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS004.xml','./msxsdtest/Particles',valid,S85),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS005.xsd','./msxsdtest/Particles',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS005.xsd','./msxsdtest/Particles',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS006.xsd','./msxsdtest/Particles',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS006.xsd','./msxsdtest/Particles',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS007.xsd','./msxsdtest/Particles',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS007.xsd','./msxsdtest/Particles',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS007.xml','./msxsdtest/Particles',valid,S88),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS007.xml','./msxsdtest/Particles',valid,S88),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS008.xsd','./msxsdtest/Particles',invalid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS008.xsd','./msxsdtest/Particles',invalid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS009.xsd','./msxsdtest/Particles',invalid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS009.xsd','./msxsdtest/Particles',invalid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS010.xsd','./msxsdtest/Particles',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS010.xsd','./msxsdtest/Particles',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS011.xsd','./msxsdtest/Particles',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS011.xsd','./msxsdtest/Particles',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS011.xml','./msxsdtest/Particles',valid,S92),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS011.xml','./msxsdtest/Particles',valid,S92),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR001.xsd','./msxsdtest/Particles',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR001.xsd','./msxsdtest/Particles',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR001.xml','./msxsdtest/Particles',valid,S93),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR001.xml','./msxsdtest/Particles',valid,S93),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR002.xsd','./msxsdtest/Particles',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR002.xsd','./msxsdtest/Particles',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR002.xml','./msxsdtest/Particles',valid,S94),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR002.xml','./msxsdtest/Particles',valid,S94),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR003.xsd','./msxsdtest/Particles',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR003.xsd','./msxsdtest/Particles',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR003.xml','./msxsdtest/Particles',valid,S95),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR003.xml','./msxsdtest/Particles',valid,S95),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR004.xsd','./msxsdtest/Particles',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR004.xsd','./msxsdtest/Particles',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR004.xml','./msxsdtest/Particles',valid,S96),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR004.xml','./msxsdtest/Particles',valid,S96),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR005.xsd','./msxsdtest/Particles',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR005.xsd','./msxsdtest/Particles',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR005.xml','./msxsdtest/Particles',valid,S97),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR005.xml','./msxsdtest/Particles',valid,S97),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR006.xsd','./msxsdtest/Particles',invalid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR006.xsd','./msxsdtest/Particles',invalid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR007.xsd','./msxsdtest/Particles',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR007.xsd','./msxsdtest/Particles',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR007.xml','./msxsdtest/Particles',valid,S99),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR007.xml','./msxsdtest/Particles',valid,S99),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR008.xsd','./msxsdtest/Particles',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR008.xsd','./msxsdtest/Particles',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR008.xml','./msxsdtest/Particles',valid,S100),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR008.xml','./msxsdtest/Particles',valid,S100),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR009.xsd','./msxsdtest/Particles',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR009.xsd','./msxsdtest/Particles',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR009.xml','./msxsdtest/Particles',valid,S101),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR009.xml','./msxsdtest/Particles',valid,S101),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR010.xsd','./msxsdtest/Particles',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR010.xsd','./msxsdtest/Particles',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR011.xsd','./msxsdtest/Particles',valid),
+ {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR011.xsd','./msxsdtest/Particles',valid),
STResList104 = [STRes103|STResList103],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR011.xml','./msxsdtest/Particles',valid,S103),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR011.xml','./msxsdtest/Particles',valid,S103),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR012.xsd','./msxsdtest/Particles',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR012.xsd','./msxsdtest/Particles',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR012.xml','./msxsdtest/Particles',valid,S104),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR012.xml','./msxsdtest/Particles',valid,S104),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR013.xsd','./msxsdtest/Particles',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR013.xsd','./msxsdtest/Particles',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR013.xml','./msxsdtest/Particles',valid,S105),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR013.xml','./msxsdtest/Particles',valid,S105),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR014.xsd','./msxsdtest/Particles',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR014.xsd','./msxsdtest/Particles',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR015.xsd','./msxsdtest/Particles',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR015.xsd','./msxsdtest/Particles',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR015.xml','./msxsdtest/Particles',valid,S107),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR015.xml','./msxsdtest/Particles',valid,S107),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR016.xsd','./msxsdtest/Particles',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR016.xsd','./msxsdtest/Particles',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR016.xml','./msxsdtest/Particles',valid,S108),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR016.xml','./msxsdtest/Particles',valid,S108),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR017.xsd','./msxsdtest/Particles',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR017.xsd','./msxsdtest/Particles',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR017.xml','./msxsdtest/Particles',valid,S109),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR017.xml','./msxsdtest/Particles',valid,S109),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR018.xsd','./msxsdtest/Particles',invalid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR018.xsd','./msxsdtest/Particles',invalid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR019.xsd','./msxsdtest/Particles',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR019.xsd','./msxsdtest/Particles',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR019.xml','./msxsdtest/Particles',valid,S111),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR019.xml','./msxsdtest/Particles',valid,S111),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR020.xsd','./msxsdtest/Particles',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR020.xsd','./msxsdtest/Particles',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR020.xml','./msxsdtest/Particles',valid,S112),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR020.xml','./msxsdtest/Particles',valid,S112),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR021.xsd','./msxsdtest/Particles',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR021.xsd','./msxsdtest/Particles',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR022.xsd','./msxsdtest/Particles',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR022.xsd','./msxsdtest/Particles',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR022.xml','./msxsdtest/Particles',valid,S114),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR022.xml','./msxsdtest/Particles',valid,S114),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR023.xsd','./msxsdtest/Particles',invalid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR023.xsd','./msxsdtest/Particles',invalid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR024.xsd','./msxsdtest/Particles',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR024.xsd','./msxsdtest/Particles',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR024.xml','./msxsdtest/Particles',valid,S116),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR024.xml','./msxsdtest/Particles',valid,S116),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR025.xsd','./msxsdtest/Particles',invalid),
+ {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR025.xsd','./msxsdtest/Particles',invalid),
STResList118 = [STRes117|STResList117],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR026.xsd','./msxsdtest/Particles',invalid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR026.xsd','./msxsdtest/Particles',invalid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR027.xsd','./msxsdtest/Particles',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR027.xsd','./msxsdtest/Particles',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR028.xsd','./msxsdtest/Particles',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR028.xsd','./msxsdtest/Particles',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR029.xsd','./msxsdtest/Particles',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR029.xsd','./msxsdtest/Particles',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR029.xml','./msxsdtest/Particles',valid,S121),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR029.xml','./msxsdtest/Particles',valid,S121),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR030.xsd','./msxsdtest/Particles',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR030.xsd','./msxsdtest/Particles',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR030.xml','./msxsdtest/Particles',valid,S122),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR030.xml','./msxsdtest/Particles',valid,S122),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR031.xsd','./msxsdtest/Particles',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR031.xsd','./msxsdtest/Particles',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT001.xsd','./msxsdtest/Particles',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT001.xsd','./msxsdtest/Particles',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT001.xml','./msxsdtest/Particles',valid,S124),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT001.xml','./msxsdtest/Particles',valid,S124),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT002.xsd','./msxsdtest/Particles',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT002.xsd','./msxsdtest/Particles',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT003.xsd','./msxsdtest/Particles',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT003.xsd','./msxsdtest/Particles',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT003.xml','./msxsdtest/Particles',valid,S126),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT003.xml','./msxsdtest/Particles',valid,S126),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT004.xsd','./msxsdtest/Particles',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT004.xsd','./msxsdtest/Particles',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT004.xml','./msxsdtest/Particles',valid,S127),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT004.xml','./msxsdtest/Particles',valid,S127),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT005.xsd','./msxsdtest/Particles',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT005.xsd','./msxsdtest/Particles',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT005.xml','./msxsdtest/Particles',valid,S128),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT005.xml','./msxsdtest/Particles',valid,S128),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT006.xsd','./msxsdtest/Particles',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT006.xsd','./msxsdtest/Particles',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT006.xml','./msxsdtest/Particles',valid,S129),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT006.xml','./msxsdtest/Particles',valid,S129),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT007.xsd','./msxsdtest/Particles',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT007.xsd','./msxsdtest/Particles',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT007.xml','./msxsdtest/Particles',valid,S130),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT007.xml','./msxsdtest/Particles',valid,S130),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT008.xsd','./msxsdtest/Particles',invalid),
+ {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT008.xsd','./msxsdtest/Particles',invalid),
STResList132 = [STRes131|STResList131],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT009.xsd','./msxsdtest/Particles',invalid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT009.xsd','./msxsdtest/Particles',invalid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT010.xsd','./msxsdtest/Particles',invalid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT010.xsd','./msxsdtest/Particles',invalid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT011.xsd','./msxsdtest/Particles',invalid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT011.xsd','./msxsdtest/Particles',invalid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT012.xsd','./msxsdtest/Particles',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT012.xsd','./msxsdtest/Particles',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT012.xml','./msxsdtest/Particles',valid,S135),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT012.xml','./msxsdtest/Particles',valid,S135),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT013.xsd','./msxsdtest/Particles',valid),
+ {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT013.xsd','./msxsdtest/Particles',valid),
STResList137 = [STRes136|STResList136],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT013.xml','./msxsdtest/Particles',valid,S136),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT013.xml','./msxsdtest/Particles',valid,S136),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT014.xsd','./msxsdtest/Particles',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT014.xsd','./msxsdtest/Particles',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT014.xml','./msxsdtest/Particles',valid,S137),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT014.xml','./msxsdtest/Particles',valid,S137),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ001.xsd','./msxsdtest/Particles',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ001.xsd','./msxsdtest/Particles',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ001.xml','./msxsdtest/Particles',valid,S138),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ001.xml','./msxsdtest/Particles',valid,S138),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ002.xsd','./msxsdtest/Particles',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ002.xsd','./msxsdtest/Particles',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ002.xml','./msxsdtest/Particles',valid,S139),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ002.xml','./msxsdtest/Particles',valid,S139),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ003.xsd','./msxsdtest/Particles',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ003.xsd','./msxsdtest/Particles',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ003.xml','./msxsdtest/Particles',valid,S140),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ003.xml','./msxsdtest/Particles',valid,S140),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ004.xsd','./msxsdtest/Particles',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ004.xsd','./msxsdtest/Particles',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ004.xml','./msxsdtest/Particles',valid,S141),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ004.xml','./msxsdtest/Particles',valid,S141),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ005.xsd','./msxsdtest/Particles',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ005.xsd','./msxsdtest/Particles',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ005.xml','./msxsdtest/Particles',valid,S142),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ005.xml','./msxsdtest/Particles',valid,S142),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ006.xsd','./msxsdtest/Particles',invalid),
+ {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ006.xsd','./msxsdtest/Particles',invalid),
STResList144 = [STRes143|STResList143],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ007.xsd','./msxsdtest/Particles',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ007.xsd','./msxsdtest/Particles',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ007.xml','./msxsdtest/Particles',valid,S144),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ007.xml','./msxsdtest/Particles',valid,S144),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ008.xsd','./msxsdtest/Particles',invalid),
+ {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ008.xsd','./msxsdtest/Particles',invalid),
STResList146 = [STRes145|STResList145],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ011.xsd','./msxsdtest/Particles',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ011.xsd','./msxsdtest/Particles',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ011.xml','./msxsdtest/Particles',valid,S146),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ011.xml','./msxsdtest/Particles',valid,S146),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ012.xsd','./msxsdtest/Particles',invalid),
+ {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ012.xsd','./msxsdtest/Particles',invalid),
STResList148 = [STRes147|STResList147],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ013.xsd','./msxsdtest/Particles',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ013.xsd','./msxsdtest/Particles',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ013.xml','./msxsdtest/Particles',valid,S148),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ013.xml','./msxsdtest/Particles',valid,S148),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ016.xsd','./msxsdtest/Particles',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ016.xsd','./msxsdtest/Particles',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ016.xml','./msxsdtest/Particles',valid,S149),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ016.xml','./msxsdtest/Particles',valid,S149),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ017.xsd','./msxsdtest/Particles',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ017.xsd','./msxsdtest/Particles',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ017.xml','./msxsdtest/Particles',valid,S150),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ017.xml','./msxsdtest/Particles',valid,S150),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ018.xsd','./msxsdtest/Particles',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ018.xsd','./msxsdtest/Particles',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ019.xsd','./msxsdtest/Particles',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ019.xsd','./msxsdtest/Particles',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ019.xml','./msxsdtest/Particles',valid,S152),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ019.xml','./msxsdtest/Particles',valid,S152),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ020.xsd','./msxsdtest/Particles',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ020.xsd','./msxsdtest/Particles',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ020.xml','./msxsdtest/Particles',valid,S153),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ020.xml','./msxsdtest/Particles',valid,S153),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ021.xsd','./msxsdtest/Particles',invalid),
+ {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ021.xsd','./msxsdtest/Particles',invalid),
STResList155 = [STRes154|STResList154],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ022.xsd','./msxsdtest/Particles',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ022.xsd','./msxsdtest/Particles',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ022.xml','./msxsdtest/Particles',valid,S155),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ022.xml','./msxsdtest/Particles',valid,S155),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ023.xsd','./msxsdtest/Particles',invalid),
+ {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ023.xsd','./msxsdtest/Particles',invalid),
STResList157 = [STRes156|STResList156],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ024.xsd','./msxsdtest/Particles',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ024.xsd','./msxsdtest/Particles',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ024.xml','./msxsdtest/Particles',valid,S157),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ024.xml','./msxsdtest/Particles',valid,S157),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ025.xsd','./msxsdtest/Particles',invalid),
+ {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ025.xsd','./msxsdtest/Particles',invalid),
STResList159 = [STRes158|STResList158],
- ?line {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ026.xsd','./msxsdtest/Particles',invalid),
+ {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ026.xsd','./msxsdtest/Particles',invalid),
STResList160 = [STRes159|STResList159],
- ?line {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ027.xsd','./msxsdtest/Particles',invalid),
+ {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ027.xsd','./msxsdtest/Particles',invalid),
STResList161 = [STRes160|STResList160],
- ?line {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ028.xsd','./msxsdtest/Particles',invalid),
+ {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ028.xsd','./msxsdtest/Particles',invalid),
STResList162 = [STRes161|STResList161],
- ?line {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ029.xsd','./msxsdtest/Particles',valid),
+ {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ029.xsd','./msxsdtest/Particles',valid),
STResList163 = [STRes162|STResList162],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ029.xml','./msxsdtest/Particles',valid,S162),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ029.xml','./msxsdtest/Particles',valid,S162),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ030.xsd','./msxsdtest/Particles',valid),
+ {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ030.xsd','./msxsdtest/Particles',valid),
STResList164 = [STRes163|STResList163],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ030.xml','./msxsdtest/Particles',valid,S163),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ030.xml','./msxsdtest/Particles',valid,S163),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ031.xsd','./msxsdtest/Particles',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ031.xsd','./msxsdtest/Particles',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU001.xsd','./msxsdtest/Particles',invalid),
+ {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU001.xsd','./msxsdtest/Particles',invalid),
STResList166 = [STRes165|STResList165],
- ?line {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU002.xsd','./msxsdtest/Particles',invalid),
+ {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU002.xsd','./msxsdtest/Particles',invalid),
STResList167 = [STRes166|STResList166],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU003.xsd','./msxsdtest/Particles',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU003.xsd','./msxsdtest/Particles',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU003.xml','./msxsdtest/Particles',valid,S167),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU003.xml','./msxsdtest/Particles',valid,S167),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU004.xsd','./msxsdtest/Particles',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU004.xsd','./msxsdtest/Particles',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU004.xml','./msxsdtest/Particles',valid,S168),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU004.xml','./msxsdtest/Particles',valid,S168),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU005.xsd','./msxsdtest/Particles',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU005.xsd','./msxsdtest/Particles',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU005.xml','./msxsdtest/Particles',valid,S169),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU005.xml','./msxsdtest/Particles',valid,S169),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU006.xsd','./msxsdtest/Particles',invalid),
+ {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU006.xsd','./msxsdtest/Particles',invalid),
STResList171 = [STRes170|STResList170],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU007.xsd','./msxsdtest/Particles',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU007.xsd','./msxsdtest/Particles',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU007.xml','./msxsdtest/Particles',valid,S171),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU007.xml','./msxsdtest/Particles',valid,S171),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU008.xsd','./msxsdtest/Particles',invalid),
+ {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU008.xsd','./msxsdtest/Particles',invalid),
STResList173 = [STRes172|STResList172],
- ?line {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU009.xsd','./msxsdtest/Particles',invalid),
+ {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU009.xsd','./msxsdtest/Particles',invalid),
STResList174 = [STRes173|STResList173],
- ?line {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV002.xsd','./msxsdtest/Particles',invalid),
+ {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV002.xsd','./msxsdtest/Particles',invalid),
STResList175 = [STRes174|STResList174],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV003.xsd','./msxsdtest/Particles',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV003.xsd','./msxsdtest/Particles',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV003.xml','./msxsdtest/Particles',valid,S175),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV003.xml','./msxsdtest/Particles',valid,S175),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV005.xsd','./msxsdtest/Particles',invalid),
+ {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV005.xsd','./msxsdtest/Particles',invalid),
STResList177 = [STRes176|STResList176],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV006.xsd','./msxsdtest/Particles',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV006.xsd','./msxsdtest/Particles',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV006.xml','./msxsdtest/Particles',valid,S177),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV006.xml','./msxsdtest/Particles',valid,S177),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV007.xsd','./msxsdtest/Particles',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV007.xsd','./msxsdtest/Particles',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV007.xml','./msxsdtest/Particles',valid,S178),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV007.xml','./msxsdtest/Particles',valid,S178),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV008.xsd','./msxsdtest/Particles',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV008.xsd','./msxsdtest/Particles',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV008.xml','./msxsdtest/Particles',valid,S179),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV008.xml','./msxsdtest/Particles',valid,S179),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV009.xsd','./msxsdtest/Particles',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV009.xsd','./msxsdtest/Particles',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV009.xml','./msxsdtest/Particles',valid,S180),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV009.xml','./msxsdtest/Particles',valid,S180),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV010.xsd','./msxsdtest/Particles',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV010.xsd','./msxsdtest/Particles',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV010.xml','./msxsdtest/Particles',valid,S181),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV010.xml','./msxsdtest/Particles',valid,S181),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV011.xsd','./msxsdtest/Particles',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV011.xsd','./msxsdtest/Particles',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV011.xml','./msxsdtest/Particles',valid,S182),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV011.xml','./msxsdtest/Particles',valid,S182),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV012.xsd','./msxsdtest/Particles',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV012.xsd','./msxsdtest/Particles',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV012.xml','./msxsdtest/Particles',valid,S183),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV012.xml','./msxsdtest/Particles',valid,S183),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV013.xsd','./msxsdtest/Particles',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV013.xsd','./msxsdtest/Particles',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV013.xml','./msxsdtest/Particles',valid,S184),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV013.xml','./msxsdtest/Particles',valid,S184),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV014.xsd','./msxsdtest/Particles',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV014.xsd','./msxsdtest/Particles',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV014.xml','./msxsdtest/Particles',valid,S185),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV014.xml','./msxsdtest/Particles',valid,S185),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV015.xsd','./msxsdtest/Particles',valid),
+ {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV015.xsd','./msxsdtest/Particles',valid),
STResList187 = [STRes186|STResList186],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV015.xml','./msxsdtest/Particles',valid,S186),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV015.xml','./msxsdtest/Particles',valid,S186),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV016.xsd','./msxsdtest/Particles',invalid),
+ {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV016.xsd','./msxsdtest/Particles',invalid),
STResList188 = [STRes187|STResList187],
- ?line {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV017.xsd','./msxsdtest/Particles',invalid),
+ {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV017.xsd','./msxsdtest/Particles',invalid),
STResList189 = [STRes188|STResList188],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV018.xsd','./msxsdtest/Particles',invalid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV018.xsd','./msxsdtest/Particles',invalid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV020.xsd','./msxsdtest/Particles',invalid),
+ {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV020.xsd','./msxsdtest/Particles',invalid),
STResList191 = [STRes190|STResList190],
- ?line {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW001.xsd','./msxsdtest/Particles',valid),
+ {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW001.xsd','./msxsdtest/Particles',valid),
STResList192 = [STRes191|STResList191],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW001.xml','./msxsdtest/Particles',valid,S191),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW001.xml','./msxsdtest/Particles',valid,S191),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW002.xsd','./msxsdtest/Particles',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW002.xsd','./msxsdtest/Particles',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW003.xsd','./msxsdtest/Particles',valid),
+ {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW003.xsd','./msxsdtest/Particles',valid),
STResList194 = [STRes193|STResList193],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW003.xml','./msxsdtest/Particles',valid,S193),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW003.xml','./msxsdtest/Particles',valid,S193),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW005.xsd','./msxsdtest/Particles',invalid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW005.xsd','./msxsdtest/Particles',invalid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW006.xsd','./msxsdtest/Particles',valid),
+ {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW006.xsd','./msxsdtest/Particles',valid),
STResList196 = [STRes195|STResList195],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW007.xsd','./msxsdtest/Particles',invalid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW007.xsd','./msxsdtest/Particles',invalid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW008.xsd','./msxsdtest/Particles',valid),
+ {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW008.xsd','./msxsdtest/Particles',valid),
STResList198 = [STRes197|STResList197],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW008.xml','./msxsdtest/Particles',valid,S197),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW008.xml','./msxsdtest/Particles',valid,S197),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW010.xsd','./msxsdtest/Particles',invalid),
+ {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW010.xsd','./msxsdtest/Particles',invalid),
STResList199 = [STRes198|STResList198],
- ?line {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW011.xsd','./msxsdtest/Particles',valid),
+ {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW011.xsd','./msxsdtest/Particles',valid),
STResList200 = [STRes199|STResList199],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW011.xml','./msxsdtest/Particles',valid,S199),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW011.xml','./msxsdtest/Particles',valid,S199),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW012.xsd','./msxsdtest/Particles',invalid),
+ {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW012.xsd','./msxsdtest/Particles',invalid),
STResList201 = [STRes200|STResList200],
- ?line {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW013.xsd','./msxsdtest/Particles',invalid),
+ {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW013.xsd','./msxsdtest/Particles',invalid),
STResList202 = [STRes201|STResList201],
- ?line {STRes202,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW014.xsd','./msxsdtest/Particles',invalid),
+ {STRes202,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW014.xsd','./msxsdtest/Particles',invalid),
STResList203 = [STRes202|STResList202],
- ?line {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW015.xsd','./msxsdtest/Particles',invalid),
+ {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW015.xsd','./msxsdtest/Particles',invalid),
STResList204 = [STRes203|STResList203],
- ?line {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW016.xsd','./msxsdtest/Particles',valid),
+ {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW016.xsd','./msxsdtest/Particles',valid),
STResList205 = [STRes204|STResList204],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW016.xml','./msxsdtest/Particles',valid,S204),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW016.xml','./msxsdtest/Particles',valid,S204),
ITResList108 = [ITRes107|ITResList107],
@@ -21771,467 +21759,467 @@ particlesKOSRTQUVW(Config) when is_list(Config) ->
stABCDE(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA001.xsd','./msxsdtest/simpleType',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA001.xsd','./msxsdtest/simpleType',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA002.xsd','./msxsdtest/simpleType',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA003.xsd','./msxsdtest/simpleType',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA004.xsd','./msxsdtest/simpleType',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA005.xsd','./msxsdtest/simpleType',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA006.xsd','./msxsdtest/simpleType',valid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA006.xsd','./msxsdtest/simpleType',valid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA007.xsd','./msxsdtest/simpleType',valid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA007.xsd','./msxsdtest/simpleType',valid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA008.xsd','./msxsdtest/simpleType',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA008.xsd','./msxsdtest/simpleType',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA009.xsd','./msxsdtest/simpleType',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA010.xsd','./msxsdtest/simpleType',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA011.xsd','./msxsdtest/simpleType',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA012.xsd','./msxsdtest/simpleType',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA013.xsd','./msxsdtest/simpleType',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA014.xsd','./msxsdtest/simpleType',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA015.xsd','./msxsdtest/simpleType',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA016.xsd','./msxsdtest/simpleType',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA016.xsd','./msxsdtest/simpleType',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA017.xsd','./msxsdtest/simpleType',invalid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA018.xsd','./msxsdtest/simpleType',valid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA018.xsd','./msxsdtest/simpleType',valid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA019.xsd','./msxsdtest/simpleType',valid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA019.xsd','./msxsdtest/simpleType',valid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA020.xsd','./msxsdtest/simpleType',valid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA020.xsd','./msxsdtest/simpleType',valid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB001.xsd','./msxsdtest/simpleType',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB001.xsd','./msxsdtest/simpleType',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB002.xsd','./msxsdtest/simpleType',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB003.xsd','./msxsdtest/simpleType',valid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB003.xsd','./msxsdtest/simpleType',valid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB004.xsd','./msxsdtest/simpleType',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB005.xsd','./msxsdtest/simpleType',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB006.xsd','./msxsdtest/simpleType',valid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB006.xsd','./msxsdtest/simpleType',valid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB007.xsd','./msxsdtest/simpleType',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB007.xsd','./msxsdtest/simpleType',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB008.xsd','./msxsdtest/simpleType',valid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB008.xsd','./msxsdtest/simpleType',valid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB009.xsd','./msxsdtest/simpleType',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB010.xsd','./msxsdtest/simpleType',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB011.xsd','./msxsdtest/simpleType',valid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB011.xsd','./msxsdtest/simpleType',valid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB012.xsd','./msxsdtest/simpleType',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB012.xsd','./msxsdtest/simpleType',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB013.xsd','./msxsdtest/simpleType',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB014.xsd','./msxsdtest/simpleType',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB015.xsd','./msxsdtest/simpleType',valid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB015.xsd','./msxsdtest/simpleType',valid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB016.xsd','./msxsdtest/simpleType',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB017.xsd','./msxsdtest/simpleType',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB018.xsd','./msxsdtest/simpleType',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB019.xsd','./msxsdtest/simpleType',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB020.xsd','./msxsdtest/simpleType',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB020.xsd','./msxsdtest/simpleType',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB021.xsd','./msxsdtest/simpleType',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB021.xsd','./msxsdtest/simpleType',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB022.xsd','./msxsdtest/simpleType',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB022.xsd','./msxsdtest/simpleType',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB023.xsd','./msxsdtest/simpleType',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB023.xsd','./msxsdtest/simpleType',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB024.xsd','./msxsdtest/simpleType',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB024.xsd','./msxsdtest/simpleType',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC001.xsd','./msxsdtest/simpleType',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC001.xsd','./msxsdtest/simpleType',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC002.xsd','./msxsdtest/simpleType',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC003.xsd','./msxsdtest/simpleType',valid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC003.xsd','./msxsdtest/simpleType',valid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC004.xsd','./msxsdtest/simpleType',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC005.xsd','./msxsdtest/simpleType',valid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC005.xsd','./msxsdtest/simpleType',valid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC006.xsd','./msxsdtest/simpleType',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC006.xsd','./msxsdtest/simpleType',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC007.xsd','./msxsdtest/simpleType',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC007.xsd','./msxsdtest/simpleType',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC008.xsd','./msxsdtest/simpleType',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC008.xsd','./msxsdtest/simpleType',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC009.xsd','./msxsdtest/simpleType',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC010.xsd','./msxsdtest/simpleType',valid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC010.xsd','./msxsdtest/simpleType',valid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC011.xsd','./msxsdtest/simpleType',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC012.xsd','./msxsdtest/simpleType',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC013.xsd','./msxsdtest/simpleType',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC014.xsd','./msxsdtest/simpleType',valid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC014.xsd','./msxsdtest/simpleType',valid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC015.xsd','./msxsdtest/simpleType',valid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC015.xsd','./msxsdtest/simpleType',valid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC016.xsd','./msxsdtest/simpleType',valid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC016.xsd','./msxsdtest/simpleType',valid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC017.xsd','./msxsdtest/simpleType',valid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC017.xsd','./msxsdtest/simpleType',valid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC018.xsd','./msxsdtest/simpleType',valid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC018.xsd','./msxsdtest/simpleType',valid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC019.xsd','./msxsdtest/simpleType',valid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC019.xsd','./msxsdtest/simpleType',valid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC020.xsd','./msxsdtest/simpleType',valid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC020.xsd','./msxsdtest/simpleType',valid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC021.xsd','./msxsdtest/simpleType',valid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC021.xsd','./msxsdtest/simpleType',valid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC022.xsd','./msxsdtest/simpleType',valid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC022.xsd','./msxsdtest/simpleType',valid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC023.xsd','./msxsdtest/simpleType',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC023.xsd','./msxsdtest/simpleType',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC024.xsd','./msxsdtest/simpleType',valid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC024.xsd','./msxsdtest/simpleType',valid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC025.xsd','./msxsdtest/simpleType',valid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC025.xsd','./msxsdtest/simpleType',valid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC026.xsd','./msxsdtest/simpleType',valid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC026.xsd','./msxsdtest/simpleType',valid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC027.xsd','./msxsdtest/simpleType',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC027.xsd','./msxsdtest/simpleType',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC028.xsd','./msxsdtest/simpleType',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC028.xsd','./msxsdtest/simpleType',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC029.xsd','./msxsdtest/simpleType',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC029.xsd','./msxsdtest/simpleType',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC030.xsd','./msxsdtest/simpleType',valid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC030.xsd','./msxsdtest/simpleType',valid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC031.xsd','./msxsdtest/simpleType',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC031.xsd','./msxsdtest/simpleType',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC032.xsd','./msxsdtest/simpleType',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC032.xsd','./msxsdtest/simpleType',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC033.xsd','./msxsdtest/simpleType',valid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC033.xsd','./msxsdtest/simpleType',valid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD001.xsd','./msxsdtest/simpleType',valid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD001.xsd','./msxsdtest/simpleType',valid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD002.xsd','./msxsdtest/simpleType',invalid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD003.xsd','./msxsdtest/simpleType',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD004.xsd','./msxsdtest/simpleType',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD005.xsd','./msxsdtest/simpleType',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD006.xsd','./msxsdtest/simpleType',valid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD006.xsd','./msxsdtest/simpleType',valid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD007.xsd','./msxsdtest/simpleType',valid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD007.xsd','./msxsdtest/simpleType',valid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD008.xsd','./msxsdtest/simpleType',valid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD008.xsd','./msxsdtest/simpleType',valid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD009.xsd','./msxsdtest/simpleType',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD010.xsd','./msxsdtest/simpleType',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD011.xsd','./msxsdtest/simpleType',valid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD011.xsd','./msxsdtest/simpleType',valid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD012.xsd','./msxsdtest/simpleType',valid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD012.xsd','./msxsdtest/simpleType',valid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD013.xsd','./msxsdtest/simpleType',valid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD013.xsd','./msxsdtest/simpleType',valid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD014.xsd','./msxsdtest/simpleType',valid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD014.xsd','./msxsdtest/simpleType',valid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD015.xsd','./msxsdtest/simpleType',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD016.xsd','./msxsdtest/simpleType',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD017.xsd','./msxsdtest/simpleType',invalid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD018.xsd','./msxsdtest/simpleType',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD019.xsd','./msxsdtest/simpleType',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD020.xsd','./msxsdtest/simpleType',valid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD020.xsd','./msxsdtest/simpleType',valid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD021.xsd','./msxsdtest/simpleType',valid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD021.xsd','./msxsdtest/simpleType',valid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE001.xsd','./msxsdtest/simpleType',valid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE001.xsd','./msxsdtest/simpleType',valid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE002.xsd','./msxsdtest/simpleType',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE003.xsd','./msxsdtest/simpleType',invalid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE004.xsd','./msxsdtest/simpleType',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE005.xsd','./msxsdtest/simpleType',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE006.xsd','./msxsdtest/simpleType',valid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE006.xsd','./msxsdtest/simpleType',valid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE007.xsd','./msxsdtest/simpleType',valid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE007.xsd','./msxsdtest/simpleType',valid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE008.xsd','./msxsdtest/simpleType',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE008.xsd','./msxsdtest/simpleType',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE009.xsd','./msxsdtest/simpleType',valid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE009.xsd','./msxsdtest/simpleType',valid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE010.xsd','./msxsdtest/simpleType',valid),
+ {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE010.xsd','./msxsdtest/simpleType',valid),
STResList108 = [STRes107|STResList107],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE011.xsd','./msxsdtest/simpleType',valid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE011.xsd','./msxsdtest/simpleType',valid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE012.xsd','./msxsdtest/simpleType',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE013.xsd','./msxsdtest/simpleType',valid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE013.xsd','./msxsdtest/simpleType',valid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE014.xsd','./msxsdtest/simpleType',valid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE014.xsd','./msxsdtest/simpleType',valid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE015.xsd','./msxsdtest/simpleType',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE016.xsd','./msxsdtest/simpleType',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE017.xsd','./msxsdtest/simpleType',valid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE017.xsd','./msxsdtest/simpleType',valid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE018.xsd','./msxsdtest/simpleType',invalid),
STResList116 = [STRes115|STResList115],
@@ -22242,278 +22230,278 @@ stABCDE(Config) when is_list(Config) ->
stFGH(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF001.xsd','./msxsdtest/simpleType',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF001.xsd','./msxsdtest/simpleType',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF002.xsd','./msxsdtest/simpleType',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF002.xsd','./msxsdtest/simpleType',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF003.xsd','./msxsdtest/simpleType',valid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF003.xsd','./msxsdtest/simpleType',valid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF004.xsd','./msxsdtest/simpleType',valid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF004.xsd','./msxsdtest/simpleType',valid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF005.xsd','./msxsdtest/simpleType',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF006.xsd','./msxsdtest/simpleType',valid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF006.xsd','./msxsdtest/simpleType',valid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF007.xsd','./msxsdtest/simpleType',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF007.xsd','./msxsdtest/simpleType',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF008.xsd','./msxsdtest/simpleType',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF008.xsd','./msxsdtest/simpleType',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF009.xsd','./msxsdtest/simpleType',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF010.xsd','./msxsdtest/simpleType',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF011.xsd','./msxsdtest/simpleType',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF012.xsd','./msxsdtest/simpleType',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF013.xsd','./msxsdtest/simpleType',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF014.xsd','./msxsdtest/simpleType',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF015.xsd','./msxsdtest/simpleType',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF016.xsd','./msxsdtest/simpleType',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF016.xsd','./msxsdtest/simpleType',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF017.xsd','./msxsdtest/simpleType',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF017.xsd','./msxsdtest/simpleType',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF018.xsd','./msxsdtest/simpleType',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF019.xsd','./msxsdtest/simpleType',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF020.xsd','./msxsdtest/simpleType',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF020.xsd','./msxsdtest/simpleType',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF021.xsd','./msxsdtest/simpleType',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF021.xsd','./msxsdtest/simpleType',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF022.xsd','./msxsdtest/simpleType',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF022.xsd','./msxsdtest/simpleType',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF023.xsd','./msxsdtest/simpleType',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF023.xsd','./msxsdtest/simpleType',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF024.xsd','./msxsdtest/simpleType',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF024.xsd','./msxsdtest/simpleType',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF025.xsd','./msxsdtest/simpleType',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF025.xsd','./msxsdtest/simpleType',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF026.xsd','./msxsdtest/simpleType',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF026.xsd','./msxsdtest/simpleType',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF027.xsd','./msxsdtest/simpleType',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF027.xsd','./msxsdtest/simpleType',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF028.xsd','./msxsdtest/simpleType',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF028.xsd','./msxsdtest/simpleType',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF029.xsd','./msxsdtest/simpleType',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF029.xsd','./msxsdtest/simpleType',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF030.xsd','./msxsdtest/simpleType',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF030.xsd','./msxsdtest/simpleType',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF031.xsd','./msxsdtest/simpleType',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF031.xsd','./msxsdtest/simpleType',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF032.xsd','./msxsdtest/simpleType',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF032.xsd','./msxsdtest/simpleType',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF033.xsd','./msxsdtest/simpleType',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF033.xsd','./msxsdtest/simpleType',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF034.xsd','./msxsdtest/simpleType',valid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF034.xsd','./msxsdtest/simpleType',valid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF035.xsd','./msxsdtest/simpleType',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF035.xsd','./msxsdtest/simpleType',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF036.xsd','./msxsdtest/simpleType',valid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF036.xsd','./msxsdtest/simpleType',valid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF037.xsd','./msxsdtest/simpleType',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF037.xsd','./msxsdtest/simpleType',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG001.xsd','./msxsdtest/simpleType',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG001.xsd','./msxsdtest/simpleType',valid),
STResList38 = [STRes37|STResList37],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG001.xml','./msxsdtest/simpleType',valid,S37),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG001.xml','./msxsdtest/simpleType',valid,S37),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG002.xsd','./msxsdtest/simpleType',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG002.xsd','./msxsdtest/simpleType',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG002.xml','./msxsdtest/simpleType',valid,S38),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG002.xml','./msxsdtest/simpleType',valid,S38),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG003.xsd','./msxsdtest/simpleType',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG003.xsd','./msxsdtest/simpleType',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG003.xml','./msxsdtest/simpleType',invalid,S39),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG003.xml','./msxsdtest/simpleType',invalid,S39),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG004.xsd','./msxsdtest/simpleType',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG004.xsd','./msxsdtest/simpleType',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG004.xml','./msxsdtest/simpleType',valid,S40),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG004.xml','./msxsdtest/simpleType',valid,S40),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG005.xsd','./msxsdtest/simpleType',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG005.xsd','./msxsdtest/simpleType',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG005.xml','./msxsdtest/simpleType',invalid,S41),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG005.xml','./msxsdtest/simpleType',invalid,S41),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG006.xsd','./msxsdtest/simpleType',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG006.xsd','./msxsdtest/simpleType',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG006.xml','./msxsdtest/simpleType',valid,S42),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG006.xml','./msxsdtest/simpleType',valid,S42),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG007.xsd','./msxsdtest/simpleType',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG007.xsd','./msxsdtest/simpleType',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG007.xml','./msxsdtest/simpleType',invalid,S43),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG007.xml','./msxsdtest/simpleType',invalid,S43),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG008.xsd','./msxsdtest/simpleType',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG008.xsd','./msxsdtest/simpleType',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG008.xml','./msxsdtest/simpleType',valid,S44),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG008.xml','./msxsdtest/simpleType',valid,S44),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG009.xsd','./msxsdtest/simpleType',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG009.xsd','./msxsdtest/simpleType',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG009.xml','./msxsdtest/simpleType',invalid,S45),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG009.xml','./msxsdtest/simpleType',invalid,S45),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG010.xsd','./msxsdtest/simpleType',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG010.xsd','./msxsdtest/simpleType',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG010.xml','./msxsdtest/simpleType',valid,S46),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG010.xml','./msxsdtest/simpleType',valid,S46),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG011.xsd','./msxsdtest/simpleType',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG011.xsd','./msxsdtest/simpleType',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG011.xml','./msxsdtest/simpleType',invalid,S47),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG011.xml','./msxsdtest/simpleType',invalid,S47),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG012.xsd','./msxsdtest/simpleType',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG012.xsd','./msxsdtest/simpleType',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG012.xml','./msxsdtest/simpleType',valid,S48),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG012.xml','./msxsdtest/simpleType',valid,S48),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG013.xsd','./msxsdtest/simpleType',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG013.xsd','./msxsdtest/simpleType',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG013.xml','./msxsdtest/simpleType',invalid,S49),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG013.xml','./msxsdtest/simpleType',invalid,S49),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH001.xsd','./msxsdtest/simpleType',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH001.xsd','./msxsdtest/simpleType',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH001.xml','./msxsdtest/simpleType',valid,S50),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH001.xml','./msxsdtest/simpleType',valid,S50),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH002.xsd','./msxsdtest/simpleType',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH002.xsd','./msxsdtest/simpleType',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH002.xml','./msxsdtest/simpleType',invalid,S51),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH002.xml','./msxsdtest/simpleType',invalid,S51),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH003.xsd','./msxsdtest/simpleType',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH003.xsd','./msxsdtest/simpleType',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH003.xml','./msxsdtest/simpleType',valid,S52),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH003.xml','./msxsdtest/simpleType',valid,S52),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH004.xsd','./msxsdtest/simpleType',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH004.xsd','./msxsdtest/simpleType',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH004.xml','./msxsdtest/simpleType',invalid,S53),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH004.xml','./msxsdtest/simpleType',invalid,S53),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH005.xsd','./msxsdtest/simpleType',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH005.xsd','./msxsdtest/simpleType',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH005.xml','./msxsdtest/simpleType',valid,S54),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH005.xml','./msxsdtest/simpleType',valid,S54),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH006.xsd','./msxsdtest/simpleType',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH006.xsd','./msxsdtest/simpleType',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH006.xml','./msxsdtest/simpleType',invalid,S55),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH006.xml','./msxsdtest/simpleType',invalid,S55),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH007.xsd','./msxsdtest/simpleType',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH007.xsd','./msxsdtest/simpleType',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH007.xml','./msxsdtest/simpleType',valid,S56),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH007.xml','./msxsdtest/simpleType',valid,S56),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH008.xsd','./msxsdtest/simpleType',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH008.xsd','./msxsdtest/simpleType',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH008.xml','./msxsdtest/simpleType',invalid,S57),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH008.xml','./msxsdtest/simpleType',invalid,S57),
ITResList21 = [ITRes20|ITResList20],
@@ -22524,175 +22512,175 @@ stFGH(Config) when is_list(Config) ->
stIJK(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI001.xsd','./msxsdtest/simpleType',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI001.xsd','./msxsdtest/simpleType',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI002.xsd','./msxsdtest/simpleType',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI002.xsd','./msxsdtest/simpleType',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI003.xsd','./msxsdtest/simpleType',valid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI003.xsd','./msxsdtest/simpleType',valid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI004.xsd','./msxsdtest/simpleType',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI005.xsd','./msxsdtest/simpleType',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ001.xsd','./msxsdtest/simpleType',valid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ001.xsd','./msxsdtest/simpleType',valid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ002.xsd','./msxsdtest/simpleType',valid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ002.xsd','./msxsdtest/simpleType',valid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ003.xsd','./msxsdtest/simpleType',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ004.xsd','./msxsdtest/simpleType',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ004.xsd','./msxsdtest/simpleType',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ005.xsd','./msxsdtest/simpleType',valid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ005.xsd','./msxsdtest/simpleType',valid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ006.xsd','./msxsdtest/simpleType',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ006.xsd','./msxsdtest/simpleType',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ007.xsd','./msxsdtest/simpleType',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ007.xsd','./msxsdtest/simpleType',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ008.xsd','./msxsdtest/simpleType',valid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ008.xsd','./msxsdtest/simpleType',valid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ009.xsd','./msxsdtest/simpleType',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ010.xsd','./msxsdtest/simpleType',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ011.xsd','./msxsdtest/simpleType',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ012.xsd','./msxsdtest/simpleType',invalid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ013.xsd','./msxsdtest/simpleType',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ014.xsd','./msxsdtest/simpleType',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ015.xsd','./msxsdtest/simpleType',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ016.xsd','./msxsdtest/simpleType',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ017.xsd','./msxsdtest/simpleType',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ018.xsd','./msxsdtest/simpleType',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ019.xsd','./msxsdtest/simpleType',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK001.xsd','./msxsdtest/simpleType',valid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK001.xsd','./msxsdtest/simpleType',valid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK002.xsd','./msxsdtest/simpleType',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK003.xsd','./msxsdtest/simpleType',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK004.xsd','./msxsdtest/simpleType',valid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK004.xsd','./msxsdtest/simpleType',valid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK005.xsd','./msxsdtest/simpleType',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK006.xsd','./msxsdtest/simpleType',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK006.xsd','./msxsdtest/simpleType',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK007.xsd','./msxsdtest/simpleType',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK007.xsd','./msxsdtest/simpleType',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK008.xsd','./msxsdtest/simpleType',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK008.xsd','./msxsdtest/simpleType',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK009.xsd','./msxsdtest/simpleType',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK009.xsd','./msxsdtest/simpleType',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK010.xsd','./msxsdtest/simpleType',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK011.xsd','./msxsdtest/simpleType',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK012.xsd','./msxsdtest/simpleType',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK013.xsd','./msxsdtest/simpleType',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK014.xsd','./msxsdtest/simpleType',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK015.xsd','./msxsdtest/simpleType',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK016.xsd','./msxsdtest/simpleType',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK017.xsd','./msxsdtest/simpleType',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK018.xsd','./msxsdtest/simpleType',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK019.xsd','./msxsdtest/simpleType',invalid),
STResList43 = [STRes42|STResList42],
@@ -22703,22 +22691,22 @@ stIJK(Config) when is_list(Config) ->
stZ(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ001.xsd','./msxsdtest/simpleType',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ001.xsd','./msxsdtest/simpleType',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ002.xsd','./msxsdtest/simpleType',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ003.xsd','./msxsdtest/simpleType',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ004.xsd','./msxsdtest/simpleType',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ004.xsd','./msxsdtest/simpleType',valid),
STResList4 = [STRes3|STResList3],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stZ004.xml','./msxsdtest/simpleType',valid,S3),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stZ004.xml','./msxsdtest/simpleType',valid,S3),
ITResList1 = [ITRes0|ITResList0],
@@ -22729,407 +22717,407 @@ stZ(Config) when is_list(Config) ->
wildABCDEF(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA001.xsd','./msxsdtest/wildCards',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA001.xsd','./msxsdtest/wildCards',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA002.xsd','./msxsdtest/wildCards',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA002.xsd','./msxsdtest/wildCards',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA003.xsd','./msxsdtest/wildCards',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA003.xsd','./msxsdtest/wildCards',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA004.xsd','./msxsdtest/wildCards',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA004.xsd','./msxsdtest/wildCards',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA005.xsd','./msxsdtest/wildCards',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA005.xsd','./msxsdtest/wildCards',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA006.xsd','./msxsdtest/wildCards',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA007.xsd','./msxsdtest/wildCards',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA008.xsd','./msxsdtest/wildCards',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB009.xsd','./msxsdtest/wildCards',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB009.xsd','./msxsdtest/wildCards',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB010.xsd','./msxsdtest/wildCards',valid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB010.xsd','./msxsdtest/wildCards',valid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB011.xsd','./msxsdtest/wildCards',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB011.xsd','./msxsdtest/wildCards',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB012.xsd','./msxsdtest/wildCards',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB012.xsd','./msxsdtest/wildCards',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB013.xsd','./msxsdtest/wildCards',valid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB013.xsd','./msxsdtest/wildCards',valid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB014.xsd','./msxsdtest/wildCards',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB014.xsd','./msxsdtest/wildCards',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB015.xsd','./msxsdtest/wildCards',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB015.xsd','./msxsdtest/wildCards',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB016.xsd','./msxsdtest/wildCards',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB016.xsd','./msxsdtest/wildCards',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB017.xsd','./msxsdtest/wildCards',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB017.xsd','./msxsdtest/wildCards',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB018.xsd','./msxsdtest/wildCards',valid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB018.xsd','./msxsdtest/wildCards',valid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB019.xsd','./msxsdtest/wildCards',valid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB019.xsd','./msxsdtest/wildCards',valid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB020.xsd','./msxsdtest/wildCards',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB020.xsd','./msxsdtest/wildCards',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB021.xsd','./msxsdtest/wildCards',valid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB021.xsd','./msxsdtest/wildCards',valid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB022.xsd','./msxsdtest/wildCards',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB022.xsd','./msxsdtest/wildCards',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB023.xsd','./msxsdtest/wildCards',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB023.xsd','./msxsdtest/wildCards',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB024.xsd','./msxsdtest/wildCards',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB024.xsd','./msxsdtest/wildCards',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB025.xsd','./msxsdtest/wildCards',valid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB025.xsd','./msxsdtest/wildCards',valid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB026.xsd','./msxsdtest/wildCards',valid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB026.xsd','./msxsdtest/wildCards',valid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB027.xsd','./msxsdtest/wildCards',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB027.xsd','./msxsdtest/wildCards',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB028.xsd','./msxsdtest/wildCards',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB028.xsd','./msxsdtest/wildCards',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB029.xsd','./msxsdtest/wildCards',valid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB029.xsd','./msxsdtest/wildCards',valid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC030.xsd','./msxsdtest/wildCards',valid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC030.xsd','./msxsdtest/wildCards',valid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC031.xsd','./msxsdtest/wildCards',valid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC031.xsd','./msxsdtest/wildCards',valid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC032.xsd','./msxsdtest/wildCards',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC032.xsd','./msxsdtest/wildCards',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC033.xsd','./msxsdtest/wildCards',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC033.xsd','./msxsdtest/wildCards',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC034.xsd','./msxsdtest/wildCards',valid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC034.xsd','./msxsdtest/wildCards',valid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC035.xsd','./msxsdtest/wildCards',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC035.xsd','./msxsdtest/wildCards',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC036.xsd','./msxsdtest/wildCards',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC036.xsd','./msxsdtest/wildCards',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC037.xsd','./msxsdtest/wildCards',valid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC037.xsd','./msxsdtest/wildCards',valid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC038.xsd','./msxsdtest/wildCards',valid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC038.xsd','./msxsdtest/wildCards',valid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC039.xsd','./msxsdtest/wildCards',valid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC039.xsd','./msxsdtest/wildCards',valid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC040.xsd','./msxsdtest/wildCards',valid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC040.xsd','./msxsdtest/wildCards',valid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC041.xsd','./msxsdtest/wildCards',valid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC041.xsd','./msxsdtest/wildCards',valid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC042.xsd','./msxsdtest/wildCards',valid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC042.xsd','./msxsdtest/wildCards',valid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC043.xsd','./msxsdtest/wildCards',valid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC043.xsd','./msxsdtest/wildCards',valid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC044.xsd','./msxsdtest/wildCards',valid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC044.xsd','./msxsdtest/wildCards',valid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC045.xsd','./msxsdtest/wildCards',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC045.xsd','./msxsdtest/wildCards',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC046.xsd','./msxsdtest/wildCards',valid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC046.xsd','./msxsdtest/wildCards',valid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC047.xsd','./msxsdtest/wildCards',valid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC047.xsd','./msxsdtest/wildCards',valid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC048.xsd','./msxsdtest/wildCards',valid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC048.xsd','./msxsdtest/wildCards',valid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC049.xsd','./msxsdtest/wildCards',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC049.xsd','./msxsdtest/wildCards',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC050.xsd','./msxsdtest/wildCards',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC050.xsd','./msxsdtest/wildCards',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC051.xsd','./msxsdtest/wildCards',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC051.xsd','./msxsdtest/wildCards',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC052.xsd','./msxsdtest/wildCards',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC052.xsd','./msxsdtest/wildCards',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC053.xsd','./msxsdtest/wildCards',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC053.xsd','./msxsdtest/wildCards',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC054.xsd','./msxsdtest/wildCards',valid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC054.xsd','./msxsdtest/wildCards',valid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC055.xsd','./msxsdtest/wildCards',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC055.xsd','./msxsdtest/wildCards',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC056.xsd','./msxsdtest/wildCards',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC056.xsd','./msxsdtest/wildCards',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC057.xsd','./msxsdtest/wildCards',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC057.xsd','./msxsdtest/wildCards',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC058.xsd','./msxsdtest/wildCards',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC058.xsd','./msxsdtest/wildCards',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC059.xsd','./msxsdtest/wildCards',valid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC059.xsd','./msxsdtest/wildCards',valid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC060.xsd','./msxsdtest/wildCards',valid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC060.xsd','./msxsdtest/wildCards',valid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC061.xsd','./msxsdtest/wildCards',valid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC061.xsd','./msxsdtest/wildCards',valid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC062.xsd','./msxsdtest/wildCards',valid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC062.xsd','./msxsdtest/wildCards',valid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC063.xsd','./msxsdtest/wildCards',valid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC063.xsd','./msxsdtest/wildCards',valid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC064.xsd','./msxsdtest/wildCards',valid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC064.xsd','./msxsdtest/wildCards',valid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC065.xsd','./msxsdtest/wildCards',valid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC065.xsd','./msxsdtest/wildCards',valid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC066.xsd','./msxsdtest/wildCards',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC066.xsd','./msxsdtest/wildCards',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC067.xsd','./msxsdtest/wildCards',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC067.xsd','./msxsdtest/wildCards',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC068.xsd','./msxsdtest/wildCards',valid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC068.xsd','./msxsdtest/wildCards',valid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC069.xsd','./msxsdtest/wildCards',valid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC069.xsd','./msxsdtest/wildCards',valid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC070.xsd','./msxsdtest/wildCards',valid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC070.xsd','./msxsdtest/wildCards',valid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD071.xsd','./msxsdtest/wildCards',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD071.xsd','./msxsdtest/wildCards',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD072.xsd','./msxsdtest/wildCards',valid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD072.xsd','./msxsdtest/wildCards',valid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD073.xsd','./msxsdtest/wildCards',valid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD073.xsd','./msxsdtest/wildCards',valid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD074.xsd','./msxsdtest/wildCards',valid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD074.xsd','./msxsdtest/wildCards',valid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD075.xsd','./msxsdtest/wildCards',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD075.xsd','./msxsdtest/wildCards',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD076.xsd','./msxsdtest/wildCards',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD076.xsd','./msxsdtest/wildCards',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD077.xsd','./msxsdtest/wildCards',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD077.xsd','./msxsdtest/wildCards',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD078.xsd','./msxsdtest/wildCards',invalid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD078.xsd','./msxsdtest/wildCards',invalid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD079.xsd','./msxsdtest/wildCards',invalid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD079.xsd','./msxsdtest/wildCards',invalid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildE001.xsd','./msxsdtest/wildCards',valid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildE001.xsd','./msxsdtest/wildCards',valid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildE002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildE002.xsd','./msxsdtest/wildCards',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF001.xsd','./msxsdtest/wildCards',valid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF001.xsd','./msxsdtest/wildCards',valid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF002.xsd','./msxsdtest/wildCards',valid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF002.xsd','./msxsdtest/wildCards',valid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF003.xsd','./msxsdtest/wildCards',valid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF003.xsd','./msxsdtest/wildCards',valid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF004.xsd','./msxsdtest/wildCards',valid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF004.xsd','./msxsdtest/wildCards',valid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF005.xsd','./msxsdtest/wildCards',valid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF005.xsd','./msxsdtest/wildCards',valid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF006.xsd','./msxsdtest/wildCards',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF007.xsd','./msxsdtest/wildCards',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF008.xsd','./msxsdtest/wildCards',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF009.xsd','./msxsdtest/wildCards',invalid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF009.xsd','./msxsdtest/wildCards',invalid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF010.xsd','./msxsdtest/wildCards',invalid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF010.xsd','./msxsdtest/wildCards',invalid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF011.xsd','./msxsdtest/wildCards',valid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF011.xsd','./msxsdtest/wildCards',valid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF012.xsd','./msxsdtest/wildCards',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF012.xsd','./msxsdtest/wildCards',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF013.xsd','./msxsdtest/wildCards',invalid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF013.xsd','./msxsdtest/wildCards',invalid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF014.xsd','./msxsdtest/wildCards',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF014.xsd','./msxsdtest/wildCards',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF015.xsd','./msxsdtest/wildCards',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF015.xsd','./msxsdtest/wildCards',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF016.xsd','./msxsdtest/wildCards',invalid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF016.xsd','./msxsdtest/wildCards',invalid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF017.xsd','./msxsdtest/wildCards',valid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF017.xsd','./msxsdtest/wildCards',valid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF018.xsd','./msxsdtest/wildCards',invalid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF018.xsd','./msxsdtest/wildCards',invalid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF019.xsd','./msxsdtest/wildCards',valid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF019.xsd','./msxsdtest/wildCards',valid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF020.xsd','./msxsdtest/wildCards',valid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF020.xsd','./msxsdtest/wildCards',valid),
STResList101 = [STRes100|STResList100],
@@ -23140,362 +23128,362 @@ wildABCDEF(Config) when is_list(Config) ->
wildGHI(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG001.xsd','./msxsdtest/wildCards',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG001.xsd','./msxsdtest/wildCards',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG001.xml','./msxsdtest/wildCards',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG001.xml','./msxsdtest/wildCards',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG002.xsd','./msxsdtest/wildCards',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG002.xsd','./msxsdtest/wildCards',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG002.xml','./msxsdtest/wildCards',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG002.xml','./msxsdtest/wildCards',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG003.xsd','./msxsdtest/wildCards',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG003.xsd','./msxsdtest/wildCards',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG003.xml','./msxsdtest/wildCards',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG003.xml','./msxsdtest/wildCards',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG004.xsd','./msxsdtest/wildCards',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG004.xsd','./msxsdtest/wildCards',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG004.xml','./msxsdtest/wildCards',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG004.xml','./msxsdtest/wildCards',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG005.xsd','./msxsdtest/wildCards',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG005.xsd','./msxsdtest/wildCards',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG005.xml','./msxsdtest/wildCards',invalid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG005.xml','./msxsdtest/wildCards',invalid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG006.xsd','./msxsdtest/wildCards',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG006.xsd','./msxsdtest/wildCards',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG006.xml','./msxsdtest/wildCards',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG006.xml','./msxsdtest/wildCards',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG007.xsd','./msxsdtest/wildCards',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG007.xsd','./msxsdtest/wildCards',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG007.xml','./msxsdtest/wildCards',valid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG007.xml','./msxsdtest/wildCards',valid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG008.xsd','./msxsdtest/wildCards',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG008.xsd','./msxsdtest/wildCards',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG008.xml','./msxsdtest/wildCards',invalid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG008.xml','./msxsdtest/wildCards',invalid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG009.xsd','./msxsdtest/wildCards',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG009.xsd','./msxsdtest/wildCards',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG009.xml','./msxsdtest/wildCards',invalid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG009.xml','./msxsdtest/wildCards',invalid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG010.xsd','./msxsdtest/wildCards',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG010.xsd','./msxsdtest/wildCards',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG010.xml','./msxsdtest/wildCards',valid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG010.xml','./msxsdtest/wildCards',valid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG011.xsd','./msxsdtest/wildCards',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG011.xsd','./msxsdtest/wildCards',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG011.xml','./msxsdtest/wildCards',invalid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG011.xml','./msxsdtest/wildCards',invalid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG012.xsd','./msxsdtest/wildCards',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG012.xsd','./msxsdtest/wildCards',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG012.xml','./msxsdtest/wildCards',valid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG012.xml','./msxsdtest/wildCards',valid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG013.xsd','./msxsdtest/wildCards',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG013.xsd','./msxsdtest/wildCards',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG013.xml','./msxsdtest/wildCards',valid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG013.xml','./msxsdtest/wildCards',valid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG014.xsd','./msxsdtest/wildCards',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG014.xsd','./msxsdtest/wildCards',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG014.xml','./msxsdtest/wildCards',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG014.xml','./msxsdtest/wildCards',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG015.xsd','./msxsdtest/wildCards',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG015.xsd','./msxsdtest/wildCards',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG015.xml','./msxsdtest/wildCards',valid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG015.xml','./msxsdtest/wildCards',valid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG016.xsd','./msxsdtest/wildCards',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG016.xsd','./msxsdtest/wildCards',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG016.xml','./msxsdtest/wildCards',valid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG016.xml','./msxsdtest/wildCards',valid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG017.xsd','./msxsdtest/wildCards',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG017.xsd','./msxsdtest/wildCards',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG017.xml','./msxsdtest/wildCards',invalid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG017.xml','./msxsdtest/wildCards',invalid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG018.xsd','./msxsdtest/wildCards',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG018.xsd','./msxsdtest/wildCards',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG018.xml','./msxsdtest/wildCards',valid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG018.xml','./msxsdtest/wildCards',valid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG019.xsd','./msxsdtest/wildCards',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG019.xsd','./msxsdtest/wildCards',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG019.xml','./msxsdtest/wildCards',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG019.xml','./msxsdtest/wildCards',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG020.xsd','./msxsdtest/wildCards',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG020.xsd','./msxsdtest/wildCards',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG020.xml','./msxsdtest/wildCards',invalid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG020.xml','./msxsdtest/wildCards',invalid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG021.xsd','./msxsdtest/wildCards',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG021.xsd','./msxsdtest/wildCards',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG021.xml','./msxsdtest/wildCards',valid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG021.xml','./msxsdtest/wildCards',valid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG022.xsd','./msxsdtest/wildCards',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG022.xsd','./msxsdtest/wildCards',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG022.xml','./msxsdtest/wildCards',invalid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG022.xml','./msxsdtest/wildCards',invalid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG023.xsd','./msxsdtest/wildCards',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG023.xsd','./msxsdtest/wildCards',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG023.xml','./msxsdtest/wildCards',valid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG023.xml','./msxsdtest/wildCards',valid,S22),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG024.xsd','./msxsdtest/wildCards',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG024.xsd','./msxsdtest/wildCards',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG024.xml','./msxsdtest/wildCards',invalid,S23),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG024.xml','./msxsdtest/wildCards',invalid,S23),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG025.xsd','./msxsdtest/wildCards',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG025.xsd','./msxsdtest/wildCards',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG025.xml','./msxsdtest/wildCards',invalid,S24),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG025.xml','./msxsdtest/wildCards',invalid,S24),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG026.xsd','./msxsdtest/wildCards',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG026.xsd','./msxsdtest/wildCards',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG026.xml','./msxsdtest/wildCards',valid,S25),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG026.xml','./msxsdtest/wildCards',valid,S25),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG027.xsd','./msxsdtest/wildCards',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG027.xsd','./msxsdtest/wildCards',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG027.xml','./msxsdtest/wildCards',valid,S26),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG027.xml','./msxsdtest/wildCards',valid,S26),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG028.xsd','./msxsdtest/wildCards',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG028.xsd','./msxsdtest/wildCards',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG028.xml','./msxsdtest/wildCards',invalid,S27),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG028.xml','./msxsdtest/wildCards',invalid,S27),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG029.xsd','./msxsdtest/wildCards',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG029.xsd','./msxsdtest/wildCards',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG029.xml','./msxsdtest/wildCards',invalid,S28),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG029.xml','./msxsdtest/wildCards',invalid,S28),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG030.xsd','./msxsdtest/wildCards',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG030.xsd','./msxsdtest/wildCards',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG030.xml','./msxsdtest/wildCards',invalid,S29),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG030.xml','./msxsdtest/wildCards',invalid,S29),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG031.xsd','./msxsdtest/wildCards',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG031.xsd','./msxsdtest/wildCards',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG031.xml','./msxsdtest/wildCards',valid,S30),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG031.xml','./msxsdtest/wildCards',valid,S30),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG032.xsd','./msxsdtest/wildCards',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG032.xsd','./msxsdtest/wildCards',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG032.xml','./msxsdtest/wildCards',invalid,S31),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG032.xml','./msxsdtest/wildCards',invalid,S31),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG033.xsd','./msxsdtest/wildCards',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG033.xsd','./msxsdtest/wildCards',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG033.xml','./msxsdtest/wildCards',valid,S32),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG033.xml','./msxsdtest/wildCards',valid,S32),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG034.xsd','./msxsdtest/wildCards',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG034.xsd','./msxsdtest/wildCards',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG034.xml','./msxsdtest/wildCards',invalid,S33),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG034.xml','./msxsdtest/wildCards',invalid,S33),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG035.xsd','./msxsdtest/wildCards',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG035.xsd','./msxsdtest/wildCards',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG035.xml','./msxsdtest/wildCards',valid,S34),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG035.xml','./msxsdtest/wildCards',valid,S34),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG036.xsd','./msxsdtest/wildCards',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG036.xsd','./msxsdtest/wildCards',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG036.xml','./msxsdtest/wildCards',invalid,S35),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG036.xml','./msxsdtest/wildCards',invalid,S35),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG037.xsd','./msxsdtest/wildCards',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG037.xsd','./msxsdtest/wildCards',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG037.xml','./msxsdtest/wildCards',valid,S36),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG037.xml','./msxsdtest/wildCards',valid,S36),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG038.xsd','./msxsdtest/wildCards',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG038.xsd','./msxsdtest/wildCards',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG038.xml','./msxsdtest/wildCards',valid,S37),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG038.xml','./msxsdtest/wildCards',valid,S37),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG039.xsd','./msxsdtest/wildCards',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG039.xsd','./msxsdtest/wildCards',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG039.xml','./msxsdtest/wildCards',invalid,S38),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG039.xml','./msxsdtest/wildCards',invalid,S38),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG040.xsd','./msxsdtest/wildCards',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG040.xsd','./msxsdtest/wildCards',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG040.xml','./msxsdtest/wildCards',valid,S39),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG040.xml','./msxsdtest/wildCards',valid,S39),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH001.xsd','./msxsdtest/wildCards',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH001.xsd','./msxsdtest/wildCards',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH001.xml','./msxsdtest/wildCards',invalid,S40),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH001.xml','./msxsdtest/wildCards',invalid,S40),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH002.xsd','./msxsdtest/wildCards',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH002.xsd','./msxsdtest/wildCards',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH002.xml','./msxsdtest/wildCards',invalid,S41),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH002.xml','./msxsdtest/wildCards',invalid,S41),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH003.xsd','./msxsdtest/wildCards',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH003.xsd','./msxsdtest/wildCards',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH003.xml','./msxsdtest/wildCards',valid,S42),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH003.xml','./msxsdtest/wildCards',valid,S42),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH004.xsd','./msxsdtest/wildCards',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH004.xsd','./msxsdtest/wildCards',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH004.xml','./msxsdtest/wildCards',valid,S43),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH004.xml','./msxsdtest/wildCards',valid,S43),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH006.xsd','./msxsdtest/wildCards',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH006.xsd','./msxsdtest/wildCards',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH006.xml','./msxsdtest/wildCards',invalid,S44),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH006.xml','./msxsdtest/wildCards',invalid,S44),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH007.xsd','./msxsdtest/wildCards',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH007.xsd','./msxsdtest/wildCards',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH007.xml','./msxsdtest/wildCards',valid,S45),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH007.xml','./msxsdtest/wildCards',valid,S45),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH008.xsd','./msxsdtest/wildCards',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH008.xsd','./msxsdtest/wildCards',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH008.xml','./msxsdtest/wildCards',invalid,S46),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH008.xml','./msxsdtest/wildCards',invalid,S46),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH009.xsd','./msxsdtest/wildCards',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH009.xsd','./msxsdtest/wildCards',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH009.xml','./msxsdtest/wildCards',valid,S47),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH009.xml','./msxsdtest/wildCards',valid,S47),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH010.xsd','./msxsdtest/wildCards',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH010.xsd','./msxsdtest/wildCards',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH010.xml','./msxsdtest/wildCards',valid,S48),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH010.xml','./msxsdtest/wildCards',valid,S48),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI001.xsd','./msxsdtest/wildCards',valid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI001.xsd','./msxsdtest/wildCards',valid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI002.xsd','./msxsdtest/wildCards',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI003.xsd','./msxsdtest/wildCards',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI003.xsd','./msxsdtest/wildCards',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI004.xsd','./msxsdtest/wildCards',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI004.xsd','./msxsdtest/wildCards',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI004.xml','./msxsdtest/wildCards',valid,S52),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI004.xml','./msxsdtest/wildCards',valid,S52),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI005.xsd','./msxsdtest/wildCards',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI005.xsd','./msxsdtest/wildCards',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI005.xml','./msxsdtest/wildCards',valid,S53),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI005.xml','./msxsdtest/wildCards',valid,S53),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI006.xsd','./msxsdtest/wildCards',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI006.xsd','./msxsdtest/wildCards',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI006.xml','./msxsdtest/wildCards',valid,S54),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI006.xml','./msxsdtest/wildCards',valid,S54),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI007.xsd','./msxsdtest/wildCards',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI007.xsd','./msxsdtest/wildCards',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI007.xml','./msxsdtest/wildCards',valid,S55),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI007.xml','./msxsdtest/wildCards',valid,S55),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI008.xsd','./msxsdtest/wildCards',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI009.xsd','./msxsdtest/wildCards',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI009.xsd','./msxsdtest/wildCards',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI010.xsd','./msxsdtest/wildCards',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI010.xsd','./msxsdtest/wildCards',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI011.xsd','./msxsdtest/wildCards',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI011.xsd','./msxsdtest/wildCards',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI011.xml','./msxsdtest/wildCards',valid,S59),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI011.xml','./msxsdtest/wildCards',valid,S59),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI012.xsd','./msxsdtest/wildCards',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI012.xsd','./msxsdtest/wildCards',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI012.xml','./msxsdtest/wildCards',valid,S60),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI012.xml','./msxsdtest/wildCards',valid,S60),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI013.xsd','./msxsdtest/wildCards',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI013.xsd','./msxsdtest/wildCards',invalid),
STResList62 = [STRes61|STResList61],
@@ -23506,610 +23494,610 @@ wildGHI(Config) when is_list(Config) ->
wildJKLMNQOP(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ001.xsd','./msxsdtest/wildCards',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ001.xsd','./msxsdtest/wildCards',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ002.xsd','./msxsdtest/wildCards',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ002.xsd','./msxsdtest/wildCards',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ003.xsd','./msxsdtest/wildCards',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ003.xsd','./msxsdtest/wildCards',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ004.xsd','./msxsdtest/wildCards',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ004.xsd','./msxsdtest/wildCards',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ005.xsd','./msxsdtest/wildCards',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ005.xsd','./msxsdtest/wildCards',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ006.xsd','./msxsdtest/wildCards',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ007.xsd','./msxsdtest/wildCards',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ008.xsd','./msxsdtest/wildCards',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK001.xsd','./msxsdtest/wildCards',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK001.xsd','./msxsdtest/wildCards',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK002.xsd','./msxsdtest/wildCards',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK003.xsd','./msxsdtest/wildCards',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK003.xsd','./msxsdtest/wildCards',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK004.xsd','./msxsdtest/wildCards',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK004.xsd','./msxsdtest/wildCards',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK005.xsd','./msxsdtest/wildCards',valid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK005.xsd','./msxsdtest/wildCards',valid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK006.xsd','./msxsdtest/wildCards',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK007.xsd','./msxsdtest/wildCards',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK008.xsd','./msxsdtest/wildCards',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK008.xsd','./msxsdtest/wildCards',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK009.xsd','./msxsdtest/wildCards',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK009.xsd','./msxsdtest/wildCards',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK010.xsd','./msxsdtest/wildCards',valid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK010.xsd','./msxsdtest/wildCards',valid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK011.xsd','./msxsdtest/wildCards',valid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK011.xsd','./msxsdtest/wildCards',valid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK012.xsd','./msxsdtest/wildCards',valid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK012.xsd','./msxsdtest/wildCards',valid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK013.xsd','./msxsdtest/wildCards',valid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK013.xsd','./msxsdtest/wildCards',valid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK014.xsd','./msxsdtest/wildCards',valid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK014.xsd','./msxsdtest/wildCards',valid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK015.xsd','./msxsdtest/wildCards',valid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK015.xsd','./msxsdtest/wildCards',valid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK016.xsd','./msxsdtest/wildCards',valid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK016.xsd','./msxsdtest/wildCards',valid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK017.xsd','./msxsdtest/wildCards',valid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK017.xsd','./msxsdtest/wildCards',valid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK018.xsd','./msxsdtest/wildCards',valid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK018.xsd','./msxsdtest/wildCards',valid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK019.xsd','./msxsdtest/wildCards',valid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK019.xsd','./msxsdtest/wildCards',valid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK020.xsd','./msxsdtest/wildCards',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK020.xsd','./msxsdtest/wildCards',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK021.xsd','./msxsdtest/wildCards',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK021.xsd','./msxsdtest/wildCards',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK022.xsd','./msxsdtest/wildCards',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK022.xsd','./msxsdtest/wildCards',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK023.xsd','./msxsdtest/wildCards',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK023.xsd','./msxsdtest/wildCards',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK024.xsd','./msxsdtest/wildCards',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK024.xsd','./msxsdtest/wildCards',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK025.xsd','./msxsdtest/wildCards',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK025.xsd','./msxsdtest/wildCards',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK026.xsd','./msxsdtest/wildCards',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK026.xsd','./msxsdtest/wildCards',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK027.xsd','./msxsdtest/wildCards',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK027.xsd','./msxsdtest/wildCards',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK028.xsd','./msxsdtest/wildCards',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK028.xsd','./msxsdtest/wildCards',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK029.xsd','./msxsdtest/wildCards',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK029.xsd','./msxsdtest/wildCards',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK030.xsd','./msxsdtest/wildCards',valid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK030.xsd','./msxsdtest/wildCards',valid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK031.xsd','./msxsdtest/wildCards',valid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK031.xsd','./msxsdtest/wildCards',valid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK032.xsd','./msxsdtest/wildCards',valid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK032.xsd','./msxsdtest/wildCards',valid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK033.xsd','./msxsdtest/wildCards',valid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK033.xsd','./msxsdtest/wildCards',valid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK034.xsd','./msxsdtest/wildCards',valid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK034.xsd','./msxsdtest/wildCards',valid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK035.xsd','./msxsdtest/wildCards',valid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK035.xsd','./msxsdtest/wildCards',valid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK036.xsd','./msxsdtest/wildCards',valid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK036.xsd','./msxsdtest/wildCards',valid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK037.xsd','./msxsdtest/wildCards',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK037.xsd','./msxsdtest/wildCards',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK038.xsd','./msxsdtest/wildCards',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK038.xsd','./msxsdtest/wildCards',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK039.xsd','./msxsdtest/wildCards',valid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK039.xsd','./msxsdtest/wildCards',valid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK040.xsd','./msxsdtest/wildCards',valid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK040.xsd','./msxsdtest/wildCards',valid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK041.xsd','./msxsdtest/wildCards',valid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK041.xsd','./msxsdtest/wildCards',valid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL001.xsd','./msxsdtest/wildCards',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL001.xsd','./msxsdtest/wildCards',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL002.xsd','./msxsdtest/wildCards',valid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL002.xsd','./msxsdtest/wildCards',valid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL003.xsd','./msxsdtest/wildCards',valid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL003.xsd','./msxsdtest/wildCards',valid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL004.xsd','./msxsdtest/wildCards',valid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL004.xsd','./msxsdtest/wildCards',valid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL005.xsd','./msxsdtest/wildCards',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL005.xsd','./msxsdtest/wildCards',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL006.xsd','./msxsdtest/wildCards',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL007.xsd','./msxsdtest/wildCards',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL008.xsd','./msxsdtest/wildCards',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL009.xsd','./msxsdtest/wildCards',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL009.xsd','./msxsdtest/wildCards',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildM001.xsd','./msxsdtest/wildCards',valid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildM001.xsd','./msxsdtest/wildCards',valid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildM002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildM002.xsd','./msxsdtest/wildCards',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN001.xsd','./msxsdtest/wildCards',invalid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN001.xsd','./msxsdtest/wildCards',invalid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN002.xsd','./msxsdtest/wildCards',valid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN002.xsd','./msxsdtest/wildCards',valid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN003.xsd','./msxsdtest/wildCards',valid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN003.xsd','./msxsdtest/wildCards',valid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN004.xsd','./msxsdtest/wildCards',valid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN004.xsd','./msxsdtest/wildCards',valid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN005.xsd','./msxsdtest/wildCards',valid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN005.xsd','./msxsdtest/wildCards',valid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN006.xsd','./msxsdtest/wildCards',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN007.xsd','./msxsdtest/wildCards',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN008.xsd','./msxsdtest/wildCards',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN009.xsd','./msxsdtest/wildCards',invalid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN009.xsd','./msxsdtest/wildCards',invalid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN010.xsd','./msxsdtest/wildCards',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN010.xsd','./msxsdtest/wildCards',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN011.xsd','./msxsdtest/wildCards',valid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN011.xsd','./msxsdtest/wildCards',valid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN012.xsd','./msxsdtest/wildCards',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN012.xsd','./msxsdtest/wildCards',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN013.xsd','./msxsdtest/wildCards',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN013.xsd','./msxsdtest/wildCards',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN014.xsd','./msxsdtest/wildCards',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN014.xsd','./msxsdtest/wildCards',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN015.xsd','./msxsdtest/wildCards',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN015.xsd','./msxsdtest/wildCards',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN016.xsd','./msxsdtest/wildCards',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN016.xsd','./msxsdtest/wildCards',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN017.xsd','./msxsdtest/wildCards',valid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN017.xsd','./msxsdtest/wildCards',valid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN018.xsd','./msxsdtest/wildCards',invalid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN018.xsd','./msxsdtest/wildCards',invalid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN019.xsd','./msxsdtest/wildCards',valid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN019.xsd','./msxsdtest/wildCards',valid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN020.xsd','./msxsdtest/wildCards',valid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN020.xsd','./msxsdtest/wildCards',valid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ001.xsd','./msxsdtest/wildCards',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ001.xsd','./msxsdtest/wildCards',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ002.xsd','./msxsdtest/wildCards',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ003.xsd','./msxsdtest/wildCards',invalid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ003.xsd','./msxsdtest/wildCards',invalid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ004.xsd','./msxsdtest/wildCards',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ004.xsd','./msxsdtest/wildCards',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO001.xsd','./msxsdtest/wildCards',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO001.xsd','./msxsdtest/wildCards',valid),
STResList85 = [STRes84|STResList84],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO001.xml','./msxsdtest/wildCards',valid,S84),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO001.xml','./msxsdtest/wildCards',valid,S84),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO002.xsd','./msxsdtest/wildCards',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO002.xsd','./msxsdtest/wildCards',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO002.xml','./msxsdtest/wildCards',valid,S85),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO002.xml','./msxsdtest/wildCards',valid,S85),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO003.xsd','./msxsdtest/wildCards',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO003.xsd','./msxsdtest/wildCards',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO003.xml','./msxsdtest/wildCards',invalid,S86),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO003.xml','./msxsdtest/wildCards',invalid,S86),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO004.xsd','./msxsdtest/wildCards',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO004.xsd','./msxsdtest/wildCards',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO004.xml','./msxsdtest/wildCards',valid,S87),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO004.xml','./msxsdtest/wildCards',valid,S87),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO005.xsd','./msxsdtest/wildCards',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO005.xsd','./msxsdtest/wildCards',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO005.xml','./msxsdtest/wildCards',valid,S88),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO005.xml','./msxsdtest/wildCards',valid,S88),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO006.xsd','./msxsdtest/wildCards',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO006.xsd','./msxsdtest/wildCards',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO006.xml','./msxsdtest/wildCards',invalid,S89),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO006.xml','./msxsdtest/wildCards',invalid,S89),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO007.xsd','./msxsdtest/wildCards',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO007.xsd','./msxsdtest/wildCards',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO007.xml','./msxsdtest/wildCards',valid,S90),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO007.xml','./msxsdtest/wildCards',valid,S90),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO008.xsd','./msxsdtest/wildCards',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO008.xsd','./msxsdtest/wildCards',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO008.xml','./msxsdtest/wildCards',invalid,S91),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO008.xml','./msxsdtest/wildCards',invalid,S91),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO009.xsd','./msxsdtest/wildCards',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO009.xsd','./msxsdtest/wildCards',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO009.xml','./msxsdtest/wildCards',invalid,S92),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO009.xml','./msxsdtest/wildCards',invalid,S92),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO010.xsd','./msxsdtest/wildCards',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO010.xsd','./msxsdtest/wildCards',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO010.xml','./msxsdtest/wildCards',valid,S93),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO010.xml','./msxsdtest/wildCards',valid,S93),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO011.xsd','./msxsdtest/wildCards',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO011.xsd','./msxsdtest/wildCards',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO011.xml','./msxsdtest/wildCards',invalid,S94),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO011.xml','./msxsdtest/wildCards',invalid,S94),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO012.xsd','./msxsdtest/wildCards',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO012.xsd','./msxsdtest/wildCards',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO012.xml','./msxsdtest/wildCards',valid,S95),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO012.xml','./msxsdtest/wildCards',valid,S95),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO013.xsd','./msxsdtest/wildCards',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO013.xsd','./msxsdtest/wildCards',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO013.xml','./msxsdtest/wildCards',valid,S96),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO013.xml','./msxsdtest/wildCards',valid,S96),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO014.xsd','./msxsdtest/wildCards',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO014.xsd','./msxsdtest/wildCards',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO014.xml','./msxsdtest/wildCards',invalid,S97),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO014.xml','./msxsdtest/wildCards',invalid,S97),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO015.xsd','./msxsdtest/wildCards',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO015.xsd','./msxsdtest/wildCards',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO015.xml','./msxsdtest/wildCards',valid,S98),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO015.xml','./msxsdtest/wildCards',valid,S98),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO016.xsd','./msxsdtest/wildCards',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO016.xsd','./msxsdtest/wildCards',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO016.xml','./msxsdtest/wildCards',valid,S99),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO016.xml','./msxsdtest/wildCards',valid,S99),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO017.xsd','./msxsdtest/wildCards',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO017.xsd','./msxsdtest/wildCards',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO017.xml','./msxsdtest/wildCards',invalid,S100),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO017.xml','./msxsdtest/wildCards',invalid,S100),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO018.xsd','./msxsdtest/wildCards',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO018.xsd','./msxsdtest/wildCards',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO018.xml','./msxsdtest/wildCards',valid,S101),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO018.xml','./msxsdtest/wildCards',valid,S101),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO019.xsd','./msxsdtest/wildCards',valid),
+ {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO019.xsd','./msxsdtest/wildCards',valid),
STResList103 = [STRes102|STResList102],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO019.xml','./msxsdtest/wildCards',valid,S102),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO019.xml','./msxsdtest/wildCards',valid,S102),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO020.xsd','./msxsdtest/wildCards',valid),
+ {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO020.xsd','./msxsdtest/wildCards',valid),
STResList104 = [STRes103|STResList103],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO020.xml','./msxsdtest/wildCards',invalid,S103),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO020.xml','./msxsdtest/wildCards',invalid,S103),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO021.xsd','./msxsdtest/wildCards',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO021.xsd','./msxsdtest/wildCards',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO021.xml','./msxsdtest/wildCards',valid,S104),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO021.xml','./msxsdtest/wildCards',valid,S104),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO022.xsd','./msxsdtest/wildCards',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO022.xsd','./msxsdtest/wildCards',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO022.xml','./msxsdtest/wildCards',invalid,S105),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO022.xml','./msxsdtest/wildCards',invalid,S105),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO023.xsd','./msxsdtest/wildCards',valid),
+ {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO023.xsd','./msxsdtest/wildCards',valid),
STResList107 = [STRes106|STResList106],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO023.xml','./msxsdtest/wildCards',valid,S106),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO023.xml','./msxsdtest/wildCards',valid,S106),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO024.xsd','./msxsdtest/wildCards',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO024.xsd','./msxsdtest/wildCards',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO024.xml','./msxsdtest/wildCards',invalid,S107),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO024.xml','./msxsdtest/wildCards',invalid,S107),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO025.xsd','./msxsdtest/wildCards',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO025.xsd','./msxsdtest/wildCards',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO025.xml','./msxsdtest/wildCards',invalid,S108),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO025.xml','./msxsdtest/wildCards',invalid,S108),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO026.xsd','./msxsdtest/wildCards',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO026.xsd','./msxsdtest/wildCards',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO026.xml','./msxsdtest/wildCards',valid,S109),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO026.xml','./msxsdtest/wildCards',valid,S109),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO027.xsd','./msxsdtest/wildCards',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO027.xsd','./msxsdtest/wildCards',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO027.xml','./msxsdtest/wildCards',valid,S110),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO027.xml','./msxsdtest/wildCards',valid,S110),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO028.xsd','./msxsdtest/wildCards',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO028.xsd','./msxsdtest/wildCards',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO028.xml','./msxsdtest/wildCards',invalid,S111),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO028.xml','./msxsdtest/wildCards',invalid,S111),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO029.xsd','./msxsdtest/wildCards',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO029.xsd','./msxsdtest/wildCards',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO029.xml','./msxsdtest/wildCards',valid,S112),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO029.xml','./msxsdtest/wildCards',valid,S112),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO030.xsd','./msxsdtest/wildCards',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO030.xsd','./msxsdtest/wildCards',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO030.xml','./msxsdtest/wildCards',invalid,S113),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO030.xml','./msxsdtest/wildCards',invalid,S113),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO031.xsd','./msxsdtest/wildCards',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO031.xsd','./msxsdtest/wildCards',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO031.xml','./msxsdtest/wildCards',valid,S114),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO031.xml','./msxsdtest/wildCards',valid,S114),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO032.xsd','./msxsdtest/wildCards',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO032.xsd','./msxsdtest/wildCards',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO032.xml','./msxsdtest/wildCards',invalid,S115),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO032.xml','./msxsdtest/wildCards',invalid,S115),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO033.xsd','./msxsdtest/wildCards',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO033.xsd','./msxsdtest/wildCards',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO033.xml','./msxsdtest/wildCards',valid,S116),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO033.xml','./msxsdtest/wildCards',valid,S116),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO034.xsd','./msxsdtest/wildCards',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO034.xsd','./msxsdtest/wildCards',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO034.xml','./msxsdtest/wildCards',invalid,S117),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO034.xml','./msxsdtest/wildCards',invalid,S117),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO035.xsd','./msxsdtest/wildCards',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO035.xsd','./msxsdtest/wildCards',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO035.xml','./msxsdtest/wildCards',invalid,S118),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO035.xml','./msxsdtest/wildCards',invalid,S118),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO037.xsd','./msxsdtest/wildCards',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO037.xsd','./msxsdtest/wildCards',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO037.xml','./msxsdtest/wildCards',valid,S119),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO037.xml','./msxsdtest/wildCards',valid,S119),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO038.xsd','./msxsdtest/wildCards',valid),
+ {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO038.xsd','./msxsdtest/wildCards',valid),
STResList121 = [STRes120|STResList120],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO038.xml','./msxsdtest/wildCards',valid,S120),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO038.xml','./msxsdtest/wildCards',valid,S120),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO039.xsd','./msxsdtest/wildCards',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO039.xsd','./msxsdtest/wildCards',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO039.xml','./msxsdtest/wildCards',invalid,S121),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO039.xml','./msxsdtest/wildCards',invalid,S121),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO040.xsd','./msxsdtest/wildCards',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO040.xsd','./msxsdtest/wildCards',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO040.xml','./msxsdtest/wildCards',valid,S122),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO040.xml','./msxsdtest/wildCards',valid,S122),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP001.xsd','./msxsdtest/wildCards',valid),
+ {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP001.xsd','./msxsdtest/wildCards',valid),
STResList124 = [STRes123|STResList123],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP001.xml','./msxsdtest/wildCards',valid,S123),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP001.xml','./msxsdtest/wildCards',valid,S123),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP002.xsd','./msxsdtest/wildCards',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP002.xsd','./msxsdtest/wildCards',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP002.xml','./msxsdtest/wildCards',invalid,S124),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP002.xml','./msxsdtest/wildCards',invalid,S124),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP003.xsd','./msxsdtest/wildCards',valid),
+ {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP003.xsd','./msxsdtest/wildCards',valid),
STResList126 = [STRes125|STResList125],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP003.xml','./msxsdtest/wildCards',valid,S125),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP003.xml','./msxsdtest/wildCards',valid,S125),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP004.xsd','./msxsdtest/wildCards',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP004.xsd','./msxsdtest/wildCards',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP004.xml','./msxsdtest/wildCards',valid,S126),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP004.xml','./msxsdtest/wildCards',valid,S126),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP005.xsd','./msxsdtest/wildCards',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP005.xsd','./msxsdtest/wildCards',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP005.xml','./msxsdtest/wildCards',valid,S127),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP005.xml','./msxsdtest/wildCards',valid,S127),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP006.xsd','./msxsdtest/wildCards',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP006.xsd','./msxsdtest/wildCards',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP006.xml','./msxsdtest/wildCards',valid,S128),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP006.xml','./msxsdtest/wildCards',valid,S128),
ITResList45 = [ITRes44|ITResList44],
@@ -24120,12 +24108,10 @@ wildJKLMNQOP(Config) when is_list(Config) ->
wildZ(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildZ001.xsd','./msxsdtest/wildCards',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildZ001.xsd','./msxsdtest/wildCards',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildZ001.xml','./msxsdtest/wildCards',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildZ001.xml','./msxsdtest/wildCards',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
-
xmerl_xsd_lib:compare_test_results(Config,STResList1,ITResList1).
-
diff --git a/lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl b/lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl
index 634e47ba7b..d9df8687d9 100644
--- a/lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl
+++ b/lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("xmerl/include/xmerl.hrl").
-include_lib("xmerl/include/xmerl_xsd.hrl").
@@ -54,406 +54,394 @@ all() ->
'NISTSchema-unsignedByte', 'NISTSchema-unsignedInt',
'NISTSchema-unsignedLong', 'NISTSchema-unsignedShort'].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
+suite() ->
+ [{timetrap,{minutes,3}}].
%% initialization before the test suite
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- xmerl_xsd_lib:unpack(Config,nist),
- {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,nist),
- test_server:timetrap_cancel(Dog),
- [{suite,nist},{xmerl_error_log,LogFile}|Config].
+ ct:timetrap({minutes,10}),
+ xmerl_xsd_lib:unpack(Config,nist),
+ {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,nist),
+ [{suite,nist},{xmerl_error_log,LogFile}|Config].
end_per_suite(Config) ->
- xmerl_xsd_lib:rmdir(Config,nist),
- xmerl_xsd_lib:close_error_log_file(Config),
- ok.
+ xmerl_xsd_lib:rmdir(Config,nist),
+ xmerl_xsd_lib:close_error_log_file(Config),
+ ok.
%% initialization before each testcase
init_per_testcase(TestCase,Config) ->
- Dog=test_server:timetrap({minutes,3}),
- [{testcase,TestCase},{watchdog, Dog}|Config].
+ [{testcase,TestCase}|Config].
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+end_per_testcase(_Func,_Config) ->
+ ok.
%% Data type derived by restriction of anyURI by facets
'NISTSchema-anyURI'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./NISTTestsAll/NISTSchema-anyURI-maxLength-1.xsd','./NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./NISTTestsAll/NISTSchema-anyURI-maxLength-1.xsd','./NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
@@ -464,368 +452,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-base64Binary'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -836,42 +824,42 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-boolean'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList9 = [ITRes8|ITResList8],
@@ -882,462 +870,462 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-byte'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
@@ -1348,406 +1336,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-date-'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -1758,406 +1746,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-dateTime'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -2168,546 +2156,546 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-decimal'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList170 = [ITRes169|ITResList169],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList171 = [ITRes170|ITResList170],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList172 = [ITRes171|ITResList171],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList173 = [ITRes172|ITResList172],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList175 = [ITRes174|ITResList174],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList176 = [ITRes175|ITResList175],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList177 = [ITRes176|ITResList176],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList178 = [ITRes177|ITResList177],
- ?line ITRes178 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes178 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList179 = [ITRes178|ITResList178],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes179 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes179 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList180 = [ITRes179|ITResList179],
- ?line ITRes180 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes180 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList181 = [ITRes180|ITResList180],
- ?line ITRes181 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes181 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList182 = [ITRes181|ITResList181],
- ?line ITRes182 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes182 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList183 = [ITRes182|ITResList182],
- ?line ITRes183 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes183 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList184 = [ITRes183|ITResList183],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes184 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes184 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList185 = [ITRes184|ITResList184],
- ?line ITRes185 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes185 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList186 = [ITRes185|ITResList185],
- ?line ITRes186 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes186 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList187 = [ITRes186|ITResList186],
- ?line ITRes187 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes187 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList188 = [ITRes187|ITResList187],
- ?line ITRes188 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes188 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList189 = [ITRes188|ITResList188],
@@ -2718,406 +2706,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-double'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -3128,406 +3116,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-duration'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -3538,406 +3526,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-float'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -3948,398 +3936,398 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gDay'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList134 = [ITRes133|ITResList133],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
@@ -4350,406 +4338,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gMonth-'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -4760,406 +4748,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gMonthDay'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -5170,398 +5158,398 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gYear-'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList134 = [ITRes133|ITResList133],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
@@ -5572,406 +5560,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gYearMonth'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -5982,368 +5970,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-hexBinary'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -6354,368 +6342,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-ID'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -6726,490 +6714,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-int-'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -7220,490 +7208,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-integer'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -7714,360 +7702,360 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-language'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
@@ -8078,490 +8066,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-long'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -8572,368 +8560,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-Name'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -8944,368 +8932,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-NCName'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -9316,490 +9304,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-negativeInteger'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -9810,364 +9798,364 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-NMTOKEN'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
@@ -10178,490 +10166,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-nonNegativeInteger'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -10672,490 +10660,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-nonPositiveInteger'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -11166,366 +11154,366 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-normalizedString'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-whiteSpace-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-whiteSpace-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList127 = [ITRes126|ITResList126],
@@ -11536,490 +11524,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-positiveInteger'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -12030,368 +12018,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-QName'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -12402,490 +12390,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-short'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -12896,380 +12884,380 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-string'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList132 = [ITRes131|ITResList131],
@@ -13280,406 +13268,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-time'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -13690,352 +13678,352 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-token'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList122 = [ITRes121|ITResList121],
@@ -14046,434 +14034,434 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-unsignedByte'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
@@ -14484,490 +14472,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-unsignedInt'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -14978,490 +14966,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-unsignedLong'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -15472,492 +15460,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-unsignedShort'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
-
xmerl_xsd_lib:compare_test_results(Config,STResList37,ITResList169).
-
diff --git a/lib/xmerl/test/xmerl_xsd_SUITE.erl b/lib/xmerl/test/xmerl_xsd_SUITE.erl
index 92c8287782..3060f27e6c 100644
--- a/lib/xmerl/test/xmerl_xsd_SUITE.erl
+++ b/lib/xmerl/test/xmerl_xsd_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@
-compile(export_all).
%%-export([Function/Arity, ...]).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%%-include("xmerl.hrl").
-include_lib("xmerl/include/xmerl.hrl").
@@ -74,229 +74,204 @@ groups() ->
{misc_block_tests, [],
[compare_dateTime, compare_duration]}].
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+suite() ->
+ [{timetrap,{minutes,10}}].
init_per_testcase(_TestCase,Config) ->
- {ok, _} =
- file:read_file_info(filename:join([?config(priv_dir,Config)])),
- code:add_patha(?config(priv_dir,Config)),
- Dog=test_server:timetrap({minutes,10}),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ {ok,_} = file:read_file_info(filename:join([privdir(Config)])),
+ code:add_patha(privdir(Config)),
+ Config.
+
+end_per_testcase(_Func,_Config) ->
ok.
-string(suite) -> [];
string(_Config) ->
%% #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
- Str = [16#9,16#A,16#D,16#20,16#D7FF,16#E000,16#FFFD,16#10000,
- 16#10FFFF],
- ?line {ok,_} = check_simpleType(string,Str,dummy).
+ Str = [16#9,16#A,16#D,16#20,16#D7FF,16#E000,16#FFFD,16#10000, 16#10FFFF],
+ {ok,_} = check_simpleType(string,Str,dummy).
-boolean(suite) -> [];
boolean(_Config) ->
- ?line {ok,_} = check_simpleType(boolean,"1",dummy),
- ?line {ok,_} = check_simpleType(boolean,"0",dummy),
- ?line {ok,_} = check_simpleType(boolean,"true",dummy),
- ?line {ok,_} = check_simpleType(boolean,"false",dummy),
- ?line {error,_Reason} = check_simpleType(boolean,"gurka",dummy).
+ {ok,_} = check_simpleType(boolean,"1",dummy),
+ {ok,_} = check_simpleType(boolean,"0",dummy),
+ {ok,_} = check_simpleType(boolean,"true",dummy),
+ {ok,_} = check_simpleType(boolean,"false",dummy),
+ {error,_Reason} = check_simpleType(boolean,"gurka",dummy).
-decimal(suite) -> [];
decimal(_Config) ->
- ?line {ok,_} = check_simpleType(decimal,"-1.23",dummy),
- ?line {ok,_} = check_simpleType(decimal,"12678967.543233",dummy),
- ?line {ok,_} = check_simpleType(decimal,"+100000.00",dummy),
- ?line {ok,_} = check_simpleType(decimal,"210",dummy).
+ {ok,_} = check_simpleType(decimal,"-1.23",dummy),
+ {ok,_} = check_simpleType(decimal,"12678967.543233",dummy),
+ {ok,_} = check_simpleType(decimal,"+100000.00",dummy),
+ {ok,_} = check_simpleType(decimal,"210",dummy).
-float(suite) -> [];
float(_Config) ->
%% -1E4, 1267.43233E12, 12.78e-2, 12 , -0, 0 , INF, -INF, NaN
- ?line {ok,_} = check_simpleType(float,"-1E4",dummy),
- ?line {ok,_} = check_simpleType(float,"1267.43233E12",dummy),
- ?line {ok,_} = check_simpleType(float,"12.78e-2",dummy),
- ?line {ok,_} = check_simpleType(float,"12",dummy),
- ?line {ok,_} = check_simpleType(float,"-0",dummy),
- ?line {ok,_} = check_simpleType(float,"0",dummy),
- ?line {ok,_} = check_simpleType(float,"INF",dummy),
- ?line {ok,_} = check_simpleType(float,"-INF",dummy),
- ?line {ok,_} = check_simpleType(float,"NaN",dummy).
-
-
-double(suite) -> [];
+ {ok,_} = check_simpleType(float,"-1E4",dummy),
+ {ok,_} = check_simpleType(float,"1267.43233E12",dummy),
+ {ok,_} = check_simpleType(float,"12.78e-2",dummy),
+ {ok,_} = check_simpleType(float,"12",dummy),
+ {ok,_} = check_simpleType(float,"-0",dummy),
+ {ok,_} = check_simpleType(float,"0",dummy),
+ {ok,_} = check_simpleType(float,"INF",dummy),
+ {ok,_} = check_simpleType(float,"-INF",dummy),
+ {ok,_} = check_simpleType(float,"NaN",dummy).
+
+
double(_Config) ->
%% -1E4, 1267.43233E12, 12.78e-2, 12 , -0, 0 , INF, -INF, NaN
- ?line {ok,_} = check_simpleType(double,"-1E4",dummy),
- ?line {ok,_} = check_simpleType(double,"1267.43233E12",dummy),
- ?line {ok,_} = check_simpleType(double,"12.78e-2",dummy),
- ?line {ok,_} = check_simpleType(double,"12",dummy),
- ?line {ok,_} = check_simpleType(double,"-0",dummy),
- ?line {ok,_} = check_simpleType(double,"0",dummy),
- ?line {ok,_} = check_simpleType(double,"INF",dummy),
- ?line {ok,_} = check_simpleType(double,"-INF",dummy),
- ?line {ok,_} = check_simpleType(double,"NaN",dummy).
-
-
-duration(suite) -> [];
+ {ok,_} = check_simpleType(double,"-1E4",dummy),
+ {ok,_} = check_simpleType(double,"1267.43233E12",dummy),
+ {ok,_} = check_simpleType(double,"12.78e-2",dummy),
+ {ok,_} = check_simpleType(double,"12",dummy),
+ {ok,_} = check_simpleType(double,"-0",dummy),
+ {ok,_} = check_simpleType(double,"0",dummy),
+ {ok,_} = check_simpleType(double,"INF",dummy),
+ {ok,_} = check_simpleType(double,"-INF",dummy),
+ {ok,_} = check_simpleType(double,"NaN",dummy).
+
+
duration(_Config) ->
%% allowed: P1Y2M3DT10H30M -P120D P1347Y P1347M P1Y2MT2H
%% P0Y1347M P0Y1347M0D -P1347M
%% not allowed: P-1347M P1Y2MT
- ?line {ok,_} = check_simpleType(duration,"P1Y2M3DT10H30M",dummy),
- ?line {ok,_} = check_simpleType(duration,"-P120D",dummy),
- ?line {ok,_} = check_simpleType(duration,"P1347Y",dummy),
- ?line {ok,_} = check_simpleType(duration,"P1347M",dummy),
- ?line {ok,_} = check_simpleType(duration,"P1Y2MT2H",dummy),
- ?line {ok,_} = check_simpleType(duration,"P0Y1347M",dummy),
- ?line {ok,_} = check_simpleType(duration,"P0Y1347M0D",dummy),
- ?line {ok,_} = check_simpleType(duration,"-P1347M",dummy),
-
- ?line {error,_} = check_simpleType(duration,"P-1347M",dummy),
- ?line {error,_} = check_simpleType(duration,"P1Y2MT",dummy).
+ {ok,_} = check_simpleType(duration,"P1Y2M3DT10H30M",dummy),
+ {ok,_} = check_simpleType(duration,"-P120D",dummy),
+ {ok,_} = check_simpleType(duration,"P1347Y",dummy),
+ {ok,_} = check_simpleType(duration,"P1347M",dummy),
+ {ok,_} = check_simpleType(duration,"P1Y2MT2H",dummy),
+ {ok,_} = check_simpleType(duration,"P0Y1347M",dummy),
+ {ok,_} = check_simpleType(duration,"P0Y1347M0D",dummy),
+ {ok,_} = check_simpleType(duration,"-P1347M",dummy),
+
+ {error,_} = check_simpleType(duration,"P-1347M",dummy),
+ {error,_} = check_simpleType(duration,"P1Y2MT",dummy).
%% '-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
-dateTime(suite) -> [];
dateTime(_Config) ->
%% 2002-10-10T12:00:00-05:00
DT1 = "2002-10-10T12:00:00-05:00",
- ?line {ok,_} = check_simpleType(dateTime,DT1,dummy),
+ {ok,_} = check_simpleType(dateTime,DT1,dummy),
DT2 = "2002-10-10T17:00:00Z",
- ?line {ok,_} = check_simpleType(dateTime,DT2,dummy),
+ {ok,_} = check_simpleType(dateTime,DT2,dummy),
%% plus sign prohibited
DT3 = "+2002-10-10T17:00:00Z",
- ?line {error,_Reason3} = check_simpleType(dateTime,DT3,dummy),
+ {error,_Reason3} = check_simpleType(dateTime,DT3,dummy),
%% leading zeros when year are more than four digits prohibited
DT4 = "002002-10-10T17:00:00Z",
- ?line {error,_Reason4} = check_simpleType(dateTime,DT4,dummy),
+ {error,_Reason4} = check_simpleType(dateTime,DT4,dummy),
DT5 = "1953-12-31T12:10:10.10+12:00",
- ?line {ok,_} = check_simpleType(dateTime,DT5,dummy).
+ {ok,_} = check_simpleType(dateTime,DT5,dummy).
-time(suite) -> [];
time(_Config) ->
%% hh:mm:ss.sss with optional following time zone indicator.
T1 = "13:20:00-05:00",
- ?line {ok,_} = check_simpleType(time,T1,dummy),
+ {ok,_} = check_simpleType(time,T1,dummy),
%% canonical repr. of midnight
T2 = "00:00:00",
- ?line {ok,_} = check_simpleType(time,T2,dummy),
+ {ok,_} = check_simpleType(time,T2,dummy),
T3 = "12:34:56",
- ?line {ok,_} = check_simpleType(time,T3,dummy),
+ {ok,_} = check_simpleType(time,T3,dummy),
T4 = "12:34:56.552",
- ?line {ok,_} = check_simpleType(time,T4,dummy),
+ {ok,_} = check_simpleType(time,T4,dummy),
T5 = "12:34:56.552Z",
- ?line {ok,_} = check_simpleType(time,T5,dummy).
+ {ok,_} = check_simpleType(time,T5,dummy).
-date(suite) -> [];
date(_Config) ->
%% '-'? yyyy '-' mm '-' dd zzzzzz?
%% is
D1 = "2002-10-10+13:00",
- ?line {ok,_} = check_simpleType(date,D1,dummy),
+ {ok,_} = check_simpleType(date,D1,dummy),
D2 = "2002-10-09-11:00",
- ?line {ok,_} = check_simpleType(date,D2,dummy),
+ {ok,_} = check_simpleType(date,D2,dummy),
D12 = "+2002-13-09-11:00",
- ?line {error,_Reason12} = check_simpleType(date,D12,dummy),
+ {error,_Reason12} = check_simpleType(date,D12,dummy),
D13 = "2002-13-09-11:00",
- ?line {error,_Reason13} = check_simpleType(date,D13,dummy),
+ {error,_Reason13} = check_simpleType(date,D13,dummy),
D14 = "2002-12-39-11:00",
- ?line {error,_Reason14} = check_simpleType(date,D14,dummy).
+ {error,_Reason14} = check_simpleType(date,D14,dummy).
-gYearMonth(suite) -> [];
gYearMonth(_Config) ->
%% '-'? yyyy '-' mm zzzzzz?
GYM1 = "1955-10",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM1,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM1,dummy),
GYM2 = "-1955-10",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM2,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM2,dummy),
GYM3 = "1955-10Z",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM3,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM3,dummy),
GYM4 = "0055-10+10:00",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM4,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM4,dummy),
GYM5 = "0955-10Z",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM5,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM5,dummy),
GYM6 = "-11955-01",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM6,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM6,dummy),
- ?line {error,_} = check_simpleType(gYearMonth,"+2000-10",dummy),
- ?line {error,_} = check_simpleType(gYearMonth,"2000-00",dummy),
- ?line {error,_} = check_simpleType(gYearMonth,"2000-10+10:70",dummy).
+ {error,_} = check_simpleType(gYearMonth,"+2000-10",dummy),
+ {error,_} = check_simpleType(gYearMonth,"2000-00",dummy),
+ {error,_} = check_simpleType(gYearMonth,"2000-10+10:70",dummy).
-gYear(suite) -> [];
gYear(_Config) ->
%% '-'? yyyy zzzzzz?
- ?line {ok,_} = check_simpleType(gYear,"2000",dummy),
- ?line {ok,_} = check_simpleType(gYear,"2000-11:30",dummy),
- ?line {ok,_} = check_simpleType(gYear,"-2000",dummy),
- ?line {error,_} = check_simpleType(gYear,"0000",dummy).
+ {ok,_} = check_simpleType(gYear,"2000",dummy),
+ {ok,_} = check_simpleType(gYear,"2000-11:30",dummy),
+ {ok,_} = check_simpleType(gYear,"-2000",dummy),
+ {error,_} = check_simpleType(gYear,"0000",dummy).
-gMonthDay(suite) -> [];
gMonthDay(_Config) ->
%% mm '-' dd zzzzzz?
- ?line {ok,_} = check_simpleType(gMonthDay,"--05-03",dummy),
- ?line {ok,_} = check_simpleType(gMonthDay,"--05-03Z",dummy),
- ?line {error,_} = check_simpleType(gMonthDay,"05-00",dummy),
- ?line {error,_} = check_simpleType(gMonthDay,"00-03",dummy),
- ?line {error,_} = check_simpleType(gMonthDay,"-05-03",dummy).
+ {ok,_} = check_simpleType(gMonthDay,"--05-03",dummy),
+ {ok,_} = check_simpleType(gMonthDay,"--05-03Z",dummy),
+ {error,_} = check_simpleType(gMonthDay,"05-00",dummy),
+ {error,_} = check_simpleType(gMonthDay,"00-03",dummy),
+ {error,_} = check_simpleType(gMonthDay,"-05-03",dummy).
-gDay(suite) -> [];
gDay(_Config) ->
%% dd zzzzzz?
- ?line {ok,_} = check_simpleType(gDay,"---05",dummy),
- ?line {ok,_} = check_simpleType(gDay,"---30+03:00",dummy),
- ?line {error,_} = check_simpleType(gDay,"-30+03:00",dummy),
- ?line {error,_} = check_simpleType(gDay,"---00+03:00",dummy),
- ?line {error,_} = check_simpleType(gDay,"---40+03:00",dummy),
- ?line {error,_} = check_simpleType(gDay,"05",dummy).
-
-gMonth(suite) -> [];
+ {ok,_} = check_simpleType(gDay,"---05",dummy),
+ {ok,_} = check_simpleType(gDay,"---30+03:00",dummy),
+ {error,_} = check_simpleType(gDay,"-30+03:00",dummy),
+ {error,_} = check_simpleType(gDay,"---00+03:00",dummy),
+ {error,_} = check_simpleType(gDay,"---40+03:00",dummy),
+ {error,_} = check_simpleType(gDay,"05",dummy).
+
gMonth(_Config) ->
%% mm zzzzzz?
- ?line {ok,_} = check_simpleType(gMonth,"--05",dummy),
- ?line {ok,_} = check_simpleType(gMonth,"--10+03:00",dummy),
- ?line {error,_} = check_simpleType(gMonth,"-10+03:00",dummy),
- ?line {error,_} = check_simpleType(gMonth,"00+03:00",dummy),
- ?line {error,_} = check_simpleType(gMonth,"14",dummy),
- ?line {error,_} = check_simpleType(gMonth,"05",dummy).
+ {ok,_} = check_simpleType(gMonth,"--05",dummy),
+ {ok,_} = check_simpleType(gMonth,"--10+03:00",dummy),
+ {error,_} = check_simpleType(gMonth,"-10+03:00",dummy),
+ {error,_} = check_simpleType(gMonth,"00+03:00",dummy),
+ {error,_} = check_simpleType(gMonth,"14",dummy),
+ {error,_} = check_simpleType(gMonth,"05",dummy).
-hexBinary(suite) -> [];
hexBinary(_Config) ->
%% an even number of hexadecimal digits ([0-9a-fA-F]).
- ?line {ok,_} = check_simpleType(hexBinary,"05",dummy),
- ?line {ok,_} = check_simpleType(hexBinary,"aF",dummy),
- ?line {ok,_} = check_simpleType(hexBinary,
+ {ok,_} = check_simpleType(hexBinary,"05",dummy),
+ {ok,_} = check_simpleType(hexBinary,"aF",dummy),
+ {ok,_} = check_simpleType(hexBinary,
"0123456789abcdefABCDEF",dummy),
- ?line {error,_} = check_simpleType(hexBinary,
+ {error,_} = check_simpleType(hexBinary,
"0123456789absdefABCDEF",dummy),
- ?line {error,_} = check_simpleType(hexBinary,"aF5",dummy),
- ?line {error,_} = check_simpleType(hexBinary,"aFG",dummy).
+ {error,_} = check_simpleType(hexBinary,"aF5",dummy),
+ {error,_} = check_simpleType(hexBinary,"aFG",dummy).
-base64Binary(suite) -> [];
base64Binary(_Config) ->
%% a-z, A-Z, 0-9, the plus sign (+), the forward slash (/) and the
%% equal sign (=), together with the characters defined in [XML
%% 1.0 (Second Edition)] as white space.(16#9, 16#A, 16#D, 16#20)
- ?line {ok,_} = check_simpleType(base64Binary,"05+/AA==",dummy),
- ?line {ok,_} = check_simpleType(base64Binary,"05+/AA= =",dummy),
- ?line {ok,_} = check_simpleType(base64Binary,"05+/A A= =",dummy),
- ?line {ok,_} = check_simpleType(base64Binary,"05+/ AA= =",dummy),
- ?line {error,_} = check_simpleType(base64Binary,"05+/AA== ",dummy),
+ {ok,_} = check_simpleType(base64Binary,"05+/AA==",dummy),
+ {ok,_} = check_simpleType(base64Binary,"05+/AA= =",dummy),
+ {ok,_} = check_simpleType(base64Binary,"05+/A A= =",dummy),
+ {ok,_} = check_simpleType(base64Binary,"05+/ AA= =",dummy),
+ {error,_} = check_simpleType(base64Binary,"05+/AA== ",dummy),
B64B1 = "AbCd GhZz 09w=",
- ?line {ok,_} = check_simpleType(base64Binary,B64B1,dummy),
+ {ok,_} = check_simpleType(base64Binary,B64B1,dummy),
B64B2 = "AbCd GhZ9 0z8 =",
- ?line {ok,_} = check_simpleType(base64Binary,B64B2,dummy),
- ?line {ok,_} = check_simpleType(base64Binary,"0z8 =",dummy),
+ {ok,_} = check_simpleType(base64Binary,B64B2,dummy),
+ {ok,_} = check_simpleType(base64Binary,"0z8 =",dummy),
ErrB641 = "AbCd GZ9 0z8 =",
- ?line {error,_} = check_simpleType(base64Binary,ErrB641,dummy).
+ {error,_} = check_simpleType(base64Binary,ErrB641,dummy).
-anyURI(suite) -> [];
anyURI(_Config) ->
URI1 = "ftp://ftp.is.co.za/rfc/rfc1808.txt",
URI2 = "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles",
@@ -304,25 +279,22 @@ anyURI(_Config) ->
URI4 = "mailto:[email protected]",
URI5 = "news:comp.infosystems.www.servers.unix",
URI6 = "telnet://melvyl.ucop.edu/",
- ?line ok=ok_loop(anyURI,[URI1,URI2,URI3,URI4,URI5,URI6]).
+ ok=ok_loop(anyURI,[URI1,URI2,URI3,URI4,URI5,URI6]).
-'QName'(suite) -> [];
'QName'(_Config) ->
%% QName ::= (Prefix ':')? LocalPart
%% Prefix ::= NCName
%% LocalPart ::= NCName
- ?line {ok,_} = check_simpleType('QName',"abc:def",dummy),
- ?line {ok,_} = check_simpleType('QName',"abc",dummy),
- ?line {ok,_} = check_simpleType('QName',"abc:def:ijk",dummy).
+ {ok,_} = check_simpleType('QName',"abc:def",dummy),
+ {ok,_} = check_simpleType('QName',"abc",dummy),
+ {ok,_} = check_simpleType('QName',"abc:def:ijk",dummy).
-'NOTATION'(suite) -> [];
'NOTATION'(_Config) ->
- ?line {ok,_} = check_simpleType('NOTATION',"abc:def",dummy),
- ?line {ok,_} = check_simpleType('NOTATION',"abc",dummy),
- ?line {ok,_} = check_simpleType('NOTATION',"abc:def:ijk",dummy).
+ {ok,_} = check_simpleType('NOTATION',"abc:def",dummy),
+ {ok,_} = check_simpleType('NOTATION',"abc",dummy),
+ {ok,_} = check_simpleType('NOTATION',"abc:def:ijk",dummy).
-normalizedString(suite) -> [];
normalizedString(_Config) ->
%% not contain the carriage return (#xD), line feed (#xA) nor tab
%% (#x9) characters.
@@ -330,10 +302,9 @@ normalizedString(_Config) ->
NotNStr1 = "this string is not normalized \t",
NotNStr2 = "neither is this \n string",
NotNStr3 = "or this \r string",
- ?line {ok,_} = check_simpleType(normalizedString,NStr1,dummy),
- ?line ok=error_loop(normalizedString,[NotNStr1,NotNStr2,NotNStr3]).
+ {ok,_} = check_simpleType(normalizedString,NStr1,dummy),
+ ok=error_loop(normalizedString,[NotNStr1,NotNStr2,NotNStr3]).
-token(suite) -> [];
token(_Config) ->
%% not contain the carriage return (#xD), line feed (#xA) nor tab
%% (#x9) characters, that have no leading or trailing spaces
@@ -346,10 +317,9 @@ token(_Config) ->
NotT4 = "tabs not \t allowed",
NotT5 = "newlines not allowed\n",
NotT6 = "or \r (carriage return)",
- ?line {ok,_} = check_simpleType(token,T1,dummy),
- ?line ok=error_loop(token,[NotT1,NotT2,NotT3,NotT4,NotT5,NotT6]).
+ {ok,_} = check_simpleType(token,T1,dummy),
+ ok=error_loop(token,[NotT1,NotT2,NotT3,NotT4,NotT5,NotT6]).
-language(suite) -> [];
language(_Config) ->
%% strings that conform to the pattern
%% [a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*
@@ -358,154 +328,130 @@ language(_Config) ->
NotL2 = "Abra-",
NotL3 = "Abracadabra",
NotL4 = "Abra-cadabrrra",
- ?line {ok,_} = check_simpleType(language,L,dummy),
- ?line ok=error_loop(language,[NotL1,NotL2,NotL3,NotL4]).
+ {ok,_} = check_simpleType(language,L,dummy),
+ ok=error_loop(language,[NotL1,NotL2,NotL3,NotL4]).
-'NMTOKEN'(suite) -> [];
'NMTOKEN'(_Config) ->
N = "name:withoutspace",
NotN1 = "name with space",
NotN2 = "namewith#strang/chars)",
- ?line {ok,_} = check_simpleType('NMTOKEN',N,dummy),
- ?line {error,_} = check_simpleType('NMTOKEN',NotN1,dummy),
- ?line {error,_} = check_simpleType('NMTOKEN',NotN2,dummy).
+ {ok,_} = check_simpleType('NMTOKEN',N,dummy),
+ {error,_} = check_simpleType('NMTOKEN',NotN1,dummy),
+ {error,_} = check_simpleType('NMTOKEN',NotN2,dummy).
-'NMTOKENS'(suite) -> [];
'NMTOKENS'(_Config) ->
N1 = "name1 name:2 name:three",
NotN1 = "name na%me",
- ?line {ok,_} = check_simpleType('NMTOKENS',N1,dummy),
- ?line {error,_} = check_simpleType('NMTOKENS',NotN1,dummy).
+ {ok,_} = check_simpleType('NMTOKENS',N1,dummy),
+ {error,_} = check_simpleType('NMTOKENS',NotN1,dummy).
-'Name'(suite) -> [];
'Name'(_Config) ->
- ?line {ok,_} = check_simpleType('Name',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('Name',"_valid_Name",dummy).
-'NCName'(suite) -> [];
'NCName'(_Config) ->
- ?line {ok,_} = check_simpleType('NCName',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('NCName',"_valid_Name",dummy).
-'ID'(suite) -> [];
'ID'(_Config) ->
- ?line {ok,_} = check_simpleType('ID',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('ID',"_valid_Name",dummy).
-'IDREF'(suite) -> [];
'IDREF'(_Config) ->
- ?line {ok,_} = check_simpleType('IDREF',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('IDREF',"_valid_Name",dummy).
-'IDREFS'(suite) -> [];
'IDREFS'(_Config) ->
- ?line {ok,_} = check_simpleType('IDREFS',"_valid_Name Name2",dummy).
+ {ok,_} = check_simpleType('IDREFS',"_valid_Name Name2",dummy).
-'ENTITY'(suite) -> [];
'ENTITY'(_Config) ->
- ?line {ok,_} = check_simpleType('ENTITY',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('ENTITY',"_valid_Name",dummy).
-'ENTITIES'(suite) -> [];
'ENTITIES'(_Config) ->
- ?line {ok,_} = check_simpleType('ENTITIES',"name name3",dummy).
+ {ok,_} = check_simpleType('ENTITIES',"name name3",dummy).
-integer(suite) -> [];
integer(_Config) ->
IntList = ["-1", "0", "12678967543233", "+100000"],
- ?line ok = ok_loop(integer,IntList),
- ?line {error,_} = check_simpleType(integer,"1.3",dummy).
+ ok = ok_loop(integer,IntList),
+ {error,_} = check_simpleType(integer,"1.3",dummy).
-nonPositiveInteger(suite) -> [];
nonPositiveInteger(_Config) ->
NPIList = ["0", "-12678967543233", "-100000"],
- ?line ok = ok_loop(nonPositiveInteger,NPIList),
- ?line {error,_} = check_simpleType(nonPositiveInteger,"1",dummy).
+ ok = ok_loop(nonPositiveInteger,NPIList),
+ {error,_} = check_simpleType(nonPositiveInteger,"1",dummy).
-negativeInteger(suite) -> [];
negativeInteger(_Config) ->
NIList = ["-1", "-12678967543233", "-100000"],
- ?line ok = ok_loop(negativeInteger,NIList),
- ?line {error,_} = check_simpleType(negativeInteger,"1",dummy),
- ?line {error,_} = check_simpleType(negativeInteger,"0",dummy).
+ ok = ok_loop(negativeInteger,NIList),
+ {error,_} = check_simpleType(negativeInteger,"1",dummy),
+ {error,_} = check_simpleType(negativeInteger,"0",dummy).
-long(suite) -> [];
long(_Config) ->
L = ["9223372036854775807","-9223372036854775808","-1", "0",
"12678967543233", "+100000"],
- ?line ok = ok_loop(long,L),
+ ok = ok_loop(long,L),
Err = ["9223372036854775808","-9223372036854775809"],
- ?line ok = error_loop(long,Err).
+ ok = error_loop(long,Err).
-int(suite) -> [];
int(_Config) ->
L = ["2147483647", "-2147483648", "-1", "0", "126789675", "+100000"],
- ?line ok = ok_loop(int,L),
+ ok = ok_loop(int,L),
Err = ["2147483648", "-2147483649"],
- ?line ok = error_loop(int,Err).
+ ok = error_loop(int,Err).
-short(suite) -> [];
short(_Config) ->
L = ["32767", "-32768", "-1", "0", "12678", "+10000"],
- ?line ok = ok_loop(short,L),
+ ok = ok_loop(short,L),
Err = ["32768", "-32769"],
- ?line ok = error_loop(short,Err).
+ ok = error_loop(short,Err).
-byte(suite) -> [];
byte(_Config) ->
L = ["-1", "0", "126", "+100", "127", "-128"],
- ?line ok = ok_loop(byte,L),
+ ok = ok_loop(byte,L),
Err = ["128", "-129"],
- ?line ok = error_loop(byte,Err).
+ ok = error_loop(byte,Err).
-nonNegativeInteger(suite) -> [];
nonNegativeInteger(_Config) ->
L = ["1", "0", "12678967543233", "+100000"],
- ?line ok = ok_loop(nonNegativeInteger,L),
- ?line {error,_} = check_simpleType(nonNegativeInteger,"-1",dummy).
+ ok = ok_loop(nonNegativeInteger,L),
+ {error,_} = check_simpleType(nonNegativeInteger,"-1",dummy).
-unsignedLong(suite) -> [];
unsignedLong(_Config) ->
L = ["0", "12678967543233", "100000", "18446744073709551615"],
- ?line ok = ok_loop(unsignedLong,L),
+ ok = ok_loop(unsignedLong,L),
Err = ["-1","18446744073709551616"],
- ?line ok = error_loop(unsignedLong,Err).
+ ok = error_loop(unsignedLong,Err).
-unsignedInt(suite) -> [];
unsignedInt(_Config) ->
L = ["4294967295", "0", "1267896754", "100000"],
- ?line ok = ok_loop(unsignedInt,L),
+ ok = ok_loop(unsignedInt,L),
Err = ["-1","4294967296"],
- ?line ok = error_loop(unsignedInt,Err).
+ ok = error_loop(unsignedInt,Err).
-unsignedShort(suite) -> [];
unsignedShort(_Config) ->
L = ["65535", "0", "12678", "10000"],
- ?line ok = ok_loop(unsignedShort,L),
+ ok = ok_loop(unsignedShort,L),
Err = ["-1","65536"],
- ?line ok = error_loop(unsignedShort,Err).
+ ok = error_loop(unsignedShort,Err).
-unsignedByte(suite) -> [];
unsignedByte(_Config) ->
L = ["255", "0", "126", "100"],
- ?line ok = ok_loop(unsignedByte,L),
+ ok = ok_loop(unsignedByte,L),
Err = ["-1","256"],
- ?line ok = error_loop(unsignedByte,Err).
+ ok = error_loop(unsignedByte,Err).
-positiveInteger(suite) -> [];
positiveInteger(_Config) ->
L = ["1", "12678967543233", "+100000"],
- ?line ok = ok_loop(positiveInteger,L),
+ ok = ok_loop(positiveInteger,L),
Err = ["-1","0"],
- ?line ok = error_loop(positiveInteger,Err).
+ ok = error_loop(positiveInteger,Err).
-
-
ok_loop(_Type,[]) ->
ok;
ok_loop(Type,[H|T]) ->
- ?line {ok,_} = check_simpleType(Type,H,dummy),
+ {ok,_} = check_simpleType(Type,H,dummy),
ok_loop(Type,T).
error_loop(_T,[]) ->
ok;
error_loop(Type,[H|T]) ->
- ?line {error,_} = check_simpleType(Type,H,dummy),
+ {error,_} = check_simpleType(Type,H,dummy),
error_loop(Type,T).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -514,657 +460,524 @@ error_loop(Type,[H|T]) ->
-length(suite) -> [];
length(_Config) ->
- ?line {ok,"string"} =
- (xmerl_xsd_type:facet_fun(string,{length,"6"}))("string"),
- ?line {error,{length,12,should_be,6}} =
+ {ok,"string"} = (xmerl_xsd_type:facet_fun(string,{length,"6"}))("string"),
+ {error,{length,12,should_be,6}} =
(xmerl_xsd_type:facet_fun(string,{length,"6"}))("stringstring"),
ok.
-minLength(suite) -> [];
minLength(_Config) ->
- ?line {ok,"string"} =
- (xmerl_xsd_type:facet_fun(string,{minLength,"6"}))("string"),
- ?line {error,{minLength,3,should_at_least_be,6}} =
+ {ok,"string"} = (xmerl_xsd_type:facet_fun(string,{minLength,"6"}))("string"),
+ {error,{minLength,3,should_at_least_be,6}} =
(xmerl_xsd_type:facet_fun(string,{minLength,"6"}))("str"),
ok.
-maxLength(suite) -> [];
maxLength(_Config) ->
- ?line {ok,"string"} =
- (xmerl_xsd_type:facet_fun(string,{maxLength,"6"}))("string"),
- ?line {error,{maxLength,12,should_not_be_more_than,6}} =
+ {ok,"string"} = (xmerl_xsd_type:facet_fun(string,{maxLength,"6"}))("string"),
+ {error,{maxLength,12,should_not_be_more_than,6}} =
(xmerl_xsd_type:facet_fun(string,{maxLength,"6"}))("stringstring"),
ok.
-pattern(suite) -> [];
pattern(_Config) ->
RE1 = "[a-z]{5}",
- ?line {ok,"calle"} =
+ {ok,"calle"} =
(xmerl_xsd_type:facet_fun(string,{pattern,RE1}))
("calle"),
- ?line {error,{pattern_mismatch,"cal",RE1}} =
+ {error,{pattern_mismatch,"cal",RE1}} =
(xmerl_xsd_type:facet_fun(string,{pattern,RE1}))
("cal"),
RE2 = "[A-Z]{2}\\d\\s\\d[A-Z]{2}",
- ?line {ok,"AY2 3BC"} =
+ {ok,"AY2 3BC"} =
(xmerl_xsd_type:facet_fun(string,{pattern,RE2}))
("AY2 3BC"),
- ?line {error,{pattern_mismatch,"AY23BC",RE2}} =
+ {error,{pattern_mismatch,"AY23BC",RE2}} =
(xmerl_xsd_type:facet_fun(string,{pattern,RE2}))
("AY23BC").
-enumeration(suite) -> [];
enumeration(_Config) ->
- ?line {ok,"tomat"} =
+ {ok,"tomat"} =
(xmerl_xsd_type:facet_fun(string,{enumeration,["gurka","tomat","sallad"]}))("tomat"),
- ?line {error,{enumeration,"morot",should_be_one_of,["gurka","tomat","sallad"]}} =
+ {error,{enumeration,"morot",should_be_one_of,["gurka","tomat","sallad"]}} =
(xmerl_xsd_type:facet_fun(string,{enumeration,["gurka","tomat","sallad"]}))("morot"),
ok.
-whiteSpace(suite) -> [];
whiteSpace(_Config) ->
- ?line {ok,"gur ka"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"collapse"}))(" gur\tka "),
- ?line {ok," gur ka "} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"replace"}))(" gur\nka\t"),
- ?line {ok," gurk\na\t"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"preserve"}))(" gurk\na\t"),
+ {ok,"gur ka"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"collapse"}))(" gur\tka "),
+ {ok," gur ka "} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"replace"}))(" gur\nka\t"),
+ {ok," gurk\na\t"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"preserve"}))(" gurk\na\t"),
ok.
-maxInclusive(suite) -> [];
maxInclusive(_Config) ->
- ?line {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} =
+ {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} =
(xmerl_xsd_type:facet_fun(integer,{maxInclusive,"2"}))("3"),
- ?line {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} =
+ {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"2"}))("3"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"2.234"}))("2.235"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"-2.222"}))("-2.221"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"2.333"}))("INF"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"1E3"}))("1001"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(float,{maxInclusive,"-0.1"}))("-0"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(float,{maxInclusive,"0"}))("0.01"),
- ?line {ok,"3"} = (xmerl_xsd_type:facet_fun(integer,{maxInclusive,"3"}))("3"),
+ {ok,"3"} = (xmerl_xsd_type:facet_fun(integer,{maxInclusive,"3"}))("3"),
- ?line {ok,"+100000.00"} =
+ {ok,"+100000.00"} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"1E6"}))("+100000.00"),
- ?line {ok,"12678967.543222"} =
+ {ok,"12678967.543222"} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"12678967.543233"}))("12678967.543222"),
- ?line {ok,"3.2E-11"} =
+ {ok,"3.2E-11"} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"2E-10"}))("3.2E-11"),
- ?line {ok,"10E20"} =
+ {ok,"10E20"} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"INF"}))("10E20"),
- ?line {ok,"0.127"} =
+ {ok,"0.127"} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"12.78e-2"}))("0.127"),
- ?line {ok,"1267.43233E12"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"1267.43233E12"}))("1267.43233E12"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"33E-25"}))("34E-26"),
+ {ok,"1267.43233E12"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"1267.43233E12"}))("1267.43233E12"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"33E-25"}))("34E-26"),
- ?line {ok,"2007-10-26T12:00:00+03:00"} =
+ {ok,"2007-10-26T12:00:00+03:00"} =
(xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T12:00:00+03:00"),
- ?line {ok,"2007-10-26T11:00:00+03:00"} =
+ {ok,"2007-10-26T11:00:00+03:00"} =
(xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T11:00:00+03:00"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T12:00:00"),
- ?line {ok,"P1Y2M3DT10H30M"} =
+ {ok,"P1Y2M3DT10H30M"} =
(xmerl_xsd_type:facet_fun(duration,{maxInclusive,"P1Y2M4D"}))("P1Y2M3DT10H30M"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(duration,{maxInclusive,"P1Y2M3DT10H"}))("P1Y2M3DT10H30M"),
ok.
-maxExclusive(suite) -> [];
maxExclusive(_Config) ->
- ?line {error,{maxExclusive,"2",not_less_than,"2"}} =
+ {error,{maxExclusive,"2",not_less_than,"2"}} =
(xmerl_xsd_type:facet_fun(integer,{maxExclusive,"2"}))("2"),
- ?line {error,{maxExclusive,"-19999",not_less_than,"-20000"}} =
+ {error,{maxExclusive,"-19999",not_less_than,"-20000"}} =
(xmerl_xsd_type:facet_fun(integer,{maxExclusive,"-20000"}))("-19999"),
- ?line {error,{maxExclusive,"3.0000",not_less_than,"2.9999"}} =
+ {error,{maxExclusive,"3.0000",not_less_than,"2.9999"}} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"2.9999"}))("3.0000"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"2.234"}))("2.234"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"-2.22222222"}))("-2.22222222"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"2.333E23"}))("INF"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"1E3"}))("1000"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"1E-13"}))("0.999E-12"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(float,{maxExclusive,"-0.1"}))("-0.01E1"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(float,{maxExclusive,"-1E-1"}))("-0"),
- ?line {ok,"-4"} = (xmerl_xsd_type:facet_fun(integer,{maxExclusive,"3"}))("-4"),
+ {ok,"-4"} = (xmerl_xsd_type:facet_fun(integer,{maxExclusive,"3"}))("-4"),
- ?line {ok,"+100000.00"} =
+ {ok,"+100000.00"} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"1E6"}))("+100000.00"),
%% must support 18 digits
- ?line {ok,"12678967.5432323456"} =
+ {ok,"12678967.5432323456"} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"12678967.5432323457"}))("12678967.5432323456"),
- ?line {ok,"3.2E-11"} =
+ {ok,"3.2E-11"} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"2E-10"}))("3.2E-11"),
- ?line {ok,"10E20"} =
+ {ok,"10E20"} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"INF"}))("10E20"),
- ?line {ok,"0.127"} =
+ {ok,"0.127"} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"12.78e-2"}))("0.127"),
- ?line {ok,"1267.43233E11"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"1267.43233E12"}))("1267.43233E11"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"33E-25"}))("34E-26"),
+ {ok,"1267.43233E11"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"1267.43233E12"}))("1267.43233E11"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"33E-25"}))("34E-26"),
- ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{maxExclusive,"P1Y2M4D"}))("P1Y2M3DT10H30M"),
+ {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{maxExclusive,"P1Y2M4D"}))("P1Y2M3DT10H30M"),
- ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{maxExclusive,"2006-09-06T19:17:46Z"}))("2006-09-06T19:17:45Z"),
+ {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{maxExclusive,"2006-09-06T19:17:46Z"}))("2006-09-06T19:17:45Z"),
ok.
-minExclusive(suite) -> [];
minExclusive(_Config) ->
- ?line {error,{minExclusive,"2",not_greater_than,"2"}} =
+ {error,{minExclusive,"2",not_greater_than,"2"}} =
(xmerl_xsd_type:facet_fun(integer,{minExclusive,"2"}))("2"),
- ?line {error,{minExclusive,"-20001",not_greater_than,"-20000"}} =
+ {error,{minExclusive,"-20001",not_greater_than,"-20000"}} =
(xmerl_xsd_type:facet_fun(integer,{minExclusive,"-20000"}))("-20001"),
- ?line {error,{minExclusive,"2.9999",not_greater_than,"2.9999"}} =
+ {error,{minExclusive,"2.9999",not_greater_than,"2.9999"}} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"2.9999"}))("2.9999"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"-123456789.123456788"}))("-123456789.123456789"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"-2.222222000"}))("-2.22222222"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"INF"}))("2.333E23"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"1E3"}))("1000"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"1E-13"}))("0.999E-14"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(float,{minExclusive,"-0.1"}))("-0.01E1"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(float,{minExclusive,"-0"}))("-1E-1"),
- ?line {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minExclusive,"-3"}))("4"),
+ {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minExclusive,"-3"}))("4"),
- ?line {ok,"+1000001.00"} =
+ {ok,"+1000001.00"} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"1E6"}))("+1000001.00"),
%% must support 18 digits
- ?line {ok,"12678967.5432323456"} =
+ {ok,"12678967.5432323456"} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"12678967.54323234555"}))("12678967.5432323456"),
- ?line {ok,"3.2E-11"} =
+ {ok,"3.2E-11"} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"2E-12"}))("3.2E-11"),
- ?line {ok,"10E20"} =
+ {ok,"10E20"} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"-INF"}))("10E20"),
- ?line {ok,"0.1279"} =
+ {ok,"0.1279"} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"12.78e-2"}))("0.1279"),
- ?line {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"1267.43233E12"}))("126743.233E11"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"33E-27"}))("34E-26"),
+ {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"1267.43233E12"}))("126743.233E11"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"33E-27"}))("34E-26"),
- ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minExclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"),
+ {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minExclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"),
- ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minExclusive,"2006-09-06T19:17:44Z"}))("2006-09-06T19:17:45Z"),
+ {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minExclusive,"2006-09-06T19:17:44Z"}))("2006-09-06T19:17:45Z"),
ok.
-minInclusive(suite) -> [];
minInclusive(_Config) ->
- ?line {error,{minInclusive,"1",not_greater_than_or_equal_with,"2"}} =
+ {error,{minInclusive,"1",not_greater_than_or_equal_with,"2"}} =
(xmerl_xsd_type:facet_fun(integer,{minInclusive,"2"}))("1"),
- ?line {error,{minInclusive,"-20001",not_greater_than_or_equal_with,
+ {error,{minInclusive,"-20001",not_greater_than_or_equal_with,
"-20000"}} =
(xmerl_xsd_type:facet_fun(integer,{minInclusive,"-20000"}))("-20001"),
- ?line {error,{minInclusive,"2.9999",not_greater_than_or_equal_with,
+ {error,{minInclusive,"2.9999",not_greater_than_or_equal_with,
"2.99999"}} =
(xmerl_xsd_type:facet_fun(decimal,{minInclusive,"2.99999"}))("2.9999"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(decimal,{minInclusive,"-123456789.123456788"}))("-123456789.123456789"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(decimal,{minInclusive,"-2.222222000"}))("-2.22222222"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{minInclusive,"2.333E23"}))("-INF"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{minInclusive,"1E3"}))("100"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{minInclusive,"1E-13"}))("0.999E-14"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(float,{minInclusive,"-0.1"}))("-0.1E1"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(float,{minInclusive,"-0"}))("-1E-1"),
- ?line {error,_}=(xmerl_xsd_type:facet_fun(float,{minInclusive,"10E-10"}))("10E-11"),
+ {error,_}=(xmerl_xsd_type:facet_fun(float,{minInclusive,"10E-10"}))("10E-11"),
- ?line {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minInclusive,"-3"}))("4"),
+ {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minInclusive,"-3"}))("4"),
- ?line {ok,"+1000000.00"} =
- (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"1E6"}))("+1000000.00"),
+ {ok,"+1000000.00"} = (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"1E6"}))("+1000000.00"),
%% must support 18 digits
- ?line {ok,"12678967.5432323456"} =
+ {ok,"12678967.5432323456"} =
(xmerl_xsd_type:facet_fun(decimal,{minInclusive,"12678967.54323234555"}))("12678967.5432323456"),
- ?line {ok,"3.2E-11"} =
- (xmerl_xsd_type:facet_fun(double,{minInclusive,"2E-12"}))("3.2E-11"),
- ?line {ok,"10E20"} =
- (xmerl_xsd_type:facet_fun(double,{minInclusive,"-INF"}))("10E20"),
- ?line {ok,"0.1279"} =
- (xmerl_xsd_type:facet_fun(double,{minInclusive,"12.78e-2"}))("0.1279"),
+ {ok,"3.2E-11"} = (xmerl_xsd_type:facet_fun(double,{minInclusive,"2E-12"}))("3.2E-11"),
+ {ok,"10E20"} = (xmerl_xsd_type:facet_fun(double,{minInclusive,"-INF"}))("10E20"),
+ {ok,"0.1279"} = (xmerl_xsd_type:facet_fun(double,{minInclusive,"12.78e-2"}))("0.1279"),
- ?line {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"1267.43233E12"}))("126743.233E11"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"33E-27"}))("34E-26"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"340E-27"}))("34E-26"),
+ {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"1267.43233E12"}))("126743.233E11"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"33E-27"}))("34E-26"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"340E-27"}))("34E-26"),
- ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minInclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"),
+ {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minInclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"),
- ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minInclusive,"2006-09-06T19:17:45Z"}))("2006-09-06T19:17:45Z"),
+ {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minInclusive,"2006-09-06T19:17:45Z"}))("2006-09-06T19:17:45Z"),
ok.
-totalDigits(suite) -> [];
totalDigits(_Config) ->
- ?line {error,{totalDigits,4,to_many_digits}} =
+ {error,{totalDigits,4,to_many_digits}} =
(xmerl_xsd_type:facet_fun(integer,{totalDigits,"3"}))("3456"),
- ?line {error,{totalDigits,4,to_many_digits}} =
+ {error,{totalDigits,4,to_many_digits}} =
(xmerl_xsd_type:facet_fun(decimal,{totalDigits,"3"}))("00345.600"),
- ?line {ok,"555"} =
- (xmerl_xsd_type:facet_fun(integer,{totalDigits,"3"}))("555"),
- ?line {ok,"555"} =
- (xmerl_xsd_type:facet_fun(integer,{totalDigits,"7"}))("555"),
- ?line {ok,"555.555"} =
- (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555"),
- ?line {ok,"555.555000000"} =
- (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555000000"),
+ {ok,"555"} = (xmerl_xsd_type:facet_fun(integer,{totalDigits,"3"}))("555"),
+ {ok,"555"} = (xmerl_xsd_type:facet_fun(integer,{totalDigits,"7"}))("555"),
+ {ok,"555.555"} = (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555"),
+ {ok,"555.555000000"} = (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555000000"),
ok.
-fractionDigits(suite) -> [];
fractionDigits(_Config) ->
- ?line {error,{fractionDigits,3,to_many_digits_in,"555.555000000"}} =
+ {error,{fractionDigits,3,to_many_digits_in,"555.555000000"}} =
(xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"2"}))("555.555000000"),
- ?line {error,{fractionDigits,6,to_many_digits_in,"555.555001"}} =
+ {error,{fractionDigits,6,to_many_digits_in,"555.555001"}} =
(xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555.555001"),
- ?line {ok,"555.55500"} =
- (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555.55500"),
- ?line {ok,"555"} =
- (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555"),
- ?line {ok,"555.000"} =
- (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"0"}))("555.000"),
+ {ok,"555.55500"} = (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555.55500"),
+ {ok,"555"} = (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555"),
+ {ok,"555.000"} = (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"0"}))("555.000"),
- ?line {ok,"555"} =
- (xmerl_xsd_type:facet_fun(integer,{fractionDigits,"0"}))("555"),
+ {ok,"555"} = (xmerl_xsd_type:facet_fun(integer,{fractionDigits,"0"}))("555"),
ok.
%% some block testing of dateTime and duration comparisons
-compare_dateTime(suite) -> [];
compare_dateTime(_Config) ->
%% comparison results according to table in section 3.2.7.4 of XML
%% Schema part 2
- ?line lt = xmerl_xsd_type:compare_dateTime("2000-01-15T00:00:00",
- "2000-02-15T00:00:00"),
- ?line gt = xmerl_xsd_type:compare_dateTime("2000-02-15T00:00:00",
- "2000-01-15T00:00:00"),
-
- ?line lt = xmerl_xsd_type:compare_dateTime("2000-01-15T12:00:00",
- "2000-01-16T12:00:00Z"),
- ?line gt = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
- "2000-01-15T12:00:00"),
+ lt = xmerl_xsd_type:compare_dateTime("2000-01-15T00:00:00",
+ "2000-02-15T00:00:00"),
+
+ gt = xmerl_xsd_type:compare_dateTime("2000-02-15T00:00:00",
+ "2000-01-15T00:00:00"),
+
+ lt = xmerl_xsd_type:compare_dateTime("2000-01-15T12:00:00",
+ "2000-01-16T12:00:00Z"),
+
+ gt = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
+ "2000-01-15T12:00:00"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-01T12:00:00",
- "1999-12-31T23:00:00Z"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("1999-12-31T23:00:00Z",
- "2000-01-01T12:00:00"),
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-01T12:00:00",
+ "1999-12-31T23:00:00Z"),
+
+ indefinite = xmerl_xsd_type:compare_dateTime("1999-12-31T23:00:00Z",
+ "2000-01-01T12:00:00"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00",
- "2000-01-16T12:00:00Z"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
- "2000-01-16T12:00:00"),
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00",
+ "2000-01-16T12:00:00Z"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T00:00:00",
- "2000-01-16T12:00:00Z"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
- "2000-01-16T00:00:00"),
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
+ "2000-01-16T12:00:00"),
+
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T00:00:00",
+ "2000-01-16T12:00:00Z"),
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
+ "2000-01-16T00:00:00"),
%% example in appendix E.1 in XML Schema part 2.
- ?line {2001,4,17,19,23,17.3000,{pos,0,0}} =
+ {2001,4,17,19,23,17.3000,{pos,0,0}} =
xmerl_xsd_type:add_duration2dateTime("2000-01-12T12:13:14Z",
"P1Y3M5DT7H10M3.3S").
-compare_duration(suite) -> [];
compare_duration(_Config) ->
%% order relations according to section 3.2.6.2 in XML Schema
%% part2.
- ?line gt = xmerl_xsd_type:compare_durations("P1Y","P364D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1Y","P365D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1Y","P366D"),
- ?line lt = xmerl_xsd_type:compare_durations("P1Y","P367D"),
-
- ?line gt = xmerl_xsd_type:compare_durations("P1M","P27D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P28D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P29D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P30D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P31D"),
- ?line lt = xmerl_xsd_type:compare_durations("P1M","P32D"),
-
- ?line gt = xmerl_xsd_type:compare_durations("P5M","P149D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P150D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P151D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P152D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P153D"),
- ?line lt = xmerl_xsd_type:compare_durations("P5M","P154D").
-
-xml_xsd(suite) -> [];
+ gt = xmerl_xsd_type:compare_durations("P1Y","P364D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1Y","P365D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1Y","P366D"),
+ lt = xmerl_xsd_type:compare_durations("P1Y","P367D"),
+
+ gt = xmerl_xsd_type:compare_durations("P1M","P27D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1M","P28D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1M","P29D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1M","P30D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1M","P31D"),
+ lt = xmerl_xsd_type:compare_durations("P1M","P32D"),
+
+ gt = xmerl_xsd_type:compare_durations("P5M","P149D"),
+ indefinite = xmerl_xsd_type:compare_durations("P5M","P150D"),
+ indefinite = xmerl_xsd_type:compare_durations("P5M","P151D"),
+ indefinite = xmerl_xsd_type:compare_durations("P5M","P152D"),
+ indefinite = xmerl_xsd_type:compare_durations("P5M","P153D"),
+ lt = xmerl_xsd_type:compare_durations("P5M","P154D").
+
xml_xsd(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = datadir( Config),
Options = [{fetch_path, [DataDir]}],
{ok, _} = xmerl_xsd:process_schema("xml.xsd", Options).
-xml_lang_attr(suite) -> [];
xml_lang_attr(Config) ->
- DataDir = ?config(data_dir, Config),
- {Element, _} = xmerl_scan:file(filename:join([DataDir, "book.xml"])),
+ DataDir = datadir( Config),
+ {Element, _} = xmerl_scan:file(filename:join([DataDir,"book.xml"])),
Options = [{fetch_path, [DataDir]}],
{ok, Schema} = xmerl_xsd:process_schema("book.xsd", Options),
{Element, _} = xmerl_xsd:validate(Element, Schema).
-po(suite) -> [];
po(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po.xml"]),[]),
- ?line {E,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po.xsd"]),E,[]).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["po.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["po.xsd"]),E,[]).
-po1(suite) -> [];
po1(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1.xml"]),[]),
- ?line {E2,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1.xsd"]),E,[]),
- ?line ok = xmerl_test_lib:cmp_element(E,E2).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["po1.xml"]),[]),
+ {E2,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1.xsd"]),E,[]),
+ ok = xmerl_test_lib:cmp_element(E,E2).
-po2(suite) -> [];
po2(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po2.xml"]),[]),
- ?line {E2,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1.xsd"]),E,[]),
- ?line ok = xmerl_test_lib:cmp_element(E,E2).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["po2.xml"]),[]),
+ {E2,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1.xsd"]),E,[]),
+ ok = xmerl_test_lib:cmp_element(E,E2).
-ipo(suite) -> [];
ipo(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "ipo.xml"]),[]),
- ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "ipo.xsd"]),E,[]),
- ?line ok = xmerl_test_lib:cmp_element(E,VE).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ipo.xml"]),[]),
+ {VE,_} = xmerl_xsd:process_validate(datadir_join(Config,["ipo.xsd"]),E,[]),
+ ok = xmerl_test_lib:cmp_element(E,VE).
-ipo_redefine(suite) -> [];
ipo_redefine(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "ipo_redefine.xml"]),[]),
- ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "ipo_redefine.xsd"]),E,[]),
- ?line ok = xmerl_test_lib:cmp_element(E,VE).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ipo_redefine.xml"]),[]),
+ {VE,_} = xmerl_xsd:process_validate(datadir_join(Config,["ipo_redefine.xsd"]),E,[]),
+ ok = xmerl_test_lib:cmp_element(E,VE).
-'4Q99'(suite) -> [];
'4Q99'(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "4Q99.xml"]),[]),
+ {E,_} = xmerl_scan:file(datadir_join(Config,["4Q99.xml"]),[]),
%% the import in report.xsd lacks schemaLocation, so the imported
%% namespace definitions have to be loaded separately.
- ?line {ok,S} =
- xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),
- "ipo.xsd"])),
- ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "report.xsd"]),E,[{state,S}]),
- ?line ok = xmerl_test_lib:cmp_element(E,VE),
+ {ok,S} = xmerl_xsd:process_schema(datadir_join(Config,["ipo.xsd"])),
+ {VE,_} = xmerl_xsd:process_validate(datadir_join(Config,["report.xsd"]),E,[{state,S}]),
+ ok = xmerl_test_lib:cmp_element(E,VE),
%% report2.xsd has an import element with a schemaLocation attribute
- ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "report2.xsd"]),E,[]).
+ {VE,_} = xmerl_xsd:process_validate(datadir_join(Config,["report2.xsd"]),E,[]).
-small(suite) -> [];
small(Config) ->
- ?line {E=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "small.xml"]),[]),
- ?line {VE=#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "small.xsd"]),E,[]),
- ?line #xmlElement{attributes=Atts,content=C} = VE,
- ?line C = E#xmlElement.content,
+ {E=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["small.xml"]),[]),
+ {VE=#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["small.xsd"]),E,[]),
+ #xmlElement{attributes=Atts,content=C} = VE,
+ C = E#xmlElement.content,
%% The attribute orderStatus with default value was absent in small.xml
%% Test of validation "on the fly" when parsing XML.
- ?line {VE,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "small.xml"]),
- [{validation,schema},
- {schemaLocation,[{"small",filename:join(?config(data_dir,Config),"small.xsd")}]}]),
- ?line {VE,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "small.xml"]),
- [{validation,schema}]),
- ?line true = lists:keymember(orderStatus,#xmlAttribute.name,Atts).
-
-complexType1(suite) -> [];
+ {VE,_} = xmerl_scan:file(datadir_join(Config,["small.xml"]),
+ [{validation,schema},
+ {schemaLocation,[{"small",filename:join(datadir(Config),"small.xsd")}]}]),
+ {VE,_} = xmerl_scan:file(datadir_join(Config,["small.xml"]),
+ [{validation,schema}]),
+ true = lists:keymember(orderStatus,#xmlAttribute.name,Atts).
+
complexType1(Config) ->
- ?line {E1=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "complexTypes1.xml"]),[]),
- ?line {VE1=#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "complexTypes.xsd"]),E1,[]),
- ?line ok = xmerl_test_lib:cmp_element(E1,VE1),
-
- ?line {E2=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "complexTypes2.xml"]),[]),
- ?line {VE2=#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "complexTypes.xsd"]),E2,[]),
- ?line ok = xmerl_test_lib:cmp_element(E2,VE2).
-
-model_group_all(suite) -> [];
+ {E1=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["complexTypes1.xml"]),[]),
+ {VE1=#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[ "complexTypes.xsd"]),E1,[]),
+ ok = xmerl_test_lib:cmp_element(E1,VE1),
+
+ {E2=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["complexTypes2.xml"]),[]),
+ {VE2=#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["complexTypes.xsd"]),E2,[]),
+ ok = xmerl_test_lib:cmp_element(E2,VE2).
+
model_group_all(Config) ->
- ?line {E=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1.xml"]),[]),
- ?line {E,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E,[]),
-
- ?line {E1=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1_all1.xml"]),[]),
- ?line {E1,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E1,[]),
-
- ?line {E2=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1_all2.xml"]),[]),
- ?line {E2,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E2,[]),
-
- ?line {E3=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1_all_err1.xml"]),[]),
- ?line {error,_Reason1} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E3,[]),
+ {E=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E,[]),
+
+ {E1=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1_all1.xml"]),[]),
+ {E1,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E1,[]),
+
+ {E2=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1_all2.xml"]),[]),
+ {E2,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E2,[]),
+
+ {E3=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1_all_err1.xml"]),[]),
+ {error,_Reason1} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E3,[]),
- ?line {E4=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1_all_err2.xml"]),[]),
- ?line {error,_Reason2} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E4,[]).
-
-substitutionGroup(suite) -> [];
+ {E4=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1_all_err2.xml"]),[]),
+ {error,_Reason2} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E4,[]).
+
substitutionGroup(Config) ->
- ?line {E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "ipo_substGroup.xml"]),[]),
- ?line {E,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "ipo_substGroup.xsd"]),E,[]).
-attributeGroup(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ipo_substGroup.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["ipo_substGroup.xsd"]),E,[]).
+
attributeGroup(Config) ->
- ?line {E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po_attrGroup.xml"]),[]),
- ?line {E,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po_attrGroup.xsd"]),E,[]).
-test_key1(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,["po_attrGroup.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["po_attrGroup.xsd"]),E,[]).
+
test_key1(Config) ->
- ?line {E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "vehicle2.xml"]),[]),
- ?line {E,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "vehicle.xsd"]),E,[]),
-
- ?line {E2,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "vehicle.xml"]),[]),
- ?line {error,L2} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "vehicle.xsd"]),E2,[]),
- ?line 10 = erlang:length(L2),
-
- ?line {E3 = #xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "vehicle3.xml"]),[]),
- ?line {E3 = #xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "vehicle.xsd"]),E3,[]).
-
-sis1(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,["vehicle2.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["vehicle.xsd"]),E,[]),
+
+ {E2,_} = xmerl_scan:file(datadir_join(Config,["vehicle.xml"]),[]),
+ {error,L2} = xmerl_xsd:process_validate(datadir_join(Config,["vehicle.xsd"]),E2,[]),
+ 10 = erlang:length(L2),
+
+ {E3 = #xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["vehicle3.xml"]),[]),
+ {E3 = #xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["vehicle.xsd"]),E3,[]).
+
sis1(Config) ->
- ?line {E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),sis,
- "instance.xml"]),[]),
- ?line {#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis,
- "IntegratedSite.xsd"]),E,[]).
-sis2(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,[sis,"instance.xml"]),[]),
+ {#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[sis,"IntegratedSite.xsd"]),E,[]).
+
sis2(Config) ->
- ?line {BS_E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),sis,
- "bs_mim.xml"]),[]),
- ?line {SW_E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),sis,
- "swm_mim.xml"]),[]),
- ?line {HW_E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),sis,
- "hwm_mim.xml"]),[]),
-
- ?line {#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis,
- "mim.xsd"]),BS_E,[]),
- ?line {#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis,
- "mim.xsd"]),SW_E,[]),
- ?line {#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis,
- "mim.xsd"]),HW_E,[]).
-
-state2file_file2state(suite) -> [];
+ {BS_E,_} = xmerl_scan:file(datadir_join(Config,[sis,"bs_mim.xml"]),[]),
+ {SW_E,_} = xmerl_scan:file(datadir_join(Config,[sis,"swm_mim.xml"]),[]),
+ {HW_E,_} = xmerl_scan:file(datadir_join(Config,[sis,"hwm_mim.xml"]),[]),
+
+ {#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[sis,"mim.xsd"]),BS_E,[]),
+ {#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[sis,"mim.xsd"]),SW_E,[]),
+ {#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[sis,"mim.xsd"]),HW_E,[]).
+
state2file_file2state(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po.xml"]),[]),
- ?line {ok,S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"po.xsd"])),
- ?line {E,_} = xmerl_xsd:validate(E,S),
- ?line ok = xmerl_xsd:state2file(S),
- ?line {ok,S} = xmerl_xsd:file2state(filename:join([?config(data_dir,Config),"po.xss"])),
- ?line {E,_} = xmerl_xsd:validate(E,S),
+ {E,_} = xmerl_scan:file(datadir_join(Config,[ "po.xml"]),[]),
+ {ok,S} = xmerl_xsd:process_schema(datadir_join(Config,["po.xsd"])),
+ {E,_} = xmerl_xsd:validate(E,S),
+ ok = xmerl_xsd:state2file(S),
+ {ok,S} = xmerl_xsd:file2state(datadir_join(Config,["po.xss"])),
+ {E,_} = xmerl_xsd:validate(E,S),
- ?line ok = xmerl_xsd:state2file(S,filename:join([?config(data_dir,Config),"po_state"])),
- ?line {ok,S} = xmerl_xsd:file2state(filename:join([?config(data_dir,Config),"po_state.xss"])),
+ ok = xmerl_xsd:state2file(S,datadir_join(Config,["po_state"])),
+ {ok,S} = xmerl_xsd:file2state(datadir_join(Config,["po_state.xss"])),
- ?line {E,_} = xmerl_xsd:validate(E,S).
+ {E,_} = xmerl_xsd:validate(E,S).
-union(suite) -> [];
union(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "instance.xml"])),
-
- ?line {_E2 = #xmlElement{},_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),"measCollec.xsd"]),E).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["instance.xml"])),
+ {_E2 = #xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["measCollec.xsd"]),E).
-
-ticket_6910(suite) -> [];
ticket_6910(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- sis,"dummy_action_mim.xml"])),
- ?line {_E2 = #xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- sis,"mim2.xsd"]),E).
-ticket_7165(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,[sis,"dummy_action_mim.xml"])),
+ {_E2 = #xmlElement{},_} =
+ xmerl_xsd:process_validate(datadir_join(Config,[sis,"mim2.xsd"]),E).
+
ticket_7165(Config) ->
%% The validation option seems not to work
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "ticket_7288.xml"]),
- [{validation, schema}]),
+ {_E,_} = xmerl_scan:file(datadir_join(Config,["ticket_7288.xml"]),
+ [{validation, schema}]),
%% The option xsdbase gave {error, enoent}.
- ?line {ok,_} = xmerl_xsd:process_schema("CxDataType_Rel5.xsd", [{xsdbase, ?config(data_dir,Config)}]).
+ {ok,_} = xmerl_xsd:process_schema("CxDataType_Rel5.xsd", [{xsdbase, datadir(Config)}]).
-ticket_7190(suite) -> [];
ticket_7190(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "int.xml"])),
- ?line {_E2 = #xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "simple_int.xsd"]),E).
-ticket_7288(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,["int.xml"])),
+ {_E2 = #xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["simple_int.xsd"]),E).
+
ticket_7288(Config) ->
%% The schema table in the state where deleted by xmerl_xsd:validate if there was an error.
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),"ticket_7288.xml"])),
-
- ?line {ok,S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"CxDataType_Rel5.xsd"])),
-
- ?line {error, EL} = xmerl_xsd:validate(E, S),
-
- ?line {error, EL} = xmerl_xsd:validate(E, S).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ticket_7288.xml"])),
+ {ok,S} = xmerl_xsd:process_schema(datadir_join(Config,["CxDataType_Rel5.xsd"])),
+ {error, EL} = xmerl_xsd:validate(E, S),
+ {error, EL} = xmerl_xsd:validate(E, S).
-ticket_7736(suite) -> [];
ticket_7736(Config) ->
- DataDir = ?config(data_dir,Config),
- ?line {ok, State } =
- xmerl_xsd:process_schema(filename:join([DataDir,"enum_bug.xsd"])),
+ DataDir = datadir(Config),
+ {ok, State } = xmerl_xsd:process_schema(filename:join([DataDir,"enum_bug.xsd"])),
- ?line {Entity ,_} =
- xmerl_scan:file(filename:join([DataDir,"enum_bug.xml"])),
+ {Entity ,_} = xmerl_scan:file(filename:join([DataDir,"enum_bug.xml"])),
- ?line {#xmlElement{},_} = xmerl_xsd:validate(Entity, State).
+ {#xmlElement{},_} = xmerl_xsd:validate(Entity, State).
-ticket_8599(suite) -> [];
ticket_8599(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),"ticket_8599.xml"])),
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ticket_8599.xml"])),
- ?line {ok, S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"ticket_8599.xsd"])),
+ {ok, S} = xmerl_xsd:process_schema(datadir_join(Config,["ticket_8599.xsd"])),
- ?line {{xmlElement,persons,persons,_,_,_,_,_,_,_,_,_},_GlobalState} = xmerl_xsd:validate(E, S).
+ {{xmlElement,persons,persons,_,_,_,_,_,_,_,_,_},_GlobalState} = xmerl_xsd:validate(E, S).
-ticket_9410(suite) -> [];
ticket_9410(Config) ->
- file:set_cwd(filename:join([?config(data_dir,Config),".."])),
- ?line {ok, _S} = xmerl_xsd:process_schema("xmerl_xsd_SUITE_data/small.xsd").
+ file:set_cwd(datadir_join(Config,[".."])),
+ {ok, _S} = xmerl_xsd:process_schema("xmerl_xsd_SUITE_data/small.xsd").
+
+%%======================================================================
+%% Support Functions
+%%======================================================================
+
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+datadir(Config) ->
+ proplists:get_value(data_dir, Config).
+
+datadir_join(Config,Files) ->
+ filename:join([datadir(Config)|Files]).
diff --git a/lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl b/lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl
index 5ad6bb94fb..2af6165ee6 100644
--- a/lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl
+++ b/lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
-compile(export_all).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include_lib("xmerl/include/xmerl.hrl").
-include_lib("xmerl/include/xmerl_xsd.hrl").
@@ -48,53 +48,41 @@ all() ->
'Sun-xsiType-block-2', 'Sun-xsiType-block-3',
'Sun-xsiType-block-4', 'Sun-type-and-subst-1'].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
+suite() ->
+ [{timetrap,{minutes,3}}].
%% initialization before the test suite
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- xmerl_xsd_lib:unpack(Config,sun),
- {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,sun),
- test_server:timetrap_cancel(Dog),
- [{suite,sun},{xmerl_error_log,LogFile}|Config].
+ ct:timetrap({minutes,10}),
+ xmerl_xsd_lib:unpack(Config,sun),
+ {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,sun),
+ [{suite,sun},{xmerl_error_log,LogFile}|Config].
end_per_suite(Config) ->
- xmerl_xsd_lib:rmdir(Config,sun),
- xmerl_xsd_lib:close_error_log_file(Config),
- ok.
+ xmerl_xsd_lib:rmdir(Config,sun),
+ xmerl_xsd_lib:close_error_log_file(Config),
+ ok.
%% initialization before each testcase
init_per_testcase(TestCase,Config) ->
- Dog=test_server:timetrap({minutes,3}),
- [{testcase,TestCase},{watchdog, Dog}|Config].
+ [{testcase,TestCase}|Config].
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+end_per_testcase(_Func,_Config) ->
+ ok.
%% ID Constranints. Very naive test of identity constraint
'Sun-idc001.nogen'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc001.nogen.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc001.nogen.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.v01.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.v01.xml','./suntest/SunTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
@@ -104,7 +92,7 @@ end_per_testcase(_Func,Config) ->
'Sun-idc002.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc002.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc002.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -114,7 +102,7 @@ end_per_testcase(_Func,Config) ->
'Sun-idc002b.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc002b.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc002b.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -124,7 +112,7 @@ end_per_testcase(_Func,Config) ->
'Sun-idc003.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc003.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc003.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -134,18 +122,18 @@ end_per_testcase(_Func,Config) ->
'Sun-idc004.nogen'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc004.nogen.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc004.nogen.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -155,7 +143,7 @@ end_per_testcase(_Func,Config) ->
'Sun-idc004a.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc004a.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc004a.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -165,14 +153,14 @@ end_per_testcase(_Func,Config) ->
'Sun-idc005.nogen'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc005.nogen.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc005.nogen.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
@@ -182,14 +170,14 @@ end_per_testcase(_Func,Config) ->
'Sun-idc006.nogen'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc006.nogen.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc006.nogen.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
@@ -199,32 +187,32 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd001'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd001.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd001.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n07.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n07.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v01.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v01.xml','./suntest/SunTestsAll',valid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v02.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v02.xml','./suntest/SunTestsAll',valid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v03.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v03.xml','./suntest/SunTestsAll',valid,S0),
ITResList12 = [ITRes11|ITResList11],
@@ -234,18 +222,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd002'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd002.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd002.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.v01.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.v01.xml','./suntest/SunTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -255,7 +243,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd003-1.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003-1.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003-1.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -265,7 +253,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd003-2.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003-2.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003-2.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -275,10 +263,10 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd003a'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003a.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003a.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003a.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003a.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
@@ -288,16 +276,16 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd003b'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003b.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003b.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.v01.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.v01.xml','./suntest/SunTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
@@ -307,36 +295,36 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd004'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd004.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd004.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n07.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n07.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n08.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n08.xml','./suntest/SunTestsAll',invalid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n09.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n09.xml','./suntest/SunTestsAll',invalid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n10.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n10.xml','./suntest/SunTestsAll',invalid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n11.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n11.xml','./suntest/SunTestsAll',invalid,S0),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n12.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n12.xml','./suntest/SunTestsAll',invalid,S0),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList14 = [ITRes13|ITResList13],
@@ -346,24 +334,24 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd005'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd005.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd005.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList8 = [ITRes7|ITResList7],
@@ -373,32 +361,32 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd006'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd006.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd006.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n07.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n07.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n08.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n08.xml','./suntest/SunTestsAll',invalid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n09.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n09.xml','./suntest/SunTestsAll',invalid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n10.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n10.xml','./suntest/SunTestsAll',invalid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.v00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.v00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList12 = [ITRes11|ITResList11],
@@ -408,16 +396,16 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd008'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd008.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd008.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
@@ -427,20 +415,20 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd011'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd011.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd011.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.v00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.v00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
@@ -450,12 +438,12 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd012'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd012.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd012.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd012.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd012.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd012.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd012.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
@@ -465,7 +453,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd013.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd013.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd013.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -475,7 +463,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd014.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd014.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd014.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -485,7 +473,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd015.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd015.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd015.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -495,7 +483,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd016.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd016.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd016.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -505,7 +493,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd017.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd017.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd017.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -515,7 +503,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd018.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd018.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd018.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -525,7 +513,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd019.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd019.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd019.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -535,7 +523,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd020.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -545,7 +533,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd020-2.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-2.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-2.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -555,7 +543,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd020-3.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-3.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-3.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -565,7 +553,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd020-4.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-4.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-4.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -575,34 +563,34 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd021'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd021.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd021.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n07.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n07.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n08.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n08.xml','./suntest/SunTestsAll',invalid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n09.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n09.xml','./suntest/SunTestsAll',invalid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n10.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n10.xml','./suntest/SunTestsAll',invalid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n11.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n11.xml','./suntest/SunTestsAll',invalid,S0),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList13 = [ITRes12|ITResList12],
@@ -612,12 +600,12 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd022'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd022.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd022.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd022.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd022.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd022.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd022.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
@@ -627,7 +615,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd023.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd023.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd023.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -637,12 +625,12 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType1'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType1.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType1.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType1.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType1.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType1.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType1.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
@@ -652,18 +640,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType-block-1'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-1.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-1.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -673,18 +661,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType-block-2'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-2.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-2.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -694,18 +682,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType-block-3'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-3.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-3.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -715,18 +703,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType-block-4'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-4.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-4.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -736,78 +724,76 @@ end_per_testcase(_Func,Config) ->
'Sun-type-and-subst-1'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/type-and-subst-1.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/type-and-subst-1.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.v2.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.v2.xml','./suntest/SunTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n5.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n5.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n6.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n6.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n7.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n7.xml','./suntest/SunTestsAll',invalid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n8.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n8.xml','./suntest/SunTestsAll',invalid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n9.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n9.xml','./suntest/SunTestsAll',invalid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n10.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n10.xml','./suntest/SunTestsAll',invalid,S0),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n11.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n11.xml','./suntest/SunTestsAll',invalid,S0),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n12.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n12.xml','./suntest/SunTestsAll',invalid,S0),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n13.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n13.xml','./suntest/SunTestsAll',invalid,S0),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n14.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n14.xml','./suntest/SunTestsAll',invalid,S0),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n15.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n15.xml','./suntest/SunTestsAll',invalid,S0),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n16.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n16.xml','./suntest/SunTestsAll',invalid,S0),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n17.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n17.xml','./suntest/SunTestsAll',invalid,S0),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n18.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n18.xml','./suntest/SunTestsAll',invalid,S0),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n19.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n19.xml','./suntest/SunTestsAll',invalid,S0),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n20.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n20.xml','./suntest/SunTestsAll',invalid,S0),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n21.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n21.xml','./suntest/SunTestsAll',invalid,S0),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n22.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n22.xml','./suntest/SunTestsAll',invalid,S0),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n23.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n23.xml','./suntest/SunTestsAll',invalid,S0),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n24.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n24.xml','./suntest/SunTestsAll',invalid,S0),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n25.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n25.xml','./suntest/SunTestsAll',invalid,S0),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n26.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n26.xml','./suntest/SunTestsAll',invalid,S0),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n27.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n27.xml','./suntest/SunTestsAll',invalid,S0),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n28.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n28.xml','./suntest/SunTestsAll',invalid,S0),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n29.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n29.xml','./suntest/SunTestsAll',invalid,S0),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n30.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n30.xml','./suntest/SunTestsAll',invalid,S0),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n31.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n31.xml','./suntest/SunTestsAll',invalid,S0),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n32.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n32.xml','./suntest/SunTestsAll',invalid,S0),
ITResList34 = [ITRes33|ITResList33],
-
xmerl_xsd_lib:compare_test_results(Config,STResList1,ITResList34).
-
diff --git a/lib/xmerl/test/xmerl_xsd_lib.erl b/lib/xmerl/test/xmerl_xsd_lib.erl
index 892706609f..6006cf500f 100644
--- a/lib/xmerl/test/xmerl_xsd_lib.erl
+++ b/lib/xmerl/test/xmerl_xsd_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -32,7 +32,7 @@
-compile(export_all).
--include("test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
-include("xmerl.hrl").
-include("xmerl_xsd.hrl").
-include_lib("kernel/include/file.hrl").
@@ -43,10 +43,8 @@ compare_test_results(Config, ST, IT) ->
ResIT=compare_instance_test_results(IT),
io:format("compare_test_results:~n ST = ~p~n IT = ~p~n ResST = ~p~n ResIT = ~p~n",[ST, IT, ResST, ResIT]),
case process_reference_results(Config, ResST, ResIT) of
- error ->
- error;
- Diff ->
- return_results(Diff, ResST, ResIT, length(ST)+length(IT))
+ error -> error;
+ Diff -> return_results(Diff, ResST, ResIT, length(ST)+length(IT))
end.
compare_schema_test_results(ST) ->
@@ -58,7 +56,7 @@ return_results({SkippedN, Diff},{STErrs, _},{ITErrs, _}, TotN) ->
NumErrs = length(STErrs ++ ITErrs),
case NumErrs == TotN of
true when TotN > 0 ->
- ?line exit(all_tests_cases_failed);
+ exit(all_tests_cases_failed);
_ ->
return_results2(Diff, TotN - NumErrs, SkippedN, TotN)
end.
@@ -76,29 +74,26 @@ return_results2({[], [], [], []}, NumSucc, SkippedN, TotN) ->
{comment,io_lib:format("~p successful tests, ~p skipped tests of totally ~p test cases.~n",
[NumSucc, SkippedN, TotN])};
return_results2({NewFail, NewSuccess, NewMal, NewNotMal}, NumSucc, SkippedN, TotN) ->
- NFComm =
- case NewFail of
- [] -> "";
- _ -> io_lib:format("These ~p tests are new failures: ~p~n",
- [length(NewFail), NewFail])
- end,
- NSComm =
- case NewSuccess of
- [] -> "";
- _ -> io_lib:format("These ~p skipped tests are new succeeding cases: ~p~n",
- [length(NewSuccess), NewSuccess])
- end,
- NMComm =
- case NewMal of
- [] -> "";
- _ -> io_lib:format("These ~p tests are now malicious: ~p~n",
- [length(NewMal), NewMal])
- end,
- NNMComm =
- case NewNotMal of
- [] -> "";
- _ -> io_lib:format("These ~p skipped tests were malicious, but succeeds now: ~p~n", [length(NewNotMal), NewNotMal])
- end,
+ NFComm = case NewFail of
+ [] -> "";
+ _ -> io_lib:format("These ~p tests are new failures: ~p~n",
+ [length(NewFail), NewFail])
+ end,
+ NSComm = case NewSuccess of
+ [] -> "";
+ _ -> io_lib:format("These ~p skipped tests are new succeeding cases: ~p~n",
+ [length(NewSuccess), NewSuccess])
+ end,
+ NMComm = case NewMal of
+ [] -> "";
+ _ -> io_lib:format("These ~p tests are now malicious: ~p~n",
+ [length(NewMal), NewMal])
+ end,
+ NNMComm = case NewNotMal of
+ [] -> "";
+ _ -> io_lib:format("These ~p skipped tests were malicious, but succeeds now: ~p~n",
+ [length(NewNotMal), NewNotMal])
+ end,
ct:comment(io_lib:format("~p successful tests, ~p skipped tests of totally ~p test cases. ~n" ++
NFComm ++ NSComm ++ NMComm ++ NNMComm, [NumSucc, SkippedN, TotN])),
[] = NewFail.
@@ -109,7 +104,7 @@ return_results2({NewFail, NewSuccess, NewMal, NewNotMal}, NumSucc, SkippedN, Tot
process_reference_results(Config, {ErrsST, MalST}, {ErrsIT, MalIT}) ->
{RefFailed, RefMalicious} = xsd_reference_log(Config),
-io:format("A: ~p : ~p\n\n",[RefFailed, RefMalicious]),
+ io:format("A: ~p : ~p\n\n",[RefFailed, RefMalicious]),
AllErrs = ErrsST ++ ErrsIT,
AllMals = MalST ++ MalIT,
%% test cases failed now but succeeded in reference results.
@@ -121,44 +116,45 @@ io:format("A: ~p : ~p\n\n",[RefFailed, RefMalicious]),
%% test cases succeeded now but malicious in reference results.
NewNotMal = [X||X<-RefMalicious, lists:member(X, AllMals) == false],
write_in_log(Config, AllErrs, AllMals),
-% io:format("process_reference_results:~n AllErrs = ~p~n NewFailures = ~p~n",[AllErrs,NewFailures]),
+ % io:format("process_reference_results:~n AllErrs = ~p~n NewFailures = ~p~n",[AllErrs,NewFailures]),
{length(RefFailed) + length(RefMalicious), {NewFailures, NewSucceeds, NewMalicious, NewNotMal}}.
xsd_reference_log(Config) ->
- DataDir = ?config(data_dir, Config),
- Suite = ?config(suite, Config),
+ DataDir = datadir(Config),
+ Suite = proplists:get_value(suite, Config),
SuiteReferenceLog =
- filename:join([DataDir, lists:concat([Suite, "_failed_cases.log"])]),
-io:format("B: ~p\n\n",[SuiteReferenceLog]),
+ filename:join([DataDir,lists:concat([Suite,"_failed_cases.log"])]),
+ io:format("B: ~p\n\n",[SuiteReferenceLog]),
case file:consult(SuiteReferenceLog) of
- {ok,List} when is_list(List) ->
-io:format("C: ~p\n\n",[List]),
- case lists:keysearch(?config(testcase, Config), 1, List) of
- {value,{_, TCRefFails}} ->
-io:format("D: ~p\n\n",[TCRefFails]),
- TCRefFails;
- _ ->
-io:format("D: ~no result\n\n",[]),
- {[], []}
- end;
- _ ->
- {[], []}
+ {ok,List} when is_list(List) ->
+ io:format("C: ~p\n\n",[List]),
+ case lists:keysearch(proplists:get_value(testcase, Config), 1, List) of
+ {value,{_, TCRefFails}} ->
+ io:format("D: ~p\n\n",[TCRefFails]),
+ TCRefFails;
+ _ ->
+ io:format("D: ~no result\n\n",[]),
+ {[], []}
+ end;
+ _ ->
+ {[], []}
end.
write_in_log(_Config, [], []) ->
ok;
write_in_log(Config, AllErrs, AllMals) ->
- ?line LogFileName = ?config(xmerl_error_log, Config),
+ LogFileName = proplists:get_value(xmerl_error_log, Config),
{ok,IO}=file:open(LogFileName, [append]),
- ?line TestCase = ?config(testcase, Config),
+ TestCase = proplists:get_value(testcase, Config),
io:format(IO,"{~p,{~p,~p}}.~n", [TestCase, AllErrs, AllMals]),
file:close(IO),
ok.
schema_test(Config,FileName,XsdBase,Validity) ->
ModuleName = filename:basename(FileName),
- DataDir = ?config(data_dir, Config),
- case xmerl_xsd:process_schema(filename:join([DataDir, FileName]), [{xsdbase,filename:join([DataDir, XsdBase])}]) of
+ DataDir = datadir(Config),
+ case xmerl_xsd:process_schema(filename:join([DataDir, FileName]),
+ [{xsdbase,filename:join([DataDir, XsdBase])}]) of
{error, enoent} ->
{{ModuleName, enoent},#xsd_state{}};
{Ok, S} ->
@@ -181,49 +177,49 @@ schema_test(Config,FileName,XsdBase,Validity) ->
end.
schema_test(Config, FileName, XsdBase, Validity, AccState) ->
ModuleName = filename:basename(FileName),
- DataDir = ?config(data_dir, Config),
+ DataDir = datadir(Config),
case xmerl_xsd:process_schema(filename:join([DataDir, FileName]),
- [{xsdbase, filename:join([DataDir, XsdBase])}, AccState]) of
- {error, enoent} ->
- {{ModuleName, enoent}, AccState};
- {Ok, S} ->
- case Validity of
- valid when Ok == ok ->
- {{ModuleName, S#xsd_state.errors == []}, S};
- invalid when Ok == error ->
- {{ModuleName, no_internal_error(S)}, AccState};
- notKnown ->
- {{ModuleName, true}, AccState};
- valid ->
- {{ModuleName, false}, AccState};
- _ ->
- {{ModuleName, false}, S}
- end
+ [{xsdbase,filename:join([DataDir, XsdBase])}, AccState]) of
+ {error, enoent} ->
+ {{ModuleName, enoent}, AccState};
+ {Ok, S} ->
+ case Validity of
+ valid when Ok == ok ->
+ {{ModuleName, S#xsd_state.errors == []}, S};
+ invalid when Ok == error ->
+ {{ModuleName, no_internal_error(S)}, AccState};
+ notKnown ->
+ {{ModuleName, true}, AccState};
+ valid ->
+ {{ModuleName, false}, AccState};
+ _ ->
+ {{ModuleName, false}, S}
+ end
end.
instance_test(Config, FileName, XMLBase, Validity, State) ->
ModuleName = filename:basename(FileName),
- DataDir = ?config(data_dir, Config),
+ DataDir = datadir(Config),
case xmerl_scan:file(filename:join([DataDir, FileName]),
- [{xmlbase, filename:join([DataDir, XMLBase])}]) of
- {error, enoent} ->
- {ModuleName, enoent};
- {E, _} ->
- {VE, S2} = xmerl_xsd:validate(E, State),
- case Validity of
- valid when is_record(VE, xmlElement) ->
- case S2#xsd_state.errors of
- [] -> ok;
- _ -> io:format("test case ~p failed.~nValidity: ~p~nValidation result:~p~n", [FileName, Validity, VE])
- end,
- {ModuleName, S2#xsd_state.errors == []};
- invalid when VE == error ->
- {ModuleName, no_internal_error(S2)};
- notKnown ->
- {ModuleName, true};
- _ ->
- io:format("test case ~p failed.~nValidity: ~p~nValidation result:~p~n", [FileName, Validity, VE]),
- {ModuleName,false}
- end
+ [{xmlbase,filename:join([DataDir, XMLBase])}]) of
+ {error, enoent} ->
+ {ModuleName, enoent};
+ {E, _} ->
+ {VE, S2} = xmerl_xsd:validate(E, State),
+ case Validity of
+ valid when is_record(VE, xmlElement) ->
+ case S2#xsd_state.errors of
+ [] -> ok;
+ _ -> io:format("test case ~p failed.~nValidity: ~p~nValidation result:~p~n", [FileName, Validity, VE])
+ end,
+ {ModuleName, S2#xsd_state.errors == []};
+ invalid when VE == error ->
+ {ModuleName, no_internal_error(S2)};
+ notKnown ->
+ {ModuleName, true};
+ _ ->
+ io:format("test case ~p failed.~nValidity: ~p~nValidation result:~p~n", [FileName, Validity, VE]),
+ {ModuleName,false}
+ end
end.
no_internal_error(R) ->
@@ -236,8 +232,8 @@ no_internal_error(R) ->
unpack(Config, Suite) ->
TarFile = suite_tar(Suite),
- ?line file:set_cwd(?config(data_dir, Config)),
- ?line ok=erl_tar:extract(TarFile, [compressed]),
+ file:set_cwd(datadir(Config)),
+ ok=erl_tar:extract(TarFile, [compressed]),
change_mode(filename:rootname(TarFile, ".tar.gz")).
suite_tar(sun) ->
@@ -250,45 +246,45 @@ suite_tar(nist) ->
change_mode(Files) ->
change_mode3(Files).
change_mode2(Dir)->
- ?line {ok, CWD} = file:get_cwd(),
- ?line {ok, FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD, Dir])),
+ {ok, CWD} = file:get_cwd(),
+ {ok, FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD, Dir])),
change_mode3(FileList),
- ?line file:set_cwd(CWD).
+ file:set_cwd(CWD).
change_mode3([]) ->
ok;
change_mode3([F |Fs]) ->
case filelib:is_dir(F) of
- true ->
- chmod(F),
- change_mode2(F);
- _ ->
- chmod(F)
+ true ->
+ chmod(F),
+ change_mode2(F);
+ _ ->
+ chmod(F)
end,
change_mode3(Fs).
chmod(F) ->
case file:read_file_info(F) of
- {ok, FileInfo} ->
- Mode= FileInfo#file_info.mode,
- file:write_file_info(F, FileInfo#file_info{mode=8#00777 bor Mode});
- _ ->
- ok
+ {ok, FileInfo} ->
+ Mode= FileInfo#file_info.mode,
+ file:write_file_info(F, FileInfo#file_info{mode=8#00777 bor Mode});
+ _ ->
+ ok
end.
rmdir(Config, Suite) ->
- ?line file:set_cwd(?config(data_dir, Config)),
+ file:set_cwd(datadir(Config)),
SuiteDir = filename:rootname(suite_tar(Suite), ".tar.gz"),
- ?line ok=rm_f_(SuiteDir).
+ ok=rm_f_(SuiteDir).
%% Dir is a directory
rm_f_(Dir) ->
- ?line {ok, CWD} = file:get_cwd(),
- ?line {ok, FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD, Dir])),
+ {ok, CWD} = file:get_cwd(),
+ {ok, FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD, Dir])),
rm_files(FileList),
- ?line file:set_cwd(CWD),
- ? line ok = file:del_dir(Dir).
+ file:set_cwd(CWD),
+ ok = file:del_dir(Dir).
rm_files([])->
ok;
@@ -298,25 +294,30 @@ rm_files([F |Fs]) ->
rm_f_(F);
_ ->
io:format("rm_files: ~p~n", [F]),
- ?line ok = file:delete(F)
+ ok = file:delete(F)
end,
rm_files(Fs).
create_error_log_file(Config, Suite) ->
- ?line {{Y, M, D}, {H, Min, S}} = calendar:local_time(),
+ {{Y, M, D}, {H, Min, S}} = calendar:local_time(),
DTString=lists:concat([Y, "-", M,"-", D, "_", H, ".", Min, ".", S]),
FileName = lists:concat([Suite, "_", DTString, ".errorlog"]),
-%% ?line {ok,_IO} = file:open(filename:join([?config(priv_dir,Config),
+%% {ok,_IO} = file:open(filename:join([privdir(Config),
%% FileName]),[append]).
-%% ?line {ok,_IO} = file:open(FileName,[append]).
- io:format("error log file: ~p~n", [filename:join([?config(priv_dir,Config), FileName])]),
- {ok, filename:join([?config(priv_dir,Config), FileName])}.
+%% {ok,_IO} = file:open(FileName,[append]).
+ io:format("error log file: ~p~n", [filename:join([privdir(Config), FileName])]),
+ {ok, filename:join([privdir(Config), FileName])}.
close_error_log_file(Config) ->
case lists:keysearch(xmerl_error_log, 1, Config) of
- {value,{_, IO}} ->
- file:close(IO);
- _ ->
- ok
+ {value,{_, IO}} ->
+ file:close(IO);
+ _ ->
+ ok
end.
+
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+datadir(Config) ->
+ proplists:get_value(data_dir, Config).
diff --git a/lib/xmerl/vsn.mk b/lib/xmerl/vsn.mk
index 09d81e0533..a78a035a1f 100644
--- a/lib/xmerl/vsn.mk
+++ b/lib/xmerl/vsn.mk
@@ -1 +1 @@
-XMERL_VSN = 1.3.10
+XMERL_VSN = 1.3.11